{
  "version": 3,
  "sources": ["/cdn/shop/t/351/assets/touch-up-finder.js?tufv=20260805e"],
  "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\t// Temporary inventory hold: keep every pen mapping/configurator in place, but\r\n\t// exclude Pen from all customer-facing format choices until this is re-enabled.\r\n\tvar PENS_TEMPORARILY_ENABLED = true;\r\n\r\n\tfunction isCustomerAvailableFormat(value) {\r\n\t\treturn (\r\n\t\t\tPENS_TEMPORARILY_ENABLED ||\r\n\t\t\tString(value || \"\")\r\n\t\t\t\t.trim()\r\n\t\t\t\t.toLowerCase() !== \"pen\"\r\n\t\t);\r\n\t}\r\n\r\n\tfunction tricoatImageKey(value) {\r\n\t\treturn String(value || \"\")\r\n\t\t\t.toLowerCase()\r\n\t\t\t.replace(/&/g, \"and\")\r\n\t\t\t.replace(/[^a-z0-9]+/g, \"\");\r\n\t}\r\n\r\n\tfunction resolveTouchupProductImage(entry, code) {\r\n\t\tif (!entry) return \"\";\r\n\t\tvar aliases = {\r\n\t\t\tbtl: \"bottle\",\r\n\t\t\taer: \"aerosol\",\r\n\t\t\thpt: \"halfpint\",\r\n\t\t\tpaint: \"paintonly\",\r\n\t\t\tpaintonlykit: \"paintonly\",\r\n\t\t\tessentialkit: \"essential\",\r\n\t\t\tpreferredkit: \"preferred\",\r\n\t\t};\r\n\t\tvar normalizedCode = String(code || \"\").trim().toUpperCase();\r\n\t\tvar tricoatCodes = (window.__partifyTricoatCodes || []).map(function (value) {\r\n\t\t\treturn String(value || \"\").trim().toUpperCase();\r\n\t\t});\r\n\t\tvar knownTricoat = typeof window.__partifyTricoatStatus === \"function\"\r\n\t\t\t? window.__partifyTricoatStatus(normalizedCode)\r\n\t\t\t: null;\r\n\t\tvar formatKey = tricoatImageKey(entry.size);\n\t\tvar tierKey = tricoatImageKey(entry.packageName);\r\n\t\tvar format = aliases[formatKey] || formatKey;\r\n\t\tvar tier = aliases[tierKey] || tierKey;\n\t\tvar professionalPurchase = document.querySelector('[data-purchase-format=\"professional\"]');\n\t\tvar sizeHandle = {halfpint: \"half-pint\", pint: \"pint\", quart: \"quart\", gallon: \"gallon\"}[format];\n\t\tvar systemImage = professionalPurchase && sizeHandle && professionalPurchase.getAttribute(\"data-prof-\" + sizeHandle + \"-\" + tier + \"-image\");\n\t\tvar catalogImage = ((window.__partifyTouchupCatalogImages || {})[format] || {})[tier];\n\t\tif (catalogImage) return catalogImage;\n\t\tvar standardImage = systemImage || entry.productImage || \"\";\n\t\tif (knownTricoat !== true && tricoatCodes.indexOf(normalizedCode) === -1) return standardImage;\n\t\tvar formatImages = (window.__partifyTricoatImages || {})[format] || {};\n\t\treturn formatImages[tier] || standardImage;\n\t}\r\n\r\n\twindow.__partifyResolveTouchupProductImage = resolveTouchupProductImage;\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\tconst matchPaintByVinMessage = String(cfg.matchPaintByVinMessage || \"\").trim();\r\n\t\t// Dedicated PDPs keep the finder within their paint format. Professional\n\t\t// paint retains a size decision within its four spray-gun formats.\n\t\tconst fixedFormat = String(cfg.fixedFormat || \"\").replace(/\\s+/g, \" \").trim();\n\t\tconst professionalPdp = fixedFormat === \"Professional\";\n\t\tconst professionalFormats = [\"Half Pint\", \"Pint\", \"Quart\", \"Gallon\"];\n\t\tconst professionalPaintCodeRequiredMessage = String(cfg.professionalPaintCodeRequiredMessage || \"Sorry, we couldn't decode your paint code. Please select your paint code to continue.\");\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)) return 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] !== \"\") merged[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\tmercedes: \"mercedes-benz\",\r\n\t\t\tvw: \"volkswagen\",\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 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 excludedMakeLists() {\r\n\t\t\tconst lists = [];\r\n\t\t\tif (typeof excludedMakesGlobal !== \"undefined\" && excludedMakesGlobal)\r\n\t\t\t\tlists.push(excludedMakesGlobal);\r\n\t\t\tif (window.__gv2Config && window.__gv2Config.excludedMakes)\r\n\t\t\t\tlists.push(window.__gv2Config.excludedMakes);\r\n\t\t\tif (window.EXCLUDED_MAKES_LIST) lists.push(window.EXCLUDED_MAKES_LIST);\r\n\t\t\treturn lists;\r\n\t\t}\r\n\t\tfunction isVinDecodeExcludedMakeValue(value) {\r\n\t\t\tconst raw = String(value || \"\").trim();\r\n\t\t\tif (!raw) return false;\r\n\t\t\tif (typeof window.isVinDecodeExcludedMake === \"function\") {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tif (window.isVinDecodeExcludedMake(raw)) return true;\r\n\t\t\t\t} catch (e) {}\r\n\t\t\t}\r\n\t\t\treturn excludedMakeLists().some(function (list) {\r\n\t\t\t\treturn makeListContains(list, raw);\r\n\t\t\t});\r\n\t\t}\r\n\t\tfunction isVinDecodeExcludedVehicle(vehicle) {\r\n\t\t\tvehicle = vehicle || {};\r\n\t\t\treturn (\r\n\t\t\t\tisVinDecodeExcludedMakeValue(vehicleMakeLabel(vehicle)) ||\r\n\t\t\t\tisVinDecodeExcludedMakeValue(vehicle.ymm || vehicle.YMM || vehicle.vehicle)\r\n\t\t\t);\r\n\t\t}\r\n\t\tfunction activeVehicleVinDecodeExcluded(vehicle) {\r\n\t\t\treturn (\r\n\t\t\t\tisVinDecodeExcludedVehicle(vehicle) ||\r\n\t\t\t\tisVinDecodeExcludedVehicle(state.vehicle) ||\r\n\t\t\t\tisVinDecodeExcludedVehicle(getVehicle())\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(/[&<>\"']/g, function (ch) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\t\"&\": \"&amp;\",\r\n\t\t\t\t\t\"<\": \"&lt;\",\r\n\t\t\t\t\t\">\": \"&gt;\",\r\n\t\t\t\t\t'\"': \"&quot;\",\r\n\t\t\t\t\t\"'\": \"&#39;\"\r\n\t\t\t\t}[ch];\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)) return 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 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 professionalVinEntry(code, kitEntry) {\n\t\t\treturn !!canonicalFrom(professionalFormats, kitEntry && kitEntry.size) &&\n\t\t\t\t(isMatchByVinCode(code) || entryIsMatchByVin(kitEntry));\n\t\t}\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 vehiclePaintDataAvailable() {\r\n\t\t\tvar key = activeVehicleKey();\r\n\t\t\treturn !!key &&\r\n\t\t\t\tallowedCodesKey === key &&\r\n\t\t\t\tallowedCodesPendingKey !== key &&\r\n\t\t\t\tvehiclePaintDataVerified;\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 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 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\tString((e && e.brand) || \"\").toLowerCase() === brand ||\r\n\t\t\t\thay.indexOf(brand) !== -1 ||\r\n\t\t\t\t(brand === \"volkswagen\" && hay.indexOf(\"vw\") !== -1)\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 && e.size && e.packageName && e.isKitProduct && entryMatchesBrand(e) && !professionalVinEntry(code, e) &&\n\t\t\t\t\t(!professionalPdp || (canonicalFrom(professionalFormats, e.size) && e.available !== false))\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).filter(isCustomerAvailableFormat);\r\n\t\t}\r\n\t\tfunction fixedFormatForSelectedColor() {\n\t\t\tif (!fixedFormat || professionalPdp || !state.colorCode) return null;\n\t\t\treturn canonicalFrom(formatsFor(state.colorCode), fixedFormat);\r\n\t\t}\r\n\t\tfunction enforceFixedFormat() {\r\n\t\t\tvar lockedFormat = fixedFormatForSelectedColor();\r\n\t\t\tif (!lockedFormat) return false;\r\n\t\t\tif (state.format !== lockedFormat) {\r\n\t\t\t\tstate.format = lockedFormat;\r\n\t\t\t\tstate.tier = null;\r\n\t\t\t}\r\n\t\t\tif (!state.tier || !entry(state.colorCode, state.format, state.tier)) {\r\n\t\t\t\tstate.tier = defaultPackageForFormat(state.format);\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tfunction removeFixedFormatStep() {\r\n\t\t\tif (!fixedFormatForSelectedColor() || steps.indexOf(\"format\") === -1) return;\r\n\t\t\tvar current = steps[idx];\r\n\t\t\tsteps = steps.filter(function (step) {\r\n\t\t\t\treturn step !== \"format\";\r\n\t\t\t});\r\n\t\t\tif (current === \"format\") current = \"kit\";\r\n\t\t\tidx = Math.max(0, steps.indexOf(current));\r\n\t\t\tmaxReached = Math.min(maxReached, Math.max(0, steps.length - 1));\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 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() {\n\t\t\tif (professionalPdp) return false;\n\t\t\tif (activeVehicleVinDecodeExcluded()) return false;\r\n\t\t\tif (!vehiclePaintDataAvailable()) return false;\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) {\n\t\t\tif (professionalVinEntry(code, {size: fmt})) return null;\n\t\t\tvar es = eligibleEntriesFor(code);\n\t\t\tif (!fmt && !pkg) return null;\n\t\t\t// A professional size/system must resolve exactly; never substitute a\n\t\t\t// smaller can or another package when the selected mapping is missing.\n\t\t\tif (professionalPdp) return es.find(function (e) {\n\t\t\t\treturn e.size === fmt && e.packageName === pkg;\n\t\t\t}) || null;\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;\n\t\t\tif (colors && (state.vehicle || getVehicle())) return colors.name(colorDetails, code);\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\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\treturn (btn.textContent || \"\").trim() === String(value).trim();\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 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;\n\t\tlet colorDetailsKey = \"\";\n\t\tlet colorDetailsRequest = 0;\n\t\tvar vehiclePaintDataVerified = false;\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 AUTO_MATCH_UNAVAILABLE_MESSAGE =\r\n\t\t\t\"Automatic paint matching is not available for this vehicle yet. Please select your paint code manually.\";\r\n\t\tconst TWO_TONE_CHOICE_MESSAGE =\r\n\t\t\t\"Choose One Color or Two Colors before selecting how to find 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 how to find 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 in this kit.\";\r\n\t\tlet touchupDecodeRequestToken = 0;\n\t\tlet colorLookupPending = false;\n\t\tlet colorLookupNeedsConfirmation = false;\n\t\tlet twoTonePaintModeApplied = false;\r\n\t\tlet twoToneChoice = \"\";\r\n\t\tlet twoToneAreaChoice = \"\";\r\n\t\twindow.__TUF_VERSION = \"20261007-colors\";\n\t\troot.setAttribute(\"data-tuf-version\", \"20261007-colors\");\n\r\n\t\tfunction vehicleCollectionKey() {\r\n\t\t\tconst v = state.vehicle || getVehicle() || {};\r\n\t\t\tconst 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\tconst vehKey = handleize(label);\r\n\t\t\tconst 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) return routeKey;\r\n\t\t\treturn vehKey || routeKey || \"subaru\";\r\n\t\t}\r\n\t\tfunction vehicleMakeKey(vehicle) {\r\n\t\t\tconst v = vehicle || {};\r\n\t\t\treturn normalizeTouchupMake(v.make || v.brand || v.manufacturer || \"\");\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(/^(.+)-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\tconst vehicleMake = vehicleMakeKey(state.vehicle || getVehicle() || {});\r\n\t\t\treturn vehicleMake || routeMakeKey() || \"subaru\";\r\n\t\t}\r\n\t\tfunction activeKitLoadKey() {\r\n\t\t\treturn vehicleCollectionKey() + \"::\" + activeTouchupMakeKey();\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\", vw: \"VW\" };\r\n\t\t\treturn (\r\n\t\t\t\tup[b] ||\r\n\t\t\t\tb\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\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\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\treturn collection || product || \"\";\r\n\t\t}\r\n\t\tfunction paintCodeFromKitVariant(variant) {\r\n\t\t\tvar title = String((variant && variant.title) || \"\").trim();\r\n\t\t\tif (title && title !== \"Default Title\") return title.toUpperCase();\r\n\t\t\tvar opts = (variant && variant.selectedOptions) || [];\r\n\t\t\tvar paintOpt = opts.find(function (opt) {\r\n\t\t\t\treturn /paint|color|code/i.test(opt.name || \"\");\r\n\t\t\t});\r\n\t\t\tif (paintOpt && paintOpt.value)\r\n\t\t\t\treturn String(paintOpt.value).trim().toUpperCase();\r\n\t\t\tvar sku = String((variant && variant.sku) || \"\").trim();\r\n\t\t\tvar match = sku.match(/(?:^|_)([A-Z0-9]{2,5})(?:_|$)/i);\r\n\t\t\treturn match ? match[1].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 storefrontAccessToken() {\r\n\t\t\treturn window.shopCurrency === \"CAD\"\r\n\t\t\t\t? \"2bcf68ed45edc56c19f2f3aa226eb101\"\r\n\t\t\t\t: \"12ccfcd74b8bc4e56ce0762f51fcf438\";\r\n\t\t}\r\n\t\tfunction storefrontApiUrl() {\r\n\t\t\treturn window.shopCurrency === \"CAD\"\r\n\t\t\t\t? \"https://auto-realm.myshopify.com/api/2024-01/graphql.json\"\r\n\t\t\t\t: \"/api/2024-01/graphql.json\";\r\n\t\t}\r\n\t\tfunction applyDirectKitProducts(products, brand) {\r\n\t\t\tif (!products || !products.length) return false;\r\n\t\t\tconst previousMap = window.__touchupSizeMap;\r\n\t\t\tconst previousCount = window.__touchupKitEntryCount;\r\n\t\t\tconst previousFormats = window.__touchupFormatOrder;\r\n\t\t\tconst previousPackages = window.__touchupPackageOrder;\r\n\t\t\twindow.__touchupSizeMap = {};\r\n\t\t\twindow.__touchupKitEntryCount = 0;\r\n\t\t\twindow.__touchupFormatOrder = [];\r\n\t\t\twindow.__touchupPackageOrder = [];\r\n\t\t\tproducts.forEach(function (product) {\r\n\t\t\t\tvar meta = directProductMeta(product);\r\n\t\t\t\tvar format = meta.format;\r\n\t\t\t\tvar tier = meta.packageName;\r\n\t\t\t\tif (!format || !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: [];\r\n\t\t\t\tvariants.forEach(function (variant) {\r\n\t\t\t\t\tvar code = paintCodeFromKitVariant(variant);\r\n\t\t\t\t\tif (!code || code === \"DEFAULT TITLE\") return;\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:\r\n\t\t\t\t\t\t\tvariant.price && variant.price.amount\r\n\t\t\t\t\t\t\t\t? parseFloat(variant.price.amount).toFixed(2)\r\n\t\t\t\t\t\t\t\t: \"0.00\",\r\n\t\t\t\t\t\tcolor: \"\",\r\n\t\t\t\t\t\tsku: variant.sku || \"\",\r\n\t\t\t\t\t\tavailable: !!variant.availableForSale,\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: product.productType || \"\",\r\n\t\t\t\t\t\tproductUrl: product.handle ? \"/products/\" + product.handle : \"\",\r\n\t\t\t\t\t\tproductImage:\r\n\t\t\t\t\t\t\t(variant.image && variant.image.url) || (product.featuredImage && product.featuredImage.url) || \"\",\n\t\t\t\t\t\tbrand: brand,\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\twindow.__touchupSizeMap = previousMap;\r\n\t\t\twindow.__touchupKitEntryCount = previousCount;\r\n\t\t\twindow.__touchupFormatOrder = previousFormats;\r\n\t\t\twindow.__touchupPackageOrder = previousPackages;\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) || \"subaru\";\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};\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} image{url} selectedOptions{name value}\";\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 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\treturn postStorefront(url, token, {\r\n\t\t\t\tquery: query,\r\n\t\t\t\tvariables: { query: \"tag:kit tag:\" + brand + \" tag:touchup-paint\" },\r\n\t\t\t})\r\n\t\t\t\t.then(function (json) {\r\n\t\t\t\t\tvar products =\r\n\t\t\t\t\t\tjson && json.data && json.data.products\r\n\t\t\t\t\t\t\t? json.data.products.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);\r\n\t\t\t\t})\r\n\t\t\t\t.then(function (products) {\r\n\t\t\t\t\tvar codeCount = {};\r\n\t\t\t\t\tproducts.forEach(function (product) {\r\n\t\t\t\t\t\t((product.variants && product.variants.nodes) || []).forEach(\r\n\t\t\t\t\t\t\tfunction (variant) {\r\n\t\t\t\t\t\t\t\tvar code = paintCodeFromKitVariant(variant);\r\n\t\t\t\t\t\t\t\tif (code) codeCount[code] = 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\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\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\tcodeCount: Object.keys(codeCount).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-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(products, brand);\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\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 fetchColorDetails(vehicle) {\n\t\t\tconst colors = window.PartifyTouchupColorDetails;\n\t\t\tconst url = storefrontApiUrl();\n\t\t\treturn colors ? colors.load(vehicle, function (payload) {\n\t\t\t\treturn postStorefront(url, storefrontAccessToken(), payload);\n\t\t\t}, url) : Promise.resolve(null);\n\t\t}\n\t\tfunction loadColorDetails() {\n\t\t\tconst colors = window.PartifyTouchupColorDetails;\n\t\t\tif (!colors) return;\n\t\t\tconst vehicle = state.vehicle || getVehicle();\n\t\t\tconst key = colors.key(vehicle);\n\t\t\tif (key === colorDetailsKey) return;\n\t\t\tcolorDetailsKey = key;\n\t\t\tcolorDetails = null;\n\t\t\tconst request = ++colorDetailsRequest;\n\t\t\trenderColorPreview();\n\t\t\tif (!key) return;\n\t\t\tfetchColorDetails(vehicle).then(function (details) {\n\t\t\t\tif (request !== colorDetailsRequest || key !== colors.key(state.vehicle || getVehicle())) return;\n\t\t\t\tcolorDetails = details;\n\t\t\t\trenderColorDropdown();\n\t\t\t\trenderColorPreview();\n\t\t\t\trenderSummary();\n\t\t\t});\n\t\t}\n\t\tfunction renderColorPreview() {\n\t\t\tconst colors = window.PartifyTouchupColorDetails;\n\t\t\tconst previewCode = state.matchByVin ? storedPaintCode() : state.colorCode;\n\t\t\tif (colors) colors.renderPreview($(\"[data-tuf-color-preview]\"), colorDetails,\n\t\t\t\tpreviewCode);\n\t\t}\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\tfunction directAllowedCodesForVehicle(vehicle) {\r\n\t\t\tvehicle = vehicle || state.vehicle || getVehicle() || {};\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\tvar url = storefrontApiUrl();\r\n\t\t\tvar token = storefrontAccessToken();\r\n\t\t\tvar codes = [];\r\n\t\t\tvar fallbackValue = \"\";\r\n\t\t\tfunction fetchPage(cursor, guard) {\r\n\t\t\t\tif (guard >= 50) return Promise.resolve();\r\n\t\t\t\tvar after = cursor ? \", after: \" + JSON.stringify(cursor) : \"\";\r\n\t\t\t\tvar query =\r\n\t\t\t\t\t'{ metaobject(handle: {type: \"year_make_model_lookup\", handle: ' +\r\n\t\t\t\t\tJSON.stringify(handle) +\r\n\t\t\t\t\t'}) { pc: field(key: \"paint_codes\") { value references(first: 250' +\r\n\t\t\t\t\tafter +\r\n\t\t\t\t\t\") { pageInfo { hasNextPage endCursor } nodes { ... on Metaobject { code: field(key: \\\"paint_code\\\") { value } tricoat: field(key: \\\"tricoat\\\") { value } } } } } } }\";\n\t\t\t\treturn postStorefront(url, token, { query: query }).then(function (\r\n\t\t\t\t\tjson,\r\n\t\t\t\t) {\r\n\t\t\t\t\tvar field =\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.metaobject &&\r\n\t\t\t\t\t\tjson.data.metaobject.pc;\r\n\t\t\t\t\tif (!field) return;\r\n\t\t\t\t\tvar refs =\r\n\t\t\t\t\t\tfield.references && field.references.nodes\r\n\t\t\t\t\t\t\t? field.references.nodes\r\n\t\t\t\t\t\t\t: [];\r\n\t\t\t\t\tif (refs.length) {\r\n\t\t\t\t\t\tcodes = codes.concat(\r\n\t\t\t\t\t\t\trefs\r\n\t\t\t\t\t\t\t\t.map(function (node) {\r\n\t\t\t\t\t\t\t\t\tvar code = node && node.code ? String(node.code.value || \"\").trim().toUpperCase() : \"\";\n\t\t\t\t\t\t\t\t\tif (code && node.tricoat && String(node.tricoat.value) === \"true\") {\n\t\t\t\t\t\t\t\t\t\tvar tricoats = window.__partifyTricoatCodes = window.__partifyTricoatCodes || [];\n\t\t\t\t\t\t\t\t\t\tif (tricoats.indexOf(code) === -1) tricoats.push(code);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn code;\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);\r\n\t\t\t\t\t} else if (!cursor && field.value) {\r\n\t\t\t\t\t\tfallbackValue = field.value;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar pageInfo = field.references && field.references.pageInfo;\r\n\t\t\t\t\tif (pageInfo && pageInfo.hasNextPage && pageInfo.endCursor) {\r\n\t\t\t\t\t\treturn fetchPage(pageInfo.endCursor, guard + 1);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\treturn fetchPage(null, 0)\r\n\t\t\t\t.then(function () {\r\n\t\t\t\t\tif (!codes.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)) codes = parsed;\r\n\t\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\t\tcodes = fallbackValue.split(/[\\s,]+/);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcodes = codes\r\n\t\t\t\t\t\t.map(function (code) {\r\n\t\t\t\t\t\t\treturn String(code).trim().toUpperCase();\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\t.filter(Boolean);\r\n\t\t\t\t\tdirectAllowedCodeCache[handle] = codes;\r\n\t\t\t\t\treturn codes;\r\n\t\t\t\t})\r\n\t\t\t\t.catch(function () {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t});\r\n\t\t}\r\n\t\tfunction manualAllowedCodes(codes) {\r\n\t\t\tif (!Array.isArray(codes) || !codes.length) return null;\r\n\t\t\tvar manual = codes\r\n\t\t\t\t.map(function (c) {\r\n\t\t\t\t\treturn String(c).trim().toUpperCase();\r\n\t\t\t\t})\r\n\t\t\t\t.filter(function (code) {\r\n\t\t\t\t\treturn code && !isMatchByVinCode(code);\r\n\t\t\t\t});\r\n\t\t\treturn manual.length ? manual : null;\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();\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\tvehiclePaintDataVerified = false;\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\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\treturn 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\tvehiclePaintDataVerified = Array.isArray(codes) && codes.length > 0;\r\n\t\t\t\t\tallowedCodes = manualAllowedCodes(codes);\r\n\t\t\t\t\tallowedCodesKey = key;\r\n\t\t\t\t\tif (allowedCodesPendingKey === key) allowedCodesPendingKey = \"\";\r\n\t\t\t\t\treturn allowedCodes;\r\n\t\t\t\t})\r\n\t\t\t\t.catch(function () {\r\n\t\t\t\t\tallowedCodes = null;\r\n\t\t\t\t\tvehiclePaintDataVerified = false;\r\n\t\t\t\t\tif (allowedCodesPendingKey === key) allowedCodesPendingKey = \"\";\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t});\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 && !hasKitEntries(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\tconst key = vehicleCollectionKey();\r\n\t\t\tconst makeKey = activeTouchupMakeKey();\r\n\t\t\tconst cacheKey = key + \"::\" + makeKey;\r\n\t\t\tif (kitLoadPromise && kitLoadKey === cacheKey) return kitLoadPromise;\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\tif (document.querySelector(\"[data-touchup-landing]\") || tries >= 20) {\r\n\t\t\t\t\tkitLoadKey = cacheKey;\r\n\t\t\t\t\tkitLoadPromise = loadKitProductsDirect(key, makeKey).then(\r\n\t\t\t\t\t\tafterKitLoad,\r\n\t\t\t\t\t);\r\n\t\t\t\t\treturn kitLoadPromise;\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\tkitLoadKey = cacheKey;\r\n\t\t\tkitLoadPromise = window\r\n\t\t\t\t.__partifyTouchupLoadKitProductsForCollection(key, makeKey)\r\n\t\t\t\t.then(function (loaded) {\r\n\t\t\t\t\tif (loaded && eligibleCodeCount() >= 240)\r\n\t\t\t\t\t\treturn loadKitProductsDirect(key, makeKey).then(afterKitLoad);\r\n\t\t\t\t\tif (loaded && eligibleCodeCount()) return afterKitLoad(loaded);\r\n\t\t\t\t\tif (hasKitEntries(state.colorCode)) return afterKitLoad(loaded);\r\n\t\t\t\t\treturn loadKitProductsDirect(key, makeKey).then(afterKitLoad);\r\n\t\t\t\t})\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\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)\r\n\t\t\t\treturn \"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() {\n\t\t\ttry {\n\t\t\t\treturn storedPaintMatch().code;\n\t\t\t} catch (e) {\n\t\t\t\treturn \"\";\n\t\t\t}\n\t\t}\n\t\tfunction resolvePaintReference(vehicle) {\n\t\t\tvar requestedVehicle = vehicle || getVehicle();\n\t\t\tvar resolver = window.PartifyVehiclePaintReferenceResolver;\n\t\t\tif (!resolver || typeof resolver.resolve !== \"function\") {\n\t\t\t\treturn Promise.resolve(requestedVehicle);\n\t\t\t}\n\t\t\treturn Promise.resolve(resolver.resolve(requestedVehicle))\n\t\t\t\t.then(function (resolvedVehicle) {\n\t\t\t\t\treturn resolvedVehicle || getVehicle() || requestedVehicle;\n\t\t\t\t})\n\t\t\t\t.catch(function () {\n\t\t\t\t\treturn requestedVehicle;\n\t\t\t\t});\n\t\t}\n\r\n\t\tfunction appendTouchupUrlParams(url, extraParams) {\r\n\t\t\tvar raw = String(url || \"\");\r\n\t\t\tif (!raw) return raw;\r\n\t\t\tvar hash = \"\";\r\n\t\t\tvar hashIndex = raw.indexOf(\"#\");\r\n\t\t\tif (hashIndex !== -1) {\r\n\t\t\t\thash = raw.slice(hashIndex);\r\n\t\t\t\traw = raw.slice(0, hashIndex);\r\n\t\t\t}\r\n\t\t\tvar joiner = raw.indexOf(\"?\") === -1 ? \"?\" : \"&\";\r\n\t\t\tvar parts = [];\r\n\t\t\tObject.keys(extraParams || {}).forEach(function (key) {\r\n\t\t\t\tvar value = extraParams[key];\r\n\t\t\t\tif (value == null || String(value).trim() === \"\") return;\r\n\t\t\t\tparts.push(\r\n\t\t\t\t\tencodeURIComponent(key) + \"=\" + encodeURIComponent(String(value).trim()),\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t\t\treturn parts.length ? raw + joiner + parts.join(\"&\") + hash : raw + hash;\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]\");\n\t\tvar cartAdding = false;\n\t\tvar modalOpener = null;\n\t\tvar vehicleCard = $(\"[data-tuf-current-vehicle]\");\r\n\t\tvar vehicleOpenBtn = $(\"[data-tuf-open-garage]\");\r\n\t\tvar colorSelect = $(\"[data-tuf-color-select]\");\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 imageZoom = null;\r\n\t\tvar imageZoomImage = null;\r\n\t\tvar imageZoomClose = null;\r\n\t\tvar imageZoomPreviousFocus = 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\ttouchupDecodeRequestToken += 1;\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\t$$('[data-tuf-vin], [data-tuf-plate], [data-tuf-state]').forEach(\r\n\t\t\t\tfunction (input) {\r\n\t\t\t\t\tinput.disabled = awaitingChoice;\r\n\t\t\t\t},\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) invalidateTouchupSelectionForTwoTone(false);\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 (typeof selectStoredPaintVariantOption === \"function\")\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 canZoomFinderImages() {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tfunction closeImageZoom() {\r\n\t\t\tif (!imageZoom || imageZoom.hidden) return;\r\n\t\t\timageZoom.hidden = true;\r\n\t\t\timageZoomImage.removeAttribute(\"src\");\r\n\t\t\tdocument.body.classList.remove(\"tuf-image-zoom-open\");\r\n\t\t\tif (imageZoomPreviousFocus && typeof imageZoomPreviousFocus.focus === \"function\")\r\n\t\t\t\timageZoomPreviousFocus.focus();\r\n\t\t\timageZoomPreviousFocus = null;\r\n\t\t}\r\n\t\tfunction ensureImageZoom() {\r\n\t\t\tif (imageZoom) return;\r\n\t\t\timageZoom = document.createElement(\"div\");\r\n\t\t\timageZoom.className = \"tuf-image-zoom\";\r\n\t\t\timageZoom.hidden = true;\r\n\t\t\timageZoom.setAttribute(\"role\", \"dialog\");\r\n\t\t\timageZoom.setAttribute(\"aria-modal\", \"true\");\r\n\t\t\timageZoom.setAttribute(\"aria-label\", \"Expanded product image\");\r\n\t\t\timageZoom.innerHTML =\r\n\t\t\t\t'<div class=\"tuf-image-zoom__content\"><img class=\"tuf-image-zoom__image\" alt=\"\"><button class=\"tuf-image-zoom__close\" type=\"button\" aria-label=\"Close expanded image\"><span aria-hidden=\"true\">&times;</span></button></div>';\r\n\t\t\tdocument.body.appendChild(imageZoom);\r\n\t\t\timageZoomImage = imageZoom.querySelector(\".tuf-image-zoom__image\");\r\n\t\t\timageZoomClose = imageZoom.querySelector(\".tuf-image-zoom__close\");\r\n\t\t\timageZoomClose.addEventListener(\"click\", closeImageZoom);\r\n\t\t\timageZoom.addEventListener(\"click\", function (event) {\r\n\t\t\t\tif (event.target === imageZoom) closeImageZoom();\r\n\t\t\t});\r\n\t\t\tdocument.addEventListener(\"keydown\", function (event) {\r\n\t\t\t\tif (event.key !== \"Escape\" || imageZoom.hidden) return;\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tevent.stopImmediatePropagation();\r\n\t\t\t\tcloseImageZoom();\r\n\t\t\t});\r\n\t\t}\r\n\t\tfunction openImageZoom(image) {\r\n\t\t\tif (!canZoomFinderImages() || !image || !image.src) return;\r\n\t\t\tensureImageZoom();\r\n\t\t\timageZoomPreviousFocus = document.activeElement;\r\n\t\t\timageZoomImage.src = image.currentSrc || image.src;\r\n\t\t\timageZoomImage.alt = image.alt || \"Expanded touch-up product\";\r\n\t\t\timageZoom.hidden = false;\r\n\t\t\tdocument.body.classList.add(\"tuf-image-zoom-open\");\r\n\t\t\timageZoomClose.focus();\r\n\t\t}\r\n\t\tfunction handleImageTap(event) {\r\n\t\t\tif (!canZoomFinderImages() || !event.target || !event.target.closest) return;\r\n\t\t\tvar frame = event.target.closest(\"[data-tuf-image-zoom]\");\r\n\t\t\tvar image = frame && frame.querySelector(\"img\");\r\n\t\t\tif (!frame || !image || !root.contains(frame)) return;\r\n\t\t\tevent.preventDefault();\r\n\t\t\tevent.stopPropagation();\r\n\t\t\topenImageZoom(image);\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 normalizeTouchupMake(make) === 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 matching \" +\r\n\t\t\t\t\t\t\tbrandTitle(brand) +\r\n\t\t\t\t\t\t\t\" touch-up paint.\"\r\n\t\t\t\t\t\t: \"Saved in your garage and ready to use for touch-up paint.\";\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 for this paint match.\"\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 openGarage() {\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}\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;\n\t\t}\r\n\t\tfunction hasSelectableColorOptions() {\r\n\t\t\tif (!colorSelect || colorSelect.disabled) return false;\r\n\t\t\treturn $$(\"option\", colorSelect).some(function (option) {\r\n\t\t\t\treturn !!option.value;\r\n\t\t\t});\r\n\t\t}\r\n\t\tfunction autoMatchUnavailableMessage() {\r\n\t\t\treturn hasSelectableColorOptions()\r\n\t\t\t\t? AUTO_MATCH_UNAVAILABLE_MESSAGE\r\n\t\t\t\t: NO_TOUCHUP_KIT_MATCH_MESSAGE;\r\n\t\t}\r\n\t\tfunction professionalPaintCodeRequired() {\n\t\t\tif (!professionalPdp) return false;\n\t\t\tif (state.colorCode && !isMatchByVinCode(state.colorCode) && hasKitEntries(state.colorCode)) return false;\n\t\t\tconst code = storedPaintCode();\n\t\t\treturn isMatchByVinCode(rawParams.code) ||\n\t\t\t\t(activeVinString().length === 17 && !(code && hasKitEntries(code)));\n\t\t}\n\t\tfunction touchupNoMatchState(withKits, codes) {\r\n\t\t\tconst activeKey = activeVehicleKey();\r\n\t\t\tconst kitCodes = Array.isArray(withKits)\r\n\t\t\t\t? withKits\r\n\t\t\t\t: Object.keys(sizeMap()).filter(function (code) {\r\n\t\t\t\t\t\treturn hasKitEntries(code);\r\n\t\t\t\t\t});\r\n\t\t\tconst allowedKitCodes = Array.isArray(codes)\r\n\t\t\t\t? codes\r\n\t\t\t\t: kitCodes.filter(function (code) {\r\n\t\t\t\t\t\treturn codeAllowed(code);\r\n\t\t\t\t\t});\r\n\t\t\tconst vehicleCodesLoaded =\r\n\t\t\t\t!!activeKey &&\r\n\t\t\t\tallowedCodesKey === activeKey &&\r\n\t\t\t\tallowedCodesPendingKey !== activeKey;\r\n\t\t\tconst hasVehicleCodes =\r\n\t\t\t\tArray.isArray(allowedCodes) && allowedCodes.length > 0;\r\n\t\t\tconst noVehiclePaintData = vehicleCodesLoaded && !vehiclePaintDataVerified;\r\n\t\t\tconst noVehicleKitMatches =\r\n\t\t\t\tvehicleCodesLoaded &&\r\n\t\t\t\thasVehicleCodes &&\r\n\t\t\t\t!allowedKitCodes.length &&\r\n\t\t\t\t!matchByVinCode();\r\n\t\t\tconst noBrandKitMatches =\r\n\t\t\t\t!!activeKey &&\r\n\t\t\t\tkitLoadKey === activeKitLoadKey() &&\r\n\t\t\t\t!kitCodes.length &&\r\n\t\t\t\tallowedCodesPendingKey !== activeKey;\r\n\t\t\treturn {\r\n\t\t\t\tnoMatch: noVehiclePaintData || noVehicleKitMatches || noBrandKitMatches,\r\n\t\t\t};\r\n\t\t}\r\n\t\tfunction renderColorDropdown() {\r\n\t\t\tif (!colorSelect) return;\r\n\t\t\tvar activeKey = activeVehicleKey();\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\treturn;\r\n\t\t\t}\r\n\t\t\tvar withKits = Object.keys(sizeMap()).filter(function (code) {\r\n\t\t\t\treturn hasKitEntries(code) && !isMatchByVinCode(code);\r\n\t\t\t});\r\n\t\t\tconst twoToneMode = isTwoTonePaintModeActive();\r\n\t\t\tvar codes = withKits.filter(function (code) {\r\n\t\t\t\treturn twoToneMode ? twoToneCodeAllowed(code) : codeAllowed(code);\r\n\t\t\t});\r\n\t\t\tconst noMatchState = twoToneMode\r\n\t\t\t\t? { noMatch: !codes.length }\r\n\t\t\t\t: touchupNoMatchState(withKits, codes);\r\n\t\t\tif (noMatchState.noMatch) {\r\n\t\t\t\tcodes = [];\r\n\t\t\t} else if (!twoToneMode && !codes.length) {\r\n\t\t\t\tcodes = withKits; // US manual flow: vehicle codes narrow unless they prove no kit match.\r\n\t\t\t}\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\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 (noMatchState.noMatch) {\r\n\t\t\t\tsetDecodeMsg(NO_TOUCHUP_KIT_MATCH_MESSAGE);\r\n\t\t\t} else if (professionalPaintCodeRequired()) {\n\t\t\t\tsetDecodeMsg(professionalPaintCodeRequiredMessage);\n\t\t\t} else {\r\n\t\t\t\tconst showingNoMatchMessage = $$(\"[data-tuf-decode-msg]\").some(\r\n\t\t\t\t\tfunction (el) {\r\n\t\t\t\t\t\treturn el.textContent === NO_TOUCHUP_KIT_MATCH_MESSAGE || el.textContent === professionalPaintCodeRequiredMessage;\n\t\t\t\t\t},\r\n\t\t\t\t);\r\n\t\t\t\tif (showingNoMatchMessage) setDecodeMsg(\"\");\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 entries\r\n\t\t\t\t.filter(function (entry) {\r\n\t\t\t\t\treturn entry && entry.size === format;\r\n\t\t\t\t})\r\n\t\t\t\t.sort(function (a, b) {\r\n\t\t\t\t\treturn priceNumber(a) - priceNumber(b);\r\n\t\t\t\t})[0] || null;\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\thalfpint: \"For bigger repairs that need more paint.\",\r\n\t\t\t\tpint: \"For larger paint jobs and repeated use.\",\r\n\t\t\t\tquart: \"Shop-level volume for bigger repair jobs.\",\r\n\t\t\t\tgallon: \"Professional volume for full panels, shop work, and repeat jobs.\",\r\n\t\t\t};\r\n\t\t\treturn (\r\n\t\t\t\tblurbs[key] ||\r\n\t\t\t\t\"Choose this format for your repair.\"\r\n\t\t\t);\r\n\t\t}\r\n\t\tfunction formatDetails(format) {\r\n\t\t\tvar key = normalizeKey(format);\r\n\t\t\tvar details = {\r\n\t\t\t\tbottle: {\r\n\t\t\t\t\tamount: \"0.5 oz\",\r\n\t\t\t\t\tcoverage: \"Chips + scratches\",\r\n\t\t\t\t\tuse: \"Great for small chips, scratches, and precise touch-up spots.\",\r\n\t\t\t\t},\r\n\t\t\t\tpen: {\r\n\t\t\t\t\tamount: \"0.5 oz\",\r\n\t\t\t\t\tcoverage: \"Tiny chips\",\r\n\t\t\t\t\tuse: \"Best for pin-point chips, thin scratches, and tight edges.\",\r\n\t\t\t\t},\r\n\t\t\t\taerosol: {\r\n\t\t\t\t\tamount: \"11.4 oz\",\r\n\t\t\t\t\tcoverage: \"Spray repairs\",\r\n\t\t\t\t\tuse: \"Good for larger touch-up areas that need smoother spray coverage.\",\r\n\t\t\t\t},\r\n\t\t\t\thalfpint: {\r\n\t\t\t\t\tamount: \"8 oz\",\r\n\t\t\t\t\tcoverage: \"One small part\",\r\n\t\t\t\t\tuse: \"Covers a mirror cap, spoiler, or similar small repair area.\",\r\n\t\t\t\t},\r\n\t\t\t\tpint: {\r\n\t\t\t\t\tamount: \"16 oz\",\r\n\t\t\t\t\tcoverage: \"1-2 panels\",\r\n\t\t\t\t\tuse: \"Covers about a door, fender, or one to two standard panels.\",\r\n\t\t\t\t},\r\n\t\t\t\tquart: {\r\n\t\t\t\t\tamount: \"32 oz\",\r\n\t\t\t\t\tcoverage: \"3-4 panels\",\r\n\t\t\t\t\tuse: \"Covers a bumper and fender, or most of a front-end repair.\",\r\n\t\t\t\t},\r\n\t\t\t\tgallon: {\r\n\t\t\t\t\tamount: \"128 oz\",\r\n\t\t\t\t\tcoverage: \"Full exterior\",\r\n\t\t\t\t\tuse: \"Shop volume for a small to mid-size vehicle, or about 4-5 bumpers.\",\r\n\t\t\t\t},\r\n\t\t\t};\r\n\t\t\treturn details[key] || {\r\n\t\t\t\tamount: \"\",\r\n\t\t\t\tcoverage: \"Matched format\",\r\n\t\t\t\tuse: formatBlurb(format),\r\n\t\t\t};\r\n\t\t}\r\n\t\tfunction formatDetailMarkup(format) {\r\n\t\t\tvar details = formatDetails(format);\r\n\t\t\tvar pills = \"\";\r\n\t\t\tif (details.amount) {\r\n\t\t\t\tpills += '<span class=\"tuf-format-pill\">' + details.amount + \"</span>\";\r\n\t\t\t}\r\n\t\t\tif (details.coverage) {\r\n\t\t\t\tpills += '<span class=\"tuf-format-pill tuf-format-pill--coverage\">' + details.coverage + \"</span>\";\r\n\t\t\t}\r\n\t\t\treturn (\r\n\t\t\t\t'<div class=\"tuf-format-pills\">' +\r\n\t\t\t\tpills +\r\n\t\t\t\t\"</div>\" +\r\n\t\t\t\t'<div class=\"tuf-choice-detail\">' +\r\n\t\t\t\tdetails.use +\r\n\t\t\t\t\"</div>\"\r\n\t\t\t);\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 === \"pint\" ||\r\n\t\t\t\tformat.indexOf(\"quart\") !== -1 ||\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 packageProductImage(entry, code) {\r\n\t\t\treturn resolveTouchupProductImage(entry, code);\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 packageUses2KClear(entry) {\r\n\t\t\tvar format = normalizeKey(entry && entry.size);\r\n\t\t\treturn (\r\n\t\t\t\tformat.indexOf(\"halfpint\") !== -1 ||\r\n\t\t\t\tformat === \"pint\" ||\r\n\t\t\t\tformat.indexOf(\"quart\") !== -1 ||\r\n\t\t\t\tformat.indexOf(\"gallon\") !== -1\r\n\t\t\t);\r\n\t\t}\r\n\t\tfunction packageFinishBadges(pkg, entry) {\r\n\t\t\tvar key = normalizeKey(pkg);\r\n\t\t\tif (key === \"paintonly\") {\r\n\t\t\t\treturn '<span class=\"tuf-clear-badge tuf-clear-badge--none\">Paint only</span>';\r\n\t\t\t}\r\n\t\t\tvar clearLabel = packageUses2KClear(entry) ? \"2K Clear + activator included\" : \"1K Clear included\";\n\t\t\tvar badges = '<span class=\"tuf-clear-badge\">' + clearLabel + \"</span>\";\r\n\t\t\tif (key === \"preferred\") {\r\n\t\t\t\tbadges += '<span class=\"tuf-clear-badge tuf-clear-badge--primer\"><span aria-hidden=\"true\">1K</span> Primer included</span>';\r\n\t\t\t}\r\n\t\t\treturn badges;\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 formatCardsForCode(code) {\n\t\t\tvar mappedCode = mapKey(code) || code;\n\t\t\tvar entries = eligibleEntriesFor(mappedCode);\r\n\t\t\tvar formats = formatsFor(mappedCode);\r\n\t\t\treturn formats\r\n\t\t\t\t.map(function (fmt) {\r\n\t\t\t\t\tvar rep = formatRepresentative(entries, fmt);\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tformat: fmt,\r\n\t\t\t\t\t\ttitle: fmt,\r\n\t\t\t\t\t\tcopy: formatBlurb(fmt),\r\n\t\t\t\t\t\tprice: rep && rep.price ? money(rep.price) : \"\",\r\n\t\t\t\t\t\tproductImage: packageProductImage(rep, code),\n\t\t\t\t\t\tproductTitle: (rep && rep.productTitle) || \"\",\n\t\t\t\t\t\tproductUrl: (rep && rep.productUrl) || \"\",\n\t\t\t\t\t\tpaintCode: mappedCode || \"\",\n\t\t\t\t\t\tneedsSprayGun: entryNeedsSprayGun(rep),\n\t\t\t\t\t};\r\n\t\t\t\t})\r\n\t\t\t\t.filter(function (card) {\r\n\t\t\t\t\treturn !!card.productImage;\r\n\t\t\t\t});\r\n\t\t}\r\n\t\tfunction resolveFormatCardCode() {\r\n\t\t\tif (state.colorCode && hasKitEntries(state.colorCode)) return state.colorCode;\r\n\t\t\tvar stored = storedPaintMatch();\r\n\t\t\tvar code = cleanPaintCode(stored.code, getVehicle() || {});\r\n\t\t\tif (code && knownCode(code) && hasKitEntries(code)) return mapKey(code);\r\n\t\t\tif (enterMatchByVin()) return state.colorCode;\r\n\t\t\tvar codes = Object.keys(sizeMap()).filter(function (candidate) {\r\n\t\t\t\treturn hasKitEntries(candidate);\r\n\t\t\t});\r\n\t\t\treturn codes[0] || null;\r\n\t\t}\r\n\t\twindow.__partifyTouchupGetFormatCards = function () {\r\n\t\t\tstate.vehicle = state.vehicle || getVehicle();\r\n\t\t\tvar existingCode = resolveFormatCardCode();\r\n\t\t\tif (existingCode && hasKitEntries(existingCode))\r\n\t\t\t\treturn Promise.resolve(formatCardsForCode(existingCode));\r\n\t\t\treturn ensureKitProducts().then(function () {\r\n\t\t\t\tvar code = resolveFormatCardCode();\r\n\t\t\t\tif (!code) return [];\r\n\t\t\t\treturn formatCardsForCode(code);\r\n\t\t\t});\r\n\t\t};\r\n\t\tif (document.querySelector(\"[data-touchup-landing]\")) {\r\n\t\t\twindow.setTimeout(function () {\r\n\t\t\t\tensureKitProducts();\r\n\t\t\t}, 0);\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\" data-tuf-image-zoom><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(packageProductImage(rep, state.colorCode), 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\tfmt +\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\tformatDetailMarkup(fmt) +\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 clearBadge = packageFinishBadges(e.packageName, e);\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(packageProductImage(e, state.colorCode), 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\tclearBadge +\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\tif (!vehiclePaintDataAvailable()) return null;\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\r\n\t\tfunction syncPurchaseImage(selected) {\n\t\t\tif (!selected) return;\n\t\t\tvar image = document.querySelector('.product-gallery [data-gallery-figure][data-gallery-index=\"0\"] img');\n\t\t\tvar source = packageProductImage(selected, state.colorCode);\n\t\t\tif (image && source) {\n\t\t\t\timage.src = source;\n\t\t\t\timage.removeAttribute(\"srcset\");\n\t\t\t\timage.alt = selected.productTitle || \"\";\n\t\t\t}\n\t\t\tif (!professionalPdp) return;\n\t\t\tvar purchase = document.querySelector('[data-purchase-format=\"professional\"]');\n\t\t\tif (!purchase) return;\n\t\t\tvar volume = {\"Half Pint\": 8, Pint: 16, Quart: 32, Gallon: 128}[selected.size];\n\t\t\tif (!volume) return;\n\t\t\tpurchase.setAttribute(\"data-purchase-size\", selected.size);\n\t\t\tpurchase.setAttribute(\"data-purchase-package\", selected.packageName);\n\t\t\tpurchase.querySelectorAll(\"[data-prof-volume]\").forEach(function (element) {\n\t\t\t\telement.textContent = volume + \" fl oz\";\n\t\t\t});\n\t\t}\n\t\tfunction renderReview() {\n\t\t\tvar box = $(\"[data-tuf-review]\");\r\n\t\t\tif (!box) return;\r\n\t\t\tvar e = currentEntry();\n\t\t\tsyncPurchaseImage(e);\n\t\t\tvar reviewImage = packageProductImage(e, state.colorCode);\r\n\t\t\tvar v = state.vehicle || getVehicle() || {};\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(reviewImage\r\n\t\t\t\t\t? '<img class=\"tuf-review-img\" src=\"' +\r\n\t\t\t\t\t\treviewImage +\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([state.format, 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\">' +\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\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 {\r\n\t\t\t\t\t// TODO: oversell vs real stock. Oversell is enabled for launch, so every kit is buyable\r\n\t\t\t\t\t// regardless of the availableForSale flag; show clean, positive copy either way.\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) {\n\t\t\t\tsetAtcLoading(cartAdding);\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: professionalPdp ? \"Size\" : \"Format\",\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(professionalPdp ? \"Size\" : \"Format\", state.format, \"format\");\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 (!state.colorCode || !state.colorSource || state.colorSource === \"manual\")\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();\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\") {\n\t\t\t\tsyncTwoToneChoiceUi();\n\t\t\t\trenderColorDropdown();\n\t\t\t\tif (professionalPaintCodeRequired()) setColorPath(\"code\");\n\t\t\t}\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\trenderSummary();\r\n\t\t}\r\n\r\n\t\tfunction stepValid() {\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\t\tcase \"color\":\r\n\t\t\t\t\tif (isTwoToneChoiceRequired()) return false;\r\n\t\t\t\t\tif (state.colorCode && hasKitEntries(state.colorCode)) return true;\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\t(state.colorPath === \"vin\" || state.colorPath === \"plate\") &&\r\n\t\t\t\t\t\tactiveVehicleVinDecodeExcluded()\r\n\t\t\t\t\t)\r\n\t\t\t\t\t\treturn 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 = colorLookupPending || !stepValid();\n\t\t\t}\r\n\t\t\tif (atcBtn) {\n\t\t\t\tatcBtn.classList.toggle(\"tuf-hidden\", !last);\n\t\t\t\tatcBtn.disabled = cartAdding || !stepValid();\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)\r\n\t\t\t\treturn;\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 = state.matchByVin ? \"vin\" : \"code\";\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() {\n\t\t\tif (colorLookupPending) return;\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 && hasKitEntries(state.colorCode))\r\n\t\t\t) {\r\n\t\t\t\tif (state.colorPath === \"vin\" || state.colorPath === \"plate\")\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;\n\t\t\tif (steps[idx] === \"color\") colorLookupNeedsConfirmation = false;\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) {\n\t\t\tcartAdding = !!loading;\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 activeVinString() {\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)\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\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\taddCartProperty(props, \"VIN\", activeVinString());\r\n\t\t\treturn props;\r\n\t\t}\r\n\t\tfunction confirmCartQuantityForKit(kitEntry, variantId, quantity, properties) {\r\n\t\t\tif (\r\n\t\t\t\t!window.PartifyCartQuantityConfirmation ||\r\n\t\t\t\ttypeof window.PartifyCartQuantityConfirmation.confirmAdd !== \"function\"\r\n\t\t\t) {\r\n\t\t\t\treturn Promise.resolve({ confirmed: true });\r\n\t\t\t}\r\n\t\t\treturn window.PartifyCartQuantityConfirmation\r\n\t\t\t\t.confirmAdd({\r\n\t\t\t\t\titems: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tid: variantId,\r\n\t\t\t\t\t\t\tvariant_id: variantId,\r\n\t\t\t\t\t\t\tquantity: quantity,\r\n\t\t\t\t\t\t\tproductHandle: kitEntry && kitEntry.productHandle,\r\n\t\t\t\t\t\t\thandle: kitEntry && kitEntry.productHandle,\r\n\t\t\t\t\t\t\tproductTitle: kitEntry && kitEntry.productTitle,\r\n\t\t\t\t\t\t\tproduct_title: kitEntry && kitEntry.productTitle,\r\n\t\t\t\t\t\t\ttitle: kitEntry && kitEntry.productTitle,\r\n\t\t\t\t\t\t\tvariantTitle:\r\n\t\t\t\t\t\t\t\t(kitEntry && (kitEntry.variantTitle || kitEntry.paintCode || kitEntry.code)) ||\r\n\t\t\t\t\t\t\t\tstate.colorCode,\r\n\t\t\t\t\t\t\tproperties: properties,\r\n\t\t\t\t\t\t\tpartifyQuantityRuleKey: \"touch_up_paint_kit\",\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 { confirmed: true };\r\n\t\t\t\t});\r\n\t\t}\r\n\t\tfunction addToCart() {\n\t\t\tif (cartAdding || !stepValid()) return;\n\t\t\tvar kitEntry = currentEntry();\r\n\t\t\tif (!kitEntry) return;\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\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 properties = collectCartProperties(form, kitEntry);\r\n\t\t\t\tconfirmCartQuantityForKit(kitEntry, variantId, quantity, properties).then(\r\n\t\t\t\t\tfunction (check) {\r\n\t\t\t\t\t\tif (!check || !check.confirmed) {\r\n\t\t\t\t\t\t\tsetAtcLoading(false);\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tfetch(\"/cart/add.js\", {\r\n\t\t\t\t\t\t\tmethod: \"POST\",\r\n\t\t\t\t\t\t\theaders: {\r\n\t\t\t\t\t\t\t\t\"Content-Type\": \"application/json\",\r\n\t\t\t\t\t\t\t\t\"X-Requested-With\": \"XMLHttpRequest\",\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tbody: JSON.stringify({\r\n\t\t\t\t\t\t\t\tid: Number(variantId),\r\n\t\t\t\t\t\t\t\tquantity: quantity,\r\n\t\t\t\t\t\t\t\tproperties: properties,\r\n\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t.then(function (response) {\r\n\t\t\t\t\t\t\t\tif (!response.ok) throw new Error(\"add failed\");\r\n\t\t\t\t\t\t\t\treturn response.json();\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t.then(function () {\r\n\t\t\t\t\t\t\t\troot.setAttribute(\"data-tuf-complete\", \"true\");\r\n\t\t\t\t\t\t\t\tdocument.dispatchEvent(\r\n\t\t\t\t\t\t\t\t\tnew CustomEvent(\"partify:touchup:selection-complete\", {\r\n\t\t\t\t\t\t\t\t\t\tdetail: {\r\n\t\t\t\t\t\t\t\t\t\t\tcolorCode: state.colorCode,\n\t\t\t\t\t\t\t\t\t\t\tformat: state.format,\r\n\t\t\t\t\t\t\t\t\t\t\tpackageName: state.tier,\r\n\t\t\t\t\t\t\t\t\t\t\tvariantId: variantId,\r\n\t\t\t\t\t\t\t\t\t\t},\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\tif (window.__partifyAddOnStyles?.afterAdd({ items: [{ id: variantId, quantity: quantity, properties: properties }], onClose: function () { setAtcLoading(false); } })) return;\n\t\t\t\t\t\t\t\twindow.location.href = \"/cart\";\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t.catch(function () {\r\n\t\t\t\t\t\t\t\tsetCartNotice(\r\n\t\t\t\t\t\t\t\t\t\"We couldn't add this selection. Please try again.\",\r\n\t\t\t\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tsetAtcLoading(false);\r\n\t\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}\r\n\r\n\t\tfunction setColor(code) {\r\n\t\t\tif (!String(code || \"\").trim()) {\n\t\t\t\tstate.colorCode = null;\n\t\t\t\tstate.colorSource = \"\";\n\t\t\t\tstate.format = null;\n\t\t\t\tstate.tier = null;\n\t\t\t\trender();\n\t\t\t\trefreshNav();\n\t\t\t\treturn true;\n\t\t\t}\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) || !hasKitEntries(code)) return false;\r\n\t\t\tif (isTwoTonePaintModeActive()) {\r\n\t\t\t\ttouchupDecodeRequestToken += 1;\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\tenforceFixedFormat();\r\n\t\t\tremoveFixedFormatStep();\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) {\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 (isTwoTonePaintModeActive() && path !== \"code\") path = \"code\";\r\n\t\t\tconst excludedAutoMatch =\r\n\t\t\t\t(path === \"vin\" || path === \"plate\") &&\r\n\t\t\t\tactiveVehicleVinDecodeExcluded();\r\n\t\t\tif (excludedAutoMatch) {\n\t\t\t\trenderColorDropdown();\n\t\t\t\tif (hasSelectableColorOptions()) path = \"code\";\n\t\t\t}\n\t\t\tif (path !== state.colorPath && (path === \"vin\" || path === \"plate\")) {\n\t\t\t\tinvalidateColorLookup();\n\t\t\t}\n\t\t\tif (path === \"vin\") {\r\n\t\t\t\tconst savedVin = activeVinString();\r\n\t\t\t\tconst vinInput = $(\"[data-tuf-vin]\");\r\n\t\t\t\tif (savedVin.length === 17) {\r\n\t\t\t\t\tstate.vin = savedVin;\r\n\t\t\t\t\tif (vinInput) vinInput.value = savedVin;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (path === \"code\") {\r\n\t\t\t\tif (state.matchByVin || isMatchByVinCode(state.colorCode)) {\r\n\t\t\t\t\tstate.colorCode = null;\r\n\t\t\t\t\tstate.colorSource = \"\";\r\n\t\t\t\t\tstate.format = null;\r\n\t\t\t\t\tstate.tier = null;\r\n\t\t\t\t}\r\n\t\t\t\tstate.matchByVin = false;\r\n\t\t\t}\r\n\t\t\tconst noMatchState = touchupNoMatchState();\r\n\t\t\tconst pathMessage = isTwoTonePaintModeActive()\r\n\t\t\t\t? TWO_TONE_MANUAL_COLOR_MESSAGE\r\n\t\t\t\t: excludedAutoMatch\r\n\t\t\t\t\t? autoMatchUnavailableMessage()\r\n\t\t\t\t\t: noMatchState.noMatch\r\n\t\t\t\t\t\t? NO_TOUCHUP_KIT_MATCH_MESSAGE\r\n\t\t\t\t\t\t: professionalPaintCodeRequired()\n\t\t\t\t\t\t\t? professionalPaintCodeRequiredMessage\n\t\t\t\t\t\t\t: \"\";\n\t\t\tsetDecodeMsg(pathMessage);\r\n\t\t\tstate.colorPath = path;\r\n\t\t\trenderColorPreview();\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\tif (pathMessage) setDecodeMsg(pathMessage);\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) {\n\t\t\treturn cleanPaintCode(raw, getVehicle() || {});\n\t\t}\n\t\tfunction invalidateColorLookup() {\n\t\t\ttouchupDecodeRequestToken += 1;\n\t\t\tstate.colorCode = null;\n\t\t\tstate.colorSource = \"\";\n\t\t\tstate.matchByVin = false;\n\t\t\tstate.format = null;\n\t\t\tstate.tier = null;\n\t\t\trenderColorPreview();\n\t\t}\n\t\tfunction showColorLookupResult() {\n\t\t\tloadColorDetails();\n\t\t\tincludeSteps([\"color\", \"format\", \"kit\", \"review\"]);\n\t\t\tenforceFixedFormat();\n\t\t\tremoveFixedFormatStep();\n\t\t\tgoToStep(\"color\");\n\t\t}\n\t\tfunction requireProfessionalPaintCode() {\n\t\t\tinvalidateColorLookup();\n\t\t\tclearResolvedTouchupSelection();\n\t\t\tstate.colorPath = \"code\";\n\t\t\tshowColorLookupResult();\n\t\t\tsetColorPath(\"code\");\n\t\t\tsetDecodeMsg(professionalPaintCodeRequiredMessage);\n\t\t}\n\t\tfunction decodeViaBackend(kind) {\n\t\t\tif (colorLookupPending) return;\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 (isTwoTonePaintModeActive()) {\r\n\t\t\t\tsyncTwoTonePaintMode(false);\r\n\t\t\t\trenderColorDropdown();\r\n\t\t\t\tsetDecodeMsg(TWO_TONE_MANUAL_COLOR_MESSAGE);\r\n\t\t\t\trefreshNav();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (activeVehicleVinDecodeExcluded()) {\r\n\t\t\t\trenderColorDropdown();\r\n\t\t\t\tsetColorPath(\"code\");\r\n\t\t\t\tsetDecodeMsg(autoMatchUnavailableMessage());\r\n\t\t\t\trefreshNav();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst requestToken = touchupDecodeRequestToken;\n\t\t\tcolorLookupPending = true;\n\t\t\tcolorLookupNeedsConfirmation = true;\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() {\n\t\t\t\tcolorLookupPending = false;\n\t\t\t\tif (btn) {\n\t\t\t\t\tbtn.textContent = label;\n\t\t\t\t}\n\t\t\t\trefreshNav();\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 requestIsCurrent() {\r\n\t\t\t\treturn (\r\n\t\t\t\t\trequestToken === touchupDecodeRequestToken &&\r\n\t\t\t\t\t!isTwoTonePaintModeActive()\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\tfunction stopStaleDecode() {\r\n\t\t\t\tif (requestIsCurrent()) return false;\r\n\t\t\t\tdone();\r\n\t\t\t\tif (isTwoTonePaintModeActive()) {\r\n\t\t\t\t\tsyncTwoTonePaintMode(false);\r\n\t\t\t\t\trenderColorDropdown();\r\n\t\t\t\t\tsetDecodeMsg(TWO_TONE_MANUAL_COLOR_MESSAGE);\r\n\t\t\t\t\trefreshNav();\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\tfunction fallbackToMatchByVin(vin, message) {\r\n\t\t\t\tif (!requestIsCurrent() || activeVehicleVinDecodeExcluded())\r\n\t\t\t\t\treturn Promise.resolve(false);\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\treturn loadAllowedCodes();\r\n\t\t\t\t}).then(function () {\r\n\t\t\t\t\tif (!requestIsCurrent()) return false;\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\tshowColorLookupResult();\n\t\t\t\t\tsetDecodeMsg(message || \"\");\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 (!requestIsCurrent()) return false;\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 (!requestIsCurrent()) return false;\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\")\r\n\t\t\t\t\t\t\t\treturn 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 (stopStaleDecode()) return;\r\n\t\t\t\t\tif (!result) {\r\n\t\t\t\t\t\tif (professionalPdp) {\n\t\t\t\t\t\t\tdone();\n\t\t\t\t\t\t\trequireProfessionalPaintCode();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\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\tif (stopStaleDecode()) return;\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\tfail(\r\n\t\t\t\t\t\t\t\t\t!hasSelectableColorOptions()\r\n\t\t\t\t\t\t\t\t\t\t? NO_TOUCHUP_KIT_MATCH_MESSAGE\r\n\t\t\t\t\t\t\t\t\t\t: kind === \"plate\"\r\n\t\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\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\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconst decodedVehicle = getVehicle();\r\n\t\t\t\t\tif (!sameVehicle(state.vehicle, decodedVehicle)) {\r\n\t\t\t\t\t\ttwoToneChoice = \"\";\r\n\t\t\t\t\t\ttwoToneAreaChoice = \"\";\r\n\t\t\t\t\t\ttwoTonePaintModeApplied = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tstate.vehicle = decodedVehicle;\r\n\t\t\t\t\trenderVehChip();\r\n\t\t\t\t\treturn loadTwoToneRuleForVehicle(decodedVehicle).then(function () {\r\n\t\t\t\t\t\tif (stopStaleDecode()) return;\r\n\t\t\t\t\t\tif (!isTwoToneEligible()) {\r\n\t\t\t\t\t\t\ttwoToneChoice = \"\";\r\n\t\t\t\t\t\t\ttwoToneAreaChoice = \"\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tsyncTwoToneChoiceUi();\r\n\t\t\t\t\t\tconst code =\r\n\t\t\t\t\t\t\tstoredPaintCode() ||\r\n\t\t\t\t\t\t\tdecodedCode((getVehicle() || {}).troublesome_format);\r\n\t\t\t\t\t\tif (code && knownCode(code) && hasKitEntries(code)) {\n\t\t\t\t\t\t\tstate.matchByVin = false;\n\t\t\t\t\t\t\tstate.colorCode = mapKey(code) || code;\r\n\t\t\t\t\t\t\tstate.colorSource = kind === \"plate\" ? \"license plate\" : \"VIN\";\r\n\t\t\t\t\t\t\tstate.format = null;\r\n\t\t\t\t\t\t\tstate.tier = null;\r\n\t\t\t\t\t\t\tif (isTwoToneChoiceRequired()) {\n\t\t\t\t\t\t\t\tbuildSteps();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tshowColorLookupResult();\n\t\t\t\t\t\t\tdone();\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tif (professionalPdp) {\n\t\t\t\t\t\t\t\tdone();\n\t\t\t\t\t\t\t\trequireProfessionalPaintCode();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn fallbackToMatchByVin(\r\n\t\t\t\t\t\t\t\tactiveVinString(),\r\n\t\t\t\t\t\t\t\tcode\r\n\t\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\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\t).then(function (ok) {\r\n\t\t\t\t\t\t\t\tif (stopStaleDecode()) return;\r\n\t\t\t\t\t\t\t\tdone();\r\n\t\t\t\t\t\t\t\tif (!ok) {\r\n\t\t\t\t\t\t\t\t\tsetColorPath(\"code\");\r\n\t\t\t\t\t\t\t\t\trenderColorDropdown();\r\n\t\t\t\t\t\t\t\t\tsetDecodeMsg(\r\n\t\t\t\t\t\t\t\t\t\t!hasSelectableColorOptions()\r\n\t\t\t\t\t\t\t\t\t\t\t? NO_TOUCHUP_KIT_MATCH_MESSAGE\r\n\t\t\t\t\t\t\t\t\t\t\t: code\r\n\t\t\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\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\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})\r\n\t\t\t\t.catch(function () {\r\n\t\t\t\t\tif (stopStaleDecode()) return;\r\n\t\t\t\t\tif (professionalPdp) {\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\trequireProfessionalPaintCode();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\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\tif (stopStaleDecode()) return;\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\trenderColorDropdown();\r\n\t\t\t\t\t\t\tfail(\r\n\t\t\t\t\t\t\t\t!hasSelectableColorOptions()\r\n\t\t\t\t\t\t\t\t\t? NO_TOUCHUP_KIT_MATCH_MESSAGE\r\n\t\t\t\t\t\t\t\t\t: \"Decode failed. Enter a valid VIN to match paint by VIN.\",\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}\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 =\r\n\t\t\t\tp.get(\"paintcode\") ||\r\n\t\t\t\tp.get(\"paintCode\") ||\r\n\t\t\t\tp.get(\"paint_code\") ||\r\n\t\t\t\tp.get(\"paint-code\") ||\r\n\t\t\t\tp.get(\"code\") ||\r\n\t\t\t\t\"\";\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 (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!hasKitEntries(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 (fixedFormat && !professionalPdp) {\n\t\t\t\tvar lockedFormat = canonicalFrom(fmts, fixedFormat);\r\n\t\t\t\tstate.format = lockedFormat || null;\r\n\t\t\t}\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\tenforceFixedFormat();\r\n\t\t}\r\n\t\tfunction buildSteps() {\r\n\t\t\tstate.vehicle = state.vehicle || getVehicle();\r\n\t\t\tif (professionalPdp && (state.matchByVin || isMatchByVinCode(state.colorCode))) {\n\t\t\t\tinvalidateColorLookup();\n\t\t\t\tclearResolvedTouchupSelection();\n\t\t\t\tstate.colorPath = \"code\";\n\t\t\t}\n\t\t\tconst twoToneMode = isTwoTonePaintModeActive();\r\n\t\t\tconst twoToneChoiceRequired = isTwoToneChoiceRequired();\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 (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 (!twoToneMode && !twoToneChoiceRequired && !state.colorCode) {\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 (professionalPaintCodeRequired()) {\n\t\t\t\tstate.colorCode = null;\n\t\t\t\tstate.colorSource = \"\";\n\t\t\t\tstate.matchByVin = false;\n\t\t\t\tstate.format = null;\n\t\t\t\tstate.tier = null;\n\t\t\t\tstate.colorPath = \"code\";\n\t\t\t\tclearResolvedTouchupSelection();\n\t\t\t}\n\t\t\tif (state.colorCode && !state.colorSource) {\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\thasKitEntries(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\" &&\n\t\t\t\t\t!colorLookupNeedsConfirmation &&\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\thasKitEntries(state.colorCode)\r\n\t\t\t\t)\r\n\t\t\t\t\treturn false;\r\n\t\t\t\tif (s === \"format\" && fixedFormat && !professionalPdp) return false;\n\t\t\t\tif (s === \"format\" && state.colorCode && state.format && !professionalPdp) return false;\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() {\n\t\t\tif (!overlay) return;\n\t\t\tvar requestedVehicle = state.vehicle || getVehicle();\n\t\t\tresolvePaintReference(requestedVehicle).then(function (resolvedVehicle) {\n\t\t\t\tstate.vehicle = resolvedVehicle || requestedVehicle || getVehicle();\n\t\t\t\treturn loadTwoToneRuleForVehicle(state.vehicle);\n\t\t\t}).then(function () {\n\t\t\t\tsyncTwoToneChoiceUi();\n\t\t\t\tsyncTwoTonePaintMode(false);\n\t\t\t\tbuildSteps();\n\t\t\t\toverlay.classList.add(\"tuf-open\");\n\t\t\t\tdocument.body.style.overflow = \"hidden\";\n\t\t\t\trender();\n\t\t\t\trefreshNav();\n\t\t\t\tif (fixedFormat && $(\"[data-tuf-close]\")) $(\"[data-tuf-close]\").focus();\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\tcloseTwoToneGuidance(false);\r\n\t\t\toverlay.classList.remove(\"tuf-open\");\n\t\t\tdocument.body.style.overflow = \"\";\n\t\t\tif (modalOpener && modalOpener.isConnected) modalOpener.focus({preventScroll: true});\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) {\n\t\t\t\t\tev.preventDefault();\n\t\t\t\t\tmodalOpener = b;\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 = appendTouchupUrlParams(cfg.setProductUrl, {\r\n\t\t\t\t\t\t\ttuf: \"open\",\r\n\t\t\t\t\t\t\tpaintcode: storedPaintCode() || state.colorCode || rawParams.code,\r\n\t\t\t\t\t\t});\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;\n\t\t\t}\n\t\t\tif (fixedFormat && e.key === \"Tab\" && overlay && overlay.classList.contains(\"tuf-open\")) {\n\t\t\t\tvar focusable = Array.prototype.slice.call(overlay.querySelectorAll('button:not([disabled]), a[href], input:not([disabled]), select:not([disabled]), [tabindex=\"0\"]'))\n\t\t\t\t\t.filter(function (element) { return element.getClientRects().length && window.getComputedStyle(element).visibility !== \"hidden\"; });\n\t\t\t\tvar first = focusable[0];\n\t\t\t\tvar last = focusable[focusable.length - 1];\n\t\t\t\tif (first && (!overlay.contains(document.activeElement) || (e.shiftKey ? document.activeElement === first : document.activeElement === last))) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\t(e.shiftKey ? last : first).focus();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (\n\t\t\t\te.key === \"Escape\" &&\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\", handleImageTap, true);\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\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;\n\t\t\t\tinvalidateColorLookup();\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();\n\t\t\t\tinvalidateColorLookup();\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();\n\t\t\t\tinvalidateColorLookup();\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) {\n\t\t\tconst nextVehicle = v || getVehicle();\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\ttouchupDecodeRequestToken += 1;\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}\r\n\t\t\tstate.vehicle = nextVehicle;\r\n\t\t\tloadColorDetails();\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}\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\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\tif (isTwoTonePaintModeActive()) {\r\n\t\t\t\t\tsyncTwoTonePaintMode(!preserveTwoToneManualChoice);\r\n\t\t\t\t}\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\tconst preparedVehicle = open\n\t\t\t\t? resolvePaintReference(nextVehicle).then(function (resolvedVehicle) {\n\t\t\t\t\t\tstate.vehicle = resolvedVehicle || nextVehicle;\n\t\t\t\t\t\treturn state.vehicle;\n\t\t\t\t\t})\n\t\t\t\t: Promise.resolve(nextVehicle);\n\t\t\tpreparedVehicle\n\t\t\t\t.then(function (resolvedVehicle) {\n\t\t\t\t\treturn Promise.all([\n\t\t\t\t\t\tloadTwoToneRuleForVehicle(resolvedVehicle),\n\t\t\t\t\t\topen ? ensureKitProducts() : Promise.resolve(),\n\t\t\t\t\t]);\n\t\t\t\t})\n\t\t\t\t.then(rebuild);\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\t// The Bottle PDP's inline presentation consumes the same authoritative\r\n\t\t// vehicle-code and two-tone resolvers as the modal. Keep the data API small\r\n\t\t// so selection, pricing, and cart behavior remain owned by the existing flow.\r\n\t\twindow.PartifyTouchupFinderData = {\n\t\t\tgetColorDetails: function (vehicle) {\n\t\t\t\treturn fetchColorDetails(vehicle || getVehicle());\n\t\t\t},\n\t\t\tgetVehicle: function () {\r\n\t\t\t\tvar vehicle = getVehicle();\r\n\t\t\t\treturn vehicle ? Object.assign({}, vehicle) : null;\r\n\t\t\t},\r\n\t\t\tgetActiveMakeKey: function () {\n\t\t\t\treturn activeTouchupMakeKey();\n\t\t\t},\n\t\t\tresolvePaintReference: function (vehicle) {\n\t\t\t\treturn resolvePaintReference(vehicle);\n\t\t\t},\n\t\t\tgetResolvedPaintCode: function (vehicle) {\n\t\t\t\tvar currentVehicle = getVehicle();\r\n\t\t\t\tif (currentVehicle && (!vehicle || sameVehicle(currentVehicle, vehicle))) {\r\n\t\t\t\t\t// The explicitly supplied vehicle comes from searchTerms/Garage and may\r\n\t\t\t\t\t// contain a paint code decoded moments ago. PartifyFitment can still\r\n\t\t\t\t\t// hold the same vehicle with the older generic `.VIN` value, so keep\r\n\t\t\t\t\t// the supplied VIN/paint fields authoritative during this merge.\r\n\t\t\t\t\tvehicle = vehicle\r\n\t\t\t\t\t\t? mergeVehicleData(vehicle, currentVehicle)\r\n\t\t\t\t\t\t: currentVehicle;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvehicle = vehicle || currentVehicle || {};\r\n\t\t\t\t}\r\n\t\t\t\treturn (\r\n\t\t\t\t\tcleanPaintCode(vehicle.paintCode || vehicle.paint_code, vehicle) ||\r\n\t\t\t\t\tcleanPaintCode(vehicle.troublesome_format, vehicle)\r\n\t\t\t\t);\r\n\t\t\t},\r\n\t\t\tensureKitProducts: function (vehicle) {\r\n\t\t\t\tvar currentVehicle = getVehicle();\r\n\t\t\t\tif (currentVehicle && (!vehicle || sameVehicle(currentVehicle, vehicle))) {\r\n\t\t\t\t\tstate.vehicle = vehicle\r\n\t\t\t\t\t\t? mergeVehicleData(vehicle, currentVehicle)\r\n\t\t\t\t\t\t: currentVehicle;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstate.vehicle = vehicle || currentVehicle || state.vehicle;\r\n\t\t\t\t}\r\n\t\t\t\treturn ensureKitProducts();\r\n\t\t\t},\r\n\t\t\tgetAllowedCodes: function (vehicle) {\r\n\t\t\t\tvehicle = vehicle || getVehicle();\r\n\t\t\t\treturn Promise.resolve(\r\n\t\t\t\t\ttypeof window.__partifyTouchupFetchAllowedCodes === \"function\"\r\n\t\t\t\t\t\t? window.__partifyTouchupFetchAllowedCodes(vehicle)\r\n\t\t\t\t\t\t: directAllowedCodesForVehicle(vehicle),\r\n\t\t\t\t).then(function (codes) {\r\n\t\t\t\t\tvar manualCodes = manualAllowedCodes(codes) || [];\r\n\t\t\t\t\tmanualCodes.partifyVehiclePaintDataAvailable = Array.isArray(codes) && codes.length > 0;\r\n\t\t\t\t\treturn manualCodes;\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\tgetTwoToneCodes: function (vehicle) {\r\n\t\t\t\treturn loadTwoToneRuleForVehicle(vehicle || getVehicle()).then(\r\n\t\t\t\t\tfunction (codes) {\r\n\t\t\t\t\t\treturn Array.isArray(codes) ? codes.slice() : [];\r\n\t\t\t\t\t},\r\n\t\t\t\t);\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\troot.addEventListener(\"partify:paint-preview:visibility\", function () {\n\t\t\tconst layout = $(\"[data-tuf-color-layout]\");\n\t\t\tconst preview = $(\"[data-tuf-color-preview]\");\n\t\t\tif (layout && preview) layout.classList.toggle(\"tuf-color-layout--preview\", !preview.hidden);\n\t\t});\n\t\treadParams();\n\t\tvar professionalPurchase = document.querySelector('[data-purchase-format=\"professional\"]');\n\t\tif (professionalPurchase) syncPurchaseImage({\n\t\t\tsize: professionalPurchase.getAttribute(\"data-purchase-size\"),\n\t\t\tpackageName: professionalPurchase.getAttribute(\"data-purchase-package\"),\n\t\t\tproductImage: professionalPurchase.getAttribute(\"data-purchase-image\")\n\t\t});\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(\"paintcode\") ||\r\n\t\t\tp.get(\"paintCode\") ||\r\n\t\t\tp.get(\"paint_code\") ||\r\n\t\t\tp.get(\"paint-code\") ||\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", "p", "ymm"]
}
