.storekit-sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important;}
/* ---- horizontal-trust-ticker ---- */
/* §4.4 horizontal-ticker — reduced-motion enhancement (live has NONE; safe a11y add).
   The pure-CSS media query works even if storekit-runtime.js never loads. The
   .ht-ticker--reduced class is toggled by the HorizontalTicker controller so a
   LIVE preference change (user flips the OS setting after load, or Playwright
   emulateMedia) also stops the marquee without a reload. `animation: none` resets
   the transform to translateX(0) -> real Set-A items shown static, left-aligned. */
@media (prefers-reduced-motion: reduce) {
  .ht-ticker-track { animation: none !important; }
}
.ht-ticker-track.ht-ticker--reduced { animation: none !important; }

/* ---- sticky-header ---- */
/* ── sticky-header (on-scroll-up) state classes ──────────────────────────────
   REQUIRED: these rules lived in Dawn's section-header.css, which the capture
   stripped — they are NOT in the study DOM's inline <style>. Without them the
   class toggles are inert and nothing moves. The captured CSS only gives
   `.section-header{ position:sticky; transform:translateZ(0); will-change:transform }`
   (an inert sticky with no `top`). */
.section-header.shopify-section-header-sticky {
  position: fixed; top: 0; left: 0; width: 100%; z-index: 5;
}
.section-header.shopify-section-header-hidden {
  transform: translateY(calc(-1 * var(--header-height, 91px)));
}
.section-header.animate {
  transition: transform 0.15s ease-out;   /* Dawn default slide */
}
/* Shadow only while stuck AND visible (revealed) — i.e. "not at top". */
.section-header.shopify-section-header-sticky:not(.shopify-section-header-hidden) .header-wrapper {
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
}
@media (prefers-reduced-motion: reduce) {
  .section-header.animate { transition: none; }
}

/* ---- scroll-to-top-button ---- */
/* Scroll-to-top FAB — layout + reveal state.
 * The captured <style data-shopify> only sets color + --offset-x/--offset-y on
 * .scroll-to-top-btn-scroll-to-top-btn; the positioning / shape / reveal CSS was
 * injected by the live main.js and NEVER captured, so it must be supplied here.
 * These rules deliberately DO NOT set background-color/color — they inherit from
 * the captured class rule so it stays authoritative (incl. the 749px offset flip
 * to 1.5rem). rem scale is ~10px/rem in this theme (confirmed: 1.4rem == ~14px nav). */
.scroll-to-top-btn-scroll-to-top-btn{
  position: fixed;
  right: var(--offset-x, 2rem);
  bottom: var(--offset-y, 2rem);
  z-index: 5;
  width: 4.4rem;
  height: 4.4rem;
  padding: 0;
  border: 0;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  box-shadow: 0 4px 14px rgba(0, 0, 0, 0.25);
  /* hidden until scrolled past ~1 viewport (fade + slight rise) */
  opacity: 0;
  visibility: hidden;
  transform: translateY(1rem);
  transition: opacity .25s ease, transform .25s ease, visibility .25s ease;
}
.scroll-to-top-btn-scroll-to-top-btn.is-visible{
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}
.scroll-to-top-btn-scroll-to-top-btn .material-symbols-outlined{
  font-size: 2.4rem;
  line-height: 1;
}
@media (prefers-reduced-motion: reduce){
  .scroll-to-top-btn-scroll-to-top-btn{ transition: opacity .01ms linear, visibility .01ms linear; transform: none; }
  .scroll-to-top-btn-scroll-to-top-btn.is-visible{ transform: none; }
}

/* ---- variant-picker ---- */
/* Variant option value that no available variant supports (built per
   pdp-buybox.md §4 — the captured theme ships NO rule for this state).
   Scoped to <variant-selects> so it never leaks; non-animated, scheme-safe
   (uses currentColor, no hardcoded background). */
variant-selects .product-form__input label[data-sk-unavailable] {
  opacity: .4;
  cursor: not-allowed;
  position: relative;
}
variant-selects .product-form__input label[data-sk-unavailable]::after {
  content: "";
  position: absolute;
  left: 0; right: 0; top: 50%;
  border-top: 1px solid currentColor;
  transform: rotate(-12deg);
  pointer-events: none;
}

/* ---- kaching-bundle-tiers ---- */
/* BundleTiers — reduced-motion: silence the looping scratch hint squiggle, the
   canvas reveal fade, and the badge pop. The captured Kaching app CSS has no
   prefers-reduced-motion rule; this is a safe GAP improvement (JS-CATALOG §7.6).
   All --selected / --revealing / --unscratched / --hidden states are already
   styled by the captured #kaching-bundles-styles sheet, so no other CSS is
   needed for the behavior. */
@media (prefers-reduced-motion: reduce) {
  .kaching-bundles__scratch-off-hint-path { animation: none; }
  .kaching-bundles__scratch-off-canvas,
  .kaching-bundles__scratch-off-hint,
  .kaching-bundles__scratch-off-title { transition: none; }
  .kaching-bundles__scratch-off--revealing .kaching-bundles__bar-most-popular { animation: none; }
}

/* ===================================================================
 * StoreKit MANUAL CSS fixes — always appended by assemble.py (css-manual.css),
 * so a reassembly never clobbers them. These are corrections found by driving
 * the live-vs-ours diff, NOT agent controller deltas.
 * =================================================================== */

/* ---- marquee animations RE-APPLY (announcement bar + trust ticker) ----
   The live rule that applied the scroll animation was scoped to a Shopify
   section-ID ancestor class absent from our markup, so @keyframes (which ARE
   present) were never referenced → bars sat still. Re-apply via stable classes.
   (Also requires the head-extra kill-switch `*{animation:none!important}` to be
   stripped — done in the captured fragment + build-static-theme.mjs.) */
.infinite-scroll-wrapper .infinite-scroll-content {
  animation: infinite-scroll 35s linear infinite;
}
.infinite-scroll-wrapper .infinite-scroll-content:hover { animation-play-state: paused; }
.ht-ticker-track {
  animation: ht-scroll-template--23272501313776__horizontal_ticker_JxGeBA 30s linear infinite;
}
.ht-ticker-track:hover { animation-play-state: paused; }
@media (prefers-reduced-motion: reduce) {
  .infinite-scroll-wrapper .infinite-scroll-content { animation: none; }
  .ht-ticker-track { animation: none; }
}

/* ================= Kaching bundle picker — CLEAN RECONSTRUCTION =================
   The Kaching app injects its layout stylesheet (#kaching-bundles-styles) via JS at
   runtime; the static capture stripped it, so there are ZERO rules for the bar/tier
   classes and the raw markup renders cramped + duplicated. This rebuilds the picker
   in Kaching-class space to the same clean design language we shipped on MediCube,
   using LIVE MELAXIN's reverse-engineered Kaching palette (accent #0085FF, bar bg
   #EDF6FF, badge #D9EDFF, muted #999, ink #1a3b3b). Goal: matches live 1:1, clean.
   Palette source: ~/research/medicube-bundles/medicube-bundles.liquid header. */
.kaching-bundles__block { --kb-accent:#0085ff; --kb-bg:#edf6ff; --kb-badge:#d9edff; --kb-ink:#1a3b3b; --kb-muted:#999; --kb-line:#dbe8fb; }

/* Block heading ("DERMATOLOGIST'S CHOICE") — live centres it with flanking rules. The real
   Kaching stylesheet (stripped at capture) does this with flex + :before/:after bars; the
   inline --bar-border-color on the block resolves them to the live light-blue. */
.kaching-bundles__block-title {
  display: flex; align-items: center; text-align: center; gap: 8px;
  margin: 10px 0; color: var(--block-title-color, #000);
  font-size: var(--block-title-font-size, 14px); font-weight: var(--block-title-font-weight, bold);
}
.kaching-bundles__block-title:first-child { margin-top: 0; }
.kaching-bundles__block-title::before,
.kaching-bundles__block-title::after {
  content: ""; flex-grow: 1; height: 2px;
  background-color: var(--bar-border-color, rgba(0,133,255,.3));
}

/* --- tier list = stacked SEPARATE premium boxes (MediCube design) --- */
.kaching-bundles__bars {
  display: flex; flex-direction: column; gap: 12px;
  border: none; background: transparent; border-radius: 0;
}
/* each tier = its own clean rounded box */
.kaching-bundles__bar-container {
  display: block !important;
  position: relative;
  background: var(--kb-bg);
  border: 1.5px solid var(--kb-line);
  border-radius: 12px;
  margin: 0 !important;
  padding: 15px 16px;
  cursor: pointer;
  transition: background .18s, border-color .18s, box-shadow .18s;
}
.kaching-bundles__bar-container:hover { border-color: #a9ccf3; }
/* SELECTED box = clear, prominent highlight (the "box they're choosing" lights up):
   white bg + 2px brand border + soft brand shadow — matches the original/MediCube. */
.kaching-bundles__bar--selected .kaching-bundles__bar-container {
  background: #fff;
  border: 2px solid var(--kb-accent) !important;
  box-shadow: 0 6px 18px rgba(0,133,255,.20);
  padding: 14px 15px;
}
/* the scratch-off wraps the Gold Standard box — round it to match the boxes */
.kaching-bundles__scratch-off { border-radius: 12px; overflow: hidden; }
.kaching-bundles__scratch-off-canvas { border-radius: 12px !important; }
.kaching-bundles__bar-wrapper { display: block; }
.kaching-bundles__bar-main { display: flex; align-items: flex-start; gap: 0; }
.kaching-bundles__bar-content {
  display: flex; flex: 1 1 auto; min-width: 0;
  align-items: flex-start; justify-content: space-between; gap: 12px;
}
.kaching-bundles__bar-content-left { display: flex; flex-direction: column; gap: 3px; min-width: 0; flex: 1 1 auto; }
.kaching-bundles__bar-first-line { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }

/* --- NO radio circle: the RECTANGLE is the picker (selection = the box highlight,
   like live). Operator: "there's a circle indication ... the rectangle is the picker".
   Hide BOTH the styled radio div AND the native <input type=radio> the browser draws
   (the controller still reads/sets .checked on the hidden input for cart state). --- */
.kaching-bundles__bar-radio { display: none !important; }
.kaching-bundles__bars input[type="radio"],
.kaching-bundles__bar > input[type="radio"],
.kaching-bundles__scratch-off input[type="radio"] {
  position: absolute !important; opacity: 0 !important; width: 0 !important; height: 0 !important;
  margin: 0 !important; padding: 0 !important; pointer-events: none !important; clip: rect(0 0 0 0) !important;
}

/* --- title + save chip --- */
.kaching-bundles__bar-title { font-size: 16px; font-weight: 700; color: var(--kb-ink); line-height: 1.25; }
.kaching-bundles__bar-subtitle { font-size: 12.5px; color: var(--kb-muted); line-height: 1.35; margin-top: 1px; }
.kaching-bundles__bar-label {
  display: inline-block; background: var(--kb-badge); color: #0a5ca8;
  font-size: 11px; font-weight: 700; border-radius: 6px; padding: 2px 7px; white-space: nowrap;
}
/* "Save $..." renders TWICE in the raw markup (most-popular badge + bar-label chip).
   Keep the single top pill; hide the redundant inline chip. */
.kaching-bundles__bar-most-popular {
  display: inline-block; background: var(--kb-badge); color: #0a5ca8;
  font-size: 11px; font-weight: 800; border-radius: 6px; padding: 2px 8px;
  margin-bottom: 8px; letter-spacing: .2px;
}
.kaching-bundles__bar-most-popular__content { display: inline; }
/* SAVE %% badge (bar-label) — live SHOWS this as an inline pill next to the pack name; the earlier
   reconstruction wrongly hid it. Style it to live's inline pill (uses the block's inline
   --bar-label-* vars when present). */
.kaching-bundles__bar-label {
  display: inline-flex; align-items: center; justify-content: center; gap: 4px;
  position: static; top: auto; left: auto; right: auto;
  background: var(--bar-label-background-color, var(--kb-badge));
  color: var(--bar-label-color, #0a5ca8);
  font-size: var(--bar-label-font-size, 11px); font-weight: 700;
  border-radius: 6px; padding: 2px 7px; white-space: nowrap; vertical-align: middle;
}

/* --- pricing (right) --- */
.kaching-bundles__bar-pricing { display: flex; flex-direction: column; align-items: flex-end; flex: 0 0 auto; }
.kaching-bundles__bar-price { font-size: 16px; font-weight: 700; color: var(--kb-ink); }
.kaching-bundles__bar-full-price { font-size: 12.5px; color: var(--kb-muted); text-decoration: line-through; }

/* --- the two bundled component cards (Collagen Set + Balm Set) --- */
.kaching-bundles__bundle-products { display: flex; align-items: stretch; gap: 8px; margin-top: 12px; flex-wrap: nowrap; }
.kaching-bundles__bundle-products__product { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 5px; flex: 1 1 0; min-width: 0; }
.kaching-bundles__bundle-products__link { display: flex; flex-direction: column; align-items: center; gap: 5px; text-decoration: none; color: inherit; }
.kaching-bundles__bundle-products__image { width: 60px; height: 60px; object-fit: cover; border-radius: 10px; border: 1px solid #eef3f9; background: #fff; }
.kaching-bundles__bundle-products__title { font-size: 12px; font-weight: 600; color: var(--kb-ink); line-height: 1.25; }
.kaching-bundles__bundle-products__pricing { display: flex; align-items: baseline; gap: 5px; justify-content: center; flex-wrap: wrap; }
.kaching-bundles__bundle-products__price { font-size: 12.5px; font-weight: 700; color: var(--kb-ink); }
.kaching-bundles__bundle-products__full-price { font-size: 11px; color: var(--kb-muted); text-decoration: line-through; }
/* plain "+" between the two products — NO circle, and hide the Kaching SVG that
   rendered as a spinner-looking ring ("that circle picker thing" — operator killed it). */
.kaching-bundles__bundle-products__divider { display: flex; flex-direction: column; align-items: center; justify-content: center; flex: 0 0 auto; align-self: center; }
.kaching-bundles__bundle-products__divider-line { display: none; }
.kaching-bundles__bundle-products__divider-icon {
  width: auto; height: auto; background: none !important; border-radius: 0 !important;
  color: #aab3bf; display: flex; align-items: center; justify-content: center;
  font-weight: 400; font-size: 24px; line-height: 1;
}
.kaching-bundles__bundle-products__divider-icon svg { display: none !important; }
.kaching-bundles__bundle-products__divider-icon::before { content: "+"; }
/* neutralise any stray Kaching overlay/badge on the component images (no app CSS to position it) */
.kaching-bundles__bundle-products__image ~ svg,
.kaching-bundles__bundle-products__product [class*="remove"],
.kaching-bundles__bundle-products__product [class*="quantity"],
.kaching-bundles__bundle-products__product [class*="badge"] { display: none !important; }

.kaching-bundles select { max-width: 130px; padding: 3px 6px; border: 1px solid #ccc; border-radius: 4px; font-size: 12px; background: #fff; }

/* ---- Kaching scratch-off: FUNCTIONAL (match live 1:1) ----
   The captured `.kaching-bundles__scratch-off` wraps the preselected "The Clinical Gold
   Standard" tier under a gold #FFB200 <canvas> the shopper scratches to reveal (spec:
   ~/research/medicube-bundles/SCRATCH_OFF_SPEC.md). kaching-bundle-tiers.js paints the coat,
   scratches on pointer drag, and after a 1500ms timer fades the canvas + auto-selects the
   revealed tier (Buy Now 84.95 -> 125.92). This REPLACES the earlier static-reveal workaround
   (which assumed the JS couldn't run — it now does). Canvas overlays the tier; title sits on top. */
.kaching-bundles__scratch-off {
  position: relative;
  display: flex;
  flex-direction: column;
  border-radius: 8px;
}
.kaching-bundles__scratch-off--unscratched { user-select: none; }
.kaching-bundles__scratch-off--unscratched .kaching-bundles__bar { pointer-events: none; }
.kaching-bundles__scratch-off-canvas {
  position: absolute; inset: 0; width: 100%; height: 100%;
  border-radius: 8px; cursor: pointer; touch-action: none;
  transition: opacity .3s ease-out; z-index: 11;
}
.kaching-bundles__scratch-off-canvas--revealing { opacity: 0; pointer-events: none; }
.kaching-bundles__scratch-off-title {
  position: absolute; inset: 0; margin: auto; height: -moz-fit-content; height: fit-content;
  z-index: 12; pointer-events: none; text-align: center; align-self: center;
  /* match live EXACTLY: --scratch-off-title-color rgba(83,60,10), --scratch-off-title-size 24px,
     sentence-case (live text = "Scratch more special offers"), not small uppercase */
  color: rgba(83,60,10,1); font-weight: 700; font-size: 24px; line-height: 1.25; letter-spacing: normal;
  text-transform: none; max-width: 66%; margin-left: auto; margin-right: auto;
  text-shadow: 0 1px 0 rgba(255,255,255,.25);
}
/* subtle scratch squiggle — smaller + fainter so the coat reads clean, not blotchy */
.kaching-bundles__scratch-off-hint {
  position: absolute; inset: 0; margin: auto; z-index: 11; pointer-events: none;
  opacity: .14; max-width: 240px; max-height: 78px;
}
.kaching-bundles__scratch-off-title--hidden,
.kaching-bundles__scratch-off-hint--hidden { display: none !important; }

/* ---- Material Symbols icon font — EXACT ORIGINAL THEME CODE ----
   Pulled verbatim from the live Elevate Wash theme.liquid (drmelaxin-full-export,
   theme 157923246297 layout/theme.liquid). The static capture stripped this inline
   block, so the `.material-symbols-outlined` ligatures (menu / shopping_bag /
   local_shipping / lock / verified / science / groups / person …) rendered as literal
   text. Restoring the theme's OWN @font-face + rule renders them 1:1 — including
   `max-width:1em; overflow:hidden` (a font miss shows a clipped sliver, never the raw word). */
@font-face {
  font-family: 'Material Symbols Outlined';
  src: url(https://fonts.gstatic.com/s/materialsymbolsoutlined/v141/kJF4BvYX7BgnkSrUwT8OhrdQw4oELdPIeeII9v6oDMzBwG-RpA6RzaxHMPdY40KH8nGzv3fzfVJU22ZZLsYEpzC_1qmr5Y0.woff2) format('woff2');
  font-style: normal; font-weight: 300; font-display: swap;
}
.material-symbols-outlined {
  font-family: 'Material Symbols Outlined';
  font-weight: normal; font-style: normal; font-size: 24px; line-height: 1;
  letter-spacing: normal; text-transform: none; display: inline-block;
  white-space: nowrap; word-wrap: normal; direction: ltr;
  -webkit-font-feature-settings: 'liga'; -webkit-font-smoothing: antialiased;
  max-width: 1em; overflow: hidden; flex-shrink: 0;
  font-variation-settings: 'FILL' 0, 'wght' 300, 'GRAD' 0, 'opsz' 48;
  vertical-align: bottom;
}
.material-symbols-outlined.filled { font-variation-settings: 'FILL' 1; }

/* (bundle-products + selected-border now live in the CLEAN RECONSTRUCTION block above.) */
/* Ingredients / per-unit variant selectors — live SHOWS these on the SELECTED tier (one row per
   unit in the pack: thumbnail + "Black Rice" select). The earlier note "hide to match live" was
   WRONG. Show them only inside the selected bar, styled to live. */
.kaching-bundles__bar-variants { display: none; flex-direction: column; align-items: flex-start; gap: 8px; margin-top: 12px; width: 100%; }
.kaching-bundles__bar--selected .kaching-bundles__bar-variants { display: flex; }
.kaching-bundles__bar-variant-names { color: var(--kb-ink); font-weight: 600; font-size: 13px; }
.kaching-bundles__bar-variant-selector-wrapper { display: flex; flex-direction: column; gap: 8px; width: 100%; }
.kaching-bundles__bar-variant { display: flex; align-items: center; gap: 10px; width: 100%; }
.kaching-bundles__bar-variant__content { display: flex; align-items: center; gap: 10px; width: 100%; }
.kaching-bundles__bar-variant-image { width: 40px; height: 40px; object-fit: cover; border-radius: 6px; border: 1px solid #eef3f9; background: #fff; flex: 0 0 auto; }
.kaching-bundles__bar-variant-main { flex: 1 1 auto; min-width: 0; }
.kaching-bundles__bar-variant-selects { display: flex; flex-wrap: wrap; gap: 6px; width: 100%; }
.kaching-bundles__bar-variant-select {
  flex: 1 1 auto; min-width: 0; padding: 8px 10px; border: 1.5px solid var(--kb-line);
  border-radius: 6px; background: #fff; color: var(--kb-ink); font-size: 13px; font-weight: 500;
}

/* ---- content-width cap (responsiveness) ----
   Live caps the content column at `--page-width: 160rem` (1600px), centered. Our capture
   flattened `.page-width` to `max-width:100%`, so on wide screens the whole page stretched
   edge-to-edge (text + layout spread across the full monitor = "not responsive"). Restore the
   live cap so content stays a centered ~1600px column on big screens. */
.page-width {
  max-width: 160rem !important;
  margin-left: auto !important;
  margin-right: auto !important;
}
/* The NARROW variant (SEO/content article column) must stay a ~726px measure like live — the
   .page-width cap above (160rem, !important) was overriding it, so article text ran full-width
   (fewer line wraps → the content page rendered ~550px SHORTER than live on desktop). Higher
   specificity (.page-width.page-width--narrow) beats the wide cap. */
.page-width.page-width--narrow,
.page-width--narrow {
  max-width: 726px !important;
}

/* ---- responsive scrolling ----
   Removing the head-extra kill-switch re-enabled `html{scroll-behavior:smooth}`.
   On this ~12,000px page smooth scroll makes the wheel/End feel frozen/laggy
   (reads as "broken / nothing scrolls"). Force instant, responsive scrolling.
   Anchor jumps stay fine; only the animation is removed. */
html { scroll-behavior: auto !important; }

/* ===== REAL Kaching progressive-gifts CSS (verbatim from kaching-runtime.css, ancestor prefix stripped, 3 no-fallback vars defaulted) — fixes BOGO/free-gift bundles 1:1 ===== */
.kaching-bundles__progressive-gifts {
  --kaching-bundles-progressive-gifts-background-color:#fff;
  --kaching-bundles-progressive-gifts-border-radius:12px;
  --kaching-bundles-progressive-gifts-locked-background-color:#f7f9fc;
  --bar-border-radius:12px; --block-spacing:1;
}
.kaching-bundles__deal-bar-progressive-gifts{border-end-start-radius:var(--bar-border-radius);border-end-end-radius:var(--bar-border-radius)}
.kaching-bundles__progressive-gifts{display:flex;flex-direction:column;gap:calc(10px * var(--block-spacing, 1) + 4px);margin-top:calc(10px * var(--block-spacing, 1))}
.kaching-bundles__progressive-gifts__header{display:flex;flex-direction:column}
.kaching-bundles__progressive-gifts__title{color:var(--kaching-bundles-progressive-gifts-title-color, #000);text-align:var(--kaching-bundles-progressive-gifts-title-alignment, center);font-weight:var(--kaching-bundles-progressive-gifts-title-weight, bold);font-style:var(--kaching-bundles-progressive-gifts-title-style, normal);font-size:var(--kaching-bundles-progressive-gifts-title-size, 20px)}
.kaching-bundles__progressive-gifts__subtitle{color:var(--kaching-bundles-progressive-gifts-subtitle-color, #000);text-align:var(--kaching-bundles-progressive-gifts-subtitle-alignment, center);font-weight:var(--kaching-bundles-progressive-gifts-subtitle-weight, 450);font-style:var(--kaching-bundles-progressive-gifts-subtitle-style, normal);font-size:var(--kaching-bundles-progressive-gifts-subtitle-size, 16px)}
.kaching-bundles__progressive-gifts__gifts{display:grid;grid-template-columns:repeat(auto-fit,minmax(0,1fr));justify-content:center;gap:calc(10px * var(--block-spacing, 1))}
.kaching-bundles__progressive-gifts__gift{position:relative;display:flex;flex-direction:column;align-items:center;padding:calc(10px * var(--block-spacing, 1));gap:calc(6px * var(--block-spacing, 1));border-radius:var(--kaching-bundles-progressive-gifts-border-radius);background-color:var(--kaching-bundles-progressive-gifts-background-color);box-shadow:inset 0 0 0 2px var(--kaching-bundles-progressive-gifts-border-color, #000)}
.kaching-bundles__progressive-gifts__gift.kaching-bundles__progressive-gifts__gift--locked{background-color:var(--kaching-bundles-progressive-gifts-locked-background-color);box-shadow:inset 0 0 0 1px var(--kaching-bundles-progressive-gifts-locked-border-color, rgba(0, 0, 0, .3));cursor:pointer}
.kaching-bundles__progressive-gifts__gift.kaching-bundles__progressive-gifts__gift--locked:hover,.kaching-bundles__progressive-gifts__gift.kaching-bundles__progressive-gifts__gift--locked:focus{box-shadow:inset 0 0 0 2px var(--kaching-bundles-progressive-gifts-locked-border-color, rgba(0, 0, 0, .3))}
.kaching-bundles__progressive-gifts__gift.kaching-bundles__progressive-gifts__gift--locked:focus{outline:none}
.kaching-bundles__progressive-gifts__gift.kaching-bundles__progressive-gifts__gift--out-of-stock{opacity:.3}
.kaching-bundles__progressive-gifts__gift__content{display:flex;flex-direction:column;max-width:100%;gap:calc(6px * var(--block-spacing, 1))}
.kaching-bundles__progressive-gifts__gift__image-wrapper{display:flex;flex-shrink:0;align-items:center;justify-content:center;height:var(--kaching-bundles-progressive-gifts-image-size, 100px);width:initial;max-width:100%;margin-top:max(0px,(100px - var(--kaching-bundles-progressive-gifts-image-size, 100px)) / 5);color:var(--kaching-bundles-progressive-gifts-locked-icon-color, #667085);border-radius:calc(var(--kaching-bundles-progressive-gifts-border-radius) / 2);background-color:transparent}
.kaching-bundles__progressive-gifts__gift__image-wrapper svg{width:auto;height:100%}
.kaching-bundles__progressive-gifts__gift__image{-o-object-fit:contain;object-fit:contain;max-height:100%;max-width:100%;border-radius:calc(var(--kaching-bundles-progressive-gifts-border-radius) / 2);width:initial}
.kaching-bundles__progressive-gifts__gift__details{display:flex;flex-direction:column;gap:4px;align-items:center;min-width:0}
.kaching-bundles__progressive-gifts__gift__details__content{display:flex;align-items:center;gap:8px}
.kaching-bundles__progressive-gifts__gift__title{font-weight:500;text-align:center;color:var(--kaching-bundles-progressive-gifts-text-color, #000);font-size:var(--kaching-bundles-progressive-gifts-text-size, 14px)}
.kaching-bundles__progressive-gifts__gift__title.kaching-bundles__progressive-gifts__gift__title--locked{color:var(--kaching-bundles-progressive-gifts-locked-text-color, #555);font-size:var(--kaching-bundles-progressive-gifts-locked-text-size, 14px)}
.kaching-bundles__progressive-gifts__gift:not(.kaching-bundles__progressive-gifts__gift--locked) .kaching-bundles__progressive-gifts__gift__image,.kaching-bundles__progressive-gifts__gift:not(.kaching-bundles__progressive-gifts__gift--locked) .kaching-bundles__progressive-gifts__gift__title{animation:kaching-progressive-gift-unlock .6s ease-out}
.kaching-bundles__progressive-gifts__gift__label{display:flex;flex-direction:row;align-items:center;position:absolute;top:-8px;left:50%;transform:translate(-50%);line-height:1;gap:calc(5px * var(--block-spacing, 1));padding:calc(8px * var(--block-spacing, 1));background-color:var(--kaching-bundles-progressive-gifts-label-background-color, #eee);border-radius:var(--kaching-bundles-progressive-gifts-border-radius)}
.kaching-bundles__progressive-gifts__gift__label__text{font-weight:450;color:var(--kaching-bundles-progressive-gifts-label-text-color, #777);font-size:var(--kaching-bundles-progressive-gifts-label-text-size, 12px);white-space:nowrap}
.kaching-bundles__progressive-gifts__gift__label__text.kaching-bundles__progressive-gifts__gift__label__text--crossed-out{text-decoration:line-through}
.kaching-bundles__progressive-gifts__gifts.kaching-bundles__progressive-gifts__gifts--vertical{display:flex;flex-direction:column}
.kaching-bundles__progressive-gifts__gifts.kaching-bundles__progressive-gifts__gifts--vertical .kaching-bundles__progressive-gifts__gift{flex-direction:row;justify-content:space-between;gap:calc(10px * var(--block-spacing, 1))}
.kaching-bundles__progressive-gifts__gifts.kaching-bundles__progressive-gifts__gifts--vertical .kaching-bundles__progressive-gifts__gift__content{flex-direction:row;align-items:center;gap:calc(10px * var(--block-spacing, 1))}
.kaching-bundles__progressive-gifts__gifts.kaching-bundles__progressive-gifts__gifts--vertical .kaching-bundles__progressive-gifts__gift__details{align-items:flex-start}
.kaching-bundles__progressive-gifts__gifts.kaching-bundles__progressive-gifts__gifts--vertical .kaching-bundles__progressive-gifts__gift__image-wrapper{margin-top:0;height:var(--kaching-bundles-progressive-gifts-image-size, 50px);width:var(--kaching-bundles-progressive-gifts-image-size, 50px)}
.kaching-bundles__progressive-gifts__gifts.kaching-bundles__progressive-gifts__gifts--vertical .kaching-bundles__progressive-gifts__gift__title{text-align:start}
.kaching-bundles__progressive-gifts__gifts.kaching-bundles__progressive-gifts__gifts--vertical .kaching-bundles__progressive-gifts__gift__label{position:initial;transform:none}
.kaching-bundles__deal-bar-progressive-gifts{border-end-start-radius:var(--bar-border-radius);border-end-end-radius:var(--bar-border-radius)}
.kaching-bundles__progressive-gifts{display:flex;flex-direction:column;gap:calc(10px * var(--block-spacing, 1) + 4px);margin-top:calc(10px * var(--block-spacing, 1))}
.kaching-bundles__progressive-gifts__header{display:flex;flex-direction:column}
.kaching-bundles__progressive-gifts__title{color:var(--kaching-bundles-progressive-gifts-title-color, #000);text-align:var(--kaching-bundles-progressive-gifts-title-alignment, center);font-weight:var(--kaching-bundles-progressive-gifts-title-weight, bold);font-style:var(--kaching-bundles-progressive-gifts-title-style, normal);font-size:var(--kaching-bundles-progressive-gifts-title-size, 20px)}
.kaching-bundles__progressive-gifts__subtitle{color:var(--kaching-bundles-progressive-gifts-subtitle-color, #000);text-align:var(--kaching-bundles-progressive-gifts-subtitle-alignment, center);font-weight:var(--kaching-bundles-progressive-gifts-subtitle-weight, 450);font-style:var(--kaching-bundles-progressive-gifts-subtitle-style, normal);font-size:var(--kaching-bundles-progressive-gifts-subtitle-size, 16px)}
.kaching-bundles__progressive-gifts__gifts{display:grid;grid-template-columns:repeat(auto-fit,minmax(0,1fr));justify-content:center;gap:calc(10px * var(--block-spacing, 1))}
.kaching-bundles__progressive-gifts__gift{position:relative;display:flex;flex-direction:column;align-items:center;padding:calc(10px * var(--block-spacing, 1));gap:calc(6px * var(--block-spacing, 1));border-radius:var(--kaching-bundles-progressive-gifts-border-radius);background-color:var(--kaching-bundles-progressive-gifts-background-color);box-shadow:inset 0 0 0 2px var(--kaching-bundles-progressive-gifts-border-color, #000)}
.kaching-bundles__progressive-gifts__gift.kaching-bundles__progressive-gifts__gift--locked{background-color:var(--kaching-bundles-progressive-gifts-locked-background-color);box-shadow:inset 0 0 0 1px var(--kaching-bundles-progressive-gifts-locked-border-color, rgba(0, 0, 0, .3));cursor:pointer}
.kaching-bundles__progressive-gifts__gift.kaching-bundles__progressive-gifts__gift--locked:hover,.kaching-bundles__progressive-gifts__gift.kaching-bundles__progressive-gifts__gift--locked:focus{box-shadow:inset 0 0 0 2px var(--kaching-bundles-progressive-gifts-locked-border-color, rgba(0, 0, 0, .3))}
.kaching-bundles__progressive-gifts__gift.kaching-bundles__progressive-gifts__gift--locked:focus{outline:none}
.kaching-bundles__progressive-gifts__gift.kaching-bundles__progressive-gifts__gift--out-of-stock{opacity:.3}
.kaching-bundles__progressive-gifts__gift__content{display:flex;flex-direction:column;max-width:100%;gap:calc(6px * var(--block-spacing, 1))}
.kaching-bundles__progressive-gifts__gift__image-wrapper{display:flex;flex-shrink:0;align-items:center;justify-content:center;height:var(--kaching-bundles-progressive-gifts-image-size, 100px);width:initial;max-width:100%;margin-top:max(0px,(100px - var(--kaching-bundles-progressive-gifts-image-size, 100px)) / 5);color:var(--kaching-bundles-progressive-gifts-locked-icon-color, #667085);border-radius:calc(var(--kaching-bundles-progressive-gifts-border-radius) / 2);background-color:transparent}
.kaching-bundles__progressive-gifts__gift__image-wrapper svg{width:auto;height:100%}
.kaching-bundles__progressive-gifts__gift__image{-o-object-fit:contain;object-fit:contain;max-height:100%;max-width:100%;border-radius:calc(var(--kaching-bundles-progressive-gifts-border-radius) / 2);width:initial}
.kaching-bundles__progressive-gifts__gift__details{display:flex;flex-direction:column;gap:4px;align-items:center;min-width:0}
.kaching-bundles__progressive-gifts__gift__details__content{display:flex;align-items:center;gap:8px}
.kaching-bundles__progressive-gifts__gift__title{font-weight:500;text-align:center;color:var(--kaching-bundles-progressive-gifts-text-color, #000);font-size:var(--kaching-bundles-progressive-gifts-text-size, 14px)}
.kaching-bundles__progressive-gifts__gift__title.kaching-bundles__progressive-gifts__gift__title--locked{color:var(--kaching-bundles-progressive-gifts-locked-text-color, #555);font-size:var(--kaching-bundles-progressive-gifts-locked-text-size, 14px)}
.kaching-bundles__progressive-gifts__gift:not(.kaching-bundles__progressive-gifts__gift--locked) .kaching-bundles__progressive-gifts__gift__image,.kaching-bundles__progressive-gifts__gift:not(.kaching-bundles__progressive-gifts__gift--locked) .kaching-bundles__progressive-gifts__gift__title{animation:kaching-progressive-gift-unlock .6s ease-out}
.kaching-bundles__progressive-gifts__gift__label{display:flex;flex-direction:row;align-items:center;position:absolute;top:-8px;left:50%;transform:translate(-50%);line-height:1;gap:calc(5px * var(--block-spacing, 1));padding:calc(8px * var(--block-spacing, 1));background-color:var(--kaching-bundles-progressive-gifts-label-background-color, #eee);border-radius:var(--kaching-bundles-progressive-gifts-border-radius)}
.kaching-bundles__progressive-gifts__gift__label__text{font-weight:450;color:var(--kaching-bundles-progressive-gifts-label-text-color, #777);font-size:var(--kaching-bundles-progressive-gifts-label-text-size, 12px);white-space:nowrap}
.kaching-bundles__progressive-gifts__gift__label__text.kaching-bundles__progressive-gifts__gift__label__text--crossed-out{text-decoration:line-through}
.kaching-bundles__progressive-gifts__gifts.kaching-bundles__progressive-gifts__gifts--vertical{display:flex;flex-direction:column}
.kaching-bundles__progressive-gifts__gifts.kaching-bundles__progressive-gifts__gifts--vertical .kaching-bundles__progressive-gifts__gift{flex-direction:row;justify-content:space-between;gap:calc(10px * var(--block-spacing, 1))}
.kaching-bundles__progressive-gifts__gifts.kaching-bundles__progressive-gifts__gifts--vertical .kaching-bundles__progressive-gifts__gift__content{flex-direction:row;align-items:center;gap:calc(10px * var(--block-spacing, 1))}
.kaching-bundles__progressive-gifts__gifts.kaching-bundles__progressive-gifts__gifts--vertical .kaching-bundles__progressive-gifts__gift__details{align-items:flex-start}
.kaching-bundles__progressive-gifts__gifts.kaching-bundles__progressive-gifts__gifts--vertical .kaching-bundles__progressive-gifts__gift__image-wrapper{margin-top:0;height:var(--kaching-bundles-progressive-gifts-image-size, 50px);width:var(--kaching-bundles-progressive-gifts-image-size, 50px)}
.kaching-bundles__progressive-gifts__gifts.kaching-bundles__progressive-gifts__gifts--vertical .kaching-bundles__progressive-gifts__gift__title{text-align:start}
.kaching-bundles__progressive-gifts__gifts.kaching-bundles__progressive-gifts__gifts--vertical .kaching-bundles__progressive-gifts__gift__label{position:initial;transform:none}
