{
  "version": 3,
  "sources": ["/cdn/shop/t/48/assets/product.js?r=10131"],
  "sourcesContent": ["/* Product page \u2014 variant picker, gallery sync, subtotal, vehicle prefill, sticky bar. */\n(function () {\n  'use strict';\n  var W = window.WWC;\n  document.querySelectorAll('[data-product]').forEach(function (root) {\n    var form = document.getElementById(root.dataset.form);\n    if (!form) return;\n    var idInput = form.querySelector('[data-variant-id]');\n    var dataEl = root.querySelector('[data-variants]');\n    var variants = dataEl ? JSON.parse(dataEl.textContent) : [];\n    var track = root.querySelector('[data-gallery-track]');\n    var atc = form.querySelector('[data-atc]'), atcLabel = form.querySelector('[data-atc-label]');\n    var atcText = atcLabel ? atcLabel.textContent : '';\n    var current = variants.filter(function (v) { return v.id === +idInput.value; })[0] || null;\n\n    /* ----- variant selection ----- */\n    function selected() {\n      return Array.prototype.map.call(root.querySelectorAll('.pdp-option[data-option-index]'), function (fs) {\n        var c = fs.querySelector('input:checked'); return c ? c.value : null;\n      });\n    }\n    function mark() {\n      // grey out values that can't form an available variant with the other picks\n      var sel = selected();\n      root.querySelectorAll('.pdp-option[data-option-index]').forEach(function (fs) {\n        var i = +fs.dataset.optionIndex;\n        fs.querySelectorAll('input').forEach(function (inp) {\n          var ok = variants.some(function (v) { return v.available && v.options[i] === inp.value && v.options.every(function (o, j) { return j === i || o === sel[j]; }); });\n          inp.nextElementSibling.classList.toggle('is-unavailable', !ok);\n        });\n        var lab = fs.querySelector('[data-option-value]'); if (lab) lab.textContent = sel[i] || '';\n      });\n    }\n    function onChange() {\n      var sel = selected();\n      current = variants.filter(function (v) { return v.options.every(function (o, i) { return o === sel[i]; }); })[0] || null;\n      if (current) {\n        idInput.value = current.id;\n        var u = new URL(location.href); u.searchParams.set('variant', current.id); history.replaceState(null, '', u.toString());\n        var pw = root.querySelector('[data-price]'); if (pw) pw.textContent = W.money(current.price);\n        var cmp = root.querySelector('[data-compare]'); if (cmp) cmp.hidden = !(current.compare > current.price);\n        if (current.media) goTo(current.media);\n      }\n      if (atc) {\n        atc.disabled = !current || !current.available;\n        atcLabel.textContent = !current ? 'Unavailable' : current.available ? atcText : 'Made to order \u2014 request a quote';\n      }\n      subtotal(); mark(); sticky();\n    }\n    root.addEventListener('change', function (e) {\n      if (e.target.closest('.pdp-option[data-option-index]')) onChange();\n      if (e.target.name === 'quantity') subtotal();\n    });\n\n    function subtotal() {\n      var el = root.querySelector('[data-subtotal]'); if (!el || !current) return;\n      var q = form.querySelector('input[name=\"quantity\"]:checked');\n      el.textContent = W.money(current.price * (q ? +q.value : 1));\n    }\n    if (variants.length) mark();\n\n    /* ----- gallery ----- */\n    var thumbs = root.querySelectorAll('[data-thumb]'), idx = root.querySelector('[data-gallery-index]');\n    function goTo(mediaId) {\n      var fig = track && track.querySelector('[data-media-id=\"' + mediaId + '\"]'); if (!fig) return;\n      if (window.matchMedia('(min-width: 900px)').matches && !track.classList.contains('is-slider')) {\n        fig.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n      } else {\n        track.scrollTo({ left: fig.offsetLeft - track.offsetLeft, behavior: 'smooth' });\n      }\n      active(mediaId);\n    }\n    function active(mediaId) {\n      thumbs.forEach(function (t) { var on = t.dataset.thumb === String(mediaId); t.classList.toggle('is-active', on); t.setAttribute('aria-current', on); });\n    }\n    thumbs.forEach(function (t) { t.addEventListener('click', function () { goTo(t.dataset.thumb); }); });\n    if (track && 'IntersectionObserver' in window) {\n      var figs = track.querySelectorAll('[data-media-id]');\n      var io = new IntersectionObserver(function (es) {\n        es.forEach(function (en) {\n          if (en.isIntersecting && en.intersectionRatio > .6) {\n            var i = Array.prototype.indexOf.call(figs, en.target);\n            if (idx) idx.textContent = i + 1;\n            active(en.target.dataset.mediaId);\n          }\n        });\n      }, { root: window.matchMedia('(max-width: 899px)').matches ? track : null, threshold: [.6] });\n      figs.forEach(function (f) { io.observe(f); });\n    }\n\n    /* ----- vehicle prefill from ?vehicle= or My garage ----- */\n    var vIn = form.querySelector('[data-vehicle-input]');\n    if (vIn) {\n      var q = new URLSearchParams(location.search).get('vehicle');\n      var g = W.getGarage && W.getGarage();\n      if (q) vIn.value = q; else if (g && g.make) vIn.value = g.make + ' ' + g.model + (g.year ? ' (' + g.year + ')' : '');\n    }\n    // Validate required fields (the form is novalidate so errors show inline)\n    form.addEventListener('submit', function (e) {\n      var bad = Array.prototype.filter.call(form.querySelectorAll('[required]'), function (f) { return !String(f.value).trim(); });\n      if (!bad.length) return;\n      e.preventDefault(); e.stopImmediatePropagation();\n      bad.forEach(function (f) {\n        f.setAttribute('aria-invalid', 'true');\n        var id = f.id + '-error', err = document.getElementById(id);\n        if (!err) { err = document.createElement('span'); err.className = 'error'; err.id = id; f.insertAdjacentElement('afterend', err); f.setAttribute('aria-describedby', id); }\n        err.textContent = 'Please add your vehicle so we can confirm fitment.';\n        f.addEventListener('input', function () { f.removeAttribute('aria-invalid'); err.textContent = ''; }, { once: true });\n      });\n      bad[0].focus();\n    }, true);\n\n    /* ----- spec chooser: \"Let us spec it\" / \"I know my specs\" ----- */\n    var spec = root.querySelector('[data-spec-path]');\n    if (spec && spec.dataset.specKind !== 'flow') {\n      var SPEC = ['Size', 'ET', 'PCD', 'CB'];\n      var HINTS = { Size: 'e.g. 20x9.5 front / 20x10.5 rear', ET: 'e.g. ET35 front / ET40 rear', PCD: 'e.g. 5x112', CB: 'e.g. 66.6' };\n      var specVehicle = spec.querySelector('[data-vehicle-input]');\n      var specErr = spec.querySelector('[data-spec-error]');\n      var fallback = spec.querySelector('[data-spec-fallback]');\n      var specMode = function () { var r = spec.querySelector('[data-spec-mode]:checked'); return r ? r.dataset.specMode : 'pro'; };\n      // The options app (Easify) renders its own Size / ET / PCD / CB / Model boxes into the form after load\n      var appInput = function (name) { return form.querySelector('.tpo_option-container input[name=\"properties[' + name + ']\"]'); };\n      var specInput = function (name) { return appInput(name) || fallback.querySelector('[data-name=\"properties[' + name + ']\"]'); };\n      var applySpec = function () {\n        var m = specMode(), hasApp = false;\n        SPEC.forEach(function (n) {\n          var i = appInput(n); if (!i) return;\n          hasApp = true;\n          i.closest('.tpo_option-container').classList.toggle('spec-hidden', m !== 'own');\n          if (!i.placeholder && HINTS[n]) i.placeholder = HINTS[n];\n        });\n        // Our own boxes only when the app isn't there. They get a name only while in use: a duplicate\n        // properties[Size] etc. in the form stops the app adding to cart.\n        var useOwn = !hasApp && m === 'own';\n        fallback.hidden = !useOwn;\n        fallback.querySelectorAll('input').forEach(function (i) {\n          i.disabled = !useOwn;\n          if (useOwn) i.name = i.dataset.name; else i.removeAttribute('name');\n        });\n        var model = appInput('Model');\n        if (model) model.closest('.tpo_option-container').classList.add('spec-hidden');\n        spec.querySelectorAll('[data-spec-panel]').forEach(function (p) { p.hidden = p.dataset.specPanel !== m; });\n        spec.querySelectorAll('[data-spec-note]').forEach(function (p) { p.hidden = p.dataset.specNote !== m; });\n        spec.querySelectorAll('[data-spec-pro]').forEach(function (i) { i.disabled = m !== 'pro'; });\n      };\n      // Keep the app's \"Model\" box (now hidden) in step with the vehicle, so orders read the same as before\n      var mirrorVehicle = function () {\n        var model = appInput('Model'); if (!model || !specVehicle || model.value === specVehicle.value) return;\n        model.value = specVehicle.value;\n        model.dispatchEvent(new Event('input', { bubbles: true }));\n        model.dispatchEvent(new Event('change', { bubbles: true }));\n      };\n      spec.addEventListener('change', function (e) {\n        if (!e.target.matches('[data-spec-mode]')) return;\n        applySpec();\n        specErr.hidden = true;\n      });\n      if (specVehicle) specVehicle.addEventListener('input', mirrorVehicle);\n      var specTimer;\n      new MutationObserver(function () {\n        clearTimeout(specTimer);\n        specTimer = setTimeout(function () { applySpec(); mirrorVehicle(); }, 60);\n      }).observe(form, { childList: true, subtree: true });\n      applySpec();\n      // \"I know my specs\" needs at least a size and an offset\n      form.addEventListener('submit', function (e) {\n        if (specMode() !== 'own') return;\n        var missing = ['Size', 'ET'].filter(function (n) { var i = specInput(n); return i && !String(i.value).trim(); });\n        if (!missing.length) return;\n        e.preventDefault(); e.stopImmediatePropagation();\n        specErr.textContent = 'Add your size and offset, or choose \u201CLet us spec it\u201D and we\u2019ll work them out for you.';\n        specErr.hidden = false;\n        specInput(missing[0]).focus();\n      }, true);\n    }\n\n    /* ----- flow-formed spec chooser: the customer picks the size, we match bolt pattern + offset to their car ----- */\n    if (spec && spec.dataset.specKind === 'flow') {\n      var fit = W.fit;\n      var optSets = Array.prototype.slice.call(root.querySelectorAll('.pdp-option[data-option-name]'));\n      var pInfo = { options: optSets.map(function (fs) { return fs.dataset.optionName; }) };\n      var optSet = function (re) { return optSets.filter(function (fs) { return re.test(fs.dataset.optionName); })[0] || null; };\n      var sizeFs = optSet(/size|diam/i), pcdFs = optSet(/bolt|pcd/i), etFs = optSet(/offset|^et\\b/i);\n      var sizeIdx = sizeFs ? +sizeFs.dataset.optionIndex : -1;\n      var fVehicle = spec.querySelector('[data-vehicle-input]'), vWrap = spec.querySelector('[data-spec-vehicle-wrap]');\n      var matchEl = spec.querySelector('[data-spec-match]'), matched = spec.querySelector('[data-spec-matched]');\n      var fErr = spec.querySelector('[data-spec-error]'), manualBtn = spec.querySelector('[data-car-manual]');\n      var manual = false, car = null, carData = null, classLimits = null, picking = false, ok = false;\n      // Until the customer picks a size themselves (or arrives on a specific variant), start on the best-fitting size\n      var sizeTouched = /[?&]variant=/.test(location.search);\n      var fMode = function () { var r = spec.querySelector('[data-spec-mode]:checked'); return r ? r.dataset.specMode : 'pro'; };\n      var picked = function (fs) { var c = fs && fs.querySelector('input:checked'); return c ? c.value : null; };\n      var mm = function (n) { return Math.abs(n) + ' mm'; };\n\n      // Select a variant's values in the (hidden) bolt pattern / offset pickers, and the size too\n      // when the customer hasn't chosen one; the variant picker does the rest\n      var pick = function (v, withSize) {\n        picking = true;\n        optSets.forEach(function (fs) {\n          if (fs === sizeFs && !withSize) return;\n          var val = v.options[+fs.dataset.optionIndex];\n          var inp = Array.prototype.filter.call(fs.querySelectorAll('input'), function (i) { return i.value === val; })[0];\n          if (inp && !inp.checked) { inp.checked = true; inp.dispatchEvent(new Event('change', { bubbles: true })); }\n        });\n        picking = false;\n      };\n      var match = function () {\n        ok = false;\n        matched.disabled = true;\n        if (fMode() !== 'pro' || manual || !carData) { matchEl.hidden = true; return; }\n        var size = picked(sizeFs);\n        var forSize = variants.filter(function (v) { return sizeIdx < 0 || !sizeTouched || v.options[sizeIdx] === size; });\n        var best = fit.bestFlow(forSize, pInfo, carData, classLimits);\n        var name = car.make + ' ' + car.model;\n        if (best) {\n          pick(best.variant, !sizeTouched);\n          size = picked(sizeFs);\n          ok = true;\n          var pl = best.place, where = pl.dOut > 0 ? mm(pl.dOut) + ' further out than factory' : pl.dOut < 0 ? mm(pl.dOut) + ' further in than factory' : 'flush with factory';\n          var spcd = picked(pcdFs) || best.sp.pcd, set = picked(etFs) || (best.sp.et + ' mm');\n          var lines = ['<strong>Matched to your ' + W.esc(name) + ':</strong> ' + W.esc(spcd) + ' bolt pattern, ' + W.esc(set) + ' offset. Sits about ' + where + '.'];\n          if (pl.level === 1) lines.push('A firm fit: may need a guard roll. We confirm it with you before dispatch.');\n          if (pl.level === 2) lines.push('Beyond what factory guards take. Message us before ordering and we\u2019ll suggest a size that fits.');\n          if (best.smaller) lines.push('Smaller than your factory wheels: we check brake clearance before dispatch.');\n          matchEl.className = 'spec-match ' + (pl.level ? 'is-warn' : 'is-ok');\n          matchEl.innerHTML = lines.map(function (l) { return '<p>' + l + '</p>'; }).join('');\n          matched.value = 'Auto-matched to ' + name + ' (' + car.year + '): ' + (pl.dOut >= 0 ? '+' : '\u2212') + mm(pl.dOut) + ' out, ' + (pl.dIn >= 0 ? '+' : '\u2212') + mm(pl.dIn) + ' in vs factory' + (pl.level ? ' (check)' : '');\n          matched.disabled = false;\n        } else {\n          var pcd = fit.normPCD(carData.bolt), sizes = [];\n          variants.forEach(function (v) {\n            var sp = fit.parseVariant(v, pInfo), sz = v.options[sizeIdx];\n            if (v.available && sp.pcd && fit.normPCD(sp.pcd) === pcd && sizes.indexOf(sz) < 0) sizes.push(sz);\n          });\n          matchEl.className = 'spec-match is-bad';\n          matchEl.innerHTML = sizes.length\n            ? '<p>Not made in your ' + W.esc(carData.bolt) + ' bolt pattern at ' + W.esc(size) + '. Sizes that are:</p><div class=\"chip-row\">' +\n              sizes.map(function (z) { return '<button type=\"button\" class=\"chip\" data-spec-size=\"' + W.esc(z) + '\">' + W.esc(z) + '</button>'; }).join('') + '</div>'\n            : '<p>This design isn\u2019t made in your ' + W.esc(carData.bolt) + ' bolt pattern. <a href=\"' + W.fitmentHref(car.make, car.model, car.year) + '\">See flow-formed wheels that fit your ' + W.esc(name) + '</a>.</p>';\n        }\n        matchEl.hidden = false;\n      };\n      var applyFlow = function () {\n        var pro = fMode() === 'pro', auto = pro && !manual;\n        [pcdFs, etFs].forEach(function (fs) { if (fs) fs.classList.toggle('spec-hidden', auto); });\n        spec.querySelectorAll('[data-spec-panel]').forEach(function (el) { el.hidden = !pro || manual; });\n        spec.querySelectorAll('[data-spec-note]').forEach(function (el) { el.hidden = el.dataset.specNote !== (pro ? 'pro' : 'own'); });\n        vWrap.hidden = auto;\n        fVehicle.required = !auto;\n        fVehicle.setAttribute('aria-required', String(!auto));\n        // The options app's free-text ET / CB boxes only make sense when the customer is choosing specs\n        Array.prototype.forEach.call(form.querySelectorAll('.tpo_option-container input[name^=\"properties[ET\"], .tpo_option-container input[name^=\"properties[CB\"]'), function (i) {\n          i.closest('.tpo_option-container').classList.toggle('spec-hidden', pro);\n        });\n        if (manualBtn) manualBtn.textContent = manual ? 'Pick my car from the list' : 'Car not listed? Type it in';\n        fErr.hidden = true;\n        match();\n      };\n      var setCar = function (v) {\n        car = v && v.make && v.model && v.year ? v : null;\n        carData = null;\n        W.loadFitment().then(function (d) {\n          if (car && d.DB[car.make] && d.DB[car.make][car.model]) carData = d.DB[car.make][car.model][car.year] || null;\n          classLimits = carData && d.LIMITS ? d.LIMITS[carData.cls] : null;\n          if (carData) {\n            fVehicle.value = car.make + ' ' + car.model + ', ' + car.year;\n            W.setGarage(car);\n          }\n          match();\n        });\n      };\n      var carApi = W.vehicleSelects(spec, { onChange: setCar });\n\n      spec.addEventListener('change', function (e) { if (e.target.matches('[data-spec-mode]')) applyFlow(); });\n      root.addEventListener('change', function (e) { if (!picking && sizeFs && sizeFs.contains(e.target)) { sizeTouched = true; match(); } });\n      matchEl.addEventListener('click', function (e) {\n        var b = e.target.closest('[data-spec-size]'); if (!b) return;\n        var inp = Array.prototype.filter.call(sizeFs.querySelectorAll('input'), function (i) { return i.value === b.dataset.specSize; })[0];\n        if (inp) { inp.checked = true; inp.dispatchEvent(new Event('change', { bubbles: true })); }\n      });\n      if (manualBtn) manualBtn.addEventListener('click', function () {\n        manual = !manual;\n        if (!manual && carData) fVehicle.value = car.make + ' ' + car.model + ', ' + car.year;\n        applyFlow();\n        (manual ? fVehicle : spec.querySelector('[data-vb=\"make\"]')).focus();\n      });\n      new MutationObserver(W.debounce(function () { applyFlow(); }, 60)).observe(form, { childList: true, subtree: true });\n      // Start from the car in My garage, if there is one\n      var g0 = W.getGarage && W.getGarage();\n      if (g0 && g0.make && carApi) carApi.set(g0).then(function () { setCar(carApi.get()); });\n      applyFlow();\n\n      form.addEventListener('submit', function (e) {\n        if (fMode() !== 'pro' || manual) return;\n        var problem = !carData ? 'Pick your car so we can match the bolt pattern and offset, or tap \u201CCar not listed?\u201D.'\n          : !ok ? 'That size doesn\u2019t come in your bolt pattern. Pick one of the sizes listed, or message us.' : '';\n        if (!problem) return;\n        e.preventDefault(); e.stopImmediatePropagation();\n        fErr.textContent = problem;\n        fErr.hidden = false;\n        var at = carData ? sizeFs : spec.querySelector('[data-vb=\"make\"]');\n        if (at) { at.scrollIntoView({ block: 'center' }); if (!carData) at.focus(); }\n      }, true);\n    }\n\n    /* ----- sticky add to cart (mobile) ----- */\n    var bar = document.querySelector('[data-sticky-atc]');\n    function sticky() {\n      if (!bar) return;\n      var p = bar.querySelector('[data-sticky-price]'); if (p && current) p.textContent = W.money(current.price);\n    }\n    if (bar && atc && 'IntersectionObserver' in window) {\n      var mq = window.matchMedia('(max-width: 899px)');\n      new IntersectionObserver(function (es) {\n        var show = mq.matches && !es[0].isIntersecting && es[0].boundingClientRect.top < 0;\n        bar.hidden = !show; document.body.classList.toggle('has-sticky-atc', show);\n      }).observe(atc);\n      bar.querySelector('[data-sticky-go]').addEventListener('click', function () {\n        atc.scrollIntoView({ behavior: 'smooth', block: 'center' });\n        setTimeout(function () { atc.focus(); }, 400);\n      });\n    }\n  });\n})();\n"],
  "mappings": "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",
  "names": ["ok", "q"]
}
