/** Shopify CDN: Minification failed

Line 473:25 The "+" operator only works if there is whitespace on both sides
Line 1035:0 Unexpected "}"

**/
/* ===== Mobile drawer motion tokens =====
   ONE source of truth for the hamburger drawer's timing. The close path is a
   wall-clock race — global.js `closeAnimation` polls rAF and strips [open] when
   the CSS transition "should" be done — so a duration that lives in two places
   WILL drift (it already did once: 400ms JS vs 200ms CSS, which lagged the ✕).
   global.js reads --duration-drawer off :root at runtime; change it here only.
   --ease-drawer is the house curve, shared with the nav accordions, the About
   page parallax and the homepage carousels. */
:root {
  --duration-drawer: 320ms;
  --ease-drawer: cubic-bezier(.22, 1, .36, 1);
}

.change-color {background-color: #F7EDE3 !important;}

.contains-media, .global-media-settings {border: none !important;}

/* Photos are never draggable, site-wide — see the matching dragstart guard in custom-js.js.
   This is the cheap WebKit/Blink half; the JS listener is what actually guarantees it. */
img { -webkit-user-drag: none; user-drag: none; }

h1, .h0, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 {
  font-family: "ivymode", sans-serif !important;
  font-weight: 300;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  }


h1 em, .h1 em, h2 em, .h2 em, h3 em, .h3 em, h4 em, .h4 em, h5 em, .h5 em, h6 em, .h6 em {
  text-transform: none; 
  padding-right: 3px;
  letter-spacing: 0em;
  line-height: 1.2;
  }

#MainContent { 
  font-family: "articulat-cf", sans-serif !important;
  font-weight: 300;
  }

.template-index #MainContent {
  max-width: 100vw !important;
  overflow-x: clip !important; /* clip (not hidden) so it doesn't become a scroll container that breaks position:sticky */
  }

.tabcontent-cus h1,
.tabcontent-cus h2,
p {
  opacity: 1 !important; 
  font-size: 14px;
  font-family: var(--font-body-family) !important;
  font-family: "articulat-cf", sans-serif !important;
  font-weight: 300;
  font-style: normal;
  text-transform: none;
  }

.drawer {font-family: "articulat-cf", sans-serif !important; font-weight: 300;}


body.gradient,
body.gradient .color-background-1,
body.gradient .color-background-2,
body.gradient .color-inverse,
body.gradient .color-accent-1,
body.gradient .color-accent-2 {
color: rgba(var(--color-foreground)) !important;
}


strong, b {font-weight: 500;}


.bg-f7ede3 {background-color: #f7ede3;}
.white {color: #FFF !Important;}
.L1 {font-size: 4em; margin: 0 0 20px 0;}

@media screen and (max-width: 990px) {.L1 {font-size: 3em;}}

.button, 
.button-style, .button-style-outline {  
  font-style: normal;
  font-family: "commuters-sans", sans-serif !important; 
  font-weight: 400 !important;
  text-transform: uppercase;
  letter-spacing: 0.1em !important;
  font-size: 11px !important;
  }

.invert-color {filter: invert(100%);}

.button-style, .button-style-outline {padding: 7px 15px; transition: background-color 0.5s ease;}
.button-style {color: #fff; background-color: #000; border: 1px solid #000;}
.button-style-outline {color: #000; background-color: transparent !important; border: 1px solid #000;}

.button-style:hover {opacity: 0.7;}
.button-style-outline:hover {color: #fff; background-color: #000 !important; opacity: 1;}

.btn-con {
  padding-top: 10px;
  display: flex; 
  gap: 7px;
  flex-wrap: wrap; 
  }

.link, .customer a, 
.header-localization .disclosure .localization-form__select span,
.header__menu-item span,
.multicolumn-card__info .link,
.announcement-bar__message,
.secondary-heading {
  font-size: 13px !important;
  }


.footer__copyright,
.facets__heading,
.product__text, 
.header__icon span, .drawer-menu-btn span {
  font-style: normal;
  font-family: "commuters-sans", sans-serif !important; 
  font-weight: 400 !important;
  text-transform: uppercase;
  letter-spacing: 0.1em !important;
  font-size: 11px !important;
  }

.menu-drawer__close-button,
#menu-drawer ul.menu-drawer__menu.has-submenu.list-menu li a, 
#menu-drawer ul.menu-drawer__menu.has-submenu.list-menu li summary,
.facets__summary-label, .facets__summary span,
.product-count__text, .facet-filters__label, .mobile-facets__open-label,
.facet-filters__field .select__select, .mobile-facets__sort .select__select {
  font-style: normal;
  font-family: "commuters-sans", sans-serif !important; 
  font-weight: 400 !important;
  text-transform: uppercase;
  letter-spacing: 0.1em !important;
  font-size: 11px !important;
  }

.st-wishlist-button .label {
  font-style: normal;
  font-family: "commuters-sans", sans-serif !important; 
  font-weight: 400 !important;
  text-transform: uppercase;
  letter-spacing: 0.1em !important;
  font-size: 10px !important;
  }

.localization-form:only-child .button, 
.localization-form:only-child .localization-form__select,
.footer__copyright .copyright__content,
.footer__copyright .copyright__content a,
.card-information .caption-with-letter-spacing {
    font-family: "articulat-cf", sans-serif !important;
  font-weight: 300;
  text-transform: capitalize;
  letter-spacing: 0 !important;
  font-size: 1.1rem !important;
  }



                                           
.header__icon span:hover {opacity: 0.7;}


a.secondary-heading {
  color: #000;
  border-bottom: 1px solid transparent; 
  -webkit-transition: border 500ms ease-out;
  -moz-transition: border 500ms ease-out;
  -o-transition: border 500ms ease-out;
  transition: border 500ms ease-out;
  }

a.secondary-heading:hover {border-bottom: 1px solid #000; }


.diamond-alt-btn-white, .alt-btn-white,
.diamond-alt-btn, .alt-btn {  
  font-family: "commuters-sans", sans-serif !important; 
  font-weight: 400 !important;
  text-transform: uppercase;
  letter-spacing: 0.1em !important;
  font-size: 12px !important;
  color: #000;
  border-bottom: 1px solid transparent; 
  -webkit-transition: border 500ms ease-out;
  -moz-transition: border 500ms ease-out;
  -o-transition: border 500ms ease-out;
  transition: border 500ms ease-out;
  padding-bottom: 3px;
  border-bottom: 1px solid #FFF; 
  }

.diamond-alt-btn-white, .alt-btn-white {border-bottom: 1px solid #FFF; transition: border-width 2s linear;}
.diamond-alt-btn, .alt-btn {border-bottom: 1px solid #000; transition: border-width 1s linear;}

.diamond-alt-btn-white, .alt-btn-white {color: #FFF;}

.diamond-alt-btn-white:hover, .alt-btn-white:hover,
.diamond-alt-btn:hover, .alt-btn:hover {opacity: 0.7;}

.diamond-alt-btn:before {
  content: "";
  display: block;
  inline-size: 10px;
  block-size: 10px;
  background-color: transparent;
  margin: 50px auto 20px auto;
  border: 1px solid #000 !important;
  transform: rotate(45deg);
  }



#shopify-section-template--16650557653181__image_with_text_bEyTH9 .page-width, .small-wrap {width: 1200px; margin: auto;}

@media only screen and (max-width: 1300px) {.small-wrap {width: 90%; margin: auto;}}

#shopify-section-template--16650557653181__image_with_text_bEyTH9 .image-with-text__text a {
  font-family: "commuters-sans", sans-serif !important; 
  font-weight: 400 !important;
  text-transform: uppercase;
  letter-spacing: 0.1em !important;
  font-size: 12px !important;  
  }

#shopify-section-template--16650557653181__image_with_text_bEyTH9 .image-with-text__text p:first-child {margin-bottom: 50px;}


/* ----- WISHLIST --------- */

.st-wishlist-details-button .st-wishlist-icon {opacity: 0;}

.st-wishlist-details-button {
  margin: 0 8px;
  padding: 0px !important;
  background-size: contain; 
  background-position: center; 
  background-image: url(/cdn/shop/files/heart-black.png);
  }

.st-wishlist-details-button {margin-top: -0.5px; display: flex; align-items: center; justify-content: center;}

.st-product-card .st-atc-button, .st-product-card .st-more-details {
  font-style: normal;
  font-family: "commuters-sans", sans-serif !important; 
  font-weight: 400 !important;
  text-transform: uppercase;
  letter-spacing: 0.1em !important;
  font-size: 11px !important;
  color: #000 !important;
  background-color: transparent !important;
  border: 1px solid #000 !important;
}

.st-wishlist-button {padding: 0 !important;}
.st-toast {display: none;}

.quantum-lbw-wishlist-btn {
  font-style: normal;
  font-family: "commuters-sans", sans-serif !important; 
  font-weight: 400 !important;
  text-transform: uppercase;
  letter-spacing: 0.1em !important;
  font-size: 11px !important;
  color: #000 !important;
  flex-direction: row-reverse !important;
  border: none !important;
  padding: 0 !important;
}

.quantum-lbw-wishlist-login-modal .quantum-lbw-wishlist-login-modal__link.quantum-lbw-wishlist-login-modal__link--alter {
    color: #fff !important;
    background-color: #000 !important;
    }

.hso-quantum-login-based-wishlist-product-price {display: none !important;}

.hso-quantum-login-based-wishlist-product {
  border-radius: 0px !important;
  box-shadow: none !important;
  border: .25px solid #7d7d7b !important;
  }

.hso-quantum-login-based-wishlist-product__content button {
  font-family: "commuters-sans", sans-serif !important; 
  font-weight: 400 !important;
  text-transform: uppercase;
  letter-spacing: 0.1em !important;
  font-size: 10px !important;
  color: #000 !important;
  }

.header__icon, .header__icon--cart .icon {
    height: 3.5rem;
    width: 18px;
    padding: 0;
}

/* ----- FORMS --------- */

*:focus-visible {
    outline: .1rem solid rgba(var(--color-foreground), .5);
    outline-offset: 0 !important;
    box-shadow: none !important;
}


/* ----- FLEX CONS --------- */

.flex {
  display: flex; 
  align-items: center;
  justify-content: center;  
  }


.flex-column-no-stretch {flex-direction: column; height: 100%; }
.stretch {align-items: stretch;}
.flex-box-left {align-items: left; justify-content: space-between;}
.justiry-left {justify-content: flex-start;}
.flex-bottom {margin-top: auto; align-items: flex-end;}
.space-between {justify-content: space-between;}
.aligner-left {justify-content: flex-start !important;}
.aligner-right {justify-content: flex-end !important;}
.aligner-top {align-items: flex-start !important;}
.aligner-bottom {align-items: flex-end !important;}
.align-center {text-align: center;}

.flex-gap {gap: 2%}
.mid-gap {gap: 5%;}

.flex-gap-small {gap: 7px}
.flex-gap-wide {gap: 4%}
.flex-gap-large {gap: 6%}
.flex-gap-extra-large {gap: 10%}
.flex-gap-mid {gap: 6%;}
.flex-gap-40 {gap: 40px;}
.flex-gap-30 {gap: 30px;}

                                           





/* ----- SLIDESHOW --------- */

.slideshow__controls {display: none !important;}


/* ----- HEADER + ACCOUNCEMENT BAR --------- */

.utility-bar--bottom-border {border-bottom: none !important;}

.announcement-bar__message {
  font-size: 11px !important;   
  display: flex; 
  align-items: center;
  justify-content: center;
  }

a {text-decoration: unset !important;}

.header__active-menu-item {text-decoration: unset !important;}

.header__menu-item:hover span {text-decoration: unset !important;}

.utility-bar .page-width {
  width: 100% !important; 
  max-width: 100% !important;   
  padding: 0 30px !important;
  }

.header {
  width: 100% !important; 
  padding: 20px 3rem !important;
  max-width: 100% !important;
  } 

.header__icon, .header__icon--cart .icon {
    height: 3.5rem;
    width: 3.5rem;
    padding: 0;
    }

.header__icon .icon {height: 18px !Important; width: 18px !Important;}
.header__icon--cart .icon {height: 25px !Important; width: 25px !Important;}

@media screen and (max-width: 990px) {
  .header {padding: 15px 1.5rem !important;}
  .header__heading-link {padding: 5px 20px;}
  .header {display: flex !important; justify-content: space-between;}
  }                                                                                     


                                          

/* ----- ALTERNATIVE HERO --------- */

.header-wrapper {position: sticky; top: 0;}

/* ⚠️ HEADER MUST ALWAYS BE THE TOPMOST LAYER — DO NOT LOWER THIS.
   The Shopify header GROUP wrapper is its own stacking context (base.css: position:sticky; z-index:4),
   so the header's own z-index:59 is trapped at the GROUP's level. Any page-content element with a higher
   z-index then paints OVER the sticky header (e.g. the About page's footer-group/nav at z-index:5 → overlap).
   Keep the group far above ALL page content (which lives in low single/double-digit z-indexes) and below the
   body-level modal overlays (cart drawer / social popup at z-index:990+). If a "layer change" ever makes the
   header overlap again, the offending content's z-index exceeded the page-content range — lower THAT, don't
   touch this. */
.shopify-section-group-header-group,
.section-header.shopify-section-group-header-group { z-index: 100; }   /* beat base.css's .section-header.shopify-section-group-header-group{z-index:3} (same specificity, later source) */

.template-index .header-wrapper {
  position: absolute;
  width: 100%;  
  border-bottom: 1px solid #000;
  -webkit-transition: background-color 200ms linear;
  -ms-transition: background-color 200ms linear;
  transition: background-color 200ms linear;
  filter: invert(100%);
  border-bottom: none;
  }

.template-index .header,  
.template-index .header-wrapper {background: transparent;}

.header-change {
    background-color: #fcfef9 !important;
    filter: invert(0%) !important;
    }


.template-index .menu-drawer {filter: invert(100%);}
.template-index .drawer-close {filter: invert(100%);}

.header-change .menu-drawer {filter: invert(0%);}
.header-change .drawer-close {filter: invert(0%);}



/* --------- MENU - SEARCH --------- */

.updated-search {
    padding-right: 9.8rem;
    border: 0px solid #000 !important;
    flex-grow: 1;
    text-align: left;
    padding: 1.5rem;
    margin: var(--inputs-border-width);
    transition: box-shadow var(--duration-short) ease;
    -webkit-appearance: none;
    appearance: none;
    background-color: rgb(var(--color-background));
    color: rgb(var(--color-foreground));
    width: 100%;
    box-sizing: border-box;
    transition: box-shadow var(--duration-short) ease;
    border-radius: var(--inputs-radius);
    height: 4.5rem;
    min-height: calc(var(--inputs-border-width)* 2);
    min-width: calc(7rem +(var(--inputs-border-width)* 2));
    position: relative;
    border: 0;
    font-size: 1.3rem;
    line-height: calc(1 + .5 / var(--font-body-scale));
    letter-spacing: .04rem;
    }

.drawer-search {padding: 10px 0; display: none;}

/* --------- MENU --------- */

.appointment-link {width: auto; padding-right: 10px;}
.appointment-link a {display: block; padding: 6px 15px;}

@media screen and (max-width: 900px) {
  .header__icon--search, 
  .appointment-link {display: none;}
  .drawer-search {padding: 10px 0; display: block;}
  .header__icons {transform: scale(0.9);}
  .header__heading-logo-wrapper {width: 160px;}
  }

.appointment-link-drawer {
  display: flex; 
  flex-direction: column; 
  gap: 5px;
  padding: 3rem; 
  width: auto; 
  text-align: center;
  }

.appointment-link-drawer a {display: block;}


.menu-drawer {
  margin-top: -79px !important;
  border: none !important; 
  border-right: .25px solid #7d7d7b !important;
  }

.header__icons {padding-right: 0rem !important; align-items: center;}
.header__icon--cart {margin-right: 0rem !important;}
header-drawer {margin-left: 0rem !important;}

.drawer-menu-btn {
  display: flex; 
  justify-content: flex-start; 
  align-items: center; 
  width: 70px; 
  z-index: 10; 
  position: relative;
  }

.menu-drawer__navigation, .menu-drawer__submenu {padding: 10rem 0 0 0 !Important;}

.drawer-menu-btn span {padding-left: 0px; text-decoration: none !important;}

.drawer-open:before {
  content: "";
  display: block;
  width: 10px;
  height: 10px;  
  background-color: transparent;
  border: 1px solid #000 !important;
  transform: rotate(45deg);
  margin-bottom: 2px;
  margin-left: 2px;
  }

.drawer-close:before {
  content: "";
  display: block;
  width: 10px;
  height: 10px;  
  background-color: #000;
  border: 1px solid #000 !important;
  transform: rotate(45deg);
  margin-bottom: 2px;
  margin-left: 2px;
  }

.menu-open .drawer-menu-btn:before {background-color: #000;}

.drawer-open {display: flex !Important;}
.drawer-close {display: none !Important;}

.menu-open .drawer-close {display: flex !Important;}
.menu-open .drawer-open {display: none !Important;}

.drawer-open, .drawer-close {align-items: center; justify-content: flex-start; gap: 10px;}


@media screen and (min-width: 990px) {
  header-drawer { display: block !important;}
  .header--middle-left .header__inline-menu,
  .header--middle-center .header__inline-menu { margin-left: 0; display: none !important;}
  .header__heading, .header__heading-link { justify-self: center !important; grid-area: initial !important;}
  }


#menu-drawer ul.menu-drawer__menu.has-submenu.list-menu li:first-child,
#menu-drawer ul.menu-drawer__menu.has-submenu.list-menu li {border: 0;}

#menu-drawer ul.menu-drawer__menu.has-submenu.list-menu li a,
#menu-drawer ul.menu-drawer__menu.has-submenu.list-menu li summary {text-transform: uppercase;}

.menu-drawer-container summary .drawer-menu-btn {z-index: 10;}

/* dvh, not vh. This is an ID selector (1-0-0) so it beats every class-based
   height rule in the theme, including `.jc-nav .menu-drawer { height:100dvh }`.
   At 100vh the panel is taller than the visible viewport whenever the mobile
   URL bar is showing, and it re-lays-out the moment that bar collapses. */
#menu-drawer {
  border-top: .25px solid #7d7d7b;
  border-right: .25px solid #7d7d7b;
  height: 100vh;
  height: 100dvh;
  }

.menu-drawer__utility-links {display: none;}

.label-container {
  display: flex;
  justify-content: flex-start; 
  align-items: center;
  border-bottom: .25px solid #7d7d7b; 
  }

.label-container .label {
  border-left: .25px solid #7d7d7b;
  width: 33.33%;
  text-align: center;
  padding: 6px 20px; 
  font-family: "commuters-sans", sans-serif !important; 
  font-weight: 400 !important;
  text-transform: uppercase;
  letter-spacing: 0.1em !important;
  font-size: 11px !important;
  }

.label-container .JC {border-left: none;} 

.label-container .label:hover, .label-container .JC {background-color: #f7ede3;}


/* ----------------- CART DRAWER ------------*/

.cart-drawer .cart-item__totals, .totals__total-value {font-size: 14px !important;}



/* ----- GENERAL --------- */

.multicolumn .title {font-size: 2.6em; margin-bottom: 20px !important;}

@media only screen and (max-width: 990px) {.multicolumn .title {font-size: 2em;}}


/* ----- CUSTOM CONTAINERS & LAYOUTS --------- */


#MainContent {margin: 0px;}

.content-padding {margin: 0 40px;}

.border-top-con {
  border-top: 1px solid #000;
  padding: 30px 0;
  }

.border-bottom-con {
  border-bottom: 1px solid #000;
  padding: 30px 0;
  }

.padding-con {padding: 40px 20px;}

@media screen and (min-width: 990px) {
  .product:not(.product–no-media) .product__media-wrapper {max-width: 50%; width: calc(50% – 1rem / 2);}
}
  

/* ----- ALTERNATIVE HERO --------- */

.alternative-hero-con {
  border-top: .25px solid #7d7d7b;
  padding: 0;
  }

.alt_hero_item {min-height: 80vh; height: 100%; background-size: cover; background-position: center; display: block;}

.alt_hero_item_con {width: 50%; min-height: 80vh; height: 100%; }
.alt_hero_item_con:last-child {padding: 5%;}


/* --------- BRAND LABELS  ---------
   Scoped to .multicolumn--labels, which the section renders when its "Brand label cards"
   setting is on. This replaced `[id$="__multicolumn_JAzxqb"]` — a hardcoded Theme-Editor block
   key that would have silently dropped the entire treatment if the block were ever re-keyed or
   the section duplicated (see CLAUDE.md on hardcoded section ids).

   Desktop: description + link revealed on hover over the photo.
   Mobile:  no hover exists, so the same content sits BELOW the photo, always visible. */

.multicolumn--labels  .title-wrapper-with-link {justify-content: center;}

/* Dawn's multicolumn adds `.multicolumn .title { margin-bottom: 20px !important }` on top of
   the title wrapper's own spacing, which measured 50px here against the 14px every
   .jc-sec-head section uses. Zero it so the intro's own 1.4rem is the only gap. Scoped, so
   other multicolumn instances keep Dawn's spacing. */
.multicolumn--labels .title-wrapper-with-link { margin-bottom: 0 !important; }
.multicolumn--labels .title { margin-bottom: 0 !important; }

.multicolumn--labels .multicolumn-card {
  margin-left: 0rem !Important;
  margin-right: 0rem !important;
  }

.multicolumn--labels .multicolumn-card__info {
  position: absolute;
  width: 100%; height: 100%;
  top: 0;
  padding: 10%;
  background-color: rgba(253,253,249,0.95);
  border: 10px solid transparent;
  display: flex;
  align-items: center; 
  justify-content: center;
  flex-direction: column;
  opacity: 0;
  z-index: 3;
  transition: opacity .25s ease-in-out;
  -moz-transition: opacity .25s ease-in-out;
  -webkit-transition: opacity .25s ease-in-out;
  box-sizing: border-box;
  }


.multicolumn--labels .multicolumn-card__image-wrapper {margin: 0 !important;}

.multicolumn--labels .multicolumn-card__image-wrapper {background-color: #000;}

.multicolumn--labels .multicolumn-card__image-wrapper .media img {opacity: 0.7;}

.multicolumn--labels .multicolumn-card__info:hover {opacity: 1;}

/* label logo centered above the description in the hover overlay (black on cream) */
.multicolumn--labels .overlay-logo {
  width: clamp(150px, 62%, 250px);
  margin: 0 0 1.8rem;
}
.multicolumn--labels .overlay-logo img {
  display: block;
  width: 100%;
  height: auto;
}

.multicolumn--labels .multicolumn-card {
  margin-left: 1.5rem;
  margin-right: 1.5rem;
  }


.multicolumn-card__image-wrapper {position: relative; box-sizing: border-box;}

.logo-image {
  width: auto;
  height: calc(120px * var(--logo-scale, 100) / 100);
  z-index: 2;
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%,-50%);
  }

.logo-image img {
  object-fit: contain;
  object-position: 50% 50%;
  width:100%; 
  height:100%;
  filter: invert(100%);
  }


/* --------- ABSOLUTE LOGO  --------- */

#shopify-section-template--16650557653181__custom_liquid_bzRkQQ {border-bottom: .25px solid #7d7d7b;}

.img-submark {
  position: absolute;
  top: -40px;
  right: 3%; 
  z-index: 1;
  }

.img-submark img { 
  width: 200px;  
  height: auto;  
  transform: rotate(10deg);
  }

@media screen and (max-width: 990px) {
  .img-submark {top: 50px; right: -50px;}
  .img-submark img {width: 150px;}
  }

/* --------- IMAGE BANNER  --------- */

#shopify-section-template--16650557653181__image_banner_YYzNYq {padding: 10px 0;}


/* ----- MULTI COL - ALL  --------- */

.multicolumn-list {overflow-y: hidden;}

.multicolumn-btn-con {display: block; margin-top: 15px !important;}

.multicolumn .slider-button {display: none;}

.multicolumn  .slider-counter__link--dots .dot {
    width: 1.1rem;
    height: 1.1rem;
    border-radius: 0%;
    border: .1rem solid rgba(var(--color-foreground), .5);
    }

.multicolumn .slider-counter__link {transform: rotate(45deg);}

.multicolumn .slider-buttons {padding: 20px 0  5px 0;}


@media screen and (max-width: 990px) {
  .multicolumn-btn-con {display: block; margin-top: 5px !important;}
  }

/* ----- FEATURED BRIDES  --------- */

.real-brides-con {position: relative;}

.real-brides-inner {display: flex; gap: 20px;}

.half-con {width: 50%; position: relative;}

.half-con:first-child {
  order: 2; 
  background-color: #F7EDE3; 
  display: flex; 
  align-items: center;
  justify-content: center;
  flex-direction: column;
  text-align: center;
  }

.real-brides-con .multicolumn-list {margin-bottom: 0;}

.real-brides-con .multicolumn-card__image-wrapper {
  margin-left: 0rem !omportant;
  margin-right: 0rem !important;
  }

.real-brides-con .multicolumn-card {
  box-sizing: border-box;
  position: relative;
  }

.real-brides-con .multicolumn-card__image-wrapper {
  background-color: #000;
  }

.real-brides-con .multicolumn-card__image-wrapper img {opacity: 0.7;}

.real-brides-con .multicolumn-card__info { 
  position: absolute; 
  bottom: 5%;
  left: 5%;
  padding: 0;
  box-sizing: border-box;
  filter: invert(100%);
  }

.real-brides-con .slider-counter__link {padding: 0rem;}

.real-brides-con h3 {font-size: 2em;}

.real-brides-con .slideshow__control-wrapper {display: flex; gap: 15px;}

.real-brides-con .slider-buttons {
  position: absolute; 
  bottom: 5%;
  right: 5%;
  filter: invert(100%);
  }


.real-brides-con .title-wrapper-with-link {flex-direction: column; justify-content: center; align-items: center;}

@media screen and (max-width: 990px) {
  .real-brides-con .multicolumn-card__info .inline-richtext {font-size: 1.6em;}
  .real-brides-con .multicolumn-card__info {bottom: 7%; left: 7%;}
  
  .real-brides-inner {flex-direction: column;}
  .half-con {width: 100%; position: relative;}

  .half-con:first-child {
  order: 1; 
  background-color: transparent; 
  display: flex; 
  align-items: center;
  justify-content: center;
  flex-direction: column;
  text-align: center;
  }

  .half-con .title-wrapper-with-link {  flex-direction: column;}
  
  .half-con:nth-child(2) {order: 2;}

  .real-brides-con .slider-buttons {position: relative;  bottom: 0%; right: 0%; filter: invert(0%);}
  
  }


#shopify-section-template--16650557653181__multicolumn_EnzzKp .multicolumn-card__image-wrapper {
  margin-left: 0rem !Important;
  margin-right: 0rem !important;
  }

#shopify-section-template--16650557653181__multicolumn_EnzzKp .multicolumn-card {
  box-sizing: border-box;
  position: relative;
  }

#shopify-section-template--16650557653181__multicolumn_EnzzKp .multicolumn-card__image-wrapper {
  background-color: #000;
  }

#shopify-section-template--16650557653181__multicolumn_EnzzKp .multicolumn-card__image-wrapper img {opacity: 0.7;}

#shopify-section-template--16650557653181__multicolumn_EnzzKp .multicolumn-card__info { 
  position: absolute; 
  bottom: 0;
  margin-left: 1.5rem;
  margin-right: 1.5rem;
  padding: 5% 30% 5% 5%;
  box-sizing: border-box;
  filter: invert(100%);
  }


/* ----- PRESS MARQUEE --------- */


.c-slider__content-wrapper {padding: 0 15px; opacity: 0.5;}
.c-slider__content-wrapper:hover {opacity: 1;}
.c-slider-marquee {border-bottom: .25px solid #7d7d7b;}


/* ----- FEATURED COLLUMNS - ABOUT + STOCKISTS --------- */

#shopify-section-template--16650557653181__multicolumn_epANKi .multicolumn-card__info{ 
  text-align: center; 
  padding: 1.5em 3em;
}

#shopify-section-template--16650557653181__multicolumn_epANKi .multicolumn-list__item:nth-child(2) {
  border-left: .25px solid #7d7d7b;
  border-right: .25px solid #7d7d7b;
  }

.home-cta { padding: 2% 0;}

.home-cta a {color: #000000; text-decoration: none;}

.diamond {
    background: transparent;
    height: 10px !important;
    width: 10px !important;
    border: 1px solid #000 !important;
    display: inline-block;
    transform: rotate(45deg);
    }

.image-list-con {padding: 100px 0; position: relative;}

@media screen and (max-width: 990px) {
  #shopify-section-template--16650557653181__multicolumn_epANKi .multicolumn-list__item:nth-child(2) {
  border-left: none;
  border-right: none;
  border-top: .25px solid #7d7d7b;
  border-bottom: .25px solid #7d7d7b;
  }

}
  

/* --------- COLLECTION SLIDER --------- */


#shopify-section-template--16650557653181__featured_collection .collection__title {
  width: 50%; text-align: center; padding: 0;  
}

.collection-title-con {
  padding: 0 0 50px 0;
  margin-left: 1.5rem;
  margin-right: 1.5rem;
  justify-content: space-between;
  align-items: flex-end;
  gap: 10%;
  }


.collection-silder-con {display: flex; justify-content: space-between; align-items: flex-start;}

.collection-01, .collection-02 {padding-top: 30px;}
.collection-01 {width: 22%;}
.collection-02 {width: 75%;}

@media screen and (max-width: 990px) {
  
  .featured-collection {padding: 0 !important;}
  .collection-silder-con {flex-direction: column;}
  .collection-01 {width: 100%;}
  .collection-02 {width: 100%;}
  }

.collection-slider .product-grid .card__inner {border: none !important;}

.collection__title.title-wrapper {margin-bottom: 3rem !important;}
  
  @media screen and (min-width: 990px) {
    .slider--desktop.grid--3-col-desktop .grid__item {
        width: calc(33.33% - var(--grid-desktop-horizontal-spacing)) !important;
        max-width: calc(33.33% - var(--grid-desktop-horizontal-spacing)) !important;
        }

    
  .collection-slider .grid--6-col-desktop .grid__item {
    width: calc(16.66% - var(--grid-desktop-horizontal-spacing)) !important;
    max-width: calc(16.66% - var(--grid-desktop-horizontal-spacing))!important;
  }

  .collection-slider .grid--5-col-desktop .grid__item {
    width: calc(20% - var(--grid-desktop-horizontal-spacing))!important;
    max-width: calc(20% - var(--grid-desktop-horizontal-spacing))!important;
  }

  .collection-slider .grid--4-col-desktop .grid__item {
    width: calc(25% - var(--grid-desktop-horizontal-spacing))!important;
    max-width: calc(25% - var(--grid-desktop-horizontal-spacing))!important;}
  }

  .collection-slider .grid--3-col-desktop .grid__item {
    width: calc(33.33% - var(--grid-desktop-horizontal-spacing)) !important;
    max-width: calc(33.33% - var(--grid-desktop-horizontal-spacing)) !important;
  }

  .collection-slider .grid--2-col-desktop .grid__item {
    width: calc(50% - var(--grid-desktop-horizontal-spacing)) !important;
    max-width: calc(50% - var(--grid-desktop-horizontal-spacing)) !important;
  }
}
  
  
  
  @media screen and (min-width: 750px) and (max-width: 989px) {
.slider--tablet.grid--peek.grid--2-col-tablet .grid__item, 
    .slider--tablet.grid--peek.grid--2-col-tablet-down .grid__item {
    width: calc(33.33% - var(--grid-desktop-horizontal-spacing));
}
  }
  
    @media screen and (max-width: 749px) {
.slider--tablet.grid--peek.grid--2-col-tablet .grid__item, 
    .slider--tablet.grid--peek.grid--2-col-tablet-down .grid__item {
    width: calc(52% - var(--grid-desktop-horizontal-spacing));
}
  }
  



.collection .slider-component-desktop .slider-counter {display: none;}
.collection .slider-component-desktop .slider-buttons {
  position: absolute;
  transform: translateY(-100%);
  /*top: calc(50% - 10px);*/
   top: 0; 
    width: 100%;
    justify-content: flex-end;
    z-index: 9;
    transition: 0.5s;
    opacity: 1;
    padding: 0;
  }

.collection .slider-component-desktop:hover .slider-buttons {opacity: 1;}

.collection .slider-component-desktop .slider-button {
  background: transparent;
  color: #000;
  opacity: 1;
  position: relative;
  }

.collection .slider-component-desktop .slider-button:hover {opacity: 1;}
.collection .slider-component-desktop .slider-button[disabled] .icon {color: #cdcdcd;}
.collection .slider-component-desktop .slider-button .icon {height: 1rem;}

/* --------- AFTER PAY --------- */

.aferpayInfo {font-size: 12px; letter-spacing: 0; display: flex; justify-content: flex-start; align-items: center; gap: 5px;}

.aferpayInfo img {filter: grayscale(1);}

.aferpayInfo .more-info-link {color: #000;}

/* --------- PRODUCT CARD --------- */

.product-grid .card__heading {  
  font-family: "commuters-sans", sans-serif !important; 
  font-weight: 400 !important;
  text-transform: uppercase;
  letter-spacing: 0.1em !important;
  font-size: 12px !important;
  }

.page-width-slider {position: relative; width: calc(150rem + 5rem); padding: 5rem; right: 0;}

#shopify-section-template--16650557653181__multicolumn_bDeFWV {
  border-bottom: 1px solid #e9e9e9;
  }

.template-product .price-item--sale, 
.template-product .price-item--regular {
  text-align: left;
  font-family: "commuters-sans", sans-serif !important; 
  font-weight: 400 !important;
  text-transform: uppercase;
  letter-spacing: 0.1em !important;
  font-size: 12px !important;
  }

.card__badge, 
.card__information .price__container .price--on-sale, 
.card__information .price__container .price-item--regular,
.card-wrapper.product-card-wrapper .card__inner+.card__content .card__information .price--on-sale,
.card-wrapper.product-card-wrapper .card__inner+.card__content .card__information .price,
#shopify-section-template--16650557653181__multicolumn_bDeFWV .title-wrapper-with-link{
  text-align: left;
  font-family: "commuters-sans", sans-serif !important; 
  font-weight: 400 !important;
  text-transform: uppercase;
  letter-spacing: 0.1em !important;
  font-size: 10px !important;
  padding-top: 5px;
  }

.badge {
    border: none !important;
    font-size: 1rem;
    padding: 5px 10px !important;
    }

.product__tax {display: none;}


.card-wrapper.product-card-wrapper .card__inner>.card__content:before,
.card-wrapper.product-card-wrapper .card:hover .card__inner>.card__content:before {display: none !important;}

.card-wrapper.product-card-wrapper .card__inner+.card__content .card__information .price {display: none;}
.title-sample-sale .card-wrapper.product-card-wrapper .card__inner+.card__content .card__information .price {display: block;}
.template-name--active .card-wrapper.product-card-wrapper .card__inner+.card__content .card__information .price {display: block;}


.card-wrapper.product-card-wrapper .card__inner+.card__content .card__information,
.template-name--active .card-wrapper.product-card-wrapper .card__inner+.card__content .card__information {display: block;}

.quick-add {}


/* ------ COLLECTION PAGE------*/

.collection-hero {padding-top: 8vh !important;}
.collection-hero__text-wrapper {text-align: center;}
.collection-hero__title {font-size: 1.8em;}
.collection-hero__description {margin: auto; transform: scale(0.9);}

.collection-logo-img {width: 350px;}

@media screen and (max-width: 750px) {
  .collection-logo-img {width: 230px}
  }


/* ------ PAGE DEFULT ------*/

.template-page .main-page-title {font-size: 1.8em; text-align: center;}


/* ------ CART / SEARCH / 404 / ARTICLE — join the same page-title size tier as above ------*/

.template-cart .title--primary {font-size: 1.8em;}
.template-search h1.h2 {font-size: 1.8em;}
.template-404 .rich-text__heading.h1 {font-size: 1.8em;}
.article-template__title {font-size: 1.8em;}


/* ------ PRODUCT ------*/

.product-page-links {}
.product-page-links a {display: block; padding: 3px 0; color: #000;}

.product-btn-con {display: flex; max-width: 300px; flex-direction: column; gap: 5px; text-align: center;}

.product__title h1 {font-size: 2.5em !important;}

.related-products__heading {text-align: center;}

@media screen and (min-width: 750px) {
.product__column-sticky {top: 11rem !important;}
}


.product__description h2 {
    text-transform: none !important;
    font-size: var(--font-body-size);
    letter-spacing: 0.06rem;
    line-height: calc(1 + 0.8 / var(--font-body-scale));
    font-family: var(--font-body-family) !important;
    font-style: var(--font-body-style) !important;
    font-weight: var(--font-body-weight) !important;
    }


@media screen and (max-width: 750px) {
.template-product .shopify-section section {padding-top: 0px;}
  .product__info-wrapper {
  margin-top: 10px;
  padding-top: 30px;
  border-top: .25px solid #7d7d7b;}
}


/* ------ BLOG PAGE------*/

.main-blog .title--primary {text-align: center; font-size: 1.8em;}
.main-blog h1 {font-size: 1.8em;}

@media screen and (min-width: 750px) {
.blog-articles {
    /*grid-template-columns: repeat(3, 1fr) !important;*/
    display: block !important;
    break-inside: avoid-column;
    column-count: 3;
    }
  }

.blog-articles__article, .blog-article-card {width: 100% !important;}
.blog-articles .article {
    padding-bottom: 30px;
    align-items: flex-start !important;                        
    page-break-inside: avoid; 
    break-inside: avoid-column;
    }

.blog-articles .article .card__heading a:after {display: none;}

.article-img-con {
    border: none;
    background-color: #000;
    }

.blog-articles__article:hover img {opacity: 0.7;}

.article-info-con {padding-top: 20px;}

.article-info-con .card__heading {padding-bottom: 10px; font-size: 1.4em;}

.article-img-con img {
  display: block;
  transition: opacity .25s ease-in-out;
  -moz-transition: opacity .25s ease-in-out;
  -webkit-transition: opacity .25s ease-in-out;
  }

.article-template__content img {width: 100%;}

.template-article .shopify-section:first-child .page-width {max-width: 100%; padding: 0;}

.article-template {width: 50%; padding: 5%; background-color: #f7ede3;}
.article-img {width: 50%; height: 100vh; position: sticky; top: 0; float: right;}
.article-img img {width: 100%; height: 100%; object-fit: cover;}
.article-template header {margin-top: 0 !Important;}
/*.article-template__content div {text-align: left!important;}*/
.article-template__content img {padding: 10px 0; border: none !important;}

.article-image-gallery {}
.template-name--alternate .article-excert-bottom {text-align: center !important;}


@media screen and (max-width: 990px) {
.article-template {width: 100%; padding: 5%; background-color: #f7ede3;}
.article-img {width: 100%; height: 50vh; position: relative; top: 0; float: none;}
}

.template-name--alternate .article-img {display: none;}
.template-name--alternate .article-template {width: 100%; padding: 100px 0; background-color: transparent;}
.template-name--alternate .article-template header {text-align: center;}
.template-name--alternate .article-template__back {text-align: center;}





/* ------------ BLOG FILTER ---------------- */

.blog-filter {display: flex; gap: 30px;}

.filter-btn {
    font-family: "commuters-sans", sans-serif !important;
    font-weight: 400 !important;
    text-transform: uppercase;
    letter-spacing: 0.1em !important;
    font-size: 11px !important;
    color: #000;
    }

.filter-btn::before {
    content: '';
    display: flex;
    align-items: center;
    box-sizing: border-box;
    background: transparent;
    height: 10px !important;
    width: 10px !important;
    margin-right: 10px;
    border: 1px solid #000 !important;
    display: inline-block;
    transform: rotate(45deg);
    -webkit-transition: background-color .3s ease-in-out;
    -o-transition: background-color .3s ease-in-out;
    transition: background-color .3s ease-in-out;
    }

.active-filter::before, .filter-btn:hover::before {background-color: #000;}

.custom-row {display: flex; justify-content: space-between; align-items: center; padding-bottom: 20px;}



@media screen and (max-width: 990px) {
  .custom-row {flex-direction: column; align-items: center;}  
  .filter-btn {width: auto; display: inline-block; padding: 0 10px;}
  .blog-filter {padding: 10px 0; width: 100%; display: flex; gap: 10px; flex-wrap: wrap; align-items: center; justify-content: center;}
  }


/* ------------ FOOTER ---------------- */

.contact-information {display: none !important;}

.shopify-section-group-footer-group {margin: 0 0px !important;}

.footer__content-top {
  padding: 50px !important;
  max-width: 100% !important;
  width: 100% !important; 
  }

.footer__content-bottom-wrapper{
  padding: 0px 50px !important;
  max-width: 100% !important;
  width: 100% !important; 
  }

.footer, .footer__content-bottom {
  border-top: .25px solid #7d7d7b !important;
  }

.footer-block__details-content>p, .footer-block__details-content>li {
  font-size: 12px !important;
  }

.footer-block__heading {    
    font-family: "commuters-sans", sans-serif !important;
    font-weight: 400 !important;
    text-transform: uppercase;
    letter-spacing: 0.1em !important;
    font-size: 11px !important;
    }


.newsletter-form__field-wrapper .field__input {
    padding-left: 15px !important;
    background-color: transparent !important;
    }


.newsletter-form__field-wrapper .field__label {display: none;}

.localization-selector.link {padding: 0 30px 0 0 !important;}
.footer__content-bottom {padding-top: 0 !important;}
.disclosure__button {height: 20px !important;}

.footer__copyright{margin-top: 0 !important; width: 100%;}

.footer__content-bottom-wrapper {align-items: center;}

.localization-form__select:before {box-shadow: none !important;}
.footer__blocks-wrapper {display: flex; align-items: flex-start; gap: 5%;}
.footer-block__newsletter {width: 100%; justify-content: flex-end; margin-right: 0 !important;}
.footer__blocks-wrapper .footer-block {width: auto; min-width: 150px}

.footer-block-image {display: block; width: 150px;}
.newsletter-form__field-wrapper .field__input {padding-left: 0; background-color: #fff;}

.newsletter-form__field-wrapper {margin-bottom: 10px !important;}

.social-link {color: #000; text-decoration: none;}
.social-bullet {padding: 0 10px;}

.localization-selector.link {padding: 0 !important;}

.localization-form:only-child .button, 
.localization-form:only-child .localization-form__select {margin: 0 !important}

.disclosure .icon {display: none;}


@media screen and (max-width: 1300px) {
.footer__blocks-wrapper {gap: 2%;}
}


@media screen and (max-width: 990px) {
  .footer__blocks-wrapper {display: block; flex-direction: column;}  
  .footer__content-top {padding: 40px 20px !important;}
  .footer-block {width: 50% !important; float: left; text-align: center;}
  .footer-block:first-child {width: 100% !important; margin: auto;}
  .footer-block:first-child img {margin: auto;}
  .footer-block-image {display: block !important; margin: auto; width: 120px; align-items: center; justify-content: center;}
  .footer-block__newsletter {width: 100% !important; clear: both;}
  .footer-block:nth-child(4) {clear: both;}
  }

@media screen and (max-width: 749px) {
  .footer__content-bottom-wrapper {font-size: 9pm !important;}
  .footer__content-bottom-wrapper {padding: 20px !important;}
  .disclosure__button {height: 15px !important;}
  .localization-form:only-child .button, .localization-form:only-child .localization-form__select {margin: 0 auto !important;}
  .footer__localization, .localization-form {padding: 0 !important;}
  .footer__content-bottom-wrapper {row-gap: 0rem !important;}
  .st-wishlist-button .label, .localization-form:only-child .button,
  .localization-form:only-child .localization-form__select, 
  .footer__copyright .copyright__content, .footer__copyright .copyright__content a {padding: 0; }
  }



/* --------- INPUTS  --------- */

.field, 
.field:before, .select:before, .customer .field:before, .customer select:before, .localization-form__select:before,
.field:after, .select:after, .customer .field:after, .customer select:after, .localization-form__select:after,
.field__input:focus, .select__select:focus, .customer .field input:focus, .customer select:focus, .localization-form__select:focus.localization-form__select:after {
    box-shadow: none !important;
    outline: 0;
    margin: 0;
  }

.field__input:focus, .field__input:not(:placeholder-shown), 
.field__input:-webkit-autofill, 
.customer .field input:focus, 
.customer .field input:not(:placeholder-shown), 
.customer .field input:-webkit-autofill {
    padding: 1.5rem !important;
    margin: 0;
    }

.field__input, .customer .field input,
.search__input, .search__input:hover, 
.search__input:active, .search__input:focus {    
    border: 0px solid #000 !important;
    }

.search-modal {border-bottom: none;}

details[open] .modal-overlay:after {
    position: absolute;
    content: "";
    background-color: transparent;
}


/* --------- IG BLOCK --------- */

.ig-block {width: 33.33%; gap: 10px; display: block; flex-direction: column;}

.ig-image {margin-bottom: 15px;}

.ig-con {
  border-top: 1px solid #000;
  padding: 30px 0;
  }

.ig-block img {
  box-sizing: border-box;
  max-width: 100%;
  height: auto;
  display: block;
  }

@media screen and (max-width: 990px) {
  .instagram-section {flex-direction: column; gap: 30px;}
  .ig-block {width: 100%; gap: 10px; display: block; flex-direction: column;}
  }

/* --------- VIDEO CON --------- */

.c-video-section__item {height: 50vh; padding-bottom: 50vh;}

.video-section {background-color: #444;}
.c-video-section__item {opacity: 0.8;}

.video-text-overlay {
    width: 100%; 
    height: 100%;
    padding: 5%; 
    position: absolute; 
    display: flex;
    z-index: 999;
    }

.video-text-inner {max-width: 500px;}
  
.video-section__text-center {text-align: center;}
.video-section__text-right {text-align: right;}

.video-section__item-text-vertical-center {align-items: center;}
.video-section__item-text-vertical-bottom {align-items: flex-end;}

.video-section__item-text-horizontal-center {justify-content: center}
.video-section__item-text-horizontal-right {justify-content: flex-end;}

@media screen and (max-width: 990px) {
  .video-text-overlay {padding: 10% 8%;}
  }

/*-------------- ACCORDIONS ------------------*/

.accordion-layout {position: relative;}

.accordion-layout h1 {margin-bottom: 40px;}

.accordion-layout h3 {
  	border-bottom: .25px solid #7d7d7b;
  	padding-top: 50px;
  	margin-bottom: 30px;
	}

.accordion-layout h3:first-child {
  border-top: none;
  padding-top: 0;
  margin-bottom: 30px;}

.accordion-layout h4 {  	
  	font-family: "commuters-sans", sans-serif !important; 
    font-weight: 400 !important;
    text-transform: uppercase;
    letter-spacing: 0.1em !important;
    font-size: 12px !important;  
    font-style: normal;
    cursor: pointer;
  	padding: 16px 70px 16px 0px;
  	margin: 0;
    width: 100%;
    text-align: left;
  	outline: none;
  	transition: 0.4s;
    line-height: 2;
  	position: relative;
  	border-bottom: .25px solid #7d7d7b;
  	font-family: $altFontStack;
  	text-transform: uppercase;
	}

.accordion-layout h4:after {
  	content: ' '; 
  	background-size: contain;
  	background-repeat: no-repeat;
  	background-position: center;
   	background-image: url(https://cdn.shopify.com/s/files/1/0247/7771/9862/files/nav-arrow-down.svg);
  	width: 25px; 
  	height: 25px;
  	position: absolute;
  	right: 0px;
  	top: 0;
    top: 50%; 
    transform: translate(0%, -50%);
	}

.accordion-layout h4.active:after {
  	content: " "; 
  	background-size: contain;
  	background-repeat: no-repeat;
  	background-position: center;
   	background-image: url(https://cdn.shopify.com/s/files/1/0247/7771/9862/files/nav-arrow-up.svg);
  
	}

.panel {
    margin: 0;
  	padding: 0;
  	max-height: 0;
  	overflow: hidden;
  	transition: max-height 0.2s ease-out;
  	padding: 0px;
	}

.panel p {margin: 15px 0;}

.panel ul {margin: 15px 0 15px 20px;}

.panel:nth-child(1) {display: block; }


/*-------------- TABS ------------------*/

.tab-customize {overflow: hidden;}

.tab-customize button {
  background-color: inherit;
  float: left;
  border: none;
  outline: none;
  cursor: pointer;
  transition: 0.3s;
  font-family: "commuters-sans", sans-serif !important; 
  font-weight: 400 !important;
  text-transform: uppercase;
  letter-spacing: 0.1em !important;
  font-size: 11px !important; 
  padding: 10px 20px 10px 0;
  opacity: 0.4;
  }

.tab-customize button:hover {opacity: 1;}
.tab-customize button.active {opacity: 1;}

.tabcontent-cus {display: none; padding-bottom: 5px;}
/* Normalize description rhythm so every product reads the same regardless of the
   per-product HTML authored in Admin (raw {{ description }}, never gets .rte).
   Descriptions are Word-pasted — paragraphs arrive as <h1 class="MsoNormal">/<p>,
   so tighten line-height + block gaps on all of them. !important beats the inline
   line-heights/margins the rich-text editor injects on paste. */
.tabcontent-cus,
.tabcontent-cus p,
.tabcontent-cus h1,
.tabcontent-cus h2,
.tabcontent-cus h3,
.tabcontent-cus li {line-height: 1.4 !important;}
.tabcontent-cus p,
.tabcontent-cus h1,
.tabcontent-cus h2,
.tabcontent-cus h3 {margin-top: 0 !important; margin-bottom: 0.7rem !important;}
.tabcontent-cus span {line-height: inherit !important;}
.tabcontent-cus a, .tabcontent-cus u {color: #000; border-bottom: 1px solid #000; text-decoration: none;}
.tabcontent-cus a:hover {opacity: 0.7;}

/* Pickup-availability drawer ("VIEW STORE INFORMATION") opens at top:0 under the sticky
   header (drawer z-index:4 vs the nav group's z-index:100). Push its content below the nav
   so the store title / variant line / close button aren't blocked. */
pickup-availability-drawer {
  padding-top: calc(var(--nav-height, 79px) + 2rem) !important;
}

/*-------------- PRODUCT FILTERS ------------------*/

.facets__form-vertical {
  position: sticky; 
  top: 0; 
  border: .1rem solid rgba(var(--color-foreground), .1);
  padding: 10px;
  }

.sorting-dropdown {
    z-index: 99;
    width: 100%;
    right: 0;
    padding: 20px 20px 20px 20px;
    display: none;
    background-color: rgb(var(--color-background));
    position: absolute;
    top: calc(100% + .5rem);
    left: -1.2rem;
    width: 35rem;
    max-height: 55rem;
    overflow-y: auto;
    }

.facets__disclosure {margin-right: 0rem !important;}

.facets__heading, .facets__summary .icon {display: none !important;}

.facets__wrapper {
    align-items: center;
    align-self: center;  
    }

aside#main-collection-filters {
    position: sticky;
    top: 79px;
    z-index: 2;
    background: rgb(var(--color-background));
    }

@media screen and (max-width: 990px) {
  aside#main-collection-filters {
    position: relative;
     top: 0px;
    }

  }

/*-------------- STOCKIST PAGE ------------------*/

/* Custom theme-owned store locator (replaces the Listr / Simple Store Finder app).
   Map = Leaflet + Esri Light Gray Canvas tiles; store list = Theme-Editor blocks
   (sections/store-locator.liquid). */

.stk { background: #fff; }

/* "enquiry now" (and any image-with-text CTA on this page) → brand underline button,
   matching .cs__btn / .cta__btn elsewhere, not Dawn's outlined box. */
/* "Enquiry now" (and any image-with-text CTA on this page) → the house black box.
   Rewritten in place rather than left to the house rule: these two had to use !important to beat
   Dawn's own .button, so a later unprefixed rule can never win against them. */
.template-name--stockists .image-with-text .button {
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
  min-height: 4.5rem;
  min-width: 12rem;
  margin: 0;
  padding: 0 3rem !important;
  background: #000 !important;
  border: 0 !important;
  border-radius: 0 !important;
  box-shadow: none;
  color: #fdfdf9 !important;
  font-family: "commuters-sans", sans-serif !important;
  font-size: 1.2rem !important;
  font-weight: 400 !important;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  text-decoration: none;
  line-height: 1.2;
  transition: transform 0.3s cubic-bezier(0.22, 1, 0.36, 1), box-shadow 0.3s ease;
}
.template-name--stockists .image-with-text .button::before,
.template-name--stockists .image-with-text .button::after {
  display: none !important;
  box-shadow: none !important;
}
.template-name--stockists .image-with-text .button:hover,
.template-name--stockists .image-with-text .button:focus-visible {
  opacity: 1;
  background: #000 !important;
  color: #fdfdf9 !important;
  transform: translateY(-2px) scale(1.02);
  box-shadow: 0 16px 40px -16px rgba(0, 0, 0, 0.45) !important;
}
@media (prefers-reduced-motion: reduce) {
  .template-name--stockists .image-with-text .button:hover, .template-name--stockists .image-with-text .button:focus-visible { transform: none; }
}

.stk__head { text-align: center; max-width: 82rem; margin: 0 auto 3.2rem; }
.stk__title {
  font-family: "ivymode", serif;
  font-weight: 300;
  font-size: 3.64rem;
  line-height: 1.15;
  letter-spacing: 0.02em;
  color: #1a1a1a;
  margin: 0 0 1.2rem;
}
.stk__intro, .stk__intro p {
  font-family: "articulat-cf", sans-serif !important;
  font-weight: 300;
  font-size: 1.4rem;
  line-height: 1.7;
  color: #4a4a47;
  margin: 0;
}

/* Contact & FAQ — match Stockist typography */
.template-name--contact .main-page-title,
.page--faq .main-page-title {
  font-family: "ivymode", serif;
  font-weight: 300;
  font-size: 3.64rem;
  line-height: 1.15;
  letter-spacing: 0.02em;
  color: #1a1a1a;
}
.template-name--contact .rte,
.page--faq .rte {
  font-family: "articulat-cf", sans-serif;
  font-weight: 300;
  font-size: 1.4rem;
  line-height: 1.7;
  color: #4a4a47;
}

.stk__layout {
  display: grid;
  grid-template-columns: minmax(30rem, 36rem) 1fr;
  gap: 3rem;
  align-items: stretch;
}

/* ---- list panel ---- */
.stk__panel {
  max-height: 62rem;
  overflow-y: auto;
  padding-right: 1.2rem;
  -webkit-overflow-scrolling: touch;
}
.stk__list { list-style: none; margin: 0; padding: 0; }

/* "Show all locations" reset link */
.stk__showall {
  display: inline-block;
  font-family: "commuters-sans", sans-serif;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  font-size: 1rem;
  color: #1a1a1a;
  background: none;
  border: 0;
  border-bottom: 1px solid #1a1a1a;
  padding: 0 0 1px;
  margin: 0 0 1.6rem;
  cursor: pointer;
  transition: opacity 0.3s ease;
}
.stk__showall:hover { opacity: 0.55; }

/* ---- country accordion ---- */
.stk-acc { border-bottom: 0.25px solid #d2d2cf; }
.stk-acc__head {
  display: flex;
  align-items: center;
  gap: 1rem;
  width: 100%;
  background: none;
  border: 0;
  padding: 1.6rem 0;
  cursor: pointer;
  text-align: left;
  font-family: "commuters-sans", sans-serif;
  font-weight: 400;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  font-size: 1.2rem;
  color: #1a1a1a;
  transition: opacity 0.25s ease;
}
.stk-acc__head:hover { opacity: 0.6; }
.stk-acc__head:focus-visible { outline: 1px solid #1a1a1a; outline-offset: 3px; }
.stk-acc__name { flex: 1 1 auto; }
.stk-acc__count { font-size: 1rem; color: #9a9388; letter-spacing: 0.06em; }
.stk-acc__chev {
  width: 8px;
  height: 8px;
  border-right: 1px solid #1a1a1a;
  border-bottom: 1px solid #1a1a1a;
  transform: rotate(45deg);
  transition: transform 0.3s cubic-bezier(.22,1,.36,1);
  flex: 0 0 auto;
  margin-left: 0.4rem;
}
.stk-acc.is-open .stk-acc__chev { transform: rotate(-135deg); }

/* grid-rows 0fr→1fr = smooth height animation, no max-height guesswork */
.stk-acc__panel {
  display: grid;
  grid-template-rows: 0fr;
  transition: grid-template-rows 0.4s cubic-bezier(.22,1,.36,1);
}
.stk-acc.is-open .stk-acc__panel { grid-template-rows: 1fr; }
.stk-acc__stores {
  list-style: none;
  margin: 0;
  padding: 0;
  overflow: hidden;
  min-height: 0;
}

.stk-store {
  border-top: 0.25px solid #ececea;
  padding: 1.2rem;
  transition: background-color 0.35s ease;
}
.stk-store.is-active { background: #f2f2f0; }
.stk-store__head {
  display: block;
  width: 100%;
  text-align: left;
  background: none;
  border: 0;
  padding: 0;
  cursor: pointer;
  font: inherit;
  color: inherit;
}
.stk-store__head[data-nopin] { cursor: default; }
.stk-store__name {
  display: block;
  font-family: "articulat-cf", sans-serif;
  font-weight: 500;
  font-size: 1.45rem;
  color: #1a1a1a;
  letter-spacing: 0.01em;
}
.stk-store__badge {
  display: inline-block;
  font-family: "commuters-sans", sans-serif;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  font-size: 0.9rem;
  color: #1a1a1a;
  border: 0.5px solid #1a1a1a;
  padding: 1px 6px;
  margin-left: 6px;
  vertical-align: middle;
}
.stk-store__addr {
  display: block;
  font-family: "articulat-cf", sans-serif;
  font-weight: 300;
  font-size: 1.3rem;
  line-height: 1.5;
  color: #6f6f6c;
  margin-top: 0.4rem;
}
.stk-store__labels {
  display: block;
  font-family: "commuters-sans", sans-serif;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  font-size: 0.95rem;
  color: #bdb7ad;
  margin-top: 0.6rem;
}
.stk-store__links {
  display: flex;
  flex-wrap: wrap;
  gap: 1.4rem;
  align-items: center;
  margin-top: 0.8rem;
}
.stk-store__link {
  font-family: "commuters-sans", sans-serif;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  font-size: 1rem;
  color: #1a1a1a;
  text-decoration: none;
  border-bottom: 1px solid #1a1a1a;
  padding-bottom: 1px;
  transition: opacity 0.3s ease;
}
.stk-store__link:hover { opacity: 0.55; }
.stk-store__phone {
  font-family: "articulat-cf", sans-serif;
  font-size: 1.2rem;
  color: #9a9388;
}

/* ---- map (Leaflet) ---- */
.stk__mapwrap { position: relative; }
.stk__map {
  height: 62rem;
  width: 100%;
  background: #e9e6df;
  position: relative;
  z-index: 0;
  /* isolation creates a stacking context so Leaflet's internal z-indexes
     (panes ~200-700, controls ~800-1000) can NEVER paint over the sticky
     header group (z-index:100). Do not remove. */
  isolation: isolate;
}

/* brand diamond pin (Leaflet divIcon, currentColor drives fill) */
.stk-pin {
  color: #1a1a1a;
  transition: transform 0.25s cubic-bezier(.22,1,.36,1), filter 0.25s ease;
  transform-origin: 50% 100%;
  filter: drop-shadow(0 2px 3px rgba(0,0,0,0.25));
}
.stk-pin svg { display: block; }
.stk-pin.is-active { color: #000; transform: scale(1.3); filter: drop-shadow(0 3px 5px rgba(0,0,0,0.4)); }

/* Leaflet UI → brand styling */
.stk__map .leaflet-popup-content-wrapper {
  border-radius: 0;
  box-shadow: 0 6px 24px rgba(0,0,0,0.16);
}
.stk__map .leaflet-popup-content { margin: 14px 16px; }
.stk-pop { display: flex; flex-direction: column; gap: 4px; }
.stk-pop__name {
  font-family: "articulat-cf", sans-serif;
  font-weight: 500;
  font-size: 1.4rem;
  color: #1a1a1a;
}
.stk-pop__addr {
  font-family: "articulat-cf", sans-serif !important;
  font-weight: 300;
  font-size: 1.25rem;
  line-height: 1.5;
  color: #6f6f6c;
}
.stk-pop__link {
  font-family: "commuters-sans", sans-serif;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  font-size: 1rem;
  color: #1a1a1a;
  border-bottom: 1px solid #1a1a1a;
  text-decoration: none;
  align-self: flex-start;
  margin-top: 2px;
}
.stk__map .leaflet-control-zoom a {
  border-radius: 0 !important;
  color: #1a1a1a;
  font-weight: 300;
}
.stk__map .leaflet-bar { box-shadow: 0 1px 6px rgba(0,0,0,0.15); border: none; }
.stk__map .leaflet-control-attribution {
  font-family: "articulat-cf", sans-serif;
  font-size: 9px;
  background: rgba(255,255,255,0.78);
}

@media screen and (max-width: 989px) {
  .stk__layout { grid-template-columns: 1fr; gap: 2rem; }
  .stk__mapwrap { order: 1; }
  .stk__panel { order: 2; max-height: none; overflow: visible; padding-right: 0; }
  .stk__map { height: 36rem; }
  .stk__title { font-size: 2.6rem; }
  .template-name--contact .main-page-title,
  .page--faq .main-page-title { font-size: 2.6rem; }
}


/*-------------- TRUNK SHOWS PAGE ------------------*/

.template-name--trunk-shows .multicolumn-card {
  border: .25px solid #7d7d7b !important;
  background: transparent !important;
  }
.template-name--trunk-shows .multicolumn .title,
.template-name--trunk-shows .rich-text__heading {font-size: 1.8em; text-align: center;}

.template-name--trunk-shows .multicolumn-card h3 {
    font-family: "commuters-sans", sans-serif !important; 
    font-weight: 400 !important;
    text-transform: uppercase;
    letter-spacing: 0.1em !important;
    font-size: 11px;
    }


/*-------------- BREADCRUMBS ------------------*/

  .breadcrumbs {margin: 0 0 10px;}

  .breadcrumbs__list {
    list-style-type: none;
    margin: 0;
    padding: 0;
  }

  .breadcrumbs__item {
    display: inline-block;
    font-family: "commuters-sans", sans-serif !important; 
    font-weight: 400 !important;
    text-transform: uppercase;
    letter-spacing: 0.1em !important;
    font-size: 10px;
  }

  .breadcrumbs__item:not(:last-child):after {
    content: '>';
    display: inline-block;
    position: relative;
    vertical-align: middle;
    padding: 0 5px;
  }

  .breadcrumbs__link {text-decoration: underline; color: #000;}

  .breadcrumbs__link[aria-current="page"] {
    color: inherit;
    font-weight: normal;
    text-decoration: none;
  }

  .breadcrumbs__link[aria-current="page"]:hover,
  .breadcrumbs__link[aria-current="page"]:focus {
    text-decoration: underline;
  }


/* ---- TABLE ------- */

table:not([class]) {width: 100%;}

table strong {    
  display: inline-block;
    font-family: "commuters-sans", sans-serif !important; 
    font-weight: 400 !important;
    text-transform: uppercase;
    letter-spacing: 0.1em !important;
    font-size: 12px;
  }

table:not([class]) td, table:not([class]) th {
    padding: 0 5px;
    border-bottom: .25px solid #7d7d7b;
    text-align: center;
    }

/* ---- POLICY PAGES ------- */
.shopify-policy__container {
    max-width: 760px !Important;
    margin: 0 auto;
  padding: 36px 20px 90px 20px !important;
}

.shopify-policy__container .shopify-policy__title h1 {
    font-size: 1.8em;
    text-align: center;
}

#Details-1-template--16944978886845__product-grid,
#Details-Mobile-1-template--16944978886845__product-grid {display: none;}


.jc-logo, .mc-logo, .aw-logo {
  display: inline-block; 
  background-size: auto 30px; 
  background-position: center; 
  background-repeat: no-repeat;
  width: 30px; height: 30px; 
  padding: 0px; 
  }

.jc-logo {background-image: url('/cdn/shop/files/4_29001a4d-6493-4c93-9c8a-8a0f7dd6fe0d.png?v=1723624643');}
.mc-logo {background-image: url('/cdn/shop/files/3_a5c823ad-76ed-432f-94b7-58f5449aaf62.png?v=1723624643');}
.aw-logo {background-image: url('/cdn/shop/files/2_b7061b2b-a8f8-4d69-8356-f7b29626b1dd.png?v=1723624642');}


#simple_store_finder__contentyktwpqrx {margin: 0 !important;}

.title-bridal-gowns-new-zealand-designer-wedding-dresses-jessica-couture #Details-3-template--16650557391037__product-grid {display: none;}


/* =========================================================
   HOMEPAGE NAV — desktop (Brand / Shop / Explore + Appointments)
   Gentle Monster: sticky bar that is transparent/white over the hero
   and frosted-glass + dark once scrolled. Dropdowns are vertical
   single-column flyouts aligned to the content margin, fading down,
   with frost ONLY when scrolled. Panels render OUTSIDE the inverted
   .header-wrapper so backdrop-filter works.
   Scoped to .jc-nav + min-width 990px.
   ========================================================= */
@media screen and (min-width: 990px) {

  /* Show custom nav, hide hamburger, keep logo centered, +20px side padding */
  .jc-nav header-drawer { display: none !important; }
  .jc-nav .header__inline-menu.header__home-nav { display: flex !important; align-items: center; }
  .jc-nav .header__heading,
  .jc-nav .header__heading-link { grid-area: heading !important; justify-self: center !important; }
  .jc-nav .header { padding-left: calc(3rem + 20px) !important; padding-right: calc(3rem + 20px) !important; background: transparent !important; }
  .jc-nav .header__inline-menu,
  .jc-nav .header__icons { min-width: 0; }

  /* ---- Sticky bar + scroll state (frost only when scrolled) ---- */
  .jc-nav .header-wrapper {
    position: fixed; top: 0; left: 0; width: 100%;
    z-index: 59;                       /* above the frosted surface (58) */
    transition: background-color .25s ease;   /* NOT filter — animating invert() flashes a hue */
  }
  /* The bar is transparent in BOTH states — the single .home-nav__frost element
     behind it (z 58) provides the frosted look when scrolled, so there is no
     seam between the bar and the dropdown. */
  body.jc-nav:not(.home-nav-scrolled) .header-wrapper {
    filter: invert(100%); background: transparent;
  }
  body.jc-nav.home-nav-scrolled .header-wrapper {
    filter: none; background: transparent;
  }
  /* Neutralise the theme's .header-change opaque white (#fcfef9 !important). */
  body.jc-nav .header-wrapper.header-change {
    background: transparent !important;
    filter: none !important;
  }

  /* ---- Triggers (left) ---- */
  .header__home-nav .home-nav__list { display: flex; gap: 2.8rem; list-style: none; margin: 0; padding: 0; }
  .header__home-nav .home-nav__trigger {
    display: inline-flex; align-items: center;
    font-family: "commuters-sans", sans-serif;
    text-transform: none; letter-spacing: 0.04em; font-size: 13px; line-height: 1;
    color: currentColor; background: none; border: 0;
    cursor: pointer; padding: 8px 0; white-space: nowrap;
    text-decoration: none; position: relative;
  }
  /* Animated "expand-out" underline for the three main triggers (Labels/Shop/Explore):
     the ::after scales from the centre on hover, and stays out while the panel is open
     (.is-active). currentColor keeps it in step with the white→grey scroll states. */
  .header__home-nav .home-nav__trigger::after {
    content: ""; position: absolute; left: 0; right: 0; bottom: 4px;
    height: 1px; background: currentColor;
    transform: scaleX(0); transform-origin: center;
    transition: transform .3s cubic-bezier(.22, 1, .36, 1); pointer-events: none;
  }
  .header__home-nav .home-nav__trigger:hover::after,
  .header__home-nav .home-nav__trigger.is-active::after { transform: scaleX(1); }

  /* ---- Right side: inline CTAs (wide) vs Appointments dropdown (narrow) ---- */
  .home-nav__cta { display: flex; align-items: center; gap: 2.2rem; margin-right: 1.6rem; }
  .home-nav__cta-link {
    font-family: "commuters-sans", sans-serif;
    font-size: 13px; letter-spacing: .04em; text-decoration: none; color: currentColor;
    border: 0; background: none; padding: 0; white-space: nowrap;
  }
  .home-nav__cta-link:hover { text-decoration: underline; text-underline-offset: 3px; }

  /* ---- ONE frosted surface that covers the bar row + the dropdown (no seam).
     Clips its content and animates height to unroll the menu downward. ---- */
  .jc-nav .home-nav__frost {
    position: fixed; top: 0; left: 0; right: 0;
    box-sizing: border-box;
    padding-top: var(--nav-height, 72px);
    height: var(--home-nav-frost-h, var(--nav-height, 72px));
    overflow: hidden;
    z-index: 58;
    pointer-events: none;
    background: transparent;
    transition: height .38s cubic-bezier(.22, 1, .36, 1), background .25s ease;
  }
  .jc-nav .home-nav__frost.is-open { pointer-events: auto; }
  body.jc-nav.home-nav-scrolled .home-nav__frost,
  body.jc-nav.search-open .home-nav__frost {
    background: rgba(255, 255, 255, 0.70);
    -webkit-backdrop-filter: blur(18px) saturate(1.1);
    backdrop-filter: blur(18px) saturate(1.1);
    box-shadow: 0 24px 40px -34px rgba(0, 0, 0, 0.28);
  }

  /* Panels: in-flow, transparent (frost owns the bg), full-width with a narrow
     inner column offset under the trigger (offset set in JS). */
  .jc-nav .home-nav__panel {
    display: flex;
    padding: 0.3rem 0 2.8rem;
    background: transparent;
  }
  .jc-nav .home-nav__panel[hidden] { display: none; }
  .jc-nav .home-nav__panel-inner {
    display: flex; flex-direction: column;
    min-width: 180px; max-width: 280px;
  }

  /* Top state: white text over the hero (NOT while the search overlay's light frost is up) */
  body.jc-nav:not(.home-nav-scrolled):not(.search-open) .home-nav__panel .home-nav__group-label { color: #fff; }
  body.jc-nav:not(.home-nav-scrolled):not(.search-open) .home-nav__panel a,
  body.jc-nav:not(.home-nav-scrolled):not(.search-open) .home-nav__panel a:link,
  body.jc-nav:not(.home-nav-scrolled):not(.search-open) .home-nav__panel a:visited { color: rgba(255, 255, 255, 0.85); }
  body.jc-nav:not(.home-nav-scrolled):not(.search-open) .home-nav__panel a:hover { color: #fff; }

  /* Scrolled state — and search-open (white text would ghost into the search frost): dark text
     (frosted bg is provided by .home-nav__frost) */
  body.jc-nav.home-nav-scrolled .home-nav__panel .home-nav__group-label,
  body.jc-nav.search-open .home-nav__panel .home-nav__group-label { color: #000; }
  body.jc-nav.home-nav-scrolled .home-nav__panel a,
  body.jc-nav.home-nav-scrolled .home-nav__panel a:link,
  body.jc-nav.home-nav-scrolled .home-nav__panel a:visited,
  body.jc-nav.search-open .home-nav__panel a,
  body.jc-nav.search-open .home-nav__panel a:link,
  body.jc-nav.search-open .home-nav__panel a:visited { color: #5f5f5f; }
  body.jc-nav.home-nav-scrolled .home-nav__panel a:hover,
  body.jc-nav.search-open .home-nav__panel a:hover { color: #000; }
  body.jc-nav.home-nav-scrolled .home-nav__viewall,
  body.jc-nav.home-nav-scrolled .home-nav__viewall:visited,
  body.jc-nav.search-open .home-nav__viewall,
  body.jc-nav.search-open .home-nav__viewall:visited { color: #000; }

  /* Shared panel typography */
  .jc-nav .home-nav__group { margin-bottom: 1.8rem; }
  .jc-nav .home-nav__group:last-child { margin-bottom: 0; }
  .jc-nav .home-nav__group-label {
    display: block; font-family: "commuters-sans", sans-serif;
    font-size: 12px; letter-spacing: .08em; margin-bottom: 1rem;
  }
  .jc-nav .home-nav__links { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: .8rem; }
  .jc-nav .home-nav__links a {
    font-family: "commuters-sans", sans-serif;
    font-size: 13px; line-height: 1.3; text-decoration: none; transition: color .15s ease;
  }
  .jc-nav .home-nav__links a:hover { text-decoration: underline; text-underline-offset: 3px; }

  /* Shop: columns laid side by side (Mook's layout). Each column's parent header
     sits on the same top row; children expand downward within their own column,
     so neighbours are reached by moving RIGHT (headers never move) — no
     collapse-on-scroll-down close. Plain links + hover-expand parents. */
  #home-nav-panel-shop .home-nav__panel-inner { max-width: none; }
  .jc-nav .home-nav__cols { display: flex; align-items: flex-start; gap: 3rem; }
  /* Each column hugs its TOP word so the gap between column headings is uniform.
     Secondary items (children / col-1's lower links) are constrained to the column
     width and spill right (see below) so they don't widen it. */
  .jc-nav .home-nav__col { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: .9rem; flex: 0 0 auto; width: max-content; }
  .jc-nav .home-nav__item { display: flex; flex-direction: column; }
  /* Col 1's links below "All dresses" must not widen the column past it. */
  .jc-nav .home-nav__col > li:not(:first-child) { width: 0; min-width: 100%; overflow-x: visible; white-space: nowrap; }
  .jc-nav .home-nav__item > a,
  .jc-nav .home-nav__parent-label {
    font-family: "commuters-sans", sans-serif;
    font-size: 13px; line-height: 1.3; text-decoration: none; transition: color .15s ease, font-weight .15s ease;
  }
  .jc-nav .home-nav__item > a:hover { text-decoration: underline; text-underline-offset: 3px; }
  /* Parent toggle: borderless button. On hover/expanded it gets BOTH bold and an
     animated expand-out underline (below) — that combo marks it as a parent dropdown;
     plain links keep their plain instant underline. */
  .jc-nav .home-nav__parent-label {
    appearance: none; -webkit-appearance: none; background: none; border: 0;
    margin: 0; padding: 0; text-align: left; cursor: pointer; white-space: nowrap;
    position: relative; align-self: flex-start;
  }
  /* Children: collapsed (height 0) by default; JS sets height to scrollHeight to
     unroll, and the frost surface follows frame-by-frame (see trackFrost). */
  .jc-nav .home-nav__sub {
    list-style: none; box-sizing: border-box;
    margin: 0; padding: 0;
    display: flex; flex-direction: column; gap: .55rem;
    /* Don't widen the column past its label; items stay one line and spill right.
       overflow-y clips for the height unroll; overflow-x stays visible for the spill. */
    width: 0; min-width: 100%; white-space: nowrap;
    height: 0; overflow-x: visible; overflow-y: clip; opacity: 0;
    transition: height .40s cubic-bezier(.22, 1, .36, 1), opacity .26s ease, padding-top .40s cubic-bezier(.22, 1, .36, 1);
  }
  .jc-nav .home-nav__parent.is-expanded .home-nav__sub { opacity: 1; padding-top: .7rem; }
  .jc-nav .home-nav__sub li { padding-left: .1rem; }
  .jc-nav .home-nav__sub a {
    font-family: "commuters-sans", sans-serif;
    font-size: 13px; line-height: 1.3; text-decoration: none; transition: color .15s ease;
  }
  .jc-nav .home-nav__sub a:hover { text-decoration: underline; text-underline-offset: 3px; }

  /* Color states for parents + child bullets (mirror the existing a-color rules).
     A parent whose children are open (.is-expanded) gets the FULL bright hover colour —
     not just on re-hover — so it reads as the active parent (bold + bright + underline)
     the whole time its dropdown is showing. */
  body.jc-nav:not(.home-nav-scrolled):not(.search-open) .home-nav__parent-label,
  body.jc-nav:not(.home-nav-scrolled):not(.search-open) .home-nav__sub { color: rgba(255, 255, 255, 0.85); }
  body.jc-nav:not(.home-nav-scrolled):not(.search-open) .home-nav__parent-label:hover,
  body.jc-nav:not(.home-nav-scrolled):not(.search-open) .home-nav__parent.is-expanded > .home-nav__parent-label { color: #fff; }
  body.jc-nav.home-nav-scrolled .home-nav__parent-label,
  body.jc-nav.home-nav-scrolled .home-nav__sub,
  body.jc-nav.search-open .home-nav__parent-label,
  body.jc-nav.search-open .home-nav__sub { color: #5f5f5f; }
  body.jc-nav.home-nav-scrolled .home-nav__parent-label:hover,
  body.jc-nav.home-nav-scrolled .home-nav__parent.is-expanded > .home-nav__parent-label,
  body.jc-nav.search-open .home-nav__parent-label:hover,
  body.jc-nav.search-open .home-nav__parent.is-expanded > .home-nav__parent-label { color: #000; }

  /* Bolder subheading on hover / while its accordion is open (Jessica feedback). */
  .jc-nav .home-nav__parent-label:hover,
  .jc-nav .home-nav__parent.is-expanded > .home-nav__parent-label { font-weight: 600; }

  /* Animated "expand-out" underline — ON THE PARENT DROPDOWN LABELS ONLY. Combined
     with the bold above, it marks them as parent dropdowns; all other nav links keep
     their plain instant underline. The ::after scales from the centre; currentColor
     keeps it in step with the white-over-hero → grey-when-scrolled colour states. */
  .jc-nav .home-nav__parent-label::after {
    content: ""; position: absolute; left: 0; right: 0; bottom: -3px;
    height: 1px; background: currentColor;
    transform: scaleX(0); transform-origin: center;
    transition: transform .3s cubic-bezier(.22, 1, .36, 1); pointer-events: none;
  }
  .jc-nav .home-nav__parent-label:hover::after,
  .jc-nav .home-nav__parent.is-expanded > .home-nav__parent-label::after { transform: scaleX(1); }
}

/* =========================================================
   HOMEPAGE SEARCH OVERLAY — Gentle Monster full-page frosted search.
   Frosted white takeover that fades + slides down; logo + nav bar stay on
   top (overlay z 57 < bar z 59). Centred search form, Best Sellers (5),
   Recently Viewed (localStorage, removable), close X top-right.
   ========================================================= */
.search-overlay {
  position: fixed; inset: 0;
  z-index: 57;
  background: rgba(255, 255, 255, 0.72);
  -webkit-backdrop-filter: blur(20px) saturate(1.1);
  backdrop-filter: blur(20px) saturate(1.1);
  overflow-y: auto;
  opacity: 0; visibility: hidden;
  transition: opacity .38s cubic-bezier(.22, 1, .36, 1), visibility .38s;
}
/* All overlay text matches the navigation typography (override theme heading font) */
.search-overlay, .search-overlay * { font-family: "commuters-sans", sans-serif !important; }

/* Force the bar to its dark/frosted state while search is open (the overlay's
   own frost sits behind the transparent bar; just disable the white invert so
   the logo + nav text are readable). */
body.jc-nav.search-open .header-wrapper,
body.jc-nav.search-open .header-wrapper.header-change {
  filter: none !important;
  background: transparent !important;
}
.search-overlay.is-open { opacity: 1; visibility: visible; }
.search-overlay[hidden] { display: none; }
body.search-open { overflow: hidden; }

.search-overlay__inner {
  max-width: 1180px; margin: 0 auto;
  padding: calc(var(--nav-height, 72px) + 4.4rem) 4rem 6rem;
  transform: translateY(-16px);
  transition: transform .38s cubic-bezier(.22, 1, .36, 1);
}
.search-overlay.is-open .search-overlay__inner { transform: none; }

.search-overlay__close {
  position: fixed;
  top: calc(var(--nav-height, 72px) + 1.4rem);
  right: 3rem;
  width: 3.6rem; height: 3.6rem;
  display: inline-flex; align-items: center; justify-content: center;
  background: none; border: 0; cursor: pointer; padding: 0;
  color: #1a1a1a; border-radius: 999px;
  transition: background-color .18s ease, transform .18s ease;
}
.search-overlay__close:hover { background: rgba(0, 0, 0, 0.06); }
.search-overlay__close:active { transform: scale(.94); }
.search-overlay__close .icon { width: 1.6rem; height: 1.6rem; }

.search-overlay__form {
  display: flex; align-items: center; gap: 1.2rem;
  max-width: 680px; margin: 0 auto 4.4rem;
  border-bottom: 1px solid rgba(0, 0, 0, 0.28);
}
.search-overlay__form-icon { width: 1.9rem; height: 1.9rem; color: #1a1a1a; flex: 0 0 auto; }
.search-overlay__input {
  flex: 1 1 auto; min-width: 0;
  background: transparent; border: 0; outline: none;
  font-family: "commuters-sans", sans-serif;
  font-size: 1.8rem; letter-spacing: .01em; color: #1a1a1a;
  padding: 1.2rem 0;
}
.search-overlay__input::placeholder { color: rgba(0, 0, 0, 0.4); }

.search-overlay__section { margin-bottom: 3.6rem; }
.search-overlay__heading {
  font-family: "commuters-sans", sans-serif;
  font-size: 12px; letter-spacing: .08em; text-transform: uppercase;
  color: #1a1a1a; margin: 0 0 1.6rem;
}
/* Recently Viewed heading row: title + "Clear all" underline button. */
.search-overlay__section-head {
  display: flex; align-items: baseline; justify-content: space-between;
  gap: 1.6rem; margin-bottom: 1.6rem;
}
.search-overlay__section-head .search-overlay__heading { margin-bottom: 0; }
.search-overlay__clear {
  font-family: "commuters-sans", sans-serif;
  font-size: 12px; letter-spacing: .08em; text-transform: uppercase;
  color: #1a1a1a; background: none; border: 0; padding: 0; cursor: pointer;
  line-height: 1.2; border-bottom: 1px solid currentColor;
  transition: opacity .15s ease;
}
.search-overlay__clear:hover { opacity: .55; }
.search-overlay__grid {
  display: grid; grid-template-columns: repeat(5, 1fr); gap: 1.8rem;
}
.search-overlay__grid--results { grid-template-columns: repeat(4, 1fr); gap: 2rem; }

/* Best Sellers: horizontal drag carousel (~10 cards) */
.search-overlay__carousel {
  display: flex; gap: 1.8rem; overflow-x: auto; overscroll-behavior-x: contain;
  scroll-snap-type: x proximity; cursor: grab; padding-bottom: .6rem;
  scrollbar-width: none;
}
.search-overlay__carousel::-webkit-scrollbar { display: none; }
.search-overlay__carousel.is-dragging { cursor: grabbing; scroll-snap-type: none; }
.search-overlay__carousel .search-card { flex: 0 0 200px; scroll-snap-align: start; }
.search-overlay__carousel .search-card * { -webkit-user-select: none; user-select: none; -webkit-user-drag: none; }

.search-overlay__empty {
  text-align: center; color: #888;
  font-family: "commuters-sans", sans-serif; font-size: 13px; margin: 0;
}

.search-card, .search-card__link {
  position: relative; display: flex; flex-direction: column; gap: .6rem;
  text-decoration: none; color: #1a1a1a;
}
.search-card__media {
  display: block; overflow: hidden; background: rgba(0, 0, 0, 0.04);
  aspect-ratio: 3 / 4;
}
.search-card__media img {
  width: 100%; height: 100%; object-fit: cover; display: block;
  transition: transform .5s cubic-bezier(.22, 1, .36, 1);
}
.search-card:hover .search-card__media img,
.search-card__link:hover .search-card__media img { transform: scale(1.04); }
.search-card__ph { display: block; width: 100%; height: 100%; }
.search-card__title {
  font-family: "commuters-sans", sans-serif; font-size: 13px; line-height: 1.3;
}
.search-card__remove {
  position: absolute; top: .6rem; right: .6rem;
  width: 2.4rem; height: 2.4rem; padding: 0;
  display: inline-flex; align-items: center; justify-content: center;
  background: rgba(255, 255, 255, 0.85); border: 0; border-radius: 999px;
  cursor: pointer; color: #1a1a1a;
  box-shadow: 0 6px 14px -8px rgba(0, 0, 0, 0.4);
  transition: background-color .18s ease, transform .18s ease;
}
.search-card__remove:hover { background: #fff; transform: scale(1.06); }
.search-card__remove .icon { width: 1.1rem; height: 1.1rem; }

@media screen and (max-width: 749px) {
  .search-overlay__grid { grid-template-columns: repeat(2, 1fr); }
  .search-overlay__inner { padding: calc(var(--nav-height, 64px) + 3rem) 2rem 4rem; }
  /* Mobile: close on the LEFT (where the hamburger is) */
  .search-overlay__close { left: 1.5rem; right: auto; }
}

/* The mobile-left search + close buttons only exist on the homepage; hide on desktop */
@media screen and (min-width: 990px) {
  .jc-nav .header__mobile-search,
  .jc-nav .header__mobile-searchclose { display: none !important; }
  .jc-nav .header__mobile-left { display: contents; }
}

/* =========================================================
   HOMEPAGE MOBILE NAV (<990px) — hamburger + search left, logo centre,
   profile + cart right; condensed single-level drawer (Gentle Monster).
   ========================================================= */
@media screen and (max-width: 989px) {
  /* Left cluster: hamburger + search together in the left grid area */
  .jc-nav .header__mobile-left {
    grid-area: left-icons;
    display: flex; align-items: center; gap: 1.6rem;
    justify-self: start; min-width: 0;   /* let the 1fr side track resolve to exactly 1fr (no auto-min bulge) so the logo stays viewport-centred */
  }
  .jc-nav .header__mobile-left header-drawer { display: block; }
  .jc-nav .header__mobile-search {
    display: inline-flex; align-items: center; justify-content: center;
    background: none; border: 0; padding: 0; cursor: pointer; color: currentColor;
  }

  /* Equal VISUAL size. search/account fill their viewBox (reference ~1.9rem);
     cart's glyph is only ~15/24 of its box, so it needs a larger box to match. */
  .jc-nav .header__mobile-search .icon,
  .jc-nav .header__icon--account .icon,
  .jc-nav .header__icon--account svg { width: 1.9rem !important; height: 1.9rem !important; }
  /* Close crosses (search-close) match the menu ✕ and cart ✕ (~1.7rem) */
  .jc-nav .header__mobile-searchclose .icon { width: 1.7rem !important; height: 1.7rem !important; }
  .jc-nav #cart-icon-bubble .icon,
  .jc-nav #cart-icon-bubble svg { width: 2.7rem !important; height: 2.7rem !important; }

  /* The desktop frost element is unstyled on mobile and reserves 65px in flow
     (the white gap above the hero). It is only used by the desktop dropdowns. */
  .jc-nav .home-nav__frost { display: none !important; }

  /* Animated 2-bar menu icon (homepage): two lines that rotate into an ✕ when
     the drawer opens — quick + minimal (Gentle Monster). The ✕ span (~1.7rem)
     matches the search-close and cart-close crosses. */
  .jc-nav .drawer-burger {
    position: relative; display: inline-block;
    width: 1.7rem; height: 1.1rem; color: currentColor;
  }
  /* Both bars sit at top:50% PERMANENTLY and the closed spread is expressed as a
     translate, so `transform` is the only property that ever changes. Previously
     the bars lived at top 25%/75% and the open state moved them to 50% — but the
     transition list covers transform only, so `top` snapped to centre on frame 0
     and the rotation then played from the already-jumped position: a visible pop
     at the exact moment the panel started sliding. ±2.75px reproduces the old
     25%/75% split of the 1.1rem (11px) box, so the resting icon is unchanged. */
  .jc-nav .drawer-burger__bar {
    position: absolute; left: 0; width: 100%; height: 1.5px;
    background: currentColor; border-radius: 2px;
    top: 50%;
    transition: transform var(--duration-drawer) var(--ease-drawer);
  }
  .jc-nav .drawer-burger__bar:nth-child(1) { transform: translateY(calc(-50% - 2.75px)); }
  .jc-nav .drawer-burger__bar:nth-child(2) { transform: translateY(calc(-50% + 2.75px)); }
  /* Cross state keys off .menu-opening, NOT [open]: Dawn removes .menu-opening synchronously on close
     but only strips [open] ~200ms later inside closeAnimation (+ a phone repaint stall on the :has([open])
     mask), so an [open]-driven icon lagged ~1s reverting. .menu-opening flips the icon back instantly. */
  .jc-nav .menu-drawer-container.menu-opening .drawer-burger__bar:nth-child(1) { transform: translateY(-50%) rotate(45deg); }
  .jc-nav .menu-drawer-container.menu-opening .drawer-burger__bar:nth-child(2) { transform: translateY(-50%) rotate(-45deg); }

  /* When the SEARCH drawer is open: the ✕ replaces the hamburger (same spot),
     the search icon disappears, leaving only ✕ · Logo · Profile · Bag (GM). */
  .jc-nav .header__mobile-searchclose {
    display: none; align-items: center; justify-content: center;
    background: none; border: 0; padding: 0; cursor: pointer; color: currentColor;
  }
  body.jc-nav.search-open .header__mobile-left header-drawer { display: none; }
  body.jc-nav.search-open .header__mobile-search { display: none; }
  body.jc-nav.search-open .header__mobile-searchclose { display: inline-flex; }
  body.jc-nav.search-open .search-overlay__close { display: none; }

  /* Kill the desktop-only injections that were breaking the bar */
  .jc-nav .home-nav__cta { display: none !important; }
  .jc-nav .desktop-localization-wrapper { display: none !important; }

  /* Right cluster: show profile + cart; the right-side search moves to the left */
  .jc-nav .header__icons .header__icon--search { display: none !important; }
  .jc-nav .header__icon--account { display: inline-flex !important; }
  /* Heart/favourites hidden on mobile — it unbalanced the right cluster and pushed the centred logo left
     (wishlist stays reachable from product pages). */
  .jc-nav .header__icon--favourites { display: none !important; }
  .jc-nav .header__icons { min-width: 0; }   /* symmetric side track → logo stays viewport-centred */

  /* Centre the logo */
  .jc-nav .header__heading,
  .jc-nav .header__heading-link { grid-area: heading; justify-self: center; }

  /* ----- Bar: fixed + frosted (match desktop) -----
     fixed makes .section-header collapse to 0 so the hero is full-bleed (no
     white gap), and keeps the bar above the drawer (z3) and search overlay
     (z57). Transparent + white over the hero at top; frosted + dark scrolled. */
  .jc-nav .header-wrapper {
    position: fixed; top: 0; left: 0; width: 100%; z-index: 59;
    transition: background-color .25s ease;   /* NOT filter — animating invert() flashes a hue */
  }
  body.jc-nav.home-nav-scrolled .header-wrapper,
  body.jc-nav .header-wrapper.header-change {
    filter: none !important;
    background: rgba(255, 255, 255, 0.72) !important;
    -webkit-backdrop-filter: blur(18px) saturate(1.1);
    backdrop-filter: blur(18px) saturate(1.1);
  }

  /* ----- Condensed drawer panel (homepage) -----
     The header-wrapper is invert(100%) over the hero, which would invert the
     drawer (white->black). While the drawer is open, disable the invert so the
     panel shows true colours. */
  body.jc-nav .header-wrapper:has(.menu-drawer-container[open]) {
    filter: none !important;
  }
  /* Full-screen drawer (mobile AND tablet) — fills the whole viewport, no gap
     underneath, and overrides Dawn's 40rem side panel at >=750px. */
  .jc-nav .menu-drawer {
    filter: none !important; background: #fff;
    top: 0; margin-top: 0 !important; height: 100vh; height: 100dvh;
    width: 100% !important; border: 0 !important;
  }
  /* The full-screen drawer is positioned (z3), so it paints above static bar
     icons. Lift the bar controls above it so they stay visible + clickable while
     open. Only NON-ancestors of the drawer may be positioned here — making
     .header__mobile-left positioned would shrink the drawer to that cluster. */
  /* ⚠️ BOTH logo selectors are required. header.liquid wraps the logo anchor in
     <h1 class="header__heading"> ONLY on the homepage (request.page_type ==
     'index' — one h1 per page). On every other page .header__heading does not
     exist, so listing it alone left the bare .header__heading-link unpositioned
     at auto z-index and the white mask below (z4) painted straight over the
     logo — it vanished the moment the drawer opened on product/collection/about.
     Keep this pair in sync, exactly like the centring rule above. */
  .jc-nav .menu-drawer-container > summary,
  .jc-nav .header__mobile-search,
  .jc-nav .header__mobile-searchclose,
  .jc-nav .header__heading,
  .jc-nav .header__heading-link,
  .jc-nav .header__icons { position: relative; z-index: 5; }
  /* Mask the nav-bar strip with SOLID white while the drawer is open, so the
     drawer's own scrolling list (a DESCENDANT of .header-wrapper, same as the
     bar icons above) can't show through underneath the ✕/search/logo/account
     icons once the user scrolls it. A background-color on .header-wrapper
     itself can't do this — an element's own background always paints behind
     its descendants regardless of opacity, and the drawer IS a descendant here
     (nested under .header__mobile-left). A z-index-ranked ::before, sized to
     the bar and placed between the drawer (z3) and the icons (z5), can.

     The mask is ALWAYS in the box tree and only its opacity changes, keyed on
     .menu-opening so it fades in lockstep with the panel in both directions.
     It used to be generated by :has([open]) — a box-tree insertion with no
     transition, and [open] is set synchronously by the native <details> toggle
     while the panel's slide waits a tick, so the white bar flashed in a frame
     BEFORE anything moved. pointer-events:none is mandatory now that it exists
     while closed, or it would swallow every tap on the bar. */
  body.jc-nav .header-wrapper::before {
    content: ""; position: absolute; inset: 0; z-index: 4; background: #fff;
    opacity: 0; pointer-events: none;
    transition: opacity var(--duration-drawer) var(--ease-drawer);
  }
  body.jc-nav .header-wrapper:has(.menu-drawer-container.menu-opening)::before {
    opacity: 1;
  }

  /* Panel slide. component-menu-drawer.css is loaded from header.liquid — i.e.
     AFTER this file — so its `.js details[open] > .menu-drawer` (0-2-1) beats an
     equal-specificity override. body.jc-nav … (0-3-1) wins on specificity.
     Keep this duration and --duration-drawer identical; global.js reads the token. */
  body.jc-nav details[open] > .menu-drawer {
    transition: transform var(--duration-drawer) var(--ease-drawer),
                visibility var(--duration-drawer) var(--ease-drawer);
    will-change: transform;
  }
  .jc-nav .mobile-menu {
    display: flex; flex-direction: column;
    min-height: 100vh; min-height: 100dvh;
    max-height: 100vh; max-height: 100dvh;
    overflow-y: auto; overscroll-behavior: contain; -webkit-overflow-scrolling: touch;
    padding: calc(var(--nav-height, 64px) + 2rem) 2.4rem 2.4rem;
    background: #fff;
  }
  .jc-nav .mobile-menu__nav { display: flex; flex-direction: column; gap: 1.8rem; }
  .jc-nav .mobile-menu__group { display: flex; flex-direction: column; gap: .7rem; }
  .jc-nav .mobile-menu__label {
    font-family: "commuters-sans", sans-serif;
    font-size: 11px; letter-spacing: .08em; text-transform: uppercase; color: #9a9a9a;
    margin-bottom: .2rem;
  }
  .jc-nav .mobile-menu__nav a {
    font-family: "commuters-sans", sans-serif;
    font-size: 1.7rem; line-height: 1.2; color: #1a1a1a; text-decoration: none;
  }
  .jc-nav .mobile-menu__nav a:active { opacity: .6; }

  /* ----- Shop accordions (nav-shop parents with children) -----
     Parent rows read exactly like the plain links; the Jessica diamond
     (drawer-open / About-checkpoint motif) marks expandability — outline
     closed, filled open. Children expand via grid-rows (no JS measuring)
     with the nav's signature easing, and stagger-rise as they reveal. */
  .jc-nav .mobile-menu__acc { display: flex; flex-direction: column; }
  .jc-nav .mobile-menu__parent {
    display: flex; align-items: center; gap: 1.1rem;
    background: none; border: 0; padding: 0; cursor: pointer; text-align: left;
    font-family: "commuters-sans", sans-serif;
    font-size: 1.7rem; line-height: 1.2; color: #1a1a1a;
  }
  .jc-nav .mobile-menu__parent:active { opacity: .6; }
  .jc-nav .mobile-menu__dia {
    width: 8px; height: 8px; flex: none;
    border: 1px solid #1a1a1a; background: transparent;
    transform: rotate(45deg);
    transition: background-color .25s ease;
  }
  .jc-nav .mobile-menu__acc.is-open .mobile-menu__dia { background: #1a1a1a; }
  /* grid-template-rows stays — a row/height reveal genuinely changes layout, so
     no technique makes this compositor-only. What we can do is bound the cost:
     `contain: layout` stops the browser recalculating the subtree's internals
     against the rest of the scrolling drawer column on every frame, and matching
     --duration-drawer keeps it coherent with the panel it lives in. */
  .jc-nav .mobile-menu__subwrap {
    display: grid; grid-template-rows: 0fr;
    contain: layout;
    transition: grid-template-rows var(--duration-drawer) var(--ease-drawer);
  }
  .jc-nav .mobile-menu__acc.is-open .mobile-menu__subwrap { grid-template-rows: 1fr; }
  .jc-nav .mobile-menu__sub {
    overflow: hidden; min-height: 0;
    margin: 0; padding: 0 0 0 1.2rem; list-style: none;
    display: flex; flex-direction: column;
  }
  .jc-nav .mobile-menu__sub li { padding-top: .7rem; }
  /* Stagger is retimed so the last link lands exactly WITH the row (240ms + 80ms
     max delay = 320ms = --duration-drawer). It used to run 300ms + up to 200ms
     of delay = ~500ms against a 450ms row, so the links were still arriving
     after the accordion had finished opening — the tail that read as lag. */
  .jc-nav .mobile-menu__sub a {
    opacity: 0; display: inline-block; transform: translateY(6px);
    transition: opacity .24s ease, transform .24s var(--ease-drawer);
  }
  .jc-nav .mobile-menu__acc.is-open .mobile-menu__sub a { opacity: 1; transform: none; }
  .jc-nav .mobile-menu__acc.is-open .mobile-menu__sub li:nth-child(2) a { transition-delay: .02s; }
  .jc-nav .mobile-menu__acc.is-open .mobile-menu__sub li:nth-child(3) a { transition-delay: .04s; }
  .jc-nav .mobile-menu__acc.is-open .mobile-menu__sub li:nth-child(4) a { transition-delay: .06s; }
  .jc-nav .mobile-menu__acc.is-open .mobile-menu__sub li:nth-child(n+5) a { transition-delay: .08s; }

  .jc-nav .mobile-menu__cta {
    margin-top: auto; display: flex; flex-direction: column; gap: 1rem;
    padding-top: 2.4rem;
  }
  .jc-nav .mobile-menu__cta a {
    font-family: "commuters-sans", sans-serif;
    font-size: 1.6rem; color: #1a1a1a; text-decoration: none;
  }
  .jc-nav .mobile-menu__cta a:active { opacity: .6; }

  @media (prefers-reduced-motion: reduce) {
    .jc-nav .mobile-menu__subwrap,
    .jc-nav .mobile-menu__sub a,
    .jc-nav .mobile-menu__dia { transition: none; }
    .jc-nav .mobile-menu__sub a { transform: none; }
  }
}

/* Keep all close crosses consistent: cart drawer ✕ matches the search ✕ and
   the menu ✕ (~1.7rem) instead of Dawn's larger 2.4rem. */
.drawer__close svg { width: 1.7rem !important; height: 1.7rem !important; }

/* Inner pages (no hero) have a fixed nav bar, so push their content below it.
   Homepage is excluded — its hero sits behind the bar. --nav-height is set by JS. */
body.jc-nav:not(.template-index) #MainContent { padding-top: var(--nav-height, 65px); }

/* ============================================================
   JC FOOTER
   ============================================================ */

/* ── Font base: set on container, children inherit ── */
.jc-footer {
  font-family: "commuters-sans", sans-serif;
  font-size: 13px;
  letter-spacing: 0.04em;
}
/* Only force !important on elements Dawn's stylesheet explicitly overrides */
.jc-footer h2, .jc-footer h3,
.jc-footer button, .jc-footer input {
  font-family: "commuters-sans", sans-serif !important;
  font-size: 13px !important;
  letter-spacing: 0.04em;
}

.jc-footer {
  background: #ffffff;
  border-top: 1px solid rgba(0,0,0,0.08);
}

.jc-footer__inner {
  /* no max-width: the footer always spans edge-to-edge like the header,
     content held by the same --jc-inset on both sides */
  position: relative;
  padding: 48px var(--jc-inset) 92px; /* bottom: 40px offset + 28px icon + 24px breathing */
  /* Grid: brand (logo) | newsletter | links — single row */
  display: grid;
  grid-template-columns: 140px 1fr auto;
  column-gap: 60px;
}

/* ── Brand column (logo) ── */
.jc-footer__brand {
  display: flex;
  flex-direction: column;
}

.jc-footer__logo-link { display: inline-block; line-height: 0; }

.jc-footer__logo {
  width: 80px;
  height: auto;
  display: block;
}

/* ── Social icons: absolute bottom-left, sharing the copyright's baseline ── */
.jc-footer__social {
  position: absolute;
  bottom: 40px;
  left: var(--jc-inset);
  display: flex;
  align-items: center;
  gap: 16px;
}

.jc-footer__social a { display: inline-flex; line-height: 0; opacity: 1; transition: opacity .2s ease; }
.jc-footer__social a:hover { opacity: 0.55; }

.jc-footer__social img {
  width: 28px !important;
  height: 28px !important;
  object-fit: contain;
}

/* Dawn's built-in social icon snippets (tiktok/twitter/snapchat/tumblr/vimeo) render inline <svg>,
   not <img> like the 4 custom badge icons above — size them to match. */
.jc-footer__social svg {
  width: 28px !important;
  height: 28px !important;
  color: #000;
}

/* ── Newsletter column ── */
.jc-footer__newsletter {
  min-width: 0;
  align-self: start;
}

.jc-footer__nl-label {
  font-weight: 400 !important;
  color: #000000;
  margin: 0 0 16px 0;
}

.jc-footer__nl-form { width: 100%; }

.jc-footer__nl-field {
  display: flex;
  align-items: flex-end;
  border-bottom: 1px solid #000000;
  padding-bottom: 8px;
  gap: 12px;
}

/* Floating label wrapper */
.jc-footer__nl-input-wrap {
  position: relative;
  flex: 1;
  min-width: 0;
  padding-top: 18px;
}

.jc-footer__nl-input {
  width: 100%;
  background: transparent;
  border: none;
  outline: none;
  font-weight: 400 !important;
  color: #000000;
  padding: 0;
  display: block;
}

/* Hidden placeholder — needed for :not(:placeholder-shown) trick */
.jc-footer__nl-input::placeholder { color: transparent; }

/* Floating label */
.jc-footer__nl-floatlabel {
  position: absolute;
  left: 0;
  top: 18px;
  pointer-events: none;
  transform-origin: 0 0;
  color: rgba(0, 0, 0, 0.45);
  transition: transform .18s cubic-bezier(.4, 0, .2, 1), color .18s ease;
}

/* Float up on focus or when field has value */
.jc-footer__nl-input:focus ~ .jc-footer__nl-floatlabel,
.jc-footer__nl-input:not(:placeholder-shown) ~ .jc-footer__nl-floatlabel {
  transform: translateY(-18px) scale(0.77);
  color: rgba(0, 0, 0, 0.55);
}

.jc-footer__nl-btn {
  flex: 0 0 auto;
  background: none;
  border: none;
  padding: 0 0 2px 0;
  cursor: pointer;
  display: flex;
  align-items: center;
  color: #000000;
  transition: opacity .2s ease;
}

.jc-footer__nl-btn:hover { opacity: 0.55; }

/* Minimal chevron arrow */
.jc-footer__arrow-icon { display: block; width: 8px !important; height: 14px !important; }

.jc-footer__nl-error { color: #c00; margin: 8px 0 0; }
.jc-footer__nl-success { color: #000; margin: 8px 0 0; }

/* ── Link columns (right column) — content-width columns with EQUAL gaps,
   so the rhythm between Bridal Service / Information / Country reads even
   (equal 1fr boxes looked uneven because the text widths differ) ── */
.jc-footer__links {
  display: grid;
  grid-template-columns: auto auto auto;
  column-gap: clamp(56px, 7vw, 150px);
  align-items: start;
}

.jc-footer__col { display: flex; flex-direction: column; }

.jc-footer__col-heading {
  font-weight: 600 !important;
  color: #000000;
  margin: 0 0 14px 0;
  text-transform: none !important;
}

.jc-footer__col-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.jc-footer__col-list a {
  font-weight: 400 !important;
  color: #000000;
  text-decoration: none;
  transition: opacity .2s ease;
}

.jc-footer__col-list a:hover { opacity: 0.55; }

/* ── Country dropdown (localization-form) ── */
.jc-footer__col--country { position: relative; }

.jc-footer__country-form .disclosure { position: relative; }

.jc-footer__country-form .disclosure__button {
  background: none !important;
  border: none !important;
  padding: 0 !important;
  margin: 0 !important;
  cursor: pointer;
  display: flex;
  align-items: center;
  gap: 6px;
  color: #000000;
  text-align: left;
  text-transform: none !important;
}

.jc-footer__country-form .disclosure__button span {
  text-transform: none !important;
  font-size: 13px !important;
  letter-spacing: 0.04em;
}

.jc-footer__country-form .disclosure__button:hover { opacity: 0.65; }

/* Hide Dawn's caret icon — we don't need it */
.jc-footer__country-form .icon-caret { display: none !important; }

/* Dropdown list — opens upward */
.jc-footer__country-form .disclosure__list-wrapper {
  position: absolute;
  bottom: calc(100% + 8px);
  right: 0;
  left: auto;
  z-index: 50;
  background: #ffffff;
  min-width: 210px;
  max-height: 200px;
  overflow-y: auto;
  box-shadow: 0 -2px 16px rgba(0,0,0,0.08);
  padding: 4px 0;
}

.jc-footer__country-form .disclosure__list {
  list-style: none;
  margin: 0;
  padding: 0;
  max-height: 260px;
  overflow-y: auto;
}

.jc-footer__country-form .disclosure__link {
  display: block;
  padding: 9px 16px;
  color: #000000;
  text-decoration: none;
  white-space: nowrap;
  text-transform: none !important;
  transition: background .15s ease;
}

.jc-footer__country-form .disclosure__link:hover { background: #f7ede3; }

.jc-footer__country-form .disclosure__link--active {
  font-weight: 600 !important;
}

/* ── Copyright — absolutely pinned bottom-right ── */
.jc-footer__copy {
  position: absolute;
  bottom: 40px;
  right: calc(3rem + 20px); /* matches horizontal padding */
  font-weight: 400 !important;
  color: #000000;
  white-space: nowrap;
  margin: 0;
  padding: 0;
}

/* ── Mobile (≤989px) ── */
@media screen and (max-width: 989px) {
  .jc-footer__inner {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: 32px;
    padding: 40px 1.5rem 72px; /* bottom pad for absolute copyright */
  }

  /* Mobile order: logo → newsletter → social → links */
  .jc-footer__brand   { order: 1; align-self: center; }
  .jc-footer__newsletter { order: 2; width: 100%; }
  /* content-width columns spread edge-to-edge — equal visual gaps (same fix as desktop) */
  .jc-footer__links   { order: 4; grid-template-columns: auto auto auto; justify-content: space-between; gap: 0 12px; width: 100%; }

  .jc-footer__logo { width: 90px; }

  /* On mobile, social returns to flex flow (override desktop absolute) */
  .jc-footer__social {
    position: static;
    order: 3;
    bottom: auto;
    left: auto;
    gap: 22px;
    align-self: flex-start;
  }

  .jc-footer__copy {
    bottom: 28px;
    right: 1.5rem;
  }
}

/* ============================================================
   LABEL COLLECTION PAGES (collection.label-*)
   Hero (video-image, scoped via .label-hero) + "Collection"
   grid (collection-list, used ONLY here so safe to style).
   ============================================================ */

/* ── Hero (video-image) — banner height + centered title overlay ── */
/* Tame the section's hardcoded 90vh mobile height (desktop height is the
   editable maxImageHeight slider, set to 65vh in the templates). */
@media screen and (max-width: 990px) {
  .label-hero .c-video-section__item { padding-bottom: 58vh !important; }
}

/* Label name overlaid on the video: IvyMode, refined tracking.
   Colour is handled by the section's textColor:light (.invert-color uses
   filter:invert) — do NOT set color here or the invert flips it to black. */
.label-hero .video-text-overlay h1,
.label-hero .video-text-overlay .L1 {
  font-family: "ivymode", serif;
  font-weight: 300;
  letter-spacing: 0.08em;
  text-transform: none;
}
.label-hero .video-text-inner { text-align: center; max-width: none; }

/* Hero wordmark PNG overlay — sized, centered. White comes from the overlay's
   textColor:light (.invert-color filter:invert) flipping the black artwork. */
.label-hero .video-overlay-image {
  display: block;
  height: calc(clamp(35px, 5.2vw, 77px) * var(--wordmark-scale, 100) / 100);
  width: auto;
  max-width: 100%;
  margin: 0 auto;
}
@media screen and (max-width: 749px) {
  .label-hero .video-overlay-image { height: calc(clamp(18px, 9.7vw, 52px) * var(--wordmark-scale, 100) / 100); }
}

/* ── "Collection" section heading ── */
.section-collection-list .collection-list-title {
  font-family: "ivymode", serif;
  font-weight: 300;
  font-size: 2.4rem;
  letter-spacing: 0.05em;
  text-transform: none;
  text-align: center;
  margin: 0 0 3.2rem;
}
/* Title centered; "View all products" link pinned to the right edge */
.section-collection-list .title-wrapper-with-link {
  position: relative;
  justify-content: center;
  margin-bottom: 0;
}
.section-collection-list .collection-list__products-link {
  position: absolute;
  right: 0;
  top: 50%;
  transform: translateY(-50%);
  font-family: "commuters-sans", sans-serif;
  font-size: 1.2rem;
  font-weight: 400;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: #000000;
  text-decoration: none;
  border-bottom: 1px solid currentColor;
  padding-bottom: 2px;
  transition: opacity .2s ease;
  white-space: nowrap;
}
.section-collection-list .collection-list__products-link:hover { opacity: 0.55; }

/* ── Card grid: inherit the product grid's spacing for exact card-size parity ──
   (no --grid-* overrides here, so it matches main-collection-product-grid). */

/* ── Card title: Commuters Sans, uppercase, centered below image ── */
.section-collection-list .card__content {
  padding: 0;
}
.section-collection-list .card__information {
  padding: 1.6rem 0 0;
  text-align: center;
}
.section-collection-list .card__heading {
  font-family: "commuters-sans", sans-serif;
  font-weight: 400;
  font-size: 1.3rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  margin: 0;
}
/* Drop Dawn's trailing arrow on collection cards — reference shows the name only */
.section-collection-list .card__heading .icon-wrap {
  display: none;
}

/* ── Subtle, tasteful image hover (transform only) ── */
.section-collection-list .card__media .media img {
  transition: transform .6s cubic-bezier(.22, 1, .36, 1);
}
.section-collection-list .card:hover .card__media .media img {
  transform: scale(1.04);
}

/* ============================================================
   HOMEPAGE HERO CAROUSEL  (section: hero-video-carousel)
   Gentle Monster–style: full-bleed video slides, seamless infinite
   loop, drag/swipe + click-to-advance, thin segmented progress timer.
   CTAs sit outside the sliding track and crossfade per slide.
   ============================================================ */
/* contain the hero in its own stacking context, strictly below the fixed nav */
.hvc-section { margin: 0; position: relative; z-index: 0; isolation: isolate; }
.hvc {
  position: relative;
  width: 100%;
  height: var(--hvc-height, 92vh);
  overflow: hidden;
  background: #f7ede3;           /* brand fallback before media paints */
  color: #fff;
  -webkit-user-select: none;
  user-select: none;
}
/* never let a drag grab/select the media — the gesture only moves slides */
.hvc img,
.hvc video {
  -webkit-user-drag: none;
  -khtml-user-drag: none;
  user-select: none;
  -webkit-touch-callout: none;
}
.hvc__media { pointer-events: none; }   /* drag starts on the slide, not on an image */

/* viewport + sliding track */
.hvc__viewport {
  position: relative;
  width: 100%;
  height: 100%;
  overflow: hidden;
  touch-action: pan-y;           /* keep vertical scroll; capture horizontal drag */
}
.hvc__track {
  position: relative;
  width: 100%;
  height: 100%;
  transition: transform .7s cubic-bezier(.22, 1, .36, 1);
}
/* Slides are absolutely stacked, NOT a flex row. Each carries its own translateX
   "slot" (-1 / 0 / +1) set from JS; the track carries the motion. Only the current
   slide and (while moving/dragging) one neighbour are mounted — which is what lets
   the incoming slide be the real <video> instead of a cloned poster still. */
.hvc__slide {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  overflow: hidden;
  visibility: hidden;
}
.hvc__slide.is-mounted { visibility: visible; }

/* media */
.hvc__media { position: absolute; inset: 0; }
.hvc__video,
.hvc__poster-img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.hvc__scrim {
  position: absolute;
  inset: 0;
  pointer-events: none;
  /* The bottom ramp got deeper in 2026-09 when the H1 + supporting line moved into the
     hero (FWeb SEO brief): white type sat directly over white lace/bodice and was barely
     legible. It stays a smooth gradient — no visible band — and the top is unchanged. */
  background: linear-gradient(180deg,
    rgba(0,0,0,.20) 0%, rgba(0,0,0,0) 26%,
    rgba(0,0,0,0) 46%, rgba(0,0,0,.28) 72%, rgba(0,0,0,.58) 100%);
}
/* hero UI fades out as the hero scrolls up (set via JS) so it never
   collides with the transparent fixed nav */
.hvc__overlay,
.hvc__seo,
.hvc__ctas,
.hvc__timer { opacity: var(--hvc-ui, 1); }

/* Page H1 + supporting line (FWeb SEO brief). Persistent across slides, stacked
   directly above the CTA row. Text only — clicks pass through to the drag viewport. */
.hvc__seo {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 9.6rem;
  z-index: 3;
  padding: 0 6%;
  text-align: center;
  pointer-events: none;
}
.hvc__seo-title {
  /* House heading treatment: 0.05em tracking and the theme-wide uppercase, with the
     <em> half staying italic title case via the global `h1 em` rule — i.e.
     "Designer Wedding Dresses IN AUCKLAND", matching "Discover OUR LABELS". Sized to sit
     with the other page H1s (Stockists renders 40px) rather than the Figma's 48px. */
  margin: 0 0 1.2rem;
  font-family: "ivymode", serif;
  font-weight: 300;
  font-size: clamp(2.6rem, 2.8vw, 4rem);
  letter-spacing: 0.05em;
  line-height: 1.2;
  color: #fff;
  text-shadow: 0 1px 24px rgba(0, 0, 0, 0.32);
}
.hvc__seo-title em { font-style: italic; }
.hvc__seo-text {
  /* 75.8rem = Figma's 758px text frame — the width that settles the copy to exactly
     two lines. Narrower and it wraps to three, orphaning "Atelier Wu" on its own line. */
  margin: 0 auto;
  max-width: 75.8rem;
  font-family: "articulat-cf", sans-serif !important;
  font-weight: 300;
  font-size: 1.4rem;
  line-height: 1.65;
  color: #fff;
  text-shadow: 0 1px 18px rgba(0, 0, 0, 0.36);
}

/* overlay (wordmark / heading) — centered */
.hvc__overlay {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding: 0 6%;
  pointer-events: none;          /* clicks pass through to the viewport for nav */
  z-index: 2;
}
.hvc__wordmark {
  width: clamp(150px, 20vw, 300px);   /* minimal — lets the video lead */
  height: auto;
  display: block;
  opacity: 0.82;
}

/* CTAs — outside the sliding track, pinned above the timer; one per slide,
   crossfading so only the active slide's buttons show */
.hvc__ctas {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 5.4rem;
  height: 0;                      /* the stacked CTAs position from here */
  z-index: 3;
  pointer-events: none;
}
.hvc__cta {
  position: absolute;
  left: 50%;
  bottom: 0;
  transform: translateX(-50%);
  display: flex;
  gap: 2.8rem;
  justify-content: center;
  align-items: center;
  white-space: nowrap;
  opacity: 0;
  pointer-events: none;
  transition: opacity .45s ease;
}
.hvc__cta.is-active { opacity: 1; }
/* Only the ACTIVE slide's buttons receive clicks. A child's explicit pointer-events
   overrides the parent's `none`, so the hidden non-active CTAs (stacked at the same
   spot) would otherwise still intercept clicks — set their buttons to none too. */
.hvc__cta .hvc__btn { pointer-events: none; }
.hvc__cta.is-active .hvc__btn { pointer-events: auto; }
.hvc__heading {
  margin: 0;
  font-family: "ivymode", serif;
  font-weight: 300;
  font-size: clamp(2.6rem, 5vw, 5.4rem);
  letter-spacing: 0.06em;
  line-height: 1.05;
  text-transform: uppercase;
  color: #fff;
}
.hvc__btn {
  display: inline-block;
  font-family: "commuters-sans", sans-serif;
  font-size: 1.3rem;
  font-weight: 400;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: #fff;
  text-decoration: none;
  border-bottom: 1px solid currentColor;   /* underline, not a box */
  padding-bottom: 4px;
  transition: opacity .25s ease;
}
.hvc__btn:hover,
.hvc__btn:focus-visible { opacity: 0.6; }

/* thin segmented progress timer */
.hvc__timer {
  position: absolute;
  left: 50%;
  bottom: 3.2rem;
  transform: translateX(-50%);
  display: flex;
  gap: 10px;
  width: min(420px, 60vw);
  z-index: 3;
}
.hvc__seg {
  position: relative;
  flex: 1 1 0;
  height: 2px;                   /* thin, max 2px */
  padding: 0;
  border: 0;
  background: rgba(255,255,255,0.2);   /* inactive = 20% */
  overflow: hidden;
  cursor: pointer;
}
.hvc__seg::before {              /* invisible larger tap target */
  content: "";
  position: absolute;
  left: 0; right: 0; top: -11px; bottom: -11px;
}
.hvc__seg-fill {
  display: block;
  width: 100%;
  height: 100%;
  background: #fff;              /* active fill = full white */
  transform: scaleX(0);
  transform-origin: left center;
}
.hvc__seg.is-done .hvc__seg-fill { transform: scaleX(1); }
/* Fill is driven from the video's actual playhead by the section's rAF loop
   (--hvc-fill, 0→1) — deliberately NOT a fixed CSS keyframe, so the bar can't
   desync from the clip when it buffers, and "show the video start to finish"
   stays true whatever length each video is. Pausing = the rAF loop stopping. */
.hvc__seg.is-active .hvc__seg-fill { transform: scaleX(var(--hvc-fill, 0)); }
.hvc.hvc--no-auto .hvc__seg.is-active .hvc__seg-fill { transform: scaleX(1); }

/* drag affordance */
.hvc__viewport { cursor: grab; }
.hvc--dragging .hvc__viewport { cursor: grabbing; }
.hvc--dragging .hvc__track { transition: none; }

/* mobile */
@media screen and (max-width: 749px) {
  .hvc { height: min(var(--hvc-height, 92vh), 86vh); }
  .hvc__wordmark { width: min(46vw, 230px); }
  .hvc__heading { font-size: clamp(2.2rem, 9vw, 3.6rem); }
  .hvc__btn { font-size: 1.15rem; letter-spacing: 0.1em; white-space: normal; text-align: center; line-height: 1.6; }
  .hvc__ctas { bottom: 4.4rem; }
  /* clears the vertically-stacked CTA pair below it */
  .hvc__seo { bottom: 13rem; padding: 0 1.6rem; }
  .hvc__seo-title { font-size: clamp(2.2rem, 7vw, 3rem); margin-bottom: 0.9rem; }
  .hvc__seo-text { font-size: 1.25rem; line-height: 1.55; max-width: 40rem; }
  /* stack the buttons vertically on all slides — long labels were clipping at the edges */
  .hvc__cta {
    flex-direction: column;
    gap: 1.5rem;
    width: 100%;
    white-space: normal;
    padding: 0 1.6rem;
  }
  .hvc__timer { bottom: 2.2rem; width: 70vw; }
}

/* reduced motion: no track animation either */
@media (prefers-reduced-motion: reduce) {
  .hvc__track { transition: none; }
}

/* ==========================================================================
   COLLECTION SPLIT  —  "From Our Latest" two-up full-bleed showcase
   ========================================================================== */
.collection-split-section { margin: 0; --cs-head-h: 14rem; }
.collection-split { background: #ffffff; }

/* centered heading band — matches the "Discover our Labels" treatment */
.collection-split__head {
  text-align: center;
  padding: 5rem 2rem 4.6rem;
}
.collection-split__heading {
  margin: 0;
  font-family: "ivymode", serif;
  font-weight: 300;
  font-size: 3.64rem; /* matches the "Discover our Labels" multicolumn title (36.4px) */
  letter-spacing: 0.05em;
  line-height: 1.2;
  text-transform: none;
  color: #1a1a1a;
}
.collection-split__heading em { font-style: italic; }

/* edge-to-edge 2-up grid, no gap */
.cs__grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0;
}

.cs__panel {
  position: relative;
  overflow: hidden;
  height: clamp(620px, 72vw, 1040px); /* tall portrait ≈ 2:3 (720×1080 Figma frame) */
}

.cs__media { position: absolute; inset: 0; }
.cs__img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform 0.6s cubic-bezier(0.22, 1, 0.36, 1);
}

/* tint as a pseudo-element (an empty .cs__tint div gets killed by base.css `div:empty{display:none}`) */
.cs__media::after {
  content: "";
  position: absolute;
  inset: 0;
  background: #000;
  opacity: var(--cs-tint, 0.4);
  transition: opacity 0.45s ease;
  pointer-events: none;
}

/* Text panels get a directional scrim on top of the flat tint. The flat tint alone can't
   solve this: pale lace behind white IvyMode needs ~60% to read, and that much would mute
   the pure-image panel next to it. A gradient weighted to the top-left corner darkens only
   where the lockup actually sits and clears to nothing across the rest of the frame. */
.cs__panel--text .cs__media::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  background: linear-gradient(158deg, rgba(0, 0, 0, 0.66) 0%, rgba(0, 0, 0, 0.46) 28%, rgba(0, 0, 0, 0.12) 55%, rgba(0, 0, 0, 0) 72%);
  pointer-events: none;
}

/* hovered panel only: image grows, tint deepens */
.cs__panel:hover .cs__img { transform: scale(1.05); }
.cs__panel:hover .cs__media::after { opacity: var(--cs-tint-hover, 0.6); }

/* top-left text block — 50px in from the side, 100px down */
.cs__content {
  position: absolute;
  top: 100px;
  left: 50px;
  right: auto;
  max-width: 30rem;
  z-index: 2;
  color: #fff;
}

.cs__name {
  margin: 0;
  /* base.css paints every h2 with `color: rgb(var(--color-foreground))`, which turned this
     black the moment it became a real heading. Inheriting keeps one rule serving both the
     <h2> here and stockist-hero's <p>, whatever colour the panel sets. */
  color: inherit;
  font-family: "ivymode", serif !important; /* beat the global `p { font-family: articulat-cf !important }` */
  font-weight: 300;
  font-size: clamp(3.6rem, 5vw, 6.8rem);
  line-height: 1;
  letter-spacing: 0.01em;
  text-transform: uppercase;
}
/* --- appointment panel lockup -------------------------------------------------
   Scoped to .collection-split because .cs__content / .cs__name are shared with
   stockist-hero. The base max-width of 30rem was sized for the one-word MUSE/FLEUR
   names; "APPOINTMENT" at the panel scale needs more room or it breaks mid-word.
   The <em> sub-line drops to its own line at roughly the Figma's half-size ratio —
   deliberately NO text-transform / letter-spacing override here, so the global
   `h2 em` rule keeps it italic, title case and untracked: the house treatment. */
@media screen and (min-width: 750px) {
  /* Sized from a nowrap probe, not from the Figma: live IvyMode needs 6.55em to set
     "Appointment" on one line, where the Figma's font fit it in 456px of a 960 panel.
     Holding the heading at 3.5vw against a 25vw column keeps that word unbroken and the
     lockup at the Figma's two lines from 750px to past 2560px, capped at the shared
     .cs__name ceiling of 6.8rem so it never outgrows MUSE/FIND A STORE. */
  .collection-split .cs__content { max-width: 25vw; }
  /* the section pins under the sticky header, so the lockup starts below it rather than
     at the panel's own top edge — 100px left only 21px of clearance at 900px tall */
  .collection-split .cs__content { top: calc(var(--nav-height, 79px) + 4.4rem); }
  .collection-split .cs__name { font-size: clamp(2.6rem, 3.5vw, 6.8rem); }
}
.collection-split .cs__name em {
  display: block;
  font-size: 0.46em;
  line-height: 1.2;
  margin-top: 1.2rem;
}
/* "in Auckland" was sitting 22px below the heading and only 12.5px above the body copy —
   barely more than the body's own 10.5px line spacing, so it read as glued to the paragraph.
   Measured on rendered ink, not element boxes: the em's 1.2 leading and the body's 1.65 mean
   equal margins do not give equal-looking gaps. This lands both at ~22px. */
.collection-split .cs__text { margin-top: 0.95rem; }

/* IvyMode "COLLECTION" under the name */
.cs__subtitle {
  margin: 0.6rem 0 1.8rem;
  font-family: "ivymode", serif !important; /* beat the global `p { font-family: articulat-cf !important }` */
  font-size: clamp(1.5rem, 1.7vw, 2rem);
  font-weight: 300;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  opacity: 0.92;
}
.cs__text {
  font-family: "articulat-cf", sans-serif;
  font-weight: 300;
  font-size: 1.3rem;
  line-height: 1.65;
}
.cs__text p { margin: 0 0 1rem; }
.cs__text p:first-child { letter-spacing: 0.04em; margin-bottom: 1.6rem; }

/* CTA — text label with a 1px stroke underline (never a box) */
.cs__btn {
  display: inline-block;
  margin-top: 1.4rem;
  font-family: "commuters-sans", sans-serif;
  font-size: 1.3rem;
  font-weight: 400;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: #fff;
  text-decoration: none;
  border-bottom: 1px solid currentColor;
  padding-bottom: 4px;
  transition: opacity 0.25s ease;
}
.cs__btn:hover { opacity: 0.7; }
.cs__btn:focus-visible { outline: 2px solid #fff; outline-offset: 4px; }

/* mobile — stack full-width, no sticky */
@media screen and (max-width: 749px) {
  .collection-split-section { position: static; }
  .collection-split__head { padding: 3.6rem 1.6rem 3rem; }
  .collection-split__heading { font-size: 2.6rem; }
  .cs__grid { grid-template-columns: 1fr; }
  .cs__panel { height: clamp(520px, 130vw, 720px); }
  /* "one image on mobile" — two full-height panels stacked is too much on a phone.
     Which panel disappears is the block's own "Hide on mobile" setting, not hardcoded. */
  .cs__panel--mob-hide { display: none; }
  .cs__content { top: 48px; left: 24px; right: 24px; max-width: none; }
  /* the header stays fixed over this section on mobile too, and 48px puts the heading
     straight under it — drop the lockup clear of --nav-height (65px here) */
  .collection-split .cs__content { top: calc(var(--nav-height, 65px) + 2.4rem); }
  .cs__name { font-size: clamp(3rem, 11vw, 4.4rem); }
  .cs__subtitle { margin: 0.4rem 0 1.4rem; }
}

/* sticky scroll-over reveal (Mode Mischief) — desktop/tablet only */
@media screen and (min-width: 750px) {
  /* Pin, but offset upward by the heading height so the heading band clears the
     viewport at pin and only the panels remain — fills the screen up to the nav. */
  .collection-split-section { position: sticky; top: calc(-1 * var(--cs-head-h, 14rem)); z-index: 0; }
  .cs__panel { height: 100vh; } /* panels fill the viewport once pinned */
  /* EVERY following section is the cover layer AND must be opaque, so the pinned
     panels can never bleed through later sections (the footer-area bleed fix). */
  .collection-split-section ~ .shopify-section { position: relative; z-index: 2; background-color: #ffffff; }
}

/* page rhythm: the side inset used by the header + footer — non-full-bleed
   sections align their content to this same edge */
:root { --jc-inset: calc(3rem + 20px); }
@media screen and (min-width: 750px) {
  /* "Discover our Labels" — release Dawn's narrow page-width to the shared inset.
     Sides only: the padding shorthand would wipe Dawn's section-padding top/bottom. */
  .multicolumn--labels .page-width {
    max-width: 100%;
    padding-left: var(--jc-inset);
    padding-right: var(--jc-inset);
  }
}

/* ==========================================================================
   SHARED SECTION HEADING  —  centered IvyMode title (matches "Discover our Labels")
   ========================================================================== */
.jc-sec-head { text-align: center; padding: 5rem 2rem 4.6rem; }
.jc-sec-head__title {
  margin: 0;
  font-family: "ivymode", serif;
  font-weight: 300;
  font-size: 3.64rem; /* 36.4px — matches the multicolumn "Discover our Labels" title */
  letter-spacing: 0.05em;
  line-height: 1.2;
  text-transform: none;
  color: #1a1a1a;
}
.jc-sec-head__title em { font-style: italic; }
@media screen and (max-width: 749px) {
  .jc-sec-head { padding: 3.6rem 1.6rem 3rem; }
  .jc-sec-head__title { font-size: 2.6rem; }
}

/* ==========================================================================
   DISCOVER OUR BESTS  —  static full-bleed 4-up product row
   ========================================================================== */
.collection-bests-section { margin: 0; }
.collection-bests { background: #ffffff; }
.cb__grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 0; }
.cb__item {
  position: relative;
  display: block;
  overflow: hidden;
  height: clamp(360px, 30vw, 620px);
  text-decoration: none;
}
.cb__media { position: absolute; inset: 0; }
.cb__img {
  width: 100%; height: 100%;
  object-fit: cover; display: block;
  transition: transform 0.6s cubic-bezier(0.22, 1, 0.36, 1);
}
/* darken overlay (pseudo-element — an empty div would be killed by base.css :empty) */
.cb__item::after {
  content: ""; position: absolute; inset: 0;
  background: #000; opacity: 0;
  transition: opacity 0.4s ease; pointer-events: none;
}
.cb__item:hover .cb__img { transform: scale(1.04); }
.cb__item:hover::after { opacity: var(--cb-tint, 0.25); }
.cb__item:focus-visible { outline: 2px solid #1a1a1a; outline-offset: -2px; }
@media screen and (max-width: 749px) {
  .cb__grid { grid-template-columns: repeat(2, 1fr); }
  .cb__item { height: clamp(280px, 64vw, 460px); }
}

/* ==========================================================================
   VIEW OUR DRESSES  —  big drag wheel + mini click-sync scrubber
   ========================================================================== */
.dress-scroller-section { margin: 0; }
.dress-scroller { background: #ffffff; padding-bottom: 4rem; }
.ds__empty { text-align: center; padding: 4rem 2rem; color: #777; font-family: "articulat-cf", sans-serif; }

/* big wheel — user-select:none so a press-drag never starts a text selection
   (a held-button selection, like a leaked native drag, freezes :hover page-wide) */
.ds__wheel { overflow: hidden; cursor: grab; touch-action: pan-y; -webkit-user-select: none; user-select: none; }
.ds__wheel:active { cursor: grabbing; }
.ds__track { display: flex; gap: 0; will-change: transform; }
.ds__item {
  position: relative;
  flex: 0 0 auto;
  width: clamp(260px, 32vw, 460px);
  height: clamp(380px, 46vw, 660px);
  overflow: hidden;
  display: block;
}
.ds__img {
  width: 100%; height: 100%;
  object-fit: cover; display: block;
  -webkit-user-drag: none; user-select: none; pointer-events: none;
  transition: transform 0.6s cubic-bezier(0.22, 1, 0.36, 1);
}
/* MM-style hover: image grows slightly inside the clipped tile (matches .cs__panel).
   NB: hover is driven by a JS-toggled .is-hover class, NOT CSS :hover — when tiles
   slide under a stationary cursor (drag/momentum/trackpad) the browser doesn't
   recompute :hover, so the flip would stick on the wrong tile. */
.ds__item.is-hover .ds__img { transform: scale(1.05); }
/* hovered tile: its dress name brightens to solid white (highlight) */
.ds__item.is-hover .ds__caption { opacity: 1; }
/* hover = alternate angle: the 2nd product image is stacked on top and cross-fades in
   (nothing is rendered when a product has only one image, so this no-ops gracefully) */
.ds__img--alt {
  position: absolute; inset: 0; opacity: 0; z-index: 1;
  transition: transform 0.6s cubic-bezier(0.22, 1, 0.36, 1), opacity 0.5s ease;
}
.ds__item.is-hover .ds__img--alt { opacity: 1; }
/* soft base scrim so the white caption stays readable over pale gowns */
.ds__item::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 38%;
  background: linear-gradient(to top, rgba(0, 0, 0, 0.55), rgba(0, 0, 0, 0.22) 45%, transparent);
  z-index: 2;
  pointer-events: none;
}
/* product name — Mode Mischief style, bottom-left on the image, IvyMode */
.ds__caption {
  position: absolute;
  left: 18px; bottom: 16px; z-index: 2;
  max-width: calc(100% - 36px);
  font-family: "ivymode", serif !important;
  font-weight: 300;
  font-size: 1.4rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: #fff;
  /* was 0.6 — fine when this was just a decorative gown name, too faint now that it also
     carries the brand and price, which are information the shopper is meant to read. */
  opacity: 0.88;
  /* Worst case here is white text landing on a white gown skirt, where neither the scrim
     nor a soft glow can save it. Two shadows: a tight near-opaque halo that behaves like an
     outline on pale fabric, plus the soft one the style-card labels use for general lift. */
  text-shadow: 0 0 3px rgba(0, 0, 0, 0.85), 0 1px 16px rgba(0, 0, 0, 0.55);
  transition: opacity 0.45s ease;     /* fades to solid white when its tile is hovered */
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  pointer-events: none;
}
/* The caption is now a stack: name, brand, price (FWeb brief). It keeps its own IvyMode
   type for the name; the two meta lines step down and out of the display face so the gown
   name stays the loudest thing on the card. `white-space: nowrap` lives on the caption, so
   each line truncates independently rather than the block collapsing to one line. */
.ds__caption {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 0.5rem;
}
.ds__title { display: block; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
.ds__brand,
.ds__price {
  font-family: "commuters-sans", sans-serif !important;
  font-weight: 400;
  text-transform: uppercase;
  line-height: 1;
}
.ds__brand { font-size: 1.05rem; letter-spacing: 0.16em; opacity: 0.9; }
.ds__price { font-size: 1.05rem; letter-spacing: 0.1em; opacity: 0.8; }

/* mini scrubber — Gentle Monster style: a small centered strip, the selected
   product dead-center and scaled up; track is transform-driven (no native scroll) */
.ds__mini-wrap { position: relative; margin-top: 2.4rem; }
.ds__mini {
  width: min(420px, 70vw);
  margin: 0 auto;
  overflow: hidden;
  padding: 6px 0; /* headroom for the active-thumb scale */
  cursor: grab;
  touch-action: pan-y;
  -webkit-user-select: none; user-select: none;
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 18%, #000 82%, transparent);
  mask-image: linear-gradient(90deg, transparent, #000 18%, #000 82%, transparent);
}
.ds__mini:active { cursor: grabbing; }
.ds__mini-track { display: flex; align-items: center; gap: 10px; width: max-content; will-change: transform; }
.ds__thumb {
  flex: 0 0 auto;
  width: 38px; height: 54px;
  padding: 0; border: 0; background: none; cursor: pointer;
  overflow: hidden;
  opacity: 0.4;
  transition: opacity 0.5s cubic-bezier(0.22, 1, 0.36, 1), transform 0.5s cubic-bezier(0.22, 1, 0.36, 1);
}
.ds__thumb-img { width: 100%; height: 100%; object-fit: cover; display: block; pointer-events: none; user-select: none; -webkit-user-drag: none; }
.ds__thumb:hover { opacity: 0.75; }
.ds__thumb.is-active { opacity: 1; transform: scale(1.18); }
.ds__thumb:focus-visible { outline: 1px solid #1a1a1a; outline-offset: 2px; }
.ds__foot { text-align: center; margin-top: 2.8rem; }
/* These four sit on a light ground, so they take the house button as-is (black box, light
   label). The old `color: #1a1a1a` overrides are gone — they were correct for an underline on
   cream and would now paint dark text on a black box. `.bride-grid .cs__btn` mattered most: at
   (0,2,0) it beat the house rule on specificity, not just source order. */
.ds__viewall:focus-visible { outline-color: currentColor; }
@media screen and (max-width: 749px) {
  .ds__item { width: 72vw; height: 96vw; }
  .ds__caption { left: 14px; bottom: 12px; font-size: 1.2rem; }
}

/* ==========================================================================
   SPONSOR LOGOS  —  edge-to-edge press strip that drifts and can be dragged
   ========================================================================== */
.sponsor-logos-section { margin: 0; }
/* side padding is zero so the strip runs edge to edge; the title carries the page inset
   itself, which avoids negative margins fighting the section padding */
.sponsor-logos { background: #ffffff; padding: 4.4rem 0; text-align: center; }
.spl__head { margin-bottom: 2.6rem; padding: 0 var(--jc-inset); }
/* small IvyMode title above the logos — rendered exactly as typed */
.spl__caption {
  margin: 0;
  font-family: "ivymode", serif !important;
  font-weight: 300;
  font-size: 1.3rem;
  letter-spacing: 0.08em;
  color: #1a1a1a;
  /* NOTE: no opacity here on purpose. The global `p { opacity: 1 !important }` (line ~50)
     beats any opacity set on this class, so the 0.55 that used to sit here never applied —
     the title has always rendered at full strength. Left as-is deliberately: the brief was
     to move the title, not restyle it. Wanting it faded means adding `!important`, which is
     a visible change, not a fix. */
  text-align: center;
}
.spl__viewport {
  overflow: hidden;
  cursor: grab;
  touch-action: pan-y;   /* vertical swipes stay with the page; the JS gate claims horizontal */
  /* dissolve at both edges instead of hard-clipping a logo mid-wordmark */
  -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 6%, #000 94%, transparent 100%);
  mask-image: linear-gradient(90deg, transparent 0, #000 6%, #000 94%, transparent 100%);
}
.spl__viewport.is-grabbing { cursor: grabbing; }
.spl__track { display: flex; will-change: transform; }
.spl__group { display: flex; align-items: center; flex: 0 0 auto; }
/* normalise each logo to a consistent box so wide wordmarks don't dominate the strip.
   Spacing is a RIGHT MARGIN, not a flex gap: a group's own width then already includes its
   trailing space, so the wrap distance is exactly group width and the seam cannot drift. */
.spl__logo {
  display: inline-flex; align-items: center; justify-content: center;
  height: 46px;
  flex: 0 0 auto;
  margin-right: clamp(2rem, 3.5vw, 4rem);
}
.spl__logo-img {
  max-height: 38px; max-width: 150px;
  width: auto; height: auto; object-fit: contain;
  opacity: 0.5; transition: opacity 0.3s ease;
  pointer-events: none;   /* the whole logo box is the drag/click target */
}
.spl__logo:hover .spl__logo-img { opacity: 1; }
@media screen and (max-width: 749px) {
  .sponsor-logos { padding: 3rem 0; }
  .spl__head { padding: 0 1.6rem; }
  .spl__logo { height: 36px; margin-right: 2.6rem; }
  .spl__logo-img { max-height: 28px; max-width: 110px; }
  .spl__caption { font-size: 1.15rem; }
}

/* ==========================================================================
   STOCKIST HERO  —  full-bleed "Find a Store" panel (reuses .cs__ typography)
   ========================================================================== */
.stockist-hero-section { margin: 0; }
/* mid-left text block (the MUSE panels are top-left); wider so the copy holds */
.stockist-hero .cs__content {
  top: 50%; transform: translateY(-50%);
  max-width: 46rem;
}
/* the long subheading stays on one line, slightly smaller than COLLECTION */
.stockist-hero .cs__subtitle {
  white-space: nowrap;
  font-size: clamp(1.3rem, 1.5vw, 1.8rem);
}
@media screen and (min-width: 750px) {
  /* Mode-Mischief "midway" pin (the MM building-illustration treatment): the hero
     never moves — the section above scrolls off it, then the section below covers it.
     The sticky element itself must stay margin-free (Chrome mis-clamps sticky travel
     when the stuck element carries large margins), so the geometry lives on the
     neighbours:
       • the preceding section's -100vh margin-bottom pulls the hero's flow box up
         underneath the opaque z2 covers, so it's already pinned back there ("always
         there") and gets revealed as the cover scrolls away;
       • the following section's +100vh margin-top is the cover runway: the next
         section starts rising the moment the hero is fully revealed (no extra dwell).
     z1 = above the pinned collection-split (z0), below the z2 covers. Must stay after
     the blanket `.collection-split-section ~ .shopify-section` rule (later wins). */
  .shopify-section.sponsor-logos-section { margin-bottom: -100vh; }
  .shopify-section.stockist-hero-section { position: sticky; top: 0; z-index: 1; }
  .stockist-hero-section + .shopify-section { margin-top: 100vh; }
}
@media screen and (max-width: 749px) {
  .stockist-hero .cs__content { top: 50%; transform: translateY(-50%); }
  .stockist-hero .cs__subtitle { white-space: normal; }
}

/* ==========================================================================
   REAL BRIDES GRID  —  Mode Mischief "moments" multigrid (journal tiles)
   ========================================================================== */
.bride-grid-section { margin: 0; }
.bride-grid { background: #ffffff; padding-bottom: 4rem; }
.rb__grid {
  display: grid;
  grid-template-columns: repeat(var(--rb-cols, 5), 1fr);
  gap: 2px; /* hairline seams, per the MM reference */
}
.rb__tile {
  position: relative;
  display: block;
  overflow: hidden;
  aspect-ratio: 1 / 1;
  text-decoration: none;
}
.rb__img {
  width: 100%; height: 100%;
  object-fit: cover; display: block;
  transition: transform 0.6s cubic-bezier(0.22, 1, 0.36, 1);
}
/* soft base scrim so the white overlay reads on bright photos */
.rb__tile::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 38%;
  background: linear-gradient(to top, rgba(0, 0, 0, 0.38), transparent);
  opacity: 0; transition: opacity 0.35s ease;
  pointer-events: none;
}
.rb__overlay {
  position: absolute; left: 16px; bottom: 14px; right: 16px; z-index: 1;
  display: flex; flex-direction: column; align-items: flex-start; gap: 0.7rem;
  opacity: 0; transition: opacity 0.35s ease;
  pointer-events: none;
}
.rb__name {
  font-family: "ivymode", serif !important;
  font-weight: 300;
  font-size: 1.4rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: #fff;
  line-height: 1.3;
}
/* underline "See More" — standing rule: stroke underline, never a box */
.rb__see {
  font-family: "commuters-sans", sans-serif;
  font-size: 1.1rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: #fff;
  border-bottom: 1px solid currentColor;
  padding-bottom: 3px;
}
.rb__tile:hover .rb__img { transform: scale(1.05); }
.rb__tile:hover::after,
.rb__tile:hover .rb__overlay { opacity: 1; }
.rb__tile:focus-visible { outline: 2px solid #1a1a1a; outline-offset: -2px; }
.rb__foot { text-align: center; margin-top: 2.8rem; }
.bride-grid .cs__btn:focus-visible { outline-color: currentColor; }
@media screen and (max-width: 749px) {
  /* the tiles were full-bleed because the overlay used to be inset inside the photo; with
     the details below it, the text needs the same 16px breathing room off the screen edge */
  .rb__grid { grid-template-columns: repeat(2, 1fr); column-gap: 12px; row-gap: 2.4rem; padding: 0 16px; }
  /* There is no hover on touch, and the card now carries four lines (couple, gown, house,
     CTA) — stacked over a wedding photo that is unreadable and buries the photography.
     The brief asks for the details "visible below the image on mobile", so the tile becomes
     a column: square photo on top, details beneath in ink on the section's cream ground.
     Desktop keeps the hover overlay untouched. */
  .rb__tile { aspect-ratio: auto; display: flex; flex-direction: column; }
  .rb__img { aspect-ratio: 1 / 1; height: auto; }
  .rb__tile::after { content: none; }   /* the scrim only existed to carry white-on-photo text */
  .rb__overlay {
    position: static;
    opacity: 1;
    gap: 0.5rem;
    padding: 1rem 0 0;
    pointer-events: auto;
  }
  .rb__name { font-size: 1.2rem; color: #1a1a1a; }
  /* .rb__dress/.rb__label set `color: #fff` further down the file, so a bare class here
     loses on source order and the lines vanish on the cream ground. Qualify with .rb__tile
     to win on specificity instead of depending on where this block sits. */
  .rb__tile .rb__dress,
  .rb__tile .rb__label { color: #4a4a47; }
  .rb__see { font-size: 1rem; color: #1a1a1a; }
}

/* ==========================================================================
   BOOK APPOINTMENT CTA  —  huge centered heading + circular script sticker
   ========================================================================== */
.cta-appointment-section { margin: 0; }
.cta-appointment { background: #ffffff; padding: 9rem var(--jc-inset) 8rem; }
.cta__inner { position: relative; max-width: 1280px; margin: 0 auto; text-align: center; }
.cta__head-row { position: relative; display: inline-block; }
.cta__heading {
  margin: 0;
  font-family: "ivymode", serif;
  font-weight: 300;
  font-size: calc(clamp(4.2rem, 7.4vw, 10.6rem) * var(--cta-heading-scale, 100) / 100);
  letter-spacing: 0.02em;
  line-height: 1.05;
  text-transform: uppercase;
  color: #1a1a1a;
}
.cta__sticker {
  position: absolute;
  right: clamp(-90px, -6vw, -50px);
  bottom: clamp(-70px, -5vw, -40px);
  width: clamp(110px, 12.5vw, 185px);
  height: auto;
  pointer-events: none;
}
.cta__text {
  margin: 2.2rem auto 0;
  font-family: "ivymode", serif !important;
  font-weight: 300;
  font-size: clamp(1.4rem, 1.5vw, 1.8rem);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: #1a1a1a;
  max-width: 90rem;
}
.cta__btn { margin-top: 3.2rem; }
.cta__btn:focus-visible { outline-color: currentColor; }
@media screen and (max-width: 749px) {
  .cta-appointment { padding: 5.6rem 1.6rem 5rem; }
  .cta__heading { font-size: calc(clamp(3rem, 9.4vw, 4.4rem) * var(--cta-heading-scale, 100) / 100); }
  .cta__sticker { position: static; display: block; margin: 2rem auto 0; width: 96px; }
  .cta__text { font-size: 1.25rem; }
}

/* ==========================================================================
   SOCIAL POSTS  —  three IG tiles + Mode Mischief-style Instagram popup
   ========================================================================== */
.social-posts-section { margin: 0; }
.social-posts { background: #ffffff; padding: 4.4rem var(--jc-inset) 7rem; }
.sp__row {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 2.6rem;
}
.sp__tile {
  display: block; width: 100%;
  padding: 0; border: 0; background: none; cursor: pointer;
  position: relative; overflow: hidden;
  aspect-ratio: 4 / 5;
}
.sp__img {
  width: 100%; height: 100%;
  object-fit: cover; display: block;
  transition: transform 0.6s cubic-bezier(0.22, 1, 0.36, 1);
}
.sp__tile:hover .sp__img { transform: scale(1.05); }
.sp__tile:focus-visible { outline: 2px solid #1a1a1a; outline-offset: -2px; }
.sp__handle {
  display: flex; align-items: center; justify-content: center; gap: 0.8rem;
  margin-top: 1.4rem;
  font-family: "commuters-sans", sans-serif;
  font-size: 1.2rem; letter-spacing: 0.08em;
  color: #1a1a1a; text-decoration: none;
  transition: opacity 0.25s ease;
}
.sp__handle:hover { opacity: 0.6; }
.sp__ig { width: 15px; height: 15px; display: block; }

/* ---- popup (portalled to <body>) ---- */
.sp__overlay {
  position: fixed; inset: 0; z-index: 990;
  background: rgba(0, 0, 0, 0.55);
  display: flex; align-items: center; justify-content: center;
  opacity: 0; transition: opacity 0.25s ease;
  padding: 2rem;
}
/* `display:flex` above would defeat the [hidden] attribute — keep it dead when closed */
.sp__overlay[hidden] { display: none; }
.sp__overlay.is-open { opacity: 1; }
.sp__modal {
  position: relative;
  display: grid; grid-template-columns: 1.25fr 1fr;
  width: min(1060px, 94vw);
  height: min(700px, 86vh);
  background: #fff;
  overflow: hidden;
}
.sp__close {
  position: absolute; top: 1.4rem; right: 1.8rem; z-index: 3;
  padding: 0; border: 0; background: none; cursor: pointer;
  font-family: "commuters-sans", sans-serif;
  font-size: 1.1rem; letter-spacing: 0.14em; text-transform: uppercase;
  color: #1a1a1a;
}
.sp__close:hover { opacity: 0.6; }
.sp__stage { position: relative; overflow: hidden; background: #f2f0ec; }
.sp__frame { position: absolute; inset: 0; overflow: hidden; cursor: grab; touch-action: pan-y; }
.sp__frame:active { cursor: grabbing; }
.sp__strip { display: flex; height: 100%; will-change: transform; }
.sp__slide { flex: 0 0 100%; width: 100%; height: 100%; object-fit: cover; user-select: none; }
.sp__chev {
  position: absolute; top: 50%; transform: translateY(-50%); z-index: 2;
  width: 34px; height: 34px; border: 0; border-radius: 50%;
  background: rgba(255, 255, 255, 0.85); color: #1a1a1a;
  font-size: 1.8rem; line-height: 1; cursor: pointer;
  display: flex; align-items: center; justify-content: center;
  transition: opacity 0.25s ease;
}
.sp__chev:hover { opacity: 0.75; }
.sp__chev--prev { left: 1.2rem; }
.sp__chev--next { right: 1.2rem; }
.sp__dots {
  position: absolute; bottom: 1.4rem; left: 50%; transform: translateX(-50%); z-index: 2;
  display: flex; gap: 6px;
}
.sp__dot { width: 6px; height: 6px; border-radius: 50%; background: rgba(255, 255, 255, 0.55); transition: background 0.25s ease; }
.sp__dot.is-on { background: #fff; }
.sp__panel {
  position: relative;
  padding: 5.6rem 3.2rem 7rem;
  display: flex; flex-direction: column;
  overflow-y: auto;
}
.sp__panel-handle {
  display: inline-flex; align-items: center; gap: 0.8rem;
  font-family: "commuters-sans", sans-serif;
  font-size: 1.3rem; letter-spacing: 0.08em;
  color: #1a1a1a; text-decoration: none;
}
.sp__panel-handle:hover { opacity: 0.6; }
.sp__caption {
  margin: 2.4rem 0 0;
  font-family: "articulat-cf", sans-serif !important;
  font-weight: 300;
  font-size: 1.4rem; line-height: 1.7;
  color: #1a1a1a;
}
.sp__view {
  display: inline-block; margin-top: 2.4rem; align-self: flex-start;
  font-family: "commuters-sans", sans-serif;
  font-size: 1.1rem; letter-spacing: 0.14em; text-transform: uppercase;
  color: #1a1a1a; text-decoration: none;
  border-bottom: 1px solid currentColor; padding-bottom: 3px;
}
.sp__view:hover { opacity: 0.6; }
.sp__postnav {
  position: absolute; left: 3.2rem; right: 3.2rem; bottom: 2.4rem;
  display: flex; align-items: center; justify-content: space-between;
  font-family: "commuters-sans", sans-serif;
}
.sp__postnav button {
  padding: 0 0 3px; border: 0; border-bottom: 1px solid transparent;
  background: none; cursor: pointer;
  font-family: inherit; font-size: 1.1rem; letter-spacing: 0.12em; text-transform: uppercase;
  color: #1a1a1a;
}
.sp__postnav button:hover { border-bottom-color: currentColor; }
.sp__counter { font-size: 1.1rem; letter-spacing: 0.12em; color: #999; }

/* IG chrome — title bar with window-style closer, carousel pill, blue post dots.
   Mobile-only; desktop keeps the editorial MM layout. */
.sp__bar { display: none; }
.sp__bar-close {
  padding: 0.6rem 1rem; border: 0; background: none; cursor: pointer;
  font-family: "commuters-sans", sans-serif;
  font-size: 1.5rem; line-height: 1; color: #1a1a1a;
}
.sp__pill {
  display: none;
  position: absolute; top: 1.2rem; right: 1.2rem; z-index: 2;
  padding: 0.4rem 1rem; border-radius: 999px;
  background: rgba(38, 38, 38, 0.8);
  font-family: "commuters-sans", sans-serif;
  font-size: 1.1rem; letter-spacing: 0.06em; color: #fff;
}
.sp__pdots { display: none; align-items: center; justify-content: center; gap: 5px; padding: 1rem 0 0.2rem; }
.sp__pdot { width: 6px; height: 6px; border-radius: 50%; background: #dbdbdb; transition: background 0.25s ease; }
.sp__pdot.is-on { background: #0095f6; } /* Instagram blue */

@media screen and (max-width: 749px) {
  /* IG-style swipe carousel: cards snap one-by-one with edge peek */
  .social-posts { padding: 4rem 0 5rem; }
  /* Left-aligned to the 16px mobile guide, not a centred peek. `scroll-snap-align: center`
     parks each card in the middle of the scrollport, so NO padding value can make a card land on
     the guide — the snap alignment is what had to change, not just the inset. */
  .sp__row {
    display: flex;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    gap: 1.2rem;
    padding: 0 1.6rem;
    scroll-padding-left: 1.6rem;
    scrollbar-width: none;
    -webkit-overflow-scrolling: touch;
  }
  .sp__row::-webkit-scrollbar { display: none; }
  .sp__post { flex: 0 0 84%; scroll-snap-align: start; }
  .sp__modal {
    grid-template-columns: 1fr;
    grid-template-rows: auto auto auto 1fr; /* bar / image / dots / caption */
    height: 88vh; width: 94vw;
  }
  .sp__bar {
    display: flex; align-items: center; justify-content: flex-end;
    height: 4.2rem;
    border-bottom: 1px solid rgba(0, 0, 0, 0.08);
  }
  .sp__close { display: none; }   /* replaced by the bar's ✕ on mobile */
  .sp__pill { display: inline-block; }
  .sp__pdots { display: flex; }
  .sp__stage { aspect-ratio: 4 / 5; position: relative; }
  .sp__frame { position: absolute; }
  .sp__chev { display: none; }    /* swipe + chaining own the gesture on touch */
  /* mobile keeps it minimal: account name + Prev 1/3 Next only */
  .sp__caption, .sp__view { display: none; }
  .sp__modal { height: auto; max-height: 88vh; }
  .sp__panel { padding: 1.8rem 2rem 6.8rem; }
  .sp__postnav { left: 2rem; right: 2rem; bottom: 1.8rem; }
}

/* the popup follows the visitor's system theme (IG dark palette) — page stays light */
@media (prefers-color-scheme: dark) {
  .sp__modal, .sp__bar, .sp__pdots, .sp__panel { background: #262626; }
  .sp__bar { border-bottom-color: rgba(255, 255, 255, 0.12); }
  .sp__bar-close, .sp__close,
  .sp__panel-handle, .sp__caption, .sp__view,
  .sp__postnav button { color: #f5f5f5; }
  .sp__counter { color: #a8a8a8; }
  .sp__pdot { background: #555; }
  .sp__pdot.is-on { background: #0095f6; }
  .sp__stage { background: #121212; }
  /* the IG glyph is a black SVG <img> — flip it white inside the dark popup */
  .sp__panel-handle .sp__ig { filter: invert(1); }
}

/* ==========================================================================
   EVENT FEATURE  —  "Upcoming Events" editorial split banner
   ========================================================================== */
.event-feature-section { margin: 0; }
.event-feature { background: #ffffff; padding: 0 var(--jc-inset) 4rem; }
/* "What we're UP TO" — left-aligned to the page inset (breaks the centered-title
   repetition); the section already pads its sides to --jc-inset, so zero the
   shared centered heading's own side padding to hit that same margin. */
.event-feature .jc-sec-head { text-align: left; padding-left: 0; padding-right: 0; }
.ev__split {
  display: grid; grid-template-columns: 1.15fr 1fr;
  align-items: stretch;
}
.ev__media { overflow: hidden; }
.ev__img { width: 100%; height: 100%; min-height: 420px; object-fit: cover; display: block; }
/* Bordered box, not a cream fill — same language as .ts-card and the product-card frame.
   Deliberately has NO hover: .ts-card and the product cards are clickable, this panel is a static
   block that happens to contain a CTA, and a hover on a non-interactive surface promises a target
   that isn't there. */
.ev__content {
  display: flex; flex-direction: column; justify-content: center; align-items: flex-start;
  padding: 5rem 5.6rem;
  background: transparent;
  border: 1px solid rgba(26, 26, 26, 0.12);
  border-radius: 0;
}
.ev__eyebrow {
  margin: 0 0 1.6rem;
  font-family: "commuters-sans", sans-serif;
  font-size: 1.1rem; letter-spacing: 0.2em; text-transform: uppercase;
  color: #1a1a1a; opacity: 0.65;
}
.ev__title {
  margin: 0;
  font-family: "ivymode", serif !important;
  font-weight: 300;
  font-size: clamp(2.6rem, 2.8vw, 3.6rem);
  line-height: 1.15;
  color: #1a1a1a;
}
.ev__meta {
  margin: 1.4rem 0 0;
  font-family: "commuters-sans", sans-serif;
  font-size: 1.2rem; letter-spacing: 0.16em; text-transform: uppercase;
  color: #1a1a1a; opacity: 0.75;
}
.ev__text {
  margin-top: 2.2rem;
  font-family: "articulat-cf", sans-serif;
  font-weight: 300;
  font-size: 1.4rem; line-height: 1.7;
  color: #1a1a1a; max-width: 46rem;
}
.ev__text p { margin: 0 0 1rem; }
.ev__btn { margin-top: 2.6rem; }
.ev__btn:focus-visible { outline-color: currentColor; }
@media screen and (max-width: 749px) {
  /* had no mobile override, so it kept the 50px desktop inset while every neighbouring section
     sits on the 16px mobile guide */
  .event-feature { padding: 0 1.6rem 4rem; }
  .ev__split { grid-template-columns: 1fr; }
  .ev__img { min-height: 0; aspect-ratio: 4 / 3; }
  .ev__content { padding: 3.2rem 2rem 4rem; }
}

/* =========================================================
   PRODUCT PAGE — REAL WEDDING "As seen on" collage (.pp-rw)
   Replaces the description's couple-link bullet list with a
   square photo grid (Team Canva reference). Tiles reuse the
   homepage rb-tile snippet (.rb__* base styles, already 1:1).
   ========================================================= */
.pp-rw { margin-top: 1rem; }
.pp-rw__heading {
  font-family: "ivymode", serif;
  font-weight: 300;
  font-style: normal;
  font-size: 3.6rem;
  line-height: 1.1;
  letter-spacing: -0.03em;
  text-transform: none; /* a theme rule uppercases headings here — casing below is literal */
  color: #1a1a1a;
  margin: 0 0 1.2rem;
}
.pp-rw__heading em { font-style: italic; } /* "As" italic accent, "SEEN ON" plain — matches .jc-sec-head__title */
.pp-rw__grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 10px;
}
.pp-rw__grid .rb__name { font-size: 1.3rem; }
@media screen and (max-width: 749px) {
  .pp-rw__heading { font-size: 2.8rem; }
  .pp-rw__grid { grid-template-columns: repeat(2, 1fr); }
}

/* =========================================================
   PRODUCT PAGE — "More to Love" similar-dresses carousel (.sd)
   Horizontal drag carousel of recommended products at the
   bottom of the product page. Cards come from Dawn's
   card-product snippet; heading reuses .jc-sec-head.
   ========================================================= */
.sd { padding: 2rem var(--jc-inset) 6rem; }
.sd .jc-sec-head { margin-bottom: 3rem; }
.sd__track {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  gap: 2rem;
  overflow-x: auto;
  overscroll-behavior-x: contain;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
  cursor: grab;
}
.sd__track::-webkit-scrollbar { display: none; }
.sd__track.is-dragging { cursor: grabbing; }
.sd__slide { flex: 0 0 30rem; }
.sd__slide .card,
.sd__slide .card * {
  user-select: none;
  -webkit-user-select: none;
  -webkit-user-drag: none;
}
@media screen and (max-width: 749px) {
  .sd { padding-left: 20px; padding-right: 20px; padding-bottom: 4rem; }
  .sd__slide { flex: 0 0 22rem; }
}

/* =========================================================
   LABEL PAGE — collection filter carousel (.ccf)
   Portrait tiles above the filters; clicking toggles the
   Search & Discovery "Collection" facet (multi-select).
   Selected = editorial focus: gallery-mat ink frame + name
   underline; unselected tiles soften while filtering.
   ========================================================= */

/* Kill Dawn's stock full-grid white dim during the carousel's AJAX filter fetch
   (facets.js adds .loading to .collection for every facet request; Dawn's own
   template-collection.css shows a big opaque .loading-overlay while it's in
   flight). Scoped to the 3 label templates only — every other collection/search
   page keeps Dawn's default loading dim untouched. The small per-count spinner
   (.loading__spinner, near "N products") is a separate element and still shows. */
.template-name--label-jessica .collection.loading .loading-overlay,
.template-name--label-chloe .collection.loading .loading-overlay,
.template-name--label-atelier .collection.loading .loading-overlay { display: none; }

.ccf { padding: 3.4rem var(--jc-inset) 1rem; }
.ccf .jc-sec-head { padding-top: 0; padding-bottom: 2.4rem; }
.ccf .jc-sec-head__title { font-size: 2.4rem; }
@media screen and (max-width: 749px) {
  .ccf .jc-sec-head__title { font-size: 2rem; }
}

/* Reusable small breakpoint heading (.jc-heading-break) — same size as the carousel's. */
.jc-heading-break .jc-sec-head { padding: 2.4rem 2rem 0.4rem; }
.jc-heading-break .jc-sec-head__title { font-size: 2.4rem; }
@media screen and (max-width: 749px) {
  .jc-heading-break .jc-sec-head { padding: 2rem 1.6rem 0.2rem; }
  .jc-heading-break .jc-sec-head__title { font-size: 2rem; }
}
.ccf__track {
  list-style: none;
  margin: 0;
  padding: 4px; /* room for the selected outline (offset 3px + 1px line) */
  display: flex;
  gap: 14px;
  overflow-x: auto;
  overscroll-behavior-x: contain;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
  cursor: grab;
}
.ccf__track::-webkit-scrollbar { display: none; }
.ccf__track.is-dragging { cursor: grabbing; }
.ccf__item { flex: 0 0 auto; }
.ccf__tile {
  position: relative;
  display: block;
  width: 22.5rem;
  aspect-ratio: 3 / 4;
  padding: 0;
  border: 0;
  background: none;
  cursor: pointer;
  overflow: hidden;
  transition: opacity 0.3s ease;
}
.ccf__img {
  width: 100%; height: 100%;
  object-fit: cover; display: block;
  transition: transform 0.6s cubic-bezier(0.22, 1, 0.36, 1);
  user-select: none; -webkit-user-select: none; -webkit-user-drag: none;
}
/* soft scrim so the white name reads on bright photos (pseudo — div:empty gotcha) */
.ccf__tile::before {
  content: "";
  position: absolute; inset: 0; z-index: 1;
  background: rgba(0, 0, 0, 0.18);
  transition: background 0.3s ease;
  pointer-events: none;
}
.ccf__name {
  position: absolute; inset: 0; z-index: 2;
  display: flex; align-items: center; justify-content: center;
  padding: 0 1rem;
  font-family: "commuters-sans", sans-serif;
  font-size: 1.5rem; letter-spacing: 0.14em; text-transform: uppercase;
  color: #fff; text-align: center;
  pointer-events: none;
}
/* the underline is its own element edge so it can animate cleanly */
.ccf__name::after {
  content: "";
  position: absolute;
  left: 50%; bottom: calc(50% - 1.9em);
  width: 3.2em; height: 1px;
  background: currentColor;
  transform: translateX(-50%) scaleX(0);
  transform-origin: center;
  transition: transform 0.3s cubic-bezier(0.22, 1, 0.36, 1);
}
.ccf__tile:hover .ccf__img { transform: scale(1.04); }
.ccf__tile:focus-visible { outline: 2px solid #1a1a1a; outline-offset: 2px; }
/* Selected: gallery-mat frame + underline; brand ink, no color shift */
.ccf__tile.is-selected {
  outline: 1px solid #1a1a1a;
  outline-offset: 3px;
}
.ccf__tile.is-selected .ccf__name::after { transform: translateX(-50%) scaleX(1); }
.ccf__tile.is-selected::before { background: rgba(0, 0, 0, 0.28); }
/* While any tile is selected, the others step back (hover brings one forward) */
.ccf--filtering .ccf__tile:not(.is-selected) { opacity: 0.5; }
.ccf--filtering .ccf__tile:not(.is-selected):hover,
.ccf--filtering .ccf__tile:not(.is-selected):focus-visible { opacity: 1; }
@media screen and (max-width: 749px) {
  .ccf { padding: 2.4rem 20px 0.6rem; }
  .ccf__tile { width: 15rem; }
  .ccf__name { font-size: 1.2rem; }
}

/* ==========================================================================
   FAQ GRID  —  /pages/faq (section: faq-grid.liquid, template: page.faq.json)
   A grid of Q&A "boxes" with category filter tabs (All default) + one featured
   accent card. IvyMode headings / Articulat body / Commuters labels; sharp
   corners; underline links (never boxed buttons). Colours from design-system.md.
   ========================================================================== */
.faq-grid { padding: clamp(56px, 8vw, 104px) 0; background: #ffffff; }   /* white, matching the Contact + Journal pages */
.faq-grid__inner { max-width: 1300px; margin: 0 auto; padding: 0 var(--jc-inset); }

/* --- header: heading, then intro text and the contact button stacked beneath it, all left-aligned --- */
.faq-grid__head {
  display: flex; flex-direction: column; align-items: flex-start; text-align: left;
  margin-bottom: clamp(30px, 4vw, 50px);
}
.faq-grid__title {
  margin: 0 0 1.4rem; font-family: "ivymode", serif; font-weight: 300;
  font-size: clamp(3.2rem, 4.4vw, 4.6rem); letter-spacing: 0.02em; line-height: 1.14;
  color: #1a1a1a;
}
.faq-grid__lede { max-width: 46rem; }   /* readable measure — the heading above stays full width (one line) */
.faq-grid__lede p {
  margin: 0; font-family: "articulat-cf", sans-serif; font-weight: 300;
  font-size: 1.5rem; line-height: 1.6; color: #4a4a4a;
}
/* Black box button — deliberately matches the Contact page's "Send" (.button under background-1:
   bg #000 / label #fdfdf9, 4.5rem tall, 3rem side padding, sharp corners). This is an explicit
   exception to the house underline-button style, requested for parity with the Contact page. */
.faq-grid__contact {
  display: inline-flex; align-items: center; justify-content: center;
  align-self: flex-start; margin-top: clamp(18px, 2vw, 26px);
  min-height: 4.5rem; min-width: 12rem; padding: 0 3rem;
  background: #000; color: #fdfdf9; border: 0; border-radius: 0;
  font-family: "commuters-sans", sans-serif; font-weight: 400; font-size: 1.2rem;
  letter-spacing: 0.1em; text-transform: uppercase; text-decoration: none;
  transition: transform 0.3s cubic-bezier(0.22, 1, 0.36, 1), box-shadow 0.3s ease, opacity 0.25s ease;
}
.faq-grid__contact:hover, .faq-grid__contact:focus-visible {
  transform: translateY(-2px) scale(1.02);
  box-shadow: 0 16px 40px -16px rgba(0, 0, 0, 0.45);
  opacity: 1;
}

/* --- category filter tabs: same treatment as the Journal page's .blog-filter / .filter-btn
       (10px diamond marker that fills on hover/active, 11px uppercase commuters-sans, 30px gaps).
       Restated rather than reusing .filter-btn because these are <button>s driving the JS filter. --- */
.faq-grid__tabs {
  display: flex; flex-wrap: wrap; gap: 30px;
  margin-bottom: clamp(26px, 3vw, 40px);
}
.faq-grid__tab {
  appearance: none; background: none; border: 0; cursor: pointer; padding: 0;
  display: inline-flex; align-items: center;
  font-family: "commuters-sans", sans-serif; font-weight: 400; font-size: 11px;
  letter-spacing: 0.1em; text-transform: uppercase; color: #000; white-space: nowrap;
}
.faq-grid__tab::before {
  content: ''; display: inline-block; box-sizing: border-box;
  height: 10px; width: 10px; margin-right: 10px;
  background: transparent; border: 1px solid #000; transform: rotate(45deg);
  transition: background-color .3s ease-in-out;
}
.faq-grid__tab.is-active::before, .faq-grid__tab:hover::before { background-color: #000; }
.faq-grid__tab:focus-visible { outline: 2px solid #1a1a1a; outline-offset: 3px; }

/* --- the grid of Q&A boxes --- */
.faq-grid__cards {
  display: grid; grid-template-columns: repeat(3, 1fr);
  gap: clamp(14px, 1.6vw, 22px);
}
.faq-grid__card {
  display: flex; flex-direction: column; align-items: stretch;
  border: 1px solid rgba(26, 26, 26, 0.12); border-radius: 0;   /* sharp corners */
  padding: clamp(20px, 2.2vw, 30px);
  background: transparent;
  transition: background .25s ease, box-shadow .3s ease, border-color .25s ease, transform .3s ease;
}
.faq-grid__card[hidden] { display: none; }   /* companion to the hidden attr (a display rule would otherwise defeat it) */
/* Hover/focus → frosted glass (monochrome): a slightly-whiter translucent fill + blur + hairline border
   + soft black-alpha lift, so the highlight follows the cursor across whichever card is hovered. Matches
   the site's nav/search frost language. */
.faq-grid__card:hover,
.faq-grid__card:focus-within {
  /* faint neutral wash (a white fill would be invisible on the now-white page) + darker hairline,
     soft lift shadow and a 2px rise, so the highlight clearly follows the cursor */
  background: rgba(0, 0, 0, 0.022);
  border-color: rgba(26, 26, 26, 0.3);
  /* deepened and given a slight expand to match the house button's hover. 1.01 not 1.02 —
     these are large grid items and a bigger scale visibly laps the neighbouring card. */
  box-shadow: 0 16px 44px -18px rgba(0, 0, 0, 0.42);
  transform: translateY(-2px) scale(1.01);
}
@media (prefers-reduced-motion: reduce) {
  .faq-grid__card { transition: none; }
  .faq-grid__card:hover, .faq-grid__card:focus-within { transform: none; }
}
/* Q/A rows — hanging prefix label to the left, aligned to the first line of its text */
.faq-grid__row { display: flex; align-items: flex-start; gap: clamp(10px, 1vw, 14px); }
.faq-grid__row--q { margin-bottom: clamp(10px, 1.4vw, 16px); }
.faq-grid__prefix {
  flex: 0 0 auto; min-width: 1.2em;
  font-family: "ivymode", serif; font-weight: 300; font-style: italic;
  font-size: 1.9rem; line-height: 1.3; color: #1a1a1a;
}
.faq-grid__q {
  flex: 1 1 auto; min-width: 0;
  margin: 0; font-family: "ivymode", serif; font-weight: 300;
  font-size: 1.9rem; letter-spacing: 0.01em; line-height: 1.3; color: #1a1a1a;
  text-transform: none;   /* override the theme-wide uppercase on IvyMode headings — sentence-case questions read calmer across a 9-card grid (matches the reference) */
}
.faq-grid__a { flex: 1 1 auto; min-width: 0; color: #4a4a4a; }
.faq-grid__a p { margin: 0 0 0.9rem; font-family: "articulat-cf", sans-serif; font-weight: 300; font-size: 1.4rem; line-height: 1.7; color: #4a4a4a; }
.faq-grid__a p:last-child { margin-bottom: 0; }
.faq-grid__a ul { margin: 0 0 0.9rem; padding-left: 1.8rem; }
.faq-grid__a li { font-family: "articulat-cf", sans-serif; font-weight: 300; font-size: 1.4rem; line-height: 1.6; color: #4a4a4a; margin-bottom: 0.3rem; }
.faq-grid__a a { color: inherit; text-decoration: underline; text-underline-offset: 2px; }

@media screen and (max-width: 989px) {
  .faq-grid__cards { grid-template-columns: repeat(2, 1fr); }
  .faq-grid__tabs { gap: 10px 20px; }   /* Journal's tighter mobile filter spacing */
}
@media screen and (max-width: 749px) {
  .faq-grid__cards { grid-template-columns: 1fr; }
  .faq-grid__lede { max-width: 100%; }
}

/* ==========================================================================
   TRUNK SHOWS  —  /pages/trunk-shows (section: trunk-shows.liquid)
   Country filter tabs (diamond markers, same as Journal/FAQ) + event cards with
   a small full-bleed image, details, and a black "Book now" button. Monochrome,
   sharp corners, IvyMode names / Articulat body / Commuters labels.
   ========================================================================== */
.ts { padding: clamp(20px, 3vw, 40px) 0 clamp(56px, 8vw, 100px); background: #ffffff; }
.ts__inner { max-width: 1300px; margin: 0 auto; padding: 0 var(--jc-inset); }
.ts__title {
  margin: 0 0 clamp(20px, 3vw, 32px);
  font-family: "ivymode", serif; font-weight: 300;
  font-size: clamp(2.6rem, 3.4vw, 3.64rem); letter-spacing: 0.02em; line-height: 1.2; color: #1a1a1a;
}

/* --- country filter tabs: identical treatment to the Journal / FAQ filters --- */
.ts__tabs { display: flex; flex-wrap: wrap; gap: 30px; margin-bottom: clamp(26px, 3vw, 40px); }
.ts__tab {
  appearance: none; background: none; border: 0; cursor: pointer; padding: 0;
  display: inline-flex; align-items: center;
  font-family: "commuters-sans", sans-serif; font-weight: 400; font-size: 11px;
  letter-spacing: 0.1em; text-transform: uppercase; color: #000; white-space: nowrap;
}
.ts__tab::before {
  content: ''; display: inline-block; box-sizing: border-box;
  height: 10px; width: 10px; margin-right: 10px;
  background: transparent; border: 1px solid #000; transform: rotate(45deg);
  transition: background-color .3s ease-in-out;
}
.ts__tab.is-active::before, .ts__tab:hover::before { background-color: #000; }
.ts__tab:focus-visible { outline: 2px solid #1a1a1a; outline-offset: 3px; }

/* --- the grid of event cards --- */
.ts__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(14px, 1.6vw, 22px); }
.ts-card {
  display: flex; flex-direction: column;
  border: 1px solid rgba(26, 26, 26, 0.12); border-radius: 0;   /* sharp corners */
  background: transparent; overflow: hidden;                     /* clips the image to the card edge */
  padding: 0;                                                    /* image bleeds; the body carries the padding */
  transition: border-color .25s ease, box-shadow .3s ease, transform .3s ease;
}
.ts-card[hidden] { display: none; }   /* companion to the hidden attr (a display rule would otherwise defeat it) */
.ts-card:hover, .ts-card:focus-within {
  border-color: rgba(26, 26, 26, 0.3);
  box-shadow: 0 14px 40px -26px rgba(0, 0, 0, 0.32);
  transform: translateY(-2px);
}
@media (prefers-reduced-motion: reduce) {
  .ts-card { transition: none; }
  .ts-card:hover, .ts-card:focus-within { transform: none; }
}
.ts-card__img {                        /* small + full-bleed across the top of the card */
  display: block; width: 100%; height: clamp(150px, 14vw, 200px);
  object-fit: cover; object-position: 50% 30%;
}
.ts-card__body {
  display: flex; flex-direction: column; align-items: flex-start;
  padding: clamp(20px, 2.2vw, 28px); flex: 1 1 auto;
}
.ts-card__name {
  margin: 0 0 0.8rem; font-family: "ivymode", serif; font-weight: 300;
  font-size: 2rem; letter-spacing: 0.01em; line-height: 1.25; color: #1a1a1a; text-transform: none;
}
.ts-card__name a { color: inherit; text-decoration: none; border-bottom: 1px solid transparent; transition: border-color .25s ease; }
.ts-card__name a:hover, .ts-card__name a:focus-visible { border-bottom-color: #1a1a1a; }
.ts-card__place {
  margin: 0 0 1.2rem; font-family: "commuters-sans", sans-serif; font-weight: 400;
  font-size: 1.1rem; letter-spacing: 0.1em; text-transform: uppercase; color: #4a4a4a;
}
.ts-card__dates {
  margin: 0 0 0.5rem; font-family: "articulat-cf", sans-serif; font-weight: 300;
  font-size: 1.5rem; line-height: 1.5; color: #1a1a1a;
}
.ts-card__labels {
  margin: 0 0 auto; padding-bottom: clamp(18px, 2vw, 24px);
  font-family: "articulat-cf", sans-serif; font-weight: 300;
  font-size: 1.35rem; line-height: 1.6; color: #4a4a4a;
}
/* Black box button — same spec as the Contact page's "Send" and the FAQ's "Contact us". */
.ts-card__book {
  display: inline-flex; align-items: center; justify-content: center; align-self: flex-start;
  min-height: 4.5rem; min-width: 12rem; padding: 0 3rem;
  background: #000; color: #fdfdf9; border: 0; border-radius: 0;
  font-family: "commuters-sans", sans-serif; font-weight: 400; font-size: 1.2rem;
  letter-spacing: 0.1em; text-transform: uppercase; text-decoration: none;
  transition: transform 0.3s cubic-bezier(0.22, 1, 0.36, 1), box-shadow 0.3s ease, opacity 0.25s ease;
}
.ts-card__book:hover, .ts-card__book:focus-visible {
  transform: translateY(-2px) scale(1.02);
  box-shadow: 0 16px 40px -16px rgba(0, 0, 0, 0.45);
  opacity: 1;
}

@media screen and (max-width: 989px) {
  .ts__grid { grid-template-columns: repeat(2, 1fr); }
  .ts__tabs { gap: 10px 20px; }
}
@media screen and (max-width: 749px) {
  .ts__grid { grid-template-columns: 1fr; }
}
/*-------------- ALL DRESSES COLLECTION (SEO intro) ------------------*/

/* templates/collection.all-dresses.json mounts Dawn's `rich-text` between the collection
   banner and the product grid to carry the FWeb SEO brief's intro copy + appointment CTA.
   Dawn styles that section with its own defaults, so scope it to brand type here:
   body = Articulat CF (matching .stk__intro), CTA = the house underline button
   (same spec as .cs__btn / .cta__btn / the stockist page's image-with-text button). */
.template-name--all-dresses .rich-text__text,
.template-name--all-dresses .rich-text__text p {
  font-family: "articulat-cf", sans-serif !important;
  font-weight: 300;
  font-size: 1.4rem;
  line-height: 1.7;
  color: #4a4a47;
  margin: 0 auto;
  max-width: 82rem;
}
.template-name--all-dresses .rich-text__buttons { margin-top: 2.4rem; }
/* The SEO intro's "Book a Bridal Appointment" → the house black box.
   Rewritten in place rather than left to the house rule: these two had to use !important to beat
   Dawn's own .button, so a later unprefixed rule can never win against them. */
.template-name--all-dresses .rich-text__buttons .button {
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
  min-height: 4.5rem;
  min-width: 12rem;
  margin: 0;
  padding: 0 3rem !important;
  background: #000 !important;
  border: 0 !important;
  border-radius: 0 !important;
  box-shadow: none;
  color: #fdfdf9 !important;
  font-family: "commuters-sans", sans-serif !important;
  font-size: 1.2rem !important;
  font-weight: 400 !important;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  text-decoration: none;
  line-height: 1.2;
  transition: transform 0.3s cubic-bezier(0.22, 1, 0.36, 1), box-shadow 0.3s ease;
}
.template-name--all-dresses .rich-text__buttons .button::before,
.template-name--all-dresses .rich-text__buttons .button::after {
  display: none !important;
  box-shadow: none !important;
}
.template-name--all-dresses .rich-text__buttons .button:hover,
.template-name--all-dresses .rich-text__buttons .button:focus-visible {
  opacity: 1;
  background: #000 !important;
  color: #fdfdf9 !important;
  transform: translateY(-2px) scale(1.02);
  box-shadow: 0 16px 40px -16px rgba(0, 0, 0, 0.45) !important;
}
@media (prefers-reduced-motion: reduce) {
  .template-name--all-dresses .rich-text__buttons .button:hover, .template-name--all-dresses .rich-text__buttons .button:focus-visible { transform: none; }
}

/* Card description + "Discover Dress" prompt — opt-in via the product grid's
   "Show product description on cards" setting (FWeb SEO brief). Only the all-dresses
   grid switches it on, so homepage carousels keep the minimal image/name/price card. */
.card__desc {
  margin: 0.6rem 0 0;
  font-family: "articulat-cf", sans-serif !important;
  font-weight: 300;
  font-size: 1.25rem;
  line-height: 1.55;
  color: #4a4a47;
  /* Clamp to two lines so every card is the same height and the DISCOVER DRESS
     baselines line up across a row. The clamp is visual only — the full sentence
     stays in the HTML, so crawlers still index the complete description. */
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  min-height: calc(2 * 1.55em);
}
.card__discover {
  display: inline-block;
  align-self: flex-start;
  /* .card-information is display:contents, so these children lay out inside the flex
     column .card__content — margin-top:auto therefore pins the prompt to the card's
     bottom, keeping the CTA baseline level across a row of uneven descriptions. */
  margin-top: auto;
  padding-top: 1rem;
  padding-bottom: 3px;
  border-bottom: 1px solid currentColor;
  font-family: "commuters-sans", sans-serif;
  font-size: 1.1rem;
  font-weight: 400;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: #1a1a1a;
  transition: opacity 0.25s ease;
}
.card-wrapper:hover .card__discover,
.card-wrapper:focus-within .card__discover { opacity: 0.6; }

/* Section supporting copy under a .jc-sec-head title (FWeb SEO brief adds a short
   paragraph to the labels, dress-scroller and real-brides sections). */
.jc-sec-head__intro {
  margin: 1.4rem auto 0;
  max-width: 76rem;
  font-family: "articulat-cf", sans-serif !important;
  font-weight: 300;
  font-size: 1.4rem;
  line-height: 1.7;
  color: #4a4a47;
  text-align: center;
}
/* Dawn's multicolumn heading block is left-aligned inside page-width, so centre
   the intro on the section rather than inheriting the title wrapper's alignment. */
.multicolumn__intro { margin-bottom: 2.4rem; }

/* Real-brides tile: gown name + house, between the couple's name and the CTA. */
.rb__dress,
.rb__label {
  font-family: "articulat-cf", sans-serif !important;
  font-weight: 300;
  font-size: 1.15rem;
  line-height: 1.45;
  letter-spacing: 0.02em;
  color: #fff;
}
.rb__label { text-transform: uppercase; letter-spacing: 0.12em; font-size: 1.05rem; opacity: 0.85; }
/* the overlay gap is 0.7rem; dress+label read as one group, so tighten between them */
.rb__dress + .rb__label { margin-top: -0.35rem; }

@media screen and (max-width: 749px) {
  .jc-sec-head__intro { font-size: 1.3rem; }
  .rb__dress { font-size: 1.05rem; }
  .rb__label { font-size: 0.95rem; }
}

/* Homepage "Find the Dress That Feels Like You" style-cards section (FWeb Section 1).
   Reuses Dawn's collection-list rather than a bespoke section, so pull its heading into
   the house treatment (.jc-sec-head__title) and give the intro room above the grid rule.
   Scoped to the homepage so other collection-list placements keep Dawn's defaults. */
.template-index .collection-list-title {
  font-family: "ivymode", serif !important;
  font-weight: 300;
  font-size: 3.64rem;
  line-height: 1.15;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  color: #1a1a1a;
  text-align: center;
  width: 100%;
  margin: 0;
}
.template-index .collection-list-wrapper .title-wrapper-with-link { justify-content: center; }
.template-index .collection-list__intro { margin-bottom: 3.2rem; }

@media screen and (max-width: 749px) {
  .template-index .collection-list-title { font-size: 2.6rem; }
}

/*-------------- STYLE CARDS  —  "Find the Dress That Feels like You" ------------------*/
/* Figma 729:1882: four 440×498 tiles, 20px gutters, inside the 50px page inset.
   Tile visual language matches the label-page tiles (.ccf__tile): image + scrim +
   centred overlay label. Label typography is IvyMode Light Italic 38.475px in the
   Figma; rendered white here (not the mockup's black) so it stays legible over any
   gown photo — the same choice .ccf__name and .rb__overlay already make. */
.style-cards-section { background: #ffffff; }
/* No heading overrides here on purpose. custom-styles.css already pairs
   `h1..h6 { text-transform: uppercase; letter-spacing: 0.05em }` with
   `h1 em..h6 em { text-transform: none; letter-spacing: 0 }`, so an <em> in the setting
   gives "<em>Find the Dress That Feels</em> like You" -> "Find the Dress That Feels
   LIKE YOU" — the same treatment as "Discover OUR LABELS". Overriding it here previously
   broke both the caps and the house tracking. */
.sc {
  padding-left: var(--jc-inset, 50px);
  padding-right: var(--jc-inset, 50px);
}
.sc__grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 20px;
  margin: 0;
  padding: 0;
  list-style: none;
}
.sc__item { min-width: 0; }
.sc__tile {
  position: relative;
  display: block;
  overflow: hidden;
  aspect-ratio: 440 / 498;
  text-decoration: none;
  background: #e9e6df;
}
.sc__img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform 0.6s cubic-bezier(0.22, 1, 0.36, 1);
}
/* scrim as a pseudo-element — base.css has `div:empty { display: none }`, and an
   empty tint div would vanish. Same reason .ccf__tile::before exists. */
.sc__tile::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  background: rgba(0, 0, 0, 0.18);
  transition: background 0.3s ease;
  pointer-events: none;
}
.sc__name {
  position: absolute;
  inset: 0;
  z-index: 2;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0 1rem;   /* same as .ccf__name */
  /* Design system, not the Figma mockup. Every tile label on the site is small, uppercase
     and widely tracked — .ccf__name (label-page collection tiles) is 1.5rem commuters-sans
     / 0.14em / w400, and this matches it exactly so the homepage and label pages read as
     one system. The Figma draws these at 38.5px italic IvyMode; that was flagged and the
     design system won. A fixed 15px also removes the whole "will the longest label wrap"
     problem — it fits at every viewport. */
  font-family: "commuters-sans", sans-serif;
  font-weight: 400;
  font-style: normal;
  font-size: 1.5rem;
  line-height: 1.3;
  text-transform: uppercase;
  letter-spacing: 0.14em;
  color: #fff;
  text-align: center;
  text-shadow: 0 1px 18px rgba(0, 0, 0, 0.3);
  pointer-events: none;
}
.sc__tile:hover .sc__img,
.sc__tile:focus-visible .sc__img { transform: scale(1.05); }
.sc__tile:hover::before,
.sc__tile:focus-visible::before { background: rgba(0, 0, 0, 0.28); }
.sc__tile:focus-visible { outline: 2px solid #1a1a1a; outline-offset: 3px; }

/* No tablet override — the label is a fixed 1.5rem at every width, as .ccf__name is. */
/* mobile: horizontal scroll rather than a cramped 4-up. Plain overflow scrolling —
   no drag JS, so none of the pointer-capture rules apply. */
@media screen and (max-width: 749px) {
  /* The inset moves OFF the container and ONTO the scroller. `.sc` used to carry
     `padding-left: var(--jc-inset)` with the right pad zeroed so the cards could bleed off
     the screen edge — but .jc-sec-head centres inside that lopsided box, so the heading and
     intro sat 25px right of true centre (measured 220 vs 195 at 390px). Padding the grid
     instead gives the heading the full viewport width back while the carousel keeps exactly
     the same geometry: first card at 50px, 50px of trailing pad, bleeding right. */
  .sc { padding-left: 0; padding-right: 0; }
  .sc__grid {
    display: flex;
    gap: 12px;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    /* 1.6rem, not --jc-inset: the mobile guide is 16px (the hamburger sits at 15px and every
       other section's mobile inset is 1.6rem). --jc-inset is the 50px DESKTOP inset and left this
       carousel visibly further in than the sections above and below it. */
    padding-left: 1.6rem;
    padding-right: 1.6rem;
    /* The snapport starts at the padding box, so without this the first card's
       `scroll-snap-align: start` snaps the container along on load and eats the inset. */
    scroll-padding-left: 1.6rem;
  }
  .sc__grid::-webkit-scrollbar { display: none; }
  .sc__item { flex: 0 0 68%; scroll-snap-align: start; }
}

/* ==========================================================================
   HOUSE BUTTON  —  black box, white label (2026-09-05)
   ==========================================================================
   One CTA language across the site. The spec is lifted verbatim from the FAQ's "Contact us"
   (.faq-grid__contact) and Trunk Shows' "Book now" (.ts-card__book), which in turn came from the
   Contact page's "Send" — so this consolidates onto a style that was already here rather than
   inventing a third one.

   WHEN TO USE IT — a box promises an independently clickable target, so it earns its weight only
   when the CTA IS the target:
     ✔ convert  — a destination button: one primary action that takes the user somewhere
     ✘ leave    — a label sitting inside/over a larger clickable card (.rb__see, .card__discover),
                  a repeated secondary utility link in a list (.stk-store__link), or an in-place
                  control rather than a destination (.stk__showall, .search-overlay__clear)
   The About page keeps its own underline links: it is a bespoke editorial layout and black boxes
   are too heavy against it (see CLAUDE.md).

   ON DARK BACKDROPS use the --invert twin: same box, colours swapped. Applied wherever the CTA
   sits over photography or a dark panel. */
.jc-btn,
.cs__btn,
.sp__view,
.multicolumn--labels .alt-btn,
.template-name--all-dresses .rich-text__buttons .button,
.template-name--stockists .image-with-text .button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 4.5rem;
  min-width: 12rem;
  padding: 0 3rem;
  background: #000;
  color: #fdfdf9;
  border: 0;
  border-radius: 0;
  font-family: "commuters-sans", sans-serif;
  font-weight: 400;
  font-size: 1.2rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  text-decoration: none;
  /* transform + shadow only — never `all`, and never a colour transition that would fight
     the invert variants */
  transition: transform 0.3s cubic-bezier(0.22, 1, 0.36, 1), box-shadow 0.3s ease, opacity 0.25s ease;
}

/* Hover: expand slightly and drop a soft glow. Same gesture as the FAQ Q&A cards, deepened —
   the old card shadow (-26px spread, 0.32 alpha) barely read once the page went white. */
.jc-btn:hover, .jc-btn:focus-visible,
.cs__btn:hover, .cs__btn:focus-visible,
.sp__view:hover, .sp__view:focus-visible,
.multicolumn--labels .alt-btn:hover, .multicolumn--labels .alt-btn:focus-visible,
.template-name--all-dresses .rich-text__buttons .button:hover,
.template-name--all-dresses .rich-text__buttons .button:focus-visible,
.template-name--stockists .image-with-text .button:hover,
.template-name--stockists .image-with-text .button:focus-visible {
  transform: translateY(-2px) scale(1.02);
  box-shadow: 0 16px 40px -16px rgba(0, 0, 0, 0.45);
  opacity: 1;
}
.jc-btn:focus-visible,
.cs__btn:focus-visible,
.sp__view:focus-visible,
.multicolumn--labels .alt-btn:focus-visible { outline: 2px solid currentColor; outline-offset: 3px; }

/* --- inverted twin: white box, dark label. For CTAs sitting on photography or a dark panel.
       Scoped by section rather than by a modifier class so no Liquid has to change. --- */
.jc-btn--invert,
/* (the hero's .hvc__btn was here — reverted to its underline on 2026-09-05, client preference) */
.collection-split .cs__btn,             /* appointment split — over photography */
.stockist-hero .cs__btn,                /* find a store — over photography */
.sp__view {                             /* instagram popup — measured backdrop rgb(38,38,38) */
  background: #ffffff;
  color: #1a1a1a;
}
.jc-btn--invert:hover, .jc-btn--invert:focus-visible,
.collection-split .cs__btn:hover, .collection-split .cs__btn:focus-visible,
.stockist-hero .cs__btn:hover, .stockist-hero .cs__btn:focus-visible,
.sp__view:hover, .sp__view:focus-visible {
  box-shadow: 0 16px 40px -14px rgba(0, 0, 0, 0.6);
}

@media (prefers-reduced-motion: reduce) {
  .jc-btn, .cs__btn, .sp__view,
  .multicolumn--labels .alt-btn { transition: box-shadow 0.3s ease; }
  .jc-btn:hover, .cs__btn:hover, .sp__view:hover,
  .multicolumn--labels .alt-btn:hover { transform: none; }
}

/* Contact page "Send" — the button this whole language came from. Scoped to the template on
   purpose: Dawn's global `.button` also dresses the cart drawer and the checkout button, and
   those should not grow on hover. */
.template-name--contact .contact .button,
.template-name--contact form .button {
  transition: transform 0.3s cubic-bezier(0.22, 1, 0.36, 1), box-shadow 0.3s ease, opacity 0.25s ease;
}
.template-name--contact .contact .button:hover,
.template-name--contact .contact .button:focus-visible,
.template-name--contact form .button:hover,
.template-name--contact form .button:focus-visible {
  transform: translateY(-2px) scale(1.02);
  box-shadow: 0 16px 40px -16px rgba(0, 0, 0, 0.45);
}
@media (prefers-reduced-motion: reduce) {
  .faq-grid__contact:hover, .ts-card__book:hover,
  .template-name--contact .contact .button:hover,
  .template-name--contact form .button:hover { transform: none; }
}

/*-------------- PRODUCT CARD HOVER — the FAQ card gesture, stroke on hover only ---------------*/
/* Same lift / expand / glow as .faq-grid__card and .ts-card__book, with the one difference asked
   for: no stroke at rest, only under the cursor.

   The fill, the stroke and the drop shadow are all ONE layered box-shadow, so they share a single
   rectangle. Earlier this used `outline` for the stroke and a separate box-shadow for the glow —
   two different rectangles — which put a shadow band inside the ring and left the stroke floating
   6px out, attached to nothing.

   box-shadow paints outside the border box, behind the element's own background and content, and
   layers paint FIRST ON TOP. So, in order:
     1. a 6px white ring   — fills the gap and masks the drop shadow inside it
     2. a 1px stroke at 7px — the visible edge of that fill
     3. the drop shadow     — can therefore only appear from the stroke outwards
   The image and caption sit above all three. No pseudo-element, no z-index, no stacking context,
   and box-shadow never affects layout so the rest geometry is untouched.

   Rest keeps the same three layers at zero alpha rather than `none`, so the transition interpolates
   instead of snapping.

   Geometry note: the product grid gap is 20px, so the ring + half the scale growth has to stay under
   10px per side or a hovered card's frame reaches into its neighbour. 7px + scale(1.008) on a
   433px card = ~8.7px per side, leaving ~11px clear. */
@media (hover: hover) and (pointer: fine) {
  .card-wrapper.product-card-wrapper {
    /* The white ring is OPAQUE AT REST, not transparent. Measured on the old version: at ~120ms
       the ring was only 58% opaque while the drop shadow was already at 24%, so the shadow showed
       THROUGH the half-formed mask right at the card edge — the caption looked like it was touching
       a dark border for a frame or two. An always-on white ring masks from frame one; it is
       invisible because every surface behind these cards is #ffffff. (If a card is ever placed on
       a coloured background, this would show as a halo — revisit then.) Only the stroke and the
       drop shadow animate. */
    box-shadow:
      0 0 0 6px #ffffff,
      0 0 0 7px rgba(26, 26, 26, 0),
      0 16px 40px -18px rgba(0, 0, 0, 0);
    /* explicit, never `all` — these cards compute `transition: all` from the theme's own card CSS.
       Same duration AND same curve on both, so the lift and the frame arrive together; the old
       fast-out cubic-bezier finished the transform while the frame was still fading in. */
    transition: transform 0.3s ease, box-shadow 0.3s ease;
  }
  .card-wrapper.product-card-wrapper:hover,
  .card-wrapper.product-card-wrapper:focus-within {
    box-shadow:
      0 0 0 6px #ffffff,
      0 0 0 7px rgba(26, 26, 26, 0.3),
      0 16px 40px -18px rgba(0, 0, 0, 0.42);
    transform: translateY(-2px) scale(1.008);
    z-index: 1;   /* the frame and shadow sit over the neighbouring cards, not under them */
    position: relative;
  }
  /* Similar Dresses is a mouse drag-to-scroll strip: cards slide under a stationary cursor, which
     is how a hover state gets stuck mid-gesture. The track already flags itself while dragging. */
  .sd__track.is-dragging .card-wrapper.product-card-wrapper:hover {
    transform: none;
    box-shadow: none;
  }
}
@media (prefers-reduced-motion: reduce) {
  .card-wrapper.product-card-wrapper:hover,
  .card-wrapper.product-card-wrapper:focus-within { transform: none; }
}

/*-------------- ACTIVE FILTER PILLS — square, like everything else ---------------*/
/* Dawn draws these as pills (component-facets.css: `span.active-facets__button-inner
   { border-radius: 2.6rem }`). That file is loaded by the section, i.e. AFTER this stylesheet, so
   a same-specificity override would lose on source order — hence the extra `.active-facets`
   qualifier to beat (0,1,1). Sharp corners are the house language (black buttons, FAQ/Trunk Shows
   cards, product-card frame). */
.active-facets span.active-facets__button-inner,
.active-facets span.active-facets__button-remove {
  border-radius: 0;
}

/*-------------- BODY COPY — sentence-aware wrapping (snippets/jc-copy.liquid) ------------------*/
/* Desktop puts each sentence on its own line so copy never breaks mid-thought; mobile lets
   them flow as normal prose. The literal space emitted between spans is what keeps the inline
   case reading correctly. Purely presentational — no SEO effect, nothing hidden. */
.jc-copy__s { display: inline; }
@media screen and (min-width: 750px) {
  .jc-copy__s { display: block; }
}

/* the card photo is a link (see multicolumn.liquid) — an <a> is inline by default and
   would collapse the wrapper's layout */
.multicolumn-card__image-link { display: block; }

/*-------------- BRAND LABELS — mobile (no hover exists) ------------------*/
@media screen and (max-width: 749px) {
  /* Take the info panel out of the overlay and put it under the photo, always visible.
     On touch there is no hover, so the description and Discover link were unreachable. */
  .multicolumn--labels .multicolumn-card__info {
    position: static;
    width: auto;
    height: auto;
    opacity: 1;
    padding: 1.6rem 1.2rem 0;
    background-color: transparent;
    border: 0;
  }
  /* The photo was dimmed (black backing + 0.7) only so white hover text would read over it.
     With the text moved out from over the image, that dimming just mutes the gown. */
  .multicolumn--labels .multicolumn-card__image-wrapper { background-color: transparent; }
  .multicolumn--labels .multicolumn-card__image-wrapper .media img { opacity: 1; }
  /* The wordmark already sits on the photo itself — repeating it below doubles the card height. */
  .multicolumn--labels .overlay-logo { display: none; }
}
