/* Force every grid/carousel slot that holds one of our cards to stretch to
   the row's tallest item — without this, product titles/price-sentences of
   different lengths make neighboring cards end at different heights (grid
   items and swiper slides both default to sizing to their own content). */
li.product:has(.dcwb-shopee-card),
.swiper-slide:has(.dcwb-shopee-card),
.wd-carousel-container .swiper-slide:has(.dcwb-shopee-card) {
	display: flex;
	height: auto;
	align-items: stretch;
}

/* Efeito de revelação ao rolar — só em grids (Woodmart marca layout de
   grade com a classe "elements-grid", diferente de "elements-carousel" nos
   sliders/carrosséis, que não recebem esse efeito). JS (product-card-shopee.js)
   adiciona .dcwb-is-revealed via IntersectionObserver quando o card entra na
   tela, com atraso escalonado por posição pra entrar um de cada vez. */
.elements-grid .dcwb-shopee-card.dcwb-reveal-ready {
	opacity: 0;
	transform: translateY(24px);
	transition: opacity 0.5s ease, transform 0.5s ease;
}

.elements-grid .dcwb-shopee-card.dcwb-is-revealed {
	opacity: 1;
	transform: translateY(0);
}

@media (prefers-reduced-motion: reduce) {
	.elements-grid .dcwb-shopee-card.dcwb-reveal-ready {
		opacity: 1;
		transform: none;
		transition: none;
	}
}

/* Mobile: 2 columns with normal vertical wrapping (NOT a horizontal swipe
   strip — an earlier version collapsed the grid into one wide row, which
   fooled the theme's "load more on scroll" waypoint into thinking the
   button was always near the viewport and auto-fired it in a loop,
   silently fetching every page at once; that failure mode was specifically
   about the single-row horizontal collapse, not about column count, so a
   plain 2-column wrap here shouldn't reintroduce it — worth a real test of
   "carregar mais" after any future change here anyway). Desktop stays at
   Woodmart's own configured 3 columns (no override needed). */
@media (max-width: 768.98px) {
	/* Escopado por classe do <body> (loja/categoria) de propósito -- sem
	   isso, esse "2 colunas" vazava pra QUALQUER outra página com esse
	   mesmo tipo de card (Favoritos incluído: a correção anterior lá só
	   mexia na variável --wd-col-sm, mas essa regra aqui embaixo sobrescreve
	   grid-template-columns diretamente com !important, sem nem passar pela
	   variável -- por isso continuava em 2 colunas mesmo com a variável já
	   corrigida). Mesmo padrão de escopo já usado na regra logo abaixo desta
	   pro resto do card. */
	body.woocommerce-shop .products.wd-products.elements-grid:has(.dcwb-shopee-card),
	body.tax-product_cat .products.wd-products.elements-grid:has(.dcwb-shopee-card) {
		--wd-col-sm: 2 !important;
		/* Woodmart also sets its own per-instance --wd-col-sm as an inline
		   style (from the grid widget's "columns on mobile" setting), and the
		   custom-property indirection chain (--wd-col-sm -> --wd-col ->
		   grid-template-columns) is easy to accidentally break in a future
		   Woodmart update. Setting grid-template-columns directly here is a
		   second, independent guarantee that doesn't rely on that chain.
		   minmax(0, 1fr), not bare 1fr: a bare "1fr" track is shorthand for
		   minmax(auto, 1fr) — its minimum width can't go below the content's
		   own min-content size. The card's footer (qty stepper + cart
		   button, all flex:0 0 auto, no wrap) has a non-shrinkable minimum
		   around 170px; on narrow phones that's wider than half the
		   available row width, so the grid track — and the whole page,
		   since nothing clips it before body{overflow-x:clip} silently
		   slices off whatever pokes past the right edge — got forced wider
		   than the viewport. That's what was cutting off the second column.
		   minmax(0, 1fr) removes the content-based floor, matching what
		   Woodmart's own .wd-grid-g rule already uses everywhere else. */
		grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
	}
}

/* Mesmo com minmax(0,1fr) a coluna de 2-por-linha do celular ainda é
   estreita demais pra caber, lado a lado, o seletor de quantidade E o
   botão de comprar sem espremer os dois — reduzir cada peça em pixels foi
   tentado antes e ainda cortava/ficava apertado demais pra usar. Solução:
   empilhar em vez de espremer. Seletor de quantidade numa linha, botão de
   comprar ocupando a largura toda logo abaixo, com o texto "COMPRAR" de
   volta (tem espaço de sobra numa linha só pra ele).
   Escopado pela classe do <body> (loja/categoria), não só pela classe do
   grid — o grid de "produtos relacionados" usa essa mesma classe
   .products.wd-products.elements-grid por dentro de .related-products, e
   ali já tem largura de sobra numa única coluna (mantém lado a lado); só
   loja e categoria realmente têm a coluna de 2-por-linha estreita. */
@media (max-width: 768.98px) {
	body.woocommerce-shop .products.wd-products.elements-grid:has(.dcwb-shopee-card) .dcwb-shopee-card__quick,
	body.tax-product_cat .products.wd-products.elements-grid:has(.dcwb-shopee-card) .dcwb-shopee-card__quick {
		flex-direction: column;
		align-items: center;
		gap: 8px;
	}
	body.woocommerce-shop .products.wd-products.elements-grid:has(.dcwb-shopee-card) .dcwb-shopee-card__cart-btn,
	body.tax-product_cat .products.wd-products.elements-grid:has(.dcwb-shopee-card) .dcwb-shopee-card__cart-btn {
		flex: 0 0 auto;
		width: 100%;
		height: 40px;
		padding: 0 10px;
		border-radius: 999px;
	}
	body.woocommerce-shop .products.wd-products.elements-grid:has(.dcwb-shopee-card) .dcwb-shopee-card__cart-btn-label,
	body.tax-product_cat .products.wd-products.elements-grid:has(.dcwb-shopee-card) .dcwb-shopee-card__cart-btn-label {
		display: inline;
		font-size: 12px;
	}
}

/* Same problem, tablet-width gap: Woodmart's own breakpoint chain only
   reads --wd-col-sm below 768.98px — from there up to 1024px it falls back
   to --wd-col-md, which for this widget equals the desktop 3-column value
   ("columns on tablet" was left as "auto"). That's 3 columns squeezed into
   a narrower-than-desktop screen, the tightest possible card width on the
   whole site — this is what was still showing the cut-off COMPRAR button
   after the mobile (<=768px) and desktop min-width:0 fixes.
   Scoped to start at 769px (not a bare max-width:1024px): a bare upper
   bound also matches every phone width below 768px, and since this block
   sits after the mobile block above with the same selector specificity and
   !important, source order made THIS rule win on mobile too — silently
   forcing 1 column on phones even though the mobile block above looked
   completely correct on its own. That's what was actually causing the
   "still only 1 product per row on mobile" bug. */
@media (min-width: 769px) and (max-width: 1024px) {
	.products.wd-products.elements-grid:has(.dcwb-shopee-card) {
		--wd-col-md: 1 !important;
		/* minmax(0, 1fr), not bare 1fr — same grid-blowout risk as the
		   mobile rule above, prevented here as a matter of course even
		   though a single column has more room to work with. */
		grid-template-columns: minmax(0, 1fr) !important;
	}
}

/* "Produtos relacionados" (página de produto) agora usa o carrossel Swiper
   de verdade do Woodmart (layout:'carousel' em dcwb_dz_nano_products_html(),
   content-single-product-dz-nano.php) em vez de um grid CSS forçado a virar
   carrossel por scroll-snap manual. O scroll-snap manual (overflow-x:auto +
   scroll-snap-type) brigava com o scroll vertical da página -- o dedo
   passando por cima da faixa "sequestrava" o gesto pro scroll horizontal em
   vez de deixar a página continuar rolando, e o Swiper trata esse
   arbitration de gesto nativamente (mesmo mecanismo do carrossel da home).
   Não sobrou nenhum seletor daqui pra remover: o carrossel de verdade não
   carrega a classe "elements-grid" (troca pra "elements-carousel"), então a
   regra antiga já não bateria em nada mesmo sem essa limpeza. */

.dcwb-shopee-card {
	--dcwb-shopee-green: #16a34a;
	--dcwb-shopee-green-dark: #15803d;
	--dcwb-shopee-text: #111827;
	--dcwb-shopee-muted: #6b7280;
	--dcwb-shopee-amber: #b45309;
	--dcwb-shopee-blue: #8437C8;
	--dcwb-shopee-border: #e5e7eb;

	display: flex;
	flex-direction: column;
	width: 100%;
	height: 100%;
	background: #fff;
	border: 1px solid var(--dcwb-shopee-border);
	border-radius: 20px;
	overflow: hidden;
	transition: box-shadow 0.2s ease, transform 0.2s ease;
}

/* Só em telas com mouse de verdade (hover:hover + pointer:fine) -- em
   touchscreen (iOS Safari principalmente) tocar no card pode "grudar" esse
   :hover, e como esse card agora pode viver dentro de um slide de carrossel
   Swiper de verdade (que aplica o próprio transform pra deslizar durante o
   arrasto), os dois transforms (esse + o do Swiper) colidiam e o WebKit
   renderizava a foto torta/distorcida -- exatamente o bug reportado. Sem
   nenhuma perda no desktop, onde hover de mouse de fato existe. */
@media (hover: hover) and (pointer: fine) {
	.dcwb-shopee-card:hover {
		box-shadow: 0 12px 28px rgba(15, 23, 42, 0.1);
		transform: translateY(-2px);
	}
}

.dcwb-shopee-card__content {
	display: flex;
	flex-direction: column;
	flex: 1 1 auto;
	min-width: 0;
}

.dcwb-shopee-card__image {
	position: relative;
	display: block;
	background: #fff;
}

.dcwb-shopee-card__image img {
	display: block;
	width: 100%;
	height: auto;
	aspect-ratio: 1 / 1;
	object-fit: contain;
	padding: 4px;
}

.dcwb-shopee-card--oos .dcwb-shopee-card__image img {
	opacity: 0.55;
	filter: grayscale(40%);
}

.dcwb-shopee-card__discount-badge {
	position: absolute;
	top: 8px;
	left: 8px;
	z-index: 2;
	display: flex;
	align-items: center;
	justify-content: center;
	min-width: 38px;
	height: 38px;
	padding: 0 4px;
	border-radius: 50%;
	background: var(--dcwb-shopee-green);
	color: #fff;
	font-size: 11px;
	font-weight: 800;
	line-height: 1;
	letter-spacing: -0.01em;
	box-shadow: 0 2px 6px rgba(15, 23, 42, 0.18);
}

/* Segunda foto no hover — some suavemente por cima da capa quando o produto
   tem mais de uma imagem na galeria; sem efeito em toque/mobile (não existe
   :hover real lá, o que é o comportamento certo). */
.dcwb-shopee-card__hover-img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: auto;
	aspect-ratio: 1 / 1;
	object-fit: contain;
	padding: 4px;
	opacity: 0;
	transition: opacity 0.25s ease;
	background: #fff;
}

.dcwb-shopee-card__image:hover .dcwb-shopee-card__hover-img {
	opacity: 1;
}

/* Defensive: this card is intentionally minimal — hide any wishlist/compare/
   quick-view icon overlays the theme's global JS may inject on top of
   product images regardless of hover-style template. */
.dcwb-shopee-card__image .wd-tools-icons,
.dcwb-shopee-card__image .wd-compare-btn,
.dcwb-shopee-card__image .wd-wishlist-btn,
.dcwb-shopee-card__image .wd-quick-view,
.dcwb-shopee-card__image .wd-action-btn,
.dcwb-shopee-card__image .wcpc-btn,
.dcwb-shopee-card__image .yith-wcwl-add-to-wishlist,
.dcwb-shopee-card__image .wd-product-grid-slider-pagin {
	display: none !important;
}

.dcwb-shopee-card__body {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 5px;
	padding: 10px 12px 2px;
	text-align: center;
}

.dcwb-shopee-card__badge {
	display: inline-block;
	align-self: center;
	background: #111827;
	color: #fff;
	font-size: 9px;
	font-weight: 800;
	letter-spacing: 0.03em;
	text-transform: uppercase;
	padding: 3px 8px;
	border-radius: 4px;
}

.dcwb-shopee-card__rating {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 4px;
}

.dcwb-shopee-card__rating .star-rating {
	font-size: 11px;
}

.dcwb-shopee-card__rating-count {
	font-size: 11px;
	color: var(--dcwb-shopee-muted);
}

.dcwb-shopee-card__title {
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
	align-self: stretch;
	width: 100%;
	font-size: 13px;
	font-weight: 700;
	line-height: 1.3;
	color: var(--dcwb-shopee-text);
	text-decoration: none;
}

.dcwb-shopee-card__title:hover {
	color: var(--dcwb-shopee-green-dark);
}

.dcwb-shopee-card__price {
	display: flex;
	flex-direction: column;
	align-items: center;
	align-self: stretch;
	width: 100%;
	gap: 3px;
	line-height: 1.3;
}

.dcwb-shopee-price-installments {
	display: block;
	font-size: 10.5px;
	font-weight: 500;
	line-height: 1.35;
	color: var(--dcwb-shopee-muted);
	text-align: center;
}

.dcwb-shopee-price-installments .woocommerce-Price-amount {
	color: var(--dcwb-shopee-muted) !important;
	font-weight: 600 !important;
	font-size: inherit !important;
}

.dcwb-shopee-price-or {
	font-weight: 700;
	color: var(--dcwb-shopee-text);
}

.dcwb-shopee-price-row {
	display: flex;
	align-items: baseline;
	justify-content: center;
	flex-wrap: wrap;
	gap: 6px;
}

.dcwb-shopee-price-was {
	font-size: 12px;
	font-weight: 600;
	color: var(--dcwb-shopee-muted);
	text-decoration: line-through;
}

.dcwb-shopee-price-was .woocommerce-Price-amount {
	color: var(--dcwb-shopee-muted) !important;
	font-weight: 600 !important;
	font-size: inherit !important;
}

.dcwb-shopee-price-main {
	font-size: 20px;
	font-weight: 800;
	color: var(--dcwb-shopee-blue);
}

.dcwb-shopee-price-main .woocommerce-Price-amount {
	color: var(--dcwb-shopee-blue) !important;
	font-weight: 800 !important;
	font-size: inherit !important;
}

/* "à vista no PIX" como selo, não texto solto — era a informação que mais
   se perdia no meio do card (mesmo peso visual de qualquer outro texto
   pequeno); agora tem contorno/fundo próprios e sempre centralizado, então
   o olho encontra sem precisar procurar. */
.dcwb-shopee-price-note {
	display: inline-flex;
	align-items: center;
	gap: 3px;
	margin-top: 2px;
	padding: 3px 9px;
	border-radius: 999px;
	background: rgba(132, 55, 200, 0.1);
	font-size: 10.5px;
	font-weight: 600;
	color: var(--dcwb-shopee-text);
}

.dcwb-shopee-price-pix {
	color: var(--dcwb-shopee-blue);
	font-weight: 800;
}

/* Fallback price (no installment data available) reuses WooCommerce's own markup */
.dcwb-shopee-card__price > .price {
	font-size: 19px;
	font-weight: 800;
	color: var(--dcwb-shopee-blue);
}

.dcwb-shopee-card__price > .price .woocommerce-Price-amount {
	color: var(--dcwb-shopee-blue) !important;
	font-weight: 800 !important;
	font-size: inherit !important;
}

.dcwb-shopee-card__footer {
	margin-top: auto;
	padding: 8px 12px 12px;
}

.dcwb-shopee-card__btn {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 6px;
	width: 100%;
	height: 40px;
	border: 0;
	border-radius: 999px;
	background: var(--dcwb-shopee-green);
	color: #fff !important;
	font-size: 12px;
	font-weight: 800;
	letter-spacing: 0.01em;
	text-decoration: none !important;
	text-transform: uppercase;
	cursor: pointer;
	transition: background 0.15s ease;
}

/* Ícone dentro do próprio botão "Comprar agora"/"Ver opções" — reforça
   visualmente a ação de carrinho ao lado do texto, sem mudar nenhum
   comportamento (ver o listener de clique em functions.php, "Produto
   variável no grid", pra quando é variável). */
.dcwb-shopee-card__btn-icon {
	display: flex;
	align-items: center;
	justify-content: center;
	flex: 0 0 auto;
	width: 15px;
	height: 15px;
}

.dcwb-shopee-card__btn-icon svg {
	width: 100%;
	height: 100%;
}

.dcwb-shopee-card__btn:hover {
	background: var(--dcwb-shopee-green-dark);
	color: #fff !important;
}

.dcwb-shopee-card__btn--disabled {
	background: #e5e7eb;
	color: #9ca3af !important;
	cursor: not-allowed;
}

/* Feedback garantido ao clicar em "Comprar agora"/"Adicionar" — troca de
   texto + um "pulso" (scale) puramente em CSS por 1.4s (ver
   showAddedFeedback em product-card-shopee.js), sempre roda, sem
   depender de achar imagem/ícone do carrinho na tela. */
@keyframes dcwbShopeeBtnAdded {
	0% {
		transform: scale(1);
	}

	30% {
		transform: scale(1.06);
	}

	60% {
		transform: scale(0.98);
	}

	100% {
		transform: scale(1);
	}
}

.dcwb-shopee-card__btn--added {
	background: var(--dcwb-shopee-green-dark) !important;
	animation: dcwbShopeeBtnAdded 0.42s ease;
}

/* O filho direto do <ul> aqui é <div class="wd-product wd-col ...">, não
   <li> — sem media query: agora o PHP (content-product-dcwb-shopee.php)
   decide sozinho entre o botão cheio e este seletor+ícone, nunca os dois
   ao mesmo tempo, então vale em qualquer largura de tela, sem precisar
   de :has() pra esconder o botão cheio. */
.dcwb-shopee-card__quick {
	display: flex;
	align-items: center;
	gap: 8px;
}

.dcwb-shopee-card__stepper {
	display: flex;
	align-items: center;
	flex: 0 0 auto;
	height: 40px;
	border: 2px solid var(--dcwb-shopee-border);
	border-radius: 999px;
	overflow: hidden;
}

.dcwb-shopee-card__step {
	-webkit-appearance: none;
	appearance: none;
	border: 0;
	background: #f3f4f6;
	flex: 0 0 auto;
	width: 30px;
	height: 100%;
	font-size: 16px;
	font-weight: 700;
	color: var(--dcwb-shopee-text);
	cursor: pointer;
}

.dcwb-shopee-card__step:hover {
	background: #e5e7eb;
}

/* !important throughout: Woodmart's own global form styling
   (input[type='number']{width:100%;padding:0 15px;border:...}) has higher
   CSS specificity than a single class selector (element+attribute beats a
   bare class), so it was silently winning the cascade regardless of source
   order — the qty box was actually rendering at 100% of the stepper's
   width the whole time, ballooning the stepper and pushing the "+" button
   out of view. This is what every earlier "should be fixed" check missed:
   the CSS file itself was correct, but a higher-specificity rule elsewhere
   on the page was overriding it. */
.dcwb-shopee-card__qty {
	-moz-appearance: textfield;
	flex: 0 0 auto !important;
	width: 32px !important;
	max-width: 32px !important;
	min-width: 0 !important;
	height: 100% !important;
	padding: 0 !important;
	margin: 0 !important;
	border: 0 !important;
	border-radius: 0 !important;
	background: transparent !important;
	box-shadow: none !important;
	text-align: center;
	font-size: 13px;
	font-weight: 700;
	color: var(--dcwb-shopee-text);
}

.dcwb-shopee-card__qty::-webkit-outer-spin-button,
.dcwb-shopee-card__qty::-webkit-inner-spin-button {
	-webkit-appearance: none;
	margin: 0;
}

.dcwb-shopee-card__cart-btn {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 6px;
	position: relative;
	flex: 1 1 auto;
	min-width: 0;
	height: 40px;
	padding: 0 10px;
	border-radius: 999px;
	background: var(--dcwb-shopee-green);
	color: #fff !important;
	overflow: hidden;
	transition: background 0.15s ease;
}

.dcwb-shopee-card__cart-btn:hover {
	background: var(--dcwb-shopee-green-dark);
}

.dcwb-shopee-card__cart-btn svg {
	width: 17px;
	height: 17px;
	flex: 0 0 auto;
}

/* Icon-only by default (matches every multi-column grid — shop/category
   archive, 2-4 per row, always the narrowest card width on the site: no
   amount of shrinking makes "COMPRAR" fit reliably next to the qty stepper
   there, min-width:0 just moved the clipping from the card edge to inside
   the button). The text label is only turned back on, below, inside the
   wide single-column contexts (home carousels, related products) where
   there's actually room for it. */
.dcwb-shopee-card__cart-btn-label {
	display: none;
	font-size: 11px;
	font-weight: 800;
	line-height: 1;
	letter-spacing: 0.02em;
	text-transform: uppercase;
	white-space: nowrap;
}

.dcwb-shopee-card__cart-btn {
	flex: 0 0 auto;
	width: 40px;
	padding: 0;
	border-radius: 50%;
}

/* Depois de adicionar via AJAX, o WooCommerce/Woodmart mexe no conteúdo
   desse botão de um jeito que não dá pra prever com certeza (injeta link de
   texto "Ver carrinho" como irmão, e às vezes troca o conteúdo interno do
   próprio botão) — por isso o estado "adicionado" não depende de NENHUM
   ícone/markup sobrevivendo aqui dentro. A única coisa garantida é a classe
   "added" no botão em si (isso o WooCommerce sempre faz). Escondemos tudo
   que não seja a classe "added" e desenhamos o check só com CSS puro. */
.dcwb-shopee-card__quick > *:not(.dcwb-shopee-card__stepper):not(.dcwb-shopee-card__cart-btn) {
	display: none !important;
}

.dcwb-shopee-card__cart-btn {
	font-size: 0;
	line-height: 0;
}

.dcwb-shopee-card__cart-btn.added {
	background: #5B25B1 !important;
}

/* Esconde qualquer conteúdo que tenha sobrado dentro do botão (ícone
   original, texto, o que for) assim que ele estiver marcado como
   "adicionado" — só o ::after abaixo aparece nesse estado. */
.dcwb-shopee-card__cart-btn.added > * {
	display: none !important;
}

.dcwb-shopee-card__cart-btn.added::after {
	content: '';
	position: absolute;
	width: 12px;
	height: 6px;
	border-left: 2.5px solid #fff;
	border-bottom: 2.5px solid #fff;
	transform: rotate(-45deg) translate(1px, -2px);
}

/* Mobile card layout: kept vertical (image on top, full width), same as
   desktop — an earlier version forced a horizontal image-left/info-right
   row here, which squeezed the product photo down to ~38% width and read
   as cramped/small on a full-width single-column card (shop/category
   listing and the home page's own swiper carousels are both 1-per-row on
   mobile already, so there's no space pressure that a row layout was
   solving). No overrides needed — the base .dcwb-shopee-card rules
   (flex-direction: column, full-width square image) apply as-is. */

/* Home page product carousels ("Categorias em Destaque" wd_products
   widgets): on mobile each slide was exactly 100% width, so nothing from
   the next card was visible — no hint the row is swipeable. Woodmart's own
   carousel sizing is entirely driven by the --wd-col custom property
   (calc(100% / var(--wd-col)) on .wd-carousel-item, see style.css), which
   at mobile widths reads --wd-col-sm (set inline per-widget to a whole
   number, "1", by the Elementor widget's own "columns" setting).
   Overriding it here to a fractional value reuses that same calc() instead
   of adding a second, competing width rule — the slide becomes ~89% wide,
   leaving a peek of the next product. :has() scopes this to carousels that
   actually hold our custom card, so Woodmart's other native sliders (blog,
   testimonials, etc.) are untouched. */
@media (max-width: 768.98px) {
	.wd-carousel-container:has(.dcwb-shopee-card) .wd-carousel.wd-grid {
		--wd-col-sm: 1.12 !important;
	}
}

/* This same card renders at very different widths: a narrow shop-grid slot
   (2-4 per row, marked "elements-grid" by Woodmart) and a full-width
   single-item carousel slide (the home page's "Categorias em Destaque"
   widgets — wd-carousel-container, one huge product photo per slide).
   Font/spacing sized for the narrow grid read as small and disproportionate
   once the photo above them is 2-3x bigger. Scoped by the carousel
   container's own class rather than a viewport media query (the grid is
   also single-column on mobile, so a max-width query couldn't tell the two
   apart) and rather than a CSS container query (tried first — .dcwb-shopee-
   card is an unsized flex child of ".swiper-slide:has(...){display:flex}"
   above, and adding container-type:inline-size there visibly broke the
   quantity stepper/button row in production; reverted). */
/* A foto quadrada a 100% da largura do card fica enorme em pixels reais
   nesse contexto largo (1 card ocupando quase a tela toda no mobile), bem
   diferente da mesma imagem no grid estreito da loja -- é isso que fazia o
   card não caber na tela sem rolar. Altura fixa + object-fit:contain (já
   herdado) centraliza a foto (ainda inteira, sem cortar) num espaço menor,
   como a maioria das lojas faz em carrosséis largos. */
.wd-carousel-container .dcwb-shopee-card__image,
.related-products .dcwb-shopee-card__image {
	height: 220px;
}

.wd-carousel-container .dcwb-shopee-card__image img,
.related-products .dcwb-shopee-card__image img,
.wd-carousel-container .dcwb-shopee-card__hover-img,
.related-products .dcwb-shopee-card__hover-img {
	height: 100%;
	aspect-ratio: auto;
}

.wd-carousel-container .dcwb-shopee-card__body,
.related-products .dcwb-shopee-card__body {
	gap: 6px;
	padding: 14px 16px 4px;
}

.wd-carousel-container .dcwb-shopee-card__title,
.related-products .dcwb-shopee-card__title {
	font-size: 15px;
}

.wd-carousel-container .dcwb-shopee-price-installments,
.related-products .dcwb-shopee-price-installments,
.wd-carousel-container .dcwb-shopee-price-note,
.related-products .dcwb-shopee-price-note {
	font-size: 13px;
}

.wd-carousel-container .dcwb-shopee-price-was,
.related-products .dcwb-shopee-price-was {
	font-size: 14px;
}

.wd-carousel-container .dcwb-shopee-price-main,
.related-products .dcwb-shopee-price-main {
	font-size: 25px;
}

.wd-carousel-container .dcwb-shopee-card__footer,
.related-products .dcwb-shopee-card__footer {
	padding: 10px 16px 16px;
}

.wd-carousel-container .dcwb-shopee-card__stepper,
.related-products .dcwb-shopee-card__stepper {
	height: 46px;
}

.wd-carousel-container .dcwb-shopee-card__step,
.related-products .dcwb-shopee-card__step {
	width: 36px;
	font-size: 19px;
}

.wd-carousel-container .dcwb-shopee-card__qty,
.related-products .dcwb-shopee-card__qty {
	width: 38px !important;
	max-width: 38px !important;
	font-size: 14px;
}

.wd-carousel-container .dcwb-shopee-card__cart-btn,
.related-products .dcwb-shopee-card__cart-btn {
	flex: 1 1 auto;
	width: auto;
	height: 46px;
	padding: 0 10px;
	border-radius: 999px;
}

/* Ícone + palavra "COMPRAR" juntos brigavam por espaço com o stepper
   (minus/qty/plus) na mesma linha -- o texto sempre perdia e cortava no meio
   ("COMPR"), sem reticências, porque overflow:hidden só corta mesmo. Ícone é
   redundante ao lado da palavra por extenso (só faz sentido no card estreito
   da loja, onde a palavra nem cabe) -- removido aqui, sobrando espaço de
   verdade pro texto. text-overflow:ellipsis fica como rede de segurança caso
   ainda falte espaço numa tela bem pequena. */
.wd-carousel-container .dcwb-shopee-card__cart-btn svg,
.related-products .dcwb-shopee-card__cart-btn svg {
	display: none;
}

.wd-carousel-container .dcwb-shopee-card__cart-btn-label,
.related-products .dcwb-shopee-card__cart-btn-label {
	display: inline-block;
	max-width: 100%;
	overflow: hidden;
	text-overflow: ellipsis;
	font-size: 13px;
}

.wd-carousel-container .dcwb-shopee-card__discount-badge,
.related-products .dcwb-shopee-card__discount-badge {
	min-width: 46px;
	height: 46px;
	font-size: 13px;
}

/* "Fly to cart" feedback (product-card-shopee.js): quick bump on the header
   cart icon when the flying image clone lands on it. */
@keyframes dcwbCartBump {
	0% {
		transform: scale(1);
	}

	35% {
		transform: scale(1.22);
	}

	65% {
		transform: scale(0.94);
	}

	100% {
		transform: scale(1);
	}
}

.dcwb-cart-bump {
	animation: dcwbCartBump 0.32s ease;
}
