/**
 * ClothB2B Child — components layer.
 *
 * Every page-level building block: header chrome, language switcher, hero,
 * category / fitting / product cards, stats, about, testimonials, CTA band,
 * footer, inquiry form, FAQ accordion, inner-page banner. Depends on
 * tokens.css + base.css.
 *
 * Layout uses CSS logical properties (margin-inline, padding-block, inset-inline)
 * wherever possible so RTL flips automatically; rtl.css only patches the rest.
 */

/* ============ Header ============ */
#masthead {
	position: relative;
	background: var(--cb-bg);
	border-bottom: 1px solid var(--cb-line);
	z-index: var(--cb-z-header);
}
/* Desktop: reserve right-side room for the absolute-positioned .cb-header-actions
 * cluster (CTA + language switcher) so Astra's primary nav doesn't run into it.
 *
 * Use MARGIN on the nav container, NOT PADDING on the menu/ul: padding shrinks a
 * flex menu's content box and makes the items wrap vertically (regression); margin
 * on .main-header-bar-navigation (a flex child in Astra's header row) shifts the
 * whole nav left as a unit, leaving the right-side gap for the cluster while the
 * menu stays horizontal. Tune --cb-header-reserve if the cluster width changes. */
#masthead {
	--cb-header-reserve: 16rem;
}
@media (min-width: 769px) {
	#masthead .main-header-bar-navigation,
	#masthead .ast-builder-menu-1,
	#masthead .site-primary-header-wrap .ast-builder-menu-1 {
		margin-inline-end: var(--cb-header-reserve);
	}
}
#masthead .site-title,
#masthead .site-title a {
	font-family: var(--cb-font-display);
	font-weight: 800;
	font-size: 1.5rem;
	letter-spacing: var(--cb-tracking-wide);
	color: var(--cb-ink);
	text-transform: uppercase;
	text-decoration: none;
}
#masthead .site-title a:hover { color: var(--cb-accent); }

/* Primary nav (Astra's .main-header-menu). */
.main-header-menu li > a {
	font-size: var(--cb-fs-sm);
	font-weight: 600;
	letter-spacing: var(--cb-tracking-wide);
	color: var(--cb-ink) !important;
	text-transform: uppercase;
	/* Compact horizontal padding so 7 items + the right-side actions cluster fit
	 * one row without wrapping or crowding on a typical laptop width. */
	padding-inline: var(--cb-s-3) !important;
	transition: color var(--cb-dur) var(--cb-ease);
}
.main-header-menu li > a:hover,
.main-header-menu li.current-menu-item > a { color: var(--cb-accent) !important; }

/* Top announcement bar (injected via astra_header_before). */
.cb-topbar {
	background: var(--cb-ink);
	color: #fff;
	font-size: var(--cb-fs-xs);
	letter-spacing: var(--cb-tracking-wide);
	text-align: center;
	padding: var(--cb-s-2) var(--cb-gutter);
}
.cb-topbar a { color: var(--cb-earth-200); text-decoration: underline; }
.cb-topbar a:hover { color: #fff; }

/* Right-side action cluster: header CTA + language switcher (one injected
 * container so the two stay aligned regardless of Astra's Header Builder). */
.cb-header-actions {
	position: absolute;
	inset-block-start: 50%;
	inset-inline-end: var(--cb-s-5);
	transform: translateY(-50%);
	z-index: var(--cb-z-dropdown);
	display: flex;
	align-items: center;
	gap: var(--cb-s-3);
	/* Transparent — the CTA button (solid) and lang toggle (bordered) carry their
	 * own surfaces, so no floating pill. The desktop reserve (--cb-header-reserve
	 * on .main-header-bar below) keeps the nav from sliding under this cluster. */
}
.cb-header-cta {
	white-space: nowrap;
}

/* Language switcher (rendered inside .cb-header-actions). */
.cb-lang-switcher { position: relative; }
.cb-lang-toggle {
	display: inline-flex;
	align-items: center;
	gap: var(--cb-s-2);
	background: transparent;
	border: 1px solid var(--cb-line);
	border-radius: var(--cb-radius-pill);
	padding: var(--cb-s-2) var(--cb-s-3);
	font-size: var(--cb-fs-xs);
	font-weight: 600;
	letter-spacing: var(--cb-tracking-wide);
	color: var(--cb-ink);
	cursor: pointer;
	transition: border-color var(--cb-dur) var(--cb-ease), color var(--cb-dur) var(--cb-ease);
}
.cb-lang-toggle:hover { border-color: var(--cb-ink); color: var(--cb-accent); }
.cb-lang-caret { transition: transform var(--cb-dur) var(--cb-ease); }
.cb-lang-list {
	position: absolute;
	inset-block-start: calc(100% + 8px);
	inset-inline-end: 0;
	min-width: 130px;
	max-height: 340px;
	overflow-y: auto;
	margin: 0;
	padding: var(--cb-s-2);
	list-style: none;
	background: #fff;
	border: 1px solid var(--cb-line);
	border-radius: var(--cb-radius);
	box-shadow: var(--cb-shadow);
	opacity: 0;
	visibility: hidden;
	transform: translateY(-6px);
	transition: opacity var(--cb-dur) var(--cb-ease), transform var(--cb-dur) var(--cb-ease), visibility var(--cb-dur);
}
.cb-lang-list a {
	display: flex;
	align-items: center;
	gap: var(--cb-s-2);
	padding: var(--cb-s-2) var(--cb-s-3);
	font-size: var(--cb-fs-xs);
	font-weight: 500;
	letter-spacing: var(--cb-tracking-wide);
	color: var(--cb-text);
	border-radius: var(--cb-radius-sm);
	text-decoration: none;
	transition: background-color var(--cb-dur-fast) var(--cb-ease);
}
.cb-lang-list a:hover { background: var(--cb-bg-alt); color: var(--cb-ink); }
.cb-lang-list li.is-current a { color: var(--cb-accent); font-weight: 700; }
.cb-lang-switcher:hover .cb-lang-list,
.cb-lang-switcher:focus-within .cb-lang-list,
.cb-lang-switcher.is-open .cb-lang-list {
	opacity: 1;
	visibility: visible;
	transform: translateY(0);
}
.cb-lang-switcher:hover .cb-lang-caret,
.cb-lang-switcher:focus-within .cb-lang-caret,
.cb-lang-switcher.is-open .cb-lang-caret { transform: rotate(180deg); }

/* ============ Hero ============ */
.cb-hero.cb-hero--compact { min-height: 52vh; }
.cb-hero.cb-hero--compact .cb-hero__title { font-size: var(--cb-fs-h1); }
.cb-hero {
	position: relative;
	min-height: 86vh;
	display: flex;
	align-items: center;
	background-color: var(--cb-warm-200);
	background-image: url("../images/hero.svg"); /* TODO: replace with a real hero photo */
	background-size: cover;
	background-position: center;
	color: #fff;
}
.cb-hero::after {
	content: "";
	position: absolute;
	inset: 0;
	/* Darker, more uniform overlay so white text keeps WCAG AA contrast even over
	 * the light SVG placeholder or a bright photo (min 0.50 vs the old 0.20). */
	background: linear-gradient(100deg, rgba(20, 20, 23, 0.72) 0%, rgba(20, 20, 23, 0.56) 50%, rgba(20, 20, 23, 0.50) 100%);
	pointer-events: none;
}
.cb-hero__inner {
	position: relative;
	z-index: 1;
	max-width: var(--cb-maxw);
	margin-inline: auto;
	padding-inline: var(--cb-gutter);
	width: 100%;
}
.cb-hero__content { max-width: 640px; }
/* Legibility booster for hero text over any background image. */
.cb-hero__eyebrow,
.cb-hero__title,
.cb-hero__sub { text-shadow: 0 1px 4px rgba(0, 0, 0, 0.35); }
.cb-hero__eyebrow {
	display: inline-block;
	font-size: var(--cb-fs-xs);
	font-weight: 700;
	letter-spacing: var(--cb-tracking-wider);
	text-transform: uppercase;
	color: var(--cb-earth-200);
	margin-bottom: var(--cb-s-4);
}
.cb-hero__title {
	font-size: var(--cb-fs-display);
	font-weight: 800;
	line-height: var(--cb-lh-tight);
	color: #fff;
	margin-bottom: var(--cb-s-4);
}
.cb-hero__sub {
	font-size: var(--cb-fs-lead);
	line-height: var(--cb-lh-body);
	color: rgba(255, 255, 255, 0.92);
	margin-bottom: var(--cb-s-6);
}
.cb-hero__actions { display: flex; flex-wrap: wrap; gap: var(--cb-s-3); }

/* ============ Hero carousel (standalone banner, above cb-hero) ============
 * Renders admin-managed carousel_slide posts (template-parts/home/cb-carousel.php).
 * Independent of .cb-hero: a medium-height banner that sits flush under the header.
 * Slides stack absolutely and crossfade via .is-active (assets/js/hero-carousel.js).
 * Zero slides → the partial outputs nothing and this block never appears. */
.cb-carousel {
	position: relative;
	height: clamp(150px, 20vh, 220px);
	overflow: hidden;
	isolation: isolate;        /* local stacking context for slides / overlay / controls */
	background-color: var(--cb-warm-200);
}
.cb-carousel__track { position: absolute; inset: 0; z-index: 1; }
.cb-carousel__slide {
	position: absolute;
	inset: 0;
	display: flex;
	align-items: center;
	background-size: cover;
	background-position: center;
	background-color: var(--cb-warm-200); /* fills letterboxing while the photo loads */
	opacity: 0;
	transition: opacity 0.8s ease;
	z-index: 1;
}
.cb-carousel__slide.is-active { opacity: 1; z-index: 2; }
/* Per-slide darkening gradient so white text keeps WCAG AA contrast over any photo. */
.cb-carousel__slide::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(100deg, rgba(20, 20, 23, 0.72) 0%, rgba(20, 20, 23, 0.56) 50%, rgba(20, 20, 23, 0.50) 100%);
	pointer-events: none;
}
.cb-carousel__inner {
	position: relative;        /* lifts content above the slide's ::after overlay */
	z-index: 1;
	max-width: var(--cb-maxw);
	margin-inline: auto;
	padding-inline: var(--cb-gutter);
	width: 100%;
}
.cb-carousel__content { max-width: 640px; }
.cb-carousel__title,
.cb-carousel__sub { text-shadow: 0 1px 4px rgba(0, 0, 0, 0.35); }
.cb-carousel__title {
	font-size: clamp(1.2rem, 2.4vw, 1.75rem);
	font-weight: 800;
	line-height: var(--cb-lh-tight);
	color: #fff;
	margin-bottom: var(--cb-s-2);
}
.cb-carousel__sub {
	font-size: clamp(0.85rem, 1.1vw, 1rem);
	line-height: var(--cb-lh-body);
	color: rgba(255, 255, 255, 0.92);
	margin-bottom: var(--cb-s-4);
}
/* Pagination dots — built by hero-carousel.js. */
.cb-carousel__dots {
	position: absolute;
	inset-inline: 0;
	bottom: var(--cb-s-2);
	z-index: 5;
	display: flex;
	justify-content: center;
	gap: var(--cb-s-2);
}
.cb-carousel__dot {
	width: 10px;
	height: 10px;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.55);
	cursor: pointer;
	transition: background var(--cb-dur) var(--cb-ease), transform var(--cb-dur) var(--cb-ease);
}
.cb-carousel__dot:hover { background: rgba(255, 255, 255, 0.9); }
.cb-carousel__dot.is-active { background: var(--cb-accent); transform: scale(1.15); }
.cb-carousel__dot:focus-visible { outline: 2px solid #fff; outline-offset: 3px; }
/* Prev / next arrows. */
.cb-carousel__arrow {
	position: absolute;
	top: 50%;
	transform: translateY(-50%);
	z-index: 5;
	width: 38px;
	height: 38px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	border: 0;
	border-radius: 50%;
	background: transparent;            /* no grey blob — just the chevron + shadow */
	color: #fff;
	filter: drop-shadow(0 1px 3px rgba(0, 0, 0, 0.55));
	cursor: pointer;
	transition: background var(--cb-dur) var(--cb-ease), transform var(--cb-dur) var(--cb-ease);
}
.cb-carousel__arrow:hover { background: rgba(255, 255, 255, 0.18); transform: translateY(-50%) scale(1.06); }
.cb-carousel__arrow:focus-visible { outline: 2px solid #fff; outline-offset: 3px; }
.cb-carousel__arrow--prev { inset-inline-start: var(--cb-s-4); }
.cb-carousel__arrow--next { inset-inline-end: var(--cb-s-4); }
@media (max-width: 768px) {
	.cb-carousel { height: clamp(120px, 24vh, 170px); }
	.cb-carousel__arrow { display: none; }          /* touch + dots on mobile */
	.cb-carousel__title { font-size: clamp(1rem, 3.6vw, 1.3rem); }
	.cb-carousel__dots { bottom: var(--cb-s-1); }
}
/* Let the homepage content sit flush under the header (no top padding gap) so the
 * carousel banner sits directly beneath the nav. Front-page only (body.cb-front). */
body.cb-front .site-content,
body.cb-front .ast-container,
body.cb-front .site-main { padding-top: 0 !important; margin-top: 0 !important; }

/* ============ Category / fitting cards (Shop by Category) ============ */
.cb-cat-grid {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: var(--cb-s-4);
}
.cb-cat-card {
	position: relative;
	display: block;
	aspect-ratio: 3 / 4;
	overflow: hidden;
	border-radius: var(--cb-radius);
	text-decoration: none;
	color: #fff;
	box-shadow: var(--cb-shadow-sm);
}
.cb-cat-card__img {
	position: absolute;
	inset: 0;
	background-color: var(--cb-warm-300);
	background-size: cover;
	background-position: center;
	transition: transform var(--cb-dur-slow) var(--cb-ease);
}
.cb-cat-card::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(to top, rgba(20, 20, 23, 0.72), rgba(20, 20, 23, 0.05) 55%);
	transition: background var(--cb-dur) var(--cb-ease);
}
.cb-cat-card:hover .cb-cat-card__img { transform: scale(1.07); }
.cb-cat-card:hover::after { background: linear-gradient(to top, rgba(20, 20, 23, 0.82), rgba(20, 20, 23, 0.15) 60%); }
.cb-cat-card__label {
	position: absolute;
	inset-block-end: var(--cb-s-5);
	inset-inline-start: var(--cb-s-5);
	z-index: 1;
}
.cb-cat-card__name {
	display: block;
	font-size: var(--cb-fs-h4);
	font-weight: 700;
	letter-spacing: var(--cb-tracking-wide);
	text-transform: uppercase;
}
.cb-cat-card__shop {
	display: inline-flex;
	align-items: center;
	gap: var(--cb-s-2);
	font-size: var(--cb-fs-xs);
	font-weight: 600;
	letter-spacing: var(--cb-tracking-wide);
	text-transform: uppercase;
	color: rgba(255, 255, 255, 0.9);
	margin-block-start: var(--cb-s-2);
}

/* Legacy fitting grid (kept for the front-page Shop by Fitting partial). */
.cb-fitting-grid {
	display: grid;
	grid-template-columns: repeat(6, 1fr);
	gap: var(--cb-s-4);
}
.cb-fit-card {
	position: relative;
	display: block;
	aspect-ratio: 1 / 1;
	overflow: hidden;
	border-radius: var(--cb-radius);
	text-decoration: none;
	color: #fff;
	box-shadow: var(--cb-shadow-sm);
}
.cb-fit-card__img {
	position: absolute;
	inset: 0;
	background-size: cover;
	background-position: center;
	transition: transform var(--cb-dur-slow) var(--cb-ease);
}
.cb-fit-card::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(to top, rgba(20, 20, 23, 0.6), rgba(20, 20, 23, 0) 50%);
	transition: background var(--cb-dur) var(--cb-ease);
}
.cb-fit-card:hover .cb-fit-card__img { transform: scale(1.06); }
.cb-fit-card:hover::after { background: linear-gradient(to top, rgba(20, 20, 23, 0.75), rgba(20, 20, 23, 0.1) 55%); }
.cb-fit-card__label {
	position: absolute;
	inset-block-end: var(--cb-s-4);
	inset-inline: 0;
	z-index: 1;
	text-align: center;
	font-size: var(--cb-fs-xs);
	font-weight: 700;
	letter-spacing: var(--cb-tracking-wider);
	text-transform: uppercase;
}

/* ============ Product cards (New Arrivals + shared with WC loop) ============ */
.cb-product-grid {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: var(--cb-s-5);
}
.cb-product-card {
	position: relative;
	display: flex;
	flex-direction: column;
	text-decoration: none;
	color: var(--cb-ink);
	background: #fff;
	border-radius: var(--cb-radius);
	overflow: hidden;
	box-shadow: var(--cb-shadow-xs);
	transition: box-shadow var(--cb-dur) var(--cb-ease), transform var(--cb-dur) var(--cb-ease);
}
.cb-product-card:hover { box-shadow: var(--cb-shadow-lg); transform: translateY(-4px); }
.cb-product-card__media {
	position: relative;
	aspect-ratio: 4 / 5;
	overflow: hidden;
	background-color: var(--cb-warm-200);
}
.cb-product-card__img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform var(--cb-dur-slow) var(--cb-ease);
}
.cb-product-card:hover .cb-product-card__img { transform: scale(1.05); }
.cb-product-card__body {
	display: flex;
	flex-direction: column;
	gap: var(--cb-s-3);
	padding: var(--cb-s-4);
}
.cb-product-card__title {
	font-size: var(--cb-fs-sm);
	font-weight: 700;
	letter-spacing: var(--cb-tracking-wide);
	text-transform: uppercase;
	margin: 0;
	color: var(--cb-ink);
}
.cb-product-card__title:hover { color: var(--cb-accent); }
.cb-product-card__inquire {
	align-self: flex-start;
}

/* ============ Layout wrappers (text columns / grid children) ============
 * Container classes referenced by the templates; they are grid/flex children
 * so layout comes from the parent, these rules add text-width + spacing only.
 */
.cb-split__content { max-width: 540px; }
.cb-split__content > :last-child { margin-bottom: 0; }
.cb-about__content { max-width: 520px; }
.cb-inquiry-info { min-width: 0; }
.cb-inquiry-form-wrap { min-width: 0; }
.cb-inquiry-contact {
	margin-top: var(--cb-s-5);
	font-size: var(--cb-fs-sm);
	color: var(--cb-muted);
}
.cb-inquiry-contact a { color: var(--cb-ink); font-weight: 600; text-decoration: underline; }
.cb-footer__col { min-width: 0; }
.cb-lang-current { font: inherit; color: inherit; }

.cb-empty {
	grid-column: 1 / -1;
	text-align: center;
	color: var(--cb-muted);
	padding: var(--cb-s-7) 0;
}

/* ============ Stats strip ============ */
.cb-stats {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: var(--cb-s-5);
}
.cb-stat { text-align: center; }
.cb-stat__num {
	display: block;
	font-family: var(--cb-font-display);
	font-size: clamp(2rem, 4vw, 3rem);
	font-weight: 800;
	line-height: 1;
	color: var(--cb-ink);
	margin-bottom: var(--cb-s-2);
}
.cb-stat__num--accent { color: var(--cb-accent); }
.cb-stat__label {
	font-size: var(--cb-fs-xs);
	font-weight: 600;
	letter-spacing: var(--cb-tracking-wider);
	text-transform: uppercase;
	color: var(--cb-muted);
}

/* ============ Company Introduction (about) ============ */
.cb-about__inner {
	display: grid;
	grid-template-columns: 1.05fr 1fr;
	gap: var(--cb-s-7);
	align-items: center;
}
.cb-about__media {
	background: var(--cb-bg-alt);
	border: 1px solid var(--cb-line);
	border-radius: var(--cb-radius-lg);
	overflow: hidden;
	box-shadow: var(--cb-shadow);
}
.cb-about__media iframe,
.cb-about__media .cb-about__video,
.cb-about__media .cb-about__poster,
.cb-about__media .cb-about__embed > iframe {
	width: 100%;
	aspect-ratio: 16 / 9;
	height: auto;
	display: block;
	border: 0;
}
.cb-about__media .cb-about__video,
.cb-about__media .cb-about__poster { object-fit: cover; }
.cb-about__title { text-align: start; margin-bottom: var(--cb-s-4); }
.cb-about__text { color: var(--cb-text); font-size: var(--cb-fs-body); line-height: var(--cb-lh-body); }
.cb-about__text p { margin: 0 0 var(--cb-s-4); }
.cb-about__text p:last-child { margin-bottom: var(--cb-s-5); }

/* ============ Testimonials ============ */
.cb-testi-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: var(--cb-s-5);
}
.cb-testi {
	background: #fff;
	border: 1px solid var(--cb-line);
	border-radius: var(--cb-radius-lg);
	padding: var(--cb-s-6);
	box-shadow: var(--cb-shadow-sm);
}
.cb-testi__quote {
	font-size: var(--cb-fs-body);
	line-height: var(--cb-lh-body);
	color: var(--cb-text);
	margin: 0 0 var(--cb-s-5);
	position: relative;
}
.cb-testi__quote::before {
	content: "\201C";
	display: block;
	font-family: Georgia, serif;
	font-size: 3rem;
	line-height: 0.6;
	color: var(--cb-earth-200);
	margin-bottom: var(--cb-s-3);
}
.cb-testi__author { display: flex; align-items: center; gap: var(--cb-s-3); }
.cb-testi__avatar {
	width: 44px;
	height: 44px;
	border-radius: 50%;
	object-fit: cover;
	background: var(--cb-bg-alt);
}
.cb-testi__name { font-weight: 700; color: var(--cb-ink); font-size: var(--cb-fs-sm); }
.cb-testi__role { font-size: var(--cb-fs-xs); color: var(--cb-muted); }

/* ============ CTA band ============ */
.cb-cta {
	position: relative;
	background: var(--cb-ink);
	color: #fff;
	text-align: center;
	padding-block: var(--cb-s-9);
	overflow: hidden;
}
.cb-cta::before {
	content: "";
	position: absolute;
	inset: 0;
	background: radial-gradient(circle at 20% 30%, rgba(37, 99, 235, 0.28), transparent 50%),
	            radial-gradient(circle at 80% 70%, rgba(37, 99, 235, 0.18), transparent 45%);
	pointer-events: none;
}
.cb-cta__inner { position: relative; z-index: 1; max-width: 720px; margin-inline: auto; padding-inline: var(--cb-gutter); }
.cb-cta__title { font-size: var(--cb-fs-h1); color: #fff; margin-bottom: var(--cb-s-4); }
.cb-cta__sub { font-size: var(--cb-fs-lead); color: rgba(255, 255, 255, 0.85); margin-bottom: var(--cb-s-6); }

/* ============ Inner-page banner (Shop / category / Who We Are / FAQ) ============ */
.cb-page-banner {
	background: var(--cb-bg-alt);
	border-block-end: 1px solid var(--cb-line);
	padding-block: var(--cb-s-7);
	text-align: center;
}
.cb-page-banner__title { font-size: var(--cb-fs-h1); margin: 0 0 var(--cb-s-2); }
.cb-page-banner__desc { color: var(--cb-muted); max-width: 640px; margin-inline: auto; }

/* ============ Footer ============ */
.cb-footer {
	background: var(--cb-ink-900);
	color: rgba(255, 255, 255, 0.75);
	padding-block: var(--cb-s-9) var(--cb-s-6);
}
.cb-footer__cols {
	display: grid;
	grid-template-columns: 1.4fr 1fr 1fr 1.2fr;
	gap: var(--cb-s-6);
	max-width: var(--cb-maxw);
	margin-inline: auto;
	padding-inline: var(--cb-gutter);
}
.cb-footer h4,
.cb-footer .cb-footer__title {
	color: #fff;
	font-size: var(--cb-fs-sm);
	font-weight: 700;
	letter-spacing: var(--cb-tracking-wider);
	text-transform: uppercase;
	margin: 0 0 var(--cb-s-4);
}
.cb-footer__brand-name {
	font-family: var(--cb-font-display);
	font-weight: 800;
	font-size: 1.4rem;
	letter-spacing: var(--cb-tracking-wide);
	text-transform: uppercase;
	color: #fff;
	display: block;
	margin-bottom: var(--cb-s-3);
}
.cb-footer p { font-size: var(--cb-fs-sm); line-height: var(--cb-lh-body); }
.cb-footer ul { list-style: none; margin: 0; padding: 0; }
.cb-footer ul li { margin-bottom: var(--cb-s-2); }
.cb-footer ul a {
	color: rgba(255, 255, 255, 0.7);
	font-size: var(--cb-fs-sm);
	text-decoration: none;
	transition: color var(--cb-dur) var(--cb-ease);
}
.cb-footer ul a:hover { color: var(--cb-accent); }
.cb-footer__contact li { display: flex; gap: var(--cb-s-2); align-items: baseline; }
.cb-footer__social { display: flex; gap: var(--cb-s-3); margin-top: var(--cb-s-4); }
.cb-footer__social a {
	display: inline-flex;
	width: 36px; height: 36px;
	align-items: center; justify-content: center;
	border: 1px solid rgba(255, 255, 255, 0.2);
	border-radius: 50%;
	color: rgba(255, 255, 255, 0.8);
	transition: all var(--cb-dur) var(--cb-ease);
}
.cb-footer__social a:hover { background: var(--cb-accent); border-color: var(--cb-accent); color: #fff; }

/* Astra's bottom copyright bar (stays beneath our columns). */
.site-footer .ast-footer-override,
.ast-footer-copyright {
	background: var(--cb-ink-900) !important;
	color: rgba(255, 255, 255, 0.6) !important;
	font-size: var(--cb-fs-xs);
}
.ast-footer-copyright a { color: var(--cb-earth-200) !important; }

/* ============ Back-to-top button ============ */
.cb-to-top {
	position: fixed;
	inset-block-end: var(--cb-s-5);
	inset-inline-end: var(--cb-s-5);
	z-index: var(--cb-z-overlay);
	width: 46px;
	height: 46px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	background: var(--cb-ink);
	color: #fff;
	border: 0;
	border-radius: 50%;
	box-shadow: var(--cb-shadow);
	cursor: pointer;
	opacity: 0;
	visibility: hidden;
	transform: translateY(8px);
	transition: opacity var(--cb-dur) var(--cb-ease), transform var(--cb-dur) var(--cb-ease), visibility var(--cb-dur), background-color var(--cb-dur) var(--cb-ease);
}
.cb-to-top.is-visible { opacity: 1; visibility: visible; transform: translateY(0); }
.cb-to-top:hover { background: var(--cb-accent); color: #fff; }
.cb-to-top svg { width: 20px; height: 20px; }

/* ============ Touch-device hover neutralization ============
 * On touch screens a :hover state can "stick" after a tap, leaving cards
 * zoomed/lifted. Neutralize the transform-based hovers on hover:none devices;
 * colour hovers are harmless and left alone. */
@media (hover: none) {
	.cb-cat-card:hover .cb-cat-card__img,
	.cb-fit-card:hover .cb-fit-card__img,
	.cb-product-card:hover .cb-product-card__img,
	.cb-product-card:hover,
	.cb-feature:hover,
	.cb-btn:hover,
	.cb-to-top:hover { transform: none; }
}

/* ============ Inquiry form ([clothb2b_inquiry_form]) ============ */
.clothb2b-inquiry {
	max-width: 640px;
	margin: var(--cb-s-5) auto;
}
.clothb2b-inquiry__msg {
	padding: var(--cb-s-3) var(--cb-s-4);
	border-radius: var(--cb-radius);
	border: 1px solid var(--cb-line);
	font-size: var(--cb-fs-sm);
}
.clothb2b-inquiry__msg--ok { background: #e9f7ec; border-color: #bfe3c8; color: #1f6b34; }
.clothb2b-inquiry__msg--err { background: #fdeeee; border-color: #f0c4c4; color: #9b2c2c; }
.clothb2b-inquiry__product { font-size: var(--cb-fs-sm); color: var(--cb-muted); margin: 0 0 var(--cb-s-4); }
.clothb2b-inquiry__row { margin: 0 0 var(--cb-s-4); }
.clothb2b-inquiry__row label {
	display: block;
	font-size: var(--cb-fs-sm);
	font-weight: 700;
	margin-bottom: var(--cb-s-2);
	color: var(--cb-ink);
}
.clothb2b-inquiry__row .required { color: var(--cb-accent); }
.clothb2b-inquiry__row input[type="text"],
.clothb2b-inquiry__row input[type="email"],
.clothb2b-inquiry__row textarea { /* uses .cb-field look */
	width: 100%;
	padding: var(--cb-s-3) var(--cb-s-4);
	border: 1px solid var(--cb-line);
	border-radius: var(--cb-radius);
	font: inherit;
	font-size: var(--cb-fs-sm);
	color: var(--cb-text);
	background: #fff;
	transition: border-color var(--cb-dur) var(--cb-ease), box-shadow var(--cb-dur) var(--cb-ease);
}
.clothb2b-inquiry__row input:focus,
.clothb2b-inquiry__row textarea:focus {
	outline: none;
	border-color: var(--cb-accent);
	box-shadow: 0 0 0 3px var(--cb-earth-100);
}
.clothb2b-inquiry__actions { margin: var(--cb-s-2) 0 0; }

/* Inquiry page two-column layout (optional wrapper around the shortcode). */
.cb-inquiry-layout { display: grid; grid-template-columns: 1fr 1.1fr; gap: var(--cb-s-7); align-items: start; }
.cb-inquiry-info h2 { font-size: var(--cb-fs-h2); }
.cb-inquiry-info ul { list-style: none; margin: var(--cb-s-4) 0; padding: 0; }
.cb-inquiry-info ul li { display: flex; gap: var(--cb-s-3); margin-bottom: var(--cb-s-3); color: var(--cb-text); }
.cb-inquiry-info ul li::before {
	content: "";
	flex: 0 0 auto;
	width: 22px; height: 22px;
	margin-block-start: 2px;
	border-radius: 50%;
	background: var(--cb-earth-100) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232563EB' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6L9 17l-5-5'/%3E%3C/svg%3E") center/14px no-repeat;
}

/* ============ FAQ accordion ============ */
.cb-faq { max-width: var(--cb-maxw-narrow); margin-inline: auto; }
.cb-faq__group { margin-bottom: var(--cb-s-5); }
.cb-faq__group-title {
	font-size: var(--cb-fs-h4);
	font-weight: 700;
	color: var(--cb-ink);
	margin: 0 0 var(--cb-s-3);
}
.cb-faq details {
	border: 1px solid var(--cb-line);
	border-radius: var(--cb-radius);
	background: #fff;
	margin-bottom: var(--cb-s-3);
	box-shadow: var(--cb-shadow-xs);
	overflow: hidden;
}
.cb-faq details[open] { box-shadow: var(--cb-shadow-sm); }
.cb-faq summary {
	list-style: none;
	cursor: pointer;
	padding: var(--cb-s-4) var(--cb-s-5);
	font-weight: 600;
	color: var(--cb-ink);
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: var(--cb-s-4);
}
.cb-faq summary::-webkit-details-marker { display: none; }
.cb-faq summary::after {
	content: "";
	flex: 0 0 auto;
	width: 14px; height: 14px;
	background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2361616A' stroke-width='2.5' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") center/contain no-repeat;
	transition: transform var(--cb-dur) var(--cb-ease);
}
.cb-faq details[open] summary::after { transform: rotate(180deg); }
.cb-faq__answer { padding: 0 var(--cb-s-5) var(--cb-s-5); color: var(--cb-text); line-height: var(--cb-lh-body); }

/* ============ Who We Are capabilities grid ============ */
.cb-features-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--cb-s-5); }
.cb-feature {
	background: #fff;
	border: 1px solid var(--cb-line);
	border-radius: var(--cb-radius-lg);
	padding: var(--cb-s-6);
	text-align: center;
	transition: box-shadow var(--cb-dur) var(--cb-ease), transform var(--cb-dur) var(--cb-ease);
}
.cb-feature:hover { box-shadow: var(--cb-shadow); transform: translateY(-3px); }
.cb-feature__icon {
	width: 56px; height: 56px;
	margin: 0 auto var(--cb-s-4);
	display: flex; align-items: center; justify-content: center;
	border-radius: 50%;
	background: var(--cb-earth-50);
	color: var(--cb-accent);
}
.cb-feature__title { font-size: var(--cb-fs-h4); margin-bottom: var(--cb-s-2); }
.cb-feature__desc { color: var(--cb-muted); font-size: var(--cb-fs-sm); margin: 0; }

/* Split image+text block (About / Who We Are story). */
.cb-split { display: grid; grid-template-columns: 1fr 1fr; gap: var(--cb-s-7); align-items: center; }
.cb-split--reverse .cb-split__media { order: 2; }
.cb-split__media img,
.cb-split__media .cb-split__media-img {
	width: 100%;
	aspect-ratio: 4 / 3;
	object-fit: cover;
	border-radius: var(--cb-radius-lg);
	background: var(--cb-bg-alt);
	box-shadow: var(--cb-shadow);
}

/* Certifications / logo grid. */
.cb-logo-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--cb-s-5); }
.cb-logo-item {
	display: flex; align-items: center; justify-content: center;
	aspect-ratio: 2 / 1;
	background: #fff;
	border: 1px solid var(--cb-line);
	border-radius: var(--cb-radius);
	color: var(--cb-muted);
	font-weight: 700;
	letter-spacing: var(--cb-tracking-wide);
}

/* ============ Blog / News cards (Astra archive output) ============ */
.ast-article-post {
	background: #fff;
	border: 1px solid var(--cb-line);
	border-radius: var(--cb-radius);
	overflow: hidden;
	box-shadow: var(--cb-shadow-xs);
	transition: box-shadow var(--cb-dur) var(--cb-ease), transform var(--cb-dur) var(--cb-ease);
}
.ast-article-post:hover {
	box-shadow: var(--cb-shadow-lg);
	transform: translateY(-4px);
}
.ast-blog-featured-section .post-thumb img,
.ast-article-post .post-thumb img {
	width: 100%;
	aspect-ratio: 16 / 10;
	object-fit: cover;
	transition: transform var(--cb-dur-slow) var(--cb-ease);
}
.ast-article-post:hover .ast-blog-featured-section .post-thumb img { transform: scale(1.04); }
.ast-article-post .entry-title,
.ast-article-post .entry-title a {
	font-size: var(--cb-fs-h4);
	font-weight: 700;
	color: var(--cb-ink);
	text-decoration: none;
}
.ast-article-post .entry-title a:hover { color: var(--cb-accent); }
.ast-article-post .entry-meta,
.ast-article-post .cat-links,
.ast-article-post .tags-links {
	font-size: var(--cb-fs-xs);
	color: var(--cb-muted);
}
.ast-article-post .cat-links a { color: var(--cb-accent); font-weight: 600; }
.ast-article-post .entry-content,
.ast-article-post .entry-summary {
	color: var(--cb-text);
	font-size: var(--cb-fs-sm);
	line-height: var(--cb-lh-body);
}
.ast-article-post .read-more a {
	display: inline-flex;
	font-size: var(--cb-fs-xs);
	font-weight: 700;
	letter-spacing: var(--cb-tracking-wide);
	text-transform: uppercase;
	color: var(--cb-accent);
}

/* Single post. */
.ast-single-post .entry-header .entry-title { font-size: var(--cb-fs-h1); }
.ast-single-post .entry-meta { color: var(--cb-muted); font-size: var(--cb-fs-sm); margin-bottom: var(--cb-s-5); }

/* Blog pagination (Astra .ast-pagination). */
.ast-pagination .page-numbers,
.ast-pagination a,
.ast-pagination span {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 42px;
	height: 42px;
	margin: 0 2px;
	border: 1px solid var(--cb-line);
	border-radius: var(--cb-radius);
	color: var(--cb-ink) !important;
	text-decoration: none;
	font-weight: 600;
	transition: all var(--cb-dur) var(--cb-ease);
}
.ast-pagination .page-numbers.current,
.ast-pagination .page-numbers:hover {
	background: var(--cb-ink);
	color: #fff !important;
	border-color: var(--cb-ink);
}

/* ============ Responsive ============ */

/* ============ 手机端主菜单：两行平铺常驻 ============
 * 基于线上 Astra 4.13.6 实测 DOM（curl 抓取首页 header 确认）：
 *   #masthead
 *   ├ #ast-desktop-header … ul#ast-hf-menu-1       桌面菜单（移动端保持隐藏）
 *   ├ #ast-mobile-header
 *   │   ├ .ast-button-wrap                          汉堡按钮
 *   │   └ .ast-mobile-header-content → ul#ast-hf-mobile-menu  移动菜单（默认点汉堡才展开）
 *   └ .cb-header-actions                            语言开关+CTA（absolute，独立于上述容器）
 * 沿用 Astra 的 mobile-header（有原生移动适配）：隐藏汉堡、让移动菜单内容常驻、
 * 把 ul#ast-hf-mobile-menu 从纵向堆叠改成横向 wrap 两行居中。
 * 作用域 body.ast-header-break-point 是 Astra 按 UA 在移动端给 body 加的类
 * （桌面 UA 是 body.ast-desktop，整段不生效，桌面端零影响）。
 * ⚠ 本地无法验证；部署后请真机第一时间核实，异常则注释本段即恢复原生汉堡。 */
body.ast-header-break-point .ast-button-wrap { display: none !important; }
body.ast-header-break-point .ast-mobile-header-content { display: block !important; }
body.ast-header-break-point #ast-hf-mobile-menu {
	display: flex !important;
	flex-direction: row !important;
	flex-wrap: wrap;
	justify-content: center;
	column-gap: var(--cb-s-4);
	row-gap: var(--cb-s-1);
	padding-block: var(--cb-s-2);
	border-top: 1px solid var(--cb-line);
}
body.ast-header-break-point #ast-hf-mobile-menu > li { width: auto !important; }
body.ast-header-break-point #ast-hf-mobile-menu > li > a {
	padding-inline: var(--cb-s-2) !important;
	font-size: var(--cb-fs-xs);
	line-height: 2;
}
/* 语言开关移到右上（logo 行），避开下方平铺菜单。 */
body.ast-header-break-point .cb-header-actions {
	inset-block-start: var(--cb-s-2);
	inset-block-end: auto;
	inset-inline-end: var(--cb-s-3);
	transform: none;
	gap: var(--cb-s-2);
}
body.ast-header-break-point .cb-header-cta { display: none; }
body.ast-header-break-point .cb-lang-toggle { padding: var(--cb-s-1) var(--cb-s-2); font-size: var(--cb-fs-xs); }
body.ast-header-break-point .cb-lang-list { min-width: 112px; }

@media (max-width: 1024px) {
	.cb-cat-grid { grid-template-columns: repeat(3, 1fr); }
	.cb-product-grid { grid-template-columns: repeat(3, 1fr); }
	.cb-fitting-grid { grid-template-columns: repeat(3, 1fr); }
	.cb-stats { grid-template-columns: repeat(2, 1fr); }
	.cb-testi-grid { grid-template-columns: repeat(2, 1fr); }
	.cb-features-grid { grid-template-columns: repeat(2, 1fr); }
	.cb-logo-grid { grid-template-columns: repeat(3, 1fr); }
	.cb-footer__cols { grid-template-columns: 1fr 1fr; gap: var(--cb-s-7) var(--cb-s-5); }
}
@media (max-width: 768px) {
	.cb-hero { min-height: 72vh; }
	.cb-cat-grid { grid-template-columns: repeat(2, 1fr); }
	.cb-product-grid { grid-template-columns: repeat(2, 1fr); }
	.cb-fitting-grid { grid-template-columns: repeat(2, 1fr); }
	.cb-about__inner,
	.cb-split,
	.cb-inquiry-layout { grid-template-columns: 1fr; gap: var(--cb-s-5); }
	.cb-split--reverse .cb-split__media { order: 0; }
	.cb-about__title { text-align: center; }
	.cb-features-grid { grid-template-columns: 1fr; }
	/* Fitting card labels are uppercase + tracked; at 2-up on a phone they clip. */
	.cb-fit-card__label { letter-spacing: var(--cb-tracking-wide); }
	/* 移动端 header（菜单平铺/语言开关）规则统一在上方 body.ast-header-break-point 段。 */
}
@media (max-width: 480px) {
	.cb-cat-grid,
	.cb-fitting-grid,
	.cb-product-grid { grid-template-columns: repeat(2, 1fr); gap: var(--cb-s-3); }
	.cb-stats { grid-template-columns: 1fr; }
	.cb-testi-grid { grid-template-columns: 1fr; }
	.cb-logo-grid { grid-template-columns: repeat(2, 1fr); }
	.cb-footer__cols { grid-template-columns: 1fr; }
	.cb-hero { min-height: 68vh; }
	/* Testimonial decorative quote glyph (3rem) dominates a single-column card. */
	.cb-testi__quote::before { font-size: 2rem; }
	.cb-lang-list { min-width: 104px; }
}

/* Narrowest phones — prevent horizontal overflow. */
@media (max-width: 360px) {
	.cb-hero { min-height: 64vh; }
	.cb-lang-list { min-width: 96px; }
}

/* Honor prefers-reduced-motion: instant slide transitions. Autoplay still runs
 * (marketing requirement) but without the fade animation. */
@media (prefers-reduced-motion: reduce) {
	.cb-carousel__slide { transition: none; }
}
