/**
 * D LUNAFAM — Homepage
 * ------------------------------------------------------------------
 * front-page.php only. Built on the design tokens in design-tokens.css
 * and the shared page components in shared.css (section rhythm, buttons,
 * text links, image slots, hero, story split, final CTA — see that file);
 * only genuinely homepage-only rules live here. Product grids reuse
 * product-card.css (.woocommerce ul.products), not reimplemented here.
 *
 * Breakpoints (matches design-tokens.css documentation):
 *   mobile: up to 479px · mobile-large: 480–767px · tablet: 768–1023px
 *   laptop: 1024–1279px · desktop: 1280px+
 */

.mmsc-home {
	overflow-x: hidden;
}

/* #site-header is `position: fixed` (a pre-existing, documented legacy
   Additional-CSS rule — see header.css) and whatever reserves space for
   it elsewhere doesn't quite match its real rendered height at mobile
   widths: confirmed via live measurement (elementFromPoint at the
   announcement strip's first line hit #site-header-inner, not the
   strip's own text) that the fixed header's box actually extends ~23px
   below where the homepage content starts, silently covering the top of
   whatever's first in it. Scoped to this wrapper (not header.css) so the
   frozen header itself stays untouched — this only adds clearance on
   the homepage. Matches the header's own mobile breakpoint. */
/* (A 30px "fixed header clearance" used to sit here. header.css now
   offsets the body by the header's exact height at every width — 65px
   mobile top bar, 80px desktop — so the extra padding only opened a
   blank band under the header. Removed 2026-09-29.) */

/* Headings scale down below tablet so a two-word heading never has to
   fight a "View All"-style link for room on the same line (found via
   Chrome inspection: "New Arrivals" was wrapping and clipping against
   the viewport edge at 375–430px at the old flat 39px size). */
.mmsc-home h2 {
	font-size: var(--mmsc-text-2xl);
}

@media (min-width: 768px) {
	.mmsc-home h2 {
		font-size: var(--mmsc-text-3xl);
	}
}

/* 1. Announcement strip ---------------------------------------------------
   Light/neutral utility bar, not a promotional ticker. `!important` on
   color matches the same escalation typography.css already uses
   elsewhere in this project (found via inspection: a legacy sitewide
   Additional-CSS rule forces plain `p` text black, which was fully
   overriding this strip's intended text color). */

.mmsc-announce {
	background-color: var(--mmsc-color-border);
	border-bottom: 1px solid rgba(45, 38, 33, 0.08);
	text-align: center;
	padding: 10px var(--mmsc-space-4);
}

.mmsc-announce p {
	margin: 0;
	color: var(--mmsc-color-text) !important;
	/* System font stack, not the site's Inter webfont: this is the very
	   first text painted below the header, and reported (both from a
	   real phone screenshot and reproduced here) with its first line
	   rendering faint/partial — consistent with the browser repainting
	   this text mid-swap once the async Google Fonts request resolves.
	   A system font never triggers that swap, so this line is never at
	   risk of it, regardless of network timing. */
	font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
	font-size: 14px;
	font-weight: 500;
	line-height: 1.5;
	letter-spacing: 0.02em;
}

@media (min-width: 768px) {
	.mmsc-announce p {
		font-size: 13px;
	}
}

/* 2. Campaign Hero ----------------------------------------------------------
   Homepage-only layer over shared.css's .mmsc-hero (the About hero keeps
   the shared version). Blueprint §11:
     < 768   4:5 photo capped at 58svh, copy below, primary CTA full width
     768+    photo fills a 16:9 frame, copy over its calm left side
     1024+   16:7 with a 520px floor
   The media box reserves its size before the image loads (no CLS). Each
   slide fills that box; a <picture> (desktop + mobile assets) or a single
   <img> (fallback) both sit inside it. */

.mmsc-home-hero .mmsc-hero__media {
	position: relative;
	aspect-ratio: 4 / 5;
	max-height: 58svh;
}

.mmsc-home-hero__slide,
.mmsc-home-hero__slide picture {
	position: absolute;
	inset: 0;
	display: block;
}

.mmsc-home-hero .mmsc-hero__img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	/* New mobile asset: subject centred, face high (prompt IMG-02). */
	object-position: 50% 30%;
}

/* The current hero photo (landscape, girl on the right) until the
   art-directed pair is uploaded. */
.mmsc-home-hero .mmsc-hero__img.mmsc-merch-img--fallback {
	object-position: 78% center;
}

.mmsc-home-hero .mmsc-hero__content {
	padding: var(--mmsc-space-6) var(--mmsc-space-4) var(--mmsc-space-7);
}

.mmsc-home-hero .mmsc-hero__title {
	font-size: var(--mmsc-text-3xl);
}

.mmsc-home-hero .mmsc-hero__lede {
	font-size: 17px;
	margin-bottom: var(--mmsc-space-5);
}

.mmsc-home-hero .mmsc-hero__actions .mmsc-btn {
	width: 100%;
	max-width: none;
	min-height: 48px;
}

.mmsc-home-hero__edits {
	margin-top: var(--mmsc-space-4);
	padding: 10px 0;
}

/* Narrower phones (360–389) and short screens: the fixed bottom nav
   (~60px) takes the foot of the first screen, so a lower photo cap and a
   tighter top padding keep the whole headline above it (checked at
   360×740, 375×812, 375×667). */
@media (max-width: 389px) {
	.mmsc-home-hero .mmsc-hero__media {
		max-height: 48svh;
	}

	.mmsc-home-hero .mmsc-hero__content {
		padding-top: var(--mmsc-space-5);
	}
}

@media (max-width: 767px) and (max-height: 700px) {
	.mmsc-home-hero .mmsc-hero__media {
		max-height: 44svh;
	}
}

@media (min-width: 600px) and (max-width: 767px) {
	.mmsc-home-hero .mmsc-hero__actions .mmsc-btn {
		width: auto;
	}
}

@media (min-width: 768px) {
	.mmsc-home-hero {
		aspect-ratio: 16 / 9;
		min-height: 460px;
	}

	.mmsc-home-hero .mmsc-hero__media {
		position: absolute;
		inset: 0;
		aspect-ratio: auto;
		max-height: none;
		height: 100%;
	}

	.mmsc-home-hero .mmsc-hero__img,
	.mmsc-home-hero .mmsc-hero__img.mmsc-merch-img--fallback {
		/* New desktop asset: subject in the right third (prompt IMG-01);
		   the fallback photo's girl sits in the same place. */
		object-position: 70% center;
	}

	.mmsc-home-hero .mmsc-hero__content {
		position: relative;
		z-index: 1;
		height: 100%;
		max-width: 56%;
		display: flex;
		flex-direction: column;
		justify-content: center;
		text-align: left;
		padding: var(--mmsc-space-6) var(--mmsc-space-6) var(--mmsc-space-6) var(--mmsc-space-7);
		background: linear-gradient(100deg, rgba(248, 245, 240, 0.95) 0%, rgba(248, 245, 240, 0.86) 55%, rgba(248, 245, 240, 0) 100%);
	}

	.mmsc-home-hero .mmsc-hero__lede {
		margin-left: 0;
		margin-right: 0;
	}

	.mmsc-home-hero .mmsc-hero__actions {
		flex-direction: row;
		flex-wrap: wrap;
		justify-content: flex-start;
	}

	.mmsc-home-hero .mmsc-hero__actions .mmsc-btn {
		width: auto;
	}

	.mmsc-home-hero__edits {
		align-self: flex-start;
	}
}

@media (min-width: 1024px) {
	.mmsc-home-hero {
		aspect-ratio: 16 / 7;
		min-height: 520px;
	}

	.mmsc-home-hero .mmsc-hero__content {
		max-width: 620px;
		padding: var(--mmsc-space-8) var(--mmsc-space-8) var(--mmsc-space-8) var(--mmsc-space-9);
		background: linear-gradient(100deg, rgba(248, 245, 240, 0.94) 0%, rgba(248, 245, 240, 0.82) 60%, rgba(248, 245, 240, 0) 100%);
	}

	.mmsc-home-hero .mmsc-hero__title {
		font-size: var(--mmsc-text-4xl);
	}

	.mmsc-home-hero .mmsc-hero__lede {
		font-size: var(--mmsc-text-lg);
		margin-bottom: var(--mmsc-space-6);
	}

	.mmsc-home-hero .mmsc-hero__img.mmsc-merch-img--fallback {
		object-position: 65% center;
	}
}

/* Seasonal second slide (only rendered while the festive edit is active):
   slides and their copy blocks stack; merch-motion.js crossfades them. */
.mmsc-home-hero--slides .mmsc-home-hero__slide:not(.is-active),
.mmsc-home-hero--slides .mmsc-home-hero__copy:not(.is-active) {
	opacity: 0;
	visibility: hidden;
}

.mmsc-home-hero--slides .mmsc-hero__content {
	display: grid;
	align-content: center;
}

.mmsc-home-hero--slides .mmsc-home-hero__copy {
	grid-area: 1 / 1;
}

.mmsc-home-hero--slides .mmsc-home-hero__dots {
	grid-area: 2 / 1;
}

.mmsc-home-hero__title-alt {
	font-family: var(--mmsc-font-heading);
	line-height: 1.15;
}

.mmsc-home-hero__dots {
	display: flex;
	gap: 0;
	margin: var(--mmsc-space-3) 0 0 -12px;
}

.mmsc-home-hero__dot {
	width: 44px;
	height: 44px;
	padding: 0;
	border: 0;
	background: transparent;
	cursor: pointer;
	position: relative;
}

.mmsc-home-hero__dot::after {
	content: "";
	position: absolute;
	left: 50%;
	top: 50%;
	width: 10px;
	height: 10px;
	margin: -5px 0 0 -5px;
	border-radius: 50%;
	border: 1px solid var(--mmsc-color-dark);
}

.mmsc-home-hero__dot[aria-current="true"]::after {
	background: var(--mmsc-color-dark);
}

.mmsc-home-hero__dot:focus-visible {
	outline: 2px solid var(--mmsc-color-accent);
	outline-offset: -6px;
}

/* 3. Shop Her Style -----------------------------------------------------------
   One card per stocked category, all 4:5.
     < 768     native swipe rail, ~2.2 cards visible, next card peeks
     768–1023  rail, ~3.3 visible
     1024+     5-column grid (wraps to a second row if more are stocked)
   The rail runs to the screen edge (negative inline margin) so the peek
   reads as "more", while its first card still lines up with the heading. */

.mmsc-categories__rail {
	list-style: none;
	margin: 0 calc(-1 * var(--mmsc-space-5));
	padding: 0 var(--mmsc-space-5) var(--mmsc-space-2);
	display: flex;
	gap: var(--mmsc-space-3);
	overflow-x: auto;
	overscroll-behavior-x: contain;
	scroll-snap-type: x mandatory;
	scroll-padding-inline: var(--mmsc-space-5);
	-webkit-overflow-scrolling: touch;
	scrollbar-width: none;
}

.mmsc-categories__rail::-webkit-scrollbar {
	display: none;
}

.mmsc-categories__item {
	flex: 0 0 calc((100vw - 2 * var(--mmsc-space-5) - var(--mmsc-space-3)) / 2.2);
	scroll-snap-align: start;
	margin: 0;
}

.mmsc-cat-card {
	display: block;
	text-decoration: none;
	color: var(--mmsc-color-text);
	border-radius: var(--mmsc-radius-md);
}

.mmsc-cat-card:focus-visible {
	outline: 2px solid var(--mmsc-color-accent);
	outline-offset: 3px;
}

.mmsc-cat-card__media {
	position: relative;
	display: block;
	aspect-ratio: 4 / 5;
	border-radius: var(--mmsc-radius-md);
	overflow: hidden;
	background-color: var(--mmsc-color-border);
}

/* Pinned to the frame: WordPress's own img styles (height: auto) would
   otherwise let a landscape fallback photo sit at its natural height. */
.mmsc-cat-card__media img {
	position: absolute;
	inset: 0;
	display: block;
	width: 100%;
	height: 100% !important;
	object-fit: cover;
	object-position: 50% 25%;
}

/* No photo at all (a newly stocked category before its card is shot): a
   typographic tile, never a grey icon. */
.mmsc-cat-card__type {
	position: absolute;
	inset: 0;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: var(--mmsc-space-4);
	background: linear-gradient(160deg, #efe6dc 0%, var(--mmsc-color-bg) 100%);
	font-family: var(--mmsc-font-heading);
	font-size: 22px;
	line-height: 1.2;
	text-align: center;
	color: var(--mmsc-color-text);
}

.mmsc-cat-card__label {
	display: block;
	margin-top: var(--mmsc-space-3);
	font-family: var(--mmsc-font-heading);
	font-weight: 600;
	font-size: 17px;
	line-height: 1.3;
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

@media (min-width: 768px) {
	.mmsc-categories__rail {
		gap: var(--mmsc-space-4);
	}

	.mmsc-categories__item {
		flex-basis: calc((100vw - 2 * var(--mmsc-space-5) - 3 * var(--mmsc-space-4)) / 3.3);
	}
}

@media (min-width: 1024px) {
	.mmsc-categories__rail {
		margin: 0;
		padding: 0;
		display: grid;
		grid-template-columns: repeat(5, minmax(0, 1fr));
		gap: var(--mmsc-space-5);
		overflow: visible;
		scroll-snap-type: none;
	}

	.mmsc-categories__item {
		flex: none;
	}

	.mmsc-cat-card__label {
		font-size: 18px;
	}
}

/* 4. Product grids -------------------------------------------------------------
   Shared cards (product-card.css) — only the column counts differ here:
   New Arrivals and the Celebration edit are 2 across on phones and 4 from
   768 (blueprint §11); New Arrivals shows its first 4 on phones plus a
   full-width "View all" button. */

.mmsc-product-grid {
	margin: 0;
}

@media (max-width: 767px) {
	body.mmsc-cards .mmsc-arrivals ul.products.oceanwp-row,
	body.mmsc-cards .mmsc-edit--celebration ul.products.oceanwp-row {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}

	body.mmsc-cards .mmsc-arrivals ul.products.oceanwp-row > li.product:nth-child(n+5) {
		display: none;
	}
}

@media (min-width: 768px) {
	body.mmsc-cards .mmsc-arrivals ul.products.oceanwp-row,
	body.mmsc-cards .mmsc-edit--celebration ul.products.oceanwp-row {
		grid-template-columns: repeat(4, minmax(0, 1fr));
	}
}

.mmsc-arrivals__more {
	display: flex;
	width: 100%;
	min-height: 48px;
	margin-top: var(--mmsc-space-5);
}

@media (min-width: 768px) {
	.mmsc-arrivals__more {
		display: none;
	}
}

/* 6. Brand / Value Story (homepage section 06) --------------------------------
   Sits between the two edits: the calm white "gallery" panel after the
   dark Celebration spread, before the Everyday split. Layout/sizing rules
   are shared.css's .mmsc-story*. */

/* 5. Celebration Edit (homepage section 05; .mmsc-feature) --------------------
   A large campaign-image slot with the heading overlaid (same pattern as
   the hero) so this reads as an editorial spread, not a text banner. The
   whole section (not just the banner) carries a dark espresso ground —
   the deliberate opposite of Brand Story's plain white panel just above
   it — so this reads as a distinct "campaign moment" rather than a
   repeat of the same image+text pattern back to back. Product cards
   below the banner keep their own white card surface (product-card.css,
   untouched) but now sit on this dark ground instead of the page's
   ivory, like a small spotlighted merchandising moment. */

.mmsc-feature {
	background-color: var(--mmsc-color-dark);
	/* Reported from a real screenshot as the image "feeling cut": this
	   section still inherited .mmsc-section's generic 48–96px top/bottom
	   padding, and — unlike every other section, where that padding is
	   invisible against the shared ivory page background — here it's
	   dark and empty, so whenever it lands at the top of the viewport
	   mid-scroll it reads as a stray bar slicing into the photo below
	   (or the one above, for the padding at the bottom edge, right where
	   the Retail/Wholesale images begin next). Zeroed out here so the
	   banner image sits flush against the section's own edges instead;
	   .mmsc-section__inner below now supplies its own, smaller top *and*
	   bottom padding around just the product grid, so there's still
	   breathing room, but it directly hugs real content (the grid, and
	   the image above it) instead of floating as an empty gap. */
	padding-top: 0;
	padding-bottom: 0;
}

/* Phone 4:5 (…-mobile asset) · tablet 2:1 · 1024+ 21:9 (…-desktop). */
.mmsc-feature__banner {
	position: relative;
	aspect-ratio: 4 / 5;
	overflow: hidden;
	background-color: var(--mmsc-color-dark);
}

/* Tablet: 2:1 rather than 16:10. The desktop photo is 21:9 with the two
   sisters in its right half; a 16:10 crop pulled them under the copy.
   At 2:1 they sit in the right ~56%; from 768 up the copy is capped at
   40% of the banner so it stays on the empty left side. */
@media (min-width: 768px) {
	.mmsc-feature__banner {
		aspect-ratio: 2 / 1;
	}
}

@media (min-width: 768px) {
	.mmsc-feature__banner .mmsc-feature__banner-inner {
		max-width: min(460px, 40%);
	}
}

@media (min-width: 1024px) {
	.mmsc-feature__banner {
		aspect-ratio: 21 / 9;
		min-height: 420px;
	}
}

.mmsc-feature__banner .mmsc-image-slot,
.mmsc-feature__banner .mmsc-image-slot__img,
.mmsc-feature__banner picture,
.mmsc-feature__banner .mmsc-merch-img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
}

.mmsc-feature__banner .mmsc-merch-img {
	display: block;
	object-fit: cover;
	object-position: 50% 30%;
}

@media (min-width: 768px) {
	.mmsc-feature__banner .mmsc-merch-img {
		/* Subjects on the right (IMG-08), copy on the left. At tablet
		   widths the 2:1 frame trims the 21:9 photo's sides; 85% keeps
		   the younger sister's skirt inside the frame. */
		object-position: 85% center;
	}

	.mmsc-feature__banner .mmsc-merch-img--fallback {
		object-position: center;
	}
}

/* Copy bottom-left (blueprint §04): on phones over the bottom third on a
   scrim; from 768 inside the calm left zone, with a left-side scrim too. */
.mmsc-feature__banner-overlay {
	position: absolute;
	inset: 0;
	display: flex;
	align-items: flex-end;
	justify-content: flex-start;
	padding: var(--mmsc-space-6) var(--mmsc-space-5);
	background: linear-gradient(180deg, rgba(45, 38, 33, 0) 40%, rgba(45, 38, 33, 0.72) 100%);
	text-align: left;
}

@media (min-width: 768px) {
	.mmsc-feature__banner-overlay {
		padding: var(--mmsc-space-7);
		background:
			linear-gradient(90deg, rgba(45, 38, 33, 0.58) 0%, rgba(45, 38, 33, 0) 55%),
			linear-gradient(180deg, rgba(45, 38, 33, 0) 45%, rgba(45, 38, 33, 0.55) 100%);
	}
}

@media (min-width: 1024px) {
	.mmsc-feature__banner-overlay {
		padding: var(--mmsc-space-8) var(--mmsc-space-9);
	}
}

.mmsc-feature__banner-inner {
	max-width: 460px;
}

.mmsc-feature__banner h2 {
	color: var(--mmsc-color-surface);
	margin: 0 0 var(--mmsc-space-3);
}

.mmsc-feature__descriptor {
	color: rgba(255, 255, 255, 0.92) !important;
	font-size: 16px;
	line-height: 1.55;
	margin: 0 0 var(--mmsc-space-4);
}

.mmsc-feature__banner .mmsc-text-link--light {
	padding: 10px 0;
}

.mmsc-feature .mmsc-section__inner {
	padding-top: var(--mmsc-space-7);
	padding-bottom: var(--mmsc-space-7);
}

@media (min-width: 1024px) {
	.mmsc-feature .mmsc-section__inner {
		padding-top: var(--mmsc-space-8);
		padding-bottom: var(--mmsc-space-8);
	}
}

/* If the edit's curation drops below four buyable products (one sold out,
   say), the shorter row is centred under the banner instead of hugging the
   left edge. Same card width as a full row; empty tracks collapse. */
@media (min-width: 768px) {
	body.mmsc-cards .mmsc-feature ul.products.oceanwp-row:not(:has(> li.product:nth-child(4))) {
		grid-template-columns: repeat(auto-fit, calc((100% - 3 * var(--mmsc-space-5)) / 4));
		justify-content: center;
	}
}

/* The shared cards (product-card.css) have no surface of their own — the
   name, price and Quick Add are espresso on the page's ivory, which
   vanished on this espresso ground. Here they're set in light type
   instead; the photo, heart and layout stay the same as everywhere. */
body.mmsc-cards .mmsc-feature ul.products.oceanwp-row li.product .title h2,
body.mmsc-cards .mmsc-feature ul.products.oceanwp-row li.product .title a {
	color: var(--mmsc-color-bg);
}

body.mmsc-cards .mmsc-feature ul.products.oceanwp-row li.product .title a:hover,
body.mmsc-cards .mmsc-feature ul.products.oceanwp-row li.product .title a:focus-visible {
	color: #e6c3c9;
}

body.mmsc-cards .mmsc-feature ul.products.oceanwp-row li.product .price-wrap .price,
body.mmsc-cards .mmsc-feature ul.products.oceanwp-row li.product .price-wrap .price .amount,
body.mmsc-cards .mmsc-feature ul.products.oceanwp-row li.product .price-wrap .price .amount bdi {
	color: var(--mmsc-color-surface) !important;
}

body.mmsc-cards .mmsc-feature ul.products.oceanwp-row li.product .price-wrap .price del,
body.mmsc-cards .mmsc-feature ul.products.oceanwp-row li.product .price-wrap .price del .amount,
body.mmsc-cards .mmsc-feature ul.products.oceanwp-row li.product .price-wrap .price del .amount bdi {
	color: rgba(248, 245, 240, 0.62) !important;
}

body.mmsc-cards .mmsc-feature ul.products.oceanwp-row li.product .price-wrap .onsale {
	background: rgba(230, 195, 201, 0.16) !important;
	color: #e6c3c9 !important;
}

body.mmsc-cards .mmsc-feature ul.products.oceanwp-row li.product .product-inner a.add_to_cart_button,
body.mmsc-cards .mmsc-feature ul.products.oceanwp-row li.product .product-inner a.added-to-cart,
body.mmsc-cards .mmsc-feature ul.products.oceanwp-row li.product .product-inner a.added_to_cart {
	border-color: var(--mmsc-color-bg) !important;
}

body.mmsc-cards .mmsc-feature ul.products.oceanwp-row li.product .product-inner a.add_to_cart_button {
	color: var(--mmsc-color-bg) !important;
}

body.mmsc-cards .mmsc-feature ul.products.oceanwp-row li.product .product-inner a.add_to_cart_button:hover,
body.mmsc-cards .mmsc-feature ul.products.oceanwp-row li.product .product-inner a.add_to_cart_button:focus-visible,
body.mmsc-cards .mmsc-feature ul.products.oceanwp-row li.product .product-inner a.added-to-cart,
body.mmsc-cards .mmsc-feature ul.products.oceanwp-row li.product .product-inner a.added_to_cart {
	background: var(--mmsc-color-bg) !important;
	color: var(--mmsc-color-dark) !important;
}

body.mmsc-cards .mmsc-feature ul.products.oceanwp-row li.product .product-inner a.added-to-cart:hover,
body.mmsc-cards .mmsc-feature ul.products.oceanwp-row li.product .product-inner a.added_to_cart:hover {
	background: var(--mmsc-color-surface) !important;
	border-color: var(--mmsc-color-surface) !important;
}

/* 7. Retail + Wholesale split ------------------------------------------------
   Each panel is an image-forward card: a dedicated media slot on top,
   text/CTA below, so these read as two premium visual panels rather than
   flat color blocks. Homepage-only pattern — the About page's Retail +
   Wholesale section uses its own lighter, text-only treatment instead
   (see about.css) so the two pages don't repeat the same photo layout. */

.mmsc-split {
	display: flex;
	flex-direction: column;
}

.mmsc-split__panel {
	display: flex;
	flex-direction: column;
}

.mmsc-split__media {
	position: relative;
	width: 100%;
	aspect-ratio: 4 / 3;
	overflow: hidden;
}

/* Wholesale's image carries a faint dark tint tying it to its own dark
   content panel below/beside it; Retail's stays clean and untinted —
   the two panels read as deliberately different moods (bright/everyday
   vs. considered/professional), not a mirrored pair with swapped
   colors. */
.mmsc-split__panel--wholesale .mmsc-split__media::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(180deg, rgba(45, 38, 33, 0) 55%, rgba(45, 38, 33, 0.4) 100%);
	pointer-events: none;
}

.mmsc-split__content {
	flex: 1;
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	padding: var(--mmsc-space-7) var(--mmsc-space-5);
	text-align: center;
}

.mmsc-split__panel--retail .mmsc-split__content {
	background-color: var(--mmsc-color-bg);
	color: var(--mmsc-color-text);
}

.mmsc-split__panel--wholesale .mmsc-split__content {
	background-color: var(--mmsc-color-dark);
	color: var(--mmsc-color-bg);
}

.mmsc-split__eyebrow {
	text-transform: uppercase;
	letter-spacing: 0.08em;
	font-size: 13px;
	font-weight: 600;
	color: var(--mmsc-color-primary);
	margin: 0 0 var(--mmsc-space-3);
}

@media (min-width: 768px) {
	.mmsc-split__eyebrow {
		font-size: var(--mmsc-text-xs);
	}
}

.mmsc-split__panel--wholesale .mmsc-split__eyebrow {
	color: var(--mmsc-color-accent);
}

.mmsc-split__panel h2 {
	max-width: 26em;
	margin: 0 auto var(--mmsc-space-5);
}

.mmsc-split__panel--wholesale h2 {
	color: var(--mmsc-color-surface);
}

@media (min-width: 768px) {
	.mmsc-split {
		flex-direction: row;
		min-height: 560px;
	}

	.mmsc-split__panel {
		width: 50%;
	}

	/* A hairline seam between the two panels reinforces that these are
	   two distinct cards sitting side by side, not one continuous strip
	   that happens to change color halfway through. */
	.mmsc-split__panel--retail {
		border-right: 1px solid var(--mmsc-color-border);
	}

	.mmsc-split__media {
		aspect-ratio: auto;
		flex: 1 1 0;
		min-height: 260px;
	}
}

/* In-page targets ("Explore the Edits" → #celebration) clear the fixed
   header (65px phone bar / 80px desktop). */
.mmsc-edit {
	scroll-margin-top: 65px;
}

@media (min-width: 960px) {
	.mmsc-edit {
		scroll-margin-top: 80px;
	}
}

/* Editorial photos resolved by file name (mmsanidaz_homepage_media):
   crop points tuned to the approved v2 photographs.
   - Brand story: 55% keeps the girl's shoes in the 16:9 desktop frame
     (the shared 20% default cut them off).
   - Retail panel: at 1280–1440 the panel is a 2.5–2.8:1 band; 25% keeps
     the mirror reflection's face inside it. */
.mmsc-home img.mmsc-story__img {
	object-position: 60% 55%;
}

.mmsc-split__panel--retail .mmsc-split__img {
	object-position: 50% 25%;
}

/* 7. Everyday Edit ------------------------------------------------------------
   Portrait image beside a 2×2 of curated products.
     < 768     stacked: image (4:5) then the 2×2
     768–1023  ~40 / 60
     1024+     5/12 · 7/12 */

.mmsc-everyday {
	display: grid;
	gap: var(--mmsc-space-6);
}

.mmsc-everyday__media {
	position: relative;
	aspect-ratio: 4 / 5;
	border-radius: var(--mmsc-radius-md);
	overflow: hidden;
	background-color: var(--mmsc-color-border);
}

.mmsc-everyday__media .mmsc-merch-img,
.mmsc-everyday__media .mmsc-image-slot,
.mmsc-everyday__media picture {
	position: absolute;
	inset: 0;
	display: block;
	width: 100%;
	height: 100%;
}

.mmsc-everyday__media .mmsc-merch-img {
	object-fit: cover;
	/* Seated subject slightly left, face high (prompt IMG-10). */
	object-position: 45% 35%;
}

body.mmsc-cards .mmsc-everyday ul.products.oceanwp-row {
	grid-template-columns: repeat(2, minmax(0, 1fr));
}

.mmsc-everyday__cta {
	margin-top: var(--mmsc-space-5);
	padding: 10px 0;
}

/* Side by side, the photo fills the full height of the 2×2 + CTA column
   instead of stopping at 4:5 and leaving an empty band beneath it. */
@media (min-width: 768px) {
	.mmsc-everyday {
		grid-template-columns: 4fr 6fr;
		align-items: stretch;
		gap: var(--mmsc-space-6);
	}

	.mmsc-everyday__media {
		aspect-ratio: auto;
		min-height: 100%;
	}

	.mmsc-everyday__media .mmsc-merch-img {
		object-position: 45% 50%;
	}
}

@media (min-width: 1024px) {
	.mmsc-everyday {
		grid-template-columns: 5fr 7fr;
		gap: var(--mmsc-space-7);
	}
}

/* 8. Little Details -------------------------------------------------------------
   Real close-ups from each product's own gallery; every tile opens the
   product it was photographed from.
     < 768   native swipe rail, ~2.3 tiles visible
     768+    4-up grid */

.mmsc-details {
	background-color: var(--mmsc-color-surface);
}

.mmsc-details__rail {
	list-style: none;
	margin: 0 calc(-1 * var(--mmsc-space-5));
	padding: 0 var(--mmsc-space-5) var(--mmsc-space-2);
	display: flex;
	gap: var(--mmsc-space-3);
	overflow-x: auto;
	overscroll-behavior-x: contain;
	scroll-snap-type: x mandatory;
	scroll-padding-inline: var(--mmsc-space-5);
	-webkit-overflow-scrolling: touch;
	scrollbar-width: none;
}

.mmsc-details__rail::-webkit-scrollbar {
	display: none;
}

.mmsc-details__item {
	flex: 0 0 calc((100vw - 2 * var(--mmsc-space-5) - 2 * var(--mmsc-space-3)) / 2.3);
	scroll-snap-align: start;
	margin: 0;
}

.mmsc-detail {
	display: flex;
	flex-direction: column;
	gap: var(--mmsc-space-1);
	text-decoration: none;
	color: var(--mmsc-color-text);
	border-radius: var(--mmsc-radius-md);
}

.mmsc-detail:focus-visible {
	outline: 2px solid var(--mmsc-color-accent);
	outline-offset: 3px;
}

.mmsc-detail__media {
	position: relative;
	display: block;
	aspect-ratio: 1 / 1;
	margin-bottom: var(--mmsc-space-2);
	border-radius: var(--mmsc-radius-md);
	overflow: hidden;
	background-color: var(--mmsc-color-border);
}

.mmsc-detail__media img {
	position: absolute;
	inset: 0;
	display: block;
	width: 100%;
	height: 100% !important;
	object-fit: cover;
}

.mmsc-detail__label {
	font-family: var(--mmsc-font-heading);
	font-weight: 600;
	font-size: 17px;
	line-height: 1.3;
}

.mmsc-detail__text {
	color: var(--mmsc-color-text-muted);
	font-size: 14px;
	line-height: 1.5;
}

.mmsc-detail__product {
	margin-top: var(--mmsc-space-1);
	color: var(--mmsc-color-primary);
	font-size: 13px;
	font-weight: 600;
}

@media (min-width: 768px) {
	.mmsc-details__rail {
		margin: 0;
		padding: 0;
		display: grid;
		grid-template-columns: repeat(4, minmax(0, 1fr));
		gap: var(--mmsc-space-5);
		overflow: visible;
		scroll-snap-type: none;
	}

	.mmsc-details__item {
		flex: none;
	}
}

/* 10. Loved by Families (renders only with 3+ genuine 4★+ reviews) ----------- */

.mmsc-reviews__list {
	list-style: none;
	margin: 0;
	padding: 0;
	display: grid;
	gap: var(--mmsc-space-5);
}

@media (min-width: 768px) {
	.mmsc-reviews__list {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}
}

.mmsc-review {
	margin: 0;
	padding: var(--mmsc-space-5);
	background-color: var(--mmsc-color-surface);
	border: 1px solid var(--mmsc-color-border);
	border-radius: var(--mmsc-radius-md);
}

.mmsc-review__stars {
	margin: 0 0 var(--mmsc-space-3);
	color: var(--mmsc-color-accent) !important;
	letter-spacing: 0.1em;
}

.mmsc-review__text {
	margin: 0 0 var(--mmsc-space-4);
	padding: 0;
	border: 0;
	font-size: 16px;
	line-height: 1.6;
	font-style: normal;
}

.mmsc-review__meta {
	margin: 0;
	color: var(--mmsc-color-text-muted) !important;
	font-size: 14px;
}

/* 10b. Customer Love — SAMPLE testimonials (local prototype only) -------------
   Without JavaScript / under reduced motion: a still row that swipes and
   snaps. With merch-motion.js (.is-moving): a slow, endless left → right
   drift over a list cloned for a seamless loop (moved per frame by the
   script; it pauses on hover, focus, touch and off-screen). */

.mmsc-section__head.mmsc-love__head {
	display: flex;
	align-items: flex-end;
	justify-content: space-between;
	gap: var(--mmsc-space-4);
	max-width: none;
	margin-bottom: 0;
}

.mmsc-love__head h2 {
	margin: 0;
}

.mmsc-home .mmsc-love__badge {
	display: inline-block;
	margin: 0 0 var(--mmsc-space-2);
	padding: 3px 10px;
	border: 1px solid var(--mmsc-color-border);
	border-radius: var(--mmsc-radius-pill);
	font-size: 11px;
	font-weight: 600;
	letter-spacing: 0.1em;
	line-height: 1.5;
	text-transform: uppercase;
	color: var(--mmsc-color-text-muted) !important;
}

.mmsc-love__viewport {
	margin-top: var(--mmsc-space-6);
	padding: var(--mmsc-space-1) var(--mmsc-space-5) var(--mmsc-space-2);
	overflow-x: auto;
	overscroll-behavior-x: contain;
	scroll-snap-type: x mandatory;
	scroll-padding-inline: var(--mmsc-space-5);
	scrollbar-width: none;
	-webkit-overflow-scrolling: touch;
}

.mmsc-love__viewport::-webkit-scrollbar {
	display: none;
}

.mmsc-love__track {
	display: flex;
	width: max-content;
}

.mmsc-home .mmsc-love__list {
	display: flex;
	gap: var(--mmsc-space-4);
	margin: 0;
	/* Trailing gap inside each copy, so copy-to-copy spacing is identical. */
	padding: 0 var(--mmsc-space-4) 0 0;
	list-style: none;
}

.mmsc-love__card {
	display: flex;
	flex: 0 0 min(300px, 78vw);
	flex-direction: column;
	margin: 0;
	padding: var(--mmsc-space-5);
	background-color: var(--mmsc-color-surface);
	border: 1px solid var(--mmsc-color-border);
	border-radius: var(--mmsc-radius-md);
	scroll-snap-align: start;
	box-sizing: border-box;
}

.mmsc-home .mmsc-love__stars {
	margin: 0 0 var(--mmsc-space-3);
	font-size: 14px;
	letter-spacing: 0.12em;
	color: var(--mmsc-color-accent) !important;
}

/* OceanWP styles every blockquote (rule, italics, padding). */
.mmsc-home blockquote.mmsc-love__text {
	flex: 1 0 auto;
	margin: 0 0 var(--mmsc-space-4);
	padding: 0;
	border: 0;
	background: none;
	quotes: none;
}

.mmsc-home blockquote.mmsc-love__text::before,
.mmsc-home blockquote.mmsc-love__text::after {
	content: none;
}

.mmsc-home .mmsc-love__text p {
	margin: 0;
	font-family: var(--mmsc-font-heading);
	font-size: 17px;
	font-style: normal;
	line-height: 1.55;
	color: var(--mmsc-color-text) !important;
}

.mmsc-home .mmsc-love__name {
	margin: 0;
	font-size: 14px;
	font-weight: 500;
	color: var(--mmsc-color-text-muted) !important;
}

.mmsc-home .mmsc-love__note {
	margin: var(--mmsc-space-4) 0 0;
	font-size: 13px;
	line-height: 1.5;
	color: var(--mmsc-color-text-muted) !important;
}

@media (min-width: 768px) {
	.mmsc-love__card {
		flex-basis: 320px;
		padding: var(--mmsc-space-6);
	}

	.mmsc-home .mmsc-love__list {
		gap: var(--mmsc-space-5);
		padding-right: var(--mmsc-space-5);
	}
}

/* Moving (merch-motion.js). */
.mmsc-love.is-moving .mmsc-love__viewport {
	padding-inline: 0;
	overflow: hidden;
	scroll-snap-type: none;
	touch-action: pan-y;
	cursor: grab;
}

.mmsc-love.is-moving.is-dragging .mmsc-love__viewport {
	cursor: grabbing;
	user-select: none;
}

.mmsc-love.is-moving .mmsc-love__track {
	will-change: transform;
}

/* Bottom-nav clearance: the fixed phone bottom nav already pads <body>
   (bottom-nav.css); the last section keeps its own breathing room too. */
@media (max-width: 767px) {
	.mmsc-final-cta {
		padding-bottom: var(--mmsc-space-8);
	}
}

/* Motion (blueprint §10) ------------------------------------------------------
   MO-01 hero settle · MO-03 reveal (merch-motion.js adds .is-pending to
   below-the-fold blocks, then removes it as they scroll in) · MO-04 media
   zoom on mouse hover/keyboard focus only · MO-06 press feedback.
   Everything sits behind prefers-reduced-motion: no-preference; content
   is fully visible with JavaScript off. */

@media (prefers-reduced-motion: no-preference) {
	@keyframes mmsc-hero-settle {
		from { transform: scale(1.03); }
		to { transform: none; }
	}

	@keyframes mmsc-rise {
		from { opacity: 0; transform: translateY(12px); }
		to { opacity: 1; transform: none; }
	}

	.mmsc-home-hero .mmsc-home-hero__slide.is-active .mmsc-hero__img {
		animation: mmsc-hero-settle 900ms cubic-bezier(0.2, 0.7, 0.2, 1) both;
	}

	.mmsc-home-hero .mmsc-home-hero__copy.is-active {
		animation: mmsc-rise 600ms 120ms ease-out both;
	}

	.mmsc-home-hero--slides .mmsc-home-hero__slide,
	.mmsc-home-hero--slides .mmsc-home-hero__copy {
		transition: opacity 800ms ease, visibility 0s linear 800ms;
	}

	.mmsc-home-hero--slides .mmsc-home-hero__slide.is-active,
	.mmsc-home-hero--slides .mmsc-home-hero__copy.is-active {
		transition: opacity 800ms ease, visibility 0s;
	}

	.mmsc-reveal {
		transition: opacity 500ms ease-out, transform 500ms ease-out;
	}

	.mmsc-reveal.is-pending {
		opacity: 0;
		transform: translateY(16px);
	}

	.mmsc-cat-card,
	.mmsc-detail {
		transition: transform 80ms ease;
	}

	.mmsc-cat-card:active,
	.mmsc-detail:active {
		transform: scale(0.98);
	}
}

@media (prefers-reduced-motion: no-preference) and (hover: hover) and (pointer: fine) {
	.mmsc-cat-card__media img,
	.mmsc-detail__media img,
	.mmsc-split__media img,
	.mmsc-feature__banner .mmsc-merch-img {
		transition: transform 400ms ease;
	}

	.mmsc-cat-card:hover .mmsc-cat-card__media img,
	.mmsc-cat-card:focus-visible .mmsc-cat-card__media img,
	.mmsc-detail:hover .mmsc-detail__media img,
	.mmsc-detail:focus-visible .mmsc-detail__media img,
	.mmsc-split__panel:hover .mmsc-split__media img {
		transform: scale(1.04);
	}

	.mmsc-feature__banner:hover .mmsc-merch-img {
		transform: scale(1.02);
	}
}
