{
  "version": 3,
  "sources": ["/cdn/shop/t/145/assets/touch-up-finder.js?tufv=20260713a"],
  "sourcesContent": ["/* ============================================================================\r\n   Partify Guided Touch-Up Finder - front-end driver (US, all supported makes)\r\n   Reads the touch-up kit selector globals and drives the existing PDP controls.\r\n   ========================================================================== */\r\n(function () {\r\n\t\"use strict\";\r\n\r\n\tfunction boot() {\r\n\t\tvar root = document.querySelector(\"[data-tuf-root]\");\r\n\t\tif (!root || root.__tufBooted) return;\r\n\t\troot.__tufBooted = true;\r\n\r\n\t\tvar cfg = {};\r\n\t\ttry {\r\n\t\t\tcfg = JSON.parse(root.getAttribute(\"data-tuf-config\") || \"{}\");\r\n\t\t} catch (e) {}\r\n\t\tvar manualColorOnly =\r\n\t\t\troot.getAttribute(\"data-tuf-manual-color-only\") === \"true\";\r\n\t\tconst twoToneRulesEnabled = cfg.twoToneRulesEnabled === true;\r\n\r\n\t\tvar DAMAGE_TO_PKG = {\r\n\t\t\tchips: {\r\n\t\t\t\tpkg: \"Essential\",\r\n\t\t\t\treason: \"Paint + clearcoat seals the chip and matches the finish.\",\r\n\t\t\t},\r\n\t\t\tscratches: {\r\n\t\t\t\tpkg: \"Preferred\",\r\n\t\t\t\treason: \"Primer + clearcoat is needed once bare metal or primer shows.\",\r\n\t\t\t},\r\n\t\t\tdeep: {\r\n\t\t\t\tpkg: \"Complete\",\r\n\t\t\t\treason: \"Full prep + finishing kit for a blended, professional repair.\",\r\n\t\t\t},\r\n\t\t\tnotsure: {\r\n\t\t\t\tpkg: \"Essential\",\r\n\t\t\t\treason:\r\n\t\t\t\t\t\"Essential covers the most common repair and is easy to upgrade.\",\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\tvar $ = function (s, r) {\r\n\t\t\treturn (r || root).querySelector(s);\r\n\t\t};\r\n\t\tvar $$ = function (s, r) {\r\n\t\t\treturn Array.prototype.slice.call((r || root).querySelectorAll(s));\r\n\t\t};\r\n\t\tvar BUMPERDOTCOM_MAKE_FALLBACK =\r\n\t\t\t\"toyota,lexus,scion,lincoln,ford,bmw,acura,honda,mercedes,mercury,mitsubishi,volvo,volkswagen\";\r\n\r\n\t\tfunction kitMode() {\r\n\t\t\treturn !!window.__PARTIFY_TOUCHUP_KIT_SELECTOR;\r\n\t\t}\r\n\t\tfunction isTwoTonePaintModeActive() {\r\n\t\t\treturn (\r\n\t\t\t\tisTwoToneEligible() &&\r\n\t\t\t\tselectedTwoToneChoice() === \"two\" &&\r\n\t\t\t\tselectedTwoToneAreaChoice() === \"secondary\"\r\n\t\t\t);\r\n\t\t}\r\n\t\tfunction isTwoToneEligible() {\r\n\t\t\treturn (\r\n\t\t\t\ttwoToneRuleState.codes.length > 0 &&\r\n\t\t\t\ttwoToneRuleMatchesVehicle(\r\n\t\t\t\t\tstate.vehicle || getVehicle(),\r\n\t\t\t\t\ttwoToneRuleState.handles,\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\t}\r\n\t\tfunction selectedTwoToneChoice() {\r\n\t\t\tif (!isTwoToneEligible()) return \"\";\r\n\t\t\treturn twoToneChoice;\r\n\t\t}\r\n\t\tfunction selectedTwoToneAreaChoice() {\r\n\t\t\tif (!isTwoToneEligible() || selectedTwoToneChoice() !== \"two\") return \"\";\r\n\t\t\treturn twoToneAreaChoice;\r\n\t\t}\r\n\t\tfunction isTwoToneAreaChoiceRequired() {\r\n\t\t\treturn (\r\n\t\t\t\tisTwoToneEligible() &&\r\n\t\t\t\tselectedTwoToneChoice() === \"two\" &&\r\n\t\t\t\t!selectedTwoToneAreaChoice()\r\n\t\t\t);\r\n\t\t}\r\n\t\tfunction isTwoToneChoiceRequired() {\r\n\t\t\treturn (\r\n\t\t\t\tisTwoToneEligible() &&\r\n\t\t\t\t(!selectedTwoToneChoice() || isTwoToneAreaChoiceRequired())\r\n\t\t\t);\r\n\t\t}\r\n\t\tfunction sizeMap() {\r\n\t\t\treturn window.__touchupSizeMap || {};\r\n\t\t}\r\n\t\tfunction formatOrder() {\r\n\t\t\tconst order = Array.isArray(window.__touchupPreferredFormatOrder)\r\n\t\t\t\t? window.__touchupPreferredFormatOrder.slice()\r\n\t\t\t\t: [\"Bottle\", \"Pen\", \"Aerosol\", \"Half Pint\", \"Pint\", \"Quart\", \"Gallon\"];\r\n\t\t\tconst discovered = Array.isArray(window.__touchupFormatOrder)\r\n\t\t\t\t? window.__touchupFormatOrder\r\n\t\t\t\t: [];\r\n\t\t\tdiscovered.forEach(function (format) {\r\n\t\t\t\tif (format && order.indexOf(format) === -1) order.push(format);\r\n\t\t\t});\r\n\t\t\treturn order;\r\n\t\t}\r\n\t\tfunction packageOrder() {\r\n\t\t\treturn Array.isArray(window.__touchupPackageOrder)\r\n\t\t\t\t? window.__touchupPackageOrder.slice()\r\n\t\t\t\t: [];\r\n\t\t}\r\n\t\tfunction variantSelect() {\r\n\t\t\treturn document.getElementById(\"variant-selector\");\r\n\t\t}\r\n\t\tfunction pdpPresent() {\r\n\t\t\treturn !!(variantSelect() && window.__PARTIFY_TOUCHUP);\r\n\t\t}\r\n\t\tfunction localVehicle() {\r\n\t\t\ttry {\r\n\t\t\t\tvar fn =\r\n\t\t\t\t\ttypeof getSearchTerms === \"function\"\r\n\t\t\t\t\t\t? getSearchTerms\r\n\t\t\t\t\t\t: window.getSearchTerms || null;\r\n\t\t\t\tvar arr = fn\r\n\t\t\t\t\t? fn()\r\n\t\t\t\t\t: JSON.parse(localStorage.getItem(\"searchTerms\") || \"[]\");\r\n\t\t\t\tif (Array.isArray(arr) && arr[0] && (arr[0].model || arr[0].ymm))\r\n\t\t\t\t\treturn arr[0];\r\n\t\t\t} catch (e) {}\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tfunction vehicleIdentity(v) {\r\n\t\t\tif (!v) return \"\";\r\n\t\t\treturn handleize(\r\n\t\t\t\t[v.year, v.make, v.model].filter(Boolean).join(\" \") ||\r\n\t\t\t\t\tv.ymm ||\r\n\t\t\t\t\tv.YMM ||\r\n\t\t\t\t\tv.vehicle ||\r\n\t\t\t\t\t\"\",\r\n\t\t\t);\r\n\t\t}\r\n\t\tfunction sameVehicle(a, b) {\r\n\t\t\tvar ak = vehicleIdentity(a),\r\n\t\t\t\tbk = vehicleIdentity(b);\r\n\t\t\treturn !ak || !bk || ak === bk;\r\n\t\t}\r\n\t\tfunction mergeVehicleData(active, saved) {\r\n\t\t\tif (!active || !saved || !sameVehicle(active, saved))\r\n\t\t\t\treturn active || saved;\r\n\t\t\tvar merged = {};\r\n\t\t\tObject.keys(saved).forEach(function (key) {\r\n\t\t\t\tmerged[key] = saved[key];\r\n\t\t\t});\r\n\t\t\tObject.keys(active).forEach(function (key) {\r\n\t\t\t\tif (active[key] != null && active[key] !== \"\")\r\n\t\t\t\t\tmerged[key] = active[key];\r\n\t\t\t});\r\n\t\t\t[\r\n\t\t\t\t\"vin\",\r\n\t\t\t\t\"state\",\r\n\t\t\t\t\"plate\",\r\n\t\t\t\t\"licensePlate\",\r\n\t\t\t\t\"paintCode\",\r\n\t\t\t\t\"decodedByBumper\",\r\n\t\t\t\t\"troublesome_format\",\r\n\t\t\t\t\"troublesome_description\",\r\n\t\t\t].forEach(function (key) {\r\n\t\t\t\tif ((merged[key] == null || merged[key] === \"\") && saved[key])\r\n\t\t\t\t\tmerged[key] = saved[key];\r\n\t\t\t});\r\n\t\t\treturn merged;\r\n\t\t}\r\n\r\n\t\tfunction normalizeKey(value) {\r\n\t\t\treturn String(value || \"\")\r\n\t\t\t\t.toLowerCase()\r\n\t\t\t\t.replace(/&/g, \"and\")\r\n\t\t\t\t.replace(/[^a-z0-9]+/g, \"\");\r\n\t\t}\r\n\t\tfunction handleize(value) {\r\n\t\t\treturn String(value || \"\")\r\n\t\t\t\t.toLowerCase()\r\n\t\t\t\t.replace(/&/g, \"and\")\r\n\t\t\t\t.replace(/[^a-z0-9]+/g, \"-\")\r\n\t\t\t\t.replace(/^-+|-+$/g, \"\");\r\n\t\t}\r\n\t\tconst TOUCHUP_MAKE_ALIASES = {\r\n\t\t\tchevy: \"chevrolet\",\r\n\t\t\t\"land-rover\": \"rover\",\r\n\t\t\tmercedes: \"mercedes-benz\",\r\n\t\t\tvw: \"volkswagen\",\r\n\t\t};\r\n\t\tconst TOUCHUP_MAKE_FALLBACKS = {\r\n\t\t\tbuick: \"general-motors\",\r\n\t\t\tcadillac: \"general-motors\",\r\n\t\t\tchevrolet: \"general-motors\",\r\n\t\t\tgeo: \"general-motors\",\r\n\t\t\tgmc: \"general-motors\",\r\n\t\t\thummer: \"general-motors\",\r\n\t\t\toldsmobile: \"general-motors\",\r\n\t\t\tpontiac: \"general-motors\",\r\n\t\t};\r\n\t\tfunction normalizeTouchupMake(value) {\r\n\t\t\tconst key = handleize(value);\r\n\t\t\treturn key ? TOUCHUP_MAKE_ALIASES[key] || key : \"\";\r\n\t\t}\r\n\t\tfunction fallbackTouchupMake(value) {\r\n\t\t\tconst key = normalizeTouchupMake(value);\r\n\t\t\treturn key ? TOUCHUP_MAKE_FALLBACKS[key] || key : \"\";\r\n\t\t}\r\n\t\tfunction normalizeMakeToken(value) {\r\n\t\t\treturn String(value || \"\")\r\n\t\t\t\t.toLowerCase()\r\n\t\t\t\t.replace(/[^a-z0-9]/g, \"\");\r\n\t\t}\r\n\t\tfunction makeListContains(list, make) {\r\n\t\t\tvar target = normalizeMakeToken(make);\r\n\t\t\tif (!target) return false;\r\n\t\t\treturn String(list || \"\")\r\n\t\t\t\t.split(\",\")\r\n\t\t\t\t.map(normalizeMakeToken)\r\n\t\t\t\t.some(function (item) {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\titem &&\r\n\t\t\t\t\t\t(item === target ||\r\n\t\t\t\t\t\t\ttarget.indexOf(item) !== -1 ||\r\n\t\t\t\t\t\t\titem.indexOf(target) !== -1)\r\n\t\t\t\t\t);\r\n\t\t\t\t});\r\n\t\t}\r\n\t\tfunction vehicleMakeLabel(vehicle) {\r\n\t\t\tvehicle = vehicle || {};\r\n\t\t\treturn (\r\n\t\t\t\tvehicle.make ||\r\n\t\t\t\tvehicle.brand ||\r\n\t\t\t\tvehicle.manufacturer ||\r\n\t\t\t\tvehicle.ymm ||\r\n\t\t\t\tvehicle.YMM ||\r\n\t\t\t\tvehicle.vehicle ||\r\n\t\t\t\t\"\"\r\n\t\t\t);\r\n\t\t}\r\n\t\tfunction isBumperDotcomVehicle(vehicle) {\r\n\t\t\tvar list = window.BUMPERDOTCOM_MAKES_LIST || BUMPERDOTCOM_MAKE_FALLBACK;\r\n\t\t\tvar make = vehicleMakeLabel(vehicle);\r\n\t\t\treturn make\r\n\t\t\t\t? makeListContains(list, make)\r\n\t\t\t\t: !!window.__PARTIFY_TOUCHUP_BUMPERDOTCOM_MAKE;\r\n\t\t}\r\n\t\tfunction shouldIgnoreDecodedPaintCode(vehicle) {\r\n\t\t\tvehicle = vehicle || {};\r\n\t\t\treturn (\r\n\t\t\t\tisBumperDotcomVehicle(vehicle) &&\r\n\t\t\t\t(!!vehicle.decodedByBumper ||\r\n\t\t\t\t\t!!vehicle.plate ||\r\n\t\t\t\t\t!!vehicle.licensePlate ||\r\n\t\t\t\t\tvinFromVehicleData(vehicle).length === 17)\r\n\t\t\t);\r\n\t\t}\r\n\t\tfunction escapeHtml(value) {\r\n\t\t\treturn String(value == null ? \"\" : value).replace(\r\n\t\t\t\t/[&<>\"']/g,\r\n\t\t\t\tfunction (ch) {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\"&\": \"&amp;\",\r\n\t\t\t\t\t\t\"<\": \"&lt;\",\r\n\t\t\t\t\t\t\">\": \"&gt;\",\r\n\t\t\t\t\t\t'\"': \"&quot;\",\r\n\t\t\t\t\t\t\"'\": \"&#39;\",\r\n\t\t\t\t\t}[ch];\r\n\t\t\t\t},\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tfunction aliasKey(value) {\r\n\t\t\tvar n = normalizeKey(value);\r\n\t\t\tvar aliases = {\r\n\t\t\t\tbtl: \"bottle\",\r\n\t\t\t\taer: \"aerosol\",\r\n\t\t\t\thpt: \"halfpint\",\r\n\t\t\t\thalfpint: \"halfpint\",\r\n\t\t\t\thalfpintkit: \"halfpint\",\r\n\t\t\t\t\"half-pint\": \"halfpint\",\r\n\t\t\t\tp0: \"paintonly\",\r\n\t\t\t\tpaint: \"paintonly\",\r\n\t\t\t\tpaintonly: \"paintonly\",\r\n\t\t\t\tpaintonlykit: \"paintonly\",\r\n\t\t\t\tes: \"essential\",\r\n\t\t\t\tessential: \"essential\",\r\n\t\t\t\tessentialkit: \"essential\",\r\n\t\t\t\tpr: \"preferred\",\r\n\t\t\t\tpreferred: \"preferred\",\r\n\t\t\t\tpreferredkit: \"preferred\",\r\n\t\t\t\tcp: \"complete\",\r\n\t\t\t\tcomplete: \"complete\",\r\n\t\t\t\tcompletekit: \"complete\",\r\n\t\t\t};\r\n\t\t\treturn aliases[n] || n;\r\n\t\t}\r\n\r\n\t\tfunction canonicalFrom(list, raw) {\r\n\t\t\tif (!raw || !list || !list.length) return null;\r\n\t\t\tvar want = aliasKey(raw);\r\n\t\t\treturn (\r\n\t\t\t\tlist.find(function (item) {\r\n\t\t\t\t\treturn aliasKey(item) === want;\r\n\t\t\t\t}) || null\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tfunction mapKey(code) {\r\n\t\t\tvar upper = String(code || \"\")\r\n\t\t\t\t.trim()\r\n\t\t\t\t.toUpperCase();\r\n\t\t\tif (isMatchByVinCode(upper))\r\n\t\t\t\treturn matchByVinKey(true) || matchByVinKey();\r\n\t\t\treturn Object.keys(sizeMap()).find(function (k) {\r\n\t\t\t\treturn k.toUpperCase() === upper;\r\n\t\t\t});\r\n\t\t}\r\n\t\tfunction isMatchByVinCode(value) {\r\n\t\t\tvar raw = String(value || \"\").trim();\r\n\t\t\tvar upper = raw.toUpperCase();\r\n\t\t\treturn (\r\n\t\t\t\tupper === \".VIN\" ||\r\n\t\t\t\tupper === \"VIN\" ||\r\n\t\t\t\t/match\\s+(paint\\s+)?by\\s+vin/i.test(raw)\r\n\t\t\t);\r\n\t\t}\r\n\t\tfunction isDecodedPaintMatchCode(value) {\r\n\t\t\tvar raw = String(value || \"\").trim();\r\n\t\t\tvar upper = raw.toUpperCase();\r\n\t\t\treturn (\r\n\t\t\t\tupper === \".MATCH\" ||\r\n\t\t\t\tupper === \"MATCH\" ||\r\n\t\t\t\t/match(?:ed)?\\s+(paint\\s+)?(code|colo[u]?r)/i.test(raw)\r\n\t\t\t);\r\n\t\t}\r\n\t\tfunction isManualBlockedPaintCode(value) {\r\n\t\t\treturn isMatchByVinCode(value) || isDecodedPaintMatchCode(value);\r\n\t\t}\r\n\t\tfunction variantIsAvailable(variant) {\r\n\t\t\tif (!variant) return true;\r\n\t\t\tif (typeof variant.availableForSale === \"boolean\")\r\n\t\t\t\treturn variant.availableForSale;\r\n\t\t\tif (typeof variant.available === \"boolean\") return variant.available;\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tfunction entryIsAvailable(entryToCheck) {\r\n\t\t\treturn !entryToCheck || entryToCheck.available !== false;\r\n\t\t}\r\n\t\tfunction entryPaintCode(entryToCheck) {\r\n\t\t\treturn String(\r\n\t\t\t\t(entryToCheck &&\r\n\t\t\t\t\t(entryToCheck.code ||\r\n\t\t\t\t\t\tentryToCheck.paintCode ||\r\n\t\t\t\t\t\tentryToCheck.variantTitle ||\r\n\t\t\t\t\t\tentryToCheck.title)) ||\r\n\t\t\t\t\t\"\",\r\n\t\t\t).trim();\r\n\t\t}\r\n\t\tfunction entryIsMatchByVin(entryToCheck) {\r\n\t\t\treturn isMatchByVinCode(entryPaintCode(entryToCheck));\r\n\t\t}\r\n\t\tfunction matchByVinKey(requireEntries) {\r\n\t\t\treturn Object.keys(sizeMap()).find(function (k) {\r\n\t\t\t\tif (!isMatchByVinCode(k)) return false;\r\n\t\t\t\tif (!requireEntries) return true;\r\n\t\t\t\treturn (sizeMap()[k] || []).some(function (e) {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\te &&\r\n\t\t\t\t\t\te.size &&\r\n\t\t\t\t\t\te.packageName &&\r\n\t\t\t\t\t\te.isKitProduct &&\r\n\t\t\t\t\t\tentryIsMatchByVin(e) &&\r\n\t\t\t\t\t\tentryMatchesBrand(e)\r\n\t\t\t\t\t);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\t\tfunction matchByVinCode() {\r\n\t\t\treturn matchByVinKey(true) || null;\r\n\t\t}\r\n\t\tfunction matchByVinEntries() {\r\n\t\t\tvar code = matchByVinCode();\r\n\t\t\treturn code ? eligibleEntriesFor(code).filter(entryIsMatchByVin) : [];\r\n\t\t}\r\n\t\tfunction isMatchByVinEntry(entryToCheck) {\r\n\t\t\tif (!entryToCheck || !entryToCheck.id) return false;\r\n\t\t\tif (!entryIsMatchByVin(entryToCheck)) return false;\r\n\t\t\treturn matchByVinEntries().some(function (entry) {\r\n\t\t\t\treturn String(entry.id) === String(entryToCheck.id);\r\n\t\t\t});\r\n\t\t}\r\n\t\tfunction activeBrand() {\r\n\t\t\treturn kitLoadCatalogKey || activeTouchupMakeKey();\r\n\t\t}\r\n\t\tfunction entryMatchesBrand(e) {\r\n\t\t\tvar brand = activeBrand();\r\n\t\t\tif (!brand) return true;\r\n\t\t\tvar brandNeedles = brandSearchTags(brand);\r\n\t\t\tvar entryBrand =\r\n\t\t\t\tbrandMatch((e && e.brand) || \"\") ||\r\n\t\t\t\tString((e && e.brand) || \"\").toLowerCase();\r\n\t\t\tvar hay = [\r\n\t\t\t\te && e.productHandle,\r\n\t\t\t\te && e.productTitle,\r\n\t\t\t\te && e.collectionHandle,\r\n\t\t\t\te && e.collectionTitle,\r\n\t\t\t\te && e.productUrl,\r\n\t\t\t]\r\n\t\t\t\t.filter(Boolean)\r\n\t\t\t\t.join(\" \")\r\n\t\t\t\t.toLowerCase();\r\n\t\t\treturn (\r\n\t\t\t\tentryBrand === brand ||\r\n\t\t\t\tbrandNeedles.some(function (needle) {\r\n\t\t\t\t\treturn hay.indexOf(needle) !== -1;\r\n\t\t\t\t})\r\n\t\t\t);\r\n\t\t}\r\n\t\tfunction entriesFor(code) {\r\n\t\t\tvar k = mapKey(code);\r\n\t\t\treturn (k && sizeMap()[k]) || [];\r\n\t\t}\r\n\t\tfunction eligibleEntriesFor(code) {\r\n\t\t\treturn entriesFor(code).filter(function (e) {\r\n\t\t\t\treturn (\r\n\t\t\t\t\te &&\r\n\t\t\t\t\te.size &&\r\n\t\t\t\t\te.packageName &&\r\n\t\t\t\t\te.isKitProduct &&\r\n\t\t\t\t\tentryIsAvailable(e) &&\r\n\t\t\t\t\tentryMatchesBrand(e)\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t\t}\r\n\t\tfunction visibleEntriesFor(code) {\r\n\t\t\treturn entriesFor(code).filter(function (e) {\r\n\t\t\t\treturn (\r\n\t\t\t\t\te && e.size && e.packageName && e.isKitProduct && entryMatchesBrand(e)\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t\t}\r\n\t\tfunction knownCode(code) {\r\n\t\t\treturn !!mapKey(code);\r\n\t\t}\r\n\r\n\t\tfunction orderedUnique(values, order) {\r\n\t\t\tvar seen = {},\r\n\t\t\t\tout = [];\r\n\t\t\tvalues.forEach(function (v) {\r\n\t\t\t\tif (v && !seen[v]) {\r\n\t\t\t\t\tseen[v] = 1;\r\n\t\t\t\t\tout.push(v);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\treturn out.sort(function (a, b) {\r\n\t\t\t\tvar ai = order.indexOf(a),\r\n\t\t\t\t\tbi = order.indexOf(b);\r\n\t\t\t\tif (ai === -1 && bi === -1) return a.localeCompare(b);\r\n\t\t\t\tif (ai === -1) return 1;\r\n\t\t\t\tif (bi === -1) return -1;\r\n\t\t\t\treturn ai - bi;\r\n\t\t\t});\r\n\t\t}\r\n\t\tfunction formatsFor(code) {\r\n\t\t\treturn orderedUnique(\r\n\t\t\t\teligibleEntriesFor(code).map(function (e) {\r\n\t\t\t\t\treturn e.size;\r\n\t\t\t\t}),\r\n\t\t\t\tformatOrder(),\r\n\t\t\t);\r\n\t\t}\r\n\t\tfunction packagesFor(code, fmt) {\r\n\t\t\treturn orderedUnique(\r\n\t\t\t\teligibleEntriesFor(code)\r\n\t\t\t\t\t.filter(function (e) {\r\n\t\t\t\t\t\treturn e.size === fmt;\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.map(function (e) {\r\n\t\t\t\t\t\treturn e.packageName;\r\n\t\t\t\t\t}),\r\n\t\t\t\tpackageOrder(),\r\n\t\t\t);\r\n\t\t}\r\n\t\tfunction hasKitEntries(code) {\r\n\t\t\treturn eligibleEntriesFor(code).length > 0;\r\n\t\t}\r\n\t\tfunction hasVisibleKitEntries(code) {\r\n\t\t\treturn visibleEntriesFor(code).length > 0;\r\n\t\t}\r\n\t\tfunction eligibleCodeCount() {\r\n\t\t\treturn Object.keys(sizeMap()).filter(function (code) {\r\n\t\t\t\treturn hasKitEntries(code);\r\n\t\t\t}).length;\r\n\t\t}\r\n\t\t// \".VIN\" vehicles must use the actual Match-by-VIN kit variant. Do not add a\r\n\t\t// concrete paint-code variant as a stand-in, because that paint code appears on\r\n\t\t// the Shopify line item and can be fulfilled as mixed paint.\r\n\t\tfunction vinOnlyVehicle() {\r\n\t\t\tvar v = getVehicle() || {};\r\n\t\t\tif (String(v.vin || \"\").trim().length !== 17) return false;\r\n\t\t\treturn !(storedPaintCode() || decodedCode(v.troublesome_format));\r\n\t\t}\r\n\t\tfunction enterMatchByVin() {\r\n\t\t\tvar code = matchByVinCode();\r\n\t\t\tif (!code) return false;\r\n\t\t\tstate.matchByVin = true;\r\n\t\t\tstate.colorCode = code;\r\n\t\t\tstate.colorSource = \"VIN\";\r\n\t\t\tstate.format = null;\r\n\t\t\tstate.tier = null;\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tfunction colorLabel(code) {\r\n\t\t\tif (state.matchByVin) return \"Match by VIN\";\r\n\t\t\tif (!code) return \"\";\r\n\t\t\treturn code + (colorName(code) ? \" \\u00b7 \" + colorName(code) : \"\");\r\n\t\t}\r\n\t\tfunction entry(code, fmt, pkg) {\r\n\t\t\tvar es = eligibleEntriesFor(code);\r\n\t\t\tif (!fmt && !pkg) return null;\r\n\t\t\tif (fmt && pkg) {\r\n\t\t\t\treturn (\r\n\t\t\t\t\tes.find(function (e) {\r\n\t\t\t\t\t\treturn e.size === fmt && e.packageName === pkg;\r\n\t\t\t\t\t}) || null\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\treturn (\r\n\t\t\t\tes.find(function (e) {\r\n\t\t\t\t\treturn e.size === fmt && e.packageName === pkg;\r\n\t\t\t\t}) ||\r\n\t\t\t\t(!fmt && pkg\r\n\t\t\t\t\t? es.find(function (e) {\r\n\t\t\t\t\t\t\treturn e.packageName === pkg;\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t: null) ||\r\n\t\t\t\tes.find(function (e) {\r\n\t\t\t\t\treturn e.size === fmt;\r\n\t\t\t\t}) ||\r\n\t\t\t\tes[0] ||\r\n\t\t\t\tnull\r\n\t\t\t);\r\n\t\t}\r\n\t\tfunction colorName(code) {\r\n\t\t\tconst colors = window.PartifyTouchupColorDetails;\r\n\t\t\tif (colors && (state.vehicle || getVehicle())) return colors.name(colorDetails, code);\r\n\t\t\tvar sel = variantSelect();\r\n\t\t\tif (sel) {\r\n\t\t\t\tvar o = $$(\"option\", sel).find(function (op) {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t(op.getAttribute(\"data-variant-title\") || \"\")\r\n\t\t\t\t\t\t\t.trim()\r\n\t\t\t\t\t\t\t.toUpperCase() === String(code).trim().toUpperCase()\r\n\t\t\t\t\t);\r\n\t\t\t\t});\r\n\t\t\t\tif (o) {\r\n\t\t\t\t\tvar lbl = (o.textContent || \"\").split(\"+\")[0].trim();\r\n\t\t\t\t\tif (lbl && lbl !== code) return lbl;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn \"\";\r\n\t\t}\r\n\t\tfunction money(v) {\r\n\t\t\tif (v == null || v === \"\") return \"&mdash;\";\r\n\t\t\tvar n = Number(v);\r\n\t\t\tif (isNaN(n)) return \"$\" + v;\r\n\t\t\treturn \"$\" + n.toFixed(2);\r\n\t\t}\r\n\t\tfunction normalizeSizeLabelValue(value) {\r\n\t\t\treturn String(value || \"\")\r\n\t\t\t\t.replace(/\\s+/g, \"\")\r\n\t\t\t\t.replace(/-/g, \"\")\r\n\t\t\t\t.trim()\r\n\t\t\t\t.toLowerCase();\r\n\t\t}\r\n\t\tfunction sizeChoiceExists(values, key) {\r\n\t\t\treturn (\r\n\t\t\t\tArray.isArray(values) &&\r\n\t\t\t\tvalues.some(function (value) {\r\n\t\t\t\t\treturn normalizeSizeLabelValue(value) === key;\r\n\t\t\t\t})\r\n\t\t\t);\r\n\t\t}\r\n\t\tfunction friendlySizeLabel(value, values) {\r\n\t\t\tvar labels = {\r\n\t\t\t\t\"8 oz\": \"Half-pint - 8 oz\",\r\n\t\t\t\t\"8oz\": \"Half-pint - 8 oz\",\r\n\t\t\t\t\"half pint\": \"Half-pint - 8 oz\",\r\n\t\t\t\t\"half-pint\": \"Half-pint - 8 oz\",\r\n\t\t\t\t\"16 oz\": \"Pint - 16 oz\",\r\n\t\t\t\t\"16oz\": \"Pint - 16 oz\",\r\n\t\t\t\tpint: \"Pint - 16 oz\",\r\n\t\t\t\t\"32 oz\": \"Quart - 32 oz\",\r\n\t\t\t\t\"32oz\": \"Quart - 32 oz\",\r\n\t\t\t\tquart: \"Quart - 32 oz\",\r\n\t\t\t\t\"128 oz\": \"Gallon - 128 oz\",\r\n\t\t\t\t\"128oz\": \"Gallon - 128 oz\",\r\n\t\t\t\tgallon: \"Gallon - 128 oz\",\r\n\t\t\t};\r\n\t\t\tvar normalized = String(value || \"\")\r\n\t\t\t\t.replace(/\\s+/g, \" \")\r\n\t\t\t\t.trim()\r\n\t\t\t\t.toLowerCase();\r\n\t\t\tvar compact = normalizeSizeLabelValue(value);\r\n\t\t\tvar pairedOunce = {\r\n\t\t\t\thalfpint: \"8oz\",\r\n\t\t\t\tpint: \"16oz\",\r\n\t\t\t\tquart: \"32oz\",\r\n\t\t\t\tgallon: \"128oz\",\r\n\t\t\t};\r\n\t\t\tif (pairedOunce[compact] && sizeChoiceExists(values, pairedOunce[compact])) {\r\n\t\t\t\treturn value;\r\n\t\t\t}\r\n\t\t\treturn labels[normalized] || value;\r\n\t\t}\r\n\r\n\t\tfunction driveSelectCode(code) {\r\n\t\t\tvar sel = variantSelect();\r\n\t\t\tif (!sel) return false;\r\n\t\t\tvar o = $$(\"option\", sel).find(function (op) {\r\n\t\t\t\tvar t = (\r\n\t\t\t\t\top.getAttribute(\"data-variant-title\") ||\r\n\t\t\t\t\t(op.label || \"\").split(\"+\")[0] ||\r\n\t\t\t\t\t\"\"\r\n\t\t\t\t)\r\n\t\t\t\t\t.trim()\r\n\t\t\t\t\t.toUpperCase();\r\n\t\t\t\treturn t === String(code).trim().toUpperCase();\r\n\t\t\t});\r\n\t\t\tif (!o) return false;\r\n\t\t\tsel.value = o.value;\r\n\t\t\tsel.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tfunction clickBackendButton(containerId, value) {\r\n\t\t\tvar c = document.getElementById(containerId);\r\n\t\t\tif (!c) return false;\r\n\t\t\tvar b = $$(\".touchup-option-button\", c).find(function (btn) {\r\n\t\t\t\tvar raw = btn.getAttribute(\"data-touchup-value\");\r\n\t\t\t\tvar text = (btn.textContent || \"\").trim();\r\n\t\t\t\tvar wanted = String(value).trim();\r\n\t\t\t\treturn raw === wanted || text === wanted || text === friendlySizeLabel(wanted);\r\n\t\t\t});\r\n\t\t\tif (!b || b.disabled) return false;\r\n\t\t\tb.click();\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tfunction syncToPdp(cb) {\r\n\t\t\tif (!pdpPresent()) {\r\n\t\t\t\tif (cb) cb();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tdriveSelectCode(state.colorCode);\r\n\t\t\tsetTimeout(function () {\r\n\t\t\t\tif (state.format)\r\n\t\t\t\t\tclickBackendButton(\"touchup-size-buttons\", state.format);\r\n\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\tif (state.tier)\r\n\t\t\t\t\t\tclickBackendButton(\"touchup-package-buttons\", state.tier);\r\n\t\t\t\t\tif (cb) cb();\r\n\t\t\t\t}, 0);\r\n\t\t\t}, 0);\r\n\t\t}\r\n\r\n\t\tvar ALL_STEPS = [\"vehicle\", \"color\", \"format\", \"kit\", \"review\"];\r\n\t\tvar state = {\r\n\t\t\tvehicle: null,\r\n\t\t\tvehicleDraft: null,\r\n\t\t\tcolorCode: null,\r\n\t\t\tcolorSource: \"\",\r\n\t\t\tcolorPath: null,\r\n\t\t\tmatchByVin: false,\r\n\t\t\tvin: null,\r\n\t\t\tplate: null,\r\n\t\t\tstateCode: null,\r\n\t\t\tformat: null,\r\n\t\t\ttier: null,\r\n\t\t\tdamage: \"scratches\",\r\n\t\t};\r\n\t\tvar rawParams = {};\r\n\t\tvar steps = ALL_STEPS.slice();\r\n\t\tvar idx = 0,\r\n\t\t\tmaxReached = 0;\r\n\t\tvar kitLoadKey = \"\";\r\n\t\tvar kitLoadPromise = null;\r\n\t\tvar kitLoadPendingKey = \"\";\r\n\t\tvar kitLoadCatalogKey = \"\";\r\n\t\tvar allowedCodes = null; // null = no vehicle filter; array = codes valid for active vehicle\r\n\t\tvar allowedCodesKey = \"\";\r\n\t\tvar allowedCodesPendingKey = \"\";\r\n\t\tlet colorDetails = null;\r\n\t\tlet colorDetailsKey = \"\";\r\n\t\tlet colorDetailsRequest = 0;\r\n\t\tlet allowedCodesPromise = null;\r\n\t\tvar garageOpenedFromFinder = false;\r\n\t\tvar garageClickBound = false;\r\n\t\tvar garageMutationObserver = null;\r\n\t\tvar garageDecorateTimer = null;\r\n\r\n\t\tfunction setDebug(patch) {\r\n\t\t\tvar dbg = window.__TUF_DEBUG || {};\r\n\t\t\tObject.keys(patch || {}).forEach(function (key) {\r\n\t\t\t\tdbg[key] = patch[key];\r\n\t\t\t});\r\n\t\t\ttry {\r\n\t\t\t\tvar vehicle = state.vehicle || getVehicle();\r\n\t\t\t\tdbg.selectedVehicle = vehicle || null;\r\n\t\t\t\tdbg.vehicleKey = vehicleLookupHandle(vehicle || {});\r\n\t\t\t\tdbg.ymmHandle = dbg.vehicleKey;\r\n\t\t\t\tdbg.collectionKey = vehicleCollectionKey();\r\n\t\t\t\tdbg.detectedMake = activeTouchupMakeKey();\r\n\t\t\t\tdbg.manualColorOnly = manualColorOnly;\r\n\t\t\t\tdbg.sizeMapCodeCount = Object.keys(sizeMap()).length;\r\n\t\t\t} catch (e) {\r\n\t\t\t\tdbg.lastDebugError = e && e.message ? e.message : String(e);\r\n\t\t\t}\r\n\t\t\twindow.__TUF_DEBUG = dbg;\r\n\t\t\treturn dbg;\r\n\t\t}\r\n\t\tsetDebug({ status: \"boot\" });\r\n\t\tconst twoToneRuleState = { handles: [], codes: [] };\r\n\t\tconst twoToneRuleCache = {};\r\n\t\tconst twoToneRuleRequests = {};\r\n\t\tconst NO_TOUCHUP_KIT_MATCH_MESSAGE =\r\n\t\t\t\"No touch-up kit variants match this vehicle's paint-code list yet.\";\r\n\t\tconst TWO_TONE_CHOICE_MESSAGE =\r\n\t\t\t\"Choose One Color or Two Colors before selecting your paint code.\";\r\n\t\tconst TWO_TONE_AREA_CHOICE_MESSAGE =\r\n\t\t\t\"Choose Main / Primary Color or Accent / Secondary Color before selecting your paint code.\";\r\n\t\tconst TWO_TONE_MANUAL_COLOR_MESSAGE =\r\n\t\t\t\"Accent / Secondary Color requires a manual paint-code choice. Select the color you want to touch up.\";\r\n\t\tlet twoTonePaintModeApplied = false;\r\n\t\tlet twoToneChoice = \"\";\r\n\t\tlet twoToneAreaChoice = \"\";\r\n\t\twindow.__TUF_VERSION = \"20261007-ca-colors\";\r\n\t\troot.setAttribute(\"data-tuf-version\", \"20261007-ca-colors\");\r\n\r\n\t\tfunction vehicleCollectionKey() {\r\n\t\t\tvar v = state.vehicle || getVehicle() || {};\r\n\t\t\tvar label =\r\n\t\t\t\t[v.year, v.make, v.model].filter(Boolean).join(\" \") ||\r\n\t\t\t\tv.ymm ||\r\n\t\t\t\tv.YMM ||\r\n\t\t\t\tv.vehicle ||\r\n\t\t\t\t\"\";\r\n\t\t\tvar vehKey = handleize(label);\r\n\t\t\tvar routeKey = routeCollectionKey();\r\n\t\t\t// Auto-correct: the saved garage vehicle drives which brand's kits load, even on a\r\n\t\t\t// brand-specific PDP \u2014 changing the garage to another make re-resolves to that\r\n\t\t\t// make's touch-up paint instead of dead-ending. Wrong-brand checkout stays\r\n\t\t\t// impossible: eligibleEntriesFor() only yields variants for the vehicle's brand.\r\n\t\t\tif (vehKey && vehicleMakeKey(v)) return vehKey;\r\n\t\t\tif (routeKey && routeMakeKey()) return routeKey;\r\n\t\t\treturn vehKey || routeKey || \"subaru\";\r\n\t\t}\r\n\t\tfunction vehicleMakeKey(vehicle) {\r\n\t\t\tvehicle = vehicle || {};\r\n\t\t\treturn normalizeTouchupMake(\r\n\t\t\t\tvehicle.make || vehicle.brand || vehicle.manufacturer || \"\",\r\n\t\t\t);\r\n\t\t}\r\n\t\tfunction routeMakeKey() {\r\n\t\t\tconst path = String(location.pathname || \"\").toLowerCase();\r\n\t\t\tconst product = (path.match(/\\/products\\/([^/?#]+)/) || [])[1] || \"\";\r\n\t\t\tconst collection = (path.match(/\\/collections\\/([^/?#]+)/) || [])[1] || \"\";\r\n\t\t\tconst match =\r\n\t\t\t\tproduct.match(/^(.+?)-professional-touch-up-/) ||\r\n\t\t\t\tproduct.match(/^(.+)-touch-up-/) ||\r\n\t\t\t\tcollection.match(/^(.+?)-professional-touch-up(?:-|$)/) ||\r\n\t\t\t\tcollection.match(/^(.+)-touch-up(?:-|$)/);\r\n\t\t\treturn match ? normalizeTouchupMake(match[1]) : \"\";\r\n\t\t}\r\n\t\tfunction activeTouchupMakeKey() {\r\n\t\t\treturn (\r\n\t\t\t\tvehicleMakeKey(state.vehicle || getVehicle() || {}) ||\r\n\t\t\t\trouteMakeKey() ||\r\n\t\t\t\t\"subaru\"\r\n\t\t\t);\r\n\t\t}\r\n\t\tfunction activeTouchupFallbackMakeKey() {\r\n\t\t\treturn fallbackTouchupMake(activeTouchupMakeKey()) || activeTouchupMakeKey();\r\n\t\t}\r\n\t\tfunction brandMatch(key) {\r\n\t\t\tvar match = String(key || \"\").match(\r\n\t\t\t\t/(?:^|-)(acura|alfa(?:-romeo)?|audi|bmw|buick|cadillac|chevrolet|chevy|chrysler|dodge|ford|gmc|honda|hyundai|infiniti|jeep|kia|lexus|lincoln|mazda|mercedes|mercury|mitsubishi|nissan|ram|scion|subaru|suzuki|tesla|toyota|volvo|volkswagen|vw)(?:-|$)/,\r\n\t\t\t);\r\n\t\t\tif (!match) return null;\r\n\t\t\tif (match[1] === \"vw\") return \"volkswagen\";\r\n\t\t\tif (match[1] === \"alfa\") return \"alfa-romeo\";\r\n\t\t\tif (match[1] === \"chevy\") return \"chevrolet\";\r\n\t\t\treturn match[1];\r\n\t\t}\r\n\t\tfunction brandFromKey(key) {\r\n\t\t\treturn brandMatch(key) || normalizeTouchupMake(key);\r\n\t\t}\r\n\t\tfunction brandSearchTags(brand) {\r\n\t\t\tvar tags = [brand || \"subaru\"];\r\n\t\t\tif (brand === \"volkswagen\") tags.push(\"vw\");\r\n\t\t\tif (brand === \"mercedes-benz\") tags.push(\"mercedes\");\r\n\t\t\treturn tags.filter(function (tag, index) {\r\n\t\t\t\treturn tag && tags.indexOf(tag) === index;\r\n\t\t\t});\r\n\t\t}\r\n\t\tfunction touchupProductMake(brand) {\r\n\t\t\treturn normalizeTouchupMake(brand) || \"subaru\";\r\n\t\t}\r\n\t\tfunction touchupProductHandleCandidates(brand) {\r\n\t\t\tvar make = touchupProductMake(brand);\r\n\t\t\tvar formats = [\r\n\t\t\t\t\"bottle\",\r\n\t\t\t\t\"aerosol\",\r\n\t\t\t\t\"pen\",\r\n\t\t\t\t\"half-pint\",\r\n\t\t\t\t\"pint\",\r\n\t\t\t\t\"quart\",\r\n\t\t\t\t\"gallon\",\r\n\t\t\t];\r\n\t\t\tvar packages = [\r\n\t\t\t\t\"paint-only\",\r\n\t\t\t\t\"essential-kit\",\r\n\t\t\t\t\"preferred-kit\",\r\n\t\t\t\t\"complete-kit\",\r\n\t\t\t];\r\n\t\t\tvar handles = [];\r\n\t\t\thandles.push(make + \"-professional-touch-up-paint\");\r\n\t\t\tformats.forEach(function (format) {\r\n\t\t\t\tpackages.forEach(function (pkg) {\r\n\t\t\t\t\thandles.push(make + \"-touch-up-\" + format + \"-\" + pkg);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t\treturn handles;\r\n\t\t}\r\n\t\t// The saved garage vehicle's brand \u2014 used to label the resolved touch-up paint\r\n\t\t// and to drive which brand's kit catalog loads (see vehicleCollectionKey).\r\n\t\tfunction vehicleBrand() {\r\n\t\t\treturn vehicleMakeKey(state.vehicle || getVehicle() || {});\r\n\t\t}\r\n\t\tfunction brandTitle(b) {\r\n\t\t\tif (!b) return \"this\";\r\n\t\t\tconst up = { bmw: \"BMW\", gmc: \"GMC\" };\r\n\t\t\treturn (\r\n\t\t\t\tup[b] ||\r\n\t\t\t\tString(b)\r\n\t\t\t\t\t.split(\"-\")\r\n\t\t\t\t\t.map(function (part) {\r\n\t\t\t\t\t\treturn part.charAt(0).toUpperCase() + part.slice(1);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.join(\" \")\r\n\t\t\t);\r\n\t\t}\r\n\t\tfunction routeCollectionKey() {\r\n\t\t\tvar path = String(location.pathname || \"\").toLowerCase();\r\n\t\t\tvar product = (path.match(/\\/products\\/([^/?#]+)/) || [])[1] || \"\";\r\n\t\t\tvar collection = (path.match(/\\/collections\\/([^/?#]+)/) || [])[1] || \"\";\r\n\t\t\t// Prefer whichever segment names a brand: a product handle like\r\n\t\t\t// \"ford-touch-up-bottle-...\" is more brand-specific than a generic collection\r\n\t\t\t// slug like \"touch-up-paint-bottles\", which would otherwise shadow it on\r\n\t\t\t// /collections/<generic>/products/<brand-handle> ad-landing URLs.\r\n\t\t\tif (product.match(/^(.+)-touch-up-/)) return product;\r\n\t\t\tif (collection.match(/^(.+)-touch-up(?:-|$)/)) return collection;\r\n\t\t\tif (brandMatch(product)) return product;\r\n\t\t\tif (brandMatch(collection)) return collection;\r\n\t\t\treturn collection || product || \"\";\r\n\t\t}\r\n\t\tfunction paintCodeFromKitVariant(variant) {\r\n\t\t\tif (!variant) return \"\";\r\n\t\t\tvar opts = (variant && variant.selectedOptions) || [];\r\n\t\t\tvar paintOpt =\r\n\t\t\t\topts.find(function (opt) {\r\n\t\t\t\t\treturn opt && /paint|color|colour|code/i.test(opt.name || \"\");\r\n\t\t\t\t}) || opts[0];\r\n\t\t\tvar code =\r\n\t\t\t\tpaintOpt && paintOpt.value\r\n\t\t\t\t\t? paintOpt.value\r\n\t\t\t\t\t: variant.option1 || variant.title;\r\n\t\t\tvar sku = String((variant && variant.sku) || \"\").trim();\r\n\t\t\tif ((!code || code === \"Default Title\") && sku) {\r\n\t\t\t\tvar match = sku.match(/(?:^|_)([A-Z0-9]{2,5})(?:_|$)/i);\r\n\t\t\t\tcode = match ? match[1] : \"\";\r\n\t\t\t}\r\n\t\t\treturn String(code || \"\")\r\n\t\t\t\t.trim()\r\n\t\t\t\t.toUpperCase();\r\n\t\t}\r\n\t\tfunction addKitEntry(code, entry) {\r\n\t\t\tcode = String(code || \"\").trim();\r\n\t\t\tif (!code || !entry || !entry.id || !entry.size || !entry.packageName)\r\n\t\t\t\treturn;\r\n\t\t\tentry.code = code;\r\n\t\t\tentry.paintCode = entry.paintCode || code;\r\n\t\t\tentry.variantTitle = entry.variantTitle || code;\r\n\t\t\twindow.__touchupSizeMap = window.__touchupSizeMap || {};\r\n\t\t\twindow.__touchupSizeMap[code] = window.__touchupSizeMap[code] || [];\r\n\t\t\tif (\r\n\t\t\t\twindow.__touchupSizeMap[code].some(function (item) {\r\n\t\t\t\t\treturn String(item.id) === String(entry.id);\r\n\t\t\t\t})\r\n\t\t\t)\r\n\t\t\t\treturn;\r\n\t\t\twindow.__touchupSizeMap[code].push(entry);\r\n\t\t\twindow.__touchupKitEntryCount = (window.__touchupKitEntryCount || 0) + 1;\r\n\t\t\twindow.__touchupFormatOrder = window.__touchupFormatOrder || [];\r\n\t\t\twindow.__touchupPackageOrder = window.__touchupPackageOrder || [];\r\n\t\t\tif (entry.size && window.__touchupFormatOrder.indexOf(entry.size) === -1)\r\n\t\t\t\twindow.__touchupFormatOrder.push(entry.size);\r\n\t\t\tif (\r\n\t\t\t\tentry.packageName &&\r\n\t\t\t\twindow.__touchupPackageOrder.indexOf(entry.packageName) === -1\r\n\t\t\t)\r\n\t\t\t\twindow.__touchupPackageOrder.push(entry.packageName);\r\n\t\t}\r\n\t\tfunction directProductMeta(product) {\r\n\t\t\tvar format = product && product.paintFormat && product.paintFormat.value;\r\n\t\t\tvar tier = product && product.paintTier && product.paintTier.value;\r\n\t\t\tformat = String(format || \"\")\r\n\t\t\t\t.replace(/\\s+/g, \" \")\r\n\t\t\t\t.trim();\r\n\t\t\ttier = String(tier || \"\")\r\n\t\t\t\t.replace(/\\s+/g, \" \")\r\n\t\t\t\t.trim();\r\n\t\t\tif (format && tier) return { format: format, packageName: tier };\r\n\r\n\t\t\tvar title = String((product && product.title) || \"\")\r\n\t\t\t\t.replace(/\\s+/g, \" \")\r\n\t\t\t\t.trim();\r\n\t\t\tvar normalized = title\r\n\t\t\t\t.replace(/\\u2014|\\u2013/g, \" - \")\r\n\t\t\t\t.replace(/\\s+-\\s+/g, \" - \")\r\n\t\t\t\t.replace(/\\s+/g, \" \")\r\n\t\t\t\t.trim();\r\n\t\t\tvar parts = normalized.split(/\\s-\\s/);\r\n\t\t\tvar productPart = (parts.shift() || normalized).trim();\r\n\t\t\tvar packageName = parts\r\n\t\t\t\t.join(\" - \")\r\n\t\t\t\t.replace(/\\s+kit$/i, \"\")\r\n\t\t\t\t.trim();\r\n\t\t\tvar match = productPart.match(/touch[\\s-]*up\\s+(.+)$/i);\r\n\t\t\tvar parsedFormat = match && match[1] ? match[1].trim() : \"\";\r\n\t\t\treturn { format: parsedFormat, packageName: packageName };\r\n\t\t}\r\n\t\tfunction directProductDefaultPackage(product) {\r\n\t\t\tconst source = normalizeKey(\r\n\t\t\t\t[\r\n\t\t\t\t\tproduct && product.productType,\r\n\t\t\t\t\tproduct && product.product_type,\r\n\t\t\t\t\tproduct && product.type,\r\n\t\t\t\t\tproduct && product.title,\r\n\t\t\t\t]\r\n\t\t\t\t\t.filter(Boolean)\r\n\t\t\t\t\t.join(\" \"),\r\n\t\t\t);\r\n\t\t\treturn source.indexOf(\"professionalpaintkit\") !== -1 ||\r\n\t\t\t\tsource.indexOf(\"vinmatchedprofessional\") !== -1\r\n\t\t\t\t? \"Paint Only\"\r\n\t\t\t\t: \"\";\r\n\t\t}\r\n\t\tfunction kitFormatFromVariant(variant) {\r\n\t\t\tif (!variant) return \"\";\r\n\t\t\tconst opts = variant.selectedOptions || [];\r\n\t\t\tconst sizeOpt = opts.find(function (opt) {\r\n\t\t\t\treturn opt && /size|format/i.test(opt.name || \"\");\r\n\t\t\t});\r\n\t\t\tif (sizeOpt && sizeOpt.value) return String(sizeOpt.value).trim();\r\n\t\t\tif (variant.option2) return String(variant.option2).trim();\r\n\t\t\tconst parts = String(variant.title || \"\").split(\"/\");\r\n\t\t\treturn parts.length > 1 ? parts[1].trim() : \"\";\r\n\t\t}\r\n\t\tvar US_STOREFRONT_TOKEN = \"12ccfcd74b8bc4e56ce0762f51fcf438\";\r\n\t\tvar CA_STOREFRONT_TOKEN = \"2bcf68ed45edc56c19f2f3aa226eb101\";\r\n\t\tvar US_STOREFRONT_API_URL =\r\n\t\t\t\"https://partify-usa-123.myshopify.com/api/2024-01/graphql.json\";\r\n\t\tvar CA_STOREFRONT_API_URL =\r\n\t\t\t\"https://auto-realm.myshopify.com/api/2024-01/graphql.json\";\r\n\r\n\t\tfunction storefrontAccessToken() {\r\n\t\t\treturn window.shopCurrency === \"CAD\"\r\n\t\t\t\t? CA_STOREFRONT_TOKEN\r\n\t\t\t\t: US_STOREFRONT_TOKEN;\r\n\t\t}\r\n\t\tfunction storefrontApiUrl() {\r\n\t\t\treturn window.shopCurrency === \"CAD\"\r\n\t\t\t\t? CA_STOREFRONT_API_URL\r\n\t\t\t\t: \"/api/2024-01/graphql.json\";\r\n\t\t}\r\n\t\tfunction fetchColorDetails(vehicle) {\r\n\t\t\tconst colors = window.PartifyTouchupColorDetails;\r\n\t\t\tconst url = storefrontApiUrl();\r\n\t\t\treturn colors ? colors.load(vehicle, function (payload) {\r\n\t\t\t\treturn postStorefront(url, storefrontAccessToken(), payload);\r\n\t\t\t}, url) : Promise.resolve(null);\r\n\t\t}\r\n\t\tfunction loadColorDetails() {\r\n\t\t\tconst colors = window.PartifyTouchupColorDetails;\r\n\t\t\tif (!colors) return;\r\n\t\t\tconst vehicle = state.vehicle || getVehicle();\r\n\t\t\tconst key = colors.key(vehicle);\r\n\t\t\tif (key === colorDetailsKey) return;\r\n\t\t\tcolorDetailsKey = key;\r\n\t\t\tcolorDetails = null;\r\n\t\t\tconst request = ++colorDetailsRequest;\r\n\t\t\trenderColorPreview();\r\n\t\t\tif (!key) return;\r\n\t\t\tfetchColorDetails(vehicle).then(function (details) {\r\n\t\t\t\tif (request !== colorDetailsRequest || key !== colors.key(state.vehicle || getVehicle())) return;\r\n\t\t\t\tcolorDetails = details;\r\n\t\t\t\trenderColorDropdown();\r\n\t\t\t\trenderColorPreview();\r\n\t\t\t\trenderSummary();\r\n\t\t\t});\r\n\t\t}\r\n\t\tfunction renderColorPreview() {\r\n\t\t\tconst colors = window.PartifyTouchupColorDetails;\r\n\t\t\tif (colors) colors.renderPreview($(\"[data-tuf-color-preview]\"), colorDetails,\r\n\t\t\t\tstate.colorPath === \"code\" ? state.colorCode : \"\");\r\n\t\t}\r\n\t\tfunction resetTouchupKitState() {\r\n\t\t\tkitLoadCatalogKey = \"\";\r\n\t\t\twindow.__touchupSizeMap = {};\r\n\t\t\twindow.__touchupKitEntryCount = 0;\r\n\t\t\twindow.__touchupFormatOrder = Array.isArray(\r\n\t\t\t\twindow.__touchupPreferredFormatOrder,\r\n\t\t\t)\r\n\t\t\t\t? window.__touchupPreferredFormatOrder.slice()\r\n\t\t\t\t: [];\r\n\t\t\twindow.__touchupPackageOrder = [];\r\n\t\t\twindow.__touchupSelectedKitEntry = null;\r\n\t\t\twindow.__touchupSelectedKitVariantId = \"\";\r\n\t\t\twindow.__touchupSelectedKitSku = \"\";\r\n\t\t\twindow.__paintGuardEnforcedId = \"\";\r\n\t\t}\r\n\t\tfunction applyDirectKitProducts(products, brand, collectionMeta) {\r\n\t\t\tresetTouchupKitState();\r\n\t\t\tif (!products || !products.length) return false;\r\n\t\t\tproducts.forEach(function (product) {\r\n\t\t\t\tvar meta = directProductMeta(product);\r\n\t\t\t\tconst tier = meta.packageName || directProductDefaultPackage(product);\r\n\t\t\t\tif (!tier) return;\r\n\t\t\t\tvar variants =\r\n\t\t\t\t\tproduct.variants && product.variants.nodes\r\n\t\t\t\t\t\t? product.variants.nodes\r\n\t\t\t\t\t\t: Array.isArray(product.variants)\r\n\t\t\t\t\t\t\t? product.variants\r\n\t\t\t\t\t\t\t: [];\r\n\t\t\t\tvariants.forEach(function (variant) {\r\n\t\t\t\t\tconst format = meta.format || kitFormatFromVariant(variant);\r\n\t\t\t\t\tif (!format) return;\r\n\t\t\t\t\tvar code = paintCodeFromKitVariant(variant);\r\n\t\t\t\t\tvar available = variantIsAvailable(variant);\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\t!code ||\r\n\t\t\t\t\t\tcode === \"DEFAULT TITLE\" ||\r\n\t\t\t\t\t\t(manualColorOnly && isManualBlockedPaintCode(code))\r\n\t\t\t\t\t)\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\tvar rawPrice =\r\n\t\t\t\t\t\tvariant.price && variant.price.amount\r\n\t\t\t\t\t\t\t? variant.price.amount\r\n\t\t\t\t\t\t\t: variant.price;\r\n\t\t\t\t\tvar price = parseFloat(rawPrice || 0);\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\ttypeof rawPrice === \"number\" &&\r\n\t\t\t\t\t\tNumber.isInteger(rawPrice) &&\r\n\t\t\t\t\t\trawPrice >= 100\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tprice = rawPrice / 100;\r\n\t\t\t\t\t}\r\n\t\t\t\t\taddKitEntry(code, {\r\n\t\t\t\t\t\tid: String(variant.id || \"\").replace(/^.*\\//, \"\"),\r\n\t\t\t\t\t\tsize: format,\r\n\t\t\t\t\t\tpackageName: tier,\r\n\t\t\t\t\t\tprice: isNaN(price) ? \"0.00\" : price.toFixed(2),\r\n\t\t\t\t\t\tcolor: (variant.featured_image && variant.featured_image.src) || \"\",\r\n\t\t\t\t\t\tsku: variant.sku || \"\",\r\n\t\t\t\t\t\tavailable: available,\r\n\t\t\t\t\t\tproductTitle: product.title || \"\",\r\n\t\t\t\t\t\tproductHandle: product.handle || \"\",\r\n\t\t\t\t\t\tproductType:\r\n\t\t\t\t\t\t\tproduct.productType || product.product_type || product.type || \"\",\r\n\t\t\t\t\t\tproductUrl:\r\n\t\t\t\t\t\t\tproduct.url ||\r\n\t\t\t\t\t\t\t(product.handle ? \"/products/\" + product.handle : \"\"),\r\n\t\t\t\t\t\tproductImage:\r\n\t\t\t\t\t\t\tproduct.featuredImage && product.featuredImage.url\r\n\t\t\t\t\t\t\t\t? product.featuredImage.url\r\n\t\t\t\t\t\t\t\t: product.featured_image || \"\",\r\n\t\t\t\t\t\tbrand: brand,\r\n\t\t\t\t\t\tcollectionTitle:\r\n\t\t\t\t\t\t\tcollectionMeta && collectionMeta.title\r\n\t\t\t\t\t\t\t\t? collectionMeta.title\r\n\t\t\t\t\t\t\t\t: \"\",\r\n\t\t\t\t\t\tcollectionHandle:\r\n\t\t\t\t\t\t\tcollectionMeta && collectionMeta.handle\r\n\t\t\t\t\t\t\t\t? collectionMeta.handle\r\n\t\t\t\t\t\t\t\t: \"\",\r\n\t\t\t\t\t\tisKitProduct: true,\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t\tif ((window.__touchupKitEntryCount || 0) > 0) {\r\n\t\t\t\twindow.__PARTIFY_TOUCHUP_KIT_SELECTOR = true;\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tfunction postStorefront(url, token, payload) {\r\n\t\t\tif (typeof fetch === \"function\") {\r\n\t\t\t\treturn fetch(url, {\r\n\t\t\t\t\tmethod: \"POST\",\r\n\t\t\t\t\theaders: {\r\n\t\t\t\t\t\t\"Content-Type\": \"application/json\",\r\n\t\t\t\t\t\t\"X-Shopify-Storefront-Access-Token\": token,\r\n\t\t\t\t\t},\r\n\t\t\t\t\tbody: JSON.stringify(payload),\r\n\t\t\t\t}).then(function (res) {\r\n\t\t\t\t\treturn res.json();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\treturn new Promise(function (resolve, reject) {\r\n\t\t\t\tvar xhr = new XMLHttpRequest();\r\n\t\t\t\txhr.open(\"POST\", url, true);\r\n\t\t\t\txhr.setRequestHeader(\"Content-Type\", \"application/json\");\r\n\t\t\t\txhr.setRequestHeader(\"X-Shopify-Storefront-Access-Token\", token);\r\n\t\t\t\txhr.onreadystatechange = function () {\r\n\t\t\t\t\tif (xhr.readyState !== 4) return;\r\n\t\t\t\t\tif (xhr.status < 200 || xhr.status >= 300) {\r\n\t\t\t\t\t\treject(new Error(\"Storefront API \" + xhr.status));\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tresolve(JSON.parse(xhr.responseText || \"{}\"));\r\n\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\treject(e);\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t\txhr.onerror = function () {\r\n\t\t\t\t\treject(new Error(\"Storefront API request failed\"));\r\n\t\t\t\t};\r\n\t\t\t\txhr.send(JSON.stringify(payload));\r\n\t\t\t});\r\n\t\t}\r\n\t\tfunction loadKitProductsDirect(collectionKey, makeKey) {\r\n\t\t\tvar token = storefrontAccessToken();\r\n\t\t\tvar url = storefrontApiUrl();\r\n\t\t\tconst brand = normalizeTouchupMake(makeKey) || activeTouchupMakeKey();\r\n\t\t\twindow.__TUF_LAST_DIRECT_QUERY = {\r\n\t\t\t\tcollectionKey: collectionKey,\r\n\t\t\t\tbrand: brand,\r\n\t\t\t\tmakeKey: brand,\r\n\t\t\t};\r\n\t\t\tsetDebug({\r\n\t\t\t\tkitProductCollectionKey: collectionKey,\r\n\t\t\t\tdetectedMake: brand,\r\n\t\t\t\tstorefrontApiUrl: url,\r\n\t\t\t\tstorefrontCurrency: window.shopCurrency || \"\",\r\n\t\t\t\tkitProductQuerySource: \"pending\",\r\n\t\t\t\tproductCountReturned: 0,\r\n\t\t\t\tvariantCountReturned: 0,\r\n\t\t\t\tkitCodeCount: 0,\r\n\t\t\t\tlastErrorMessage: \"\",\r\n\t\t\t});\r\n\t\t\troot.setAttribute(\"data-tuf-direct-query\", brand);\r\n\t\t\tvar variantFields =\r\n\t\t\t\t\"id title sku availableForSale price{amount} selectedOptions{name value}\";\r\n\t\t\tvar fields =\r\n\t\t\t\t'title handle productType availableForSale paintFormat:metafield(namespace:\"custom\",key:\"paint_format\"){value} paintTier:metafield(namespace:\"custom\",key:\"paint_tier\"){value} featuredImage{url}';\r\n\t\t\tvar collectionQuery =\r\n\t\t\t\t'query($handle:String!){collection(handle:$handle){title handle metafield(namespace:\"custom\",key:\"touch_up_paint_products\"){references(first:25){nodes{... on Product{' +\r\n\t\t\t\tfields +\r\n\t\t\t\t\"}}}}}}\";\r\n\t\t\tvar query =\r\n\t\t\t\t\"query($query:String!){products(first:50,query:$query){nodes{\" +\r\n\t\t\t\tfields +\r\n\t\t\t\t\"}}}\";\r\n\t\t\tfunction loadProductVariants(product, cursor, acc) {\r\n\t\t\t\tacc = acc || [];\r\n\t\t\t\tvar q =\r\n\t\t\t\t\t\"query($handle:String!,$cursor:String){product(handle:$handle){variants(first:250,after:$cursor){pageInfo{hasNextPage endCursor}nodes{\" +\r\n\t\t\t\t\tvariantFields +\r\n\t\t\t\t\t\"}}}}\";\r\n\t\t\t\treturn postStorefront(url, token, {\r\n\t\t\t\t\tquery: q,\r\n\t\t\t\t\tvariables: { handle: product.handle, cursor: cursor || null },\r\n\t\t\t\t}).then(function (json) {\r\n\t\t\t\t\tvar variants =\r\n\t\t\t\t\t\tjson &&\r\n\t\t\t\t\t\tjson.data &&\r\n\t\t\t\t\t\tjson.data.product &&\r\n\t\t\t\t\t\tjson.data.product.variants;\r\n\t\t\t\t\tvar nodes = variants && variants.nodes ? variants.nodes : [];\r\n\t\t\t\t\tacc = acc.concat(nodes);\r\n\t\t\t\t\tif (variants && variants.pageInfo && variants.pageInfo.hasNextPage) {\r\n\t\t\t\t\t\treturn loadProductVariants(\r\n\t\t\t\t\t\t\tproduct,\r\n\t\t\t\t\t\t\tvariants.pageInfo.endCursor,\r\n\t\t\t\t\t\t\tacc,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tproduct.variants = { nodes: acc };\r\n\t\t\t\t\treturn product;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tfunction loadCollectionProducts() {\r\n\t\t\t\treturn postStorefront(url, token, {\r\n\t\t\t\t\tquery: collectionQuery,\r\n\t\t\t\t\tvariables: { handle: collectionKey },\r\n\t\t\t\t}).then(function (json) {\r\n\t\t\t\t\tvar collection = json && json.data && json.data.collection;\r\n\t\t\t\t\tvar products =\r\n\t\t\t\t\t\tcollection &&\r\n\t\t\t\t\t\tcollection.metafield &&\r\n\t\t\t\t\t\tcollection.metafield.references &&\r\n\t\t\t\t\t\tcollection.metafield.references.nodes\r\n\t\t\t\t\t\t\t? collection.metafield.references.nodes || []\r\n\t\t\t\t\t\t\t: [];\r\n\t\t\t\t\treturn Promise.all(\r\n\t\t\t\t\t\tproducts.map(function (product) {\r\n\t\t\t\t\t\t\treturn loadProductVariants(product);\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t).then(function (loaded) {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tproducts: loaded,\r\n\t\t\t\t\t\t\tcollection: collection,\r\n\t\t\t\t\t\t\tsource: \"collection.custom.touch_up_paint_products\",\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tconst AJAX_PRODUCT_VARIANT_PAGE_SIZE = 250;\r\n\t\t\tconst AJAX_PRODUCT_MAX_PAGES = 20;\r\n\t\t\tfunction loadAjaxProduct(handle, page, baseProduct, variants) {\r\n\t\t\t\tif (typeof fetch !== \"function\") return Promise.resolve(null);\r\n\t\t\t\tconst pageNumber = page || 1;\r\n\t\t\t\tconst accumulatedVariants = Array.isArray(variants) ? variants : [];\r\n\t\t\t\treturn fetch(\r\n\t\t\t\t\t\"/products/\" + encodeURIComponent(handle) + \".js?page=\" + pageNumber,\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcredentials: \"same-origin\",\r\n\t\t\t\t\t\theaders: { Accept: \"application/json\" },\r\n\t\t\t\t\t},\r\n\t\t\t\t)\r\n\t\t\t\t\t.then(function (res) {\r\n\t\t\t\t\t\tif (!res || !res.ok) return null;\r\n\t\t\t\t\t\treturn res.json();\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.then(function (pageProduct) {\r\n\t\t\t\t\t\tif (!pageProduct || !pageProduct.handle) return null;\r\n\t\t\t\t\t\tconst product = baseProduct || pageProduct;\r\n\t\t\t\t\t\tconst pageVariants = Array.isArray(pageProduct.variants)\r\n\t\t\t\t\t\t\t? pageProduct.variants\r\n\t\t\t\t\t\t\t: [];\r\n\t\t\t\t\t\tconst allVariants = accumulatedVariants.concat(pageVariants);\r\n\t\t\t\t\t\tproduct.variants = allVariants;\r\n\t\t\t\t\t\tif (pageVariants.length === AJAX_PRODUCT_VARIANT_PAGE_SIZE) {\r\n\t\t\t\t\t\t\tif (pageNumber >= AJAX_PRODUCT_MAX_PAGES) return product;\r\n\t\t\t\t\t\t\treturn loadAjaxProduct(\r\n\t\t\t\t\t\t\t\thandle,\r\n\t\t\t\t\t\t\t\tpageNumber + 1,\r\n\t\t\t\t\t\t\t\tproduct,\r\n\t\t\t\t\t\t\t\tallVariants,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn product;\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function () {\r\n\t\t\t\t\t\treturn baseProduct || null;\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tfunction loadAjaxHandleProducts() {\r\n\t\t\t\tvar handles = touchupProductHandleCandidates(brand);\r\n\t\t\t\tvar make = touchupProductMake(brand);\r\n\t\t\t\treturn Promise.all(\r\n\t\t\t\t\thandles.map(function (handle) {\r\n\t\t\t\t\t\treturn loadAjaxProduct(handle);\r\n\t\t\t\t\t}),\r\n\t\t\t\t).then(function (products) {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tproducts: products.filter(Boolean),\r\n\t\t\t\t\t\tcollection: {\r\n\t\t\t\t\t\t\thandle: make + \"-touch-up-products\",\r\n\t\t\t\t\t\t\ttitle: brandTitle(brand) + \" Touch-Up Paint\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tsource: \"ajax_product_json\",\r\n\t\t\t\t\t\ttag: make,\r\n\t\t\t\t\t\thandlesTried: handles,\r\n\t\t\t\t\t};\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tfunction loadTaggedProducts() {\r\n\t\t\t\tvar tags = brandSearchTags(brand);\r\n\t\t\t\tfunction fetchByTag(index) {\r\n\t\t\t\t\tvar tag = tags[index] || brand;\r\n\t\t\t\t\tfunction fetchTagged(queryText) {\r\n\t\t\t\t\t\treturn postStorefront(url, token, {\r\n\t\t\t\t\t\t\tquery: query,\r\n\t\t\t\t\t\t\tvariables: { query: queryText },\r\n\t\t\t\t\t\t}).then(function (json) {\r\n\t\t\t\t\t\t\treturn json && json.data && json.data.products\r\n\t\t\t\t\t\t\t\t? json.data.products.nodes || []\r\n\t\t\t\t\t\t\t\t: [];\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn fetchTagged(\"tag:kit tag:\" + tag + \" tag:touchup-paint\")\r\n\t\t\t\t\t\t.then(function (products) {\r\n\t\t\t\t\t\t\tif (products.length) return products;\r\n\t\t\t\t\t\t\treturn fetchTagged(\"tag:\" + tag + \" tag:touchup-paint\");\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\t.then(function (products) {\r\n\t\t\t\t\t\t\treturn Promise.all(\r\n\t\t\t\t\t\t\t\tproducts.map(function (product) {\r\n\t\t\t\t\t\t\t\t\treturn loadProductVariants(product);\r\n\t\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\t).then(function (loaded) {\r\n\t\t\t\t\t\t\t\tif (!loaded.length && index < tags.length - 1) {\r\n\t\t\t\t\t\t\t\t\treturn fetchByTag(index + 1);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\t\tproducts: loaded,\r\n\t\t\t\t\t\t\t\t\tcollection: null,\r\n\t\t\t\t\t\t\t\t\tsource: \"product_tags\",\r\n\t\t\t\t\t\t\t\t\ttag: tag,\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\treturn fetchByTag(0);\r\n\t\t\t}\r\n\t\t\tfunction productKey(product) {\r\n\t\t\t\tif (!product) return \"\";\r\n\t\t\t\treturn (\r\n\t\t\t\t\tString(product.id || \"\") ||\r\n\t\t\t\t\tString(product.handle || \"\") ||\r\n\t\t\t\t\tString(product.title || \"\")\r\n\t\t\t\t).toLowerCase();\r\n\t\t\t}\r\n\t\t\tfunction mergeProductResults(results) {\r\n\t\t\t\tvar seen = {};\r\n\t\t\t\tvar merged = [];\r\n\t\t\t\tvar sources = [];\r\n\t\t\t\tvar handlesTried = [];\r\n\t\t\t\tvar collection = null;\r\n\t\t\t\tvar tag = \"\";\r\n\t\t\t\t(results || []).forEach(function (result) {\r\n\t\t\t\t\tif (!result) return;\r\n\t\t\t\t\tif (result.source && sources.indexOf(result.source) === -1)\r\n\t\t\t\t\t\tsources.push(result.source);\r\n\t\t\t\t\tif (!collection && result.collection) collection = result.collection;\r\n\t\t\t\t\tif (!tag && result.tag) tag = result.tag;\r\n\t\t\t\t\tif (Array.isArray(result.handlesTried))\r\n\t\t\t\t\t\thandlesTried = handlesTried.concat(result.handlesTried);\r\n\t\t\t\t\t(result.products || []).forEach(function (product) {\r\n\t\t\t\t\t\tvar key = productKey(product);\r\n\t\t\t\t\t\tif (!key || seen[key]) return;\r\n\t\t\t\t\t\tseen[key] = 1;\r\n\t\t\t\t\t\tmerged.push(product);\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t\treturn {\r\n\t\t\t\t\tproducts: merged,\r\n\t\t\t\t\tcollection: collection,\r\n\t\t\t\t\tsource: sources.join(\"+\"),\r\n\t\t\t\t\ttag: tag,\r\n\t\t\t\t\thandlesTried: handlesTried,\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\treturn loadCollectionProducts()\r\n\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\tsetDebug({\r\n\t\t\t\t\t\tkitProductQuerySource: \"collection.custom.touch_up_paint_products\",\r\n\t\t\t\t\t\tlastErrorMessage: err && err.message ? err.message : String(err),\r\n\t\t\t\t\t});\r\n\t\t\t\t\treturn { products: [], collection: null, source: \"collection_error\" };\r\n\t\t\t\t})\r\n\t\t\t\t.then(function (result) {\r\n\t\t\t\t\treturn Promise.all([\r\n\t\t\t\t\t\tPromise.resolve(result),\r\n\t\t\t\t\t\tloadAjaxHandleProducts().catch(function () {\r\n\t\t\t\t\t\t\treturn { products: [], source: \"ajax_product_json_error\" };\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t\tloadTaggedProducts().catch(function () {\r\n\t\t\t\t\t\t\treturn { products: [], source: \"product_tags_error\" };\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t]).then(mergeProductResults);\r\n\t\t\t\t})\r\n\t\t\t\t.then(function (result) {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tbrand !== activeBrand() ||\r\n\t\t\t\t\t\tcollectionKey !== vehicleCollectionKey()\r\n\t\t\t\t\t)\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\tvar products = (result && result.products) || [];\r\n\t\t\t\t\tvar codeCount = {};\r\n\t\t\t\t\tvar variantCount = 0;\r\n\t\t\t\t\tvar availableVariantCount = 0;\r\n\t\t\t\t\tvar unavailableVariantCount = 0;\r\n\t\t\t\t\tproducts.forEach(function (product) {\r\n\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t(product.variants && product.variants.nodes) ||\r\n\t\t\t\t\t\t\t(Array.isArray(product.variants) ? product.variants : [])\r\n\t\t\t\t\t\t).forEach(function (variant) {\r\n\t\t\t\t\t\t\tvariantCount += 1;\r\n\t\t\t\t\t\t\tvar available = variantIsAvailable(variant);\r\n\t\t\t\t\t\t\tif (available) availableVariantCount += 1;\r\n\t\t\t\t\t\t\telse unavailableVariantCount += 1;\r\n\t\t\t\t\t\t\tvar code = paintCodeFromKitVariant(variant);\r\n\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\tcode &&\r\n\t\t\t\t\t\t\t\tavailable &&\r\n\t\t\t\t\t\t\t\t!(manualColorOnly && isManualBlockedPaintCode(code))\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\tcodeCount[code] = 1;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t});\r\n\t\t\t\t\twindow.__TUF_LAST_DIRECT_RESULT = {\r\n\t\t\t\t\t\tok: true,\r\n\t\t\t\t\t\tproductCount: products.length,\r\n\t\t\t\t\t\tsource: result && result.source,\r\n\t\t\t\t\t\ttag: result && result.tag,\r\n\t\t\t\t\t\tvariantCount: variantCount,\r\n\t\t\t\t\t\tavailableVariantCount: availableVariantCount,\r\n\t\t\t\t\t\tunavailableVariantCount: unavailableVariantCount,\r\n\t\t\t\t\t\thandles: products\r\n\t\t\t\t\t\t\t.map(function (p) {\r\n\t\t\t\t\t\t\t\treturn p.handle;\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t.slice(0, 30),\r\n\t\t\t\t\t\thandlesTried: result && result.handlesTried,\r\n\t\t\t\t\t\tcodeCount: Object.keys(codeCount).length,\r\n\t\t\t\t\t};\r\n\t\t\t\t\tsetDebug({\r\n\t\t\t\t\t\tkitProductQuerySource: result && result.source,\r\n\t\t\t\t\t\tkitProductQueryTag: (result && result.tag) || \"\",\r\n\t\t\t\t\t\tproductCountReturned: products.length,\r\n\t\t\t\t\t\tvariantCountReturned: variantCount,\r\n\t\t\t\t\t\tavailableVariantCount: availableVariantCount,\r\n\t\t\t\t\t\tunavailableVariantCount: unavailableVariantCount,\r\n\t\t\t\t\t\tkitCodeCount: Object.keys(codeCount).length,\r\n\t\t\t\t\t\tlastErrorMessage: \"\",\r\n\t\t\t\t\t});\r\n\t\t\t\t\troot.setAttribute(\r\n\t\t\t\t\t\t\"data-tuf-direct-products\",\r\n\t\t\t\t\t\tString(products.length),\r\n\t\t\t\t\t);\r\n\t\t\t\t\troot.setAttribute(\r\n\t\t\t\t\t\t\"data-tuf-direct-codes\",\r\n\t\t\t\t\t\tString(Object.keys(codeCount).length),\r\n\t\t\t\t\t);\r\n\t\t\t\t\treturn applyDirectKitProducts(\r\n\t\t\t\t\t\tproducts,\r\n\t\t\t\t\t\tbrand,\r\n\t\t\t\t\t\tresult && result.collection\r\n\t\t\t\t\t\t\t? result.collection\r\n\t\t\t\t\t\t\t: { handle: collectionKey, title: \"\" },\r\n\t\t\t\t\t);\r\n\t\t\t\t})\r\n\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\twindow.__TUF_LAST_DIRECT_RESULT = {\r\n\t\t\t\t\t\tok: false,\r\n\t\t\t\t\t\terror: err && err.message ? err.message : String(err),\r\n\t\t\t\t\t};\r\n\t\t\t\t\tsetDebug({\r\n\t\t\t\t\t\tlastErrorMessage: err && err.message ? err.message : String(err),\r\n\t\t\t\t\t});\r\n\t\t\t\t\troot.setAttribute(\r\n\t\t\t\t\t\t\"data-tuf-direct-error\",\r\n\t\t\t\t\t\terr && err.message ? err.message : String(err),\r\n\t\t\t\t\t);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction activeVehicleKey() {\r\n\t\t\tvar v = state.vehicle || getVehicle() || {};\r\n\t\t\treturn vehicleLookupHandle(v);\r\n\t\t}\r\n\t\tfunction vehicleLookupHandle(vehicle) {\r\n\t\t\tvehicle = vehicle || {};\r\n\t\t\treturn handleize(\r\n\t\t\t\t[vehicle.year, vehicle.make, vehicle.model].filter(Boolean).join(\" \") ||\r\n\t\t\t\t\tString(vehicle.ymm || vehicle.YMM || vehicle.vehicle || \"\"),\r\n\t\t\t);\r\n\t\t}\r\n\t\tfunction twoToneVehicleHandles(vehicle) {\r\n\t\t\treturn window.PartifyTwoToneRuleResolver.vehicleHandles(vehicle);\r\n\t\t}\r\n\t\tfunction twoToneVehicleKey(vehicle) {\r\n\t\t\treturn twoToneVehicleHandles(vehicle).join(\"|\");\r\n\t\t}\r\n\t\tfunction normalizeTwoToneRuleHandles(handles) {\r\n\t\t\tconst normalized = [];\r\n\t\t\t[].concat(handles || []).forEach(function (handle) {\r\n\t\t\t\tconst value = handleize(handle);\r\n\t\t\t\tif (value && normalized.indexOf(value) === -1) normalized.push(value);\r\n\t\t\t});\r\n\t\t\treturn normalized;\r\n\t\t}\r\n\t\tfunction twoToneRuleMatchesVehicle(vehicle, ruleHandles) {\r\n\t\t\tconst vehicleHandles = twoToneVehicleHandles(vehicle);\r\n\t\t\treturn vehicleHandles.some(function (handle) {\r\n\t\t\t\treturn ruleHandles.indexOf(handle) !== -1;\r\n\t\t\t});\r\n\t\t}\r\n\t\tfunction normalizeTwoToneRuleCodes(codes) {\r\n\t\t\tconst normalized = [];\r\n\t\t\t[].concat(codes || []).forEach(function (code) {\r\n\t\t\t\tconst value = String(code || \"\")\r\n\t\t\t\t\t.trim()\r\n\t\t\t\t\t.toUpperCase();\r\n\t\t\t\tif (value && normalized.indexOf(value) === -1) normalized.push(value);\r\n\t\t\t});\r\n\t\t\treturn normalized;\r\n\t\t}\r\n\t\tfunction normalizeTwoToneRuleResult(result, vehicle) {\r\n\t\t\tconst codes = normalizeTwoToneRuleCodes(\r\n\t\t\t\tresult && Array.isArray(result.codes) ? result.codes : result,\r\n\t\t\t);\r\n\t\t\treturn {\r\n\t\t\t\tcodes: codes,\r\n\t\t\t\thandles: normalizeTwoToneRuleHandles(\r\n\t\t\t\t\tresult && Array.isArray(result.handles)\r\n\t\t\t\t\t\t? result.handles\r\n\t\t\t\t\t\t: codes.length\r\n\t\t\t\t\t\t\t? twoToneVehicleHandles(vehicle)\r\n\t\t\t\t\t\t\t: [],\r\n\t\t\t\t),\r\n\t\t\t};\r\n\t\t}\r\n\t\tfunction directTwoToneRuleForVehicle(vehicle) {\r\n\t\t\tconst handles = twoToneVehicleHandles(vehicle);\r\n\t\t\tif (!handles.length) return Promise.resolve({ codes: [], handles: [] });\r\n\t\t\tconst url = storefrontApiUrl();\r\n\t\t\tconst token = storefrontAccessToken();\r\n\t\t\tconst ymmFields = handles\r\n\t\t\t\t.map(function (handle, index) {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\"ymm\" +\r\n\t\t\t\t\t\tindex +\r\n\t\t\t\t\t\t':metaobject(handle:{type:\"year_make_model_lookup\",handle:' +\r\n\t\t\t\t\t\tJSON.stringify(handle) +\r\n\t\t\t\t\t\t\"}){id handle}\"\r\n\t\t\t\t\t);\r\n\t\t\t\t})\r\n\t\t\t\t.join(\" \");\r\n\t\t\treturn postStorefront(url, token, { query: \"query{\" + ymmFields + \"}\" })\r\n\t\t\t\t.then(function (json) {\r\n\t\t\t\t\tconst ymmById = {};\r\n\t\t\t\t\tObject.keys((json && json.data) || {}).forEach(function (key) {\r\n\t\t\t\t\t\tconst ymm = json.data[key];\r\n\t\t\t\t\t\tif (!ymm || !ymm.id) return;\r\n\t\t\t\t\t\tymmById[ymm.id] = ymm.handle || handles[Number(key.replace(\"ymm\", \"\"))];\r\n\t\t\t\t\t});\r\n\t\t\t\t\tconst ids = Object.keys(ymmById);\r\n\t\t\t\t\tif (!ids.length) return { codes: [], handles: [] };\r\n\t\t\t\t\tconst matchingRules = [];\r\n\t\t\t\t\tfunction fetchRulePage(cursor, guard) {\r\n\t\t\t\t\t\tif (guard >= 20) return Promise.resolve();\r\n\t\t\t\t\t\tconst after = cursor ? \",after:\" + JSON.stringify(cursor) : \"\";\r\n\t\t\t\t\t\tconst query =\r\n\t\t\t\t\t\t\t'{rules:metaobjects(type:\"two_tone_paint_code_rule\",first:100' +\r\n\t\t\t\t\t\t\tafter +\r\n\t\t\t\t\t\t\t'){pageInfo{hasNextPage endCursor}nodes{active:field(key:\"active\"){value}ymms:field(key:\"applicable_ymm_entries\"){value}codes:field(key:\"approved_paint_codes\"){references(first:250){nodes{... on Metaobject{handle code:field(key:\"paint_code\"){value}}}}}}}}';\r\n\t\t\t\t\t\treturn postStorefront(url, token, { query: query }).then(function (\r\n\t\t\t\t\t\t\tpageJson,\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\tconst rules =\r\n\t\t\t\t\t\t\t\tpageJson && pageJson.data && pageJson.data.rules\r\n\t\t\t\t\t\t\t\t\t? pageJson.data.rules\r\n\t\t\t\t\t\t\t\t\t: null;\r\n\t\t\t\t\t\t\tif (!rules) return;\r\n\t\t\t\t\t\t\t(rules.nodes || []).forEach(function (rule) {\r\n\t\t\t\t\t\t\t\tif (!rule || !rule.active || rule.active.value !== \"true\") return;\r\n\t\t\t\t\t\t\t\tlet applicableIds = [];\r\n\t\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\t\tapplicableIds = JSON.parse((rule.ymms && rule.ymms.value) || \"[]\");\r\n\t\t\t\t\t\t\t\t} catch (e) {}\r\n\t\t\t\t\t\t\t\tif (!Array.isArray(applicableIds)) return;\r\n\t\t\t\t\t\t\t\tconst matchedIds = applicableIds.filter(function (id) {\r\n\t\t\t\t\t\t\t\t\treturn ids.indexOf(id) !== -1;\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\tif (!matchedIds.length) return;\r\n\t\t\t\t\t\t\t\tconst nodes =\r\n\t\t\t\t\t\t\t\t\trule.codes && rule.codes.references\r\n\t\t\t\t\t\t\t\t\t\t? rule.codes.references.nodes || []\r\n\t\t\t\t\t\t\t\t\t\t: [];\r\n\t\t\t\t\t\t\t\tmatchingRules.push({\r\n\t\t\t\t\t\t\t\t\tymms: matchedIds.map(function (id) {\r\n\t\t\t\t\t\t\t\t\t\treturn ymmById[id];\r\n\t\t\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\t\t\tscopeSize: applicableIds.length,\r\n\t\t\t\t\t\t\t\t\tcodes: nodes.map(function (node) {\r\n\t\t\t\t\t\t\t\t\t\treturn node && node.code && node.code.value\r\n\t\t\t\t\t\t\t\t\t\t\t? node.code.value\r\n\t\t\t\t\t\t\t\t\t\t\t: node && node.handle;\r\n\t\t\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\trules.pageInfo &&\r\n\t\t\t\t\t\t\t\trules.pageInfo.hasNextPage &&\r\n\t\t\t\t\t\t\t\trules.pageInfo.endCursor\r\n\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\treturn fetchRulePage(rules.pageInfo.endCursor, guard + 1);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn fetchRulePage(null, 0).then(function () {\r\n\t\t\t\t\t\tconst selected = window.PartifyTwoToneRuleResolver.selectRule(\r\n\t\t\t\t\t\t\tmatchingRules,\r\n\t\t\t\t\t\t\thandles,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tcodes: normalizeTwoToneRuleCodes(selected ? selected.codes : []),\r\n\t\t\t\t\t\t\thandles: normalizeTwoToneRuleHandles(\r\n\t\t\t\t\t\t\t\tselected ? [selected.matchedHandle] : [],\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t});\r\n\t\t\t\t})\r\n\t\t\t\t.catch(function () {\r\n\t\t\t\t\treturn { codes: [], handles: [] };\r\n\t\t\t\t});\r\n\t\t}\r\n\t\tfunction applyTwoToneRuleResult(key, result) {\r\n\t\t\tconst normalized = normalizeTwoToneRuleResult(result);\r\n\t\t\ttwoToneRuleCache[key] = normalized;\r\n\t\t\tif (\r\n\t\t\t\ttwoToneVehicleKey(state.vehicle || getVehicle()) !== key &&\r\n\t\t\t\t!twoToneRuleMatchesVehicle(\r\n\t\t\t\t\tstate.vehicle || getVehicle(),\r\n\t\t\t\t\tnormalized.handles,\r\n\t\t\t\t)\r\n\t\t\t)\r\n\t\t\t\treturn normalized.codes;\r\n\t\t\ttwoToneRuleState.handles = normalized.handles;\r\n\t\t\ttwoToneRuleState.codes = normalized.codes;\r\n\t\t\troot.setAttribute(\r\n\t\t\t\t\"data-tuf-two-tone-eligible\",\r\n\t\t\t\tisTwoToneEligible() ? \"true\" : \"false\",\r\n\t\t\t);\r\n\t\t\treturn normalized.codes;\r\n\t\t}\r\n\t\tfunction loadTwoToneRuleForVehicle(vehicle) {\r\n\t\t\tvehicle = vehicle || state.vehicle || getVehicle() || {};\r\n\t\t\tif (!twoToneRulesEnabled) {\r\n\t\t\t\ttwoToneRuleState.handles = [];\r\n\t\t\t\ttwoToneRuleState.codes = [];\r\n\t\t\t\troot.setAttribute(\"data-tuf-two-tone-eligible\", \"false\");\r\n\t\t\t\treturn Promise.resolve([]);\r\n\t\t\t}\r\n\t\t\tconst key = twoToneVehicleKey(vehicle);\r\n\t\t\tif (!key) {\r\n\t\t\t\ttwoToneRuleState.handles = [];\r\n\t\t\t\ttwoToneRuleState.codes = [];\r\n\t\t\t\troot.setAttribute(\"data-tuf-two-tone-eligible\", \"false\");\r\n\t\t\t\treturn Promise.resolve([]);\r\n\t\t\t}\r\n\t\t\tif (Object.prototype.hasOwnProperty.call(twoToneRuleCache, key))\r\n\t\t\t\treturn Promise.resolve(applyTwoToneRuleResult(key, twoToneRuleCache[key]));\r\n\t\t\tif (!twoToneRuleRequests[key]) {\r\n\t\t\t\troot.setAttribute(\r\n\t\t\t\t\t\"data-tuf-two-tone-source\",\r\n\t\t\t\t\ttypeof window.__partifyTouchupFetchTwoToneRule === \"function\"\r\n\t\t\t\t\t\t? \"provided\"\r\n\t\t\t\t\t\t: \"two_tone_paint_code_rule\",\r\n\t\t\t\t);\r\n\t\t\t\ttwoToneRuleRequests[key] = Promise.resolve(\r\n\t\t\t\t\ttypeof window.__partifyTouchupFetchTwoToneRule === \"function\"\r\n\t\t\t\t\t\t? window.__partifyTouchupFetchTwoToneRule(vehicle)\r\n\t\t\t\t\t\t: directTwoToneRuleForVehicle(vehicle),\r\n\t\t\t\t)\r\n\t\t\t\t\t.then(function (result) {\r\n\t\t\t\t\t\treturn normalizeTwoToneRuleResult(result, vehicle);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function () {\r\n\t\t\t\t\t\treturn { codes: [], handles: [] };\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\t\t\treturn twoToneRuleRequests[key].then(function (result) {\r\n\t\t\t\treturn applyTwoToneRuleResult(key, result);\r\n\t\t\t});\r\n\t\t}\r\n\t\tfunction twoToneCodeAllowed(code) {\r\n\t\t\tconst normalized = String(code || \"\")\r\n\t\t\t\t.trim()\r\n\t\t\t\t.toUpperCase();\r\n\t\t\tconst comparable = normalized.indexOf(\"WA\") === 0 ? normalized.slice(2) : normalized;\r\n\t\t\treturn twoToneRuleState.codes.some(function (approved) {\r\n\t\t\t\tconst approvedComparable =\r\n\t\t\t\t\tapproved.indexOf(\"WA\") === 0 ? approved.slice(2) : approved;\r\n\t\t\t\treturn (\r\n\t\t\t\t\tcomparable === approvedComparable ||\r\n\t\t\t\t\tcomparable.indexOf(approvedComparable + \" \") === 0 ||\r\n\t\t\t\t\tcomparable.indexOf(approvedComparable + \"+\") === 0\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t\t}\r\n\t\tvar directAllowedCodeCache = {};\r\n\t\tvar vehicleCollectionCodeCache = {};\r\n\t\tfunction collectionJsonUrl(handle) {\r\n\t\t\tvar rootPath =\r\n\t\t\t\t(window.Shopify &&\r\n\t\t\t\t\twindow.Shopify.routes &&\r\n\t\t\t\t\twindow.Shopify.routes.root) ||\r\n\t\t\t\t\"/\";\r\n\t\t\trootPath = String(rootPath || \"/\").replace(/\\/?$/, \"/\");\r\n\t\t\treturn (\r\n\t\t\t\trootPath +\r\n\t\t\t\t\"collections/\" +\r\n\t\t\t\tencodeURIComponent(handle) +\r\n\t\t\t\t\"/products.json?limit=250\"\r\n\t\t\t);\r\n\t\t}\r\n\t\tfunction normalizeCollectionPaintCode(value) {\r\n\t\t\tvar code = String(value || \"\")\r\n\t\t\t\t.trim()\r\n\t\t\t\t.toUpperCase();\r\n\t\t\tif (\r\n\t\t\t\t!code ||\r\n\t\t\t\t/UNPAINTED|MATCH PAINT|CUSTOM PAINT|DEFAULT TITLE/i.test(code)\r\n\t\t\t)\r\n\t\t\t\treturn \"\";\r\n\t\t\tif (/AFTERMARKET|CAPA|OEM|CERTIFIED/i.test(code)) return \"\";\r\n\t\t\treturn /^[A-Z0-9]{2,5}$/.test(code) ? code : \"\";\r\n\t\t}\r\n\t\tfunction paintCodeFromCollectionVariant(variant) {\r\n\t\t\tvar candidates = [\r\n\t\t\t\tvariant && variant.option2,\r\n\t\t\t\tvariant && variant.option1,\r\n\t\t\t\tvariant && variant.title,\r\n\t\t\t];\r\n\t\t\tfor (var i = 0; i < candidates.length; i++) {\r\n\t\t\t\tvar code = normalizeCollectionPaintCode(candidates[i]);\r\n\t\t\t\tif (code) return code;\r\n\t\t\t}\r\n\t\t\treturn \"\";\r\n\t\t}\r\n\t\tfunction normalizePaintCodeList(codes) {\r\n\t\t\tvar seen = {};\r\n\t\t\tvar out = [];\r\n\t\t\t(codes || []).forEach(function (code) {\r\n\t\t\t\tcode = String(code || \"\")\r\n\t\t\t\t\t.trim()\r\n\t\t\t\t\t.toUpperCase();\r\n\t\t\t\tif (!code || seen[code]) return;\r\n\t\t\t\tseen[code] = 1;\r\n\t\t\t\tout.push(code);\r\n\t\t\t});\r\n\t\t\treturn out;\r\n\t\t}\r\n\t\tfunction mergePaintCodeLists() {\r\n\t\t\tvar merged = [];\r\n\t\t\tfor (var i = 0; i < arguments.length; i++) {\r\n\t\t\t\tmerged = merged.concat(arguments[i] || []);\r\n\t\t\t}\r\n\t\t\treturn normalizePaintCodeList(merged);\r\n\t\t}\r\n\t\tfunction vehicleCollectionPaintCodes(handle) {\r\n\t\t\tif (!handle || typeof fetch !== \"function\") return Promise.resolve([]);\r\n\t\t\tif (vehicleCollectionCodeCache[handle])\r\n\t\t\t\treturn Promise.resolve(vehicleCollectionCodeCache[handle]);\r\n\t\t\treturn fetch(collectionJsonUrl(handle), {\r\n\t\t\t\tcredentials: \"same-origin\",\r\n\t\t\t\theaders: { Accept: \"application/json\" },\r\n\t\t\t})\r\n\t\t\t\t.then(function (res) {\r\n\t\t\t\t\tif (!res || !res.ok) return null;\r\n\t\t\t\t\treturn res.json();\r\n\t\t\t\t})\r\n\t\t\t\t.then(function (json) {\r\n\t\t\t\t\tvar products = (json && json.products) || [];\r\n\t\t\t\t\tvar seen = {};\r\n\t\t\t\t\tvar paintedProductCount = 0;\r\n\t\t\t\t\tproducts.forEach(function (product) {\r\n\t\t\t\t\t\tvar productHadCode = false;\r\n\t\t\t\t\t\t((product && product.variants) || []).forEach(function (variant) {\r\n\t\t\t\t\t\t\tvar code = paintCodeFromCollectionVariant(variant);\r\n\t\t\t\t\t\t\tif (!code) return;\r\n\t\t\t\t\t\t\tseen[code] = 1;\r\n\t\t\t\t\t\t\tproductHadCode = true;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tif (productHadCode) paintedProductCount += 1;\r\n\t\t\t\t\t});\r\n\t\t\t\t\tvar codes = Object.keys(seen).sort();\r\n\t\t\t\t\tvehicleCollectionCodeCache[handle] = codes;\r\n\t\t\t\t\tsetDebug({\r\n\t\t\t\t\t\tvehicleCollectionProductCount: products.length,\r\n\t\t\t\t\t\tvehicleCollectionPaintedProductCount: paintedProductCount,\r\n\t\t\t\t\t\tvehicleCollectionPaintCodeCount: codes.length,\r\n\t\t\t\t\t});\r\n\t\t\t\t\treturn codes;\r\n\t\t\t\t})\r\n\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\tsetDebug({\r\n\t\t\t\t\t\tvehicleCollectionProductCount: 0,\r\n\t\t\t\t\t\tvehicleCollectionPaintedProductCount: 0,\r\n\t\t\t\t\t\tvehicleCollectionPaintCodeCount: 0,\r\n\t\t\t\t\t\tlastErrorMessage: err && err.message ? err.message : String(err),\r\n\t\t\t\t\t});\r\n\t\t\t\t\treturn [];\r\n\t\t\t\t});\r\n\t\t}\r\n\t\tfunction directAllowedCodesForVehicle(vehicle) {\r\n\t\t\tvehicle = vehicle || state.vehicle || getVehicle() || {};\r\n\t\t\tif (\r\n\t\t\t\tisBumperDotcomVehicle(vehicle) &&\r\n\t\t\t\t(shouldIgnoreDecodedPaintCode(vehicle) ||\r\n\t\t\t\t\tisMatchByVinCode(vehicle.paintCode))\r\n\t\t\t) {\r\n\t\t\t\tif (!manualColorOnly) return Promise.resolve([\"MATCH PAINT BY VIN\"]);\r\n\t\t\t}\r\n\t\t\tvar handle = vehicleLookupHandle(vehicle);\r\n\t\t\tif (!handle) return Promise.resolve(null);\r\n\t\t\tif (directAllowedCodeCache[handle])\r\n\t\t\t\treturn Promise.resolve(directAllowedCodeCache[handle]);\r\n\t\t\tsetDebug({\r\n\t\t\t\tpaintCodeSourceAttempted: \"year_make_model_lookup.paint_codes\",\r\n\t\t\t\tvehicleKey: handle,\r\n\t\t\t\tymmHandle: handle,\r\n\t\t\t\tallowedYmmCodesCount: 0,\r\n\t\t\t\tlastErrorMessage: \"\",\r\n\t\t\t});\r\n\t\t\tvar codes = [];\r\n\t\t\tvar sourceUsed = \"year_make_model_lookup.paint_codes\";\r\n\t\t\tfunction fetchYmmPaintCodes(url, token) {\r\n\t\t\t\tvar fetchedCodes = [];\r\n\t\t\t\tvar fallbackValue = \"\";\r\n\t\t\t\tfunction fetchPage(cursor, guard) {\r\n\t\t\t\t\tif (guard >= 50) return Promise.resolve();\r\n\t\t\t\t\tvar after = cursor ? \", after: \" + JSON.stringify(cursor) : \"\";\r\n\t\t\t\t\tvar query =\r\n\t\t\t\t\t\t'{ metaobject(handle: {type: \"year_make_model_lookup\", handle: ' +\r\n\t\t\t\t\t\tJSON.stringify(handle) +\r\n\t\t\t\t\t\t'}) { pc: field(key: \"paint_codes\") { value references(first: 250' +\r\n\t\t\t\t\t\tafter +\r\n\t\t\t\t\t\t') { pageInfo { hasNextPage endCursor } nodes { ... on Metaobject { code: field(key: \"paint_code\") { value } } } } } } }';\r\n\t\t\t\t\treturn postStorefront(url, token, { query: query }).then(\r\n\t\t\t\t\t\tfunction (json) {\r\n\t\t\t\t\t\t\tvar field =\r\n\t\t\t\t\t\t\t\tjson &&\r\n\t\t\t\t\t\t\t\tjson.data &&\r\n\t\t\t\t\t\t\t\tjson.data.metaobject &&\r\n\t\t\t\t\t\t\t\tjson.data.metaobject.pc;\r\n\t\t\t\t\t\t\tif (!field) return;\r\n\t\t\t\t\t\t\tvar refs =\r\n\t\t\t\t\t\t\t\tfield.references && field.references.nodes\r\n\t\t\t\t\t\t\t\t\t? field.references.nodes\r\n\t\t\t\t\t\t\t\t\t: [];\r\n\t\t\t\t\t\t\tif (refs.length) {\r\n\t\t\t\t\t\t\t\tfetchedCodes = fetchedCodes.concat(\r\n\t\t\t\t\t\t\t\t\trefs\r\n\t\t\t\t\t\t\t\t\t\t.map(function (node) {\r\n\t\t\t\t\t\t\t\t\t\t\treturn node && node.code ? node.code.value : \"\";\r\n\t\t\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t\t\t.filter(Boolean),\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t} else if (!cursor && field.value) {\r\n\t\t\t\t\t\t\t\tfallbackValue = field.value;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tvar pageInfo = field.references && field.references.pageInfo;\r\n\t\t\t\t\t\t\tif (pageInfo && pageInfo.hasNextPage && pageInfo.endCursor) {\r\n\t\t\t\t\t\t\t\treturn fetchPage(pageInfo.endCursor, guard + 1);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t\treturn fetchPage(null, 0).then(function () {\r\n\t\t\t\t\tif (!fetchedCodes.length && fallbackValue) {\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\tvar parsed = JSON.parse(fallbackValue);\r\n\t\t\t\t\t\t\tif (Array.isArray(parsed)) fetchedCodes = parsed;\r\n\t\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\t\tfetchedCodes = fallbackValue.split(/[\\s,]+/);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn normalizePaintCodeList(fetchedCodes);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\treturn fetchYmmPaintCodes(storefrontApiUrl(), storefrontAccessToken())\r\n\t\t\t\t.then(function (primaryCodes) {\r\n\t\t\t\t\tcodes = primaryCodes;\r\n\t\t\t\t\tif (window.shopCurrency !== \"CAD\") return codes;\r\n\t\t\t\t\treturn fetchYmmPaintCodes(US_STOREFRONT_API_URL, US_STOREFRONT_TOKEN)\r\n\t\t\t\t\t\t.then(function (usCodes) {\r\n\t\t\t\t\t\t\tif (usCodes.length) {\r\n\t\t\t\t\t\t\t\tcodes = mergePaintCodeLists(codes, usCodes);\r\n\t\t\t\t\t\t\t\tsourceUsed = \"year_make_model_lookup.paint_codes.ca+us\";\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn codes;\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\t.catch(function () {\r\n\t\t\t\t\t\t\treturn codes;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t})\r\n\t\t\t\t.then(function () {\r\n\t\t\t\t\tif (codes.length) return codes;\r\n\t\t\t\t\tif (manualColorOnly) return codes;\r\n\t\t\t\t\treturn vehicleCollectionPaintCodes(handle).then(\r\n\t\t\t\t\t\tfunction (collectionCodes) {\r\n\t\t\t\t\t\t\tif (collectionCodes && collectionCodes.length) {\r\n\t\t\t\t\t\t\t\tsourceUsed = \"vehicle_collection.product_variants\";\r\n\t\t\t\t\t\t\t\tcodes = collectionCodes;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn codes;\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t);\r\n\t\t\t\t})\r\n\t\t\t\t.then(function () {\r\n\t\t\t\t\tdirectAllowedCodeCache[handle] = codes;\r\n\t\t\t\t\tsetDebug({\r\n\t\t\t\t\t\tpaintCodeSourceAttempted: sourceUsed,\r\n\t\t\t\t\t\tpaintCodeSourceUsed: sourceUsed,\r\n\t\t\t\t\t\tallowedYmmCodesCount: codes.length,\r\n\t\t\t\t\t});\r\n\t\t\t\t\treturn codes;\r\n\t\t\t\t})\r\n\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\tsetDebug({\r\n\t\t\t\t\t\tpaintCodeSourceAttempted: \"year_make_model_lookup.paint_codes\",\r\n\t\t\t\t\t\tallowedYmmCodesCount: 0,\r\n\t\t\t\t\t\tlastErrorMessage: err && err.message ? err.message : String(err),\r\n\t\t\t\t\t});\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t});\r\n\t\t}\r\n\t\tfunction codeAllowed(code) {\r\n\t\t\tif (!allowedCodes || !allowedCodes.length) return true;\r\n\t\t\tif (isMatchByVinCode(code)) {\r\n\t\t\t\treturn allowedCodes.some(function (allowed) {\r\n\t\t\t\t\treturn isMatchByVinCode(allowed);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\treturn allowedCodes.indexOf(String(code).trim().toUpperCase()) !== -1;\r\n\t\t}\r\n\t\tfunction loadAllowedCodes() {\r\n\t\t\tloadColorDetails();\r\n\t\t\tvar key = activeVehicleKey();\r\n\t\t\tif (!key) {\r\n\t\t\t\tallowedCodes = null;\r\n\t\t\t\tallowedCodesKey = \"\";\r\n\t\t\t\tallowedCodesPendingKey = \"\";\r\n\t\t\t\tallowedCodesPromise = null;\r\n\t\t\t\treturn Promise.resolve(null);\r\n\t\t\t}\r\n\t\t\tif (allowedCodesKey === key && allowedCodesPendingKey !== key)\r\n\t\t\t\treturn Promise.resolve(allowedCodes);\r\n\t\t\tif (allowedCodesPendingKey === key && allowedCodesPromise)\r\n\t\t\t\treturn allowedCodesPromise;\r\n\t\t\tallowedCodes = null; // clear stale filter until the new vehicle's set resolves\r\n\t\t\tallowedCodesPendingKey = key;\r\n\t\t\troot.setAttribute(\r\n\t\t\t\t\"data-tuf-allowed-source\",\r\n\t\t\t\ttypeof window.__partifyTouchupFetchAllowedCodes === \"function\"\r\n\t\t\t\t\t? \"pdp\"\r\n\t\t\t\t\t: \"direct\",\r\n\t\t\t);\r\n\t\t\tsetDebug({\r\n\t\t\t\tpaintCodeSourceAttempted:\r\n\t\t\t\t\ttypeof window.__partifyTouchupFetchAllowedCodes === \"function\"\r\n\t\t\t\t\t\t? \"pdp.__partifyTouchupFetchAllowedCodes\"\r\n\t\t\t\t\t\t: \"year_make_model_lookup.paint_codes\",\r\n\t\t\t\tallowedYmmCodesCount: 0,\r\n\t\t\t});\r\n\t\t\tallowedCodesPromise = Promise.resolve(\r\n\t\t\t\ttypeof window.__partifyTouchupFetchAllowedCodes === \"function\"\r\n\t\t\t\t\t? window.__partifyTouchupFetchAllowedCodes(\r\n\t\t\t\t\t\t\tstate.vehicle || getVehicle(),\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t: directAllowedCodesForVehicle(state.vehicle || getVehicle()),\r\n\t\t\t)\r\n\t\t\t\t.then(function (codes) {\r\n\t\t\t\t\tif (activeVehicleKey() !== key) return null;\r\n\t\t\t\t\tallowedCodes = Array.isArray(codes)\r\n\t\t\t\t\t\t? codes\r\n\t\t\t\t\t\t\t\t.map(function (c) {\r\n\t\t\t\t\t\t\t\t\treturn String(c).trim().toUpperCase();\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t.filter(Boolean)\r\n\t\t\t\t\t\t: null;\r\n\t\t\t\t\tallowedCodesKey = key;\r\n\t\t\t\t\tif (allowedCodesPendingKey === key) {\r\n\t\t\t\t\t\tallowedCodesPendingKey = \"\";\r\n\t\t\t\t\t\tallowedCodesPromise = null;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsetDebug({\r\n\t\t\t\t\t\tallowedYmmCodesCount: allowedCodes ? allowedCodes.length : 0,\r\n\t\t\t\t\t});\r\n\t\t\t\t\treturn allowedCodes;\r\n\t\t\t\t})\r\n\t\t\t\t.catch(function (err) {\r\n\t\t\t\t\tif (activeVehicleKey() !== key) return null;\r\n\t\t\t\t\tallowedCodes = null;\r\n\t\t\t\t\tif (allowedCodesPendingKey === key) {\r\n\t\t\t\t\t\tallowedCodesPendingKey = \"\";\r\n\t\t\t\t\t\tallowedCodesPromise = null;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsetDebug({\r\n\t\t\t\t\t\tallowedYmmCodesCount: 0,\r\n\t\t\t\t\t\tlastErrorMessage: err && err.message ? err.message : String(err),\r\n\t\t\t\t\t});\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t});\r\n\t\t\treturn allowedCodesPromise;\r\n\t\t}\r\n\r\n\t\tfunction afterKitLoad(loaded) {\r\n\t\t\tvar allowedPromise = loadAllowedCodes();\r\n\t\t\tif (state.colorCode && !hasVisibleKitEntries(state.colorCode)) {\r\n\t\t\t\tstate.colorCode = null;\r\n\t\t\t\tstate.colorSource = \"\";\r\n\t\t\t\tstate.format = null;\r\n\t\t\t\tstate.tier = null;\r\n\t\t\t}\r\n\t\t\trenderColorDropdown();\r\n\t\t\tif (steps[idx] === \"format\") renderFormats();\r\n\t\t\tif (steps[idx] === \"kit\") renderKits();\r\n\t\t\trefreshNav();\r\n\t\t\tallowedPromise.then(function () {\r\n\t\t\t\trenderColorDropdown();\r\n\t\t\t\trefreshNav();\r\n\t\t\t});\r\n\t\t\treturn loaded;\r\n\t\t}\r\n\r\n\t\tfunction ensureKitProducts(tries) {\r\n\t\t\ttries = tries || 0;\r\n\t\t\tvar key = vehicleCollectionKey();\r\n\t\t\tconst exactMakeKey = activeTouchupMakeKey();\r\n\t\t\tconst fallbackMakeKey = activeTouchupFallbackMakeKey();\r\n\t\t\tconst cacheKey = key + \"::\" + exactMakeKey;\r\n\t\t\tconst loadDirectCatalog = function (catalogMakeKey) {\r\n\t\t\t\tkitLoadCatalogKey = catalogMakeKey;\r\n\t\t\t\treturn loadKitProductsDirect(key, catalogMakeKey);\r\n\t\t\t};\r\n\t\t\tconst loadPdpCatalog = function (catalogMakeKey) {\r\n\t\t\t\tkitLoadCatalogKey = catalogMakeKey;\r\n\t\t\t\treturn window\r\n\t\t\t\t\t.__partifyTouchupLoadKitProductsForCollection(key, catalogMakeKey)\r\n\t\t\t\t\t.then(function (loaded) {\r\n\t\t\t\t\t\tif (kitLoadKey !== cacheKey) return false;\r\n\t\t\t\t\t\tif (loaded && eligibleCodeCount() >= 240)\r\n\t\t\t\t\t\t\treturn loadDirectCatalog(catalogMakeKey);\r\n\t\t\t\t\t\tif (loaded && eligibleCodeCount()) return loaded;\r\n\t\t\t\t\t\tif (hasVisibleKitEntries(state.colorCode)) return loaded;\r\n\t\t\t\t\t\treturn loaded;\r\n\t\t\t\t\t});\r\n\t\t\t};\r\n\t\t\tconst loadCatalogs = function (loader) {\r\n\t\t\t\treturn loader(exactMakeKey).then(function (loaded) {\r\n\t\t\t\t\tif (loaded && eligibleCodeCount()) return loaded;\r\n\t\t\t\t\tif (!fallbackMakeKey || fallbackMakeKey === exactMakeKey)\r\n\t\t\t\t\t\treturn loaded;\r\n\t\t\t\t\treturn loader(fallbackMakeKey);\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t\tif (\r\n\t\t\t\ttypeof window.__partifyTouchupLoadKitProductsForCollection !==\r\n\t\t\t\t\"function\"\r\n\t\t\t) {\r\n\t\t\t\tkitLoadKey = cacheKey;\r\n\t\t\t\tkitLoadPendingKey = cacheKey;\r\n\t\t\t\tsetDebug({\r\n\t\t\t\t\tpdpKitLoaderAvailable: false,\r\n\t\t\t\t\twaitingForPdpKitLoader: !!pdpPresent(),\r\n\t\t\t\t});\r\n\t\t\t\tif (!pdpPresent() || tries >= 20) {\r\n\t\t\t\t\treturn loadCatalogs(loadDirectCatalog)\r\n\t\t\t\t\t\t.then(afterKitLoad)\r\n\t\t\t\t\t\t.then(function (loaded) {\r\n\t\t\t\t\t\t\tif (kitLoadPendingKey === cacheKey) kitLoadPendingKey = \"\";\r\n\t\t\t\t\t\t\treturn loaded;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\treturn new Promise(function (resolve) {\r\n\t\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\t\tresolve(ensureKitProducts(tries + 1));\r\n\t\t\t\t\t}, 150);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tif (\r\n\t\t\t\tkitLoadPromise &&\r\n\t\t\t\tkitLoadKey === cacheKey &&\r\n\t\t\t\t(kitLoadPendingKey === cacheKey || eligibleCodeCount())\r\n\t\t\t)\r\n\t\t\t\treturn kitLoadPromise;\r\n\t\t\tkitLoadKey = cacheKey;\r\n\t\t\tkitLoadPendingKey = cacheKey;\r\n\t\t\tkitLoadPromise = loadCatalogs(loadPdpCatalog)\r\n\t\t\t\t.then(afterKitLoad)\r\n\t\t\t\t.catch(function () {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t})\r\n\t\t\t\t.then(function (loaded) {\r\n\t\t\t\t\tif (kitLoadPendingKey === cacheKey) kitLoadPendingKey = \"\";\r\n\t\t\t\t\treturn loaded;\r\n\t\t\t\t});\r\n\t\t\treturn kitLoadPromise;\r\n\t\t}\r\n\r\n\t\tfunction getVehicle() {\r\n\t\t\ttry {\r\n\t\t\t\tvar saved = localVehicle();\r\n\t\t\t\tif (\r\n\t\t\t\t\twindow.PartifyFitment &&\r\n\t\t\t\t\ttypeof window.PartifyFitment.getActiveVehicle === \"function\"\r\n\t\t\t\t) {\r\n\t\t\t\t\tvar v = window.PartifyFitment.getActiveVehicle();\r\n\t\t\t\t\tif (v && v.model) return mergeVehicleData(v, saved);\r\n\t\t\t\t}\r\n\t\t\t\tif (saved && (saved.model || saved.ymm)) return saved;\r\n\t\t\t} catch (e) {}\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tfunction cleanPaintCode(raw, vehicle) {\r\n\t\t\traw = String(raw || \"\").trim();\r\n\t\t\tif (raw.indexOf(\" / \") !== -1) raw = raw.split(\" / \").pop().trim();\r\n\t\t\tvar vin = vinFromVehicleData(vehicle);\r\n\t\t\tif (shouldIgnoreDecodedPaintCode(vehicle)) return \"\";\r\n\t\t\tif (!raw || isMatchByVinCode(raw) || raw.toUpperCase() === vin) return \"\";\r\n\t\t\treturn raw.toUpperCase();\r\n\t\t}\r\n\t\tfunction paintSourceFromVehicle(vehicle) {\r\n\t\t\tif (!vehicle) return \"saved vehicle\";\r\n\t\t\tif (vehicle.plate || vehicle.licensePlate) return \"license plate\";\r\n\t\t\tif (vinFromVehicleData(vehicle).length === 17) return \"VIN\";\r\n\t\t\tif (vehicle.decodedByBumper) return \"VIN\";\r\n\t\t\treturn \"saved vehicle\";\r\n\t\t}\r\n\t\tfunction storedPaintMatch() {\r\n\t\t\tvar v = getVehicle() || {};\r\n\t\t\tvar code =\r\n\t\t\t\tcleanPaintCode(v.paintCode, v) ||\r\n\t\t\t\tcleanPaintCode(v.troublesome_format, v);\r\n\t\t\treturn code\r\n\t\t\t\t? { code: code, source: paintSourceFromVehicle(v) }\r\n\t\t\t\t: { code: \"\", source: \"\" };\r\n\t\t}\r\n\t\tfunction storedPaintCode() {\r\n\t\t\ttry {\r\n\t\t\t\treturn storedPaintMatch().code;\r\n\t\t\t} catch (e) {\r\n\t\t\t\treturn \"\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar overlay = $(\"[data-tuf-overlay]\");\r\n\t\tvar railEl = $(\"[data-tuf-rail]\");\r\n\t\tvar vehChip = $(\"[data-tuf-veh]\");\r\n\t\tvar summaryEl = $(\"[data-tuf-summary]\");\r\n\t\tvar backBtn = $(\"[data-tuf-back]\");\r\n\t\tvar nextBtn = $(\"[data-tuf-next]\");\r\n\t\tvar atcBtn = $(\"[data-tuf-atc]\");\r\n\t\tvar vehicleCard = $(\"[data-tuf-current-vehicle]\");\r\n\t\tvar vehicleOpenBtn = $(\"[data-tuf-open-garage]\");\r\n\t\tvar colorVehicleContext = $(\"[data-tuf-color-context]\");\r\n\t\tvar colorVehicleName = $(\"[data-tuf-color-vehicle-name]\");\r\n\t\tvar colorSelect = $(\"[data-tuf-color-select]\");\r\n\t\tvar manualVinInput = $(\"[data-tuf-manual-vin]\");\r\n\t\tvar manualVinField = $(\"[data-tuf-manual-vin-field]\");\r\n\t\tvar manualVinError = $(\"[data-tuf-manual-vin-error]\");\r\n\t\tconst toneChoice = $(\"[data-tuf-tone-choice]\");\r\n\t\tconst toneChoiceInputs = $$('[data-tuf-tone-value]');\r\n\t\tconst toneAreaChoice = $(\"[data-tuf-tone-area-choice]\");\r\n\t\tconst toneAreaChoiceInputs = $$('[data-tuf-tone-area-value]');\r\n\t\tconst toneGuidance = $(\"[data-tuf-tone-guidance]\");\r\n\t\tconst toneGuidanceClose = $(\"[data-tuf-tone-guidance-close]\");\r\n\t\tlet toneGuidanceTrigger = null;\r\n\t\tvar ymm = {\r\n\t\t\tyear: $(\"[data-tuf-ymm-year]\"),\r\n\t\t\tmake: $(\"[data-tuf-ymm-make]\"),\r\n\t\t\tmodel: $(\"[data-tuf-ymm-model]\"),\r\n\t\t\ttrim: $(\"[data-tuf-ymm-trim]\"),\r\n\t\t\tstatus: $(\"[data-tuf-ymm-status]\"),\r\n\t\t};\r\n\t\tvar ymmIndex = null;\r\n\t\tvar ymmYearCache = {};\r\n\t\tvar trimOptions = [];\r\n\t\tvar ymmBooted = false;\r\n\r\n\t\tfunction isTwoToneGuidanceOpen() {\r\n\t\t\treturn !!(toneGuidance && !toneGuidance.hidden);\r\n\t\t}\r\n\r\n\t\tfunction closeTwoToneGuidance(restoreFocus) {\r\n\t\t\tif (!toneGuidance) return;\r\n\t\t\ttoneGuidance.hidden = true;\r\n\t\t\tif (\r\n\t\t\t\trestoreFocus !== false &&\r\n\t\t\t\ttoneGuidanceTrigger &&\r\n\t\t\t\tdocument.contains(toneGuidanceTrigger)\r\n\t\t\t)\r\n\t\t\t\ttoneGuidanceTrigger.focus();\r\n\t\t\ttoneGuidanceTrigger = null;\r\n\t\t}\r\n\r\n\t\tfunction openTwoToneGuidance(trigger) {\r\n\t\t\tif (!toneGuidance || !toneGuidanceClose || !isTwoToneEligible()) return;\r\n\t\t\ttoneGuidanceTrigger = trigger || null;\r\n\t\t\ttoneGuidance.hidden = false;\r\n\t\t\ttoneGuidanceClose.focus({ preventScroll: true });\r\n\t\t}\r\n\r\n\t\tfunction clearResolvedTouchupSelection() {\r\n\t\t\twindow.__touchupSelectedKitVariantId = \"\";\r\n\t\t\twindow.__touchupSelectedKitEntry = null;\r\n\t\t\twindow.__touchupSelectedKitSku = \"\";\r\n\t\t\twindow.__paintGuardEnforcedId = \"\";\r\n\t\t\twindow.__PARTIFY_TOUCHUP_MATCH_BY_VIN_REQUIRED = false;\r\n\t\t\twindow.__PARTIFY_TOUCHUP_MATCH_BY_VIN_MISSING = false;\r\n\r\n\t\t\tconst form =\r\n\t\t\t\tdocument.getElementById(\"product-form\") ||\r\n\t\t\t\tdocument.getElementById(\"cnm-form\") ||\r\n\t\t\t\tdocument.querySelector('form[action*=\"/cart/add\"]');\r\n\t\t\tif (form) {\r\n\t\t\t\tform.querySelectorAll('[name=\"id\"]').forEach(function (input) {\r\n\t\t\t\t\tinput.value = \"\";\r\n\t\t\t\t});\r\n\t\t\t\tif (form.action) form.action = \"/cart/add?id=\";\r\n\t\t\t\tform.querySelectorAll(\r\n\t\t\t\t\t'input[name=\"properties[Paint Code]\"], input[name=\"properties[Touch-Up Color]\"]',\r\n\t\t\t\t).forEach(function (input) {\r\n\t\t\t\t\tinput.value = \"\";\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction invalidateTouchupSelectionForTwoTone(clearResolvedSelection) {\r\n\t\t\tstate.colorCode = null;\r\n\t\t\tstate.colorSource = \"\";\r\n\t\t\tstate.colorPath = \"code\";\r\n\t\t\tstate.matchByVin = false;\r\n\t\t\tstate.format = null;\r\n\t\t\tstate.tier = null;\r\n\t\t\tif (clearResolvedSelection !== false) clearResolvedTouchupSelection();\r\n\t\t\tif (atcBtn) atcBtn.disabled = true;\r\n\t\t}\r\n\r\n\t\tfunction updateTwoTonePathControls(active) {\r\n\t\t\tconst awaitingChoice = isTwoToneChoiceRequired();\r\n\t\t\t$$(\"[data-tuf-path]\").forEach(function (button) {\r\n\t\t\t\tconst path = button.getAttribute(\"data-tuf-path\");\r\n\t\t\t\tconst automaticPath = path === \"vin\" || path === \"plate\";\r\n\t\t\t\tbutton.hidden = automaticPath && active;\r\n\t\t\t\tbutton.disabled = awaitingChoice || (automaticPath && active);\r\n\t\t\t\tif (automaticPath && active)\r\n\t\t\t\t\tbutton.setAttribute(\"aria-hidden\", \"true\");\r\n\t\t\t\telse button.removeAttribute(\"aria-hidden\");\r\n\t\t\t});\r\n\t\t\tif (awaitingChoice && colorSelect) colorSelect.disabled = true;\r\n\t\t}\r\n\r\n\t\tfunction syncTwoToneChoiceUi() {\r\n\t\t\tconst eligible = isTwoToneEligible();\r\n\t\t\tif (!toneChoice) return eligible;\r\n\t\t\tif (!eligible) {\r\n\t\t\t\tcloseTwoToneGuidance(false);\r\n\t\t\t\ttoneChoice.hidden = true;\r\n\t\t\t\ttoneChoiceInputs.forEach(function (input) {\r\n\t\t\t\t\tinput.checked = false;\r\n\t\t\t\t\tinput.disabled = true;\r\n\t\t\t\t\tconst option = input.closest(\".tuf-opt\");\r\n\t\t\t\t\tif (option) option.classList.remove(\"tuf-sel\");\r\n\t\t\t\t});\r\n\t\t\t\tif (toneAreaChoice) toneAreaChoice.hidden = true;\r\n\t\t\t\ttoneAreaChoiceInputs.forEach(function (input) {\r\n\t\t\t\t\tinput.checked = false;\r\n\t\t\t\t\tinput.disabled = true;\r\n\t\t\t\t\tconst option = input.closest(\".tuf-opt\");\r\n\t\t\t\t\tif (option) option.classList.remove(\"tuf-sel\");\r\n\t\t\t\t});\r\n\t\t\t\tupdateTwoTonePathControls(false);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tconst selected = selectedTwoToneChoice();\r\n\t\t\tconst areaSelected = selectedTwoToneAreaChoice();\r\n\t\t\tconst showAreaChoice = selected === \"two\";\r\n\t\t\ttoneChoice.hidden = false;\r\n\t\t\ttoneChoiceInputs.forEach(function (input) {\r\n\t\t\t\tconst value = input.getAttribute(\"data-tuf-tone-value\");\r\n\t\t\t\tinput.checked = value === selected;\r\n\t\t\t\tinput.disabled = false;\r\n\t\t\t\tconst option = input.closest(\".tuf-opt\");\r\n\t\t\t\tif (option) option.classList.toggle(\"tuf-sel\", input.checked);\r\n\t\t\t});\r\n\t\t\tif (toneAreaChoice) toneAreaChoice.hidden = !showAreaChoice;\r\n\t\t\ttoneAreaChoiceInputs.forEach(function (input) {\r\n\t\t\t\tconst value = input.getAttribute(\"data-tuf-tone-area-value\");\r\n\t\t\t\tinput.checked = showAreaChoice && value === areaSelected;\r\n\t\t\t\tinput.disabled = !showAreaChoice;\r\n\t\t\t\tconst option = input.closest(\".tuf-opt\");\r\n\t\t\t\tif (option) option.classList.toggle(\"tuf-sel\", input.checked);\r\n\t\t\t});\r\n\t\t\tupdateTwoTonePathControls(isTwoTonePaintModeActive());\r\n\t\t\tconst message = $(\"[data-tuf-decode-msg]\");\r\n\t\t\tif (!selected) setDecodeMsg(TWO_TONE_CHOICE_MESSAGE);\r\n\t\t\telse if (isTwoToneAreaChoiceRequired())\r\n\t\t\t\tsetDecodeMsg(TWO_TONE_AREA_CHOICE_MESSAGE);\r\n\t\t\telse if (\r\n\t\t\t\tmessage &&\r\n\t\t\t\t(message.textContent === TWO_TONE_CHOICE_MESSAGE ||\r\n\t\t\t\t\tmessage.textContent === TWO_TONE_AREA_CHOICE_MESSAGE)\r\n\t\t\t)\r\n\t\t\t\tsetDecodeMsg(\"\");\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tfunction syncTwoTonePaintMode(forceInvalidate) {\r\n\t\t\tconst active = isTwoTonePaintModeActive();\r\n\t\t\tconst leavingTwoTone = twoTonePaintModeApplied && !active;\r\n\t\t\tif (active || leavingTwoTone) updateTwoTonePathControls(active);\r\n\t\t\tif (leavingTwoTone)\r\n\t\t\t\tinvalidateTouchupSelectionForTwoTone(manualColorOnly);\r\n\t\t\telse if (active && (!twoTonePaintModeApplied || forceInvalidate))\r\n\t\t\t\tinvalidateTouchupSelectionForTwoTone();\r\n\t\t\ttwoTonePaintModeApplied = active;\r\n\t\t\tif (active) setColorPath(\"code\");\r\n\t\t\telse if (leavingTwoTone) {\r\n\t\t\t\tsetDecodeMsg(\"\");\r\n\t\t\t\tif (\r\n\t\t\t\t\t!manualColorOnly &&\r\n\t\t\t\t\ttypeof selectStoredPaintVariantOption === \"function\"\r\n\t\t\t\t)\r\n\t\t\t\t\tselectStoredPaintVariantOption();\r\n\t\t\t}\r\n\t\t\treturn active;\r\n\t\t}\r\n\r\n\t\tfunction page(name) {\r\n\t\t\treturn $('.tuf-page[data-tuf-page=\"' + name + '\"]');\r\n\t\t}\r\n\t\tfunction setStatus(msg) {\r\n\t\t\tif (ymm.status) ymm.status.textContent = msg || \"\";\r\n\t\t}\r\n\r\n\t\tfunction assetBase() {\r\n\t\t\tvar base = window.__PARTIFY_YMM_BASE__ || \"/assets/\";\r\n\t\t\treturn /\\/$/.test(base) ? base : base + \"/\";\r\n\t\t}\r\n\t\tfunction fetchJson(url) {\r\n\t\t\treturn fetch(url, {\r\n\t\t\t\theaders: { \"X-Requested-With\": \"XMLHttpRequest\" },\r\n\t\t\t}).then(function (r) {\r\n\t\t\t\tif (!r.ok) throw new Error(\"HTTP \" + r.status + \" \" + url);\r\n\t\t\t\treturn r.json();\r\n\t\t\t});\r\n\t\t}\r\n\t\tfunction loadYmmIndex() {\r\n\t\t\tif (ymmIndex) return Promise.resolve(ymmIndex);\r\n\t\t\tvar url =\r\n\t\t\t\twindow.__PARTIFY_YMM_INDEX_URL__ || assetBase() + \"ymm-index.json\";\r\n\t\t\treturn fetchJson(url).then(function (json) {\r\n\t\t\t\tymmIndex = json;\r\n\t\t\t\treturn json;\r\n\t\t\t});\r\n\t\t}\r\n\t\tfunction loadYmmYear(year) {\r\n\t\t\tif (ymmYearCache[year]) return Promise.resolve(ymmYearCache[year]);\r\n\t\t\treturn fetchJson(assetBase() + \"ymm-\" + year + \".json\").then(\r\n\t\t\t\tfunction (json) {\r\n\t\t\t\t\tymmYearCache[year] = json;\r\n\t\t\t\t\treturn json;\r\n\t\t\t\t},\r\n\t\t\t);\r\n\t\t}\r\n\t\tfunction uniqueSorted(values) {\r\n\t\t\tvar seen = {},\r\n\t\t\t\tout = [];\r\n\t\t\tvalues.forEach(function (value) {\r\n\t\t\t\tif (value && !seen[value]) {\r\n\t\t\t\t\tseen[value] = 1;\r\n\t\t\t\t\tout.push(value);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\treturn out.sort();\r\n\t\t}\r\n\t\tfunction fillSelect(sel, values, placeholder, disabled) {\r\n\t\t\tif (!sel) return;\r\n\t\t\tsel.innerHTML = \"\";\r\n\t\t\tvar first = document.createElement(\"option\");\r\n\t\t\tfirst.value = \"\";\r\n\t\t\tfirst.textContent = placeholder;\r\n\t\t\tsel.appendChild(first);\r\n\t\t\tvalues.forEach(function (value) {\r\n\t\t\t\tvar opt = document.createElement(\"option\");\r\n\t\t\t\topt.value = value;\r\n\t\t\t\topt.textContent = value;\r\n\t\t\t\tsel.appendChild(opt);\r\n\t\t\t});\r\n\t\t\tsel.disabled = !!disabled;\r\n\t\t}\r\n\t\tfunction selectedYearVehicles() {\r\n\t\t\tvar data = ymmYearCache[ymm.year && ymm.year.value];\r\n\t\t\treturn (data && data.vehicles) || [];\r\n\t\t}\r\n\t\tfunction updateVehicleDraft() {\r\n\t\t\tvar draft = getInlineVehicle();\r\n\t\t\tstate.vehicleDraft = draft;\r\n\t\t\trefreshNav();\r\n\t\t\treturn draft;\r\n\t\t}\r\n\t\tfunction getInlineVehicle() {\r\n\t\t\tif (!ymm.year || !ymm.make || !ymm.model) return null;\r\n\t\t\tif (!ymm.year.value || !ymm.make.value || !ymm.model.value) return null;\r\n\t\t\tvar selectedTrim = trimOptions[Number(ymm.trim && ymm.trim.value)];\r\n\t\t\treturn {\r\n\t\t\t\tyear: ymm.year.value,\r\n\t\t\t\tmake: ymm.make.value,\r\n\t\t\t\tmodel: ymm.model.value,\r\n\t\t\t\tsubmodel: selectedTrim ? selectedTrim.submodel : \"\",\r\n\t\t\t\tengine: selectedTrim ? selectedTrim.engine : \"\",\r\n\t\t\t\tvin: \"\",\r\n\t\t\t\tpaintCode: \"\",\r\n\t\t\t\tdecodedByBumper: false,\r\n\t\t\t\tlastCollectionImage: null,\r\n\t\t\t\ttroublesome_format: null,\r\n\t\t\t\ttroublesome_description: null,\r\n\t\t\t};\r\n\t\t}\r\n\t\tfunction commitInlineVehicle() {\r\n\t\t\tvar vehicle = getInlineVehicle();\r\n\t\t\tif (!vehicle) return false;\r\n\t\t\tif (\r\n\t\t\t\twindow.PartifyYMM &&\r\n\t\t\t\ttypeof window.PartifyYMM.commitVehicle === \"function\"\r\n\t\t\t) {\r\n\t\t\t\twindow.PartifyYMM.commitVehicle(vehicle);\r\n\t\t\t} else if (typeof window.moveVehicleToFront === \"function\") {\r\n\t\t\t\twindow.moveVehicleToFront(vehicle);\r\n\t\t\t} else {\r\n\t\t\t\tvar ymmText = [\r\n\t\t\t\t\tvehicle.year,\r\n\t\t\t\t\tvehicle.make,\r\n\t\t\t\t\tvehicle.model,\r\n\t\t\t\t\tvehicle.submodel,\r\n\t\t\t\t\tvehicle.engine,\r\n\t\t\t\t]\r\n\t\t\t\t\t.filter(Boolean)\r\n\t\t\t\t\t.join(\" \");\r\n\t\t\t\tvehicle.ymm = ymmText;\r\n\t\t\t\ttry {\r\n\t\t\t\t\tlocalStorage.setItem(\"searchTerms\", JSON.stringify([vehicle]));\r\n\t\t\t\t} catch (e) {}\r\n\t\t\t\twindow.dispatchEvent(new Event(\"searchTermsUpdated\"));\r\n\t\t\t\twindow.dispatchEvent(\r\n\t\t\t\t\tnew CustomEvent(\"partify:vehicle:changed\", { detail: vehicle }),\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\tstate.vehicle = Object.assign({}, vehicle, {\r\n\t\t\t\tymm: [\r\n\t\t\t\t\tvehicle.year,\r\n\t\t\t\t\tvehicle.make,\r\n\t\t\t\t\tvehicle.model,\r\n\t\t\t\t\tvehicle.submodel,\r\n\t\t\t\t\tvehicle.engine,\r\n\t\t\t\t]\r\n\t\t\t\t\t.filter(Boolean)\r\n\t\t\t\t\t.join(\" \"),\r\n\t\t\t});\r\n\t\t\trenderVehChip();\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tfunction populateTrims() {\r\n\t\t\tvar vehicles = selectedYearVehicles().filter(function (v) {\r\n\t\t\t\treturn v.make === ymm.make.value && v.model === ymm.model.value;\r\n\t\t\t});\r\n\t\t\ttrimOptions = [];\r\n\t\t\tvar seen = {};\r\n\t\t\tvehicles.forEach(function (v) {\r\n\t\t\t\tvar label = [v.submodel, v.engine].filter(Boolean).join(\" \").trim();\r\n\t\t\t\tif (!label) label = \"Standard\";\r\n\t\t\t\tif (seen[label]) return;\r\n\t\t\t\tseen[label] = 1;\r\n\t\t\t\ttrimOptions.push({\r\n\t\t\t\t\tlabel: label,\r\n\t\t\t\t\tsubmodel: v.submodel || \"\",\r\n\t\t\t\t\tengine: v.engine || \"\",\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t\tfillSelect(\r\n\t\t\t\tymm.trim,\r\n\t\t\t\ttrimOptions.map(function (v, i) {\r\n\t\t\t\t\treturn String(i);\r\n\t\t\t\t}),\r\n\t\t\t\t\"Select engine / trim\",\r\n\t\t\t\ttrimOptions.length === 0,\r\n\t\t\t);\r\n\t\t\tif (ymm.trim) {\r\n\t\t\t\tArray.prototype.slice.call(ymm.trim.options).forEach(function (opt) {\r\n\t\t\t\t\tvar item = trimOptions[Number(opt.value)];\r\n\t\t\t\t\tif (item) opt.textContent = item.label;\r\n\t\t\t\t});\r\n\t\t\t\tif (trimOptions.length === 1) ymm.trim.value = \"0\";\r\n\t\t\t}\r\n\t\t\tupdateVehicleDraft();\r\n\t\t}\r\n\t\tfunction initInlineYmm() {\r\n\t\t\tif (ymmBooted || !ymm.year || !ymm.make || !ymm.model || !ymm.trim)\r\n\t\t\t\treturn;\r\n\t\t\tymmBooted = true;\r\n\t\t\tsetStatus(\"Loading vehicle data...\");\r\n\t\t\tfillSelect(ymm.make, [], \"Select make\", true);\r\n\t\t\tfillSelect(ymm.model, [], \"Select model\", true);\r\n\t\t\tfillSelect(ymm.trim, [], \"Select engine / trim\", true);\r\n\r\n\t\t\tloadYmmIndex()\r\n\t\t\t\t.then(function (index) {\r\n\t\t\t\t\tvar years = (index.years || [])\r\n\t\t\t\t\t\t.filter(function (y) {\r\n\t\t\t\t\t\t\treturn /^\\d{4}$/.test(String(y));\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\t.sort(function (a, b) {\r\n\t\t\t\t\t\t\treturn Number(b) - Number(a);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\tfillSelect(ymm.year, years, \"Select year\", false);\r\n\t\t\t\t\tsetStatus(\"\");\r\n\t\t\t\t\tvar current = getVehicle();\r\n\t\t\t\t\tif (current && current.year) preselectInlineYmm(current);\r\n\t\t\t\t})\r\n\t\t\t\t.catch(function () {\r\n\t\t\t\t\tsetStatus(\r\n\t\t\t\t\t\t\"Vehicle data could not load. Use the saved garage instead.\",\r\n\t\t\t\t\t);\r\n\t\t\t\t});\r\n\r\n\t\t\tymm.year.addEventListener(\"change\", function () {\r\n\t\t\t\tfillSelect(ymm.make, [], \"Select make\", true);\r\n\t\t\t\tfillSelect(ymm.model, [], \"Select model\", true);\r\n\t\t\t\tfillSelect(ymm.trim, [], \"Select engine / trim\", true);\r\n\t\t\t\ttrimOptions = [];\r\n\t\t\t\tupdateVehicleDraft();\r\n\t\t\t\tif (!ymm.year.value) return;\r\n\t\t\t\tconst brand = activeTouchupMakeKey();\r\n\t\t\t\tsetStatus(\"Loading \" + ymm.year.value + \" models...\");\r\n\t\t\t\tloadYmmYear(ymm.year.value)\r\n\t\t\t\t\t.then(function (data) {\r\n\t\t\t\t\t\tvar makes = uniqueSorted(\r\n\t\t\t\t\t\t\t(data.vehicles || [])\r\n\t\t\t\t\t\t\t\t.map(function (v) {\r\n\t\t\t\t\t\t\t\t\treturn v.make;\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t.filter(function (make) {\r\n\t\t\t\t\t\t\t\t\treturn String(make).toLowerCase() === brand;\r\n\t\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tfillSelect(ymm.make, makes, \"Select make\", makes.length === 0);\r\n\t\t\t\t\t\tif (makes.length === 1) {\r\n\t\t\t\t\t\t\tymm.make.value = makes[0];\r\n\t\t\t\t\t\t\tymm.make.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tsetStatus(\r\n\t\t\t\t\t\t\tmakes.length ? \"\" : \"No fitment data found for that year.\",\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function () {\r\n\t\t\t\t\t\tsetStatus(\"Vehicle data could not load for that year.\");\r\n\t\t\t\t\t});\r\n\t\t\t});\r\n\t\t\tymm.make.addEventListener(\"change\", function () {\r\n\t\t\t\tfillSelect(ymm.model, [], \"Select model\", true);\r\n\t\t\t\tfillSelect(ymm.trim, [], \"Select engine / trim\", true);\r\n\t\t\t\ttrimOptions = [];\r\n\t\t\t\tvar models = uniqueSorted(\r\n\t\t\t\t\tselectedYearVehicles()\r\n\t\t\t\t\t\t.filter(function (v) {\r\n\t\t\t\t\t\t\treturn v.make === ymm.make.value;\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\t.map(function (v) {\r\n\t\t\t\t\t\t\treturn v.model;\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t);\r\n\t\t\t\tfillSelect(ymm.model, models, \"Select model\", models.length === 0);\r\n\t\t\t\tupdateVehicleDraft();\r\n\t\t\t});\r\n\t\t\tymm.model.addEventListener(\"change\", populateTrims);\r\n\t\t\tymm.trim.addEventListener(\"change\", updateVehicleDraft);\r\n\t\t}\r\n\t\tfunction preselectInlineYmm(vehicle) {\r\n\t\t\tif (!vehicle || !vehicle.year || !ymm.year) return;\r\n\t\t\tvar attempts = 0;\r\n\t\t\tvar timer = setInterval(function () {\r\n\t\t\t\tattempts++;\r\n\t\t\t\tif (!ymm.year.options.length && attempts < 20) return;\r\n\t\t\t\tclearInterval(timer);\r\n\t\t\t\tymm.year.value = vehicle.year;\r\n\t\t\t\tymm.year.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n\t\t\t\tloadYmmYear(vehicle.year).then(function () {\r\n\t\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\t\tif (vehicle.make) {\r\n\t\t\t\t\t\t\tymm.make.value = vehicle.make;\r\n\t\t\t\t\t\t\tymm.make.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\t\t\tif (vehicle.model) {\r\n\t\t\t\t\t\t\t\tymm.model.value = vehicle.model;\r\n\t\t\t\t\t\t\t\tymm.model.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\t\t\t\tvar wanted = normalizeKey(\r\n\t\t\t\t\t\t\t\t\t[vehicle.submodel, vehicle.engine].filter(Boolean).join(\" \"),\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tvar hit = trimOptions.findIndex(function (item) {\r\n\t\t\t\t\t\t\t\t\treturn normalizeKey(item.label) === wanted;\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\tif (hit >= 0 && ymm.trim) ymm.trim.value = String(hit);\r\n\t\t\t\t\t\t\t\tupdateVehicleDraft();\r\n\t\t\t\t\t\t\t}, 50);\r\n\t\t\t\t\t\t}, 50);\r\n\t\t\t\t\t}, 50);\r\n\t\t\t\t});\r\n\t\t\t}, 100);\r\n\t\t}\r\n\r\n\t\tfunction renderVehChip() {\r\n\t\t\tif (!vehChip) return;\r\n\t\t\tvar v = state.vehicle || getVehicle();\r\n\t\t\tvehChip.textContent = v ? vehicleYmmLabel(v) : \"\";\r\n\t\t}\r\n\t\tfunction renderVehicleStep() {\r\n\t\t\tvar v = state.vehicle || getVehicle();\r\n\t\t\t// Brand mismatch is no longer a block: the configurator auto-resolves to the saved\r\n\t\t\t// vehicle's own brand of touch-up paint (a Ford page with an Acura garage vehicle\r\n\t\t\t// simply matches Acura paint). The resolved brand surfaces via the summary/review,\r\n\t\t\t// which read from currentEntry() \\u2014 no \"doesn't match\" warning, no dead end.\r\n\t\t\tif (vehicleCard) {\r\n\t\t\t\tif (v) {\r\n\t\t\t\t\tvar line1 = vehicleYmmLabel(v);\r\n\t\t\t\t\tvar brand = vehicleBrand();\r\n\t\t\t\t\tvar meta = brand\r\n\t\t\t\t\t\t? \"Saved in your garage \\u00b7 showing \" +\r\n\t\t\t\t\t\t\tbrandTitle(brand) +\r\n\t\t\t\t\t\t\t\" paint-code options.\"\r\n\t\t\t\t\t\t: \"Saved in your garage and ready for manual paint-code selection.\";\r\n\t\t\t\t\tvehicleCard.innerHTML =\r\n\t\t\t\t\t\t'<div class=\"tuf-vehicle-kicker\">Vehicle</div>' +\r\n\t\t\t\t\t\t'<div class=\"tuf-vehicle-name\">' +\r\n\t\t\t\t\t\tline1 +\r\n\t\t\t\t\t\t\"</div>\" +\r\n\t\t\t\t\t\t'<div class=\"tuf-vehicle-meta\">' +\r\n\t\t\t\t\t\tmeta +\r\n\t\t\t\t\t\t\"</div>\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvehicleCard.innerHTML =\r\n\t\t\t\t\t\t'<div class=\"tuf-vehicle-kicker\">Vehicle</div>' +\r\n\t\t\t\t\t\t'<div class=\"tuf-vehicle-name\">No vehicle selected yet.</div>' +\r\n\t\t\t\t\t\t'<div class=\"tuf-vehicle-meta\">Add or select your vehicle to continue.</div>';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (vehicleOpenBtn) {\r\n\t\t\t\tvar needsAction = !v;\r\n\t\t\t\tvar actionWrap = vehicleOpenBtn.closest(\".tuf-vehicle-actions\");\r\n\t\t\t\tvehicleOpenBtn.hidden = !needsAction;\r\n\t\t\t\tvehicleOpenBtn.textContent = v ? \"Change vehicle\" : \"Add vehicle\";\r\n\t\t\t\tif (actionWrap) actionWrap.hidden = !needsAction;\r\n\t\t\t}\r\n\t\t\tvar message = v\r\n\t\t\t\t? \"Your current garage vehicle will be used to load paint-code options.\"\r\n\t\t\t\t: \"Add a vehicle to continue.\";\r\n\t\t\tsetStatus(message);\r\n\t\t}\r\n\t\tfunction garageRoot() {\r\n\t\t\tvar gv2 = document.querySelector(\"[data-gv2-overlay]\");\r\n\t\t\tvar legacy = document.querySelector(\".garage-easyYMM-popup\");\r\n\t\t\tif (gv2 && !gv2.classList.contains(\"hidden\")) return gv2;\r\n\t\t\tif (legacy && !legacy.classList.contains(\"hidden\")) return legacy;\r\n\t\t\treturn gv2 || legacy;\r\n\t\t}\r\n\t\tfunction garageIsOpen() {\r\n\t\t\tvar rootEl = garageRoot();\r\n\t\t\treturn !!(\r\n\t\t\t\trootEl &&\r\n\t\t\t\t(!rootEl.classList || !rootEl.classList.contains(\"hidden\"))\r\n\t\t\t);\r\n\t\t}\r\n\t\tfunction hideGaragePlateLookup() {\r\n\t\t\tif (!manualColorOnly) return;\r\n\t\t\tvar rootEl = garageRoot() || document;\r\n\t\t\tvar plateTab = rootEl.querySelector('[data-gv2-quick-tab=\"plate\"]');\r\n\t\t\tvar vinTab = rootEl.querySelector('[data-gv2-quick-tab=\"vin\"]');\r\n\t\t\tvar quickAdd = rootEl.querySelector(\"[data-garage-quick-add]\");\r\n\t\t\tvar vinPanel = rootEl.querySelector(\r\n\t\t\t\t'[data-gv2-quick-panel=\"vin\"], [data-garage-vin-group]',\r\n\t\t\t);\r\n\t\t\tvar orDivider = rootEl.querySelector(\"[data-garage-or-divider]\");\r\n\t\t\tvar legacyAddViewVisible = false;\r\n\t\t\tvar legacyGarageBlock = rootEl.querySelector(\".garage-block\");\r\n\t\t\tvar legacyEasyYmm = rootEl.querySelector(\".easyYMM\");\r\n\t\t\tvar legacyVin = rootEl.querySelector(\"#vin-to-collection-placeholder\");\r\n\t\t\tvar legacyVinOr = rootEl.querySelector(\"#vin-to-collection-or\");\r\n\t\t\tif (quickAdd) {\r\n\t\t\t\tquickAdd.hidden = false;\r\n\t\t\t\tquickAdd.style.display = \"\";\r\n\t\t\t}\r\n\t\t\tif (orDivider) {\r\n\t\t\t\torDivider.hidden = false;\r\n\t\t\t\torDivider.style.display = \"\";\r\n\t\t\t}\r\n\t\t\tif (vinPanel) {\r\n\t\t\t\tvinPanel.hidden = false;\r\n\t\t\t\tvinPanel.style.display = \"\";\r\n\t\t\t\tvinPanel.classList.add(\"active\");\r\n\t\t\t}\r\n\t\t\tif (plateTab) {\r\n\t\t\t\tplateTab.hidden = true;\r\n\t\t\t\tplateTab.style.display = \"none\";\r\n\t\t\t\tif (plateTab.nextElementSibling) {\r\n\t\t\t\t\tplateTab.nextElementSibling.hidden = true;\r\n\t\t\t\t\tplateTab.nextElementSibling.style.display = \"none\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tArray.prototype.slice\r\n\t\t\t\t.call(\r\n\t\t\t\t\trootEl.querySelectorAll(\r\n\t\t\t\t\t\t'[data-gv2-quick-panel=\"plate\"], [data-garage-plate-group]',\r\n\t\t\t\t\t),\r\n\t\t\t\t)\r\n\t\t\t\t.forEach(function (el) {\r\n\t\t\t\t\tel.hidden = true;\r\n\t\t\t\t\tel.style.display = \"none\";\r\n\t\t\t\t\tel.classList.remove(\"active\");\r\n\t\t\t\t});\r\n\t\t\tif (vinTab) {\r\n\t\t\t\tvinTab.hidden = false;\r\n\t\t\t\tvinTab.style.display = \"\";\r\n\t\t\t\tif (!vinTab.classList.contains(\"active\")) vinTab.click();\r\n\t\t\t}\r\n\t\t\tlegacyAddViewVisible = !!(\r\n\t\t\t\tlegacyVin &&\r\n\t\t\t\t((legacyGarageBlock && legacyGarageBlock.style.display === \"none\") ||\r\n\t\t\t\t\t(legacyEasyYmm && legacyEasyYmm.style.display !== \"none\"))\r\n\t\t\t);\r\n\t\t\tif (legacyAddViewVisible) {\r\n\t\t\t\tlegacyVin.hidden = false;\r\n\t\t\t\tlegacyVin.style.display = \"block\";\r\n\t\t\t\tif (legacyVinOr) {\r\n\t\t\t\t\tlegacyVinOr.hidden = false;\r\n\t\t\t\t\tlegacyVinOr.style.display = \"flex\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tfunction clearGarageVinErrors(rootEl) {\r\n\t\t\trootEl = rootEl || garageRoot() || document;\r\n\t\t\tArray.prototype.slice\r\n\t\t\t\t.call(rootEl.querySelectorAll(\"[data-gv2-vin-error]\"))\r\n\t\t\t\t.forEach(function (el) {\r\n\t\t\t\t\tel.textContent = \"\";\r\n\t\t\t\t});\r\n\t\t\tArray.prototype.slice\r\n\t\t\t\t.call(rootEl.querySelectorAll(\".errorMessageVIN\"))\r\n\t\t\t\t.forEach(function (el) {\r\n\t\t\t\t\tel.style.visibility = \"hidden\";\r\n\t\t\t\t});\r\n\t\t\tArray.prototype.slice\r\n\t\t\t\t.call(\r\n\t\t\t\t\trootEl.querySelectorAll(\r\n\t\t\t\t\t\t\".vin-error-message-container, .vin-decoder-failed-attempt, .vin-decoder-remaining-attempts, .vin-decoder-submission-failed-message\",\r\n\t\t\t\t\t),\r\n\t\t\t\t)\r\n\t\t\t\t.forEach(function (el) {\r\n\t\t\t\t\tel.style.display = \"none\";\r\n\t\t\t\t});\r\n\t\t\tArray.prototype.slice\r\n\t\t\t\t.call(\r\n\t\t\t\t\trootEl.querySelectorAll(\".vin-validation-error, .vin-helper-text\"),\r\n\t\t\t\t)\r\n\t\t\t\t.forEach(function (el) {\r\n\t\t\t\t\tel.textContent = \"\";\r\n\t\t\t\t});\r\n\t\t}\r\n\t\tfunction garageVehicleFromAction(action) {\r\n\t\t\tvar idx = action && action.getAttribute(\"data-gv2-idx\");\r\n\t\t\tvar terms = [];\r\n\t\t\ttry {\r\n\t\t\t\tvar fn =\r\n\t\t\t\t\ttypeof getSearchTerms === \"function\"\r\n\t\t\t\t\t\t? getSearchTerms\r\n\t\t\t\t\t\t: window.getSearchTerms || null;\r\n\t\t\t\tterms = fn\r\n\t\t\t\t\t? fn()\r\n\t\t\t\t\t: JSON.parse(localStorage.getItem(\"searchTerms\") || \"[]\");\r\n\t\t\t} catch (e) {}\r\n\t\t\tif (idx != null && terms[Number(idx)]) return terms[Number(idx)];\r\n\t\t\tvar item =\r\n\t\t\t\taction &&\r\n\t\t\t\taction.closest(\r\n\t\t\t\t\t\"[data-garage-vehicle], .gv2-vehicle-item, .vehicle-item\",\r\n\t\t\t\t);\r\n\t\t\tvar itemIdx =\r\n\t\t\t\titem && (item.getAttribute(\"data-gv2-vi\") || item.dataset.gv2Vi);\r\n\t\t\tif (itemIdx != null && terms[Number(itemIdx)])\r\n\t\t\t\treturn terms[Number(itemIdx)];\r\n\t\t\tvar legacyYmmEl = item && item.querySelector(\"strong[data-vehicle]\");\r\n\t\t\tvar legacyYmm =\r\n\t\t\t\tlegacyYmmEl && legacyYmmEl.getAttribute(\"data-vehicle\")\r\n\t\t\t\t\t? legacyYmmEl.getAttribute(\"data-vehicle\").trim()\r\n\t\t\t\t\t: \"\";\r\n\t\t\tif (legacyYmm) {\r\n\t\t\t\tfor (var i = 0; i < terms.length; i++) {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tvehicleYmmLabel(terms[i]).trim().toLowerCase() ===\r\n\t\t\t\t\t\tlegacyYmm.toLowerCase()\r\n\t\t\t\t\t)\r\n\t\t\t\t\t\treturn terms[i];\r\n\t\t\t\t}\r\n\t\t\t\treturn { ymm: legacyYmm };\r\n\t\t\t}\r\n\t\t\treturn getVehicle();\r\n\t\t}\r\n\t\tfunction restoreGarageTouchupActions() {\r\n\t\t\tvar rootEl = garageRoot() || document;\r\n\t\t\tif (rootEl.removeAttribute)\r\n\t\t\t\trootEl.removeAttribute(\"data-tuf-garage-context\");\r\n\t\t\tArray.prototype.slice\r\n\t\t\t\t.call(rootEl.querySelectorAll(\"[data-tuf-garage-use-vehicle]\"))\r\n\t\t\t\t.forEach(function (action) {\r\n\t\t\t\t\tvar original = action.getAttribute(\"data-tuf-original-label\");\r\n\t\t\t\t\tif (original) {\r\n\t\t\t\t\t\tif (\"value\" in action && action.tagName === \"INPUT\")\r\n\t\t\t\t\t\t\taction.value = original;\r\n\t\t\t\t\t\telse action.textContent = original;\r\n\t\t\t\t\t}\r\n\t\t\t\t\taction.removeAttribute(\"data-tuf-garage-use-vehicle\");\r\n\t\t\t\t\taction.removeAttribute(\"data-tuf-original-label\");\r\n\t\t\t\t});\r\n\t\t}\r\n\t\tfunction stopGarageTouchupObserver() {\r\n\t\t\tif (garageMutationObserver) {\r\n\t\t\t\tgarageMutationObserver.disconnect();\r\n\t\t\t\tgarageMutationObserver = null;\r\n\t\t\t}\r\n\t\t\tif (garageDecorateTimer) {\r\n\t\t\t\tclearTimeout(garageDecorateTimer);\r\n\t\t\t\tgarageDecorateTimer = null;\r\n\t\t\t}\r\n\t\t}\r\n\t\tfunction clearGarageTouchupContext() {\r\n\t\t\tgarageOpenedFromFinder = false;\r\n\t\t\tstopGarageTouchupObserver();\r\n\t\t\trestoreGarageTouchupActions();\r\n\t\t}\r\n\t\tfunction scheduleGarageDecoration() {\r\n\t\t\tif (!manualColorOnly || !garageOpenedFromFinder) return;\r\n\t\t\tif (garageDecorateTimer) clearTimeout(garageDecorateTimer);\r\n\t\t\tgarageDecorateTimer = setTimeout(function () {\r\n\t\t\t\tgarageDecorateTimer = null;\r\n\t\t\t\tdecorateGarageForTouchup();\r\n\t\t\t}, 0);\r\n\t\t}\r\n\t\tfunction observeGarageForTouchup() {\r\n\t\t\tif (\r\n\t\t\t\t!manualColorOnly ||\r\n\t\t\t\tgarageMutationObserver ||\r\n\t\t\t\t!window.MutationObserver\r\n\t\t\t)\r\n\t\t\t\treturn;\r\n\t\t\tgarageMutationObserver = new MutationObserver(function () {\r\n\t\t\t\tif (garageOpenedFromFinder && !garageIsOpen()) {\r\n\t\t\t\t\tclearGarageTouchupContext();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tscheduleGarageDecoration();\r\n\t\t\t});\r\n\t\t\tgarageMutationObserver.observe(document.body, {\r\n\t\t\t\tattributes: true,\r\n\t\t\t\tattributeFilter: [\"class\"],\r\n\t\t\t\tchildList: true,\r\n\t\t\t\tsubtree: true,\r\n\t\t\t});\r\n\t\t}\r\n\t\tfunction returnFromGarageWithVehicle(action) {\r\n\t\t\tvar vehicle = garageVehicleFromAction(action) || getVehicle();\r\n\t\t\tif (vehicle && typeof moveVehicleToFront === \"function\") {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tmoveVehicleToFront(vehicle);\r\n\t\t\t\t\tvehicle = getVehicle() || vehicle;\r\n\t\t\t\t} catch (e) {}\r\n\t\t\t}\r\n\t\t\tif (window.GarageV2 && typeof window.GarageV2.close === \"function\") {\r\n\t\t\t\twindow.GarageV2.close();\r\n\t\t\t} else if (\r\n\t\t\t\ttypeof window.toggleGaragePopup === \"function\" &&\r\n\t\t\t\tgarageRoot() &&\r\n\t\t\t\t!garageRoot().classList.contains(\"hidden\")\r\n\t\t\t) {\r\n\t\t\t\twindow.toggleGaragePopup();\r\n\t\t\t}\r\n\t\t\tclearGarageVinErrors();\r\n\t\t\tclearGarageTouchupContext();\r\n\t\t\tif (overlay) {\r\n\t\t\t\toverlay.classList.add(\"tuf-open\");\r\n\t\t\t\tdocument.body.style.overflow = \"hidden\";\r\n\t\t\t}\r\n\t\t\tonVehicleChanged(vehicle);\r\n\t\t\tensureKitProducts().then(function () {\r\n\t\t\t\tloadAllowedCodes().then(function () {\r\n\t\t\t\t\tbuildSteps();\r\n\t\t\t\t\tgoToStep(\"color\");\r\n\t\t\t\t\trenderColorDropdown();\r\n\t\t\t\t\trefreshNav();\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\t\tfunction bindGarageTouchupAction() {\r\n\t\t\tif (garageClickBound) return;\r\n\t\t\tgarageClickBound = true;\r\n\t\t\tdocument.addEventListener(\r\n\t\t\t\t\"click\",\r\n\t\t\t\tfunction (event) {\r\n\t\t\t\t\tif (!manualColorOnly || !garageOpenedFromFinder) return;\r\n\t\t\t\t\tvar action = event.target.closest(\r\n\t\t\t\t\t\t\"[data-tuf-garage-use-vehicle], .browse-catalog-btn, [data-gv2-action='shop'], [data-gv2-browse-catalog]\",\r\n\t\t\t\t\t);\r\n\t\t\t\t\tvar closeAction = event.target.closest(\r\n\t\t\t\t\t\t\"[data-gv2-close], .garage-close-button\",\r\n\t\t\t\t\t);\r\n\t\t\t\t\tif (closeAction) {\r\n\t\t\t\t\t\tsetTimeout(clearGarageTouchupContext, 0);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (!action) return;\r\n\t\t\t\t\tvar rootEl = garageRoot() || document;\r\n\t\t\t\t\tif (rootEl !== document && !rootEl.contains(action)) return;\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t\treturnFromGarageWithVehicle(action);\r\n\t\t\t\t},\r\n\t\t\t\ttrue,\r\n\t\t\t);\r\n\t\t\tdocument.addEventListener(\"input\", function (event) {\r\n\t\t\t\tif (!manualColorOnly || !garageOpenedFromFinder) return;\r\n\t\t\t\tvar target = event.target;\r\n\t\t\t\tif (\r\n\t\t\t\t\t!target ||\r\n\t\t\t\t\t!target.matches ||\r\n\t\t\t\t\t!target.matches(\r\n\t\t\t\t\t\t'[data-gv2-vin-input], #vin-to-collection-input, .vin-input-to-collection, [id^=\"vin-decoder-textbox-for-verification\"]',\r\n\t\t\t\t\t)\r\n\t\t\t\t)\r\n\t\t\t\t\treturn;\r\n\t\t\t\tvar rootEl = garageRoot() || document;\r\n\t\t\t\tif (rootEl !== document && !rootEl.contains(target)) return;\r\n\t\t\t\tclearGarageVinErrors(rootEl);\r\n\t\t\t});\r\n\t\t}\r\n\t\tfunction decorateGarageForTouchup() {\r\n\t\t\tif (!manualColorOnly || !garageOpenedFromFinder) return;\r\n\t\t\thideGaragePlateLookup();\r\n\t\t\tvar rootEl = garageRoot() || document;\r\n\t\t\tif (\r\n\t\t\t\trootEl.setAttribute &&\r\n\t\t\t\trootEl.getAttribute(\"data-tuf-garage-context\") !== \"touchup\"\r\n\t\t\t)\r\n\t\t\t\trootEl.setAttribute(\"data-tuf-garage-context\", \"touchup\");\r\n\t\t\tArray.prototype.slice\r\n\t\t\t\t.call(\r\n\t\t\t\t\trootEl.querySelectorAll(\r\n\t\t\t\t\t\t'[data-garage-active-cta], [data-gv2-action=\"shop\"], [data-gv2-browse-catalog], .browse-catalog-btn',\r\n\t\t\t\t\t),\r\n\t\t\t\t)\r\n\t\t\t\t.forEach(function (action) {\r\n\t\t\t\t\tif (!action.hasAttribute(\"data-tuf-original-label\")) {\r\n\t\t\t\t\t\taction.setAttribute(\r\n\t\t\t\t\t\t\t\"data-tuf-original-label\",\r\n\t\t\t\t\t\t\t(\"value\" in action && action.tagName === \"INPUT\"\r\n\t\t\t\t\t\t\t\t? action.value\r\n\t\t\t\t\t\t\t\t: action.textContent\r\n\t\t\t\t\t\t\t).trim(),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t\taction.setAttribute(\"data-tuf-garage-use-vehicle\", \"true\");\r\n\t\t\t\t\tif (\"value\" in action && action.tagName === \"INPUT\") {\r\n\t\t\t\t\t\tif (action.value !== \"Use this vehicle\")\r\n\t\t\t\t\t\t\taction.value = \"Use this vehicle\";\r\n\t\t\t\t\t} else if (action.textContent !== \"Use this vehicle\") {\r\n\t\t\t\t\t\taction.textContent = \"Use this vehicle\";\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\tbindGarageTouchupAction();\r\n\t\t}\r\n\t\tfunction openGarage() {\r\n\t\t\tgarageOpenedFromFinder = true;\r\n\t\t\tobserveGarageForTouchup();\r\n\t\t\tdecorateGarageForTouchup();\r\n\t\t\tif (window.GarageV2 && typeof window.GarageV2.open === \"function\")\r\n\t\t\t\twindow.GarageV2.open();\r\n\t\t\telse if (typeof window.toggleGaragePopup === \"function\")\r\n\t\t\t\twindow.toggleGaragePopup();\r\n\t\t\telse closeModal();\r\n\t\t\tclearGarageVinErrors();\r\n\t\t\tif (manualColorOnly) {\r\n\t\t\t\t[0, 120, 400].forEach(function (delay) {\r\n\t\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\t\tdecorateGarageForTouchup();\r\n\t\t\t\t\t\tclearGarageVinErrors();\r\n\t\t\t\t\t}, delay);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\tfunction renderColorVehicleContext() {\r\n\t\t\tif (!colorVehicleContext && !colorVehicleName) return;\r\n\t\t\tvar v = state.vehicle || getVehicle();\r\n\t\t\tif (colorVehicleName)\r\n\t\t\t\tcolorVehicleName.textContent = v\r\n\t\t\t\t\t? vehicleYmmLabel(v)\r\n\t\t\t\t\t: \"No vehicle selected\";\r\n\t\t\tif (colorVehicleContext)\r\n\t\t\t\tcolorVehicleContext.classList.toggle(\"tuf-hidden\", !v);\r\n\t\t}\r\n\r\n\t\tfunction paintCodeLabel(code) {\r\n\t\t\tvar name = colorName(code);\r\n\t\t\treturn name ? code + \" \\u2014 \" + name : code;\r\n\t\t}\r\n\t\tfunction renderColorDropdown() {\r\n\t\t\tif (!colorSelect) return;\r\n\t\t\trenderColorVehicleContext();\r\n\t\t\tvar activeKey = activeVehicleKey();\r\n\t\t\tif (manualColorOnly && !activeKey) {\r\n\t\t\t\tcolorSelect.innerHTML =\r\n\t\t\t\t\t'<option value=\"\">Select a vehicle first</option>';\r\n\t\t\t\tcolorSelect.value = \"\";\r\n\t\t\t\tcolorSelect.disabled = true;\r\n\t\t\t\tsetDebug({\r\n\t\t\t\t\tfinalDropdownOptionCount: 0,\r\n\t\t\t\t\tfinalDropdownSource: \"none\",\r\n\t\t\t\t\tlastDropdownState: \"waiting_for_vehicle\",\r\n\t\t\t\t});\r\n\t\t\t\tsetDecodeMsg(\"Add or select a vehicle to load its paint codes.\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (\r\n\t\t\t\tmanualColorOnly &&\r\n\t\t\t\tactiveKey &&\r\n\t\t\t\tallowedCodesKey !== activeKey &&\r\n\t\t\t\tallowedCodesPendingKey !== activeKey\r\n\t\t\t) {\r\n\t\t\t\tallowedCodes = null;\r\n\t\t\t\tloadAllowedCodes().then(function () {\r\n\t\t\t\t\trenderColorDropdown();\r\n\t\t\t\t\trefreshNav();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tif (activeKey && allowedCodesPendingKey === activeKey && !allowedCodes) {\r\n\t\t\t\tcolorSelect.innerHTML =\r\n\t\t\t\t\t'<option value=\"\">Loading paint codes...</option>';\r\n\t\t\t\tcolorSelect.value = \"\";\r\n\t\t\t\tcolorSelect.disabled = true;\r\n\t\t\t\twindow.__TUF_LAST_RENDER_CODES = [];\r\n\t\t\t\troot.setAttribute(\"data-tuf-render-codes\", \"0\");\r\n\t\t\t\troot.setAttribute(\"data-tuf-color-source\", \"vehicle_pending\");\r\n\t\t\t\tsetDebug({\r\n\t\t\t\t\tfinalDropdownOptionCount: 0,\r\n\t\t\t\t\tfinalDropdownSource: \"vehicle_pending\",\r\n\t\t\t\t\tallowedCodesFallbackActive: false,\r\n\t\t\t\t\tlastDropdownState: \"loading_allowed_codes\",\r\n\t\t\t\t});\r\n\t\t\t\tsetDecodeMsg(\"\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tvar withKits = Object.keys(sizeMap()).filter(function (code) {\r\n\t\t\t\treturn (\r\n\t\t\t\t\thasVisibleKitEntries(code) &&\r\n\t\t\t\t\t!(manualColorOnly && isManualBlockedPaintCode(code))\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t\t\tconst twoToneMode = isTwoTonePaintModeActive();\r\n\t\t\tif (\r\n\t\t\t\tmanualColorOnly &&\r\n\t\t\t\tactiveKey &&\r\n\t\t\t\t!withKits.length &&\r\n\t\t\t\tkitLoadPendingKey === vehicleCollectionKey() + \"::\" + activeTouchupMakeKey()\r\n\t\t\t) {\r\n\t\t\t\tcolorSelect.innerHTML =\r\n\t\t\t\t\t'<option value=\"\">Loading paint options...</option>';\r\n\t\t\t\tcolorSelect.value = \"\";\r\n\t\t\t\tcolorSelect.disabled = true;\r\n\t\t\t\tsetDebug({\r\n\t\t\t\t\tfinalDropdownOptionCount: 0,\r\n\t\t\t\t\tlastDropdownState: \"loading_kit_products\",\r\n\t\t\t\t\tsizeMapUsableCodeCount: 0,\r\n\t\t\t\t});\r\n\t\t\t\tsetDecodeMsg(\"\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tvar hasVehicleCodes = !!(allowedCodes && allowedCodes.length);\r\n\t\t\tvar hasResolvedEmptyVehicleCodes =\r\n\t\t\t\tmanualColorOnly &&\r\n\t\t\t\tactiveKey &&\r\n\t\t\t\tArray.isArray(allowedCodes) &&\r\n\t\t\t\tallowedCodesKey === activeKey &&\r\n\t\t\t\tallowedCodesPendingKey !== activeKey &&\r\n\t\t\t\t!allowedCodes.length;\r\n\t\t\tvar codes = hasVehicleCodes\r\n\t\t\t\t? withKits.filter(function (code) {\r\n\t\t\t\t\t\treturn codeAllowed(code);\r\n\t\t\t\t\t})\r\n\t\t\t\t: manualColorOnly && !hasResolvedEmptyVehicleCodes\r\n\t\t\t\t\t? []\r\n\t\t\t\t\t: withKits;\r\n\t\t\tif (twoToneMode) {\r\n\t\t\t\tcodes = withKits.filter(function (code) {\r\n\t\t\t\t\treturn twoToneCodeAllowed(code);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tvar usingVehicleCodes = hasVehicleCodes && codes.length > 0;\r\n\t\t\tif (twoToneMode) usingVehicleCodes = false;\r\n\t\t\tvar usingBlankCodeMakeFallback = hasResolvedEmptyVehicleCodes && codes.length > 0;\r\n\t\t\tvar vehicleCodeMissingKitCount = hasVehicleCodes\r\n\t\t\t\t? Math.max(allowedCodes.length - codes.length, 0)\r\n\t\t\t\t: 0;\r\n\t\t\tvar missingVehicleCodeSource =\r\n\t\t\t\tmanualColorOnly &&\r\n\t\t\t\tactiveKey &&\r\n\t\t\t\t!hasVehicleCodes &&\r\n\t\t\t\tallowedCodesPendingKey !== activeKey;\r\n\t\t\tif (!manualColorOnly && !codes.length && withKits.length) {\r\n\t\t\t\tcodes = withKits; // US manual flow behavior: vehicle codes narrow, never dead-end.\r\n\t\t\t\tusingVehicleCodes = false;\r\n\t\t\t}\r\n\t\t\tvar finalColorSource =\r\n\t\t\t\tusingVehicleCodes || (manualColorOnly && hasVehicleCodes)\r\n\t\t\t\t\t? \"vehicle\"\r\n\t\t\t\t\t: hasResolvedEmptyVehicleCodes\r\n\t\t\t\t\t\t? \"make\"\r\n\t\t\t\t\t\t: missingVehicleCodeSource\r\n\t\t\t\t\t\t\t? \"vehicle_missing\"\r\n\t\t\t\t\t\t\t: \"make\";\r\n\t\t\tif (twoToneMode) finalColorSource = \"two_tone_rule\";\r\n\t\t\tcodes.sort();\r\n\t\t\twindow.__TUF_LAST_RENDER_CODES = codes.slice();\r\n\t\t\troot.setAttribute(\"data-tuf-render-codes\", String(codes.length));\r\n\t\t\troot.setAttribute(\"data-tuf-color-source\", finalColorSource);\r\n\t\t\tsetDebug({\r\n\t\t\t\tfinalDropdownOptionCount: codes.length,\r\n\t\t\t\tfinalDropdownSource: finalColorSource,\r\n\t\t\t\tsizeMapUsableCodeCount: withKits.length,\r\n\t\t\t\tvehicleCodeMatchedKitCount: usingVehicleCodes ? codes.length : 0,\r\n\t\t\t\tvehicleCodeMissingKitCount: vehicleCodeMissingKitCount,\r\n\t\t\t\tallowedCodesFallbackActive: usingBlankCodeMakeFallback,\r\n\t\t\t\tlastDropdownState: codes.length ? \"ready\" : \"empty_after_all_sources\",\r\n\t\t\t});\r\n\t\t\tcolorSelect.innerHTML = codes.length\r\n\t\t\t\t? '<option value=\"\">Select paint code</option>'\r\n\t\t\t\t: '<option value=\"\">No paint codes found for this vehicle</option>';\r\n\t\t\tcodes.forEach(function (code) {\r\n\t\t\t\tvar opt = document.createElement(\"option\");\r\n\t\t\t\topt.value = code;\r\n\t\t\t\topt.textContent = paintCodeLabel(code);\r\n\t\t\t\tcolorSelect.appendChild(opt);\r\n\t\t\t});\r\n\t\t\tcolorSelect.value = state.colorCode || \"\";\r\n\t\t\tcolorSelect.disabled = isTwoToneChoiceRequired() || !codes.length;\r\n\t\t\tif (isTwoToneChoiceRequired()) {\r\n\t\t\t\tsetDecodeMsg(\r\n\t\t\t\t\tselectedTwoToneChoice()\r\n\t\t\t\t\t\t? TWO_TONE_AREA_CHOICE_MESSAGE\r\n\t\t\t\t\t\t: TWO_TONE_CHOICE_MESSAGE,\r\n\t\t\t\t);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tsetDecodeMsg(\r\n\t\t\t\ttwoToneMode\r\n\t\t\t\t\t? codes.length\r\n\t\t\t\t\t\t? TWO_TONE_MANUAL_COLOR_MESSAGE\r\n\t\t\t\t\t\t: NO_TOUCHUP_KIT_MATCH_MESSAGE\r\n\t\t\t\t\t: manualColorOnly && activeKey && missingVehicleCodeSource\r\n\t\t\t\t\t? \"Vehicle-specific paint codes are not configured for this vehicle yet.\"\r\n\t\t\t\t\t: manualColorOnly && activeKey && hasVehicleCodes && !codes.length\r\n\t\t\t\t\t\t? \"No touch-up kit variants match this vehicle's paint-code list yet.\"\r\n\t\t\t\t\t\t: manualColorOnly &&\r\n\t\t\t\t\t\t\t  activeKey &&\r\n\t\t\t\t\t\t\t  usingVehicleCodes &&\r\n\t\t\t\t\t\t\t  vehicleCodeMissingKitCount > 0\r\n\t\t\t\t\t\t\t? \"Showing vehicle-specific paint codes that have touch-up kit variants. Some vehicle paint codes are not configured for touch-up kits yet.\"\r\n\t\t\t\t\t\t\t: \"\",\r\n\t\t\t);\r\n\t\t}\r\n\t\tfunction recommendedPackage(pkgs) {\r\n\t\t\t// Essential is the single recommended package across the board (per merchandising).\r\n\t\t\treturn canonicalFrom(pkgs, \"essential\") || null;\r\n\t\t}\r\n\t\tfunction priceNumber(entry) {\r\n\t\t\tvar n = Number(entry && entry.price);\r\n\t\t\treturn isNaN(n) ? Number.POSITIVE_INFINITY : n;\r\n\t\t}\r\n\t\tfunction cheapestEntryForFormat(entries, format) {\r\n\t\t\treturn (\r\n\t\t\t\tentries\r\n\t\t\t\t\t.filter(function (entry) {\r\n\t\t\t\t\t\treturn entry && entry.size === format;\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.sort(function (a, b) {\r\n\t\t\t\t\t\treturn priceNumber(a) - priceNumber(b);\r\n\t\t\t\t\t})[0] || null\r\n\t\t\t);\r\n\t\t}\r\n\t\tfunction defaultPackageForFormat(format) {\r\n\t\t\tvar pkgs = packagesFor(state.colorCode, format);\r\n\t\t\tvar essential = canonicalFrom(pkgs, \"essential\");\r\n\t\t\tif (essential) return essential;\r\n\t\t\tvar cheapest = cheapestEntryForFormat(entriesForSelectedColor(), format);\r\n\t\t\treturn (cheapest && cheapest.packageName) || pkgs[0] || null;\r\n\t\t}\r\n\t\tfunction entriesForSelectedColor() {\r\n\t\t\treturn eligibleEntriesFor(state.colorCode);\r\n\t\t}\r\n\t\tfunction formatBlurb(format) {\r\n\t\t\tvar key = normalizeKey(format);\r\n\t\t\tvar blurbs = {\r\n\t\t\t\tbottle: \"Best for chips, small scratches, and precise touch-ups.\",\r\n\t\t\t\tpen: \"Best for tiny chips and thin scratches.\",\r\n\t\t\t\taerosol: \"Spray can coverage for larger areas.\",\r\n\t\t\t\t\"8oz\": \"For bigger repairs that need more paint.\",\r\n\t\t\t\thalfpint: \"For bigger repairs that need more paint.\",\r\n\t\t\t\t\"16oz\": \"For larger paint jobs and repeated use.\",\r\n\t\t\t\tpint: \"For larger paint jobs and repeated use.\",\r\n\t\t\t\t\"32oz\": \"Shop-level volume for bigger repair jobs.\",\r\n\t\t\t\tquart: \"Shop-level volume for bigger repair jobs.\",\r\n\t\t\t\t\"128oz\":\r\n\t\t\t\t\t\"Professional volume for full panels, shop work, and repeat jobs.\",\r\n\t\t\t\tgallon:\r\n\t\t\t\t\t\"Professional volume for full panels, shop work, and repeat jobs.\",\r\n\t\t\t};\r\n\t\t\treturn blurbs[key] || \"Choose this format for your repair.\";\r\n\t\t}\r\n\t\tfunction entryNeedsSprayGun(entry) {\r\n\t\t\tvar type = normalizeKey(entry && entry.productType);\r\n\t\t\tvar title = normalizeKey(entry && entry.productTitle);\r\n\t\t\tvar format = normalizeKey(entry && entry.size);\r\n\t\t\tvar source = type + \" \" + title;\r\n\t\t\tif (\r\n\t\t\t\tsource.indexOf(\"spraygun\") !== -1 ||\r\n\t\t\t\tsource.indexOf(\"paintgun\") !== -1 ||\r\n\t\t\t\tsource.indexOf(\"requiresgun\") !== -1 ||\r\n\t\t\t\tsource.indexOf(\"readytospray\") !== -1 ||\r\n\t\t\t\tsource.indexOf(\"sprayable\") !== -1 ||\r\n\t\t\t\tsource.indexOf(\"professional\") !== -1 ||\r\n\t\t\t\tsource.indexOf(\"shop\") !== -1\r\n\t\t\t)\r\n\t\t\t\treturn true;\r\n\t\t\treturn (\r\n\t\t\t\tformat.indexOf(\"halfpint\") !== -1 ||\r\n\t\t\t\tformat === \"8oz\" ||\r\n\t\t\t\tformat === \"16oz\" ||\r\n\t\t\t\tformat === \"pint\" ||\r\n\t\t\t\tformat === \"32oz\" ||\r\n\t\t\t\tformat.indexOf(\"quart\") !== -1 ||\r\n\t\t\t\tformat === \"128oz\" ||\r\n\t\t\t\tformat.indexOf(\"gallon\") !== -1\r\n\t\t\t);\r\n\t\t}\r\n\t\tfunction sprayGunBadge(entry) {\r\n\t\t\tif (!entryNeedsSprayGun(entry)) return \"\";\r\n\t\t\treturn (\r\n\t\t\t\t'<span class=\"tuf-spray-badge\" title=\"Needs a spray gun\">' +\r\n\t\t\t\t'<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">' +\r\n\t\t\t\t'<path d=\"M4 7h8.7l1.8-2H20v4h-4.2l-1.1 1.6 2.1 2.4H20v3h-4.7l-3-3.4H9.9L8.7 19H5.4l1.3-6.4H4V7Zm3 3h5.5l.7-1H7v1Z\"/>' +\r\n\t\t\t\t\"</svg>\" +\r\n\t\t\t\t\"Needs a spray gun</span>\"\r\n\t\t\t);\r\n\t\t}\r\n\t\tfunction packageCopy(pkg) {\r\n\t\t\tvar key = normalizeKey(pkg);\r\n\t\t\tvar copy = {\r\n\t\t\t\tpaintonly:\r\n\t\t\t\t\t\"Factory-matched paint only. Good when you already have prep and finish supplies.\",\r\n\t\t\t\tessential: \"Paint plus clearcoat for a cleaner, protected finish.\",\r\n\t\t\t\tpreferred: \"Adds prep essentials for most chips and scratches.\",\r\n\t\t\t\tcomplete: \"The most complete prep, paint, and finish setup.\",\r\n\t\t\t};\r\n\t\t\treturn copy[key] || \"A matched package for this format.\";\r\n\t\t}\r\n\t\tfunction packageBadge(pkg, rec) {\r\n\t\t\treturn pkg === rec ? \"Recommended\" : \"\";\r\n\t\t}\r\n\t\tfunction packageNote(pkg) {\r\n\t\t\tvar key = normalizeKey(pkg);\r\n\t\t\tvar notes = {\r\n\t\t\t\tpaintonly: {\r\n\t\t\t\t\tcls: \"tuf-choice-danger\",\r\n\t\t\t\t\ttext: \"Does not include clear coat. Without it, the repair will fade and chip again faster.\",\r\n\t\t\t\t},\r\n\t\t\t\tessential: {\r\n\t\t\t\t\tcls: \"tuf-choice-note\",\r\n\t\t\t\t\ttext: \"Includes clear coat to seal and protect your touch-up for a lasting finish.\",\r\n\t\t\t\t},\r\n\t\t\t\tpreferred: {\r\n\t\t\t\t\tcls: \"tuf-choice-note\",\r\n\t\t\t\t\ttext: \"Includes primer + clear coat for scratches where bare metal or original primer is exposed.\",\r\n\t\t\t\t},\r\n\t\t\t\tcomplete: {\r\n\t\t\t\t\tcls: \"tuf-choice-note\",\r\n\t\t\t\t\ttext: \"Full prep, primer, paint, and clear coat for a blended, professional-level repair.\",\r\n\t\t\t\t},\r\n\t\t\t};\r\n\t\t\tvar n = notes[key];\r\n\t\t\treturn n ? '<div class=\"' + n.cls + '\">' + n.text + \"</div>\" : \"\";\r\n\t\t}\r\n\t\tfunction formatRepresentative(entries, format) {\r\n\t\t\treturn cheapestEntryForFormat(entries, format);\r\n\t\t}\r\n\t\tfunction renderImage(src, alt) {\r\n\t\t\treturn src\r\n\t\t\t\t? '<div class=\"tuf-card-img\"><img src=\"' +\r\n\t\t\t\t\t\tsrc +\r\n\t\t\t\t\t\t'\" alt=\"' +\r\n\t\t\t\t\t\talt +\r\n\t\t\t\t\t\t'\" loading=\"lazy\"></div>'\r\n\t\t\t\t: '<div class=\"tuf-card-img tuf-card-img-empty\"></div>';\r\n\t\t}\r\n\t\tfunction renderFormats() {\r\n\t\t\tvar wrap = $(\"[data-tuf-formats]\");\r\n\t\t\tif (!wrap) return;\r\n\t\t\twrap.innerHTML = \"\";\r\n\t\t\tvar entries = entriesForSelectedColor();\r\n\t\t\tif (!entries.length) {\r\n\t\t\t\twrap.innerHTML =\r\n\t\t\t\t\t'<p class=\"tuf-empty\">No kit products are available for this paint code yet.</p>';\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tvar formats = formatsFor(state.colorCode);\r\n\t\t\tif (!state.format || formats.indexOf(state.format) === -1)\r\n\t\t\t\tstate.format = null;\r\n\t\t\tformats.forEach(function (fmt) {\r\n\t\t\t\tvar rep = formatRepresentative(entries, fmt);\r\n\t\t\t\tvar price = rep && rep.price ? money(rep.price) : \"\";\r\n\t\t\t\tvar isSel = fmt === state.format;\r\n\t\t\t\tvar card = document.createElement(\"button\");\r\n\t\t\t\tcard.type = \"button\";\r\n\t\t\t\tcard.className =\r\n\t\t\t\t\t\"tuf-choice tuf-format-card\" + (isSel ? \" tuf-sel\" : \"\");\r\n\t\t\t\tcard.setAttribute(\"data-tuf-format-choice\", fmt);\r\n\t\t\t\tcard.innerHTML =\r\n\t\t\t\t\trenderImage(rep && rep.productImage, fmt) +\r\n\t\t\t\t\t'<div class=\"tuf-choice-copy\">' +\r\n\t\t\t\t\t'<div class=\"tuf-choice-head\"><div class=\"tuf-choice-title\">' +\r\n\t\t\t\t\tfriendlySizeLabel(fmt, formats) +\r\n\t\t\t\t\t\"</div>\" +\r\n\t\t\t\t\tsprayGunBadge(rep) +\r\n\t\t\t\t\t\"</div>\" +\r\n\t\t\t\t\t'<div class=\"tuf-choice-text\">' +\r\n\t\t\t\t\tformatBlurb(fmt) +\r\n\t\t\t\t\t\"</div>\" +\r\n\t\t\t\t\t(price\r\n\t\t\t\t\t\t? '<div class=\"tuf-choice-meta\">From ' + price + \"</div>\"\r\n\t\t\t\t\t\t: \"\") +\r\n\t\t\t\t\t\"</div>\";\r\n\t\t\t\tcard.onclick = function () {\r\n\t\t\t\t\tstate.format = fmt;\r\n\t\t\t\t\tstate.tier = defaultPackageForFormat(fmt);\r\n\t\t\t\t\tincludeSteps([\"kit\", \"review\"]);\r\n\t\t\t\t\trender();\r\n\t\t\t\t\trefreshNav();\r\n\t\t\t\t};\r\n\t\t\t\twrap.appendChild(card);\r\n\t\t\t});\r\n\t\t\trefreshNav();\r\n\t\t}\r\n\t\tfunction renderKits() {\r\n\t\t\tvar wrap = $(\"[data-tuf-kits]\");\r\n\t\t\tif (!wrap) return;\r\n\t\t\twrap.innerHTML = \"\";\r\n\t\t\tvar entries = entriesForSelectedColor().filter(function (e) {\r\n\t\t\t\treturn e.size === state.format;\r\n\t\t\t});\r\n\t\t\tif (!entries.length) {\r\n\t\t\t\twrap.innerHTML =\r\n\t\t\t\t\t'<p class=\"tuf-empty\">No packages are available for this format yet.</p>';\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tvar recMap = DAMAGE_TO_PKG[state.damage] || DAMAGE_TO_PKG.notsure;\r\n\t\t\tvar pkgs = orderedUnique(\r\n\t\t\t\tentries.map(function (e) {\r\n\t\t\t\t\treturn e.packageName;\r\n\t\t\t\t}),\r\n\t\t\t\tpackageOrder(),\r\n\t\t\t);\r\n\t\t\tvar rec = recommendedPackage(pkgs);\r\n\t\t\tvar selected = currentEntry();\r\n\t\t\tif (!selected || entries.indexOf(selected) === -1) {\r\n\t\t\t\tstate.tier = defaultPackageForFormat(state.format);\r\n\t\t\t\tselected = currentEntry();\r\n\t\t\t}\r\n\t\t\tvar sub = $(\"[data-tuf-kit-sub]\");\r\n\t\t\tif (sub)\r\n\t\t\t\tsub.innerHTML = rec\r\n\t\t\t\t\t? \"For <b>\" +\r\n\t\t\t\t\t\tlabelForDamage() +\r\n\t\t\t\t\t\t\"</b>, we recommend <b>\" +\r\n\t\t\t\t\t\trec +\r\n\t\t\t\t\t\t\"</b>.\"\r\n\t\t\t\t\t: \"Choose the package that fits your repair.\";\r\n\t\t\tentries.forEach(function (e) {\r\n\t\t\t\tvar badge = packageBadge(e.packageName, rec);\r\n\t\t\t\tvar isRec = e.packageName === rec,\r\n\t\t\t\t\tisSel = e.packageName === state.tier;\r\n\t\t\t\tvar noteHtml = packageNote(e.packageName);\r\n\t\t\t\tvar card = document.createElement(\"button\");\r\n\t\t\t\tcard.type = \"button\";\r\n\t\t\t\tcard.className =\r\n\t\t\t\t\t\"tuf-choice tuf-package-card\" +\r\n\t\t\t\t\t(isRec ? \" tuf-rec\" : \"\") +\r\n\t\t\t\t\t(isSel ? \" tuf-sel\" : \"\");\r\n\t\t\t\tcard.setAttribute(\"data-tuf-package-choice\", e.packageName || \"\");\r\n\t\t\t\tcard.innerHTML =\r\n\t\t\t\t\trenderImage(e.productImage, e.packageName) +\r\n\t\t\t\t\t'<div class=\"tuf-choice-copy\">' +\r\n\t\t\t\t\t(badge ? '<div class=\"tuf-choice-badge\">' + badge + \"</div>\" : \"\") +\r\n\t\t\t\t\t'<div class=\"tuf-choice-head\"><div class=\"tuf-choice-title\">' +\r\n\t\t\t\t\te.packageName +\r\n\t\t\t\t\t\"</div>\" +\r\n\t\t\t\t\t'<div class=\"tuf-choice-price\">' +\r\n\t\t\t\t\tmoney(e && e.price) +\r\n\t\t\t\t\t\"</div></div>\" +\r\n\t\t\t\t\t'<div class=\"tuf-choice-text\">' +\r\n\t\t\t\t\tpackageCopy(e.packageName) +\r\n\t\t\t\t\t\"</div>\" +\r\n\t\t\t\t\tnoteHtml +\r\n\t\t\t\t\t\"</div>\";\r\n\t\t\t\tcard.onclick = function () {\r\n\t\t\t\t\tstate.tier = e.packageName || null;\r\n\t\t\t\t\trender();\r\n\t\t\t\t\trefreshNav();\r\n\t\t\t\t};\r\n\t\t\t\twrap.appendChild(card);\r\n\t\t\t});\r\n\t\t\trefreshNav();\r\n\t\t}\r\n\t\tfunction labelForDamage() {\r\n\t\t\tvar m = {\r\n\t\t\t\tchips: \"small chips & nicks\",\r\n\t\t\t\tscratches: \"scratches & key marks\",\r\n\t\t\t\tdeep: \"deep damage\",\r\n\t\t\t\tnotsure: \"a common repair\",\r\n\t\t\t};\r\n\t\t\treturn m[state.damage] || \"your repair\";\r\n\t\t}\r\n\t\tfunction currentEntry() {\r\n\t\t\tif (state.matchByVin) {\r\n\t\t\t\tvar code = matchByVinCode();\r\n\t\t\t\tif (!code) return null;\r\n\t\t\t\tstate.colorCode = code;\r\n\t\t\t\tvar selected = entry(code, state.format, state.tier);\r\n\t\t\t\treturn entryIsMatchByVin(selected) ? selected : null;\r\n\t\t\t}\r\n\t\t\treturn entry(state.colorCode, state.format, state.tier);\r\n\t\t}\r\n\t\tfunction exactSelectedEntry(includeUnavailable) {\r\n\t\t\tif (!state.colorCode || !state.format || !state.tier) return null;\r\n\t\t\tvar entries = includeUnavailable\r\n\t\t\t\t? entriesFor(state.colorCode).filter(function (e) {\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\te &&\r\n\t\t\t\t\t\t\te.size &&\r\n\t\t\t\t\t\t\te.packageName &&\r\n\t\t\t\t\t\t\te.isKitProduct &&\r\n\t\t\t\t\t\t\tentryMatchesBrand(e)\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})\r\n\t\t\t\t: eligibleEntriesFor(state.colorCode);\r\n\t\t\tvar selected = entries.find(function (e) {\r\n\t\t\t\treturn e.size === state.format && e.packageName === state.tier;\r\n\t\t\t});\r\n\t\t\tif (state.matchByVin && !entryIsMatchByVin(selected)) return null;\r\n\t\t\treturn selected || null;\r\n\t\t}\r\n\t\tfunction selectedEntryForDebug() {\r\n\t\t\treturn currentEntry() || exactSelectedEntry(true);\r\n\t\t}\r\n\t\tfunction updateSelectedVariantDebug(entryToReport, variantId) {\r\n\t\t\tsetDebug({\r\n\t\t\t\tselectedVariantAvailable: entryToReport\r\n\t\t\t\t\t? entryIsAvailable(entryToReport)\r\n\t\t\t\t\t: null,\r\n\t\t\t\tselectedVariantId:\r\n\t\t\t\t\tvariantId || (entryToReport && entryToReport.id)\r\n\t\t\t\t\t\t? String(variantId || entryToReport.id)\r\n\t\t\t\t\t\t: \"\",\r\n\t\t\t\tselectedProductTitle:\r\n\t\t\t\t\t(entryToReport && entryToReport.productTitle) || \"\",\r\n\t\t\t\tselectedVariantTitle:\r\n\t\t\t\t\t(entryToReport &&\r\n\t\t\t\t\t\t(entryToReport.variantTitle ||\r\n\t\t\t\t\t\t\tentryToReport.paintCode ||\r\n\t\t\t\t\t\t\tentryToReport.code ||\r\n\t\t\t\t\t\t\tentryToReport.title)) ||\r\n\t\t\t\t\t\"\",\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction renderReview() {\r\n\t\t\tvar box = $(\"[data-tuf-review]\");\r\n\t\t\tif (!box) return;\r\n\t\t\tvar e = currentEntry();\r\n\t\t\tvar debugEntry = e || selectedEntryForDebug();\r\n\t\t\tvar staleUnavailableSelection = !!(\r\n\t\t\t\tstate.colorCode &&\r\n\t\t\t\tstate.format &&\r\n\t\t\t\tstate.tier &&\r\n\t\t\t\t!e\r\n\t\t\t);\r\n\t\t\tvar v = state.vehicle || getVehicle() || {};\r\n\t\t\tupdateSelectedVariantDebug(debugEntry);\r\n\t\t\tbox.innerHTML =\r\n\t\t\t\t'<div class=\"tuf-rrow\"><div class=\"tuf-k\">Vehicle</div><div class=\"tuf-v\">' +\r\n\t\t\t\t(vehicleYmmLabel(v) || \"&mdash;\") +\r\n\t\t\t\t\"</div></div>\" +\r\n\t\t\t\t'<div class=\"tuf-rrow\"><div class=\"tuf-k\">Color</div>' +\r\n\t\t\t\t'<div class=\"tuf-v\">' +\r\n\t\t\t\t(colorLabel(state.colorCode) || \"&mdash;\") +\r\n\t\t\t\t\"</div>\" +\r\n\t\t\t\t'<button type=\"button\" class=\"tuf-edit\" data-tuf-go=\"color\">Edit</button></div>' +\r\n\t\t\t\t'<div class=\"tuf-rrow\"><div class=\"tuf-k\">Kit</div><div class=\"tuf-v tuf-review-kit\">' +\r\n\t\t\t\t(e && e.productImage\r\n\t\t\t\t\t? '<img class=\"tuf-review-img\" src=\"' +\r\n\t\t\t\t\t\te.productImage +\r\n\t\t\t\t\t\t'\" alt=\"' +\r\n\t\t\t\t\t\t(e.productTitle || \"Selected kit\") +\r\n\t\t\t\t\t\t'\" loading=\"lazy\">'\r\n\t\t\t\t\t: \"\") +\r\n\t\t\t\t\"<span>\" +\r\n\t\t\t\t([friendlySizeLabel(state.format, formatsFor(state.colorCode)), state.tier].filter(Boolean).join(\" - \") || \"&mdash;\") +\r\n\t\t\t\t\"</span></div>\" +\r\n\t\t\t\t'<button type=\"button\" class=\"tuf-edit\" data-tuf-go=\"kit\">Edit</button></div>' +\r\n\t\t\t\t'<div class=\"tuf-total\"><div class=\"tuf-lab\">Total</div><div class=\"tuf-amt\" data-tuf-total>' +\r\n\t\t\t\tmoney(e && e.price) +\r\n\t\t\t\t\"</div></div>\";\r\n\t\t\t$$(\"[data-tuf-go]\", box).forEach(function (b) {\r\n\t\t\t\tb.onclick = function () {\r\n\t\t\t\t\tgoToStep(b.getAttribute(\"data-tuf-go\"));\r\n\t\t\t\t};\r\n\t\t\t});\r\n\r\n\t\t\tupdatePaintAddon(e);\r\n\t\t\tvar note = $(\"[data-tuf-stock]\");\r\n\t\t\tif (note) {\r\n\t\t\t\tif (state.matchByVin && !e) {\r\n\t\t\t\t\tnote.className = \"tuf-stock tuf-out\";\r\n\t\t\t\t\tnote.textContent =\r\n\t\t\t\t\t\t\"Match by VIN is required, but this kit is missing a real Match by VIN variant.\";\r\n\t\t\t\t} else if (\r\n\t\t\t\t\tstaleUnavailableSelection ||\r\n\t\t\t\t\t(debugEntry && !entryIsAvailable(debugEntry))\r\n\t\t\t\t) {\r\n\t\t\t\t\tnote.className = \"tuf-stock tuf-out\";\r\n\t\t\t\t\tnote.textContent =\r\n\t\t\t\t\t\t\"This selected kit is currently sold out. Please choose another format or package.\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tnote.className = \"tuf-stock tuf-in\";\r\n\t\t\t\t\tnote.textContent = \"Matched and ready to add to cart.\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (atcBtn) {\r\n\t\t\t\tatcBtn.disabled = !e || !entryIsAvailable(e);\r\n\t\t\t\tatcBtn.textContent = \"Add to Cart\";\r\n\t\t\t}\r\n\t\t}\r\n\t\tfunction renderRail() {\r\n\t\t\tif (!railEl) return;\r\n\t\t\tvar labels = {\r\n\t\t\t\tvehicle: \"Vehicle\",\r\n\t\t\t\tcolor: \"Color\",\r\n\t\t\t\tformat: \"Format\",\r\n\t\t\t\tkit: \"Package\",\r\n\t\t\t\treview: \"Review\",\r\n\t\t\t};\r\n\t\t\trailEl.innerHTML = \"\";\r\n\t\t\tsteps.forEach(function (s, i) {\r\n\t\t\t\tvar d = document.createElement(\"div\");\r\n\t\t\t\td.className =\r\n\t\t\t\t\t\"tuf-step\" +\r\n\t\t\t\t\t(i < idx ? \" tuf-done\" : \"\") +\r\n\t\t\t\t\t(i === idx ? \" tuf-active\" : \"\");\r\n\t\t\t\td.innerHTML =\r\n\t\t\t\t\t'<div class=\"tuf-bar\"></div><div class=\"tuf-lab\">' +\r\n\t\t\t\t\tlabels[s] +\r\n\t\t\t\t\t\"</div>\";\r\n\t\t\t\td.onclick = function () {\r\n\t\t\t\t\tif (i <= maxReached) {\r\n\t\t\t\t\t\tidx = i;\r\n\t\t\t\t\t\trender();\r\n\t\t\t\t\t\trefreshNav();\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t\trailEl.appendChild(d);\r\n\t\t\t});\r\n\t\t}\r\n\t\tfunction showPage() {\r\n\t\t\t$$(\".tuf-page\").forEach(function (p) {\r\n\t\t\t\tp.classList.remove(\"tuf-show\");\r\n\t\t\t});\r\n\t\t\tvar p = page(steps[idx]);\r\n\t\t\tif (p) p.classList.add(\"tuf-show\");\r\n\t\t}\r\n\t\tfunction renderSummary() {\r\n\t\t\tif (!summaryEl) return;\r\n\t\t\tvar chips = [];\r\n\t\t\tvar vin = activeVinString();\r\n\t\t\tfunction pushChip(label, value, mod) {\r\n\t\t\t\tif (!value) return;\r\n\t\t\t\tchips.push(\r\n\t\t\t\t\t'<span class=\"tuf-summary-chip' +\r\n\t\t\t\t\t\t(mod ? \" tuf-summary-chip--\" + mod : \"\") +\r\n\t\t\t\t\t\t'\">' +\r\n\t\t\t\t\t\t(label\r\n\t\t\t\t\t\t\t? '<span class=\"tuf-summary-label\">' +\r\n\t\t\t\t\t\t\t\tescapeHtml(label) +\r\n\t\t\t\t\t\t\t\t\"</span>\"\r\n\t\t\t\t\t\t\t: \"\") +\r\n\t\t\t\t\t\t'<span class=\"tuf-summary-value\">' +\r\n\t\t\t\t\t\tescapeHtml(value) +\r\n\t\t\t\t\t\t\"</span></span>\",\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\tif (state.matchByVin) {\r\n\t\t\t\tpushChip(\"\", \"Match Paint by VIN\", \"match\");\r\n\t\t\t\tif (vin) pushChip(\"VIN\", vin, \"vin\");\r\n\t\t\t} else if (state.colorCode) {\r\n\t\t\t\tpushChip(\"Paint code\", state.colorCode, \"color\");\r\n\t\t\t\tif (vin) pushChip(\"VIN\", vin, \"vin\");\r\n\t\t\t}\r\n\t\t\tif (state.format) pushChip(\"Format\", friendlySizeLabel(state.format, formatsFor(state.colorCode)), \"format\");\r\n\t\t\tif (state.tier) pushChip(\"Package\", state.tier, \"package\");\r\n\t\t\tsummaryEl.innerHTML = chips.join(\"\");\r\n\t\t}\r\n\t\tfunction autoMatchMessage() {\r\n\t\t\tvar vin = activeVinString();\r\n\t\t\tfunction matchMeta(code) {\r\n\t\t\t\tvar parts = [];\r\n\t\t\t\tif (vin) parts.push(\"VIN: \" + vin);\r\n\t\t\t\tparts.push(\"Paint code: \" + (code || \"Match by VIN\"));\r\n\t\t\t\treturn parts.join(\"  \");\r\n\t\t\t}\r\n\t\t\tif (state.matchByVin) {\r\n\t\t\t\treturn matchMeta(\"\");\r\n\t\t\t}\r\n\t\t\tif (\r\n\t\t\t\t!state.colorCode ||\r\n\t\t\t\t!state.colorSource ||\r\n\t\t\t\tstate.colorSource === \"manual\"\r\n\t\t\t)\r\n\t\t\t\treturn \"\";\r\n\t\t\tif (state.colorSource === \"VIN\" || state.colorSource === \"license plate\")\r\n\t\t\t\treturn matchMeta(state.colorCode);\r\n\t\t\tif (state.colorSource === \"saved vehicle\")\r\n\t\t\t\treturn matchMeta(state.colorCode);\r\n\t\t\treturn \"\";\r\n\t\t}\r\n\t\tfunction renderAutoMatchNotice() {\r\n\t\t\tvar msg = autoMatchMessage();\r\n\t\t\t$$(\"[data-tuf-auto-match]\").forEach(function (el) {\r\n\t\t\t\tel.textContent = msg;\r\n\t\t\t\tel.classList.toggle(\"tuf-hidden\", !msg);\r\n\t\t\t});\r\n\t\t}\r\n\t\tfunction render() {\r\n\t\t\trenderColorPreview();\r\n\t\t\tshowPage();\r\n\t\t\trenderRail();\r\n\t\t\trenderVehChip();\r\n\t\t\tvar cur = steps[idx];\r\n\t\t\tif (cur === \"vehicle\") renderVehicleStep();\r\n\t\t\tif (cur === \"color\") {\r\n\t\t\t\tsyncTwoToneChoiceUi();\r\n\t\t\t\trenderColorDropdown();\r\n\t\t\t}\r\n\t\t\tif (cur === \"format\") renderFormats();\r\n\t\t\tif (cur === \"kit\") renderKits();\r\n\t\t\tif (cur === \"review\") {\r\n\t\t\t\tsyncToPdp(function () {\r\n\t\t\t\t\trenderReview();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tsyncManualVinEntry();\r\n\t\t\trenderSummary();\r\n\t\t}\r\n\r\n\t\tfunction stepValid() {\r\n\t\t\tif (!manualVinValid()) return false;\r\n\t\t\tswitch (steps[idx]) {\r\n\t\t\t\tcase \"vehicle\":\r\n\t\t\t\t\t// Wrong-brand kit can't be added: currentEntry() only resolves within\r\n\t\t\t\t\t// the vehicle's brand catalog, gated on the kit/review steps.\r\n\t\t\t\t\treturn !!getVehicle();\r\n\t\t\tcase \"color\":\r\n\t\t\t\t\tif (isTwoToneChoiceRequired()) return false;\r\n\t\t\t\t\tif (state.colorCode && hasVisibleKitEntries(state.colorCode))\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\tif (manualColorOnly) return false;\r\n\t\t\t\t\tif (state.colorPath === \"vin\") return (state.vin || \"\").length === 17;\r\n\t\t\t\t\tif (state.colorPath === \"plate\")\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t(state.plate || \"\").length >= 4 &&\r\n\t\t\t\t\t\t\t(state.stateCode || \"\").length === 2\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\treturn !!state.colorCode;\r\n\t\t\t\tcase \"format\":\r\n\t\t\t\t\treturn !!state.format;\r\n\t\t\t\tcase \"kit\":\r\n\t\t\t\t\treturn !!state.tier && !!currentEntry();\r\n\t\t\t\tcase \"review\":\r\n\t\t\t\t\treturn !!currentEntry();\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tfunction refreshNav() {\r\n\t\t\tvar last = idx === steps.length - 1;\r\n\t\t\tif (backBtn) backBtn.classList.remove(\"tuf-hidden\");\r\n\t\t\tif (nextBtn) {\r\n\t\t\t\tnextBtn.classList.toggle(\"tuf-hidden\", last);\r\n\t\t\t\tnextBtn.disabled = !stepValid();\r\n\t\t\t}\r\n\t\t\tif (atcBtn) {\r\n\t\t\t\tatcBtn.classList.toggle(\"tuf-hidden\", !last);\r\n\t\t\t\tatcBtn.disabled = !stepValid();\r\n\t\t\t}\r\n\t\t\trenderSummary();\r\n\t\t\trenderAutoMatchNotice();\r\n\t\t}\r\n\t\tfunction includeStep(name) {\r\n\t\t\tif (steps.indexOf(name) !== -1 || ALL_STEPS.indexOf(name) === -1) return;\r\n\t\t\tvar current = steps[idx];\r\n\t\t\tsteps.push(name);\r\n\t\t\tsteps.sort(function (a, b) {\r\n\t\t\t\treturn ALL_STEPS.indexOf(a) - ALL_STEPS.indexOf(b);\r\n\t\t\t});\r\n\t\t\tidx = Math.max(0, steps.indexOf(current));\r\n\t\t\tmaxReached = Math.max(maxReached, steps.indexOf(name), idx);\r\n\t\t}\r\n\t\tfunction includeSteps(names) {\r\n\t\t\tnames.forEach(function (name) {\r\n\t\t\t\tincludeStep(name);\r\n\t\t\t});\r\n\t\t}\r\n\t\tfunction previousLogicalStep() {\r\n\t\t\tvar cur = steps[idx];\r\n\t\t\tvar pos = ALL_STEPS.indexOf(cur);\r\n\t\t\tfor (var i = pos - 1; i >= 0; i--) return ALL_STEPS[i];\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tfunction goToStep(name) {\r\n\t\t\tif (steps.indexOf(name) === -1) includeStep(name);\r\n\t\t\tvar i = steps.indexOf(name);\r\n\t\t\tif (i >= 0) {\r\n\t\t\t\tidx = i;\r\n\t\t\t\tmaxReached = Math.max(maxReached, i);\r\n\t\t\t\tif (name === \"color\" && !state.colorPath)\r\n\t\t\t\t\tstate.colorPath =\r\n\t\t\t\t\t\tmanualColorOnly || !state.matchByVin ? \"code\" : \"vin\";\r\n\t\t\t\trender();\r\n\t\t\t\tif (name === \"color\") setColorPath(state.colorPath || \"code\");\r\n\t\t\t\telse refreshNav();\r\n\t\t\t}\r\n\t\t}\r\n\t\tfunction next() {\r\n\t\t\t// Color step: never advance to an empty Format. If the user is matching by\r\n\t\t\t// VIN/plate and we don't yet have a kit-backed code, run the decode instead.\r\n\t\t\tif (\r\n\t\t\t\tsteps[idx] === \"color\" &&\r\n\t\t\t\t!(state.colorCode && hasVisibleKitEntries(state.colorCode))\r\n\t\t\t) {\r\n\t\t\t\tif (\r\n\t\t\t\t\t!manualColorOnly &&\r\n\t\t\t\t\t(state.colorPath === \"vin\" || state.colorPath === \"plate\")\r\n\t\t\t\t)\r\n\t\t\t\t\tdecodeViaBackend(state.colorPath);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (!stepValid()) return;\r\n\t\t\tidx = Math.min(idx + 1, steps.length - 1);\r\n\t\t\tmaxReached = Math.max(maxReached, idx);\r\n\t\t\trender();\r\n\t\t\trefreshNav();\r\n\t\t}\r\n\t\tfunction back() {\r\n\t\t\tif (idx === 0) {\r\n\t\t\t\tvar prev = previousLogicalStep();\r\n\t\t\t\tif (prev) {\r\n\t\t\t\t\tgoToStep(prev);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tcloseModal();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tidx = Math.max(idx - 1, 0);\r\n\t\t\trender();\r\n\t\t\trefreshNav();\r\n\t\t}\r\n\t\tfunction setCartNotice(message, isError) {\r\n\t\t\tvar note = $(\"[data-tuf-stock]\");\r\n\t\t\tif (!note) return;\r\n\t\t\tnote.className = \"tuf-stock \" + (isError ? \"tuf-out\" : \"tuf-in\");\r\n\t\t\tnote.textContent = message || \"\";\r\n\t\t}\r\n\t\tfunction setAtcLoading(loading) {\r\n\t\t\tif (!atcBtn) return;\r\n\t\t\tatcBtn.disabled = !!loading || !currentEntry();\r\n\t\t\tatcBtn.textContent = loading ? \"Adding...\" : \"Add to Cart\";\r\n\t\t}\r\n\t\tfunction numericVariantId(value) {\r\n\t\t\tvar match = String(value || \"\").match(/(\\d+)$/);\r\n\t\t\treturn match ? match[1] : \"\";\r\n\t\t}\r\n\t\tfunction readResolvedKitVariantId(form) {\r\n\t\t\tif (state.matchByVin && !currentEntry()) return \"\";\r\n\t\t\tvar id = \"\";\r\n\t\t\tvar resolver =\r\n\t\t\t\ttypeof window.__partifyResolveSelectedTouchupKitVariantId === \"function\"\r\n\t\t\t\t\t? window.__partifyResolveSelectedTouchupKitVariantId\r\n\t\t\t\t\t: null;\r\n\t\t\tif (resolver) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tid = resolver() || \"\";\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tid = \"\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (!id && state.matchByVin) return \"\";\r\n\t\t\tif (!id && window.__touchupSelectedKitVariantId)\r\n\t\t\t\tid = window.__touchupSelectedKitVariantId;\r\n\t\t\tif (!id && form) {\r\n\t\t\t\tvar kitId = form.querySelector(\"input[data-touchup-kit-variant-id]\");\r\n\t\t\t\tif (kitId && kitId.value) id = kitId.value;\r\n\t\t\t}\r\n\t\t\treturn numericVariantId(id);\r\n\t\t}\r\n\t\tfunction writeFormVariantId(form, variantId) {\r\n\t\t\tif (!form || !variantId) return;\r\n\t\t\t$$('input[name=\"id\"]', form).forEach(function (input) {\r\n\t\t\t\tinput.value = variantId;\r\n\t\t\t});\r\n\t\t\tvar kitId = form.querySelector(\"input[data-touchup-kit-variant-id]\");\r\n\t\t\tif (!kitId) {\r\n\t\t\t\tkitId = document.createElement(\"input\");\r\n\t\t\t\tkitId.type = \"hidden\";\r\n\t\t\t\tkitId.name = \"id\";\r\n\t\t\t\tkitId.setAttribute(\"data-touchup-kit-variant-id\", \"true\");\r\n\t\t\t\tform.appendChild(kitId);\r\n\t\t\t}\r\n\t\t\tkitId.value = variantId;\r\n\t\t\tform.action = \"/cart/add?id=\" + variantId;\r\n\t\t}\r\n\t\tfunction selectedVehicleLabel() {\r\n\t\t\tvar v = state.vehicle || getVehicle() || {};\r\n\t\t\treturn (\r\n\t\t\t\tv.ymm ||\r\n\t\t\t\tv.YMM ||\r\n\t\t\t\tv.vehicle ||\r\n\t\t\t\t[v.year, v.make, v.model, v.trim].filter(Boolean).join(\" \")\r\n\t\t\t);\r\n\t\t}\r\n\t\tfunction vehicleYmmLabel(vehicle) {\r\n\t\t\tvehicle = vehicle || {};\r\n\t\t\treturn (\r\n\t\t\t\t[vehicle.year, vehicle.make, vehicle.model].filter(Boolean).join(\" \") ||\r\n\t\t\t\tvehicle.ymm ||\r\n\t\t\t\tvehicle.YMM ||\r\n\t\t\t\tvehicle.vehicle ||\r\n\t\t\t\t\"\"\r\n\t\t\t);\r\n\t\t}\r\n\t\tfunction manualVinValue() {\r\n\t\t\treturn manualColorOnly && window.shopCurrency === \"CAD\" && manualVinInput\r\n\t\t\t\t? manualVinInput.value.trim().toUpperCase()\r\n\t\t\t\t: \"\";\r\n\t\t}\r\n\t\tfunction manualVinValid() {\r\n\t\t\tvar vin = manualVinValue();\r\n\t\t\treturn !vin || /^[A-HJ-NPR-Z0-9]{17}$/.test(vin);\r\n\t\t}\r\n\t\tfunction syncManualVinEntry() {\r\n\t\t\tif (!manualVinField || !manualVinInput) return;\r\n\t\t\tvar storedVin = vinFromVehicleData(getVehicle());\r\n\t\t\tvar hasStoredVin = /^[A-HJ-NPR-Z0-9]{17}$/.test(storedVin);\r\n\t\t\tmanualVinField.hidden = !(\r\n\t\t\t\tmanualColorOnly &&\r\n\t\t\t\twindow.shopCurrency === \"CAD\" &&\r\n\t\t\t\tstate.colorCode &&\r\n\t\t\t\t!hasStoredVin\r\n\t\t\t);\r\n\t\t\tif (hasStoredVin) manualVinInput.value = \"\";\r\n\t\t\tvar invalid = !manualVinValid();\r\n\t\t\tmanualVinInput.setAttribute(\"aria-invalid\", String(invalid));\r\n\t\t\tif (manualVinError) manualVinError.hidden = !invalid;\r\n\t\t}\r\n\t\tfunction activeVinString() {\r\n\t\t\tvar manualVin = manualVinValue();\r\n\t\t\tif (manualVin) return manualVinValid() ? manualVin : \"\";\r\n\t\t\treturn String(\r\n\t\t\t\tvinFromVehicleData(getVehicle()) ||\r\n\t\t\t\t\tvinFromVehicleData(state) ||\r\n\t\t\t\t\t($(\"[data-tuf-vin]\") || {}).value ||\r\n\t\t\t\t\t\"\",\r\n\t\t\t)\r\n\t\t\t\t.trim()\r\n\t\t\t\t.toUpperCase();\r\n\t\t}\r\n\t\tfunction vinFromVehicleData(vehicle) {\r\n\t\t\tvehicle = vehicle || {};\r\n\t\t\treturn String(\r\n\t\t\t\tvehicle.vin ||\r\n\t\t\t\t\tvehicle.VIN ||\r\n\t\t\t\t\tvehicle.vehicleVin ||\r\n\t\t\t\t\tvehicle.vehicleVIN ||\r\n\t\t\t\t\tvehicle.vinNumber ||\r\n\t\t\t\t\tvehicle.vin_string ||\r\n\t\t\t\t\tvehicle.vinString ||\r\n\t\t\t\t\tvehicle.decodedVin ||\r\n\t\t\t\t\tvehicle.decodedVIN ||\r\n\t\t\t\t\t\"\",\r\n\t\t\t)\r\n\t\t\t\t.trim()\r\n\t\t\t\t.toUpperCase();\r\n\t\t}\r\n\t\tfunction addCartProperty(props, name, value) {\r\n\t\t\tif (!name || value == null || String(value).trim() === \"\") return;\r\n\t\t\tprops[name] = String(value).trim();\r\n\t\t}\r\n\t\tfunction collectCartProperties(form, kitEntry) {\r\n\t\t\tvar props = {};\r\n\t\t\tif (form) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tnew FormData(form).forEach(function (value, key) {\r\n\t\t\t\t\t\tvar match = String(key || \"\").match(/^properties\\[(.+)\\]$/);\r\n\t\t\t\t\t\tif (match && value != null && String(value).length) {\r\n\t\t\t\t\t\t\tprops[match[1]] = String(value);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t} catch (e) {}\r\n\t\t\t}\r\n\t\t\tif (!props[\"Paint Code\"])\r\n\t\t\t\taddCartProperty(props, \"Paint Code\", state.colorCode);\r\n\t\t\taddCartProperty(\r\n\t\t\t\tprops,\r\n\t\t\t\t\"Touch-Up Color\",\r\n\t\t\t\tstate.matchByVin ? \"Match by VIN\" : state.colorCode,\r\n\t\t\t);\r\n\t\t\taddCartProperty(props, \"Kit Format\", state.format);\r\n\t\t\taddCartProperty(props, \"Kit Package\", state.tier);\r\n\t\t\taddCartProperty(props, \"Kit Product\", kitEntry && kitEntry.productTitle);\r\n\t\t\taddCartProperty(\r\n\t\t\t\tprops,\r\n\t\t\t\t\"Collection\",\r\n\t\t\t\tkitEntry && (kitEntry.collectionTitle || kitEntry.collectionHandle),\r\n\t\t\t);\r\n\t\t\taddCartProperty(props, \"Vehicle\", selectedVehicleLabel());\r\n\t\t\t// Mirror the parts add-to-cart path: attach the garage VIN to every touch-up\r\n\t\t\t// paint line whenever one exists (addCartProperty skips empty values), not only\r\n\t\t\t// on VIN/plate matches. Same property key + uppercased/trimmed format as parts.\r\n\t\t\tvar vin = activeVinString();\r\n\t\t\tif (manualColorOnly && manualVinInput) delete props.VIN;\r\n\t\t\taddCartProperty(props, \"VIN\", vin);\r\n\t\t\treturn props;\r\n\t\t}\r\n\t\tfunction paintAddonFor(kitEntry) {\r\n\t\t\tvar format = normalizeKey(kitEntry && kitEntry.size);\r\n\t\t\tvar selector = format === \"aerosol\" ? \"[data-tuf-trigger-addon]\" :\r\n\t\t\t\t[\"halfpint\", \"pint\", \"quart\", \"gallon\"].indexOf(format) !== -1 ? \"[data-tuf-spray-gun-addon]\" : null;\r\n\t\t\tvar addon = selector && $(selector);\r\n\t\t\tif (!addon) return null;\r\n\t\t\tvar id = Number(addon.getAttribute(\"data-variant-id\"));\r\n\t\t\tvar cents = Number(addon.getAttribute(\"data-price-cents\"));\r\n\t\t\tif (!Number.isSafeInteger(id) || id <= 0 || !Number.isSafeInteger(cents) || cents < 0) return null;\r\n\t\t\treturn { id: id, priceCents: cents, element: addon, checkbox: addon.querySelector('input[type=\"checkbox\"]') };\r\n\t\t}\r\n\t\tfunction updatePaintAddon(kitEntry) {\r\n\t\t\tvar accessory = paintAddonFor(kitEntry);\r\n\t\t\t$$(\"[data-tuf-trigger-addon], [data-tuf-spray-gun-addon]\").forEach(function (addon) {\r\n\t\t\t\tvar checkbox = addon.querySelector('input[type=\"checkbox\"]');\r\n\t\t\t\tvar eligible = !!accessory && accessory.element === addon;\r\n\t\t\t\taddon.hidden = !eligible;\r\n\t\t\t\tif (!checkbox) return;\r\n\t\t\t\tcheckbox.disabled = !eligible;\r\n\t\t\t\tif (!eligible) checkbox.checked = false;\r\n\t\t\t});\r\n\t\t\tvar total = $(\"[data-tuf-total]\");\r\n\t\t\tvar basePrice = Number(String(kitEntry && kitEntry.price || 0).replace(/,/g, \"\"));\r\n\t\t\tif (total && Number.isFinite(basePrice)) {\r\n\t\t\t\ttotal.textContent = money(basePrice + (accessory && accessory.checkbox && accessory.checkbox.checked ? accessory.priceCents / 100 : 0));\r\n\t\t\t}\r\n\t\t}\r\n\t\t$$(\"[data-tuf-trigger-check], [data-tuf-spray-gun-check]\").forEach(function (checkbox) {\r\n\t\t\tcheckbox.addEventListener(\"change\", function () { updatePaintAddon(currentEntry()); });\r\n\t\t});\r\n\t\tfunction addToCart() {\r\n\t\t\tvar staleEntry = exactSelectedEntry(true);\r\n\t\t\tif (staleEntry && !entryIsAvailable(staleEntry)) {\r\n\t\t\t\tupdateSelectedVariantDebug(staleEntry);\r\n\t\t\t\tsetCartNotice(\r\n\t\t\t\t\t\"This selected kit is currently sold out. Please choose another format or package.\",\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t);\r\n\t\t\t\tsetAtcLoading(false);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (!stepValid()) {\r\n\t\t\t\tif (state.colorCode && state.format && state.tier && !currentEntry()) {\r\n\t\t\t\t\tupdateSelectedVariantDebug(staleEntry);\r\n\t\t\t\t\tsetCartNotice(\r\n\t\t\t\t\t\t\"This selected kit is currently sold out. Please choose another format or package.\",\r\n\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tsetAtcLoading(false);\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tvar kitEntry = currentEntry();\r\n\t\t\tif (!kitEntry || !entryIsAvailable(kitEntry)) {\r\n\t\t\t\tupdateSelectedVariantDebug(kitEntry || staleEntry);\r\n\t\t\t\tsetCartNotice(\r\n\t\t\t\t\t\"This selected kit is currently sold out. Please choose another format or package.\",\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t);\r\n\t\t\t\tsetAtcLoading(false);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (state.matchByVin && !isMatchByVinEntry(kitEntry)) {\r\n\t\t\t\tsetCartNotice(\r\n\t\t\t\t\t\"This touch-up kit must be matched by VIN, but the Match by VIN variant is missing. Please contact support before placing this order.\",\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tsetAtcLoading(true);\r\n\t\t\tsyncToPdp(function () {\r\n\t\t\t\tvar form =\r\n\t\t\t\t\tdocument.getElementById(\"product-form\") ||\r\n\t\t\t\t\tdocument.querySelector('form[action*=\"/cart/add\"]');\r\n\t\t\t\tif (form) attachVinProperty(form);\r\n\t\t\t\tvar variantId =\r\n\t\t\t\t\tnumericVariantId(kitEntry.id) || readResolvedKitVariantId(form);\r\n\t\t\t\tupdateSelectedVariantDebug(kitEntry, variantId || kitEntry.id);\r\n\t\t\t\tif (!variantId) {\r\n\t\t\t\t\tsetCartNotice(\r\n\t\t\t\t\t\t\"We couldn't add this selection. Please review your choices and try again.\",\r\n\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tsetAtcLoading(false);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\twriteFormVariantId(form, variantId);\r\n\t\t\t\tvar quantity = 1;\r\n\t\t\t\tif (form) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tquantity = parseInt(new FormData(form).get(\"quantity\"), 10) || 1;\r\n\t\t\t\t\t} catch (e) {}\r\n\t\t\t\t}\r\n\t\t\t\tvar paintItem = {\r\n\t\t\t\t\tid: Number(variantId),\r\n\t\t\t\t\tquantity: quantity,\r\n\t\t\t\t\tproperties: collectCartProperties(form, kitEntry),\r\n\t\t\t\t};\r\n\t\t\t\tvar accessoryAddon = paintAddonFor(kitEntry);\r\n\t\t\t\tvar cartPayload = paintItem;\r\n\t\t\t\tif (accessoryAddon && accessoryAddon.checkbox && accessoryAddon.checkbox.checked) {\r\n\t\t\t\t\tcartPayload = { items: [paintItem, { id: accessoryAddon.id, quantity: 1 }] };\r\n\t\t\t\t}\r\n\t\t\t\tfetch(\"/cart/add.js\", {\r\n\t\t\t\t\tmethod: \"POST\",\r\n\t\t\t\t\theaders: {\r\n\t\t\t\t\t\t\"Content-Type\": \"application/json\",\r\n\t\t\t\t\t\t\"X-Requested-With\": \"XMLHttpRequest\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\tbody: JSON.stringify(cartPayload),\r\n\t\t\t\t})\r\n\t\t\t\t\t.then(function (response) {\r\n\t\t\t\t\t\tif (!response.ok) throw new Error(\"add failed\");\r\n\t\t\t\t\t\treturn response.json();\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.then(function () {\r\n\t\t\t\t\t\troot.setAttribute(\"data-tuf-complete\", \"true\");\r\n\t\t\t\t\t\tdocument.dispatchEvent(\r\n\t\t\t\t\t\t\tnew CustomEvent(\"partify:touchup:selection-complete\", {\r\n\t\t\t\t\t\t\t\tdetail: {\r\n\t\t\t\t\t\t\t\t\tcolorCode: state.colorCode,\r\n\t\t\t\t\t\t\t\t\tformat: state.format,\r\n\t\t\t\t\t\t\t\t\tpackageName: state.tier,\r\n\t\t\t\t\t\t\t\t\tvariantId: variantId,\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\twindow.location.href = \"/cart\";\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function () {\r\n\t\t\t\t\t\tsetCartNotice(\r\n\t\t\t\t\t\t\t\"We couldn't add this selection. Please try again.\",\r\n\t\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tsetAtcLoading(false);\r\n\t\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction setColor(code) {\r\n\t\t\tif (!String(code || \"\").trim()) {\r\n\t\t\t\tstate.colorCode = null;\r\n\t\t\t\tstate.colorSource = \"\";\r\n\t\t\t\tstate.format = null;\r\n\t\t\t\tstate.tier = null;\r\n\t\t\t\trender();\r\n\t\t\t\trefreshNav();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\tif (isTwoToneChoiceRequired()) {\r\n\t\t\t\tsetDecodeMsg(TWO_TONE_CHOICE_MESSAGE);\r\n\t\t\t\trefreshNav();\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tif (!knownCode(code) || !hasVisibleKitEntries(code)) return false;\r\n\t\t\tif (isTwoTonePaintModeActive()) {\r\n\t\t\t\tclearResolvedTouchupSelection();\r\n\t\t\t}\r\n\t\t\tstate.matchByVin = false;\r\n\t\t\tstate.colorCode = mapKey(code) || String(code).toUpperCase();\r\n\t\t\tstate.colorSource = \"manual\";\r\n\t\t\tstate.format = null;\r\n\t\t\tstate.tier = null;\r\n\t\t\tincludeSteps([\"format\", \"kit\", \"review\"]);\r\n\t\t\trender();\r\n\t\t\trefreshNav();\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tfunction setColorPath(path) {\r\n\t\t\tsetDecodeMsg(\"\");\r\n\t\t\tif (isTwoToneChoiceRequired()) {\r\n\t\t\t\tsetDecodeMsg(TWO_TONE_CHOICE_MESSAGE);\r\n\t\t\t\tsyncTwoToneChoiceUi();\r\n\t\t\t\trefreshNav();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif ((manualColorOnly || isTwoTonePaintModeActive()) && path !== \"code\")\r\n\t\t\t\tpath = \"code\";\r\n\t\t\tif (manualColorOnly) {\r\n\t\t\t\tstate.matchByVin = false;\r\n\t\t\t\tstate.vin = \"\";\r\n\t\t\t\tstate.plate = \"\";\r\n\t\t\t\tstate.stateCode = \"\";\r\n\t\t\t}\r\n\t\t\tif (isTwoTonePaintModeActive())\r\n\t\t\t\tsetDecodeMsg(TWO_TONE_MANUAL_COLOR_MESSAGE);\r\n\t\t\tstate.colorPath = path;\r\n\t\t\trenderColorPreview();\r\n\t\t\t$$(\"[data-tuf-path]\").forEach(function (b) {\r\n\t\t\t\tb.classList.toggle(\"tuf-sel\", b.getAttribute(\"data-tuf-path\") === path);\r\n\t\t\t});\r\n\t\t\t$(\"[data-tuf-vin-field]\") &&\r\n\t\t\t\t$(\"[data-tuf-vin-field]\").classList.toggle(\r\n\t\t\t\t\t\"tuf-hidden\",\r\n\t\t\t\t\tpath !== \"vin\",\r\n\t\t\t\t);\r\n\t\t\t$(\"[data-tuf-plate-field]\") &&\r\n\t\t\t\t$(\"[data-tuf-plate-field]\").classList.toggle(\r\n\t\t\t\t\t\"tuf-hidden\",\r\n\t\t\t\t\tpath !== \"plate\",\r\n\t\t\t\t);\r\n\t\t\t$(\"[data-tuf-code-field]\") &&\r\n\t\t\t\t$(\"[data-tuf-code-field]\").classList.toggle(\r\n\t\t\t\t\t\"tuf-hidden\",\r\n\t\t\t\t\tpath !== \"code\",\r\n\t\t\t\t);\r\n\t\t\trefreshNav();\r\n\t\t}\r\n\t\tfunction setDecodeMsg(text) {\r\n\t\t\t$$(\"[data-tuf-decode-msg]\").forEach(function (el) {\r\n\t\t\t\tel.textContent = text || \"\";\r\n\t\t\t\tel.classList.toggle(\"tuf-hidden\", !text);\r\n\t\t\t});\r\n\t\t}\r\n\t\tfunction decodedCode(raw) {\r\n\t\t\treturn cleanPaintCode(raw, getVehicle() || {});\r\n\t\t}\r\n\t\tfunction decodeViaBackend(kind) {\r\n\t\t\tif (manualColorOnly) {\r\n\t\t\t\tsetDecodeMsg(\"Select your paint code manually to continue.\");\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tvar field =\r\n\t\t\t\tkind === \"plate\"\r\n\t\t\t\t\t? $(\"[data-tuf-plate-field]\")\r\n\t\t\t\t\t: $(\"[data-tuf-vin-field]\");\r\n\t\t\t// The inline decode button was removed; the footer Continue button drives the decode,\r\n\t\t\t// so use it as the loading indicator.\r\n\t\t\tvar btn =\r\n\t\t\t\t(field && $(\"[data-tuf-decode]\", field)) ||\r\n\t\t\t\t$(\"[data-tuf-decode]\") ||\r\n\t\t\t\tnextBtn;\r\n\t\t\tvar label = btn ? btn.textContent : \"\";\r\n\t\t\tif (btn) {\r\n\t\t\t\tbtn.disabled = true;\r\n\t\t\t\tbtn.textContent = kind === \"plate\" ? \"Looking up...\" : \"Decoding...\";\r\n\t\t\t}\r\n\t\t\tsetDecodeMsg(\"\");\r\n\t\t\tfunction done() {\r\n\t\t\t\tif (btn) {\r\n\t\t\t\t\tbtn.disabled = false;\r\n\t\t\t\t\tbtn.textContent = label;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tfunction fail(msg) {\r\n\t\t\t\tdone();\r\n\t\t\t\tsetDecodeMsg(msg);\r\n\t\t\t}\r\n\t\t\tfunction fallbackToMatchByVin(vin, message) {\r\n\t\t\t\tvin = String(vin || activeVinString())\r\n\t\t\t\t\t.trim()\r\n\t\t\t\t\t.toUpperCase();\r\n\t\t\t\tif (vin.length !== 17) return Promise.resolve(false);\r\n\t\t\t\tstate.vin = vin;\r\n\t\t\t\treturn ensureKitProducts().then(function () {\r\n\t\t\t\t\tif (!enterMatchByVin()) return false;\r\n\t\t\t\t\tstate.colorSource = kind === \"plate\" ? \"license plate\" : \"VIN\";\r\n\t\t\t\t\tstate.format = null;\r\n\t\t\t\t\tstate.tier = null;\r\n\t\t\t\t\tsetDecodeMsg(message || \"\");\r\n\t\t\t\t\tgoToStep(\"format\");\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tvar decodedVin = \"\";\r\n\t\t\t// Reuse the exact garage decode path (global-library.js handleVinDecode, location 1):\r\n\t\t\t// it decodes via the shared service and writes the factory paintCode into\r\n\t\t\t// searchTerms[0], which we read back the same way the garage does.\r\n\t\t\tPromise.resolve()\r\n\t\t\t\t.then(function () {\r\n\t\t\t\t\tif (kind === \"plate\") {\r\n\t\t\t\t\t\tvar st = state.stateCode || \"\",\r\n\t\t\t\t\t\t\tpl = state.plate || \"\";\r\n\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t!st ||\r\n\t\t\t\t\t\t\tpl.length < 2 ||\r\n\t\t\t\t\t\t\ttypeof window.fetchBumpersLicenseToVin !== \"function\"\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\treturn Promise.resolve(\r\n\t\t\t\t\t\t\twindow.fetchBumpersLicenseToVin(st, pl),\r\n\t\t\t\t\t\t).then(function (data) {\r\n\t\t\t\t\t\t\tif (!data || !data.vin) return false;\r\n\t\t\t\t\t\t\tdecodedVin = String(data.vin || \"\")\r\n\t\t\t\t\t\t\t\t.trim()\r\n\t\t\t\t\t\t\t\t.toUpperCase();\r\n\t\t\t\t\t\t\tstate.vin = decodedVin;\r\n\t\t\t\t\t\t\tif (typeof window.handleVinDecode !== \"function\") return false;\r\n\t\t\t\t\t\t\treturn window.handleVinDecode(\r\n\t\t\t\t\t\t\t\tdecodedVin,\r\n\t\t\t\t\t\t\t\tst,\r\n\t\t\t\t\t\t\t\tpl,\r\n\t\t\t\t\t\t\t\t1,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t\t\"\",\r\n\t\t\t\t\t\t\t\t\"\",\r\n\t\t\t\t\t\t\t\t\"\",\r\n\t\t\t\t\t\t\t\t\"\",\r\n\t\t\t\t\t\t\t\t\"\",\r\n\t\t\t\t\t\t\t\t\"\",\r\n\t\t\t\t\t\t\t\t\"\",\r\n\t\t\t\t\t\t\t\t\"\",\r\n\t\t\t\t\t\t\t\t\"\",\r\n\t\t\t\t\t\t\t\t\"\",\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar vin = String(state.vin || \"\")\r\n\t\t\t\t\t\t.trim()\r\n\t\t\t\t\t\t.toUpperCase();\r\n\t\t\t\t\tif (vin.length !== 17) return false;\r\n\t\t\t\t\tdecodedVin = vin;\r\n\t\t\t\t\tif (typeof window.handleVinDecode !== \"function\") return false;\r\n\t\t\t\t\treturn window.handleVinDecode(\r\n\t\t\t\t\t\tvin,\r\n\t\t\t\t\t\t\"\",\r\n\t\t\t\t\t\t\"\",\r\n\t\t\t\t\t\t1,\r\n\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\"\",\r\n\t\t\t\t\t\t\"\",\r\n\t\t\t\t\t\t\"\",\r\n\t\t\t\t\t\t\"\",\r\n\t\t\t\t\t\t\"\",\r\n\t\t\t\t\t\t\"\",\r\n\t\t\t\t\t\t\"\",\r\n\t\t\t\t\t\t\"\",\r\n\t\t\t\t\t\t\"\",\r\n\t\t\t\t\t\t\"\",\r\n\t\t\t\t\t);\r\n\t\t\t\t})\r\n\t\t\t\t.then(function (result) {\r\n\t\t\t\t\tif (!result) {\r\n\t\t\t\t\t\treturn fallbackToMatchByVin(\r\n\t\t\t\t\t\t\tdecodedVin,\r\n\t\t\t\t\t\t\t\"Live paint decode is unavailable, so we will match this paint by VIN.\",\r\n\t\t\t\t\t\t).then(function (ok) {\r\n\t\t\t\t\t\t\tdone();\r\n\t\t\t\t\t\t\tif (!ok)\r\n\t\t\t\t\t\t\t\tfail(\r\n\t\t\t\t\t\t\t\t\tkind === \"plate\"\r\n\t\t\t\t\t\t\t\t\t\t? \"We couldn't find a VIN from that plate. Try your VIN.\"\r\n\t\t\t\t\t\t\t\t\t\t: \"Enter a valid VIN to match paint by VIN.\",\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tstate.vehicle = getVehicle();\r\n\t\t\t\t\trenderVehChip();\r\n\t\t\t\t\tvar code =\r\n\t\t\t\t\t\tstoredPaintCode() ||\r\n\t\t\t\t\t\tdecodedCode((getVehicle() || {}).troublesome_format);\r\n\t\t\t\t\tif (code && knownCode(code) && hasKitEntries(code)) {\r\n\t\t\t\t\t\tdone();\r\n\t\t\t\t\t\tstate.colorCode = mapKey(code) || code;\r\n\t\t\t\t\t\tstate.colorSource = kind === \"plate\" ? \"license plate\" : \"VIN\";\r\n\t\t\t\t\t\tstate.format = null;\r\n\t\t\t\t\t\tstate.tier = null;\r\n\t\t\t\t\t\tgoToStep(\"format\");\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn fallbackToMatchByVin(\r\n\t\t\t\t\t\t\tactiveVinString(),\r\n\t\t\t\t\t\t\tcode\r\n\t\t\t\t\t\t\t\t? \"We found your VIN, so we will match this paint by VIN.\"\r\n\t\t\t\t\t\t\t\t: \"We could not read a live paint code, so we will match this paint by VIN.\",\r\n\t\t\t\t\t\t).then(function (ok) {\r\n\t\t\t\t\t\t\tdone();\r\n\t\t\t\t\t\t\tif (!ok) {\r\n\t\t\t\t\t\t\t\tsetColorPath(\"code\");\r\n\t\t\t\t\t\t\t\trenderColorDropdown();\r\n\t\t\t\t\t\t\t\tsetDecodeMsg(\r\n\t\t\t\t\t\t\t\t\tcode\r\n\t\t\t\t\t\t\t\t\t\t? \"We matched your vehicle, but don't stock a kit for that exact color yet. Pick the closest match below.\"\r\n\t\t\t\t\t\t\t\t\t\t: \"We matched your vehicle, but couldn't read an exact paint code. Pick your color below.\",\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.catch(function () {\r\n\t\t\t\t\tfallbackToMatchByVin(\r\n\t\t\t\t\t\tdecodedVin || activeVinString(),\r\n\t\t\t\t\t\t\"Live paint decode is unavailable, so we will match this paint by VIN.\",\r\n\t\t\t\t\t).then(function (ok) {\r\n\t\t\t\t\t\tdone();\r\n\t\t\t\t\t\tif (!ok)\r\n\t\t\t\t\t\t\tfail(\"Decode failed. Enter a valid VIN to match paint by VIN.\");\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\t// Match-by-VIN orders (\".VIN\" vehicles) carry the VIN on the line item so the\r\n\t\t// correct factory color is matched at fulfillment, exactly like the PDP option.\r\n\t\tfunction attachVinProperty(form) {\r\n\t\t\tvar vin = activeVinString();\r\n\t\t\tif (!form || vin.length !== 17) return;\r\n\t\t\tvar input = form.querySelector('input[name=\"properties[VIN]\"]');\r\n\t\t\tif (!input) {\r\n\t\t\t\tinput = document.createElement(\"input\");\r\n\t\t\t\tinput.type = \"hidden\";\r\n\t\t\t\tinput.name = \"properties[VIN]\";\r\n\t\t\t\tform.appendChild(input);\r\n\t\t\t}\r\n\t\t\tinput.value = vin;\r\n\t\t}\r\n\r\n\t\tfunction readParams() {\r\n\t\t\tvar p = new URLSearchParams(location.search);\r\n\t\t\trawParams.code = p.get(\"code\") || \"\";\r\n\t\t\trawParams.format = p.get(\"format\") || \"\";\r\n\t\t\trawParams.damage = p.get(\"damage\") || \"\";\r\n\t\t\trawParams.package = p.get(\"package\") || p.get(\"tier\") || \"\";\r\n\t\t\tif (rawParams.code) {\r\n\t\t\t\tstate.colorCode = rawParams.code.trim().toUpperCase();\r\n\t\t\t\tstate.colorSource = \"link\";\r\n\t\t\t}\r\n\t\t\tif (rawParams.format) state.format = rawParams.format;\r\n\t\t\tif (rawParams.damage)\r\n\t\t\t\tstate.damage = normalizeKey(rawParams.damage) || \"scratches\";\r\n\t\t\tif (rawParams.package) state.tier = rawParams.package;\r\n\t\t}\r\n\t\tfunction normalizeSelections() {\r\n\t\t\tif (manualColorOnly && state.matchByVin) {\r\n\t\t\t\tstate.matchByVin = false;\r\n\t\t\t\tstate.colorCode = null;\r\n\t\t\t\tstate.colorSource = \"\";\r\n\t\t\t}\r\n\t\t\tif (state.matchByVin) {\r\n\t\t\t\tstate.colorCode = matchByVinCode();\r\n\t\t\t\tif (!state.colorCode) {\r\n\t\t\t\t\tstate.format = null;\r\n\t\t\t\t\tstate.tier = null;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (state.colorCode && knownCode(state.colorCode))\r\n\t\t\t\tstate.colorCode = mapKey(state.colorCode);\r\n\t\t\tif (\r\n\t\t\t\t!state.colorCode ||\r\n\t\t\t\t!knownCode(state.colorCode) ||\r\n\t\t\t\t!hasVisibleKitEntries(state.colorCode)\r\n\t\t\t) {\r\n\t\t\t\tstate.format = null;\r\n\t\t\t\tstate.tier = null;\r\n\t\t\t\tstate.colorSource = \"\";\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tvar pkgs = orderedUnique(\r\n\t\t\t\teligibleEntriesFor(state.colorCode).map(function (e) {\r\n\t\t\t\t\treturn e.packageName;\r\n\t\t\t\t}),\r\n\t\t\t\tpackageOrder(),\r\n\t\t\t);\r\n\t\t\tvar fmts = formatsFor(state.colorCode);\r\n\t\t\tif (state.format)\r\n\t\t\t\tstate.format = canonicalFrom(fmts, state.format) || null;\r\n\t\t\tif (state.tier)\r\n\t\t\t\tstate.tier = canonicalFrom(pkgs, state.tier) || state.tier;\r\n\t\t\tif (\r\n\t\t\t\t(!state.tier || pkgs.indexOf(state.tier) === -1) &&\r\n\t\t\t\trawParams.damage\r\n\t\t\t) {\r\n\t\t\t\tstate.tier = recommendedPackage(pkgs) || state.tier;\r\n\t\t\t}\r\n\t\t\tif (\r\n\t\t\t\tstate.tier &&\r\n\t\t\t\tstate.format &&\r\n\t\t\t\t!entry(state.colorCode, state.format, state.tier)\r\n\t\t\t) {\r\n\t\t\t\tstate.tier = null;\r\n\t\t\t}\r\n\t\t\tif (state.format && !state.tier) {\r\n\t\t\t\tstate.tier = defaultPackageForFormat(state.format);\r\n\t\t\t}\r\n\t\t\tif (state.tier && !state.format) {\r\n\t\t\t\tvar firstForTier = eligibleEntriesFor(state.colorCode).find(\r\n\t\t\t\t\tfunction (e) {\r\n\t\t\t\t\t\treturn e.packageName === state.tier;\r\n\t\t\t\t\t},\r\n\t\t\t\t);\r\n\t\t\t\tif (firstForTier) state.format = firstForTier.size || state.format;\r\n\t\t\t}\r\n\t\t}\r\n\t\tfunction buildSteps() {\r\n\t\t\tstate.vehicle = state.vehicle || getVehicle();\r\n\t\t\tconst twoToneMode = isTwoTonePaintModeActive();\r\n\t\t\tconst twoToneChoiceRequired = isTwoToneChoiceRequired();\r\n\t\t\tif (manualColorOnly) {\r\n\t\t\t\tstate.matchByVin = false;\r\n\t\t\t\tstate.colorPath = \"code\";\r\n\t\t\t}\r\n\t\t\tif (twoToneMode) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tstate.matchByVin ||\r\n\t\t\t\t\tisMatchByVinCode(state.colorCode) ||\r\n\t\t\t\t\t(state.colorCode && state.colorSource !== \"manual\")\r\n\t\t\t\t) {\r\n\t\t\t\t\tinvalidateTouchupSelectionForTwoTone();\r\n\t\t\t\t}\r\n\t\t\t\tstate.colorPath = \"code\";\r\n\t\t\t\tstate.matchByVin = false;\r\n\t\t\t} else if (!manualColorOnly && state.matchByVin && !vinOnlyVehicle()) {\r\n\t\t\t\tstate.matchByVin = false;\r\n\t\t\t\tstate.colorCode = null;\r\n\t\t\t\tstate.colorSource = \"\";\r\n\t\t\t}\r\n\t\t\t// Auto-correct in place: resolve paint from the saved vehicle regardless of the\r\n\t\t\t// page's brand. Stale selections from a previous vehicle are cleared by\r\n\t\t\t// onVehicleChanged() before this runs, so a garage change re-resolves cleanly.\r\n\t\t\tif (\r\n\t\t\t\t!manualColorOnly &&\r\n\t\t\t\t!twoToneMode &&\r\n\t\t\t\t!twoToneChoiceRequired &&\r\n\t\t\t\t!state.colorCode\r\n\t\t\t) {\r\n\t\t\t\tconst storedMatch = storedPaintMatch();\r\n\t\t\t\tconst sc = storedMatch.code;\r\n\t\t\t\tif (sc && knownCode(sc) && hasKitEntries(sc)) {\r\n\t\t\t\t\tstate.colorCode = mapKey(sc);\r\n\t\t\t\t\tstate.colorSource = storedMatch.source || \"saved vehicle\";\r\n\t\t\t\t} else if (\r\n\t\t\t\t\tsc &&\r\n\t\t\t\t\t(storedMatch.source === \"VIN\" ||\r\n\t\t\t\t\t\tstoredMatch.source === \"license plate\") &&\r\n\t\t\t\t\tString((getVehicle() || {}).vin || \"\")\r\n\t\t\t\t\t\t.trim()\r\n\t\t\t\t\t\t.toUpperCase().length === 17 &&\r\n\t\t\t\t\tenterMatchByVin()\r\n\t\t\t\t) {\r\n\t\t\t\t\tstate.colorSource = storedMatch.source;\r\n\t\t\t\t} else if (vinOnlyVehicle()) enterMatchByVin();\r\n\t\t\t}\r\n\t\t\tif (state.colorCode && !state.colorSource) {\r\n\t\t\t\tconst persistedMatch = storedPaintMatch();\r\n\t\t\t\tif (\r\n\t\t\t\t\tpersistedMatch.code &&\r\n\t\t\t\t\tmapKey(persistedMatch.code) === state.colorCode\r\n\t\t\t\t) {\r\n\t\t\t\t\tstate.colorSource = persistedMatch.source || \"saved vehicle\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tnormalizeSelections();\r\n\t\t\tsteps = ALL_STEPS.filter(function (s) {\r\n\t\t\t\tif (\r\n\t\t\t\t\ts === \"vehicle\" &&\r\n\t\t\t\t\t(state.vehicle ||\r\n\t\t\t\t\t\t(state.colorCode &&\r\n\t\t\t\t\t\t\tknownCode(state.colorCode) &&\r\n\t\t\t\t\t\t\thasVisibleKitEntries(state.colorCode)))\r\n\t\t\t\t)\r\n\t\t\t\t\treturn false;\r\n\t\t\t\tif (\r\n\t\t\t\t\ts === \"color\" &&\r\n\t\t\t\t\t!twoToneMode &&\r\n\t\t\t\t\t!twoToneChoiceRequired &&\r\n\t\t\t\t\tstate.colorCode &&\r\n\t\t\t\t\tknownCode(state.colorCode) &&\r\n\t\t\t\t\thasVisibleKitEntries(state.colorCode)\r\n\t\t\t\t)\r\n\t\t\t\t\treturn false;\r\n\t\t\t\tif (s === \"format\" && state.colorCode && state.format) return false;\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t\tif (!steps.length) steps = [\"review\"];\r\n\t\t\tidx = 0;\r\n\t\t\tmaxReached = 0;\r\n\t\t}\r\n\r\n\t\tfunction openModal() {\r\n\t\t\tif (!overlay) return;\r\n\t\t\tstate.vehicle = state.vehicle || getVehicle();\r\n\t\t\tloadTwoToneRuleForVehicle(state.vehicle).then(function () {\r\n\t\t\t\tsyncTwoToneChoiceUi();\r\n\t\t\t\tsyncTwoTonePaintMode(false);\r\n\t\t\t\tbuildSteps();\r\n\t\t\t\toverlay.classList.add(\"tuf-open\");\r\n\t\t\t\tdocument.body.style.overflow = \"hidden\";\r\n\t\t\t\trender();\r\n\t\t\t\trefreshNav();\r\n\t\t\t\tensureKitProducts().then(function () {\r\n\t\t\t\t\tnormalizeSelections();\r\n\t\t\t\t\tbuildSteps();\r\n\t\t\t\t\trender();\r\n\t\t\t\t\trefreshNav();\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\t\tfunction closeModal() {\r\n\t\t\tif (!overlay) return;\r\n\t\t\tclearGarageTouchupContext();\r\n\t\t\tcloseTwoToneGuidance(false);\r\n\t\t\toverlay.classList.remove(\"tuf-open\");\r\n\t\t\tdocument.body.style.overflow = \"\";\r\n\t\t}\r\n\r\n\t\tArray.prototype.slice\r\n\t\t\t.call(document.querySelectorAll(\"[data-tuf-open]\"))\r\n\t\t\t.forEach(function (b) {\r\n\t\t\t\tb.onclick = function (ev) {\r\n\t\t\t\t\tev.preventDefault();\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\t!pdpPresent() &&\r\n\t\t\t\t\t\t!Object.keys(sizeMap()).length &&\r\n\t\t\t\t\t\tcfg.setProductUrl\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\twindow.location.href =\r\n\t\t\t\t\t\t\tcfg.setProductUrl +\r\n\t\t\t\t\t\t\t(cfg.setProductUrl.indexOf(\"?\") === -1 ? \"?\" : \"&\") +\r\n\t\t\t\t\t\t\t\"tuf=open\";\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\topenModal();\r\n\t\t\t\t};\r\n\t\t\t});\r\n\t\tif ($(\"[data-tuf-close]\")) $(\"[data-tuf-close]\").onclick = closeModal;\r\n\t\tif (toneGuidanceClose)\r\n\t\t\ttoneGuidanceClose.addEventListener(\"click\", function () {\r\n\t\t\t\tcloseTwoToneGuidance(true);\r\n\t\t\t});\r\n\t\tif (toneGuidance)\r\n\t\t\ttoneGuidance.addEventListener(\"click\", function (e) {\r\n\t\t\t\tif (e.target === toneGuidance) closeTwoToneGuidance(true);\r\n\t\t\t});\r\n\t\tif (overlay)\r\n\t\t\toverlay.addEventListener(\"click\", function (e) {\r\n\t\t\t\tif (e.target === overlay) closeModal();\r\n\t\t\t});\r\n\t\tdocument.addEventListener(\"keydown\", function (e) {\r\n\t\t\tif (isTwoToneGuidanceOpen()) {\r\n\t\t\t\tif (e.key === \"Escape\") {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\tcloseTwoToneGuidance(true);\r\n\t\t\t\t} else if (e.key === \"Tab\" && toneGuidanceClose) {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\ttoneGuidanceClose.focus();\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (\r\n\t\t\t\te.key === \"Escape\" &&\r\n\t\t\t\toverlay &&\r\n\t\t\t\toverlay.classList.contains(\"tuf-open\")\r\n\t\t\t)\r\n\t\t\t\tcloseModal();\r\n\t\t});\r\n\t\t// Single delegated handler for the modal's nav actions.\r\n\t\t// Format/package selection is handled directly by each card's onclick in\r\n\t\t// renderFormats()/renderKits(); next() performs its own stepValid() gating.\r\n\t\troot.addEventListener(\"click\", function (e) {\r\n\t\t\tvar action =\r\n\t\t\t\te.target && e.target.closest\r\n\t\t\t\t\t? e.target.closest(\r\n\t\t\t\t\t\t\t\"[data-tuf-next], [data-tuf-back], [data-tuf-atc], [data-tuf-open-garage]\",\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t: null;\r\n\t\t\tif (!action || !root.contains(action)) return;\r\n\t\t\te.preventDefault();\r\n\t\t\tif (action.hasAttribute(\"data-tuf-open-garage\")) openGarage();\r\n\t\t\telse if (action.hasAttribute(\"data-tuf-next\")) next();\r\n\t\t\telse if (action.hasAttribute(\"data-tuf-back\")) back();\r\n\t\t\telse if (action.hasAttribute(\"data-tuf-atc\")) addToCart();\r\n\t\t});\r\n\r\n\t\t$$(\"[data-tuf-path]\").forEach(function (b) {\r\n\t\t\tb.onclick = function () {\r\n\t\t\t\tsetColorPath(b.getAttribute(\"data-tuf-path\"));\r\n\t\t\t};\r\n\t\t});\r\n\t\tfunction handleTwoToneChoiceChanged() {\r\n\t\t\tconst active = syncTwoTonePaintMode(false);\r\n\t\t\tsyncTwoToneChoiceUi();\r\n\t\t\tif (!overlay || !overlay.classList.contains(\"tuf-open\")) return;\r\n\t\t\tbuildSteps();\r\n\t\t\trender();\r\n\t\t\trefreshNav();\r\n\t\t\tif (active) setColorPath(\"code\");\r\n\t\t}\r\n\t\tif (colorSelect)\r\n\t\t\tcolorSelect.addEventListener(\"change\", function (e) {\r\n\t\t\t\tsetColor(e.target.value);\r\n\t\t\t});\r\n\t\troot.addEventListener(\"change\", function (e) {\r\n\t\t\tif (\r\n\t\t\t\te.target &&\r\n\t\t\t\te.target.matches &&\r\n\t\t\t\te.target.matches(\"[data-tuf-tone-value]\")\r\n\t\t\t) {\r\n\t\t\t\tconst value = e.target.getAttribute(\"data-tuf-tone-value\");\r\n\t\t\t\tif (isTwoToneEligible() && (value === \"one\" || value === \"two\")) {\r\n\t\t\t\t\ttwoToneChoice = value;\r\n\t\t\t\t\tif (value === \"one\") twoToneAreaChoice = \"\";\r\n\t\t\t\t\thandleTwoToneChoiceChanged();\r\n\t\t\t\t\tif (value === \"two\") openTwoToneGuidance(e.target);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tsyncTwoToneChoiceUi();\r\n\t\t\t\t\trefreshNav();\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (\r\n\t\t\t\te.target &&\r\n\t\t\t\te.target.matches &&\r\n\t\t\t\te.target.matches(\"[data-tuf-tone-area-value]\")\r\n\t\t\t) {\r\n\t\t\t\tconst value = e.target.getAttribute(\"data-tuf-tone-area-value\");\r\n\t\t\t\tif (\r\n\t\t\t\t\tisTwoToneEligible() &&\r\n\t\t\t\t\tselectedTwoToneChoice() === \"two\" &&\r\n\t\t\t\t\t(value === \"primary\" || value === \"secondary\")\r\n\t\t\t\t) {\r\n\t\t\t\t\ttwoToneAreaChoice = value;\r\n\t\t\t\t\thandleTwoToneChoiceChanged();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tsyncTwoToneChoiceUi();\r\n\t\t\t\t\trefreshNav();\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (\r\n\t\t\t\te.target &&\r\n\t\t\t\te.target.matches &&\r\n\t\t\t\te.target.matches(\"[data-tuf-color-select]\")\r\n\t\t\t)\r\n\t\t\t\tsetColor(e.target.value);\r\n\t\t});\r\n\t\troot.addEventListener(\"input\", function (e) {\r\n\t\t\tif (\r\n\t\t\t\te.target &&\r\n\t\t\t\te.target.matches &&\r\n\t\t\t\te.target.matches(\"[data-tuf-color-select]\")\r\n\t\t\t)\r\n\t\t\t\tsetColor(e.target.value);\r\n\t\t});\r\n\t\tif (manualVinInput)\r\n\t\t\tmanualVinInput.addEventListener(\"input\", function () {\r\n\t\t\t\tmanualVinInput.value = manualVinInput.value\r\n\t\t\t\t\t.toUpperCase()\r\n\t\t\t\t\t.replace(/[^A-HJ-NPR-Z0-9]/g, \"\")\r\n\t\t\t\t\t.slice(0, 17);\r\n\t\t\t\tsyncManualVinEntry();\r\n\t\t\t\trefreshNav();\r\n\t\t\t});\r\n\t\tvar vinIn = $(\"[data-tuf-vin]\");\r\n\t\tif (vinIn)\r\n\t\t\tvinIn.addEventListener(\"input\", function (e) {\r\n\t\t\t\t// Same guard as the PDP VIN box: strip spaces/non-alphanumerics and the\r\n\t\t\t\t// letters I/O/Q (never valid in a VIN) as the user types, cap at 17.\r\n\t\t\t\tvar caret = e.target.selectionStart;\r\n\t\t\t\tvar v = e.target.value\r\n\t\t\t\t\t.replace(/\\s/g, \"\")\r\n\t\t\t\t\t.toUpperCase()\r\n\t\t\t\t\t.replace(/[^A-Z0-9]/g, \"\")\r\n\t\t\t\t\t.replace(/[IOQ]/g, \"\");\r\n\t\t\t\tif (v.length > 17) v = v.slice(0, 17);\r\n\t\t\t\tif (v !== e.target.value) {\r\n\t\t\t\t\te.target.value = v;\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tvar c = Math.min(caret, v.length);\r\n\t\t\t\t\t\te.target.setSelectionRange(c, c);\r\n\t\t\t\t\t} catch (_) {}\r\n\t\t\t\t}\r\n\t\t\t\tstate.vin = v;\r\n\t\t\t\tstate.colorCode = null;\r\n\t\t\t\tstate.colorSource = \"\";\r\n\t\t\t\trefreshNav();\r\n\t\t\t});\r\n\t\tvar plIn = $(\"[data-tuf-plate]\");\r\n\t\tif (plIn)\r\n\t\t\tplIn.addEventListener(\"input\", function (e) {\r\n\t\t\t\tstate.plate = e.target.value.trim().toUpperCase();\r\n\t\t\t\tstate.colorCode = null;\r\n\t\t\t\tstate.colorSource = \"\";\r\n\t\t\t\trefreshNav();\r\n\t\t\t});\r\n\t\tvar stIn = $(\"[data-tuf-state]\");\r\n\t\tif (stIn)\r\n\t\t\tstIn.addEventListener(\"change\", function (e) {\r\n\t\t\t\tstate.stateCode = e.target.value.trim().toUpperCase();\r\n\t\t\t\tstate.colorCode = null;\r\n\t\t\t\tstate.colorSource = \"\";\r\n\t\t\t\trefreshNav();\r\n\t\t\t});\r\n\r\n\t\t// A garage change re-resolves paint to the new vehicle. We clear the prior selection\r\n\t\t// so buildSteps() re-matches from scratch (including swapping to the new vehicle's\r\n\t\t// brand of touch-up paint), and rebuild only after the new brand's kits have loaded\r\n\t\t// so currentEntry() resolves against the correct catalog.\r\n\t\tfunction onVehicleChanged(v) {\r\n\t\t\tconst nextVehicle = v || getVehicle();\r\n\t\t\tconst sameActiveVehicle = sameVehicle(state.vehicle || nextVehicle, nextVehicle);\r\n\t\t\tconst preserveTwoToneManualChoice =\r\n\t\t\t\tsameActiveVehicle &&\r\n\t\t\t\tisTwoTonePaintModeActive() &&\r\n\t\t\t\tstate.colorSource === \"manual\" &&\r\n\t\t\t\tstate.colorCode;\r\n\t\t\tif (!sameActiveVehicle) {\r\n\t\t\t\tif (manualVinInput) manualVinInput.value = \"\";\r\n\t\t\t\ttwoToneChoice = \"\";\r\n\t\t\t\ttwoToneAreaChoice = \"\";\r\n\t\t\t\ttwoTonePaintModeApplied = false;\r\n\t\t\t\tclearResolvedTouchupSelection();\r\n\t\t\t\tresetTouchupKitState();\r\n\t\t\t}\r\n\t\t\tstate.vehicle = nextVehicle;\r\n\t\t\tloadColorDetails();\r\n\t\t\tif (!preserveTwoToneManualChoice) {\r\n\t\t\t\tstate.colorCode = null;\r\n\t\t\t\tstate.colorSource = \"\";\r\n\t\t\t\tstate.matchByVin = false;\r\n\t\t\t\tstate.format = null;\r\n\t\t\t\tstate.tier = null;\r\n\t\t\t\tif (sameActiveVehicle) clearResolvedTouchupSelection();\r\n\t\t\t}\r\n\t\t\tif (manualColorOnly) state.matchByVin = false;\r\n\t\t\trenderVehChip();\r\n\t\t\trenderVehicleStep();\r\n\t\t\tconst open = !!(overlay && overlay.classList.contains(\"tuf-open\"));\r\n\t\t\tconst rebuild = function () {\r\n\t\t\t\tconst keepTwoToneManualChoice =\r\n\t\t\t\t\tpreserveTwoToneManualChoice &&\r\n\t\t\t\t\tisTwoTonePaintModeActive() &&\r\n\t\t\t\t\ttwoToneCodeAllowed(state.colorCode);\r\n\t\t\t\tif (!isTwoToneEligible()) {\r\n\t\t\t\t\ttwoToneChoice = \"\";\r\n\t\t\t\t\ttwoToneAreaChoice = \"\";\r\n\t\t\t\t}\r\n\t\t\t\tsyncTwoTonePaintMode(!keepTwoToneManualChoice);\r\n\t\t\t\tsyncTwoToneChoiceUi();\r\n\t\t\t\tloadAllowedCodes().then(function () {\r\n\t\t\t\t\tif (steps[idx] === \"color\") renderColorDropdown();\r\n\t\t\t\t});\r\n\t\t\t\tif (open) {\r\n\t\t\t\t\tbuildSteps();\r\n\t\t\t\t\trender();\r\n\t\t\t\t\trefreshNav();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\tPromise.all([\r\n\t\t\t\tloadTwoToneRuleForVehicle(nextVehicle),\r\n\t\t\t\topen ? ensureKitProducts() : Promise.resolve(),\r\n\t\t\t]).then(rebuild);\r\n\t\t}\r\n\t\twindow.addEventListener(\"partify:vehicle:changed\", function (e) {\r\n\t\t\tonVehicleChanged((e && e.detail) || getVehicle());\r\n\t\t});\r\n\t\twindow.addEventListener(\"searchTermsUpdated\", function () {\r\n\t\t\tonVehicleChanged(getVehicle());\r\n\t\t});\r\n\r\n\t\twindow.PartifyTouchupFinderData = {\r\n\t\t\tgetColorDetails: function (vehicle) {\r\n\t\t\t\treturn fetchColorDetails(vehicle || getVehicle());\r\n\t\t\t},\r\n\t\t};\r\n\t\troot.addEventListener(\"partify:paint-preview:visibility\", function () {\r\n\t\t\tconst layout = $(\"[data-tuf-color-layout]\");\r\n\t\t\tconst preview = $(\"[data-tuf-color-preview]\");\r\n\t\t\tif (layout && preview) layout.classList.toggle(\"tuf-color-layout--preview\", !preview.hidden);\r\n\t\t});\r\n\r\n\t\treadParams();\r\n\t\tstate.vehicle = state.vehicle || getVehicle();\r\n\t\tloadTwoToneRuleForVehicle(state.vehicle).then(function () {\r\n\t\t\tsyncTwoToneChoiceUi();\r\n\t\t\tsyncTwoTonePaintMode(false);\r\n\t\t});\r\n\t\tvar p = new URLSearchParams(location.search);\r\n\t\tif (\r\n\t\t\tp.get(\"code\") ||\r\n\t\t\tp.get(\"format\") ||\r\n\t\t\tp.get(\"package\") ||\r\n\t\t\tp.get(\"tier\") ||\r\n\t\t\tp.get(\"damage\") ||\r\n\t\t\tp.get(\"tuf\") === \"open\"\r\n\t\t) {\r\n\t\t\tvar t = 0;\r\n\t\t\tvar wait = setInterval(function () {\r\n\t\t\t\tt++;\r\n\t\t\t\tif (Object.keys(sizeMap()).length || t > 25) {\r\n\t\t\t\t\tclearInterval(wait);\r\n\t\t\t\t\topenModal();\r\n\t\t\t\t}\r\n\t\t\t}, 200);\r\n\t\t}\r\n\t}\r\n\r\n\tif (document.readyState === \"loading\")\r\n\t\tdocument.addEventListener(\"DOMContentLoaded\", boot);\r\n\telse boot();\r\n})();\r\n"],
  "mappings": "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",
  "names": ["entry", "t", "page", "p", "ymm", "idx"]
}
