/** Shopify CDN: Minification failed

Line 230:33 Unexpected "*"

**/
/* Muser Boutique — global overrides on top of Horizon's own design-token
   system (settings_data.json already carries the Muser color palette,
   Fraunces/Work Sans fonts, and sharp-edge radii — see config/settings_data.json).
   This file only adds what Horizon's 4-role color_palette has no slot for. */

/* html:root (not a bare :root) is deliberate: Horizon's own
   snippets/theme-styles-variables.liquid defines --color-error/--color-success
   too (native defaults #8B0000/#006400, a generic dark red/green — nothing to
   do with Muser's palette), also on a bare :root, and it's injected later in
   <head> than this file. Same specificity + later source order meant the
   native values silently won every time, so the "Muser" reds/greens below
   were never actually reaching the page — found 2026-08-16 while checking why
   a brand-new icon came out native dark-green instead of the intended sage.
   The extra "html" type selector is the minimal fix: wins regardless of load
   order, no need to rename every var(--color-error)/var(--color-success)
   usage already written against these names. */
html:root {
  /* Semantic colors Horizon's palette (background/foreground/color1/color2)
     doesn't cover — kept as their own tokens, same values as the original
     Impulse-based build. */
  --color-accent: #3C4A47;
  --color-sand: #C9B9A3;
  --color-error: #8C4A3D;
  --color-success: #5C6B4F;
  --color-muted: #6E6858;
  --color-border: #E5E1D8;
  --color-lowstock: var(--color-error);
  --tracking-label: 0.08em;
  --dur-base: 200ms;
  --dur-slow: 420ms;
  --ease: cubic-bezier(0.4, 0, 0.2, 1);
  --radius-pill: 999px;
}

/* Low-stock line in the brand's urgency tone (real stock counts only — see
   PROJECT_STATUS.md "Stock real por variante"), matching the icon's own
   --color-lowstock token since Horizon doesn't color the text span itself. */
.product-inventory__status:has(.product-inventory__icon-low) .product-inventory__text {
  color: var(--color-error);
}

/* Sale price: red, matching the Liquidación Final treatment already live.
   Horizon's real classes (confirmed by reading snippets/product-card.liquid
   and blocks/price.liquid): .price-item--sale / .compare-at-price. */
.price-item--sale,
.price__sale .price {
  color: var(--color-error);
}
.compare-at-price,
.price-item--regular.compare-at-price {
  color: var(--color-foreground-subdued, var(--color-foreground));
  text-decoration: line-through;
}

/* Product page: white background for the whole page, distinct from the
   cream (--color-background) used everywhere else on the site. The
   product-information and product-recommendations sections already carry
   their own explicit #FFFFFF background_color (templates/product.json);
   this covers the rest of the page canvas (e.g. the volume-discounts
   section, which has no background setting of its own and would otherwise
   show whatever's behind it) — `data-template` is a native Horizon
   attribute on <main>, no vendor file edited to add it. */
main[data-template='product'] {
  background-color: #FFFFFF;
}

/* Wishlist heart — client-side only (muser-motion.js, localStorage), same
   button on every product card everywhere (snippets/product-card.liquid is
   Horizon's single universal card render point). */
product-card {
  position: relative;
}
.muser-wishlist-btn {
  position: absolute;
  top: 12px;
  right: 12px;
  z-index: 2;
  width: 32px;
  height: 32px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(248, 245, 240, 0.85);
  border-radius: 50%;
  border: none;
  cursor: pointer;
  opacity: 0;
  transform: translateY(-4px);
  transition: opacity 200ms ease, transform 200ms ease;
}
product-card:hover .muser-wishlist-btn,
.muser-wishlist-btn.is-active {
  opacity: 1;
  transform: translateY(0);
}
.muser-wishlist-btn__icon {
  width: 16px;
  height: 16px;
  fill: none;
  stroke: var(--color-foreground);
  stroke-width: 1.5;
  transition: fill 200ms ease, stroke 200ms ease;
}
.muser-wishlist-btn.is-active .muser-wishlist-btn__icon {
  fill: var(--color-accent);
  stroke: var(--color-accent);
}
@media only screen and (max-width: 768px) {
  .muser-wishlist-btn {
    opacity: 1;
    transform: none;
  }
}

/* Real estimated delivery line on the product page — plain, no countdown,
   no invented numbers, matches the free-shipping threshold used in the
   footer newsletter band. */
.muser-delivery-estimate {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 8px;
  font-size: 0.8125rem;
  color: var(--color-muted);
}
.muser-delivery-estimate__dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--color-success);
  flex-shrink: 0;
}
.muser-delivery-estimate__text {
  color: var(--color-foreground);
}
.muser-delivery-estimate__sep {
  color: var(--color-border);
}

/* Free shipping progress bar (cart drawer + full cart page) — real progress
   against settings.muser_free_shipping_threshold, server-rendered so it's
   always correct on first paint and after every AJAX cart update (Horizon
   morphs this whole section automatically on shopify:cart:lines-update). */
.muser-shipping-bar {
  padding: 16px 24px;
  background-color: #000000;
}
.muser-shipping-bar__label {
  font-family: var(--font-body--family);
  font-size: 0.8125rem;
  color: #ffffff;
  margin-bottom: 8px;
}
.muser-shipping-bar__row {
  display: flex;
  align-items: center;
  gap: 12px;
}
.muser-shipping-bar__track {
  height: 3px;
  background-color: rgba(255, 255, 255, 0.25);
  border-radius: var(--radius-pill);
  overflow: hidden;
  flex: 1;
}
.muser-shipping-bar__fill {
  height: 100%;
  background-color: #ffffff;
  transition: width var(--dur-slow) var(--ease);
}
.muser-shipping-bar__status {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
}
.muser-shipping-bar__icon {
  width: 20px;
  height: 20px;
  fill: none;
  stroke: #ffffff;
  stroke-width: 1.25;
}
.muser-shipping-bar__badge {
  font-family: var(--font-body--family);
  font-size: 0.8125rem;
  letter-spacing: var(--tracking-label);
  text-transform: uppercase;
  color: #000000;
  background-color: #ffffff;
  border-radius: var(--radius-pill);
  padding: 2px 12px;
}
.muser-shipping-bar__sublabel {
  font-size: 0.8125rem;
  color: #ffffff;
  opacity: 0.8;
  margin-top: 4px;
}

/* Cart reservation countdown — real timer (localStorage), never auto-empties
   the cart at zero. */
.muser-cart-timer {
  background-color: var(--color-foreground);
  color: var(--color-background);
  text-align: center;
  padding: 8px 16px;
}
.muser-cart-timer__text {
  font-family: var(--font-body--family);
  font-size: 0.8125rem;
  letter-spacing: var(--tracking-label);
  margin: 0;
}
.muser-cart-timer__text span {
  font-variant-numeric: tabular-nums;
  color: var(--color-sand);
}

/* Premium cart drawer redesign (2026-08-27): serif header to match the rest
   of the site's Fraunces/Work Sans system, bigger framed product photos,
   more breathing room between line items, and a heavier/tracked checkout
   CTA. Scoped to #cart-drawer (the drawer's own <theme-drawer> id) so none
   of this bleeds into the search/filter drawers, which reuse the exact same
   .theme-drawer__*/.cart-items__* vendor classes — confirmed by reading
   snippets/theme-drawer-header.liquid and snippets/cart-products.liquid. */
#cart-drawer .theme-drawer__header {
  padding-block: 24px 18px;
  border-bottom: var(--style-border-width) solid var(--color-border);
}
#cart-drawer .theme-drawer__title {
  font-family: var(--font-heading--family);
  font-size: 1.5rem;
  letter-spacing: 0.01em;
}
#cart-drawer .theme-drawer__badge {
  background-color: var(--color-accent);
  color: var(--color-background);
}

/* Bigger, framed thumbnails — vendor hardcodes clamp(2.5rem, 15cqi, 7.5rem)
   directly in grid-template-columns (not via a custom property), so the
   column width has to be restated here rather than overridden through a
   variable. Only the mobile/drawer-width grid is touched: the drawer is
   narrower than the 720px the vendor's @container query needs to switch to
   the desktop 4-column layout, so that variant never applies inside it. */
#cart-drawer .muser-cart-timer + .cart-drawer__items {
  padding-top: 20px;
}
#cart-drawer .cart-items__table-row {
  grid-template-columns: clamp(5.5rem, 30cqi, 9.5rem) minmax(0, 1fr) minmax(var(--cart-item-price-width), auto);
  padding-bottom: 28px;
  margin-bottom: 28px;
}
#cart-drawer .cart-items__table-row--full-width-variants {
  grid-template-columns: clamp(5.5rem, 30cqi, 9.5rem) minmax(0, 1fr) auto;
}
#cart-drawer .cart-items__media-container {
  border: var(--style-border-width) solid var(--color-border);
}
#cart-drawer .cart-items__title {
  font-family: var(--font-heading--family);
  font-size: 1.0625rem;
}
#cart-drawer .cart-items__remove {
  opacity: 0.5;
  transition: opacity var(--dur-base) var(--ease);
}
#cart-drawer .cart-items__remove:hover {
  opacity: 1;
}

/* Summary/CTA: tracked uppercase label + serif total, same treatment as the
   shipping-bar label before it, and a taller checkout button so it reads as
   the one deliberate action at the bottom of the drawer. */
#cart-drawer .cart-totals__total-label {
  font-size: 0.8125rem;
  text-transform: uppercase;
  letter-spacing: var(--tracking-label);
  color: var(--color-muted);
}
#cart-drawer .cart-totals__total-value {
  font-family: var(--font-heading--family);
  font-size: 1.625rem;
}
#cart-drawer .cart__checkout-button {
  height: 56px;
  letter-spacing: var(--tracking-label);
  text-transform: uppercase;
}

/* Marquee promo bar — deliberately pure black/white/red, a promo-strip
   accent distinct from the quiet-luxury palette used everywhere else. Pure
   CSS scroll animation; JS only updates the countdown digits once a second. */
.muser-marquee {
  background: #000;
  color: #fff;
  overflow: hidden;
  white-space: nowrap;
  position: relative;
  z-index: 10;
}
.muser-marquee__track {
  display: flex;
  width: max-content;
  animation: muser-marquee-scroll var(--muser-marquee-duration, 30s) linear infinite;
  will-change: transform;
}
.muser-marquee__group {
  display: flex;
  flex-shrink: 0;
}
.muser-marquee__item {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 12px 32px;
  font-family: var(--font-body--family);
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: var(--tracking-label);
  text-transform: uppercase;
  white-space: nowrap;
}
.muser-marquee__countdown-label {
  opacity: 0.7;
  margin-left: 8px;
}
.muser-marquee__countdown {
  color: #ff3b30;
  font-variant-numeric: tabular-nums;
  font-weight: 700;
  letter-spacing: 0.02em;
}
@keyframes muser-marquee-scroll {
  from { transform: translateX(0); }
  to { transform: translateX(-50%); }
}
@media (prefers-reduced-motion: reduce) {
  .muser-marquee__track {
    animation: none;
    transform: translateX(0);
  }
  .muser-marquee__group[aria-hidden='true'] {
    display: none;
  }
}
@media screen and (max-width: 749px) {
  .muser-marquee__item {
    padding: 8px 24px;
    font-size: 11px;
  }
}

/* Volume discount cards (product page, display-only). Rounded corners +
   shadow are a deliberate exception to the sharp-edge system. */
.muser-volume-discounts {
  max-width: var(--page-width);
  margin-inline: auto;
  padding: 64px var(--page-margin, 24px);
  text-align: center;
}
.muser-volume-discounts__heading {
  font-family: var(--font-heading--family);
  font-size: clamp(1.625rem, 2.8vw, 2.25rem);
  max-width: 40em;
  margin: 0 auto 32px;
}
.muser-volume-discounts__heading p {
  margin: 0;
}
.muser-volume-discounts__grid {
  display: grid;
  grid-template-columns: repeat(var(--tier-count, 4), 1fr);
  gap: 16px;
}
.muser-volume-discounts__card {
  display: flex;
  flex-direction: column;
  align-items: center;
  background-color: var(--color-background);
  border: 1px solid var(--color-border);
  border-radius: 16px;
  box-shadow: 0 8px 24px rgba(26, 24, 21, 0.08);
  padding: 32px 16px;
  transition: transform var(--dur-base) var(--ease), box-shadow var(--dur-base) var(--ease);
}
.muser-volume-discounts__card:hover {
  transform: translateY(-4px);
  box-shadow: 0 16px 32px rgba(26, 24, 21, 0.14);
}
.muser-volume-discounts__card.is-highlighted {
  background-color: var(--color-foreground);
  border-color: var(--color-foreground);
  color: var(--color-background);
}
.muser-volume-discounts__badge {
  display: inline-block;
  margin-bottom: 12px;
  padding: 4px 12px;
  background-color: var(--color-background);
  color: var(--color-foreground);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: var(--tracking-label);
  text-transform: uppercase;
  border-radius: var(--radius-pill);
  white-space: nowrap;
}
.muser-volume-discounts__percent {
  font-family: var(--font-heading--family);
  font-size: clamp(1.75rem, 3.2vw, 2.5rem);
  line-height: 1;
}
.muser-volume-discounts__label {
  margin-top: 8px;
  font-size: 0.8125rem;
  color: var(--color-muted);
}
.muser-volume-discounts__card.is-highlighted .muser-volume-discounts__label {
  color: var(--color-sand);
}
.muser-volume-discounts__note {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin-top: 32px;
  font-size: 0.8125rem;
  color: var(--color-muted);
}
.muser-volume-discounts__note p {
  margin: 0;
}
.muser-volume-discounts__note b {
  color: var(--color-foreground);
  font-weight: 700;
}
.muser-volume-discounts__check {
  width: 16px;
  height: 16px;
  flex-shrink: 0;
  color: var(--color-success);
}
@media screen and (max-width: 989px) {
  .muser-volume-discounts__grid {
    grid-template-columns: repeat(2, 1fr);
    gap: 12px;
  }
}
@media screen and (max-width: 480px) {
  .muser-volume-discounts__percent {
    font-size: 1.5rem;
  }
  .muser-volume-discounts__card {
    padding: 24px 12px;
  }
}

/* Footer is intentionally dark (ink background, cream text) — the utilities
   band (copyright/policies/social) has no per-section text-color setting of
   its own in Horizon, so it's forced here rather than left inheriting the
   site-wide (dark) page_text_color, which would be invisible on this bg. */
#shopify-section-footer_utilities_jLGE8U,
#shopify-section-footer_utilities_jLGE8U a {
  color: var(--color-background);
}

/* Product description accordion — "Ideal para" / "Detalles de diseño" /
   "Cómo combinarlo" turned into collapsible rows by
   assets/muser-description-accordion.js, built from the exact same
   <strong>Label:</strong> paragraphs already in the product description.
   Font/color intentionally not redeclared here — inherits from the
   surrounding .text-block--text_aEtTtq.rte container. */
.muser-accordion-group {
  width: 100%;
  border-top: 1px solid var(--color-border);
}

.muser-accordion {
  border-bottom: 1px solid var(--color-border);
}

.muser-accordion__trigger {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  width: 100%;
  padding-block: 14px;
  background: none;
  border: none;
  font: inherit;
  font-weight: 600;
  color: inherit;
  text-align: left;
  cursor: pointer;
}

.muser-accordion__icon {
  flex-shrink: 0;
  font-size: 1.125rem;
  font-weight: 400;
  line-height: 1;
  color: var(--color-muted);
  transition: color var(--dur-base) var(--ease);
}

.muser-accordion__trigger[aria-expanded='true'] .muser-accordion__icon {
  color: var(--color-accent);
}

.muser-accordion__panel {
  display: grid;
  grid-template-rows: 0fr;
  transition: grid-template-rows var(--dur-slow) var(--ease);
}

.muser-accordion__panel-inner {
  overflow: hidden;
  min-height: 0;
}

.muser-accordion__panel-inner p {
  margin: 0;
  padding-block-end: 16px;
  color: var(--color-muted);
  line-height: 1.6;
}

.muser-accordion[data-open='true'] .muser-accordion__panel {
  grid-template-rows: 1fr;
}

@media (prefers-reduced-motion: reduce) {
  .muser-accordion__panel {
    transition: none;
  }
}

/* Size guide popup (blocks/muser-size-guide.liquid). The dialog/animation
   itself reuses Horizon's native .popup-link / dialog-component classes —
   only the trigger link and the table need their own rules. */
.muser-size-guide__trigger {
  display: inline-block;
  padding: 0;
  margin-block-start: 6px;
  font-size: 0.8125rem;
  color: var(--color-muted);
  text-decoration: underline;
  text-underline-offset: 3px;
  cursor: pointer;
}

.muser-size-guide__trigger:hover {
  color: var(--color-accent);
}

.muser-size-guide__note,
.muser-size-guide__tip {
  font-size: 0.8125rem;
  color: var(--color-muted);
  line-height: 1.5;
  margin-block: 8px 20px;
}

.muser-size-guide__table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.875rem;
}

.muser-size-guide__table th,
.muser-size-guide__table td {
  padding: 10px 8px;
  text-align: center;
  border-bottom: 1px solid var(--color-border);
}

.muser-size-guide__table th:first-child,
.muser-size-guide__table td:first-child {
  text-align: left;
  font-weight: 600;
}

.muser-size-guide__table thead th {
  font-weight: 600;
  border-bottom: 1px solid var(--color-foreground);
}

/* Hide the quantity stepper on the product page buy box — Horizon renders
   .quantity-selector-wrapper unconditionally from buy-buttons.liquid (a
   content_for 'block' with a hardcoded type/id) regardless of whether the
   "quantity" block entry exists in the template JSON, so removing it from
   product.json/product.bolso-negro.json alone doesn't hide it — CSS is the
   only lever without editing vendor Liquid. Scoped to .product-form-buttons
   (the buy-buttons block's own wrapper, product page only) rather than a
   bare/global selector — a first version of this rule targeted the class
   sitewide and, since cart-products.liquid renders the exact same
   quantity-selector snippet for cart line-item quantities, it silently also
   hid the quantity stepper on every cart line item. Caught 2026-08-16 when
   checking the cart drawer for an unrelated change — fixed by scoping here.
   Two classes (0,0,2,0) already outranks the compiled_assets/styles.css
   native rule on the bare class, no extra specificity trick needed. */
.product-form-buttons .quantity-selector-wrapper {
  display: none;
}

/* Hide "Más opciones de pago" on the product page buy box — replaced visually
   by muser_payment_icons, which sits right after this in block_order so it
   fills the same spot once this link's line is gone. This is Shopify's own
   link (rendered by the `payment_button` filter inside blocks/accelerated-
   checkout.liquid, class name it assigns itself), not theme content — it
   can't be edited or removed from the JSON, only hidden. Scoped to
   .product-form-buttons so it doesn't touch the cart, which uses a different
   mechanism (<shopify-accelerated-checkout-cart>, no matching class) anyway,
   but the scope is kept narrow on purpose in case that ever changes. */
.product-form-buttons .shopify-payment-button__more-options {
  display: none;
}

/* Hide the "Aranceles e impuestos incluidos..." disclaimer in the cart
   drawer/page — native text from snippets/tax-info.liquid, rendered inside
   cart-summary.liquid (vendor). It's one of many tax/duties/policy variants
   Shopify picks between at render time (see tax-info.liquid's branching), so
   hiding the wrapper by class is simpler and more robust than trying to
   blank out every possible translation string it could resolve to. Needs
   both classes combined: the element also carries .cart-totals__item, which
   has its own native "display: flex" rule of equal (single-class)
   specificity — .cart-totals__item.cart-totals__tax-note (two classes)
   reliably outranks it. */
.cart-totals__item.cart-totals__tax-note {
  display: none;
}

