{
  "version": 3,
  "sources": ["/cdn/shop/t/2/assets/mujeron-2026.js?mjr_v=20260827_3"],
  "sourcesContent": ["(() => {\n  const SELECTOR_ROOT = '[data-mjr-root]';\n  const FAVORITES_KEY = 'mujeron:favorites:v1';\n  const moneyFormatter = new Intl.NumberFormat('es-CL', {\n    style: 'currency',\n    currency: 'CLP',\n    maximumFractionDigits: 0,\n  });\n\n  const accordionAnimations = new WeakMap();\n  const accordionMotion = {\n    duration: 420,\n    easing: 'cubic-bezier(.22, 1, .36, 1)',\n  };\n\n  const isUnifiedFilterSystemActive = () => {\n    return (\n      Boolean(window.__mujeronFilterSystemV10Ready) ||\n      Boolean(document.querySelector('#filters-drawer[data-mjr-collection-filters], #filters-drawer[data-mjr-filter-v10]'))\n    );\n  };\n\n  let pageScrollContext = null;\n  const getPageScrollContext = () => {\n    if (pageScrollContext?.pageWrapper?.isConnected) return pageScrollContext;\n\n    const pageWrapper = document.querySelector('.page-wrapper');\n    // Keep the scroll root aligned with base.css, including tablet/resizes.\n    const desktopScroll = window.matchMedia('(min-width: 990px)');\n    const getScrollTarget = () => pageWrapper && desktopScroll.matches\n      ? pageWrapper\n      : window;\n    const subscribers = new Set();\n    const readPosition = () => Math.max(0, getScrollTarget() === window ? window.scrollY : pageWrapper.scrollTop);\n    let currentPosition = readPosition();\n    let headerCollapsed = currentPosition > 16;\n    let frame = 0;\n    const updateSubscribers = () => {\n      frame = 0;\n      currentPosition = readPosition();\n      // One state for every header row; hysteresis avoids fractional-scroll chatter.\n      headerCollapsed = currentPosition > (headerCollapsed ? 4 : 16);\n      subscribers.forEach((callback) => callback(currentPosition, headerCollapsed));\n    };\n    const scheduleUpdate = () => {\n      if (frame) return;\n      frame = window.requestAnimationFrame(updateSubscribers);\n    };\n    window.addEventListener('scroll', scheduleUpdate, { passive: true });\n    pageWrapper?.addEventListener('scroll', scheduleUpdate, { passive: true });\n    desktopScroll.addEventListener('change', scheduleUpdate);\n\n    pageScrollContext = {\n      pageWrapper,\n      get scrollTarget() { return getScrollTarget(); },\n      scrollPosition: () => currentPosition,\n      subscribeScroll: (callback) => {\n        subscribers.add(callback);\n        callback(currentPosition, headerCollapsed);\n      },\n    };\n    return pageScrollContext;\n  };\n\n  const accordionContent = (detail) => detail.querySelector([\n    ':scope > .mjr-accordion__content',\n    ':scope > .mjr-footer__menu-content',\n    ':scope > .mjr-mobile-nav__children',\n    ':scope > .mjr-mobile-nav__subchildren',\n  ].join(','));\n\n  const clearAccordionAnimation = (detail) => {\n    const running = accordionAnimations.get(detail);\n    running?.height?.cancel();\n    running?.content?.cancel();\n    accordionAnimations.delete(detail);\n    detail.style.removeProperty('height');\n    detail.style.removeProperty('overflow');\n    detail.style.removeProperty('will-change');\n    detail.removeAttribute('data-mjr-accordion-animating');\n  };\n\n  const setAccordionExpanded = (detail, expanded, animate = true) => {\n    const summary = detail.querySelector(':scope > summary');\n    if (!summary) return Promise.resolve();\n\n    const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n    const content = accordionContent(detail);\n    const startHeight = detail.getBoundingClientRect().height || summary.getBoundingClientRect().height;\n    clearAccordionAnimation(detail);\n    summary.setAttribute('aria-expanded', String(expanded));\n\n    if (!animate || reducedMotion || typeof detail.animate !== 'function') {\n      detail.open = expanded;\n      return Promise.resolve();\n    }\n\n    if (expanded) detail.open = true;\n    const endHeight = expanded ? detail.scrollHeight : summary.getBoundingClientRect().height;\n\n    detail.dataset.mjrAccordionAnimating = expanded ? 'opening' : 'closing';\n    detail.style.overflow = 'clip';\n    detail.style.willChange = 'height';\n\n    const animation = detail.animate(\n      [{ height: `${startHeight}px` }, { height: `${endHeight}px` }],\n      {\n        duration: expanded ? accordionMotion.duration : 340,\n        easing: accordionMotion.easing,\n      }\n    );\n    const contentAnimation = content?.animate(\n      expanded\n        ? [{ opacity: 0, transform: 'translateY(-6px)' }, { opacity: 1, transform: 'translateY(0)' }]\n        : [{ opacity: 1, transform: 'translateY(0)' }, { opacity: 0, transform: 'translateY(-4px)' }],\n      {\n        duration: expanded ? 300 : 220,\n        easing: accordionMotion.easing,\n        fill: 'forwards',\n      }\n    );\n    accordionAnimations.set(detail, { height: animation, content: contentAnimation });\n\n    return new Promise((resolve) => {\n      const finish = () => {\n        if (accordionAnimations.get(detail)?.height !== animation) return resolve();\n        if (!expanded) detail.open = false;\n        clearAccordionAnimation(detail);\n        resolve();\n      };\n      animation.addEventListener('finish', finish, { once: true });\n      animation.addEventListener('cancel', resolve, { once: true });\n    });\n  };\n\n  const initializeSmoothAccordions = (scope = document) => {\n    const groups = [];\n    if (scope.matches?.('[data-mjr-accordion]')) groups.push(scope);\n    scope.querySelectorAll?.('[data-mjr-accordion]').forEach((group) => groups.push(group));\n\n    groups.forEach((group) => {\n      if (group.dataset.mjrSmoothAccordionBound === 'true') return;\n      group.dataset.mjrSmoothAccordionBound = 'true';\n\n      group.querySelectorAll('details').forEach((detail) => {\n        detail.dataset.mjrSmoothAccordion = 'true';\n        detail.querySelector(':scope > summary')?.setAttribute('aria-expanded', String(detail.open));\n      });\n\n      const toggleDetail = (summary) => {\n        const current = summary?.parentElement;\n        if (!(current instanceof HTMLDetailsElement) || !group.contains(current)) return false;\n        if (current.closest('[data-mjr-accordion]') !== group) return false;\n        const shouldOpen = !current.open || current.dataset.mjrAccordionAnimating === 'closing';\n\n        if (shouldOpen) {\n          group.querySelectorAll('details[open]').forEach((detail) => {\n            if (detail !== current && !detail.contains(current)) setAccordionExpanded(detail, false);\n          });\n        }\n        setAccordionExpanded(current, shouldOpen);\n        return true;\n      };\n\n      group.addEventListener('click', (event) => {\n        const summary = event.target.closest?.('summary');\n        if (toggleDetail(summary)) event.preventDefault();\n      });\n\n      group.addEventListener('keydown', (event) => {\n        if (event.repeat || (event.key !== 'Enter' && event.key !== ' ')) return;\n        const summary = event.target.closest?.('summary');\n        if (!toggleDetail(summary)) return;\n        event.preventDefault();\n      });\n    });\n  };\n\n  const sizeRank = (value) => {\n    const normalized = String(value || '').trim().toUpperCase().replace(/\\s+/g, '');\n    const named = {\n      XXS: 10, XS: 20, S: 30, M: 40, L: 50, XL: 60,\n      XXL: 70, '2XL': 70, XXXL: 80, '3XL': 80,\n      XXXXL: 90, '4XL': 90, XXXXXL: 100, '5XL': 100,\n    };\n    if (Object.prototype.hasOwnProperty.call(named, normalized)) return named[normalized];\n    const numeric = Number(normalized.replace(',', '.'));\n    return Number.isFinite(numeric) ? 1000 + numeric : 5000;\n  };\n\n  const sortSizeChoices = (fieldset) => {\n    if (!fieldset) return;\n    const name = fieldset.querySelector('legend')?.textContent?.toLowerCase() || '';\n    if (!name.includes('talla') && !name.includes('size')) return;\n    const container = fieldset.querySelector(':scope > div, .mjr-pdp-option__values');\n    if (!container) return;\n    [...container.children]\n      .sort((left, right) => {\n        const leftValue = left.querySelector('input')?.value || left.textContent;\n        const rightValue = right.querySelector('input')?.value || right.textContent;\n        return sizeRank(leftValue) - sizeRank(rightValue);\n      })\n      .forEach((choice) => container.appendChild(choice));\n  };\n\n  const readFavorites = () => {\n    try {\n      const parsed = JSON.parse(localStorage.getItem(FAVORITES_KEY) || '[]');\n      return Array.isArray(parsed) ? parsed.filter(Boolean) : [];\n    } catch {\n      return [];\n    }\n  };\n\n  const saveFavorites = (items) => {\n    const unique = [...new Set(items.filter(Boolean))];\n    localStorage.setItem(FAVORITES_KEY, JSON.stringify(unique));\n    document.dispatchEvent(new CustomEvent('mujeron:favorites-change', { detail: unique }));\n    return unique;\n  };\n\n  const releaseDialogLock = () => {\n    if (!document.querySelector('dialog[open]')) document.documentElement.classList.remove('mjr-dialog-open');\n  };\n\n  const closeCompetingDialogs = (nextDialog) => {\n    document.querySelectorAll('dialog[open]').forEach((currentDialog) => {\n      if (currentDialog === nextDialog) return;\n      currentDialog.querySelectorAll('[data-mjr-youtube-embed]').forEach((frame) => frame.removeAttribute('src'));\n      currentDialog.classList.remove('is-closing', 'is-open');\n      if (typeof currentDialog.close === 'function') currentDialog.close();\n    });\n    releaseDialogLock();\n  };\n\n  const closeDialog = (dialog, afterClose) => {\n    dialog?.querySelectorAll('[data-mjr-youtube-embed]').forEach((frame) => frame.removeAttribute('src'));\n    if (!dialog?.open || typeof dialog.close !== 'function') {\n      releaseDialogLock();\n      afterClose?.();\n      return;\n    }\n\n    if (dialog.classList.contains('mjr-menu-dialog') && !dialog.classList.contains('is-closing')) {\n      dialog.classList.remove('is-open');\n      dialog.classList.add('is-closing');\n      let finished = false;\n      const finish = () => {\n        if (finished || !dialog.open) return;\n        finished = true;\n        dialog.classList.remove('is-closing', 'is-open');\n        dialog.close();\n        releaseDialogLock();\n        afterClose?.();\n      };\n      const panel = dialog.querySelector('.mjr-menu-dialog__panel');\n      panel?.addEventListener('transitionend', (event) => {\n        if (event.propertyName === 'transform') finish();\n      }, { once: true });\n      window.setTimeout(finish, 260);\n      return;\n    }\n\n    dialog.close();\n    releaseDialogLock();\n    afterClose?.();\n  };\n\n  const openDialog = (root, id, trigger) => {\n    const dialog = root?.querySelector(`#${CSS.escape(id)}`) || document.getElementById(id);\n    if (!dialog || typeof dialog.showModal !== 'function') return;\n    if (dialog.open) return;\n    closeCompetingDialogs(dialog);\n    dialog.dataset.mjrReturnFocus = trigger?.id || '';\n    dialog.querySelectorAll('[data-mjr-size-calculator]').forEach((calculator) => {\n      calculator.dispatchEvent(new CustomEvent('mjr:size-reset'));\n    });\n    const isMenuDialog = dialog.classList.contains('mjr-menu-dialog');\n    if (isMenuDialog) dialog.classList.remove('is-closing', 'is-open');\n    dialog.showModal();\n    if (isMenuDialog) {\n      window.requestAnimationFrame(() => {\n        window.requestAnimationFrame(() => {\n          if (dialog.open) dialog.classList.add('is-open');\n        });\n      });\n    }\n    dialog.querySelectorAll('[data-mjr-youtube-embed]').forEach((frame) => {\n      frame.src = frame.dataset.mjrYoutubeEmbed;\n    });\n    dialog.querySelectorAll('[data-mjr-video-audio]').forEach((button) => {\n      button.setAttribute('aria-pressed', 'false');\n      const label = button.querySelector('span');\n      if (label) label.textContent = 'Activar audio';\n    });\n    document.documentElement.classList.add('mjr-dialog-open');\n    if (dialog.classList.contains('mjr-global-size-modal')) {\n      window.setTimeout(() => {\n        const firstMeasure = dialog.querySelector('[data-mjr-fields]:not([hidden]) input[type=\"number\"]');\n        firstMeasure?.focus({ preventScroll: true });\n      }, 80);\n    }\n  };\n\n  const getGlobalSizeDialog = () =>\n    document.querySelector('.mjr-global-size-modal:not(.mjr-global-size-modal--fallback)')\n    || document.querySelector('.mjr-global-size-modal--fallback');\n\n  const initializeVideoAudioControls = (scope = document) => {\n    scope.querySelectorAll?.('[data-mjr-video-audio]').forEach((button) => {\n      if (button.dataset.mjrBound === 'true') return;\n      button.dataset.mjrBound = 'true';\n      button.addEventListener('click', () => {\n        const frame = button.closest('.mjr-video-modal__frame')?.querySelector('[data-mjr-youtube-embed]');\n        if (!frame?.contentWindow) return;\n        const willUnmute = button.getAttribute('aria-pressed') !== 'true';\n        frame.contentWindow.postMessage(JSON.stringify({ event: 'command', func: willUnmute ? 'unMute' : 'mute', args: [] }), '*');\n        frame.contentWindow.postMessage(JSON.stringify({ event: 'command', func: 'playVideo', args: [] }), '*');\n        window.setTimeout(() => {\n          frame.contentWindow?.postMessage(JSON.stringify({ event: 'command', func: 'playVideo', args: [] }), '*');\n        }, 120);\n        button.setAttribute('aria-pressed', String(willUnmute));\n        const label = button.querySelector('span');\n        if (label) label.textContent = willUnmute ? 'Silenciar' : 'Activar audio';\n      });\n    });\n  };\n\n  const initializeSizeCalculators = (scope = document) => {\n    scope.querySelectorAll('[data-mjr-size-calculator]').forEach((calculator) => {\n      if (calculator.dataset.mjrCalculatorBound === 'true') return;\n      calculator.dataset.mjrCalculatorBound = 'true';\n      let category = calculator.dataset.mjrSizeDefault || 'jeans';\n      let sportKind = calculator.dataset.mjrSportDefault || 'bottoms';\n      const collectionLink = calculator.querySelector('[data-mjr-size-collection-link]');\n      const collectionDestinations = {\n        jeans: { handle: 'jeans-colombianos', label: 'jeans' },\n        fajas: { handle: 'fajas-colombianas', label: 'fajas' },\n        vestuario: { handle: 'vestuario-mujer', label: 'vestuario' },\n        deportiva: { handle: 'ropa-deportiva', label: 'ropa deportiva' },\n      };\n      const hideCollectionLink = () => {\n        if (!collectionLink) return;\n        collectionLink.hidden = true;\n        collectionLink.removeAttribute('href');\n        collectionLink.textContent = '';\n      };\n      // F39 calculadora (cabo 4): los accesorios postoperatorios se calculan con la familia \u00ABfajas\u00BB, pero el\n      // enlace del resultado lleva a su propia colecci\u00F3n y la nombra.\n      const accessoryDestinations = [\n        { match: 'mentonera', handle: 'mentoneras-post-quirurgicas', label: 'mentoneras' },\n        { match: 'brasier', handle: 'postoperatorio-cirugia-busto', label: 'prendas para cirug\u00EDa de busto' },\n        { match: 'banda', handle: 'postoperatorio-cirugia-busto', label: 'prendas para cirug\u00EDa de busto' },\n        { match: 'manga', handle: 'fajas-postoperatorias', label: 'prendas postoperatorias' },\n      ];\n      const accessoryDestination = () => {\n        const guideKey = String(`${activeContextGuide?.handle || ''} ${activeContextGuide?.name || ''}`).toLowerCase();\n        return accessoryDestinations.find(({ match }) => guideKey.includes(match)) || null;\n      };\n      const showCollectionLink = (sizeValue) => {\n        // La familia de la gu\u00EDa elegida manda (en una colecci\u00F3n de marca, \u00ABCalzas\u00BB no es \u00ABfajas\u00BB).\n        const destination = accessoryDestination()\n          || collectionDestinations[activeContextGuide?.category]\n          || collectionDestinations[category];\n        const normalizedSize = String(sizeValue || '').trim();\n        if (!collectionLink || !destination || !normalizedSize) {\n          hideCollectionLink();\n          return;\n        }\n        collectionLink.href = `/collections/${destination.handle}?filter.v.option.talla=${encodeURIComponent(normalizedSize)}`;\n        collectionLink.textContent = `Ver ${destination.label} en talla ${normalizedSize}`;\n        collectionLink.hidden = false;\n      };\n\n      const parseRange = (value) => {\n        const values = String(value || '').match(/\\d+(?:[.,]\\d+)?/g)?.map((item) => Number(item.replace(',', '.'))) || [];\n        if (!values.length) return null;\n        return values.length === 1 ? [values[0], values[0]] : [Math.min(...values), Math.max(...values)];\n      };\n      const parseRows = (name) => {\n        try {\n          const parsed = JSON.parse(calculator.querySelector(`[data-mjr-guide=\"${name}\"]`)?.textContent || '[]');\n          return Array.isArray(parsed) ? parsed : [];\n        } catch {\n          return [];\n        }\n      };\n      const guideSelector = calculator.querySelector('[data-mjr-context-guide]');\n      const guideBrandSelector = calculator.querySelector('[data-mjr-guide-brand]');\n      let contextGuides = [];\n      try {\n        const parsed = JSON.parse(calculator.querySelector('[data-mjr-context-guides]')?.textContent || '[]');\n        contextGuides = Array.isArray(parsed) ? parsed : [];\n      } catch {\n        contextGuides = [];\n      }\n      let embeddedContextGuide = null;\n      try {\n        embeddedContextGuide = JSON.parse(\n          calculator.querySelector('[data-mjr-active-context-guide]')?.textContent || 'null'\n        );\n      } catch {\n        embeddedContextGuide = null;\n      }\n      let activeContextGuide = contextGuides.find((guide) => guide.handle === guideSelector?.value)\n        || contextGuides.find((guide) => guide.handle === embeddedContextGuide?.handle)\n        || embeddedContextGuide\n        || null;\n      const isMeasurementColumnKey = (rawKey) => {\n        const key = String(rawKey || '').toLowerCase();\n        return [\n          'cintura', 'cadera', 'peso', 'busto', 'pecho', 'banda',\n          'contorno', 'espalda', 'manga',\n        ].some((measurement) => key.includes(measurement));\n      };\n      const normalizedKey = (value) => String(value || '')\n        .trim()\n        .toLowerCase()\n        .normalize('NFD')\n        .replace(/[\\u0300-\\u036f]/g, '')\n        .replace(/[^a-z0-9]+/g, '_')\n        .replace(/^_+|_+$/g, '');\n      const isSizeColumnKey = (rawKey) => {\n        const key = normalizedKey(rawKey);\n        return key === 'size' || key === 'tallas' || key === 'talla' || key.startsWith('talla_');\n      };\n      if (guideSelector) {\n        contextGuides = contextGuides.flatMap((guide) => {\n          const typeColumn = guide.columns?.find((column) => normalizedKey(column.key) === 'tipo');\n          if (!typeColumn) return [guide];\n          const groups = [...new Set((guide.rows || []).map((row) => row[typeColumn.key]).filter((type) => type && !normalizedKey(type).includes('equivalencia')))];\n          return groups.map((type, index) => ({ ...guide,\n            handle: index ? `${guide.handle}--${normalizedKey(type)}` : guide.handle,\n            name: `${guide.brand} \u00B7 ${type}`, selectedType: type,\n            category: normalizedKey(type).includes('enterizo') ? 'vestuario' : guide.category\n          }));\n        });\n      }\n      const isPrimarySizeColumnKey = (rawKey) => {\n        const key = normalizedKey(rawKey);\n        return key === 'size' || key === 'tallas' || key === 'talla' || key === 'talla_chile';\n      };\n      const normalizeContextGuide = (guide) => {\n        if (!guide || !Array.isArray(guide.columns) || !Array.isArray(guide.rows)) return guide;\n\n        const columns = guide.columns.filter((column) => column?.key);\n        const typeColumn = columns.find((column) => normalizedKey(column.key) === 'tipo');\n        const measureColumn = columns.find((column) => normalizedKey(column.key) === 'medida');\n\n        // Algunas tablas oficiales vienen transpuestas. Cuando ademas mezclan\n        // Jeans y Enterizos, la vitrina toma solo el tipo de la pagina activa.\n        // Todas se convierten a la estructura aprobada: Talla + medidas.\n        if (measureColumn && (typeColumn || !columns.some((column) => isSizeColumnKey(column.key)))) {\n          const context = normalizedKey(`${calculator.dataset.mjrSizeContext || ''} ${category}`);\n          const groups = typeColumn ? [...new Set(guide.rows\n            .map((row) => String(row?.[typeColumn.key] || '').trim())\n            .filter((value) => value && !normalizedKey(value).includes('equivalencia')))] : [];\n          const activeGroup = typeColumn ? (guide.selectedType || groups.find((group) => {\n            const groupKey = normalizedKey(group);\n            const groupStem = groupKey.replace(/s$/, '');\n            return context.includes(groupKey) || (groupStem && context.includes(groupStem));\n          }) || groups.find((group) => normalizedKey(group).includes(normalizedKey(category))) || groups[0]) : '';\n          const measurementRows = guide.rows.filter((row) =>\n            (!typeColumn || String(row?.[typeColumn.key] || '').trim() === activeGroup)\n            && !normalizedKey(row?.[measureColumn.key]).includes('talla')\n          );\n          const sizeColumns = columns.filter((column) => column !== typeColumn && column !== measureColumn);\n\n          if ((!typeColumn || activeGroup) && measurementRows.length && sizeColumns.length) {\n            const measurementColumns = measurementRows.map((row, index) => ({\n              key: normalizedKey(row?.[measureColumn.key]) || `medida_${index + 1}`,\n              label: String(row?.[measureColumn.key] || `Medida ${index + 1}`),\n              unit: sizeColumns.find((column) => column.unit)?.unit || 'cm',\n            }));\n            return {\n              ...guide,\n              columns: [{ key: 'talla', label: 'Talla' }, ...measurementColumns],\n              rows: sizeColumns.map((sizeColumn) => {\n                const row = { talla: String(sizeColumn.label || sizeColumn.key) };\n                measurementRows.forEach((measurementRow, index) => {\n                  row[measurementColumns[index].key] = measurementRow?.[sizeColumn.key] ?? '';\n                });\n                return row;\n              }),\n            };\n          }\n        }\n\n        const sizePriority = ['talla_chile', 'talla', 'size', 'tallas'];\n        const sizeColumn = sizePriority\n          .map((key) => columns.find((column) => normalizedKey(column.key) === key))\n          .find(Boolean)\n          || columns.find((column) => isSizeColumnKey(column.key) && normalizedKey(column.key) !== 'talla_etiqueta')\n          || columns.find((column) => normalizedKey(column.key) === 'talla_etiqueta');\n        const measurementColumns = columns.filter((column) =>\n          column !== sizeColumn\n          && (!isSizeColumnKey(column.key) || normalizedKey(column.key) === 'talla_pantalon_cl')\n          && normalizedKey(column.key) !== 'tipo'\n          && normalizedKey(column.key) !== 'medida'\n        );\n\n        return {\n          ...guide,\n          columns: sizeColumn ? [sizeColumn, ...measurementColumns] : measurementColumns,\n        };\n      };\n      const renderReferenceTable = (guide) => {\n        const table = calculator.closest('dialog')?.querySelector('.mjr-size-finder__table, .mjr-size__table');\n        if (!table || !Array.isArray(guide?.columns) || !Array.isArray(guide?.rows)) return;\n        const thead = table.tHead || table.createTHead();\n        const tbody = table.tBodies[0] || table.createTBody();\n        thead.replaceChildren();\n        tbody.replaceChildren();\n        const headRow = thead.insertRow();\n        guide.columns.forEach((column) => {\n          const cell = document.createElement('th');\n          cell.scope = 'col';\n          const label = document.createElement('span');\n          label.textContent = isPrimarySizeColumnKey(column.key) ? 'Talla' : column.label;\n          cell.append(label);\n          if (column.unit) {\n            const unit = document.createElement('small');\n            unit.textContent = `(${column.unit})`;\n            cell.append(unit);\n          }\n          headRow.append(cell);\n        });\n        guide.rows.forEach((row) => {\n          const tr = tbody.insertRow();\n          guide.columns.forEach((column, index) => {\n            const cell = document.createElement(index === 0 ? 'th' : 'td');\n            if (index === 0) cell.scope = 'row';\n            // F39 calculadora (cabo 5): \u00AB29 - 29\u00BB (as\u00ED lo necesita el bot) se muestra \u00AB29\u00BB.\n            const cellText = String(row?.[column.key] ?? '');\n            const cellEnds = cellText.split(/\\s*-\\s*/);\n            cell.textContent = cellEnds.length === 2 && cellEnds[0] !== '' && cellEnds[0] === cellEnds[1]\n              ? cellEnds[0]\n              : cellText.replace(/\\s*-\\s*/g, '\u2013');\n            tr.append(cell);\n          });\n        });\n      };\n      const renderContextGuide = (guide) => {\n        if (!guide || !Array.isArray(guide.columns)) return;\n        if (guideSelector) calculator.dataset.mjrDynamicMeasurements = 'true';\n        const scopedGuide = normalizeContextGuide(guide);\n        activeContextGuide = scopedGuide;\n        const fields = calculator.querySelector(`[data-mjr-fields=\"${category}\"]`);\n        if (fields) {\n          fields.replaceChildren(...scopedGuide.columns\n            .filter((column) => isMeasurementColumnKey(column?.key))\n            .map((column) => {\n              const label = document.createElement('label');\n              const title = document.createElement('span');\n              const control = document.createElement('span');\n              const input = document.createElement('input');\n              title.textContent = normalizedKey(column.key) === 'banda' ? 'Banda (debajo del busto)' : column.label || column.key;\n              input.type = 'number';\n              input.min = '1';\n              input.max = '250';\n              input.step = '0.1';\n              input.inputMode = 'decimal';\n              input.placeholder = '__';\n              input.name = column.key;\n              input.dataset.mjrMeasureKey = column.key;\n              control.append(input);\n              if (column.unit) control.append(document.createTextNode(` ${column.unit}`));\n              label.append(title, control);\n              return label;\n            }));\n        }\n        const result = calculator.querySelector('[data-mjr-size-calculator-result]');\n        if (result) result.hidden = true;\n        hideCollectionLink();\n        renderReferenceTable(scopedGuide);\n        if (guideSelector) {\n          const reference = calculator.closest('dialog')?.querySelector('.mjr-size-finder__reference');\n          const note = reference?.querySelector('.mjr-size-finder__note');\n          if (note) note.textContent = [guide.instructions, guide.warnings].filter(Boolean).join(' ');\n          const title = reference?.querySelector('summary strong');\n          if (title) title.textContent = guide.name;\n        }\n      };\n      const collectionBrandAliases = { tyt: 't_t', 't-y-t': 't_t', asisea: 'asi_sea', 'asi-sea': 'asi_sea', mujeron: 'mujeron', truccos: 'truccos', misshop: 'misshop', 'ann-chery': 'ann_chery', 'fajas-salome': 'salome' };\n      const collectionHandle = window.location.pathname.split('/collections/')[1]?.split('/')[0];\n      const collectionBrand = collectionBrandAliases[collectionHandle];\n      const collectionGuideDefaults = {\n        'fajas-uso-diario': 'salome-fajas-alta-compresion',\n        'fajas-colombianas': 'salome-fajas-alta-compresion',\n        'fajas-postoperatorias': 'salome-fajas-alta-compresion',\n        'fajas-post-parto': 'salome-fajas-alta-compresion',\n        'fajas-lipoescultura': 'salome-fajas-alta-compresion',\n        'fajas-enterizas-uso-diario': 'salome-fajas-alta-compresion',\n        'fajas-alta-compresion': 'salome-fajas-alta-compresion',\n        'fajas-tipo-body': 'salome-fajas-alta-compresion',\n        'fajas-hombre': 'ann-chery-masculina',\n        'tops-deportivos': 'colombian-gym-wear-tops'\n      };\n      if (guideSelector && collectionGuideDefaults[collectionHandle]) {\n        activeContextGuide = contextGuides.find((guide) => guide.handle === collectionGuideDefaults[collectionHandle]) || activeContextGuide;\n      }\n      // F39 calculadora (cabo 1): una gu\u00EDa sin columnas de medida no calcula; no se ofrece en el selector.\n      // (estandar-pantalon-cl la usa el bot como \u00FAltimo recurso y abr\u00EDa por defecto en /collections/mujeron.)\n      const canCalculate = (guide) => Boolean(normalizeContextGuide(guide)?.columns\n        ?.some((column) => isMeasurementColumnKey(column?.key)));\n      const updateGuideChoices = (keepBrand = true) => {\n        if (!guideSelector || !guideBrandSelector) return;\n        const offeredGuides = contextGuides.filter(canCalculate);\n        let guides = offeredGuides.filter((guide) => collectionBrand\n          ? normalizedKey(guide.brand) === collectionBrand\n          : guide.category === category);\n        // Do not offer unrelated upper-body measurements for a lower garment.\n        const scopedGuideHandles = {\n          'faldas-mujer': ['truccos-prendas-inferiores'],\n          'faldas': ['truccos-prendas-inferiores'],\n          'pantalones-mujer': ['tyt-jeans-clasicos', 'truccos-prendas-inferiores'],\n          'pantalones': ['tyt-jeans-clasicos', 'truccos-prendas-inferiores'],\n          'calzas-leggins': ['mujeron-calzas'],\n          'tops-deportivos': ['colombian-gym-wear-tops'],\n          'leggings-deportivos': ['colombian-gym-wear-leggings-y-shorts'],\n          'fajas-hombre': ['ann-chery-masculina', 'salome-faja-masculina']\n        }[collectionHandle];\n        if (scopedGuideHandles) guides = offeredGuides.filter((guide) => scopedGuideHandles.includes(guide.handle));\n        const brands = [...new Set(guides.map((guide) => guide.brand).filter(Boolean))];\n        const previousBrand = keepBrand ? guideBrandSelector.value : '';\n        const selectedBrand = brands.includes(previousBrand) ? previousBrand\n          : brands.includes(activeContextGuide?.brand) ? activeContextGuide.brand : brands[0];\n        guideBrandSelector.replaceChildren(...brands.map((brand) => new Option(brand, brand)));\n        guideBrandSelector.value = selectedBrand || '';\n        const brandGuides = guides.filter((guide) => guide.brand === selectedBrand);\n        const selected = brandGuides.find((guide) => guide.handle === guideSelector.value)\n          || brandGuides.find((guide) => guide.handle === activeContextGuide?.handle)\n          || brandGuides[0];\n        guideSelector.replaceChildren(...brandGuides.map((guide) => new Option(guide.name.replace(/^.*? \u00B7 /, ''), guide.handle)));\n        if (selected) {\n          guideSelector.value = selected.handle;\n          renderContextGuide(selected);\n        } else {\n          activeContextGuide = null;\n          calculator.querySelectorAll('[data-mjr-fields]').forEach((fields) => fields.replaceChildren());\n          guideSelector.append(new Option('Consulta la gu\u00EDa del producto', ''));\n        }\n        calculator.querySelector('[type=\"submit\"]').disabled = !selected || !activeContextGuide?.columns?.some((column) => isMeasurementColumnKey(column.key));\n      };\n      guideBrandSelector?.addEventListener('change', () => updateGuideChoices());\n      guideSelector?.addEventListener('change', () => {\n        renderContextGuide(contextGuides.find((guide) => guide.handle === guideSelector.value));\n        calculator.querySelector('[type=\"submit\"]').disabled = !activeContextGuide?.columns?.some((column) => isMeasurementColumnKey(column.key));\n      });\n      const matches = (rangeValue, measurement) => {\n        const range = parseRange(rangeValue);\n        return !range || !Number.isFinite(measurement) || (measurement >= range[0] && measurement <= range[1]);\n      };\n      const fitsNextAvailable = (rangeValue, measurement) => {\n        const range = parseRange(rangeValue);\n        return !range || !Number.isFinite(measurement) || measurement <= range[1];\n      };\n      const sizeFor = (row) =>\n        row.talla_chile || row.talla || row.tallas || row.talla_etiqueta || row.size || row.xs || row.medida || '';\n\n      const setSportKind = (nextKind) => {\n        sportKind = nextKind === 'tops' ? 'tops' : 'bottoms';\n        calculator.querySelectorAll('[data-mjr-sport-measurements]').forEach((group) => {\n          group.hidden = group.dataset.mjrSportMeasurements !== sportKind;\n        });\n        const result = calculator.querySelector('[data-mjr-size-calculator-result]');\n        if (result) result.hidden = true;\n        hideCollectionLink();\n      };\n\n      const setCategory = (nextCategory) => {\n        category = nextCategory || calculator.dataset.mjrSizeDefault || 'jeans';\n        calculator.querySelectorAll('[data-mjr-size-category]').forEach((item) => {\n          item.setAttribute('aria-selected', String(item.dataset.mjrSizeCategory === category));\n        });\n        calculator.querySelectorAll('[data-mjr-fields]').forEach((group) => {\n          group.hidden = group.dataset.mjrFields !== category;\n        });\n        const result = calculator.querySelector('[data-mjr-size-calculator-result]');\n        if (result) result.hidden = true;\n        hideCollectionLink();\n        updateGuideChoices();\n      };\n\n      calculator.querySelectorAll('[data-mjr-size-category]').forEach((tab) => {\n        tab.addEventListener('click', () => {\n          setCategory(tab.dataset.mjrSizeCategory);\n        });\n      });\n      calculator.querySelector('[data-mjr-sport-kind]')?.addEventListener('change', (event) => {\n        setSportKind(event.target.value);\n      });\n      calculator.addEventListener('mjr:size-reset', () => {\n        setCategory(calculator.dataset.mjrSizeDefault || 'jeans');\n      });\n      setCategory(category);\n      setSportKind(sportKind);\n      if (activeContextGuide) renderContextGuide(activeContextGuide);\n\n      calculator.querySelector('[data-mjr-size-calculator-form]')?.addEventListener('submit', (event) => {\n        event.preventDefault();\n        const fields = calculator.querySelector(`[data-mjr-fields=\"${category}\"]`);\n        const activeFields = category === 'deportiva'\n          ? (fields?.querySelector(`[data-mjr-sport-measurements=\"${sportKind}\"]`) || fields)\n          : fields;\n        const dynamicMeasurements = calculator.dataset.mjrDynamicMeasurements === 'true';\n        const numberValue = (name) => {\n          const value = activeFields?.querySelector(`[name=\"${name}\"]`)?.value;\n          return value === '' || value == null ? Number.NaN : Number(value);\n        };\n        const waist = numberValue('waist');\n        const hips = numberValue('hips');\n        const bust = numberValue('bust');\n        const band = numberValue('band');\n        const weight = numberValue('weight');\n        const invalidField = [...(activeFields?.querySelectorAll('input[type=\"number\"]') || [])].find(\n          (input) => input.value === '' || !input.checkValidity()\n        );\n        if (invalidField) {\n          invalidField.focus();\n          invalidField.reportValidity();\n          return;\n        }\n        const sportRows = category === 'deportiva' ? parseRows(`deportiva-${sportKind}`) : [];\n        const rows = activeContextGuide?.rows || (category === 'deportiva'\n          ? (sportRows.length ? sportRows : parseRows('deportiva'))\n          : parseRows(category));\n        // Las gu\u00EDas oficiales est\u00E1n ordenadas de menor a mayor. En un borde compartido\n        // priorizamos la \u00FAltima coincidencia para recomendar la talla superior.\n        const dynamicInputs = [...(activeFields?.querySelectorAll('[data-mjr-measure-key]') || [])];\n        const isShortLiftGuide = activeContextGuide?.columns?.some(\n          (column) => normalizedKey(column?.key) === 'talla_pantalon_cl'\n        );\n        const result = calculator.querySelector('[data-mjr-size-calculator-result]');\n        const size = calculator.querySelector('[data-mjr-size-calculator-size]');\n        const copy = calculator.querySelector('[data-mjr-size-calculator-copy]');\n        if (dynamicMeasurements && !dynamicInputs.length) {\n          result.hidden = false;\n          size.textContent = 'Asesor\u00EDa recomendada';\n          copy.textContent = 'No encontramos una talla disponible con los datos de esta gu\u00EDa. Escr\u00EDbenos y una asesora te ayudar\u00E1 a confirmarla.';\n          hideCollectionLink();\n          return;\n        }\n        const dynamicInputsForMatch = isShortLiftGuide\n          ? dynamicInputs.filter((input) => normalizedKey(input.dataset.mjrMeasureKey) === 'cadera')\n          : dynamicInputs;\n        // La gu\u00EDa exclusiva empieza en XS; no extrapolar por debajo de sus rangos.\n        if (activeContextGuide?.handle === 'mujeron-faja-7063z3-ajuste'\n          && dynamicInputsForMatch.length\n          && dynamicInputsForMatch.every((input) => {\n            const bounds = parseRange(rows[0]?.[input.dataset.mjrMeasureKey]);\n            return bounds && Number(input.value) < bounds[0];\n          })) {\n          result.hidden = false;\n          size.textContent = 'Asesor\u00EDa recomendada';\n          copy.textContent = 'Tus medidas est\u00E1n por debajo de los rangos de la gu\u00EDa exclusiva 7063Z3. Consulta con una asesora para confirmar tu talla.';\n          hideCollectionLink();\n          return;\n        }\n        const staticMeasurements = [\n          { value: waist, keys: ['cintura', 'waist'] },\n          { value: hips, keys: ['cadera', 'caderas', 'hips'] },\n          { value: bust, keys: ['busto', 'pecho', 'contorno_alto'] },\n          { value: band, keys: ['banda', 'bajo_busto', 'band'] },\n          { value: weight, keys: ['peso', 'peso_kg', 'weight'] },\n        ];\n        const rowRangeValue = (row, keys) => keys\n          .map((key) => row?.[key])\n          .find((value) => parseRange(value));\n        const matchesForMeasurement = rows.filter((row) => {\n          if (dynamicMeasurements && dynamicInputs.length) {\n            return dynamicInputsForMatch.every((input) => {\n              const measurement = Number(input.value);\n              return matches(row[input.dataset.mjrMeasureKey], measurement);\n            });\n          }\n          return matches(row.cintura || row.waist, waist)\n            && matches(row.cadera || row.caderas || row.hips, hips)\n            && matches(row.busto || row.pecho || row.contorno_alto, bust)\n            && matches(row.banda || row.bajo_busto || row.band, band)\n            && matches(row.peso || row.peso_kg || row.weight, weight);\n        });\n        const exactMatch = matchesForMeasurement[matchesForMeasurement.length - 1];\n        const nextAvailableMatch = exactMatch ? null : rows.find((row) => {\n          if (!sizeFor(row)) return false;\n          if (dynamicMeasurements && dynamicInputs.length) {\n            return dynamicInputsForMatch.every((input) =>\n              fitsNextAvailable(row[input.dataset.mjrMeasureKey], Number(input.value))\n            );\n          }\n          return staticMeasurements.every(({ value, keys }) =>\n            fitsNextAvailable(rowRangeValue(row, keys), value)\n          );\n        });\n        // F39 calculadora (cabo 3) \u00B7 regla de Carlo, 8-oct-2026: si una medida cae en dos tallas (rangos que se\n        // pisan o comparten el borde), se toma la MAYOR para esa medida, y entre medidas tambi\u00E9n la MAYOR.\n        // Si cae entre dos rangos, la siguiente talla. La tabla que ve la clienta no cambia. Una medida que\n        // vale lo mismo en todas las tallas no decide; fuera de todos los rangos, asesor\u00EDa (igual que antes).\n        const measurementReaders = dynamicMeasurements && dynamicInputs.length\n          ? dynamicInputsForMatch.map((input) => ({\n            value: Number(input.value),\n            range: (row) => row[input.dataset.mjrMeasureKey],\n          }))\n          : staticMeasurements\n            .filter(({ value }) => Number.isFinite(value))\n            .map(({ value, keys }) => ({ value, range: (row) => rowRangeValue(row, keys) }));\n        const sizedRows = rows.filter((row) => sizeFor(row));\n        let largestIndex = -1;\n        let outOfRange = false;\n        let fellBetween = false;\n        measurementReaders.forEach(({ value, range }) => {\n          const ranges = sizedRows.map((row) => parseRange(range(row)));\n          const known = ranges.filter(Boolean);\n          if (!Number.isFinite(value) || !known.length) return;\n          const decides = known.some((item) => item[0] !== known[0][0] || item[1] !== known[0][1]);\n          if (!decides) {\n            if (value > known[0][1]) outOfRange = true;\n            return;\n          }\n          const containing = [];\n          ranges.forEach((item, rowIndex) => {\n            if (item && value >= item[0] && value <= item[1]) containing.push(rowIndex);\n          });\n          // Una talla de m\u00E1s: si cae en varias tallas, la siguiente a la menor (no salta dos).\n          let index = containing.length > 1 ? containing[1] : (containing.length ? containing[0] : -1);\n          if (index < 0) {\n            index = ranges.findIndex((item) => item && value <= item[1]);\n            fellBetween = true;\n          }\n          if (index < 0) {\n            outOfRange = true;\n            return;\n          }\n          largestIndex = Math.max(largestIndex, index);\n        });\n        // Nunca menos de lo que la calculadora ya recomendaba (la mayor fila donde caben todas).\n        if (!outOfRange && (exactMatch || nextAvailableMatch)) largestIndex = Math.max(largestIndex, sizedRows.indexOf(exactMatch || nextAvailableMatch));\n        const largerSizeMatch = !outOfRange && largestIndex >= 0 ? sizedRows[largestIndex] : null;\n        const match = outOfRange ? null : (largerSizeMatch || exactMatch || nextAvailableMatch);\n        result.hidden = false;\n        if (match && sizeFor(match)) {\n          const recommendedSize = sizeFor(match);\n          size.textContent = recommendedSize;\n          copy.textContent = (largerSizeMatch ? fellBetween : nextAvailableMatch)\n            ? 'Tus medidas quedan entre rangos. Te recomendamos la siguiente talla disponible en la tabla oficial.'\n            : (dynamicMeasurements\n              ? (isShortLiftGuide\n                ? 'Referencia calculada por la cadera, la medida prioritaria para esta prenda.'\n                : 'Referencia calculada con las medidas de la tabla oficial vinculada a este producto.')\n              : (category === 'fajas'\n                ? 'Referencia basada en cintura, cadera y peso de la tabla oficial vinculada a este producto.'\n                : 'Referencia basada en la tabla oficial vinculada a este tipo de producto.'));\n          showCollectionLink(recommendedSize);\n        } else {\n          size.textContent = 'Asesor\u00EDa recomendada';\n          copy.textContent = rows.length\n            ? 'Tus medidas quedan fuera de los rangos disponibles. Escr\u00EDbenos y una asesora te ayudar\u00E1 a confirmar la mejor opci\u00F3n.'\n            : 'Este tipo de producto todav\u00EDa no tiene una tabla enlazada. Puedes consultar la gu\u00EDa completa o pedir asesor\u00EDa.';\n          hideCollectionLink();\n        }\n      });\n    });\n  };\n\n  const initializeQuickBuy = () => {\n    if (document.documentElement.dataset.mjrQuickBuyBound === 'true') return;\n    document.documentElement.dataset.mjrQuickBuyBound = 'true';\n    const dialog = document.createElement('dialog');\n    dialog.className = 'mjr-modal mjr-quick-buy';\n    dialog.id = 'mjr-quick-buy';\n    dialog.innerHTML = `\n      <div class=\"mjr-modal__inner\">\n        <div class=\"mjr-modal__head\">\n          <div><p class=\"mjr-eyebrow\">Compra r\u00E1pida</p><h2 class=\"mjr-modal__title\" data-mjr-quick-title></h2></div>\n          <button class=\"mjr-modal__close\" type=\"button\" data-mjr-quick-close aria-label=\"Cerrar\">\u00D7</button>\n        </div>\n        <form data-mjr-quick-form>\n          <div class=\"mjr-quick-buy__options\" data-mjr-quick-options></div>\n          <button class=\"mjr-button\" type=\"submit\" data-mjr-quick-submit>Continuar</button>\n          <a class=\"mjr-quick-buy__detail\" data-mjr-quick-detail>Ver detalle del producto</a>\n        </form>\n      </div>`;\n    document.body.appendChild(dialog);\n    dialog.querySelector('[data-mjr-quick-close]').addEventListener('click', () => closeDialog(dialog));\n    dialog.addEventListener('click', (event) => { if (event.target === dialog) closeDialog(dialog); });\n    dialog.addEventListener('close', releaseDialogLock);\n\n    let product = null;\n    let action = 'cart';\n    const render = () => {\n      const options = dialog.querySelector('[data-mjr-quick-options]');\n      options.innerHTML = (product.options || []).map((option, index) => `\n        <fieldset data-mjr-quick-option=\"${index}\">\n          <legend>${option.name}</legend>\n          <div>${option.values.map((value, valueIndex) => `\n            <label><input type=\"radio\" name=\"option-${index}\" value=\"${String(value).replaceAll('\"', '&quot;')}\" ${valueIndex === 0 ? 'checked' : ''}><span>${value}</span></label>\n          `).join('')}</div>\n        </fieldset>`).join('');\n    };\n\n    document.addEventListener('click', async (event) => {\n      const trigger = event.target.closest('[data-mjr-quick-buy]');\n      if (!trigger) return;\n      event.preventDefault();\n      action = trigger.dataset.mjrQuickAction || 'cart';\n      trigger.disabled = true;\n      try {\n        const response = await fetch(`/products/${encodeURIComponent(trigger.dataset.mjrQuickBuy)}.js`, { headers: { Accept: 'application/json' } });\n        if (!response.ok) throw new Error('Producto no disponible');\n        product = await response.json();\n        dialog.querySelector('[data-mjr-quick-title]').textContent = product.title;\n        dialog.querySelector('[data-mjr-quick-submit]').textContent = action === 'checkout' ? 'Comprar ahora' : 'A\u00F1adir al carrito';\n        dialog.querySelector('[data-mjr-quick-detail]').href = product.url || `/products/${product.handle}`;\n        render();\n        openDialog(document, dialog.id, trigger);\n      } catch {\n        window.location.assign(`/products/${encodeURIComponent(trigger.dataset.mjrQuickBuy)}`);\n      } finally {\n        trigger.disabled = false;\n      }\n    });\n\n    dialog.querySelector('[data-mjr-quick-form]').addEventListener('submit', async (event) => {\n      event.preventDefault();\n      const form = event.currentTarget;\n      const submitButton = dialog.querySelector('[data-mjr-quick-submit]');\n      if (form.dataset.mjrSubmitting === 'true') return;\n      const selected = [...dialog.querySelectorAll('[data-mjr-quick-option]')].map((group) => group.querySelector('input:checked')?.value || '');\n      const variant = product.variants.find((item) => item.options.every((value, index) => value === selected[index]));\n      if (!variant?.available) {\n        dialog.querySelector('[data-mjr-quick-submit]').textContent = 'Combinaci\u00F3n no disponible';\n        return;\n      }\n      form.dataset.mjrSubmitting = 'true';\n      submitButton.disabled = true;\n      submitButton.classList.add('is-loading');\n      submitButton.setAttribute('aria-busy', 'true');\n      try {\n        const response = await fetch('/cart/add.js', {\n          method: 'POST',\n          headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n          body: JSON.stringify({ items: [{ id: variant.id, quantity: 1 }] }),\n        });\n        if (!response.ok) throw new Error('No se pudo a\u00F1adir');\n        window.location.assign(action === 'checkout' ? '/checkout' : '/cart');\n      } catch {\n        submitButton.textContent = 'Intenta nuevamente';\n      } finally {\n        delete form.dataset.mjrSubmitting;\n        submitButton.disabled = false;\n        submitButton.classList.remove('is-loading');\n        submitButton.removeAttribute('aria-busy');\n      }\n    });\n  };\n\n  const applyMujeronCartCount = (count) => {\n    const total = Math.max(0, Number(count || 0));\n    document.querySelectorAll('[data-mjr-cart-count]').forEach((badge) => {\n      badge.textContent = String(total);\n      badge.classList.toggle('is-empty', total === 0);\n    });\n    document.querySelectorAll('[data-mjr-cart-open]').forEach((button) => {\n      button.setAttribute('aria-label', `Carrito, ${total} ${total === 1 ? 'producto' : 'productos'}`);\n    });\n  };\n\n  const refreshMujeronCartCount = async () => {\n    try {\n      const root = window.Shopify?.routes?.root || '/';\n      const response = await fetch(`${root}cart.js`, {\n        headers: { Accept: 'application/json' },\n      });\n      if (!response.ok) return;\n      const cart = await response.json();\n      applyMujeronCartCount(cart.item_count);\n    } catch (error) {\n      console.warn('[Mujer\u00F3n] No se pudo refrescar el contador del carrito.', error);\n    }\n  };\n\n  const initializeCartCount = () => {\n    if (document.documentElement.dataset.mjrCartCountBound === 'true') return;\n    document.documentElement.dataset.mjrCartCountBound = 'true';\n    document.addEventListener('shopify:cart:lines-update', (event) => {\n      if (!event.promise) {\n        refreshMujeronCartCount();\n        return;\n      }\n      event.promise\n        .then(({ cart }) => {\n          const total = cart?.totalQuantity;\n          if (total === undefined) refreshMujeronCartCount();\n          else applyMujeronCartCount(total);\n        })\n        .catch((error) => {\n          if (error?.name !== 'AbortError') refreshMujeronCartCount();\n        });\n    });\n  };\n\n  const refreshCartDrawer = async () => {\n    try {\n      const root = window.Shopify?.routes?.root || '/';\n      // Render from the shop root. On /cart the drawer section intentionally\n      // returns no markup because the full cart template is already active.\n      const response = await fetch(`${root}?sections=cart-drawer-section&_=${Date.now()}`, {\n        headers: { Accept: 'application/json' },\n        cache: 'no-store',\n      });\n      if (response.ok) {\n        const sections = await response.json();\n        const html = sections['cart-drawer-section'];\n        if (html) {\n          const parsed = new DOMParser().parseFromString(html, 'text/html');\n          const next = parsed.querySelector('#shopify-section-cart-drawer-section');\n          const current = document.querySelector('#shopify-section-cart-drawer-section');\n          if (next && current) current.replaceWith(next);\n        }\n      }\n    } catch (error) {\n      console.warn('[Mujer\u00F3n] No se pudo refrescar el carrito lateral.', error);\n    }\n\n    await refreshMujeronCartCount();\n\n    const drawer = document.querySelector('theme-drawer#cart-drawer');\n    if (typeof drawer?.open === 'function') drawer.open();\n    else document.querySelector('[aria-controls=\"cart-drawer\"]')?.click();\n  };\n\n  const initializeCardQuickSelectors = (scope = document) => {\n    const quickSelectors = [];\n    if (scope.matches?.('[data-mjr-card-quick]')) quickSelectors.push(scope);\n    scope.querySelectorAll?.('[data-mjr-card-quick]').forEach((quick) => quickSelectors.push(quick));\n    quickSelectors.forEach((quick) => {\n      // WEB-1: el morph de Horizon (filtros) borra este atributo pero conserva el nodo y sus\n      // listeners; la marca en el propio nodo evita enlazar el mismo panel dos veces.\n      if (quick.__mjrCardQuickBound) return;\n      quick.__mjrCardQuickBound = true;\n      quick.dataset.mjrCardQuickBound = 'true';\n      const trigger = quick.querySelector('[data-mjr-card-quick-trigger]');\n      const panel = quick.querySelector('[data-mjr-card-quick-panel]');\n      const template = quick.querySelector('[data-mjr-card-quick-template]');\n      const card = quick.closest('[data-mjr-merch-card]');\n      const toast = card?.querySelector('[data-mjr-card-toast]');\n      let toastTimer;\n      let product = null;\n      let addButton = null;\n      let status = null;\n      let optionGroups = [];\n      let hydrated = false;\n      if (!trigger || !panel || !template) return;\n\n      const selectedOptions = () => (product.options || []).map((_, optionIndex) => {\n        const group = quick.querySelector(`[data-mjr-card-option=\"${optionIndex}\"]`);\n        if (group) return group.querySelector('input:checked')?.value || '';\n        const fixed = quick.querySelector(`[data-mjr-card-fixed-option=\"${optionIndex}\"]`)?.value;\n        if (fixed) return fixed;\n        return product.variants?.length === 1 ? product.variants[0].options?.[optionIndex] || '' : '';\n      });\n\n      const resolveSelectionMessage = () => {\n        const selected = selectedOptions();\n        const missing = (product.options || [])\n          .filter((option, index) => !selected[index])\n          .map((option) => (typeof option === 'string' ? option : option.name) || 'una opci\\u00f3n');\n        const missingColor = missing.find((name) => /colou?r|tono/i.test(name));\n\n        if (missingColor) return 'Selecciona un color antes de a\\u00f1adir al carrito.';\n        if (missing.length === 1) return `Selecciona ${missing[0].toLowerCase()} antes de a\\u00f1adir al carrito.`;\n        if (missing.length > 1) return 'Selecciona talla y color antes de a\\u00f1adir al carrito.';\n        return 'Esta combinaci\\u00f3n no est\\u00e1 disponible. Prueba otra opci\\u00f3n.';\n      };\n\n      const refreshOptionAvailability = () => {\n        if (!product || !addButton) return;\n        const selected = selectedOptions();\n        optionGroups.forEach((group) => {\n          const optionIndex = Number(group.dataset.mjrCardOption);\n          group.querySelectorAll('input[type=\"radio\"]').forEach((input) => {\n            const candidate = [...selected];\n            candidate[optionIndex] = input.value;\n            const possible = product.variants?.some((variant) =>\n              variant.available && variant.options.every((value, index) => !candidate[index] || value === candidate[index])\n            );\n            input.disabled = !possible;\n            input.closest('label')?.classList.toggle('is-unavailable', !possible);\n          });\n        });\n\n        const completeSelection = selectedOptions();\n        const purchasableVariant = product.variants?.some(\n          (variant) => variant.available && variant.options.every((value, index) => value === completeSelection[index])\n        );\n        // El CTA queda disponible para explicar qu\u00C3\u00A9 falta elegir.\n        addButton.disabled = false;\n        addButton.dataset.selectionIncomplete = String(!purchasableVariant);\n        addButton.classList.toggle('is-selection-incomplete', !purchasableVariant);\n      };\n\n      const showToast = (message, tone = 'error') => {\n        if (!toast) return;\n        window.clearTimeout(toastTimer);\n        toast.textContent = message;\n        toast.dataset.tone = tone;\n        toast.hidden = false;\n        requestAnimationFrame(() => toast.classList.add('is-visible'));\n        toastTimer = window.setTimeout(() => {\n          toast.classList.remove('is-visible');\n          window.setTimeout(() => { toast.hidden = true; }, 220);\n        }, 3200);\n      };\n\n      const setOpen = (open) => {\n        if (open && !hydrate()) return;\n        panel.hidden = !open;\n        trigger.setAttribute('aria-expanded', String(open));\n        quick.classList.toggle('is-open', open);\n        card?.classList.toggle('is-quick-open', open);\n      };\n\n      const addSelectedVariant = async (event) => {\n        event.preventDefault();\n        event.stopPropagation();\n        if (addButton.dataset.mjrAdding === 'true') return;\n        const selected = selectedOptions();\n        const variant = product.variants?.find(\n          (item) => item.available && item.options.every((value, index) => value === selected[index])\n        );\n        if (!variant) {\n          const message = resolveSelectionMessage();\n          if (status) status.textContent = message;\n          showToast(message);\n          return;\n        }\n\n        addButton.dataset.mjrAdding = 'true';\n        addButton.disabled = true;\n        addButton.classList.add('is-loading');\n        addButton.setAttribute('aria-busy', 'true');\n        if (status) status.textContent = 'A\u00F1adiendo\u2026';\n        try {\n          const response = await fetch('/cart/add.js', {\n            method: 'POST',\n            headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n            body: JSON.stringify({ items: [{ id: variant.id, quantity: 1 }] }),\n          });\n          if (!response.ok) throw new Error('No se pudo a\u00F1adir');\n          if (status) status.textContent = 'Ya est\u00E1 a\u00F1adido a tu carro.';\n          showToast('Ya est\u00E1 a\u00F1adido a tu carro.', 'success');\n          setOpen(false);\n          await refreshCartDrawer();\n        } catch {\n          if (status) status.textContent = 'No pudimos a\u00F1adirlo. Intenta nuevamente.';\n          showToast('No pudimos a\u00F1adirlo. Intenta nuevamente.');\n        } finally {\n          delete addButton.dataset.mjrAdding;\n          addButton.disabled = false;\n          addButton.classList.remove('is-loading');\n          addButton.removeAttribute('aria-busy');\n        }\n      };\n\n      const bindOptionInputs = () => {\n        optionGroups.forEach(sortSizeChoices);\n        quick.querySelectorAll('input[type=\"radio\"]').forEach((input) => {\n          const rememberCheckedState = () => {\n            input.dataset.mjrWasChecked = String(input.checked);\n          };\n          input.addEventListener('pointerdown', rememberCheckedState);\n          input.addEventListener('keydown', (event) => {\n            if (event.key === ' ' || event.key === 'Enter') rememberCheckedState();\n          });\n          input.addEventListener('click', () => {\n            if (input.dataset.mjrWasChecked !== 'true') return;\n            input.checked = false;\n            input.dataset.mjrWasChecked = 'false';\n            if (status) status.textContent = '';\n            refreshOptionAvailability();\n          });\n          input.addEventListener('change', () => {\n            if (status) status.textContent = '';\n            refreshOptionAvailability();\n          });\n        });\n      };\n\n      const hydrate = () => {\n        // WEB-1: tras un morph el panel puede quedar vac\u00EDo con un <template> nuevo; se rehidrata\n        // desde el template vivo y se reemplaza el contenido (nunca append) para no duplicar.\n        const liveTemplate = quick.querySelector('[data-mjr-card-quick-template]');\n        if (hydrated && !liveTemplate && panel.querySelector('[data-mjr-card-product]')) return true;\n        if (!liveTemplate) return false;\n        panel.replaceChildren(liveTemplate.content.cloneNode(true));\n        liveTemplate.remove();\n        addButton = panel.querySelector('[data-mjr-card-add]');\n        status = panel.querySelector('[data-mjr-card-status]');\n        try {\n          product = JSON.parse(panel.querySelector('[data-mjr-card-product]')?.textContent || 'null');\n        } catch {\n          product = null;\n        }\n        if (!addButton || !product) {\n          panel.replaceChildren();\n          return false;\n        }\n        optionGroups = [...panel.querySelectorAll('[data-mjr-card-option]')];\n        bindOptionInputs();\n        addButton.addEventListener('click', addSelectedVariant);\n        hydrated = true;\n        quick.dataset.mjrCardQuickHydrated = 'true';\n        refreshOptionAvailability();\n        return true;\n      };\n\n      trigger.addEventListener('click', (event) => {\n        event.preventDefault();\n        event.stopPropagation();\n        // En desktop el pointerenter ya abre el panel antes del click. No lo\n        // cierres al hacer click: el cliente necesita poder elegir su talla.\n        if (window.matchMedia('(hover: hover) and (pointer: fine)').matches) setOpen(true);\n        else setOpen(panel.hidden);\n      });\n\n      trigger.addEventListener('pointerenter', () => {\n        if (window.matchMedia('(hover: hover) and (pointer: fine)').matches) setOpen(true);\n      });\n\n      let closeTimer;\n      const cancelClose = () => window.clearTimeout(closeTimer);\n      const scheduleClose = () => {\n        if (!window.matchMedia('(hover: hover) and (pointer: fine)').matches) return;\n        cancelClose();\n        closeTimer = window.setTimeout(() => setOpen(false), 420);\n      };\n      quick.addEventListener('mouseenter', cancelClose);\n      quick.addEventListener('mouseleave', scheduleClose);\n      panel.addEventListener('mouseenter', cancelClose);\n      panel.addEventListener('mouseleave', scheduleClose);\n    });\n  };\n\n  const updateFavoriteCounts = () => {\n    const count = readFavorites().length;\n    document.querySelectorAll('[data-mjr-favorite-count]').forEach((badge) => {\n      badge.textContent = String(count);\n      badge.hidden = count === 0;\n      const favoriteLink = badge.closest('a[href*=\"/pages/favoritos\"]');\n      if (favoriteLink) {\n        favoriteLink.setAttribute('aria-label', `Favoritos, ${count} ${count === 1 ? 'producto' : 'productos'}`);\n      }\n    });\n  };\n\n  const heartIcon = () => `\n    <svg class=\"mjr-icon\" aria-hidden=\"true\" viewBox=\"0 0 24 24\">\n      <path d=\"M20.8 4.6a5.5 5.5 0 0 0-7.8 0L12 5.7l-1.1-1.1a5.5 5.5 0 0 0-7.8 7.8L12 21l8.8-8.6a5.5 5.5 0 0 0 0-7.8Z\"/>\n    </svg>`;\n\n  const injectFavoriteButtons = (scope = document) => {\n    const favorites = readFavorites();\n    scope.querySelectorAll('product-card, .product-card').forEach((card) => {\n      if (card.querySelector('[data-mjr-favorite-toggle]')) return;\n      const link = card.querySelector('a[href*=\"/products/\"]');\n      if (!link) return;\n      const match = link.getAttribute('href')?.match(/\\/products\\/([^/?#]+)/);\n      const handle = match?.[1];\n      if (!handle) return;\n      const media = card.querySelector('.product-card__media, .card-gallery, [class*=\"product-card\"]');\n      if (!media) return;\n      if (getComputedStyle(media).position === 'static') media.style.position = 'relative';\n      const button = document.createElement('button');\n      button.type = 'button';\n      button.className = `mjr-product-favorite${favorites.includes(handle) ? ' is-active' : ''}`;\n      button.dataset.mjrFavoriteToggle = handle;\n      button.setAttribute('aria-label', favorites.includes(handle) ? 'Quitar de favoritos' : 'Guardar en favoritos');\n      button.setAttribute('aria-pressed', String(favorites.includes(handle)));\n      button.innerHTML = heartIcon();\n      media.appendChild(button);\n    });\n  };\n\n  const toggleFavorite = (handle, button) => {\n    const favorites = readFavorites();\n    const isFavorite = favorites.includes(handle);\n    const next = isFavorite ? favorites.filter((item) => item !== handle) : [...favorites, handle];\n    saveFavorites(next);\n    document.querySelectorAll(`[data-mjr-favorite-toggle=\"${CSS.escape(handle)}\"]`).forEach((item) => {\n      item.classList.toggle('is-active', !isFavorite);\n      item.classList.remove('is-pulsing');\n      void item.offsetWidth;\n      item.classList.add('is-pulsing');\n      window.setTimeout(() => item.classList.remove('is-pulsing'), 900);\n      item.setAttribute('aria-pressed', String(!isFavorite));\n      item.setAttribute('aria-label', !isFavorite ? 'Quitar de favoritos' : 'Guardar en favoritos');\n      const label = item.querySelector('span:not(.mjr-icon)');\n      if (label && item.classList.contains('mjr-pdp-form__favorite')) {\n        label.textContent = !isFavorite ? 'Guardado en favoritos' : 'Agregar a favoritos';\n      }\n    });\n    button?.focus({ preventScroll: true });\n  };\n\n  // Static Shopify collection cards do not always sit inside a Mujer\u00F3n root.\n  // Keep their selected state in sync with the same persistent favorites store.\n  const syncFavoriteButtons = (scope = document) => {\n    const favorites = readFavorites();\n    scope.querySelectorAll?.('[data-mjr-favorite-toggle]').forEach((button) => {\n      const active = favorites.includes(button.dataset.mjrFavoriteToggle);\n      button.classList.toggle('is-active', active);\n      button.setAttribute('aria-pressed', String(active));\n      button.setAttribute('aria-label', active ? 'Quitar de favoritos' : 'Guardar en favoritos');\n    });\n  };\n\n  const buildFavoriteCard = (product) => {\n    const variant = product.variants?.find((item) => item.available) || product.variants?.[0];\n    const image = product.featured_image || product.images?.[0] || '';\n    const imageUrl = typeof image === 'string' ? image : image?.src || '';\n    const price = Number(variant?.price || product.price || 0) / 100;\n    const compare = Number(variant?.compare_at_price || 0) / 100;\n    const card = document.createElement('article');\n    card.className = 'mjr-favorite-card';\n    card.innerHTML = `\n      <button class=\"mjr-favorite-card__remove\" type=\"button\" data-mjr-favorite-toggle=\"${product.handle}\" aria-label=\"Quitar de favoritos\">\n        ${heartIcon()}\n      </button>\n      <a href=\"/products/${product.handle}\">\n        ${imageUrl ? `<img src=\"${imageUrl}\" alt=\"${String(product.title).replaceAll('\"', '&quot;')}\" loading=\"lazy\" width=\"640\" height=\"800\">` : ''}\n        <h2>${product.title}</h2>\n      </a>\n      <div class=\"mjr-favorite-card__price\">\n        <strong>${moneyFormatter.format(price)}</strong>\n        ${compare > price ? `<s>${moneyFormatter.format(compare)}</s>` : ''}\n      </div>`;\n    return card;\n  };\n\n  const initializeFavoritesPage = async (root) => {\n    const grid = root.querySelector('[data-mjr-favorites-grid]');\n    const pagination = root.querySelector('[data-mjr-favorites-pagination]');\n    const empty = root.querySelector('[data-mjr-favorites-empty]');\n    const loading = root.querySelector('[data-mjr-favorites-loading]');\n    if (!grid || root.dataset.mjrFavoritesLoaded === 'true') return;\n    root.dataset.mjrFavoritesLoaded = 'true';\n    const handles = readFavorites();\n    if (!handles.length) {\n      loading.hidden = true;\n      empty.hidden = false;\n      return;\n    }\n    const cards = await Promise.all(\n      handles.map(async (handle) => {\n        try {\n          const response = await fetch(`/products/${encodeURIComponent(handle)}?view=mujeron-card`, {\n            headers: { Accept: 'text/html' },\n          });\n          if (!response.ok) return null;\n          const parsed = new DOMParser().parseFromString(await response.text(), 'text/html');\n          return parsed.querySelector('[data-mjr-merch-card]');\n        } catch {\n          return null;\n        }\n      })\n    );\n    const valid = cards.filter(Boolean);\n    loading.hidden = true;\n    if (!valid.length) {\n      empty.hidden = false;\n      return;\n    }\n    valid.forEach((card) => grid.appendChild(card));\n    grid.hidden = false;\n    const pageSize = 12;\n    const pageCount = Math.ceil(valid.length / pageSize);\n    const showPage = (page) => {\n      const safePage = Math.min(Math.max(page, 1), pageCount);\n      valid.forEach((card, index) => {\n        card.hidden = index < (safePage - 1) * pageSize || index >= safePage * pageSize;\n      });\n      pagination?.querySelectorAll('button').forEach((button) => {\n        const active = Number(button.dataset.mjrFavoritesPage) === safePage;\n        button.classList.toggle('is-active', active);\n        button.setAttribute('aria-current', active ? 'page' : 'false');\n      });\n      if (safePage > 1) root.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    };\n    if (pagination && pageCount > 1) {\n      pagination.innerHTML = Array.from({ length: pageCount }, (_, index) =>\n        `<button type=\"button\" data-mjr-favorites-page=\"${index + 1}\" aria-label=\"P\u00E1gina ${index + 1}\">${index + 1}</button>`\n      ).join('');\n      pagination.hidden = false;\n      pagination.addEventListener('click', (event) => {\n        const button = event.target.closest('[data-mjr-favorites-page]');\n        if (button) showPage(Number(button.dataset.mjrFavoritesPage));\n      });\n    }\n    showPage(1);\n    syncFavoriteButtons(grid);\n    initializeCardQuickSelectors(grid);\n    initializeCardMediaRotation(grid);\n  };\n\n  const bindRoot = (root) => {\n    if (!root || root.dataset.mjrBound === 'true') return;\n    root.dataset.mjrBound = 'true';\n\n    root.addEventListener('click', (event) => {\n      const openTrigger = event.target.closest('[data-mjr-open]');\n      if (openTrigger && root.contains(openTrigger)) {\n        event.preventDefault();\n        openDialog(root, openTrigger.dataset.mjrOpen, openTrigger);\n        return;\n      }\n\n      const globalSizeTrigger = event.target.closest('a[href$=\"#encuentra-tu-talla\"]:not([data-mjr-menu-close])');\n      if (globalSizeTrigger && root.contains(globalSizeTrigger)) {\n        const sizeDialog = getGlobalSizeDialog();\n        if (sizeDialog) {\n          event.preventDefault();\n          openDialog(document, sizeDialog.id, globalSizeTrigger);\n          return;\n        }\n      }\n\n      const closeTrigger = event.target.closest('[data-mjr-close]');\n      if (closeTrigger && root.contains(closeTrigger)) {\n        event.preventDefault();\n        closeDialog(closeTrigger.closest('dialog'));\n        return;\n      }\n\n      const menuCloseLink = event.target.closest('[data-mjr-menu-close]');\n      if (menuCloseLink) {\n        event.preventDefault();\n        const href = menuCloseLink.getAttribute('href');\n        closeDialog(menuCloseLink.closest('dialog'), () => {\n          if (!href) return;\n          if (href.endsWith('#encuentra-tu-talla')) {\n            const sizeDialog = getGlobalSizeDialog();\n            if (sizeDialog) {\n              openDialog(document, sizeDialog.id, menuCloseLink);\n              return;\n            }\n          }\n          if (href.startsWith('#')) {\n            document.querySelector(href)?.scrollIntoView({ behavior: 'smooth' });\n          } else {\n            window.location.assign(href);\n          }\n        });\n        return;\n      }\n\n      const introToggle = event.target.closest('[data-mjr-intro-toggle]');\n      if (introToggle && root.contains(introToggle)) {\n        const introCopy = root.querySelector('[data-mjr-intro-copy]');\n        if (!introCopy) return;\n        const isCollapsed = introCopy.dataset.collapsed === 'true';\n        introCopy.dataset.collapsed = isCollapsed ? 'false' : 'true';\n        introToggle.setAttribute('aria-expanded', String(isCollapsed));\n        introToggle.textContent = isCollapsed\n          ? introToggle.dataset.collapseLabel\n          : introToggle.dataset.expandLabel;\n        return;\n      }\n\n      const slideTrigger = event.target.closest('[data-mjr-slide]');\n      if (slideTrigger && root.contains(slideTrigger)) {\n        const track = root.querySelector('[data-mjr-track]:not([hidden])');\n        if (!track) return;\n        const direction = slideTrigger.dataset.mjrSlide === 'previous' ? -1 : 1;\n        track.scrollBy({ left: direction * Math.max(track.clientWidth * .82, 260), behavior: 'smooth' });\n      }\n\n      const collectionSwitch = event.target.closest('[data-mjr-collection-switch]');\n      if (collectionSwitch && root.contains(collectionSwitch)) {\n        const selected = collectionSwitch.dataset.mjrCollectionSwitch;\n      const deferredPanel = root.querySelector(`template[data-mjr-collection-template=\"${selected}\"]`);\n      if (deferredPanel) {\n        deferredPanel.replaceWith(deferredPanel.content.cloneNode(true));\n      }\n        root.querySelectorAll('[data-mjr-collection-switch]').forEach((button) => {\n          const active = button === collectionSwitch;\n          button.classList.toggle('is-active', active);\n          button.setAttribute('aria-selected', String(active));\n        });\n        root.querySelectorAll('[data-mjr-collection-panel]').forEach((panel) => {\n          panel.hidden = panel.dataset.mjrCollectionPanel !== selected;\n          if (!panel.hidden) panel.scrollLeft = 0;\n        });\n        return;\n      }\n\n      const reviewFilter = event.target.closest('[data-mjr-review-filter]');\n      if (reviewFilter && root.contains(reviewFilter)) {\n        const selected = reviewFilter.dataset.mjrReviewFilter;\n        root.querySelectorAll('[data-mjr-review-filter]').forEach((button) => {\n          button.setAttribute('aria-selected', String(button === reviewFilter));\n        });\n        root.querySelectorAll('[data-mjr-review]').forEach((card) => {\n          card.hidden = selected !== 'todas' && card.dataset.mjrReview !== selected;\n        });\n      }\n\n      const favoriteButton = event.target.closest('[data-mjr-favorite-toggle]');\n      if (favoriteButton) {\n        event.preventDefault();\n        event.stopPropagation();\n        toggleFavorite(favoriteButton.dataset.mjrFavoriteToggle, favoriteButton);\n        const favoritesPage = favoriteButton.closest('[data-mjr-favorites-page]');\n        if (favoritesPage) {\n          favoriteButton.closest('[data-mjr-merch-card], .mjr-favorite-card')?.remove();\n          if (!favoritesPage.querySelector('[data-mjr-merch-card], .mjr-favorite-card')) {\n            favoritesPage.querySelector('[data-mjr-favorites-grid]').hidden = true;\n            favoritesPage.querySelector('[data-mjr-favorites-empty]').hidden = false;\n          }\n        }\n      }\n    });\n\n    root.addEventListener('submit', (event) => {\n      const form = event.target.closest('[data-mjr-size-form]');\n      if (!form || !root.contains(form)) return;\n      event.preventDefault();\n      if (!form.checkValidity()) {\n        form.reportValidity();\n        return;\n      }\n      const data = new FormData(form);\n      const result = form.querySelector('[data-mjr-size-result]');\n      if (!result) return;\n      const resultCopy = result.querySelector('[data-mjr-size-result-copy]');\n      const productsLink = result.querySelector('[data-mjr-size-products]');\n      const waist = Number(data.get('waist'));\n      const hips = Number(data.get('hips'));\n      const parseRange = (value) => {\n        const numbers = String(value || '')\n          .match(/\\d+(?:[.,]\\d+)?/g)\n          ?.map((number) => Number(number.replace(',', '.')))\n          .filter(Number.isFinite) || [];\n        if (!numbers.length) return null;\n        return numbers.length === 1 ? [numbers[0], numbers[0]] : [Math.min(...numbers), Math.max(...numbers)];\n      };\n      const rows = [...root.querySelectorAll('[data-mjr-size-row]')]\n        .map((row) => ({\n          size: row.dataset.size || '',\n          waist: parseRange(row.dataset.waist),\n          hips: parseRange(row.dataset.hips),\n        }))\n        .filter((row) => row.size && row.waist && row.hips);\n      const matchingRows = rows.filter((row) =>\n        waist >= row.waist[0] && waist <= row.waist[1]\n        && hips >= row.hips[0] && hips <= row.hips[1]\n      );\n      const match = matchingRows[matchingRows.length - 1];\n      if (match) {\n        resultCopy.textContent = `Talla de referencia: ${match.size}. Tus medidas coinciden con esta fila de la tabla. Confirma la recomendaci\u00F3n en la ficha del modelo o con una asesora antes de comprar.`;\n        if (productsLink) {\n          const productsUrl = new URL(productsLink.getAttribute('href'), window.location.origin);\n          productsUrl.searchParams.set('filter.v.option.talla', match.size);\n          productsLink.href = `${productsUrl.pathname}${productsUrl.search}`;\n          productsLink.hidden = false;\n        }\n      } else if (rows.length) {\n        resultCopy.textContent = `No encontramos una coincidencia segura para cintura ${waist} cm y cadera ${hips} cm. Revisa la gu\u00EDa del modelo y confirma una sola talla con una asesora.`;\n        if (productsLink) productsLink.hidden = true;\n      } else {\n        resultCopy.textContent = `Medidas registradas: cintura ${waist} cm y cadera ${hips} cm. La tabla definitiva depende del modelo; revisa la gu\u00EDa y confirma una sola talla con una asesora.`;\n        if (productsLink) productsLink.hidden = true;\n      }\n      result.hidden = false;\n      result.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n    });\n\n    root.querySelectorAll('dialog').forEach((dialog) => {\n      dialog.addEventListener('click', (event) => {\n        if (event.target === dialog) closeDialog(dialog);\n      });\n      dialog.addEventListener('close', () => {\n        releaseDialogLock();\n        const returnId = dialog.dataset.mjrReturnFocus;\n        if (returnId) document.getElementById(returnId)?.focus({ preventScroll: true });\n      });\n    });\n\n    const introCopy = root.querySelector('[data-mjr-intro-copy]');\n    const introToggle = root.querySelector('[data-mjr-intro-toggle]');\n    if (introCopy && introToggle) {\n      requestAnimationFrame(() => {\n        if (window.matchMedia('(max-width: 749px)').matches) {\n          const fitsWithoutToggle = introCopy.scrollHeight <= introCopy.clientHeight + 4;\n          introToggle.hidden = fitsWithoutToggle;\n          if (fitsWithoutToggle) introCopy.dataset.collapsed = 'false';\n        }\n      });\n    }\n\n    if (root.matches('[data-mjr-favorites-page]')) initializeFavoritesPage(root);\n  };\n\n  const initializeHeader = () => {\n    const { subscribeScroll } = getPageScrollContext();\n    document.querySelectorAll('[data-mjr-site-header]').forEach((header) => {\n      if (header.dataset.mjrHeaderBound === 'true') return;\n      header.dataset.mjrHeaderBound = 'true';\n      let lastScrolled = null;\n      const update = (_position, scrolled) => {\n        if (scrolled === lastScrolled) return;\n        lastScrolled = scrolled;\n        header.classList.toggle('is-scrolled', scrolled);\n        header.classList.toggle('is-announcement-hidden', scrolled && header.dataset.mjrHome !== 'true');\n      };\n      subscribeScroll(update);\n\n      const items = [...header.querySelectorAll('[data-mjr-announcement]')];\n      if (items.length > 1) {\n        let active = 0;\n        window.setInterval(() => {\n          items[active].classList.remove('is-active');\n          active = (active + 1) % items.length;\n          items[active].classList.add('is-active');\n        }, 4200);\n      }\n    });\n  };\n\n  const initializeQuickNavigation = () => {\n    const { subscribeScroll } = getPageScrollContext();\n    document.querySelectorAll('[data-mjr-quick-navigation]').forEach((section) => {\n      if (section.dataset.mjrQuickBound === 'true') return;\n      section.dataset.mjrQuickBound = 'true';\n      const update = (_position, scrolled) => {\n        const shouldHide = section.dataset.mjrHideOnScroll === 'true'\n          && section.dataset.mjrHome !== 'true'\n          && scrolled;\n        section.classList.toggle('is-hidden', shouldHide);\n      };\n      subscribeScroll(update);\n    });\n  };\n\n  const initializeServiceStrip = () => {\n    const { subscribeScroll } = getPageScrollContext();\n\n    document.querySelectorAll('[data-mjr-service-strip]').forEach((strip) => {\n      if (strip.dataset.mjrServiceStripBound === 'true') return;\n      strip.dataset.mjrServiceStripBound = 'true';\n      const update = (_position, scrolled) => {\n        const shouldHide = strip.dataset.mjrHideOnScroll === 'true'\n          && strip.dataset.mjrHome !== 'true'\n          && scrolled;\n        strip.classList.toggle('is-hidden', shouldHide);\n      };\n      subscribeScroll(update);\n    });\n  };\n\n  const initializeStickyProduct = () => {\n    const { scrollTarget, scrollPosition, subscribeScroll } = getPageScrollContext();\n    document.querySelectorAll('[data-mjr-product-sticky]').forEach((sticky) => {\n      if (sticky.dataset.mjrStickyBound === 'true') return;\n      sticky.dataset.mjrStickyBound = 'true';\n      const threshold = Number(sticky.dataset.showAfter || 100);\n      const mainActions = document.querySelector('.mjr-pdp-form__buttons');\n      const revealAnchor = document.querySelector('[data-mjr-purchase-summary]')\n        || document.querySelector('.mjr-product-details__accordion')\n        || document.querySelector('.mjr-product-details')\n        || mainActions;\n      const footer = document.querySelector('.mjr-footer');\n      let footerVisible = false;\n      const revealPointReached = () => {\n        if (!revealAnchor) return scrollPosition() > threshold;\n        const rootTop = scrollTarget === window ? 0 : scrollTarget.getBoundingClientRect().top;\n        const viewportHeight = scrollTarget === window ? window.innerHeight : scrollTarget.clientHeight;\n        return revealAnchor.getBoundingClientRect().top <= rootTop + Math.min(viewportHeight * .58, 520);\n      };\n      const updateVisibility = () => {\n        const visible = revealPointReached() && !footerVisible;\n        sticky.classList.toggle('is-visible', visible);\n        sticky.setAttribute('aria-hidden', String(!visible));\n      };\n      subscribeScroll(updateVisibility);\n      window.addEventListener('resize', updateVisibility, { passive: true });\n      if (footer && 'IntersectionObserver' in window) {\n        const footerObserver = new IntersectionObserver((entries) => {\n          footerVisible = entries[0]?.isIntersecting === true;\n          sticky.classList.toggle('is-footer-visible', footerVisible);\n          updateVisibility();\n        }, {\n          root: scrollTarget === window ? null : scrollTarget,\n          rootMargin: '0px 0px 40px 0px',\n          threshold: 0,\n        });\n        footerObserver.observe(footer);\n      }\n\n      const stickySubmit = sticky.querySelector('[data-mjr-sticky-submit]');\n      stickySubmit?.addEventListener('click', (event) => {\n        const mainSubmit = document.querySelector('.mjr-pdp-form__add');\n        if (!mainSubmit || mainSubmit.disabled) return;\n        event.preventDefault();\n        mainSubmit.click();\n      });\n\n      document.addEventListener('variant:update', (event) => {\n        const variant = event.detail?.resource || event.detail?.variant;\n        if (!variant?.id) return;\n        const idInput = sticky.querySelector('[data-mjr-sticky-variant-id]');\n        const submit = sticky.querySelector('[data-mjr-sticky-submit]');\n        if (idInput) idInput.value = variant.id;\n        if (sticky.querySelector('[data-mjr-sticky-variant]')) {\n          sticky.querySelector('[data-mjr-sticky-variant]').textContent = variant.title || '';\n        }\n        if (sticky.querySelector('[data-mjr-sticky-price]') && Number.isFinite(Number(variant.price))) {\n          sticky.querySelector('[data-mjr-sticky-price]').textContent = moneyFormatter.format(Number(variant.price) / 100);\n        }\n        if (submit) {\n          submit.disabled = variant.available === false;\n          const submitLabel = submit.querySelector('[data-mjr-sticky-submit-label]');\n          if (submitLabel) submitLabel.textContent = variant.available === false ? 'Agotado' : 'A\u00F1adir al carrito';\n        }\n      });\n    });\n  };\n\n  const initializeBuyNow = () => {\n    if (document.documentElement.dataset.mjrBuyNowReady === 'true') return;\n    document.documentElement.dataset.mjrBuyNowReady = 'true';\n\n    document.addEventListener('click', async (event) => {\n      const button = event.target.closest('[data-mjr-buy-now]');\n      if (!button || button.disabled) return;\n\n      const form = button.closest('form[action*=\"/cart/add\"]');\n      if (!form) return;\n\n      event.preventDefault();\n      event.stopPropagation();\n      button.disabled = true;\n      button.classList.add('is-loading');\n\n      try {\n        const root = window.Shopify?.routes?.root || '/';\n        const response = await fetch(`${root}cart/add.js`, {\n          method: 'POST',\n          headers: { Accept: 'application/json' },\n          body: new FormData(form),\n        });\n\n        if (!response.ok) throw new Error('No fue posible preparar la compra.');\n        window.location.assign(`${root}checkout`);\n      } catch (error) {\n        button.disabled = false;\n        button.classList.remove('is-loading');\n        window.location.assign(`${window.Shopify?.routes?.root || '/'}cart`);\n      }\n    }, true);\n  };\n\n  const initializeProductHero = (scope = document) => {\n    scope.querySelectorAll('[data-mjr-product-hero]').forEach((root) => {\n      if (root.dataset.mjrProductHeroBound === 'true') return;\n      root.dataset.mjrProductHeroBound = 'true';\n\n      const parseJson = (selector) => {\n        try {\n          return JSON.parse(root.querySelector(selector)?.textContent || '[]');\n        } catch {\n          return [];\n        }\n      };\n\n      const variants = parseJson('[data-mjr-product-variants]');\n      const sizeMeasures = parseJson('[data-mjr-size-measures]');\n      const sizeColumns = parseJson('[data-mjr-size-columns]');\n      const form = root.querySelector('.mjr-pdp-form');\n      const variantInput = root.querySelector('[data-mjr-variant-id]');\n      const price = root.querySelector('[data-mjr-product-price]');\n      const compare = root.querySelector('[data-mjr-product-compare]');\n      const installmentPrice = root.querySelector('[data-mjr-installment-price]');\n      const inventory = root.querySelector('[data-mjr-inventory]');\n      const sku = root.querySelector('[data-mjr-product-sku]');\n      const addButton = root.querySelector('[ref=\"addToCartButton\"]');\n      const buyNowButton = root.querySelector('[data-mjr-buy-now]');\n      const delivery = root.querySelector('[data-mjr-delivery]');\n      const deliveryRegion = root.querySelector('[data-mjr-delivery-region]');\n      const deliveryDate = root.querySelector('[data-mjr-delivery-date]');\n      const deliveryCost = root.querySelector('[data-mjr-delivery-cost]');\n      const availability = root.querySelector('[data-mjr-availability]');\n      const availabilityCopy = root.querySelector('[data-mjr-availability-copy]');\n      const deliveryExpress = root.querySelector('[data-mjr-delivery-express]');\n      const initialAddLabel = addButton?.textContent?.trim() || 'A\u00F1adir al carrito';\n      const setAddButtonLabel = (label) => {\n        if (!addButton) return;\n        const labelNode = [...addButton.childNodes].find((node) =>\n          node.nodeType === Node.TEXT_NODE && node.textContent.trim()\n        );\n        if (labelNode) {\n          labelNode.textContent = ` ${label} `;\n        } else {\n          addButton.insertBefore(document.createTextNode(` ${label} `), addButton.querySelector('.add-to-cart__added'));\n        }\n      };\n      const threshold = Number(root.dataset.mjrInventoryThreshold || 2);\n      const installmentCount = Math.max(1, Number(root.dataset.mjrInstallmentCount || 3));\n      const freeShippingThreshold = Number(root.dataset.mjrFreeShippingThreshold || 3500000);\n      const slides = [...root.querySelectorAll('[data-mjr-media]')];\n      const thumbs = [...root.querySelectorAll('[data-mjr-gallery-thumb]')];\n      const thumbsTrack = root.querySelector('.mjr-pdp-gallery__thumbs');\n      const stories = [...root.querySelectorAll('[data-mjr-gallery-story]')];\n      let activeMediaIndex = Math.max(0, slides.findIndex((slide) => slide.classList.contains('is-active')));\n      root.querySelectorAll('[data-mjr-option-index]').forEach(sortSizeChoices);\n\n      const showMedia = (index) => {\n        if (!slides.length) return;\n        activeMediaIndex = (index + slides.length) % slides.length;\n        slides.forEach((slide, slideIndex) => {\n          const isActive = slideIndex === activeMediaIndex;\n          slide.classList.toggle('is-active', isActive);\n          slide.hidden = !isActive;\n        });\n        thumbs.forEach((thumb, thumbIndex) => {\n          const isActive = thumbIndex === activeMediaIndex;\n          thumb.classList.toggle('is-active', isActive);\n          thumb.setAttribute('aria-current', String(isActive));\n        });\n        stories.forEach((story, storyIndex) => {\n          const isActive = storyIndex === activeMediaIndex;\n          story.classList.toggle('is-active', isActive);\n          story.classList.toggle('is-complete', storyIndex < activeMediaIndex);\n          story.setAttribute('aria-current', String(isActive));\n        });\n        const activeThumb = thumbs[activeMediaIndex];\n        if (activeThumb && thumbsTrack) {\n          thumbsTrack.scrollTo({\n            left: activeThumb.offsetLeft - ((thumbsTrack.clientWidth - activeThumb.offsetWidth) / 2),\n            behavior: 'smooth',\n          });\n        }\n      };\n\n      const selectedOptions = () => {\n        const groups = [...root.querySelectorAll('[data-mjr-option-index]')];\n        return groups.map((group) => group.querySelector('[data-mjr-option-value]:checked')?.value || '');\n      };\n\n      const refreshPdpOptionAvailability = () => {\n        const groups = [...root.querySelectorAll('[data-mjr-option-index]')];\n        const selected = selectedOptions();\n        groups.forEach((group, groupIndex) => {\n          group.querySelectorAll('[data-mjr-option-value]').forEach((input) => {\n            const candidate = [...selected];\n            candidate[groupIndex] = input.value;\n            const possible = variants.some((variant) =>\n              variant.available && (group.classList.contains('mjr-pdp-option--color')\n                ? variant.options[groupIndex] === input.value\n                : variant.options.every((value, index) => !candidate[index] || value === candidate[index]))\n            );\n            input.disabled = !possible;\n            input.closest('label')?.classList.toggle('is-unavailable', !possible);\n          });\n        });\n      };\n\n      const addBusinessDays = (startDate, days) => {\n        const date = new Date(startDate);\n        let remaining = Math.max(1, Number(days || 1));\n        while (remaining > 0) {\n          date.setDate(date.getDate() + 1);\n          if (date.getDay() !== 0 && date.getDay() !== 6) remaining -= 1;\n        }\n        return date;\n      };\n\n      const updateDelivery = (variant) => {\n        if (!delivery) return;\n        const selected = deliveryRegion?.selectedOptions?.[0];\n        const days = Number(selected?.dataset?.days || delivery.dataset.regionDays || 4);\n        const estimatedDate = addBusinessDays(new Date(), days);\n        if (deliveryDate) {\n          deliveryDate.textContent = estimatedDate.toLocaleDateString('es-CL', {\n            weekday: 'long',\n            day: 'numeric',\n            month: 'long',\n          });\n        }\n        if (availability) availability.textContent = variant?.available === false ? 'Agotado' : 'Disponible';\n        if (availabilityCopy) {\n          availabilityCopy.textContent = variant?.available === false ? 'Av\u00EDsame cuando vuelva' : 'Listo para preparar';\n        }\n        if (deliveryCost) {\n          deliveryCost.textContent = Number(variant?.price || 0) >= freeShippingThreshold\n            ? 'Entrega gratis estimada'\n            : 'Costo de env\u00EDo calculado al pagar';\n        }\n        if (deliveryExpress) deliveryExpress.hidden = deliveryRegion?.value !== 'rm';\n        delivery.classList.toggle('is-unavailable', variant?.available === false);\n      };\n\n      const setSizeMeasureExpanded = (wrapper, expanded, animate = true) => {\n        const reduceMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n        const clearTransitionStyles = () => {\n          wrapper.style.removeProperty('max-height');\n          wrapper.style.removeProperty('overflow');\n          wrapper.style.removeProperty('opacity');\n          wrapper.style.removeProperty('transform');\n          wrapper.style.removeProperty('transition');\n        };\n\n        if (!expanded) {\n          wrapper.hidden = true;\n          wrapper.setAttribute('aria-hidden', 'true');\n          wrapper.classList.remove('is-expanded');\n          clearTransitionStyles();\n          return;\n        }\n\n        const wasHidden = wrapper.hidden;\n        wrapper.hidden = false;\n        wrapper.setAttribute('aria-hidden', 'false');\n        wrapper.classList.add('is-expanded');\n\n        if (!animate || reduceMotion || !wasHidden) {\n          clearTransitionStyles();\n          return;\n        }\n\n        wrapper.style.overflow = 'hidden';\n        wrapper.style.maxHeight = '0px';\n        wrapper.style.opacity = '0';\n        wrapper.style.transform = 'translateY(-8px)';\n        wrapper.getBoundingClientRect();\n        const targetHeight = wrapper.scrollHeight;\n        wrapper.style.transition = [\n          'max-height 360ms cubic-bezier(.22, 1, .36, 1)',\n          'opacity 260ms ease',\n          'transform 360ms cubic-bezier(.22, 1, .36, 1)',\n        ].join(', ');\n\n        wrapper.style.maxHeight = `${targetHeight}px`;\n        wrapper.style.opacity = '1';\n        wrapper.style.transform = 'translateY(0)';\n\n        const finishExpansion = (event) => {\n          if (event.propertyName !== 'max-height') return;\n          wrapper.removeEventListener('transitionend', finishExpansion);\n          clearTransitionStyles();\n        };\n        wrapper.addEventListener('transitionend', finishExpansion);\n      };\n\n      const resolveSizeMeasure = (variant, reveal = false) => {\n        const sizeGroup = root.querySelector('.mjr-pdp-option--size');\n        const selectedSize = sizeGroup?.querySelector('[data-mjr-option-value]:checked')?.value || '';\n        const normalizeSize = (value) => String(value || '').trim().toLowerCase();\n        const sizeKeys = ['size', 'talla_chile', 'chileSize', 'talla', 'talla_etiqueta', 'colombianSize'];\n        const fallback = sizeMeasures.find((row) =>\n          sizeKeys.some((key) => normalizeSize(row?.[key]) === normalizeSize(selectedSize))\n        );\n        const unitFor = (key) => sizeColumns.find((column) => column.key === key)?.unit || '';\n        const withUnit = (value, key) => {\n          if (!value) return '';\n          const unit = unitFor(key);\n          return unit && !String(value).toLowerCase().includes(unit.toLowerCase())\n            ? `${value} ${unit}`\n            : String(value);\n        };\n        const sizeColumnKeys = ['size', 'talla', 'talla_chile', 'talla_etiqueta', 'chileSize', 'colombianSize'];\n        const measurementColumns = sizeColumns.filter((column) => {\n          const key = String(column?.key || '');\n          return key && !sizeColumnKeys.includes(key) && !key.includes('compres');\n        });\n        const aliases = {\n          cintura: ['cintura', 'waist'],\n          cadera: ['cadera', 'caderas', 'hips'],\n          busto: ['busto', 'pecho', 'contorno_alto', 'bust'],\n          banda: ['banda', 'bajo_busto', 'contorno_bajo', 'band'],\n          peso: ['peso', 'peso_kg', 'weight'],\n          contorno_cuello: ['contorno_cuello', 'cuello'],\n          contorno_menton: ['contorno_menton', 'menton'],\n          contorno: ['contorno'],\n        };\n        const valueFor = (column) => {\n          const keys = aliases[column.key] || [column.key];\n          const raw = keys.map((key) => variant?.[key] || fallback?.[key]).find(Boolean);\n          return withUnit(raw, column.key);\n        };\n        const parts = measurementColumns\n          .map((column) => {\n            const value = valueFor(column);\n            return value ? `${column.label || column.key}: ${value}` : '';\n          })\n          .filter(Boolean);\n        const wrapper = root.querySelector('[data-mjr-size-measure]');\n        const copy = root.querySelector('[data-mjr-size-measure-copy]');\n        if (!wrapper || !copy) return;\n        const selectableSizeValues = sizeGroup?.querySelectorAll('[data-mjr-option-value]') || [];\n        if (!sizeGroup || selectableSizeValues.length <= 1) {\n          copy.textContent = '';\n          setSizeMeasureExpanded(wrapper, false, false);\n          return;\n        }\n        copy.textContent = parts.length\n          ? parts.join(' \u00B7 ')\n          : 'Consulta la gu\u00EDa de este modelo para confirmar sus medidas.';\n        const shouldReveal = reveal;\n        setSizeMeasureExpanded(wrapper, Boolean(parts.length || measurementColumns.length) && shouldReveal, shouldReveal);\n      };\n\n      const updateVariant = ({ revealSizeMeasure = false } = {}) => {\n        const options = selectedOptions();\n        refreshPdpOptionAvailability();\n        const variant = variants.find((item) =>\n          item.options.length === options.length && item.options.every((value, index) => value === options[index])\n        );\n\n        root.querySelectorAll('[data-mjr-option-index]').forEach((group) => {\n          const index = Number(group.dataset.mjrOptionIndex);\n          const label = root.querySelector(`[data-mjr-option-label=\"${index}\"]`);\n          if (label) label.textContent = options[index] || '';\n        });\n\n        if (!variant) {\n          if (addButton) {\n            addButton.disabled = true;\n            setAddButtonLabel('Combinaci\u00F3n no disponible');\n          }\n          if (buyNowButton) buyNowButton.disabled = true;\n          return;\n        }\n\n        if (variantInput) variantInput.value = variant.id;\n        if (price) price.textContent = moneyFormatter.format(Number(variant.price) / 100);\n        if (installmentPrice) {\n          installmentPrice.textContent = moneyFormatter.format(Number(variant.price) / 100 / installmentCount);\n        }\n        if (compare) {\n          const showCompare = Number(variant.compareAtPrice) > Number(variant.price);\n          compare.hidden = !showCompare;\n          compare.textContent = showCompare ? moneyFormatter.format(Number(variant.compareAtPrice) / 100) : '';\n        }\n        if (sku) sku.textContent = variant.sku || 'Sin SKU';\n\n        const lowStock = variant.inventoryManagement && Number(variant.inventoryQuantity) > 0 && Number(variant.inventoryQuantity) <= threshold;\n        if (inventory) {\n          inventory.hidden = !lowStock;\n          inventory.innerHTML = lowStock\n            ? Number(variant.inventoryQuantity) === 1\n              ? '\u00DAltima <strong>1</strong> unidad disponible'\n              : `\u00DAltimas <strong>${Number(variant.inventoryQuantity)}</strong> unidades disponibles`\n            : '';\n        }\n\n        if (addButton) {\n          addButton.disabled = !variant.available;\n          setAddButtonLabel(variant.available ? initialAddLabel : 'Agotado');\n        }\n        if (buyNowButton) buyNowButton.disabled = !variant.available;\n        updateDelivery(variant);\n\n        if (variant.featuredMediaId) {\n          const mediaIndex = slides.findIndex((slide) => Number(slide.dataset.mjrMedia) === Number(variant.featuredMediaId));\n          if (mediaIndex >= 0) showMedia(mediaIndex);\n        }\n\n        resolveSizeMeasure(variant, revealSizeMeasure);\n        document.dispatchEvent(new CustomEvent('variant:update', {\n          detail: { resource: variant, variant },\n        }));\n      };\n\n      root.addEventListener('change', (event) => {\n        if (event.target.matches('[data-mjr-option-value]')) {\n          updateVariant({\n            revealSizeMeasure: Boolean(event.target.closest('.mjr-pdp-option--size')),\n          });\n        }\n        if (event.target.matches('[data-mjr-delivery-region]')) {\n          const currentId = Number(variantInput?.value || 0);\n          updateDelivery(variants.find((item) => Number(item.id) === currentId));\n        }\n      });\n\n      root.addEventListener('click', (event) => {\n        const sizeValue = event.target.closest('.mjr-pdp-option--size .mjr-pdp-option__value');\n        if (sizeValue) {\n          window.setTimeout(() => updateVariant({ revealSizeMeasure: true }), 0);\n        }\n\n        const move = event.target.closest('[data-mjr-gallery-move]');\n        if (move) {\n          showMedia(activeMediaIndex + Number(move.dataset.mjrGalleryMove));\n          return;\n        }\n\n        const thumb = event.target.closest('[data-mjr-gallery-thumb]');\n        if (thumb) {\n          showMedia(Number(thumb.dataset.mjrGalleryThumb));\n          return;\n        }\n\n        const story = event.target.closest('[data-mjr-gallery-story]');\n        if (story) {\n          showMedia(Number(story.dataset.mjrGalleryStory));\n          return;\n        }\n\n        const quantityButton = event.target.closest('[data-mjr-quantity-change]');\n        if (quantityButton) {\n          const input = quantityButton.closest('[data-mjr-quantity]')?.querySelector('input[name=\"quantity\"]');\n          if (!input) return;\n          input.value = String(Math.max(Number(input.min || 1), Number(input.value || 1) + Number(quantityButton.dataset.mjrQuantityChange)));\n          input.dispatchEvent(new Event('change', { bubbles: true }));\n          return;\n        }\n\n        const zoomTrigger = event.target.closest('[data-mjr-zoom-image]');\n        if (zoomTrigger) {\n          if (zoomTrigger.dataset.mjrZoomDragged === 'true') {\n            delete zoomTrigger.dataset.mjrZoomDragged;\n            return;\n          }\n          zoomTrigger.classList.toggle('is-zoomed');\n          zoomTrigger.setAttribute('aria-pressed', String(zoomTrigger.classList.contains('is-zoomed')));\n          if (!zoomTrigger.classList.contains('is-zoomed')) {\n            zoomTrigger.style.setProperty('--mjr-zoom-x', '0px');\n            zoomTrigger.style.setProperty('--mjr-zoom-y', '0px');\n          }\n          return;\n        }\n      });\n\n      root.querySelectorAll('[data-mjr-zoom-image]').forEach((zoomTrigger) => {\n        const image = zoomTrigger.querySelector('img');\n        let dragPointerId = null;\n        let dragStartX = 0;\n        let dragStartY = 0;\n        let dragOriginX = 0;\n        let dragOriginY = 0;\n        zoomTrigger.setAttribute('aria-pressed', 'false');\n        zoomTrigger.addEventListener('pointermove', (event) => {\n          if (event.pointerId === dragPointerId && zoomTrigger.classList.contains('is-zoomed')) {\n            const nextX = Math.max(-140, Math.min(140, dragOriginX + event.clientX - dragStartX));\n            const nextY = Math.max(-140, Math.min(140, dragOriginY + event.clientY - dragStartY));\n            zoomTrigger.style.setProperty('--mjr-zoom-x', `${nextX}px`);\n            zoomTrigger.style.setProperty('--mjr-zoom-y', `${nextY}px`);\n            if (Math.abs(event.clientX - dragStartX) > 3 || Math.abs(event.clientY - dragStartY) > 3) {\n              zoomTrigger.dataset.mjrZoomDragged = 'true';\n            }\n            return;\n          }\n          if (!image || !window.matchMedia('(hover: hover) and (pointer: fine)').matches) return;\n          const rect = zoomTrigger.getBoundingClientRect();\n          image.style.transformOrigin = `${((event.clientX - rect.left) / rect.width) * 100}% ${((event.clientY - rect.top) / rect.height) * 100}%`;\n          zoomTrigger.classList.add('is-zoomed');\n        });\n        zoomTrigger.addEventListener('pointerdown', (event) => {\n          if (!zoomTrigger.classList.contains('is-zoomed')) return;\n          dragPointerId = event.pointerId;\n          dragStartX = event.clientX;\n          dragStartY = event.clientY;\n          dragOriginX = Number.parseFloat(zoomTrigger.style.getPropertyValue('--mjr-zoom-x')) || 0;\n          dragOriginY = Number.parseFloat(zoomTrigger.style.getPropertyValue('--mjr-zoom-y')) || 0;\n          zoomTrigger.setPointerCapture?.(event.pointerId);\n          zoomTrigger.classList.add('is-dragging');\n        });\n        const stopZoomDrag = (event) => {\n          if (event.pointerId !== dragPointerId) return;\n          zoomTrigger.releasePointerCapture?.(event.pointerId);\n          dragPointerId = null;\n          zoomTrigger.classList.remove('is-dragging');\n        };\n        zoomTrigger.addEventListener('pointerup', stopZoomDrag);\n        zoomTrigger.addEventListener('pointercancel', stopZoomDrag);\n        zoomTrigger.addEventListener('pointerleave', () => {\n          if (dragPointerId !== null) return;\n          if (!window.matchMedia('(hover: hover) and (pointer: fine)').matches) return;\n          zoomTrigger.classList.remove('is-zoomed');\n          zoomTrigger.setAttribute('aria-pressed', 'false');\n          zoomTrigger.style.setProperty('--mjr-zoom-x', '0px');\n          zoomTrigger.style.setProperty('--mjr-zoom-y', '0px');\n          if (image) image.style.transformOrigin = 'center center';\n        });\n      });\n\n      if (form && variants.length) updateVariant({ revealSizeMeasure: true });\n      showMedia(activeMediaIndex);\n\n      if (slides.length > 1 && !window.matchMedia('(prefers-reduced-motion: reduce)').matches) {\n        const gallery = root.querySelector('[data-mjr-gallery]') || root;\n        let galleryTimer;\n        let galleryRestartTimer;\n        let galleryIsVisible = false;\n        const stopGallery = () => {\n          window.clearInterval(galleryTimer);\n          galleryTimer = null;\n        };\n        const startGallery = () => {\n          if (!galleryIsVisible || document.hidden) return;\n          // Keep the selected color's photo visible; mixed-color galleries remain manual.\n          if (root.querySelectorAll('.mjr-pdp-option--color [data-mjr-option-value]').length > 1) return;\n          stopGallery();\n          galleryTimer = window.setInterval(() => showMedia(activeMediaIndex + 1), 5200);\n        };\n        const pauseGalleryForInteraction = () => {\n          stopGallery();\n          window.clearTimeout(galleryRestartTimer);\n          galleryRestartTimer = window.setTimeout(startGallery, 8000);\n        };\n        const swipeSurface = gallery.querySelector('.mjr-pdp-gallery__stage');\n        let swipeStartX = 0;\n        let swipeStartY = 0;\n        let swipePointerId = null;\n        swipeSurface?.addEventListener('pointerdown', (event) => {\n          if (event.pointerType !== 'touch') return;\n          swipePointerId = event.pointerId;\n          swipeStartX = event.clientX;\n          swipeStartY = event.clientY;\n          pauseGalleryForInteraction();\n        });\n        swipeSurface?.addEventListener('pointerup', (event) => {\n          if (event.pointerId !== swipePointerId) return;\n          const deltaX = event.clientX - swipeStartX;\n          const deltaY = event.clientY - swipeStartY;\n          swipePointerId = null;\n          if (Math.abs(deltaX) < 46 || Math.abs(deltaX) <= Math.abs(deltaY)) return;\n          showMedia(activeMediaIndex + (deltaX < 0 ? 1 : -1));\n        });\n        swipeSurface?.addEventListener('pointercancel', () => {\n          swipePointerId = null;\n        });\n        const galleryObserver = new IntersectionObserver((entries) => {\n          entries.forEach((entry) => {\n            galleryIsVisible = entry.isIntersecting;\n            if (galleryIsVisible) startGallery();\n            else stopGallery();\n          });\n        }, { threshold: .45 });\n        galleryObserver.observe(gallery);\n        gallery.addEventListener('pointerdown', pauseGalleryForInteraction);\n        gallery.addEventListener('focusin', stopGallery);\n        gallery.addEventListener('focusout', startGallery);\n        gallery.querySelectorAll('video').forEach((video) => {\n          video.addEventListener('play', stopGallery);\n          video.addEventListener('pause', startGallery);\n          video.addEventListener('ended', startGallery);\n        });\n        document.addEventListener('visibilitychange', () => document.hidden ? stopGallery() : startGallery());\n      }\n    });\n  };\n\n  const initializePurchaseSummary = (scope = document) => {\n    scope.querySelectorAll('[data-mjr-purchase-summary]').forEach((summary) => {\n      if (summary.dataset.mjrPurchaseSummaryBound === 'true') return;\n      summary.dataset.mjrPurchaseSummaryBound = 'true';\n\n      const hero = document.querySelector('[data-mjr-product-hero]');\n      if (!hero) return;\n\n      const summaryPrice = summary.querySelector('[data-mjr-summary-price]');\n      const summaryAdd = summary.querySelector('[data-mjr-summary-add]');\n      const summaryAddLabel = summaryAdd?.querySelector('span');\n      const summarySizes = [...summary.querySelectorAll('[data-mjr-summary-size]')];\n      const mainAdd = hero.querySelector('.mjr-pdp-form__add');\n\n      const selectedSize = () =>\n        hero.querySelector('.mjr-pdp-option--size [data-mjr-option-value]:checked')?.value || '';\n\n      const synchronize = (variant) => {\n        const size = selectedSize();\n        summarySizes.forEach((button) => {\n          const active = button.dataset.mjrSummarySize === size;\n          button.classList.toggle('is-active', active);\n          button.setAttribute('aria-pressed', String(active));\n        });\n\n        if (summaryPrice && Number.isFinite(Number(variant?.price))) {\n          summaryPrice.textContent = moneyFormatter.format(Number(variant.price) / 100);\n        } else {\n          const currentPrice = hero.querySelector('[data-mjr-product-price]')?.textContent?.trim();\n          if (summaryPrice && currentPrice) summaryPrice.textContent = currentPrice;\n        }\n\n        if (summaryAdd) {\n          const unavailable = variant?.available === false || mainAdd?.disabled;\n          summaryAdd.disabled = unavailable;\n          if (summaryAddLabel) {\n            summaryAddLabel.textContent = unavailable ? 'Agotado' : size ? 'Agregar al carrito' : 'Selecciona una talla';\n          }\n        }\n      };\n\n      summary.addEventListener('click', (event) => {\n        const sizeButton = event.target.closest('[data-mjr-summary-size]');\n        if (sizeButton && !sizeButton.disabled) {\n          const input = [...hero.querySelectorAll('.mjr-pdp-option--size [data-mjr-option-value]')]\n            .find((option) => option.value === sizeButton.dataset.mjrSummarySize);\n          if (input) {\n            input.checked = true;\n            input.dispatchEvent(new Event('change', { bubbles: true }));\n          }\n          return;\n        }\n\n        const addButton = event.target.closest('[data-mjr-summary-add]');\n        if (addButton && !addButton.disabled && mainAdd && !mainAdd.disabled) {\n          mainAdd.click();\n        }\n      });\n\n      document.addEventListener('variant:update', (event) => {\n        synchronize(event.detail?.resource || event.detail?.variant);\n      });\n      synchronize();\n    });\n  };\n\n  const initializeReveal = (scope = document) => {\n    if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;\n\n    const { scrollTarget } = getPageScrollContext();\n\n    if (!document.documentElement.classList.contains('mjr-reveal-ready')) {\n      document.documentElement.classList.add('mjr-reveal-ready');\n    }\n\n    if (!window.mjrRevealObserver) {\n      window.mjrRevealObserver = new IntersectionObserver(\n        (entries) => {\n          entries.forEach((entry) => {\n            const element = entry.target;\n            if (entry.isIntersecting) {\n              element.classList.remove('is-above-viewport');\n              element.classList.add('is-revealed');\n              window.mjrRevealObserver.unobserve(element);\n              return;\n            }\n          });\n        },\n        {\n          root: scrollTarget === window ? null : scrollTarget,\n          rootMargin: '0px 0px -8% 0px',\n          threshold: 0.08,\n        }\n      );\n    }\n\n    const selectors = [\n      '[data-mjr-reveal]',\n      '[data-mjr-root]:not(.mjr-site-header):not(.mjr-footer):not(.mjr-modal)',\n      '.mjr-category-card',\n      '.mjr-faq__list details',\n    ].join(',');\n\n    const candidates = [];\n    if (scope.matches?.(selectors)) candidates.push(scope);\n    scope.querySelectorAll?.(selectors).forEach((element) => candidates.push(element));\n    candidates.forEach((element, index) => {\n      if (element.dataset.mjrRevealBound === 'true') return;\n      element.dataset.mjrRevealBound = 'true';\n      element.dataset.mjrReveal = '';\n      if (element.matches('.mjr-category-card')) {\n        const categorySection = element.closest('.mjr-category-showcase');\n        const categoryCards = categorySection\n          ? Array.from(categorySection.querySelectorAll('.mjr-category-card'))\n          : [];\n        const categoryIndex = Math.max(0, categoryCards.indexOf(element));\n        element.dataset.mjrRevealSequence = 'category';\n        element.style.setProperty('--mjr-reveal-delay', `${categoryIndex * 120}ms`);\n      } else if (element.matches('.mjr-faq__list details')) {\n        element.style.setProperty('--mjr-reveal-delay', `${Math.min(index % 8, 5) * 70}ms`);\n      }\n      window.mjrRevealObserver.observe(element);\n    });\n  };\n\n  const initializeCardMediaRotation = (scope = document) => {\n    if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;\n\n    const mediaCards = [];\n    if (scope.matches?.('[data-mjr-merch-card]')) mediaCards.push(scope);\n    scope.querySelectorAll?.('[data-mjr-merch-card]').forEach((card) => mediaCards.push(card));\n    mediaCards.forEach((card) => {\n      if (card.dataset.mjrMediaRotationBound === 'true') return;\n      const images = [...card.querySelectorAll('[data-mjr-card-image]')];\n      const progress = [...card.querySelectorAll('[data-mjr-card-progress]')];\n      if (images.length < 2) return;\n      card.dataset.mjrMediaRotationBound = 'true';\n      card.style.setProperty('--mjr-card-story-duration', '2200ms');\n      let timer = null;\n      let activeIndex = 0;\n      let isRunning = false;\n      let secondaryMediaHydrated = false;\n\n      const hydrateSecondaryMedia = () => {\n        if (secondaryMediaHydrated) return;\n        secondaryMediaHydrated = true;\n        images.slice(1).forEach((image) => {\n          const src = image.dataset.mjrCardSrc;\n          const srcset = image.dataset.mjrCardSrcset;\n          if (srcset) image.srcset = srcset;\n          if (src) image.src = src;\n          delete image.dataset.mjrCardSrc;\n          delete image.dataset.mjrCardSrcset;\n        });\n      };\n\n      const showFrame = (nextIndex) => {\n        activeIndex = (nextIndex + images.length) % images.length;\n        images.forEach((image, index) => image.classList.toggle('is-active', index === activeIndex));\n        progress.forEach((segment, index) => {\n          segment.classList.remove('is-active');\n          segment.classList.toggle('is-complete', index < activeIndex);\n        });\n        const activeProgress = progress[activeIndex];\n        if (activeProgress) {\n          void activeProgress.offsetWidth;\n          activeProgress.classList.add('is-active');\n        }\n      };\n\n      const scheduleNext = () => {\n        window.clearTimeout(timer);\n        timer = window.setTimeout(() => {\n          showFrame(activeIndex + 1);\n          scheduleNext();\n        }, 2200);\n      };\n\n      const stop = (reset = true) => {\n        window.clearTimeout(timer);\n        timer = null;\n        isRunning = false;\n        card.classList.remove('is-story-active');\n        if (reset) showFrame(0);\n      };\n      const start = () => {\n        if (isRunning) return;\n        hydrateSecondaryMedia();\n        isRunning = true;\n        card.classList.add('is-story-active');\n        showFrame(0);\n        scheduleNext();\n      };\n      if (window.matchMedia('(hover: hover) and (pointer: fine)').matches) {\n        card.addEventListener('pointerenter', start);\n        card.addEventListener('pointerleave', stop);\n        card.addEventListener('focusin', start);\n        card.addEventListener('focusout', (event) => {\n          if (!card.contains(event.relatedTarget)) stop();\n        });\n      } else if (card.dataset.mjrCardAuto === 'true') {\n        const observer = new IntersectionObserver((entries) => {\n          entries.forEach((entry) => entry.isIntersecting ? start() : stop());\n        }, { threshold: .55 });\n        observer.observe(card);\n      }\n    });\n  };\n\n  const normalizeCollectionText = (value = '') => String(value)\n    .normalize('NFD')\n    .replace(/[\\u0300-\\u036f]/g, '')\n    .toLowerCase()\n    .replace(/[^a-z0-9]+/g, ' ')\n    .trim();\n\n  const initializeCollectionSearch = (scope = document) => {\n    scope.querySelectorAll?.('[data-mjr-collection-search-form]').forEach((form) => {\n      if (form.dataset.mjrBound === 'true') return;\n      form.dataset.mjrBound = 'true';\n      const input = form.querySelector('[data-mjr-collection-search-input]');\n      const submit = form.querySelector('[data-mjr-collection-search-submit]');\n      const status = form.parentElement?.querySelector('[data-mjr-collection-search-status]');\n      const results = form.parentElement?.querySelector('[data-mjr-collection-search-results]');\n      const resultsList = results?.querySelector('[data-mjr-collection-search-list]');\n      const collectionHandle = form.dataset.mjrCollectionHandle || '';\n      let productsPromise = null;\n      let searchTimer = 0;\n\n      const loadCollectionProducts = () => {\n        if (!collectionHandle) return Promise.resolve([]);\n        if (!productsPromise) {\n          productsPromise = fetch(`/collections/${encodeURIComponent(collectionHandle)}/products.json?limit=250`)\n            .then((response) => response.ok ? response.json() : Promise.reject(new Error('Collection search failed')))\n            .then((payload) => Array.isArray(payload.products) ? payload.products : [])\n            .catch(() => []);\n        }\n        return productsPromise;\n      };\n\n      const renderCollectionMatches = async () => {\n        const query = normalizeCollectionText(input?.value);\n        if (!query) {\n          if (results) results.hidden = true;\n          if (resultsList) resultsList.replaceChildren();\n          return;\n        }\n        const terms = query.split(' ').filter(Boolean);\n        const products = await loadCollectionProducts();\n        const matches = products.filter((product) => {\n          const haystack = normalizeCollectionText([\n            product.title,\n            product.product_type,\n            product.vendor,\n            Array.isArray(product.tags) ? product.tags.join(' ') : product.tags,\n          ].filter(Boolean).join(' '));\n          return terms.every((term) => haystack.includes(term));\n        });\n        if (status) {\n          status.textContent = `${matches.length} ${matches.length === 1 ? 'resultado en esta colecci\u00F3n' : 'resultados en esta colecci\u00F3n'}`;\n        }\n        if (!results || !resultsList) return;\n        resultsList.replaceChildren();\n        matches.slice(0, 8).forEach((product) => {\n          const item = document.createElement('li');\n          const link = document.createElement('a');\n          link.href = `/products/${product.handle}`;\n          link.textContent = product.title;\n          item.append(link);\n          resultsList.append(item);\n        });\n        results.hidden = matches.length === 0;\n      };\n\n      const filterCards = () => {\n        const query = normalizeCollectionText(input?.value);\n        const terms = query.split(' ').filter(Boolean);\n        const cards = [...document.querySelectorAll('.main-collection-grid [data-mjr-merch-card], .product-grid [data-mjr-merch-card]')];\n        let visible = 0;\n        cards.forEach((card) => {\n          const haystack = normalizeCollectionText(card.textContent);\n          const matches = terms.length === 0 || terms.every((term) => haystack.includes(term));\n          const item = card.closest('li') || card;\n          item.hidden = !matches;\n          if (matches) visible += 1;\n        });\n        if (status) {\n          status.textContent = query\n            ? `${visible} ${visible === 1 ? 'producto visible' : 'productos visibles'}`\n            : '';\n        }\n      };\n\n      submit?.addEventListener('click', () => {\n        filterCards();\n        renderCollectionMatches();\n      });\n      input?.addEventListener('input', () => {\n        filterCards();\n        window.clearTimeout(searchTimer);\n        searchTimer = window.setTimeout(renderCollectionMatches, 140);\n      });\n    });\n  };\n\n  const initializeCollectionFilters = (scope = document) => {\n    const usefulFacetOptionCount = (facet) => {\n      const options = [...facet.querySelectorAll('input[type=\"checkbox\"], input[type=\"radio\"]')];\n      return options.filter((option) => !option.disabled && option.closest('[hidden]') === null).length;\n    };\n    if (isUnifiedFilterSystemActive()) return;\n    const desktopPrimaryLimit = 3;\n    const desktopPrimaryLabels = {\n      jeans: ['talla', 'tiro', 'bota', 'bolsillo', 'push up', 'color'],\n      fajas: ['talla', 'compresion', 'zona de control', 'tipo de faja', 'uso recomendado'],\n      vestuario: ['talla', 'color', 'material', 'manga', 'silueta', 'cuello', 'marca'],\n      deportiva: ['talla', 'color', 'material', 'tipo de prenda', 'marca'],\n      default: ['categoria', 'talla', 'color', 'material', 'marca'],\n    };\n    const collectionFamily = (handle = '') => {\n      const key = normalizeCollectionText(handle);\n      if (key.includes('jean') || key.includes('denim') || key.includes('ecocuero') || key.includes('pantalon')) return 'jeans';\n      if (key.includes('faja') || key.includes('postoperator') || key.includes('post parto')) return 'fajas';\n      if (key.includes('deport') || key.includes('legging')) return 'deportiva';\n      if (key.includes('vestuario') || key.includes('blusa') || key.includes('camisa') || key.includes('vestido') || key.includes('falda') || key.includes('blazer') || key.includes('buso') || key.includes('chaqueta') || key.includes('short')) return 'vestuario';\n      return 'default';\n    };\n\n    scope.querySelectorAll?.('.facets--horizontal .facets__overflow-list').forEach((list) => {\n      const formComponent = list.closest('facets-form-component');\n      const family = collectionFamily(formComponent?.dataset.collectionHandle || window.location.pathname);\n      const primary = desktopPrimaryLabels[family] || desktopPrimaryLabels.default;\n      const items = [...list.children].filter((item) => item.matches?.('accordion-custom.facets__item'));\n      const hierarchyIsCurrent =\n        list.dataset.mjrDesktopPrimaryFilters === 'true' &&\n        items.length > 0 &&\n        items.every(\n          (item) =>\n            item.classList.contains('mjr-desktop-facet-primary') ||\n            item.classList.contains('mjr-desktop-facet-secondary')\n        );\n\n      // Shopify morphs the facet children after every AJAX filter update but\n      // can preserve the host dataset. Rebuild only when those child classes\n      // were replaced; otherwise repeated initializers stay side-effect free.\n      if (hierarchyIsCurrent) return;\n      list.dataset.mjrDesktopPrimaryFilters = 'true';\n      const ranked = items\n        .map((item, index) => ({\n          item,\n          index,\n          label: normalizeCollectionText(item.querySelector('summary')?.textContent || item.textContent),\n        }))\n        .sort((a, b) => {\n          const aRank = primary.findIndex((label) => a.label.includes(label));\n          const bRank = primary.findIndex((label) => b.label.includes(label));\n          return (aRank < 0 ? 99 : aRank) - (bRank < 0 ? 99 : bRank) || a.index - b.index;\n        });\n\n      const contextualPrimary = ranked\n        .filter(({ label }) => primary.some((preferredLabel) => label.includes(preferredLabel)))\n        .slice(0, desktopPrimaryLimit);\n      const contextualPrimaryItems = new Set(contextualPrimary.map(({ item }) => item));\n      const ordered = [\n        ...contextualPrimary,\n        ...ranked.filter(({ item }) => !contextualPrimaryItems.has(item)),\n      ];\n\n      ordered.forEach(({ item }) => {\n        list.append(item);\n        const isPrimary = contextualPrimaryItems.has(item);\n        item.classList.toggle('mjr-desktop-facet-primary', isPrimary);\n        item.classList.toggle('mjr-desktop-facet-secondary', !isPrimary);\n        if (!isPrimary) item.setAttribute('aria-hidden', 'true');\n        else item.removeAttribute('aria-hidden');\n      });\n\n      const shortcuts = items.find((item) => {\n        const details = item.querySelector('details');\n        return details?.classList.contains('mjr-facet--etiqueta-de-producto') ||\n          normalizeCollectionText(item.querySelector('summary')?.textContent).includes('atajos');\n      });\n      if (shortcuts) {\n        shortcuts.dataset.mjrFilterShortcuts = 'true';\n        const showShortcuts = usefulFacetOptionCount(shortcuts) >= 2;\n        shortcuts.hidden = !showShortcuts;\n        shortcuts.setAttribute('aria-hidden', String(!showShortcuts));\n      }\n      const secondaryCount = Math.max(0, ranked.length - contextualPrimary.length);\n      list.style.setProperty('--mjr-secondary-filter-count', String(secondaryCount));\n      const moreButton = list.shadowRoot?.querySelector('[data-mjr-facets-more]');\n      const moreCount = moreButton?.querySelector('.mjr-facets-more__count');\n      if (moreCount) moreCount.textContent = String(secondaryCount);\n      const moreSlot = list.shadowRoot?.querySelector('slot[name=\"more\"]');\n      if (moreSlot) moreSlot.hidden = true;\n\n      const explicitMoreButton = list.parentElement?.querySelector('.mjr-desktop-more-filters');\n      const explicitMoreCount = explicitMoreButton?.querySelector('[data-mjr-more-filter-count]');\n      if (explicitMoreButton) explicitMoreButton.hidden = secondaryCount === 0;\n      if (explicitMoreCount) {\n        explicitMoreCount.textContent = String(secondaryCount);\n        explicitMoreCount.hidden = secondaryCount === 0;\n      }\n      if (explicitMoreButton && !explicitMoreButton.hasAttribute('on:click') && explicitMoreButton.dataset.mjrCompleteFiltersBound !== 'true') {\n        explicitMoreButton.dataset.mjrCompleteFiltersBound = 'true';\n        explicitMoreButton.addEventListener('click', (event) => {\n          event.preventDefault();\n          openFiltersDrawer();\n        });\n      }\n    });\n\n    if (scope === document && document.documentElement.dataset.mjrFacetHierarchyObserver !== 'true') {\n      document.documentElement.dataset.mjrFacetHierarchyObserver = 'true';\n      let hierarchyFrame = 0;\n      const scheduleHierarchyRefresh = () => {\n        if (hierarchyFrame) return;\n        hierarchyFrame = window.requestAnimationFrame(() => {\n          hierarchyFrame = 0;\n          initializeCollectionFilters(document);\n        });\n      };\n      const facetHierarchyObserver = new MutationObserver((mutations) => {\n        const facetHierarchyChanged = mutations.some((mutation) => {\n          const target = mutation.target;\n          if (\n            target instanceof Element &&\n            (target.matches('.facets--horizontal .facets__overflow-list') ||\n              target.closest('.facets--horizontal .facets__overflow-list'))\n          ) {\n            return true;\n          }\n\n          return [...mutation.addedNodes].some(\n            (node) =>\n              node instanceof Element &&\n              (node.matches('.facets--horizontal .facets__overflow-list') ||\n                node.querySelector?.('.facets--horizontal .facets__overflow-list'))\n          );\n        });\n        if (facetHierarchyChanged) scheduleHierarchyRefresh();\n      });\n      facetHierarchyObserver.observe(document.body, { childList: true, subtree: true });\n    }\n\n    scope.querySelectorAll?.('#filters-drawer .facets__filters-wrapper').forEach((wrapper) => {\n      const items = [...wrapper.children].filter((item) => item.matches?.('accordion-custom.facets__item'));\n      if (!items.length) return;\n      const promotionsCollection = window.location.pathname === '/collections/promociones';\n      const rankFilter = (item) => {\n        const label = normalizeCollectionText(item.querySelector('summary')?.textContent);\n        const details = item.querySelector(':scope > details');\n        const isShortcuts =\n          details?.classList.contains('mjr-facet--etiqueta-de-producto') ||\n          label.includes('atajos');\n        const isCategory =\n          label.includes('categoria') ||\n          label.includes('tipo de producto') ||\n          Boolean(details?.querySelector('input[name=\"filter.p.product_type\"]'));\n        if (isCategory) return promotionsCollection ? 0 : 10;\n        if (isShortcuts) return promotionsCollection ? 10 : 0;\n        if (label.includes('talla')) return 20;\n        if (label.includes('color')) return 30;\n        if (label.includes('marca')) return 50;\n        if (label.includes('tela') || label.includes('material')) return 90;\n        if (label.includes('precio')) return 100;\n        return 40;\n      };\n      items\n        .map((item, index) => ({ item, index, rank: rankFilter(item) }))\n        .sort((a, b) => a.rank - b.rank || a.index - b.index)\n        .forEach(({ item }) => wrapper.append(item));\n\n      items.forEach((item) => {\n        const details = item.querySelector(':scope > details');\n        if (!details) return;\n        const label = normalizeCollectionText(item.querySelector('summary')?.textContent);\n        const isShortcuts =\n          details.classList.contains('mjr-facet--etiqueta-de-producto') ||\n          label.includes('atajos');\n        if (isShortcuts) {\n          const showShortcuts = usefulFacetOptionCount(item) >= 2;\n          item.hidden = !showShortcuts;\n          item.setAttribute('aria-hidden', String(!showShortcuts));\n        }\n        details.removeAttribute('open');\n      });\n    });\n\n    scope.querySelectorAll?.('#filters-drawer[data-mjr-collection-filters]:not([data-mjr-search-injected=\"true\"])').forEach((drawer) => {\n      if (drawer.dataset.mjrDesktopFilterBound === 'true') return;\n      drawer.dataset.mjrDesktopFilterBound = 'true';\n      const panel = drawer.querySelector('.theme-drawer__dialog');\n      const closeButton = drawer.querySelector('.theme-drawer__close-button');\n      const closeDesktopModal = () => {\n        if (!window.matchMedia('(min-width: 990px)').matches) return;\n        drawer.close?.();\n      };\n\n      // Wide screens use the same complete, semantic filter form as a centered\n      // modal. Mobile retains the familiar edge drawer.\n      closeButton?.addEventListener('click', () => {\n        document.documentElement.classList.remove('mjr-collection-filter-modal-open');\n      });\n      panel?.addEventListener('close', () => {\n        document.documentElement.classList.remove('mjr-collection-filter-modal-open');\n      });\n      drawer.addEventListener('click', (event) => {\n        if (event.target !== drawer) return;\n        closeDesktopModal();\n      });\n      drawer.addEventListener('theme-drawer:open', () => {\n        if (window.matchMedia('(min-width: 990px)').matches) {\n          document.documentElement.classList.add('mjr-collection-filter-modal-open');\n        }\n      });\n      drawer.addEventListener('theme-drawer:close', () => {\n        document.documentElement.classList.remove('mjr-collection-filter-modal-open');\n      });\n    });\n  };\n\n  const initializeStickyCollectionFilter = (scope = document) => {\n    scope.querySelectorAll?.('[data-mjr-filter-sticky]').forEach((button) => {\n      if (button.dataset.mjrStickyBound === 'true') return;\n      button.dataset.mjrStickyBound = 'true';\n      const grid = button.closest('.product-grid-container') || document.querySelector('.product-grid-container');\n      const source = grid?.querySelector('.facets-toggle') || document.querySelector('.facets-toggle');\n      if (!grid || !source) return;\n\n      let frame = 0;\n      const update = () => {\n        frame = 0;\n        if (!window.matchMedia('(max-width: 749px)').matches) {\n          button.classList.remove('is-visible');\n          return;\n        }\n        const sourceBox = source.getBoundingClientRect();\n        const gridBox = grid.getBoundingClientRect();\n        button.classList.toggle('is-visible', sourceBox.bottom < 12 && gridBox.bottom > 120);\n      };\n      const requestUpdate = () => {\n        if (frame) return;\n        frame = window.requestAnimationFrame(update);\n      };\n      window.addEventListener('scroll', requestUpdate, { passive: true });\n      window.addEventListener('resize', requestUpdate, { passive: true });\n      update();\n    });\n  };\n\n  const initializeDynamicProductCards = (scope = document) => {\n    const grids = [];\n    if (scope.matches?.('.product-grid')) grids.push(scope);\n    scope.querySelectorAll?.('.product-grid').forEach((grid) => grids.push(grid));\n\n    grids.forEach((grid) => {\n      if (grid.dataset.mjrDynamicCardsBound === 'true') return;\n      grid.dataset.mjrDynamicCardsBound = 'true';\n      const observer = new MutationObserver((mutations) => {\n        mutations.forEach((mutation) => {\n          mutation.addedNodes.forEach((node) => {\n            if (!(node instanceof Element)) return;\n            initializeCardQuickSelectors(node);\n            initializeCardMediaRotation(node);\n            syncFavoriteButtons(node);\n            initializeReveal(node);\n          });\n        });\n      });\n      observer.observe(grid, { childList: true, subtree: true });\n    });\n  };\n\n  const initializeDynamicSearchCards = (scope = document) => {\n    const searchRoots = [];\n    if (scope.matches?.('.search-modal__content')) searchRoots.push(scope);\n    scope.querySelectorAll?.('.search-modal__content').forEach((root) => searchRoots.push(root));\n\n    searchRoots.forEach((root) => {\n      if (root.dataset.mjrDynamicSearchCardsBound === 'true') return;\n      root.dataset.mjrDynamicSearchCardsBound = 'true';\n\n      const hydrateCards = (target = root) => {\n        initializeCardQuickSelectors(target);\n        initializeCardMediaRotation(target);\n        syncFavoriteButtons(target);\n        initializeReveal(target);\n      };\n\n      hydrateCards();\n      const observer = new MutationObserver((mutations) => {\n        if (!mutations.some((mutation) => mutation.addedNodes.length > 0)) return;\n        hydrateCards(root);\n      });\n      observer.observe(root, { childList: true, subtree: true });\n    });\n  };\n\n  const initializeGlobalSizeLinks = () => {\n    if (document.documentElement.dataset.mjrGlobalSizeLinksBound === 'true') return;\n    document.documentElement.dataset.mjrGlobalSizeLinksBound = 'true';\n    document.addEventListener('click', (event) => {\n      const trigger = event.target.closest('a[href$=\"#encuentra-tu-talla\"]');\n      if (!trigger || trigger.hasAttribute('data-mjr-open') || trigger.hasAttribute('data-mjr-menu-close')) return;\n      const dialog = getGlobalSizeDialog();\n      if (!dialog) return;\n      event.preventDefault();\n      openDialog(document, dialog.id, trigger);\n    });\n  };\n\n  const initializeFajaStoryGalleries = (scope = document) => {\n    scope.querySelectorAll?.('[data-mjr-faja-stories]').forEach((gallery) => {\n      if (gallery.dataset.mjrStoriesBound === 'true') return;\n      const slides = [...gallery.querySelectorAll('.mjr-faja-story-gallery__slide')];\n      const progress = [...gallery.querySelectorAll('.mjr-faja-story-gallery__progress i')];\n      if (slides.length < 2) return;\n      gallery.dataset.mjrStoriesBound = 'true';\n      let current = 0;\n      let timer = 0;\n      const show = (index) => {\n        current = (index + slides.length) % slides.length;\n        slides.forEach((slide, slideIndex) => {\n          const active = slideIndex === current;\n          slide.hidden = !active;\n          slide.classList.toggle('is-active', active);\n        });\n        progress.forEach((item, itemIndex) => {\n          item.classList.remove('is-active');\n          item.classList.toggle('is-complete', itemIndex < current);\n        });\n        // Restart the active Story progress without activating the final item early.\n        void gallery.offsetWidth;\n        progress[current]?.classList.add('is-active');\n      };\n      const stop = () => {\n        if (!timer) return;\n        window.clearInterval(timer);\n        timer = 0;\n      };\n      const start = () => {\n        if (timer || document.hidden) return;\n        timer = window.setInterval(() => show(current + 1), 3600);\n      };\n      show(0);\n      if ('IntersectionObserver' in window) {\n        const observer = new IntersectionObserver((entries) => {\n          if (entries[0]?.isIntersecting) start();\n          else stop();\n        }, { rootMargin: '160px 0px', threshold: 0.01 });\n        observer.observe(gallery);\n      } else {\n        start();\n      }\n      document.addEventListener('visibilitychange', () => {\n        if (document.hidden) stop();\n        else if (gallery.getBoundingClientRect().bottom > 0 && gallery.getBoundingClientRect().top < window.innerHeight) start();\n      });\n    });\n  };\n\n  const initializeInfinitePanelCarousels = (scope = document) => {\n    scope.querySelectorAll?.('[data-mjr-infinite-panels]').forEach((track) => {\n      if (track.dataset.mjrInfiniteBound === 'true') return;\n      const originalCards = [...track.children];\n      if (originalCards.length < 2) return;\n      track.dataset.mjrInfiniteBound = 'true';\n      originalCards.forEach((card) => {\n        const clone = card.cloneNode(true);\n        clone.setAttribute('aria-hidden', 'true');\n        clone.setAttribute('inert', '');\n        clone.removeAttribute('id');\n        clone.querySelectorAll('[id]').forEach((node) => node.removeAttribute('id'));\n        if (clone.matches('a, button, input, select, textarea, [tabindex]')) {\n          clone.setAttribute('tabindex', '-1');\n        }\n        clone.querySelectorAll('a, button, input, select, textarea, [tabindex]').forEach((node) => {\n          node.setAttribute('tabindex', '-1');\n        });\n        track.append(clone);\n      });\n      track.classList.add('is-marquee-ready');\n      if ('IntersectionObserver' in window) {\n        const observer = new IntersectionObserver((entries) => {\n          track.classList.toggle('is-mjr-in-viewport', entries[0]?.isIntersecting === true);\n        }, { rootMargin: '180px 0px', threshold: 0.01 });\n        observer.observe(track);\n      } else {\n        track.classList.add('is-mjr-in-viewport');\n      }\n    });\n  };\n\n  const initializeSectionVisibility = (scope = document) => {\n    if (!('IntersectionObserver' in window)) return;\n    const sections = [];\n    if (scope.matches?.('#MainContent > .shopify-section')) sections.push(scope);\n    scope.querySelectorAll?.('#MainContent > .shopify-section').forEach((section) => sections.push(section));\n    sections.forEach((section) => {\n      if (section.dataset.mjrVisibilityBound === 'true') return;\n      section.dataset.mjrVisibilityBound = 'true';\n      const observer = new IntersectionObserver((entries) => {\n        section.classList.toggle('is-mjr-render-active', entries[0]?.isIntersecting === true);\n      }, { rootMargin: '240px 0px', threshold: 0.001 });\n      observer.observe(section);\n    });\n  };\n\n  const initializeSearchAliases = () => {\n    if (window.location.pathname !== '/search') return;\n    const url = new URL(window.location.href);\n    const rawQuery = (url.searchParams.get('q') || '').trim().toLocaleLowerCase('es');\n    const aliases = {\n      jen: 'jeans',\n      jean: 'jeans',\n      faja: 'fajas',\n    };\n    const normalized = aliases[rawQuery];\n    if (!normalized || normalized === rawQuery) return;\n    url.searchParams.set('q', normalized);\n    window.location.replace(`${url.pathname}${url.search}${url.hash}`);\n  };\n\n  const initializeSearchModalClose = (scope = document) => {\n    scope.querySelectorAll?.('[data-mjr-search-close]').forEach((button) => {\n      if (button.dataset.mjrSearchCloseBound === 'true') return;\n      button.dataset.mjrSearchCloseBound = 'true';\n      button.addEventListener('click', (event) => {\n        event.preventDefault();\n        event.stopImmediatePropagation();\n        if (button.dataset.mjrSearchClosing === 'true') return;\n        const component = button.closest('dialog-component');\n        const dialog = component?.querySelector('dialog');\n        if (!dialog?.open) return;\n        button.dataset.mjrSearchClosing = 'true';\n        dialog.classList.add('mjr-search-closing');\n        window.setTimeout(() => {\n          dialog.classList.remove('mjr-search-closing');\n          component?.closeDialog?.();\n          delete button.dataset.mjrSearchClosing;\n        }, 260);\n      }, { capture: true });\n    });\n  };\n\n  const openFiltersDrawer = () => {\n    const drawer = document.getElementById('filters-drawer');\n    if (!drawer) return false;\n    if (typeof drawer.open === 'function') {\n      try {\n        drawer.open(window.matchMedia('(min-width: 990px)').matches ? {} : { enter: 'inline-start' });\n        return true;\n      } catch (error) {\n        try {\n          drawer.open();\n          return true;\n        } catch (_) {\n          const dialog = drawer.querySelector('dialog');\n          try {\n            if (window.matchMedia('(min-width: 990px)').matches) {\n              dialog?.show();\n            } else {\n              dialog?.showModal();\n            }\n          } catch (_) {\n            drawer.setAttribute('open', '');\n          }\n          return true;\n        }\n      }\n    }\n    const dialog = drawer.querySelector('dialog');\n    if (dialog?.showModal) {\n      dialog.showModal();\n      return true;\n    }\n    return false;\n  };\n\n  const openSearchFiltersDrawer = () => {\n    return openFiltersDrawer();\n  };\n\n  // Keep the collection drawer server-rendered so native filter initialization remains intact.\n\nconst initializeFilterDrawerFallback = (scope = document) => {\n    if (isUnifiedFilterSystemActive()) return;\n    const selector = '[data-mjr-open-complete-filters], .mjr-desktop-more-filters, .facets-toggle__button[aria-controls=\"filters-drawer\"], [on\\\\:click=\"#filters-drawer/open\"]';\n    const buttons = [\n      ...(scope && scope.matches?.(selector) ? [scope] : []),\n      ...(scope.querySelectorAll?.(selector) || []),\n    ];\n\n    buttons.forEach((button) => {\n      if (button.dataset.mjrFilterDrawerTriggerBound === 'true') return;\n      button.dataset.mjrFilterDrawerTriggerBound = 'true';\n      button.addEventListener('click', (event) => {\n        if (button.dataset.mjrFilterDrawerOpening === 'true') return;\n        event.preventDefault();\n        event.stopImmediatePropagation();\n\n        button.dataset.mjrFilterDrawerOpening = 'true';\n        const attempt = () => {\n          const opened = openFiltersDrawer();\n          if (!opened && window.customElements && typeof window.customElements.whenDefined === 'function') {\n            window.customElements.whenDefined('theme-drawer').then(openFiltersDrawer);\n            return;\n          }\n\n          if (!opened) {\n            const drawer = document.getElementById('filters-drawer');\n            if (!drawer) return;\n            const dialog = drawer.querySelector('dialog');\n            if (window.matchMedia('(max-width: 749px)').matches && dialog?.showModal) {\n              dialog.showModal();\n            } else if (!drawer.hasAttribute('open')) {\n              drawer.setAttribute('open', '');\n            }\n          }\n        };\n\n        if (window.customElements && typeof window.customElements.whenDefined === 'function') {\n          window.customElements.whenDefined('theme-drawer').then(attempt);\n        } else {\n          attempt();\n        }\n\n        window.setTimeout(() => {\n          delete button.dataset.mjrFilterDrawerOpening;\n        }, 600);\n      });\n    });\n  };\n\n  const createSearchFilterTarget = (drawer, query = '') => {\n    const form = drawer?.querySelector('form.facets__form');\n    const action = new URL(form?.getAttribute('action') || '/search', window.location.origin);\n    const parameters = form ? new URLSearchParams(new FormData(form)) : new URLSearchParams();\n\n    if (action.pathname === '/search') {\n      parameters.set('q', query);\n      parameters.set('options[prefix]', 'last');\n    }\n\n    action.search = parameters.toString();\n    return `${action.pathname}${action.search}`;\n  };\n\n  const bindInjectedSearchFilterDrawer = (drawer, query) => {\n    if (!drawer || drawer.dataset.mjrSearchFilterDrawerBound === 'true') return;\n    drawer.dataset.mjrSearchFilterDrawerBound = 'true';\n\n    // The drawer comes from the real search results page so its visual system\n    // stays identical. Its section-rendering actions are removed because that\n    // section does not exist behind the predictive-search modal.\n    drawer.querySelectorAll('*').forEach((element) => {\n      [...element.attributes].forEach((attribute) => {\n        if (\n          attribute.name.startsWith('on:')\n          && !element.matches('.theme-drawer__close-button')\n        ) element.removeAttribute(attribute.name);\n      });\n    });\n\n    const form = drawer.querySelector('form.facets__form');\n    const seeResults = drawer.querySelector('.facets__see-results');\n    const clearButton = drawer.querySelector('.facets__clear-all');\n    const closeButton = drawer.querySelector('.theme-drawer__close-button');\n    let target = createSearchFilterTarget(drawer, query);\n    let countRequest = 0;\n\n    // On desktop this contextual filter is presented as a centered dialog.\n    // Clicking its dimmed surround closes it just like a native modal, while\n    // mobile keeps the established edge drawer interaction.\n    drawer.addEventListener('click', (event) => {\n      if (event.target !== drawer || !window.matchMedia('(min-width: 990px)').matches) return;\n      drawer.close?.();\n    });\n\n    const restorePredictiveSearch = () => {\n      const searchComponent = document.getElementById('search-modal');\n      const searchDialog = searchComponent?.querySelector('dialog');\n      if (!searchDialog || searchDialog.open) return;\n      if (typeof searchComponent?.showDialog === 'function') searchComponent.showDialog();\n      else searchDialog.showModal?.();\n    };\n\n    const refreshTarget = async () => {\n      if (panel.dataset.mjrSearchFilterUnified === 'true') return;\n      target = createSearchFilterTarget(drawer, query);\n      const requestId = ++countRequest;\n      if (!seeResults) return;\n\n      try {\n        const response = await window.fetch(target, {\n          headers: { 'X-Requested-With': 'XMLHttpRequest' },\n        });\n        if (!response.ok || requestId !== countRequest) return;\n        const html = await response.text();\n        if (requestId !== countRequest) return;\n        const nextDocument = new DOMParser().parseFromString(html, 'text/html');\n        const nextLabel = nextDocument.querySelector('#filters-drawer .facets__see-results')?.textContent?.trim();\n        if (nextLabel) seeResults.textContent = nextLabel;\n      } catch (error) {\n        console.warn('No fue posible actualizar el conteo de filtros.', error);\n      }\n    };\n\n    form?.addEventListener('change', (event) => {\n      event.stopImmediatePropagation();\n      refreshTarget();\n    }, { capture: true });\n\n    closeButton?.addEventListener('click', (event) => {\n      event.preventDefault();\n      event.stopImmediatePropagation();\n      drawer.close?.();\n      // The native drawer removes its top-layer state after its exit motion.\n      // Restore the preserved predictive search immediately afterwards instead\n      // of leaving the customer looking at the page behind both overlays.\n      window.setTimeout(restorePredictiveSearch, 280);\n      window.setTimeout(restorePredictiveSearch, 520);\n    }, { capture: true });\n\n    const panel = drawer.querySelector('.theme-drawer__dialog');\n    panel?.addEventListener('close', restorePredictiveSearch);\n    panel?.addEventListener('transitionend', () => {\n      if (!drawer.hasAttribute('open')) restorePredictiveSearch();\n    });\n    new MutationObserver(() => {\n      if (!drawer.hasAttribute('open')) restorePredictiveSearch();\n    }).observe(drawer, { attributes: true, attributeFilter: ['open'] });\n\n    clearButton?.addEventListener('click', (event) => {\n      event.preventDefault();\n      event.stopImmediatePropagation();\n      form?.querySelectorAll('input[type=\"checkbox\"], input[type=\"radio\"]').forEach((input) => {\n        input.checked = false;\n      });\n      form?.querySelectorAll('input[type=\"number\"]').forEach((input) => {\n        input.value = '';\n      });\n      refreshTarget();\n    }, { capture: true });\n\n    seeResults?.addEventListener('click', (event) => {\n      event.preventDefault();\n      event.stopImmediatePropagation();\n      window.location.assign(target);\n    }, { capture: true });\n\n  };\n\n  const loadSearchFiltersDrawer = async (query = '') => {\n    const contextualDrawer = document.getElementById('filters-drawer');\n    if (contextualDrawer && contextualDrawer.dataset.mjrSearchInjected !== 'true') return contextualDrawer;\n\n    if (contextualDrawer?.dataset.mjrSearchQuery === query) return contextualDrawer;\n    contextualDrawer?.remove();\n\n    const source = new URL('/search', window.location.origin);\n    source.searchParams.set('q', query);\n    source.searchParams.set('options[prefix]', 'last');\n    const response = await window.fetch(`${source.pathname}${source.search}`, {\n      credentials: 'same-origin',\n    });\n    if (!response.ok) throw new Error(`No se pudieron cargar los filtros (${response.status}).`);\n\n    const html = await response.text();\n    let nextDocument = new DOMParser().parseFromString(html, 'text/html');\n    let sourceDrawer = nextDocument.getElementById('filters-drawer');\n    if (!sourceDrawer) {\n      const fallbackResponse = await window.fetch('/collections/promociones?view=promociones', {\n        credentials: 'same-origin',\n      });\n      if (!fallbackResponse.ok) throw new Error(`No se pudieron cargar los filtros globales (${fallbackResponse.status}).`);\n      nextDocument = new DOMParser().parseFromString(await fallbackResponse.text(), 'text/html');\n      sourceDrawer = nextDocument.getElementById('filters-drawer');\n    }\n    if (!sourceDrawer) throw new Error('La b\u00FAsqueda no devolvi\u00F3 el drawer global de filtros.');\n\n    const drawer = document.importNode(sourceDrawer, true);\n    drawer.dataset.mjrSearchInjected = 'true';\n    drawer.dataset.mjrSearchQuery = query;\n    bindInjectedSearchFilterDrawer(drawer, query);\n    document.body.append(drawer);\n    initializeCollectionFilters(drawer);\n    return drawer;\n  };\n\n  const createSearchFilterPanelTarget = (panel, query = '') => {\n    const form = panel?.querySelector('form');\n    const target = new URL(form?.getAttribute('action') || '/search', window.location.origin);\n    const parameters = form ? new URLSearchParams(new FormData(form)) : new URLSearchParams();\n    parameters.set('q', query);\n    parameters.set('options[prefix]', 'last');\n    target.search = parameters.toString();\n    return `${target.pathname}${target.search}`;\n  };\n\n  const rewriteSearchFilterIds = (scope) => {\n    const idMap = new Map();\n    scope.querySelectorAll('[id]').forEach((element, index) => {\n      const oldId = element.id;\n      const newId = `mjr-search-filter-${index}-${oldId}`;\n      idMap.set(oldId, newId);\n      element.id = newId;\n    });\n    scope.querySelectorAll('[for], [aria-controls], [aria-labelledby]').forEach((element) => {\n      ['for', 'aria-controls', 'aria-labelledby'].forEach((attribute) => {\n        const current = element.getAttribute(attribute);\n        if (!current) return;\n        element.setAttribute(attribute, current.split(' ').map((value) => idMap.get(value) || value).join(' '));\n      });\n    });\n  };\n\n  const closeSearchFilterPanel = (panel) => {\n    if (!panel || panel.hidden || panel.classList.contains('is-closing')) return;\n    panel.classList.add('is-closing');\n    panel.classList.remove('is-open');\n    const searchDialog = panel.closest('dialog');\n    searchDialog?.classList.remove('mjr-search-filter-open');\n    const search = searchDialog?.querySelector(':scope > predictive-search-component');\n    if (search) {\n      search.inert = false;\n      search.removeAttribute('aria-hidden');\n    }\n    \n    window.setTimeout(() => {\n      panel.hidden = true;\n      panel.classList.remove('is-closing');\n    }, 240);\n  };\n\n  const bindSearchFilterPanel = (panel, query) => {\n    if (!panel || panel.dataset.mjrSearchFilterPanelBound === 'true') return;\n    panel.dataset.mjrSearchFilterPanelBound = 'true';\n    const form = panel.querySelector('form');\n    const applyButton = panel.querySelector('[data-mjr-search-filter-apply]');\n    const clearButton = panel.querySelector('[data-mjr-search-filter-clear]');\n    const countLabel = panel.querySelector('[data-mjr-search-filter-count]');\n    let target = createSearchFilterPanelTarget(panel, query);\n    let countRequest = 0;\n\n    const refreshTarget = async () => {\n      if (panel.dataset.mjrSearchFilterUnified === 'true') return;\n      target = createSearchFilterPanelTarget(panel, query);\n      const requestId = ++countRequest;\n      try {\n        const response = await window.fetch(target, { headers: { 'X-Requested-With': 'XMLHttpRequest' } });\n        if (!response.ok || requestId !== countRequest) return;\n        const html = await response.text();\n        if (requestId !== countRequest) return;\n        const nextDocument = new DOMParser().parseFromString(html, 'text/html');\n        const nextLabel = nextDocument.querySelector('#filters-drawer .facets__see-results')?.textContent?.trim();\n        if (nextLabel && countLabel) countLabel.textContent = nextLabel;\n      } catch (error) {\n        console.warn('No fue posible actualizar el conteo de filtros.', error);\n      }\n    };\n\n    panel.querySelectorAll('[data-mjr-search-filter-close]').forEach((button) => {\n      button.addEventListener('click', (event) => {\n        event.preventDefault();\n        event.stopPropagation();\n        closeSearchFilterPanel(panel);\n      });\n    });\n    panel.addEventListener('click', (event) => {\n      if (event.target === panel) closeSearchFilterPanel(panel);\n    });\n    panel.addEventListener('toggle', (event) => {\n      const opened = event.target;\n      if (!(opened instanceof HTMLDetailsElement) || !opened.open) return;\n      panel.querySelectorAll('details[open]').forEach((details) => {\n        if (details !== opened) details.removeAttribute('open');\n      });\n    }, true);\n    form?.addEventListener('change', (event) => {\n      event.stopImmediatePropagation();\n      refreshTarget();\n    }, { capture: true });\n    clearButton?.addEventListener('click', (event) => {\n      event.preventDefault();\n      form?.querySelectorAll('input[type=\"checkbox\"], input[type=\"radio\"]').forEach((input) => {\n        input.checked = false;\n      });\n      form?.querySelectorAll('input[type=\"number\"]').forEach((input) => {\n        input.value = '';\n      });\n      refreshTarget();\n    });\n    applyButton?.addEventListener('click', (event) => {\n      event.preventDefault();\n      window.location.assign(target);\n    });\n    panel.ownerDocument.addEventListener('keydown', (event) => {\n      if (event.key !== 'Escape' || panel.hidden) return;\n      event.preventDefault();\n      event.stopImmediatePropagation();\n      closeSearchFilterPanel(panel);\n    }, { capture: true });\n  };\n\n  const loadSearchFilterPanel = async (searchDialog, query = '') => {\n    let panel = searchDialog?.querySelector('[data-mjr-search-filter-panel]');\n    if (panel?.dataset.mjrSearchQuery === query) {\n      panel.hidden = false;\n      searchDialog.classList.add('mjr-search-filter-open');\n      window.requestAnimationFrame(() => panel.classList.add('is-open'));\n      return panel;\n    }\n    panel?.remove();\n\n    const source = new URL('/search', window.location.origin);\n    source.searchParams.set('q', query);\n    source.searchParams.set('options[prefix]', 'last');\n    const response = await window.fetch(`${source.pathname}${source.search}`, {\n      headers: { 'X-Requested-With': 'XMLHttpRequest' },\n    });\n    if (!response.ok) throw new Error(`No se pudieron cargar los filtros (${response.status}).`);\n    const html = await response.text();\n    let nextDocument = new DOMParser().parseFromString(html, 'text/html');\n    let sourceDrawer = nextDocument.getElementById('filters-drawer');\n    let sourceFilters = sourceDrawer?.querySelector('form.facets__form .facets__filters-wrapper')\n      || sourceDrawer?.querySelector('.facets__filters-wrapper')\n      || nextDocument.querySelector('form.facets__form .facets__filters-wrapper');\n    if (!sourceFilters) {\n      const fallbackResponse = await window.fetch('/collections/promociones?view=promociones', {\n        headers: { 'X-Requested-With': 'XMLHttpRequest' },\n      });\n      if (!fallbackResponse.ok) throw new Error(`No se pudieron cargar los filtros globales (${fallbackResponse.status}).`);\n      nextDocument = new DOMParser().parseFromString(await fallbackResponse.text(), 'text/html');\n      sourceDrawer = nextDocument.getElementById('filters-drawer');\n      sourceFilters = sourceDrawer?.querySelector('form.facets__form .facets__filters-wrapper')\n        || sourceDrawer?.querySelector('.facets__filters-wrapper')\n        || nextDocument.querySelector('form.facets__form .facets__filters-wrapper');\n    }\n    if (!sourceFilters || !searchDialog) throw new Error('La b\u00FAsqueda no devolvi\u00F3 filtros utilizables.');\n\n    panel = document.createElement('section');\n    panel.className = 'mjr-search-filter-panel';\n    panel.dataset.mjrSearchFilterPanel = '';\n    panel.dataset.mjrSearchQuery = query;\n    panel.hidden = true;\n    panel.setAttribute('aria-label', 'Filtrar resultados de b\u00FAsqueda');\n\n    const surface = document.createElement('div');\n    surface.className = 'mjr-search-filter-panel__surface';\n    surface.innerHTML = `\n      <header class=\"mjr-search-filter-panel__header\">\n        <div><p>AFINA TU B\u00DASQUEDA</p><h2>Filtra tus resultados</h2></div>\n        <button type=\"button\" class=\"mjr-search-filter-panel__close\" data-mjr-search-filter-close aria-label=\"Cerrar filtros\"><span aria-hidden=\"true\">\u00D7</span></button>\n      </header>\n    `;\n\n    const form = document.createElement('form');\n    form.className = 'mjr-search-filter-panel__form';\n    form.action = '/search';\n    form.method = 'get';\n    const queryInput = document.createElement('input');\n    queryInput.type = 'hidden';\n    queryInput.name = 'q';\n    queryInput.value = query;\n    const prefixInput = document.createElement('input');\n    prefixInput.type = 'hidden';\n    prefixInput.name = 'options[prefix]';\n    prefixInput.value = 'last';\n    const filters = document.importNode(sourceFilters, true);\n    filters.querySelectorAll('details[open]').forEach((details) => {\n      details.open = false;\n      details.removeAttribute('open');\n    });\n    filters.querySelectorAll('accordion-custom').forEach((accordion) => {\n      accordion.removeAttribute('open');\n      accordion.removeAttribute('open-by-default-on-desktop');\n      accordion.removeAttribute('open-by-default-on-mobile');\n      accordion.style.removeProperty('--mjr-search-filter-order');\n    });\n\n    filters.querySelectorAll('*').forEach((element) => {\n      [...element.attributes].forEach((attribute) => {\n        if (attribute.name.startsWith('on:')) element.removeAttribute(attribute.name);\n      });\n    });\n    rewriteSearchFilterIds(filters);\n    form.append(queryInput, prefixInput, filters);\n\n    const footer = document.createElement('footer');\n    footer.className = 'mjr-search-filter-panel__footer';\n    const clear = document.createElement('button');\n    clear.type = 'button';\n    clear.className = 'mjr-search-filter-panel__clear cart-items__remove';\n    clear.dataset.mjrSearchFilterClear = '';\n    clear.setAttribute('aria-label', 'Limpiar filtros');\n    clear.title = 'Limpiar filtros';\n    clear.innerHTML = `\n      <svg aria-hidden=\"true\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path class=\"remove-icon-bottom\" d=\"M11.5 9v4.25M8.5 9v4.25M5.75 12.2V6h8.5c0 2.421 0 3.779 0 6.2 0 .853 0 1.447-.038 1.91-.037.453-.106.714-.207.911a2.498 2.498 0 0 1-.983 1.017c-.197.1-.458.17-.911.207-.463.037-1.057.038-1.91.038h-.4c-.853 0-1.447 0-1.91-.038-.453-.037-.714-.106-.911-.207a2.498 2.498 0 0 1-.984-1.017c-.1-.197-.17-.458-.207-.911C5.75 13.647 5.75 13.053 5.75 12.2z\" stroke=\"currentColor\" stroke-width=\"var(--icon-stroke-width)\" stroke-linecap=\"round\"/>\n        <path class=\"remove-icon-top\" d=\"M4.25 6h11.5M8 5.25a2 2 0 1 1 4 0\" stroke=\"currentColor\" stroke-width=\"var(--icon-stroke-width)\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n      </svg>\n      <span class=\"visually-hidden\">Limpiar filtros</span>`;\n    const apply = document.createElement('button');\n    apply.type = 'button';\n    apply.className = 'mjr-search-filter-panel__apply';\n    apply.dataset.mjrSearchFilterApply = '';\n    const count = document.createElement('span');\n    count.dataset.mjrSearchFilterCount = '';\n    count.textContent = sourceDrawer.querySelector('.facets__see-results')?.textContent?.trim() || 'Ver resultados';\n    apply.append(count);\n    footer.append(clear, apply);\n    surface.append(form, footer);\n    panel.append(surface);\n    searchDialog.append(panel);\n    bindSearchFilterPanel(panel, query);\n    panel.hidden = false;\n    searchDialog.classList.add('mjr-search-filter-open');\n    window.requestAnimationFrame(() => panel.classList.add('is-open'));\n    return panel;\n  };\n\n  const initializeSearchFilterBridge = (scope = document) => {\n    const currentUrl = new URL(window.location.href);\n    const shouldOpenOnLoad = window.location.pathname === '/search'\n      && currentUrl.searchParams.get('mjr_open_filters') === '1';\n\n    if (shouldOpenOnLoad && document.documentElement.dataset.mjrSearchFilterRequested !== 'true') {\n      document.documentElement.dataset.mjrSearchFilterRequested = 'true';\n      currentUrl.searchParams.delete('mjr_open_filters');\n      window.history.replaceState(window.history.state, '', `${currentUrl.pathname}${currentUrl.search}${currentUrl.hash}`);\n\n      let attempts = 0;\n      const openWhenReady = () => {\n        if (openSearchFiltersDrawer()) return;\n        attempts += 1;\n        if (attempts < 40) window.setTimeout(openWhenReady, 75);\n      };\n      window.customElements.whenDefined('theme-drawer').then(openWhenReady);\n    }\n\n    scope.querySelectorAll?.('[data-mjr-search-filter]').forEach((button) => {\n      if (button.dataset.mjrSearchFilterBound === 'true') return;\n      button.dataset.mjrSearchFilterBound = 'true';\n      button.addEventListener('click', async (event) => {\n        event.preventDefault();\n        event.stopImmediatePropagation();\n\n        const form = button.closest('form.predictive-search-form');\n        const query = String(form?.querySelector('[name=\"q\"]')?.value || '').trim();\n        if (button.dataset.mjrSearchFilterLoading === 'true') return;\n\n        button.dataset.mjrSearchFilterLoading = 'true';\n        button.setAttribute('aria-busy', 'true');\n        try {\n          const searchComponent = button.closest('dialog-component');\n          const searchDialog = searchComponent?.querySelector('dialog');\n          await loadSearchFilterPanel(searchDialog, query);\n        } catch (error) {\n          console.error('No fue posible abrir los filtros desde el buscador.', error);\n        } finally {\n          delete button.dataset.mjrSearchFilterLoading;\n          button.removeAttribute('aria-busy');\n        }\n      }, { capture: true });\n    });\n  };\n\n  const initializeCollectionSeoDescription = (scope = document) => {\n    scope.querySelectorAll?.('[data-mjr-seo-toggle]').forEach((button) => {\n      if (button.dataset.mjrSeoBound === 'true') return;\n      button.dataset.mjrSeoBound = 'true';\n      const copy = button.closest('.mjr-collection-seo-description__inner')?.querySelector('[data-mjr-seo-copy]');\n      const label = button.querySelector('span');\n      if (!copy || !label) return;\n      const updateOverflow = () => {\n        if (button.getAttribute('aria-expanded') === 'true') return;\n        button.hidden = copy.scrollHeight <= copy.clientHeight + 2;\n      };\n      const overflowObserver = new ResizeObserver(() => {\n        if (!copy.isConnected) { overflowObserver.disconnect(); return; }\n        updateOverflow();\n      });\n      overflowObserver.observe(copy);\n      document.fonts?.ready.then(updateOverflow);\n      updateOverflow();\n      button.addEventListener('click', () => {\n        const expanded = button.getAttribute('aria-expanded') === 'true';\n        const anchorTop = button.getBoundingClientRect().top;\n        const scrollTop = window.scrollY;\n        button.setAttribute('aria-expanded', String(!expanded));\n        copy.classList.toggle('is-expanded', !expanded);\n        label.textContent = expanded ? 'Leer m\u00E1s' : 'Leer menos';\n        if (expanded) {\n          window.requestAnimationFrame(() => {\n            const delta = button.getBoundingClientRect().top - anchorTop;\n            window.scrollTo({ top: Math.max(0, scrollTop + delta), behavior: 'instant' });\n            updateOverflow();\n          });\n        }\n      });\n    });\n  };\n\n  const initializeCatalogHeaderDescriptions = (scope = document) => {\n    scope.querySelectorAll?.('[data-mjr-catalog-description]').forEach((copy) => {\n      if (copy.dataset.mjrCatalogDescriptionBound === 'true') return;\n      copy.dataset.mjrCatalogDescriptionBound = 'true';\n      const button = copy.parentElement?.querySelector('[data-mjr-catalog-description-toggle]');\n      const label = button?.querySelector('span');\n      if (!button || !label) return;\n      const updateOverflow = () => {\n        if (button.getAttribute('aria-expanded') === 'true') return;\n        button.hidden = copy.scrollHeight <= copy.clientHeight + 2;\n      };\n      const observer = new ResizeObserver(updateOverflow);\n      observer.observe(copy);\n      document.fonts?.ready.then(updateOverflow);\n      updateOverflow();\n      button.addEventListener('click', () => {\n        const expanded = button.getAttribute('aria-expanded') === 'true';\n        const anchorTop = button.getBoundingClientRect().top;\n        const scrollTop = window.scrollY;\n        button.setAttribute('aria-expanded', String(!expanded));\n        copy.classList.toggle('is-expanded', !expanded);\n        label.textContent = expanded ? 'Leer m\u00E1s' : 'Leer menos';\n        if (expanded) {\n          window.requestAnimationFrame(() => {\n            const delta = button.getBoundingClientRect().top - anchorTop;\n            window.scrollTo({ top: Math.max(0, scrollTop + delta), behavior: 'instant' });\n            updateOverflow();\n          });\n        }\n      });\n    });\n  };\n\n  const initializeCollectionFacetView = () => {\n    const params = new URLSearchParams(window.location.search);\n    const hasEditorialFacet = [...params.keys()].some((key) =>\n      key === 'filter.p.m.custom.manga'\n      || key === 'filter.p.m.custom.cuello'\n      || key === 'filter.p.m.custom.silueta'\n      || key === 'filter.p.m.custom.material'\n    );\n    document.body.classList.toggle('mjr-collection-facet-active', hasEditorialFacet);\n  };\n\n  const initializeRecentSearches = (scope = document) => {\n    const storageKey = 'mjr-recent-searches';\n    const read = () => {\n      try { return JSON.parse(window.localStorage.getItem(storageKey) || '[]').filter(Boolean).slice(0, 6); }\n      catch { return []; }\n    };\n    const write = (items) => {\n      try { window.localStorage.setItem(storageKey, JSON.stringify(items.slice(0, 6))); }\n      catch { /* localStorage puede estar bloqueado en modo privado */ }\n    };\n    const remember = (term) => {\n      const clean = String(term || '').trim();\n      if (!clean) return;\n      write([clean, ...read().filter((item) => item.toLocaleLowerCase('es') !== clean.toLocaleLowerCase('es'))]);\n    };\n\n    if (window.location.pathname === '/search') {\n      remember(new URLSearchParams(window.location.search).get('q'));\n    }\n\n    const searchForms = [\n      ...(scope.matches?.('form.predictive-search-form') ? [scope] : []),\n      ...(scope.querySelectorAll?.('form.predictive-search-form') || [])\n    ];\n    searchForms.forEach((form) => {\n      if (form.dataset.mjrRecentFormBound === 'true') return;\n      form.dataset.mjrRecentFormBound = 'true';\n      form.addEventListener('submit', () => remember(new FormData(form).get('q')));\n    });\n\n    const recentSections = [\n      ...(scope.matches?.('[data-mjr-recent-searches]') ? [scope] : []),\n      ...(scope.querySelectorAll?.('[data-mjr-recent-searches]') || [])\n    ];\n    recentSections.forEach((section) => {\n      if (section.dataset.mjrRecentBound === 'true') return;\n      section.dataset.mjrRecentBound = 'true';\n      const list = section.querySelector('[data-mjr-recent-list]');\n      const clear = section.querySelector('[data-mjr-recent-clear]');\n      if (!list || !clear) return;\n      const render = () => {\n        const items = read();\n        section.hidden = items.length === 0;\n        list.replaceChildren(...items.map((term) => {\n          const link = document.createElement('a');\n          link.href = `/search?q=${encodeURIComponent(term)}`;\n          link.textContent = term;\n          return link;\n        }));\n      };\n      clear.addEventListener('click', () => { write([]); render(); });\n      render();\n    });\n\n    if (scope === document && document.documentElement.dataset.mjrRecentObserverBound !== 'true') {\n      document.documentElement.dataset.mjrRecentObserverBound = 'true';\n      document.addEventListener('submit', (event) => {\n        const form = event.target.closest?.('form.predictive-search-form');\n        if (form) remember(new FormData(form).get('q'));\n      }, true);\n      new MutationObserver((mutations) => {\n        mutations.forEach((mutation) => {\n          mutation.addedNodes.forEach((node) => {\n            if (node.nodeType === 1) initializeRecentSearches(node);\n          });\n        });\n      }).observe(document.body, { childList: true, subtree: true });\n    }\n  };\n\n  const initializeDetailsDescriptions = (scope = document) => {\n    scope.querySelectorAll?.('[data-mjr-details-more]').forEach((button) => {\n      if (button.dataset.mjrBound === 'true') return;\n      button.dataset.mjrBound = 'true';\n      const content = button.previousElementSibling;\n      if (!content?.matches('[data-mjr-details-description]')) return;\n      const updateOverflow = () => {\n        if (button.getAttribute('aria-expanded') === 'true') return;\n        button.hidden = content.scrollHeight <= content.clientHeight + 2;\n      };\n      const observer = new ResizeObserver(updateOverflow);\n      observer.observe(content);\n      document.fonts?.ready.then(updateOverflow);\n      updateOverflow();\n      button.addEventListener('click', () => {\n        const expanded = button.getAttribute('aria-expanded') === 'true';\n        const anchorTop = button.getBoundingClientRect().top;\n        const scrollTop = window.scrollY;\n        button.setAttribute('aria-expanded', String(!expanded));\n        content.classList.toggle('is-collapsed', expanded);\n        const label = button.querySelector('span');\n        if (label) label.textContent = expanded ? 'Leer m\u00E1s' : 'Leer menos';\n        if (expanded) {\n          window.requestAnimationFrame(() => {\n            const delta = button.getBoundingClientRect().top - anchorTop;\n            window.scrollTo({ top: Math.max(0, scrollTop + delta), behavior: 'instant' });\n            updateOverflow();\n          });\n        }\n      });\n    });\n  };\n\n  const initializeFilterTrashAnimation = () => {\n    if (document.documentElement.dataset.mjrFilterTrashAnimationBound === 'true') return;\n    document.documentElement.dataset.mjrFilterTrashAnimationBound = 'true';\n\n    document.addEventListener('click', (event) => {\n      const button = event.target.closest?.(\n        '#filters-drawer .mjr-filter-trash-action, .mjr-search-filter-panel__clear'\n      );\n      if (!button) return;\n      if (button.dataset.mjrFilterTrashReplay === 'true') {\n        delete button.dataset.mjrFilterTrashReplay;\n        return;\n      }\n      if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;\n\n      event.preventDefault();\n      event.stopImmediatePropagation();\n\n      const animationHost = button.closest('facet-remove-component, facet-clear-component') || button;\n      animationHost.classList.remove('removing');\n      button.classList.remove('mjr-filter-trash-action--animating');\n      void button.offsetWidth;\n      animationHost.classList.add('removing');\n      button.classList.add('mjr-filter-trash-action--animating');\n\n      window.setTimeout(() => {\n        animationHost.classList.remove('removing');\n        button.classList.remove('mjr-filter-trash-action--animating');\n      }, 260);\n\n      window.setTimeout(() => {\n        if (!button.isConnected) return;\n        button.dataset.mjrFilterTrashReplay = 'true';\n        button.click();\n      }, 210);\n    }, { capture: true });\n  };\n\n  const initializeDesktopMenuTriggers = (scope = document) => {\n    const triggers = scope.querySelectorAll?.('[data-mjr-desktop-menu-trigger]') || [];\n    const closeItem = (item, { restoreFocus = false } = {}) => {\n      if (!item) return;\n      const itemTrigger = item.querySelector('[data-mjr-desktop-menu-trigger]');\n      item.classList.remove('is-menu-open');\n      itemTrigger?.setAttribute('aria-expanded', 'false');\n      if (restoreFocus) itemTrigger?.focus({ preventScroll: true });\n      else itemTrigger?.blur();\n    };\n\n    triggers.forEach((trigger) => {\n      if (trigger.dataset.mjrDesktopMenuBound === 'true') return;\n      trigger.dataset.mjrDesktopMenuBound = 'true';\n      const item = trigger.closest('.mjr-header__nav-item--has-dropdown');\n      if (!item) return;\n\n      item.addEventListener('pointerenter', () => {\n        document.querySelectorAll('.mjr-header__nav-item.is-menu-open').forEach((openItem) => {\n          if (openItem !== item) closeItem(openItem);\n        });\n      });\n      item.addEventListener('pointerleave', () => closeItem(item));\n      item.addEventListener('focusout', (event) => {\n        if (!item.contains(event.relatedTarget)) closeItem(item);\n      });\n\n      trigger.addEventListener('click', (event) => {\n        event.preventDefault();\n        const willOpen = !item.classList.contains('is-menu-open');\n        document.querySelectorAll('.mjr-header__nav-item.is-menu-open').forEach((openItem) => {\n          closeItem(openItem);\n        });\n        item.classList.toggle('is-menu-open', willOpen);\n        trigger.setAttribute('aria-expanded', String(willOpen));\n        if (!willOpen) trigger.blur();\n      });\n    });\n  };\n\n  const initialize = (scope = document) => {\n    initializeSearchAliases();\n    initializeSearchModalClose(scope);\n    initializeSearchFilterBridge(scope);\n    initializeCollectionSeoDescription(scope);\n    initializeCatalogHeaderDescriptions(scope);\n    initializeCollectionFacetView();\n    initializeRecentSearches(scope);\n    if (scope.matches?.(SELECTOR_ROOT)) bindRoot(scope);\n    scope.querySelectorAll?.(SELECTOR_ROOT).forEach(bindRoot);\n    injectFavoriteButtons(scope);\n    syncFavoriteButtons(scope);\n    updateFavoriteCounts();\n    initializeHeader();\n    initializeServiceStrip();\n    initializeQuickNavigation();\n    initializeCartCount();\n    initializeStickyProduct();\n    initializeBuyNow();\n    initializeProductHero(scope);\n    initializeSizeCalculators(scope);\n    initializeQuickBuy();\n    initializeCardQuickSelectors(scope);\n    initializeCardMediaRotation(scope);\n    initializeCollectionSearch(scope);\n    // Native theme components initialize the collection drawer.\n    initializeCollectionFilters(scope);\n    initializeStickyCollectionFilter(scope);\n    initializeFilterDrawerFallback(scope);\n    initializeDynamicProductCards(scope);\n    initializeDynamicSearchCards(scope);\n    initializeGlobalSizeLinks();\n    initializeFajaStoryGalleries(scope);\n    initializeInfinitePanelCarousels(scope);\n    initializeSectionVisibility(scope);\n    initializePurchaseSummary(scope);\n    initializeVideoAudioControls(scope);\n    initializeDetailsDescriptions(scope);\n    initializeFilterTrashAnimation();\n    initializeDesktopMenuTriggers(scope);\n    initializeSmoothAccordions(scope);\n    initializeReveal(scope);\n  };\n\n  initialize();\n\n  // Native Shopify collection and search events manage their own filter updates.\n  // The horizontal facet bar can be mounted outside the product-grid wrapper\n  // or hydrated just after the main initializer. Re-run once after custom\n  // elements settle so every parent and child collection receives the same\n  // desktop-primary treatment.\n  window.setTimeout(() => initializeCollectionFilters(document), 180);\n  document.addEventListener('shopify:section:load', (event) => initialize(event.target));\n  document.addEventListener('mujeron:favorites-change', () => {\n    syncFavoriteButtons();\n    updateFavoriteCounts();\n  });\n\n  document.addEventListener('click', (event) => {\n    if (event.target.closest?.('.mjr-header__nav-item--has-dropdown')) return;\n    document.querySelectorAll('.mjr-header__nav-item.is-menu-open').forEach((item) => {\n      item.classList.remove('is-menu-open');\n      item.querySelector('[data-mjr-desktop-menu-trigger]')?.setAttribute('aria-expanded', 'false');\n    });\n  });\n\n  document.addEventListener('keydown', (event) => {\n    if (event.key !== 'Escape') return;\n    document.querySelectorAll('.mjr-header__nav-item.is-menu-open').forEach((item) => {\n      const trigger = item.querySelector('[data-mjr-desktop-menu-trigger]');\n      item.classList.remove('is-menu-open');\n      trigger?.setAttribute('aria-expanded', 'false');\n      trigger?.focus();\n    });\n  });\n\n  // Root sections stop propagation after handling their own controls. This\n  // delegated listener therefore covers only native Shopify cards outside one.\n  document.addEventListener('click', (event) => {\n    const favoriteButton = event.target.closest?.('[data-mjr-favorite-toggle]');\n    if (!favoriteButton || favoriteButton.closest(SELECTOR_ROOT)) return;\n    event.preventDefault();\n    event.stopPropagation();\n    toggleFavorite(favoriteButton.dataset.mjrFavoriteToggle, favoriteButton);\n  });\n})();\n\n\n/* MUJERON product-card cover warmup 20260929 v1 */\n\n;(()=>{\n  if(window.__mjrCardCoverWarmup20260929)return;\n  window.__mjrCardCoverWarmup20260929=true;\n\n  let pending=false;\n  const prime=()=>{\n    pending=false;\n    document.querySelectorAll('img[data-mjr-card-image=\"0\"][loading=\"lazy\"]').forEach(image=>{\n      image.fetchPriority='low';\n      image.loading='eager';\n    });\n  };\n  const schedule=()=>{\n    if(pending)return;\n    pending=true;\n    queueMicrotask(prime);\n  };\n\n  if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',schedule,{once:true});\n  else schedule();\n\n  document.addEventListener('shopify:section:load',schedule);\n  new MutationObserver(records=>{\n    const hasCards=records.some(record=>[...record.addedNodes].some(node=>\n      node.nodeType===1&&(\n        node.matches?.('[data-mjr-merch-card]')||\n        node.querySelector?.('[data-mjr-merch-card]')\n      )\n    ));\n    if(hasCards)schedule();\n  }).observe(document.documentElement,{childList:true,subtree:true});\n})();\n\n\n\n;(()=>{\n  const nativeFetch=window.fetch.bind(window);\n  const prefetched=new Map();\n  const normalize=input=>{\n    try{\n      const raw=typeof input===\"string\"?input:input?.url;\n      const url=new URL(raw,window.location.origin);\n      return url.origin===window.location.origin?url.pathname+url.search:\"\";\n    }catch(error){\n      return \"\";\n    }\n  };\n  const blankSearch=\"/search?q=&options%5Bprefix%5D=last\";\n  const prime=()=>{\n    if(prefetched.has(blankSearch))return;\n    const request=nativeFetch(blankSearch,{headers:{\"X-Requested-With\":\"XMLHttpRequest\"}})\n      .then(response=>{\n        if(!response.ok)throw new Error(\"No se pudo precargar el filtro.\");\n        return response.text();\n      })\n      .catch(error=>{\n        prefetched.delete(blankSearch);\n        throw error;\n      });\n    prefetched.set(blankSearch,request);\n  };\n  window.fetch=(input,init)=>{\n    const key=normalize(input);\n    const cached=prefetched.get(key);\n    if(!cached)return nativeFetch(input,init);\n    return cached.then(html=>{\n      prefetched.delete(key);\n      return new Response(html,{status:200,headers:{\"Content-Type\":\"text/html; charset=utf-8\"}});\n    });\n  };\n  document.addEventListener(\"pointerover\",event=>{\n    if(event.target instanceof Element&&event.target.closest('button[aria-label=\"Buscar\"]'))prime();\n  },{capture:true,passive:true});\n  document.addEventListener(\"click\",event=>{\n    if(event.target instanceof Element&&event.target.closest('button[aria-label=\"Buscar\"]'))prime();\n  },true);\n})();\n\n\n/* MUJERON filter count, clear animation and idle warm 20260826 v1 */\n\n;(()=>{\n  if(window.__mjrFilterUX20260826)return;\n  window.__mjrFilterUX20260826=true;\n  let raf=0;\n  const countPanel=(panel)=>{\n    const selected=panel.querySelectorAll('input[type=\"checkbox\"]:checked,input[type=\"radio\"]:checked').length;\n    const hasPrice=[...panel.querySelectorAll('.price-facet__input')].some(input=>String(input.value||'').trim()!=='');\n    return selected+(hasPrice?1:0);\n  };\n  const sync=()=>{\n    document.querySelectorAll('.mjr-search-filter-panel').forEach(panel=>{\n      const title=panel.querySelector('.mjr-search-filter-panel__header h2');\n      if(!title)return;\n      let badge=title.querySelector('.mjr-search-filter-panel__badge');\n      if(!badge){\n        badge=document.createElement('span');\n        badge.className='theme-drawer__badge mjr-search-filter-panel__badge';\n        badge.setAttribute('aria-hidden','true');\n        title.appendChild(badge);\n      }\n      let spoken=title.querySelector('.mjr-search-filter-panel__count-label');\n      if(!spoken){\n        spoken=document.createElement('span');\n        spoken.className='visually-hidden mjr-search-filter-panel__count-label';\n        title.appendChild(spoken);\n      }\n      const count=countPanel(panel);\n      badge.textContent=String(count);\n      badge.hidden=false;\n      spoken.textContent=count===1?'1 filtro aplicado':count>1?count+' filtros aplicados':'';\n    });\n  };\n  const schedule=()=>{cancelAnimationFrame(raf);raf=requestAnimationFrame(sync)};\n  window.__mjrFilterUXSync=sync;\n  document.addEventListener('input',schedule,true);\n  document.addEventListener('change',schedule,true);\n  const bindSearchObserver=()=>{\n    const root=document.getElementById('search-modal');\n    if(!root){setTimeout(bindSearchObserver,500);return}\n    new MutationObserver(schedule).observe(root,{childList:true,subtree:true});\n    sync();\n  };\n  bindSearchObserver();\n  const warm=()=>{\n    const button=document.querySelector('button[aria-label=\"Buscar\"]');\n    if(button)button.dispatchEvent(new PointerEvent('pointerover',{bubbles:true}));\n  };\n  if('requestIdleCallback' in window)requestIdleCallback(warm,{timeout:2200});\n  else setTimeout(warm,1200);\n})();\n"],
  "mappings": "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",
  "names": ["measurementColumns", "sizeColumn", "introToggle", "introCopy", "dialog"]
}
