{
  "version": 3,
  "sources": ["/cdn/shop/t/348/assets/u1-pdp.js?cb=13752"],
  "sourcesContent": ["/*\n  PDP de UNIT 1 (variante A): toda la logica del customizer, sin Liquid.\n  Antes vivia inline en sections/pdp-customizer.liquid + snippets u1-pdp-customizer-js,\n  u1-pdp-bundle-tooltips y u1-pdp-family-js. Los datos que necesita los arma la seccion\n  en <script type=\"application/json\" data-u1-pdp-config>; este archivo los lee y arranca la PDP.\n*/\n(() => {\nconst u1PdpBoot = (CFG) => {\n(() => {\nconst root = document.getElementById('U1PdpCustomizer-' + CFG.sectionId);\nif (!root) return;\nconst sectionId = CFG.sectionId;\nconst setStickyTopVar = () => {\nconst header =\ndocument.querySelector('#shopify-section-header') ||\ndocument.querySelector('header');\nif (!header || !header.getBoundingClientRect) return;\nconst h = Math.round(header.getBoundingClientRect().height || 0);\nroot.style.setProperty('--u1-pdp-sticky-top', `${h}px`);\n};\nsetStickyTopVar();\nwindow.addEventListener('resize', () => setStickyTopVar(), { passive: true });\nconst _u1RawChapterOrder = root.getAttribute('data-u1-pdp-chapter-order');\nconst CHAPTER_ORDER = (_u1RawChapterOrder === null\n? 'color,size'\n: _u1RawChapterOrder\n).split(',').map(s => s.trim().toLowerCase()).filter(Boolean);\nconst SILICONE_INSERTS_PDP = String(root.dataset.u1PdpSiliconeInserts || '') === '1';\nconst HAS_CHAPTER_MODEL = CHAPTER_ORDER.includes('model');\nconst HAS_CHAPTER_COLOR = CHAPTER_ORDER.includes('color');\nconst HAS_CHAPTER_SIZE = CHAPTER_ORDER.includes('size');\nconst HAS_HELMET_SIZE_CHAPTER = CHAPTER_ORDER.some((k) => k === 'helmet_size' || k === 'helmet-size');\nconst U1_BLOCKING_CHAPTER_KEYS = new Set(['model', 'color', 'size']);\nconst hasBlockingChaptersInOrder = CHAPTER_ORDER.some((k) => U1_BLOCKING_CHAPTER_KEYS.has(k));\nconst TEMPLATE = (HAS_CHAPTER_MODEL && !HAS_CHAPTER_COLOR && !HAS_CHAPTER_SIZE) ? 'light' : 'helmet';\nconst TEMPLATE_RAW = String(root.dataset.u1PdpTemplateRaw || TEMPLATE);\nconst INSERT_TORCH_ASSETS = String(root.dataset.u1PdpInsertTorchAssets || '') === '1';\nconst variantsEl = root.querySelector('[data-u1-pdp-variants]');\nconst mediaEl = root.querySelector('[data-u1-pdp-media]');\nconst defaultGalleryImgEl = root.querySelector('[data-u1-pdp-default-gallery-image]');\nconst defaultGalleryAltEl = root.querySelector('[data-u1-pdp-default-gallery-alt]');\nconst defaultGalleryLifeEl = root.querySelector('[data-u1-pdp-default-gallery-lifestyle]');\nconst defaultGalleryVideoEl = root.querySelector('[data-u1-pdp-default-gallery-video]');\nconst defaultGalleryVideoPosterEl = root.querySelector('[data-u1-pdp-default-gallery-video-poster]');\nconst defaultGalleryVideoModeEl = root.querySelector('[data-u1-pdp-default-gallery-video-mode]');\nconst simpleGalleryEl = root.querySelector('[data-u1-pdp-simple-gallery]');\nconst accessoriesEl = root.querySelector('[data-u1-pdp-accessories]');\nconst bundleDiscountRulesEl = root.querySelector('[data-u1-pdp-bundle-discount-rules]');\nconst colorBadgesEl = root.querySelector('[data-u1-pdp-color-badges]');\nconst colorGalleryEl = root.querySelector('[data-u1-pdp-color-gallery]');\nconst variantGalleryEl = root.querySelector('[data-u1-pdp-variant-gallery]');\nconst insideBoxEl = root.querySelector('[data-u1-pdp-inside-box]');\nconst insideBoxByVariantEl = root.querySelector('[data-u1-pdp-inside-box-by-variant]');\nconst restposBottleEl = root.querySelector('[data-u1-pdp-restpos-bottle]');\nconst restposConfigEl = root.querySelector('[data-u1-pdp-restpos-config]');\nconst safeJsonParse = (el, fallbackJson) => {\ntry {\nconst raw = (el && el.textContent ? el.textContent : '');\nconst s = (raw || '').toString().trim();\nreturn JSON.parse(s || fallbackJson);\n} catch (_e) {\ntry { return JSON.parse(fallbackJson); } catch (_e2) { return null; }\n}\n};\nlet variants = safeJsonParse(variantsEl, '[]') || [];\n\n/* \u2500\u2500 Stoq Pre-order: reads directly from _RestockRocketConfig \u2500\u2500\n   Primary source: sellingPlans[].variant_ids (authoritative per-plan list).\n   Fallback: cachedPreorderVariantIds.preorder_variant_ids (market-cached).\n   Market gating: if a plan has markets_enabled + shopify_market_ids, only\n   activate preorder when the current market is in that list. */\nlet _u1StoqPreorderIds = new Set();\nlet _u1StoqPlanVariantIds = new Set(); // membresia real en planes de preorder (fuente autoritativa, sin gating de mercado)\nlet _u1StoqPlanId = 0;\nlet _u1StoqReady = false;\nconst _u1ReadStoqConfig = () => {\n  if (_u1StoqReady) return;\n  try {\n    const cfg = window._RestockRocketConfig;\n    if (!cfg) return;\n    const ids = new Set();\n    const currentMarket = Number(cfg.marketId || 0);\n    // 1. Selling plans \u2014 authoritative variant list per plan\n    const plans = Array.isArray(cfg.sellingPlans) ? cfg.sellingPlans : [];\n    plans.forEach((p) => {\n      if (p && Array.isArray(p.variant_ids)) p.variant_ids.forEach((id) => _u1StoqPlanVariantIds.add(Number(id)));\n    });\n    const activePlan = plans.find(p => p.enabled !== false);\n    if (activePlan) {\n      // Market gating: skip plan if it's market-restricted and current market isn't in the list\n      const mktsEnabled = activePlan.markets_enabled;\n      const mkts = Array.isArray(activePlan.shopify_market_ids) ? activePlan.shopify_market_ids : [];\n      const planAllowedForMarket = !mktsEnabled || !mkts.length || mkts.includes(currentMarket);\n      if (planAllowedForMarket) {\n        _u1StoqPlanId = Number(activePlan.shopify_selling_plan_id || 0) || 0;\n        if (Array.isArray(activePlan.variant_ids)) {\n          activePlan.variant_ids.forEach(id => ids.add(Number(id)));\n        }\n      }\n    }\n    // 2. Cached preorder IDs \u2014 only if market matches\n    const cached = cfg.cachedPreorderVariantIds;\n    if (cached && Array.isArray(cached.preorder_variant_ids)) {\n      const cacheMarketOk = !cached.market_locations_enabled || Number(cached.market_id || 0) === currentMarket;\n      if (cacheMarketOk) {\n        cached.preorder_variant_ids.forEach(id => ids.add(Number(id)));\n      }\n    }\n    _u1StoqPreorderIds = ids;\n    _u1StoqReady = true;\n  } catch (_e) { /* noop */ }\n};\n_u1ReadStoqConfig();\n/* _u1RecalcPreorder kept as no-op stub \u2014 called on model switch in\n   u1-pdp-customizer-js.liquid. Stoq config is global, doesn't change. */\nconst _u1RecalcPreorder = () => { _u1ReadStoqConfig(); };\n/* Vendidas/l\u00EDmite de preorder por variante \u2014 fuente AUTORITATIVA: cachedVariantPreorderLimits\n   .variant_preorder_limits[vid] = [unitsSold, limit] (coincide con \"Units sold\" del admin de Stoq).\n   OJO: variantsPreorderCount(ForMarket) NO sirve \u2014 arrastra contadores viejos de campa\u00F1as\n   anteriores (visto en vivo: 22 en ese campo vs 0 reales en el admin).\n   Devuelve null si no hay l\u00EDmite (>0) o no hay datos (fallo seguro: no bloquear, no mostrar barra). */\n/* El cache embebido va con lag (visto: venta reciente ausente). Igual que el widget de Stoq,\n   refrescamos contra su endpoint variant_preorder_limits.json (mismo formato [sold, limit],\n   ya scoped al mercado) y preferimos esa data cuando llega. */\nlet _u1StoqLimitsLive = null;\nlet _u1StoqLimitsFetching = false;\nconst _u1RefreshStoqLimits = () => {\n  if (_u1StoqLimitsLive || _u1StoqLimitsFetching) return;\n  try {\n    const cfg = window._RestockRocketConfig;\n    if (!cfg || !cfg.shop || !cfg.marketId) return;\n    _u1StoqLimitsFetching = true;\n    fetch('https://app.restockrocket.io/api/v1/embed/variant_preorder_limits.json?shopify_market_id=' + encodeURIComponent(cfg.marketId), { headers: { 'X-Shopify-Shop-Domain': String(cfg.shop) } })\n      .then((r) => (r && r.ok ? r.json() : null))\n      .then((j) => {\n        if (j && typeof j === 'object' && !Array.isArray(j)) {\n          _u1StoqLimitsLive = j;\n          try { updateVariant(); } catch (_e) { /* re-sync de la barra/CTA con data fresca */ }\n        }\n      })\n      .catch(() => { /* nos quedamos con el cache */ });\n  } catch (_e) { /* noop */ }\n};\nconst _u1StoqSoldMax = (v) => {\n  try {\n    if (!v) return null;\n    const cfg = window._RestockRocketConfig;\n    if (!cfg) return null;\n    _u1RefreshStoqLimits(); // lazy: primer uso dispara el refresh (una sola vez)\n    let pairs = _u1StoqLimitsLive;\n    if (!pairs) {\n      const cl = cfg.cachedVariantPreorderLimits;\n      if (!cl || !cl.variant_preorder_limits) return null;\n      const mktOk = !cl.market_locations_enabled || Number(cl.shopify_market_id || 0) === Number(cfg.marketId || 0);\n      if (!mktOk) return null;\n      pairs = cl.variant_preorder_limits;\n    }\n    const pair = pairs[String(v.id)];\n    if (!Array.isArray(pair)) return null;\n    const max = pair[1] == null ? NaN : Number(pair[1]);\n    if (isNaN(max) || max <= 0) return null; // sin l\u00EDmite de unidades\n    const cnt = pair[0] == null ? 0 : Math.max(0, Math.min(Number(pair[0]) || 0, max));\n    return { count: cnt, max: max };\n  } catch (_e) { return null; }\n};\nconst _forceAvailable = root.getAttribute('data-u1-pdp-force-available') === 'true'\n  || /crash-replacement|gift-card/.test(window.location.pathname);\nconst isVariantPreorder = (v) => {\n  if (!v || _forceAvailable) return false;\n  _u1ReadStoqConfig(); // lazy retry if Stoq loaded late\n  if (!_u1StoqPlanId) return false; // no active selling plan \u2192 no preorder possible\n  if (!_u1StoqPreorderIds.has(Number(v.id))) return false;\n  // Only preorder if actually out of stock \u2014 if there's stock, sell normally\n  try {\n    const cfg = window._RestockRocketConfig;\n    if (cfg && cfg.variantsInventoryQuantity) {\n      const qty = Number(cfg.variantsInventoryQuantity[String(v.id)]);\n      if (!isNaN(qty) && qty > 0) return false;\n    }\n  } catch (_e) {}\n  // Respetar el L\u00CDMITE de unidades de preorder: al alcanzar el m\u00E1ximo, la variante deja\n  // de ser preorder \u2192 cae a OOS \u2192 \"Notify me\". Fuente autoritativa (_u1StoqSoldMax);\n  // FALLO SEGURO: sin datos \u2192 no bloquea.\n  try {\n    const pm = _u1StoqSoldMax(v);\n    if (pm && pm.count >= pm.max) return false; // l\u00EDmite alcanzado \u2192 ya no es preorder\n  } catch (_e) {}\n  return true;\n};\n/* Check if variant is truly out of stock using Stoq's real inventory data.\n   Needed because \"continue selling when OOS\" makes v.available always true.\n   Returns true when stock \u2264 0 and the variant is NOT preorder in this market. */\nconst isVariantOosNonPreorder = (v) => {\n  if (!v || _forceAvailable) return false;\n  // Products without inventory tracking (gift cards, etc.) are never OOS\n  if (!v.inventory_management) return false;\n  try {\n    const cfg = window._RestockRocketConfig;\n    if (!cfg || !cfg.variantsInventoryQuantity) return false;\n    const qty = Number(cfg.variantsInventoryQuantity[String(v.id)]);\n    if (isNaN(qty) || qty > 0) return false; // in stock\n    const policy = cfg.variantsInventoryPolicy ? cfg.variantsInventoryPolicy[String(v.id)] : 'deny';\n    if (policy !== 'continue') return false; // deny policy \u2014 Shopify handles it\n    if (isVariantPreorder(v)) return false; // preorder valido en este mercado \u2192 boton Pre-order\n    const vid = Number(v.id);\n    // Variante de OTRO producto embebida en esta pagina (visor/luz/accesorio en el PDP de un\n    // casco): su continue selling es oversell deliberado (ej. visores con stock real en Dimass\n    // que no sincroniza) \u2192 vender normal, nunca \"Out of stock\".\n    const isPageVariant = (variants || []).some((x) => x && Number(x.id) === vid);\n    if (!isPageVariant) return false;\n    // Producto SIN programa de preorder (visores, crash replacement, etc.: ninguna de sus\n    // variantes pertenece a un plan de Stoq): continue selling = vender normal.\n    // OJO: se usa la membresia en PLANES (variant_ids), no _u1StoqPreorderIds \u2014 ese set\n    // mezcla el cache de Stoq que flaggea variantes ajenas al preorder (ej. visores para\n    // su Notify) y en mercados con qty<=0 (Dimass -9) las mandaba a Out of stock.\n    const inProgram = (variants || []).some((x) => x && _u1StoqPlanVariantIds.has(Number(x.id)));\n    if (!inProgram) return false;\n    // Variante que pertenece a un plan pero sin plan valido en ESTE mercado (o limite\n    // alcanzado): tratarla como agotada \u2192 Notify me. Antes se mostraba Add to cart y Stoq\n    // bloqueaba el add con el toast \"not available for preorder in your region\".\n    if (_u1StoqPlanVariantIds.has(vid)) return true;\n    // Continue sin relacion con Stoq (oversell deliberado, sin plan) \u2192 vender normal\n    if (!_u1StoqPlanId) return false;\n    return true; // OOS + continue + producto en programa pero variante fuera \u2192 agotada\n  } catch (_e) { return false; }\n};\nconst getPreorderSellingPlanId = (v) => {\n  if (!isVariantPreorder(v)) return 0;\n  return _u1StoqPlanId;\n};\n/* Preorder progress (\"X of Y claimed\"): misma fuente autoritativa que el chequeo de l\u00EDmite. */\nconst _getPreorderProgress = (v) => _u1StoqSoldMax(v);\n/* Stoq shipping text: per-variant, per-market */\nconst _getPreorderShippingText = () => {\n  try {\n    const cfg = window._RestockRocketConfig;\n    if (!cfg) return '';\n    // Try market-specific text first, fall back to global\n    const vid = String(document.querySelector('[data-u1-pdp-variant-id]')?.value || '');\n    if (vid && cfg.variantsShippingTextForMarket && cfg.variantsShippingTextForMarket[vid]) {\n      const mkt = cfg.variantsShippingTextForMarket[vid];\n      const txt = (typeof mkt === 'string' ? mkt : Object.values(mkt)[0] || '').toString().trim();\n      if (txt) return txt;\n    }\n    if (vid && cfg.variantsShippingText && cfg.variantsShippingText[vid]) {\n      return cfg.variantsShippingText[vid].toString().trim();\n    }\n    // Fallback to selling plan level\n    const plans = Array.isArray(cfg.sellingPlans) ? cfg.sellingPlans : [];\n    const plan = plans.find(p => p.enabled !== false);\n    return plan ? (plan.shipping_text || '').toString().trim() : '';\n  } catch (_e) { return ''; }\n};\n\nconst media = safeJsonParse(mediaEl, '[]') || [];\nconst defaultGallerySrc = safeJsonParse(defaultGalleryImgEl, '\"\"') || '';\nconst defaultGalleryAlt = safeJsonParse(defaultGalleryAltEl, '\"\"') || '';\nconst defaultGalleryIsLifestyle = !!safeJsonParse(defaultGalleryLifeEl, 'false');\nconst defaultGalleryVideoSrc = safeJsonParse(defaultGalleryVideoEl, '\"\"') || '';\nconst defaultGalleryVideoPoster = safeJsonParse(defaultGalleryVideoPosterEl, '\"\"') || '';\nconst defaultGalleryVideoMode = (safeJsonParse(defaultGalleryVideoModeEl, '\"contain\"') || 'contain').toString();\nconst simpleGallerySlides = (() => {\nconst raw = safeJsonParse(simpleGalleryEl, '[]');\nreturn Array.isArray(raw) ? raw : [];\n})();\nconst accessoriesCatalog = safeJsonParse(accessoriesEl, '[]') || [];\nconst bundleDiscountRules = (() => {\nconst raw = safeJsonParse(bundleDiscountRulesEl, '[]') || [];\nif (!Array.isArray(raw) || !raw.length) return [];\nconst normalizeHandle = (s) => (s || '').toString().trim().toLowerCase().replace(/\\s+/g, '-');\nconst splitCsvHandles = (csv, opts) => {\nconst o = opts && typeof opts === 'object' ? opts : {};\nconst s = (csv || '').toString().trim();\nif (!s) return [];\nlet tokens = s.split(',').map(x => normalizeHandle(String(x || '').trim())).filter(Boolean);\ntokens = tokens.filter(t => t !== '-' && t !== 'none');\nreturn tokens;\n};\nconst splitCsvVariantIds = (csv) => {\nconst s = (csv || '').toString().trim();\nif (!s) return [];\nconst outIds = [];\ns.split(',').forEach((x) => {\nconst n = Math.max(0, Math.round(Number(String(x || '').trim()) || 0));\nif (n > 0) outIds.push(n);\n});\nreturn outIds;\n};\nconst out = [];\nraw.forEach((r) => {\nif (!r || typeof r !== 'object') return;\nconst enabled = (typeof r.enabled === 'boolean') ? r.enabled : true;\nconst code = (r.discountCode || '').toString().trim();\nif (!enabled || !code) return;\nconst appliesToMainProductId = Math.max(0, Math.round(Number(r.appliesToMainProductId || 0) || 0));\nconst requiredAccessoryHandles = splitCsvHandles(r.requiredAccessoryHandlesCsv || '', { allowAny: false });\nif (!requiredAccessoryHandles.length) return;\nconst allowedMainVariantIds = splitCsvVariantIds(r.allowedMainVariantIdsCsv || '');\nout.push({\nid: (r.id || '').toString(),\ndiscountCode: code,\ndiscountLabel: (r.discountLabel || '').toString().trim(),\nbannerTitle: (r.bannerTitle || '').toString().trim(),\nappliesToMainProductId,\nrequiredAccessoryHandles,\nallowedMainVariantIds,\nlevel: Math.max(0, Math.round(Number(r.level || 0) || 0)),\n});\n});\nreturn out;\n})();\nconst colorBadges = safeJsonParse(colorBadgesEl, '[]') || [];\nconst colorGalleryItems = safeJsonParse(colorGalleryEl, '[]') || [];\nconst variantGalleryItems = safeJsonParse(variantGalleryEl, '[]') || [];\nconst insideBoxItems = safeJsonParse(insideBoxEl, '[]') || [];\nconst insideBoxVariantItems = safeJsonParse(insideBoxByVariantEl, '[]') || [];\nconst restposBottle = safeJsonParse(restposBottleEl, 'null');\nconst restposConfig = safeJsonParse(restposConfigEl, '{}') || {};\nlet mainProductTitle = CFG.productTitle;\nlet mainProductHandle = CFG.productHandle;\nconst U1_BASE_PRODUCT_HANDLE = CFG.productHandle;\nlet mainProductId = CFG.productId;\n/* Foto del producto propio de la pagina, para poder VOLVER a el. La rama que cambia de\n   producto (capitulo Model) solo sabia ir HACIA otro producto: cuando en un mismo\n   capitulo conviven variantes (Clear/Tinted de Helmet Visor) y un producto aparte\n   (Adaptive), al tocar Clear la card se marcaba pero el producto y el precio se\n   quedaban en el otro. La descripcion se toma del DOM porque es la que ya esta pintada. */\nconst U1_HOME_MODEL = {\n  title: mainProductTitle,\n  handle: mainProductHandle,\n  id: mainProductId,\n  variants: variants,\n  descriptionHtml: (document.querySelector('[data-u1-pdp-desc]') || {}).innerHTML,\n  images: CFG.images\n};\nconst HIDDEN_COLOR_HANDLES = (() => {\ntry {\nconst raw = String(root.dataset.u1PdpHiddenColors || '').trim();\nif (!raw) return new Set();\nconst tokens = raw.split(',')\n  .map(s => optionNameHandle(String(s || '').trim()))\n  .filter(Boolean)\n  .filter(t => t !== 'none' && t !== '-' && t !== '\u2014');\nreturn new Set(tokens);\n} catch (_e) { return new Set(); }\n})();\nconst productModelsEl = root.querySelector('[data-u1-pdp-product-models]');\nconst productModels = (() => {\nconst raw = safeJsonParse(productModelsEl, '[]') || [];\nconst m = new Map();\ntry {\n(Array.isArray(raw) ? raw : []).forEach((it) => {\nif (!it || typeof it !== 'object') return;\nconst h = (it.handle || '').toString();\nif (!h) return;\nconst vs = Array.isArray(it.variants) ? it.variants : [];\nm.set(h, {\nhandle: h,\ntitle: (it.title || '').toString(),\nid: Number(it.id || 0) || 0,\ndescriptionHtml: (it.descriptionHtml || '').toString(),\nvariants: vs,\n/* Las fotos del producto, para que la galeria lo siga al cambiar de modelo. */\nimages: Array.isArray(it.images) ? it.images : [],\n});\n});\n} catch (_e) { /* noop */ }\nreturn m;\n})();\nconst accessoryVariantMeta = (() => {\nconst m = new Map();\ntry {\n(Array.isArray(accessoriesCatalog) ? accessoriesCatalog : []).forEach((p) => {\nif (!p || !Array.isArray(p.variants)) return;\nconst productTitle = String(p.title || '');\nconst handle = String(p.handle || '');\np.variants.forEach((v) => {\nif (!v || !v.id) return;\nconst idNum = Number(v.id);\nif (!idNum) return;\nconst vTitle = (v.title && v.title !== 'Default Title') ? String(v.title) : '';\nconst label = vTitle ? `${productTitle} \u2014 ${vTitle}` : productTitle || handle || String(idNum);\nm.set(idNum, {\nid: idNum,\nhandle,\nproductTitle,\nvariantTitle: vTitle,\nlabel,\navailable: (typeof v.available === 'boolean' ? v.available : null),\npriceCents: (typeof v.price === 'number' || /^\\d+$/.test(String(v.price || ''))) ? Number(v.price) : 0,\n});\n});\n});\n} catch (_e) { /* noop */ }\nreturn m;\n})();\nconst crashOptionBtns = Array.from(root.querySelectorAll('[data-u1-pdp-crash-option]'));\nconst crashGroupEl = crashOptionBtns[0] && crashOptionBtns[0].closest\n? crashOptionBtns[0].closest('[data-u1-pdp-crash-group]')\n: root.querySelector('[data-u1-pdp-crash-group]');\nconst crashFootEl = crashGroupEl ? crashGroupEl.querySelector('.u1-pdp-crash__foot') : null;\nconst crashFreeOption = (crashGroupEl && crashGroupEl.dataset.u1PdpCrashFreeOption || 'none').toString().trim();\nconst crashFreeDiscountCode = (crashGroupEl && crashGroupEl.dataset.u1PdpCrashFreeDiscountCode || '').toString().trim();\nconst crashVariantMeta = (() => {\nconst m = new Map();\ntry {\ncrashOptionBtns.forEach((btn) => {\nif (!btn || !btn.dataset) return;\nconst opt = String(btn.dataset.u1PdpCrashOption || '');\nconst idNum = Number(btn.dataset.u1PdpCrashVariantId || 0);\nif (!idNum) return;\nconst priceCents = Number(btn.dataset.u1PdpCrashPriceCents || 0) || 0;\nconst availableRaw = btn.dataset.u1PdpCrashAvailable;\nconst available = (availableRaw === 'true') ? true : (availableRaw === 'false' ? false : null);\nconst label = opt ? `Crash Replacement \u2014 ${opt}` : `Crash Replacement (${idNum})`;\nm.set(idNum, { id: idNum, option: opt, priceCents, available, label });\n});\n} catch (_e) { /* noop */ }\nreturn m;\n})();\nconst galleryEl = root.querySelector('[data-u1-pdp-gallery]');\nconst galleryTrack = root.querySelector('[data-u1-pdp-gallery-track]');\n/* HTML original de la galeria, tal como lo dibuja el servidor. Sus slides traen\n   data-media-id, que es lo que usa el theme para moverse a la foto de la variante al\n   cambiarla. setGalleryToImages no emite ese atributo, asi que si la reconstruimos se\n   pierde el cambio entre variantes (2026-09-30: volviendo de Adaptive, Clear y Tinted\n   dejaban de cambiar la foto). Por eso al volver al producto de la pagina se restaura\n   este HTML en vez de rearmarlo. */\nconst U1_HOME_GALLERY_HTML = galleryTrack ? galleryTrack.innerHTML : '';\nlet slides = Array.from(root.querySelectorAll('[data-u1-pdp-slide]'));\nconst btnPrev = root.querySelector('[data-u1-pdp-gallery-prev]');\nconst btnNext = root.querySelector('[data-u1-pdp-gallery-next]');\nconst mobileGalleries = Array.from(root.querySelectorAll('[data-u1-pdp-mobile-gallery]'));\nconst galleryC1El = root.querySelector('[data-u1-pdp-gallery-c1]');\nconst sizeStepEl = root.querySelector('[data-u1-pdp-step=\"size\"]');\nconst modelStepEl = root.querySelector('[data-u1-pdp-step=\"model\"]');\nconst accessoriesStepEl = root.querySelector('[data-u1-pdp-step=\"accessories\"]');\nconst helmetSizeStepEl = root.querySelector('[data-u1-pdp-step=\"helmet_size\"]');\nconst mobileHeroImgEl = root.querySelector('.u1-pdp-mobile-hero__img');\nconst stickyBottomEl = root.querySelector('[data-u1-pdp-sticky-bottom]');\nconst stickyAtcNudgePx = (() => {\nconst raw = root.dataset.u1PdpStickyAtcNudgePx;\nconst n = Number(raw);\nreturn Number.isFinite(n) ? n : 350;\n})();\nconst showStickyBottom = () => {\nif (!stickyBottomEl) return;\nif (!stickyBottomEl.hidden) return;\nstickyBottomEl.hidden = false;\nstickyBottomEl.setAttribute('aria-hidden', 'false');\nwindow.requestAnimationFrame(() => {\nstickyBottomEl.classList.add('is-visible');\nscheduleStickyCheck();\n});\n};\nconst colorStepEl = root.querySelector('[data-u1-pdp-step=\"color\"]');\nconst getExtraItemsCount = () => {\nlet extras = 0;\ntry {\nif (state && state.accessories && typeof state.accessories.size === 'number') extras += state.accessories.size;\nif (state && Number(state.crashVariantId || 0)) extras += 1;\n} catch (_e) { /* noop */ }\nreturn extras;\n};\nconst updateStickyChevron = () => {\nif (!stickyBottomEl) return;\nconst isBundleActive = root.getAttribute('data-u1-pdp-bundle-active') === 'true';\nstickyBottomEl.classList.toggle('has-breakdown', isBundleActive || getExtraItemsCount() > 0);\n};\nconst desktopMq = (() => {\ntry { return window.matchMedia('(min-width: 1025px)'); } catch (_e) { return null; }\n})();\nlet isDesktop = !!(desktopMq && desktopMq.matches);\nlet lastStepEl = null;\nlet lastStepInView = false;\nlet ioLastStep = null;\nconst getLastStepEl = () => {\ntry {\nconst steps = Array.from(root.querySelectorAll('[data-u1-pdp-step]'));\nreturn steps.length ? steps[steps.length - 1] : null;\n} catch (_e) { return null; }\n};\nconst computeLastStepInView = () => {\nif (!isDesktop) return false;\nconst el = lastStepEl || (lastStepEl = getLastStepEl());\nif (!el || !el.getBoundingClientRect) return false;\nconst r = el.getBoundingClientRect();\nconst t = window.innerHeight * 0.15; // similar a threshold 0.15\nreturn (r.top < (window.innerHeight - t)) && (r.bottom > t);\n};\nconst setupLastStepObserver = () => {\nlastStepInView = false;\nif (ioLastStep) { try { ioLastStep.disconnect(); } catch (_e) {} }\nioLastStep = null;\nlastStepEl = getLastStepEl();\nif (!isDesktop || !('IntersectionObserver' in window) || !lastStepEl) return;\nioLastStep = new IntersectionObserver((entries) => {\nconst e = entries && entries[0];\nlastStepInView = !!(e && e.isIntersecting);\nupdateGalleryC1Variant();\n}, { threshold: 0.15 });\nioLastStep.observe(lastStepEl);\n};\nif (desktopMq) {\ntry {\ndesktopMq.addEventListener('change', () => {\nisDesktop = !!desktopMq.matches;\nsetupLastStepObserver();\nupdateGalleryC1Variant();\n});\n} catch (_e) {\ntry {\ndesktopMq.addListener(() => {\nisDesktop = !!desktopMq.matches;\nsetupLastStepObserver();\nupdateGalleryC1Variant();\n});\n} catch (_e2) { /* noop */ }\n}\n}\nsetupLastStepObserver();\nlet u1_finalScrollY = window.scrollY || 0;\nroot._u1FinalLatched = !!root._u1FinalLatched;\nconst updateStickyBottomVisibility = () => {\nif (!stickyBottomEl) return;\nshowStickyBottom();\n};\nconst updateStickyBottomBorder = () => {\nif (!stickyBottomEl || stickyBottomEl.hidden || !stickyBottomEl.getBoundingClientRect) return;\nconst r = stickyBottomEl.getBoundingClientRect();\nconst stuck = Math.abs(r.bottom - window.innerHeight) <= 1;\nstickyBottomEl.classList.toggle('is-at-end', !stuck);\n};\nconst updateGalleryC1Variant = () => {\nif (!galleryC1El) return;\nif (!isDesktop) { galleryC1El.classList.remove('is-variant2'); return; }\nconst el = lastStepEl || (lastStepEl = getLastStepEl());\nif (!el) return;\nif (!(state && state.color && state.size)) {\nroot._u1FinalLatched = false;\ngalleryC1El.classList.remove('is-variant2');\napplyFinalGalleryMode(false);\nreturn;\n}\nconst centerRatio = 0.55;\nconst yLine = window.innerHeight * centerRatio;\nconst r = el.getBoundingClientRect();\nconst crossed = (r.top <= yLine) && (r.bottom >= yLine);\nconst y = window.scrollY || 0;\nconst dirDown = y > (u1_finalScrollY + 0.5);\nconst dirUp = y < (u1_finalScrollY - 0.5);\nu1_finalScrollY = y;\nif (dirDown && crossed) root._u1FinalLatched = true;\nif (dirUp && !crossed) root._u1FinalLatched = false;\nconst isVariant2 = !!(root._u1FinalLatched || crossed);\ngalleryC1El.classList.toggle('is-variant2', isVariant2);\napplyFinalGalleryMode(isVariant2);\n};\nlet stickyRaf = null;\nconst scheduleStickyCheck = () => {\nif (stickyRaf) return;\nstickyRaf = window.requestAnimationFrame(() => {\nstickyRaf = null;\nupdateStickyBottomVisibility();\nupdateStickyBottomBorder();\nupdateStickyChevron();\nupdateGalleryC1Variant();\n});\n};\nwindow.addEventListener('scroll', scheduleStickyCheck, { passive: true });\nwindow.addEventListener('resize', scheduleStickyCheck, { passive: true });\nscheduleStickyCheck();\nconst startScrollY = window.scrollY || 0;\nlet hasUserScrolled = false;\nlet didAutoNudge = false;\nwindow.addEventListener('scroll', () => {\nif (hasUserScrolled) return;\nconst dy = Math.abs((window.scrollY || 0) - startScrollY);\nif (dy > 6) hasUserScrolled = true;\n}, { passive: true });\nconst colorButtons = Array.from(root.querySelectorAll('[data-u1-pdp-color]'));\nconst sizeButtons = Array.from(root.querySelectorAll('[data-u1-pdp-size]'));\nconst modelButtons = Array.from(root.querySelectorAll('[data-u1-pdp-model]'));\n/* Show \"+ Free {product}\" next to the price on a model card whose variant\n   includes a variant-gated free product (read from the accessory blocks). Static. */\nconst applyModelCardFreeLabels = () => {\ntry {\nif (!modelButtons || !modelButtons.length) return;\nconst freeByVariant = new Map();\nroot.querySelectorAll('[data-u1-pdp-accessory][data-u1-pdp-free-variant-ids]').forEach((acc) => {\nconst ids = (acc.dataset.u1PdpFreeVariantIds || '').split(',').map(s => Number(String(s).trim())).filter(n => n > 0);\nconst title = (acc.dataset.u1PdpInfoTitle || '').toString().trim();\nconst label = (acc.dataset.u1PdpFreeLabel || 'Free').toString().trim();\nif (!title) return;\nids.forEach((id) => { if (!freeByVariant.has(id)) freeByVariant.set(id, label + ' ' + title); });\n});\nif (!freeByVariant.size) return;\nmodelButtons.forEach((card) => {\nif (!card) return;\nconst vid = Number(card.dataset.u1PdpModelVariantId || 0) || 0;\nconst old = card.querySelector('[data-u1-pdp-model-free-gift]');\nif (old) old.remove();\nconst text = vid ? freeByVariant.get(vid) : null;\nif (!text) return;\nconst priceEl = card.querySelector('[data-u1-pdp-card-price]') || card.querySelector('[data-u1-pdp-card-price-row]');\nif (!priceEl) return;\nconst span = document.createElement('span');\nspan.className = 'u1-pdp-card__free-gift u1-text-body-xs';\nspan.setAttribute('data-u1-pdp-model-free-gift', '');\nspan.textContent = text;\npriceEl.insertAdjacentElement('afterend', span);\n});\n} catch (_e) { /* noop */ }\n};\ntry { applyModelCardFreeLabels(); } catch (_e) { /* noop */ }\nconst accessoryModelButtons = Array.from(root.querySelectorAll('[data-u1-pdp-accessory-model]'));\nconst helmetSizeButtons = Array.from(root.querySelectorAll('[data-u1-pdp-helmet-size]'));\nconst helmetModelButtons = Array.from(root.querySelectorAll('[data-u1-pdp-helmet-model]'));\nconst HELMET_MODEL_OPTION_RAW = String(root.dataset.u1PdpHelmetModelOption || 'Helmet');\nconst HELMET_MODEL_OPTION_HANDLE = String(HELMET_MODEL_OPTION_RAW || 'Helmet').toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');\nconst IS_VISOR_PDP = String(root.dataset.u1PdpIsVisorPdp || '0') === '1';\nconst VISOR_BYPASS_OOS = String(root.dataset.u1PdpVisorBypassOos || '0') === '1';\nconst colorNameEl = root.querySelector('[data-u1-pdp-color-name]');\nconst colorLabelEl = root.querySelector('[data-u1-pdp-color-label]');\nconst updateStepMobileTitle = (stepName, selectedValue) => {\nconst stepEl = root.querySelector(`[data-u1-pdp-step=\"${stepName}\"]`);\nif (!stepEl) return;\nconst els = stepEl.querySelectorAll('[data-u1-pdp-step-mobile-title]');\nif (!els.length) return;\nels.forEach(function(el) {\n  const base = el.dataset.u1PdpMobileBase || '';\n  /* Family Pack: el span del prefijo (\"AURA \") viene del server y debe sobrevivir\n     cada reescritura del titulo \u2014 se re-adjunta antes del texto */\n  const famPref = el.querySelector('[data-u1-fam-prefix]');\n  el.textContent = '';\n  if (famPref) el.appendChild(famPref);\n  if (selectedValue) {\n    el.appendChild(document.createTextNode(base + ' \u2013 '));\n    var valSpan = document.createElement('span');\n    valSpan.className = 'u1-pdp-step__mobile-title-value';\n    valSpan.textContent = selectedValue;\n    el.appendChild(valSpan);\n  } else {\n    el.appendChild(document.createTextNode(base));\n  }\n});\n};\nconst colorBadgeEl = root.querySelector('[data-u1-pdp-color-badge]');\nconst colorBadgeTextEl = colorBadgeEl ? colorBadgeEl.querySelector('[data-u1-pdp-color-badge-text]') : null;\nconst atcBtn = root.querySelector('[data-u1-pdp-add-to-cart]');\nconst summaryEl = root.querySelector('[data-u1-pdp-summary]');\nconst atcTotalEl = root.querySelector('[data-u1-pdp-atc-total]');\nconst atcTotalMsrpEl = root.querySelector('[data-u1-pdp-atc-total-msrp]');\nconst atcTotalWrapEl = root.querySelector('[data-u1-pdp-atc-total-wrap]');\nconst atcSaveEl = root.querySelector('[data-u1-pdp-atc-save]');\nconst errorEl = root.querySelector('[data-u1-pdp-error]');\nconst atcForm = root.querySelector('[data-u1-pdp-atc-form]');\nconst atcIdInput = root.querySelector('[data-u1-pdp-atc-id]');\nconst bundleSaveEl = root.querySelector('[data-u1-pdp-bundle-save]');\nconst bundleSaveSubtitleEl = root.querySelector('[data-u1-pdp-bundle-save-subtitle]');\nconst moneyLocale = (() => {\ntry {\nconst l = CFG.language;\nconst c = CFG.country;\nconst raw = `${l}-${c}`;\nreturn raw && raw.includes('-') ? raw : 'en-US';\n} catch (_e) { return 'en-US'; }\n})();\nconst moneyCurrency = (() => {\ntry { return CFG.currency || 'USD'; }\ncatch (_e) { return 'USD'; }\n})();\n/* PDP: precios exactos, sin redondear (Fermin 2026-10-08). Simbolo y separadores salen\n   del formato de Shopify del mercado, igual que money_without_trailing_zeros: $259.90,\n   \u20AC259,90, \u00A3199.90; los enteros sin decimales ($260). parseMoneyCents lee ese mismo texto. */\nconst _u1MoneyFmt = (() => {\nconst m = String(CFG.moneySample).match(/^([^0-9]*)1(\\D?)234\\D?567(\\D)89(.*)$/);\nreturn m ? { pre: m[1], th: m[2], dec: m[3], suf: m[4] } : { pre: '$', th: ',', dec: '.', suf: '' };\n})();\nconst formatMoneyCents = (cents) => {\nconst c = Math.round(Number(cents || 0)), a = Math.abs(c), fr = a % 100;\nreturn (c < 0 ? '-' : '') + _u1MoneyFmt.pre + String(Math.floor(a / 100)).replace(/\\B(?=(\\d{3})+(?!\\d))/g, _u1MoneyFmt.th) + (fr ? _u1MoneyFmt.dec + String(fr).padStart(2, '0') : '') + _u1MoneyFmt.suf;\n};\nconst parseMoneyCents = (str) => {\nconst s = String(str || '').replace(/[^0-9.,]/g, ''), i = Math.max(s.lastIndexOf('.'), s.lastIndexOf(','));\nif (i > -1 && s.length - i - 1 === 2) return (parseInt(s.slice(0, i).replace(/[.,]/g, ''), 10) || 0) * 100 + parseInt(s.slice(i + 1), 10);\nreturn (parseInt(s.replace(/[.,]/g, ''), 10) || 0) * 100;\n};\n/* \u2500\u2500 Bundle variant helper \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\nconst _getBundleVariantNow = () => {\ntry {\nconst ps = root._packSelector;\nif (!ps || typeof ps.findBundleVariant !== 'function') return null;\nconst bp = ps.getActiveBundlePack ? ps.getActiveBundlePack() : null;\nif (!bp) return null;\n/* Build visor style from selected visor accessory */\nlet visorStyle = null;\ntry {\nif (state.accessories && state.accessories.size > 0) {\nfor (const [, entry] of state.accessories.entries()) {\nif (entry && entry.filterOptions && entry.filterOptions.style) {\nvisorStyle = String(entry.filterOptions.style);\nbreak;\n}\n}\n}\n} catch (_e) {}\nreturn ps.findBundleVariant({ color: state.color || null, size: state.size || null, visorStyle: visorStyle });\n} catch (_e) { return null; }\n};\nconst _fallbackVariantForModel = () => {\ntry {\nif (!state.variantModel) return null;\nconst idx = Number(String(root.dataset.u1PdpVariantModelOptionIndex ?? '').trim());\nif (!Number.isFinite(idx) || idx < 0 || idx > 2) return null;\nconst mVal = state.variantModel;\nconst match = (v) => v && ((idx === 0 ? v.option1 : idx === 1 ? v.option2 : v.option3) === mVal);\nreturn variants.find(v => v && v.available && match(v)) || variants.find(v => match(v)) || null;\n} catch (_e) { return null; }\n};\nconst getMainPriceCents = () => {\n/* Bundle mode: use the bundle variant price */\nconst bv = _getBundleVariantNow();\nif (bv && typeof bv.price !== 'undefined') return Number(bv.price) || 0;\nconst id = Number(state.variantId || 0);\nconst vv = id ? (variants.find(v => v && Number(v.id) === id) || null) : null;\nif (vv && typeof vv.price !== 'undefined') return Number(vv.price) || 0;\n/* Model fallback: use selected model's variant when no color/size yet */\nconst modelFb = _fallbackVariantForModel();\nif (modelFb && typeof modelFb.price !== 'undefined') return Number(modelFb.price) || 0;\n/* Light template, nothing selected yet: preview the FIRST model card's price\n   (matches the previewed gallery) instead of the first AVAILABLE variant \u2014\n   otherwise an out-of-stock base model makes the placeholder jump to a pricier\n   model (e.g. Smart Light \u2192 Pro Dual). */\nif (TEMPLATE === 'light' && Array.isArray(modelButtons) && modelButtons.length) {\nconst fid = Number(modelButtons[0].dataset.u1PdpModelVariantId || 0) || 0;\nconst fv = fid ? (variants.find(v => v && Number(v.id) === fid) || null) : null;\nif (fv && typeof fv.price !== 'undefined') return Number(fv.price) || 0;\n}\nconst firstAvail = variants.find(v => v && v.available) || variants[0] || null;\nreturn firstAvail && typeof firstAvail.price !== 'undefined' ? (Number(firstAvail.price) || 0) : 0;\n};\nconst getMainQty = () => {\nif (TEMPLATE === 'light') {\nconst id = Number(state.variantId || 0) || 0;\nif (!id) return 1;\nlet q = 1;\ntry {\nconst m = state && state.modelQtyByVariantId ? state.modelQtyByVariantId : null;\nif (m && typeof m.get === 'function' && m.has(id)) q = Number(m.get(id) || 1) || 1;\n} catch (_e) { /* noop */ }\nq = Math.max(1, Math.round(q));\nreturn Math.min(q, Number(root.dataset.u1PdpMainQtyMax || 9) || 9);\n}\nconst q = Number(state.mainQty || 1) || 1;\nreturn Math.max(1, q);\n};\nconst getMainQtyDiscountMeta = () => {\ntry {\nconst m = state && state.mainQtyDiscount ? state.mainQtyDiscount : null;\nif (!m) return { code: '', percent: 0, minQty: 0 };\nreturn {\ncode: (m.code || '').toString().trim(),\npercent: Number(m.percent || 0) || 0,\nminQty: Number(m.minQty || 0) || 0,\n};\n} catch (_e) {\nreturn { code: '', percent: 0, minQty: 0 };\n}\n};\nconst getMainTotalCents = () => {\nconst unit = Number(getMainPriceCents() || 0) || 0;\nconst qty = getMainQty();\nif (!unit || qty <= 1) return unit * qty;\nconst meta = getMainQtyDiscountMeta();\nconst pct = Number(meta.percent || 0) || 0;\nconst minQty = Number(meta.minQty || 0) || 0;\nif (!pct || qty < Math.max(2, minQty)) return unit * qty;\nif (TEMPLATE === 'light') {\nconst modeRaw = (root.dataset.u1PdpLightDiscountMode || '').toString().trim();\nconst mode = modeRaw || 'second_unit';\nif (mode === 'total') {\nreturn Math.round((unit * qty * (100 - pct)) / 100);\n}\nconst discUnit = Math.round((unit * (100 - pct)) / 100);\nreturn (unit * Math.max(0, qty - 1)) + discUnit;\n}\nconst discountedUnits = Math.max(0, qty - 1);\nconst discUnit = Math.round((unit * (100 - pct)) / 100);\nreturn unit + (discUnit * discountedUnits);\n};\nconst getAccessoriesTotalCents = () => {\nlet sum = 0;\ntry {\nstate.accessories.forEach((entry) => {\nif (!entry) return;\nconst vid = Number(entry.variantId || 0);\nif (!vid) return;\nconst meta = accessoryVariantMeta.get(Number(vid)) || null;\nlet price = meta ? Number(meta.priceCents || 0) : 0;\nconst pct = Number(entry.discountPercent || 0) || 0;\nif (pct > 0 && price > 0) {\nprice = Math.round((price * (100 - pct)) / 100);\n}\nconst qty = Number(entry.qty || 1) || 1;\nsum += price * qty;\n});\n} catch (_e) { /* noop */ }\nreturn sum;\n};\n/* Total price (full, undiscounted) of accessories flagged as free.\n   Used to show a crossed-out \"with free gift\" total + actual price on the CTA. */\nconst getFreeAccessoriesTotalCents = () => {\nlet sum = 0;\ntry {\nstate.accessories.forEach((entry) => {\nif (!entry || !entry.free) return;\nconst vid = Number(entry.variantId || 0);\nif (!vid) return;\nconst meta = accessoryVariantMeta.get(Number(vid)) || null;\nconst price = meta ? Number(meta.priceCents || 0) : 0;\nconst qty = Number(entry.qty || 1) || 1;\nsum += price * qty;\n});\n} catch (_e) { /* noop */ }\nreturn sum;\n};\n/* Like getAccessoriesTotalCents but skips accessories whose handle\n   matches a component product of the active bundle. */\nconst getNonBundleAccessoriesTotalCents = () => {\nlet bundleHandles = null;\ntry {\n  const ps = root._packSelector;\n  const bp = ps && ps.getActiveBundlePack ? ps.getActiveBundlePack() : null;\n  if (bp) {\n    bundleHandles = new Set();\n    (bp.componentProducts || []).forEach(function(cp) { if (cp && cp.handle) bundleHandles.add(cp.handle); });\n  }\n} catch (_e) {}\nif (!bundleHandles || bundleHandles.size === 0) return getAccessoriesTotalCents();\nlet sum = 0;\ntry {\nstate.accessories.forEach((entry) => {\n  if (!entry) return;\n  const h = (entry.handle || '').toString();\n  if (bundleHandles.has(h)) return; /* skip \u2014 already in bundle price */\n  const vid = Number(entry.variantId || 0);\n  if (!vid) return;\n  const meta = accessoryVariantMeta.get(Number(vid)) || null;\n  let price = meta ? Number(meta.priceCents || 0) : 0;\n  const pct = Number(entry.discountPercent || 0) || 0;\n  if (pct > 0 && price > 0) {\n    price = Math.round((price * (100 - pct)) / 100);\n  }\n  const qty = Number(entry.qty || 1) || 1;\n  sum += price * qty;\n});\n} catch (_e) { /* noop */ }\nreturn sum;\n};\nconst getCrashTotalCents = () => {\nconst id = Number(state.crashVariantId || 0);\nif (!id) return 0;\nconst meta = crashVariantMeta.get(id) || null;\nconst price = meta ? (Number(meta.priceCents || 0) || 0) : 0;\nconst plan = (state.crashPlan || 'standard').toString().trim();\nconst freeOpt = (crashFreeOption || 'none').toString().trim();\nif (freeOpt !== 'none' && plan === freeOpt && (plan === 'premium' || plan === 'unlimited')) {\nreturn 0;\n}\nreturn price;\n};\nconst ATC_DISCOUNT_ON = root.dataset.u1PdpAtcDiscount === 'true';\nconst ATC_DISCOUNT_CODE = (root.dataset.u1PdpAtcDiscountCode || '').trim();\nconst ATC_DISCOUNT_LABEL = (root.dataset.u1PdpAtcDiscountLabel || '').trim();\n/* Promo % (e.g. Prime Week): visual-only discount on the sticky CTA price.\n   Set per market via the section's \"Promo discount %\" setting. 0 = off. */\nconst PROMO_PCT = Math.max(0, Math.min(100, Number(root.dataset.u1PdpPromoPercent || 0) || 0));\nconst getMainCompareAtPriceCents = () => {\n/* Bundle mode */\nconst bv = _getBundleVariantNow();\nif (bv) {\nif (bv.compare_at_price && Number(bv.compare_at_price) > Number(bv.price || 0)) return Number(bv.compare_at_price) || 0;\nreturn 0;\n}\nconst id = Number(state.variantId || 0);\nlet vv = id ? (variants.find(v => v && Number(v.id) === id) || null) : null;\nif (!vv) vv = _fallbackVariantForModel() || variants.find(v => v && v.available) || variants[0] || null;\nif (vv && vv.compare_at_price && Number(vv.compare_at_price) > Number(vv.price || 0)) {\nreturn Number(vv.compare_at_price) || 0;\n}\nreturn 0;\n};\nconst updateAtcTotal = () => {\nif (!atcTotalEl) return;\nconst _activePack = root._packSelector && root._packSelector.getActiveBundlePack\n  ? root._packSelector.getActiveBundlePack() : null;\nconst _bundleAttr = root.getAttribute('data-u1-pdp-bundle-active') === 'true';\nconst _isBundleMode = !!(_activePack && _bundleAttr && (Number(_activePack.discountPercent || 0) > 0 || (_activePack.componentProducts && _activePack.componentProducts.length > 0)));\n/* In custom bundle mode: total = pack MSRP - discount% + non-bundle extras */\nlet total;\nif (_isBundleMode) {\n  /* Bundle mode: updateSummary handles CTA pricing \u2014 skip here */\n  return;\n} else {\n  total = getMainTotalCents() + getAccessoriesTotalCents() + getCrashTotalCents();\n}\ntry { root._u1AtcTotalCents = total; } catch (_e0) { /* noop */ }\n/* Free product: `total` includes the free item at full price (that's the\n   crossed-out \"with gift\" amount). The actual price subtracts the free value. */\nconst freeCents = getFreeAccessoriesTotalCents();\nconst finalCents = Math.max(0, total - freeCents);\nif (PROMO_PCT > 0) {\n/* Prime Week-style promo: show the price minus PROMO_PCT, struck original + Save */\nconst promoFinal = Math.round(finalCents * (100 - PROMO_PCT) / 100);\natcTotalEl.textContent = formatMoneyCents(promoFinal);\nroot._u1AtcMsrpTotalCents = finalCents;\nroot._u1AtcFixedSavedCents = Math.max(0, finalCents - promoFinal);\nroot._u1AtcFixedDiscountLabel = '';\n} else {\natcTotalEl.textContent = formatMoneyCents(finalCents);\n{\nconst compareCents = ATC_DISCOUNT_ON ? getMainCompareAtPriceCents() : 0;\nif (compareCents > 0) {\nconst extras = getAccessoriesTotalCents() + getCrashTotalCents();\nconst msrpTotal = (compareCents * getMainQty()) + extras;\nconst savedCents = msrpTotal - finalCents;\nif (savedCents > 0) {\nroot._u1AtcMsrpTotalCents = msrpTotal;\nroot._u1AtcFixedSavedCents = savedCents;\nroot._u1AtcFixedDiscountLabel = ATC_DISCOUNT_LABEL;\n} else {\nroot._u1AtcMsrpTotalCents = 0;\nroot._u1AtcFixedSavedCents = 0;\nroot._u1AtcFixedDiscountLabel = '';\n}\n} else if (freeCents > 0) {\n/* Free gift only: crossed = total (with gift), actual = total - gift value */\nroot._u1AtcMsrpTotalCents = total;\nroot._u1AtcFixedSavedCents = freeCents;\nroot._u1AtcFixedDiscountLabel = '';\n} else {\nroot._u1AtcMsrpTotalCents = 0;\nroot._u1AtcFixedSavedCents = 0;\nroot._u1AtcFixedDiscountLabel = '';\n}\n}\n}\nconst hasPriorDiscount = root._u1AtcMsrpTotalCents > 0;\nif (hasPriorDiscount) {\nconst msrp = root._u1AtcMsrpTotalCents;\nconst saved = root._u1AtcFixedSavedCents;\nif (atcTotalMsrpEl) {\natcTotalMsrpEl.textContent = formatMoneyCents(msrp);\natcTotalMsrpEl.setAttribute('aria-hidden', 'false');\n}\nif (atcTotalWrapEl) atcTotalWrapEl.classList.add('is-discount-on');\nif (atcSaveEl && saved > 0) {\nconst _discLabel = (root._u1AtcFixedDiscountLabel || ATC_DISCOUNT_LABEL || '').toString().trim();\natcSaveEl.textContent = `Save ${formatMoneyCents(saved)}`;\natcSaveEl.hidden = false;\natcSaveEl.setAttribute('aria-hidden', 'false');\n}\n} else {\nif (atcTotalMsrpEl) {\natcTotalMsrpEl.textContent = formatMoneyCents(total);\natcTotalMsrpEl.setAttribute('aria-hidden', 'true');\n}\nif (atcTotalWrapEl) atcTotalWrapEl.classList.remove('is-discount-on');\nif (atcSaveEl) { atcSaveEl.hidden = true; atcSaveEl.setAttribute('aria-hidden', 'true'); atcSaveEl.textContent = ''; }\n}\n};\nconst productWrap = root.querySelector('.u1-pdp-product');\nconst descEl = root.querySelector('[data-u1-pdp-desc]');\nconst moreBtn = root.querySelector('[data-u1-pdp-more]');\nconst state = {\nmodel: null, // template accessory: option value seleccionado (MODEL_HANDLE)\nvariantModel: null, // helmet_variant_model: variant option value seleccionado (ej: \"NEON SE\")\nsimpleModelOptionValue: null, // Model (Light) + Size: valor de la opci\u00F3n Model del variant elegido por card\nhelmetModel: null, // PDP helmet-visor: valor de la opci\u00F3n Helmet seleccionado (ej. \"AURA\", \"NEON\")\ncolor: null,\nsize: null,\nhelmetSize: null, // template accessory: \"fake\" helmet size selection\nrestposBottleVariantId: 0,\nrestposBottleColor: null,\nrestposModalShown: false,\nrestposModalClosed: false,\nvariantId: 0,\nmainQty: 1,\nmainQtyDiscount: null, // {code, percent, minQty}\nmodelQtyByVariantId: new Map(), // variantId -> qty (solo template light)\naccessories: new Map(), // handle -> {variantId, qty, syncSize}\ncrashPlan: 'standard', // standard (incluido), premium, unlimited\ncrashVariantId: 0, // variantId num\u00E9rico (solo premium/unlimited)\ngalleryIndex: 0,\n};\n// \u00DAltimo color elegido por modelo (variantModel \u2192 colorValue); persiste en sesi\u00F3n de p\u00E1gina\nconst colorMemory = new Map();\n// Init: variant model mode \u2014 read current model from selected variant\n// (inline logic: no usa IS_VARIANT_MODEL_MODE ni getVariantOptionByHandle\n//  porque esas const se declaran m\u00E1s abajo y causar\u00EDan TDZ)\nif (String(root.dataset.u1PdpVariantModelMode || '') === '1') {\ntry {\nconst _vmIdxInit = Number(String(root.dataset.u1PdpVariantModelOptionIndex ?? '').trim());\nconst _vmIdxOk = (Number.isFinite(_vmIdxInit) && _vmIdxInit >= 0 && _vmIdxInit <= 2) ? _vmIdxInit : -1;\nconst vmValuesEl = root.querySelector('[data-u1-pdp-variant-model-values]');\nconst vmValues = (safeJsonParse(vmValuesEl, '[]') || []).filter(v => typeof v === 'string' && v);\nconst _defaultModelOverride = (root.dataset.u1PdpDefaultModel || '').trim().replace(/\\s+/g, ' ');\nconst _dmoMatch = _defaultModelOverride ? vmValues.find(v => v.trim().replace(/\\s+/g, ' ') === _defaultModelOverride) : '';\nif (_dmoMatch && _vmIdxOk >= 0) {\nstate.variantModel = _dmoMatch;\nconst _dmVariant = variants.find(v => v && v.available !== false &&\n((_vmIdxOk === 0 ? v.option1 : _vmIdxOk === 1 ? v.option2 : v.option3) === _dmoMatch));\nif (_dmVariant) {\nstate.variantId = Number(_dmVariant.id);\n}\n} else {\nconst currentVId = CFG.initialVariantId;\nconst currentV = variants.find(v => v && Number(v.id) === Number(currentVId));\nif (currentV && _vmIdxOk >= 0) {\nconst _vmVal = _vmIdxOk === 0 ? (currentV.option1 || null)\n: _vmIdxOk === 1 ? (currentV.option2 || null)\n: (currentV.option3 || null);\nstate.variantModel = _vmVal || null;\n}\nif (!state.variantModel && vmValues.length) {\nstate.variantModel = vmValues[0];\n}\n}\nif (state.variantModel) {\n/* Force Mips manda: aunque la variante de la URL sea SE, el badge/overlay Mips no se apaga */\nroot.dataset.u1PdpIsMips = (String(root.dataset.u1PdpMipsForce || '') === '1' || /mips/i.test(state.variantModel)) ? '1' : '0';\n}\n/* Auto-click the default model button after full init */\nif (_defaultModelOverride && state.variantModel === _defaultModelOverride) {\nrequestAnimationFrame(() => { requestAnimationFrame(() => {\ntry {\nconst pmStep = root.querySelector('[data-u1-pdp-step=\"product_model\"]');\nif (pmStep) {\nconst btn = pmStep.querySelector('[data-u1-pdp-product-model-handle=\"' + CSS.escape(_defaultModelOverride) + '\"]');\nif (btn && !btn.classList.contains('is-selected')) btn.click();\n}\n} catch (_eDM) { /* noop */ }\n}); });\n}\n} catch (_eVM) { /* noop */ }\n}\nconst PLACEHOLDER_COLOR_TEXT = CFG.pickLabel;\nconst getRenderScale = () => {\n/* Smart Light: foto apaisada, con 0.8 quedaba gigante en modo insert */\nif (((root.dataset.u1PdpProductHandle || '').indexOf('smart-light') !== -1)) return 0.62;\nif (!HAS_SIZE_OPTION) return 0.8;\nconst base = 0.69984; // 0.6 * 1.08 * 1.08\nif (!state.size) return base;\nconst h = optionNameHandle(state.size);\nif (h === 'small' || h === 's') return 0.676512; // 0.58 * 1.08 * 1.08\nif (h === 'medium' || h === 'm') return base;\nif (h === 'large' || h === 'l') return 0.723168; // 0.62 * 1.08 * 1.08\nreturn base;\n};\nconst updateRenderScale = () => {\nroot.style.setProperty('--u1-pdp-render-scale', String(getRenderScale()));\n};\nconst buildColorGalleryMaps = (items) => {\nconst m = new Map();\nconst fin = new Map();\nif (!Array.isArray(items)) return { gallery: m, final: fin };\nitems.forEach((it) => {\nif (!it || !it.colorHandle || !it.src) return;\nconst h = String(it.colorHandle);\nconst isFinal = !!it.final;\nif (isFinal) {\nfin.set(h, { src: String(it.src), alt: String(it.alt || ''), lifestyle: false });\nreturn;\n}\nif (!m.has(h)) m.set(h, []);\nm.get(h).push({\nsrc: String(it.src),\nalt: String(it.alt || ''),\nlifestyle: !!it.lifestyle,\n});\n});\nreturn { gallery: m, final: fin };\n};\nconst { gallery: colorGalleryMap, final: colorFinalMap } = buildColorGalleryMaps(colorGalleryItems);\nconst buildVariantGalleryMaps = (items) => {\nconst m = new Map();\nconst fin = new Map();\nif (!Array.isArray(items)) return { gallery: m, final: fin };\nconst parseVariantIdLoose = (raw) => {\nconst s = (raw || '').toString().trim();\nif (!s) return 0;\nif (/^\\d+$/.test(s)) return Number(s);\nconst m1 = s.match(/(\\d+)\\s*$/);\nif (m1) return Number(m1[1]);\nconst m2 = s.match(/[?&]variant=(\\d+)/);\nif (m2) return Number(m2[1]);\ntry {\nconst decoded = atob(s);\nconst m3 = decoded.match(/(\\d+)\\s*$/) || decoded.match(/ProductVariant\\/(\\d+)/);\nif (m3) return Number(m3[1]);\n} catch (_e) { /* noop */ }\nreturn 0;\n};\nitems.forEach((it) => {\nif (!it || !it.src) return;\nconst rawKey =\n(typeof it.variantIdRaw !== 'undefined' && it.variantIdRaw !== null) ? it.variantIdRaw :\n(typeof it.variantId !== 'undefined' && it.variantId !== null) ? it.variantId :\n'';\nconst idNum = parseVariantIdLoose(rawKey) || Number(it.variantId || 0) || 0;\nif (!idNum) return;\nconst isFinal = !!it.final;\nif (isFinal) {\nfin.set(idNum, { src: String(it.src), alt: String(it.alt || ''), lifestyle: false });\nreturn;\n}\nif (!m.has(idNum)) m.set(idNum, []);\nm.get(idNum).push({\nsrc: String(it.src),\nalt: String(it.alt || ''),\nlifestyle: !!it.lifestyle,\n});\n});\nreturn { gallery: m, final: fin };\n};\nconst { gallery: variantGalleryMap, final: variantFinalMap } = buildVariantGalleryMaps(variantGalleryItems);\nconst hasCustomGallery = !!(\n(simpleGallerySlides && simpleGallerySlides.length > 0) ||\ndefaultGalleryVideoSrc ||\ndefaultGallerySrc ||\n(colorGalleryMap && colorGalleryMap.size > 0) ||\n(colorFinalMap && colorFinalMap.size > 0) ||\n(variantGalleryMap && variantGalleryMap.size > 0) ||\n(variantFinalMap && variantFinalMap.size > 0)\n);\nconst initialMediaColorValue = (() => {\ntry {\nconst firstBtn = (Array.isArray(colorButtons) ? colorButtons : []).find((b) => !!(b && b.dataset && b.dataset.u1PdpValue));\nconst v = firstBtn ? String(firstBtn.dataset.u1PdpValue || '') : '';\nif (v) return v;\n} catch (_e) { /* noop */ }\ntry {\nconst firstItem = (Array.isArray(colorGalleryItems) ? colorGalleryItems : [])[0];\nreturn firstItem && firstItem.color ? String(firstItem.color) : '';\n} catch (_e2) { return ''; }\n})();\nconst insideBoxMap = (() => {\nconst m = new Map();\ntry {\n(Array.isArray(insideBoxItems) ? insideBoxItems : []).forEach((it) => {\nif (!it || !it.colorHandle || !it.src) return;\nm.set(String(it.colorHandle), { src: String(it.src), alt: String(it.alt || '') });\n});\n} catch (_e) { /* noop */ }\nreturn m;\n})();\nconst insideBoxVariantMap = (() => {\nconst m = new Map();\ntry {\n(Array.isArray(insideBoxVariantItems) ? insideBoxVariantItems : []).forEach((it) => {\nconst vid = Number(it && it.variantId ? it.variantId : 0) || 0;\nif (!vid || !it || !it.src) return;\nm.set(vid, { src: String(it.src), alt: String(it.alt || '') });\n});\n} catch (_e2) { /* noop */ }\nreturn m;\n})();\nconst getInsideBoxImageForVariant = (variantId) => {\nconst idNum = Number(variantId || 0) || 0;\nif (!idNum) return null;\nif (insideBoxVariantMap && insideBoxVariantMap.has(idNum)) return insideBoxVariantMap.get(idNum);\nreturn null;\n};\nconst getInsideBoxImageForColor = (colorValue) => {\nconst h = optionNameHandle(colorValue);\nif (!h) return { src: '', alt: '' };\nif (insideBoxMap && insideBoxMap.has(h)) return insideBoxMap.get(h);\nconst imgs = (colorGalleryMap && colorGalleryMap.has(h)) ? colorGalleryMap.get(h) : null;\nconst first = imgs && imgs.length ? imgs[0] : null;\nif (first && first.src) return { src: String(first.src), alt: String(first.alt || '') };\nreturn { src: '', alt: '' };\n};\n/* Bundle cards price sync: en templates con cap\u00EDtulo Model (ej. Smart Light),\n   el precio base de las cards del bundle picker (card solo + bundles) se renderiza\n   en Liquid con el modelo DEFAULT (ej. Smart Light $90). Cuando el usuario elige\n   otro modelo (ej. Pro Dual $175) hay que recalcular el precio en JS: la card solo\n   pasa a valer el precio del modelo, y en las cards de bundle el MSRP/final usan\n   el precio del modelo + los componentes (delta = msrp - mainProductPriceMin). El\n   % de descuento no cambia. Solo aplica cuando hay m\u00E1s de un modelo (varios precios). */\nlet _u1BundlePacksCache = null;\nconst _u1GetBundlePacks = () => {\n  if (_u1BundlePacksCache) return _u1BundlePacksCache;\n  try {\n    const el = root.querySelector('[data-u1-pdp-bundle-packs]');\n    _u1BundlePacksCache = el ? (JSON.parse(el.textContent || '[]') || []) : [];\n  } catch (_e) { _u1BundlePacksCache = []; }\n  return _u1BundlePacksCache;\n};\nconst syncBundleCardPricesToModel = () => {\n  try {\n    const picker = root.querySelector('[data-u1-pdp-bundle-picker]');\n    if (!picker) return;\n    /* Solo tiene sentido cuando el precio base depende del modelo elegido\n       (cap\u00EDtulo Model con varias variantes). Si no hay model buttons, no tocar. */\n    if (!Array.isArray(modelButtons) || modelButtons.length < 2) return;\n    /* Precio del modelo elegido = precio de la variante de la model card seleccionada\n       (estable, no depende de qu\u00E9 bundle est\u00E9 seleccionado). */\n    const _selModel = root.querySelector('[data-u1-pdp-model].is-selected') || root.querySelector('[data-u1-pdp-model][aria-pressed=\"true\"]');\n    let modelUnit = 0;\n    if (_selModel) {\n      const _mvid = Number(_selModel.getAttribute('data-u1-pdp-model-variant-id') || 0) || 0;\n      const _mv = _mvid ? variants.find(v => v && Number(v.id) === _mvid) : null;\n      if (_mv && typeof _mv.price !== 'undefined') modelUnit = Number(_mv.price) || 0;\n    }\n    if (modelUnit <= 0) modelUnit = Number(getMainPriceCents() || 0) || 0;\n    if (modelUnit <= 0) return;\n    const byHandle = {};\n    _u1GetBundlePacks().forEach(p => { if (p && p.packHandle) byHandle[p.packHandle] = p; });\n    const cards = picker.querySelectorAll('[data-u1-pdp-bundle-card]');\n    cards.forEach(card => {\n      const isSolo = card.classList.contains('u1-pdp-bundle-card--solo');\n      if (isSolo) {\n        /* La solo puede traer descuento visual (promo_percent, ej. labor day):\n           msrp/final/save deben seguir al MODELO elegido, no al precio minimo */\n        const sPk = _u1GetBundlePacks().find(p => p && p.isSolo) || null;\n        const sDisc = sPk ? (Number(sPk.discountPercent || 0) || 0) : 0;\n        const sFinal = sDisc > 0 ? Math.round(modelUnit * (100 - sDisc) / 100) : modelUnit;\n        const sMsrpEl = card.querySelector('.u1-pdp-card__price-msrp');\n        if (sMsrpEl) sMsrpEl.textContent = formatMoneyCents(modelUnit);\n        const sSaveEl = card.querySelector('.u1-pdp-bundle-card__save');\n        if (sSaveEl && sDisc > 0) sSaveEl.textContent = 'Save ' + formatMoneyCents(modelUnit - sFinal);\n        const finalEl = card.querySelector('.u1-pdp-card__price-final');\n        if (finalEl) { finalEl.textContent = formatMoneyCents(sFinal); return; }\n        const pe = card.querySelector('.u1-pdp-card__price');\n        if (pe) pe.textContent = formatMoneyCents(sFinal);\n        return;\n      }\n      const bp = byHandle[card.getAttribute('data-pack-handle') || ''];\n      if (!bp) return;\n      const compDelta = Math.max(0, Number(bp.msrp || 0) - Number(bp.mainProductPriceMin || 0));\n      const newMsrp = modelUnit + compDelta;\n      const disc = Number(bp.discountPercent || 0) || 0;\n      const _gc = _u1PackGiftCents(bp);\n      const newFinal = disc > 0 ? ((newMsrp - _gc) * (100 - disc) / 100) : (newMsrp - _gc);\n      const msrpEl = card.querySelector('.u1-pdp-card__price-msrp');\n      const finalEl = card.querySelector('.u1-pdp-card__price-final');\n      if (msrpEl) msrpEl.textContent = formatMoneyCents(newMsrp);\n      if (finalEl) finalEl.textContent = formatMoneyCents(newFinal);\n      const saveEl2 = card.querySelector('.u1-pdp-bundle-card__save');\n      if (saveEl2 && disc > 0) saveEl2.textContent = 'Save ' + formatMoneyCents(Math.max(0, Math.round(newMsrp) - Math.round(newFinal)));\n      if (!finalEl && !msrpEl) {\n        const pe = card.querySelector('.u1-pdp-card__price');\n        if (pe) pe.textContent = formatMoneyCents(newMsrp);\n      }\n    });\n  } catch (_e) { /* noop */ }\n};\nconst emitPdpSelection = () => {\ntry {\nconst v = variants.find(v => v && Number(v.id) === Number(state && state.variantId ? state.variantId : 0)) || null;\nconst vImg = (() => {\ntry {\nif (!v) return { src: '', alt: '' };\nconst fi = v.featured_image || v.featuredImage || null;\nconst src =\nfi && typeof fi === 'object' && fi.src ? String(fi.src || '') :\nfi && typeof fi === 'string' ? String(fi || '') :\n'';\nconst alt =\nfi && typeof fi === 'object' && fi.alt ? String(fi.alt || '') :\n'';\nreturn { src, alt };\n} catch (_e) { return { src: '', alt: '' }; }\n})();\nconst variantTitle = (() => {\ntry {\nif (!v) return '';\nconst raw = (v.public_title || v.title || '').toString().trim();\nconst lower = raw.toLowerCase();\nif (raw && lower !== 'default title') return raw;\nconst o1 = (v.option1 || v.option_1 || '').toString().trim();\nconst o2 = (v.option2 || v.option_2 || '').toString().trim();\nconst o3 = (v.option3 || v.option_3 || '').toString().trim();\nconst parts = [o1, o2, o3].filter(Boolean);\nreturn parts.length ? parts.join(' \u00B7 ') : raw;\n} catch (_e2) { return ''; }\n})();\nconst vidItb = Number(state && state.variantId ? state.variantId : 0) || 0;\nconst itbVar = vidItb ? getInsideBoxImageForVariant(vidItb) : null;\nconst baseColorForMedia = (state && state.color) ? state.color : (initialMediaColorValue || '');\nconst itbColor = baseColorForMedia ? getInsideBoxImageForColor(baseColorForMedia) : { src: '', alt: '' };\nlet box = (itbVar && itbVar.src) ? itbVar : itbColor;\n/* helmet_models switch (e.g. FARO normal vs FARO MIPS): the ITB per-variant/color\n   image map only covers the base product, so when a different model product is\n   active fall back to the selected variant's featured image \u2014 otherwise Inside the\n   Box keeps showing the base (MIPS) product image. */\nif ((!box || !box.src) && String(mainProductHandle || '') !== U1_BASE_PRODUCT_HANDLE && vImg && vImg.src) {\nbox = vImg;\n}\nconst payload = {\nsectionId: String(sectionId || ''),\nproductHandle: String(mainProductHandle || ''),\nproductTitle: String(mainProductTitle || ''),\nmodel: state && state.model ? String(state.model) : '',\ncolor: state && state.color ? String(state.color) : '',\nsize: state && state.size ? String(state.size) : '',\nhelmetSize: state && state.helmetSize ? String(state.helmetSize) : '',\nvariantId: Number(state && state.variantId ? state.variantId : 0) || 0,\nvariantTitle: String(variantTitle || ''),\nboxSrc: box && box.src ? String(box.src) : '',\nboxAlt: box && box.alt ? String(box.alt) : '',\n};\nwindow.__u1PdpSelection = payload;\nwindow.dispatchEvent(new CustomEvent('u1:pdp:selection', { detail: payload }));\n/* Bundle variant gate: la chapter de bundle solo se muestra cuando la model card\n   seleccionada es una de las variantes permitidas (ej: Pro Dual en Smart Light).\n   Vac\u00EDo = sin restricci\u00F3n (comportamiento normal en las dem\u00E1s PDPs).\n   Sin modelo elegido todav\u00EDa \u2192 oculta (primero se elige modelo). */\ntry {\nconst _bvRaw = (root.getAttribute('data-u1-pdp-bundle-only-variants') || '').trim();\nconst _bvStep = root.querySelector('[data-u1-pdp-step=\"bundle\"]');\nif (_bvStep) {\nif (!_bvRaw) {\n/* Sin lista propia manda el gate por modelo (required_model_handle) */\nconst _gateOff = root.dataset.u1PackGateHidden === '1';\n_bvStep.hidden = _gateOff;\n_bvStep.setAttribute('aria-hidden', _gateOff ? 'true' : 'false');\n} else {\nconst _bvAllowed = _bvRaw.split(',').map(s => s.trim()).filter(Boolean);\nconst _bvSel = root.querySelector('[data-u1-pdp-model].is-selected') || root.querySelector('[data-u1-pdp-model][aria-pressed=\"true\"]');\nconst _bvId = _bvSel ? String(_bvSel.getAttribute('data-u1-pdp-model-variant-id') || '') : '';\nconst _bvShow = _bvId !== '' && _bvAllowed.indexOf(_bvId) !== -1;\n_bvStep.hidden = !_bvShow;\n_bvStep.setAttribute('aria-hidden', _bvShow ? 'false' : 'true');\n}\n}\n} catch (_ebv) { /* noop */ }\n/* Sincronizar el precio de las cards del bundle picker con el modelo elegido. */\ntry { syncBundleCardPricesToModel(); } catch (_ebp) { /* noop */ }\n} catch (_e) { /* noop */ }\n};\nconst refreshSlides = () => {\nslides = Array.from(root.querySelectorAll('[data-u1-pdp-slide]'));\n};\nconst galleryViewport = root.querySelector('.u1-pdp-customizer__gallery-viewport');\nconst galleryLoaderEl = root.querySelector('[data-u1-pdp-gallery-loader]');\nconst galleryPagerEl = root.querySelector('[data-u1-pdp-gallery-pager]');\nlet galleryLoadingCount = 0;\nconst updateGalleryLoaderUi = () => {\nif (!galleryViewport) return;\nconst on = (Number(galleryLoadingCount || 0) || 0) > 0;\ngalleryViewport.classList.toggle('is-loading', on);\ntry { galleryViewport.setAttribute('aria-busy', on ? 'true' : 'false'); } catch (_e) { /* noop */ }\ntry { if (galleryLoaderEl) galleryLoaderEl.setAttribute('aria-hidden', on ? 'false' : 'true'); } catch (_e2) { /* noop */ }\n};\nconst forceEndGalleryLoadingSoon = (timeoutMs = 2600) => {\nif (TEMPLATE !== 'light') return;\nconst token = String((Number(root._u1ForceLoadToken || '0') || 0) + 1);\nroot._u1ForceLoadToken = token;\nwindow.setTimeout(() => {\nif (String(root._u1ForceLoadToken || '') !== token) return;\ngalleryLoadingCount = 0;\nupdateGalleryLoaderUi();\n}, Math.max(300, Number(timeoutMs) || 2600));\n};\nconst beginGalleryLoading = () => {\ngalleryLoadingCount += 1;\nupdateGalleryLoaderUi();\ntry { if (TEMPLATE === 'light') forceEndGalleryLoadingSoon(1800); } catch (_e) { /* noop */ }\nlet done = false;\nreturn () => {\nif (done) return;\ndone = true;\ngalleryLoadingCount = Math.max(0, (Number(galleryLoadingCount || 0) || 0) - 1);\nupdateGalleryLoaderUi();\n};\n};\nconst watchImgForLoader = (img) => {\nif (!img) return;\ntry {\nif (img.dataset && img.dataset.u1LoaderWatch === '1') return;\n} catch (_e) { /* noop */ }\nif (img.complete && (img.naturalWidth || 0) > 0) return;\ntry { if (img.dataset) img.dataset.u1LoaderWatch = '1'; } catch (_e2) { /* noop */ }\nconst end = beginGalleryLoading();\nlet settled = false;\nconst finish = () => {\nif (settled) return;\nsettled = true;\nend();\n};\ntry { img.addEventListener('load', finish, { once: true }); } catch (_e) { /* noop */ }\ntry { img.addEventListener('error', finish, { once: true }); } catch (_e2) { /* noop */ }\nwindow.setTimeout(finish, 2500);\n};\nconst galleryBaseLayer = (() => {\nif (!galleryViewport) return null;\nlet el = galleryViewport.querySelector('.u1-pdp-customizer__gallery-base');\nif (el && el.tagName && String(el.tagName).toLowerCase() === 'img') {\nconst next = document.createElement('div');\nnext.className = 'u1-pdp-customizer__gallery-base';\nnext.setAttribute('aria-hidden', 'true');\nnext.style.opacity = '0';\ntry { el.replaceWith(next); } catch (_e) { galleryViewport.appendChild(next); try { el.remove(); } catch (_e2) {} }\nel = next;\n}\nif (!el) {\nel = document.createElement('div');\nel.className = 'u1-pdp-customizer__gallery-base';\nel.setAttribute('aria-hidden', 'true');\nel.style.opacity = '0';\ngalleryViewport.appendChild(el);\n}\nconst ensureKind = (lifestyle) => {\nconst wantLife = !!lifestyle;\nconst prev = String(el.dataset.u1Lifestyle || '');\nconst prevLife = prev === '1';\nif (prev && prevLife === wantLife && el.querySelector('img')) return;\nel.dataset.u1Lifestyle = wantLife ? '1' : '0';\nel.innerHTML = wantLife\n? `\n<div class=\"u1-pdp-customizer__gallery-media u1-pdp-customizer__gallery-media--lifestyle\">\n<img class=\"u1-pdp-customizer__gallery-img\" alt=\"\" decoding=\"async\" loading=\"eager\" width=\"2000\" height=\"2000\">\n</div>\n`\n: `\n<div class=\"u1-pdp-customizer__gallery-media u1-pdp-customizer__gallery-media--render\">\n<div class=\"u1-pdp-customizer__gallery-square\">\n<img class=\"u1-pdp-customizer__gallery-img\" alt=\"\" decoding=\"async\" loading=\"eager\" width=\"2000\" height=\"2000\">\n</div>\n</div>\n`;\n};\nensureKind(false);\nconst getImg = () => el.querySelector('img');\nreturn { el, ensureKind, getImg };\n})();\nroot._u1GalleryBase = galleryBaseLayer;\nconst updateDesktopPager = () => {\nif (!galleryPagerEl) return;\nconst uxMode = String(root._u1GalleryUxMode || 'normal');\nconst should = !!(isDesktop && uxMode === 'normal' && slides.length > 1);\nif (!should) {\ngalleryPagerEl.innerHTML = '';\ntry { delete galleryPagerEl.dataset.u1Count; } catch (_e) { /* noop */ }\ngalleryPagerEl.classList.remove('is-visible');\ngalleryPagerEl.setAttribute('aria-hidden', 'true');\nreturn;\n}\nconst count = slides.length;\nconst active = Math.min(count - 1, Math.max(0, Number(state.galleryIndex || 0) || 0));\nconst prevCount = Number(galleryPagerEl.dataset.u1Count || 0) || 0;\nconst existingBtns = Array.from(galleryPagerEl.querySelectorAll('button[data-u1-idx]'));\nconst needsRebuild = prevCount !== count || existingBtns.length !== count;\nif (needsRebuild) {\ngalleryPagerEl.dataset.u1Count = String(count);\ngalleryPagerEl.innerHTML = Array.from({ length: count }).map((_, i) => {\nconst current = i === active ? 'true' : 'false';\nreturn `<button type=\"button\" class=\"u1-pdp-gallery-dot\" data-u1-idx=\"${i}\" aria-current=\"${current}\" aria-label=\"Slide ${i + 1}\"></button>`;\n}).join('');\n} else {\nexistingBtns.forEach((b, i) => b.setAttribute('aria-current', (i === active) ? 'true' : 'false'));\n}\nif (!galleryPagerEl._u1Bound) {\ngalleryPagerEl._u1Bound = true;\ngalleryPagerEl.addEventListener('click', (e) => {\nconst t = e.target;\nconst btn = t && t.closest ? t.closest('button[data-u1-idx]') : null;\nif (!btn) return;\nconst ux = String(root._u1GalleryUxMode || 'normal');\nif (!isDesktop || ux !== 'normal') return;\nconst idx = Number(btn.dataset.u1Idx || 0) || 0;\nscrollGalleryToIndex(idx);\n});\n}\ngalleryPagerEl.classList.add('is-visible');\ngalleryPagerEl.setAttribute('aria-hidden', 'false');\n};\nconst U1_ASSET_URL_TEMPLATE = CFG.stylesUrl;\nconst assetUrlFor = (filename) => {\nconst f = (filename || '').toString().trim();\nif (!f) return '';\nconst tpl = (U1_ASSET_URL_TEMPLATE || '').toString();\nif (!tpl) return '';\nreturn tpl.replace(/\\/assets\\/[^?]+/, `/assets/${f.replace(/^\\//, '')}`);\n};\nconst U1_FILES_URL_BASE = (() => {\ntry {\nconst html = document.documentElement ? String(document.documentElement.innerHTML || '') : '';\nconst m = html.match(/(https?:\\/\\/[^\"'\\\\s]+\\/s\\/files\\/[^\"'\\\\s]+?)\\/files\\//i);\nif (m && m[1]) return { base: String(m[1]) };\nconst m2 = html.match(/(https?:\\/\\/[^\"'\\\\s]+\\/cdn\\/shop)\\/files\\//i);\nif (m2 && m2[1]) return { base: String(m2[1]) };\n} catch (_e) { /* noop */ }\ntry {\nconst origin = (window && window.location && window.location.origin) ? String(window.location.origin) : '';\nif (origin) return { base: `${origin}/cdn/shop` };\n} catch (_e2) { /* noop */ }\nreturn { base: '' };\n})();\n/* srcset responsivo para imgs de galeria creadas por JS: mismas URLs variando width.\n   El navegador elige (mobile retina ~750, desktop retina ~1100) en vez del 1400 fijo. */\nconst U1_GALLERY_SIZES = '(min-width: 750px) 520px, 100vw';\nconst u1GallerySrcset = (src) => {\n  const s = (src || '').toString();\n  if (!/[?&]width=\\d+/.test(s)) return '';\n  return [480, 750, 1100, 1400].map((w) => s.replace(/([?&]width=)\\d+/, '$1' + w) + ' ' + w + 'w').join(', ');\n};\nconst u1ApplyGallerySrcset = (img, src) => {\n  try {\n    const ss = u1GallerySrcset(src);\n    if (ss) { img.setAttribute('srcset', ss); img.setAttribute('sizes', U1_GALLERY_SIZES); }\n    else { img.removeAttribute('srcset'); img.removeAttribute('sizes'); }\n  } catch (_e) { /* noop */ }\n};\nconst filesUrlFor = (filename) => {\nconst f = (filename || '').toString().trim().replace(/^\\//, '');\nif (!f) return '';\nconst base = (U1_FILES_URL_BASE && U1_FILES_URL_BASE.base) ? String(U1_FILES_URL_BASE.base) : '';\nif (!base) return '';\nreturn `${base}/files/${encodeURIComponent(f)}?width=1600`;\n};\nconst u1ImgPreload = (() => {\nconst cache = new Map(); // src -> Promise\nconst preload = (src) => {\nconst s = (src || '').toString();\nif (!s) return Promise.resolve();\nif (cache.has(s)) return cache.get(s);\nconst p = new Promise((resolve) => {\nconst img = new Image();\nimg.decoding = 'async';\nconst done = () => resolve();\nimg.addEventListener('load', done, { once: true });\nimg.addEventListener('error', done, { once: true });\nu1ApplyGallerySrcset(img, s); /* srcset ANTES de src: asignar src primero dispara la descarga del 1400 antes de que el srcset exista */\nimg.src = s;\ntry {\nif (typeof img.decode === 'function') img.decode().then(done).catch(done);\n} catch (_e) { /* noop */ }\nwindow.setTimeout(done, 1600);\n});\ncache.set(s, p);\nreturn p;\n};\nreturn { preload };\n})();\nconst u1PreloadGalleryImageList = (list) => {\nconst urls = [];\ntry {\n(Array.isArray(list) ? list : []).forEach((item) => {\nif (!item || String(item.type || '') === 'video' || !item.src) return;\nconst u = String(item.src || '').trim();\nif (u && !urls.includes(u)) urls.push(u);\n});\n} catch (_e) { /* noop */ }\nif (!urls.length) return Promise.resolve();\nreturn Promise.all(urls.map((u) => u1ImgPreload.preload(u)));\n};\nconst u1WaitGalleryImgPaintReady = (imgEl, timeoutMs) => {\nconst t = Math.max(200, Number(timeoutMs) || 1200);\nreturn new Promise((resolve) => {\nlet done = false;\nconst finish = () => { if (done) return; done = true; resolve(); };\nwindow.setTimeout(finish, t);\nif (!imgEl) { finish(); return; }\ntry {\nif (imgEl.complete && (imgEl.naturalWidth || 0) > 0) {\nif (typeof imgEl.decode === 'function') {\nimgEl.decode().then(finish).catch(finish);\n} else {\nfinish();\n}\nreturn;\n}\n} catch (_e0) { /* noop */ }\nimgEl.addEventListener('load', finish, { once: true });\nimgEl.addEventListener('error', finish, { once: true });\n});\n};\nconst u1ImgExists = (() => {\nconst cache = new Map(); // src -> Promise<boolean>\nconst check = (src) => {\nconst s = (src || '').toString();\nif (!s) return Promise.resolve(false);\nif (cache.has(s)) return cache.get(s);\nconst p = new Promise((resolve) => {\nconst img = new Image();\nimg.decoding = 'async';\nimg.addEventListener('load', () => resolve(true), { once: true });\nimg.addEventListener('error', () => resolve(false), { once: true });\nu1ApplyGallerySrcset(img, s); /* srcset ANTES de src (ver u1ImgPreload) */\nimg.src = s;\ntry {\nif (typeof img.decode === 'function') img.decode().then(() => resolve(true)).catch(() => resolve(false));\n} catch (_e) { /* noop */ }\nwindow.setTimeout(() => resolve(false), 2500);\n});\ncache.set(s, p);\nreturn p;\n};\nreturn { check };\n})();\nconst galleryModeLayers = (() => {\nif (!galleryViewport) return { wrap: null, active: null, preview: null };\nlet wrap = galleryViewport.querySelector('.u1-pdp-customizer__gallery-mode');\nif (!wrap) {\nwrap = document.createElement('div');\nwrap.className = 'u1-pdp-customizer__gallery-mode';\nwrap.setAttribute('aria-hidden', 'true');\ngalleryViewport.appendChild(wrap);\n}\nconst createLayer = (kind) => {\nconst layer = document.createElement('div');\nlayer.className = `u1-pdp-customizer__gallery-mode-layer u1-pdp-customizer__gallery-mode-layer--${kind}`;\nlayer.setAttribute('aria-hidden', 'true');\nlayer.innerHTML = `\n<div class=\"u1-pdp-customizer__gallery-media u1-pdp-customizer__gallery-media--render\">\n<div class=\"u1-pdp-customizer__gallery-square\">\n<img class=\"u1-pdp-customizer__gallery-img\" alt=\"\" decoding=\"async\" loading=\"eager\" width=\"2000\" height=\"2000\">\n</div>\n</div>\n`;\nwrap.appendChild(layer);\nconst img = layer.querySelector('img');\nif (img) {\nimg.addEventListener('error', () => { try { img.style.visibility = 'hidden'; } catch (_e) {} }, { passive: true });\nimg.addEventListener('load', () => { try { img.style.visibility = ''; } catch (_e) {} }, { passive: true });\n}\nreturn { layer, img, token: 0 };\n};\nconst active = wrap.querySelector('.u1-pdp-customizer__gallery-mode-layer--active') || createLayer('active').layer;\nconst preview = wrap.querySelector('.u1-pdp-customizer__gallery-mode-layer--preview') || createLayer('preview').layer;\nconst activeImg = active.querySelector('img');\nconst previewImg = preview.querySelector('img');\nreturn {\nwrap,\nactive: { el: active, img: activeImg, token: 0 },\npreview: { el: preview, img: previewImg, token: 0 },\n};\n})();\nroot._u1GalleryModeLayers = galleryModeLayers;\n\nconst galleryMipsOverlay = (() => {\nif (!galleryViewport) return { img: null };\nlet img = galleryViewport.querySelector('img.u1-pdp-customizer__gallery-mips-overlay');\nif (!img) {\nimg = document.createElement('img');\nimg.className = 'u1-pdp-customizer__gallery-mips-overlay';\nimg.setAttribute('alt', '');\nimg.setAttribute('aria-hidden', 'true');\nimg.decoding = 'async';\ntry { img.loading = 'eager'; } catch (_e) { /* noop */ }\nimg.hidden = true;\nimg.addEventListener('error', () => {\ntry { img.hidden = true; } catch (_e0) { /* noop */ }\ntry { img.setAttribute('aria-hidden', 'true'); } catch (_e1) { /* noop */ }\ntry { img.style.display = 'none'; } catch (_e2) { /* noop */ }\ntry { img.removeAttribute('src'); } catch (_e3) { /* noop */ }\n}, { passive: true });\ngalleryViewport.appendChild(img);\n}\nreturn { img, resolved: new Map(), resolving: new Set() };\n})();\nroot._u1GalleryMipsOverlay = galleryMipsOverlay;\n\n// Overlay para accessories de tipo \"insert\" (ej: Rain Plugs) \u2014 z-index sobre el remote\nconst galleryInsertOverlay = (() => {\nif (!galleryViewport) return { img: null };\nlet img = galleryViewport.querySelector('img.u1-pdp-customizer__gallery-insert-overlay');\nif (!img) {\nimg = document.createElement('img');\nimg.className = 'u1-pdp-customizer__gallery-insert-overlay';\nimg.setAttribute('alt', '');\nimg.setAttribute('aria-hidden', 'true');\nimg.decoding = 'async';\ntry { img.loading = 'eager'; } catch (_e) { /* noop */ }\nimg.hidden = true;\nimg.addEventListener('error', () => {\ntry { img.hidden = true; } catch (_e0) { /* noop */ }\ntry { img.setAttribute('aria-hidden', 'true'); } catch (_e1) { /* noop */ }\ntry { img.removeAttribute('src'); } catch (_e2) { /* noop */ }\n}, { passive: true });\ngalleryViewport.appendChild(img);\n}\nreturn { img };\n})();\nroot._u1GalleryInsertOverlay = galleryInsertOverlay;\n\nconst galleryRemoteMipsBadge = (() => {\nif (!galleryViewport) return { img: null };\nlet img = galleryViewport.querySelector('img.u1-pdp-customizer__gallery-remote-mips-badge');\nif (!img) {\nimg = document.createElement('img');\nimg.className = 'u1-pdp-customizer__gallery-remote-mips-badge';\nimg.setAttribute('alt', '');\nimg.setAttribute('aria-hidden', 'true');\nimg.decoding = 'async';\ntry { img.loading = 'eager'; } catch (_e) { /* noop */ }\nimg.hidden = true;\nimg.addEventListener('error', () => {\ntry { img.hidden = true; } catch (_e0) { /* noop */ }\ntry { img.setAttribute('aria-hidden', 'true'); } catch (_e1) { /* noop */ }\ntry { img.style.display = 'none'; } catch (_e2) { /* noop */ }\ntry { img.removeAttribute('src'); } catch (_e3) { /* noop */ }\n}, { passive: true });\ngalleryViewport.appendChild(img);\n}\nreturn { img, resolved: new Map(), resolving: new Set() };\n})();\nroot._u1GalleryRemoteMipsBadge = galleryRemoteMipsBadge;\n\nconst setModeLayerVisible = (layer, visible) => {\nif (!layer || !layer.el) return;\nlayer.el.classList.toggle('is-visible', !!visible);\n};\nconst setModeLayerSrc = (layer, src, { eager } = { eager: true }) => {\nif (!layer || !layer.img) return Promise.resolve(false);\nconst s = (src || '').toString();\nif (!s) {\ntry { layer.img.removeAttribute('src'); } catch (_e) { /* noop */ }\nu1ApplyGallerySrcset(layer.img, ''); /* limpiar srcset/sizes: si quedan, el navegador sigue mostrando la imagen vieja del srcset */\nreturn Promise.resolve(false);\n}\ntry { layer.img.loading = eager ? 'eager' : 'lazy'; } catch (_e) { /* noop */ }\nif (layer.img.getAttribute('src') === s) return Promise.resolve(true);\nu1ApplyGallerySrcset(layer.img, s); /* srcset ANTES de src (ver u1ImgPreload) */\nlayer.img.setAttribute('src', s);\nreturn Promise.resolve(true);\n};\nconst fadeModeLayerToSrc = (layer, src, { durationMs = 219 } = { durationMs: 219 }) => {\nif (!layer || !layer.el || !layer.img) return;\nlayer.token += 1;\nconst token = layer.token;\nconst s = (src || '').toString();\nif (!s) {\nsetModeLayerVisible(layer, false);\nreturn;\n}\nconst wasVisible = layer.el.classList.contains('is-visible');\nif (wasVisible) {\nlayer.el.style.transitionDuration = `${durationMs}ms`;\nsetModeLayerVisible(layer, false);\n}\nconst waitForImgReady = (img, timeoutMs = 1600) => {\nif (!img) return Promise.resolve();\ntry {\nif (img.complete && (img.naturalWidth || 0) > 0) {\nif (typeof img.decode === 'function') return img.decode().catch(() => {});\nreturn Promise.resolve();\n}\n} catch (_e0) { /* noop */ }\nreturn new Promise((resolve) => {\nlet done = false;\nconst finish = () => {\nif (done) return;\ndone = true;\nresolve();\n};\ntry { img.addEventListener('load', finish, { once: true }); } catch (_e) { /* noop */ }\ntry { img.addEventListener('error', finish, { once: true }); } catch (_e2) { /* noop */ }\ntry {\nif (typeof img.decode === 'function') img.decode().then(finish).catch(() => {});\n} catch (_e3) { /* noop */ }\nwindow.setTimeout(finish, timeoutMs);\n});\n};\nconst doSwap = () => {\nif (layer.token !== token) return;\nsetModeLayerSrc(layer, s, { eager: true });\nconst endLoading = beginGalleryLoading();\ntry { u1ImgPreload.preload(s); } catch (_eP) { /* noop */ }\nwaitForImgReady(layer.img, 1800)\n.then(() => {\nif (layer.token !== token) return;\nif (layer.img && !layer.img.naturalWidth) return;\nlayer.el.style.transitionDuration = `${durationMs}ms`;\nsetModeLayerVisible(layer, true);\n})\n.catch(() => {})\n.finally(() => endLoading());\n};\nif (wasVisible) window.setTimeout(doSwap, durationMs + 10);\nelse doSwap();\n};\nconst getGalleryImagesForColor = (colorValue) => {\nif (!hasCustomGallery) return null;\nconst h = optionNameHandle(colorValue);\nconst imgs = (h && colorGalleryMap.has(h)) ? colorGalleryMap.get(h) : null;\nif (imgs && imgs.length > 0) return imgs;\nif (!colorValue && simpleGallerySlides && simpleGallerySlides.length > 0) {\nconst out = simpleGallerySlides.map((it) => ({\ntype: 'image',\nsrc: String((it && it.src) ? it.src : ''),\nalt: String((it && it.alt) ? it.alt : ''),\nlifestyle: !!(it && it.lifestyle),\n})).filter((it) => it.src);\nif (out.length > 0) return out;\n}\nif (!colorValue && defaultGalleryVideoSrc) {\nconst mode = (defaultGalleryVideoMode === 'lifestyle' || defaultGalleryVideoMode === 'cover') ? 'cover' : 'contain';\nreturn [{\ntype: 'video',\nsrc: defaultGalleryVideoSrc,\nposter: defaultGalleryVideoPoster || '',\nfit: mode,\n}];\n}\nif (!colorValue && defaultGallerySrc) return [{ type: 'image', src: defaultGallerySrc, alt: defaultGalleryAlt || '', lifestyle: !!defaultGalleryIsLifestyle }];\nreturn null;\n};\nconst updateMobileHeroImage = (imgs) => {\n/* Hero image stays fixed \u2014 never changes on color/variant/bundle selection */\nreturn;\n};\nconst getGalleryImagesForVariant = (variantId) => {\nif (!hasCustomGallery && !(variantGalleryMap && variantGalleryMap.size)) return null;\nconst idNum = Number(variantId || 0);\nif (!idNum) return null;\nconst imgs = (variantGalleryMap && variantGalleryMap.has(idNum)) ? variantGalleryMap.get(idNum) : null;\nreturn (imgs && imgs.length > 0) ? imgs : null;\n};\n/* Galeria al cambiar de producto (capitulo Model, modo productos separados). Reemplaza\n   las slides con la media del producto elegido. Vive aca y no en el snippet porque\n   u1-pdp-customizer-js esta al borde de los 256 KB de Shopify.\n   NO toca variantGalleryMap a proposito: agregarle una entrada prende hasCustomGallery\n   para toda la PDP y, si los bloques de galeria estan vacios (Helmet Visor lo esta),\n   la unica foto del mapa se muestra en todos los modelos. Ya paso el 2026-09-29. */\nroot._u1ModelGallery = (model, focusValue) => {\n  try {\n    if (!galleryTrack) return;\n    /* Vuelta al producto de la pagina: se restaura la galeria original con sus\n       data-media-id intactos, y el theme vuelve a moverse solo al cambiar de variante. */\n    if (model && model.handle && model.handle === U1_HOME_MODEL.handle) {\n      if (!U1_HOME_GALLERY_HTML) return;\n      galleryTrack.innerHTML = U1_HOME_GALLERY_HTML;\n      /* Igual que hace setGalleryToImages: la lista de slides vive en una variable y hay\n         que refrescarla. Sin esto queda apuntando a los nodos viejos, ya desprendidos del\n         documento, y el theme deja de poder moverse entre variantes (2026-09-30: volviendo\n         de Adaptive, Clear y Tinted dejaban de cambiar la foto). */\n      slides = Array.from(root.querySelectorAll('[data-u1-pdp-slide]'));\n      state.galleryIndex = 0;\n      try { updateGalleryButtons(); } catch (_e1) { /* noop */ }\n      try { renderMobileGalleries(); } catch (_e2) { /* noop */ }\n      return;\n    }\n    const imgs = (model && Array.isArray(model.images)) ? model.images.filter(i => i && i.src) : [];\n    if (!imgs.length) return;\n    setGalleryToImages(imgs, { preserveIndex: false, eagerFirst: true });\n  } catch (_eMG) { /* noop */ }\n};\nconst getFinalImageForColor = (colorValue) => {\nif (!hasCustomGallery) return null;\nconst h = optionNameHandle(colorValue);\nconst it = (h && colorFinalMap && colorFinalMap.has(h)) ? colorFinalMap.get(h) : null;\nif (it && it.src) return it;\nconst imgs = getGalleryImagesForColor(colorValue);\nconst first = imgs && imgs.length ? imgs[0] : null;\nif (!first) return null;\nif (first && first.type === 'video') {\nconst poster = (first && first.poster) ? String(first.poster) : '';\nreturn poster ? { src: poster, alt: '', lifestyle: false } : null;\n}\nconst src = (first && first.src) ? String(first.src) : '';\nif (!src) return null;\nreturn { src, alt: String(first.alt || ''), lifestyle: !!first.lifestyle };\n};\nconst getFinalImageForVariant = (variantId) => {\nif (!hasCustomGallery && !(variantFinalMap && variantFinalMap.size)) return null;\nconst idNum = Number(variantId || 0);\nif (!idNum) return null;\nconst it = (variantFinalMap && variantFinalMap.has(idNum)) ? variantFinalMap.get(idNum) : null;\nif (it && it.src) return it;\nconst imgs = getGalleryImagesForVariant(idNum);\nconst first = imgs && imgs.length ? imgs[0] : null;\nif (!first || !first.src) return null;\nreturn { src: String(first.src), alt: String(first.alt || ''), lifestyle: !!first.lifestyle };\n};\nconst setGalleryToImages = (images, { preserveIndex, eagerFirst } = { preserveIndex: true, eagerFirst: false }) => {\nif (!galleryTrack) return;\nconst list = Array.isArray(images) ? images : [];\nif (list.length === 0) return;\nconst idx = preserveIndex ? clamp(state.galleryIndex, 0, list.length - 1) : 0;\ngalleryTrack.innerHTML = list.map((img, i) => {\nconst type = (img && img.type) ? String(img.type) : 'image';\nif (type === 'video') {\nconst src = (img && img.src) ? String(img.src) : '';\nconst poster = (img && img.poster) ? String(img.poster) : '';\nconst fit = (img && img.fit) ? String(img.fit) : 'contain';\nconst isCover = fit === 'cover';\nconst mediaClass = isCover\n? 'u1-pdp-customizer__gallery-media u1-pdp-customizer__gallery-media--lifestyle u1-pdp-customizer__gallery-media--video'\n: 'u1-pdp-customizer__gallery-media u1-pdp-customizer__gallery-media--render u1-pdp-customizer__gallery-media--video';\nconst fitAttr = isCover ? 'cover' : 'contain';\nconst posterAttr = poster ? ` poster=\"${poster.replace(/\"/g, '&quot;')}\"` : '';\nconst videoTag = `<video class=\"u1-pdp-customizer__gallery-video\" playsinline muted loop autoplay preload=\"metadata\"${posterAttr} data-u1-fit=\"${fitAttr}\"><source src=\"${src.replace(/\"/g, '&quot;')}\" type=\"video/mp4\"></video>`;\nconst inner = `<div class=\"${mediaClass}\" data-u1-fit=\"${fitAttr}\">${videoTag}</div>`;\nreturn `<figure class=\"u1-pdp-customizer__gallery-slide\" data-u1-pdp-slide data-u1-media=\"video\">${inner}</figure>`;\n}\nconst src = (img && img.src) ? String(img.src) : '';\nconst alt = (img && img.alt) ? String(img.alt) : '';\nconst lifestyle = !!(img && img.lifestyle);\nconst lifestyleAttr = lifestyle ? '1' : '0';\nconst safeAlt = alt.replace(/\"/g, '&quot;');\nconst isEager = !!eagerFirst && i === 0;\nconst loadingAttr = isEager ? 'eager' : 'lazy';\nconst fetchPr = isEager ? ' fetchpriority=\"high\"' : '';\nconst _ss = u1GallerySrcset(src);\nconst _ssAttr = _ss ? ` srcset=\"${_ss}\" sizes=\"${U1_GALLERY_SIZES}\"` : '';\nconst imgTag = `<img class=\"u1-pdp-customizer__gallery-img\" loading=\"${loadingAttr}\" decoding=\"async\"${fetchPr} alt=\"${safeAlt}\" src=\"${src}\"${_ssAttr} width=\"2000\" height=\"2000\" onerror=\"this.style.visibility='hidden';var p=this.closest('.u1-pdp-customizer__gallery-square');if(p)p.style.visibility='hidden'\" onload=\"this.style.visibility='';var p=this.closest('.u1-pdp-customizer__gallery-square');if(p)p.style.visibility=''\">`;\nconst inner = lifestyle\n? `<div class=\"u1-pdp-customizer__gallery-media u1-pdp-customizer__gallery-media--lifestyle\">${imgTag}</div>`\n: `<div class=\"u1-pdp-customizer__gallery-media u1-pdp-customizer__gallery-media--render\"><div class=\"u1-pdp-customizer__gallery-square\">${imgTag}</div></div>`;\nreturn `\n<figure class=\"u1-pdp-customizer__gallery-slide\" data-u1-pdp-slide data-u1-lifestyle=\"${lifestyleAttr}\">\n${inner}\n</figure>\n`;\n}).join('');\nrefreshSlides();\nstate.galleryIndex = idx;\nconst target = slides[idx];\n/* La medida (offsetLeft) va en rAF, despues de TODAS las escrituras del handler: leerla aca\n   forzaba un Recalculate Style completo dentro del task del click (medido 16 ms desktop / ~60 ms mobile). */\nwindow.requestAnimationFrame(() => {\nif (slides[idx] !== target) return;\nconst left = target ? target.offsetLeft : 0;\ntry { galleryTrack.scrollTo({ left, behavior: 'auto' }); } catch (_e) { galleryTrack.scrollLeft = left; }\n});\ntry { watchImgForLoader(target ? target.querySelector('img') : null); } catch (_e2) { /* noop */ }\nupdateGalleryButtons();\ntry { updateDesktopPager(); } catch (_e3) { /* noop */ }\nrenderMobileGalleries();\n};\nlet galleryMode = 'normal'; // normal | final\nconst setGalleryInteractivity = (on) => {\nif (!galleryTrack) return;\nconst enabled = !!on;\ngalleryTrack.style.pointerEvents = enabled ? '' : 'none';\ngalleryTrack.style.scrollSnapType = enabled ? '' : 'none';\ngalleryTrack.style.overflowX = enabled ? '' : 'hidden';\nif (btnPrev) btnPrev.style.display = enabled ? '' : 'none';\nif (btnNext) btnNext.style.display = enabled ? '' : 'none';\n};\nconst setGallerySwipeEnabled = (on) => {\nif (!galleryTrack) return;\nconst enabled = !!on;\ngalleryTrack.style.pointerEvents = enabled ? '' : 'none';\ngalleryTrack.style.scrollSnapType = enabled ? '' : 'none';\ngalleryTrack.style.overflowX = enabled ? '' : 'hidden';\n};\nconst crossfadeGalleryToImages = (images, { durationMs, onOverlayReady } = { durationMs: 133, onOverlayReady: null }) => {\nif (!galleryViewport || !galleryTrack) return;\nconst list = Array.isArray(images) ? images : [];\nif (!list.length) return;\nconst cover = list[0];\nif (!cover || !cover.src) return;\nroot._u1GalleryToken = String((Number(root._u1GalleryToken || '0') || 0) + 1);\nconst token = root._u1GalleryToken;\nif (root._u1GalleryTimer) { window.clearTimeout(root._u1GalleryTimer); root._u1GalleryTimer = null; }\n// Ocultar el badge MIPS remoto apenas arranca la transicion (evita el flash del pill);\n// los re-syncs (doSwap / setBaseToAccessoriesView) lo re-muestran solo sobre la vista del remote.\ntry {\nconst _rbi = galleryRemoteMipsBadge && galleryRemoteMipsBadge.img ? galleryRemoteMipsBadge.img : null;\nif (_rbi) { _rbi.hidden = true; _rbi.setAttribute('aria-hidden', 'true'); _rbi.style.display = 'none'; }\n} catch (_eRB0) { /* noop */ }\ngalleryViewport.querySelectorAll('.u1-pdp-customizer__gallery-fade').forEach(n => n.remove());\ngalleryTrack.style.transition = 'none';\ngalleryTrack.style.opacity = '0';\ngalleryTrack.offsetWidth;\ngalleryTrack.style.transition = '';\nconst getVisibleGalleryIndex = () => {\ntry {\nconst s = Array.isArray(slides) ? slides : [];\nif (!s.length) return Number(state.galleryIndex || 0) || 0;\nconst x = Number(galleryTrack.scrollLeft || 0);\nlet best = 0;\nlet bestDist = Infinity;\nfor (let i = 0; i < s.length; i++) {\nconst left = Number(s[i].offsetLeft || 0);\nconst d = Math.abs(left - x);\nif (d < bestDist) { bestDist = d; best = i; }\n}\nreturn best;\n} catch (_e) {\nreturn Number(state.galleryIndex || 0) || 0;\n}\n};\nconst visibleIdx = getVisibleGalleryIndex();\nconst currentSlide = slides[visibleIdx];\nconst currentMedia = currentSlide ? currentSlide.querySelector('.u1-pdp-customizer__gallery-media') : null;\nconst oldOverlay = (() => {\nif (!currentMedia) return null;\nconst layer = document.createElement('div');\nlayer.className = 'u1-pdp-customizer__gallery-fade';\nlayer.setAttribute('aria-hidden', 'true');\nlayer.style.transition = `opacity ${durationMs}ms ease`;\nlayer.style.opacity = '1';\nlayer.appendChild(currentMedia.cloneNode(true));\nreturn layer;\n})();\nif (oldOverlay) galleryViewport.appendChild(oldOverlay);\nconst newOverlay = createFadeLayer({ src: String(cover.src), alt: String(cover.alt || ''), lifestyle: !!cover.lifestyle });\nnewOverlay.style.transition = `opacity ${durationMs}ms ease`;\nnewOverlay.style.opacity = '0';\ngalleryViewport.appendChild(newOverlay);\nif (oldOverlay) oldOverlay.offsetWidth;\nnewOverlay.offsetWidth;\nconst waitForDecode = (img) => {\nif (!img) return Promise.resolve();\ntry { img.loading = 'eager'; } catch (_e) { /* noop */ }\ntry { img.fetchPriority = 'high'; } catch (_e) { /* noop */ }\nif (img.complete && (img.naturalWidth || 0) > 0) {\ntry {\nif (typeof img.decode === 'function') return img.decode().catch(() => {});\n} catch (_e) { /* noop */ }\nreturn Promise.resolve();\n}\nreturn new Promise((resolve) => {\nlet done = false;\nconst finish = () => { if (done) return; done = true; resolve(); };\nimg.addEventListener('load', finish, { once: true });\nimg.addEventListener('error', finish, { once: true });\nwindow.setTimeout(finish, 480);\n});\n};\nconst overlayImg = newOverlay.querySelector('img');\nconst endOverlayLoading = beginGalleryLoading();\nlet didReady = false;\nconst markReady = () => {\nif (didReady) return;\ndidReady = true;\ntry {\nif (typeof onOverlayReady === 'function') onOverlayReady({ cover, token, overlay: newOverlay, img: overlayImg });\n} catch (_e) { /* noop */ }\n};\nconst doSwap = () => {\nif (root._u1GalleryToken !== token) return;\nsetGalleryToImages(list, { preserveIndex: false, eagerFirst: true });\n// La base cambi\u00F3: re-evaluar el badge MIPS remoto (solo debe verse sobre la vista del remote)\ntry { syncRemoteMipsBadgeOverlay(); } catch (_eRMB) { /* noop */ }\nconst nextSlide = slides[state.galleryIndex];\nconst realImg = nextSlide ? nextSlide.querySelector('img') : null;\nconst cleanup = () => {\nif (root._u1GalleryToken !== token) return;\ngalleryTrack.style.transition = 'none';\ngalleryTrack.style.opacity = '1';\ngalleryTrack.offsetWidth;\ngalleryTrack.style.transition = '';\nconst outMs = Number(durationMs) || 400;\nlet removed = false;\nconst removeNow = () => {\nif (removed) return;\nremoved = true;\ntry { newOverlay.remove(); } catch (_e) { /* noop */ }\ntry { if (oldOverlay) oldOverlay.remove(); } catch (_e) { /* noop */ }\n};\nconst onEnd = (e) => {\nif (e && e.target !== newOverlay) return;\nremoveNow();\n};\ntry { newOverlay.addEventListener('transitionend', onEnd, { once: true }); } catch (_e) { /* noop */ }\nwindow.requestAnimationFrame(() => {\nif (root._u1GalleryToken !== token) return;\nwindow.requestAnimationFrame(() => {\nif (root._u1GalleryToken !== token) return;\nnewOverlay.style.opacity = '0';\n});\n});\nwindow.setTimeout(removeNow, outMs + 80);\n};\nconst waitForDecodeReal = (img) => {\nif (!img) return Promise.resolve();\ntry { img.loading = 'eager'; } catch (_e) { /* noop */ }\ntry { img.fetchPriority = 'high'; } catch (_e) { /* noop */ }\nif (img.complete && (img.naturalWidth || 0) > 0) {\ntry {\nif (typeof img.decode === 'function') return img.decode().catch(() => {});\n} catch (_e) { /* noop */ }\nreturn Promise.resolve();\n}\nreturn new Promise((resolve) => {\nlet done = false;\nconst finish = () => { if (done) return; done = true; resolve(); };\nimg.addEventListener('load', finish, { once: true });\nimg.addEventListener('error', finish, { once: true });\nwindow.setTimeout(finish, 480);\n});\n};\nconst endRealLoading = beginGalleryLoading();\nPromise.race([\nwaitForDecodeReal(realImg),\nnew Promise((resolve) => window.setTimeout(resolve, 160)),\n])\n.then(() => cleanup())\n.catch(() => cleanup())\n.finally(() => endRealLoading());\n};\nconst startFade = () => {\nif (root._u1GalleryToken !== token) return;\nmarkReady();\nwindow.requestAnimationFrame(() => {\nif (root._u1GalleryToken !== token) return;\nwindow.requestAnimationFrame(() => {\nif (root._u1GalleryToken !== token) return;\nnewOverlay.style.opacity = '1';\nif (oldOverlay) oldOverlay.style.opacity = '0';\nif (root._u1GalleryTimer) { window.clearTimeout(root._u1GalleryTimer); root._u1GalleryTimer = null; }\nroot._u1GalleryTimer = window.setTimeout(doSwap, durationMs);\n});\n});\n};\nPromise.race([\nwaitForDecode(overlayImg),\nnew Promise((resolve) => window.setTimeout(resolve, 96)),\n])\n.then(() => startFade())\n.catch(() => startFade())\n.finally(() => endOverlayLoading());\n};\nconst applyFinalGalleryMode = (shouldShowFinal) => {\nif (!galleryTrack) return;\nconst wantFinal = !!shouldShowFinal;\nif (wantFinal && galleryMode === 'final') return;\nif (!wantFinal && galleryMode === 'normal') return;\nif (wantFinal) {\nconst fin = getFinalImageForColor(state.color);\nif (!fin || !fin.src) return;\ngalleryMode = 'final';\ntry { root.setAttribute('data-u1-gallery-mode', galleryMode); } catch (_e) { /* noop */ }\nsetGalleryInteractivity(false);\ncrossfadeGalleryToImages([fin], { durationMs: 133 });\n} else {\ngalleryMode = 'normal';\ntry { root.setAttribute('data-u1-gallery-mode', galleryMode); } catch (_e) { /* noop */ }\nconst imgs = getGalleryImagesForColor(state.color);\nif (imgs && imgs.length) {\nconst first = imgs[0] || null;\nif (first && first.type === 'video') {\nsetGalleryToImages(imgs, { preserveIndex: false });\n} else {\ncrossfadeGalleryToImages(imgs, { durationMs: 133 });\n}\n}\nwindow.setTimeout(() => setGalleryInteractivity(true), 420);\n}\n};\nconst createFadeLayer = ({ src, alt, lifestyle }) => {\nconst layer = document.createElement('div');\nlayer.className = 'u1-pdp-customizer__gallery-fade';\nlayer.setAttribute('aria-hidden', 'true');\nlayer.dataset.u1Lifestyle = lifestyle ? '1' : '0';\nconst mediaWrap = document.createElement('div');\nmediaWrap.className = `u1-pdp-customizer__gallery-media ${lifestyle ? 'u1-pdp-customizer__gallery-media--lifestyle' : 'u1-pdp-customizer__gallery-media--render'}`;\nconst img = document.createElement('img');\nimg.className = 'u1-pdp-customizer__gallery-img';\nimg.alt = (alt || '').toString();\nu1ApplyGallerySrcset(img, src); /* srcset ANTES de src (ver u1ImgPreload) */\nimg.src = (src || '').toString();\nimg.decoding = 'async';\nimg.loading = 'eager';\nimg.addEventListener('error', () => { try { img.style.visibility = 'hidden'; var p = img.closest('.u1-pdp-customizer__gallery-square'); if (p) p.style.visibility = 'hidden'; } catch (_e) {} }, { passive: true });\nimg.addEventListener('load', () => { try { img.style.visibility = ''; var p = img.closest('.u1-pdp-customizer__gallery-square'); if (p) p.style.visibility = ''; } catch (_e) {} }, { passive: true });\nif (lifestyle) {\nmediaWrap.appendChild(img);\n} else {\nconst sq = document.createElement('div');\nsq.className = 'u1-pdp-customizer__gallery-square';\nsq.appendChild(img);\nmediaWrap.appendChild(sq);\n}\nlayer.appendChild(mediaWrap);\nreturn layer;\n};\nconst transitionGalleryToColor = (colorValue, { durationMs, prevColor } = { durationMs: 133, prevColor: null }) => {\nif (!hasCustomGallery) return;\n// En visor mode, al cambiar color re-aplicamos la vista visor con las im\u00E1genes del nuevo color\n// (sin este guard, transitionGalleryToColor cambia el token y cancela el setup del visor)\nif (String(root._u1GalleryUxMode || '') === 'visor') {\ntry { setBaseToVisorView(); } catch (_e) { /* noop */ }\nreturn;\n}\nconst hasVariantGalleryData = (variantGalleryMap && variantGalleryMap.size > 0) || (variantFinalMap && variantFinalMap.size > 0);\nif (galleryMode === 'final') {\nlet fin = getFinalImageForColor(colorValue);\nif (hasVariantGalleryData && typeof findVariant === 'function') {\ntry {\nconst resolved = findVariant(state.color, state.size);\nconst vid = resolved && resolved.id ? Number(resolved.id) : 0;\nif (vid) {\nconst finV = getFinalImageForVariant(vid);\nif (finV && finV.src) fin = finV;\n}\n} catch (_eF) { /* noop */ }\n}\nif (fin && fin.src) crossfadeGalleryToImages([fin], { durationMs: 133 });\nreturn;\n}\nif (hasVariantGalleryData && typeof findVariant === 'function') {\ntry {\nconst resolved = findVariant(state.color, state.size);\nconst vid = resolved && resolved.id ? Number(resolved.id) : 0;\nif (vid) {\nconst vImgs = getGalleryImagesForVariant(vid);\nconst vFin = getFinalImageForVariant(vid);\nif ((vImgs && vImgs.length) || (vFin && vFin.src)) {\ntransitionGalleryToVariant(vid, { durationMs });\nreturn;\n}\n}\n} catch (_eVg) { /* noop */ }\n}\nconst imgs = getGalleryImagesForColor(colorValue);\ntry { updateMobileHeroImage(imgs); } catch (_eH) { /* noop */ }\nif (!imgs || imgs.length === 0) return;\nconst idx = clamp(state.galleryIndex, 0, imgs.length - 1);\nconst cover = imgs[idx] || imgs[0];\nif (cover && cover.type === 'video') {\nsetGalleryToImages(imgs, { preserveIndex: true });\nreturn;\n}\nif (!galleryViewport || !cover || !cover.src) {\nsetGalleryToImages(imgs, { preserveIndex: true });\nreturn;\n}\nroot._u1GalleryToken = String((Number(root._u1GalleryToken || '0') || 0) + 1);\nconst token = root._u1GalleryToken;\nif (root._u1GalleryTimer) { window.clearTimeout(root._u1GalleryTimer); root._u1GalleryTimer = null; }\n// Ocultar el badge MIPS remoto apenas arranca la transicion (evita el flash del pill);\n// los re-syncs (doSwap / setBaseToAccessoriesView) lo re-muestran solo sobre la vista del remote.\ntry {\nconst _rbi = galleryRemoteMipsBadge && galleryRemoteMipsBadge.img ? galleryRemoteMipsBadge.img : null;\nif (_rbi) { _rbi.hidden = true; _rbi.setAttribute('aria-hidden', 'true'); _rbi.style.display = 'none'; }\n} catch (_eRB0) { /* noop */ }\ngalleryViewport.querySelectorAll('.u1-pdp-customizer__gallery-fade').forEach(n => n.remove());\nconst doTrackFade = (prevColor == null) && !!galleryTrack;\nif (doTrackFade) {\ngalleryTrack.style.transition = `opacity ${durationMs}ms ease`;\ngalleryTrack.style.opacity = '1';\n}\nconst currentSlide = slides[state.galleryIndex];\nconst currentImg = currentSlide ? currentSlide.querySelector('img') : null;\nconst domOldSrc = currentImg ? (currentImg.currentSrc || currentImg.src || '') : '';\nconst domOldAlt = currentImg ? (currentImg.getAttribute('alt') || '') : '';\nconst domLifestyle = (() => {\ntry {\nconst a = currentSlide && currentSlide.getAttribute ? String(currentSlide.getAttribute('data-u1-lifestyle') || '') : '';\nif (a === '1') return true;\nif (a === '0') return false;\n} catch (_e) { /* noop */ }\ntry {\nconst fit = currentImg ? String(getComputedStyle(currentImg).objectFit || '') : '';\nif (fit === 'contain') return false;\n} catch (_e2) { /* noop */ }\nreturn true;\n})();\nconst prevImgs = getGalleryImagesForColor(prevColor);\nconst prevIdx = prevImgs && prevImgs.length ? clamp(state.galleryIndex, 0, prevImgs.length - 1) : 0;\nconst prevCover = prevImgs && prevImgs.length ? (prevImgs[prevIdx] || prevImgs[0]) : null;\nconst prevIsVideo = !!(prevCover && prevCover.type === 'video');\nconst prevSrc = prevIsVideo\n? ((prevCover && prevCover.poster) ? String(prevCover.poster) : '')\n: ((prevCover && prevCover.src) ? String(prevCover.src) : '');\nconst prevAlt = (prevCover && prevCover.alt) ? String(prevCover.alt) : '';\nconst oldSrc = domOldSrc || prevSrc;\nconst oldAlt = domOldAlt || prevAlt;\nconst oldIsLifestyle = domOldSrc\n? domLifestyle\n: ((prevCover && typeof prevCover.lifestyle === 'boolean') ? prevCover.lifestyle : true);\nconst baseLayer = root._u1GalleryBase || null;\nconst baseEl = (baseLayer && baseLayer.el) ? baseLayer.el : null;\nconst baseImg = (baseLayer && typeof baseLayer.getImg === 'function') ? baseLayer.getImg() : null;\nconst useBase = (prevColor == null) && !!(baseEl && baseImg && oldSrc);\nif (baseEl) {\nif (!useBase) baseEl.style.opacity = '0';\n}\nif (useBase && baseEl && baseLayer) {\ntry { baseLayer.ensureKind(!!oldIsLifestyle); } catch (_e) { /* noop */ }\nconst img = (typeof baseLayer.getImg === 'function') ? baseLayer.getImg() : baseImg;\nif (img) {\nimg.alt = oldAlt || '';\nu1ApplyGallerySrcset(img, oldSrc); /* srcset ANTES de src (ver u1ImgPreload) */\nimg.src = oldSrc;\n}\nbaseEl.style.transition = 'none';\nbaseEl.style.opacity = '1';\n/* la transicion se restaura en el primer rAF de startTransition (sin reflow forzado) */\n}\nconst oldOverlay = (!doTrackFade && !useBase && oldSrc) ? (() => {\nconst el = createFadeLayer({ src: oldSrc, alt: oldAlt, lifestyle: domLifestyle });\nel.style.opacity = '1';\nreturn el;\n})() : null;\nconst newOverlay = (() => {\nconst el = createFadeLayer({ src: (cover.src || '').toString(), alt: (cover.alt || '').toString(), lifestyle: !!cover.lifestyle });\nel.style.opacity = '0';\nreturn el;\n})();\nif (oldOverlay) galleryViewport.appendChild(oldOverlay);\ngalleryViewport.appendChild(newOverlay);\nconst startTransition = () => {\nwindow.requestAnimationFrame(() => {\nif (root._u1GalleryToken !== token) return;\nif (useBase && baseEl) baseEl.style.transition = '';\nwindow.requestAnimationFrame(() => {\nif (root._u1GalleryToken !== token) return;\nnewOverlay.style.opacity = '1'; // fade-in new\nif (oldOverlay) oldOverlay.style.opacity = '0'; // fade-out old\nif (useBase && baseEl) baseEl.style.opacity = '0'; // fade-out base (no selected)\nif (doTrackFade && galleryTrack) galleryTrack.style.opacity = '0'; // fade-out track real (primera transici\u00F3n)\n});\n});\n};\nconst endCoverLoading = beginGalleryLoading();\nPromise.race([\nu1ImgPreload.preload(String(cover.src || '')),\nnew Promise((resolve) => window.setTimeout(resolve, 96)),\n])\n.then(() => startTransition())\n.catch(() => startTransition())\n.finally(() => endCoverLoading());\nroot._u1GalleryTimer = window.setTimeout(() => {\nif (root._u1GalleryToken !== token) return;\nu1PreloadGalleryImageList(imgs)\n.then(() => {\nif (root._u1GalleryToken !== token) return;\nsetGalleryToImages(imgs, { preserveIndex: true });\nif (doTrackFade && galleryTrack) {\ngalleryTrack.style.transition = 'none';\ngalleryTrack.style.opacity = '1';\ngalleryTrack.offsetWidth;\ngalleryTrack.style.transition = '';\n}\nconst nextSlide = slides[state.galleryIndex];\nconst realImg = nextSlide ? nextSlide.querySelector('img') : null;\nif (realImg) watchImgForLoader(realImg);\nconst cleanup = () => {\nif (root._u1GalleryToken !== token) return;\nnewOverlay.style.opacity = '0';\nwindow.setTimeout(() => {\nif (oldOverlay) oldOverlay.remove();\nnewOverlay.remove();\n}, 140);\n};\nu1WaitGalleryImgPaintReady(realImg, 420).then(() => cleanup());\n})\n.catch(() => {\nif (root._u1GalleryToken !== token) return;\nsetGalleryToImages(imgs, { preserveIndex: true });\nif (doTrackFade && galleryTrack) {\ngalleryTrack.style.transition = 'none';\ngalleryTrack.style.opacity = '1';\ngalleryTrack.offsetWidth;\ngalleryTrack.style.transition = '';\n}\nconst nextSlide = slides[state.galleryIndex];\nconst realImg = nextSlide ? nextSlide.querySelector('img') : null;\nif (realImg) watchImgForLoader(realImg);\nconst cleanup = () => {\nif (root._u1GalleryToken !== token) return;\nnewOverlay.style.opacity = '0';\nwindow.setTimeout(() => {\nif (oldOverlay) oldOverlay.remove();\nnewOverlay.remove();\n}, 140);\n};\nu1WaitGalleryImgPaintReady(realImg, 420).then(() => cleanup());\n});\n}, durationMs);\n};\nconst transitionGalleryToVariant = (variantId, { durationMs } = { durationMs: 133 }) => {\nconst idNum = Number(variantId || 0) || 0;\nif (!idNum) return;\nconst imgs = getGalleryImagesForVariant(idNum);\nconst fin = getFinalImageForVariant(idNum);\nconst list = (imgs && imgs.length) ? imgs : ((fin && fin.src) ? [fin] : null);\nif (!list || !list.length) return;\ntry { u1PreloadGalleryImageList(list); } catch (_ePl) { /* noop */ }\ntry { updateMobileHeroImage(list); } catch (_eH) { /* noop */ }\nconst cover = list[0] || null;\nif (cover && cover.type === 'video') {\nsetGalleryToImages(list, { preserveIndex: false });\nreturn;\n}\nconst ms = Number(durationMs);\nif (!Number.isFinite(ms) || ms <= 0) {\nsetGalleryToImages(list, { preserveIndex: false, eagerFirst: true });\nreturn;\n}\ncrossfadeGalleryToImages(list, { durationMs: ms });\n};\nconst setColorUnsetUI = () => {\n/* \u2500\u2500 Model unset \u2500\u2500 */\nconst modelUnset = (() => {\nif (TEMPLATE === 'light') return !state.variantId;\nif (!HAS_CHAPTER_MODEL) return false;\n/* Variant-model mode (NEON): model is preselected from init via variantModel */\nconst _isVMM = String(root.dataset.u1PdpVariantModelMode || '') === '1';\nif (_isVMM) return !state.variantModel;\n/* Product-model blocks (separate products, e.g. FARO UK): always preselected */\nif (CFG.hasProductModelBlocks) {\nreturn false;\n}\n/* Simple model blocks (Smart Light): selected when simpleModelOptionValue or variantId set */\nreturn !state.simpleModelOptionValue && !state.variantId;\n})();\nroot.classList.toggle('is-model-unset', modelUnset);\n\n/* \u2500\u2500 Color unset \u2500\u2500 */\nconst colorUnset = (() => {\nif (TEMPLATE === 'light') return false;\nconst colorChapterActive = String(root.dataset.u1PdpHasColorChapter || '') === 'true';\nif (!colorChapterActive) return false;\nif (SILICONE_INSERTS_PDP && HAS_CHAPTER_SIZE && HAS_SIZE_OPTION && !state.size) return true;\nreturn !state.color;\n})();\nroot.classList.toggle('is-color-unset', colorUnset);\n\n/* \u2500\u2500 Size unset \u2500\u2500 */\nconst sizeUnset = (() => {\nif (TEMPLATE === 'light') return false;\nif (!HAS_CHAPTER_SIZE) return false;\nif (!HAS_SIZE_OPTION) return false;\nreturn !state.size;\n})();\nroot.classList.toggle('is-size-unset', sizeUnset);\n\n/* \u2500\u2500 Helmet size unset (visors: blocks model step until helmet size is picked) \u2500\u2500 */\nconst helmetSizeUnset = (() => {\nif (typeof HAS_HELMET_SIZE_CHAPTER === 'undefined' || !HAS_HELMET_SIZE_CHAPTER) return false;\ntry {\nif (!root.querySelector('[data-u1-pdp-helmet-size-picker]')) return false;\n} catch (_e) { return false; }\nreturn !state.helmetSize;\n})();\nroot.classList.toggle('is-helmet-size-unset', helmetSizeUnset);\n};\nconst clamp = (n, min, max) => Math.min(max, Math.max(min, n));\nconst optionNameHandle = (s) => (s || '').toString().trim().toLowerCase().replace(/\\s+/g, '-');\nconst COLOR_HANDLE = CFG.colorHandle;\nconst SIZE_HANDLE = CFG.sizeHandle;\nconst MODEL_HANDLE = String(root.dataset.u1AccessoryModelHandle || 'model');\nconst IS_VARIANT_MODEL_MODE = String(root.dataset.u1PdpVariantModelMode || '') === '1';\nconst VARIANT_MODEL_OPTION_HANDLE = IS_VARIANT_MODEL_MODE ? String(root.dataset.u1PdpVariantModelOption || '').trim() : '';\nconst VM_OPT_IDX = (() => {\nif (!IS_VARIANT_MODEL_MODE) return -1;\nconst n = Number(String(root.dataset.u1PdpVariantModelOptionIndex ?? '').trim());\nreturn (Number.isFinite(n) && n >= 0 && n <= 2) ? n : -1;\n})();\nconst getVariantModelOptionValue = (v) => {\nif (!v || VM_OPT_IDX < 0) return null;\nif (VM_OPT_IDX === 0) return v.option1 || null;\nif (VM_OPT_IDX === 1) return v.option2 || null;\nif (VM_OPT_IDX === 2) return v.option3 || null;\nreturn null;\n};\n\nconst HAS_COLOR_OPTION = (() => {\nconst opts = CFG.options;\nreturn Array.isArray(opts) && opts.some(n => optionNameHandle(n) === COLOR_HANDLE);\n})();\nconst HAS_SIZE_OPTION = (() => {\nconst opts = CFG.options;\nreturn Array.isArray(opts) && opts.some(n => optionNameHandle(n) === SIZE_HANDLE);\n})();\nconst HAS_COLOR_CHAPTER = String(root.dataset.u1PdpHasColorChapter || '') === 'true';\nconst SIMPLE_MODEL_OPT_HANDLE = String(root.dataset.u1PdpSimpleModelOption || '').trim();\nconst SINGLE_COLOR = (root.dataset.u1PdpSingleColor || '').toString().trim();\nif (SINGLE_COLOR && HAS_COLOR_OPTION) {\nstate.color = SINGLE_COLOR;\n}\nconst getSelectedOptionsMap = () => {\nconst m = new Map();\nif (IS_VARIANT_MODEL_MODE && VARIANT_MODEL_OPTION_HANDLE && state.variantModel) {\nm.set(VARIANT_MODEL_OPTION_HANDLE, state.variantModel);\n}\nif (SIMPLE_MODEL_OPT_HANDLE && state.simpleModelOptionValue) {\nm.set(SIMPLE_MODEL_OPT_HANDLE, state.simpleModelOptionValue);\n}\nif (state.color) m.set(COLOR_HANDLE, state.color);\nif (HAS_SIZE_OPTION && state.size) m.set(SIZE_HANDLE, state.size);\nreturn m;\n};\nconst getVariantOptionByHandle = (variant, handle) => {\nconst h = (handle || '').toString().trim();\nif (IS_VARIANT_MODEL_MODE && VM_OPT_IDX >= 0 && VARIANT_MODEL_OPTION_HANDLE && h === VARIANT_MODEL_OPTION_HANDLE) {\nreturn getVariantModelOptionValue(variant);\n}\nconst optionsOrder = CFG.options;\nconst idx = Array.isArray(optionsOrder) ? optionsOrder.findIndex(n => optionNameHandle(n) === h) : -1;\nif (idx === 0) return variant.option1 || null;\nif (idx === 1) return variant.option2 || null;\nif (idx === 2) return variant.option3 || null;\nreturn null;\n};\n\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   Inline Bundle Picker (v2)\n   Stacked card selector \u2014 replaces the old carousel pack selector.\n   Auto-derives chapter visibility from bundle product option names.\n   \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\n(function initBundlePicker() {\n\n  /* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n     1. DOM & DATA\n     \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n  var picker = root.querySelector('[data-u1-pdp-bundle-picker]');\n  if (!picker) return;\n\n  var bpEls = {\n    cards:   Array.from(picker.querySelectorAll('[data-u1-pdp-bundle-card]')),\n    heading: root.querySelector('[data-u1-pdp-product-heading]'),\n  };\n\n  if (!bpEls.cards.length) return;\n\n  /* Bundle products JSON -> lookup by handle */\n  var bundlePacksByHandle = {};\n  try {\n    var bpJsonEl = root.querySelector('[data-u1-pdp-bundle-packs]');\n    var bpRaw    = bpJsonEl ? JSON.parse(bpJsonEl.textContent || '[]') : [];\n    bpRaw.forEach(function(bp) { if (bp && bp.packHandle) bundlePacksByHandle[bp.packHandle] = bp; });\n  } catch (_e) { /* noop */ }\n\n  /* \u2500\u2500 Pack sold out: si un componente no tiene variante disponible (en este\n     mercado), la card queda gris con badge y no se puede seleccionar.\n     El visor respeta allowedVisorStyles del pack y el casco de esta PDP\n     (caso real: Adaptive/AURA agotado en US, 2026-08-31). \u2500\u2500 */\n  function _packCompAvailable(bp, c) {\n    if (!c) return true;\n    var vam = c.variantAvailMap || null;\n    if (!vam || !Object.keys(vam).length) return (c.available !== false);\n    var filt = String(c.variantFilter || '').trim().toLowerCase();\n    var isVisor = String(c.handle || '').toLowerCase() === 'helmet-visor';\n    var styles = String(bp.allowedVisorStyles || '').split(',')\n      .map(function(x){ return x.trim().toLowerCase(); }).filter(Boolean);\n    var mh = String(root.dataset.u1PdpProductHandle || '').toLowerCase();\n    var helmet = mh.indexOf('aura') === 0 ? 'aura' : (mh.indexOf('neon') === 0 ? 'neon' : '');\n    var keys = Object.keys(vam);\n    /* si las variantes distinguen casco, el casco se exige SIEMPRE (aun con filtro):\n       \"Adaptive\" no puede validar con Adaptive/NEON en la PDP de AURA */\n    var scoped = helmet && keys.some(function(k) { return k.toLowerCase().indexOf(helmet) !== -1; });\n    return keys.some(function(k) {\n      if (!vam[k]) return false;\n      var kl = k.toLowerCase();\n      if (filt && kl.indexOf(filt) === -1) return false;\n      if (scoped && kl.indexOf(helmet) === -1) return false;\n      if (isVisor && !filt && styles.length && !styles.some(function(st) { return kl.indexOf(st) === 0; })) return false;\n      return true;\n    });\n  }\n  function _packIsBuyable(bp) {\n    if (!bp || bp.isSolo) return true;\n    var comps = bp.componentProducts || [];\n    for (var i = 0; i < comps.length; i++) {\n      if (!_packCompAvailable(bp, comps[i])) return false;\n    }\n    return true;\n  }\n  bpEls.cards.forEach(function(c) {\n    var h = c.getAttribute('data-pack-handle');\n    var bp = h ? bundlePacksByHandle[h] : null;\n    if (!bp || _packIsBuyable(bp)) return;\n    c.classList.add('u1-pdp-bundle-card--soldout');\n    c.setAttribute('aria-disabled', 'true');\n    /* mismo patron que las cards de accesorios: el precio (y el chip de\n       descuento) se reemplazan por \"Sold out\" */\n    try {\n      var pg = c.querySelector('.u1-pdp-bundle-card__price-group');\n      if (pg) pg.innerHTML = '<span class=\"u1-pdp-card__price u1-text-body-xs u1-pdp-card__price--soldout\">Sold out</span>';\n    } catch (_eB) { /* noop */ }\n  });\n\n  /* State (prefixed to avoid shadowing outer `state`) */\n  var pkState = {\n    selectedPackId:   null,\n    activeBundlePack: null,\n    defaultHeading:   bpEls.heading ? bpEls.heading.textContent : '',\n  };\n\n  /* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n     2. AUTO-DERIVE CHAPTERS from bundle product option names\n     \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n  var OPTION_TO_CHAPTER = [\n    { keywords: ['color', 'colour'],             chapter: 'color' },\n    { keywords: ['size'],                         chapter: 'size'  },\n    { keywords: ['visor', 'style', 'lens'],       chapter: 'visor' },\n  ];\n  /* Chapters that stay visible regardless of bundle selection.\n     'model' y 'product_model' entran aca porque son la identidad del producto que se\n     esta configurando: si un pack los esconde, el cliente queda encerrado y no puede\n     volver al otro modelo (paso en FARO UK: al elegir un pack desaparecia el chapter\n     de modelo y no habia forma de volver a FARO comun). */\n  var ALWAYS_VISIBLE = ['description', 'bundle', 'model', 'product_model'];\n\n  /** Given a bundle pack object, return an array of chapter keys\n      that should be visible. Returns null when all should show.\n      Priority: explicit chapters CSV from schema -> auto-derive from options */\n  function deriveChapters(bp) {\n    if (!bp) return null;\n    /* 1) Explicit chapters from pack_chapters setting */\n    if (bp.chapters && bp.chapters.trim()) {\n      return bp.chapters.split(',').map(function(s) { return s.trim().toLowerCase(); }).filter(Boolean);\n    }\n    /* No explicit chapters \u2192 show all */\n    return null;\n  }\n\n  /* Original chapter titles (cached once for restore on solo) */\n  var _origTitles = {};\n\n  function applyChapterVisibility(packId) {\n    var bp      = bundlePacksByHandle[packId] || null;\n    var allowed = deriveChapters(bp); /* null = all visible (solo) */\n    var isBundleMode = !!bp;\n\n    var allSteps = Array.from(root.querySelectorAll('[data-u1-pdp-step]'));\n    allSteps.forEach(function(step) {\n      var name = (step.getAttribute('data-u1-pdp-step') || '').toLowerCase();\n      /* Always-visible chapters stay untouched */\n      if (ALWAYS_VISIBLE.indexOf(name) !== -1) return;\n      /* pack-only (ej. sparky_color/sparky_inserts del Family Pack): jamas en modo solo,\n         y en bundle solo si el pack los declara. Ocultos por CSS default (display:none),\n         la clase is-pack-active los enciende. */\n      var packOnly = step.classList.contains('u1-pdp-step--pack-only');\n      if (!allowed) {\n        /* Solo / no bundle -> show all chapters (menos los pack-only) */\n        step.hidden = packOnly;\n        step.setAttribute('aria-hidden', packOnly ? 'true' : 'false');\n        if (packOnly) step.classList.remove('is-pack-active');\n      } else {\n        var show = allowed.indexOf(name) !== -1;\n        step.hidden = !show;\n        step.setAttribute('aria-hidden', show ? 'false' : 'true');\n        if (packOnly) step.classList.toggle('is-pack-active', show);\n      }\n    });\n\n    /* \u2500\u2500 Accessories title + gallery: \"Complete your setup\" in bundle mode \u2500\u2500 */\n    var accStep = root.querySelector('[data-u1-pdp-step=\"accessories\"]');\n    if (accStep) {\n      var accTitle = accStep.querySelector('.u1-pdp-step__title');\n      var accMobileTitle = accStep.querySelector('.u1-pdp-step__mobile-title');\n      var accMobileGallery = accStep.querySelector('.u1-pdp-mobile-gallery');\n      if (accTitle) {\n        if (!_origTitles.accessories) _origTitles.accessories = accTitle.textContent;\n        accTitle.textContent = isBundleMode ? 'Complete your setup' : _origTitles.accessories;\n      }\n      if (accMobileTitle) {\n        if (!_origTitles.accessoriesMobile) _origTitles.accessoriesMobile = accMobileTitle.textContent;\n        accMobileTitle.textContent = isBundleMode ? 'Complete your setup' : _origTitles.accessoriesMobile;\n      }\n      /* Hide mobile gallery in bundle mode \u2014 accessories don't need a hero image */\n      if (accMobileGallery) {\n        accMobileGallery.hidden = isBundleMode;\n      }\n    }\n\n    /* \u2500\u2500 Filter accessories already included in the bundle \u2500\u2500 */\n    filterBundleAccessories(bp);\n\n    /* \u2500\u2500 Generic bundle-hide: hide/show any element with data-u1-pdp-bundle-hide \u2500\u2500 */\n    root.querySelectorAll('[data-u1-pdp-bundle-hide]').forEach(function(el) {\n      el.hidden = isBundleMode;\n      el.setAttribute('aria-hidden', isBundleMode ? 'true' : 'false');\n    });\n\n    /* \u2500\u2500 Family Pack: re-sincroniza prefijos de titulo (AURA Color / AURA Size) \u2500\u2500 */\n    try { if (root._u1FamRetitle) root._u1FamRetitle(); } catch (_eF) { /* noop */ }\n  }\n\n  /** Hide accessory cards whose product is already a component of the active bundle */\n  function filterBundleAccessories(bp) {\n    var accBtns = Array.from(root.querySelectorAll('[data-u1-pdp-step=\"accessories\"] [data-u1-pdp-accessory]'));\n    if (!accBtns.length) return;\n\n    /* Collect bundle component handles from all sources */\n    var bundleHandles = {};\n    if (bp && bp.componentProducts) {\n      bp.componentProducts.forEach(function(c) { if (c && c.handle) bundleHandles[c.handle.toLowerCase()] = true; });\n    }\n\n    accBtns.forEach(function(btn) {\n      var handle = (btn.getAttribute('data-u1-pdp-accessory-handle') || '').toLowerCase();\n      var hit = btn.closest('.u1-pdp-card-hit') || btn;\n      if (!bp) {\n        /* Solo mode -> show all accessories */\n        hit.hidden = false;\n        return;\n      }\n      /* Hide if this accessory is included in the bundle */\n      hit.hidden = !!bundleHandles[handle];\n      /* Also deselect if hidden */\n      if (hit.hidden && btn.getAttribute('aria-pressed') === 'true') {\n        btn.setAttribute('aria-pressed', 'false');\n        btn.classList.remove('is-selected');\n        var key = btn.dataset.u1PdpAccessoryKey || btn.dataset.u1PdpAccessoryHandle;\n        if (key && state.accessories.has(key)) state.accessories.delete(key);\n      }\n    });\n    /* Si el pack ya incluye TODOS los accesorios, el chapter queda sin cards:\n       esconderlo entero para que no flote el titulo solo (caso Complete Pack\n       de Smart Light: Remote + Mount Pack incluidos). */\n    try {\n      var _accStep = root.querySelector('[data-u1-pdp-step=\"accessories\"]');\n      if (_accStep) {\n        var _accVisibles = 0;\n        accBtns.forEach(function(b) {\n          var h2 = b.closest('.u1-pdp-card-hit') || b;\n          if (!h2.hidden) _accVisibles += 1;\n        });\n        _accStep.hidden = _accVisibles === 0;\n        _accStep.setAttribute('aria-hidden', _accVisibles === 0 ? 'true' : 'false');\n      }\n    } catch (_eAS) {}\n  }\n\n\n  /* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n     3. HEADING, URL, PRICING HELPERS\n     \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n  function getCardById(packId) {\n    for (var i = 0; i < bpEls.cards.length; i++) {\n      if (bpEls.cards[i].getAttribute('data-pack-id') === packId) return bpEls.cards[i];\n    }\n    return null;\n  }\n\n  /* Heading stays fixed \u2014 never change the customizer title on bundle switch */\n  function updateHeading() {}\n\n  function syncUrl(packId) {\n    var url = new URL(window.location);\n    if (packId && packId !== 'solo') { url.searchParams.set('bundle', packId); }\n    else { url.searchParams.delete('bundle'); }\n    window.history.replaceState({}, '', url);\n  }\n\n  function notifyPricing() {\n    try { if (typeof updateAtcTotal === 'function') updateAtcTotal(); } catch (_e) {}\n    try { if (typeof updateSummary === 'function') updateSummary(); } catch (_e) {}\n  }\n\n\n  /* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n     4. SELECT PACK\n     \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n  function _escHtml(s) {\n    return String(s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/\"/g,'&quot;');\n  }\n\n  /** Extract unique product names from bundle option names.\n      e.g. \"AURA Mips (Color)\" -> \"AURA Mips\" */\n  function _extractNamesFromOptions(opts) {\n    var seen = {};\n    var names = [];\n    (opts || []).forEach(function(o) {\n      var raw = (o.name || '').split('(')[0].trim();\n      if (raw && !seen[raw]) { seen[raw] = true; names.push(raw); }\n    });\n    return names;\n  }\n\n  /** Parse bundle options to get component qualifiers.\n      Options follow \"Product Name (Option Type)\" format.\n      Skips Color/Size (not meaningful for naming), keeps Style/Model/Lens etc.\n      Returns map: productName \u2192 qualifier string, e.g. { \"Helmet Visor\": \"Adaptive\" }\n      or { \"Helmet Visor\": \"Clear or Tinted\" } when multiple values. */\n  function _getComponentQualifiers(bp) {\n    if (!bp || !bp.options || !bp.options.length) return null;\n    var SKIP = ['color', 'colour', 'size'];\n    var map = {};\n    bp.options.forEach(function(opt) {\n      var name = (opt.name || '');\n      var idx = name.indexOf('(');\n      if (idx === -1) return;\n      var prod = name.substring(0, idx).trim();\n      var type = name.substring(idx + 1).replace(/\\)\\s*$/, '').trim().toLowerCase();\n      if (!prod || SKIP.indexOf(type) !== -1) return;\n      var vals = (opt.values || []).filter(Boolean);\n      if (!vals.length) return;\n      var label = vals.length === 1 ? vals[0] : vals.join(' or ');\n      map[prod] = map[prod] ? (map[prod] + ', ' + label) : label;\n    });\n    return Object.keys(map).length ? map : null;\n  }\n\n  /** Populate a card's component list from bundle JSON data.\n      Always prepends the main product name, then adds bundle extras.\n      Enriches names with variant qualifiers from bundle options,\n      e.g. \"Helmet Visor\" \u2192 \"Helmet Visor (Adaptive)\". */\n  var _mainProductTitle = root.getAttribute('data-u1-pdp-product-title') || '';\n\n  /* Version B: el item del regalo en la lista del pack lleva 'Free' adelante */\n  function _u1IsGiftName(bp, name) {\n    var gc = _u1PackGiftComp(bp);\n    return !!(gc && gc.title && String(name || '').indexOf(String(gc.title)) === 0);\n  }\n  function populateComponents(card, bp) {\n    var container = card.querySelector('[data-u1-pdp-bundle-components]');\n    if (!container) return;\n    var list = container.querySelector('.u1-pdp-bundle-card__component-list');\n    if (!list) return;\n    /* Only populate once */\n    if (list.children.length > 0) return;\n\n    var items = [];\n\n    /* 1) Manual override: componentLabels from block settings */\n    var _labels = (bp.componentLabels || '').trim();\n    if (_labels) {\n      _labels.split(',').forEach(function(s) {\n        var name = s.trim();\n        if (name) items.push(name);\n      });\n    } else {\n      /* 2) Auto-detect with qualifier enrichment */\n      var coveredBase = {};\n      function _add(displayName, baseName) {\n        var key = baseName || displayName;\n        if (!displayName || coveredBase[key]) return;\n        coveredBase[key] = true;\n        items.push(displayName);\n      }\n\n      /* Always start with main product */\n      if (_mainProductTitle) _add(_mainProductTitle);\n\n      /* Qualifier map from bundle options (e.g. \"Helmet Visor\" \u2192 \"Adaptive\") */\n      var quals = _getComponentQualifiers(bp);\n\n      /* Collect base product names from best source */\n      var baseNames = [];\n      var seenBase = {};\n      function _pushBase(n) { if (n && !seenBase[n]) { seenBase[n] = true; baseNames.push(n); } }\n\n      if (bp.componentProducts && bp.componentProducts.length) {\n        bp.componentProducts.forEach(function(c) { if (c && c.title) _pushBase(c.title); });\n      }\n\n      /* Add each component \u2014 enriched with qualifier when available */\n      baseNames.forEach(function(name) {\n        if (quals && quals[name]) {\n          _add(name + ' (' + quals[name] + ')', name);\n        } else {\n          _add(name, name);\n        }\n      });\n    }\n\n    if (!items.length) {\n      container.style.display = 'none';\n      return;\n    }\n\n    var html = '';\n    items.forEach(function(name) {\n      html += '<li class=\"u1-pdp-bundle-card__component-item\">' + (_u1IsGiftName(bp, name) ? '<b class=\"u1-pdp-bundle-card__free\">' + _escHtml(_u1FgText('data-u1-fg-free')) + '</b> ' : '') + _escHtml(name) + '</li>';\n    });\n    list.innerHTML = html;\n  }\n\n  /* Colores excluidos de packs (solo compra individual): esconder bolitas en modo bundle */\n  var _bundleExcludedColors = String(root.dataset.u1PdpBundleExcludedColors || '')\n    .split(',')\n    .map(function(s){ return s.trim().toLowerCase().replace(/\\s+/g, '-'); })\n    .filter(Boolean);\n  function applyBundleColorExclusions() {\n    if (!_bundleExcludedColors.length) return;\n    var active = !!(pkState.activeBundlePack && pkState.activeBundlePack.isSolo !== true);\n    var swatches = Array.prototype.slice.call(root.querySelectorAll('[data-u1-pdp-color]'));\n    var hidSelected = false;\n    swatches.forEach(function(btn) {\n      var h = String(btn.dataset.u1PdpValueHandle || '').toLowerCase();\n      if (_bundleExcludedColors.indexOf(h) === -1) return;\n      btn.classList.toggle('u1-pdp-color__swatch--bundle-hidden', active);\n      if (active && btn.classList.contains('is-selected')) hidSelected = true;\n    });\n    /* Si el color elegido quedo excluido, saltar al primer color visible */\n    if (active && hidSelected) {\n      var next = swatches.find(function(b) {\n        return !b.classList.contains('u1-pdp-color__swatch--bundle-hidden') &&\n               !b.classList.contains('is-disabled') && !b.hidden;\n      });\n      if (next) { try { next.click(); } catch (_e) {  } }\n    }\n  }\n\n  function selectPack(packId) {\n    /* Pack agotado: no seleccionable */\n    for (var _si = 0; _si < bpEls.cards.length; _si++) {\n      if (bpEls.cards[_si].getAttribute('data-pack-id') === packId &&\n          bpEls.cards[_si].classList.contains('u1-pdp-bundle-card--soldout')) return;\n    }\n    pkState.selectedPackId   = packId;\n    pkState.activeBundlePack = (packId && bundlePacksByHandle[packId]) || null;\n\n    /* Visual state on cards + populate components */\n    bpEls.cards.forEach(function(c) {\n      var sel = c.getAttribute('data-pack-id') === packId;\n      c.classList.toggle('is-selected', sel);\n      c.setAttribute('aria-pressed', sel ? 'true' : 'false');\n      if (sel) {\n        var handle = c.getAttribute('data-pack-handle');\n        var bp = bundlePacksByHandle[handle] || null;\n        if (bp) populateComponents(c, bp);\n      }\n    });\n    root.setAttribute('data-u1-pdp-bundle-active', pkState.activeBundlePack ? 'true' : 'false');\n    try { applyBundleColorExclusions(); } catch (_eBx) {  }\n\n    /* \u2500\u2500 Reset non-persistent selections (visor, accessories, crash) \u2500\u2500 */\n    /* Deselect all visors */\n    root.querySelectorAll('[data-u1-pdp-visor=\"true\"][aria-pressed=\"true\"]').forEach(function(btn) {\n      btn.setAttribute('aria-pressed', 'false');\n      btn.classList.remove('is-selected');\n      var key = btn.dataset.u1PdpAccessoryKey || btn.dataset.u1PdpAccessoryHandle;\n      if (key && state.accessories.has(key)) state.accessories.delete(key);\n    });\n    /* Deselect all non-visor accessories */\n    root.querySelectorAll('[data-u1-pdp-accessory][aria-pressed=\"true\"]:not([data-u1-pdp-visor=\"true\"])').forEach(function(btn) {\n      btn.setAttribute('aria-pressed', 'false');\n      btn.classList.remove('is-selected');\n      var key = btn.dataset.u1PdpAccessoryKey || btn.dataset.u1PdpAccessoryHandle;\n      if (key && state.accessories.has(key)) state.accessories.delete(key);\n    });\n    /* Reset crash replacement to default (standard) */\n    var crashCards = root.querySelectorAll('[data-u1-pdp-crash-option]');\n    crashCards.forEach(function(c) {\n      var isStd = c.getAttribute('data-u1-pdp-crash-option') === 'standard';\n      c.classList.toggle('is-selected', isStd);\n      c.classList.toggle('is-standard', isStd);\n      c.setAttribute('aria-pressed', isStd ? 'true' : 'false');\n    });\n    if (typeof state.crashVariantId !== 'undefined') state.crashVariantId = 0;\n\n    /* Heading, URL, chapter visibility, visor filter, pricing */\n    updateHeading(packId);\n    syncUrl(packId);\n    applyChapterVisibility(packId);\n    filterVisorOptions(pkState.activeBundlePack);\n    applyBundleIncludedLabels(pkState.activeBundlePack);\n    notifyPricing();\n    /* Re-evaluate ATC state \u2014 visor requirement may have changed */\n    try { if (root._u1UpdateAtcAvailability) root._u1UpdateAtcAvailability(); } catch (_e) {}\n    /* Update \"Features unlocked\" \u2014 los componentes del bundle (ej. remote) desbloquean\n       features aunque el accesorio no est\u00E9 seleccionado manualmente. */\n    try { if (root._u1SyncFeaturesUnlocked) root._u1SyncFeaturesUnlocked(); } catch (_e) {}\n    /* Update mobile galleries for bundle step */\n    try { if (root._u1RenderMobileGalleries) root._u1RenderMobileGalleries(); } catch (_e) {}\n    /* Update desktop gallery for bundle image (delay to win over transitionGalleryToColor) */\n    window.setTimeout(function() {\n      try { if (root._u1UpdateBundleGallery) root._u1UpdateBundleGallery(); } catch (_e) {}\n    }, 50);\n    /* Notify other sections (Inside the Box tabs) */\n    try { document.dispatchEvent(new CustomEvent('u1:pdp:pack-change', { detail: { packHandle: packId || '', bundlePack: pkState.activeBundlePack } })); } catch (_e) {}\n  }\n\n  /** Hide visor cards whose style is not in the pack's allowedVisorStyles */\n  function filterVisorOptions(bp) {\n    var visorCards = Array.from(root.querySelectorAll('[data-u1-pdp-visor=\"true\"]'));\n    if (!visorCards.length) return;\n\n    /* No bundle or solo -> show all visors */\n    if (!bp || bp.isSolo) {\n      visorCards.forEach(function(c) {\n        var hit = c.closest('.u1-pdp-card-hit');\n        if (hit) hit.hidden = false;\n      });\n      return;\n    }\n\n    /* Read allowed visor styles from pack setting (e.g. \"Clear,Tinted\") */\n    var allowedRaw = (bp.allowedVisorStyles || '').trim();\n    if (!allowedRaw) {\n      /* No filter set -> show all */\n      visorCards.forEach(function(c) {\n        var hit = c.closest('.u1-pdp-card-hit');\n        if (hit) hit.hidden = false;\n      });\n      return;\n    }\n    var allowed = allowedRaw.split(',').map(function(s) { return s.trim().toLowerCase(); }).filter(Boolean);\n    if (!allowed.length) return;\n\n    visorCards.forEach(function(c) {\n      var style = (c.getAttribute('data-u1-pdp-accessory-filter-style') || '').toLowerCase();\n      var hit = c.closest('.u1-pdp-card-hit');\n      if (!hit) return;\n      if (!style) { hit.hidden = false; return; }\n      hit.hidden = allowed.indexOf(style) === -1;\n    });\n  }\n\n\n  /** Show \"Included\" instead of price on accessory/visor cards that are part of the bundle */\n  function applyBundleIncludedLabels(bp) {\n    var allCards = Array.from(root.querySelectorAll('[data-u1-pdp-accessory]'));\n    var bundleHandles = new Set();\n    var hasVisorChapter = false;\n    if (bp && !bp.isSolo) {\n      (bp.componentProducts || []).forEach(function(cp) { if (cp && cp.handle) bundleHandles.add(cp.handle); });\n      hasVisorChapter = (bp.chapters || '').toLowerCase().indexOf('visor') !== -1;\n    }\n    allCards.forEach(function(c) {\n      var priceRow = c.querySelector('[data-u1-pdp-card-price-row]');\n      if (!priceRow) return;\n      if (!priceRow._u1OrigHTML) priceRow._u1OrigHTML = priceRow.innerHTML;\n      var handle = (c.getAttribute('data-u1-pdp-accessory-handle') || '');\n      var isVisor = c.getAttribute('data-u1-pdp-visor') === 'true';\n      var isIncluded = bp && !bp.isSolo && (bundleHandles.has(handle) || (isVisor && hasVisorChapter));\n      /* Visor que no es el componente del pack (Adaptive en Ride/Premium): es un upgrade,\n         se muestra el delta contra el visor incluido, ya con el % del pack aplicado */\n      var upgradeTxt = '';\n      var upgradeHtml = '';\n      if (isIncluded && isVisor && !bundleHandles.has(handle)) {\n        try {\n          var _toCents = parseMoneyCents;\n          var _baseCard = null;\n          (bp.componentProducts || []).forEach(function(cp) {\n            if (_baseCard || !cp || !cp.handle) return;\n            _baseCard = root.querySelector('[data-u1-pdp-accessory-handle=\"' + cp.handle + '\"][data-u1-pdp-visor=\"true\"]');\n          });\n          var _upStr = c.getAttribute('data-u1-pdp-info-price') || '';\n          var _upC = _toCents(_upStr);\n          var _baseC = _baseCard ? _toCents(_baseCard.getAttribute('data-u1-pdp-info-price')) : 0;\n          var _pct = Number(bp.discountPercent || 0) || 0;\n          var _full = _upC - _baseC;\n          var _delta = Math.round((_upC - _baseC) * (1 - _pct / 100));\n          if (_baseCard && _delta > 0) {\n            var _sym = (_upStr.match(/^[^0-9]*/) || [''])[0];\n            upgradeTxt = '+ ' + formatMoneyCents(_delta);\n            /* Carlos 2026-10-02: delta sin descuento tachado, delta con el % del pack y chip del % (mismo chip que la card del pack) */\n            if (_pct > 0 && _full > _delta) {\n              var _pkBadge = root.querySelector('[data-pack-handle=\"' + (bp.packHandle || '') + '\"] .u1-pdp-bundle-card__badge');\n              var _chipStyle = (_pkBadge && _pkBadge.getAttribute('style')) ? ' style=\"' + _pkBadge.getAttribute('style').replace(/[\"<>]/g, '') + '\"' : '';\n              upgradeHtml = '<span class=\"u1-pdp-card__price u1-text-body-xs u1-pdp-card__price--discount\" data-u1-pdp-card-price>'\n                + '<span class=\"u1-pdp-card__price-msrp\">+ ' + formatMoneyCents(_full) + '</span>'\n                + '<span class=\"u1-pdp-card__price-final\">' + upgradeTxt + '</span>'\n                + '<span class=\"u1-pdp-bundle-card__badge u1-text-body-xs--bold\"' + _chipStyle + '>- ' + _pct + '%</span>'\n                + '</span>';\n            }\n          }\n        } catch (_eUp) { upgradeTxt = ''; }\n      }\n      /* pesta\u00F1a \"Why not upgrade?\" sobre la card (markup en el picker de visor) */\n      try {\n        var _hit = c.closest('.u1-pdp-card-hit');\n        var _tab = _hit ? _hit.querySelector('[data-u1-pdp-upgrade-tab]') : null;\n        if (_tab) _tab.hidden = !upgradeTxt;\n        if (_hit) _hit.classList.toggle('u1-pdp-card-hit--upgrade', !!upgradeTxt);\n      } catch (_eTab) {}\n      if (upgradeTxt) {\n        priceRow.innerHTML = upgradeHtml || ('<span class=\"u1-pdp-card__price u1-text-body-xs\" data-u1-pdp-card-price>' + upgradeTxt + '</span>');\n        priceRow.style.display = '';\n      } else if (isIncluded) {\n        /* incluido en el pack: precio original tachado + \"Included\" (Carlos 2026-10-02) */\n        var _incStr = (c.getAttribute('data-u1-pdp-info-price') || '').replace(/[\"<>&]/g, '');\n        priceRow.innerHTML = _incStr\n          ? '<span class=\"u1-pdp-card__price u1-text-body-xs u1-pdp-card__price--discount\" data-u1-pdp-card-price><span class=\"u1-pdp-card__price-msrp\">' + _incStr + '</span><span class=\"u1-pdp-card__price-final\">Included</span></span>'\n          : '<span class=\"u1-pdp-card__price u1-text-body-xs\" data-u1-pdp-card-price>Included</span>';\n        priceRow.style.display = '';\n      } else {\n        priceRow.innerHTML = priceRow._u1OrigHTML;\n        priceRow.style.display = '';\n      }\n    });\n  }\n\n  /* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n     5. EVENT LISTENERS & INIT\n     \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n  bpEls.cards.forEach(function(card) {\n    /* Pre-populate component lists for all cards (hover reveal) */\n    var handle = card.getAttribute('data-pack-handle');\n    var bp = bundlePacksByHandle[handle] || null;\n    if (bp) populateComponents(card, bp);\n\n    card.addEventListener('click', function() {\n      selectPack(card.getAttribute('data-pack-id'));\n    });\n    card.addEventListener('keydown', function(e) {\n      if (e.key === 'Enter' || e.key === ' ') {\n        e.preventDefault();\n        selectPack(card.getAttribute('data-pack-id'));\n      }\n    });\n    /* Hover preview (desktop only \u2014 no hover on touch devices) */\n    if (window.matchMedia('(hover: hover)').matches) {\n      card.addEventListener('mouseenter', function() {\n        var packId = card.getAttribute('data-pack-id');\n        var h = card.getAttribute('data-pack-handle');\n        var hBp = bundlePacksByHandle[h] || null;\n        if (hBp) {\n          try { if (root._u1PreviewBundleGallery) root._u1PreviewBundleGallery(hBp); } catch (_e) {}\n        } else if (packId === 'solo') {\n          try { if (root._u1HideBundleOverlay) root._u1HideBundleOverlay(); } catch (_e) {}\n        }\n      });\n      card.addEventListener('mouseleave', function() {\n        try { if (root._u1RestoreBundleGallery) root._u1RestoreBundleGallery(); } catch (_e) {}\n      });\n    }\n  });\n\n  /* URL param auto-select (e.g. ?bundle=aura-ride-pack) */\n  var bundleParam = new URLSearchParams(window.location.search).get('bundle');\n  if (bundleParam && getCardById(bundleParam)) {\n    selectPack(bundleParam);\n  } else {\n    /* Default: auto-select solo card */\n    /* El id de la card solo NO siempre es 'solo': sale de pack_handle del block\n       (en SPARKY es 'sparky-solo'), asi que se cae a la card marcada como solo.\n       Sin esto la PDP arrancaba sin nada seleccionado. */\n    var soloCard = getCardById('solo') || picker.querySelector('.u1-pdp-bundle-card--solo, .u1-pdp-pack-card--solo');\n    if (soloCard) selectPack(soloCard.getAttribute('data-pack-id') || 'solo');\n  }\n  /* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n     GATE POR MODELO (pedido de Fermin 2026-07-31, caso FARO en UK)\n     En las PDPs con chapter de modelo (ej. FARO vs FARO Mips) hay packs que\n     solo valen para uno de los dos. La card declara su modelo en\n     `required_model_handle` y aca se aplica:\n       \u00B7 card con modelo distinto al elegido -> se esconde\n       \u00B7 si el pack activo se esconde -> se vuelve al card solo, en silencio\n       \u00B7 si no queda ningun pack visible -> se esconde el chapter completo\n     \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n  function filterPacksByModel(modelHandle) {\n    /* Normaliza a handle: en modo \"productos separados\" (FARO) ya llega como\n       faro-mips, pero en modo variante (NEON) llega el valor crudo de la opcion,\n       \"NEON Mips\" con espacio y mayusculas. Sin esto nunca matchea y las cards\n       quedan escondidas siempre. */\n    var norm = function (v) {\n      return (v || '').toString().trim().toLowerCase()\n        .replace(/['\u2019]/g, '')\n        .replace(/[^a-z0-9]+/g, '-')\n        .replace(/^-+|-+$/g, '');\n    };\n    var mh = norm(modelHandle);\n    var visibles = 0;\n    var activeOculto = false;\n    bpEls.cards.forEach(function(card) {\n      var req = norm(card.getAttribute('data-pack-model'));\n      /* Sin modelo elegido, una card con gate NO se muestra (antes pasaba todo\n         con seleccion vacia; caso Smart Light sin default_model_value) */\n      var ok = !req || req === mh;\n      card.hidden = !ok;\n      card.setAttribute('aria-hidden', ok ? 'false' : 'true');\n      var esSolo = card.classList.contains('u1-pdp-bundle-card--solo');\n      if (ok && !esSolo) visibles += 1;\n      if (!ok && card.getAttribute('data-pack-id') === pkState.selectedPackId) activeOculto = true;\n    });\n    if (activeOculto) {\n      var sc = getCardById('solo') || picker.querySelector('.u1-pdp-bundle-card--solo, .u1-pdp-pack-card--solo');\n      if (sc) selectPack(sc.getAttribute('data-pack-id') || 'solo');\n    }\n    /* Sin packs para este modelo no tiene sentido mostrar el chapter.\n       La decision se publica en el dataset porque el gate por variantes\n       (bundle_only_variant_ids) fuerza a mostrar el chapter en cada update de\n       seleccion y, si no, volvia a abrirlo dejando solo el titulo colgado. */\n    var ocultar = visibles === 0;\n    root.dataset.u1PackGateHidden = ocultar ? '1' : '0';\n    var step = root.querySelector('[data-u1-pdp-step=\"bundle\"]');\n    if (step) {\n      step.hidden = ocultar;\n      step.setAttribute('aria-hidden', ocultar ? 'true' : 'false');\n    }\n  }\n  root._u1FilterPacksByModel = filterPacksByModel;\n\n  /* Estado inicial: si la PDP tiene chapter de modelo, se aplica el gate al cargar\n     leyendo el modelo ya seleccionado (o el default del setting). Sin esto, una card\n     con modelo declarado se veria hasta que el cliente toque el chapter. */\n  (function () {\n    try {\n      /* Solo si hay alguna card con gate declarado */\n      var hasGate = bpEls.cards.some(function (c) { return (c.getAttribute('data-pack-model') || '') !== ''; });\n      if (!hasGate) return;\n      var mStep = root.querySelector('[data-u1-pdp-step=\"product_model\"]');\n      if (mStep) {\n        var run = function () {\n          var sel = mStep.querySelector('[data-u1-pdp-product-model].is-selected');\n          var h = sel ? sel.getAttribute('data-u1-pdp-product-model-handle')\n                      : (root.dataset.u1PdpDefaultProductModel || '');\n          filterPacksByModel(h || '');\n        };\n        run();\n        [200, 800, 1800].forEach(function (ms) { window.setTimeout(run, ms); });\n        return;\n      }\n      /* Template light (ej. Smart Light): el chapter es \"model\" (cards con qty).\n         El gate lee el TITULO de la card seleccionada (coincide con el valor de\n         la opcion Model) al cargar y en cada click. */\n      var lStep = root.querySelector('[data-u1-pdp-step=\"model\"]');\n      if (!lStep) return;\n      var runLight = function () {\n        var sel = lStep.querySelector('[data-u1-pdp-model].is-selected');\n        var t = sel ? sel.querySelector('[data-u1-pdp-card-title]') : null;\n        filterPacksByModel(t ? (t.textContent || '').trim() : '');\n      };\n      runLight();\n      [200, 800, 1800].forEach(function (ms) { window.setTimeout(runLight, ms); });\n      root.addEventListener('click', function (e) {\n        var card = e.target && e.target.closest ? e.target.closest('[data-u1-pdp-step=\"model\"] [data-u1-pdp-model]') : null;\n        if (!card) return;\n        window.setTimeout(runLight, 0);\n      });\n      /* Smart Light: Pro Dual preseleccionado al cargar (equivalente al\n         default_model_value de NEON, que en template light no aplica) */\n      if (((root.dataset.u1PdpProductHandle || '').indexOf('smart-light') !== -1)) {\n        window.setTimeout(function () {\n          try {\n            if (lStep.querySelector('[data-u1-pdp-model].is-selected')) return;\n            var mcards = lStep.querySelectorAll('[data-u1-pdp-model]');\n            for (var mi = 0; mi < mcards.length; mi++) {\n              var mt = mcards[mi].querySelector('[data-u1-pdp-card-title]');\n              if (mt && /pro dual/i.test(mt.textContent || '')) { mcards[mi].click(); break; }\n            }\n          } catch (_eDM) {}\n        }, 250);\n      }\n    } catch (_e) {}\n  })();\n\n  /* Re-apply included labels after DOM is fully ready */\n  setTimeout(function() { try { applyBundleIncludedLabels(pkState.activeBundlePack); } catch(_e) {} }, 300);\n  /* Sync \"features unlocked\" una vez que el pack selector ya est\u00E1 listo \u2014 el select\n     inicial (default / deep-link ?bundle=) corre antes de asignar root._packSelector. */\n  setTimeout(function() { try { if (root._u1SyncFeaturesUnlocked) root._u1SyncFeaturesUnlocked(); } catch(_e) {} }, 0);\n\n\n  /* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n     6. PUBLIC API  (keeps compat with _getBundleVariantNow + breakdown)\n     \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n  root._packSelector = {\n    selectPack:          selectPack,\n    goBack:              function() {\n      var sc = getCardById('solo') || picker.querySelector('.u1-pdp-bundle-card--solo, .u1-pdp-pack-card--solo');\n      selectPack(sc ? (sc.getAttribute('data-pack-id') || 'solo') : 'solo');\n    },\n    getSelectedPackId:   function() { return pkState.selectedPackId; },\n    getActiveBundlePack: function() { return pkState.activeBundlePack; },\n\n    /* Find the bundle variant matching the user's current selections.\n       @param selections  object with color, size, visorStyle\n       @returns variant object or null */\n    findBundleVariant: function(selections) {\n      var bp = pkState.activeBundlePack;\n      if (!bp || !bp.variants) return null;\n\n      var sel  = selections || {};\n      var opts = bp.options || [];\n\n      var sizeIdx = -1, colorIdx = -1, visorIdx = -1;\n      opts.forEach(function(o, i) {\n        var n = (o.name || '').toLowerCase();\n        if (n.indexOf('size') !== -1)                                                      sizeIdx  = i;\n        else if (n.indexOf('color') !== -1 || n.indexOf('colour') !== -1)                  colorIdx = i;\n        else if (n.indexOf('visor') !== -1 || n.indexOf('style') !== -1 || n.indexOf('lens') !== -1) visorIdx = i;\n      });\n\n      var getOpt = function(v, idx) {\n        return idx === 0 ? v.option1 : idx === 1 ? v.option2 : idx === 2 ? v.option3 : null;\n      };\n\n      var match = bp.variants.filter(function(v) {\n        if (sel.color      && colorIdx >= 0 && getOpt(v, colorIdx) !== sel.color)      return false;\n        if (sel.size       && sizeIdx  >= 0 && getOpt(v, sizeIdx)  !== sel.size)       return false;\n        if (sel.visorStyle && visorIdx >= 0 && getOpt(v, visorIdx) !== sel.visorStyle) return false;\n        return true;\n      });\n\n      var avail = match.filter(function(v) { return v.available; });\n      return avail[0] || match[0] || null;\n    }\n  };\n})();\n\n/* ---- antes snippets/u1-pdp-customizer-js.liquid ---- */\nconst findVariantByOptions = (optsMap, { preferAvailable } = { preferAvailable: true }) => {\nif (!variants || variants.length === 0) return null;\nconst matches = (v) => {\nif (!v) return false;\nfor (const [h, val] of optsMap.entries()) {\nconst got = getVariantOptionByHandle(v, h);\nif (!got || got !== val) return false;\n}\nreturn true;\n};\nif (preferAvailable) return variants.find(v => v && v.available && matches(v)) || variants.find(v => v && matches(v)) || null;\nreturn variants.find(v => v && matches(v)) || null;\n};\nconst getColorBadgeType = (colorValue) => {\nconst h = optionNameHandle(colorValue);\nconst entry = Array.isArray(colorBadges) ? colorBadges.find(b => b && b.colorHandle === h) : null;\nif (entry && typeof entry.badge !== 'undefined' && entry.badge !== null) return String(entry.badge);\nreturn 'none';\n};\nconst setColorBadgeUI = (type) => {\nif (!colorBadgeEl) return;\nconst t = (type || 'none').toString();\nconst next = (() => {\nif (t === 'limited') return { type: 'limited', text: 'Limited Edition', cls: 'u1-pdp-color__badge--limited' };\nif (t === 'sport') return { type: 'sport', text: 'Sport Style', cls: 'u1-pdp-color__badge--sport' };\nif (t === 'best_seller') return { type: 'best_seller', text: 'Best Seller', cls: 'u1-pdp-color__badge--best' };\nif (t === 'staff_pick') return { type: 'staff_pick', text: 'Staff Pick', cls: 'u1-pdp-color__badge--staff' };\nreturn { type: 'none', text: '', cls: '' };\n})();\nconst getBadgeMeasureEl = () => {\nif (root._u1BadgeMeasureEl) return root._u1BadgeMeasureEl;\nconst el = document.createElement('div');\nel.className = 'u1-pdp-color__badge is-visible';\nel.style.position = 'absolute';\nel.style.left = '-9999px';\nel.style.top = '0';\nel.style.visibility = 'hidden';\nel.style.pointerEvents = 'none';\nel.style.width = 'auto';\nel.style.opacity = '0';\nel.innerHTML = '<p class=\"u1-pdp-color__badge-text\"></p>';\nroot.appendChild(el);\nroot._u1BadgeMeasureEl = el;\nwindow.addEventListener('resize', () => { root._u1BadgeW = null; colorBadgeEl._u1W = undefined; }, { passive: true });\nreturn el;\n};\nconst measureWidth = (cls, text) => {\nconst key = (cls || '') + '|' + (text || '');\nconst cache = root._u1BadgeW || (root._u1BadgeW = new Map());\nif (cache.has(key)) return cache.get(key);\nconst m = getBadgeMeasureEl();\nm.classList.remove('u1-pdp-color__badge--limited', 'u1-pdp-color__badge--sport', 'u1-pdp-color__badge--best', 'u1-pdp-color__badge--staff', 'u1-pdp-color__badge--soldout');\nif (cls) m.classList.add(cls);\nconst p = m.querySelector('p');\nif (p) p.textContent = text || '';\nconst w = Math.ceil(m.getBoundingClientRect().width || 0);\ncache.set(key, w);\nreturn w;\n};\nconst token = String((Number(colorBadgeEl.dataset.u1AnimToken || '0') || 0) + 1);\ncolorBadgeEl.dataset.u1AnimToken = token;\nif (colorBadgeEl._u1AnimTimer) {\nwindow.clearTimeout(colorBadgeEl._u1AnimTimer);\ncolorBadgeEl._u1AnimTimer = null;\n}\nconst cleanupToAuto = () => {\nif (colorBadgeEl.dataset.u1AnimToken !== token) return;\ncolorBadgeEl.style.width = '';\n};\nconst animateWidth = (fromW, toW, done) => {\nif (colorBadgeEl.dataset.u1AnimToken !== token) return;\nconst f = Math.max(0, Math.ceil(fromW || 0));\nconst tW = Math.max(0, Math.ceil(toW || 0));\ncolorBadgeEl.style.width = `${f}px`;\ncolorBadgeEl._u1W = tW;\nwindow.requestAnimationFrame(() => { window.requestAnimationFrame(() => {\nif (colorBadgeEl.dataset.u1AnimToken !== token) return;\ncolorBadgeEl.style.width = `${tW}px`;\n}); });\nconst onEnd = (e) => {\nif (colorBadgeEl.dataset.u1AnimToken !== token) return;\nif (!e || e.propertyName !== 'width') return;\ncolorBadgeEl.removeEventListener('transitionend', onEnd);\ndone && done();\n};\ncolorBadgeEl.addEventListener('transitionend', onEnd);\ncolorBadgeEl._u1AnimTimer = window.setTimeout(() => {\nif (colorBadgeEl.dataset.u1AnimToken !== token) return;\ncolorBadgeEl.removeEventListener('transitionend', onEnd);\ndone && done();\n}, 260);\n};\nconst prevVisible = colorBadgeEl.classList.contains('is-visible');\nconst prevW = (typeof colorBadgeEl._u1W === 'number') ? colorBadgeEl._u1W : Math.ceil(colorBadgeEl.getBoundingClientRect().width || 0);\nconst prevType = (colorBadgeEl.dataset.u1BadgeType || 'none').toString();\nif (next.type === 'none') {\ncolorBadgeEl.dataset.u1BadgeType = 'none';\ncolorBadgeEl.setAttribute('aria-hidden', 'true');\nconst fromW = prevVisible ? prevW : 0;\ncolorBadgeEl.style.width = `${fromW}px`;\nif (colorBadgeTextEl) colorBadgeTextEl.textContent = '';\nelse colorBadgeEl.textContent = '';\ncolorBadgeEl.classList.remove('u1-pdp-color__badge--limited', 'u1-pdp-color__badge--sport', 'u1-pdp-color__badge--best', 'u1-pdp-color__badge--staff', 'u1-pdp-color__badge--soldout');\ncolorBadgeEl.classList.remove('is-visible');\ncolorBadgeEl._u1W = 0;\nwindow.requestAnimationFrame(() => { window.requestAnimationFrame(() => {\nif (colorBadgeEl.dataset.u1AnimToken !== token) return;\ncolorBadgeEl.style.width = `0px`;\n}); });\nconst onEnd = (e) => {\nif (colorBadgeEl.dataset.u1AnimToken !== token) return;\nif (!e || e.propertyName !== 'width') return;\ncolorBadgeEl.removeEventListener('transitionend', onEnd);\ncleanupToAuto();\n};\ncolorBadgeEl.addEventListener('transitionend', onEnd);\ncolorBadgeEl._u1AnimTimer = window.setTimeout(() => {\nif (colorBadgeEl.dataset.u1AnimToken !== token) return;\ncolorBadgeEl.removeEventListener('transitionend', onEnd);\ncleanupToAuto();\n}, 260);\nreturn;\n}\ncolorBadgeEl.classList.remove('u1-pdp-color__badge--limited', 'u1-pdp-color__badge--sport', 'u1-pdp-color__badge--best', 'u1-pdp-color__badge--staff', 'u1-pdp-color__badge--soldout');\nif (next.cls) colorBadgeEl.classList.add(next.cls);\nif (colorBadgeTextEl) colorBadgeTextEl.textContent = next.text;\nelse colorBadgeEl.textContent = next.text;\ncolorBadgeEl.dataset.u1BadgeType = next.type;\ncolorBadgeEl.setAttribute('aria-hidden', 'false');\ncolorBadgeEl.classList.add('is-visible');\nconst toW = measureWidth(next.cls, next.text);\nif (!prevVisible || prevType === 'none') {\nanimateWidth(0, toW, () => {\ncleanupToAuto(); // vuelve a fit-content\n});\nreturn;\n}\nanimateWidth(prevW, toW, () => {\ncleanupToAuto(); // vuelve a fit-content\n});\n};\nconst getColorStatus = (colorValue) => {\nif (!colorValue) return { exists: false, available: false };\nif (state.size) {\nconst m = new Map();\nif (IS_VARIANT_MODEL_MODE && VARIANT_MODEL_OPTION_HANDLE && state.variantModel) {\nm.set(VARIANT_MODEL_OPTION_HANDLE, state.variantModel);\n}\nif (SIMPLE_MODEL_OPT_HANDLE && state.simpleModelOptionValue) {\nm.set(SIMPLE_MODEL_OPT_HANDLE, state.simpleModelOptionValue);\n}\nm.set(COLOR_HANDLE, colorValue);\nm.set(SIZE_HANDLE, state.size);\nconst v = findVariantByOptions(m, { preferAvailable: false });\nreturn { exists: !!v, available: !!(v && v.available), variant: v || null };\n}\nconst variantMatchesModel = (v) => {\nif (IS_VARIANT_MODEL_MODE && VARIANT_MODEL_OPTION_HANDLE && state.variantModel) {\nreturn getVariantOptionByHandle(v, VARIANT_MODEL_OPTION_HANDLE) === state.variantModel;\n}\nif (SIMPLE_MODEL_OPT_HANDLE && state.simpleModelOptionValue) {\nreturn getVariantOptionByHandle(v, SIMPLE_MODEL_OPT_HANDLE) === state.simpleModelOptionValue;\n}\nreturn true;\n};\nconst any = variants.find(v => v && getVariantOptionByHandle(v, COLOR_HANDLE) === colorValue && variantMatchesModel(v));\nconst anyAvail = variants.find(v => v && v.available && getVariantOptionByHandle(v, COLOR_HANDLE) === colorValue && variantMatchesModel(v));\nreturn { exists: !!any, available: !!anyAvail, variant: (anyAvail || any) || null };\n};\nconst setColorDisplay = (colorValue, hoverOnly) => {\nconst v = (colorValue || '').toString();\nif (!v) {\nif (colorNameEl) {\ncolorNameEl.textContent = PLACEHOLDER_COLOR_TEXT;\ncolorNameEl.classList.add('is-placeholder');\n}\nif (colorLabelEl && !hoverOnly) { colorLabelEl.textContent = PLACEHOLDER_COLOR_TEXT; }\nif (!hoverOnly) { updateStepMobileTitle('color', ''); }\nsetColorBadgeUI('none');\nsetColorUnsetUI();\nreturn;\n}\nif (colorNameEl) {\ncolorNameEl.textContent = v;\ncolorNameEl.classList.remove('is-placeholder');\n}\nif (colorLabelEl && !hoverOnly) { colorLabelEl.textContent = v; }\nif (!hoverOnly) { updateStepMobileTitle('color', v); }\nsetColorBadgeUI(getColorBadgeType(v));\nsetColorUnsetUI();\n};\nconst updateColorAvailability = () => {\nif (!colorButtons || colorButtons.length === 0) return;\ncolorButtons.forEach(btn => {\nconst v = btn.dataset.u1PdpValue || '';\nconst status = getColorStatus(v);\nconst disabled = !status.exists;\nbtn.classList.toggle('is-disabled', disabled);\nbtn.setAttribute('aria-disabled', disabled ? 'true' : 'false');\nbtn.hidden = disabled;\nconst oos = status.exists && !status.available;\nbtn.classList.toggle('is-oos', oos);\nconst colorVariants = variants.filter(vr => vr && getVariantOptionByHandle(vr, COLOR_HANDLE) === v);\nconst total = colorVariants.length;\nconst availCount = colorVariants.filter(vr => vr && vr.available).length;\nconst someSoldOut = total > 0 && availCount > 0 && availCount < total;\nconst allSoldOut = total > 0 && availCount === 0;\nbtn.classList.toggle('is-partial-soldout', someSoldOut);\nbtn.classList.toggle('is-soldout', allSoldOut);\n});\nif (state.color) {\nconst selectedBtn = colorButtons.find(b => (b.dataset.u1PdpValue || '') === state.color);\nif (selectedBtn && selectedBtn.getAttribute('aria-disabled') === 'true') {\nconst memorized = (IS_VARIANT_MODEL_MODE && state.variantModel)\n? (colorMemory.get(state.variantModel) || null) : null;\nconst memorizedBtn = memorized\n? colorButtons.find(b => b.getAttribute('aria-disabled') !== 'true' && (b.dataset.u1PdpValue || '') === memorized)\n: null;\nconst next = memorizedBtn || colorButtons.find(b => b.getAttribute('aria-disabled') !== 'true');\nif (next) {\nstate.color = next.dataset.u1PdpValue || null;\nsetColorDisplay(state.color);\n}\n}\n}\nsetSelectedButton(colorButtons, state.color || null);\n};\nconst updateSizeAvailability = () => {\nif (!sizeButtons || sizeButtons.length === 0) return;\nconst mBase = new Map();\nif (IS_VARIANT_MODEL_MODE && VARIANT_MODEL_OPTION_HANDLE && state.variantModel) {\nmBase.set(VARIANT_MODEL_OPTION_HANDLE, state.variantModel);\n}\nif (SIMPLE_MODEL_OPT_HANDLE && state.simpleModelOptionValue) {\nmBase.set(SIMPLE_MODEL_OPT_HANDLE, state.simpleModelOptionValue);\n}\nif (HAS_COLOR_OPTION && state.color) {\nmBase.set(COLOR_HANDLE, state.color);\n}\nif (HAS_COLOR_CHAPTER && HAS_COLOR_OPTION && !state.color && !state.simpleModelOptionValue && !(IS_VARIANT_MODEL_MODE && state.variantModel)) {\nsizeButtons.forEach((btn) => {\nbtn.classList.remove('is-oos');\nbtn.setAttribute('aria-disabled', 'false');\n});\nreturn;\n}\nsizeButtons.forEach((btn) => {\nconst sVal = btn.dataset.u1PdpValue || '';\nconst m = new Map(mBase);\nm.set(SIZE_HANDLE, sVal);\nconst v = findVariantByOptions(m, { preferAvailable: false });\nconst exists = !!v;\nconst available = !!(v && v.available && !isVariantOosNonPreorder(v));\nconst oos = exists && !available;\nbtn.classList.toggle('is-oos', oos);\nbtn.setAttribute('aria-disabled', exists ? 'false' : 'true');\n});\n};\nconst findVariant = (color, size) => {\nif (!variants || variants.length === 0) return null;\nconst wanted = getSelectedOptionsMap();\nconst isHiddenColorVariant = (v) => {\nif (!v) return false;\nif (!HAS_COLOR_OPTION || !COLOR_HANDLE) return false;\nif (!HIDDEN_COLOR_HANDLES || HIDDEN_COLOR_HANDLES.size === 0) return false;\nconst c = getVariantOptionByHandle(v, COLOR_HANDLE);\nconst ch = optionNameHandle(c || '');\nreturn !!(ch && HIDDEN_COLOR_HANDLES.has(ch));\n};\nconst matchesWanted = (v) => {\nif (!v) return false;\nfor (const [h, val] of wanted.entries()) {\nconst got = getVariantOptionByHandle(v, h);\nif (!got || got !== val) return false;\n}\nreturn true;\n};\nconst exactAvail = variants.find(v => v && v.available && !isHiddenColorVariant(v) && matchesWanted(v));\nif (exactAvail) return exactAvail;\nconst exact = variants.find(v => v && !isHiddenColorVariant(v) && matchesWanted(v));\nif (exact) return exact;\nif (state.size) {\nconst vSize = variants.find(v => v && v.available && !isHiddenColorVariant(v) && getVariantOptionByHandle(v, SIZE_HANDLE) === state.size);\nif (vSize) return vSize;\n}\nconst v =\nvariants.find(v => v && v.available && !isHiddenColorVariant(v)) ||\nvariants.find(v => v && !isHiddenColorVariant(v)) ||\nvariants.find(v => v && v.available) ||\nvariants[0];\nreturn v || null;\n};\nconst setSelectedButton = (buttons, value) => {\nbuttons.forEach(btn => {\nconst isOn = btn.dataset.u1PdpValue === value;\nbtn.classList.toggle('is-selected', isOn);\nbtn.setAttribute('aria-pressed', isOn ? 'true' : 'false');\n});\n};\n\nconst syncConditionalFreeAccessories = () => {\ntry {\nconst curVid = Number(state && state.variantId ? state.variantId : 0) || 0;\nconst btns = Array.from(root.querySelectorAll('[data-u1-pdp-accessory][data-u1-pdp-free-variant-ids]'));\nif (!btns.length) return;\nlet changed = false;\nbtns.forEach((btn) => {\nconst idsRaw = (btn.dataset.u1PdpFreeVariantIds || '').toString();\nconst ids = idsRaw.split(',').map(s => Number(String(s).trim())).filter(n => n > 0);\nconst isFreeNow = curVid > 0 && ids.indexOf(curVid) !== -1;\nconst wasFree = btn.getAttribute('data-u1-pdp-free') === 'true';\nif (isFreeNow === wasFree) return;\nchanged = true;\nconst handle = btn.dataset.u1PdpAccessoryHandle || '';\nconst key = btn.dataset.u1PdpAccessoryKey || handle;\nconst priceRow = btn.querySelector('[data-u1-pdp-card-price-row]');\nif (isFreeNow) {\n  if (priceRow && btn._u1NormalPriceHTML == null) btn._u1NormalPriceHTML = priceRow.innerHTML;\n  const label = btn.dataset.u1PdpFreeLabel || 'Free';\n  const normalPrice = btn.dataset.u1PdpInfoPriceNormal || '';\n  if (priceRow) {\n    priceRow.innerHTML = '<span class=\"u1-pdp-card__price u1-text-body-xs u1-pdp-card__price--discount\">' +\n      (normalPrice ? '<span class=\"u1-pdp-card__price-msrp\">' + normalPrice + '</span>' : '') +\n      '<span class=\"u1-pdp-card__price-final\">' + label + '</span></span>';\n  }\n  btn.classList.add('u1-pdp-card--free', 'is-selected');\n  btn.setAttribute('data-u1-pdp-free', 'true');\n  btn.setAttribute('aria-pressed', 'true');\n  btn.dataset.u1PdpInfoPrice = label;\n  const syncSize = btn.dataset.u1PdpAccessorySyncSize === 'true';\n  const fixedVariantId = parseVariantId(btn.dataset.u1PdpAccessoryVariantId || '');\n  const filterOptions = readAccessoryFilterOptions(btn);\n  const variantId = fixedVariantId || resolveAccessoryVariantId({ handle, size: state.size, preferSize: syncSize, fixedVariantId: 0, filterOptions });\n  if (variantId) {\n    const discountCode = (btn.dataset.u1PdpDiscountCode || '').toString().trim();\n    const discountPercent = Number(btn.dataset.u1PdpDiscountPercent || 0) || 0;\n    state.accessories.set(key, { handle, variantId, qty: 1, syncSize, fixedVariantId: fixedVariantId || 0, discountCode, discountPercent, filterOptions: filterOptions || null, free: true });\n  }\n} else {\n  if (priceRow && btn._u1NormalPriceHTML != null) priceRow.innerHTML = btn._u1NormalPriceHTML;\n  btn.classList.remove('u1-pdp-card--free', 'is-selected');\n  btn.removeAttribute('data-u1-pdp-free');\n  btn.setAttribute('aria-pressed', 'false');\n  btn.dataset.u1PdpInfoPrice = btn.dataset.u1PdpInfoPriceNormal || '';\n  state.accessories.delete(key);\n}\n});\nif (changed) {\n  try { updateSummary(); } catch (_e) {}\n  try { syncFeaturesUnlocked(); } catch (_e) {}\n  try { updateAtcAvailability(); } catch (_e) {}\n}\n} catch (_e) {}\n};\nconst syncMainStateFromVariant = (v) => {\nif (!v) return;\nstate.variantId = v.id;\nconst nextColor = getVariantOptionByHandle(v, COLOR_HANDLE) || null;\nconst nextSize = getVariantOptionByHandle(v, SIZE_HANDLE) || null;\nif (nextColor && nextColor !== state.color) {\nstate.color = nextColor;\nsetSelectedButton(colorButtons, nextColor);\n}\nif (nextSize && nextSize !== state.size) {\nstate.size = nextSize;\nsetSelectedButton(sizeButtons, nextSize);\napplySizeActiveIndex();\nupdateSizePill();\n}\nsetColorDisplay(state.color);\nupdateColorAvailability();\nupdateSizeAvailability();\nupdateRenderScale();\nif (!hasCustomGallery) {\nconst featuredId = v.featured_media && v.featured_media.id ? v.featured_media.id : null;\nif (featuredId) {\nconst idx = slides.findIndex(s => (s.dataset.mediaId || '') === String(featuredId));\nif (idx >= 0) {\nstate.galleryIndex = idx;\nscrollGalleryToIndex(idx);\n}\n}\n}\nupdateSummary();\nupdateAtcAvailability();\nupdateSizeAvailability();\ntry { syncConditionalFreeAccessories(); } catch (_e) {}\nemitPdpSelection();\n};\nconst updateVariant = () => {\nconst needsModel = false;\nconst needsColor = (() => {\nif (TEMPLATE === 'light') return false;\nif (!HAS_COLOR_CHAPTER) return false;\nif (!HAS_COLOR_OPTION) return false;\nreturn !state.color;\n})();\nconst needsSize = (() => {\nif (TEMPLATE === 'light') return false;\nif (!HAS_CHAPTER_SIZE) return false;\nif (!HAS_SIZE_OPTION) return false;\nreturn !state.size;\n})();\nif (needsModel || needsColor || needsSize) {\nstate.variantId = 0;\nupdateRenderScale();\nupdateSummary();\nupdateAtcAvailability();\nemitPdpSelection();\nreturn;\n}\nconst v = findVariant(state.color, state.size);\nif (!v) {\nstate.variantId = 0;\nupdateRenderScale();\nupdateSummary();\nupdateAtcAvailability();\nemitPdpSelection();\nreturn;\n}\nsyncMainStateFromVariant(v);\n};\nconst getBundleOutOfStockSelections = () => {\nconst out = []; // [{id,label}]\ntry {\nstate.accessories.forEach((entry) => {\nif (!entry) return;\nconst vid = Number(entry.variantId || 0) || 0;\nif (!vid) return;\nconst meta = accessoryVariantMeta.get(Number(vid)) || null;\nif (meta && meta.available === false) {\nout.push({ id: vid, label: meta.label || entry.handle || String(vid) });\n}\n});\n} catch (_e) {}\n\ntry {\nconst _bpNow = root._packSelector && root._packSelector.getActiveBundlePack ? root._packSelector.getActiveBundlePack() : null;\nif (_bpNow && Array.isArray(_bpNow.componentProducts)) {\n  const _addedH = new Set();\n  state.accessories.forEach(e => { if (e && e.handle) _addedH.add(e.handle.toLowerCase()); });\n  const _mainH = (mainProductHandle || '').toLowerCase();\n  _bpNow.componentProducts.forEach((cp) => {\n    if (!cp || !cp.handle) return;\n    const h = cp.handle.toLowerCase();\n    if (h === _mainH || _addedH.has(h)) return;\n\n    const catItem = (Array.isArray(accessoriesCatalog) ? accessoriesCatalog : []).find(p => p && (p.handle || '').toLowerCase() === h);\n    if (catItem && Array.isArray(catItem.variants)) {\n      const _vf = (cp.variantFilter || '').trim().toLowerCase();\n      const matches = catItem.variants.filter(vv => !_vf || (vv.option1||'').toLowerCase()===_vf || (vv.option2||'').toLowerCase()===_vf || (vv.option3||'').toLowerCase()===_vf || (vv.title||'').toLowerCase()===_vf);\n      const anyAvail = matches.some(vv => vv && vv.available !== false);\n      if (matches.length && !anyAvail) {\n        out.push({ id: 0, label: cp.title || h });\n      }\n    }\n  });\n}\n} catch (_eBpc) {}\ntry {\nconst crashVid = Number(state.crashVariantId || 0) || 0;\nif (crashVid) {\nconst meta = crashVariantMeta.get(Number(crashVid)) || null;\nif (meta && meta.available === false) {\nout.push({ id: crashVid, label: meta.label || `Crash Replacement (${crashVid})` });\n}\n}\n} catch (_e2) {}\nreturn out;\n};\nconst updateAtcAvailability = () => {\nif (!atcBtn) return;\nconst v = variants.find(v => v && Number(v.id) === Number(state.variantId)) || null;\nconst needsModel = (() => {\nif (TEMPLATE === 'light') return !state.variantId;\nreturn false;\n})();\nconst needsColor = (() => {\nif (TEMPLATE === 'light') return false;\nif (!HAS_COLOR_CHAPTER) return false;\nif (!HAS_COLOR_OPTION) return false;\nreturn !state.color;\n})();\nconst needsSize = (() => {\nif (TEMPLATE === 'light') return false;\nif (!HAS_CHAPTER_SIZE) return false;\nif (!HAS_SIZE_OPTION) return false;\nreturn !state.size;\n})();\nconst needsHelmetSize = (() => {\nif (typeof HAS_HELMET_SIZE_CHAPTER === 'undefined' || !HAS_HELMET_SIZE_CHAPTER) return false;\ntry {\nif (!root.querySelector('[data-u1-pdp-helmet-size-picker]')) return false;\n} catch (_e) { return false; }\nreturn !state.helmetSize;\n})();\nconst needsVisor = (() => {\ntry {\n\nvar _ps = root._packSelector;\nvar _isBundleNow = (_ps && typeof _ps.getActiveBundlePack === 'function' && !!_ps.getActiveBundlePack())\n  || root.getAttribute('data-u1-pdp-bundle-active') === 'true';\nif (!_isBundleNow) return false;\nvar visorStep = root.querySelector('[data-u1-pdp-step=\"visor\"]');\nif (!visorStep || visorStep.hidden) return false;\nvar visorCards = visorStep.querySelectorAll('[data-u1-pdp-visor=\"true\"]');\nif (!visorCards.length) return false;\nvar hasSelected = visorStep.querySelector('[data-u1-pdp-visor=\"true\"][aria-pressed=\"true\"]');\nreturn !hasSelected;\n} catch (_e) { return false; }\n})();\nconst preorder = !!(v && isVariantPreorder(v));\nconst oosNonPreorder = !!(v && isVariantOosNonPreorder(v));\nconst soldOutMain = !!(v && (v.available === false || oosNonPreorder) && !preorder);\nconst bundleOos = getBundleOutOfStockSelections();\nconst soldOutBundle = !!(bundleOos && bundleOos.length);\nconst soldOut = soldOutMain || soldOutBundle;\nconst softDisabled = (TEMPLATE === 'light')\n? (needsModel || needsHelmetSize)\n: (needsModel || needsColor || needsSize || needsHelmetSize || needsVisor || _u1GiftNeedsPick());\nconst hardDisabled = soldOutBundle;\nconst disabled = (softDisabled || hardDisabled) && !preorder;\n\natcBtn.disabled = false;\natcBtn.classList.toggle('is-disabled', disabled);\natcBtn.classList.toggle('is-soft-disabled', softDisabled && !hardDisabled && !preorder);\natcBtn.classList.toggle('is-soldout', soldOut && !preorder);\natcBtn.classList.toggle('is-preorder', preorder);\natcBtn.setAttribute('aria-disabled', disabled ? 'true' : 'false');\nif (preorder) atcBtn.dataset.u1PdpDisabledReason = '';\nelse if (softDisabled && !hardDisabled) atcBtn.dataset.u1PdpDisabledReason = 'customize';\nelse if (soldOutBundle) atcBtn.dataset.u1PdpDisabledReason = 'bundle_oos';\nelse if (soldOutMain) atcBtn.dataset.u1PdpDisabledReason = 'soldout';\nelse atcBtn.dataset.u1PdpDisabledReason = '';\n\nconst pickEl = atcBtn.querySelector('.u1-pdp-atc__label--pick');\nif (pickEl) {\n  let pickText = 'Pick your style';\n  if (!needsColor && !needsSize && needsVisor) pickText = 'Select visor';\n  else if (!needsColor && !needsSize && !needsVisor && !needsModel && !needsHelmetSize && _u1GiftNeedsPick()) pickText = _u1FgText('data-u1-fg-select') || pickText;\n  else if (!needsColor && !needsSize && !needsVisor && needsModel) pickText = 'Select model';\n  else if (!needsColor && !needsSize && !needsVisor && needsHelmetSize) pickText = 'Select helmet size';\n  pickEl.textContent = pickText;\n}\n\nroot.dataset.u1PdpSelectionsComplete = softDisabled ? 'false' : 'true';\nconst labelEl = atcBtn.querySelector('[data-u1-pdp-atc-label]');\nconst nextLabel = preorder ? 'Pre-order' : (soldOut ? 'Out of stock' : 'Add to cart');\nif (labelEl) labelEl.textContent = nextLabel;\nelse atcBtn.textContent = nextLabel;\nupdateAtcTotal();\nconst needsRealSizeForNotify = HAS_CHAPTER_SIZE && HAS_SIZE_OPTION;\nconst colorReadyForNotify = !(HAS_COLOR_CHAPTER && HAS_COLOR_OPTION) || !!state.color;\nconst _showHideBanner = (el, show) => {\nel.setAttribute('aria-hidden', show ? 'false' : 'true');\nif (show) {\nif (el.hidden) el.hidden = false;\nwindow.requestAnimationFrame(() => el.classList.add('is-visible'));\n} else {\nel.classList.remove('is-visible');\nif (el._u1HideTimer) window.clearTimeout(el._u1HideTimer);\nel._u1HideTimer = window.setTimeout(() => {\nif (!el.classList.contains('is-visible')) el.hidden = true;\n}, 340);\n}\n};\nconst _bannerShouldShow = (ctx) => {\nif (ctx === 'helmet') {\nlet s = !!(state.helmetSize && colorReadyForNotify);\nif (needsRealSizeForNotify) s = false;\nreturn s;\n}\nreturn needsRealSizeForNotify ? !!(state.color && state.size) : false;\n};\n// Notify banners (OOS, non-preorder)\nArray.from(root.querySelectorAll('[data-u1-pdp-size-notify-wrap]:not([data-u1-pdp-size-preorder-wrap])')).forEach((el) => {\nconst ctx = String(el.getAttribute('data-u1-pdp-size-notify-context') || 'size');\nconst show = !!(v && (v.available === false || oosNonPreorder) && !preorder && _bannerShouldShow(ctx));\n_showHideBanner(el, show);\n});\n// Preorder banners\nArray.from(root.querySelectorAll('[data-u1-pdp-size-preorder-wrap]')).forEach((el) => {\nconst ctx = String(el.getAttribute('data-u1-pdp-size-notify-context') || 'size');\nconst show = !!(preorder && _bannerShouldShow(ctx));\n_showHideBanner(el, show);\n});\nroot.querySelectorAll('[data-u1-pdp-size-notify]').forEach((notifyBtn) => {\nif (notifyBtn._u1Bound) return;\nnotifyBtn._u1Bound = true;\nnotifyBtn.addEventListener('click', openNotifyModal);\n});\nconst _shipTxt = _getPreorderShippingText();\nif (_shipTxt) {\nroot.querySelectorAll('[data-u1-pdp-preorder-ship]').forEach((el) => {\nel.textContent = preorder ? ('Estimated shipping: ' + _shipTxt) : '';\n});\n}\nconst preorderShipEl = root.querySelector('[data-u1-pdp-atc-preorder-ship]');\nif (preorderShipEl) {\nif (preorder && _shipTxt) {\npreorderShipEl.textContent = 'Est. shipping: ' + _shipTxt;\npreorderShipEl.hidden = false;\npreorderShipEl.setAttribute('aria-hidden', 'false');\n} else {\npreorderShipEl.textContent = '';\npreorderShipEl.hidden = true;\npreorderShipEl.setAttribute('aria-hidden', 'true');\n}\n}\ntry {\nconst spInput = root.querySelector('[data-u1-pdp-shoppay-id]');\nconst nv = (v && v.id) ? String(v.id) : '';\nif (spInput && nv && spInput.value !== nv) {\nspInput.value = nv;\ntry { spInput.dispatchEvent(new Event('change', { bubbles: true })); } catch (_eSPd) {}\n}\nconst _spW = root.querySelector('.u1-pdp-shoppay-terms');\nif (_spW) {\nif (!root._u1SpOrig) root._u1SpOrig = _spW.innerHTML;\nconst _spFix = () => {\ntry {\nconst w = root.querySelector('.u1-pdp-shoppay-terms');\nif (!w) return;\nconst f = w.querySelector('form');\nconst roto = !w.querySelector('shopify-payment-terms') || (f && /stoq|restock|rr-/i.test(String(f.className)));\nif (roto && root._u1SpOrig) {\nw.innerHTML = root._u1SpOrig;\nconst inp = w.querySelector('[data-u1-pdp-shoppay-id]');\nif (inp) { inp.value = String((state && state.variantId) || nv || ''); try { inp.dispatchEvent(new Event('change', { bubbles: true })); } catch (_e1) {} }\n}\nconst f2 = w.querySelector('form');\nif (f2) {\nf2.setAttribute('action', '#'); f2.classList.remove('shopify-product-form'); f2.removeAttribute('data-type');\nArray.prototype.slice.call(f2.childNodes).forEach((t) => { if (t.nodeType === 3 && t.textContent.trim()) f2.removeChild(t); });\n}\n} catch (_e0) {}\n};\nif (!root._u1SpObs) {\n_spFix(); window.setTimeout(_spFix, 400);\ntry { root._u1SpObs = new MutationObserver(() => { clearTimeout(root._u1SpT); root._u1SpT = setTimeout(_spFix, 50); }); root._u1SpObs.observe(_spW, { childList: true, subtree: true, attributes: true, attributeFilter: ['class'] }); } catch (_eO) {}\n}\n}\n} catch (_eSP) {}\ntry {\nconst progWrap = root.querySelector('[data-u1-pdp-preorder-progress]');\nif (progWrap) {\nconst progEnabled = String(root.dataset.u1PdpPreorderProgressEnabled || '') === '1';\nconst prog = (progEnabled && preorder && typeof _getPreorderProgress === 'function') ? _getPreorderProgress(v) : null;\nif (prog && prog.max > 0) {\nconst tpl = String(root.dataset.u1PdpPreorderProgressText || '{count} of {max} claimed');\nconst pct = Math.round((prog.count / prog.max) * 100);\nconst labelEl = progWrap.querySelector('[data-u1-pdp-preorder-progress-label]');\nconst pctEl = progWrap.querySelector('[data-u1-pdp-preorder-progress-pct]');\nconst fillEl = progWrap.querySelector('[data-u1-pdp-preorder-progress-fill]');\nconst trackEl = progWrap.querySelector('[data-u1-pdp-preorder-progress-track]');\nif (labelEl) labelEl.textContent = tpl.replace('{count}', String(prog.count)).replace('{max}', String(prog.max));\nconst infoBtn = progWrap.querySelector('[data-u1-pdp-preorder-progress-info]');\nif (infoBtn) {\nconst tipTxt = String(root.dataset.u1PdpPreorderProgressTooltip || '').trim();\nconst tipEl = infoBtn.querySelector('[data-u1-pdp-preorder-progress-tooltip-el]');\nif (tipEl) tipEl.textContent = tipTxt;\ninfoBtn.hidden = !tipTxt;\n}\nif (pctEl) pctEl.textContent = pct + '%';\nif (fillEl) fillEl.style.width = pct + '%';\nif (trackEl) trackEl.setAttribute('aria-valuenow', String(pct));\nprogWrap.hidden = false;\nprogWrap.setAttribute('aria-hidden', 'false');\n} else {\nprogWrap.hidden = true;\nprogWrap.setAttribute('aria-hidden', 'true');\n}\n}\n} catch (_ePP) {}\n};\n\nconst _defaultColorEl = root.querySelector('[data-u1-pdp-step=\"color\"] [data-u1-pdp-value]');\nconst _defaultColor = _defaultColorEl ? (_defaultColorEl.getAttribute('data-u1-pdp-value') || '') : '';\n\nconst buildBundleImageUrl = ({ packHandle, color, visor, productHandle, filesBase, chapters }) => {\n  const base = (filesBase || '').toString();\n  const prod = (productHandle || '').toLowerCase().replace(/\\s+/g, '-').split('-')[0];\n  const packRaw = (packHandle || '').toLowerCase().replace(/\\s+/g, '-');\n\n  const prodPrefix = prod.split('-')[0] + '-';\n  const pack = packRaw.indexOf(prodPrefix) === 0 ? packRaw.substring(prodPrefix.length) : packRaw;\n  const col = (color || '').toLowerCase().replace(/\\s+/g, '-');\n  const vis = (visor || '').toLowerCase().replace(/\\s+/g, '-');\n  const ext = '.jpg';\n  const prefix = 'pdp-' + prod + '-' + pack;\n  const hasVisorChapter = chapters && chapters.indexOf('visor') !== -1;\n  const candidates = [];\n  const sz = '?width=1600';\n  if (root._u1FamImgCands) try { root._u1FamImgCands(base + prefix, col, sz, candidates); } catch (_eF) {}\n  if (col && vis && hasVisorChapter) candidates.push(base + prefix + '-' + col + '-' + vis + ext + sz);\n  if (col) candidates.push(base + prefix + '-' + col + ext + sz);\n  candidates.push(base + prefix + ext + sz);\n  return candidates;\n};\n\nconst getSelectedVisorName = () => {\n  var sel = root.querySelector('[data-u1-pdp-visor=\"true\"][aria-pressed=\"true\"]')\n           || root.querySelector('[data-u1-pdp-visor=\"true\"].is-selected');\n  if (!sel) return '';\n  return (sel.getAttribute('data-u1-pdp-info-title') || '').trim();\n};\n\nconst getBundleGalleryData = (bp) => {\n  if (!bp) {\n    var ps = root._packSelector;\n    bp = ps && typeof ps.getActiveBundlePack === 'function' ? ps.getActiveBundlePack() : null;\n  }\n  if (!bp) return null;\n  var filesBase = root.getAttribute('data-u1-pdp-files-base') || '';\n  var chapters = (bp.chapters || '').toString();\n  var visor = getSelectedVisorName();\n  var hasVisorChapter = chapters.indexOf('visor') !== -1;\n  if (!visor && hasVisorChapter) visor = 'clear';\n  return {\n    candidates: buildBundleImageUrl({\n      packHandle: bp.packHandle || bp.productHandle || '',\n      color: state.color || _defaultColor,\n      visor: visor,\n      productHandle: mainProductHandle || '',\n      filesBase: filesBase,\n      chapters: chapters\n    }),\n    alt: (bp.packHandle || 'bundle')\n  };\n};\n\n/* Probe paralelo con cache: assets/u1_pdp_bundle_probe.js (256KB de snippets). */\nconst preloadBundleImage = (candidates, callback, onFail) => {\n  if (window.u1BundleProbe) { window.u1BundleProbe(candidates, callback, onFail); return; }\n  if (onFail) onFail();\n};\n\n/* Overlay del bundle: el DOM vive en assets/u1_pdp_bundle_probe.js */\n/* LAZY: el asset carga con defer, aca todavia no existe u1BundleOverlay */\nvar _bgInst = null;\nvar _bgGet = function() {\n  if (!_bgInst && window.u1BundleOverlay) _bgInst = window.u1BundleOverlay(root);\n  return _bgInst;\n};\nvar _bundleToken = 0;\nvar _bundleOverlayEl = function() { var g = _bgGet(); return g ? g.el() : null; };\nvar _bundleOverlayPack = function() { var g = _bgGet(); return g ? g.pack() : ''; };\nvar _showBundleOverlay = function(src, alt, duration, token, pack) {\n  if (token !== undefined && token !== _bundleToken) return;\n  var g = _bgGet();\n  if (g) g.show(src, alt, duration, pack);\n};\nvar _hideBundleOverlay = function() { var g = _bgGet(); if (g) g.hide(); };\n\nroot._u1UpdateBundleGallery = function() {\n  var isBundleActive = root.getAttribute('data-u1-pdp-bundle-active') === 'true';\n  if (!isBundleActive) {\n    if (root._u1BundleGalleryActive) {\n      root._u1BundleGalleryActive = false;\n      _hideBundleOverlay();\n      try {\n        var _c = state.color || '';\n        if (_c && typeof transitionGalleryToColor === 'function') {\n          transitionGalleryToColor(_c, { durationMs: 133 });\n        } else if (typeof setBaseToNormalGallery === 'function') {\n          setBaseToNormalGallery();\n        }\n        if (typeof setGallerySwipeEnabled === 'function') setGallerySwipeEnabled(true);\n        if (typeof refreshSlides === 'function') refreshSlides();\n        if (typeof scheduleGalleryUxModeCheck === 'function') scheduleGalleryUxModeCheck();\n      } catch(_e) {}\n    }\n    return;\n  }\n  var bpNow = (root._packSelector && root._packSelector.getActiveBundlePack)\n    ? root._packSelector.getActiveBundlePack() : null;\n  var packNow = (bpNow && bpNow.packHandle) ? String(bpNow.packHandle) : '';\n  if (root._u1BundleRetryPack !== packNow) { root._u1BundleRetryPack = packNow; root._u1BundleRetry = 0; }\n  var data = getBundleGalleryData();\n  if (!data) return;\n  var token = ++_bundleToken;\n  preloadBundleImage(data.candidates, function(src) {\n    if (root.getAttribute('data-u1-pdp-bundle-active') !== 'true') return;\n    root._u1BundleGalleryActive = true;\n    root._u1BundleRetry = 0;\n    _showBundleOverlay(src, data.alt, 200, token, packNow);\n  }, function() {\n    /* Sin foto: reintenta; si no hay, baja el overlay (jamas dejar otro pack) */\n    if (token !== _bundleToken) return;\n    var tries = (root._u1BundleRetry || 0) + 1;\n    root._u1BundleRetry = tries;\n    if (tries <= 2) {\n      window.setTimeout(function() {\n        if (token !== _bundleToken) return;\n        root._u1UpdateBundleGallery();\n      }, tries === 1 ? 400 : 1200);\n      return;\n    }\n    root._u1BundleRetry = 0;\n    if (_bundleOverlayPack() && _bundleOverlayPack() !== packNow) _hideBundleOverlay();\n  });\n};\n\nroot._u1PreviewBundleGallery = function(bp) {\n  if (!bp) return;\n  var data = getBundleGalleryData(bp);\n  if (!data) return;\n  var token = ++_bundleToken;\n  var pack = bp.packHandle ? String(bp.packHandle) : '';\n  preloadBundleImage(data.candidates, function(src) {\n    _showBundleOverlay(src, data.alt, 160, token, pack);\n  }, function() {\n    if (token === _bundleToken) _hideBundleOverlay();\n  });\n};\n\nroot._u1HideBundleOverlay = function() { _hideBundleOverlay(); };\n\nvar _restoreTimer = null;\nroot._u1RestoreBundleGallery = function() {\n  if (_restoreTimer) clearTimeout(_restoreTimer);\n  _restoreTimer = setTimeout(function() {\n    var isBundleActive = root.getAttribute('data-u1-pdp-bundle-active') === 'true';\n    if (isBundleActive && root._u1BundleGalleryActive) {\n      root._u1UpdateBundleGallery();\n    } else {\n      _hideBundleOverlay();\n    }\n  }, 150);\n};\n\nvar _origPreview = root._u1PreviewBundleGallery;\nroot._u1PreviewBundleGallery = function(bp) {\n  if (_restoreTimer) { clearTimeout(_restoreTimer); _restoreTimer = null; }\n  _origPreview(bp);\n};\nvar _origHide = root._u1HideBundleOverlay;\nroot._u1HideBundleOverlay = function() {\n  if (_restoreTimer) { clearTimeout(_restoreTimer); _restoreTimer = null; }\n  _origHide();\n};\n\n/* Warm-up de la foto de cada pack: 2 pasadas */\nroot._u1WarmBundleGallery = function() {\n  try { if (window.u1BundleWarm) window.u1BundleWarm(root, getBundleGalleryData); } catch (_e) {}\n};\n[700, 1800].forEach(function(ms) { window.setTimeout(root._u1WarmBundleGallery, ms); });\n/* Deep link (?bundle=x): el pack se elige antes de que el estado este sembrado */\n[600, 1500, 3000].forEach(function(ms) {\n  window.setTimeout(function() {\n    try {\n      if (root.getAttribute('data-u1-pdp-bundle-active') === 'true') root._u1UpdateBundleGallery();\n    } catch (_e) {}\n  }, ms);\n});\n\nconst renderMobileGalleries = () => {\nif (!mobileGalleries || mobileGalleries.length === 0) return;\nconst waitForImgReady = (img, timeoutMs = 260) => {\nif (!img) return Promise.resolve();\ntry {\nif (img.complete && (img.naturalWidth || 0) > 0) {\nif (typeof img.decode === 'function') return img.decode().catch(() => {});\nreturn Promise.resolve();\n}\n} catch (_e0) {}\nreturn new Promise((resolve) => {\nlet done = false;\nconst finish = () => { if (done) return; done = true; resolve(); };\ntry { img.addEventListener('load', finish, { once: true }); } catch (_e) {}\ntry { img.addEventListener('error', finish, { once: true }); } catch (_e2) {}\ntry {\nif (typeof img.decode === 'function') img.decode().then(finish).catch(() => {});\n} catch (_e3) {}\nwindow.setTimeout(finish, timeoutMs);\n});\n};\nconst currentSlide = slides[state.galleryIndex];\nconst imgEl = currentSlide ? currentSlide.querySelector('img') : null;\nconst src = imgEl ? (imgEl.currentSrc || imgEl.src) : '';\nconst alt = imgEl ? (imgEl.getAttribute('alt') || '') : '';\nconst vidEl = currentSlide ? currentSlide.querySelector('video') : null;\nconst vidSrc = (() => {\ntry {\nif (!vidEl) return '';\nconst s = vidEl.querySelector('source');\nreturn s ? String(s.getAttribute('src') || '') : '';\n} catch (_e) { return ''; }\n})();\nconst vidPoster = vidEl ? String(vidEl.getAttribute('poster') || '') : '';\nconst vidFit = vidEl && vidEl.dataset ? String(vidEl.dataset.u1Fit || '') : '';\nconst isVideo = !!(vidEl && vidSrc);\nconst isLifestyle = (() => {\nif (isVideo) return String(vidFit || '') === 'cover';\ntry {\nconst a = currentSlide ? String(currentSlide.getAttribute('data-u1-lifestyle') || '') : '';\nif (!a) return true;\nreturn a === '1';\n} catch (_e) { return true; }\n})();\nmobileGalleries.forEach((host) => {\nif (!host) return;\nconst stepEl = (host && host.closest) ? host.closest('[data-u1-pdp-step]') : null;\nconst step = stepEl ? String(stepEl.getAttribute('data-u1-pdp-step') || '') : '';\nif (['sparky_color','sparky_inserts','adult_color','adult_size','torch_color'].indexOf(step) !== -1) return;\nconst isVisorStep = step === 'visor';\nconst isAccessoriesStep = step === 'accessories';\nlet baseSrc = src;\nlet baseAlt = alt;\nlet baseIsVideo = isVideo;\nlet baseVidSrc = vidSrc;\nlet baseVidPoster = vidPoster;\nlet baseVidFit = vidFit;\nlet baseIsLifestyle = isLifestyle;\nlet overlaySrc = '';\nlet isFixed = false;\nif (isVisorStep) {\nisFixed = true;\nbaseIsVideo = false;\ntry {\nconst imgs = hasCustomGallery ? getGalleryImagesForColor(getMediaColorValue()) : null;\nconst base = (imgs && imgs.length >= 2) ? imgs[1] : ((imgs && imgs.length) ? imgs[0] : null);\nif (base && base.src) {\nbaseSrc = String(base.src);\nbaseAlt = String(base.alt || '');\nbaseIsLifestyle = !!base.lifestyle;\n} else {\nconst s2 = slides[1] || slides[0] || null;\nconst im2 = s2 ? s2.querySelector('img') : null;\nbaseSrc = im2 ? String(im2.currentSrc || im2.src || '') : '';\nbaseAlt = im2 ? String(im2.getAttribute('alt') || '') : '';\nbaseIsLifestyle = false;\n}\n} catch (_e) {}\ntry {\nconst selected = getVisorSelectionList();\nif (selected && selected.length) {\nvisorCycleIdx = clamp(visorCycleIdx, 0, selected.length - 1);\nconst activeSel = selected[visorCycleIdx];\noverlaySrc = visorOverlaySrcFor(activeSel);\n}\n} catch (_e2) {}\n} else if (isAccessoriesStep) {\nisFixed = true;\nbaseIsVideo = false;\nbaseIsLifestyle = false;\ntry {\n  let useRemoteBase = true;\n  try {\n    if (TEMPLATE_RAW === 'torch' && getTorchInsertSelectedNow && getTorchInsertSelectedNow()) useRemoteBase = false;\n  } catch (_e0) {}\n  if (!useRemoteBase) {\n    baseSrc = src;\n  } else {\n    let offSrc = '';\n    try {\n      if (isTorchInserts()) {\n        const pH = optionNameHandle(mainProductHandle || '');\n        const cH = getMediaColorHandle();\n        if (pH && cH) offSrc = filesUrlFor(`pdp-insert-none-${pH}-${cH}.jpg`) || '';\n      }\n    } catch (_eT) {}\n    if (!offSrc) { try { offSrc = remoteBaseOffSrcFor() || ''; } catch (_e1) { offSrc = ''; } }\n    baseSrc = offSrc;\n  }\n} catch (_e) { baseSrc = ''; }\n// Sin resolver (p.ej. smart-light, sin cascos): este chapter no lleva gallery\nif (!baseSrc) { host.hidden = true; return; }\nhost.hidden = false;\nbaseAlt = '';\ntry { overlaySrc = isRemoteSelected() ? (remoteOnSrcFor() || '') : ''; } catch (_e2) { overlaySrc = ''; }\n// Overlays de inserts solo si NO hay modo remote (guard del sticky mobile flag).\nif (!overlaySrc && root._u1InsertStickyMobile && !isRemoteSelected() && typeof insertSrcFor === 'function') {\ntry { overlaySrc = insertSrcFor() || ''; } catch (_eIns) { overlaySrc = ''; }\n}\n}\n\nconst isBundleStep = step === 'bundle';\nif (isBundleStep) {\n// Solo packs no-solo usan la imagen compuesta; isSolo cae al render normal (overlay MIPS).\nvar _bpMob = (root._packSelector && typeof root._packSelector.getActiveBundlePack === 'function') ? root._packSelector.getActiveBundlePack() : null;\nvar _isSoloMob = !_bpMob || _bpMob.isSolo === true;\nif (!_isSoloMob) {\nisFixed = true;\nbaseIsVideo = false;\ntry {\n  var _bundleData = getBundleGalleryData();\n  if (_bundleData && _bundleData.candidates.length) {\n    baseIsLifestyle = true;\n    var _bc = window.u1BundleVersions ? window.u1BundleVersions(_bundleData.candidates) : _bundleData.candidates;\n    baseSrc = _bc[0];\n    baseAlt = _bundleData.alt;\n    host._u1BundleFallbacks = _bc.slice(1).concat(src ? [src] : []);\n  }\n\n} catch (_eBundle) {}\n}\n}\nhost.dataset.u1Kind = baseIsLifestyle ? 'lifestyle' : 'render';\nhost.dataset.u1Fixed = isFixed ? '1' : '0';\nif (!host.dataset.u1Init) {\nhost.innerHTML = `\n<div class=\"u1-pdp-mobile-gallery__media\">\n<img class=\"u1-pdp-mobile-gallery__img\" alt=\"\" width=\"2000\" height=\"2000\">\n<img class=\"u1-pdp-mobile-gallery__mips\" alt=\"\" width=\"2000\" height=\"2000\" hidden aria-hidden=\"true\">\n<img class=\"u1-pdp-mobile-gallery__overlay\" alt=\"\" width=\"2000\" height=\"2000\" hidden aria-hidden=\"true\">\n<img class=\"u1-pdp-mobile-gallery__remote-mips-badge\" alt=\"\" width=\"2000\" height=\"2000\" hidden aria-hidden=\"true\">\n<video class=\"u1-pdp-mobile-gallery__video\" playsinline muted loop autoplay preload=\"metadata\" hidden aria-hidden=\"true\">\n<source src=\"\" type=\"video/mp4\">\n</video>\n<button type=\"button\" class=\"u1-pdp-mobile-gallery__hit u1-pdp-mobile-gallery__hit--prev\" aria-label=\"Previous\"></button>\n<button type=\"button\" class=\"u1-pdp-mobile-gallery__hit u1-pdp-mobile-gallery__hit--next\" aria-label=\"Next\"></button>\n</div>\n<div class=\"u1-pdp-mobile-gallery__dots\" data-u1-dots aria-hidden=\"true\"></div>\n`;\nhost.dataset.u1Init = '1';\n}\n/* 2026-09-28: listeners fuera del if de u1Init (galeria puede venir ya dibujada de Liquid) */\nif (!host._u1Bound) {\nhost._u1Bound = 1;\nconst bPrev = host.querySelector('.u1-pdp-mobile-gallery__hit--prev');\nconst bNext = host.querySelector('.u1-pdp-mobile-gallery__hit--next');\nif (bPrev) bPrev.addEventListener('click', () => {\nif (bPrev.getAttribute('aria-disabled') === 'true') return;\nscrollBy(-1);\n});\nif (bNext) bNext.addEventListener('click', () => {\nif (bNext.getAttribute('aria-disabled') === 'true') return;\nscrollBy(1);\n});\nhost.addEventListener('click', (evt) => {\nconst t = evt && evt.target;\nconst btn = t && t.closest ? t.closest('button[data-u1-idx]') : null;\nif (!btn) return;\nconst idx = Number(btn.dataset.u1Idx || 0) || 0;\nscrollGalleryToIndex(idx);\n});\n}\nconst img = host.querySelector('.u1-pdp-mobile-gallery__img');\nconst mips = host.querySelector('.u1-pdp-mobile-gallery__mips');\nconst overlay = host.querySelector('.u1-pdp-mobile-gallery__overlay');\nconst remoteMipsBadge = host.querySelector('.u1-pdp-mobile-gallery__remote-mips-badge');\nconst v = host.querySelector('.u1-pdp-mobile-gallery__video');\nconst vSource = v ? v.querySelector('source') : null;\nif (baseIsVideo && v && vSource && !isFixed) {\nif (img) { img.hidden = true; img.setAttribute('aria-hidden', 'true'); }\nif (mips) { mips.hidden = true; mips.setAttribute('aria-hidden', 'true'); try { mips.removeAttribute('src'); } catch (_e) {} }\nif (remoteMipsBadge) { remoteMipsBadge.hidden = true; remoteMipsBadge.setAttribute('aria-hidden', 'true'); try { remoteMipsBadge.removeAttribute('src'); } catch (_e) {} }\nif (overlay) { overlay.hidden = true; overlay.setAttribute('aria-hidden', 'true'); overlay.classList.remove('is-visible'); }\nv.hidden = false;\nv.setAttribute('aria-hidden', 'false');\nif (baseVidFit) v.dataset.u1Fit = baseVidFit;\nif (baseVidPoster && v.getAttribute('poster') !== baseVidPoster) v.setAttribute('poster', baseVidPoster);\nconst current = String(vSource.getAttribute('src') || '');\nif (baseVidSrc && current !== baseVidSrc) {\nvSource.setAttribute('src', baseVidSrc);\ntry { v.load(); } catch (_e) {}\n}\n} else {\nif (v) { v.hidden = true; v.setAttribute('aria-hidden', 'true'); }\nif (img) {\nconst okSrc = !!baseSrc;\nimg.hidden = !okSrc;\nimg.setAttribute('aria-hidden', okSrc ? 'false' : 'true');\nif (okSrc) {\nconst prev = String(img.getAttribute('src') || '');\nconst nextSrc = String(baseSrc);\nif (prev !== nextSrc) {\ntry {\nconst tok = String((Number(host.dataset.u1MobileBaseTok || 0) || 0) + 1);\nhost.dataset.u1MobileBaseTok = tok;\nconst pre = new Image();\npre.onload = () => {\ntry {\nif (String(host.dataset.u1MobileBaseTok || '') !== tok) return;\nconst loadedSrc = pre.src;\nif (String(img.getAttribute('src') || '') !== loadedSrc) {\nu1ApplyGallerySrcset(img, loadedSrc); /* srcset ANTES de src (gotcha 1400 fijo) */\nimg.src = loadedSrc;\n}\n} catch (_ep) {}\n};\npre.onerror = () => {\ntry {\nif (String(host.dataset.u1MobileBaseTok || '') !== tok) return;\n\nif (host._u1BundleFallbacks && host._u1BundleFallbacks.length) {\n  const fb = host._u1BundleFallbacks.shift();\n  u1ApplyGallerySrcset(pre, fb);\n  pre.src = fb;\n  return;\n}\nimg.hidden = true;\nimg.setAttribute('aria-hidden', 'true');\nimg.removeAttribute('src');\nu1ApplyGallerySrcset(img, ''); /* limpiar srcset o queda la imagen vieja */\n} catch (_ep2) {}\n};\nu1ApplyGallerySrcset(pre, nextSrc); /* preloader tambien por srcset */\npre.src = nextSrc;\n} catch (_ePre) {\ntry { u1ApplyGallerySrcset(img, nextSrc); img.src = nextSrc; } catch (_eImg) {}\n}\n}\nimg.alt = baseAlt;\n}\n}\nif (mips) {\nconst mipsEnabled = String(root.dataset.u1PdpMipsOverlayEnabled || '') === '1' && String(root.dataset.u1PdpIsMips || '') === '1';\nlet mipsSrc = '';\nif (!isFixed && mipsEnabled && !baseIsLifestyle) {\nconst ordinal = getMipsOverlayOrdinalForIndex(Number(state.galleryIndex || 0) || 0);\nif (ordinal) {\nconst prefix = getMipsOverlayPrefix();\nconst key = `${prefix}-${ordinal}`;\nconst cached = galleryMipsOverlay && galleryMipsOverlay.resolved ? galleryMipsOverlay.resolved.get(key) : '';\nif (cached) mipsSrc = String(cached);\nelse resolveMipsOverlaySrcForOrdinal(ordinal);\n}\n}\nif (!mipsSrc) {\nmips.hidden = true;\nmips.setAttribute('aria-hidden', 'true');\ntry { mips.removeAttribute('src'); } catch (_eM) {}\n} else {\nmips.hidden = false;\nmips.setAttribute('aria-hidden', 'false');\nif (String(mips.getAttribute('src') || '') !== String(mipsSrc)) mips.setAttribute('src', String(mipsSrc));\n}\n}\nif (remoteMipsBadge) {\nlet src = '';\nif (isFixed && isAccessoriesStep) {\nsrc = remoteMipsBadgeSrcFor() || '';\n}\nif (!src) {\nremoteMipsBadge.hidden = true;\nremoteMipsBadge.setAttribute('aria-hidden', 'true');\ntry { remoteMipsBadge.removeAttribute('src'); } catch (_eB0) {}\n} else {\nremoteMipsBadge.hidden = false;\nremoteMipsBadge.setAttribute('aria-hidden', 'false');\nif (String(remoteMipsBadge.getAttribute('src') || '') !== String(src)) remoteMipsBadge.setAttribute('src', String(src));\n}\n}\nif (overlay) {\nconst want = isFixed && !!overlaySrc;\nif (!want) {\noverlay.classList.remove('is-visible');\noverlay.hidden = true;\noverlay.setAttribute('aria-hidden', 'true');\ntry { overlay.removeAttribute('src'); } catch (_e) {}\n} else {\noverlay.hidden = false;\noverlay.setAttribute('aria-hidden', 'false');\noverlay.classList.remove('is-visible');\nconst tok = String((Number(host.dataset.u1OverlayTok || 0) || 0) + 1);\nhost.dataset.u1OverlayTok = tok;\nif (String(overlay.getAttribute('src') || '') !== String(overlaySrc)) overlay.setAttribute('src', String(overlaySrc));\nPromise.race([waitForImgReady(img, 320), new Promise((r) => window.setTimeout(r, 320))]).then(() => {\nif (String(host.dataset.u1OverlayTok || '') !== tok) return;\noverlay.classList.add('is-visible');\n});\n}\n}\n}\nconst bPrev = host.querySelector('.u1-pdp-mobile-gallery__hit--prev');\nconst bNext = host.querySelector('.u1-pdp-mobile-gallery__hit--next');\nconst has = !isFixed && slides.length > 1;\nconst prevDisabled = !has || state.galleryIndex <= 0;\nconst nextDisabled = !has || state.galleryIndex >= slides.length - 1;\nif (bPrev) bPrev.setAttribute('aria-disabled', prevDisabled ? 'true' : 'false');\nif (bNext) bNext.setAttribute('aria-disabled', nextDisabled ? 'true' : 'false');\nconst dots = host.querySelector('[data-u1-dots]');\nif (dots) {\nif (!has) {\ndots.innerHTML = '';\ndots.setAttribute('aria-hidden', 'true');\n} else {\nconst count = slides.length;\nconst active = Math.min(count - 1, Math.max(0, Number(state.galleryIndex || 0) || 0));\nconst prevCount = Number(dots.dataset.u1Count || 0) || 0;\nif (prevCount !== count) {\ndots.dataset.u1Count = String(count);\ndots.innerHTML = Array.from({ length: count }).map((_, i) => {\nconst current = i === active ? 'true' : 'false';\nreturn `<button type=\"button\" class=\"u1-pdp-gallery-dot\" data-u1-idx=\"${i}\" aria-current=\"${current}\" aria-label=\"Slide ${i + 1}\"></button>`;\n}).join('');\n} else {\nconst btns = Array.from(dots.querySelectorAll('button[data-u1-idx]'));\nbtns.forEach((b, i) => b.setAttribute('aria-current', (i === active) ? 'true' : 'false'));\n}\ndots.setAttribute('aria-hidden', 'false');\n}\n}\n});\n};\n\nconst getMipsOverlayOrdinalForIndex = (idx) => {\ntry {\nconst i = clamp(Number(idx || 0) || 0, 0, Math.max(0, slides.length - 1));\nconst slide = slides[i];\nif (!slide) return 0;\nif (String(slide.getAttribute('data-u1-media') || '') === 'video') return 0;\nif (String(slide.getAttribute('data-u1-lifestyle') || '') === '1') return 0;\nlet n = 0;\nfor (let j = 0; j <= i; j++) {\nconst s = slides[j];\nif (!s) continue;\nif (String(s.getAttribute('data-u1-media') || '') === 'video') continue;\nif (String(s.getAttribute('data-u1-lifestyle') || '') === '1') continue;\nn += 1;\n}\nreturn n; // 1..N, contando solo no-lifestyle\n} catch (_e) {}\nreturn 0;\n};\n\nconst getMipsOverlayPrefix = () => {\ntry {\nconst raw = String(root.dataset.u1PdpMipsOverlayPrefix || '').trim();\nif (raw && raw.toLowerCase() !== 'auto') return raw;\nconst helmets = getHelmetHandleCandidates();\nconst baseHelmet = helmets.find(h => h && !/mips/i.test(String(h))) || helmets[0] || '';\nif (baseHelmet) return `pdp-${baseHelmet}-mips-overlay`;\n} catch (_e) {}\nreturn 'pdp-mips-overlay';\n};\n\nconst resolveMipsOverlaySrcForOrdinal = (ordinal) => {\nconst n = Number(ordinal || 0) || 0;\nif (!n) return '';\nconst prefix = getMipsOverlayPrefix();\nconst key = `${prefix}-${n}`;\nif (!galleryMipsOverlay || !galleryMipsOverlay.resolved) return '';\nconst cached = galleryMipsOverlay.resolved.get(key);\nif (typeof cached === 'string') return cached;\nif (galleryMipsOverlay.resolving && galleryMipsOverlay.resolving.has(key)) return '';\nif (galleryMipsOverlay.resolving) galleryMipsOverlay.resolving.add(key);\n\n// Optimistic guess first (fast UI). We'll verify + fallback async.\nlet guess = '';\ntry { guess = filesUrlFor(`${key}.png`); } catch (_e0) {}\nif (!guess) { try { guess = assetUrlFor(`${key}.png`); } catch (_e1) {} }\ntry { galleryMipsOverlay.resolved.set(key, guess || ''); } catch (_e2) {}\ntry { if (guess) u1ImgPreload.preload(guess); } catch (_e3) {}\ntry { syncMipsOverlayUi(); } catch (_e4) {}\ntry { renderMobileGalleries(); } catch (_e5) {}\n\n(async () => {\nlet found = '';\ntry {\nconst exts = ['png', 'PNG', 'webp', 'WEBP', 'jpg', 'JPG', 'jpeg', 'JPEG'];\nconst candidates = [];\nfor (const ext of exts) {\n// Also try Shopify's auto-renamed duplicates: foo.png -> foo_1.png, foo_2.png, ...\nfor (let suf = 0; suf <= 4; suf++) {\nconst name = suf ? `${key}_${suf}.${ext}` : `${key}.${ext}`;\ntry { candidates.push(filesUrlFor(name)); } catch (_e0b) {}\ntry { candidates.push(assetUrlFor(name)); } catch (_e1b) {}\n}\n}\nconst uniqueCands = Array.from(new Set(candidates.filter(Boolean)));\nfor (const src of uniqueCands) {\n// eslint-disable-next-line no-await-in-loop\nconst ok = await u1ImgExists.check(src);\nif (ok) { found = src; break; }\n}\n} catch (_e2b) {}\ntry { galleryMipsOverlay.resolved.set(key, found || ''); } catch (_e3b) {}\ntry { galleryMipsOverlay.resolving.delete(key); } catch (_e4b) {}\ntry { syncMipsOverlayUi(); } catch (_e5b) {}\ntry { renderMobileGalleries(); } catch (_e6b) {}\n})();\n\nreturn guess || '';\n};\n\nconst syncMipsOverlayUi = () => {\nconst img = galleryMipsOverlay && galleryMipsOverlay.img ? galleryMipsOverlay.img : null;\nif (!img) return;\nconst enabled = String(root.dataset.u1PdpMipsOverlayEnabled || '') === '1';\nconst isMips = String(root.dataset.u1PdpIsMips || '') === '1';\nconst uxMode = String(root._u1GalleryUxMode || 'normal');\nconst hideMips = () => {\nimg.hidden = true;\nimg.setAttribute('aria-hidden', 'true');\nimg.classList.remove('is-visible');\ntry { img.style.display = 'none'; } catch (_eS) {}\ntry { img.removeAttribute('src'); } catch (_eR) {}\n};\nif (!enabled || !isMips || uxMode !== 'normal') { hideMips(); return; }\nconst ordinal = getMipsOverlayOrdinalForIndex(Number(state.galleryIndex || 0) || 0);\nif (!ordinal) { hideMips(); return; }\nconst prefix = getMipsOverlayPrefix();\nconst key = `${prefix}-${ordinal}`;\nconst cached = galleryMipsOverlay && galleryMipsOverlay.resolved ? galleryMipsOverlay.resolved.get(key) : '';\nif (cached) {\n// Overlay in-slide: hereda caja/escala de la imagen y no se desalinea.\ntry {\nconst _activeSlide = slides[Number(state.galleryIndex || 0) || 0];\nconst _sq = _activeSlide ? _activeSlide.querySelector('.u1-pdp-customizer__gallery-square') : null;\nif (_sq) {\nif (img.parentElement !== _sq) _sq.appendChild(img);\nimg.setAttribute('data-u1-in-slide', '1');\n} else {\nimg.setAttribute('data-u1-in-slide', '0');\n}\n} catch (_eMount) {}\nimg.hidden = false;\nimg.setAttribute('aria-hidden', 'false');\ntry { img.style.display = ''; } catch (_eS2) {}\nif (String(img.getAttribute('src') || '') !== String(cached)) img.setAttribute('src', String(cached));\nwindow.requestAnimationFrame(() => { try { img.classList.add('is-visible'); } catch (_e) {} });\nreturn;\n}\nresolveMipsOverlaySrcForOrdinal(ordinal);\nhideMips();\n};\n\nconst clearMipsOverlays = () => {\n// Desktop overlay (per slide)\ntry {\nconst img = galleryMipsOverlay && galleryMipsOverlay.img ? galleryMipsOverlay.img : null;\nif (img) {\nimg.hidden = true;\nimg.setAttribute('aria-hidden', 'true');\nimg.classList.remove('is-visible');\nimg.style.display = 'none';\nimg.removeAttribute('src');\n}\n} catch (_e0) {}\n// Desktop remote MIPS badge overlay (accessories mode)\ntry {\nconst img = galleryRemoteMipsBadge && galleryRemoteMipsBadge.img ? galleryRemoteMipsBadge.img : null;\nif (img) {\nimg.hidden = true;\nimg.setAttribute('aria-hidden', 'true');\nimg.style.display = 'none';\nimg.removeAttribute('src');\n}\n} catch (_e0b) {}\n// Mobile overlays (all chapters)\ntry {\nconst imgs = Array.from(root.querySelectorAll('.u1-pdp-mobile-gallery__mips'));\nimgs.forEach((el) => {\ntry {\nel.hidden = true;\nel.setAttribute('aria-hidden', 'true');\nel.removeAttribute('src');\n} catch (_e1) {}\n});\n} catch (_e2) {}\n// Mobile remote MIPS badge overlays\ntry {\nconst imgs = Array.from(root.querySelectorAll('.u1-pdp-mobile-gallery__remote-mips-badge'));\nimgs.forEach((el) => {\ntry {\nel.hidden = true;\nel.setAttribute('aria-hidden', 'true');\nel.removeAttribute('src');\n} catch (_e3) {}\n});\n} catch (_e4) {}\n};\n\nconst scrollGalleryToIndex = (idx, { behavior } = { behavior: 'smooth' }) => {\nif (!galleryTrack || slides.length === 0) return;\nconst i = clamp(idx, 0, slides.length - 1);\nstate.galleryIndex = i;\nconst target = slides[i];\nif (!target) return;\nconst left = target.offsetLeft;\ngalleryTrack.scrollTo({ left, behavior: behavior || 'smooth' });\nupdateGalleryButtons();\nrenderMobileGalleries();\n};\nconst isGallerySettled = () => {\nif (!galleryTrack || slides.length === 0) return true;\nconst slide = slides[state.galleryIndex];\nif (!slide) return true;\nif (root._u1SetV && root._u1SetI === state.galleryIndex) return root._u1Set;\nroot._u1SetV = true; root._u1SetI = state.galleryIndex;\nwindow.requestAnimationFrame(() => { root._u1SetV = false; });\nreturn (root._u1Set = Math.abs(slide.offsetLeft - galleryTrack.scrollLeft) < 3);\n};\nconst syncMipsIfSettled = () => {\nconst img = galleryMipsOverlay && galleryMipsOverlay.img ? galleryMipsOverlay.img : null;\nif (!img) return;\nif (isGallerySettled()) {\ntry { syncMipsOverlayUi(); } catch (_e) {}\n} else {\nimg.classList.remove('is-visible');\n}\n};\nconst updateGalleryButtons = () => {\nconst uxMode = String(root._u1GalleryUxMode || 'normal');\ntry { syncMipsIfSettled(); } catch (_e0) {}\nif (uxMode === 'final' || uxMode === 'accessories') {\nif (galleryEl) galleryEl.classList.remove('is-carousel');\nif (!btnPrev || !btnNext) return;\nbtnPrev.style.display = 'none';\nbtnNext.style.display = 'none';\nbtnPrev.classList.remove('is-disabled');\nbtnNext.classList.remove('is-disabled');\nbtnPrev.setAttribute('aria-disabled', 'false');\nbtnNext.setAttribute('aria-disabled', 'false');\ntry { updateDesktopPager(); } catch (_e) {}\nreturn;\n}\nif (uxMode === 'visor') {\nconst count = Number(root._u1VisorCycleCount || 0) || 0;\nconst has = count > 1;\nif (galleryEl) galleryEl.classList.toggle('is-carousel', has);\nif (!btnPrev || !btnNext) return;\nif (!has) {\nbtnPrev.style.display = 'none';\nbtnNext.style.display = 'none';\nbtnPrev.classList.remove('is-disabled');\nbtnNext.classList.remove('is-disabled');\nbtnPrev.setAttribute('aria-disabled', 'false');\nbtnNext.setAttribute('aria-disabled', 'false');\nreturn;\n}\nbtnPrev.style.display = 'block';\nbtnNext.style.display = 'block';\nbtnPrev.classList.remove('is-disabled');\nbtnNext.classList.remove('is-disabled');\nbtnPrev.setAttribute('aria-disabled', 'false');\nbtnNext.setAttribute('aria-disabled', 'false');\ntry { updateDesktopPager(); } catch (_e) {}\nreturn;\n}\nconst has = slides.length > 1;\nif (galleryEl) galleryEl.classList.toggle('is-carousel', has);\nif (!btnPrev || !btnNext) return;\nif (!has) {\nbtnPrev.style.display = 'none';\nbtnNext.style.display = 'none';\nbtnPrev.classList.remove('is-disabled');\nbtnNext.classList.remove('is-disabled');\nbtnPrev.setAttribute('aria-disabled', 'false');\nbtnNext.setAttribute('aria-disabled', 'false');\nreturn;\n}\nbtnPrev.style.display = 'block';\nbtnNext.style.display = 'block';\nconst prevDisabled = state.galleryIndex <= 0;\nconst nextDisabled = state.galleryIndex >= slides.length - 1;\nbtnPrev.classList.toggle('is-disabled', prevDisabled);\nbtnNext.classList.toggle('is-disabled', nextDisabled);\nbtnPrev.setAttribute('aria-disabled', prevDisabled ? 'true' : 'false');\nbtnNext.setAttribute('aria-disabled', nextDisabled ? 'true' : 'false');\ntry { updateDesktopPager(); } catch (_e) {}\n};\nconst getActiveGalleryIndex = () => {\nif (!galleryTrack || slides.length === 0) return 0;\nconst x = galleryTrack.scrollLeft;\nlet best = 0;\nlet bestDist = Infinity;\nfor (let i = 0; i < slides.length; i++) {\nconst d = Math.abs(slides[i].offsetLeft - x);\nif (d < bestDist) { bestDist = d; best = i; }\n}\nreturn best;\n};\nconst scrollBy = (dir) => {\nif (slides.length === 0) return;\nscrollGalleryToIndex(state.galleryIndex + dir, { behavior: 'smooth' });\n};\nconst initGalleryDrag = () => {\nif (!galleryViewport || !galleryTrack) return;\nif (galleryViewport._u1DragBound) return;\ngalleryViewport._u1DragBound = true;\nconst drag = { active: false, startX: 0, startY: 0, startScroll: 0, moved: false, pid: null, locked: null };\nconst canDrag = () => slides.length > 1 && String(root._u1GalleryUxMode || 'normal') === 'normal';\nconst onDown = (e) => {\nif (!canDrag()) return;\nif (typeof e.button === 'number' && e.button !== 0) return;\ndrag.active = true;\ndrag.moved = false;\ndrag.pid = e.pointerId;\ndrag.startX = e.clientX;\ndrag.startY = e.clientY;\ndrag.startScroll = galleryTrack.scrollLeft;\ndrag.locked = null; // null | 'x' | 'y'\nroot._u1GalleryDragging = false;\ntry { galleryViewport.setPointerCapture(drag.pid); } catch (_e) {}\n};\nconst onMove = (e) => {\nif (!drag.active) return;\nconst dx = e.clientX - drag.startX;\nconst dy = e.clientY - drag.startY;\nif (drag.locked == null) {\nconst ax = Math.abs(dx);\nconst ay = Math.abs(dy);\nif (ax < 4 && ay < 4) return;\ndrag.locked = (ax >= ay) ? 'x' : 'y';\n}\nif (drag.locked === 'y') {\ndrag.active = false;\ntry { if (drag.pid != null) galleryViewport.releasePointerCapture(drag.pid); } catch (_e) {}\ndrag.pid = null;\nreturn;\n}\ntry { e.preventDefault(); } catch (_e) {}\nif (!drag.moved && Math.abs(dx) > 6) {\ndrag.moved = true;\nroot._u1GalleryDragging = true;\n}\ngalleryTrack.scrollLeft = drag.startScroll - dx;\n};\nconst onEnd = () => {\nif (!drag.active) return;\ndrag.active = false;\ntry { if (drag.pid != null) galleryViewport.releasePointerCapture(drag.pid); } catch (_e) {}\ndrag.pid = null;\nif (!canDrag()) return;\nif (drag.moved) {\nconst idx = getActiveGalleryIndex();\nstate.galleryIndex = idx;\nscrollGalleryToIndex(idx);\nwindow.setTimeout(() => { root._u1GalleryDragging = false; }, 0);\n}\n};\ngalleryViewport.addEventListener('pointerdown', onDown, { passive: true, capture: true });\ngalleryViewport.addEventListener('pointermove', onMove, { passive: false });\ngalleryViewport.addEventListener('pointerup', onEnd, { passive: true });\ngalleryViewport.addEventListener('pointercancel', onEnd, { passive: true });\ngalleryViewport.addEventListener('click', (evt) => {\nif (!root._u1GalleryDragging) return;\nevt.preventDefault();\nevt.stopPropagation();\n}, true);\n};\nconst scrollToNextStep = (from) => {\nconst steps = Array.from(root.querySelectorAll('[data-u1-pdp-step]'));\nconst idx = steps.findIndex(s => s.dataset.u1PdpStep === from);\nif (idx < 0) return;\nconst next = steps[idx + 1];\nif (!next) return;\nnext.scrollIntoView({ behavior: 'smooth', block: 'start' });\n};\nconst updateSummary = () => {\nif (summaryEl) {\nconst parts = [];\nif (state.color) parts.push(`Color - ${state.color}`);\nif (state.size) parts.push(`Size - ${state.size}`);\nparts.push(`Variant ID: ${state.variantId || '-'}`);\nif (state.accessories.size > 0) parts.push(`Accessories: ${Array.from(state.accessories.keys()).length}`);\nif (state.crashPlan && state.crashPlan !== 'standard') {\nconst label = String(state.crashPlan);\nparts.push(`Crash Replacement: ${label.charAt(0).toUpperCase()}${label.slice(1)}`);\n}\nsummaryEl.textContent = parts.join(' \u00B7 ');\n}\nupdateAtcTotal();\nupdateStickyChevron();\ntry { syncBundleDiscountUi(); } catch (_e) {}\ntry { updateBreakdownRows(); } catch (_e2) {}\n};\n\nconst extractPctLabelFromDiscountCode = (code) => {\nconst c = (code || '').toString().trim();\nif (!c) return '';\nconst ms = c.match(/\\d{1,3}/g);\nif (!ms || !ms.length) return '';\nconst n = Number(ms[ms.length - 1] || 0) || 0;\nif (n <= 0 || n > 100) return '';\nreturn `${n}% OFF`;\n};\nconst getRuleLabel = (rule) => {\ntry {\nconst l = (rule && rule.discountLabel) ? String(rule.discountLabel || '').trim() : '';\nif (l) return l;\nreturn extractPctLabelFromDiscountCode(rule && rule.discountCode ? rule.discountCode : '');\n} catch (_e) { return ''; }\n};\nconst extractPctFromLabel = (label) => {\ntry {\nconst s = (label || '').toString();\nconst m = s.match(/(\\d{1,3})\\s*%/);\nconst n = m ? (Number(m[1]) || 0) : 0;\nif (n <= 0 || n > 100) return 0;\nreturn n;\n} catch (_e) { return 0; }\n};\nconst applyAtcTotalDiscountUi = (pct, label) => {\n\nconst _apBundleAttr = root.getAttribute('data-u1-pdp-bundle-active') === 'true';\nconst _apPack = root._packSelector && root._packSelector.getActiveBundlePack ? root._packSelector.getActiveBundlePack() : null;\nif (_apBundleAttr && _apPack && (Number(_apPack.discountPercent || 0) > 0 || (_apPack.componentProducts && _apPack.componentProducts.length > 0))) return;\nconst p = Math.max(0, Math.min(100, Number(pct || 0) || 0));\nconst base = Number(root._u1AtcTotalCents || 0) || 0;\nconst priorMsrp = Number(root._u1AtcMsrpTotalCents || 0) || 0;\nconst priorSaved = Number(root._u1AtcFixedSavedCents || 0) || 0;\nconst priorLabel = (root._u1AtcFixedDiscountLabel || '').toString().trim();\nif (!atcTotalEl) return;\nif (!atcTotalMsrpEl || !base || p <= 0) {\nif (!priorMsrp) {\nif (atcTotalMsrpEl) atcTotalMsrpEl.setAttribute('aria-hidden', 'true');\nif (atcTotalWrapEl) atcTotalWrapEl.classList.remove('is-discount-on');\nif (atcSaveEl) { atcSaveEl.hidden = true; atcSaveEl.setAttribute('aria-hidden', 'true'); atcSaveEl.textContent = ''; }\natcTotalEl.textContent = formatMoneyCents(base);\n}\nreturn;\n}\nconst finalCents = Math.round((base * (100 - p)) / 100);\nconst msrpDisplay = priorMsrp > 0 ? priorMsrp : base;\nconst totalSaved = msrpDisplay - finalCents;\natcTotalMsrpEl.textContent = formatMoneyCents(msrpDisplay);\natcTotalMsrpEl.setAttribute('aria-hidden', 'false');\nif (atcTotalWrapEl) atcTotalWrapEl.classList.add('is-discount-on');\natcTotalEl.textContent = formatMoneyCents(finalCents);\nif (atcSaveEl && totalSaved > 0) {\nconst bundleLabel = (label || '').toString().trim();\nconst labels = [priorLabel, bundleLabel].filter(Boolean);\nconst combinedLabel = labels.join(' + ');\natcSaveEl.textContent = `Save ${formatMoneyCents(totalSaved)}`;\natcSaveEl.hidden = false;\natcSaveEl.setAttribute('aria-hidden', 'false');\n} else if (atcSaveEl) {\natcSaveEl.hidden = true;\natcSaveEl.setAttribute('aria-hidden', 'true');\natcSaveEl.textContent = '';\n}\n};\nconst ruleMatchesMainProductSelection = (rule) => {\ntry {\nif (!rule || typeof rule !== 'object') return false;\nconst rulePid = Math.max(0, Math.round(Number(rule.appliesToMainProductId || 0) || 0));\nconst curPid = Number(mainProductId || 0) || 0;\nif (rulePid && curPid && rulePid !== curPid) return false;\nconst allowed = rule.allowedMainVariantIds;\nif (Array.isArray(allowed) && allowed.length > 0) {\nconst vid = Number(state && state.variantId ? state.variantId : 0) || 0;\nif (!vid) return false;\nif (!allowed.some((id) => Number(id) === vid)) return false;\n}\nreturn true;\n} catch (_e) { return false; }\n};\nconst getApplicableBundleRules = () => {\ntry {\nif (!bundleDiscountRules || !bundleDiscountRules.length) return [];\nreturn bundleDiscountRules.filter((r) => !!r && ruleMatchesMainProductSelection(r));\n} catch (_e) { return []; }\n};\nconst getSelectedAccessoryHandleSet = () => {\nconst s = new Set();\ntry {\n// Fuente de verdad para UI: el DOM (evita desync con state)\n// Usamos aria-pressed (m\u00E1s confiable que classes si cambian estilos).\nconst btns = Array.from(root.querySelectorAll('[data-u1-pdp-accessory][aria-pressed=\"true\"],[data-u1-pdp-accessory].is-selected'));\nbtns.forEach((b) => {\nif (!b || !b.dataset) return;\nconst h = optionNameHandle(b.dataset.u1PdpAccessoryHandle || '');\nif (h) s.add(h);\n});\n} catch (_e) {}\ntry {\n// Complemento: state (por si el DOM cambia la clase/aria en otra capa)\nfor (const entry of state.accessories.values()) {\nif (!entry) continue;\nconst h = optionNameHandle(entry.handle || '');\nif (h) s.add(h);\n}\n} catch (_e2) {}\nreturn s;\n};\nconst getAccessoryTitleMapFromDom = () => {\nconst m = new Map();\ntry {\nconst btns = Array.from(root.querySelectorAll('[data-u1-pdp-accessory]'));\nbtns.forEach((b) => {\nif (!b || !b.dataset) return;\nconst h = optionNameHandle(b.dataset.u1PdpAccessoryHandle || '');\nif (!h) return;\nconst t =\n((b.dataset.u1PdpInfoTitle || '').toString().trim()) ||\n(() => {\ntry {\nconst el = b.querySelector('[data-u1-pdp-card-title]');\nreturn el ? (el.textContent || '').toString().trim() : '';\n} catch (_e2) { return ''; }\n})();\nif (t) m.set(h, t);\n});\n} catch (_e) {}\nreturn m;\n};\n\nconst getAccessoryIndexFromDom = () => {\nconst byHandle = new Map(); // handleH -> { title }\ntry {\nconst btns = Array.from(root.querySelectorAll('[data-u1-pdp-accessory]'));\nbtns.forEach((b) => {\nif (!b || !b.dataset) return;\nconst h = optionNameHandle(b.dataset.u1PdpAccessoryHandle || '');\nif (!h) return;\nconst title =\n((b.dataset.u1PdpInfoTitle || '').toString().trim()) ||\n(() => {\ntry {\nconst el = b.querySelector('[data-u1-pdp-card-title]');\nreturn el ? (el.textContent || '').toString().trim() : '';\n} catch (_e2) { return ''; }\n})();\nbyHandle.set(h, { title: title || '' });\n});\n} catch (_e) {}\nreturn { byHandle };\n};\n\nconst resolveAccessoryTokenToHandle = (tokenH, index) => {\nconst tok = optionNameHandle(tokenH || '');\nif (!tok) return '';\nconst byHandle = index && index.byHandle ? index.byHandle : null;\nif (!byHandle || typeof byHandle.has !== 'function') return tok;\nif (byHandle.has(tok)) return tok;\n// substring match on existing handles (covers unit-1-remote vs unit-1-remote-xxx)\nfor (const h of byHandle.keys()) {\nif (h && h.includes(tok)) return h;\n}\nconst tail = tok.split('-').filter(Boolean).pop() || '';\nif (tail) {\nfor (const [h, meta] of byHandle.entries()) {\nif (h && h.includes(tail)) return h;\nconst t = meta && meta.title ? optionNameHandle(meta.title) : '';\nif (t && (t === tail || t.includes(tail))) return h;\n}\n}\nreturn tok;\n};\n\nconst getAccessoryTitleForHandle = (handleH, index, titleMap) => {\ntry {\nconst h0 = optionNameHandle(handleH || '');\nif (!h0) return '';\n// Resolver a un handle real presente en el DOM (tolerante a tokens)\nconst idx = index && index.byHandle ? index : getAccessoryIndexFromDom();\nconst h = resolveAccessoryTokenToHandle(h0, idx) || h0;\nif (!h) return '';\nconst fromMap = titleMap && typeof titleMap.get === 'function' ? (titleMap.get(h) || '') : '';\nif (fromMap) return String(fromMap).trim();\nconst byHandle = index && index.byHandle ? index.byHandle : null;\nif (byHandle && typeof byHandle.get === 'function' && byHandle.has(h)) {\nconst meta = byHandle.get(h) || null;\nconst t = meta && meta.title ? String(meta.title || '').trim() : '';\nif (t) return t;\n}\n// fallback: buscar por substring en el \u00EDndice DOM\ntry {\nif (idx && idx.byHandle) {\nfor (const [hh, meta] of idx.byHandle.entries()) {\nif (!hh) continue;\nif (hh.includes(h0) || h0.includes(hh)) {\nconst t = meta && meta.title ? String(meta.title || '').trim() : '';\nif (t) return t;\n}\n}\n}\n} catch (_e2) {}\nreturn getAccessoryTitleFromCard(h) || getAccessoryTitleFromCatalog(h) || h;\n} catch (_e) { return ''; }\n};\n\nconst getAccessoryTitleFromCard = (handleH) => {\ntry {\nconst h = optionNameHandle(handleH || '');\nif (!h) return '';\n// No usar CSS.escape (no siempre est\u00E1 disponible). Match por dataset.\nconst btns = Array.from(root.querySelectorAll('[data-u1-pdp-accessory]'));\nconst btn = btns.find(b => b && b.dataset && optionNameHandle(b.dataset.u1PdpAccessoryHandle || '') === h) || null;\nif (!btn) return '';\nconst el = btn.querySelector('[data-u1-pdp-card-title]');\nreturn el ? (el.textContent || '').toString().trim() : '';\n} catch (_e) { return ''; }\n};\n\nconst getAccessoryTitleFromCatalog = (handleH) => {\ntry {\nconst want = (handleH || '').toString().trim();\nif (!want) return '';\n// accessoriesCatalog trae {handle,title}\nconst hit = (Array.isArray(accessoriesCatalog) ? accessoriesCatalog : []).find(p => p && optionNameHandle(p.handle || '') === want) || null;\nreturn hit && hit.title ? String(hit.title || '').trim() : '';\n} catch (_e) { return ''; }\n};\nconst getRuleMissingHandles = (rule, selectedSet) => {\nconst missing = [];\ntry {\nconst req = Array.isArray(rule && rule.requiredAccessoryHandles ? rule.requiredAccessoryHandles : null) ? rule.requiredAccessoryHandles : [];\nreq.forEach((h) => { if (h && !selectedSet.has(String(h))) missing.push(String(h)); });\n} catch (_e) {}\nreturn missing;\n};\nconst setPromoCopyOnBtn = (btn, { note, off, show, bundleMsg }) => {\nif (!btn || !btn.querySelector) return;\nconst promo = btn.querySelector('[data-u1-pdp-card-promo]');\nif (!promo) return;\nconst offEl = promo.querySelector('[data-u1-pdp-card-promo-off]');\nconst noteEl = promo.querySelector('[data-u1-pdp-card-promo-note]');\nif (offEl) offEl.textContent = (off || '').toString();\nif (noteEl) noteEl.textContent = (note || '').toString();\nif (bundleMsg) btn.classList.add('is-bundle-msg'); else btn.classList.remove('is-bundle-msg');\nif (show) {\npromo.hidden = false;\npromo.setAttribute('aria-hidden', 'false');\n} else {\npromo.hidden = true;\npromo.setAttribute('aria-hidden', 'true');\n}\n};\nconst visorBannerEl = root.querySelector('[data-u1-pdp-bundle-save-visor]');\nconst visorBannerSubEl = visorBannerEl ? visorBannerEl.querySelector('[data-u1-pdp-bundle-save-visor-subtitle]') : null;\nconst visorBannerTitleEl = visorBannerEl ? visorBannerEl.querySelector('[data-u1-pdp-bundle-save-visor-title]') : null;\nconst accBannerTitleEl = bundleSaveEl ? bundleSaveEl.querySelector('.u1-pdp-bundle-save__title') : null;\nconst setBundleSaveBanner = ({ show, subtitle, isVisor, bannerTitle }) => {\n\nconst accEl = bundleSaveEl;\nconst visEl = visorBannerEl;\nconst _bt = (bannerTitle || 'Bundle & Save').toString();\nif (isVisor && visEl) {\n  visEl.hidden = !show;\n  visEl.setAttribute('aria-hidden', show ? 'false' : 'true');\n  if (show) {\n    if (visorBannerTitleEl) visorBannerTitleEl.textContent = _bt;\n    if (visorBannerSubEl) visorBannerSubEl.textContent = (subtitle || '').toString();\n  }\n  if (accEl) { accEl.hidden = true; accEl.setAttribute('aria-hidden', 'true'); }\n} else {\n  if (accEl) {\n    accEl.hidden = !show;\n    accEl.setAttribute('aria-hidden', show ? 'false' : 'true');\n    if (show) {\n      if (accBannerTitleEl) accBannerTitleEl.textContent = _bt;\n      if (bundleSaveSubtitleEl) bundleSaveSubtitleEl.textContent = (subtitle || '').toString();\n    }\n  }\n  if (visEl) { visEl.hidden = true; visEl.setAttribute('aria-hidden', 'true'); }\n}\n};\nconst syncBundleDiscountUi = () => {\nconst rules = getApplicableBundleRules();\nif (!rules.length) { setBundleSaveBanner({ show: false }); return; }\nconst idx = getAccessoryIndexFromDom();\nconst titleByHandle = (() => {\nconst m = new Map();\ntry {\nfor (const [h, meta] of idx.byHandle.entries()) {\nif (!h) continue;\nconst t = meta && meta.title ? String(meta.title || '').trim() : '';\nif (t) m.set(h, t);\n}\n} catch (_e) {}\nreturn m;\n})();\nconst selected = getSelectedAccessoryHandleSet();\n\n// TIERS: ordenados por level ascendente (1..N)\nconst tiers = [...rules].sort((a, b) => (Number(a.level || 0) || 0) - (Number(b.level || 0) || 0));\nconst maxTier = tiers.length ? tiers[tiers.length - 1] : null;\ntry {\nif (maxTier) {\nconst maxLabel = getRuleLabel(maxTier) || '';\nconst req = Array.isArray(maxTier.requiredAccessoryHandles)\n? maxTier.requiredAccessoryHandles.map(x => resolveAccessoryTokenToHandle(x, idx)).filter(Boolean)\n: [];\nconst titles = req.map(h => getAccessoryTitleForHandle(h, idx.byHandle ? idx : null, titleByHandle)).filter(Boolean);\nconst subtitle = (titles.length && maxLabel) ? `${titles.join(' + ')}: ${maxLabel}` : (maxLabel || '');\n\nconst isVisorDiscount = req.length > 0 && req.every(function(h) {\n  return !!root.querySelector('[data-u1-pdp-accessory-handle=\"' + h + '\"][data-u1-pdp-visor=\"true\"]');\n});\nconst visorSubtitle = isVisorDiscount ? (maxLabel || '') : subtitle;\nconst bTitle = (maxTier && maxTier.bannerTitle) ? String(maxTier.bannerTitle) : 'Bundle & Save';\nsetBundleSaveBanner({ show: true, subtitle: isVisorDiscount ? visorSubtitle : subtitle, isVisor: isVisorDiscount, bannerTitle: bTitle });\n} else {\nsetBundleSaveBanner({ show: false });\n}\n} catch (_eBanner) { setBundleSaveBanner({ show: false }); }\n\nlet unlockedIdx = -1;\ntiers.forEach((t, i) => {\nconst reqResolved = (Array.isArray(t.requiredAccessoryHandles) ? t.requiredAccessoryHandles : []).map(x => resolveAccessoryTokenToHandle(x, idx)).filter(Boolean);\nconst miss = reqResolved.filter(h => !selected.has(String(h)));\nif (!miss.length) unlockedIdx = Math.max(unlockedIdx, i);\n});\n\nconst currentTier = unlockedIdx >= 0 ? tiers[unlockedIdx] : null;\nconst nextTier = (unlockedIdx + 1 < tiers.length) ? tiers[unlockedIdx + 1] : null;\nconst currentLabel = currentTier ? getRuleLabel(currentTier) : '';\n\nif (currentTier) {\napplyAtcTotalDiscountUi(extractPctFromLabel(currentLabel), currentLabel);\n} else if (nextTier) {\napplyAtcTotalDiscountUi(0, '');\n} else {\napplyAtcTotalDiscountUi(0, '');\n}\n\n// Per-card promo copy (only for cards participating in rules)\nconst tiersByHandle = (() => {\nconst m = new Map(); // handle -> [tier1..tierN] that include it\ntiers.forEach((t) => {\nconst req = Array.isArray(t.requiredAccessoryHandles) ? t.requiredAccessoryHandles.map(x => resolveAccessoryTokenToHandle(x, idx)).filter(Boolean) : [];\nreq.forEach((h) => {\nif (!h) return;\nif (!m.has(h)) m.set(h, []);\nm.get(h).push(t);\n});\n});\nreturn m;\n})();\n\n// Special-case copy for 2-tier: Remote (tier 1) + Winter Liner (tier 2)\nconst inferTwoTierHandles = () => {\ntry {\nconst t1 = tiers && tiers.length ? tiers[0] : null;\nconst t2 = tiers && tiers.length ? tiers[tiers.length - 1] : null;\nconst req1 = t1 && Array.isArray(t1.requiredAccessoryHandles) ? t1.requiredAccessoryHandles.map(x => resolveAccessoryTokenToHandle(x, idx)).filter(Boolean) : [];\nconst req2 = t2 && Array.isArray(t2.requiredAccessoryHandles) ? t2.requiredAccessoryHandles.map(x => resolveAccessoryTokenToHandle(x, idx)).filter(Boolean) : [];\nconst remoteH = req1.length === 1 ? optionNameHandle(req1[0]) : '';\nlet winterH = '';\nif (remoteH && req2.length) {\nconst other = req2.map(x => optionNameHandle(x)).filter(Boolean).find(x => x !== remoteH) || '';\nwinterH = other;\n}\nreturn { remoteH, winterH, tier1: t1, tier2: t2 };\n} catch (_e) { return { remoteH: '', winterH: '', tier1: null, tier2: null }; }\n};\nconst { remoteH, winterH, tier1: tier1Rule, tier2: tier2Rule } = inferTwoTierHandles();\n\nconst _visorDiscountLabel = (() => {\n  try {\n    for (var ri = 0; ri < rules.length; ri++) {\n      var r = rules[ri];\n      var rHandles = Array.isArray(r.requiredAccessoryHandles) ? r.requiredAccessoryHandles : [];\n      for (var rhi = 0; rhi < rHandles.length; rhi++) {\n        var rh = optionNameHandle(rHandles[rhi] || '');\n        if (rh && root.querySelector('[data-u1-pdp-accessory-handle=\"' + rh + '\"][data-u1-pdp-visor=\"true\"]')) {\n          return getRuleLabel(r) || '';\n        }\n      }\n    }\n    return '';\n  } catch(_e) { return ''; }\n})();\n\nconst btns = Array.from(root.querySelectorAll('[data-u1-pdp-accessory]'));\nbtns.forEach((btn) => {\nif (!btn || !btn.dataset) return;\nconst h = optionNameHandle(btn.dataset.u1PdpAccessoryHandle || '');\nif (!h) return;\n\nif (btn.dataset.u1PdpVisor === 'true' && _visorDiscountLabel) {\n  setPromoCopyOnBtn(btn, { note: 'Limited time offer', off: _visorDiscountLabel, show: true, bundleMsg: false });\n  return;\n}\nconst list = tiersByHandle.get(h) || null;\nif (!list || !list.length) return;\n\nconst isSelected = btn.classList && btn.classList.contains('is-selected');\nconst remoteSelected = remoteH ? selected.has(remoteH) : false;\nconst winterSelected = winterH ? selected.has(winterH) : false;\n\nif (remoteH && h === remoteH) {\nif (winterH && remoteSelected && winterSelected) {\nsetPromoCopyOnBtn(btn, { note: 'Unlocked', off: (tier2Rule ? getRuleLabel(tier2Rule) : ''), show: true, bundleMsg: true });\n} else {\n// Si Winter ya est\u00E1 seleccionado, agregar Remote completa el tier 2 \u2192 mostrar 15% OFF\nif (winterH && winterSelected && !remoteSelected) {\nsetPromoCopyOnBtn(btn, { note: 'Limited time offer', off: (tier2Rule ? getRuleLabel(tier2Rule) : (tier1Rule ? getRuleLabel(tier1Rule) : '')), show: true, bundleMsg: true });\n} else {\nsetPromoCopyOnBtn(btn, { note: 'Limited time offer', off: (tier1Rule ? getRuleLabel(tier1Rule) : ''), show: true, bundleMsg: true });\n}\n}\nreturn;\n}\nif (winterH && h === winterH) {\nif (remoteSelected && winterSelected) {\nsetPromoCopyOnBtn(btn, { note: 'Unlocked', off: (tier2Rule ? getRuleLabel(tier2Rule) : ''), show: true, bundleMsg: true });\n} else if (remoteSelected) {\nconst pct2 = extractPctFromLabel(tier2Rule ? getRuleLabel(tier2Rule) : '');\nconst pct1 = extractPctFromLabel(tier1Rule ? getRuleLabel(tier1Rule) : '');\nconst delta = (pct2 && pct1 && pct2 > pct1) ? (pct2 - pct1) : 5;\nsetPromoCopyOnBtn(btn, { note: 'Limited time offer', off: `+${delta}% OFF`, show: true, bundleMsg: true });\n} else {\nconst remoteTitle = getAccessoryTitleForHandle(remoteH, idx.byHandle ? idx : null, titleByHandle) || 'Remote';\nsetPromoCopyOnBtn(btn, { note: `Add ${remoteTitle} to unlock extra discount`, off: '', show: true, bundleMsg: true });\n}\nreturn;\n}\n// mejor tier que este item ayuda a desbloquear\nconst candidates = [...list].sort((a, b) => (Number(a.level || 0) || 0) - (Number(b.level || 0) || 0));\nlet target = null;\nif (nextTier && candidates.some(t => String(t.id) === String(nextTier.id))) target = nextTier;\nelse if (currentTier && candidates.some(t => String(t.id) === String(currentTier.id))) target = currentTier;\nelse target = null;\nconst label = target ? getRuleLabel(target) : '';\nif (!label) {\nsetPromoCopyOnBtn(btn, { note: '', off: '', show: false, bundleMsg: false });\nreturn;\n}\n\nconst req = Array.isArray(target.requiredAccessoryHandles) ? target.requiredAccessoryHandles.map(x => resolveAccessoryTokenToHandle(x, idx)).filter(Boolean) : [];\nconst missingNow = req.filter(x => x && !selected.has(String(x)));\n\nlet note = '';\nlet off = label;\nif (missingNow.length === 0) {\nnote = 'Unlocked';\n} else if (!isSelected) {\nconst missingAfter = req.filter(x => x && !(selected.has(String(x)) || optionNameHandle(String(x)) === h));\nif (missingAfter.length === 0) {\nnote = 'Limited time offer';\n} else {\nconst want = String(missingAfter[0] || '');\nconst wantTitle = getAccessoryTitleForHandle(want, idx.byHandle ? idx : null, titleByHandle) || want;\nnote = `Add ${wantTitle}`;\n}\n} else {\nconst want = String(missingNow[0] || '');\nconst wantTitle = getAccessoryTitleForHandle(want, idx.byHandle ? idx : null, titleByHandle) || want;\nnote = `Add ${wantTitle}`;\n}\n\nsetPromoCopyOnBtn(btn, { note, off, show: true, bundleMsg: true });\n});\n};\n\n// initial paint\ntry { syncBundleDiscountUi(); } catch (_e) {}\n\n// Safety: re-sync after any accessory click (covers async DOM/state updates)\ndocument.addEventListener('click', (e) => {\ntry {\nconst t = e && e.target && e.target.closest ? e.target.closest('[data-u1-pdp-accessory]') : null;\nif (!t || !root.contains(t)) return;\nwindow.requestAnimationFrame(() => {\ntry { syncBundleDiscountUi(); } catch (_e2) {}\n});\n} catch (_e) {}\n}, true);\nconst toastEl = root.querySelector('[data-u1-toast]');\nconst showToast = (msg) => {\nif (!toastEl) return;\ntoastEl.textContent = (msg || '').toString();\ntoastEl.classList.add('is-visible');\nif (toastEl._u1Timer) window.clearTimeout(toastEl._u1Timer);\ntoastEl._u1Timer = window.setTimeout(() => {\ntoastEl.classList.remove('is-visible');\n}, 1600);\n};\nconst notifyModalEl = root.querySelector('[data-u1-notify-modal]');\nconst notifyCloseEls = Array.from(root.querySelectorAll('[data-u1-notify-close]'));\nconst notifyImgEl = root.querySelector('[data-u1-notify-img]');\nconst notifyNameEl = root.querySelector('[data-u1-notify-name]');\nconst notifyVariantEl = root.querySelector('[data-u1-notify-variant]');\nconst notifyUiForm = root.querySelector('[data-u1-notify-ui-form]');\nconst notifyUiEmail = root.querySelector('[data-u1-notify-ui-email]');\nconst notifyUiWrap = root.querySelector('[data-u1-notify-ui]');\nconst notifyUiCaption = root.querySelector('[data-u1-notify-ui-caption]');\nconst notifyUiSuccess = root.querySelector('[data-u1-notify-ui-success]');\nconst notifyMarketingCheck = root.querySelector('[data-u1-notify-marketing]');\nconst notifyUiSubmit = root.querySelector('.u1-notify-modal__submit');\n\nconst shopifyMarketId = CFG.marketId;\nconst notifyKlaviyoMount = root.querySelector('[data-u1-notify-klaviyo]');\nconst notifyKlaviyoTpl = root.querySelector('[data-u1-notify-klaviyo-template]');\nconst waitFor = (predicate, { timeoutMs = 8000, intervalMs = 50 } = {}) => new Promise((resolve, reject) => {\nconst started = Date.now();\nconst tick = () => {\ntry {\nconst v = predicate();\nif (v) return resolve(v);\n} catch (_e) {}\nif (Date.now() - started >= timeoutMs) return reject(new Error('timeout'));\nwindow.setTimeout(tick, intervalMs);\n};\ntick();\n});\nconst ensureNotifyKlaviyoMounted = () => {\nif (!notifyKlaviyoMount || !notifyKlaviyoTpl) return false;\nif (notifyKlaviyoMount.dataset.u1Mounted === 'true') return true;\nconst html = (notifyKlaviyoTpl.innerHTML || '').trim();\nif (!html) return false;\nnotifyKlaviyoMount.innerHTML = html;\nnotifyKlaviyoMount.hidden = false;\nnotifyKlaviyoMount.setAttribute('aria-hidden', 'true');\nnotifyKlaviyoMount.dataset.u1Mounted = 'true';\nreturn true;\n};\nconst showNotifyKlaviyoForm = () => {\nif (notifyModalEl) notifyModalEl.classList.add('is-klaviyo-handoff');\nif (notifyKlaviyoMount) {\nnotifyKlaviyoMount.hidden = false;\nnotifyKlaviyoMount.setAttribute('aria-hidden', 'false');\n}\nif (notifyUiWrap) {\nnotifyUiWrap.style.display = 'none';\n}\n};\nconst submitNotifyToStoq = async (email) => {\nconst variantId = Number(state && state.variantId ? state.variantId : 0);\nif (!variantId) throw new Error('stoq_missing_variant');\nconst productId = Number(mainProductId || 0);\nif (!productId) throw new Error('stoq_missing_product');\nconst shopDomain = (window.Shopify && window.Shopify.shop) ? String(window.Shopify.shop) : '';\nif (!shopDomain) throw new Error('stoq_missing_shop_domain');\nconst payload = {\nintent: {\nshopify_variant_id: variantId,\nshopify_product_id: productId,\n...(shopifyMarketId ? { shopify_market_id: Number(shopifyMarketId) } : {}),\nchannel: 'email',\nquantity: 1,\nsource: 'api',\n},\ncustomer: {\nemail: String(email || '').trim(),\naccepts_marketing: !!(notifyMarketingCheck && notifyMarketingCheck.checked),\n...(shopifyMarketId ? { shopify_market_id: Number(shopifyMarketId) } : {}),\n},\n};\nconst url = 'https://app.stoqapp.com/api/v1/intents.json';\ntry {\nif (window.__U1_NOTIFY_DEBUG__ === true) {\nconst dbg = {\nat: Date.now(),\npage: String(location && location.href ? location.href : ''),\nshopDomain,\nvariantId,\nproductId,\nshopifyMarketId: shopifyMarketId || 0,\n};\nwindow.__u1NotifyDebug = dbg;\nconsole.warn('[U1 Notify][Stoq] debug', dbg);\n}\n} catch (_e) {}\nlet res = null;\ntry {\nres = await fetch(url, {\nmethod: 'POST',\nheaders: {\n'Content-Type': 'application/json',\n'X-Shopify-Shop-Domain': shopDomain,\n},\nbody: JSON.stringify(payload),\n});\n} catch (e) {\ntry { console.warn('[U1 Notify][Stoq] fetch failed', e); } catch (_e2) {}\nthrow e;\n}\nif (res && res.ok) return { ok: true, detail: 'stoq_back_in_stock' };\nlet txt = '';\ntry { txt = await res.text(); } catch (_e) {}\nthrow new Error(`stoq_back_in_stock_failed:${res ? res.status : '0'}:${txt || ''}`);\n};\nconst setNotifyUiError = (msg) => {\nif (notifyUiWrap) notifyUiWrap.classList.remove('is-success');\nif (notifyUiWrap) notifyUiWrap.classList.add('is-error');\nif (notifyUiCaption) notifyUiCaption.textContent = (msg || 'Please enter a valid email.').toString();\n};\nconst clearNotifyUiError = () => {\nif (notifyUiWrap) notifyUiWrap.classList.remove('is-error');\nif (notifyUiCaption) notifyUiCaption.textContent = '';\n};\nconst setNotifyUiSuccess = () => {\nif (notifyUiWrap) notifyUiWrap.classList.remove('is-error');\nif (notifyUiWrap) notifyUiWrap.classList.add('is-success');\nif (notifyUiSuccess) notifyUiSuccess.setAttribute('aria-hidden', 'false');\n};\nconst resetNotifyUi = () => {\nif (notifyModalEl) notifyModalEl.classList.remove('is-klaviyo-handoff');\nif (notifyUiWrap) {\nnotifyUiWrap.classList.remove('is-success');\nnotifyUiWrap.classList.remove('is-error');\nnotifyUiWrap.style.display = '';\n}\nif (notifyUiCaption) notifyUiCaption.textContent = '';\nif (notifyUiSuccess) notifyUiSuccess.setAttribute('aria-hidden', 'true');\nif (notifyUiForm) notifyUiForm._u1Submitting = false;\nif (notifyUiEmail) {\nnotifyUiEmail.disabled = false;\nnotifyUiEmail.value = '';\n}\nif (notifyUiSubmit) {\nnotifyUiSubmit.disabled = false;\nnotifyUiSubmit.classList.remove('is-loading');\n}\nif (notifyKlaviyoMount) {\nnotifyKlaviyoMount.hidden = true;\nnotifyKlaviyoMount.setAttribute('aria-hidden', 'true');\n}\n};\nconst syncNotifyModalContent = () => {\nif (!notifyModalEl) return;\nconst v = variants.find(v => v && Number(v.id) === Number(state.variantId)) || null;\nconst name = (mainProductTitle || mainProductHandle || 'UNIT1').toString();\nconst variantLabel = (() => {\nif (v && v.title) return String(v.title);\nconst parts = [];\nif (state.color) parts.push(state.color);\nif (state.size) parts.push(state.size);\nreturn parts.join(' ') || '';\n})();\nif (notifyNameEl) notifyNameEl.textContent = name.toUpperCase();\nif (notifyVariantEl) notifyVariantEl.textContent = variantLabel;\ntry {\nconst idx = getActiveGalleryIndex();\nconst slide = slides[idx] || slides[state.galleryIndex] || null;\nconst img = slide ? slide.querySelector('img') : null;\nconst src = img ? (img.currentSrc || img.src || '') : '';\nif (notifyImgEl && src) {\nnotifyImgEl.src = src;\nnotifyImgEl.alt = name;\n}\n} catch (_e) {}\n};\nconst openNotifyModal = () => {\nif (!notifyModalEl) return;\nsyncNotifyModalContent();\nresetNotifyUi();\nnotifyModalEl.hidden = false;\nwindow.requestAnimationFrame(() => notifyModalEl.classList.add('is-open'));\n};\nconst closeNotifyModal = () => {\nif (!notifyModalEl) return;\nnotifyModalEl.classList.remove('is-open');\nwindow.setTimeout(() => { notifyModalEl.hidden = true; }, 220);\n};\nnotifyCloseEls.forEach((el) => el.addEventListener('click', closeNotifyModal));\nwindow.addEventListener('keydown', (e) => {\nif (!notifyModalEl || notifyModalEl.hidden) return;\nif (e.key === 'Escape') closeNotifyModal();\n});\nif (notifyUiForm && !notifyUiForm._u1Bound) {\nnotifyUiForm._u1Bound = true;\nif (notifyUiEmail) {\nnotifyUiEmail.addEventListener('input', () => clearNotifyUiError());\nnotifyUiEmail.addEventListener('blur', () => {\nconst v = (notifyUiEmail.value || '').toString().trim();\nif (!v) return;\nconst ok = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(v);\nif (!ok) setNotifyUiError('Please enter a valid email.');\n});\n}\nnotifyUiForm.addEventListener('submit', async (e) => {\ne.preventDefault();\nconst email = (notifyUiEmail && notifyUiEmail.value ? String(notifyUiEmail.value).trim() : '');\nconst isValid = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email);\nif (!email || !isValid) {\nsetNotifyUiError('Please enter a valid email.');\nnotifyUiEmail?.focus?.();\nreturn;\n}\nclearNotifyUiError();\nif (notifyUiForm._u1Submitting) return;\nnotifyUiForm._u1Submitting = true;\nif (notifyUiEmail) notifyUiEmail.disabled = true;\nif (notifyUiSubmit) {\nnotifyUiSubmit.disabled = true;\nnotifyUiSubmit.classList.add('is-loading');\n}\ntry {\nconst res = await submitNotifyToStoq(email);\nif (res && res.ok) {\nsetNotifyUiSuccess();\n} else {\nsetNotifyUiError('We couldn\u2019t submit that email. Please try again.');\n}\n} catch (_err) {\ntry { if (window.__U1_NOTIFY_DEBUG__ === true) console.warn('[U1 Notify] submit failed', _err, window.__u1NotifyDebug || null); } catch (_e) {}\ntry {\nsetNotifyUiError('We couldn\u2019t submit that email. Please try again.');\n} catch (_e2) {\nsetNotifyUiError('We couldn\u2019t submit that email. Please try again.');\n}\n} finally {\nif (notifyUiEmail) notifyUiEmail.disabled = false;\nif (notifyUiSubmit) {\nnotifyUiSubmit.disabled = false;\nnotifyUiSubmit.classList.remove('is-loading');\n}\nnotifyUiForm._u1Submitting = false;\n}\n});\n}\nconst sizeChartModalEl = root.querySelector('[data-u1-size-chart-modal]');\nconst sizeChartCloseEls = Array.from(root.querySelectorAll('[data-u1-size-chart-close]'));\nconst sizeChartScrollEl = sizeChartModalEl ? sizeChartModalEl.querySelector('[data-u1-size-chart-scroll]') : null;\nconst sizeChartUnitBtns = Array.from(sizeChartModalEl ? sizeChartModalEl.querySelectorAll('[data-u1-size-chart-unit-btn]') : []);\nconst sizeChartValEls = Array.from(sizeChartModalEl ? sizeChartModalEl.querySelectorAll('[data-u1-size-chart-val]') : []);\nconst sizeChartToggleEl = sizeChartModalEl ? sizeChartModalEl.querySelector('[data-u1-size-chart-toggle]') : null;\nconst sizeChartThumbEl = sizeChartModalEl ? sizeChartModalEl.querySelector('[data-u1-size-chart-thumb]') : null;\nconst convertInToCmRange = (raw) => {\nconst s = (raw || '').toString().trim();\nif (!s) return '';\nconst nums = Array.from(s.matchAll(/(\\d+(?:\\.\\d+)?)/g)).map(m => Number(m[1]));\nif (!nums.length) return '';\nconst delim = s.includes('\u2013') ? '\u2013' : '-';\nconst fmt = (n) => (n * 2.54).toFixed(1);\nif (nums.length >= 2 && s.includes(delim)) return `${fmt(nums[0])}${delim}${fmt(nums[1])}`;\nif (nums.length === 1) return `${fmt(nums[0])}`;\nreturn nums.map(fmt).join(delim);\n};\nconst applySizeChartUnit = (unit) => {\nif (!sizeChartModalEl) return;\nconst u = (unit === 'cm') ? 'cm' : 'in';\nsizeChartModalEl.dataset.u1SizeChartUnit = u;\nif (sizeChartToggleEl) sizeChartToggleEl.classList.toggle('is-cm', u === 'cm');\nsizeChartUnitBtns.forEach((btn) => {\nconst isActive = (btn.dataset.unit || '') === u;\nbtn.classList.toggle('is-active', isActive);\nbtn.setAttribute('aria-pressed', isActive ? 'true' : 'false');\n});\nsizeChartValEls.forEach((cell) => {\nconst inVal = (cell.dataset.in || '').toString().trim();\nconst cmVal = (cell.dataset.cm || '').toString().trim();\nconst numEl = cell.querySelector('[data-u1-size-chart-num]');\nconst unitEl = cell.querySelector('[data-u1-size-chart-unit]');\nconst nextVal = (u === 'cm') ? (cmVal || convertInToCmRange(inVal)) : inVal;\nif (numEl) numEl.textContent = nextVal || '';\nif (unitEl) unitEl.textContent = u;\n});\n};\nconst updateSizeChartGradients = () => {\nif (!sizeChartModalEl || !sizeChartScrollEl) return;\nconst top = sizeChartScrollEl.scrollTop <= 2;\nconst bottom = (sizeChartScrollEl.scrollTop + sizeChartScrollEl.clientHeight) >= (sizeChartScrollEl.scrollHeight - 2);\nsizeChartModalEl.classList.toggle('is-at-top', top);\nsizeChartModalEl.classList.toggle('is-at-bottom', bottom);\n};\nconst updateSizeChartScrollbar = () => {\nif (!sizeChartThumbEl || !sizeChartScrollEl) return;\nconst h = sizeChartScrollEl.clientHeight;\nconst sh = sizeChartScrollEl.scrollHeight;\nconst hasOverflow = sh > (h + 2);\nif (sizeChartModalEl) sizeChartModalEl.classList.toggle('is-no-scroll', !hasOverflow);\nif (!hasOverflow) {\nsizeChartThumbEl.style.height = `0px`;\nsizeChartThumbEl.style.transform = `translateY(0px)`;\nreturn;\n}\nconst maxScroll = Math.max(1, sh - h);\nconst ratio = h / sh;\nconst barEl = sizeChartThumbEl.parentElement;\nconst barH = barEl ? barEl.clientHeight : 320;\nconst thumbH = Math.max(56, Math.min(barH, Math.round(barH * ratio)));\nconst maxY = Math.max(0, barH - thumbH);\nconst y = Math.round((sizeChartScrollEl.scrollTop / maxScroll) * maxY);\nsizeChartThumbEl.style.height = `${thumbH}px`;\nsizeChartThumbEl.style.transform = `translateY(${y}px)`;\n};\nconst openSizeChartModal = () => {\nif (!sizeChartModalEl) return;\nsizeChartModalEl.hidden = false;\napplySizeChartUnit('in');\nwindow.requestAnimationFrame(() => {\nupdateSizeChartGradients();\nupdateSizeChartScrollbar();\nsizeChartModalEl.classList.add('is-open');\n});\n};\nconst closeSizeChartModal = () => {\nif (!sizeChartModalEl) return;\nsizeChartModalEl.classList.remove('is-open');\nwindow.setTimeout(() => { sizeChartModalEl.hidden = true; }, 220);\n};\nsizeChartCloseEls.forEach((el) => el.addEventListener('click', closeSizeChartModal));\nif (sizeChartScrollEl) sizeChartScrollEl.addEventListener('scroll', () => {\nupdateSizeChartGradients();\nupdateSizeChartScrollbar();\nif (sizeChartModalEl) {\nsizeChartModalEl.classList.add('is-scrolling');\nif (sizeChartModalEl._u1ScrollTimer) window.clearTimeout(sizeChartModalEl._u1ScrollTimer);\nsizeChartModalEl._u1ScrollTimer = window.setTimeout(() => {\nsizeChartModalEl.classList.remove('is-scrolling');\n}, 260);\n}\n}, { passive: true });\nsizeChartUnitBtns.forEach((btn) => btn.addEventListener('click', () => applySizeChartUnit(btn.dataset.unit || 'in')));\nconst sparkySizeChartModalEl = root.querySelector('[data-u1-sparky-size-chart-modal]');\nconst sparkySizeChartCloseEls = sparkySizeChartModalEl\n? Array.from(sparkySizeChartModalEl.querySelectorAll('[data-u1-sparky-size-chart-close]'))\n: [];\nconst sparkySizeChartScrollEl = sparkySizeChartModalEl\n? sparkySizeChartModalEl.querySelector('[data-u1-sparky-size-chart-scroll]')\n: null;\nconst sparkySizeChartThumbEl = sparkySizeChartModalEl\n? sparkySizeChartModalEl.querySelector('[data-u1-sparky-size-chart-thumb]')\n: null;\nconst updateSparkySizeChartGradients = () => {\nif (!sparkySizeChartModalEl || !sparkySizeChartScrollEl) return;\nconst top = sparkySizeChartScrollEl.scrollTop <= 2;\nconst bottom = (sparkySizeChartScrollEl.scrollTop + sparkySizeChartScrollEl.clientHeight) >= (sparkySizeChartScrollEl.scrollHeight - 2);\nsparkySizeChartModalEl.classList.toggle('is-at-top', top);\nsparkySizeChartModalEl.classList.toggle('is-at-bottom', bottom);\n};\nconst updateSparkySizeChartScrollbar = () => {\nif (!sparkySizeChartThumbEl || !sparkySizeChartScrollEl || !sparkySizeChartModalEl) return;\nconst h = sparkySizeChartScrollEl.clientHeight;\nconst sh = sparkySizeChartScrollEl.scrollHeight;\nconst hasOverflow = sh > (h + 2);\nsparkySizeChartModalEl.classList.toggle('is-no-scroll', !hasOverflow);\nif (!hasOverflow) {\nsparkySizeChartThumbEl.style.height = '0px';\nsparkySizeChartThumbEl.style.transform = 'translateY(0px)';\nreturn;\n}\nconst maxScroll = Math.max(1, sh - h);\nconst ratio = h / sh;\nconst barEl = sparkySizeChartThumbEl.parentElement;\nconst barH = barEl ? barEl.clientHeight : 320;\nconst thumbH = Math.max(56, Math.min(barH, Math.round(barH * ratio)));\nconst maxY = Math.max(0, barH - thumbH);\nconst y = Math.round((sparkySizeChartScrollEl.scrollTop / maxScroll) * maxY);\nsparkySizeChartThumbEl.style.height = `${thumbH}px`;\nsparkySizeChartThumbEl.style.transform = `translateY(${y}px)`;\n};\nconst openSparkySizeChartModal = () => {\nif (!sparkySizeChartModalEl) return;\nsparkySizeChartModalEl.hidden = false;\nwindow.requestAnimationFrame(() => {\nupdateSparkySizeChartGradients();\nupdateSparkySizeChartScrollbar();\nsparkySizeChartModalEl.classList.add('is-open');\n});\n};\nconst closeSparkySizeChartModal = () => {\nif (!sparkySizeChartModalEl) return;\nsparkySizeChartModalEl.classList.remove('is-open');\nwindow.setTimeout(() => { sparkySizeChartModalEl.hidden = true; }, 220);\n};\nsparkySizeChartCloseEls.forEach((el) => el.addEventListener('click', closeSparkySizeChartModal));\nif (sparkySizeChartScrollEl) {\nsparkySizeChartScrollEl.addEventListener('scroll', () => {\nupdateSparkySizeChartGradients();\nupdateSparkySizeChartScrollbar();\nif (sparkySizeChartModalEl) {\nsparkySizeChartModalEl.classList.add('is-scrolling');\nif (sparkySizeChartModalEl._u1ScrollTimer) window.clearTimeout(sparkySizeChartModalEl._u1ScrollTimer);\nsparkySizeChartModalEl._u1ScrollTimer = window.setTimeout(() => {\nsparkySizeChartModalEl.classList.remove('is-scrolling');\n}, 260);\n}\n}, { passive: true });\n}\nArray.from(root.querySelectorAll('[data-u1-pdp-sparky-size-chart]')).forEach((btn) => {\nbtn.addEventListener('click', (ev) => {\nev.preventDefault();\nopenSparkySizeChartModal();\n});\n});\nwindow.addEventListener('keydown', (e) => {\nif (e.key !== 'Escape') return;\nif (sparkySizeChartModalEl && !sparkySizeChartModalEl.hidden) {\ncloseSparkySizeChartModal();\nreturn;\n}\nif (!sizeChartModalEl || sizeChartModalEl.hidden) return;\ncloseSizeChartModal();\n});\nconst measureModalEl = root.querySelector('[data-u1-measure-modal]');\nconst measureCloseEls = Array.from(root.querySelectorAll('[data-u1-measure-close]'));\nconst measureVideoEl = measureModalEl ? measureModalEl.querySelector('[data-u1-measure-video]') : null;\nconst measurePlayerMount = measureModalEl ? measureModalEl.querySelector('[data-u1-measure-player]') : null;\nconst parseYouTubeId = (raw) => {\nconst s = (raw || '').toString().trim();\nif (!s) return '';\nif (/^[a-zA-Z0-9_-]{11}$/.test(s)) return s;\ntry {\nconst u = new URL(s);\nconst host = (u.hostname || '').toLowerCase();\nif (host.includes('youtu.be')) {\nconst id = u.pathname.split('/').filter(Boolean)[0] || '';\nreturn (id || '').replace(/[^a-zA-Z0-9_-]/g, '').slice(0, 11);\n}\nconst v = u.searchParams.get('v');\nif (v) return v.replace(/[^a-zA-Z0-9_-]/g, '').slice(0, 11);\nconst parts = u.pathname.split('/').filter(Boolean);\nconst idx = parts.indexOf('embed');\nif (idx >= 0 && parts[idx + 1]) return parts[idx + 1];\nconst sIdx = parts.indexOf('shorts');\nif (sIdx >= 0 && parts[sIdx + 1]) return (parts[sIdx + 1] || '').replace(/[^a-zA-Z0-9_-]/g, '').slice(0, 11);\nconst lIdx = parts.indexOf('live');\nif (lIdx >= 0 && parts[lIdx + 1]) return (parts[lIdx + 1] || '').replace(/[^a-zA-Z0-9_-]/g, '').slice(0, 11);\nreturn '';\n} catch (_e) {\nconst m = s.match(/(?:v=|\\/shorts\\/|\\/embed\\/|youtu\\.be\\/|\\/live\\/)([a-zA-Z0-9_-]{11})/);\nreturn m && m[1] ? m[1] : '';\n}\n};\nconst buildMeasureEmbedUrl = (vid) => {\nconst id = (vid || '').toString().trim();\nif (!id) return '';\nconst params = new URLSearchParams({\nautoplay: '0',\ncontrols: '1',\nrel: '0',\nplaysinline: '1',\nmodestbranding: '1',\niv_load_policy: '3',\n});\nreturn `https://www.youtube-nocookie.com/embed/${encodeURIComponent(id)}?${params.toString()}`;\n};\nconst openMeasureModal = () => {\nif (!measureModalEl) return;\nensureMeasureIframe();\nmeasureModalEl.hidden = false;\nwindow.requestAnimationFrame(() => measureModalEl.classList.add('is-open'));\n};\nconst closeMeasureModal = () => {\nif (!measureModalEl) return;\nmeasureModalEl.classList.remove('is-open');\ntry { if (measurePlayerMount) measurePlayerMount.innerHTML = ''; } catch (_e) {}\nwindow.setTimeout(() => { measureModalEl.hidden = true; }, 220);\n};\nmeasureCloseEls.forEach((el) => el.addEventListener('click', closeMeasureModal));\nwindow.addEventListener('keydown', (e) => {\nif (!measureModalEl || measureModalEl.hidden) return;\nif (e.key === 'Escape') closeMeasureModal();\n});\nconst ensureMeasureIframe = () => {\nif (!measureModalEl || !measurePlayerMount) return null;\nif (measurePlayerMount.querySelector('iframe')) return measurePlayerMount.querySelector('iframe');\nconst vid = parseYouTubeId(measureModalEl.dataset.u1MeasureYoutube || '');\nif (!vid) return null;\nconst src = buildMeasureEmbedUrl(vid);\nif (!src) return null;\nmeasurePlayerMount.innerHTML = `\n<iframe\nsrc=\"${src}\"\ntitle=\"YouTube video player\"\nallow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\nallowfullscreen\nreferrerpolicy=\"strict-origin-when-cross-origin\"\n></iframe>\n`;\nreturn measurePlayerMount.querySelector('iframe');\n};\nconst infoModalEl = root.querySelector('[data-u1-info-modal]');\nconst infoCloseEls = Array.from(root.querySelectorAll('[data-u1-info-close]'));\nconst infoTitleEl = root.querySelector('[data-u1-info-title]');\nconst infoDescEl = root.querySelector('[data-u1-info-desc]');\nconst infoPriceEl = root.querySelector('[data-u1-info-price]');\nconst infoMediaWrap = root.querySelector('[data-u1-info-media]');\nconst infoImgEl = root.querySelector('[data-u1-info-img]');\nconst isCardInfoEnabled = (root.dataset.u1PdpAccessoriesInfo || 'true') !== 'false';\nconst openInfoModalFromCard = (cardEl) => {\nif (!infoModalEl || !cardEl) return;\nconst t = cardEl.dataset.u1PdpInfoTitle || 'Info';\nconst d = cardEl.dataset.u1PdpInfoDesc || '';\nconst p = cardEl.dataset.u1PdpInfoPrice || '';\nconst img = cardEl.dataset.u1PdpInfoImg || '';\nif (infoTitleEl) infoTitleEl.textContent = t;\nif (infoDescEl) { infoDescEl.textContent = d; infoDescEl.hidden = !d; }\nif (infoPriceEl) infoPriceEl.textContent = p || '';\nif (infoMediaWrap && infoImgEl && img) {\ninfoMediaWrap.hidden = false;\ninfoImgEl.src = img;\ninfoImgEl.alt = t;\n} else if (infoMediaWrap) {\ninfoMediaWrap.hidden = true;\n}\ninfoModalEl.hidden = false;\n};\nconst closeInfoModal = () => {\nif (!infoModalEl) return;\ninfoModalEl.hidden = true;\n};\nconst openInfoModalSimple = ({ title, desc }) => {\nif (!infoModalEl) return;\nconst t = (title || 'Info').toString();\nconst d = (desc || '').toString();\nif (infoTitleEl) infoTitleEl.textContent = t;\nif (infoDescEl) { infoDescEl.textContent = d; infoDescEl.hidden = !d; }\nif (infoPriceEl) infoPriceEl.textContent = '';\nif (infoMediaWrap) infoMediaWrap.hidden = true;\ninfoModalEl.hidden = false;\n};\ninfoCloseEls.forEach((el) => el.addEventListener('click', closeInfoModal));\nwindow.addEventListener('keydown', (e) => {\nif (!infoModalEl || infoModalEl.hidden) return;\nif (e.key === 'Escape') closeInfoModal();\n});\n// Model switch (cross-product): navegar al producto seleccionado (scopeado al step)\n(() => {\nconst _u1Fpm = (h) => { try { root._u1FilterPacksByModel?.(h); } catch (_e) {} };\nconst step = root.querySelector('[data-u1-pdp-step=\"product_model\"]');\nif (!step) return;\nconst _u1ApplyModel = (model, handle) => {\nmainProductTitle = model.title || mainProductTitle;\nmainProductHandle = model.handle || mainProductHandle;\nmainProductId = model.id || mainProductId;\nvariants = model.variants;\n_u1RecalcPreorder(variants);\n// Disponibilidad de colores/talles del modelo nuevo\ntry { updateColorAvailability(); } catch (_eCU2) {}\ntry { updateSizeAvailability(); } catch (_eSU2) {}\ntry {\nconst isMips = (String(root.dataset.u1PdpMipsForce || '') === '1') || /mips/i.test(String(model.handle || '')) || /mips/i.test(String(model.title || ''));\nroot.dataset.u1PdpIsMips = isMips ? '1' : '0';\nif (!isMips) {\ntry { clearMipsOverlays(); } catch (_eC) {}\n}\n} catch (_eM) {}\n\ntry {\nconst titleEl = root.querySelector('.u1-pdp-product__title');\nif (titleEl) titleEl.textContent = `Buy ${mainProductTitle}`.trim();\n} catch (_eT) {}\ntry {\nconst descEl = root.querySelector('[data-u1-pdp-desc]');\nif (descEl && typeof model.descriptionHtml === 'string') descEl.innerHTML = model.descriptionHtml;\n} catch (_eD) {}\n\ntry {\nconst btns = Array.from(step.querySelectorAll('[data-u1-pdp-product-model]'));\nbtns.forEach((b) => {\nconst on = String(b.dataset.u1PdpProductModelHandle || '') === handle;\nb.classList.toggle('is-selected', on);\nb.setAttribute('aria-pressed', on ? 'true' : 'false');\n});\n} catch (_eS) {}\n\ntry { updateVariant(); } catch (_eV) {}\ntry { root._u1RequestAccessoriesBaseRefresh?.(); } catch (_eA) {}\ntry { root._u1RequestSyncModeOverlays?.(); } catch (_eO) {}\ntry { syncMipsOverlayUi(); } catch (_eMO) {}\ntry { renderMobileGalleries(); } catch (_eMG) {}\nroot._u1ModelGallery?.(model, handle);\ntry { updateStepMobileTitle('product_model', model.title || handle); } catch (_eMT) {}\n_u1Fpm(model.handle || handle);\n};\nstep.addEventListener('click', (e) => {\nconst t = e.target;\nif (!t || !t.closest) return;\nconst btn = t.closest('[data-u1-pdp-product-model][data-u1-pdp-product-model-handle]');\nif (!btn || !step.contains(btn)) return;\nconst handle = (btn.dataset.u1PdpProductModelHandle || '').toString();\nif (!handle) return;\nif (btn.getAttribute('aria-disabled') === 'true') return;\nif (btn.classList.contains('is-selected')) return;\n\n// \u2500\u2500 Variant model mode (single product, model = variant option value) \u2500\u2500\n/* Una card que apunta a OTRO producto trae su id: esas van siempre por la rama de\n   cambio de producto, aunque el capitulo sea de variantes. */\nif (IS_VARIANT_MODEL_MODE && !btn.dataset.u1PdpProductModelId) {\nif (mainProductHandle !== U1_HOME_MODEL.handle) { try { _u1ApplyModel(U1_HOME_MODEL, handle); } catch (_eH) {} }\nstate.variantModel = handle;\nconst isMips = (String(root.dataset.u1PdpMipsForce || '') === '1') || /mips/i.test(handle);\nroot.dataset.u1PdpIsMips = isMips ? '1' : '0';\nif (!isMips) { try { clearMipsOverlays(); } catch (_eC) {} }\n// Restaurar color memorizado para este modelo antes de recalcular disponibilidad\nif (colorMemory.has(handle)) state.color = colorMemory.get(handle);\ntry {\nconst btns = Array.from(step.querySelectorAll('[data-u1-pdp-product-model]'));\nbtns.forEach((b) => {\nconst on = String(b.dataset.u1PdpProductModelHandle || '') === handle;\nb.classList.toggle('is-selected', on);\nb.setAttribute('aria-pressed', on ? 'true' : 'false');\n});\n} catch (_eS) {}\ntry { updateColorAvailability(); } catch (_eCU) {}\ntry { updateSizeAvailability(); } catch (_eSU) {}\ntry { updateVariant(); } catch (_eV) {}\ntry { root._u1RequestAccessoriesBaseRefresh?.(); } catch (_eA) {}\ntry { root._u1RequestSyncModeOverlays?.(); } catch (_eO) {}\ntry { syncMipsOverlayUi(); } catch (_eMO) {}\ntry { renderMobileGalleries(); } catch (_eMG) {}\ntry { updateStepMobileTitle('product_model', handle); } catch (_eT) {}\n_u1Fpm(handle);\nreturn;\n}\n\n// \u2500\u2500 helmet_models mode (separate products) \u2500\u2500\nconst model = productModels.get(handle) || null;\nif (!model || !Array.isArray(model.variants) || !model.variants.length) return;\n\n_u1ApplyModel(model, handle);\n}, true);\n/* Default product model: auto-click de la card que matchea (no en variant-model mode) */\n(() => {\ntry {\nif (String(root.dataset.u1PdpVariantModelMode || '') === '1') return;\nconst defHandle = (root.dataset.u1PdpDefaultProductModel || '').trim();\nif (!defHandle) return;\nconst btn = step.querySelector('[data-u1-pdp-product-model-handle=\"' + CSS.escape(defHandle) + '\"]');\nif (!btn || btn.classList.contains('is-selected')) return;\nrequestAnimationFrame(() => { requestAnimationFrame(() => {\ntry { if (!btn.classList.contains('is-selected')) btn.click(); } catch (_eDPM) {}\n}); });\n} catch (_eDPMi) {}\n})();\n})();\nroot.addEventListener('click', (e) => {\nconst t = e.target;\nif (!t || !t.closest) return;\nconst opener = t.closest('[data-u1-pdp-open-info]');\nif (!opener) return;\nif (!isCardInfoEnabled) return;\nconst card = opener.closest('.u1-pdp-card');\nif (!card) return;\ne.preventDefault();\ne.stopPropagation();\nopenInfoModalFromCard(card);\n}, true);\nconst crashTermsModalEl = root.querySelector('[data-u1-crash-terms-modal]');\nconst crashTermsCloseEls = Array.from(root.querySelectorAll('[data-u1-crash-terms-close]'));\nconst crashTermsScrollEl = crashTermsModalEl ? crashTermsModalEl.querySelector('[data-u1-crash-terms-scroll]') : null;\nconst crashTermsThumbEl = crashTermsModalEl ? crashTermsModalEl.querySelector('[data-u1-crash-terms-thumb]') : null;\nconst lockPageScroll = (on) => {\ntry { document.documentElement.style.overflow = on ? 'hidden' : ''; } catch (_e) {}\n};\nconst updateCrashTermsGradients = () => {\nif (!crashTermsModalEl || !crashTermsScrollEl) return;\nconst top = crashTermsScrollEl.scrollTop <= 2;\nconst bottom = (crashTermsScrollEl.scrollTop + crashTermsScrollEl.clientHeight) >= (crashTermsScrollEl.scrollHeight - 2);\ncrashTermsModalEl.classList.toggle('is-at-top', top);\ncrashTermsModalEl.classList.toggle('is-at-bottom', bottom);\n};\nconst updateCrashTermsScrollbar = () => {\nif (!crashTermsThumbEl || !crashTermsScrollEl || !crashTermsModalEl) return;\nconst h = crashTermsScrollEl.clientHeight;\nconst sh = crashTermsScrollEl.scrollHeight;\nconst hasOverflow = sh > (h + 2);\ncrashTermsModalEl.classList.toggle('is-no-scroll', !hasOverflow);\nif (!hasOverflow) {\ncrashTermsThumbEl.style.height = `0px`;\ncrashTermsThumbEl.style.transform = `translateY(0px)`;\nreturn;\n}\nconst maxScroll = Math.max(1, sh - h);\nconst ratio = h / sh;\nconst barEl = crashTermsThumbEl.parentElement;\nconst barH = barEl ? barEl.clientHeight : 320;\nconst thumbH = Math.max(56, Math.min(barH, Math.round(barH * ratio)));\nconst maxY = Math.max(0, barH - thumbH);\nconst y = Math.round((crashTermsScrollEl.scrollTop / maxScroll) * maxY);\ncrashTermsThumbEl.style.height = `${thumbH}px`;\ncrashTermsThumbEl.style.transform = `translateY(${y}px)`;\n};\nconst openCrashTermsModal = () => {\nif (!crashTermsModalEl) return;\ncrashTermsModalEl.hidden = false;\nlockPageScroll(true);\nwindow.requestAnimationFrame(() => {\nupdateCrashTermsGradients();\nupdateCrashTermsScrollbar();\ncrashTermsModalEl.classList.add('is-open');\n});\n};\nconst closeCrashTermsModal = () => {\nif (!crashTermsModalEl) return;\ncrashTermsModalEl.classList.remove('is-open');\nlockPageScroll(false);\nwindow.setTimeout(() => { crashTermsModalEl.hidden = true; }, 220);\n};\ncrashTermsCloseEls.forEach((el) => el.addEventListener('click', closeCrashTermsModal));\nif (crashTermsScrollEl) crashTermsScrollEl.addEventListener('scroll', () => {\nupdateCrashTermsGradients();\nupdateCrashTermsScrollbar();\nif (crashTermsModalEl) {\ncrashTermsModalEl.classList.add('is-scrolling');\nif (crashTermsModalEl._u1ScrollTimer) window.clearTimeout(crashTermsModalEl._u1ScrollTimer);\ncrashTermsModalEl._u1ScrollTimer = window.setTimeout(() => {\ncrashTermsModalEl.classList.remove('is-scrolling');\n}, 260);\n}\n}, { passive: true });\nwindow.addEventListener('keydown', (e) => {\nif (!crashTermsModalEl || crashTermsModalEl.hidden) return;\nif (e.key === 'Escape') closeCrashTermsModal();\n});\nconst visorBestModalEl = root.querySelector('[data-u1-visor-best-modal]');\nconst visorBestCloseEls = Array.from(root.querySelectorAll('[data-u1-visor-best-close]'));\nconst openVisorBestModal = () => {\nif (!visorBestModalEl) return;\n\ntry {\n  var availableVisors = new Set();\n  root.querySelectorAll('[data-u1-pdp-visor=\"true\"]').forEach(function(v) {\n    if (v.hidden || v.closest('[hidden]')) return;\n    var title = (v.getAttribute('data-u1-pdp-info-title') || '').trim().toLowerCase();\n    if (title) availableVisors.add(title);\n  });\n  if (availableVisors.size > 0) {\n    visorBestModalEl.querySelectorAll('[data-u1-visor-type]').forEach(function(col) {\n      var type = (col.getAttribute('data-u1-visor-type') || '').toLowerCase();\n\n      var visible = availableVisors.has(type) || (type === 'photochromic' && availableVisors.has('adaptive'));\n      col.hidden = !visible;\n    });\n  }\n} catch(_e) {}\nvisorBestModalEl.hidden = false;\nlockPageScroll(true);\nwindow.requestAnimationFrame(() => visorBestModalEl.classList.add('is-open'));\n};\nconst closeVisorBestModal = () => {\nif (!visorBestModalEl) return;\nvisorBestModalEl.classList.remove('is-open');\nlockPageScroll(false);\nwindow.setTimeout(() => { visorBestModalEl.hidden = true; }, 220);\n};\nvisorBestCloseEls.forEach((el) => el.addEventListener('click', closeVisorBestModal));\nwindow.addEventListener('keydown', (e) => {\nif (!visorBestModalEl || visorBestModalEl.hidden) return;\nif (e.key === 'Escape') closeVisorBestModal();\n});\nconst helpEls = Array.from(root.querySelectorAll('[data-u1-pdp-size-help], [data-u1-pdp-visor-help], [data-u1-pdp-crash-terms]'));\nhelpEls.forEach((el) => {\nel.addEventListener('click', (e) => {\ne.preventDefault();\nconst sizeHelp = el.dataset.u1PdpSizeHelp || '';\nconst visorHelp = el.dataset.u1PdpVisorHelp || '';\nconst isTerms = el.hasAttribute('data-u1-pdp-crash-terms');\nif (isTerms || sizeHelp === 'terms') {\nopenCrashTermsModal();\nreturn;\n}\nif (visorHelp) {\nif (visorHelp === 'best') {\nopenVisorBestModal();\nreturn;\n}\nopenInfoModalSimple({ title: 'Visor help', desc: '' });\nreturn;\n}\nif (sizeHelp === 'what') {\nopenSizeChartModal();\nreturn;\n}\nif (sizeHelp === 'measure') {\nopenMeasureModal();\nreturn;\n}\nopenInfoModalSimple({ title: 'Info', desc: '' });\n});\n});\nif (isCardInfoEnabled) {\nconst openInfoHoverEls = Array.from(root.querySelectorAll('.u1-pdp-card [data-u1-pdp-open-info]'));\nopenInfoHoverEls.forEach((el) => {\nconst card = el.closest('.u1-pdp-card');\nif (!card) return;\nconst clearOff = () => {\nif (card._u1InfoHoverOff) {\nwindow.clearTimeout(card._u1InfoHoverOff);\ncard._u1InfoHoverOff = null;\n}\n};\nel.addEventListener('mouseenter', () => {\nclearOff();\ncard.classList.add('is-open-info-hover');\n});\nel.addEventListener('mouseleave', () => {\nclearOff();\ncard._u1InfoHoverOff = window.setTimeout(() => {\ncard.classList.remove('is-open-info-hover');\n}, 12);\n});\n});\n}\nroot.addEventListener('click', (e) => {\nconst isLight = TEMPLATE === 'light';\nconst isAccessory = false;\nconst needsModel = isAccessory ? !state.model : false;\nconst needsColor = !isLight && HAS_COLOR_CHAPTER && !state.color;\nconst needsSize = (() => {\nif (isLight) return false;\nif (!HAS_CHAPTER_SIZE) return false;\nif (!HAS_SIZE_OPTION) return false;\nreturn !state.size;\n})();\nconst needsHelmetSize = (typeof HAS_HELMET_SIZE_CHAPTER !== 'undefined' && HAS_HELMET_SIZE_CHAPTER) && !!root.querySelector('[data-u1-pdp-helmet-size-picker]') && !state.helmetSize;\nconst requiredStep = (() => {\nif (isLight) {\nif (!state.variantId) return 'model';\nif (needsHelmetSize) return 'helmet_size';\nreturn null;\n}\nif (typeof SILICONE_INSERTS_PDP !== 'undefined' && SILICONE_INSERTS_PDP) {\nif (HAS_CHAPTER_SIZE && HAS_SIZE_OPTION && !state.size) return 'size';\nif (HAS_COLOR_CHAPTER && !state.color) return 'color';\nif (needsHelmetSize) return 'helmet_size';\nreturn null;\n}\nreturn needsModel ? 'model' : (needsColor ? 'color' : (needsSize ? 'size' : (needsHelmetSize ? 'helmet_size' : null)));\n})();\nconst isBlocked = isLight ? (!state.variantId || needsHelmetSize) : (needsModel || needsColor || needsSize || needsHelmetSize);\nif (!isBlocked) return;\nconst t = e.target;\nif (!t || !t.closest) return;\nif (t.closest('[data-u1-pdp-open-info]')) return;\nconst step = t.closest('[data-u1-pdp-step]');\nif (!step) return;\nconst stepName = step.dataset.u1PdpStep || '';\n// Permitir cambiar de producto/modelo antes de elegir color (helmet model switch)\nif (stepName === 'product_model') return;\n// Template light (ej. visors): se puede cambiar de card Model salvo que falte helmet size\nif (stepName === 'model' && !needsHelmetSize) return;\nif (stepName === 'size') return;\nif (stepName === 'sparky_color' || stepName === 'sparky_inserts') return;\nif (stepName === 'color' && !(typeof SILICONE_INSERTS_PDP !== 'undefined' && SILICONE_INSERTS_PDP && HAS_CHAPTER_SIZE && HAS_SIZE_OPTION && !state.size)) return;\nif (stepName === 'helmet_size') return;\nif (stepName === 'helmet_model') return;\nif (stepName === 'bundle') return;\n// Torch: permitir clicks en step accessories (cards Smart Light / Pro Dual) sin bloquear\nif (typeof TEMPLATE_RAW !== 'undefined' && TEMPLATE_RAW === 'torch' && stepName === 'accessories') return;\nif (stepName && requiredStep && stepName !== requiredStep && stepName !== 'description') {\ne.preventDefault();\ne.stopPropagation();\nconst toastHelmet = requiredStep === 'helmet_size' ? 'Please select a helmet size first.' : null;\nconst toastModelFirst = (requiredStep === 'model' || (typeof SILICONE_INSERTS_PDP !== 'undefined' && SILICONE_INSERTS_PDP && requiredStep === 'size'));\nshowToast(toastModelFirst ? 'Please select a model first.' : (requiredStep === 'color' ? 'Please select a color first.' : (toastHelmet || 'Please select a size.')));\n}\n}, true);\nconst colorPickerEl = root.querySelector('.u1-pdp-color__picker');\nlet hoverColorValue = null;\nconst getNearestColorValue = (clientX, clientY) => {\nif (!colorButtons || colorButtons.length === 0) return null;\nlet bestBtn = null;\nlet bestD = Infinity;\nfor (const b of colorButtons) {\nconst r = b.getBoundingClientRect();\nconst cx = r.left + r.width / 2;\nconst cy = r.top + r.height / 2;\nconst dx = clientX - cx;\nconst dy = clientY - cy;\nconst d = dx * dx + dy * dy;\nif (d < bestD) { bestD = d; bestBtn = b; }\n}\nreturn bestBtn ? (bestBtn.dataset.u1PdpValue || '') : null;\n};\nconst setHoverColor = (v) => {\nconst next = (v || '').toString();\nif (!next) return;\nif (hoverColorValue === next) return;\nhoverColorValue = next;\nsetColorDisplay(next, true);\n};\nconst clearHoverColor = () => {\nhoverColorValue = null;\nsetColorDisplay(state.color || null, true);\n};\nif (colorPickerEl) {\nconst moveEvt = ('PointerEvent' in window) ? 'pointermove' : 'mousemove';\ncolorPickerEl.addEventListener(moveEvt, (e) => {\nconst evt = e;\nconst targetBtn = evt.target && evt.target.closest ? evt.target.closest('[data-u1-pdp-color]') : null;\nif (targetBtn) {\nsetHoverColor(targetBtn.dataset.u1PdpValue || '');\nreturn;\n}\nif (typeof evt.clientX === 'number' && typeof evt.clientY === 'number') {\nsetHoverColor(getNearestColorValue(evt.clientX, evt.clientY));\n}\n}, { passive: true });\ncolorPickerEl.addEventListener('pointerleave', clearHoverColor);\ncolorPickerEl.addEventListener('mouseleave', clearHoverColor);\n}\ncolorButtons.forEach(btn => {\nbtn.addEventListener('click', () => {\nconst v = btn.dataset.u1PdpValue || null;\nif (btn.getAttribute('aria-disabled') === 'true') return;\nif (state.color && v && state.color === v) {\nwindow.setTimeout(() => {\ntry { window.scrollBy({ top: stickyAtcNudgePx, left: 0, behavior: 'smooth' }); } catch (_e) { window.scrollBy(0, stickyAtcNudgePx); }\n}, 0);\nreturn;\n}\nconst prevColor = state.color;\nstate.color = v;\nif (v) hasSelectedColor = true;\n// Recordar \u00FAltimo color elegido para este modelo\nif (IS_VARIANT_MODEL_MODE && state.variantModel && v) colorMemory.set(state.variantModel, v);\nsetSelectedButton(colorButtons, v);\nsetColorDisplay(v || '');\ntransitionGalleryToColor(v, { durationMs: 133, prevColor });\nwindow.setTimeout(function() { try { if (root._u1UpdateBundleGallery) root._u1UpdateBundleGallery(); } catch(_e) {} }, 50);\nupdateSizeAvailability();\nupdateVariant();\nif (stickyBottomEl) {\nshowStickyBottom();\nif (!hasUserScrolled && !didAutoNudge) {\ndidAutoNudge = true;\nwindow.setTimeout(() => {\ntry { window.scrollBy({ top: stickyAtcNudgePx, left: 0, behavior: 'smooth' }); } catch (_e) { window.scrollBy(0, stickyAtcNudgePx); }\n}, 0);\n}\n}\nupdateStickyChevron();\nupdateGalleryC1Variant();\nscheduleGalleryUxModeCheck();\nsyncModeOverlays();\n});\n});\nif (colorNameEl) {\ncolorNameEl.dataset.initialValue = PLACEHOLDER_COLOR_TEXT;\n}\nconst sizePickerEl = root.querySelector('[data-u1-pdp-size-picker]');\nconst sizePillEl = sizePickerEl ? sizePickerEl.querySelector('[data-u1-pdp-size-pill]') : null;\nconst sizeDividers = sizePickerEl ? Array.from(sizePickerEl.querySelectorAll('.u1-pdp-size__divider')) : [];\nlet hoverSizeIndex = null;\nconst getSizeIndex = (btn) => {\nif (!btn) return null;\nconst all = sizeButtons;\nconst idx = all.indexOf(btn);\nreturn idx >= 0 ? idx : null;\n};\nconst applySizeActiveIndex = () => {\nif (!sizePickerEl) return;\nconst selectedIdx = getSizeIndex(sizeButtons.find(b => b.classList.contains('is-selected')));\nif (selectedIdx === null || selectedIdx === undefined || selectedIdx < 0) {\nsizePickerEl.removeAttribute('data-u1-selected-index');\nreturn;\n}\nsizePickerEl.setAttribute('data-u1-selected-index', String(selectedIdx));\n};\nconst updateSizePill = () => {\nif (!sizePickerEl || !sizePillEl) return;\nconst selectedBtn = sizeButtons.find(b => b.classList.contains('is-selected'));\nif (!selectedBtn) {\nsizePillEl.classList.remove('is-visible');\nsizePillEl.style.width = '0px';\nsizePillEl.style.transform = 'translate3d(0,0,0)';\nreturn;\n}\nconst left = selectedBtn.offsetLeft;\nconst w = selectedBtn.offsetWidth;\nsizePillEl.style.width = `${w}px`;\nsizePillEl.style.transform = `translate3d(${left}px,0,0)`;\nsizePillEl.classList.add('is-visible');\n};\nif (sizePickerEl && 'ResizeObserver' in window) {\nconst ro = new ResizeObserver(() => updateSizePill());\nro.observe(sizePickerEl);\n}\nwindow.addEventListener('resize', () => updateSizePill(), { passive: true });\nsizeButtons.forEach(btn => {\nbtn.addEventListener('click', () => {\nif (TEMPLATE === 'light') return;\nconst requiresColorBeforeSize =\nHAS_COLOR_CHAPTER && HAS_COLOR_OPTION &&\n!(typeof SILICONE_INSERTS_PDP !== 'undefined' && SILICONE_INSERTS_PDP);\nif (requiresColorBeforeSize && !state.color) { showToast('Please select a color first.'); return; }\nif (btn.getAttribute('aria-disabled') === 'true') return;\nconst v = btn.dataset.u1PdpValue || null;\nif (state.size && v && state.size === v) {\nwindow.setTimeout(() => {\ntry { window.scrollBy({ top: stickyAtcNudgePx, left: 0, behavior: 'smooth' }); } catch (_e) { window.scrollBy(0, stickyAtcNudgePx); }\n}, 0);\nreturn;\n}\nstate.size = v;\nsetSelectedButton(sizeButtons, v);\nupdateStepMobileTitle('size', v || '');\napplySizeActiveIndex();\nupdateSizePill();\nupdateVariant();\nupdateColorAvailability();\nupdateSizeAvailability();\ntry {\nconst idNum = Number(state.variantId || 0) || 0;\nconst hasVG = (variantGalleryMap && variantGalleryMap.size > 0) || (variantFinalMap && variantFinalMap.size > 0);\nif (idNum && hasVG) {\nconst vImgs = getGalleryImagesForVariant(idNum);\nconst vFin = getFinalImageForVariant(idNum);\nif ((vImgs && vImgs.length) || (vFin && vFin.src)) {\ntransitionGalleryToVariant(idNum, { durationMs: 88 });\ntry { forceEndGalleryLoadingSoon(2600); } catch (_eL) {}\n}\n}\n} catch (_eG) {}\nsetColorDisplay(state.color);\nsyncAccessoriesToCurrentSize();\nsyncRestposGiftState({ openModalIfNeeded: true });\nupdateSummary();\n});\n});\nconst helmetSizePickerEl = root.querySelector('[data-u1-pdp-helmet-size-picker]');\nconst helmetSizePillEl = helmetSizePickerEl ? helmetSizePickerEl.querySelector('[data-u1-pdp-helmet-size-pill]') : null;\nconst getHelmetSizeIndex = (btn) => {\nif (!btn) return null;\nconst all = helmetSizeButtons;\nconst idx = all.indexOf(btn);\nreturn idx >= 0 ? idx : null;\n};\nconst applyHelmetSizeActiveIndex = () => {\nif (!helmetSizePickerEl) return;\nconst selectedIdx = getHelmetSizeIndex(helmetSizeButtons.find(b => b.classList.contains('is-selected')));\nif (selectedIdx === null || selectedIdx === undefined || selectedIdx < 0) {\nhelmetSizePickerEl.removeAttribute('data-u1-selected-index');\nreturn;\n}\nhelmetSizePickerEl.setAttribute('data-u1-selected-index', String(selectedIdx));\n};\nconst updateHelmetSizePill = () => {\nif (!helmetSizePickerEl || !helmetSizePillEl) return;\nconst selectedBtn = helmetSizeButtons.find(b => b.classList.contains('is-selected'));\nif (!selectedBtn) {\nhelmetSizePillEl.classList.remove('is-visible');\nhelmetSizePillEl.style.width = '0px';\nhelmetSizePillEl.style.transform = 'translate3d(0,0,0)';\nreturn;\n}\nconst left = selectedBtn.offsetLeft;\nconst w = selectedBtn.offsetWidth;\nhelmetSizePillEl.style.width = `${w}px`;\nhelmetSizePillEl.style.transform = `translate3d(${left}px,0,0)`;\nhelmetSizePillEl.classList.add('is-visible');\n};\nhelmetSizeButtons.forEach((btn) => {\nbtn.addEventListener('click', () => {\nconst v = btn.dataset.u1PdpValue || null;\nif (btn.getAttribute('aria-disabled') === 'true') return;\nstate.helmetSize = v;\nstate.size = v;\nsetSelectedButton(helmetSizeButtons, v);\napplyHelmetSizeActiveIndex();\nupdateHelmetSizePill();\ntry { setColorUnsetUI(); } catch (_eU) {}\nconst selectedModelBtn = modelButtons.find(b => b.classList.contains('is-selected'));\nif (selectedModelBtn && selectedModelBtn.dataset.u1PdpModelStyleFilter) {\n  applyModelSelection(selectedModelBtn);\n}\nsyncAccessoriesToCurrentSize();\nsyncRestposGiftState({ openModalIfNeeded: true });\nupdateSummary();\nupdateAtcAvailability();\nemitPdpSelection();\n});\n});\nconst helmetModelPillEl = root.querySelector('[data-u1-pdp-helmet-model-pill]');\nconst applyHelmetModelPill = () => {\nif (!helmetModelPillEl) return;\nconst sel = helmetModelButtons.find(b => b.classList.contains('is-selected'));\nif (!sel) { helmetModelPillEl.classList.remove('is-visible'); return; }\nconst parent = sel.parentElement;\nif (!parent) return;\nconst left = sel.offsetLeft;\nconst w = sel.offsetWidth;\nhelmetModelPillEl.style.width = `${w}px`;\nhelmetModelPillEl.style.transform = `translate3d(${left}px,0,0)`;\nhelmetModelPillEl.classList.add('is-visible');\n};\nhelmetModelButtons.forEach((btn) => {\nbtn.addEventListener('click', () => {\nconst v = btn.dataset.u1PdpHelmetModelValue || btn.dataset.u1PdpValue || null;\nif (!v) return;\nif (btn.getAttribute('aria-disabled') === 'true') return;\nstate.helmetModel = v;\nhelmetModelButtons.forEach(b => {\nb.classList.remove('is-selected');\nb.setAttribute('aria-pressed', 'false');\n});\nbtn.classList.add('is-selected');\nbtn.setAttribute('aria-pressed', 'true');\napplyHelmetModelPill();\nconst selectedModelBtn = modelButtons.find(b => b.classList.contains('is-selected'));\nif (selectedModelBtn && selectedModelBtn.dataset.u1PdpModelStyleFilter) {\napplyModelSelection(selectedModelBtn);\n}\nsyncAccessoriesToCurrentSize();\nupdateSummary();\nupdateAtcAvailability();\nemitPdpSelection();\n});\n});\napplyHelmetModelPill();\nconst defaultHelmetModelBtn = helmetModelButtons.find(b => b.classList.contains('is-selected'));\nif (defaultHelmetModelBtn) {\nstate.helmetModel = defaultHelmetModelBtn.dataset.u1PdpHelmetModelValue || defaultHelmetModelBtn.dataset.u1PdpValue || null;\n}\nconst accessoryBtns = Array.from(root.querySelectorAll('[data-u1-pdp-accessory]'));\nconst restposModalEl = root.querySelector('[data-u1-restpos-modal]');\nconst restposCloseEls = Array.from(root.querySelectorAll('[data-u1-restpos-close]'));\nconst restposColorsWrap = restposModalEl ? restposModalEl.querySelector('[data-u1-restpos-colors]') : null;\nconst restposColorNameEl = restposModalEl ? restposModalEl.querySelector('[data-u1-restpos-color-name]') : null;\nconst restposEnabled = !!(restposBottle && restposBottle.variants && Array.isArray(restposBottle.variants) && restposBottle.variants.length);\nconst restposDiscountCode = (restposConfig && restposConfig.discountCode) ? String(restposConfig.discountCode || '').trim() : '';\nconst restposDefaultColor = (restposConfig && restposConfig.defaultColor) ? String(restposConfig.defaultColor || '').trim() : '';\nconst restposSwatches = (restposBottle && restposBottle.colorSwatches) ? (restposBottle.colorSwatches || {}) : {};\nconst closeRestposModal = () => {\nif (!restposModalEl) return;\nstate.restposModalClosed = true;\ntry { restposModalEl.classList.remove('is-open'); } catch (_e0) {}\nwindow.setTimeout(() => { try { restposModalEl.hidden = true; } catch (_e1) {} }, 220);\n};\nconst openRestposModal = () => {\nif (!restposModalEl) return;\ntry { ensureRestposBottle(''); } catch (_e0) {}\nrestposModalEl.hidden = false;\nstate.restposModalShown = true;\nwindow.requestAnimationFrame(() => { try { restposModalEl.classList.add('is-open'); } catch (_e1) {} });\ntry { renderRestposColors(); } catch (_e) {}\n};\nrestposCloseEls.forEach((b) => { try { b.addEventListener('click', closeRestposModal); } catch (_e) {} });\ntry { document.addEventListener('keydown', (e) => { if (e && e.key === 'Escape' && restposModalEl && !restposModalEl.hidden) closeRestposModal(); }); } catch (_e) {}\n\nconst isLargeValue = (val) => {\nconst h = optionNameHandle(val);\nreturn h === 'large' || h === 'l';\n};\nconst hasSelectedVisor = () => {\ntry {\nif (accessoryBtns.some((b) => b && b.dataset && b.dataset.u1PdpVisor === 'true' && b.classList && b.classList.contains('is-selected'))) return true;\n// Template Light: visores via chapter Model\nif (typeof TEMPLATE !== 'undefined' && TEMPLATE === 'light' && Array.isArray(modelButtons) && modelButtons.length) {\nreturn modelButtons.some((b) => b && b.classList && b.classList.contains('is-selected'));\n}\nreturn false;\n} catch (_e) { return false; }\n};\nconst isVisorPdp = (() => {\nreturn false;\n})();\n\nconst bottleColorIndex = (() => {\nif (!restposEnabled) return -1;\ntry {\nconst opts = Array.isArray(restposBottle.options) ? restposBottle.options : [];\nconst idx = opts.findIndex((n) => optionNameHandle(n) === 'color');\nif (idx >= 0) return idx;\n// Fallback: si la bottle tiene 1 sola opci\u00F3n (muchas veces se llama \"Title\"),\n// tratamos option1 como \"color\" para que el picker no quede vac\u00EDo.\nif (opts.length === 1) return 0;\nreturn -1;\n} catch (_e) { return -1; }\n})();\nconst bottleVariantColorValue = (v) => {\nif (!v) return '';\nif (bottleColorIndex === 0 && typeof v.option1 !== 'undefined') return String(v.option1 || '');\nif (bottleColorIndex === 1 && typeof v.option2 !== 'undefined') return String(v.option2 || '');\nif (bottleColorIndex === 2 && typeof v.option3 !== 'undefined') return String(v.option3 || '');\n// Fallback: algunas serializaciones exponen `options: []` en vez de option1/2/3\ntry {\nif (bottleColorIndex >= 0 && Array.isArray(v.options) && typeof v.options[bottleColorIndex] !== 'undefined') return String(v.options[bottleColorIndex] || '');\n} catch (_e) {}\n// Fallback: 1 opcion (\"Title\") -> title/public_title\nif (bottleColorIndex === 0) {\nconst t = String(v.public_title || v.title || '').trim();\nif (!t || t.toLowerCase() === 'default title') return '';\nreturn t.includes(' / ') ? t.split(' / ')[0].trim() : t;\n}\nreturn '';\n};\nlet syncRestposOfferUi = () => {};\nconst getBottleVariantIdForColor = (colorValue) => {\nif (!restposEnabled) return 0;\nconst wanted = String(colorValue || '').trim();\nconst list = Array.isArray(restposBottle.variants) ? restposBottle.variants : [];\nif (!wanted) return Number((list.find(v => v && v.available) || list[0] || {}).id || 0) || 0;\nconst exactAvail = list.find(v => v && v.available && bottleVariantColorValue(v) === wanted);\nif (exactAvail && exactAvail.id) return Number(exactAvail.id) || 0;\nconst exact = list.find(v => v && bottleVariantColorValue(v) === wanted);\nif (exact && exact.id) return Number(exact.id) || 0;\nreturn Number((list.find(v => v && v.available) || list[0] || {}).id || 0) || 0;\n};\nconst getBottleVariantById = (idNum) => {\nif (!restposEnabled) return null;\nconst id = Number(idNum || 0) || 0;\nif (!id) return null;\nconst list = Array.isArray(restposBottle.variants) ? restposBottle.variants : [];\nreturn list.find(v => v && Number(v.id) === id) || null;\n};\nconst getBottleSwatchStyle = (colorValue) => {\nconst h = optionNameHandle(colorValue);\nif (!h) return '';\nconst s = restposSwatches && typeof restposSwatches[h] === 'string' ? restposSwatches[h] : '';\nreturn s ? String(s) : '';\n};\nconst getBottleInitialVariant = () => {\nif (!restposEnabled) return null;\nconst list = Array.isArray(restposBottle.variants) ? restposBottle.variants : [];\nreturn (list.find(v => v && v.available) || list[0] || null);\n};\nconst getBottleInitialColorValue = () => {\nconst v = getBottleInitialVariant();\nconst c = bottleVariantColorValue(v);\nreturn String(c || '').trim();\n};\nconst applyBottleSwatchToEl = (el, colorValue) => {\nif (!el) return;\nconst style = getBottleSwatchStyle(colorValue);\nif (!style) return;\ntry { el.style.cssText = `${style}`; } catch (_e) {}\n};\nconst ensureRestposBottle = (colorValue) => {\nif (!restposEnabled) return;\nconst raw = String(colorValue || '').trim();\nconst current = String(state.restposBottleColor || '').trim();\nconst first = getBottleInitialColorValue();\nconst color = raw || current || first || restposDefaultColor;\nconst vid = getBottleVariantIdForColor(color);\nstate.restposBottleVariantId = Number(vid || 0) || 0;\nstate.restposBottleColor = color || null;\ntry { syncRestposOfferUi(); } catch (_e) {}\n};\nconst renderRestposColors = () => {\nif (!restposEnabled || !restposColorsWrap) return;\ntry { restposColorsWrap.innerHTML = ''; } catch (_e) {}\nconst list = Array.isArray(restposBottle.variants) ? restposBottle.variants : [];\nconst seen = new Set();\nconst colors = [];\nlist.forEach((v) => {\nconst c = bottleVariantColorValue(v);\nif (!c) return;\nconst h = optionNameHandle(c);\nif (!h || seen.has(h)) return;\nseen.add(h);\ncolors.push(c);\n});\ncolors.forEach((c) => {\nconst btn = document.createElement('button');\nbtn.type = 'button';\nbtn.className = 'u1-pdp-color__swatch';\nbtn.dataset.u1RestposColor = c;\nbtn.dataset.u1PdpValue = c;\nbtn.setAttribute('aria-pressed', 'false');\nbtn.setAttribute('aria-label', String(c || ''));\nbtn.innerHTML = `<span class=\"u1-pdp-color__swatch-dot\" aria-hidden=\"true\"></span><span class=\"visually-hidden\">${String(c || '').replace(/</g,'&lt;').replace(/>/g,'&gt;')}</span>`;\nbtn.addEventListener('click', () => {\nensureRestposBottle(c);\nsetSelectedButton(Array.from(restposColorsWrap.querySelectorAll('[data-u1-restpos-color]')), c);\ntry {\nif (restposColorNameEl) {\nrestposColorNameEl.textContent = String(state.restposBottleColor || '');\nrestposColorNameEl.classList.toggle('is-placeholder', !String(state.restposBottleColor || '').trim());\n}\n} catch (_e3) {}\n});\nrestposColorsWrap.appendChild(btn);\ntry {\nconst dot = btn.querySelector('.u1-pdp-color__swatch-dot');\napplyBottleSwatchToEl(dot, c);\n} catch (_e4) {}\n});\nconst initial = state.restposBottleColor || getBottleInitialColorValue() || colors[0] || restposDefaultColor || '';\nif (initial) {\nensureRestposBottle(initial);\nsetSelectedButton(Array.from(restposColorsWrap.querySelectorAll('[data-u1-restpos-color]')), initial);\ntry {\nif (restposColorNameEl) {\nconst txt = String(state.restposBottleColor || initial || '');\nrestposColorNameEl.textContent = txt || PLACEHOLDER_COLOR_TEXT;\nrestposColorNameEl.classList.toggle('is-placeholder', !String(txt || '').trim());\n}\n} catch (_e5) {}\n}\n};\nrenderRestposColors();\n\nconst shouldApplyRestposGift = () => {\nif (!restposEnabled) return false;\nif (!restposDiscountCode) return false;\nconst largeFromProductSize = isLargeValue(state.size);\nconst largeFromHelmetFake = (typeof HAS_HELMET_SIZE_CHAPTER !== 'undefined' && HAS_HELMET_SIZE_CHAPTER && isLargeValue(state.helmetSize));\nlet largeFromLightVariant = false;\nif (typeof TEMPLATE !== 'undefined' && TEMPLATE === 'light' && state.variantId && typeof getVariantOptionByHandle === 'function' && typeof SIZE_HANDLE !== 'undefined' && SIZE_HANDLE && typeof HAS_SIZE_OPTION !== 'undefined' && HAS_SIZE_OPTION) {\ntry {\nconst vid = Number(state.variantId || 0) || 0;\nconst v = variants.find(vv => vv && Number(vv.id) === vid) || null;\nif (v) {\nconst sz = getVariantOptionByHandle(v, SIZE_HANDLE);\nlargeFromLightVariant = isLargeValue(sz);\n}\n} catch (_e) {}\n}\nreturn (largeFromProductSize || largeFromHelmetFake || largeFromLightVariant) && hasSelectedVisor();\n};\nconst syncRestposGiftState = ({ openModalIfNeeded } = { openModalIfNeeded: true }) => {\nif (!restposEnabled) return;\nif (!shouldApplyRestposGift()) {\nstate.restposBottleVariantId = 0;\nstate.restposBottleColor = null;\ntry { syncRestposOfferUi(); } catch (_e) {}\nreturn;\n}\nensureRestposBottle(state.restposBottleColor);\nif (openModalIfNeeded && restposModalEl && !state.restposModalShown) openRestposModal();\ntry { syncRestposOfferUi(); } catch (_e) {}\n};\n\n// --- Sticky offer UI (bottle) inside CTA\nconst offerEl = root.querySelector('[data-u1-pdp-offer]');\nconst offerImgEl = offerEl ? offerEl.querySelector('[data-u1-pdp-offer-img]') : null;\nconst offerTitleEl = offerEl ? offerEl.querySelector('[data-u1-pdp-offer-title]') : null;\nconst offerMsrpEl = offerEl ? offerEl.querySelector('[data-u1-pdp-offer-msrp]') : null;\nconst offerPickerEl = offerEl ? offerEl.querySelector('[data-u1-pdp-offer-picker]') : null;\nconst offerInfoBtn = offerEl ? offerEl.querySelector('[data-u1-pdp-offer-info]') : null;\n\nconst setOfferVisible = (on) => {\nif (!offerEl) return;\nif (on) {\nofferEl.hidden = false;\nofferEl.setAttribute('aria-hidden', 'false');\ntry { offerEl.classList.remove('is-visible'); } catch (_e0) {}\nwindow.requestAnimationFrame(() => { try { offerEl.classList.add('is-visible'); } catch (_e1) {} });\n} else {\ntry { offerEl.classList.remove('is-visible'); } catch (_e2) {}\nif (offerEl._u1HideTimer) window.clearTimeout(offerEl._u1HideTimer);\nofferEl._u1HideTimer = window.setTimeout(() => {\nofferEl.hidden = true;\nofferEl.setAttribute('aria-hidden', 'true');\n}, 240);\n}\nif (stickyBottomEl && stickyBottomEl.classList) stickyBottomEl.classList.toggle('has-offer', !!on);\nif (!on && offerPickerEl) { try { offerPickerEl.classList.remove('is-open'); } catch (_e) {} offerPickerEl.dataset.state = 'closed'; }\n};\nconst isOfferPickerOpen = () => !!(offerPickerEl && offerPickerEl.classList && offerPickerEl.classList.contains('is-open'));\nconst openOfferPicker = () => {\nif (!offerPickerEl) return;\ntry { offerPickerEl.classList.add('is-open'); } catch (_e) {}\nofferPickerEl.dataset.state = 'open';\ntry { renderOfferPicker(); } catch (_e2) {}\n};\nconst closeOfferPicker = () => {\nif (!offerPickerEl) return;\ntry { offerPickerEl.classList.remove('is-open'); } catch (_e) {}\nofferPickerEl.dataset.state = 'closed';\ntry { renderOfferPicker(); } catch (_e2) {}\n};\n\nconst getBottleColorEntries = () => {\nif (!restposEnabled) return [];\nconst list = Array.isArray(restposBottle.variants) ? restposBottle.variants : [];\nconst byHandle = new Map(); // h -> {value, available, variantId}\nlist.forEach((v) => {\nif (!v || !v.id) return;\nconst value = bottleVariantColorValue(v);\nif (!value) return;\nconst h = optionNameHandle(value);\nif (!h) return;\nconst available = (v.available === true);\nconst current = byHandle.get(h) || null;\nif (!current) {\nbyHandle.set(h, { value, available, variantId: Number(v.id) || 0 });\nreturn;\n}\n// Preferir available si existe\nif (!current.available && available) byHandle.set(h, { value, available, variantId: Number(v.id) || 0 });\n});\nreturn Array.from(byHandle.values());\n};\n\nconst renderOfferPicker = () => {\nif (!offerPickerEl) return;\ntry { offerPickerEl.innerHTML = ''; } catch (_e) {}\nconst entries0 = getBottleColorEntries();\nconst selH0 = optionNameHandle(state.restposBottleColor || restposDefaultColor || '');\nconst selected0 = entries0.find(x => optionNameHandle(x.value) === selH0) || null;\nconst selected = selected0 || (entries0.find(x => x && x.available) || entries0[0] || null);\nconst selH = optionNameHandle((selected && selected.value) || '');\nconst open = isOfferPickerOpen();\n// Closed: solo la opci\u00F3n seleccionada (para que nunca quede \u201Cvac\u00EDo\u201D)\n// Open: primero la seleccionada, luego el resto\nconst entries = open && selected ? [selected].concat(entries0.filter(x => optionNameHandle(x.value) !== selH)) : (selected ? [selected] : entries0.slice(0, 1));\n\nentries.forEach((it) => {\nconst btn = document.createElement('button');\nbtn.type = 'button';\nbtn.className = 'u1-pdp-minipicker2__opt';\nbtn.dataset.u1PdpOfferColor = String(it.value || '');\nbtn.innerHTML = `\n  <span class=\"u1-pdp-minipicker2__row\">\n    <span class=\"u1-pdp-minipicker2__dot\" aria-hidden=\"true\"><span class=\"u1-pdp-minipicker2__dot-inner\" aria-hidden=\"true\"></span></span>\n    <span class=\"u1-pdp-minipicker2__label\">${String(it.value || '').replace(/</g,'&lt;').replace(/>/g,'&gt;')}</span>\n    <span class=\"u1-pdp-minipicker2__icon\" aria-hidden=\"true\">\n    <svg viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\" focusable=\"false\">\n      <path d=\"M10 7.5L14.5 12L10 16.5\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n    </svg>\n  </span>\n  </span>\n`;\nbtn.setAttribute('aria-disabled', it.available ? 'false' : 'true');\nbtn.classList.toggle('is-selected', optionNameHandle(it.value) === selH);\nbtn.addEventListener('click', () => {\nif (!offerEl || offerEl.hidden) return;\nif (!isOfferPickerOpen()) { openOfferPicker(); return; }\nif (!it.available) return;\nconst clickedIsSelected = optionNameHandle(String(state.restposBottleColor || restposDefaultColor || '')) === optionNameHandle(it.value);\nif (!clickedIsSelected) ensureRestposBottle(it.value);\ntry { syncRestposOfferUi(); } catch (_e2) {}\ncloseOfferPicker();\n});\nofferPickerEl.appendChild(btn);\ntry {\nconst dotInner = btn.querySelector('.u1-pdp-minipicker2__dot-inner');\napplyBottleSwatchToEl(dotInner, it.value);\n} catch (_e3) {}\n});\n};\n\nconst syncOfferUi = () => {\nif (!offerEl || !restposEnabled) return;\n// Simplicidad > gating: el offer debe estar visible cuando aplica el gift,\n// independientemente de si el modal est\u00E1 abierto/cerrado.\nconst on = shouldApplyRestposGift() && !!state.restposBottleVariantId;\nif (!on) { setOfferVisible(false); return; }\nsetOfferVisible(true);\ntry {\nif (offerTitleEl) offerTitleEl.textContent = String(restposBottle.title || 'UNIT 1 Bottle');\nif (offerImgEl && restposBottle.imageSrc) { offerImgEl.src = String(restposBottle.imageSrc); offerImgEl.alt = String(restposBottle.imageAlt || restposBottle.title || ''); }\nconst list = Array.isArray(restposBottle.variants) ? restposBottle.variants : [];\nconst any = list && list.length ? (list.find(v => v && typeof v.price !== 'undefined') || list[0]) : null;\nconst msrpCents = any && typeof any.price !== 'undefined' ? Number(any.price) || 0 : 0;\nif (offerMsrpEl) offerMsrpEl.textContent = msrpCents ? formatMoneyCents(msrpCents) : '';\ntry {\nconst currentV = getBottleVariantById(state.restposBottleVariantId || 0);\nconst img =\ncurrentV && currentV.featured_image && currentV.featured_image.src ? String(currentV.featured_image.src) :\ncurrentV && currentV.featured_image ? String(currentV.featured_image) :\n'';\nif (offerImgEl && img) offerImgEl.src = img;\n} catch (_e2) {}\n} catch (_e) {}\nrenderOfferPicker();\n};\nsyncRestposOfferUi = syncOfferUi;\ntry { syncOfferUi(); } catch (_e0) {}\n\nif (offerInfoBtn && !offerInfoBtn._u1Bound) {\nofferInfoBtn._u1Bound = true;\nofferInfoBtn.addEventListener('click', () => {\ntry { openRestposModal(); } catch (_e) {}\n});\n}\n// Click en foto/t\u00EDtulo/free reabre el modal\nif (offerEl && !offerEl._u1OpenModalBound) {\nofferEl._u1OpenModalBound = true;\nofferEl.addEventListener('click', (e) => {\nif (!offerEl || offerEl.hidden) return;\nconst t = e && e.target && e.target.closest ? e.target : null;\nif (!t) return;\nif (t.closest('[data-u1-pdp-offer-open-modal]')) { try { openRestposModal(); } catch (_e2) {} }\n});\n}\n// Close on outside click\nif (offerEl && !offerEl._u1OutsideBound) {\nofferEl._u1OutsideBound = true;\ndocument.addEventListener('click', (e) => {\nif (!offerEl || offerEl.hidden) return;\nif (!offerPickerEl || !isOfferPickerOpen()) return;\nconst t = e && e.target && e.target.closest ? e.target : null;\nif (t && (t.closest('[data-u1-pdp-offer-minipicker]') || t.closest('[data-u1-pdp-offer-picker]'))) return;\ncloseOfferPicker();\n}, true);\n}\nconst featuresPanelEl = root.querySelector('[data-u1-pdp-features]');\nconst featureCountEl = featuresPanelEl ? featuresPanelEl.querySelector('[data-u1-pdp-features-count]') : null;\nconst featureItemEls = featuresPanelEl ? Array.from(featuresPanelEl.querySelectorAll('[data-u1-feature-key]')) : [];\nconst syncFeaturesUnlocked = () => {\nif (!featuresPanelEl || !featureItemEls.length) return;\nconst total = featureItemEls.length;\nconst unlocked = new Set();\ntry {\n\nconst _fbPack = root._packSelector && root._packSelector.getActiveBundlePack ? root._packSelector.getActiveBundlePack() : null;\nconst _normH = (h) => (h || '').toLowerCase().replace(/-\\d+$/, '');\nconst _fbHandles = new Set();\nif (_fbPack && Array.isArray(_fbPack.componentProducts)) {\n  _fbPack.componentProducts.forEach(cp => { if (cp && cp.handle) _fbHandles.add(_normH(cp.handle)); });\n}\naccessoryBtns.forEach((btn) => {\nif (!btn || !btn.dataset) return;\nif (btn.dataset.u1PdpVisor === 'true') return;\nconst _h = _normH(btn.dataset.u1PdpAccessoryHandle || '');\nconst _inBundle = _h && _fbHandles.has(_h);\nif (!btn.classList.contains('is-selected') && !_inBundle && !(btn.hasAttribute('data-u1-flash-gift-acc') && !root.classList.contains('is-fgift-off'))) return; // regalo del Flash deal: desbloqueado si la variante califica\nconst raw = String(btn.dataset.u1Features || '');\nif (!raw) return;\nraw.split('|').map(s => s.trim()).filter(Boolean).forEach((k) => unlocked.add(k));\n});\n} catch (_e) {}\nlet onCount = 0;\nfeatureItemEls.forEach((el) => {\nconst k = el && el.dataset ? String(el.dataset.u1FeatureKey || '') : '';\nconst on = !!(k && unlocked.has(k));\nif (on) onCount += 1;\ntry { el.classList.toggle('is-unlocked', on); } catch (_e) {}\n});\nif (featureCountEl) featureCountEl.textContent = `${onCount}/${total}`;\n};\nroot._u1SyncFeaturesUnlocked = syncFeaturesUnlocked;\nroot._u1UpdateAtcAvailability = updateAtcAvailability;\nroot._u1RenderMobileGalleries = renderMobileGalleries;\nconst parseVariantId = (raw) => {\nconst s = (raw || '').toString().trim();\nif (!s) return 0;\nif (/^\\d+$/.test(s)) return Number(s);\nconst m1 = s.match(/(\\d+)\\s*$/);\nif (m1) return Number(m1[1]);\nconst m2 = s.match(/[?&]variant=(\\d+)/);\nif (m2) return Number(m2[1]);\ntry {\nconst decoded = atob(s);\nconst m3 = decoded.match(/(\\d+)\\s*$/) || decoded.match(/ProductVariant\\/(\\d+)/);\nif (m3) return Number(m3[1]);\n} catch (_e) {}\nreturn 0;\n};\nconst applyFixedVariantToCard = (btn) => {\nif (!btn) return;\nconst handle = btn.dataset.u1PdpAccessoryHandle || '';\nif (!handle) return;\nconst raw = btn.dataset.u1PdpAccessoryVariantId || '';\nconst fixedId = parseVariantId(raw);\nif (!fixedId) return;\nconst item = accessoriesCatalog.find(p => p && p.handle === handle) || null;\nconst vv = item && Array.isArray(item.variants)\n? item.variants.find(v => v && Number(v.id) === Number(fixedId))\n: null;\nif (!vv) {\nbtn.dataset.u1PdpAccessoryVariantId = '';\nreturn;\n}\nbtn.dataset.u1PdpAccessoryVariantId = String(fixedId);\nconst titleEl = btn.querySelector('[data-u1-pdp-card-title]');\nconst priceEl = btn.querySelector('[data-u1-pdp-card-price]');\nconst imgEl = btn.querySelector('[data-u1-pdp-card-img]');\n/* Sin titulo de variante (producto simple), el nombre de la card manda sobre el del\n   producto: el Inside the Box compara ese texto contra su label exacto. */\nconst t = (vv.title && vv.title !== 'Default Title') ? String(vv.title) : String(btn.dataset.u1PdpInfoTitle || item.title || '');\nif (titleEl && t) titleEl.textContent = t;\nif (priceEl && btn.dataset.u1PdpInfoPrice) {\nif (priceEl.classList && priceEl.classList.contains('u1-pdp-card__price--discount')) {\nconst finalEl = priceEl.querySelector('.u1-pdp-card__price-final');\nif (finalEl) finalEl.textContent = btn.dataset.u1PdpInfoPrice;\n} else {\npriceEl.textContent = btn.dataset.u1PdpInfoPrice;\n}\n}\nconst imgSrc = vv.featured_image && (vv.featured_image.src || vv.featured_image.url) ? (vv.featured_image.src || vv.featured_image.url) : '';\nif (imgEl && imgSrc) imgEl.src = imgSrc;\nbtn.dataset.u1PdpInfoTitle = t || btn.dataset.u1PdpInfoTitle || '';\nif (imgSrc) btn.dataset.u1PdpInfoImg = imgSrc;\n};\naccessoryBtns.forEach(applyFixedVariantToCard);\nconst resolveAccessoryVariantId = ({ handle, size, preferSize, fixedVariantId, filterOptions }) => {\nif (fixedVariantId) {\nreturn Number(fixedVariantId);\n}\nconst item = accessoriesCatalog.find(p => p.handle === handle);\nif (!item || !Array.isArray(item.variants) || item.variants.length === 0) return null;\nlet candidates = item.variants;\nif (filterOptions && typeof filterOptions === 'object') {\nconst STYLE_ALIASES = { 'Photochromic': 'Adaptive' };\nconst filterValues = Object.values(filterOptions).filter(Boolean);\nif (filterValues.length) {\ncandidates = candidates.filter(v => {\nif (!v) return false;\nreturn filterValues.every(val => {\nconst aliases = [val];\nif (STYLE_ALIASES[val]) aliases.push(STYLE_ALIASES[val]);\nreturn aliases.some(a => v.option1 === a || v.option2 === a || v.option3 === a);\n});\n});\nif (!candidates.length) return null;\n}\n}\nif (preferSize && size) {\nlet v = candidates.find(vv =>\nvv && (vv.option1 === size || vv.option2 === size || vv.option3 === size)\n);\nif (!v) {\nconst norm = (s) => String(s || '').trim().toUpperCase();\nconst head = (s) => norm(s).charAt(0);\nconst wantedHead = head(size);\nv = candidates.find(vv => {\nif (!vv) return false;\nconst opts = [vv.option1, vv.option2, vv.option3].filter(Boolean).map(norm);\nreturn opts.some(o => head(o) === wantedHead);\n});\n}\nif (v && v.id) return v.id;\n}\nreturn candidates[0] && candidates[0].id ? candidates[0].id : null;\n};\nconst readAccessoryFilterOptions = (btn) => {\nif (!btn || !btn.dataset) return null;\nconst out = {};\nif (btn.dataset.u1PdpAccessoryFilterStyle) out.style = btn.dataset.u1PdpAccessoryFilterStyle;\nif (btn.dataset.u1PdpAccessoryFilterHelmet) out.helmet = btn.dataset.u1PdpAccessoryFilterHelmet;\n\nif (!out.helmet && btn.dataset.u1PdpVisor === 'true') {\n  if (state.helmetModel) out.helmet = state.helmetModel;\n  else {\n    const _ph = (mainProductHandle || '').split('-')[0].toUpperCase();\n    if (_ph) out.helmet = _ph;\n  }\n}\nreturn Object.keys(out).length ? out : null;\n};\nconst syncAccessoriesToCurrentSize = () => {\nconst currentSize = state.size || state.helmetSize || '';\nif (!currentSize || state.accessories.size === 0) return;\nfor (const [key, entry] of state.accessories.entries()) {\nif (!entry || !entry.syncSize) continue;\nif (entry.fixedVariantId) continue;\nconst handle = entry.handle || key;\nconst nextId = resolveAccessoryVariantId({ handle, size: currentSize, preferSize: true, filterOptions: entry.filterOptions || null });\nif (nextId && Number(nextId) !== Number(entry.variantId)) {\nstate.accessories.set(key, { ...entry, variantId: nextId });\n}\n}\n};\naccessoryBtns.forEach(btn => {\nbtn.addEventListener('click', () => {\nif (TEMPLATE === 'light') {\nif (!state.variantId) {\nif (!goToMissingSelection()) showToast('Please select a model first.');\nreturn;\n}\nconst needsHelmetLight = (typeof HAS_HELMET_SIZE_CHAPTER !== 'undefined' && HAS_HELMET_SIZE_CHAPTER) && !!root.querySelector('[data-u1-pdp-helmet-size-picker]') && !state.helmetSize;\nif (needsHelmetLight) {\nif (!goToMissingSelection()) showToast('Please select a helmet size first.');\nreturn;\n}\n} else {\nconst needsColor = HAS_COLOR_CHAPTER && !state.color;\nconst needsSize = HAS_CHAPTER_SIZE && HAS_SIZE_OPTION && !state.size;\nconst needsHelmetSize = (typeof HAS_HELMET_SIZE_CHAPTER !== 'undefined' && HAS_HELMET_SIZE_CHAPTER) && !!root.querySelector('[data-u1-pdp-helmet-size-picker]') && !state.helmetSize;\nif (needsColor || needsSize || needsHelmetSize) {\nif (!goToMissingSelection()) {\nif (typeof SILICONE_INSERTS_PDP !== 'undefined' && SILICONE_INSERTS_PDP) {\nshowToast(needsSize ? 'Please select a model first.' : (needsHelmetSize ? 'Please select a helmet size first.' : 'Please select a color first.'));\n} else {\nshowToast(needsColor ? 'Please select a color first.' : (needsHelmetSize ? 'Please select a helmet size first.' : 'Please select a size.'));\n}\n}\nreturn;\n}\n}\nif (btn.getAttribute('aria-disabled') === 'true') return;\nconst handle = btn.dataset.u1PdpAccessoryHandle;\nif (!handle) return;\nconst handleH = optionNameHandle(handle);\nconst isRemoteCard = handleH === remoteHandle && btn.dataset.u1PdpVisor !== 'true';\nconst torchVariantId = (TEMPLATE_RAW === 'torch' && torchLightHandles.length && torchLightHandles.includes(handleH))\n? parseVariantId(btn.dataset.u1PdpAccessoryVariantId || '')\n: 0;\nconst isTorchLightVariant =\n  TEMPLATE_RAW === 'torch' &&\n  (torchVariantId === 43829988884641 || torchVariantId === 43829988851873);\nconst key = isTorchLightVariant ? `torch:${torchVariantId}` : (btn.dataset.u1PdpAccessoryKey || handle);\nconst isOn = state.accessories.has(key);\nconst _isBundleActive = root.getAttribute('data-u1-pdp-bundle-active') === 'true';\nif (isOn) {\n\nif (btn.dataset.u1PdpVisor === 'true' && _isBundleActive) return;\nif (btn.dataset.u1PdpFree === 'true') return;\nstate.accessories.delete(key);\nbtn.classList.remove('is-selected');\nbtn.setAttribute('aria-pressed', 'false');\n} else {\n\nif (btn.dataset.u1PdpVisor === 'true' && _isBundleActive) {\n  var _allVisorBtns = root.querySelectorAll('[data-u1-pdp-visor=\"true\"]');\n  _allVisorBtns.forEach(function(vb) {\n    if (vb === btn) return;\n    var vKey = vb.dataset.u1PdpAccessoryKey || vb.dataset.u1PdpAccessoryHandle;\n    if (vKey && state.accessories.has(vKey)) {\n      state.accessories.delete(vKey);\n    }\n    vb.classList.remove('is-selected');\n    vb.setAttribute('aria-pressed', 'false');\n  });\n}\n\nconst syncSize = (() => {\n  if (btn.dataset.u1PdpAccessorySyncSize === 'true') return true;\n  try {\n    const catItem = (Array.isArray(accessoriesCatalog) ? accessoriesCatalog : []).find(p => p && p.handle === handle);\n    if (!catItem || !Array.isArray(catItem.variants) || catItem.variants.length < 2) return false;\n    const v1 = catItem.variants[0]; const v2 = catItem.variants[1];\n    if (!v1 || !v2) return false;\n    return (v1.option1 !== v2.option1 || v1.option2 !== v2.option2 || v1.option3 !== v2.option3);\n  } catch(_e) { return false; }\n})();\nlet fixedVariantId = parseVariantId(btn.dataset.u1PdpAccessoryVariantId || '');\nif (fixedVariantId) {\nconst item = accessoriesCatalog.find(p => p && p.handle === handle) || null;\nconst ok = !!(item && Array.isArray(item.variants) && item.variants.some(v => v && Number(v.id) === Number(fixedVariantId)));\nif (!ok) fixedVariantId = 0;\n}\nconst filterOptions = readAccessoryFilterOptions(btn);\nconst variantId = fixedVariantId || resolveAccessoryVariantId({ handle, size: state.size, preferSize: syncSize, fixedVariantId: 0, filterOptions });\nif (!variantId) return;\nconst meta = accessoryVariantMeta.get(Number(variantId)) || null;\nif (meta && meta.available === false) {\nshowToast('Out of stock');\nreturn;\n}\nconst discountCode = (btn.dataset.u1PdpDiscountCode || '').toString().trim();\nconst discountPercent = Number(btn.dataset.u1PdpDiscountPercent || 0) || 0;\nstate.accessories.set(key, { handle, variantId, qty: 1, syncSize, fixedVariantId: fixedVariantId || 0, discountCode, discountPercent, filterOptions: filterOptions || null });\nbtn.classList.add('is-selected');\nbtn.setAttribute('aria-pressed', 'true');\n}\nsyncRestposGiftState({ openModalIfNeeded: true });\nupdateSummary();\nupdateAtcAvailability();\ntry { syncFeaturesUnlocked(); } catch (_e0) {}\n\nif (btn.dataset.u1PdpVisor === 'true') {\n  window.setTimeout(function() { try { if (root._u1UpdateBundleGallery) root._u1UpdateBundleGallery(); } catch (_e) {} }, 50);\n}\nif (TEMPLATE !== 'light' && isDesktop && isRemoteCard) {\ntry { applyUxMode('accessories', { force: true }); } catch (_e) {}\n}\nif (btn.dataset.u1PdpVisor === 'true' && !root._u1VisorBaseReady && String(root._u1GalleryUxMode || '') === 'visor') {\ntry { applyUxMode('visor', { force: true }); } catch (_e) {}\n}\nif (TEMPLATE_RAW === 'torch' && torchLightHandles.length && torchLightHandles.includes(handleH)) {\nwindow.requestAnimationFrame(() => {\ntry { applyUxMode('accessories', { force: true }); } catch (_e) {}\nsyncModeOverlays();\n});\n} else {\nscheduleGalleryUxModeCheck();\nsyncModeOverlays();\n}\n});\n});\n// Auto-select free accessories on init\naccessoryBtns.forEach(btn => {\nif (!btn || btn.dataset.u1PdpFree !== 'true') return;\nif (btn.getAttribute('aria-disabled') === 'true') return;\nconst handle = btn.dataset.u1PdpAccessoryHandle;\nif (!handle) return;\nconst key = btn.dataset.u1PdpAccessoryKey || handle;\nif (state.accessories.has(key)) return;\n\nconst syncSize = (() => {\n  if (btn.dataset.u1PdpAccessorySyncSize === 'true') return true;\n  try {\n    const catItem = (Array.isArray(accessoriesCatalog) ? accessoriesCatalog : []).find(p => p && p.handle === handle);\n    if (!catItem || !Array.isArray(catItem.variants) || catItem.variants.length < 2) return false;\n    const v1 = catItem.variants[0]; const v2 = catItem.variants[1];\n    if (!v1 || !v2) return false;\n    return (v1.option1 !== v2.option1 || v1.option2 !== v2.option2 || v1.option3 !== v2.option3);\n  } catch(_e) { return false; }\n})();\nlet fixedVariantId = parseVariantId(btn.dataset.u1PdpAccessoryVariantId || '');\nconst filterOptions = readAccessoryFilterOptions(btn);\nconst variantId = fixedVariantId || resolveAccessoryVariantId({ handle, size: state.size, preferSize: syncSize, fixedVariantId: 0, filterOptions });\nif (!variantId) return;\nconst discountCode = (btn.dataset.u1PdpDiscountCode || '').toString().trim();\nconst discountPercent = Number(btn.dataset.u1PdpDiscountPercent || 0) || 0;\nstate.accessories.set(key, { handle, variantId, qty: 1, syncSize, fixedVariantId: fixedVariantId || 0, discountCode, discountPercent, filterOptions: filterOptions || null, free: true });\nbtn.classList.add('is-selected');\nbtn.setAttribute('aria-pressed', 'true');\n});\ntry { updateSummary(); } catch (_e) {}\ntry { syncFeaturesUnlocked(); } catch (_e) {}\nroot._u1GalleryUxMode = root._u1GalleryUxMode || 'normal';\nroot._u1VisorCycleCount = Number(root._u1VisorCycleCount || 0) || 0;\nconst visorStepEl = root.querySelector('[data-u1-pdp-step=\"visor\"]');\nconst accessoriesStepEl2 = root.querySelector('[data-u1-pdp-step=\"accessories\"]');\nconst crashStepEl2 = root.querySelector('[data-u1-pdp-step=\"crash\"]');\nconst visorBtns = accessoryBtns.filter(b => b && b.dataset && b.dataset.u1PdpVisor === 'true');\nconst visorBtnByKey = (() => {\nconst m = new Map();\ntry {\nvisorBtns.forEach((b) => {\nconst k = b.dataset.u1PdpAccessoryKey || b.dataset.u1PdpAccessoryHandle || '';\nif (k) m.set(String(k), b);\n});\n} catch (_e) {}\nreturn m;\n})();\nlet remoteHandle = optionNameHandle(root.dataset.u1PdpRemoteHandle || 'unit-1-remote');\nlet remoteBtn = accessoryBtns.find(b => b && b.dataset && optionNameHandle(b.dataset.u1PdpAccessoryHandle || '') === remoteHandle && b.dataset.u1PdpVisor !== 'true') || null;\nif (!remoteBtn) {\nremoteBtn = accessoryBtns.find((b) => {\nif (!b || !b.dataset) return false;\nif (b.dataset.u1PdpVisor === 'true') return false;\nconst t = `${b.dataset.u1PdpInfoTitle || ''} ${b.dataset.u1PdpAccessoryHandle || ''}`.toLowerCase();\nreturn t.includes('remote');\n}) || null;\nif (remoteBtn && remoteBtn.dataset) {\nconst inferred = optionNameHandle(remoteBtn.dataset.u1PdpAccessoryHandle || '');\nif (inferred) remoteHandle = inferred;\n}\n}\ntry {\nroot.dataset.u1RemoteHandleWanted = remoteHandle;\nroot.dataset.u1RemoteCardFound = remoteBtn ? '1' : '0';\nif (remoteBtn && remoteBtn.dataset) {\nroot.dataset.u1RemoteCardHandle = String(remoteBtn.dataset.u1PdpAccessoryHandle || '');\nroot.dataset.u1RemoteCardTitle = String(remoteBtn.dataset.u1PdpInfoTitle || '');\n}\n} catch (_e) {}\nconst torchLightHandles = (() => {\nconst raw = (root.dataset.u1PdpTorchLightHandles || 'smart-light,smart-light-pro-dual').toString().trim();\nif (!raw) return [];\nreturn raw.split(',').map(s => optionNameHandle(s.trim())).filter(Boolean);\n})();\nconst hasTorchLightCards = (() => {\ntry {\nif (!torchLightHandles.length || !Array.isArray(accessoryBtns)) return false;\nreturn accessoryBtns.some((b) => {\nif (!b || !b.dataset) return false;\n// En sparky puede haber cards \"smart light\" en el DOM pero ocultas/deshabilitadas.\n// Si existen pero no son visibles/activas, no queremos cargar im\u00E1genes de lights.\ntry {\nif (b.hidden) return false;\nconst ad = b.getAttribute && b.getAttribute('aria-disabled');\nif (String(ad || '') === 'true') return false;\nif (b.classList && b.classList.contains('is-disabled')) return false;\nif (b.closest && b.closest('.is-disabled')) return false;\n} catch (_e0) {}\nconst h = optionNameHandle(b.dataset.u1PdpAccessoryHandle || '');\nreturn !!(h && torchLightHandles.includes(h));\n});\n} catch (_e) {\nreturn false;\n}\n})();\n\n// Sparky: cuando el \"insert\" est\u00E1 seleccionado, no queremos que el UX trate\n// esa misma template (`torch`) como \"lights/remote\".\nconst getTorchInsertSelectedNow = () => {\ntry {\n// Usar el bot\u00F3n real del insert (insertBtn) evita depender del dataset\n// que puede no coincidir/estar disponible igual en todos los colores.\nif (!insertBtn) return false;\nif (insertBtn.hidden) return false;\ntry {\nconst ad = insertBtn.getAttribute && insertBtn.getAttribute('aria-disabled');\nif (String(ad || '') === 'true') return false;\n} catch (_e0) {}\nif (insertBtn.classList && insertBtn.classList.contains('is-disabled')) return false;\ntry {\nif (insertBtn.closest && insertBtn.closest('.is-disabled')) return false;\n} catch (_e1) {}\n  // Para Sparky: si el insert existe y est\u00E1 habilitado, NO queremos llamar a lights/remote,\n  // aunque el insert no est\u00E9 seleccionado todav\u00EDa (sucede en desktop al hacer entry).\n  return true;\n} catch (_e) {\nreturn false;\n}\n};\nconst getMediaColorValue = () => (state && state.color) ? state.color : (initialMediaColorValue || '');\nconst getMediaColorHandle = () => optionNameHandle(getMediaColorValue());\nconst getHelmetHandle = () => String(mainProductHandle || '').toString();\nconst getHelmetHandleCandidates = () => {\nconst raw = getHelmetHandle();\nconst out = [];\nconst add = (v) => {\nconst s = (v || '').toString().trim();\nif (!s) return;\nif (!out.includes(s)) out.push(s);\n};\nadd(raw);\nadd(raw.replace(/-smart-helmet$/i, ''));\nadd(raw.replace(/-mips-helmet$/i, '-mips'));\nadd(raw.replace(/-mips$/i, ''));\nadd(raw.replace(/-helmet$/i, ''));\nreturn out;\n};\nconst getVisorSelectionList = () => {\nconst out = []; // [{ variantId, handle, filterStyle }]\ntry {\nfor (const [key, entry] of state.accessories.entries()) {\nconst btnEl = visorBtnByKey.get(String(key)) || null;\nif (!btnEl) continue;\nconst handle = (entry && entry.handle) ? String(entry.handle) : String(btnEl.dataset.u1PdpAccessoryHandle || '');\nconst variantId = Number(entry && entry.variantId ? entry.variantId : 0) || parseVariantId(btnEl.dataset.u1PdpAccessoryVariantId || '');\nconst filterStyle = (entry && entry.filterOptions && entry.filterOptions.style) ? String(entry.filterOptions.style) : (btnEl.dataset.u1PdpAccessoryFilterStyle || '');\nif (variantId) out.push({ variantId, handle, filterStyle });\n}\n} catch (_e) {}\nreturn out;\n};\nconst isRemoteSelected = () => {\n// Sparky con insert elegido: remote/lights off.\ntry {\nif (TEMPLATE_RAW === 'torch' && getTorchInsertSelectedNow()) return false;\n} catch (_e0) {}\nif (\n  torchLightHandles.length &&\n  (\n    TEMPLATE_RAW === 'torch' ||\n    TEMPLATE === 'torch'\n  )\n) {\ntry {\nfor (const [_k, entry] of state.accessories.entries()) {\nconst h = entry && entry.handle ? optionNameHandle(entry.handle) : '';\nif (h && torchLightHandles.includes(h)) return true;\n}\n} catch (_e) {}\nreturn false;\n}\ntry {\nfor (const [_k, entry] of state.accessories.entries()) {\nconst h = entry && entry.handle ? optionNameHandle(entry.handle) : '';\nif (h && h === remoteHandle) return true;\n}\n} catch (_e) {}\ntry {\nconst _bp = root._packSelector && root._packSelector.getActiveBundlePack ? root._packSelector.getActiveBundlePack() : null;\nif (_bp && !_bp.isSolo && (_bp.componentProducts || []).some(c => c && optionNameHandle(c.handle || '') === remoteHandle)) return true;\n} catch (_eB) {}\nreturn false;\n};\nconst VISOR_OVERLAY_COLOR_INDEPENDENT = String(root.dataset.u1PdpVisorColorIndependent || '') === '1';\nconst VISOR_OVERLAY_ALIAS = { 'adaptive': 'photochromic' };\nconst visorOverlaySrcFor = ({ variantId, filterStyle } = {}) => {\nconst helmet = getHelmetHandle();\nif (!helmet) return '';\nlet token = filterStyle ? optionNameHandle(filterStyle) : String(Number(variantId || 0) || 0);\nif (VISOR_OVERLAY_ALIAS[token]) token = VISOR_OVERLAY_ALIAS[token];\nif (!token || token === '0') return '';\nif (VISOR_OVERLAY_COLOR_INDEPENDENT) {\nreturn filesUrlFor(`pdp-visor-${helmet}-${token}.png`);\n}\nconst colorH = getMediaColorHandle();\nif (!colorH) return '';\nreturn filesUrlFor(`pdp-visor-${helmet}-${colorH}-${token}.png`);\n};\nconst remoteResolved = new Map(); // key -> src\nconst remoteResolving = new Set(); // key\nconst remoteSrcFor = (kind) => {\nif (\n  torchLightHandles.length &&\n  (\n    TEMPLATE_RAW === 'torch' ||\n    TEMPLATE === 'torch'\n  )\n) {\nconst colorH = getMediaColorHandle();\nconst k = (kind === 'on') ? 'on' : 'off';\nif (!colorH) return '';\nconst cacheKey = `pdp-light-torch-${colorH}-${k}`;\nconst cached = remoteResolved.get(cacheKey);\nif (cached) return cached;\nconst exts = ['jpg', 'JPG', 'jpeg', 'JPEG', 'webp', 'WEBP', 'png', 'PNG'];\nconst candidates = [];\nexts.forEach((ext) => {\nconst name = `pdp-light-torch-${colorH}-${k}.${ext}`;\ntry { candidates.push(filesUrlFor(name)); } catch (_e) {}\ntry { candidates.push(assetUrlFor(name)); } catch (_e2) {}\n});\nconst uniq = Array.from(new Set(candidates.filter(Boolean)));\nif (!uniq.length) return '';\nif (!remoteResolving.has(cacheKey)) {\nremoteResolving.add(cacheKey);\n(async () => {\ntry {\nfor (const src of uniq) {\nconst ok = await u1ImgExists.check(src);\nif (ok) {\nremoteResolved.set(cacheKey, src);\ntry { root._u1RequestAccessoriesBaseRefresh?.(); } catch (_e2) {}\ntry { root._u1RequestSyncModeOverlays?.(); } catch (_e3) {}\ntry { root._u1RequestRemoteHoverPreview?.(); } catch (_e4) {}\nbreak;\n}\n}\n} catch (_e) {}\nremoteResolving.delete(cacheKey);\n})();\n}\n// Igual que la rama \"remote\": devolvemos un guess inmediato para que la UX\n// no se quede sin imagen; la verificaci\u00F3n as\u00EDncrona terminar\u00E1 con el src correcto en cach\u00E9.\nreturn uniq[0] || '';\n}\nconst helmets = getHelmetHandleCandidates();\nconst colorH = getMediaColorHandle();\nconst k = (kind === 'on') ? 'on' : 'off';\nif (!helmets.length || !colorH) return '';\nconst cacheKey = `pdp-remote-${helmets[0]}-${colorH}-${k}`;\nconst cached = remoteResolved.get(cacheKey);\nif (cached) return cached;\ntry {\nroot.dataset.u1RemoteHelmet = helmets[0] || '';\nroot.dataset.u1RemoteHelmetCandidates = helmets.join(',');\nroot.dataset.u1RemoteColor = colorH;\n} catch (_e0) {}\nconst candidates = (() => {\nconst exts = ['jpg', 'JPG', 'jpeg', 'JPEG', 'webp', 'WEBP', 'png', 'PNG'];\nconst out = [];\nexts.forEach((ext) => {\nhelmets.forEach((helmet) => {\nconst base = `pdp-remote-${helmet}-${colorH}-${k}`;\nconst name = `${base}.${ext}`;\ntry { out.push(filesUrlFor(name)); } catch (_e) {}\ntry { out.push(assetUrlFor(name)); } catch (_e2) {}\n});\n});\nreturn Array.from(new Set(out.filter(Boolean)));\n})();\nif (!candidates.length) return '';\nif (!remoteResolving.has(cacheKey)) {\nremoteResolving.add(cacheKey);\n(async () => {\ntry {\ntry {\nif (k === 'off') root.dataset.u1RemoteOffGuess = candidates[0] || '';\nelse root.dataset.u1RemoteOnGuess = candidates[0] || '';\n} catch (_eD) {}\nfor (const src of candidates) {\nconst ok = await u1ImgExists.check(src);\nif (ok) {\nremoteResolved.set(cacheKey, src);\ntry {\nif (k === 'off') root.dataset.u1RemoteOffResolved = src;\nelse root.dataset.u1RemoteOnResolved = src;\n} catch (_eD2) {}\ntry { root._u1RequestAccessoriesBaseRefresh?.(); } catch (_e2) {}\ntry { root._u1RequestSyncModeOverlays?.(); } catch (_e3) {}\ntry { root._u1RequestRemoteHoverPreview?.(); } catch (_e4) {}\nbreak;\n}\n}\n} catch (_e) {}\nremoteResolving.delete(cacheKey);\n})();\n}\nreturn candidates[0] || '';\n};\nconst remoteBaseOffSrcFor = () => remoteSrcFor('off');\nconst remoteOnSrcFor = () => remoteSrcFor('on');\nconst remoteMipsBadgeSrcFor = () => {\nconst enabled = String(root.dataset.u1PdpRemoteMipsBadgeEnabled || '') === '1';\nconst isMips = String(root.dataset.u1PdpIsMips || '') === '1';\nif (!enabled || !isMips) return '';\nconst helmets = getHelmetHandleCandidates();\nconst baseHelmet = helmets.find(h => h && !/mips/i.test(String(h))) || helmets[0] || '';\nif (!baseHelmet) return '';\nconst key = `pdp-remote-${baseHelmet}-mips-badge`;\nconst cached = galleryRemoteMipsBadge && galleryRemoteMipsBadge.resolved ? galleryRemoteMipsBadge.resolved.get(key) : null;\nif (typeof cached === 'string') return cached;\nif (galleryRemoteMipsBadge && galleryRemoteMipsBadge.resolving && galleryRemoteMipsBadge.resolving.has(key)) return '';\ntry { galleryRemoteMipsBadge.resolving.add(key); } catch (_e0) {}\n\n// Optimistic guess + async verify (handles .PNG / webp / etc)\nlet guess = '';\ntry { guess = filesUrlFor(`${key}.png`); } catch (_e1) {}\nif (!guess) { try { guess = assetUrlFor(`${key}.png`); } catch (_e2) {} }\ntry { galleryRemoteMipsBadge.resolved.set(key, guess || ''); } catch (_e3) {}\ntry { if (guess) u1ImgPreload.preload(guess); } catch (_e4) {}\ntry { syncRemoteMipsBadgeOverlay(); } catch (_e5) {}\ntry { renderMobileGalleries(); } catch (_e6) {}\n\n(async () => {\nlet found = '';\ntry {\nconst exts = ['png', 'PNG', 'webp', 'WEBP', 'jpg', 'JPG', 'jpeg', 'JPEG'];\nconst candidates = [];\nfor (const ext of exts) {\nconst name = `${key}.${ext}`;\ntry { candidates.push(filesUrlFor(name)); } catch (_e1b) {}\ntry { candidates.push(assetUrlFor(name)); } catch (_e2b) {}\n}\nfor (const src of Array.from(new Set(candidates.filter(Boolean)))) {\n// eslint-disable-next-line no-await-in-loop\nconst ok = await u1ImgExists.check(src);\nif (ok) { found = src; break; }\n}\n} catch (_e3b) {}\ntry { galleryRemoteMipsBadge.resolved.set(key, found || ''); } catch (_e4b) {}\ntry { galleryRemoteMipsBadge.resolving.delete(key); } catch (_e5b) {}\ntry { syncRemoteMipsBadgeOverlay(); } catch (_e6b) {}\ntry { renderMobileGalleries(); } catch (_e7b) {}\n})();\n\nreturn guess || '';\n};\n/* Badge remoto: solo sobre la vista trasera (archivo con \"remote\") */\nconst isRemoteViewShowing = () => {\ntry {\nconst imgs = Array.from(root.querySelectorAll('[data-u1-pdp-gallery-viewport] .u1-pdp-customizer__gallery-slide img.u1-pdp-customizer__gallery-img'));\nif (!imgs.length) return false;\nconst cur = imgs[Number(state.galleryIndex || 0)] || imgs[0];\nconst src = cur ? String(cur.currentSrc || cur.src || '') : '';\nreturn /remote/i.test(src);\n} catch (_e) { return false; }\n};\nconst syncRemoteMipsBadgeOverlay = () => {\nconst img = galleryRemoteMipsBadge && galleryRemoteMipsBadge.img ? galleryRemoteMipsBadge.img : null;\nif (!img) return;\nif (root._u1GalleryUxMode !== 'accessories' || !isRemoteViewShowing()) {\nimg.hidden = true;\nimg.setAttribute('aria-hidden', 'true');\ntry { img.style.display = 'none'; } catch (_eD0) {}\ntry { img.removeAttribute('src'); } catch (_e0) {}\nreturn;\n}\nconst src = remoteMipsBadgeSrcFor();\nif (!src) {\nimg.hidden = true;\nimg.setAttribute('aria-hidden', 'true');\ntry { img.style.display = 'none'; } catch (_eD1) {}\ntry { img.removeAttribute('src'); } catch (_e1) {}\nreturn;\n}\nimg.hidden = false;\nimg.setAttribute('aria-hidden', 'false');\ntry { img.style.display = ''; } catch (_eD2) {}\nif (String(img.getAttribute('src') || '') !== String(src)) img.setAttribute('src', String(src));\n};\nconst initMipsBadgeOverlay = () => {\nconst enabled = String(root.dataset.u1PdpMipsBadgeEnabled || '') === '1';\nconst isMips = String(root.dataset.u1PdpIsMips || '') === '1';\nif (!enabled || !isMips) return;\nconst rawName = String(root.dataset.u1PdpMipsBadgeFile || '').trim();\nconst names = rawName ? [rawName] : ['pdp-mips-badge.png', 'mips-badge.png', 'mips.png'];\nconst cands = [];\nnames.forEach((name) => {\ntry { cands.push(filesUrlFor(name)); } catch (_e) {}\ntry { cands.push(assetUrlFor(name)); } catch (_e2) {}\n});\nconst uniq = Array.from(new Set(cands.filter(Boolean)));\nif (!uniq.length) return;\n(async () => {\ntry {\nfor (const src of uniq) {\nconst ok = await u1ImgExists.check(src);\nif (ok) {\ntry { root.style.setProperty('--u1-pdp-mips-badge-url', `url(\"${src}\")`); } catch (_eS) {}\ntry { root.dataset.u1PdpMipsBadgeReady = '1'; } catch (_eD) {}\nbreak;\n}\n}\n} catch (_e) {}\n})();\n};\ninitMipsBadgeOverlay();\nconst preloadVisorOverlaysForCurrentColor = () => {\ntry {\nconst srcs = visorBtns\n.map((b) => {\nconst vid = b && b.dataset ? parseVariantId(b.dataset.u1PdpAccessoryVariantId || '') : 0;\nconst fs = b && b.dataset ? (b.dataset.u1PdpAccessoryFilterStyle || '') : '';\nreturn visorOverlaySrcFor({ variantId: vid, filterStyle: fs });\n})\n.filter(Boolean);\nsrcs.forEach(s => u1ImgPreload.preload(s));\n} catch (_e) {}\n};\n// Preloadea slide-2 (visor base) de todos los colores con baja prioridad,\n// as\u00ED cuando el usuario llega a la secci\u00F3n visor la imagen ya est\u00E1 en cach\u00E9.\nconst preloadAllVisorBaseImages = () => {\ntry {\nif (!hasCustomGallery || !colorGalleryMap || !colorGalleryMap.size) return;\ncolorGalleryMap.forEach((imgs) => {\nconst base = (imgs && imgs.length >= 2) ? imgs[1] : (imgs && imgs.length ? imgs[0] : null);\nif (base && base.src) u1ImgPreload.preload(String(base.src));\n});\n} catch (_e) {}\n};\nconst preloadRemoteForCurrentColor = () => {\ntry {\nif (TEMPLATE_RAW === 'torch' && getTorchInsertSelectedNow()) return;\nconst offSrc = remoteBaseOffSrcFor();\nconst onSrc = remoteOnSrcFor();\nif (offSrc) u1ImgPreload.preload(offSrc);\nif (onSrc) u1ImgPreload.preload(onSrc);\n} catch (_e) {}\n};\nlet visorInView = false;\nlet accessoriesInView = false;\nlet ioModes = null;\nconst setupModeObservers = () => {\nvisorInView = false;\naccessoriesInView = false;\nif (ioModes) { try { ioModes.disconnect(); } catch (_e) {} }\nioModes = null;\nif (!isDesktop) return;\nif (!('IntersectionObserver' in window)) return;\nconst targets = [];\nif (visorStepEl) targets.push(visorStepEl);\nif (accessoriesStepEl2) targets.push(accessoriesStepEl2);\nif (!targets.length) return;\nioModes = new IntersectionObserver((entries) => {\nentries.forEach((e) => {\nif (!e || !e.target) return;\nif (visorStepEl && e.target === visorStepEl) visorInView = !!e.isIntersecting;\nif (accessoriesStepEl2 && e.target === accessoriesStepEl2) accessoriesInView = !!e.isIntersecting;\n});\nscheduleGalleryUxModeCheck();\n}, { threshold: 0.25 });\ntargets.forEach(t => ioModes.observe(t));\n// Observer anticipado: precarga la imagen base del visor cuando la secci\u00F3n\n// est\u00E1 a 600px de entrar en pantalla (mucho antes del threshold de activaci\u00F3n).\nif (visorStepEl && 'IntersectionObserver' in window) {\nlet visorBasePreloaded = false;\nconst ioEarly = new IntersectionObserver((entries) => {\nentries.forEach((e) => {\nif (!e.isIntersecting || visorBasePreloaded) return;\nvisorBasePreloaded = true;\ntry { preloadVisorOverlaysForCurrentColor(); } catch (_e) {}\ntry { preloadAllVisorBaseImages(); } catch (_e) {}\nioEarly.disconnect();\n});\n}, { rootMargin: '0px 0px 600px 0px', threshold: 0 });\nioEarly.observe(visorStepEl);\n}\n};\nsetupModeObservers();\nif (desktopMq) {\ntry {\ndesktopMq.addEventListener('change', () => setupModeObservers());\n} catch (_e) {\ntry { desktopMq.addListener(() => setupModeObservers()); } catch (_e2) {}\n}\n}\nlet visorCycleIdx = 0;\nconst clearModeOverlays = () => {\nif (galleryModeLayers && galleryModeLayers.preview) setModeLayerVisible(galleryModeLayers.preview, false);\nif (galleryModeLayers && galleryModeLayers.active) setModeLayerVisible(galleryModeLayers.active, false);\n};\nconst setBaseToNormalGallery = () => {\nif (galleryMode === 'final') return;\nif (!hasCustomGallery) return;\nconst imgs = getGalleryImagesForColor(getMediaColorValue());\nif (!imgs || !imgs.length) return;\nconst first = imgs[0] || null;\nif (first && first.type === 'video') setGalleryToImages(imgs, { preserveIndex: false });\nelse crossfadeGalleryToImages(imgs, { durationMs: 133 });\nsetGallerySwipeEnabled(true);\n};\nconst setBaseToVisorView = () => {\nclearModeOverlays();\nroot._u1VisorBaseReady = false;\nif (hasCustomGallery) {\nconst imgs = getGalleryImagesForColor(getMediaColorValue());\nconst base = (imgs && imgs.length >= 2) ? imgs[1] : ((imgs && imgs.length) ? imgs[0] : null);\nif (base && base.src) {\nconst baseImg = { src: String(base.src), alt: String(base.alt || ''), lifestyle: !!base.lifestyle };\n// Bloquea la galer\u00EDa al frame del visor INMEDIATAMENTE (s\u00EDncrono) \u2014 sin esto,\n// la galer\u00EDa puede seguir teniendo N slides si crossfadeGalleryToImages es cancelado\n// antes de que doSwap corra (race condition con transitionGalleryToColor).\nsetGalleryToImages([baseImg], { preserveIndex: false, eagerFirst: true });\ncrossfadeGalleryToImages(\n[baseImg],\n{\ndurationMs: 133,\nonOverlayReady: ({ token: readyToken } = {}) => {\nif (String(root._u1GalleryUxMode || '') !== 'visor') return;\n// Verifica que el token no haya cambiado entre startFade y onOverlayReady\nif (readyToken && String(root._u1GalleryToken) !== String(readyToken)) {\nreturn;\n}\nroot._u1VisorBaseReady = true;\ntry { syncVisorOverlay(); } catch (_e) {}\n}\n}\n);\n} else {\nwindow.requestAnimationFrame(() => { root._u1VisorBaseReady = true; });\n}\n} else if (slides && slides.length >= 2) {\nstate.galleryIndex = 1;\nscrollGalleryToIndex(1);\nwindow.requestAnimationFrame(() => {\nif (String(root._u1GalleryUxMode || '') !== 'visor') return;\nroot._u1VisorBaseReady = true;\ntry { syncVisorOverlay(); } catch (_e) {}\n});\n}\nsetGallerySwipeEnabled(false);\n};\nconst setBaseToAccessoriesView = () => {\nclearModeOverlays();\ntry {\nif (TEMPLATE_RAW === 'torch' && getTorchInsertSelectedNow()) return;\n} catch (_e0) {}\nconst offSrc = remoteBaseOffSrcFor();\nif (!offSrc) { var _ovA = _bundleOverlayEl(); if (_ovA) _ovA.style.opacity = '1'; return; }\ntry {\nif (root._u1RemoteBaseLoadingEnd) { root._u1RemoteBaseLoadingEnd(); root._u1RemoteBaseLoadingEnd = null; }\n} catch (_e3) {}\ntry { if (galleryTrack) galleryTrack.style.opacity = ''; } catch (_e4) {}\ncrossfadeGalleryToImages([{ src: offSrc, alt: (TEMPLATE_RAW === 'torch' ? 'Torch backpack with Smart Light' : 'Smart helmet rear view with Remote control'), lifestyle: false }], { durationMs: 133 });\nsetGallerySwipeEnabled(false);\n// Re-sync del badge MIPS remoto cuando la base ya es la vista del remote\nwindow.setTimeout(() => { try { syncRemoteMipsBadgeOverlay(); } catch (_eRB) {} }, 200);\n};\nroot._u1RequestAccessoriesBaseRefresh = () => {\ntry {\nif (root._u1GalleryUxMode === 'accessories') setBaseToAccessoriesView();\n} catch (_e) {}\n};\nconst getChaptersGapPx = () => {\ntry {\nconst raw = String(getComputedStyle(root).getPropertyValue('--u1-pdp-chapters-gap') || '').trim();\nconst n = Number.parseFloat(raw || '0');\nreturn Number.isFinite(n) ? n : 0;\n} catch (_e) { return 0; }\n};\nconst getUxBandHalfHeightPx = () => {\nconst gap = getChaptersGapPx();\nconst derived = gap ? (gap / 2 + 40) : 160;\nreturn Math.max(120, Math.min(280, derived));\n};\nconst isStepActiveBand = (el, { centerRatio = 0.55, halfHeightPx = 160 } = { centerRatio: 0.55, halfHeightPx: 160 }) => {\nif (!el || !el.getBoundingClientRect) return false;\nconst r = el.getBoundingClientRect();\nconst ratio = Math.max(0.05, Math.min(0.95, Number(centerRatio || 0.55) || 0.55));\nconst y = window.innerHeight * ratio;\nconst hh = Math.max(40, Number(halfHeightPx || 160) || 160);\nconst top = y - hh;\nconst bottom = y + hh;\nreturn (r.bottom >= top) && (r.top <= bottom);\n};\nconst stepDistanceToY = (el, y) => {\nif (!el || !el.getBoundingClientRect) return Infinity;\nconst r = el.getBoundingClientRect();\nconst mid = (r.top + r.bottom) / 2;\nreturn Math.abs(mid - y);\n};\nconst isStepActiveLine = (el, y) => {\nif (!el || !el.getBoundingClientRect) return false;\nconst r = el.getBoundingClientRect();\nreturn (r.top <= y) && (r.bottom >= y);\n};\nconst _initSlidesReady = !!(slides && slides.length >= 2);\nconst computeUxMode = () => {\nif (!isDesktop) return 'normal';\nif (TEMPLATE === 'light') return 'normal';\n\nif (root._u1BundleGalleryActive) return 'normal';\nif (root._u1FinalLatched) return 'final';\n\nconst _reqsDone = _initSlidesReady || !(\n  (HAS_COLOR_CHAPTER && HAS_COLOR_OPTION && !state.color) ||\n  (HAS_CHAPTER_SIZE && HAS_SIZE_OPTION && !state.size)\n);\nconst y = window.innerHeight * 0.5;\nconst crashIsCentered = isStepActiveLine(crashStepEl2, y);\nif (crashIsCentered) return (galleryMode === 'final') ? 'final' : 'normal';\n\nconst candidates = [\n{ el: colorStepEl,        mode: 'normal' },\n{ el: sizeStepEl,         mode: 'normal' },\n{ el: visorStepEl,        mode: _reqsDone ? 'visor' : 'normal' },\n{ el: accessoriesStepEl2, mode: _reqsDone ? 'accessories' : 'normal' },\n].filter(function(c) { return c.el; })\n .map(function(c) { return { mode: c.mode, d: stepDistanceToY(c.el, y) }; })\n .sort(function(a, b) { return a.d - b.d; });\nif (candidates.length && candidates[0].d !== Infinity) return candidates[0].mode;\nif (galleryMode === 'final') return 'final';\nreturn 'normal';\n};\nconst applyUxMode = (nextMode, { force } = { force: false }) => {\nconst prev = String(root._u1GalleryUxMode || 'normal');\nlet next = String(nextMode || 'normal');\nif (TEMPLATE === 'light' && next !== 'normal') next = 'normal';\nif (!force && prev === next) return;\nif (prev === 'accessories' && next !== 'accessories') {\ntry {\nif (root._u1RemoteBaseLoadingEnd) { root._u1RemoteBaseLoadingEnd(); root._u1RemoteBaseLoadingEnd = null; }\n} catch (_e) {}\ntry { if (galleryTrack) galleryTrack.style.opacity = ''; } catch (_e2) {}\n} else if (next !== 'accessories') {\ntry {\nif (root._u1RemoteBaseLoadingEnd) { root._u1RemoteBaseLoadingEnd(); root._u1RemoteBaseLoadingEnd = null; }\n} catch (_e3) {}\ntry { if (galleryTrack) galleryTrack.style.opacity = ''; } catch (_e4) {}\n}\nroot._u1GalleryUxMode = next;\nroot.setAttribute('data-u1-gallery-ux-mode', next);\n\nif (root._u1BundleGalleryActive) {\n  if (next === 'visor' || next === 'accessories') {\n    var _ovB = _bundleOverlayEl(); if (_ovB) _ovB.style.opacity = '0';\n  } else if (next === 'normal') {\n    var _ovC = _bundleOverlayEl(); if (_ovC) _ovC.style.opacity = '1';\n  }\n}\nif (galleryMode === 'final' && next !== 'final') {\ntry { applyFinalGalleryMode(false); } catch (_e) {}\n}\nif (next === 'final') {\nclearModeOverlays();\nroot._u1RemoteHovering = false;\ntry { applyFinalGalleryMode(true); } catch (_e0) {}\nsetGallerySwipeEnabled(false);\nroot._u1VisorCycleCount = 0;\nupdateGalleryButtons();\nreturn;\n}\nif (next === 'visor') {\nsetBaseToVisorView();\npreloadVisorOverlaysForCurrentColor();\n} else if (next === 'accessories') {\nsetBaseToAccessoriesView();\npreloadRemoteForCurrentColor();\n} else {\nsetBaseToNormalGallery();\nclearModeOverlays();\nroot._u1RemoteHovering = false;\n}\nsyncModeOverlays();\nupdateGalleryButtons();\n};\nlet galleryModeRaf = null;\nconst scheduleGalleryUxModeCheck = () => {\nif (galleryModeRaf) return;\ngalleryModeRaf = window.requestAnimationFrame(() => {\ngalleryModeRaf = null;\napplyUxMode(computeUxMode());\ntry {\nconst hit = root._u1RemoteHitEl || null;\nconst torchHits = root._u1TorchLightHitEls || [];\nconst hoveringNow = !!(hit && hit.matches && hit.matches(':hover')) || (torchHits.length > 0 && torchHits.some(el => el && el.matches && el.matches(':hover')));\nif (!hoveringNow && root._u1RemoteHovering) {\nroot._u1RemoteHovering = false;\nif (galleryModeLayers && galleryModeLayers.preview) setModeLayerVisible(galleryModeLayers.preview, false);\n}\n} catch (_e) {}\n});\n};\nwindow.addEventListener('scroll', scheduleGalleryUxModeCheck, { passive: true });\nwindow.addEventListener('resize', scheduleGalleryUxModeCheck, { passive: true });\nconst syncVisorOverlay = () => {\nconst selected = getVisorSelectionList();\nroot._u1VisorCycleCount = selected.length;\nif (root._u1GalleryUxMode !== 'visor') {\nif (galleryModeLayers && galleryModeLayers.preview) setModeLayerVisible(galleryModeLayers.preview, false);\nif (galleryModeLayers && galleryModeLayers.active) setModeLayerVisible(galleryModeLayers.active, false);\nupdateGalleryButtons();\nreturn;\n}\nif (!root._u1VisorBaseReady) {\nif (galleryModeLayers && galleryModeLayers.preview) setModeLayerVisible(galleryModeLayers.preview, false);\nif (galleryModeLayers && galleryModeLayers.active) setModeLayerVisible(galleryModeLayers.active, false);\nupdateGalleryButtons();\nreturn;\n}\nif (!selected.length) {\nif (galleryModeLayers && galleryModeLayers.active) setModeLayerVisible(galleryModeLayers.active, false);\nupdateGalleryButtons();\nreturn;\n}\nvisorCycleIdx = clamp(visorCycleIdx, 0, selected.length - 1);\nconst activeSel = selected[visorCycleIdx];\nconst src = visorOverlaySrcFor(activeSel);\nif (src && galleryModeLayers && galleryModeLayers.active) fadeModeLayerToSrc(galleryModeLayers.active, src, { durationMs: 219 });\nupdateGalleryButtons();\n};\nconst syncRemoteOverlay = () => {\nif (root._u1GalleryUxMode !== 'accessories') return;\ntry {\nif (TEMPLATE_RAW === 'torch' && getTorchInsertSelectedNow()) return;\n} catch (_e0) {}\nconst onSrc = remoteOnSrcFor();\nconst offSrc = remoteBaseOffSrcFor();\nif (!onSrc) return;\nif (!galleryModeLayers || !galleryModeLayers.active || !galleryModeLayers.preview) return;\nif (isRemoteSelected()) {\nfadeModeLayerToSrc(galleryModeLayers.active, onSrc, { durationMs: 219 });\n} else {\nsetModeLayerVisible(galleryModeLayers.active, false);\n}\n};\n// \u2500\u2500 Insert overlay (Rain Plugs / accessories with color picker + overlay image) \u2500\u2500\n// overlayPrefixMap: JSON de Liquid (overlay_image_prefix) + mapa hardcodeado (el editor a veces borra el campo)\nconst _HARDCODED_OVERLAY_PREFIXES = {\n  'rain-plugs': 'pdp-rain-plug-neon',\n  'rain-plugs-for-neon': 'pdp-rain-plug-neon'\n};\n\nconst overlayPrefixMap = (() => {\n  try {\n    const el = root.querySelector && root.querySelector('#u1-pdp-acc-overlay-map');\n    if (el) {\n      const d = JSON.parse(el.textContent || '{}');\n      return Object.assign({}, _HARDCODED_OVERLAY_PREFIXES, d.overlayPrefixes || {});\n    }\n  } catch (_e) {}\n  return Object.assign({}, _HARDCODED_OVERLAY_PREFIXES);\n})();\n\nconst insertBtn = (() => {\n  const allAcc = Array.from(root.querySelectorAll('[data-u1-pdp-accessory]'));\n  // Prioridad 1: section setting (backward compat)\n  const sectionHandle = optionNameHandle(root.dataset.u1PdpInsertHandle || '');\n  if (sectionHandle) {\n    const byHandle = allAcc.find(\n      b => b && b.dataset && optionNameHandle(b.dataset.u1PdpAccessoryHandle || '') === sectionHandle\n    );\n    if (byHandle) return byHandle;\n  }\n  // Prioridad 2: JSON map\n  const byMap = allAcc.find(\n    b => b && b.dataset && !!overlayPrefixMap[b.dataset.u1PdpAccessoryHandle || '']\n  );\n  if (byMap) return byMap;\n  // Prioridad 3: data-attribute como fallback\n  return allAcc.find(\n    b => b && b.dataset && String(b.dataset.u1PdpAccessoryOverlayPrefix || '').length > 0\n  ) || null;\n})();\n\nconst insertBtnHandle = insertBtn ? optionNameHandle(insertBtn.dataset.u1PdpAccessoryHandle || '') : '';\n\nconst isInsertSelected = () => {\n  if (!insertBtn) return false;\n  return insertBtn.getAttribute('aria-pressed') === 'true' || insertBtn.classList.contains('is-selected');\n};\n\n// \u2500\u2500 Silicone inserts como accesorio: Torch PDP o flag enable_insert_torch_assets (ej. Sparky) \u2500\u2500\nconst isTorchInserts = () =>\n  !!insertBtn &&\n  !!insertBtnHandle &&\n  (TEMPLATE_RAW === 'torch' || INSERT_TORCH_ASSETS);\n\nconst normInsertColorHandle = (h) => {\n  const x = optionNameHandle(h || '');\n  if (x === 'tangerine-orange') return 'tangerine-orange';\n  if (x === 'ice-white') return 'ice-white';\n  return '';\n};\n\nconst normInsertModelHandle = (h) => {\n  const x = optionNameHandle(h || '');\n  if (x === 'dino') return 'dino';\n  if (x === 'lightning') return 'lightning';\n  if (x === 'spikes') return 'spikes';\n  return '';\n};\n\nconst INSERT_VARIANT_ID_BY_COLOR_MODEL = {\n  'tangerine-orange': {\n    dino: 44941442482337,\n    lightning: 44941442515105,\n    spikes: 44941442547873\n  },\n  'ice-white': {\n    dino: 44941442580641,\n    lightning: 44941442613409,\n    spikes: 44941442646177\n  }\n};\n\nconst pickInsertVariantId = ({ colorHandle, modelHandle } = { colorHandle: '', modelHandle: '' }) => {\n  const c = normInsertColorHandle(colorHandle);\n  const m = normInsertModelHandle(modelHandle);\n  if (!c || !m) return 0;\n  const row = INSERT_VARIANT_ID_BY_COLOR_MODEL[c];\n  const vid = row ? Number(row[m] || 0) : 0;\n  return Number.isFinite(vid) ? vid : 0;\n};\n\nconst insertSrcFor = (colorHandleOverride) => {\n  const btn = insertBtn;\n  if (!btn) return '';\n\n  if (isTorchInserts()) {\n    const modelH = normInsertModelHandle(btn.dataset.u1PdpAccessorySelectedModel || 'dino') || 'dino';\n    const insertColorH = normInsertColorHandle(\n      colorHandleOverride || String(btn.dataset.u1PdpAccessorySelectedColor || '')\n    ) || 'tangerine-orange';\n    const prodH = optionNameHandle(mainProductHandle || '');\n    const colorH = getMediaColorHandle();\n    if (!prodH || !colorH) return '';\n    const base = `pdp-insert-${modelH}-${insertColorH}-${prodH}-${colorH}`;\n    try { return filesUrlFor(`${base}.jpg`); } catch (_e0) {}\n    try { return assetUrlFor(`${base}.jpg`); } catch (_e1) {}\n    return '';\n  }\n\n  const handle = btn.dataset.u1PdpAccessoryHandle || '';\n  const prefix = (overlayPrefixMap[handle] || String(btn.dataset.u1PdpAccessoryOverlayPrefix || '')).trim();\n  const color = colorHandleOverride || String(btn.dataset.u1PdpAccessorySelectedColor || '');\n  if (!prefix || !color) return '';\n  try { return filesUrlFor(`${prefix}-${color}.png`); } catch (_e) {}\n  return '';\n};\n\nconst syncInsertOverlay = () => {\n  const img = galleryInsertOverlay && galleryInsertOverlay.img ? galleryInsertOverlay.img : null;\n  if (!img) return;\n\n  const uxMode = root._u1GalleryUxMode;\n  if (uxMode !== 'accessories') {\n    img.hidden = true;\n    img.setAttribute('aria-hidden', 'true');\n    try { img.removeAttribute('src'); } catch (_e0) {}\n    return;\n  }\n\n  const selected = isInsertSelected();\n  let src = '';\n  const torchInserts = isTorchInserts();\n\n  if (torchInserts) {\n    const prodH = optionNameHandle(mainProductHandle || '');\n    const colorH = getMediaColorHandle();\n\n    if (!prodH || !colorH) {\n      src = '';\n    } else if (selected || root._u1InsertHovering) {\n      // Card seleccionada O estoy en hover sobre la card \u2192 combinaci\u00F3n actual\n      src = insertSrcFor();\n    } else {\n      // Sin card seleccionada y sin hover \u2192 base \"none\"\n      const base = `pdp-insert-none-${prodH}-${colorH}`;\n      try { src = filesUrlFor(`${base}.jpg`); } catch (_e1) {}\n      if (!src) {\n        try { src = assetUrlFor(`${base}.jpg`); } catch (_e2) {}\n      }\n    }\n  } else {\n    // Otros templates/cards \u2192 comportamiento original\n    src = selected ? insertSrcFor() : '';\n  }\n\n  if (!src) {\n    img.hidden = true;\n    img.setAttribute('aria-hidden', 'true');\n    try { img.removeAttribute('src'); } catch (_e3) {}\n    return;\n  }\n\n  img.hidden = false;\n  img.setAttribute('aria-hidden', 'false');\n  const currentSrc = String(img.getAttribute('src') || '');\n  if (currentSrc !== String(src)) {\n    const pre = new Image();\n    pre.onload = () => {\n      try { img.setAttribute('src', String(src)); } catch (_ep) {}\n    };\n    pre.onerror = () => {\n      try { img.hidden = true; img.setAttribute('aria-hidden', 'true'); img.removeAttribute('src'); } catch (_ep) {}\n    };\n    pre.src = String(src);\n  }\n};\n\n// Hover para insert card (Torch Inserts)\nif (insertBtn) {\n  const insertHit = (insertBtn.closest && insertBtn.closest('.u1-pdp-card-hit')) || insertBtn;\n\n  insertHit.addEventListener('mouseenter', () => {\n    if (!isTorchInserts()) return;\n    if (root._u1GalleryUxMode !== 'accessories') return;\n    root._u1InsertHovering = true;\n    try { syncInsertOverlay(); } catch (_e) {}\n  }, { passive: true });\n\n  insertHit.addEventListener('mouseleave', () => {\n    if (!isTorchInserts()) return;\n    if (root._u1GalleryUxMode !== 'accessories') return;\n    root._u1InsertHovering = false;\n    try { syncInsertOverlay(); } catch (_e2) {}\n  }, { passive: true });\n}\n\n// Color swatch click handler \u2014 actualiza color seleccionado, color name text, overlay y variant\nconst insertColorSwatches = Array.from(root.querySelectorAll('[data-u1-pdp-card-color-swatch]'));\ninsertColorSwatches.forEach((swatch) => {\n  swatch.addEventListener('click', (e) => {\n    try { e.stopPropagation(); } catch (_e) {}\n\n    const variantId = swatch.dataset.u1PdpCardColorSwatchVariantId || '';\n    const colorHandle = swatch.dataset.u1PdpCardColorHandle || '';\n    const colorLabel = String(swatch.getAttribute('aria-label') || '').trim();\n    const strip = (swatch.closest && swatch.closest('.u1-pdp-card-color-strip')) || null;\n    const cardHit = (swatch.closest && swatch.closest('.u1-pdp-card-hit')) || null;\n    const cardBtn = cardHit ? cardHit.querySelector('[data-u1-pdp-accessory]') : null;\n\n    // Actualizar color seleccionado en el bot\u00F3n\n    if (cardBtn) {\n      cardBtn.dataset.u1PdpAccessorySelectedColor = colorHandle;\n      if (optionNameHandle(cardBtn.dataset.u1PdpAccessoryHandle || '') === 'set-of-silicone-inserts') {\n        // combo color+modelo en cualquier PDP; sin esto, cambiar color pisaba el modelo elegido\n        const mH = normInsertModelHandle(cardBtn.dataset.u1PdpAccessorySelectedModel || 'dino') || 'dino';\n        const nextVid = pickInsertVariantId({ colorHandle, modelHandle: mH }) || parseVariantId(variantId || '');\n        cardBtn.dataset.u1PdpAccessoryVariantId = String(nextVid || '');\n      } else {\n        cardBtn.dataset.u1PdpAccessoryVariantId = variantId;\n      }\n    }\n\n    // Actualizar aria-pressed de swatches + nombre del color\n    if (strip) {\n      Array.from(strip.querySelectorAll('[data-u1-pdp-card-color-swatch]')).forEach((s) => {\n        const on = s === swatch;\n        s.classList.toggle('is-selected', on);\n        s.setAttribute('aria-pressed', on ? 'true' : 'false');\n      });\n      const nameEl = strip.querySelector('[data-u1-pdp-card-color-name]');\n      if (nameEl) nameEl.textContent = colorLabel;\n    }\n\n    // Si la card ya est\u00E1 seleccionada, actualizar state + overlay\n    const isCardSelected =\n      cardBtn &&\n      (cardBtn.getAttribute('aria-pressed') === 'true' || cardBtn.classList.contains('is-selected'));\n\n    if (isCardSelected && cardBtn) {\n      const handle = optionNameHandle(cardBtn.dataset.u1PdpAccessoryHandle || '');\n      if (handle) {\n        const existing = state.accessories.get(handle);\n        if (existing) existing.variantId =\n          Number(cardBtn.dataset.u1PdpAccessoryVariantId || variantId) || 0;\n      }\n      try { syncInsertOverlay(); } catch (_eS) {}\n      try { updateSummary(); } catch (_eSu) {}\n      try { updateAtcAvailability(); } catch (_eAtc) {}\n    }\n\n        // Si estoy sobre la card y NO est\u00E1 seleccionada, usar combinaci\u00F3n actual (hover=true)\n    if (!isInsertSelected() && root._u1InsertHovering && isTorchInserts() && cardBtn === insertBtn) {\n      try { syncInsertOverlay(); } catch (_eH) {}\n    }\n\n    // Mobile/Tablet: cuando toco un swatch de inserts, queda \"sticky\" aunque no est\u00E9 agregado\n    if (isTorchInserts() && cardBtn === insertBtn) {\n      try { root._u1InsertStickyMobile = true; } catch (_eF) {}\n      try { u1ImgPreload.preload(insertSrcFor(colorHandle)); } catch (_eP) {}\n      try { renderMobileGalleries(); } catch (_eM) {}\n    }\n  });\n});\n\n// Silicone Inserts model pills (Dino/Lightning/Spikes); genericas, la card las trae si el block las prende\nconst insertModelPills = Array.from(root.querySelectorAll('[data-u1-pdp-insert-model]'));\ninsertModelPills.forEach((pill) => {\n  pill.addEventListener('click', (e) => {\n    try { e.preventDefault(); } catch (_e0) {}\n    try { e.stopPropagation(); } catch (_e1) {}\n\n    const model = normInsertModelHandle(pill.dataset.u1PdpInsertModel || '') || '';\n    if (!model) return;\n\n    const hit = (pill.closest && pill.closest('.u1-pdp-card-hit')) || null;\n    const cardBtn = hit ? hit.querySelector('[data-u1-pdp-accessory]') : null;\n    if (!cardBtn) return;\n    if (optionNameHandle(cardBtn.dataset.u1PdpAccessoryHandle || '') !== 'set-of-silicone-inserts') return;\n\n    cardBtn.dataset.u1PdpAccessorySelectedModel = model;\n\n    // UI state (pills)\n    try {\n      insertModelPills.forEach((p) => {\n        const on = p === pill;\n        p.classList.toggle('is-selected', on);\n        p.setAttribute('aria-pressed', on ? 'true' : 'false');\n      });\n    } catch (_e2) {}\n\n    // Resolver variantId por (color, modelo)\n    const cH = normInsertColorHandle(cardBtn.dataset.u1PdpAccessorySelectedColor || 'tangerine-orange') || 'tangerine-orange';\n    const nextVid = pickInsertVariantId({ colorHandle: cH, modelHandle: model });\n    if (nextVid) cardBtn.dataset.u1PdpAccessoryVariantId = String(nextVid);\n\n    // Si la card est\u00E1 seleccionada, actualizar state + overlay\n    const isCardSelected =\n      cardBtn.getAttribute('aria-pressed') === 'true' || cardBtn.classList.contains('is-selected');\n    if (isCardSelected) {\n      const entry = state.accessories.get(cardBtn.dataset.u1PdpAccessoryHandle || '');\n      if (entry) entry.variantId = Number(nextVid || 0) || entry.variantId;\n      try { updateSummary(); } catch (_eSu) {}\n      try { updateAtcAvailability(); } catch (_eAtc) {}\n    }\n\n    if (isTorchInserts()) {\n    try { root._u1InsertStickyMobile = true; } catch (_eF) {}\n    try { u1ImgPreload.preload(insertSrcFor(cH)); } catch (_eP) {}\n    try { syncInsertOverlay(); } catch (_eS) {}\n    try { renderMobileGalleries(); } catch (_eM) {}\n    }\n  });\n});\nconst syncModeOverlays = () => {\nsyncVisorOverlay();\nsyncRemoteOverlay();\ntry { syncRemoteMipsBadgeOverlay(); } catch (_e0) {}\ntry { syncInsertOverlay(); } catch (_e1) {}\ntry { renderMobileGalleries(); } catch (_e) {}\n};\nroot._u1RequestSyncModeOverlays = () => {\ntry { syncModeOverlays(); } catch (_e) {}\n};\nvisorBtns.forEach((b) => {\nconst hit = (b && b.closest) ? (b.closest('.u1-pdp-card-hit') || b) : b;\nhit.addEventListener('mouseenter', () => {\nif (root._u1GalleryUxMode !== 'visor') return;\nif (!root._u1VisorBaseReady) return;\nconst vid = parseVariantId(b.dataset.u1PdpAccessoryVariantId || '');\nconst fs = b.dataset.u1PdpAccessoryFilterStyle || '';\nconst src = visorOverlaySrcFor({ variantId: vid, filterStyle: fs });\nif (!src || !galleryModeLayers || !galleryModeLayers.preview) return;\nfadeModeLayerToSrc(galleryModeLayers.preview, src, { durationMs: 180 });\n});\nhit.addEventListener('mouseleave', () => {\nif (!galleryModeLayers || !galleryModeLayers.preview) return;\nsetModeLayerVisible(galleryModeLayers.preview, false);\n});\n});\nconst applyRemoteHoverPreview = () => {\nif (!root._u1RemoteHovering) return;\nif (root._u1GalleryUxMode !== 'accessories') return;\ntry {\nif (TEMPLATE_RAW === 'torch' && getTorchInsertSelectedNow()) return;\n} catch (_e0) {}\nconst onSrc = remoteOnSrcFor();\nif (!onSrc || !galleryModeLayers || !galleryModeLayers.preview) return;\nfadeModeLayerToSrc(galleryModeLayers.preview, onSrc, { durationMs: 180 });\n};\nroot._u1RequestRemoteHoverPreview = applyRemoteHoverPreview;\nconst addRemoteHoverListeners = (hit) => {\nif (!hit) return;\nhit.addEventListener('mouseenter', () => {\nroot._u1RemoteHovering = true;\ntry {\nif (TEMPLATE_RAW === 'torch' && getTorchInsertSelectedNow()) return;\n} catch (_e0) {}\nif (isDesktop && root._u1GalleryUxMode !== 'accessories') {\ntry { applyUxMode('accessories', { force: true }); } catch (_e) {}\n}\nif (root._u1GalleryUxMode !== 'accessories') return;\ntry { preloadRemoteForCurrentColor(); } catch (_e2) {}\napplyRemoteHoverPreview();\n});\nhit.addEventListener('mouseleave', () => {\nroot._u1RemoteHovering = false;\nif (!galleryModeLayers || !galleryModeLayers.preview) return;\nsetModeLayerVisible(galleryModeLayers.preview, false);\n});\n};\nif (TEMPLATE_RAW === 'torch' && torchLightHandles.length) {\n// Torch: solo hover en Smart Light / Smart Light Pro Dual; sin hover en Remote\nconst torchLightHitEls = accessoryBtns\n.filter(b => b && b.dataset && torchLightHandles.includes(optionNameHandle(b.dataset.u1PdpAccessoryHandle || '')))\n.map(b => (b.closest && b.closest('.u1-pdp-card-hit')) || b)\n.filter(Boolean);\nroot._u1TorchLightHitEls = torchLightHitEls;\ntorchLightHitEls.forEach(addRemoteHoverListeners);\n} else if (remoteBtn) {\nconst hit = (remoteBtn && remoteBtn.closest) ? (remoteBtn.closest('.u1-pdp-card-hit') || remoteBtn) : remoteBtn;\nroot._u1RemoteHitEl = hit;\naddRemoteHoverListeners(hit);\n}\nroot._u1CycleVisor = (dir) => {\nconst selected = getVisorSelectionList();\nif (root._u1GalleryUxMode !== 'visor') return false;\nif (!root._u1VisorBaseReady) return false;\nif (!selected || selected.length <= 1) return false;\nconst d = Number(dir || 0) || 0;\nvisorCycleIdx = (visorCycleIdx + (d < 0 ? -1 : 1) + selected.length) % selected.length;\nconst activeSel = selected[visorCycleIdx];\nconst src = visorOverlaySrcFor(activeSel);\nif (src && galleryModeLayers && galleryModeLayers.active) fadeModeLayerToSrc(galleryModeLayers.active, src, { durationMs: 219 });\nupdateGalleryButtons();\nreturn true;\n};\nscheduleGalleryUxModeCheck();\nsyncModeOverlays();\nconst applyCrashSelection = (opt, btnEl) => {\nconst nextOpt = String(opt || 'standard');\nif (nextOpt === 'standard') {\nstate.crashPlan = 'standard';\nstate.crashVariantId = 0;\n} else {\nconst vid = btnEl ? parseVariantId(btnEl.dataset.u1PdpCrashVariantId || '') : 0;\nif (!vid) {\nshowToast('Set Crash Replacement product/variants in section settings.');\nreturn;\n}\nstate.crashPlan = nextOpt;\nstate.crashVariantId = vid;\n}\ncrashOptionBtns.forEach((b) => {\nconst isOn = b === btnEl || (nextOpt === 'standard' && String(b.dataset.u1PdpCrashOption || '') === 'standard');\nb.classList.toggle('is-selected', isOn);\nb.setAttribute('aria-pressed', isOn ? 'true' : 'false');\n});\nif (crashGroupEl) crashGroupEl.classList.toggle('is-unlimited', nextOpt === 'unlimited');\nif (crashFootEl) crashFootEl.setAttribute('aria-hidden', nextOpt === 'unlimited' ? 'true' : 'false');\nupdateSummary();\n};\nif (crashOptionBtns.length) {\ncrashOptionBtns.forEach((btn) => {\nbtn.addEventListener('click', () => {\nif (TEMPLATE === 'light') {\nif (!state.variantId) {\nif (!goToMissingSelection()) showToast('Please select a model first.');\nreturn;\n}\nconst needsHelmetLight = (typeof HAS_HELMET_SIZE_CHAPTER !== 'undefined' && HAS_HELMET_SIZE_CHAPTER) && !!root.querySelector('[data-u1-pdp-helmet-size-picker]') && !state.helmetSize;\nif (needsHelmetLight) {\nif (!goToMissingSelection()) showToast('Please select a helmet size first.');\nreturn;\n}\n} else {\nconst needsColor = HAS_COLOR_CHAPTER && !state.color;\nconst needsSize = HAS_CHAPTER_SIZE && HAS_SIZE_OPTION && !state.size;\nconst needsHelmetSize = (typeof HAS_HELMET_SIZE_CHAPTER !== 'undefined' && HAS_HELMET_SIZE_CHAPTER) && !!root.querySelector('[data-u1-pdp-helmet-size-picker]') && !state.helmetSize;\nif (needsColor || needsSize || needsHelmetSize) {\nif (!goToMissingSelection()) {\nif (typeof SILICONE_INSERTS_PDP !== 'undefined' && SILICONE_INSERTS_PDP) {\nshowToast(needsSize ? 'Please select a model first.' : (needsHelmetSize ? 'Please select a helmet size first.' : 'Please select a color first.'));\n} else {\nshowToast(needsColor ? 'Please select a color first.' : (needsHelmetSize ? 'Please select a helmet size first.' : 'Please select a size.'));\n}\n}\nreturn;\n}\n}\nif (btn.getAttribute && btn.getAttribute('aria-disabled') === 'true') return;\nconst opt = String(btn.dataset.u1PdpCrashOption || 'standard');\nif (crashFreeOption !== 'none') {\nconst crashRank = { standard: 0, premium: 1, unlimited: 2 };\nif ((crashRank[opt] || 0) < (crashRank[crashFreeOption] || 0)) return;\n}\napplyCrashSelection(opt, btn);\n});\n});\nif (crashFreeOption !== 'none') {\nconst freeBtn = crashOptionBtns.find(b => String(b.dataset.u1PdpCrashOption || '') === crashFreeOption);\nif (freeBtn) { applyCrashSelection(crashFreeOption, freeBtn); document.addEventListener('u1:pdp:pack-change', () => applyCrashSelection(crashFreeOption, freeBtn)); }\n} else {\nconst standardBtn = crashOptionBtns.find(b => String(b.dataset.u1PdpCrashOption || '') === 'standard') || crashOptionBtns[0];\nif (standardBtn) applyCrashSelection('standard', standardBtn);\n}\n}\nif (btnPrev) btnPrev.addEventListener('click', (e) => {\nif (root._u1GalleryDragging) { e.preventDefault(); return; }\nif (btnPrev.getAttribute('aria-disabled') === 'true') return;\nconst uxMode = String(root._u1GalleryUxMode || 'normal');\nif (uxMode === 'visor' && typeof root._u1CycleVisor === 'function') {\nif (root._u1CycleVisor(-1)) return;\nreturn;\n}\nif (uxMode !== 'normal') return;\nscrollBy(-1);\n});\nif (btnNext) btnNext.addEventListener('click', (e) => {\nif (root._u1GalleryDragging) { e.preventDefault(); return; }\nif (btnNext.getAttribute('aria-disabled') === 'true') return;\nconst uxMode = String(root._u1GalleryUxMode || 'normal');\nif (uxMode === 'visor' && typeof root._u1CycleVisor === 'function') {\nif (root._u1CycleVisor(1)) return;\nreturn;\n}\nif (uxMode !== 'normal') return;\nscrollBy(1);\n});\ninitGalleryDrag();\nconst initProductDescriptionToggle = () => {\nif (!productWrap || !descEl || !moreBtn) return;\n\nfor (const p of descEl.querySelectorAll(':scope > p')) {\n  if (p.textContent.replace(/[\\s\u00A0]+/g, '') === '') { p.hidden = true; } else { break; }\n}\nconst minLinesRaw = parseInt(String(root.dataset.u1PdpDescMinLines || '4'), 10);\nconst minLinesForToggle = Math.min(20, Math.max(2, Number.isFinite(minLinesRaw) ? minLinesRaw : 4));\nconst cs = getComputedStyle(descEl);\nlet lineHeightPx = parseFloat(cs.lineHeight);\nif (!Number.isFinite(lineHeightPx) || lineHeightPx <= 0) {\nconst fs = parseFloat(cs.fontSize);\nlineHeightPx = Number.isFinite(fs) && fs > 0 ? fs * 1.45 : 20;\n}\nconst estimatedLines = Math.max(1, Math.ceil(descEl.scrollHeight / lineHeightPx));\nconst needsToggle = estimatedLines > minLinesForToggle;\nproductWrap.classList.toggle('u1-pdp-desc--short', !needsToggle);\nmoreBtn.hidden = !needsToggle;\n\nconst collapsedLines = 2;\ndescEl.style.setProperty('--u1-pdp-desc-collapsed', `${Math.ceil(lineHeightPx * collapsedLines)}px`);\nif (!needsToggle) return;\nconst prefersReducedMotion = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\nlet animTimer = null;\nconst startAnimating = () => {\nif (prefersReducedMotion) return;\nproductWrap.classList.add('is-animating');\nif (animTimer) window.clearTimeout(animTimer);\nanimTimer = window.setTimeout(() => {\nproductWrap.classList.remove('is-animating');\n}, 520);\n};\nconst computeExpandedHeight = () => {\n/* 2026-09-28: clone+scrollHeight = layout forzado; solo si cambio ancho o texto */\nconst w = descEl.offsetWidth;\nconst k = w + ':' + descEl.textContent.length;\nif (descEl._u1EK !== k) {\nconst clone = descEl.cloneNode(true);\nclone.style.cssText = 'max-height:none;position:absolute;visibility:hidden;width:' + w + 'px';\ndescEl.parentNode.appendChild(clone);\ndescEl._u1EH = clone.scrollHeight;\nclone.remove();\ndescEl._u1EK = k;\n}\ndescEl.style.setProperty('--u1-pdp-desc-expanded', `${descEl._u1EH + 4}px`);\nreturn descEl._u1EH;\n};\nconst setExpanded = (expanded) => {\nconst expandedH = computeExpandedHeight();\nconst collapsedH = parseInt(getComputedStyle(descEl).getPropertyValue('--u1-pdp-desc-collapsed')) || 42;\nconst diff = Math.abs(expandedH - collapsedH);\nconst duration = Math.max(150, Math.min(350, diff * 4));\ndescEl.style.transitionDuration = duration + 'ms';\nstartAnimating();\nproductWrap.classList.toggle('is-expanded', expanded);\nmoreBtn.setAttribute('aria-expanded', expanded ? 'true' : 'false');\nconst labelEl = moreBtn.querySelector('.u1-pdp-product__more-text');\nif (labelEl) labelEl.textContent = expanded ? 'Show less' : 'Show more';\n};\ncomputeExpandedHeight();\nlet expanded = false;\nsetExpanded(false);\nmoreBtn.addEventListener('click', () => {\nexpanded = !expanded;\nsetExpanded(expanded);\n});\ndescEl.addEventListener('transitionend', (e) => {\nif (prefersReducedMotion) return;\nif (!e || e.propertyName !== 'max-height') return;\nproductWrap.classList.remove('is-animating');\nif (animTimer) {\nwindow.clearTimeout(animTimer);\nanimTimer = null;\n}\n});\nconst ro = new ResizeObserver(() => {\ncomputeExpandedHeight();\n});\nro.observe(descEl);\n};\nconst attachHitCursor = (btn) => {\nif (!btn) return;\nconst icon = btn.querySelector('.u1-pdp-customizer__gallery-hit-icon');\nif (!icon) return;\nconst setPos = (evt) => {\nconst r = btn.getBoundingClientRect();\nconst x = evt.clientX - r.left;\nconst y = evt.clientY - r.top;\nbtn.style.setProperty('--u1-hit-x', `${x}px`);\nbtn.style.setProperty('--u1-hit-y', `${y}px`);\n};\nbtn.addEventListener('mouseenter', (e) => {\nbtn.classList.add('is-hover');\nsetPos(e);\n});\nbtn.addEventListener('mousemove', setPos);\nbtn.addEventListener('mouseleave', () => {\nbtn.classList.remove('is-hover');\n});\nbtn.addEventListener('pointerdown', () => {\nbtn.classList.add('is-active');\n}, { passive: true });\nconst clearActive = () => btn.classList.remove('is-active');\nbtn.addEventListener('pointerup', clearActive, { passive: true });\nbtn.addEventListener('pointercancel', clearActive, { passive: true });\nbtn.addEventListener('blur', clearActive, { passive: true });\n};\nattachHitCursor(btnPrev);\nattachHitCursor(btnNext);\nif (galleryTrack) {\ngalleryTrack.addEventListener('scroll', () => {\n/* 2026-09-28: si el slide activo no cambio, no tocar el DOM (evita layout forzado) */\nconst gi = getActiveGalleryIndex();\nif (gi === state.galleryIndex && galleryTrack._u1Si) return;\ngalleryTrack._u1Si = 1;\nstate.galleryIndex = gi;\nupdateGalleryButtons();\nrenderMobileGalleries();\ntry {\nconst slide = slides[state.galleryIndex];\nconst img = slide ? slide.querySelector('img') : null;\nwatchImgForLoader(img);\n} catch (_e) {}\n}, { passive: true });\n}\nconst getCartAddJsUrl = () => {\nif (typeof routes !== 'undefined' && routes && routes.cart_add_url) {\nconst u = String(routes.cart_add_url);\nreturn u.endsWith('.js') ? u : `${u}.js`;\n}\nreturn '/cart/add.js';\n};\nconst U1_DISCOUNT_STORAGE_KEY = 'u1_pdp_discount_code';\nconst pickBundleDiscountCodeFromState = () => {\ntry {\nif (!bundleDiscountRules || !bundleDiscountRules.length) return '';\nif (!Number(state && state.variantId ? state.variantId : 0)) return '';\nconst selected = new Set();\nfor (const entry of state.accessories.values()) {\nif (!entry) continue;\nconst h = optionNameHandle(entry.handle || '');\nif (h) selected.add(h);\n}\nlet best = null;\nlet bestScore = -Infinity;\nbundleDiscountRules.forEach((rule, idx) => {\nif (!rule || !rule.discountCode) return;\nif (!ruleMatchesMainProductSelection(rule)) return;\nconst req = Array.isArray(rule.requiredAccessoryHandles) ? rule.requiredAccessoryHandles : [];\nif (!req.length) return;\nfor (const h of req) { if (!selected.has(h)) return; }\nconst level = Number(rule.level || 0) || 0; // auto: depende del orden del block (arriba = mayor)\nconst score = (level * 1000) + req.length + (idx * 0.0001);\nif (score > bestScore) { bestScore = score; best = rule; }\n});\nreturn best && best.discountCode ? String(best.discountCode).trim() : '';\n} catch (_e) { return ''; }\n};\nconst pickAllDiscountCodes = () => {\nconst codes = [];\ntry {\nif (TEMPLATE === 'light') {\nconst meta = getMainQtyDiscountMeta();\nconst qty = getMainQty();\nconst minQty = Math.max(2, Number(meta.minQty || 0) || 0);\nconst c = (meta.code || '').toString().trim();\nif (c && qty >= minQty && Number(state.variantId || 0)) codes.push(c);\n}\nconst bundleCode = pickBundleDiscountCodeFromState();\nif (bundleCode) codes.push(bundleCode);\nif (ATC_DISCOUNT_ON && ATC_DISCOUNT_CODE && getMainCompareAtPriceCents() > 0) codes.push(ATC_DISCOUNT_CODE);\nfor (const entry of state.accessories.values()) {\nif (!entry) continue;\nconst c = (entry.discountCode || '').toString().trim();\nif (c) codes.push(c);\n}\nconst cfOpt = (crashFreeOption || 'none').toString().trim();\nconst crashPlanNow = (state.crashPlan || 'standard').toString().trim();\nconst cfCode = (crashFreeDiscountCode || '').toString().trim();\nif (cfCode && cfOpt !== 'none' && crashPlanNow === cfOpt && (crashPlanNow === 'premium' || crashPlanNow === 'unlimited')) {\ncodes.push(cfCode);\n}\n} catch (_e) {}\nconst seen = new Set();\nreturn codes.filter(c => { const k = c.toUpperCase(); if (seen.has(k)) return false; seen.add(k); return true; });\n};\nconst pickDiscountCodeFromState = () => {\nconst all = pickAllDiscountCodes();\nreturn all.length ? all[0] : '';\n};\nconst persistDiscountCode = (code) => {\nconst c = (code || '').toString().trim();\ntry {\nif (!c) {\nwindow.localStorage.removeItem(U1_DISCOUNT_STORAGE_KEY);\nreturn;\n}\nwindow.localStorage.setItem(U1_DISCOUNT_STORAGE_KEY, c);\n} catch (_e) {}\n};\nconst getPersistedDiscountCode = () => {\ntry {\nreturn (window.localStorage.getItem(U1_DISCOUNT_STORAGE_KEY) || '').toString().trim();\n} catch (_e) {\nreturn '';\n}\n};\nconst applyDiscountCodeBestEffort = (code) => {\nconst c = (code || '').toString().trim();\nif (!c) return Promise.resolve(false);\nconst url = `/discount/${encodeURIComponent(c)}?redirect=/cart`;\ntry {\nreturn fetch(url, { method: 'GET', credentials: 'same-origin', cache: 'no-store', redirect: 'manual' })\n.then(() => true)\n.catch(() => false);\n} catch (_e) {\nreturn Promise.resolve(false);\n}\n};\nconst applyDiscountCodesSequential = async (codes) => {\nconst list = (codes || []).map((c) => String(c || '').trim()).filter(Boolean);\nif (!list.length) return;\nfor (let i = 0; i < list.length; i++) {\ntry {\nawait applyDiscountCodeBestEffort(list[i]);\n} catch (_e) {}\nif (i < list.length - 1) {\nawait new Promise((r) => window.setTimeout(r, 150));\n}\n}\n};\nconst fallbackSubmitMainProduct = () => {\nif (!atcForm || !atcIdInput) return false;\nif (!state.variantId) return false;\natcIdInput.value = String(state.variantId);\natcForm.hidden = false;\natcForm.submit();\nreturn true;\n};\nconst postAdd = async (items) => {\nconst formData = new FormData();\nitems.forEach((item, i) => {\nformData.append(`items[${i}][id]`, String(item.id));\nformData.append(`items[${i}][quantity]`, String(item.quantity || 1));\nif (item.selling_plan) formData.append(`items[${i}][selling_plan]`, String(item.selling_plan));\nif (item.properties && typeof item.properties === 'object') {\n  Object.keys(item.properties).forEach((pk) => {\n    formData.append(`items[${i}][properties][${pk}]`, String(item.properties[pk]));\n  });\n}\n});\nconst addUrl = getCartAddJsUrl();\nconst res = await fetch(addUrl, {\nmethod: 'POST',\nheaders: { 'X-Requested-With': 'XMLHttpRequest' },\nbody: formData,\ncredentials: 'same-origin',\n});\nconst raw = await res.text();\nlet data = null;\ntry { data = JSON.parse(raw); } catch (_e) {}\nif (!res.ok || (data && data.status) || !data) {\nconst isHtml = raw.trim().startsWith('<');\nconst msg =\n(data && (data.description || data.message)) ? (data.description || data.message) :\n(isHtml ? 'Error al agregar al carrito (respuesta HTML). Revisar endpoint /cart/add.js y formato.' : 'Error al agregar al carrito.');\nconst err = new Error(msg);\nerr._u1_raw = raw;\nerr._u1_isHtml = isHtml;\nthrow err;\n}\nreturn data;\n};\nfunction scrollToStep(el) {\nif (!el) return false;\nconst prefersReducedMotion = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\nconst behavior = prefersReducedMotion ? 'auto' : 'smooth';\nconst topOffsetPx = 200; // avoid navbar overlap\ntry {\nconst r = el.getBoundingClientRect();\nconst y = (window.pageYOffset || document.documentElement.scrollTop || 0) + r.top - topOffsetPx;\nwindow.scrollTo({ top: Math.max(0, y), left: 0, behavior });\n} catch (_e) {\ntry { el.scrollIntoView(true); } catch (_e2) {}\n}\nreturn true;\n}\n\nconst _seenChapters = new Set();\ntry {\nif ('IntersectionObserver' in window) {\nconst _seenIO = new IntersectionObserver(function (entries) {\nentries.forEach(function (e) {\nif (e.isIntersecting && e.target && e.target.dataset && e.target.dataset.u1PdpStep) {\n_seenChapters.add(e.target.dataset.u1PdpStep);\n}\n});\n}, { threshold: 0.25 });\nroot.querySelectorAll('[data-u1-pdp-steps] [data-u1-pdp-step]').forEach(function (el) { _seenIO.observe(el); });\n}\n} catch (_e) {}\n\nconst _isChapterComplete = (step) => {\ntry {\nswitch (step) {\ncase 'color': return !(HAS_COLOR_CHAPTER && HAS_COLOR_OPTION) || !!state.color;\ncase 'size': return !(HAS_CHAPTER_SIZE && HAS_SIZE_OPTION) || !!state.size;\ncase 'model': case 'product_model': return !!state.variantId;\ncase 'helmet_size': case 'helmet-size': {\nconst has = (typeof HAS_HELMET_SIZE_CHAPTER !== 'undefined' && HAS_HELMET_SIZE_CHAPTER) && !!root.querySelector('[data-u1-pdp-helmet-size-picker]');\nreturn !has || !!state.helmetSize;\n}\ncase 'visor': {\nconst _ps = root._packSelector;\nconst _isBundle = (_ps && typeof _ps.getActiveBundlePack === 'function' && !!_ps.getActiveBundlePack()) || root.getAttribute('data-u1-pdp-bundle-active') === 'true';\nif (!_isBundle) return true;\nconst vStep = root.querySelector('[data-u1-pdp-step=\"visor\"]');\nif (!vStep || vStep.hidden || !vStep.querySelectorAll('[data-u1-pdp-visor=\"true\"]').length) return true;\nreturn !!vStep.querySelector('[data-u1-pdp-visor=\"true\"][aria-pressed=\"true\"]');\n}\ncase 'accessories': return !_u1GiftNeedsPick();\ndefault: return true;\n}\n} catch (_e) { return true; }\n};\n\nconst _chapterToast = (step, el) => {\ntry {\nswitch (step) {\ncase 'bundle': {\nconst t = el && el.querySelector('.u1-pdp-step__title');\nconst txt = t ? (t.textContent || '').trim() : '';\nreturn txt || 'Pick an option';\n}\ncase 'color': return 'Select a color';\ncase 'size': return 'Select a size';\ncase 'helmet_size': case 'helmet-size': return 'Select a helmet size';\ncase 'visor': return 'Select a visor';\ncase 'model': case 'product_model': return 'Select a model';\ncase 'accessories': return _u1GiftNeedsPick() ? _u1FgText('data-u1-fg-select') : 'Some items are out of stock';\ndefault: {\nconst t = el && el.querySelector('.u1-pdp-step__title');\nreturn t ? (t.textContent || '').trim() : '';\n}\n}\n} catch (_e) { return ''; }\n};\nfunction goToMissingSelection() {\n\ntry {\nif (window.matchMedia && window.matchMedia('(max-width: 1024px)').matches) {\nconst chapters = Array.from(root.querySelectorAll('[data-u1-pdp-steps] [data-u1-pdp-step]')).filter(function (el) { return el && !el.hidden; });\nchapters.sort(function (a, b) { return a.getBoundingClientRect().top - b.getBoundingClientRect().top; });\nconst target = chapters.find(function (el) {\nconst step = el.dataset.u1PdpStep;\nreturn !_isChapterComplete(step) || !_seenChapters.has(step);\n});\nif (target) {\nconst _m = _chapterToast(target.dataset.u1PdpStep, target);\nif (_m) showToast(_m);\nreturn scrollToStep(target);\n}\nreturn false;\n}\n} catch (_e) {}\n\nconst candidates = [];\n\nif (TEMPLATE === 'light') {\nif (!state.variantId && modelStepEl) candidates.push(modelStepEl);\n} else {\nconst needsColor = HAS_COLOR_CHAPTER && HAS_COLOR_OPTION && !state.color;\nconst needsSize = HAS_CHAPTER_SIZE && HAS_SIZE_OPTION && !state.size;\nif (needsColor && colorStepEl) candidates.push(colorStepEl);\nif (needsSize && sizeStepEl) candidates.push(sizeStepEl);\n}\n\nconst needsHelmetSize = (typeof HAS_HELMET_SIZE_CHAPTER !== 'undefined' && HAS_HELMET_SIZE_CHAPTER)\n  && (() => { try { return !!root.querySelector('[data-u1-pdp-helmet-size-picker]'); } catch (_e) { return false; } })()\n  && !state.helmetSize;\nif (needsHelmetSize && helmetSizeStepEl) candidates.push(helmetSizeStepEl);\n\nconst needsVisor = (() => {\ntry {\nvar _ps = root._packSelector;\nvar _isBundleNow = (_ps && typeof _ps.getActiveBundlePack === 'function' && !!_ps.getActiveBundlePack()) || root.getAttribute('data-u1-pdp-bundle-active') === 'true';\nif (!_isBundleNow) return false;\nvar vStep = root.querySelector('[data-u1-pdp-step=\"visor\"]');\nif (!vStep || vStep.hidden) return false;\nif (!vStep.querySelectorAll('[data-u1-pdp-visor=\"true\"]').length) return false;\nreturn !vStep.querySelector('[data-u1-pdp-visor=\"true\"][aria-pressed=\"true\"]');\n} catch (_e) { return false; }\n})();\nif (needsVisor && visorStepEl) candidates.push(visorStepEl);\n\nlet bundleOos = [];\ntry { bundleOos = getBundleOutOfStockSelections() || []; } catch (_e) {}\nif (bundleOos.length && accessoriesStepEl2) candidates.push(accessoriesStepEl2);\nif (_u1GiftNeedsPick() && accessoriesStepEl2 && candidates.indexOf(accessoriesStepEl2) === -1) candidates.push(accessoriesStepEl2);\n\nconst visible = candidates.filter((el) => {\nif (!el || el.hidden) return false;\ntry { if (el.offsetParent === null && el.getClientRects().length === 0) return false; } catch (_e) {}\nreturn true;\n});\nif (!visible.length) return false;\nvisible.sort((a, b) => a.getBoundingClientRect().top - b.getBoundingClientRect().top);\nconst _dtarget = visible[0];\nconst _dm = _chapterToast(_dtarget.dataset.u1PdpStep, _dtarget);\nif (_dm) showToast(_dm);\nreturn scrollToStep(_dtarget);\n}\nconst enableMainQty = String(root.dataset.u1PdpEnableMainQty || '') === 'true';\nconst mainQtyMax = (() => {\nconst n = Number(root.dataset.u1PdpMainQtyMax || 9);\nif (!Number.isFinite(n)) return 9;\nreturn Math.max(1, Math.min(99, Math.round(n)));\n})();\nconst getLightPresetFromUrl = () => {\ntry {\nconst out = { modelIndex: 0, qty: 0 };\nconst parseIntSafe = (v) => {\nconst n = Number(String(v || '').trim());\nreturn Number.isFinite(n) ? Math.floor(n) : 0;\n};\nconst parsePresetString = (s) => {\nconst str = String(s || '');\nif (!str) return;\nconst m = str.match(/m(?:odel)?\\s*(\\d+)/i);\nconst q = str.match(/q(?:ty)?\\s*(\\d+)/i);\nconst mi = m ? parseIntSafe(m[1]) : 0;\nconst qi = q ? parseIntSafe(q[1]) : 0;\nif (mi > 0) out.modelIndex = mi;\nif (qi > 0) out.qty = qi;\n};\nconst params = new URLSearchParams(window.location.search || '');\nconst mi =\nparseIntSafe(params.get('u1_model')) ||\nparseIntSafe(params.get('u1m')) ||\nparseIntSafe(params.get('model')) ||\n0;\nconst qi =\nparseIntSafe(params.get('u1_qty')) ||\nparseIntSafe(params.get('u1q')) ||\nparseIntSafe(params.get('qty')) ||\n0;\nif (mi > 0) out.modelIndex = mi;\nif (qi > 0) out.qty = qi;\nconst preset = (params.get('u1_preset') || params.get('u1preset') || params.get('preset') || '').toString();\nif (preset) parsePresetString(preset);\nconst h = (window.location.hash || '').toString();\nconst hm = h.match(/#u1=([^&]+)/i);\nif (hm && hm[1]) parsePresetString(decodeURIComponent(hm[1]));\nreturn out;\n} catch (_e) {\nreturn { modelIndex: 0, qty: 0 };\n}\n};\nconst syncModelQtyPromoUi = () => {\nif (TEMPLATE !== 'light') return;\nconst selected = modelButtons.find(b => b && b.classList && b.classList.contains('is-selected')) || null;\nif (!selected) return;\nconst qty = getMainQty();\nconst meta = getMainQtyDiscountMeta();\nconst minQty = Math.max(2, Number(meta.minQty || 0) || 0);\nconst pct = Number(meta.percent || 0) || 0;\nconst on = !!(pct > 0 && qty >= minQty);\nselected.classList.toggle('is-qty-promo-on', on);\n};\nconst syncModelPriceUi = () => {\nif (TEMPLATE !== 'light') return;\nconst selected = modelButtons.find(b => b && b.classList && b.classList.contains('is-selected')) || null;\nif (!selected) return;\nconst unitPriceEl = selected.querySelector('[data-u1-pdp-model-unit-price]');\nconst discWrap = selected.querySelector('[data-u1-pdp-model-price-discount]');\nconst msrpEl = selected.querySelector('[data-u1-pdp-model-msrp]');\nconst finalEl = selected.querySelector('[data-u1-pdp-model-final]');\nif (!unitPriceEl || !discWrap || !msrpEl || !finalEl) return;\nconst unit = Number(getMainPriceCents() || 0) || 0;\nconst qty = getMainQty();\nconst meta = getMainQtyDiscountMeta();\nconst minQty = Math.max(2, Number(meta.minQty || 0) || 0);\nconst pct = Number(meta.percent || 0) || 0;\nconst on = !!(pct > 0 && qty >= minQty && unit > 0 && qty > 1);\ntry {\nconst lineTotal = unit > 0 ? (unit * Math.max(1, qty)) : 0;\nunitPriceEl.textContent = formatMoneyCents(lineTotal);\n} catch (_eT) {}\nconst msrpTotal = unit * qty;\nconst finalTotal = getMainTotalCents();\nmsrpEl.textContent = formatMoneyCents(msrpTotal);\nfinalEl.textContent = formatMoneyCents(finalTotal);\nselected.classList.toggle('is-model-discount-on', on);\n};\nconst setSelectedModelBtn = (btn) => {\nif (!Array.isArray(modelButtons) || modelButtons.length === 0) return;\nmodelButtons.forEach((b) => {\nconst isOn = !!(btn && b === btn);\nb.classList.toggle('is-selected', isOn);\ntry { b.setAttribute('aria-pressed', isOn ? 'true' : 'false'); } catch (_e) {}\n});\n};\nconst syncMainQtyUi = () => {\nif (!enableMainQty) return;\nif (!Array.isArray(modelButtons) || modelButtons.length === 0) return;\nmodelButtons.forEach((b) => {\nif (!b || !b.dataset) return;\nconst vid = Number(b.dataset.u1PdpModelVariantId || 0) || 0;\nlet q = 1;\nif (TEMPLATE === 'light' && vid) {\ntry {\nconst m = state && state.modelQtyByVariantId ? state.modelQtyByVariantId : null;\nif (m && typeof m.get === 'function' && m.has(vid)) q = Number(m.get(vid) || 1) || 1;\n} catch (_e) {}\n} else {\nq = getMainQty();\n}\nconst vEls = Array.from(b.querySelectorAll('[data-u1-pdp-main-qty-value]'));\nvEls.forEach((el) => { if (el) el.textContent = String(q); });\n});\n};\nconst setMainQty = (nextQty) => {\nconst q = clamp(Math.round(Number(nextQty || 1) || 1), 1, mainQtyMax);\nstate.mainQty = q;\nif (TEMPLATE === 'light') {\nconst id = Number(state.variantId || 0) || 0;\nif (id) {\ntry { state.modelQtyByVariantId.set(id, q); } catch (_e) {}\n}\n}\nsyncMainQtyUi();\nsyncModelQtyPromoUi();\nsyncModelPriceUi();\nupdateAtcAvailability();\nupdateSummary();\nemitPdpSelection();\n};\nconst resolveStyleFilterVariantId = (styleFilter) => {\nif (!styleFilter) return 0;\nconst helmet = state.helmetModel || '';\nconst size = state.size || state.helmetSize || '';\nconst match = (v, val) => v && (v.option1 === val || v.option2 === val || v.option3 === val);\nlet candidates = variants.filter(v => v && match(v, styleFilter));\nif (helmet) candidates = candidates.filter(v => match(v, helmet));\nif (size) candidates = candidates.filter(v => match(v, size));\nif (candidates.length) return Number(candidates[0].id);\nif (helmet) {\n  const fallback = variants.filter(v => v && match(v, styleFilter) && match(v, helmet));\n  if (fallback.length) return Number(fallback[0].id);\n}\nconst styleOnly = variants.filter(v => v && match(v, styleFilter));\nif (styleOnly.length) return Number(styleOnly[0].id);\nreturn 0;\n};\nconst applyModelSelection = (btn) => {\nif (!btn || !btn.dataset) return false;\nconst raw = btn.dataset.u1PdpModelVariantId;\nlet idNum = Number(raw || 0);\nconst styleFilter = btn.dataset.u1PdpModelStyleFilter || '';\nif (!idNum && styleFilter) {\nidNum = resolveStyleFilterVariantId(styleFilter);\n}\nif (!idNum) return false;\nconst v = variants.find(vv => vv && Number(vv.id) === idNum) || null;\nif (!v) return false;\nstate.variantId = idNum;\nsetColorUnsetUI();\nsetSelectedModelBtn(btn);\nif (TEMPLATE !== 'light') {\nif (SIMPLE_MODEL_OPT_HANDLE) {\nconst mv = getVariantOptionByHandle(v, SIMPLE_MODEL_OPT_HANDLE);\nstate.simpleModelOptionValue = mv || null;\n}\nif (HAS_COLOR_OPTION) {\nconst nextColor = getVariantOptionByHandle(v, COLOR_HANDLE) || null;\nif (nextColor) {\nstate.color = nextColor;\nsetSelectedButton(colorButtons, nextColor);\n}\n}\nif (HAS_CHAPTER_SIZE && HAS_SIZE_OPTION) {\nconst nextSize = getVariantOptionByHandle(v, SIZE_HANDLE) || null;\nif (nextSize) {\nstate.size = nextSize;\nsetSelectedButton(sizeButtons, nextSize);\napplySizeActiveIndex();\nupdateSizePill();\n}\n}\ntry { setColorDisplay(state.color); } catch (_eC) {}\ntry { updateColorAvailability(); } catch (_eCa) {}\ntry { updateSizeAvailability(); } catch (_eSz) {}\ntry { setColorUnsetUI(); } catch (_eU) {}\ntry {\nconst cardTitle = btn.querySelector('[data-u1-pdp-card-title]');\nconst modelName = cardTitle ? (cardTitle.textContent || '').trim() : '';\nupdateStepMobileTitle('model', modelName);\n} catch (_eMT) {}\n}\nconst code = (btn.dataset.u1PdpQtyDiscountCode || '').toString().trim();\nconst percent = Number(btn.dataset.u1PdpQtyDiscountPercent || 0) || 0;\nconst minQty = Number(btn.dataset.u1PdpQtyDiscountMin || 0) || 0;\nstate.mainQtyDiscount = (code || percent > 0)\n? { code, percent, minQty: Math.max(2, minQty || 2) }\n: null;\ntry {\nconst saved = state.modelQtyByVariantId && state.modelQtyByVariantId.has(idNum)\n? Number(state.modelQtyByVariantId.get(idNum) || 1) || 1\n: 1;\nstate.mainQty = Math.max(1, Math.min(mainQtyMax, Math.round(saved)));\nif (state.modelQtyByVariantId && typeof state.modelQtyByVariantId.set === 'function') {\nstate.modelQtyByVariantId.set(idNum, state.mainQty);\n}\n} catch (_eS) {\nstate.mainQty = 1;\n}\nsyncMainQtyUi();\nsyncModelQtyPromoUi();\nsyncModelPriceUi();\ntry {\nconst imgs = getGalleryImagesForVariant(idNum);\nconst fin = getFinalImageForVariant(idNum);\nif ((imgs && imgs.length) || (fin && fin.src)) {\ntransitionGalleryToVariant(idNum, { durationMs: 88 });\nforceEndGalleryLoadingSoon(2600);\n} else if (!hasCustomGallery) {\nconst featuredId = v.featured_media && v.featured_media.id ? v.featured_media.id : null;\nif (featuredId) {\nconst idx = slides.findIndex(s => (s.dataset.mediaId || '') === String(featuredId));\nif (idx >= 0) {\nstate.galleryIndex = idx;\nscrollGalleryToIndex(idx);\n}\n}\n}\n} catch (_e) {}\ntry { syncConditionalFreeAccessories(); } catch (_eCF) {}\nupdateSummary();\nupdateAtcAvailability();\ntry { syncRestposGiftState({ openModalIfNeeded: true }); } catch (_eR) {}\nemitPdpSelection();\nreturn true;\n};\nif (Array.isArray(modelButtons) && modelButtons.length) {\nmodelButtons.forEach((btn) => {\nbtn.addEventListener('click', (e) => {\nconst t = e && e.target && e.target.closest ? e.target : null;\nif (t && t.closest('[data-u1-pdp-main-qty]')) return;\nif (btn.getAttribute && btn.getAttribute('aria-disabled') === 'true') return;\napplyModelSelection(btn);\nsyncMainQtyUi();\n});\n});\nif (TEMPLATE === 'light' && enableMainQty && !root._u1MainQtyBound) {\nroot._u1MainQtyBound = true;\nroot.addEventListener('click', (e) => {\nconst t = e && e.target && e.target.closest ? e.target : null;\nif (!t) return;\nconst minus = t.closest('[data-u1-pdp-main-qty-minus]');\nconst plus = t.closest('[data-u1-pdp-main-qty-plus]');\nif (!minus && !plus) return;\ntry { e.preventDefault(); } catch (_e0) {}\ntry { e.stopPropagation(); } catch (_e1) {}\nconst card = t.closest('[data-u1-pdp-model]') || null;\nif (card && card.getAttribute && card.getAttribute('aria-disabled') === 'true') return;\nif (card && card.classList && !card.classList.contains('is-selected')) {\napplyModelSelection(card);\n}\nconst selected = modelButtons.find(b => b && b.classList && b.classList.contains('is-selected')) || null;\nif (!selected) return;\nconst current = getMainQty();\nconst next = minus ? (current - 1) : (current + 1);\nsetMainQty(next);\n}, true);\n}\n}\nconst applyAccessoryModelSelection = (btn) => {\nif (!btn || !btn.dataset) return false;\nif (btn.getAttribute && btn.getAttribute('aria-disabled') === 'true') return false;\nconst v = btn.dataset.u1PdpValue || null;\nif (!v) return false;\nif (state.model && state.model === v) return true;\nstate.model = v;\nsetSelectedButton(accessoryModelButtons, v);\ntry { updateStepMobileTitle('model', v); } catch (_eMT) {}\nsetColorUnsetUI();\nupdateColorAvailability();\nupdateSizeAvailability();\nupdateVariant();\nsyncRestposGiftState({ openModalIfNeeded: true });\nupdateSummary();\nupdateAtcAvailability();\nemitPdpSelection();\nreturn true;\n};\nif (false && Array.isArray(accessoryModelButtons) && accessoryModelButtons.length) {\naccessoryModelButtons.forEach((btn) => {\nbtn.addEventListener('click', () => {\napplyAccessoryModelSelection(btn);\n});\n});\n}\n/* Flash Gift en packs: el producto regalo que viene dentro de un pack va gratis (solo si el regalo tiene codigo:\n   hoy FREE REMOTE US/UK; la card lo declara en data-u1-flash-gift-code). Devuelve su precio (centavos)\n   si el pack lo trae y hay card de regalo en la pagina; el pack se cobra (MSRP - regalo) con el % del pack.\n   Una sola cuenta para la card del pack, el CTA y el Total Breakdown. */\nfunction _u1FlashGiftHandle() {\ntry { var el = root.querySelector('[data-u1-flash-gift-handle][data-u1-flash-gift-code]'); return el ? String(el.getAttribute('data-u1-flash-gift-handle') || '').trim().toLowerCase() : ''; } catch (_e) { return ''; }\n}\nfunction _u1PackGiftComp(bp) {\nvar h = _u1FlashGiftHandle();\nif (!h || !bp || bp.isSolo) return null;\n/* Regalo atado a un modelo (Mount Pack -> Pro Dual): solo los packs de ese modelo */\ntry {\n  var _gm = root.querySelector('[data-u1-flash-gift-model]');\n  var _gmv = _gm ? String(_gm.getAttribute('data-u1-flash-gift-model') || '') : '';\n  if (_gmv) {\n    var _pc = root.querySelector('[data-u1-pdp-bundle-card][data-pack-handle=\"' + String(bp.packHandle || '') + '\"]');\n    if (!_pc || String(_pc.getAttribute('data-pack-model') || '') !== _gmv) return null;\n  }\n} catch (_eGm) {}\nreturn (bp.componentProducts || []).find(function(c) { return c && String(c.handle || '').toLowerCase() === h; }) || null;\n}\n/* Flash Gift con eleccion (Silicone Inserts de SPARKY, Fermin 21/10): la card del regalo queda en Accesorios\n   ([data-u1-flash-gift-pick]) y el boton de compra no avanza hasta que se elige el diseno. Solo producto suelto. */\n/* Textos del Flash Gift: salen traducidos del HTML de la card (data-u1-fg-*, locales u1.flash_gift.*) */\nfunction _u1FgText(attr) {\ntry { var el = root.querySelector('[data-u1-flash-gift]'); return el ? String(el.getAttribute(attr) || '') : ''; } catch (_e) { return ''; }\n}\nfunction _u1GiftPickBtn() {\ntry {\nvar el = root.querySelector('[data-u1-flash-gift][data-u1-flash-gift-code]');\nif (!el || el.hidden || el.classList.contains('is-muted')) return null;\nvar ps = root._packSelector;\nvar bp = ps && typeof ps.getActiveBundlePack === 'function' ? ps.getActiveBundlePack() : null;\nif (bp && !bp.isSolo) return null;\nreturn root.querySelector('[data-u1-pdp-accessory][data-u1-flash-gift-pick]');\n} catch (_e) { return null; }\n}\nfunction _u1GiftNeedsPick() {\nvar b = _u1GiftPickBtn();\nreturn !!(b && !b.classList.contains('is-selected') && b.getAttribute('aria-pressed') !== 'true');\n}\nfunction _u1PackGiftCents(bp) { var c = _u1PackGiftComp(bp); return c ? (Number(c.price || 0) || 0) : 0; }\n/* Flash deal de regalo (card [data-u1-flash-gift] del capitulo de producto): el regalo va solo con el producto\n   suelto (sin pack) y, si la card trae lista, solo con esas variantes (ej. Smart Light Pro Dual). El $0 lo pone un\n   descuento automatico Buy X Get Y de Shopify; la linea lleva _u1_flash_gift = variante que lo trajo y el carrito\n   del navbar la saca si ese producto se va o si la cobran. Con pack la card se oculta; con otra variante se apaga. */\nconst _flashGiftEl = document.querySelector('[data-u1-flash-gift][data-u1-flash-gift-section=\"' + sectionId + '\"]');\nconst _flashGiftVid = _flashGiftEl ? (parseInt(_flashGiftEl.getAttribute('data-u1-flash-gift-variant'), 10) || 0) : 0;\nconst _flashGiftIds = _flashGiftEl ? String(_flashGiftEl.getAttribute('data-u1-flash-gift-qualify') || '').split(',').map((s) => s.trim()).filter(Boolean) : [];\nconst _flashGiftStatus = () => {\nif (!_flashGiftEl || !_flashGiftVid) return 'off';\nconst _fgPs = root._packSelector;\nconst _fgBp = _fgPs && typeof _fgPs.getActiveBundlePack === 'function' ? _fgPs.getActiveBundlePack() : null;\nif (_fgBp && !_fgBp.isSolo) return 'pack';\nif (_flashGiftIds.length && _flashGiftIds.indexOf(String(state.variantId || '')) === -1) return 'variant';\nreturn 'ok';\n};\nconst _syncFlashGiftCard = () => {\nif (!_flashGiftEl) return;\nconst st = _flashGiftStatus();\n_flashGiftEl.hidden = st === 'pack';\n_flashGiftEl.classList.toggle('is-muted', st === 'variant');\n/* Variante que no califica (Smart Light comun): el accesorio regalo vuelve a verse y a cobrarse, sin avisos de regalo */\nroot.classList.toggle('is-fgift-off', st === 'variant');\ntry { if (typeof root._u1SyncFeaturesUnlocked === 'function') root._u1SyncFeaturesUnlocked(); } catch (_eSf) {}\n};\nif (_flashGiftEl) {\nwindow.addEventListener('u1:pdp:selection', (e) => {\nif (e && e.detail && e.detail.sectionId && String(e.detail.sectionId) !== String(sectionId)) return;\n_syncFlashGiftCard();\n});\ndocument.addEventListener('u1:pdp:pack-change', _syncFlashGiftCard);\n/* Inserts del Flash Gift: apenas se tocan color y modelo en la card, la card queda elegida sola (destraba el boton) */\nroot.addEventListener('click', (e) => {\ntry {\n  const t = e.target && e.target.closest ? e.target : null;\n  if (!t) return;\n  const sw = t.closest('[data-u1-pdp-card-color-swatch]');\n  const pill = t.closest('[data-u1-pdp-insert-model]');\n  if (!sw && !pill) return;\n  const hit = t.closest('.u1-pdp-card-hit');\n  const card = hit ? hit.querySelector('[data-u1-pdp-accessory][data-u1-flash-gift-pick]') : null;\n  if (!card) return;\n  if (sw) card.dataset.u1FgColorTouched = '1';\n  if (pill) card.dataset.u1FgModelTouched = '1';\n  if (card.dataset.u1FgColorTouched === '1' && card.dataset.u1FgModelTouched === '1'\n    && !card.classList.contains('is-selected') && card.getAttribute('aria-pressed') !== 'true') {\n    window.setTimeout(() => { try { card.click(); } catch (_eC) {} }, 0);\n  }\n} catch (_eFgT) {}\n}, true);\n_syncFlashGiftCard();\n}\nconst addBundleToCart = async () => {\nif (!atcBtn) return;\n\nvar _visorStep = root ? root.querySelector('[data-u1-pdp-step=\"visor\"]') : null;\nvar _isBundleForVisorGate = (root._packSelector && typeof root._packSelector.getActiveBundlePack === 'function' && !!root._packSelector.getActiveBundlePack())\n  || root.getAttribute('data-u1-pdp-bundle-active') === 'true';\nif (_isBundleForVisorGate && _visorStep && !_visorStep.hidden) {\n  var _allVisorBtns = Array.from(_visorStep.querySelectorAll('[data-u1-pdp-visor=\"true\"]'));\n  var _visibleVisors = _allVisorBtns.filter(function(btn) {\n    var hit = btn.closest('.u1-pdp-card-hit');\n    return !hit || !hit.hidden;\n  });\n  if (_visibleVisors.length > 0 && !_visorStep.querySelector('[data-u1-pdp-visor=\"true\"][aria-pressed=\"true\"]')) {\n\n    if (!goToMissingSelection()) showToast('Please select a visor.');\n    return;\n  }\n}\nif (_u1GiftNeedsPick()) { if (!goToMissingSelection()) showToast(_u1FgText('data-u1-fg-select')); return; }\nconst vNow = variants.find(v => v && Number(v.id) === Number(state.variantId)) || null;\n// Pre-order variants bypass notify \u2014 they're purchasable via selling plan\nif (vNow && (vNow.available === false || isVariantOosNonPreorder(vNow)) && !isVariantPreorder(vNow)) {\nopenNotifyModal();\nreturn;\n}\nconst isAriaDisabled = atcBtn.getAttribute('aria-disabled') === 'true';\nif (isAriaDisabled && !atcBtn.disabled && atcBtn.dataset.u1PdpDisabledReason === 'customize') {\nif (!goToMissingSelection()) {\nconst msg = (() => {\nif (TEMPLATE === 'light') {\nif (!state.variantId) return 'Please select a model first.';\nif (typeof HAS_HELMET_SIZE_CHAPTER !== 'undefined' && HAS_HELMET_SIZE_CHAPTER && root.querySelector('[data-u1-pdp-helmet-size-picker]') && !state.helmetSize) return 'Please select a helmet size first.';\nreturn 'Please select a model first.';\n}\nif (typeof SILICONE_INSERTS_PDP !== 'undefined' && SILICONE_INSERTS_PDP) {\nif (HAS_CHAPTER_SIZE && HAS_SIZE_OPTION && !state.size) return 'Please select a model first.';\nif (HAS_COLOR_CHAPTER && !state.color) return 'Please select a color first.';\nif (typeof HAS_HELMET_SIZE_CHAPTER !== 'undefined' && HAS_HELMET_SIZE_CHAPTER && root.querySelector('[data-u1-pdp-helmet-size-picker]') && !state.helmetSize) return 'Please select a helmet size first.';\nreturn 'Please select a model first.';\n}\nif (HAS_COLOR_CHAPTER && !state.color) return 'Please select a color first.';\nif (typeof HAS_HELMET_SIZE_CHAPTER !== 'undefined' && HAS_HELMET_SIZE_CHAPTER && root.querySelector('[data-u1-pdp-helmet-size-picker]') && !state.helmetSize) return 'Please select a helmet size first.';\nreturn 'Please select a size.';\n})();\nshowToast(msg);\n}\nreturn;\n}\nif (atcBtn.dataset.u1PdpDisabledReason === 'soldout') { openNotifyModal(); return; }\nif (atcBtn.dataset.u1PdpDisabledReason === 'bundle_oos') {\nconst oos = getBundleOutOfStockSelections();\nconst msg = oos && oos.length\n? `Out of stock: ${oos.map(x => x.label ? String(x.label) : String(x.id)).join(', ')}`\n: 'One or more selected items are out of stock.';\nshowToast(msg);\nreturn;\n}\nif (!state.variantId) return;\nif (errorEl) {\nerrorEl.hidden = true;\nerrorEl.textContent = '';\n}\nconst oosNow = getBundleOutOfStockSelections();\nif (oosNow && oosNow.length) {\nif (errorEl) {\nerrorEl.hidden = false;\nerrorEl.textContent = `Out of stock: ${oosNow.map(x => x.label ? String(x.label) : String(x.id)).join(', ')}`;\n}\nupdateAtcAvailability();\nreturn;\n}\natcBtn.setAttribute('aria-disabled', 'true');\natcBtn.classList.add('is-loading');\n\nconst _packNow = root._packSelector && root._packSelector.getActiveBundlePack ? root._packSelector.getActiveBundlePack() : null;\nconst _packCode = _packNow && _packNow.discountCode ? String(_packNow.discountCode).trim() : '';\n\nconst _bundleTag = (_packNow && !_packNow.isSolo) ? (_packNow.packHandle || 'bundle') : '';\nconst mainItem = { id: state.variantId, quantity: getMainQty() };\nif (_bundleTag) mainItem.properties = Object.assign({}, mainItem.properties, { _u1_bundle: _bundleTag });\n// Attach selling plan for preorder variants (Stoq partial payment)\nconst _preorderSpId = vNow ? getPreorderSellingPlanId(vNow) : 0;\nif (_preorderSpId) mainItem.selling_plan = _preorderSpId;\nconst items = [mainItem];\nsyncRestposGiftState({ openModalIfNeeded: false });\nconst allDiscountCodes = _packCode ? [_packCode] : pickAllDiscountCodes();\n// u1-pack-gift: con pack suma el codigo del crash gratis (si es el plan elegido)\nconst _cfc = (crashFreeDiscountCode || '').trim().toUpperCase();\nif (_packCode && _cfc && pickAllDiscountCodes().some(c => c.toUpperCase() === _cfc)) allDiscountCodes.push(crashFreeDiscountCode.trim());\nif (!_packCode) {\n  if (state.restposBottleVariantId && restposDiscountCode) {\n    if (!allDiscountCodes.some(c => c.toUpperCase() === restposDiscountCode.toUpperCase())) allDiscountCodes.push(restposDiscountCode);\n  }\n}\n// Flash Gift con codigo (FREE REMOTE US / UK): va con el producto suelto y con los packs que ya traen el regalo\n{\nconst _fgCode = _flashGiftEl ? String(_flashGiftEl.getAttribute('data-u1-flash-gift-code') || '').trim() : '';\nconst _fgH = _flashGiftEl ? String(_flashGiftEl.getAttribute('data-u1-flash-gift-handle') || '').trim().toLowerCase() : '';\nif (_fgCode) {\n  const _fgSolo = !_bundleTag && _flashGiftStatus() === 'ok';\n  const _fgInPack = !!(_bundleTag && _packNow && _fgH && _u1PackGiftComp(_packNow));\n  if ((_fgSolo || _fgInPack) && !allDiscountCodes.some((c) => String(c).toUpperCase() === _fgCode.toUpperCase())) {\n    allDiscountCodes.push(_fgCode);\n    /* El carrito sabe que este codigo es de regalo (y lo saca si el regalo se va) sin tener nombres fijos */\n    try { await fetch('/cart/update.js', { method: 'POST', credentials: 'same-origin', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ attributes: { _u1_flash_codes: _fgCode } }) }); } catch (_eAttr) {}\n  }\n}\n}\npersistDiscountCode(allDiscountCodes.join(','));\n\nconst _normHandle = (h) => (h || '').toLowerCase().replace(/-\\d+$/, '');\nconst _bundleCompHandles = new Set();\nif (_bundleTag && _packNow && Array.isArray(_packNow.componentProducts)) {\n  _packNow.componentProducts.forEach(cp => { if (cp && cp.handle) _bundleCompHandles.add(_normHandle(cp.handle)); });\n}\nconst _isVisorHandle = (h) => !!root.querySelector('[data-u1-pdp-accessory-handle=\"' + h + '\"][data-u1-pdp-visor=\"true\"]');\nconst _addedHandles = new Set();\nstate.accessories.forEach((v) => {\nif (!v) return;\nconst vid = parseVariantId(v.variantId);\nif (!vid) return;\nif (v.handle) { _addedHandles.add(v.handle.toLowerCase()); if (_isVisorHandle(v.handle)) _addedHandles.add('*visor'); }\nconst meta = accessoryVariantMeta.get(Number(vid)) || null;\nconst _item = { id: vid, quantity: v.qty || 1, _u1_label: (meta && meta.label) ? meta.label : (v.handle || String(vid)) };\n/* Regalo elegido en Accesorios: va como linea de regalo (1 unidad, _u1_flash_gift) */\ntry {\n  const _gpb = _u1GiftPickBtn();\n  if (_gpb && v.handle && String(_gpb.getAttribute('data-u1-pdp-accessory-handle') || '').toLowerCase() === String(v.handle).toLowerCase()) {\n    _item.quantity = 1;\n    _item.properties = Object.assign({}, _item.properties || {}, { _u1_flash_gift: String(state.variantId) });\n    _item._u1_flashGift = true;\n  }\n} catch (_eGp) {}\n\nif (_bundleTag && v.handle && (_bundleCompHandles.has(_normHandle(v.handle)) || _isVisorHandle(v.handle))) {\n  _item.properties = { _u1_bundle: _bundleTag };\n}\nitems.push(_item);\n});\n\ntry {\nconst _ps = root._packSelector;\nconst _bp = _ps && typeof _ps.getActiveBundlePack === 'function' ? _ps.getActiveBundlePack() : null;\nif (_bp && Array.isArray(_bp.componentProducts)) {\n  const _mainHandle = (mainProductHandle || '').toLowerCase();\n  _bp.componentProducts.forEach((cp) => {\n    if (!cp || !cp.handle) return;\n    const h = cp.handle.toLowerCase();\n\n    if (h === _mainHandle) return;\n    /* cualquier visor elegido cubre el componente visor del pack (Adaptive en Ride/Premium) */\n    if (_addedHandles.has(h) || (_addedHandles.has('*visor') && _isVisorHandle(h))) return;\n    const _fci = root._u1FamCompItem ? root._u1FamCompItem(h, _bundleTag) : null;\n    if (_fci) { items.push(_fci); _addedHandles.add(h); return; }\n    const _vf = (cp.variantFilter || '').trim().toLowerCase();\n    const _sz = (state.size || '').trim();\n    const _hm = (state.helmetModel || (mainProductHandle || '').split('-')[0].toUpperCase() || '').trim();\n    const _matchVariant = (variants) => {\n      if (!Array.isArray(variants) || !variants.length) return null;\n      const _matchesFilter = (vv) => !_vf || (\n        (vv.option1 || '').toLowerCase() === _vf ||\n        (vv.option2 || '').toLowerCase() === _vf ||\n        (vv.option3 || '').toLowerCase() === _vf ||\n        (vv.title || '').toLowerCase() === _vf\n      );\n      const _matchesHelmet = (vv) => !_hm || (\n        vv.option1 === _hm || vv.option2 === _hm || vv.option3 === _hm\n      );\n      const _szHead = _sz ? _sz.charAt(0).toUpperCase() : '';\n      const _matchesSize = (vv) => {\n        if (!_sz) return true;\n        const opts = [vv.option1, vv.option2, vv.option3];\n        return opts.some(o => o === _sz || o === _szHead);\n      };\n\n      const best = variants.find(vv => vv && vv.available !== false && _matchesFilter(vv) && _matchesHelmet(vv) && _matchesSize(vv));\n      if (best) return best;\n      const fh = variants.find(vv => vv && vv.available !== false && _matchesFilter(vv) && _matchesHelmet(vv));\n      if (fh) return fh;\n      /* REGLA DURA: nunca cruzar de casco ni de estilo (antes vendia Adaptive/NEON con AURA) */\n      const _helmetScoped = _hm && variants.some(vv => vv && (vv.option1 === _hm || vv.option2 === _hm || vv.option3 === _hm));\n      if (_helmetScoped) return null;\n      const fs = variants.find(vv => vv && vv.available !== false && _matchesFilter(vv) && _matchesSize(vv));\n      if (fs) return fs;\n      const fo = variants.find(vv => vv && vv.available !== false && _matchesFilter(vv));\n      if (fo) return fo;\n      if (_vf) return null;\n      return variants.find(vv => vv && vv.available !== false) || variants[0];\n    };\n    const catItem = (Array.isArray(accessoriesCatalog) ? accessoriesCatalog : []).find(p => p && (p.handle || '').toLowerCase() === h);\n    if (catItem && Array.isArray(catItem.variants) && catItem.variants.length) {\n      const av = _matchVariant(catItem.variants);\n      if (av && av.id) {\n        const _ci = { id: Number(av.id), quantity: 1, _u1_label: cp.title || h };\n        if (_bundleTag) _ci.properties = { _u1_bundle: _bundleTag };\n        items.push(_ci);\n        _addedHandles.add(h);\n      }\n    } else {\n      if (!_bp._pendingFetches) _bp._pendingFetches = [];\n      _bp._pendingFetches.push({ handle: cp.handle, title: cp.title || h, variantFilter: _vf });\n    }\n  });\n}\n\nif (_bp && _bp._pendingFetches && _bp._pendingFetches.length) {\n  for (const pf of _bp._pendingFetches) {\n    try {\n      const res = await fetch('/products/' + encodeURIComponent(pf.handle) + '.js');\n      if (res.ok) {\n        const prod = await res.json();\n        if (prod && Array.isArray(prod.variants) && prod.variants.length) {\n          const _pfVf = (pf.variantFilter || '').toLowerCase();\n          const _pfSz = (state.size || '').trim();\n          const _pfHm = (state.helmetModel || (mainProductHandle || '').split('-')[0].toUpperCase() || '').trim();\n          const _pfMatchF = (vv) => !_pfVf || ((vv.option1||'').toLowerCase()===_pfVf || (vv.option2||'').toLowerCase()===_pfVf || (vv.option3||'').toLowerCase()===_pfVf || (vv.title||'').toLowerCase()===_pfVf);\n          const _pfMatchH = (vv) => !_pfHm || (vv.option1===_pfHm || vv.option2===_pfHm || vv.option3===_pfHm);\n          const _pfSzH = _pfSz ? _pfSz.charAt(0).toUpperCase() : '';\n          const _pfMatchS = (vv) => !_pfSz || [vv.option1,vv.option2,vv.option3].some(o => o===_pfSz || o===_pfSzH);\n          let av = prod.variants.find(vv => vv && vv.available && _pfMatchF(vv) && _pfMatchH(vv) && _pfMatchS(vv));\n          if (!av) av = prod.variants.find(vv => vv && vv.available && _pfMatchF(vv) && _pfMatchH(vv));\n          /* misma regla dura que _matchVariant */\n          const _pfScoped = _pfHm && prod.variants.some(vv => vv && (vv.option1===_pfHm || vv.option2===_pfHm || vv.option3===_pfHm));\n          if (!av && !_pfScoped) av = prod.variants.find(vv => vv && vv.available && _pfMatchF(vv) && _pfMatchS(vv));\n          if (!av && !_pfScoped) av = prod.variants.find(vv => vv && vv.available && _pfMatchF(vv));\n          if (!av && !_pfScoped && !_pfVf) av = prod.variants.find(vv => vv && vv.available) || prod.variants[0];\n          if (av && av.id) {\n            const _pfi = { id: Number(av.id), quantity: 1, _u1_label: pf.title };\n            if (_bundleTag) _pfi.properties = { _u1_bundle: _bundleTag };\n            items.push(_pfi);\n          }\n        }\n      }\n    } catch (_eFetch) {}\n  }\n  _bp._pendingFetches = [];\n}\n} catch (_eBundleComp) {}\n{\nconst bottleVid = parseVariantId(state.restposBottleVariantId || 0);\nif (bottleVid) items.push({ id: bottleVid, quantity: 1, _u1_label: 'Free Bottle' });\n}\nconst crashVid = parseVariantId(state.crashVariantId || 0);\nif (crashVid) {\nconst meta = crashVariantMeta.get(Number(crashVid)) || null;\nitems.push({ id: crashVid, quantity: 1, _u1_label: (meta && meta.label) ? meta.label : `Crash Replacement (${crashVid})` });\n}\n// Flash deal: el regalo va con el producto suelto, una vez por producto (si ya esta en el carrito no se repite)\nif (!_bundleTag && _flashGiftStatus() === 'ok') {\nlet _fgInCart = false;\ntry {\nconst _fgCart = await (await fetch('/cart.js', { credentials: 'same-origin', cache: 'no-store' })).json();\n_fgInCart = (_fgCart.items || []).some((it) => it && it.properties && String(it.properties._u1_flash_gift || '') === String(state.variantId));\n} catch (_eFg) {}\nlet _fgPickVid = _flashGiftVid;\ntry {\n  /* Regalo al azar entre variantes (Silicone Inserts): data-u1-flash-gift-random = ids disponibles */\n  const _fgRnd = String(_flashGiftEl.getAttribute('data-u1-flash-gift-random') || '').split(',').map((n) => parseInt(n, 10)).filter(Boolean);\n  if (_fgRnd.length) _fgPickVid = _fgRnd[Math.floor(Math.random() * _fgRnd.length)];\n} catch (_eRnd) {}\nif (!_fgInCart && !_u1GiftPickBtn()) items.push({ id: _fgPickVid, quantity: 1, properties: { _u1_flash_gift: String(state.variantId) }, _u1_label: 'Flash deal gift', _u1_flashGift: true });\n}\ntry {\n\nif (_packCode) {\n  try { await fetch('/cart/update.js', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ discount: '' }) }); } catch(_eClear) {}\n}\nif (allDiscountCodes.length) {\nawait applyDiscountCodesSequential(allDiscountCodes);\n}\nlet data = null;\ntry {\ndata = await postAdd(items);\n} catch (e) {\nif (items.length <= 1) throw e;\ndata = await postAdd([mainItem]);\nconst failed = [];\nfor (let i = 1; i < items.length; i++) {\nconst it = items[i];\nif (!it || !it.id) continue;\ntry {\nawait postAdd([it]);\n} catch (_e2) {\nif (it._u1_flashGift) continue; // sin regalo no se frena la compra ni se muestra error\nconst label = it._u1_label ? String(it._u1_label) : String(it.id);\nconst reason = (_e2 && _e2.message) ? String(_e2.message) : 'Error';\nfailed.push(`${label} (${it.id}) \u2014 ${reason}`);\n}\n}\nif (failed.length && errorEl) {\nerrorEl.hidden = false;\nconst parts = [];\nif (failed.length) parts.push(`Fallaron: ${failed.join(' | ')}`);\nerrorEl.textContent = parts.join(' \u2014 ');\n}\n}\ndocument.dispatchEvent(new CustomEvent('cart:change', { detail: data, bubbles: true }));\ndocument.dispatchEvent(new CustomEvent('variant:add', { detail: { variant: { id: state.variantId }, quantity: getMainQty() }, bubbles: true }));\n} catch (e) {\nif (errorEl) {\nerrorEl.hidden = false;\nerrorEl.textContent = (e && e.message) ? e.message : 'Error';\n}\nfallbackSubmitMainProduct();\n} finally {\natcBtn.classList.remove('is-loading');\natcBtn.removeAttribute('aria-disabled');\n}\n};\nif (atcBtn) atcBtn.addEventListener('click', addBundleToCart);\ndocument.addEventListener('click', (e) => {\nconst t = e && e.target && e.target.closest ? e.target : null;\nif (!t) return;\nconst a = t.closest('a[href]');\nif (!a) return;\nconst hrefRaw = (a.getAttribute('href') || '').toString();\nif (!hrefRaw) return;\nconst isCheckout =\nhrefRaw === '/checkout' ||\nhrefRaw.startsWith('/checkout?') ||\nhrefRaw.startsWith('/checkout#') ||\nhrefRaw.includes('/checkout');\nif (!isCheckout) return;\nif (hrefRaw.includes('/discount/')) return;\nconst allCodes = pickAllDiscountCodes();\nconst persisted = (getPersistedDiscountCode() || '').split(',').map(s => s.trim()).filter(Boolean);\nconst mergedCodes = [...allCodes];\npersisted.forEach(c => { if (!mergedCodes.some(m => m.toUpperCase() === c.toUpperCase())) mergedCodes.push(c); });\nif (!mergedCodes.length) return;\nconst next = '/checkout?discount=' + encodeURIComponent(mergedCodes.join(','));\ntry {\ne.preventDefault();\ne.stopPropagation();\nwindow.location.assign(next);\n} catch (_e) {}\n}, true);\nif (TEMPLATE === 'light') {\nsetSelectedModelBtn(null);\nstate.variantId = 0;\nstate.mainQty = 1;\nstate.mainQtyDiscount = null;\ntry { state.modelQtyByVariantId = new Map(); } catch (_e) {}\nsetColorUnsetUI();\nupdateRenderScale();\ntry {\nconst firstModelBtn = modelButtons && modelButtons.length ? modelButtons[0] : null;\nconst firstId = firstModelBtn ? Number(firstModelBtn.dataset.u1PdpModelVariantId || 0) : 0;\nconst fin = firstId ? getFinalImageForVariant(firstId) : null;\nconst preview = firstId ? (getGalleryImagesForVariant(firstId) || (fin && fin.src ? [fin] : null)) : null;\nif (preview && preview.length) {\ntransitionGalleryToVariant(firstId, { durationMs: 0 });\nforceEndGalleryLoadingSoon(2600);\n} else {\nconst firstKey = variantGalleryMap && variantGalleryMap.size ? Array.from(variantGalleryMap.keys())[0] : 0;\nconst firstFinKey = (!firstKey && variantFinalMap && variantFinalMap.size) ? Array.from(variantFinalMap.keys())[0] : 0;\nconst k = firstKey || firstFinKey;\nif (k) {\ntransitionGalleryToVariant(k, { durationMs: 0 });\nforceEndGalleryLoadingSoon(2600);\n}\n}\n} catch (_e) {}\ntry {\nif (!root._u1LightPresetApplied) {\nroot._u1LightPresetApplied = true;\nconst preset = getLightPresetFromUrl();\nconst idx = Number(preset && preset.modelIndex ? preset.modelIndex : 0) || 0;\nconst qty = Number(preset && preset.qty ? preset.qty : 0) || 0;\nif (idx > 0 && Array.isArray(modelButtons) && modelButtons.length) {\nconst btn = modelButtons[Math.max(0, Math.min(modelButtons.length - 1, idx - 1))];\nif (btn && btn.getAttribute && btn.getAttribute('aria-disabled') !== 'true') {\napplyModelSelection(btn);\n}\n}\nif (qty > 0) setMainQty(qty);\n}\n} catch (_e2) {}\nupdateAtcAvailability();\n} else {\nsetSelectedButton(colorButtons, null);\nsetSelectedButton(sizeButtons, null);\nsetColorDisplay(null);\nupdateRenderScale();\nconst initialImgs = getGalleryImagesForColor(initialMediaColorValue || null) || getGalleryImagesForColor(null);\nif (initialImgs && initialImgs.length > 0) setGalleryToImages(initialImgs, { preserveIndex: false });\nupdateColorAvailability();\nupdateSizeAvailability();\nconst needsUserHelmetSelection = (HAS_COLOR_CHAPTER && HAS_COLOR_OPTION)\n|| (HAS_CHAPTER_SIZE && HAS_SIZE_OPTION);\nif (!needsUserHelmetSelection) {\ntry { updateVariant(); } catch (_eInitV) {}\n}\n// Silicone inserts: variant_gallery solo se aplica cuando ya hay talla+color; el HTML inicial es product.media.\n// Sin esto, la PDP arranca con las fotos de Shopify hasta el primer click.\nif (typeof SILICONE_INSERTS_PDP !== 'undefined' && SILICONE_INSERTS_PDP) {\nconst vgOn = (variantGalleryMap && variantGalleryMap.size > 0) || (variantFinalMap && variantFinalMap.size > 0);\nif (vgOn && Array.isArray(sizeButtons) && sizeButtons.length && Array.isArray(colorButtons) && colorButtons.length) {\nconst pickFirstEnabled = (btns) => btns.find((b) => b && b.getAttribute && b.getAttribute('aria-disabled') !== 'true' && !b.hidden) || null;\nlet szVal = (state.size || '').toString().trim() || null;\nif (!szVal) {\nconst sb = pickFirstEnabled(sizeButtons);\nif (sb) szVal = (sb.dataset.u1PdpValue || '').toString().trim() || null;\n}\nif (szVal) {\nstate.size = szVal;\nsetSelectedButton(sizeButtons, szVal);\napplySizeActiveIndex();\nupdateSizePill();\n}\nupdateColorAvailability();\nupdateSizeAvailability();\nlet colVal = (state.color || '').toString().trim() || null;\nif (!colVal) {\nconst cb = pickFirstEnabled(colorButtons);\nif (cb) colVal = (cb.dataset.u1PdpValue || '').toString().trim() || null;\n}\nif (colVal) {\nstate.color = colVal;\nsetSelectedButton(colorButtons, colVal);\nsetColorDisplay(colVal);\n}\ntry { updateVariant(); } catch (_eSi) {}\nconst vid = Number(state.variantId || 0) || 0;\nif (vid) {\ntry {\nconst vImgs = getGalleryImagesForVariant(vid);\nconst vFin = getFinalImageForVariant(vid);\nif ((vImgs && vImgs.length) || (vFin && vFin.src)) {\ntransitionGalleryToVariant(vid, { durationMs: 0 });\ntry { forceEndGalleryLoadingSoon(2600); } catch (_eL) {}\n}\n} catch (_eG) {}\n}\ntry { setColorUnsetUI(); } catch (_eU) {}\ntry { updateGalleryC1Variant(); } catch (_eC1) {}\ntry { scheduleGalleryUxModeCheck(); } catch (_eGx) {}\ntry { syncModeOverlays(); } catch (_eMo) {}\n}\n}\nupdateAtcAvailability();\napplySizeActiveIndex();\nupdateSizePill();\n}\nupdateGalleryButtons();\nrenderMobileGalleries();\ntry { syncFeaturesUnlocked(); } catch (_e0) {}\ninitProductDescriptionToggle();\nif (TEMPLATE !== 'light') {\nsyncAccessoriesToCurrentSize();\n}\nupdateSummary();\nemitPdpSelection();\n// Preload de slide-2 + visor overlays con delay para no competir con im\u00E1genes ATF\nwindow.setTimeout(() => {\n  try { preloadAllVisorBaseImages(); } catch (_e) {}\n  try { preloadVisorOverlaysForCurrentColor(); } catch (_e2) {}\n}, 2000);\n\nconst scrollToReviewsBtn = document.querySelector('[data-u1-scroll-to-reviews]');\nif (scrollToReviewsBtn) {\n  scrollToReviewsBtn.addEventListener('click', () => {\n    const looxSection = document.querySelector('[data-u1-loox]');\n    if (!looxSection) return;\n    looxSection.scrollIntoView({ behavior: 'smooth', block: 'start' });\n\n    let checks = 0;\n    const recheck = () => {\n      if (++checks > 3) return;\n      const r = looxSection.getBoundingClientRect();\n      if (Math.abs(r.top) > 80) {\n        looxSection.scrollIntoView({ behavior: 'smooth', block: 'start' });\n      }\n    };\n    setTimeout(recheck, 600);\n    setTimeout(recheck, 1500);\n  });\n}\n\n{\n  let _bdEl = null;\n  let _bdList = null;\n\n  const _bdEscapeHtml = (str) => {\n    const d = document.createElement('div');\n    d.textContent = str;\n    return d.innerHTML;\n  };\n\n\n  const _stale = root.querySelector('[data-u1-pdp-summary]');\n  if (_stale) _stale.remove();\n\n  const _anchor = document.createElement('div');\n  _anchor.setAttribute('data-u1-pdp-summary', '');\n  if (stickyBottomEl) stickyBottomEl.parentElement.insertBefore(_anchor, stickyBottomEl);\n\n  _anchor.className = 'u1-pdp-step u1-pdp-summary';\n  _anchor.hidden = true;\n  _anchor.setAttribute('aria-hidden', 'true');\n  _anchor.innerHTML = ''\n    + '<h3 class=\"u1-pdp-step__title text-h5\">Total Breakdown</h3>'\n    + '<div class=\"u1-pdp-summary__body\">'\n    +   '<ul class=\"u1-pdp-summary__list\" data-u1-pdp-summary-list role=\"list\"></ul>'\n    +   '<div class=\"u1-pdp-summary__divider\"></div>'\n    + '</div>';\n\n  const _summaryEl = _anchor;\n  _bdEl = _anchor;\n  _bdList = _anchor.querySelector('[data-u1-pdp-summary-list]');\n\n  if (_summaryEl && stickyBottomEl) {\n    const _summaryObs = new IntersectionObserver((entries) => {\n      entries.forEach((e) => {\n        var show;\n        if (e.isIntersecting) {\n          /* El breakdown est\u00E1 en pantalla \u2192 estado breakdown. */\n          show = true;\n        } else if (e.boundingClientRect && e.boundingClientRect.top < 0) {\n          /* Salio por arriba: mantener breakdown, no volver al CTA plano */\n          show = true;\n        } else {\n          /* Est\u00E1 por debajo del viewport (scrolleaste hacia arriba) \u2192 CTA plano. */\n          show = false;\n        }\n        stickyBottomEl.classList.toggle('is-summary-visible', show);\n      });\n    }, { threshold: 0 });\n    _summaryObs.observe(_summaryEl);\n  }\n\n  /* Purga de widgets Stoq: en assets/u1-pdp-app-guard.js */\n\n  const _bdUpdateExpanded = (hasRows) => {\n    if (!_summaryEl) return;\n    /* Sin bundle solo con data-u1-pdp-breakdown-always; el resto solo con bundle */\n    const isBundleActive = root.getAttribute('data-u1-pdp-bundle-active') === 'true';\n    const alwaysOn = root.getAttribute('data-u1-pdp-breakdown-always') === '1';\n    const show = hasRows && (isBundleActive || alwaysOn);\n\n    _summaryEl.hidden = !show;\n    _summaryEl.setAttribute('aria-hidden', show ? 'false' : 'true');\n  };\n\n  var updateBreakdownRows = () => {\n    if (!_bdEl || !_bdList) return;\n\n    const ps = root._packSelector;\n    const bp = (ps && typeof ps.getActiveBundlePack === 'function') ? ps.getActiveBundlePack() : null;\n    /* Sin bundle: filas del estado actual; bp puede ser null */\n\n    const rows = [];\n\n    var _bdLabelOverrides = null;\n    var _bdLabelsRaw = ((bp && bp.componentLabels) || '').trim();\n    if (_bdLabelsRaw) {\n      _bdLabelOverrides = {};\n      _bdLabelsRaw.split(',').forEach(function(s) {\n        var display = s.trim();\n        if (!display) return;\n\n        var base = display.split(' (')[0].trim();\n        _bdLabelOverrides[base] = display;\n      });\n    }\n\n    var _bdQuals = null;\n    if (!_bdLabelOverrides && bp && bp.allowedVisorStyles) {\n      var _avs = bp.allowedVisorStyles.split(',').map(function(s) { return s.trim(); }).filter(Boolean);\n      if (_avs.length) {\n        _bdQuals = {};\n        _bdQuals['Helmet Visor'] = _avs.join(' or ');\n      }\n    }\n\n    function _bdEnrich(baseName) {\n      if (_bdLabelOverrides) {\n\n        if (_bdLabelOverrides[baseName]) return _bdLabelOverrides[baseName];\n\n        var _bn = baseName.toLowerCase();\n        for (var _k in _bdLabelOverrides) {\n          if (_k.toLowerCase().indexOf(_bn) === 0) return _bdLabelOverrides[_k];\n        }\n      }\n      if (_bdQuals && _bdQuals[baseName]) return baseName + ' (' + _bdQuals[baseName] + ')';\n      return baseName;\n    }\n\n    function _resolveComponentPrice(comp, enrichedName) {\n      var vpm = comp.variantPriceMap;\n      if (!vpm || typeof vpm !== 'object') return Number(comp.price || 0);\n\n      var m = enrichedName.match(/\\(([^)]+)\\)\\s*$/);\n      if (m) {\n        var q = m[1].trim().toLowerCase();\n        for (var k in vpm) { if (k.toLowerCase() === q) return Number(vpm[k]); }\n      }\n\n      var el = enrichedName.trim().toLowerCase();\n      for (var k in vpm) { if (k.toLowerCase() === el) return Number(vpm[k]); }\n\n      for (var k in vpm) {\n        var kl = k.toLowerCase();\n        if (kl !== 'default title' && kl.length > 2 && el.indexOf(kl) !== -1) return Number(vpm[k]);\n      }\n      return Number(comp.price || 0);\n    }\n\n    function _bdLookupAccessoryPrice(enrichedName, fallbackPrice) {\n\n      var m = enrichedName.match(/\\(([^)]+)\\)\\s*$/);\n      var qualifier = m ? m[1].trim().toLowerCase() : '';\n      var baseName = m ? enrichedName.substring(0, m.index).trim().toLowerCase() : enrichedName.trim().toLowerCase();\n\n      var cards = root.querySelectorAll('[data-u1-pdp-accessory]');\n      for (var i = 0; i < cards.length; i++) {\n        var card = cards[i];\n        var cTitle = (card.getAttribute('data-u1-pdp-info-title') || '').trim().toLowerCase();\n        var cHandle = (card.getAttribute('data-u1-pdp-accessory-handle') || '').replace(/-/g, ' ').toLowerCase();\n\n        if (qualifier && cTitle === qualifier && cHandle.indexOf(baseName.split(' ')[0]) !== -1) {\n          var p = card.getAttribute('data-u1-pdp-info-price') || '';\n          var cents = parseMoneyCents(p);\n          if (cents > 0) return cents;\n        }\n\n        if (!qualifier && cTitle === baseName) {\n          var p2 = card.getAttribute('data-u1-pdp-info-price') || '';\n          var cents2 = parseMoneyCents(p2);\n          if (cents2 > 0) return cents2;\n        }\n      }\n      return Number(fallbackPrice || 0);\n    }\n\n    {\n\n      var mainPrice = bp\n        ? Number(bp.mainProductPriceMin || 0)\n        : (typeof getMainTotalCents === 'function' ? Number(getMainTotalCents() || 0) : 0);\n      /* Modelo elegido manda (Pro Dual vs base) */\n      try{var _msl=root.querySelector('[data-u1-pdp-model].is-selected')||root.querySelector('[data-u1-pdp-model][aria-pressed=\"true\"]');if(_msl){var _mvp=Number((variants.find(function(v){return v&&Number(v.id)===Number(_msl.getAttribute('data-u1-pdp-model-variant-id')||0);})||{}).price||0);if(_mvp>0)mainPrice=_mvp;}}catch(_eMv){}\n      var mainName = _bdEnrich(mainProductTitle || 'Helmet');\n      /* Modelo elegido (Smart Light Pro Dual): su nombre reemplaza al del producto si empieza igual */\n      try {\n        var _mslN = root.querySelector('[data-u1-pdp-model].is-selected') || root.querySelector('[data-u1-pdp-model][aria-pressed=\"true\"]');\n        var _mvN = _mslN ? variants.find(function(v){ return v && Number(v.id) === Number(_mslN.getAttribute('data-u1-pdp-model-variant-id') || 0); }) : null;\n        var _mo1 = _mvN ? String(_mvN.option1 || '').trim() : '';\n        if (_mo1 && mainProductTitle && _mo1.toLowerCase().indexOf(String(mainProductTitle).toLowerCase()) === 0 && _mo1.length > String(mainProductTitle).length) mainName = _mo1;\n      } catch (_eMn) {}\n      /* Nombre: producto + color, nunca talle */\n      try {\n        var _mainColor = (state && state.color) ? String(state.color).trim() : '';\n        if (_mainColor && mainName.toLowerCase().indexOf(_mainColor.toLowerCase()) === -1) {\n          mainName += ' ' + _mainColor;\n        }\n      } catch (_eMc) {}\n      rows.push({ name: mainName, price: mainPrice });\n      /* Flash Gift con el producto suelto: fila del regalo en Free (en packs sale de la lista de componentes) */\n      try {\n        if ((!bp || bp.isSolo) && typeof _flashGiftStatus === 'function' && _flashGiftStatus() === 'ok' && _flashGiftEl && _flashGiftEl.hasAttribute('data-u1-flash-gift-code')) {\n          var _fgNm = _flashGiftEl.querySelector('.u1-pdp-fgift__name');\n          if (_fgNm && _fgNm.textContent.trim()) rows.push({ name: _fgNm.textContent.trim(), price: 0, isGift: true });\n        }\n      } catch (_eFgr) {}\n\n      if (bp && Array.isArray(bp.componentProducts)) {\n        bp.componentProducts.forEach(function(cp) {\n          if (!cp || !cp.title) return;\n          var enriched = _bdEnrich(String(cp.title) + ((root._u1FamCompSuffix && root._u1FamCompSuffix(cp.handle)) || ''));\n          var price = _resolveComponentPrice(cp, enriched);\n\n          if (price === Number(cp.price || 0)) {\n            var accPrice = _bdLookupAccessoryPrice(enriched, 0);\n            if (accPrice > 0) price = accPrice;\n          }\n          var _isGiftRow = !!(_u1PackGiftComp(bp) && String(cp.handle || '').toLowerCase() === _u1FlashGiftHandle());\n          rows.push({ name: enriched, price: price, isGift: _isGiftRow });\n        });\n      }\n    }\n\n    try {\n      var visorStep = root.querySelector('[data-u1-pdp-step=\"visor\"]');\n      if (visorStep && !visorStep.hidden) {\n        /* Visores seleccionados: pueden ser varios */\n        var selectedVisors = visorStep.querySelectorAll('[data-u1-pdp-visor=\"true\"][aria-pressed=\"true\"]');\n        selectedVisors.forEach(function(selectedVisor) {\n          var vTitle = selectedVisor.getAttribute('data-u1-pdp-info-title') || 'Visor';\n          /* Nombre: estilo + producto */\n          if (!/visor/i.test(vTitle)) vTitle = vTitle + ' Visor';\n          var vPrice = selectedVisor.getAttribute('data-u1-pdp-info-price') || '';\n          var vHandle = selectedVisor.getAttribute('data-u1-pdp-accessory-handle') || '';\n          var alreadyListed = rows.some(function(r) {\n            return vHandle && r.name.toLowerCase().indexOf(vHandle.replace(/-/g, ' ').toLowerCase()) !== -1;\n          });\n          if (!alreadyListed && vPrice) {\n            var vid = Number(selectedVisor.getAttribute('data-u1-pdp-accessory-variant-id') || 0);\n            var meta = vid ? (accessoryVariantMeta.get(vid) || null) : null;\n            var cents = meta ? Number(meta.priceCents || 0) : 0;\n            if (!cents) {\n              /* variant-id sin resolver \u2192 meta vacia \u2192 daba $0; fallback al precio del boton */\n              cents = parseMoneyCents(vPrice);\n            }\n            /* visor upgrade: reemplaza la fila del componente visor del pack */\n            var _vi = bp ? rows.findIndex(function(r) { return !r.isAddon && /visor/i.test(r.name); }) : -1;\n            if (_vi >= 0) rows[_vi] = { name: vTitle, price: cents }; else rows.push({ name: vTitle, price: cents });\n          }\n        });\n      }\n    } catch (_e) {}\n\n    try {\n      var allAccBtns = root.querySelectorAll('[data-u1-pdp-accessory][aria-pressed=\"true\"], [data-u1-pdp-accessory].is-selected');\n      allAccBtns.forEach(function(btn) {\n        if (!btn) return;\n\n        if (btn.dataset.u1PdpVisor === 'true') return;\n        var aTitle = btn.getAttribute('data-u1-pdp-info-title') || btn.getAttribute('data-u1-pdp-accessory-handle') || 'Add-on';\n        var aHandle = (btn.getAttribute('data-u1-pdp-accessory-handle') || '').toLowerCase();\n\n        var _bpHandlesLc = ((bp && bp.componentProducts) || []).map(function(cp) { return (cp.handle || '').toLowerCase(); });\n        if (_bpHandlesLc.indexOf(aHandle) !== -1) return;\n        var aVid = Number(btn.getAttribute('data-u1-pdp-accessory-variant-id') || 0);\n        var aMeta = aVid ? (accessoryVariantMeta.get(aVid) || null) : null;\n        var aCents = aMeta ? Number(aMeta.priceCents || 0) : 0;\n        if (!aCents) {\n          var aPriceStr = btn.getAttribute('data-u1-pdp-info-price') || '';\n          aCents = parseMoneyCents(aPriceStr);\n        }\n        if (aCents > 0) rows.push({ name: aTitle, price: aCents, isAddon: true });\n      });\n    } catch (_e) {}\n\n    try {\n      var crashCents = typeof getCrashTotalCents === 'function' ? getCrashTotalCents() : 0;\n      if (crashCents > 0) {\n        /* Fuente real del plan: state.crashPlan */\n        var crashPlan = (state && state.crashPlan && state.crashPlan !== 'standard') ? String(state.crashPlan) : '';\n        var crashLabel = 'Crash Replacement';\n        /* Nombre: producto + variante sin parentesis */\n        if (crashPlan) {\n          var crashPlanTxt = crashPlan === 'unlimited'\n            ? 'Unlimited Coverage'\n            : crashPlan.charAt(0).toUpperCase() + crashPlan.slice(1);\n          crashLabel += ' ' + crashPlanTxt;\n        }\n        rows.push({ name: crashLabel, price: crashCents, isAddon: true });\n      }\n    } catch (_e) {}\n\n    var html = '';\n    var componentSum = 0;\n    rows.forEach(function(r) {\n      componentSum += Number(r.price || 0);\n      html += '<li class=\"u1-pdp-atc__breakdown-row u1-text-body-xs\">'\n        + '<span class=\"u1-pdp-atc__breakdown-name\">' + _bdEscapeHtml(r.name) + '</span>'\n        + '<span class=\"u1-pdp-atc__breakdown-price\">' + (r.isGift ? _bdEscapeHtml(_u1FgText('data-u1-fg-free')) : formatMoneyCents(r.price)) + '</span>'\n        + '</li>';\n    });\n    _bdList.innerHTML = html;\n\n    /* Sin bundle: el CTA lo maneja updateAtcTotal; solo filas */\n    if (!bp) {\n      _bdUpdateExpanded(rows.length > 0);\n      return;\n    }\n\n    /* msrp del total = suma de filas no-addon (siguen al modelo elegido) */\n    var _bdMsrp = 0;\n    rows.forEach(function(r) { if (!r.isAddon) _bdMsrp += Number(r.price || 0); });\n    if (!_bdMsrp) _bdMsrp = Number(bp.msrp || 0) || 0;\n    var _bdDiscPct = Number(bp.discountPercent || 0) || 0;\n    var _bdGift = 0;\n    rows.forEach(function(r) { if (r.isGift) _bdGift += Number(r.price || 0); });\n    var _bdDiscAmt = Math.round((_bdMsrp - _bdGift) * _bdDiscPct / 100);\n\n    var _bdExtras = 0;\n    rows.forEach(function(r) { if (r.isAddon) _bdExtras += Number(r.price || 0); });\n    var _bdMsrpDisplay = _bdMsrp + _bdExtras;\n    var _bdTotal = _bdMsrp - _bdGift - _bdDiscAmt + _bdExtras;\n    if ((_bdDiscPct > 0 && _bdDiscAmt > 0) || _bdGift > 0) {\n      if (atcTotalMsrpEl) {\n        atcTotalMsrpEl.textContent = formatMoneyCents(_bdMsrpDisplay);\n        atcTotalMsrpEl.setAttribute('aria-hidden', 'false');\n      }\n      if (atcTotalWrapEl) atcTotalWrapEl.classList.add('is-discount-on');\n      if (atcTotalEl) atcTotalEl.textContent = formatMoneyCents(_bdTotal);\n      if (atcSaveEl) {\n        /* Save consistente con lo mostrado: (MSRP mostrado) - (Tota... */\n        var _saveWhole = Math.max(0, _bdMsrpDisplay - _bdTotal);\n        if (_saveWhole > 0) {\n          atcSaveEl.textContent = 'Save ' + formatMoneyCents(_saveWhole);\n          atcSaveEl.hidden = false;\n          atcSaveEl.setAttribute('aria-hidden', 'false');\n        } else {\n          atcSaveEl.hidden = true;\n          atcSaveEl.setAttribute('aria-hidden', 'true');\n        }\n      }\n    } else {\n\n      if (atcTotalEl) atcTotalEl.textContent = formatMoneyCents(_bdMsrp + _bdExtras);\n    }\n\n    _bdUpdateExpanded(rows.length > 0);\n  };\n\n  /* Primera carga: updateSummary() del init corre ANTES de qu... */\n  try { updateBreakdownRows(); } catch (_eBd0) {}\n}\n})();\n/* ---- antes snippets/u1-pdp-bundle-tooltips.liquid ---- */\n/*\n  Bundle component tooltips \u2014 agrega el icono \"i\" con tooltip a cada item de la lista\n  de componentes de las bundle cards. El texto sale del metafield custom.bundle_tooltip\n  de cada producto (mapa en data-u1-tooltips, generado por u1-pdp-inline-bundle-picker).\n\n  Vive como snippet separado porque u1-pdp-customizer-js.liquid esta al limite de 256KB.\n  Sin MutationObserver (leccion Stoq): decorado idempotente con reintentos por timeout\n  y re-decorado al clickear una card (la lista se re-renderiza por JS).\n*/\n/* OJO: este snippet se renderiza DENTRO del <script> principal de la seccion (como u1-pdp-customizer-js): JS PURO, jamas tags script aca. */\n(function () {\n  var BOX = '[data-u1-pdp-bundle-components]';\n\n  function escapeHtml(t) {\n    var d = document.createElement('div');\n    d.textContent = t;\n    return d.innerHTML;\n  }\n\n  function decorate() {\n    try {\n      document.querySelectorAll(BOX).forEach(function (box) {\n        var map;\n        try { map = JSON.parse(box.getAttribute('data-u1-tooltips') || '{}'); } catch (e) { return; }\n        box.querySelectorAll('li').forEach(function (li) {\n          if (li.querySelector('.u1-pdp-bundle-card__info')) return;\n          var name = (li.textContent || '').replace(/^\\+\\s*/, '').trim().toLowerCase();\n          if (!name) return;\n          var txt = map[name] || '';\n          if (!txt) {\n            /* labels curados del pack pueden diferir del titulo (\"Helmet Visor (Clear or Tinted)\"):\n               match por contencion en ambos sentidos */\n            for (var k in map) {\n              if (map[k] && k && (name.indexOf(k) !== -1 || k.indexOf(name) !== -1)) { txt = map[k]; break; }\n            }\n          }\n          if (!txt) return;\n          var s = document.createElement('span');\n          s.className = 'u1-pdp-bundle-card__info';\n          s.setAttribute('role', 'button');\n          s.setAttribute('tabindex', '0');\n          s.setAttribute('aria-label', 'More information');\n          s.innerHTML = '<svg viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\"><circle cx=\"7\" cy=\"7\" r=\"6.3\" stroke=\"currentColor\" stroke-width=\"1.1\"/><path d=\"M7 6.4v3.3\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"round\"/><circle cx=\"7\" cy=\"4.4\" r=\"0.75\" fill=\"currentColor\"/></svg>'\n            + '<span class=\"u1-pdp-color__tooltip\" aria-hidden=\"true\">' + escapeHtml(txt) + '</span>';\n          li.appendChild(s);\n        });\n      });\n    } catch (e) { /* noop */ }\n  }\n\n  /* La card y la lista de componentes tienen overflow hidden (bordes redondeados +\n     animacion de expandir) y recortaban el tooltip. Posicionarlo FIXED en coordenadas\n     de viewport cuando se muestra: flota por encima y sobresale de la card sin recorte.\n     (fixed no queda atrapado por overflow de ancestros; ningun ancestro tiene transform) */\n  function positionTip(info) {\n    try {\n      var tip = info.querySelector('.u1-pdp-color__tooltip');\n      if (!tip) return;\n      var r = info.getBoundingClientRect();\n      tip.style.position = 'fixed';\n      tip.style.left = (r.left + r.width / 2) + 'px';\n      tip.style.top = (r.bottom + 8) + 'px';\n      tip.style.bottom = 'auto';\n      tip.style.zIndex = '999';\n      /* Cada card tiene z-index:0 (contexto propio): una card posterior pinta ENCIMA\n         del tooltip de la anterior. Elevar la card mientras su tooltip esta visible. */\n      var card = info.closest('[data-u1-pdp-bundle-card]');\n      if (card) card.style.zIndex = '30';\n    } catch (e) { /* noop */ }\n  }\n  function resetCardz(except) {\n    try {\n      document.querySelectorAll('[data-u1-pdp-bundle-card]').forEach(function (c) {\n        if (c !== except && !c.querySelector('.u1-pdp-bundle-card__info.is-open')) c.style.zIndex = '';\n      });\n    } catch (e) { /* noop */ }\n  }\n  document.addEventListener('mouseover', function (e) {\n    var info = e.target && e.target.closest ? e.target.closest('.u1-pdp-bundle-card__info') : null;\n    if (info) positionTip(info);\n  }, true);\n  document.addEventListener('mouseout', function (e) {\n    var info = e.target && e.target.closest ? e.target.closest('.u1-pdp-bundle-card__info') : null;\n    if (info && !info.classList.contains('is-open')) resetCardz(null);\n  }, true);\n  /* El tooltip es position:fixed (coordenadas de viewport): al scrollear quedaba\n     flotando en el medio de la pantalla, despegado del icono. Cerrarlo al scrollear\n     (capture: agarra tambien scrolls de contenedores internos). */\n  window.addEventListener('scroll', function () {\n    var open = document.querySelectorAll('.u1-pdp-bundle-card__info.is-open');\n    if (open.length) {\n      open.forEach(function (o) { o.classList.remove('is-open'); });\n      resetCardz(null);\n    }\n  }, { passive: true, capture: true });\n\n  /* El icono vive DENTRO del <button> de la card: capturar el click para que\n     abrir el tooltip (tap mobile) no seleccione/deseleccione el pack */\n  document.addEventListener('click', function (e) {\n    var info = e.target && e.target.closest ? e.target.closest('.u1-pdp-bundle-card__info') : null;\n    if (info) {\n      e.preventDefault();\n      e.stopPropagation();\n      positionTip(info);\n      document.querySelectorAll('.u1-pdp-bundle-card__info.is-open').forEach(function (o) { if (o !== info) o.classList.remove('is-open'); });\n      info.classList.toggle('is-open');\n      return;\n    }\n    document.querySelectorAll('.u1-pdp-bundle-card__info.is-open').forEach(function (o) { o.classList.remove('is-open'); });\n    resetCardz(null);\n    /* la lista de componentes se re-renderiza al interactuar con las cards */\n    if (e.target && e.target.closest && e.target.closest('[data-u1-pdp-bundle-card]')) {\n      window.setTimeout(decorate, 250);\n      window.setTimeout(decorate, 900);\n    }\n  }, true);\n\n  decorate();\n  window.setTimeout(decorate, 800);\n  window.setTimeout(decorate, 2500);\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', decorate);\n})();\n\n/* \u2500\u2500 Preseleccion de pack por URL: /products/x?pack=<pack_handle> \u2500\u2500\n   Clickea la bundle card del handle al cargar (con reintentos porque el\n   selector se inicializa async). Vive aca y no en customizer-js por el\n   limite de 256KB de ese archivo. */\n(function () {\n  try {\n    var pk = new URLSearchParams(window.location.search || '').get('pack');\n    if (!pk) return;\n    pk = pk.toLowerCase();\n    var tries = 0;\n    function go() {\n      var card = document.querySelector('[data-u1-pdp-bundle-card][data-pack-handle=\"' + pk + '\"]')\n              || document.querySelector('[data-u1-pdp-bundle-card][data-pack-id=\"' + pk + '\"]');\n      if (card) {\n        card.click();\n        try { card.scrollIntoView({ block: 'center', behavior: 'smooth' }); } catch (_e) {}\n        return;\n      }\n      if (++tries < 24) window.setTimeout(go, 250);\n    }\n    if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', function () { window.setTimeout(go, 300); });\n    else window.setTimeout(go, 300);\n  } catch (e) { /* noop */ }\n})();\n/* ---- antes snippets/u1-pdp-family-js.liquid ---- */\n/*\n  FAMILY PACK \u2014 JS de los chapters del segundo casco (Etapa 1: seleccion + titulos).\n  Etapas siguientes: galeria en tiempo real (2) y carrito/breakdown (3).\n\n  OJO: se renderiza DENTRO del <script> principal de la seccion (como customizer-js\n  y bundle-tooltips): JS PURO, jamas tags script aca adentro.\n\n  V3 defensivo: no asume nada del scope ni del DOM al momento de ejecutar.\n  - Root se resuelve por document (no depende del `root` del scope compartido).\n  - Listener delegado en document (sobrevive re-renders de la seccion).\n  - Init con reintentos (los chapters pueden no estar aun).\n  - Marcador root.dataset.u1FamJs para verificar en consola que corrio.\n  - Todo el cuerpo en try/catch con console.error: si muere, se VE.\n*/\n(function () {\n  try {\n    var FAM_SEL_STEP = '[data-u1-pdp-step=\"sparky_color\"], [data-u1-pdp-step=\"sparky_inserts\"]';\n\n    function famRoot() {\n      var st = document.querySelector(FAM_SEL_STEP);\n      if (st) {\n        var sec = st.closest('.u1-pdp-customizer') || st.closest('.shopify-section');\n        if (sec) return sec;\n      }\n      return document.querySelector('section.u1-pdp-customizer, .u1-pdp-customizer');\n    }\n\n    /* \u2500\u2500 Inserts: mapa \"model|color\" \u2192 {id, available} para resolver el SKU exacto \u2500\u2500 */\n    function insData() {\n      var w = document.querySelector('[data-u1-pdp-sparky-inserts-picker]');\n      if (!w) return null;\n      if (!w._u1Map) {\n        try { w._u1Map = JSON.parse(w.getAttribute('data-u1-fam-ins-map') || '{}'); } catch (eM) { w._u1Map = {}; }\n        w._u1HasModel = w.getAttribute('data-u1-fam-ins-has-model-opt') === '1';\n      }\n      return w;\n    }\n    function resolveInsertVariant(r) {\n      var w = insData();\n      if (!w || !r) return;\n      var d = r.dataset.u1SparkyInsertDesign || '';\n      var c = r.dataset.u1SparkyInsertColor || '';\n      var key = w._u1HasModel ? (d + '|' + c) : c;\n      var hit = w._u1Map[key];\n      r.dataset.u1SparkyInsertVid = hit ? String(hit.id) : '';\n    }\n    /* Stock por COMBINACION modelo|color en el mercado (Carlos 22/10, EU): apaga los colores sin stock para el modelo\n       elegido y los modelos sin ningun color con stock; si lo elegido quedo sin stock, salta a la primera combinacion\n       disponible (antes \"Tangerine Orange / Lightning\" agotado en EU rompia el add-to-cart del Everyday Pack) */\n    function syncInsAvail(r) {\n      try {\n        var w = insData();\n        if (!w) return;\n        var map = w._u1Map || {};\n        var cBtns = Array.prototype.slice.call(w.querySelectorAll('[data-u1-pdp-sparky-insert-color]'));\n        var mBtns = Array.prototype.slice.call(w.querySelectorAll('[data-u1-pdp-sparky-insert-design]'));\n        var ok = function (m, c) { var h = map[w._u1HasModel ? (m + '|' + c) : c]; return !!(h && h.a); };\n        var selOf = function (list, attr) { var b = list.filter(function (x) { return x.getAttribute('aria-pressed') === 'true'; })[0] || list[0]; return b ? (b.getAttribute(attr) || '') : ''; };\n        var selM = selOf(mBtns, 'data-u1-pdp-sparky-insert-design');\n        var selC = selOf(cBtns, 'data-u1-pdp-sparky-insert-color');\n        cBtns.forEach(function (b) {\n          var on = ok(selM, b.getAttribute('data-u1-pdp-sparky-insert-color') || '');\n          b.classList.toggle('is-oos', !on); b.disabled = !on;\n        });\n        if (w._u1HasModel) mBtns.forEach(function (b) {\n          var m = b.getAttribute('data-u1-pdp-sparky-insert-design') || '';\n          var any = cBtns.some(function (c) { return ok(m, c.getAttribute('data-u1-pdp-sparky-insert-color') || ''); });\n          b.classList.toggle('is-oos', !any); b.disabled = !any;\n        });\n        if (!ok(selM, selC)) {\n          var alt = cBtns.filter(function (c) { return !c.disabled; })[0];\n          if (alt) { alt.click(); return; }\n          var mAlt = mBtns.filter(function (m) { return !m.disabled; })[0];\n          if (mAlt) mAlt.click();\n        }\n      } catch (eSa) { /* noop */ }\n    }\n    window.setTimeout(function () { try { var r0 = famRoot(); if (r0) syncInsAvail(r0); } catch (eS0) {} }, 0);\n\n    function pick(groupSel, btn) {\n      var group = btn.closest(groupSel);\n      if (!group) return;\n      group.querySelectorAll('button[aria-pressed=\"true\"]').forEach(function (b) {\n        if (b !== btn) { b.classList.remove('is-selected'); b.setAttribute('aria-pressed', 'false'); }\n      });\n      btn.classList.add('is-selected');\n      btn.setAttribute('aria-pressed', 'true');\n    }\n\n    /* Nombre del color al TITULO del chapter (mismo formato que AURA: \"Base \u2013 Valor\").\n       Sin depender de updateStepMobileTitle del scope: replica su logica minima,\n       preservando el span del fam-prefix. */\n    function famTitleValue(r, stepName, value) {\n      try {\n        var stepEl = r.querySelector('[data-u1-pdp-step=\"' + stepName + '\"]');\n        if (!stepEl) return;\n        stepEl.querySelectorAll('[data-u1-pdp-step-mobile-title]').forEach(function (el) {\n          var base = el.dataset.u1PdpMobileBase || '';\n          var pref = el.querySelector('[data-u1-fam-prefix]');\n          el.textContent = '';\n          if (pref) el.appendChild(pref);\n          if (value) {\n            el.appendChild(document.createTextNode(base + ' \u2013 '));\n            var vs = document.createElement('span');\n            vs.className = 'u1-pdp-step__mobile-title-value';\n            vs.textContent = value;\n            el.appendChild(vs);\n          } else {\n            el.appendChild(document.createTextNode(base));\n          }\n        });\n      } catch (eT) { /* noop */ }\n    }\n\n    function famSetLabel(r, sel, value) {\n      var el = r.querySelector(sel);\n      if (el) el.textContent = value || '';\n    }\n\n    /* \u2500\u2500 ETAPA 3 (carrito): items exactos de los componentes del pack Family.\n       customizer-js consulta estos hooks al armar el add-to-cart y el breakdown.\n       Solo responden con los chapters family activos (pack Family seleccionado);\n       con otro pack o modo solo devuelven null/'' y el flujo generico sigue igual. \u2500\u2500 */\n    function famActive(r) {\n      return !!(r && r.querySelector('.u1-pdp-step--pack-only.is-pack-active'));\n    }\n    /* Family Pack invertido: variantes del casco adulto (color + talle -> id) */\n    function famActivePackHandle() {\n      try {\n        var r = famRoot();\n        var ps = r && r._packSelector;\n        var bp = ps && typeof ps.getActiveBundlePack === 'function' ? ps.getActiveBundlePack() : null;\n        return bp && bp.packHandle ? String(bp.packHandle).toLowerCase() : '';\n      } catch (ePH) { return ''; }\n    }\n    /* Titulo base del chapter segun el casco del pack activo (AURA/NEON Color) */\n    function famAdultRetitle() {\n      try {\n        var r = famRoot(); if (!r) return;\n        var g = famAdultActiveColorGroup();\n        var h = g ? (g.getAttribute('data-u1-adult-handle') || '') : '';\n        if (!h) return;\n        var name = h.indexOf('neon') !== -1 ? 'NEON' : (h.indexOf('aura') !== -1 ? 'AURA' : '');\n        if (!name) return;\n        [['adult_color', ' Color'], ['adult_size', ' Size']].forEach(function (pair) {\n          var st = r.querySelector('[data-u1-pdp-step=\"' + pair[0] + '\"]');\n          if (!st) return;\n          st.querySelectorAll('[data-u1-pdp-step-mobile-title]').forEach(function (el) {\n            el.dataset.u1PdpMobileBase = name + pair[1];\n          });\n        });\n        famTitleValue(r, 'adult_color', r.dataset.u1AdultColorName);\n        famTitleValue(r, 'adult_size', r.dataset.u1AdultSizeName);\n      } catch (eRT) { /* noop */ }\n    }\n    /* Muestra el grupo (swatches + pills) del pack activo y oculta los demas */\n    function famAdultShowGroup() {\n      var ph = famActivePackHandle();\n      var groups = document.querySelectorAll('[data-u1-adult-group]');\n      if (!groups.length) return;\n      var shown = null;\n      groups.forEach(function (g) {\n        var on = (g.getAttribute('data-u1-adult-group') || '').toLowerCase() === ph;\n        g.hidden = !on;\n        if (on && !shown) shown = g;\n      });\n      window.setTimeout(function () {\n        famAdultRetitle();\n        var rr = famRoot();\n        if (rr) { famAdultSizeSeed(rr); famAdultSyncSizes(rr); }\n      }, 0);\n      return shown;\n    }\n    function famAdultActiveColorGroup() {\n      var ph = famActivePackHandle();\n      var sel = '[data-u1-pdp-adult-color-picker] [data-u1-adult-group=\"' + ph + '\"]';\n      return document.querySelector(sel);\n    }\n    function famAdultVariants() {\n      try {\n        var g = famAdultActiveColorGroup();\n        var el = g ? g.querySelector('[data-u1-pdp-adult-variants]') : null;\n        return el ? (JSON.parse(el.textContent || '[]') || []) : [];\n      } catch (eAV) { return []; }\n    }\n    /* Preorder real: la variante se puede comprar (available) pero no hay\n       inventario (continue selling) y tiene plan de Stoq. Las agotadas con\n       policy deny NO son preorder: Shopify las rechaza con 422 */\n    function famAdultIsPreorder(v) {\n      if (!v) return false;\n      return !!(v.available && Number(v.qty || 0) <= 0 && Number(v.sp || 0) > 0);\n    }\n    function famAdultHit(r) {\n      var col = famToken(r.dataset.u1AdultColor || '');\n      var sz = famToken(r.dataset.u1AdultSize || '');\n      if (!col || !sz) return null;\n      return famAdultVariants().filter(function (v) {\n        var vals = [v.o1, v.o2, v.o3];\n        return vals.indexOf(col) !== -1 && vals.indexOf(sz) !== -1;\n      })[0] || null;\n    }\n    function famResolveAdultVid(r) {\n      var hit = famAdultHit(r);\n      return hit ? hit.id : 0;\n    }\n    /* Pill deslizante del talle del adulto (mismo componente que AURA/NEON) */\n    function famAdultSizePill() {\n      try {\n        /* El hidden vive en el wrapper del pack, no en el picker interno: hay que\n           partir del wrapper visible o siempre se agarra el primer grupo (AURA) */\n        var wrapVis = document.querySelector('[data-u1-pdp-adult-size-picker] [data-u1-adult-group]:not([hidden])');\n        var grp = wrapVis ? (wrapVis.querySelector('[data-u1-pdp-adult-size-group]') || wrapVis) : null;\n        if (!grp) return;\n        var pill = grp.querySelector('[data-u1-pdp-adult-size-pill]');\n        var act = grp.querySelector('[data-u1-pdp-adult-size].is-selected');\n        if (!pill || !act) return;\n        pill.style.width = act.offsetWidth + 'px';\n        pill.style.transform = 'translateX(' + act.offsetLeft + 'px)';\n        pill.classList.add('is-visible');\n      } catch (ePL) { /* noop */ }\n    }\n    /* Seed: el componente compartido no marca seleccion; elegimos el primer talle */\n    function famAdultSizeSeed(r) {\n      try {\n        var grpWrap = document.querySelector('[data-u1-pdp-adult-size-picker] [data-u1-adult-group]:not([hidden])');\n        if (!grpWrap) return;\n        var btns = grpWrap.querySelectorAll('[data-u1-pdp-adult-size]');\n        if (!btns.length) return;\n        var has = grpWrap.querySelector('[data-u1-pdp-adult-size].is-selected');\n        if (!has) {\n          var first = grpWrap.querySelector('[data-u1-pdp-adult-size]:not([disabled])') || btns[0];\n          first.classList.add('is-selected');\n          first.setAttribute('aria-pressed', 'true');\n          r.dataset.u1AdultSize = first.getAttribute('data-u1-pdp-adult-size') || '';\n          r.dataset.u1AdultSizeName = first.getAttribute('data-u1-pdp-adult-size-name') || '';\n          famTitleValue(r, 'adult_size', r.dataset.u1AdultSizeName);\n        }\n        famAdultSizePill();\n      } catch (eSS) { /* noop */ }\n    }\n    /* Texto de envio de preorder para una variante (misma cascada que la PDP:\n       config de Stoq por variante/mercado, y si no, el plan) */\n    function famAdultShipText(vid) {\n      try {\n        var cfg = window._RestockRocketConfig;\n        if (!cfg || !vid) return '';\n        var k = String(vid);\n        if (cfg.variantsShippingTextForMarket && cfg.variantsShippingTextForMarket[k]) {\n          var mkt = cfg.variantsShippingTextForMarket[k];\n          var txt = (typeof mkt === 'string' ? mkt : Object.values(mkt)[0] || '').toString().trim();\n          if (txt) return txt;\n        }\n        if (cfg.variantsShippingText && cfg.variantsShippingText[k]) {\n          return String(cfg.variantsShippingText[k]).trim();\n        }\n        var plans = Array.isArray(cfg.sellingPlans) ? cfg.sellingPlans : [];\n        var pl = plans.find(function (x) { return x && x.enabled !== false; });\n        return pl && pl.shipping_text ? String(pl.shipping_text).trim() : '';\n      } catch (eST) { return ''; }\n    }\n    /* Aviso de preorder del casco adulto: aparece cuando la combinacion elegida\n       no tiene stock pero si plan de preorder */\n    function famAdultPreorderNotice(r) {\n      try {\n        var wrap = document.querySelector('[data-u1-pdp-adult-size-picker] [data-u1-adult-group]:not([hidden]) [data-u1-pdp-adult-preorder-wrap]');\n        if (!wrap) return;\n        var hit = famAdultHit(r);\n        var isPre = famAdultIsPreorder(hit);\n        /* El banner colapsa con max-height:0 y se abre con .is-visible */\n        wrap.hidden = false;\n        wrap.setAttribute('aria-hidden', isPre ? 'false' : 'true');\n        wrap.classList.toggle('is-visible', isPre);\n        if (isPre) {\n          var nmEl = wrap.querySelector('[data-u1-pdp-adult-preorder-name]');\n          if (nmEl) {\n            var g = famAdultActiveColorGroup();\n            var hh = g ? (g.getAttribute('data-u1-adult-handle') || '') : '';\n            nmEl.textContent = hh.indexOf('neon') !== -1 ? 'NEON' : (hh.indexOf('aura') !== -1 ? 'AURA' : 'adult helmet');\n          }\n          var line = wrap.querySelector('[data-u1-pdp-adult-preorder-ship]');\n          if (line) {\n            var txt = famAdultShipText(hit.id);\n            line.textContent = txt ? ('Estimated shipping: ' + txt.replace(/^estimated shipping:?\\s*/i, '')) : '';\n            line.hidden = !txt;\n          }\n        }\n      } catch (ePN) { /* noop */ }\n    }\n    function famAdultSyncSizes(r) {\n      try {\n        var col = famToken(r.dataset.u1AdultColor || '');\n        var szGrpAct = document.querySelector('[data-u1-pdp-adult-size-picker] [data-u1-adult-group]:not([hidden])');\n        if (szGrpAct) szGrpAct = szGrpAct.querySelector('[data-u1-pdp-adult-size-group]') || szGrpAct;\n        var pills = szGrpAct ? szGrpAct.querySelectorAll('[data-u1-pdp-adult-size]') : [];\n        if (!col || !pills.length) return;\n        pills.forEach(function (b) {\n          var sz = b.getAttribute('data-u1-pdp-adult-size') || '';\n          var ok = famAdultVariants().some(function (v) {\n            var vals = [v.o1, v.o2, v.o3];\n            if (vals.indexOf(col) === -1 || vals.indexOf(sz) === -1) return false;\n            /* Solo stock real: las variantes agotadas de AURA/NEON hoy NO son\n               preorder comprable (Shopify responde 422 \"already sold out\" porque\n               el inventario esta en deny; en su PDP muestran Notify me). El\n               soporte de selling_plan queda latente: si Stoq activa oversell,\n               esas variantes pasan a available y se venden con su plan. */\n            return v.available;\n          });\n          b.disabled = !ok;\n          b.classList.toggle('is-oos', !ok);\n        });\n        var cur = szGrpAct ? szGrpAct.querySelector('[data-u1-pdp-adult-size].is-selected') : null;\n        if (cur && cur.disabled) {\n          var next = szGrpAct.querySelector('[data-u1-pdp-adult-size]:not([disabled])');\n          if (next) {\n            cur.classList.remove('is-selected'); cur.setAttribute('aria-pressed', 'false');\n            next.classList.add('is-selected'); next.setAttribute('aria-pressed', 'true');\n            r.dataset.u1AdultSize = next.getAttribute('data-u1-pdp-adult-size') || '';\n            r.dataset.u1AdultSizeName = next.getAttribute('data-u1-pdp-adult-size-name') || '';\n            famTitleValue(r, 'adult_size', r.dataset.u1AdultSizeName);\n          }\n        }\n        famAdultSizePill();\n        famAdultPreorderNotice(r);\n      } catch (eAS) { /* noop */ }\n    }\n    function famCompItem(handle, bundleTag) {\n      try {\n        var r = famRoot();\n        if (!famActive(r)) return null;\n        var h = String(handle || '').toLowerCase();\n        var props = {};\n        if (bundleTag) props._u1_bundle = bundleTag;\n        var sw = document.querySelector('[data-u1-pdp-sparky-color-picker]');\n        if (sw && (sw.getAttribute('data-u1-sparky-handle') || '').toLowerCase() === h) {\n          var vid = Number(r.dataset.u1SparkyColorVid || 0);\n          if (!vid) return null;\n          return { id: vid, quantity: 1, _u1_label: 'SPARKY ' + (r.dataset.u1SparkyColorName || ''), properties: props };\n        }\n        var aw = famAdultActiveColorGroup();\n        if (aw && (aw.getAttribute('data-u1-adult-handle') || '').toLowerCase() === h) {\n          var hitA = famAdultHit(r);\n          if (!hitA || !hitA.id) return null;\n          var nmA = [r.dataset.u1AdultColorName, r.dataset.u1AdultSizeName].filter(Boolean).join(' / ');\n          var itemA = { id: hitA.id, quantity: 1, _u1_label: nmA, properties: props };\n          /* Preorder (Stoq): solo si la variante es preorder real (vendible sin\n             inventario). Con stock, compra normal \u2014 mandar el plan convertiria\n             una venta inmediata en preorder */\n          if (famAdultIsPreorder(hitA)) itemA.selling_plan = Number(hitA.sp);\n          return itemA;\n        }\n        var tw = document.querySelector('[data-u1-pdp-torch-color-picker]');\n        if (tw && (tw.getAttribute('data-u1-torch-handle') || '').toLowerCase() === h) {\n          var vidT = Number(r.dataset.u1TorchColorVid || 0);\n          if (!vidT) return null;\n          return { id: vidT, quantity: 1, _u1_label: 'TORCH ' + (r.dataset.u1TorchColorName || ''), properties: props };\n        }\n        var iw = document.querySelector('[data-u1-pdp-sparky-inserts-picker]');\n        if (iw && (iw.getAttribute('data-u1-inserts-handle') || '').toLowerCase() === h) {\n          var vid2 = Number(r.dataset.u1SparkyInsertVid || 0);\n          if (!vid2) return null;\n          /* Sin opcion real de modelo (fallback CSV): el diseno viaja como property */\n          if (iw.getAttribute('data-u1-fam-ins-has-model-opt') !== '1' && r.dataset.u1SparkyInsertDesignName) {\n            props.Design = r.dataset.u1SparkyInsertDesignName;\n          }\n          return { id: vid2, quantity: 1, _u1_label: 'Silicone Inserts', properties: props };\n        }\n        return null;\n      } catch (eCI) { return null; }\n    }\n    /* Sufijo para el breakdown: \"SPARKY Junior Smart Helmet\" \u2192 \"... Soft Pink\" */\n    function famCompSuffix(handle) {\n      try {\n        var r = famRoot();\n        if (!famActive(r)) return '';\n        var h = String(handle || '').toLowerCase();\n        var sw = document.querySelector('[data-u1-pdp-sparky-color-picker]');\n        if (sw && (sw.getAttribute('data-u1-sparky-handle') || '').toLowerCase() === h) {\n          return r.dataset.u1SparkyColorName ? ' ' + r.dataset.u1SparkyColorName : '';\n        }\n        var awS = famAdultActiveColorGroup();\n        if (awS && (awS.getAttribute('data-u1-adult-handle') || '').toLowerCase() === h) {\n          var pa = [r.dataset.u1AdultColorName, r.dataset.u1AdultSizeName].filter(Boolean);\n          return pa.length ? ' ' + pa.join(' ') : '';\n        }\n        var tw = document.querySelector('[data-u1-pdp-torch-color-picker]');\n        if (tw && (tw.getAttribute('data-u1-torch-handle') || '').toLowerCase() === h) {\n          return r.dataset.u1TorchColorName ? ' ' + r.dataset.u1TorchColorName : '';\n        }\n        var iw = document.querySelector('[data-u1-pdp-sparky-inserts-picker]');\n        if (iw && (iw.getAttribute('data-u1-inserts-handle') || '').toLowerCase() === h) {\n          var parts = [];\n          if (r.dataset.u1SparkyInsertDesignName) parts.push(r.dataset.u1SparkyInsertDesignName);\n          if (r.dataset.u1SparkyInsertColorName) parts.push(r.dataset.u1SparkyInsertColorName);\n          return parts.length ? ' ' + parts.join(' ') : '';\n        }\n        return '';\n      } catch (eCS) { return ''; }\n    }\n\n    /* \u2500\u2500 ETAPA 2 (galeria): el hero del pack (todos los productos juntos) cambia con\n       CADA seleccion. Este hook le agrega al builder generico de candidatos las\n       variantes mas especificas, en orden especifico \u2192 general; el preload existente\n       cae solo al siguiente si la foto no esta subida:\n         pdp-{prod}-family-pack-{aura}-{sparky}-{model}-{insertcolor}.jpg\n         pdp-{prod}-family-pack-{aura}-{sparky}.jpg\n         (y sigue con las genericas del sistema: -{aura}.jpg \u2192 base.jpg) \u2500\u2500 */\n    function famToken(v) { return (v || '').toLowerCase().replace(/\\s+/g, '-'); }\n    /* Assets versionados: -v3 (composicion en franja, el CSS le aplica zoom) \u2192\n       -v2 (set anterior) \u2192 nombre pelado. En cada nivel se prueban las tres\n       versiones; los duplicados con los candidatos genericos son inofensivos. */\n    var FAM_IMG_VERSIONS = ['-v3', '-v2', ''];\n    /* Campus Pack: unico colorway de TORCH con fotos subidas (fallback del combo) */\n    var FAM_CAMPUS_TORCH_FALLBACK = 'charcoal-black';\n    function famPushLevel(out, base, sz) {\n      FAM_IMG_VERSIONS.forEach(function (v) { out.push(base + v + '.jpg' + sz); });\n    }\n    function famImgCands(prefix, col, sz, out) {\n      try {\n        var r = famRoot();\n        if (!r) return;\n        /* Rename 2026-08: Campus Pack -> Commuter Pack (handle incluido). Las fotos\n           de Files siguen nombradas pdp-*-campus-pack-*; se alias a el prefix para\n           no resubir todo. Si algun dia se resuben como commuter, borrar esta linea. */\n        prefix = prefix.replace(/-commuter-pack$/, '-campus-pack');\n        /* SPARKY Everyday Pack: candidato mas especifico con el combo de inserts\n           pdp-sparky-everyday-pack-{color}-{modelo}-{colorinsert}.jpg\n           (el builder generico agrega despues -{color} y el base como fallbacks) */\n        /* Campus Pack (AURA/NEON): candidato con el color de TORCH elegido\n           pdp-{prod}-campus-pack-{colorcasco}-{colortorch}.jpg\n           (el builder generico agrega -{colorcasco} y base como fallbacks) */\n        /* Family invertido (PDP de sparky): reusa las fotos EXISTENTES del pack\n           en su version original (pdp-aura-family-pack-*), que ya estan subidas.\n           prefix llega como pdp-sparky-{pack}; lo reescribimos a pdp-{pack}. */\n        if (/-family-pack$/.test(prefix) && /^.*pdp-sparky-/.test(prefix)) {\n          var fbase = prefix.replace(/pdp-sparky-/, 'pdp-');\n          /* Pack del prefix (no el activo): en hover el grupo esta hidden */\n          var fpm = fbase.match(/pdp-([a-z0-9-]+-family-pack)$/);\n          var fpack = fpm ? fpm[1] : '';\n          var fgrp = fpack ? document.querySelector('[data-u1-pdp-adult-color-picker] [data-u1-adult-group=\"' + fpack + '\"]') : null;\n          var fsel = fgrp ? fgrp.querySelector('[data-u1-pdp-adult-color].is-selected') : null;\n          var fac = famToken(fsel ? (fsel.getAttribute('data-u1-pdp-adult-color-name') || '') : r.dataset.u1AdultColorName);\n          var fsc = famToken(r.dataset.u1SparkyColorName) || famToken(r.dataset.u1SparkyColorName);\n          var fim = famToken(r.dataset.u1SparkyInsertDesign);\n          var fic = famToken(r.dataset.u1SparkyInsertColorName);\n          if (!fsc) {\n            var mainSel = r.querySelector('[data-u1-pdp-color].is-selected');\n            if (mainSel) fsc = famToken(mainSel.getAttribute('data-u1-pdp-value-handle') || mainSel.getAttribute('data-u1-pdp-value') || '');\n          }\n          /* Defaults para que el hero tenga foto desde el hover de la card,\n             antes de que el cliente elija nada */\n          if (!fsc) fsc = 'slate-gray';\n          if (!fim) fim = 'dino';\n          if (!fic) fic = 'tangerine-orange';\n          if (!fac) {\n            var acDef = document.querySelector('[data-u1-pdp-adult-color-picker] [data-u1-adult-group]:not([hidden]) [data-u1-pdp-adult-color].is-selected');\n            if (acDef) fac = famToken(acDef.getAttribute('data-u1-pdp-adult-color-name') || '');\n          }\n          if (fac && fsc && fim && fic) famPushLevel(out, fbase + '-' + fac + '-' + fsc + '-' + fim + '-' + fic, sz);\n          if (fac && fsc) famPushLevel(out, fbase + '-' + fac + '-' + fsc, sz);\n          if (fac) famPushLevel(out, fbase + '-' + fac, sz);\n          famPushLevel(out, fbase, sz);\n          return;\n        }\n        if (/-campus-pack$/.test(prefix)) {\n          /* Se lee el pill directo (en hover el dataset puede no estar seedeado) y\n             se cae al colorway de TORCH que si esta subido: sin esto, antes de\n             elegir el TORCH no habia NINGUN candidato valido y la galeria no\n             cargaba nada (los genericos -{color}/base no existen para campus). */\n          var ctcSel = document.querySelector('[data-u1-pdp-torch-color-picker] [data-u1-pdp-torch-color].is-selected');\n          var ctc = famToken(ctcSel ? (ctcSel.getAttribute('data-u1-pdp-torch-color-name') || '') : r.dataset.u1TorchColorName);\n          var ccol = col;\n          if (!ccol) {\n            var cSel = r.querySelector('[data-u1-pdp-color].is-selected');\n            if (cSel) ccol = famToken(cSel.getAttribute('data-u1-pdp-value-handle') || cSel.getAttribute('data-u1-pdp-value') || '');\n          }\n          if (ccol && ctc) famPushLevel(out, prefix + '-' + ccol + '-' + ctc, sz);\n          if (ccol && ctc !== FAM_CAMPUS_TORCH_FALLBACK) famPushLevel(out, prefix + '-' + ccol + '-' + FAM_CAMPUS_TORCH_FALLBACK, sz);\n          return;\n        }\n        if (/-everyday-pack$/.test(prefix)) {\n          var eim = famToken(r.dataset.u1SparkyInsertDesign);\n          var eic = famToken(r.dataset.u1SparkyInsertColorName);\n          /* Versionado -v3/-v2/pelado (mismo esquema que family): permite\n             renovar fotos subiendo -v2 sin pisar los nombres viejos */\n          if (col && eim && eic) famPushLevel(out, prefix + '-' + col + '-' + eim + '-' + eic, sz);\n          return;\n        }\n        /* Vale para el pack Family este seleccionado O en hover (preview de la card):\n           se gatea por el nombre del pack, no por el estado. Los defaults de sparky/\n           inserts ya estan seedeados al init, asi que el combo se resuelve igual. */\n        if (!/-family-pack$/.test(prefix)) return;\n        var sc = famToken(r.dataset.u1SparkyColorName);\n        var im = famToken(r.dataset.u1SparkyInsertDesign);\n        var ic = famToken(r.dataset.u1SparkyInsertColorName);\n        if (col && sc && im && ic) famPushLevel(out, prefix + '-' + col + '-' + sc + '-' + im + '-' + ic, sz);\n        if (col && sc) famPushLevel(out, prefix + '-' + col + '-' + sc, sz);\n        if (col) famPushLevel(out, prefix + '-' + col, sz);\n        famPushLevel(out, prefix, sz);\n      } catch (eIC) { /* noop */ }\n    }\n    /* Cualquier seleccion family re-dispara el update generico del hero */\n    function famGalleryRefresh(r) {\n      try { if (r && r._u1UpdateBundleGallery) r._u1UpdateBundleGallery(); } catch (eGR) { /* noop */ }\n    }\n\n    /* \u2500\u2500 Mini-galerias mobile de los chapters SPARKY: espejan el hero del pack\n       (la imagen de la combinacion actual). El overlay de desktop ya se actualiza\n       con cada seleccion aunque este oculto en mobile; aca solo copiamos su src.\n       Reintentos: el preload del hero es asincronico. \u2500\u2500 */\n    function famHandleize(x) {\n      return String(x || '').toLowerCase().trim().replace(/['\\u2019]/g, '').replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');\n    }\n    function famSparkyColorH(r) {\n      var h = famHandleize(r.dataset.u1SparkyColorName || '');\n      if (!h) {\n        var first = document.querySelector('[data-u1-pdp-sparky-color-picker] [data-u1-pdp-sparky-color]');\n        if (first) h = famHandleize(first.getAttribute('data-u1-pdp-sparky-color-name') || '');\n      }\n      if (!h && !document.querySelector('[data-u1-pdp-sparky-color-picker]')) {\n        /* PDP de SPARKY (Everyday Pack): no hay picker de sparky aparte, el\n           color del sparky ES el color principal seleccionado */\n        var mainSel = r.querySelector('[data-u1-pdp-color].is-selected') || r.querySelector('[data-u1-pdp-color][aria-pressed=\"true\"]');\n        if (mainSel) h = famHandleize(mainSel.getAttribute('data-u1-pdp-value-handle') || mainSel.getAttribute('data-u1-pdp-value') || '');\n      }\n      return h;\n    }\n    /* Mini galleries sparky: MISMO componente que los chapters de AURA\n       (media + flechas + dots de renderMobileGalleries), con estado local\n       porque las slides son de sparky, no de la galeria principal. */\n    function famBuildGallery(host) {\n      if (host.dataset.u1FamInit) return;\n      host.dataset.u1FamInit = '1';\n      host.dataset.u1Kind = 'render';\n      host.dataset.u1Fixed = '0';\n      host.innerHTML = '<div class=\"u1-pdp-mobile-gallery__media\">' +\n        '<img class=\"u1-pdp-mobile-gallery__img\" alt=\"SPARKY\" width=\"2000\" height=\"2000\">' +\n        '<button type=\"button\" class=\"u1-pdp-mobile-gallery__hit u1-pdp-mobile-gallery__hit--prev\" aria-label=\"' + CFG.i18n.previous + '\"></button>' +\n        '<button type=\"button\" class=\"u1-pdp-mobile-gallery__hit u1-pdp-mobile-gallery__hit--next\" aria-label=\"' + CFG.i18n.next + '\"></button>' +\n        '</div>' +\n        '<div class=\"u1-pdp-mobile-gallery__dots\" data-u1-dots aria-hidden=\"true\"></div>';\n      var bp = host.querySelector('.u1-pdp-mobile-gallery__hit--prev');\n      var bn = host.querySelector('.u1-pdp-mobile-gallery__hit--next');\n      if (bp) bp.addEventListener('click', function () { famGalleryGo(host, (host._famIdx || 0) - 1); });\n      if (bn) bn.addEventListener('click', function () { famGalleryGo(host, (host._famIdx || 0) + 1); });\n      host.addEventListener('click', function (e) {\n        var b = e.target && e.target.closest ? e.target.closest('button[data-u1-idx]') : null;\n        if (b) famGalleryGo(host, Number(b.dataset.u1Idx || 0) || 0);\n      });\n    }\n    function famGalleryGo(host, idx) {\n      var srcs = host._famSrcs || [];\n      var n = srcs.length;\n      if (!n) return;\n      idx = Math.max(0, Math.min(n - 1, Number(idx || 0) || 0));\n      host._famIdx = idx;\n      var img = host.querySelector('.u1-pdp-mobile-gallery__img');\n      if (img && img.getAttribute('src') !== srcs[idx]) img.setAttribute('src', srcs[idx]);\n      var bp = host.querySelector('.u1-pdp-mobile-gallery__hit--prev');\n      var bn = host.querySelector('.u1-pdp-mobile-gallery__hit--next');\n      if (bp) bp.setAttribute('aria-disabled', idx <= 0 ? 'true' : 'false');\n      if (bn) bn.setAttribute('aria-disabled', idx >= n - 1 ? 'true' : 'false');\n      var dots = host.querySelector('[data-u1-dots]');\n      if (!dots) return;\n      if ((Number(dots.dataset.u1Count || 0) || 0) !== n) {\n        dots.dataset.u1Count = String(n);\n        var html = '';\n        for (var i = 0; i < n; i++) {\n          html += '<button type=\"button\" class=\"u1-pdp-gallery-dot\" data-u1-idx=\"' + i + '\" aria-current=\"' + (i === idx ? 'true' : 'false') + '\" aria-label=\"Slide ' + (i + 1) + '\"></button>';\n        }\n        dots.innerHTML = html;\n      } else {\n        dots.querySelectorAll('button[data-u1-idx]').forEach(function (b, i) {\n          b.setAttribute('aria-current', i === idx ? 'true' : 'false');\n        });\n      }\n      dots.setAttribute('aria-hidden', n > 1 ? 'false' : 'true');\n    }\n    function famSetSlides(host, srcs, resetKey) {\n      if (host.dataset.u1FamKey === resetKey) return;\n      host.dataset.u1FamKey = resetKey;\n      host._famSrcs = srcs;\n      host._famIdx = 0;\n      famGalleryGo(host, 0);\n    }\n    /* Chapters de color de los packs (Campus AURA/NEON y Family invertido en SPARKY):\n       UNA sola slide con la foto del pack en la combinacion elegida. Se espeja el src\n       que ya resolvio el hero, asi nunca se desincroniza. */\n    /* OJO: 'color' NO va aca \u2014 ese chapter es el color del producto principal y\n       tiene que seguir mostrando la galeria del casco (SPARKY en su PDP, etc). */\n    var FAM_PACK_MG_STEPS = ['adult_color', 'adult_size', 'torch_color'];\n    function famPackMobileSync(r) {\n      try {\n        var ov = r.querySelector('.u1-bundle-gallery-overlay');\n        var src = ov ? (ov.currentSrc || ov.src || '') : '';\n        if (!src) return;\n        FAM_PACK_MG_STEPS.forEach(function (st) {\n          var host = r.querySelector('[data-u1-pdp-step=\"' + st + '\"] [data-u1-pdp-mobile-gallery]');\n          if (!host) return;\n          famBuildGallery(host);\n          famSetSlides(host, [src], 'p:' + st + ':' + src);\n        });\n      } catch (ePM) { /* noop */ }\n    }\n    function famMobileSync() {\n      try {\n        var r = famRoot();\n        if (!r || !famActive(r)) return;\n        famPackMobileSync(r);\n        var base = r.getAttribute('data-u1-pdp-files-base') || '';\n        var colorH = famSparkyColorH(r);\n        if (!base || !colorH) return;\n\n        var host1 = r.querySelector('[data-u1-pdp-step=\"sparky_color\"] [data-u1-pdp-mobile-gallery]');\n        if (host1) {\n          famBuildGallery(host1);\n          var srcs1 = ['side', 'front-side', 'rear', 'rear-side'].map(function (v) {\n            return base + 'pdp-sparky-' + colorH + '-' + v + '.jpg';\n          });\n          famSetSlides(host1, srcs1, 'c:' + colorH);\n        }\n\n        var host2 = r.querySelector('[data-u1-pdp-step=\"sparky_inserts\"] [data-u1-pdp-mobile-gallery]');\n        if (host2) {\n          famBuildGallery(host2);\n          var design = famHandleize(r.dataset.u1SparkyInsertDesign || '');\n          var insCol = famHandleize(r.dataset.u1SparkyInsertColor || '');\n          var file = (design && insCol)\n            ? 'pdp-insert-' + design + '-' + insCol + '-sparky-' + colorH + '.jpg'\n            : 'pdp-insert-none-sparky-' + colorH + '.jpg';\n          famSetSlides(host2, [base + file], 'i:' + file);\n        }\n      } catch (eMS) { /* noop */ }\n    }\n    function famMobileSyncSoon() {\n      [250, 900, 2000].forEach(function (ms) { window.setTimeout(famMobileSync, ms); });\n    }\n\n    /* \u2500\u2500 Titulos: prefijo \"AURA \" server-rendered oculto; aca solo se togglea \u2500\u2500 */\n    function famRetitle() {\n      try {\n        var r = famRoot();\n        if (!r) return;\n        var active = !!r.querySelector('.u1-pdp-step--pack-only.is-pack-active');\n        r.querySelectorAll('[data-u1-fam-prefix]').forEach(function (sp) { sp.hidden = !active; });\n        famMobileSyncSoon();\n      } catch (e1) { /* noop */ }\n    }\n\n    /* \u2500\u2500 Delegacion en document: sobrevive a cualquier re-render/timing \u2500\u2500 */\n    document.addEventListener('click', function (e) {\n      try {\n        var t = e.target && e.target.closest ? e.target : null;\n        if (!t) return;\n        var r;\n        var sc = t.closest('[data-u1-pdp-sparky-color]');\n        if (sc) {\n          r = famRoot(); if (!r) return;\n          pick('[data-u1-pdp-sparky-color-picker]', sc);\n          r.dataset.u1SparkyColorVid = sc.getAttribute('data-u1-pdp-sparky-variant-id') || '';\n          r.dataset.u1SparkyColorName = sc.getAttribute('data-u1-pdp-sparky-color-name') || '';\n          famTitleValue(r, 'sparky_color', r.dataset.u1SparkyColorName);\n          famGalleryRefresh(r);\n          famMobileSyncSoon();\n          return;\n        }\n        var ac = t.closest('[data-u1-pdp-adult-color]');\n        if (ac) {\n          r = famRoot(); if (!r) return;\n          pick('[data-u1-adult-group]', ac);\n          r.dataset.u1AdultColor = ac.getAttribute('data-u1-pdp-adult-color') || '';\n          r.dataset.u1AdultColorName = ac.getAttribute('data-u1-pdp-adult-color-name') || '';\n          famTitleValue(r, 'adult_color', r.dataset.u1AdultColorName);\n          famAdultSyncSizes(r);\n          famAdultPreorderNotice(r);\n          famGalleryRefresh(r);\n          famMobileSyncSoon();\n          return;\n        }\n        var asz = t.closest('[data-u1-pdp-adult-size]');\n        if (asz) {\n          r = famRoot(); if (!r) return;\n          var szGrp = asz.closest('[data-u1-pdp-adult-size-picker]');\n          if (szGrp) szGrp.querySelectorAll('[data-u1-pdp-adult-size]').forEach(function (b) {\n            var on = b === asz;\n            b.classList.toggle('is-selected', on);\n            b.setAttribute('aria-pressed', on ? 'true' : 'false');\n          });\n          r.dataset.u1AdultSize = asz.getAttribute('data-u1-pdp-adult-size') || '';\n          r.dataset.u1AdultSizeName = asz.getAttribute('data-u1-pdp-adult-size-name') || '';\n          famTitleValue(r, 'adult_size', r.dataset.u1AdultSizeName);\n          famAdultSizePill();\n          famAdultPreorderNotice(r);\n          return;\n        }\n        var tc = t.closest('[data-u1-pdp-torch-color]');\n        if (tc) {\n          r = famRoot(); if (!r) return;\n          pick('[data-u1-pdp-torch-color-picker]', tc);\n          r.dataset.u1TorchColorVid = tc.getAttribute('data-u1-pdp-torch-variant-id') || '';\n          r.dataset.u1TorchColorName = tc.getAttribute('data-u1-pdp-torch-color-name') || '';\n          famTitleValue(r, 'torch_color', r.dataset.u1TorchColorName);\n          famGalleryRefresh(r);\n          famMobileSyncSoon();\n          return;\n        }\n        var ic = t.closest('[data-u1-pdp-sparky-insert-color]');\n        if (ic) {\n          r = famRoot(); if (!r) return;\n          /* Solo deselecciona otros SWATCHES DE COLOR: la pill de modelo vive\n             en el mismo picker y pick() generico la barria tambien */\n          var icGrp = ic.closest('[data-u1-pdp-sparky-inserts-picker]');\n          if (icGrp) icGrp.querySelectorAll('[data-u1-pdp-sparky-insert-color][aria-pressed=\"true\"]').forEach(function (b) {\n            if (b !== ic) { b.classList.remove('is-selected'); b.setAttribute('aria-pressed', 'false'); }\n          });\n          ic.classList.add('is-selected');\n          ic.setAttribute('aria-pressed', 'true');\n          r.dataset.u1SparkyInsertColor = ic.getAttribute('data-u1-pdp-sparky-insert-color') || '';\n          r.dataset.u1SparkyInsertColorName = ic.getAttribute('data-u1-pdp-sparky-insert-color-name') || '';\n          famSetLabel(r, '[data-u1-fam-ins-color-label]', r.dataset.u1SparkyInsertColorName);\n          resolveInsertVariant(r);\n          syncInsAvail(r);\n          famGalleryRefresh(r);\n          famMobileSyncSoon();\n          return;\n        }\n        var dp = t.closest('[data-u1-pdp-sparky-insert-design]');\n        if (dp) {\n          r = famRoot(); if (!r) return;\n          var wrap = dp.closest('.u1-pdp-insert-models');\n          if (wrap) wrap.querySelectorAll('.u1-pdp-insert-pill').forEach(function (b) {\n            var on = b === dp;\n            b.classList.toggle('is-selected', on);\n            b.setAttribute('aria-pressed', on ? 'true' : 'false');\n          });\n          r.dataset.u1SparkyInsertDesign = dp.getAttribute('data-u1-pdp-sparky-insert-design') || '';\n          r.dataset.u1SparkyInsertDesignName = dp.getAttribute('data-u1-pdp-sparky-insert-design-name') || '';\n          famSetLabel(r, '[data-u1-fam-ins-model-label]', r.dataset.u1SparkyInsertDesignName);\n          resolveInsertVariant(r);\n          syncInsAvail(r);\n          famGalleryRefresh(r);\n          famMobileSyncSoon();\n          return;\n        }\n        /* Color principal: en la PDP de sparky alimenta la mini gallery de inserts */\n        if (t.closest('[data-u1-pdp-color]')) {\n          famMobileSyncSoon();\n        }\n        /* Cambio de pack: re-sincronizar prefijos y el grupo del casco adulto */\n        if (t.closest('[data-u1-pdp-bundle-card]')) {\n          [150, 600].forEach(function (ms) {\n            window.setTimeout(function () {\n              famRetitle();\n              try {\n                famAdultShowGroup();\n                var rr = famRoot(); if (!rr) return;\n                var g = famAdultActiveColorGroup();\n                var cs = g ? g.querySelector('[data-u1-pdp-adult-color].is-selected') : null;\n                if (cs) {\n                  rr.dataset.u1AdultColor = cs.getAttribute('data-u1-pdp-adult-color') || '';\n                  rr.dataset.u1AdultColorName = cs.getAttribute('data-u1-pdp-adult-color-name') || '';\n                  famTitleValue(rr, 'adult_color', rr.dataset.u1AdultColorName);\n                }\n                var sg = document.querySelector('[data-u1-pdp-adult-size-picker] [data-u1-adult-group]:not([hidden])');\n                var ss = sg ? sg.querySelector('[data-u1-pdp-adult-size].is-selected') : null;\n                if (ss) {\n                  rr.dataset.u1AdultSize = ss.getAttribute('data-u1-pdp-adult-size') || '';\n                  rr.dataset.u1AdultSizeName = ss.getAttribute('data-u1-pdp-adult-size-name') || '';\n                  famTitleValue(rr, 'adult_size', rr.dataset.u1AdultSizeName);\n                }\n                famAdultSyncSizes(rr);\n                famGalleryRefresh(rr);\n              } catch (ePK) { /* noop */ }\n            }, ms);\n          });\n        }\n      } catch (eC) { /* noop: jamas romper otros clicks */ }\n    });\n\n    /* \u2500\u2500 Init con reintentos: seed de defaults + retitle + marcador \u2500\u2500 */\n    function famInit() {\n      try {\n        var r = famRoot();\n        if (!r || !r.querySelector(FAM_SEL_STEP)) return false;\n        r.dataset.u1FamJs = 'v3';\n        r._u1FamRetitle = famRetitle;\n        r._u1FamCompItem = famCompItem;\n        r._u1FamCompSuffix = famCompSuffix;\n        r._u1FamImgCands = famImgCands;\n        famAdultShowGroup();\n        var aGrp = famAdultActiveColorGroup();\n        var aSel = aGrp ? aGrp.querySelector('[data-u1-pdp-adult-color].is-selected') : null;\n        if (aSel) {\n          r.dataset.u1AdultColor = aSel.getAttribute('data-u1-pdp-adult-color') || '';\n          r.dataset.u1AdultColorName = aSel.getAttribute('data-u1-pdp-adult-color-name') || '';\n          famTitleValue(r, 'adult_color', r.dataset.u1AdultColorName);\n        }\n        var aSzGrp = document.querySelector('[data-u1-pdp-adult-size-picker] [data-u1-adult-group]:not([hidden])');\n        var aSzSel = aSzGrp ? aSzGrp.querySelector('[data-u1-pdp-adult-size].is-selected') : null;\n        if (aSzSel) {\n          r.dataset.u1AdultSize = aSzSel.getAttribute('data-u1-pdp-adult-size') || '';\n          r.dataset.u1AdultSizeName = aSzSel.getAttribute('data-u1-pdp-adult-size-name') || '';\n          famTitleValue(r, 'adult_size', r.dataset.u1AdultSizeName);\n        }\n        if (r.dataset.u1AdultColor) famAdultSyncSizes(r);\n        var tSel = r.querySelector('[data-u1-pdp-torch-color].is-selected');\n        if (tSel) {\n          r.dataset.u1TorchColorVid = tSel.getAttribute('data-u1-pdp-torch-variant-id') || '';\n          r.dataset.u1TorchColorName = tSel.getAttribute('data-u1-pdp-torch-color-name') || '';\n        }\n        var c = r.querySelector('[data-u1-pdp-sparky-color].is-selected');\n        if (c) {\n          r.dataset.u1SparkyColorVid = c.getAttribute('data-u1-pdp-sparky-variant-id') || '';\n          r.dataset.u1SparkyColorName = c.getAttribute('data-u1-pdp-sparky-color-name') || '';\n        }\n        var i = r.querySelector('[data-u1-pdp-sparky-insert-color].is-selected');\n        if (i) {\n          r.dataset.u1SparkyInsertColor = i.getAttribute('data-u1-pdp-sparky-insert-color') || '';\n          r.dataset.u1SparkyInsertColorName = i.getAttribute('data-u1-pdp-sparky-insert-color-name') || '';\n        }\n        var d = r.querySelector('[data-u1-pdp-sparky-insert-design].is-selected');\n        if (d) {\n          r.dataset.u1SparkyInsertDesign = d.getAttribute('data-u1-pdp-sparky-insert-design') || '';\n          r.dataset.u1SparkyInsertDesignName = d.getAttribute('data-u1-pdp-sparky-insert-design-name') || '';\n        }\n        resolveInsertVariant(r);\n        famTitleValue(r, 'sparky_color', r.dataset.u1SparkyColorName);\n        famRetitle();\n        /* Recien ahora el estado del secundario esta sembrado: el hero del pack se\n           pide de nuevo (con deep link ?bundle=x el primer intento cae antes de esto\n           y por eso a veces quedaba la foto del producto solo). */\n        famGalleryRefresh(r);\n        famMobileSyncSoon();\n        return true;\n      } catch (eI) { return false; }\n    }\n    /* Los hooks se instalan SIEMPRE, incluso en PDPs sin steps de sparky (AURA/NEON\n       con Campus Pack): ahi famInit devuelve false y quedaban sin candidatos de\n       imagen (galeria vacia) y sin _u1FamCompItem, asi que el TORCH entraba al\n       carrito con su variante default (siempre Charcoal Black). */\n    function famInstallHooks() {\n      try {\n        var r = famRoot();\n        if (!r) return false;\n        r._u1FamImgCands = famImgCands;\n        r._u1FamCompItem = famCompItem;\n        r._u1FamCompSuffix = famCompSuffix;\n        r._u1FamRetitle = famRetitle;\n        /* Seed del color de TORCH (el pill ya viene marcado desde Liquid) */\n        var tS = document.querySelector('[data-u1-pdp-torch-color-picker] [data-u1-pdp-torch-color].is-selected');\n        if (tS && !r.dataset.u1TorchColorVid) {\n          r.dataset.u1TorchColorVid = tS.getAttribute('data-u1-pdp-torch-variant-id') || '';\n          r.dataset.u1TorchColorName = tS.getAttribute('data-u1-pdp-torch-color-name') || '';\n          famTitleValue(r, 'torch_color', r.dataset.u1TorchColorName);\n        }\n        try { if (r._u1UpdateBundleGallery) r._u1UpdateBundleGallery(); } catch (eU) { /* noop */ }\n        try { if (r._u1WarmBundleGallery) r._u1WarmBundleGallery(); } catch (eW) { /* noop */ }\n        return true;\n      } catch (eH) { return false; }\n    }\n    if (!famInstallHooks()) {\n      [200, 800, 2000].forEach(function (ms) {\n        window.setTimeout(function () { famInstallHooks(); }, ms);\n      });\n    }\n    if (!famInit()) {\n      [400, 1200, 3000].forEach(function (ms) {\n        window.setTimeout(function () { famInit(); }, ms);\n      });\n    }\n  } catch (eTop) {\n    try { console.error('[u1-family-js] init error:', eTop); } catch (e2) { /* noop */ }\n  }\n})();\n};\ndocument.querySelectorAll('script[data-u1-pdp-config]').forEach((el) => {\n  if (el.dataset.u1PdpBooted) return;\n  el.dataset.u1PdpBooted = '1';\n  let CFG;\n  try { CFG = JSON.parse(el.textContent); } catch (e) { console.error('[u1-pdp] config invalida', e); return; }\n  u1PdpBoot(CFG);\n});\n})();\n"],
  "mappings": "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",
  "names": ["q", "discUnit", "finalEl", "v", "src", "_add", "_pushBase", "toW", "labelEl", "bPrev", "bNext", "has", "remoteH", "winterH", "descEl", "colorH", "k", "cacheKey", "cached", "candidates", "expanded", "mi", "qi", "variants", "go", "famRoot", "insData", "resolveInsertVariant", "syncInsAvail", "pick", "famTitleValue", "famSetLabel", "famActive", "famActivePackHandle", "famAdultRetitle", "famAdultActiveColorGroup", "famAdultShowGroup", "famAdultSizeSeed", "famAdultSyncSizes", "famAdultVariants", "famAdultIsPreorder", "famAdultHit", "famToken", "famResolveAdultVid", "famAdultSizePill", "famAdultShipText", "famAdultPreorderNotice", "famCompItem", "famCompSuffix", "famPushLevel", "famImgCands", "famGalleryRefresh", "famHandleize", "famSparkyColorH", "famBuildGallery", "famGalleryGo", "i", "famSetSlides", "famPackMobileSync", "famMobileSync", "famMobileSyncSoon", "famRetitle", "famInit", "famInstallHooks"]
}
