/*
 Theme Name:   Snug Scent
 Theme URI:    https://snugscent.co.uk
 Description:  Snug Scent child theme for Bricks Builder.
 Author:       BIGMatrix
 Author URI:   https://bigmatrix.co.uk/
 Template:     bricks
 Version:      1.1
 Text Domain:  bricks
*/

/* ==========================================================================
   Snug Scent — child theme CSS

   HOUSE RULE: a native Bricks control first; this file only for what Bricks
   genuinely cannot express; never a Bricks custom-CSS field (element
   _cssCustom, global-class _cssCustom, or the Theme Style stylesheet).

   Enqueued from functions.php with filemtime() cache-busting and guarded by
   ! bricks_is_builder_main(), so edits here need no version bump and do not
   leak into the builder panel.

   SPECIFICITY: Bricks emits global classes scoped with the element class,
   e.g. `.ss-media-cover.brxe-image` (0,2,0). Rules below that only ADD a
   property Bricks does not control work fine unscoped. Anything that must
   OVERRIDE a Bricks-controlled property has to match that specificity —
   never reach for !important.

   Address tokens as --ss-*; never redeclare them here.
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. Migrated out of Bricks custom-CSS fields on 2026-09-21.
   -------------------------------------------------------------------------- */

/* .ss-media-cover — `_objectFit` is a control on the IMAGE element only; it
   does not exist on `block`, so a generic utility class cannot set it.
   Width/height stay native on the class. */
.ss-media-cover {
  object-fit: cover;
}

/* .ss-container-query — Bricks has no control for container-type. */
.ss-container-query {
  container-type: inline-size;
}

/* Was the Theme Style > CSS stylesheet. Bare element selectors cannot be
   expressed through a global class. */
h1,
h2,
h3,
h4 {
  word-break: break-word;
  hyphens: auto;
}

button,
a.brxe-button {
  user-select: none;
}

header.scrolling .bigm-dd {
  color: var(--ss-olive-600);
}

/* --------------------------------------------------------------------------
   2. Homepage. Structure and every other property are native controls on the
      ss-* global classes; only the following cannot be expressed in Bricks.
   -------------------------------------------------------------------------- */

/* Scrims are native Gradient controls: ss-hero__scrim (90deg fade, plus an even
   wash at mobile_landscape where the copy spans the photo) and ss-cat-tile__scrim
   (bottom-up), on the SS Colors tints --ss-linen-50-72/-12/-82 and
   --ss-olive-900-55/-12. Moved out of this file on 2026-09-28. */

/* Descendant hover — a global class styles the element it is on, never a
   child, so the nudge-on-hover has to live here. */
.ss-cat-tile:hover .ss-cat-tile__go {
  transform: translateX(3px);
}

/* text-wrap has no Bricks control. */
.ss-quote__text {
  text-wrap: balance;
}

/* Linked card titles: Bricks renders the heading's link as a nested <a>,
   which the global class cannot target. Keep the heading's own colour. */
.ss-card__title > a {
  color: inherit;
}

.ss-card__title > a:hover {
  text-decoration: underline;
  text-underline-offset: 0.16em;
}

/* --------------------------------------------------------------------------
   3. WooCommerce add-to-cart button.

   Woo prints its own markup — <a class="button add_to_cart_button"> — and
   ignores Bricks Theme Styles completely, rendering a hardcoded #e4e7e9 grey
   at 18px with square corners. A global class cannot reach it because it is a
   descendant emitted by the {woo_add_to_cart} tag, so the design-system
   button is reapplied here. Values mirror theme-style `primary` at size `md`.
   -------------------------------------------------------------------------- */

/* The tag renders inside a wrapper; both must fill the actions row. */
.ss-product-card__actions > * {
  flex: 1;
  min-width: 0;
}

.ss-product-card__actions .button,
.ss-product-card__actions .add_to_cart_button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  padding: var(--ss-space-3) var(--ss-space-6);
  border: 0;
  border-radius: var(--ss-radius-pill);
  background: var(--ss-action);
  color: var(--ss-action-text);
  font-family: "Montserrat", "Helvetica Neue", Arial, sans-serif;
  font-size: var(--ss-text-sm);
  font-weight: 500;
  line-height: var(--ss-leading-label);
  text-align: center;
  text-decoration: none;
  transition: background-color var(--ss-duration-normal) var(--ss-ease-out);
}

.ss-product-card__actions .button:hover,
.ss-product-card__actions .add_to_cart_button:hover {
  background: var(--ss-action-hover);
  color: var(--ss-action-text);
}

/* The "View basket" link Woo appends after an AJAX add. */
.ss-product-card__actions .added_to_cart {
  display: block;
  padding-top: var(--ss-space-2);
  font-size: var(--ss-text-xs);
  color: var(--ss-text-muted);
  text-align: center;
}

/* Two cards per row on phones leave the button about 120px wide: half the side
   padding keeps "Add to basket" / "Select options" on one line and splits
   "Notify when in stock" (out of stock, inc/product-card.php) over two. */
@media (max-width: 478px) {
  .ss-product-card__actions .button,
  .ss-product-card__actions .add_to_cart_button {
    padding-inline: var(--ss-space-3);
    text-wrap: balance;
  }
}

/* --------------------------------------------------------------------------
   4. Footer sustainability credentials.

   The line is one run of text with three inline certificate links, so the
   anchors cannot carry a global class. Without this they take the global
   link colour (--ss-text-brand), which is unreadable on the olive-900 band.
   -------------------------------------------------------------------------- */

.ss-footer__muted a {
  color: var(--ss-linen-50);
  opacity: 0.72;
  text-decoration: none;
  transition: opacity var(--ss-duration-fast) var(--ss-ease-out);
}

.ss-footer__muted a:hover {
  opacity: 1;
  text-decoration: underline;
  text-underline-offset: 0.16em;
}

/* Bricks sets .brxe-block{width:100%}. The footer bands wrap (as the design
   intends at narrow widths), so two full-width children wrap immediately
   instead of sitting at opposite ends. The comp's equivalents are plain
   auto-width divs. A global class cannot target children, so it lives here. */
.ss-footer__row > * {
  width: auto;
  max-width: 100%;
}


/* --------------------------------------------------------------------------
   5. Header menus: wrap by item, never mid-phrase.

   The DS sets white-space: nowrap on .hd__link and .hd__cat, and flex-wrap
   on .hd__cats-nav only. Bricks exposes neither control, and the menu links
   are not their own elements, so both rules belong here.

   Two selectors because Bricks renders a mega-menu trigger as
   li > div.brx-submenu-toggle > a, while a plain item is li > a. Scoped to
   .bricks-nav-menu so the mobile drawer (ul.bricks-mobile-menu) and the mega
   panels' own links keep normal wrapping.
   -------------------------------------------------------------------------- */

.ss-header__nav .bricks-nav-menu > li > a,
.ss-header__nav .bricks-nav-menu > li > .brx-submenu-toggle > a {
  white-space: nowrap;
}

/* Both header menus wrap to a second row rather than overflowing. The DS sets
   this on .hd__cats-nav only, but its primary nav then overflows the viewport
   between 992px (where both desktop menus hide) and ~1200px, because nowrap
   labels give the nav a min-content width the row cannot afford. A second row
   is the better failure mode than a horizontal scrollbar. Revisit if the
   desktop/mobile switch moves from 991 to Bricks' 1279 breakpoint. */
.ss-header__nav .bricks-nav-menu {
  flex-wrap: wrap;
}


/* --------------------------------------------------------------------------
   6. Mega menu details Bricks has no control for.

   Both come from the DS: .hd-mega__link:hover sets text-underline-offset,
   and .hd-mega__col:hover .hd-mega__thumb img scales the image on COLUMN
   hover — a parent-hover descendant selector, and the <img> inside a Bricks
   image element is not its own element. The underline itself and the
   transition are set natively on the classes.
   -------------------------------------------------------------------------- */

.ss-mega__label:hover {
  text-underline-offset: 3px;
}

.ss-mega__item:hover .ss-mega__thumb img {
  transform: scale(1.04);
}

.ss-mega__thumb img {
  transition: transform var(--ss-duration-slow) var(--ss-ease-out);
}

/* Feature card in the mega-panel aside: the DS underlines the title when the
   whole card is hovered (.hd-mega__feature:hover .hd-mega__feature-title). */
.ss-mega__feature:hover .ss-mega__feature-title {
  text-decoration: underline;
  text-underline-offset: 3px;
}


/* --------------------------------------------------------------------------
   7. Custom SVG icons (Snug Scent Lucide set, set_bd7f332519).

   The uploaded Lucide files carry width="24" height="24". Font Awesome glyphs
   scaled with font-size, so the rating element's iconSize and the button's
   icon typography are font-size controls; neither can size an <svg>. These
   rules put the SVG back on 1em so those native controls keep working.
   Icon and text-link elements need nothing here: the icon element sizes via
   _width/_height on its class, text-link's iconSize already emits
   width/height for svg.
   -------------------------------------------------------------------------- */

.brxe-rating .icon > svg,
.brxe-button > svg {
  width: 1em;
  height: 1em;
  flex-shrink: 0;
}

/* Nav-menu chevrons (ss-chevron-down, and ss-chevron-up in the drawer).
   menuIcon / mobileMenuIcon take an icon but no SVG size, so the glyph falls
   back to its 24px attributes. DS: --ss-icon-xs for nav chevrons and the
   drawer toggle. The open-state rotation is native (menuIconTransformOpen);
   only its easing lives here. */
.brxe-nav-menu .brx-submenu-toggle svg {
  width: var(--ss-icon-xs);
  height: var(--ss-icon-xs);
  transition: transform var(--ss-duration-fast) var(--ss-ease-standard);
}

/* DS: the drawer toggle sits in a --ss-tap-min hit area. Bricks keeps its own
   0 30px padding; this only adds the minimum height. */
.bricks-mobile-menu .brx-submenu-toggle > button {
  min-height: var(--ss-tap-min);
}


/* --------------------------------------------------------------------------
   8. Disabled states (DS platform/disabled-states.css, tokens/states.css).

   Theme styles cannot target :disabled. The DS treatment: every control keeps
   its resting colours, dims to --ss-disabled-opacity (0.5; fields 0.6), shows
   --ss-disabled-cursor, and never responds to hover or active.

   DS variant -> Bricks Theme Style slot (components/forms/Button.bricks.md):
     primary   = Primary solid    .bricks-background-primary
     secondary = Secondary outline .outline.bricks-color-secondary
     ghost     = Light outline    .outline.bricks-color-light
     inverse   = Light solid      .bricks-background-light
   -------------------------------------------------------------------------- */

.bricks-button:disabled,
.bricks-button[aria-disabled="true"],
.ss-product-card__actions .button:disabled,
.ss-product-card__actions .button.disabled {
  cursor: var(--ss-disabled-cursor);
  opacity: var(--ss-disabled-opacity);
  pointer-events: none; /* suppresses :hover and :active */
  transform: none;
}

.bricks-button.bricks-background-primary:is(:disabled, [aria-disabled="true"]) {
  background: var(--ss-button-primary-disabled-bg);
  color: var(--ss-button-primary-disabled-text);
  border-color: var(--ss-button-primary-disabled-border);
}

.bricks-button.outline.bricks-color-secondary:is(:disabled, [aria-disabled="true"]) {
  background: var(--ss-button-secondary-disabled-bg);
  color: var(--ss-button-secondary-disabled-text);
  border-color: var(--ss-button-secondary-disabled-border);
}

.bricks-button.outline.bricks-color-light:is(:disabled, [aria-disabled="true"]) {
  background: var(--ss-button-ghost-disabled-bg);
  color: var(--ss-button-ghost-disabled-text);
  border-color: var(--ss-button-ghost-disabled-border);
}

.bricks-button.bricks-background-light:is(:disabled, [aria-disabled="true"]) {
  background: var(--ss-button-inverse-disabled-bg);
  color: var(--ss-button-inverse-disabled-text);
  border-color: var(--ss-button-inverse-disabled-border);
}

input:disabled,
select:disabled,
textarea:disabled {
  cursor: var(--ss-disabled-cursor);
  opacity: var(--ss-disabled-opacity-field);
  background: var(--ss-field-disabled-bg);
  color: var(--ss-field-disabled-text);
  border-color: var(--ss-field-disabled-border);
  box-shadow: none;
}

input[type="checkbox"]:disabled {
  cursor: var(--ss-disabled-cursor);
}


/* --------------------------------------------------------------------------
   9. Sticky header (DS site.css .hd, .hd--scrolled).

   Sticky, the scrolled background and the scrolled shadow are the header
   template's own settings (SS Header > Settings > Sticky header). What those
   settings cannot do:
   - The frosted blur. It sits on a pseudo-element, because backdrop-filter on
     the header itself would become the containing block of the fixed mobile
     drawer and the mega panels inside it.
   - Anchor jumps clearing the header. --ss-header-h is the header's live
     height (it wraps to two rows at some widths), published by
     assets/js/header-offset.js. The TOC rail class reads it too.
   -------------------------------------------------------------------------- */

html {
  scroll-padding-top: var(--ss-header-h, 0px);
}

#brx-header.brx-sticky::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  pointer-events: none;
}

#brx-header.brx-sticky.scrolling::before {
  -webkit-backdrop-filter: var(--ss-blur-panel);
  backdrop-filter: var(--ss-blur-panel);
}


/* --------------------------------------------------------------------------
   10. Journal table of contents numbering (DS article.css .art-toc).

   Leading-zero numbers before each entry. The Table of contents element has
   no control for generated content; item padding, borders, type and the
   hover / active backgrounds are set on the ss-toc__list class.
   -------------------------------------------------------------------------- */

.ss-toc__list .toc-list {
  counter-reset: ss-toc;
}

.ss-toc__list .toc-list-item {
  display: flex;
  gap: var(--ss-space-3);
  counter-increment: ss-toc;
}

.ss-toc__list .toc-list-item::before {
  content: counter(ss-toc, decimal-leading-zero);
  flex-shrink: 0;
  padding-top: 2px;
  font-family: var(--ss-font-label);
  font-size: var(--ss-text-2xs);
  line-height: var(--ss-leading-label);
  color: var(--ss-text-muted);
}

/* --------------------------------------------------------------------------
   11. Category landing pages (template "SS Category - Default").
   -------------------------------------------------------------------------- */

/* The intro's first paragraph is the lead line. Bricks rewrites a font size in
   a class selector on a Rich Text element to "inherit", so it lives here. */
.ss-cat-hero__intro > p:first-child {
  font-size: var(--ss-text-md);
}


/* --------------------------------------------------------------------------
   12. Mobile menu (Offcanvas + Nav Nested multilevel, class ss-mnav__items).

   Bricks opens a menu level by switching it from display: none, which a
   transition cannot animate. @starting-style gives the opening level its
   slide-in from the right; the open transform itself is native
   (dropdownTransformOpen on the Nav Nested element).
   -------------------------------------------------------------------------- */

.ss-mnav__items .brx-dropdown-content {
  transition: transform var(--ss-duration-normal) var(--ss-ease-out);
}

@starting-style {
  /* !important: the Nav Nested element emits its open transform with its ID. */
  .ss-mnav__items .open > .brx-dropdown-content {
    transform: translateX(100%) !important;
  }
}

/* WPLoyalty's floating launcher (z-index 999999999, third-party markup) sat on top
   of the open menu. Hidden while any Offcanvas is open; the root ID is needed
   because the plugin's own #wll-site-launcher .wll-flex sets display. */
body:has(.brxe-offcanvas.brx-open) #wll-site-launcher {
  display: none;
}


/* --------------------------------------------------------------------------
   13. Dispatch dates (BIGM Dispatch Dates plugin).

   The delivery window WooCommerce prints under each shipping method, in cart
   totals and the FunnelKit checkout. A quieter second line under the method
   name, as on the old site. The plugin itself only makes it a block.
   -------------------------------------------------------------------------- */

.bigm-dd-estimate {
  margin-top: var(--ss-space-1);
  font-size: var(--ss-text-xs);
  font-weight: var(--ss-weight-regular);
  line-height: var(--ss-leading-label);
  color: var(--ss-text-muted);
}

/* FunnelKit's checkout sets 14px on everything in its form (body #wfacp-e-form *);
   one ID level wins that back. Its text colour is the checkout block's own design
   setting in FunnelKit, so it is left alone. */
#wfacp-e-form .bigm-dd-estimate {
  font-size: var(--ss-text-sm);
}

/* Header announcement band (class ss-announce) carries the dispatch message. With
   nothing to promise the plugin hides the message, and the spec says an empty
   band must not render as a strip. */
.ss-announce:has(.bigm-dd[hidden]) {
  display: none;
}


/* --------------------------------------------------------------------------
   14. Product page (template "SS Product"). DS product.css.

   Most of the buy box is native (ss-pdp__* classes, and the Product gallery /
   Add to cart controls on ss-pdp__media / ss-pdp__cart). What is here is Woo
   or plugin markup inside those elements that no control reaches.
   -------------------------------------------------------------------------- */

/* Assurances: Bricks has no list-style control. */
.ss-pdp__assure {
  list-style: none;
}

/* Gallery: the element's controls style the thumbnails only. The main image
   gets the DS frame (.pdp-gallery__hero). One image renders no .flex-viewport,
   so the wrapper takes the frame then. */
.ss-pdp__media .flex-viewport,
.ss-pdp__media .woocommerce-product-gallery > .woocommerce-product-gallery__wrapper {
  overflow: hidden;
  border: var(--ss-border-width) solid var(--ss-border-hairline);
  border-radius: var(--ss-radius-lg);
  background: var(--ss-surface-card);
}

/* Woo's full-screen trigger is a magnifier emoji that Bricks fades in on
   hover; the DS has an always-visible round button with the maximize icon
   (.pdp-gallery__zoom). It stays top right: the gallery box includes the
   thumbnails, so a bottom offset would land on them. Element + class to
   outrank Bricks' own rules for the trigger. */
.ss-pdp__media.brxe-product-gallery .woocommerce-product-gallery__trigger {
  top: var(--ss-space-4);
  right: var(--ss-space-4);
  opacity: 1;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: var(--ss-tap-min);
  height: var(--ss-tap-min);
  border: var(--ss-border-width) solid var(--ss-border-hairline);
  border-radius: var(--ss-radius-pill);
  background: var(--ss-surface-card);
  box-shadow: var(--ss-shadow-sm);
  color: var(--ss-olive-600);
}

.ss-pdp__media.brxe-product-gallery .woocommerce-product-gallery__trigger:hover {
  background: var(--ss-olive-100);
}

.ss-pdp__media .woocommerce-product-gallery__trigger > span {
  display: none;
}

/* Bricks draws its own icon on ::before, absolutely placed; this one sits in
   the button's flex centre instead. */
.ss-pdp__media.brxe-product-gallery .woocommerce-product-gallery__trigger::before {
  content: "";
  position: static;
  width: var(--ss-icon-sm);
  height: var(--ss-icon-sm);
  background: currentColor;
  -webkit-mask: url("/wp-content/uploads/2026/09/ss-maximize-2.svg") center / contain no-repeat;
  mask: url("/wp-content/uploads/2026/09/ss-maximize-2.svg") center / contain no-repeat;
}

/* Variations: Woo prints a two-column table (label | swatches), which leaves
   the swatches a narrow column. Label above its options, as the DS field.
   Spacing and type are native (variationsPadding, variationsTypography). */
.ss-pdp__cart table.variations,
.ss-pdp__cart table.variations tbody,
.ss-pdp__cart table.variations tr,
.ss-pdp__cart table.variations th,
.ss-pdp__cart table.variations td {
  display: block;
  width: 100%;
}

.ss-pdp__cart table.variations th {
  margin-bottom: var(--ss-space-3);
  text-align: left;
}

/* Woo marks the button .disabled (not :disabled) until a buyable variation is
   chosen, and still takes the click to explain why; the DS disabled look from
   section 8 without blocking the click. */
.ss-pdp__cart .single_add_to_cart_button.disabled {
  cursor: var(--ss-disabled-cursor);
  opacity: var(--ss-disabled-opacity);
}

/* Woo's "Clear" link under the variations; no control reaches it. */
.ss-pdp__cart .reset_variations {
  font-size: var(--ss-text-xs);
  color: var(--ss-text-muted);
}

/* The simple product's stock line is shown in the stock + delivery box
   (Product stock element), so the copy Woo prints above the form is hidden.
   A variation's availability stays with its options. */
.ss-pdp__cart > .stock {
  display: none;
}

/* Quantity stepper (DS .pdp-qty): one outline with hairline dividers. The
   element's Quantity border control borders each of the three parts. */
.ss-pdp__cart.brxe-product-add-to-cart .quantity {
  overflow: hidden;
  border: var(--ss-border-width) solid var(--ss-border-strong);
  border-radius: var(--ss-radius-md);
}

.ss-pdp__cart.brxe-product-add-to-cart .quantity .action {
  width: var(--ss-tap-min);
  height: var(--ss-tap-min);
  border: 0;
  color: var(--ss-olive-600);
  transition: background-color var(--ss-duration-fast) var(--ss-ease-standard);
}

.ss-pdp__cart.brxe-product-add-to-cart .quantity .action:hover {
  background: var(--ss-olive-100);
}

.ss-pdp__cart.brxe-product-add-to-cart .quantity .action.disabled {
  opacity: 0.35;
}

.ss-pdp__cart.brxe-product-add-to-cart .quantity .action svg {
  width: var(--ss-icon-xs);
  height: var(--ss-icon-xs);
}

.ss-pdp__cart.brxe-product-add-to-cart .quantity .qty {
  width: 48px;
  height: var(--ss-tap-min);
  border: 0;
  border-inline: var(--ss-border-width) solid var(--ss-border-hairline);
  font-family: "Montserrat", "Helvetica Neue", Arial, sans-serif;
  font-size: var(--ss-text-sm);
  color: var(--ss-text-strong);
}

/* "How often" options (BIGM Buy or Subscribe). The plugin's layout-only file
   is switched off (bigm_bos_load_css in inc/product-page.php), so the whole
   treatment is here: DS .pdp-field / .pdp-option. */
.bigm-bos {
  min-width: 0;
  margin: 0;
  padding: 0;
  border: 0;
}

.bigm-bos__legend {
  margin-bottom: var(--ss-space-3);
  padding: 0;
  font-family: "Montserrat", "Helvetica Neue", Arial, sans-serif;
  font-size: var(--ss-text-sm);
  font-weight: var(--ss-weight-medium);
  line-height: var(--ss-leading-label);
  color: var(--ss-text-body);
}

.bigm-bos__options {
  display: flex;
  flex-direction: column;
  gap: var(--ss-space-3);
}

.bigm-bos__option {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  align-items: center;
  column-gap: var(--ss-space-3);
  row-gap: 2px;
  min-height: var(--ss-tap-min);
  padding: var(--ss-space-3) var(--ss-space-5);
  border: var(--ss-border-width) solid var(--ss-border-strong);
  border-radius: var(--ss-radius-md);
  background: var(--ss-surface-card);
  cursor: pointer;
  transition:
    border-color var(--ss-duration-fast) var(--ss-ease-standard),
    background-color var(--ss-duration-fast) var(--ss-ease-standard);
}

.bigm-bos__option:hover {
  background: var(--ss-olive-100);
}

.bigm-bos__option.is-selected {
  border-color: var(--ss-olive-600);
  box-shadow: inset 0 0 0 1px var(--ss-olive-600);
  background: var(--ss-olive-100);
}

.bigm-bos__option:has(.bigm-bos__input:focus-visible) {
  outline: var(--ss-focus-ring-width) solid var(--ss-focus-ring);
  outline-offset: var(--ss-focus-ring-offset);
}

.bigm-bos__input {
  grid-row: span 2;
  margin: 0;
  accent-color: var(--ss-olive-600);
}

.bigm-bos__title {
  font-family: "Montserrat", "Helvetica Neue", Arial, sans-serif;
  font-size: var(--ss-text-sm);
  font-weight: var(--ss-weight-medium);
  line-height: var(--ss-leading-small);
  color: var(--ss-text-strong);
}

.bigm-bos__meta {
  grid-column: 2;
  font-size: var(--ss-text-xs);
  line-height: var(--ss-leading-label);
  color: var(--ss-text-muted);
}

.bigm-bos__save {
  font-weight: var(--ss-weight-medium);
  color: var(--ss-olive-600);
}

/* Waitlist (WooCommerce Waitlist). Plugin markup, so no Bricks control reaches it.
   A simple product's form is the shortcode element wl7q3n, right after Add to cart
   (inc/product-page.php takes it off the summary hook); a variation's form arrives with
   the variation's stock line inside Add to cart. Field = DS Input spec, button = the
   Add to basket button (class ss-pdp__cart). The plugin toggles .wcwl_nojs, .wcwl_hide
   and the notice itself, so nothing here sets their display. */
.wcwl_elements {
  display: flex;
  flex-wrap: wrap;
  align-items: stretch;
  gap: var(--ss-space-3);
}

.wcwl_elements .wcwl_intro,
.wcwl_elements .wcwl_notice,
.wcwl_elements .wcwl_optin {
  flex: 1 1 100%;
  margin: 0;
}

.wcwl_elements .wcwl_intro p {
  margin: 0;
  font-size: var(--ss-text-sm);
  line-height: var(--ss-leading-small);
  color: var(--ss-text-body);
}

.wcwl_elements .wcwl_email_elements {
  display: flex;
  flex: 1 1 22rem;
  min-width: 0;
}

.wcwl_elements .wcwl_email {
  width: 100%;
  min-height: var(--ss-tap-min);
  padding: var(--ss-space-3) var(--ss-space-4);
  border: var(--ss-border-width-strong) solid var(--ss-border-soft);
  border-radius: var(--ss-radius-sm);
  background: var(--ss-white);
  font-family: "Montserrat", "Helvetica Neue", Arial, sans-serif;
  font-size: var(--ss-text-sm);
  line-height: var(--ss-leading-small);
  color: var(--ss-text-body);
}

.wcwl_elements .wcwl_email::placeholder {
  color: var(--ss-text-muted);
  opacity: 1;
}

.wcwl_elements .wcwl_email:focus {
  outline: none;
  border-color: var(--ss-olive-600);
  box-shadow: var(--ss-focus-shadow);
}

.wcwl_elements .wcwl_email.wcwl_error_highlight {
  border: var(--ss-border-width-strong) solid var(--ss-critical);
}

.wcwl_elements .wcwl_control {
  display: flex;
  flex: 0 0 auto;
  flex-direction: column;
  text-decoration: none;
}

.wcwl_elements .wcwl_control .woocommerce_waitlist.button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: 1;
  min-height: var(--ss-tap-min);
  margin: 0;
  padding: var(--ss-space-4) var(--ss-space-7);
  border: 0;
  border-radius: var(--ss-radius-pill);
  background: var(--ss-action);
  color: var(--ss-action-text);
  font-family: "Montserrat", "Helvetica Neue", Arial, sans-serif;
  font-size: var(--ss-text-base);
  font-weight: 500;
  line-height: var(--ss-leading-label);
  white-space: nowrap;
  cursor: pointer;
  transition: background-color var(--ss-duration-normal) var(--ss-ease-out);
}

.wcwl_elements .wcwl_control .woocommerce_waitlist.button:hover {
  background: var(--ss-action-hover);
  color: var(--ss-action-text);
}

.wcwl_elements .wcwl_control .woocommerce_waitlist.button:focus-visible {
  outline: none;
  box-shadow: var(--ss-focus-shadow);
}

.wcwl_elements .spinner {
  width: 24px;
  height: 24px;
  margin: var(--ss-space-2) auto 0;
}

/* Joined / left confirmation: the same panel as the stock + delivery box. */
.wcwl_elements .wcwl_notice.woocommerce-message {
  position: relative;
  padding: var(--ss-space-4) calc(var(--ss-space-4) * 2 + 16px) var(--ss-space-4) var(--ss-space-4);
  border: 0;
  border-radius: var(--ss-radius-md);
  background: var(--ss-olive-100);
  color: var(--ss-text-body);
  font-size: var(--ss-text-sm);
  line-height: var(--ss-leading-small);
}

.wcwl_elements .wcwl_notice.woocommerce-message::before {
  content: none;
}

.wcwl_elements .wcwl_notice_dismiss {
  top: var(--ss-space-3);
  right: var(--ss-space-3);
  width: 24px;
  height: 24px;
  padding: 0;
  color: var(--ss-text-body);
}

.wcwl_elements .wcwl_notice_dismiss::before {
  content: "\00d7";
  font: 400 20px/24px "Montserrat", "Helvetica Neue", Arial, sans-serif;
  color: currentColor;
}

/* Phones: the button takes its own full-width row under the field. */
@media (max-width: 478px) {
  .wcwl_elements .wcwl_control {
    flex-basis: 100%;
  }
}

/* --------------------------------------------------------------------------
   15. Basket lines (Snug Scent Commerce, carried over from the old theme).

   "You Saved" under a discounted basket line and the tree-planting notice
   above the basket. Same text as before; the old inline colours are tokens.
   -------------------------------------------------------------------------- */

.ss-cart-saving {
  margin: var(--ss-space-1) 0 0;
  color: var(--ss-positive);
  font-size: var(--ss-text-sm);
}

.ss-cart-saving__coupon {
  color: var(--ss-text-brand);
}

.ss-cart-notice {
  margin-bottom: var(--ss-space-5);
  padding: var(--ss-space-4) var(--ss-space-5);
  border: var(--ss-border-width) dashed var(--ss-border-strong);
  border-radius: var(--ss-radius-md);
}

/* --------------------------------------------------------------------------
   16. My account (page 10, Bricks Account v2 with class ss-account).

   Layout, the menu and the white content panel are native controls on the
   ss-account class; the sign-in / register switch is ss-auth's selectors. What
   is here has no Bricks control: the Lucide menu icons (mask-image), the
   phone menu's scrollbar, the scroll offset of the #sign-in / #create-account
   targets, and the markup WooCommerce and its plugins print inside the panel
   (notices, tables, anchor buttons). Snug Points (WPLoyalty) keeps its own UI.
   -------------------------------------------------------------------------- */

.ss-account .woocommerce-MyAccount-navigation li {
  list-style: none;
}

.ss-account .woocommerce-MyAccount-navigation a::before {
  content: "";
  flex: 0 0 auto;
  width: var(--ss-icon-sm);
  height: var(--ss-icon-sm);
  background-color: currentColor;
  -webkit-mask: var(--ss-account-icon, none) center / contain no-repeat;
  mask: var(--ss-account-icon, none) center / contain no-repeat;
}

.ss-account .woocommerce-MyAccount-navigation-link--dashboard { --ss-account-icon: url("/wp-content/uploads/2026/09/ss-leaf.svg"); }
.ss-account .woocommerce-MyAccount-navigation-link--orders { --ss-account-icon: url("/wp-content/uploads/2026/09/ss-receipt.svg"); }
.ss-account .woocommerce-MyAccount-navigation-link--subscriptions { --ss-account-icon: url("/wp-content/uploads/2026/09/ss-refresh-cw.svg"); }
.ss-account .woocommerce-MyAccount-navigation-link--store-credit { --ss-account-icon: url("/wp-content/uploads/2026/09/ss-badge-check.svg"); }
.ss-account .woocommerce-MyAccount-navigation-link--downloads { --ss-account-icon: url("/wp-content/uploads/2026/09/ss-arrow-down.svg"); }
.ss-account .woocommerce-MyAccount-navigation-link--edit-address { --ss-account-icon: url("/wp-content/uploads/2026/09/ss-map-pin.svg"); }
.ss-account .woocommerce-MyAccount-navigation-link--payment-methods { --ss-account-icon: url("/wp-content/uploads/2026/09/ss-credit-card.svg"); }
.ss-account .woocommerce-MyAccount-navigation-link--edit-account { --ss-account-icon: url("/wp-content/uploads/2026/09/ss-user.svg"); }
.ss-account .woocommerce-MyAccount-navigation-link--vouchers { --ss-account-icon: url("/wp-content/uploads/2026/09/ss-ticket.svg"); }
.ss-account .woocommerce-MyAccount-navigation-link--loyalty_reward { --ss-account-icon: url("/wp-content/uploads/2026/09/ss-sparkles.svg"); }
.ss-account .woocommerce-MyAccount-navigation-link--customer-logout { --ss-account-icon: url("/wp-content/uploads/2026/09/ss-arrow-up-right.svg"); }

/* Phones and tablets: the menu is one scrolling row of pills. */
@media (max-width: 991px) {
  .ss-account .woocommerce-MyAccount-navigation {
    scrollbar-width: none;
  }

  .ss-account .woocommerce-MyAccount-navigation::-webkit-scrollbar {
    display: none;
  }
}

/* The register / sign-in switch jumps to #create-account / #sign-in. */
.ss-auth #sign-in,
.ss-auth #create-account {
  scroll-margin-top: calc(var(--ss-header-h, 0px) + var(--ss-space-6));
}

/* WooCommerce's privacy notice under the register form: a note, not body copy. */
.ss-auth .woocommerce-privacy-policy-text p {
  margin: 0;
  color: var(--ss-text-muted);
  font-size: var(--ss-text-sm);
  line-height: var(--ss-leading-small);
}

/* Notices WooCommerce and plugins print inside the panel. */
.ss-account .woocommerce-MyAccount-content .woocommerce-info,
.ss-account .woocommerce-MyAccount-content .woocommerce-message {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--ss-space-3);
  margin: 0 0 var(--ss-space-5);
  padding: var(--ss-space-4) var(--ss-space-5);
  border: 0;
  border-radius: var(--ss-radius-md);
  background: var(--ss-olive-100);
  color: var(--ss-text-body);
  font-size: var(--ss-text-sm);
  line-height: var(--ss-leading-small);
}

.ss-account .woocommerce-MyAccount-content .woocommerce-info::before,
.ss-account .woocommerce-MyAccount-content .woocommerce-message::before {
  content: none;
}

/* Anchor buttons from WooCommerce and plugins (Subscriptions, Vouchers, store
   credit, payment methods). The Bricks submit buttons are <button> elements
   and keep their ss-woo-submit class styles. */
.ss-account .woocommerce-MyAccount-content a.button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 36px;
  padding: var(--ss-space-2) var(--ss-space-5);
  border: var(--ss-border-width-strong) solid var(--ss-border-strong);
  border-radius: var(--ss-radius-pill);
  background: transparent;
  color: var(--ss-text-brand);
  font-family: "Montserrat", "Helvetica Neue", Arial, sans-serif;
  font-size: var(--ss-text-sm);
  font-weight: 500;
  line-height: var(--ss-leading-label);
  text-decoration: none;
  transition: background-color var(--ss-duration-normal) var(--ss-ease-out), color var(--ss-duration-normal) var(--ss-ease-out);
}

.ss-account .woocommerce-MyAccount-content a.button:hover {
  background: var(--ss-action);
  color: var(--ss-action-text);
}

/* Tables (subscriptions, a subscription's orders, saved cards, vouchers). */
.ss-account .woocommerce-MyAccount-content table {
  width: 100%;
  margin: 0 0 var(--ss-space-5);
  border-collapse: collapse;
  border: 0;
  font-size: var(--ss-text-sm);
  line-height: var(--ss-leading-small);
}

.ss-account .woocommerce-MyAccount-content th,
.ss-account .woocommerce-MyAccount-content td {
  padding: var(--ss-space-3);
  border: 0;
  border-bottom: var(--ss-border-width) solid var(--ss-border-hairline);
  text-align: left;
  vertical-align: middle;
}

.ss-account .woocommerce-MyAccount-content thead th {
  color: var(--ss-text-muted);
  font-size: var(--ss-text-xs);
  font-weight: 500;
  letter-spacing: var(--ss-tracking-label);
  text-transform: uppercase;
}

.ss-account .woocommerce-MyAccount-content table a:not(.button) {
  color: var(--ss-text-brand);
}

/* --------------------------------------------------------------------------
   17. Product reviews (template "SS Product", section #reviews).

   The section is native: ss-reviews* / ss-review* classes and the Bricks
   Product Reviews loops (bpr_reviews, bpr_rating_levels). What is here is
   markup printed by the plugin and by WooCommerce, which no class can reach:
   the photo thumbnails inside {bpr_row:photos}, and WooCommerce's review form
   ([bpr_review_form] -> comment_form()), restyled to the DS field spec
   (components/forms: Input, Textarea, Checkbox; Button primary md, as §3).
   -------------------------------------------------------------------------- */

.ss-review__photos .bpr-photo {
  display: block;
  overflow: hidden;
  border-radius: var(--ss-radius-sm);
  line-height: 0;
}

.ss-review__photos .bpr-photo__img {
  display: block;
  width: 9.6rem;
  height: 9.6rem;
  object-fit: cover;
}

/* Form: one column of fields. */
.ss-reviews #review_form .comment-form {
  display: flex;
  flex-direction: column;
  gap: var(--ss-space-5);
  margin: 0;
}

.ss-reviews #review_form .comment-form > p,
.ss-reviews #review_form .comment-form-rating {
  display: flex;
  flex-direction: column;
  gap: var(--ss-space-2);
  margin: 0;
}

/* Field label: DS ss-field__label. */
.ss-reviews #review_form label {
  color: var(--ss-text-muted);
  font-family: "Montserrat", "Helvetica Neue", Arial, sans-serif;
  font-size: var(--ss-text-xs);
  font-weight: 500;
  letter-spacing: 0.04em;
  line-height: var(--ss-leading-label);
  text-transform: uppercase;
}

.ss-reviews #review_form .required {
  color: inherit;
}

/* Field control: DS ss-field__control / Textarea. */
.ss-reviews #review_form input[type="text"],
.ss-reviews #review_form input[type="email"],
.ss-reviews #review_form textarea {
  width: 100%;
  padding: var(--ss-space-3) var(--ss-space-4);
  border: var(--ss-border-width-strong) solid var(--ss-border-soft);
  border-radius: var(--ss-radius-sm);
  background: var(--ss-white);
  color: var(--ss-text-body);
  font-family: "Montserrat", "Helvetica Neue", Arial, sans-serif;
  font-size: var(--ss-text-sm);
  line-height: var(--ss-leading-small);
  transition: border-color var(--ss-duration-fast) var(--ss-ease-standard), box-shadow var(--ss-duration-fast) var(--ss-ease-standard);
}

.ss-reviews #review_form textarea {
  min-height: var(--ss-space-10);
  resize: vertical;
}

.ss-reviews #review_form input[type="text"]:focus,
.ss-reviews #review_form input[type="email"]:focus,
.ss-reviews #review_form textarea:focus {
  border-color: var(--ss-olive-600);
  outline: none;
  box-shadow: var(--ss-focus-shadow);
}

/* Photo hint: DS ss-field__help. */
.ss-reviews #review_form .bpr-form__hint {
  color: var(--ss-text-muted);
  font-size: var(--ss-text-xs);
  line-height: var(--ss-leading-label);
}

.ss-reviews #review_form input[type="file"] {
  color: var(--ss-text-muted);
  font-size: var(--ss-text-sm);
  line-height: var(--ss-leading-small);
}

/* The file button takes the DS outline button (secondary, sm). */
.ss-reviews #review_form input[type="file"]::file-selector-button {
  margin-right: var(--ss-space-3);
  padding: var(--ss-space-2) var(--ss-space-5);
  border: var(--ss-border-width-strong) solid var(--ss-border-strong);
  border-radius: var(--ss-radius-pill);
  background: transparent;
  color: var(--ss-text-brand);
  font-family: "Montserrat", "Helvetica Neue", Arial, sans-serif;
  font-size: var(--ss-text-sm);
  font-weight: 500;
  cursor: pointer;
}

/* WordPress's note above the fields. */
.ss-reviews #review_form .comment-form > p.comment-notes {
  color: var(--ss-text-muted);
  font-size: var(--ss-text-xs);
  line-height: var(--ss-leading-label);
}

/* Checkbox rows ("I would buy this again", "Save my name"): DS Checkbox.
   Same specificity as the column rule above, so the row wins by order. */
.ss-reviews #review_form .comment-form > p.bpr-form__row--inline,
.ss-reviews #review_form .comment-form > p.comment-form-cookies-consent {
  flex-direction: row;
  align-items: center;
  gap: var(--ss-space-3);
}

.ss-reviews #review_form .bpr-form__row--inline label,
.ss-reviews #review_form .comment-form-cookies-consent label {
  color: var(--ss-text-body);
  font-size: var(--ss-text-sm);
  font-weight: 400;
  letter-spacing: normal;
  line-height: var(--ss-leading-small);
  text-transform: none;
  cursor: pointer;
}

.ss-reviews #review_form input[type="checkbox"] {
  flex: 0 0 auto;
  width: 20px;
  height: 20px;
  margin: 0;
  padding: 0;
  border: var(--ss-border-width-strong) solid var(--ss-border-soft);
  border-radius: var(--ss-radius-xs);
  background: var(--ss-white) center / 12px no-repeat;
  cursor: pointer;
  appearance: none;
  transition: background-color var(--ss-duration-fast) var(--ss-ease-standard), border-color var(--ss-duration-fast) var(--ss-ease-standard);
}

.ss-reviews #review_form input[type="checkbox"]:checked {
  border-color: var(--ss-olive-600);
  background-color: var(--ss-olive-600);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23FBF8F2' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E");
}

.ss-reviews #review_form input[type="checkbox"]:focus-visible {
  outline: none;
  box-shadow: var(--ss-focus-shadow);
}

/* Submit: DS button primary md (as §3). */
.ss-reviews #review_form .form-submit input[type="submit"] {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: var(--ss-space-3) var(--ss-space-6);
  border: 0;
  border-radius: var(--ss-radius-pill);
  background: var(--ss-action);
  color: var(--ss-action-text);
  font-family: "Montserrat", "Helvetica Neue", Arial, sans-serif;
  font-size: var(--ss-text-sm);
  font-weight: 500;
  line-height: var(--ss-leading-label);
  cursor: pointer;
  transition: background-color var(--ss-duration-normal) var(--ss-ease-out);
}

.ss-reviews #review_form .form-submit input[type="submit"]:hover {
  background: var(--ss-action-hover);
}

/* --------------------------------------------------------------------------
   18. Safety information (template "SS Product", section #safety-information).

   The section is native: ss-clp* classes and the CLP loops from
   inc/product-page.php. The pictograms are a ul/li, and Bricks has no
   list-style control.
   -------------------------------------------------------------------------- */

.ss-clp__pictos {
  list-style: none;
}
