/* jdtheme26 - single product page, buy area + trust + chips + sticky bar (ported 2026-10-06 from the approved preview; loaded on single product pages except the cake page).
   Built ONLY from existing tokens and components: jd-panel.css (.jd-panel, .jd-panel__title, .jd-detail-box, .jd-chip, .jd-thumb),
   jd-button.css (primary pill = add to cart, regular pill = small / secondary), jd-forms.css field border, jd-flow.css (ship bar, toast, button states),
   --jd-space-* / --jd-panel-* from jd-layout.css. New values are tokens declared once under TOKENS below.
   Tabs / reviews / spec look lives in the mu-plugin inline sheet (jd-pt-style).
   No !important, no ID-weight selectors. Comments in English only.

   TOKENS
     --jd-opt-min-h        option chip minimum height (touch target 48px on phones)
     --jd-opt-radius       option chip radius (regular pill family: 14px like the fields)
     --jd-opt-gap          gap between option buttons (8px = the touch-spacing minimum)
     --jd-swatch-min       image swatch tile minimum width (72px: four per row on a phone)
     --jd-sticky-h         height of the phone sticky add-to-cart bar
     --jd-pd-sticky-top    desktop: top of the two sticky columns (gallery | summary) = sticky header 60px + a gap; with the pinned category bar (62px) + a gap
     --jd-pd-scroll-offset room kept above a block the page scrolls to (tabs after the rating link): sticky header 60px + pinned category tags 60-62px + a gap
*/

:root {
  --jd-opt-min-h: 48px;
  --jd-opt-radius: 14px;
  --jd-opt-gap: 8px;
  --jd-swatch-min: 72px;
  --jd-sticky-h: 72px;
  --jd-pd-scroll-offset: 130px;
  --jd-pd-sticky-top: 90px;
}
/* a product with a sub-category row has the pinned bar on desktop too (it carries .is-compact exactly then): the columns stick below it */
@media (min-width: 1025px) {
  body.single-product:has(.jd-pd-catnav .jd-catnav.is-compact) { --jd-pd-sticky-top: 152px; }
}

/* ------------------------------------------------------------------ page frame */
body.single-product .product-image-summary-inner { align-items: start; }

/* category tags (inc/jd-product-detail.php): the archive pages' pill rows [jd_catnav] sit above the breadcrumb, in the page container.
   Look and pinning = jd-subcats.css + jd-catnav.js; this is only their place on the product page (the gap sits on the bar itself, so a hidden bar leaves none). */
body.single-product .jd-pd-catnav .jd-catnav { margin-bottom: var(--jd-space-xs); }

/* the tabs are scrolled to from the rating link (mu-plugin script, scrollIntoView): leave room for the sticky header + pinned category tags */
body.single-product .jd-tabs { scroll-margin-top: var(--jd-pd-scroll-offset); }

/* breadcrumbs: one compact line like the category pages (home / main / sub category, product name last on desktop, where it shortens with an ellipsis).
   Phones + tablets: WoodMart's own rule drops the product name (it is the heading right below), the category path stays whole. */
body.single-product .wd-content-area > .single-breadcrumbs-wrapper { margin-bottom: var(--jd-space-xs); }
body.single-product .single-breadcrumbs-wrapper .wd-breadcrumbs {
  display: flex;
  align-items: center;
  flex-wrap: nowrap;
  gap: 6px;
  min-width: 0;
  color: var(--jd-ink-500);
  font-size: 13px;
  letter-spacing: .04em;
}
body.single-product .single-breadcrumbs-wrapper .wd-breadcrumbs a { flex: none; display: inline-flex; align-items: center; min-height: 32px; color: var(--jd-ink-500); text-decoration: none; }
body.single-product .single-breadcrumbs-wrapper .wd-breadcrumbs a:hover { color: var(--jd-ink-900); text-decoration: underline; text-underline-offset: 3px; }
body.single-product .single-breadcrumbs-wrapper .wd-breadcrumbs .wd-delimiter { flex: none; margin: 0; }
body.single-product .single-breadcrumbs-wrapper .wd-breadcrumbs .wd-last { min-width: 0; overflow: hidden; color: var(--jd-ink-900); text-overflow: ellipsis; white-space: nowrap; }

/* ------------------------------------------------------------------ gallery: rounded stage + thumbnail row */
body.single-product .product-images .woocommerce-product-gallery { margin: 0; }
body.single-product .product-images .wd-gallery-images {
  overflow: hidden;
  border: 1px solid var(--jd-card-border);
  border-radius: var(--jd-card-radius);
  background: var(--jd-white);
  box-shadow: var(--jd-card-shadow);
}
/* the main picture opens the lightbox on click (assets/js/jd-product-page.js): say so with the pointer, mouse devices only */
@media (hover: hover) { body.single-product .product-images .wd-carousel-item:not(.wd-with-video) .woocommerce-product-gallery__image, body.single-product .product-images .woocommerce-product-gallery__image > a, body.single-product .product-images .woocommerce-product-gallery__image .zoomImg { cursor: zoom-in; } }   /* the figure too: small pictures get no zoom overlay, and the carousel's own grab cursor would show */
body.single-product .product-images .wd-gallery-thumb .wd-carousel-item { padding: 0; }
body.single-product .product-images .wd-gallery-thumb .wd-carousel-item img {
  box-sizing: border-box;
  border: 1px solid var(--jd-card-border);
  border-radius: var(--jd-thumb-radius);
  background: var(--jd-cream-50);
  object-fit: cover;
}
body.single-product .product-images .wd-gallery-thumb .wd-carousel-item.wd-thumb-active img { border-color: var(--jd-ink-900); }

/* ------------------------------------------------------------------ buy panel */
.jd-buy { display: flex; flex-direction: column; gap: var(--jd-panel-gap); min-width: 0; }
.jd-buy > * { margin: 0; }
.jd-buy__main { display: grid; gap: var(--jd-space-s); }
.jd-buy__main > * { margin: 0; }
.jd-buy__main :is(a, button, input, select):focus-visible { outline: 2px solid var(--jd-accent); outline-offset: 2px; }

.jd-buy__main .product_title { margin: 0; color: var(--jd-ink-900); line-height: 1.4; text-wrap: balance; }

/* rating: stars + the numbers, one link to the reviews */
.jd-titlerating { display: inline-flex; align-items: center; gap: 8px; margin: 0; min-height: 44px; color: var(--jd-ink-900); text-decoration: none; }
.jd-titlerating .jd-stars { font-size: 1.1em; }
.jd-titlerating .jd-stars__fg { color: var(--jd-butter-400); }
.jd-titlerating .jd-stars__bg { color: var(--jd-cream-200); }
.jd-titlerating__txt { color: var(--jd-ink-700); font-size: 13px; letter-spacing: .04em; }
.jd-titlerating__txt strong { color: var(--jd-ink-900); font-weight: 700; }
.jd-titlerating:hover .jd-titlerating__txt { text-decoration: underline; text-underline-offset: 3px; }

/* reading order inside the panel (the DOM keeps WooCommerce's order: title, rating, photo review, price, short description, stock, form): title, rating, price, state, points, photo review, options + action row, trust */
.jd-buy__main > .product_title { order: 1; }
.jd-buy__main > .jd-titlerating { order: 2; justify-self: start; margin-top: -8px; }
.jd-buy__main > .price { order: 3; }
.jd-buy__main > .jd-stock, .jd-buy__main > .jd-restock { order: 4; }
.jd-buy__main > .woocommerce-product-details__short-description { order: 5; }
.jd-buy__main > .jd-buy__more { order: 5; justify-self: start; }
.jd-buy__main > .jd-review-hl { order: 6; }
.jd-buy__main > form.cart { order: 7; }
.jd-buy__main > .jd-trust { order: 8; }

/* the price is the biggest number on the page */
.jd-buy__main > .price { margin: 0; color: var(--jd-price-color); font-size: 28px; font-weight: 700; line-height: 1.2; letter-spacing: .02em; font-variant-numeric: tabular-nums; }
.jd-buy__main > .price :is(.amount, bdi, ins) { color: inherit; text-decoration: none; }
.jd-buy__main > .price del { margin-inline-end: 8px; color: var(--jd-ink-500); font-size: 16px; font-weight: 400; }
.jd-buy__main > .price.is-picked { animation: jd-tick .25s ease; }

.jd-stock { display: inline-flex; align-items: center; gap: 8px; margin: 0; color: var(--jd-ink-700); font-size: 13px; line-height: 1.5; letter-spacing: .04em; }
.jd-stock:empty { display: none; }
.jd-stock .jd-chip { font-weight: 700; }
.jd-stock__note { color: var(--jd-ink-700); }

/* the short description = the key selling points; phones show 4 lines first, "看更多" opens the rest */
.woocommerce-product-details__short-description { color: var(--jd-text); }
.woocommerce-product-details__short-description p { margin: 0 0 .5em; text-wrap: pretty; }
.woocommerce-product-details__short-description > :last-child { margin-bottom: 0; }
.woocommerce-product-details__short-description.is-clamped { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 4; overflow: hidden; }
.jd-buy__more { display: none; align-items: center; min-height: 44px; margin-top: -8px; padding: 0; border: 0; background: none; color: var(--jd-ink-900); font: inherit; font-size: 13px; text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }
.jd-buy__more.is-on { display: inline-flex; }

/* ------------------------------------------------------------------ options: chips built over the real <select> */
.jd-buy__main table.variations { width: 100%; margin: 0; border: 0; }
.jd-buy__main table.variations :is(tbody, tr, th, td) { display: block; padding: 0; border: 0; }
.jd-buy__main table.variations tr + tr { margin-top: var(--jd-space-s); }
.jd-buy__main table.variations th.label { margin-bottom: 8px; color: var(--jd-ink-900); font-size: 14px; font-weight: 700; letter-spacing: .08em; }
.jd-buy__main table.variations th.label label { margin: 0; font-weight: inherit; }
.jd-buy__main table.variations .wd-reset-var { display: none; }   /* the chips are toggles: pressing the chosen one again clears it */
.jd-opts { display: flex; flex-wrap: wrap; gap: var(--jd-opt-gap); }
.jd-opts--img { display: grid; grid-template-columns: repeat(auto-fill, minmax(var(--jd-swatch-min), 1fr)); }   /* 4 per row on a 360-430px phone, ~6 in the desktop summary column */
.jd-opts.is-capped .jd-opt.is-extra { display: none; }
.jd-opts__more { display: block; box-sizing: border-box; min-height: 44px; margin-top: 4px; padding: 0 4px; border: 0; background: none; color: var(--jd-ink-900); font: inherit; font-size: 13px; text-decoration: underline; text-underline-offset: 3px; cursor: pointer; touch-action: manipulation; }
.jd-select--chips { position: absolute; width: 1px; height: 1px; overflow: hidden; opacity: 0; pointer-events: none; }   /* the native select stays in the form (value + change events) but is out of sight and of the tab order */
.jd-opt {
  box-sizing: border-box;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  max-width: 100%;
  min-width: var(--jd-opt-min-h);   /* a one-letter size such as S is still a 48px touch target */
  min-height: var(--jd-opt-min-h);
  padding: 8px 16px;
  border: 1px solid var(--wd-form-brd-color);
  border-radius: var(--jd-opt-radius);
  background: var(--jd-white);
  color: var(--jd-ink-900);
  font: inherit;
  font-size: 14px;
  line-height: 1.4;
  letter-spacing: .04em;
  text-align: start;
  text-transform: none;
  cursor: pointer;
  touch-action: manipulation;   /* no double-tap zoom delay on a tap */
  -webkit-tap-highlight-color: transparent;
  transition: border-color .15s ease, background-color .15s ease;
}
.jd-opt__name { min-width: 0; overflow-wrap: anywhere; }
.jd-opt__price { color: var(--jd-ink-700); font-size: 13px; font-variant-numeric: tabular-nums; }
.jd-opt__tag { color: var(--jd-ink-500); font-size: 12px; }
.jd-opt__tag[hidden] { display: none; }
@media (hover: hover) { .jd-opt:hover { border-color: var(--jd-ink-900); } }
.jd-opt:active { background: var(--jd-cream-50); }
.jd-opt[aria-checked="true"] { border-color: var(--jd-ink-900); box-shadow: inset 0 0 0 1px var(--jd-ink-900); background: var(--jd-cream-50); font-weight: 700; }
.jd-opt:not(.jd-opt--img)[aria-checked="true"] .jd-opt__name::after { content: " \2713"; }   /* a check mark, so the chosen state is not colour alone */
.jd-opt.is-unavailable { border-style: dashed; background: var(--jd-cream-50); color: var(--jd-ink-500); }
.jd-opt.is-unavailable .jd-opt__name { text-decoration: line-through; text-decoration-thickness: 1px; }
.jd-opt.is-disabled { cursor: not-allowed; opacity: .6; }   /* no variation for this combination: not pressable */
.jd-opt[aria-checked="true"].is-unavailable { border-style: solid; }   /* chosen but sold out: solid ink border like any chosen option */
.jd-opt:focus-visible { outline: 2px solid var(--jd-accent); outline-offset: 2px; }

/* image swatch: picture on top, label under it */
.jd-opt--img { flex-direction: column; align-items: stretch; justify-content: flex-start; gap: 6px; padding: 6px 6px 8px; text-align: center; }
.jd-opt__pic { position: relative; display: block; aspect-ratio: 1; overflow: hidden; border-radius: 8px; background: var(--jd-cream-50); }
.jd-opt__pic--none { background: var(--jd-cream-100, var(--jd-cream-50)); }   /* option without its own picture: same-size neutral tile */
.jd-opt__pic img { display: block; width: 100%; height: 100%; object-fit: cover; }
.jd-opt--img .jd-opt__name { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-clamp: 2; overflow: hidden; font-size: 13px; line-height: 1.35; letter-spacing: .02em; }
.jd-opt--img .jd-opt__price, .jd-opt--img .jd-opt__tag { text-align: center; }
.jd-opt--img.is-unavailable .jd-opt__pic img { opacity: .45; }
.jd-opt--img.has-no-pic .jd-opt__name { align-self: center; }
.jd-opt--img[aria-checked="true"] .jd-opt__pic::after { content: ""; position: absolute; top: 6px; right: 6px; width: 20px; height: 20px; border-radius: 50%; background: var(--jd-ink-900); box-shadow: 0 0 0 2px var(--jd-cream-50); }   /* chosen badge: a disc with a drawn tick */
.jd-opt--img[aria-checked="true"] .jd-opt__pic::before { content: ""; position: absolute; z-index: 1; top: 10px; right: 12px; width: 5px; height: 9px; border: solid var(--jd-cream-50); border-width: 0 2px 2px 0; transform: rotate(45deg); }
.jd-opts.has-error .jd-opt { border-color: var(--jd-error); }
.jd-buy__main table.variations.has-error select { border-color: var(--jd-error); }
.jd-opts-msg { display: block; max-height: 0; margin: 0; overflow: hidden; color: var(--jd-error); font-size: 13px; line-height: 1.5; opacity: 0; transition: max-height .2s ease, opacity .2s ease, margin .2s ease; }
.jd-opts-note { margin: 8px 0 0; padding: 10px 14px; border: 1px solid var(--jd-cream-200); border-radius: var(--jd-opt-radius); background: var(--jd-cream-50); color: var(--jd-ink-900); font-size: 13px; line-height: 1.5; }
.jd-opts-note[hidden] { display: none; }
.jd-opts-msg.is-on { max-height: 3.2em; margin-top: 8px; opacity: 1; }

/* WooCommerce prints the chosen variation's stock / availability here */
.jd-buy__main .woocommerce-variation { margin: 0; }
.jd-buy__main .woocommerce-variation:empty { display: none; }
.jd-buy__main .woocommerce-variation-description { display: none; }
/* the state chip under the price says 現貨 / 較長備貨; the stock filter (inc/jd-product-detail.php) leaves only the sold-out block (it carries the notify button) in WooCommerce's availability area */

/* ------------------------------------------------------------------ action row: quantity | add to cart (primary) | heart */
.jd-buy__main form.cart { --jd-qty-w: 136px; --jd-qty-btn-w: 44px; }   /* tokens read by the quantity rule in jd-product-page.css: 44px - / + targets */
.jd-buy__main form.cart,
.jd-buy__main .woocommerce-variation-add-to-cart { display: flex; flex-wrap: wrap; align-items: center; gap: var(--jd-space-xs) 12px; margin: 0; }
.jd-buy__main form.cart > br { display: none; }
.jd-buy__main :is(.wc-points-rewards-product-message, .woocommerce-variation-add-to-cart > p.points) { flex: 1 1 100%; margin: 0; }
.jd-buy__main form.variations_form { display: block; }
.jd-buy__main .single_variation_wrap { margin-top: var(--jd-space-s); }
.jd-buy__main form.cart .single_add_to_cart_button.jd-btn {
  --jd-btn-h: 56px;
  flex: 1 1 180px;
  min-width: 0;
}
.jd-buy__main .single_add_to_cart_button.jd-btn.wc-variation-selection-needed { opacity: .8; }   /* WooCommerce disables the button until an option is chosen; the tap shows the message under the options */
.jd-buy__main .single_add_to_cart_button.jd-btn.disabled:not(.wc-variation-selection-needed),
body .jd-sticky-atc .jd-btn[aria-disabled="true"] {   /* the same state on the phone sticky bar (aria-disabled set by jd-product-detail.js; the body prefix outranks jd-button.css's .55 opacity rule) */   /* the chosen option cannot be bought (sold out): visibly off, the restock notice above stays the loud part */
  --jd-btn-bg: var(--jd-cream-100);
  --jd-btn-bg-hover: var(--jd-cream-100);
  --jd-btn-bg-active: var(--jd-cream-100);
  --jd-btn-fg: var(--jd-ink-500);
  opacity: 1;
  cursor: not-allowed;
}
.jd-buy__main .single_add_to_cart_button .jd-btn__icon { margin-inline-end: -2px; }

/* ------------------------------------------------------------------ trust box (cream detail box with real shop data) */
.jd-trust { display: grid; gap: 2px; }
.jd-trust .jd-detail-box__row { align-items: baseline; padding: 6px 0; }
.jd-trust .jd-detail-box__label { flex: 0 0 3.2em; max-width: none; font-weight: 700; color: var(--jd-ink-700); }
.jd-trust .jd-detail-box__row + .jd-detail-box__row { border-top: var(--jd-rule-dashed); }
.jd-trust a { color: var(--jd-ink-900); text-decoration: underline; text-underline-offset: 3px; }
.jd-trust__bar { padding: 4px 0 8px; }
.jd-trust__bar .jd-ship-bar { margin: 0; }

/* sold-out block (替換 add to cart): label + notify button share the buy panel */
.jd-buy__main .jd-restock { margin: 0; }
.jd-buy__main .jd-soldout__label { display: inline-flex; align-items: center; min-height: 44px; padding: 0 16px; border-radius: 999px; background: var(--jd-cream-100); color: var(--jd-ink-700); font-size: 14px; font-weight: 700; letter-spacing: .08em; }

/* ------------------------------------------------------------------ sticky add-to-cart bar (phones + tablets: the screens that have the bottom toolbar) */
.jd-sticky-atc { display: none; }
@media (max-width: 1024px) {
  .jd-sticky-atc {
    position: fixed;
    inset: auto 0 0 0;
    z-index: 350;
    display: grid;
    grid-template-columns: auto minmax(0, 1fr) auto;
    align-items: center;
    gap: 12px;
    box-sizing: border-box;
    min-height: var(--jd-sticky-h);
    padding: 10px 15px max(10px, env(safe-area-inset-bottom, 0px));
    border-top: 1px solid var(--jd-cream-200);
    background: var(--jd-white);
    box-shadow: 0 -8px 24px rgba(60, 30, 40, .08);
    transform: translateY(110%);
    transition: transform .25s ease;
  }
  body.jd-sticky-on .jd-sticky-atc { transform: none; }
  .jd-sticky-atc__name { margin: 0; overflow: hidden; color: var(--jd-ink-900); font-size: 13px; line-height: 1.4; letter-spacing: .04em; text-overflow: ellipsis; white-space: nowrap; }
  .jd-sticky-atc__price { margin: 0; color: var(--jd-ink-900); font-size: 17px; font-weight: 700; line-height: 1.3; letter-spacing: .04em; font-variant-numeric: tabular-nums; }
  .jd-sticky-atc .jd-btn { --jd-btn-h: 48px; --jd-btn-px: 22px; --jd-btn-fs: 15px; }
  .jd-sticky-atc :is(a, button):focus-visible { outline: 2px solid var(--jd-accent); outline-offset: 2px; }
  body.jd-sticky-on :is(.wd-toolbar, .jd-line-fab) { visibility: hidden; opacity: 0; pointer-events: none; }   /* the bar takes the toolbar's place; the floating LINE button would sit on the bar */   /* while the buy bar is showing it takes the toolbar's place (the cart is one tap away in the header) */
  body.single-product { --jd-content-pad-bottom: calc(var(--jd-sticky-h) + 30px); }
}
@media (prefers-reduced-motion: reduce) {
  .jd-sticky-atc, .jd-opt, .jd-opts-msg { transition: none; }
  .jd-btn .jd-spin { animation: none; }
}

/* ------------------------------------------------------------------ phones + tablets (the buy panel is narrow there) */
@media (max-width: 1024.98px) {
  .jd-buy__main form.cart .single_add_to_cart_button.jd-btn { flex: 1 1 100%; order: 3; }   /* quantity + heart share a row, the primary action gets its own full-width row */
  .jd-buy__main form.cart .quantity { order: 1; }
  .jd-buy__main form.cart .wd-wishlist-btn { order: 2; }
}
@media (max-width: 767.98px) {
  body.single-product { --jd-product-title-size: 20px; }
  .jd-buy__main > .price { font-size: 24px; }
}

/* ------------------------------------------------------------------ best photo review under the selling points */
.jd-review-hl { display: grid; grid-template-columns: auto minmax(0, 1fr); align-items: center; gap: 12px; min-height: 64px; padding: 8px 12px; border: 1px solid var(--jd-cream-200); border-radius: var(--jd-card-radius); background: var(--jd-cream-50); color: var(--jd-ink-900); text-decoration: none; }
.jd-review-hl__body { display: grid; gap: 2px; min-width: 0; }
.jd-review-hl__stars { color: var(--jd-butter-400); font-size: 13px; letter-spacing: 2px; line-height: 1.2; }
.jd-review-hl__text { overflow: hidden; color: var(--jd-ink-900); font-size: 13px; line-height: 1.5; letter-spacing: .04em; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; }
.jd-review-hl__who { color: var(--jd-ink-500); font-size: 12px; letter-spacing: .04em; }
@media (hover: hover) { .jd-review-hl:hover .jd-review-hl__who { color: var(--jd-ink-900); text-decoration: underline; text-underline-offset: 3px; } }
.jd-review-hl:focus-visible { outline: 2px solid var(--jd-accent); outline-offset: 2px; }

/* ------------------------------------------------------------------ trust box extras: payment logos, shipping progress, alternatives */
.jd-trust__pay { padding: 8px 0 2px; border-top: var(--jd-rule-dashed); }
.jd-trust__pay .jd-payment-methods { display: block; width: 200px; max-width: 100%; height: auto; }
@media (max-width: 767.98px) { .jd-trust__bar .jd-ship-bar__text { min-height: calc(1.5em * 2); } }   /* phones: two lines reserved, the sentence changes with the chosen option without moving the box */
.jd-alts { display: grid; gap: var(--jd-space-xs); margin-top: var(--jd-panel-gap); }
.jd-alts .jd-panel__title { margin: 0; }
.jd-alts__item { min-height: 64px; color: inherit; text-decoration: none; }
.jd-alts__item .jd-line-item__price del { display: none; }
@media (hover: hover) { .jd-alts__item:hover .jd-line-item__name { text-decoration: underline; text-underline-offset: 3px; } }
.jd-alts__item:focus-visible { outline: 2px solid var(--jd-accent); outline-offset: 2px; }

/* add-to-cart button states: WooCommerce / WoodMart ajax adds .loading / .added, the script mirrors them in data-state and shows the label / spinner */
.jd-btn[data-state="loading"] { pointer-events: none; }
.jd-btn .jd-spin { display: none; width: 14px; height: 14px; border: 2px solid currentColor; border-right-color: transparent; border-radius: 50%; }
.jd-btn[data-state="loading"] .jd-spin { display: inline-block; margin-inline-end: 8px; animation: jd-spin .6s linear infinite; }
@keyframes jd-spin { to { transform: rotate(360deg); } }
.jd-btn[data-state="added"] { --jd-btn-bg: var(--jd-mint-100); --jd-btn-bg-hover: var(--jd-mint-100); }
.jd-buy__main .single_add_to_cart_button.jd-btn.loading::after,
.jd-buy__main .single_add_to_cart_button.jd-btn.added::after { content: none; }   /* the theme / WooCommerce spinner and check glyphs: the button draws its own states */
