/* LumGem Cart — only loaded on is_cart() (see inc/enqueue.php). */

/**
 * "Soft Pop Luxury" tokens, scoped to `body.woocommerce-cart` (WooCommerce's
 * own body class on this page, is_cart() — never leaks onto Product/
 * Checkout/My Account even if this file were somehow loaded elsewhere).
 * Declared on <body> rather than `.lumgem-cart` specifically so the mobile
 * sticky bar (assets/js/cart.js appends it directly to <body>, as a
 * sibling of `.lumgem-cart` rather than a descendant) can also use these
 * variables. Same values as the product page's `.single-product` tokens
 * (see single-product.css) — one shared palette definition, not a second
 * copy that could drift.
 */
body.woocommerce-cart {
	--lumgem-bg: #FFFDFC;
	--lumgem-surface: #FFFFFF;
	--lumgem-blush: #FBEDEA;
	--lumgem-champagne: #F7F1E8;
	--lumgem-gold: #C9953E;
	--lumgem-gold-hover: #AD7A2D;
	--lumgem-coral: #D96F5D;
	--lumgem-emerald: #12684F;
	--lumgem-text: #1D1916;
	--lumgem-muted: #6F655F;
	--lumgem-border: #E8DED7;
}

/* --------------------------------------------------------------------------
   Editorial shopping-bag composition
   The cart remains a native WooCommerce form, but no longer presents its
   contents as a boxed data table. This layer intentionally owns the final
   visual hierarchy for both desktop and mobile.
   -------------------------------------------------------------------------- */
.woocommerce-cart .lumgem-cart__main {
	min-width: 0;
}

.woocommerce-cart .lumgem-item-summary {
	margin: 0;
	padding: 2px 0 14px;
	background: transparent;
	border: 0;
	border-bottom: 1px solid #ded7cd;
}

.woocommerce-cart .lumgem-item-summary__title {
	font-family: var(--lumgem-font-heading);
	font-size: 21px;
	font-weight: 400;
	letter-spacing: 0.01em;
	text-transform: uppercase;
}

.woocommerce-cart .lumgem-item-summary__count {
	margin-left: 8px;
	color: #77716a;
	font-size: 11px;
}

.woocommerce-cart table.lumgem-cart-items.cart,
.woocommerce-cart table.lumgem-cart-items.cart tbody {
	display: block;
	width: 100%;
	margin: 0;
	border: 0;
	border-collapse: collapse;
	background: transparent;
}

.woocommerce-cart table.lumgem-cart-items.cart thead,
.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-actions {
	display: none;
}

.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card {
	position: relative;
	box-sizing: border-box;
	width: 100%;
	margin: 0;
	background: transparent;
	border: 0;
	border-bottom: 1px solid #ded7cd;
	box-shadow: none;
}

.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card td {
	box-sizing: border-box;
	min-width: 0;
	background: transparent;
	border: 0;
	box-shadow: none;
}

.woocommerce-cart .lumgem-cart-item-card__edit-options {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	margin-top: 10px;
	color: var(--lumgem-emerald);
	font-size: 12px;
	font-weight: 600;
	text-decoration: none;
}

.woocommerce-cart .lumgem-cart-item-card__edit-options:hover,
.woocommerce-cart .lumgem-cart-item-card__edit-options:focus-visible {
	color: #002f28;
	text-decoration: underline;
	text-underline-offset: 3px;
}

.woocommerce-cart .lumgem-cart-item-card__actions {
	display: flex;
	align-items: center;
	gap: 22px;
	width: 100%;
}

.woocommerce-cart .lumgem-cart-item-card__actions::before,
.woocommerce-cart .lumgem-cart-item-card__action + .lumgem-cart-item-card__action::before {
	display: none;
}

.woocommerce-cart .lumgem-scope .lumgem-cart-item-card__actions .lumgem-cart-item-card__action,
.woocommerce-cart .lumgem-cart-item-card__actions .lumgem-cart-item-card__action,
.woocommerce-cart a.lumgem-cart-item-card__remove.lumgem-cart-item-card__action {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 7px;
	width: auto;
	height: 34px;
	min-width: 0;
	padding: 0;
	background: transparent;
	border: 0;
	border-radius: 0;
	color: #5f5a54;
	font-size: 11px;
	font-weight: 400;
	line-height: 1;
	text-decoration: none;
}

.woocommerce-cart .lumgem-cart-item-card__actions .lumgem-cart-item-card__action:hover,
.woocommerce-cart .lumgem-cart-item-card__actions .lumgem-cart-item-card__action:focus-visible,
.woocommerce-cart a.lumgem-cart-item-card__remove.lumgem-cart-item-card__action:hover,
.woocommerce-cart a.lumgem-cart-item-card__remove.lumgem-cart-item-card__action:focus-visible {
	background: transparent;
	color: var(--lumgem-emerald);
	text-decoration: underline;
	text-underline-offset: 3px;
}

.woocommerce-cart .lumgem-cart-item-card__actions .lumgem-cart-item-card__action svg {
	width: 17px;
	height: 17px;
	flex: 0 0 17px;
}

@media (min-width: 1024px) {
	.woocommerce-cart .lumgem-cart__grid {
		grid-template-columns: minmax(0, 1.85fr) minmax(360px, 1fr);
		gap: 30px;
		align-items: start;
	}

	.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card {
		display: grid;
		grid-template-columns: 24px minmax(180px, 26%) minmax(230px, 1fr) minmax(116px, 132px);
		grid-template-areas:
			"remove thumb name price"
			"remove thumb name qty"
			"remove thumb actions actions";
		align-items: start;
		gap: 7px 18px;
		min-height: 236px;
		padding: 18px 0;
	}

	.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card td {
		padding: 0;
		text-align: left;
	}

	.woocommerce-cart .lumgem-cart-item-card .product-remove {
		grid-area: remove;
		padding-top: 6px;
	}

	.woocommerce-cart .lumgem-cart-item-card .product-thumbnail {
		grid-area: thumb;
		align-self: stretch;
	}

	.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail a {
		display: flex;
		align-items: center;
		justify-content: center;
		width: 100%;
		height: 100%;
		min-height: 198px;
	}

	.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail img {
		width: 100%;
		height: 100%;
		max-width: 230px;
		max-height: 210px;
		aspect-ratio: 1 / 1;
		object-fit: contain;
		background: #fff;
		border: 0;
		border-radius: 0;
	}

	.woocommerce-cart .lumgem-cart-item-card .product-name {
		grid-area: name;
		padding-top: 3px;
	}

	.woocommerce-cart .lumgem-cart-item-card .product-name > a {
		display: block;
		max-width: 410px;
		font-family: var(--lumgem-font-heading);
		font-size: clamp(17px, 1.18vw, 20px);
		font-weight: 400;
		line-height: 1.32;
		letter-spacing: -0.01em;
	}

	.woocommerce-cart .lumgem-cart-item-card__sku {
		margin-top: 8px;
		color: #77716a;
		font-size: 10px;
		letter-spacing: 0.03em;
	}

	.woocommerce-cart .lumgem-cart-item-card__variants {
		margin-top: 10px;
		color: #4f4a44;
		font-size: 12px;
	}

	.woocommerce-cart .lumgem-cart-item-card__variants dl.variation {
		display: grid;
		grid-template-columns: auto 1fr;
		gap: 5px 10px;
		margin: 0;
	}

	.woocommerce-cart .lumgem-cart-item-card__variants dl.variation dt,
	.woocommerce-cart .lumgem-cart-item-card__variants dl.variation dd,
	.woocommerce-cart .lumgem-cart-item-card__variants dl.variation p {
		float: none;
		clear: none;
		width: auto;
		margin: 0;
		padding: 0;
	}

	.woocommerce-cart .lumgem-cart-item-card .product-price {
		grid-area: price;
		justify-self: end;
		padding-top: 4px;
		text-align: right;
	}

	.woocommerce-cart .lumgem-cart-item-card__sale-price {
		justify-content: flex-end;
		gap: 6px;
		padding: 0;
		background: transparent;
	}

	.woocommerce-cart .lumgem-cart-item-card__sale-price del {
		font-size: 11px;
	}

	.woocommerce-cart .lumgem-cart-item-card__sale-price ins {
		font-size: 15px;
		font-weight: 600;
		color: #171714;
	}

	.woocommerce-cart .lumgem-cart-item-card__sale-price > span {
		padding: 3px 5px;
		font-size: 9px;
	}

	.woocommerce-cart .lumgem-cart-item-card .product-quantity {
		grid-area: qty;
		justify-self: end;
		align-self: start;
	}

	.woocommerce-cart .lumgem-cart-item-card .product-actions {
		position: static;
		grid-area: actions;
		align-self: end;
		justify-self: stretch;
		margin: 8px 0 0;
		padding: 10px 0 0;
		border-top: 1px solid #e7e0d7;
	}

	.woocommerce-cart .lumgem-cart-item-card .product-actions .lumgem-cart-item-card__actions {
		justify-content: flex-end;
	}

	.woocommerce-cart .lumgem-cart__aside {
		position: sticky;
		top: 112px;
		padding: 20px 18px;
		background: #fff;
		border: 1px solid #ded7cd;
		box-shadow: none;
	}
}

@media (max-width: 1023px) {
	.woocommerce-cart .lumgem-item-summary {
		padding: 4px 0 12px;
	}

	.woocommerce-cart .lumgem-item-summary__title {
		font-size: 18px;
	}

	.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card {
		display: grid;
		grid-template-columns: 112px minmax(0, 1fr);
		grid-template-areas:
			"thumb name"
			"thumb price"
			"thumb qty"
			"actions actions";
		align-items: start;
		gap: 8px 12px;
		min-height: 0;
		padding: 15px 0 12px;
	}

	.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card td {
		padding: 0;
		text-align: left !important;
	}

	.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card td::before {
		display: none !important;
	}

	.woocommerce-cart .lumgem-cart-item-card .product-remove {
		position: absolute;
		z-index: 2;
		top: 19px;
		left: 4px;
		width: auto;
	}

	.woocommerce-cart .lumgem-cart-item-card .product-remove:empty {
		display: none;
	}

	.woocommerce-cart .lumgem-cart-item-card .product-thumbnail {
		grid-area: thumb;
	}

	.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail,
	.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail a {
		display: flex;
		align-items: center;
		justify-content: center;
		width: 112px;
		height: 132px;
	}

	.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail img {
		width: 112px;
		height: 112px;
		max-width: 112px;
		object-fit: contain;
		background: #fff;
		border: 0;
		border-radius: 0;
	}

	.woocommerce-cart .lumgem-cart-item-card .product-name {
		grid-area: name;
		padding-top: 1px;
	}

	.woocommerce-cart .lumgem-cart-item-card .product-name > a {
		display: -webkit-box;
		overflow: hidden;
		-webkit-box-orient: vertical;
		-webkit-line-clamp: 3;
		font-family: var(--lumgem-font-heading);
		font-size: 15px;
		font-weight: 400;
		line-height: 1.34;
	}

	.woocommerce-cart .lumgem-cart-item-card__sku {
		margin-top: 6px;
		font-size: 9px;
	}

	.woocommerce-cart .lumgem-cart-item-card__variants {
		margin-top: 5px;
		font-size: 11px;
	}

	.woocommerce-cart .lumgem-cart-item-card__variants dl.variation {
		display: flex;
		flex-wrap: wrap;
		align-items: baseline;
		gap: 3px 5px;
		margin: 0;
	}

	.woocommerce-cart .lumgem-cart-item-card__variants dl.variation dt,
	.woocommerce-cart .lumgem-cart-item-card__variants dl.variation dd,
	.woocommerce-cart .lumgem-cart-item-card__variants dl.variation p {
		display: inline;
		float: none;
		clear: none;
		width: auto;
		margin: 0;
		padding: 0;
	}

	.woocommerce-cart .lumgem-cart-item-card__edit-options {
		margin-top: 6px;
		font-size: 10px;
	}

	.woocommerce-cart .lumgem-cart-item-card .product-price {
		grid-area: price;
		justify-self: start;
	}

	.woocommerce-cart .lumgem-cart-item-card__sale-price {
		justify-content: flex-start;
		gap: 6px;
		padding: 0;
		background: transparent;
		white-space: normal;
	}

	.woocommerce-cart .lumgem-cart-item-card__sale-price del {
		font-size: 10px;
	}

	.woocommerce-cart .lumgem-cart-item-card__sale-price ins {
		font-size: 13px;
		font-weight: 600;
		color: #171714;
	}

	.woocommerce-cart .lumgem-cart-item-card__sale-price > span {
		padding: 3px 5px;
		font-size: 8px;
	}

	.woocommerce-cart .lumgem-cart-item-card .product-quantity {
		grid-area: qty;
		justify-self: start;
	}

	.woocommerce-cart .lumgem-cart-item-card .product-actions {
		position: static;
		grid-column: 1 / -1 !important;
		grid-row: auto !important;
		align-self: auto;
		justify-self: stretch;
		margin: 4px 0 0;
		padding: 8px 0 0;
		border-top: 1px solid #e7e0d7;
	}

	.woocommerce-cart .lumgem-cart-item-card .product-actions .lumgem-cart-item-card__actions {
		justify-content: flex-end;
		gap: 20px;
	}

	.woocommerce-cart .lumgem-cart-item-card .product-subtotal {
		display: none !important;
	}

	.woocommerce-cart .lumgem-cart__aside {
		padding: 16px 0 0;
		background: transparent;
		border: 0;
		box-shadow: none;
	}
}

@media (max-width: 374px) {
	.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card {
		grid-template-columns: 100px minmax(0, 1fr);
		gap: 7px 10px;
	}

	.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail,
	.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail a {
		width: 100px;
		height: 122px;
	}

	.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail img {
		width: 100px;
		height: 100px;
		max-width: 100px;
	}
}

.lumgem-cart {
	max-width: 1200px;
	margin: 0 auto;
	padding: var(--lumgem-space-4) var(--lumgem-space-5);
	padding-bottom: 80px; /* room for the mobile sticky bar */
	background: var(--lumgem-bg);
}

/* Three-step purchase-flow indicator. Plain text/line styling — not a
   Jeulia brand element — and never marks Shipping & Payment/Order Complete
   as done, since the visitor hasn't reached them yet. Bottom margin kept
   small (space-2, not the old space-5/24px) — the Round 3 visual audit
   flagged this stacking with the container's own top padding into a 48px
   gap before anything useful (shipping progress/items) appeared. */
.lumgem-cart-steps ol {
	display: flex;
	align-items: center;
	justify-content: center;
	list-style: none;
	margin: 0 0 var(--lumgem-space-2);
	padding: 0;
	gap: var(--lumgem-space-2);
	font-size: 13px;
	color: var(--lumgem-muted);
}

.lumgem-cart-steps li {
	position: relative;
	padding-right: var(--lumgem-space-4);
}

.lumgem-cart-steps li:not(:last-child)::after {
	content: '>';
	position: absolute;
	right: 2px;
	color: var(--lumgem-border);
}

.lumgem-cart-steps li.is-current {
	color: var(--lumgem-text);
	font-weight: 600;
}

.lumgem-cart__grid {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: var(--lumgem-space-6);
	align-items: start;
}

.lumgem-cart__main,
.lumgem-cart__aside {
	min-width: 0;
}

/**
 * Round 3 visual audit: the old champagne-card treatment (bg + border +
 * radius) made Order Summary read as "a beige widget" rather than a clear
 * conversion focal point, and its own padding pushed the "Order Summary"
 * title down out of alignment with the item list's top edge in the left
 * column. White/near-white background, no border box, no radius — the
 * Grand Total row and gold Checkout button below carry the visual weight
 * instead of a background tint.
 */
.lumgem-cart__aside {
	background: var(--lumgem-surface, #fff);
	padding: 0;
}

.lumgem-cart__aside-title {
	font-size: 18px;
	color: var(--lumgem-text);
	margin: 0 0 var(--lumgem-space-3);
}

/* Compact, thin-line free-shipping status — was a champagne rounded card
   (73px tall); now a plain white row with a single bottom rule, closer to
   the audit's ~58-72px target and far less visually heavy. */
.lumgem-shipping-progress {
	margin-bottom: var(--lumgem-space-3);
	font-size: 12px;
	background: none;
	border: none;
	border-bottom: 1px solid var(--lumgem-border);
	border-radius: 0;
	padding: var(--lumgem-space-2) 0 var(--lumgem-space-3);
}

.lumgem-shipping-progress p {
	margin: 0 0 var(--lumgem-space-1);
}

.lumgem-shipping-progress__bar {
	display: block;
	height: 4px;
	border-radius: 2px;
	background: var(--lumgem-border);
	overflow: hidden;
	margin-top: var(--lumgem-space-2);
}

.lumgem-shipping-progress__bar span {
	display: block;
	height: 100%;
	background: var(--lumgem-gold);
}

.lumgem-item-summary {
	display: flex;
	align-items: center;
	justify-content: space-between;
	font-size: 14px;
	margin-bottom: var(--lumgem-space-3);
}

/* Select-all + per-row select checkboxes — warm gold to match the rest of
   the LumGem palette instead of the browser's default blue. */
.lumgem-item-summary__select-all,
.lumgem-cart-item-card__select {
	accent-color: var(--lumgem-gold);
}

/**
 * The generic `.lumgem-scope button` reset (1 class + 1 element,
 * specificity (0,0,1,1) — see base.css) otherwise beats a plain 1-class
 * `.lumgem-item-summary__mass-delete` rule (0,0,1,0) outright, rendering it
 * as that reset's solid near-black button — exactly the large dark block
 * P1-3 of the independent audit warned against, and the same recurring
 * specificity bug already fixed elsewhere in this project (accordion
 * toggles, carousel arrows, header icon buttons). Matching the element
 * selector here guarantees this wins regardless of load order.
 */
button.lumgem-item-summary__mass-delete {
	background: none;
	border: none;
	color: var(--lumgem-color-danger);
	text-decoration: underline;
	padding: 0;
}

button.lumgem-item-summary__mass-delete:hover {
	background: none;
	color: var(--lumgem-color-danger);
}

.lumgem-item-summary__mass-delete:disabled {
	opacity: 0.5;
	cursor: wait;
}

/* Real gift cart-item display (template-parts/cart-free-gift.php) — only
   ever rendered when WC()->cart genuinely contains the auto-added $0
   Gift-Ready Package (see LumGemOps\Cart\FreeGiftService), never a
   decorative card for an item that isn't actually in the cart. */
.lumgem-cart-free-gift {
	margin: var(--lumgem-space-4) 0;
}

.lumgem-cart-free-gift__title {
	font-size: 15px;
	margin-bottom: var(--lumgem-space-2);
}

.lumgem-cart-free-gift__item {
	display: flex;
	align-items: center;
	gap: var(--lumgem-space-2);
	padding: var(--lumgem-space-2);
	border: 1px solid var(--lumgem-border);
	border-radius: 8px;
	background: var(--lumgem-blush);
}

.lumgem-cart-free-gift__image img {
	display: block;
	width: 56px;
	height: 56px;
	object-fit: cover;
	border-radius: var(--lumgem-radius);
}

.lumgem-cart-free-gift__body {
	display: flex;
	flex-direction: column;
	flex: 1 1 auto;
	min-width: 0;
}

.lumgem-cart-free-gift__name {
	font-weight: 600;
}

.lumgem-cart-free-gift__note {
	font-size: 12px;
	color: var(--lumgem-color-muted);
}

.lumgem-cart-free-gift__price {
	display: flex;
	flex-direction: column;
	align-items: flex-end;
	font-weight: 600;
	color: var(--lumgem-emerald);
	flex-shrink: 0;
}

.lumgem-cart-free-gift__price-zero {
	font-size: 11px;
	font-weight: 400;
	color: var(--lumgem-muted);
	text-decoration: line-through;
}

.lumgem-cart-free-gift__qty {
	font-size: 12px;
	color: var(--lumgem-color-muted);
	flex-shrink: 0;
}

/* Non-editable quantity text on the gift's (hidden, since it's excluded
   from the main product loop entirely) row — kept for any other renderer
   that might still call woocommerce_cart_item_quantity on it. */
.lumgem-free-gift-qty {
	display: inline-block;
	padding: 0 var(--lumgem-space-2);
}

/* Cart item rows restyled as cards, no structural HTML change (table kept
   for accessibility / woocommerce_quantity_input() table-cell assumptions). */
.lumgem-cart-items {
	width: 100%;
	border-collapse: collapse;
}

/**
 * Hidden at EVERY width, not just mobile — a visible Product/Price/
 * Quantity/Subtotal/Actions header row is exactly the "beautified admin
 * table" look the Round 3 visual audit flagged on desktop (Jeulia shows a
 * plain product shelf with no column-header matrix). Each `<td>` still
 * carries its own `data-title`/`<label>` for screen readers, so removing
 * the visual header loses no accessible information.
 */
.lumgem-cart-items thead {
	display: none;
}

/**
 * WooCommerce core's own `.woocommerce table.cart td` rule (padding: 9px
 * 12px — its classic default cart-cell padding) has specificity (0,0,2,2),
 * higher than a plain `.lumgem-cart-item-card td` (0,0,1,1) — it was
 * silently winning outright here (confirmed via computed style: 9px 12px,
 * never this rule's intended value, at ANY width, mobile or desktop).
 * Matching table/tr/td elements plus 4 real classes guarantees this wins
 * regardless of stylesheet load order, same fix pattern used throughout
 * this project.
 */
.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card td {
	padding: var(--lumgem-space-2);
	vertical-align: middle;
}

/* One thin divider per item row (not per cell — a line under every cell
   read as an internal table grid, which is the exact "Woo table" feel the
   Round 3 audit asked to remove). Also the positioning context for the
   Edit/Wishlist/Delete cluster, absolutely placed top-right on desktop. */
.lumgem-cart-item-card {
	position: relative;
	border-bottom: 1px solid var(--lumgem-border, var(--lumgem-color-line));
}

/**
 * WooCommerce core's `.woocommerce-cart table.cart img` rule (width: 32px)
 * has specificity (0,0,2,2) — one element point higher than a plain
 * `.lumgem-cart-item-card .product-thumbnail img` (0,0,2,1), so it silently
 * won outright and rendered every cart thumbnail at a fixed 32×32px
 * regardless of this rule. Matching the real classes rendered on this exact
 * table (`cart` and `lumgem-cart-items` both appear in cart.php's `<table
 * class="... cart ... lumgem-cart-items">`) guarantees this exceeds core's
 * specificity outright, regardless of stylesheet load order.
 */
.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail img {
	display: block;
	width: 88px;
	height: 88px;
	max-width: 88px; /* the ambient `.woocommerce img { max-width: 100% }` rule
		resolves against the <td>'s padded content box, not this explicit
		size, and was silently shrinking the image below 88px */
	object-fit: cover;
	border-radius: 6px;
}

.lumgem-cart-item-card .product-name {
	font-size: 14px;
	font-weight: 600;
	color: var(--lumgem-text, var(--lumgem-color-ink));
}

.lumgem-cart-item-card .product-name a {
	color: inherit;
	text-decoration: none;
}

.lumgem-cart-item-card__sku {
	margin-top: var(--lumgem-space-1);
	font-size: 11px;
	font-weight: 400;
	color: var(--lumgem-muted, var(--lumgem-color-muted));
	letter-spacing: 0.02em;
}

.lumgem-cart-item-card__variants {
	margin-top: var(--lumgem-space-1);
	font-size: 12px;
	font-weight: 400;
	color: var(--lumgem-muted, var(--lumgem-color-muted));
}

.lumgem-cart-item-card__variants:empty {
	display: none;
}

.lumgem-cart-item-card .product-price,
.lumgem-cart-item-card .product-subtotal {
	font-size: 13px;
	color: var(--lumgem-muted, var(--lumgem-color-muted));
}

.lumgem-cart-item-card .product-subtotal {
	font-weight: 700;
	color: var(--lumgem-text, var(--lumgem-color-ink));
}

/* Compact −/quantity/+ stepper wrapping the native `input.qty` (still the
   real WooCommerce input WC_Form_Handler::update_cart_action_cart_updated()
   reads — the stepper buttons just adjust its value, see cart.js). */
.lumgem-qty-stepper {
	display: inline-flex;
	align-items: center;
	border: 1px solid var(--lumgem-border, var(--lumgem-color-line));
	border-radius: 6px;
	overflow: hidden;
	width: fit-content;
}

/**
 * The generic `.lumgem-scope .button, .lumgem-scope button, .lumgem-scope
 * input[type="submit"]` reset (2 classes, specificity 0,0,2,0) beats a
 * plain 1-class `.lumgem-qty-stepper__btn` outright — confirmed via a real
 * screenshot showing the −/+ buttons as solid black squares, the same
 * recurring bug pattern fixed elsewhere in this project. Matching with 3
 * classes (nesting inside the real `.lumgem-qty-stepper` wrapper)
 * guarantees this wins regardless of stylesheet load order. Background is
 * now a light neutral gray (not transparent-over-white, which read as
 * "no button at all", and not the near-black reset) — a real, visibly
 * compact stepper control.
 */
.lumgem-scope .lumgem-qty-stepper .lumgem-qty-stepper__btn {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 32px;
	height: 32px;
	min-width: 32px;
	border: none;
	background: #F0EEEC;
	font-size: 16px;
	line-height: 1;
	color: var(--lumgem-text, var(--lumgem-color-ink));
	cursor: pointer;
	padding: 0;
}

.lumgem-scope .lumgem-qty-stepper .lumgem-qty-stepper__btn:hover {
	background: var(--lumgem-border, #e8ded7);
}

.lumgem-qty-stepper input.qty {
	width: 40px;
	height: 32px;
	border: none;
	border-left: 1px solid var(--lumgem-border, var(--lumgem-color-line));
	border-right: 1px solid var(--lumgem-border, var(--lumgem-color-line));
	text-align: center;
	font-size: 13px;
	padding: 0;
	-moz-appearance: textfield;
}

.lumgem-qty-stepper input.qty::-webkit-inner-spin-button,
.lumgem-qty-stepper input.qty::-webkit-outer-spin-button {
	-webkit-appearance: none;
	margin: 0;
}

/* Edit / Wishlist / Delete icon cluster — each a real ≥44×44px touch
   target (icon itself stays visually small; padding fills the rest), not a
   default-WC `a.remove` styled as raw text. */
.lumgem-cart-item-card__actions {
	display: flex;
	align-items: center;
	gap: var(--lumgem-space-2);
}

/**
 * The generic `.lumgem-scope .button, .lumgem-scope button, .lumgem-scope
 * input[type="submit"]` reset (2 classes, specificity 0,0,2,0 — see
 * components.css) matches the Wishlist toggle here (a real `<button>`) and
 * otherwise beats a plain 1-class `.lumgem-cart-item-card__action` outright,
 * rendering it as that reset's solid near-black button — confirmed via a
 * real screenshot, the exact "black square icon" bug already fixed this
 * same way elsewhere in this project (header icons, carousel arrows). Edit/
 * Remove are `<a>` tags so the reset's button-only selectors never touched
 * them, which is why only Wishlist showed the bug. Matching with 3 classes
 * (nesting inside the real `.lumgem-cart-item-card__actions` wrapper)
 * guarantees this wins regardless of stylesheet load order.
 */
.lumgem-scope .lumgem-cart-item-card__actions .lumgem-cart-item-card__action {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 44px;
	height: 44px;
	border: none;
	background: transparent;
	border-radius: 999px;
	color: var(--lumgem-muted, var(--lumgem-color-muted));
	cursor: pointer;
	padding: 0;
	text-decoration: none;
}

.lumgem-cart-item-card__action:hover {
	background: var(--lumgem-champagne, #f5f0ea);
	color: var(--lumgem-text, var(--lumgem-color-ink));
}

.lumgem-cart-item-card__action svg {
	width: 18px;
	height: 18px;
	pointer-events: none;
}

.lumgem-cart-item-card__wishlist.is-active {
	color: var(--lumgem-coral, var(--lumgem-color-accent-dark));
}

.lumgem-cart-item-card__wishlist.is-active svg {
	fill: currentColor;
}

.lumgem-cart-item-card__remove:hover {
	color: var(--lumgem-color-danger);
}

/**
 * WooCommerce core's `.woocommerce a.remove` (width/height: 1em, font-size:
 * 1.5em — sized as a small circular "×" glyph, ~24×24px) matches this real
 * remove link too (it keeps the `remove` class WC_Form_Handler/fragments JS
 * expect) and otherwise wins outright over the plain 1-class
 * `.lumgem-cart-item-card__action` rule above, shrinking it well under the
 * 44×44px touch target every other action icon here already gets. Matching
 * core's own selector shape with one extra ancestor class guarantees this
 * wins regardless of stylesheet load order.
 */
.woocommerce-cart a.lumgem-cart-item-card__remove.lumgem-cart-item-card__action {
	width: 44px;
	height: 44px;
	font-size: inherit;
	line-height: normal;
}

.lumgem-cart-actions {
	padding-top: var(--lumgem-space-3);
}

/**
 * Hidden once cart.js confirms the qty stepper is wired up (real
 * progressive enhancement — see initQtySteppers()'s `.lumgem-js-ready`
 * class): every quantity change already submits a real update
 * automatically, so the native Update Cart button/row is dead visual
 * space once JS has actually loaded, not a required control.
 *
 * A plain `.lumgem-cart-actions.lumgem-js-ready` (2 classes, 0,0,2,0) lost
 * outright to WooCommerce's own woocommerce-smallscreen.css rule
 * `.woocommerce table.shop_table_responsive tr td, .woocommerce-page
 * table.shop_table_responsive tr td { display: block; }` (3 elements + 2
 * classes, 0,0,2,3) — confirmed via an independent audit: the row/button
 * were still rendering at real height, not display:none, on real mobile
 * widths. Matching table/tr/td elements plus every real class on this
 * exact cell guarantees this wins regardless of stylesheet load order.
 */
.woocommerce-cart table.lumgem-cart-items.cart tr td.lumgem-cart-actions.lumgem-js-ready {
	display: none;
}

/**
 * Light gray rounded row + chevron, per the site owner's requested
 * reference layout — Coupon Code (real, clickable, expands the real input
 * below) stacks directly above a visually-matching but NON-interactive
 * "Gift Card — Coming Soon" row (see cart.php's `lumgem-cart-giftcard-row`
 * comment for why that one stays a placeholder). The base
 * `.lumgem-scope .lumgem-accordion-toggle` rule (2 classes, specificity
 * 0,0,2,0 — see components.css) beats a plain 1-class selector outright;
 * matching with 3 classes here guarantees this wins regardless of source
 * order, same fix pattern used throughout this project.
 */
.lumgem-scope .lumgem-cart-coupon-toggle.lumgem-accordion-toggle,
.lumgem-cart-giftcard-row.lumgem-accordion-toggle {
	background: #F5F4F2;
	border: none;
	border-radius: 6px;
	padding: var(--lumgem-space-3) var(--lumgem-space-4);
	margin-bottom: var(--lumgem-space-2);
	font-size: 13px;
	color: var(--lumgem-text);
	justify-content: space-between;
}

.lumgem-scope .lumgem-cart-coupon-toggle.lumgem-accordion-toggle:hover {
	background: #EFEDEA;
}

/* Non-interactive: no hover feedback, no pointer cursor, muted "Coming
   Soon" badge instead of the real toggle's chevron (removed via the
   shared `--static` modifier's `content:none` — see components.css). */
.lumgem-cart-giftcard-row.lumgem-accordion-toggle {
	cursor: default;
}

.lumgem-cart-giftcard-row__badge {
	font-size: 11px;
	color: var(--lumgem-muted);
}

.lumgem-cart-coupon-panel.lumgem-accordion-panel {
	border: none;
	padding: 0;
	scroll-margin-top: 24px;
}

.lumgem-cart-coupon {
	display: flex;
	gap: var(--lumgem-space-2);
	margin: var(--lumgem-space-2) 0 var(--lumgem-space-3);
}

.lumgem-cart-coupon input {
	flex: 1;
}

/**
 * WooCommerce core's `.woocommerce .cart-collaterals .cart_totals` rule
 * (float: right; width: 48%) was written for the OLD two-column collaterals
 * layout (cart_totals + cross-sells side by side) — since cross-sells were
 * relocated out of this hook entirely (see cart-hooks.php), `.cart_totals`
 * ended up floated at just under half the aside column's width, with the
 * other half left as dead space beside it (confirmed via computed style:
 * float:right, width:188px inside a 393px column). Core's OWN
 * woocommerce-smallscreen.css already resets this to `float:none;
 * width:100%` — but only below 768px. Applying that same fix
 * unconditionally here (3 extra classes over core's 3-class selector)
 * guarantees it wins at every width, not just mobile.
 */
.woocommerce-page.woocommerce-cart .cart-collaterals.lumgem-cart-collaterals .cart_totals {
	float: none;
	width: 100%;
}

.lumgem-cart-collaterals .cart_totals table {
	width: 100%;
	font-size: 14px;
	border-collapse: collapse;
}

.lumgem-cart-collaterals .cart_totals th,
.lumgem-cart-collaterals .cart_totals td {
	padding: var(--lumgem-space-2) 0;
	border-bottom: 1px solid var(--lumgem-border);
	text-align: left;
	color: var(--lumgem-text);
}

.lumgem-cart-collaterals .cart_totals td {
	text-align: right;
}

/* Grand Total — dark, bold, right-aligned amount carries the hierarchy on
   its own (Round 3 audit: "don't lean on gold alone" for this row); gold is
   reserved for the Checkout button below it. */
.lumgem-cart-collaterals .order-total th,
.lumgem-cart-collaterals .order-total td {
	font-size: 19px;
	font-weight: 700;
	color: var(--lumgem-text);
	border-bottom: none;
	border-top: 2px solid var(--lumgem-border);
	padding-top: var(--lumgem-space-3);
}

/* "You'll earn N points" note (rewards-hooks.php's
   lumgem_rewards_earn_preview_row()) — sits directly under the Total row,
   in the same card, as a small caption line rather than its own labeled
   "Rewards" row. No border-top of its own (the Total row above already
   has one), tight top padding to read as attached to Total. Visible to
   guests too. */
.lumgem-rewards-earn-note td {
	padding-top: 2px;
	border-bottom: none;
	text-align: left;
}

.lumgem-rewards-earn-preview {
	position: relative;
	display: inline-flex;
	align-items: center;
	gap: 5px;
	color: var(--lumgem-muted);
	font-size: 11px;
}

.lumgem-rewards-earn-preview__multiplier {
	flex: 0 0 auto;
	padding: 1px 5px;
	border-radius: 999px;
	background: var(--lumgem-gold);
	color: #fff;
	font-size: 10px;
	font-weight: 700;
}

.lumgem-scope button.lumgem-rewards-earn-preview__info {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 15px;
	height: 15px;
	min-width: 15px;
	min-height: 15px;
	margin: 0;
	padding: 0;
	border: 1px solid var(--lumgem-gold-hover);
	border-radius: 50%;
	background: transparent;
	box-shadow: none;
	color: var(--lumgem-gold-hover);
	font-size: 9px;
	font-weight: 700;
	line-height: 1;
	cursor: pointer;
}

.lumgem-scope button.lumgem-rewards-earn-preview__info:hover,
.lumgem-scope button.lumgem-rewards-earn-preview__info:focus-visible {
	background: var(--lumgem-gold-hover);
	color: #fff;
}

/* Shared "How Points Work" dialog — see single-product.css's identical
   block for the full rationale; restyled here with cart.css's own local
   token set for visual consistency with the rest of this page. */
.lumgem-rewards-rules-dialog {
	position: fixed;
	top: 50%;
	right: auto;
	bottom: auto;
	left: 50%;
	width: min(360px, calc(100vw - 48px));
	max-height: calc(100vh - 48px);
	max-height: calc(100dvh - 48px);
	margin: 0;
	padding: 22px;
	overflow-y: auto;
	transform: translate(-50%, -50%);
	border: none;
	border-radius: 4px;
	color: var(--lumgem-text);
}

.lumgem-rewards-rules-dialog::backdrop {
	background: rgba(23, 28, 25, .5);
}

.lumgem-rewards-rules-dialog h3 {
	margin: 0 0 14px;
	padding-right: 24px;
	font-size: 16px;
}

.lumgem-rewards-rules-dialog__close {
	position: absolute;
	top: 14px;
	right: 14px;
	border: none;
	background: none;
	color: var(--lumgem-text);
	font-size: 20px;
	line-height: 1;
	cursor: pointer;
}

.lumgem-rewards-rules-dialog__tiers {
	width: 100%;
	margin-bottom: 14px;
	border-collapse: collapse;
	font-size: 13px;
}

.lumgem-rewards-rules-dialog__tiers th,
.lumgem-rewards-rules-dialog__tiers td {
	padding: 6px 4px;
	border-bottom: 1px solid var(--lumgem-border);
	text-align: left;
}

.lumgem-rewards-rules-dialog__tiers th {
	color: var(--lumgem-gold-hover);
	font-weight: 600;
}

.lumgem-rewards-rules-dialog__tiers tr.is-current-tier td {
	font-weight: 700;
}

.lumgem-rewards-rules-dialog p {
	margin: 0 0 8px;
	font-size: 12px;
	line-height: 1.5;
	color: var(--lumgem-muted);
}

.lumgem-rewards-rules-dialog p:last-child {
	margin-bottom: 0;
}

/* Rewards points redemption row (rewards-hooks.php's
   lumgem_rewards_cart_redemption_row()) — a real WC_Cart fee under the
   hood, this is just the row's own presentation. th/td here inherit the
   table's default left/right alignment above, so the whole control block
   spans the td (right-aligned column) rather than trying to fight it. */
.lumgem-rewards-redeem {
	display: flex;
	flex-direction: column;
	align-items: flex-end;
	gap: var(--lumgem-space-2);
	text-align: right;
}

.lumgem-rewards-redeem__hint,
.lumgem-rewards-redeem__status {
	font-size: 12px;
	color: var(--lumgem-muted);
}

.lumgem-scope .lumgem-rewards-redeem__apply,
.lumgem-scope .lumgem-rewards-redeem__remove {
	min-height: 36px;
	padding: 0 var(--lumgem-space-3);
	background: transparent;
	border: 1px solid var(--lumgem-gold);
	color: var(--lumgem-gold-hover);
	font-size: 12px;
	font-weight: 600;
}

.lumgem-scope .lumgem-rewards-redeem__apply:hover,
.lumgem-scope .lumgem-rewards-redeem__remove:hover {
	background: var(--lumgem-champagne);
}

/* Retail Price — real per-item regular-price sum (see cart-totals.php),
   only ever rendered when it's genuinely higher than Subtotal. Muted gray
   strikethrough: a reference point, not the number the customer is
   actually asked to pay. */
.lumgem-cart-collaterals .lumgem-retail-price th,
.lumgem-cart-collaterals .lumgem-retail-price td {
	color: var(--lumgem-muted);
}

.lumgem-cart-collaterals .lumgem-retail-price del {
	text-decoration: line-through;
}

/* Real WooCommerce coupon discount row (only rendered when a coupon is
   actually applied — see cart-totals.php's untouched
   `WC()->cart->get_coupons()` loop) — red, matching the reference layout,
   so the savings actually stand out instead of blending into the same
   gray as every other row. */
.lumgem-cart-collaterals .cart-discount th,
.lumgem-cart-collaterals .cart-discount td {
	color: var(--lumgem-color-danger);
}

/* Coupon not eligible for the currently-selected subset (see
   lumgem_are_applied_coupons_valid_for_selected() in cart-selection.php) —
   muted, not the danger-red used for a real discount, since no amount is
   actually being subtracted right now. */
.lumgem-cart-collaterals .cart-discount.lumgem-coupon-ineligible th,
.lumgem-cart-collaterals .cart-discount.lumgem-coupon-ineligible td {
	color: var(--lumgem-muted);
	font-style: italic;
	font-weight: 400;
}

/* Note under an "Estimated Total" row when real shipping cost isn't
   resolvable yet (see $lumgem_shipping_resolved in cart-totals.php). */
.lumgem-cart-collaterals .lumgem-total-shipping-note td {
	border-bottom: none;
	padding-top: 0;
	padding-bottom: var(--lumgem-space-2);
	text-align: right;
	font-size: 12px;
	font-weight: 400;
	color: var(--lumgem-muted);
}

/* Shipping Saved (see cart-hooks.php's lumgem_cart_totals_extra_rows() —
   only ever rendered when a real amount is computed, currently always 0
   since no paid shipping rate exists anywhere in this store's real zones
   to compare against; see conversation for what's needed to activate it). */
.lumgem-cart-collaterals .lumgem-shipping-saved th,
.lumgem-cart-collaterals .lumgem-shipping-saved td {
	color: var(--lumgem-color-danger);
}

/**
 * Shipping row cleanup — the site owner flagged the native method list +
 * "Shipping to CA." address line + collapsed calculator form as reading
 * like meaningless clutter next to the clean Subtotal/Total rows. The real
 * method list, address text, and "Change address" calculator are ALL kept
 * (this store's real shipping zones only ever have ONE method each today,
 * but the moment a second one is added, customers need to still be able to
 * see/pick it and correct their address for accurate rates) — only the
 * visual weight changes: the method list's default bullet/spacing is
 * stripped so a single method reads as plain text, and the address line +
 * "Change address" are shrunk into a small muted line instead of two
 * separate paragraphs.
 */
.lumgem-cart-collaterals .woocommerce-shipping-methods {
	list-style: none;
	margin: 0;
	padding: 0;
}

.lumgem-cart-collaterals .woocommerce-shipping-destination {
	display: inline;
	font-size: 12px;
	color: var(--lumgem-muted);
	margin: 0;
}

.lumgem-cart-collaterals .shipping-calculator-button {
	font-size: 12px;
	color: var(--lumgem-muted);
	text-decoration: underline;
	margin-left: var(--lumgem-space-1);
}

.lumgem-cart-coupon input {
	min-height: 36px;
	border: 1px solid var(--lumgem-border);
	border-radius: 6px;
	padding: 0 var(--lumgem-space-3);
	font-size: 13px;
}

.lumgem-cart-coupon .button {
	min-height: 36px;
	font-size: 13px;
	white-space: nowrap;
}

.lumgem-cart-coupon input:disabled {
	background: #F5F4F2;
	color: var(--lumgem-text);
	opacity: 1;
	cursor: default;
}

.lumgem-cart-coupon__cancel {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	text-decoration: none;
}

.lumgem-cart-coupon__status {
	margin: 0 0 var(--lumgem-space-3);
	color: #138A2E;
	font-size: 13px;
	line-height: 1.5;
}

.lumgem-cart-coupon__errors {
	margin: 0 0 var(--lumgem-space-3);
	color: var(--lumgem-color-danger);
	font-size: 13px;
	line-height: 1.5;
}

.lumgem-cart-coupon__errors p {
	margin: 0;
}

/* 48-52px tall LumGem warm-gold primary CTA — not Jeulia's orange, and not
   WooCommerce core's default purple. The real rendered classes here are
   `checkout-button button alt wc-forward` (confirmed in-browser) — core's
   own woocommerce.css targets `button.button.alt` at specificity (0,0,2,1),
   which a plain `.wc-proceed-to-checkout .checkout-button` (0,0,2,0) LOSES
   to on the element column alone (this exact "purple button survives" bug
   already happened once on the product page's Add to Cart button — same
   root cause, same fix: match the real .button.alt classes so the class
   count wins outright). */
body.woocommerce-cart .wc-proceed-to-checkout .checkout-button.button.alt {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 100%;
	min-height: 50px;
	text-align: center;
	text-decoration: none;
	font-size: 16px;
	font-weight: 600;
	padding: 0 var(--lumgem-space-4);
	background: var(--lumgem-gold);
	border: 1px solid var(--lumgem-gold);
	border-radius: 8px;
	color: #fff;
}

body.woocommerce-cart .wc-proceed-to-checkout .checkout-button.button.alt .lumgem-cart-checkout-lock {
	width: 17px;
	height: 17px;
	margin-right: 8px;
	fill: none;
	stroke: currentColor;
	stroke-width: 1.8;
	stroke-linecap: round;
	stroke-linejoin: round;
}

.lumgem-cart-item-card__details {
	margin: 12px 0 0;
	border-top: 1px solid #e8e1d7;
	color: #4d4a46;
	font-size: 12px;
}

.lumgem-cart-item-card__details summary {
	display: flex;
	align-items: center;
	justify-content: space-between;
	padding: 10px 0;
	cursor: pointer;
	color: #1d1b18;
	font-size: 12px;
	font-weight: 600;
	list-style: none;
}

.lumgem-cart-item-card__details summary::-webkit-details-marker { display: none; }
.lumgem-cart-item-card__details[open] summary span { transform: rotate(180deg); }
.lumgem-cart-item-card__details summary span { transition: transform .18s ease; }
.lumgem-cart-item-card__details dl { margin: 0; padding: 2px 0 10px; }
.lumgem-cart-item-card__details dl > div { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 14px; padding: 3px 0; }
.lumgem-cart-item-card__details dt, .lumgem-cart-item-card__details dd { margin: 0; }
.lumgem-cart-item-card__details dd { text-align: right; color: #5f5a54; }

body.woocommerce-cart .wc-proceed-to-checkout .checkout-button.button.alt:hover {
	background: var(--lumgem-gold-hover);
	border-color: var(--lumgem-gold-hover);
}

/**
 * "Or Pay With" wallet row (Jeulia-style: Checkout Now, then a centered
 * label, then the real PayPal/Apple Pay/Google Pay buttons as an equal-
 * width 2-up row). `.ppc-button-wrapper` (the PayPal gateway's own
 * wrapper) is a plain sibling of the Checkout button inside this same
 * `.wc-proceed-to-checkout` div — but WooCommerce PayPal Payments' per-
 * method APM wrappers (`id="ppc-button-<method>-container"`, confirmed
 * live: Apple Pay and Google Pay both use this exact `-container` suffix
 * on Cart) render NESTED INSIDE `.ppc-button-wrapper`, not as its
 * siblings. An earlier version of this moved them out via jQuery to make
 * them siblings — confirmed LIVE that doing so permanently breaks the
 * real PayPal button itself, so nothing here ever moves a node. Instead
 * `.ppc-button-wrapper` itself becomes a flex row, laying out its own
 * EXISTING children (PayPal's real button content plus the nested APM
 * wrapper) side by side in place — `order` only changes where things
 * PAINT, never their real DOM position.
 */
body.woocommerce-cart .wc-proceed-to-checkout {
	display: flex;
	flex-wrap: wrap;
	gap: var(--lumgem-space-3) var(--lumgem-space-3);
}

body.woocommerce-cart .wc-proceed-to-checkout > .checkout-button {
	order: 1;
	flex: 1 1 100%;
}

body.woocommerce-cart .wc-proceed-to-checkout > .lumgem-cart-pay-with__heading {
	order: 2;
	flex: 1 1 100%;
	margin: 0;
	text-align: center;
	font-size: 12px;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.08em;
	color: var(--lumgem-muted);
}

/* The PayPal gateway's own wrapper — never hidden/emptied (PayPal is the
   always-shown baseline per the owner's spec), grows to fill the row
   alone when Apple/Google Pay end up empty, or splits it with them via
   the child rule below once real content exists on both sides. `nowrap`
   is deliberate: this is always exactly a 2-up row (device wallet left,
   PayPal right, per spec), never a 3-across wrap. */
body.woocommerce-cart .wc-proceed-to-checkout > .ppc-button-wrapper {
	order: 3;
	flex: 1 1 100%;
	display: flex !important;
	flex-wrap: nowrap;
	align-items: stretch;
	gap: 8px;
	min-width: 0;
}

/* PayPal's own real button node plus the nested Apple/Google Pay wrapper
   — equal-width, equal-height columns (stretch handles the height match;
   an explicit height still needs setting below since the plugin's own
   .ppcp-button-apm rule hard-codes 45px). Excludes anything already
   marked empty by cart.js so an ineligible method never reserves a blank
   column. width:0 alongside flex-basis keeps a long PayPal iframe/APM
   button from forcing its own intrinsic width past the 50% split. */
body.woocommerce-cart .wc-proceed-to-checkout > .ppc-button-wrapper > *:not( .lumgem-pay-with-item--empty ) {
	flex: 1 1 0;
	width: 0;
	min-width: 0;
	height: 48px;
	margin: 0;
}

/* Device wallet (Apple Pay / Google Pay — whichever is actually eligible)
   always on the LEFT, PayPal always on the RIGHT, regardless of the
   plugin's own DOM order (PayPal's #ppc-button-ppcp-gateway happens to
   print first). `order` only changes where things paint. */
body.woocommerce-cart .wc-proceed-to-checkout > .ppc-button-wrapper > #ppc-button-ppcp-gateway {
	order: 1;
}

body.woocommerce-cart .wc-proceed-to-checkout > .ppc-button-wrapper > #ppc-button-googlepay-container {
	order: 2;
}

body.woocommerce-cart .wc-proceed-to-checkout > .ppc-button-wrapper > #ppc-button-applepay-container {
	order: 3;
}

/* The plugin's own .ppcp-button-apm stylesheet rule sets height:45px,
   harmless to override at normal specificity — but its own JS ALSO sets
   `style="margin-top: 14px"` directly as an inline style on the element
   (confirmed live via el.getAttribute('style')) for its default (main
   button on top, wallet button below) vertical stacking layout. Inline
   styles beat any external stylesheet rule regardless of specificity, so
   only `!important` can override it — this is the one property on this
   page that needs it, and only because the plugin's own JS, not its
   stylesheet, is what's actually setting it. Scoped to this Cart wrapper
   only; the plugin's own CSS/JS files are untouched everywhere else they
   apply (Checkout, mini-cart, product page). */
body.woocommerce-cart .wc-proceed-to-checkout > .ppc-button-wrapper > .ppcp-button-apm {
	height: 48px;
	margin-top: 0 !important;
}

/* Real button content inside each container filling its (now 48px tall,
   50%-wide) parent — Google Pay's own .gpay-button-fill already sets
   width:100%/height:inherit (its "inherit" now resolves to our 48px
   above); Apple Pay's real <apple-pay-button> custom element gets the
   same explicit sizing since it has no equivalent "inherit" rule of its
   own to lean on. Neither selector fabricates a button — both only ever
   size whichever real element the plugin's own SDK already rendered. */
body.woocommerce-cart .wc-proceed-to-checkout > .ppc-button-wrapper #ppc-button-applepay-container apple-pay-button {
	width: 100%;
	height: 48px;
	min-height: 48px;
	margin: 0;
}

/**
 * PayPal's own real zoid button (#ppc-button-ppcp-gateway's child) gets a
 * `min-width: 200px` rule injected by PayPal's own SDK, keyed to a
 * per-page-load random ID (`#zoid-paypal-buttons-uid_...`) that can't be
 * targeted directly from a static stylesheet — but it's applied via a
 * plain (non-!important) rule on the STABLE `.paypal-buttons` class,
 * confirmed live via document.styleSheets. At a 50/50 split on a 360px
 * viewport each column is ~164px, under that 200px floor, which is what
 * was causing the real PayPal iframe to overflow past its own column.
 * `!important` here only overrides that one non-!important SDK rule —
 * nothing in the plugin's own files changes, and this never touches
 * anything about the button except its minimum width.
 */
body.woocommerce-cart .wc-proceed-to-checkout > .ppc-button-wrapper #ppc-button-ppcp-gateway .paypal-buttons {
	min-width: 0 !important;
	width: 100% !important;
}

/* Nothing real ever rendered (or JS determined every wallet wrapper is
   genuinely empty — see cart.js's initCartPayWithVisibility()): collapse
   both the label and the ineligible APM wrapper rather than leaving a
   blank row or an orphaned "Or Pay With" over nothing. */
body.woocommerce-cart .wc-proceed-to-checkout > .lumgem-cart-pay-with__heading[hidden],
body.woocommerce-cart .wc-proceed-to-checkout > .ppc-button-wrapper [id^="ppc-button-"][id$="-container"].lumgem-pay-with-item--empty {
	display: none;
}

/* 0 real items selected — visually disables the whole Checkout/PayPal area,
   including PayPal's own cross-origin iframe button, which cart.js cannot
   attach a click handler to (see cart-totals.php's $lumgem_has_selection). */
.lumgem-cart-collaterals .wc-proceed-to-checkout.lumgem-checkout-disabled {
	opacity: 0.5;
	pointer-events: none;
	filter: grayscale(0.3);
}

.lumgem-cart-collaterals .lumgem-checkout-disabled-note {
	margin: var(--lumgem-space-2) 0 0;
	font-size: 13px;
	text-align: center;
	color: var(--lumgem-muted);
}

/**
 * "We Accept" card — Jeulia-style clean panel: centered small-caps title,
 * then a wrapped grid of equal-height icon chips below. Still the exact
 * same real get_icon() markup from WC()->payment_gateways() (see
 * lumgem_cart_payment_badges() in cart-hooks.php) — only the wrapper
 * markup and sizing are new, no gateway list or icon source changed.
 */
.lumgem-cart__payment-badges {
	margin-top: var(--lumgem-space-4);
	padding: var(--lumgem-space-4);
	border: 1px solid var(--lumgem-border);
	border-radius: 10px;
	background: var(--lumgem-surface, #fff);
}

.lumgem-cart__payment-badges-title {
	display: block;
	margin-bottom: var(--lumgem-space-3);
	text-align: center;
	font-size: 11px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.12em;
	color: var(--lumgem-muted);
}

.lumgem-cart__payment-badges-grid {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: var(--lumgem-space-2);
}

.lumgem-cart__payment-badge {
	display: flex;
	align-items: center;
	justify-content: center;
	height: 30px;
	min-width: 44px;
	padding: 0 var(--lumgem-space-2);
	border: 1px solid var(--lumgem-border);
	border-radius: 6px;
	background: #fff;
}

.lumgem-cart__payment-badge img,
.lumgem-cart__payment-badge svg {
	display: block;
	height: 18px;
	width: auto;
	max-width: 100%;
}

.lumgem-cart__payment-badge--text {
	padding: 0 var(--lumgem-space-3);
	font-size: 11px;
	font-weight: 600;
	color: var(--lumgem-text, #1d1916);
	white-space: nowrap;
}

/* Sticky mobile bottom bar */
.lumgem-cart-sticky-bar {
	display: none;
}

.lumgem-cart-empty {
	max-width: 1200px;
	margin: 0 auto;
	padding: var(--lumgem-space-4) var(--lumgem-space-5) var(--lumgem-space-7);
	background: var(--lumgem-bg);
}

.lumgem-cart-empty__hero {
	display: flex;
	flex-direction: column;
	align-items: center;
	text-align: center;
	padding: var(--lumgem-space-5) 0 var(--lumgem-space-6);
}

.lumgem-cart-empty__illustration {
	display: block;
	width: min(180px, 48vw);
	height: auto;
	margin-bottom: var(--lumgem-space-3);
}

.lumgem-cart-empty__hero h1 {
	margin: 0 0 var(--lumgem-space-2);
	font-family: var(--lumgem-font-heading);
	font-size: clamp(25px, 3vw, 34px);
	font-weight: 400;
	color: var(--lumgem-text);
}

.lumgem-cart-empty__hero p {
	max-width: 520px;
	margin: 0 0 var(--lumgem-space-4);
	font-size: 14px;
	color: var(--lumgem-muted);
}

.lumgem-cart-empty__cta.button {
	min-width: 190px;
	padding: 13px 24px;
	border: 1px solid var(--lumgem-emerald);
	border-radius: 0;
	background: var(--lumgem-emerald);
	color: #fff;
	font-size: 12px;
	font-weight: 700;
	letter-spacing: .08em;
	text-transform: uppercase;
}

.lumgem-cart-empty__cta.button:hover,
.lumgem-cart-empty__cta.button:focus-visible {
	background: #0b503c;
	color: #fff;
}

.lumgem-cart-empty__recommendations {
	margin-top: 0;
}

@media (max-width: 767px) {
	.lumgem-cart-empty {
		padding: var(--lumgem-space-3) 8px var(--lumgem-space-6);
	}

	.lumgem-cart-empty__hero {
		padding: var(--lumgem-space-4) 0 var(--lumgem-space-5);
	}

	.lumgem-cart-empty__illustration {
		width: 132px;
		margin-bottom: var(--lumgem-space-2);
	}

	.lumgem-cart-empty__hero h1 {
		font-size: 25px;
	}

	.lumgem-cart-empty__hero p {
		max-width: 300px;
		font-size: 13px;
	}
}

/* Cart item presentation refinement. These rules intentionally come after
   WooCommerce's responsive-table overrides and the earlier compatibility
   rules above, so the item reads as a jewelry selection rather than as a
   narrow admin table. Cart fields and native quantity inputs are unchanged. */
@media (min-width: 1024px) {
	.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card {
		display: grid;
		grid-template-columns: 24px minmax(160px, 190px) minmax(180px, 1fr) 116px;
		grid-template-areas:
			"remove thumb name price"
			"remove thumb name qty"
			"remove thumb actions actions";
		align-items: start;
		gap: 8px 16px;
		min-height: 214px;
		padding: 16px 0;
	}

	.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card td {
		min-width: 0;
		padding: 0;
		text-align: left;
	}

	.lumgem-cart-item-card .product-remove { grid-area: remove; }
	.lumgem-cart-item-card .product-thumbnail { grid-area: thumb; }
	.lumgem-cart-item-card .product-name { grid-area: name; }
	.lumgem-cart-item-card .product-price { grid-area: price; text-align: right; }
	.lumgem-cart-item-card .product-quantity { grid-area: qty; justify-self: end; }
	.lumgem-cart-item-card .product-actions {
		position: static;
		grid-area: actions;
		justify-self: end;
		align-self: end;
	}
	.lumgem-cart-item-card .product-subtotal { display: none; }

	.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail img {
		width: 100%;
		height: auto;
		max-width: 190px;
		aspect-ratio: 1 / 1;
		object-fit: contain;
		border-radius: 0;
	}

	.lumgem-cart-item-card .product-name > a {
		display: block;
		max-width: 360px;
		font-family: var(--lumgem-font-heading);
		font-size: 18px;
		font-weight: 400;
		line-height: 1.35;
	}
}

@media (max-width: 1023px) {
	.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card {
		grid-template-columns: 22px 96px minmax(0, 1fr);
		grid-template-areas:
			"remove thumb name"
			"remove thumb price"
			"remove thumb qty"
			"actions actions actions";
		align-items: start;
		gap: 6px 12px;
		padding: 14px 0 10px;
	}

	.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card td {
		min-width: 0;
		padding: 0;
		text-align: left;
	}

	.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card td.product-subtotal {
		display: none !important;
	}

	.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail img {
		width: 96px;
		height: 96px;
		max-width: 96px;
		object-fit: contain;
		border-radius: 0;
	}

	.lumgem-cart-item-card .product-name {
		font-size: 13px;
		font-weight: 400;
		line-height: 1.4;
	}

	.lumgem-cart-item-card .product-name > a {
		display: block;
		font-family: var(--lumgem-font-heading);
		font-size: 15px;
		font-weight: 400;
		line-height: 1.35;
	}

	.lumgem-cart-item-card__sku {
		margin-top: 7px;
		font-size: 10px;
	}

	.lumgem-cart-item-card__variants {
		margin-top: 7px;
		font-size: 11px;
	}

	.lumgem-cart-item-card__variants dl.variation {
		display: flex;
		flex-wrap: wrap;
		align-items: baseline;
		gap: 2px 5px;
		margin: 0;
	}

	.lumgem-cart-item-card__variants dl.variation dt,
	.lumgem-cart-item-card__variants dl.variation dd,
	.lumgem-cart-item-card__variants dl.variation p {
		float: none;
		clear: none;
		width: auto;
		margin: 0;
		padding: 0;
	}

	.lumgem-cart-item-card .product-price {
		align-self: end;
		font-size: 13px;
	}

	.lumgem-cart-item-card__sale-price {
		justify-content: flex-start;
	}

	.lumgem-cart-item-card .product-quantity {
		align-self: start;
	}

	.lumgem-cart-item-card .product-actions {
		grid-area: actions;
		margin-top: 4px;
		padding-top: 7px;
		border-top: 1px solid var(--lumgem-border);
	}

	.lumgem-cart-item-card .product-actions .lumgem-cart-item-card__actions {
		justify-content: flex-end;
		gap: 2px;
		margin-left: 0;
	}

	.lumgem-scope .lumgem-qty-stepper .lumgem-qty-stepper__btn {
		width: 34px;
		height: 34px;
		min-width: 34px;
	}

	.lumgem-qty-stepper input.qty {
		width: 38px;
		height: 34px;
	}

	.lumgem-cart--single-item .lumgem-item-summary {
		justify-content: flex-start;
	}

	.lumgem-cart--single-item .lumgem-cart-item-card {
		grid-template-columns: 104px minmax(0, 1fr);
		grid-template-areas:
			"thumb name"
			"thumb price"
			"thumb qty"
			"actions actions";
	}

	.lumgem-cart--single-item .lumgem-cart-item-card .product-remove {
		display: none;
	}

	.lumgem-cart--single-item .lumgem-cart-item-card .product-thumbnail img {
		width: 104px;
		height: 104px;
		max-width: 104px;
	}
}

@media (max-width: 767px) {
	.lumgem-cart-assurance-strip__item + .lumgem-cart-assurance-strip__item {
		border-top: 0;
	}

	.lumgem-cart-assurance-strip__item:first-child {
		padding-bottom: 2px;
	}

	.lumgem-cart-assurance-strip__item:last-child {
		padding-top: 2px;
	}

	/* The native responsive cart table right-aligns every cell. The LumGem
	   card is a composed component, so own its alignment and spacing here. */
	body.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card td.product-name,
	body.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card td.product-price,
	body.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card td.product-quantity,
	body.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card td.product-actions {
		text-align: left !important;
	}

	body.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card td::before {
		display: none !important;
	}

	.woocommerce-cart .lumgem-cart--single-item table.lumgem-cart-items.cart tr.lumgem-cart-item-card {
		grid-template-columns: 110px minmax(0, 1fr);
		grid-template-areas:
			"thumb name"
			"thumb price"
			"thumb qty"
			"thumb actions";
		gap: 8px 12px;
		min-height: 0;
		padding: 14px 0 12px;
	}

	.woocommerce-cart .lumgem-cart--single-item table.lumgem-cart-items.cart .product-thumbnail,
	.woocommerce-cart .lumgem-cart--single-item table.lumgem-cart-items.cart .product-thumbnail a {
		display: block;
		width: 110px;
	}

	.woocommerce-cart .lumgem-cart--single-item table.lumgem-cart-items.cart .product-thumbnail img {
		width: 110px;
		height: 110px;
		max-width: 110px;
		background: #fff;
	}

	.woocommerce-cart .lumgem-cart--single-item .lumgem-cart-item-card .product-name > a {
		font-size: 15px;
		line-height: 1.32;
		letter-spacing: -0.01em;
	}

	.woocommerce-cart .lumgem-cart--single-item .lumgem-cart-item-card__sku {
		margin-top: 6px;
		color: #77716a;
		font-size: 10px;
		letter-spacing: 0.02em;
	}

	.woocommerce-cart .lumgem-cart--single-item .lumgem-cart-item-card__variants {
		margin-top: 5px;
		color: #4c4945;
	}

	.woocommerce-cart .lumgem-cart--single-item .lumgem-cart-item-card__variants dl.variation {
		display: flex;
		align-items: baseline;
		gap: 5px;
		line-height: 1.35;
	}

	.woocommerce-cart .lumgem-cart--single-item .lumgem-cart-item-card__variants dl.variation dt,
	.woocommerce-cart .lumgem-cart--single-item .lumgem-cart-item-card__variants dl.variation dd,
	.woocommerce-cart .lumgem-cart--single-item .lumgem-cart-item-card__variants dl.variation p {
		display: inline;
		float: none;
		clear: none;
		width: auto;
		margin: 0;
		padding: 0;
	}

	.woocommerce-cart .lumgem-cart--single-item .lumgem-cart-item-card__sale-price {
		display: flex;
		align-items: center;
		justify-content: flex-start;
		gap: 7px;
		padding: 0;
		background: transparent;
		white-space: normal;
	}

	.woocommerce-cart .lumgem-cart--single-item .lumgem-cart-item-card__sale-price del {
		font-size: 11px;
		color: #8b8580;
	}

	.woocommerce-cart .lumgem-cart--single-item .lumgem-cart-item-card__sale-price ins {
		font-size: 14px;
		font-weight: 600;
		color: var(--lumgem-emerald);
	}

	.woocommerce-cart .lumgem-cart--single-item .lumgem-cart-item-card__sale-price > span {
		padding: 3px 5px;
		background: #fae7e1;
		color: #a34738;
		font-size: 9px;
		font-weight: 600;
		letter-spacing: 0.03em;
	}

	.woocommerce-cart .lumgem-cart--single-item .lumgem-cart-item-card .product-quantity {
		justify-self: start;
	}

	.woocommerce-cart .lumgem-cart--single-item .lumgem-cart-item-card .product-actions {
		grid-column: 2 !important;
		grid-row: 4 !important;
		justify-self: stretch;
		margin: 0;
		padding: 2px 0 0;
		border: 0;
	}

	.woocommerce-cart .lumgem-cart--single-item .lumgem-cart-item-card .product-actions .lumgem-cart-item-card__actions {
		justify-content: flex-start;
		gap: 3px;
	}
}

/* Desktop two-column grid, verified no-overlap at 1366/1440px viewport
   widths — ~65/35 split (fr ratio 1.85:1) rather than a fixed 380px right
   column, so the ratio actually holds at both target widths instead of the
   right column's share shrinking as the viewport grows. Sticky Order
   Summary: no sitewide sticky header/announcement bar exists at this
   breakpoint (only mobile has one, see base.css), so a flat `top` offset
   is all that's needed — no JS height measurement required. */
@media (min-width: 1024px) {
	.lumgem-cart__grid {
		grid-template-columns: minmax(0, 1.85fr) minmax(0, 1fr);
	}

	.lumgem-cart__aside {
		position: sticky;
		top: var(--lumgem-space-5);
	}

	/**
	 * Desktop item row — replaces the old fixed-width table-column layout
	 * (thead now hidden everywhere, see above) with a single flex row per
	 * item: checkbox, image, name/SKU/variants (grows to fill), price, qty
	 * stepper, subtotal, with Edit/Wishlist/Delete absolutely placed at the
	 * top-right corner of the row rather than occupying their own column.
	 * This is the compact "product shelf" list block the Round 3 visual
	 * audit asked for, in place of the "beautified Woo table" look — a
	 * `<td>` inside a `display:flex` `<tr>` is blockified into a normal flex
	 * item regardless of its own `table-cell` display (same mechanism the
	 * mobile `display:grid` version below already relies on).
	 */
	.lumgem-cart-item-card {
		display: flex;
		align-items: center;
		gap: var(--lumgem-space-2);
		padding: var(--lumgem-space-2) 112px var(--lumgem-space-2) 0;
	}

	.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card td {
		padding: 0;
	}

	.lumgem-cart-item-card .product-remove {
		flex: 0 0 auto;
	}

	.lumgem-cart-item-card .product-thumbnail {
		flex: 0 0 auto;
	}

	.lumgem-cart-item-card .product-name {
		flex: 1 1 auto;
		min-width: 0;
	}

	.lumgem-cart-item-card .product-price {
		flex: 0 0 78px;
		text-align: right;
	}

	.lumgem-cart-item-card .product-quantity {
		flex: 0 0 auto;
	}

	.lumgem-cart-item-card .product-subtotal {
		flex: 0 0 78px;
		text-align: right;
	}

	.lumgem-cart-item-card .product-actions {
		position: absolute;
		top: var(--lumgem-space-2);
		right: 0;
	}

	/**
	 * Desktop-only compact sizing (32px, matching the qty stepper's own
	 * desktop button size) — the 44×44px touch target is a mobile/thumb
	 * requirement (WCAG 2.5.5), not needed for a mouse pointer, and at 44px
	 * each the 3-icon cluster (~150px+) no longer fit the 112px right-hand
	 * padding reserved for it, overlapping the subtotal column.
	 */
	.lumgem-cart-item-card__actions {
		gap: var(--lumgem-space-1);
	}

	/* Matches the base rule's 3-class specificity (.lumgem-scope
	   .lumgem-cart-item-card__actions .lumgem-cart-item-card__action) so
	   this desktop override actually wins instead of losing to it outright
	   regardless of source order. */
	.lumgem-scope .lumgem-cart-item-card__actions .lumgem-cart-item-card__action {
		width: 32px;
		height: 32px;
	}

	.woocommerce-cart a.lumgem-cart-item-card__remove.lumgem-cart-item-card__action {
		width: 32px;
		height: 32px;
	}

	/* 96px — low end of the audit's 96-112px desktop range, shrunk from
	   100px this round for a more compact row. */
	.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail img {
		width: 96px;
		height: 96px;
		max-width: 96px;
	}
}

/* Mobile: cards stay full-width (never narrower than the viewport minus
   padding), thead hidden (data-title attributes already label each field),
   carousels show ~2 items (see components.css), sticky bottom bar shown. */
@media (max-width: 1023px) {
	/**
	 * Independent mobile audit: `.lumgem-container` (page.php's own wrapper
	 * — the Cart page is a regular WP Page whose content is the
	 * `[woocommerce_cart]` shortcode, so `.lumgem-cart` renders NESTED
	 * inside page.php's `.lumgem-container`) already applies 24px
	 * left/right padding, and `.lumgem-cart` added its OWN 24px on top —
	 * confirmed via the audit's own measurement (48px combined margin at
	 * 390px width, core content squeezed to ~279px). Real total margin
	 * target is ~10-12px: `.lumgem-container` gets a Cart-only override,
	 * `.lumgem-cart` drops its own left/right padding entirely so the two
	 * never stack.
	 */
	body.woocommerce-cart .lumgem-container {
		padding-left: 10px;
		padding-right: 10px;
	}

	.lumgem-cart {
		padding-left: 0;
		padding-right: 0;
	}

	/**
	 * Cart-page-only compression of the sitewide announcement bar/header —
	 * scoped to `body.woocommerce-cart` so Home/Product/Checkout (already
	 * accepted in prior rounds) are completely unaffected. The Round 3
	 * visual audit measured the real product item starting at y≈494 on a
	 * 390px viewport and asked for the announcement bar (~24-28px) and
	 * header (~44-48px) to stop eating the first screen on THIS page.
	 */
	body.woocommerce-cart .lumgem-announcement-bar__list {
		padding: 4px var(--lumgem-space-4);
	}

	body.woocommerce-cart .lumgem-header__inner {
		padding-top: var(--lumgem-space-1);
		padding-bottom: var(--lumgem-space-1);
	}

	.lumgem-cart-items thead {
		display: none;
	}

	/**
	 * WooCommerce's own woocommerce-smallscreen.css (a separate stylesheet,
	 * only downloaded below 768px — see its own <link media="..."> — so it
	 * never appears when inspecting cart.css alone) also draws a
	 * `content: attr(data-title)` label ("Product:", "Price:", "Quantity:",
	 * "Actions:"...) before every `<td>` in any `table.shop_table_responsive`
	 * as ITS OWN substitute for the hidden header row. This table carries
	 * that exact class, so with our own `<thead>` hidden too, it was
	 * printing BOTH kinds of label at once — this custom grid layout
	 * (image/name/price/qty/actions areas) already conveys the same meaning
	 * visually, so these text labels are pure duplication. Matching their
	 * `.woocommerce table.shop_table_responsive tr td::before` selector's
	 * specificity (2 classes + 4 elements) with 4 real classes here
	 * guarantees this wins regardless of stylesheet load order.
	 */
	.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card td::before {
		content: none;
	}

	/**
	 * WooCommerce's own woocommerce-smallscreen.css also sets
	 * `.woocommerce table.shop_table_responsive tr { display: block; }`
	 * (specificity 0,0,2,2 — 2 classes + table+tr elements), which beat a
	 * plain 1-class `.lumgem-cart-item-card` outright and silently prevented
	 * this from ever actually becoming a CSS grid on real mobile widths
	 * (confirmed via computed style — `display: block`, not `grid`), even
	 * though every child element below still had its `grid-area` assigned.
	 * A `<tr>` stuck at `display:block` collapses grid areas to nothing,
	 * which is why the remove-checkbox column, image, and text rows were
	 * stacking as plain full-width blocks instead of the intended
	 * checkbox/image/content 3-column layout. Matching their selector's
	 * specificity with 4 real classes guarantees this wins regardless of
	 * stylesheet load order — the same fix pattern already applied
	 * repeatedly elsewhere in this project.
	 */
	.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card {
		display: grid;
		grid-template-columns: 22px 84px 1fr;
		grid-template-areas:
			"remove thumb name"
			"remove thumb price"
			"remove thumb qty"
			"remove thumb actions";
		gap: var(--lumgem-space-1) var(--lumgem-space-3);
		padding: var(--lumgem-space-3) 0;
	}

	.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card td {
		padding: var(--lumgem-space-1) 0;
	}

	/**
	 * WooCommerce's OWN woocommerce-smallscreen.css (a separate stylesheet,
	 * only downloaded below 768px via its <link media="..."> attribute — so
	 * it never showed up in this file) unconditionally hides
	 * `.woocommerce-page table.cart .product-thumbnail` at small screens,
	 * on the assumption a responsive-table layout has no room for a thumb
	 * column. That rule matches this page (body carries `woocommerce-page`,
	 * the table carries `cart`) and — since nothing here ever set `display`
	 * for `.product-thumbnail` itself, only `grid-area` — was silently
	 * winning outright and rendering the product image as a literal 0×0 box
	 * (confirmed via computed style; not merely visually small). Matching
	 * their selector's 3-class specificity with 4 real classes here
	 * (`.woocommerce-cart`, `.lumgem-cart-items`, `.cart`, `.product-thumbnail`)
	 * guarantees this wins regardless of stylesheet load order — the same
	 * fix pattern already applied elsewhere in this project.
	 */
	.woocommerce-cart .lumgem-cart-items.cart .product-thumbnail {
		display: block;
	}

	.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail img {
		width: 84px;
		height: 84px;
		max-width: 84px;
	}

	.lumgem-cart-item-card .product-remove {
		grid-area: remove;
	}
	.lumgem-cart-item-card .product-thumbnail {
		grid-area: thumb;
	}
	.lumgem-cart-item-card .product-name {
		grid-area: name;
	}
	.lumgem-cart-item-card .product-price {
		grid-area: price;
	}
	.lumgem-cart-item-card .product-quantity {
		grid-area: qty;
	}
	.lumgem-cart-item-card .product-subtotal {
		display: none; /* redundant with price × qty already shown; keeps card from feeling cramped */
	}
	.lumgem-cart-item-card .product-actions {
		grid-area: actions;
		padding-top: var(--lumgem-space-2);
	}
	.lumgem-cart-item-card .product-actions .lumgem-cart-item-card__actions {
		gap: 0;
		margin-left: -10px; /* optically align the 44px hit-target's icon, not its padding, with content above */
	}

	/* Mobile-only 44px touch target on the qty stepper buttons too (desktop
	   keeps the more compact 32px — a mouse pointer doesn't need the extra
	   room a thumb does). */
	.lumgem-qty-stepper__btn {
		width: 44px;
		height: 44px;
		min-width: 44px;
	}

	.lumgem-qty-stepper input.qty {
		height: 44px;
	}

	.lumgem-cart-sticky-bar {
		display: none;
		position: fixed;
		left: 0;
		right: 0;
		bottom: 0;
		z-index: 50;
		background: #fff;
		border-top: 1px solid var(--lumgem-color-line);
		padding: var(--lumgem-space-3) var(--lumgem-space-4);
		align-items: center;
		justify-content: space-between;
		box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.08);
	}

	.lumgem-cart-sticky-bar.is-visible {
		display: flex;
	}

	.lumgem-cart-sticky-bar__checkout {
		background: var(--lumgem-gold);
		color: #fff;
		text-decoration: none;
		padding: 10px 20px;
		border-radius: 8px;
		font-weight: 600;
	}

	.lumgem-cart-sticky-bar {
		padding-bottom: calc(var(--lumgem-space-3) + env(safe-area-inset-bottom, 0px));
	}
}

/* "Why Choose Us" — Cart's own compact version of the sitewide 4
   confirmed trust facts (see template-parts/cart-why-choose-us.php).
   2x2 on mobile (icon above, short caption below), one row on desktop. */
.lumgem-cart-why-choose-us {
	margin-top: var(--lumgem-space-4);
	padding-top: var(--lumgem-space-4);
	border-top: 1px solid var(--lumgem-border);
}

.lumgem-cart-why-choose-us__title {
	text-align: center;
	font-size: 14px;
	margin-bottom: var(--lumgem-space-3);
	color: var(--lumgem-text);
}

.lumgem-cart-why-choose-us__list {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: var(--lumgem-space-3);
	list-style: none;
	margin: 0;
	padding: 0;
}

.lumgem-cart-why-choose-us__item {
	display: flex;
	flex-direction: column;
	align-items: center;
	text-align: center;
	gap: var(--lumgem-space-1);
	font-size: 11px;
	color: var(--lumgem-text);
}

.lumgem-cart-why-choose-us__icon {
	display: inline-flex;
	width: 20px;
	height: 20px;
	color: var(--lumgem-emerald);
}

.lumgem-cart-why-choose-us__icon svg {
	width: 100%;
	height: 100%;
}

@media (min-width: 1024px) {
	.lumgem-cart-why-choose-us__list {
		grid-template-columns: repeat(4, 1fr);
	}
}

/* Full-width recommendations layer, siblings of .lumgem-cart__grid (see
   cart.php) — Special Offers / You May Also Like / Why Choose Us used to
   live inside .lumgem-cart__main (the left ~65% column), which an
   independent audit caught leaving the right column's lower portion blank
   on desktop and putting these sections BEFORE Order Summary on mobile.
   This wrapper itself needs no column layout of its own — each child
   section (.lumgem-carousel--cart-page, .lumgem-cart-why-choose-us) already
   spans the full .lumgem-cart width on its own. */
.lumgem-cart__recommendations {
	margin-top: var(--lumgem-space-5);
	padding-top: var(--lumgem-space-4);
	border-top: 1px solid var(--lumgem-border);
}

/**
 * Cart-page carousel — Round 3 visual audit: the previous bordered/shadowed/
 * rounded "product card in a box" treatment read as a generic mall-widget,
 * the opposite of Jeulia's borderless product shelf (large image, light
 * text, no card chrome). Rebuilt as a plain shelf item: no background,
 * border, radius, or shadow — just the image, a light two-line name, and a
 * clear price. Quick Add is a small outlined pill (not a full-width solid
 * block) so the shelf still reads as "light", not "row of buttons". Width
 * still tuned for ~6 visible at a 1200px container (180px + 16px gap × 6 ≈
 * 1160px), unchanged from the prior round.
 */
.lumgem-carousel--cart-page .lumgem-carousel__title {
	font-family: var(--lumgem-font-body);
	font-size: 13px;
	font-weight: 500;
	text-transform: uppercase;
	letter-spacing: 0.08em;
	text-align: center;
	color: var(--lumgem-text);
}

/**
 * Grid, not a fixed-width flex track — a plain flex-basis (the previous
 * round's approach) never actually fills the row width (it just sets each
 * card's own size, leaving whatever remainder past the last card as blank
 * space if the count doesn't divide evenly, which is exactly what the
 * Round 4 audit caught: fixed 180px cards, all left-aligned, big gap on
 * the right). `grid-auto-columns` instead divides the FULL track width by
 * the target column count for the current breakpoint, so N cards always
 * fill the row edge-to-edge — 6 at ≥1200px, 5 from 1024-1199px, 2 on
 * mobile (below). Extra cards beyond the visible count (when the backfill
 * helper's real stock search found more than fit) lay out at the SAME
 * per-column width and simply overflow into the existing horizontal-scroll
 * track, so the "only show arrows when there's more than one screenful"
 * behavior (is-scrollable, see cart.js) keeps working unchanged.
 */
.lumgem-carousel--cart-page .lumgem-carousel__track {
	display: grid;
	grid-auto-flow: column;
	grid-auto-columns: calc((100% - 5 * var(--lumgem-space-4)) / 6);
}

/* Cart cross-sells are intentionally mobile-only. */
@media (min-width: 1024px) {
	.lumgem-cart__recommendations > .lumgem-carousel--cart-page {
		display: none;
	}
}

@media (max-width: 1199px) and (min-width: 1024px) {
	.lumgem-carousel--cart-page .lumgem-carousel__track {
		grid-auto-columns: calc((100% - 4 * var(--lumgem-space-4)) / 5);
	}
}

@media (max-width: 1023px) {
	.lumgem-carousel--cart-page .lumgem-carousel__track {
		grid-auto-columns: calc((100% - var(--lumgem-space-4)) / 2);
	}
}

.lumgem-carousel--cart-page .lumgem-carousel__item {
	display: flex;
	flex-direction: column;
	gap: var(--lumgem-space-1);
	background: none;
	border: none;
	border-radius: 0;
	padding: 0;
	box-shadow: none;
}

.lumgem-carousel--cart-page .lumgem-carousel__item-link {
	text-decoration: none;
	color: inherit;
}

.lumgem-carousel--cart-page .lumgem-carousel__image img {
	aspect-ratio: 1;
	object-fit: cover;
	width: 100%;
	border-radius: 4px;
}

.lumgem-carousel--cart-page .lumgem-carousel__name {
	font-size: 12px;
	font-weight: 400;
	margin-top: 0;
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
	min-height: 2.6em;
	color: var(--lumgem-text);
}

.lumgem-carousel--cart-page .lumgem-carousel__price {
	font-size: 13px;
	font-weight: 600;
	color: var(--lumgem-text);
}

/* WooCommerce's get_price_html() wraps an on-sale product's original price
   in <del> and the sale price in <ins> — the browser's default UA
   stylesheet underlines <ins>, which read as a stray underline under the
   CURRENT (lower) price rather than a strikethrough on the OLD one. Original
   price: muted gray, strikethrough (kept). Sale price: no underline, full
   dark/dark-gold emphasis so it reads as the real, current price. */
.lumgem-carousel--cart-page .lumgem-carousel__price del {
	color: var(--lumgem-muted);
	font-weight: 400;
	text-decoration: line-through;
	margin-right: var(--lumgem-space-1);
}

.lumgem-carousel--cart-page .lumgem-carousel__price ins {
	text-decoration: none;
	color: var(--lumgem-gold);
	font-weight: 700;
}

/**
 * Small circular cart icon, not a text button — the Round 4 audit asked
 * for "a small cart icon or a unified short button" instead of a pill wide
 * enough to hold the word "Quick Add". The label stays in the markup
 * (sr-only) so screen readers and the existing click handler
 * (data-product-id, cart.js's initQuickAdd()) are completely unaffected —
 * only the visible presentation changes.
 */
.lumgem-carousel--cart-page .lumgem-carousel__quick-add {
	align-self: flex-start;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 28px;
	height: 28px;
	min-height: 28px;
	padding: 0;
	margin-top: var(--lumgem-space-1);
	border: 1px solid var(--lumgem-gold);
	border-radius: 999px;
	background: none;
	color: var(--lumgem-gold);
}

.lumgem-carousel--cart-page .lumgem-carousel__quick-add:hover {
	background: var(--lumgem-gold);
	color: #fff;
}

.lumgem-carousel--cart-page .lumgem-carousel__quick-add-icon {
	width: 14px;
	height: 14px;
	pointer-events: none;
}

.lumgem-carousel--cart-page .lumgem-carousel__quick-add-label {
	position: absolute;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	white-space: nowrap;
	border: 0;
}

/* Arrows re-centered on the image (not the whole title+track block) via the
   custom property cart.js's positionCarouselArrows() writes — same pattern
   as single-product.js's PDP carousel, different property name so the two
   never collide. */
.lumgem-carousel--cart-page .lumgem-carousel__arrow {
	top: var(--lumgem-cart-carousel-arrow-top, 50%);
	transform: translateY(-50%);
}

@media (max-width: 1023px) {
	.lumgem-carousel--cart-page .lumgem-carousel__arrow {
		display: none;
	}
}

/* Cart conversion layout — presentation only. WooCommerce continues to own
   cart state, prices, coupons, checkout URLs and payment gateways. */
body.lumgem-scope.woocommerce-cart .lumgem-header__nav-desktop,
body.lumgem-scope.woocommerce-cart .lumgem-header__gift-finder,
body.lumgem-scope.woocommerce-cart .lumgem-header__icon-btn.lumgem-header__search-toggle--desktop,
body.lumgem-scope.woocommerce-cart .lumgem-header__icon-btn.lumgem-header__account,
body.lumgem-scope.woocommerce-cart .lumgem-header__icon-btn.lumgem-header__wishlist,
body.lumgem-scope.woocommerce-cart .lumgem-header__icon-btn.lumgem-header__locale {
	display: none;
}

body.woocommerce-cart .lumgem-header__brand-group {
	flex: 1 1 auto;
}

body.woocommerce-cart .lumgem-header__right {
	flex: 0 0 auto;
}

.lumgem-cart-assurance-strip {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	max-width: 1200px;
	margin: 0 auto;
	border-top: 1px solid var(--lumgem-border);
	border-bottom: 1px solid var(--lumgem-border);
	background: var(--lumgem-surface);
}

.lumgem-cart-assurance-strip__item {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 9px;
	min-height: 42px;
	padding: 8px 16px;
	color: var(--lumgem-text);
	font-size: 12px;
}

.lumgem-cart-assurance-strip__item + .lumgem-cart-assurance-strip__item {
	border-left: 1px solid var(--lumgem-border);
}

.lumgem-cart-assurance-strip__icon {
	display: inline-flex;
	width: 18px;
	height: 18px;
	color: var(--lumgem-emerald);
}

.lumgem-cart-assurance-strip__icon svg {
	width: 100%;
	height: 100%;
}

.lumgem-item-summary {
	padding: 0 0 10px;
	border-bottom: 1px solid var(--lumgem-border);
}

.lumgem-item-summary label {
	display: inline-flex;
	align-items: center;
	gap: 8px;
}

.lumgem-item-summary__title {
	font-family: var(--lumgem-font-heading);
	font-size: 19px;
	font-weight: 400;
	text-transform: uppercase;
}

.lumgem-item-summary__count {
	color: var(--lumgem-muted);
	font-size: 11px;
}

.lumgem-cart-item-card__sale-price {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	justify-content: flex-end;
	gap: 3px 6px;
}

.lumgem-cart-item-card__sale-price del {
	color: var(--lumgem-muted);
	font-size: 11px;
}

.lumgem-cart-item-card__sale-price ins {
	color: var(--lumgem-text);
	font-size: 14px;
	font-weight: 700;
	text-decoration: none;
}

.lumgem-cart-item-card__sale-price span {
	padding: 2px 5px;
	background: #fbe9e5;
	color: #a64b3d;
	font-size: 9px;
	font-weight: 700;
}

.lumgem-cart__aside {
	padding: 20px;
	border: 1px solid var(--lumgem-border);
}

.lumgem-cart__aside-title {
	font-family: var(--lumgem-font-heading);
	font-size: 21px;
	font-weight: 400;
	text-transform: uppercase;
}

.lumgem-product-savings td,
.lumgem-product-savings th {
	color: var(--lumgem-emerald);
}

.lumgem-cart-remove-dialog {
	position: relative;
	width: min(420px, calc(100vw - 32px));
	padding: 28px;
	border: 0;
	border-radius: 2px;
	background: #fff;
	color: var(--lumgem-text);
}

.lumgem-cart-remove-dialog::backdrop {
	background: rgba(13, 20, 17, .62);
}

.lumgem-cart-remove-dialog__close {
	position: absolute;
	top: 15px;
	right: 16px;
	width: auto;
	height: auto;
	min-width: 0;
	min-height: 0;
	padding: 0;
	border: 0;
	background: transparent;
	color: var(--lumgem-text);
	font-size: 25px;
	font-weight: 300;
	line-height: 1;
}

.lumgem-cart-remove-dialog h2 {
	margin: 0 30px 7px 0;
	font-family: var(--lumgem-font-heading);
	font-size: 24px;
	font-weight: 400;
}

.lumgem-cart-remove-dialog > p {
	margin: 0 0 18px;
	color: var(--lumgem-muted);
	font-size: 13px;
}

.lumgem-cart-remove-dialog__product {
	display: grid;
	grid-template-columns: 68px minmax(0, 1fr);
	align-items: center;
	gap: 13px;
	margin-bottom: 22px;
	padding: 12px;
	border-top: 1px solid var(--lumgem-border);
	border-bottom: 1px solid var(--lumgem-border);
}

.lumgem-cart-remove-dialog__product img {
	width: 68px;
	height: 68px;
	object-fit: cover;
}

.lumgem-cart-remove-dialog__product span {
	font-size: 14px;
	line-height: 1.45;
}

.lumgem-cart-remove-dialog__actions {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 12px;
}

.lumgem-scope .lumgem-cart-remove-dialog__keep,
.lumgem-cart-remove-dialog__confirm {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-height: 42px;
	padding: 10px 16px;
	border: 1px solid var(--lumgem-emerald);
	background: #fff;
	color: var(--lumgem-emerald);
	font-size: 12px;
	font-weight: 600;
	text-decoration: none;
}

.lumgem-cart-remove-dialog__confirm {
	border-color: #8f3d36;
	color: #8f3d36;
}

.lumgem-scope .lumgem-cart-remove-dialog__keep:hover,
.lumgem-scope .lumgem-cart-remove-dialog__keep:focus-visible {
	background: var(--lumgem-emerald);
	color: #fff;
}

.lumgem-cart-remove-dialog__confirm:hover,
.lumgem-cart-remove-dialog__confirm:focus-visible {
	background: #8f3d36;
	color: #fff;
}

.lumgem-cart-message-dialog {
	position: relative;
	width: min(420px, calc(100vw - 32px));
	padding: 28px;
	border: 0;
	border-radius: 2px;
	background: #fff;
	color: var(--lumgem-text);
}

.lumgem-cart-message-dialog::backdrop {
	background: rgba(13, 20, 17, .62);
}

.lumgem-cart-message-dialog__close {
	position: absolute;
	top: 15px;
	right: 16px;
	width: auto;
	height: auto;
	min-width: 0;
	min-height: 0;
	padding: 0;
	border: 0;
	background: transparent;
	color: var(--lumgem-text);
	font-size: 25px;
	font-weight: 300;
	line-height: 1;
}

.lumgem-cart-message-dialog h2 {
	margin: 0 30px 10px 0;
	font-family: var(--lumgem-font-heading);
	font-size: 24px;
	font-weight: 400;
}

.lumgem-cart-message-dialog__message {
	margin: 0 0 24px;
	color: var(--lumgem-muted);
	font-size: 14px;
	line-height: 1.55;
}

.lumgem-cart-message-dialog__actions {
	display: flex;
	justify-content: flex-end;
	gap: 12px;
}

.lumgem-scope .lumgem-cart-message-dialog__cancel,
.lumgem-scope .lumgem-cart-message-dialog__confirm {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 118px;
	min-height: 42px;
	padding: 10px 18px;
	border: 1px solid var(--lumgem-emerald);
	background: #fff;
	color: var(--lumgem-emerald);
	font-size: 12px;
	font-weight: 600;
}

.lumgem-scope .lumgem-cart-message-dialog__confirm {
	background: var(--lumgem-emerald);
	color: #fff;
}

.lumgem-cart-inline-notice {
	margin-bottom: 20px;
}

@media (min-width: 1024px) {
	body.woocommerce-cart .lumgem-header__inner {
		min-height: 62px;
	}

	.lumgem-cart {
		max-width: 1280px;
		padding-top: 20px;
	}

	.lumgem-cart__grid {
		grid-template-columns: minmax(0, 1.8fr) minmax(350px, 1fr);
		gap: 28px;
	}
}

@media (max-width: 767px) {
	body.lumgem-scope.woocommerce-cart .lumgem-header__icon-btn.lumgem-header__search-toggle,
	body.lumgem-scope.woocommerce-cart .lumgem-header__icon-btn.lumgem-header__account,
	body.lumgem-scope.woocommerce-cart .lumgem-header__icon-btn.lumgem-header__wishlist {
		display: none;
	}

	body.woocommerce-cart .lumgem-header__mobile-left {
		width: 42px;
	}

	.lumgem-cart-steps ol {
		font-size: 10px;
		gap: 3px;
	}

	.lumgem-cart-steps li {
		padding-right: 13px;
	}

	.lumgem-cart-assurance-strip {
		grid-template-columns: 1fr;
	}

	.lumgem-cart-assurance-strip__item {
		min-height: 34px;
		padding: 6px 10px;
		font-size: 10px;
	}

	.lumgem-cart-assurance-strip__item + .lumgem-cart-assurance-strip__item {
		border-top: 1px solid var(--lumgem-border);
		border-left: 0;
	}

	.lumgem-item-summary__title {
		font-size: 17px;
	}

	.lumgem-cart__aside {
		padding: 16px 12px;
	}

	.lumgem-cart-remove-dialog {
		padding: 24px 18px 18px;
	}

	.lumgem-cart-message-dialog {
		padding: 24px 18px 18px;
	}

	.lumgem-cart-remove-dialog h2 {
		font-size: 22px;
	}

	.lumgem-cart-message-dialog h2 {
		font-size: 22px;
	}
}

/* Final cart-item layout layer. Kept last so WooCommerce small-screen rules
   and the legacy compatibility rules above cannot reintroduce table-cell
   alignment after this component has been composed. */
@media (min-width: 1024px) {
	.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card {
		display: grid;
		grid-template-columns: 24px minmax(160px, 190px) minmax(180px, 1fr) 116px;
		grid-template-areas:
			"remove thumb name price"
			"remove thumb name qty"
			"remove thumb actions actions";
		align-items: start;
		gap: 8px 16px;
		min-height: 214px;
		padding: 16px 0;
	}

	.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card td {
		min-width: 0;
		padding: 0;
		text-align: left;
	}

	.lumgem-cart-item-card .product-remove { grid-area: remove; }
	.lumgem-cart-item-card .product-thumbnail { grid-area: thumb; }
	.lumgem-cart-item-card .product-name { grid-area: name; }
	.lumgem-cart-item-card .product-price { grid-area: price; text-align: right; }
	.lumgem-cart-item-card .product-quantity { grid-area: qty; justify-self: end; }
	.lumgem-cart-item-card .product-actions {
		position: static;
		grid-area: actions;
		justify-self: end;
		align-self: end;
	}
	.lumgem-cart-item-card .product-subtotal { display: none; }

	.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail img {
		width: 100%;
		height: auto;
		max-width: 190px;
		aspect-ratio: 1 / 1;
		object-fit: contain;
		border-radius: 0;
	}

	.lumgem-cart-item-card .product-name > a {
		display: block;
		max-width: 360px;
		font-family: var(--lumgem-font-heading);
		font-size: 18px;
		font-weight: 400;
		line-height: 1.35;
	}
}

@media (max-width: 1023px) {
	.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card {
		display: grid;
		grid-template-columns: 22px 96px minmax(0, 1fr);
		grid-template-areas:
			"remove thumb name"
			"remove thumb price"
			"remove thumb qty"
			"actions actions actions";
		align-items: start;
		gap: 6px 12px;
		padding: 14px 0 10px;
	}

	.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card td {
		min-width: 0;
		padding: 0;
		text-align: left;
	}

	.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card td.product-subtotal {
		display: none !important;
	}

	.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail img {
		width: 96px;
		height: 96px;
		max-width: 96px;
		object-fit: contain;
		border-radius: 0;
	}

	.lumgem-cart-item-card .product-name,
	.lumgem-cart-item-card .product-price,
	.lumgem-cart-item-card .product-quantity,
	.lumgem-cart-item-card .product-actions {
		text-align: left;
	}

	.lumgem-cart-item-card .product-name {
		font-size: 13px;
		font-weight: 400;
		line-height: 1.4;
	}

	.lumgem-cart-item-card .product-name > a {
		display: block;
		font-family: var(--lumgem-font-heading);
		font-size: 15px;
		font-weight: 400;
		line-height: 1.35;
	}

	.lumgem-cart-item-card__sku {
		margin-top: 7px;
		font-size: 10px;
	}

	.lumgem-cart-item-card__variants {
		margin-top: 7px;
		font-size: 11px;
	}

	.lumgem-cart-item-card__variants dl.variation {
		display: flex;
		flex-wrap: wrap;
		align-items: baseline;
		gap: 2px 5px;
		margin: 0;
	}

	.lumgem-cart-item-card__variants dl.variation dt,
	.lumgem-cart-item-card__variants dl.variation dd,
	.lumgem-cart-item-card__variants dl.variation p {
		float: none;
		clear: none;
		width: auto;
		margin: 0;
		padding: 0;
	}

	.lumgem-cart-item-card__sale-price {
		justify-content: flex-start;
	}

	.lumgem-cart-item-card .product-actions {
		grid-area: actions;
		margin-top: 4px;
		padding-top: 7px;
		border-top: 1px solid var(--lumgem-border);
	}

	.lumgem-cart-item-card .product-actions .lumgem-cart-item-card__actions {
		justify-content: flex-end;
		gap: 2px;
		margin-left: 0;
	}

	.lumgem-scope .lumgem-qty-stepper .lumgem-qty-stepper__btn {
		width: 34px;
		height: 34px;
		min-width: 34px;
	}

	.lumgem-qty-stepper input.qty {
		width: 38px;
		height: 34px;
	}

	.lumgem-cart--single-item .lumgem-item-summary {
		justify-content: flex-start;
	}

	.woocommerce-cart .lumgem-cart--single-item table.lumgem-cart-items.cart tr.lumgem-cart-item-card {
		grid-template-columns: 104px minmax(0, 1fr);
		grid-template-areas:
			"thumb name"
			"thumb price"
			"thumb qty"
			"actions actions";
	}

	.lumgem-cart--single-item .lumgem-cart-item-card .product-remove {
		display: none;
	}

	.woocommerce-cart .lumgem-cart--single-item table.lumgem-cart-items.cart .product-thumbnail img {
		width: 104px;
		height: 104px;
		max-width: 104px;
	}
}

@media (max-width: 767px) {
	.lumgem-cart-assurance-strip__item + .lumgem-cart-assurance-strip__item {
		border-top: 0;
	}

	.lumgem-cart-assurance-strip__item:first-child {
		padding-bottom: 2px;
	}

	.lumgem-cart-assurance-strip__item:last-child {
		padding-top: 2px;
	}
}

/* Final editorial cart layout: keep after every WooCommerce compatibility
   rule so the shopping bag cannot fall back to responsive-table styling. */
body.lumgem-scope.woocommerce-cart .lumgem-item-summary {
	margin: 0;
	padding: 2px 0 14px;
	background: transparent;
	border: 0;
	border-bottom: 1px solid #ded7cd;
}

body.lumgem-scope.woocommerce-cart .lumgem-item-summary__title {
	font-family: var(--lumgem-font-heading);
	font-size: 21px;
	font-weight: 400;
	text-transform: uppercase;
}

body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart,
body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart tbody {
	display: block;
	width: 100%;
	margin: 0;
	background: transparent;
	border: 0;
}

body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card {
	position: relative;
	box-sizing: border-box;
	width: 100%;
	margin: 0;
	background: transparent;
	border: 0;
	border-bottom: 1px solid #ded7cd;
	box-shadow: none;
}

body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card td {
	box-sizing: border-box;
	min-width: 0;
	background: transparent;
	border: 0;
	box-shadow: none;
}

body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card__edit-options {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	margin-top: 8px;
	color: #77716a;
	font-size: 10px;
	font-weight: 400;
	text-decoration: none;
}

body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card__edit-options:hover,
body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card__edit-options:focus-visible {
	color: var(--lumgem-emerald);
	text-decoration: underline;
	text-underline-offset: 3px;
}

body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card__actions .lumgem-cart-item-card__action,
body.lumgem-scope.woocommerce-cart a.lumgem-cart-item-card__remove.lumgem-cart-item-card__action {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 7px;
	width: auto;
	height: 34px;
	min-width: 0;
	padding: 0;
	background: transparent;
	border: 0;
	border-radius: 0;
	color: #5f5a54;
	font-size: 11px;
	font-weight: 400;
	line-height: 1;
	text-decoration: none;
}

body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card__actions .lumgem-cart-item-card__action:hover,
body.lumgem-scope.woocommerce-cart a.lumgem-cart-item-card__remove.lumgem-cart-item-card__action:hover {
	background: transparent;
	color: var(--lumgem-emerald);
	text-decoration: underline;
	text-underline-offset: 3px;
}

body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card__actions .lumgem-cart-item-card__action svg {
	width: 17px;
	height: 17px;
	flex: 0 0 17px;
}

@media (min-width: 1024px) {
	body.lumgem-scope.woocommerce-cart .lumgem-cart__grid {
		grid-template-columns: minmax(0, 1.85fr) minmax(360px, 1fr);
		gap: 30px;
		align-items: start;
	}

	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card {
		display: grid;
		grid-template-columns: 24px minmax(180px, 26%) minmax(230px, 1fr) minmax(116px, 132px);
		grid-template-areas: "remove thumb name price" "remove thumb name qty" "remove thumb actions actions";
		align-items: start;
		gap: 7px 18px;
		min-height: 236px;
		padding: 18px 0;
	}

	body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card .product-remove { grid-area: remove; padding-top: 6px; }
	body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card .product-thumbnail { grid-area: thumb; align-self: stretch; }
	body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card .product-name { grid-area: name; padding-top: 3px; text-align: left; }
	body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card .product-price { grid-area: price; justify-self: end; text-align: right; }
	body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card .product-quantity { grid-area: qty; justify-self: end; }

	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail a {
		display: flex;
		align-items: center;
		justify-content: center;
		width: 100%;
		height: 100%;
		min-height: 198px;
	}

	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail img {
		width: 100%;
		height: 100%;
		max-width: 230px;
		max-height: 210px;
		object-fit: contain;
		background: #fff;
		border: 0;
		border-radius: 0;
	}

	body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card .product-name > a {
		display: block;
		max-width: 410px;
		font-family: var(--lumgem-font-heading);
		font-size: clamp(17px, 1.18vw, 20px);
		font-weight: 400;
		line-height: 1.32;
	}

	body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card__variants dl.variation {
		display: grid;
		grid-template-columns: auto 1fr;
		gap: 5px 10px;
		margin: 10px 0 0;
	}

	body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card__variants dl.variation dt,
	body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card__variants dl.variation dd,
	body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card__variants dl.variation p {
		float: none;
		clear: none;
		width: auto;
		margin: 0;
		padding: 0;
	}

	body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card__sale-price {
		justify-content: flex-end;
		padding: 0;
		background: transparent;
	}

	body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card .product-actions {
		position: static;
		grid-area: actions;
		align-self: end;
		justify-self: stretch;
		margin: 8px 0 0;
		padding: 10px 0 0;
		border-top: 1px solid #e7e0d7;
	}

	body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card .product-actions .lumgem-cart-item-card__actions {
		justify-content: flex-end;
		gap: 22px;
	}

	body.lumgem-scope.woocommerce-cart .lumgem-cart__aside {
		position: sticky;
		top: 112px;
		padding: 20px 18px;
		background: #fff;
		border: 1px solid #ded7cd;
		box-shadow: none;
	}
}

@media (max-width: 1023px) {
	body.lumgem-scope.woocommerce-cart .lumgem-item-summary__title { font-size: 18px; }

	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card {
		display: grid;
		grid-template-columns: 24px 96px minmax(0, 1fr);
		grid-template-areas: "remove thumb name" "remove thumb price" "remove thumb qty" "actions actions actions";
		align-items: start;
		gap: 8px 12px;
		min-height: 0;
		padding: 15px 0 12px;
	}

	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card td {
		padding: 0;
		text-align: left !important;
	}

	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card td::before {
		display: none !important;
	}

	/* Selection is a dedicated grid cell, never an overlay on the product
	   image link. This keeps its hit target separate from opening the item. */
	body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card .product-remove {
		position: static;
		grid-area: remove;
		display: flex;
		justify-content: center;
		padding-top: 10px;
	}
	body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card .product-remove input {
		width: 16px;
		height: 16px;
		margin: 0;
		cursor: pointer;
	}
	body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card .product-remove:empty { display: none; }
	body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card .product-thumbnail { grid-area: thumb; }
	body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card .product-name { grid-area: name; }
	body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card .product-price { grid-area: price; justify-self: start; }
	body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card .product-quantity { grid-area: qty; justify-self: start; }

	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail,
	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail a {
		display: flex;
		align-items: center;
		justify-content: center;
		width: 96px;
		height: 116px;
	}

	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail img {
		width: 96px;
		height: 96px;
		max-width: 96px;
		object-fit: contain;
		background: #fff;
		border: 0;
		border-radius: 0;
	}

	body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card .product-name > a {
		display: -webkit-box;
		overflow: hidden;
		-webkit-box-orient: vertical;
		-webkit-line-clamp: 3;
		font-family: var(--lumgem-font-heading);
		font-size: 15px;
		font-weight: 400;
		line-height: 1.34;
	}

	body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card__variants dl.variation {
		display: flex;
		flex-wrap: wrap;
		align-items: baseline;
		gap: 3px 5px;
		margin: 5px 0 0;
	}

	body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card__variants dl.variation dt,
	body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card__variants dl.variation dd,
	body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card__variants dl.variation p {
		display: inline;
		float: none;
		clear: none;
		width: auto;
		margin: 0;
		padding: 0;
	}

	body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card__sale-price {
		justify-content: flex-start;
		padding: 0;
		background: transparent;
		white-space: normal;
	}

	body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card .product-actions {
		position: static;
		grid-column: 1 / -1 !important;
		grid-row: auto !important;
		justify-self: stretch;
		margin: 4px 0 0;
		padding: 8px 0 0;
		border-top: 1px solid #e7e0d7;
	}

	body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card .product-actions .lumgem-cart-item-card__actions {
		justify-content: flex-end;
		gap: 20px;
	}

	body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card .product-subtotal { display: none !important; }
	body.lumgem-scope.woocommerce-cart .lumgem-cart__aside { padding: 16px 0 0; background: transparent; border: 0; box-shadow: none; }
}

@media (max-width: 374px) {
	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card {
		grid-template-columns: 100px minmax(0, 1fr);
		gap: 7px 10px;
	}

	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail,
	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail a {
		width: 100px;
		height: 122px;
	}

	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail img {
		width: 100px;
		height: 100px;
		max-width: 100px;
	}
}

/* Real gift-ready package: an editorial experience block, never a faux
   line item or an invented three-choice promotion. */
body.lumgem-scope.woocommerce-cart .lumgem-cart-free-gift {
	margin: 20px 0 0;
	padding: 18px 0 0;
	border-top: 1px solid #ded7cd;
}

body.lumgem-scope.woocommerce-cart .lumgem-cart-free-gift__title {
	margin: 0 0 10px;
	font-family: var(--lumgem-font-heading);
	font-size: 18px;
	font-weight: 400;
	letter-spacing: 0.01em;
	text-transform: uppercase;
}

body.lumgem-scope.woocommerce-cart .lumgem-cart-free-gift__item {
	display: grid;
	grid-template-columns: 112px minmax(0, 1fr) auto auto;
	align-items: center;
	gap: 14px;
	min-height: 116px;
	padding: 12px;
	background: #fff;
	border: 1px solid #e5ddd2;
	border-radius: 0;
}

body.lumgem-scope.woocommerce-cart .lumgem-cart-free-gift__image,
body.lumgem-scope.woocommerce-cart .lumgem-cart-free-gift__image img {
	display: block;
	width: 112px;
	height: 90px;
	object-fit: contain;
	background: #fff;
}

body.lumgem-scope.woocommerce-cart .lumgem-cart-free-gift__body {
	display: grid;
	gap: 5px;
}

body.lumgem-scope.woocommerce-cart .lumgem-cart-free-gift__name {
	font-family: var(--lumgem-font-heading);
	font-size: 16px;
	line-height: 1.3;
}

body.lumgem-scope.woocommerce-cart .lumgem-cart-free-gift__note {
	color: #746e67;
	font-size: 11px;
	line-height: 1.45;
}

body.lumgem-scope.woocommerce-cart .lumgem-cart-free-gift__price {
	color: var(--lumgem-emerald);
	font-size: 13px;
	font-weight: 700;
}

body.lumgem-scope.woocommerce-cart .lumgem-cart-free-gift__price-zero {
	display: block;
	margin-top: 3px;
	color: #8a837c;
	font-size: 10px;
	font-weight: 400;
	text-decoration: line-through;
}

body.lumgem-scope.woocommerce-cart .lumgem-cart-free-gift__qty {
	color: #77716a;
	font-size: 11px;
}

body.lumgem-scope.woocommerce-cart .lumgem-cart-collaterals .cart_totals table {
	border: 0;
	border-collapse: collapse;
}

body.lumgem-scope.woocommerce-cart .lumgem-cart-collaterals .cart_totals th,
body.lumgem-scope.woocommerce-cart .lumgem-cart-collaterals .cart_totals td {
	padding-top: 12px;
	padding-bottom: 12px;
	background: transparent;
	border-right: 0;
	border-left: 0;
	border-color: #e7e0d7;
}

/*
 * Cart summary hierarchy
 *
 * A fine-jewellery cart should read as a short purchase decision, not as an
 * accounting worksheet. Keep the factual totals untouched in the WooCommerce
 * table, but remove the repeated row rules and let the total's single rule
 * create the visual destination: Subtotal -> saving -> shipping -> Total.
 */
body.lumgem-scope.woocommerce-cart .lumgem-cart__aside-title,
body.lumgem-scope.woocommerce-cart .lumgem-item-summary__title {
	font-family: var(--lumgem-font-heading);
	font-size: 21px;
	font-weight: 400;
	letter-spacing: 0.025em;
	line-height: 1.12;
}

body.lumgem-scope.woocommerce-cart .lumgem-cart-collaterals .cart_totals th,
body.lumgem-scope.woocommerce-cart .lumgem-cart-collaterals .cart_totals td {
	border-bottom: 0;
}

body.lumgem-scope.woocommerce-cart .lumgem-cart-collaterals .lumgem-retail-price th,
body.lumgem-scope.woocommerce-cart .lumgem-cart-collaterals .lumgem-retail-price td,
body.lumgem-scope.woocommerce-cart .lumgem-cart-collaterals .lumgem-product-savings th,
body.lumgem-scope.woocommerce-cart .lumgem-cart-collaterals .lumgem-product-savings td {
	padding-top: 5px;
	padding-bottom: 5px;
	color: #8b837b;
	font-size: 12px;
	font-weight: 400;
}

body.lumgem-scope.woocommerce-cart .lumgem-cart-collaterals .cart-subtotal th,
body.lumgem-scope.woocommerce-cart .lumgem-cart-collaterals .cart-subtotal td,
body.lumgem-scope.woocommerce-cart .lumgem-cart-collaterals .woocommerce-shipping-totals th,
body.lumgem-scope.woocommerce-cart .lumgem-cart-collaterals .woocommerce-shipping-totals td {
	padding-top: 9px;
	padding-bottom: 9px;
	font-size: 13px;
	font-weight: 500;
}

body.lumgem-scope.woocommerce-cart .lumgem-cart-collaterals .cart-discount th,
body.lumgem-scope.woocommerce-cart .lumgem-cart-collaterals .cart-discount td,
body.lumgem-scope.woocommerce-cart .lumgem-cart-collaterals .cart-discount a {
	color: var(--lumgem-emerald);
}

body.lumgem-scope.woocommerce-cart .lumgem-cart-collaterals .order-total th,
body.lumgem-scope.woocommerce-cart .lumgem-cart-collaterals .order-total td {
	border-top: 1px solid #d8cec3;
	border-bottom: 0;
	padding-top: 17px;
	padding-bottom: 11px;
	font-size: 20px;
	font-weight: 700;
}

/* WooCommerce and a legacy Cart compatibility layer both add cell and row
 * rules later in the cascade. The Summary deliberately has one separator
 * only: the line immediately before the final Total. */
body.lumgem-scope.woocommerce-cart .lumgem-cart-collaterals .cart_totals .shop_table tr:not(.order-total),
body.lumgem-scope.woocommerce-cart .lumgem-cart-collaterals .cart_totals .shop_table tr:not(.order-total) th,
body.lumgem-scope.woocommerce-cart .lumgem-cart-collaterals .cart_totals .shop_table tr:not(.order-total) td {
	border-top: 0 !important;
	border-bottom: 0 !important;
}

body.lumgem-scope.woocommerce-cart .lumgem-cart-collaterals .cart_totals .shop_table .order-total,
body.lumgem-scope.woocommerce-cart .lumgem-cart-collaterals .cart_totals .shop_table .order-total th,
body.lumgem-scope.woocommerce-cart .lumgem-cart-collaterals .cart_totals .shop_table .order-total td {
	border-bottom: 0 !important;
}

body.lumgem-scope.woocommerce-cart .lumgem-cart-collaterals .cart_totals .shop_table .order-total th,
body.lumgem-scope.woocommerce-cart .lumgem-cart-collaterals .cart_totals .shop_table .order-total td {
	border-top: 1px solid #d8cec3 !important;
}

@media (max-width: 1023px) {
	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail {
		overflow: hidden;
	}

	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail img {
		transform: scale(1.13);
		transform-origin: center;
	}

	body.lumgem-scope.woocommerce-cart .lumgem-cart-free-gift {
		margin-top: 16px;
		padding-top: 14px;
	}

	body.lumgem-scope.woocommerce-cart .lumgem-cart-free-gift__title {
		font-size: 17px;
	}

	body.lumgem-scope.woocommerce-cart .lumgem-cart-free-gift__item {
		grid-template-columns: 86px minmax(0, 1fr) auto;
		gap: 10px;
		min-height: 100px;
		padding: 10px;
	}

	body.lumgem-scope.woocommerce-cart .lumgem-cart-free-gift__image,
	body.lumgem-scope.woocommerce-cart .lumgem-cart-free-gift__image img {
		width: 86px;
		height: 76px;
	}

	body.lumgem-scope.woocommerce-cart .lumgem-cart-free-gift__name {
		font-size: 14px;
	}

	body.lumgem-scope.woocommerce-cart .lumgem-cart-free-gift__qty {
		display: none;
	}
}

/* Final cart-action layout override. Kept at the end of the cart stylesheet
 * so legacy cart rules cannot turn these quiet links back into button rows. */
body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail {
	display: flex;
	flex-direction: column;
	align-items: stretch;
}

body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail > .lumgem-cart-item-card__actions {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 11px 14px;
	width: 100%;
	margin-top: 8px;
	padding: 0;
	border-top: 0;
}

body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail > .lumgem-cart-item-card__actions .lumgem-cart-item-card__action,
body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail > .lumgem-cart-item-card__actions a.lumgem-cart-item-card__remove {
	display: inline-flex !important;
	align-items: center;
	justify-content: flex-start;
	gap: 5px;
	width: auto !important;
	height: auto !important;
	min-height: 0 !important;
	margin: 0 !important;
	padding: 0 !important;
	background: transparent !important;
	border: 0 !important;
	border-radius: 0 !important;
	box-shadow: none !important;
	color: #34312e !important;
	font-family: var(--lumgem-font-body);
	font-size: 12px;
	font-weight: 400;
	line-height: 1.35;
	text-decoration: underline;
	text-decoration-color: #918a82;
	text-underline-offset: 3px;
}

body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail > .lumgem-cart-item-card__actions .lumgem-cart-item-card__edit-options { grid-column: 1; grid-row: 1; }
body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail > .lumgem-cart-item-card__actions .lumgem-cart-item-card__remove { grid-column: 2; grid-row: 1; }
body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail > .lumgem-cart-item-card__actions .lumgem-cart-item-card__wishlist { grid-column: 1 / -1; grid-row: 2; }

body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail > .lumgem-cart-item-card__actions .lumgem-cart-item-card__action:hover,
body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail > .lumgem-cart-item-card__actions .lumgem-cart-item-card__action:focus-visible {
	color: #004438 !important;
	text-decoration-color: #004438;
}

body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail > .lumgem-cart-item-card__actions svg {
	width: 14px;
	height: 14px;
	flex: 0 0 14px;
	color: currentColor;
	stroke: currentColor;
}

/* WooCommerce's responsive table label adds `: ` even to this colspan cell.
 * The rewards preview is intentionally an unlabeled caption, so suppress the
 * generated label rather than hiding any real Rewards content. */
body.lumgem-scope.woocommerce-cart .lumgem-rewards-earn-note td::before {
	display: none !important;
	content: none !important;
}

body.lumgem-scope.woocommerce-cart .lumgem-rewards-earn-note td {
	display: flex !important;
	width: 100% !important;
	padding: 0 12px 12px !important;
	align-items: center;
	justify-content: flex-start;
	box-sizing: border-box;
	text-align: left !important;
}

body.lumgem-scope.woocommerce-cart .lumgem-cart-collaterals .order-total:has(+ .lumgem-rewards-earn-note) th,
body.lumgem-scope.woocommerce-cart .lumgem-cart-collaterals .order-total:has(+ .lumgem-rewards-earn-note) td {
	padding-bottom: 4px;
}

body.lumgem-scope.woocommerce-cart .lumgem-rewards-earn-preview {
	display: inline-flex !important;
	width: auto !important;
	margin: 0 !important;
	justify-content: flex-start;
	text-align: left;
}

@media (min-width: 768px) {
	body.lumgem-scope.woocommerce-cart .lumgem-rewards-earn-note td {
		display: table-cell !important;
		width: auto !important;
		white-space: nowrap;
	}

	body.lumgem-scope.woocommerce-cart .lumgem-rewards-earn-preview,
	body.lumgem-scope.woocommerce-cart .lumgem-rewards-earn-preview__text {
		white-space: nowrap;
	}
}

/* Logged-in points redemption uses the Coupon Code offer area rather than a
 * competing row inside the total. The actual account-bound Rewards fee is
 * unchanged; this only gives the customer one quiet place for discounts. */
body.lumgem-scope.woocommerce-cart .lumgem-cart-points-coupon {
	display: flex;
	align-items: center;
	justify-content: flex-start;
	gap: 8px;
	margin: 8px 0 0;
	padding: 8px 10px;
	border: 0;
	border-radius: 3px;
	background: #faf8f4;
	box-shadow: none;
	white-space: nowrap;
}

body.lumgem-scope.woocommerce-cart .lumgem-cart-points-coupon__label {
	flex: 0 0 auto;
	padding-top: 0;
	color: var(--lumgem-text);
	font-size: 11px;
	font-weight: 600;
	white-space: nowrap;
}

body.lumgem-scope.woocommerce-cart .lumgem-cart-points-coupon .lumgem-rewards-redeem {
	flex: 1 1 auto;
	min-width: 0;
	display: flex;
	flex-direction: row;
	align-items: center;
	justify-content: space-between;
	gap: 8px;
	text-align: left;
}

body.lumgem-scope.woocommerce-cart .lumgem-cart-points-coupon .lumgem-rewards-redeem__hint,
body.lumgem-scope.woocommerce-cart .lumgem-cart-points-coupon .lumgem-rewards-redeem__status {
	max-width: 100%;
	font-size: 11px;
	line-height: 1.25;
	white-space: nowrap;
}

body.lumgem-scope.woocommerce-cart .lumgem-cart-points-coupon .lumgem-rewards-redeem__apply,
body.lumgem-scope.woocommerce-cart .lumgem-cart-points-coupon .lumgem-rewards-redeem__remove {
	flex: 0 0 auto;
	height: 32px;
	min-height: 32px;
	padding: 0 10px;
	font-size: 11px;
	line-height: 30px;
	white-space: nowrap;
}

@media (max-width: 480px) {
	body.lumgem-scope.woocommerce-cart .lumgem-cart-points-coupon {
		gap: 6px;
		padding: 8px;
	}

	body.lumgem-scope.woocommerce-cart .lumgem-cart-points-coupon .lumgem-rewards-redeem {
		gap: 6px;
	}

	body.lumgem-scope.woocommerce-cart .lumgem-cart-points-coupon__label,
	body.lumgem-scope.woocommerce-cart .lumgem-cart-points-coupon .lumgem-rewards-redeem__hint,
	body.lumgem-scope.woocommerce-cart .lumgem-cart-points-coupon .lumgem-rewards-redeem__status,
	body.lumgem-scope.woocommerce-cart .lumgem-cart-points-coupon .lumgem-rewards-redeem__apply,
	body.lumgem-scope.woocommerce-cart .lumgem-cart-points-coupon .lumgem-rewards-redeem__remove {
		font-size: 10px;
	}

	body.lumgem-scope.woocommerce-cart .lumgem-cart-points-coupon .lumgem-rewards-redeem__apply,
	body.lumgem-scope.woocommerce-cart .lumgem-cart-points-coupon .lumgem-rewards-redeem__remove {
		padding: 0 7px;
	}
}

/* Gift Card is not presented until a real balance/ledger redemption flow is
 * available. Never show a non-functional "Coming Soon" control at checkout. */
body.lumgem-scope.woocommerce-cart .lumgem-cart-giftcard-row {
	display: none !important;
}

/* Compact conversion rhythm: points reassurance → primary checkout → wallet
 * alternative. These rules only control spacing; gateway DOM and behavior
 * remain untouched. */
body.lumgem-scope.woocommerce-cart .wc-proceed-to-checkout {
	margin: 0 !important;
	padding: 0 !important;
	gap: 16px var(--lumgem-space-3);
}

body.lumgem-scope.woocommerce-cart .wc-proceed-to-checkout::before,
body.lumgem-scope.woocommerce-cart .wc-proceed-to-checkout::after {
	display: none !important;
	content: none !important;
}

body.lumgem-scope.woocommerce-cart .wc-proceed-to-checkout > .checkout-button {
	margin: 0 !important;
}

/* PayPal Payments may inject its optional financing message as the first
 * child. Keep it available, but place it after the actual payment choices so
 * it cannot create a blank row between Rewards and Secure Checkout. */
body.lumgem-scope.woocommerce-cart .wc-proceed-to-checkout > .ppcp-messages {
	order: 4;
	flex: 1 1 100%;
	margin: 0;
}

body.lumgem-scope.woocommerce-cart .wc-proceed-to-checkout > .lumgem-cart-pay-with__heading {
	margin-top: 2px;
}

/*
 * Cart wallet row — Payment Gateway for PayPal on WooCommerce (v9+) uses
 * `.ppcp-button-container.ppcp_cart`, not the legacy `.ppc-button-wrapper`.
 * These rules are intentionally presentation-only: the gateway's real SDK
 * containers stay in their original DOM hierarchy, preserving PayPal,
 * Google Pay and Apple Pay eligibility and payment behaviour.
 */
body.lumgem-scope.woocommerce-cart .wc-proceed-to-checkout > .ppcp-button-container.ppcp_cart {
	order: 3;
	flex: 1 1 100%;
	display: flex;
	align-items: stretch;
	gap: 8px;
	min-width: 0;
	margin: 0 !important;
}

/* The theme supplies one clear OR PAY WITH label. Hide the gateway's own
   generic separator so it cannot create a duplicate or a vertical gap. */
body.lumgem-scope.woocommerce-cart .wc-proceed-to-checkout > .ppcp-button-container.ppcp_cart > .ppcp-proceed-to-checkout-button-separator {
	display: none !important;
}

body.lumgem-scope.woocommerce-cart .wc-proceed-to-checkout > .ppcp-button-container.ppcp_cart > #ppcp_cart,
body.lumgem-scope.woocommerce-cart .wc-proceed-to-checkout > .ppcp-button-container.ppcp_cart > .google-pay-container[data-context="cart"],
body.lumgem-scope.woocommerce-cart .wc-proceed-to-checkout > .ppcp-button-container.ppcp_cart > .apple-pay-container[data-context="cart"] {
	flex: 1 1 0;
	width: 0 !important;
	min-width: 0;
	height: 48px !important;
	min-height: 48px !important;
	margin: 0 !important;
}

body.lumgem-scope.woocommerce-cart .wc-proceed-to-checkout > .ppcp-button-container.ppcp_cart > #ppcp_cart {
	order: 1;
}

body.lumgem-scope.woocommerce-cart .wc-proceed-to-checkout > .ppcp-button-container.ppcp_cart > .google-pay-container[data-context="cart"] {
	order: 2;
}

body.lumgem-scope.woocommerce-cart .wc-proceed-to-checkout > .ppcp-button-container.ppcp_cart > .apple-pay-container[data-context="cart"] {
	order: 3;
}

body.lumgem-scope.woocommerce-cart .wc-proceed-to-checkout > .ppcp-button-container.ppcp_cart.lumgem-cart-wallets--single > #ppcp_cart {
	flex-basis: 100%;
}

body.lumgem-scope.woocommerce-cart .wc-proceed-to-checkout > .ppcp-button-container.ppcp_cart > #ppcp_cart.lumgem-pay-with-item--empty,
body.lumgem-scope.woocommerce-cart .wc-proceed-to-checkout > .ppcp-button-container.ppcp_cart > .google-pay-container.lumgem-pay-with-item--empty,
body.lumgem-scope.woocommerce-cart .wc-proceed-to-checkout > .ppcp-button-container.ppcp_cart > .apple-pay-container.lumgem-pay-with-item--empty {
	display: none !important;
}

body.lumgem-scope.woocommerce-cart .wc-proceed-to-checkout > .ppcp-button-container.ppcp_cart > .apple-pay-container apple-pay-button,
body.lumgem-scope.woocommerce-cart .wc-proceed-to-checkout > .ppcp-button-container.ppcp_cart > .google-pay-container > * {
	width: 100% !important;
	height: 48px !important;
	min-height: 48px !important;
	margin: 0 !important;
}

/* The PayPal SDK may inject a 200px minimum width that is unsuitable for a
   two-up mobile row. This limits only the visual iframe shell, never the
   gateway itself or its click handlers. */
body.lumgem-scope.woocommerce-cart .wc-proceed-to-checkout > .ppcp-button-container.ppcp_cart #ppcp_cart .paypal-buttons,
body.lumgem-scope.woocommerce-cart .wc-proceed-to-checkout > .ppcp-button-container.ppcp_cart #ppcp_cart iframe {
	min-width: 0 !important;
	width: 100% !important;
}

@media (max-width: 767px) {
	body.woocommerce-cart .wc-proceed-to-checkout > .ppc-button-wrapper,
	body.lumgem-scope.woocommerce-cart .wc-proceed-to-checkout > .ppcp-button-container.ppcp_cart {
		gap: 6px;
	}
}

@media (min-width: 1024px) {
	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card {
		grid-template-areas: "remove thumb name price" "remove thumb name qty";
	}

	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail > a {
		min-height: 178px;
	}
}

@media (max-width: 1023px) {
	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail,
	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail > a {
		height: auto;
	}

	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail > a { min-height: 96px; }

	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail > .lumgem-cart-item-card__actions {
		grid-template-columns: 1fr;
		gap: 9px;
		margin-top: 7px;
		padding-top: 0;
	}

	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail > .lumgem-cart-item-card__actions .lumgem-cart-item-card__edit-options,
	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail > .lumgem-cart-item-card__actions .lumgem-cart-item-card__remove,
	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail > .lumgem-cart-item-card__actions .lumgem-cart-item-card__wishlist {
		grid-column: 1;
		grid-row: auto;
	}

	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail > .lumgem-cart-item-card__actions .lumgem-cart-item-card__action,
	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail > .lumgem-cart-item-card__actions a.lumgem-cart-item-card__remove {
		font-size: 11px;
	}
}

/* Final cart interaction polish. Kept at the end of the file so older cart
   composition layers cannot reintroduce underlines or the broken 2-column
   layout used on very narrow phones. */
body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail > .lumgem-cart-item-card__actions .lumgem-cart-item-card__action,
body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail > .lumgem-cart-item-card__actions a.lumgem-cart-item-card__remove,
body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail > .lumgem-cart-item-card__actions .lumgem-cart-item-card__action:hover,
body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail > .lumgem-cart-item-card__actions .lumgem-cart-item-card__action:focus-visible {
	text-decoration: none !important;
}

body.lumgem-scope.woocommerce-cart .lumgem-cart-coupon {
	justify-content: flex-start;
}

body.lumgem-scope.woocommerce-cart .lumgem-cart-coupon input {
	flex: 0 1 50%;
	width: 50%;
	max-width: 220px;
}

@media (max-width: 374px) {
	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart tr.lumgem-cart-item-card {
		grid-template-columns: 22px 88px minmax(0, 1fr);
		grid-template-areas:
			"remove thumb name"
			"remove thumb price"
			"remove thumb qty"
			"actions actions actions";
		column-gap: 9px;
		row-gap: 7px;
	}

	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail {
		display: contents !important;
	}

	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail > a {
		grid-area: thumb;
		align-self: start;
		width: 88px;
		height: 104px;
		min-height: 104px;
	}

	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail > a img {
		width: 88px;
		height: 88px;
		max-width: 88px;
	}

	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail > .lumgem-cart-item-card__actions {
		grid-area: actions;
		display: flex !important;
		flex-flow: row wrap;
		align-items: center;
		justify-content: flex-start;
		gap: 8px 17px;
		width: 100%;
		margin: 5px 0 0;
		padding: 0 0 2px 31px;
	}

	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail > .lumgem-cart-item-card__actions .lumgem-cart-item-card__edit-options,
	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail > .lumgem-cart-item-card__actions .lumgem-cart-item-card__remove,
	body.lumgem-scope.woocommerce-cart table.lumgem-cart-items.cart .product-thumbnail > .lumgem-cart-item-card__actions .lumgem-cart-item-card__wishlist {
		grid-column: auto;
		grid-row: auto;
		flex: 0 0 auto;
		white-space: nowrap;
	}

	body.lumgem-scope.woocommerce-cart .lumgem-cart-item-card .product-name > a {
		font-size: 14px;
		line-height: 1.32;
	}
}

/* iOS Safari enlarges the whole page when a focused editable control is
   rendered below 16px. Keep Cart inputs at that threshold on touch screens
   so entering a coupon or quantity does not disrupt the layout. */
@media (max-width: 767px) {
	body.lumgem-scope.woocommerce-cart .lumgem-cart input:not([type="checkbox"]):not([type="radio"]),
	body.lumgem-scope.woocommerce-cart .lumgem-cart select,
	body.lumgem-scope.woocommerce-cart .lumgem-cart textarea {
		font-size: 16px !important;
	}
}
