/* ═══════════════════════════════════════════════════════════════════════════
   New sections: works, reviews, archive header, single product, SEO/FAQ
   (enqueued from functions.php alongside style.css)
   ═══════════════════════════════════════════════════════════════════════════ */

/* Headings inherit a global `h1..h6 { color: stone-950 }` rule, so on dark
   sections they'd be near-invisible. Any container with an explicit dark
   background gets light headings (higher specificity than the global rule,
   no !important needed). */
.has-stone-950-background-color :is(h1, h2, h3, h4, h5, h6),
.has-primary-500-background-color :is(h1, h2, h3, h4, h5, h6){
	color: var(--wp--preset--color--stone-50);
}

/* ─── Групи зображень з акцентом ──────────────────────────────────────────── */

/* Base layout: N images in a row, equal share, GSAP grows the `.is-accent`
   item's flex-grow on scroll (see initImageAccentGroups in main.js) while
   the rest — all still flex-grow:1 — shrink to match automatically. Working
   with flex-grow (not width/flex-basis %) is what lets the same JS handle
   both row and column direction: flex-grow always acts along the main axis. */
.image-accent-group{
	display: flex;
	flex-direction: row;
	align-items: stretch;
	/* `--iag-aspect-ratio` is set inline per-instance by render.php (editable
	   in the block's inspector, default 4/5) so the group always has a real
	   height regardless of what its images' own native ratios are — mobile
	   stacks, a text column without a stretched sibling, etc. `aspect-ratio`
	   only takes over when `height:100%` can't resolve to anything (no
	   definite parent height); wherever the parent DOES provide one (e.g. a
	   stretched column next to text, like the CTA card), that wins instead. */
	aspect-ratio: var(--iag-aspect-ratio, 4 / 5);
	flex-wrap: nowrap;
	gap: var(--gap);
	max-width: 100%;
}

.image-accent-group[data-direction="column"]{
	flex-direction: column;
	width: 100%;
}

.image-accent-group .image-accent-group__item{
	flex: 1 1 0;
	position: relative;
	overflow: hidden;
	border-radius: var(--border-radius);
}

.image-accent-group .image-accent-group__item img{
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	will-change: transform;
}

/* ─── Наші роботи ─────────────────────────────────────────────────────────── */

.works-block{
	display: flex;
	flex-direction: column;
	gap: 2rem;
}

/* Homepage: 4×2 grid on desktop. NOTE — class deliberately avoids the words
   "slider"/"carousel": main.js auto-attaches mouse drag-scroll (and a grab
   cursor) to any element matching those, which is wrong for a static grid. */
.works-home{
	display: grid;
	grid-template-columns: repeat(var(--works-cols, 4), 1fr);
	gap: var(--gap);
}

/* Tablet & mobile: horizontal scroll strip, card width is block-configurable
   (--works-card-w, default 80vw). */
@media (max-width: 1199.98px){
	.works-home{
		display: flex;
		flex-wrap: nowrap;
		overflow-x: auto;
		gap: var(--gap);
		scroll-snap-type: x mandatory;
		scrollbar-width: none;
	}
	.works-home::-webkit-scrollbar{
		display: none;
	}
	.works-home .work-card{
		flex: 0 0 var(--works-card-w, 80vw);
		scroll-snap-align: start;
	}
}

/* Product page grid */
.works-grid{
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr));
	gap: var(--gap);
}

.work-card{
	position: relative;
	display: flex;
	flex-direction: column;
	justify-content: flex-end;
	aspect-ratio: 4 / 5;
	border-radius: var(--border-radius);
	overflow: hidden;
	padding: 1rem;
	gap: 0.75rem;
	color: var(--wp--preset--color--stone-50);
	background-color: var(--wp--preset--color--stone-950);
	border: 1px solid transparent;
	text-decoration: none;
	isolation: isolate;
	transition: border-color 0.35s ease;
	&:hover{
		border-color: var(--wp--preset--color--stone-50);
	}
}
.work-card .work-card__img{
	position: absolute;
	inset: 0;
	z-index: -2;
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform 0.6s var(--ease);
}
.work-card::before{
	content: "";
	position: absolute;
	inset: 0;
	z-index: -1;
	background: linear-gradient(180deg, rgba(0,0,0,0.05) 50%, rgba(0,0,0,0.5) 100%);
	transition: background-color 0.35s ease;
}
.work-card__label{
	font-weight: 400;
	line-height: 1.3;
	text-wrap: balance;
}
/* Inner span so the lift transform is scoped to the glyph, not the flex box —
   same technique as .link-card__title-text. */
.work-card__label-text{
	display: inline-block;
}
/* Button is styled identically to the product card's "Детальніше" action
   (.pc-actions__details): translucent dark chip, light text, blur. */
.work-card__cta{
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: max-content;
	padding: 0.5em 1em;
	border-radius: var(--border-radius);
	background-color: var(--wp--preset--color--stone-50);
	color: var(--wp--preset--color--stone-950);
	font-size: var(--wp--preset--font-size--small);
	font-weight: var(--font-weight-heading);
	/* line-height: 1; */
	text-decoration: none;
	backdrop-filter: blur(0.5rem);
	transition: background 0.2s var(--ease), letter-spacing 0.3s var(--ease), letter-spacing 0.2s var(--ease);
	width: 100%;
}
.work-card__cta:hover{
	background: var(--wp--preset--color--stone-200);
	letter-spacing: 0.02em;
}
/* Hover choreography — copied from .link-card: the title sits lowered until
   the CTA is revealed, then rises into place as the button slides up from
   below. Scoped to the DESKTOP grid only (min-width:1200px): the tablet/mobile
   scroll strip (≤1199.98px) and touch devices keep the base state — title in
   place and CTA ALWAYS visible — even on a narrow hover-capable window. */
@media (hover: hover) and (pointer: fine) and (min-width: 1200px){
	/* Only cards that link to a product (rendered as <a>, with a CTA) get the
	   lowered-title reveal; plain works cards keep the title in place. */
	a.work-card .work-card__label-text{
		transform: translateY(3rem);
		transition: transform 0.8s var(--ease);
	}
	.work-card__cta{
		opacity: 0;
		transform: translateY(2rem);
		transition: opacity 0.25s ease-out, transform 0.4s ease-out,
			background 0.25s ease-out, letter-spacing 0.25s ease-out;
	}
	a.work-card:hover .work-card__label-text{
		transform: none;
	}
	a.work-card:hover .work-card__cta{
		opacity: 1;
		transform: none;
		transition-delay: 0.2s, 0.2s, 0s, 0s;
	}
	/* Zoom applies to EVERY card (linked <a> or plain <div>) so product-less
	   works don't sit static among their zooming neighbours; only the
	   title/CTA reveal above stays link-only. */
	.work-card:hover .work-card__img{
		transform: scale(1.04);
	}
}
.works-block__footer{
	justify-content: center;
}
.works-block__empty-note{
	opacity: 0.8;
}

/* ─── Відгуки ─────────────────────────────────────────────────────────────── */

.reviews-block{
	display: flex;
	flex-direction: column;
	gap: 2.5rem;
}
/* Desktop grid: column count is block-configurable (--reviews-cols, default 4),
   same setup as .works-home. */
.reviews-grid{
	display: grid;
	grid-template-columns: repeat(var(--reviews-cols, 4), 1fr);
	gap: var(--gap);
}
/* Tablet & mobile: horizontal scroll strip, card width block-configurable
   (--reviews-card-w, default 80vw) — mirrors the works block. */
@media (max-width: 1199.98px){
	.reviews-grid{
		display: flex;
		flex-wrap: nowrap;
		overflow-x: auto;
		gap: var(--gap);
		scroll-snap-type: x mandatory;
		scrollbar-width: none;
	}
	.reviews-grid::-webkit-scrollbar{
		display: none;
	}
	.reviews-grid .review-card{
		flex: 0 0 var(--reviews-card-w, 80vw);
		scroll-snap-align: start;
	}
}
/* The whole card is a single link (no inner links). Font sizes are left
   unset so every text element inherits the body's base size. */
.review-card{
	display: flex;
	flex-direction: column;
	gap: 1rem;
	padding: 2.5rem 1.5rem;
	background-color: white;
	border-radius: var(--border-radius);
	border: 1px solid transparent;
	color: inherit;
	text-decoration: none;
	/* Card is an <a>; a global link rule bumps it to 500, so reset the base
	   weight to 400 (name/price/CTA re-assert 500 for hierarchy). */
	font-weight: 400;
	transition: border-color 0.3s var(--ease);
	overflow: hidden;
}
@media (hover: hover){
	.review-card:hover{
		border-color: color-mix(in srgb, currentcolor 30%, transparent);
	}
	.review-card .review-card__cta:hover{
		background-color: var(--wp--preset--color--stone-950);
		color: var(--wp--preset--color--stone-50);
		border-color: transparent;
		letter-spacing: 0.02em;
	}
}
.review-card__product{
	display: flex;
	align-items: center;
	gap: 1rem;
}
.review-card__thumb{
	display: block;
	flex: 0 0 auto;
}
.review-card__thumb img{
	width: 4.5rem;
	height: auto;
	aspect-ratio: 4 / 5;
	object-fit: cover;
	border-radius: var(--border-radius);
	display: block;
}
.review-card__product-info{
	display: flex;
	flex-direction: column;
	gap: 0.25rem;
	min-width: 0;
}
.review-card__product-name{
	font-weight: var(--font-weight-heading);
	line-height: 1.3;
}
.review-card__price{
	font-weight: var(--font-weight-heading);
	color: var(--wp--preset--color--stone-950);
}
.review-stars{
	display: inline-flex;
	gap: 0;
	color: var(--wp--preset--color--stone-300);
	font-size: 1.25rem;
}
/* Duotone stars render a faint (opacity 0.2) fill layer under a full-colour
   outline — force the fill fully opaque so the glyph reads as a solid star. */
.review-stars i::before{
	opacity: 1;
}
.review-stars .is-filled{
	color: #F59E0B;
}
/* Stars + excerpt grouped as one quote; grows to pin the CTA to the bottom. */
.review-card__quote{
	display: flex;
	flex-direction: column;
	gap: 1rem;
	flex-grow: 1;
	margin: 0;
}
.review-card__text{
	display: block;
	line-height: 1.5;
}
.review-card__cta{
	display: inline-block;
	align-self: flex-start;
	padding: 0.5rem 0.75rem;
	background-color: var(--wp--preset--color--stone-100);
	border: 1px solid var(--wp--preset--color--stone-300);
	border-radius: var(--border-radius);
	font-weight: var(--font-weight-heading);
	transition: background-color 0.25s ease-out, color 0.25s ease-out, border-color 0.25s ease-out, letter-spacing 0.2s ease;
	width: 100%;
	display: flex;
	justify-content: center;
}
/* Desktop only (same reasoning/scoping as .work-card): the CTA is hidden and
   the review text sits slightly lowered until hover, then the text rises and
   the CTA slides up into view. The tablet/mobile scroll strip (≤1199.98px)
   and touch keep the base state — text in place, CTA always visible. */
@media (hover: hover) and (pointer: fine) and (min-width: 1200px){
	.review-card__quote{
		transform: translateY(2rem);
		transition: transform 0.8s var(--ease);
	}
	.review-card__cta{
		opacity: 0;
		transform: translateY(1rem);
		transition: opacity 0.35s ease, transform 0.6s var(--ease),
			background-color 0.25s ease-out, color 0.25s ease-out, border-color 0.25s ease-out, letter-spacing 0.2s ease;
	}
	.review-card:hover .review-card__quote{
		transform: none;
	}
	.review-card:hover .review-card__cta{
		opacity: 1;
		transform: none;
		transition-delay: 0.2s, 0.2s, 0s, 0s, 0s, 0s;
	}
}
.reviews-block__footer{
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 0.5rem;
}
.reviews-block__total{
	font-weight: var(--font-weight-heading);
	/* Підкреслення малює border-bottom; коли елемент — посилання, глобальні
	   стилі додають ще й text-decoration, тож гасимо його, щоб не було подвійної
	   лінії. Колір лишається текстовим (не «лінковим»). */
	text-decoration: none;
	color: inherit;
	border-bottom: 1px solid color-mix(in srgb, currentColor 25%, transparent);
	padding-bottom: 0.125rem;
	transition: border-color 0.25s var(--ease);
}
a.reviews-block__total:hover{
	border-bottom-color: currentColor;
}

/* ─── Шапка каталогу/категорії ────────────────────────────────────────────── */

.archive-header{
	position: relative;
	display: flex;
	/* Content sits bottom-left at every width (same as the compact layout);
	   justify-content stays centered so the content block lines up with the
	   rest of the page on ultra-wide screens, while its text/chips align left. */
	align-items: flex-end;
	justify-content: center;
	min-height: max(24rem, 52vh);
	padding: 4rem var(--wp--style--root--padding-right) 4rem var(--wp--style--root--padding-left);
	color: var(--wp--preset--color--stone-50);
	isolation: isolate;
	overflow: hidden;
}
.archive-header__media{
	position: absolute;
	inset: 0;
	z-index: -2;
	background-color: var(--wp--preset--color--stone-950);
}
.archive-header__media img,
.archive-header__media video{
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}
/* Dark-first reveal: the media starts hidden + slightly zoomed and settles in
   over ~2s once main.js swaps in the deferred src and adds .is-revealed. The
   stone-950 container shows through until then, so the header never flashes
   empty while a photo/video loads. */
.archive-header__media.has-media img,
.archive-header__media.has-media video{
	opacity: 0;
	transform: scale(1.06);
	transition: opacity 2s ease, transform 2s cubic-bezier(0.22, 1, 0.36, 1);
	will-change: opacity, transform;
}
.archive-header__media.is-revealed img,
.archive-header__media.is-revealed video{
	opacity: 1;
	transform: scale(1);
}
@media (prefers-reduced-motion: reduce){
	.archive-header__media.has-media img,
	.archive-header__media.has-media video{
		opacity: 1;
		transform: none;
		transition: none;
	}
}
.archive-header::before{
	content: "";
	position: absolute;
	inset: 0;
	z-index: -1;
	background-color: color-mix(in srgb, var(--wp--preset--color--stone-950) 35%, transparent);
}
.archive-header__content{
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: 3rem;
	width: 100%;
	max-width: var(--wp--style--global--wide-size);
}
.archive-header__head{
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: 1rem;
	text-align: left;
	/* max-width: 56rem; */
}

.archive-header__breadcrumbs .woocommerce-breadcrumb{
	font-size: var(--wp--preset--font-size--small);
	color: inherit !important;
	opacity: 0.85;
	margin-bottom: 0;
}
.archive-header__breadcrumbs .woocommerce-breadcrumb a{
	color: inherit;
	text-decoration: none;
}
/* The last crumb (current page) duplicates the H1 that follows, so hide it
   site-wide. The delimiter before it stays visible, leaving a trailing "/ "
   ahead of the heading. Markup: the last crumb is wrapped in this span by the
   theme override woocommerce/global/breadcrumb.php. */
.woocommerce-breadcrumb__current{
	display: none;
}
.archive-header__title{
	/* <h1> — inherits the site heading font (set via global styles) */
	margin: 0;
	font-size: clamp(2.25rem, 1.75rem + 2.5vw, 4rem);
	line-height: 1.05;
	letter-spacing: -0.045em;
	font-weight: var(--font-weight-heading);
	color: inherit;
}
.archive-header__container{
	width: 100%;
}
.archive-header__chips{
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	flex-wrap: wrap;
	justify-content: flex-start;
	gap: 2px;
}
.archive-header__chip{
	flex: 0 0 144px;
	width: 144px;
}
.archive-header__chip-link{
	display: flex;
	flex-direction: column;
	gap: 0.5rem;
	padding: 0.5rem;
	border-radius: 3px;
	text-decoration: none;
	color: var(--wp--preset--color--stone-50);
	background-color: rgba(255, 255, 255, 0.1);
	backdrop-filter: blur(12px);
	transition: background-color 0.25s ease-out, color 0.25s ease-out, transform 0.25s ease-out;
	border: 1px solid color-mix(in srgb, currentcolor 10%, transparent)
}
.archive-header__chip-link:hover{
	background-color: rgba(255, 255, 255, 0.2);
	border: 1px solid color-mix(in srgb, currentcolor 30%, transparent);
	transform: translateY(-2px);

}
/* Active chip = solid light card with dark text (the current view). */
.archive-header__chip.is-active .archive-header__chip-link{
	background-color: var(--wp--preset--color--stone-50);
	color: var(--wp--preset--color--stone-950);
	backdrop-filter: none;
}
.archive-header__chip-thumb{
	display: block;
	height: 48px;
	border-radius: 3px;
	overflow: hidden;
	/* No-photo categories fall back to a plain stone-950 tile. */
	background-color: var(--wp--preset--color--stone-950);
}
.archive-header__chip-thumb img{
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}
.archive-header__chip-row{
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 0.5rem;
	font-size: var(--wp--preset--font-size--small);
	font-weight: var(--font-weight-heading);
	line-height: 1.5;
}
.archive-header__chip-label{
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}
.archive-header__chip-check{
	flex: 0 0 auto;
	font-size: 0.875rem;
	line-height: 1;
}

/* ─── Compact layout (≤1099px, matches the mobile-menu switch) ───────────────
   The header content moves to the bottom-left corner; the chips keep their
   144px width (flex: 0 0 144px) and overflow horizontally instead of wrapping;
   the scrollbar is hidden. */
@media (max-width: 1099px){
	.archive-header{
		justify-content: flex-start;
		align-items: flex-end;
	}
	.archive-header__content{
		align-items: stretch;
		gap: 2rem;
	}
	.archive-header__head{
		align-items: flex-start;
		text-align: left;
		max-width: none;
	}
	/* Edge-to-edge scroll strip: cancel the header's root padding with negative
	   margins, then re-apply it as inner padding so the first/last chip still
	   line up with the text above, but the strip itself scrolls the full width. */
	.archive-header__chips{
		flex-wrap: nowrap;
		justify-content: flex-start;
		overflow-x: auto;
		scrollbar-width: none;
		-webkit-overflow-scrolling: touch;
		margin-left: calc(var(--wp--style--root--padding-left) * -1);
		margin-right: calc(var(--wp--style--root--padding-right) * -1);
		padding-left: var(--wp--style--root--padding-left);
		padding-right: var(--wp--style--root--padding-right);
	}
	.archive-header__chips::-webkit-scrollbar{
		display: none;
	}
}

/* Phone: narrower chips so more of the strip is visible at once. */
@media (max-width: 767px){
	.archive-header__chip{
		flex: 0 0 7rem;
		width: 7rem;
	}
}

/* ─── Шапка сторінки (starter/page-header) ────────────────────────────────
   The editable twin of .archive-header — it carries both classes, so every
   rule above (paddings, media reveal, breadcrumbs, title, GSAP hooks) already
   applies. Only the parts the block makes configurable are overridden here. */

/* Overlay tint driven by the block's colour + opacity controls; the defaults
   reproduce the category header exactly. */
.page-header::before{
	background-color: color-mix(
		in srgb,
		var(--page-header-overlay-color, var(--wp--preset--color--stone-950))
		var(--page-header-overlay-opacity, 35%),
		transparent
	);
}

/* Vertical placement of the content block inside the hero. */
.page-header.is-valign-top{ align-items: flex-start; }
.page-header.is-valign-center{ align-items: center; }
.page-header.is-valign-bottom{ align-items: flex-end; }

/* Horizontal placement. The flex container stays centered (so the content
   column keeps lining up with the rest of the page on ultra-wide screens);
   what moves is the text inside it. */
.page-header.is-halign-center .archive-header__content,
.page-header.is-halign-center .archive-header__head{
	align-items: center;
	text-align: center;
}

/* Простий варіант: без медіа, накладення та мінімальної висоти. Кольори
   успадковуються від сторінки, паддинги лишаються ті самі, що й у медіа-
   варіанті. Вертикальне вирівнювання тут не має сенсу — висота по контенту. */
.page-header--plain{
	min-height: 0;
	color: inherit;
}
.page-header--plain::before{
	content: none;
}

/* ─── Інформаційна сторінка з сайдбаром ───────────────────────────────────
   Same column ratio as the catalog (.catalog-layout): a floored sidebar track
   plus a 3fr content track. On collapse the sidebar drops below the content
   via order instead of pushing it down. */

.info-layout{
	display: grid;
	grid-template-columns: minmax(13rem, 1fr) 3fr;
	gap: 2rem;
	align-items: start;
}
/* min-width:0 lets each track shrink below its content's intrinsic width. */
.info-layout__sidebar,
.info-layout__content{
	min-width: 0;
}
.info-layout__sidebar{
	position: sticky;
	top: calc(var(--header-height, 0px) + 1rem);
}

@media (max-width: 781px){
	.info-layout{
		grid-template-columns: 1fr;
	}
	.info-layout__content{ order: 1; }
	.info-layout__sidebar{
		order: 2;
		position: static;
	}
}

/* Sidebar navigation — a quiet vertical list with the current page marked.
   The hover sweep timing/geometry is NOT redefined here: these links are wired
   into the shared .tmm-link rule group in style.css, so they animate exactly
   like the footer and .top-nav. Only the box and the fill are overridden. */
.info-sidebar .wp-block-navigation__container{
	gap: 0.25rem;
}
.info-sidebar .wp-block-navigation-item__content{
	display: block;
	width: 100%;
	padding: 0.375rem 0.625rem;
	border-radius: var(--border-radius);
	text-decoration: none;
	color: inherit;
}
/* Solid stone-100 fill instead of the shared 15%-currentColor tint. It sits
   ABOVE the link's own background (z-index:0, not the shared -1), so the label
   is lifted over it rather than relying on isolation on the link. */
.info-sidebar .wp-block-navigation-item__content::before{
	background-color: var(--wp--preset--color--stone-100);
	z-index: 0;
}
.info-sidebar .wp-block-navigation-item__label{
	position: relative;
	z-index: 1;
}
/* The current page already has a solid dark plate with a light label — a
   stone-100 wipe over it would swallow the text, so it gets no sweep. */
.info-sidebar .current-menu-item > .wp-block-navigation-item__content::before{
	content: none;
}
/* Клас продубльовано: core сам друкує інлайново подвоєний клас
   `.wp-block-navigation .wp-block-navigation-item__content.wp-block-navigation-item__content{color:inherit}`,
   тобто (0,3,0) — рівно з нашим. Без дубля гість бачив темний текст на
   темній плашці. Див. коментар про конвенцію на початку style.css. */
.info-sidebar .current-menu-item > .wp-block-navigation-item__content.wp-block-navigation-item__content{
	background-color: var(--wp--preset--color--stone-950);
	color: var(--wp--preset--color--stone-50);
}

/* ─── Каталог: фільтри 1fr + товари 3fr ──────────────────────────────────── */

.catalog-layout{
	display: grid;
	/* Sidebar keeps a usable width (floored at 13rem) while the products track
	   takes the rest and auto-reduces its own columns; on desktop the fr ratio
	   (≈1:3) wins. Two columns hold all the way down to the WooCommerce
	   filter-overlay breakpoint (600px), so the sidebar never jumps full-width. */
	grid-template-columns: minmax(13rem, 1fr) 3fr;
	gap: 2rem;
	align-items: start;
}
/* min-width:0 lets each grid track shrink below its content's intrinsic width;
   the filters column is NOT a scroll container — an overflow-y:auto here would
   silently compute overflow-x to auto too and reintroduce a scrollbar. */
.catalog-layout__filters{
	min-width: 0;
}
.catalog-layout__products{
	min-width: 0;
}
.catalog-layout__filters .wc-block-product-filters{
	gap: 1rem;
}
/* Keep every filter control inside the sidebar column at any width (stops the
   price slider / chips / sorting select from spilling onto the products grid).
   Scoped to the filter blocks and form controls — NOT the mobile overlay
   drawer wrappers (…__overlay*), which are full-screen and must stay 100vw. */
.catalog-layout__filters .wc-block-product-filters,
.catalog-layout__filters [class*="wp-block-woocommerce-product-filter"],
.catalog-layout__filters [class*="wc-block-product-filter-"],
.catalog-layout__filters select,
.catalog-layout__filters input{
	min-width: 0;
	max-width: 100%;
}



.wp-block-woocommerce-product-filter-checkbox-list.wc-block-product-filter-checkbox-list {
    /* background-color: var(--wp--preset--color--stone-100); */
    padding: 1em;
	/* WooCommerce ≥10.9 dropped its own overflow on this list (it now relies on
	   the "Show N more" button), so the max-height alone let long option lists
	   spill out of the bordered box over the next filter. Scroll inside. */
	max-height: 14rem;
	overflow-y: auto;
	overscroll-behavior: contain;
	border-radius: var(--border-radius);
	border: 1px solid var(--wp--preset--color--stone-300);
	input[type=checkbox].wc-block-product-filter-checkbox-list__input:checked{
		background-color: var(--wp--preset--color--stone-950);
	}
	.wc-block-product-filter-checkbox-list__mark{
		color: var(--wp--preset--color--stone-50);
	}
}

/* ≤600px: WooCommerce collapses the filters into the "Фільтрувати товари"
   overlay button. Single column, and that button becomes a sticky, full-width
   bar pinned just under the sticky header, styled like the header background
   (.header-bg) with a hairline border. The whole filters cell is the sticky
   context so the button pins through the (tall) products column. */
@media (max-width: 600px){
	/* В offcanvas скроллится весь ящик целиком, поэтому окно в 14rem на каждом
	   списке лишнее — показываем все значения сразу. Медиазапрос, а не селектор
	   overlay: обёртка __overlay есть в DOM и на десктопе. */
	.wp-block-woocommerce-product-filter-checkbox-list.wc-block-product-filter-checkbox-list{
		max-height: none;
	}
	.catalog-layout{
		grid-template-columns: 1fr;
	}
	.catalog-layout__filters{
		position: sticky;
		top: calc(var(--header-height, 0px) + 0.25rem);
		z-index: 20;
	}
	.catalog-layout__filters .wc-block-product-filters{
		width: 100%;
	}
	.catalog-layout .wc-block-product-filters__open-overlay{
		width: 100%;
		justify-content: center;
		gap: 0.5rem;
		padding: 0.875rem 1rem;
		border-radius: var(--border-radius);
		border: 1px solid color-mix(in srgb, var(--wp--preset--color--stone-950) 12%, transparent);
		background-color: color-mix(in srgb, var(--wp--preset--color--stone-50) 80%, transparent);
		backdrop-filter: blur(1rem) saturate(2);
	}
}

/* ─── SEO секція каталогу: FAQ 20% + опис у 2 колонки ────────────────────── */

.catalog-seo{
	display: flex;
	gap: 2rem;
	align-items: flex-start;
}
.catalog-seo__faq{
	flex: 0 0 20%;
	min-width: 0;
}
.catalog-seo__text{
	flex: 1 1 0;
	min-width: 0;
}
/* Single column: the SEO copy is a read-through explainer, and splitting it
   into two columns made the eye jump back up the page mid-section. */
.catalog-seo__text .term-description-columns,
.term-description-columns{
	columns: 1;
}

/* Headings inside the SEO/FAQ copy sit tight to their paragraph. The default
   block spacing leaves a gap large enough to read as a section break. */
.catalog-seo :is(h2, h3, h4, h5, h6),
.seo-3col :is(h2, h3, h4, h5, h6),
.catalog-seo__text :is(h2, h3, h4, h5, h6){
	margin: 0.5em 0;
}

/* ─── Юридичні сторінки (оферта, політика) ──────────────────────────────── */

/* A narrow measure keeps long legal paragraphs readable. The column is centred
   on the page; the text itself stays left-aligned — centring every line of a
   contract makes it markedly harder to scan. */
.legal-content{
	max-width: 800px;
	margin-inline: auto;
}
.legal-content :is(h2, h3, h4, h5, h6){
	margin: 1.5em 0 0.5em;
}
.legal-content > :first-child{
	margin-top: 0;
}
.legal-content p{
	margin-block: 0 0.75em;
}

/* The homepage SEO section carries its padding inline, from block attributes.
   Overriding it here rather than rewriting the markup is deliberate: editing
   serialized block HTML by hand desynchronises it from the attributes it
   encodes, and Gutenberg then flags the block as invalid in the editor. */
section:has(> .seo-3col){
	padding-block: 3rem !important;
}

/* Category descriptions are plain HTML from the term editor, so their headings
   have no utility class and fall back to the full h3 scale — 44px above 16px
   body copy. Match the .h6 step the homepage SEO block uses. */
.catalog-seo__text :is(h2, h3, h4, h5, h6){
	font-size: clamp(1.125rem, 1.09rem + 0.18vw, 1.25rem);
	line-height: 1.2;
	letter-spacing: -0.01em;
}
.catalog-seo__text p:last-child,
.seo-3col__scroll-inner p:last-child{
	margin-bottom: 0;
}

@media (max-width: 991.98px){
	.catalog-seo{
		flex-direction: column;
	}
	.catalog-seo__faq{
		width: 100%;
		flex-basis: auto;
	}
}

/* ─── FAQ (core/details) ─────────────────────────────────────────────────── */

.faq-list{
	display: flex;
	flex-direction: column;
}
.faq-list details{
	border-bottom: 1px solid var(--wp--preset--color--stone-300);
	padding: 0.75rem 0;
}
.faq-list summary{
	cursor: pointer;
	font-weight: var(--font-weight-heading);
	list-style: none;
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: 1rem;
}
.faq-list summary::-webkit-details-marker{
	display: none;
}
.faq-list summary::after{
	content: "+";
	font-size: 1.25em;
	line-height: 1;
	transition: transform 0.25s ease;
	flex-shrink: 0;
}
/* While a details is animating closed it keeps [open] (JS drives the close);
   [data-closing] lets the marker flip back to "+" immediately at click time. */
.faq-list details[open]:not([data-closing]) summary::after{
	transform: rotate(45deg);
}
/* Spacing between summary and answer. Before the JS wraps the content this
   targets the answer block directly; after wrapping it targets the wrapper. */
.faq-list details > :not(summary){
	margin-top: 0.5rem;
}

/* Content wrapper injected by initDetailsAnimation() (main.js): clips the
   height tween on open/close. `overflow:hidden` also stops the inner top
   margin from collapsing out, so the gap lives INSIDE the animated box and is
   clipped to nothing at height:0 (no leftover gap when collapsed). */
.wp-block-details .details__content,
.faq-list details .details__content{
	overflow: hidden;
}
/* Move the summary↔content gap off the wrapper (outside the animated height)
   and onto its first inner block (inside it), so it animates and clips too. */
.faq-list details > .details__content{
	margin-top: 0;
}
.faq-list details .details__content > :first-child{
	margin-top: 0.5rem;
}

/* ─── SEO секція головної: 3 колонки, скрол бокових ──────────────────────── */

.seo-3col{
	align-items: stretch;
}
.seo-3col .seo-3col__media img{
	aspect-ratio: 4 / 5;
	width: 100%;
	height: auto;
	object-fit: cover;
	border-radius: var(--border-radius);
}
.seo-3col .seo-3col__scroll{
	position: relative;
	min-height: 20rem;
}
.seo-3col .seo-3col__scroll-inner{
	position: absolute;
	inset: 0;
	overflow-y: auto;
	scrollbar-width: thin;
	padding-right: 0.75rem;
}
@media (max-width: 781.98px){
	.seo-3col .seo-3col__scroll{
		min-height: 0;
	}
	.seo-3col .seo-3col__scroll-inner{
		position: static;
		overflow: visible;
		padding-right: 0;
	}
}

/* ─── Секція консультації (CTA) ──────────────────────────────────────────── */

.cta-consultation,
.home-visit-cta{
	& > div{
		@media (max-width: 767px){
			padding: 1.5rem !important;
		}
	}
	.wp-block-column:last-child{
		@media (max-width: 767px){
			padding-top: 1.5rem !important;
			padding-bottom: 0 !important;
		}
	}
	.wpcf7-not-valid-tip{
		color: color-mix(in srgb, currentcolor 75%, transparent)
	}
	.wp-block-button.is-style-brand{
		width: 100%;
	}
}
.cta-consultation .wp-block-columns{
}
/* Image column fills the full card height edge-to-edge (no padding on that
   side, unlike the text column); the two images sit flush against each
   other with a small gap and are individually stretched to match. */
.cta-consultation__images{
	height: 100%;
	align-items: stretch;
}
.cta-consultation__images .wp-block-image{
	margin: 0;
	height: 100%;
}
.cta-consultation__images img{
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}
.cta-consultation .input-name{
	display: none;
}
.cta-consultation .wpcf7 input:not([type="checkbox"]):not(.wpcf7-submit){
	background-color: transparent;
	border-color: color-mix(in srgb, currentColor 45%, transparent);
	color: inherit;
	width: 100%;
	background-color: rgba(0 0 0 / 0.15);
	&:hover,
	&:focus{
		border-color: currentColor;
		outline: none;

	}
}
.cta-consultation .wpcf7 input::placeholder{
	color: color-mix(in srgb, currentColor 75%, transparent);
}
.cta-consultation .wpcf7 input.wpcf7-submit{
	background-color: var(--wp--preset--color--stone-50);
	color: var(--wp--preset--color--primary-500);
	font-weight: 600;
	margin-top: 1.25rem;
}
.cta-consultation .wpcf7 input.wpcf7-submit:hover{
	background-color: var(--wp--preset--color--stone-950);
	color: var(--wp--preset--color--stone-50);
}


/* CF7 checkbox chips (категорії у формі консультації) */
.wpcf7 .categories-checkboxes .wpcf7-checkbox{
	display: flex;
	flex-wrap: wrap;
	gap: 2px;
}
.wpcf7 .categories-checkboxes .wpcf7-list-item{
	margin: 0;
}
.wpcf7 .categories-checkboxes .wpcf7-list-item label{
	display: inline-flex;
	align-items: center;
	gap: 0.375rem;
	padding: 0.375rem 0.625rem;
	border: 1px solid color-mix(in srgb, currentColor 45%, transparent);
	border-radius: var(--border-radius);
	font-size: var(--wp--preset--font-size--small);
	cursor: pointer;
	transition: all 0.2s ease-out;
	background-color: rgba(0 0 0 / 0.15);
}
.wpcf7 .categories-checkboxes .wpcf7-list-item label:hover{
	border-color: currentColor;
}
.wpcf7 .categories-checkboxes input[type="checkbox"]{
	width: auto;
	margin: 0;
	padding: 0;
	accent-color: var(--wp--preset--color--primary-500);
}
.wpcf7 .categories-checkboxes .wpcf7-list-item label:has(input:checked){
	background-color: var(--wp--preset--color--stone-50);
	color: var(--wp--preset--color--stone-950);
	border-color: transparent;
}

.categories-checkboxes{
	margin-bottom: 1.25em;
}

.form-consultation-categories{
	label{
		margin: 0;
	}
}



/* Сторінка категорії */
/* Клас продубльовано проти `:root :where(.is-layout-flex){gap:1.25rem}` із
   global-styles — див. коментар про конвенцію на початку style.css. */
.wp-block-query-pagination.wp-block-query-pagination{
	gap: var(--gap);
	.wp-block-query-pagination-numbers {
		display: flex;
		gap: var(--gap);
	}
	.wp-block-query-pagination-numbers > span,
	.wp-block-query-pagination-numbers a,
	.wp-block-query-pagination-next,
	.wp-block-query-pagination-previous {
		padding: 1em;
		text-decoration: none;
		background-color: white;
		display: flex;
		border-radius: var(--border-radius);
		transition: all 0.3s ease-out;
		will-change: background-color, color, transform;
		&:hover{
			background-color: var(--wp--preset--color--stone-950);
			color: var(--wp--preset--color--stone-50);
		}
	}
	.wp-block-query-pagination-numbers > span{
		background-color: var(--wp--preset--color--stone-950);
		color: var(--wp--preset--color--stone-50);
	}
	.wp-block-query-pagination-next,
	.wp-block-query-pagination-previous{
		display: flex;
		justify-content: center;
		span{
			margin: 0;
		}
	}
}

.wp-block-woocommerce-product-filters{
	.wp-block-heading{
		margin-bottom: 0.5em;
		margin-top: 0;		
	}
	.wc-block-product-filters__overlay-content{
		gap: 1.5rem;
	}
}

.wc-block-product-filter-chips__item{
	border: 1px solid color-mix(in srgb,currentColor 15%,transparent);
	position: relative;
	transition: all 0.25s ease;
	will-change: transition, opacity, color, background-color, padding;
	&[aria-checked="false"]&:hover{
		background-color: white;
		color: var(--wp--preset--color--primary-500);
	}
	&::before {
   		content: '';
   		display: inline-block;
		position: absolute;
		left: 0.55em;
		top: calc(50% - 0.4em);
		width: 0.8em;
		height: 0.8em;
		background-color: currentColor;
		/* Checkmark drawn via mask so it always follows the chip's text colour
		   (light on the selected dark chip, primary-500 on hover). */
		-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='3.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E") center / contain no-repeat;
		mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='3.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E") center / contain no-repeat;
		opacity: 0;
		transform: scale(0);
		transition: inherit;
	}
	&[aria-checked="true"] {
		padding-left: 1.5em;
		&:hover{
			&::after{
				content: 'x';
			}
		}
	}
	&[aria-checked="true"]::before {
		opacity: 1;
		transform: scale(1);
	}
}

.woocommerce .woocommerce-ordering,
.woocommerce-page .woocommerce-ordering{
	float: none;
	select{
		width: 100%;
	}
}

/* Sorting <select> in the filters sidebar — restyled to match the filter chips:
   subtle border, rounded, custom chevron, primary-500 hover. Native appearance
   is removed (the option popup stays OS-native). */
.catalog-layout__filters .woocommerce-ordering select.orderby{
	appearance: none;
	-webkit-appearance: none;
	width: 100%;
	margin: 0;
	border: 1px solid color-mix(in srgb, currentColor 15%, transparent);
	border-radius: var(--border-radius);
	padding: 0.6em 2.25em 0.6em 0.85em;
	background-color: transparent;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%231c1917' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: right 0.85em center;
	background-size: 1em;
	font: inherit;
	color: inherit;
	cursor: pointer;
	transition: border-color 0.25s ease, color 0.25s ease;
}
.catalog-layout__filters .woocommerce-ordering select.orderby:hover,
.catalog-layout__filters .woocommerce-ordering select.orderby:focus-visible{
	outline: none;
	border-color: var(--wp--preset--color--primary-500);
	color: var(--wp--preset--color--primary-500);
}



/* ─── Сторінка товару: shell 10fr / 2fr ──────────────────────────────────── */
/* Shared width for the attribute-label column and the quantity input so the
   left "column" of the info block lines up (task: use one variable). */
.single-product{
	--pdp-field: 10rem;
	div.product{
		margin: 0 !important;
	}

	.product_image-column{
		.flex-control-nav{
			margin-top: 0.25rem !important;
		}
		div.images{
			@media (max-width: 1023px){
				margin-bottom: 0 !important;
			}
		}
	}
	
	.product_info-column{
		.woocommerce-breadcrumb{
			a{
				text-decoration: none;
				font-weight: 400;
				&:hover{
					color: var(--wp--preset--color--primary-500);
				}				
			}
			@media (max-width: 767px){
					display: none !important;
				}
		}
		.wp-block-post-title{
			text-wrap: balance;
		}
		.variations{
			margin-bottom: 0 !important;
			.value{
				padding: 0 !important;
			}
			label{
				font-weight: 400 !important;
			}			
		}
		div.quantity{
			margin-right: 0 !important;
			.qty{
				margin-right: 0 !important;
			}
		} 
		.quick-order-form__heading{
			font-size: clamp(1.125rem, 1.09rem + 0.18vw, 1.25rem) !important;
			text-wrap: balance;
		}
		.quick-order-form__form{
			/* @media (max-width: 1023px){
				flex-direction: column;
				.quick-order-form__input{
					flex: 1;
				}
			} */
		}
		.order-info-list summary{
			@media (max-width: 767px){
				padding: 1em 0;
			}
		}
	}
	.wc-block-components-product-rating{
		display: none;
	}
	.wp-block-post-excerpt{
		margin-top: 1.25rem;
		margin-bottom: 1.25rem;
	}
	.quick-order-form,
	.order-info-list{
		margin-top: 2rem;
		margin-bottom: 2rem;
	}
	.wp-block-woocommerce-product-meta a{
		font-weight: 400;
	}
	.details__content{
		.wp-block-paragraph{
			margin-top: 0.5em;
			margin-bottom: 0.5em;
		}
	}

	.wp-block-woocommerce-product-details{
		ul.tabs.wc-tabs {
			border-bottom: 1px solid var(--wp--preset--color--stone-300) !important;
		}
		li{
			border-left: none !important;
		}
		li a{
			padding: 0.35em 0 !important;
			font-weight: var(--font-weight-heading) !important;
		}
		li.active{
			border-bottom: 2px solid currentColor !important;
		}
	}
}

/* Outer shell: 10fr main column + 2fr sidebar. The sidebar shares the shell
   row height with the WHOLE left column (gallery+info row AND the tabs below),
   so a sticky sidebar stays pinned through the description/characteristics too. */
.single-product .product_shell{
	display: grid;
	grid-template-columns: minmax(0, 10fr) minmax(0, 2fr);
	gap: 3rem;
	align-items: start;
	margin-top: 0;
}
@media (min-width: 1200px){
	.single-product .product_shell > .product_sidebar-column{
		position: sticky;
		top: 7rem;
		align-self: start;
	}
}

/* Left column, top row: gallery + product info (tabs flow full-width below). */
.single-product .product_content.product_content--3col{
	display: grid;
	/* Figma: gallery 440 · info 552 */
	grid-template-columns: minmax(0, 4fr) minmax(0, 5fr);
	gap: 1.5rem;
	align-items: start;
	margin-top: 0;
	@media (max-width: 1023px){
		gap: 1.5rem;
	}
	@media (max-width: 767px){
		gap: 0.5rem;
	}
}
/* Gallery column is NOT sticky (task: only the sidebar pins). */

@media (max-width: 1199.98px){
	.single-product .product_shell{
		grid-template-columns: minmax(0, 1fr);
	}
	/* Sidebar is relocated by JS (initSidebarPlacement) to sit right after the
	   product info, before the tabs. It stays a full-width vertical stack with
	   its left divider — no reflow into a wrapping row. */
	.single-product .product_content.product_content--3col{
		grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
	}
	.product_sidebar-column{
		display: grid !important;
		grid-template-columns: 1fr 1fr;
	}
}
@media (max-width: 781.98px){
	.single-product .product_content.product_content--3col{
		grid-template-columns: minmax(0, 1fr);
	}
	.woocommerce main.wp-block-group{
		padding-top: 1rem !important;
	}
	/* Клас продубльовано проти core-block-supports
	   `.wp-container-core-group-is-layout-*  > * + *{margin-block-start:2rem}` —
	   див. коментар про конвенцію на початку style.css. */
	.catalog-layout.catalog-layout{
		margin-top: 0;
	}
	.product_sidebar-column{
		display: grid !important;
		grid-template-columns: 1fr;
	}
}

/* ── Phone: gallery becomes a horizontal 60vw scroll strip ─────────────────── */
/* Only on phones (≤767px) — tablets keep the flexslider main image + thumbnails.
   Flexslider stays initialised (so desktop/tablet keep thumbnails/arrows), but
   here we neutralise its inline transform/width and lay the slides out as a
   native scroll-snap strip, like the theme's product carousels. Thumbnails and
   the prev/next arrows are hidden; touch is disabled in the flexslider options
   (carousel_options filter) so native scrolling isn't hijacked. */
@media (max-width: 767px){
	.single-product .woocommerce-product-gallery .flex-viewport{
		overflow: visible !important;
		height: auto !important;
	}
	/* Edge-to-edge scroll strip: cancel the page's root padding with negative
	   margins and re-apply it as inner padding, so the strip scrolls the full
	   viewport width while the first/last image stay aligned with the content. */
	.single-product .woocommerce-product-gallery__wrapper{
		width: auto !important;
		transform: none !important;
		display: flex;
		gap: var(--gap);
		overflow-x: auto;
		scroll-snap-type: x mandatory;
		scrollbar-width: none;
		/* !important: WooCommerce ships a more specific
		   `.woocommerce div.product div.images .woocommerce-product-gallery__wrapper`
		   rule that resets margin/padding to 0. */
		margin-left: calc(var(--wp--style--root--padding-left) * -1) !important;
		margin-right: calc(var(--wp--style--root--padding-right) * -1) !important;
		padding-left: var(--wp--style--root--padding-left) !important;
		padding-right: var(--wp--style--root--padding-right) !important;
		scroll-padding-left: var(--wp--style--root--padding-left);
	}
	.single-product .woocommerce-product-gallery__wrapper::-webkit-scrollbar{
		display: none;
	}
	.single-product .woocommerce-product-gallery__image{
		flex: 0 0 60vw !important;
		width: 60vw !important;
		float: none !important;
		margin: 0 !important;
		scroll-snap-align: start;
	}
	.single-product .flex-control-thumbs,
	.single-product .woocommerce-product-gallery .flex-direction-nav{
		display: none !important;
	}
}

/* Attribute label column = quantity input width (visual match) */
.single-product{
	.variations{
		width: 100%;
		border-collapse: separate;
		border-spacing: 0 0.25rem;
	}
	.variations th.label{
		width: var(--pdp-field);
		font-weight: 400;
		text-align: left;
		vertical-align: middle;
		padding: 0;
	}
	.variations td.value select{
		width: 100%;
		padding: 0.5em 0.75em;
		border: 1px solid var(--wp--preset--color--stone-300);
		border-radius: var(--border-radius);
		background-color: white;
		font-family: inherit;
		font-size: inherit;
	}
	form.cart .quantity input.qty,
	.wc-block-add-to-cart-with-options__quantity-selector input{
		width: var(--pdp-field);
		padding: 0.75em 1em;
		border: 1px solid var(--wp--preset--color--stone-300);
		border-radius: var(--border-radius);
		font-family: inherit;
		font-size: inherit;
		text-align: center;
	}
	/* variation price appears in place of the main price — hide the extra row */
	.woocommerce-variation-price{
		display: none !important;
	}
	.woocommerce-variation-availability{
		font-size: var(--wp--preset--font-size--small);
	}
}

/* Інформація для замовлення — аккордеон */
.order-info-list{
	border-top: 1px solid var(--wp--preset--color--stone-300);
}
.order-info-list details{
	border-bottom: 1px solid var(--wp--preset--color--stone-300);
}
.order-info-list summary{
	cursor: pointer;
	list-style: none;
	display: flex;
	align-items: center;
	gap: 0.5em;
	padding: 0.5em 0;
	transition: color 0.2s ease-out;
}
.order-info-list summary:hover{
	color: var(--wp--preset--color--primary-500);
}
.order-info-list summary::-webkit-details-marker{
	display: none;
}
.order-info-list summary .ph-duotone{
	/* color: var(--wp--preset--color--primary-500); */
	font-size: 1.25em;
	flex: none;
}
.order-info-list summary::after{
	content: "+";
	margin-left: auto;
	font-size: 1.5em;
	line-height: 1;
	font-weight: 400;
	color: var(--wp--preset--color--stone-950);
	transition: transform 0.25s ease;
}
.order-info-list details[open] summary::after{
	transform: rotate(45deg);
	color: var(--wp--preset--color--primary-500);
}
/* expanded text aligns under the summary label (past the icon) */
.order-info-list details > :not(summary){
	margin: -0.25rem 0 1rem;
	padding-left: calc(1.25em + 0.75rem);
	color: var(--wp--preset--color--stone-950);
}

/* ─── Сайдбар товару ─────────────────────────────────────────────────────── */

/* Figma: sidebar is a bordered divider column, transparent blocks with 12px padding */
/* .product_sidebar-column{
	border-left: 1px solid var(--wp--preset--color--stone-300);
	padding-left: 0.75rem;
} */

/* Sticky-sidebar CTA: injected by JS (initSidebarCta) and revealed only once the
   main add-to-cart form scrolls out of view, desktop only. Hidden by default so
   it reserves no space and never shows without the sticky sidebar. */
.product-sidebar-cta{
	display: none;
	flex-direction: column;
	gap: 0.25rem;
	width: 100%;
}
.product-sidebar-cta.is-visible{
	display: flex;
	animation: pdp-cta-in 0.25s ease-out;
}
@keyframes pdp-cta-in{
	from{ opacity: 0; transform: translateY(-0.5rem); }
	to{ opacity: 1; transform: none; }
}
.product-sidebar-cta button{
	width: 100%;
	padding: 0.75rem 1rem;
	border: 0;
	border-radius: var(--border-radius);
	font-family: inherit;
	font-weight: var(--font-weight-heading);
	font-size: inherit;
	line-height: 1.2;
	cursor: pointer;
	transition: background-color 0.2s ease-out;
}
.product-sidebar-cta__add{
	background-color: var(--wp--preset--color--stone-950);
	color: var(--wp--preset--color--stone-50);
}
.product-sidebar-cta__add:hover{
	background-color: color-mix(in srgb, var(--wp--preset--color--stone-950) 88%, white);
}
.product-sidebar-cta__quick{
	background-color: var(--wp--preset--color--primary-500);
	color: var(--wp--preset--color--stone-50);
}
.product-sidebar-cta__quick:hover{
	background-color: var(--wp--preset--color--primary-600);
}
.product_sidebar-column .product-sidebar-block{
	padding: 1rem 1.5rem;
	border-radius: 4px;
	display: flex;
	flex-direction: column;
	align-items: center;
	text-align: center;
	gap: 0.5rem;
}
.product_sidebar-column .product-sidebar-block .wp-block-heading{
	font-family: inherit;
	font-weight: var(--font-weight-heading);
	font-size: var(--wp--preset--font-size--medium);
	letter-spacing: -0.01em;
	margin: 0;
}
.product_sidebar-column .product-sidebar-block > p{
	margin: 0;
}
/* «Купити в кредит» / «Замовити дзвінок» — компактна кнопка як у макеті */
.product_sidebar-column .product-sidebar-block .wp-block-button__link{
	padding: 0.5rem 1rem;
}

/* єВідновлення (тризуб + Дія) та банки (Оплата частинами) — SVG-стрічки з макета */
.pay-strip{
	display: block;
	height: 32px;
	width: auto;
}

/* Плоскі брендові іконки 32px без підкладки — Допомога онлайн та Нейромережі */
.sidebar-icons,
.ask-ai{
	display: flex;
	gap: 4px;
	align-items: center;
}
.sidebar-icons a,
.ask-ai__link{
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 32px;
	height: 32px;
	line-height: 0;
	transition: transform 0.2s ease-out, opacity 0.2s ease-out;
}
.sidebar-icons svg,
.ask-ai__link svg{
	width: 32px;
	height: 32px;
	display: block;
}
.sidebar-icons a:hover,
.ask-ai__link:hover{
	transform: translateY(-1px);
	opacity: 0.85;
}

/* Швидке замовлення оформлено у плагіні dveriland-quick-order (quick-order.css) */

/* ─── Кількість + «Додати у кошик» — один ряд, як у макеті ────────────────── */
/* WooCommerce's add-to-cart-form block CSS forces `form.cart` and the variation
   row (.variations_button) to display:grid (min-content auto auto) and pins the
   button to grid-column 2/3, so nothing fills the column. Override that:
   - the variable form is a plain block → its table + single_variation_wrap
     (and the selects inside) stack full-width;
   - the quantity+button row is a flex row (button grows to fill).
   The variation-row selector carries `.variations_button` too so it out-weighs
   WC's `.wp-block-woocommerce-add-to-cart-form .variations_button` regardless of
   stylesheet load order. */
.single-product form.cart.variations_form{
	display: block;
}
.single-product form.cart:not(.variations_form),
.single-product .woocommerce-variation-add-to-cart.variations_button{
	display: flex;
	flex-wrap: wrap;
	gap: 0.25rem;
	align-items: stretch;
	margin: 0;
}
.single-product .single_variation_wrap .woocommerce-variation-add-to-cart{
	margin-top: 1.5rem;
}
/* Quantity is a fixed --pdp-field-wide column; the input fills it exactly so no
   stray space is left inside the box. */
.single-product form.cart .quantity{
	flex: 0 0 var(--pdp-field);
	width: var(--pdp-field);
	max-width: var(--pdp-field);
	margin: 0;
}
.single-product form.cart .quantity input.qty{
	width: 100%;
	min-width: 0;
	height: 3.5rem;
	margin: 0;
	box-sizing: border-box;
}
/* Add-to-cart button takes all the remaining width next to the quantity. */
.single-product form.cart .single_add_to_cart_button{
	flex: 1 1 0;
	min-width: 12rem;
	min-height: 3.5rem;
	padding-inline: 1.5rem;
	background-color: var(--wp--preset--color--stone-950);
	color: var(--wp--preset--color--stone-50);
	border: 0;
}
.single-product form.cart .added_to_cart.wc-forward{
	display: none;
}
.single-product form.cart .single_add_to_cart_button:hover{
	background-color: var(--wp--preset--color--stone-950);
}
/* Phone: quantity input sizes to its content instead of the fixed --pdp-field
   column, so the button gets more room. */
@media (max-width: 767px){
	.single-product form.cart .quantity{
		flex: 0 0 auto;
		width: auto;
		max-width: none;
	}
	.single-product form.cart .quantity input.qty{
		width: auto;
	}
}
/* empty variation alert row reserves no space until a variation is chosen */
.single-product .single_variation_wrap .woocommerce-variation.single_variation:empty{
	margin: 0;
	min-height: 0;
}
.single-product .variations_form .variations{
	margin-bottom: 0;
}

/* ─── Галерея: заокруглення + мініатюри ───────────────────────────────────── */
/* Keep the gallery block within its column so it can't overflow into the gutter
   (which pushed the flexslider arrow out next to the info column). */
.woocommerce .wp-block-woocommerce-product-image-gallery{
	max-width: 100%;
}
.single-product .woocommerce-product-gallery{
	margin: 0;
}
.single-product .woocommerce-product-gallery__image,
.single-product .woocommerce-product-gallery__image img{
	border-radius: var(--border-radius);
	overflow: hidden;
}
/* Lightbox is opened by clicking anywhere on the image (see js/single-product.js),
   so the whole image gets the zoom cursor and the default 🔍 trigger is hidden. */
.single-product .woocommerce-product-gallery__image,
.single-product .woocommerce-product-gallery__image a{
	cursor: zoom-in;
}
.single-product .woocommerce-product-gallery__trigger{
	display: none;
}
/* Prev/next arrows over the MAIN image (flexslider directionNav, enabled via the
   woocommerce_single_product_carousel_options filter). The nav overlay is given
   the image's own 4:5 ratio at full column width so its height equals the image,
   which centres the arrows on the image and not on the taller gallery+thumbs box. */
.single-product .woocommerce-product-gallery .flex-direction-nav{
	position: absolute;
	top: 0;
	left: 0;
	right: 0;
	aspect-ratio: 4 / 5;
	margin: 0;
	padding: 0 1rem;
	list-style: none;
	display: flex;
	align-items: center;
	justify-content: space-between;
	pointer-events: none;
	z-index: 3;
}
.single-product .woocommerce-product-gallery .flex-direction-nav li{
	margin: 0;
	list-style: none;
}
.single-product .woocommerce-product-gallery .flex-direction-nav a{
	position: static;
	pointer-events: auto;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 2.75rem;
	height: 2.75rem;
	border-radius: var(--border-radius);
	background-color: color-mix(in srgb, var(--wp--preset--color--stone-950) 85%, transparent);
	color: var(--wp--preset--color--stone-50);
	text-decoration: none;
	font-size: 0;
	backdrop-filter: blur(0.5rem);
	transition: background-color 0.25s ease-out, opacity 0.25s ease-out;
}
.single-product .woocommerce-product-gallery .flex-direction-nav a::before{
	font-size: 1.25rem;
	line-height: 1;
}
.single-product .woocommerce-product-gallery .flex-direction-nav a.flex-prev::before{
	content: "\2190"; /* ← */
}
.single-product .woocommerce-product-gallery .flex-direction-nav a.flex-next::before{
	content: "\2192"; /* → */
}
.single-product .woocommerce-product-gallery .flex-direction-nav a:hover{
	background-color: var(--wp--preset--color--stone-950);
}
/* flexslider marks the first/last arrow disabled (animationLoop:false) */
.single-product .woocommerce-product-gallery .flex-direction-nav a.flex-disabled{
	opacity: 0;
	pointer-events: none;
}
.single-product .flex-control-thumbs{
	display: flex;
	flex-wrap: wrap;
	gap: var(--gap);
	margin: var(--gap) 0 0;
	padding: 0;
	list-style: none;
}
.single-product .flex-control-thumbs li{
	/* 4 per row with var(--gap) between: (100% - 3 gaps) / 4 */
	flex: 0 0 calc((100% - var(--gap) * 3) / 4);
	margin: 0;
}
.single-product .flex-control-thumbs img{
	width: 100%;
	aspect-ratio: 1 / 1;
	object-fit: cover;
	border-radius: var(--border-radius);
	cursor: pointer;
	opacity: 0.65;
	transition: opacity 0.2s ease-out, outline-color 0.2s ease-out;
	outline: 2px solid transparent;
	outline-offset: -2px;
}
.single-product .flex-control-thumbs img:hover{
	opacity: 1;
}
.single-product .flex-control-thumbs img.flex-active{
	opacity: 1;
	outline-color: var(--wp--preset--color--stone-950);
}

/* ─── Табки: Опис / Характеристики / Відгуки / Приклади робіт ──────────────── */
.single-product .woocommerce-tabs ul.tabs{
	display: flex;
	flex-wrap: wrap;
	gap: 2rem;
	margin: 0 0 2.5rem;
	padding: 0;
	list-style: none;
	border-bottom: 1px solid var(--wp--preset--color--stone-300);
}
.single-product .woocommerce-tabs ul.tabs::before,
.single-product .woocommerce-tabs ul.tabs li::before,
.single-product .woocommerce-tabs ul.tabs li::after{
	display: none;
}
.single-product .woocommerce-tabs ul.tabs li{
	margin: 0;
	padding: 0;
	background: transparent;
	border: 0;
	border-radius: 0;
}
.single-product .woocommerce-tabs ul.tabs li a{
	display: inline-block;
	padding: 0 0 1rem;
	font-family: inherit;
	font-weight: var(--font-weight-heading);
	font-size: clamp(1.375rem, 1.3rem + 0.36vw, 1.625rem);
	line-height: 1.15;
	letter-spacing: -0.025em;
	color: var(--wp--preset--color--stone-950);
	text-decoration: none;
	border-bottom: 2px solid transparent;
	margin-bottom: -1px;
	transition: color 0.2s ease-out, border-color 0.2s ease-out;
}
.single-product .woocommerce-tabs ul.tabs li a:hover{
	color: var(--wp--preset--color--stone-950);
}
.single-product .woocommerce-tabs ul.tabs li.active a{
	color: var(--wp--preset--color--stone-950);
	border-bottom-color: var(--wp--preset--color--stone-950);
}
.single-product .woocommerce-tabs .wc-tab{
	margin: 0;
}
.single-product .woocommerce-tabs .wc-tab > :first-child{
	margin-top: 0;
}
.single-product .woocommerce-tabs .wc-tab h2:first-child{
	/* WooCommerce repeats the tab title as an h2 inside the panel — приховуємо */
	position: absolute;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip: rect(0 0 0 0);
	white-space: nowrap;
}
@media (max-width: 600px){
	.single-product .woocommerce-tabs ul.tabs{
		gap: 0.5rem 1rem;
	}
	.single-product .woocommerce-tabs ul.tabs li a{
		padding-bottom: 0.75rem;
	}
}

/* ─── Карта + контакти ───────────────────────────────────────────────────── */

.map-embed{
	position: relative;
	border-radius: var(--border-radius);
	overflow: hidden;
	background-color: var(--wp--preset--color--stone-950);
}
.map-embed iframe{
	display: block;
	width: 100%;
	aspect-ratio: 1;
	border: 0;
	@media (max-width:767px){
		aspect-ratio: 3 / 2;
	}
}
.map-embed .map-embed__button{
	position: absolute;
	left: 1rem;
	right: 1rem;
	bottom: 1rem;
	display: block;
	text-align: center;
	padding: 0.75rem 1rem;
	border-radius: var(--border-radius);
	background-color: color-mix(in srgb, var(--wp--preset--color--stone-950) 85%, transparent);
	color: var(--wp--preset--color--stone-50);
	text-decoration: none;
	font-weight: var(--font-weight-heading);
	backdrop-filter: blur(0.5rem);
	transition: background-color 0.25s ease-out;
	@media (max-wiwdth: 767px){
		padding: 0.5rem 1rem;
	}
}
.map-embed .map-embed__button:hover{
	background-color: var(--wp--preset--color--primary-500);
}

/* "Приклади робіт" tab — the current product's own works shown as ONE flat photo
   grid (6 per row desktop / 3 mobile), no titles. Clicking a photo opens the
   PhotoSwipe lightbox gallery (js/single-product.js). No "view product" CTA. */
.works-block--gallery .works-photos{
	display: grid;
	grid-template-columns: repeat(6, 1fr);
	gap: var(--gap);
}
.works-photo{
	display: block;
	aspect-ratio: 4 / 5;
	border-radius: var(--border-radius);
	overflow: hidden;
	cursor: zoom-in;
	background-color: var(--wp--preset--color--stone-100);
}
.works-photo__img{
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform 0.5s var(--ease);
}
@media (hover: hover){
	.works-photo:hover .works-photo__img{
		transform: scale(1.05);
	}
}
@media (max-width: 781.98px){
	.works-block--gallery .works-photos{
		grid-template-columns: repeat(3, 1fr);
	}
}


/* ─── Стрічка «Наші роботи» (starter/work-card) ────────────────────────────
   Один рядок = один товар: ліворуч картка товару, праворуч фотографії
   реальних робіт із ним. Уся біла картка — посилання на товар, тож усередині
   немає жодного <a> (кнопка — це <span>).

   Блок стоїть усередині woocommerce/product-template, тому запит, фільтри й
   пагінація лишаються рідними для Product Collection. */

/* Подвоєний клас — щоб перебити рідне .is-flex-container WooCommerce, яке
   лишає flex-wrap: wrap на колонковому контейнері: обгортки товарів тоді
   розтягуються по висоті й картка виростає в кілька разів. */
.works-feed .wc-block-product-template.wc-block-product-template{
	display: flex;
	flex-direction: column;
	flex-wrap: nowrap;
	gap: 1.5rem;
	list-style: none;
	margin: 0;
	padding: 0;
}
.works-feed .wc-block-product-template > li{
	flex: 0 0 auto;
	width: 100%;
	max-width: none;
	margin: 0;
	padding: 0;
}

.works-row{
	--work-photo-gap: 0.25rem;
	--work-col-gap: 2rem;
	--work-card-pad: 2rem;

	display: grid;
	grid-template-columns: 15rem 1fr;
	align-items: start;
	gap: var(--work-col-gap);
	padding: var(--work-card-pad);
	background: var(--wp--preset--color--white, #fff);
	border-radius: var(--border-radius);
	color: inherit;
	text-decoration: none;
	transition: box-shadow 0.35s var(--ease);
}
.works-row:hover{
	box-shadow: 0 0 0 1px var(--wp--preset--color--stone-200), 0 12px 32px -18px rgba(28, 25, 23, 0.45);
}

/* ── Ліва колонка ──────────────────────────────────────────────────────── */
.works-row__info{
	position: sticky;
	/* Липку шапку сайта враховуємо через --header-height (виставляє main.js),
	   так само як фільтри каталогу вище — інакше колонка залипає під навігацією. */
	top: calc(var(--header-height, 0px) + 1rem);
	align-self: start;
	display: flex;
	flex-direction: column;
	align-items: flex-start;
}
.works-row__thumb{ width: 5rem; margin-bottom: 0.75rem; display: block; }
.works-row__thumb-img{ display: block; width: 100%; height: auto; border-radius: var(--border-radius); }

.works-row__name{ font-weight: 500; line-height: 1.3; margin-bottom: 0.35rem; }
.works-row__price{ font-weight: 700; }
.works-row__price .amount{ font-weight: 700; }

/* «ще N фото» текстом — лише на телефоні, де в сітці менше місць */
.works-row__more-note{ display: none; font-size: 0.875rem; color: var(--wp--preset--color--stone-800); }

.works-row__cta{
	display: block;
	width: 100%;
	margin-top: 1rem;
	text-align: center;
	background: var(--wp--preset--color--stone-950);
	color: var(--wp--preset--color--stone-50);
	border-radius: var(--border-radius);
	padding: 0.8em 1.1em;
	font-size: 0.875rem;
	transition: background-color 0.35s var(--ease);
}
.works-row:hover .works-row__cta{ background: var(--wp--preset--color--primary-500); }

/* ── Сітка фотографій ──────────────────────────────────────────────────── */
.works-row__photos{
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: var(--work-photo-gap);
	align-content: start;
}
.works-row__photo{
	position: relative;
	display: block;
	overflow: hidden;
	border-radius: var(--border-radius);
	aspect-ratio: 4 / 5;
	background: var(--wp--preset--color--stone-100);
}
.works-row__photo img{
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}
/* Перше фото — герой 2×2. Пропорція задана явно, а не успадкована від рядків:
   інакше картка з єдиним фото не мала б другого рядка й герой схлопувався б. */
.works-row__photos > :first-child{
	grid-column: span 2;
	grid-row: span 2;
}
.works-row__photo--more{
	display: grid;
	place-items: center;
	text-align: center;
	font-weight: 600;
	font-size: 0.875rem;
	color: var(--wp--preset--color--stone-800);
	background: var(--wp--preset--color--stone-100);
}

/* Єдиний виняток на десктопі — рівно два фото: дві однакові половини.
   `:has(> :nth-child(2):last-child)` = друге фото є останнім, тобто їх два. */
.works-row__photos:has(> :nth-child(2):last-child){
	grid-template-columns: repeat(2, 1fr);
}
.works-row__photos:has(> :nth-child(2):last-child) > :first-child{
	grid-column: auto;
	grid-row: auto;
}

/* ── Телефон ───────────────────────────────────────────────────────────── */
@media (max-width: 781.98px){
	.works-row{
		--work-col-gap: 1rem;
		--work-card-pad: 1rem;
		grid-template-columns: 1fr;
	}
	/* Фото зверху, інформація під ними */
	.works-row__info{ position: static; order: 2; align-items: stretch; text-align: center; }
	/* Каталожне фото зайве — його роль бере перше фото роботи */
	.works-row__thumb{ display: none; }
	.works-row__more-note{ display: block; margin-top: 0.5rem; order: 3; }

	.works-row__photos{ grid-template-columns: repeat(3, 1fr); }
	.works-row__photos > :first-child{ grid-column: 1 / -1; grid-row: auto; }
	/* П'ята плитка не вміщається в ряд із трьох — замість неї текст «ще N фото» */
	.works-row__photos > :nth-child(5){ display: none; }

	.works-row__photos:has(> :nth-child(2):last-child) > :first-child{ grid-column: auto; }
}


/* ─── Стрічка «Відгуки» (starter/review-card) ──────────────────────────────
   Блок стоїть усередині woocommerce/product-template, а Product Collection
   обмежена товарами з відгуками. Картка — та сама .review-card, що й на
   головній (спільний CSS вище).

   Розкладку НЕ переозначуємо власною сіткою: displayLayout=columns-2 вмикає
   рідну флекс-сітку WooCommerce, яку тема вже приводить до вигляду товарного
   каталогу (style.css: gap:var(--gap), li width:calc(50% - gap/2)). Свій grid
   тут ламав саме це — обгортки товару не тягнулись на всю колонку, і між
   картками зʼявлялись великі проміжки. Тож інтервали тепер точно як у товарній
   сітці. */

/* У каталозі карткою є сам li.wc-block-product (білий фон + padding:0.5rem —
   див. product-cards.css). Тут карткою є .review-card, тож li має лишитись
   голою коміркою: інакше виходить картка в картці — подвійний фон і зайвий
   відступ навколо відгуку. Гасимо оформлення обгортки й ховер-рамку. */
.reviews-feed li.wc-block-product{
	padding: 0;
	background: none;
	border: 0;
	border-radius: 0;
}
.reviews-feed li.wc-block-product::before{
	display: none;
}
/* Обгортки-li у флекс-ряду вже однакової висоти (align-items: stretch), але
   картка-<a> всередині за замовчуванням тягнеться лише по контенту. height:100%
   розтягує її на всю висоту li, тож усі картки в ряду рівні незалежно від
   довжини відгуку. */
.reviews-feed .review-card{
	width: 100%;
	height: 100%;
}


/* ─── Головна: вертикальний ритм секцій на телефоні ────────────── */
/* Секції зверстані з padding 5–6rem — на телефоні це завелика порожнеча.
   Ріжемо вдвоє. Значення серіалізуються блоком інлайново, тому !important.
   Дві секції навмисно стикуються з сусідньою (padding 0rem) — їхній нуль
   зберігаємо через селектор по інлайновому стилю, інакше між ними
   з’явиться розрив, якого в макеті немає. */
@media (max-width: 767px){
	.home .entry-content > section{
		padding-top: 3rem !important;
		padding-bottom: 3rem !important;
	}
	.home .entry-content > section[style*="padding-top:0rem"]{
		padding-top: 0 !important;
	}
	.home .entry-content > section[style*="padding-bottom:0rem"]{
		padding-bottom: 0 !important;
	}
}


/* ─── Секції товарів на сторінці товару (Схожі / Вам також / Компліменти) ── */
/* Всі три секції — один блок woocommerce/product-collection із спільною карткою
   (синхронізований патерн 738) і сіткою columns-5 — клас .products-row.
   На телефоні WooCommerce переносить сітку в 2 колонки; замість цього
   робимо горизонтальну стрічку з scroll-snap — як у галереї товару. */
@media (max-width: 767px){
	.products-row .wc-block-product-template{
		--products-row-card-w: 60vw;
		flex-wrap: nowrap !important;
		overflow-x: auto;
		/* Строго горизонтальна стрічка. overflow-x:auto змушує браузер
		   обчислити overflow-y як auto (вісь не може лишатись visible, коли друга — ні),
		   а через підпіксельне округлення висоти картки з'являється ~3px запасу — і стрічка
		   починає їздити вгору-вниз під пальцем. */
		overflow-y: hidden;
		/* touch-action тут СВІДОМО не задаємо. pan-x забороняє браузеру обробляти
		   вертикальні жести, що почались на картці — і сторінка взагалі перестає гортатись
		   пальцем по товарах. Одного overflow-y:hidden достатньо: стрічка не має
		   вертикального скролу, тож вертикальний свайп сам переходить на сторінку
		   (штатний scroll chaining). */
		scroll-snap-type: x mandatory;
		scrollbar-width: none;
		-webkit-overflow-scrolling: touch;
		/* WooCommerce тримає на списку width:100% — з фіксованою шириною негативні
		   маржі лише зсувають стрічку, а не розтягують її до країв екрана.
		   max-width:100% зверху теж обрізав би ширину до контейнера. */
		width: auto !important;
		max-width: none !important;
		/* Стрічка скролиться на всю ширину екрана: гасимо кореневий падінг
		   негативними маржами й повертаємо його як внутрішній, щоб перша/
		   остання картка лишались вирівняними з контентом. */
		margin-left: calc(var(--wp--style--root--padding-left) * -1);
		margin-right: calc(var(--wp--style--root--padding-right) * -1);
		padding-left: var(--wp--style--root--padding-left);
		padding-right: var(--wp--style--root--padding-right);
		scroll-padding-left: var(--wp--style--root--padding-left);
	}
	.products-row .wc-block-product-template::-webkit-scrollbar{
		display: none;
	}
	/* !important — WooCommerce задає ширину li через .is-flex-container.columns-N */
	.products-row .wc-block-product-template > li{
		flex: 0 0 var(--products-row-card-w) !important;
		width: var(--products-row-card-w) !important;
		max-width: var(--products-row-card-w) !important;
		scroll-snap-align: start;
	}
}


/* ─── A11y: закрита шторка міні-кошика не має ловити фокус ─────────── */
/* WooCommerce ставить на закриту шторку aria-hidden="true", але всередині
   залишаються фокусовані посилання/кнопки (visibility лишається visible) —
   axe: 'aria-hidden element must not be focusable'. visibility:hidden виводить
   піддерево з фокусу й з дерева доступності. Затримка 0.3s = тривалість
   анімації закриття (transform 0.3s), щоб контент не зникав до кінця виїзду;
   на відкритті (aria-hidden=false) правило відключається й контент видно одразу. */
.wc-block-mini-cart__drawer[aria-hidden="true"]{
	visibility: hidden;
	transition: transform 0.3s, visibility 0s linear 0.3s;
}
