/* Sale price reads as the price. The was-price stays quiet. */
body.single-product #brxe-qpppmp.brxe-product-price del,
body.single-product #brxe-qpppmp.brxe-product-price del .amount,
body.single-product #brxe-qpppmp.brxe-product-price del bdi,
body.single-product .brxe-qpppmp.brxe-product-price del,
body.single-product .brxe-qpppmp.brxe-product-price del .amount,
body.single-product .brxe-qpppmp.brxe-product-price del bdi {
  color: #8a847b !important;
  font-size: 14px !important;
  font-weight: 400 !important;
  text-decoration: line-through !important;
}
body.single-product #brxe-qpppmp.brxe-product-price ins,
body.single-product #brxe-qpppmp.brxe-product-price ins .amount,
body.single-product #brxe-qpppmp.brxe-product-price ins bdi,
body.single-product .brxe-qpppmp.brxe-product-price ins,
body.single-product .brxe-qpppmp.brxe-product-price ins .amount,
body.single-product .brxe-qpppmp.brxe-product-price ins bdi {
  color: #a8503a !important;
  font-size: 18px !important;
  font-weight: 500 !important;
  text-decoration: none !important;
}

/* Task 87 - Mobile PDP: wishlist label + "find my size" alignment
 * WHY: Task 35's touch-target rule
 *   body:not(.pm-cols-10) a.tinvwl_add_to_wishlist_button::after (max-width:767px)
 * also hits the full-width PDP wishlist button, whose ::after carries the text label
 * ("select a length to save" / "add to wishlist"). It became a 44px absolute box, so
 * the label stacked one word per line and overflowed onto the delivery estimate.
 * That button is already 52px tall, so it doesn't need the extra hit area.
 * Also: "find my size" kept its desktop 14px left indent on mobile.
 * CANARY on admins 8 Oct 2026, promoted to LIVE same day.
 * ROLLBACK: deactivate this snippet.
 * Fold into the Task 35 selector next plugin release. */
@media (max-width:767px){
  .single-product .tinv-wraper.tinvwl-woocommerce_after_add_to_cart_button a.tinvwl_add_to_wishlist_button.no-txt::after{
    position:static;width:auto;height:auto;left:auto;top:auto;transform:none;white-space:nowrap}
  .single-product td.value .abx-fit-open{display:inline-block;margin:0 0 12px;padding:6px 0}
}
/* Task 68 - Product page: one recently-viewed list on mobile, not two.
 *
 * Reported 16 Sept 2026 (and raised once before): on a phone an extra
 * recommended-products row appears underneath the We're Cute Too /
 * Recommended Products area.
 *
 * Cause: two owners for the same content. The Bricks tab block on the product
 * page carries a "Recently Viewed" panel, and the mobile layer (WPCode 39192)
 * separately injects a .abx-seen strip immediately above the footer. Nothing
 * hides the tab block on mobile, so both render.
 *
 * The strip is the one that goes: the tab block is the section the client
 * calls the existing area, and it is what the desktop shows too. The strip is
 * kept everywhere else - on a collection page there is no Recently Viewed tab
 * and it is the only recently-viewed there is.
 *
 * Shipped live rather than behind the preview gate: it was a defect a customer
 * was looking at. DEACTIVATED 16 Sept 2026 when Task 66 was promoted - Task 66
 * now owns the whole recommendations area and hides the strip itself, so this
 * rule is redundant. Kept, not binned: if Task 66 is ever rolled back, turn
 * this one back on at the same time or the duplicate returns.
 *
 * Rollback: deactivate this snippet.
 */

body.single-product .abx-seen {
	display: none !important;
}
/* Task 63 - desktop mega menu reachability. Two defects, both of which read to a shopper as "the links do not work": (1) a dead gap between the nav row and the panel, so moving the pointer down closes the panel before the click lands; (2) panel links are inline-block and only 18px tall inside 33px rows, so roughly half the visible row does nothing when clicked. Desktop only - the mobile drawer is Task 62 and is untouched.

   Revised 14 Sept 2026: the original bridge hung off .abx-mm-item::after and relied on that li being position:relative. Bricks forces position:static on megamenu parents, so the strip was positioned against the header and never covered the gap (measured: nav item ends 89px, panel starts 92px, li computed position:static). The bridge is now anchored to the panel itself, which is already positioned, and only exists while the panel is open. */

@media (min-width: 768px) {
  #abx-mm::before{content:"";position:absolute;left:0;right:0;top:-4px;height:4px}
  #abx-mm .abx-mm-col li{display:block}
  #abx-mm .abx-mm-col li>a{display:block;width:100%;box-sizing:border-box;padding:6px 10px;margin-left:-10px;border-radius:2px;transition:background-color .12s ease,color .12s ease}

  /* The only hover feedback was #abx-mm a:hover{text-decoration:underline} - a hairline in the
     text colour, spanning the label rather than the row. The row is the click target now, so the
     row is what should respond. */
  #abx-mm .abx-mm-col li>a:hover,
  #abx-mm .abx-mm-col li>a:focus-visible{background:rgba(26,24,21,.06);color:#000;text-decoration:none}
}


/* The open state rode on a CSS transition that included `visibility`. visibility is a
   discrete property - it only flips when its transition finishes. Interrupt that
   transition and the panel ends up class-open but computed visibility:hidden: it paints
   no hover, takes no clicks, and hit-testing passes straight through to the page behind.
   Sweeping across the nav toggles is-open off and on, which is exactly what happens on
   the way to the departments further right, so Occasionwear and Sale hit it while the
   ones near the left edge rarely did.

   Measured on the live page: with the transition in place, is-open gave opacity 0 /
   visibility hidden and all 11 panel links unhittable; with the transition removed, the
   same class gave opacity 1 / visibility visible and all 11 hit. Flip visibility
   instantly on open, delay it only on close, and leave opacity and transform animated.
   `html` prefix because the panel's own CSS is injected at runtime, after this file. */
html #abx-mm{transition:opacity .16s ease,transform .16s ease,visibility 0s linear .16s}
html #abx-mm.is-open{transition:opacity .16s ease,transform .16s ease,visibility 0s linear 0s}

/**
 * Task 57 - Header: search field overlapping the nav (desktop)
 * WPCode snippet | CSS | Site Wide Header
 *
 * THE BUG THIS FIXES
 *
 * Measured on the live site at 1114px wide:
 *
 *     Sale link      x 596 -> 626
 *     Search input   x 595 -> 785   (.dgwt-wcas-search-input, FiboSearch)
 *
 * document.elementFromPoint() at the centre of the Sale link returned the
 * search input, not the link. Sale could not be clicked or hovered, so the
 * dropdown Task 46 builds for it never opened. Nothing was wrong with the
 * menu itself.
 *
 * WHAT THIS VERSION DOES, AND WHAT IT DELIBERATELY DOES NOT
 *
 * Stacking order only. The nav column is lifted above the search column, so
 * a nav link can never be covered by it whatever the widths do.
 *
 * The first version of this snippet also tried to stop the flex row
 * overflowing - display:flex, a gap, a shrinkable nav column, a clamp() on
 * the search width. That broke the mega menu outright: with those rules
 * applied the panel stopped populating on hover (0 links, every department,
 * not just Sale). Verified by disabling the snippet in the page and
 * re-testing - 19 links with it off, 0 with it on. #brxe-iosesi is the nav's
 * own wrapper, not the row holding nav and search, so making it a flex
 * container changed geometry Task 26 depends on.
 *
 * So the layout half is gone. What remains is the part that fixes the
 * reported bug and cannot break anything, because it changes no boxes.
 *
 * STILL OPEN: around 1100-1200px the search field visually overlaps the tail
 * of the nav. The links all work now, but it looks crowded. Fixing that
 * properly means measuring the real breakpoint and either collapsing the
 * search to an icon or giving the row somewhere to put the extra width -
 * and testing the mega menu after every change, which is the lesson here.
 *
 * Scope: min-width 768px. The mobile layer (body.abx-m) is untouched.
 */

@media ( min-width: 768px ) {

	header#brx-header .brxe-div:has( > nav.brxe-nav-nested ) {
		position: relative;
		z-index: 3;
	}

	header#brx-header .brxe-div:has( .dgwt-wcas-search-form ) {
		position: relative;
		z-index: 2;
	}
}

/**
 * Sale archive notice (Task 56).
 */
.abx-sale-notice {
	margin: 0 0 1.25rem;
	font-size: 0.8125rem;
	letter-spacing: 0.02em;
	text-transform: lowercase;
	opacity: 0.75;
}

.abx-sale-notice a {
	text-decoration: underline;
	text-underline-offset: 0.2em;
}
/* Task 44 (T7) - size variations span the full Add to Bag width.
 *
 * The swatch list already matches the button's 408px, but each swatch is
 * pinned at 60px, so five sizes leave ~68px of dead space on the right and
 * the row reads as ragged next to a full-width button.
 *
 * Letting the swatches share the row solves it at any count: they grow to
 * fill, and wrap onto a second line rather than shrinking below a legible
 * 56px when a product has many lengths.
 *
 * Promoted live on 16 Sept 2026 (client request, 16 Sept list item 3).
 * The body.abx-preview gate from Task 43 has been removed - this now
 * applies to every visitor. Rollback: deactivate this snippet.
 *
 * Still scoped to >=768px so the mobile layer built in the ABX Till
 * plugin is untouched.
 */
@media (min-width: 768px) {

	body .bricks-variation-swatches.bricks-swatch-label {
		flex-wrap: wrap;
	}

	body .bricks-variation-swatches.bricks-swatch-label > li {
		/* !important: Bricks sets flex: 0 0 auto on the swatch later in the
		   cascade, which pins each one at its base width. */
		flex: 1 1 0 !important;
		width: auto !important;
		min-width: 56px;
	}

	/* A single size should stay a button, not stretch across the whole row. */
	body .bricks-variation-swatches.bricks-swatch-label > li:only-of-type {
		flex: 0 0 60px !important;
		min-width: 60px;
	}

	/* The sold-out strike comes from notify-me.css as a 1px line the width of
	   the swatch, rotated 45deg. That only lines up while the swatch is square-
	   ish: at 60px wide it read as a corner-to-corner cross, and now that the
	   swatches fill the row it is ~103px wide and 48px tall, so the rotated
	   line overshoots top and bottom. A gradient draws the diagonal from the
	   real corners instead, so it stays exact at any width. */
	body .bricks-variation-swatches.bricks-swatch-label > li.nm-oos::after {
		top: 0 !important;
		left: 0 !important;
		width: 100% !important;
		height: 100% !important;
		transform: none !important;
		background: linear-gradient(to top right,
			transparent calc(50% - 0.5px),
			#555 calc(50% - 0.5px),
			#555 calc(50% + 0.5px),
			transparent calc(50% + 0.5px)) !important;
	}
}

/* =====================================================================
 * Mobile PDP: gallery gutters + image fill
 * =====================================================================
 * Two defects on a 390px phone, both visible in one screenshot of the
 * Kyoto product page.
 *
 * 1. THE GALLERY WAS OFF-CENTRE. wp-custom-css carries, at <=767px,
 *
 *      body.single-product #brxe-bqxhwn, #brxe-uzabsm, ... {
 *        width: calc(100vw - 10px) !important;
 *        max-width: calc(100vw - 10px) !important;
 *      }
 *
 *    which is 380px on a 390px screen - the intent being a 5px gutter
 *    each side, matching .ab-safe-product-main's `margin: 0 5px`. But
 *    that container also carries `padding: 14px 14px 46px`, so its
 *    content box is 352px and a 380px child overflows it by 28px. The
 *    container's own overflow-x:hidden then clipped 9px off the right
 *    and left 19px of gutter on the left. Measured 19..399, clipped to
 *    19..385: a 10px lean that reads as a crooked photo.
 *
 *    Fixed by pulling the gallery back out of that padding - and only
 *    the gallery, so the title, price and description keep their 14px
 *    text inset. Result 5..385: symmetric, inside the container's
 *    border box, so nothing is clipped. Not touched: the ID rule above.
 *    It is someone's deliberate 5px gutter and it is not wrong; it was
 *    only ever measured against the wrong box.
 *
 * 2. THE IMAGE DID NOT FILL ITS FRAME. .sgg-item is aspect-ratio
 *    800/1067 (3:4) = 507px tall at this width. The <img> inside carries
 *    object-fit:cover but no height, so it sized to its own intrinsic
 *    819/1024 and came out 475px - leaving a 32px band of the frame's
 *    rgba(0,0,0,.03) showing as a grey strip under every photo. cover
 *    had nothing to cover. Giving the image the frame's height lets
 *    object-fit do the job it was already asked to do.
 *
 * Phones only. Above 767px the gallery is a 60% column with none of
 * this geometry, and both rules are inert.
 *
 * ROLLBACK: deactivate this snippet. It adds rules and removes none.
 */

@media (max-width: 767px) {

	body.single-product .ab-safe-product-gallery {
		margin-left: -14px !important;
		margin-right: -14px !important;
	}

	body.single-product .ab-safe-product-gallery .sgg-item img {
		width: 100% !important;
		height: 100% !important;
		object-fit: cover !important;
		display: block !important;
	}
}

/*
 * Task 35 - Mobile: touch targets and price legibility.
 *
 * MEASURED at 390px on live templates. Four controls a shopper is expected to
 * hit with a thumb, against the WCAG 2.2 AA minimum of 24x24:
 *
 *   header search icon   .dgwt-wcas-search-icon            20 x 24
 *   filter toggle        .ab-safe-filterbar .brxe-toggle   20 x 18
 *   Sort By              .abx-sort-toggle                  65 x 14
 *   find my size         .abx-fit-open                     65 x 13
 *
 * A 13px-tall control is not a control, it is a dare.
 *
 * HOW THIS FIXES THEM. Not by making them bigger - the design is fine and
 * enlarging the icons would change the header. Each gets an invisible,
 * absolutely-positioned pseudo-element centred on it, 44px in the short
 * dimension. The tap area grows; nothing moves and nothing looks different.
 *
 * WHICH PSEUDO-ELEMENT, AND WHY IT MATTERS. .dgwt-wcas-search-icon and
 * .brxe-toggle already use ::after for their own decoration, so those two get
 * ::before. The other two have neither in use, so they use ::after. Picking
 * the wrong one here silently deletes an icon - the kind of breakage that does
 * not throw and never shows up in a console.
 *
 * Breadcrumb links (22x22) are deliberately left alone: they use ::after for
 * their separators, and 22 against 24 is not worth risking the separator for.
 *
 * PRICE. Card price was 11px, the smallest text on a product card - smaller
 * than the title above it. Now 12px, matching the title. Still restrained;
 * simply no longer the thing you squint at when comparing two products.
 *
 * Phones and small tablets only. Desktop is untouched.
 *
 * Reversible: deactivate snippet.
 */

@media (max-width: 991px) {

  /* --- header search: 20x24 --------------------------------------------- */
  /* ::after is taken by the widget itself, so this uses ::before */
  .dgwt-wcas-search-icon { position: relative; }
  .dgwt-wcas-search-icon::before {
    content: ""; position: absolute; left: 50%; top: 50%;
    width: 44px; height: 44px; transform: translate(-50%, -50%); z-index: 0;
  }

  /* --- filter toggle in the archive toolbar: 20x18 ---------------------- */
  .ab-safe-filterbar .brxe-toggle { position: relative; }
  .ab-safe-filterbar .brxe-toggle::before {
    content: ""; position: absolute; left: 50%; top: 50%;
    width: 44px; height: 44px; transform: translate(-50%, -50%); z-index: 0;
  }

  /* --- Sort By: 65x14 --------------------------------------------------- */
  .abx-sort-toggle { position: relative; }
  .abx-sort-toggle::after {
    content: ""; position: absolute; left: 50%; top: 50%;
    width: 100%; min-width: 44px; height: 44px;
    transform: translate(-50%, -50%); z-index: 0;
  }

  /* --- find my size (product page): 65x13 ------------------------------- */
  .abx-fit-open { position: relative; }
  .abx-fit-open::after {
    content: ""; position: absolute; left: 50%; top: 50%;
    width: 100%; min-width: 44px; height: 44px;
    transform: translate(-50%, -50%); z-index: 0;
  }

  /* --- mobile menu rows: 22px links inside 50px rows -------------------- */
  /* The offcanvas menu builds each row as
         .brx-submenu-toggle  (350x50, padding 14/14)
           a       (60x22)   <- the only tappable part
           button  (30x15)   <- expands the submenu
     so a 350x50 row offered a 60x22 target and 29px of dead space above and
     below it. These are the primary navigation links on a phone.

     Padding on the anchor does not work here - something already pins its
     height, and adding negative margins only collapsed the row. Instead the
     link is stretched over the row with an absolutely-positioned ::after,
     stopping 56px short of the right edge so the submenu arrow keeps its own
     target rather than being swallowed by the link. Both pseudo-elements were
     confirmed unused before being claimed.

     Verified: nav height unchanged at 425px, a tap mid-row now lands on the
     anchor, and a tap on the arrow still lands on the button. */
  .brxe-offcanvas .brx-submenu-toggle { position: relative; }
  .brxe-offcanvas .brx-submenu-toggle > a::after {
    content: ""; position: absolute; left: 0; top: 0; bottom: 0; right: 56px;
  }
  .brxe-offcanvas .brx-submenu-toggle > button { position: relative; }
  .brxe-offcanvas .brx-submenu-toggle > button::after {
    content: ""; position: absolute; left: 50%; top: 50%;
    width: 48px; height: 48px; transform: translate(-50%, -50%);
  }

  /* --- header hairline: removed on mobile ------------------------------ */
  /* .ab-mobile-header carried border-bottom:1px solid #000 - a hard black
     rule directly under the logo row. Removed on phones only; the desktop
     header is untouched. */
  #brxe-uehuid.ab-mobile-header { border-bottom: 0 !important; }

  /* --- search overlay: the magnifier was sitting on the text ------------ */
  /* The mobile search overlay positions its submit button absolutely at
     left:23px / top:21px inside a 45px bar. At 40x40 that puts the magnifier
     on top of the placeholder AND 22px below the bar, crossing the underline.

     Moved to the right end and centred vertically, at 44x44 so it also stops
     being an undersized target. Centred with margin-top rather than
     transform: translateY(-50%) - something else already owns transform on
     this element and the translate silently did nothing. */
  .dgwt-wcas-om-bar .dgwt-wcas-search-submit {
    left: auto !important;
    right: 2px !important;
    top: 50% !important;
    bottom: auto !important;
    margin-top: -22px !important;
    width: 44px !important;
    height: 44px !important;
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
  }

  /* --- card price: NOT changed here, deliberately ----------------------- */
  /* The price is 11px and it should probably be larger. It is not changed
     because font-size on .ab-safe-product-price already has five competing
     declarations, four of them !important:

       .ab-safe-product-price, .ab-safe-product-price *      11px !important
       same, @media (max-width:767px)                        10px !important
       .ab-safe-product-card .ab-safe-product-price          13px !important
       .brxe-cvqllw .brxe-qccobv.brxe-heading                10px  (9px <478)
       plus another in wp-custom-css

     A plain rule loses; winning needs a sixth !important aimed over the top
     of the other five. That buys 1px and makes the next person's job worse.
     The fix is to delete four of those five, which is a decision about which
     snippet owns the product card - not something to smuggle in here. */
}

@media (max-width: 767px) {

	/* PRODUCT PAGE COLOUR SWATCHES. Nine 32x32 dots, laid out flex with a 12px
	   gap - so 44px centre to centre, horizontally and vertically both. A 44x44
	   hit area therefore tiles exactly: it eats the gaps and stops dead on the
	   neighbour's boundary, no overlap to argue about and no dead strip left
	   between dots. Verified by scanning elementFromPoint a pixel at a time
	   across a row (13-56, 57-100, 101-144, ...) and down a column (167-210,
	   then the second row from 211). Tap area goes from 1024px2 to 1936px2 and
	   nothing moves on screen.

	   ::before, not ::after - .color-swatch already uses ::after for its 20px
	   inner disc. */
	body.single-product .color-swatch-container .color-swatch::before {
		content: "";
		position: absolute;
		left: 50%;
		top: 50%;
		width: 44px;
		height: 44px;
		transform: translate(-50%, -50%);
	}

	/* WISHLIST HEART ON PRODUCT CARDS. 30x30, and there are twenty of them on
	   a collection page - the most repeated undersized target on the site. It
	   sits alone in the card's top-right corner with no other control near it,
	   so the 44px area only ever takes space from the card link behind it, and
	   near the heart the heart is what you meant. Verified: HEART at 21px from
	   centre, CARDLINK at 23px - a clean boundary, no bleed.

	   Excluded at three-up. There the card is 115px wide, so 44px would be a
	   quarter of it and people reaching for the product would get the heart.
	   At that density the dot stays 30px, which is the honest trade: the
	   guideline exists to stop mis-taps, and applying it there would cause them.

	   ::after, not ::before - the heart glyph is already drawn in ::before. */
	body:not(.pm-cols-10) a.tinvwl_add_to_wishlist_button::after {
		content: "";
		position: absolute;
		left: 50%;
		top: 50%;
		width: 44px;
		height: 44px;
		transform: translate(-50%, -50%);
	}

	/* NOT DONE: the length buttons (ul.bricks-variation-swatches li) measure
	   50x42 - two pixels under the 44px guideline. Expanding them upward runs
	   straight into the "find my size" button, which sits directly above and
	   already carries its own expander from this file; elementFromPoint at the
	   boundary returns .abx-fit-open, not the length. Two pixels on a target
	   that is already 50px wide is not worth making two controls fight over the
	   same row. Left as measured. */
}

/*
 * Task 34 - Footer wordmark: vector mask instead of a 1024px raster.
 *
 * The footer mark is a masked block. Its mask was
 * cropped-Abayas-Boutique-logo-2-1024x229-1.webp - 1024px wide, stretched to
 * 1789 CSS px, which on a 2x screen is 3578 device pixels: a 3.49x upscale,
 * and the reason the edges looked feathered. No larger copy of the wordmark
 * exists in the media library; the file in use is itself a WordPress
 * derivative that was re-uploaded as though it were an original.
 *
 * A mask only carries alpha, so the shape could be recovered rather than
 * redrawn: the alpha channel was traced with marching squares at sub-pixel
 * interpolation - 24 closed contours, simplified to 1081 points. Rasterised
 * back to 1024x229 and diffed against the original, ink area agrees to within
 * 0.22%, and the only disagreement is a sub-pixel band along the edges.
 * Same letterforms, now with hard edges at any size.
 *
 * The path sits in a custom property so the prefixed and unprefixed masks
 * share one copy of it rather than embedding it twice.
 *
 * Served as a FILE, not inline: these pages already carry 619KB of duplicated
 * inline CSS and JS on every view, and this should not add to it.
 *
 * Still a trace of a 1024px source, not the original artwork. If the real
 * vector ever turns up, swap the data URI below and change nothing else.
 *
 * Reversible: deactivate snippet. The original mask rule is left untouched.
 */

html body footer#brx-footer::after{
  --abx-wordmark:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201024%20229%22%20preserveAspectRatio%3D%22xMidYMid%20meet%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20fill%3D%22%23000%22%20d%3D%22M596.7%200L607%20-0.3L614%200.7L622%202.9L626%204.6L631%207.6L634%209.8L638.9%2015L642.3%2020L644.3%2025L645.5%2030L645.7%2033L645.5%2039L644.4%2044L642.4%2049L640.1%2053L635.5%2058L631%2061.3L625%2064.1L618%2065.4L611%2065.3L603%2063.3L597%2060.1L592.6%2056L589.9%2052L588.6%2049L588%2046L588%2043L588.8%2040L591%2037.2L596%2034.9L598%2034.8L602%2035.9L605%2038.4L606.3%2041L607.5%2050L608.9%2054L611.2%2057L615%2059.5L618%2060.3L620%2060.3L624%2059.1L627%2057.4L631.2%2053L634.3%2047L635.5%2041L635.2%2035L634.3%2031L632.5%2027L628.8%2022L625%2018.9L618%2015.6L614%2014.6L604%2013.7L594%2014.6L588%2015.8L574%2019.8L563%2023.8L544%2031.7L485%2059L483.9%2060L488.4%2071L491.4%2083L493.1%2098L493.3%20114L493.8%20115L501%20112.5L505%20111.8L511%20111.8L519%20113.6L524%20116L528%20118.7L534.2%20125L538.4%20132L540.4%20137L541.4%20141L542.1%20147L542.1%20151L541.3%20157L540.3%20161L538.3%20166L535.4%20171L533.2%20174L529%20178.2L525%20181.1L521%20183.2L514%20185.4L503%20185.5L498%20184.3L489%20179.7L485%20178.6L483%20178.8L480.4%20180L478%20181.7L474.9%20185L474.3%20183L474.1%2095L473.3%2084L472.2%2076L470%2066.4L469%2065.6L459%2069.2L452%2071.2L437%2074.3L432%2074.6L424%2074.3L416%2072.3L412%2070.4L408%2067.6L404.8%2064L402.6%2060L401.6%2056L401.7%2050L402.9%2046L404.7%2043L409%2038.5L415%2034.8L422%2032.6L428%2031.8L435%2031.7L449%2033.6L459%2036.8L465%2039.9L469%2042.6L473%2046.1L474%2046.4L522%2023.8L550%2011.9L564%206.9L579%202.7L589%200.8L596.7%200ZM423.8%2038L430%2037.2L438%2037.5L448%2039.8L452%2041.6L457%2044.9L461.3%2049L462.3%2051L451%2055.4L437%2059L428%2060L425%2060L420%2059.1L416%2057.3L412.8%2054L411.7%2051L411.8%2047L413.5%2044L416%2041.5L419%2039.6L423.8%2038ZM87.1%2071L90%2070.6L93%2070.7L95.5%2072L97.4%2075L98.3%2082L98.3%20114L98.7%20115L105%20112.8L111%20111.7L116%20111.8L120%20112.5L127%20115L133%20118.7L138.3%20124L142.4%20130L145.3%20137L146.3%20141L147.2%20149L146.3%20157L143.3%20166L140.4%20171L135%20177.2L128%20182.2L123%20184.4L120%20185.3L116%20185.7L107%20185.4L103%20184.3L94%20179.8L90%20178.6L88%20178.8L84%20180.7L80%20184.7L79.2%20184L79.1%2094L78.2%2089L76.5%2086L73%2083.3L69%2082L68.5%2081L68.5%2078L69%2076.8L77%2073.8L87.1%2071ZM770.6%2082L775%2081.6L778%2082.5L781%2084.5L783.5%2088L784.2%2090L784.5%2093L783.5%2097L781.4%20100L778%20102.4L775%20103.2L773%20103.2L769%20102.3L765.6%20100L762.8%2095L762.6%2091L764%2087.2L767%2083.7L770.6%2082ZM725.7%2098L728%2097.5L731%2097.9L733.7%20100L735.3%20104L735.5%20111L736%20111.6L750%20111.7L750.8%20113L750.8%20116L750%20116.6L737%20116.6L735.8%20117L735.5%20118L735.9%20173L737%20175.6L739%20177.3L743%20177L748%20173.8L749.9%20175L750.5%20176L748%20179.2L744%20182.4L740%20184.5L735%20185.7L727%20185.4L724%20184.3L720%20181.3L718%20178L716.8%20174L716.5%20171L716.3%20117L715%20116.6L707%20116.6L705.7%20116L705.8%20112L706.5%20111L717%20102.7L722%2099.7L725.7%2098ZM25.5%20112L35%20112L42%20113.6L47%20115.7L51%20118.4L56%20123.5L59.4%20130L60.4%20133L61.4%20141L61.5%20180L62.7%20196L64.9%20208L66.5%20213L68.9%20218L72%20221.5L75%20223.2L77%20223.6L81%20223.3L84%20220.9L86.4%20217L87.5%20213L88.1%20207L89.8%20203L92%20200.8L94%20199.6L99%20199.3L101%20199.7L103%20200.8L105.2%20203L106.6%20206L106.9%20210L105.3%20215L103.2%20218L97%20223.2L90%20226.4L81%20228.3L75%20228.2L70%20227.3L65%20225.4L61%20223.2L55.1%20218L52%20214L48.6%20208L45.8%20201L44.7%20197L43.5%20191L42.4%20180L42%20179.7L35%20183.3L29%20185.3L19%20185.7L15%20185.3L9%20183.2L5.5%20181L1.7%20177L-0.4%20172L-0.3%20165L1.5%20160L5.3%20155L11%20150.7L17%20147.8L27%20144.5L40%20141.3L42.3%20140L42.2%20133L41.3%20126L39.4%20121L36%20117.7L33%20117.2L30%20117.7L28%20119.3L26.5%20122L25.2%20130L24%20132L21%20134.5L18%20135.5L14%20135.3L10%20133.2L7.6%20130L6.8%20127L6.9%20125L7.7%20122L10%20118.8L14%20115.7L18%20113.7L25.5%20112ZM176.6%20112L182%20111.9L187%20112.5L194%20114.6L198%20116.7L202%20119.7L205.1%20123L207.1%20126L209.4%20131L210.5%20136L211.1%20142L211.1%20165L211.8%20172L212.6%20175L215%20178.8L217%20180.3L221%20181.2L221.6%20182L221.6%20185L221%20185.7L193%20185.8L191.8%20185L191.8%20181L191%20179.8L185%20183.2L179%20185.2L174%20185.8L166%20185.4L161%20184.1L157%20182.2L153.1%20179L150.9%20176L149.5%20172L149.7%20164L151.8%20159L156%20154.1L161%20150.6L167%20147.7L176%20144.6L190%20141.2L191.8%20140L191.4%20129L190.3%20124L188.3%20120L187%20118.7L185%20117.6L181%20117.5L178%20119L175.8%20123L175.4%20128L174.3%20131L171%20134.3L168%20135.5L163%20135.2L160%20133.5L157.8%20131L156.5%20127L156.7%20124L158%20121L159.6%20119L163.4%20116L166%20114.6L171%20112.8L176.6%20112ZM224.2%20112L263.5%20112L263.9%20113L263.8%20116L259.1%20118L257.7%20120L257.7%20126L259.8%20134L269%20157.7L270.2%20156L278.3%20134L280.6%20125L280.7%20121L279.9%20119L279%20117.8L274.3%20116L274.6%20112L298%20111.7L299.1%20113L299%20116L294%20117.6L292%20118.9L290%20121.1L286.9%20126L281.8%20138L260.3%20196L252.4%20213L249.2%20218L244.7%20223L240%20226.3L236%20227.4L233%20227.3L230%20226.2L226.7%20223L225.7%20221L225.3%20218L225.6%20215L226.6%20213L230%20209.5L232%20208.6L238%20208.1L241%20207.3L245%20205.3L248%20203.1L251.1%20200L255.2%20194L258.2%20188L258.8%20186L251.2%20165L237.4%20129L234.3%20123L231%20119L229%20117.6L224%20116.2L223.8%20113L224.2%20112ZM328.7%20112L335%20111.9L340%20112.6L347%20115L352%20117.9L355%20120.4L359.4%20126L362.2%20133L363.1%20138L363.4%20165L363.9%20171L365%20175L367.4%20179L369%20180.1L373%20181.2L373.9%20182L373.9%20185L373%20185.8L345%20185.8L344.3%20185L344%20179.8L337%20183.3L331%20185.3L327%20185.7L319%20185.5L314%20184.4L311%20183.2L307.5%20181L303.7%20177L301.7%20172L301.7%20165L302.6%20162L304.7%20158L309%20153.5L313%20150.8L319%20147.8L328%20144.7L342%20141.2L344.2%20140L343.4%20127L342.3%20123L340%20119.4L337%20117.6L334%20117.4L332%20117.9L329.5%20120L328.5%20122L327.1%20130L325%20132.8L323%20134.5L319%20135.6L315%20135L312%20133.3L309.6%20130L308.7%20127L308.8%20125L309.7%20122L312%20118.8L315.6%20116L318%20114.7L324%20112.7L328.7%20112ZM401.5%20112L410%20111.7L417%20112.6L428%20115.7L432.4%20118L432.5%20136L432%20137.4L430%20136.9L428%20131L424%20124.4L419%20119.7L415%20117.8L409%20116.6L406%20116.6L402%20117.8L398.6%20121L397.6%20123L397.5%20126L398.7%20130L400.8%20133L404%20136.1L424%20149.7L429.8%20155L433.5%20160L434.3%20162L435.4%20167L435.1%20171L433.3%20175L430.8%20178L427%20181.2L423%20183.3L417%20185.4L413%20186.3L406%20187.2L394%20186.4L389%20185.3L379%20182.1L377%20181L376.7%20180L376.7%20161L377%20159.9L378%20159.7L379%20160.2L380.7%20166L384.5%20173L388.1%20177L393%20180.3L399%20182.1L406%20182.2L412%20180.3L415%20177.6L416.3%20175L416.2%20171L415%20168.4L412.4%20165L407%20160.7L393%20151.3L386%20145.5L381.6%20140L379.7%20136L378.9%20133L378.7%20128L379.5%20125L383%20119.5L385%20117.7L390%20114.8L396%20112.8L401.5%20112ZM575%20112L582%20111.7L588%20112.9L593%20114.8L600%20119.4L605.3%20125L610.1%20133L612.4%20140L613.1%20145L613.2%20152L612.3%20158L610.4%20164L607.3%20170L602.4%20176L596%20181.2L590%20184.1L585%20185.4L577%20185.8L572%20185.1L566%20183L560%20179.4L554.3%20174L550.6%20169L547.8%20163L545.7%20155L545.5%20144L546.6%20138L548.9%20132L551.7%20127L556.7%20121L562%20116.8L568%20113.7L575%20112ZM615.7%20112L655.5%20112L656%20113L655.9%20116L655%20116.6L651%20117.7L649%20119.4L647.7%20121L645.8%20127L645.4%20133L645.4%20163L646%20168L648.5%20174L651%20176.5L653%20177.6L655%20178.3L658%20178.5L663%20177.4L667%20175.3L672.5%20171L673.4%20170L673.5%20169L673.5%20134L672.4%20125L671.4%20122L669%20118.6L667%20117.4L662.8%20116L663%20112.1L664%20111.7L703%20111.9L703.3%20116L698%20117.8L695.7%20120L693.7%20124L692.9%20128L692.5%20133L692.5%20163L693.6%20168L695.5%20171L699%20173.5L703.3%20175L703.3%20179L701%20180.3L693%20183.2L686%20185.2L682%20185.8L678%20185.5L676%20184.3L674.9%20183L673.6%20179L673%20178.2L669%20181.1L665%20183.3L659%20185.3L656%20185.7L646%20185.3L640%20183.2L636.4%20181L632.9%20178L629.9%20174L627.6%20169L626.8%20166L626.4%20162L626.2%20132L625.2%20125L624.2%20122L622%20118.8L620%20117.5L616%20116.6L615.6%20116L615.7%20112ZM774.5%20112L777%20111.9L779%20112.5L781.1%20114L782.3%20116L783.3%20124L783.3%20165L783.7%20171L784.8%20175L786.5%20178L789%20180.2L793%20181.2L793.8%20182L793.8%20185L793%20185.8L754%20185.8L753.4%20185L753.4%20182L754%20181.2L758%20180.3L760%20178.6L762.2%20175L763.4%20171L764.1%20161L764.1%20137L763.4%20131L762.4%20129L760%20125.9L758%20124.6L753.7%20123L753.5%20119L755%20117.7L763%20114.8L770%20112.7L774.5%20112ZM825.7%20112L834%20112L844%20114.7L851%20112.6L857%20111.9L860%20112.5L862.5%20115L863.5%20118L863.8%20123L863.8%20207L864.6%20213L865.7%20217L867.6%20220L869%20221.1L874.4%20223L874.5%20226L874%20227.2L835%20227.3L834.4%20227L834.3%20223L839%20221.4L840.7%20220L842.3%20218L844%20212.9L844.8%20203L844.7%20183L844%20182.5L840%20184.4L836%20185.4L832%20185.8L824%20185.4L817%20183.3L813%20181.2L806.6%20176L802.6%20171L798.7%20164L796.6%20157L796%20152L796%20146L796.8%20140L798.7%20134L800.6%20130L804%20124.6L811%20117.8L816%20114.8L819%20113.6L825.7%20112ZM870.8%20112L910.6%20112L911.1%20113L911%20116L906%20117.7L904%20119.4L902.8%20121L900.7%20128L900.4%20163L900.8%20167L902.4%20172L903.6%20174L906%20176.4L908%20177.5L910%20178.3L913%20178.5L918%20177.4L922%20175.4L927.5%20171L928.4%20170L928.5%20169L928.5%20134L928.1%20128L927.2%20124L925.3%20120L923%20117.8L917.9%20116L918%20112.4L919%20111.7L958%20111.9L958.3%20116L958%20116.5L954%20117.4L952%20118.6L950%20121.2L948.6%20125L947.5%20133L947.5%20163L948.6%20168L950.6%20171L954%20173.5L958.4%20175L958.3%20179L956%20180.3L948%20183.2L941%20185.2L937%20185.8L933%20185.5L931%20184.3L929.9%20183L928.7%20179L928%20178.2L924%20181.2L920%20183.3L914%20185.3L911%20185.7L901%20185.3L895%20183.2L891.4%20181L888%20178L885.6%20175L883.8%20172L881.8%20166L881.4%20162L881.3%20132L880.3%20125L879.3%20122L877%20118.7L875%20117.5L871%20116.5L870.6%20116L870.8%20112ZM989.3%20112L996%20111.7L1001%20112.6L1005%20113.7L1011%20116.7L1016%20120.8L1019.3%20125L1021.3%20129L1023%20136L1023.3%20139L1022.5%20142L1021%20143.3L1020%20143.6L980%20144L979.9%20150L980.7%20157L981.7%20161L984.7%20168L986.7%20171L990%20174.2L993%20176L996%20177.2L1002%20177.7L1005%20177.4L1008%20176.4L1010%20175.4L1015%20171.1L1019.3%20173L1018%20175.5L1013%20180.4L1008%20183.3L1001%20185.4L992%20185.7L988%20185.3L982%20183.3L975%20179.1L969.7%20174L966.8%20170L963.6%20164L961.5%20157L960.7%20152L960.7%20146L961.6%20140L963.8%20133L966.8%20127L971.6%20121L977%20116.5L982%20113.8L989.3%20112ZM111%20117L114%20116.6L117%20117.7L119.7%20120L122.1%20123L124.5%20128L126.2%20133L127.3%20138L128.2%20148L127.2%20160L125.2%20168L124%20171L121.2%20176L118.5%20179L116%20180.5L113%20181.2L110%20180.4L108%20179.3L103.7%20174L101.7%20170L99.8%20164L98.8%20159L98.3%20153L98.6%20140L100.6%20131L102.5%20126L105.6%20121L109%20117.8L111%20117ZM505.7%20117L509%20116.5L511%20117L514.1%20119L517.3%20123L520.2%20129L521.4%20133L522.3%20137L523.3%20146L523.3%20152L522.4%20160L521.3%20165L519.2%20171L516.4%20176L514.7%20178L512%20180.1L509%20181.2L505%20180.4L503%20179.1L498.9%20174L496.6%20169L494.8%20163L493.5%20154L493.8%20140L494.7%20135L496.8%20128L500.6%20121L503%20118.6L505.7%20117ZM577.3%20117L580%20116.6L583%20117.6L586%20120L588.3%20123L590.4%20127L592.2%20132L593.2%20136L594.3%20145L594.3%20153L593.3%20161L590.3%20171L588.2%20175L585.7%20178L583%20180.2L580%20181.2L578%20181.1L574%20179L570%20174L566.6%20166L564.9%20158L564.5%20153L564.7%20141L566.8%20131L568.7%20126L571.8%20121L574%20118.8L577.3%20117ZM827.6%20117L831%20116.7L834%20117.9L837.4%20121L839.4%20124L841.3%20128L843.2%20134L844.4%20140L844.8%20146L844.2%20159L842.3%20167L840.4%20172L837.2%20177L835.3%20179L833%20180.4L830%20181.2L827%20180.5L825%20179.4L821.7%20176L819.9%20173L816.6%20164L815.6%20159L814.8%20150L815.7%20138L817.6%20130L819.8%20125L822%20121.5L825%20118.4L827.6%20117ZM990.9%20117L994%20116.7L997%20117.6L999%20119.3L1001.2%20122L1003.3%20127L1004.2%20131L1004.6%20138L1004%20138.9L981%20138.9L980.4%20138L981.7%20130L984.5%20123L987%20119.5L989%20117.8L990.9%20117ZM39.4%20147L42%20146.4L42.3%20147L42.2%20173L41%20174.4L38%20176.4L33%20178.2L28%20178.1L23%20176.3L20.5%20174L19%20171L18.6%20166L20%20162.1L23.8%20157L28.6%20153L34%20149.6L39.4%20147ZM189.4%20147L191%20146.5L191.8%20147L191.8%20173L188%20176.2L183%20178.1L178%20178.2L173%20176.5L170.1%20174L168.6%20171L168.3%20166L169.7%20162L170.8%20160L176%20154.7L183.1%20150L189.4%20147ZM341.7%20147L343%20146.5L344.3%20147L344.2%20173L340%20176.4L335%20178.2L331%20178.3L325%20176.4L321.7%20173L320.6%20170L320.7%20165L322.6%20161L327%20155.9L331%20152.7L336%20149.6L341.7%20147Z%22%2F%3E%3C%2Fsvg%3E");
  -webkit-mask-image:var(--abx-wordmark);
  mask-image:var(--abx-wordmark);
  -webkit-mask-size:100%;
  mask-size:100%;
  -webkit-mask-repeat:no-repeat;
  mask-repeat:no-repeat;
  -webkit-mask-position:50% 0%;
  mask-position:50% 0%;
}
/*
 * Abayas Boutique — quick add trigger: bar, not circle
 *
 * WHAT WENT WRONG: quick add v2 (snippet 39086) shipped its own trigger as a
 * 44px white circle with a "+" in it, pinned bottom-right of the image. The
 * card design already had a trigger — a full-width white bar reading QUICK ADD
 * across the bottom of the image (.abx-qa-btn). I introduced a second visual
 * language on the same component instead of matching the one that was there.
 *
 * WHAT THIS DOES: reshapes the v2 trigger into that same bar. Purely visual —
 * the button, its behaviour and the size picker are untouched, so nothing
 * about how quick add works changes.
 *
 * THE LABEL: the button's text node is "+" and lives in the JS. Rather than
 * edit the working script to change one string, the glyph is collapsed and the
 * word is drawn with ::after. The button already carries aria-label="Quick
 * add", so what a screen reader announces is unchanged and correct.
 *
 * ROLLBACK: deactivate. The circle comes back.
 */

/* The bar sits flush across the bottom of the image, not floating in a corner. */
html body .ab-safe-product-card .abg-qa-btn {
	position: absolute !important;
	left: 0 !important;
	right: 0 !important;
	bottom: 0 !important;
	width: 100% !important;
	height: auto !important;
	min-height: 0 !important;
	padding: 14px 10px !important;
	border: 0 !important;
	border-radius: 0 !important;
	background: rgba(255, 255, 255, .94) !important;
	color: #141310 !important;
	display: block !important;
	text-align: center !important;
	transform: none !important;

	/* Collapse the "+" glyph without removing it from the accessibility tree. */
	font-size: 0 !important;
	line-height: 0 !important;
}

html body .ab-safe-product-card .abg-qa-btn::after {
	content: "Quick add";
	display: block;
	font-family: Montserrat, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
	font-size: 11px;
	font-weight: 600;
	letter-spacing: .16em;
	line-height: 1;
	text-transform: uppercase;
}

html body .ab-safe-product-card .abg-qa-btn:hover {
	background: #fff !important;
}

/* Keep the existing reveal: hidden until the card is hovered or focused. */
html body .ab-safe-product-card .abg-qa-btn {
	opacity: 0;
	transition: opacity 180ms ease, background 180ms ease;
}

html body .ab-safe-product-card:hover .abg-qa-btn,
html body .ab-safe-product-card:focus-within .abg-qa-btn,
html body .ab-safe-product-card .abg-qa-btn:focus-visible {
	opacity: 1;
}

/*
 * Touch devices have no hover, so the bar would never appear. Show it always.
 * A full-width bar is also a far easier tap target than a 44px circle sitting
 * in the corner next to the wishlist heart.
 */
@media (hover: none) {
	html body .ab-safe-product-card .abg-qa-btn {
		opacity: 1;
	}
}

@media (prefers-reduced-motion: reduce) {
	html body .ab-safe-product-card .abg-qa-btn {
		transition: none;
	}
}


/*
 * ONE OWNER PER COMPONENT.
 *
 * Two quick-add systems were rendering on the same card at the same time:
 * the legacy .abx-qa block (a lowercase "quick add" label plus an always-
 * expanded size row) and the v2 trigger above. On hover they drew on top of
 * each other, which is what you saw.
 *
 * The legacy block is hidden rather than deleted. Reasons for keeping v2 as
 * the survivor: it mounts on all 36 cards where the legacy one reached only
 * 24, and it reads live stock per size instead of pre-selecting one.
 *
 * Hidden with CSS, not removed, so this is reversible in one toggle and no
 * working script is edited to make it happen.
 */
/*
 * Repeated class selectors, not decoration: the legacy block is revealed by
 * a :hover rule that already carries !important, and a pseudo-class counts
 * the same as a class for specificity. Matching it once was not enough to
 * win, so the class is repeated to outrank it without resorting to editing
 * the rule that puts it there.
 */
html body .ab-safe-product-card .abx-qa.abx-qa.abx-qa,
html body .ab-safe-product-card:hover .abx-qa.abx-qa.abx-qa,
html body .ab-safe-product-card:focus-within .abx-qa.abx-qa.abx-qa {
	display: none !important;
	visibility: hidden !important;
	opacity: 0 !important;
	pointer-events: none !important;
}

/* ---------------------------------------------------------------------------
 * TEMPORARY — quick add held off, 24 Aug 2026.
 *
 * WHY: the quick-add scripts were flagging multi-length abayas as one-size and
 * pre-picking the SHORTEST length. 10 of 10 products checked were 4-5 lengths
 * (52/54/56/58/60) and every one had the shortest pre-selected, so a tap on a
 * phone added the wrong size silently.
 *
 * Snippets 38284 (ABX - Homepage Quick Add to Basket) and 38632 (quick add for
 * one-size items) are now DEACTIVATED, which removes the add mechanism.
 * Snippet 38637 (quick add on touch devices) is left active because it styles
 * other parts of the product card, but its @media (hover: none) rules would
 * still reveal the now-inert trigger on phones. This rule keeps it hidden.
 *
 * REMOVE THIS SNIPPET when the size-picker quick add ships.
 * ------------------------------------------------------------------------- */

html body .ab-safe-quick-trigger {
	display: none !important;
}

/* ---------------------------------------------------------------------------
 * Abayas Boutique — homepage hero text entrance
 * Scope: the hero copy block (#brxe-rrxdit) only.
 *
 * Continues the wordmark's entrance so the hero resolves as one movement
 * rather than one animated element sitting above three static ones:
 *
 *   wordmark ............ 150ms  (existing, in the hero wordmark snippet)
 *   "summer occasions" .. 350ms
 *   "wedding season." ... 490ms
 *   "shop the collection" 630ms
 *
 * Same 18-22px rise, same cubic-bezier(.16,.84,.44,1) soft landing, same
 * ~900ms duration. The whole sequence settles inside 1.6s.
 *
 * fill-mode is BACKWARDS, not both, on purpose. Backwards holds the opening
 * keyframe only during the delay; once the animation ends the elements revert
 * to their own styles. So if the animation never runs — CSS arrives late, an
 * odd browser, print — the copy is simply visible. Nothing can leave the hero
 * text stuck at opacity 0.
 *
 * The children are unclassed divs inside a Bricks rich-text field, so they are
 * addressed by position. If the hero copy is re-ordered in Bricks the stagger
 * order follows the new order, which is the behaviour you want anyway.
 *
 * Rollback: deactivate this snippet. CSS only, no layout change — measured
 * heights are identical with and without it (54 / 14.5 / 26.6px).
 * ------------------------------------------------------------------------- */

@keyframes abg-rise-in {
	from {
		opacity: 0;
		transform: translateY(18px);
	}
}

html body #brxe-rrxdit > div > *:nth-child(1) {
	animation: abg-rise-in 900ms cubic-bezier(.16, .84, .44, 1) 350ms backwards;
}

html body #brxe-rrxdit > div > *:nth-child(2) {
	animation: abg-rise-in 900ms cubic-bezier(.16, .84, .44, 1) 490ms backwards;
}

html body #brxe-rrxdit > div > *:nth-child(3) {
	animation: abg-rise-in 900ms cubic-bezier(.16, .84, .44, 1) 630ms backwards;
}

@media (prefers-reduced-motion: reduce) {

	html body #brxe-rrxdit > div > * {
		animation: none !important;
	}

}

/* ---------------------------------------------------------------------------
 * Abayas Boutique — homepage hero wordmark
 * Scope: the homepage hero section (#brxe-igxabf) only.
 *
 * WHAT WAS WRONG
 * The wordmark is a ::before on the hero section, painted white by
 * filter: brightness(0) invert(1). It was positioned at top:-13px / left:-8px
 * with 163px of slack on the right — so it hung off the top and left edges
 * (clipped by the hero's overflow:hidden) and sat lopsided.
 *
 * The bigger cause: the hero used background-size:100%, which fits the photo
 * to the width and letterboxes it vertically. Measured at a 1004px viewport,
 * the photo was 484px tall inside an 865px hero, leaving a 190px WHITE band
 * across the top — and all 197.8px of the white wordmark sat inside that
 * band. White on white: the wordmark was completely invisible, and what
 * looked like an empty gap above the hero was the logo.
 * At 1414px roughly the top 40% of it was still lost in the white band,
 * which is why the visible remnant looked jammed into the corner.
 *
 * WHAT THIS DOES
 *  1. background-size: cover — the photo now fills the hero, so there is no
 *     white band and the whole wordmark lands on the image. This does crop
 *     the photo horizontally (about 190px each side at 1414px); the model
 *     stays centred and in frame.
 *  2. Centres the wordmark with left:0 / right:0 / margin-inline:auto instead
 *     of the negative left offset, and caps it at min(78%, 1200px) so it
 *     cannot grow without limit on wide displays.
 *  3. height:auto + aspect-ratio 1024/229 (the logo file's own ratio) so the
 *     box always matches the image exactly instead of being derived from a
 *     fixed top/bottom pair that stopped matching at other viewport sizes.
 *
 * Measured after, at 1414px / 865px hero: wordmark 1102.9 x 246.6, top 25.9,
 * 155.5px clear on each side, 32.7px above the "summer occasions" heading,
 * nothing clipped. At 1004px: 783 x 175, 110px each side, fully on the photo.
 *
 * The doubled #id and !important are required — Bricks emits its own
 * !important rule for this pseudo-element in an inline <style>, and a plain
 * single-id override loses to it.
 *
 * Note on breakpoints: Bricks already sets background-size:cover at 991px,
 * 767px and 478px with its own artwork per breakpoint, so the cover override
 * only actually changes the desktop base rule, which was the letterboxed one.
 *
 * Rollback: deactivate this snippet. CSS only.
 * ------------------------------------------------------------------------- */

html body #brxe-igxabf#brxe-igxabf {
	background-size: cover !important;
}

html body #brxe-igxabf#brxe-igxabf::before {
	left: 0 !important;
	right: 0 !important;
	margin-left: auto !important;
	margin-right: auto !important;
	width: min(78%, 1200px) !important;
	top: 3% !important;
	bottom: auto !important;
	height: auto !important;
	aspect-ratio: 1024 / 229 !important;
	animation: abg-wordmark-in 1100ms cubic-bezier(.16, .84, .44, 1) 150ms both;
}

/* ---------------------------------------------------------------------------
 * Entrance animation.
 *
 * Centring is done with left:0 / right:0 / margin-inline:auto rather than
 * translateX(-50%) on purpose: an !important transform would beat the
 * animation in the cascade (author !important outranks animations), so the
 * wordmark would never move. Keeping transform free lets the keyframes own it.
 *
 * The hero had no animation of any kind before this — animation-name computed
 * to "none" on both the section and the pseudo-element, and no @keyframes in
 * the page referenced either.
 * ------------------------------------------------------------------------- */

@keyframes abg-wordmark-in {
	from {
		opacity: 0;
		transform: translateY(22px) scale(.985);
	}
	to {
		opacity: 1;
		transform: translateY(0) scale(1);
	}
}

@media (prefers-reduced-motion: reduce) {

	html body #brxe-igxabf#brxe-igxabf::before {
		animation: none !important;
	}

}

/* ---------------------------------------------------------------------------
 * Abayas Boutique — Country / Postcode / County row (audit ref FLD-01)
 * Scope: body.checkout-wc only.
 *
 * Problem measured on the live checkout at a 1000px viewport:
 *   The three fields share one row at 33% each -> the country <select> gets
 *   181.7px, of which 146.1px is usable after padding. "United Kingdom (UK)"
 *   renders at 160.3px, so the value ran under the dropdown chevron. The
 *   longest option in the list ("United States (US) Minor Outlying Islands")
 *   is 312.9px — no 33% column can ever fit it.
 *   Real consequence, seen in a live session: the customer read the clipped
 *   "Country/Region" box, then typed "UK" into the adjacent "County" field.
 *
 * Fix: Country/Region takes the full row; Postcode and County share the next
 * row at 50% each. Country then has 509.4px of usable width (fits every
 * option in the list), and Postcode/County each go from 181.7px to 272.5px.
 * This also matches the rest of the form, where Full name, Street address,
 * Town/City and Phone are already full width.
 *
 * Selectors use CheckoutWC's own semantic classes (.cfw-country-input,
 * .validate-postcode, .cfw-state-input) rather than the .col-lg-4 grid
 * classes, which all three fields share. :has() gates the 50% rule to rows
 * that actually contain a country field, so no other form row is touched.
 * Applies to both the shipping and billing address rows.
 *
 * Rollback: deactivate this snippet. It is CSS only — nothing to migrate.
 * ------------------------------------------------------------------------- */

body.checkout-wc .cfw-input-wrap-row:has(> .cfw-country-input) {
	flex-wrap: wrap;
}

body.checkout-wc .cfw-input-wrap-row > .cfw-country-input {
	flex: 0 0 100%;
	max-width: 100%;
}

body.checkout-wc .cfw-input-wrap-row:has(> .cfw-country-input) > .validate-postcode,
body.checkout-wc .cfw-input-wrap-row:has(> .cfw-country-input) > .cfw-state-input {
	flex: 0 0 50%;
	max-width: 50%;
}

/* ---------------------------------------------------------------------------
 * Abayas Boutique — checkout tap targets (audit ref MOB-01)
 * Scope: body.checkout-wc only. Nothing outside /checkout/ can match.
 *
 * Measured live before this change:
 *   a.cfw-small (Information/Shipping/Payment/Review breadcrumb) .... 12.0px
 *   a.cfw-small.cfw-add-field ("Add Address Line 2 (optional)") ..... 15.4px
 *
 * Two techniques, chosen by pointer type, on purpose:
 *
 *  MOUSE (pointer: fine) — 24px hit area via a transparent pseudo-element.
 *    Zero layout shift. Clearances verified on the live page: the Monek
 *    express-checkout iframe ends 12px above the breadcrumb and .cfw-panel
 *    starts 23.5px below it, so a 24px overlay (+/-6px) cannot cover either.
 *    Deliberately NOT 44px here: a 44px overlay would have sat 4px on top of
 *    the bottom edge of the Monek express-checkout button.
 *
 *  TOUCH (pointer: coarse) — full 44px, grown in-flow with padding.
 *    In-flow growth is geometry-independent, so it cannot overlap a
 *    neighbour at any viewport width. Costs 32px of vertical space on the
 *    breadcrumb row; that is the trade for a reliably tappable control.
 *    Desktop is left byte-for-byte as it was.
 *
 * Devices that support neither media feature fall through to today's
 * behaviour — no rule applies, nothing breaks.
 * ------------------------------------------------------------------------- */

@media (pointer: fine) {

	body.checkout-wc ul.etabs .tab > a.cfw-small {
		position: relative;
	}

	body.checkout-wc ul.etabs .tab > a.cfw-small::after {
		content: "";
		position: absolute;
		left: 0;
		right: 0;
		top: 50%;
		transform: translateY(-50%);
		height: 24px;
	}

}

@media (pointer: coarse) {

	body.checkout-wc ul.etabs .tab > a.cfw-small {
		padding-top: 16px;
		padding-bottom: 16px;
	}

	body.checkout-wc a.cfw-small.cfw-add-field {
		min-height: 44px;
	}

}

/* ---------------------------------------------------------------------------
 * 3. Review-step "Change" links (Contact / Ship to / Method / Billing).
 *    Measured 15.0px tall, 46.8px wide, stacked 38px apart at the tightest.
 *    Overlay again (zero layout shift — this is a summary table and growing
 *    the rows would push the Complete Order button down the page).
 *    Height is 32px, NOT 44px, on purpose: at a 38px row pitch a 44px overlay
 *    on one link would cover the link below it and steal its clicks. 32px
 *    clears WCAG 2.5.8 (24px) with 6px of separation between overlays.
 *    Verified on the live review step: hit area 32px, no neighbour theft,
 *    Complete Order button unaffected.
 * ------------------------------------------------------------------------- */

body.checkout-wc .cfw-review-pane-link > a.cfw-tab-link {
	position: relative;
}

body.checkout-wc .cfw-review-pane-link > a.cfw-tab-link::after {
	content: "";
	position: absolute;
	left: 0;
	right: 0;
	top: 50%;
	transform: translateY(-50%);
	height: 32px;
}

/* ---------------------------------------------------------------------------
 * Account page — keep the help widget clear of the wishlist/login controls.
 *
 * CORRECTED 24 Aug 2026: the reposition was written without a breakpoint, so
 * it applied at every width and moved the help pill to the right on desktop
 * too. It is only needed where the mobile menu overlaps those controls, so
 * the whole reposition now sits inside a mobile media query and desktop is
 * left exactly as the theme has it.
 *
 * Scope: body.woocommerce-account, mobile widths only.
 * Rollback: deactivate this snippet.
 * ------------------------------------------------------------------------- */

@media (max-width: 991px) {

	body.woocommerce-account #abfaq {
		left: auto !important;
		right: 18px !important;
		bottom: 64px !important; /* clears the 52px search pill + a 12px gap */
	}

	body.woocommerce-account #tiwlToast {
		bottom: 124px !important;
	}

}

@media (max-width: 600px) {

	body.woocommerce-account #abfaq {
		bottom: 76px !important;
	}

	body.woocommerce-account #tiwlToast {
		bottom: 136px !important;
	}

}

/* =====================================================================
 * Abayas Boutique - active nav link: black + underline, not orange
 * =====================================================================
 * WPCode: CSS Snippet - Auto Insert - Site Wide Header
 * Scope: #brx-header nav lists only. Rollback: toggle this snippet off.
 *
 * PROBLEM
 * Bricks paints the current top-level nav item rgb(242,140,40) from its
 * own generated CSS:
 *   #brxe-vgdhby .brx-nav-nested-items > li > .brx-submenu-toggle.aria-current > *
 * That orange is not in the palette. It reads as an error state, not as
 * "you are here". Reported 2026-08-20.
 *
 * CONVENTION ALREADY IN THE CODEBASE
 * Customiser > Additional CSS already defines an active-nav treatment
 * for one hard-coded URL (a[href*="/collections/abayas/"]):
 *   ink type + 1px underline, muted colour, 7px offset.
 * This snippet promotes that from a per-URL special case to the rule for
 * every active item, so the behaviour is uniform.
 *
 * SECOND RULE - why it is here
 * That Customiser selector is unguarded, so the "abayas" link was
 * underlined on EVERY page, not just abayas pages. With the active state
 * now also being an underline, two items looked active at once. The
 * :not(.aria-current) rule below makes "underline = active" true
 * everywhere and neutralises the stray one. :hover / :focus-visible are
 * excluded so the existing hover underline still works.
 * ------------------------------------------------------------------ */

html #brx-header .brx-nav-nested-items .brx-submenu-toggle.aria-current > *,
html #brx-header .brx-nav-nested-items .brx-submenu-toggle.aria-current > *:hover,
html #brx-header .brx-nav-nested-items li.current-menu-item > a,
html #brx-header .brx-nav-nested-items li.current-menu-ancestor > a {
  color: var(--abx-ink, #141310) !important;
  text-decoration: underline !important;
  text-decoration-color: var(--abx-muted, #6f6a61) !important;
  text-underline-offset: 7px !important;
  text-decoration-thickness: 1px !important;
}

html #brx-header .brx-nav-nested-items > li > .brx-submenu-toggle:not(.aria-current) > *:not(:hover):not(:focus-visible) {
  text-decoration: none !important;
}

/* AUDIT 18 - fixes for bottom-of-page overlap + help panel typography */

/* 1. Stray minicart header. A duplicate .custom-minicart-header is appended
      directly to <body>, so it renders below the footer where the help pill sits.
      The three real copies live inside .widget_shopping_cart_content in the cart
      drawers and are untouched by this direct-child selector. */
body > .custom-minicart-header {
  display: none !important;
}

/* 2. Help panel header uses the logo serif instead of Montserrat.
      !important is needed because abfaq-css is inlined in the footer,
      i.e. later in source order than this Site Wide Header snippet. */
#abfaq .abfaq-title {
  font-family: "Cormorant Garamond", Georgia, serif !important;
  font-weight: 600 !important;
  font-size: 20px !important;
  letter-spacing: 0.02em !important;
  text-transform: lowercase !important;
}
/* =====================================================================
 * Abayas Boutique — footer: black and white, plus touch targets
 * =====================================================================
 * WPCode: CSS Snippet · Auto Insert · Site Wide Header
 *
 * Everything is scoped to #brx-footer, so it cannot reach the storefront.
 * Rollback is the WPCode status toggle.
 *
 * NOTE ON SELECTORS: the footer element carries no class, so a bare
 * `footer { background: ... }` selector is specificity (0,0,1) and loses
 * to almost everything. #brx-footer is (1,0,0) and wins cleanly. Verified
 * — the first attempt with `footer` did nothing at all.
 * ------------------------------------------------------------------ */


/* ---------------------------------------------------------------------
 * 1. Black ground, white type
 *
 * Was a warm greige, rgb(244,239,231). Now #111, which is the same black
 * already used on the subscribe button and the add-to-basket CTA, so the
 * footer reads as part of the same system rather than a new colour.
 * ------------------------------------------------------------------ */
html #brx-footer {
  background: #111 !important;
}

html #brx-footer,
html #brx-footer *:not(svg):not(path):not(button):not([type="submit"]) {
  color: #fff !important;
}

html #brx-footer * {
  border-color: rgba(255, 255, 255, .22) !important;
}

html #brx-footer a {
  color: #fff !important;
  text-decoration-color: rgba(255, 255, 255, .4);
}

html #brx-footer a:hover {
  opacity: .62;
}

html #brx-footer svg {
  fill: currentColor;
  color: #fff !important;
}

html #brx-footer hr,
html #brx-footer .brxe-divider {
  border-color: rgba(255, 255, 255, .18) !important;
  background: rgba(255, 255, 255, .18) !important;
}

/* ---------------------------------------------------------------------
 * 2. Newsletter field
 *
 * The subscribe button gets `background:#111 !important` from an INLINE
 * style — applied by the "Task 55 - transactional button standardisation"
 * snippet. Inline !important cannot be beaten from a stylesheet, so
 * rather than fight it the field goes white and the black button sits
 * against it. Reads as one control: white field, black button.
 * ------------------------------------------------------------------ */
html #brx-footer input[type="email"],
html #brx-footer input[type="text"],
html #brx-footer .form-group input {
  background: #fff !important;
  color: #111 !important;
  border: 1px solid #fff !important;
  padding: 12px 14px !important;
}

html #brx-footer input::placeholder {
  color: rgba(17, 17, 17, .5) !important;
}


/* ---------------------------------------------------------------------
 * 3. Touch targets — WCAG 2.2 AA (2.5.8)
 *
 * Every one of the 21 footer links measured 20–22px tall (line-height
 * 22.1px), under the 24x24 minimum. Flagged in the original audit and in
 * all four Lighthouse reports. Padding grows the hit area without moving
 * the text or changing the layout rhythm much.
 * ------------------------------------------------------------------ */
html #brx-footer li a {
  display: inline-block;
  padding: 4px 0;
  min-height: 24px;
  line-height: 1.55;
}

/* Social row — icon links need the width too, not just the height */
html #brx-footer li a:has(svg),
html #brx-footer li a:empty {
  min-width: 24px;
}


/* ---------------------------------------------------------------------
 * 4. The 'abayas' watermark
 *
 * REGRESSION FIX. The footer paints a giant tonal wordmark through its
 * own ::after:
 *
 *   #brx-footer::after { content:'abayas'; font-size:386px;
 *                        color:rgb(26,24,21); opacity:.06 }
 *
 * Dark ink at 6% on cream reads as a soft watermark. Once the ground
 * went black it was black-on-black and vanished — which is exactly what
 * happened when this snippet first went live.
 *
 * Inverting the ink is the dark-mode equivalent: white at 7% on #111
 * gives the same weight of presence.
 *
 * Worth knowing it is a pseudo-element on the footer itself, so it is
 * invisible to elementFromPoint and to any scan that walks
 * footer.querySelectorAll('*') — the footer element is not among its own
 * descendants. That is why it took a while to find.
 * ------------------------------------------------------------------ */
html #brx-footer::after {
  color: #fff !important;
  opacity: .07 !important;
}


/* ---------------------------------------------------------------------
 * 6. Footer foreground tokens - single source of truth
 *
 * Bug: "Newsletter", "Follow Us" and the newsletter blurb rendered
 * #141310 on #111 - invisible. Verified via computed styles 2026-08-20.
 *
 * Cause: the older light-footer block in Customiser > Additional CSS
 * still paints footer type with var(--abx-ink). The blanket white rule
 * in section 1 repaints most of it, but Additional CSS is injected
 * AFTER this snippet, so it wins any specificity tie. Two of its
 * selectors carry more weight than section 1 and escaped:
 *
 *   #brx-footer .brxe-heading                (1,1,0)
 *   #brx-footer #n-newsletter p / .brxe-text (2,0,1)
 *
 * Fix: re-declare those from tokens, prefixed with html so specificity
 * clears the Additional CSS rules regardless of source order. Defining
 * the foreground as three tokens means a future light/dark flip is
 * three values here, not a hunt across two stylesheets.
 *
 * Rollback: delete this section 6, or toggle the snippet off.
 * ------------------------------------------------------------------ */
html #brx-footer {
  --footer-fg:        #fff;
  --footer-fg-muted:  rgba(255, 255, 255, .68);
  --footer-fg-subtle: rgba(255, 255, 255, .62);
}

html #brx-footer h1,
html #brx-footer h2,
html #brx-footer h3,
html #brx-footer h4,
html #brx-footer h5,
html #brx-footer h6,
html #brx-footer .brxe-heading {
  color: var(--footer-fg) !important;
}

html #brx-footer #n-newsletter p,
html #brx-footer #n-newsletter .brxe-text {
  color: var(--footer-fg-muted) !important;
}

/* The newsletter column's headings are <p class="brxe-heading"> nested
 * inside #n-newsletter, so the muted rule above outranks the heading
 * rule above it. Restore them to full white so every footer column
 * heading matches. */
html #brx-footer #n-newsletter h1,
html #brx-footer #n-newsletter h2,
html #brx-footer #n-newsletter h3,
html #brx-footer #n-newsletter h4,
html #brx-footer #n-newsletter h5,
html #brx-footer #n-newsletter h6,
html #brx-footer #n-newsletter .brxe-heading {
  color: var(--footer-fg) !important;
}

/* Copyright line. */
html #brx-footer #brxe-kjcefb {
  color: var(--footer-fg-subtle) !important;
}

/* =====================================================================
 * Abayas Boutique — account page
 * =====================================================================
 * WPCode: CSS Snippet · Auto Insert · Site Wide Header
 *
 * Presentation only. No markup or JS changes, so rollback is the WPCode
 * status toggle and nothing is left behind. Every rule is scoped to
 * body.woocommerce-account, so none of it can leak onto the storefront.
 * ------------------------------------------------------------------ */


/* ---------------------------------------------------------------------
 * 1. The page was pinned to the left of the viewport
 *
 * WooCommerce puts its `woocommerce` class on #brx-content, and that
 * carries max-width:1120px with margin:0. On a 1680px screen the whole
 * account page therefore sat in the left 1120px with ~560px of dead
 * space to the right — the reason it never looked like the rest of the
 * site.
 *
 * Reproduce the archive page's grid exactly. Measured off a collection
 * page in a 1680px viewport:
 *
 *   .ab-safe-archive   (section)   max-width 1440, padding 42px 34px 68px  -> x=120
 *   .ab-safe-archive-c (container) max-width 1440, padding 0 34px          -> x=154
 *   content                                                                -> x=188
 *
 * Both layers are needed. With only the container fixed, content landed
 * at x=154 — one padding step out of line with every other page.
 * ------------------------------------------------------------------ */
body.woocommerce-account #brx-content.woocommerce {
  max-width: none !important;
}

body.woocommerce-account .ab-safe-account-section {
  max-width: 1440px !important;
  margin-inline: auto !important;
  padding: 42px 34px 68px !important;
}

body.woocommerce-account .ab-safe-account-container {
  max-width: 1440px !important;
  margin-inline: auto !important;
  padding-left: 34px !important;
  padding-right: 34px !important;
}

body.woocommerce-account .brxe-woocommerce-account-page > .woocommerce {
  max-width: none !important;
  gap: 72px;
  align-items: flex-start;
}

/* ---------------------------------------------------------------------
 * 2. Make the greeting the page heading
 *
 * "Salaam, Mahir" already exists as .rf-hi, but it was 16px, centred
 * over the content column and anchored to nothing. It is the warmest
 * thing on the page — promoting it beats inventing a generic "My
 * Account" title, and it reads the way "All Abayas" does on a
 * collection page.
 * ------------------------------------------------------------------ */
body.woocommerce-account .rf-hi {
  font-family: var(--ref-serif);
  font-size: clamp(38px, 4.4vw, 64px);
  line-height: 1.02;
  font-weight: 400;
  letter-spacing: .005em;
  text-align: left;
  margin: 0 0 8px;
}

body.woocommerce-account .rf-hi strong,
body.woocommerce-account .rf-hi b {
  font-weight: 400;
}


/* ---------------------------------------------------------------------
 * 3. Align the two columns
 *
 * The nav had no padding and the content column had 20px, so their
 * first lines never sat on the same baseline.
 * ------------------------------------------------------------------ */
body.woocommerce-account .woocommerce-MyAccount-navigation {
  flex: 0 0 210px !important;
  max-width: 210px !important;
}

body.woocommerce-account .woocommerce-MyAccount-content {
  padding: 0;
}

/* ---------------------------------------------------------------------
 * 4. Sidebar
 *
 * Two ordering problems in the markup: "Sign out" sat above
 * "Communication Preferences", so it read as a group heading with an
 * orphaned item under it. Flex order puts sign out last where it
 * belongs, with a rule above it to separate it from the destinations.
 * ------------------------------------------------------------------ */
body.woocommerce-account .woocommerce-MyAccount-navigation ul {
  display: flex;
  flex-direction: column;
  margin: 0;
  padding: 0;
  list-style: none;
}

body.woocommerce-account .woocommerce-MyAccount-navigation li {
  margin: 0;
}

body.woocommerce-account .rf-group-label {
  font-size: 10.5px;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--ref-muted);
  margin: 28px 0 10px;
  pointer-events: none;
}

body.woocommerce-account .rf-group-label.first {
  margin-top: 0;
}

body.woocommerce-account .woocommerce-MyAccount-navigation-link a {
  display: block;
  padding: 7px 0;
  font-size: 15px;
  line-height: 1.3;
  color: var(--ref-ink);
  text-decoration: none;
  transition: opacity .15s ease;
}

body.woocommerce-account .woocommerce-MyAccount-navigation-link a:hover {
  opacity: .6;
}

body.woocommerce-account .woocommerce-MyAccount-navigation-link.is-active {
  font-weight: 600;
}

/* Communication Preferences belongs with the other profile items */
body.woocommerce-account
  .woocommerce-MyAccount-navigation-link--communication-preferences {
  order: 50;
}

/* Sign out goes last, set apart */
body.woocommerce-account
  .woocommerce-MyAccount-navigation-link--customer-logout {
  order: 99;
  margin-top: 26px;
  padding-top: 20px;
  border-top: 1px solid var(--ref-line);
}

body.woocommerce-account
  .woocommerce-MyAccount-navigation-link--customer-logout a {
  color: var(--ref-muted);
  font-size: 14px;
}

/* ---------------------------------------------------------------------
 * 5. Dashboard panels
 *
 * Order History and Favourites were centred inside their columns while
 * the sidebar was left-aligned, which is what made the page read as
 * three unrelated things. One grid, one alignment.
 * ------------------------------------------------------------------ */
body.woocommerce-account .rf-dash {
  text-align: left;
}

body.woocommerce-account .rf-dash h2,
body.woocommerce-account .rf-dash h3 {
  font-family: var(--ref-sans);
  font-size: 13px;
  letter-spacing: .12em;
  text-transform: uppercase;
  font-weight: 600;
  margin: 0 0 4px;
  text-align: left;
}

body.woocommerce-account .rf-dash p {
  text-align: left;
  color: var(--ref-muted);
  font-size: 14px;
  margin: 0 0 18px;
}

/* Favourites tiles — same 4:5 crop the product cards use elsewhere */
body.woocommerce-account .rf-dash [class*="fav"] img,
body.woocommerce-account .rf-dash .product img {
  width: 100%;
  height: auto;
  aspect-ratio: 4 / 5;
  object-fit: cover;
  display: block;
}


/* ---------------------------------------------------------------------
 * 6. Small screens
 * ------------------------------------------------------------------ */
@media (max-width: 860px) {
  body.woocommerce-account .ab-safe-account-section {
    padding: 28px 20px 48px !important;
  }

  body.woocommerce-account .ab-safe-account-container {
    padding-left: 0 !important;
    padding-right: 0 !important;
  }

  body.woocommerce-account .brxe-woocommerce-account-page > .woocommerce {
    flex-direction: column;
    gap: 32px;
  }

  body.woocommerce-account .woocommerce-MyAccount-navigation {
    flex: 1 1 auto !important;
    max-width: none !important;
    width: 100%;
  }

  body.woocommerce-account .rf-hi {
    font-size: 34px;
  }
}

/* =====================================================================
 * Abayas Boutique — drawer tweaks + size guide drawer
 * =====================================================================
 * WPCode: CSS Snippet · Auto Insert · Site Wide Header
 *
 * Block 1 — close X to the top-right corner (filter drawer)
 * Block 2 — close X to the top-right corner (Bricks mini-cart)
 * Block 3 — turns the existing size guide modal into a side drawer
 *
 * Blocks are independent. No JavaScript — every rule is an override on
 * markup that already exists, so removing this snippet returns all three
 * components to exactly their previous behaviour.
 * Rollback: set the snippet Inactive.
 * ------------------------------------------------------------------ */


/* ---------------------------------------------------------------------
 * 1. Filter drawer — X to the top-right
 *
 * The wrapper is a shrink-to-fit block, so the X stacks under the word
 * "filter" on the left. Taking the button out of flow and pinning it to
 * the panel's top-right corner leaves "filter" sitting alone on the left.
 *
 * .brx-offcanvas-inner is position:fixed, so it is already the
 * containing block — no extra positioning context needed.
 *
 * The theme applies margin-right:-14px to this toggle, which drags it
 * back past the panel edge once absolutely positioned. Verified against
 * the live drawer — without !important the X ends up 1px from the edge
 * instead of 15px.
 * ------------------------------------------------------------------ */
.brx-offcanvas-inner #close-toggle {
  position: absolute;
  top: 15px;
  right: 15px;
  z-index: 2;
  margin: 0 !important;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
}

/* Stop the now-empty wrapper collapsing and squashing "filter" */
.brx-offcanvas-inner > div:first-child:has(> #close-toggle) {
  width: 100%;
  padding-right: 40px;
}


/* ---------------------------------------------------------------------
 * 2. Bricks mini-cart drawer — X to the top-right
 *
 * This is the "In your bag / view bag" drawer with the text-link remove
 * — the one that shows on mobile. Not the CheckoutWC drawer ("your bag"),
 * which already has its X in the corner.
 *
 * The theme pins this button with `inset: 20px 20px 782px 0px`. Both
 * left and right are set, and in LTR `left` wins — which is exactly why
 * the X sits on the left today. `left: auto` is the line that actually
 * does the work; adding `right` alone changes nothing. Verified live.
 * ------------------------------------------------------------------ */
.cart-detail.off-canvas {
  position: fixed;
}

.cart-detail.off-canvas .bricks-mini-cart-close {
  position: absolute !important;
  top: 18px !important;
  right: 18px !important;
  left: auto !important;
  bottom: auto !important;
  z-index: 3;
  margin: 0 !important;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
}

/* Keep the title clear of the button */
.cart-detail.off-canvas .custom-minicart-header {
  padding-right: 44px;
}


/* ---------------------------------------------------------------------
 * 3. Size guide — convert the existing modal into a side drawer
 *
 * The site already has a working size guide modal: the .ab-sg-*
 * component, wired to the trigger links through data-ab-sg="1". This
 * does NOT add a second implementation — it restyles that one.
 *
 * Existing markup, created lazily on first click:
 *
 *   <div class="ab-sg-overlay ab-sg-open">   <- fixed, flex, centred
 *     <div class="ab-sg-panel">              <- 720px box, max-height 798
 *       <button class="ab-sg-close">x</button>
 *       <div class="ab-sg-body"> ... </div>
 *
 * It is centred purely because the overlay says align-items:center;
 * justify-content:center. Repoint that to the right edge, give the panel
 * full height and a translateX, and the same component becomes a drawer.
 * Its open/close logic, body scroll lock and content are untouched.
 *
 * No JavaScript. Verified on the live product page.
 * ------------------------------------------------------------------ */
.ab-sg-overlay {
  align-items: stretch !important;
  justify-content: flex-end !important;
  padding: 0 !important;
}

.ab-sg-panel {
  width: min(480px, calc(100vw - 40px)) !important;
  max-width: none !important;
  height: 100% !important;
  max-height: none !important;
  border-radius: 0 !important;
  padding: 56px 28px 32px !important;
  overflow-y: auto !important;
  -webkit-overflow-scrolling: touch;
  box-shadow: -8px 0 32px rgba(20, 19, 16, .12) !important;
  transform: translateX(100%);
  transition: transform .32s cubic-bezier(.4, 0, .2, 1) !important;
}

.ab-sg-overlay.ab-sg-open .ab-sg-panel {
  transform: translateX(0);
}

@media (prefers-reduced-motion: reduce) {
  .ab-sg-panel { transition: none !important; }
}

.ab-sg-close {
  position: absolute !important;
  top: 16px !important;
  right: 16px !important;
  left: auto !important;
  width: 32px !important;
  height: 32px !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
}

.ab-sg-body table {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
}

.ab-sg-body th,
.ab-sg-body td {
  padding: 9px 10px;
  text-align: left;
}


/* ---------------------------------------------------------------------
 * 4. Keep the filter row in sans, so --ref-serif can be restored
 *
 * The design layer applies the serif display face with:
 *
 *   .brxe-heading:not(.ab-keep-sans), ... { font-family: var(--ref-serif) }
 *
 * In the visible filter row, Length / Fabric / Availability are plain <p>
 * elements while Style and Colour were built as Bricks heading elements.
 * So defining --ref-serif flipped only those two to Cormorant and left
 * the other three in Montserrat — which is why the token was parked.
 *
 * It is an inconsistent Bricks template, not a CSS fault. The tidy fix is
 * to add the existing `ab-keep-sans` escape-hatch class to those two
 * elements in the builder, or rebuild them as text elements to match the
 * other three. This rule does the same job from CSS so the token can be
 * turned back on without waiting on a builder edit.
 * ------------------------------------------------------------------ */
/* The class is doubled on purpose. The serif rule is
 * `.brxe-heading:not(.ab-keep-sans)` = specificity (0,2,0) and it sits
 * later in the cascade than this snippet, so a plain (0,2,0) selector
 * ties and loses. Repeating the class makes it (0,3,0) and it wins
 * wherever it lands. Verified: without this the filter labels stayed
 * Cormorant. */

/* A heading element nested inside a link is a label, not a heading —
 * this catches the mega-menu items ('New', 'Back In Stock', 'Cape &
 * Cape Style Abayas' ...), all .brxe-heading at 12px and unreadable
 * in a display serif. */
a .brxe-heading.brxe-heading,

/* The announcement ticker — .brxe-heading inside a splide slide, 11px. */
.splide .brxe-heading.brxe-heading,

/* Filter drawer accordion labels. Three of the five were already plain
 * text elements, so sans is the majority intent as well as the legible
 * choice at this size. */
.brxe-offcanvas .brxe-heading.brxe-heading,
.brxe-accordion-nested .brxe-heading.brxe-heading,
.accordion-title-wrapper .brxe-heading.brxe-heading {
  font-family: var(--ref-sans) !important;
  letter-spacing: normal !important;
}

/* =====================================================================
 * Abayas Boutique — visual defect fixes
 * =====================================================================
 * WPCode: CSS Snippet · Auto Insert · Site Wide Header
 * Author: audit 2026-08-18
 *
 * Every block below is independent. To roll back one fix, delete that
 * block. To roll back everything, set the snippet Status to Inactive —
 * no other snippet depends on this one.
 *
 * Measured on a 1680px viewport with the admin bar hidden, so the
 * numbers are what a real visitor sees.
 * ------------------------------------------------------------------ */


/* ---------------------------------------------------------------------
 * 1. [CRITICAL] The selected size is invisible on every variable product
 *
 * `.bricks-swatch-selected` computes to color:#fff with
 * background-color:rgba(0,0,0,0) on a white page. Contrast 1:1. Pick a
 * length on any product and the chip you just clicked goes blank, so the
 * customer cannot tell which size is in their basket.
 *
 * The white text is correct — it is the dark fill that went missing.
 * #141310 is the site's existing body text colour, and matches the
 * inverted state the filter chips already use (.brx-option-active).
 * ------------------------------------------------------------------ */
/* CORRECTED 2026-08-18 — the original rule here never won.
 *
 * The real cause is not a missing rule. The "Reformation Design Layer"
 * snippet already styles this state:
 *
 *   .bricks-variation-swatches li.bricks-swatch-selected {
 *     background: var(--ref-ink) !important;   <- resolves to nothing
 *     color: rgb(255,255,255) !important;      <- survives
 *   }
 *
 * Every colour token in that layer's :root block is commented out — 10
 * commented, 0 live — so var(--ref-ink) is invalid, the background is
 * dropped, and only the white text survives. There are 96 var(--ref-*)
 * usages site wide in the same position.
 *
 * The proper fix is to restore those tokens; see HANDOVER-root-cause.md.
 * This rule is the stopgap: one extra class beats the design layer on
 * specificity so the selected size is visible in the meantime. It is
 * safe to delete once the tokens are back. */
.bricks-variation-swatches.bricks-swatch-label li.bricks-swatch-selected,
.bricks-variation-swatches li.bricks-swatch-selected {
  background: #1a1815 !important;
  color: #fff !important;
  border-color: #1a1815 !important;
}


/* ---------------------------------------------------------------------
 * 2. [CRITICAL] "Show More" buttons render white-on-white
 *
 * Three `.pm-products-toggle` buttons on the homepage (y ≈ 3307, 5044,
 * 7842). They carry `.bricks-background-primary`, which supplies the
 * white text, but a per-element Bricks style knocks the background back
 * to transparent. The label survives, the fill does not.
 *
 * Same class on the footer "Subscribe" button resolves correctly to
 * rgb(17,17,17) — so #111 is the intended fill, not an invention.
 * ------------------------------------------------------------------ */
.brxe-button.pm-products-toggle.bricks-background-primary,
a.pm-products-toggle.bricks-button {
  background-color: #111 !important;
  color: #fff !important;
}

.brxe-button.pm-products-toggle.bricks-background-primary:hover,
a.pm-products-toggle.bricks-button:hover {
  background-color: #141310 !important;
  color: #fff !important;
}


/* ---------------------------------------------------------------------
 * 3. [HIGH · mobile] Basket items cannot be removed on a phone
 *
 * `.cfw-remove-item-button` ships at opacity:0 and is revealed on row
 * hover. Touch devices have no hover, so on mobile there is no visible
 * way to take something out of the bag — the only affordance left is
 * decrementing the quantity stepper to zero.
 *
 * Scoped to `hover: none` so the desktop hover-reveal behaviour is
 * untouched.
 * ------------------------------------------------------------------ */
@media (hover: none) {
  .cfw-remove-item-button {
    opacity: 1 !important;
  }
}

/* Same button is 20x22 CSS px — under the 24x24 WCAG 2.5.8 minimum.
 * Padding grows the hit area without moving the icon.               */
.cfw-remove-item-button {
  padding: 6px;
  margin: -6px;
}


/* ---------------------------------------------------------------------
 * 4. [MED] Size swatches look like plain text
 *
 * Unselected `<li>` swatches compute to border-width:0, so 52 / 54 / 56
 * read as static labels rather than something you can press. A hairline
 * border restores the affordance without changing the layout — the
 * boxes are already 60x48.
 * ------------------------------------------------------------------ */
.bricks-variation-swatches.bricks-swatch-label li {
  border: 1px solid #d8d5d0;
  transition: border-color .15s ease, background-color .15s ease;
}

.bricks-variation-swatches.bricks-swatch-label li:hover {
  border-color: #141310;
}

/* Keyboard focus ring — see 02-a11y-fixes.js, which makes these
 * focusable in the first place. Harmless on its own.                */
.bricks-variation-swatches.bricks-swatch-label li:focus-visible {
  outline: 2px solid #141310;
  outline-offset: 2px;
}


/* ---------------------------------------------------------------------
 * 5. [MED] "wishlist ()" flashes empty on every page load
 *
 * The link's ::before / ::after supply the parentheses, but the count
 * inside is written by TinvWL over AJAX after first paint. So the header
 * paints "wishlist ()" for roughly a second on every navigation.
 *
 * Hide the parens until the count arrives. 02-a11y-fixes.js adds
 * `.wl-count-ready` once the span has a value; if you deploy this CSS
 * without the JS the counter stays hidden, so ship them together or
 * skip this block.
 * ------------------------------------------------------------------ */
/* CORRECTED 2026-08-18. The first version of this block hid both
 * pseudo-elements until the count arrived. That was wrong: the word
 * "wishlist" itself lives inside ::before, and when the count span stays
 * empty — which it does — the class is never added and the whole nav
 * item disappears. Caught live in the header.
 *
 * Swap the content instead. "wishlist" is always visible; the parens and
 * the number appear only once there is a number to show. Worst case is
 * a bare "wishlist" label, which is a perfectly good nav item. */
a.wishlist_products_counter::before {
  content: "wishlist";
}

a.wishlist_products_counter::after {
  content: "";
}

a.wishlist_products_counter.wl-count-ready::before {
  content: "wishlist (";
}

a.wishlist_products_counter.wl-count-ready::after {
  content: ")";
}


/* ---------------------------------------------------------------------
 * 6. [LOW] Carousel pagination dots are 10x10
 *
 * WCAG 2.2 AA (2.5.8) wants 24x24. Grow the target, keep the dot the
 * same size visually.
 * ------------------------------------------------------------------ */
.pm-slider-dot {
  position: relative;
}

.pm-slider-dot::after {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  width: 24px;
  height: 24px;
  transform: translate(-50%, -50%);
}


/* ---------------------------------------------------------------------
 * 7. [LOW] Colour swatch chips form a ragged grid
 *
 * Chips are content-width, so "metallic / multi / orange" does not line
 * up with "green / grey / ivory" on the row above. Equal columns fix it.
 * ------------------------------------------------------------------ */
.brxe-filter-checkbox .brx-option-text,
.brxe-filter-select .brx-option-text {
  justify-content: flex-start;
}

/* Near-white swatches (white / ivory / cream / print / metallic /
 * silver) are indistinguishable at 14px. Darken the swatch ring.    */
.brx-option-text .brx-swatch-color,
.brx-option-text img.brx-swatch-image {
  box-shadow: inset 0 0 0 1px rgba(20, 19, 16, .25);
}

/* =====================================================================
 * Collection page - layout fixes
 * =====================================================================
 * Everything here was measured with the admin bar hidden, so the numbers
 * are what a real visitor sees. Bricks element IDs are used because that is
 * what these elements have; there are no classes to hang this on.
 */

/* ---------------------------------------------------------------------
 * 1. The invisible 'clear filters' button
 *
 * There was a blank 18x18 gap between 'fabric' and 'availability'. It is
 * not a spacing bug - it is a real button (aria-label="Open") whose icon
 * never draws. It asks for `fa-filter-circle-xmark`, a Font Awesome 6
 * glyph, but `.fas` resolves to "Font Awesome 5 Free" because
 * easy-login-woocommerce loads FA5 alongside Bricks' FA6. Codepoint e17b
 * does not exist in FA5, so the browser draws nothing.
 *
 * FA5 is kept as a fallback in the stack rather than dropped, so any glyph
 * FA6 lacks still resolves. The real fix is stopping that plugin loading a
 * second icon font at all - see reports/typography-audit.md.
 * --------------------------------------------------------------------- */
.fas,
.fa-solid {
	font-family: "Font Awesome 6 Free", "Font Awesome 5 Free" !important;
	font-weight: 900 !important;
}

/* ---------------------------------------------------------------------
 * 2. The page title did not line up with anything
 *
 * Measured at 1680px: the filter bar and the product grid both start at
 * x=188 and the band is 1304px wide. The title block is a 980px container
 * with `margin: 0 162px`, so the h1 text started at x=350 - 162px adrift of
 * every other thing on the page.
 *
 * The container is `text-align: center` but the h1 overrides to left, which
 * is why it read as an arbitrary indent rather than a centred title. Both
 * are aligned left to the content band here, matching the grid.
 * --------------------------------------------------------------------- */
/*
 * The container is pinned to 980px and centred by a rule in the Customiser's
 * Additional CSS at (0,2,1), while a second rule there left-aligns the h1
 * inside it. Two conflicting intentions, and the visible result was an
 * arbitrary 162px indent. Aligned left to the content band, matching the
 * filter bar and the grid. `html body.tax-product_cat` is (0,2,2) so it
 * outranks the Customiser rather than relying on source order.
 */
html body.tax-product_cat #brxe-nigaxl,
html body.post-type-archive-product #brxe-nigaxl,
html body.tax-product_tag #brxe-nigaxl {
	max-width: none !important;
	margin-left: 0 !important;
	margin-right: 0 !important;
	text-align: left !important;
}

/* ---------------------------------------------------------------------
 * 3. The filter row ran off the screen on phones
 *
 * At 390px the row is a 370px flex container with `overflow-x: visible`, so
 * its children spilled instead of wrapping. 'availability' sat at 352-420,
 * i.e. 30px past the edge and visibly cut in half. Separately 'all filters'
 * broke over two lines while every other label stayed on one, so the row
 * was 48px tall on one item and 24px on the rest.
 *
 * Wrapping rather than horizontal scroll: a scroll strip hides options
 * behind a gesture with no affordance, and there are only six of them.
 * --------------------------------------------------------------------- */
body #brxe-yymwom {
	flex-wrap: wrap !important;
	row-gap: 10px !important;
}

body #brxe-yymwom > .size-tggle-text {
	white-space: nowrap !important;
}

/* ---------------------------------------------------------------------
 * 4. The right-hand side of the filter bar sat on three different lines
 *
 * Measured tops at 1680px: filter labels 380 (24px tall), grid toggles 375
 * (34px), item count 415, sort label 395, select 392 (64px block). Nothing
 * shared a centreline.
 *
 * And three type treatments in one row: the count at 11px UPPERCASE with
 * 1.54px tracking, the sort label at 14px lowercase, the select at 12px
 * UPPERCASE. Normalised to the filter labels' treatment - lowercase, no
 * tracking - which is also the voice the rest of the UI uses.
 * --------------------------------------------------------------------- */
body #brxe-zbmbpf {
	align-items: center !important;
}

body #brxe-pkotcu {
	display: flex !important;
	align-items: center !important;
	justify-content: flex-end !important;
	gap: 14px !important;
}

body #brxe-pkotcu .woocommerce-ordering {
	display: flex !important;
	align-items: center !important;
	gap: 8px !important;
	margin: 0 !important;
}

body #abx-item-count,
body #ab-sortlabel,
body #brxe-pkotcu select.orderby {
	font-size: 14px !important;
	letter-spacing: normal !important;
	text-transform: lowercase !important;
	line-height: 1.2 !important;
}

body #brxe-pkotcu select.orderby {
	height: auto !important;
	padding-top: 6px !important;
	padding-bottom: 6px !important;
}

/* ---------------------------------------------------------------------
 * 5. There was no way to sort on a phone
 *
 * `#brxe-pkotcu` is set to `display: none` under (max-width: 767px) by a
 * rule in the Customiser's Additional CSS. That hides the item count AND
 * the sort control, so a phone visitor could not reorder a 1,300-item
 * catalogue at all. This is a functional gap, not a cosmetic one.
 *
 * `html body` prefix because the Customiser's rule is (0,2,1) and prints
 * late in the head; this needs to outrank it rather than out-order it.
 *
 * Given back as a wrapping row under the filters rather than squeezed onto
 * the same line - at 390px there is not room for both.
 * --------------------------------------------------------------------- */
@media (max-width: 767.98px) {

	/*
	 * Same specificity trap as the item count: the Customiser's rule is
	 * `body.tax-product_cat #brxe-pkotcu` at (1,1,1), and `html body #...`
	 * at (1,0,2) loses to it. Shipped that first and the control stayed
	 * hidden - measured 0x0 at 390px. (1,1,2) takes it.
	 */
	html body.tax-product_cat #brxe-pkotcu,
	html body.post-type-archive-product #brxe-pkotcu,
	html body.tax-product_tag #brxe-pkotcu {
		display: flex !important;
		flex-wrap: wrap !important;
		align-items: center !important;
		justify-content: space-between !important;
		gap: 8px !important;
		width: 100% !important;
	}

	html body.tax-product_cat #brxe-pkotcu select.orderby,
	html body.post-type-archive-product #brxe-pkotcu select.orderby,
	html body.tax-product_tag #brxe-pkotcu select.orderby {
		font-size: 16px !important;   /* under 16px iOS zooms the page on focus */
		min-height: 34px !important;
	}
}

/* ---------------------------------------------------------------------
 * 2b. Follow-ups found by measuring after shipping 2 and 4
 *
 * - The category description stayed centred once the h1 moved left, so the
 *   two no longer agreed. Its own max-width is kept (a 322px measure reads
 *   better than a 1304px one); only the auto margin goes.
 * - 'sort by' broke onto two lines once the sort block became a flex row.
 * --------------------------------------------------------------------- */
/*
 * The centring is on the wrapper `#brxe-vrxwjv`, not on .term-description -
 * found by reading the computed margins after the first attempt did nothing.
 * The wrapper goes full width and left; the description keeps its own 620px
 * measure so a long category blurb still reads.
 */
html body #brxe-nigaxl #brxe-vrxwjv {
	max-width: none !important;
	margin-left: 0 !important;
	margin-right: 0 !important;
	text-align: left !important;
}

html body #brxe-nigaxl .term-description {
	margin-left: 0 !important;
	margin-right: 0 !important;
}

body #ab-sortlabel {
	white-space: nowrap !important;
}

/* ---------------------------------------------------------------------
 * 4b. Measured again after shipping 4 and the row still was not one voice
 *
 *   item count   11px / 700 / +1.54px tracking
 *   sort label   14px / 700
 *   select       14px / 400
 *   filter labels 15px / 400 / -0.09px
 *
 * The first two lost to higher-specificity rules, so this raises to
 * `html body`. All four now match the filter labels. The count keeps its
 * muted colour - that distinction is useful, the tracking was not.
 * --------------------------------------------------------------------- */
html body #abx-item-count,
html body #ab-sortlabel,
html body #brxe-pkotcu select.orderby {
	font-size: 15px !important;
	font-weight: 400 !important;
	letter-spacing: -0.09px !important;
	text-transform: lowercase !important;
}

/*
 * 4c. The item count needed one more step. The Customiser has
 * `body.tax-product_cat #abx-item-count { font-size:11px!; letter-spacing:0.14em! }`
 * at (1,1,1), which outranks `html body #abx-item-count` at (1,0,2) - class
 * count is compared before element count. `html body.tax-product_cat ...`
 * is (1,1,2) and takes it.
 */
html body.tax-product_cat #abx-item-count,
html body.post-type-archive-product #abx-item-count,
html body.tax-product_tag #abx-item-count {
	font-size: 15px !important;
	letter-spacing: -0.09px !important;
}

/* ---------------------------------------------------------------------
 * 5b. Giving the sort back broke the filter row - fixed by stacking
 *
 * Unhiding `#brxe-pkotcu` put it beside the filters in a nowrap flex row,
 * so at 390px each got 180px: the filter labels stacked into a narrow
 * column 92px tall, and the select was squeezed to 0x0 - visible in the
 * DOM, `display:block`, and zero pixels wide.
 *
 * The two belong on separate rows at this width. Measured after: filters
 * full width on top, count + sort underneath.
 * --------------------------------------------------------------------- */
@media (max-width: 767.98px) {

	html body.tax-product_cat #brxe-zbmbpf,
	html body.post-type-archive-product #brxe-zbmbpf,
	html body.tax-product_tag #brxe-zbmbpf {
		flex-wrap: wrap !important;
		row-gap: 12px !important;
	}

	html body.tax-product_cat #brxe-yymwom,
	html body.post-type-archive-product #brxe-yymwom,
	html body.tax-product_tag #brxe-yymwom {
		width: 100% !important;
		flex: 0 0 100% !important;
	}

	html body.tax-product_cat #brxe-pkotcu,
	html body.post-type-archive-product #brxe-pkotcu,
	html body.tax-product_tag #brxe-pkotcu {
		width: 100% !important;
		flex: 0 0 100% !important;
		justify-content: flex-start !important;
	}

	/* The select must be allowed to take the remaining width, not collapse. */
	html body.tax-product_cat #brxe-pkotcu .woocommerce-ordering,
	html body.post-type-archive-product #brxe-pkotcu .woocommerce-ordering,
	html body.tax-product_tag #brxe-pkotcu .woocommerce-ordering {
		flex: 1 1 auto !important;
		min-width: 0 !important;
	}

	html body.tax-product_cat #brxe-pkotcu select.orderby,
	html body.post-type-archive-product #brxe-pkotcu select.orderby,
	html body.tax-product_tag #brxe-pkotcu select.orderby {
		flex: 1 1 auto !important;
		min-width: 0 !important;
		width: auto !important;
	}
}

/*
 * 5c. There are TWO hide rules, not one.
 *
 * `#brxe-pkotcu` is the outer wrapper (item count + sort). Inside it,
 * `#brxe-ljjcim` holds the 'sort by' label and the select, and it is hidden
 * separately. Unhiding only the outer one gave a visible row containing
 * just the item count, with the select at 0x0 - which is what the
 * measurement showed before this rule was added.
 */
@media (max-width: 767.98px) {

	html body.tax-product_cat #brxe-ljjcim,
	html body.post-type-archive-product #brxe-ljjcim,
	html body.tax-product_tag #brxe-ljjcim {
		display: flex !important;
		align-items: center !important;
		gap: 8px !important;
		flex: 1 1 auto !important;
		min-width: 0 !important;
	}
}

/*
 * 5d. THREE nested hide rules, found one at a time by walking the subtree:
 *
 *   #brxe-pkotcu   outer wrapper (item count + sort)   display:none
 *   #brxe-ljjcim   holds 'sort by' + the select        display:none
 *   #brxe-ykrcdi   the WooCommerce orderby element     display:none
 *
 * Each one had to be unhidden before the next became measurable. Recording
 * all three so nobody has to rediscover the chain.
 */
@media (max-width: 767.98px) {

	html body.tax-product_cat #brxe-ykrcdi,
	html body.post-type-archive-product #brxe-ykrcdi,
	html body.tax-product_tag #brxe-ykrcdi {
		display: block !important;
		flex: 1 1 auto !important;
		min-width: 0 !important;
	}
}

/* ---------------------------------------------------------------------
 * 6. Hero overlay copy was barely legible
 *
 * Six overlay blocks on the homepage carry 9-11px PURE WHITE text sitting
 * on pale photography - 'wedding season. sorted.' at 10px, the call to
 * action under it at 9px. On a cream abaya against a cream wall there is
 * almost nothing to read.
 *
 * Deliberately conservative: a shadow for legibility rather than a scrim or
 * a rewritten type scale, because the size of that display copy is a design
 * decision and not mine to make. The only size changed is the link, which
 * at 9px was also under any reasonable tap target.
 * --------------------------------------------------------------------- */
#brxe-rrxdit,
#brxe-tkpxdc,
#brxe-thczjr,
#brxe-pchhjo,
#brxe-zxwciq,
#brxe-eghgvm {
	text-shadow: 0 1px 14px rgba(26, 24, 21, 0.55) !important;
}

/*
 * The 9px link size CANNOT be fixed from here. A script writes it as an
 * INLINE `font-size: 9px !important` on the anchor, along with colour,
 * weight, tracking and the underline. Inline !important cannot be beaten
 * from a stylesheet at any specificity - shipped a 12px rule first and
 * measured it still computing 9px.
 *
 * The shadow above still lands, because that script does not set one, so
 * the legibility half of the problem is fixed. Raising the size needs the
 * script changed, not CSS.
 */

@media (hover: none) {

	#brxe-rrxdit a,
	#brxe-tkpxdc a,
	#brxe-thczjr a,
	#brxe-pchhjo a,
	#brxe-zxwciq a,
	#brxe-eghgvm a {
		display: inline-block;
		min-height: 34px;
		line-height: 34px;
	}
}

/* ---------------------------------------------------------------------
 * 7. Navbar - structural, not nudged
 *
 * A first pass just moved x-coordinates around and it did not read like
 * Reformation, because the difference was never the coordinates:
 *
 *   they have NO wordmark in the nav row  -> nav starts at the page edge
 *   they have 11 nav items                -> the row fills the left half
 *   their megamenu is full-bleed          -> images land at the right edge
 *   their promo strip is solid black      -> ours was white-on-transparent,
 *                                            i.e. invisible
 *
 * Measured on thereformation.com at 1680: nav first item x=24, utilities
 * ending x=1656, megamenu columns x=24 / 232 / 440 / 648, images x=1287
 * and 1472.
 *
 * NOTE ON THE HOME LINK. Hiding the wordmark removes the usual way back to
 * the homepage from an inner page. Reformation has the same gap and lives
 * with it - their wordmark only appears in the hero. Worth adding a 'home'
 * nav item if it turns out people miss it.
 *
 * Desktop only. The mobile header is a separate section with its own logo
 * and hamburger and is deliberately untouched.
 * --------------------------------------------------------------------- */
@media (min-width: 992px) {

	/* 1. No wordmark in the row - this is what frees the left edge. */
	html #brx-header #brxe-hfpezd {
		display: none !important;
	}

	/* 2. Both header rows full width on a 24px gutter, matching theirs. */
	html #brx-header #brxe-amdobc,
	html #brx-header #brxe-fiaicz {
		max-width: none !important;
		margin-left: 0 !important;
		margin-right: 0 !important;
		padding-left: 24px !important;
		padding-right: 24px !important;
	}

	/* 3. Nav to the gutter. Both paddings existed only to clear the logo. */
	html #brx-header #brxe-tmmnnv {
		padding-left: 0 !important;
	}

	html #brx-header #brxe-wqzyga {
		padding-left: 0 !important;
	}

	html #brx-header #brxe-wqzyga a {
		font-size: 16px !important;
		letter-spacing: -0.16px !important;
	}

	/*
	 * 4. Megamenu full-bleed.
	 *
	 * It was a 1640px panel sitting inside the page container, so its inner
	 * flex row never reached the right edge and the images floated in the
	 * middle with dead space beside them. The row is already
	 * `justify-content: space-between`, so giving the panel the full viewport
	 * is what actually pushes the image group right - no extra rule needed.
	 */
	html #brx-header .brx-has-megamenu .brx-dropdown-content {
		left: 0 !important;
		width: 100vw !important;
		max-width: 100vw !important;
		padding-left: 24px !important;
		padding-right: 24px !important;
	}

	html #brx-header .brx-has-megamenu .brx-dropdown-content > .brxe-div {
		width: 100% !important;
		justify-content: space-between !important;
	}
}

/*
 * 5. The promo strip.
 *
 * Measured: background `rgba(0,0,0,0)` with `rgb(255,255,255)` text - white
 * on nothing, so it was effectively invisible. Reformation's is a solid
 * black strip pinned above the nav with small white text. Same here.
 * Not inside the desktop media query: the strip runs at every width.
 */
html #brx-header #brxe-uuprxo {
	background-color: #1a1815 !important;
}

/* ---------------------------------------------------------------------
 * 8. Collapse the filter bar to a single trigger
 *
 * The bar showed six triggers inline - all filters, length, style, colour,
 * fabric, availability - which is what made it overflow on phones and wrap
 * ragged on desktop. Reformation shows two: 'size' and 'all filters'.
 *
 * VERIFIED BEFORE HIDING ANYTHING, because this was the load-bearing
 * assumption: clicking 'all filters' opens panel #brxe-klvhuq containing
 * ALL FIVE groups as accordions - Length, Style, Colour, Fabric,
 * Availability - with 126 controls and its own clear / see results actions.
 * So the five inline triggers are duplicates of what the panel already
 * holds, and hiding them removes no functionality.
 *
 * `:not(:first-child)` rather than listing ids: 'All Filters' is the first
 * child, and the clear-filters button is a BUTTON, not a .size-tggle-text,
 * so it survives. That keeps working if a group is ever added or removed.
 *
 * The surviving trigger gets a real tap target - it is now the ONLY way
 * into filtering, so 40px rather than the 24px floor.
 * --------------------------------------------------------------------- */
html body #brxe-yymwom > .size-tggle-text:not(:first-child) {
	display: none !important;
}

html body #brxe-yymwom > .size-tggle-text:first-child {
	display: flex !important;
	align-items: center !important;
	min-height: 40px !important;
	cursor: pointer;
}

/* ---------------------------------------------------------------------
 * 9. Nav item spacing, matched to theirs exactly
 *
 * Measured on thereformation.com: every nav link is `padding-right: 20px`
 * with NO gap on the list and no margins. So the text gap is exactly 20px
 * and the clickable boxes butt against each other - there is no dead strip
 * between items, which is why theirs feels tighter and more deliberate.
 *
 *   their 'new'      box 48, text 28, padding-right 20
 *   their 'clothing' box 73, text 53, padding-right 20
 *
 * Ours was the other way round: a 26px flex gap on the list and zero
 * padding on the links, so items sat 6px further apart AND the gaps were
 * dead space you could not click.
 *
 * Target is `.brx-submenu-toggle`, not the anchor: the anchor is 29x18
 * inside it, and padding on the toggle is what actually extends the
 * hit area.
 * --------------------------------------------------------------------- */
@media (min-width: 992px) {

	html #brx-header #brxe-wqzyga {
		gap: 0 !important;
		column-gap: 0 !important;
	}

	html #brx-header #brxe-wqzyga > li > .brx-submenu-toggle,
	html #brx-header #brxe-wqzyga > li > a {
		padding-left: 0 !important;
		padding-right: 20px !important;
	}
}

/* ---------------------------------------------------------------------
 * 10. The floating search pill sat on top of every drawer
 *
 * Measured stacking:
 *
 *   #ab-fs            the search pill        z-index 99990, position fixed
 *   #brx-header       contains the cart      z-index 9999
 *   .brx-offcanvas-*  filter drawer          z-index 10000 / 10001
 *   #cfw-side-cart    CheckoutWC side cart   z-index 999999
 *
 * So the pill covered the cart drawer AND the filter drawer, and only the
 * CheckoutWC cart ever beat it.
 *
 * Lowered rather than raising the drawers: 9998 puts it under the header
 * (9999) and under both drawer stacks, while still sitting above ordinary
 * page content, which is z-auto. Raising the drawers instead would have
 * meant touching three different components.
 * --------------------------------------------------------------------- */
html body #ab-fs {
	z-index: 9998 !important;
}

/* ---------------------------------------------------------------------
 * 11. Filter drawer: clear / see results pinned to the bottom
 *
 * `#brxe-eardrk` is the scrolling drawer (`overflow-y: auto`) and
 * `#brxe-lsabdb` holds the two buttons as ordinary inline content at the
 * end of it. Expand two or three accordions and the actions scroll out of
 * reach - on a phone you can end up unable to see what you selected.
 *
 * `position: sticky` rather than fixed: it stays in the drawer's flow, so
 * it cannot escape the drawer or overlap the page when the drawer closes,
 * and it needs no height calculation. Opaque background because the
 * accordions scroll underneath it.
 * --------------------------------------------------------------------- */
html body #brxe-eardrk #brxe-lsabdb {
	position: sticky !important;
	bottom: 0 !important;
	z-index: 3 !important;
	background: #fff !important;
	padding-top: 14px !important;
	padding-bottom: 14px !important;
	box-shadow: 0 -8px 16px rgba(255, 255, 255, 0.9);
}

/* ---------------------------------------------------------------------
 * 12. Dropdown: categories left, images right
 *
 * Reformation puts the link columns at the left gutter and the imagery
 * hard against the right edge (measured: images at x=1287 and x=1472 on a
 * 1680 viewport, captions beneath).
 *
 * Ours, measured on the 'new' dropdown after the panel went full-bleed:
 *
 *   .brx-dropdown-content   L0    1680 wide   <- correct
 *   > .brxe-div             L220  1240 wide   <- a 1240 box centred in it,
 *                                                so 220px of dead margin
 *                                                each side
 *     link columns          L220  360 wide
 *     image wrapper         L636  824 wide, and its inner row is
 *                                 `flex-start`, so the images hug the LEFT
 *                                 of that box - i.e. they sit immediately
 *                                 after the links, mid-panel
 *
 * Two fixes, both structural rather than per-dropdown, because each menu
 * has its own Bricks ids:
 *
 *   1. stretch the inner container to the full panel so `space-between`
 *      has somewhere to push to
 *   2. flip the image row to `flex-end` so the pictures sit against the
 *      right gutter instead of the left of their own box
 *
 * `:has(> .brxe-image)` finds the image row without needing ids. :has() is
 * already relied on elsewhere in this codebase and verified on this site.
 * --------------------------------------------------------------------- */
/*
 * TWO ids needed on the left of this selector. The Customiser caps each
 * megamenu with `#brxe-woggtc #brxe-bserlt { max-width: 1240px !important }`
 * - two ids, (2,0,0) - and no amount of classes beats that, because id count
 * is compared first. Measured: the container stayed 1240 wide with 196px of
 * dead margin each side while my (1,3,2) rule was in force.
 *
 * `#brx-header #brxe-vgdhby` is (2,2,0) and generic - every dropdown lives
 * under that one nav, so this does not need a rule per menu.
 */
html #brx-header #brxe-vgdhby .brx-dropdown-content > .brxe-div {
	width: 100% !important;
	max-width: none !important;
	margin-left: 0 !important;
	margin-right: 0 !important;
	justify-content: space-between !important;
}

/*
 * Target the image ROW, not the image links.
 *
 * `:has(> .brxe-image)` matched the wrong level: the image IS the
 * `.brxe-image` element and its direct parent is the <a>, so every link got
 * `margin-left: auto` and pushed itself right independently. Measured: the
 * two pictures ended up 620px apart, one at 826 and one at 1446, instead of
 * sitting together at the right edge.
 *
 * `:has(> a > .brxe-image)` is the row that holds them.
 */
html #brx-header #brxe-vgdhby .brx-dropdown-content .brxe-div:has(> a > .brxe-image) {
	justify-content: flex-end !important;
	margin-left: auto !important;
}

html #brx-header #brxe-vgdhby .brx-dropdown-content a:has(> .brxe-image) {
	margin-left: 0 !important;
	justify-content: flex-start !important;
}

/* ---------------------------------------------------------------------
 * 13. Dropdown image captions
 *
 * Reformation labels each menu image ('back in stock', 'two pieces') at
 * 12px underneath it. Ours turned out to already HAVE those labels - each
 * image link contains a <p class="brxe-heading"> with the right text
 * ('New', 'Back In Stock') sitting at `display: none`.
 *
 * So this is unhiding, not authoring. The anchor is already `display:
 * block`, so the caption falls under the image without any layout change.
 * Lowercased to match the rest of the UI, and sized to their 12px.
 * --------------------------------------------------------------------- */
html #brx-header #brxe-vgdhby .brx-dropdown-content a:has(> .brxe-image) > .brxe-heading {
	display: block !important;
	margin: 10px 0 0 !important;
	font-size: 12px !important;
	font-weight: 400 !important;
	letter-spacing: normal !important;
	text-transform: lowercase !important;
	text-align: left !important;
	color: #1a1815 !important;
}

/* ---------------------------------------------------------------------
 * 11b. Filter drawer actions: pinned, not just sticky
 *
 * `position: sticky; bottom: 0` only bites once the content overflows.
 * Measured with the accordions collapsed: the actions sat at T311 in an
 * 872px drawer - floating in the middle with empty space beneath.
 *
 * Making the drawer a flex column and giving the actions `margin-top:
 * auto` pins them to the bottom when the content is short; the sticky rule
 * above keeps them there once it is long enough to scroll. Both are needed.
 * --------------------------------------------------------------------- */
html body #brxe-eardrk {
	display: flex !important;
	flex-direction: column !important;
}

html body #brxe-eardrk > * {
	flex: 0 0 auto;
}

html body #brxe-eardrk #brxe-lsabdb {
	margin-top: auto !important;
}

/* ---------------------------------------------------------------------
 * 14. 'ab' monogram, revealed on scroll
 *
 * Reformation shows a compact mark at the far left ONLY once you scroll -
 * at the top of the page their nav sits flush and their only /home anchor
 * measures 0x0. Their nav shifts right to make room when it appears.
 *
 * This does the same, and it also fills the gap section 7 created: hiding
 * the wordmark to free the left edge removed the usual way home.
 *
 * REUSES THE EXISTING LOGO ANCHOR rather than adding markup - it already
 * points at the homepage, so the link keeps its accessible name. The <img>
 * is visually hidden with clip, not display:none, so its alt stays in the
 * accessibility tree and the link is never nameless. (That alt is the raw
 * filename - a Media Library problem worth fixing separately.)
 *
 * HOW THE SCROLL TRIGGER WORKS, AND THE FALLBACK
 *
 * Bricks toggles no class on scroll and there is no body class either -
 * checked at scrollY 0 and 1200, both identical. So a class hook does not
 * exist and this is either JavaScript or scroll-driven CSS. Chose CSS.
 *
 * `animation-timeline: scroll()` is Chrome/Edge and Safari 26+; Firefox is
 * still behind a flag. So the DEFAULT here is the mark VISIBLE with the nav
 * already offset - a browser without support gets a permanent monogram and
 * a working home link, which is the safe way to fail. Only browsers that
 * support it opt into hiding it at the top.
 * --------------------------------------------------------------------- */
@media (min-width: 992px) {

	html #brx-header #brxe-hfpezd {
		display: flex !important;
		align-items: center !important;
	}

	html #brx-header #brxe-hfpezd img {
		position: absolute !important;
		width: 1px !important;
		height: 1px !important;
		padding: 0 !important;
		margin: -1px !important;
		clip-path: inset(50%) !important;
		border: 0 !important;
	}

	html #brx-header #brxe-hfpezd a.tag {
		display: inline-flex !important;
		align-items: center !important;
		text-decoration: none !important;
	}

	/* The mark itself. Underline sweeps in on hover, mark lifts 1px. */
	/*
	 * The underline moved OFF the pseudo-element and onto the anchor, because
	 * the letters now need `background-clip: text` for the shimmer and one
	 * element cannot clip one background to text and paint another as a rule.
	 */
	html #brx-header #brxe-hfpezd a.tag {
		padding-bottom: 3px;
		background-image: linear-gradient(#1a1815, #1a1815);
		background-repeat: no-repeat;
		background-position: 0 100%;
		background-size: 0 1px;
		transition: background-size 0.38s cubic-bezier(0.4, 0, 0.2, 1);
	}

	html #brx-header #brxe-hfpezd a.tag:hover,
	html #brx-header #brxe-hfpezd a.tag:focus-visible {
		background-size: 100% 1px;
	}

	/*
	 * The letters, with a slow highlight travelling across them on a loop.
	 * 6s and a warm greige (#b9a88f, the palette's own tone) rather than
	 * anything brighter - on a 21px mark in a quiet header, a fast or
	 * high-contrast sweep reads as a loading state, not as craft.
	 */
	html #brx-header #brxe-hfpezd a.tag::after {
		content: 'ab';
		font-family: Montserrat, sans-serif;
		font-weight: 800;
		font-size: 21px;
		line-height: 1;
		letter-spacing: -0.045em;
		background-image: linear-gradient(100deg,
			#1a1815 0%, #1a1815 40%, #b9a88f 50%, #1a1815 60%, #1a1815 100%);
		background-size: 300% 100%;
		background-position: 130% 0;
		-webkit-background-clip: text;
		background-clip: text;
		color: transparent;
		animation: ab-shimmer 6s linear infinite;
		transition: transform 0.38s cubic-bezier(0.4, 0, 0.2, 1);
	}

	html #brx-header #brxe-hfpezd a.tag:hover::after,
	html #brx-header #brxe-hfpezd a.tag:focus-visible::after {
		transform: translateY(-1px);
	}

	/* Default / no scroll-timeline support: mark shown, nav already clear. */
	html #brx-header #brxe-tmmnnv {
		padding-left: 46px !important;
	}
}

@keyframes ab-mark-reveal {
	from { opacity: 0; transform: translateY(5px) scale(0.9); }
	to   { opacity: 1; transform: none; }
}

@keyframes ab-nav-clear {
	from { padding-left: 0; }
	to   { padding-left: 46px; }
}

@supports (animation-timeline: scroll()) {

	@media (min-width: 992px) {

		/* Now it can be hidden at the top, because it can be brought back. */
		html #brx-header #brxe-hfpezd a.tag {
			opacity: 0;
			animation: ab-mark-reveal linear both;
			animation-timeline: scroll(root block);
			animation-range: 40px 150px;
		}

		html #brx-header #brxe-tmmnnv {
			padding-left: 0 !important;
			animation: ab-nav-clear linear both;
			animation-timeline: scroll(root block);
			animation-range: 40px 150px;
		}
	}
}

/*
 * Someone who has asked their system to reduce motion gets the mark and the
 * offset with no reveal and no hover transition - the end state, immediately.
 */
@media (prefers-reduced-motion: reduce) and (min-width: 992px) {

	html #brx-header #brxe-hfpezd a.tag {
		opacity: 1 !important;
		animation: none !important;
	}

	html #brx-header #brxe-hfpezd a.tag::after {
		transition: none !important;
	}

	html #brx-header #brxe-tmmnnv {
		animation: none !important;
		padding-left: 46px !important;
	}
}

/* ---------------------------------------------------------------------
 * 15. The header never actually stuck
 *
 * `#brx-header` is already `position: sticky; top: 0; z-index: 9999` - but
 * measured at scrollY 600 its top was -600, i.e. it scrolled away with the
 * page. Nothing pinned, which is also why the scroll-revealed monogram in
 * section 14 had nowhere to appear.
 *
 * Cause: `body { overflow-x: hidden }`. An ancestor with overflow hidden
 * becomes the scroll container, and a sticky child sticks to THAT rather
 * than the viewport - the classic silent sticky killer.
 *
 * `clip` does the same visual job without establishing a scroll container,
 * so sticky works again. Chrome 90+, Firefox 81+, Safari 16+; anything
 * older just keeps today's non-sticky behaviour.
 *
 * This is a real behavioural change - the header now follows you down the
 * page, as Reformation's does. Reverting is this one declaration.
 * --------------------------------------------------------------------- */
/*
 * `html body[class]` rather than `html body`. The Customiser sets
 * `body.tax-product_cat { overflow-x: hidden !important }` at (0,1,1) and
 * plain `html body` is (0,0,2) - class count wins, so the first attempt was
 * ignored and body stayed `hidden`. The attribute selector counts as a
 * class, giving (0,1,2), and works for every body class rather than needing
 * one rule per template.
 */
html body[class] {
	overflow-x: clip !important;
}

/*
 * 14b. The nav shift could not animate.
 *
 * `padding-left: 0 !important` on #brxe-tmmnnv blocked it - !important beats
 * a CSS animation, which is one of the few places animations lose. Measured:
 * the mark faded in correctly at scrollY 600 while padding stayed 0.
 *
 * Moved the shift onto #brxe-iosesi's margin-left, which carries no
 * !important from anywhere, so the animation can drive it.
 */
@keyframes ab-nav-clear-inner {
	from { margin-left: 0; }
	to   { margin-left: 46px; }
}

@media (min-width: 992px) {

	html #brx-header #brxe-tmmnnv {
		padding-left: 0 !important;
	}

	html #brx-header #brxe-iosesi {
		margin-left: 46px;
	}
}

@supports (animation-timeline: scroll()) {

	@media (min-width: 992px) {

		html #brx-header #brxe-iosesi {
			margin-left: 0;
			animation: ab-nav-clear-inner linear both;
			animation-timeline: scroll(root block);
			animation-range: 40px 150px;
		}
	}
}

@media (prefers-reduced-motion: reduce) and (min-width: 992px) {

	html #brx-header #brxe-iosesi {
		animation: none !important;
		margin-left: 46px !important;
	}
}

@keyframes ab-shimmer {
	from { background-position: 130% 0; }
	to   { background-position: -30% 0; }
}

/*
 * Reduced motion: the loop stops and the letters go back to flat ink. A
 * constantly moving mark in a fixed header is exactly the sort of thing
 * that setting exists for.
 */
@media (prefers-reduced-motion: reduce) and (min-width: 992px) {

	html #brx-header #brxe-hfpezd a.tag::after {
		animation: none !important;
		background-image: none !important;
		-webkit-background-clip: border-box !important;
		background-clip: border-box !important;
		color: #1a1815 !important;
		transition: none !important;
	}

	html #brx-header #brxe-hfpezd a.tag {
		transition: none !important;
	}
}

/* ---------------------------------------------------------------------
 * 16. 'Recently Viewed' cards were oversized
 *
 * Not a sizing bug - an `auto-fit` side effect. The product-page tabs grid
 * resolves to `repeat(auto-fit, minmax(240px, 1fr))`, and auto-fit COLLAPSES
 * empty tracks and redistributes their width to the items that remain.
 *
 * Measured on the Recently Viewed tab, which had 4 products:
 *
 *   computed template   349.5px 349.5px 349.5px 349.5px 0px
 *                                                       ^^^ the 5th track
 *                                                           collapsed
 *   card image          350x437
 *
 * The neighbouring tab has 10 products, fills all five tracks, and renders
 * at 276x345. Same CSS, different item count, 27% difference in card size.
 *
 * `auto-fill` keeps empty tracks at their declared width, so cards stay a
 * consistent size and a sparse tab simply leaves space at the end of the
 * row - which is what you want when the whole point of the section is
 * 'here are the few things you looked at'.
 *
 * Scoped to the product-page tabs block. The same trap applies anywhere
 * `auto-fit` meets a short product list - a category with 2 or 3 items will
 * render giant cards for the same reason. Worth a wider look separately.
 *
 * Specificity: an existing snippet sets this with
 * `body.single-product .pm-products-grid` (0,2,1) !important, so this needs
 * to outrank it - (1,2,2) here.
 * --------------------------------------------------------------------- */
html body.single-product #brxe-vysorb .pm-products-grid,
html body.single-product #brxe-vysorb .brx-grid {
	grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)) !important;
	justify-content: start !important;
}

/* =====================================================================
 * Icons: light outline, not filled
 * =====================================================================
 * Audited every icon that renders on a collection page first, because most of
 * them are already right and did not need touching:
 *
 *   header search, bag, hamburger  filled <path>, but the geometry draws a
 *                                  thin ring, so they already read as line
 *                                  icons. Left alone.
 *   card wishlist heart            outline glyph from tinvwl-webfont at 20px.
 *                                  Already light. Left alone.
 *   grid view toggles              genuinely filled — fixed below.
 *
 * THE GRID TOGGLES. Both are pure <rect> grids in an 18x18 viewBox, which is
 * the one case where a stroke conversion is clean: no silhouette to trace, just
 * squares. Filled solid black they were the heaviest marks in the filter row.
 *
 * Stroke width is 0.75, not 1. The 4-column icon is sixteen 3.5px squares, and
 * at 1px the holes closed up and it read as a filled texture — worse than
 * before. Checked both at 1 and at 0.75 zoomed in before settling.
 *
 * Inactive gets the site's muted ink (#8a8073) and active the full ink, so the
 * selected state still reads without either of them being solid.
 *
 * NOT converted, deliberately: the CheckoutWC stepper +/- and remove x in the
 * side cart. Those are filled bars and a cross; outlining them would make the
 * strokes hollow, which looks broken rather than light. They are already thin
 * marks.
 */

.pm-grid-btn svg rect {
	fill: none !important;
	stroke: currentColor !important;
	stroke-width: 0.75 !important;
}

.pm-grid-btn svg {
	color: #1a1815 !important;
}

.pm-grid-btn:not(.is-active) svg {
	color: #8a8073 !important;
}

/* =====================================================================
 * Quick add on touch devices
 * =====================================================================
 * Quick add did not exist on phones. Not broken — switched off on purpose:
 *
 *   @media (hover: none) { .ab-safe-product-card .abx-qa { display: none !important; } }
 *
 * The reveal is a hover on the image container, so on touch there was nothing
 * to trigger it, and rather than leave a panel that could never open, whoever
 * wrote that hid it. Measured before changing anything: all 24 existing panels
 * plus the 11 one-size panels compute `display: none` at 390px.
 *
 * Checked for the obvious reason not to do this and it is not there:
 * `.ab-safe-quick-trigger`, which adds to cart when clicked, measures 0x0 on
 * the card. So a stray tap cannot hit it, and enabling the panel on touch does
 * not put an accidental add-to-cart anywhere near a thumb.
 *
 * HOW IT OPENS. No new markup and no new JavaScript. The original design
 * already had a two-step state — tap the "quick add" bar, the existing handler
 * adds `.abx-picking`, which swaps the bar for the size chips. Verified live:
 * clicking `.abx-qa-btn` takes the panel from `abx-qa` to
 * `abx-qa abx-open abx-picking` and the chips compute `display: block`. So all
 * this file does is put the bar on screen and let that handler do its job.
 *
 * The desktop design (a `(hover: hover) and (pointer: fine)` block in the
 * Reformation Design Layer) shows the label and the chips together, because
 * with a cursor there is room for both and no reason to make someone click
 * twice. On a 182px card there is not, hence the collapsed bar here. The two
 * differ on purpose.
 *
 * `(hover: none)` rather than a width, matching the vocabulary the existing
 * rules already use: this is about the input device, not the screen size, so a
 * touch tablet gets it too.
 */

@media (hover: none) {

	/*
	 * Undo the blanket hide, and place the panel the way the desktop rule does.
	 *
	 * `body` prefix is load-bearing. The rule being overridden is
	 * `.ab-safe-product-card .abx-qa { display: none !important }` — identical
	 * specificity (0,2,0) and also `!important`, so source order decides it, and
	 * that snippet loads after this one. Shipped without the prefix first and the
	 * panel stayed hidden; confirmed by flipping the `(hover: none)` condition to
	 * `all` via CSSOM and reading the cascade, which listed my `block` first and
	 * their `none` second.
	 */
	body .ab-safe-product-card .abx-qa {
		display: block !important;
		inset: auto 0 0 !important;
		width: auto !important;
		transform: none !important;
		pointer-events: auto !important;
		z-index: 7 !important;   /* above .abx-added, see the note at the bottom */

		/*
		 * The white bar lives on this element, not on the button inside it.
		 * `.abx-qa-btn` carries an INLINE `background: transparent !important`
		 * (along with colour, padding and text-align) written by a script, and
		 * inline `!important` cannot be beaten from a stylesheet at any
		 * specificity. On desktop that goes unnoticed because the open panel puts
		 * a white `.abx-sizes` behind the label; collapsed on touch there was
		 * nothing behind it, so "quick add" was near-black text directly on the
		 * photo — invisible over a black abaya.
		 *
		 * Found by reading the computed background off a closed card, then the
		 * element's own style attribute. My first attempt set the background on
		 * the button and did nothing at all.
		 */
		background: rgba(255, 255, 255, 0.94) !important;
		box-shadow: 0 -6px 16px rgba(26, 24, 21, 0.06);
		padding: 0 10px !important;   /* the button's own padding is inline-locked to 0 */
	}

	/* Open: `.abx-sizes` brings its own fill and padding, so this steps back. */
	body .ab-safe-product-card .abx-qa.abx-picking {
		background: transparent !important;
		box-shadow: none !important;
		padding: 0 !important;
	}

	/*
	 * Collapsed state: the bar only.
	 *
	 * Only `display`, `width`, `margin`, `font` and `min-height` are set here.
	 * Background, colour, padding and text-align are all inline `!important` on
	 * this element and cannot be reached — see the note above. 34px min-height
	 * gives the bar a comfortable tap target on its short axis.
	 */
	.ab-safe-product-card .abx-qa > .abx-qa-btn {
		display: block !important;
		width: 100% !important;
		min-height: 34px;
		margin: 0 !important;
		font: 11px/1 Montserrat, sans-serif !important;
	}

	.ab-safe-product-card .abx-qa .abx-sizes {
		display: none !important;
	}

	/* Opened by the existing handler adding `.abx-picking`. */
	.ab-safe-product-card .abx-qa.abx-picking > .abx-qa-btn {
		display: none !important;
	}

	.ab-safe-product-card .abx-qa.abx-picking .abx-sizes {
		display: block !important;
		background: rgba(255, 255, 255, 0.97);
		padding: 8px 8px 9px;
	}

	/*
	 * One-size panels are different: their head button is deliberately inert
	 * (`pointer-events: none`, see snippet 38632 — there is nothing for it to
	 * open), so it cannot be the thing you tap. Show their single "add to bag"
	 * chip straight away instead. One tap, not two, which is the right number
	 * when there is only one choice.
	 */
	/*
	 * REVISED after seeing it on a real phone: the first version showed the whole
	 * `.abx-sizes` block, which stacked three rows under every photo — "QUICK ADD",
	 * then "REGULAR", then "ADD TO BAG". Measured 85px of opaque chrome over a
	 * 243px image: 35% of every product photo covered, permanently. It read as
	 * clunky because it was.
	 *
	 * A one-size item needs exactly one control. So: drop the "QUICK ADD" label
	 * (the chip below already says what it does), drop the `.abx-sizes-top` row
	 * (its label reads "REGULAR", which tells a shopper nothing), and let the
	 * single chip be the bar. Backgrounds and padding are stripped from the
	 * wrappers so the chip is the only thing drawn.
	 *
	 * Now 34px over 243px — 14% covered instead of 35%, and 51px of photograph
	 * handed back per card.
	 */
	.ab-safe-product-card .abx-qa[data-abx-onesize-panel] > .abx-qa-btn {
		display: none !important;
	}

	.ab-safe-product-card .abx-qa[data-abx-onesize-panel] .abx-sizes-top {
		display: none !important;
	}

	.ab-safe-product-card .abx-qa[data-abx-onesize-panel] {
		display: block !important;
		background: transparent !important;
		padding: 0 !important;
		box-shadow: none !important;
	}

	/*
	 * The strip keeps a translucent white ground, same as the multi-size panel.
	 * It has to: the chip's own black fill is removed in snippet 38632 so it
	 * matches the built-in size chips, which leaves dark text that would otherwise
	 * sit straight on the photograph.
	 *
	 * Padding deliberately mean — 3px/4px. The chip itself stays 34px for the tap
	 * target, so the strip lands at 41px total. That is 7px more than the solid
	 * black bar it replaces, and worth it: plain text on a light ground reads far
	 * lighter than a filled black block over a garment.
	 */
	.ab-safe-product-card .abx-qa[data-abx-onesize-panel] .abx-sizes {
		display: block !important;
		background: rgba(255, 255, 255, 0.94) !important;
		padding: 3px 10px 4px !important;
		box-shadow: 0 -6px 16px rgba(26, 24, 21, 0.06);
	}

	/* Chips: 34px minimum on the short axis, above the 24px floor, because
	   these are the actual buy controls and they sit shoulder to shoulder. */
	.ab-safe-product-card .abx-chips button {
		min-height: 34px;
	}

	/* Hidden on desktop too — the panel closes by tapping elsewhere, and a
	   dead-looking cross in a 182px card is just noise. */
	.ab-safe-product-card .abx-sizes .abx-x {
		display: none !important;
	}

	.ab-safe-product-card .abx-sizes .abx-lbl {
		font-size: 10px !important;
		letter-spacing: 0.14em;
		text-transform: uppercase;
		color: #8a8073 !important;
	}

	/*
	 * `.abx-added` — the black "added to bag ✓" bar — is a separate element in
	 * the same corner of the image, at opacity 1 and z-index below this panel.
	 * With the picker open the panel gets taller and that bar appears underneath
	 * it, which reads as a confirmation nobody triggered. Hidden while picking.
	 *
	 * `:has()` rather than a sibling combinator because the DOM order of the two
	 * is not guaranteed. Support verified on this site before relying on it.
	 *
	 * Note this hides a symptom, not the cause: `.abx-added` is showing on cards
	 * for products that are NOT in the cart — reproduced on mobile with this
	 * whole file removed, so it predates this change and is written up separately.
	 */
	.abx-imgc:has(.abx-qa.abx-picking) .abx-added {
		display: none !important;
	}
}

/*
 * One-size strip: full bleed, no side inset.
 * ============================================
 * The single add-to-bag control was sitting inside the panel's padding, so it
 * read as a button floating in a margin rather than as part of the image. Zeroing
 * the horizontal padding lets it span the full frame width — measured 225px on
 * desktop, 182px at 390px, matching the photograph exactly.
 *
 * Outside the `(hover: none)` block on purpose: the inset was visible on desktop
 * hover too, where the base `.abx-sizes` rule contributes 10px all round. Placed
 * at the end of the file so the longhands land after the mobile shorthand.
 *
 * Vertical padding stays — it is what keeps the strip from crushing the text — and
 * the multi-size chip row keeps its full padding, because a row of small size
 * chips does need breathing room at the edges. A single full-width bar does not.
 */
.ab-safe-product-card .abx-qa[data-abx-onesize-panel] .abx-sizes {
	padding-left: 0 !important;
	padding-right: 0 !important;
}

/* Tap targets — WCAG 2.5.8
 * ------------------------------------------------------------------
 * WPCode snippet: "Tap targets" · CSS · Site Wide Header
 *
 * Measured at 386px and 918px across the homepage, a collection page and a
 * product page. Every control below sits under the 24x24 minimum:
 *
 *   wishlist heart on cards    18x18    19 on home, 12 per collection
 *   header search icon         20x24
 *   mobile search handler      30x24
 *   mobile menu / filter       18x18
 *   carousel dots              10x10    6 per collection on mobile
 *   "view bag"                 56x15
 *   floating search close      20x26    (mine)
 *
 * TECHNIQUE
 *
 * A transparent ::after overlay rather than padding, because most of these
 * have a visible box that padding would grow — the dots are 10px circles
 * with a #333 fill, so padding would render them as 28px circles. The
 * overlay leaves every pixel of the visible design untouched and changes
 * only where taps land.
 *
 * Checked first that none of these elements already use ::after for their
 * icon (the heart draws its icon in ::before, which is left alone).
 *
 * `position: relative` is added only where the computed position is static.
 * .js-dgwt-wcas-enable-mobile-form is already absolute — giving it
 * `relative` would move it, so it gets the overlay and nothing else.
 *
 * SCOPING — the part worth not getting wrong
 *
 * The heart rules are scoped to .tinvwl-shortcode-add-to-cart, the card
 * wrapper. The product-page summary button is
 * .tinvwl-woocommerce_after_add_to_cart_button and is already 52px tall.
 * TI renders identical classes in both places, and an unscoped rule is what
 * leaked a text label into the small circular card hearts earlier today.
 *
 * To revert: deactivate this snippet. Nothing visible changes either way —
 * that is the point.
 */

/* ---------- wishlist heart on product cards ---------- */

/* REGRESSION FIXED HERE - read before changing.
 *
 * This originally used an ::after overlay. That broke the product page on
 * mobile: the summary wishlist button uses its own ::after to render the text
 * label ("add to wishlist" / "select a length to save"), and this rule was
 * adding position:absolute; inset:-6px to it, dragging the label out of the
 * button to the top-left corner.
 *
 * Two things made it match when I thought it could not:
 *   1. The summary wrapper carries BOTH tinvwl-shortcode-add-to-cart AND
 *      tinvwl-woocommerce_after_add_to_cart_button on the same element.
 *   2. A child selector does not help - the button is a direct child of that
 *      shared wrapper too.
 *
 * So: padding instead of a pseudo-element (safe here, the card heart has a
 * transparent background and no border, so padding cannot draw a visible
 * chip), plus an explicit :not() for the summary wrapper.
 */
.tinv-wraper.tinvwl-shortcode-add-to-cart:not(.tinvwl-woocommerce_after_add_to_cart_button) .tinvwl_add_to_wishlist_button {
	padding: 6px !important;   /* 18 + 12 = 30px tappable */
	margin: -6px !important;   /* pulled back so nothing shifts */
}

/* ---------- carousel dots ---------- */

.pm-slider-dot {
	position: relative;
}

.pm-slider-dot::after {
	content: '';
	position: absolute;
	inset: -9px;              /* 10 + 18 = 28px */
}

/* ---------- header search ---------- */

.dgwt-wcas-search-icon {
	position: relative;
}

.dgwt-wcas-search-icon::after,
.js-dgwt-wcas-enable-mobile-form::after {
	content: '';
	position: absolute;
	inset: -12px;             /* ~44px, the practical touch target */
}

/* ---------- "view bag" ---------- */

.custom-view-bag {
	display: inline-block;
	padding: 6px 2px !important;
	margin: -6px -2px !important;
}

/* ---------- floating search close (mine) ---------- */

#ab-fs .ab-fs-close {
	padding: 6px 10px !important;
	margin: -6px -10px !important;
}

/* ---------- mobile menu / filter toggles ---------- */

@media (max-width: 767.98px) {

	.brxe-toggle {
		position: relative;
	}

	.brxe-toggle::after {
		content: '';
		position: absolute;
		inset: -12px;
	}
}


/* ---------- minimum legible text ---------- */
/*
 * .abx-pbadge renders at 10px on desktop and 8px on mobile. These are the
 * fabric and edition labels - COTTON, LINEN, LIMITED EDITION - so they carry
 * real information, and 8px is not readable on a phone.
 *
 * Measured before changing: the longest badge (LIMITED EDITION) is 76px wide
 * at 8px inside a 173px card, leaving 96px of headroom. At 10px it grows to
 * roughly 91px, so there is no wrapping risk.
 */
/*
 * OVERRIDES AN EXISTING DELIBERATE RULE - worth knowing before you revert.
 *
 * Something already sets `a.ab-safe-product-link .abx-pbadge` to 8px
 * !important at (max-width: 600px). That beats a plain .abx-pbadge rule on
 * specificity, so the class is doubled below to win regardless of source
 * order. Ugly, but explicit.
 *
 * Justification for overriding it: at 390px the longest badge (LIMITED
 * EDITION) measures 76px inside a 173px card - 96px of headroom. At 10px it
 * grows to roughly 91px and still does not wrap, so the 8px was not buying
 * any layout safety. It was only costing legibility.
 *
 * If the 8px was intentional for a reason I have not found, delete this block
 * and nothing else changes.
 */
@media (max-width: 767.98px) {

	a.ab-safe-product-link .abx-pbadge.abx-pbadge,
	.abx-pbadge.abx-pbadge {
		font-size: 10px !important;
	}
}


/* ==================================================================
 * Mobile audit round 2 — 17 Aug
 * ==================================================================
 * Measured at a real 390px viewport across home, collection, product,
 * cart, checkout (with an item in it), search results and wishlist.
 */

/* ---------- the card heart, for real this time ---------- */
/*
 * The padding above did nothing. `box-sizing: border-box` draws padding
 * INSIDE the 18x18 box, so the element stayed 18x18 and the tap target
 * never grew — measured 18x18 after shipping it. content-box makes the
 * padding add to the box: 18 + 12 = 30px. The negative margin already
 * compensates, so nothing moves.
 */
.tinv-wraper.tinvwl-shortcode-add-to-cart:not(.tinvwl-woocommerce_after_add_to_cart_button) .tinvwl_add_to_wishlist_button {
	box-sizing: content-box !important;
}

/* ---------- checkout: the one that costs orders ---------- */
/*
 * 11 radio and checkbox controls on the checkout measure 18x18 at 390px —
 * shipping method (x4), payment method (x2), terms and marketing (x2),
 * create-account (x1) and two more. These gate delivery and payment
 * selection, and a mis-tap on a shipping radio is a lost order.
 *
 * Sized explicitly rather than scaled: transform would overlap neighbours
 * in a tight list, and radios do not take padding reliably.
 *
 * Good news from the same audit, recorded so nobody "fixes" it: all 19
 * checkout text inputs are already 16px or larger, so iOS does not zoom on
 * focus. CheckoutWC gets that right.
 */
@media (max-width: 767.98px) {

	#cfw input[type="radio"],
	#cfw input[type="checkbox"],
	.cfw-checkout input[type="radio"],
	.cfw-checkout input[type="checkbox"] {
		min-width: 24px !important;
		min-height: 24px !important;
	}

	/* Step tabs were 47x15, the back link 159x20, the small print 360x15. */
	.cfw-tab-link,
	.cfw-prev-tab,
	a.cfw-small {
		display: inline-block;
		padding-block: 5px !important;
	}

	/* Deliberately NOT touched: .cfw-display-table-row (350x23). It is a
	   table row and vertical padding there risks the totals layout. */
}

/* ---------- wishlist pagination ---------- */
/*
 * Page numbers measured 8x24 and the next arrow 15x24 — under 24px on the
 * narrow axis, and they sit close together, which is the worst combination.
 */
.tinvwl-table-manage-list .page-numbers,
.tinv-wishlist .page-numbers {
	min-width: 24px;
	padding-inline: 6px;
	text-align: center;
}

/* ---------- stop iOS zooming on form focus ---------- */
/*
 * Bricks form fields render at 13px. Safari on iOS zooms the whole page
 * whenever a focused input is under 16px, which on the newsletter signup
 * throws the visitor into a zoomed viewport they then have to pinch out of.
 * 16px is the threshold, not a preference.
 */
@media (max-width: 767.98px) {

	.brxe-form input:not([type="checkbox"]):not([type="radio"]),
	.brxe-form select,
	.brxe-form textarea,
	input[name^="form-field-"],
	select[name^="form-field-"] {
		font-size: 16px !important;
	}
}

/* ---------- product page odds and ends ---------- */

@media (max-width: 767.98px) {

	/* was 58x12 */
	.ref-size-guide {
		display: inline-block;
		padding-block: 6px;
	}
}

/* ---------- iOS zoom, round 2: the rules that lost the cascade ---------- */
/*
 * The 16px block above shipped and did nothing to three of the four fields.
 * Measured at 390px afterwards and they were still 13-15px. Cause was not the
 * media query — it matched — but specificity. `!important` only breaks ties
 * within the same specificity weight; a more specific `!important` still wins:
 *
 *   #brx-footer form.brxe-form input   (1,1,2) !important  beat
 *   .brxe-form input:not(...)          (0,3,1) !important
 *
 * So each one is re-stated here at a weight that actually wins, prefixed with
 * `body` rather than raised to !important-plus-guesswork. Every value below was
 * read back off getComputedStyle in a 390px frame, not assumed.
 *
 * Still 16px for the same reason as before: under 16px, Safari on iOS zooms the
 * whole page on focus and the visitor has to pinch back out. It is a threshold,
 * not a taste call.
 */
@media (max-width: 767.98px) {

	/* newsletter signup, footer — was 13px */
	body #brx-footer form.brxe-form input:not([type="checkbox"]):not([type="radio"]),
	body #brx-footer #f-news-letter input:not([type="checkbox"]):not([type="radio"]) {
		font-size: 16px !important;
	}

	/* product page quantity — was 13px */
	body .quantity input.qty {
		font-size: 16px !important;
	}

	/* header search — was 15px */
	body #brx-header .dgwt-wcas-search-input {
		font-size: 16px !important;
	}

	/* back-in-stock email — was 14px */
	body input.ref-bis-email {
		font-size: 16px !important;
	}
}

/* ---------- two follow-ups from re-measuring after the round-2 block ---------- */
/*
 * Checkout step tabs: padding-block 5px was meant to take 15px to 25px. Measured
 * 47x22 afterwards, because the inline-block line box is shorter than the
 * reported font box. 7px lands it at 26px, clear of the 24px minimum with a
 * little headroom rather than sitting exactly on the line.
 */
@media (max-width: 767.98px) {

	.cfw-tab-link {
		padding-block: 7px !important;
	}
}

/*
 * Pagination links, everywhere — not just the wishlist. The earlier rule was
 * scoped to `.tinv-wishlist`, but blog and archive pagination uses the same
 * `.page-numbers` class and measured 8x24, 9x24, 13x24 and 15x24 at 390px.
 * Height was already fine; it is the width that was short, and the links sit
 * shoulder to shoulder, so a narrow target next to another narrow target is the
 * worst case for a thumb.
 *
 * `a.` and `span.` deliberately, not bare `.page-numbers`: the wrapping
 * `ul.page-numbers` carries the same class and must not get a min-width.
 */
a.page-numbers,
span.page-numbers {
	min-width: 24px;
	padding-inline: 6px;
	text-align: center;
}

/* ---------- mobile nav drawer: full width ---------- */
/*
 * The drawer was opening to 320px in a 386px viewport, leaving a dead 66px
 * strip of dimmed page down the side. Bricks sets that width in
 * `#brxe-ocssyn[data-direction] .brx-offcanvas-inner` under
 * `@media (max-width: 991px)` — specificity (1,1,0) but no `!important`, so a
 * single `!important` here wins without needing to out-specify the ID.
 *
 * Two selectors on purpose. The `:has()` one is ID-independent, so a Bricks
 * edit that regenerates element IDs cannot silently revert this. The ID one is
 * the fallback for any browser without `:has()`. Both are scoped to the
 * offcanvas that actually contains the nav menu — the site has a second
 * offcanvas (`#brxe-igbruc`, the account/help panel, 300px, opens from the
 * left) which is deliberately left alone.
 *
 * Safe to take the whole viewport because the drawer has its own close control:
 * `button.brxe-toggle[aria-label="close"]` at its top right. Verified present
 * and clickable at 390px. Without it, full width would trap the visitor with
 * nothing to tap outside the panel.
 *
 * Phone breakpoint only, not the 991px one the Bricks rule uses. Full width is
 * right on a phone; on a 768-991px tablet it would mean a whole screen of menu
 * nobody asked for, so that range keeps its 320px panel.
 */
@media (max-width: 767.98px) {

	.brxe-offcanvas[data-direction]:has(.brxe-nav-menu) > .brx-offcanvas-inner,
	#brxe-ocssyn[data-direction] > .brx-offcanvas-inner {
		width: 100% !important;
		max-width: 100% !important;
	}

	/* Was 16x26 — under 24px on the narrow axis, and it is now the only way out
	   of a full-screen panel, so it needs to be comfortably hittable. */
	.brxe-offcanvas .brxe-toggle[aria-label="close"] {
		min-width: 28px;
		text-align: center;
	}
}

/* Side cart — Reformation layout
 * ------------------------------------------------------------------
 * WPCode snippet: "Side cart - Reformation layout" · CSS · Site Wide Header
 *
 * CheckoutWC's default empty state centres a large cart glyph with
 * "Your Cart is Empty" beneath it. The reference is quieter: a left-aligned
 * "your bag (0)" heading, a close control opposite it, and one plain
 * sentence underneath.
 *
 * The centred glyph is not a separate empty-state illustration — it is the
 * header's own quantity icon (.cfw-side-cart-quantity-wrap > svg), centred
 * because the header is display:block. Hiding it and making the header a flex
 * row is what produces the reference layout.
 *
 * The count is rendered as a badge and carries .cfw-hidden at zero. The
 * reference shows "(0)", so the badge styling is unwound and the hide is
 * overridden — hence the !important run: these fight CheckoutWC's own
 * stylesheet, which loads after this snippet.
 *
 * Copy is set by the "Header bag" JS snippet, not here, so screen readers get
 * real text rather than generated content.
 *
 * To revert: deactivate this snippet.
 */

/* ---------- header ---------- */

#cfw-side-cart .cfw-side-cart-contents-header {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
/* CheckoutWC gives the header a 24px margin on top of its own padding, so the
   heading sat 48px in while the sentence below sat at 24px. Zeroing the margin
   lines them up. Top padding is dropped too: the .checkoutwc wrapper already
   supplies 24px, and both together left a dead band above the heading. */
	margin: 0 !important;
	padding: 0 24px 14px !important;
	text-align: left !important;
	border-bottom: 0;
}

#cfw-side-cart .cfw-side-cart-quantity-wrap {
	display: flex;
	align-items: baseline;
	position: static;
	font-size: 15px;
	line-height: 1.4;
	color: #111;
}

/* The centred glyph. This is the whole of the "empty cart illustration". */
#cfw-side-cart .cfw-side-cart-quantity-wrap > svg {
	display: none;
}

#cfw-side-cart .cfw-side-cart-quantity-wrap::before { content: 'your bag ('; }
#cfw-side-cart .cfw-side-cart-quantity-wrap::after  { content: ')'; }

/* Unwind the badge: it is a positioned pill by default. */
#cfw-side-cart .cfw-side-cart-quantity,
#cfw-side-cart .cfw-side-cart-quantity.cfw-hidden {
	display: block !important;
	position: static !important;
	top: auto !important;
	right: auto !important;
	background: none !important;
	color: inherit !important;
	font: inherit !important;
	width: auto !important;
	height: auto !important;
	min-width: 0 !important;
	padding: 0 !important;
	margin: 0 !important;
	border: 0 !important;
	border-radius: 0 !important;
	line-height: inherit !important;
}

/* The default close glyph is 24px, which reads heavy beside a 15px heading. */
#cfw-side-cart .cfw-side-cart-close-btn svg {
	width: 15px !important;
	height: 15px !important;
}

#cfw-side-cart .cfw-side-cart-close-btn {
	flex: 0 0 auto;
	background: none;
	border: 0;
	color: #111;
	cursor: pointer;
	padding: 4px;
}

#cfw-side-cart .cfw-side-cart-close-btn:focus-visible {
	outline: 2px solid #111;
	outline-offset: 2px;
}

/* ---------- body ---------- */

#cfw-side-cart .cfw-side-cart-contents {
	text-align: left;
	padding-top: 0;
}

/* CheckoutWC centres and bolds this at 19.2px from its own stylesheet, which
   loads after the snippet — hence !important. Horizontal padding is zeroed so
   the sentence lines up with the heading rather than sitting 28px further in
   on top of the container's own 24px. */
#cfw-side-cart #cfw_empty_side_cart_message {
	margin: 0 !important;
	padding: 0 !important;
	text-align: left !important;
	font-size: 14px !important;
	line-height: 1.5 !important;
	font-weight: 400 !important;
	color: #111 !important;
}

/* ==================================================================
 * Filled state
 * ==================================================================
 * CheckoutWC's defaults are a different design language to the site:
 * 5px and 16px radii, #333 and #999 fills, a grey card around the
 * cross-sell, title case, 16px body. The site is square corners, #111,
 * lowercase, 14px, hairline rules, no filled panels.
 *
 * Measured before changing anything (480px drawer):
 *   item image        60x75, object-fit: FILL   <- distorting the photo
 *   item title        16px / 400
 *   qty stepper       32px tall, 16px radius, #d3d4d5 border
 *   subtotal          16px / 400
 *   checkout button   #333, 5px radius, 47px tall, "Proceed to checkout"
 *   cross-sell card   #f4f4f4, 5px radius, 16/16/32 padding
 *   cross-sell head   16px / 600, centred, "You may also like…"
 *   cross-sell button #999, 5px radius
 */

/* ---------- line item ---------- */

/* object-fit was `fill`, which stretched every thumbnail to the box. */
#cfw-side-cart .cfw-cart-item-image-wrap img {
	width: 68px !important;
	height: 90px !important;
	object-fit: cover !important;
	border-radius: 0 !important;
	background: #ebe9e6;
}

#cfw-side-cart .cfw-cart-item-title,
#cfw-side-cart .cfw-cart-item-title span {
	font-size: 14px !important;
	font-weight: 400 !important;
	line-height: 1.4 !important;
	color: #111 !important;
}

#cfw-side-cart .cfw-cart-item-subtotal,
#cfw-side-cart .cfw-cart-item-subtotal .woocommerce-Price-amount {
	font-size: 14px !important;
	color: #111 !important;
}

/* Square stepper, matching the one on the product page. */
#cfw-side-cart .cfw-quantity-stepper {
	border: 1px solid #d8d5d0 !important;
	border-radius: 0 !important;
	height: 34px !important;
}

#cfw-side-cart .cfw-quantity-stepper-value-label {
	font-size: 13px !important;
	color: #111 !important;
}

#cfw-side-cart .cfw-remove-item-button {
	color: #8d8880 !important;
	transition: color .15s ease;
}

#cfw-side-cart .cfw-remove-item-button:hover {
	color: #111 !important;
}

/* ---------- totals ---------- */

#cfw-side-cart .cfw-side-cart-totals,
#cfw-side-cart .cart-subtotal {
	font-size: 14px !important;
	font-weight: 400 !important;
	color: #111 !important;
}

/* "Subtotal" -> "subtotal". The site is lowercase throughout. */
#cfw-side-cart .cart-subtotal th,
#cfw-side-cart .cart-subtotal td {
	text-transform: lowercase;
	font-weight: 400 !important;
}

/* ---------- checkout button ---------- */

#cfw-side-cart .cfw-primary-btn {
	background: #111 !important;
	border: 0 !important;
	border-radius: 0 !important;
	color: #fff !important;
	height: 52px !important;
	font-size: 14px !important;
	letter-spacing: .04em;
	text-transform: lowercase;
	transition: background .15s ease;
}

#cfw-side-cart .cfw-primary-btn:hover {
	background: #333 !important;
}

#cfw-side-cart .cfw-primary-btn:focus-visible {
	outline: 2px solid #111;
	outline-offset: 2px;
}

/* ---------- cross-sell ---------- */

/* The grey rounded card is the loudest thing in the drawer. Replaced with a
   hairline rule, which is how the rest of the site separates sections. */
#cfw-side-cart .cfw-suggested-products-wrap {
	background: none !important;
	border-radius: 0 !important;
	border-top: 1px solid rgba(17, 17, 17, .12);
	padding: 22px 0 8px !important;
	margin-top: 26px;
}

#cfw-side-cart .cfw-suggested-products-heading {
	font-size: 13px !important;
	font-weight: 400 !important;
	text-align: left !important;
	text-transform: lowercase;
	letter-spacing: .04em;
	color: #55504a !important;
	margin: 0 0 14px !important;
}

#cfw-side-cart .cfw-suggested-products .cfw-secondary-btn,
#cfw-side-cart .cfw-suggested-products a.button,
#cfw-side-cart .cfw-suggested-products-wrap a.button {
	background: #111 !important;
	border: 0 !important;
	border-radius: 0 !important;
	color: #fff !important;
	font-size: 13px !important;
	letter-spacing: .04em;
	text-transform: lowercase;
	height: 40px !important;
	line-height: 40px !important;
	transition: background .15s ease;
}

#cfw-side-cart .cfw-suggested-products .cfw-secondary-btn:hover,
#cfw-side-cart .cfw-suggested-products a.button:hover,
#cfw-side-cart .cfw-suggested-products-wrap a.button:hover {
	background: #333 !important;
}

#cfw-side-cart .cfw-suggested-products img {
	border-radius: 0 !important;
	object-fit: cover !important;
}

/* ==================================================================
 * Mobile
 * ==================================================================
 * Nothing above is behind a min-width query, so the look already carries
 * to mobile — and CheckoutWC itself handles the structure: it takes the
 * drawer to max-width:100% below 768px and re-lays the cart row below
 * 992px. Verified in its own stylesheet rather than assumed.
 *
 * What mobile genuinely needs is touch sizing. At 34px the stepper and
 * 15px the close glyph are comfortable with a mouse and cramped with a
 * thumb — WCAG 2.5.8 asks for 24px minimum and 44px is the practical
 * target.
 *
 * Hit areas are grown with padding and pulled back with equal negative
 * margin, so the tappable box gets bigger without moving anything.
 */

@media (max-width: 767.98px) {

	/* Tighter gutters: 24px each side of a 390px screen is a lot of edge. */
	#cfw-side-cart .cfw-side-cart-contents-header {
		padding: 0 18px 12px !important;
	}

	#cfw-side-cart .cfw-side-cart-contents {
		padding-inline: 18px !important;
	}

	/* 43px tappable, glyph still 15px. */
	#cfw-side-cart .cfw-side-cart-close-btn {
		padding: 14px !important;
		margin: -14px -14px -14px 0 !important;
	}

	#cfw-side-cart .cfw-quantity-stepper {
		height: 42px !important;
	}

	#cfw-side-cart .cfw-quantity-stepper-btn-minus,
	#cfw-side-cart .cfw-quantity-stepper-btn-plus {
		width: 40px !important;
		height: 40px !important;
	}

	#cfw-side-cart .cfw-remove-item-button {
		padding: 12px !important;
		margin: -12px !important;
	}

	#cfw-side-cart .cfw-primary-btn {
		height: 54px !important;
	}

	/* The 46px source file cannot support 68px on a 2x screen. */
	#cfw-side-cart .cfw-cart-item-image-wrap img {
		width: 60px !important;
		height: 78px !important;
	}

	#cfw-side-cart .cfw-suggested-products-wrap {
		margin-top: 20px;
		padding-top: 18px !important;
	}
}

/* Collection filter bar + offcanvas panel
 * 1. FUNCTIONAL: the site <header> is position:sticky at z-index 9999 while
 *    Bricks offcanvas panels are position:fixed at z-index 999. The header
 *    painted over the top ~110px of the filter panel, burying the entire
 *    'length' group - the primary size dimension - so it could not be used.
 *    A modal overlay belongs above the header.
 * 2. LEGIBILITY: the filter triggers sat on a 5px column-gap and read as one
 *    run-on string: 'all filters length style colour fabric'.
 *    The availability checkbox keeps a tight gap to its own label. */
.brx-offcanvas-inner{z-index:10001 !important}
.brx-offcanvas-backdrop{z-index:10000 !important}
.ab-safe-filterbar > div > div{column-gap:24px !important}
.ab-safe-filterbar .brxe-toggle{margin-right:-14px !important}
/* Product page - quantity width + wishlist button
 * SCOPED to the single-product summary only. TI renders the same classes on
 * every product card, so unscoped rules inject the label into the small
 * circular heart on collection and favourites pages. The discriminator is
 * the wrapper position class: summary is tinvwl-woocommerce_after_add_to_cart_button,
 * cards are tinvwl-no-action. A product page carries both. */
.single-product form.cart .quantity{width:100%!important;max-width:100%!important;box-sizing:border-box}
.single-product form.cart .quantity input.qty{flex:1 1 auto!important;width:auto!important;min-width:0;text-align:center}
.single-product form.cart .quantity .action{flex:0 0 48px;width:48px;height:48px;display:flex;align-items:center;justify-content:center;cursor:pointer}
.single-product .tinv-wraper.tinvwl-woocommerce_after_add_to_cart_button{display:block!important;width:100%;height:auto!important;margin:10px 0 22px!important}
.single-product .tinv-wraper.tinvwl-woocommerce_after_add_to_cart_button .tinvwl_add_to_wishlist_button.no-txt{display:flex!important;align-items:center;justify-content:center;gap:.6em;width:100%!important;max-width:100%!important;min-height:52px;padding:0 18px!important;box-sizing:border-box;border:1px solid #111!important;background:#fff;color:#111;font-size:13px;letter-spacing:.06em;text-transform:lowercase;text-decoration:none!important}
.single-product .tinv-wraper.tinvwl-woocommerce_after_add_to_cart_button .tinvwl_add_to_wishlist_button.no-txt::before{position:static!important;left:auto!important;top:auto!important;margin:0!important;display:inline-block;line-height:1;font-size:16px}
.single-product .tinv-wraper.tinvwl-woocommerce_after_add_to_cart_button .tinvwl_add_to_wishlist_button.no-txt::after{content:'add to wishlist';display:inline}
.single-product .tinv-wraper.tinvwl-woocommerce_after_add_to_cart_button .tinvwl_add_to_wishlist_button.no-txt.tinvwl-product-in-list::after{content:'remove from wishlist'}
.single-product .tinv-wraper.tinvwl-woocommerce_after_add_to_cart_button .tinvwl_add_to_wishlist_button.no-txt:hover{background:#111;color:#fff;border-color:#111!important}
.single-product .tinv-wraper.tinvwl-woocommerce_after_add_to_cart_button .tinvwl_add_to_wishlist_button.no-txt:focus-visible{outline:2px solid #111;outline-offset:2px}
.single-product .tinv-wraper.tinvwl-woocommerce_after_add_to_cart_button .tinvwl_add_to_wishlist_button.no-txt.disabled-add-wishlist{opacity:.4;cursor:not-allowed}
.single-product .tinv-wraper.tinvwl-woocommerce_after_add_to_cart_button .tinvwl_add_to_wishlist_button.no-txt.disabled-add-wishlist::after{content:'select a length to save'}
.single-product .tinv-wraper.tinvwl-woocommerce_after_add_to_cart_button .tinvwl-tooltip{display:none}
@media (max-width:767px){
.single-product form.cart .quantity .action{flex:0 0 52px;width:52px;height:52px}
.single-product .tinv-wraper.tinvwl-woocommerce_after_add_to_cart_button .tinvwl_add_to_wishlist_button.no-txt{min-height:56px}
}

/* ------------------------------------------------------------------
   Single-image products: gallery image rendered at half size
   ------------------------------------------------------------------
   The gallery is a flex grid with `.sgg-item { flex: 0 0 50% }`, which is
   right for the usual multi-image product (Baraim has 9). But a product with
   ONE image still gets a 50% column, so it renders at ~307px inside an 882px
   area with the other half blank — e.g. /product/cos-mocha/.

   `:only-child` means this fires solely in the one-image case; every
   multi-image gallery keeps its two-up layout untouched.
*/
/* !important because the gallery plugin's own stylesheet loads after WPCode's
   inline block, so an equal-specificity rule would lose on order. */
.single-product .sgg-grid > .sgg-item:only-child{flex:0 0 100%!important;width:100%!important}

/* ABAYAS BOUTIQUE - Reformation Design Layer v1.6
   Reversible styling layer -> thereformation.com editorial language.
   Rollback: disable this snippet. Scope: presentation only. */

/* NOTE: a broken fragment sat here - an unbalanced quote and an unmatched
   closing paren, left behind when the Montserrat @import was removed during
   the typography consolidation. CSS error recovery swallowed the :root block
   below it, so --ref-sans and --ref-serif were undefined site wide and body
   fell back to Times. Removed. */
/* RESTORED 2026-08-18 (audit).
 *
 * Every colour token below was commented out — 10 commented, 0 live —
 * while only --ref-sans survived. There are 96 var(--ref-*) usages across
 * the site, so all of them were resolving to invalid and being dropped
 * silently. Most visible symptom: the selected size swatch, whose rule is
 *
 *   background: var(--ref-ink) !important;   -> dropped
 *   color: rgb(255,255,255) !important;      -> survived
 *
 * i.e. white text on nothing. Same mechanism behind the white-on-white
 * "Show More" buttons.
 *
 * --ref-serif stays parked deliberately: the note further down explains
 * that defining it put 'Style' and 'Colour' in the filter row into
 * Cormorant while the other four labels did not follow. That is a
 * separate problem and restoring it here would reopen it.
 */
:root{
  --ref-ink:#1a1815;
  --ref-bg:#ffffff;
  --ref-greige:#e7e2d9;
  --ref-greige-lo:#f4f1ea;
  --ref-greige-hi:#d8d2c6;
  --ref-line:#e2ddd4;
  --ref-muted:#8a8073;
  --ref-rust:#a8481f;
  /* RESTORED 2026-08-18. Was parked because defining it flipped only
   * 'Style' and 'Colour' in the filter row to Cormorant. Cause found: those
   * two are Bricks heading elements while Length / Fabric / Availability
   * are plain text elements, and the serif rule targets .brxe-heading.
   * The AUDIT 02 snippet now holds the filter row in sans, so this is safe
   * to turn back on. Tidier long-term fix: add the ab-keep-sans class to
   * those two elements in the builder, or rebuild them as text elements. */
  --ref-serif:'Cormorant Garamond','Times New Roman',Georgia,serif;
  --ref-sans:'Montserrat','Montserrat',Helvetica,Arial,sans-serif;
  --ref-track:.06em;
}

/*
 * --ref-serif is parked too. Defining it put 'Style' and 'Colour' in the
 * filter row into Cormorant Garamond while the other four labels stayed
 * Montserrat. Measured: unsetting it makes all six Montserrat again and the
 * h1 stays Cormorant Garamond, because the h1 is set by a direct rule, not
 * by this variable. So the variable buys nothing and costs consistency.
 *
 * --ref-sans is the only one left live. That is the one that stops body and
 * .brxe-button falling back to Times.
 */

/*
 * WHY MOST OF :root IS COMMENTED OUT.
 *
 * These variables were undefined site wide for weeks - a broken 76-char
 * fragment above this block was swallowing the whole :root rule, so every
 * `var(--ref-*)` reference was invalid and fell back. Fixing that fragment
 * switched the entire design layer back on at once, and the header broke:
 * the promo bar rendered black over the logo row, the logo disappeared, and
 * the filter labels came out at mixed sizes.
 *
 * Isolated it in the page by setting each group to `initial`. The COLOUR and
 * TRACKING variables are what break the header; the two FONT variables are
 * harmless and are what fixes body and .brxe-button falling back to Times.
 *
 * So: font variables live, the rest parked with their values intact. The
 * design layer's colour rules stay inert exactly as they have been, and
 * nothing about the site's appearance changes from what you are used to.
 *
 * TO FINISH THIS PROPERLY: uncomment them a group at a time and fix the
 * header rules that assume them. Not a five-minute job, and not one to do
 * on a live storefront without looking at each step.
 */


/* editorial serif for display headings */
.brxe-heading:not(.ab-keep-sans),
.woocommerce-products-header__title,
.product_title.entry-title, h1.entry-title,
.ab-hero h1, .ab-hero h2{
  font-family:var(--ref-serif)!important; font-weight:400!important;
  letter-spacing:.005em; line-height:1.02; font-optical-sizing:auto;
}
.ab-hero h1,.ab-hero h2,.brxe-heading.ab-display{
  font-size:clamp(2.6rem,8vw,7.5rem)!important; font-weight:300!important;
}

/* UI grotesque baseline */
body,.brxe-text,.brxe-button,.menu,.nav a,
.ab-safe-product-card,.price,.woocommerce-loop-product__title{ font-family:var(--ref-sans); }
body{ color:var(--ref-ink); background:var(--ref-bg); }

/* announcement bar */
.ab-announcement{ background:var(--ref-ink)!important; color:#fff!important; min-height:0!important; }
.ab-announcement,.ab-announcement *{
  font-family:var(--ref-sans)!important; font-size:11px!important;
  letter-spacing:.12em!important; text-transform:uppercase; color:#fff!important;
}
.ab-announcement a{ text-decoration:underline; text-underline-offset:3px; }

/* header + nav */
.ab-desktop-header{ border-bottom:1px solid var(--ref-line); }
.ab-desktop-header a,.brxe-nav-menu a,.menu a{
  font-family:var(--ref-sans)!important; font-size:14px!important;
  letter-spacing:var(--ref-track); text-transform:lowercase; color:var(--ref-ink);
}
.ab-desktop-header a:hover,.menu a:hover{ color:var(--ref-rust); }
.menu .current-menu-item>a,.menu a[aria-current="page"]{ color:var(--ref-rust); }

/* buttons -> hard-edged black */
.brxe-button,.button,.wp-element-button,
.woocommerce a.button,.woocommerce button.button,
button[type="submit"].single_add_to_cart_button,.ab-btn{
  background:var(--ref-ink)!important; color:#fff!important;
  border:1px solid var(--ref-ink)!important; border-radius:0!important;
  font-family:var(--ref-sans)!important; font-size:12px!important;
  letter-spacing:.12em!important; text-transform:lowercase;
  padding:.95em 2.4em!important; transition:background .2s ease,color .2s ease; box-shadow:none!important;
}
.brxe-button:hover,.button:hover,.wp-element-button:hover,
.woocommerce a.button:hover,.woocommerce button.button:hover,.single_add_to_cart_button:hover{
  background:transparent!important; color:var(--ref-ink)!important;
}

/* text links */
.ab-textlink,.ab-hero a.button.is-link,a.ab-underline{
  background:transparent!important; border:0!important; color:var(--ref-ink)!important;
  padding:0!important; text-transform:lowercase; letter-spacing:.12em;
  text-decoration:underline; text-underline-offset:6px; text-decoration-thickness:1px;
}

/* section backgrounds */
.ab-feature,.ab-editorial{ background:var(--ref-greige); }
.ab-feature--tint{ background:var(--ref-greige-lo); }

/* product cards */
.ab-safe-product-grid{ gap:clamp(.5rem,1.4vw,1.4rem)!important; }
.ab-safe-product-card{ background:transparent!important; }
.ab-safe-product-card .ab-safe-product-link{ text-decoration:none; }
.ab-safe-product-card img,.ab-safe-product-card .attachment-woocommerce_thumbnail{
  border-radius:0!important; background:var(--ref-greige-hi); transition:opacity .3s ease;
}
.ab-safe-product-card .woocommerce-loop-product__title,.ab-safe-product-card .ab-product-title{
  font-family:var(--ref-sans)!important; font-size:13px!important; font-weight:500!important;
  letter-spacing:.02em; color:var(--ref-ink)!important; text-transform:none;
  margin:.9rem 0 .2rem!important; text-align:left!important;
}
.ab-safe-product-card .price,.ab-safe-product-card .woocommerce-Price-amount{
  font-family:var(--ref-sans)!important; font-size:13px!important; font-weight:400!important;
  color:var(--ref-muted)!important; text-align:left!important;
}
.ab-safe-product-card .woocommerce-Price-currencySymbol{ margin-right:.15em; }
.ab-safe-product-card [class*="badge"],.ab-safe-product-card .ab-tag{
  background:#fff!important; color:var(--ref-ink)!important; border-radius:0!important;
  font-size:10px!important; letter-spacing:.14em!important; text-transform:uppercase; padding:.35em .7em!important;
}
.ab-safe-product-card .ab-quickadd,.ab-safe-product-card [class*="quick"]{
  border:1px solid var(--ref-ink)!important; background:rgba(255,255,255,.85)!important; color:var(--ref-ink)!important;
}

/* filter / sort bar */
.woocommerce-result-count,.woocommerce-ordering select,.ab-filter-bar,.ab-filter-bar *{
  font-family:var(--ref-sans)!important; font-size:12px!important; letter-spacing:.1em;
  text-transform:uppercase; color:var(--ref-ink);
}
.woocommerce-ordering select{ border:0; border-bottom:1px solid var(--ref-ink); border-radius:0; }

/* single product page */
.product_title.entry-title{ font-size:clamp(1.8rem,3.5vw,3rem)!important; }
.woocommerce div.product p.price,.woocommerce div.product span.price{
  color:var(--ref-ink)!important; font-family:var(--ref-sans)!important; font-weight:400!important;
}
.variable-items-wrapper .variable-item,.wvs-archive-variations-wrapper .variable-item{
  border-radius:0!important; border:1px solid var(--ref-line)!important; box-shadow:none!important;
}
.variable-items-wrapper .variable-item.selected,.variable-items-wrapper .variable-item:hover{
  border-color:var(--ref-ink)!important;
}

/* footer + rules */
.ab-footer,footer{ background:var(--ref-bg); border-top:1px solid var(--ref-line); }
hr,.ab-rule{ border:0; border-top:1px solid var(--ref-line); }

/* focus-visible */
a:focus-visible,button:focus-visible,.brxe-button:focus-visible{ outline:2px solid var(--ref-rust); outline-offset:2px; }


/* ============ v1.1 refinements (pushed live) ============ */

/* product cards: stack name over price, left-aligned (collection + carousel) */
/* beat existing "body.tax-product_cat ... {display:grid!important}" override */
body.tax-product_cat .ab-safe-product-card .ab-safe-product-info.ab-safe-product-info.ab-safe-product-info,
.ab-safe-product-card .ab-safe-product-info{
  display:flex!important; flex-direction:column!important;
  align-items:flex-start!important; gap:.12rem!important;
}
.ab-safe-product-card .ab-safe-product-title{ order:1; }
.ab-safe-product-card .ab-safe-product-price{ order:2; }
.ab-safe-product-card .abx-colour{ order:3; margin-top:.2rem; }
.ab-safe-product-card .ab-safe-product-title{
  font-family:var(--ref-sans)!important; font-size:13px!important; font-weight:500!important;
  letter-spacing:.02em; color:var(--ref-ink)!important; text-transform:none;
  text-align:left!important; margin:.55rem 0 0!important;
}
.ab-safe-product-card .ab-safe-product-price{
  font-family:var(--ref-sans)!important; font-size:13px!important; font-weight:400!important;
  color:var(--ref-muted)!important; text-align:left!important; margin:0!important;
}
.ab-safe-product-card .ab-safe-product-price .woocommerce-Price-amount{
  color:var(--ref-muted)!important; font-weight:400!important;
}

/* homepage hero: oversized bleeding wordmark (Reformation signature) */
/* hook: #brxe-igxabf = first hero section on home (stable Bricks id) */
body.home #brxe-igxabf{ position:relative; overflow:hidden; }
/* hero wordmark: logo image recoloured white (was: text "abayas") */
body.home #brxe-igxabf::before{
  content:""; display:block; position:absolute; top:1.6vw; left:3vw;
  width:88vw; height:19.7vw;
  background:url("https://abayasboutique.com/wp-content/uploads/2025/12/cropped-Abayas-Boutique-logo-2-1024x229-1.webp") no-repeat left top / 100% auto;
  filter:brightness(0) invert(1); opacity:1;
  font-size:0; line-height:0; letter-spacing:normal;
  pointer-events:none; user-select:none; z-index:1;
}
body.home #brxe-igxabf > *{ position:relative; z-index:2; }


/* ================= v1.3: match thereformation.com exactly ================= */

/* HERO WORDMARK: top-left anchored + clipped + heavier (Reformation placement) */
body.home #brxe-igxabf::before{
  top:-.06em!important; left:-.6vw!important; right:auto!important;
  font-weight:700!important; font-size:17vw!important; line-height:1!important;
  opacity:1!important; letter-spacing:-.035em!important; text-align:left!important;
}

/* PRODUCT PRICE: dark ink + space after currency symbol ("£ 168") */
.ab-safe-product-card .ab-safe-product-price,
.ab-safe-product-card .ab-safe-product-price .woocommerce-Price-amount{
  color:var(--ref-ink)!important; font-weight:400!important;
}
.ab-safe-product-card .woocommerce-Price-currencySymbol{ margin-right:.28em!important; }

/* ANNOUNCEMENT BAR: left-aligned, sentence case (Reformation) */
.ab-announcement{ text-align:left!important; }
.ab-announcement, .ab-announcement *{ text-transform:none!important; letter-spacing:.02em!important; }
.ab-announcement > *, .ab-announcement .brxe-container{ justify-content:flex-start!important; }

/* v1.3a: force announcement content flush-left (container has max-width + auto margins) */
.ab-announcement .brxe-container{
  margin-left:0!important; margin-right:auto!important;
  max-width:none!important; width:100%!important;
  padding-left:clamp(1rem,4vw,2.4rem)!important;
}

/* v1.3b: splide announcement slider — left-align each rotating slide */
.ab-announcement .splide__slide{
  justify-content:flex-start!important;
  padding-left:clamp(1rem,4vw,2.4rem)!important;
}

/* v1.3c: align-items — announcement slider is a vertical (ttb) column flex */
.ab-announcement .splide__slide{ align-items:flex-start!important; }


/* ==================== v1.4: interactive polish ==================== */

/* --- Mega-menu / dropdown panels --- */
.brx-dropdown-content{
  border-radius:0!important;
  border-top:1px solid var(--ref-line)!important;
  box-shadow:0 16px 30px rgba(26,24,21,.07)!important;
}
.brx-dropdown-content a, .brx-dropdown-content .brxe-text-link{
  text-transform:lowercase!important; letter-spacing:.03em;
  color:var(--ref-ink)!important; text-decoration:none;
}
.brx-dropdown-content a:hover, .brx-dropdown-content .brxe-text-link:hover{ color:var(--ref-rust)!important; }

/* --- PDP size swatches --- */
.bricks-variation-swatches li{
  border:1px solid var(--ref-line)!important; border-radius:0!important;
  font-family:var(--ref-sans)!important; letter-spacing:.03em; color:var(--ref-ink)!important;
  transition:border-color .15s ease, background .15s ease, color .15s ease;
}
.bricks-variation-swatches li:hover{ border-color:var(--ref-ink)!important; }
.bricks-variation-swatches li.bricks-swatch-selected{
  background:var(--ref-ink)!important; color:#fff!important; border-color:var(--ref-ink)!important;
}
.bricks-variation-swatches li.nm-oos{ color:var(--ref-muted)!important; }

/* --- PDP quantity stepper --- */
.quantity{ border:1px solid var(--ref-line)!important; border-radius:0!important; }
.quantity input.qty{ border:0!important; background:transparent!important; font-family:var(--ref-sans)!important; font-size:13px!important; }
.quantity .action, .quantity .plus, .quantity .minus{ color:var(--ref-ink)!important; }

/* --- PDP accordion (fit & details, shipping, etc.) --- */
.brxe-accordion-nested .accordion-title-wrapper{
  font-family:var(--ref-sans)!important; text-transform:lowercase; letter-spacing:.05em;
  border-top:1px solid var(--ref-line);
}

/* --- Cart offcanvas drawer + mini-cart --- */
.brxe-offcanvas{ background:var(--ref-bg); }
.woocommerce-mini-cart__total, .widget_shopping_cart p.total{
  font-family:var(--ref-sans)!important; border-top:1px solid var(--ref-line)!important; padding-top:1rem;
}
li.mini_cart_item, .woocommerce-mini-cart__item{ border-bottom:1px solid var(--ref-line)!important; }
.woocommerce-mini-cart .amount, .custom-minicart-header .amount{ color:var(--ref-ink)!important; }
a.remove, .remove_from_cart_button{ border-radius:0!important; color:var(--ref-ink)!important; }

/* --- Micro-polish --- */
.brxe-nav-menu a, .menu a, footer a{ text-transform:lowercase; }
a{ transition:color .15s ease; }
footer input[type="email"], .newsletter input[type="email"]{
  border:0!important; border-bottom:1px solid var(--ref-ink)!important; border-radius:0!important;
  background:transparent!important; font-family:var(--ref-sans)!important; letter-spacing:.03em;
}
.dgwt-wcas-search-input{ border-radius:0!important; }


/* =============================== v1.5: mobile slide-out menu ================ */
#menu-mobile-menu.bricks-nav-menu > li.menu-item{ border-bottom:1px solid var(--ref-line)!important; }
#menu-mobile-menu.bricks-nav-menu > li.menu-item:last-child{ border-bottom:0!important; }
#menu-mobile-menu.bricks-nav-menu > li.menu-item > a,
#menu-mobile-menu.bricks-nav-menu > li.menu-item > .brxe-div > a{
  font-family:var(--ref-sans)!important; font-size:17px!important; letter-spacing:.01em;
  text-transform:lowercase; padding-top:1rem!important; padding-bottom:1rem!important;
}
#menu-mobile-menu .sub-menu a, #menu-mobile-menu .brx-dropdown-content a{
  font-size:14px!important; padding-top:.5rem!important; padding-bottom:.5rem!important;
}


/* ===================== v1.6: footer oversized wordmark ===================== */
footer#brx-footer{ position:relative; overflow:hidden; }
footer#brx-footer::after{
  /* 2026-08-20: was live text - content:"abayas" set in --ref-sans, then
     briefly --ref-serif. Neither matched, because the hero wordmark is not
     type at all: it is logo artwork (cropped-Abayas-Boutique-logo-2-1024x229-1.webp),
     drawn in a typeface the site does not load. Any font here is an
     approximation of a picture.
     So the footer now uses the same artwork the hero uses. It is applied as
     an alpha mask rather than a background-image, so the fill still comes
     from CSS (currentColor) - AUDIT 06 sets color:#fff on this pseudo for
     the dark footer, and a future light footer flips it back with no change
     here. The hero does the same job with filter:brightness(0) invert(1),
     which hard-codes white; mask keeps it token-driven. */
  content:""; display:block; width:100%; aspect-ratio:1024/229;
  background-color:currentColor;
  -webkit-mask:url("https://abayasboutique.com/wp-content/uploads/2025/12/cropped-Abayas-Boutique-logo-2-1024x229-1.webp") center top/100% auto no-repeat;
          mask:url("https://abayasboutique.com/wp-content/uploads/2025/12/cropped-Abayas-Boutique-logo-2-1024x229-1.webp") center top/100% auto no-repeat;
  color:var(--ref-ink); opacity:.06; margin:2rem 0 0; pointer-events:none;
}


/* =============================================================================
   v1.7 — CART / CHECKOUT FUNNEL
   Notices (site-wide) -> monochrome; CheckoutWC fields hard-edged (via #cfw +
   stable Woo field ids to beat ID/!important rules), ink focus, accent LINKS
   recoloured ink/rust. Buttons/type/layout/flow untouched. Reversible.
   ========================================================================== */
.woocommerce-info, .woocommerce-message, .woocommerce-noreviews,
.woocommerce-error, ul.woocommerce-error {
  background: var(--ref-greige-lo) !important;
  border-radius: 0 !important;
  border: 0 !important;
  border-left: 3px solid var(--ref-ink) !important;
  color: var(--ref-ink) !important;
  box-shadow: none !important;
  font-family: var(--ref-sans) !important;
}
.woocommerce-error, ul.woocommerce-error { border-left-color: var(--ref-rust) !important; }
.woocommerce-info::before, .woocommerce-message::before { color: var(--ref-ink) !important; }
.woocommerce-error::before { color: var(--ref-rust) !important; }
.woocommerce-info a, .woocommerce-message a {
  color: var(--ref-ink) !important; text-decoration: underline; text-underline-offset: 3px;
}
.woocommerce-info a:hover, .woocommerce-message a:hover { color: var(--ref-rust) !important; }

body.checkout-wc #cfw .input-text,
body.checkout-wc #cfw input[type="text"], body.checkout-wc #cfw input[type="email"],
body.checkout-wc #cfw input[type="tel"], body.checkout-wc #cfw input[type="number"],
body.checkout-wc #cfw input[type="password"], body.checkout-wc #cfw input[type="search"],
body.checkout-wc #cfw select, body.checkout-wc #cfw textarea,
body.checkout-wc #cfw #shipping_country, body.checkout-wc #cfw #billing_country,
body.checkout-wc #cfw #shipping_state, body.checkout-wc #cfw #billing_state,
body.checkout-wc #cfw select.country_select, body.checkout-wc #cfw select.state_select {
  border-radius: 0 !important;
}
body.checkout-wc #cfw .input-text:focus, body.checkout-wc #cfw select:focus,
body.checkout-wc #cfw textarea:focus {
  border-color: var(--ref-ink) !important; box-shadow: none !important; outline: none;
}

body.checkout-wc a.cfw-small, body.checkout-wc a.cfw-add-field,
body.checkout-wc a.cfw-prev-tab, body.checkout-wc a.cfw-next-tab,
body.checkout-wc a.cfw-display-table-row, body.checkout-wc a.cfw-show-coupons-module,
body.checkout-wc a[class*="cfw-return"], body.checkout-wc a.scs-popup-changelink,
body.checkout-wc a.abx2-view, body.checkout-wc a.cfw-link {
  color: var(--ref-ink) !important;
}
body.checkout-wc a.cfw-small:hover, body.checkout-wc a.cfw-add-field:hover,
body.checkout-wc a.cfw-prev-tab:hover, body.checkout-wc a.cfw-show-coupons-module:hover,
body.checkout-wc a[class*="cfw-return"]:hover, body.checkout-wc a.scs-popup-changelink:hover,
body.checkout-wc a.abx2-view:hover { color: var(--ref-rust) !important; }


/* v1.9 — MOBILE quick-add removal + shop-by-colour menu slider */
@media (hover: none) { .ab-safe-product-card .abx-qa { display: none !important; } }
.ref-colour-menu { padding: 1.1rem 1.2rem .2rem; margin-top: .4rem; border-top: 1px solid var(--ref-line); }
.ref-colour-menu-label { font: 400 12px/1 var(--ref-sans) !important; letter-spacing: .12em; text-transform: lowercase; color: var(--ref-muted); margin-bottom: .85rem; }
/* v2.2 fix: min-width:0 lets the colour section shrink to the offcanvas panel\n   width so the swatch track scrolls instead of overflowing on mobile. */
.ref-colour-menu, .ref-colour-track { min-width: 0; max-width: 100%; box-sizing: border-box; }
.ref-colour-track { display: flex; gap: 1.05rem; overflow-x: auto; -webkit-overflow-scrolling: touch; padding-bottom: .55rem; scrollbar-width: none; }
.ref-colour-track::-webkit-scrollbar { display: none; }
.ref-colour-swatch { flex: 0 0 auto; display: flex; flex-direction: column; align-items: center; gap: .45rem; text-decoration: none !important; }
.ref-colour-dot { width: 34px; height: 34px; border-radius: 50%; display: block; border: 1px solid rgba(26,24,21,.14); transition: transform .15s ease; }
.ref-colour-swatch:hover .ref-colour-dot, .ref-colour-swatch:active .ref-colour-dot { transform: scale(1.08); }
.ref-colour-name { font: 400 11px/1 var(--ref-sans); letter-spacing: .02em; text-transform: lowercase; color: var(--ref-ink); white-space: nowrap; }


/* v2.0 — PDP 'size guide' link (top-right of the size label, Reformation) */
.single-product th.label.ref-has-size-guide { position: relative !important; }
a.ref-size-guide { position: absolute; top: 0; right: 0; font: 400 12px/1 var(--ref-sans) !important; letter-spacing: .04em; text-transform: lowercase; color: var(--ref-ink) !important; text-decoration: underline; text-underline-offset: 3px; white-space: nowrap; }
a.ref-size-guide:hover { color: var(--ref-rust) !important; }

/* v2.1 — consistent "£ 00.00" spacing after the currency symbol (Reformation). */
.woocommerce-Price-currencySymbol { margin-right: .22em; }

/* v2.3 — sticky PDP add-to-cart bar hides at the footer (paired with JS observer). */
.ref-sticky-atc.ref-at-footer { transform: translateY(105%) !important; }

/* v2.4 — HERO WORDMARK SCROLL ANIMATION (parallax + fade, driven by JS via vars). */
body.home #brxe-igxabf::before {
  transform: translateY(var(--ab-hero-y, 0px)) scale(var(--ab-hero-scale, 1)) !important;
  /* opacity intentionally NOT driven by --ab-hero-op any more: the wordmark
     is meant to be fully opaque. The JS still sets that variable and the
     parallax translate/scale below still uses its siblings, so the scroll
     motion is unchanged - only the fade is gone. */
  transform-origin: left top;
  will-change: transform, opacity;
}


/* =============================================================================
   v2.5 — MENU-STRIP + MEGA-MENU + MOBILE SCROLL + FOOTER SUBSCRIBE
   Five reversible, CSS-only fixes bundled together.
   ========================================================================== */

/* (1) Footer subscribe button no longer clips ("subscri" -> "subscribe") */
footer .brxe-form, .brxe-footer .brxe-form { overflow: visible !important; flex-wrap: nowrap !important; }
footer .brxe-form .form-group:not(.submit-button-wrapper),
.brxe-footer .brxe-form .form-group:not(.submit-button-wrapper) { flex: 1 1 0 !important; min-width: 0 !important; }
footer .brxe-form .form-group:not(.submit-button-wrapper) input,
.brxe-footer .brxe-form .form-group:not(.submit-button-wrapper) input { min-width: 0 !important; }
footer .brxe-form .submit-button-wrapper,
.brxe-footer .brxe-form .submit-button-wrapper { flex: 0 0 auto !important; width: auto !important; overflow: visible !important; }
footer .brxe-form .submit-button-wrapper .bricks-button,
.brxe-footer .brxe-form .submit-button-wrapper .bricks-button {
  letter-spacing: .06em !important; padding-left: 16px !important; padding-right: 16px !important;
  min-width: 0 !important; width: auto !important; white-space: nowrap !important; overflow: visible !important;
}

/* (2) Colour swatch slider actually pans on touch (mobile menu) */
.ref-colour-track { width: 100%; touch-action: pan-x; overscroll-behavior-x: contain; }

/* (3) PDP size chips -> horizontal scroll container (like the colours) */
.bricks-variation-swatches {
  flex-wrap: nowrap !important; overflow-x: auto !important; -webkit-overflow-scrolling: touch;
  touch-action: pan-x; overscroll-behavior-x: contain; scrollbar-width: none;
}
.bricks-variation-swatches::-webkit-scrollbar { display: none; }
.bricks-variation-swatches li { flex: 0 0 auto !important; }

/* (4) Mega-menu link hover, uniform across every link type (rust + underline).
   Matches the theme rule's ID specificity so every dropdown link hovers alike. */
#brx-header .brx-dropdown-content a,
#brx-header .brx-dropdown-content a.brxe-text-link {
  text-decoration: none !important; transition: color .15s ease !important;
}
#brx-header .brx-dropdown-content a:hover,
#brx-header .brx-dropdown-content a.brxe-text-link:hover {
  color: var(--ref-rust) !important;
  text-decoration: underline !important; text-decoration-thickness: 1px !important; text-underline-offset: 4px !important;
}

/* (5) Header nav strip -> Reformation cadence (lighter, airier, tight tracking) */
#brxe-mdhthq .brxe-nav-nested > ul, #brxe-mdhthq nav > ul { gap: 26px !important; }
#brx-header #brxe-mdhthq a { font-weight: 400 !important; letter-spacing: .01em !important; font-size: 14px !important; }
#brxe-mdhthq { padding-bottom: 14px !important; }


/* =============================================================================
   v2.6 — STOCK NOTICES on-brand (green/red -> rust/muted) */
.stock.in-stock { color: var(--ref-rust) !important; font-family: var(--ref-sans) !important; letter-spacing: .08em !important; }
.stock.out-of-stock { color: var(--ref-muted) !important; font-family: var(--ref-sans) !important; letter-spacing: .08em !important; }


/* =============================================================================
   v2.7 — FIX checkout primary buttons (low-contrast regression).
   v1.7 wrongly grouped a.cfw-next-tab / a.cfw-prev-tab (PRIMARY step buttons)
   into the ink-link recolor, rendering the label ink-on-#333. Restore white
   labels + site-ink fill on all primary buttons. */
html body.checkout-wc a.cfw-primary-btn,
html body.checkout-wc button.cfw-primary-btn,
html body.checkout-wc a.cfw-primary-btn.cfw-next-tab,
html body.checkout-wc a.cfw-primary-btn.cfw-prev-tab {
  background-color: #1a1815 !important; border-color: #1a1815 !important; color: #fff !important;
}
html body.checkout-wc a.cfw-primary-btn:hover,
html body.checkout-wc button.cfw-primary-btn:hover,
html body.checkout-wc a.cfw-primary-btn.cfw-next-tab:hover,
html body.checkout-wc a.cfw-primary-btn.cfw-prev-tab:hover {
  background-color: #333333 !important; border-color: #333333 !important; color: #fff !important;
}


/* =============================================================================
   v2.8 — JOURNAL (single blog post) READABILITY: constrain body copy to a
   centred ~44rem measure (was full ~1080px width). Bricks post-body block. */
body.single-post #brxe-bydbmy .brxe-text {
  max-width: none !important;
  padding-left:  max(1.2rem, calc((100% - 44rem) / 2)) !important;
  padding-right: max(1.2rem, calc((100% - 44rem) / 2)) !important;
  box-sizing: border-box !important;
}


/* =============================================================================
   v2.9 — A11Y: out-of-stock size chip contrast (was #8a8073 ~3.9:1 on white,
   below WCAG AA). Darken to a muted brown that clears ~5:1; strikethrough
   already conveys the OOS state without relying on colour. */
.bricks-variation-swatches li.nm-oos { color: #756c5e !important; }

/* =============================================================================
   v3.0 — PDP IMAGE ZOOM lightbox (paired with reformation-interactions.js v2.3).
   Full-screen viewer opened by clicking a gallery image; click the enlarged
   image to magnify (transform-origin follows the pointer for pan). Presentation
   only; the JS builds the .ref-zoom-overlay node. Rollback: toggle either
   snippet off.
   ========================================================================== */
.ref-zoom-overlay{
  position:fixed; inset:0; z-index:100000;
  background:rgba(26,24,21,.94);
  display:none; align-items:center; justify-content:center;
  opacity:0; transition:opacity .2s ease;
}
.ref-zoom-overlay.is-open{ display:flex; opacity:1; }
.ref-zoom-stage{
  width:92vw; height:92vh;
  display:flex; align-items:center; justify-content:center; overflow:hidden;
}
.ref-zoom-img{
  max-width:92vw; max-height:92vh;
  object-fit:contain; transform:scale(1); transform-origin:50% 50%;
  transition:transform .18s ease; cursor:zoom-in;
  user-select:none; -webkit-user-drag:none;
}
.ref-zoom-img.is-zoomed{ transform:scale(2.4); cursor:zoom-out; }
.ref-zoom-close, .ref-zoom-nav{
  position:absolute; background:transparent; border:0; color:#fff;
  cursor:pointer; z-index:2; line-height:1; opacity:.85;
  transition:opacity .15s ease; font-family:inherit;
}
.ref-zoom-close:hover, .ref-zoom-nav:hover{ opacity:1; }
.ref-zoom-close{ top:16px; right:22px; font-size:34px; width:44px; height:44px; }
.ref-zoom-nav{ top:50%; transform:translateY(-50%); font-size:46px; width:56px; height:76px; }
.ref-zoom-prev{ left:10px; } .ref-zoom-next{ right:10px; }
.ref-zoom-counter{
  position:absolute; bottom:18px; left:50%; transform:translateX(-50%);
  color:#fff; font-size:12.5px; letter-spacing:.1em; opacity:.8;
}
@media (max-width:768px){
  .ref-zoom-close{ top:8px; right:10px; font-size:30px; }
  .ref-zoom-nav{ font-size:36px; width:44px; }
  .ref-zoom-img.is-zoomed{ transform:scale(2.6); }
}

/* =============================================================================
   v3.1 — PDP CONVERSION BOOSTERS (paired with interactions v2.4).
   Low-stock urgency line, estimated-delivery line, and a hairline row of
   trust badges under the add-to-cart. Presentation only; JS builds the nodes.
   Rollback: toggle either snippet off.
   ========================================================================== */
.ref-low-stock{
  margin:0 0 12px; font:600 12.5px/1.4 Montserrat,sans-serif;
  letter-spacing:.05em; text-transform:uppercase; color:#a8481f;
}
.ref-assurance{ margin:18px 0 4px; }
.ref-assurance .ref-eta{
  margin:0 0 14px; font:400 13.5px/1.5 Montserrat,sans-serif; color:#1a1815;
}
.ref-assurance .ref-eta b{ font-weight:600; }
.ref-assurance .ref-badges{
  list-style:none; margin:0; padding:14px 0 0; border-top:1px solid #e2ddd4;
  display:flex; flex-wrap:wrap; gap:9px 20px;
}
.ref-assurance .ref-badges li{
  position:relative; padding-left:17px;
  font:400 12px/1.35 Montserrat,sans-serif; letter-spacing:.02em; color:#6b6156;
}
.ref-assurance .ref-badges li::before{
  content:""; position:absolute; left:1px; top:3px; width:8px; height:5px;
  border-left:1.5px solid #a8481f; border-bottom:1.5px solid #a8481f;
  transform:rotate(-45deg); box-sizing:border-box;
}
@media (max-width:600px){ .ref-assurance .ref-badges{ gap:8px 15px; } }

/* =============================================================================
   v3.2 — PDP CROSS-SELL rows (paired with interactions v2.5).
   Horizontal 4-up card carousel for "You may also like" / "Recently viewed".
   Presentation only; JS builds the nodes from the Store API.
   Rollback: toggle either snippet off.
   ========================================================================== */
.ref-xs-wrap{ max-width:1200px; margin:0 auto; padding:0 1.4rem; }
.ref-xs-row{ margin:52px 0; }
.ref-xs-title{
  font-family:Cormorant Garamond,serif; font-weight:400; font-size:26px; line-height:1.1;
  color:#1a1815; margin:0 0 22px; letter-spacing:.004em;
}
.ref-xs-track{
  display:flex; gap:20px; overflow-x:auto; padding-bottom:8px;
  scroll-snap-type:x mandatory; -webkit-overflow-scrolling:touch;
  scrollbar-width:thin;
}
.ref-xs-card{
  flex:0 0 auto; width:calc((100% - 60px)/4); min-width:200px;
  scroll-snap-align:start; text-decoration:none; color:#1a1815;
}
.ref-xs-imgwrap{
  aspect-ratio:4/5; background:#f4f1ea; overflow:hidden; margin-bottom:12px;
}
.ref-xs-imgwrap img{
  width:100%; height:100%; object-fit:cover; display:block;
  transition:transform .5s ease;
}
/* hover zoom removed at request */
.ref-xs-card:hover .ref-xs-imgwrap img{ transform:none; }
.ref-xs-name{ font-family:Cormorant Garamond,serif; font-size:15px; line-height:1.3; margin-bottom:4px; }
.ref-xs-price{ font-family:Montserrat,sans-serif; font-size:13px; color:#6b6156; }
.ref-xs-price ins{ text-decoration:none; color:#a8481f; }
.ref-xs-price del{ opacity:.55; margin-right:6px; }
@media (max-width:600px){
  .ref-xs-title{ font-size:22px; }
  .ref-xs-card{ width:46vw; min-width:0; }
  .ref-xs-row{ margin:40px 0; }
}

/* =============================================================================
   v3.3 — BACK-IN-STOCK notify-me form (paired with interactions v2.6).
   Shown on sold-out variations. Presentation only; JS builds the node.
   Rollback: toggle either snippet off.
   ========================================================================== */
.ref-bis{ margin:14px 0 4px; padding:16px 18px; background:#f4f1ea; border:1px solid #e2ddd4; }
.ref-bis-lead{ margin:0 0 12px; font:600 13px/1.4 Montserrat,sans-serif; letter-spacing:.02em; color:#1a1815; }
.ref-bis-form{ display:flex; gap:10px; }
.ref-bis-email{
  flex:1 1 auto; min-width:0; padding:11px 12px; border:1px solid #d8d2c6; background:#fff;
  font:400 14px Montserrat,sans-serif; color:#1a1815; border-radius:0;
}
.ref-bis-email:focus{ outline:none; border-color:#1a1815; }
.ref-bis-hp{ position:absolute; left:-9999px; width:1px; height:1px; }
.ref-bis-btn{
  flex:0 0 auto; background:#1a1815; color:#fff; border:1px solid #1a1815; padding:0 22px;
  font:400 12px Montserrat,sans-serif; letter-spacing:.12em; text-transform:lowercase; cursor:pointer; transition:.2s;
}
.ref-bis-btn:hover{ background:transparent; color:#1a1815; }
.ref-bis-btn:disabled{ opacity:.6; cursor:default; }
.ref-bis-note{ margin:10px 0 0; font:400 11.5px/1.4 Montserrat,sans-serif; color:#8a8073; }
.ref-bis-msg{ margin:10px 0 0; font:400 13px/1.4 Montserrat,sans-serif; }
.ref-bis-msg.is-ok{ color:#1a1815; }
.ref-bis-msg.is-err{ color:#a8481f; }
@media (max-width:600px){ .ref-bis-form{ flex-wrap:wrap; } .ref-bis-btn{ width:100%; padding:12px; } }

/* =============================================================================
   v3.4 — Fix "We're cute too" related grid leaving an empty 4th column.
   The Bricks related-products grid is hard-set to 4 columns, but WooCommerce
   returns only 3 related items → one empty cell → a large gap on the right.
   auto-fit collapses empty tracks so the items always fill the row (3→3-up,
   4→4-up). Scoped to the product page; reversible with the snippet.
   ========================================================================== */
body.single-product .pm-products-grid{
  grid-template-columns:repeat(auto-fit,minmax(240px,1fr))!important;
}

/* =============================================================================
   v3.5 — A11Y contrast fixes (axe-core, WCAG AA). Three muted greys fell below
   4.5:1 for normal text and are darkened here:
     • .ref-bis-note        — #8a8073 on greige (~3:1)  → #635a4e (~6:1)
     • .stock.out-of-stock  — #8a8073 on white  (~3.9:1)→ #6b6156 (~6:1)
     • OOS size swatch       — the theme fades it to opacity .6, which drops the
       effective contrast below AA; restore full opacity (the strikethrough still
       conveys the sold-out state) and use an AA-passing muted brown.
   Presentation only; rollback = toggle the snippet off.
   ========================================================================== */
.ref-bis-note{ color:#635a4e !important; }
.stock.out-of-stock{ color:#6b6156 !important; }
.bricks-variation-swatches li.nm-oos{ opacity:1 !important; color:#6b6156 !important; }

/* =============================================================================
   v3.6 — Tighten product-grid card spacing to match thereformation.com.
   Reformation's PLP grid is near-flush (column-gap 1px, row-gap 0). Abayas was
   23px / 51px. Tighten to a small column gap with modest vertical rhythm so the
   product title/price don't collide with the next row's image.
   Scope: the main product/collection/search grid.
   ========================================================================== */
.ab-safe-product-grid{
  column-gap:2px !important;
  row-gap:18px !important;
}

/* =============================================================================
   v3.8 — Authoritative product-grid gap (supersedes the conflicting legacy
   .ab-safe-product-grid gap rules: 12px/10px, 30px/2px, clamp, 18px/2px…).
   Higher specificity (.brx-grid.ab-safe-product-grid) + placed last so it wins
   on EVERY product grid — collection, search AND the homepage "keep your cool"
   rows — giving one consistent near-flush spacing to match thereformation.com.
   ========================================================================== */
#brx-content .brx-grid.ab-safe-product-grid{
  column-gap:2px !important;
  row-gap:18px !important;
}

/* =============================================================================
   v4.0 — De-duplicate the sold-out "Notify Me" buttons.
   On an out-of-stock variation the theme swaps add-to-cart for its own prominent
   #nm-notify-btn ("Notify Me") — but that button has no working handler. Our
   back-in-stock form (.ref-bis, JS v2.6) already provides the real email capture
   with its own button right below, so two "notify me" buttons showed. Hide the
   theme's dead one, leaving a single working notify-me flow. (#nm-notify-btn only
   renders on OOS variations, so this is safe.) Rollback: toggle the snippet off.
   ========================================================================== */
#nm-notify-btn{ display:none !important; }

/* =============================================================================
   v4.1 — Remove the duplicate sold-out sentence on variable products.
   With the theme's dead #nm-notify-btn hidden (v4.0) and our back-in-stock form
   (.ref-bis) providing its own "This size is sold out — get an email…" lead, the
   theme's variation OOS paragraph ("This product is currently out of stock. Click
   the button below…") is now redundant. Hide ONLY the variation-scoped message so
   it reads as one clean message; simple-product "Out of stock" text elsewhere and
   in-stock messages are untouched. Rollback: toggle the snippet off.
   ========================================================================== */
.woocommerce-variation-availability .stock.out-of-stock{ display:none !important; }

/* =============================================================================
   v4.2 — Fix collection grid pulled left on wide screens ("random space on the
   right"). A legacy full-bleed hack sets  margin-left:calc(50% - 50vw);
   width:100vw  on .ab-safe-product-grid, but a higher-specificity ID rule forces
   width back to 100%. Result: the grid is pulled left (negative margin) WITHOUT
   being widened, so on wide viewports it sits far left with a big empty right
   band. Neutralise the negative margin so the grid sits centred within the site's
   max-width container, aligned with the filter bar and header. Rollback: toggle off.
   ========================================================================== */
#brx-content .brx-grid.ab-safe-product-grid{
  margin-left:0 !important;
  margin-right:0 !important;
  width:100% !important;
  max-width:100% !important;
}

/* =============================================================================
   v4.3 — Make the collection grid/tile column toggle work.
   The toolbar's 2/4-column buttons set body.pm-cols-2 / body.pm-cols-4, and the
   theme ships .pm-cols-2 .brx-grid{...} rules — but a higher-specificity legacy
   !important 4-column rule overrode them, so the toggle appeared dead. Re-assert
   each state at higher specificity so the toggle actually switches columns.
   Desktop-scoped (the toolbar is desktop-only) so mobile keeps its responsive grid.
   Rollback: toggle the snippet off.
   ========================================================================== */
@media (min-width:992px){
  body.pm-cols-2 #brx-content .brx-grid.ab-safe-product-grid{
    grid-template-columns:repeat(2,minmax(0,1fr)) !important;
  }
  body.pm-cols-4 #brx-content .brx-grid.ab-safe-product-grid{
    grid-template-columns:repeat(4,minmax(0,1fr)) !important;
  }
}

/* =============================================================================
   v4.4 — Fix clipped cart count badge in the header ("the cart icon is clipped").
   The mini-cart wrapper (.brxe-woocommerce-mini-cart) carries overflow-x:clip.
   The little count bubble sits at the icon's top-right and extends a few px past
   the wrapper's own box, so its right edge was being sliced off (visible as a
   flat-sided badge). Allow the badge to overflow the wrapper. The badge's right
   edge measures well within the viewport (~1639px of 1680px), so nothing spills
   off-screen. Header-scoped to the cart element only. Rollback: toggle off.
   ========================================================================== */
body.tax-product_cat .brxe-woocommerce-mini-cart#brxe-kwhnox{ overflow:visible !important; overflow-x:visible !important; }

/* =============================================================================
   v4.5 — Add-to-basket "needs a size" feedback (PDP conversion fix).
   WooCommerce flags the button .wc-variation-selection-needed / .disabled until
   a length is chosen, but it still looked fully active — clicking it did nothing
   with no explanation, so shoppers thought it was broken. Make that state
   visibly disabled; the JS layer swaps the label to "select your length" and,
   if clicked early, scrolls to + flashes the size picker. Rollback: toggle off.
   ========================================================================== */
.single_add_to_cart_button.wc-variation-selection-needed,
.single_add_to_cart_button.disabled{
  opacity:.5 !important;
  cursor:not-allowed !important;
}
.ab-size-flash{ animation: abSizeFlash 1s ease; }
@keyframes abSizeFlash{
  0%,100%{ box-shadow:0 0 0 0 rgba(0,0,0,0); }
  30%{ box-shadow:0 0 0 3px rgba(0,0,0,.5); }
}

/* =============================================================================
   v4.6 — Size guide as a modal overlay (Reformation-style).
   The PDP "size guide" link navigated away to /size-guide/. Open it in a modal
   over the product instead. Content is pulled from that page's .ab-legal-content
   so it stays a single source of truth. Progressive enhancement: if JS or the
   fetch fails, the link still navigates to the page. Rollback: toggle off.
   ========================================================================== */
.ab-sg-overlay{
  position:fixed; inset:0; z-index:100000;
  background:rgba(26,24,21,.45);
  display:flex; align-items:center; justify-content:center; padding:20px;
  opacity:0; visibility:hidden; transition:opacity .25s ease, visibility .25s ease;
}
.ab-sg-overlay.ab-sg-open{ opacity:1; visibility:visible; }
.ab-sg-panel{
  background:#fff; max-width:720px; width:100%; max-height:86vh; overflow:auto;
  position:relative; padding:44px 46px;
  box-shadow:0 24px 70px rgba(0,0,0,.28);
  transform:translateY(14px); transition:transform .25s ease;
}
.ab-sg-overlay.ab-sg-open .ab-sg-panel{ transform:none; }
.ab-sg-close{
  position:absolute; top:14px; right:18px;
  background:none; border:0; font-size:28px; line-height:1; cursor:pointer; color:#1a1815;
}
.ab-sg-close:hover{ opacity:.6; }
.ab-sg-body h1,.ab-sg-body h2,.ab-sg-body h3{ font-family:inherit; margin:1.1em 0 .4em; }
.ab-sg-body h1:first-child,.ab-sg-body h2:first-child,.ab-sg-body h3:first-child{ margin-top:0; }
.ab-sg-body table{ width:100%; border-collapse:collapse; margin:1rem 0 1.4rem; font-size:14px; }
.ab-sg-body th,.ab-sg-body td{ border:1px solid #e7e1d7; padding:9px 11px; text-align:left; }
.ab-sg-body th{ background:#f6f3ee; font-weight:600; }
.ab-sg-loading{ padding:48px 0; text-align:center; letter-spacing:.05em; text-transform:lowercase; color:#8a8579; }
body.ab-sg-lock{ overflow:hidden; }

/* =============================================================================
   v4.7 — Homepage edge-to-edge on wide monitors.
   Bricks' default container caps at max-width:1600px. On monitors wider than
   ~1600px the homepage's product rows, category tiles and content bands sat in a
   centred 1600 box with large side margins, while the hero images went full-bleed
   — so the page read as "not edge to edge". Let the homepage's top-level content
   containers fill the viewport (their 28px padding stays as a gutter). Scoped to
   the homepage and to #brx-content only, so the shared header/nav/footer are
   untouched and every other page keeps the 1600 cap. Rollback: toggle off.
   ========================================================================== */
body.home #brx-content > .brxe-container,
body.home #brx-content > .brxe-section > .brxe-container{
  max-width:100% !important;
}

/* =============================================================================
   v4.8 — Fix the "we're cute too" / "recently viewed" cross-sell cards.
   Each card's template output TWO stacked product images: the interactive
   hover-image container (.bfs-product-image-hover, with the quick-add, matching
   every other card on the site) AND a redundant plain .brxe-image beneath it.
   That doubled each card to ~1546px tall and made the row look broken. Hide the
   redundant plain image (direct <img.brxe-image> child of the card link) so each
   cross-sell card shows a single image like the rest of the site (~785px).
   Scoped to the cross-sell tabs only. Rollback: toggle off.
   ========================================================================== */
.brxe-tabs-nested a > img.brxe-image{ display:none !important; }

/* =============================================================================
   v4.9 — Constrain the cross-sell grid so it stops overflowing its section.
   The "we're cute too" / "recently viewed" grid used fixed-width columns, so at
   some viewport widths it grew ~500px wider than its container (2065px grid in a
   1544px section) — cards were oversized and the row broke out of its column.
   Switch to 4 responsive columns that always fit the container, matching the
   collection grid's proportions. 3-item tabs left-align with one empty slot;
   4-item tabs fill the row. Rollback: toggle off.
   ========================================================================== */
.brxe-tabs-nested .brx-grid{
  grid-template-columns:repeat(4, minmax(0, 1fr)) !important;
  width:100% !important;
  max-width:100% !important;
  column-gap:16px !important;
}

/* =============================================================================
   v5.0 — Cross-sell ("we're cute too") tidy-up.
   (a) De-dup: the PDP showed recently-viewed twice — a tab inside the cross-sell
       component AND a standalone section (.ref-xs-wrap) lower down. Keep the tab,
       hide the standalone one.
   (b) Centering: the cross-sell grid carried a stray margin-left:-557px (leftover
       carousel offset) that dragged it to the far left of its container. Zero the
       side margins so the cards sit centered within the component.
   Rollback: toggle off.
   ========================================================================== */
.ref-xs-wrap{ display:none !important; }
.brxe-tabs-nested .brx-grid{ margin-left:0 !important; margin-right:0 !important; }


/* v5.1 — Single-row header (Reformation): nav hard-left, logo centred, utils right.
   Nav row lifted via NEGATIVE MARGIN (not position) so it does NOT become the
   containing block for the full-width brx-has-megamenu dropdowns (that bug shifted
   them ~516px off-screen). Mega-menus stay at viewport left:0 (verified 0 clip).
   Logo absolutely centred (safe: not an ancestor of the mega-menus); utils right;
   nav transparent + pointer-events managed so logo/search/cart stay clickable.
   Desktop >=1100px; below keeps two-row; mobile header separate. Rollback: toggle off. */
@media (min-width:1100px){
  .ab-desktop-header{ position:relative !important; }
  .ab-desktop-header .brxe-container{ padding-top:18px !important; padding-bottom:18px !important; justify-content:flex-end !important; }
  .ab-desktop-header .brxe-container > .brxe-div:first-child{ position:absolute !important; left:50% !important; top:50% !important; transform:translate(-50%,-50%) !important; margin:0 !important; }
  .ab-desktop-nav{ margin-top:-90px !important; margin-bottom:0 !important; padding:0 !important; min-height:0 !important; background:transparent !important; pointer-events:none !important; }
  .ab-desktop-nav > *{ background:transparent !important; }
  .ab-desktop-nav .brxe-nav-nested{ pointer-events:auto !important; }
  .ab-desktop-nav .brxe-nav-nested *{ pointer-events:auto !important; }
}


/* =============================================================================
   v5.3 - PDP stock line: put availability on its own row (text mishap fix).
   The variation wrapper (.single_variation_wrap) laid price + native stock text
   + our .ref-low-stock badge on ONE flex row, so stock text collided with price.
   Stack the wrap as a column; hide only the IN-stock native line (we already show
   a cleaner .ref-low-stock badge). Keep .out-of-stock visible so sold-out
   variations still tell the customer. Rollback: toggle off.
   ========================================================================== */
.single_variation_wrap{ flex-direction:column !important; align-items:flex-start !important; }
.single_variation_wrap .woocommerce-variation-availability .stock.in-stock{ display:none !important; }


/* hero wordmark - small screens */
@media (max-width:767px){
  body.home #brxe-igxabf::before{ width:92vw; height:20.6vw; left:4vw; opacity:.6; }
}

/* ===== ab thin nav (reformation pattern) — START =====================
   Removes the header logo, collapses the tall logo band into the link row,
   turns the account/wishlist/bag icons into text links with live counts,
   and makes the header sticky. ~250px -> ~72px.
   NOTE: .ab-desktop-nav carries margin-top:-90px to pull the link row over
   the old logo band. Zeroing the band without zeroing that margin puts the
   nav row off-screen. The margin-top:0 below is load-bearing.
   ROLLBACK: delete everything between START and END, Update, purge LS cache.
   ==================================================================== */

/* The old logo IMAGE is gone, but its <a href="/"> is reused as a small
   text wordmark at the far left. That anchor was the only home link in the
   desktop header — hiding the whole block removed the only way back to the
   homepage. Keep the element, swap the image for text. */
#brx-header #brxe-hfpezd{
  display:flex!important; align-items:center!important;
  position:absolute!important; left:40px!important; top:0!important;
  right:auto!important; bottom:auto!important;
  transform:none!important;   /* Bricks centres it with translate(-50%,-50%) */
  height:34px!important; width:auto!important; margin:0!important; padding:0!important;
  z-index:6;
}
#brx-header #brxe-aeqhud,#brx-header #brxe-wxsxch{width:auto!important;height:auto!important;padding:0!important;margin:0!important;display:block!important}
#brx-header #brxe-wxsxch a{display:inline-block!important;width:auto!important;height:auto!important;font-size:15px!important;line-height:1.15!important;color:#1a1815!important;white-space:nowrap}
#brx-header #brxe-wxsxch img{display:none!important}
#brx-header #brxe-wxsxch a::after{content:"abayas boutique"}
#brx-header #brxe-tmmnnv{padding-left:158px!important}

#brx-header #brxe-bnspek{height:0!important;min-height:0!important;padding:0!important;margin:0!important;overflow:visible!important}
#brx-header #brxe-amdobc{height:0!important;min-height:0!important;padding:0!important}

#brx-header #brxe-mdhthq{margin-top:0!important;padding:0!important;background:#fff!important}
#brx-header #brxe-fiaicz{padding:9px 40px!important;min-height:42px!important}
#brx-header #brxe-vgdhby a{font-size:15px!important;letter-spacing:-.01em!important}

#brx-header #brxe-ozhkke{position:absolute!important;top:0!important;right:40px!important;left:auto!important;width:auto!important;height:42px!important;display:flex!important;flex-direction:row!important;align-items:center!important;gap:24px!important;margin:0!important;padding:0!important}
#brx-header #brxe-cbgfwq{display:flex!important;flex-direction:row!important;align-items:center!important;gap:24px!important;width:auto!important;height:auto!important;margin:0!important;padding:0!important}

#brx-header #brxe-ovbimp,#brx-header .dgwt-wcas-search-wrapp{width:190px!important;min-width:0!important;height:auto!important}
#brx-header .dgwt-wcas-search-wrapp,#brx-header .dgwt-wcas-search-form{border:0!important;box-shadow:none!important;background:transparent!important}
#brx-header .dgwt-wcas-search-input{font-size:15px!important;height:24px!important;padding:0 0 2px!important;border:0!important;border-bottom:1px solid #1a1815!important;border-radius:0!important;background:transparent!important;box-shadow:none!important}
#brx-header .dgwt-wcas-search-submit,#brx-header .dgwt-wcas-search-icon-arrow,#brx-header .dgwt-wcas-preloader{display:none!important}

#brx-header #brxe-rmktov{width:auto!important;height:auto!important}
#brx-header #brxe-rmktov > a.bricks-link-wrapper{width:auto!important;height:auto!important;font-size:15px!important;color:#1a1815!important;white-space:nowrap}
#brx-header #brxe-rmktov > a.bricks-link-wrapper svg{display:none!important}
#brx-header #brxe-rmktov > a.bricks-link-wrapper::after{content:"account"}

#brx-header #brxe-qwwkpz{width:auto!important;height:auto!important}
#brx-header #brxe-qwwkpz a.wishlist_products_counter{display:inline-flex!important;align-items:baseline;width:auto!important;height:auto!important;font-size:15px!important;color:#1a1815!important;white-space:nowrap}
#brx-header #brxe-qwwkpz a.wishlist_products_counter img{display:none!important}
#brx-header #brxe-qwwkpz a.wishlist_products_counter::before{content:"wishlist ("}
#brx-header #brxe-qwwkpz a.wishlist_products_counter::after{content:")"}
#brx-header #brxe-qwwkpz .wishlist_products_counter_number{position:static!important;width:auto!important;height:auto!important;min-width:0!important;padding:0!important;border-radius:0!important;background:none!important;color:inherit!important;font-size:15px!important;line-height:inherit!important}

#brx-header #brxe-kwhnox{width:auto!important;height:auto!important}
#brx-header #brxe-kwhnox a.mini-cart-link{width:auto!important;height:auto!important;font-size:15px!important;color:#1a1815!important;white-space:nowrap}
#brx-header #brxe-kwhnox .cart-icon{display:inline-flex!important;align-items:baseline;width:auto!important;height:auto!important}
#brx-header #brxe-kwhnox .cart-icon svg{display:none!important}
#brx-header #brxe-kwhnox .cart-icon::before{content:"bag ("}
#brx-header #brxe-kwhnox .cart-icon::after{content:")"}
#brx-header #brxe-kwhnox .cart-count{display:inline!important;position:static!important;transform:none!important;width:auto!important;height:auto!important;min-width:0!important;padding:0!important;border-radius:0!important;background:none!important;color:inherit!important;font-size:15px!important;line-height:inherit!important}

#brx-header{position:sticky!important;top:0!important;z-index:9999!important;background:#fff!important}


/* the old scroll-triggered header (black logo) is redundant now that
   #brx-header is sticky — it only ever rendered above 991px anyway */
#brx-header #brxe-zcdyve{display:none!important}

/* keep the sticky bar clear of the wp admin bar for logged-in users */
body.admin-bar #brx-header{top:32px!important}
@media (max-width:782px){body.admin-bar #brx-header{top:46px!important}}


/* --- round 2 --------------------------------------------------------- */

/* tighter bar. 42px read bottom-heavy because the 24px line box on
   lowercase text left dead space under the glyphs. 34px + tight leading. */
#brx-header #brxe-fiaicz{padding:6px 40px!important;min-height:34px!important}
#brx-header #brxe-ozhkke{height:34px!important}
#brx-header #brxe-vgdhby a{line-height:1.15!important}

/* search padding. .dgwt-wcas-sf-wrapp is an inner wrapper the search plugin
   injects with padding:10px + white bg — that is what made the field a 44px
   block beside 24px text links. */
#brx-header .dgwt-wcas-sf-wrapp{padding:0!important;background:transparent!important;border:0!important;box-shadow:none!important}
#brx-header #brxe-ovbimp,#brx-header .dgwt-wcas-search-wrapp,#brx-header .dgwt-wcas-search-form{height:24px!important;min-height:0!important}

/* mega menu flush to the nav.
   CAUSE: Appearance > Customise > Additional CSS has
     #brxe-vgdhby .brx-dropdown-content{position:fixed;top:216px!important}
   216px was the OLD header height. That rule still exists and still loads
   after this snippet, so it is beaten here on specificity (#brx-header
   prefix), not on order. Delete the stale rule from Additional CSS when
   convenient — this block does not need it gone, but it is dead config.
   FIX: anchor to the header with top:100% so it tracks any header height
   (admin bar, future changes) instead of a magic number. */
@media (min-width:992px){
  #brx-header #brxe-vgdhby .brxe-dropdown.brx-has-megamenu{position:static!important}
  #brx-header #brxe-vgdhby .brx-dropdown-content{position:absolute!important;top:100%!important;left:0!important;right:0!important;min-width:0!important;width:auto!important}
}


/* --- round 3 --------------------------------------------------------- */

/* NOTE: the bag drawer is dead on pages other than product/category. I
   tried to fix it in CSS and could not — see the handover note. The closed
   state survives even an inline !important override, which means it is being
   re-applied by JS, not won in the cascade. Needs a JS-level fix, not this. */

/* announcement text sat 10px low and clipped at the bottom. The slides are
   40px inside a 30px window with 20px of top padding, so the text fell
   below the visible strip. 9px centres it in the window. Do NOT change the
   40px slide height — Splide caches it to compute the scroll translate. */
#brxe-uuprxo .splide__slide{
  height:40px!important; min-height:40px!important;
  padding:9px 0 0 38.4px!important; display:block!important;
}




/* --- round 4 --------------------------------------------------------- */

/* Hero wordmark: desktop only. 991px is the site's own mobile breakpoint —
   the same one where #brxe-uehuid (mobile header) takes over from
   #brxe-bnspek — so the wordmark disappears exactly when the mobile header
   appears, rather than at some other arbitrary width. */
@media (max-width:991px){
  body.home #brxe-igxabf::before{ display:none!important; content:none!important; }
}

/* Mini-cart close control: the button ships a Font Awesome long-arrow icon,
   which reads as "go somewhere" rather than "close". Swap it for an x at all
   widths. The <i> is hidden rather than removed so nothing depends on the
   icon markup staying/going. */
.cart-detail .bricks-mini-cart-close i{ display:none!important; }
.cart-detail .bricks-mini-cart-close::before{
  content:"\00D7";
  font-family:inherit;
  font-size:24px;
  line-height:1;
  display:block;
  color:inherit;
}


/* --- ab-offcanvas-close-x -------------------------------------------- */
/* The mobile MENU drawer (#brxe-ocssyn, toggle #brxe-zaxkxg) closes with an
   Ionicon back-arrow, which reads as "go back a level" rather than "close"
   - especially confusing next to the submenu chevrons. The ACCOUNT drawer
   next to it already uses ion-md-close, so this also makes the two drawers
   agree. Matched on the icon class rather than the Bricks id so it survives
   the element being rebuilt. */
.brx-offcanvas-inner .brxe-toggle i.ion-md-arrow-round-back{ display:none!important; }
.brx-offcanvas-inner .brxe-toggle:has(i.ion-md-arrow-round-back)::before{
  content:"\00D7";
  font-family:inherit;
  font-size:26px;
  line-height:1;
  display:block;
  color:inherit;
}


/* --- ab-mobile-menu-rhythm ------------------------------------------- */
/* The mobile menu rows were two different heights. Top-level links with no
   children (shop all / all collections / journal) are a bare <a> carrying
   16px vertical padding, so they rendered 60px tall. Links WITH children
   are wrapped in div.brx-submenu-toggle and their <a> has no padding, so
   they rendered 23px tall. On top of that every li had BOTH a 10px bottom
   margin and the ul a 15px gap, which stacked into 25px of dead space
   between rows on top of the divider.

   Fix: drop the doubled spacing, and move the padding onto whichever
   wrapper the row actually uses so every row is the same height with one
   evenly spaced divider. */
@media (max-width:991px){
  #brxe-ocssyn #menu-mobile-menu{ gap:0!important; }
  #brxe-ocssyn #menu-mobile-menu > li{ margin:0!important; }
  #brxe-ocssyn #menu-mobile-menu > li > a,
  #brxe-ocssyn #menu-mobile-menu > li > .brx-submenu-toggle{ padding:14px 0!important; }
  #brxe-ocssyn #menu-mobile-menu > li > .brx-submenu-toggle > a{ padding:0!important; }
  #brxe-ocssyn #menu-mobile-menu > li:last-child{ border-bottom:0!important; }
}

/* ===== ab thin nav (reformation pattern) — END ======================= */

/* ABX - Fix: newsletter Subscribe button was clipping "SUBSCRIBE" to "SUBSCRI".
   A footer rule (#brx-footer #f-news-letter button) pins it to flex:0 0 116px; max-width:116px !important.
   Override with higher specificity so the button sizes to its content. */
#brx-footer #f-news-letter button.bricks-button,
#brx-footer form.brxe-form .submit-button-wrapper button.bricks-button {
  flex: 0 0 auto !important;
  width: auto !important;
  max-width: none !important;
  min-width: 116px !important;
  white-space: nowrap !important;
}
/* TEMPORARY - hides the colour circles + colour name on product cards.
   Requested by client 24/07/2026 pending confirmation of the format.
   Task 24 of the v6 brief DOES ask for colour names on cards, so this is a
   hold, not a cancellation.

   Markup this targets (still rendered, just hidden):
     <div class="abx-colour">
       <span class="abx-sw"></span>   <- colour circle
       <span class="abx-nm">Black / White</span>
     </div>

   TO RESTORE: deactivate or delete this snippet, then LiteSpeed > Purge All.
   Circles only  -> use .abx-nm{display:none!important}
   Names only    -> use .abx-sw{display:none!important}

   Source of the markup = WPCode 37281 (Task 24b). Do NOT deactivate 37281 to
   remove colours - it also provides the quick-add (+) button. */
.abx-colour{display:none !important}
/* Fix sticky-header mini-cart drawer collapse.
   The sticky header section has a transform, which makes it the containing
   block for the position:fixed off-canvas drawer, so the drawer's bottom:0
   sized it to the ~58px sticky bar instead of the viewport (content spilled
   out of a 27px white box). Force the drawer to size to its own content,
   capped to the viewport with internal scroll. */
#brxe-zuigga .cart-detail.off-canvas.right.cart-detail-zuigga{
  bottom:auto !important;
  min-height:max-content !important;
  max-height:calc(100vh - 60px) !important;
  overflow-y:auto !important;
}
#brxe-zuigga .cart-detail-zuigga .widget_shopping_cart_content{
  height:auto !important;
  min-height:0 !important;
}
#brxe-zuigga .cart-detail-zuigga .woocommerce-mini-cart{
  height:auto !important;
  min-height:0 !important;
}
/* TASK 16 - Reformation account · Stage 1 (sidebar + typography) */
.woocommerce-account .woocommerce-MyAccount-navigation{max-width:210px}
.woocommerce-MyAccount-navigation ul{margin:0;padding:0;list-style:none}
.woocommerce-MyAccount-navigation .rf-group-label{font-size:12px !important;letter-spacing:.04em !important;text-transform:none !important;color:#575757 !important;font-weight:400 !important;margin:26px 0 8px !important;padding:0 !important;border:0 !important}
.woocommerce-MyAccount-navigation .rf-group-label.first,.woocommerce-MyAccount-navigation .rf-group-label:first-child{margin-top:0 !important}
.woocommerce-MyAccount-navigation-link{border:0 !important;padding:0 !important;background:none !important}
.woocommerce-MyAccount-navigation-link a{display:flex !important;align-items:center;gap:12px;font-size:16px !important;letter-spacing:.04em;line-height:1.5;font-weight:400 !important;color:#141310 !important;padding:6px 0 !important;border:0 !important;text-transform:none !important}
.woocommerce-MyAccount-navigation-link.is-active a{font-weight:600 !important;color:#000 !important}
.woocommerce-MyAccount-navigation-link a:hover{opacity:.6}
.woocommerce-MyAccount-navigation-link a::before{content:"";width:17px;height:17px;flex:none;display:inline-block;background-repeat:no-repeat;background-position:center;background-size:contain}
.woocommerce-MyAccount-navigation-link--dashboard a::before{background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23141310' stroke-width='1.5'><path d='M4 11l8-6 8 6'/><path d='M6 10v9h12v-9'/></svg>")}
.woocommerce-MyAccount-navigation-link--orders a::before{background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23141310' stroke-width='1.5'><path d='M3 7l9-4 9 4-9 4-9-4z'/><path d='M3 7v10l9 4 9-4V7'/></svg>")}
.woocommerce-MyAccount-navigation-link--wishlist a::before{background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23141310' stroke-width='1.5'><path d='M12 20s-7-4.6-9-9a4.6 4.6 0 0 1 9-2 4.6 4.6 0 0 1 9 2c-2 4.4-9 9-9 9z'/></svg>")}
.woocommerce-MyAccount-navigation-link--edit-account a::before{background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23141310' stroke-width='1.5'><circle cx='12' cy='8' r='4'/><path d='M5 20c0-3.9 3.1-7 7-7s7 3.1 7 7'/></svg>")}
.woocommerce-MyAccount-navigation-link--edit-address a::before{background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23141310' stroke-width='1.5'><path d='M6 4h12v16H6z'/><path d='M9 8h6M9 12h6M9 16h3'/></svg>")}
.woocommerce-MyAccount-navigation-link--payment-methods a::before{background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23141310' stroke-width='1.5'><rect x='3' y='6' width='18' height='12' rx='1'/><path d='M3 10h18'/></svg>")}
.woocommerce-MyAccount-navigation-link--customer-logout a::before{display:none}
.woocommerce-MyAccount-navigation-link--customer-logout{margin-top:22px !important;padding-top:16px !important;border-top:1px solid #e7e2d6 !important}
.woocommerce-MyAccount-navigation-link--customer-logout a{font-size:11px !important;letter-spacing:.14em;text-transform:uppercase !important}
.woocommerce-MyAccount-content h1,.woocommerce-MyAccount-content h2,.woocommerce-MyAccount-content h3.rf-title{text-align:center;font-size:20px;font-weight:700;letter-spacing:.04em;line-height:1.2}

/* --- Task 16 Stage 3a: Profile/Password floating-label form (Reformation) --- */
.woocommerce-EditAccountForm.edit-account{max-width:400px;margin:0 auto}
.woocommerce-EditAccountForm .woocommerce-form-row{position:relative;float:none !important;width:100% !important;border:1px solid #141310 !important;padding:22px 16px 7px !important;margin:0 0 16px !important;border-radius:0 !important}
.woocommerce-EditAccountForm .woocommerce-form-row label{position:absolute;top:8px;left:16px;margin:0 !important;padding:0 !important;font-size:13px !important;letter-spacing:.04em;color:#141310 !important;font-weight:400 !important;line-height:1}
.woocommerce-EditAccountForm .woocommerce-form-row input{border:0 !important;outline:0 !important;background:transparent !important;width:100% !important;font-size:16px !important;letter-spacing:.04em;color:#141310 !important;padding:0 !important;height:22px !important;box-shadow:none !important;min-height:0 !important}
.woocommerce-EditAccountForm .woocommerce-form-row:has(input[name="account_display_name"]){display:none}
.woocommerce-EditAccountForm .woocommerce-form-row:has(input[name="account_email"]){background:#f4f2ee}
.woocommerce-EditAccountForm fieldset{border:0 !important;padding:0 !important;margin:0 !important}
.woocommerce-EditAccountForm fieldset legend{font-size:13px !important;letter-spacing:.04em;color:#575757 !important;margin:6px 0 12px !important;text-align:center;width:100%}
.woocommerce-EditAccountForm .woocommerce-Button, .woocommerce-EditAccountForm button[type="submit"]{width:100%;background:#141310 !important;color:#fff !important;border:1px solid #141310 !important;font-size:11px !important;letter-spacing:.18em !important;text-transform:uppercase !important;padding:15px !important;cursor:pointer;margin-top:6px}
.woocommerce-EditAccountForm span.description{font-size:11px;color:#575757;letter-spacing:.04em}

/* --- Task 16 Stage 3b: two-column Home dashboard --- */
.woocommerce-MyAccount-content:has(.rf-dash) > p{display:none !important}
.rf-dash{max-width:1000px;margin:0 auto}
.rf-hi{font-size:16px;letter-spacing:.04em;color:#575757;margin:0 0 24px;text-align:center}
.rf-hi b{color:#141310;font-weight:600}
.rf-dash-grid{display:grid;grid-template-columns:1fr 1fr;gap:60px}
.rf-title{text-align:center;font-size:20px;font-weight:700;letter-spacing:.04em;line-height:1.2;margin:0 0 6px}
.rf-csub{text-align:center;color:#575757;font-size:16px;letter-spacing:.04em;margin:0 0 16px}
.rf-ordercard{border:1px solid #e7e2d6;padding:16px;display:flex;gap:14px;align-items:center}
.rf-oc-im{width:64px;flex:none}
.rf-oc-im img{width:100%;height:auto;display:block;border-radius:2px}
.rf-oc-meta{flex:1;min-width:0}
.rf-oc-row{display:flex;justify-content:space-between;gap:10px;align-items:center}
.rf-oc-no{font-size:13px;font-weight:600}
.rf-pill{font-size:10px;letter-spacing:.08em;text-transform:uppercase;background:#f5f1e8;color:#3a3833;padding:4px 9px;border-radius:20px;white-space:nowrap}
.rf-oc-dt{font-size:12px;color:#575757;margin-top:4px}
.rf-oc-items{font-size:12px;color:#3a3833;margin-top:6px}
.rf-linkline{display:inline-block;margin-top:16px;font-size:11px;letter-spacing:.14em;text-transform:uppercase;border-bottom:1px solid #141310;padding-bottom:2px;color:#141310}
.rf-newbtn{display:block;text-align:center;background:#141310;color:#fff;font-size:11px;letter-spacing:.18em;text-transform:uppercase;padding:14px;margin-top:8px}
.rf-viewall{display:block;text-align:center;font-size:14px;border-bottom:1px solid #141310;width:max-content;margin:0 auto 20px;padding-bottom:2px;color:#141310}
.rf-favgrid{display:grid;grid-template-columns:1fr 1fr;gap:20px 24px}
.rf-fav-im img{width:100%;height:auto;display:block;border-radius:2px}
.rf-fav-nm{font-size:12px;margin:8px 0 2px}
.rf-fav-pr{font-size:12px;color:#3a3833}
.rf-fav-note{text-align:center;color:#575757;font-size:13px;padding:20px 0}
@media(max-width:820px){.rf-dash-grid{grid-template-columns:1fr;gap:36px}}

/* --- Task 16 Stage 3c: order-history cards + payment/address --- */
.woocommerce-orders-table{border:0 !important;display:block;width:100%;max-width:720px;margin:0 auto;table-layout:auto}
.woocommerce-orders-table thead{display:none}
.woocommerce-orders-table tbody{display:block}
.woocommerce-orders-table__row{display:block;border:1px solid #e7e2d6;padding:14px 18px;margin-bottom:16px}
.woocommerce-orders-table__cell{display:flex !important;justify-content:space-between;align-items:center;gap:12px;border:0 !important;padding:7px 0 !important;text-align:right;font-size:14px}
.woocommerce-orders-table__cell::before{content:attr(data-title);color:#575757;font-size:11px;letter-spacing:.08em;text-transform:uppercase;font-weight:400}
.woocommerce-orders-table__cell-order-actions{justify-content:flex-end;flex-wrap:wrap;padding-top:12px !important;border-top:1px solid #f0ece2 !important;margin-top:6px}
.woocommerce-orders-table__cell-order-actions::before{display:none}
.woocommerce-orders-table__cell-order-actions .button{background:#141310 !important;color:#fff !important;border:1px solid #141310 !important;font-size:10px !important;letter-spacing:.14em;text-transform:uppercase;padding:9px 14px !important;border-radius:0 !important;margin:0 0 0 8px}
.woocommerce-MyAccount-content .woocommerce-info,.woocommerce-MyAccount-content .woocommerce-Message{text-align:center;background:transparent !important;border:0 !important;color:#575757 !important;padding:20px 0 !important}
.woocommerce-MyAccount-content .woocommerce-info::before{display:none}
.woocommerce-Addresses{display:grid;grid-template-columns:1fr 1fr;gap:20px;max-width:720px;margin:0 auto}
.woocommerce-Address{border:1px solid #e7e2d6;padding:18px;border-radius:0}
.woocommerce-Address .woocommerce-Address-title h3{font-size:13px !important;font-weight:600 !important;text-align:left !important;letter-spacing:.04em}
.woocommerce-Address address{font-size:13px;color:#3a3833;line-height:1.7;font-style:normal}
.woocommerce-Address .edit,.woocommerce-Address-title .edit{font-size:10px !important;letter-spacing:.12em;text-transform:uppercase;border-bottom:1px solid #141310;padding-bottom:1px}
.rf-title{text-align:center;font-size:20px;font-weight:700;letter-spacing:.04em;line-height:1.2;margin:0 auto 22px}
@media(max-width:600px){.woocommerce-Addresses{grid-template-columns:1fr}}

/* --- Task 16 Stage 3d: Communication Preferences page --- */
.rf-comm{max-width:490px;margin:0 auto}
.rf-comm .rf-title{margin-bottom:6px}
.rf-check{display:flex;align-items:center;gap:12px;padding:9px 0;font-size:16px;letter-spacing:.04em;cursor:pointer}
.rf-check input{width:18px;height:18px;accent-color:#141310;flex:none}
.rf-comm-update{width:100%;background:#141310;color:#fff;border:1px solid #141310;font-size:11px;letter-spacing:.18em;text-transform:uppercase;padding:16px;margin-top:22px;cursor:pointer}
.rf-comm-div{height:1px;background:#141310;margin:28px 0 20px}
.rf-comm-sub{font-weight:600;font-size:16px;letter-spacing:.04em;text-align:center;margin:0 0 2px}
.rf-comm-unsub{width:100%;background:transparent;color:#141310;border:1px solid #141310;font-size:11px;letter-spacing:.18em;text-transform:uppercase;padding:16px;margin-top:14px;cursor:pointer}
.rf-comm-email{text-align:center;font-size:12px;letter-spacing:.04em;color:#575757;margin-top:20px}
/* ===== TASK 41 - Layout polish sweep ===== */

/* 41a - reduce excessive top gap above page titles */
#brxe-mjyuoy { padding-top: 40px !important; }   /* Journal title section */
.ab-legal-page { padding-top: 40px !important; } /* Size Guide + legal pages */

/* 41b - stop the Sort dropdown text clipping */
select.orderby { min-width: 230px !important; padding-right: 34px !important; text-overflow: ellipsis; }

/* 41c - blog excerpts too small: enlarge for readability */
.brxe-kxylkn, .brxe-kxylkn p { font-size: 14px !important; line-height: 1.6 !important; }
/* Task 10 - hero banner text to match site font, no italic */
[style*="Cormorant Garamond"]{font-family:'Montserrat',sans-serif !important;font-style:normal !important;}
/* Wishlist "added" popup fixes. 2026-07-09. Revert: deactivate/delete this snippet. */

/* Widen the popup so the CTAs have room to read clearly */
.tinv-wishlist .tinv-modal .tinv-modal-inner {
  max-width: 480px;
}

/* A) Alignment: equal-width, centered CTAs on one row, no wrapping */
.tinv-wishlist .tinv-modal .tinvwl-buttons-group {
  display: flex;
  gap: 12px;
  justify-content: center;
  align-items: stretch;
  flex-wrap: nowrap;
}
.tinv-wishlist .tinv-modal .tinvwl-buttons-group button,
.tinv-wishlist .tinv-modal .tinvwl-buttons-group .button {
  flex: 1 1 0;
  width: auto;
  min-width: 0;
  margin: 0 !important;
  padding: 14px 18px;
  white-space: nowrap;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
}
/* keep the label on a single line even inside the flex button */
.tinv-wishlist .tinv-modal .tinvwl-buttons-group button *,
.tinv-wishlist .tinv-modal .tinvwl-buttons-group .button * {
  white-space: nowrap;
}

/* On phones, stack the CTAs full-width for clarity */
@media (max-width: 480px) {
  .tinv-wishlist .tinv-modal .tinvwl-buttons-group { flex-wrap: wrap; }
  .tinv-wishlist .tinv-modal .tinvwl-buttons-group button,
  .tinv-wishlist .tinv-modal .tinvwl-buttons-group .button { flex: 1 1 100%; }
}

/* B) Hover: replace the bright blue (#007acc) with on-brand charcoal */
.tinv-wishlist .tinv-modal button:not(.tinvwl-button):hover,
.tinv-wishlist .tinv-modal button:not(.tinvwl-button):focus,
.tinv-wishlist .tinv-modal button:not(.tinvwl-button):active {
  background-color: #333333 !important;
  color: #ffffff !important;
}
/* Product accordion fixes. Added 2026-07-09. Revert: deactivate/delete this snippet. */

/* 1) Remove the default browser focus outline box on accordion headers for
      pointer/click focus, keeping the ring for keyboard users (accessibility). */
.accordion-title-wrapper:focus:not(:focus-visible) {
  outline: none;
}

/* 2) The "Delivery, Exchanges & Returns" panel text was set to 8px in the
      template while every other panel uses 12px. Match it to the rest. */
.brxe-accordion-nested #brxe-bqgjdf {
  font-size: 12px;
}

/* Abayas Boutique - cleaned Additional CSS
   Replaces the long pasted Customizer CSS block.
   Keeps the same intent while removing repeated/conflicting passes. */

:root {
  --abx-ink: #141310;
  --abx-muted: #6f6a61;
  --abx-line: #e7e0d6;
  --abx-paper: #fbfaf7;
  --abx-soft: #f4efe7;
  --abx-warm: #c9a875;
  --abx-focus: #8b6f45;
  --abx-sans: Montserrat, Helvetica, Arial, sans-serif;
  --abx-serif: "Cormorant Garamond", Georgia, serif;
  --abx-ease: 180ms ease;
}

/* Base ecommerce polish */
body.tax-product_cat,
body.single-product {
  color: var(--abx-ink);
  background: var(--abx-paper);
  font-family: var(--abx-sans);
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
}

body.tax-product_cat #brx-content,
body.single-product #brx-content {
  background: var(--abx-paper);
}

body.tax-product_cat,
body.tax-product_cat #brx-content {
  overflow-x: hidden !important;
}

body.tax-product_cat a:focus-visible,
body.tax-product_cat button:focus-visible,
body.tax-product_cat select:focus-visible,
body.single-product a:focus-visible,
body.single-product button:focus-visible,
body.single-product select:focus-visible {
  outline: 1px solid var(--abx-focus) !important;
  outline-offset: 3px !important;
}

body.tax-product_cat .bricks-button,
body.single-product .bricks-button,
body.tax-product_cat button,
body.single-product button {
  transition: transform var(--abx-ease), background-color var(--abx-ease), border-color var(--abx-ease), color var(--abx-ease) !important;
}

body.tax-product_cat .bricks-button:active,
body.single-product .bricks-button:active,
body.tax-product_cat button:active,
body.single-product button:active {
  transform: translateY(1px) !important;
}

/* Collection layout */
body.tax-product_cat #brxe-silcnv,
body.tax-product_cat #brxe-wcvwsp {
  width: 100% !important;
  max-width: min(100vw, 1440px) !important;
  margin-inline: auto !important;
  padding-inline: clamp(14px, 2.8vw, 34px) !important;
  box-sizing: border-box !important;
}

body.tax-product_cat #brxe-nigaxl {
  width: 100% !important;
  max-width: 980px !important;
  margin: clamp(22px, 4vw, 52px) auto clamp(20px, 3.2vw, 42px) !important;
  text-align: center !important;
}

body.tax-product_cat #brxe-fnrvwe {
  margin: 0 0 14px !important;
  color: var(--abx-ink) !important;
  font-family: var(--abx-serif) !important;
  font-size: clamp(34px, 5vw, 72px) !important;
  font-weight: 500 !important;
  line-height: .94 !important;
  letter-spacing: 0 !important;
  text-transform: none !important;
  text-wrap: balance;
}

body.tax-product_cat #brxe-vrxwjv,
body.tax-product_cat .term-description {
  max-width: 620px !important;
  margin-inline: auto !important;
  color: var(--abx-muted) !important;
  font-size: clamp(14px, 1.3vw, 17px) !important;
  line-height: 1.65 !important;
  text-wrap: pretty;
}

/* Search results product cards: images + quick-add button */
body.search-results #brxe-qqgmsh {
  align-items: start !important;
}

body.search-results #brxe-qqgmsh .brxe-phrdhy {
  position: relative !important;
  display: flex !important;
  flex-direction: column !important;
  gap: 10px !important;
  overflow: visible !important;
}

body.search-results #brxe-qqgmsh .brxe-phrdhy .brxe-tqljva {
  position: relative !important;
  display: flex !important;
  flex-direction: column !important;
  gap: 10px !important;
  width: 100% !important;
  aspect-ratio: auto !important;
  overflow: hidden !important;
  line-height: normal !important;
}

body.search-results #brxe-qqgmsh .brxe-phrdhy .brxe-mztfpb.brxe-image {
  display: block !important;
  width: 100% !important;
  max-width: none !important;
  height: auto !important;
  aspect-ratio: 800 / 1067 !important;
  object-fit: cover !important;
  object-position: center top !important;
}

/* Removed 25/08/2026: the 38px circle at the bottom-right of the search-card
   image. It framed a shrunken copy of the BFS image-hover gallery - on
   collection templates that component renders full size; here it was squeezed
   into a 38px dot and read as a colour swatch. The quick-add markup the circle
   also wrapped is already inert on search (.abx-qa display:none,
   .abg-qa-btn opacity:0, .ab-safe-quick-trigger display:none - see WPCode
   39084), so nothing functional is lost. Colourway choice now lives in the
   .abx-cw dot row under the card (WPCode 39116).
   The .brxe-rcexeh element does not exist on collection templates, so this
   rule is search-only by nature as well as by selector.
   TO RESTORE: replace this rule with the block in
   additional-css_search-results-block_BEFORE.css. */
body.search-results #brxe-qqgmsh .brxe-phrdhy .brxe-rcexeh {
  display: none !important;
}

body.search-results #brxe-qqgmsh .brxe-phrdhy .brxe-nysrbu {
  position: static !important;
  width: 100% !important;
  height: 100% !important;
  transform: none !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
}

body.search-results #brxe-qqgmsh .brxe-phrdhy .brxe-cjirhb {
  position: static !important;
  transform: none !important;
  margin: 0 !important;
  font-size: 18px !important;
  color: #111111 !important;
  line-height: 1 !important;
}

@media (max-width: 767px) {
  body.search-results #brxe-qqgmsh .brxe-phrdhy .brxe-tqljva {
    aspect-ratio: auto !important;
  }

  body.search-results #brxe-qqgmsh .brxe-phrdhy .brxe-mztfpb.brxe-image {
    aspect-ratio: 3 / 4 !important;
  }


  body.search-results #brxe-qqgmsh .brxe-phrdhy .brxe-cjirhb {
    font-size: 16px !important;
  }
}

body.tax-product_cat #brxe-zbmbpf {
  width: 100% !important;
  max-width: 100% !important;
  height: auto !important;
  min-height: 0 !important;
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  gap: 16px !important;
  padding: 14px 0 18px !important;
  border-top: 1px solid var(--abx-line) !important;
  border-bottom: 1px solid var(--abx-line) !important;
  margin-bottom: clamp(18px, 2vw, 28px) !important;
}

body.tax-product_cat #brxe-gpinfi,
body.tax-product_cat #brxe-pkotcu {
  display: flex !important;
  align-items: center !important;
  align-content: center !important;
  flex-wrap: wrap !important;
  gap: 14px !important;
  min-width: 0 !important;
  height: auto !important;
  min-height: 24px !important;
}

body.tax-product_cat #abx-item-count {
  margin-right: 10px !important;
  color: var(--abx-muted) !important;
  font-family: var(--abx-sans) !important;
  font-size: 11px !important;
  letter-spacing: .14em !important;
  font-variant-numeric: tabular-nums;
}

body.tax-product_cat .woocommerce-ordering select,
body.tax-product_cat select.orderby {
  height: 42px !important;
  min-width: 220px !important;
  border: 1px solid var(--abx-line) !important;
  border-radius: 0 !important;
  background-color: #fff !important;
  color: var(--abx-ink) !important;
  font-family: var(--abx-sans) !important;
  font-size: 12px !important;
  letter-spacing: .04em !important;
  transition: border-color var(--abx-ease), background-color var(--abx-ease) !important;
}

body.tax-product_cat .woocommerce-ordering select:hover,
body.tax-product_cat select.orderby:hover,
body.tax-product_cat .woocommerce-ordering select:focus,
body.tax-product_cat select.orderby:focus {
  border-color: var(--abx-ink) !important;
  outline: none !important;
}

/* Collection product grid */
body.tax-product_cat #brxe-drqfyo.brx-grid {
  width: 100% !important;
  max-width: 100% !important;
  display: grid !important;
  grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
  column-gap: clamp(14px, 1.8vw, 28px) !important;
  row-gap: clamp(34px, 4vw, 68px) !important;
  overflow: visible !important;
}

@media (min-width: 900px) {
  body.tax-product_cat #brxe-drqfyo.brx-grid {
    grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
  }
}

@media (min-width: 1500px) {
  body.tax-product_cat #brxe-drqfyo.brx-grid {
    grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
  }
}

body.tax-product_cat .brxe-cvqllw.brxe-div {
  position: relative !important;
  min-width: 0 !important;
  overflow: visible !important;
}

body.tax-product_cat .brxe-cvqllw .brxe-oiqzfz.brxe-div {
  display: flex !important;
  flex-direction: column !important;
  gap: 14px !important;
  min-width: 0 !important;
  color: inherit !important;
  text-decoration: none !important;
}

body.tax-product_cat .brxe-cvqllw .brxe-odzfgu.brxe-image,
body.tax-product_cat .brxe-cvqllw img.brxe-odzfgu {
  display: block !important;
  width: 100% !important;
  height: auto !important;
  aspect-ratio: 3 / 4 !important;
  object-fit: cover !important;
  background: var(--abx-soft) !important;
  transition: transform 420ms ease, filter 420ms ease !important;
}

/* product card hover zoom removed at request (was translateY + scale + saturate).
   The transition on .brxe-odzfgu above is now inert but harmless. */

body.tax-product_cat .brxe-cvqllw .brxe-oyayle.brxe-div {
  display: grid !important;
  grid-template-columns: minmax(0, 1fr) auto !important;
  align-items: baseline !important;
  gap: 12px !important;
  min-height: 34px !important;
  padding-top: 2px !important;
}

body.tax-product_cat .brxe-cvqllw .brxe-xhptac.brxe-heading {
  margin: 0 !important;
  color: var(--abx-ink) !important;
  font-family: var(--abx-sans) !important;
  font-size: clamp(13px, 1vw, 15px) !important;
  font-weight: 500 !important;
  line-height: 1.35 !important;
  letter-spacing: .01em !important;
  text-transform: none !important;
  text-wrap: pretty;
}

body.tax-product_cat .brxe-cvqllw .brxe-qccobv.brxe-heading {
  margin: 0 !important;
  color: var(--abx-muted) !important;
  font-family: var(--abx-sans) !important;
  font-size: 12px !important;
  font-weight: 500 !important;
  line-height: 1.25 !important;
  letter-spacing: .02em !important;
  white-space: nowrap !important;
  font-variant-numeric: tabular-nums;
}

/* Collection card quick actions */
.brxe-cvqllw .brxe-lplnin.brxe-div,
body.tax-product_cat .brxe-cvqllw .brxe-lplnin.brxe-div {
  position: static !important;
}

.brxe-cvqllw .brxe-krrrar.brxe-div,
body.tax-product_cat .brxe-cvqllw .brxe-krrrar.brxe-div,
body.tax-product_cat .brxe-cvqllw .brxe-odexon.brxe-div {
  position: absolute !important;
  width: 34px !important;
  height: 34px !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  border-radius: 999px !important;
  background: rgba(251, 250, 247, .92) !important;
  border: 1px solid rgba(20, 19, 16, .12) !important;
  box-shadow: 0 8px 22px rgba(65, 52, 35, .10) !important;
  backdrop-filter: blur(8px) !important;
  z-index: 12 !important;
  transition: transform var(--abx-ease), background-color var(--abx-ease), border-color var(--abx-ease) !important;
}

.brxe-cvqllw .brxe-krrrar.brxe-div,
body.tax-product_cat .brxe-cvqllw .brxe-krrrar.brxe-div {
  top: auto !important;
  right: 12px !important;
  bottom: 60px !important;
  left: auto !important;
}

body.tax-product_cat .brxe-cvqllw .brxe-odexon.brxe-div {
  top: 12px !important;
  right: 12px !important;
}

.brxe-cvqllw .brxe-krrrar.brxe-div:hover,
body.tax-product_cat .brxe-cvqllw .brxe-krrrar.brxe-div:hover,
body.tax-product_cat .brxe-cvqllw .brxe-odexon.brxe-div:hover {
  transform: translateY(-1px) !important;
  background: #fff !important;
  border-color: rgba(20, 19, 16, .35) !important;
}

.brxe-cvqllw .brxe-fjidyk.brxe-icon {
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  line-height: 1 !important;
}

/* Filter drawer accordion icons */
#brxe-klvhuq .accordion-title-wrapper {
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  gap: 16px !important;
  min-height: 50px !important;
  padding-right: 0 !important;
}

#brxe-klvhuq .accordion-title-wrapper .brxe-icon {
  display: none !important;
}

#brxe-klvhuq .accordion-title-wrapper::after {
  content: "+";
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: 0 0 24px;
  width: 24px;
  height: 24px;
  margin-left: auto;
  color: #111;
  font-family: Montserrat, Arial, sans-serif;
  font-size: 20px;
  font-weight: 400;
  line-height: 1;
}

#brxe-klvhuq .accordion-title-wrapper[aria-expanded="true"]::after {
  content: "-";
}

/* Offcanvas/cart containment */
body.tax-product_cat #brxe-zqtjiz,
body.tax-product_cat #brxe-kwhnox {
  max-width: 100vw !important;
  overflow-x: clip !important;
}

body.tax-product_cat #brxe-zqtjiz:not(.brx-open) {
  position: absolute !important;
  width: 0 !important;
  min-width: 0 !important;
  max-width: 0 !important;
  height: 0 !important;
  min-height: 0 !important;
  max-height: 0 !important;
  overflow: visible !important;
}

body.tax-product_cat #brxe-zqtjiz:not(.brx-open) #brxe-eardrk,
body.tax-product_cat #brxe-zqtjiz:not(.brx-open) .brx-offcanvas-backdrop,
body.tax-product_cat .cart-detail.off-canvas.right:not(.open),
body.single-product .cart-detail.off-canvas.right:not(.open) {
  display: none !important;
  visibility: hidden !important;
  pointer-events: none !important;
  transform: translateX(100%) !important;
}

body.tax-product_cat #brxe-zqtjiz.brx-open {
  position: static !important;
  width: 40px !important;
  max-width: 40px !important;
  height: auto !important;
  max-height: none !important;
}

body.tax-product_cat #brxe-zqtjiz.brx-open #brxe-eardrk {
  display: flex !important;
  visibility: visible !important;
  pointer-events: auto !important;
  right: 0 !important;
  left: auto !important;
  width: min(500px, 100vw) !important;
  max-width: min(500px, 100vw) !important;
  transform: none !important;
}

body.tax-product_cat .cart-detail.off-canvas.right.open,
body.single-product .cart-detail.off-canvas.right.open {
  display: block !important;
  visibility: visible !important;
  pointer-events: auto !important;
  right: 0 !important;
  left: auto !important;
  width: min(420px, 100vw) !important;
  max-width: min(420px, 100vw) !important;
  transform: none !important;
}

/* Header, sticky navbar, and mega menus */
#brxe-zcdyve.stick-scroll,
#brxe-zcdyve.is-visible {
  top: 0 !important;
  overflow: visible !important;
}

body.admin-bar #brxe-zcdyve.stick-scroll,
body.admin-bar #brxe-zcdyve.is-visible {
  top: 32px !important;
}

#brxe-zcdyve #brxe-fuvzgq {
  min-height: 96px !important;
  padding: 14px 34px 12px 20px !important;
  box-sizing: border-box !important;
  overflow: visible !important;
  align-items: center !important;
}

#brxe-zcdyve .brxe-woocommerce-mini-cart,
#brxe-zcdyve #brxe-zuigga,
#brxe-zcdyve #brxe-kwhnox,
#brxe-zcdyve .brxe-woocommerce-mini-cart > a,
#brxe-zcdyve #brxe-zuigga > a,
#brxe-zcdyve #brxe-kwhnox > a {
  width: 34px !important;
  min-width: 34px !important;
  height: 34px !important;
  min-height: 34px !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  overflow: visible !important;
  box-sizing: border-box !important;
}

#brxe-zcdyve .brxe-woocommerce-mini-cart,
#brxe-zcdyve #brxe-zuigga,
#brxe-zcdyve #brxe-kwhnox {
  margin-right: 8px !important;
}

#brxe-zcdyve .cart-detail.off-canvas.right:not(.open) {
  display: none !important;
  visibility: hidden !important;
  pointer-events: none !important;
}

#brxe-zcdyve .brx-dropdown-content.brx-submenu-positioned {
  top: 34px !important;
}

/* 25/08/2026: the first selector had no page guard, so it underlined EVERY
   header link containing /collections/abayas/ on every page - 17 of them once
   the mega menu (WPCode 39125) put the full taxonomy in the header. This is
   the active-nav-link style, so it now carries the same body-class guard the
   other two selectors already had. */
body.tax-product_cat.term-abayas #brx-header a[href*="/collections/abayas/"],
body.tax-product_cat.term-abayas #brx-header a[href="https://abayasboutique.com/collections/abayas/"],
body.tax-product_cat.term-abayas #brx-header a[href$="/collections/abayas/"] {
  color: var(--abx-ink) !important;
  text-decoration: underline !important;
  text-underline-offset: 7px !important;
  text-decoration-thickness: 1px !important;
  /* muted underline - the black line read as heavy against 15px nav text */
  text-decoration-color: var(--abx-muted) !important;
}

#brx-header nav a,
#brx-header .brxe-nav-nested a {
  transition: color var(--abx-ease), text-decoration-color var(--abx-ease) !important;
}

#brx-header nav a:hover,
#brx-header .brxe-nav-nested a:hover {
  color: var(--abx-ink) !important;
  text-decoration: underline !important;
  text-underline-offset: 7px !important;
  text-decoration-thickness: 1px !important;
  text-decoration-color: var(--abx-muted) !important;
}

@media (min-width: 992px) {
  #brx-header,
  #brxe-mdhthq,
  #brxe-fiaicz,
  #brxe-vgdhby,
  #brxe-wqzyga {
    overflow: visible !important;
  }

  #brx-header {
    position: relative;
    z-index: 9999;
  }

  #brxe-vgdhby .brx-dropdown-content {
    /* position + top are set in WPCode snippet #38355, anchored to the
       header with top 100%. The old hardcoded 216px here was the height of
       the pre-thin-nav header and no longer matches anything. */
    right: 0 !important;
    left: 0 !important;
    z-index: 999999 !important;
    width: 100vw !important;
    max-width: 100vw !important;
    min-height: 0 !important;
    margin: 0 !important;
    padding: 34px 56px 38px !important;
    background: #fff !important;
    border-top: 0 !important;
    border-bottom: 1px solid #111 !important;
    box-shadow: 0 18px 34px rgba(0, 0, 0, .06) !important;
  }

  #brxe-vgdhby .brx-dropdown-content > .brxe-div {
    max-width: 1320px !important;
    margin: 0 auto !important;
  }

  #brxe-vgdhby .brx-dropdown-content a {
    text-decoration: none !important;
  }

  #brxe-vgdhby .brx-dropdown-content .brxe-text-link {
    font-size: 15px !important;
    line-height: 1.35 !important;
    white-space: normal !important;
  }

  #brxe-vgdhby .brx-dropdown-content img {
    display: block;
  }

  #brxe-woggtc #brxe-bserlt {
    display: grid !important;
    grid-template-columns: 360px minmax(0, 1fr) !important;
    align-items: start !important;
    gap: 56px !important;
    max-width: 1240px !important;
    margin: 0 auto !important;
  }

  #brxe-woggtc #brxe-rdipzz,
  #brxe-woggtc #brxe-rsnsgn {
    width: auto !important;
    margin: 0 !important;
  }

  #brxe-woggtc #brxe-tzzwpf {
    display: grid !important;
    grid-template-columns: repeat(2, minmax(130px, 1fr)) !important;
    column-gap: 42px !important;
    row-gap: 18px !important;
    margin: 0 !important;
  }

  #brxe-woggtc .brxe-imqufq.brxe-text-link {
    display: inline-block !important;
    font-size: 15px !important;
    line-height: 1.25 !important;
    white-space: nowrap !important;
  }

  #brxe-woggtc #brxe-nwwxvv {
    display: flex !important;
    justify-content: flex-start !important;
    gap: 24px !important;
    margin: 0 !important;
  }

  #brxe-woggtc #brxe-nwwxvv .brxe-azxxos {
    display: block !important;
    width: 210px !important;
    line-height: 0 !important;
  }

  #brxe-woggtc #brxe-nwwxvv .brxe-yzcjhr,
  #brxe-woggtc #brxe-nwwxvv .brxe-yzcjhr img {
    width: 210px !important;
    height: 260px !important;
    aspect-ratio: 4 / 5 !important;
    object-fit: cover !important;
  }

  #brxe-woggtc #brxe-nwwxvv .brxe-duuybe {
    display: none !important;
  }

  #brxe-bttzfj.brx-dropdown-content {
    padding: 56px 48px 42px !important;
  }

  #brxe-bttzfj #brxe-puvupd,
  #brxe-bttzfj #brxe-njxodq {
    max-width: 1580px !important;
    margin: 0 auto !important;
    padding: 0 !important;
  }

  #brxe-bttzfj #brxe-uvaeph {
    display: grid !important;
    grid-template-columns: repeat(5, minmax(0, 1fr)) !important;
    gap: 24px !important;
    align-items: start !important;
    width: 100% !important;
    max-width: 1580px !important;
    margin: 0 auto !important;
  }

  #brxe-bttzfj .brxe-jcshej {
    display: block !important;
    width: 100% !important;
    min-width: 0 !important;
  }

  #brxe-bttzfj .brxe-ckmujf {
    display: block !important;
    width: 100% !important;
    aspect-ratio: 4 / 5 !important;
    overflow: hidden !important;
    background: #f7f5f1 !important;
  }

  #brxe-bttzfj .brxe-ckmujf img {
    width: 100% !important;
    height: 100% !important;
    object-fit: cover !important;
    object-position: center center !important;
  }

  #brxe-bttzfj .brxe-gtasud {
    display: block !important;
    margin: 18px 0 0 !important;
    color: #222 !important;
    font-size: 15px !important;
    font-weight: 400 !important;
    line-height: 1.25 !important;
    text-align: left !important;
    text-transform: lowercase !important;
  }

  #brxe-dlkxai.brx-dropdown-content,
  #brxe-mtvtnj.brx-dropdown-content {
    left: 20px !important;
    right: auto !important;
    width: calc(100vw - 40px) !important;
    min-width: 0 !important;
    max-width: calc(100vw - 40px) !important;
    box-sizing: border-box !important;
    overflow-x: clip !important;
  }

  #brxe-dlkxai.brx-dropdown-content > .brxe-div,
  #brxe-mtvtnj.brx-dropdown-content > .brxe-div {
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
    box-sizing: border-box !important;
    overflow-x: clip !important;
  }
}

/* Homepage category strip */
@media (min-width: 992px) {
  #brxe-pxuddi {
    padding: 56px 0 64px !important;
    background: #fff !important;
  }

  #brxe-pxuddi #brxe-rrdzsp {
    display: grid !important;
    grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
    gap: 18px !important;
    max-width: 1840px !important;
    margin: 0 auto !important;
    padding: 0 48px !important;
  }

  #brxe-pxuddi .brxe-div {
    min-width: 0 !important;
  }

  #brxe-pxuddi .brxe-image,
  #brxe-pxuddi .brxe-image img {
    display: block !important;
    width: 100% !important;
    aspect-ratio: 4 / 5 !important;
    object-fit: cover !important;
  }

  #brxe-pxuddi .brxe-text {
    margin-top: 12px !important;
  }

  #brxe-pxuddi .brxe-text p {
    margin: 0 !important;
    font-size: 15px !important;
    line-height: 1.25 !important;
    text-transform: lowercase !important;
  }

  #brxe-uvwizr {
    margin-top: 0 !important;
  }
}

/* Homepage jersey product grid */
@media (min-width: 992px) {
  #brxe-xuyqwb {
    padding: 56px 0 72px !important;
    background: #fff !important;
  }

  #brxe-xuyqwb #brxe-xhepir {
    max-width: 1840px !important;
    margin: 0 auto !important;
    padding: 0 48px !important;
  }

  #brxe-xuyqwb .pm-products-grid {
    display: grid !important;
    grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
    column-gap: 18px !important;
    row-gap: 42px !important;
  }

  #brxe-xuyqwb .brxe-gdikwn {
    position: relative !important;
    display: flex !important;
    flex-direction: column !important;
    gap: 0 !important;
    overflow: visible !important;
  }

  #brxe-xuyqwb .brxe-xkvjck {
    display: block !important;
    width: 100% !important;
    height: auto !important;
    aspect-ratio: 4 / 5 !important;
    overflow: hidden !important;
    background: #f7f5f1 !important;
  }

  #brxe-xuyqwb .brxe-xkvjck img {
    width: 100% !important;
    height: 100% !important;
    object-fit: cover !important;
    object-position: center top !important;
  }

  #brxe-xuyqwb .brxe-nsfxur {
    position: absolute !important;
    top: 12px !important;
    right: 12px !important;
    z-index: 4 !important;
    margin: 0 !important;
  }

  #brxe-xuyqwb .brxe-alaniw {
    position: static !important;
    width: 34px !important;
    height: 34px !important;
    margin: 0 !important;
    background: rgba(255, 255, 255, .88) !important;
    border-radius: 999px !important;
  }

  #brxe-xuyqwb .brxe-dlvafh {
    margin-top: 12px !important;
    gap: 4px !important;
  }

  #brxe-xuyqwb .brxe-mreztj,
  #brxe-xuyqwb .brxe-uiripe {
    margin: 0 !important;
    font-size: 15px !important;
    line-height: 1.35 !important;
  }

  #brxe-xuyqwb #brxe-tuuiji {
    margin-top: 18px !important;
  }
}

/* Single product */
body.single-product .brxe-wxkwrd,
body.single-product .brxe-eggtmd {
  background: var(--abx-paper) !important;
}

body.single-product .brxe-eggtmd {
  border-top: 1px solid var(--abx-line) !important;
  padding-top: clamp(44px, 5vw, 78px) !important;
}

body.single-product #brxe-fchnwm.brxe-product-title,
body.single-product .brxe-fchnwm.brxe-product-title {
  margin: 0 0 18px !important;
  color: var(--abx-ink) !important;
  font-family: var(--abx-serif) !important;
  font-size: clamp(42px, 4.4vw, 72px) !important;
  font-weight: 500 !important;
  line-height: .95 !important;
  letter-spacing: 0 !important;
  text-transform: none !important;
  text-wrap: balance;
}

body.single-product #brxe-qpppmp.brxe-product-price,
body.single-product #brxe-qpppmp.brxe-product-price .price,
body.single-product #brxe-qpppmp.brxe-product-price .amount,
body.single-product #brxe-qpppmp.brxe-product-price bdi,
body.single-product #brxe-qpppmp .price > span,
body.single-product .brxe-qpppmp.brxe-product-price,
body.single-product .brxe-qpppmp.brxe-product-price .price,
body.single-product .brxe-qpppmp.brxe-product-price .amount,
body.single-product .brxe-qpppmp.brxe-product-price bdi {
  color: var(--abx-ink) !important;
  font-family: var(--abx-sans) !important;
  font-size: clamp(18px, 1.5vw, 22px) !important;
  font-weight: 500 !important;
  line-height: 1.25 !important;
  letter-spacing: .01em !important;
  font-variant-numeric: tabular-nums;
}

body.single-product #brxe-qpppmp.brxe-product-price,
body.single-product .brxe-qpppmp.brxe-product-price {
  margin: 0 0 24px !important;
  padding-top: 0 !important;
}

body.single-product #brxe-xpyayd.brxe-product-add-to-cart,
body.single-product .brxe-xpyayd.brxe-product-add-to-cart {
  border-top: 1px solid var(--abx-line) !important;
  border-bottom: 1px solid var(--abx-line) !important;
  padding: 20px 0 22px !important;
  margin-top: 18px !important;
}

body.single-product form.variations_form.cart {
  display: flex !important;
  flex-direction: column !important;
  gap: 16px !important;
  font-family: var(--abx-sans) !important;
}

body.single-product form.variations_form.cart table.variations,
body.single-product form.variations_form.cart tbody,
body.single-product form.variations_form.cart tr,
body.single-product form.variations_form.cart td,
body.single-product form.variations_form.cart th {
  display: block !important;
  width: 100% !important;
  border: 0 !important;
  padding: 0 !important;
}

body.single-product form.variations_form.cart label {
  display: block !important;
  margin-bottom: 10px !important;
  color: var(--abx-muted) !important;
  font-size: 11px !important;
  font-weight: 500 !important;
  letter-spacing: .14em !important;
  text-transform: uppercase !important;
}

body.single-product .variable-items-wrapper,
body.single-product .woo-variation-items-wrapper,
body.single-product .value {
  display: flex !important;
  flex-wrap: wrap !important;
  gap: 8px !important;
  align-items: center !important;
}

body.single-product .variable-item,
body.single-product .button-variable-item,
body.single-product .wvs-style-squared .variable-item {
  min-width: 44px !important;
  height: 40px !important;
  border: 1px solid var(--abx-line) !important;
  border-radius: 0 !important;
  background: #fff !important;
  color: var(--abx-ink) !important;
  box-shadow: none !important;
  transition: border-color var(--abx-ease), background-color var(--abx-ease), transform var(--abx-ease) !important;
}

body.single-product .variable-item:hover,
body.single-product .variable-item.selected,
body.single-product .button-variable-item.selected {
  border-color: var(--abx-ink) !important;
  background: var(--abx-soft) !important;
}

body.single-product #brxe-xpyayd .single_variation_wrap,
body.single-product #brxe-xpyayd .woocommerce-variation-add-to-cart,
body.single-product #brxe-xpyayd .woocommerce-variation-add-to-cart-enabled,
body.single-product #brxe-xpyayd .woocommerce-variation-add-to-cart-disabled,
body.single-product .single_variation_wrap,
body.single-product .woocommerce-variation-add-to-cart {
  width: 100% !important;
  max-width: 100% !important;
  display: flex !important;
  flex-wrap: wrap !important;
  gap: 12px !important;
}

body.single-product #brxe-xpyayd button.single_add_to_cart_button.button.alt,
body.single-product #brxe-xpyayd .single_add_to_cart_button.button.alt,
body.single-product .single_add_to_cart_button.button.alt {
  width: 100% !important;
  max-width: 100% !important;
  min-width: 0 !important;
  min-height: 56px !important;
  flex: 1 1 100% !important;
  align-self: stretch !important;
  border: 1px solid var(--abx-ink) !important;
  border-radius: 0 !important;
  background: var(--abx-ink) !important;
  color: #fff !important;
  font-family: var(--abx-sans) !important;
  font-size: 12px !important;
  font-weight: 600 !important;
  letter-spacing: .14em !important;
  text-transform: uppercase !important;
  transition: background-color var(--abx-ease), color var(--abx-ease), transform var(--abx-ease) !important;
}

body.single-product #brxe-xpyayd button.single_add_to_cart_button.button.alt:not(.disabled):hover,
body.single-product #brxe-xpyayd .single_add_to_cart_button.button.alt:not(.disabled):hover,
body.single-product .single_add_to_cart_button.button.alt:not(.disabled):hover {
  background: #fff !important;
  color: var(--abx-ink) !important;
}

body.single-product .brxe-eggtmd h2,
body.single-product .brxe-eggtmd .brxe-heading:first-child {
  color: var(--abx-ink) !important;
  font-family: var(--abx-serif) !important;
  font-weight: 500 !important;
  letter-spacing: 0 !important;
}

body.single-product .brx-grid .brxe-cvqllw .brxe-odzfgu.brxe-image,
body.single-product .brx-grid .brxe-cvqllw img.brxe-odzfgu {
  aspect-ratio: 3 / 4 !important;
  object-fit: cover !important;
  background: var(--abx-soft) !important;
}

body.single-product .brx-grid .brxe-cvqllw .brxe-xhptac.brxe-heading {
  color: var(--abx-ink) !important;
  font-family: var(--abx-sans) !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  line-height: 1.35 !important;
}

body.single-product .brx-grid .brxe-cvqllw .brxe-qccobv.brxe-heading {
  color: var(--abx-muted) !important;
  font-size: 12px !important;
  font-variant-numeric: tabular-nums;
}

body.single-product .brxe-veayfd {
  border-top: 1px solid var(--abx-line) !important;
  color: var(--abx-muted) !important;
  font-size: 12px !important;
  letter-spacing: .04em !important;
}

/* Footer */
#brx-footer {
  background: var(--abx-soft) !important;
  border-top: 1px solid var(--abx-line) !important;
  color: var(--abx-ink) !important;
  font-family: var(--abx-sans) !important;
}

#brx-footer #brxe-qchqhb.brxe-section {
  background: transparent !important;
  padding-top: clamp(44px, 5vw, 70px) !important;
}

#brx-footer #brxe-dgxult.brxe-container {
  width: 100% !important;
  max-width: 1320px !important;
  margin-inline: auto !important;
  padding-inline: clamp(20px, 3vw, 42px) !important;
  box-sizing: border-box !important;
  gap: clamp(26px, 3vw, 48px) !important;
  align-items: flex-start !important;
}

#brx-footer h1,
#brx-footer h2,
#brx-footer h3,
#brx-footer h4,
#brx-footer h5,
#brx-footer h6,
#brx-footer .brxe-heading {
  margin-bottom: 13px !important;
  color: var(--abx-ink) !important;
  font-family: var(--abx-sans) !important;
  font-size: 11px !important;
  font-weight: 600 !important;
  line-height: 1.3 !important;
  letter-spacing: .16em !important;
  text-transform: uppercase !important;
}

#brx-footer a {
  color: rgba(20, 19, 16, .76) !important;
  font-size: 13px !important;
  line-height: 1.7 !important;
  text-decoration: none !important;
  transition: color var(--abx-ease), transform var(--abx-ease) !important;
}

#brx-footer a:hover,
#brx-footer a:focus-visible {
  color: var(--abx-ink) !important;
  text-decoration: underline !important;
  text-underline-offset: 4px !important;
}

#brx-footer #n-help,
#brx-footer #o-account,
#brx-footer #g-touch,
#brx-footer #n-newsletter {
  min-width: 0 !important;
}

#brx-footer #g-touch a,
#brx-footer #n-newsletter a {
  font-size: 12px !important;
  letter-spacing: .02em !important;
}

#brx-footer #n-newsletter {
  border-left: 1px solid rgba(20, 19, 16, .10) !important;
  padding-left: clamp(22px, 3vw, 38px) !important;
}

#brx-footer #n-newsletter p,
#brx-footer #n-newsletter .brxe-text {
  max-width: 34ch !important;
  color: rgba(20, 19, 16, .68) !important;
  font-size: 13px !important;
  line-height: 1.55 !important;
}

#brx-footer form.brxe-form,
#brx-footer #f-news-letter {
  display: flex !important;
  align-items: stretch !important;
  gap: 0 !important;
  width: 100% !important;
  max-width: 390px !important;
  margin-top: 16px !important;
  border: 1px solid rgba(20, 19, 16, .22) !important;
  background: rgba(255, 255, 255, .58) !important;
  box-sizing: border-box !important;
  overflow: hidden !important;
}

#brx-footer form.brxe-form input,
#brx-footer #f-news-letter input {
  min-height: 44px !important;
  flex: 1 1 0 !important;
  min-width: 0 !important;
  border: 0 !important;
  background: transparent !important;
  color: var(--abx-ink) !important;
  padding: 0 14px !important;
  font-size: 13px !important;
  outline: none !important;
  box-sizing: border-box !important;
}

#brx-footer form.brxe-form input:focus,
#brx-footer #f-news-letter input:focus {
  box-shadow: inset 0 0 0 1px var(--abx-ink) !important;
}

#brx-footer form.brxe-form button,
#brx-footer #f-news-letter button,
#brx-footer #f-news-letter .bricks-button {
  min-height: 44px !important;
  flex: 0 0 116px !important;
  width: auto !important;
  min-width: 0 !important;
  max-width: 116px !important;
  border: 0 !important;
  border-left: 1px solid rgba(20, 19, 16, .22) !important;
  border-radius: 0 !important;
  background: var(--abx-ink) !important;
  color: #fff !important;
  font-size: 11px !important;
  font-weight: 600 !important;
  letter-spacing: .14em !important;
  text-transform: uppercase !important;
  box-sizing: border-box !important;
}

#brx-footer form.brxe-form button:hover,
#brx-footer #f-news-letter button:hover,
#brx-footer #f-news-letter .bricks-button:hover {
  background: #fff !important;
  color: var(--abx-ink) !important;
}

#brx-footer #brxe-xnyrlw {
  display: grid !important;
  grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
  gap: 6px 18px !important;
  margin-top: 10px !important;
}

#brx-footer #brxe-kjcefb {
  border-top: 1px solid rgba(20, 19, 16, .10) !important;
  color: rgba(20, 19, 16, .62) !important;
  font-size: 11px !important;
  letter-spacing: .16em !important;
  text-transform: uppercase !important;
}

/* Mobile and tablet containment */
@media (max-width: 782px) {
  body.admin-bar #brxe-zcdyve.stick-scroll,
  body.admin-bar #brxe-zcdyve.is-visible {
    top: 46px !important;
  }
}

@media (max-width: 767px) {
  html,
  body {
    max-width: 100% !important;
    overflow-x: hidden !important;
  }

  body.tax-product_cat #brx-content,
  body.tax-product_cat #brx-content .brxe-container,
  body.tax-product_cat #brxe-wcvwsp,
  body.tax-product_cat #brxe-zbmbpf,
  body.tax-product_cat #brxe-drqfyo {
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
    margin-left: 0 !important;
    margin-right: 0 !important;
    box-sizing: border-box !important;
    overflow-x: hidden !important;
  }

  body.tax-product_cat #brxe-silcnv,
  body.tax-product_cat #brxe-wcvwsp {
    padding-inline: 10px !important;
  }

  body.tax-product_cat #brxe-nigaxl,
  body.tax-product_cat #brxe-zbmbpf,
  body.tax-product_cat #brxe-gpinfi,
  body.tax-product_cat #brxe-drqfyo.brx-grid {
    width: calc(100vw - 20px) !important;
    max-width: calc(100vw - 20px) !important;
  }

  body.tax-product_cat #brxe-nigaxl {
    margin-top: 22px !important;
    margin-bottom: 18px !important;
    text-align: left !important;
  }

  body.tax-product_cat #brxe-fnrvwe {
    margin-bottom: 10px !important;
    font-size: clamp(34px, 12vw, 46px) !important;
    line-height: .95 !important;
  }

  body.tax-product_cat #brxe-vrxwjv,
  body.tax-product_cat .term-description {
    margin-inline: 0 !important;
    font-size: 14px !important;
    line-height: 1.55 !important;
  }

  body.tax-product_cat #brxe-zbmbpf {
    min-height: auto !important;
    padding: 12px 0 14px !important;
    margin-bottom: 18px !important;
    gap: 10px !important;
  }

  body.tax-product_cat #brxe-gpinfi {
    height: 48px !important;
    max-height: 48px !important;
    min-height: 48px !important;
  }

  body.tax-product_cat #brxe-drqfyo.brx-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    column-gap: 10px !important;
    row-gap: 28px !important;
    overflow: hidden !important;
  }

  body.tax-product_cat #brxe-drqfyo .brxe-cvqllw,
  body.tax-product_cat #brxe-drqfyo .brxe-oiqzfz {
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
    box-sizing: border-box !important;
  }

  body.tax-product_cat #brxe-drqfyo .brxe-odzfgu.brxe-image,
  body.tax-product_cat #brxe-drqfyo .brxe-odzfgu.brxe-image img {
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
    box-sizing: border-box !important;
  }

  body.tax-product_cat .brxe-cvqllw .brxe-oiqzfz.brxe-div {
    gap: 10px !important;
  }

  body.tax-product_cat .brxe-cvqllw .brxe-oyayle.brxe-div {
    display: flex !important;
    flex-direction: column !important;
    align-items: flex-start !important;
    gap: 4px !important;
    min-height: 54px !important;
  }

  body.tax-product_cat .brxe-cvqllw .brxe-xhptac.brxe-heading {
    font-size: 12px !important;
    line-height: 1.32 !important;
  }

  body.tax-product_cat .brxe-cvqllw .brxe-qccobv.brxe-heading {
    font-size: 11px !important;
  }

  body.tax-product_cat .brxe-cvqllw .brxe-krrrar.brxe-div,
  body.tax-product_cat .brxe-cvqllw .brxe-odexon.brxe-div {
    width: 30px !important;
    height: 30px !important;
    top: 8px !important;
  }

  body.tax-product_cat .brxe-cvqllw .brxe-krrrar.brxe-div {
    top: auto !important;
    right: 8px !important;
    bottom: 72px !important;
    left: auto !important;
  }

  body.tax-product_cat .brxe-cvqllw .brxe-odexon.brxe-div {
    right: 8px !important;
  }

  body.tax-product_cat #brxe-pkotcu,
  body.tax-product_cat #brxe-ljjcim,
  body.tax-product_cat #brxe-ykrcdi,
  body.tax-product_cat .woocommerce-ordering {
    display: none !important;
  }

  body.tax-product_cat #brxe-zqtjiz:not(.brx-open),
  body.tax-product_cat #brxe-zqtjiz:not(.brx-open) #brxe-eardrk,
  body.tax-product_cat .cart-detail.off-canvas.right:not(.open),
  .cart-detail.off-canvas.right:not(.open) {
    display: none !important;
    visibility: hidden !important;
    pointer-events: none !important;
  }

  body.tax-product_cat #brxe-zqtjiz.brx-open #brxe-eardrk,
  body.tax-product_cat .cart-detail.off-canvas.right.open,
  .cart-detail.off-canvas.right.open {
    display: flex !important;
    visibility: visible !important;
    pointer-events: auto !important;
    right: 0 !important;
    left: auto !important;
    width: 100vw !important;
    max-width: 100vw !important;
  }

  body.tax-product_cat form,
  body.tax-product_cat .brxe-form,
  body.tax-product_cat .brxe-form .form-group,
  body.tax-product_cat .brxe-container form,
  .brxe-form,
  .brxe-form form,
  .brxe-form .form-group,
  footer form,
  footer .brxe-form {
    max-width: 100% !important;
    min-width: 0 !important;
    box-sizing: border-box !important;
    flex-wrap: wrap !important;
  }

  body.tax-product_cat input,
  body.tax-product_cat select,
  body.tax-product_cat button,
  body.tax-product_cat .bricks-button,
  footer input,
  footer button,
  footer .bricks-button,
  .brxe-form input,
  .brxe-form button,
  .brxe-form .bricks-button {
    max-width: 100% !important;
    box-sizing: border-box !important;
  }

  body.single-product #brxe-bqxhwn,
  body.single-product #brxe-uzabsm,
  body.single-product #brxe-kowxmx,
  body.single-product #brxe-guuqnf,
  body.single-product .sgg-wrap {
    width: calc(100vw - 10px) !important;
    max-width: calc(100vw - 10px) !important;
    min-width: 0 !important;
    box-sizing: border-box !important;
    overflow-x: hidden !important;
  }

  body.single-product .sgg-grid {
    display: grid !important;
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    gap: 8px !important;
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
    overflow-x: hidden !important;
  }

  body.single-product .sgg-grid .sgg-item,
  body.single-product .sgg-grid img {
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
    height: auto !important;
    box-sizing: border-box !important;
  }

  body.single-product #brxe-fchnwm.brxe-product-title,
  body.single-product .brxe-fchnwm.brxe-product-title {
    margin-bottom: 12px !important;
    font-size: clamp(36px, 11vw, 48px) !important;
  }

  body.single-product #brxe-qpppmp.brxe-product-price,
  body.single-product #brxe-qpppmp.brxe-product-price .price,
  body.single-product #brxe-qpppmp.brxe-product-price .amount,
  body.single-product #brxe-qpppmp.brxe-product-price bdi,
  body.single-product .brxe-qpppmp.brxe-product-price,
  body.single-product .brxe-qpppmp.brxe-product-price .price,
  body.single-product .brxe-qpppmp.brxe-product-price .amount,
  body.single-product .brxe-qpppmp.brxe-product-price bdi {
    font-size: 18px !important;
  }

  body.single-product #brxe-xpyayd.brxe-product-add-to-cart,
  body.single-product .brxe-xpyayd.brxe-product-add-to-cart {
    padding: 16px 0 18px !important;
  }

  #brx-footer #brxe-qchqhb.brxe-section {
    padding-top: 36px !important;
  }

  #brx-footer #brxe-dgxult.brxe-container {
    padding-inline: 20px !important;
    gap: 28px !important;
  }

  #brx-footer #n-newsletter {
    border-left: 0 !important;
    border-top: 1px solid rgba(20, 19, 16, .10) !important;
    padding-left: 0 !important;
    padding-top: 26px !important;
  }

  #brx-footer form.brxe-form,
  #brx-footer #f-news-letter {
    max-width: 100% !important;
  }

  #brx-footer form.brxe-form button,
  #brx-footer #f-news-letter button,
  #brx-footer #f-news-letter .bricks-button {
    flex-basis: 104px !important;
    max-width: 104px !important;
  }

  #brxe-bwxecd:not(.brx-open),
  #brxe-guwwws:not(.brx-open),
  .brxe-offcanvas:not(.brx-open) #brxe-bwxecd,
  .brxe-offcanvas:not(.brx-open) #brxe-guwwws {
    display: none !important;
    visibility: hidden !important;
    pointer-events: none !important;
  }

  .brxe-offcanvas.brx-open #brxe-bwxecd,
  .brxe-offcanvas.brx-open #brxe-guwwws {
    display: flex !important;
    visibility: visible !important;
    pointer-events: auto !important;
  }

  #brxe-zcdyve #brxe-fuvzgq {
    min-height: 84px !important;
    padding: 12px 22px 10px 14px !important;
  }

  #brxe-zcdyve .brxe-woocommerce-mini-cart,
  #brxe-zcdyve #brxe-zuigga,
  #brxe-zcdyve #brxe-kwhnox,
  #brxe-zcdyve .brxe-woocommerce-mini-cart > a,
  #brxe-zcdyve #brxe-zuigga > a,
  #brxe-zcdyve #brxe-kwhnox > a {
    width: 32px !important;
    min-width: 32px !important;
    height: 32px !important;
    min-height: 32px !important;
  }
}


/* Fix: remove redundant/broken duplicate size-swatch widget.
   This product page renders the size selector twice - once via the
   theme's native swatches (ul.bricks-variation-swatches, styled correctly)
   and once via the Variation Swatches plugin's radio list
   (.woo-variation-items-wrapper), which was never styled and rendered
   as overlapping images/price/stock text under the real swatches.
   The native swatches remain fully functional (selection, stock, add to
   cart), so we simply hide the redundant duplicate widget. */
body.single-product .woo-variation-items-wrapper {
  display: none !important;
}

/* Fix: Jersey Hijab product grid (#brxe-xuyqwb) collapses to 0 height
   because its card content wrapper (.brxe-nsfxur) is absolutely
   positioned, taking it out of normal flow. This caused the grid's
   images/text to visually spill down on top of the "Visit Our
   Flagship Store" / "International Orders" banner section below it.
   Restoring normal flow lets the grid reserve its real height. */
#brxe-xuyqwb .brxe-nsfxur {
  position: static !important;
  top: auto !important;
  left: auto !important;
  right: auto !important;
  bottom: auto !important;
  width: 100% !important;
}


/* Fix: homepage product-card photos hidden + heart/plus icons not
   overlaid on the image. Three homepage product-grid templates
   (RSVP/wedding row, Heatwave-style row, Jersey Hijab row) had their
   photo element set to display:none, and their wishlist/quick-add
   badges were positioned relative to the whole card (image + title +
   price) instead of just the photo, so the icons floated in the gap
   above/below the photo instead of sitting on it like they correctly
   do on the shop/category pages. This restores the photos and
   re-anchors both badges to the top corners of the image. */
.brxe-qzgyyq .brxe-rpqkqk.brxe-image,
.brxe-hyyqnr .brxe-dzustp.brxe-image {
  display: block !important;
}
.brxe-gbavbp, .brxe-ekmsmb {
  position: static !important;
  height: 0 !important;
  overflow: visible !important;
}
.brxe-vdesrm, .brxe-grzwlt {
  position: absolute !important;
  top: auto !important;
  left: auto !important;
  right: 12px !important;
  bottom: 12px !important;
  width: 34px !important;
  height: 34px !important;
  background: rgba(251, 250, 247, .92) !important;
  border: 1px solid rgba(20, 19, 16, .12) !important;
  box-shadow: 0 8px 22px rgba(65, 52, 35, .10) !important;
  backdrop-filter: blur(8px) !important;
  border-radius: 999px !important;
  z-index: 12 !important;
}
.brxe-dhrldp, .brxe-ogbvke {
  top: 12px !important;
  right: 12px !important;
  bottom: auto !important;
  left: auto !important;
  border: 1px solid rgba(20, 19, 16, .12) !important;
  box-shadow: 0 8px 22px rgba(65, 52, 35, .10) !important;
  backdrop-filter: blur(8px) !important;
  z-index: 12 !important;
}
#brxe-xuyqwb .brxe-alaniw {
  position: absolute !important;
  top: 12px !important;
  right: 12px !important;
  left: auto !important;
  bottom: auto !important;
  background: rgba(251, 250, 247, .92) !important;
  border: 1px solid rgba(20, 19, 16, .12) !important;
  box-shadow: 0 8px 22px rgba(65, 52, 35, .10) !important;
  backdrop-filter: blur(8px) !important;
  z-index: 12 !important;
}
#brxe-xuyqwb .brxe-xrqbyx {
  top: auto !important;
  left: auto !important;
  right: 12px !important;
  bottom: 12px !important;
  background: rgba(251, 250, 247, .92) !important;
  border: 1px solid rgba(20, 19, 16, .12) !important;
  box-shadow: 0 8px 22px rgba(65, 52, 35, .10) !important;
  backdrop-filter: blur(8px) !important;
  z-index: 12 !important;
}

/* Homepage mobile product cards: restore images */
@media (max-width: 767px) {
  body.home #brxe-xuyqwb .brxe-qnouhg,
  body.home #brxe-xuyqwb .brxe-bhrvyo {
    position: relative !important;
    display: block !important;
    width: 100% !important;
    aspect-ratio: 3 / 4 !important;
    overflow: hidden !important;
    line-height: 0 !important;
  }

  body.home #brxe-xuyqwb .brxe-ccsrdi,
  body.home #brxe-xuyqwb img.brxe-ccsrdi {
    display: block !important;
    width: 100% !important;
    max-width: none !important;
    height: 100% !important;
    object-fit: cover !important;
    object-position: center top !important;
  }

  body.home #brxe-xuyqwb .brxe-xrqbyx {
    position: absolute !important;
    right: 10px !important;
    bottom: 10px !important;
    top: auto !important;
    left: auto !important;
    z-index: 20 !important;
  }

  body.home #brxe-xuyqwb .brxe-alaniw {
    position: absolute !important;
    top: 10px !important;
    right: 10px !important;
    bottom: auto !important;
    left: auto !important;
    z-index: 20 !important;
  }
}

/* --- Size (Length) swatch fix: correct overlapping layout & sizing --- */
body.single-product .variable-items-wrapper.radio-variable-items-wrapper {
  flex-direction: column !important;
  align-items: stretch !important;
  width: 100% !important;
  gap: 8px !important;
}
body.single-product .radio-variable-item {
  width: 100% !important;
  min-width: 100% !important;
  height: auto !important;
  min-height: 44px !important;
  box-sizing: border-box !important;
}
body.single-product .radio-variable-item .variable-item-contents {
  width: 100% !important;
  height: auto !important;
  justify-content: flex-start !important;
  padding: 6px 12px !important;
  box-sizing: border-box !important;
}
body.single-product .radio-variable-item .variable-item-radio-input-wrapper {
  width: 100% !important;
}
body.single-product .radio-variable-item .variable-item-radio-value-wrapper {
  display: flex !important;
  align-items: center !important;
  flex-wrap: wrap !important;
  gap: 8px !important;
  width: 100% !important;
  height: auto !important;
}
body.single-product .radio-variable-item .variable-item-radio-value-wrapper img {
  width: 32px !important;
  height: 32px !important;
  object-fit: cover !important;
  flex-shrink: 0 !important;
}
body.single-product .radio-variable-item .variable-item-radio-value-wrapper .stock {
  margin: 0 0 0 auto !important;
  font-size: 11px !important;
  white-space: nowrap !important;
}


/* --- Mini-cart drawer fix: toggle script adds class "active" but CSS only revealed ".open" --- */
body.tax-product_cat .cart-detail.off-canvas.right.active,
body.single-product .cart-detail.off-canvas.right.active {
  display: block !important;
  visibility: visible !important;
  pointer-events: auto !important;
  right: 0 !important;
  left: auto !important;
  width: min(420px, 100vw) !important;
  max-width: min(420px, 100vw) !important;
  transform: none !important;
}

/* Fix: sticky header cart drawer not opening (active vs open class mismatch) */
#brxe-zcdyve .cart-detail.off-canvas.right.active {
  display: block !important;
  visibility: visible !important;
  pointer-events: auto !important;
  right: 0 !important;
  left: auto !important;
  width: min(420px, 100vw) !important;
  max-width: min(420px, 100vw) !important;
  transform: none !important;
}


/* --- Length/size radio label alignment fix: label wrapper was blockified to "block" (default UA inline->block via flex-item blockification, beaten by a more specific pre-existing rule "form.variations_form.cart label { display:block !important }"), causing the radio button to stack above the thumbnail+text row instead of sitting beside it --- */
body.single-product form.variations_form.cart .radio-variable-item .variable-item-radio-input-wrapper {
  display: flex !important;
  align-items: center !important;
  gap: 8px !important;
  width: 100% !important;
  cursor: pointer !important;
}

/* --- "Recently Viewed" product carousel: product thumbnail images were forced hidden (display:none) by a leftover Bricks builder rule on this specific card element, leaving only text/price visible --- */
.brxe-eojdzg .brxe-pfjzim.brxe-image {
  display: block !important;
}


/* FIX: Duplicate/redundant "Size" label on cart page items.
   Cart items already show the variation via the title suffix and the
   ".custom-cart-variant" line (e.g. "Size: Regular"), but a second,
   fully redundant ".cart-item-meta" div (e.g. "Size REGULAR") was also
   being rendered from WooCommerce's default cart item data output.
   Hiding the redundant duplicate; the primary variant line is unaffected. */
.cart-item-meta { display: none !important; }

/* FIX: Font Awesome icons broken (showing blank/tofu boxes) in the footer
   "Get in Touch" block (WhatsApp + email icons). Root cause: #brx-footer
   has an unlayered "font-family: var(--abx-sans) !important" rule which,
   per CSS cascade layer rules, beats Font Awesome's layered (non-important)
   .fab/.fas/.fa font-family rules, so the icon glyphs render in the body
   font (Montserrat) instead of the icon font and show as missing-glyph boxes.
   Restoring the correct icon font-family, scoped to the footer icons only. */
#brx-footer i.fa, #brx-footer i.fa-regular, #brx-footer i.far { font-family: "Font Awesome 6 Free" !important; }
#brx-footer i.fa-solid, #brx-footer i.fas { font-family: "Font Awesome 6 Free" !important; font-weight: 900 !important; }
#brx-footer i.fa-brands, #brx-footer i.fab { font-family: "Font Awesome 6 Brands" !important; }


/* FIX (mobile + all widths): Duplicate search icon in header.
   FiboSearch (dgwt-wcas) renders both a CSS ::before background-image icon
   AND its own inline <svg> icon inside the same <a class="dgwt-wcas-search-icon">
   link, causing two overlapping magnifying-glass icons to render stacked
   vertically. The inline SVG is the correct/intended icon, so we hide the
   redundant ::before image. Matches the existing inline rule's specificity
   (a.dgwt-wcas-search-icon::before) so it reliably overrides it. */
a.dgwt-wcas-search-icon::before {
  content: none !important;
}

/* FIX (site-wide): Font Awesome solid icons (fas, weight 900) render as
   blank/broken "tofu" boxes - e.g. footer accordion chevrons on
   "Need Some Help?", "Get in Touch", etc. Root cause: the theme's
   font-awesome-6-layer.min.css only registers an @font-face for
   "Font Awesome 6 Free" at weight 400; the bold/solid 900-weight file is
   registered under a differently-named family ("Font Awesome 6 Solid"),
   so the browser can't match it for any element using
   font-family:"Font Awesome 6 Free" + font-weight:900 (i.e. every "fas"
   icon) and falls back to a font with no matching glyph. This re-registers
   the same font file under the correct family/weight pairing. */
@font-face {
  font-family: "Font Awesome 6 Free";
  font-style: normal;
  font-weight: 900;
  font-display: block;
  src: url("https://abayasboutique.com/wp-content/themes/bricks/assets/fonts/fontawesome/fa-solid-900.woff2") format("woff2"),
       url("https://abayasboutique.com/wp-content/themes/bricks/assets/fonts/fontawesome/fa-solid-900.ttf") format("truetype");
}


/* FIX: Mobile-header mini-cart drawer would not open/close visibly.
   The mobile header's mini-cart toggle only ever adds/removes an "active"
   class on .cart-detail.off-canvas.right, but the existing show/hide CSS
   for this component only responded to an "open" class (used by the
   desktop/category/product-page instances). Result: clicking the bag icon
   on the mobile header did nothing visible (drawer stayed display:none).
   This mirrors/extends the earlier off-canvas open/active fix to also
   cover the "active" state, and gives the backdrop overlay a proper
   full-viewport size/appearance (it previously stayed 0x0 for the same
   reason). */
.cart-detail.off-canvas.right.active {
  display: block !important;
  visibility: visible !important;
  opacity: 1 !important;
  pointer-events: auto !important;
  right: 0 !important;
  left: auto !important;
  transform: none !important;
  z-index: 999999 !important;
}

.cart-detail.off-canvas.right.active ~ .off-canvas-overlay {
  position: fixed !important;
  inset: 0 !important;
  width: 100vw !important;
  height: 100vh !important;
  background: rgba(0, 0, 0, 0.4) !important;
  z-index: 999998 !important;
  display: block !important;
  opacity: 1 !important;
  pointer-events: auto !important;
}


/* Fix: Homepage "Jersey Hijab" product grid (brxe-mzpleb)  images were hidden site-wide (all breakpoints) due to a leftover display:none rule scoped to this section's image element only. Restoring normal display to match all other working product cards. */
.brxe-gdikwn .brxe-xkvjck.brxe-image { display: block !important; }

/* Fix: Homepage "Jersey Hijab" product cards had a large empty gap above each image/title (broken layout, all breakpoints). Root cause: this section's empty media placeholder div (brxe-mzpleb) reserves a 4:5 aspect-ratio box that other working product card sections collapse to 0 height via an existing rule (.brxe-gbavbp, .brxe-ekmsmb)  brxe-mzpleb was missing from that list. Applying the same collapse here. */
.brxe-mzpleb { position: static !important; height: 0px !important; overflow: visible !important; }


/* Fix: Sitewide product grid on ALL shop/collection pages (element brxe-lplnin, shared archive template)  same empty media placeholder bug as the homepage Jersey Hijab section: this element's 4:5 aspect-ratio box wasn't in the existing height-collapse override list, causing a large empty gap above every single product image on every category/collection page. Adding it to the list. */
.brxe-lplnin { position: static !important; height: 0px !important; overflow: visible !important; }


/* Express checkout: Apple Pay + Google Pay on one row (added 20 Aug 2026) */
.woocommerce-variation-add-to-cart.variations_button{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-start}
.woocommerce-variation-add-to-cart.variations_button > *{flex:0 0 100%;margin:0}
.woocommerce-variation-add-to-cart.variations_button > .wc-revolut-payment-request-instance{flex:1 1 calc(50% - 6px);min-width:0}
.wc-revolut-payment-request-instance > div,
.wc-revolut-payment-request-instance iframe{width:100% !important;max-width:100% !important}
@media (max-width:600px){.woocommerce-variation-add-to-cart.variations_button > .wc-revolut-payment-request-instance{flex:0 0 100%}}



