/* Padddo — ajustes de tema escuro para WooCommerce */

body {
	background-color: #0a0809;
	color: #bfbaba;
}

/* ---------- Root side padding (gutter) for constrained containers ----------
   theme.json turns on useRootPaddingAwareAlignments, so core already emits
   `.has-global-padding` (and its alignfull/alignwide bleed math) wired to
   the --wp--style--root--padding-* custom properties — but theme.json never
   defines a root spacing.padding, so core's global-styles-inline-css prints
   `body { --wp--style--root--padding-left: 0px; ... }`. That's a direct
   declaration on <body> itself, so it always wins over an inherited value
   from an ancestor (:root/html) no matter its specificity — it has to be
   overridden on `body` too. Any constrained "main" without its own
   hardcoded padding (single product, generic pages, cart/checkout) was
   rendering flush against the viewport edges on mobile as a result. Reuse
   the theme's existing 24px side gutter (same value templates already
   hardcode for the home sections) instead of duplicating padding on every
   template. This only feeds selectors that already reference the var; it
   does not add padding to body/.wp-site-blocks directly (the generated CSS
   only applies the var via `.has-global-padding`), so the full-bleed
   header/footer stay unaffected. */
body {
	--wp--style--root--padding-left: 24px;
	--wp--style--root--padding-right: 24px;
}

::selection {
	background: #5c4535;
	color: #ffffff;
}

/* ---------- Accessibility: visible keyboard focus ---------- */
/* No rule anywhere strips the browser's default focus outline, so keyboard
   navigation already works — but the UA default ring differs per browser
   (often a blue tone) and isn't guaranteed to read clearly against every
   dark surface/brown button on this palette. Defining one consistent,
   on-brand focus style (:focus-visible only, so it never shows on mouse
   clicks) makes keyboard focus unambiguous everywhere — links, buttons,
   form fields, cards — without touching any element's own click/hover
   behaviour. */
a:focus-visible,
button:focus-visible,
input:focus-visible,
textarea:focus-visible,
select:focus-visible,
.wp-block-button__link:focus-visible,
.woocommerce-LoopProduct-link:focus-visible {
	outline: 2px solid var(--wp--preset--color--accent);
	outline-offset: 2px;
}

/* ---------- WooCommerce loops & product cards ----------
   No boxed panel behind the product image, like the reference store — the
   photo sits directly on the page background. Keep a small radius on the
   thumbnail itself (set on .padddo-product-thumb img below) and a little
   breathing room so title/price never touch the image. */
ul.products li.product,
.wc-block-grid__product,
.wp-block-woocommerce-product-collection .wc-block-product {
	background: transparent;
	border-radius: 0;
	padding: 0 0 6px;
}

ul.products li.product .woocommerce-loop-product__title,
ul.products li.product h2,
.wc-block-grid__product-title {
	color: #ffffff;
	font-weight: 700;
}

ul.products li.product .price,
.wc-block-grid__product-price,
.price {
	color: #caa77c;
	font-weight: 700;
}

ul.products li.product .price del,
.price del {
	color: #7a7676;
	opacity: 0.8;
}

ul.products li.product .price ins,
.price ins {
	text-decoration: none;
	color: #caa77c;
}

/* Sale badge: dark pill over the bottom-left of the product image, like the reference store */
.padddo-product-thumb,
.wc-block-grid__product .wc-block-grid__product-image {
	position: relative;
	display: block;
	line-height: 0;
	overflow: hidden;
	border-radius: 6px;
}

/* Product card hover: every other interactive element on the site (nav
   links, buttons, footer icons) already has a hover microinteraction —
   product cards, arguably the single most-clicked element on the site, had
   none (confirmed with inspect_design: identical computed styles on hover).
   A subtle image zoom + title brightening (same accent-color/timing
   convention already used on nav links) gives clear "this is clickable"
   feedback without inventing a whole new visual language. */
.padddo-product-thumb img,
.wc-block-grid__product-image img {
	transition: transform 0.3s ease;
}

.woocommerce-loop-product__link:hover .padddo-product-thumb img,
li.wc-block-grid__product:hover .wc-block-grid__product-image img,
li.wc-block-product:hover .wc-block-grid__product-image img {
	transform: scale(1.05);
}

ul.products li.product .woocommerce-loop-product__link:hover .woocommerce-loop-product__title {
	color: var(--wp--preset--color--accent) !important;
}

li.wc-block-product:hover .wp-block-post-title a,
li.wc-block-grid__product:hover .wc-block-grid__product-title {
	color: var(--wp--preset--color--accent) !important;
}

/* The [featured_products]/[recent_products]/[sale_products] shortcodes run through
   wpautop, which injects stray <p> tags (with default browser margins) around the
   sale badge/thumbnail. Neutralize them without touching the markup or functionality. */
.padddo-product-thumb p {
	display: contents;
}

/* Same wpautop pass drops a stray </p> right after the thumbnail and a stray
   <p> right before the price, plus bare <br> tags around both of those and
   around the closing </a> — confirmed via inspect_design on the *live parsed
   DOM* (not just the raw HTML wpautop emits, which the browser reparses
   further): each li.product actually ends up as two top-level children —
   the real .woocommerce-loop-product__link (thumb + title) and a second,
   real <p> sibling that itself wraps a *second* nested
   .woocommerce-loop-product__link (price + a trailing <br>), a bare <br>,
   and the "Adicionar ao carrinho" button. Because li.product is a column
   flex container (see "equal card heights" rule below), that <p>'s own
   default browser margin (16px top + 16px bottom) and the bare <br> lines
   each become their own anonymous flex item, silently stacking invisible
   height into every single card — on the homepage's shortcode grids this
   compounded into a visibly oversized gap between the product rows and the
   next section heading. `display: contents` unwraps the stray <p> wrappers
   (dropping only their own margin box, same technique as the thumb rule
   above) so their real children — price, button — keep rendering exactly
   as before; `display:none` only removes the genuinely empty/stray <br>
   line breaks, never the price or button themselves. */
ul.products li.product > .woocommerce-loop-product__link > p,
ul.products li.product > p {
	display: contents;
}

ul.products li.product > .woocommerce-loop-product__link > br,
ul.products li.product > br {
	display: none;
}

.padddo-product-thumb img {
	display: block;
	width: 100%;
	aspect-ratio: 1 / 1;
	object-fit: cover;
	border-radius: 6px;
}

/* WooCommerce's default placeholder photo (shown when a product has no
   featured image yet, e.g. a newly-added demo product) is a light-grey
   image with a dark icon baked into its pixels — dropped onto this site's
   near-black cards it reads as a jarring white square instead of a "no
   photo yet" placeholder. Invert it so it sits on the dark background the
   same way every other product photo does, without touching the shortcode
   markup or WooCommerce's own placeholder mechanism. */
/* Matches the placeholder everywhere it can appear: the shortcode-driven
   homepage cards (.padddo-product-thumb), the product-collection block used
   on category/archive pages (.wc-block-components-product-image), and the
   older "Product New"/"Products" block WooCommerce Blocks still uses for its
   own built-in upsell strip on the empty-cart page (.wc-block-grid__product-image) —
   confirmed via inspect_design that this last one is a separate wrapper class
   the two rules above don't reach, so the same light-grey placeholder was
   still showing unstyled there. */
img.woocommerce-placeholder {
	background-color: #171310;
	filter: invert(1) brightness(0.62);
}

.onsale,
.wc-block-grid__product-onsale {
	position: absolute !important;
	top: 8px !important;
	bottom: auto !important;
	left: 8px !important;
	right: auto !important;
	margin: 0 !important;
	width: auto !important;
	height: auto !important;
	min-height: 0 !important;
	background: rgba(10, 8, 9, 0.82) !important;
	color: #ffffff !important;
	font-weight: 600 !important;
	border-radius: 20px !important;
	text-transform: none !important;
	font-size: 11px !important;
	line-height: normal !important;
	padding: 4px 10px !important;
	letter-spacing: 0.2px;
}

/* ---------- Grid/loop cards: "Adicionar ao carrinho" quick-add button ----------
   Store owner request: let customers add a simple product straight from the
   listing (shop/category grid, homepage [featured_products]/[recent_products]/
   [sale_products] sections, single-product "Produtos relacionados", and the
   empty-cart upsell grid) without opening the product page. AJAX add-to-cart
   is already enabled store-wide (woocommerce_enable_ajax_add_to_cart=yes), so
   simple products add without a page reload here; variable products (e.g. the
   ones with a size choice) keep WooCommerce's own default behaviour of
   showing "Selecionar opções"/"Escolher opções" and linking to the product
   page instead — expected, not something to special-case.

   Follow-up (design pass): a first version shipped this as a solid,
   full-width, always-visible button under every price — the owner reviewed
   it live and found the grid "poluído" (busy) with a heavy CTA repeated on
   every single card. Redesigned as a compact, secondary-weight pill (auto
   width, small cart icon + label, outline by default) instead of a loud
   full-width block, and — on pointer devices that actually support hover
   (desktop/trackpad, gated by the `(hover: hover)` media query below, never
   assumed from viewport width alone) — hidden until the card is hovered or
   keyboard-focused, so the resting grid reads clean like the reference store
   while the quick-add action is still one interaction away. Touch devices
   have no hover to reveal it with, so there the same compact/outline button
   simply stays visible all the time (base rules below, unmodified by the
   hover-only media query) — "always there but discreet" rather than
   full-width/loud.

   THREE different rendering engines share this card look (see the file-level
   notes above): the shortcode-driven loop (ul.products li.product, styled by
   content-product.php, also used for "Produtos relacionados" on the single-
   product page) renders the button as a plain <a class="button …">; the
   woocommerce/product-collection block (category/archive pages) renders it
   as its own block (.wp-block-woocommerce-product-button wrapping
   .wc-block-components-product-button__button); WooCommerce Blocks' own
   "Products (Beta)" grid (.wc-block-grid__product, used for the /carrinho/
   empty-cart upsell) wraps a similar <a class="add_to_cart_button"> in its
   own .wc-block-grid__product-add-to-cart div. All three keep inheriting
   this theme's base button colors on :hover (see "---------- Buttons
   ----------" below) — only the resting (non-hover) look, placement, size,
   and the hover-reveal behaviour are set here, scoped per engine. */
ul.products li.product .add_to_cart_button,
ul.products li.product a.button.product_type_simple,
ul.products li.product a.button.product_type_variable,
.wp-block-woocommerce-product-collection .wc-block-components-product-button__button,
.wc-block-grid__product .add_to_cart_button {
	display: inline-flex !important;
	align-items: center;
	justify-content: center;
	gap: 6px;
	width: auto !important;
	max-width: 100%;
	align-self: flex-start;
	box-sizing: border-box;
	margin: 10px 0 0 !important;
	padding: 7px 14px 7px 12px !important;
	background-color: transparent !important;
	color: #ffffff !important;
	border: 1px solid var(--wp--preset--color--button) !important;
	border-radius: 4px !important;
	font-weight: 700;
	font-size: 12px !important;
	line-height: normal !important;
	text-align: center;
	white-space: normal;
	text-decoration: none !important;
	transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease, opacity 0.2s ease, transform 0.2s ease;
}

/* Small cart-bag icon in front of the label — a quicker-to-scan affordance
   than text alone, reusing the same "bag" concept as the header mini-cart
   icon (parts/header.html, wp:woocommerce/mini-cart cartIcon="bag") without
   needing to duplicate that block's own SVG sprite markup here. Baked as a
   plain white icon (not currentColor/mask, to avoid cross-browser CSS-mask
   luminance-vs-alpha inconsistencies) since the button's resting text color
   is white; :hover below flips it to dark with a plain CSS filter to match
   the same background↔text color inversion every other button on the site
   already uses. */
ul.products li.product .add_to_cart_button::before,
ul.products li.product a.button.product_type_simple::before,
ul.products li.product a.button.product_type_variable::before,
.wp-block-woocommerce-product-collection .wc-block-components-product-button__button::before,
.wc-block-grid__product .add_to_cart_button::before {
	content: "";
	flex: none;
	width: 13px;
	height: 13px;
	background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4Z'/%3E%3Cpath d='M3 6h18'/%3E%3Cpath d='M16 10a4 4 0 0 1-8 0'/%3E%3C/svg%3E") no-repeat center / contain;
}

ul.products li.product .add_to_cart_button:hover,
ul.products li.product a.button.product_type_simple:hover,
ul.products li.product a.button.product_type_variable:hover,
.wp-block-woocommerce-product-collection .wc-block-components-product-button__button:hover,
.wc-block-grid__product .add_to_cart_button:hover {
	border-color: #ffffff !important;
}

ul.products li.product .add_to_cart_button:hover::before,
ul.products li.product a.button.product_type_simple:hover::before,
ul.products li.product a.button.product_type_variable:hover::before,
.wp-block-woocommerce-product-collection .wc-block-components-product-button__button:hover::before,
.wc-block-grid__product .add_to_cart_button:hover::before {
	filter: invert(1);
}

.wp-block-woocommerce-product-collection .wp-block-woocommerce-product-button {
	width: 100%;
	margin-top: 10px !important;
	text-align: left;
}

.wc-block-grid__product-add-to-cart {
	width: auto !important;
	margin-top: 10px !important;
}

/* WooCommerce swaps the button for a plain text "Ver carrinho" link once an
   AJAX add-to-cart succeeds (.added_to_cart) — keep it visually button-shaped
   too instead of falling back to a bare underlined link, so the card doesn't
   change its layout/shape at the exact moment it confirms the action worked.
   Unlike the quick-add button above, this is a transient success confirmation
   the shopper just triggered on purpose — it always stays fully visible
   (opacity 1, not gated by the hover-reveal media query below) so moving the
   mouse away right after clicking can't hide the very feedback that confirms
   the click worked; it also keeps the solid brand-brown fill (not the
   outline treatment) so it reads as a distinct, confirmed state rather than
   another quick-add prompt. */
ul.products li.product a.added_to_cart.wc_forward,
.wp-block-woocommerce-product-collection a.added_to_cart.wc_forward,
.wc-block-grid__product a.added_to_cart.wc_forward {
	display: inline-flex !important;
	width: auto !important;
	align-self: flex-start;
	box-sizing: border-box;
	margin-top: 10px;
	padding: 7px 14px;
	background-color: #5c4535;
	color: #ffffff;
	border-radius: 4px;
	font-weight: 700;
	font-size: 12px;
	text-align: center;
	text-decoration: none !important;
	opacity: 1 !important;
	pointer-events: auto !important;
	transform: none !important;
}

ul.products li.product a.added_to_cart.wc_forward:hover,
.wp-block-woocommerce-product-collection a.added_to_cart.wc_forward:hover,
.wc-block-grid__product a.added_to_cart.wc_forward:hover {
	background-color: #ffffff;
	color: #0a0809;
}

/* ---------- Quick-add button: hover-only reveal (real hover devices only) ----------
   Gated on `(hover: hover) and (pointer: fine)` — not a max-width breakpoint —
   because "desktop vs. mobile" isn't actually the same distinction as
   "supports hover vs. touch-only": a Windows laptop with a touchscreen or a
   tablet with a trackpad should get whichever behaviour matches how the
   pointer they're using right now actually works, not one tied to their
   screen size. Devices that don't match this query (phones, most tablets)
   simply never receive these overrides, so the always-visible compact/
   outline button from the base rules above stands as their permanent,
   already-discreet fallback — no extra "mobile" rules needed.
   opacity + pointer-events (not display/visibility) so the button's box
   keeps reserving its layout space while hidden — required so the "equal
   card heights within a row" fix (see below) keeps working identically
   whether or not the pointer happens to be over a given card right now;
   toggling display would change each card's content height and defeat that
   fix. `:focus-within` on the card (not just the button's own :focus)
   reveals it the instant Tab reaches it, so a keyboard user never lands on
   an invisible, opacity:0 focused control.
   `min-width: 783px` is added on top of `(hover: hover) and (pointer: fine)`
   as a belt-and-braces safety net, not the primary signal: the two pointer
   media features are the theoretically correct check (they already exclude
   phones/most tablets on their own, and a touchscreen laptop at a wide
   viewport is arguably still fine to hover-hide for), but real device
   behaviour occasionally misreports them on hybrid touch+mouse hardware —
   pairing them with this theme's own existing tablet/desktop breakpoint
   (see the 782px mega-menu switch above and 768px grid collapse below)
   guarantees the button can never end up permanently hidden on a small
   viewport no matter how a given device answers the pointer/hover query. */
@media (hover: hover) and (pointer: fine) and (min-width: 783px) {
	ul.products li.product .add_to_cart_button,
	ul.products li.product a.button.product_type_simple,
	ul.products li.product a.button.product_type_variable {
		opacity: 0;
		transform: translateY(4px);
		pointer-events: none;
	}

	ul.products li.product:hover .add_to_cart_button,
	ul.products li.product:hover a.button.product_type_simple,
	ul.products li.product:hover a.button.product_type_variable,
	ul.products li.product:focus-within .add_to_cart_button,
	ul.products li.product:focus-within a.button.product_type_simple,
	ul.products li.product:focus-within a.button.product_type_variable {
		opacity: 1;
		transform: translateY(0);
		pointer-events: auto;
	}

	.wp-block-woocommerce-product-collection .wc-block-components-product-button__button {
		opacity: 0;
		transform: translateY(4px);
		pointer-events: none;
	}

	.wp-block-woocommerce-product-collection li.wc-block-product:hover .wc-block-components-product-button__button,
	.wp-block-woocommerce-product-collection li.wc-block-product:focus-within .wc-block-components-product-button__button {
		opacity: 1;
		transform: translateY(0);
		pointer-events: auto;
	}

	.wc-block-grid__product .add_to_cart_button {
		opacity: 0;
		transform: translateY(4px);
		pointer-events: none;
	}

	li.wc-block-grid__product:hover .add_to_cart_button,
	li.wc-block-grid__product:focus-within .add_to_cart_button {
		opacity: 1;
		transform: translateY(0);
		pointer-events: auto;
	}
}

@media (prefers-reduced-motion: reduce) {
	ul.products li.product .add_to_cart_button,
	ul.products li.product a.button.product_type_simple,
	ul.products li.product a.button.product_type_variable,
	.wp-block-woocommerce-product-collection .wc-block-components-product-button__button,
	.wc-block-grid__product .add_to_cart_button {
		transition-duration: 0.001ms;
	}
}

/* ---------- Classic loop grid (ul.products): equal card heights ----------
   Adding the button above revealed a pre-existing row-alignment gap in this
   engine: WooCommerce's own woocommerce-layout.css lays ul.products out with
   plain floats + percentage widths (no CSS Grid/Flexbox), so a card whose
   title happens to wrap onto a second line (e.g. "Porta Terço Nossa
   Senhora" next to shorter one-line titles) pushes only *that* card's own
   price/button down — floats don't stretch siblings to match, so the row
   visibly stair-steps. Confirmed via inspect_design (product-collection
   engine, used on category pages, already renders with `display:grid` by
   default and needs no fix — every one of its row-1 cards already reports
   the identical 461px height regardless of title length). Recreating that
   same automatic row-stretch behaviour for this engine (CSS Grid's default
   `align-items:stretch`) — instead of leaving the mismatch for the new
   button to make more visible — plus `margin-top:auto` on the button so it
   settles at a consistent baseline at the bottom of every card in the row
   regardless of how many lines the title/price above it took. The 768px
   breakpoint mirrors WooCommerce's own smallscreen.css (enqueued with
   `media="only screen and (max-width: 768px)"`, confirmed in
   class-wc-frontend-scripts.php) which this replaces for ul.products only —
   same 2-column collapse point, now via grid-template-columns instead of
   floats.
   !important is required on the structural properties below: WooCommerce's
   own float/width rule is scoped as ".woocommerce ul.products li.product"
   — the shortcode's own wrapping "<div class="woocommerce columns-4">"
   supplies that ".woocommerce" ancestor class — which out-specifies a plain
   "ul.products li.product" selector despite this rule being more specific
   in element count; !important is the standard, already-used-throughout-
   this-file way to win that battle without copying WooCommerce's own
   ".woocommerce" wrapper class into every selector here. */
ul.products {
	display: grid !important;
	grid-template-columns: repeat(4, 1fr);
	column-gap: 24px;
}

/* WooCommerce core (woocommerce-layout.css) targets ".woocommerce ul.products"
   with a legacy float clearfix: `::before`/`::after { content:" ";
   display:table }`, meant to contain the old float-based li.product layout.
   The shortcode wrapper (`<div class="woocommerce columns-4">`) supplies that
   ".woocommerce" ancestor, so the rule still applies here even though this
   ul is now a grid container. Generated pseudo-elements with a `content`
   value and a non-"none" `display` become real grid items in their own
   right — the ::before lands in row1/col1 (browsers always place it before
   DOM children in source order), silently occupying the first cell and
   pushing every actual <li.product> one cell later. That's what produced the
   "3 + 4 + 1" stair-step instead of "4 + 4": row1's first slot went to an
   invisible pseudo-element, not to a missing product. Confirmed via
   inspect_design: li post-195 (DOM's first child) rendered at x=326
   (column 2) instead of x=120 (column 1). Neutralizing the pseudo-elements
   removes them from grid flow entirely; the clearfix itself is redundant
   once the container is `display:grid` (grid doesn't need float clearing).
   !important needed to outrank WooCommerce's own un-flagged rule regardless
   of selector specificity — same pattern used throughout this block. */
ul.products::before,
ul.products::after {
	content: none !important;
	display: none !important;
}

ul.products.columns-1 { grid-template-columns: 1fr; }
ul.products.columns-2 { grid-template-columns: repeat(2, 1fr); }
ul.products.columns-3 { grid-template-columns: repeat(3, 1fr); }
ul.products.columns-5 { grid-template-columns: repeat(5, 1fr); }
ul.products.columns-6 { grid-template-columns: repeat(6, 1fr); }

ul.products li.product {
	float: none !important;
	width: auto !important;
	/* Row gap kept equal to the grid's own column-gap (24px, declared above)
	   instead of an arbitrarily larger value — the two together read as one
	   uniform gutter, and it also trims the trailing whitespace a section's
	   last (often incomplete) row leaves before the next section heading. */
	margin: 0 0 24px !important;
	display: flex;
	flex-direction: column;
}

ul.products li.product .add_to_cart_button,
ul.products li.product a.button.product_type_simple,
ul.products li.product a.button.product_type_variable,
ul.products li.product a.added_to_cart.wc_forward {
	/* !important needed here: the card-look rules above (further up this
	   file) already set a shorthand `margin: 10px 0 0 !important`, which
	   — same selector, same specificity — would otherwise win this
	   margin-top:auto override by appearing earlier in the cascade. Being
	   later in source order + equally `!important` is what lets this one
	   win instead, so the button still settles at a consistent bottom
	   baseline across every card in an equal-height row regardless of how
	   many lines the title/price above it took (see the file-level comment
	   above ul.products for the full equal-height rationale). */
	margin-top: auto !important;
}

@media (max-width: 768px) {
	ul.products {
		grid-template-columns: repeat(2, 1fr) !important;
	}
}

/* Classic loop engine only (ul.products): WooCommerce's own add-to-cart.js
   keeps the original "Adicionar ao carrinho" button in the DOM (just marking
   it ".added") and inserts the "Ver carrinho" link as a new sibling next to
   it, rather than replacing it — confirmed in
   wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart.js
   (onAddToCartActions: "$thisbutton.addClass('added')" then
   "$thisbutton.after(...)"). Left alone that stacks two buttons in the same
   card. The product-collection block (Interactivity API-driven) doesn't have
   this — it already swaps to a single "Ver carrinho" link on its own — so
   this rule is scoped to the classic ul.products engine only. */
ul.products li.product .add_to_cart_button.added {
	display: none;
}

.star-rating {
	color: #caa77c;
}

/* ---------- Buttons ---------- */
a.button,
button.button,
.wc-block-components-product-button__button,
.single_add_to_cart_button,
input.button,
.wp-element-button {
	background-color: #5c4535 !important;
	color: #ffffff !important;
	border-radius: 4px !important;
	border: none !important;
	font-weight: 700;
}

a.button:hover,
button.button:hover,
.single_add_to_cart_button:hover,
.wc-block-components-product-button__button:hover {
	background-color: #ffffff !important;
	color: #0a0809 !important;
}

.is-style-outline .wp-block-button__link {
	background: transparent;
	border: 2px solid #ffffff;
	color: #ffffff;
}

/* ---------- Forms ---------- */
input,
textarea,
select,
.select2-container .select2-selection {
	background: #171310 !important;
	border: 1px solid #412817 !important;
	color: #ffffff !important;
	border-radius: 4px !important;
}

/* Browser autofill (root cause of the store owner's "amber/orange border on
   Endereço and Apartamento" report on the checkout's address form — those two
   are exactly the fields a browser-saved address profile fills in together).
   Chromium (Chrome/Edge) renders autofilled fields with its own internal
   `:-webkit-autofill` background/text treatment at a specificity that even
   `background`/`color` with `!important` above cannot override — the only
   reliable fix is repainting the field with an inset box-shadow the size of
   the input (long-standing, documented Chromium workaround) plus forcing the
   text back to white via `-webkit-text-fill-color`. Left unstyled, Chromium's
   own autofill treatment shows through with its own (light/amber-tinted)
   colors, clashing with this dark theme — exactly what was reported. `border`
   is repeated here too so it never gets a chance to differ from every other
   field's normal state. `transition: background-color 9999s …` is the
   standard trick to stop Chromium's own yellow-flash transition from
   animating in before the override paints. Scoped to the same
   input/textarea/select selectors as the "Forms" rule above (not just
   `.woocommerce-checkout`) since the same autofill mismatch can happen on any
   form on the site (login, my account, contact) — not a checkout-only bug. */
input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:active,
textarea:-webkit-autofill,
textarea:-webkit-autofill:hover,
textarea:-webkit-autofill:focus,
select:-webkit-autofill,
select:-webkit-autofill:hover,
select:-webkit-autofill:focus {
	-webkit-box-shadow: 0 0 0px 1000px #171310 inset !important;
	box-shadow: 0 0 0px 1000px #171310 inset !important;
	-webkit-text-fill-color: #ffffff !important;
	caret-color: #ffffff !important;
	border: 1px solid #412817 !important;
	-webkit-transition: background-color 9999s ease-in-out 0s;
	transition: background-color 9999s ease-in-out 0s;
}

/* Firefox's standard (non-prefixed) :autofill pseudo-class is better behaved
   than Chromium's but still worth pinning explicitly so the border/background
   never drifts from the rest of the form there either. */
input:autofill,
textarea:autofill,
select:autofill {
	background: #171310 !important;
	border: 1px solid #412817 !important;
	color: #ffffff !important;
}

/* Native radio inputs are themselves the visible control in WooCommerce
   Blocks' Cart/Checkout (shipping method, payment method): WooCommerce's own
   CSS draws them as a circle (border-radius:50%, position:absolute over the
   option label) with a small inner dot drawn on top when :checked, and gives
   checked vs. unchecked options two different background colors so they're
   easy to tell apart at a glance. The generic 4px radius above overrides
   that circle into a rounded square, and forcing the exact same dark
   background on every input regardless of state also erases the visual
   difference WooCommerce relies on to show which option is currently
   selected — together, on the shipping/payment method lists, this reads as
   a small dark blob sitting on/under the option text rather than a clean
   selection control. Restore the circular shape and a clear checked state
   using the theme's own palette instead of overriding shape/state away. */
input[type="radio"] {
	border-radius: 50% !important;
	background: #171310 !important;
	border-color: #412817 !important;
}

input[type="radio"]:checked {
	border-color: #caa77c !important;
}

input[type="radio"]:checked::before {
	background: #caa77c !important;
}

/* WooCommerce Blocks' own checkbox control (Cart/Checkout — e.g. "Usar o
   mesmo endereço para cobrança" on the shipping address step, and "Criar uma
   conta?"/terms checkboxes wherever this same component is used) is not a
   plain native `<input type="checkbox">` rendered by the browser: the input
   itself is invisible (opacity/position tricks) and the square + checkmark
   the shopper actually sees are drawn by the theme/plugin around it — the
   square via the generic `input` rule above (dark background, brown border,
   both fine as-is), and the checkmark via a separate inline `<svg
   class="wc-block-components-checkbox__mark">` that WooCommerce Blocks shows
   only once the input is `:checked`. That SVG's `<path>` has no `fill`
   attribute of its own, so it paints with `fill: currentColor`, inheriting
   whatever text `color` cascades down to it — on this dark theme that
   resolves to the muted grey/near-black body copy color, not white, so the
   checkmark all but disappears against the already-dark checkbox square
   (confirmed via inspect_design: computed `color: rgb(191, 186, 186)` on the
   checkbox wrapper, well below the contrast needed on `#171310`). Painting
   the mark in the theme's white accent token fixes it without touching the
   square's background/border. Scoped to the class WooCommerce Blocks uses
   for every instance of this control (not just the billing-address
   checkbox) since the same currentColor/dark-on-dark mismatch would affect
   any other checkbox built from this component (e.g. "Criar uma conta?",
   terms and conditions) — fixing it once here keeps every checkbox on the
   site consistent instead of only patching the one the owner happened to
   notice. */
.wc-block-components-checkbox__mark,
.wc-block-components-checkbox__mark path {
	fill: var(--wp--preset--color--accent) !important;
}

/* ---------- Cart / checkout tables ---------- */
table.shop_table,
.woocommerce-cart-form,
.woocommerce-checkout-review-order-table {
	color: #bfbaba;
	border-color: #412817 !important;
}

table.shop_table th,
table.shop_table td {
	border-color: #412817 !important;
}

/* ---------- WhatsApp floating button ---------- */
.padddo-whatsapp-float {
	position: fixed;
	right: 20px;
	bottom: 20px;
	width: 56px;
	height: 56px;
	background: #25d366;
	border-radius: 50%;
	display: flex;
	align-items: center;
	justify-content: center;
	box-shadow: 0 4px 14px rgba(0, 0, 0, 0.45);
	z-index: 9999;
	transition: transform 0.2s ease;
}

.padddo-whatsapp-float:hover {
	transform: scale(1.08);
}

/* Checkout: hide the floating WhatsApp button — root cause of the store
   owner's "elementos se sobrepondo" report on the billing/shipping address
   forms. This button is `position:fixed;right:20px;bottom:20px` (same
   viewport-anchored pattern the cookie notice used to have — see that fix
   above), so on the single-column mobile checkout it inevitably sits on top
   of whatever form field/summary line happens to scroll under that corner
   (confirmed via take_screenshot/inspect_design: it visibly covers the
   "Endereço" input while filling the shipping form, and the "Endereço de
   cobrança" summary line when billing differs from shipping — the exact
   both-forms overlap reported). It isn't a label/input CSS bug: WooCommerce
   Blocks' own floating-label address form (verified against this theme's
   CSS in isolation) positions labels/inputs correctly in every state
   (empty, focused, filled) and the recently-touched Melhor Envio CEP
   calculator CSS (`.containerCalculator`/`.iptCep`, product page only) never
   reaches this block at all — different markup, different page.
   Hiding (not deleting) it only on `.woocommerce-checkout` keeps the button
   fully working everywhere else (home, shop, product, cart) and doubles as
   good checkout UX: one less floating distraction while paying. */
body.woocommerce-checkout .padddo-whatsapp-float {
	display: none;
}

/* ---------- Cookie notice ---------- */
/* Root-cause fix for the notice overlapping page content (e.g. checkout's
   contact/address fields — name, e-mail, phone, zip): a position:fixed bar
   anchored to the viewport always ends up covering *something* underneath
   it, and on a tall single-column page that's whatever form field happens
   to fall in its footprint at the current scroll position/viewport height —
   reserving extra space at the very end of the document (previous approach)
   only prevented it from covering the footer, not fields further up the
   page. Rendering it as a normal, non-fixed bar at the very top of the page
   (padddo_cookie_notice() now runs on wp_body_open, before the header)
   removes the overlap everywhere: it occupies real layout space and simply
   pushes the rest of the page down for as long as it's visible, instead of
   floating on top of it. */
.padddo-cookie-notice[hidden] {
	display: none;
}

.padddo-cookie-notice {
	position: relative;
	width: 100%;
	background: #171310;
	color: #bfbaba;
	border-bottom: 1px solid #412817;
	padding: 14px 24px;
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 16px;
	flex-wrap: wrap;
	font-size: 13px;
	box-sizing: border-box;
}

.padddo-cookie-notice a {
	color: #caa77c;
}

.padddo-cookie-notice button {
	background: #5c4535;
	color: #fff;
	border: none;
	border-radius: 4px;
	padding: 8px 18px;
	font-weight: 700;
	cursor: pointer;
	white-space: nowrap;
}

/* ---------- Hero category avatars (circular, like the reference store) ---------- */
/* The reference store leaves a generous ~100px gap between the hero subtitle
   and the category row (confirmed by inspecting both desktop and mobile) —
   noticeably more breathing room than a simple 16px stack spacing. */
.padddo-hero-categories {
	display: flex;
	justify-content: center;
	align-items: flex-start;
	gap: 40px;
	flex-wrap: wrap;
	margin-top: 96px;
}

.padddo-hero-category {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 10px;
	text-decoration: none;
}

.padddo-hero-category__avatar {
	display: block;
	width: 88px;
	height: 88px;
	border-radius: 50%;
	background-size: cover;
	background-position: center;
	background-color: #171310;
	border: 1px solid rgba(255, 255, 255, 0.1);
}

.padddo-hero-category__label {
	color: var(--wp--preset--color--foreground);
	font-size: 14px;
	text-align: center;
	max-width: 100px;
	line-height: 1.3;
}

.padddo-hero-category:hover .padddo-hero-category__label {
	color: var(--wp--preset--color--accent);
}

@media (max-width: 600px) {
	.padddo-hero-categories {
		gap: 22px;
	}

	.padddo-hero-category__avatar {
		width: 64px;
		height: 64px;
	}

	.padddo-hero-category__label {
		font-size: 12px;
		max-width: 80px;
	}
}

/* ---------- Footer social icons ---------- */
.padddo-footer-social {
	display: flex;
	gap: 14px;
	margin-top: 14px;
}

.padddo-footer-social a {
	color: var(--wp--preset--color--foreground);
	display: inline-flex;
}

.padddo-footer-social a:hover {
	color: var(--wp--preset--color--accent);
}

/* ---------- Header sticky ---------- */
header.wp-block-template-part {
	position: sticky;
	top: 0;
	z-index: 999;
}

/* Header scroll microinteraction: the header compresses slightly (less
   vertical padding, smaller logo) once scrolled past a small threshold,
   and eases back to normal near the top — see padddo_header_scroll_script()
   in functions.php for the class toggle. Discreet, no layout jump. */
.padddo-header-inner {
	transition: padding 0.25s ease;
}

header.wp-block-template-part.is-scrolled .padddo-header-inner {
	padding-top: 8px;
	padding-bottom: 8px;
}

.padddo-header-logo {
	transition: transform 0.25s ease;
	transform-origin: left center;
}

header.wp-block-template-part.is-scrolled .padddo-header-logo {
	transform: scale(0.82);
}

/* ---------- Header layout: keep logo/icons from being crushed, let nav take the middle ---------- */
.padddo-header-logo {
	flex-shrink: 0;
}

.padddo-header-nav {
	flex: 1 1 auto;
	min-width: 0;
}

.padddo-header-icons {
	flex-shrink: 0;
	gap: 12px !important;
	column-gap: 12px !important;
	align-items: center;
}

/* Header search collapses to an icon and expands on focus, like the reference store */
.padddo-header-search {
	flex-shrink: 0;
}

.padddo-header-search .wp-block-search__inside-wrapper {
	background: transparent;
	border: none !important;
	transition: none;
}

.padddo-header-search .wp-block-search__input {
	width: 0;
	min-width: 0;
	padding: 0 !important;
	border: 0 !important;
	opacity: 0;
	background: #171310 !important;
	transition: width 0.25s ease, opacity 0.2s ease, padding 0.25s ease;
}

.padddo-header-search:focus-within .wp-block-search__input {
	width: 160px;
	opacity: 1;
	padding: 6px 10px !important;
	border: 1px solid #412817 !important;
	margin-right: 4px;
}

.padddo-header-search .wp-block-search__button {
	background: transparent !important;
	color: var(--wp--preset--color--foreground) !important;
	padding: 6px !important;
}

.padddo-header-search .wp-block-search__button:hover {
	background: transparent !important;
	color: var(--wp--preset--color--accent) !important;
}

/* The nav block now sets an explicit dark backgroundColor (see parts/header.html)
   purely so the mobile overlay menu isn't white (core's fallback for navs with
   no background at all — see wp-includes/blocks/navigation/style.css). That
   also makes core add 0.5em 1em padding to every top-level link (its "paddings
   for navs with a background" rule), which is enough extra width to wrap the
   desktop bar onto two lines. Reset it back to the original zero padding for
   the top-level bar only — the dropdown/mega-menu items keep their own
   padding below, untouched. */
ul.wp-block-navigation__container.padddo-header-nav > li > .wp-block-navigation-item__content {
	padding: 0;
}

/* Header nav submenu ("Produtos") dropdown — dark theme */
.padddo-header-nav .wp-block-navigation__submenu-container {
	background: #171310 !important;
	border: 1px solid #412817;
	border-radius: 4px;
	padding: 6px 0;
}

.padddo-header-nav .wp-block-navigation__submenu-container .wp-block-navigation-item__content {
	color: #bfbaba !important;
	padding: 8px 18px;
}

.padddo-header-nav .wp-block-navigation__submenu-container .wp-block-navigation-item:hover > .wp-block-navigation-item__content {
	color: #ffffff !important;
}

.padddo-header-nav .wp-block-navigation-item.has-child > .wp-block-navigation-item__content {
	display: flex;
	align-items: center;
	gap: 4px;
}

/* ---------- Mobile overlay: drill-down panel navigation ----------
   Reference (Nuvemshop) mobile menu doesn't expand "Produtos" in place —
   tapping it slides to a whole new panel showing categories, with a back
   button to return; tapping a category that itself has subcategories (e.g.
   "Casa e Jardim") drills one level deeper the same way (confirmed via
   inspect_design on https://padddo.lojavirtualnuvem.com.br: their own
   implementation swaps `.js-menu-panel` elements via JS, each with its own
   back-button header showing the current panel's title).

   Rebuilt (2026-08-17) on a simpler, structurally bug-proof model after
   three real focus/scroll bugs surfaced in the previous
   position:absolute;inset:0-stacked-panels version (every panel — active
   or not — permanently present, sharing one sizing anchor via a
   min-height:60vh hack) — the last of which (going back out of a 2nd-level+
   panel briefly blanking the whole overlay) resisted several targeted
   fixes (preventScroll, mousedown guards, overflow-x:clip) because the
   browser's own implicit scroll-into-view-on-focus kept finding
   *something* to scroll inside that shared, technically-still-scrollable
   anchor. Root cause: as long as more than one panel is simultaneously
   present in the layout at all (even off-canvas/invisible), any
   scrollable ancestor above them is a target for that behaviour.

   The fix is architectural, not another patch: at any moment, exactly ONE
   panel (a "has-child" item's own ".wp-block-navigation__submenu-container",
   or the root list) is actually rendered — display:none, not merely
   hidden, for every other one (see the base rule below). display:none
   removes a subtree from layout entirely; there is no second panel left
   anywhere for a stray scroll-into-view to land on, so the whole bug
   class is gone by construction rather than patched around.
   Because the active panel can be nested several "has-child" levels deep
   in the DOM (nothing is physically moved — see the note below on why),
   every covered ANCESTOR panel on the way down to it is given
   "display: contents" instead of "display: none": a contents box paints
   nothing of its own and takes no layout space, but — unlike
   display:none — does not remove its descendants, so the one active
   panel further down still renders, effectively flattened straight into
   the shared overlay content column with no absolute positioning and no
   shared sizing anchor required at all. Every *other* child of a
   passthrough panel (i.e. every item not on the path to the active one)
   is hidden the same generic way (see ".padddo-panel-path-item" below).
   Nothing is physically moved in the DOM (core/navigation renders ONE
   shared tree for both the desktop bar and the mobile overlay — moving
   nodes would break the desktop mega menu's own
   "> li.has-child > .submenu-container" selectors). Everything below is
   scoped strictly under ".is-menu-open", so none of it can reach desktop. */

/* Base state: every submenu panel anywhere in the tree is hidden by
   default. core's own same-context rule (wp-includes/blocks/navigation/
   style.css, ".is-menu-open:where(...) .responsive-container-content
   .has-child .submenu-container") sets opacity/visibility/height back to
   "shown" with no !important, so !important here is enough to win
   regardless of source order — see the more specific overrides below for
   the one panel that should actually be visible at a time. */
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container {
	display: none !important;
}

/* The active (topmost/current) panel — either the root list, or whichever
   "has-child" item's own submenu the user has drilled into. Plain
   in-flow content, no absolute positioning: it simply becomes the only
   thing rendered inside ".responsive-container-content" (or, when
   nested, the only thing rendered inside its now-boxless ancestors — see
   ".padddo-panel-passthrough" below), so it naturally takes the full
   width/normal document-flow position with nothing to anchor against. */
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container.padddo-header-nav.padddo-panel-active,
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container.padddo-panel-active {
	display: flex !important;
	flex-direction: column !important;
	align-items: flex-start !important;
	gap: var(--wp--style--block-gap, 24px) !important;
	background: transparent !important;
	border: none !important;
	border-radius: 0 !important;
	padding: 0 !important;
	width: 100%;
	/* Enter transition — see padddo_mobile_drilldown_script: a freshly
	   activated panel starts one animation frame earlier at
	   ".padddo-panel-enter" (translateX+opacity offset below), then this
	   resting transform/opacity is what it animates to. transform/opacity
	   never affect layout/box position for any element regardless of its
	   own "position" value, so — unlike the old translateX(100%)
	   choreography this replaces — animating them here can never disturb
	   any ancestor's scroll state or any sibling's layout. */
	transform: none;
	opacity: 1;
	transition: transform .3s ease-out, opacity .3s ease-out;
}

.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container.padddo-panel-active.padddo-panel-enter {
	transform: translateX(16px);
	opacity: 0;
	transition: none !important;
}

@media (prefers-reduced-motion: reduce) {
	.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container.padddo-panel-active {
		transition-duration: .001ms;
	}
}

/* A covered ancestor on the way down to the active panel (e.g. the root
   list, or "Produtos"'s own panel, while "Casa e Jardim" is the active
   leaf): renders no box of its own and takes no layout space, but keeps
   its descendants rendering — see the file-level comment above for why
   this (not display:none) is what makes a deeply-nested active panel
   reachable without any absolute positioning. */
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container.padddo-header-nav.padddo-panel-passthrough,
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container.padddo-panel-passthrough {
	display: contents !important;
}

/* The one "has-child" item, inside a passthrough panel, whose own submenu
   is the next step down the active path: it also renders as a
   contents-only pass-through (so its child panel — active, or itself
   passthrough one level further down — flattens straight into the
   grandparent), with its own title link/chevron hidden (the active
   panel's back-button header, injected by the script, already shows this
   item's name — see ".padddo-panel-header" below). */
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container.padddo-header-nav .has-child.padddo-panel-path-item {
	display: contents !important;
}

.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container.padddo-header-nav .has-child.padddo-panel-path-item > .wp-block-navigation-item__content,
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container.padddo-header-nav .has-child.padddo-panel-path-item > button.wp-block-navigation__submenu-icon {
	display: none !important;
}

/* Every OTHER direct child of a passthrough panel — i.e. every item that
   is not on the path down to the active panel — must not leak through
   the passthrough panel's now-boxless "display:contents". One generic
   rule covers every depth: whichever panel is currently ".padddo-panel-
   passthrough", hide all its children except the single
   ".padddo-panel-path-item" the script marked. */
.wp-block-navigation__responsive-container.is-menu-open .padddo-panel-passthrough > li:not(.padddo-panel-path-item) {
	display: none !important;
}

.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container.padddo-panel-active .wp-block-navigation-item {
	width: 100%;
}

/* Re-show the chevron on every drillable item at any depth (core hides all
   submenu icons unconditionally in the overlay); point it right (a "drill
   in" affordance) instead of core's default down-pointing dropdown arrow */
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container.padddo-header-nav .has-child > button.wp-block-navigation__submenu-icon {
	display: flex !important;
	align-items: center;
	justify-content: center;
	width: 28px;
	height: 28px;
	margin-left: auto;
	background: transparent;
	border: none;
	color: inherit;
	transform: rotate(-90deg);
}

.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container.padddo-header-nav .has-child > button.wp-block-navigation__submenu-icon svg {
	width: 12px;
	height: 12px;
}

.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container.padddo-header-nav .has-child {
	flex-direction: row;
	align-items: center;
}

/* Panel header: back button + current panel title, injected once per panel
   by padddo_mobile_drilldown_script. Scoped strictly under ".is-menu-open"
   like the rest of the drill-down styles above — this was previously a bare,
   unscoped `!important` rule, so the injected header stayed visible (and
   duplicated the category title) in the desktop mega menu too. */
.padddo-panel-header {
	display: none;
	width: 100%;
	margin: 0 0 4px;
}

.wp-block-navigation__responsive-container.is-menu-open .padddo-panel-header {
	display: flex !important;
}

.padddo-panel-back {
	display: flex;
	align-items: center;
	gap: 10px;
	width: 100%;
	padding: 8px 0 16px;
	background: transparent;
	border: none;
	border-bottom: 1px solid #2a211b;
	color: #ffffff;
	font-family: inherit;
	font-weight: 700;
	font-size: 16px;
	text-align: left;
	cursor: pointer;
}

.padddo-panel-back svg {
	flex: none;
	width: 16px;
	height: 16px;
}

/* ---------- "Produtos" mega menu ----------
   The reference store reveals a full-width panel on hover with each product
   category as its own column and its subcategories listed underneath (not a
   simple nested flyout). core/navigation's built-in submenu already reveals
   on hover/focus (see wp-includes/blocks/navigation/style.css) and already
   holds this exact category → subcategory data (parts/header.html), so reuse
   that structure/behaviour and only change the *layout* of the panel:
   - the top-level "Produtos" trigger drops "position:relative" so its panel
     positions against the whole nav bar instead of just the trigger link
     (this also makes "top: 100%" track the header's scroll-shrink height
     automatically, with no magic pixel offsets needed);
   - the panel itself becomes a wrapping flex row spanning the nav's width;
   - each category's own (currently flyout) submenu is unlocked from
     "hidden until hovered again" into an always-visible column list. */
@media (min-width: 782px) {
	ul.wp-block-navigation__container.padddo-header-nav > li.has-child {
		position: static;
	}

	ul.wp-block-navigation__container.padddo-header-nav > li.has-child > .wp-block-navigation__submenu-container {
		left: 0;
		right: 0;
		top: 100%;
		width: auto;
		min-width: 0;
		display: flex;
		flex-direction: row;
		flex-wrap: wrap;
		align-items: flex-start;
		justify-content: space-between;
		gap: 28px 40px;
		padding: 28px 32px !important;
		border-left: none;
		border-right: none;
		border-radius: 0;
	}

	/* Each category column: name on top, its subcategories stacked below —
	   instead of the default single side-flyout that needs a second hover. */
	ul.wp-block-navigation__container.padddo-header-nav > li.has-child > .wp-block-navigation__submenu-container > li.has-child {
		flex-direction: column;
		align-items: flex-start;
		min-width: 150px;
	}

	ul.wp-block-navigation__container.padddo-header-nav > li.has-child > .wp-block-navigation__submenu-container > li.has-child > .wp-block-navigation-item__content {
		color: #ffffff !important;
		font-weight: 700;
		padding: 0 0 10px;
	}

	ul.wp-block-navigation__container.padddo-header-nav > li.has-child > .wp-block-navigation__submenu-container > li.has-child > .wp-block-navigation__submenu-container {
		position: static;
		visibility: visible;
		opacity: 1;
		width: auto;
		height: auto;
		overflow: visible;
		min-width: 0;
		display: flex;
		flex-direction: column;
		gap: 2px;
		padding: 0 !important;
		border: none;
		background: transparent !important;
	}

	ul.wp-block-navigation__container.padddo-header-nav > li.has-child > .wp-block-navigation__submenu-container > li.has-child > .wp-block-navigation__submenu-container .wp-block-navigation-item__content {
		padding: 4px 0;
	}

	/* The default flyout arrow/caret next to each category name isn't needed
	   once its subcategories are always shown inline below it. */
	ul.wp-block-navigation__container.padddo-header-nav > li.has-child > .wp-block-navigation__submenu-container > li.has-child .wp-block-navigation__submenu-icon {
		display: none;
	}
}

/* Nav link hover — brighten to accent white + a thin underline bar that grows in,
   matching the underline microinteraction on the reference store's menu. Applies
   to top-level items and dropdown/mega-menu items alike, like the reference. */
.padddo-header-nav .wp-block-navigation-item__content {
	position: relative;
	transition: color 0.2s ease;
}

.padddo-header-nav .wp-block-navigation-item__content::after {
	content: "";
	position: absolute;
	left: 0;
	right: 0;
	bottom: -2px;
	height: 2px;
	background: var(--wp--preset--color--accent);
	transform: scaleX(0);
	transform-origin: left;
	transition: transform 0.25s ease;
	pointer-events: none;
}

.padddo-header-nav .wp-block-navigation__submenu-container .wp-block-navigation-item__content::after {
	left: 18px;
	right: 18px;
	bottom: 4px;
}

.padddo-header-nav .wp-block-navigation-item__content:hover,
.padddo-header-nav .wp-block-navigation-item__content:focus-visible {
	color: var(--wp--preset--color--accent) !important;
}

.padddo-header-nav .wp-block-navigation-item__content:hover::after,
.padddo-header-nav .wp-block-navigation-item__content:focus-visible::after {
	transform: scaleX(1);
}

/* Cart icon: icon-only on mobile (hide the price) so the header row never overflows the viewport */
@media (max-width: 600px) {
	.padddo-header-icons .wc-block-mini-cart__amount {
		display: none;
	}

	/* Match the reference: search/account/cart icons cluster together, with the
	   hamburger menu toggle as the outermost (rightmost) icon, not sandwiched
	   between the logo and the other icons. */
	header .wp-block-group.is-content-justification-space-between {
		justify-content: flex-start !important;
		column-gap: 12px !important;
	}

	.padddo-header-logo {
		margin-right: auto;
	}

	.padddo-header-icons {
		order: 2;
	}

	.padddo-header-nav {
		order: 3;
	}
}

/* Account icon SVG ships without explicit dimensions in this WC block markup */
.padddo-header-icons .wp-block-woocommerce-customer-account,
.padddo-header-icons .wc-block-customer-account__link {
	display: flex;
	align-items: center;
}

.padddo-header-icons svg.icon {
	width: 24px !important;
	height: 24px !important;
}

@media (max-width: 782px) {
	/* Keep text + button sharing rows (flex-wrap, not a hard column stack) so
	   the notice stays as short/shallow as possible on small screens — since
	   it's in normal flow now, its height directly adds to how far content
	   gets pushed down while it's visible. */
	.padddo-cookie-notice {
		padding: 12px 16px;
		gap: 10px;
		font-size: 12px;
		justify-content: flex-start;
		text-align: left;
	}

	.padddo-cookie-notice button {
		padding: 7px 16px;
	}
}

/* ---------- Heading scale for block-generated headings ---------- */
/* WordPress core's block-library base stylesheet ships its own
   `.wp-block-heading{font-size:var(--wp--preset--font-size--small,14px)}`
   rule. A *class* selector like that outranks the plain-element `h2{...}`/
   `h3{...}` selectors this theme's theme.json "elements.h2/h3" styles
   compile to, so any core/heading block left at the editor's default size
   (no explicit fontSize block attribute — e.g. the "Produtos relacionados"
   heading WooCommerce auto-generates on the single-product template) renders
   at ~13px instead of this theme's intended heading scale, breaking the
   visual hierarchy against neighbouring, non-block headings like the
   product page's "Descrição" tab (a plain <h2>, unaffected by this rule,
   so it already renders at the intended 40px). Re-declare the sizes here
   with an element+class selector: specific enough to beat core's
   class-only rule, but still less specific than an explicit
   `.has-*-font-size` class (e.g. the homepage section titles, which
   deliberately opt into a smaller size) — so per-block size choices making
   in the editor still win, and only the *unstyled default* is corrected. */
h1.wp-block-heading {
	font-size: var(--wp--preset--font-size--xx-large);
}

h2.wp-block-heading {
	font-size: 40px;
}

h3.wp-block-heading {
	font-size: 26px;
}

/* WooCommerce's own block-library CSS additionally scopes that same
   14px default specifically to headings inside a
   `.wp-block-woocommerce-product-collection` block (the "Produtos
   relacionados" pattern is exactly that) with one extra ancestor class —
   `.wp-block-woocommerce-product-collection h2.wp-block-heading` — which
   outranks the element+class rule above. This selector only ever matches
   WooCommerce's own auto-generated collection heading (it never carries an
   explicit `.has-*-font-size` class to opt into a different size), so
   restoring the intended size here can't clash with a deliberate per-block
   choice the way overriding every `.wp-block-heading` with !important would. */
.wp-block-woocommerce-product-collection h2.wp-block-heading {
	font-size: 40px !important;
}

/* ---------- Category/archive product grid (woocommerce/product-collection block) ----------
   Category pages (e.g. /product-category/natal/) render through the native
   woocommerce/product-collection block — a different rendering engine from
   the [featured_products]/[recent_products]/[sale_products] shortcodes that
   power the homepage's card look (see content-product.php + the ".onsale"
   rules above). Left with WooCommerce Blocks' own defaults, this grid's sale
   badge was a white, top-right, bordered pill ("Oferta") and its title/price
   were centered — visibly a different card design from every other product
   grid on the site (home sections) and from the reference store's own
   category page (confirmed via take_screenshot: dark pill, bottom-left,
   left-aligned text there too). Reusing the same visual language here
   instead of duplicating the whole block-template markup keeps both engines
   looking like one consistent card component. */
.wc-block-components-product-sale-badge {
	position: absolute !important;
	top: auto !important;
	bottom: 8px !important;
	left: 8px !important;
	right: auto !important;
	margin: 0 !important;
	background: rgba(10, 8, 9, 0.82) !important;
	color: #ffffff !important;
	border: none !important;
	font-weight: 600 !important;
	border-radius: 20px !important;
	text-transform: none !important;
	font-size: 11px !important;
	line-height: normal !important;
	padding: 4px 10px !important;
	letter-spacing: 0.2px;
}

.wc-block-product-template__responsive .wp-block-post-title,
.wc-block-product-template__responsive .wp-block-woocommerce-product-price,
.wc-block-product-template__responsive .wc-block-components-product-rating {
	text-align: left !important;
}

.wc-block-product-template__responsive .wp-block-post-title a {
	color: #ffffff;
}

/* ---------- Category/archive grid: reserve image space (CLS) ----------
   WooCommerce's own woocommerce/product-image block already inlines a
   matching `aspect-ratio` on each <img> here today (its "Image sizing:
   Thumbnail" attribute resolves to the store's thumbnail-cropping setting —
   see ProductImage::resolve_aspect_ratio() in the plugin), confirmed via
   inspect_design: the rendered wrapper already reserves the correct square
   before any photo loads. This rule is a defensive fallback, not a fix for
   an active gap — it means the grid can't silently regress into CLS if a
   Product Collection instance's own "Image sizing" setting is ever changed
   away from "Thumbnail" (e.g. to "Full Size", which resolves to no
   aspect-ratio at all), without touching that block's own attributes. */
.wc-block-components-product-image {
	aspect-ratio: 1 / 1;
}

.wc-block-components-product-image img {
	aspect-ratio: 1 / 1;
	object-fit: cover;
}

/* ---------- Single product: redundant meta line ---------- */
/* WooCommerce's default single-product template prints a "Category: X"
   line (via the woocommerce/product-meta → core/post-terms hooked block)
   directly under the Add to cart form. The breadcrumb at the top of the
   page already shows the same category, and — since that "Category: "
   prefix is a literal string baked into WooCommerce's block markup rather
   than run through this site's pt_BR translations — it renders in English,
   which doesn't belong on an otherwise fully-Portuguese storefront. The
   reference store doesn't repeat the category here either. Hide the
   (redundant, English-only) line rather than deleting the block, so the
   taxonomy data/markup/functionality stays intact if ever needed again. */
.wp-block-woocommerce-product-meta {
	display: none;
}

/* ---------- Single product: image gallery layout shift (CLS) ----------
   Confirmed via `curl` on the raw server-rendered HTML: no `.flex-viewport`
   element exists anywhere in the page until WooCommerce's own
   single-product.js builds one at runtime. Until that JS runs, WooCommerce's
   own base stylesheet (unrelated to this theme — see
   `.woocommerce div.product div.images .woocommerce-product-gallery__image:
   nth-child(n+2){width:25%;display:inline-block}` in
   wp-content/plugins/woocommerce/assets/css/woocommerce.css) lays out every
   secondary gallery photo as a 25%-wide thumbnail in a row below the main
   photo — space that's about to disappear the moment the slider mounts and
   shows exactly one image at a time. Confirmed via inspect_design: after JS,
   every `.woocommerce-product-gallery__image` (not just the first) is full
   width, stacked inside `.flex-viewport` with overflow:hidden — the 25%-wide
   row never actually appears in the finished page, it's purely a transient
   pre-JS layout. WooCommerce's own single-product.js
   (ProductGallery.prototype.initFlexslider) then *also* explicitly
   re-measures and resizes `.flex-viewport`'s height 100ms after the main
   photo's `load` event — a second, deliberate resize baked into WooCommerce
   core itself, not something this theme's CSS can prevent by adding a fixed
   aspect-ratio (this catalog's own photos aren't all one ratio — some are
   1:1, most are 4:5 — so hardcoding one here would just crop/distort the
   others instead of fixing anything).
   The fix that *is* safe: hide every secondary image from the very first
   paint, since none of them are meant to be visible outside the slider
   anyway. That leaves the gallery's reserved height coming from the first
   image alone — sized by its own width/height attributes, i.e. its real,
   per-product aspect ratio, already correct before and after the slider/
   JS-resize finish. No functionality is lost: flexslider re-reveals every
   image itself the instant it initializes, via jQuery's `.css()` — an
   inline style, which overrides this plain (non-!important) rule — and the
   photoswipe lightbox reads each image's data-* attributes directly from
   the DOM regardless of whether it's currently hidden. */
.wp-block-woocommerce-product-image-gallery .woocommerce-product-gallery__image:nth-child(n+2) {
	display: none;
}

/* ---------- Single product: gallery thumbnail strip spacing ----------
   WooCommerce's own flexslider stylesheet lays the thumbnail <li>s out at a
   flat 25% width with no margin/gap and butts the whole strip directly
   against the bottom of the main image viewport above it, via
   `.woocommerce div.product div.images .flex-control-thumbs{margin:0;
   padding:0}` / `...flex-control-thumbs li{width:25%;float:left;margin:0}`
   in wp-content/plugins/woocommerce/assets/css/woocommerce.css. That
   selector's specificity (4 classes + 3 elements) beats a plain
   `.flex-control-thumbs`/`.flex-control-thumbs li` rule regardless of load
   order, so an earlier version of this fix silently lost the cascade on
   every contested property (margin, padding, width, float) while
   non-contested properties (display, gap, img border-radius) visibly
   applied — confirmed via curl on the raw served CSS plus a side-by-side
   with the live page: rounded thumbnail corners showed up, the gap above
   the strip didn't. `!important` here is deliberate and necessary, not
   defensive — matches how the rest of this stylesheet already overrides
   WooCommerce's own non-!important defaults (see the sale-badge rules
   above).

   The `li` width used to be `calc(25% - 7.5px)` — a flat 4-column grid.
   That reserved a slot for a 4th thumbnail even on products with only 3
   images (e.g. /product/porta-terco-nossa-senhora/), leaving a visibly
   empty gap on the right inside the shaded panel — confirmed via
   inspect_design: 3 × 115px items + gaps only filled 365px of the
   panel's 512px content width. Switching each `<li>` to a fixed pixel
   width instead of a percentage-of-4 means the strip now sizes itself to
   however many thumbnails actually exist — 1, 3, 5, whatever — and simply
   wraps to a new row once it runs out of horizontal space, like any
   ordinary thumbnail grid, instead of reserving phantom columns. This
   still only applies below the 782px breakpoint (mobile/narrow tablet);
   see the min-width:782px block further down for the desktop layout.

   The single shared gray "panel" that used to sit behind the whole strip
   (background + border on `.flex-control-thumbs` itself) was removed at
   the store owner's request: with a real gap between items it read as one
   solid box with images floating inside it, rather than a row of distinct
   thumbnails — and the reference store doesn't have that outer panel
   either (confirmed via take_screenshot on a live reference product page:
   plain thumbnails, no shared backdrop). Each thumbnail now carries its
   own "card" framing instead — visible border + border-radius on the
   `<img>` itself (below), matching the same 6px radius already used on
   every product-grid thumbnail elsewhere on the site (see
   `.padddo-product-thumb img` near the top of this file) — so they read as
   individual, well-defined cards with clear gaps between them instead of
   photos loose inside (or glued together inside) a single container. */
.flex-control-thumbs {
	display: flex !important;
	flex-wrap: wrap !important;
	gap: 10px !important;
	margin: 16px 0 0 !important;
	box-sizing: border-box !important;
	padding: 0 !important;
	background: transparent !important;
	border: none !important;
}

.flex-control-thumbs li {
	width: 72px !important;
	flex: 0 0 72px !important;
	float: none !important;
}

.flex-control-thumbs img {
	display: block;
	border-radius: 6px;
	border: 1px solid rgba(255, 255, 255, 0.16);
}

/* ---------- Single product: thumbnails as a left-hand column (desktop) ----------
   The reference store (padddo.lojavirtualnuvem.com.br, confirmed via
   take_screenshot on a real product page) doesn't stack thumbnails under
   the main photo on desktop — it runs them as a vertical strip to the LEFT
   of the main image, Amazon-style. Reproducing that here (rather than
   keeping the horizontal strip from the mobile rules above) also happens
   to be the more robust fix for the "phantom 4th column" bug this block
   was written for: a vertical column's width is fixed and independent of
   how many thumbnails exist, so there's never a row of unfilled slots to
   notice, regardless of image count (1, 3, 5, ...).
   `.woocommerce-product-gallery` in the DOM is [.flex-viewport, ol.flex-
   control-thumbs] in that order — `flex-direction: row-reverse` puts the
   thumbs (the second/last child) visually first (left) without needing a
   manual `order` on either element. `align-items` is left at its default
   (stretch) on purpose: `.flex-viewport` gets an explicit inline height
   from WooCommerce's own single-product.js (ProductGallery.prototype.
   initFlexslider, re-measured after the main photo's `load` event — see
   the CLS comment above), and default stretch makes the thumbnail column
   match that same height automatically, with no JS or duplicated height
   value needed on this side. If the thumbnail count doesn't fit that
   height (e.g. a product with many photos), the column scrolls internally
   via overflow-y instead of growing taller than the photo it sits beside.
   Only enabled at the same 782px breakpoint the rest of this stylesheet
   already uses for "desktop" (see the mega-menu and cookie-notice rules
   above) — below that, the mobile rules above keep the strip under the
   photo, since a narrow side column doesn't fit a phone screen. */
@media (min-width: 782px) {
	/* WooCommerce's own product-image-gallery.css ships
	   `.woocommerce .wp-block-woocommerce-product-image-gallery{max-width:
	   512px}` — a hardcoded cap baked into the plugin, independent of
	   whatever width the theme's column around it actually is. It was
	   invisible before because the single-product template's gallery
	   column also happened to be exactly 512px wide, so the cap and the
	   column agreed by coincidence; widening that column (to make the main
	   photo bigger/taller) didn't grow the photo at all, because this cap
	   silently won the argument first. Confirmed via inspect_design: the
	   column measured 640px but `.wp-block-woocommerce-product-image-
	   gallery` itself still measured exactly 512px. `!important` needed to
	   beat the plugin's rule regardless of stylesheet load order. */
	.wp-block-woocommerce-product-image-gallery {
		max-width: 100% !important;
	}

	.woocommerce-product-gallery {
		display: flex;
		flex-direction: row-reverse;
		gap: 12px;
	}

	.woocommerce-product-gallery .flex-viewport {
		flex: 1 1 auto;
		min-width: 0;
	}

	/* Widening the gallery column (above) grows the main photo's box
	   proportionally, but this catalog's source photos are mostly wide
	   landscape crops (~600x383, ratio ~1.57:1) — scaling a shape that
	   wide up uniformly barely reads as "taller" next to the narrow, tall
	   84px thumbnail column beside it, even though the rendered height did
	   increase in absolute pixels.
	   Two forced-aspect-ratio attempts were tried and rejected here before
	   this one — worth recording so nobody re-tries them:
	   1. `aspect-ratio:4/5` + `object-fit:cover` cropped real content on
	      wide/low products (the "Porta Terço" tray): cut off the statue's
	      head and part of the tray.
	   2. `aspect-ratio:4/5` + `object-fit:contain` avoided cropping but
	      left the tray photo only ~347px tall inside a 680px box — ~330px
	      of empty letterbox, roughly half the frame — confirmed too much
	      empty space via a follow-up screenshot regardless of whether that
	      space was centered or pushed to one edge with object-position.
	   The actual fix: don't force the *photo itself* into an unrelated
	   ratio at all. Give the *frame* (`.flex-viewport`) a modest min-height
	   instead, well below the ~680px the 4:5 attempts produced, and let the
	   `<img>` keep its own natural width:100%/height:auto sizing. A photo
	   already taller than that floor (near-square or portrait shots) is
	   completely unaffected — the frame just grows to fit it, same as
	   before this whole chain of fixes. Only photos shorter than the floor
	   (this catalog's wide/low products) get topped up, and only by the
	   gap between their natural height and the floor — nowhere near a full
	   680px box. `.flex-viewport` is `position:relative` in normal block
	   flow, so the shorter image inside it naturally sits at the top with
	   the leftover space below, with no object-position trick needed. */
	.woocommerce-product-gallery .flex-viewport {
		min-height: 420px !important;
	}

	/* Store-owner request: make this specific product's photo actually read
	   as square, not just sit in a taller box. A plain min-height (like the
	   420px floor above) doesn't achieve that — the <img> keeps its own
	   natural width:100%/height:auto box (347px tall here), so a taller
	   frame only adds invisible empty space below it; confirmed via
	   inspect_design + take_screenshot that a 540px-tall frame rendered
	   pixel-identical to the 420px one, because the extra 120px was blank
	   space blending into the black background, not a bigger photo. Making
	   the photo itself square requires object-fit:cover on a 1:1 box,
	   which *does* crop — here it crops the left/right edges only (the
	   tray's rim on one side, some background past the rosary's cross
	   pendant on the other), not the statue on top: this photo (600x383,
	   ratio ~1.57:1) is wider than a 1:1 box, so object-fit:cover's
	   fill-by-the-limiting-dimension math scales by *height* to cover the
	   box with zero vertical cropping, and only trims width. Confirmed
	   acceptable via take_screenshot — full statue and rosary intact.
	   Scoped to this product's body class (`postid-193`) rather than
	   applied catalog-wide, since forcing every photo — including much
	   wider ones — into a hard square would crop some of them far more
	   aggressively than this one. */
	body.postid-193 .woocommerce-product-gallery__image img {
		width: 100%;
		aspect-ratio: 1 / 1;
		object-fit: cover;
	}

	.flex-control-thumbs {
		flex: 0 0 84px !important;
		width: 84px !important;
		max-width: 84px !important;
		flex-direction: column !important;
		flex-wrap: nowrap !important;
		align-content: flex-start;
		overflow-y: auto;
		margin: 0 !important;
	}

	.flex-control-thumbs li {
		width: 100% !important;
		flex: 0 0 auto !important;
	}
}

/* ---------- Single product: description/attributes/reviews tabs (CLS) ----------
   Confirmed via `curl` on the raw server-rendered HTML: none of the three
   tab panels ("Descrição", "Informação adicional", "Avaliações") carry a
   `style="display:none"` attribute in the initial response — all three
   render fully visible, stacked one after another (full description text +
   the complete attributes table + the complete reviews section), and it's
   WooCommerce's own wc-single-product.js (the `.wc-tabs-wrapper` init,
   unrelated to this theme) that adds `display:none` to every panel except
   the active one — *after* it runs. Confirmed via inspect_design: the two
   inactive panels currently carry an inline `style="display: none"` that
   only JS could have added. On this product that's a ~550px-tall block
   collapsing down to ~230px once JS catches up — a real, large,
   reproducible shift on every single-product page load, unrelated to price/
   cart data.
   WooCommerce always marks the *first* tab ("Descrição") active by default
   in its own server-rendered markup (`<li class="description_tab active">`)
   — the same default JS itself would apply — so hiding every other panel
   here via CSS doesn't guess at anything, it just makes the very first
   paint match what WooCommerce's own JS was always going to set a moment
   later. No functionality lost: clicking another tab is a direct result of
   that click (CLS explicitly excludes shifts within 500ms of user input),
   and WooCommerce's JS sets `display` via inline style either way, which
   overrides this plain (non-!important) rule when the user switches tabs. */
.woocommerce-tabs.wc-tabs-wrapper .panel:not(.woocommerce-Tabs-panel--description) {
	display: none;
}

/* ---------- Melhor Envio: calculadora de frete na página do produto ---------- */
/* O plugin "Melhor Envio" (wp-content/plugins/melhor-envio-cotacao) já injeta
   nativamente um formulário de CEP + resultado de frete antes do botão
   "Adicionar ao carrinho" (ver Controllers/ShowCalculatorProductPage.php), com
   CSS próprio claro (fundo #f2f2f2) que destoa do tema escuro da Padddo. Estas
   regras só re-skinam esse bloco existente com as cores/tipografia já usadas
   no resto do site — não alteram HTML, JS nem a lógica de cálculo do plugin.
   !important é necessário porque o CSS do plugin é carregado depois deste
   arquivo em algumas páginas de produto (enqueue tardio, no hook que imprime
   o próprio formulário).
   Observação: este plugin não renderiza nenhum botão "Calcular" — a cotação é
   disparada automaticamente (shipping-product-page.js) assim que o campo de
   CEP atinge 9 caracteres (00000-000). A regra de `input[type=submit]` do CSS
   do próprio plugin (calculator.css) é código morto: esse elemento não existe
   no DOM desta tela, então não há botão para restilizar aqui.
   2026-08: a pedido do dono da loja, o "card" (fundo #171310 + borda marrom)
   que envolvia todo o bloco foi removido — fica só o texto/campos soltos
   sobre o fundo da página, no mesmo estilo "sem container" do resto da
   coluna de compra (SKU, price-perks, stepper de quantidade etc., ver bloco
   "Single product: reorganized purchase area" logo abaixo, nenhum dos quais
   usa um wrapper com fundo/borda próprios). */
#woocommerce-correios-calculo-de-frete-na-pagina-do-produto.containerCalculator,
.containerCalculator {
	background-color: transparent !important;
	border: none !important;
	border-radius: 0 !important;
	color: var(--wp--preset--color--foreground) !important;
	box-sizing: border-box !important;
	padding: 0 !important;
	/* Alinha o ritmo vertical ao block-gap (24px) usado no resto da coluna de
	   compra, em vez do 10px/20px assimétrico original. */
	margin: 4px 0 24px !important;
}

/* Label "Simulação de frete". O seletor original (`.calculatorRow > p`) nunca
   batia: no HTML gerado pelo plugin o <p> não é filho direto de
   `.calculatorRow`, fica dentro de `.row > .col-75` — a regra de tipografia
   nunca chegou a ser aplicada. Trocado para seletor descendente e alinhado ao
   mesmo peso/tamanho do label "Tamanho" já usado na tabela de variações
   (700 / 16px / cor --foreground), para os dois labels da coluna de compra
   ficarem no mesmo nível hierárquico. */
.containerCalculator .row p,
.containerCalculator .calculatorRow p {
	margin: 0 0 10px !important;
	font-family: inherit !important;
	font-size: var(--wp--preset--font-size--base) !important;
	font-weight: 700 !important;
	color: var(--wp--preset--color--foreground) !important;
}

.containerCalculator input[type="text"].iptCep,
.containerCalculator input[type="text"] {
	background-color: #0a0809 !important;
	border: 1px solid var(--wp--preset--color--button) !important;
	color: var(--wp--preset--color--accent) !important;
	border-radius: 4px !important;
	/* Sem isso o input herda a fonte padrão do navegador (Arial ~13px) em vez
	   da Plus Jakarta Sans/16px usada em todo o resto do site. */
	font-family: inherit !important;
	font-size: var(--wp--preset--font-size--base) !important;
	transition: border-color 0.2s ease;
	/* Compacto o suficiente para "00000-000" (9 caracteres mascarados) sem
	   sobrar espaço vazio dentro do campo — antes ocupava a largura inteira
	   da coluna de compra ao lado do botão "Calcular". Largura fixa (em vez
	   de flex:1 puro) para não esticar de novo em telas largas; ver
	   .padddo-cep-actions .iptCep abaixo, que também limita o flex-grow. */
	width: 160px !important;
	max-width: 100%;
}

.containerCalculator input[type="text"]:focus {
	border-color: var(--wp--preset--color--accent) !important;
	outline: 2px solid var(--wp--preset--color--accent);
	outline-offset: 1px;
}

.containerCalculator input[type="text"]::placeholder {
	color: var(--wp--preset--color--foreground);
	opacity: 0.7;
}

/* Spinner exibido enquanto a cotação real é buscada na API do Melhor Envio */
.containerCalculator #calcular-frete-loader {
	padding: 8px 0 4px;
}

.containerCalculator #calcular-frete-loader img {
	width: 26px;
	height: 26px;
}

/* "Frete para {cidade}", preenchido acima da tabela quando a cotação volta */
.containerCalculator #destiny-shipping-mehor-envio {
	display: block;
	font-size: var(--wp--preset--font-size--medium) !important;
	font-weight: 600;
	color: var(--wp--preset--color--accent) !important;
	margin-top: 14px;
	margin-bottom: 4px;
}

.containerCalculator .resultado-frete table {
	width: 100%;
	border-collapse: collapse;
	margin-top: 4px;
}

.containerCalculator .resultado-frete table td {
	padding: 10px 0;
	border-bottom: 1px solid rgba(191, 186, 186, 0.15);
	color: var(--wp--preset--color--foreground);
	font-size: var(--wp--preset--font-size--medium);
	line-height: 1.5;
}

.containerCalculator .resultado-frete table tr:last-child td {
	border-bottom: none;
}

/* Observação especial de frete (ex.: condição para frete grátis) usa a cor de
   aviso do tema. Escopado só para essa small — a linha "Frete para {cidade}"
   acima tem regra própria e não deve ficar com a mesma cor de alerta, porque
   não é um aviso, é só informação de contexto. */
.containerCalculator small.observation-shipping-free {
	display: block;
	color: var(--wp--preset--color--warning) !important;
	font-size: var(--wp--preset--font-size--small);
	margin-top: 6px;
}

/* ---------- Single product: reorganized purchase area (2026-08) ----------
   See templates/single-product.html and the "Single product page
   reorganization" section of functions.php for the full rationale. Kept in
   the site's own dark palette (theme.json tokens) — the store owner's
   reference layout is only followed for structure/hierarchy, not its
   (light-theme) colors. */

/* SKU, right under the title — the native woocommerce/product-sku block
   already prints "SKU: " translated + the value; only needs restyling to a
   small, discreet, secondary-text treatment instead of its block default. */
.padddo-product-sku {
	color: var(--wp--preset--color--foreground);
	opacity: 0.75;
	font-size: var(--wp--preset--font-size--small);
	margin: 4px 0 0;
}

.padddo-product-sku .sku {
	font-weight: 400;
}

/* Pix discount + interest-free installments + "Ver mais detalhes", injected
   right after the price by padddo_render_price_perks_block(). The warning
   token (already used elsewhere for the shipping calculator's "frete
   grátis" callout) doubles as this theme's "gold/orange highlight" color —
   the closest existing token to the reference's own accent color. */
.padddo-price-perks {
	margin: 6px 0 16px;
}

.padddo-price-perks p {
	margin: 0 0 4px;
}

.padddo-pix-label,
.padddo-installments {
	color: var(--wp--preset--color--warning);
	font-size: var(--wp--preset--font-size--medium);
	font-weight: 700;
}

.padddo-pix-label strong {
	font-weight: 700;
}

.padddo-pix-note {
	color: var(--wp--preset--color--foreground);
	font-size: var(--wp--preset--font-size--small);
}

.padddo-see-more-details {
	margin-top: 8px !important;
}

.padddo-see-more-details-link {
	color: var(--wp--preset--color--foreground);
	font-size: var(--wp--preset--font-size--small);
	text-decoration: underline;
}

.padddo-see-more-details-link:hover {
	color: var(--wp--preset--color--accent);
}

/* Quantity stepper (+/- buttons flanking the number) + "Comprar" button row.
   WooCommerce Blocks' own "stepper" quantity style ships unstyled on this
   theme's dark palette by default — restyled to match the button/input
   language used everywhere else on the site.

   Scoped to `body.single-product .wc-block-add-to-cart-form` (on top of the
   block's own classes) for two reasons:
   1) `woocommerce/add-to-cart-form` with `quantitySelectorStyle: "stepper"`
      is only used in templates/single-product.html, so this scoping doesn't
      change what renders anywhere — it's defensive, not a behavior change.
   2) `.wc-block-components-quantity-selector__button` / `__input` are the
      exact same class names WooCommerce Blocks uses for the Cart block's
      *and* the header's mini-cart drawer's own line-item quantity stepper
      (see wp-content/plugins/woocommerce/assets/client/blocks/cart.css and
      mini-cart-contents.css) — the mini-cart can be opened from the header
      on a product page too, so scoping by body class alone isn't enough;
      every selector below also requires the `.wc-block-add-to-cart-form`
      ancestor so the mini-cart's own stepper is left untouched.

   The `!important`s aren't stylistic: WooCommerce Blocks ships its own
   default styles for this block as an inline <style> rendered into the page
   body (after this stylesheet's <link>), using selectors as specific as
   `div.wc-block-add-to-cart-form.wc-block-add-to-cart-form--stepper
   form.cart div.wc-block-components-quantity-selector.quantity`. That beat a
   plain class selector on both specificity and source order, which is why
   the stepper rendered with WooCommerce's own oversized defaults (a white,
   ~51px-tall box) instead of the rules below — the "muito grande" quantity
   selector the store owner flagged. */
body.single-product .wc-block-add-to-cart-form .quantity {
	display: inline-flex;
	align-items: stretch;
	background-color: transparent !important;
	border: 1px solid var(--wp--preset--color--button);
	border-radius: 4px;
	overflow: hidden;
	vertical-align: middle;
	height: 44px;
	box-sizing: border-box;
}

body.single-product .wc-block-add-to-cart-form .wc-block-components-quantity-selector__button {
	background: #171310;
	color: var(--wp--preset--color--foreground);
	border: none;
	width: 32px;
	font-size: var(--wp--preset--font-size--medium);
	opacity: 1 !important;
	cursor: pointer;
}

body.single-product .wc-block-add-to-cart-form .wc-block-components-quantity-selector__button:hover {
	background: var(--wp--preset--color--button);
	color: #ffffff;
}

body.single-product .wc-block-add-to-cart-form .quantity .qty {
	border: none !important;
	border-left: 1px solid var(--wp--preset--color--button) !important;
	border-right: 1px solid var(--wp--preset--color--button) !important;
	border-radius: 0 !important;
	width: 44px;
	text-align: center;
	padding: 0 !important;
	font-size: var(--wp--preset--font-size--small) !important;
}

/* "Comprar" trimmed to the same 44px height as the quantity stepper next to
   it — same width/font as before, just shorter so the row reads as one
   aligned control instead of the stepper looking oversized next to it. */
body.single-product .wc-block-add-to-cart-form .single_add_to_cart_button {
	margin-left: 10px;
	min-width: 200px;
	height: 44px;
	padding-top: 0 !important;
	padding-bottom: 0 !important;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	box-sizing: border-box;
}

/* "Você já adicionou este produto. Ver carrinho" — filled in by
   assets/js/single-product.js right after a successful AJAX add-to-cart,
   directly under the buy button. */
.padddo-add-to-cart-feedback:not(:empty) {
	margin-top: 10px;
}

.padddo-add-to-cart-success {
	color: var(--wp--preset--color--success);
	font-size: var(--wp--preset--font-size--small);
	margin: 0 !important;
}

.padddo-add-to-cart-view-cart {
	color: var(--wp--preset--color--success);
	text-decoration: underline;
	font-weight: 700;
}

.padddo-add-to-cart-view-cart:hover {
	color: var(--wp--preset--color--accent);
}

/* Melhor Envio shipping calculator: "Calcular" button next to the CEP field
   + "Não sei meu CEP" link, both added by
   enhanceShippingCalculator() in assets/js/single-product.js (the plugin
   itself renders neither — see the long comment in that function). */
.padddo-cep-actions {
	display: flex;
	align-items: stretch;
	gap: 8px;
}

/* flex: 0 (não 1) para o campo não voltar a esticar e engolir a largura fixa
   definida acima em `.containerCalculator input[type="text"]` — só encolhe
   (flex-shrink: 1) se a coluna de compra ficar mais estreita que 160px. */
.padddo-cep-actions .iptCep {
	flex: 0 1 160px;
}

.padddo-cep-calcular-btn {
	flex: 0 0 auto;
	background-color: var(--wp--preset--color--button) !important;
	color: #ffffff !important;
	border: none !important;
	border-radius: 4px !important;
	padding: 0 16px;
	font-weight: 700;
	font-size: var(--wp--preset--font-size--small);
	cursor: pointer;
}

.padddo-cep-calcular-btn:hover {
	background-color: #ffffff !important;
	color: #0a0809 !important;
}

.padddo-cep-help-link {
	display: block;
	margin-top: 8px;
	color: var(--wp--preset--color--foreground);
	font-size: var(--wp--preset--font-size--small);
	text-decoration: underline;
}

.padddo-cep-help-link:hover {
	color: var(--wp--preset--color--accent);
}

/* -------------------------------------------------------------------------
 * "Minha conta" (deslogado) — só o formulário de "Entrar" por padrão.
 * O formulário de cadastro fica escondido e é revelado pelo link
 * "Cadastre-se" (âncora #padddo-register → :target). Volta ao login pelo
 * link "Entrar" (âncora #customer_login). Ver
 * woocommerce/myaccount/form-login.php. Sem JS.
 * ---------------------------------------------------------------------- */
.woocommerce-account #customer_login.col2-set {
	display: block; /* neutraliza o grid de 2 colunas do WooCommerce */
}

.woocommerce-account #customer_login .padddo-login,
.woocommerce-account #customer_login .padddo-register {
	width: 100%;
	float: none;
	max-width: 480px;
	margin-inline: auto; /* centraliza a coluna na página */
}

/* Cabeçalho e links auxiliares centralizados; os campos seguem alinhados à esquerda */
.woocommerce-account #customer_login .padddo-login > h2,
.woocommerce-account #customer_login .padddo-register > h2,
.woocommerce-account #customer_login .woocommerce-LostPassword,
.woocommerce-account #customer_login .padddo-register-prompt,
.woocommerce-account #customer_login .padddo-login-prompt {
	text-align: center;
}

/* Um pouco maior: campos e botão com mais respiro */
.woocommerce-account #customer_login .woocommerce-form .input-text {
	padding: 12px 14px;
	font-size: 1rem;
}

.woocommerce-account #customer_login .woocommerce-form-login__submit,
.woocommerce-account #customer_login .woocommerce-form-register__submit {
	width: 100%;
	padding-block: 12px;
}

/* Cadastro escondido por padrão */
.woocommerce-account #customer_login .padddo-register {
	display: none;
}

/* Revela o cadastro quando o link "Cadastre-se" é acionado (#padddo-register)
 * ou quando um envio de cadastro voltou com erro (.padddo-registering). */
.woocommerce-account #customer_login .padddo-register:target,
.woocommerce-account #customer_login.padddo-registering .padddo-register {
	display: block;
}

/* Nesses mesmos casos, esconde o login para não ter os dois na tela. */
.woocommerce-account #customer_login:has(.padddo-register:target) .padddo-login,
.woocommerce-account #customer_login.padddo-registering .padddo-login {
	display: none;
}

/* Link "Cadastre-se" ao lado de "Perdeu sua senha?" */
.woocommerce-account .padddo-register-prompt,
.woocommerce-account .padddo-login-prompt {
	margin-top: 4px;
	font-size: var(--wp--preset--font-size--small);
}

.woocommerce-account .padddo-register-prompt__link,
.woocommerce-account .padddo-login-prompt__link {
	text-decoration: underline;
	font-weight: 600;
}
