/* ============================================================================
   Product page polish — variations layout, variant pills / colour swatches,
   buy-box finish and the reviews summary. Product pages only (inc/pdp.php).
   Every colour comes from the preset tokens (--ink, --accent, --line, …) so
   each preset restyles it for free. Restyle only — no content, no claims.
   ========================================================================== */

/* ---- Variable products: the variations table must NOT sit in the flex row
   with the buy button (it was being squeezed). Table on top, then price/
   availability, then the qty + button row. ----------------------------------- */
.bs-product-top form.variations_form{display:block}
.bs-product-top form.variations_form table.variations{width:100%;border:0;margin:0 0 6px;border-collapse:collapse}
.bs-product-top form.variations_form table.variations tr{display:block;margin:0 0 16px}
.bs-product-top form.variations_form table.variations th,
.bs-product-top form.variations_form table.variations td{display:block;padding:0;border:0;text-align:left;background:none}
.bs-product-top form.variations_form table.variations th.label{margin-bottom:8px}
.bs-product-top form.variations_form table.variations th.label label{font:600 13px/1.3 var(--ff-head);letter-spacing:.04em;text-transform:uppercase;color:var(--ink)}
.bs-swatch-sel{text-transform:none;letter-spacing:0;font-weight:500;color:var(--muted)}
.bs-product-top form.variations_form select{height:46px;border:1px solid var(--line);border-radius:var(--r-sm,10px);padding:0 14px;background-color:#fff;font:500 15px var(--ff-body);min-width:220px;max-width:100%}
.bs-product-top form.variations_form .reset_variations{display:inline-block;margin-top:8px;font-size:12.5px;color:var(--muted);text-decoration:underline}
.bs-product-top form.variations_form .single_variation_wrap{margin-top:4px}
.bs-product-top form.variations_form .woocommerce-variation{margin:0 0 10px}
.bs-product-top form.variations_form .woocommerce-variation-price .price{font:700 22px var(--ff-head);color:var(--ink)}
.bs-product-top form.variations_form .woocommerce-variation-availability p{margin:4px 0 0;font-size:13.5px}
.bs-product-top .woocommerce-variation-add-to-cart{display:flex;flex-wrap:wrap;gap:12px;align-items:center}

/* ---- Variant pills / colour swatches (JS hides the real select) -------------- */
.bs-swatches{display:none;flex-wrap:wrap;gap:8px}
.bs-js .bs-swatches{display:flex}
.bs-js select[data-bs-swatched]{position:absolute!important;width:1px!important;height:1px!important;min-width:0!important;opacity:0;pointer-events:none;overflow:hidden;clip:rect(0 0 0 0)}
.bs-swatch{
  display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:0 16px;
  border:1px solid var(--line);border-radius:var(--r-sm,10px);background:#fff;color:var(--ink);
  font:500 14px/1 var(--ff-body);cursor:pointer;transition:border-color .15s,box-shadow .15s,background-color .15s,color .15s
}
.bs-swatch:hover{border-color:var(--ink)}
.bs-swatch.is-on{border-color:var(--ink);box-shadow:inset 0 0 0 1px var(--ink);font-weight:600}
.bs-swatch.is-off{opacity:.42;text-decoration:line-through;cursor:not-allowed}
.bs-swatch.is-off:hover{border-color:var(--line)}
.bs-swatch:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.bs-swatch__dot{width:20px;height:20px;border-radius:50%;background:var(--sw);box-shadow:inset 0 0 0 1px rgba(0,0,0,.14);flex:none}
/* Colour group: round swatches; the name shows in the label once chosen. */
.bs-swatches--color .bs-swatch{padding:0;width:44px;min-height:44px;justify-content:center;border-radius:50%}
.bs-swatches--color .bs-swatch__t{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.bs-swatches--color .bs-swatch__dot{width:32px;height:32px}
.bs-swatches--color .bs-swatch.is-on{box-shadow:0 0 0 2px #fff,0 0 0 4px var(--ink);border-color:transparent}
.bs-swatches--color .bs-swatch.is-off{text-decoration:none}
.bs-swatches--color .bs-swatch.is-off .bs-swatch__dot{background:linear-gradient(135deg,var(--sw) 45%,#fff 45%,#fff 55%,var(--sw) 55%)}

/* ---- Buy box finish --------------------------------------------------------- */
.bs-product-top .single_add_to_cart_button{position:relative;overflow:hidden;isolation:isolate}
.bs-product-top .single_add_to_cart_button::after{
  content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;
  background:linear-gradient(110deg,transparent 35%,rgba(255,255,255,.22) 50%,transparent 65%);
  transform:translateX(-120%);transition:transform .7s var(--ease,ease)
}
.bs-product-top .single_add_to_cart_button:hover::after{transform:translateX(120%)}
.bs-product-top .single_add_to_cart_button:active{transform:translateY(0) scale(.985)}
.bs-product-top .single_add_to_cart_button:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
/* Variation not chosen yet: a clear "not ready" state instead of a dead button. */
.bs-product-top .single_add_to_cart_button.disabled,
.bs-product-top .single_add_to_cart_button:disabled{opacity:.45;cursor:not-allowed;transform:none;box-shadow:none}
.bs-product-top .single_add_to_cart_button.disabled::after{display:none}
/* The add-to-cart block wrapper is a flex row — without this the form shrank to
   its content and the "fill the row" button never filled anything. */
.bs-product-top .wp-block-woocommerce-add-to-cart-form > form.cart{flex:1 1 100%;width:100%}
/* Availability: in stock reads as good news (green + status dot), never in the
   red sale accent some presets use. */
.bs-product-top .stock.in-stock{display:inline-flex;align-items:center;gap:7px;color:var(--badge-limited,#14854e);font-weight:600}
.bs-product-top .stock.in-stock::before{content:"";width:8px;height:8px;border-radius:50%;background:currentColor;box-shadow:0 0 0 3px color-mix(in srgb,currentColor 18%,transparent)}
/* Same height for stepper + button, button fills the row. */
.bs-product-top form.cart .quantity.bs-qty{height:52px}
.bs-product-top form.cart .single_add_to_cart_button{height:52px;font-size:15px;letter-spacing:.01em}
@media (max-width:520px){
  .bs-product-top form.cart .single_add_to_cart_button{flex:1 1 100%;order:2}
}

/* ---- Rating near the title jumps to the summary ------------------------------ */
.bs-rv-jump{display:inline-block;color:inherit;text-decoration:none}
.bs-rv-jump:hover .wc-block-components-product-rating__stars,
.bs-rv-jump:hover .star-rating{opacity:.8}

/* ---- Reviews summary -------------------------------------------------------- */
.bs-rv{margin:56px 0 0;padding-top:40px;border-top:1px solid var(--line);scroll-margin-top:calc(var(--bs-stack,112px) + 16px)}
.bs-rv__h{font-size:clamp(22px,2.4vw,28px);margin:0 0 24px}
.bs-rv__grid{display:grid;grid-template-columns:1fr;gap:24px}
@media (min-width:900px){.bs-rv__grid{grid-template-columns:300px 1fr;gap:40px;align-items:start}}
.bs-rv-sum{padding:22px;border:1px solid var(--line);border-radius:var(--r-card,15px);background:var(--base-2,#f6f6f4)}
.bs-rv-sum__score{font:700 44px/1 var(--ff-head);color:var(--ink);letter-spacing:-.02em}
.bs-rv-sum__score small{font-size:14px;font-weight:500;color:var(--muted);margin-left:6px;letter-spacing:0}
.bs-rv-sum__n{margin:8px 0 14px;font-size:13.5px;color:var(--muted)}
.bs-rv-stars{--rv:100%;position:relative;display:inline-block;font-size:16px;line-height:1;letter-spacing:2px;color:#d9d6cf}
.bs-rv-stars::before{content:"★★★★★"}
.bs-rv-stars::after{content:"★★★★★";position:absolute;left:0;top:0;width:var(--rv);overflow:hidden;white-space:nowrap;color:#f5a524}
.bs-rv-stars--lg{font-size:22px;margin-top:10px}
.bs-rv-dist{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px}
.bs-rv-dist li{display:grid;grid-template-columns:34px 1fr 38px;align-items:center;gap:10px;font-size:12.5px;color:var(--body)}
.bs-rv-dist__bar{height:7px;border-radius:7px;background:var(--line);overflow:hidden}
.bs-rv-dist__bar span{display:block;height:100%;border-radius:7px;background:#f5a524}
.bs-rv-dist__v{text-align:right;font-variant-numeric:tabular-nums;color:var(--muted)}
.bs-rv-all{display:inline-block;margin-top:16px;font-weight:600;font-size:13.5px;color:var(--ink);text-decoration:underline;text-underline-offset:3px}
.bs-rv-cards{display:grid;grid-template-columns:1fr;gap:14px}
@media (min-width:640px){.bs-rv-cards{grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}}
.bs-rv-card{display:flex;flex-direction:column;gap:10px;padding:20px;border:1px solid var(--line);border-radius:var(--r-card,15px);background:#fff}
.bs-rv-card__t{margin:0;font-size:15.5px!important;line-height:1.35;color:var(--ink)}
.bs-rv-card__x{margin:0;font-size:14px;line-height:1.65;color:var(--body);flex:1 1 auto}
.bs-rv-card__f{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 12px;padding-top:12px;border-top:1px solid var(--line);font-size:12.5px;color:var(--muted)}
.bs-rv-card__who{font-weight:700;color:var(--ink)}
.bs-rv-card__loc{font-weight:400;color:var(--muted)}
.bs-rv-card__ver{color:#14854e;font-weight:600}
.bs-rv-card__d{margin-left:auto}

@media (prefers-reduced-motion:reduce){
  .bs-product-top .single_add_to_cart_button::after{transition:none;display:none}
  .bs-swatch{transition:none}
}
