/**
 * Product-detail composition. WooCommerce owns the gallery, variations, stock,
 * add-to-cart POST/AJAX and extension hooks. The shared Button primitive lives
 * in components.css; this stylesheet only arranges the product screen.
 */
body.single-product .sf-content{
  width:100%;
  max-width:none!important;
  padding:0 0 64px;
  background:var(--sf-ui-page);
}
body.single-product .sf-content > :is(.woocommerce,.wp-block-woocommerce-legacy-template,[data-block-name="woocommerce/legacy-template"]){
  width:100%;
  max-width:none!important;
  margin-inline:auto;
}
body.single-product .woocommerce-breadcrumb{
  margin:0 0 clamp(18px,3vw,32px);
  color:var(--sf-muted);
  font-size:12px;
  line-height:1.6;
}
body.single-product .woocommerce-breadcrumb a{
  color:var(--sf-ui-control-ink);
  text-underline-offset:3px;
}
body.single-product .sf-product-overview,
body.single-product .sf-product-media{display:contents}
body.single-product div.product{
  display:grid;
  grid-template-columns:minmax(0,1fr);
  align-items:start;
  column-gap:clamp(32px,5vw,76px);
  row-gap:32px;
  margin:0;
  min-width:0;
}
body.single-product div.product::before,
body.single-product div.product::after{content:none}
body.single-product div.product .sf-product-media > .woocommerce-product-gallery{
  grid-column:1;
  grid-row:1;
  float:none!important;
  width:100%!important;
  min-width:0;
  margin:0!important;
}
body.single-product div.product .sf-product-overview > .summary{
  grid-column:1;
  grid-row:auto;
  float:none!important;
  width:100%!important;
  min-width:0;
  margin:0!important;
  max-width:760px;
  justify-self:center;
  padding:0 max(20px,5vw);
}
body.single-product div.product .product_title{
  margin:0 0 14px;
  color:var(--sf-ui-ink);
  font-size:clamp(26px,3.4vw,38px);
  font-weight:500;
  line-height:1.2;
  letter-spacing:-.035em;
  overflow-wrap:anywhere;
}
body.single-product div.product :is(.summary > .price,.sf-product-price-row > .price){
  margin:0;
  color:var(--sf-ui-ink);
  font-size:clamp(21px,2.2vw,28px);
  font-weight:500;
  line-height:1.4;
  font-variant-numeric:tabular-nums;
}
body.single-product div.product .price del{color:var(--sf-muted);opacity:.7}
body.single-product div.product .price ins{
  color:inherit;
  background:none;
  font-weight:inherit;
  text-decoration:none;
}
body.single-product div.product .woocommerce-product-details__short-description{
  margin:0 0 20px;
  max-width:52ch;
  color:var(--sf-muted);
  font-size:14px;
  line-height:1.8;
}
body.single-product div.product .woocommerce-product-details__short-description p{
  margin:0 0 12px;
}
body.single-product div.product p.stock{
  margin:12px 0 20px;
  font-size:13px;
  font-weight:500;
}
body.single-product div.product form.cart{
  margin:0 0 28px;
  padding:22px 0;
  border-top:1px solid var(--sf-ui-border);
  border-bottom:1px solid var(--sf-ui-border);
}
body.single-product div.product form.cart:not(.variations_form):not(.grouped_form),
body.single-product div.product form.cart .woocommerce-variation-add-to-cart{
  display:flex;
  flex-wrap:wrap;
  align-items:stretch;
  gap:10px;
}
body.single-product div.product form.cart .quantity{
  float:none;
  display:flex;
  align-items:stretch;
  margin:0;
}
body.single-product div.product form.cart .quantity input.qty{
  width:76px;
  min-height:var(--sf-ui-action-height);
  padding:0 8px;
  margin:0;
  background:var(--sf-ui-surface);
  color:var(--sf-ui-control-ink);
  border:1px solid var(--sf-ui-border);
  border-radius:var(--sf-ui-control-radius);
  font:inherit;
  font-variant-numeric:tabular-nums;
}
body.single-product div.product form.cart .single_add_to_cart_button{
  flex:1 1 210px;
  width:auto;
  margin:0;
  --sf-ui-button-height:var(--sf-ui-action-height);
  --sf-ui-button-font-size:15px;
}
body.single-product div.product form.cart .variations{
  width:100%;
  margin:0 0 18px;
  border:0;
}
body.single-product div.product form.cart .variations tbody{
  display:grid;
  gap:16px;
}
body.single-product div.product form.cart .variations tr{
  display:grid;
  grid-template-columns:minmax(0,1fr);
  gap:8px;
}
body.single-product div.product form.cart .variations :is(th,td){
  display:block;
  width:100%;
  padding:0;
  border:0;
  text-align:left;
}
body.single-product div.product form.cart .variations label{
  color:var(--sf-ui-control-ink);
  font-size:13px;
  font-weight:500;
}
body.single-product div.product form.cart .variations select{
  width:100%;
  min-height:var(--sf-ui-action-height);
  margin:0;
  padding:0 16px;
  border:1px solid var(--sf-ui-border);
  border-radius:var(--sf-ui-control-radius);
  background:var(--sf-ui-surface);
  color:var(--sf-ui-control-ink);
  font:inherit;
}
body.single-product div.product form.cart .reset_variations{
  display:inline-block;
  margin:8px 0 0;
  color:var(--sf-muted);
  font-size:12px;
  text-underline-offset:3px;
}
body.single-product div.product form.cart .woocommerce-variation{
  margin:0 0 14px;
}
body.single-product div.product form.cart .woocommerce-variation-price .price{
  color:var(--sf-ui-ink);
  font-size:20px;
}
body.single-product div.product form.cart .group_table{
  margin:0 0 16px;
  width:100%;
}
body.single-product div.product .product_meta{
  display:grid;
  gap:8px;
  padding:0;
  color:var(--sf-muted);
  font-size:12px;
  line-height:1.6;
}
body.single-product div.product .product_meta > span{display:block}
body.single-product div.product .product_meta a{
  color:var(--sf-ui-control-ink);
  text-underline-offset:3px;
}
body.single-product div.product > :is(.related,.upsells){
  grid-column:1/-1;
  min-width:0;
  width:100%;
  margin:0;
}
body.single-product div.product > .sf-product-information{
  grid-column:1/-1;width:100%;max-width:760px;min-width:0;
  justify-self:center;margin:0 auto;padding-inline:max(20px,5vw);
}
.sf-product-information-section{border-top:1px solid var(--sf-ui-border)}
.sf-product-information-section:last-of-type{border-bottom:1px solid var(--sf-ui-border)}
.sf-product-information-section > summary{
  display:flex;align-items:center;justify-content:space-between;gap:20px;
  min-height:var(--sf-ui-hit);padding:14px 0;list-style:none;cursor:pointer;
  color:var(--sf-ui-ink);font-size:14px;font-weight:500;line-height:1.5;
}
.sf-product-information-section > summary::-webkit-details-marker{display:none}
.sf-product-information-section > summary::after{content:'+';flex:none;font-size:22px;font-weight:400}
.sf-product-information-section[open] > summary::after{content:'−'}
.sf-product-information-section > summary:focus-visible{outline:2px solid var(--sf-ui-accent);outline-offset:3px}
.sf-product-information-content{
  padding:0 0 20px;color:var(--sf-muted);font-size:14px;line-height:1.8;
  overflow-wrap:anywhere;scroll-margin-top:100px;
}
.sf-product-information-content > :first-child{margin-top:0}
.sf-product-information-content > :last-child{margin-bottom:0}
.sf-product-information-content :is(input,textarea){max-width:100%}
body.single-product div.product > :is(.related,.upsells) > h2,
body.single-product .sf-product-discovery > :is(.related,.upsells) > h2{
  margin:0 0 22px;color:var(--sf-ui-ink);font-size:clamp(21px,2.5vw,28px);
  font-weight:400;letter-spacing:-.025em;
}
body.single-product div.product > :is(.related,.upsells){
  padding-top:28px;
  border-top:1px solid var(--sf-ui-border);
}
/* Related/upsell cards use the same catalog.css as every product loop. */
body.single-product :is(input.qty,select):focus-visible,
body.single-product .sf-product-information-section > summary:focus-visible,
body.single-product .woocommerce-product-gallery a:focus-visible{
  outline:2px solid var(--sf-ui-accent);
  outline-offset:3px;
}
@media(max-width:900px){
  body.single-product div.product{
    grid-template-columns:minmax(0,1fr);
    column-gap:26px;
  }
}
@media(max-width:700px){
  /* The native photo is usable before Woo's footer initialization. */
  body.single-product div.product .sf-product-media > .sf-ui-gallery--scroll{opacity:1!important}
  /* The native title, price, and single Woo form are the usable first
     frame of the mobile panel until the existing adapter enhances them. */
  html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready) div.product > :is(.sf-product-information,.cdl-tb,.related,.upsells){visibility:hidden}
  body.single-product .sf-content{padding:0 0 46px}
  body.single-product .woocommerce-breadcrumb{margin-bottom:18px}
  body.single-product div.product{
    display:block;
  }
  body.single-product div.product .sf-product-media > .woocommerce-product-gallery{
    margin-bottom:24px!important;
  }
  body.single-product div.product .sf-product-overview > .summary{
    padding:0 20px;
    margin:0 auto 36px!important;
  }
  body.single-product div.product .product_title{
    font-size:27px;
    margin-bottom:10px;
  }
  body.single-product div.product .woocommerce-product-details__short-description{
    margin-bottom:24px;
  }

  body.single-product div.product > .sf-product-information,
  body.single-product div.product > :is(.related,.upsells){
    margin-top:32px;
  }
  body.single-product div.product form.cart .single_add_to_cart_button{
    flex:1 1 175px;
  }
}

/* Codela product modules: this is their sole product-page style owner.
   Original plugin markup, conditional output, live scripts and settings stay
   intact. No .cdl-ct default theme stylesheet is loaded on this page. */
.sf-product-price-row{
  display:flex;align-items:baseline;flex-wrap:wrap;gap:8px 14px;
  margin-bottom:18px;min-width:0;
}
.sf-product-price-row > .price{flex:0 1 auto}
/* The visitor counter is gallery-frame metadata, like the native 1/N
   index, not a floating CTA or part of the scrolling first photo. */
body.single-product .sf-product-visitor{
  display:flex;align-items:center;
  position:absolute;z-index:4;inset-inline-start:72px;bottom:20px;
  max-width:calc(100% - 92px);margin:0!important;pointer-events:none;
}
/* Keep the unenhanced desktop / no-script thumbnail controls clear. */
body.single-product:not(.sf-product-sheet-ready) .sf-ui-gallery:has(:is(.flex-control-thumbs,.sf-product-gallery-nav) > :not(:only-child)) .sf-product-visitor{
  bottom:96px;
}
body.single-product .sf-product-visitor[hidden]{display:none!important}
body.single-product .sf-product-visitor .cdl-lv{
  display:inline-flex;align-items:center;gap:5px;
  width:max-content;max-width:100%;
  min-height:0;padding:0;border:0;border-radius:0;
  background:none!important;color:var(--sf-ui-ink);
  font-size:12px;font-weight:400;line-height:1.5;letter-spacing:0;
  box-shadow:none!important;-webkit-backdrop-filter:none;backdrop-filter:none;
}
body.single-product .sf-product-visitor .cdl-lv-text{
  min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
/* The gallery index has no icon: match it for the quiet visitor line. */
body.single-product .sf-product-visitor .cdl-lv-dot{display:none}
body.single-product .sf-product-visitor strong{font-weight:400}
body.single-product.sf-product-sheet-open .sf-product-visitor{visibility:hidden}
@media(max-width:768px){.sf-product-visitor.cdl-lv-hide-mobile{display:none}}
@media(forced-colors:active){
  body.single-product .sf-product-visitor .cdl-lv{color:CanvasText}
}
body.single-product .cdl-ub{
  display:flex;flex-wrap:wrap;gap:6px 12px;min-width:0;
  margin:0;color:var(--sf-muted);font-size:12px;line-height:1.5;
}
.cdl-ub-item{display:inline-flex;align-items:center;gap:5px;overflow-wrap:anywhere}
.cdl-ub-ico{flex:none;width:14px;height:14px}
.cdl-ub-countdown{font-variant-numeric:tabular-nums;font-weight:500}
body.single-product .cdl-de{
  display:flex;align-items:flex-start;gap:10px;width:100%;min-width:0;
  margin:20px 0 10px;padding:0;color:var(--sf-ui-ink);font-size:13px;line-height:1.6;
}
.cdl-de-mark{display:flex;flex:none;margin-top:1px}
.cdl-de-ico{width:20px;height:20px}
.cdl-de-body{flex:1;min-width:0;overflow-wrap:anywhere}
.cdl-de-eta strong{font-weight:500}
.cdl-de-line{color:var(--sf-muted);font-size:12px}
.cdl-de-timer{font-variant-numeric:tabular-nums;font-weight:500}
body.single-product .cdl-fsb-live--product,
body.single-product .cdl-fsb--product{
  display:block;width:100%;min-width:0;max-width:none;
}
body.single-product .cdl-fsb--product{
  margin:10px 0 18px;padding:0;color:var(--sf-muted);font-size:13px;line-height:1.6;
}
.cdl-fsb-live--product:empty{display:none}
.cdl-fsb--product .cdl-fsb-text{display:block;overflow-wrap:anywhere}
.cdl-fsb--product .cdl-fsb-ico{display:none}
.cdl-fsb--product strong{color:var(--sf-ui-ink);font-weight:500}
.cdl-fsb--product .cdl-fsb-track{
  display:block;width:100%;height:3px;margin-top:9px;
  overflow:hidden;background:var(--sf-ui-border);border-radius:var(--sf-ui-pill);
}
.cdl-fsb--product .cdl-fsb-fill{
  display:block;height:100%;background:var(--sf-ui-ink);border-radius:inherit;
}
/* The live module's empty-cart state has only the real threshold message.
   Do not fabricate progress when no current amount/threshold is available. */
/* Theme skin for the original escaped Codela WhatsApp anchor. One entire
   hit target and the existing shared soft IconButton; no copied action. */
body.single-product .cdl-wa{margin:12px 0 0}
body.single-product .cdl-wa-button{
  display:flex;align-items:center;gap:12px;min-height:64px;width:100%;
  box-sizing:border-box;max-width:100%;padding:10px 12px;
  border:1px solid var(--sf-ui-border);
  border-radius:var(--sf-ui-control-radius);
  background:color-mix(in srgb,var(--sf-ui-surface) 46%,transparent);
  color:var(--sf-ui-control-ink);font-size:14px;font-weight:500;
  line-height:1.45;text-decoration:none;touch-action:manipulation;
  -webkit-tap-highlight-color:transparent;
}
body.single-product .cdl-wa-button:focus-visible{
  outline:2px solid var(--sf-ui-accent);outline-offset:3px;
}
/* The arrow is the existing local UI glyph, not a colored emoji or font. */
body.single-product .cdl-wa-button::after{
  content:'';display:block;flex:none;width:17px;height:17px;
  margin-inline-start:auto;background:currentColor;opacity:.66;
  -webkit-mask:url('../icons/arrow-right.svg') center/contain no-repeat;
  mask:url('../icons/arrow-right.svg') center/contain no-repeat;
  transform:rotate(-45deg);
}
body.single-product .cdl-wa-ico{
  --sf-ui-control-ink:#1fa855;--sf-ui-glass-ink:#1fa855;color:#1fa855;
}
.cdl-wa-ico svg{display:block;width:21px;height:21px;flex:none}
/* A quiet, unified reassurance strip; plugin icons, labels, order and
   configuration stay authoritative (including fewer than four items). */
body.single-product div.product .cdl-tb{
  grid-column:1/-1;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
  gap:0;width:100%;max-width:760px;min-width:0;box-sizing:border-box;justify-self:center;
  margin:0 auto;padding:0;overflow:hidden;
  border:1px solid var(--sf-ui-border);
  border-radius:var(--sf-ui-control-radius);
  background:color-mix(in srgb,var(--sf-ui-surface) 32%,transparent);
  color:var(--sf-ui-ink);
}
body.single-product .cdl-tb-item{
  display:flex;align-items:center;gap:10px;min-width:0;min-height:60px;
  padding:12px 14px;font-size:13px;font-weight:500;line-height:1.35;
}
body.single-product .cdl-tb-item + .cdl-tb-item{
  border-inline-start:1px solid var(--sf-ui-border);
}
body.single-product .cdl-tb-ico{display:flex;flex:none;color:var(--sf-muted)}
body.single-product .cdl-tb-ico svg{display:block;width:21px;height:21px}
body.single-product .cdl-tb-img{width:24px;height:24px;object-fit:contain;flex:none}
body.single-product .cdl-tb-label{min-width:0;overflow-wrap:anywhere}
body.single-product .cdl-tb:has(.cdl-tb-item:only-child){grid-template-columns:1fr}
@media(max-width:900px){
  body.single-product .cdl-tb-item:nth-child(odd){border-inline-start:0}
  body.single-product .cdl-tb-item:nth-child(n+3){border-top:1px solid var(--sf-ui-border)}
  body.single-product .cdl-tb-item:nth-child(3):last-child{grid-column:1/-1}
}
@media(min-width:901px){
  body.single-product div.product .summary > .cdl-tb{grid-template-columns:repeat(2,minmax(0,1fr));width:100%;max-width:none;margin:14px 0 0;border:0;border-radius:0;background:transparent}
  body.single-product .summary > .cdl-tb .cdl-tb-item{min-height:50px;padding:10px 0;font-size:12px;font-weight:400;border:0}
  body.single-product .summary > .cdl-tb .cdl-tb-item:nth-child(even){padding-inline-start:16px}
}
@media(max-width:380px){
  body.single-product div.product form.cart .single_add_to_cart_button{
    flex-basis:100%;
  }
}

/* Full-bleed photos sit behind the header only on the single-column layout. */
@media(max-width:900px){body.single-product .sf-shell{padding-top:0}}
body.single-product .sf-content{margin-block-start:0!important}
body.single-product div.product > :is(.related,.upsells){
  max-width:1200px;justify-self:center;padding-inline:max(20px,5vw);margin-inline:auto;
}
body.single-product div.product .sf-product-overview > .onsale{
  position:absolute;z-index:2;top:calc(88px + var(--sf-header-offset,0px));left:20px;
  display:inline-flex;align-items:center;min-width:0;min-height:0;
  margin:0;padding:7px 12px;font-size:12px;font-weight:500;line-height:1.4;
}

/* Existing Woo form controls compose one purchase surface; no second button. */
body.single-product div.product form.cart .sf-product-purchase{
  display:flex;align-items:stretch;gap:8px;flex:1 1 100%;min-width:0;
  padding:6px;
}
body.single-product div.product form.cart .sf-product-purchase .single_add_to_cart_button{
  --sf-ui-control-radius:var(--sf-ui-pill);
  flex:1 1 auto;min-width:0;
}
body.single-product div.product form.cart .sf-product-purchase .quantity input.qty{
  width:64px;border:0;background:transparent;border-radius:var(--sf-ui-pill);
}
@media(max-width:700px){
  body.single-product:has(.sf-product-purchase) .sf-content{
    padding-bottom:calc(112px + env(safe-area-inset-bottom,0px));
  }
  body.single-product div.product form.cart .sf-product-purchase{
    position:fixed;z-index:1000;left:var(--sf-ui-bottom-bar-inset);right:var(--sf-ui-bottom-bar-inset);
    bottom:calc(var(--sf-ui-bottom-bar-gap) + env(safe-area-inset-bottom,0px));
    width:auto;max-width:var(--sf-ui-bottom-bar-max-width);margin:0 auto;
    min-height:var(--sf-ui-bottom-bar-height);padding:var(--sf-ui-bottom-bar-padding);
    --sf-ui-button-height:var(--sf-ui-bottom-bar-control-height);
    --sf-ui-button-padding-y:10px;
  }
  body.single-product div.product form.cart .sf-product-purchase .quantity input.qty{
    min-height:var(--sf-ui-bottom-bar-control-height);
  }
  body.single-product div.product form.cart .sf-product-purchase .single_add_to_cart_button{
    --sf-ui-button-height:var(--sf-ui-bottom-bar-control-height);
  }
  /* Product pages never display the navigation dock, including in dialogs.
     A pending non-product destination may still preview its own real dock. */
  html:not([data-sf-navigation-bottom="dock"]) body.single-product .sf-shell .sf-mobile-dock{display:none!important}
  body.single-product:not(.sf-product-sheet-ready):has(.sf-mobile-dock){padding-bottom:0}
  /* The document's purchase stays hidden while a modal is open. */
  body.single-product:has(#sf-panel[open],.pswp--open) .sf-product-purchase{visibility:hidden}
  body.single-product div.product form.cart:has(.sf-product-purchase){
    border:0;padding:0;
  }
}


/* Placement only: optional global WhatsApp uses the shared soft IconButton. */
body.single-product .sf-product-plugin-footer .cdl-wa-float{
  position:fixed;z-index:999;inset-inline-end:18px;
  bottom:calc(18px + env(safe-area-inset-bottom,0px));color:#1fa855;
}
.sf-product-plugin-footer .cdl-wa-float svg{width:22px;height:22px;display:block}
@media(max-width:700px){
  body.single-product:has(.sf-product-purchase) .sf-product-plugin-footer .cdl-wa-float{
    bottom:calc(var(--sf-ui-bottom-bar-height) + var(--sf-ui-bottom-bar-gap) + 18px + env(safe-area-inset-bottom,0px));
  }
  body.single-product div.product .cdl-tb{margin-top:28px;margin-bottom:28px}
}
body.single-product:has(#sf-panel[open],.pswp--open) .sf-product-plugin-footer{visibility:hidden}

/* Progressive mobile composition. Without JS the native document stays usable. */
.sf-product-sheet-header{position:relative;flex:none;min-height:64px;padding:28px 16px 8px}
.sf-product-sheet-header::before{
  content:'';position:absolute;top:12px;left:calc(50% - 22px);width:44px;height:4px;
  border-radius:var(--sf-ui-pill);background:var(--sf-ui-border);
  /* Same touch feedback token as the shared dock; rest geometry is unchanged. */
  transform:scaleX(1);
  transition:transform var(--sf-ui-motion-press) var(--sf-ui-ease-press);
}
@media(max-width:700px){
  body.sf-product-sheet-ready .sf-product-sheet.is-holding .sf-product-sheet-header::before{
    transform:scaleX(var(--sf-ui-scale-icon));
  }
}
.sf-product-sheet-heading{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,42%);grid-template-rows:minmax(28px,max-content);grid-auto-rows:max-content;align-items:center;column-gap:10px;row-gap:0}
/* Price and urgency are laid out as peers to the native title, without
   moving or cloning plugin nodes. The mobile rules below also apply prepaint. */
.sf-product-sheet-toggle.sf-ui-button{position:absolute;left:calc(50% - 35px);top:0;width:70px;min-width:70px;min-height:44px;padding:0;--sf-ui-button-height:44px;--sf-ui-button-font-size:0px;--sf-ui-button-padding-y:0px;gap:0}
.sf-product-sheet-toggle::after{content:none}
.sf-product-sheet-body{min-height:0;overscroll-behavior:contain;overflow:auto;overflow-x:hidden;scrollbar-width:thin}
@media(max-width:700px){
  /* Root scrolling preserves native browser pull-to-refresh at the top. */
  html:has(body.sf-product-sheet-ready){overscroll-behavior-y:auto;scroll-snap-type:y mandatory;scroll-padding-bottom:calc(var(--sf-product-viewport-current,100dvh) - var(--sf-product-viewport-small,100svh) + var(--sf-product-photo-inset,90px) + env(safe-area-inset-bottom,0px))}
  body.sf-product-sheet-ready{overflow:visible;overscroll-behavior-y:auto;padding-bottom:0}
  /* Suppress bottom rubber-band only in recommendations. Keep native
     pull-to-refresh on the photographs, without changing snap geometry. */
  /* The recommendation list is taller than one viewport. Disable mandatory
     photo snapping only after entering it; otherwise the browser can snap a
     bottomward scroll back to its sole discovery snap point. Photo snapping
     and the native top-refresh path return on leaving discovery. */
  html:has(body.sf-product-sheet-ready .woocommerce-product-gallery.is-discovering){
    overscroll-behavior-y:none;scroll-snap-type:none;
  }
  body.sf-product-sheet-ready:has(.woocommerce-product-gallery.is-discovering){overscroll-behavior-y:none}
  html:has(body.sf-product-sheet-open),body.sf-product-sheet-open{overflow:hidden;overscroll-behavior-y:contain;scroll-snap-type:none}
  body.sf-product-sheet-ready .sf-content{padding-bottom:0!important}
  body.sf-product-sheet-ready div.product{margin:0}
  /* One photo frame from the first paint. The compact title (28px), header
     spacing (36px), purchase (68px) and overlap (16px) reserve 116px. Optional
     urgency adds its existing 24px row. Never resize a photograph after a
     script measures/reparents the purchase sheet. */
  html:is(.sf-product-sheet-pending,:has(body.sf-product-sheet-ready)){
    --sf-product-photo-inset:var(--sf-ui-product-photo-inset);
  }
  html:is(.sf-product-sheet-pending,:has(body.sf-product-sheet-ready)):has(div.product .cdl-ub){
    --sf-product-photo-inset:var(--sf-ui-product-photo-urgency-inset);
  }
  /* Photo presentation is identical before and after the adapter moves the
     existing Woo nodes. Pending is strictly a visibility state, not a second
     desktop/mobile gallery layout. No-JS has neither class and stays native. */
  :is(body.single-product.sf-product-sheet-ready,html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready)) div.product .sf-product-media > .woocommerce-product-gallery{
    --sf-gallery-height:100svh;height:auto;min-height:100svh;overflow:visible;margin:0!important;
  }
  :is(body.single-product.sf-product-sheet-ready,html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready)) div.product .sf-ui-gallery--scroll .woocommerce-product-gallery__wrapper{
    display:block;height:auto;overflow:visible;overscroll-behavior:auto;scroll-snap-type:none;overflow-anchor:none;
  }
  :is(body.single-product.sf-product-sheet-ready,html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready)) div.product .sf-ui-gallery--scroll .woocommerce-product-gallery__wrapper > :is(.woocommerce-product-gallery__image,.woocommerce-product-gallery__image--placeholder){
    display:block;float:none;width:100%;height:calc(var(--sf-product-viewport-large,100lvh) - var(--sf-product-photo-inset,90px) - env(safe-area-inset-bottom,0px));min-height:0;margin:0;padding:0;border:0;
    /* Stable photo edges; shrink only the snap area to the smallest viewport.
       Toolbar animation can then change the viewport without moving photos. */
    scroll-margin-bottom:calc(var(--sf-product-viewport-small,100svh) - var(--sf-product-viewport-large,100lvh));
  }
  body.sf-product-sheet-ready .sf-product-gallery-nav{
    position:fixed;display:flex;flex-direction:column;gap:4px;left:auto;right:8px;top:35%;bottom:auto;
    max-height:calc(50svh - 100px);max-width:44px;overflow-y:auto;overflow-x:hidden;
    padding:0;transform:none;background:transparent!important;box-shadow:none!important;
    border:0;-webkit-backdrop-filter:none;backdrop-filter:none;
  }
  body.sf-product-sheet-ready .sf-product-gallery-thumb.sf-ui-icon-button{width:44px;height:44px}
  body.sf-product-sheet-ready .sf-product-gallery-thumb img{display:block}
  body.sf-product-sheet-ready .sf-product-gallery-count{position:fixed;bottom:calc(var(--sf-product-collapsed-height,210px) + var(--sf-ui-bottom-bar-gap) + 10px + env(safe-area-inset-bottom,0px))}
  /* Match the native gallery counter's one stable viewport baseline.
     Both annotations remain together as the real photo index changes. */
  body.sf-product-sheet-ready .sf-product-visitor{
    position:fixed;top:auto;inset-inline-start:72px;
    bottom:calc(var(--sf-product-collapsed-height,210px) + var(--sf-ui-bottom-bar-gap) + 10px + env(safe-area-inset-bottom,0px));
  }
  :is(body.sf-product-sheet-ready,:where(html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready))) div.product :is(.sf-product-sheet,.sf-product-overview > .summary){
    position:fixed;z-index:1000;inset-inline:var(--sf-ui-bottom-bar-inset);
    bottom:calc(var(--sf-ui-bottom-bar-gap) + env(safe-area-inset-bottom,0px));
    display:flex;flex-direction:column;width:auto;max-width:var(--sf-ui-bottom-bar-max-width);
    max-height:calc(100svh - 84px - var(--sf-header-offset,0px) - var(--sf-ui-bottom-bar-gap) - env(safe-area-inset-bottom,0px));
    height:var(--sf-product-closed-height,190px);
    transition:height var(--sf-ui-motion-panel) var(--sf-ui-ease-press);
    margin:0 auto;padding:0 0 calc(var(--sf-product-footer-height,0px) + 8px);
    /* The shared product-panel surface owns its corner radius and material.
       Only layout positioning belongs to the product page stylesheet. */
    /* Same composited surface path as the dock. Layout containment can leave
       WebKit's backdrop unfiltered; an identity transform also preserves the
       native fixed purchase containing block when transparency is reduced. */
    transform:translate3d(0,0,0);isolation:isolate;
  }
  /* First paint: the ORIGINAL Woo title, price and form occupy the same
     glass sheet, not an empty template or a duplicated loading placeholder.
     The adapter only reparents these existing nodes; the visual panel is
     already present before that happens. */
  html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready) div.product .sf-product-overview > .summary{
    display:grid;grid-template-columns:minmax(0,1fr) auto;
    /* Intrinsic first-paint height: the exact same heading, native cart footer
       and spacing as the mounted sheet. Do not hard-code a height measured from
       a test product with extra price/urgency lines. */
    grid-template-rows:minmax(var(--sf-ui-product-heading-height),max-content);grid-auto-rows:max-content;align-content:start;align-items:center;
    column-gap:10px;row-gap:0;overflow:hidden;box-sizing:border-box;
    padding:28px 16px 0;margin:0 auto!important;width:calc(100% - var(--sf-ui-bottom-bar-inset) - var(--sf-ui-bottom-bar-inset))!important;max-width:var(--sf-ui-bottom-bar-max-width);
    height:max-content;
    transition:none;
  }
  html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready) div.product .sf-product-overview > .summary::before{
    content:'';position:absolute;top:12px;left:calc(50% - 22px);
    width:44px;height:4px;border-radius:var(--sf-ui-pill);background:var(--sf-ui-border);
  }
  html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready) div.product .sf-product-overview > .summary > :not(.product_title):not(.sf-product-price-row):not(.price):not(form.cart):not(.stock){display:none!important}
  html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready) div.product .sf-product-overview > .summary > .product_title{
    grid-column:1;grid-row:1;margin:0;font-size:clamp(16px,4.5vw,20px);
    line-height:1.25;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
  }
  html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready) div.product .sf-product-overview > .summary > :is(.sf-product-price-row,.price){
    grid-column:2;grid-row:1;display:grid;justify-items:end;align-items:center;
    margin:0;gap:2px;max-width:36vw;font-size:clamp(16px,4.2vw,20px);
  }
  html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready) div.product .sf-product-overview > .summary > :is(.sf-product-price-row,.price) .price{
    font-size:clamp(16px,4.2vw,20px);margin:0;
  }
  html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready) div.product .sf-product-overview > .summary > .sf-product-price-row .cdl-ub{font-size:11px;justify-content:flex-end}
  html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready) div.product .sf-product-overview > .summary > form.cart{
    display:block;grid-column:1/-1;grid-row:auto;align-self:end;
    margin:16px 0 0!important;padding:0!important;border:0!important;min-width:0;
  }
  html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready) div.product .sf-product-overview > .summary > form.cart > :not(.sf-product-purchase):not(.woocommerce-variation-add-to-cart){display:none!important}
  html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready) div.product .sf-product-overview > .summary form.cart .sf-product-purchase{
    position:relative;inset:auto;bottom:auto;left:auto;right:auto;z-index:auto;
    width:calc(100% + 32px);max-width:none;min-height:var(--sf-ui-bottom-bar-height);
    margin:0 -16px 0!important;padding:12px;gap:12px;
  }
  html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready) div.product .sf-product-overview > .summary form.cart .sf-product-purchase .single_add_to_cart_button{
    min-width:0;flex:1 1 0;font-size:14px;
  }
  html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready) div.product .sf-product-overview > .summary form.cart .sf-product-purchase .quantity{
    display:flex;align-items:center;gap:0;flex:0 0 auto;
  }
  html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready) div.product .sf-product-overview > .summary .quantity .sf-product-quantity-step.sf-ui-button{display:inline-flex}
  html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready) div.product .sf-product-overview > .summary form.cart .sf-product-purchase .quantity input.qty{
    width:32px;min-width:0;min-height:44px;padding:0;appearance:textfield;-moz-appearance:textfield;text-align:center;
  }
  html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready) div.product .sf-product-overview > .summary form.cart .sf-product-purchase .single_add_to_cart_button{
    flex:0 1 200px;margin-inline-start:auto;--sf-ui-button-height:44px;--sf-ui-button-padding-y:8px;--sf-ui-button-padding-x:var(--sf-ui-product-button-padding-x);
  }
  html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready) div.product .sf-product-overview > .summary > .stock{grid-column:1/-1;grid-row:2;margin:0}
  /* The real native price and Codela urgency share one semantic grid in the
     hydrated sheet AND the original Woo summary before JavaScript runs.
     A badge can never increase the height of the price column or push the
     product title down. No additional display-only labels are generated. */
  html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready) div.product .sf-product-overview > .summary,
  body.single-product.sf-product-sheet-ready div.product .sf-product-sheet-heading{
    grid-template-rows:minmax(var(--sf-ui-product-heading-height),max-content);
    grid-template-columns:minmax(0,1fr) minmax(0,42%);
  }
  html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready) div.product .sf-product-overview > .summary > .sf-product-price-row,
  body.single-product.sf-product-sheet-ready div.product .sf-product-sheet-heading > .sf-product-price-row{
    display:contents;
  }
  html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready) div.product .sf-product-overview > .summary > .sf-product-price-row > .price,
  body.single-product.sf-product-sheet-ready div.product .sf-product-sheet-heading .sf-product-price-row > .price{
    grid-column:2;grid-row:1;align-self:center;justify-self:end;
    width:max-content;max-width:100%;margin:0;text-align:end;
  }
  html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready) div.product .sf-product-overview > .summary > .sf-product-price-row > .price del,
  body.single-product.sf-product-sheet-ready div.product .sf-product-sheet-heading .price del{
    display:block;font-size:12px;line-height:1.25;
  }
  html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready) div.product .sf-product-overview > .summary .sf-product-price-row > .cdl-ub,
  body.single-product.sf-product-sheet-ready div.product .sf-product-sheet-heading .sf-product-price-row > .cdl-ub{
    grid-column:1/-1;grid-row:2;display:grid;
    grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center;
    width:100%;min-width:0;height:16px;margin:8px 0 0;
    font-size:11px;line-height:16px;
  }
  html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready) div.product .sf-product-overview > .summary .cdl-ub-item,
  body.single-product.sf-product-sheet-ready div.product .sf-product-sheet-heading .cdl-ub-item{
    min-width:0;max-width:100%;flex-wrap:nowrap;white-space:nowrap;
  }
  html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready) div.product .sf-product-overview > .summary .cdl-ub-scarcity .cdl-ub-text,
  body.single-product.sf-product-sheet-ready div.product .sf-product-sheet-heading .cdl-ub-scarcity .cdl-ub-text{
    min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  }
  html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready) div.product .sf-product-overview > .summary .cdl-ub-timer,
  body.single-product.sf-product-sheet-ready div.product .sf-product-sheet-heading .cdl-ub-timer{
    justify-self:end;
  }
  html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready) div.product .sf-product-overview > .summary .cdl-ub-item:only-child,
  body.single-product.sf-product-sheet-ready div.product .sf-product-sheet-heading .cdl-ub-item:only-child{
    grid-column:1/-1;
  }
  /* Collapse the merchant's optional timer-prefix visually in the compact
     row, retaining its original DOM, accessible text, data attributes and
     live countdown binding. Expanded details do not need a second ticker. */
  html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready) div.product .sf-product-overview > .summary .cdl-ub-timer .cdl-ub-text,
  body.single-product.sf-product-sheet-ready div.product .sf-product-sheet-heading .cdl-ub-timer .cdl-ub-text{
    font-size:0;
  }
  html.sf-product-sheet-pending body.single-product:not(.sf-product-sheet-ready) div.product .sf-product-overview > .summary .cdl-ub-countdown,
  body.single-product.sf-product-sheet-ready div.product .sf-product-sheet-heading .cdl-ub-countdown{
    font-size:11px;font-variant-numeric:tabular-nums;
  }
  body.sf-product-sheet-ready .sf-product-sheet-header{touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;cursor:grab}
  body.sf-product-sheet-ready .sf-product-sheet.is-holding .sf-product-sheet-header{cursor:grabbing}
  body.single-product.sf-product-sheet-ready div.product .sf-product-sheet-heading .product_title{
    margin:0;font-size:clamp(16px,4.5vw,20px);line-height:1.25;
    display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
  }
  body.single-product.sf-product-sheet-ready div.product .sf-product-sheet-heading .price{font-size:clamp(16px,4.2vw,20px)}
  body.sf-product-sheet-ready .sf-product-sheet.is-expanded .product_title{-webkit-line-clamp:3}
  body.sf-product-sheet-ready .sf-product-sheet-heading .price del{display:block;font-size:12px}
  body.sf-product-sheet-ready .sf-product-sheet-body{height:0;flex:0 1 auto;visibility:hidden}
  body.single-product.sf-product-sheet-ready div.product > .sf-product-sheet.is-expanded{height:calc(100dvh - 84px - var(--sf-header-offset,0px) - var(--sf-ui-bottom-bar-gap) - env(safe-area-inset-bottom,0px))}
  body.sf-product-sheet-ready .sf-product-sheet:is(.is-expanded,.is-dragging) .sf-product-sheet-body{
    height:auto;flex:1 1 auto;visibility:visible;padding-bottom:20px;
  }
  body.sf-product-sheet-ready div.product > .sf-product-sheet:is(.is-dragging,.is-holding,.is-mounting){transition:none}
  body.sf-product-sheet-ready .sf-product-sheet-body > .summary{
    width:100%!important;margin:0!important;padding:0 20px;max-width:none;float:none;
  }
  body.sf-product-sheet-ready .sf-product-sheet-body > .sf-product-information{
    width:100%;max-width:none;margin:24px 0 0;padding-inline:20px;
  }
  /* Must outrank the root product module's width:100% / margin:auto
     selector; otherwise the trust panel extends beyond the contact row. */
  body.single-product.sf-product-sheet-ready div.product .sf-product-sheet-body > .cdl-tb{
    width:calc(100% - 40px);max-width:none;margin:12px 20px 0;padding:0;
  }
  body.sf-product-sheet-ready div.product form.cart .sf-product-purchase{
    visibility:visible;position:fixed;inset-inline:0;bottom:0;
    max-width:none;width:100%;min-height:var(--sf-ui-bottom-bar-height);margin:0;
    align-items:center;padding:12px;
  }
  body.sf-product-sheet-ready div.product form.cart .sf-product-purchase .single_add_to_cart_button{
    flex:1 1 0;min-width:0;font-size:14px;
  }
  body.sf-product-sheet-ready div.product form.cart .sf-product-purchase .quantity{flex:0 0 auto}
  body.sf-product-sheet-ready .sf-product-sheet-body > .cdl-wa{
    margin:16px 20px 0;padding:0;
  }
  body.sf-product-sheet-ready .sf-product-sheet-body > .cdl-wa .cdl-wa-button{
    display:flex;width:100%;
  }
  body.sf-product-sheet-ready .sf-product-delivery:not(:has(.cdl-de,.cdl-fsb--product)){display:none}
  body.sf-product-sheet-ready .sf-product-delivery .cdl-de{margin:0 0 12px}
  body.sf-product-sheet-ready .sf-product-delivery .cdl-fsb--product{margin:0}
  body.sf-product-sheet-ready:has(#sf-panel[open],.pswp--open) .sf-product-sheet,
  body.sf-product-sheet-ready:has(#sf-panel[open],.pswp--open) .sf-product-sheet .sf-product-purchase{visibility:hidden}
  body.sf-product-sheet-ready .sf-product-plugin-footer .cdl-wa-float{
    bottom:calc(var(--sf-product-collapsed-height,210px) + 18px);
  }
  body.sf-product-sheet-ready:has(.sf-product-sheet.is-expanded) .sf-product-plugin-footer{visibility:hidden}
  /* The native footer stays in the document, outside the product sheet.
     Reserve only the overlay at its final links so they remain reachable. */
  body.sf-product-sheet-ready .sf-footer{padding-bottom:calc(var(--sf-product-collapsed-height,140px) + var(--sf-ui-bottom-bar-gap) + env(safe-area-inset-bottom,0px) + 16px)}
  /* A hidden mobile footer cannot provide that clearance for the last card. */
  body.sf-product-sheet-ready:has(.sf-footer--mobile-hidden){padding-bottom:calc(var(--sf-product-collapsed-height,140px) + var(--sf-ui-bottom-bar-gap) + env(safe-area-inset-bottom,0px) + 16px)}
}

/* Quantity is still Woo's one input, composed with the existing quiet Button. */
body.single-product div.product .sf-product-quantity{align-items:center;gap:0}
body.single-product div.product .sf-product-quantity-step.sf-ui-button{
  display:none;--sf-ui-button-height:44px;--sf-ui-button-padding-x:0px;
  min-width:44px;width:44px;min-height:44px;padding:0;font-size:20px;flex:none;
}
body.single-product div.product .sf-product-quantity .sf-product-quantity-step[disabled]{cursor:default}
@media(max-width:700px){
  body.single-product.sf-product-sheet-ready div.product .sf-product-quantity:not(.is-fixed) .sf-product-quantity-step.sf-ui-button{display:inline-flex}
  body.single-product.sf-product-sheet-ready div.product form.cart .sf-product-purchase .sf-product-quantity input.qty{
    width:32px;min-width:0;min-height:44px;padding:0;appearance:textfield;-moz-appearance:textfield;text-align:center;
  }
  body.single-product.sf-product-sheet-ready div.product .sf-product-quantity input.qty::-webkit-inner-spin-button,
  body.single-product.sf-product-sheet-ready div.product .sf-product-quantity input.qty::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
  body.sf-product-sheet-ready div.product form.cart .sf-product-purchase{gap:12px}
  body.single-product.sf-product-sheet-ready div.product form.cart .sf-product-purchase .single_add_to_cart_button{
    flex:0 1 200px;margin-inline-start:auto;--sf-ui-button-height:44px;--sf-ui-button-padding-y:8px;--sf-ui-button-padding-x:var(--sf-ui-product-button-padding-x);
  }
}


/* Native recommendations continue the same vertical scroll after photographs. */
@media(max-width:700px){
  body.single-product.sf-product-sheet-ready div.product .sf-ui-gallery--scroll .sf-product-discovery{
    /* The existing Woo list and compact sheet determine the final stop;
       do not stack a second fixed-panel reserve below the final card. */
    display:flow-root;min-height:0;width:100%;scroll-snap-align:start;
    padding:calc(88px + var(--sf-header-offset,0px)) 16px env(safe-area-inset-bottom,0px);
    background:var(--sf-ui-page);color:var(--sf-ui-ink);
  }
  body.single-product.sf-product-sheet-ready .sf-product-discovery > :is(.related,.upsells){
    width:100%;max-width:none;padding:0;margin:0 0 16px;float:none;clear:both;
  }
  body.single-product.sf-product-sheet-ready .sf-product-discovery > :is(.related,.upsells):last-child{margin-bottom:0}
  /* catalog.css gives all native grids 32px bottom margin. Inside the
     vertically scrolling product discovery it is redundant after the last card. */
  body.single-product.sf-product-sheet-ready .sf-product-discovery :is(.related,.upsells) ul.products{margin-bottom:0}
  body.sf-product-sheet-ready:has(.woocommerce-product-gallery.is-discovering) div.product .sf-product-overview > .onsale{visibility:hidden}
  body.sf-product-sheet-ready .woocommerce-product-gallery.is-discovering > :is(.sf-product-gallery-nav,.sf-product-gallery-count,.sf-product-visitor,.woocommerce-product-gallery__trigger){visibility:hidden}
  /* Match the gallery index's discovery boundary even if the Codela plugin
     has reparented its original live host outside the gallery frame.
     Scoped to product discovery only: the plugin still controls [hidden]
     when the actual visitor count is below its configured threshold. */
  body.single-product.sf-product-sheet-ready:has(.woocommerce-product-gallery.is-discovering) #codela-live-visitor-container{visibility:hidden}
  /* Native quantity and the compact CTA remain side by side at 320px. */
}

/* Product purchase and its overlay navigation share a little more browser clearance. */
@media(max-width:700px){body.single-product{--sf-ui-bottom-bar-gap:var(--sf-ui-product-panel-gap)}}

/* Fixing the body must not let root snap choose a new product/discovery target. */
html.sf-overlay-scroll-locked:has(body.sf-product-sheet-ready){scroll-snap-type:none}

/* Desktop composes the same Woo gallery/form. Its bounded sticky media
   cannot cover the native information or recommendation sections below. */
@media(min-width:901px){
  body.single-product .sf-content{padding:28px max(24px,4vw) 64px}
  body.single-product div.product{max-width:1360px;margin-inline:auto;grid-template-columns:minmax(0,1fr);row-gap:36px}
  body.single-product .sf-product-overview{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);align-items:start;gap:clamp(44px,5vw,80px);min-width:0;position:relative}
  body.single-product .sf-product-media{display:block;min-width:0;position:sticky;top:calc(var(--sf-header-offset,0px) + 96px);container-type:inline-size}
  body.single-product div.product .sf-product-media > .woocommerce-product-gallery{
    --sf-gallery-height:min(640px,94cqw);--sf-gallery-fit:contain;--sf-gallery-surface:var(--sf-ui-page);--sf-gallery-radius:var(--sf-ui-control-radius);
    height:auto;min-height:var(--sf-gallery-height);overflow:visible;background:transparent;
  }
  body.single-product div.product .sf-product-media > .sf-ui-gallery--scroll{opacity:1!important}
  body.single-product div.product .sf-product-media > .woocommerce-product-gallery:not(.sf-ui-gallery--no-thumbs):has(.woocommerce-product-gallery__wrapper > .woocommerce-product-gallery__image:nth-child(2),> .sf-ui-gallery-nav,> .flex-control-thumbs > li:nth-child(2)){min-height:calc(var(--sf-gallery-height) + 72px)}
  body.single-product div.product .sf-product-media .woocommerce-product-gallery__wrapper{height:var(--sf-gallery-height);border-radius:var(--sf-gallery-radius);overflow:hidden}
  /* Keep horizontal photo containment, but let vertical wheel/trackpad input
     chain to the document instead of trapping it over the photograph. */
  body.single-product div.product .sf-product-media .sf-ui-gallery--scroll .woocommerce-product-gallery__wrapper{overflow-x:auto;overflow-y:hidden;overscroll-behavior-y:auto}
  body.single-product div.product .sf-product-overview > .summary{grid-column:2;grid-row:1;max-width:none;justify-self:stretch;padding:0}
  body.single-product div.product .product_title{font-size:clamp(26px,2.3vw,34px);margin-bottom:10px}
  body.single-product .sf-product-price-row{margin-bottom:14px}
  body.single-product div.product .woocommerce-product-details__short-description{margin-bottom:20px;line-height:1.65}
  body.single-product div.product form.cart{padding:0 0 20px;margin-bottom:18px;border-top:0}
  body.single-product div.product form.cart .sf-product-purchase{padding:0;gap:12px}
  body.single-product div.product form.cart .sf-product-purchase .quantity{border:1px solid var(--sf-ui-border);border-radius:var(--sf-ui-pill);overflow:hidden;align-items:center}
  body.single-product div.product :is(.sf-product-quantity:not(.is-fixed),html.sf-product-sheet-pending .quantity:has(input.qty[type=number]:not([hidden]))) .sf-product-quantity-step.sf-ui-button{display:inline-flex;min-width:36px;width:36px;min-height:var(--sf-ui-action-height)}
  body.single-product div.product form.cart :is(.sf-product-quantity,html.sf-product-sheet-pending .quantity) input.qty{width:40px;min-width:0;padding:0;appearance:textfield;-moz-appearance:textfield;text-align:center}
  body.single-product div.product :is(.sf-product-quantity,html.sf-product-sheet-pending .quantity) input.qty::-webkit-inner-spin-button,
  body.single-product div.product :is(.sf-product-quantity,html.sf-product-sheet-pending .quantity) input.qty::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
  body.single-product .cdl-de{margin-top:0}
  body.single-product .cdl-wa{margin-top:8px;border-block:1px solid var(--sf-ui-border)}
  body.single-product .cdl-wa-button{min-height:54px;padding:5px 0;border:0;border-radius:0;font-weight:400}
  body.single-product .cdl-wa-button::after{transform:none}
  body.single-product div.product > .sf-product-information{max-width:none;padding-inline:0}
  body.single-product.woocommerce div.product > :is(.related,.upsells){max-width:none;padding-inline:0;padding-top:0;border:0;margin:0}
  body.single-product .sf-product-information-content{max-width:90ch}
  body.single-product div.product .sf-ui-gallery-nav,
  body.single-product.woocommerce div.product div.sf-ui-gallery .flex-control-thumbs{
    position:absolute;top:calc(var(--sf-gallery-height) + 12px);bottom:auto;left:0;transform:none;
    padding:4px;border:0;gap:10px;max-width:100%;min-height:48px;
  }
  body.single-product div.product .sf-product-gallery-thumb.sf-ui-icon-button{border-radius:50%;width:48px;height:48px}
  body.single-product.woocommerce div.product div.sf-ui-gallery .flex-control-thumbs li{padding:0;border:0;width:48px;min-width:48px;height:48px;flex-basis:48px}
  body.single-product .sf-product-gallery-count{bottom:auto;top:calc(var(--sf-gallery-height) - 36px)}
  body.single-product:not(.sf-product-sheet-ready) .sf-ui-gallery .sf-product-visitor{bottom:auto;top:calc(var(--sf-gallery-height) - 36px)}
  body.single-product div.product .sf-product-overview > .onsale{top:16px;left:16px}
}
.sf-product-gallery-arrows{display:none}
@media(min-width:901px){
  .sf-product-gallery-arrows{display:flex;justify-content:space-between;position:absolute;inset:calc(var(--sf-gallery-height) / 2 - 22px) 12px auto;pointer-events:none}
  .sf-product-gallery-arrows > button{pointer-events:auto}
}
