/* Balad theme — WordPress/WooCommerce integration layer.
   Never redefine base.css variables here; only bridge WP/Woo markup to the design system. */

/* Admin bar offset (fixed nav sits at top:0; WP pushes body down 32px/46px). */
body.admin-bar .site-nav { top: 32px; }
@media screen and (max-width: 782px) {
	body.admin-bar .site-nav { top: 46px; }
}

/* ─── Fixed-nav flow space (mobile header-overlap fix) ────────────────
   base.css declares .site-nav { position:fixed } but reserves NO space
   in the flow, so every interior WP page (stores archive, cart, checkout,
   list-your-store, vendor-dashboard, review, woo archives/products) renders
   its H1/content UNDER the nav. The front-page .hero (100vh) and the
   storefront .sf-cover intentionally sit beneath the nav, so we pull only
   those two back up by the reserved height. Admin-bar case needs no extra
   padding: WP's `html{margin-top:32/46px}` already shifts the body down and
   the rule above re-seats the fixed nav below the bar. */
:root { --nav-h: 108px; }
body { padding-top: var(--nav-h); }
.hero,
.sf-cover { margin-top: calc(var(--nav-h) * -1); }
/* BLD-023: single-bld_store.php no longer hardcodes its own inline
   padding-top — .sf-cover's offset is driven solely by --nav-h, the same
   custom property the nav's own reserved flow-space above uses. No
   !important needed now that there is no competing inline style to beat. */
.sf-cover { padding-top: var(--nav-h); }

/* WP's the_custom_logo() renders <a class="custom-logo-link"><img class="custom-logo">,
   which the design's .nav-logo-img{height:38px} rule never matches — leaving the
   uploaded logo at natural size (~111px) and ballooning the nav to ~155px. Clamp it
   to the design's nav-logo height and seat it as a non-shrinking flex item so the
   reserved --nav-h stays accurate. */
.custom-logo-link { flex-shrink: 0; display: flex; align-items: center; line-height: 0; }
/* !important + .site-nav scope: on WooCommerce pages a core/woo img rule otherwise
   wins and the logo balloons to ~250px (e.g. /cart/). */
.site-nav .custom-logo { height: 64px !important; width: auto !important; max-height: 64px; }
.site-nav.scrolled .custom-logo { height: 54px !important; max-height: 54px; transition: height .45s ease; }

/* Apply form plan selector (page-list-your-store.php): reuses the .pricing-grid/
   .pricing-card system (base.css) inside a <fieldset>, wrapped in a native
   radio input per card. Reset the fieldset chrome to match the surrounding
   borderless form, and give the radio + "Most popular" badge room inside the
   card without any inline styles. .pricing-grid already collapses to 1 column
   at 768px; this belt-and-suspenders rule keeps the legacy .apply-plans class
   collapsing a little earlier too, matching this specific 3-card grid's own
   content-driven breakpoint. */
.apply-plan-fieldset { border: 0; padding: 0; margin: 0; }
.apply-plan-fieldset legend { display: block; font-size: .74rem; font-weight: 600; text-transform: uppercase; letter-spacing: .08em; color: var(--gray-300); margin-bottom: 7px; padding: 0; }
.apply-plan-card { cursor: pointer; }
.apply-plan-card input[type="radio"] { margin-bottom: 8px; }
.apply-plans-empty { color: var(--gray-400); }
@media (max-width: 600px) { .apply-plans { grid-template-columns: 1fr !important; } }

/* Mobile menu dialog must sit ABOVE the fixed nav (z-index 900); otherwise the nav
   shows through the overlay and the hamburger blocks the dialog's own close button. */
.nav-mobile { z-index: 1000; }
/* wp_nav_menu(items_wrap:'%3$s') emits orphan <li> in the dialog → stray bullets. */
.nav-mobile li { list-style: none; }

/* ─── UX polish pass ─────────────────────────────────────────────────── */

/* Touch targets: hamburger to a comfortable 44px; give the tiny lang links
   a real 44px hit-area without changing their look (BLD-038). */
.nav-hamburger { width: 44px; height: 44px; }
.lang-switch a { display: inline-flex; align-items: center; min-height: 44px; padding: 0 2px; }

/* U9: the fixed gold cart FAB (marketplace.js) is the ONLY cart entry point
   on the site — there is no cart icon in .site-nav — so on mobile form-heavy
   pages we shrink + corner it rather than hiding it (hiding would remove the
   sole way to reach the cart on those pages). Tradeoff, documented: a fixed
   element always sits over *whatever* content scrolls beneath its screen
   position, so an input in the exact bottom-right corner can still be
   briefly covered mid-scroll; shrinking + cornering only reduces the
   footprint and the odds, it does not guarantee zero overlap. Scoped via
   language-agnostic body classes: `bld-tpl-list-your-store` /
   `bld-tpl-vendor-dashboard` / `bld-tpl-review` (added by inc/setup.php's
   body_class filter, keyed off the resolved template file — BLD-055 fix,
   replaces the old hardcoded EN page-id-15/16/17 selectors that never
   matched Polylang's translated twin pages); core `woocommerce-cart` /
   `woocommerce-checkout` for /cart/ + /checkout/. */
@media (max-width: 768px) {
	body.bld-tpl-list-your-store .cart-fab,
	body.bld-tpl-vendor-dashboard .cart-fab,
	body.bld-tpl-review .cart-fab,
	body.woocommerce-cart .cart-fab,
	body.woocommerce-checkout .cart-fab {
		width: 44px;
		height: 44px;
		bottom: 14px;
		right: 10px;
	}
	body.bld-tpl-list-your-store .cart-fab svg,
	body.bld-tpl-vendor-dashboard .cart-fab svg,
	body.bld-tpl-review .cart-fab svg,
	body.woocommerce-cart .cart-fab svg,
	body.woocommerce-checkout .cart-fab svg {
		width: 18px;
		height: 18px;
	}
	body.bld-tpl-list-your-store .cart-fab .cart-count,
	body.bld-tpl-vendor-dashboard .cart-fab .cart-count,
	body.bld-tpl-review .cart-fab .cart-count,
	body.woocommerce-cart .cart-fab .cart-count,
	body.woocommerce-checkout .cart-fab .cart-count {
		min-width: 16px;
		height: 16px;
		font-size: 0.62rem;
	}
}

/* QA P-03: on /cart/ the WooCommerce sticky "Proceed to Checkout" bar (fixed, bottom) covered the corner
   cart button, so the drawer could not be opened. Lift the button above the bar (bar ~84px + safe area). */
@media (max-width: 768px) {
	html body.woocommerce-cart .cart-fab { bottom: calc(100px + env(safe-area-inset-bottom, 0px)); }
}

/* Single product: the template hardcodes an inline `grid-template-columns:1fr 1fr`
   that overrides base's 768 stacking rule, leaving a cramped 2-col layout on
   mobile. Force the stack. */
@media (max-width: 768px) { .sf-about-grid { grid-template-columns: 1fr !important; } }

/* base .prod-stock is position:absolute (for product cards). In .product-summary
   it has no positioned ancestor, so the "In stock" badge escaped to the page's
   top-right, over the nav hamburger. Render it inline there. */
.product-summary .prod-stock { position: static; display: inline-block; margin: 6px 0 4px; }

/* Review landing (plugin-rendered .bld-review-landing markup) shipped with raw
   browser-default fieldsets/textareas/inputs/stars. Theme them to navy+gold. */
.bld-review-landing h2 { font-family: var(--font-serif); font-size: clamp(1.5rem, 4vw, 2.1rem); color: var(--white); margin-bottom: 24px; line-height: 1.25; }
.bld-review-landing fieldset { border: 1px solid rgba(255,255,255,.08); background: var(--navy-700); border-radius: var(--r-md); padding: 20px; margin: 0 0 20px; }
.bld-review-landing legend { font-size: .72rem; font-weight: 700; text-transform: uppercase; letter-spacing: .12em; color: var(--gold); padding: 0 6px; display: flex; align-items: center; gap: 10px; }
.bld-review-landing legend img { width: 40px; height: 40px; border-radius: var(--r-sm); object-fit: cover; }
.bld-review-landing textarea,
.bld-review-landing input:not([type="hidden"]):not([type="submit"]):not([type="button"]) {
	width: 100%; background: var(--navy-800); color: var(--white);
	border: 1px solid rgba(255,255,255,.12); border-radius: var(--r-sm);
	padding: 12px 14px; font-size: .9rem; margin-top: 10px; resize: vertical;
}
.bld-review-landing textarea { min-height: 88px; }
.bld-review-landing textarea::placeholder,
.bld-review-landing input::placeholder { color: var(--gray-500); }
.bld-review-landing textarea:focus,
.bld-review-landing input:focus { outline: none; border-color: var(--gold); box-shadow: 0 0 0 2px rgba(212, 168, 75, 0.25); }
.bld-star-input { display: inline-flex; gap: 4px; margin: 4px 0; }
.bld-star-input button { font-size: 1.7rem; line-height: 1; color: rgba(255,255,255,.25); background: none; border: none; padding: 2px; cursor: pointer; transition: color .15s ease; }
.bld-star-input button.is-filled { color: var(--gold); }
.bld-review-landing label { display: block; font-size: .82rem; font-weight: 600; color: var(--gray-300); margin-top: 16px; }
.bld-review-landing button[type="submit"],
.bld-review-landing input[type="submit"] {
	background: var(--gold); color: var(--navy); font-weight: 700; border: none;
	border-radius: 999px; padding: 13px 28px; margin-top: 18px; cursor: pointer; font-size: .9rem;
}
.bld-review-status, .bld-review-landing .bld-review-status { margin-top: 14px; font-size: .85rem; color: var(--gray-400); }

/* Scope the core block-library reset so it can't leak into ported design markup. */
.entry-content { color: var(--gray-300); max-width: 760px; margin-inline: auto; }
.entry-content > * + * { margin-top: 1em; }
.entry-content img { border-radius: var(--r-md); }

/* WooCommerce notices restyled to the navy/gold token set. */
.woocommerce-message,
.woocommerce-info,
.woocommerce-error {
	background: var(--navy-700);
	border: 1px solid rgba(212, 168, 75, 0.3);
	border-radius: var(--r-md);
	color: var(--white);
	padding: 14px 20px;
	list-style: none;
	margin: 0 0 24px;
}
.woocommerce-message::before,
.woocommerce-info::before { color: var(--gold); }
.woocommerce-error { border-color: rgba(224, 102, 102, 0.4); }
.woocommerce-notices-wrapper { scroll-margin-top: calc(var(--nav-h) + 12px); }
.bld-stock-warning { position: relative; z-index: 1; }

/* WooCommerce default star rating widget, aligned to the design's .stars look. */
.woocommerce .star-rating { color: var(--gold); }
.woocommerce .star-rating span::before { color: var(--gold); }

/* ── WooCommerce Blocks: cart & checkout theming (U8) ─────────────────────
   /cart/ and /checkout/ render the wc-block-cart / wc-block-checkout blocks,
   not the classic cart/cart.php + checkout/form-checkout.php templates —
   none of the classic-template styling in this theme ever reaches them.
   No inline styles force our hand, but WC's OWN blocks stylesheet
   (plugins/woocommerce/assets/client/blocks/{packages-style,checkout}.css)
   DOES set a real white background, and its selector is more specific than
   it looks: `.wc-block-components-form .wc-block-components-text-input
   input[type="text"]` etc. — the billing ADDRESS form (not the contact-info
   field) is wrapped in an extra `.wc-block-components-form` ancestor class,
   making WC's rule specificity (0,3,1). Our first attempt at
   `.wc-block-components-text-input input[type]` only reached (0,2,1) and
   still lost on every address field (first name, city, postcode, …) even
   though it correctly beat WC's (0,2,1) rule for the contact-info email
   field, which has no such ancestor. Fix: add the same
   `.wc-block-components-form` ancestor to tie at (0,3,1), then normal
   enqueue order (theme after plugin) settles the tie in our favor — still no
   !important anywhere. Selectors grounded against the live rendered DOM
   (both blocks, /cart/ with an item and /checkout/, including the
   address-edit form), not guessed from WC's source. */

/* Text/email/number inputs, textarea, and native <select> across both blocks
   (contact email, billing address fields, coupon code, order note). */
.wc-block-checkout input[type="text"],
.wc-block-checkout input[type="email"],
.wc-block-checkout input[type="tel"],
.wc-block-checkout input[type="number"],
.wc-block-cart input[type="text"],
.wc-block-cart input[type="number"],
.wc-block-components-text-input input[type],
.wc-block-components-form .wc-block-components-text-input input[type],
.wc-block-components-textarea,
.wc-blocks-components-select .wc-blocks-components-select__select {
	background: var(--navy-800);
	color: var(--white);
	border-color: rgba(255, 255, 255, 0.15);
}
.wc-block-components-text-input input[type]:focus,
.wc-block-components-form .wc-block-components-text-input input[type]:focus,
.wc-block-components-textarea:focus,
.wc-blocks-components-select .wc-blocks-components-select__select:focus,
.wc-block-components-quantity-selector__input:focus {
	border-color: var(--gold);
	box-shadow: 0 0 0 2px rgba(212, 168, 75, 0.25);
	outline: none;
}
/* WC's floating field label sits on top of the input border and paints its
   own background chip to "erase" the line behind it — needs a dark chip to
   match, else it shows a bright white sliver over the dark input. */
.wc-block-components-text-input label,
.wc-block-components-form .wc-block-components-text-input label,
.wc-blocks-components-select__label {
	color: var(--gray-400);
	background: var(--navy-800);
}

/* Quantity stepper (cart line items). */
.wc-block-components-quantity-selector {
	border-color: rgba(255, 255, 255, 0.15);
}
.wc-block-components-quantity-selector__input {
	background: transparent;
	color: var(--white);
}
.wc-block-components-quantity-selector__button {
	color: var(--gray-300);
}
.wc-block-components-quantity-selector__button:hover {
	color: var(--gold);
}

/* Primary actions — Proceed to Checkout / Place Order / Apply coupon — to
   the site's .btn-primary gold pill instead of WC's default dark-gray button. */
.wc-block-cart__submit-button,
.wc-block-components-checkout-place-order-button,
.wc-block-components-totals-coupon__button {
	background: var(--gold);
	color: var(--navy);
	font-weight: 700;
	border-radius: var(--r-full);
	border: none;
	transition: background var(--trans-fast), transform var(--trans-fast);
}
.wc-block-cart__submit-button:hover,
.wc-block-components-checkout-place-order-button:hover,
.wc-block-components-totals-coupon__button:not([aria-disabled="true"]):hover {
	background: var(--gold-light);
	transform: translateY(-1px);
}
.wc-block-components-totals-coupon__button[aria-disabled="true"] {
	background: var(--navy-600);
	color: var(--gray-500);
}

/* Payment-method radios (Cash on Delivery, etc.) — gold accent + checked ring. */
.wc-block-components-radio-control__input {
	accent-color: var(--gold);
}
.wc-block-components-radio-control-accordion-option--checked-option-highlighted,
.wc-block-components-radio-control__option-checked {
	box-shadow: 0 0 0 1.5px var(--gold) inset;
}

/* Checkboxes (terms, order note, address "use as shipping" toggle). */
.wc-block-components-checkbox__input {
	accent-color: var(--gold);
}
.wc-block-components-checkbox__mark {
	color: var(--gold);
}

/* Coupon / order-summary collapsible panel toggle + totals rows. */
.wc-block-components-panel__button {
	color: var(--gray-300);
}
.wc-block-components-panel__button:hover {
	color: var(--gold);
}
.wc-block-components-panel__button-icon {
	fill: currentColor;
}
.wc-block-components-totals-item__label,
.wc-block-components-totals-item__description {
	color: var(--gray-300);
}
.wc-block-components-totals-footer-item .wc-block-components-totals-item__label,
.wc-block-components-totals-footer-item .wc-block-components-totals-item__value {
	color: var(--white);
	font-family: var(--font-sans);
	font-size: 1.25rem;
	font-weight: 700;
}
.wc-block-components-totals-footer-item .wc-block-formatted-money-amount {
	font-family: var(--font-sans);
	font-size: 1.25rem;
	font-weight: 700;
	color: var(--gold);
}

/* Order summary product rows (checkout sidebar). */
.wc-block-components-order-summary-item__description,
.wc-block-components-product-metadata__description {
	color: var(--gray-400);
}

/* "Edit" on the collapsed address card + terms/guest-notice links (today
   these render as plain text with no WC Terms/Privacy pages configured, but
   themed in case that changes). */
.wc-block-components-address-card__edit,
.wc-block-checkout__terms a,
.wc-block-checkout__guest-checkout-notice a {
	color: var(--gold);
}
.wc-block-components-address-card__edit:hover,
.wc-block-checkout__terms a:hover,
.wc-block-checkout__guest-checkout-notice a:hover {
	color: var(--gold-light);
}

/* WordPress white-background blocks need a darker ring; dark surfaces keep gold. */
:is(.has-white-background-color, .has-background[style*="#fff"], .has-background[style*="255, 255, 255"]) :is(button, a, input, select, textarea):focus-visible,
:is(button, a, input, select, textarea).has-white-background-color:focus-visible {
	outline: 2px solid var(--focus-light);
	outline-offset: 2px;
}

/* Container width alignment for any core/Woo block that assumes a differently-named wrapper. */
.woocommerce-page .container,
.wc-block-cart,
.wc-block-checkout { max-width: var(--container); margin: 0 auto; padding: 0 clamp(20px, 5vw, 80px); }

/* List-your-store application form — inline error region (page-list-your-store.php). */
.apply-error {
	border: 1px solid rgba(224, 102, 102, .4);
	background: rgba(224, 102, 102, .08);
	color: #e06666;
	padding: 16px 20px;
	border-radius: var(--r-md);
	margin-bottom: 20px;
}

/* ── WC Blocks: 3 states left uncovered by U8's own stated scope (BLD-031) ── */
.wc-block-components-shipping-rates-control {
	background: var(--navy-800);
	border: 1px solid rgba(255, 255, 255, 0.1);
	border-radius: var(--r-md);
	color: var(--gray-300);
}
.wc-block-components-radio-control__label,
.wc-block-components-radio-control__secondary-label {
	color: var(--gray-300);
}
.wc-block-components-validation-error {
	background: rgba(224, 102, 102, 0.08);
	border: 1px solid rgba(224, 102, 102, 0.4);
	border-radius: var(--r-sm);
	color: #e06666;
}
.wc-block-components-validation-error p {
	color: #e06666;
}
.wc-block-cart__empty-cart,
.wc-block-cart-empty {
	color: var(--gray-300);
}
.wc-block-cart__empty-cart .wc-block-cart__empty-cart__title,
.wc-block-cart-empty__title {
	color: var(--white);
}
.wc-block-cart__empty-cart svg,
.wc-block-cart-empty svg {
	color: var(--gray-500);
}

/* ── WooCommerce classic: My Account + Order Received (BLD-016) ──────────
   /my-account/ and /checkout/order-received/... render WC's classic templates
   (not blocks) — U8's blocks-only theming pass never reaches them, so they
   render WC's default light chrome against this site's dark navy/gold design
   at exactly the point of purchase confirmation and account management.
   Selectors target WooCommerce core's stable, long-standing template classes
   (woocommerce-MyAccount-*, shop_table, woocommerce-order-overview, etc.). */
.woocommerce-MyAccount-navigation {
	background: var(--navy-700);
	border: 1px solid rgba(255, 255, 255, 0.055);
	border-radius: var(--r-lg);
	padding: 8px 0;
	margin-bottom: 24px;
}
.woocommerce-MyAccount-navigation ul { display: flex; flex-direction: column; }
.woocommerce-MyAccount-navigation li { border-bottom: 1px solid rgba(255, 255, 255, 0.055); }
.woocommerce-MyAccount-navigation li:last-child { border-bottom: none; }
.woocommerce-MyAccount-navigation li a {
	display: block;
	padding: 12px 20px;
	min-height: 44px;
	box-sizing: border-box;
	color: var(--gray-300);
	font-size: 0.85rem;
	font-weight: 600;
	transition: color var(--trans-fast), background var(--trans-fast);
}
.woocommerce-MyAccount-navigation li a:hover { color: var(--gold); background: rgba(212, 168, 75, 0.05); }
.woocommerce-MyAccount-navigation li.is-active a { color: var(--gold); background: rgba(212, 168, 75, 0.08); }

.woocommerce-MyAccount-content { color: var(--gray-300); }
.woocommerce-MyAccount-content h2,
.woocommerce-MyAccount-content h3,
.woocommerce-order-details__title,
.woocommerce-column__title {
	font-family: var(--font-sans);
	color: var(--white);
	margin-bottom: 16px;
}

table.shop_table {
	width: 100%;
	border-collapse: collapse;
	background: var(--navy-700);
	border: 1px solid rgba(255, 255, 255, 0.055);
	border-radius: var(--r-md);
	overflow: hidden;
	color: var(--gray-300);
	font-size: 0.85rem;
}
table.shop_table th,
table.shop_table td {
	padding: 12px 16px;
	border-bottom: 1px solid rgba(255, 255, 255, 0.055);
	text-align: start;
}
table.shop_table th { color: var(--gold); font-size: 0.72rem; text-transform: uppercase; letter-spacing: 0.08em; }
/* Theme 1.4.64 (AE1): totals labels carry the store name in the fee row (e.g. the delivery fee of a store), which must keep its own case; on Arabic pages the totals labels are Arabic so nothing is lost. Table headings and the English labels stay uppercase. */
table.shop_table tr.fee th,
html[dir="rtl"] table.shop_table tfoot th { text-transform: none; }
table.shop_table tr:last-child td { border-bottom: none; }
table.shop_table .woocommerce-Price-amount { color: var(--white); font-weight: 600; }

.woocommerce a.button,
.woocommerce input.button,
.woocommerce button.button,
.woocommerce #respond input#submit {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-height: 44px;
	background: var(--gold);
	color: var(--navy);
	font-weight: 700;
	border-radius: var(--r-full);
	border: none;
	padding: 8px 20px;
	font-size: 0.8rem;
	transition: background var(--trans-fast), transform var(--trans-fast);
}
.woocommerce a.button:hover,
.woocommerce input.button:hover,
.woocommerce button.button:hover { background: var(--gold-light); transform: translateY(-1px); }

.woocommerce-EditAccountForm .form-row,
.woocommerce-address-fields .form-row,
.woocommerce-form-row {
	margin-bottom: 16px;
}
.woocommerce-EditAccountForm label,
.woocommerce-address-fields label,
.woocommerce-form-row label {
	display: block;
	font-size: 0.74rem;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.08em;
	color: var(--gray-300);
	margin-bottom: 7px;
}
.woocommerce-EditAccountForm input.input-text,
.woocommerce-address-fields input.input-text,
.woocommerce-form-row input.input-text,
.woocommerce-EditAccountForm select,
.woocommerce-address-fields select,
.woocommerce-form-row select {
	width: 100%;
	padding: 12px 15px;
	background: var(--navy-600);
	border: 1px solid rgba(255, 255, 255, 0.1);
	border-radius: var(--r-md);
	color: var(--white);
	font-size: 1rem;
	outline: none;
	transition: border-color var(--trans);
}
.woocommerce-EditAccountForm input.input-text:focus,
.woocommerce-address-fields input.input-text:focus,
.woocommerce-form-row input.input-text:focus {
	border-color: rgba(212, 168, 75, 0.6);
}

.woocommerce-Addresses { display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--gap); }
.woocommerce-Address-title { color: var(--white); margin-bottom: 8px; }
.woocommerce-Address address { color: var(--gray-300); font-style: normal; line-height: 1.7; }

/* Order received / thank-you page */
.woocommerce-order .woocommerce-thankyou-order-received {
	background: var(--navy-700);
	border: 1px solid rgba(212, 168, 75, 0.3);
	border-radius: var(--r-md);
	color: var(--white);
	padding: 14px 20px;
	margin: 0 0 24px;
}
.woocommerce-order-overview {
	background: var(--navy-700);
	border: 1px solid rgba(255, 255, 255, 0.055);
	border-radius: var(--r-lg);
	padding: 12px 24px;
	margin-bottom: 24px;
	list-style: none;
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
	gap: 8px 24px;
	color: var(--gray-400);
	font-size: 0.83rem;
}
.woocommerce-order-overview li { padding: 8px 0; }
.bld-thankyou-email { color: var(--gray-300); margin-block: 0 24px; }
.woocommerce-order-overview li strong { color: var(--white); font-weight: 700; }
.woocommerce-customer-details address { color: var(--gray-300); font-style: normal; line-height: 1.7; }

@media (max-width: 768px) {
	.wc-block-checkout .wc-block-components-radio-control__option,
	.wc-block-checkout .wc-block-components-checkbox__label { min-height: 44px; font-size: 14px; }
	.wc-block-checkout .wc-block-components-radio-control__input,
	.wc-block-checkout .wc-block-components-checkbox__input { width: 24px; height: 24px; }
	.wc-block-checkout .wc-block-components-address-card__edit,
	.wc-block-checkout .wc-block-checkout__terms a,
	.wc-block-checkout .wc-block-checkout__guest-checkout-notice a { display: inline-flex; align-items: center; min-height: 44px; font-size: 14px; white-space: nowrap; }
	.wc-block-checkout .wc-block-components-address-form__address_2 { min-height: 44px; }
	.woocommerce-Addresses { grid-template-columns: 1fr; }
	table.shop_table { display: block; overflow-x: auto; }
}

/* Product page quantity input (woocommerce_quantity_input(), single-product.php) — owner feedback
   item 13. WooCommerce's own markup ships as a bare, unstyled native number input, and
   .btn-add-cart's width:100% (needed for its real job in product-grid cards) forced it onto its
   own full-width line below that tiny textbox here. Scoped to .product-summary so the product
   card's button elsewhere is untouched. */
.product-summary form.cart {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: 12px;
	margin: 16px 0;
}
.product-summary form.cart .quantity {
	margin: 0;
}
.product-summary form.cart .qty {
	width: 76px;
	height: 44px;
	padding: 0 12px;
	background: var(--navy-600);
	border: 1px solid rgba(255, 255, 255, 0.15);
	border-radius: var(--r-md);
	color: var(--white);
	font-size: 1rem;
	text-align: center;
	outline: none;
	transition: border-color var(--trans);
}
.product-summary form.cart .qty:focus {
	border-color: var(--gold);
	box-shadow: 0 0 0 2px rgba(212, 168, 75, 0.25);
}
body.single-product .product-summary form.cart .btn-add-cart { min-height: 44px; } /* theme 1.4.53: as tall as the 44px quantity box at every width (the base .btn-add-cart is 35px on desktop) */
.product-summary form.cart .btn-add-cart {
	width: auto;
	flex: 1 1 auto;
	margin-bottom: 0;
}

/* Language switcher (EN / عربي) */
.lang-switch { display: flex; align-items: center; gap: 8px; font-size: 0.8rem; letter-spacing: 0.04em; }
.lang-switch a { color: var(--gray-400); text-decoration: none; transition: color 0.2s ease; }
.lang-switch a:hover { color: var(--gold); }
.lang-switch .lang-current { color: var(--gold); }
.lang-switch .lang-sep { color: var(--gray-500); }
.nav-mobile .lang-switch { margin-top: 20px; justify-content: center; font-size: 0.9rem; }
@media (max-width: 768px) {
	.lang-switch { gap: 2px; }
	.lang-switch a { min-width: 44px; justify-content: center; }
}

/* Visually hidden text that stays in the accessibility tree (names the cart FAB, etc.). */
.bld-sr-only {
	position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden;
	clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; border: 0;
}
/* Keyboard focus must not land under the sticky nav, the consent banner or the sticky add-to-cart bar. */
html { scroll-padding-top: var(--nav-h); }
@media (max-width: 600px) { html { scroll-padding-bottom: 84px; } }
html.bld-consent-open { scroll-padding-bottom: var(--bld-consent-h, 0px); }
/* While the banner is open, reserve its height at the end of every page so primary actions can scroll above it. */
html.bld-consent-open body { padding-bottom: var(--bld-consent-h, 0px); }
/* Skip link: off-screen until focused; target is <main id="main">. */
.skip-link {
	position: fixed; inset-block-start: 8px; inset-inline-start: -9999px; z-index: 2000;
	padding: 10px 16px; background: var(--gold); color: var(--navy); font-weight: 700; border-radius: var(--r-sm);
}
.skip-link:focus { inset-inline-start: 8px; }
/* JS-rendered rating stars: reserve their box so the storefront header does not grow when they appear. */
.stars { min-height: 15px; min-width: 83px; }
/* Cart / checkout blocks hydrate client-side (the cart block even collapses to ~400px between the skeleton and the rendered cart): hold a screen on phones so the footer stays below the fold the whole time. */
.wp-block-woocommerce-checkout.is-loading { min-height: 100vh; }
@media (max-width: 768px) { .wp-block-woocommerce-cart { min-height: 100vh; } }
.field[aria-invalid="true"] { border-color: #e06666; }
.field-error { display: block; margin-top: 4px; font-size: .8rem; line-height: 1.4; color: #ff9b9b; }
.nav-primary { display: contents; }
main#main:focus { outline: none; }

/* WooCommerce block grid (empty-cart "New in store"): reserve the square image box so the lazy-loaded
   image cannot resize the card when it arrives (layout-shift fix). */
.wc-block-grid__product-image { aspect-ratio: 1 / 1; }
.wc-block-grid__product-image img { width: 100%; height: 100%; object-fit: cover; }

/* Cookie consent banner (inc/consent.php + assets/js/consent.js). Fixed overlay, so no layout
   shift; while it is open the bottom FABs and toast are lifted above it by its measured height. */
.bld-consent {
	position: fixed; left: 0; right: 0; bottom: 0; z-index: 1600;
	min-height: 100px; max-height: min(45vh, 320px); overflow-y: auto;
	contain: layout style paint;
	padding: 12px var(--gap) calc(12px + env(safe-area-inset-bottom, 0px));
	background: rgba(20, 24, 32, .97); border-top: 1px solid rgba(212, 168, 75, .3);
	box-shadow: 0 -12px 40px rgba(0, 0, 0, .45); color: var(--gray-200); font-family: var(--font-sans);
}
.bld-consent[hidden] { display: none; }
.bld-consent-inner { max-width: var(--container); margin: 0 auto; display: flex; align-items: center; gap: 12px 24px; }
.bld-consent-text { flex: 1 1 auto; min-width: 0; }
.bld-consent-title { font-family: var(--font-sans); font-size: .85rem; font-weight: 600; color: var(--white); margin: 0 0 2px; }
.bld-consent-body { font-size: .75rem; line-height: 1.45; margin: 0; color: var(--gray-300); }
.bld-consent-body a { display: inline-flex; align-items: center; min-height: 24px; padding-block: 2px; color: var(--gold); text-decoration: underline; }
.bld-consent-actions { flex: 0 0 auto; display: flex; gap: 10px; }
.bld-consent-btn {
	min-height: 44px; padding: 10px 18px; border-radius: var(--r-sm); cursor: pointer;
	font: 600 .82rem/1.2 var(--font-sans); color: var(--white);
	background: transparent; border: 1px solid var(--gold); transition: background var(--trans-fast), color var(--trans-fast);
}
.bld-consent-btn:hover { background: var(--gold); color: var(--navy); }
.bld-consent-btn:focus-visible, .bld-consent-body a:focus-visible, .footer-cookie-settings:focus-visible { outline: 2px solid var(--gold); outline-offset: 3px; }
html[dir="rtl"] .bld-consent { font-family: "Cairo", "Noto Sans Arabic", Tahoma, sans-serif; letter-spacing: 0; }
@media (max-width: 720px) {
	.bld-consent-inner { flex-direction: column; align-items: stretch; }
	.bld-consent-actions .bld-consent-btn { flex: 1 1 0; }
	/* Compact bar on phones: the heading stays as the dialog's accessible name but no longer takes a line, so the banner covers less of the page. */
	.bld-consent-title { position: absolute; width: 1px; height: 1px; margin: -1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
}
.bld-consent-open .woocommerce-cart-form,
.bld-consent-open .woocommerce-checkout { padding-bottom: calc(var(--bld-consent-h, 0px) + 16px); }
/* Lift by translate, not bottom: the banner opens after load and a moved fixed box would count as layout shift. Browsers without the translate property keep the old bottom lift. */
@supports (translate: 0 1px) {
	.bld-consent-open .cart-fab,
	.bld-consent-open .delivery-demo-btn,
	.bld-consent-open .balad-order-actions { translate: 0 calc(-1 * var(--bld-consent-h, 0px)); }
}
@supports not (translate: 0 1px) {
	.bld-consent-open .cart-fab,
	.bld-consent-open .delivery-demo-btn { bottom: calc(var(--bld-consent-h, 0px) + 16px); }
	.bld-consent-open .balad-order-actions { bottom: calc(var(--bld-consent-h, 0px) + 16px); }
}
.bld-consent-open #balad-toast-wrap { bottom: calc(var(--bld-consent-h, 0px) + 84px); }
/* The fixed banner must never cover the cart / checkout action buttons (WooCommerce blocks). */
.bld-consent-open .wc-block-cart,.bld-consent-open .wc-block-checkout{padding-bottom:calc(var(--bld-consent-h,0px) + 16px)}
.bld-consent-open .wc-block-checkout__actions,.bld-consent-open .wc-block-cart__submit-container--sticky{bottom:var(--bld-consent-h,0px)}
.footer-cookie-settings { background: none; border: 0; padding: 0; font: inherit; color: var(--gold); font-weight: 500; cursor: pointer; }
@media (max-width: 768px) { .footer-cookie-settings { padding: 10px 2px; } }

/* ─── Mobile tap targets + form sizing (QA P-02..P-07, P-11) ───────────────
   Mobile only; desktop is unchanged. 44px is the minimum tap height, 48px for
   Place Order. Every text-like control is 16px so iOS Safari does not zoom on
   focus — !important because WooCommerce Blocks and WC core style their own
   fields (and the shop sort <select.orderby>) with more specific selectors. */
@media (max-width: 768px) {
	input:not([type="checkbox"]):not([type="radio"]):not([type="hidden"]):not([type="submit"]):not([type="button"]):not([type="range"]):not([type="color"]):not([type="file"]),
	select,
	textarea { font-size: 16px !important; }
	.woocommerce-ordering select.orderby { min-height: 44px; max-width: 100%; }

	/* Product page + product card Add to cart */
	.btn-add-cart { min-height: 44px; }

	/* Cart drawer: Checkout links (single- and multi-store) and Remove */
	.drawer a.btn-primary {
		display: flex; align-items: center; justify-content: center;
		min-height: 44px; padding: 10px 20px; border-radius: var(--r-full); font-weight: 700;
	}
	.cart-drawer-store-group a.btn-primary { margin-block-end: 8px; }
	.ci-remove {
		display: inline-flex; align-items: center; justify-content: center;
		min-height: 44px; min-width: 44px; padding-inline: 6px;
	}

	/* Place Order (block + classic checkout) */
	.wc-block-components-checkout-place-order-button,
	#place_order { min-height: 48px !important; }

	/* Mobile menu dialog links */
	.nav-mobile { gap: 10px; }
	.nav-mobile a { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; }

	/* Footer: column links, support/email links, credit link, cookie settings */
	.footer-col li a { min-height: 44px; }
	.footer-support a,
	.footer-credit a,
	.footer-cookie-settings { display: inline-flex; align-items: center; min-height: 44px; }
	.footer-cookie-settings { padding-block: 0; }
	/* Keep the last footer line clear of the fixed cart FAB (58px at bottom:74px). */
	.site-footer { padding-block-end: 150px; }

	/* Apply form radios: 20px control, whole label is a 44px row */
	.apply-plan-card input[type="radio"],
	.apply-billing input[type="radio"] { width: 20px; height: 20px; margin: 0; flex: 0 0 auto; accent-color: var(--gold); }
	.apply-plan-card input[type="radio"] { margin-block-end: 8px; }
	.apply-billing { flex-wrap: wrap; gap: 4px 20px !important; }
	.apply-billing label { min-height: 44px; font-size: 1rem; }
}

/* ─── Product page mobile: sticky action bar (QA P-02) ─────────────────────
   Phones only; desktop unchanged. The add-to-cart form is pinned to the bottom
   edge so the primary action is always inside the first screen. It is fixed, so no
   layout shift. While the cookie banner is open the bar is hidden so it cannot
   cover the first-screen price; the cart bubble remains available.
   Logical properties keep RTL correct; safe-area inset is honoured. */
@media (max-width: 768px) {
	body.single-product { --bld-pdp-bar-h: calc(68px + env(safe-area-inset-bottom, 0px)); }
	body.single-product .product-summary form.cart {
		position: fixed; inset-inline: 0; bottom: 0; z-index: 1500;
		flex-wrap: nowrap; gap: 10px; margin: 0;
		padding: 10px var(--gap) calc(10px + env(safe-area-inset-bottom, 0px));
		background: rgba(20, 24, 32, .98); border-top: 1px solid rgba(212, 168, 75, .3);
		box-shadow: 0 -8px 24px rgba(0, 0, 0, .4);
	}
	body.single-product .product-summary form.cart .quantity { flex: 0 0 auto; }
	body.single-product .product-summary form.cart .btn-add-cart { min-height: 48px; }
	body.single-product .site-footer { padding-block-end: calc(150px + var(--bld-pdp-bar-h)); }
	/* Theme 1.4.53: the cart FAB (58px, 22px from the right edge in both languages) is lifted above the bar, but with the cookie
	   banner open it lands on the title/price row. Those two rows keep a bubble-wide gutter on the FAB side (the physical right:
	   inline-end in LTR, inline-start in RTL), so the price is never under the bubble whatever the banner height. */
	body.single-product .product-summary h1,
	body.single-product .product-summary .prod-price { padding-inline-end: 92px; }
	html[dir="rtl"] body.single-product .product-summary h1,
	html[dir="rtl"] body.single-product .product-summary .prod-price { padding-inline-end: 0; padding-inline-start: 92px; }
	/* Theme 1.4.55: the same bubble-side gutter for the thumbnail strip, so the last thumbnail is never under the cart FAB. The FAB
	   sits on the PHYSICAL right in both languages (RTL maps inset-inline-start to the right), so this is physical padding-right.
	   The strip keeps overflow-x:auto, so a longer strip still scrolls and its last thumbnail ends clear of the bubble. */
	html body.single-product .bld-gallery__thumbs { padding-right: 76px; }
	/* keep the cart FAB and toast clear of the bar */
	body.single-product .cart-fab { bottom: calc(var(--bld-pdp-bar-h) + 12px); }
	@supports (translate: 0 1px) {
		html.bld-consent-open body.single-product .product-summary form.cart { translate: 0 calc(-1 * var(--bld-consent-h, 0px)); }
	}
	/* The lifted bar can cross the first-screen price while consent is visible. */
	html.bld-consent-open body.single-product .product-summary form.cart:not(.variations_form),
	html.bld-consent-open body.single-product .variations_form .woocommerce-variation-add-to-cart { visibility: hidden; pointer-events: none; }
	@supports not (translate: 0 1px) {
		html.bld-consent-open body.single-product .product-summary form.cart { bottom: var(--bld-consent-h, 0px); }
		html.bld-consent-open body.single-product .cart-fab { bottom: calc(var(--bld-consent-h, 0px) + var(--bld-pdp-bar-h) + 12px); }
	}
	html.bld-consent-open body.single-product #balad-toast-wrap { bottom: calc(var(--bld-consent-h, 0px) + var(--bld-pdp-bar-h) + 80px); }
	/* Variable products (theme 1.4.52): the variation form stays in the page flow (selects, price, availability);
	   only its quantity + Add to cart row is the fixed bar. No transform or translate on the form, or the fixed row
	   would be positioned against the form instead of the screen. */
	body.single-product .product-summary form.cart.variations_form { position: static; translate: none; }
	body.single-product .variations_form .woocommerce-variation-add-to-cart {
		position: fixed; inset-inline: 0; bottom: 0; z-index: 1500;
		display: flex; align-items: center; flex-wrap: nowrap; gap: 10px; margin: 0;
		padding: 10px var(--gap) calc(10px + env(safe-area-inset-bottom, 0px));
		background: rgba(20, 24, 32, .98); border-top: 1px solid rgba(212, 168, 75, .3);
		box-shadow: 0 -8px 24px rgba(0, 0, 0, .4);
	}
	body.single-product .variations_form .woocommerce-variation-add-to-cart .quantity { flex: 0 0 auto; margin: 0; }
	body.single-product .variations_form .woocommerce-variation-add-to-cart .btn-add-cart { flex: 1 1 auto; width: auto; min-height: 48px; margin-bottom: 0; }
	@supports (translate: 0 1px) {
		html.bld-consent-open body.single-product .product-summary form.cart.variations_form { translate: none; }
		html.bld-consent-open body.single-product .variations_form .woocommerce-variation-add-to-cart { translate: 0 calc(-1 * var(--bld-consent-h, 0px)); }
	}
	@supports not (translate: 0 1px) {
		html.bld-consent-open body.single-product .variations_form .woocommerce-variation-add-to-cart { bottom: var(--bld-consent-h, 0px); }
	}
	/* tighter first screen: shorter gallery, smaller title and price */
	body.single-product .product-gallery img { max-height: 42vh; width: 100%; object-fit: contain; }
	body.single-product .product-summary h1 { font-size: 1.5rem; line-height: 1.25; margin-block: 0 4px; }
	body.single-product .product-summary .prod-price { font-size: 1.5rem !important; }
}

/* Cart page tap targets + cart drawer layout (theme 1.4.21). Phones and touch only;
   desktop keeps WooCommerce's compact stepper. */
@media (max-width: 768px), (pointer: coarse) {
	body.woocommerce-cart .wc-block-components-quantity-selector { width: auto; min-width: 0; flex-wrap: nowrap; }
	body.woocommerce-cart .wc-block-components-quantity-selector__button {
		display: inline-flex; align-items: center; justify-content: center;
		min-width: 44px !important; min-height: 44px !important; padding: 0 !important;
	}
	body.woocommerce-cart .wc-block-components-quantity-selector__input { min-height: 44px; min-width: 40px; }
	body.woocommerce-cart .wc-block-cart-item__remove-link {
		display: inline-flex; align-items: center; justify-content: center;
		min-width: 44px; min-height: 44px; padding-inline: 6px;
	}
}
@media (max-width: 768px) {
	/* One scroll container: list, then footer in normal flow, so Checkout and the
	   per-store WhatsApp button always stack with a gap on short and tall phones. */
	.drawer { overflow-y: auto; overscroll-behavior: contain; }
	.drawer-head { position: sticky; top: 0; z-index: 2; background: var(--navy-850); flex: none; }
	.drawer-body { flex: none; overflow: visible; }
	.drawer-foot { flex: none; }
	.cart-drawer-store-group .btn-whatsapp { margin-block-start: 12px; }
	.drawer-foot a.btn-primary { margin-block-end: 12px; }
}

/* Cart table on narrow phones (theme 1.4.22): the 44px tap targets made the table's
   min-content wider than the viewport. Fixed layout, flexible product column, stepper
   and remove button wrap inside the cell. */
@media (max-width: 430px) {
	body.woocommerce-cart .wc-block-cart { padding-inline: 12px; }
	body.woocommerce-cart .wc-block-cart-items { table-layout: fixed; width: 100%; max-width: 100%; }
	body.woocommerce-cart .wc-block-cart-items th, body.woocommerce-cart .wc-block-cart-items td { min-width: 0; padding-inline: 6px; }
	body.woocommerce-cart .wc-block-cart-items .wc-block-cart-items__header-image,
	body.woocommerce-cart .wc-block-cart-items td.wc-block-cart-item__image { width: 64px; }
	body.woocommerce-cart .wc-block-cart-items .wc-block-cart-items__header-total,
	body.woocommerce-cart .wc-block-cart-items td.wc-block-cart-item__total { width: 72px; }
	body.woocommerce-cart .wc-block-cart-item__image img { width: 100%; max-width: 56px; height: auto; }
	body.woocommerce-cart .wc-block-cart-item__product { overflow-wrap: anywhere; word-break: break-word; }
	body.woocommerce-cart .wc-block-cart-items__row { grid-template-columns: 64px minmax(0, 1fr) !important; column-gap: 0; }
	body.woocommerce-cart .wc-block-cart-items__row .wc-block-cart-item__image { grid-column: 1 !important; grid-row: 1 / span 2 !important; }
	body.woocommerce-cart .wc-block-cart-items__row .wc-block-cart-item__product { grid-column: 2 !important; grid-row: 1 !important; min-width: 0; }
	body.woocommerce-cart .wc-block-cart-items__row .wc-block-cart-item__total { grid-column: 2 !important; grid-row: 2 !important; min-width: 0; justify-content: flex-start; text-align: start; padding-block: 10px 8px; }
	body.woocommerce-cart .wc-block-components-quantity-selector__input { flex: 0 0 44px; min-width: 44px; width: 44px; }
	body.woocommerce-cart .wc-block-cart-item__quantity { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; max-width: 100%; }
	body.woocommerce-cart .wc-block-cart-item__total { overflow-wrap: anywhere; }
}

/* Keep the server-rendered product image visible before WooCommerce initialises
   its footer-loaded gallery scripts. The square slide box stays in place when
   FlexSlider wraps it; the thumbnail strip remains outside this box. */
body.single-product .woocommerce-product-gallery.images { opacity: 1 !important; transition: none !important; }
body.single-product .woocommerce-product-gallery__wrapper { aspect-ratio: 1 / 1; overflow: hidden; }
body.single-product .woocommerce-product-gallery__image img { width: 100%; aspect-ratio: 1 / 1; object-fit: contain; }
@media (max-width: 768px) {
	body.single-product .woocommerce-product-gallery__wrapper {
		aspect-ratio: auto;
		height: min(42vh, calc(100vw - 2 * var(--gap)));
		min-height: min(42vh, calc(100vw - 2 * var(--gap)));
	}
	body.single-product .woocommerce-product-gallery__image img {
		height: min(42vh, calc(100vw - 2 * var(--gap)));
		max-height: none;
	}
}

/* 1.4.75 L-04: focus rings on dark surfaces (header, footer, banner, skip link) use gold/white, never the dark ring. */
.site-nav a:focus-visible,
.site-nav button:focus-visible,
.custom-logo-link:focus-visible,
.site-footer a:focus-visible,
.site-footer button:focus-visible,
.bld-consent a:focus-visible,
.bld-consent button:focus-visible {
	outline: 2px solid var(--gold);
	outline-offset: 2px;
}
.skip-link:focus-visible { outline: 3px solid #fff; outline-offset: 2px; }

/* 1.4.75 P-04: checkout block touch targets. */
@media (max-width: 600px) {
	.wc-block-checkout__add-note .wc-block-components-checkbox__input[type="checkbox"] { width: 24px; height: 24px; min-width: 24px; }
	.wc-block-checkout__add-note .wc-block-components-checkbox__label { font-size: 14px; }
	.wc-block-components-address-form__address_2-toggle {
		display: inline-flex; align-items: center; min-height: 24px; padding-block: 4px;
	}
}

/* ─── Cart bubble (theme 1.4.58, G01) ───────────────────────────────────────────────────────────────────────────
   A fixed bubble covers whatever scrolls beneath it, so it is shown only where it is needed and kept small.
   (a) While the cookie banner is open the bubble is lifted above it (the .bld-consent-open .cart-fab translate / bottom rules
       by --bld-consent-h further up), never hidden (1.4.67, RV-14): hiding it (1.4.58-1.4.66) left no cart entry point once the
       auto-opened drawer was closed. It clears the banner by its own bottom offset, so it never covers the banner buttons.
   (b) Not drawn on pages that are, or replace, the cart (body.bld-no-fab, set by balad_cart_fab_hidden() in inc/setup.php).
   (c) Phones: 44px in the low corner, and the page ends with room under its last line. On the product page the sticky
       add-to-cart bar is the bubble's home: the bubble sits in the bar's right end (the bubble is on the physical right in
       both languages, so the reserve is physical padding-right) instead of floating over the page above the bar. */
body.bld-no-fab .cart-fab, body.bld-no-fab .bld-skip-cart { display: none; }
@media (max-width: 768px) {
	.cart-fab { width: 44px; height: 44px; bottom: calc(16px + env(safe-area-inset-bottom, 0px)); }
	.cart-fab svg { width: 18px; height: 18px; }
	.cart-fab .cart-count { min-width: 16px; height: 16px; padding: 0 4px; font-size: .62rem; }
	.site-footer { padding-block-end: calc(76px + env(safe-area-inset-bottom, 0px)); }
	html body.single-product .cart-fab { bottom: calc(12px + env(safe-area-inset-bottom, 0px)); }
	html body.single-product .product-summary form.cart:not(.variations_form),
	html body.single-product .variations_form .woocommerce-variation-add-to-cart { padding-right: 76px; }
	/* Theme 1.4.63 (S02): while the page scrolls the bubble fades to .35 so text passing under it stays readable (marketplace.js
	   toggles html.bld-scrolling; ~0.45 s after the last scroll event it is fully opaque again). Same size, position and tap target. */
	.cart-fab { transition: transform .3s var(--ease-spring), opacity .2s ease; }
	html.bld-scrolling .cart-fab { opacity: .35; }
}
