/*
Theme Name: Mysterium Lucis Shop Theme
Theme URI: https://mysteriumlucis.pl
Author: Mysterium Lucis
Description: Gothic-luxury block theme for the Mysterium Lucis candle shop. Built for WooCommerce, no page builder — theme.json is the source of truth for design tokens.
Version: 0.2.0
Requires at least: 6.6
Tested up to: 7.0
Requires PHP: 8.0
Text Domain: mysterium-lucis-shop-theme
*/

/* ==========================================================================
   Presentational helper classes for the homepage design language (from the
   client's mockup). Attached to core blocks via "Additional CSS class(es)";
   the design tokens themselves live in theme.json. Organised page-top-to-
   bottom: Base → Utilities → Header → Hero → Trust → Collections → Story →
   Bestsellers → Instagram → Newsletter → Footer → Reduced motion.
   ========================================================================== */

/* ==========================================================================
   Base
   ========================================================================== */

/* WooCommerce's Mini-Cart renders its slide-out drawer off-canvas (to the right) even
   when closed, which adds horizontal scroll on narrow screens. Clip it at the root.
   overflow-x:clip (not hidden) clips without turning body into a second scroll
   container — hidden on both html and body produced a double scrollbar. */
body {
	overflow-x: clip;
}

/* Stack the top-level blocks (header / main / footer) flush — the default
   root block-gap left a strip of the page background showing between sections
   (most visibly around the purple newsletter). Each section carries its own
   padding, so no inter-section gap is wanted. */
.wp-site-blocks > * {
	margin-block-start: 0;
	margin-block-end: 0;
}

/* No default underline on links anywhere (matches the reference). Individual
   components add their own hover affordances (nav wipe-underline, footer/link
   colour shift) — none should show a persistent text-decoration underline. */
a {
	text-decoration: none;
}
a:hover {
	text-decoration: none;
}

/* Icons sit on the text baseline a touch high otherwise. */
.ph-light,
.ph-fill {
	vertical-align: middle;
}

/* Keep grid-of-cards sections (category tiles, Instagram grid) uniform height regardless
   of how much text ends up in any one card. */
.wp-block-columns {
	align-items: stretch;
}
.wp-block-column > .wp-block-cover {
	height: 100%;
}

/* Candle-flame flicker, used on decorative glow elements. */
@keyframes ml-flicker {
	0%, 100% { opacity: 0.9; transform: scale(1); }
	45%      { opacity: 0.68; transform: scale(0.97); }
	70%      { opacity: 1; transform: scale(1.03); }
}

/* ==========================================================================
   Utilities
   ========================================================================== */

/* Eyebrow: small gold uppercase label with a gradient hairline on each side.
   Attach to a centered paragraph (.ml-eyebrow). */
.ml-eyebrow {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 14px;
	color: var(--wp--preset--color--antique-gold);
	font-size: 0.74rem;
	letter-spacing: 0.32em;
	text-transform: uppercase;
}
.ml-eyebrow::before,
.ml-eyebrow::after {
	content: "";
	width: 44px;
	height: 1px;
	background: linear-gradient(90deg, transparent, var(--wp--preset--color--antique-gold));
}
.ml-eyebrow::after {
	background: linear-gradient(270deg, transparent, var(--wp--preset--color--antique-gold));
}
/* When an eyebrow is used inline before a single word (no flanking lines wanted),
   .ml-eyebrow--plain drops the rules. */
.ml-eyebrow--plain::before,
.ml-eyebrow--plain::after {
	display: none;
}
.ml-eyebrow--plain .ph-light {
	font-size: 20px;
}

/* Italic serif lead paragraph under section headings. */
.ml-lead {
	font-style: italic;
	color: var(--wp--preset--color--ash-taupe);
}

/* Section heading blocks (Collections / Bestsellers / Instagram): mirrors the
   reference's centred heading container — eyebrow (no lines) → h2 → lead, with
   tight controlled margins and a 480px lead. Sits in a blockGap:0 group so only
   these margins govern the rhythm. */
.ml-headline {
	text-align: center;
	margin-bottom: 52px;
}
.ml-headline .ml-eyebrow {
	margin-bottom: 14px;
}
.ml-headline > h2,
.ml-headline .wp-block-heading {
	margin: 0 0 16px;
}
.ml-headline .ml-lead {
	max-width: 480px;
	margin: 0 auto;
}
.ml-headline--tight {
	margin-bottom: 46px;
}

/* Primary button (theme.json styles the base gold button); on hover shift to ivory
   and widen the tracking, matching the reference. */
.wp-block-button:not(.is-style-ghost) .wp-block-button__link {
	transition: background 0.4s ease, color 0.4s ease, letter-spacing 0.4s ease;
}
.wp-block-button:not(.is-style-ghost) .wp-block-button__link:hover {
	background-color: var(--wp--preset--color--bone-ivory);
	color: var(--wp--preset--color--void-black);
	letter-spacing: 0.14em;
}

/* Ghost button — transparent, ivory hairline border, gold on hover. */
.wp-block-button.is-style-ghost .wp-block-button__link {
	background-color: transparent;
	color: var(--wp--preset--color--bone-ivory);
	border: 1px solid rgba(var(--wp--custom--ivory-rgb), 0.35);
	transition: border-color 0.4s ease, color 0.4s ease;
}
.wp-block-button.is-style-ghost .wp-block-button__link:hover {
	border-color: var(--wp--preset--color--antique-gold);
	color: var(--wp--preset--color--antique-gold);
	background-color: transparent;
}

/* Card hover lift — attach to group/column wrappers acting as cards. */
.ml-lift {
	transition: transform 0.5s var(--wp--custom--ease--lift), box-shadow 0.5s ease;
}
.ml-lift:hover {
	transform: translateY(-8px);
	box-shadow: var(--wp--custom--shadow--lift);
}

/* ==========================================================================
   Header
   ========================================================================== */
.ml-header-grid {
	display: grid;
	grid-template-columns: 1fr auto 1fr;
	align-items: center;
	gap: 20px;
}
/* The three columns are grid cells, not flow siblings — drop the constrained
   group's injected block-gap margins so the header row height is the content
   height (otherwise a stray 24px inflated the whole header). */
.ml-header-grid > * {
	margin-block: 0;
}

/* Left nav links: taupe uppercase with a gold underline that wipes in on hover. */
.ml-nav .wp-block-navigation-item__content {
	color: var(--wp--preset--color--ash-taupe);
	font-size: 0.78rem;
	letter-spacing: 0.2em;
	text-transform: uppercase;
	position: relative;
}
.ml-nav .wp-block-navigation-item__content::after {
	content: "";
	position: absolute;
	left: 0;
	right: 0;
	bottom: -6px;
	height: 1px;
	background: var(--wp--preset--color--antique-gold);
	transform: scaleX(0);
	transition: transform 0.35s ease;
}
.ml-nav .wp-block-navigation-item__content:hover::after {
	transform: scaleX(1);
}

/* Centered brand: flame flourish above a wide-tracked wordmark. */
.ml-brand {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 6px;
	text-decoration: none;
}
.ml-brand__flourish {
	display: flex;
	align-items: center;
	gap: 9px;
	color: var(--wp--preset--color--antique-gold);
}
.ml-brand__flourish .line {
	width: 34px;
	height: 1px;
	background: linear-gradient(90deg, transparent, var(--wp--preset--color--antique-gold));
}
.ml-brand__flourish .line + .ph-light + .line {
	background: linear-gradient(270deg, transparent, var(--wp--preset--color--antique-gold));
}
.ml-brand__flourish .ph-flame {
	font-size: 16px;
	animation: ml-flicker 3.5s ease-in-out infinite;
}
.ml-brand .wp-block-site-title {
	font-family: var(--wp--preset--font-family--cinzel);
	font-size: 1.6rem;
	font-weight: 500;
	letter-spacing: 0.34em;
	color: var(--wp--preset--color--bone-ivory);
	padding-left: 0.34em;
	white-space: nowrap;
	line-height: 1.1;
	/* The constrained group injects a 24px block-gap margin above the wordmark,
	   which made the header too tall; the flourish→wordmark gap is the flex gap. */
	margin-top: 0;
}
.ml-brand .wp-block-site-title a {
	color: inherit;
	text-decoration: none;
}

/* Right icon buttons (search / account / cart). */
.ml-header-icons {
	display: flex;
	align-items: center;
	justify-content: flex-end;
	gap: 14px;
}
.ml-icon-btn {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 42px;
	height: 42px;
	color: var(--wp--preset--color--ash-taupe);
	border: 1px solid transparent;
	transition: color 0.3s ease, border-color 0.3s ease;
}
.ml-icon-btn .ph-light {
	font-size: 20px;
}
.ml-icon-btn:hover {
	color: var(--wp--preset--color--antique-gold);
}
.ml-icon-btn--bordered {
	border-color: rgba(var(--wp--custom--gold-rgb), 0.4);
	color: var(--wp--preset--color--bone-ivory);
}
.ml-icon-btn--bordered:hover {
	border-color: var(--wp--preset--color--antique-gold);
	color: var(--wp--preset--color--antique-gold);
}

/* WooCommerce Mini-Cart button, matched to the search/account icon buttons
   (42px hit area, 20px glyph, muted→gold on hover). A stylesheet `fill` rule
   overrides the block's inline `fill` presentation attribute on the SVG. */
.ml-header-icons .wc-block-mini-cart {
	margin: 0;
	display: flex;
	align-items: center;
}
.ml-header-icons .wc-block-mini-cart__button {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 42px;
	height: 42px;
	padding: 0;
	border: 1px solid transparent;
	background: transparent;
	color: var(--wp--preset--color--ash-taupe);
	transition: color 0.3s ease;
}
.ml-header-icons .wc-block-mini-cart__button:hover,
.ml-header-icons .wc-block-mini-cart__button:focus {
	background: transparent;
	color: var(--wp--preset--color--antique-gold);
}
.ml-header-icons .wc-block-mini-cart__icon {
	width: 20px;
	height: 20px;
	fill: currentColor;
}
/* Icon-only, like the other header controls: drop the running-total label. */
.ml-header-icons .wc-block-mini-cart__amount {
	display: none;
}
/* Item-count bubble: compact gold badge tucked to the icon's top-right. */
.ml-header-icons .wc-block-mini-cart__badge {
	inset-block-start: 2px;
	inset-inline-end: -2px;
	min-width: 16px;
	height: 16px;
	padding: 0 4px;
	font-size: 0.6rem;
	font-weight: 700;
	line-height: 16px;
}

@media (max-width: 900px) {
	.ml-header-grid {
		grid-template-columns: auto 1fr auto;
	}
	.ml-brand {
		align-items: flex-start;
	}
	.ml-brand .wp-block-site-title {
		font-size: 1.2rem;
		letter-spacing: 0.22em;
	}
}

@media (max-width: 600px) {
	.ml-header-grid {
		gap: 10px;
	}
	.ml-brand .wp-block-site-title {
		font-size: 0.95rem;
		letter-spacing: 0.12em;
	}
	.ml-brand__flourish .line {
		width: 20px;
	}
	/* Search/account collapse into the mobile menu; keep the cart reachable. */
	.ml-header-icons .ml-icon-btn {
		display: none;
	}
}

/* ==========================================================================
   Hero / banner carousel
   (core carousel styles live in the block's own stylesheet; this only tunes
   the slide content container.)
   ========================================================================== */
/* Hero content: reference padding + centred max-width so text never touches edges. */
.banner-carousel .wp-block-cover__inner-container {
	padding: 60px 32px;
	max-width: 760px;
	margin-inline: auto;
	width: 100%;
}

/* ==========================================================================
   Trust strip
   ========================================================================== */
.ml-trust-item {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 14px;
}
.ml-trust-item .ph-light {
	font-size: 26px;
	color: var(--wp--preset--color--antique-gold);
	flex-shrink: 0;
}
.ml-trust-item__title {
	font-family: var(--wp--preset--font-family--cinzel);
	font-size: 0.9rem;
	letter-spacing: 0.06em;
	color: var(--wp--preset--color--bone-ivory);
	margin: 0;
}
.ml-trust-item__sub {
	font-size: 0.82rem;
	color: var(--wp--preset--color--ash-taupe);
	margin: 0;
}

/* ==========================================================================
   Collections (editorial numbered cards)
   ========================================================================== */
.ml-collections {
	counter-reset: ml-cat;
	gap: 22px;
}
.ml-collections > .wp-block-column {
	position: relative;
	counter-increment: ml-cat;
	transition: transform 0.5s var(--wp--custom--ease--lift), box-shadow 0.5s ease;
}
.ml-collections > .wp-block-column:hover {
	transform: translateY(-8px);
	box-shadow: var(--wp--custom--shadow--lift);
}
/* Auto-numbered index (01–04) in the top corner of each card. */
.ml-collections > .wp-block-column::before {
	content: counter(ml-cat, decimal-leading-zero);
	position: absolute;
	top: 16px;
	right: 18px;
	z-index: 2;
	font-family: var(--wp--preset--font-family--cinzel);
	font-size: 0.9rem;
	letter-spacing: 0.1em;
	color: rgba(var(--wp--custom--gold-rgb), 0.65);
	pointer-events: none;
}
.ml-collections .wp-block-cover {
	border: 1px solid rgba(var(--wp--custom--gold-rgb), 0.18);
	align-items: flex-end;
}
/* Anchor card content to the bottom over a transparent→dark gradient. */
.ml-collections .wp-block-cover__background {
	background: linear-gradient(180deg, rgba(var(--wp--custom--void-rgb), 0.15) 0%, rgba(var(--wp--custom--void-rgb), 0.4) 45%, rgba(var(--wp--custom--void-rgb), 0.92) 100%) !important;
	opacity: 1 !important;
}
.ml-collections .wp-block-cover__inner-container {
	padding: 26px 22px;
	width: 100%;
}
.ml-collections .wp-block-cover__image-background {
	transition: transform 1.1s var(--wp--custom--ease--lift);
}
.ml-collections > .wp-block-column:hover .wp-block-cover__image-background {
	transform: scale(1.06);
}
/* CTA becomes a gold text link with a trailing arrow, not a filled button. */
.ml-collections .wp-block-button__link,
.ml-collections .wp-block-button__link:hover {
	background: transparent !important;
	color: var(--wp--preset--color--antique-gold);
	padding: 0;
	font-size: 0.72rem;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	transition: letter-spacing 0.4s ease;
}
.ml-collections .wp-block-button__link::after {
	content: " \2192";
}
.ml-collections > .wp-block-column:hover .wp-block-button__link {
	letter-spacing: 0.24em;
}

/* ==========================================================================
   Story / Made in Poland
   ========================================================================== */
.ml-story {
	display: grid;
	grid-template-columns: 1fr 1fr;
	align-items: stretch;
}
/* Story section sits 56px below the bestsellers section (reference). */
#story {
	margin-top: 56px;
}
.ml-story .ml-story__media {
	min-height: 520px;
}
.ml-story .ml-story__body {
	padding: clamp(48px, 6vw, 88px);
	display: flex;
	flex-direction: column;
	justify-content: center;
}
/* Story eyebrow sits in a left-aligned text column, not centred like the others. */
.ml-story__body .ml-eyebrow {
	justify-content: flex-start;
}
.ml-stats {
	display: flex;
	gap: 38px;
	flex-wrap: wrap;
}
.ml-stat__num {
	font-family: var(--wp--preset--font-family--cinzel);
	font-size: 1.9rem;
	color: var(--wp--preset--color--antique-gold);
	line-height: 1.2;
}
.ml-stat__label {
	font-size: 0.82rem;
	letter-spacing: 0.04em;
	color: var(--wp--preset--color--ash-taupe);
}
@media (max-width: 900px) {
	.ml-story {
		grid-template-columns: 1fr;
	}
	.ml-story .ml-story__media {
		min-height: 340px;
	}
}

/* ==========================================================================
   Bestseller product cards
   ========================================================================== */
.ml-products .wc-block-product {
	background: var(--wp--preset--color--chapel-stone);
	border: 1px solid rgba(var(--wp--custom--gold-rgb), 0.18);
	overflow: hidden;
	display: flex;
	flex-direction: column;
	padding: 0;
	transition: transform 0.5s var(--wp--custom--ease--lift);
	/* Fill the grid track — WooCommerce's native flex layout sizes each product
	   item off its (thumbnail-width) content, so forcing the container to grid
	   alone left the cards collapsed to ~130px and centred in their tracks. */
	width: 100% !important;
	max-width: none !important;
	min-width: 0;
	margin: 0 !important;
	justify-self: stretch !important;
	flex: none !important;
}
.ml-products .wc-block-product:hover {
	transform: translateY(-6px);
	border-color: rgba(var(--wp--custom--gold-rgb), 0.5);
}
/* Force a reliable 3-up grid (WooCommerce's flex layout wrapped the 3rd card). */
.ml-products .wc-block-product-template {
	display: grid !important;
	grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
	justify-items: stretch !important;
	gap: 26px !important;
	width: 100%;
	max-width: none !important;
}
/* Homepage bestsellers: single column on narrow screens. */
@media (max-width: 900px) {
	.ml-products:not(.ml-products--shop) .wc-block-product-template {
		grid-template-columns: 1fr !important;
		max-width: 420px !important;
		margin-inline: auto;
	}
}
/* Shop listing sits beside a filter sidebar, so it steps 3 → 2 → 1. */
@media (max-width: 960px) {
	.ml-products--shop .wc-block-product-template {
		grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
	}
}
@media (max-width: 560px) {
	.ml-products--shop .wc-block-product-template {
		grid-template-columns: 1fr !important;
	}
}
/* Product card image: fixed 340px panel with the photo covering it (reference). */
.ml-prod__media {
	position: relative;
	overflow: hidden;
	margin: 0;
	aspect-ratio: 4 / 5;
}
.ml-prod__media .wc-block-components-product-image,
.ml-prod__media .wp-block-woocommerce-product-image {
	height: 100%;
	margin: 0;
}
.ml-prod__media .wc-block-components-product-image a {
	display: block;
	height: 100%;
}
.ml-prod__media img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform 1s var(--wp--custom--ease--lift);
}
.ml-products .wc-block-product:hover .ml-prod__media img {
	transform: scale(1.05);
}
/* Badge overlaid on the product image. */
.ml-prod__badge {
	position: absolute;
	top: 14px;
	left: 14px;
	z-index: 2;
	font-size: 0.62rem;
	font-weight: 600;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	padding: 5px 11px;
}
.ml-prod__badge--gold {
	background: var(--wp--preset--color--antique-gold);
	color: var(--wp--preset--color--void-black);
}
.ml-prod__badge--purple {
	background: var(--wp--preset--color--amethyst-dusk);
	color: var(--wp--preset--color--bone-ivory);
}
.ml-prod__badge--dark {
	background: var(--wp--preset--color--chapel-stone);
	color: var(--wp--preset--color--antique-gold);
}
.ml-prod__body {
	padding: 24px 22px 26px;
	gap: 0.55rem;
	flex: 1;
	align-items: flex-start;
}
.ml-prod__body .wp-block-post-title {
	font-family: var(--wp--preset--font-family--cinzel);
	font-weight: 500;
	letter-spacing: 0.03em;
	margin: 0;
}
.ml-prod__body .wp-block-post-title a {
	color: var(--wp--preset--color--bone-ivory);
	text-decoration: none;
}
.ml-prod__body .wp-block-post-title a:hover {
	color: var(--wp--preset--color--antique-gold);
}
.ml-prod__notes {
	font-size: 0.88rem;
	font-style: italic;
	color: var(--wp--preset--color--ash-taupe);
	margin: 0;
	line-height: 1.5;
}
/* Star rating in gold. */
.ml-prod__body .wc-block-components-product-rating {
	color: var(--wp--preset--color--antique-gold);
	margin: 0;
}
/* Descendant selector (not just .ml-prod__foot) so this wins over WordPress's
   `.is-layout-flex > * { margin: 0 }` layout reset — otherwise margin-top:auto is
   zeroed and the price/button row sits under the last text line instead of being
   pinned to the bottom of the card. */
.ml-prod__body .ml-prod__foot {
	width: 100%;
	margin-top: auto;
	padding-top: 0.5rem;
	align-items: center;
}
.ml-prod__foot .wp-block-woocommerce-product-price {
	font-family: var(--wp--preset--font-family--cinzel);
	font-size: 1.2rem;
	color: var(--wp--preset--color--antique-gold);
}
.ml-prod__foot .wp-block-button__link,
.ml-prod__foot .wc-block-components-product-button .wp-block-button__link {
	padding: 12px 18px;
	font-size: 0.72rem;
	letter-spacing: 0.08em;
	text-transform: uppercase;
}
/* Bag icon before the card add-to-cart button (Phosphor handbag-simple). */
.ml-prod__foot .wc-block-components-product-button .wp-block-button__link::before {
	content: "\e62e";
	font-family: "Phosphor-Light";
	font-weight: normal;
	margin-right: 7px;
	font-size: 15px;
	vertical-align: -2px;
}

/* Related eyebrow ("Dobrane z myślą o Tobie") sits just above the section heading. */
.ml-related__eyebrow {
	margin-bottom: 14px;
}

/* Related products ("Może Ci się spodobać"): a denser 4-up row of smaller cards.
   The image ratio stays 4:5 (unchanged); only the card scale is reduced. */
.ml-products--related .wc-block-product-template {
	grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
	gap: 24px !important;
}
.ml-products--related .ml-prod__body {
	padding: 20px 20px 22px;
	gap: 0.4rem;
}
.ml-products--related .ml-prod__body .wp-block-post-title {
	font-size: 1.06rem !important;
}
.ml-products--related .ml-prod__notes {
	font-size: 0.82rem;
}
.ml-products--related .ml-prod__foot .wp-block-woocommerce-product-price {
	font-size: 1.06rem;
}
.ml-products--related .ml-prod__foot .wp-block-button__link,
.ml-products--related .ml-prod__foot .wc-block-components-product-button .wp-block-button__link {
	padding: 10px 14px;
	font-size: 0.66rem;
}
@media (max-width: 960px) {
	.ml-products--related .wc-block-product-template {
		grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
	}
}
@media (max-width: 560px) {
	.ml-products--related .wc-block-product-template {
		grid-template-columns: 1fr !important;
	}
}

/* ==========================================================================
   Instagram tiles
   On-theme dark tiles linking to real posts (Instagram's own embeds render as
   white cards that clash with the dark design and load unreliably).
   ========================================================================== */
.ml-insta {
	position: relative;
	display: block;
	aspect-ratio: 1 / 1;
	overflow: hidden;
	border: 1px solid rgba(var(--wp--custom--gold-rgb), 0.16);
	background:
		radial-gradient(55% 45% at 50% 55%, var(--ml-insta-glow, rgba(var(--wp--custom--gold-rgb), 0.26)), transparent 70%),
		repeating-linear-gradient(135deg, var(--wp--custom--surface--tile-warp) 0 12px, var(--wp--custom--surface--tile-weft) 12px 24px);
	transition: transform 0.5s ease;
}
.ml-insta:hover {
	transform: translateY(-4px);
}
.ml-insta::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(180deg, transparent 55%, rgba(var(--wp--custom--void-rgb), 0.85));
}
.ml-insta .ph-light {
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
	font-size: 32px;
	color: var(--wp--preset--color--bone-ivory);
	opacity: 0.85;
	z-index: 1;
	transition: opacity 0.4s ease, transform 0.4s ease;
}
.ml-insta:hover .ph-light {
	opacity: 1;
	transform: translate(-50%, -50%) scale(1.12);
	color: var(--wp--preset--color--antique-gold);
}

/* ==========================================================================
   Newsletter
   ========================================================================== */
.ml-newsletter {
	position: relative;
	overflow: hidden;
	text-align: center;
	background: linear-gradient(135deg, var(--wp--custom--gradient--dusk-shadow), var(--wp--preset--color--amethyst-dusk) 55%, var(--wp--custom--gradient--dusk-edge));
}
.ml-newsletter::before {
	content: "";
	position: absolute;
	inset: 0;
	opacity: 0.4;
	background: repeating-linear-gradient(135deg, rgba(0, 0, 0, 0.12) 0 16px, transparent 16px 32px);
	pointer-events: none;
}
.ml-newsletter > * {
	position: relative;
}
.ml-newsletter__icon {
	font-size: 34px;
	color: var(--wp--preset--color--antique-gold);
}
.ml-newsletter__form {
	display: flex;
	gap: 12px;
	max-width: 460px;
	margin: 0 auto;
	flex-wrap: wrap;
}
.ml-newsletter__form input[type="email"] {
	flex: 1;
	min-width: 200px;
	background: rgba(var(--wp--custom--void-rgb), 0.5);
	border: 1px solid rgba(var(--wp--custom--ivory-rgb), 0.4);
	color: var(--wp--preset--color--bone-ivory);
	padding: 15px 18px;
	font-family: var(--wp--preset--font-family--eb-garamond);
	font-size: 1rem;
	outline: none;
}
.ml-newsletter__form input[type="email"]::placeholder {
	color: rgba(var(--wp--custom--ivory-rgb), 0.6);
}
.ml-newsletter__form input[type="email"]:focus {
	border-color: var(--wp--preset--color--antique-gold);
}
.ml-newsletter__form button {
	background: var(--wp--preset--color--antique-gold);
	color: var(--wp--preset--color--void-black);
	border: none;
	padding: 15px 30px;
	font-family: var(--wp--preset--font-family--eb-garamond);
	font-size: 0.8rem;
	font-weight: 600;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	cursor: pointer;
	transition: background 0.4s ease, letter-spacing 0.4s ease;
}
.ml-newsletter__form button:hover {
	background: var(--wp--preset--color--bone-ivory);
	letter-spacing: 0.14em;
}
.ml-newsletter__msg {
	color: var(--wp--preset--color--bone-ivory);
	opacity: 0.75;
	font-size: 0.8rem;
	margin-top: 14px;
	min-height: 1.2em;
}

/* ==========================================================================
   Footer
   ========================================================================== */
.ml-footer-cols {
	display: grid;
	grid-template-columns: 1.6fr 1fr 1fr 1fr;
	gap: 40px;
	align-items: start;
}
/* Columns are grid cells — drop the constrained group's injected block-gap
   margin so all four column headers top-align. */
.ml-footer-cols > * {
	margin-block: 0;
}
.ml-footer__brand {
	font-family: var(--wp--preset--font-family--cinzel);
	font-size: 1.3rem;
	letter-spacing: 0.28em;
	color: var(--wp--preset--color--bone-ivory);
	margin: 0 0 16px;
}
.ml-footer__desc {
	color: var(--wp--preset--color--ash-taupe);
	font-size: 0.95rem;
	line-height: 1.75;
	max-width: 300px;
	margin: 0 0 20px;
}
.ml-footer__social {
	display: flex;
	gap: 12px;
}
/* Reference footer social icons are gold (not the ivory of the bordered variant). */
.ml-footer__social .ml-icon-btn {
	color: var(--wp--preset--color--antique-gold);
}
.ml-footer__social .ml-icon-btn:hover {
	color: var(--wp--preset--color--void-black);
	background: var(--wp--preset--color--antique-gold);
	border-color: var(--wp--preset--color--antique-gold);
}
.ml-footer__coltitle {
	font-family: var(--wp--preset--font-family--cinzel);
	font-size: 0.82rem;
	letter-spacing: 0.16em;
	text-transform: uppercase;
	color: var(--wp--preset--color--antique-gold);
	margin: 0 0 18px;
}
.ml-footer__link {
	display: block;
	width: fit-content;
	position: relative;
	color: var(--wp--preset--color--ash-taupe);
	font-size: 0.92rem;
	padding: 6px 0;
}
/* Same gold underline-wipe on hover as the top nav, for a consistent link feel. */
.ml-footer__link::after {
	content: "";
	position: absolute;
	left: 0;
	right: 0;
	bottom: 2px;
	height: 1px;
	background: var(--wp--preset--color--antique-gold);
	transform: scaleX(0);
	transition: transform 0.35s ease;
}
.ml-footer__link:hover::after {
	transform: scaleX(1);
}
.ml-footer__bottom {
	border-top: 1px solid rgba(var(--wp--custom--gold-rgb), 0.16);
	margin-top: 8px;
	padding: 22px 0 4px;
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	flex-wrap: wrap;
	font-size: 0.82rem;
	color: var(--wp--preset--color--ash-taupe);
}
.ml-footer__bottom .ph-light {
	font-size: 14px;
	color: var(--wp--preset--color--antique-gold);
	vertical-align: middle;
}
@media (max-width: 900px) {
	.ml-footer-cols {
		grid-template-columns: 1fr 1fr;
	}
}
@media (max-width: 560px) {
	.ml-footer-cols {
		grid-template-columns: 1fr;
	}
}

/* ==========================================================================
   Shop archive (Sklep) — templates/archive-product.html
   ========================================================================== */

/* Page hero: abyss panel with a purple glow bleeding in from the top edge. */
.ml-shop-hero {
	position: relative;
	overflow: hidden;
	background: var(--wp--custom--surface--abyss);
	border-bottom: 1px solid rgba(var(--wp--custom--gold-rgb), 0.16);
}
.ml-shop-hero::before {
	content: "";
	position: absolute;
	inset: 0;
	background: radial-gradient(90% 120% at 50% -10%, rgba(var(--wp--custom--amethyst-rgb), 0.32), transparent 60%);
	pointer-events: none;
}
/* Keep the hero content above the glow layer. */
.ml-shop-hero__inner {
	position: relative;
}
.ml-shop-hero .ml-eyebrow {
	margin-bottom: 14px;
}
.ml-shop-hero__title {
	margin: 0 0 14px;
}
.ml-shop-hero__lead {
	max-width: 520px;
	margin: 0 auto;
	font-size: 1.05rem;
}

/* Two-column shop body: sticky filter rail + product column. */
.ml-shop {
	display: grid;
	grid-template-columns: 264px 1fr;
	gap: 44px;
	align-items: start;
}
.ml-shop__filters {
	position: sticky;
	top: 24px;
}
@media (max-width: 960px) {
	.ml-shop {
		grid-template-columns: 1fr;
		gap: 32px;
	}
	.ml-shop__filters {
		position: static;
	}
}

/* Toolbar above the grid: result count on the left, sorting on the right. */
.ml-shop__toolbar {
	align-items: center;
	gap: 18px;
	padding-bottom: 22px;
	margin-bottom: 30px;
	border-bottom: 1px solid rgba(var(--wp--custom--gold-rgb), 0.16);
}

/* ---- Breadcrumbs ---------------------------------------------------------- */
/* WooCommerce emits the trailing crumb and the "/" separators as bare text nodes,
   so they share one colour; we tint the trail gold (the design's accent) and keep
   the ancestor links muted. */
.ml-breadcrumbs {
	margin-bottom: 22px;
}
.ml-breadcrumbs .woocommerce-breadcrumb {
	color: var(--wp--preset--color--antique-gold);
	font-size: 0.78rem;
	letter-spacing: 0.06em;
}
.ml-breadcrumbs .woocommerce-breadcrumb a {
	color: var(--wp--preset--color--ash-taupe);
}
.ml-breadcrumbs .woocommerce-breadcrumb a:hover {
	color: var(--wp--preset--color--antique-gold);
}

/* ---- Filter rail ---------------------------------------------------------- */
/* Our own headings carry the group titles (WooCommerce's own label is an
   sr-only <legend>), so zero the block's flex gap and let margins govern. */
.ml-shop__filters .wc-block-product-filters {
	/* WooCommerce lays the filters out as a flex container; on a narrow rail its
	   items refuse to shrink (min-width:auto) and overflow. A plain vertical block
	   flow is all the rail needs and can't overflow horizontally. */
	display: block !important;
	gap: 0 !important;
}
/* Each filter group is a <fieldset>: strip the default browser border (the stray
   "white" outline) and its intrinsic min-width so long labels / the price row can't
   push past the rail. */
.ml-shop__filters fieldset {
	min-width: 0;
	margin: 0;
	padding: 0;
	border: 0;
}
.ml-filter__title {
	font-family: var(--wp--preset--font-family--cinzel);
	font-size: 0.82rem;
	font-weight: 400;
	letter-spacing: 0.16em;
	text-transform: uppercase;
	color: var(--wp--preset--color--bone-ivory);
	margin: 0 0 18px;
}
.ml-filter {
	padding-bottom: 26px;
	margin-bottom: 26px;
	border-bottom: 1px solid rgba(var(--wp--custom--gold-rgb), 0.14);
}
.ml-filter--last {
	padding-bottom: 6px;
	margin-bottom: 0;
	border-bottom: 0;
}

/* "Filtruj" submit: filters are only applied when this is clicked (see
   assets/js/shop-filters.js). Full-width gold button closing the rail. */
.ml-shop__filters .ml-filter-apply {
	display: block;
	width: 100%;
	margin-top: 26px;
	padding: 13px 20px;
	border: 0;
	border-radius: 0;
	background: var(--wp--preset--color--antique-gold);
	color: var(--wp--preset--color--void-black);
	font-family: var(--wp--preset--font-family--eb-garamond);
	font-size: 0.74rem;
	font-weight: 600;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	cursor: pointer;
	transition: background 0.4s ease, letter-spacing 0.4s ease;
}
.ml-shop__filters .ml-filter-apply:hover {
	background: var(--wp--preset--color--bone-ivory);
	letter-spacing: 0.18em;
}

/* Checkbox rows: 16px gold-hairline box, label, muted count. */
.ml-shop__filters .wc-block-product-filter-checkbox-list__item {
	margin: 0;
}
.ml-shop__filters .wc-block-product-filter-checkbox-list__label {
	display: flex;
	align-items: center;
	gap: 11px;
	padding: 7px 0;
	color: var(--wp--preset--color--ash-taupe);
	font-size: 0.94rem;
	cursor: pointer;
	transition: color 0.3s ease;
}
.ml-shop__filters .wc-block-product-filter-checkbox-list__label:hover {
	color: var(--wp--preset--color--bone-ivory);
}
.ml-shop__filters .wc-block-product-filter-checkbox-list__input-wrapper {
	position: relative;
	display: block;
	width: 16px;
	height: 16px;
	flex-shrink: 0;
}
/* WooCommerce's block stylesheet loads after the theme's, so these need the extra
   specificity (and !important on the box itself) to win the tie. */
.ml-shop__filters .wc-block-product-filter-checkbox-list__input-wrapper .wc-block-product-filter-checkbox-list__input {
	appearance: none;
	-webkit-appearance: none;
	width: 16px !important;
	height: 16px !important;
	margin: 0;
	border: 1px solid rgba(var(--wp--custom--gold-rgb), 0.4) !important;
	border-radius: 0 !important;
	background: transparent !important;
	box-shadow: none !important;
	cursor: pointer;
	transition: background 0.3s ease, border-color 0.3s ease;
}
.ml-shop__filters .wc-block-product-filter-checkbox-list__label:hover .wc-block-product-filter-checkbox-list__input {
	border-color: var(--wp--preset--color--antique-gold) !important;
}
.ml-shop__filters .wc-block-product-filter-checkbox-list__input-wrapper .wc-block-product-filter-checkbox-list__input:checked {
	background: var(--wp--preset--color--antique-gold) !important;
	border-color: var(--wp--preset--color--antique-gold) !important;
}
.ml-shop__filters .wc-block-product-filter-checkbox-list__mark {
	position: absolute;
	inset: 0;
	margin: auto;
	width: 10px;
	height: 8px;
	color: var(--wp--preset--color--void-black);
	opacity: 0;
	pointer-events: none;
}
.ml-shop__filters .wc-block-product-filter-checkbox-list__input:checked + .wc-block-product-filter-checkbox-list__mark {
	opacity: 1;
}
.ml-shop__filters .wc-block-product-filter-checkbox-list__text-wrapper {
	display: flex;
	flex: 1;
	align-items: center;
	justify-content: space-between;
	gap: 8px;
	min-width: 0;
}
.ml-shop__filters .wc-block-product-filter-checkbox-list__count {
	color: rgba(var(--wp--custom--taupe-rgb), 0.55);
	font-size: 0.82rem;
}
/* "Pokaż jeszcze N" toggle: WooCommerce renders it as a default underlined link
   (off-theme); restyle it as a small muted-gold, letter-spaced cue like the rest of
   the rail, gold on hover. */
.ml-shop__filters .wc-block-product-filter-checkbox-list__show-more-button {
	margin-top: 12px;
	color: var(--wp--preset--color--ash-taupe);
	font-size: 0.72rem;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	text-decoration: none;
	border-bottom: 1px solid rgba(var(--wp--custom--gold-rgb), 0.3);
	padding-bottom: 2px;
	transition: color 0.3s ease, border-color 0.3s ease;
}
.ml-shop__filters .wc-block-product-filter-checkbox-list__show-more-button:hover,
.ml-shop__filters .wc-block-product-filter-checkbox-list__show-more-button:focus {
	color: var(--wp--preset--color--antique-gold);
	border-color: var(--wp--preset--color--antique-gold);
	text-decoration: none;
}

/* Price slider: recolour WooCommerce's own slider via its custom properties (gold
   selected range + faint track, ivory handle with a gold ring) rather than fighting
   its --track-background gradient. Horizontal margin insets the track so the round
   handles at 0%/100% stay inside the rail instead of poking past its edge. */
.ml-shop__filters .wc-block-product-filter-price-slider__range {
	--range-color: var(--wp--preset--color--antique-gold);
	--wc-product-filter-price-slider-handle: var(--wp--preset--color--bone-ivory);
	--wc-product-filter-price-slider-handle-border: var(--wp--preset--color--antique-gold);
	margin: 18px 7px;
}
/* Min/max values: plain muted text under the two track ends (min flush left, max
   flush right), not boxed inputs — matching the reference. */
.ml-shop__filters .wc-block-product-filter-price-slider__content {
	grid-template-columns: 1fr 1fr;
	grid-template-areas:
		"price-slider price-slider"
		"left-input   right-input";
	column-gap: 10px;
	margin-top: 4px;
}
/* Anchor on __content (the bare `wc-block-product-filter-price-slider` class doesn't
   exist in the markup, which is why WooCommerce's own input rule — and an earlier
   attempt — never applied, leaving raw browser default boxes). */
.ml-shop__filters .wc-block-product-filter-price-slider__content .text input[type="text"] {
	/* Fill the 1fr cell (width:auto resolves to a text input's ~20ch intrinsic width,
	   which overflows the rail); text-align then seats each value against its edge. */
	width: 100%;
	min-width: 0;
	max-width: none;
	padding: 0;
	border: 0;
	background: transparent;
	color: var(--wp--preset--color--ash-taupe);
	font-family: inherit;
	font-size: 0.82rem;
	text-align: left;
}
.ml-shop__filters .wc-block-product-filter-price-slider__content .wc-block-product-filter-price-slider__right input[type="text"] {
	text-align: right;
}

/* ---- Toolbar widgets ------------------------------------------------------ */
.ml-shop__toolbar .wc-block-product-results-count .woocommerce-result-count {
	margin: 0;
	color: var(--wp--preset--color--ash-taupe);
	font-size: 0.9rem;
}
.ml-shop__toolbar .woocommerce-ordering {
	margin: 0;
}
.ml-shop__toolbar .woocommerce-ordering select.orderby {
	appearance: none;
	-webkit-appearance: none;
	background-color: var(--wp--preset--color--chapel-stone);
	/* gold caret, so the native arrow can be suppressed */
	background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 256 256' fill='none' stroke='%23C9A66B' stroke-width='16'%3E%3Cpath d='M208 96l-80 80-80-80'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: right 13px center;
	border: 1px solid rgba(var(--wp--custom--gold-rgb), 0.3);
	border-radius: 0;
	color: var(--wp--preset--color--bone-ivory);
	font-family: var(--wp--preset--font-family--eb-garamond);
	font-size: 0.9rem;
	padding: 9px 38px 9px 14px;
	cursor: pointer;
	outline: none;
}
.ml-shop__toolbar .woocommerce-ordering select.orderby:focus {
	border-color: var(--wp--preset--color--antique-gold);
}
.ml-shop__toolbar .woocommerce-ordering select.orderby option {
	background: var(--wp--preset--color--chapel-stone);
	color: var(--wp--preset--color--bone-ivory);
}

/* ---- Pagination ----------------------------------------------------------- */
.ml-shop__pagination {
	gap: 10px;
	margin-top: 52px;
}
.ml-shop__pagination .wp-block-query-pagination-numbers .page-numbers,
.ml-shop__pagination .wp-block-query-pagination-previous,
.ml-shop__pagination .wp-block-query-pagination-next {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 44px;
	height: 44px;
	border: 1px solid rgba(var(--wp--custom--gold-rgb), 0.25);
	color: var(--wp--preset--color--bone-ivory);
	font-family: var(--wp--preset--font-family--cinzel);
	transition: border-color 0.3s ease, color 0.3s ease;
}
.ml-shop__pagination .wp-block-query-pagination-numbers .page-numbers:hover,
.ml-shop__pagination .wp-block-query-pagination-previous:hover,
.ml-shop__pagination .wp-block-query-pagination-next:hover {
	border-color: var(--wp--preset--color--antique-gold);
	color: var(--wp--preset--color--antique-gold);
}
.ml-shop__pagination .wp-block-query-pagination-numbers .page-numbers.current {
	background: var(--wp--preset--color--antique-gold);
	border-color: var(--wp--preset--color--antique-gold);
	color: var(--wp--preset--color--void-black);
}

/* Shop cards use the shared product-card styles (see .ml-prod__* in the card
   component section); only the grid column count differs per section. */

/* ==========================================================================
   Single product (Produkt) — templates/single-product.html
   ========================================================================== */

/* Two equal columns; gallery sticky beside the scrolling info column. */
.ml-pdp.wp-block-columns {
	gap: 56px;
	align-items: start;
}
.ml-pdp > .wp-block-column {
	flex: 1 1 0 !important;
	min-width: 0;
}
.ml-pdp__gallery {
	position: sticky;
	top: 24px;
}
@media (max-width: 960px) {
	.ml-pdp.wp-block-columns {
		gap: 32px;
	}
	.ml-pdp__gallery {
		position: static;
	}
}

/* The gallery itself is the custom mysterium-lucis-shop-theme/pdp-gallery block
   (thumbnail rail + 4:5 main + click-to-switch); its styles ship with the block. */

/* Category eyebrow (post-terms). */
.ml-pdp__eyebrow {
	margin: 0 0 14px;
	color: var(--wp--preset--color--antique-gold);
	font-size: 0.72rem;
	letter-spacing: 0.28em;
	text-transform: uppercase;
}
.ml-pdp__eyebrow a {
	color: var(--wp--preset--color--antique-gold);
}
.ml-pdp__title {
	font-family: var(--wp--preset--font-family--cinzel);
	font-weight: 500;
	color: var(--wp--preset--color--bone-ivory);
	letter-spacing: 0.02em;
	margin: 0 0 16px;
}
.ml-pdp__rating {
	margin: 0 0 22px;
	color: var(--wp--preset--color--antique-gold);
}
.ml-pdp__price {
	margin: 0 0 24px;
	font-family: var(--wp--preset--font-family--cinzel);
	font-size: 2rem;
	color: var(--wp--preset--color--antique-gold);
}
.ml-pdp__price del {
	color: rgba(var(--wp--custom--taupe-rgb), 0.7);
	font-size: 1.1rem;
	margin-left: 10px;
}
.ml-pdp__price ins {
	text-decoration: none;
}
.ml-pdp__excerpt {
	color: var(--wp--preset--color--ash-taupe);
	font-size: 1.06rem;
	line-height: 1.8;
	margin: 0 0 28px;
}

/* Scent-note chips (product-scent-notes block, display:chips). */
.ml-scent-chips {
	display: flex;
	gap: 10px;
	flex-wrap: wrap;
	margin: 0 0 30px;
}
.ml-scent-chip {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	border: 1px solid rgba(var(--wp--custom--gold-rgb), 0.3);
	color: var(--wp--preset--color--bone-ivory);
	font-size: 0.82rem;
	letter-spacing: 0.04em;
	padding: 8px 14px;
}

/* Add-to-cart (modern add-to-cart-with-options block): Rozmiar variation chips,
   quantity stepper, gold button. */
.ml-pdp__cart {
	margin: 0 0 28px;
}

/* "Rozmiar" attribute label — a row with the label left and the burn-time hint right
   (the hint is appended by product.js from the pa_czas-palenia attribute). */
.ml-pdp__cart .wp-block-woocommerce-add-to-cart-with-options-variation-selector-attribute-name {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 12px;
	font-family: var(--wp--preset--font-family--cinzel);
	font-size: 0.82rem;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--wp--preset--color--bone-ivory);
	margin-bottom: 12px;
}
.ml-pdp__cart .ml-burn-hint {
	font-family: var(--wp--preset--font-family--eb-garamond);
	font-size: 0.84rem;
	letter-spacing: 0.02em;
	text-transform: none;
	color: var(--wp--preset--color--ash-taupe);
}

/* Size chips → bordered selectable buttons. The chips read their colours from
   WooCommerce's own CSS custom properties, so we set those (the selected-state
   styles live in a cascade layer that plain overrides can't beat). */
.ml-pdp__cart .wc-block-product-filter-chips {
	--wc-product-filter-chips-background: var(--wp--preset--color--chapel-stone);
	--wc-product-filter-chips-border: rgba(var(--wp--custom--gold-rgb), 0.4);
	--wc-product-filter-chips-text: var(--wp--preset--color--bone-ivory);
	--wc-product-filter-chips-selected-background: rgba(var(--wp--custom--gold-rgb), 0.1);
	--wc-product-filter-chips-selected-border: var(--wp--preset--color--antique-gold);
	--wc-product-filter-chips-selected-text: var(--wp--preset--color--antique-gold);
}
/* Full-width, left-aligned chips (the block's <fieldset> otherwise indents them
   with its default margin/padding, breaking column alignment). */
.ml-pdp__cart .wc-block-product-filter-chips,
.ml-pdp__cart .wc-block-product-filter-chips__fieldset {
	width: 100%;
	margin: 0;
	padding: 0;
	border: 0;
	min-width: 0;
}
.ml-pdp__cart .wc-block-product-filter-chips__items {
	display: flex;
	gap: 12px;
	flex-wrap: wrap;
	width: 100%;
	justify-content: flex-start;
}
.ml-pdp__cart .wc-block-product-filter-chips__item {
	flex: 1 1 0;
	min-width: 120px;
	justify-content: center;
	border-radius: 0;
	font-family: var(--wp--preset--font-family--cinzel);
	font-size: 1rem;
	padding: 12px 16px;
	cursor: pointer;
}
.ml-pdp__cart .wc-block-product-filter-chips__item:hover {
	border-color: var(--wp--preset--color--antique-gold);
}
/* Size label + price stacked and centred in each chip. */
.ml-pdp__cart .wc-block-product-filter-chips__label {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 2px;
	width: 100%;
}
.ml-pdp__cart .ml-chip-price {
	font-family: var(--wp--preset--font-family--eb-garamond);
	font-size: 0.82rem;
	letter-spacing: 0.02em;
	color: var(--wp--preset--color--ash-taupe);
}
.ml-pdp__cart .wc-block-product-filter-chips__item[aria-checked="true"] .ml-chip-price {
	color: var(--wp--preset--color--antique-gold);
}

/* Variation price/description line. */
.ml-pdp__cart .wp-block-woocommerce-add-to-cart-with-options-variation-description {
	color: var(--wp--preset--color--ash-taupe);
	font-size: 0.9rem;
	margin: 14px 0 0;
}

/* Quantity stepper + button on one row, both a consistent 54px tall. */
.ml-pdp__cart .wp-block-group.wp-block-group-is-layout-flex {
	gap: 14px;
	align-items: center;
	margin-top: 22px;
}
.ml-pdp__cart .wp-block-add-to-cart-with-options-quantity-selector {
	margin: 0;
}
.ml-pdp__cart .wc-block-components-quantity-selector {
	display: flex;
	align-items: center;
	height: 54px;
	border: 1px solid rgba(var(--wp--custom--gold-rgb), 0.35);
	border-radius: 0;
	margin: 0;
}
.ml-pdp__cart .wc-block-components-quantity-selector__input {
	width: 48px;
	height: 54px !important;
	min-height: 0 !important;
	max-height: 54px !important;
	padding: 0 !important;
	line-height: 54px !important;
	box-sizing: border-box;
	background: transparent;
	border: 0;
	color: var(--wp--preset--color--bone-ivory);
	font-family: var(--wp--preset--font-family--cinzel);
	font-size: 1.1rem;
	text-align: center;
	outline: none;
}
.ml-pdp__cart .wc-block-components-quantity-selector__button {
	width: 48px;
	height: 54px;
	background: transparent;
	border: 0;
	color: var(--wp--preset--color--bone-ivory);
	font-size: 1.1rem;
	cursor: pointer;
	transition: color 0.3s ease;
}
.ml-pdp__cart .wc-block-components-quantity-selector__button:hover {
	color: var(--wp--preset--color--antique-gold);
}
.ml-pdp__cart .wp-block-button {
	flex: 1;
	min-width: 220px;
	margin: 0;
}
.ml-pdp__cart .single_add_to_cart_button {
	width: 100%;
	height: 54px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	background: var(--wp--preset--color--antique-gold);
	color: var(--wp--preset--color--void-black);
	border: 0;
	border-radius: 0;
	padding: 0 30px;
	font-family: var(--wp--preset--font-family--eb-garamond);
	font-size: 0.82rem;
	font-weight: 600;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	cursor: pointer;
	transition: background 0.4s ease, letter-spacing 0.4s ease;
}
.ml-pdp__cart .single_add_to_cart_button:hover {
	background: var(--wp--preset--color--bone-ivory);
	letter-spacing: 0.14em;
}

/* Mini trust row. */
.ml-pdp__trust {
	gap: 26px;
	padding: 20px 0;
	border-top: 1px solid rgba(var(--wp--custom--gold-rgb), 0.16);
	border-bottom: 1px solid rgba(var(--wp--custom--gold-rgb), 0.16);
	margin: 0 0 26px;
}
.ml-pdp__trust-item {
	display: inline-flex;
	align-items: center;
	gap: 9px;
	margin: 0;
	color: var(--wp--preset--color--ash-taupe);
	font-size: 0.86rem;
}
.ml-pdp__trust-item .ph-light {
	font-size: 19px;
	color: var(--wp--preset--color--antique-gold);
}
/* Returns icon rendered as an inline SVG (arrows-counter-clockwise isn't in the
   Phosphor subset); inherit the gold colour and match the icon-font size. */
.ml-pdp__trust-item .ml-pdp__trust-svg {
	width: 19px;
	height: 19px;
	color: var(--wp--preset--color--antique-gold);
	flex-shrink: 0;
}

/* Info accordion (native <details>): hairline dividers, Cinzel summaries with a
   gold +/− indicator. */
.ml-acc {
	margin-top: 4px;
}
.ml-acc__item {
	border-bottom: 1px solid rgba(var(--wp--custom--gold-rgb), 0.16);
}
.ml-acc__item summary {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	padding: 18px 0;
	cursor: pointer;
	list-style: none;
	font-family: var(--wp--preset--font-family--cinzel);
	font-size: 0.96rem;
	letter-spacing: 0.06em;
	color: var(--wp--preset--color--bone-ivory);
	transition: color 0.3s ease;
}
.ml-acc__item summary:hover {
	color: var(--wp--preset--color--antique-gold);
}
.ml-acc__item summary::-webkit-details-marker {
	display: none;
}
.ml-acc__item summary::after {
	content: "+";
	color: var(--wp--preset--color--antique-gold);
	font-size: 1.2rem;
	line-height: 1;
	flex-shrink: 0;
}
.ml-acc__item[open] summary::after {
	content: "−";
}
.ml-acc__item p {
	margin: 0;
	padding: 0 0 20px;
	color: var(--wp--preset--color--ash-taupe);
	font-size: 0.98rem;
	line-height: 1.8;
}

/* ---- Details tabs (Opis / Specyfikacja / Opinie) --------------------------
   Rendered by our woocommerce/single-product/tabs/tabs.php override with .ml-tabs
   markup (WooCommerce's .wc-tabs styles were un-overridable), switched by
   assets/js/product.js. */
.ml-tabs__nav {
	display: flex;
	gap: 38px;
	flex-wrap: wrap;
	margin: 0 0 34px;
	padding: 0;
	border-bottom: 1px solid rgba(var(--wp--custom--gold-rgb), 0.2);
	list-style: none;
}
.ml-tabs__nav li {
	margin: 0;
	padding: 0;
	list-style: none;
}
.ml-tabs__tab {
	display: block;
	padding: 0 0 16px;
	margin-bottom: -1px;
	font-family: var(--wp--preset--font-family--cinzel);
	font-size: 1rem;
	letter-spacing: 0.06em;
	color: var(--wp--preset--color--ash-taupe);
	border-bottom: 2px solid transparent;
	cursor: pointer;
	transition: color 0.3s ease, border-color 0.3s ease;
}
.ml-tabs__tab:hover {
	color: var(--wp--preset--color--bone-ivory);
}
.ml-tabs__tab.is-active {
	color: var(--wp--preset--color--bone-ivory);
	border-bottom-color: var(--wp--preset--color--antique-gold);
}
.ml-tabs__panel[hidden] {
	display: none;
}
.ml-pdp__details .ml-tabs__panel h2 {
	font-family: var(--wp--preset--font-family--cinzel);
	font-weight: 500;
	font-size: 1.3rem;
	color: var(--wp--preset--color--bone-ivory);
	margin: 0 0 18px;
}
.ml-pdp__details .ml-tabs__panel > p {
	color: var(--wp--preset--color--ash-taupe);
	font-size: 1.06rem;
	line-height: 1.9;
}
/* Opis tab: attribute-driven stats row under the description (reference). */
.ml-prod-stats {
	display: flex;
	flex-wrap: wrap;
	gap: 38px;
	margin-top: 32px;
}
.ml-prod-stat__value {
	font-family: var(--wp--preset--font-family--cinzel);
	font-size: 1.7rem;
	line-height: 1.2;
	color: var(--wp--preset--color--antique-gold);
}
.ml-prod-stat__label {
	margin-top: 2px;
	font-size: 0.82rem;
	color: var(--wp--preset--color--ash-taupe);
}
/* Attributes table on the Specyfikacja tab — a clear hairline between every row
   (and a top line on the first) as in the reference. */
.ml-pdp__details .woocommerce-product-attributes {
	width: 100%;
	border-collapse: collapse;
	/* No border on the table itself: the first row has no line above it (reference). */
}
.ml-pdp__details .woocommerce-product-attributes th,
.ml-pdp__details .woocommerce-product-attributes td {
	/* WooCommerce's `.woocommerce table.shop_attributes th/td` rules have higher
	   specificity (two classes + two elements) and set padding:0, dark dotted borders,
	   bold labels and italic (synthesised-cursive) values. Override each with
	   !important so rows are evenly spaced, upright, and split by gold hairlines. */
	/* Zero side padding so the label sits flush left and the value flush right,
	   hard against the panel edges as in the reference. Row padding, size and divider
	   alpha match the reference too. */
	padding: 15px 0 !important;
	border-bottom: 1px solid rgba(var(--wp--custom--gold-rgb), 0.14) !important;
	background: transparent !important;
	font-style: normal !important;
	font-size: 0.98rem;
}
.ml-pdp__details .woocommerce-product-attributes th {
	color: var(--wp--preset--color--ash-taupe);
	font-weight: 400 !important;
	text-align: left;
	width: 40%;
}
/* Values: right-aligned Cinzel in normal case (per the reference — not uppercase).
   text-align beats WooCommerce's small-screen shop_attributes left-align rule. */
.ml-pdp__details .woocommerce-product-attributes td {
	color: var(--wp--preset--color--bone-ivory);
	font-weight: 400 !important;
	text-align: right !important;
	font-family: var(--wp--preset--font-family--cinzel);
	letter-spacing: 0.02em;
}

/* Reviews (Opinie tab). */
.ml-pdp__details .woocommerce-Reviews {
	max-width: 760px;
}
/* The tab is already labelled "Opinie (N)", so drop WooCommerce's redundant
   "N opinii dla …" panel heading — the reference has none. (The count is real,
   pulled live from the product's comments.) */
.ml-pdp__details .woocommerce-Reviews-title {
	display: none;
}
/* Initials medallion replacing the Gravatar (see the get_avatar filter). */
.ml-pdp__details .commentlist .ml-review-avatar {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 40px;
	height: 40px;
	flex-shrink: 0;
	border-radius: 50%;
	background: var(--wp--preset--color--amethyst-dusk);
	color: var(--wp--preset--color--bone-ivory);
	font-family: var(--wp--preset--font-family--cinzel);
	font-size: 0.92rem;
	letter-spacing: 0.02em;
}
.ml-pdp__details .commentlist {
	list-style: none;
	margin: 0 0 32px;
	padding: 0;
}
.ml-pdp__details .commentlist li.review {
	padding: 22px 0;
	margin: 0;
	border-bottom: 1px solid rgba(var(--wp--custom--gold-rgb), 0.14);
	background: none;
}
.ml-pdp__details .commentlist .comment_container {
	display: flex;
	gap: 14px;
	align-items: flex-start;
}
.ml-pdp__details .commentlist .avatar {
	position: static;
	width: 44px;
	height: 44px;
	border-radius: 50%;
	margin: 0;
	border: 1px solid rgba(var(--wp--custom--gold-rgb), 0.2);
}
.ml-pdp__details .commentlist .comment-text {
	flex: 1;
	margin: 0;
	padding: 0;
	border: 0;
}
.ml-pdp__details .commentlist .star-rating {
	color: var(--wp--preset--color--antique-gold);
	margin: 2px 0 8px;
	font-size: 0.9rem;
}
.ml-pdp__details .commentlist .woocommerce-review__author {
	font-family: var(--wp--preset--font-family--eb-garamond);
	font-size: 0.96rem;
	color: var(--wp--preset--color--bone-ivory);
	font-style: normal;
}
.ml-pdp__details .commentlist .woocommerce-review__dash,
.ml-pdp__details .commentlist .woocommerce-review__published-date {
	color: rgba(var(--wp--custom--taupe-rgb), 0.7);
}
.ml-pdp__details .commentlist .meta {
	margin: 0 0 8px;
	font-size: 0.85rem;
}
.ml-pdp__details .commentlist .description p,
.ml-pdp__details .commentlist .comment-text > p:last-child {
	color: var(--wp--preset--color--ash-taupe);
	font-size: 1rem;
	line-height: 1.75;
	margin: 0;
}
/* Review form. */
.ml-pdp__details .comment-respond .comment-reply-title {
	font-family: var(--wp--preset--font-family--cinzel);
	font-size: 1.1rem;
	color: var(--wp--preset--color--bone-ivory);
}
.ml-pdp__details #review_form .comment-form-rating label,
.ml-pdp__details #review_form label {
	color: var(--wp--preset--color--ash-taupe);
}
.ml-pdp__details #review_form textarea,
.ml-pdp__details #review_form input[type="text"],
.ml-pdp__details #review_form input[type="email"] {
	background: var(--wp--preset--color--chapel-stone);
	border: 1px solid rgba(var(--wp--custom--gold-rgb), 0.3);
	color: var(--wp--preset--color--bone-ivory);
	border-radius: 0;
	padding: 12px 14px;
}
.ml-pdp__details #review_form .submit {
	background: var(--wp--preset--color--antique-gold);
	color: var(--wp--preset--color--void-black);
	border: 0;
	border-radius: 0;
	padding: 13px 28px;
	font-family: var(--wp--preset--font-family--eb-garamond);
	text-transform: uppercase;
	letter-spacing: 0.1em;
	font-weight: 600;
	cursor: pointer;
}

/* ---- Related products (3-up) ---------------------------------------------- */
.ml-related__title {
	font-family: var(--wp--preset--font-family--cinzel);
	color: var(--wp--preset--color--bone-ivory);
}
/* Related inherits the shared 3-up card grid (.ml-products .wc-block-product-template
   and its responsive steps), so its cards are the same width as the homepage. */

/* ==========================================================================
   Cart / Checkout page hero (shared) — page-cart.html / page-checkout.html
   ========================================================================== */
.ml-page-hero__title {
	font-family: var(--wp--preset--font-family--cinzel);
	font-weight: 500;
	color: var(--wp--preset--color--bone-ivory);
	letter-spacing: 0.03em;
}
.ml-page-hero__sub {
	margin: 0;
	color: var(--wp--preset--color--ash-taupe);
	font-style: italic;
	font-size: 1.02rem;
}

/* ==========================================================================
   Cart (Koszyk) — WooCommerce Cart block, restyled
   ========================================================================== */
/* Items column + a boxed, sticky summary sidebar (design: 1fr / 380px). */
.ml-cart {
	/* Thin-line X (Phosphor-style) used for the remove controls, applied as a
	   mask so it inherits currentColor. Not in the icon-font subset, so inlined. */
	--ml-x-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3 3L13 13M13 3L3 13' stroke='black' stroke-width='1.25' stroke-linecap='round'/%3E%3C/svg%3E");
}
.ml-cart .wc-block-components-sidebar-layout {
	gap: 44px;
	align-items: flex-start;
}
.ml-cart .wc-block-cart__sidebar {
	flex: 0 0 380px;
	max-width: 380px;
	position: sticky;
	top: 24px;
	background: var(--wp--preset--color--chapel-stone);
	border: 1px solid rgba(var(--wp--custom--gold-rgb), 0.2);
	padding: 30px 28px;
}
@media (max-width: 960px) {
	.ml-cart .wc-block-cart__sidebar {
		flex-basis: auto;
		max-width: none;
		width: 100%;
		position: static;
	}
}
/* The summary card inside the sidebar shouldn't add its own frame. */
.ml-cart .wc-block-cart__sidebar .wc-block-components-panel,
.ml-cart .wc-block-cart__sidebar > div {
	background: transparent;
	border: 0;
	padding: 0;
}

/* Items table. */
.ml-cart .wc-block-cart-items {
	border: 0;
}
.ml-cart .wc-block-cart-items__header {
	color: var(--wp--preset--color--ash-taupe);
	font-size: 0.72rem;
	letter-spacing: 0.16em;
	text-transform: uppercase;
	border-bottom: 1px solid rgba(var(--wp--custom--gold-rgb), 0.2);
}
.ml-cart .wc-block-cart-items__row {
	border-bottom: 1px solid rgba(var(--wp--custom--gold-rgb), 0.14);
}
.ml-cart .wc-block-cart-item__image img {
	border: 1px solid rgba(var(--wp--custom--gold-rgb), 0.2);
}
.ml-cart .wc-block-components-product-name {
	font-family: var(--wp--preset--font-family--cinzel);
	font-weight: 500;
	font-size: 1.08rem !important;
	color: var(--wp--preset--color--bone-ivory) !important;
	letter-spacing: 0.03em;
}
.ml-cart .wc-block-cart-item__prices .price,
.ml-cart .wc-block-components-product-price {
	font-family: var(--wp--preset--font-family--cinzel);
	color: var(--wp--preset--color--antique-gold);
}
.ml-cart .wc-block-cart-item__total .wc-block-components-product-price {
	font-size: 1.1rem;
	color: var(--wp--preset--color--bone-ivory);
}
/* Quantity stepper: gold hairline box. */
.ml-cart .wc-block-components-quantity-selector {
	border: 1px solid rgba(var(--wp--custom--gold-rgb), 0.35);
	border-radius: 0;
	margin: 0;
}
.ml-cart .wc-block-components-quantity-selector__input {
	color: var(--wp--preset--color--bone-ivory);
	font-family: var(--wp--preset--font-family--cinzel);
	background: transparent;
}
.ml-cart .wc-block-components-quantity-selector__button {
	color: var(--wp--preset--color--bone-ivory);
	transition: color 0.3s ease;
}
.ml-cart .wc-block-components-quantity-selector__button:hover {
	color: var(--wp--preset--color--antique-gold);
}
/* Remove control → a thin X (reference), not WooCommerce's trash glyph. */
.ml-cart .wc-block-cart-item__remove-link {
	color: var(--wp--preset--color--ash-taupe);
	transition: color 0.3s ease;
}
.ml-cart .wc-block-cart-item__remove-link:hover {
	color: var(--wp--preset--color--antique-gold);
}
.ml-cart .wc-block-cart-item__remove-link svg,
.ml-cart .wc-block-cart-item__remove-link img {
	display: none;
}
.ml-cart .wc-block-cart-item__remove-link::before {
	content: "";
	display: block;
	width: 16px;
	height: 16px;
	background-color: currentColor;
	-webkit-mask: var(--ml-x-icon) center / contain no-repeat;
	mask: var(--ml-x-icon) center / contain no-repeat;
}

/* Reference column layout (product · ilość · razem · usuń). WooCommerce renders a
   real <table>; from 700px up we flatten it and lay each row out as its own grid
   that lines up column-for-column with the header. `display: contents` on the
   product cell lifts the name/variant/price/quantity into the row's own columns.
   Below 700px WooCommerce's stacked mobile layout stands. */
@media (min-width: 700px) {
	.ml-cart .wc-block-cart-items,
	.ml-cart .wc-block-cart-items > thead,
	.ml-cart .wc-block-cart-items > tbody {
		display: block;
		width: 100%;
	}
	.ml-cart .wc-block-cart-items__header,
	.ml-cart .wc-block-cart-items__row {
		display: grid;
		grid-template-columns: 88px minmax(0, 1fr) 130px 120px 40px;
		column-gap: 18px;
	}
	.ml-cart .wc-block-cart-items__header {
		align-items: end;
		padding: 0 0 14px;
	}
	.ml-cart .wc-block-cart-items__header-image { grid-column: 1 / 3; text-align: left; }
	/* WooCommerce hides this "details" header (visibility:hidden); we reveal it and
	   cart.js fills it with "Ilość" so the quantity column has a label. */
	.ml-cart .wc-block-cart-items__header-product {
		grid-column: 3;
		text-align: center;
		visibility: visible;
	}
	.ml-cart .wc-block-cart-items__header-product span { visibility: visible; }
	.ml-cart .wc-block-cart-items__header-total { grid-column: 4; text-align: right; }

	.ml-cart .wc-block-cart-items__row {
		/* Flexible top/bottom tracks absorb the slack so the name/variant/price
		   stack (the three auto rows) stays tight and vertically centred next to
		   the taller product image, instead of being stretched apart. */
		grid-template-rows: 1fr auto auto auto 1fr;
		align-items: center;
		padding: 22px 0;
	}
	/* WooCommerce puts a border-top on the row's cells; with the row gridded it
	   shows as stray line segments over the image and total — remove it (WC's rule
	   wins on specificity, hence !important). */
	.ml-cart .wc-block-cart-item__image,
	.ml-cart .wc-block-cart-item__total {
		border: 0 !important;
		padding: 0 !important;
	}
	.ml-cart .wc-block-cart-item__image { grid-column: 1; grid-row: 1 / -1; align-self: center; margin: 0; }
	.ml-cart .wc-block-cart-item__product,
	.ml-cart .wc-block-cart-item__wrap,
	.ml-cart .wc-block-cart-item__quantity {
		/* WooCommerce sets these to flex at equal-or-higher specificity; force the
		   unwrap so name/variant/price/quantity land in the row's own columns. */
		display: contents !important;
	}
	.ml-cart .wc-block-components-product-name { grid-column: 2; grid-row: 2; margin: 0 0 4px; }
	.ml-cart .wc-block-components-product-metadata { grid-column: 2; grid-row: 3; margin: 0; }
	.ml-cart .wc-block-cart-item__prices { grid-column: 2; grid-row: 4; margin: 4px 0 0; }
	.ml-cart .wc-block-components-quantity-selector {
		grid-column: 3;
		grid-row: 1 / -1;
		justify-self: center;
		align-self: center;
	}
	.ml-cart .wc-block-cart-item__total {
		grid-column: 4;
		grid-row: 1 / -1;
		justify-self: end;
		align-self: center;
		text-align: right;
	}
	.ml-cart .wc-block-cart-item__remove-link {
		grid-column: 5;
		grid-row: 1 / -1;
		justify-self: center;
		align-self: center;
	}
}

/* Summary heading + totals rows. */
.ml-cart .wc-block-cart__totals-title {
	font-family: var(--wp--preset--font-family--cinzel);
	font-size: 1.2rem;
	font-weight: 500;
	letter-spacing: 0.06em;
	color: var(--wp--preset--color--bone-ivory);
	text-align: left;
	margin: 0 0 22px;
}
/* WooCommerce's native totals rows are replaced by our own reconstructed summary
   (cart.js) so we can show "Wartość produktów" and keep delivery non-committal.
   Hide the block's own totals wrappers entirely — hiding just the inner rows would
   leave the wrappers' padding and border-top behind as empty gaps and stray
   dividers. Our .ml-cart-summary sits outside these wrappers, so it's unaffected. */
.ml-cart .wc-block-cart__sidebar .wc-block-components-totals-wrapper,
.ml-cart .wc-block-cart__sidebar .wp-block-woocommerce-cart-order-summary-totals-block,
.ml-cart .wc-block-components-totals-item,
.ml-cart .wc-block-components-totals-shipping,
.ml-cart .wc-block-components-totals-coupon {
	display: none;
}

/* Reconstructed order-summary rows (built by cart.js from cart totals). */
.ml-cart-summary {
	margin: 0;
}
.ml-cart-summary__row {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 16px;
	padding: 9px 0;
	color: var(--wp--preset--color--ash-taupe);
	font-size: 0.96rem;
}
.ml-cart-summary__value {
	color: var(--wp--preset--color--bone-ivory);
}
.ml-cart-summary__value.is-muted {
	color: var(--wp--preset--color--antique-gold);
	font-style: italic;
	font-size: 0.9rem;
}
.ml-cart-summary__row--discount .ml-cart-summary__label {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	color: var(--wp--preset--color--antique-gold);
}
.ml-cart-summary__remove {
	width: 16px;
	height: 16px;
	padding: 0;
	background: none;
	border: 0;
	cursor: pointer;
	color: var(--wp--preset--color--ash-taupe);
	-webkit-mask: var(--ml-x-icon) center / 11px 11px no-repeat;
	mask: var(--ml-x-icon) center / 11px 11px no-repeat;
	background-color: currentColor;
	transition: color 0.3s ease;
}
.ml-cart-summary__remove:hover {
	color: var(--wp--preset--color--antique-gold);
}
.ml-cart-summary__row--total {
	margin-top: 16px;
	padding-top: 16px;
	border-top: 1px solid rgba(var(--wp--custom--gold-rgb), 0.2);
}
.ml-cart-summary__row--total .ml-cart-summary__label {
	font-family: var(--wp--preset--font-family--cinzel);
	font-size: 1.05rem;
	color: var(--wp--preset--color--bone-ivory);
}
.ml-cart-summary__row--total .ml-cart-summary__value {
	font-family: var(--wp--preset--font-family--cinzel);
	font-size: 1.7rem;
	color: var(--wp--preset--color--antique-gold);
}

/* Proceed-to-checkout button → gold primary, full width. */
.ml-cart .wc-block-cart__submit-button,
.ml-cart .wc-block-cart__submit-container .wc-block-components-button {
	width: 100%;
	background: var(--wp--preset--color--antique-gold);
	color: var(--wp--preset--color--void-black);
	border-radius: 0;
	padding: 16px;
	font-family: var(--wp--preset--font-family--eb-garamond);
	font-size: 0.82rem;
	font-weight: 600;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	transition: background 0.4s ease, letter-spacing 0.4s ease;
}
.ml-cart .wc-block-cart__submit-button:hover {
	background: var(--wp--preset--color--bone-ivory);
	letter-spacing: 0.14em;
}

/* Actions row under the items list (injected by cart.js): a "Kontynuuj zakupy"
   link on the left, the "Kod rabatowy" coupon field on the right — the design
   puts the promo field here rather than in the summary sidebar. */
.ml-cart-actions {
	display: flex;
	align-items: flex-start;
	justify-content: space-between;
	gap: 16px;
	flex-wrap: wrap;
	margin-top: 26px;
}
.ml-cart-continue {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	margin-top: 11px;
	color: var(--wp--preset--color--ash-taupe);
	font-size: 0.86rem;
	letter-spacing: 0.06em;
	text-decoration: none;
	transition: color 0.3s ease;
}
.ml-cart-continue:hover {
	color: var(--wp--preset--color--antique-gold);
}
.ml-cart-coupon {
	display: flex;
	flex-wrap: wrap;
	gap: 10px;
	align-items: center;
}
.ml-cart-coupon__input {
	width: 190px;
	max-width: 100%;
	background: var(--wp--preset--color--chapel-stone);
	border: 1px solid rgba(var(--wp--custom--gold-rgb), 0.3);
	border-radius: 0;
	color: var(--wp--preset--color--bone-ivory);
	padding: 11px 14px;
	font-family: var(--wp--preset--font-family--eb-garamond);
	font-size: 0.9rem;
	outline: none;
	transition: border-color 0.3s ease;
}
.ml-cart-coupon__input::placeholder {
	color: var(--wp--preset--color--ash-taupe);
}
.ml-cart-coupon__input:focus {
	border-color: var(--wp--preset--color--antique-gold);
}
.ml-cart-coupon__submit {
	background: transparent;
	color: var(--wp--preset--color--bone-ivory);
	border: 1px solid rgba(var(--wp--custom--ivory-rgb, 237, 230, 214), 0.35);
	border-radius: 0;
	padding: 11px 20px;
	font-family: var(--wp--preset--font-family--eb-garamond);
	font-size: 0.74rem;
	font-weight: 600;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	cursor: pointer;
	transition: background 0.3s ease, color 0.3s ease, border-color 0.3s ease;
}
.ml-cart-coupon__submit:hover:not(:disabled) {
	background: var(--wp--preset--color--antique-gold);
	border-color: var(--wp--preset--color--antique-gold);
	color: var(--wp--preset--color--void-black);
}
.ml-cart-coupon__submit:disabled {
	opacity: 0.55;
	cursor: default;
}
.ml-cart-coupon__feedback {
	flex-basis: 100%;
	font-size: 0.82rem;
	font-style: italic;
	color: var(--wp--preset--color--ash-taupe);
}
.ml-cart-coupon__feedback.is-error {
	color: var(--wp--custom--state--error);
}
.ml-cart-coupon__feedback.is-success {
	color: var(--wp--preset--color--antique-gold);
}

/* ==========================================================================
   Checkout (Zamówienie) — WooCommerce Checkout block, restyled
   ========================================================================== */
/* The site's body size (1.25rem) is a reading size; the checkout is a form, and
   the design sizes every part of it against a 1rem base. Reset it once here so the
   parts WooCommerce leaves unsized (radio labels, totals rows, checkboxes) match. */
.ml-checkout {
	font-size: 1rem;
}
.ml-checkout .wc-block-checkout__main {
	counter-reset: ml-step;
}
.ml-checkout .wc-block-components-sidebar-layout {
	gap: 52px;
	align-items: flex-start;
}
.ml-checkout .wc-block-checkout__sidebar {
	flex: 0 0 400px;
	max-width: 400px;
	position: sticky;
	top: 24px;
	background: var(--wp--preset--color--chapel-stone);
	border: 1px solid rgba(var(--wp--custom--gold-rgb), 0.2);
	padding: 30px 28px;
}
@media (max-width: 960px) {
	.ml-checkout .wc-block-checkout__sidebar {
		flex-basis: auto;
		max-width: none;
		width: 100%;
		position: static;
	}
	/* Stacked, WooCommerce puts the summary above the form. The place-order button
	   lives in that summary here, so the order is flipped: form first, then the
	   summary with the total and the button directly above it. */
	.ml-checkout .wc-block-checkout__main {
		order: 0;
	}
	.ml-checkout .wc-block-checkout__sidebar {
		order: 1;
	}
}
.ml-checkout .wc-block-checkout__sidebar .wc-block-components-panel,
.ml-checkout .wc-block-checkout__sidebar > div {
	background: transparent;
	border: 0;
}

/* Numbered step headings (1–4), matching the design's gold badge. */
.ml-checkout .wc-block-components-checkout-step {
	margin-bottom: 40px;
}
.ml-checkout .wc-block-components-checkout-step__title {
	counter-increment: ml-step;
	display: flex;
	align-items: center;
	gap: 12px;
	font-family: var(--wp--preset--font-family--cinzel);
	font-weight: 500;
	font-size: 1.3rem;
	letter-spacing: 0.04em;
	color: var(--wp--preset--color--bone-ivory);
}
.ml-checkout .wc-block-components-checkout-step__title::before {
	content: counter(ml-step);
	flex-shrink: 0;
	width: 28px;
	height: 28px;
	display: flex;
	align-items: center;
	justify-content: center;
	border: 1px solid var(--wp--preset--color--antique-gold);
	color: var(--wp--preset--color--antique-gold);
	font-size: 0.9rem;
}

/* Form fields: chapel-stone, gold hairline. Note the country dropdown's classes are
   `wc-blocks-components-select*` — a different prefix from every other field. */
.ml-checkout .wc-block-components-text-input input,
.ml-checkout .wc-blocks-components-select__container,
.ml-checkout .wc-blocks-components-select__select,
.ml-checkout .wc-block-components-combobox-control input {
	background: var(--wp--preset--color--chapel-stone) !important;
	border: 1px solid rgba(var(--wp--custom--gold-rgb), 0.3) !important;
	border-radius: 0 !important;
	color: var(--wp--preset--color--bone-ivory) !important;
	font-size: 1rem !important;
}
/* WooCommerce's fields are floating-label inputs: the label sits over the empty
   field (reading as the design's placeholder) and shrinks to the top edge once
   there's a value, so the padding is asymmetric to leave room for it. */
.ml-checkout .wc-block-components-text-input input,
.ml-checkout .wc-block-components-combobox-control input {
	padding: 20px 16px 8px !important;
}
.ml-checkout .wc-block-components-text-input label,
.ml-checkout .wc-block-components-combobox-control label,
.ml-checkout .wc-block-components-checkout-step__description {
	color: var(--wp--preset--color--ash-taupe);
	font-size: 1rem;
	left: 16px;
}
.ml-checkout .wc-block-components-text-input.is-active label,
.ml-checkout .wc-block-components-combobox-control.is-active label {
	color: var(--wp--preset--color--antique-gold);
	font-size: 0.72rem;
}
/* The country dropdown keeps its label permanently shrunk (a select always has a
   value), so it only needs the colour and the matching inset. */
.ml-checkout .wc-blocks-components-select__label {
	color: var(--wp--preset--color--antique-gold);
	left: 16px;
}
.ml-checkout .wc-blocks-components-select__select {
	padding: 20px 16px 8px !important;
}
/* "+ Dodaj mieszkanie/lokal" — a secondary affordance, not a field. */
.ml-checkout .wc-block-components-address-form__address_2-toggle {
	color: var(--wp--preset--color--ash-taupe);
	font-size: 0.86rem;
}
.ml-checkout .wc-block-components-address-form__address_2-toggle:hover {
	color: var(--wp--preset--color--antique-gold);
}
/* Postcode is a short field (design: 150px) with the city taking the rest of the row. */
.ml-checkout .wc-block-components-address-form__postcode {
	flex: 0 0 150px;
	max-width: 150px;
}
.ml-checkout .wc-block-components-address-form__city {
	flex: 1 1 0;
	max-width: none;
}
@media (max-width: 600px) {
	.ml-checkout .wc-block-components-address-form__postcode,
	.ml-checkout .wc-block-components-address-form__city {
		flex-basis: 100%;
		max-width: none;
	}
}

/* Checkboxes ("use same address", terms): gold box, ivory tick. */
.ml-checkout .wc-block-components-checkbox__input[type="checkbox"] {
	border-radius: 0;
	border-color: rgba(var(--wp--custom--gold-rgb), 0.5);
	background: var(--wp--preset--color--chapel-stone);
}
.ml-checkout .wc-block-components-checkbox__input[type="checkbox"]:checked {
	background: var(--wp--preset--color--antique-gold);
	border-color: var(--wp--preset--color--antique-gold);
}
.ml-checkout .wc-block-components-checkbox__mark {
	fill: var(--wp--preset--color--void-black);
}
.ml-checkout .wc-block-components-checkbox__label {
	color: var(--wp--preset--color--ash-taupe);
	font-size: 0.88rem;
}

/* Shipping / payment option rows: bordered, gold when selected, with a courier
   glyph between the radio dot and the method name (design reference). */
.ml-checkout .wc-block-components-radio-control__option {
	position: relative;
	border: 1px solid rgba(var(--wp--custom--gold-rgb), 0.25);
	padding: 16px 18px 16px 76px;
	margin-bottom: 10px;
	border-radius: 0;
}
.ml-checkout .wc-block-components-radio-control__option-checked {
	border-color: var(--wp--preset--color--antique-gold);
	background: rgba(var(--wp--custom--gold-rgb), 0.06);
}
.ml-checkout .wc-block-checkout__shipping-option .wc-block-components-radio-control__option::before {
	content: "\e4b4"; /* ph-truck */
	font-family: "Phosphor-Light";
	position: absolute;
	left: 44px;
	top: 50%;
	transform: translateY(-50%);
	font-size: 22px;
	line-height: 1;
	color: var(--wp--preset--color--antique-gold);
}
.ml-checkout .wc-block-components-radio-control__label {
	color: var(--wp--preset--color--bone-ivory);
	font-size: 0.98rem;
}
.ml-checkout .wc-block-components-radio-control__description {
	color: var(--wp--preset--color--ash-taupe);
	font-size: 0.82rem;
}
.ml-checkout .wc-block-components-radio-control__secondary-label {
	font-family: var(--wp--preset--font-family--cinzel);
	font-size: 1rem;
	color: var(--wp--preset--color--bone-ivory);
}
.ml-checkout .wc-block-checkout__shipping-option--free {
	color: var(--wp--preset--color--antique-gold);
}
.ml-checkout .wc-block-components-radio-control__input {
	border-color: rgba(var(--wp--custom--gold-rgb), 0.5);
}
.ml-checkout .wc-block-components-radio-control__input:checked {
	border-color: var(--wp--preset--color--antique-gold);
	color: var(--wp--preset--color--antique-gold);
}

/* Validation feedback. WooCommerce ships a light-theme error style — dark red text
   and a near-white notice banner — which is unreadable on Void Black. */
.ml-checkout .wc-block-components-validation-error,
.ml-checkout .wc-block-components-validation-error p {
	color: var(--wp--custom--state--error);
	font-size: 0.82rem;
}
.ml-checkout .wc-block-components-text-input.has-error input,
.ml-checkout .wc-block-components-combobox-control.has-error input,
.ml-checkout .has-error .wc-blocks-components-select__select {
	border-color: var(--wp--custom--state--error) !important;
}
.ml-checkout .wc-block-components-notice-banner {
	background: var(--wp--preset--color--chapel-stone);
	color: var(--wp--preset--color--bone-ivory);
	border-radius: 0;
}
.ml-checkout .wc-block-components-notice-banner.is-error {
	border-color: var(--wp--custom--state--error);
}
.ml-checkout .wc-block-components-notice-banner.is-error > svg {
	background: var(--wp--custom--state--error);
	fill: var(--wp--preset--color--void-black);
}
.ml-checkout .wc-block-components-notice-banner.is-info,
.ml-checkout .wc-block-components-notice-banner.is-success {
	border-color: rgba(var(--wp--custom--gold-rgb), 0.4);
}
.ml-checkout .wc-block-components-notice-banner.is-info > svg,
.ml-checkout .wc-block-components-notice-banner.is-success > svg {
	background: var(--wp--preset--color--antique-gold);
	fill: var(--wp--preset--color--void-black);
}
.ml-checkout .wc-block-components-notice-banner a {
	color: var(--wp--preset--color--antique-gold);
}

/* Order summary sidebar. */
.ml-checkout .wc-block-components-checkout-order-summary__title,
.ml-checkout .wc-block-components-totals-wrapper .wc-block-components-title {
	font-family: var(--wp--preset--font-family--cinzel);
	font-size: 1.2rem;
	font-weight: 500;
	letter-spacing: 0.06em;
	color: var(--wp--preset--color--bone-ivory);
}
.ml-checkout .wc-block-components-order-summary-item {
	padding: 12px 0;
	border-bottom: 1px solid rgba(var(--wp--custom--gold-rgb), 0.12);
}
.ml-checkout .wc-block-components-order-summary-item__image img {
	border: 1px solid rgba(var(--wp--custom--gold-rgb), 0.2);
}
.ml-checkout .wc-block-components-order-summary-item__quantity {
	background: var(--wp--preset--color--amethyst-dusk);
	border-color: var(--wp--preset--color--amethyst-dusk);
	color: var(--wp--preset--color--bone-ivory);
}
.ml-checkout .wc-block-components-order-summary-item__description .wc-block-components-product-name {
	font-family: var(--wp--preset--font-family--cinzel);
	font-size: 0.9rem;
	color: var(--wp--preset--color--bone-ivory);
}
.ml-checkout .wc-block-components-order-summary-item__description .wc-block-components-product-price {
	font-family: var(--wp--preset--font-family--cinzel);
	font-size: 0.9rem;
	color: var(--wp--preset--color--bone-ivory);
}
/* Variation line ("Rozmiar: 200 ml") — the design's italic sub-label. */
.ml-checkout .wc-block-components-product-details {
	margin: 2px 0 0;
	color: var(--wp--preset--color--ash-taupe);
	font-size: 0.78rem;
	font-style: italic;
}
.ml-checkout .wc-block-components-product-details__name {
	font-weight: 400;
}
.ml-checkout .wc-block-components-totals-item {
	color: var(--wp--preset--color--ash-taupe);
}
.ml-checkout .wc-block-components-totals-item__value {
	color: var(--wp--preset--color--bone-ivory);
}
.ml-checkout .wc-block-components-totals-footer-item .wc-block-components-totals-item__value {
	font-family: var(--wp--preset--font-family--cinzel);
	font-size: 1.7rem;
	color: var(--wp--preset--color--antique-gold);
}

/* Place-order button + terms note live in the summary sidebar (design reference):
   the page content nests both blocks inside the totals block. The Checkout block
   still force-renders an actions row at the end of the form when it doesn't find
   one there, so that spare copy is hidden rather than shown twice. */
.ml-checkout .wc-block-checkout__main .wc-block-checkout__actions {
	display: none;
}
.ml-checkout .wc-block-checkout__sidebar .wc-block-checkout__actions {
	margin-top: 14px;
}
.ml-checkout .wc-block-components-checkout-place-order-button {
	width: 100%;
	background: var(--wp--preset--color--antique-gold) !important;
	color: var(--wp--preset--color--void-black) !important;
	border-radius: 0;
	padding: 16px;
	font-family: var(--wp--preset--font-family--eb-garamond);
	font-size: 0.82rem;
	font-weight: 600;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	transition: background 0.4s ease, letter-spacing 0.4s ease;
}
/* Padlock glyph before the label. Phosphor's lock isn't in the theme's icon subset
   (and the button's markup is React-owned), so it's an inline mask that takes its
   colour from the button text. */
.ml-checkout .wc-block-components-checkout-place-order-button::before {
	content: "";
	width: 16px;
	height: 16px;
	margin-right: 10px;
	flex-shrink: 0;
	background: currentColor;
	mask: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256"><path d="M208,82H174V56a46,46,0,0,0-92,0V82H48A14,14,0,0,0,34,96V208a14,14,0,0,0,14,14H208a14,14,0,0,0,14-14V96A14,14,0,0,0,208,82ZM94,56a34,34,0,0,1,68,0V82H94ZM210,208a2,2,0,0,1-2,2H48a2,2,0,0,1-2-2V96a2,2,0,0,1,2-2H208a2,2,0,0,1,2,2Z"/></svg>') center / contain no-repeat;
}
.ml-checkout .wc-block-components-checkout-place-order-button:hover {
	background: var(--wp--preset--color--bone-ivory) !important;
	letter-spacing: 0.14em;
}
/* Terms acceptance. The block's own `checkbox` attribute makes this a required
   consent — WooCommerce registers a validation error while it's unticked and won't
   place the order. It sits directly above the button it gates. */
.ml-checkout .wc-block-checkout__terms {
	margin: 22px 0 0;
	padding: 0;
	border: 0;
}
.ml-checkout .wc-block-checkout__terms .wc-block-components-checkbox__label {
	color: var(--wp--preset--color--ash-taupe);
	font-size: 0.82rem;
	line-height: 1.5;
}
.ml-checkout .wc-block-checkout__terms a {
	color: var(--wp--preset--color--antique-gold);
}
/* WooCommerce flags the unticked box with `has-error` but no message (the control
   itself is the error), so the box has to read as invalid on its own. */
.ml-checkout .wc-block-components-checkbox.has-error .wc-block-components-checkbox__input[type="checkbox"] {
	border-color: var(--wp--custom--state--error);
}

/* ==========================================================================
   Reduced motion — disable the decorative transitions/animations above.
   ========================================================================== */
@media (prefers-reduced-motion: reduce) {
	.ml-lift,
	.ml-lift:hover,
	.ml-collections > .wp-block-column,
	.ml-collections > .wp-block-column:hover,
	.ml-collections .wp-block-cover__image-background,
	.ml-collections > .wp-block-column:hover .wp-block-cover__image-background,
	.ml-products .wc-block-product,
	.ml-products .wc-block-product:hover,
	.ml-prod__media img,
	.ml-products .wc-block-product:hover .ml-prod__media img {
		transition: none;
		transform: none;
	}
	[class*="ml-flicker"],
	.ml-glow {
		animation: none !important;
	}
}
