{
  "version": 3,
  "sources": ["/cdn/shop/t/123/assets/fit-app-v57.js?fitb=checkout-nav-20260910a"],
  "sourcesContent": ["/* UPSELL_FALLBACK_20260818a */\n/* FIT \u2014 Shopify cart integration.\n * Wires the cart drawer to Shopify's AJAX Cart API.\n * Exposes window.FIT = { openCart, closeCart, addItem, checkout, refresh, addUpsell, addMagnetPads, addWarranty, addLifetime, addLoxxKit, addLoxxUpgrade }.\n * Upsell variant IDs are injected by layout/theme.liquid as window.FIT_UPSELLS (null when the product doesn't exist yet).\n * build: cart-total-refresh-20260812 \u2014 line-key change + totals always recompute after remove\n */\n/* fit-atc-pixel-fix LIVE 2026-08-14T12:00Z */\n/* fit-phantom-asset-fix 2026-08-14T11:50Z \u2014 strip ?v=504xx ghost theme URLs (404s after thrash) */\n\n(function(){\n  /* Run first: stop stale double-CDN injects that Clarity flags as JS errors */\n  try { window.__fitShopGridFix = true; } catch (e0) {}\n  try {\n    if (!window.__fitAppendPatch) {\n      window.__fitAppendPatch = true;\n      var _ap = Node.prototype.appendChild;\n      Node.prototype.appendChild = function (n) {\n        try {\n          if (n && n.tagName === 'SCRIPT' && n.src && String(n.src).indexOf('/cdn/cdn/') !== -1) {\n            n.src = String(n.src).replace('/cdn/cdn/', '/cdn/');\n          }\n        } catch (eA) {}\n        return _ap.apply(this, arguments);\n      };\n    }\n  } catch (eP) {}\n\n  /* Ghost theme asset versions (?v=504xx) 404 even when the file exists on the theme.\n     Page-cache freezes them into HTML/JS after partial asset thrash. Strip to bare path. */\n  try {\n    if (!window.__fitPhantomAssetFix) {\n      window.__fitPhantomAssetFix = true;\n      function fitFixPhantomUrl(u) {\n        if (!u || typeof u !== 'string') return u;\n        if (/\\/cdn\\/shop\\/t\\/\\d+\\/assets\\/[^\"'?\\s]+\\?v=504\\d+/i.test(u)) {\n          return u.replace(/\\?v=504\\d+[^\"'?\\s]*/i, '');\n        }\n        return u;\n      }\n      function fitFixPhantomEl(el) {\n        if (!el || !el.getAttribute) return;\n        ['src', 'poster', 'data-src', 'data-yt-modal', 'href'].forEach(function (attr) {\n          var v = el.getAttribute(attr);\n          if (!v) return;\n          var n = fitFixPhantomUrl(v);\n          if (n !== v) {\n            try { el.setAttribute(attr, n); } catch (eF) {}\n          }\n        });\n      }\n      function fitScanPhantom(root) {\n        try {\n          (root || document).querySelectorAll(\n            'img[src*=\"v=504\"],video[poster*=\"v=504\"],source[src*=\"v=504\"],button[data-yt-modal*=\"v=504\"],a[href*=\"v=504\"]'\n          ).forEach(fitFixPhantomEl);\n          // also catch without attribute selector quirks\n          (root || document).querySelectorAll('#galleryVideos img, #pdpInbox img, .pdp-inbox img, .gal-vid img, video#galleryVid').forEach(fitFixPhantomEl);\n        } catch (eS) {}\n      }\n      function fitRunPhantom() { fitScanPhantom(document); }\n      window.__fitFixPhantomThemeAssets = fitRunPhantom;\n      fitRunPhantom();\n      if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', fitRunPhantom);\n      setTimeout(fitRunPhantom, 60);\n      setTimeout(fitRunPhantom, 400);\n      setTimeout(fitRunPhantom, 1500);\n      try {\n        var mo = new MutationObserver(function () { fitRunPhantom(); });\n        if (document.documentElement) {\n          mo.observe(document.documentElement, { childList: true, subtree: true });\n          setTimeout(function () { try { mo.disconnect(); } catch (eD) {} }, 10000);\n        }\n      } catch (eM) {}\n    }\n  } catch (ePh) {}\n\n  const state = { cart: null, busy: false };\n  /* Layout page_cache can freeze FIT_UPSELLS as all-null \u2014 never trust blanks for cart upsells */\n  const _ups = window.FIT_UPSELLS || {};\n  const UP = {\n    cleaner: _ups.cleaner || 54916035707171,\n    magnetPads: _ups.magnetPads || 55038884348195,\n    warranty: _ups.warranty || 54916035641635,\n    lifetime: _ups.lifetime || 55324426502435,\n    loxxKit: _ups.loxxKit || 55324426436899,\n    loxxUpgrade: _ups.loxxUpgrade || 55324426600739\n  };\n  try { window.FIT_UPSELLS = UP; } catch (eUps) {}\n\n  async function refresh(){\n    try {\n      const r = await fetch('/cart.js', {\n        credentials: 'same-origin',\n        cache: 'no-store',\n        headers: { Accept: '*/*' }\n      });\n      if (!r.ok) throw new Error('cart-js-' + r.status);\n      state.cart = await r.json();\n    } catch (e){\n      try { console.warn('cart refresh', e); } catch (e1) {}\n      if (!state.cart) state.cart = { items: [], total_price: 0, items_subtotal_price: 0, item_count: 0 };\n    }\n    render();\n    return state.cart;\n  }\n\n  async function addItem(variantId, quantity = 1, properties = {}, opts){\n    if (!variantId) return;\n    await addItems([{ id: variantId, quantity, properties }], opts);\n  }\n\n  /**\n   * Fire AddToCart to Meta + Shopify web pixels + gtag.\n   * Ajax /cart/add.js does NOT always emit product_added_to_cart to Customer Events;\n   * without this, Meta/Klaviyo can show ViewContent with zero ATC (seen 2026-08-14).\n   * build: atc-pixel-fix-20260814\n   */\n  function trackAddToCart(addResponse, requestItems){\n    try {\n      var addedItems = [];\n      if (addResponse && Array.isArray(addResponse.items)) addedItems = addResponse.items;\n      else if (addResponse && addResponse.id) addedItems = [addResponse];\n      if (!addedItems.length && state.cart && Array.isArray(state.cart.items) && requestItems && requestItems.length) {\n        addedItems = state.cart.items.slice(-requestItems.length);\n      }\n      var ids = [];\n      var contents = [];\n      var value = 0;\n      var currency = (state.cart && state.cart.currency) || 'USD';\n      var cartLines = [];\n      for (var i = 0; i < addedItems.length; i++) {\n        var it = addedItems[i] || {};\n        var vid = String(it.variant_id || it.id || '');\n        var qty = Number(it.quantity || 1) || 1;\n        var lineCents = Number(it.final_line_price != null ? it.final_line_price : (it.line_price != null ? it.line_price : (it.price || 0) * qty));\n        var unitCents = Number(it.final_price != null ? it.final_price : (it.price || 0));\n        if (vid) ids.push(vid);\n        value += (lineCents || 0) / 100;\n        contents.push({ id: vid, quantity: qty, item_price: unitCents / 100 });\n        cartLines.push({\n          quantity: qty,\n          merchandise: {\n            id: vid ? ('gid://shopify/ProductVariant/' + vid) : undefined,\n            product: {\n              id: it.product_id ? ('gid://shopify/Product/' + it.product_id) : undefined,\n              title: it.product_title || it.title || ''\n            },\n            title: it.variant_title || it.title || '',\n            price: {\n              amount: (unitCents / 100).toFixed(2),\n              currencyCode: currency\n            }\n          }\n        });\n      }\n      if (!ids.length && requestItems && requestItems.length) {\n        for (var j = 0; j < requestItems.length; j++) {\n          var rid = String(requestItems[j].id || '');\n          if (rid) ids.push(rid);\n          contents.push({ id: rid, quantity: requestItems[j].quantity || 1 });\n        }\n      }\n      // Meta / Facebook browser pixel (classic fbq if present)\n      if (typeof window.fbq === 'function' && ids.length) {\n        try {\n          window.fbq('track', 'AddToCart', {\n            content_ids: ids,\n            content_type: 'product_group',\n            contents: contents,\n            value: Math.round(value * 100) / 100,\n            currency: currency\n          });\n        } catch (eFb) {}\n      }\n      // Shopify Customer Events \u2192 Meta web pixel + other CE apps\n      if (window.Shopify && Shopify.analytics && typeof Shopify.analytics.publish === 'function') {\n        try {\n          var payload = {\n            cartLine: cartLines[0] || { merchandise: { id: ids[0] ? ('gid://shopify/ProductVariant/' + ids[0]) : undefined } },\n            cartLines: cartLines\n          };\n          Shopify.analytics.publish('product_added_to_cart', payload);\n        } catch (ePub) {}\n      }\n      // Google\n      if (typeof window.gtag === 'function') {\n        try {\n          window.gtag('event', 'add_to_cart', {\n            currency: currency,\n            value: Math.round(value * 100) / 100,\n            items: ids.map(function (id, idx) {\n              return { item_id: id, quantity: (contents[idx] && contents[idx].quantity) || 1 };\n            })\n          });\n        } catch (eG) {}\n      }\n      if (window.dataLayer && Array.isArray(window.dataLayer)) {\n        try {\n          window.dataLayer.push({\n            event: 'add_to_cart',\n            ecommerce: { currency: currency, value: value, items: contents }\n          });\n        } catch (eDl) {}\n      }\n    } catch (eAll) {\n      try { console.warn('FIT trackAddToCart', eAll); } catch (eW) {}\n    }\n  }\n\n  /**\n   * Batch add \u2014 one refresh (avoids race when ATC adds cover + LOXX + bundle).\n   * opts.open defaults true (drawer). Pass { open: false } for direct checkout (no slide-out flash).\n   */\n  async function addItems(lines, opts){\n    opts = opts || {};\n    const shouldOpen = opts.open !== false;\n    const items = (lines || [])\n      .filter(l => l && l.id)\n      .map(l => ({\n        id: Number(l.id),\n        quantity: l.quantity || 1,\n        properties: l.properties || {}\n      }));\n    if (!items.length) throw new Error('no-items');\n    let r;\n    try {\n      r = await fetch('/cart/add.js', {\n        method: 'POST',\n        credentials: 'same-origin',\n        headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n        body: JSON.stringify({ items })\n      });\n    } catch (netErr) {\n      throw new Error('network');\n    }\n    if (!r.ok) {\n      let detail = '';\n      try { detail = await r.text(); } catch (e) {}\n      const err = new Error('add-failed');\n      err.status = r.status;\n      err.detail = detail;\n      throw err;\n    }\n    let addedPayload = null;\n    try { addedPayload = await r.json(); } catch (eJ) { addedPayload = null; }\n    try { await refresh(); } catch (e) { /* cart still added */ }\n    // Pixel / CE ATC \u2014 must run before checkout navigation\n    try { trackAddToCart(addedPayload, items); } catch (eT) {}\n    // Re-attach Google click IDs to cart attributes after ATC (checkout attribution)\n    try {\n      if (typeof window.__fitPersistGoogleClickIds === 'function') window.__fitPersistGoogleClickIds();\n      document.dispatchEvent(new CustomEvent('fit:cart-updated'));\n    } catch (e) {}\n    if (shouldOpen) {\n      /* Always force \u2014 Mag ATC retries / skip-flag races must not leave badge-up drawer-closed */\n      try { openCart(true); } catch (e) { window.location.href = '/cart'; }\n    } else {\n      try { closeCart(); } catch (e0) {}\n    }\n  }\n\n  /**\n   * Change qty / remove. Prefer Shopify line-item key (unique when same variant \u00D72\n   * with different properties). Fall back to 1-based line index.\n   * Always re-render totals from the change response or a fresh /cart.js.\n   * HARD RULE: quantity < 1 is refused unless opts.allowZero (Remove / LOXX swap only).\n   * Minus must never reach this with 0 \u2014 belt-and-suspenders against races / second handlers.\n   */\n  async function changeItem(line, quantity, opts){\n    opts = opts || {};\n    var qty = Number(quantity);\n    if (!isFinite(qty) || qty < 0) qty = 0;\n    if (qty < 1 && !opts.allowZero) {\n      try { console.warn('FIT changeItem blocked qty < 1 (use Remove)'); } catch (eB) {}\n      return state.cart;\n    }\n    const items = (state.cart && state.cart.items) || [];\n    var item = null;\n    if (opts.key) {\n      item = items.find(function(it){ return String(it.key) === String(opts.key); }) || null;\n    }\n    if (!item) item = items[line - 1] || null;\n    // Shopify: { id: line_item_key, quantity } is more reliable than { line }\n    const key = (opts.key && String(opts.key)) || (item && item.key) || '';\n    const body = key\n      ? { id: key, quantity: qty }\n      : { line: Number(line), quantity: qty };\n    let r;\n    try {\n      r = await fetch('/cart/change.js', {\n        method: 'POST',\n        credentials: 'same-origin',\n        cache: 'no-store',\n        headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n        body: JSON.stringify(body)\n      });\n    } catch (netErr) {\n      await refresh();\n      throw new Error('network');\n    }\n    if (r.ok) {\n      try {\n        const cart = await r.json();\n        // /cart/change.js returns the full cart \u2014 use it so totals match the server\n        if (cart && typeof cart === 'object' && Array.isArray(cart.items)) {\n          state.cart = cart;\n          render();\n          try { document.dispatchEvent(new CustomEvent('fit:cart-updated')); } catch (eD) {}\n          return state.cart;\n        }\n      } catch (eJ) { /* fall through to refresh */ }\n    }\n    // Fallback: re-fetch /cart.js (never leave stale totals on screen)\n    await refresh();\n    try { document.dispatchEvent(new CustomEvent('fit:cart-updated')); } catch (eD2) {}\n    return state.cart;\n  }\n\n  /* \u2500\u2500 Ship progress STANDARD (cart + PDP + SSR) \u2500\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   * Order today \u2192 In production (+2 biz days) \u2192 Ships on or before (+5 biz)\n   * Fill stops at center of step 1 (16.666%). Same labels/dates everywhere.\n   */\n  function addBizDays(from, n){\n    const d = new Date(from.getFullYear(), from.getMonth(), from.getDate());\n    let left = n;\n    while (left > 0){\n      d.setDate(d.getDate() + 1);\n      const day = d.getDay();\n      if (day !== 0 && day !== 6) left--;\n    }\n    return d;\n  }\n  function fmtShipDate(d){\n    return d.toLocaleDateString(undefined, { weekday: 'short', month: 'short', day: 'numeric' });\n  }\n  function shipProgressDates(){\n    const now = new Date();\n    return {\n      today: fmtShipDate(now),\n      production: fmtShipDate(addBizDays(now, 2)),\n      shipBy: fmtShipDate(addBizDays(now, 5)),\n      fillPct: 16.666\n    };\n  }\n  /**\n   * Paint a 3-step ship bar. Accepts:\n   *  - root element containing .psp-fill / .psp-step / .psp-dot\n   *  - or id prefix map via opts.ids = { fill, track, s1, s2, s3, step1, step2, step3, d1, d2, d3 }\n   */\n  function paintShipProgress(rootOrOpts){\n    const dates = shipProgressDates();\n    const fillPct = dates.fillPct;\n    let fill, track, s1, s2, s3, step1, step2, step3, d1, d2, d3;\n    if (rootOrOpts && rootOrOpts.nodeType === 1){\n      const root = rootOrOpts;\n      fill = root.querySelector('.psp-fill');\n      track = root.querySelector('.psp-track');\n      const steps = root.querySelectorAll('.psp-step');\n      step1 = steps[0]; step2 = steps[1]; step3 = steps[2];\n      s1 = step1 && step1.querySelector('span');\n      s2 = step2 && step2.querySelector('span');\n      s3 = step3 && step3.querySelector('span');\n      const dots = root.querySelectorAll('.psp-dot');\n      d1 = dots[0]; d2 = dots[1]; d3 = dots[2];\n    } else {\n      const ids = (rootOrOpts && rootOrOpts.ids) || {};\n      fill = document.getElementById(ids.fill || 'cartProgBar');\n      track = document.getElementById(ids.track || 'cartProgTrack')\n        || document.querySelector(ids.trackSel || '#cartProgress .psp-track');\n      s1 = document.getElementById(ids.s1 || 'cartPspStep1Txt');\n      s2 = document.getElementById(ids.s2 || 'cartPspStep2Txt');\n      s3 = document.getElementById(ids.s3 || 'cartPspStep3Txt');\n      step1 = document.getElementById(ids.step1 || 'cartPspStep1');\n      step2 = document.getElementById(ids.step2 || 'cartPspStep2');\n      step3 = document.getElementById(ids.step3 || 'cartPspStep3');\n      d1 = document.getElementById(ids.d1 || 'cartPspDot1');\n      d2 = document.getElementById(ids.d2 || 'cartPspDot2');\n      d3 = document.getElementById(ids.d3 || 'cartPspDot3');\n    }\n    if (fill) fill.style.width = fillPct + '%';\n    if (track) track.setAttribute('aria-valuenow', String(Math.round(fillPct)));\n    if (s1) s1.textContent = dates.today;\n    if (s2) s2.textContent = dates.production;\n    if (s3) s3.textContent = dates.shipBy;\n    /* Lock step titles to cart standard (never \u201CShips by\u201D / old copy) */\n    try {\n      var t1 = step1 && step1.querySelector('strong');\n      var t2 = step2 && step2.querySelector('strong');\n      var t3 = step3 && step3.querySelector('strong');\n      if (t1) t1.textContent = 'Order today';\n      if (t2) t2.textContent = 'In production';\n      if (t3) t3.textContent = 'Ships on or before';\n    } catch (eLab) {}\n    if (step1) { step1.classList.add('is-now'); step1.classList.remove('is-next'); }\n    if (step2) { step2.classList.add('is-next'); step2.classList.remove('is-now'); }\n    if (step3) { step3.classList.remove('is-now', 'is-next'); }\n    if (d1) d1.classList.add('is-active');\n    if (d2) d2.classList.remove('is-active');\n    if (d3) d3.classList.remove('is-active');\n    return dates;\n  }\n  function paintShipProgressAll(){\n    const cartRoot = document.getElementById('cartProgress');\n    if (cartRoot) paintShipProgress(cartRoot);\n    const pdpRoot = document.getElementById('pdpShipProgress');\n    if (pdpRoot) paintShipProgress(pdpRoot);\n    const ssrRoot = document.getElementById('ssrShipProgress');\n    if (ssrRoot) paintShipProgress(ssrRoot);\n  }\n\n  function money(cents){\n    const n = Number(cents);\n    if (!isFinite(n)) return '$0';\n    return '$' + (n / 100).toFixed(2).replace(/\\.00$/, '');\n  }\n  function cartSubtotalCents(c){\n    if (!c) return 0;\n    if (typeof c.items_subtotal_price === 'number') return c.items_subtotal_price;\n    if (typeof c.total_price === 'number') return c.total_price;\n    // Last resort: sum line prices\n    return (c.items || []).reduce(function(s, it){\n      return s + (Number(it.final_line_price) || Number(it.line_price) || 0);\n    }, 0);\n  }\n\n  function inCart(variantId){\n    if (!variantId || !state.cart) return false;\n    return state.cart.items.some(it => it.variant_id === Number(variantId));\n  }\n\n  /** Cover line (not accessory) \u2014 free removable mags with every cover order */\n  function isCoverItem(it){\n    const sku = (it && it.sku) || '';\n    if (sku && /^ACC-/i.test(sku)) return false;\n    if (sku && /^(UTV|JP|RV)-/i.test(sku)) return true;\n    // Fallback: product type / title when SKU missing\n    const t = ((it && it.product_title) || '') + ' ' + ((it && it.product_type) || '');\n    return /windshield|cover/i.test(t) && !/magnet|cleaner|warranty|pad/i.test(t);\n  }\n  function hasCoverItem(cart){\n    return !!(cart && cart.items && cart.items.some(isCoverItem));\n  }\n  function toggleGiftStrip(el, on){\n    if (!el) return;\n    if (on) {\n      el.classList.add('show');\n      el.removeAttribute('hidden');\n    } else {\n      el.classList.remove('show');\n      el.setAttribute('hidden', '');\n    }\n  }\n\n  function render(){\n    const pane = document.getElementById('cartItems');\n    const count = document.getElementById('cartCount');\n    const headCount = document.getElementById('cartHeadCount');\n    const subtotal = document.getElementById('cartSubtotal');\n    const totalEl = document.getElementById('cartTotal');\n    const c = state.cart;\n    if (!c) return;\n    // Prefer live sum of current lines so UI never shows a stale total after remove\n    const items = Array.isArray(c.items) ? c.items : [];\n    const liveCount = items.reduce(function(n, it){ return n + (Number(it.quantity) || 0); }, 0);\n    const liveSub = items.reduce(function(s, it){\n      return s + (Number(it.final_line_price) || Number(it.line_price) || 0);\n    }, 0);\n    const itemCount = (typeof c.item_count === 'number' ? c.item_count : liveCount);\n    const subCents = cartSubtotalCents(c);\n    // If server total disagrees with line sum after a change, trust the line sum\n    const displaySub = (items.length && liveSub > 0 && Math.abs(liveSub - subCents) > 1)\n      ? liveSub\n      : (subCents || liveSub);\n    if (count) count.textContent = String(itemCount || liveCount || '0');\n    if (headCount) headCount.textContent = String(itemCount || liveCount || '0');\n    if (subtotal) subtotal.textContent = money(displaySub);\n    if (totalEl) totalEl.textContent = money(typeof c.total_price === 'number' ? c.total_price : displaySub);\n\n    // Mirror sticky ADD build recap on drawer price row ($364 Mag vs $409 All-LOXX)\n    try {\n      const recapEl = document.getElementById('cartBuildRecap');\n      if (recapEl) {\n        const cover = items.find(isCoverItem);\n        if (cover) {\n          const props = cover.properties || {};\n          const ret = String(props.Retention || props.retention || props['Retention system'] || '');\n          const finish = String(props.Finish || props.finish || '');\n          const sku = String(cover.sku || '');\n          const isLoxx = /All-?LOXX/i.test(ret) || /-(CF-)?LX$/i.test(sku);\n          const isMag = /Magnetic/i.test(ret) || (/^(UTV|JP)-/.test(sku) && /-(BK|CF)$/.test(sku) && !isLoxx);\n          const isHybrid = /Hybrid/i.test(ret);\n          const retLabel = isLoxx ? 'All-LOXX\u00AE' : (isHybrid ? 'Hybrid Mag+LOXX\u00AE' : (isMag ? 'Magnetic' : (ret || 'Cover')));\n          const finishShort = /carbon/i.test(finish) ? 'Carbon fiber' : (/vinyl|marine/i.test(finish) ? 'Marine vinyl' : (finish || ''));\n          const bits = [retLabel];\n          if (finishShort) bits.push(finishShort);\n          const lineCents = Number(cover.final_line_price) || Number(cover.line_price) || 0;\n          const unitCents = cover.quantity > 1 ? Math.round(lineCents / cover.quantity) : lineCents;\n          let priceNote = '';\n          if (isMag && !isLoxx) {\n            priceNote = ' \u00B7 <span class=\"cbr-price\">$364 Mag \u00B7 All-LOXX\u00AE $409</span>';\n          } else if (isLoxx) {\n            priceNote = ' \u00B7 <span class=\"cbr-price\">$409 All-LOXX\u00AE</span>';\n          } else if (unitCents > 0) {\n            priceNote = ' \u00B7 <span class=\"cbr-price\">' + money(unitCents) + '</span>';\n          }\n          recapEl.innerHTML = '<span class=\"cbr-label\">Your build</span><b>' + bits.join(' \u00B7 ') + '</b>' +\n            (cover.quantity > 1 ? ' \u00D7 ' + cover.quantity : '') + priceNote;\n          recapEl.hidden = false;\n        } else {\n          recapEl.innerHTML = '';\n          recapEl.hidden = true;\n        }\n      }\n    } catch (eRecap) {}\n\n    // Ship progress \u2014 cart is the site standard (shared helper paints cart + every PDP)\n    const hasCover = hasCoverItem(c);\n    try { paintShipProgressAll(); } catch (eShip) {}\n    try {\n      const progSub = document.getElementById('cartProgSub');\n      if (progSub) {\n        progSub.hidden = true;\n        progSub.textContent = hasCover\n          ? 'Free shipping lower 48'\n          : (c.item_count > 0\n            ? 'Accessories ship at standard rates \u00B7 free ship when you add a cover'\n            : 'Free shipping lower 48 on every cover');\n      }\n      const legacyPct = document.getElementById('cartProgPct');\n      if (legacyPct) { legacyPct.textContent = ''; legacyPct.hidden = true; }\n      const legacyLab = document.getElementById('cartProgLabel');\n      if (legacyLab) { legacyLab.textContent = ''; legacyLab.hidden = true; }\n    } catch (eLeg) {}\n\n    // Never show free Mag Pads gift UI in the drawer (no strip / no fake line / no line notes)\n    const giftStrip = document.getElementById('cartGiftStrip');\n    toggleGiftStrip(giftStrip, false);\n\n    // Upsell discipline (Apple-simple cart):\n    // 1) LOXX swap for Mag UTV/Jeep only \u2014 ALWAYS first tile when Mag in cart\n    // 2) Else soft accessories (cleaner / warranty / pads)\n    // 3) Never stack LOXX + warranty + pads + cleaner\n    // 4) Do NOT upsell paid Removable Mag Pads when free gift already applies\n    const upsellWrap = document.getElementById('cartUpsells');\n    const upsellList = document.getElementById('cartUpsellsList');\n    const loxxEl = document.getElementById('cartLoxxUpsell');\n    const cleanerEl = document.getElementById('cartUpsell');\n    const padsEl = document.getElementById('cartMagnetPads');\n    const warrantyEl = document.getElementById('cartWarrantyUpsell');\n    const hide = (el) => { if (el) el.style.display = 'none'; };\n    hide(loxxEl); hide(cleanerEl); hide(padsEl); hide(warrantyEl);\n    if (upsellWrap) upsellWrap.style.display = 'none';\n\n    if (c.item_count > 0){\n      // Mag UTV/Jeep \u2192 All-LOXX +$45 (SKU -BK/-CF, or Mag retention prop; never -LX / All-LOXX)\n      const swappable = c.items.some(it => {\n        const sku = String(it.sku || '');\n        const props = it.properties || {};\n        const ret = String(props.Retention || props.retention || props['Retention system'] || '');\n        if (/All-?LOXX|LOXX\u00AE?\\s*Series/i.test(ret) && !/Magnetic/i.test(ret)) return false;\n        if (/^(UTV|JP)-/.test(sku) && /-(CF-)?LX$/i.test(sku)) return false;\n        if (/^(UTV|JP)-/.test(sku) && /-(BK|CF)$/.test(sku)) return true;\n        if (/Magnetic\\s*Series/i.test(ret) && /UTV|Jeep|JP-/i.test(sku + ' ' + (it.product_title || ''))) return true;\n        return false;\n      });\n      let showUpsell = false;\n      if (loxxEl && swappable && UP.loxxUpgrade && !inCart(UP.loxxUpgrade)){\n        // Pin All-LOXX as the first drawer tile whenever Mag is in cart\n        if (upsellList && loxxEl.parentNode === upsellList) {\n          upsellList.insertBefore(loxxEl, upsellList.firstChild);\n        }\n        try {\n          const mag = findMagCoverForLoxx(c);\n          const ttl = loxxEl.querySelector('.cut-title');\n          const cta = loxxEl.querySelector('.cut-cta');\n          if (mag && ttl) {\n            const rig = shortRigName(mag);\n            ttl.textContent = 'Optional: upgrade ' + rig + ' Mag \u2192 All-LOXX +$45';\n            if (cta) cta.textContent = 'Upgrade Mag \u2192 All-LOXX +$45';\n          }\n        } catch (eLbl) {}\n        loxxEl.style.display = '';\n        showUpsell = true;\n      } else {\n        // Soft accessories only when LOXX upgrade is NOT the active Mag upsell\n        if (cleanerEl && UP.cleaner && !inCart(UP.cleaner) && hasCover){\n          cleanerEl.style.display = '';\n          showUpsell = true;\n        }\n        if (warrantyEl && UP.warranty && !inCart(UP.warranty) && hasCover){\n          warrantyEl.style.display = '';\n          showUpsell = true;\n        }\n        if (padsEl && UP.magnetPads && !inCart(UP.magnetPads) && hasCover && !swappable){\n          padsEl.style.display = '';\n          showUpsell = true;\n        }\n      }\n      if (upsellWrap && showUpsell) upsellWrap.style.display = '';\n    }\n\n    if (!pane) return;\n    if (!items.length){\n      pane.innerHTML = '<p style=\"padding:40px;text-align:center;color:var(--muted)\">Your cart is empty.</p>';\n      return;\n    }\n    pane.innerHTML = items.map((it, idx) => {\n      const props = it.properties || {};\n      // Hide gift / internal props \u2014 no free Mag Pads spam in the drawer\n      const propKeys = Object.keys(props).filter(k => {\n        if (props[k] == null || !String(props[k]).length) return false;\n        if (k.charAt(0) === '_') return false;\n        if (/gift/i.test(k)) return false;\n        if (/mag\\s*pad|removable\\s*mag/i.test(k + ' ' + String(props[k]))) return false;\n        return true;\n      });\n      const propHtml = propKeys.length ? `<div style=\"margin-top:6px;font-size:11.5px;line-height:1.45;color:var(--slate-700)\">${propKeys.map(k => {\n        const val = String(props[k]);\n        const isUrl = /^https?:\\/\\//i.test(val);\n        const isPhoto = /^photo\\s*\\d/i.test(k) || /photo links/i.test(k);\n        if (isUrl && (isPhoto || /^https?:\\/\\//i.test(val))) {\n          return `<div><b>${k}:</b> <a href=\"${val}\" target=\"_blank\" rel=\"noopener\" style=\"color:var(--bluestone-700);word-break:break-all\">${isPhoto ? 'View photo \u2197' : val}</a></div>`;\n        }\n        if (/photo links/i.test(k) && val.indexOf('http') !== -1) {\n          const links = val.split(/\\s*\\|\\s*/).filter(u => /^https?:\\/\\//i.test(u));\n          return `<div><b>${k}:</b> ${links.map((u,i) => `<a href=\"${u}\" target=\"_blank\" rel=\"noopener\" style=\"color:var(--bluestone-700)\">Photo ${i+1} \u2197</a>`).join(' \u00B7 ')}</div>`;\n        }\n        return `<div><b>${k}:</b> ${val.length > 120 ? val.slice(0, 120) + '\u2026' : val}</div>`;\n      }).join('')}</div>` : '';\n      const lineKey = it.key ? String(it.key).replace(/\"/g, '&quot;') : '';\n      const linePrice = Number(it.final_line_price) || Number(it.line_price) || 0;\n      return `\n      <div class=\"cart-item\" data-line=\"${idx+1}\" data-key=\"${lineKey}\" data-variant-id=\"${it.variant_id || it.id || ''}\">\n        <a href=\"${it.url || '#'}\" style=\"flex-shrink:0\"><img src=\"${it.image || ''}\" alt=\"\" style=\"width:72px;height:72px;object-fit:cover;border-radius:8px;background:var(--bone)\"></a>\n        <div style=\"min-width:0;overflow:hidden\">\n          <a href=\"${it.url || '#'}\" style=\"color:inherit;text-decoration:none\"><div style=\"font-weight:600;font-size:14px;line-height:1.3;overflow-wrap:anywhere;word-break:break-word\">${it.product_title || 'Item'}</div></a>\n          <div style=\"color:var(--muted);font-size:12px;overflow-wrap:anywhere\">${it.variant_title && it.variant_title !== 'Default Title' ? it.variant_title : ''}</div>\n          ${it.sku ? `<div style=\"color:var(--muted);font-size:10.5px;letter-spacing:.05em;margin-top:2px\">${it.sku}</div>` : ''}\n          ${propHtml}\n          <div style=\"display:flex;align-items:center;flex-wrap:wrap;gap:8px 12px;margin-top:8px\">\n            <div class=\"qty-stepper small\">\n              <button type=\"button\" data-act=\"minus\" aria-label=\"Decrease quantity\"${it.quantity <= 1 ? ' disabled aria-disabled=\"true\"' : ''}>\u2212</button>\n              <span data-qty>${it.quantity}</span>\n              <button type=\"button\" data-act=\"plus\" aria-label=\"Increase quantity\">+</button>\n            </div>\n            <button type=\"button\" data-act=\"remove\" style=\"background:none;border:0;color:var(--muted);font-size:12px;cursor:pointer;text-decoration:underline;white-space:nowrap;flex-shrink:0\">Remove</button>\n          </div>\n        </div>\n        <div style=\"font-weight:700;flex-shrink:0\" data-line-price>${money(linePrice)}</div>\n      </div>`;\n    }).join('');\n  }\n\n  /* Visibility is CSS (.open / :not(.open) in fit-theme-v2). Only toggle class + clear\n     leftover inlines so stylesheet rules win \u2014 no timer/style wars with overlay-fix. */\n  function clearCartChromeInline(el){\n    if (!el || !el.style) return;\n    try {\n      ['pointer-events','opacity','visibility','transition','backdrop-filter','-webkit-backdrop-filter','z-index']\n        .forEach(function(p){ el.style.removeProperty(p); });\n    } catch (eCl) {}\n  }\n  function openCart(force){\n    /* PDP Checkout CTA briefly sets __fitSkipCartOpen so add\u2192checkout never flashes the drawer.\n       Header cart / explicit user open always wins (force or skip window expired). */\n    try {\n      if (!force && window.__fitSkipCartOpen) {\n        var until = window.__fitSkipCartUntil || 0;\n        if (until && Date.now() < until) return;\n        window.__fitSkipCartOpen = false;\n      }\n      if (force) {\n        window.__fitSkipCartOpen = false;\n        window.__fitSkipCartUntil = 0;\n      }\n    } catch (e0) {}\n    var d = document.getElementById('cartDrawer');\n    var o = document.getElementById('cartOverlay');\n    if (!d) {\n      try { window.location.href = '/cart'; } catch (eLoc) {}\n      return;\n    }\n    clearCartChromeInline(d);\n    clearCartChromeInline(o);\n    d.classList.add('open');\n    d.setAttribute('aria-hidden', 'false');\n    /* Never use inert \u2014 it blocks scroll + checkout on iOS/Safari */\n    d.removeAttribute('inert');\n    if (o) o.classList.add('open');\n    try { document.body.style.overflow = 'hidden'; } catch (eB) {}\n    try { refresh(); } catch (eR) {}\n    try {\n      var co = document.getElementById('cartCheckoutBtn');\n      if (co) {\n        setTimeout(function(){ try { co.focus({ preventScroll: true }); } catch (e) {} }, 150);\n      }\n    } catch (e2) {}\n  }\n  function closeCart(){\n    try { window.__fitAtcWantOpen = 0; } catch (eW) {}\n    var d = document.getElementById('cartDrawer');\n    var o = document.getElementById('cartOverlay');\n    if (d) {\n      d.classList.remove('open');\n      d.setAttribute('aria-hidden', 'true');\n      d.removeAttribute('inert');\n      clearCartChromeInline(d);\n    }\n    if (o) {\n      o.classList.remove('open');\n      clearCartChromeInline(o);\n    }\n    try { document.body.style.overflow = ''; } catch (eB) {}\n    try { document.documentElement.style.overflow = ''; } catch (eH) {}\n  }\n  function stampCheckoutAttrs(){\n    // Fire-and-forget \u2014 must NEVER gate navigation\n    try {\n      if (typeof window.__fitPersistGoogleClickIds === 'function') {\n        window.__fitPersistGoogleClickIds();\n      }\n    } catch (e0) {}\n    try {\n      var prev = (state.cart && state.cart.attributes) || {};\n      var attrs = Object.assign({}, prev, {\n        'Ship promise': 'Ships within 5 business days'\n      });\n      try {\n        var cookie = function(n){\n          try {\n            var m = document.cookie.match(new RegExp('(?:^|;\\\\s*)' + n + '=([^;]*)'));\n            return m ? decodeURIComponent(m[1]) : '';\n          } catch (eC) { return ''; }\n        };\n        var gclid = cookie('_ra_gclid') || cookie('gclid') || prev.gclid || prev._ra_gclid || '';\n        var gbraid = cookie('_ra_gbraid') || prev.gbraid || prev._ra_gbraid || '';\n        var wbraid = cookie('_ra_wbraid') || cookie('wbraid') || prev.wbraid || prev._ra_wbraid || '';\n        if (gclid) { attrs._ra_gclid = gclid; attrs.gclid = gclid; }\n        if (gbraid) { attrs._ra_gbraid = gbraid; attrs.gbraid = gbraid; }\n        if (wbraid) { attrs._ra_wbraid = wbraid; attrs.wbraid = wbraid; }\n      } catch (e1) {}\n      var body = JSON.stringify({ attributes: attrs });\n      if (navigator.sendBeacon) {\n        try {\n          navigator.sendBeacon('/cart/update.js', new Blob([body], { type: 'application/json' }));\n          return;\n        } catch (eB) {}\n      }\n      fetch('/cart/update.js', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n        body: body,\n        credentials: 'same-origin',\n        keepalive: true\n      }).catch(function(){});\n    } catch (e) {}\n  }\n  function checkout(){\n    // Navigate immediately \u2014 Mag/RV dead-click was await refresh()/fetch hanging after preventDefault\n    try { window.__fitCheckoutNavAt = Date.now(); } catch (eN) {}\n    stampCheckoutAttrs();\n    try { window.location.assign('/checkout'); } catch (eLoc) {\n      try { window.location.href = '/checkout'; } catch (e2) {}\n    }\n  }\n\n  // Checkout button \u2014 native href is source of truth; never block on network\n  document.addEventListener('click', function(e){\n    const a = e.target && e.target.closest && e.target.closest('#cartCheckoutBtn, a.cart-checkout');\n    if (!a) return;\n    try { window.__fitCheckoutNavAt = Date.now(); } catch (eN) {}\n    stampCheckoutAttrs();\n    // Prefer immediate assign so overlays/hung listeners can't eat the tap\n    try { window.location.assign(a.getAttribute('href') || '/checkout'); } catch (eLoc) {}\n    e.preventDefault();\n    e.stopPropagation();\n  }, true);\n\n  // Capture phase so no other theme/legacy listener can post qty 0 on the same tap\n  document.addEventListener('click', async (e) => {\n    try {\n      const t = e.target;\n      if (t.matches('[data-cart-open]') || t.closest('[data-cart-open]')){ e.preventDefault(); openCart(true); return; }\n      var closeEl = t.matches('[data-cart-close]') ? t : (t.closest && t.closest('[data-cart-close]'));\n      if (closeEl) {\n        /* #cartOverlay is data-cart-close \u2014 ignore ghost taps on the dimmer while Mag ATC\n           is still asserting open. X (.cart-close) always wins. */\n        try {\n          if (window.__fitAtcWantOpen && closeEl.id === 'cartOverlay') {\n            e.preventDefault();\n            return;\n          }\n        } catch (eAtc) {}\n        e.preventDefault();\n        closeCart();\n        return;\n      }\n      const actBtn = t.closest && t.closest('#cartDrawer [data-act], .cart-item [data-act]');\n      const row = t.closest && t.closest('.cart-item');\n      if (!row || !actBtn) return;\n      e.preventDefault();\n      e.stopPropagation();\n      try { e.stopImmediatePropagation(); } catch (eSip) {}\n      if (state.busy) return;\n      if (actBtn.disabled || actBtn.getAttribute('aria-disabled') === 'true') return;\n      if (!state.cart || !state.cart.items) { try { await refresh(); } catch (eR) { return; } }\n      const line = parseInt(row.getAttribute('data-line'), 10);\n      const key = row.getAttribute('data-key') || '';\n      // Prefer matching by line-item key so same-variant lines don't get confused\n      let item = null;\n      let lineNum = line;\n      if (key && state.cart.items) {\n        const idx = state.cart.items.findIndex(function(it){ return String(it.key) === key; });\n        if (idx >= 0) { item = state.cart.items[idx]; lineNum = idx + 1; }\n      }\n      if (!item) item = state.cart.items[line - 1] || null;\n      if (!item) { await refresh(); return; }\n      const act = actBtn.getAttribute('data-act');\n      // Prefer visible stepper qty if state is stale (plus\u2192minus race)\n      var domQtyEl = row.querySelector('[data-qty]');\n      var domQty = domQtyEl ? parseInt(domQtyEl.textContent, 10) : NaN;\n      var curQty = Number(item.quantity);\n      if (!isFinite(curQty) || curQty < 1) curQty = 1;\n      if (isFinite(domQty) && domQty > curQty) curQty = domQty;\n      state.busy = true;\n      try {\n        if (act === 'plus') await changeItem(lineNum, curQty + 1, { key: key });\n        else if (act === 'minus') {\n          // Never post quantity 0 via \u2212 \u2014 only Remove zeros the line (2\u21921, stay at 1)\n          const nextQty = curQty - 1;\n          if (nextQty < 1) return;\n          await changeItem(lineNum, nextQty, { key: key });\n        }\n        else if (act === 'remove') await changeItem(lineNum, 0, { key: key, allowZero: true });\n        // Always re-sync from server so subtotal can't stay on the old total\n        await refresh();\n      } finally {\n        state.busy = false;\n      }\n    } catch (err) {\n      state.busy = false;\n      try { console.warn('cart click', err); } catch (e2) {}\n      try { await refresh(); } catch (e3) {}\n    }\n  }, true);\n\n  // Mag UTV/Jeep cover in cart that can swap to All-LOXX (-LX SKU)\n  function findMagCoverForLoxx(cart){\n    const items = (cart && cart.items) || [];\n    return items.find(function(it){\n      const sku = String(it.sku || '');\n      if (!/^(UTV|JP)-/i.test(sku)) return false;\n      if (/-(CF-)?LX$/i.test(sku)) return false;\n      if (/-(BK|CF)$/i.test(sku)) return true;\n      const props = it.properties || {};\n      const ret = String(props.Retention || props.retention || '');\n      return /Magnetic/i.test(ret) && !/All-?LOXX/i.test(ret);\n    }) || null;\n  }\n\n  /** Short rig name for CTAs \u2014 \"Upgrade Defender to All-LOXX +$45\" */\n  function shortRigName(it){\n    let t = String((it && (it.product_title || it.title)) || 'your cover');\n    t = t.replace(/\\s*Windshield Cover.*$/i, '')\n      .replace(/\\([^)]*\\)/g, '')\n      .replace(/\\d{4}\\s*[-\u2013]\\s*\\d{4}/g, '')\n      .replace(/\\s+/g, ' ')\n      .trim();\n    const parts = t.split(/\\s+/).filter(Boolean);\n    if (parts.length >= 2 && /^can-?am$/i.test(parts[0])) return parts.slice(1).join(' ') || t;\n    if (parts.length >= 3 && /^cf$/i.test(parts[0]) && /^moto$/i.test(parts[1])) return parts.slice(2).join(' ') || t;\n    return t || 'your cover';\n  }\n\n  // LOXX cart upsell: swap the Mag cover line to its real -LX variant so the order\n  // books as one LOXX cover SKU (production reads the SKU). Only falls back to\n  // the standalone ACC-LOXX-UPG line when no LX variant exists for that cover.\n  async function addLoxxUpgrade(opts){\n    opts = opts || {};\n    /* Guard: mobile Mag mis-tap \u2014 LOXX tile overlapping Checkout must not swap Mag\u2192LX mid-nav */\n    try {\n      if (window.__fitCheckoutNavAt && (Date.now() - window.__fitCheckoutNavAt) < 1500) {\n        return { ok: false, skipped: 'checkout-nav' };\n      }\n    } catch (eGuard) {}\n    const c = state.cart || await refresh();\n    const cover = findMagCoverForLoxx(c);\n    if (cover){\n      let lxSku = null;\n      const sku = String(cover.sku || '');\n      if (/-BK$/i.test(sku)) lxSku = sku.replace(/-BK$/i, '-LX');\n      else if (/-CF$/i.test(sku)) lxSku = sku + '-LX';\n      if (lxSku){\n        try {\n          const p = await (await fetch('/products/' + cover.handle + '.js', { headers: { Accept: '*/*' } })).json();\n          const lx = (p.variants || []).find(v => v.sku === lxSku);\n          if (lx && lx.available !== false){\n            const line = c.items.indexOf(cover) + 1;\n            const q = cover.quantity || 1;\n            const props = Object.assign({}, cover.properties || {});\n            props.Retention = 'All-LOXX';\n            try { delete props['Free Mag Pads']; delete props['free mag pads']; } catch (eP) {}\n            await changeItem(line, 0, { key: cover.key, allowZero: true });\n            await addItem(lx.id, q, props, { open: opts.open !== false });\n            return { ok: true, swapped: true, cover: cover, lxSku: lxSku, rig: shortRigName(cover) };\n          }\n        } catch(e){ /* fall through to standalone upgrade line */ }\n      }\n    }\n    await addItem(UP.loxxUpgrade, 1, {}, { open: opts.open !== false });\n    return { ok: true, swapped: false, cover: cover, rig: cover ? shortRigName(cover) : '' };\n  }\n\n  window.FIT = {\n    openCart, closeCart, addItem, addItems, trackAddToCart, checkout, refresh,\n    addUpsell(){ addItem(UP.cleaner); },\n    addMagnetPads(){ addItem(UP.magnetPads); },\n    addWarranty(){ addItem(UP.warranty); },\n    addLifetime(){ addItem(UP.lifetime); },\n    addLoxxKit(){ addItem(UP.loxxKit); },\n    addLoxxUpgrade,\n    findMagCoverForLoxx,\n    shortRigName,\n    /* Cart-standard ship timeline for PDP / SSR / any page */\n    shipProgressDates,\n    paintShipProgress,\n    paintShipProgressAll\n  };\n  function bootShipProgress(){\n    try { paintShipProgressAll(); } catch (e0) {}\n  }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', bootShipProgress);\n  else bootShipProgress();\n  setTimeout(bootShipProgress, 50);\n  setTimeout(bootShipProgress, 400);\n  document.addEventListener('DOMContentLoaded', refresh);\n\n  /* Header announce marquee \u2014 page_cache can freeze old static bar; rehydrate section */\n  (function rehydrateHeaderAnnounce(){\n    try {\n      if (window.__FIT_HEADER_ANNOUNCE_LIVE) return;\n      var html = document.documentElement.innerHTML || '';\n      if (html.indexOf('fit-header-announce:marquee-usa-warranty') !== -1 && html.indexOf('fitAnnounceScroll') !== -1) return;\n      var target = document.getElementById('shopify-section-header-v2');\n      if (!target) return;\n      window.__FIT_HEADER_ANNOUNCE_LIVE = true;\n      var path = location.pathname || '/';\n      /* Avoid /?sections= (IndexController page_cache); product/collection paths return fresh */\n      var base = /^\\/(products|collections|pages)\\//.test(path) ? path : '/collections/shop-utv-new';\n      var url = base + (location.search && base === path ? (location.search + '&') : '?') + 'sections=header-v2';\n      if (base !== path) url = base + '?sections=header-v2';\n      fetch(url, { credentials: 'same-origin', cache: 'no-store', headers: { Accept: '*/*' } })\n        .then(function(r){ return r.json(); })\n        .then(function(data){\n          var fresh = data && data['header-v2'];\n          if (!fresh || fresh.indexOf('fitAnnounceScroll') === -1) return;\n          var tmp = document.createElement('div');\n          tmp.innerHTML = fresh;\n          var el = tmp.firstElementChild || tmp;\n          target.replaceWith(el);\n          /* re-bind mobile drawer after header replace */\n          try {\n            var btn = document.getElementById('navMobileBtn');\n            var drawer = document.getElementById('mobileNavDrawer');\n            if (btn && drawer && !btn.__fitBound) {\n              btn.__fitBound = true;\n              btn.addEventListener('click', function(){\n                var open = drawer.classList.toggle('open');\n                drawer.setAttribute('aria-hidden', open ? 'false' : 'true');\n              });\n              drawer.querySelectorAll('[data-close]').forEach(function(el2){\n                el2.addEventListener('click', function(){\n                  drawer.classList.remove('open');\n                  drawer.setAttribute('aria-hidden', 'true');\n                });\n              });\n            }\n          } catch (eBind) {}\n          document.body.setAttribute('data-fit-header-announce', 'marquee-live');\n        })\n        .catch(function(){ window.__FIT_HEADER_ANNOUNCE_LIVE = false; });\n    } catch (e) {}\n  })();\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', function(){ try { /* re-run if needed */ } catch (e0) {} });\n  setTimeout(function(){\n    try {\n      if (document.documentElement.innerHTML.indexOf('fitAnnounceScroll') === -1) {\n        window.__FIT_HEADER_ANNOUNCE_LIVE = false;\n        /* second pass */\n        var t = document.getElementById('shopify-section-header-v2');\n        if (t && !document.body.getAttribute('data-fit-header-announce')) {\n          /* function already ran once; allow retry by clearing flag before re-invoke not available \u2014 fetch inline */\n          fetch('/collections/shop-utv-new?sections=header-v2', { credentials: 'same-origin', cache: 'no-store', headers: { Accept: '*/*' } })\n            .then(function(r){ return r.json(); })\n            .then(function(data){\n              var fresh = data && data['header-v2'];\n              var target = document.getElementById('shopify-section-header-v2');\n              if (!fresh || !target || fresh.indexOf('fitAnnounceScroll') === -1) return;\n              var tmp = document.createElement('div');\n              tmp.innerHTML = fresh;\n              target.replaceWith(tmp.firstElementChild || tmp);\n              document.body.setAttribute('data-fit-header-announce', 'marquee-live');\n            }).catch(function(){});\n        }\n      }\n    } catch (e1) {}\n  }, 600);\n})();\n\n/* ===== Mobile: body padding when fixed bottom bars are visible (sticky CTA / ATC) ===== */\n(function(){\n  function syncStickyPad(){\n    try {\n      var sticky = document.querySelector('.sticky-mobile-cta.visible, #home-sticky-cta.visible');\n      var atc = document.querySelector('.mobile-atc-bar');\n      var cfg = document.getElementById('cfgStickyBar');\n      var atcOn = atc && window.getComputedStyle(atc).display !== 'none';\n      var cfgOn = cfg && !cfg.hidden && window.getComputedStyle(cfg).display !== 'none';\n      // PDP / custom-fit already pad via their own body classes \u2014 still flag for shared CSS\n      if (sticky || atcOn || cfgOn) document.body.classList.add('has-sticky-cta');\n      else document.body.classList.remove('has-sticky-cta');\n    } catch (e) {}\n  }\n  function boot(){\n    syncStickyPad();\n    var sticky = document.getElementById('stickyCta') || document.querySelector('.sticky-mobile-cta');\n    if (sticky && window.MutationObserver){\n      new MutationObserver(syncStickyPad).observe(sticky, { attributes: true, attributeFilter: ['class'] });\n    }\n    var cfg = document.getElementById('cfgStickyBar');\n    if (cfg && window.MutationObserver){\n      new MutationObserver(syncStickyPad).observe(cfg, { attributes: true, attributeFilter: ['hidden', 'class', 'style'] });\n    }\n    window.addEventListener('scroll', syncStickyPad, { passive: true });\n    window.addEventListener('resize', syncStickyPad, { passive: true });\n  }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', boot);\n  else boot();\n})();\n\n/* ===== Video modal \u2014 [data-yt-modal] opens local mp4 or YouTube id; [data-yt-portrait] for vertical ===== */\n(function(){\n  let modal = null;\n  /* Inject layout CSS if theme CSS is stale/cached without .yt-modal (audio-only bug) */\n  function ensureYtCss(){\n    if (document.getElementById('fit-yt-modal-css')) return;\n    try {\n      var probe = document.createElement('div');\n      probe.className = 'yt-modal';\n      probe.style.cssText = 'position:absolute;left:-9999px;visibility:hidden';\n      document.body.appendChild(probe);\n      var cs = window.getComputedStyle(probe);\n      var ok = cs.position === 'fixed' || cs.zIndex === '1100' || cs.zIndex === '1000';\n      probe.remove();\n      if (ok) return;\n    } catch (e0) {}\n    var s = document.createElement('style');\n    s.id = 'fit-yt-modal-css';\n    s.textContent =\n      '.yt-modal{position:fixed;inset:0;z-index:1100;display:none;align-items:center;justify-content:center;padding:32px;pointer-events:none}'+\n      '.yt-modal.open{display:flex!important;pointer-events:auto}'+\n      '.yt-modal-backdrop{position:absolute;inset:0;background:rgba(8,11,14,.88);backdrop-filter:blur(6px)}'+\n      '.yt-modal-dialog{position:relative;width:min(1040px,100%);z-index:1}'+\n      '.yt-modal-frame{position:relative;width:100%;aspect-ratio:16/9;background:#000;border-radius:16px;overflow:hidden;box-shadow:0 30px 90px rgba(0,0,0,.6)}'+\n      '.yt-modal-frame.portrait{aspect-ratio:9/16;width:min(400px,92vw);margin:0 auto}'+\n      '.yt-modal-frame iframe,.yt-modal-frame video{position:absolute!important;inset:0!important;width:100%!important;height:100%!important;border:0!important;object-fit:contain;background:#000;display:block}'+\n      '.yt-modal-close{position:absolute;top:-14px;right:-14px;width:44px;height:44px;border-radius:50%;background:#F4F1EC;color:#141C23;border:none;display:grid;place-items:center;cursor:pointer;z-index:2;padding:0;box-shadow:0 6px 20px rgba(0,0,0,.4)}'+\n      '@media (max-width:640px){.yt-modal{padding:16px}.yt-modal-close{top:-10px;right:0}}';\n    (document.head || document.documentElement).appendChild(s);\n  }\n  function ensureModal(){\n    ensureYtCss();\n    if (modal) return modal;\n    modal = document.createElement('div');\n    modal.id = 'ytModal';\n    modal.className = 'yt-modal';\n    modal.setAttribute('aria-hidden','true');\n    modal.innerHTML =\n      '<div class=\"yt-modal-backdrop\" data-yt-close></div>'+\n      '<div class=\"yt-modal-dialog\">'+\n        '<button type=\"button\" class=\"yt-modal-close\" data-yt-close aria-label=\"Close video\">'+\n          '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\"><path d=\"M6 6l12 12M18 6L6 18\"/></svg>'+\n        '</button>'+\n        '<div class=\"yt-modal-frame\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Video player\"></div>'+\n      '</div>';\n    document.body.appendChild(modal);\n    const frame = modal.querySelector('.yt-modal-frame');\n    const close = () => {\n      modal.classList.remove('open');\n      modal.setAttribute('aria-hidden','true');\n      try {\n        frame.querySelectorAll('video').forEach(function(v){ try { v.pause(); } catch (e) {} });\n      } catch (e1) {}\n      frame.innerHTML = '';\n      document.documentElement.style.overflow = '';\n      try { document.body.style.overflow = ''; } catch (e2) {}\n    };\n    modal.addEventListener('click', e => { if (e.target.closest('[data-yt-close]')) close(); });\n    document.addEventListener('keydown', e => { if (e.key === 'Escape' && modal.classList.contains('open')) close(); });\n    const mediaCss = 'position:absolute;inset:0;width:100%;height:100%;border:0;object-fit:contain;background:#000;display:block';\n    const buildYT = (ytId) => {\n      const ifr = document.createElement('iframe');\n      ifr.src = 'https://www.youtube-nocookie.com/embed/' + ytId + '?rel=0&autoplay=1&playsinline=1&modestbranding=1';\n      ifr.allow = 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share';\n      ifr.setAttribute('allowfullscreen', '');\n      ifr.allowFullscreen = true;\n      ifr.title = 'FIT Protection video';\n      ifr.style.cssText = mediaCss;\n      ifr.setAttribute('frameborder', '0');\n      return ifr;\n    };\n    modal._open = (id, portrait) => {\n      ensureYtCss();\n      frame.classList.toggle('portrait', !!portrait);\n      frame.innerHTML = '';\n      if (!id) return;\n      // Normalize protocol-relative CDN URLs so <video> always loads on https\n      let src = String(id).trim();\n      if (src.indexOf('//') === 0) src = 'https:' + src;\n      const isYtId = /^[\\w-]{6,20}$/.test(src) && src.indexOf('.') === -1 && src.indexOf('/') === -1;\n      const isFile = !isYtId && (/\\.(mp4|webm|mov)(\\?|#|$)/i.test(src) || /\\/cdn\\/|\\.myshopify\\.com\\//i.test(src) || /fitprotection\\.com\\/cdn\\//i.test(src));\n      if (isFile){\n        const vid = document.createElement('video');\n        vid.src = src;\n        vid.controls = true; vid.autoplay = true; vid.playsInline = true; vid.muted = false;\n        vid.setAttribute('playsinline','');\n        vid.setAttribute('webkit-playsinline','');\n        vid.setAttribute('preload','auto');\n        vid.style.cssText = mediaCss;\n        // If local mp4 fails, fall back to known YouTube hold-test\n        vid.addEventListener('error', () => {\n          try {\n            frame.innerHTML = '';\n            frame.appendChild(buildYT('TV7gO41VEz0'));\n          } catch (e) {}\n        }, { once: true });\n        frame.appendChild(vid);\n        vid.play().catch(()=>{});\n      } else if (isYtId || src){\n        const ytId = isYtId ? src : src;\n        frame.appendChild(buildYT(ytId));\n      }\n      modal.classList.add('open');\n      modal.setAttribute('aria-hidden','false');\n      document.documentElement.style.overflow = 'hidden';\n      try { document.body.style.overflow = 'hidden'; } catch (e3) {}\n    };\n    modal._close = close;\n    return modal;\n  }\n  document.addEventListener('click', e => {\n    const el = e.target.closest('[data-yt-modal]');\n    if (!el) return;\n    e.preventDefault();\n    e.stopPropagation();\n    ensureModal()._open(el.getAttribute('data-yt-modal'), el.hasAttribute('data-yt-portrait'));\n  }, true);\n})();\n\n/* Mobile/tablet only: pin journey hero. Desktop uses hero-desktop-column.jpg from CSS. */\n(function forceMobileJourneyHero(){\n  function apply(){\n    if(!document.body||!document.body.classList.contains(\"index-body\")) return;\n    if(document.getElementById(\"fit-hero-mobile-journey-js\")) return;\n    var s=document.createElement(\"style\");\n    s.id=\"fit-hero-mobile-journey-js\";\n    s.textContent=\"@media (max-width:900px){.hero-visual::before{background-image:url('https://fitprotection.com/cdn/shop/t/102/assets/hero-loxx-mobile-banner.jpg')!important;background-size:cover!important;background-position:center 38%!important;background-repeat:no-repeat!important}}\";\n    (document.head||document.documentElement).appendChild(s);\n  }\n  if(document.readyState===\"loading\") document.addEventListener(\"DOMContentLoaded\",apply);\n  else apply();\n})();\n\n\n\n/* shield-only: never inject FIT wordmark into header logo */\n(function(){\n  function strip(){\n    try{\n      document.querySelectorAll('a.logo.logo-home .logo-home-word, a.logo.logo-home > span').forEach(function(el){ el.remove(); });\n    }catch(e){}\n  }\n  if(document.readyState==='loading') document.addEventListener('DOMContentLoaded',strip); else strip();\n  setTimeout(strip,200);\n})();\n\n/* Sticky mobile CTA: single Find My Cover on homepage */\n(function(){\n  function fixHomeShell(){\n    try {\n      if (!document.body) return;\n      var path = (location.pathname || '/').replace(/\\/+$/, '') || '/';\n      if (path !== '/') return;\n      var sticky = document.getElementById('stickyCta');\n      if (!sticky) return;\n      var inner = sticky.querySelector('.sticky-mobile-cta-inner') || sticky;\n      inner.classList.add('sticky-single');\n      var secondary = sticky.querySelector('a.s-secondary');\n      if (secondary) secondary.remove();\n      var primary = sticky.querySelector('a.s-primary') || sticky.querySelector('a');\n      if (primary) {\n        primary.id = primary.id || 'stickyFindCover';\n        primary.setAttribute('href', '#fitment');\n        primary.innerHTML = 'Find My Cover <span aria-hidden=\"true\">\u2192</span>';\n      }\n    } catch (e) {}\n  }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', fixHomeShell);\n  else fixHomeShell();\n  setTimeout(fixHomeShell, 200);\n})();\n\n/* Fitment Find button: always tappable; incomplete \u2192 open Brand/Model */\n(function(){\n  function openSelect(sel){\n    if (!sel) return;\n    try {\n      sel.focus({ preventScroll: false });\n      if (typeof sel.showPicker === 'function') sel.showPicker();\n    } catch (e) {\n      try { sel.focus(); } catch (e2) {}\n    }\n  }\n  function guideFind(){\n    var brand = document.getElementById('fitBrand');\n    var model = document.getElementById('fitModel');\n    var hint = document.getElementById('fitHint');\n    if (hint) {\n      hint.textContent = 'Tap Brand, then Model \u2014 then Configure appears.';\n      hint.classList.add('show');\n    }\n    if (brand && !brand.value) openSelect(brand);\n    else if (model) openSelect(model);\n    else if (brand) openSelect(brand);\n  }\n  function patch(){\n    try {\n      var btn = document.getElementById('fitFindBtn');\n      if (btn) {\n        btn.style.setProperty('pointer-events', 'auto', 'important');\n        btn.style.setProperty('cursor', 'pointer', 'important');\n        if (!btn.__fitFindPatched) {\n          btn.__fitFindPatched = true;\n          btn.addEventListener('click', function(e){\n            var blocked = btn.classList.contains('is-blocked') || btn.getAttribute('aria-disabled') === 'true';\n            var href = (btn.getAttribute('href') || '');\n            if (blocked || href === '#fitment' || href === '' || href === '#') {\n              e.preventDefault();\n              e.stopPropagation();\n              guideFind();\n            }\n          }, true);\n        }\n      }\n      var label = document.getElementById('fitBarLabel') || document.querySelector('.hero-fitment-label');\n      if (label && !label.__fitLabelPatched) {\n        label.__fitLabelPatched = true;\n        label.style.cursor = 'pointer';\n        label.addEventListener('click', function(e){\n          e.preventDefault();\n          guideFind();\n        });\n      }\n      /* Model empty option label */\n      var model = document.getElementById('fitModel');\n      if (model && model.options && model.options[0] && !model.options[0].value) {\n        if (model.options[0].textContent !== 'Model') model.options[0].textContent = 'Model';\n      }\n    } catch (e) {}\n  }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', patch);\n  else patch();\n  setTimeout(patch, 200);\n  setTimeout(patch, 800);\n})();\n\n\n/* One-shot: replace stale homepage with live section (busts IndexController page_cache) */\n(function(){\n  var HOME_VER='v54-bs-rv-20260813';\n  var SECS=['home-main-v55','home-main-v54','home-main-v53'];\n  function isHome(){\n    var p=(location.pathname||'/').replace(/\\/+$/,'')||'/';\n    return p==='/'||p==='/index';\n  }\n  function needs(){\n    try{\n      var html=document.documentElement.innerHTML||'';\n      if(html.indexOf('data-bs-version=\"v55\"')!==-1 && html.indexOf(HOME_VER)!==-1) return false;\n      if(document.querySelector('.hero-visual-hit, .hero-visual-cta')) return true;\n      if(document.querySelector('.hero-visual') && !document.querySelector('.hero-picture, picture.hero-picture, .hero-visual picture')) return true;\n      if(html.indexOf('hero-loxx-mobile-banner')===-1 && document.querySelector('.hero-visual')) return true;\n      if(html.indexOf('data-bs-version=\"v55\"')===-1) return true;\n      if(html.indexOf('rockwood-mini-lite-cover')===-1) return true;\n      var el=document.getElementById('fitment');\n      if(!el) return true;\n      return (el.getAttribute('data-fit-home')||'')!==HOME_VER;\n    }catch(e){ return true; }\n  }\n  function killHeroTap(){\n    try{\n      document.querySelectorAll('.hero-visual-hit, .hero-visual-cta').forEach(function(n){ n.remove(); });\n    }catch(e){}\n  }\n  function runScripts(root){\n    if(!root) return;\n    root.querySelectorAll('script').forEach(function(old){\n      var s=document.createElement('script');\n      if(old.src){s.src=old.src;s.async=false;} else s.textContent=old.textContent||'';\n      old.parentNode.replaceChild(s,old);\n    });\n  }\n  function apply(html){\n    if(!html||(html.indexOf('data-fit-home=\"'+HOME_VER+'\"')===-1&&html.indexOf('data-bs-version=\"v55\"')===-1&&html.indexOf('hero-loxx-mobile-banner')===-1)) return false;\n    var target=document.querySelector('[id*=\"home_main_v53\"]')||document.querySelector('[id*=\"home_main_v54\"]')\n      ||document.getElementById('shopify-section-home-main-v54')||document.getElementById('shopify-section-home-main-v53')||document.getElementById('shopify-section-home-main-v52')||document.getElementById('shopify-section-home-main-v51')||document.getElementById('shopify-section-home-main-v48')||document.getElementById('shopify-section-home-main-v47')\n      ||document.getElementById('shopify-section-home-main-live')\n      ||document.getElementById('shopify-section-home-main')\n      ||(document.getElementById('fitment')&&document.getElementById('fitment').closest('[id^=\"shopify-section\"]'))\n      ||document.getElementById('MainContent');\n    if(!target) return false;\n    var tmp=document.createElement('div');\n    tmp.innerHTML=html;\n    var fresh=tmp.firstElementChild||tmp;\n    if(target.id==='MainContent'){\n      var old=target.querySelector('[id^=\"shopify-section\"]')||target.firstElementChild;\n      if(old) old.replaceWith(fresh); else target.prepend(fresh);\n    } else {\n      target.replaceWith(fresh);\n    }\n    runScripts(fresh);\n    killHeroTap();\n    document.body.setAttribute('data-fit-home-live', HOME_VER);\n    return true;\n  }\n  function go(){\n    try{\n      killHeroTap();\n      if(!isHome()||!needs()||window.__FIT_HOME_LIVE) return;\n      window.__FIT_HOME_LIVE=true;\n      var tries=SECS.slice();\n      function attempt(){\n        if(!tries.length){ window.__FIT_HOME_LIVE=false; return; }\n        var sec=tries.shift();\n        fetch('/index?sections='+encodeURIComponent(sec),{credentials:'same-origin',cache:'no-store'})\n          .then(function(r){return r.json();})\n          .then(function(data){\n            var html=data&&data[sec];\n            if(!html||!apply(html)) attempt();\n          }).catch(function(){ attempt(); });\n      }\n      attempt();\n    }catch(e){}\n  }\n  if(document.readyState==='loading') document.addEventListener('DOMContentLoaded',go); else go();\n  setTimeout(go,400);\n  setTimeout(killHeroTap,0);\n  setTimeout(killHeroTap,200);\n})();\n\n/* Custom-fit page_cache rehydrate \u2014 DISABLED.\n   Remounting the main section mid-flow wiped contact fields and locked ATC.\n   Live /pages/custom-fit-order already ships the measure tool; do not replace it. */\n(function(){\n  try {\n    if (/\\/pages\\/custom-fit(?:-order|-request|-v2)?\\/?$/.test(location.pathname || '')) {\n      window.__FIT_CUSTOM_REF_LIVE = true; // block any older cached copies of this IIFE\n    }\n  } catch (e) {}\n})();\n\n/* fit-shop-grid-fix is loaded from layout via asset_url \u2014 do not inject a second\n   CDN URL here (Shopify.cdnHost already includes /cdn \u2192 double-path console errors). */\n\n/* PDP rehydrate \u2014 only recover truly broken shells; never downgrade v21 \u2192 v18 */\n(function(){\n  var PDP_MARK = 'v21-rv-hero-featured';\n  var SEC_KEYS = ['product-page-v21', 'product-page-v20', 'product-page-v19'];\n  function isProduct(){\n    return (document.body && document.body.getAttribute('data-template') === 'product')\n      || /^\\/products\\//.test(location.pathname || '');\n  }\n  function isLoxxUpgradePath(){\n    return /\\/products\\/loxx-retention-upgrade\\/?$/.test(location.pathname || '');\n  }\n  function isAccessoryPath(){\n    return /\\/products\\/(loxx-kit|loxx-retention-kit|fit-vinyl-cleaner-kit|fit-vinyl-cleaner|removable-magnets|replacement-magnets|fit-protection-2-year-warranty|lifetime-warranty)\\/?$/.test(location.pathname || '');\n  }\n  function isFullyHydrated(){\n    try {\n      if (document.getElementById('atcBtn') && (document.getElementById('retOpts') || document.getElementById('finishOpts'))) return true;\n      if (document.querySelector('#pdpRoot .pdp-sections') && document.getElementById('atcBtn')) return true;\n    } catch (e) {}\n    return false;\n  }\n  function isBroken(){\n    try {\n      var html = document.documentElement.innerHTML || '';\n      /* Page-cache froze pre-gallery filter v21 \u2192 force one section rehydrate\n         (drops Mini-Micro / old *-hero* / UTV double hero packshots) */\n      if (document.getElementById('pdpRoot')\n          && html.indexOf('fit-pdp-cache-bust:v21') !== -1\n          && html.indexOf('fit-pdp-cache-bust:v21-gallery-utv-onedup') === -1\n          && !window.__FIT_PDP_GALLERY_REHYDRATED) {\n        return true;\n      }\n      /* Never replace a live v21 configurator */\n      if (isFullyHydrated()) return false;\n      if (document.getElementById('pdpShipProgress') && document.getElementById('finishOpts')) return false;\n      /* Stale page-cache: phantom missing-asset stubs on inbox/video media \u2192 force section rehydrate */\n      if (/\\/assets\\/(?:acc-loxx-kit|acc-warranty|loxx-kf-|loxx-press-pull|product-warranty)[^\"'?\\s]*\\?v=504\\d+/i.test(html)\n          && html.indexOf('fit-pdp-cache-bust:v21-gallery-utv-onedup') === -1) {\n        return true;\n      }\n      /* Live v21 markers \u2014 leave alone (do not match strings that only appear inside recovery scripts) */\n      if (html.indexOf('fit-pdp-cache-bust:v21-gallery-utv-onedup') !== -1) return false;\n      if (html.indexOf('fit-pdp-cache-bust:v21') !== -1) return false;\n      if (html.indexOf(PDP_MARK) !== -1 && document.getElementById('pdpRoot')) return false;\n      /* Real Liquid error nodes (not JS source that mentions the phrase) */\n      if (document.querySelector('.shopify-section .liquid-error, .shopify-section [class*=\"liquid\"]')) return true;\n      var main = document.getElementById('MainContent') || document.getElementById('pdpRoot');\n      if (main) {\n        var mt = main.textContent || '';\n        if (mt.indexOf('Liquid error (sections') !== -1) return true;\n        if (mt.indexOf('invalid url input') !== -1) return true;\n      }\n      /* Thin shell: has gallery reviews pattern but no buy path at all */\n      if (document.getElementById('pdpRoot') && !document.getElementById('ssrAtc') && !document.getElementById('atcBtn') && !document.getElementById('finishOpts')) return true;\n      return false;\n    } catch (e) { return false; }\n  }\n  function runScripts(root){\n    if (!root) return;\n    root.querySelectorAll('script').forEach(function(old){\n      var typ = (old.getAttribute('type') || '').toLowerCase();\n      if (typ && typ !== 'text/javascript' && typ !== 'application/javascript' && typ !== 'module') return;\n      try {\n        var s = document.createElement('script');\n        if (old.src) { s.src = old.src; s.async = false; }\n        else s.textContent = old.textContent || '';\n        if (typ) s.type = old.type;\n        if (old.parentNode) old.parentNode.replaceChild(s, old);\n      } catch (eR) {}\n    });\n  }\n  function go(){\n    try {\n      /* ACC-LOXX-UPG / accessories: never remount cover builder */\n      if (isLoxxUpgradePath() || isAccessoryPath()) {\n        window.__FIT_PDP_LIVE_DONE = true;\n        try { window.__fitPdpHydrated = true; } catch (eX) {}\n        return;\n      }\n      if (!isProduct() || window.__FIT_PDP_LIVE_DONE || !isBroken()) return;\n      window.__FIT_PDP_LIVE_DONE = true;\n      var path = location.pathname || '/';\n      var tries = SEC_KEYS.slice();\n      function attempt(){\n        if (isLoxxUpgradePath() || isAccessoryPath()) return;\n        if (!tries.length) return;\n        var sec = tries.shift();\n        var url = path + (path.indexOf('?') >= 0 ? '&' : '?') + 'view=&sections=' + encodeURIComponent(sec);\n        fetch(url, { credentials: 'same-origin', cache: 'no-store', headers: { 'Accept': '*/*' } })\n          .then(function(r){ return r.json(); })\n          .then(function(data){\n            var html = data && data[sec];\n            if (!html || html.indexOf('pdpRoot') === -1) { attempt(); return; }\n            if (html.indexOf('Liquid error (sections') !== -1 && html.indexOf('function loadPDP') === -1) { attempt(); return; }\n            /* Prefer v21 when available */\n            if (sec !== 'product-page-v21' && html.indexOf('fit-pdp-cache-bust:v21') === -1 && tries.length) {\n              attempt();\n              return;\n            }\n            if (isFullyHydrated()) return;\n            var target = document.querySelector('#MainContent [id^=\"shopify-section-template\"]')\n              || document.querySelector('#MainContent [id*=\"product-page\"]')\n              || document.querySelector('#MainContent [id^=\"shopify-section\"]');\n            if (!target) { attempt(); return; }\n            var tmp = document.createElement('div');\n            tmp.innerHTML = html;\n            var fresh = tmp.firstElementChild || tmp;\n            try {\n              window.__fitPdpHydrated = false;\n              window.__fitPdpHydrating = false;\n              window.__FIT_PDP_V21_MAIN = false;\n              window.__FIT_PDP_GALLERY_REHYDRATED = true;\n            } catch (e0) {}\n            target.replaceWith(fresh);\n            runScripts(fresh);\n            document.body.setAttribute('data-fit-pdp-live', PDP_MARK);\n            try { if (window.__fitPdpBoot) window.__fitPdpBoot(); } catch (e1) {}\n          })\n          .catch(function(){ attempt(); });\n      }\n      attempt();\n    } catch (e) {}\n  }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', go); else go();\n  setTimeout(go, 80);\n})();\n\n/* Collection page_cache rehydrate: replace stale main section when storefront HTML lags theme */\n(function(){\n  function isCollection(){\n    return /^\\/collections\\//.test(location.pathname||'');\n  }\n  function isWrongThemeHtml(){\n    try {\n      if (window.Shopify && Shopify.theme && String(Shopify.theme.id) === '185190351139') return true;\n      var html = document.documentElement && document.documentElement.innerHTML || '';\n      if (html.indexOf('/cdn/shop/t/98/') !== -1) return true;\n      if (html.indexOf('\"id\":185190351139') !== -1) return true;\n      return false;\n    } catch (e) { return false; }\n  }\n  function isStale(){\n    try {\n      if (isWrongThemeHtml()) return true;\n      var html = document.documentElement && document.documentElement.innerHTML || '';\n      /* Exact buggy collection init only \u2014 not our head patch string */\n      if (html.indexOf(\"querySelector('.col-stat:nth-of-type(3) .n').textContent\") !== -1) return true;\n      if (html.indexOf('function setText') === -1 && html.indexOf('id=\"shopGrid\"') !== -1) return true;\n      return false;\n    } catch (e) { return false; }\n  }\n  function runScripts(root){\n    if (!root) return;\n    root.querySelectorAll('script').forEach(function(old){\n      var s = document.createElement('script');\n      if (old.src) { s.src = old.src; s.async = false; }\n      else s.textContent = old.textContent || '';\n      old.parentNode.replaceChild(s, old);\n    });\n  }\n  function go(){\n    try {\n      if (!isCollection() || window.__FIT_COL_LIVE || !isStale()) return;\n      var target = document.querySelector('#MainContent [id^=\"shopify-section-template\"]')\n        || document.querySelector('#MainContent [id^=\"shopify-section-\"]')\n        || document.querySelector('[id^=\"shopify-section-template\"]');\n      if (!target || !target.id) return;\n      var key = target.id.replace(/^shopify-section-/, '');\n      window.__FIT_COL_LIVE = true;\n      var url = location.pathname + (location.search ? location.search + '&' : '?') + 'sections=' + encodeURIComponent(key);\n      fetch(url, { credentials: 'same-origin', cache: 'no-store', headers: { 'Accept': '*/*' } })\n        .then(function(r){ return r.json(); })\n        .then(function(data){\n          var html = data && data[key];\n          if (!html || html.indexOf('function setText') === -1) return;\n          var tmp = document.createElement('div');\n          tmp.innerHTML = html;\n          var fresh = tmp.firstElementChild || tmp;\n          target.replaceWith(fresh);\n          runScripts(fresh);\n          document.body.setAttribute('data-fit-col-live', 'js-zero-err-20260804c');\n        })\n        .catch(function(){});\n    } catch (e) {}\n  }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', go);\n  else go();\n  setTimeout(go, 300);\n})();\n\n/* Cart / collection / any page: page_cache can freeze OLD theme HTML\n   (t/98 \u00B7 #185190351139 \"FIT Protection LIVE\") while admin live is #186810728739 (t/102).\n   Empty ?view= bypasses that cache and re-renders on the live theme (verified). */\n(function(){\n  function wrong(){\n    try {\n      if (window.Shopify && Shopify.theme && String(Shopify.theme.id) === '185190351139') return true;\n      var html = document.documentElement && document.documentElement.innerHTML || '';\n      return html.indexOf('/cdn/shop/t/98/') !== -1 || html.indexOf('\"id\":185190351139') !== -1;\n    } catch (e) { return false; }\n  }\n  function missingLiveApp(){\n    try {\n      /* Live theme id but layout still pointing at pre-v54 fit-app.js only */\n      if (window.Shopify && Shopify.theme && String(Shopify.theme.id) === '186810728739') {\n        var html = document.documentElement && document.documentElement.innerHTML || '';\n        if (html.indexOf('fit-app-v54') === -1 && html.indexOf('fit-app.js') !== -1) return true;\n      }\n    } catch (e) {}\n    return false;\n  }\n  function go(){\n    try {\n      if (window.__FIT_THEME_RELOAD_DONE) return;\n      if (/[?&]view=/.test(location.search || '')) return; /* already on bypass; do not loop */\n      if (!wrong() && !missingLiveApp()) return;\n      var k = 'fit_theme_view_' + (location.pathname || '/');\n      try {\n        if (sessionStorage.getItem(k) === '1') return;\n        sessionStorage.setItem(k, '1');\n      } catch (e0) {}\n      window.__FIT_THEME_RELOAD_DONE = true;\n      var q = location.search || '';\n      var u = location.pathname + (q ? q + '&' : '?') + 'view=' + (location.hash || '');\n      location.replace(u);\n    } catch (e1) {}\n  }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', go);\n  else go();\n  setTimeout(go, 50);\n})();\n\n\n/* Contact form assist */\n(function(){\n  try {\n    if (!/\\/pages\\/contact/i.test(location.pathname||'')) return;\n    if (window.__fitFormAssist || window.__fitFormAssistLoading) return;\n    window.__fitFormAssistLoading = true;\n    var s=document.createElement('script');\n    s.src='/cdn/shop/t/102/assets/fit-form-assist.js?v=formassist1';\n    s.async=true;\n    (document.head||document.documentElement).appendChild(s);\n  } catch(e){}\n})();\n\n\n\n/* fit-pdp-gallery-sanitize-v5 \u2014 drop junk only; NEVER strip model/featured hero for studio packshots\n   v4 bug: hasPack && isVehiclePng removed card heroes then rewrote #galleryMain \u2192 studio flash */\n(function(){\n  function fileName(src){\n    try { return String(src||'').split('?')[0].split('/').pop().toLowerCase(); } catch(e){ return ''; }\n  }\n  function baseKey(src){\n    var n = fileName(src).replace(/\\.(jpg|jpeg|png|webp|gif)$/i, '');\n    n = n.replace(/_\\d+x\\d+$/i, '');\n    n = n.replace(/-[a-f0-9]{6,}$/i, '');\n    return n;\n  }\n  function isLoxx(n){ return /^loxx-card-/.test(n); }\n  function isThumb(n){ return /^product-thumb-/.test(n); }\n  function isPack(n){ return /-bk\\.(jpg|jpeg|png|webp)$/.test(n) || (/^(utv|rv|jp)-/.test(n) && n.indexOf('hero')===-1 && !isThumb(n) && !isLoxx(n)); }\n  function isHero(n){ return n.indexOf('hero') !== -1; }\n  function isVehiclePng(n){ return /\\.png$/.test(n) && !isThumb(n) && !isHero(n) && !isLoxx(n); }\n  function featuredKey(){\n    try {\n      var f = (window.FIT_PDP && FIT_PDP.featuredImage) ? String(FIT_PDP.featuredImage) : '';\n      return f ? baseKey(f) : '';\n    } catch (e) { return ''; }\n  }\n  function sameFile(a, b){\n    if (!a || !b) return false;\n    if (a === b || a.split('?')[0] === b.split('?')[0]) return true;\n    var ka = baseKey(a), kb = baseKey(b);\n    return !!(ka && kb && ka === kb);\n  }\n  function fullFromThumb(th){\n    if(!th) return '';\n    var full=th.getAttribute('data-full');\n    if(full) return full;\n    var img=th.querySelector('img');\n    var src=(img&&img.src)||'';\n    return src ? src.replace(/([?&])width=\\d+/i,'$1width=1000') : '';\n  }\n  function sanitize(force){\n    try{\n      var root=document.getElementById('galleryThumbs');\n      if(!root) return;\n      var stills=[].slice.call(root.querySelectorAll('.gallery-thumb[data-idx]'));\n      if(!stills.length) return;\n      // Already cleaned and nothing new \u2014 do not touch active state (that made thumbs feel dead)\n      if(!force && root.dataset.fitSanitized==='v5' && !root.querySelector('.gallery-thumb[data-idx]:not([data-fit-kept])')){\n        return;\n      }\n      var featK = featuredKey();\n      var vehicleCount=0;\n      var heroCount=0;\n      var removed=false;\n      stills.forEach(function(th){\n        var img=th.querySelector('img');\n        var full=th.getAttribute('data-full')||(img&&img.src)||'';\n        var n=fileName(full);\n        if(/logo-shield|placeholder|coming-soon|spacer|blank/.test(n)){ th.remove(); removed=true; return; }\n        /* Keep ONE model / outdoor PNG (card/hero). Extra identity shots \u2192 double hero look. */\n        if(isVehiclePng(n) && !isPack(n)){\n          if(featK && baseKey(full) === featK){\n            vehicleCount++;\n            return; /* always keep featured */\n          }\n          vehicleCount++;\n          if(vehicleCount > 1){ th.remove(); removed=true; return; }\n          return;\n        }\n        if(isHero(n)){\n          heroCount++;\n          if(heroCount > 2){ th.remove(); removed=true; return; }\n        }\n      });\n      var keep=[].slice.call(root.querySelectorAll('.gallery-thumb[data-idx]'));\n      if(!keep.length) return;\n      // Remember current selection (by full src) so reindex doesn't steal the click\n      var prevActive=root.querySelector('.gallery-thumb[data-idx].active');\n      var prevFull=prevActive ? fullFromThumb(prevActive) : '';\n      var main=document.getElementById('galleryMain');\n      var mainSrc=main ? (main.currentSrc||main.src||main.getAttribute('src')||'') : '';\n      keep.forEach(function(th,i){\n        th.setAttribute('data-idx', String(i));\n        th.setAttribute('data-fit-kept','1');\n      });\n      // Prefer: previous active \u2192 current main \u2192 featured \u2192 first non-pack \u2192 0\n      var stillThere=prevFull && keep.some(function(th){ return sameFile(fullFromThumb(th), prevFull); });\n      var pickIdx=0;\n      if(stillThere){\n        for(var i=0;i<keep.length;i++){\n          if(sameFile(fullFromThumb(keep[i]), prevFull)){ pickIdx=i; break; }\n        }\n      } else if(mainSrc){\n        var matchedMain=false;\n        for(var j=0;j<keep.length;j++){\n          if(sameFile(fullFromThumb(keep[j]), mainSrc)){ pickIdx=j; matchedMain=true; break; }\n        }\n        if(!matchedMain && featK){\n          for(var k=0;k<keep.length;k++){\n            if(baseKey(fullFromThumb(keep[k])) === featK){ pickIdx=k; matchedMain=true; break; }\n          }\n        }\n        if(!matchedMain){\n          for(var p=0;p<keep.length;p++){\n            if(!isPack(fileName(fullFromThumb(keep[p])))){ pickIdx=p; break; }\n          }\n        }\n      } else if(featK){\n        for(var f=0;f<keep.length;f++){\n          if(baseKey(fullFromThumb(keep[f])) === featK){ pickIdx=f; break; }\n        }\n      }\n      // If user already chose a non-first image and we didn't remove anything structural, keep UI alone\n      if(!force && root.dataset.fitSanitized==='v5' && !removed){\n        return;\n      }\n      keep.forEach(function(th,i){\n        var on=i===pickIdx;\n        th.classList.toggle('active', on);\n        th.setAttribute('aria-selected', on?'true':'false');\n      });\n      // Only rewrite main when selection was removed \u2014 never flash studio over an already-correct hero\n      if(main && keep[pickIdx] && (force || removed || !mainSrc || !stillThere)){\n        var src=fullFromThumb(keep[pickIdx]);\n        if(src && !sameFile(src, mainSrc)){\n          /* Do not replace a live featured/model hero with a studio packshot */\n          var srcN=fileName(src), mainN=fileName(mainSrc);\n          var mainIsIdentity = !!(mainSrc && (isVehiclePng(mainN) || (featK && baseKey(mainSrc)===featK) || !isPack(mainN)));\n          var srcIsPack = isPack(srcN);\n          if(!(mainIsIdentity && srcIsPack && mainSrc)){\n            main.src=src;\n            main.style.setProperty('object-fit','cover','important');\n            main.style.setProperty('object-position','center center','important');\n            main.style.setProperty('width','100%','important');\n            main.style.setProperty('height','100%','important');\n          }\n        }\n      }\n      try{\n        var dots=document.getElementById('galleryDots');\n        if(dots && dots.children.length!==keep.length){\n          dots.innerHTML=keep.map(function(_,i){ return '<span class=\"gallery-dot'+(i===pickIdx?' on':'')+'\"></span>'; }).join('');\n        }\n      }catch(eD){}\n      root.dataset.fitSanitized='v5';\n      try{ document.dispatchEvent(new CustomEvent('fit:gallery-sanitized',{detail:{count:keep.length,pick:pickIdx}})); }catch(eE){}\n    }catch(e){}\n  }\n  var t=null;\n  function schedule(force){\n    if(t) clearTimeout(t);\n    t=setTimeout(function(){ sanitize(!!force); }, force?0:80);\n  }\n  function boot(){\n    schedule(true);\n    setTimeout(function(){ schedule(true); }, 120);\n    setTimeout(function(){ schedule(false); }, 600);\n  }\n  if(document.readyState==='loading') document.addEventListener('DOMContentLoaded', boot);\n  else boot();\n  try{\n    var mo=new MutationObserver(function(muts){\n      var root=document.getElementById('galleryThumbs');\n      if(!root) return;\n      var relevant=muts.some(function(m){\n        if(m.type!=='childList') return false;\n        var nodes=[].concat([].slice.call(m.addedNodes),[].slice.call(m.removedNodes));\n        return nodes.some(function(n){\n          if(!n || n.nodeType!==1) return false;\n          if(n.id==='galleryThumbs' || (n.classList&&n.classList.contains('gallery-thumb'))) return true;\n          return !!(n.querySelector&&n.querySelector('.gallery-thumb,[id=\"galleryThumbs\"]'));\n        });\n      });\n      if(!relevant) return;\n      if(root.dataset.fitSanitized!=='v5' || root.querySelector('.gallery-thumb[data-idx]:not([data-fit-kept])')){\n        schedule(true);\n      }\n    });\n    mo.observe(document.documentElement,{childList:true,subtree:true});\n  }catch(e2){}\n})();\n\n// OUTSIDE_ONLY_MARK_20260806f\n\n\n/* FIT_LOXX_UPGRADE_FORCE \u2014 page_cache may serve cover builder for ACC-LOXX-UPG */\n(function(){\n  if (window.__FIT_LOXX_UPGRADE_FORCE) return;\n  window.__FIT_LOXX_UPGRADE_FORCE = true;\n  if (!/\\/products\\/loxx-retention-upgrade\\/?$/.test(location.pathname||'')) return;\n  if (document.getElementById('loxxUpgradePdp') && !document.getElementById('retOpts')) return;\n  function go(){\n    if (document.getElementById('loxxUpgradePdp') && !document.getElementById('retOpts')) return;\n    var path = location.pathname || '/';\n    var url = path + '?sections=loxx-upgrade-pdp-section';\n    fetch(url, { credentials:'same-origin', cache:'no-store' })\n      .then(function(r){ return r.json(); })\n      .then(function(data){\n        var html = data && data['loxx-upgrade-pdp-section'];\n        if (!html || (html.indexOf('loxxUpgradePdp')===-1 && html.indexOf('loxx-upg')===-1)) return;\n        var target = document.querySelector('#MainContent [id^=\"shopify-section-template\"]')\n          || document.querySelector('#MainContent [id^=\"shopify-section\"]');\n        if (!target) return;\n        var tmp = document.createElement('div');\n        tmp.innerHTML = html;\n        var fresh = tmp.firstElementChild || tmp;\n        target.replaceWith(fresh);\n        fresh.querySelectorAll('script').forEach(function(old){\n          var s=document.createElement('script');\n          if (old.src){ s.src=old.src; s.async=false; }\n          else s.textContent=old.textContent||'';\n          if (old.parentNode) old.parentNode.replaceChild(s, old);\n        });\n        document.body.setAttribute('data-fit-loxx-upgrade','forced');\n      }).catch(function(){});\n  }\n  if (document.readyState==='loading') document.addEventListener('DOMContentLoaded', go);\n  else go();\n  setTimeout(go, 200);\n  setTimeout(go, 800);\n})();\n\n/* collection filters embedded */\n/**\n * fit-collection-filters.js \u2014 brand filters + ?brand= deep links\n * Survives CollectionController page_cache when section JS is stale.\n * Do NOT combine the early returns (Shopify minify broke ||,(assign,test) once).\n */\n(function () {\n  if (window.__FIT_COLLECTION_FILTERS_ASSET) return;\n  if (!/^\\/collections\\//.test(location.pathname || '')) return;\n  window.__FIT_COLLECTION_FILTERS_ASSET = true;\n  console.info('[FIT] collection filters boot', location.pathname + location.search);\n\n  function brandKey(s) {\n    return String(s || '')\n      .toLowerCase()\n      .replace(/&/g, 'and')\n      .replace(/[^a-z0-9]+/g, '');\n  }\n  function resolveBrandName(raw, brandNames) {\n    if (!raw) return '';\n    var want = brandKey(raw);\n    var names = brandNames || [];\n    for (var i = 0; i < names.length; i++) if (brandKey(names[i]) === want) return names[i];\n    for (var j = 0; j < names.length; j++) {\n      var k = brandKey(names[j]);\n      if (k.indexOf(want) === 0 || want.indexOf(k) === 0) return names[j];\n    }\n    return raw;\n  }\n\n  function categoryFromPage() {\n    var q = new URLSearchParams(location.search).get('cat');\n    if (q) return q;\n    var body = document.body;\n    if (body) {\n      if (body.getAttribute('data-cat')) return body.getAttribute('data-cat');\n      var cls = body.className || '';\n      if (/template-suffix-rv|collection-rv|shop-rvs/i.test(cls + ' ' + location.pathname)) return 'rv';\n      if (/template-suffix-utv|collection-utv|shop-utv/i.test(cls + ' ' + location.pathname)) return 'utv';\n      if (/vehicles/i.test(location.pathname)) return 'vehicles';\n    }\n    if (/shop-rvs|\\/rv/i.test(location.pathname)) return 'rv';\n    if (/vehicles/i.test(location.pathname)) return 'vehicles';\n    return 'utv';\n  }\n\n  var CATEGORY = categoryFromPage();\n  var active = { brands: new Set(), wipers: new Set(), prices: new Set() };\n  var catalog = [];\n  var POPULAR = [\n    'polaris-ranger-xd-cover',\n    'can-am-defender-2016-2026-with-wiper',\n    'can-am-maverick-x3',\n    'cf-moto-uforce-u10',\n    'polaris-general',\n    '2018-2025-forest-river-rockwood-mini-lite-series',\n    'fr-r-pod-190-series-flat-glass',\n    'brinkley-i-275',\n    'keystone-montana'\n  ];\n\n  function brandInActive(pBrand) {\n    if (!active.brands.size) return true;\n    var pk = brandKey(pBrand);\n    var hit = false;\n    active.brands.forEach(function (b) {\n      if (brandKey(b) === pk) hit = true;\n    });\n    return hit;\n  }\n\n  function loadCatalog() {\n    var all = window.FIT_CATALOG;\n    if (!Array.isArray(all) || !all.length) return [];\n    return all.filter(function (p) {\n      return p && p.category === CATEGORY;\n    });\n  }\n\n  function syncBrandUrl() {\n    try {\n      var u = new URL(location.href);\n      if (active.brands.size === 1) u.searchParams.set('brand', active.brands.values().next().value);\n      else u.searchParams.delete('brand');\n      history.replaceState({}, '', u.pathname + (u.search || '') + u.hash);\n    } catch (e) {}\n  }\n\n  function applyFilters(list) {\n    return list.filter(function (p) {\n      if (active.brands.size && !brandInActive(p.brand)) return false;\n      if (active.wipers.size) {\n        var hasW = /\\(With Wiper\\)/i.test(p.title || '');\n        var noW = /\\(Without Wiper\\)/i.test(p.title || '');\n        if (active.wipers.has('with') && !hasW) return false;\n        if (active.wipers.has('without') && !noW) return false;\n      }\n      if (active.prices.size) {\n        var inBucket = false;\n        active.prices.forEach(function (b) {\n          var parts = String(b).split('-').map(Number);\n          if (!isNaN(parts[0]) && !isNaN(parts[1]) && p.price >= parts[0] && p.price < parts[1]) inBucket = true;\n        });\n        if (!inBucket) return false;\n      }\n      return true;\n    });\n  }\n\n  function cardHtml(p, gi) {\n    var img = p.mainImage || (p.images && p.images[0]) || '';\n    var shortTitle = (p.title || '').replace(p.brand || '', '').trim() || p.title || '';\n    var sold = p.soldOut === true;\n    return (\n      '<a href=\"/products/' +\n      p.handle +\n      '\" class=\"product' +\n      (sold ? ' is-sold-out' : '') +\n      '\" data-handle=\"' +\n      p.handle +\n      '\">' +\n      '<div class=\"img-wrap\" style=\"position:relative;aspect-ratio:1/1;overflow:hidden\">' +\n      (img\n        ? '<img src=\"' +\n          img +\n          '\" alt=\"\" loading=\"' +\n          (gi < 4 ? 'eager' : 'lazy') +\n          '\" style=\"width:100%;height:100%;object-fit:contain\">'\n        : '') +\n      (sold ? '<span class=\"badge sold-out\">Sold Out</span>' : '') +\n      '</div><div class=\"info\"><div class=\"cat\">' +\n      (p.brand || '') +\n      '</div><h3>' +\n      shortTitle.replace(/</g, '&lt;') +\n      '</h3><div class=\"foot\"><div class=\"price\"><span class=\"from\">From</span> $' +\n      Number(p.price || 0).toFixed(0) +\n      '</div><span class=\"add\">' +\n      (sold ? 'Notify Me' : 'Configure') +\n      ' \u2192</span></div></div></a>'\n    );\n  }\n\n  function render() {\n    var grid = document.getElementById('shopGrid');\n    if (!grid) return;\n    var sortSel = document.getElementById('sortSel');\n    var sort = sortSel ? sortSel.value : 'popular';\n    var filtered = applyFilters(catalog.slice());\n    if (sort === 'price-asc') filtered.sort(function (a, b) { return a.price - b.price; });\n    else if (sort === 'price-desc') filtered.sort(function (a, b) { return b.price - a.price; });\n    else if (sort === 'brand')\n      filtered.sort(function (a, b) {\n        return String(a.brand + a.title).localeCompare(String(b.brand + b.title));\n      });\n    else\n      filtered.sort(function (a, b) {\n        var ia = POPULAR.indexOf(a.handle);\n        var ib = POPULAR.indexOf(b.handle);\n        var ra = ia === -1 ? 999 : ia;\n        var rb = ib === -1 ? 999 : ib;\n        if (ra !== rb) return ra - rb;\n        return String(a.brand + a.title).localeCompare(String(b.brand + b.title));\n      });\n\n    var rc = document.getElementById('resultCount');\n    if (rc) rc.textContent = String(filtered.length);\n    var applyBtn = document.getElementById('filterApplyBtn');\n    if (applyBtn) applyBtn.textContent = filtered.length ? 'See ' + filtered.length + ' covers' : 'No matches \u2014 reset';\n\n    document.querySelectorAll('#brandChips [data-chip-brand]').forEach(function (btn) {\n      btn.classList.toggle('on', brandInActive(btn.getAttribute('data-chip-brand')));\n    });\n\n    if (!filtered.length) {\n      grid.innerHTML =\n        '<div class=\"shop-empty\"><b>No matches</b><div style=\"margin-top:8px\">Try clearing a filter, or <a href=\"/pages/custom-fit-order\">request a custom fit</a>.</div><div style=\"margin-top:14px\"><button type=\"button\" class=\"filter-reset\" id=\"fitFilterResetEmpty\">Reset filters</button></div></div>';\n      var emptyBtn = document.getElementById('fitFilterResetEmpty');\n      if (emptyBtn) emptyBtn.addEventListener('click', resetFilters);\n      return;\n    }\n    grid.innerHTML = filtered.map(cardHtml).join('');\n  }\n\n  function onFilterChange(e) {\n    var cb = e.target;\n    if (!cb || cb.type !== 'checkbox') return;\n    var brand = cb.getAttribute('data-brand');\n    var wiper = cb.getAttribute('data-wiper');\n    var price = cb.getAttribute('data-price');\n    if (brand) {\n      if (cb.checked) active.brands.add(brand);\n      else active.brands.delete(brand);\n    }\n    if (wiper) {\n      if (cb.checked) active.wipers.add(wiper);\n      else active.wipers.delete(wiper);\n    }\n    if (price) {\n      if (cb.checked) active.prices.add(price);\n      else active.prices.delete(price);\n    }\n    syncBrandUrl();\n    render();\n  }\n\n  function resetFilters() {\n    active.brands.clear();\n    active.wipers.clear();\n    active.prices.clear();\n    document.querySelectorAll('.filter-group input[type=checkbox]').forEach(function (cb) {\n      cb.checked = false;\n    });\n    document.querySelectorAll('#brandChips [data-chip-brand]').forEach(function (btn) {\n      btn.classList.remove('on');\n    });\n    syncBrandUrl();\n    render();\n  }\n  window.resetFilters = resetFilters;\n\n  function init() {\n    catalog = loadCatalog();\n    if (!catalog.length) return false;\n    if (!document.getElementById('shopGrid')) return false;\n\n    var brandCounts = {};\n    catalog.forEach(function (p) {\n      if (!p.brand) return;\n      brandCounts[p.brand] = (brandCounts[p.brand] || 0) + 1;\n    });\n    var brandNames = Object.keys(brandCounts).sort();\n    var pre = resolveBrandName(new URLSearchParams(location.search).get('brand') || '', brandNames);\n\n    var brandFiltersEl = document.getElementById('brandFilters');\n    if (brandFiltersEl) {\n      brandFiltersEl.innerHTML = brandNames\n        .map(function (b) {\n          return (\n            '<label><input type=\"checkbox\" data-brand=\"' +\n            b.replace(/\"/g, '&quot;') +\n            '\"' +\n            (pre === b ? ' checked' : '') +\n            '> ' +\n            b +\n            ' <span class=\"c\">' +\n            brandCounts[b] +\n            '</span></label>'\n          );\n        })\n        .join('');\n    }\n\n    active.brands.clear();\n    if (pre) active.brands.add(pre);\n\n    var chips = document.getElementById('brandChips');\n    if (chips) {\n      var top = brandNames.slice().sort(function (a, b) {\n        return brandCounts[b] - brandCounts[a];\n      }).slice(0, 8);\n      chips.innerHTML =\n        top\n          .map(function (b) {\n            return (\n              '<button type=\"button\" data-chip-brand=\"' +\n              b.replace(/\"/g, '&quot;') +\n              '\"' +\n              (active.brands.has(b) ? ' class=\"on\"' : '') +\n              '>' +\n              b +\n              '<span class=\"c\">' +\n              brandCounts[b] +\n              '</span></button>'\n            );\n          })\n          .join('') + '<button type=\"button\" data-chip-more=\"1\">More brands \u2630</button>';\n      if (!chips.dataset.fitAssetBound) {\n        chips.dataset.fitAssetBound = '1';\n        chips.addEventListener('click', function (e) {\n          var more = e.target.closest('[data-chip-more]');\n          if (more) {\n            var t = document.getElementById('filterToggleBtn');\n            if (t) t.click();\n            return;\n          }\n          var btn = e.target.closest('[data-chip-brand]');\n          if (!btn) return;\n          e.preventDefault();\n          var brand = btn.getAttribute('data-chip-brand');\n          var on = !btn.classList.contains('on');\n          btn.classList.toggle('on', on);\n          var box = document.querySelector('#brandFilters input[data-brand=\"' + brand.replace(/\"/g, '') + '\"]');\n          if (box) box.checked = on;\n          if (on) active.brands.add(brand);\n          else active.brands.delete(brand);\n          syncBrandUrl();\n          render();\n        });\n      }\n    }\n\n    var filterCol = document.getElementById('filterCol');\n    if (filterCol && !filterCol.dataset.fitAssetBound) {\n      filterCol.dataset.fitAssetBound = '1';\n      filterCol.addEventListener('change', onFilterChange);\n    }\n    var sortSel = document.getElementById('sortSel');\n    if (sortSel && !sortSel.dataset.fitAssetBound) {\n      sortSel.dataset.fitAssetBound = '1';\n      sortSel.addEventListener('change', render);\n    }\n\n    var brandsEl = document.getElementById('countBrands');\n    if (brandsEl) brandsEl.textContent = String(brandNames.length);\n    var modelsEl = document.getElementById('countModels');\n    if (modelsEl) {\n      var bases = {};\n      catalog.forEach(function (p) {\n        if (p.modelBase) bases[p.modelBase] = 1;\n      });\n      modelsEl.textContent = String(Object.keys(bases).length);\n    }\n\n    render();\n    document.body.setAttribute('data-fit-filters', 'asset-v1');\n    return true;\n  }\n\n  function boot() {\n    if (init()) return;\n    var n = 0;\n    var t = setInterval(function () {\n      n++;\n      if (init() || n > 50) clearInterval(t);\n    }, 100);\n  }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', boot);\n  else boot();\n  window.addEventListener('fit-catalog-ready', function () {\n    try {\n      init();\n    } catch (e) {}\n  });\n})();\n\n/* fit-app-v56-pagecache-hook-20260819a */\n(function(){\n  try {\n    if (window.__FIT_PAGECACHE_LOADER) return;\n    window.__FIT_PAGECACHE_LOADER = 1;\n    var s = document.createElement('script');\n    s.src = '/cdn/shop/t/102/assets/fit-pagecache-rehydrate-v1.js?v=guide-bust-20260819a';\n    s.defer = true;\n    (document.head || document.documentElement).appendChild(s);\n  } catch (e) {}\n})();\n\n/* fit-install-policy-fix \u2014 keep install troubleshooting copy current (adhesives fee policy) */\n(function(){\n  try {\n    if (!/^\\/pages\\/install(-guide)?\\/?$/.test(location.pathname||'')) return;\n    if (window.__FIT_INSTALL_POLICY_FIX) return;\n    window.__FIT_INSTALL_POLICY_FIX = 1;\n    function stale(){\n      var html = document.documentElement.innerHTML || '';\n      if (html.indexOf('free replacement magnets if needed') !== -1) return true;\n      if (html.indexOf('ship you replacements free') !== -1) return true;\n      /* New policy must mention adhesives fee */\n      if (html.indexOf('Interior magnet popped off') !== -1 && html.indexOf('which could come with a fee') === -1) return true;\n      return false;\n    }\n    function go(){\n      if (!stale()) return;\n      var tries = ['install-guide-v3','install_main_v4','install-guide-v2','install_main_v3','install-guide','install_main_v2','install_main','main'];\n      function attempt(){\n        if (!tries.length) return;\n        var sec = tries.shift();\n        fetch(location.pathname + '?sections=' + encodeURIComponent(sec), {credentials:'same-origin', cache:'no-store'})\n          .then(function(r){ return r.json(); })\n          .then(function(data){\n            var html = data && data[sec];\n            if (!html || html.indexOf('which could come with a fee') === -1) { attempt(); return; }\n            var target = document.querySelector('#MainContent [id^=\"shopify-section\"]');\n            if (!target) return;\n            var tmp = document.createElement('div');\n            tmp.innerHTML = html;\n            var fresh = tmp.firstElementChild || tmp;\n            target.replaceWith(fresh);\n            document.body.setAttribute('data-fit-install-policy','adhesives-fee-20260821');\n          }).catch(function(){ attempt(); });\n      }\n      attempt();\n    }\n    if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', go);\n    else go();\n    setTimeout(go, 300);\n    setTimeout(go, 1200);\n  } catch (e) {}\n})();\n\n"],
  "mappings": "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",
  "names": ["fitFixPhantomUrl", "fitFixPhantomEl", "fitScanPhantom", "fitRunPhantom", "attempt", "i", "stale", "go"]
}
