/*
Theme Name: WheelsOnWalls 2026
Theme URI: https://wheelsonwalls.shop
Author: Loïc Kernen
Description: Lightweight custom block theme for the WheelsOnWalls WooCommerce store. Built from scratch, no page builder, no legacy theme framework dependencies.
Version: 0.1.0
Requires at least: 6.5
Tested up to: 6.8
Requires PHP: 8.0
Text Domain: wow-2026
*/

/* Intentionally minimal — block themes get most of their styling from theme.json.
   Anything here should be a genuine exception (e.g. a rule block editor UI can't express). */

/* Border-box everywhere — without this, any element that combines width:100%
   with padding/border (the archive frame, buttons, form inputs…) renders
   wider than its box and overflows its grid/flex container. */
*,
*::before,
*::after {
	box-sizing: border-box;
}

/* Browsers apply an 8px default margin to <body> — with the header taken
   out of flow on hero pages (body.wow-has-hero), that 8px was showing up as
   a visible white sliver above the hero image, since nothing else was left
   to hide it. Reset here rather than only on hero pages, since it's a
   correctness fix everywhere, not a hero-specific patch. */
body {
	margin: 0;
}

/* Sitewide guard against horizontal page scroll — on the product page
   specifically, the frame mockup's rotateX/rotateY tilt (.frame-mockup-
   wrapper, under .frame-mockup-container's perspective) is a likely
   culprit: CSS transforms count toward an element's *scrollable* overflow
   even though they never affect its layout size, so a couple of tilted
   degrees can add a sliver of extra scrollable width that isn't visible
   until you swipe/pinch past the right edge — exactly the "looks full-width
   on load, but you can scroll right into dead space" symptom on real iOS
   Safari (desktop/DevTools emulation often doesn't reproduce it). Rather
   than chase down every transform/negative-margin that could theoretically
   do this sitewide, clipping it here closes off the whole category at the
   root. Nothing on this site intentionally relies on page-level horizontal
   scroll — every horizontally-scrolling element (galleries, swatches,
   related-products carousel, etc.) already manages its own overflow-x
   internally, so this doesn't affect any of them.
   html only, not body: setting a non-visible overflow on <body> makes body
   itself establish its own scroll container (per the CSS Overflow spec's
   "propagate to viewport" rule, since a specified overflow on body is used
   as-is instead of being handed up to the viewport) — and position: sticky
   descendants stick relative to their nearest scrolling ancestor, so a
   sticky mobile header (.wow-header, see the max-width: 900px rules further
   down) inside that body-level scroll box never actually sees the page
   scroll and never sticks. html's own overflow-x, by contrast, controls the
   viewport's clipping directly without creating that nested scroll box, so
   it gets the same horizontal-scroll guard without breaking sticky. */
html {
	overflow-x: hidden;
}

/* WordPress core's own global styles inject margin-block-start:24px on every
   direct child of .wp-site-blocks (the wrapper block themes get around
   header/main/footer) via a `:where(...)` rule — that's what was actually
   causing the remaining white gap above the hero, not the body margin above.
   `:where()` carries zero specificity on purpose, so any plain rule of ours
   overrides it outright. Zeroed sitewide since this theme hand-manages all
   of its own spacing already — nothing here should be relying on WP's
   default block gap. */
.wp-site-blocks > * {
	margin-block-start: 0;
}

/* Same WP core mechanism, one level deeper: any wp:group block without an
   explicit "layout" attribute defaults to flow layout and gets a matching
   `:where(.is-layout-flow) > * { margin-block-start:24px }` rule applied to
   ITS OWN children — which is what was pushing .wow-nav down inside
   .wow-header. Scoped to just .wow-header/.wow-footer (the two hand-built
   structural wrappers using default flow layout) rather than disabled
   sitewide via .is-layout-flow itself — plain content pages (About Us,
   Privacy Policy, FAQ…) built later with ordinary paragraphs/headings in
   the block editor still benefit from WP's default spacing between them. */
.wow-header > *,
.wow-footer > * {
	margin-block-start: 0;
}

/* Intermediate / subheader style: Josefin Sans 300, uppercase, 1px letter-spacing.
   Apply with class="wow-subheading" on any block (e.g. a paragraph or heading). */
.wow-subheading {
	font-family: var(--wp--preset--font-family--josefin);
	font-weight: 300;
	text-transform: uppercase;
	letter-spacing: 1px;
}

/* ── Homepage hero ────────────────────────────────────────────────────────── */

.wow-hero {
	position: relative;
	display: flex;
	align-items: center;
	min-height: 640px;
	background-size: cover;
	background-position: center;
	background-color: var(--wp--preset--color--black);
}

/* Left-to-right darkening so the title/CTA stay legible over the photo —
   same treatment as the mega menu cards, for visual consistency. */
.wow-hero::before {
	content: '';
	position: absolute;
	inset: 0;
	background: linear-gradient(to right, rgba(0, 0, 0, 0.6) 0%, rgba(0, 0, 0, 0.25) 45%, rgba(0, 0, 0, 0) 75%);
}

.wow-hero__content {
	position: relative;
	z-index: 1;
	max-width: 1270px;
	width: 100%;
	margin: 0 auto;
	padding: 0 32px;
}

.wow-hero__eyebrow {
	color: #fff;
	margin: 0 0 16px;
}

.wow-hero__title {
	color: #fff;
	font-size: clamp(32px, 5vw, 56px);
	max-width: 640px;
	margin: 0 0 32px;
}

.wow-hero__cta {
	display: inline-block;
	background-color: var(--wp--preset--color--accent);
	color: #fff;
	text-decoration: none;
	font-size: 13px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 1px;
	padding: 16px 32px;
	transition: background-color 0.2s ease;
}

.wow-hero__cta:hover,
.wow-hero__cta:focus-visible {
	background-color: #fff;
	color: var(--wp--preset--color--black);
}

@media (max-width: 640px) {
	.wow-hero {
		min-height: 480px;
	}

	.wow-hero__content {
		padding: 0 20px;
	}
}

/* ── Homepage intro: big headline left, smaller copy right ──────────────── */

.wow-intro {
	display: grid;
	grid-template-columns: 1.1fr 1fr;
	gap: 48px;
	align-items: center;
	max-width: 1270px;
	margin: 0 auto;
	padding: 80px 32px;
}

.wow-intro__headline {
	font-size: clamp(28px, 4vw, 48px);
	margin: 0;
}

.wow-intro__text {
	font-size: 16px;
	line-height: 1.7;
	color: var(--wp--preset--color--text);
	margin: 0;
}

.wow-intro__text a {
	color: var(--wp--preset--color--accent);
	text-decoration: underline;
}

@media (max-width: 780px) {
	.wow-intro {
		grid-template-columns: 1fr;
		padding: 56px 20px;
		gap: 24px;
	}
}

/* Centered variant — homepage intro, no headline, single column of copy
   capped at 800px so it doesn't stretch full-width on desktop. Overrides
   the two-column grid above (still used elsewhere/kept for reference). */
.wow-intro--centered {
	display: block;
	max-width: 800px;
	margin: 0 auto;
	text-align: center;
	padding: 80px 32px 0;
}

.wow-intro--centered .wow-intro__text {
	font-size: 17px;
}

@media (max-width: 780px) {
	.wow-intro--centered {
		padding: 56px 20px 0;
	}
}

/* ── Homepage "Fine Art Partners" logo strip ─────────────────────────────── */

.wow-partners {
	max-width: 1270px;
	margin: 0 auto;
	padding: 32px 32px 0;
	text-align: center;
}

.wow-partners__label {
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 11px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 1px;
	color: var(--wp--preset--color--grey);
	margin: 0 0 20px;
}

/* nowrap — always a single row, even on mobile, per the "small on 1 row"
   requirement, rather than letting narrow viewports stack the logos. */
.wow-partners__logos {
	display: flex;
	flex-wrap: nowrap;
	align-items: center;
	justify-content: center;
	gap: 40px;
	opacity: 0.4;
}

.wow-partners__logo {
	height: 28px;
	width: auto;
	max-width: 120px;
	object-fit: contain;
}

@media (max-width: 480px) {
	.wow-partners__logos {
		gap: 24px;
	}

	.wow-partners__logo {
		height: 20px;
		max-width: 90px;
	}
}

/* ── Homepage category cards ─────────────────────────────────────────────── */

.wow-categories {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 20px;
	max-width: 1270px;
	margin: 0 auto;
	padding: 0 32px 80px;
}

.wow-cat-card {
	position: relative;
	display: flex;
	flex-direction: column;
	justify-content: flex-end;
	min-height: 420px;
	padding: 24px;
	text-decoration: none;
	background-color: var(--wp--preset--color--off-white);
	background-size: cover;
	background-position: center;
	overflow: hidden;
	transition: transform 0.25s ease, box-shadow 0.25s ease;
}

.wow-cat-card:hover,
.wow-cat-card:focus-visible {
	transform: translateY(-4px);
	box-shadow: 0 16px 32px rgba(0, 0, 0, 0.15);
}

/* Darkening gradient from the bottom so title/description/CTA stay legible
   over the photo. */
.wow-cat-card::before {
	content: '';
	position: absolute;
	inset: 0;
	background: linear-gradient(to top, rgba(0, 0, 0, 0.8) 0%, rgba(0, 0, 0, 0.35) 45%, rgba(0, 0, 0, 0) 75%);
	z-index: 1;
}

.wow-cat-card__pill {
	position: relative;
	z-index: 2;
	align-self: flex-start;
	background-color: var(--wp--preset--color--accent);
	color: #fff;
	font-size: 9px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.5px;
	padding: 3px 9px;
	border-radius: 999px;
	margin-bottom: auto;
}

.wow-cat-card__body {
	position: relative;
	z-index: 2;
}

.wow-cat-card__title {
	color: #fff;
	margin: 0 0 8px;
	font-size: 22px;
}

.wow-cat-card__desc {
	color: rgba(255, 255, 255, 0.85);
	font-size: 13px;
	line-height: 1.6;
	margin: 0 0 14px;
	max-width: 34ch;
}

.wow-cat-card__cta {
	display: inline-block;
	color: #fff;
	font-size: 11px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.5px;
	border-bottom: 1px solid rgba(255, 255, 255, 0.5);
	padding-bottom: 2px;
	transition: border-color 0.2s ease, color 0.2s ease;
}

.wow-cat-card:hover .wow-cat-card__cta,
.wow-cat-card:focus-visible .wow-cat-card__cta {
	color: var(--wp--preset--color--accent);
	border-bottom-color: var(--wp--preset--color--accent);
}

@media (max-width: 780px) {
	.wow-categories {
		grid-template-columns: 1fr;
		padding: 0 20px 56px;
	}
}

/* ── Homepage best sellers slider ────────────────────────────────────────── */

.wow-bestsellers {
	max-width: 1270px;
	margin: 0 auto;
	padding: 0 32px 80px;
}

.wow-bestsellers__header {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	margin-bottom: 24px;
}

.wow-bestsellers__title {
	margin: 0;
	font-size: clamp(22px, 2.4vw, 30px);
	text-transform: none;
}

.wow-bestsellers__viewall {
	flex-shrink: 0;
	display: inline-flex;
	align-items: center;
	border: 1px solid #ddd;
	border-radius: 999px;
	padding: 10px 22px;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 12px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.5px;
	color: var(--wp--preset--color--text);
	text-decoration: none;
	transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease;
}

.wow-bestsellers__viewall:hover,
.wow-bestsellers__viewall:focus-visible {
	background-color: #000;
	border-color: #000;
	color: #fff;
}

.wow-bestsellers__viewport {
	position: relative;
}

.wow-bestsellers__track {
	display: flex;
	gap: 20px;
	overflow-x: auto;
	scroll-snap-type: x mandatory;
	scrollbar-width: none;
	padding-bottom: 4px;
}

.wow-bestsellers__track::-webkit-scrollbar {
	display: none;
}

.wow-bestsellers__arrow {
	position: absolute;
	top: 35%;
	transform: translateY(-50%);
	z-index: 3;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 36px;
	height: 36px;
	border-radius: 50%;
	border: 1px solid #e2e2e2;
	background-color: #fff;
	color: var(--wp--preset--color--text);
	cursor: pointer;
	transition: border-color 0.2s ease, color 0.2s ease;
}

.wow-bestsellers__arrow:hover,
.wow-bestsellers__arrow:focus-visible {
	border-color: var(--wp--preset--color--accent);
	color: var(--wp--preset--color--accent);
}

.wow-bestsellers__arrow--prev {
	left: -18px;
}

.wow-bestsellers__arrow--next {
	right: -18px;
}

@media (max-width: 900px) {
	.wow-bestsellers__arrow {
		display: none;
	}
}

.wow-bestsellers__progress {
	margin-top: 20px;
	height: 2px;
	background-color: #eee;
	border-radius: 999px;
	overflow: hidden;
}

.wow-bestsellers__progress-bar {
	display: block;
	height: 100%;
	width: 20%;
	background-color: var(--wp--preset--color--accent);
	border-radius: 999px;
	transition: width 0.15s ease;
}

.wow-product-card {
	flex: 0 0 220px;
	scroll-snap-align: start;
}

.wow-product-card__media {
	position: relative;
	display: block;
	aspect-ratio: 4 / 5;
	background-color: var(--wp--preset--color--off-white);
	border-radius: 4px;
	overflow: hidden;
}

.wow-product-card__pill {
	position: absolute;
	top: 10px;
	right: 10px;
	z-index: 2;
	background-color: var(--wp--preset--color--accent);
	color: #fff;
	font-size: 10px;
	font-weight: 700;
	padding: 4px 9px;
	border-radius: 999px;
}

.wow-product-card__quick-actions {
	position: absolute;
	right: 10px;
	bottom: 10px;
	z-index: 2;
	display: flex;
	flex-direction: column;
	gap: 8px;
	opacity: 0;
	transform: translateX(6px);
	transition: opacity 0.2s ease, transform 0.2s ease;
}

.wow-product-card__media:hover .wow-product-card__quick-actions,
.wow-product-card__media:focus-within .wow-product-card__quick-actions {
	opacity: 1;
	transform: translateX(0);
}

.wow-product-card__quick-actions button {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 32px;
	height: 32px;
	border: none;
	border-radius: 50%;
	background-color: #fff;
	color: var(--wp--preset--color--text);
	cursor: pointer;
	box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
	transition: background-color 0.2s ease, color 0.2s ease;
}

.wow-product-card__quick-actions button:hover,
.wow-product-card__quick-actions button:focus-visible {
	background-color: var(--wp--preset--color--accent);
	color: #fff;
}

.wow-product-card__body {
	padding-top: 14px;
}

.wow-product-card__cat {
	display: block;
	font-size: 11px;
	color: #999;
	margin-bottom: 4px;
}

.wow-product-card__title {
	margin: 0 0 8px;
	font-size: 15px;
	text-transform: none;
	font-weight: 700;
}

.wow-product-card__title a {
	color: var(--wp--preset--color--text);
	text-decoration: none;
}

.wow-product-card__title a:hover,
.wow-product-card__title a:focus-visible {
	color: var(--wp--preset--color--accent);
}

.wow-product-card__price-old {
	color: #aaa;
	font-size: 13px;
	text-decoration: line-through;
	margin-right: 6px;
}

.wow-product-card__price-now {
	color: var(--wp--preset--color--accent);
	font-size: 15px;
	font-weight: 700;
}

/* ── Utility top bar (above the main header) ─────────────────────────────── */

.wow-topbar {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	background-color: #000;
	padding-top: 10px;
	padding-bottom: 10px;
	padding-left: max(32px, calc((100% - 1270px) / 2));
	padding-right: max(32px, calc((100% - 1270px) / 2));
}

.wow-topbar__text {
	display: flex;
	align-items: center;
	gap: 6px;
	margin: 0;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 10px;
	font-weight: 300;
	text-transform: uppercase;
	letter-spacing: 1px;
	color: rgba(255, 255, 255, 0.75);
}

.wow-topbar__text-icon {
	flex-shrink: 0;
	color: rgba(255, 255, 255, 0.75);
}

.wow-topbar__switchers {
	display: flex;
	align-items: center;
	gap: 16px;
}

/* Mobile: the whole utility bar (Worldwide Shipping text + language/currency
   switchers) is dropped entirely — the new mobile header carries its own
   tagline under the logo instead (see .wow-header__tagline), and the
   switchers move into the burger menu (.wow-nav__mobile-switchers).
   !important because the block's own "is-layout-flex" class (from this
   Group's layout:flex setting) gets core's "body .is-layout-flex { display:
   flex }" injected with higher specificity (0,1,1) than plain ".wow-topbar"
   (0,1,0) — without it, that core rule wins the tie and the bar stays
   visible regardless of this rule or source order. */
@media (max-width: 900px) {
	.wow-topbar {
		display: none !important;
	}
}

/* On narrow screens the tagline + language/currency switchers used to wrap
   onto a second line inside the bar (the flex row itself never wraps, but
   .wow-topbar__text's own text did, growing the row taller). Keeping it one
   line: the switchers group never shrinks (it's short and already tight),
   the tagline takes whatever space is left and shrinks its own font instead
   of wrapping, truncating with an ellipsis only in the very unlikely case
   it still doesn't fit. */
@media (max-width: 600px) {
	.wow-topbar {
		gap: 10px;
	}

	.wow-topbar__text {
		flex: 1 1 auto;
		min-width: 0;
		font-size: 9px;
		letter-spacing: 0.4px;
		white-space: nowrap;
		overflow: hidden;
		text-overflow: ellipsis;
		/* Below 900px the switchers are hidden entirely (see
		   .wow-topbar__switchers), so .wow-topbar's justify-content:center
		   should center this text — but flex:1 1 auto above makes it grow to
		   fill the whole row as the only visible child, leaving nothing for
		   justify-content to center *within*; the text then sits at its own
		   default left alignment inside that full-width box. text-align does
		   the actual centering. */
		text-align: center;
	}

	.wow-topbar__switchers {
		flex-shrink: 0;
		gap: 10px;
	}

	.wow-topbar__switchers ul {
		gap: 6px;
	}

	.wow-topbar__switchers a {
		font-size: 9px;
	}

	/* Same "select" as the desktop switcher, just tighter: smaller text,
	   less reserved space between the label and the dropdown arrow, and a
	   smaller arrow icon to match (the arrow's own size comes from the SVG's
	   intrinsic 10x6 in the data URI — background-size scales it down since
	   there's no other way to resize an embedded SVG background image). */
	.wow-topbar__switchers select {
		font-size: 9px;
		padding-right: 11px;
		background-size: 8px 5px;
	}
}

/* ── Header wrap: black bar spans full width, content caps at 1270px via
   calculated padding instead of an inner wrapper element (no wrapper = no
   risk of the Site Editor mangling nested Group blocks on save). ────────── */

.wow-header {
	position: relative;
	display: grid;
	grid-template-columns: 1fr auto 1fr;
	align-items: center;
	gap: 24px;
	background-color: #000;
	padding-top: 16px;
	padding-bottom: 16px;
	padding-left: max(32px, calc((100% - 1270px) / 2));
	padding-right: max(32px, calc((100% - 1270px) / 2));
}

.wow-header__logo {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	justify-self: start;
	gap: 2px;
}

.wow-header__logo-img {
	display: block;
	width: 100%;
	max-width: 110px;
	height: auto;
}

/* Tagline under the logo — shown on every width now (mobile's own copy in
   the max-width: 900px override below just resizes it for the smaller
   header). Topbar still separately carries "Worldwide Shipping" above. */
.wow-header__tagline {
	display: block;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 10px;
	font-weight: 300;
	text-transform: uppercase;
	letter-spacing: 1.5px;
	color: rgba(255, 255, 255, 0.75);
	margin: 0;
	white-space: nowrap;
	line-height: 10px;
}

/* Now wraps an <a> (clickable to home, like the logo above it) — inherit
   the same look rather than the browser's default link blue/underline. */
.wow-header__tagline a {
	color: inherit;
	text-decoration: none;
}

.wow-header .wow-nav {
	justify-self: center;
}

.wow-header__actions {
	justify-self: end;
}

/* White text/icons throughout the black header — overrides the sitewide
   #444 text color and dark link colors for everything inside this bar. */
.wow-header,
.wow-header a,
.wow-header .wow-nav__link,
.wow-header__actions,
.wow-header__actions * {
	color: #fff;
}

.wow-header .wow-nav__toggle span {
	background: #fff;
}

/* Panels (mega menu + dropdown) sit on their own light background, so reset
   text back to dark inside them — otherwise white-on-white is invisible. */
.wow-header .wow-nav__panel,
.wow-header .wow-nav__panel a {
	color: var(--wp--preset--color--text);
}

.wow-header .wow-nav__dropdown-list a:hover,
.wow-header .wow-nav__dropdown-list a:focus-visible {
	color: var(--wp--preset--color--accent);
}

.wow-header .wow-nav__dropdown-heading {
	color: var(--wp--preset--color--grey);
}

/* Language switcher (Polylang block) + currency switcher (CURCY shortcode) +
   mini-cart, all sitting in the black bar. Their default markup (a plain
   <ul><li>) had zero styling before, hence the bulleted list — laid out as a
   compact horizontal row here instead.
   The same switchers also now live in .wow-topbar__switchers (the slim bar
   above the header) — every rule below is shared between both locations. */
.wow-header__actions,
.wow-topbar__switchers {
	display: flex;
	align-items: center;
	gap: 16px;
}

/* Overrides the shared gap above for the header bar only — .wow-topbar__switchers keeps 16px. */
.wow-header__actions {
	gap: 14px;
}

.wow-header__actions ul,
.wow-topbar__switchers ul {
	display: flex;
	align-items: center;
	gap: 10px;
	list-style: none;
	margin: 0;
	padding: 0;
}

.wow-header__actions li,
.wow-topbar__switchers li {
	list-style: none;
}

.wow-header__actions a,
.wow-topbar__switchers a {
	text-decoration: none;
	font-size: 11px;
	text-transform: uppercase;
	letter-spacing: 0.5px;
	color: rgba(255, 255, 255, 0.75);
}

.wow-header__actions a:hover,
.wow-header__actions a:focus-visible,
.wow-topbar__switchers a:hover,
.wow-topbar__switchers a:focus-visible {
	color: var(--wp--preset--color--accent);
}

/* Language switcher (Polylang) + currency switcher (CURCY) — both native
   <select> elements. Stripped of the default boxy browser chrome (border,
   background, OS-drawn arrow) for a minimal "text + small arrow" look that
   matches the rest of the nav instead of sitting in its own button. */
.wow-header__actions select,
.wow-topbar__switchers select {
	appearance: none;
	-webkit-appearance: none;
	-moz-appearance: none;
	background-color: transparent;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='white' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: right center;
	border: none;
	color: rgba(255, 255, 255, 0.75);
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 11px;
	text-transform: uppercase;
	letter-spacing: 0.5px;
	padding: 4px 16px 4px 0;
	cursor: pointer;
}

.wow-header__actions select option,
.wow-topbar__switchers select option {
	background-color: #000;
	color: #fff;
	font-family: var(--wp--preset--font-family--josefin);
}

/* CURCY's shortcode output gets wrapped in an empty <p> by WordPress's
   wpautop filter — invisible but still takes up line-height, throwing off
   vertical alignment. Collapse any empty paragraph in either bar. */
.wow-header__actions p:empty,
.wow-topbar__switchers p:empty {
	display: none;
}

/* Wishlist / search / account icons, sitting just left of the cart. */
.wow-header__icons {
	display: flex;
	align-items: center;
	gap: 14px;
}

.wow-header__icon-link {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	background: none;
	border: none;
	padding: 0;
	cursor: pointer;
	color: #fff;
	line-height: 0;
}

.wow-header__icon-link:hover,
.wow-header__icon-link:focus-visible {
	color: var(--wp--preset--color--accent);
}

/* Search — expands as a full-width bar under the header instead of a popup,
   so it doesn't get cramped next to the icon. */
.wow-header__search-form {
	position: absolute;
	top: 100%;
	left: 0;
	right: 0;
	display: flex;
	align-items: center;
	background: var(--wp--preset--color--background);
	max-height: 0;
	overflow: hidden;
	padding-left: max(32px, calc((100% - 1270px) / 2));
	padding-right: max(32px, calc((100% - 1270px) / 2));
	transition: max-height 0.25s ease, padding-top 0.25s ease, padding-bottom 0.25s ease;
	z-index: 40;
}

.wow-header__search-form.is-open {
	max-height: 80px;
	padding-top: 16px;
	padding-bottom: 16px;
}

.wow-header__search-input {
	flex: 1;
	border: none;
	border-bottom: 1px solid var(--wp--preset--color--grey);
	background: transparent;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 16px;
	padding: 8px 0;
	color: var(--wp--preset--color--text);
}

.wow-header__search-input:focus {
	outline: none;
	border-bottom-color: var(--wp--preset--color--accent);
}

/* ── Custom mini-cart (icon + badge + full-height slide-in drawer) ────────
   Replaces the WooCommerce Mini Cart block — see wow_render_mini_cart_panel()
   and [wow_mini_cart] in functions.php for why (its Interactivity API cart
   state turned out to be locked against any external AJAX-add-to-cart
   refresh, on this WooCommerce version). Same overlay + right-side drawer
   pattern as .wow-edition-drawer, just its own namespace/sizing (500px,
   white). The toggle button + badge stay inline in .wow-header__actions;
   the overlay/drawer themselves are position:fixed so their placement in the
   DOM (still inside the header markup) doesn't matter. */
.wow-mini-cart {
	position: relative;
	display: flex;
	align-items: center;
}

.wow-mini-cart__toggle {
	position: relative;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	background: none;
	border: none;
	padding: 0;
	cursor: pointer;
	color: #fff;
	line-height: 0;
}

.wow-mini-cart__toggle:hover,
.wow-mini-cart__toggle:focus-visible {
	color: var(--wp--preset--color--accent);
}

.wow-mini-cart__badge {
	position: absolute;
	top: -6px;
	right: -8px;
	display: flex;
	align-items: center;
	justify-content: center;
	min-width: 16px;
	height: 16px;
	padding: 0 4px;
	border-radius: 999px;
	background-color: var(--wp--preset--color--accent);
	color: #fff;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 10px;
	font-weight: 700;
	line-height: 1;
}

.wow-mini-cart__badge[hidden] {
	display: none;
}

.wow-mini-cart__overlay {
	position: fixed;
	inset: 0;
	background: rgba(10, 10, 10, 0.5);
	z-index: 9990;
	opacity: 0;
	visibility: hidden;
	transition: opacity 0.3s ease, visibility 0.3s ease;
}

.wow-mini-cart__overlay.is-open {
	opacity: 1;
	visibility: visible;
}

.wow-mini-cart__drawer {
	position: fixed;
	top: 0;
	right: 0;
	bottom: 0;
	width: 500px;
	max-width: 95vw;
	height: 100vh;
	/* 100dvh (dynamic viewport height) as a progressive-enhancement override
	   — plain 100vh on iOS Safari measures the LARGEST possible viewport
	   (browser chrome hidden), so when the bottom toolbar is actually
	   showing, the drawer's real bottom edge sits underneath it, along with
	   the Cart/Checkout buttons pinned there — visible but untappable, since
	   the toolbar is what actually receives the tap. 100dvh tracks the
	   toolbar's current state instead. Ignored by browsers that don't
	   support dvh, which just keep the 100vh line above. */
	height: 100dvh;
	background-color: #fff;
	color: var(--wp--preset--color--text);
	z-index: 9999;
	display: flex;
	flex-direction: column;
	transform: translateX(100%);
	transition: transform 0.35s cubic-bezier(0.4, 0, 0.2, 1);
}

.wow-mini-cart__drawer.is-open {
	transform: translateX(0);
}

/* .wow-header__actions, .wow-header__actions * (further up this file) force
   white text on every descendant of the header bar — and the drawer, while
   visually a fixed full-screen white panel, is still a DOM descendant of
   .wow-header__actions, so any text in here that rule reaches goes
   invisible (white on white). This blanket reset — at higher specificity
   than that rule, and declared before every other .wow-mini-cart__drawer
   rule below — guarantees dark text as the default for anything in the
   drawer, current or future. Elements that legitimately need to stay white
   (.wow-mini-cart__btn's Cart/Checkout labels, the close button's hover
   state) declare their own .wow-mini-cart__drawer-prefixed override further
   down, which wins the tie simply by coming later in the file. */
.wow-header__actions .wow-mini-cart__drawer,
.wow-header__actions .wow-mini-cart__drawer * {
	color: var(--wp--preset--color--text);
}

/* .wow-header__actions, .wow-header__actions * (further up this file) forces
   white text on everything in the black header bar — and the drawer, while
   visually a fixed full-screen panel, is still a DOM descendant of
   .wow-header__actions, so it gets caught by that rule too. Everything below
   re-scopes color with .wow-mini-cart__drawer prefixed in, which is more
   specific than both that universal selector and `.wow-header a` (the item
   title is a link), guaranteeing dark text on the drawer's white background
   regardless of where this block sits in the file. */
.wow-mini-cart__drawer-head {
	flex-shrink: 0;
	display: flex;
	align-items: center;
	justify-content: space-between;
	padding: 28px 32px;
	border-bottom: 1px solid #eee;
}

.wow-mini-cart__drawer .wow-mini-cart__drawer-title {
	margin: 0;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 18px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 1px;
	color: var(--wp--preset--color--text);
}

.wow-mini-cart__drawer .wow-mini-cart__close {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 32px;
	height: 32px;
	border: none;
	border-radius: 50%;
	background-color: #f5f2ee;
	color: #7a756f;
	cursor: pointer;
	transition: background-color 0.2s ease, color 0.2s ease;
}

.wow-mini-cart__drawer .wow-mini-cart__close:hover,
.wow-mini-cart__drawer .wow-mini-cart__close:focus-visible {
	background-color: #000;
	color: #fff;
}

/* Fills the rest of the drawer's height; the item list scrolls while the
   footer (subtotal + Cart/Checkout) stays pinned at the bottom. Both the
   scroll area and the footer are re-rendered together as one chunk of HTML
   (see wow_render_mini_cart_panel()), so they never fall out of sync. */
.wow-mini-cart__body {
	flex: 1;
	min-height: 0;
	display: flex;
	flex-direction: column;
}

.wow-mini-cart__items-wrap {
	flex: 1;
	overflow-y: auto;
	padding: 28px 32px;
}

.wow-mini-cart__empty {
	flex: 1;
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	text-align: center;
	padding: 24px 32px;
}

.wow-mini-cart__empty p {
	margin: 0 0 14px;
	font-size: 14px;
	color: var(--wp--preset--color--grey);
}

.wow-mini-cart__drawer .wow-mini-cart__shop-link {
	display: inline-flex;
	align-items: center;
	border: 1px solid #e2e2e2;
	border-radius: 999px;
	padding: 10px 22px;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 12px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.5px;
	color: var(--wp--preset--color--text);
	text-decoration: none;
	transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease;
}

.wow-mini-cart__shop-link:hover,
.wow-mini-cart__shop-link:focus-visible {
	background-color: #000;
	border-color: #000;
	color: #fff;
}

.wow-mini-cart__items {
	display: flex;
	flex-direction: column;
	gap: 24px;
}

.wow-mini-cart__item {
	display: flex;
	gap: 16px;
}

.wow-mini-cart__item-image {
	flex-shrink: 0;
	width: 80px;
	height: 80px;
	display: flex;
	align-items: center;
	justify-content: center;
	background-color: #fafafa;
	border-radius: 8px;
	overflow: hidden;
}

.wow-mini-cart__item-image img {
	max-width: 100%;
	max-height: 100%;
	object-fit: contain;
}

.wow-mini-cart__item-body {
	flex: 1;
	min-width: 0;
}

.wow-mini-cart__drawer .wow-mini-cart__item-title {
	display: block;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 14px;
	font-weight: 700;
	text-transform: uppercase;
	color: #000;
	text-decoration: none;
	margin-bottom: 6px;
}

.wow-mini-cart__drawer .wow-mini-cart__item-title:hover {
	color: var(--wp--preset--color--accent);
}

.wow-mini-cart__drawer .wow-mini-cart__item-meta {
	margin: 0 0 3px;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 12px;
	font-weight: 300;
	color: var(--wp--preset--color--grey);
}

.wow-mini-cart__drawer .wow-mini-cart__item-meta-label {
	font-weight: 700;
	color: var(--wp--preset--color--text);
}

.wow-mini-cart__item-row {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 8px;
	margin-top: 8px;
}

.wow-mini-cart__drawer .wow-mini-cart__item-price {
	font-size: 14px;
	font-weight: 700;
	color: var(--wp--preset--color--text);
}

.wow-mini-cart__drawer .wow-mini-cart__item-qty {
	font-weight: 300;
	color: var(--wp--preset--color--grey);
}

.wow-mini-cart__drawer .wow-mini-cart__item-remove {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 26px;
	height: 26px;
	border: none;
	border-radius: 50%;
	background: none;
	color: var(--wp--preset--color--grey);
	cursor: pointer;
	transition: background-color 0.2s ease, color 0.2s ease;
}

.wow-mini-cart__drawer .wow-mini-cart__item-remove:hover,
.wow-mini-cart__drawer .wow-mini-cart__item-remove:focus-visible {
	background-color: #fafafa;
	color: var(--wp--preset--color--accent);
}

.wow-mini-cart__footer {
	flex-shrink: 0;
	padding: 20px 32px 32px;
	border-top: 1px solid #eee;
	background: #fafafa;
}

.wow-mini-cart__drawer .wow-mini-cart__subtotal {
	display: flex;
	align-items: center;
	justify-content: space-between;
	margin-bottom: 16px;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 14px;
	text-transform: uppercase;
	letter-spacing: 0.5px;
	color: var(--wp--preset--color--text);
}

.wow-mini-cart__subtotal strong {
	font-size: 16px;
}

/* Delivery + Total, between Subtotal and the Cart/Checkout buttons — see
   wow_render_mini_cart_panel() in functions.php. Prefixed with
   .wow-mini-cart__drawer for the same reason as .wow-mini-cart__subtotal
   above: it's a descendant of .wow-header__actions (white-text-forcing
   rule), so anything in here needs the extra specificity to stay dark. */
.wow-mini-cart__drawer .wow-mini-cart__delivery {
	display: flex;
	align-items: center;
	justify-content: space-between;
	margin-bottom: 10px;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 12.5px;
	text-transform: uppercase;
	letter-spacing: 0.4px;
	color: var(--wp--preset--color--grey);
}

.wow-mini-cart__drawer .wow-mini-cart__total {
	display: flex;
	align-items: center;
	justify-content: space-between;
	margin-bottom: 16px;
	padding-top: 10px;
	border-top: 1px solid #f0ece7;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 14px;
	text-transform: uppercase;
	letter-spacing: 0.4px;
	color: var(--wp--preset--color--text);
}

.wow-mini-cart__delivery strong,
.wow-mini-cart__total strong {
	color: var(--wp--preset--color--text);
}

.wow-mini-cart__total strong {
	font-size: 16px;
}

/* Inline "haven't calculated shipping yet?" fallback, shown instead of the
   Delivery row when no region is known yet (see $region in
   wow_render_mini_cart_panel()). */
.wow-mini-cart__drawer .wow-mini-cart__delivery--unset {
	display: block;
	margin-bottom: 16px;
}

.wow-mini-cart__delivery--unset label {
	display: block;
	font-size: 11px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.4px;
	color: var(--wp--preset--color--grey);
	margin-bottom: 8px;
}

.wow-mini-cart__drawer .wow-mini-cart__delivery--unset select {
	appearance: none;
	-webkit-appearance: none;
	-moz-appearance: none;
	width: 100%;
	box-sizing: border-box;
	background-color: #faf8f5;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%23585450' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: right 14px center;
	border: 1px solid #e4e0da;
	border-radius: 8px;
	color: var(--wp--preset--color--text);
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 12.5px;
	font-weight: 700;
	padding: 10px 32px 10px 12px;
	cursor: pointer;
	transition: border-color 0.2s ease;
}

.wow-mini-cart__delivery--unset select:hover,
.wow-mini-cart__delivery--unset select:focus-visible {
	border-color: #a8a39d;
}

/* Small "Shipping to: X · Change region" line under the Delivery row, once
   a region is set (see the else branch of wow_render_mini_cart_panel() in
   functions.php) — the only way left to switch regions after the initial
   picker disappears. */
.wow-mini-cart__drawer .wow-mini-cart__region-current {
	margin-bottom: 16px;
}

/* "Delivery to" — same small uppercase caption style as the other footer
   labels (Subtotal/Delivery), just lighter weight than the region name
   below it so the two read as label + value rather than two headings. */
.wow-mini-cart__region-label {
	display: block;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 11px;
	font-weight: 300;
	text-transform: uppercase;
	letter-spacing: 0.5px;
	color: var(--wp--preset--color--grey);
	margin-bottom: 4px;
}

.wow-mini-cart__region-name {
	display: block;
	font-size: 12px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.4px;
	color: var(--wp--preset--color--text);
	margin-bottom: 6px;
}

.wow-mini-cart__region-change {
	margin-top: 4px;
}

.wow-mini-cart__region-change summary {
	display: inline-block;
	font-size: 11px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.3px;
	text-decoration: underline;
	color: var(--wp--preset--color--accent);
	cursor: pointer;
	list-style: none;
}

.wow-mini-cart__region-change summary::-webkit-details-marker {
	display: none;
}

.wow-mini-cart__region-change summary:hover,
.wow-mini-cart__region-change summary:focus-visible {
	color: var(--wp--preset--color--text);
}

.wow-mini-cart__drawer .wow-mini-cart__region-change select {
	appearance: none;
	-webkit-appearance: none;
	-moz-appearance: none;
	width: 100%;
	box-sizing: border-box;
	background-color: #faf8f5;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%23585450' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: right 14px center;
	border: 1px solid #e4e0da;
	border-radius: 8px;
	color: var(--wp--preset--color--text);
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 12.5px;
	font-weight: 700;
	padding: 10px 32px 10px 12px;
	margin-top: 8px;
	cursor: pointer;
	transition: border-color 0.2s ease;
}

.wow-mini-cart__region-change select:hover,
.wow-mini-cart__region-change select:focus-visible {
	border-color: #a8a39d;
}

.wow-mini-cart__actions {
	display: flex;
	gap: 12px;
}

.wow-mini-cart__drawer .wow-mini-cart__btn {
	display: flex;
	align-items: center;
	justify-content: center;
	flex: 1;
	padding: 14px;
	border: none;
	border-radius: 4px;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 12px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.5px;
	text-decoration: none;
	color: #fff;
	transition: opacity 0.2s ease;
}

.wow-mini-cart__drawer .wow-mini-cart__btn:hover,
.wow-mini-cart__drawer .wow-mini-cart__btn:focus-visible {
	color: #fff;
	opacity: 0.85;
}

.wow-mini-cart__btn--cart {
	background-color: var(--wp--preset--color--accent);
}

.wow-mini-cart__btn--checkout {
	background-color: #000;
}

@media (max-width: 700px) {
	.wow-mini-cart__drawer {
		width: 100%;
		max-width: 100vw;
	}

	/* Extra bottom padding so the Cart/Checkout buttons clear the home
	   indicator / bottom toolbar area on notched iPhones — env() falls back
	   to 0 on devices/browsers without a safe area, so the plain 20px still
	   applies there; on ones that do, it stacks on top of it. */
	.wow-mini-cart__footer {
		padding-bottom: calc(20px + env(safe-area-inset-bottom, 0px));
	}
}

/* Mobile header — still the same solid black bar as desktop (just the
   topbar/pill logo dropped), always in normal flow (no floating pill, no
   fixed/absolute positioning, on hero pages or anywhere else). Laid out as
   5 explicit columns — burger | search | logo (flexible, centered) |
   wishlist | cart — instead of the 3 columns desktop uses, so each icon can
   sit in the exact slot the mockup calls for regardless of where it lives in
   the DOM (search/account/wishlist are nested inside .wow-header__icons,
   the toggle and mini-cart are nested inside .wow-header__actions — see the
   display: contents rules below that "unwrap" those wrapper divs so their
   children become direct grid items here). White icons/text throughout
   already come from the sitewide ".wow-header, .wow-header a,
   .wow-header__actions, .wow-header__actions * { color: #fff }" rule
   further up this file — nothing to override here for that. */
@media (max-width: 900px) {
	.wow-header {
		grid-template-columns: auto auto 1fr auto auto;
		column-gap: 14px;
		row-gap: 0;
		align-items: center;
		padding: 24px 18px;
		transition: padding-top 0.25s ease, padding-bottom 0.25s ease;
	}

	/* Sticky lives on the template-part wrapper WordPress generates around
	   the header (<header class="wp-block-template-part">, the actual
	   parent of .wow-header), not on .wow-header itself. Sticky positioning
	   only has room to work within the bounds of its containing block
	   (ordinarily just its parent) — and on mobile, that wrapper's only
	   visible child *is* .wow-header (its topbar sibling is display: none
	   here), so the wrapper shrink-wraps to exactly .wow-header's own
	   height. With zero extra height to scroll through, the sticky trigger
	   and the "past the containing block" un-stick condition land on
	   virtually the same pixel — it un-sticks almost the instant you
	   scroll, even though it looks fine at rest. Promoting the wrapper
	   itself to position: sticky instead gives it ".wp-site-blocks" (the
	   whole page) as its own containing block, which is obviously far
	   taller than the header — plenty of room to actually stay stuck. */
	header.wp-block-template-part {
		position: sticky;
		top: 0;
		z-index: 500;
	}

	/* Compact once scrolled (same .is-scrolled toggle as the tagline
	   fade/collapse below) — a taller 24px breathing room at rest, tighter
	   10px once stuck to the top of the screen. */
	.wow-header.is-scrolled {
		padding-top: 10px;
		padding-bottom: 10px;
	}

	/* transform: scale() instead of animating max-width — max-width is a
	   layout property, so animating it forces the browser to recompute
	   layout (and repaint) on every frame, fighting with the padding/
	   tagline transitions running at the same time and reading as stutter
	   rather than a smooth resize. transform is compositor-only (no
	   layout/paint), so it stays smooth regardless of what else is
	   animating alongside it. 0.846 = 110 ÷ 130 (the scrolled vs. resting
	   max-width below), scaled from the top so it shrinks toward the
	   logo's own top edge instead of visibly drifting downward as it
	   scales from center. */
	.wow-header__logo-img {
		transform-origin: top center;
		transition: transform 0.25s ease;
	}

	.wow-header.is-scrolled .wow-header__logo-img {
		transform: scale(0.846);
	}

	/* WordPress's own admin bar is position:fixed at the real top:0 of the
	   viewport with a z-index far above anything on the page (only visible
	   to logged-in users, via body.admin-bar) — without offsetting for it,
	   the sticky header (top: 0 above) slides up underneath it the moment
	   it engages, and gets visually hidden behind its opaque background:
	   looks exactly like the header "disappearing" on scroll rather than
	   sticking. 46px matches the admin bar's own mobile height (its 32px
	   desktop height only applies above WP's 783px breakpoint, which is
	   already wider than this 900px block, but comfortably outside where
	   this mobile header layout is in play anyway). */
	body.admin-bar header.wp-block-template-part {
		top: 46px;
	}

	/* Tagline fades/collapses out once scrolled (see .wowHeaderScrolled in
	   nav.js, which toggles this class at scrollY > 4px), and the logo
	   re-centers vertically for free — .wow-header's own align-items: center
	   above already vertically centers each grid item against the row's
	   tallest item; once the tagline's box collapses to 0 height, the
	   logo+tagline column becomes shorter than the icon row next to it, so
	   centering nudges the logo down into the middle on its own, no extra
	   positioning logic needed. */
	.wow-header__tagline {
		max-height: 14px;
		overflow: hidden;
		transition: opacity 0.25s ease, max-height 0.25s ease, margin-top 0.25s ease;
	}

	.wow-header.is-scrolled .wow-header__tagline {
		opacity: 0;
		max-height: 0;
		margin-top: -2px;
	}

	/* Unwrap the two nested wrapper divs so search/account/wishlist and the
	   mini-cart/toggle all become direct grid items of .wow-header, placeable
	   into the 5 columns above independent of their DOM nesting.
	   !important for the same reason as .wow-topbar above — .wow-header__actions
	   is a Group block with layout:flex, so it carries "is-layout-flex" and
	   core's higher-specificity "body .is-layout-flex { display: flex }"
	   would otherwise beat this plain class selector and keep it a real flex
	   box instead of unwrapping, silently breaking every grid-column
	   placement below (nothing to unwrap into). */
	.wow-header__actions,
	.wow-header__icons {
		display: contents !important;
	}

	/* Every item below gets an explicit grid-row: 1 in addition to its
	   grid-column. Without it, .wow-header__logo and .wow-nav both claim
	   column 3 with no row set — grid's auto-placement then treats that as a
	   collision and bumps whichever comes second (source order) down to an
	   auto-generated row 2, and because the row-gap (24px on the base
	   .wow-header rule, meant for desktop) still applies between rows, every
	   item placed after that point cascades onto its own row too, stacking
	   the whole header into 3+ rows instead of one. Pinning row: 1
	   everywhere sidesteps that: .wow-nav has no visible box anyway (its
	   only child is the position:fixed drawer), so overlapping it with the
	   logo in the same cell is harmless. */
	.wow-header__logo,
	.wow-header .wow-nav,
	.wow-nav__toggle,
	.wow-header__icon-link[aria-controls="wowSearchForm"],
	.wow-header__icon-link[aria-label="Wishlist"],
	.wow-mini-cart {
		grid-row: 1;
	}

	.wow-nav__toggle {
		grid-column: 1;
		order: 1;
		margin-left: 0;
		/* Tighter than the shared 14px column-gap — burger and search read
		   as one "menu controls" cluster, not two evenly spaced icons. */
		margin-right: -6px;
	}

	.wow-header__icon-link[aria-controls="wowSearchForm"] {
		grid-column: 2;
		order: 2;
	}

	.wow-header__logo {
		grid-column: 3;
		justify-self: center;
		background-color: transparent;
		padding: 0;
		flex-direction: column;
		align-items: center;
		gap: 2px;
	}

	.wow-header__logo-img {
		max-width: 130px;
	}

	.wow-header__tagline {
		display: block;
		font-family: var(--wp--preset--font-family--josefin);
		font-size: 9px;
		font-weight: 300;
		text-transform: uppercase;
		letter-spacing: 1.2px;
		color: rgba(255, 255, 255, 0.75);
		margin: 0;
		line-height: 10px;
	}

	.wow-header .wow-nav {
		grid-column: 3;
	}

	/* My Account now lives only in the burger flyout (.wow-nav__item--mobile-
	   account) — hide the icon-bar copy so it isn't duplicated on mobile. */
	.wow-header__icon-link--account {
		display: none;
	}

	.wow-header__icon-link[aria-label="Wishlist"] {
		grid-column: 4;
		order: 1;
	}

	.wow-mini-cart {
		grid-column: 5;
		order: 2;
	}
}

/* ── Primary navigation (hand-written HTML, no core Navigation block) ───────── */

.wow-nav__list {
	display: flex;
	align-items: center;
	gap: 28px;
	list-style: none;
	margin: 0;
	padding: 0;
}

.wow-nav__link {
	position: relative;
	display: inline-block;
	padding: 0;
	color: var(--wp--preset--color--text);
	text-decoration: none;
	font-size: 11px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0;
	cursor: pointer;
}

/* Used to have an animated underline-on-hover here (::after, sliding in on
   :hover/:focus-visible) — removed outright rather than patched further.
   Not load-bearing on desktop, and on mobile (Car Brands/The Gallery use
   href="#" so nav.js can preventDefault() and toggle a panel instead of
   navigating) it was the trigger for a WebKit quirk: an <a> with a
   :hover-driven style change plus a click handler calling preventDefault()
   makes iOS Safari treat the first tap as only simulating :hover, and fire
   the real click on a second tap. Adding cursor: pointer (kept above) is
   the usual fix for that but didn't resolve it here, so removing the hover
   effect that triggers the quirk in the first place instead. */

/* "PRO" — a small solid badge rather than a plain text link like its
   siblings, so it reads as its own distinct destination. .wow-header
   .wow-nav__link (further up this file) forces every nav link white with
   two combined classes — more specific than .wow-nav__link--pro alone —
   so the dark text here needs !important to actually win against it. No
   target yet (href="#" in parts/header.html) until that section exists. */
.wow-nav__link--pro {
	background-color: rgb(255, 255, 255);
	padding: 2px 8px;
	border-radius: 2px;
	transition: background-color 0.2s ease;
	color: #444 !important;
	font-size: 10px;
	letter-spacing: 0;
}

.wow-nav__link--pro::after {
	content: none;
}

.wow-nav__link--pro:hover,
.wow-nav__link--pro:focus-visible {
	background-color: rgb(230, 230, 230);
}

.wow-nav__item--has-panel {
	position: relative;
}

/* Collections is a mega menu, not a simple dropdown, and it needs to be
   centered to the whole header/page rather than left-aligned under its own
   link (the default .wow-nav__item--has-panel behavior — fine for the
   Photographers/Car Brands simple dropdowns, but not wide enough here).
   Dropping position:relative here means .wow-nav__mega's absolute
   positioning skips this <li> and resolves against .wow-header instead
   (the next positioned ancestor up, and it spans the full page width) —
   see .wow-nav__mega below for the matching left:50%/translateX(-50%). */
.wow-nav__item--mega {
	position: static;
}

/* Shared panel behavior — left-aligned to its parent link, fades + slides in
   instead of a hard show/hide. Both the mega menu and the simple dropdown
   (.wow-nav__mega / .wow-nav__dropdown) use this as their base. */
.wow-nav__panel {
	position: absolute;
	top: 100%;
	left: 0;
	z-index: 30;
	width: max-content;
	background: var(--wp--preset--color--background);
	box-shadow: 0 20px 45px rgba(0, 0, 0, 0.16);
	border-radius: 6px;
	padding: 20px;
	opacity: 0;
	visibility: hidden;
	transform: translateY(6px);
	transition: opacity 0.2s ease, transform 0.2s ease, visibility 0s linear 0.2s;
	pointer-events: none;
}

.wow-nav__item--has-panel:hover > .wow-nav__panel,
.wow-nav__item--has-panel:focus-within > .wow-nav__panel,
.wow-nav__item--has-panel.is-open > .wow-nav__panel {
	opacity: 1;
	visibility: visible;
	transform: translateY(0);
	transition: opacity 0.25s ease, transform 0.25s ease;
	pointer-events: auto;
}

.wow-nav__mega {
	max-width: 900px;
	left: 50%;
	/* Negative margin (half of max-width) rather than transform:translateX —
	   .wow-nav__panel/its :hover state already animate transform for the
	   fade-in slide (translateY), and transform is a single shorthand value,
	   so a translateX here would get clobbered by that during the open
	   state. Margin avoids the conflict entirely. */
	margin-left: -460px;
	padding: 28px 32px;
}

/* Two-column layout: left = 3 featured collections (image + eyebrow +
   title), right = a plain grouped text link list, divided by a thin
   vertical rule. Left column is deliberately narrow (titles are allowed to
   wrap to 2 lines — see .wow-nav__mega-feature-title) and the right side's
   own link list splits into two sub-columns (see .wow-nav__mega-links-cols)
   so the whole panel reads as one compact block instead of a tall one. */
.wow-nav__mega-cols {
	display: grid;
	grid-template-columns: 0.72fr auto 1.35fr;
	gap: 0 36px;
	align-items: start;
}

/* "Show all collections" disclosure button — mobile-only (see the
   max-width:900px block further down, and .wow-nav__mega-links there for
   the collapsible content it controls). Hidden on desktop, where the full
   link list is always shown. */
.wow-nav__mega-more-toggle {
	display: none;
}

/* Back button + title strip at the top of each mobile drill-down
   sub-screen (Car Brands, The Gallery, More Collections) — desktop never
   drills anywhere, so this stays hidden there; see the max-width:900px
   block for the actual mobile layout. */
.wow-nav__panel-head {
	display: none;
}

/* My Account + language/currency switchers, appended to the end of the nav
   list purely for the mobile flyout (see parts/header.html) — hidden on
   desktop by default, shown in the max-width:900px block further down. */
.wow-nav__item--mobile-account,
.wow-nav__item--mobile-switchers {
	display: none;
}

.wow-nav__mega-divider {
	width: 1px;
	align-self: stretch;
	background: #e4e0da;
}

/* ── Left column — featured collections ─────────────────────────────────── */
.wow-nav__mega-features {
	display: flex;
	flex-direction: column;
	justify-content: flex-start;
	gap: 22px;
}

.wow-nav__mega-feature {
	display: flex;
	align-items: flex-start;
	gap: 16px;
	text-decoration: none;
}

.wow-nav__mega-feature-img {
	flex-shrink: 0;
	width: 68px;
	height: 68px;
	border-radius: 8px;
	background-size: cover;
	background-position: center;
	background-color: var(--wp--preset--color--off-white);
}

.wow-nav__mega-feature-text {
	display: flex;
	flex-direction: column;
	gap: 4px;
	min-width: 0;
}

.wow-nav__mega-feature-eyebrow {
	font-size: 11px;
	text-transform: uppercase;
	letter-spacing: 0.4px;
	color: var(--wp--preset--color--grey);
}

.wow-nav__mega-feature-title {
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 16px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.3px;
	line-height: 1.25;
	color: var(--wp--preset--color--black);
}

/* !important here (and on every other mega-menu hover rule below) is needed
   to beat ".wow-header .wow-nav__panel a { color: text }" — that generic
   reset has higher specificity (two classes + a type selector) than a
   single class like .wow-nav__mega-group-title, so without it these links
   just sat at the plain text color on hover instead of turning red. */
.wow-nav__mega-feature:hover .wow-nav__mega-feature-title {
	color: #b73737 !important;
}

/* ── Right column — grouped text links ───────────────────────────────────────
   Splits into two side-by-side sub-columns (Motorsport + its sublist on the
   left, the standalone collection links on the right) instead of one long
   stacked list, so the panel's overall height stays close to the left
   column's — a single column here made the whole menu much taller than the
   3 features on the left ever needed. */
.wow-nav__mega-links {
	display: flex;
	flex-direction: column;
	gap: 12px;
	min-width: 0;
}

.wow-nav__mega-links-eyebrow {
	font-size: 11px;
	text-transform: uppercase;
	letter-spacing: 0.4px;
	color: var(--wp--preset--color--grey);
	margin-bottom: 2px;
}

.wow-nav__mega-links-cols {
	display: flex;
	gap: 32px;
}

.wow-nav__mega-links-col {
	flex: 1;
	min-width: 0;
	display: flex;
	flex-direction: column;
	gap: 12px;
}

.wow-nav__mega-group-title {
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 13px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.3px;
	color: var(--wp--preset--color--black);
	text-decoration: none;
}

.wow-nav__mega-group-title:hover {
	color: #b73737 !important;
}

.wow-nav__mega-sublist {
	list-style: none;
	margin: 8px 0 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: 7px;
}

.wow-nav__mega-sub {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	font-size: 12px;
	font-weight: 400;
	text-transform: uppercase;
	letter-spacing: 0.2px;
	color: var(--wp--preset--color--text);
	text-decoration: none;
}

.wow-nav__mega-sub::before {
	content: '\2014';
	color: var(--wp--preset--color--grey);
}

.wow-nav__mega-sub:hover {
	color: #b73737 !important;
}

.wow-nav__mega-subsublist {
	list-style: none;
	margin: 5px 0 0 18px;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: 3px;
}

.wow-nav__mega-subsublist a {
	display: inline-block;
	font-size: 12px;
	font-weight: 400;
	line-height: 16px;
	color: var(--wp--preset--color--grey);
	text-decoration: none;
}

.wow-nav__mega-subsublist a:hover {
	color: #b73737 !important;
}

.wow-nav__mega-all,
.wow-nav__mega-all:hover {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	margin-top: 6px;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 13px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.3px;
	color: #b73737 !important;
	text-decoration: none;
}

/* Simple dropdown (e.g. Photographers) — plain link columns, no images/mega grid */
.wow-nav__dropdown {
	max-width: 420px;
	display: flex;
	gap: 32px;
}

.wow-nav__dropdown-heading {
	margin: 0 0 10px;
	font-family: var(--wp--preset--font-family--josefin);
	font-weight: 300;
	font-size: 11px;
	text-transform: uppercase;
	letter-spacing: 1px;
	color: var(--wp--preset--color--grey);
}

.wow-nav__dropdown-list {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: 6px;
}

.wow-nav__dropdown-list a {
	display: flex;
	align-items: center;
	gap: 8px;
	color: var(--wp--preset--color--text);
	text-decoration: none;
	font-size: 11px;
	font-weight: 300;
	text-transform: uppercase;
	letter-spacing: 1px;
	white-space: nowrap;
}

.wow-nav__dropdown-list a:hover,
.wow-nav__dropdown-list a:focus-visible {
	color: var(--wp--preset--color--accent);
}

.wow-nav__dropdown-logo {
	width: 18px;
	height: 18px;
	object-fit: contain;
	flex-shrink: 0;
}

/* Car Brands has far more terms than Photographers/Publishers next to it —
   flowing them into 3 CSS columns instead of one long vertical list keeps
   the dropdown from towering down the page. Scoped to this one panel only
   (by ID) so the Photographers dropdown's shorter, side-by-side columns are
   untouched. */
#wowNavDropdownCarBrands {
	max-width: 640px;
}

#wowNavDropdownCarBrands .wow-nav__dropdown-list {
	display: block;
	column-count: 3;
	column-gap: 32px;
}

#wowNavDropdownCarBrands .wow-nav__dropdown-list li {
	break-inside: avoid;
	margin-bottom: 6px;
}

/* Mobile toggle button — hidden on desktop. Spans are absolutely positioned
   (rather than a simple flex+gap stack) so each one has a fixed rotation
   origin to animate into an X — see the [aria-expanded="true"] rules below,
   which key off the attribute nav.js already sets on click, no extra JS
   needed for the animation itself. */
.wow-nav__toggle {
	display: none;
	position: relative;
	width: 32px;
	height: 32px;
	background: none;
	border: none;
	padding: 0;
	cursor: pointer;
}

.wow-nav__toggle span {
	position: absolute;
	left: 6px;
	right: 6px;
	height: 2px;
	background: var(--wp--preset--color--text);
	border-radius: 1px;
	transition: transform 0.3s ease, opacity 0.2s ease, top 0.3s ease;
}

.wow-nav__toggle span:nth-child(1) {
	top: 11px;
}

.wow-nav__toggle span:nth-child(2) {
	top: 15px;
}

.wow-nav__toggle span:nth-child(3) {
	top: 19px;
}

/* Burger → cross, purely CSS-driven off the aria-expanded state nav.js
   already toggles on click. */
.wow-nav__toggle[aria-expanded="true"] span:nth-child(1) {
	top: 15px;
	transform: rotate(45deg);
}

.wow-nav__toggle[aria-expanded="true"] span:nth-child(2) {
	opacity: 0;
}

.wow-nav__toggle[aria-expanded="true"] span:nth-child(3) {
	top: 15px;
	transform: rotate(-45deg);
}

@media (max-width: 900px) {
	/* ── Off-canvas drawer: #000 @ 90% opacity, slides in from the left,
	   90% of viewport width, sits above literally everything else on the
	   page (z-index 9500 — higher than any section/slider/hero content, just
	   under the mini-cart drawer's 9999 in the unlikely case both are ever
	   open together). Kept permanently in the DOM as a flex column and
	   toggled with transform (not display) so the slide can animate; a
	   hidden element can't transition. The curtain visually covers the rest
	   of the header underneath it too — only the toggle button (elevated to
	   z-index 9600 below) stays visible/clickable on top of it, to close. */
	.wow-nav__list {
		display: flex;
		flex-direction: column;
		align-items: stretch;
		position: fixed;
		top: 0;
		left: 0;
		bottom: 0;
		width: 100vw;
		max-width: 100vw;
		height: 100vh;
		height: 100dvh;
		background: #000;
		z-index: 9500;
		padding: 45px 28px 40px;
		gap: 0;
		overflow-x: hidden;
		overflow-y: auto;
		-webkit-overflow-scrolling: touch;
		transform: translateX(-100%);
		transition: transform 0.35s cubic-bezier(0.4, 0, 0.2, 1);
	}

	.wow-nav__list.is-open {
		transform: translateX(0);
	}

	.wow-nav__toggle {
		display: flex;
		position: relative;
		z-index: 9600;
	}

	/* Every link in the drawer stays white (its background is now always
	   dark, unlike the old light flyout this replaced), full-width with a
	   divider between top-level items and a bigger touch-friendly size. PRO
	   keeps its own compact pill look (:not() exception below) rather than
	   stretching into a full-width row. */
	.wow-header .wow-nav__list .wow-nav__link:not(.wow-nav__link--pro) {
		display: block;
		width: 100%;
		padding: 16px 0;
		font-size: 15px;
		letter-spacing: 0.4px;
		color: #fff;
		border-bottom: 1px solid rgba(255, 255, 255, 0.14);
	}

	.wow-nav__list > .wow-nav__item {
		width: 100%;
	}

	/* Separates the Collections section (link + its always-expanded panel:
	   featured collections, "Show all collections") from Car Brands below it
	   — the "Show all collections" button used to carry this border itself,
	   which read as a line sitting right above it rather than one marking
	   the actual end of the Collections block. Scoped to the item right
	   after Collections specifically (Car Brands), not every top-level item,
	   since each already has its own border-bottom for the divider below it. */
	.wow-nav__item--mega + .wow-nav__item > .wow-nav__link {
		border-top: 1px solid rgba(255, 255, 255, 0.14);
		margin-top: 6px;
		padding-top: 20px;
	}

	.wow-nav__link--pro {
		margin: 10px 0 4px;
	}

	/* Small ">" affordance on Car Brands / The Gallery, the two items that
	   slide in a full sub-screen on tap (see the reference video) — not on
	   Collections, whose content sits inline below it instead (see
	   .wow-nav__item--mega .wow-nav__panel further down). */
	.wow-header .wow-nav__list .wow-nav__item--has-panel:not(.wow-nav__item--mega) > .wow-nav__link--toggle::before {
		content: '\203A';
		position: absolute;
		right: 4px;
		top: 50%;
		transform: translateY(-50%);
		font-size: 20px;
		line-height: 1;
		color: rgba(255, 255, 255, 0.45);
	}

	/* Base state for every panel: sits in normal flow, closed/hidden. Car
	   Brands and Gallery get overridden further down into full-bleed sliding
	   screens instead (by #id, so it wins outright over this class rule) —
	   this generic version now really only matters for anything that isn't
	   one of those two special-cased panels. */
	.wow-nav__panel {
		display: none;
		position: static;
		width: auto;
		max-width: none;
		background: transparent;
		transform: none;
		box-shadow: none;
		padding: 12px 0 4px;
	}

	/* Collections is the exception: its panel (3 featured collections + the
	   "Show all collections" button) is always expanded on mobile, not
	   click-to-reveal like Car Brands/Gallery — nav.js also skips toggling
	   .is-open for this item on mobile now, but this rule is what actually
	   keeps it visible regardless of that class. (0,2,0) beats the plain
	   ".wow-nav__panel { display: none }" above regardless of source order.
	   Also needs opacity/visibility/pointer-events explicitly reset: the base
	   .wow-nav__panel rule (further up, for the desktop fade animation)
	   starts those at 0/hidden/none and only flips them back on :hover,
	   :focus-within or .is-open — none of which this panel ever gets on
	   mobile (nav.js intentionally skips toggling .is-open for Collections
	   there), so without this it stayed invisible and untappable even
	   though display:block reserved its layout space. That invisibility
	   cascades to #wowNavMegaMoreLinks too (an opacity:0 ancestor makes its
	   whole subtree render at 0 regardless of the descendant's own opacity),
	   which is why "Show all collections" appeared to do nothing. */
	.wow-nav__item--mega .wow-nav__panel {
		display: block;
		opacity: 1;
		visibility: visible;
		pointer-events: auto;
	}

	/* .wow-nav__item--has-panel is position:relative on desktop (needed so
	   its own dropdown can anchor under it there) — on mobile none of that
	   applies any more (Car Brands/Gallery are now full-bleed screens
	   positioned against .wow-nav__list itself, several levels up), so reset
	   it back to static. Otherwise it would become the nearest positioned
	   ancestor instead of the drawer, and the sliding panels below would size
	   themselves against this narrow <li> rather than covering the drawer. */
	.wow-nav__item--has-panel {
		position: static;
	}

	/* ── Drill-down sub-screens: Car Brands, The Gallery, and "More
	   Collections" (inside Collections) each become a full-bleed screen that
	   slides in from the right over the main list — see the reference video
	   — instead of expanding an accordion below their trigger link. #id
	   selectors so they cleanly win over the generic rules above regardless
	   of source order. Kept permanently display:block (a display:none
	   element can't animate) and hidden off-screen via transform instead.

	   position:fixed rather than absolute is the important part here:
	   #wowNavMegaMoreLinks sits 3 DOM levels deep inside the always-visible
	   Collections panel (li > #wowNavMegaCollections > .wow-nav__mega-cols >
	   itself), and with position:absolute it was rendering clipped to one of
	   those intermediate boxes instead of covering the full drawer — exactly
	   what "still showing inside the Collection div" describes. Since
	   .wow-nav__list (the drawer) has its own `transform` for its slide
	   animation, it becomes the containing block for any position:fixed
	   descendant instead of the true viewport (a standard CSS rule) — and
	   critically, position:fixed escapes every intermediate ancestor's
	   overflow/clipping on the way there, however many levels deep, so this
	   works the same for all three panels regardless of nesting depth. */
	#wowNavDropdownCarBrands,
	#wowNavDropdownGallery,
	#wowNavMegaMoreLinks {
		display: block;
		position: fixed;
		inset: 0;
		z-index: 20;
		width: auto;
		max-width: none;
		background: rgba(0, 0, 0, 0.97);
		padding: 96px 28px 40px;
		margin: 0;
		overflow-y: auto;
		-webkit-overflow-scrolling: touch;
		transform: translateX(100%);
		transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
	}

	.wow-nav__item--has-panel.is-open > #wowNavDropdownCarBrands,
	.wow-nav__item--has-panel.is-open > #wowNavDropdownGallery,
	#wowNavMegaMoreLinks.is-expanded {
		transform: translateX(0);
	}

	/* Back button + title strip at the top of each sliding sub-screen —
	   desktop never shows these (base rule further up is display:none),
	   this is the only place they're switched on. */
	.wow-nav__panel-head {
		display: flex;
		align-items: center;
		margin-bottom: 20px;
		padding-bottom: 14px;
		border-bottom: 1px solid rgba(255, 255, 255, 0.14);
	}

	/* The arrow used to be the only clickable part, with the section title
	   sitting next to it as plain static text — now the title is inside the
	   button too, so the whole "< Car Brands" affordance is tappable, not
	   just the small icon. */
	.wow-nav__panel-back {
		display: inline-flex;
		align-items: center;
		gap: 10px;
		background: none;
		border: none;
		padding: 0;
		color: #fff;
		cursor: pointer;
	}

	.wow-nav__panel-back svg {
		flex-shrink: 0;
	}

	.wow-nav__panel-title {
		font-family: var(--wp--preset--font-family--josefin);
		font-size: 13px;
		font-weight: 700;
		text-transform: uppercase;
		letter-spacing: 0.5px;
		color: #fff;
	}

	/* The panel-head's title already says "More Collections" — the eyebrow
	   further down inside .wow-nav__mega-links said the same thing, only
	   relevant when this was an inline accordion (still is, on desktop). */
	#wowNavMegaMoreLinks > .wow-nav__mega-links-eyebrow {
		display: none;
	}

	/* Panel/link text throughout the drawer: reset back to white, overriding
	   the desktop assumption (baked in further up this file) that mega/
	   dropdown panels sit on a light background. Grouped here rather than
	   scattered per-component so the "drawer = dark, therefore text = light"
	   rule reads as one decision. */
	.wow-header .wow-nav__list .wow-nav__panel,
	.wow-header .wow-nav__list .wow-nav__panel a,
	.wow-nav__dropdown-list a,
	.wow-nav__mega-feature-title,
	.wow-nav__mega-group-title,
	.wow-nav__mega-sub {
		color: #fff;
	}

	.wow-header .wow-nav__list .wow-nav__dropdown-heading,
	.wow-nav__mega-feature-eyebrow,
	.wow-nav__mega-links-eyebrow,
	.wow-nav__mega-sub::before,
	.wow-nav__mega-subsublist a {
		color: rgba(255, 255, 255, 0.55);
	}

	/* ── Car Brands / Gallery simple dropdowns — bigger text, more room
	   between rows than the desktop version needs, single column. */
	.wow-nav__dropdown {
		flex-direction: column;
		gap: 16px;
	}

	.wow-nav__dropdown-list {
		gap: 12px;
	}

	.wow-nav__dropdown-list a {
		font-size: 14px;
	}

	#wowNavDropdownCarBrands .wow-nav__dropdown-list {
		column-count: 1;
	}

	/* .wow-nav__mega's desktop centering trick (left:50% + margin-left:-460px,
	   used to center the 900px-wide panel under the whole header) was never
	   reset for mobile — position:static doesn't cancel a margin, so that
	   -460px was still dragging the entire Collections panel way off to the
	   left. Reset both back to auto/0 here. */
	.wow-nav__mega {
		left: auto;
		margin-left: 0;
	}

	/* ── Collections — the desktop's image grid + 2-column layout collapses
	   into one stacked column: the 3 featured collections (with photos)
	   stay visible up front, and everything else (the grouped "More
	   Collections" links) is tucked behind the "Show all collections"
	   button/disclosure instead of dumping a long flat list on-screen at
	   once. */
	.wow-nav__mega-cols {
		display: flex;
		flex-direction: column;
		gap: 22px;
	}

	.wow-nav__mega-divider {
		display: none;
	}

	.wow-nav__mega-more-toggle {
		display: flex;
		align-items: center;
		justify-content: space-between;
		width: 100%;
		background: none;
		border: none;
		padding: 14px 0;
		color: #fff;
		font-family: var(--wp--preset--font-family--josefin);
		font-size: 12px;
		font-weight: 700;
		text-transform: uppercase;
		letter-spacing: 0.5px;
		cursor: pointer;
	}

	.wow-nav__mega-more-toggle span {
		background-color: #b73737;
		padding: 5px 10px 2px 10px;
		border-radius: 5px;
	}

	/* ">" affordance, same as Car Brands/Gallery above — no more +/- swap now
	   that this drills to a full sub-screen instead of expanding in place. */
	.wow-nav__mega-more-toggle::after {
		content: '\203A';
		font-size: 18px;
		line-height: 1;
	}

	.wow-nav__mega-links-cols {
		flex-direction: column;
		gap: 20px;
	}

	.wow-nav__mega-group-title {
		font-size: 14px;
	}

	.wow-nav__mega-sublist {
		gap: 10px;
	}

	.wow-nav__mega-sub {
		font-size: 13px;
	}

	.wow-nav__mega-subsublist {
		gap: 8px;
	}

	.wow-nav__mega-subsublist a {
		font-size: 13px;
		line-height: 18px;
	}

	/* My Account + language/currency switchers — hidden on desktop (see the
	   base rule further up), shown here as the last two rows of the drawer,
	   white text like everything else in it now. */
	.wow-nav__item--mobile-account,
	.wow-nav__item--mobile-switchers {
		display: block;
		border-top: 1px solid rgba(255, 255, 255, 0.14);
		margin-top: 8px;
		padding-top: 16px;
	}

	.wow-nav__mobile-account-link {
		display: flex;
		align-items: center;
		gap: 10px;
		color: #fff;
		font-size: 14px;
		font-weight: 700;
		text-transform: uppercase;
		letter-spacing: 0.3px;
		text-decoration: none;
	}

	.wow-nav__mobile-account-link:hover {
		color: #b73737;
	}

	.wow-nav__mobile-switchers {
		display: flex;
		flex-wrap: wrap;
		align-items: center;
		gap: 20px;
	}

	.wow-nav__mobile-switchers,
	.wow-nav__mobile-switchers a,
	.wow-nav__mobile-switchers select {
		color: #fff;
	}

	.wow-nav__mobile-switchers ul {
		display: flex;
		align-items: center;
		gap: 12px;
		list-style: none;
		margin: 0;
		padding: 0;
	}

	/* Same look as the topbar's own copy of these switchers (Josefin,
	   uppercase, small caps arrow) — lost entirely when this was first moved
	   into the drawer since only .color was carried over. */
	.wow-nav__mobile-switchers a {
		text-decoration: none;
		font-size: 13px;
		font-weight: 300;
		text-transform: uppercase;
		letter-spacing: 1px;
	}

	.wow-nav__mobile-switchers a:hover,
	.wow-nav__mobile-switchers a:focus-visible {
		color: #b73737;
	}

	.wow-nav__mobile-switchers select {
		appearance: none;
		-webkit-appearance: none;
		-moz-appearance: none;
		background-color: transparent;
		background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='white' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
		background-repeat: no-repeat;
		background-position: right center;
		border: none;
		font-family: var(--wp--preset--font-family--josefin);
		font-size: 13px;
		font-weight: 300;
		text-transform: uppercase;
		letter-spacing: 1px;
		padding: 4px 18px 4px 0;
		cursor: pointer;
	}

	.wow-nav__mobile-switchers select option {
		background-color: #000;
		color: #fff;
		font-family: var(--wp--preset--font-family--josefin);
	}

	.wow-nav__mobile-switchers p:empty {
		display: none;
	}
}

/* ── Footer: newsletter/community banner + link columns + bottom bar ────────── */

.wow-footer {
	background-color: #fafafa;
	padding-top: 50px;
}

/* Newsletter — footer.html (shared by every page) always renders this
   compact single-row version: title left, form right, no photo grid. On the
   front page specifically it's hidden via PHP (see the is_front_page()
   wp_head hook in functions.php — deliberately not a body class, since an
   earlier `body.home` attempt here proved unreliable across Reading
   Settings/install configurations), because templates/front-page.html
   already hard-codes the richer version with the photo grid right above
   this same shared footer (class .wow-newsletter-full below) — without
   the PHP hide, the homepage would show both back to back. */
.wow-newsletter {
	max-width: 1270px;
	margin: 0 auto;
	padding: 32px 40px;
	background-color: var(--wp--preset--color--accent);
	border-radius: 16px;
	display: flex;
	align-items: center;
	justify-content: space-between;
	flex-wrap: wrap;
	gap: 24px;
}

.wow-newsletter__title {
	color: #fff;
	text-transform: none;
	font-size: clamp(16px, 1.6vw, 19px);
	max-width: 460px;
	margin: 0;
}

.wow-newsletter__form {
	display: flex;
	align-items: center;
	gap: 12px;
	margin: 0;
	flex: 1 1 460px;
	max-width: 460px;
}

.wow-newsletter__input {
	flex: 1;
	min-width: 0;
	border: none;
	border-radius: 999px;
	padding: 14px 20px;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 14px;
	color: var(--wp--preset--color--text);
}

.wow-newsletter__input:focus {
	outline: 2px solid #fff;
	outline-offset: 2px;
}

.wow-newsletter__submit {
	background-color: #000;
	color: #fff;
	border: none;
	border-radius: 999px;
	padding: 14px 28px;
	font-family: var(--wp--preset--font-family--josefin);
	font-weight: 700;
	font-size: 13px;
	text-transform: uppercase;
	letter-spacing: 0.5px;
	cursor: pointer;
	transition: background-color 0.2s ease;
}

.wow-newsletter__submit:hover,
.wow-newsletter__submit:focus-visible {
	background-color: var(--wp--preset--color--walnut);
}

/* Full version — homepage only, hard-coded into templates/front-page.html.
   Same visual language as the compact version above, but stacked title +
   form + note + social on the left, photo grid on the right. */
.wow-newsletter-full {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 40px;
	align-items: center;
	max-width: 1270px;
	margin: 0 auto;
	padding: 64px 32px;
	background-color: var(--wp--preset--color--accent);
	border-radius: 16px;
}

.wow-newsletter-full__title {
	color: #fff;
	text-transform: none;
	font-size: clamp(18px, 2vw, 22px);
	max-width: 480px;
	margin: 0 0 28px;
}

.wow-newsletter-full__form {
	display: flex;
	gap: 12px;
	margin-bottom: 12px;
}

.wow-newsletter-full__input {
	flex: 1;
	max-width: 320px;
	border: none;
	border-radius: 999px;
	padding: 14px 20px;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 14px;
	color: var(--wp--preset--color--text);
}

.wow-newsletter-full__input:focus {
	outline: 2px solid #fff;
	outline-offset: 2px;
}

.wow-newsletter-full__submit {
	background-color: #000;
	color: #fff;
	border: none;
	border-radius: 999px;
	padding: 14px 28px;
	font-family: var(--wp--preset--font-family--josefin);
	font-weight: 700;
	font-size: 13px;
	text-transform: uppercase;
	letter-spacing: 0.5px;
	cursor: pointer;
	transition: background-color 0.2s ease;
}

.wow-newsletter-full__submit:hover,
.wow-newsletter-full__submit:focus-visible {
	background-color: var(--wp--preset--color--walnut);
}

.wow-newsletter-full__note {
	color: rgba(255, 255, 255, 0.8);
	font-size: 12px;
	margin: 0 0 20px;
}

.wow-newsletter-full__note a {
	color: #fff;
	font-weight: 700;
}

.wow-newsletter-full__social {
	display: flex;
	gap: 12px;
}

.wow-newsletter-full__social-link {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 34px;
	height: 34px;
	border-radius: 50%;
	background-color: rgba(255, 255, 255, 0.2);
	color: #fff;
	transition: background-color 0.2s ease;
}

.wow-newsletter-full__social-link:hover,
.wow-newsletter-full__social-link:focus-visible {
	background-color: #fff;
	color: var(--wp--preset--color--accent);
}

.wow-newsletter-full__grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 10px;
}

.wow-newsletter-full__grid-item {
	aspect-ratio: 1 / 1;
	background-size: cover;
	background-position: center;
	background-color: rgba(255, 255, 255, 0.15);
}

.wow-footer-links {
	display: flex;
	flex-wrap: wrap;
	gap: 48px;
	max-width: 1270px;
	margin: 0 auto;
	padding: 56px 32px 40px;
	background-color: #fafafa;
}

.wow-footer-links__logo {
	flex: 1 1 200px;
}

.wow-footer-links__logo-img {
	max-width: 160px;
	height: auto;
	/* Logo asset is a solid white SVG; inverting it turns white into black
	   so it reads on this light background. Swap for a dark logo file if
	   you have one — it'll render more precisely than a filter trick. */
	filter: invert(1);
}

.wow-footer-links__tagline {
	margin: 16px 0 0;
	max-width: 280px;
	font-size: 13px;
	line-height: 1.6;
	color: #777;
}

.wow-footer-links__col {
	display: flex;
	flex-direction: column;
	gap: 12px;
}

.wow-footer-links__col a {
	color: var(--wp--preset--color--text);
	text-decoration: none;
	font-size: 13px;
	font-weight: 700;
}

.wow-footer-links__col a:hover,
.wow-footer-links__col a:focus-visible {
	color: var(--wp--preset--color--accent);
}

.wow-footer-bottom {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	max-width: 1270px;
	margin: 0 auto;
	padding: 24px 32px 40px;
	background-color: #fafafa;
	border-top: 1px solid rgba(0, 0, 0, 0.1);
}

.wow-footer-bottom__copy {
	color: var(--wp--preset--color--grey);
	font-size: 12px;
	margin: 0;
}

.wow-footer-bottom__payments {
	display: flex;
	align-items: center;
	gap: 12px;
}

.wow-footer-bottom__payments img {
	height: 22px;
	width: auto;
}

@media (max-width: 780px) {
	.wow-footer {
		padding-top: 32px;
	}

	.wow-newsletter {
		/* The base rule's "margin: 0 auto" only centers when there's leftover
		   width beyond max-width:1270px — on mobile there isn't any, and
		   .wow-footer itself has no horizontal padding of its own, so the red
		   box was sitting flush against the screen edges. Explicit side
		   margin here gives it the same breathing room as the rest of the
		   footer's sections (.wow-footer-links/.wow-footer-bottom already
		   have their own 32px/20px side padding). */
		margin: 0 16px;
		flex-direction: column;
		align-items: stretch;
		padding: 28px 20px;
	}

	.wow-newsletter__form {
		/* The base rule's "flex: 1 1 460px" was meant as a preferred WIDTH
		   (460px, growing along the row) for desktop's side-by-side layout —
		   but .wow-newsletter above just switched to flex-direction:column,
		   so that same flex-basis gets reinterpreted as a preferred HEIGHT
		   instead, and flex-grow:1 then stretched the form to fill the
		   section's leftover vertical space. That's what was ballooning the
		   input into a giant pill. Reset to a normal, content-sized block. */
		flex: 0 1 auto;
		flex-direction: column;
		align-items: stretch;
		max-width: none;
	}

	.wow-newsletter__input {
		flex: none;
		max-width: none;
	}

	.wow-newsletter-full {
		grid-template-columns: 1fr;
		padding: 48px 20px;
	}

	.wow-newsletter-full__form {
		flex-direction: column;
	}

	.wow-newsletter-full__input {
		max-width: none;
	}

	/* Was still `display:flex; flex-wrap:wrap` (the desktop rule) on mobile —
	   since the "About Us" nav column is narrow enough to fit next to the
	   logo block on the same wrapped row, it was sitting up there instead of
	   grouping with the other two link columns below. Switched to a 3-column
	   grid instead: the logo block explicitly spans all 3 columns (its own
	   full-width row), and the 3 nav columns sit side by side underneath it. */
	.wow-footer-links {
		display: grid;
		grid-template-columns: repeat(3, 1fr);
		padding: 40px 20px 32px;
		gap: 32px 16px;
	}

	.wow-footer-links__logo {
		grid-column: 1 / -1;
	}

	.wow-footer-links__col {
		gap: 10px;
	}

	.wow-footer-links__col a {
		font-size: 12px;
	}

	.wow-footer-bottom {
		padding: 20px 20px 32px;
		justify-content: center;
		text-align: center;
	}
}

/* ── Product archive (category/shop) ─────────────────────────────────────── */

/* Header overlay — on archive pages (shop + category/tag) and single product
   pages, the header floats transparently over the top of the page instead of
   sitting in normal flow above it (on archives that's the hero image; on
   product pages it's .wow-config's own background). `.wow-has-hero` is added
   to <body> server-side in functions.php using the is_shop()/
   is_product_taxonomy()/is_product() checks — so this is never a guess about
   WordPress's own body-class naming or DOM structure (both of which fell
   through here before). Taking the header out of flow means the content
   right after it starts at the very top of the page, with the header
   layered on top via z-index. Desktop only — below 900px the header goes
   back to its plain in-flow white bar sitewide (see the max-width: 900px
   .wow-header rules further up), same as every other page, no floating
   pill/overlay treatment on mobile at all. */
@media (min-width: 901px) {
	/* :not(.single-product) — product pages no longer get the floating pill
	   treatment on desktop; WooCommerce's own default "single-product" body
	   class (unrelated to our own wow-has-hero, added separately above)
	   scopes that exclusion without needing a new class of our own. Shop and
	   category archive pages (the rest of .wow-has-hero) keep floating over
	   their hero image as before. */
	body.wow-has-hero:not(.single-product) .wow-header {
		position: absolute;
		/* 56px of breathing room above the header within the hero, plus the
		   .wow-topbar's own height (~40px: 10px+10px padding + an 11px line) —
		   the topbar sits in normal flow above this absolutely-positioned header,
		   so without adding its height back in, the header would render too high
		   and overlap it instead of floating over the hero image. */
		top: 96px;
		left: 24px;
		right: 24px;
		width: auto;
		max-width: 1270px;
		margin: 0 auto;
		z-index: 20;
		background-color: rgba(0, 0, 0, 0.45);
		border-radius: 100px;
		padding-top: 8px;
		padding-bottom: 8px;
		padding-left: 28px;
		padding-right: 28px;
	}
}

.wow-archive-hero-v2 {
	position: relative;
	display: flex;
	flex-direction: column;
	justify-content: flex-end;
	min-height: clamp(380px, 42vw, 480px);
	overflow: hidden;
	color: #fff;
	background-color: var(--wp--preset--color--black);
}

.wow-archive-hero-v2--no-image {
	min-height: clamp(280px, 26vw, 360px);
}

/* Sized larger than the hero itself so the scroll-parallax transform
   (assets/js/archive-hero-parallax.js) always has headroom to move within
   without ever exposing an edge underneath. */
.wow-archive-hero-v2__bg {
	position: absolute;
	top: -10%;
	left: 0;
	width: 100%;
	height: 130%;
	background-image: var(--wow-hero-bg-desktop);
	background-size: cover;
	background-position: center;
	will-change: transform;
}

@media (max-width: 700px) {
	.wow-archive-hero-v2__bg {
		background-image: var(--wow-hero-bg-mobile, var(--wow-hero-bg-desktop));
	}
}

.wow-archive-hero-v2__overlay {
	position: absolute;
	inset: 0;
	background: linear-gradient(to bottom, rgba(10, 8, 6, 0.55) 0%, rgba(10, 8, 6, 0.35) 40%, rgba(10, 8, 6, 0.75) 100%);
}

.wow-archive-hero-v2__content {
	position: relative;
	z-index: 2;
	max-width: 760px;
	margin: 0 auto;
	padding: 140px 32px 24px;
	text-align: center;
}

.wow-archive-hero-v2__title {
	text-transform: uppercase;
	color: #fff;
	font-size: clamp(28px, 4vw, 36px);
	margin: 0 0 16px;
}

.wow-archive-hero-v2__text {
	font-size: 15px;
	line-height: 1.7;
	color: #fff;
}

.wow-archive-hero-v2__text p {
	margin: 0;
}

/* Homepage hero — vertically + horizontally centered (the archive pages'
   version stays bottom-aligned via the section's own justify-content:
   flex-end, scoped out here so this doesn't affect those), plus a lighter,
   smaller title than the archive default, forced onto exactly two lines
   with a <br> in the markup (templates/front-page.html) rather than relying
   on the viewport to wrap it favorably. */
#wowHomeHero {
	display: flex;
	align-items: center;
	justify-content: center;
}

.wow-archive-hero-v2__content--home {
	padding-top: 24px;
}

.wow-archive-hero-v2__title--home {
	font-weight: 300;
	font-size: clamp(20px, 2.4vw, 26px);
}

/* Same underline + arrow-nudge hover treatment as .wow-related__viewall /
   .wow-edition-info__cta elsewhere in the theme, just in white since this
   one sits directly on the dark hero photo instead of a white card. */
.wow-home-hero__cta {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	margin-top: 20px;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 12px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 1px;
	color: #fff;
	text-decoration: none;
	padding-bottom: 3px;
	border-bottom: 1px solid rgba(255, 255, 255, 0.6);
	transition: color 0.2s ease, border-color 0.2s ease;
}

.wow-home-hero__cta:hover,
.wow-home-hero__cta:focus-visible {
	color: var(--wp--preset--color--accent);
	border-color: var(--wp--preset--color--accent);
}

.wow-home-hero__cta svg {
	transition: transform 0.2s ease;
}

.wow-home-hero__cta:hover svg,
.wow-home-hero__cta:focus-visible svg {
	transform: translateX(2px);
}

.wow-archive-hero-v2__breadcrumb {
	position: relative;
	z-index: 2;
	text-align: center;
	padding: 24px 32px 32px;
}

.wow-archive-hero-v2__breadcrumb .woocommerce-breadcrumb {
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 10px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.5px;
	color: rgba(255, 255, 255, 0.6);
}

/* Every crumb is wrapped in .wow-archive-hero-v2__crumb; the current page is
   the only one rendered without a nested <a> (WooCommerce's own behavior),
   so :last-child reliably targets it without any extra markup. */
.wow-archive-hero-v2__crumb a {
	color: #fff;
	text-decoration: none;
	opacity: 1;
	transition: opacity 0.2s ease;
}

.wow-archive-hero-v2__crumb a:hover {
	opacity: 1;
}

.wow-archive-hero-v2__crumb:last-child {
	color: #fff;
	opacity: 0.5;
}

.wow-archive-hero-v2__crumb-sep {
	display: inline-block;
	margin: 0 2px;
	color: rgba(255, 255, 255, 0.35);
}

/* Shared small eyebrow label — sits above both the sub-collections row and
   the filters row so it's clear at a glance they're two different kinds of
   control, not variations of the same thing. */
.wow-archive-subcollections__label,
.wow-archive-filters-bar__label {
	display: block;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 11px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 1px;
	color: var(--wp--preset--color--grey);
	margin-bottom: 10px;
}

/* Sub-collections — plain navigation to a direct child category (e.g.
   Motorsport → F1 / Le Mans / Rally), not a filter/toggle state. Styled as
   plain underlined text links (same "this goes somewhere else" treatment
   already used for .wow-related__viewall/.wow-shipping-cta elsewhere in the
   theme) rather than the boxed pill look the filters below use — the two
   reading as visually distinct is the point, since confusing "pick a
   sub-collection" with "narrow this page's results" was the original
   complaint. Renders nothing at all (see [wow_archive_subcollections] in
   functions.php) when the current page has no child terms. */
.wow-archive-subcollections {
	max-width: 1270px;
	margin: 0 auto;
	padding: 24px 32px 0;
}

@media (min-width: 901px) {
	.wow-archive-subcollections,
	.wow-archive-filters-bar__label {
		text-align: center;
	}
}

/* Always a single scrollable row, at every width — not just mobile, and
   never wrapping onto a second line — so there's exactly one behavior to
   reason about (rather than "wraps + centers above 700px, scrolls below
   it"), and so it reliably starts flush at the first item every time it
   renders (see wowSubcollectionsTrack.scrollLeft = 0 in nav.js, belt and
   braces alongside justify-content: flex-start here — a centered
   overflow:auto row can otherwise start scrolled to its horizontal middle
   in some browsers instead of at the start). */
.wow-archive-subcollections__track {
	display: flex;
	flex-wrap: nowrap;
	justify-content: flex-start;
	gap: 20px;
	overflow-x: auto;
	-webkit-overflow-scrolling: touch;
}

.wow-archive-subcol {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	flex-shrink: 0;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 13px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.3px;
	color: var(--wp--preset--color--text);
	text-decoration: none;
	padding-bottom: 3px;
	border-bottom: 1px solid #d8d3cd;
	transition: color 0.2s ease, border-color 0.2s ease;
}

.wow-archive-subcol:hover,
.wow-archive-subcol:focus-visible {
	color: var(--wp--preset--color--accent);
	border-color: var(--wp--preset--color--accent);
}

.wow-archive-subcol svg {
	transition: transform 0.2s ease;
}

.wow-archive-subcol:hover svg,
.wow-archive-subcol:focus-visible svg {
	transform: translate(2px, -2px);
}

@media (max-width: 700px) {
	.wow-archive-subcollections {
		padding: 20px 20px 0;
	}

	.wow-archive-subcol {
		font-size: 12px;
	}
}

.wow-archive-filters-bar {
	max-width: 1270px;
	margin: 0 auto;
	padding: 18px 32px;
}

/* Single row on every screen size, no wrapping — small enough (see
   .wow-archive-filter-select below) that 3 filters comfortably fit even on
   a narrow phone; overflow-x is just a safety net for anything narrower or
   for a 4th filter added later, rather than something expected to actually
   trigger day to day. */
.wow-archive-hero__filters {
	display: flex;
	flex-direction: row;
	flex-wrap: nowrap;
	align-items: center;
	justify-content: center;
	gap: 8px;
	overflow-x: auto;
	-webkit-overflow-scrolling: touch;
}

.wow-archive-filter-group {
	flex-shrink: 0;
}

/* Native <select> — opens the OS's own picker on tap/click, so there's no
   custom open/close JS needed and no risk of the iOS "first tap only
   triggers :hover" quirk the old button+panel version ran into (same class
   of bug already fixed elsewhere in this theme for .wow-nav__link, by
   removing a :hover-driven style change — a plain <select> doesn't have
   that problem at all). appearance: none + the background-image arrow below
   is the same small-select treatment already used for .wow-topbar__switchers
   select and .wow-contact-form__row select, kept consistent here. */
.wow-archive-filter-select {
	appearance: none;
	-webkit-appearance: none;
	-moz-appearance: none;
	background-color: #fff;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%23585450' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: right 12px center;
	border: 1px solid #e2e2e2;
	border-radius: 999px;
	padding: 7px 26px 7px 14px;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 12px;
	font-weight: 700;
	color: var(--wp--preset--color--text);
	cursor: pointer;
	max-width: 130px;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
	transition: border-color 0.2s ease, color 0.2s ease;
}

.wow-archive-filter-select:hover,
.wow-archive-filter-select:focus-visible {
	border-color: var(--wp--preset--color--accent);
	color: var(--wp--preset--color--accent);
	outline: none;
}

/* Active filters — one removable chip per <select> that currently has a
   value (see renderChips() in assets/js/archive-filters.js). Sits below the
   select row so the row itself never grows/reflows just from picking a
   filter. */
.wow-archive-filter-chips {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 8px;
}

.wow-archive-filter-chips:not(:empty) {
	margin-top: 12px;
}

.wow-archive-filter-chip {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	background-color: var(--wp--preset--color--accent);
	color: #fff;
	border-radius: 999px;
	padding: 5px 8px 5px 12px;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 11px;
	font-weight: 700;
}

.wow-archive-filter-chip__remove {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 16px;
	height: 16px;
	background: rgba(255, 255, 255, 0.25);
	border: none;
	border-radius: 50%;
	color: #fff;
	font-size: 13px;
	line-height: 1;
	padding: 0;
	cursor: pointer;
	transition: background-color 0.2s ease;
}

.wow-archive-filter-chip__remove:hover,
.wow-archive-filter-chip__remove:focus-visible {
	background-color: rgba(255, 255, 255, 0.45);
}

.wow-archive-body {
	max-width: 1270px;
	margin: 0 auto;
	background-color: #fff;
	padding: 0 0 90px;
}

/* Toolbar strip above the grid — frame-color preview on the left (purely
   visual, see assets/js/archive-toolbar.js and the --wow-frame-color custom
   property .wow-frame__image's border reads), result count on the right
   (kept live via archive-filters.js on every AJAX filter/pagination call). */
.wow-archive-toolbar {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	margin-bottom: 28px;
}

.wow-archive-toolbar__frame-preview {
	display: flex;
	align-items: center;
	gap: 14px;
}

.wow-archive-toolbar__label {
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 11px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 1px;
	color: var(--wp--preset--color--grey);
}

.wow-frame-swatches {
	display: flex;
	align-items: center;
	gap: 8px;
}

.wow-frame-swatch {
	width: 20px;
	height: 20px;
	border-radius: 50%;
	border: 2px solid transparent;
	padding: 0;
	background-color: var(--swatch-color);
	box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.15);
	cursor: pointer;
	transition: border-color 0.2s ease, transform 0.2s ease;
}

.wow-frame-swatch:hover {
	transform: scale(1.1);
}

.wow-frame-swatch.is-active {
	border-color: var(--wp--preset--color--accent);
}

.wow-archive-toolbar__count {
	margin: 0;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 12px;
	letter-spacing: 0.5px;
	text-transform: uppercase;
	color: var(--wp--preset--color--grey);
	white-space: nowrap;
}

.wow-archive-toolbar__count strong {
	color: var(--wp--preset--color--text);
	font-weight: 700;
}

/* 1-col/2-col grid switcher — mobile only (desktop always shows the full
   3-column grid, no need for a toggle there). Wired up in
   assets/js/archive-toolbar.js. */
.wow-archive-view-toggle {
	display: none;
}

.wow-archive-view-toggle__btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 30px;
	height: 30px;
	background: #fff;
	border: 1px solid #e2e2e2;
	border-radius: 6px;
	color: var(--wp--preset--color--grey);
	cursor: pointer;
	transition: border-color 0.2s ease, color 0.2s ease;
}

.wow-archive-view-toggle__btn.is-active,
.wow-archive-view-toggle__btn:hover,
.wow-archive-view-toggle__btn:focus-visible {
	border-color: var(--wp--preset--color--accent);
	color: var(--wp--preset--color--accent);
}

/* Product grid — every artwork sits in an equal-height 1:1 square (bg
   #fafafa) so cards line up regardless of whether the source photo is
   portrait or landscape; the picture-frame treatment scales down to fit
   inside that square without ever cropping the image.
   Hand-rendered by PHP (wow_render_archive_fragment()) instead of the
   WooCommerce Product Collection block, so the exact same markup can be
   swapped in via AJAX when filters/pagination change — no full reload. */
.wow-archive-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	column-gap: 20px;
	row-gap: 20px;
	transition: opacity 0.15s ease;
}

.wow-archive-grid.is-fading {
	opacity: 0.35;
	pointer-events: none;
}

@media (prefers-reduced-motion: no-preference) {
	.wow-archive-grid .product {
		animation: wowCardIn 0.35s ease both;
	}

	.wow-archive-grid .product:nth-child(1) { animation-delay: 0.02s; }
	.wow-archive-grid .product:nth-child(2) { animation-delay: 0.06s; }
	.wow-archive-grid .product:nth-child(3) { animation-delay: 0.1s; }
	.wow-archive-grid .product:nth-child(4) { animation-delay: 0.14s; }
	.wow-archive-grid .product:nth-child(5) { animation-delay: 0.18s; }
	.wow-archive-grid .product:nth-child(6) { animation-delay: 0.22s; }
}

@keyframes wowCardIn {
	from {
		opacity: 0;
		transform: translateY(10px);
	}
	to {
		opacity: 1;
		transform: translateY(0);
	}
}

/* Card = one #fafafa square (.wow-frame) containing a single link that wraps
   BOTH the framed photo and the title/credit caption — the whole card is
   clickable, not just the image. The wishlist button sits outside that link
   (nested interactive elements inside an <a> aren't valid HTML), positioned
   at the square's own corner. No border-radius anywhere here on purpose —
   this is meant to read as a sharp-edged picture frame, not a rounded card. */
.wow-archive-grid .wow-frame {
	position: relative;
	aspect-ratio: 4 / 5;
	background-color: #fafafa;
	padding: 24px;
	display: flex;
}

.wow-archive-grid .wow-frame__link {
	position: relative;
	flex: 1;
	min-height: 0;
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	width: 100%;
	text-decoration: none;
	color: inherit;
}

/* The mat/frame around the photo — hugs the image's own scaled size instead
   of stretching to fill the square (min-width/min-height:0 cancels flex's
   default min-height:auto, which is what let tall portraits push past this
   before; the image's own max-height is a flat px cap as a second backstop). */
.wow-archive-grid .wow-frame__image {
	position: relative;
	display: flex;
	align-items: center;
	justify-content: center;
	min-width: 0;
	min-height: 0;
	max-width: 100%;
	padding: 17px;
	border: 3px solid var(--wow-frame-color, #000);
	background-color: #fff;
	box-sizing: border-box;
	box-shadow:
		inset 0 0 4px rgba(0, 0, 0, 0.2),
		inset 4px 4px 4px rgba(0, 0, 0, 0.15),
		inset -2px -2px 5px rgba(0, 0, 0, 0.08);
	transition: box-shadow 0.25s ease;
}

/* Very subtle lift on hover — kept on the framed photo itself (not the
   #fafafa square), layered on top of its existing inset mat shadow rather
   than replacing it. Hovering anywhere on the card triggers it. */
.wow-archive-grid .wow-frame:hover .wow-frame__image {
	box-shadow:
		inset 0 0 4px rgba(0, 0, 0, 0.2),
		inset 4px 4px 4px rgba(0, 0, 0, 0.15),
		inset -2px -2px 5px rgba(0, 0, 0, 0.08),
		3px 4px 5px rgba(0, 0, 0, 0.3);
}

/* Soft drop shadow behind the frame, suggesting the print is hung on a wall. */
.wow-archive-grid .wow-frame__image::before {
	content: '';
	position: absolute;
	inset: 0;
	box-shadow: 5px 6px 5px rgba(0, 0, 0, 0.33);
	z-index: -1;
}

/* Newer uploads render as <picture><source type="image/avif">...<img></picture>
   (AVIF-with-fallback) instead of a plain <img> — WordPress leaves the wrapping
   <picture> element itself unstyled. display:block + max-height:100% wasn't
   enough (percentage height resolves against this flex container's own
   height, which is only implicitly sized, so it doesn't clamp anything and
   the image still overflowed past the frame). display:contents removes
   <picture> from the box tree entirely, so the <img> inside becomes the
   direct flex item — same as the plain-<img> markup that already sizes
   correctly via the rule below. */
.wow-archive-grid .wow-frame__image picture {
	display: contents;
}

.wow-archive-grid .wow-frame__image img {
	display: block;
	margin: 0;
	min-width: 0;
	min-height: 0;
	width: auto;
	height: auto;
	max-width: 100%;
	max-height: 100%;
	object-fit: contain;
	transform: none;
}

.wow-archive-grid .wc-block-components-product-sale-badge {
	position: absolute;
	top: 8px;
	right: 8px;
	left: auto;
	z-index: 3;
	background-color: var(--wp--preset--color--accent);
	color: #fff;
	font-size: 10px;
	font-weight: 700;
	border-radius: 999px;
	padding: 4px 9px;
}

.wow-archive-grid .wow-frame__caption {
	padding: 14px 12px 0;
	text-align: center;
}

.wow-archive-grid .wow-frame-title {
	text-transform: uppercase;
	font-size: 12px;
	font-weight: 700;
	margin: 0 0 3px;
	color: var(--wp--preset--color--text);
	transition: color 0.2s ease;
}

.wow-archive-grid .wow-frame:hover .wow-frame-title {
	color: var(--wp--preset--color--accent);
}

.wow-archive-grid .wow-frame-credit {
	margin: 0;
	font-family: var(--wp--preset--font-family--josefin);
	font-weight: 300;
	font-size: 10px;
	letter-spacing: 0.5px;
	text-transform: uppercase;
	color: var(--wp--preset--color--grey);
}

/* Wishlist — a real (if still non-functional) button, deliberately outside
   the card's <a> since a button can't legally nest inside a link. Anchored
   to the square itself, not the photo, so it floats at the card's own
   bottom-right corner regardless of the frame's inner size. */
.wow-archive-grid .wow-frame__wishlist {
	position: absolute;
	right: 4px;
	bottom: 4px;
	z-index: 4;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 28px;
	height: 28px;
	border: none;
	border-radius: 50%;
	background-color: #fff;
	color: var(--wp--preset--color--text);
	cursor: pointer;
	transition: background-color 0.2s ease, color 0.2s ease;
}

.wow-archive-grid .wow-frame__wishlist:hover,
.wow-archive-grid .wow-frame__wishlist:focus-visible {
	background-color: var(--wp--preset--color--accent);
	color: #fff;
}

.wow-archive-pagination {
	grid-column: 1 / -1;
	display: flex;
	justify-content: center;
	gap: 8px;
	margin-top: 16px;
}

.wow-archive-pagination__link {
	min-width: 36px;
	height: 36px;
	padding: 0 10px;
	border: 1px solid #e2e2e2;
	border-radius: 999px;
	background-color: #fff;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 13px;
	font-weight: 700;
	color: var(--wp--preset--color--text);
	cursor: pointer;
	transition: border-color 0.2s ease, color 0.2s ease, background-color 0.2s ease;
}

.wow-archive-pagination__link:hover,
.wow-archive-pagination__link:focus-visible {
	border-color: var(--wp--preset--color--accent);
	color: var(--wp--preset--color--accent);
}

.wow-archive-pagination__link.is-current {
	background-color: #000;
	border-color: #000;
	color: #fff;
}

.wow-archive-empty {
	grid-column: 1 / -1;
	text-align: center;
	color: #999;
	padding: 60px 0;
}

@media (max-width: 900px) {
	.wow-archive-grid {
		grid-template-columns: repeat(2, 1fr);
		column-gap: 8px;
		row-gap: 8px;
	}

	/* Smaller type + a taller/narrower frame (3:5 instead of the default
	   4:5) so 2 columns' worth of caption still fits comfortably at half the
	   card width. Plain selector, so this is also the default for the
	   700–900px range generally — the max-width: 700px block further down
	   overrides it back for its own default (1 column below that width), and
	   the .wow-archive-grid--cols-1/--cols-2 compound rules below (higher
	   specificity, same trick already used for aspect-ratio there) make sure
	   the view-toggle's choice always wins regardless of viewport width,
	   including forcing 2-column sizing back on below 700px. */
	.wow-archive-grid .wow-frame {
		aspect-ratio: 3 / 5;
		padding: 14px;
	}

	.wow-archive-grid .wow-frame__image {
		padding: 12px;
	}

	.wow-archive-grid .wow-frame-title {
		font-size: 9px;
		line-height: 1.3;
	}

	.wow-archive-grid .wow-frame-credit {
		font-size: 8px;
		line-height: 1.4;
	}

	/* Desktop drops left/right padding entirely (the grid itself provides
	   enough edge margin at 1270px), but tablet/mobile need it back so the
	   grid isn't flush against the viewport edge. */
	.wow-archive-body {
		padding-left: 20px;
		padding-right: 20px;
	}

	.wow-archive-toolbar__label {
		display: none;
	}

	.wow-archive-view-toggle {
		display: flex;
		align-items: center;
		gap: 6px;
	}

	/* Manual override from .wow-archive-view-toggle (assets/js/archive-
	   toolbar.js toggles these on #wowArchiveResults) — takes priority over
	   whichever column count the breakpoint above/below would otherwise pick,
	   since it's more specific (repeats .wow-archive-grid) than the plain
	   .wow-archive-grid rules alone. */
	.wow-archive-grid.wow-archive-grid--cols-1 {
		grid-template-columns: 1fr;
		row-gap: 48px;
	}

	.wow-archive-grid.wow-archive-grid--cols-1 .wow-frame {
		aspect-ratio: auto;
		padding: 24px;
	}

	.wow-archive-grid.wow-archive-grid--cols-1 .wow-frame__image {
		padding: 17px;
	}

	/* Explicit reset back to the normal (1-column) type size — the plain
	   .wow-archive-grid .wow-frame-title/-credit rules above are written
	   without a cols- qualifier so they can double as the 700–900px range's
	   own default, which means they'd otherwise also catch a
	   toggle-forced 1-column view in that same range. */
	.wow-archive-grid.wow-archive-grid--cols-1 .wow-frame-title {
		font-size: 12px;
		line-height: normal;
	}

	.wow-archive-grid.wow-archive-grid--cols-1 .wow-frame-credit {
		font-size: 10px;
		line-height: normal;
	}

	.wow-archive-grid.wow-archive-grid--cols-2 {
		grid-template-columns: repeat(2, 1fr);
		row-gap: 8px;
	}

	/* Higher specificity than the max-width: 700px block's own plain
	   .wow-archive-grid .wow-frame/-title/-credit defaults further down —
	   guarantees the 2-column sizing stays correct even when the view-toggle
	   forces 2 columns below 700px, where the default would otherwise be 1. */
	.wow-archive-grid.wow-archive-grid--cols-2 .wow-frame {
		aspect-ratio: 3 / 5;
		padding: 14px;
	}

	.wow-archive-grid.wow-archive-grid--cols-2 .wow-frame__image {
		padding: 12px;
	}

	.wow-archive-grid.wow-archive-grid--cols-2 .wow-frame-title {
		font-size: 9px;
		line-height: 1.3;
	}

	.wow-archive-grid.wow-archive-grid--cols-2 .wow-frame-credit {
		font-size: 8px;
		line-height: 1.4;
	}
}

@media (max-width: 700px) {
	.wow-archive-hero-v2__content {
		padding: 110px 20px 20px;
		text-align: left;
	}

	.wow-archive-hero-v2__title {
		font-size: 20px;
		margin: 0;
	}

	.wow-archive-hero-v2__breadcrumb {
		padding: 20px 20px 24px;
		text-align: left;
	}

	.wow-archive-filters-bar {
		padding: 20px 20px;
	}

	.wow-archive-body {
		padding: 40px 20px 64px;
	}

	.wow-archive-grid {
		grid-template-columns: 1fr;
		row-gap: 48px;
	}

	/* No need to force a portrait ratio when there's only one column — with
	   the full row to itself, a fixed 4:5 box just adds empty space around
	   photos that aren't naturally that shape. Let it size to content. */
	.wow-archive-grid .wow-frame {
		aspect-ratio: auto;
		padding: 24px;
	}

	.wow-archive-grid .wow-frame__image {
		padding: 17px;
	}

	/* Back to the normal (1-column) type size — the 700–900px range's
	   .wow-archive-grid .wow-frame-title/-credit rule is deliberately
	   unqualified so it also covers the default 2-column layout there, which
	   means it needs resetting back down here for this range's own default
	   (1 column). The .wow-archive-grid--cols-2 compound rule (higher
	   specificity, see the max-width: 900px block above) still wins over
	   this when the view-toggle forces 2 columns below 700px. */
	.wow-archive-grid .wow-frame-title {
		font-size: 12px;
		line-height: normal;
	}

	.wow-archive-grid .wow-frame-credit {
		font-size: 10px;
		line-height: normal;
	}
}

/* ── Single product — configurator ────────────────────────────────────────
   Ported from the legacy Salient child-theme configurator (see
   woocommerce/content-single-product.php for the full porting notes).
   Two pieces: the frame mockup preview (left) and the .wow-nc configurator
   card (right) — Collector/Open Edition toggle, frame color, size table
   with live stock bars, gift message, add-to-cart. */

/* Breadcrumb (product pages) — same visual language as the archive hero's
   breadcrumb, but on a light background instead of over a photo. */
.wow-breadcrumb {
	display: flex;
	align-items: center;
	justify-content: center;
	flex-wrap: wrap;
	gap: 0 6px;
	margin: 0 0 5px;
}

@media (min-width: 901px) {
	.wow-breadcrumb {
		margin: 0 0 55px;
	}
}

.wow-breadcrumb__link {
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 10px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.5px;
	color: var(--wp--preset--color--text);
	text-decoration: none;
	transition: opacity 0.15s ease;
}

.wow-breadcrumb__link:hover {
	opacity: 0.7;
}

.wow-breadcrumb__sep {
	font-size: 10px;
	color: var(--wp--preset--color--grey);
	opacity: 0.4;
}

.wow-breadcrumb__current {
	width: 100%;
	text-align: center;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 10px;
	font-weight: 300;
	text-transform: uppercase;
	letter-spacing: 0.5px;
	color: var(--wp--preset--color--text);
	opacity: 1;
	margin-top: 0;
}

/* Config section shell — full-bleed light background behind the
   breadcrumb + frame mockup + configurator card. */
/* Top padding is larger than it looks like it needs to be on its own — the
   header is now floated out of flow on top of this section (body.wow-has-hero
   .wow-header, see the "Product archive" block below), so the extra room
   clears the header instead of it overlapping the breadcrumb. Same 140px/
   110px split as .wow-archive-hero-v2__content uses for the same reason. */
.wow-config {
	background-color: #f8f8f8;
	background-image: url(https://wheelsonwalls.shop/wp-content/uploads/2026/04/WALL-BG.avif);
	background-size: cover;
	background-position: center;
	padding: 50px max(32px, calc((100% - 1270px) / 2)) 72px;
}

@media (max-width: 700px) {
	.wow-config {
		padding-top: 40px;
		padding-left: 15px;
		padding-right: 15px;
	}
}

.wow-config__wrap {
	max-width: 1270px;
	margin: 0 auto;
	display: flex;
	flex-wrap: wrap;
	align-items: flex-start;
	justify-content: center;
	gap: 32px;
}

/* flex: 1 1 60% used to let this column balloon to ~810px on wide screens
   (60% of 1270, plus its share of leftover flex-grow space) even though the
   frame graphic itself only needs ~420-588px — the frame ended up centered
   in a much wider column than it needed, which read as a big empty gap
   between the frame and the configurator card next to it. Capped to a
   max-width and grow: 0 so it only takes the room it actually needs;
   .wow-config__wrap's justify-content: center then centers the now-tighter
   pair as a unit instead of stretching the gap between them. */
.frame-mockup-container {
	flex: 0 1 600px;
	min-width: 0;
	display: flex;
	flex-direction: column;
	align-items: center;
	perspective: 1500px;
}

.wow-config__right {
	flex: 0 1 450px;
	max-width: 450px;
	min-width: 0;
}

@media (max-width: 1000px) {
	.frame-mockup-container,
	.wow-config__right {
		flex: 1 1 100%;
		max-width: none;
	}
}

/* ── Frame mockup ── */
.frame-mockup-wrapper {
	transform-style: preserve-3d;
	transform: rotateX(2deg) rotateY(-1deg);
	transition: transform 0.5s cubic-bezier(0.4, 0, 0.2, 1);
}

.frame-outer {
	position: relative;
}

.frame {
	margin: auto;
	position: relative;
	background: #fff;
	border: none !important;
	width: 420px;
	height: 588px;
	aspect-ratio: 1.4 / 1;
	transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);
	box-shadow:
		11px 11px 7px -2px rgba(0, 0, 0, 0.5),
		5px 8px 10px 13px rgba(0, 0, 0, 0.2),
		6px 5px 15px rgba(0, 0, 0, 0.7);
}

/* Per-size/orientation geometry (aspect-ratio, --border-size, --mat-width,
   and the vertical scale/margin-bottom adjustments) used to live here as a
   16-rule CSS matrix (4 sizes × 2 orientations × desktop/mobile). That's now
   a single lookup table in assets/js/product-configurator.js
   (FRAME_GEOMETRY / applyFrameGeometry()), applied as inline styles on
   #frameMockup — same visual result, one source of truth instead of two.
   Only the orientation-driven container width/height stays here, since it's
   just 3 simple rules rather than a matrix. The ".horizontal" class comes
   from the product's own pa_color term slug (get_the_terms in
   woocommerce/content-single-product.php echoes every pa_color term slug
   onto .wow-config, so a product tagged "horizontal" there automatically
   matches this via descendant selector — no extra markup needed). */
@media (max-width: 768px) {
	.frame {
		width: 300px;
		height: auto;
	}
}

.horizontal .frame {
	width: 588px;
	height: auto;
}

@media (max-width: 768px) {
	.horizontal .frame {
		width: 400px;
		height: auto;
		max-width: calc(100vw - 40px);
	}
}

@media (max-width: 480px) {
	.horizontal .frame {
		width: 320px;
	}
}

/* Universal frame border, drawn with ::after so it can sit outside the
   frame's own box (border-image would clip at the corners otherwise). */
.frame::after {
	content: '';
	position: absolute;
	top: calc(var(--border-size) * -1);
	left: calc(var(--border-size) * -1);
	right: calc(var(--border-size) * -1);
	bottom: calc(var(--border-size) * -1);
	pointer-events: none;
	z-index: 0;
	transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);
	background-color: var(--wp--preset--color--black);
}

.frame.frame-walnut::after {
	background:
		url('https://wheelsonwalls.shop/wp-content/uploads/2026/04/walnut-h.avif') top left repeat-x,
		url('https://wheelsonwalls.shop/wp-content/uploads/2026/04/walnut-h.avif') bottom left repeat-x,
		url('https://wheelsonwalls.shop/wp-content/uploads/2026/04/walnut-v.avif') top left repeat-y,
		url('https://wheelsonwalls.shop/wp-content/uploads/2026/04/walnut-v.avif') top right repeat-y;
	background-color: var(--wp--preset--color--walnut);
	background-size: auto var(--border-size), auto var(--border-size), var(--border-size) auto, var(--border-size) auto;
}

.frame.frame-oak::after {
	background:
		url('https://wheelsonwalls.shop/wp-content/uploads/2026/04/oak-h.avif') top left repeat-x,
		url('https://wheelsonwalls.shop/wp-content/uploads/2026/04/oak-h.avif') bottom left repeat-x,
		url('https://wheelsonwalls.shop/wp-content/uploads/2026/04/oak-v.avif') top left repeat-y,
		url('https://wheelsonwalls.shop/wp-content/uploads/2026/04/oak-v.avif') top right repeat-y;
	background-color: var(--wp--preset--color--oak);
	background-size: auto var(--border-size), auto var(--border-size), var(--border-size) auto, var(--border-size) auto;
}

.frame::before {
	content: '';
	position: absolute;
	inset: 0;
	box-shadow:
		inset 3px 3px 8px rgba(0, 0, 0, 0.7),
		inset -1px -1px 4px rgba(255, 255, 255, 0.03);
	pointer-events: none;
	z-index: 15;
}

.mat-board-container {
	position: absolute;
	inset: 0;
	background-color: #ffffff;
	background-image: url(https://www.transparenttextures.com/patterns/clean-gray-paper.png);
	z-index: 1;
}

.mat-board-opening {
	position: absolute;
	top: var(--mat-width);
	left: var(--mat-width);
	right: var(--mat-width);
	bottom: var(--mat-width);
	box-shadow:
		0 -1px 0 0 rgba(0, 0, 0, 0.5),
		-1px 0 0 0 rgba(0, 0, 0, 0.5),
		0 1px 0 0 #fff,
		1px 0 0 0 #fff;
	transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);
	z-index: 4;
}

.mat-board-shadow {
	position: absolute;
	inset: 0;
	box-shadow:
		inset 20px 15px 35px -10px rgba(0, 0, 0, 0.15),
		inset 0 12px 25px -8px rgba(0, 0, 0, 0.1),
		inset 0 0 50px rgba(0, 0, 0, 0.05);
	pointer-events: none;
	z-index: 2;
}

.image-area {
	position: absolute;
	top: var(--mat-width);
	left: var(--mat-width);
	right: var(--mat-width);
	bottom: var(--mat-width);
	overflow: hidden;
	background: #f0f0f0;
	box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12);
	z-index: 3;
	transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);
}

.image-area img {
	width: 100% !important;
	height: 100% !important;
	object-fit: cover;
	display: block;
}

.glass-reflection {
	position: absolute;
	inset: 0;
	pointer-events: none;
	z-index: 10;
	overflow: hidden;
}

.glass-reflection::before {
	content: '';
	position: absolute;
	top: 0;
	left: 35%;
	width: 150%;
	height: 150%;
	background: linear-gradient(
		to right,
		rgba(255, 255, 255, 0.45) 0%,
		rgba(255, 255, 255, 0.19) 12%,
		rgba(255, 255, 255, 0.2) 25%,
		rgba(255, 255, 255, 0.28) 40%,
		rgba(255, 255, 255, 0.06) 55%,
		rgba(255, 255, 255, 0.02) 70%,
		rgba(255, 255, 255, 0) 85%,
		transparent 100%
	);
	transform: rotate(108deg);
	transform-origin: top left;
	mix-blend-mode: overlay;
}

.glass-reflection::after {
	content: '';
	position: absolute;
	top: 0;
	left: 0;
	width: 25%;
	height: 25%;
	background: radial-gradient(
		circle at 0% 0%,
		rgba(255, 255, 255, 0.6) 0%,
		rgba(255, 255, 255, 0.3) 40%,
		rgba(255, 255, 255, 0) 70%,
		transparent 100%
	);
	mix-blend-mode: screen;
}

/* Signature + edition-number stamps, bottom corners of the mat board. */
.stamps {
	position: absolute;
	inset: auto 0 0 0;
	height: var(--mat-width);
	z-index: 4;
	display: flex;
}

.stamps .sig,
.stamps .number {
	position: absolute;
	top: 5px;
	bottom: 0;
	height: calc(var(--mat-width) * 0.3);
	width: calc(var(--mat-width) * 1);
	background-repeat: no-repeat;
	background-size: contain;
}

.stamps .sig {
	left: var(--mat-width);
	background-position: center left;
}

.stamps .number {
	right: var(--mat-width);
	background-image: url(https://wheelsonwalls.shop/wp-content/uploads/2026/04/NUMBER.svg);
	background-position: center right;
}

/* ── Unframed (Open Edition) mode ── */
.frame.unframed {
	box-shadow: 4px 8px 14px -4px rgba(0, 0, 0, 0.18), 0 1px 6px 0 rgba(0, 0, 0, 0.42);
}

.frame.unframed::after,
.frame.unframed::before,
.frame.unframed .mat-board-shadow,
.frame.unframed .glass-reflection {
	display: none;
}

.sleeve-wrap {
	display: none;
	position: absolute;
	inset: -3px;
	pointer-events: none;
	z-index: 20;
	overflow: hidden;
	box-shadow: 0 0 0 1px rgba(180, 200, 230, 0.2);
}

.frame.unframed .sleeve-wrap {
	display: block;
}

.sleeve-band-1 {
	position: absolute;
	inset: -20%;
	background: linear-gradient(
		-12deg,
		transparent 25%,
		rgba(255, 255, 255, 0.04) 33%,
		rgba(255, 255, 255, 0.22) 40%,
		rgba(255, 255, 255, 0.26) 44%,
		rgba(255, 255, 255, 0.1) 50%,
		transparent 57%
	);
	filter: url(#plastic-distort);
}

.sleeve-band-2 {
	position: absolute;
	inset: -20%;
	background: linear-gradient(
		-5deg,
		transparent 52%,
		rgba(255, 255, 255, 0.03) 57%,
		rgba(255, 255, 255, 0.11) 62%,
		rgba(255, 255, 255, 0.04) 66%,
		transparent 71%
	);
	filter: url(#plastic-distort);
}

.sleeve-top-edge {
	position: absolute;
	top: 0;
	left: -145%;
	right: -5%;
	height: 60%;
	opacity: 0.7;
	background: linear-gradient(
		to right,
		transparent 5%,
		rgba(255, 255, 255, 0.55) 25%,
		rgba(255, 255, 255, 0.9) 50%,
		rgba(255, 255, 255, 0.55) 75%,
		transparent 95%
	);
	filter: url(#plastic-distort);
	transform: rotate(265deg);
}

/* ── Configurator card (.wow-nc) ── */
.wow-nc {
	position: relative;
	background: #fafafa;
	border-radius: 22px;
	padding: 18px 18px 14px;
	color: var(--wp--preset--color--text);
	box-shadow: 0 0 20px rgba(0, 0, 0, 0.1);
}

.wow-nc__skeleton {
	display: none;
	position: absolute;
	inset: 0;
	border-radius: 22px;
	background: linear-gradient(110deg, #f0ece8 25%, #faf9f7 50%, #f0ece8 75%);
	background-size: 300% 100%;
	animation: wowNcShimmer 1.4s ease-in-out infinite;
	z-index: 50;
}

.wow-nc--loading .wow-nc__skeleton {
	display: block;
}

@keyframes wowNcShimmer {
	0% { background-position: 100% 0; }
	100% { background-position: -100% 0; }
}

.wow-nc--hidden {
	display: none !important;
}

.wow-nc__label {
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 10px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 1.5px;
	color: var(--wp--preset--color--grey);
	margin: 0 0 10px;
}

.wow-nc__label sup {
	color: var(--wp--preset--color--accent);
	margin-left: 1px;
}

/* Edition type toggle */
.wow-nc__type-row {
	display: flex;
	gap: 8px;
	margin-bottom: 14px;
	align-items: stretch;
}

.wow-nc__type-wrap {
	flex: 1;
	position: relative;
	min-width: 0;
	display: flex;
	flex-direction: column;
}

.wow-nc__type-btn {
	width: 100%;
	flex: 1;
	display: flex;
	align-items: center;
	background: #fff;
	border: 1px solid #e4e0da;
	border-radius: 8px;
	padding: 20px 12px;
	cursor: pointer;
	text-align: left;
	transition: border-color 0.2s ease, background 0.2s ease;
	color: #7a756f;
	min-width: 0;
}

.wow-nc__type-btn:hover {
	background: #f5f2ee;
	border-color: #c8c2ba;
}

.wow-nc__type-btn.active {
	background: #000;
	border-color: #000;
	color: #fff;
}

.wow-nc__type-info {
	flex: 1;
	min-width: 0;
	text-align: center;
	font-family: var(--wp--preset--font-family--josefin);
}

.wow-nc__type-btn strong {
	display: block;
	font-size: 13px;
	font-weight: 700;
	letter-spacing: 0;
	text-transform: uppercase;
	line-height: 1.2;
	color: inherit;
}

.wow-nc__type-btn span {
	display: block;
	font-size: 10px;
	font-style: italic;
	color: inherit;
	opacity: 0.7;
	margin-top: 2px;
	line-height: 1.3;
}

@media (max-width: 768px) {
	.wow-nc__type-btn { justify-content: center; }
}

/* Frame color swatches + CM/IN unit toggle — one shared row (see
   .wow-nc__meta-row below). The unit toggle sits at margin-left: auto so it
   stays pinned to the row's right edge whether or not the colors-wrap next
   to it is visible. */
.wow-nc__meta-row {
	display: flex;
	align-items: center;
	margin-bottom: 14px;
}

.wow-nc__colors-wrap {
	display: flex;
	align-items: center;
	gap: 12px;
}

/* Open Edition has no frame color — rather than removing the row (which
   used to shrink .wow-nc__meta-row and shift the size table up whenever the
   shopper switched types, see product-configurator.js render()), it's kept
   in place but invisible, so the row's height — and the rest of the card
   below it — never moves. */
.wow-nc__colors-wrap--empty {
	visibility: hidden;
}

.wow-nc__colors-wrap .wow-nc__label {
	margin-bottom: 0;
	white-space: nowrap;
	flex-shrink: 0;
	letter-spacing: 0;
}

.wow-nc__swatches {
	display: flex;
	gap: 8px;
}

.wow-nc__swatch-item {
	position: relative;
}

.wow-nc__swatch {
	width: 22px;
	height: 22px;
	border-radius: 50%;
	border: 2px solid transparent;
	padding: 0;
	cursor: pointer;
	box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.15);
	transition: border-color 0.15s ease, transform 0.15s ease;
}

.wow-nc__swatch:hover {
	transform: scale(1.08);
}

.wow-nc__swatch.active {
	border-color: #4b944c;
}

.wow-nc__swatch-popup {
	position: absolute;
	bottom: calc(100% + 12px);
	left: 50%;
	transform: translateX(-50%);
	background: #fff;
	border: 1px solid #e4e0da;
	border-radius: 10px;
	box-shadow: 0 8px 28px rgba(0, 0, 0, 0.09);
	padding: 8px 12px;
	opacity: 0;
	visibility: hidden;
	pointer-events: none;
	transition: opacity 0.15s ease, visibility 0.15s ease;
	z-index: 200;
	white-space: nowrap;
}

.wow-nc__swatch-popup span {
	font-size: 9px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 1.5px;
	color: var(--wp--preset--color--text);
}

@media (hover: hover) {
	.wow-nc__swatch-item:hover .wow-nc__swatch-popup {
		opacity: 1;
		visibility: visible;
	}
}

/* CM/IN unit toggle — pinned to the right of .wow-nc__meta-row, see above */
.wow-nc__unit-toggle {
	display: flex;
	align-items: center;
	gap: 6px;
	margin-left: auto;
	flex-shrink: 0;
}

.wow-nc__unit {
	font-size: 9px;
	font-weight: 700;
	letter-spacing: 1px;
	text-transform: uppercase;
	color: #c8c2ba;
	cursor: pointer;
	transition: color 0.15s ease;
}

.wow-nc__unit.active {
	color: var(--wp--preset--color--text);
}

.wow-nc__unit-track {
	width: 28px;
	height: 16px;
	background: #e4e0da;
	border-radius: 99px;
	cursor: pointer;
	position: relative;
	transition: background 0.2s ease;
}

.wow-nc__unit-track.is-in {
	background: #b8b2aa;
}

.wow-nc__unit-thumb {
	position: absolute;
	top: 2px;
	left: 2px;
	width: 12px;
	height: 12px;
	background: #fff;
	border-radius: 50%;
	transition: transform 0.2s ease;
	box-shadow: 0 1px 3px rgba(0, 0, 0, 0.18);
}

.wow-nc__unit-track.is-in .wow-nc__unit-thumb {
	transform: translateX(12px);
}

/* Size rows (table) */
.wow-nc__sizes {
	display: flex;
	flex-direction: column;
	margin-bottom: 14px;
	border: 1px solid #e4e0da;
	border-radius: 8px;
	overflow: hidden;
}

.wow-nc__size-btn {
	width: 100%;
	background: #fff;
	border: none;
	border-bottom: 1px solid #e4e0da;
	border-left: 3px solid transparent;
	padding: 8px 12px 8px 9px;
	cursor: pointer;
	display: flex;
	align-items: center;
	gap: 8px;
	transition: background 0.12s ease;
	text-align: left;
	font-family: var(--wp--preset--font-family--josefin);
}

.wow-nc__size-btn:last-child {
	border-bottom: none;
}

.wow-nc__size-btn.active {
	background: #000;
	border-left-color: #b73737;
}

.wow-nc__size-btn:not(.active):hover {
	background: #f8f5f2;
}

.wow-nc__size-left {
	display: flex;
	align-items: center;
	gap: 7px;
	flex: 0 0 auto;
	min-width: 118px;
}

.wow-nc__size-name {
	font-size: 12px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0;
	color: var(--wp--preset--color--text);
}

.wow-nc__size-btn.active .wow-nc__size-name {
	color: #fff;
}

.wow-nc__size-dim {
	font-size: 10px;
	color: #7c7c7c;
	background: #ececec;
	padding: 2px 6px;
	border-radius: 3px;
	white-space: nowrap;
	font-weight: 800;
}

.wow-nc__size-btn.active .wow-nc__size-dim {
	background: rgba(255, 255, 255, 0.12);
	color: rgba(255, 255, 255, 0.55);
}

.wow-nc__size-mid {
	flex: 1;
	min-width: 0;
	display: flex;
	flex-direction: column;
	align-items: flex-end;
	gap: 2px;
}

.wow-nc__size-limit {
	font-size: 9px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.5px;
	color: #a8a39d;
	white-space: nowrap;
}

.wow-nc__size-btn.active .wow-nc__size-limit {
	color: rgba(255, 255, 255, 0.55);
}

.wow-nc__size-price {
	font-size: 14px;
	font-weight: 700;
	color: var(--wp--preset--color--text);
	flex: 0 0 auto;
	text-align: right;
	white-space: nowrap;
	min-width: 56px;
}

.wow-nc__size-btn.active .wow-nc__size-price {
	color: #fff;
}

/* Gift trigger pill */
.wow-nc__gift-trigger {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	background: transparent;
	border: 1px solid #d8d3cd;
	border-radius: 50px;
	color: #8a857f;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 10px;
	font-weight: 600;
	letter-spacing: 0.7px;
	text-transform: uppercase;
	padding: 6px 14px 6px 10px;
	cursor: pointer;
	margin-bottom: 8px;
	transition: border-color 0.2s ease, color 0.2s ease, background 0.2s ease;
}

.wow-nc__gift-trigger:hover {
	border-color: #b8b2aa;
	color: #5a5550;
}

.wow-nc__gift-trigger.has-msg {
	background: #f0ece7;
	border-color: #4b944c;
	color: #3a7a3b;
}

/* Add to cart button */
.wow-nc__atc {
	display: block;
	width: 100%;
	background: var(--wp--preset--color--accent);
	color: #fff;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 11px;
	font-weight: 700;
	letter-spacing: 0.5px;
	text-transform: uppercase;
	text-align: center;
	padding: 14px;
	border-radius: 6px;
	border: none;
	cursor: pointer;
	margin-bottom: 10px;
	transition: background 0.2s ease;
}

.wow-nc__atc:hover,
.wow-nc__atc:focus-visible {
	background: #9e2e2e;
	color: #fff;
}

.wow-nc__atc--added,
.wow-nc__atc--added:hover {
	background: #4b944c;
	color: #fff;
}

/* Small trust line under the ATC button — reassures on the handmade/France
   origin right at the purchase decision, without repeating the fuller
   framing description already given in .frame-mockup-desc next to the
   product photo. */
.wow-nc__craft-note {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 5px;
	margin: 14px 0 0;
	font-size: 11px;
	font-style: italic;
	color: var(--wp--preset--color--grey);
}

/* Payment icons — now below the shipping/region row rather than inside the
   card. Heights are equalized per-icon rather than sharing one flat height:
   the Visa/Mastercard/Apple Pay source SVGs have a tight viewBox around the
   logo mark, while Google Pay/Klarna/PayPal have more internal padding, so
   the same height made the first three look noticeably larger. */
.wow-nc__payments {
	text-align: center;
	margin-top: 3px;
}

.wow-nc__payments img {
	height: 18px;
	width: auto;
	margin: 0 3px;
	vertical-align: middle;
}

.wow-nc__payments img:nth-child(-n + 3) {
	height: 13px;
}

/* "Shipping Rates & Times" CTA, below the card — just the one casual text
   link now (the live "Shipping: €X" badge that used to sit next to it was
   removed). */
.wow-shipping-info {
	margin: 14px 0 0;
	display: flex;
	align-items: center;
	justify-content: center;
	text-align: center;
}

.wow-shipping-cta {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	background: transparent;
	border: none;
	padding: 0;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 11px;
	font-weight: 600;
	color: var(--wp--preset--color--grey);
	border-bottom: 1px solid #d8d3cd;
	padding-bottom: 2px;
	cursor: pointer;
	transition: color 0.2s ease, border-color 0.2s ease;
}

.wow-shipping-cta:hover,
.wow-shipping-cta:focus-visible {
	color: var(--wp--preset--color--accent);
	border-color: var(--wp--preset--color--accent);
}

.wow-shipping-cta svg {
	transition: transform 0.2s ease;
}

.wow-shipping-cta:hover svg {
	transform: translateX(2px);
}

/* ── "Calculate Shipping" drawer content ──────────────────────────────────
   Reuses .wow-edition-drawer / .wow-edition-drawer-overlay / .wow-edition-
   drawer__close for the outer shell (overlay, slide-in panel, close
   button) — see product-shipping-info.js. Everything below only styles the
   content inside it. */
.wow-shipping-drawer__title {
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 18px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 1.5px;
	color: var(--wp--preset--color--text);
	margin: 0 0 20px;
}

.wow-shipping-drawer__ddp {
	display: flex;
	align-items: flex-start;
	gap: 12px;
	background: #f5f2ee;
	border-radius: 10px;
	padding: 14px 16px;
	margin-top: 14px;
}

.wow-shipping-drawer__ddp svg {
	flex-shrink: 0;
	margin-top: 1px;
	color: var(--wp--preset--color--accent);
}

.wow-shipping-drawer__ddp p {
	margin: 0;
	font-size: 12.5px;
	line-height: 1.6;
	color: var(--wp--preset--color--text);
}

/* "All artworks produced on order, dispatched from France" note above the
   region picker — small flag + text, not a boxed callout (the DDP note
   below is the only thing that gets the highlighted-box treatment). */
.wow-shipping-drawer__intro {
	display: flex;
	align-items: flex-start;
	gap: 8px;
	margin: 0 0 24px;
	font-size: 13px;
	line-height: 1.6;
	color: var(--wp--preset--color--grey);
}

.wow-shipping-drawer__intro-flag {
	flex-shrink: 0;
	font-size: 15px;
	line-height: 1.5;
}

.wow-shipping-drawer__section {
	margin-bottom: 28px;
}

.wow-shipping-drawer__section h4 {
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 12px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 1px;
	color: var(--wp--preset--color--grey);
	margin: 0 0 12px;
}

.wow-shipping-drawer__region-label {
	display: block;
	font-size: 11px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.5px;
	color: var(--wp--preset--color--grey);
	margin-bottom: 8px;
}

.wow-shipping-drawer__region-select {
	appearance: none;
	-webkit-appearance: none;
	-moz-appearance: none;
	width: 100%;
	box-sizing: border-box;
	background-color: #faf8f5;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%23585450' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: right 16px center;
	border: 1px solid #e4e0da;
	border-radius: 8px;
	color: var(--wp--preset--color--text);
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 13px;
	font-weight: 700;
	padding: 12px 36px 12px 14px;
	cursor: pointer;
	transition: border-color 0.2s ease;
}

.wow-shipping-drawer__region-select:hover,
.wow-shipping-drawer__region-select:focus-visible {
	border-color: #a8a39d;
}

.wow-shipping-drawer__region-result {
	margin-top: 16px;
}

.wow-shipping-drawer__region-panel[hidden] {
	display: none;
}

/* One cohesive card per region, instead of several separate floating boxes
   — Shipping Cost / Dispatch Time / Estimated Delivery, each its own clearly
   labelled group, separated by a thin divider rather than a border-per-row
   (which read as a plain list rather than one connected answer). */
.wow-shipping-drawer__card {
	border: 1px solid #eee;
	border-radius: 12px;
	background: #fff;
	overflow: hidden;
}

.wow-shipping-drawer__card-group {
	padding: 16px 18px;
}

.wow-shipping-drawer__card-label {
	display: block;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 10.5px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.6px;
	color: var(--wp--preset--color--grey);
	margin-bottom: 10px;
}

.wow-shipping-drawer__divider {
	height: 1px;
	background: #f0ece7;
	margin: 0 18px;
}

.wow-shipping-drawer__free-badge {
	display: inline-flex;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 11px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.5px;
	color: #fff;
	background-color: var(--wp--preset--color--accent);
	padding: 5px 14px;
	border-radius: 20px;
}

/* North America's two-row Collector/Open Edition breakdown (see
   content-single-product.php — every other zone still renders a single
   .wow-shipping-drawer__rate-grid directly, unwrapped). */
.wow-shipping-drawer__rate-groups {
	display: flex;
	flex-direction: column;
	gap: 12px;
}

.wow-shipping-drawer__rate-group-label {
	display: block;
	margin: 0 0 6px;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 10px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.5px;
	color: var(--wp--preset--color--grey);
}

.wow-shipping-drawer__rate-grid {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: 8px;
}

.wow-shipping-drawer__rate-grid--compact {
	grid-template-columns: repeat(2, 1fr);
	max-width: 50%;
}

.wow-shipping-drawer__rate-cell {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 3px;
	background: #faf8f5;
	border-radius: 8px;
	padding: 8px 4px;
	text-align: center;
}

.wow-shipping-drawer__rate-size {
	font-size: 10px;
	text-transform: uppercase;
	letter-spacing: 0.4px;
	color: var(--wp--preset--color--grey);
}

.wow-shipping-drawer__rate-price {
	font-size: 13px;
	font-weight: 700;
	color: var(--wp--preset--color--text);
}

/* "Charged once, not per item" clarification below the rate grid — only
   shown for paid zones (a free zone has nothing to clarify). */
.wow-shipping-drawer__rate-note {
	margin: 10px 0 0;
	font-size: 11px;
	line-height: 1.5;
	color: var(--wp--preset--color--grey);
}

.wow-shipping-drawer__time-row {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	font-size: 12.5px;
}

.wow-shipping-drawer__time-row + .wow-shipping-drawer__time-row {
	margin-top: 8px;
}

.wow-shipping-drawer__time-row span {
	color: var(--wp--preset--color--grey);
}

.wow-shipping-drawer__time-row strong {
	color: var(--wp--preset--color--text);
	text-align: right;
}

/* Estimated Delivery is the "bottom line" of the card — give it a bit more
   visual weight than the Dispatch Time rows above it. */
.wow-shipping-drawer__time-row--emphasis span {
	font-weight: 700;
	color: var(--wp--preset--color--text);
	text-transform: uppercase;
	font-size: 11px;
	letter-spacing: 0.4px;
}

.wow-shipping-drawer__time-row--emphasis strong {
	font-size: 14px;
}

@media (max-width: 700px) {
	.wow-shipping-drawer__rate-grid {
		grid-template-columns: repeat(2, 1fr);
	}
}

/* ── "Recent Reviews" drawer content ──────────────────────────────────────
   Reuses .wow-edition-drawer / .wow-edition-drawer-overlay / .wow-edition-
   drawer__close for the outer shell, same as the Shipping drawer above —
   see product-reviews-info.js and #wowReviewsDrawerTrigger (the sitewide
   rating button) in content-single-product.php. */
.wow-reviews-drawer__title {
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 18px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 1.5px;
	color: var(--wp--preset--color--text);
	margin: 0 0 20px;
}

.wow-reviews-drawer__list {
	display: flex;
	flex-direction: column;
}

.wow-reviews-drawer__item {
	padding: 18px 0;
	border-bottom: 1px solid rgba(0, 0, 0, 0.1);
}

.wow-reviews-drawer__item:first-child {
	padding-top: 0;
}

.wow-reviews-drawer__item-head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 10px;
	margin-bottom: 6px;
}

.wow-reviews-drawer__item-author {
	font-family: var(--wp--preset--font-family--josefin);
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.5px;
	font-size: 13px;
	color: var(--wp--preset--color--black);
}

.wow-reviews-drawer__item-head .wow-review-row__stars {
	color: #c9a15a;
}

.wow-reviews-drawer__item-product {
	display: inline-block;
	margin-bottom: 6px;
	font-size: 13px;
	font-weight: 700;
	color: var(--wp--preset--color--accent);
	text-decoration: underline;
}

.wow-reviews-drawer__item-text {
	margin: 0;
	font-size: 14px;
	line-height: 1.6;
	color: var(--wp--preset--color--grey);
}

.wow-reviews-drawer__all-link {
	display: block;
	margin-top: 24px;
	padding-top: 20px;
	border-top: 1px solid rgba(0, 0, 0, 0.1);
	font-size: 13px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 1px;
	text-align: center;
	color: var(--wp--preset--color--black);
	text-decoration: none;
}

.wow-reviews-drawer__all-link:hover,
.wow-reviews-drawer__all-link:focus-visible {
	color: var(--wp--preset--color--accent);
}

/* ── Gift message modal ── */
.wow-nc__gift-overlay {
	position: fixed;
	inset: 0;
	background: rgba(26, 25, 23, 0.42);
	backdrop-filter: blur(3px);
	z-index: 9990;
	opacity: 0;
	visibility: hidden;
	transition: opacity 0.25s ease, visibility 0.25s ease;
}

.wow-nc__gift-overlay.wow-nc--open {
	opacity: 1;
	visibility: visible;
}

.wow-nc__gift-modal {
	position: fixed;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -46%);
	background: #fff;
	border: 1px solid #e4e0da;
	border-radius: 16px;
	box-shadow: 0 20px 60px rgba(0, 0, 0, 0.1);
	padding: 36px 28px 28px;
	width: 400px;
	max-width: 92vw;
	z-index: 9999;
	opacity: 0;
	visibility: hidden;
	transition: opacity 0.25s ease, visibility 0.25s ease, transform 0.25s ease;
}

.wow-nc__gift-modal.wow-nc--open {
	opacity: 1;
	visibility: visible;
	transform: translate(-50%, -50%);
}

.wow-nc__gift-close {
	position: absolute;
	top: 14px;
	right: 14px;
	background: #f5f2ee;
	border: none;
	border-radius: 50%;
	width: 28px;
	height: 28px;
	display: flex;
	align-items: center;
	justify-content: center;
	cursor: pointer;
	color: #7a756f;
	transition: background 0.2s ease, color 0.2s ease;
}

.wow-nc__gift-close:hover {
	background: var(--wp--preset--color--black);
	color: #fff;
}

.wow-nc__gift-inner {
	text-align: center;
}

.wow-nc__gift-emoji {
	font-size: 30px;
	margin-bottom: 8px;
}

.wow-nc__gift-modal h3 {
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 14px;
	font-weight: 700;
	color: var(--wp--preset--color--text);
	text-transform: uppercase;
	letter-spacing: 1.5px;
	margin: 0 0 6px;
}

.wow-nc__gift-modal p {
	font-size: 12px;
	color: #a8a39d;
	margin: 0 0 14px;
	line-height: 1.5;
}

.wow-nc__gift-modal textarea {
	width: 100%;
	box-sizing: border-box;
	background: #faf8f5;
	border: 1px solid #e4e0da;
	border-radius: 8px;
	color: var(--wp--preset--color--text);
	font-size: 13px;
	padding: 12px;
	resize: vertical;
	font-family: inherit;
	line-height: 1.5;
	outline: none;
	transition: border-color 0.2s ease;
}

.wow-nc__gift-modal textarea:focus {
	border-color: #a8a39d;
}

.wow-nc__gift-chars {
	font-size: 9px;
	color: #c8c2ba;
	text-align: right;
	margin: 4px 0 14px;
}

.wow-nc__gift-confirm {
	width: 100%;
	background: var(--wp--preset--color--black);
	color: #fff;
	border: none;
	border-radius: 6px;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 10px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 2px;
	padding: 13px;
	cursor: pointer;
	transition: background 0.2s ease;
}

.wow-nc__gift-confirm:hover {
	background: var(--wp--preset--color--accent);
}

body.wow-modal-open {
	overflow: hidden;
}

/* Fallback when a product has no stock left at all (no size is purchasable) —
   the configurator card itself doesn't render in this case. */
.wow-out-of-stock {
	background: #fafafa;
	border-radius: 22px;
	padding: 24px;
	text-align: center;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 13px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.5px;
	color: var(--wp--preset--color--accent);
}

/* ── Collector vs. Open Edition explainer ──
   Lives inside .wow-config now (see content-single-product.php) — same
   1270px-wide column the frame + configurator above use, so it lines up
   with them instead of running full-bleed edge to edge like it used to as
   its own separate white section. Cards are flex (not grid) since they're
   capped at max-width: 400px each rather than stretching to fill the row. */
.wow-edition-info {
	max-width: 1270px;
	margin: 56px auto 0;
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 16px;
}

.wow-edition-info__col {
	position: relative;
	display: flex;
	align-items: center;
	justify-content: flex-start;
	width: 100%;
	max-width: 450px;
	aspect-ratio: 5 / 1.8;
	padding: 24px;
	background-color: var(--wp--preset--color--black);
	background-size: cover;
	background-position: center;
	border: none;
	border-radius: 14px;
	margin: 0;
	cursor: pointer;
	overflow: hidden;
}

/* Gradient from the left only (where the text sits) rather than a flat
   scrim over the whole photo, so the image itself reads clearly on the
   right side of the card. */
.wow-edition-info__overlay {
	position: absolute;
	inset: 0;
	background: linear-gradient(to right, rgba(0, 0, 0, 0.75) 0%, rgba(0, 0, 0, 0.4) 42%, rgba(0, 0, 0, 0) 72%);
	transition: background 0.25s ease;
}

.wow-edition-info__col:hover .wow-edition-info__overlay,
.wow-edition-info__col:focus-visible .wow-edition-info__overlay {
	background: linear-gradient(to right, rgba(0, 0, 0, 0.85) 0%, rgba(0, 0, 0, 0.5) 42%, rgba(0, 0, 0, 0) 72%);
}

.wow-edition-info__content {
	position: relative;
	z-index: 1;
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: 6px;
	text-align: left;
	max-width: 50%;
}

.wow-edition-info__label {
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 13px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.5px;
	color: #fff;
}

.wow-edition-info__desc {
	font-family: var(--wp--preset--font-family--josefin);
	font-weight: 300;
	font-size: 12px;
	line-height: 1.5;
	color: rgba(255, 255, 255, 0.8);
}

/* Small underlined "Learn more" — signals the whole photo is clickable
   without needing a separate button drawn on top of it. Same underline +
   arrow-nudge hover animation as .wow-shipping-cta, for a consistent "this
   opens something" affordance across the two CTAs. */
.wow-edition-info__cta {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	margin-top: 2px;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 10px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 1px;
	color: #fff;
	padding-bottom: 2px;
	border-bottom: 1px solid rgba(255, 255, 255, 0.6);
	transition: border-color 0.2s ease;
}

.wow-edition-info__col:hover .wow-edition-info__cta,
.wow-edition-info__col:focus-visible .wow-edition-info__cta {
	border-color: #fff;
}

.wow-edition-info__cta svg {
	transition: transform 0.2s ease;
}

.wow-edition-info__col:hover .wow-edition-info__cta svg,
.wow-edition-info__col:focus-visible .wow-edition-info__cta svg {
	transform: translateX(2px);
}

@media (max-width: 480px) {
	.wow-edition-info__col {
		padding: 16px;
	}
}

/* ── Collector/Open Edition explainer drawer (slides in from the right) ── */
.wow-edition-drawer-overlay {
	position: fixed;
	inset: 0;
	background: rgba(10, 10, 10, 0.5);
	z-index: 9990;
	opacity: 0;
	visibility: hidden;
	transition: opacity 0.3s ease, visibility 0.3s ease;
}

.wow-edition-drawer-overlay.wow-edition-drawer--open {
	opacity: 1;
	visibility: visible;
}

.wow-edition-drawer {
	position: fixed;
	top: 0;
	right: 0;
	bottom: 0;
	width: 700px;
	max-width: 95vw;
	background: #fff;
	z-index: 9999;
	padding: 56px 32px 100px;
	/* .wow-edition-drawer__header-img bleeds past this padding on purpose
	   (negative margins, see below) — without clipping that here, real iOS
	   Safari can still count the overflow toward the page's scrollable
	   width even while this drawer sits translateX(100%) off-screen,
	   which shows up as a swipe-right rubber-band revealing blank page
	   past the right edge. Same fix already used for this exact class of
	   bug on the mobile nav panel (search overflow-x: hidden above). */
	overflow-x: hidden;
	overflow-y: auto;
	transform: translateX(100%);
	transition: transform 0.35s cubic-bezier(0.4, 0, 0.2, 1);
}

.wow-edition-drawer.wow-edition-drawer--open {
	transform: translateX(0);
}

.wow-edition-drawer__close {
	position: absolute;
	top: 20px;
	right: 20px;
	background: #f5f2ee;
	border: none;
	border-radius: 50%;
	width: 32px;
	height: 32px;
	display: flex;
	align-items: center;
	justify-content: center;
	cursor: pointer;
	color: #7a756f;
	transition: background 0.2s ease, color 0.2s ease;
}

.wow-edition-drawer__close:hover {
	background: var(--wp--preset--color--black);
	color: #fff;
}

.wow-edition-drawer__panel {
	display: none;
}

.wow-edition-drawer__panel.is-active {
	display: block;
}

/* Bleeds past .wow-edition-drawer's own padding (56px 32px 32px) to sit
   flush against the top/left/right edges of the drawer, rather than being
   inset like the rest of the panel content. */
.wow-edition-drawer__header-img {
	display: block;
	object-fit: cover;
	width: 100%;
	border-radius: 10px;
	margin-bottom: 20px;
}

.wow-edition-drawer__panel h3 {
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 16px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 1.5px;
	color: var(--wp--preset--color--text);
	margin: 0 0 18px;
}

.wow-edition-drawer__panel h4 {
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 12px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 1px;
	color: var(--wp--preset--color--text);
	margin: 28px 0 12px;
}

.wow-edition-drawer__panel p {
	font-size: 14px;
	line-height: 1.7;
	color: var(--wp--preset--color--grey);
	margin: 0 0 16px;
}

.wow-edition-drawer__list {
	margin: 0;
	padding: 0;
	list-style: none;
}

.wow-edition-drawer__list li {
	font-size: 13px;
	line-height: 1.6;
	color: var(--wp--preset--color--grey);
	padding: 10px 0;
	border-top: 1px solid #ece7e0;
}

.wow-edition-drawer__list li:last-child {
	border-bottom: 1px solid #ece7e0;
}

.wow-edition-drawer__list li strong {
	font-weight: 700;
	color: var(--wp--preset--color--text);
}

/* Gallery inside the drawer reuses .wow-product-gallery's own track/item/
   progress-bar classes (see below) — same horizontal scroll-snap slider as
   the WC gallery/related-artworks pattern, just narrower since it's living
   inside the ~636px-wide drawer body instead of the full page column. The
   scroll-progress wiring is in product-edition-info.js. */
.wow-edition-drawer__panel .wow-product-gallery {
	margin: 0;
}

/* ── Gallery + artwork description ────────────────────────────────────────
   Two even columns: a horizontal-scroll gallery of the product's images
   (main image + WC gallery images), and a description panel — title/credit
   card, WooCommerce's rating widget, description text, licensing line, and
   two plain <details> accordions. Stacks to one column on tablet/mobile
   (unlike .wow-edition-info above, which stays 50/50 everywhere on purpose). */
.wow-product-details {
	max-width: 1270px;
	margin: 0 auto;
	padding: 64px 32px;
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 48px;
	align-items: start;
}

@media (max-width: 900px) {
	.wow-product-details {
		grid-template-columns: 1fr;
		gap: 32px;
		padding: 40px 20px;
	}
}

/* Gallery — hides the native scrollbar and shows a thin progress bar
   instead, same pattern as .wow-bestsellers on the homepage (see nav.js,
   search "wowGalleryTrack"). Items are sized so one image sits fully in
   view with roughly half of the next peeking in, signalling there's more
   to scroll through without needing arrows. */
.wow-product-gallery__track {
	display: flex;
	gap: 16px;
	overflow-x: auto;
	scroll-snap-type: x mandatory;
	scrollbar-width: none;
}

.wow-product-gallery__track::-webkit-scrollbar {
	display: none;
}

.wow-product-gallery__item {
	flex: 0 0 calc(66.6% - 11px);
	scroll-snap-align: start;
	background-color: #fafafa;
}

.wow-product-gallery__item img {
	display: block;
	width: 100%;
	height: auto;
}

.wow-product-gallery__progress {
	margin-top: 16px;
	height: 2px;
	background-color: #eee;
	border-radius: 999px;
	overflow: hidden;
}

.wow-product-gallery__progress-bar {
	display: block;
	height: 100%;
	width: 20%;
	background-color: var(--wp--preset--color--accent);
	border-radius: 999px;
	transition: width 0.15s ease;
}

/* Title/credit card */
.wow-product-info__card {
	background-color: var(--wp--preset--color--accent);
	color: #fff;
	border-radius: 12px;
	padding: 20px 31px;
	margin-bottom: 14px;
}

.wow-product-info__eyebrow {
	display: block;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 10px;
	font-weight: 300;
	text-transform: uppercase;
	letter-spacing: 1px;
	color: rgba(255, 255, 255, 0.75);
	margin-bottom: 6px;
}

.wow-product-info__title {
	margin: 0 0 12px;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 24px;
	font-weight: 700;
	text-transform: uppercase;
	line-height: 1.15;
	color: #fff;
}

.wow-product-info__meta-row {
	display: flex;
	align-items: center;
	gap: 12px;
	margin-bottom: 10px;
}

.wow-product-info__meta-row:last-child {
	margin-bottom: 0;
}

.wow-product-info__meta-label {
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 10px;
	font-weight: 300;
	text-transform: uppercase;
	letter-spacing: 0.5px;
	color: rgba(255, 255, 255, 0.75);
	min-width: 60px;
}

.wow-product-info__pill {
	display: inline-flex;
	align-items: center;
	gap: 4px;
	background: rgba(0, 0, 0, 0.15);
	border-radius: 6px;
	padding: 0px 12px;
	font-size: 13px;
	color: #fff;
	text-decoration: none;
	transition: background-color 0.2s ease;
}

.wow-product-info__pill:hover,
.wow-product-info__pill:focus-visible {
	background: rgba(0, 0, 0, 0.3);
}

/* Star rating — mirrors WooCommerce's own rating.php markup/classes
   (.star-rating + masked inner <span>), restyled from scratch since this
   theme dequeues WooCommerce's bundled frontend CSS (and its icon font)
   sitewide — plain Unicode stars instead of a webfont. Now a <button>
   showing WheelsOnWalls' SITEWIDE average rating (not this one artwork's
   own — see the docblock in content-single-product.php), opening the
   Recent Reviews drawer (assets/js/product-reviews-info.js) on click; the
   button-reset properties below are new, the rest is untouched. */
.wow-product-info__rating {
	display: flex;
	align-items: center;
	gap: 8px;
	margin-bottom: 24px;
	background: none;
	border: none;
	padding: 0;
	cursor: pointer;
	font: inherit;
	text-align: left;
}

.wow-product-info__rating:hover .woocommerce-review-link,
.wow-product-info__rating:focus-visible .woocommerce-review-link {
	color: var(--wp--preset--color--accent);
	text-decoration: underline;
}

.wow-product-info__rating .star-rating {
	position: relative;
	display: inline-block;
	overflow: hidden;
	font-size: 16px;
	line-height: 1;
	letter-spacing: 2px;
	color: #ddd;
}

.wow-product-info__rating .star-rating::before {
	content: '★★★★★';
	display: block;
}

.wow-product-info__rating .star-rating span {
	position: absolute;
	top: 0;
	left: 0;
	overflow: hidden;
	white-space: nowrap;
	color: #c9a227;
}

.wow-product-info__rating .star-rating span::before {
	content: '★★★★★';
	display: block;
}

.wow-product-info__rating .woocommerce-review-link {
	font-size: 13px;
	color: var(--wp--preset--color--grey);
	text-decoration: none;
}

.wow-product-info__desc {
	font-size: 15px;
	line-height: 1.7;
	color: var(--wp--preset--color--grey);
	margin-bottom: 20px;
}

.wow-product-info__desc p {
	margin: 0 0 14px;
}

.wow-product-info__licensing {
	font-size: 14px;
	font-weight: 700;
	line-height: 1.6;
	color: var(--wp--preset--color--text);
	margin: 0 0 8px;
}

.wow-product-info__licensing a {
	color: var(--wp--preset--color--accent);
	text-decoration: underline;
}

/* Accordions — plain <details>/<summary>, no JS needed for expand/collapse. */
.wow-product-info__accordion {
	border-top: 1px solid #e2e2e2;
	padding: 18px 0;
}

.wow-product-info__accordion:last-of-type {
	border-bottom: 1px solid #e2e2e2;
}

.wow-product-info__accordion summary {
	display: flex;
	align-items: center;
	justify-content: space-between;
	cursor: pointer;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 12px;
	font-weight: 300;
	text-transform: uppercase;
	letter-spacing: 1px;
	color: var(--wp--preset--color--grey);
	list-style: none;
}

.wow-product-info__accordion summary::-webkit-details-marker {
	display: none;
}

.wow-product-info__accordion summary::after {
	content: '+';
	font-size: 18px;
	font-weight: 300;
	color: var(--wp--preset--color--text);
	transition: transform 0.2s ease;
}

.wow-product-info__accordion[open] summary::after {
	transform: rotate(45deg);
}

.wow-product-info__accordion-body {
	padding-top: 14px;
	font-size: 15px;
	line-height: 1.7;
	color: var(--wp--preset--color--grey);
}

.wow-product-info__accordion-body p {
	margin: 0 0 14px;
	text-align: justify;
}

/* ── Single product: related artworks carousel ───────────────────────────
   Same card markup/CSS as the archive grid (wow_render_product_card(), the
   #fafafa framed-photo cards) — the track below just swaps .wow-archive-grid
   from a display:grid into a horizontal scroll-snap flex row, same pattern
   as .wow-bestsellers on the homepage, arrows and progress bar included. */
.wow-related {
	max-width: 1270px;
	margin: 0 auto;
	padding: 0 32px 80px;
}

.wow-related__header {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	margin-bottom: 24px;
}

.wow-related__title {
	margin: 0;
	font-size: clamp(22px, 2.4vw, 30px);
	text-transform: none;
}

/* Same underline + arrow-nudge hover animation as .wow-shipping-cta and
   .wow-edition-info__cta, instead of the pill-button treatment this used to
   have — a plain text link reads lighter next to the section title, and
   keeps the "this opens/goes somewhere" affordance consistent sitewide. */
.wow-related__viewall {
	flex-shrink: 0;
	display: inline-flex;
	align-items: center;
	gap: 5px;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 10px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.5px;
	color: var(--wp--preset--color--text);
	text-decoration: none;
	padding-bottom: 2px;
	border-bottom: 1px solid #d8d3cd;
	transition: color 0.2s ease, border-color 0.2s ease;
}

.wow-related__viewall:hover,
.wow-related__viewall:focus-visible {
	color: var(--wp--preset--color--accent);
	border-color: var(--wp--preset--color--accent);
}

.wow-related__viewall svg {
	transition: transform 0.2s ease;
}

.wow-related__viewall:hover svg,
.wow-related__viewall:focus-visible svg {
	transform: translateX(2px);
}

.wow-related__viewport {
	position: relative;
}

/* Overrides .wow-archive-grid's display:grid (higher specificity here wins
   regardless of source order) so the exact same .wow-frame cards flow as a
   horizontal scroll-snap track instead of a fixed-column grid. */
.wow-related__viewport .wow-archive-grid {
	display: flex;
	grid-template-columns: none;
	gap: 20px;
	overflow-x: auto;
	scroll-snap-type: x mandatory;
	scrollbar-width: none;
	padding-bottom: 4px;
}

.wow-related__viewport .wow-archive-grid::-webkit-scrollbar {
	display: none;
}

.wow-related__viewport .wow-archive-grid .product {
	flex: 0 0 240px;
	scroll-snap-align: start;
}

.wow-related__arrow {
	position: absolute;
	top: 40%;
	transform: translateY(-50%);
	z-index: 3;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 36px;
	height: 36px;
	border-radius: 50%;
	border: 1px solid #e2e2e2;
	background-color: #fff;
	color: var(--wp--preset--color--text);
	cursor: pointer;
	transition: border-color 0.2s ease, color 0.2s ease;
}

.wow-related__arrow:hover,
.wow-related__arrow:focus-visible {
	border-color: var(--wp--preset--color--accent);
	color: var(--wp--preset--color--accent);
}

.wow-related__arrow--prev {
	left: -18px;
}

.wow-related__arrow--next {
	right: -18px;
}

@media (max-width: 900px) {
	.wow-related__arrow {
		display: none;
	}
}

.wow-related__progress {
	margin-top: 20px;
	height: 2px;
	background-color: #eee;
	border-radius: 999px;
	overflow: hidden;
}

.wow-related__progress-bar {
	display: block;
	height: 100%;
	width: 20%;
	background-color: var(--wp--preset--color--accent);
	border-radius: 999px;
	transition: width 0.15s ease;
}

@media (max-width: 700px) {
	.wow-related {
		padding: 0 20px 60px;
	}

	/* Title + "View category" CTA stack into two rows instead of squeezing
	   onto one, and the title drops out of its clamp() min (22px) — both
	   smaller to match the more compact mobile layout. */
	.wow-related__header {
		flex-direction: column;
		align-items: flex-start;
		gap: 8px;
	}

	.wow-related__title {
		font-size: 18px;
	}

	/* .wow-archive-grid .wow-frame { aspect-ratio: auto; } further up this
	   same breakpoint is meant for the actual archive/category grid, which
	   drops to a single column on mobile and no longer needs a forced
	   portrait box — but that selector's specificity also reaches into this
	   slider's cards (.wow-related__viewport .wow-archive-grid .wow-frame),
	   which stays a horizontal scroll-snap row on mobile and still wants
	   its fixed 4:5 box. Higher specificity here restores it for just this
	   slider without touching the archive grid's own mobile behavior. */
	.wow-related__viewport .wow-archive-grid .wow-frame {
		aspect-ratio: 4 / 5;
	}
}

/* Generic Page template (templates/page.html) — plain pages (About, Contact,
   Your Reviews, etc.) sit in normal document flow under the header. Width/
   centering is handled manually here (rather than via wp:post-content's
   "constrained" layout) so shortcode content with its own full-bleed or
   narrower sections — e.g. [wow_reviews]'s hero/list/lightbox — isn't forced
   to a single uniform width; see templates/page.html for why. No top
   padding: the header should sit flush against whatever the page renders
   first (e.g. the reviews hero banner). */
.wow-page {
	max-width: 1270px;
	margin: 0 auto;
	padding-bottom: 48px;
	background-color: #fff;
}

/* ── Reviews page ([wow_reviews] shortcode, /your-reviews/) ───────────────
   Full-bleed hero — breaks out of .wow-page's 1270px width regardless of
   nesting, via the classic negative-margin/100vw trick, since the rest of
   the page content (the review list itself) stays deliberately narrower
   still (800px, see .wow-reviews below) — the two need different widths
   from the very same parent. (Previously this sat inside wp:post-content's
   "constrained" layout, whose global per-child max-width/margin rule
   fought this trick — see templates/page.html for why that was dropped.) */
.wow-reviews-hero {
	width: 100vw;
	margin-left: calc(50% - 50vw);
	margin-right: calc(50% - 50vw);
	background: linear-gradient(160deg, var(--wp--preset--color--accent) 0%, #8a2a2a 100%);
	padding: 72px 32px;
	text-align: center;
	color: #fff;
}

.wow-reviews-hero__content {
	max-width: 700px;
	margin: 0 auto;
}

.wow-reviews-hero__title {
	font-size: clamp(32px, 4.5vw, 52px);
	font-weight: 700;
	letter-spacing: -0.5px;
	margin: 0 0 14px;
	color: #fff;
}

.wow-reviews-hero__subtitle {
	font-size: 15px;
	font-weight: 300;
	color: rgba(255, 255, 255, 0.8);
	margin: 0 0 44px;
}

.wow-reviews-hero__stats {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 32px;
}

.wow-reviews-hero__stat {
	padding: 0 32px;
}

.wow-reviews-hero__stat + .wow-reviews-hero__stat {
	border-left: 1px solid rgba(255, 255, 255, 0.3);
}

.wow-reviews-hero__stat-num {
	font-family: var(--wp--preset--font-family--josefin);
	font-size: clamp(32px, 4vw, 44px);
	font-weight: 700;
	line-height: 1;
	margin: 0 0 8px;
	color: #fff;
}

.wow-reviews-hero__stat .wow-review-row__stars {
	justify-content: center;
	color: rgba(255, 255, 255, 0.9);
}

.wow-reviews-hero__stat .wow-review-row__star {
	color: rgba(255, 255, 255, 0.35);
}

.wow-reviews-hero__stat .wow-review-row__star.is-filled {
	color: #fff;
}

.wow-reviews-hero__stat-label {
	font-size: 12px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 1px;
	color: rgba(255, 255, 255, 0.75);
	margin: 0;
}

@media (max-width: 600px) {
	.wow-reviews-hero {
		padding: 48px 20px;
	}

	.wow-reviews-hero__stats {
		gap: 12px;
	}

	.wow-reviews-hero__stat {
		padding: 0 12px;
	}
}

/* Width/centering for the list itself comes from .wow-page's 1270px cap
   PLUS this narrower 800px cap on top of it. */
.wow-reviews {
	max-width: 800px;
	margin: 0 auto;
	padding-top: 48px;
	padding-bottom: 32px;
}

.wow-reviews__list {
	display: flex;
	flex-direction: column;
}

.wow-review-row {
	display: flex;
	flex-direction: column;
	gap: 14px;
	padding: 32px 0;
	border-bottom: 1px solid rgba(0, 0, 0, 0.1);
}

.wow-review-row:first-child {
	border-top: 1px solid rgba(0, 0, 0, 0.1);
}

.wow-review-row__head {
	display: flex;
	align-items: center;
	gap: 14px;
}

.wow-review-row__author {
	font-family: var(--wp--preset--font-family--josefin);
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.5px;
	font-size: 16px;
	color: var(--wp--preset--color--black);
}

.wow-review-row__date {
	margin-left: auto;
	font-size: 13px;
	color: var(--wp--preset--color--grey);
}

/* Gold — deliberately not the site's red accent, matches the conventional
   "star rating" color shoppers already recognize. */
.wow-review-row__stars {
	display: flex;
	gap: 2px;
	color: #c9a15a;
}

.wow-review-row__star {
	flex-shrink: 0;
	color: var(--wp--preset--color--grey);
	opacity: 0.3;
}

.wow-review-row__star.is-filled {
	color: #c9a15a;
	opacity: 1;
}

.wow-review-row__country {
	margin: 0;
	font-size: 14px;
	color: var(--wp--preset--color--grey);
}

.wow-review-row__body {
	display: flex;
	align-items: flex-start;
	gap: 20px;
}

.wow-review-row__image {
	width: 100px;
	height: 100px;
	flex-shrink: 0;
	object-fit: cover;
	border-radius: 4px;
}

.wow-review-row__content {
	flex-grow: 1;
	min-width: 0;
}

.wow-review-row__reviewing {
	margin: 0 0 4px;
	font-size: 11px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 1px;
	color: var(--wp--preset--color--grey);
}

.wow-review-row__product {
	display: inline-block;
	margin: 0 0 12px;
	font-size: 16px;
	font-weight: 700;
	color: var(--wp--preset--color--black);
	text-decoration: underline;
}

.wow-review-row__product:hover,
.wow-review-row__product:focus-visible {
	color: var(--wp--preset--color--accent);
}

.wow-review-row__text {
	margin: 0;
	font-size: 16px;
	line-height: 1.6;
	color: var(--wp--preset--color--grey);
}

/* Reviewer's own photos — deliberately bigger and visually separate from
   the small product/catalog shot in .wow-review-row__body above, so the two
   are never mistaken for the same kind of image (feedback: "review photos
   should be different than the artwork photo"). Each is a lightbox trigger,
   see assets/js/reviews.js. */
.wow-review-row__photos {
	display: flex;
	gap: 12px;
	flex-wrap: wrap;
}

.wow-review-row__photo-btn {
	display: block;
	width: 220px;
	height: 280px;
	padding: 0;
	border: none;
	border-radius: 4px;
	overflow: hidden;
	cursor: pointer;
	background: none;
}

.wow-review-row__photo-btn img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
	transition: transform 0.3s ease;
}

.wow-review-row__photo-btn:hover img,
.wow-review-row__photo-btn:focus-visible img {
	transform: scale(1.04);
}

@media (max-width: 600px) {
	.wow-review-row__photo-btn {
		width: calc(50% - 6px);
		height: 200px;
	}
}

/* ── Review photo lightbox (Fancybox v3.5.7, GPL-3.0 — see
   assets/vendor/fancybox/) ──
   Fancybox builds/owns its own overlay DOM at runtime (nothing to mark up
   here, unlike the old custom lightbox), so this is just brand overrides on
   top of its default theme: swap its own caption bar for a minimal, no-card
   author + rating line (a photo's data-caption attribute, built in
   wow_render_review_card()), replacing the previous solid-white review-info
   panel per feedback ("cleaner, no white bg, only text and maybe the name
   and rating"). */
.fancybox-caption {
	background: linear-gradient(to top, rgba(0, 0, 0, 0.75), rgba(0, 0, 0, 0));
}

.fancybox-caption__body {
	font-size: 14px;
	line-height: 1.6;
}

.wow-lightbox-caption__meta {
	display: block;
	margin-top: 4px;
	font-size: 12px;
	opacity: 0.8;
}

.wow-reviews__more-wrap {
	display: flex;
	justify-content: center;
	margin-top: 40px;
}

.wow-reviews__load-more {
	display: inline-block;
	background-color: var(--wp--preset--color--black);
	color: #fff;
	border: none;
	border-radius: 999px;
	padding: 14px 32px;
	font-family: var(--wp--preset--font-family--josefin);
	font-size: 12px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 1px;
	cursor: pointer;
	transition: background-color 0.2s ease;
}

.wow-reviews__load-more:hover,
.wow-reviews__load-more:focus-visible {
	background-color: var(--wp--preset--color--accent);
}

.wow-reviews__load-more:disabled,
.wow-reviews__load-more.is-loading {
	opacity: 0.6;
	cursor: default;
}

.wow-reviews__load-more[hidden] {
	display: none;
}

@media (max-width: 600px) {
	.wow-review-row__head {
		flex-wrap: wrap;
	}

	.wow-review-row__date {
		margin-left: 0;
		flex-basis: 100%;
	}

	.wow-review-row__body {
		flex-direction: column;
	}

	.wow-review-row__image {
		width: 100%;
		height: auto;
		aspect-ratio: 4 / 3;
	}
}
