{
  "version": 3,
  "sources": ["/cdn/shop/t/6/assets/ps-pdp.js?ps=vehicle-agent-20260521a"],
  "sourcesContent": ["// Path: assets/ps-pdp.js\n//\n// Hybrid Dynamic PDP: minimal PDP controller\n// - Year gate (reads PS.ssr().years), writes properties[Year] and ps_cc.year\n// - Multi-add Clearcoat toggle\n// - Native cart add with sections refresh and notification open\n// - Ensures hidden props for Make/Color/Code/Year and _ps_* slugs\n//\n// Removed: client API calls, path parsing for product type, DOM painting, image swaps, ps:color:* events\n\n(function(window, document){\n  'use strict';\n\n  var PS = window.PS || (window.PS = {});\n\n  // Guard: bounce direct hits to base paint products to the color entry page.\n  // Matches: /products/pen, /products/pen-tricoat, /products/bottle(-tricoat), /products/spray(-tricoat), /products/pro(-tricoat)\n  try {\n        var isDesignMode = !!(window.Shopify && window.Shopify.designMode);\n    if (!isDesignMode) {\n    var path = window.location && window.location.pathname || '';\n    if (/^\\/products\\/(pen|bottle|spray|pro)(-tricoat)?\\/?$/i.test(path)) {\n      window.location.replace('/');\n      return;\n    }\n  }\n  } catch (_e) {}\n\n  var CONFIG = {\n    cartSections: ['cart-notification-product','cart-notification-button','cart-icon-bubble'],\n    minYear: 1980\n  };\n\n  var FACTORY_PROP_KEY = 'Factory Code';\n\n  // ------------------------ Utils ------------------------\n  function getCustomColorFunnelEntry(){\n    var stored = '';\n    var entry;\n\n    try {\n      if (window.paintscratchCustomColorFunnel\n          && typeof window.paintscratchCustomColorFunnel.getEntry === 'function') {\n        entry = window.paintscratchCustomColorFunnel.getEntry();\n        if (entry && entry.entry_channel && entry.landing_group) return entry;\n      }\n    } catch (_eGlobalEntry) {}\n\n    try {\n      stored = window.sessionStorage.getItem('ps_custom_color_funnel_entry') || '';\n      if (stored) {\n        entry = JSON.parse(stored);\n        if (entry && entry.entry_channel && entry.landing_group) return entry;\n      }\n    } catch (_eReadEntry) {}\n\n    return { entry_channel: 'unknown', landing_group: 'other' };\n  }\n\n  function getCustomColorFunnelEnvironment(){\n    var ua = '';\n    var match = null;\n    var deviceCategory = 'desktop';\n    var browser = 'Other';\n    var browserVersion = '';\n    var operatingSystem = 'Other';\n\n    try { ua = String(window.navigator && window.navigator.userAgent || ''); } catch (_eUserAgent) {}\n    if (/iPad|Tablet/i.test(ua) || (/Android/i.test(ua) && !/Mobile/i.test(ua))) deviceCategory = 'tablet';\n    else if (/Mobi|Android|iPhone|iPod/i.test(ua)) deviceCategory = 'mobile';\n\n    if (/Windows NT/i.test(ua)) operatingSystem = 'Windows';\n    else if (/Android/i.test(ua)) operatingSystem = 'Android';\n    else if (/iPhone|iPad|iPod/i.test(ua)) operatingSystem = 'iOS';\n    else if (/Mac OS X/i.test(ua)) operatingSystem = 'macOS';\n    else if (/CrOS/i.test(ua)) operatingSystem = 'Chrome OS';\n    else if (/Linux/i.test(ua)) operatingSystem = 'Linux';\n\n    match = ua.match(/EdgA?\\/([0-9.]+)/i);\n    if (match) {\n      browser = 'Edge';\n      browserVersion = match[1];\n    } else {\n      match = ua.match(/SamsungBrowser\\/([0-9.]+)/i);\n      if (match) {\n        browser = 'Samsung Internet';\n        browserVersion = match[1];\n      } else {\n        match = ua.match(/(?:Firefox|FxiOS)\\/([0-9.]+)/i);\n        if (match) {\n          browser = 'Firefox';\n          browserVersion = match[1];\n        } else {\n          match = ua.match(/(?:Chrome|CriOS)\\/([0-9.]+)/i);\n          if (match) {\n            browser = 'Chrome';\n            browserVersion = match[1];\n          } else {\n            match = ua.match(/Version\\/([0-9.]+).*Safari/i);\n            if (match) {\n              browser = 'Safari';\n              browserVersion = match[1];\n            }\n          }\n        }\n      }\n    }\n\n    return {\n      device_category: deviceCategory,\n      browser: browser,\n      browser_version: browserVersion,\n      operating_system: operatingSystem\n    };\n  }\n\n  function trackCustomColorFunnel(step, details){\n    try {\n      var entry = getCustomColorFunnelEntry();\n      var environment = getCustomColorFunnelEnvironment();\n      var eventData = {\n        step: String(step || ''),\n        product_type: '',\n        formula_choice: '',\n        outcome: '',\n        entry_channel: entry.entry_channel || 'unknown',\n        landing_group: entry.landing_group || 'other',\n        device_category: environment.device_category,\n        browser: environment.browser,\n        browser_version: environment.browser_version,\n        operating_system: environment.operating_system,\n        modal_required_fields: '',\n        modal_block_reason: ''\n      };\n      var elapsedFromOpen;\n      var elapsedFromPrevious;\n      var previousStep;\n      var timedModalStep;\n      var trace;\n\n      if (!eventData.step) return;\n      if (window.PS && window.PS.Search) {\n        var searchSessionId = window.PS.Search.sessionId();\n        if (searchSessionId) eventData.search_session_id = searchSessionId;\n      }\n      if (details) {\n        eventData.product_type = String(details.product_type || '');\n        eventData.formula_choice = String(details.formula_choice || '');\n        eventData.outcome = String(details.outcome || '');\n        eventData.modal_required_fields = String(details.modal_required_fields || '');\n        eventData.modal_block_reason = String(details.modal_block_reason || '');\n        timedModalStep = normalizeVehicleModalFunnelStep(eventData.step);\n        if (timedModalStep && timedModalStep !== 'vehicle_modal_open') {\n          elapsedFromOpen = parseInt(details.elapsed_ms_from_modal_open, 10);\n          elapsedFromPrevious = parseInt(details.elapsed_ms_from_previous_step, 10);\n          previousStep = normalizeVehicleModalFunnelStep(details.previous_step);\n          if (!isNaN(elapsedFromOpen) && elapsedFromOpen >= 0) eventData.elapsed_ms_from_modal_open = elapsedFromOpen;\n          if (!isNaN(elapsedFromPrevious) && elapsedFromPrevious >= 0) eventData.elapsed_ms_from_previous_step = elapsedFromPrevious;\n          if (previousStep) eventData.previous_step = previousStep;\n        }\n      }\n\n      try {\n        trace = JSON.parse(window.sessionStorage.getItem('ps_custom_color_funnel_trace') || '[]');\n        if (!trace || typeof trace.push !== 'function') trace = [];\n        trace.push(eventData);\n        if (trace.length > 50) trace = trace.slice(trace.length - 50);\n        window.sessionStorage.setItem('ps_custom_color_funnel_trace', JSON.stringify(trace));\n      } catch (_eTrace) {}\n\n      try {\n        if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') {\n          window.Shopify.analytics.publish('paintscratch:custom_color_funnel', eventData);\n        }\n      } catch (_ePublish) {}\n    } catch (_eTracking) {}\n  }\n\n  function normalizeVehicleModalFunnelStep(step){\n    var allowed = {\n      vehicle_modal_open: true,\n      vehicle_year_select_open: true,\n      vehicle_year_selected: true,\n      vehicle_model_load_requested: true,\n      vehicle_model_load_succeeded: true,\n      vehicle_model_load_failed: true,\n      vehicle_model_empty: true,\n      vehicle_model_selected: true,\n      vehicle_factory_code_shown: true,\n      vehicle_factory_code_selected: true,\n      vehicle_continue_clicked: true,\n      vehicle_continue_blocked: true,\n      vehicle_modal_closed: true,\n      vehicle_modal_continue: true\n    };\n    var normalized = String(step || '');\n    return allowed[normalized] ? normalized : '';\n  }\n\n  function readVehicleModalFunnelClock(clockType){\n    var value = null;\n    try {\n      if (clockType === 'performance' && window.performance && typeof window.performance.now === 'function') {\n        value = window.performance.now();\n      } else if (clockType === 'date') {\n        value = new Date().getTime();\n      }\n    } catch (_eClock) {\n      value = null;\n    }\n    return typeof value === 'number' && isFinite(value) ? value : null;\n  }\n\n  function chooseVehicleModalFunnelClock(){\n    var performanceValue = readVehicleModalFunnelClock('performance');\n    if (performanceValue !== null) return { type: 'performance', value: performanceValue };\n    return { type: 'date', value: readVehicleModalFunnelClock('date') };\n  }\n\n  function endVehicleModalFunnel(controller){\n    var state = controller && controller._vehicleModalFunnelState;\n    if (!state) return;\n    if (state.visibility_handler && typeof document !== 'undefined' && document.removeEventListener) {\n      document.removeEventListener('visibilitychange', state.visibility_handler, false);\n    }\n    state.active = false;\n    if (controller._vehicleModalFunnelState === state) controller._vehicleModalFunnelState = null;\n  }\n\n  function beginVehicleModalFunnel(controller, attempt, details){\n    var clock;\n    var state;\n    if (!attempt || attempt.opened) return controller && controller._vehicleModalFunnelState;\n    attempt.opened = true;\n    endVehicleModalFunnel(controller);\n    clock = chooseVehicleModalFunnelClock();\n    state = {\n      active: true,\n      clock_type: clock.type,\n      opened_at: clock.value,\n      last_clock_at: clock.value,\n      previous_step_at: clock.value,\n      previous_step: 'vehicle_modal_open',\n      timing_valid: clock.value !== null,\n      visibility_handler: null\n    };\n    if (typeof document !== 'undefined') {\n      if (document.hidden) state.timing_valid = false;\n      if (document.addEventListener) {\n        state.visibility_handler = function(){\n          if (document.hidden) state.timing_valid = false;\n        };\n        document.addEventListener('visibilitychange', state.visibility_handler, false);\n      }\n    }\n    if (controller) controller._vehicleModalFunnelState = state;\n    trackCustomColorFunnel('vehicle_modal_open', details || {});\n    return state;\n  }\n\n  function trackVehicleModalFunnel(controller, step, details){\n    var key;\n    var now = null;\n    var state = controller && controller._vehicleModalFunnelState;\n    var payload = {};\n    var normalizedStep = normalizeVehicleModalFunnelStep(step);\n    if (details) {\n      for (key in details) {\n        if (Object.prototype.hasOwnProperty.call(details, key)) payload[key] = details[key];\n      }\n    }\n    if (state && state.active) {\n      payload.previous_step = state.previous_step;\n      if (state.timing_valid) {\n        now = readVehicleModalFunnelClock(state.clock_type);\n        if (now === null) {\n          state.timing_valid = false;\n        } else {\n          if (now < state.last_clock_at) now = state.last_clock_at;\n          state.last_clock_at = now;\n          payload.elapsed_ms_from_modal_open = Math.max(0, Math.round(now - state.opened_at));\n          payload.elapsed_ms_from_previous_step = Math.max(0, Math.round(now - state.previous_step_at));\n        }\n      }\n    }\n    trackCustomColorFunnel(step, payload);\n    if (state && state.active && normalizedStep) {\n      state.previous_step = normalizedStep;\n      if (state.timing_valid && now !== null) state.previous_step_at = now;\n    }\n  }\n\n  function funnelProductTypeFromItems(items){\n    var raw = '';\n    var match;\n    try {\n      if (items && items.length && items[0] && items[0].properties) {\n        raw = String(items[0].properties._ps_product_slug || items[0].properties.ps_product_slug || '').toLowerCase();\n      }\n      match = raw.match(/(?:^|kit-)(pen|bottle|spray|pro)(?:-|$)/);\n      return match && match[1] ? match[1] : '';\n    } catch (_eProductType) {\n      return '';\n    }\n  }\n\n  function staticYearOptions(){\n    var out = [], cur = new Date().getFullYear();\n    for (var y = cur; y >= CONFIG.minYear; y--) out.push(String(y));\n    return out;\n  }\n\n  function sanitizeYears(list){\n    if (!list || !list.length) return [];\n    var map = {}, out = [];\n    for (var i=0;i<list.length;i++){\n      var s = String(list[i] == null ? '' : list[i]).replace(/\\D/g,'');\n      if (s && !map[s]) { map[s]=1; out.push(s); }\n    }\n    out.sort(function(a,b){ return parseInt(b,10) - parseInt(a,10); });\n    return out;\n  }\n\n  function sanitizeFactoryCodes(list){\n    if (!list || !list.length) return [];\n    var map = {}, out = [];\n    for (var i=0;i<list.length;i++){\n      var s = String(list[i] == null ? '' : list[i]).trim();\n      if (!s) continue;\n      var key = s.toLowerCase();\n      if (!map[key]) {\n        map[key] = 1;\n        out.push(s);\n      }\n    }\n    return out;\n  }\n\n  function sanitizeModels(list){\n    if (!list || !list.length) return [];\n    var map = {}, out = [];\n    for (var i=0;i<list.length;i++){\n      var s = String(list[i] == null ? '' : list[i]).replace(/^\\s+|\\s+$/g, '');\n      var key = s.toLowerCase();\n      if (!s || map[key]) continue;\n      map[key] = 1;\n      out.push(s);\n    }\n    return out;\n  }\n\n  function isAllModelsValue(value){\n    return sanitizeModelKey(value) === 'all models';\n  }\n\n  function onlyAllModelsValue(list){\n    var models = sanitizeModels(list || []);\n    if (models.length !== 1) return '';\n    return isAllModelsValue(models[0]) ? models[0] : '';\n  }\n\n  function escapeHtml(val){\n    return String(val == null ? '' : val)\n      .replace(/&/g, '&amp;')\n      .replace(/</g, '&lt;')\n      .replace(/>/g, '&gt;')\n      .replace(/\"/g, '&quot;')\n      .replace(/'/g, '&#39;');\n  }\n\n  function normalizeModalContextText(val){\n    return String(val == null ? '' : val).replace(/\\s+/g, ' ').replace(/^\\s+|\\s+$/g, '');\n  }\n\n  function resolveModalContextImageUrl(img){\n    var src = '';\n    if (!img) return '';\n    src = String(img.getAttribute('data-src') || img.getAttribute('src') || '');\n    if (img.currentSrc) src = String(img.currentSrc || src || '');\n    if (!src || src.indexOf('data:') === 0) return '';\n    return src;\n  }\n\n  function readModalContextImage(img){\n    var src = resolveModalContextImageUrl(img);\n    var width = 0;\n    var height = 0;\n    if (!src) return null;\n    width = parseInt(img.getAttribute('width'), 10) || img.naturalWidth || img.width || 0;\n    height = parseInt(img.getAttribute('height'), 10) || img.naturalHeight || img.height || 0;\n    return {\n      src: src,\n      alt: String(img.getAttribute('alt') || ''),\n      width: width,\n      height: height\n    };\n  }\n\n  function normalizeModalContextUrl(val){\n    var src = String(val == null ? '' : val);\n    var a = null;\n    if (!src) return '';\n    if (src.indexOf('//') === 0) return window.location.protocol + src;\n    if (src.indexOf('/') === 0) return window.location.origin + src;\n    if (/^https?:\\/\\//i.test(src)) return src;\n    try {\n      a = document.createElement('a');\n      a.href = src;\n      return String(a.href || src);\n    } catch (_e) {}\n    return src;\n  }\n\n  function readModalContextFromKitSelection(startNode){\n    var node = startNode;\n    var guard = 0;\n    var input = null;\n    var row = null;\n    var thumb = null;\n    var container = null;\n    var src = '';\n    var name = '';\n    var image = null;\n    while (node && node !== document && guard++ < 12) {\n      if (node.querySelector) {\n        input = node.querySelector('.ps-kit-options-container .ps-kit-input:checked');\n        if (input) break;\n      }\n      node = node.parentNode;\n    }\n    if (!input) return null;\n    row = input.closest ? input.closest('.ps-kit-row') : null;\n    container = input.closest ? input.closest('.ps-kit-options-container') : null;\n    src = normalizeModalContextUrl(input.getAttribute('data-img') || '');\n    name = normalizeModalContextText(input.getAttribute('data-ps-kit-name') || '');\n    if (!name && row && row.querySelector) {\n      name = normalizeModalContextText((row.querySelector('.ps-kit-title') || {}).textContent || '');\n    }\n    if (!name && container) {\n      name = normalizeModalContextText(container.getAttribute('data-ps-base-product-type') || '');\n    }\n    if (!src && row && row.querySelector) {\n      thumb = row.querySelector('.ps-kit-thumb img');\n      image = readModalContextImage(thumb);\n      if (image && image.src) {\n        image.name = name;\n        if (!image.alt) image.alt = name;\n        return image;\n      }\n    }\n    if (!src) return null;\n    thumb = row && row.querySelector ? row.querySelector('.ps-kit-thumb img') : null;\n    return {\n      src: src,\n      alt: (thumb && thumb.getAttribute && thumb.getAttribute('alt')) ? String(thumb.getAttribute('alt')) : name,\n      width: thumb ? (parseInt(thumb.getAttribute('width'), 10) || thumb.naturalWidth || thumb.width || 0) : 0,\n      height: thumb ? (parseInt(thumb.getAttribute('height'), 10) || thumb.naturalHeight || thumb.height || 0) : 0,\n      name: name\n    };\n  }\n\n  function readModalContextNameFromNode(startNode){\n    var node = startNode;\n    var guard = 0;\n    var text = '';\n    while (node && node !== document && guard++ < 12) {\n      if (node.getAttribute) {\n        text = normalizeModalContextText(node.getAttribute('data-ps-product-type') || '');\n        if (text) return text;\n      }\n      node = node.parentNode;\n    }\n    return '';\n  }\n\n  function modalContextNameFromSlug(rawSlug){\n    var raw = String(rawSlug == null ? '' : rawSlug).toLowerCase();\n    var base = '';\n    var label = '';\n    var isKit = false;\n    if (!raw) return '';\n    isKit = /(^|-)kit(-|$)/.test(raw);\n    base = baseSlugFromValue(raw);\n    if (!base && raw.indexOf('pen') > -1) base = 'pen';\n    if (!base && raw.indexOf('bottle') > -1) base = 'bottle';\n    if (!base && raw.indexOf('spray') > -1) base = 'spray';\n    if (!base && raw.indexOf('pro') > -1) base = 'pro';\n    if (base === 'pen') label = 'Paint Pen';\n    else if (base === 'bottle') label = 'Bottle';\n    else if (base === 'spray') label = 'Spray Can';\n    else if (base === 'pro') label = 'Paint Only';\n    if (!label) return '';\n    return isKit ? (label + ' Kit') : label;\n  }\n\n  function readModalContextNameFromPathname(pathname){\n    var path = String(pathname == null ? '' : pathname);\n    var match = path.match(/\\/products\\/([^\\/?#]+)/i);\n    if (!match) match = path.match(/\\/colors\\/[^\\/]+\\/[^\\/]+\\/([^\\/?#]+)/i);\n    if (!match || !match[1]) return '';\n    return modalContextNameFromSlug(match[1]);\n  }\n\n  function readModalContextNameFromDocument(){\n    var checked = document.querySelector('.ps-kit-input:checked');\n    var row = null;\n    var node = null;\n    var text = '';\n    if (checked) {\n      text = normalizeModalContextText(checked.getAttribute('data-ps-kit-name') || '');\n      if (text) return text;\n      row = checked.closest ? checked.closest('.ps-kit-row') : null;\n      if (row && row.querySelector) {\n        text = normalizeModalContextText((row.querySelector('.ps-kit-title') || {}).textContent || '');\n        if (text) return text;\n      }\n    }\n    node = document.querySelector('.ps-kit-row.is-selected .ps-kit-title, .product__title h1, .product-single__title, h1');\n    text = normalizeModalContextText(node ? node.textContent : '');\n    return text;\n  }\n\n  function normalizeVariantModalContextText(val){\n    return normalizeModalContextText(String(val == null ? '' : val).replace(/Variant sold out or unavailable/gi, ''));\n  }\n\n  function readModalContextVariantNameFromNode(startNode){\n    var node = startNode;\n    var guard = 0;\n    var checked = null;\n    var label = null;\n    var next = null;\n    var selectedOption = null;\n    var text = '';\n    while (node && node !== document && guard++ < 12) {\n      if (node.querySelector) {\n        checked = node.querySelector('variant-selects input[type=\"radio\"]:checked');\n        if (checked) {\n          label = null;\n          next = checked.nextSibling;\n          while (next) {\n            if (next.tagName && String(next.tagName).toLowerCase() === 'label') {\n              label = next;\n              break;\n            }\n            next = next.nextSibling;\n          }\n          if (!label && checked.id) {\n            label = node.querySelector('label[for=\"' + checked.id.replace(/\"/g, '\\\\\"') + '\"]');\n          }\n          text = normalizeVariantModalContextText(label ? label.textContent : checked.value);\n          if (text) return text;\n        }\n        selectedOption = node.querySelector('variant-selects select option:checked');\n        if (selectedOption) {\n          text = normalizeVariantModalContextText(selectedOption.textContent || selectedOption.value);\n          if (text) return text;\n        }\n      }\n      node = node.parentNode;\n    }\n    return '';\n  }\n\n  function findModalContextImageFromNode(startNode){\n    var node = startNode;\n    var selectors = [\n      '.quick-add__product-media img',\n      '.card__media img',\n      '.product__media img',\n      '.product-media-modal__content img',\n      '.product__media-toggle img',\n      'img'\n    ];\n    var guard = 0;\n    var i = 0;\n    var images = null;\n    var image = null;\n    while (node && node !== document && guard++ < 12) {\n      if (node.querySelectorAll) {\n        for (i = 0; i < selectors.length; i++) {\n          images = node.querySelectorAll(selectors[i]);\n          if (!images || !images.length) continue;\n          image = readModalContextImage(images[0]);\n          if (image) return image;\n        }\n      }\n      node = node.parentNode;\n    }\n    return null;\n  }\n\n  function mergePayload(base, extra){\n    var out = {};\n    var key = '';\n    var src = null;\n    var sources = [base, extra];\n    var i = 0;\n    for (i = 0; i < sources.length; i++) {\n      src = sources[i];\n      if (!src || typeof src !== 'object') continue;\n      for (key in src) {\n        if (!src.hasOwnProperty(key)) continue;\n        if (typeof src[key] === 'undefined') continue;\n        out[key] = src[key];\n      }\n    }\n    return out;\n  }\n\n  function apiBase(){\n    try {\n      if (window.PS && PS.u && typeof PS.u.apiBase === 'function') return PS.u.apiBase();\n      if (window.paintscratchTheme && window.paintscratchTheme.psUrl) {\n        return String(window.paintscratchTheme.psUrl).replace(/\\/+$/, '') + '/api/';\n      }\n    } catch (_e) {}\n    return '';\n  }\n\n  function sanitizeModelKey(val){\n    return String(val == null ? '' : val)\n      .replace(/\\s+/g, ' ')\n      .replace(/^\\s+|\\s+$/g, '')\n      .toLowerCase();\n  }\n\n  function resolveVehicleModelFromOptions(rawModel, modelOptions){\n    var value = trimPropValue(rawModel);\n    var key = sanitizeModelKey(value);\n    var optionsList = modelOptions || [];\n    var idx = 0;\n    var optionValue = '';\n    if (!value) return '';\n    for (idx = 0; idx < optionsList.length; idx++) {\n      optionValue = trimPropValue(optionsList[idx]);\n      if (optionValue && optionValue === value) return optionValue;\n    }\n    for (idx = 0; idx < optionsList.length; idx++) {\n      optionValue = trimPropValue(optionsList[idx]);\n      if (optionValue && sanitizeModelKey(optionValue) === key) return optionValue;\n    }\n    return '';\n  }\n\n  function classifyVehicleModelResponse(data){\n    if (Object.prototype.toString.call(data) === '[object Array]') {\n      return { ok: true, models: data };\n    }\n    if (data && Object.prototype.toString.call(data.models) === '[object Array]') {\n      return { ok: true, models: data.models };\n    }\n    return { ok: false, models: [] };\n  }\n\n  function requestVehicleModelList(url, done){\n    var cb = typeof done === 'function' ? done : function(){};\n    var xhr = null;\n    var data = null;\n    var parsed = null;\n    var completed = false;\n    function finish(err, models){\n      if (completed) return;\n      completed = true;\n      cb(err, models || []);\n    }\n    if (!url) {\n      finish(null, []);\n      return;\n    }\n    xhr = new XMLHttpRequest();\n    xhr.open('GET', url, true);\n    xhr.timeout = 4000;\n    xhr.onreadystatechange = function(){\n      if (xhr.readyState !== 4) return;\n      if (!(xhr.status >= 200 && xhr.status < 300)) {\n        finish('Unable to load models', []);\n        return;\n      }\n      try { data = JSON.parse(xhr.responseText || '[]'); } catch (_e) {\n        finish('Unable to load models', []);\n        return;\n      }\n      parsed = classifyVehicleModelResponse(data);\n      if (!parsed.ok) {\n        finish('Unable to load models', []);\n        return;\n      }\n      finish(null, sanitizeModels(parsed.models));\n    };\n    xhr.onerror = function(){ finish('Unable to load models', []); };\n    xhr.ontimeout = function(){ finish('Unable to load models', []); };\n    xhr.send(null);\n  }\n\n  function beginVehicleModalSession(controller){\n    var next = 1;\n    if (!controller) return next;\n    next = (parseInt(String(controller._vehicleModalSession || 0), 10) || 0) + 1;\n    controller._vehicleModalSession = next;\n    return next;\n  }\n\n  function invalidateVehicleModalSession(controller, session){\n    if (!controller || controller._vehicleModalSession !== session) return;\n    controller._vehicleModalSession = session + 1;\n  }\n\n  function isVehicleModalSessionCurrent(controller, session, root){\n    if (!controller || controller._vehicleModalSession !== session) return false;\n    if (!root || !root.getAttribute) return false;\n    return root.getAttribute('aria-hidden') === 'false';\n  }\n\n  function shouldApplyVehicleModelResponse(controller, session, root, currentRequestId, localRequestId){\n    return isVehicleModalSessionCurrent(controller, session, root) && currentRequestId === localRequestId;\n  }\n\n  function resolveVehicleCheckoutStep(state){\n    var value = state || {};\n    if (value.isCustom === false) return 'cart';\n    if (!value.yearValid) return 'vehicle';\n    if (value.modelRequired && !value.modelValid) return 'vehicle';\n    if (value.factoryRequired && !value.factoryValid) return 'factory';\n    if (value.formulaRequired) return 'formula';\n    return 'cart';\n  }\n\n  function resolveVehicleModalAction(state){\n    var value = state || {};\n    var nextStep = resolveVehicleCheckoutStep(value);\n    if ((value.factoryRequired && !value.factoryValid) || nextStep === 'factory' || nextStep === 'formula') {\n      return { label: 'Continue', ariaLabel: 'Continue to the next required vehicle step' };\n    }\n    if (value.repairPlanReview === true) return { label: 'Review repair products', ariaLabel: 'Confirm vehicle details and review repair products' };\n    return { label: 'Add to Cart', ariaLabel: 'Add selected paint product to cart' };\n  }\n\n  function resolveSavedVehicleModelOutcome(rawModel, modelOptions, err){\n    var options = sanitizeModels(modelOptions || []);\n    var resolved = '';\n    if (err) return { step: 'vehicle', model: '' };\n    if (!options.length) return { step: 'optional', model: '' };\n    resolved = resolveVehicleModelFromOptions(rawModel, options);\n    if (resolved) return { step: 'valid', model: resolved };\n    return { step: 'vehicle', model: '' };\n  }\n\n  function resolveTrustedScopedVehicleModelOutcome(cc, ssr, year, modelOptions, err){\n    if (!canUseVehicleScope(cc, ssr) || trimPropValue(cc && cc.year) !== trimPropValue(year)) {\n      return { step: 'vehicle', model: '' };\n    }\n    return resolveSavedVehicleModelOutcome('', modelOptions || [], err);\n  }\n\n  function resolveAllowedFactoryCode(rawCode, factoryOptions){\n    var code = trimPropValue(rawCode);\n    var options = factoryOptions || [];\n    var i = 0;\n    if (!code) return '';\n    for (i = 0; i < options.length; i++) {\n      if (trimPropValue(options[i]).toLowerCase() === code.toLowerCase()) return trimPropValue(options[i]);\n    }\n    return '';\n  }\n\n  function findReusableFactoryCodeFromCart(cart, context, factoryOptions){\n    var items = cart && cart.items && cart.items.length ? cart.items : [];\n    var target = context || {};\n    var allowed = factoryOptions || [];\n    var targetMake = slugifyVehicleToken(target.make_slug || target.make);\n    var targetYear = trimPropValue(target.year);\n    var targetModel = sanitizeModelKey(target.model);\n    var targetColorSlug = slugifyVehicleToken(target.color_slug);\n    var targetColorName = slugifyVehicleToken(target.color);\n    var targetColorCode = slugifyVehicleToken(target.code);\n    var found = '';\n    var i = 0;\n    var props = null;\n    var itemMake = '';\n    var itemYear = '';\n    var itemModel = '';\n    var itemColorSlug = '';\n    var itemColorName = '';\n    var itemColorCode = '';\n    var itemProduct = '';\n    var normalizedItemProduct = '';\n    var hasColorIdentity = false;\n    var routeHandles = getCustomColorRouteHandleMap();\n    var code = '';\n    if (!targetModel || !targetColorSlug || isFreshVehicleSearchContext(target)) return '';\n    for (i = 0; i < items.length; i++) {\n      props = items[i] && items[i].properties && typeof items[i].properties === 'object' ? items[i].properties : {};\n      itemProduct = trimPropValue(props._ps_product_slug || props.ps_product_slug).toLowerCase();\n      if (!routeHandles[itemProduct]) {\n        normalizedItemProduct = baseSlugFromValue(itemProduct);\n        if (!normalizedItemProduct) normalizedItemProduct = baseSlugFromValue(items[i] && (items[i].handle || items[i].url));\n        itemProduct = normalizedItemProduct;\n      }\n      hasColorIdentity = !!(\n        trimPropValue(props._ps_color_slug) ||\n        (trimPropValue(props.Make) && trimPropValue(props['Color Name']) && trimPropValue(props['Color Code']))\n      );\n      if (!hasColorIdentity || !routeHandles[itemProduct]) continue;\n      itemMake = slugifyVehicleToken(props._ps_make_slug || props.Make);\n      itemYear = trimPropValue(props.Year);\n      itemModel = sanitizeModelKey(props.Model);\n      itemColorSlug = slugifyVehicleToken(props._ps_color_slug);\n      itemColorName = slugifyVehicleToken(props['Color Name']);\n      itemColorCode = slugifyVehicleToken(props['Color Code']);\n      if (!targetMake || itemMake !== targetMake || !targetYear || itemYear !== targetYear) continue;\n      if (targetModel && itemModel !== targetModel) continue;\n      if (itemColorSlug) {\n        if (itemColorSlug !== targetColorSlug) continue;\n      } else if (!targetColorName || !targetColorCode || itemColorName !== targetColorName || itemColorCode !== targetColorCode) {\n        continue;\n      }\n      code = resolveAllowedFactoryCode(props[FACTORY_PROP_KEY], allowed);\n      if (!code) continue;\n      if (found && found.toLowerCase() !== code.toLowerCase()) return '';\n      found = code;\n    }\n    return found;\n  }\n\n  function requestCartSnapshot(done){\n    var cb = typeof done === 'function' ? done : function(){};\n    var xhr = new XMLHttpRequest();\n    var completed = false;\n    function finish(err, cart){\n      if (completed) return;\n      completed = true;\n      cb(err || null, cart || null);\n    }\n    xhr.open('GET', '/cart.js', true);\n    xhr.timeout = 4000;\n    xhr.onreadystatechange = function(){\n      var cart = null;\n      if (xhr.readyState !== 4) return;\n      if (!(xhr.status >= 200 && xhr.status < 300)) {\n        finish('Unable to read cart', null);\n        return;\n      }\n      try { cart = JSON.parse(xhr.responseText || '{}'); } catch (_e) { cart = null; }\n      if (!cart || Object.prototype.toString.call(cart.items) !== '[object Array]') {\n        finish('Unable to read cart', null);\n        return;\n      }\n      finish(null, cart);\n    };\n    xhr.onerror = function(){ finish('Unable to read cart', null); };\n    xhr.ontimeout = function(){ finish('Unable to read cart', null); };\n    xhr.send(null);\n  }\n\n  function claimCartRequest(controller){\n    if (!controller || controller._cartRequestInFlight) return false;\n    controller._cartRequestInFlight = true;\n    return true;\n  }\n\n  function releaseCartRequest(controller){\n    if (controller) controller._cartRequestInFlight = false;\n  }\n\n  function claimAtcFlow(controller){\n    if (!controller || controller._atcFlowInFlight) return false;\n    controller._atcFlowInFlight = true;\n    return true;\n  }\n\n  function releaseAtcFlow(controller){\n    if (controller) controller._atcFlowInFlight = false;\n  }\n\n  function normalizeVehicleMakeOptions(list){\n    var source = list || [];\n    var out = [];\n    var seen = {};\n    var item = null;\n    var name = '';\n    var slug = '';\n    var key = '';\n    var i = 0;\n    if (!source.length) return [];\n    for (i = 0; i < source.length; i++) {\n      item = source[i];\n      if (item && typeof item === 'object') {\n        name = trimPropValue(item.make || item.name || item.label || item.value || '');\n        slug = trimPropValue(item.make_slug || item.slug || item.handle || '');\n      } else {\n        name = trimPropValue(item);\n        slug = '';\n      }\n      if (!name) continue;\n      if (!slug) slug = slugifyVehicleToken(name);\n      key = name.toLowerCase();\n      if (seen[key]) continue;\n      seen[key] = 1;\n      out.push({ make: name, make_slug: slug });\n    }\n    return out;\n  }\n\n  function requestVehicleJsonList(url, keyName, done){\n    var cb = typeof done === 'function' ? done : function(){};\n    var xhr = null;\n    var data = null;\n    var list = [];\n    var completed = false;\n    function finish(err, values){\n      if (completed) return;\n      completed = true;\n      cb(err, values || []);\n    }\n    if (!url) {\n      finish(null, []);\n      return;\n    }\n    xhr = new XMLHttpRequest();\n    xhr.open('GET', url, true);\n    xhr.timeout = 4000;\n    xhr.onreadystatechange = function(){\n      if (xhr.readyState !== 4) return;\n      if (!(xhr.status >= 200 && xhr.status < 300)) {\n        finish('Unable to load options', []);\n        return;\n      }\n      try { data = JSON.parse(xhr.responseText || '[]'); } catch (_e) { data = []; }\n      if (Object.prototype.toString.call(data) === '[object Array]') {\n        list = data;\n      } else if (data && Object.prototype.toString.call(data[keyName]) === '[object Array]') {\n        list = data[keyName];\n      } else if (data && data.data && Object.prototype.toString.call(data.data) === '[object Array]') {\n        list = data.data;\n      } else {\n        list = [];\n      }\n      finish(null, list);\n    };\n    xhr.onerror = function(){ finish('Unable to load options', []); };\n    xhr.ontimeout = function(){ finish('Unable to load options', []); };\n    xhr.send(null);\n  }\n\n  function fetchVehicleMakes(done){\n    requestVehicleJsonList(apiBase() + 'shopify/makes', 'makes', function(err, list){\n      done(err, normalizeVehicleMakeOptions(list || []));\n    });\n  }\n\n  function fetchVehicleYearsForMake(make, done){\n    var value = trimPropValue(make);\n    if (!value) {\n      done(null, []);\n      return;\n    }\n    requestVehicleJsonList(apiBase() + 'shopify/years/' + encodeURIComponent(value), 'years', function(err, list){\n      done(err, sanitizeYears(list || []));\n    });\n  }\n\n  function resolveVehicleLookupContext(form, payload){\n    var cc = readPsCc();\n    var makeInput = form && form.querySelector ? form.querySelector('input[name=\"properties[Make]\"]') : null;\n    var makeSlugInput = form && form.querySelector ? form.querySelector('input[name=\"properties[_ps_make_slug]\"]') : null;\n    var colorInput = form && form.querySelector ? form.querySelector('input[name=\"properties[Color Name]\"]') : null;\n    var codeInput = form && form.querySelector ? form.querySelector('input[name=\"properties[Color Code]\"]') : null;\n    var colorSlugInput = form && form.querySelector ? form.querySelector('input[name=\"properties[_ps_color_slug]\"]') : null;\n    var context = {\n      make: '',\n      make_slug: '',\n      color: '',\n      code: '',\n      color_slug: '',\n      ps_from_search: isFreshVehicleSearchContext(cc)\n    };\n\n    if (makeInput && typeof makeInput.value !== 'undefined') context.make = trimPropValue(makeInput.value);\n    if (!context.make && payload && payload.make) context.make = trimPropValue(payload.make);\n    if (!context.make && cc && cc.make) context.make = trimPropValue(cc.make);\n\n    if (makeSlugInput && typeof makeSlugInput.value !== 'undefined') context.make_slug = trimPropValue(makeSlugInput.value);\n    if (!context.make_slug && payload && payload.make_slug) context.make_slug = trimPropValue(payload.make_slug);\n    if (!context.make_slug && cc && cc.make_slug) context.make_slug = trimPropValue(cc.make_slug);\n\n    if (colorInput && typeof colorInput.value !== 'undefined') context.color = trimPropValue(colorInput.value);\n    if (!context.color && payload && payload.color) context.color = trimPropValue(payload.color);\n    if (!context.color && cc && cc.color) context.color = trimPropValue(cc.color);\n\n    if (codeInput && typeof codeInput.value !== 'undefined') context.code = trimPropValue(codeInput.value);\n    if (!context.code && payload && payload.code) context.code = trimPropValue(payload.code);\n    if (!context.code && cc && cc.code) context.code = trimPropValue(cc.code);\n\n    if (colorSlugInput && typeof colorSlugInput.value !== 'undefined') context.color_slug = trimPropValue(colorSlugInput.value);\n    if (!context.color_slug && payload && payload.color_slug) context.color_slug = trimPropValue(payload.color_slug);\n    if (!context.color_slug && cc && cc.color_slug) context.color_slug = trimPropValue(cc.color_slug);\n\n    return context;\n  }\n\n  function fetchVehicleModels(context, year, done){\n    var cb = typeof done === 'function' ? done : function(){};\n    var lookup = context && typeof context === 'object' ? context : { make: context };\n    var mk = String(lookup.make == null ? '' : lookup.make).replace(/^\\s+|\\s+$/g, '');\n    var ms = String(lookup.make_slug == null ? '' : lookup.make_slug).replace(/^\\s+|\\s+$/g, '');\n    var cs = String(lookup.color_slug == null ? '' : lookup.color_slug).replace(/^\\s+|\\s+$/g, '');\n    var yr = String(year == null ? '' : year).replace(/^\\s+|\\s+$/g, '');\n    var hasColorLookup = !!(ms && cs);\n\n    if (!yr || (!mk && !ms)) {\n      cb(null, []);\n      return;\n    }\n\n    if (ms && cs) {\n      requestVehicleModelList(\n        apiBase() + 'shopify/cars/' + encodeURIComponent(ms) + '/' + encodeURIComponent(cs) + '/' + encodeURIComponent(yr),\n        function(err, models){\n          cb(err, sanitizeModels(models || []));\n        }\n      );\n      return;\n    }\n\n    if (mk) {\n      requestVehicleModelList(\n        apiBase() + 'shopify/models/' + encodeURIComponent(mk) + '/' + encodeURIComponent(yr),\n        function(err, models){\n          cb(err, sanitizeModels(models || []));\n        }\n      );\n      return;\n    }\n\n    if (!hasColorLookup && !mk) cb(null, []);\n  }\n\n  function vehicleModelLookupCacheKey(context, year){\n    var lookup = context && typeof context === 'object' ? context : {};\n    var makeSlug = slugifyVehicleToken(lookup.make_slug || lookup.make);\n    var colorSlug = trimPropValue(lookup.color_slug).toLowerCase();\n    var yearValue = trimPropValue(year);\n    if (!makeSlug || !colorSlug || !yearValue) return '';\n    return makeSlug + '|' + colorSlug + '|' + yearValue;\n  }\n\n  function readVehicleModelsForController(controller, context, year){\n    var key = vehicleModelLookupCacheKey(context, year);\n    var cache = controller && controller._vehicleModelLookupCache;\n    if (!key || !cache || !Object.prototype.hasOwnProperty.call(cache, key)) return null;\n    return sanitizeModels(cache[key] || []);\n  }\n\n  function rememberVehicleModelsForController(controller, context, year, err, models){\n    var key = vehicleModelLookupCacheKey(context, year);\n    if (!controller || err || !key) return;\n    if (!controller._vehicleModelLookupCache) controller._vehicleModelLookupCache = {};\n    controller._vehicleModelLookupCache[key] = sanitizeModels(models || []);\n  }\n\n  function fetchVehicleModelsForController(controller, context, year, done){\n    var cb = typeof done === 'function' ? done : function(){};\n    var cached = readVehicleModelsForController(controller, context, year);\n    if (cached !== null) {\n      cb(null, cached);\n      return;\n    }\n    fetchVehicleModels(context, year, function(err, models){\n      rememberVehicleModelsForController(controller, context, year, err, models || []);\n      cb(err, sanitizeModels(models || []));\n    });\n  }\n\n  function isHondaAcuraMake(make){\n    var s = String(make || '').toLowerCase();\n    return s === 'honda' || s === 'acura';\n  }\n\n  function hasFactoryCodes(payload){\n    return !!(payload && payload.factory_codes && payload.factory_codes.length);\n  }\n\n  function fetchColorContextFromCookie(done){\n    var cb = typeof done === 'function' ? done : function(){};\n    var cc = readPsCc();\n    var ms = cc && cc.make_slug ? String(cc.make_slug) : '';\n    var cs = cc && cc.color_slug ? String(cc.color_slug) : '';\n    var url = '';\n    var xhr = null;\n    var data = null;\n    var completed = false;\n    function finish(err, detail){\n      if (completed) return;\n      completed = true;\n      cb(err || null, detail || null);\n    }\n    function fail(reason, message){\n      var err = new Error(message || 'Unable to refresh color context.');\n      err.psColorContextFailure = true;\n      err.psColorContextReason = reason;\n      finish(err, null);\n    }\n    if (!ms || !cs) {\n      finish(null, null);\n      return;\n    }\n    url = apiBase() + 'shopify/cars/' + encodeURIComponent(ms) + '/' + encodeURIComponent(cs);\n    if (!url) {\n      finish(null, null);\n      return;\n    }\n    xhr = new XMLHttpRequest();\n    xhr.open('GET', url, true);\n    xhr.timeout = 4000;\n    xhr.onreadystatechange = function(){\n      var detail = null;\n      if (xhr.readyState !== 4) return;\n      if (!(xhr.status >= 200 && xhr.status < 300)) {\n        fail('color_context_http_error', 'Color context refresh returned an HTTP error.');\n        return;\n      }\n      try { data = JSON.parse(xhr.responseText || ''); } catch (_e) { data = null; }\n      if (!data) {\n        fail('color_context_malformed_json', 'Color context refresh returned malformed data.');\n        return;\n      }\n      if (data.valid !== true) {\n        fail('color_context_invalid', 'Color context refresh returned an invalid response.');\n        return;\n      }\n      detail = {\n        make: data.make || cc.make || '',\n        color: data.color || cc.color || '',\n        code: data.code || cc.code || '',\n        hex: data.hex || cc.hex || '',\n        year: cc.year || '',\n        years: Array.isArray(data.years) ? data.years.slice(0) : [],\n        models: Array.isArray(data.models) ? data.models.slice(0) : [],\n        factory_codes: Array.isArray(data.factory_codes) ? data.factory_codes.slice(0) : [],\n        isGuaranteed: data.isGuaranteed !== false,\n        make_slug: data.make_slug || ms,\n        color_slug: data.color_slug || cs,\n        color_context_resolved: true,\n        color_context_key: ms.toLowerCase() + '|' + cs.toLowerCase()\n      };\n      finish(null, detail);\n    };\n    xhr.onerror = function(){ fail('color_context_network', 'Color context refresh failed to connect.'); };\n    xhr.ontimeout = function(){ fail('color_context_timeout', 'Color context refresh timed out.'); };\n    xhr.send(null);\n  }\n\n  function shouldRefreshColorContext(form, payload){\n    var cc = readPsCc();\n    var resolvedKey = '';\n    var props = serializeProperties(form);\n    var years = sanitizeYears((payload && payload.years) || []);\n    if (!isCustomColorLineItem(form, payload || {}, props)) return false;\n    if (!cc || !trimPropValue(cc.make_slug) || !trimPropValue(cc.color_slug)) return false;\n    resolvedKey = trimPropValue(cc.make_slug).toLowerCase() + '|' + trimPropValue(cc.color_slug).toLowerCase();\n    if (payload && payload.color_context_resolved === true && payload.color_context_key === resolvedKey) return false;\n    if (!(\n      trimPropValue(cc.make) ||\n      trimPropValue(cc.color) ||\n      trimPropValue(cc.code) ||\n      trimPropValue(cc.make_slug) ||\n      trimPropValue(cc.color_slug)\n    )) return false;\n    if (!years.length) return true;\n    if (isHondaAcuraMake((payload && payload.make) || cc.make) && !hasFactoryCodes(payload)) return true;\n    return false;\n  }\n\n  function syncControllerPayload(controller, nextPayload){\n    var payload = nextPayload && typeof nextPayload === 'object' ? nextPayload : {};\n    if (!controller) return;\n    controller._lastPayload = payload;\n    controller._years = sanitizeYears((payload && payload.years) || []);\n    controller._factoryCodes = sanitizeFactoryCodes((payload && payload.factory_codes) || []);\n    if (controller.atcForm) {\n      ensureBaseProps(controller.atcForm, payload);\n      ensureSlugProps(controller.atcForm, payload);\n    }\n    if (controller.atcForm && controller.atcBtn && typeof controller.applyCatalyzedSprayOnlyGuard === 'function') {\n      controller.applyCatalyzedSprayOnlyGuard(payload);\n    }\n  }\n\n  function serializeProperties(form){\n    var props = {};\n    var nodes = form ? form.querySelectorAll('input[name^=\"properties[\"],textarea[name^=\"properties[\"]') : [];\n    for (var i=0;i<nodes.length;i++){\n      var n = nodes[i];\n      var m = n.name.match(/^properties\\[(.+)\\]$/);\n      if (m && typeof n.value !== 'undefined') props[m[1]] = n.value;\n    }\n    return props;\n  }\n\n  function readPsCc(){\n    try{\n      if (PS && PS.cc && typeof PS.cc.read === 'function'){\n        var cc = PS.cc.read() || {};\n        if (cc && typeof cc === 'object') return cc;\n      }\n    }catch(_e){}\n    return {};\n  }\n\n  function isVehicleConfirmationRoute(){\n    var path = '';\n    var parts = [];\n    var productSlug = '';\n    var allowed = {\n      pen: true,\n      bottle: true,\n      spray: true,\n      pro: true,\n      'kit-pen': true,\n      'kit-bottle': true,\n      'kit-spray': true\n    };\n    try {\n      path = window.location && window.location.pathname ? String(window.location.pathname) : '';\n    } catch (_e) {\n      path = '';\n    }\n    path = String(path || '').replace(/\\/+$/, '');\n    parts = path.split('/');\n    if (parts.length !== 5 || parts[1] !== 'colors') return false;\n    productSlug = String(parts[4] || '').toLowerCase();\n    return !!allowed[productSlug];\n  }\n\n  function readVehicleConfirmationSsr(){\n    var raw = null;\n    var normalized = null;\n    try {\n      raw = (typeof window !== 'undefined' && window.PS_SSR && typeof window.PS_SSR === 'object') ? window.PS_SSR : null;\n    } catch (_e) {\n      raw = null;\n    }\n    normalized = (PS && PS.ssr && typeof PS.ssr === 'function') ? PS.ssr() : null;\n    raw = raw || {};\n    normalized = normalized || {};\n    return mergePayload(raw, normalized);\n  }\n\n  function vehicleCookieMatchesColor(cc, ssr){\n    var ccMakeSlug = trimPropValue(cc && cc.make_slug).toLowerCase();\n    var ccColorSlug = trimPropValue(cc && cc.color_slug).toLowerCase();\n    var ssrMakeSlug = trimPropValue(ssr && ssr.make_slug).toLowerCase();\n    var ssrColorSlug = trimPropValue(ssr && ssr.color_slug).toLowerCase();\n    return !!(ccMakeSlug && ccColorSlug && ssrMakeSlug && ssrColorSlug && ccMakeSlug === ssrMakeSlug && ccColorSlug === ssrColorSlug);\n  }\n\n  function slugifyVehicleToken(value){\n    return String(value || '').toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+/, '').replace(/-+$/, '');\n  }\n\n  function vehicleCookieMatchesMake(cc, make, ssr){\n    var ccMakeSlug = slugifyVehicleToken(trimPropValue(cc && cc.make_slug) || trimPropValue(cc && cc.make));\n    var ssrMakeSlug = slugifyVehicleToken(trimPropValue(ssr && ssr.make_slug) || trimPropValue(make) || trimPropValue(ssr && ssr.make));\n    return !!(ccMakeSlug && ssrMakeSlug && ccMakeSlug === ssrMakeSlug);\n  }\n\n  function hasTrustedVehicleScope(cc){\n    return !!(cc && (cc.vehicle_scope === true || trimPropValue(cc.vehicle_scope) === 'true'));\n  }\n\n  function isFreshVehicleSearchContext(cc){\n    return !!(cc && (cc.ps_from_search === true || trimPropValue(cc.ps_from_search) === 'true'));\n  }\n\n  function vehicleScopeMatchesSsrOptions(cc, ssr){\n    var year = trimPropValue(cc && cc.year);\n    var model = trimPropValue(cc && cc.model);\n    var years = sanitizeYears((ssr && ssr.years) || []);\n    var models = sanitizeModels((ssr && ssr.models) || []);\n    var yearOk = false;\n    var modelOk = false;\n    var i = 0;\n    if (!model) return false;\n    modelOk = !!resolveVehicleModelFromOptions(model, models);\n    if (!modelOk) return false;\n    if (!year) return true;\n    if (!years.length) return true;\n    for (i = 0; i < years.length; i++) {\n      if (String(years[i]) === String(year)) {\n        yearOk = true;\n        break;\n      }\n    }\n    return yearOk;\n  }\n\n  function canUseVehicleScope(cc, ssr){\n    if (!vehicleCookieMatchesColor(cc, ssr)) return false;\n    if (hasTrustedVehicleScope(cc)) return true;\n    return vehicleScopeMatchesSsrOptions(cc, ssr);\n  }\n\n  function resolveScopedCookieFactoryCode(cc, ssr, factoryOptions){\n    var code = '';\n    var options = factoryOptions || [];\n    if (!canUseVehicleScope(cc, ssr) || isFreshVehicleSearchContext(cc)) return '';\n    code = trimPropValue(cc && cc.factory_code);\n    if (!code) return '';\n    if (options.length) return resolveAllowedFactoryCode(code, options);\n    return code;\n  }\n\n  function canUseVehicleDisplayContext(cc, ssr, make){\n    if (!vehicleCookieMatchesMake(cc, make, ssr)) return false;\n    return vehicleScopeMatchesSsrOptions(cc, ssr);\n  }\n\n  function normalizeStoredVehicleScope(raw){\n    var out = {\n      make: trimPropValue(raw && raw.make),\n      year: trimPropValue(raw && raw.year),\n      model: trimPropValue(raw && raw.model)\n    };\n    if (!out.make) return null;\n    if (out.year && !/^\\d+$/.test(out.year)) {\n      out.year = '';\n      out.model = '';\n    }\n    if (!out.year) out.model = '';\n    return out;\n  }\n\n  function readStoredVehicleDisplayScope(keyPrefix, make, ssr){\n    var storage = null;\n    var key = '';\n    var raw = '';\n    var parsed = null;\n    var normalized = null;\n    var newest = null;\n    var newestTs = 0;\n    var storedTs = 0;\n    var maxAgeMs = 6 * 60 * 60 * 1000;\n    var i = 0;\n    try {\n      storage = window.sessionStorage;\n    } catch(_e) {\n      storage = null;\n    }\n    if (!storage || !storage.length) return null;\n    for (i = 0; i < storage.length; i++) {\n      try {\n        key = storage.key(i);\n      } catch(_e2) {\n        key = '';\n      }\n      if (!key || key.indexOf(keyPrefix) !== 0) continue;\n      try {\n        raw = storage.getItem(key);\n      } catch(_e3) {\n        raw = '';\n      }\n      if (!raw) continue;\n      try {\n        parsed = JSON.parse(raw);\n      } catch(_e4) {\n        parsed = null;\n      }\n      normalized = normalizeStoredVehicleScope(parsed || {});\n      storedTs = parsed && parsed.ts ? parseInt(parsed.ts, 10) : 0;\n      if (!storedTs || isNaN(storedTs) || (Date.now() - storedTs) > maxAgeMs) continue;\n      if (normalized && normalized.make && storedVehicleMatchesMake(normalized, make, ssr) && storedTs > newestTs) {\n        newest = normalized;\n        newestTs = storedTs;\n      }\n    }\n    return newest;\n  }\n\n  function storedVehicleMatchesMake(scope, make, ssr){\n    var scopeMakeSlug = slugifyVehicleToken(scope && scope.make);\n    var makeSlug = slugifyVehicleToken(make || (ssr && ssr.make));\n    if (!(scopeMakeSlug && makeSlug && scopeMakeSlug === makeSlug)) return false;\n    if (scope && (scope.year || scope.model)) return vehicleScopeMatchesSsrOptions(scope, ssr);\n    return true;\n  }\n\n  function buildVehicleDisplayContext(make, ssr){\n    var cc = readPsCc();\n    var useVehicleFields = canUseVehicleDisplayContext(cc, ssr, make);\n    var displayMake = trimPropValue(make || (ssr && ssr.make));\n    var storedScope = readStoredVehicleDisplayScope('ps-submitted-search:', displayMake, ssr) || readStoredVehicleDisplayScope('ps-edit-restore:', displayMake, ssr);\n    var year = '';\n    var model = '';\n\n    if (useVehicleFields) {\n      year = trimPropValue(cc && cc.year);\n      model = trimPropValue(cc && cc.model);\n      displayMake = trimPropValue(cc && cc.make) || displayMake;\n    }\n    if (storedVehicleMatchesMake(storedScope, displayMake, ssr)) {\n      if (!displayMake) displayMake = trimPropValue(storedScope && storedScope.make);\n      if (!year) year = trimPropValue(storedScope && storedScope.year);\n      if (!model) model = trimPropValue(storedScope && storedScope.model);\n      if (year || model) useVehicleFields = true;\n    }\n\n    return {\n      make: displayMake,\n      year: year,\n      model: model,\n      useVehicleFields: useVehicleFields,\n      vehicleText: composeVehicleConfirmationLine(displayMake, year, model)\n    };\n  }\n\n  function normalizeVehicleConfirmationImageUrl(url){\n    var value = trimPropValue(url);\n    if (!value) return '';\n    if (/^https?:\\/\\//i.test(value) || value.charAt(0) === '/') return value;\n    return '';\n  }\n\n  function vehicleConfirmationSwatchUrl(ssr, hex){\n    var image = trimPropValue(ssr && (ssr.swatch_url || ssr.swatchUrl));\n    var base = '';\n    if (!image) {\n      image = trimPropValue(ssr && ssr.image);\n      if (image && image.indexOf('/img/swatch/') === -1) image = '';\n    }\n    if (!image && hex) {\n      try {\n        if (window.paintscratchTheme && window.paintscratchTheme.psUrl) {\n          base = String(window.paintscratchTheme.psUrl).replace(/\\/+$/, '');\n        }\n      } catch (_e) {\n        base = '';\n      }\n      if (!base) {\n        base = String(window.location.protocol || 'https:') + '//' + String(window.location.host || '');\n      }\n      image = base + '/img/swatch/' + hex.toUpperCase() + '.jpg';\n    }\n    return normalizeVehicleConfirmationImageUrl(image);\n  }\n\n  function buildVehicleConfirmationHubUrl(ssr){\n    var path = '';\n    var match = null;\n    var makeSlug = '';\n    var colorSlug = '';\n    try {\n      path = window.location && window.location.pathname ? String(window.location.pathname) : '';\n    } catch (_e) {\n      path = '';\n    }\n    match = path.match(/^\\/colors\\/([^\\/?#]+)\\/([^\\/?#]+)(?:\\/|$)/i);\n    if (match && match[1] && match[2]) {\n      return '/colors/' + match[1] + '/' + match[2] + '/';\n    }\n    makeSlug = trimPropValue(ssr && ssr.make_slug).toLowerCase();\n    colorSlug = trimPropValue(ssr && ssr.color_slug).toLowerCase();\n    if (!makeSlug || !colorSlug) return '';\n    return '/colors/' + encodeURIComponent(makeSlug) + '/' + encodeURIComponent(colorSlug) + '/';\n  }\n\n  function composeVehicleConfirmationLine(make, year, model){\n    var parts = [];\n    if (year) parts.push(year);\n    if (make) parts.push(make);\n    if (model) parts.push(model);\n    return parts.join(' ');\n  }\n\n  function extractVehicleYearFromLine(line){\n    var match = trimPropValue(line).match(/^(\\d{4})(?:\\s|$)/);\n    return match && match[1] ? match[1] : '';\n  }\n\n  function normalizeVehicleConfirmationCode(code){\n    var value = trimPropValue(code);\n    return value ? value.toUpperCase() : 'Code unavailable';\n  }\n\n  function stripColorNameFromCode(code, color){\n    var value = trimPropValue(code);\n    var colorText = trimPropValue(color).toLowerCase();\n    var idx = value.search(/\\s+-\\s+/);\n    if (idx > 0 && colorText && value.toLowerCase().indexOf(colorText) > idx) {\n      return trimPropValue(value.substring(0, idx));\n    }\n    return value;\n  }\n\n  function normalizeVehicleConfirmationName(name){\n    var value = trimPropValue(name);\n    return value ? value : 'Color name unavailable';\n  }\n\n  function formatVehicleConfirmationCode(code){\n    return escapeHtml(code).replace(/([\\/\\-,.])/g, '$1<wbr>').replace(/\\(/g, '<wbr>(');\n  }\n\n  function buildVehicleConfirmationColorHtml(color, code, hubUrl){\n    var codeDisplay = normalizeVehicleConfirmationCode(code);\n    var nameDisplay = normalizeVehicleConfirmationName(color);\n    var identity = '';\n\n    if (codeDisplay === 'Code unavailable') {\n      identity = escapeHtml(nameDisplay);\n    } else if (nameDisplay === 'Color name unavailable') {\n      identity = formatVehicleConfirmationCode(codeDisplay);\n    } else {\n      identity = formatVehicleConfirmationCode(codeDisplay) + ' - ' + escapeHtml(nameDisplay);\n    }\n\n    return '' +\n      '<span class=\"ps-vehicle-confirmation__color-label\">COLOR CODE</span>' +\n      (hubUrl ?\n        '<a class=\"ps-vehicle-confirmation__color-link\" href=\"' + escapeHtml(hubUrl) + '\" aria-label=\"View ' + escapeHtml(codeDisplay + ' - ' + nameDisplay) + ' Color Hub page\"><span class=\"ps-vehicle-confirmation__color-code\">' + identity + '</span></a>' :\n        '<span class=\"ps-vehicle-confirmation__color-code\">' + identity + '</span>');\n  }\n\n  function findVehicleMakeOption(options, value){\n    var wanted = trimPropValue(value);\n    var wantedSlug = slugifyVehicleToken(wanted);\n    var i = 0;\n    var item = null;\n    if (!wanted) return null;\n    for (i = 0; i < options.length; i++) {\n      item = options[i];\n      if (trimPropValue(item.make) === wanted) return item;\n    }\n    for (i = 0; i < options.length; i++) {\n      item = options[i];\n      if (slugifyVehicleToken(item.make_slug || item.make) === wantedSlug) return item;\n    }\n    return null;\n  }\n\n  function cleanLegacyMakePath(make){\n    return trimPropValue(make)\n      .replace(/[^\\x20-\\x7E]/g, '')\n      .replace(/[\\/\\s]+/g, '-')\n      .replace(/-+/g, '-')\n      .replace(/^-+|-+$/g, '');\n  }\n\n  function cleanLegacyModelPath(make, model){\n    var makeKey = trimPropValue(make).toLowerCase();\n    var modelKey = trimPropValue(model).toLowerCase().replace(/\\s+/g, ' ');\n    var value = trimPropValue(model);\n    if (makeKey === 'toyota' && modelKey === 'rav-4') value = 'RAV4';\n    return value\n      .replace(/[ /#']/g, '-')\n      .replace(/[()]/g, '')\n      .replace(/[^\\x20-\\x7E]/g, '')\n      .replace(/-+/g, '-')\n      .replace(/^-+|-+$/g, '');\n  }\n\n  function buildTouchUpPaintVehiclePath(make, year, model){\n    var makePath = cleanLegacyMakePath(make);\n    var yearPath = trimPropValue(year).replace(/\\D/g, '');\n    var modelPath = cleanLegacyModelPath(make, model);\n    if (!makePath || !/^\\d{4}$/.test(yearPath) || !modelPath) return '';\n    return '/touch_up_paint/' + makePath + '/' + yearPath + '-' + makePath + '-' + modelPath + '.html';\n  }\n\n  function clearVehicleSearchSessionContext(){\n    var storage = null;\n    var keys = [];\n    var key = '';\n    var i = 0;\n    try {\n      storage = window.sessionStorage;\n    } catch (_e) {\n      storage = null;\n    }\n    if (!storage) return;\n    try {\n      storage.removeItem('ps_last_color_context');\n      storage.removeItem('ps_last_vehicle_context');\n      for (i = 0; i < storage.length; i++) {\n        key = storage.key(i);\n        if (key && (key.indexOf('ps-submitted-search:') === 0 || key.indexOf('ps-edit-restore:') === 0)) {\n          keys.push(key);\n        }\n      }\n      for (i = 0; i < keys.length; i++) {\n        storage.removeItem(keys[i]);\n      }\n    } catch (_e2) {}\n  }\n\n  function writeVehicleOnlySearchContext(selection){\n    var make = trimPropValue(selection && selection.make);\n    var makeSlug = trimPropValue(selection && selection.make_slug).toLowerCase();\n    var year = trimPropValue(selection && selection.year);\n    var model = trimPropValue(selection && selection.model);\n    var payload = null;\n    if (!make) return false;\n    if (!makeSlug) makeSlug = slugifyVehicleToken(make);\n    payload = {\n      make: make,\n      make_slug: makeSlug,\n      year: year,\n      model: model,\n      vehicle_scope: true,\n      color: '',\n      code: '',\n      hex: '',\n      color_slug: '',\n      factory_code: '',\n      shopify_page: '',\n      image: '',\n      valid: false,\n      products: [],\n      selected_color: '',\n      selected_color_code: '',\n      selected_color_hex: '',\n      selected_color_slug: '',\n      selectedColor: '',\n      selectedColorCode: '',\n      selectedColorHex: '',\n      selectedColorSlug: ''\n    };\n    try {\n      if (PS && PS.cc && typeof PS.cc.write === 'function') {\n        PS.cc.write(payload);\n      } else {\n        writePsCc(payload);\n      }\n    } catch (_e) {\n      writePsCc(payload);\n    }\n    return true;\n  }\n\n  function openVehicleConfirmationEditModal(initialContext){\n    var initial = initialContext || {};\n    var makeOptions = [];\n    var yearOptions = [];\n    var modelOptions = [];\n    var selectedMake = trimPropValue(initial.make);\n    var selectedMakeSlug = trimPropValue(initial.make_slug);\n    var selectedYear = trimPropValue(initial.year);\n    var selectedModel = trimPropValue(initial.model);\n    var makeCombobox = null;\n    var yearCombobox = null;\n    var modelCombobox = null;\n    var requestId = 0;\n    var loading = false;\n    var modalSessionController = null;\n    var modalSession = 0;\n\n    function optionNames(options){\n      var out = [];\n      var i = 0;\n      for (i = 0; i < options.length; i++) out.push(options[i].make);\n      return out;\n    }\n\n    function setPrimaryState(modal, message){\n      if (!modal || !modal.setPrimaryDisabled) return;\n      modal.setPrimaryDisabled(loading || !selectedMake || !selectedYear || !selectedModel, loading ? (message || 'Loading vehicle options') : 'Select make, year, and model to continue');\n    }\n\n    if (!(PS.Modal && PS.Modal.open)) return;\n    modalSessionController = PS.PDP || PS;\n    modalSession = beginVehicleModalSession(modalSessionController);\n\n    PS.Modal.open({\n      title: 'Change Vehicle Details',\n      okLabel: 'Find My Color',\n      okAriaLabel: 'Find paint colors for this vehicle',\n      hideCancel: true,\n      modalClass: 'ps-modal--vehicle-details ps-modal--change-vehicle ps-modal--vehicle-confirmation-edit',\n      contentClass: 'psm-content psm-vehicle-details psm-change-vehicle psm-vehicle-confirmation-edit',\n      contentHtml:\n        '<p class=\"psm-change-vehicle-copy\">Enter your vehicle\\'s information and we\\'ll help you find the right color.</p>' +\n        '<div class=\"psm-vehicle-field psm-vehicle-field--make\">' +\n          '<div class=\"psm-vehicle-combobox psm-vehicle-combobox--make\" data-psm-combobox=\"make\">' +\n            '<input type=\"hidden\" name=\"make\" value=\"' + escapeHtml(selectedMake) + '\">' +\n            '<input type=\"hidden\" name=\"make_slug\" value=\"' + escapeHtml(selectedMakeSlug) + '\">' +\n            '<input type=\"text\" name=\"make_display\" value=\"' + escapeHtml(selectedMake) + '\" class=\"psm-input psm-vehicle-combobox-input psm-vehicle-combobox-input--required\" placeholder=\"Select make (required)\" autocomplete=\"off\" role=\"combobox\" aria-label=\"Vehicle make\" aria-autocomplete=\"list\" aria-expanded=\"false\" aria-controls=\"psm-vehicle-make-list\">' +\n            '<button type=\"button\" class=\"psm-vehicle-combobox-toggle\" aria-label=\"Toggle make suggestions\"></button>' +\n            '<div id=\"psm-vehicle-make-list\" class=\"psm-vehicle-model-list\" role=\"listbox\" hidden></div>' +\n          '</div>' +\n        '</div>' +\n        '<div class=\"psm-vehicle-field psm-vehicle-field--year\">' +\n          '<div class=\"psm-vehicle-combobox psm-vehicle-combobox--year is-disabled\" data-psm-combobox=\"year\">' +\n            '<input type=\"hidden\" name=\"year\" value=\"' + escapeHtml(selectedYear) + '\">' +\n            '<input type=\"text\" name=\"year_display\" value=\"' + escapeHtml(selectedYear) + '\" class=\"psm-input psm-vehicle-combobox-input psm-vehicle-combobox-input--year psm-vehicle-combobox-input--required\" placeholder=\"Select year (required)\" autocomplete=\"off\" inputmode=\"numeric\" disabled role=\"combobox\" aria-label=\"Vehicle year\" aria-autocomplete=\"list\" aria-expanded=\"false\" aria-controls=\"psm-vehicle-edit-year-list\">' +\n            '<button type=\"button\" class=\"psm-vehicle-combobox-toggle\" aria-label=\"Toggle year suggestions\" disabled></button>' +\n            '<div id=\"psm-vehicle-edit-year-list\" class=\"psm-vehicle-model-list psm-vehicle-year-list\" role=\"listbox\" hidden></div>' +\n          '</div>' +\n        '</div>' +\n        '<div class=\"psm-vehicle-field psm-vehicle-field--model\">' +\n          '<div class=\"psm-vehicle-combobox is-disabled\" data-psm-combobox=\"model\">' +\n            '<input type=\"text\" name=\"model\" value=\"' + escapeHtml(selectedModel) + '\" class=\"psm-input psm-vehicle-combobox-input psm-vehicle-combobox-input--required\" placeholder=\"Select model (required)\" autocomplete=\"off\" disabled role=\"combobox\" aria-label=\"Vehicle model\" aria-autocomplete=\"list\" aria-expanded=\"false\" aria-controls=\"psm-vehicle-edit-model-list\">' +\n            '<button type=\"button\" class=\"psm-vehicle-combobox-toggle\" aria-label=\"Toggle model suggestions\" disabled></button>' +\n            '<div id=\"psm-vehicle-edit-model-list\" class=\"psm-vehicle-model-list\" role=\"listbox\" hidden></div>' +\n          '</div>' +\n        '</div>',\n      focusSelector: 'input[name=\"make_display\"]',\n      onValidate: function(data){\n        if (!trimPropValue(data.make)) return { ok:false, message:'Please select a make.', focusSelector: 'input[name=\"make_display\"]' };\n        if (!trimPropValue(data.year)) return { ok:false, message:'Please select a year.', focusSelector: 'input[name=\"year_display\"]' };\n        data.model = resolveVehicleModelFromOptions(data.model, modelOptions);\n        if (!trimPropValue(data.model)) return { ok:false, message:'Please select a model.', focusSelector: 'input[name=\"model\"]' };\n        if (!buildTouchUpPaintVehiclePath(data.make, data.year, data.model)) return { ok:false, message:'We could not build a vehicle color page for that selection.' };\n        return { ok:true };\n      },\n      onOpen: function(modal){\n        var makeValueEl = modal.formEl.querySelector('input[name=\"make\"]');\n        var makeSlugEl = modal.formEl.querySelector('input[name=\"make_slug\"]');\n        var makeEl = modal.formEl.querySelector('input[name=\"make_display\"]');\n        var makeComboEl = modal.formEl.querySelector('[data-psm-combobox=\"make\"]');\n        var makeToggleEl = makeComboEl ? makeComboEl.querySelector('.psm-vehicle-combobox-toggle') : null;\n        var makeListEl = modal.formEl.querySelector('#psm-vehicle-make-list');\n        var yearValueEl = modal.formEl.querySelector('input[name=\"year\"]');\n        var yearEl = modal.formEl.querySelector('input[name=\"year_display\"]');\n        var yearComboEl = modal.formEl.querySelector('[data-psm-combobox=\"year\"]');\n        var yearToggleEl = yearComboEl ? yearComboEl.querySelector('.psm-vehicle-combobox-toggle') : null;\n        var yearListEl = modal.formEl.querySelector('#psm-vehicle-edit-year-list');\n        var modelEl = modal.formEl.querySelector('input[name=\"model\"]');\n        var modelComboEl = modal.formEl.querySelector('[data-psm-combobox=\"model\"]');\n        var modelToggleEl = modelComboEl ? modelComboEl.querySelector('.psm-vehicle-combobox-toggle') : null;\n        var modelListEl = modal.formEl.querySelector('#psm-vehicle-edit-model-list');\n\n        function setYearEnabled(enabled, placeholderText){\n          yearEl.disabled = !enabled;\n          yearToggleEl.disabled = !enabled;\n          yearEl.placeholder = placeholderText || 'Select year';\n          if (enabled) yearComboEl.classList.remove('is-disabled');\n          else yearComboEl.classList.add('is-disabled');\n          if (!enabled && yearCombobox) yearCombobox.close();\n        }\n\n        function setModelEnabled(enabled, placeholderText){\n          modelEl.disabled = !enabled;\n          modelToggleEl.disabled = !enabled;\n          modelEl.placeholder = placeholderText || 'Select model';\n          if (enabled) modelComboEl.classList.remove('is-disabled');\n          else modelComboEl.classList.add('is-disabled');\n          if (!enabled && modelCombobox) modelCombobox.close();\n        }\n\n        function setModelValue(value){\n          selectedModel = trimPropValue(value);\n          modelEl.value = selectedModel;\n          if (modelCombobox) modelCombobox.syncFromSelection();\n          setPrimaryState(modal);\n        }\n\n        function loadModelsForYear(yearValue, restoreModel){\n          var localRequestId = 0;\n          var modelToRestore = trimPropValue(restoreModel);\n          selectedYear = trimPropValue(yearValue);\n          yearValueEl.value = selectedYear;\n          modelOptions = [];\n          setModelValue('');\n          modal.renderError('');\n          if (!selectedYear) {\n            setModelEnabled(false, 'Select model');\n            setPrimaryState(modal);\n            return;\n          }\n          loading = true;\n          localRequestId = ++requestId;\n          setModelEnabled(false, 'Loading models...');\n          setPrimaryState(modal, 'Loading vehicle models');\n          fetchVehicleModels({ make: selectedMake, make_slug: selectedMakeSlug }, selectedYear, function(_err, models){\n            if (!isVehicleModalSessionCurrent(modalSessionController, modalSession, modal.root)) return;\n            if (localRequestId !== requestId) return;\n            modelOptions = sanitizeModels(models || []);\n            loading = false;\n            setModelEnabled(true, 'Select model');\n            if (modelToRestore) setModelValue(resolveVehicleModelFromOptions(modelToRestore, modelOptions));\n            if (!selectedModel && modelOptions.length === 1) setModelValue(modelOptions[0]);\n            setPrimaryState(modal);\n          });\n        }\n\n        function loadYearsForMake(skipModelLoad){\n          var lookupValue = selectedMakeSlug || selectedMake;\n          var localRequestId = ++requestId;\n          var restoreYear = skipModelLoad ? trimPropValue(initial.year) : '';\n          var restoreModel = skipModelLoad ? trimPropValue(initial.model) : '';\n          yearOptions = [];\n          modelOptions = [];\n          setModelValue('');\n          yearValueEl.value = '';\n          selectedYear = '';\n          if (yearCombobox) yearCombobox.syncFromSelection();\n          setYearEnabled(false, 'Loading years...');\n          setModelEnabled(false, 'Select model');\n          loading = true;\n          setPrimaryState(modal, 'Loading vehicle years');\n          fetchVehicleYearsForMake(lookupValue, function(_err, years){\n            if (!isVehicleModalSessionCurrent(modalSessionController, modalSession, modal.root)) return;\n            if (localRequestId !== requestId) return;\n            yearOptions = sanitizeYears(years || []);\n            loading = false;\n            setYearEnabled(true, 'Select year');\n            if (selectedYear && yearOptions.indexOf(selectedYear) === -1) selectedYear = '';\n            if (!selectedYear && restoreYear && yearOptions.indexOf(restoreYear) > -1) selectedYear = restoreYear;\n            yearValueEl.value = selectedYear;\n            if (yearCombobox) yearCombobox.syncFromSelection();\n            if (selectedYear) loadModelsForYear(selectedYear, restoreModel);\n            else setPrimaryState(modal);\n          });\n        }\n\n        function setMakeValue(value, skipInitialRestore){\n          var option = findVehicleMakeOption(makeOptions, value);\n          selectedMake = option ? option.make : trimPropValue(value);\n          selectedMakeSlug = option ? option.make_slug : slugifyVehicleToken(selectedMake);\n          makeValueEl.value = selectedMake;\n          makeSlugEl.value = selectedMakeSlug;\n          makeEl.value = selectedMake;\n          if (makeCombobox) makeCombobox.syncFromSelection();\n          if (selectedMake) loadYearsForMake(!!skipInitialRestore);\n          else {\n            selectedYear = '';\n            yearValueEl.value = '';\n            if (yearCombobox) yearCombobox.syncFromSelection();\n            setModelValue('');\n            setYearEnabled(false, 'Select year');\n            setModelEnabled(false, 'Select model');\n            setPrimaryState(modal);\n          }\n        }\n\n        makeCombobox = createModalCombobox({\n          comboEl: makeComboEl,\n          inputEl: makeEl,\n          listEl: makeListEl,\n          toggleEl: makeToggleEl,\n          optionIdPrefix: 'psm-vehicle-edit-make-option-',\n          emptyText: 'No matching makes found.',\n          getOptions: function(){ return optionNames(makeOptions); },\n          getSelectedValue: function(){ return makeValueEl.value; },\n          filterOption: function(optionValue, query){\n            return String(optionValue).toLowerCase().indexOf(String(query || '').toLowerCase()) > -1;\n          },\n          onInput: function(nextQuery){\n            var option = findVehicleMakeOption(makeOptions, nextQuery);\n            if (option && option.make.toLowerCase() === trimPropValue(nextQuery).toLowerCase()) {\n              setMakeValue(option.make, false);\n              return { syncDisplay: true, close: true };\n            }\n            makeValueEl.value = '';\n            makeSlugEl.value = '';\n            selectedMake = '';\n            selectedMakeSlug = '';\n            selectedYear = '';\n            yearValueEl.value = '';\n            if (yearCombobox) yearCombobox.syncFromSelection();\n            setModelValue('');\n            setYearEnabled(false, 'Select year');\n            setModelEnabled(false, 'Select model');\n            setPrimaryState(modal);\n            return {};\n          },\n          onSelect: function(value){\n            setMakeValue(value, false);\n          },\n          onClear: function(){\n            setMakeValue('', false);\n          },\n          onBlur: function(){\n            if (!findVehicleMakeOption(makeOptions, makeEl.value)) setMakeValue('', false);\n            return { syncDisplay: true };\n          }\n        });\n\n        yearCombobox = createModalCombobox({\n          comboEl: yearComboEl,\n          inputEl: yearEl,\n          listEl: yearListEl,\n          toggleEl: yearToggleEl,\n          optionIdPrefix: 'psm-vehicle-edit-year-option-',\n          emptyText: 'No matching years found.',\n          getOptions: function(){ return yearOptions.slice(0); },\n          getSelectedValue: function(){ return yearValueEl.value; },\n          normalizeInput: function(rawValue){ return String(rawValue || '').replace(/\\D/g, ''); },\n          filterOption: function(optionValue, query){ return String(optionValue).indexOf(query) === 0; },\n          onInput: function(nextQuery){\n            if (!nextQuery) {\n              loadModelsForYear('');\n              return { syncDisplay: true };\n            }\n            if (yearOptions.indexOf(nextQuery) > -1) {\n              loadModelsForYear(nextQuery);\n              return { syncDisplay: true, close: true };\n            }\n            yearValueEl.value = '';\n            selectedYear = '';\n            setPrimaryState(modal);\n            return {};\n          },\n          onSelect: function(value){ loadModelsForYear(value); },\n          onClear: function(){ loadModelsForYear(''); },\n          onBlur: function(){\n            if (yearOptions.indexOf(yearEl.value) === -1) loadModelsForYear('');\n            return { syncDisplay: true };\n          }\n        });\n\n        modelCombobox = createModalCombobox({\n          comboEl: modelComboEl,\n          inputEl: modelEl,\n          listEl: modelListEl,\n          toggleEl: modelToggleEl,\n          optionIdPrefix: 'psm-vehicle-edit-model-option-',\n          emptyText: 'No matching models found.',\n          getOptions: function(){ return modelOptions.slice(0); },\n          getSelectedValue: function(){ return modelEl.value; },\n          filterOption: function(optionValue, query){\n            return String(optionValue).toLowerCase().indexOf(String(query || '').toLowerCase()) > -1;\n          },\n          onInput: function(nextQuery){\n            var resolved = resolveVehicleModelFromOptions(nextQuery, modelOptions);\n            if (resolved && resolved.toLowerCase() === trimPropValue(nextQuery).toLowerCase()) {\n              setModelValue(resolved);\n              return { syncDisplay: true, close: true };\n            }\n            selectedModel = '';\n            return {};\n          },\n          onSelect: function(value){ setModelValue(value); },\n          onClear: function(){ setModelValue(''); },\n          onBlur: function(){ return { syncDisplay: true }; },\n          onEnterAfterSelect: function(){\n            if (modal.formEl.requestSubmit) modal.formEl.requestSubmit();\n            else modal.okBtn.click();\n          }\n        });\n\n        setYearEnabled(false, 'Select year');\n        setModelEnabled(false, 'Select model');\n        setPrimaryState(modal);\n        loading = true;\n        setPrimaryState(modal, 'Loading vehicle makes');\n        fetchVehicleMakes(function(_err, makes){\n          if (!isVehicleModalSessionCurrent(modalSessionController, modalSession, modal.root)) return;\n          makeOptions = makes || [];\n          loading = false;\n          if (makeCombobox) makeCombobox.syncFromSelection();\n          if (selectedMake) setMakeValue(selectedMake, true);\n          else setPrimaryState(modal);\n        });\n      }\n    }).then(function(res){\n      var data = null;\n      var vehiclePath = '';\n      invalidateVehicleModalSession(modalSessionController, modalSession);\n      if (!res || !res.ok) return;\n      data = res.data || {};\n      vehiclePath = buildTouchUpPaintVehiclePath(data.make, data.year, data.model);\n      if (!vehiclePath) return;\n      if (!writeVehicleOnlySearchContext({\n        make: data.make,\n        make_slug: data.make_slug,\n        year: data.year,\n        model: data.model\n      })) return;\n      clearVehicleSearchSessionContext();\n      window.location.href = vehiclePath;\n    });\n  }\n\n  PS.VehicleDetails = PS.VehicleDetails || {};\n  PS.VehicleDetails.openChangeVehicleModal = function(initialContext){\n    return openVehicleConfirmationEditModal(initialContext || {});\n  };\n\n  function bindVehicleConfirmationEdit(box, context){\n    var edit = null;\n    if (!box || !box.querySelector) return;\n    edit = box.querySelector('[data-ps-vehicle-confirmation-edit], .ps-vehicle-confirmation__edit');\n    if (!edit) {\n      edit = document.createElement('button');\n      edit.type = 'button';\n      edit.className = 'ps-vehicle-confirmation__edit';\n      edit.setAttribute('data-ps-vehicle-confirmation-edit', '1');\n      edit.setAttribute('aria-label', 'Change vehicle details');\n      edit.innerHTML = '<svg class=\"ps-vehicle-confirmation__edit-icon\" viewBox=\"0 0 20 20\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M3.5 14.7v1.8h1.8l8.9-8.9-1.8-1.8-8.9 8.9Zm12-8.4.8-.8c.4-.4.4-1 0-1.4l-.4-.4c-.4-.4-1-.4-1.4 0l-.8.8 1.8 1.8Z\" fill=\"currentColor\"/></svg>';\n      box.appendChild(edit);\n    }\n    if (edit.getAttribute('data-ps-vehicle-confirmation-edit-bound') === '1') {\n      edit._psVehicleConfirmationContext = context;\n      return;\n    }\n    edit._psVehicleConfirmationContext = context;\n    edit.setAttribute('data-ps-vehicle-confirmation-edit-bound', '1');\n    edit.addEventListener('click', function(evt){\n      if (evt && evt.preventDefault) evt.preventDefault();\n      PS.VehicleDetails.openChangeVehicleModal(edit._psVehicleConfirmationContext || {});\n    });\n  }\n\n  function getBreadcrumbColorIdentity(){\n    var nav = null;\n    var text = '';\n    var match = null;\n    try {\n      nav = document.querySelector('nav[aria-label=\"Breadcrumb\"], .breadcrumbs, .breadcrumb');\n      text = nav ? String(nav.textContent || '') : '';\n    } catch (_e) {\n      text = '';\n    }\n    match = text.match(/([A-Z0-9][A-Z0-9\\/., -]*?)\\s+-\\s+([A-Za-z][^\\/\\n\\r]+)/);\n    if (!match || !match[1] || !match[2]) return null;\n    return {\n      code: trimPropValue(match[1]).toUpperCase(),\n      color: trimPropValue(match[2]).replace(/\\s+Paint\\s+\\w+.*$/i, '')\n    };\n  }\n\n  function getBreadcrumbMakeName(){\n    var nav = null;\n    var links = null;\n    try {\n      nav = document.querySelector('nav[aria-label=\"Breadcrumb\"], .breadcrumbs, .breadcrumb');\n      links = nav && nav.querySelectorAll ? nav.querySelectorAll('a') : null;\n      if (links && links.length > 1) return trimPropValue(links[1].textContent || '');\n    } catch (_e) {}\n    return '';\n  }\n\n  function productLabelFromPath(){\n    var path = '';\n    var slug = '';\n    try {\n      path = window.location && window.location.pathname ? String(window.location.pathname) : '';\n    } catch (_e) {\n      path = '';\n    }\n    slug = splitPathToken(path);\n    slug = slug ? String(slug).toLowerCase() : '';\n    if (slug === 'pen') return 'Paint Pen';\n    if (slug === 'bottle') return 'Paint Bottle';\n    if (slug === 'spray') return 'Spray Paint';\n    if (slug === 'pro') return 'Professional Paint';\n    if (slug === 'kit-pen') return 'Paint Pen Kit';\n    if (slug === 'kit-bottle') return 'Paint Bottle Kit';\n    if (slug === 'kit-spray') return 'Spray Paint Kit';\n    if (slug === 'kit-pro') return 'Professional Paint Kit';\n    return '';\n  }\n\n  function deriveLegacyHeadingProductText(contextText, makeName, colorName){\n    var text = trimPropValue(contextText);\n    var make = trimPropValue(makeName);\n    var color = trimPropValue(colorName);\n    if (make) text = text.replace(new RegExp('^' + escapeRegExp(make) + '\\\\s+', 'i'), '');\n    if (color) text = text.replace(new RegExp('^' + escapeRegExp(color) + '\\\\s+', 'i'), '');\n    text = text.replace(/^Touch[- ]Up\\s+/i, '');\n    text = text.replace(/\\s+for\\s+.+$/i, '');\n    text = trimPropValue(text);\n    return text || productLabelFromPath();\n  }\n\n  function escapeRegExp(value){\n    return String(value || '').replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n  }\n\n  function normalizeLegacyColorFocusHeadings(){\n    var nodes = null;\n    var ssr = null;\n    var crumb = null;\n    var makeName = '';\n    var colorName = '';\n    var code = '';\n    var path = '';\n    var productRoute = false;\n    var i = 0;\n\n    try {\n      nodes = document.querySelectorAll('.ps-color-code-focus');\n    } catch (_e) {\n      nodes = null;\n    }\n    if (!nodes || !nodes.length) return;\n\n    ssr = readVehicleConfirmationSsr();\n    crumb = getBreadcrumbColorIdentity();\n    makeName = trimPropValue((ssr && ssr.make) || getBreadcrumbMakeName());\n    colorName = trimPropValue((ssr && (ssr.color || ssr.color_name)) || (crumb && crumb.color));\n    code = trimPropValue((ssr && (ssr.code || ssr.color_code)) || (crumb && crumb.code)).toUpperCase();\n    try {\n      path = window.location && window.location.pathname ? String(window.location.pathname) : '';\n    } catch (_ePath) {\n      path = '';\n    }\n    productRoute = isPathWithProductSlug(path);\n\n    for (i = 0; i < nodes.length; i++) {\n      (function(node){\n        var labelNode = node.querySelector ? node.querySelector('.ps-color-code-focus__label') : null;\n        var codeNode = node.querySelector ? node.querySelector('.ps-color-code-focus__code') : null;\n        var contextNode = node.querySelector ? node.querySelector('.ps-color-code-focus__context') : null;\n        var productNode = node.querySelector ? node.querySelector('.ps-color-code-focus__product') : null;\n        var labelText = trimPropValue(labelNode && labelNode.textContent ? labelNode.textContent : '');\n        var nodeCode = trimPropValue(codeNode && codeNode.textContent ? codeNode.textContent : code).toUpperCase();\n        var nodeContext = trimPropValue(contextNode && contextNode.textContent ? contextNode.textContent : '');\n        var nodeColor = colorName;\n        var nodeMake = makeName;\n        var productText = '';\n        var contextText = '';\n        var displayContext = null;\n\n        if (!nodeColor && nodeCode && nodeContext) {\n          nodeColor = trimPropValue(nodeContext.replace(new RegExp('^' + escapeRegExp(nodeMake) + '\\\\s+', 'i'), '').replace(/\\s+Touch[- ]Up Paint.*$/i, ''));\n        }\n        if (!nodeMake && nodeColor && nodeContext) {\n          nodeMake = trimPropValue(nodeContext.replace(new RegExp('\\\\s*' + escapeRegExp(nodeColor) + '\\\\s+.*$', 'i'), ''));\n        }\n        nodeCode = stripColorNameFromCode(nodeCode, nodeColor).toUpperCase();\n        if (!nodeCode || !nodeColor) return;\n\n        try {\n          window.PS_SSR = window.PS_SSR || {};\n          if (!window.PS_SSR.code && !window.PS_SSR.color_code) window.PS_SSR.code = nodeCode;\n          if (!window.PS_SSR.color && !window.PS_SSR.color_name) window.PS_SSR.color = nodeColor;\n          if (nodeMake && !window.PS_SSR.make) window.PS_SSR.make = nodeMake;\n        } catch (_eSsrRepair) {}\n\n        displayContext = buildVehicleDisplayContext(nodeMake, ssr);\n\n        if (productRoute) {\n          productText = trimPropValue(productNode && productNode.textContent ? productNode.textContent : '');\n          if (!productText) productText = deriveLegacyHeadingProductText(nodeContext, nodeMake, nodeColor);\n          contextText = productText ? ('Touch-Up ' + productText + (displayContext.vehicleText ? ' for ' + displayContext.vehicleText : '')) : '';\n        } else {\n          if (!labelText) labelText = 'COLOR CODE';\n          contextText = displayContext.vehicleText ? (displayContext.vehicleText + ' Touch-Up Paint') : 'Touch-Up Paint';\n        }\n\n        node.className = 'ps-color-heading ps-color-heading--legacy-repaired ps-color-heading--code-weight-regular ps-color-heading--context-weight-regular';\n        node.setAttribute('data-ps-color-heading', '1');\n        node.innerHTML =\n          (labelText ? '<span class=\"ps-color-heading__label\">' + escapeHtml(labelText) + '</span>' : '') +\n          '<span class=\"ps-color-heading__code\"><span class=\"ps-color-heading__code-token\">' + formatVehicleConfirmationCode(nodeCode) + '</span><span class=\"ps-color-heading__separator\"> - </span><span class=\"ps-color-heading__name\">' + escapeHtml(nodeColor) + '</span></span>' +\n          (contextText ? '<span class=\"ps-color-heading__context\">' + escapeHtml(contextText) + '</span>' : '');\n      })(nodes[i]);\n    }\n  }\n\n  function hydrateVehicleConfirmation(){\n    var box = document.querySelector('[data-ps-vehicle-confirmation]');\n    var swatch = box && box.querySelector ? box.querySelector('[data-ps-vehicle-confirmation-swatch]') : null;\n    var vehicleNode = box && box.querySelector ? box.querySelector('[data-ps-vehicle-confirmation-vehicle]') : null;\n    var colorNode = box && box.querySelector ? box.querySelector('[data-ps-vehicle-confirmation-color]') : null;\n    var ssr = null;\n    var cc = null;\n    var useVehicleFields = false;\n    var make = '';\n    var color = '';\n    var code = '';\n    var year = '';\n    var model = '';\n    var vehicleText = '';\n    var colorText = '';\n    var hex = '';\n    var swatchImage = '';\n    var displayContext = null;\n    var hubUrl = '';\n\n    if (!box) return false;\n    box.setAttribute('hidden', 'hidden');\n    if (!isVehicleConfirmationRoute()) return false;\n\n    ssr = readVehicleConfirmationSsr();\n    make = trimPropValue(ssr && ssr.make);\n    color = trimPropValue(ssr && ssr.color);\n    code = trimPropValue(ssr && ssr.code);\n    if (!ssr || ssr.valid !== true || !make || !color || !code) return false;\n\n    cc = readPsCc();\n    displayContext = buildVehicleDisplayContext(make, ssr);\n    useVehicleFields = displayContext.useVehicleFields;\n    if (useVehicleFields) {\n      year = displayContext.year;\n      model = displayContext.model;\n    }\n\n    vehicleText = displayContext.vehicleText || composeVehicleConfirmationLine(make, year, model);\n    colorText = 'Color code ' + normalizeVehicleConfirmationCode(code) + ', ' + normalizeVehicleConfirmationName(color);\n    hubUrl = buildVehicleConfirmationHubUrl(ssr);\n\n    if (vehicleNode) vehicleNode.textContent = vehicleText;\n    if (colorNode) {\n      colorNode.innerHTML = buildVehicleConfirmationColorHtml(color, code, hubUrl);\n      colorNode.setAttribute('aria-label', colorText);\n    }\n    if (swatch) {\n      if (hubUrl) {\n        swatch.setAttribute('href', hubUrl);\n        swatch.setAttribute('aria-hidden', 'false');\n        swatch.setAttribute('aria-label', 'View ' + normalizeVehicleConfirmationCode(code) + ' - ' + normalizeVehicleConfirmationName(color) + ' Color Hub page');\n        swatch.removeAttribute('tabindex');\n      } else {\n        swatch.removeAttribute('href');\n        swatch.setAttribute('aria-hidden', 'true');\n        swatch.setAttribute('tabindex', '-1');\n      }\n      swatch.style.display = 'block';\n      swatch.style.height = '8rem';\n      swatch.style.minHeight = '8rem';\n      hex = trimPropValue(ssr && ssr.hex).replace(/[^0-9a-fA-F]/g, '').slice(0, 6);\n      swatchImage = vehicleConfirmationSwatchUrl(ssr, hex);\n      swatch.style.backgroundImage = '';\n      swatch.style.backgroundColor = '';\n      if (swatchImage) {\n        swatch.style.backgroundImage = 'url(\"' + swatchImage.replace(/\"/g, '%22') + '\")';\n      }\n      if (hex) {\n        swatch.style.backgroundColor = '#' + hex;\n      }\n    }\n\n    bindVehicleConfirmationEdit(box, {\n      make: displayContext.make || make,\n      make_slug: trimPropValue((cc && cc.make_slug) || (ssr && ssr.make_slug)),\n      year: year,\n      model: model\n    });\n    applyVehicleConfirmationHiddenContext(displayContext, canUseVehicleScope(cc, ssr));\n    box.removeAttribute('hidden');\n    return true;\n  }\n\n  function applyVehicleConfirmationHiddenContext(displayContext, allowVehicleFields){\n    var ctx = displayContext || {};\n    var form = document.querySelector('product-form form') || document.querySelector('form[action*=\"/cart/add\"]');\n    var year = trimPropValue(ctx.year || '') || extractVehicleYearFromLine(ctx.vehicleText || '');\n    var model = trimPropValue(ctx.model || '');\n    function writeHiddenContext(){\n      if (year) upsertHiddenProp(form, 'Year', year);\n      if (model) upsertHiddenProp(form, 'Model', model);\n    }\n    if (!form || !ctx.useVehicleFields || allowVehicleFields !== true) return;\n    writeHiddenContext();\n    try {\n      window.setTimeout(writeHiddenContext, 0);\n      window.setTimeout(writeHiddenContext, 250);\n    } catch (_e) {}\n  }\n\n  function writePsCc(cc){\n    var val = cc && typeof cc === 'object' ? cc : {};\n    function syncSameTabVehicleContext(source){\n      var payload = null;\n      var data = source && typeof source === 'object' ? source : {};\n      var makeSlug = trimPropValue(data.make_slug || '');\n      var colorSlug = trimPropValue(data.color_slug || '');\n      if (!makeSlug || !colorSlug) return;\n      payload = {\n        make_slug: String(makeSlug).toLowerCase(),\n        color_slug: String(colorSlug).toLowerCase(),\n        year: trimPropValue(data.year || ''),\n        model: trimPropValue(data.model || ''),\n        factory_code: trimPropValue(data.factory_code || ''),\n        ps_from_search: isFreshVehicleSearchContext(data)\n      };\n      try {\n        if (window.sessionStorage) {\n          window.sessionStorage.setItem('ps_last_color_context', JSON.stringify({\n            make_slug: payload.make_slug,\n            color_slug: payload.color_slug\n          }));\n          window.sessionStorage.setItem('ps_last_vehicle_context', JSON.stringify(payload));\n        }\n      } catch (_e) {}\n    }\n    try{\n      if (PS && PS.cc && typeof PS.cc.write === 'function'){\n        PS.cc.write(val);\n        syncSameTabVehicleContext((PS.cc.read && PS.cc.read()) || val);\n        return;\n      }\n    }catch(_e){}\n    try{\n      var payload = encodeURIComponent(JSON.stringify(val));\n      var parts = [\n        'ps_cc=' + payload,\n        'Path=/',\n        'Max-Age=' + (60*60*24*30),\n        'SameSite=Lax'\n      ];\n      if (window.location && window.location.protocol === 'https:') parts.push('Secure');\n      document.cookie = parts.join('; ');\n      syncSameTabVehicleContext(val);\n    }catch(_e){}\n  }\n\n  function readQuantityNear(form){\n    function toQty(v){\n      var q = parseInt(String(v || '').replace(/[^\\d]/g, ''), 10);\n      return q && q > 0 ? q : 1;\n    }\n    var el = form && form.querySelector('input[name=\"quantity\"]');\n    if (el && typeof el.value !== 'undefined'){\n      var q1 = toQty(el.value);\n      if (q1 > 0) return q1;\n    }\n    var root = form && form.closest ? form.closest('section') : document;\n    var cands = root ? root.querySelectorAll('input[name=\"quantity\"], .quantity__input, [data-quantity-input]') : [];\n    for (var i=0;i<cands.length;i++){\n      var n = cands[i];\n      if (typeof n.value !== 'undefined'){\n        var q2 = toQty(n.value);\n        if (q2 > 0) return q2;\n      }\n      if (n.getAttribute){\n        var q3 = toQty(n.getAttribute('value'));\n        if (q3 > 0) return q3;\n      }\n    }\n    var btn = document.querySelector('product-form [type=\"submit\"], product-form .product-form__submit, form[action*=\"/cart/add\"] [type=\"submit\"]');\n    if (btn && btn.getAttribute){\n      var q4 = toQty(btn.getAttribute('data-qty'));\n      if (q4 > 0) return q4;\n    }\n    if (form && form.getAttribute){\n      var q5 = toQty(form.getAttribute('data-qty'));\n      if (q5 > 0) return q5;\n    }\n    return 1;\n  }\n\n  function mainLineItemFromForm(form, data){\n    if(!form) return null;\n    var idEl = form.querySelector('input[name=\"id\"]');\n    if(!idEl || !idEl.value) return null;\n    var qty = readQuantityNear(form);\n\n    var props = serializeProperties(form);\n\n    // Ensure Factory Code is present as a line item property.\n    // Prefer the value from the form, then use only exact current-color cookie context.\n    if (!props.hasOwnProperty(FACTORY_PROP_KEY) || props[FACTORY_PROP_KEY] === '') {\n      var cc = readPsCc();\n      var scopedFactoryCode = resolveScopedCookieFactoryCode(cc, data || {}, []);\n      if (scopedFactoryCode) {\n        props[FACTORY_PROP_KEY] = scopedFactoryCode;\n      }\n    }\n    if (!validateCustomColorIntegrity(form, data, props).ok) return null;\n\n    return { id: String(idEl.value), quantity: qty, properties: props };\n  }\n\n\n  function upsertHiddenProp(form, key, val){\n    if (!form || !key) return;\n    var sel = 'input[name=\"properties[' + key + ']\"]';\n    var el = form.querySelector(sel);\n    if (!el){\n      el = document.createElement('input');\n      el.type = 'hidden';\n      el.name = 'properties[' + key + ']';\n      form.appendChild(el);\n    }\n    el.value = String(val == null ? '' : val);\n  }\n\n  function upsertPdpManagedColorProp(form, key, val){\n    var el = null;\n    upsertHiddenProp(form, key, val);\n    el = form && form.querySelector ? form.querySelector('input[name=\"properties[' + key + ']\"]') : null;\n    if (el && el.setAttribute) el.setAttribute('data-ps-pdp-managed-color-prop', '1');\n  }\n\n  function removePdpManagedColorProps(form){\n    var keys = ['Make', 'Color Name', 'Color Code', 'Year', 'Model', '_isGuaranteed', FACTORY_PROP_KEY, '_ps_make_slug', '_ps_color_slug', '_ps_product_slug'];\n    var index = 0;\n    var el = null;\n    var removeUnmarked = readCustomColorFlag(form) === false;\n    if (!form || !form.querySelector) return;\n    for (index = 0; index < keys.length; index += 1) {\n      el = form.querySelector('input[name=\"properties[' + keys[index] + ']\"]');\n      if (el && el.parentNode && (removeUnmarked || (el.getAttribute && el.getAttribute('data-ps-pdp-managed-color-prop') === '1'))) {\n        el.parentNode.removeChild(el);\n      }\n    }\n  }\n\n  function removeHiddenProp(form, key){\n    var el = null;\n    if (!form || !key || !form.querySelector) return;\n    el = form.querySelector('input[name=\"properties[' + key + ']\"]');\n    if (el && el.parentNode) el.parentNode.removeChild(el);\n  }\n\n  function trimPropValue(val){\n    return String(val == null ? '' : val).replace(/^\\s+|\\s+$/g, '');\n  }\n\n  function setModalComboboxExpanded(comboEl, inputEl, listEl, open){\n    if (!comboEl || !inputEl || !listEl) return;\n    inputEl.setAttribute('aria-expanded', open ? 'true' : 'false');\n    if (open) comboEl.classList.add('is-open');\n    else comboEl.classList.remove('is-open');\n    listEl.hidden = !open;\n  }\n\n  function scrollModalComboboxOptionIntoView(listEl, optionEl){\n    var top = 0;\n    var bottom = 0;\n    var viewBottom = 0;\n    if (!listEl || !optionEl) return;\n    top = optionEl.offsetTop;\n    bottom = top + optionEl.offsetHeight;\n    viewBottom = listEl.scrollTop + listEl.clientHeight;\n    if (top < listEl.scrollTop) {\n      listEl.scrollTop = top;\n    } else if (bottom > viewBottom) {\n      listEl.scrollTop = bottom - listEl.clientHeight;\n    }\n  }\n\n  function scrollModalComboboxOptionToTop(listEl, optionEl){\n    if (!listEl || !optionEl) return;\n    listEl.scrollTop = optionEl.offsetTop;\n  }\n\n  function syncModalComboboxClearButton(inputEl, clearButtonEl){\n    var hasValue = false;\n    if (!clearButtonEl) return;\n    hasValue = !!trimPropValue(inputEl && inputEl.value);\n    if (!hasValue || (inputEl && inputEl.disabled)) {\n      clearButtonEl.style.display = 'none';\n      clearButtonEl.setAttribute('aria-hidden', 'true');\n      clearButtonEl.tabIndex = -1;\n      return;\n    }\n    clearButtonEl.style.display = 'block';\n    clearButtonEl.setAttribute('aria-hidden', 'false');\n    clearButtonEl.tabIndex = 0;\n  }\n\n  function createModalCombobox(cfg){\n    var activeIndex = -1;\n    var searchQuery = '';\n\n    function isOpen(){\n      return !!(cfg.comboEl && cfg.comboEl.classList.contains('is-open'));\n    }\n\n    function getSelectedValue(){\n      if (!cfg.getSelectedValue) return trimPropValue(cfg.inputEl && cfg.inputEl.value);\n      return trimPropValue(cfg.getSelectedValue());\n    }\n\n    function getOptions(){\n      var options = cfg.getOptions ? cfg.getOptions() : [];\n      return options && options.slice ? options.slice(0) : [];\n    }\n\n    function setInputValue(nextValue){\n      if (!cfg.inputEl) return;\n      cfg.inputEl.value = String(nextValue || '');\n      syncModalComboboxClearButton(cfg.inputEl, cfg.clearEl);\n    }\n\n    function closeList(){\n      activeIndex = -1;\n      searchQuery = '';\n      setModalComboboxExpanded(cfg.comboEl, cfg.inputEl, cfg.listEl, false);\n      cfg.inputEl.removeAttribute('aria-activedescendant');\n      setInputValue(getSelectedValue());\n    }\n\n    function getFilteredOptions(){\n      var options = getOptions();\n      var filtered = [];\n      var idx = 0;\n      if (!searchQuery) return options;\n      for (idx = 0; idx < options.length; idx++) {\n        if (cfg.filterOption(options[idx], searchQuery)) filtered.push(options[idx]);\n      }\n      return filtered;\n    }\n\n    function syncAriaSelection(optionsList){\n      var nodes = cfg.listEl.querySelectorAll('[data-psm-combobox-value]');\n      var idx = 0;\n      if (!nodes.length) {\n        cfg.inputEl.removeAttribute('aria-activedescendant');\n        return;\n      }\n      if (activeIndex >= nodes.length) activeIndex = nodes.length - 1;\n      for (idx = 0; idx < nodes.length; idx++) {\n        if (idx === activeIndex) nodes[idx].classList.add('is-active');\n        else nodes[idx].classList.remove('is-active');\n      }\n      if (activeIndex > -1 && optionsList[activeIndex]) {\n        cfg.inputEl.setAttribute('aria-activedescendant', cfg.optionIdPrefix + activeIndex);\n        scrollModalComboboxOptionIntoView(cfg.listEl, nodes[activeIndex]);\n      } else {\n        cfg.inputEl.removeAttribute('aria-activedescendant');\n      }\n    }\n\n    function renderList(openAfterRender){\n      var filtered = getFilteredOptions();\n      var selectedValue = getSelectedValue();\n      var html = '';\n      var idx = 0;\n      var selectedIndex = -1;\n      var nodesForTop = null;\n      if (!cfg.listEl) return;\n      if (!filtered.length) {\n        if (!searchQuery) {\n          cfg.listEl.innerHTML = '';\n          closeList();\n          return;\n        }\n        cfg.listEl.innerHTML = '<div class=\"psm-vehicle-model-empty\">' + escapeHtml(cfg.emptyText) + '</div>';\n        activeIndex = -1;\n        cfg.inputEl.removeAttribute('aria-activedescendant');\n        if (openAfterRender) setModalComboboxExpanded(cfg.comboEl, cfg.inputEl, cfg.listEl, true);\n        return;\n      }\n      if (!searchQuery && selectedValue && activeIndex < 0) {\n        for (idx = 0; idx < filtered.length; idx++) {\n          if (String(filtered[idx]) === selectedValue) {\n            selectedIndex = idx;\n            break;\n          }\n        }\n        activeIndex = selectedIndex;\n      } else if (activeIndex >= filtered.length) {\n        activeIndex = filtered.length - 1;\n      }\n      for (idx = 0; idx < filtered.length; idx++) {\n        html += '<button type=\"button\" id=\"' + cfg.optionIdPrefix + idx + '\" class=\"psm-vehicle-model-option' +\n          (String(filtered[idx]) === selectedValue ? ' is-selected' : '') + '\" role=\"option\" aria-selected=\"' +\n          (String(filtered[idx]) === selectedValue ? 'true' : 'false') + '\" data-psm-combobox-value=\"' +\n          escapeHtml(filtered[idx]) + '\">' + escapeHtml(filtered[idx]) + '</button>';\n      }\n      cfg.listEl.innerHTML = html;\n      if (openAfterRender) setModalComboboxExpanded(cfg.comboEl, cfg.inputEl, cfg.listEl, true);\n      syncAriaSelection(filtered);\n      if (openAfterRender && !searchQuery && selectedIndex > -1) {\n        nodesForTop = cfg.listEl.querySelectorAll('[data-psm-combobox-value]');\n        if (nodesForTop[selectedIndex]) scrollModalComboboxOptionToTop(cfg.listEl, nodesForTop[selectedIndex]);\n      }\n    }\n\n    function openList(){\n      if (!cfg.inputEl || cfg.inputEl.disabled) return;\n      searchQuery = '';\n      activeIndex = -1;\n      renderList(true);\n      try {\n        cfg.inputEl.focus();\n        if (trimPropValue(cfg.inputEl.value)) cfg.inputEl.select();\n      } catch(_e) {}\n    }\n\n    function syncFromSelection(){\n      activeIndex = -1;\n      searchQuery = '';\n      setInputValue(getSelectedValue());\n      if (isOpen()) {\n        renderList(true);\n        return;\n      }\n      setModalComboboxExpanded(cfg.comboEl, cfg.inputEl, cfg.listEl, false);\n      cfg.inputEl.removeAttribute('aria-activedescendant');\n    }\n\n    function clearValue(){\n      searchQuery = '';\n      activeIndex = -1;\n      if (cfg.onClear) cfg.onClear();\n      syncFromSelection();\n      if (!cfg.inputEl.disabled) openList();\n    }\n\n    cfg.toggleEl.onclick = function(evt){\n      if (evt && evt.preventDefault) evt.preventDefault();\n      if (evt && evt.stopPropagation) evt.stopPropagation();\n      if (cfg.inputEl.disabled) return;\n      if (isOpen()) {\n        closeList();\n        return;\n      }\n      openList();\n    };\n    cfg.toggleEl.onmousedown = function(evt){\n      if (evt && evt.preventDefault) evt.preventDefault();\n    };\n\n    cfg.inputEl.onfocus = function(){\n      if (cfg.inputEl.disabled) return;\n      openList();\n    };\n\n    cfg.inputEl.onclick = function(){\n      if (cfg.inputEl.disabled) return;\n      openList();\n    };\n\n    cfg.inputEl.oninput = function(){\n      var nextQuery = String(cfg.inputEl.value || '');\n      var result = null;\n      if (cfg.inputEl.disabled) return;\n      if (cfg.normalizeInput) {\n        nextQuery = cfg.normalizeInput(nextQuery);\n        if (cfg.inputEl.value !== nextQuery) cfg.inputEl.value = nextQuery;\n      }\n      searchQuery = nextQuery;\n      activeIndex = -1;\n      syncModalComboboxClearButton(cfg.inputEl, cfg.clearEl);\n      if (cfg.onInput) {\n        result = cfg.onInput(nextQuery) || {};\n        if (typeof result.searchQuery !== 'undefined') searchQuery = String(result.searchQuery || '');\n        if (result.syncDisplay) {\n          syncFromSelection();\n          if (result.close) closeList();\n          return;\n        }\n        if (result.close) {\n          closeList();\n          return;\n        }\n      }\n      renderList(true);\n    };\n\n    cfg.inputEl.onblur = function(){\n      window.setTimeout(function(){\n        var result = cfg.onBlur ? (cfg.onBlur() || {}) : {};\n        if (result.syncDisplay) syncFromSelection();\n        closeList();\n      }, 120);\n    };\n\n    cfg.inputEl.onkeydown = function(evt){\n      var key = evt.key || evt.keyCode;\n      var filtered = null;\n      var selectedIndex = -1;\n      var chosenValue = '';\n      if (key === 'Escape' || key === 27) {\n        if (isOpen()) {\n          if (evt && evt.preventDefault) evt.preventDefault();\n          if (evt && evt.stopPropagation) evt.stopPropagation();\n          closeList();\n        }\n        return;\n      }\n      if (key === 'ArrowDown' || key === 40 || key === 'ArrowUp' || key === 38) {\n        filtered = getFilteredOptions();\n        if (!filtered.length) return;\n        if (evt && evt.preventDefault) evt.preventDefault();\n        if (!isOpen()) setModalComboboxExpanded(cfg.comboEl, cfg.inputEl, cfg.listEl, true);\n        if (key === 'ArrowDown' || key === 40) activeIndex = activeIndex < filtered.length - 1 ? activeIndex + 1 : 0;\n        else activeIndex = activeIndex > 0 ? activeIndex - 1 : filtered.length - 1;\n        renderList(true);\n        return;\n      }\n      if (key === 'Enter' || key === 13) {\n        filtered = getFilteredOptions();\n        if (!isOpen() || !filtered.length) return;\n        if (evt && evt.preventDefault) evt.preventDefault();\n        if (evt && evt.stopPropagation) evt.stopPropagation();\n        if (activeIndex < 0 && !searchQuery) {\n          for (selectedIndex = 0; selectedIndex < filtered.length; selectedIndex++) {\n            if (String(filtered[selectedIndex]) === getSelectedValue()) {\n              activeIndex = selectedIndex;\n              break;\n            }\n          }\n        }\n        if (activeIndex < 0 && filtered.length === 1) activeIndex = 0;\n        if (activeIndex < 0 || activeIndex >= filtered.length) return;\n        chosenValue = filtered[activeIndex];\n        searchQuery = '';\n        activeIndex = -1;\n        if (cfg.onSelect) cfg.onSelect(chosenValue, { source: 'keyboard-enter' });\n        closeList();\n        if (cfg.onEnterAfterSelect) cfg.onEnterAfterSelect(chosenValue);\n      }\n    };\n\n    cfg.listEl.onclick = function(evt){\n      var target = evt.target || evt.srcElement;\n      var value = '';\n      while (target && target !== cfg.listEl && (!target.getAttribute || !target.getAttribute('data-psm-combobox-value'))) {\n        target = target.parentNode;\n      }\n      if (!target || target === cfg.listEl || !target.getAttribute) return;\n      value = target.getAttribute('data-psm-combobox-value') || '';\n      if (!value) return;\n      searchQuery = '';\n      activeIndex = -1;\n      if (cfg.onSelect) cfg.onSelect(value, { source: 'click' });\n      closeList();\n    };\n\n    cfg.listEl.onmousedown = function(evt){\n      if (evt && evt.preventDefault) evt.preventDefault();\n    };\n\n    if (cfg.clearEl) {\n      cfg.clearEl.onclick = function(evt){\n        if (evt && evt.preventDefault) evt.preventDefault();\n        if (evt && evt.stopPropagation) evt.stopPropagation();\n        clearValue();\n      };\n      cfg.clearEl.onmousedown = function(evt){\n        if (evt && evt.preventDefault) evt.preventDefault();\n      };\n    }\n\n    syncFromSelection();\n    return {\n      close: closeList,\n      open: openList,\n      syncFromSelection: syncFromSelection\n    };\n  }\n\n  function readCustomColorFlag(form){\n    var host = null;\n    var attr = '';\n    if (!form) return null;\n    if (form.getAttribute) {\n      attr = String(form.getAttribute('data-ps-custom-color-product') || '').toLowerCase();\n      if (attr === 'true') return true;\n      if (attr === 'false') return false;\n    }\n    try {\n      host = form.closest ? form.closest('product-form') : null;\n    } catch (_e) {\n      host = null;\n    }\n    if (!host || !host.getAttribute) return null;\n    attr = String(host.getAttribute('data-ps-custom-color-product') || '').toLowerCase();\n    if (attr === 'true') return true;\n    if (attr === 'false') return false;\n    return null;\n  }\n\n  function isColorRoutePath(path){\n    return /^\\/colors\\/[^\\/]+\\/[^\\/]+(?:\\/[^\\/]+)?\\/?$/i.test(String(path || ''));\n  }\n\n  function hasVehicleLineItemContext(props){\n    var p = props || {};\n    return !!(\n      trimPropValue(p['Make']) ||\n      trimPropValue(p['Color Name']) ||\n      trimPropValue(p['Color Code']) ||\n      trimPropValue(p['_ps_make_slug']) ||\n      trimPropValue(p['_ps_color_slug'])\n    );\n  }\n\n  function hasRewrittenCustomColorContext(form, data, props){\n    var d = data || {};\n    var p = props || {};\n    var productSlug = '';\n    if (trimPropValue(p['_ps_make_slug']) || trimPropValue(p['_ps_color_slug'])) return true;\n    if (trimPropValue(d.make_slug) || trimPropValue(d.color_slug)) return true;\n    if (!hasVehicleLineItemContext(p)) return false;\n    productSlug = String(resolveProductSlug(form, d) || '').toLowerCase();\n    if (productSlug && getCustomColorRouteHandleMap()[productSlug]) return true;\n    return false;\n  }\n\n  function isCustomColorLineItem(form, data, props){\n    var d = data || {};\n    var p = props || {};\n    var flag = readCustomColorFlag(form);\n    var path = '';\n    if (flag === true) return true;\n    if (flag === false) return false;\n    if (hasRewrittenCustomColorContext(form, d, p)) return true;\n    try {\n      path = window.location && window.location.pathname ? String(window.location.pathname) : '';\n    } catch (_e) {\n      path = '';\n    }\n    return isColorRoutePath(path);\n  }\n\n  function validateCustomColorIntegrity(form, data, props){\n    var p = props || serializeProperties(form);\n    var required = ['Make', 'Year', 'Color Name', 'Color Code', '_ps_make_slug', '_ps_color_slug', '_ps_product_slug'];\n    var models = sanitizeModels((data && data.models) || []);\n    var index = 0;\n    var modelRequired = false;\n    var result = {\n      managed: false,\n      ok: true,\n      reason: '',\n      properties: p\n    };\n    if (!isCustomColorLineItem(form, data || {}, p)) return result;\n    result.managed = true;\n    for (index = 0; index < required.length; index += 1) {\n      if (!trimPropValue(p[required[index]])) {\n        result.ok = false;\n        result.reason = 'missing_' + required[index].toLowerCase().replace(/[^a-z0-9]+/g, '_').replace(/_+$/, '');\n        return result;\n      }\n    }\n    modelRequired = models.length > 0 && !onlyAllModelsValue(models);\n    if (modelRequired && !trimPropValue(p.Model)) {\n      result.ok = false;\n      result.reason = 'missing_model';\n      return result;\n    }\n    if (hasFactoryCodes(data) && !trimPropValue(p[FACTORY_PROP_KEY])) {\n      result.ok = false;\n      result.reason = 'missing_factory_code';\n      return result;\n    }\n    return result;\n  }\n\n  function shouldUseNativeCartFallback(form, data, err){\n    if (err && err.psNoNativeFallback) return false;\n    return !isCustomColorLineItem(form, data || {}, serializeProperties(form));\n  }\n\n  function attemptNativeCartFallback(form, data, err){\n    if (!shouldUseNativeCartFallback(form, data, err)) return false;\n    try {\n      if (form && typeof form.submit === 'function') {\n        form.submit();\n        return true;\n      }\n    } catch (_e) {}\n    return false;\n  }\n\n  function hasValidRepairPlanColorYear(data, props){\n    var year = trimPropValue((props || {})['Year']);\n    var years = sanitizeYears((data && data.years) || []);\n    if (!/^\\d{4}$/.test(year)) return false;\n    return !years.length || years.indexOf(year) > -1;\n  }\n\n  function prepareRepairPlanColorForm(form, data){\n    var slugInput = form && form.querySelector ? form.querySelector('input[name=\"properties[_ps_product_slug]\"]') : null;\n    var productSlug = slugInput && slugInput.value ? String(slugInput.value).toLowerCase() : String(form && form.getAttribute && form.getAttribute('data-ps-product-base') || '').toLowerCase();\n    ensureSlugProps(form, data || {});\n    if (productSlug && getCustomColorRouteHandleMap()[productSlug]) {\n      upsertHiddenProp(form, '_ps_product_slug', productSlug);\n    }\n    ensureBaseProps(form, data || {});\n    return serializeProperties(form);\n  }\n\n  function copyRepairPlanFormula(form, confirmedForm){\n    var confirmed = confirmedForm.querySelector('input[name=\"properties[Paint Formula]\"]');\n    var previous = form.querySelector('input[name=\"properties[Paint Formula]\"]');\n    if (confirmed && confirmed.value) upsertHiddenProp(form, 'Paint Formula', confirmed.value);\n    else if (previous) previous.parentNode.removeChild(previous);\n  }\n\n  function repairPlanOptInProperties(rawProperties){\n    var properties = {};\n    if (rawProperties && rawProperties._ps_repair_photo_opt_in === '1') properties._ps_repair_photo_opt_in = '1';\n    if (rawProperties && rawProperties._ps_repair_guide_opt_in === '1') properties._ps_repair_guide_opt_in = '1';\n    return Object.keys(properties).length ? properties : null;\n  }\n\n  function normalizeRepairPlanOrdinaryItems(rawItems){\n    var normalized = [];\n    var seen = {};\n    var list = rawItems && typeof rawItems.length === 'number' ? rawItems : [];\n    /* Keep one extra line so callers can reject the complete request instead\n       of silently truncating it at the supported 24-line boundary. */\n    var maxLines = 25;\n    var maxQuantity = 20;\n    var i = 0;\n    var raw = null;\n    var id = 0;\n    var quantity = 0;\n    var key = '';\n\n    for (i = 0; i < list.length && normalized.length < maxLines; i += 1) {\n      raw = list[i] || {};\n      if (!/^\\d+$/.test(String(raw.id)) || !/^\\d+$/.test(String(raw.quantity))) continue;\n      id = parseInt(raw.id, 10);\n      quantity = parseInt(raw.quantity, 10);\n      if (!id || id < 1 || id > 9007199254740991 || !quantity || quantity < 1 || quantity > maxQuantity) continue;\n      key = String(id);\n      if (seen[key]) continue;\n      seen[key] = true;\n      var markers = repairPlanOptInProperties(raw.properties);\n      normalized.push(markers ? { id: key, quantity: quantity, properties: markers } : { id: key, quantity: quantity });\n    }\n    return normalized;\n  }\n\n  function appendRepairPlanOrdinaryItems(items, ordinaryItems){\n    var combined = items && items.slice ? items.slice(0) : [];\n    var ordinary = normalizeRepairPlanOrdinaryItems(ordinaryItems);\n    var known = {};\n    var i = 0;\n    var item = null;\n    var key = '';\n\n    for (i = 0; i < combined.length; i += 1) {\n      item = combined[i] || {};\n      key = String(item.id || '');\n      if (key) known[key] = i;\n    }\n    for (i = 0; i < ordinary.length; i += 1) {\n      item = ordinary[i];\n      key = String(item.id || '');\n      if (!key) continue;\n      if (known[key] !== undefined) {\n        if (item.properties) {\n          var existing = combined[known[key]];\n          var marked = {};\n          var properties = {};\n          var property = '';\n          for (property in existing) {\n            if (Object.prototype.hasOwnProperty.call(existing, property)) marked[property] = existing[property];\n          }\n          for (property in (existing.properties || {})) {\n            if (Object.prototype.hasOwnProperty.call(existing.properties, property)) properties[property] = existing.properties[property];\n          }\n          if (item.properties._ps_repair_photo_opt_in === '1') properties._ps_repair_photo_opt_in = '1';\n          if (item.properties._ps_repair_guide_opt_in === '1') properties._ps_repair_guide_opt_in = '1';\n          marked.properties = properties;\n          combined[known[key]] = marked;\n        }\n        continue;\n      }\n      known[key] = combined.length;\n      combined.push(item.properties ? { id: key, quantity: item.quantity, properties: repairPlanOptInProperties(item.properties) } : { id: key, quantity: item.quantity });\n    }\n    return combined;\n  }\n\n  function repairPlanKitExtrasFromForm(form){\n    var checked = null;\n    var rawIds = '';\n    var ids = [];\n    var extras = [];\n    var qty = readQuantityNear(form);\n    var i = 0;\n    var id = 0;\n    if (!form || !form.querySelector) return extras;\n    checked = form.querySelector('.ps-kit-input:checked');\n    if (!checked) return extras;\n    rawIds = checked.getAttribute ? checked.getAttribute('data-kit-ids') || '' : '';\n    if (!rawIds) return extras;\n    ids = rawIds.split(',');\n    for (i = 0; i < ids.length; i += 1) {\n      id = parseInt(ids[i], 10);\n      if (id > 0) extras.push({ id: id, quantity: qty });\n    }\n    return extras;\n  }\n\n  function setRepairPlanButtonBusy(button, busy){\n    if (!button) return;\n    if (busy) {\n      if (typeof button.disabled !== 'undefined') button.disabled = true;\n      if (button.setAttribute) button.setAttribute('aria-disabled', 'true');\n      return;\n    }\n    if (typeof button.disabled !== 'undefined') button.disabled = false;\n    if (button.setAttribute) button.setAttribute('aria-disabled', 'false');\n  }\n\n  function completeRepairPlanRequest(controller, form, err, result){\n    var request = controller && controller._repairPlanRequest;\n    var callback = null;\n    if (!request || request.completed || request.form !== form) return false;\n    request.completed = true;\n    callback = request.done;\n    setRepairPlanButtonBusy(request.button, false);\n    controller._repairPlanRequest = null;\n    controller._repairPlanInFlight = false;\n    if (controller.atcForm === form) controller.atcForm = request.originalForm || null;\n    if (controller.atcBtn === request.button) controller.atcBtn = request.originalBtn || null;\n    if (request.hasOwnProperty && request.hasOwnProperty('originalPayload')) controller._lastPayload = request.originalPayload;\n    if (typeof request.originalProductBase !== 'undefined') controller._currentProductBase = request.originalProductBase;\n    if (typeof request.originalCatalyzedOnly !== 'undefined') controller._isCatalyzedOnly = request.originalCatalyzedOnly;\n    if (typeof request.originalSprayProduct !== 'undefined') controller._isSprayProduct = request.originalSprayProduct;\n    try {\n      if (typeof callback === 'function') callback(err || null, result || null);\n    } catch (_eCallback) {}\n    return true;\n  }\n\n  function cancelRepairPlanRequest(controller, form, message){\n    var err = new Error(message || 'Repair plan cancelled.');\n    err.psRepairPlanCancelled = true;\n    return completeRepairPlanRequest(controller, form, err, null);\n  }\n\n  function markRepairPlanTransportError(err){\n    if (!err || err.psIntegrityFailure || err.psRepairPlanCancelled || err.psRepairPlanPreflightRejected) return err;\n    err.psRepairPlanUncertain = true;\n    return err;\n  }\n\n  function stopCustomColorIntegrityFailure(controller, form, data, result){\n    var reason = result && result.reason ? result.reason : 'identity_unavailable';\n    try { releaseCartRequest(controller); } catch (_eReleaseCart) {}\n    try { releaseAtcFlow(controller); } catch (_eReleaseAtc) {}\n    try { if (controller && typeof controller.enable === 'function') controller.enable(); } catch (_eEnable) {}\n    try { if (controller && typeof controller._clearModalProductContext === 'function') controller._clearModalProductContext(); } catch (_eClear) {}\n    setFormErrorMessage(form, 'We could not confirm your vehicle and paint details. Please choose your vehicle again and retry.');\n    trackCustomColorFunnel('atc_integrity_blocked', {\n      product_type: funnelProductTypeFromItems([{ properties: (result && result.properties) || serializeProperties(form) }]),\n      outcome: 'blocked',\n      modal_block_reason: reason\n    });\n    completeRepairPlanRequest(controller, form, new Error('We could not confirm your vehicle and paint details. Please choose your vehicle again and retry.'), null);\n  }\n\n  function setFormErrorMessage(form, messageText){\n    var host = null;\n    var wrapper = null;\n    var message = null;\n    var fallback = null;\n    var text = trimPropValue(messageText);\n    if (!form) return;\n    try {\n      host = form.closest ? form.closest('product-form') : null;\n    } catch (_e) {\n      host = null;\n    }\n    if (host && typeof host.handleErrorMessage === 'function') {\n      host.handleErrorMessage(text || false);\n      return;\n    }\n    if (host && host.querySelector) {\n      wrapper = host.querySelector('.product-form__error-message-wrapper');\n    }\n    if (!wrapper && form.querySelector) {\n      wrapper = form.querySelector('.product-form__error-message-wrapper');\n    }\n    if (wrapper && wrapper.querySelector) {\n      message = wrapper.querySelector('.product-form__error-message');\n      if (message) message.textContent = text;\n      wrapper.toggleAttribute('hidden', !text);\n      return;\n    }\n    if (!form || !form.querySelector || !form.appendChild) return;\n    fallback = form.querySelector('[data-ps-atc-integrity-error=\"1\"]');\n    if (!text) {\n      if (fallback && fallback.parentNode) fallback.parentNode.removeChild(fallback);\n      return;\n    }\n    if (!fallback) {\n      fallback = document.createElement('div');\n      fallback.setAttribute('data-ps-atc-integrity-error', '1');\n      fallback.setAttribute('role', 'alert');\n      fallback.setAttribute('aria-live', 'assertive');\n      form.appendChild(fallback);\n    }\n    fallback.textContent = text;\n  }\n\n  function splitPathToken(raw){\n    var s = String(raw || '');\n    var q = s.indexOf('?');\n    var h = s.indexOf('#');\n    var cut = -1;\n    var parts = null;\n    var i = 0;\n    var token = '';\n    var m = null;\n    if (q > -1 && h > -1) cut = q < h ? q : h;\n    else if (q > -1) cut = q;\n    else if (h > -1) cut = h;\n    if (cut > -1) s = s.substring(0, cut);\n    m = s.match(/^https?:\\/\\/[^\\/]+(\\/.*)$/i);\n    if (m && m[1]) s = m[1];\n    s = String(s || '').toLowerCase();\n    if (!s) return '';\n    parts = s.split('/');\n    for (i = parts.length - 1; i >= 0; i--) {\n      if (parts[i]) {\n        token = parts[i];\n        break;\n      }\n    }\n    return token || '';\n  }\n\n  function containsKitHint(raw){\n    var s = String(raw || '').toLowerCase();\n    if (!s) return false;\n    if (s === 'kit') return true;\n    if (s.indexOf('kit-') === 0) return true;\n    if (s.indexOf('-kit-') > -1) return true;\n    if (/[-_]kit$/.test(s)) return true;\n    if (s.indexOf('touch-up-paint-kit-') === 0) return true;\n    return false;\n  }\n\n  function containsTricoHint(raw){\n    return String(raw || '').toLowerCase().indexOf('trico') > -1;\n  }\n\n  function isPathWithProductSlug(path){\n    var p = String(path || '').toLowerCase();\n    var token = extractProductLookupToken(p);\n    if (!p) return false;\n    if (/^\\/products\\/[^\\/]+\\/?$/.test(p)) return !!(token && getColorProductBaseMap()[token]);\n    if (/^\\/colors\\/[^\\/]+\\/[^\\/]+\\/[^\\/]+\\/?$/.test(p)) return !!(token && getCustomColorRouteHandleMap()[token]);\n    return false;\n  }\n\n  function findFeaturedIdNearForm(form){\n    var cur = form;\n    while (cur && cur !== document){\n      if (cur.getAttribute){\n        var attrVal = cur.getAttribute('data-ps-featured-id');\n        if (attrVal) return String(attrVal).toLowerCase();\n      }\n      if (cur.id && /^ps_(kits|products)_/.test(cur.id)) return String(cur.id).toLowerCase();\n      cur = cur.parentNode;\n    }\n    return '';\n  }\n\n  function findHrefHintNearForm(form){\n    var parent = null;\n    var link = null;\n    var root = null;\n    if (!form) return '';\n    parent = form.parentNode;\n    if (parent && parent.querySelector){\n      link = parent.querySelector('a[href*=\"/colors/\"], a[href*=\"/products/\"]');\n      if (link && link.getAttribute) return String(link.getAttribute('href') || '');\n    }\n    try {\n      root = form.closest ? form.closest('.card-wrapper, .grid__item, .image-with-text__grid, section, product-info') : null;\n    } catch (_e) {\n      root = null;\n    }\n    if (root && root.querySelector){\n      link = root.querySelector('a[href*=\"/colors/\"], a[href*=\"/products/\"]');\n      if (link && link.getAttribute) return String(link.getAttribute('href') || '');\n    }\n    return '';\n  }\n\n  function findProductInfoHintNearForm(form){\n    var root = null;\n    if (!form) return '';\n    try {\n      root = form.closest ? form.closest('product-info') : null;\n    } catch (_e) {\n      root = null;\n    }\n    if (!root || !root.getAttribute) return '';\n    return String(root.getAttribute('data-url') || root.getAttribute('data-product-url') || '');\n  }\n\n  function findLocalProductBase(form){\n    var formBase = '';\n    var infoHint = '';\n    var hrefHint = '';\n    if (form && form.getAttribute) {\n      formBase = baseSlugFromValue(form.getAttribute('data-ps-product-base') || '');\n      if (formBase) return formBase;\n    }\n    infoHint = findProductInfoHintNearForm(form);\n    formBase = baseSlugFromValue(splitPathToken(infoHint) || infoHint);\n    if (formBase) return formBase;\n    hrefHint = findHrefHintNearForm(form);\n    formBase = baseSlugFromValue(splitPathToken(hrefHint) || hrefHint);\n    if (formBase) return formBase;\n    return '';\n  }\n\n  function resolveProductSlug(form, data){\n    var d = data || {};\n    var raw = String(d.product_slug || '');\n    var rawToken = splitPathToken(raw);\n    var featuredId = findFeaturedIdNearForm(form);\n    var featuredNorm = String(featuredId || '').replace(/-/g, '_');\n    var infoHint = findProductInfoHintNearForm(form);\n    var infoToken = splitPathToken(infoHint);\n    var hrefHint = findHrefHintNearForm(form);\n    var hrefToken = splitPathToken(hrefHint);\n    var pathHint = '';\n    var pathToken = '';\n    var base = '';\n    var localBase = '';\n    var isKit = false;\n    var isTrico = false;\n\n    try {\n      pathHint = window.location && window.location.pathname ? String(window.location.pathname) : '';\n    } catch (_e) {\n      pathHint = '';\n    }\n    pathToken = splitPathToken(pathHint);\n\n    localBase = findLocalProductBase(form);\n    base = localBase;\n    if (!base) base = baseSlugFromValue(rawToken || raw);\n    if (!base && isPathWithProductSlug(pathHint)) base = baseSlugFromValue(pathToken || pathHint);\n    if (!base) base = getCurrentProductBase(d, form);\n\n    if (form && form.getAttribute && /^(kit-pen|kit-bottle|kit-spray)(-tricoat)?$/.test(form.getAttribute('data-ps-product-base') || '')) isKit = true;\n    if (featuredNorm.indexOf('ps_kits_') === 0) isKit = true;\n    if (!isKit && containsKitHint(rawToken || raw)) isKit = true;\n    if (!isKit && containsKitHint(infoToken || infoHint)) isKit = true;\n    if (!isKit && containsKitHint(hrefToken || hrefHint)) isKit = true;\n    if (!isKit && isPathWithProductSlug(pathHint) && containsKitHint(pathToken || pathHint)) isKit = true;\n\n    if (d && d.is_tricoat === true) isTrico = true;\n    if (!isTrico && featuredNorm.indexOf('tricoat') > -1) isTrico = true;\n    if (!isTrico && containsTricoHint(rawToken || raw)) isTrico = true;\n    if (!isTrico && containsTricoHint(infoToken || infoHint)) isTrico = true;\n    if (!isTrico && containsTricoHint(hrefToken || hrefHint)) isTrico = true;\n    if (!isTrico && isPathWithProductSlug(pathHint) && containsTricoHint(pathToken || pathHint)) isTrico = true;\n\n    if (base && isKit) return 'kit-' + base;\n    if (localBase) return localBase;\n    if (rawToken) return rawToken;\n    if (base) return base;\n    return '';\n  }\n\n  function ensureSlugProps(form, data){\n    var d = data || {};\n    var cc = readPsCc();\n    var existingProductSlug = '';\n    var existingInput = null;\n    var resolvedProductSlug = '';\n    if (readCustomColorFlag(form) === false) {\n      removePdpManagedColorProps(form);\n      return;\n    }\n    if (form && form.querySelector){\n      existingInput = form.querySelector('input[name=\"properties[_ps_product_slug]\"]');\n      if (existingInput && existingInput.value) {\n        existingProductSlug = String(existingInput.value);\n      }\n    }\n    resolvedProductSlug = resolveProductSlug(form, d);\n    if (!resolvedProductSlug && existingProductSlug) resolvedProductSlug = existingProductSlug;\n    upsertPdpManagedColorProp(form, '_ps_make_slug', d.make_slug || cc.make_slug || '');\n    upsertPdpManagedColorProp(form, '_ps_color_slug', d.color_slug || cc.color_slug || '');\n    upsertPdpManagedColorProp(form, '_ps_product_slug', resolvedProductSlug);\n  }\n  function ensureBaseProps(form, data){\n    var d = data || {};\n    // Prefer PS_SSR values, then ps_cc\n    var cc = readPsCc();\n    var useVehicleFields = canUseVehicleScope(cc, d);\n    var hiddenYear = '';\n    var hiddenModel = '';\n    var modelVal = '';\n    var productBase = '';\n    var modelInput = null;\n    var yearInput = form && form.querySelector ? form.querySelector('input[name=\"properties[Year]\"]') : null;\n    var productSlugInput = null;\n    if (readCustomColorFlag(form) === false) {\n      removePdpManagedColorProps(form);\n      return;\n    }\n    modelInput = form && form.querySelector ? form.querySelector('input[name=\"properties[Model]\"]') : null;\n    upsertPdpManagedColorProp(form, 'Make', d.make || cc.make || '');\n    upsertPdpManagedColorProp(form, 'Color Name', d.color || cc.color || '');\n    upsertPdpManagedColorProp(form, 'Color Code', d.code || cc.code || '');\n    hiddenYear = useVehicleFields ? (cc.year || '') : '';\n    hiddenModel = useVehicleFields && cc && cc.model ? String(cc.model).replace(/^\\s+|\\s+$/g, '') : '';\n    if (!hiddenYear && yearInput && typeof yearInput.value !== 'undefined') hiddenYear = trimPropValue(yearInput.value);\n    if (!hiddenModel && modelInput && typeof modelInput.value !== 'undefined') hiddenModel = trimPropValue(modelInput.value);\n    upsertPdpManagedColorProp(form, 'Year', hiddenYear);\n    upsertPdpManagedColorProp(form, '_isGuaranteed', d.isGuaranteed);\n\n    var fc = resolveScopedCookieFactoryCode(cc, d, []);\n    if (fc) {\n      upsertPdpManagedColorProp(form, FACTORY_PROP_KEY, fc);\n    }\n\n    modelVal = hiddenModel;\n    productBase = getCurrentProductBase(d, form);\n    if (!productBase && form && form.querySelector) {\n      productSlugInput = form.querySelector('input[name=\"properties[_ps_product_slug]\"]');\n      if (productSlugInput && productSlugInput.value) {\n        productBase = baseSlugFromValue(String(productSlugInput.value));\n      }\n    }\n    if (productBase && modelVal) {\n      upsertPdpManagedColorProp(form, 'Model', modelVal);\n    } else if (modelInput) {\n      removeHiddenProp(form, 'Model');\n    }\n  }\n\n  function isCatalyzedSprayOnly(colorName){\n    var n = String(colorName || '').toLowerCase();\n    return /\\(catalyzed spray(?: can)? only\\)/.test(n);\n  }\n\n  // Entry point for future product expansion:\n  // Theme setting: settings.ps_catalyzed_allowed_bases (comma-separated, default: spray).\n  // Example values: \"spray\" or \"spray,pro\".\n  var CATALYZED_ALLOWED_BASES = (function(){\n    var out = {};\n    var raw = '';\n    var parts = [];\n    var i = 0;\n    try {\n      raw = window.paintscratchTheme && window.paintscratchTheme.psCatalyzedAllowedBases\n        ? String(window.paintscratchTheme.psCatalyzedAllowedBases)\n        : 'spray';\n    } catch (_e) { raw = 'spray'; }\n    parts = String(raw || 'spray').toLowerCase().split(',');\n    for (i = 0; i < parts.length; i++) {\n      var key = String(parts[i] || '').replace(/^\\s+|\\s+$/g, '');\n      if (key) out[key] = true;\n    }\n    if (!out.spray) out.spray = true;\n    return out;\n  })();\n\n  function isKnownProductBase(base){\n    return base === 'pen' || base === 'bottle' || base === 'spray' || base === 'pro';\n  }\n\n  function isCatalyzedAllowedBase(base){\n    return !!(base && CATALYZED_ALLOWED_BASES[base]);\n  }\n\n  function getColorProductBaseMap(){\n    var raw = null;\n    if (getColorProductBaseMap.cache) return getColorProductBaseMap.cache;\n    try {\n      raw = window.paintscratchTheme && window.paintscratchTheme.psColorProductBaseMap\n        ? window.paintscratchTheme.psColorProductBaseMap\n        : null;\n    } catch (_e) {\n      raw = null;\n    }\n    if (raw && typeof raw === 'object') {\n      getColorProductBaseMap.cache = raw;\n      return raw;\n    }\n    getColorProductBaseMap.cache = {\n      pen: 'pen',\n      'pen-tricoat': 'pen',\n      'touch-up-paint-pen': 'pen',\n      bottle: 'bottle',\n      'bottle-tricoat': 'bottle',\n      'touch-up-paint-bottle-2oz': 'bottle',\n      spray: 'spray',\n      'spray-tricoat': 'spray',\n      'touch-up-paint-spray-can': 'spray',\n      pro: 'pro',\n      'pro-tricoat': 'pro',\n      'touch-up-paint-pro-gallon': 'pro',\n      'kit-pen': 'pen',\n      'kit-pen-tricoat': 'pen',\n      'touch-up-paint-kit-pen': 'pen',\n      'kit-bottle': 'bottle',\n      'kit-bottle-tricoat': 'bottle',\n      'touch-up-paint-kit-bottle': 'bottle',\n      'kit-spray': 'spray',\n      'kit-spray-tricoat': 'spray',\n      'touch-up-paint-kit-spray': 'spray'\n    };\n    return getColorProductBaseMap.cache;\n  }\n\n  function getCustomColorRouteHandleMap(){\n    var raw = null;\n    if (getCustomColorRouteHandleMap.cache) return getCustomColorRouteHandleMap.cache;\n    try {\n      raw = window.paintscratchTheme && window.paintscratchTheme.psCustomColorRouteHandles\n        ? window.paintscratchTheme.psCustomColorRouteHandles\n        : null;\n    } catch (_e) {\n      raw = null;\n    }\n    if (raw && typeof raw === 'object') {\n      getCustomColorRouteHandleMap.cache = raw;\n      return raw;\n    }\n    getCustomColorRouteHandleMap.cache = {\n      pro: true,\n      'pro-tricoat': true,\n      spray: true,\n      'spray-tricoat': true,\n      bottle: true,\n      'bottle-tricoat': true,\n      pen: true,\n      'pen-tricoat': true,\n      'kit-pen': true,\n      'kit-bottle': true,\n      'kit-spray': true,\n      'kit-pen-tricoat': true,\n      'kit-bottle-tricoat': true,\n      'kit-spray-tricoat': true\n    };\n    return getCustomColorRouteHandleMap.cache;\n  }\n\n  function extractProductLookupToken(raw){\n    var s = String(raw || '').toLowerCase();\n    var parts = null;\n    if (!s) return '';\n    if (s.indexOf('shopify://products/') > -1) {\n      return s.split('shopify://products/').pop().split('?')[0].split('#')[0].split('/')[0];\n    }\n    if (s.indexOf('/products/') > -1) {\n      return s.split('/products/').pop().split('?')[0].split('#')[0].split('/')[0];\n    }\n    if (s.indexOf('/colors/') > -1) {\n      parts = s.split('/colors/').pop().split('?')[0].split('#')[0].split('/');\n      if (parts.length > 2) return parts[2];\n    }\n    s = s.split('?')[0].split('#')[0];\n    s = s.replace(/^\\/+/, '').replace(/\\/+$/, '');\n    if (s.indexOf('/') > -1) {\n      parts = s.split('/');\n      s = parts[parts.length - 1];\n    }\n    return s;\n  }\n\n  function baseSlugFromValue(raw){\n    var token = extractProductLookupToken(raw);\n    var map = getColorProductBaseMap();\n    if (token && map[token]) return map[token];\n    if (isKnownProductBase(token)) return token;\n    return '';\n  }\n\n  function getCurrentProductBase(payload, form){\n    var byForm = \"\";\n    var byPayload = baseSlugFromValue(payload && payload.product_slug);\n    byForm = findLocalProductBase(form);\n    if (byForm) return byForm;\n    if (byPayload) return byPayload;\n    try {\n      var path = window.location && window.location.pathname ? String(window.location.pathname) : '';\n      if (isPathWithProductSlug(path)) {\n        var byPath = baseSlugFromValue(splitPathToken(path) || path);\n        if (byPath) return byPath;\n      }\n      var m = path.match(/\\/products\\/(pen|bottle|spray|pro)(?:-tricoat)?\\b/i);\n      if (m && m[1]) return String(m[1]).toLowerCase();\n    } catch (_e) {}\n    return '';\n  }\n\n  function buildSprayOnlyUrl(payload){\n    var cc = readPsCc();\n    var ms = (payload && payload.make_slug) || cc.make_slug || '';\n    var cs = (payload && payload.color_slug) || cc.color_slug || '';\n    if (ms && cs) return '/colors/' + ms + '/' + cs + '/spray';\n    return '/products/spray';\n  }\n\n  function isColorProductRoute(){\n    var path = '';\n    try {\n      path = window.location && window.location.pathname ? String(window.location.pathname) : '';\n    } catch (_e) {\n      path = '';\n    }\n    return path.indexOf('/colors/') === 0;\n  }\n\n  function findDynamicCheckoutNearForm(form){\n    if (!form) return null;\n    var root = null;\n    try {\n      root = form.closest ? form.closest('product-form') : null;\n    } catch (_e) {}\n    if (!root) root = form;\n    var local = root.querySelector('.shopify-payment-button');\n    if (local) return local;\n    var parent = form.parentNode;\n    if (parent && parent.querySelector) {\n      var siblingLocal = parent.querySelector('.shopify-payment-button');\n      if (siblingLocal) return siblingLocal;\n    }\n    return null;\n  }\n\n  // ------------------------ Collection helpers (tricoat toggle) ------------------------\n  function resolveSectionFromHook(hook){\n    var sec = null;\n    var hookSection = hook && hook.closest ? hook.closest('section') : null;\n    if (hookSection && hookSection.nextElementSibling) sec = hookSection.nextElementSibling;\n    if (!sec && hook && hook.parentNode && hook.parentNode.nextElementSibling) {\n      var sib = hook.parentNode.nextElementSibling;\n      if (sib.tagName && sib.tagName.toLowerCase() === 'section') sec = sib;\n    }\n    if (sec && (!sec.tagName || sec.tagName.toLowerCase() !== 'section')) sec = null;\n    return sec;\n  }\n\n  function findCollectionPairs(){\n    var hooks = document.querySelectorAll('.ps-collection-hook[data-ps-collection]');\n    var out = [], i, hook, type, sec;\n    for (i = 0; i < hooks.length; i++){\n      hook = hooks[i];\n      type = hook.getAttribute('data-ps-collection') || '';\n      sec = resolveSectionFromHook(hook);\n      if (sec) out.push({ type: type, el: sec });\n    }\n    return out;\n  }\n\n  function setHidden(el, hide){\n    if (!el) return;\n    if (hide){\n      el.setAttribute('data-ps-collection-hidden','');\n      el.setAttribute('aria-hidden','true');\n      el.style.display = 'none';\n    } else {\n      el.removeAttribute('data-ps-collection-hidden');\n      el.setAttribute('aria-hidden','false');\n      el.style.display = '';\n    }\n  }\n\n// ------------------------ Cart helpers ------------------------\n// Replace [MAKE] [COLOR] [CODE] tokens in cart notification/drawer using line item properties.\nfunction psReplaceInRoot(root, map){\n  if (!root) return;\n  var sels = [\n    '.cart-item__name a',\n    '.cart-item__name',\n    '.cart-notification-product__name',\n    '.cart-notification__heading',\n    '.cart-item__details a',\n    '.product-option',\n    'h3','h2'\n  ];\n  for (var s = 0; s < sels.length; s++){\n    var nodes = root.querySelectorAll(sels[s]);\n    for (var i = 0; i < nodes.length; i++){\n      var el = nodes[i];\n      var txt = (el.textContent || '');\n      if (!txt || txt.indexOf('[') === -1) continue;\n      var out = txt.replace(/\\[MAKE\\]/g, map['[MAKE]'])\n                   .replace(/\\[COLOR\\]/g, map['[COLOR]'])\n                   .replace(/\\[CODE\\]/g, map['[CODE]']);\n      if (out !== txt){\n        if (el.firstChild && el.firstChild.nodeType === 3 && el.childNodes.length === 1){\n          el.firstChild.nodeValue = out;\n        } else {\n          el.textContent = out;\n        }\n      }\n    }\n  }\n}\nfunction psReplaceCartPlaceholders(props){\n  props = props || {};\n  var map = {\n    '[MAKE]': props['Make'] || '',\n    '[COLOR]': props['Color Name'] || props['Color'] || '',\n    '[CODE]': props['Color Code'] || props['Code'] || ''\n  };\n  var roots = [];\n  var r1 = document.getElementById('cart-notification'); if (r1) roots.push(r1);\n  var r2 = document.querySelector('cart-notification, .cart-notification'); if (r2 && roots.indexOf(r2) === -1) roots.push(r2);\n  var r3 = document.getElementById('CartDrawer'); if (r3) roots.push(r3);\n  var r4 = document.querySelector('cart-drawer, .cart-drawer'); if (r4 && roots.indexOf(r4) === -1) roots.push(r4);\n  for (var i = 0; i < roots.length; i++) psReplaceInRoot(roots[i], map);\n}\n\nfunction psSetAgentCartAddSuccess(items){\n  var item = items && items[0] ? items[0] : null;\n  var props = item && item.properties ? item.properties : {};\n  var detail = '';\n  if (!document || !document.body) return;\n  detail = [\n    'Product: ' + (props['Product'] || props['_ps_product_slug'] || ''),\n    'Color Code: ' + (props['Color Code'] || ''),\n    'Color Name: ' + (props['Color Name'] || ''),\n    'Make: ' + (props['Make'] || ''),\n    'Year: ' + (props['Year'] || ''),\n    'Model: ' + (props['Model'] || '')\n  ].join(' | ');\n  document.body.setAttribute('data-ps-agent-cart-add-success', 'true');\n  document.body.setAttribute('data-ps-agent-cart-add-summary', detail);\n}\n\nfunction currentSectionsUrl(){ return window.location.pathname; }\n\n  function currentSectionId(form){\n    var input = form && form.querySelector('input[name=\"section-id\"]');\n    if (input && input.value) return String(input.value);\n    var el = form;\n    while (el && el.nodeType === 1){\n      if (el.id && /^shopify-section-/.test(el.id)) return el.id.replace(/^shopify-section-/, '');\n      el = el.parentNode;\n    }\n    return '';\n  }\n\n  function applySections(map){\n    if(!map) return;\n\n    function replaceByIdOrInject(key, html){\n      var did = false;\n      var cur = document.getElementById('shopify-section-' + key);\n      if(cur){\n        try{\n          var tmp = document.createElement('div');\n          tmp.innerHTML = String(html || '');\n          var fresh = tmp.firstElementChild;\n          if(fresh) cur.parentNode.replaceChild(fresh, cur);\n          else cur.outerHTML = String(html || '');\n          did = true;\n        }catch(_e){}\n      }\n      if(did) return true;\n\n      if(key === 'cart-notification-product'){\n        var productTarget =\n          document.querySelector('[data-cart-notification-product]') ||\n          document.querySelector('#cart-notification-product') ||\n          document.querySelector('.cart-notification-product, .cart-notification__product');\n        if(productTarget){ productTarget.innerHTML = String(html || ''); did = true; }\n      }else if(key === 'cart-notification-button'){\n        var linksTarget =\n          document.querySelector('[data-cart-notification-button]') ||\n          document.querySelector('#cart-notification-button') ||\n          document.querySelector('.cart-notification__links, .notification__links');\n        if(linksTarget){ linksTarget.innerHTML = String(html || ''); did = true; }\n      }else if(key === 'cart-icon-bubble'){\n        var bubbleWrap = document.getElementById('shopify-section-cart-icon-bubble') ||\n                         document.querySelector('.header__icon--cart, [data-cart-icon-bubble]');\n        if(bubbleWrap){\n          try{\n            var c = document.getElementById('shopify-section-cart-icon-bubble');\n            if(c){\n              var t2 = document.createElement('div'); t2.innerHTML = String(html || '');\n              var f2 = t2.firstElementChild;\n              if(f2) c.parentNode.replaceChild(f2, c); else c.outerHTML = String(html || '');\n            }else{\n              bubbleWrap.innerHTML = String(html || '');\n            }\n            did = true;\n          }catch(_e){}\n        }\n      }\n      return did;\n    }\n\n    for(var key in map){\n      if(!map.hasOwnProperty(key)) continue;\n      replaceByIdOrInject(key, map[key]);\n    }\n\n    try{\n      var root = document.getElementById('cart-notification') ||\n                 (document.querySelector('cart-notification') || document);\n      var linksWrap = root.querySelector('.cart-notification__links, .notification__links');\n      if(linksWrap){\n        var hasLink = !!linksWrap.querySelector('a, button[type=\"button\"][data-href]');\n        if(!hasLink){\n          var holder = document.getElementById('shopify-section-cart-notification-button');\n          var label = (holder && holder.textContent ? holder.textContent.trim() : '') || 'View cart';\n          var a = document.createElement('a');\n          a.href = '/cart';\n          a.className = 'button button--primary';\n          a.textContent = label;\n          linksWrap.innerHTML = '';\n          linksWrap.appendChild(a);\n        }\n      }\n    }catch(_e){}\n  }\n\n  function limitNotificationToAddedItems(items){\n    if(!items || !items.length) return;\n    var ids = {};\n    for(var i=0;i<items.length;i++){\n      var id = String(items[i] && items[i].id || '').trim();\n      if(id) ids[id] = 1;\n    }\n    var root = document.getElementById('cart-notification') ||\n               (document.querySelector('cart-notification') || document);\n    var list = root.querySelector('#cart-notification-product, .cart-notification-product, .cart-notification__product');\n    if(!list) return;\n    var rows = list.querySelectorAll('[id^=\"cart-notification-product-\"], .cart-item');\n    for(var r=0; r<rows.length; r++){\n      var row = rows[r];\n      var vid = '';\n      if(row.id){\n        var m = row.id.match(/cart-notification-product-(\\d+)/);\n        if(m) vid = m[1];\n      }\n      if(!vid){ vid = row.getAttribute && row.getAttribute('data-variant-id') || ''; }\n      if(vid && ids[vid]) continue;\n      if(!vid && items.length === 1) continue;\n      try{ row.parentNode.removeChild(row); }catch(_e){}\n    }\n  }\n\n  function openCartNotificationPanel(){\n    var panel = document.getElementById('cart-notification');\n    if (!panel || !panel.classList) return false;\n    if (panel.style && panel.style.removeProperty) {\n      panel.style.removeProperty('top');\n    }\n    panel.classList.add('animate');\n    panel.classList.add('active');\n    return true;\n  }\n\n  function cartNotificationHasContent(){\n    var panel = document.getElementById('cart-notification');\n    var product;\n    if (!panel || !panel.querySelector) return false;\n    product = panel.querySelector('#cart-notification-product, .cart-notification-product, .cart-notification__product');\n    if (!product) return false;\n    return !!String(product.textContent || '').replace(/\\s+/g, '');\n  }\n\n  function ensureCartNotificationVisible(){\n    var panel = document.getElementById('cart-notification');\n    if (!panel || !panel.classList || panel.classList.contains('active')) return;\n    if (!cartNotificationHasContent()) return;\n    openCartNotificationPanel();\n  }\n\n  function openCartUI(){\n    try{\n      var notif = document.querySelector('cart-notification');\n      if (notif && typeof notif.open === 'function'){ notif.open(); return; }\n      if (window.customElements && window.customElements.whenDefined) {\n        window.customElements.whenDefined('cart-notification').then(function(){\n          var readyNotif = document.querySelector('cart-notification');\n          if (readyNotif && typeof readyNotif.open === 'function') {\n            readyNotif.open();\n            return;\n          }\n          openCartNotificationPanel();\n        });\n        setTimeout(function(){\n          var panel = document.getElementById('cart-notification');\n          if (!panel || !panel.classList || panel.classList.contains('active')) return;\n          openCartNotificationPanel();\n        }, 250);\n        return;\n      }\n      if (openCartNotificationPanel()) return;\n      if (notif){ try{ notif.classList.add('is-visible'); }catch(_e){} }\n    }catch(_e){}\n    var triggers = [\n      '[data-cart-drawer-toggle]',\n      '[data-action=\"open-cart\"]',\n      '[aria-controls=\"CartDrawer\"]',\n      'button.cart-toggle',\n      '.header__icon--cart a, .header__icon--cart button'\n    ];\n    for (var i=0;i<triggers.length;i++){\n      var t = document.querySelector(triggers[i]);\n      if (t){ try{ t.click(); return; }catch(_e){} }\n    }\n  }\n\n  function pluralizeNotificationIfNeeded(itemCount){\n    if (itemCount <= 1) return;\n    var root = document.getElementById('shopify-section-cart-notification') ||\n               document.querySelector('cart-notification, .cart-notification');\n    if (!root) return;\n    var heading = root.querySelector('[data-notification-heading], .cart-notification__heading, .notification__heading, h2, h3');\n    if (!heading) return;\n    var txt = (heading.textContent || '').trim();\n    if (/item added/i.test(txt)) heading.textContent = 'Items added to your cart';\n  }\n\n  function renderAddedItems(resp, items){\n    var propsForTokens = {};\n    if (resp && resp.sections) applySections(resp.sections);\n    try {\n      propsForTokens = (items && items[0] && items[0].properties) || {};\n      psReplaceCartPlaceholders(propsForTokens);\n    } catch(_e){}\n    try { psSetAgentCartAddSuccess(items); } catch(_eAgentMarker){}\n    limitNotificationToAddedItems(items);\n    if (items && items.length > 1) pluralizeNotificationIfNeeded(items.length);\n    openCartUI();\n    setTimeout(ensureCartNotificationVisible, 100);\n    setTimeout(ensureCartNotificationVisible, 500);\n    setTimeout(function(){ try{ psReplaceCartPlaceholders(propsForTokens); }catch(_e){} }, 50);\n  }\n\n  function addItemsAndRender(items, sectionId, done, opts){\n    var options = opts || {};\n    var completed = false;\n    var integrityResult = null;\n    var payload = {\n      items: items,\n      sections: CONFIG.cartSections.join(','),\n      sections_url: currentSectionsUrl()\n    };\n    if (options.integrityForm) {\n      integrityResult = validateCustomColorIntegrity(options.integrityForm, options.integrityData || {});\n      if (!integrityResult.ok) {\n        var integrityError = new Error('We could not confirm your vehicle and paint details. Please choose your vehicle again and retry.');\n        integrityError.psIntegrityFailure = true;\n        integrityError.psIntegrityReason = integrityResult.reason;\n        if (done) done(integrityError, null);\n        return;\n      }\n    }\n    if (sectionId) payload['section-id'] = sectionId;\n\n    if (options.requireCompleteItems) {\n      if (!Array.isArray(items) || items.length > 32 || !items.length || !items.every(function(item) {\n        return item && /^\\d+$/.test(String(item.id)) && Number(item.id) > 0 && Number(item.id) <= 9007199254740991 && /^\\d+$/.test(String(item.quantity)) && Number(item.quantity) >= 1 && Number(item.quantity) <= 20;\n      })) {\n        var boundsError = new Error('This repair plan has too many items or an invalid quantity. Reduce the selection and try again.');\n        boundsError.psRepairPlanPreflightRejected = true;\n        finishRequest(boundsError);\n        return;\n      }\n    }\n\n    function finishRequest(err, result){\n      if (completed) return;\n      completed = true;\n      if (err) trackCustomColorFunnel('cart_failure', { product_type: funnelProductTypeFromItems(items), outcome: 'failure' });\n      if (done) done(err || null, result || null);\n    }\n\n    function finishTransportFailure(message){\n      var err = new Error(message);\n      err.psNoNativeFallback = true;\n      finishRequest(err);\n    }\n\n    if (typeof options.beforeSend === 'function') {\n      var approved = false;\n      try { approved = options.beforeSend(items) === true; } catch (_eBeforeSend) {}\n      if (!approved) {\n        var changed = new Error('Nothing was added. Review your vehicle details and selected products, then add them to your cart.');\n        changed.psRepairPlanPreflightRejected = true;\n        finishRequest(changed);\n        return;\n      }\n    }\n    trackCustomColorFunnel('cart_request', { product_type: funnelProductTypeFromItems(items), outcome: 'requested' });\n\n    var xhr = new XMLHttpRequest();\n    xhr.open('POST','/cart/add.js',true);\n    xhr.timeout = 10000;\n    xhr.setRequestHeader('Content-Type','application/json; charset=UTF-8');\n    xhr.setRequestHeader('Accept','application/json');\n    xhr.onreadystatechange = function(){\n      if (xhr.readyState !== 4) return;\n      if (xhr.status >= 200 && xhr.status < 300){\n        var resp = null;\n        try { resp = JSON.parse(xhr.responseText || '{}'); } catch(e){ resp = {}; }\n        if (options.requireCompleteItems) {\n          var returned = resp && resp.items;\n          var complete = Array.isArray(returned) && items.every(function(expected){\n            return returned.some(function(actual){ return String(actual.variant_id || actual.id) === String(expected.id) && Number(actual.quantity) >= expected.quantity; });\n          });\n          if (!complete) {\n            finishTransportFailure('We could not confirm every selected product in the cart.');\n            return;\n          }\n        }\n        trackCustomColorFunnel('cart_success', { product_type: funnelProductTypeFromItems(items), outcome: 'success' });\n        if (options.quickAddModal && typeof options.quickAddModal.hide === 'function') {\n          document.body.addEventListener('modalClosed', function () {\n            renderAddedItems(resp, items);\n            finishRequest(null, { parsed: resp });\n          }, { once: true });\n          options.quickAddModal.hide(true);\n          return;\n        }\n\n        renderAddedItems(resp, items);\n        finishRequest(null, { parsed: resp });\n      } else {\n        var err;\n        try {\n          var j = JSON.parse(xhr.responseText||'{}');\n          err = new Error(j && j.description ? j.description : ('add.js ' + xhr.status));\n          err.payload = j;\n        } catch(e2){\n          err = new Error('add.js ' + xhr.status);\n        }\n        finishRequest(err);\n      }\n    };\n    xhr.onerror = function(){ finishTransportFailure('Unable to add this item to your cart.'); };\n    xhr.ontimeout = function(){ finishTransportFailure('The cart request timed out. Please try again.'); };\n    xhr.send(JSON.stringify(payload));\n  }\n\n  // ------------------------ PDP Controller ------------------------\n  PS.PDP = {\n    atcBtn: null,\n    atcForm: null,\n    _bound: false,\n    _onAtcHandler: null,\n    _years: [],\n    _factoryCodes: [],\n    _lastPayload: null,\n    _collectionPairs: [],\n    _isCatalyzedOnly: false,\n    _isSprayProduct: false,\n    _currentProductBase: '',\n    _catalyzedListenerBound: false,\n    _colorContextListenerBound: false,\n    _modalProductContext: null,\n    _cartRequestInFlight: false,\n    _atcFlowInFlight: false,\n    _repairPlanRequest: null,\n    _repairPlanInFlight: false,\n    _vehicleModalSession: 0,\n\n    init: function(){\n      var payload = {};\n      // Prefer the primary PDP buy button, not quick-add card buttons.\n      this.atcBtn = document.querySelector('product-form .product-form__submit');\n      if (!this.atcBtn) {\n        this.atcBtn = document.querySelector('product-form [type=\"submit\"], form[action*=\"/cart/add\"] [type=\"submit\"]');\n      }\n      if (!this.atcBtn) return false;\n      var pf = this.atcBtn.closest && this.atcBtn.closest('product-form');\n      this.atcForm = pf ? pf.querySelector('form') : null;\n      if (!this.atcForm) this.atcForm = document.querySelector('form[action*=\"/cart/add\"]');\n\n      var ssr = (PS.ssr && PS.ssr()) || null;\n      var ssrRaw = (typeof window !== 'undefined' && window.PS_SSR && typeof window.PS_SSR === 'object')\n        ? window.PS_SSR\n        : null;\n\n      payload = mergePayload(ssrRaw || {}, ssr || {});\n      this._lastPayload = mergePayload(payload, this._lastPayload || {});\n      syncControllerPayload(this, this._lastPayload || {});\n      hydrateVehicleConfirmation();\n\n      bindPdpColorContextListener();\n      this._catalyzedListenerBound = true;\n\n      this._collectionPairs = findCollectionPairs();\n      this.toggleCollectionsByFlag(!!(this._lastPayload && this._lastPayload.is_tricoat));\n\n      // PS - Kit Options Init\n      this._initKits();\n\n      if (!this._bound){\n        this._bindYearGate();\n        this._bound = true;\n      }\n      return true;\n    },\n\n    rememberColorContext: function(detail){\n      var d = detail && typeof detail === 'object' ? detail : {};\n      var nextPayload = mergePayload(this._lastPayload || {}, d);\n      syncControllerPayload(this, nextPayload);\n      hydrateVehicleConfirmation();\n      if (d.hasOwnProperty('is_tricoat')) {\n        this.toggleCollectionsByFlag(!!d.is_tricoat);\n      }\n    },\n\n    _captureModalProductContext: function(form, btn){\n      var image = null;\n      var name = '';\n      var variantName = '';\n      var context = null;\n      if (btn) context = readModalContextFromKitSelection(btn);\n      if (!context && form) context = readModalContextFromKitSelection(form);\n      if (context && context.src) {\n        if (!context.name) {\n          context.name = modalContextNameFromSlug((this._lastPayload && this._lastPayload.product_slug) || '');\n          if (!context.name) context.name = readModalContextNameFromPathname((window.location && window.location.pathname) ? window.location.pathname : '');\n          if (!context.name) context.name = readModalContextNameFromDocument();\n        }\n        this._modalProductContext = context;\n        return this._modalProductContext;\n      }\n      if (btn) image = findModalContextImageFromNode(btn);\n      if (!image && form) image = findModalContextImageFromNode(form);\n      if (btn) variantName = readModalContextVariantNameFromNode(btn);\n      if (!variantName && form) variantName = readModalContextVariantNameFromNode(form);\n      if (btn) name = readModalContextNameFromNode(btn);\n      if (!name && form) name = readModalContextNameFromNode(form);\n      if (!name) name = modalContextNameFromSlug((this._lastPayload && this._lastPayload.product_slug) || '');\n      if (!name && form && form.getAttribute) name = modalContextNameFromSlug(form.getAttribute('data-ps-product-base') || '');\n      if (!name) name = readModalContextNameFromPathname((window.location && window.location.pathname) ? window.location.pathname : '');\n      if (!name) name = readModalContextNameFromDocument();\n      if (variantName) name = variantName;\n      if (image && image.src) {\n        context = {\n          src: image.src,\n          alt: image.alt,\n          width: image.width,\n          height: image.height,\n          name: name\n        };\n      }\n      this._modalProductContext = context;\n      return this._modalProductContext;\n    },\n\n    _clearModalProductContext: function(){\n      this._modalProductContext = null;\n    },\n\n    _getModalProductContextHtml: function(){\n      var context = this._modalProductContext;\n      var sizeAttrs = '';\n      var nameHtml = '';\n      if (!context || !context.src) return '';\n      if (context.width > 0) sizeAttrs += ' width=\"' + String(context.width) + '\"';\n      if (context.height > 0) sizeAttrs += ' height=\"' + String(context.height) + '\"';\n      if (context.name) {\n        nameHtml =\n          '<div class=\"psm-product-context__copy\">' +\n            '<span class=\"psm-product-context__name\">' + escapeHtml(context.name) + '</span>' +\n          '</div>';\n      }\n      return '' +\n        '<div class=\"psm-product-context\">' +\n          '<div class=\"psm-product-context__image-wrap\">' +\n            '<img class=\"psm-product-context__image\" src=\"' + escapeHtml(context.src) + '\" alt=\"' + escapeHtml(context.alt) + '\"' + sizeAttrs + '>' +\n          '</div>' +\n          nameHtml +\n        '</div>';\n    },\n\n    _initKits: function() {\n      var self = this;\n      var inputs = document.querySelectorAll('.ps-kit-input');\n      if (!inputs.length) return;\n\n      // PS - Patch: Inject styled HTML for 1st option (Title + Description)\n      // Note: Price is now handled by the Liquid template in a separate column.\n      try {\n        var firstInput = inputs[0];\n        var firstRow = firstInput.closest('.ps-kit-row');\n        if (firstRow) {\n          var textTarget = firstRow.querySelector('.ps-kit-text-target');\n          if (textTarget) {\n            var payload = self._lastPayload || (typeof window.PS_SSR !== 'undefined' ? window.PS_SSR : {});\n            var colorName = payload.color || '';\n            // Tricoat check: strictly check payload or fallback to generic regex on existing text if needed\n            var isTricoat = /tricoat/i.test(colorName);\n            // PS Patch: Force simple title without product slug prefix\n            var titleText = isTricoat ? 'Paint Only (Tricoat)' : 'Paint Only';\n            var descText = isTricoat\n              ? 'Includes the color-matched basecoat and midcoat. Apply basecoat first, then midcoat, then clearcoat when the finish calls for it.'\n              : 'Color-matched paint for the selected finish. Add primer, clearcoat, or polishing supplies only when the repair and finish call for them.';\n\n            textTarget.innerHTML = \n              '<div class=\"ps-kit-title\">' + titleText + '</div>' + \n              '<div class=\"ps-kit-desc\">' + descText + '</div>';\n          }\n        }\n      } catch (_e) {}\n\n      // 1. Capture Original Main Image\n      var mainMedia = document.querySelector('.product__media img');\n      var originalSrc = mainMedia ? (mainMedia.currentSrc || mainMedia.src) : null;\n\n      // 1b. Capture Modal Hero Image (Fix for mobile modal showing wrong image)\n      var modalHeroImg = document.querySelector('.product-media-modal__content img');\n      var originalModalSrc = modalHeroImg ? (modalHeroImg.currentSrc || modalHeroImg.src) : null;\n\n      // 2. Capture Original Thumbnail Image (The first one in the list)\n      var firstThumbImg = document.querySelector('.thumbnail-list__item:first-child img') || \n                          document.querySelector('.product__media-toggle:first-child img');\n      var originalThumbSrc = firstThumbImg ? (firstThumbImg.getAttribute('data-ps-src') || firstThumbImg.currentSrc || firstThumbImg.src) : null;\n      var originalThumbSrcset = firstThumbImg ? (firstThumbImg.getAttribute('data-ps-srcset') || firstThumbImg.getAttribute('srcset')) : null;\n\n      // Helper: Reset gallery to view the first image (Hero)\n      function resetGalleryToHero() {\n        var firstThumbBtn = document.querySelector('.thumbnail-list__item button') || \n                            document.querySelector('.product__media-toggle');\n        if (firstThumbBtn) {\n          firstThumbBtn.click();\n          return;\n        }\n        var slider = document.querySelector('.product__media-list') || \n                     document.querySelector('.slider.product__media');\n        if (slider && slider.scrollTo) {\n          slider.scrollTo({ left: 0, behavior: 'smooth' });\n        }\n      }\n\n      function onKitChange() {\n        var checked = document.querySelector('.ps-kit-input:checked');\n        if (!checked) return;\n\n        // --- Visual Selection State ---\n        var rows = document.querySelectorAll('.ps-kit-row');\n        for (var i = 0; i < rows.length; i++) rows[i].classList.remove('is-selected');\n        var activeRow = checked.closest('.ps-kit-row');\n        if (activeRow) activeRow.classList.add('is-selected');\n\n        // --- Swap Text Content ---\n        var descContent = activeRow ? activeRow.querySelector('.ps-kit-desc-content') : null;\n        var mainDesc = document.getElementById('ps-description-container');\n        if (descContent && mainDesc) {\n          mainDesc.innerHTML = descContent.innerHTML;\n        }\n\n        // --- Swap Images (Main + Thumbnail) ---\n        var newImg;\n        if (checked.value === '0' && originalSrc) {\n             newImg = originalSrc;\n        } else {\n             newImg = checked.getAttribute('data-img');\n        }\n\n        // Update Main Hero\n        if (newImg && mainMedia) {\n          mainMedia.src = newImg;\n          mainMedia.removeAttribute('srcset'); \n        }\n\n        // Update Modal Hero (Mobile Fix)\n        if (modalHeroImg) {\n          if (checked.value === '0' && originalModalSrc) {\n             modalHeroImg.src = originalModalSrc;\n          } else if (newImg) {\n             modalHeroImg.src = newImg;\n          }\n          modalHeroImg.removeAttribute('srcset');\n        }\n\n        // Update First Thumbnail (to match the Hero)\n        if (firstThumbImg) {\n          if (checked.value === '0' && originalThumbSrc) {\n             firstThumbImg.src = originalThumbSrc;\n             firstThumbImg.setAttribute('data-ps-src', originalThumbSrc);\n             if (originalThumbSrcset) {\n               firstThumbImg.setAttribute('srcset', originalThumbSrcset);\n               firstThumbImg.setAttribute('data-ps-srcset', originalThumbSrcset);\n             } else {\n               firstThumbImg.removeAttribute('srcset');\n               firstThumbImg.removeAttribute('data-ps-srcset');\n             }\n          } else if (newImg) {\n             firstThumbImg.src = newImg;\n             firstThumbImg.setAttribute('data-ps-src', newImg);\n             firstThumbImg.removeAttribute('data-ps-srcset');\n             firstThumbImg.removeAttribute('srcset');\n          }\n        }\n\n        // Force view back to the Hero image\n        if (newImg) resetGalleryToHero();\n\n        // --- Update Price ---\n        var newPrice = checked.getAttribute('data-price-text');\n        if (newPrice) {\n          var container = document.querySelector('.product__info-container') || document.querySelector('.product-single__meta') || document;\n          var priceEls = container.querySelectorAll('.price-item--regular, .price-item--sale');\n          for (var p = 0; p < priceEls.length; p++) {\n             priceEls[p].textContent = newPrice;\n          }\n        }\n      }\n      \n      // Bind listeners\n      for (var i = 0; i < inputs.length; i++) {\n        inputs[i].addEventListener('change', onKitChange);\n        var row = inputs[i].closest('.ps-kit-row');\n        if (row) {\n          row.addEventListener('click', function(e) {\n            if (e.target.type !== 'radio') {\n               var inp = this.querySelector('input');\n               if(inp && !inp.checked) { inp.checked = true; onKitChange(); }\n            }\n          });\n        }\n      }\n      \n      // Trigger initial state carefully\n      var checked = document.querySelector('.ps-kit-input:checked');\n      if(checked) {\n          var row = checked.closest('.ps-kit-row');\n          var descContent = row ? row.querySelector('.ps-kit-desc-content') : null;\n          var mainDesc = document.getElementById('ps-description-container');\n          if (descContent && mainDesc) mainDesc.innerHTML = descContent.innerHTML;\n          \n          var newPrice = checked.getAttribute('data-price-text');\n          if (newPrice) {\n            var container = document.querySelector('.product__info-container') || document;\n            var priceEls = container.querySelectorAll('.price-item--regular, .price-item--sale');\n            for (var p = 0; p < priceEls.length; p++) priceEls[p].textContent = newPrice;\n          }\n      }\n    },\n\n    _getKitExtras: function() {\n       var checked = document.querySelector('.ps-kit-input:checked');\n       if (!checked) return [];\n       var str = checked.getAttribute('data-kit-ids') || '';\n       if (!str) return [];\n\n       // Sync quantity with the main product form\n       var qty = 1;\n       if (this.atcForm) {\n         qty = readQuantityNear(this.atcForm);\n       }\n\n       var ids = str.split(',');\n       var extras = [];\n       for (var i=0; i<ids.length; i++) {\n         var clean = parseInt(ids[i], 10);\n         if (clean) extras.push({ id: clean, quantity: qty });\n       }\n       return extras;\n    },\n\n    _getClearcoatVariantId: function() {\n      var container = document.querySelector('.ps-kit-options-container');\n      if (!container) return 0;\n      return parseInt(container.getAttribute('data-ps-cc-vid'), 10) || 0;\n    },\n\n    _kitHasClearcoat: function() {\n      var ccVid = this._getClearcoatVariantId();\n      if (!ccVid) return false;\n      var checked = document.querySelector('.ps-kit-input:checked');\n      if (!checked) return false;\n      var ids = (checked.getAttribute('data-kit-ids') || '').split(',');\n      for (var i = 0; i < ids.length; i++) {\n        if (parseInt(ids[i], 10) === ccVid) return true;\n      }\n      return false;\n    },\n\n    _openVehicleDetailsModal: function(doneCb, options){\n      var self = this;\n      var yearOptions = (this._years && this._years.length) ? this._years.slice(0) : staticYearOptions();\n      var initialYear = options && options.initialYear ? String(options.initialYear) : '';\n      var initialModel = options && options.initialModel ? String(options.initialModel) : '';\n      var requiredMsg = (options && options.requiredMsg) ? options.requiredMsg : 'Please select a year';\n      var vehicleLookup = resolveVehicleLookupContext(self.atcForm, self._lastPayload || {});\n      var productContextHtml = self._getModalProductContextHtml();\n      var vehicleModalClass = 'ps-modal--vehicle-details' + (productContextHtml ? ' ps-modal--with-product-context' : '');\n      var vehicleModalState = { modelOptions: [], modelLoading: false, modelLookupFailed: false };\n      var vehicleModalSession = beginVehicleModalSession(self);\n      var vehicleModalAttempt = { opened: false };\n      var modalFactoryOptions = options && options.factoryOptions && options.factoryOptions.slice ? options.factoryOptions.slice(0) : ((this._factoryCodes && this._factoryCodes.length) ? this._factoryCodes.slice(0) : []);\n      var factoryInput = self.atcForm && self.atcForm.querySelector ? self.atcForm.querySelector('input[name=\"properties[' + FACTORY_PROP_KEY + ']\"]') : null;\n      var currentFactoryCode = trimPropValue(factoryInput && factoryInput.value);\n      var cc = readPsCc();\n      if (!currentFactoryCode) currentFactoryCode = resolveScopedCookieFactoryCode(cc, self._lastPayload || {}, modalFactoryOptions);\n\n      function resolveAllowedVehicleModel(rawModel){\n        return resolveVehicleModelFromOptions(rawModel, vehicleModalState.modelOptions);\n      }\n\n      function getVehicleModalNextAction(yearValue){\n        var selectedYear = parseInt(String(yearValue || ''), 10) || 0;\n        var singleStageYear = (window.paintscratchTheme && window.paintscratchTheme.psSingleStageYear) || 0;\n        return resolveVehicleModalAction({\n          isCustom: true,\n          yearValid: !!selectedYear,\n          factoryRequired: !!modalFactoryOptions.length,\n          factoryValid: !!resolveAllowedFactoryCode(currentFactoryCode, modalFactoryOptions),\n          repairPlanReview: !!(self._repairPlanRequest && !self._repairPlanRequest.transportStarted),\n          formulaRequired: !!(singleStageYear && selectedYear && selectedYear < singleStageYear)\n        });\n      }\n\n      if (!(PS.Modal && PS.Modal.open)) {\n        var retryCount = options && options.retryCount ? parseInt(String(options.retryCount), 10) : 0;\n        if (retryCount < 2) {\n          setTimeout(function(){\n            var nextOptions = options || {};\n            nextOptions.retryCount = retryCount + 1;\n            self._openVehicleDetailsModal(doneCb, nextOptions);\n          }, 100);\n          return;\n        }\n        if (self && typeof self.enable === 'function') self.enable();\n        setFormErrorMessage(self.atcForm, 'Vehicle details are still loading. Please try again.');\n        invalidateVehicleModalSession(self, vehicleModalSession);\n        if (options && typeof options.onCancel === 'function') options.onCancel();\n        return;\n      }\n\n      if (PS.Modal && PS.Modal.open) {\n        PS.Modal.open({\n          title: 'Enter Vehicle Details',\n          okLabel: getVehicleModalNextAction(initialYear).label,\n          okAriaLabel: getVehicleModalNextAction(initialYear).ariaLabel,\n          hideCancel: true,\n          modalClass: vehicleModalClass,\n          contentClass: 'psm-content psm-vehicle-details',\n          contentHtml:\n            '<p class=\"psm-vehicle-copy\">To ensure a color match, we\\'ll need to know some information about your vehicle:</p>' +\n            '<div class=\"psm-vehicle-field psm-vehicle-field--year\">' +\n              '<div class=\"psm-vehicle-combobox psm-vehicle-combobox--year\" data-psm-combobox=\"year\">' +\n                '<input type=\"hidden\" name=\"year\" value=\"' + escapeHtml(initialYear) + '\">' +\n                '<input type=\"text\" name=\"year_display\" value=\"' + escapeHtml(initialYear) + '\" class=\"psm-input psm-vehicle-combobox-input psm-vehicle-combobox-input--year psm-vehicle-year-input\" placeholder=\"Select year (required)\" autocomplete=\"off\" inputmode=\"numeric\" role=\"combobox\" aria-label=\"Vehicle year\" aria-autocomplete=\"list\" aria-expanded=\"false\" aria-controls=\"psm-vehicle-year-list\" data-ps-agent-control=\"vehicle-year\">' +\n                '<button type=\"button\" class=\"psm-vehicle-combobox-toggle\" aria-label=\"Toggle year suggestions\"></button>' +\n                '<div id=\"psm-vehicle-year-list\" class=\"psm-vehicle-model-list psm-vehicle-year-list\" role=\"listbox\" hidden></div>' +\n              '</div>' +\n            '</div>' +\n            '<div class=\"psm-vehicle-field psm-vehicle-field--model\">' +\n              '<div class=\"psm-vehicle-combobox is-disabled\" data-psm-combobox=\"model\">' +\n                '<input type=\"text\" name=\"model\" value=\"' + escapeHtml(initialModel) + '\" class=\"psm-input psm-vehicle-combobox-input\" placeholder=\"Select model\" autocomplete=\"off\" disabled role=\"combobox\" aria-label=\"Vehicle model\" aria-autocomplete=\"list\" aria-expanded=\"false\" aria-controls=\"psm-vehicle-model-list\" data-ps-agent-control=\"vehicle-model\">' +\n                '<button type=\"button\" class=\"psm-vehicle-combobox-toggle\" aria-label=\"Toggle model suggestions\" disabled></button>' +\n                '<div id=\"psm-vehicle-model-list\" class=\"psm-vehicle-model-list\" role=\"listbox\" hidden></div>' +\n              '</div>' +\n              '<div id=\"psm-vehicle-model-status\" class=\"psm-vehicle-model-status\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"></div>' +\n            '</div>' +\n            productContextHtml,\n          onPrimaryBlocked: function(reason){\n            var blockReason = 'missing_year';\n            if (reason === 'Loading required vehicle choices') blockReason = 'models_loading';\n            else if (reason === 'Vehicle models could not load. Retry to continue') blockReason = 'models_load_failed';\n            else if (reason === 'Select a vehicle model to continue') blockReason = 'missing_model';\n            trackVehicleModalFunnel(self, 'vehicle_continue_blocked', { product_type: self._currentProductBase || '', outcome: 'blocked', modal_required_fields: blockReason === 'missing_model' ? 'year,model' : 'year', modal_block_reason: blockReason });\n          },\n          onValidate: function(data){\n            var chosenYear = trimPropValue(data.year);\n            data.model = resolveAllowedVehicleModel(data.model);\n            if (!chosenYear) {\n              trackVehicleModalFunnel(self, 'vehicle_continue_blocked', { product_type: self._currentProductBase || '', outcome: 'blocked', modal_required_fields: 'year', modal_block_reason: 'missing_year' });\n              return { ok:false, message: requiredMsg, focusSelector: 'input[name=\"year_display\"]' };\n            }\n            if (vehicleModalState.modelLoading) {\n              trackVehicleModalFunnel(self, 'vehicle_continue_blocked', { product_type: self._currentProductBase || '', outcome: 'blocked', modal_required_fields: 'year,model', modal_block_reason: 'models_loading' });\n              return { ok:false, message: 'Vehicle models are still loading. Please wait.', focusSelector: 'input[name=\"model\"]' };\n            }\n            if (vehicleModalState.modelLookupFailed) {\n              trackVehicleModalFunnel(self, 'vehicle_continue_blocked', { product_type: self._currentProductBase || '', outcome: 'blocked', modal_required_fields: 'year,model', modal_block_reason: 'models_load_failed' });\n              return { ok:false, message: 'Vehicle models could not load. Please retry.', focusSelector: 'input[name=\"model\"]' };\n            }\n            if (vehicleModalState.modelOptions.length && !data.model) {\n              trackVehicleModalFunnel(self, 'vehicle_continue_blocked', { product_type: self._currentProductBase || '', outcome: 'blocked', modal_required_fields: 'year,model', modal_block_reason: 'missing_model' });\n              return { ok:false, message: 'Please select your vehicle model.', focusSelector: 'input[name=\"model\"]' };\n            }\n            trackVehicleModalFunnel(self, 'vehicle_continue_clicked', { product_type: self._currentProductBase || '', outcome: 'clicked', modal_required_fields: vehicleModalState.modelOptions.length ? 'year,model' : 'year' });\n            return { ok:true };\n          },\n          onOpen: function(modal){\n            beginVehicleModalFunnel(self, vehicleModalAttempt, { product_type: self._currentProductBase || '', outcome: 'opened', modal_required_fields: 'year' });\n            var yearValueEl = modal.formEl.querySelector('input[name=\"year\"]');\n            var yearEl = modal.formEl.querySelector('input[name=\"year_display\"]');\n            var yearComboEl = modal.formEl.querySelector('[data-psm-combobox=\"year\"]');\n            var yearClearEl = yearComboEl ? yearComboEl.querySelector('.psm-vehicle-combobox-clear') : null;\n            var yearToggleEl = yearComboEl ? yearComboEl.querySelector('.psm-vehicle-combobox-toggle') : null;\n            var yearListEl = modal.formEl.querySelector('#psm-vehicle-year-list');\n            var modelEl = modal.formEl.querySelector('input[name=\"model\"]');\n            var comboEl = modal.formEl.querySelector('[data-psm-combobox=\"model\"]');\n            var clearEl = comboEl ? comboEl.querySelector('.psm-vehicle-combobox-clear') : null;\n            var toggleEl = comboEl ? comboEl.querySelector('.psm-vehicle-combobox-toggle') : null;\n            var listEl = modal.formEl.querySelector('#psm-vehicle-model-list');\n            var hasInitialYear = false;\n            var modelOptions = [];\n            var requestId = 0;\n            var isLoading = false;\n            var isModelLoading = false;\n            var slowTimer = null;\n            var lastLoadedYear = '';\n            var yearCombobox = null;\n            var modelCombobox = null;\n            var modelStatusEl = modal.formEl.querySelector('#psm-vehicle-model-status');\n\n            function isCurrentModalSession(){\n              return isVehicleModalSessionCurrent(self, vehicleModalSession, modal.root);\n            }\n\n            function isAllowedYear(val){\n              var chosen = trimPropValue(val);\n              var idx = 0;\n              for (idx = 0; idx < yearOptions.length; idx++) {\n                if (String(yearOptions[idx]) === chosen) return true;\n              }\n              return false;\n            }\n\n            function setExpanded(targetComboEl, targetInputEl, targetListEl, open){\n              if (!targetComboEl || !targetInputEl || !targetListEl) return;\n              targetInputEl.setAttribute('aria-expanded', open ? 'true' : 'false');\n              if (open) targetComboEl.classList.add('is-open');\n              else targetComboEl.classList.remove('is-open');\n              targetListEl.hidden = !open;\n            }\n\n            function scrollOptionIntoView(targetListEl, optionEl){\n              var top = 0;\n              var bottom = 0;\n              var viewBottom = 0;\n              if (!targetListEl || !optionEl) return;\n              top = optionEl.offsetTop;\n              bottom = top + optionEl.offsetHeight;\n              viewBottom = targetListEl.scrollTop + targetListEl.clientHeight;\n              if (top < targetListEl.scrollTop) {\n                targetListEl.scrollTop = top;\n              } else if (bottom > viewBottom) {\n                targetListEl.scrollTop = bottom - targetListEl.clientHeight;\n              }\n            }\n\n            function syncClearButton(inputEl, clearButtonEl){\n              var hasValue = false;\n              if (!clearButtonEl) return;\n              hasValue = !!trimPropValue(inputEl && inputEl.value);\n              if (!hasValue || (inputEl && inputEl.disabled)) {\n                clearButtonEl.style.display = 'none';\n                clearButtonEl.setAttribute('aria-hidden', 'true');\n                clearButtonEl.tabIndex = -1;\n                return;\n              }\n              clearButtonEl.style.display = 'block';\n              clearButtonEl.setAttribute('aria-hidden', 'false');\n              clearButtonEl.tabIndex = 0;\n            }\n\n            function createVehicleCombobox(cfg){\n              var activeIndex = -1;\n              var searchQuery = '';\n\n              function isOpen(){\n                return !!(cfg.comboEl && cfg.comboEl.classList.contains('is-open'));\n              }\n\n              function getSelectedValue(){\n                if (!cfg.getSelectedValue) return trimPropValue(cfg.inputEl && cfg.inputEl.value);\n                return trimPropValue(cfg.getSelectedValue());\n              }\n\n              function getOptions(){\n                var options = cfg.getOptions ? cfg.getOptions() : [];\n                return options && options.slice ? options.slice(0) : [];\n              }\n\n              function setInputValue(nextValue){\n                if (!cfg.inputEl) return;\n                cfg.inputEl.value = String(nextValue || '');\n                syncClearButton(cfg.inputEl, cfg.clearEl);\n              }\n\n              function closeList(){\n                activeIndex = -1;\n                searchQuery = '';\n                setExpanded(cfg.comboEl, cfg.inputEl, cfg.listEl, false);\n                cfg.inputEl.removeAttribute('aria-activedescendant');\n                setInputValue(getSelectedValue());\n              }\n\n              function getFilteredOptions(){\n                var options = getOptions();\n                var filtered = [];\n                var idx = 0;\n                if (!searchQuery) return options;\n                for (idx = 0; idx < options.length; idx++) {\n                  if (cfg.filterOption(options[idx], searchQuery)) filtered.push(options[idx]);\n                }\n                return filtered;\n              }\n\n              function syncAriaSelection(optionsList){\n                var nodes = cfg.listEl.querySelectorAll('[data-psm-combobox-value]');\n                var idx = 0;\n                if (!nodes.length) {\n                  cfg.inputEl.removeAttribute('aria-activedescendant');\n                  return;\n                }\n                if (activeIndex >= nodes.length) activeIndex = nodes.length - 1;\n                for (idx = 0; idx < nodes.length; idx++) {\n                  if (idx === activeIndex) nodes[idx].classList.add('is-active');\n                  else nodes[idx].classList.remove('is-active');\n                }\n                if (activeIndex > -1 && optionsList[activeIndex]) {\n                  cfg.inputEl.setAttribute('aria-activedescendant', cfg.optionIdPrefix + activeIndex);\n                  scrollOptionIntoView(cfg.listEl, nodes[activeIndex]);\n                } else {\n                  cfg.inputEl.removeAttribute('aria-activedescendant');\n                }\n              }\n\n              function renderList(openAfterRender){\n                var filtered = getFilteredOptions();\n                var selectedValue = getSelectedValue();\n                var html = '';\n                var idx = 0;\n                var selectedIndex = -1;\n                if (!cfg.listEl) return;\n                if (!filtered.length) {\n                  if (!searchQuery) {\n                    cfg.listEl.innerHTML = '';\n                    closeList();\n                    return;\n                  }\n                  cfg.listEl.innerHTML = '<div class=\"psm-vehicle-model-empty\">' + escapeHtml(cfg.emptyText) + '</div>';\n                  activeIndex = -1;\n                  cfg.inputEl.removeAttribute('aria-activedescendant');\n                  if (openAfterRender) setExpanded(cfg.comboEl, cfg.inputEl, cfg.listEl, true);\n                  return;\n                }\n                if (!searchQuery && selectedValue && activeIndex < 0) {\n                  for (idx = 0; idx < filtered.length; idx++) {\n                    if (String(filtered[idx]) === selectedValue) {\n                      selectedIndex = idx;\n                      break;\n                    }\n                  }\n                  activeIndex = selectedIndex;\n                } else if (activeIndex >= filtered.length) {\n                  activeIndex = filtered.length - 1;\n                }\n                for (idx = 0; idx < filtered.length; idx++) {\n                  html += '<button type=\"button\" id=\"' + cfg.optionIdPrefix + idx + '\" class=\"psm-vehicle-model-option' +\n                    (String(filtered[idx]) === selectedValue ? ' is-selected' : '') + '\" role=\"option\" aria-selected=\"' +\n                    (String(filtered[idx]) === selectedValue ? 'true' : 'false') + '\" data-psm-combobox-value=\"' +\n                    escapeHtml(filtered[idx]) + '\" data-ps-agent-option=\"vehicle-option\" data-ps-agent-value=\"' +\n                    escapeHtml(filtered[idx]) + '\">' + escapeHtml(filtered[idx]) + '</button>';\n                }\n                cfg.listEl.innerHTML = html;\n                if (openAfterRender) setExpanded(cfg.comboEl, cfg.inputEl, cfg.listEl, true);\n                syncAriaSelection(filtered);\n              }\n\n              function openList(){\n                if (!cfg.inputEl || cfg.inputEl.disabled) return;\n                if (!isOpen() && cfg.onOpen) cfg.onOpen();\n                searchQuery = '';\n                activeIndex = -1;\n                renderList(true);\n                try {\n                  cfg.inputEl.focus();\n                  if (trimPropValue(cfg.inputEl.value)) cfg.inputEl.select();\n                } catch(_e) {}\n              }\n\n              function syncFromSelection(){\n                activeIndex = -1;\n                searchQuery = '';\n                setInputValue(getSelectedValue());\n                if (isOpen()) {\n                  renderList(true);\n                  return;\n                }\n                setExpanded(cfg.comboEl, cfg.inputEl, cfg.listEl, false);\n                cfg.inputEl.removeAttribute('aria-activedescendant');\n              }\n\n              function clearValue(){\n                searchQuery = '';\n                activeIndex = -1;\n                if (cfg.onClear) cfg.onClear();\n                syncFromSelection();\n                if (!cfg.inputEl.disabled) openList();\n              }\n\n              cfg.toggleEl.onclick = function(evt){\n                if (evt && evt.preventDefault) evt.preventDefault();\n                if (evt && evt.stopPropagation) evt.stopPropagation();\n                if (cfg.inputEl.disabled) return;\n                if (isOpen()) {\n                  closeList();\n                  return;\n                }\n                openList();\n              };\n              cfg.toggleEl.onmousedown = function(evt){\n                if (evt && evt.preventDefault) evt.preventDefault();\n              };\n\n              cfg.inputEl.onfocus = function(){\n                if (cfg.inputEl.disabled) return;\n                openList();\n              };\n\n              cfg.inputEl.onclick = function(){\n                if (cfg.inputEl.disabled) return;\n                openList();\n              };\n\n              cfg.inputEl.oninput = function(){\n                var nextQuery = String(cfg.inputEl.value || '');\n                var result = null;\n                if (cfg.inputEl.disabled) return;\n                if (cfg.normalizeInput) {\n                  nextQuery = cfg.normalizeInput(nextQuery);\n                  if (cfg.inputEl.value !== nextQuery) cfg.inputEl.value = nextQuery;\n                }\n                searchQuery = nextQuery;\n                activeIndex = -1;\n                syncClearButton(cfg.inputEl, cfg.clearEl);\n                if (cfg.onInput) {\n                  result = cfg.onInput(nextQuery) || {};\n                  if (typeof result.searchQuery !== 'undefined') searchQuery = String(result.searchQuery || '');\n                  if (result.syncDisplay) {\n                    syncFromSelection();\n                    if (result.close) closeList();\n                    return;\n                  }\n                  if (result.close) {\n                    closeList();\n                    return;\n                  }\n                }\n                renderList(true);\n              };\n\n              cfg.inputEl.onblur = function(){\n                window.setTimeout(function(){\n                  var result = cfg.onBlur ? (cfg.onBlur() || {}) : {};\n                  if (result.syncDisplay) syncFromSelection();\n                  closeList();\n                }, 120);\n              };\n\n              cfg.inputEl.onkeydown = function(evt){\n                var key = evt.key || evt.keyCode;\n                var filtered = null;\n                var selectedIndex = -1;\n                var chosenValue = '';\n                if (key === 'Escape' || key === 27) {\n                  if (isOpen()) {\n                    if (evt && evt.preventDefault) evt.preventDefault();\n                    if (evt && evt.stopPropagation) evt.stopPropagation();\n                    closeList();\n                  }\n                  return;\n                }\n                if (key === 'ArrowDown' || key === 40 || key === 'ArrowUp' || key === 38) {\n                  filtered = getFilteredOptions();\n                  if (!filtered.length) return;\n                  if (evt && evt.preventDefault) evt.preventDefault();\n                  if (!isOpen()) setExpanded(cfg.comboEl, cfg.inputEl, cfg.listEl, true);\n                  if (key === 'ArrowDown' || key === 40) activeIndex = activeIndex < filtered.length - 1 ? activeIndex + 1 : 0;\n                  else activeIndex = activeIndex > 0 ? activeIndex - 1 : filtered.length - 1;\n                  renderList(true);\n                  return;\n                }\n                if (key === 'Enter' || key === 13) {\n                  filtered = getFilteredOptions();\n                  if (!isOpen() || !filtered.length) return;\n                  if (evt && evt.preventDefault) evt.preventDefault();\n                  if (evt && evt.stopPropagation) evt.stopPropagation();\n                  if (activeIndex < 0 && !searchQuery) {\n                    for (selectedIndex = 0; selectedIndex < filtered.length; selectedIndex++) {\n                      if (String(filtered[selectedIndex]) === getSelectedValue()) {\n                        activeIndex = selectedIndex;\n                        break;\n                      }\n                    }\n                  }\n                  if (activeIndex < 0 && filtered.length === 1) activeIndex = 0;\n                  if (activeIndex < 0 || activeIndex >= filtered.length) return;\n                  chosenValue = filtered[activeIndex];\n                  searchQuery = '';\n                  activeIndex = -1;\n                  if (cfg.onSelect) cfg.onSelect(chosenValue, { source: 'keyboard-enter' });\n                  closeList();\n                  if (cfg.onEnterAfterSelect) cfg.onEnterAfterSelect(chosenValue);\n                }\n              };\n\n              cfg.listEl.onclick = function(evt){\n                var target = evt.target || evt.srcElement;\n                var value = '';\n                while (target && target !== cfg.listEl && (!target.getAttribute || !target.getAttribute('data-psm-combobox-value'))) {\n                  target = target.parentNode;\n                }\n                if (!target || target === cfg.listEl || !target.getAttribute) return;\n                value = target.getAttribute('data-psm-combobox-value') || '';\n                if (!value) return;\n                searchQuery = '';\n                activeIndex = -1;\n                if (cfg.onSelect) cfg.onSelect(value, { source: 'click' });\n                closeList();\n              };\n\n              cfg.listEl.onmousedown = function(evt){\n                if (evt && evt.preventDefault) evt.preventDefault();\n              };\n\n              if (cfg.clearEl) {\n                cfg.clearEl.onclick = function(evt){\n                  if (evt && evt.preventDefault) evt.preventDefault();\n                  if (evt && evt.stopPropagation) evt.stopPropagation();\n                  clearValue();\n                };\n                cfg.clearEl.onmousedown = function(evt){\n                  if (evt && evt.preventDefault) evt.preventDefault();\n                };\n              }\n\n              syncFromSelection();\n              return {\n                close: closeList,\n                open: openList,\n                syncFromSelection: syncFromSelection\n              };\n            }\n\n            function setModelEnabled(enabled, placeholderText){\n              var isEnabled = !!enabled;\n              modelEl.disabled = !isEnabled;\n              toggleEl.disabled = !isEnabled;\n              if (clearEl) clearEl.disabled = !isEnabled;\n              modelEl.placeholder = placeholderText || 'Select model';\n              if (isEnabled) comboEl.classList.remove('is-disabled');\n              else comboEl.classList.add('is-disabled');\n              syncClearButton(modelEl, clearEl);\n              if (!isEnabled && modelCombobox) modelCombobox.close();\n            }\n\n            function setModelStatus(message, state){\n              if (!modelStatusEl) return;\n              modelStatusEl.textContent = message || '';\n              modelStatusEl.className = 'psm-vehicle-model-status' + (state ? ' is-' + state : '');\n              if (state === 'error') {\n                modelStatusEl.innerHTML = '<span>We could not load vehicle models. Please try again.</span> <button type=\"button\" class=\"psm-model-retry\" data-psm-retry-models=\"true\">Retry</button>';\n              }\n            }\n\n            function updateVehicleModalAction(){\n              var action = getVehicleModalNextAction(trimPropValue(yearValueEl.value));\n              modal.okBtn.textContent = action.label;\n              modal.okBtn.setAttribute('aria-label', action.ariaLabel);\n            }\n\n            function updateSubmitState(){\n              var selectedModel = resolveAllowedVehicleModel(modelEl && modelEl.value);\n              var primaryDisabled = isLoading || isModelLoading || vehicleModalState.modelLookupFailed || !trimPropValue(yearValueEl.value) || (modelOptions.length && !selectedModel);\n              var primaryReason = '';\n              if (isLoading || isModelLoading) primaryReason = 'Loading required vehicle choices';\n              else if (vehicleModalState.modelLookupFailed) primaryReason = 'Vehicle models could not load. Retry to continue';\n              else if (!trimPropValue(yearValueEl.value)) primaryReason = 'Select year to continue';\n              else if (modelOptions.length && !selectedModel) primaryReason = 'Select a vehicle model to continue';\n              if (modal.setPrimaryDisabled) {\n                modal.setPrimaryDisabled(primaryDisabled, primaryReason);\n              } else {\n                modal.okBtn.disabled = primaryDisabled;\n                modal.okBtn.setAttribute('aria-disabled', modal.okBtn.disabled ? 'true' : 'false');\n              }\n              updateVehicleModalAction();\n            }\n\n            function setYearValue(nextValue, skipLoad){\n              var val = trimPropValue(nextValue);\n              var prev = trimPropValue(yearValueEl.value);\n              if (!val || !isAllowedYear(val)) {\n                yearValueEl.value = '';\n                if (yearCombobox) yearCombobox.syncFromSelection();\n                else yearEl.value = '';\n                if (prev && !skipLoad) loadModelsForYear('');\n                updateSubmitState();\n                return;\n              }\n              yearValueEl.value = val;\n              if (yearCombobox) yearCombobox.syncFromSelection();\n              else yearEl.value = val;\n              if (prev !== val && !skipLoad) loadModelsForYear(val);\n              else updateSubmitState();\n            }\n\n            function setModelValue(nextValue){\n              modelEl.value = String(nextValue || '');\n              if (modelCombobox) modelCombobox.syncFromSelection();\n              updateSubmitState();\n            }\n\n            function loadModelsForYear(yearValue, preserveModel){\n              var chosenYear = trimPropValue(yearValue);\n              var savedModel = trimPropValue(modelEl.value);\n              if (!isCurrentModalSession()) return;\n              requestId++;\n              modelOptions = [];\n              vehicleModalState.modelOptions = [];\n              vehicleModalState.modelLoading = false;\n              vehicleModalState.modelLookupFailed = false;\n              if (!preserveModel && chosenYear !== lastLoadedYear) setModelValue('');\n              modal.renderError('');\n              if (slowTimer) window.clearTimeout(slowTimer);\n              if (!chosenYear) {\n                isLoading = false;\n                isModelLoading = false;\n                setModelEnabled(false, 'Select model');\n                setModelStatus('', '');\n                updateSubmitState();\n                return;\n              }\n              if (!vehicleLookup.make && !vehicleLookup.make_slug) {\n                isLoading = false;\n                isModelLoading = false;\n                setModelEnabled(true, 'Select model');\n                setModelStatus('Model is optional for this vehicle selection.', 'empty');\n                updateSubmitState();\n                return;\n              }\n              isLoading = false;\n              isModelLoading = true;\n              vehicleModalState.modelLoading = true;\n              setModelEnabled(false, 'Loading models...');\n              setModelStatus('Loading vehicle models...', 'loading');\n              updateSubmitState();\n              (function(localRequestId){\n                slowTimer = window.setTimeout(function(){\n                  if (!shouldApplyVehicleModelResponse(self, vehicleModalSession, modal.root, requestId, localRequestId) || !isModelLoading) return;\n                  setModelStatus('Still loading vehicle models. You may continue without a model if it is optional.', 'slow');\n                }, 1500);\n                trackVehicleModalFunnel(self, 'vehicle_model_load_requested', { product_type: self._currentProductBase || '', outcome: 'requested', modal_required_fields: 'year' });\n                fetchVehicleModelsForController(self, vehicleLookup, chosenYear, function(_err, models){\n                  if (!shouldApplyVehicleModelResponse(self, vehicleModalSession, modal.root, requestId, localRequestId)) return;\n                  if (slowTimer) window.clearTimeout(slowTimer);\n                  modelOptions = models || [];\n                  vehicleModalState.modelOptions = modelOptions.slice(0);\n                  vehicleModalState.modelLoading = false;\n                  vehicleModalState.modelLookupFailed = !!_err;\n                  trackCustomColorFunnel('vehicle_models_loaded', { product_type: self._currentProductBase || '', outcome: _err ? 'failure' : 'success' });\n                  if (_err) trackVehicleModalFunnel(self, 'vehicle_model_load_failed', { product_type: self._currentProductBase || '', outcome: 'failure', modal_required_fields: 'year', modal_block_reason: 'models_load_failed' });\n                  else trackVehicleModalFunnel(self, 'vehicle_model_load_succeeded', { product_type: self._currentProductBase || '', outcome: 'success', modal_required_fields: 'year' });\n                  if (!_err && !modelOptions.length) trackVehicleModalFunnel(self, 'vehicle_model_empty', { product_type: self._currentProductBase || '', outcome: 'empty', modal_required_fields: 'year' });\n                  isLoading = false;\n                  isModelLoading = false;\n                  if (_err) {\n                    setModelEnabled(true, 'Select model');\n                    setModelStatus('', 'error');\n                  } else if (!modelOptions.length) {\n                    setModelEnabled(true, 'Model is optional');\n                    setModelStatus('No applicable models were found for this year. You may continue without a model.', 'empty');\n                  } else {\n                    setModelEnabled(true, 'Select model (required)');\n                    setModelStatus('Select a vehicle model to continue.', 'ready');\n                  }\n                  if (savedModel && resolveAllowedVehicleModel(savedModel)) setModelValue(resolveAllowedVehicleModel(savedModel));\n                  lastLoadedYear = chosenYear;\n                  updateSubmitState();\n                });\n              })(requestId);\n            }\n\n            if (modelStatusEl) {\n              modelStatusEl.onclick = function(evt){\n                var target = evt.target || evt.srcElement;\n                if (!target || !target.getAttribute || target.getAttribute('data-psm-retry-models') !== 'true') return;\n                if (!isCurrentModalSession()) return;\n                if (evt && evt.preventDefault) evt.preventDefault();\n                loadModelsForYear(trimPropValue(yearValueEl.value), true);\n              };\n            }\n\n            yearCombobox = createVehicleCombobox({\n              comboEl: yearComboEl,\n              inputEl: yearEl,\n              listEl: yearListEl,\n              toggleEl: yearToggleEl,\n              clearEl: yearClearEl,\n              optionIdPrefix: 'psm-vehicle-year-option-',\n              emptyText: 'No matching years found.',\n              onOpen: function(){\n                trackVehicleModalFunnel(self, 'vehicle_year_select_open', { product_type: self._currentProductBase || '', outcome: 'opened', modal_required_fields: 'year' });\n              },\n              getOptions: function(){ return yearOptions.slice(0); },\n              getSelectedValue: function(){ return yearValueEl.value; },\n              normalizeInput: function(rawValue){\n                return String(rawValue || '').replace(/\\D/g, '');\n              },\n              filterOption: function(optionValue, query){\n                return String(optionValue).indexOf(query) === 0;\n              },\n              onSelect: function(value){\n                trackVehicleModalFunnel(self, 'vehicle_year_selected', { product_type: self._currentProductBase || '', outcome: 'selected', modal_required_fields: 'year' });\n                setYearValue(value, false);\n              },\n              onInput: function(nextQuery){\n                if (!nextQuery) {\n                  setYearValue('', false);\n                  return { syncDisplay: true };\n                }\n                if (isAllowedYear(nextQuery)) {\n                  setYearValue(nextQuery, false);\n                  return { syncDisplay: true, close: true };\n                }\n                if (trimPropValue(yearValueEl.value)) loadModelsForYear('');\n                yearValueEl.value = '';\n                updateSubmitState();\n                return {};\n              },\n              onClear: function(){\n                setYearValue('', false);\n              },\n              onBlur: function(){\n                if (!isAllowedYear(yearEl.value)) setYearValue('', false);\n                return { syncDisplay: true };\n              }\n            });\n\n            modelCombobox = createVehicleCombobox({\n              comboEl: comboEl,\n              inputEl: modelEl,\n              listEl: listEl,\n              toggleEl: toggleEl,\n              clearEl: clearEl,\n              optionIdPrefix: 'psm-vehicle-model-option-',\n              emptyText: 'No matching models found.',\n              getOptions: function(){ return modelOptions.slice(0); },\n              getSelectedValue: function(){ return modelEl.value; },\n              filterOption: function(optionValue, query){\n                return String(optionValue).toLowerCase().indexOf(String(query || '').toLowerCase()) > -1;\n              },\n              onInput: function(nextQuery){\n                var resolved = resolveAllowedVehicleModel(nextQuery);\n                if (resolved && String(resolved).toLowerCase() === String(trimPropValue(nextQuery)).toLowerCase()) {\n                  setModelValue(resolved);\n                  return { syncDisplay: true, close: true };\n                }\n                updateSubmitState();\n                return {};\n              },\n              onSelect: function(value){\n                trackVehicleModalFunnel(self, 'vehicle_model_selected', { product_type: self._currentProductBase || '', outcome: 'selected', modal_required_fields: 'year' });\n                setModelValue(value);\n              },\n              onClear: function(){\n                setModelValue('');\n              },\n              onBlur: function(){\n                updateSubmitState();\n                return { syncDisplay: true };\n              },\n              onEnterAfterSelect: function(){\n                if (modal.formEl.requestSubmit) modal.formEl.requestSubmit();\n                else modal.okBtn.click();\n              }\n            });\n\n            hasInitialYear = isAllowedYear(initialYear);\n            if (!hasInitialYear && yearOptions.length === 1) {\n              initialYear = String(yearOptions[0]);\n              hasInitialYear = true;\n            }\n            if (!hasInitialYear) {\n              yearValueEl.value = '';\n              yearEl.value = '';\n            } else {\n              yearValueEl.value = initialYear;\n              yearEl.value = initialYear;\n            }\n            setModelEnabled(false, 'Select model');\n            syncClearButton(yearEl, yearClearEl);\n            updateSubmitState();\n            if (trimPropValue(yearValueEl.value)) loadModelsForYear(yearValueEl.value);\n          }\n        }).then(function(res){\n          var chosenYear = '';\n          var chosenModel = '';\n          invalidateVehicleModalSession(self, vehicleModalSession);\n          if (!res || !res.ok) {\n            trackVehicleModalFunnel(self, 'vehicle_modal_closed', { product_type: self._currentProductBase || '', outcome: 'closed', modal_required_fields: 'year', modal_block_reason: 'modal_dismissed' });\n            endVehicleModalFunnel(self);\n            self._clearModalProductContext();\n            if (options && typeof options.onCancel === 'function') options.onCancel();\n            return;\n          }\n          chosenYear = res.data && res.data.year ? String(res.data.year) : '';\n          chosenModel = res.data && res.data.model ? trimPropValue(res.data.model) : '';\n          if (!chosenYear) {\n            endVehicleModalFunnel(self);\n            self._clearModalProductContext();\n            if (options && typeof options.onCancel === 'function') options.onCancel();\n            return;\n          }\n          chosenModel = resolveAllowedVehicleModel(chosenModel);\n          if (vehicleModalState.modelLoading || vehicleModalState.modelLookupFailed || (vehicleModalState.modelOptions.length && !chosenModel)) {\n            trackVehicleModalFunnel(self, 'vehicle_continue_blocked', { product_type: self._currentProductBase || '', outcome: 'blocked', modal_required_fields: 'year,model', modal_block_reason: vehicleModalState.modelLoading ? 'models_loading' : (vehicleModalState.modelLookupFailed ? 'models_load_failed' : 'missing_model') });\n            setFormErrorMessage(self.atcForm, vehicleModalState.modelLookupFailed ? 'Vehicle models could not load. Please try again.' : (vehicleModalState.modelLoading ? 'Vehicle models are still loading. Please try again.' : 'Please select your vehicle model.'));\n            endVehicleModalFunnel(self);\n            self._clearModalProductContext();\n            if (options && typeof options.onCancel === 'function') options.onCancel();\n            return;\n          }\n          doneCb({\n            year: chosenYear,\n            model: chosenModel\n          });\n        });\n      }\n    },\n\n\n    _openFactoryModal: function(doneCb, nextAction, onCancel, factoryOptionsOverride){\n      var self = this;\n      var opts = factoryOptionsOverride && factoryOptionsOverride.slice ? factoryOptionsOverride.slice(0) : ((this._factoryCodes && this._factoryCodes.length) ? this._factoryCodes.slice(0) : []);\n      var action = nextAction || { label: 'Add to Cart', ariaLabel: 'Add selected paint product to cart' };\n      if (action.label === 'Add to Cart' && self._repairPlanRequest && !self._repairPlanRequest.transportStarted) action = resolveVehicleModalAction({ yearValid: true, repairPlanReview: true });\n      var factoryModalAttempt = { opened: false };\n      if (!opts.length) { doneCb(''); return; }\n\n      var mkInput = document.querySelector('input[name=\"properties[Make]\"]');\n      var cc = readPsCc();\n      var mk = (mkInput && mkInput.value) || cc.make || 'your car';\n      var title = 'Select your ' + mk + '\\'s factory code';\n\n      // Prefer hydrated make slug, then ps_cc, then a simple make-name fallback.\n      var ssr = (typeof window !== 'undefined' && window.PS_SSR && typeof window.PS_SSR === 'object') ? window.PS_SSR : null;\n      var makeSlug = '';\n      if (ssr && ssr.make_slug) {\n        makeSlug = String(ssr.make_slug);\n      } else if (cc && cc.make_slug) {\n        makeSlug = String(cc.make_slug);\n      } else {\n        makeSlug = String(mk || '')\n          .toLowerCase()\n          .replace(/[^a-z0-9]+/g, '-')\n          .replace(/^-+|-+$/g, '');\n      }\n      var helpHref = '/touch-up-paint-codes/' + encodeURIComponent(makeSlug) + '.htm';\n      var productContextHtml = this._getModalProductContextHtml();\n      var factoryModalClass = 'ps-modal--vehicle-details ps-modal--factory-code' + (productContextHtml ? ' ps-modal--with-product-context' : '');\n\n      var helpHtml =\n        '<div class=\"psm-factory-copy\">' +\n          '<p>On many vehicles, the factory code is a letter or number next to or after the paint code.</p>' +\n          '<p>Example: If the paint code looks like B-89P-3, the \"-3\" is the factory code and must be entered separately.</p>' +\n          '<p>If no factory code is shown, use the 11th digit of your VIN as the factory code.</p>' +\n          '<p><strong><a href=\"' + helpHref + '\" target=\"_blank\" title=\"How to find your ' + mk + ' factory code (opens in a new tab)\">More about ' + mk + ' Factory Codes &gt;</a></strong></p>' +\n        '</div>';\n      var i = 0;\n      var opt = null;\n      var optValue = '';\n      var factoryOptions = [];\n\n      for (i = 0; i < opts.length; i++) {\n        opt = opts[i];\n        if (typeof opt === 'string') {\n          optValue = String(opt);\n        } else {\n          optValue = opt && opt.value != null ? String(opt.value) : '';\n        }\n        if (optValue) factoryOptions.push(optValue);\n      }\n\n      if (PS.Modal && PS.Modal.open) {\n        PS.Modal.open({\n          title: title,\n          okLabel: action.label,\n          okAriaLabel: action.ariaLabel,\n          hideCancel: true,\n          modalClass: factoryModalClass,\n          contentClass: 'psm-content psm-factory-code',\n          contentHtml:\n            helpHtml +\n            '<div class=\"psm-factory-field\">' +\n              '<div class=\"psm-vehicle-combobox psm-vehicle-combobox--factory psm-vehicle-combobox--required\" data-psm-combobox=\"factory_code\">' +\n                '<input type=\"hidden\" name=\"factory_code\" value=\"\">' +\n                '<input type=\"text\" name=\"factory_code_display\" value=\"\" class=\"psm-input psm-vehicle-combobox-input psm-vehicle-combobox-input--required psm-factory-code-input\" placeholder=\"Select Factory Code (Required)\" autocomplete=\"off\" role=\"combobox\" aria-autocomplete=\"list\" aria-expanded=\"false\" aria-controls=\"psm-factory-code-list\">' +\n                '<button type=\"button\" class=\"psm-vehicle-combobox-toggle\" aria-label=\"Toggle factory code suggestions\"></button>' +\n                '<div id=\"psm-factory-code-list\" class=\"psm-vehicle-model-list psm-factory-code-list\" role=\"listbox\" hidden></div>' +\n              '</div>' +\n            '</div>' +\n            productContextHtml,\n          focusSelector: 'input[name=\"factory_code_display\"]',\n          onPrimaryBlocked: function(){\n            trackVehicleModalFunnel(self, 'vehicle_continue_blocked', { product_type: self._currentProductBase || '', outcome: 'blocked', modal_required_fields: 'factory_code', modal_block_reason: 'missing_factory_code' });\n          },\n          onValidate: function(data){\n            var chosenValue = data.factory_code ? String(data.factory_code) : '';\n            var resolvedValue = '';\n            var blockReason = '';\n            if (!chosenValue) {\n              blockReason = 'missing_factory_code';\n            } else {\n              resolvedValue = resolveAllowedFactoryCode(chosenValue, factoryOptions);\n              if (!resolvedValue) blockReason = 'invalid_selection';\n            }\n            if (blockReason) {\n              trackVehicleModalFunnel(self, 'vehicle_continue_blocked', { product_type: self._currentProductBase || '', outcome: 'blocked', modal_required_fields: 'factory_code', modal_block_reason: blockReason });\n              return { ok:false, message: blockReason === 'missing_factory_code' ? 'Please select a factory code or choose \"No Factory Code\"' : 'Please select a valid factory code' };\n            }\n            data.factory_code = resolvedValue;\n            trackVehicleModalFunnel(self, 'vehicle_continue_clicked', { product_type: self._currentProductBase || '', outcome: 'clicked', modal_required_fields: 'factory_code' });\n            return { ok:true };\n          },\n          onOpen: function(modal){\n            if (!self._vehicleModalFunnelState) {\n              beginVehicleModalFunnel(self, factoryModalAttempt, { product_type: self._currentProductBase || '', outcome: 'opened', modal_required_fields: 'factory_code' });\n            }\n            trackVehicleModalFunnel(self, 'vehicle_factory_code_shown', { product_type: self._currentProductBase || '', outcome: 'shown', modal_required_fields: 'factory_code' });\n            var factoryValueEl = modal.formEl.querySelector('input[name=\"factory_code\"]');\n            var factoryEl = modal.formEl.querySelector('input[name=\"factory_code_display\"]');\n            var factoryComboEl = modal.formEl.querySelector('[data-psm-combobox=\"factory_code\"]');\n            var factoryClearEl = factoryComboEl ? factoryComboEl.querySelector('.psm-vehicle-combobox-clear') : null;\n            var factoryToggleEl = factoryComboEl ? factoryComboEl.querySelector('.psm-vehicle-combobox-toggle') : null;\n            var factoryListEl = modal.formEl.querySelector('#psm-factory-code-list');\n            var factoryCombobox = null;\n\n            function updateSubmitState(){\n              var hasSelection = !!trimPropValue(factoryValueEl && factoryValueEl.value);\n              if (factoryEl && factoryEl.classList) {\n                if (hasSelection) factoryEl.classList.remove('psm-vehicle-combobox-input--required');\n                else factoryEl.classList.add('psm-vehicle-combobox-input--required');\n              }\n              if (factoryComboEl && factoryComboEl.classList) {\n                if (hasSelection) factoryComboEl.classList.remove('psm-vehicle-combobox--required');\n                else factoryComboEl.classList.add('psm-vehicle-combobox--required');\n              }\n              if (modal.setPrimaryDisabled) {\n                modal.setPrimaryDisabled(!hasSelection, 'Select factory code to continue');\n              } else {\n                modal.okBtn.disabled = false;\n                modal.okBtn.setAttribute('aria-disabled', hasSelection ? 'false' : 'true');\n              }\n            }\n\n            function setFactoryValue(nextValue){\n              var val = trimPropValue(nextValue);\n              var resolved = '';\n              var idx = 0;\n              if (val) {\n                for (idx = 0; idx < factoryOptions.length; idx++) {\n                  if (String(factoryOptions[idx]).toLowerCase() === val.toLowerCase()) {\n                    resolved = String(factoryOptions[idx]);\n                    break;\n                  }\n                }\n              }\n              factoryValueEl.value = resolved;\n              if (factoryCombobox) factoryCombobox.syncFromSelection();\n              else factoryEl.value = resolved;\n              updateSubmitState();\n            }\n\n            factoryCombobox = createModalCombobox({\n              comboEl: factoryComboEl,\n              inputEl: factoryEl,\n              listEl: factoryListEl,\n              toggleEl: factoryToggleEl,\n              clearEl: factoryClearEl,\n              optionIdPrefix: 'psm-factory-code-option-',\n              emptyText: 'No matching factory codes found.',\n              getOptions: function(){ return factoryOptions.slice(0); },\n              getSelectedValue: function(){ return factoryValueEl.value; },\n              filterOption: function(optionValue, query){\n                return String(optionValue).toLowerCase().indexOf(String(query || '').toLowerCase()) > -1;\n              },\n              onSelect: function(value){\n                trackVehicleModalFunnel(self, 'vehicle_factory_code_selected', { product_type: self._currentProductBase || '', outcome: 'selected', modal_required_fields: 'factory_code' });\n                setFactoryValue(value);\n              },\n              onClear: function(){\n                setFactoryValue('');\n              },\n              onBlur: function(){\n                return { syncDisplay: true };\n              },\n              onEnterAfterSelect: function(){\n                if (modal.formEl.requestSubmit) modal.formEl.requestSubmit();\n                else modal.okBtn.click();\n              }\n            });\n\n            updateSubmitState();\n          }\n        }).then(function(res){\n          if (!res || !res.ok) {\n            trackVehicleModalFunnel(self, 'vehicle_modal_closed', { product_type: self._currentProductBase || '', outcome: 'closed', modal_required_fields: 'factory_code', modal_block_reason: 'modal_dismissed' });\n            endVehicleModalFunnel(self);\n            self._clearModalProductContext();\n            if (typeof onCancel === 'function') onCancel();\n            return;\n          }\n          var chosen = resolveAllowedFactoryCode(res.data && res.data.factory_code, factoryOptions);\n          if (!chosen) {\n            endVehicleModalFunnel(self);\n            self._clearModalProductContext();\n            if (typeof onCancel === 'function') onCancel();\n            return;\n          }\n          doneCb(chosen);\n        });\n      } else {\n        var v = window.prompt(title, '');\n        var fallbackValue = resolveAllowedFactoryCode(v, factoryOptions);\n        if (fallbackValue) doneCb(fallbackValue);\n        else {\n          endVehicleModalFunnel(self);\n          self._clearModalProductContext();\n          if (typeof onCancel === 'function') onCancel();\n        }\n      }\n    },\n\n    _openSingleStageModal: function(doneCb, onCancel, preferredFormula){\n      var self = this;\n      var advisorFormula = !!(this._repairPlanRequest && !this._repairPlanRequest.transportStarted);\n      var preferSingle = advisorFormula && preferredFormula === 'Single Stage';\n      var kitHasCc = this._kitHasClearcoat ? this._kitHasClearcoat() : false;\n      var productContextHtml = this._getModalProductContextHtml();\n      var singleStageModalClass = 'ps-modal--vehicle-details ps-modal--single-stage' + (productContextHtml ? ' ps-modal--with-product-context' : '');\n      var noticeHtml = kitHasCc\n        ? '<div id=\"ps-ss-cc-notice\" class=\"psm-single-stage-notice\" style=\"display:none;\">' +\n          (advisorFormula ? 'Single Stage paint does not need separate clear. Your kit still includes clear in case the paint you receive is labeled basecoat.' : 'Note: Clearcoat is not needed for Single Stage paint and will be removed from your bundle.') +\n          '</div>'\n        : '';\n\n      var bodyHtml =\n        '<div class=\"psm-vehicle-copy psm-single-stage-copy\">' +\n          'Many vintage vehicles originally had pigment mixed directly into the clearcoat. ' +\n          'Single Stage paint combines color and protection in one product &mdash; ' +\n          'no separate clearcoat needed.' +\n        '</div>' +\n        '<div class=\"psm-single-stage-options\">' +\n          '<label class=\"psm-single-stage-option\">' +\n            '<input type=\"radio\" name=\"paint_formula\" value=\"single_stage\"' + (preferSingle ? ' checked' : '') + ' class=\"psm-single-stage-radio\">' +\n            ' Single Stage formula' +\n          '</label>' +\n          '<label class=\"psm-single-stage-option\">' +\n            '<input type=\"radio\" name=\"paint_formula\" value=\"basecoat_clearcoat\"' + (preferSingle ? '' : ' checked') + ' class=\"psm-single-stage-radio\">' +\n            ' Basecoat + Clearcoat' +\n          '</label>' +\n        '</div>' +\n        noticeHtml +\n        productContextHtml;\n\n      if (PS.Modal && PS.Modal.open) {\n        PS.Modal.open({\n          title: 'This color may be available as a \"Single Stage\" paint formula',\n          modalClass: singleStageModalClass,\n          contentClass: 'psm-content psm-single-stage',\n          contentHtml: bodyHtml,\n          okLabel: resolveVehicleModalAction({ yearValid: true, repairPlanReview: !!(self._repairPlanRequest && !self._repairPlanRequest.transportStarted) }).label,\n          hideCancel: true\n        }).then(function(res){\n          if (!res || !res.ok) {\n            self._clearModalProductContext();\n            if (typeof onCancel === 'function') onCancel();\n            return;\n          }\n          var choice = (res.data && res.data.paint_formula) ? res.data.paint_formula : 'basecoat_clearcoat';\n          doneCb(choice);\n        });\n\n        // PS - Toggle clearcoat notice when radio selection changes\n        if (kitHasCc) {\n          var radios = document.querySelectorAll('#psm-form input[name=\"paint_formula\"]');\n          var notice = document.getElementById('ps-ss-cc-notice');\n          if (notice && radios.length) {\n            for (var i = 0; i < radios.length; i++) {\n              radios[i].addEventListener('change', function() {\n                notice.style.display = this.value === 'single_stage' ? 'block' : 'none';\n              });\n            }\n          }\n        }\n      } else {\n        self._clearModalProductContext();\n        doneCb('basecoat_clearcoat');\n      }\n    },\n\n    _bindYearGate: function(opts){\n      var self=this;\n      var skipAttach = !!(opts && opts.skipAttach);\n      var yearRequiredMessage = '';\n      if(!self.atcForm) return;\n\n      var factoryOptions = self._factoryCodes && self._factoryCodes.length ? self._factoryCodes.slice(0) : [];\n\n      function isAllowedYear(y){\n        if (!y) return false;\n        if (self._years && self._years.length) return self._years.indexOf(String(y)) !== -1;\n        var yn = parseInt(String(y).replace(/\\D/g,''),10);\n        return yn && yn >= CONFIG.minYear;\n      }\n\n      function clearValidationMessage(){\n        setFormErrorMessage(self.atcForm, '');\n      }\n\n      function showYearValidationMessage(){\n        setFormErrorMessage(self.atcForm, '');\n      }\n\n      function hasValidCustomColorYear(formData){\n        var props = serializeProperties(self.atcForm);\n        var yearVal = trimPropValue(props['Year']);\n        if (!isCustomColorLineItem(self.atcForm, formData, props)) {\n          clearValidationMessage();\n          return true;\n        }\n        if (!hasVehicleLineItemContext(props)) {\n          showYearValidationMessage();\n          return false;\n        }\n        if (yearVal && isAllowedYear(yearVal)) {\n          clearValidationMessage();\n          return true;\n        }\n        showYearValidationMessage();\n        return false;\n      }\n\n      function isFactoryRequired(){\n        return factoryOptions && factoryOptions.length > 0;\n      }\n\n      function requiresSingleStageFormula(yearValue){\n        var cutoff = (window.paintscratchTheme && window.paintscratchTheme.psSingleStageYear) || 0;\n        var selectedYear = parseInt(String(yearValue || ''), 10) || 0;\n        return !!(cutoff && selectedYear && selectedYear < cutoff);\n      }\n\n      function finishAtcFlow(){\n        releaseAtcFlow(self);\n        if (self._repairPlanRequest && !self._repairPlanRequest.transportStarted) {\n          cancelRepairPlanRequest(self, self.atcForm, 'Repair plan cancelled.');\n        }\n      }\n\n      function isAllowedFactory(code){\n        if (!isFactoryRequired()) return true;\n        return !!resolveAllowedFactoryCode(code, factoryOptions);\n      }\n\n      function setYearHidden(y){\n        var yEl = self.atcForm.querySelector('input[name=\"properties[Year]\"]');\n        if (!yEl) upsertHiddenProp(self.atcForm, 'Year', '');\n        yEl = self.atcForm.querySelector('input[name=\"properties[Year]\"]');\n        if (yEl) yEl.value = String(y || '');\n        try{\n          var cc = readPsCc();\n          cc.year = String(y || '');\n          cc.vehicle_scope = true;\n          writePsCc(cc);\n          if (PS.cc && typeof PS.cc.setYear === 'function') {\n            PS.cc.setYear(String(y || ''));\n          }\n        }catch(_e){}\n      }\n\n      function setModelHidden(model){\n        var modelValue = trimPropValue(model);\n        if (modelValue) {\n          upsertHiddenProp(self.atcForm, 'Model', modelValue);\n        } else {\n          removeHiddenProp(self.atcForm, 'Model');\n        }\n        try{\n          var cc = readPsCc();\n          cc.model = modelValue;\n          cc.vehicle_scope = true;\n          writePsCc(cc);\n        }catch(_e){}\n      }\n\n      function setFactoryHidden(code, consumeSearchTransition){\n        var fEl = self.atcForm.querySelector('input[name=\"properties[' + FACTORY_PROP_KEY + ']\"]');\n        if (!fEl) upsertHiddenProp(self.atcForm, FACTORY_PROP_KEY, '');\n        fEl = self.atcForm.querySelector('input[name=\"properties[' + FACTORY_PROP_KEY + ']\"]');\n        if (fEl) fEl.value = String(code || '');\n        try{\n          var cc = readPsCc();\n          cc.factory_code = String(code || '');\n          if (cc.year || cc.model) cc.vehicle_scope = true;\n          if (consumeSearchTransition === true) cc.ps_from_search = false;\n          writePsCc(cc);\n        }catch(_e){}\n      }\n\n      function requireYearAndFactoryThenContinue(originalCb){\n        var cc = readPsCc();\n        var freshVehicleSearch = isFreshVehicleSearchContext(cc);\n        var ssCutoff = (window.paintscratchTheme && window.paintscratchTheme.psSingleStageYear) || 0;\n\n        // Wrap callback: conditionally show Single Stage modal before proceeding\n        function cb(result) {\n          var resolvedYear = (result && result.year) ? parseInt(String(result.year), 10) : 0;\n          if (ssCutoff && resolvedYear && resolvedYear < ssCutoff) {\n            trackCustomColorFunnel('formula_modal_open', { product_type: self._currentProductBase || '' });\n            self._openSingleStageModal(function(choice) {\n              trackCustomColorFunnel('formula_selected', { product_type: self._currentProductBase || '', formula_choice: choice || 'none' });\n              if (choice === 'single_stage') {\n                upsertHiddenProp(self.atcForm, 'Paint Formula', 'Single Stage');\n              } else {\n                var pfEl = self.atcForm.querySelector('input[name=\"properties[Paint Formula]\"]');\n                if (pfEl) pfEl.parentNode.removeChild(pfEl);\n              }\n              originalCb(result);\n            }, finishAtcFlow, self._repairPlanRequest && self._repairPlanRequest.formulaBasis);\n          } else {\n            var pfEl = self.atcForm.querySelector('input[name=\"properties[Paint Formula]\"]');\n            if (pfEl) pfEl.parentNode.removeChild(pfEl);\n            originalCb(result);\n          }\n        }\n\n        var yInput = self.atcForm && self.atcForm.querySelector('input[name=\"properties[Year]\"]');\n        var mInput = self.atcForm && self.atcForm.querySelector('input[name=\"properties[Model]\"]');\n        var fInput = self.atcForm && self.atcForm.querySelector('input[name=\"properties[' + FACTORY_PROP_KEY + ']\"]');\n\n        var yearVal = '';\n        if (yInput && typeof yInput.value !== 'undefined') {\n          yearVal = String(yInput.value || '');\n        } else if (cc.year) {\n          yearVal = String(cc.year || '');\n        }\n\n        var modelVal = '';\n        var payloadModels = sanitizeModels((self._lastPayload && self._lastPayload.models) || []);\n        var resolvedPayloadModel = '';\n        var modelOutcome = null;\n        if (mInput && typeof mInput.value !== 'undefined') {\n          modelVal = String(mInput.value || '');\n        } else if (cc.model) {\n          modelVal = String(cc.model || '');\n        }\n        if (!modelVal) {\n          modelVal = onlyAllModelsValue((self._lastPayload && self._lastPayload.models) || []);\n        }\n\n        var factoryVal = '';\n\n        if (!freshVehicleSearch && fInput && typeof fInput.value !== 'undefined') {\n          factoryVal = trimPropValue(fInput.value || '');\n        }\n        if (!freshVehicleSearch && !factoryVal) {\n          factoryVal = resolveScopedCookieFactoryCode(cc, self._lastPayload || {}, factoryOptions);\n        }\n\n        function afterVehicleDetails(selection){\n          var yResolved = selection && selection.year ? String(selection.year) : '';\n          var chosenModel = selection && selection.model ? trimPropValue(selection.model) : '';\n          var vehicleContext = null;\n          var resolvedModels = null;\n          vehicleContext = resolveVehicleLookupContext(self.atcForm, self._lastPayload || {});\n          resolvedModels = readVehicleModelsForController(self, vehicleContext, yResolved);\n          if (!chosenModel && resolvedModels !== null && !resolvedModels.length && self._lastPayload) {\n            self._lastPayload.models = [];\n          }\n          setYearHidden(yResolved);\n          setModelHidden(chosenModel);\n          clearValidationMessage();\n\n          if (!isFactoryRequired()){\n            setFactoryHidden('', true);\n            endVehicleModalFunnel(self);\n            cb({ year: yResolved, model: chosenModel, factory_code: '' });\n            return;\n          }\n\n          if (factoryVal && isAllowedFactory(factoryVal)) {\n            factoryVal = resolveAllowedFactoryCode(factoryVal, factoryOptions);\n            setFactoryHidden(factoryVal, true);\n            endVehicleModalFunnel(self);\n            cb({ year: yResolved, model: chosenModel, factory_code: factoryVal });\n            return;\n          }\n\n          function openFactorySelection(){\n            self._openFactoryModal(function(chosenFc){\n              if (!chosenFc) return;\n              if (!isAllowedFactory(chosenFc)){\n                alert('Sorry, that factory code is not compatible for this color. Please select a valid factory code.');\n                return;\n              }\n              factoryVal = resolveAllowedFactoryCode(chosenFc, factoryOptions);\n              setFactoryHidden(factoryVal, true);\n              endVehicleModalFunnel(self);\n              cb({ year: yResolved, model: chosenModel, factory_code: factoryVal });\n            }, requiresSingleStageFormula(yResolved) ? {\n              label: 'Continue',\n              ariaLabel: 'Continue to the paint formula selection'\n            } : {\n              label: 'Add to Cart',\n              ariaLabel: 'Add selected paint product to cart'\n            }, finishAtcFlow, factoryOptions);\n          }\n\n          vehicleContext.year = yResolved;\n          vehicleContext.model = chosenModel;\n          self.disable('Loading...');\n          requestCartSnapshot(function(_err, cart){\n            var reusableFactory = findReusableFactoryCodeFromCart(cart, vehicleContext, factoryOptions);\n            self.enable();\n            if (reusableFactory) {\n              factoryVal = reusableFactory;\n              setFactoryHidden(factoryVal, true);\n              endVehicleModalFunnel(self);\n              cb({ year: yResolved, model: chosenModel, factory_code: factoryVal });\n              return;\n            }\n            openFactorySelection();\n          });\n        }\n\n        function openVehicleDetailsPrompt(initialModalModel, shouldShowYearMessage){\n          if (shouldShowYearMessage) showYearValidationMessage();\n          setFactoryHidden('');\n          self._openVehicleDetailsModal(function(selection){\n            if (!selection || !selection.year) {\n              endVehicleModalFunnel(self);\n              return;\n            }\n            if (!isAllowedYear(selection.year)){\n              showYearValidationMessage();\n              alert('Sorry, that year is not compatible for this color. Please select a valid year.');\n              endVehicleModalFunnel(self);\n              return;\n            }\n            yearVal = String(selection.year || '');\n            modelVal = trimPropValue(selection.model || '');\n            trackVehicleModalFunnel(self, 'vehicle_modal_continue', { product_type: self._currentProductBase || '', outcome: 'continued' });\n            afterVehicleDetails({\n              year: yearVal,\n              model: modelVal\n            });\n          }, {\n            requiredMsg: yearRequiredMessage,\n            initialYear: yearVal,\n            initialModel: initialModalModel || '',\n            factoryOptions: factoryOptions,\n            onCancel: finishAtcFlow\n          });\n        }\n\n        if (yearVal && isAllowedYear(yearVal)) {\n          if (modelVal && payloadModels.length) {\n            modelOutcome = resolveSavedVehicleModelOutcome(modelVal, payloadModels, null);\n            resolvedPayloadModel = modelOutcome.model;\n            if (resolveVehicleCheckoutStep({\n              isCustom: true,\n              yearValid: true,\n              modelRequired: payloadModels.length > 0,\n              modelValid: modelOutcome.step === 'valid'\n            }) === 'vehicle') {\n              openVehicleDetailsPrompt('', false);\n              return;\n            }\n            afterVehicleDetails({\n              year: yearVal,\n              model: resolvedPayloadModel\n            });\n            return;\n          }\n          if (modelVal) {\n            fetchVehicleModelsForController(self, resolveVehicleLookupContext(self.atcForm, self._lastPayload || {}), yearVal, function(_err, models){\n              var savedModelOutcome = resolveSavedVehicleModelOutcome(modelVal, models || [], _err);\n              if (savedModelOutcome.step === 'valid') {\n                afterVehicleDetails({ year: yearVal, model: savedModelOutcome.model });\n                return;\n              }\n              if (savedModelOutcome.step === 'optional') {\n                afterVehicleDetails({ year: yearVal, model: '' });\n                return;\n              }\n              openVehicleDetailsPrompt('', false);\n            });\n            return;\n          }\n          modelVal = onlyAllModelsValue(payloadModels);\n          if (modelVal) {\n            afterVehicleDetails({ year: yearVal, model: modelVal });\n            return;\n          }\n          if (payloadModels.length) {\n            if (canUseVehicleScope(cc, self._lastPayload || {}) && trimPropValue(cc && cc.year) === trimPropValue(yearVal)) {\n              fetchVehicleModelsForController(self, resolveVehicleLookupContext(self.atcForm, self._lastPayload || {}), yearVal, function(_err, models){\n                var scopedModelOutcome = resolveTrustedScopedVehicleModelOutcome(cc, self._lastPayload || {}, yearVal, models || [], _err);\n                if (scopedModelOutcome.step === 'optional') {\n                  afterVehicleDetails({ year: yearVal, model: '' });\n                  return;\n                }\n                openVehicleDetailsPrompt('', false);\n              });\n              return;\n            }\n            openVehicleDetailsPrompt('', false);\n            return;\n          }\n          fetchVehicleModelsForController(self, resolveVehicleLookupContext(self.atcForm, self._lastPayload || {}), yearVal, function(_err, models){\n            var availableModels = sanitizeModels(models || []);\n            if (!_err && !availableModels.length) {\n              afterVehicleDetails({ year: yearVal, model: '' });\n              return;\n            }\n            openVehicleDetailsPrompt('', false);\n          });\n          return;\n        }\n\n        openVehicleDetailsPrompt(modelVal, true);\n\n      }\n\n      function onAtc(evt){\n        function continueAtc(){\n          requireYearAndFactoryThenContinue(function(){\n            var integrityResult;\n            ensureSlugProps(self.atcForm, self._lastPayload || {});\n            ensureBaseProps(self.atcForm, self._lastPayload || {});\n            integrityResult = validateCustomColorIntegrity(self.atcForm, self._lastPayload || {});\n            if (!integrityResult.ok) {\n              stopCustomColorIntegrityFailure(self, self.atcForm, self._lastPayload || {}, integrityResult);\n              return;\n            }\n            if (!hasValidCustomColorYear(self._lastPayload || {})) {\n              stopCustomColorIntegrityFailure(self, self.atcForm, self._lastPayload || {}, { reason: 'invalid_year', properties: integrityResult.properties });\n              return;\n            }\n\n            var mainItem=mainLineItemFromForm(self.atcForm, self._lastPayload || {});\n            if(!mainItem){\n              stopCustomColorIntegrityFailure(self, self.atcForm, self._lastPayload || {}, { reason: 'missing_line_item', properties: integrityResult.properties });\n              return;\n            }\n\n            var items=[ mainItem ];\n            var quickAddModal = null;\n            var repairPlan = self._repairPlanRequest && self._repairPlanRequest.form === self.atcForm ? self._repairPlanRequest : null;\n            if (repairPlan && repairPlan.multiForm) {\n              items = [];\n              for (var repairFormIndex = 0; repairFormIndex < repairPlan.forms.length; repairFormIndex += 1) {\n                var repairForm = repairPlan.forms[repairFormIndex];\n                copyRepairPlanFormula(repairForm, self.atcForm);\n                var repairProps = prepareRepairPlanColorForm(repairForm, self._lastPayload || {});\n                var repairIntegrity = validateCustomColorIntegrity(repairForm, self._lastPayload || {}, repairProps);\n                var repairLine = null;\n                if (!repairIntegrity.ok || !hasValidRepairPlanColorYear(self._lastPayload || {}, repairIntegrity.properties)) {\n                  stopCustomColorIntegrityFailure(self, self.atcForm, self._lastPayload || {}, { reason: repairIntegrity.reason || 'invalid_year', properties: repairIntegrity.properties });\n                  return;\n                }\n                if (isCatalyzedSprayOnly(repairProps['Color Name'] || '') && !isCatalyzedAllowedBase(getCurrentProductBase(self._lastPayload || {}, repairForm))) {\n                  stopCustomColorIntegrityFailure(self, self.atcForm, self._lastPayload || {}, { reason: 'catalyzed_spray_only', properties: repairProps });\n                  return;\n                }\n                repairLine = mainLineItemFromForm(repairForm, self._lastPayload || {});\n                if (!repairLine) {\n                  stopCustomColorIntegrityFailure(self, self.atcForm, self._lastPayload || {}, { reason: 'missing_line_item', properties: repairProps });\n                  return;\n                }\n                items.push(repairLine);\n              }\n            }\n\n            // PS - Inject Kit Extras\n            var kitExtras = repairPlan ? repairPlanKitExtrasFromForm(self.atcForm) : (self._getKitExtras ? self._getKitExtras() : []);\n            // PS - If Single Stage, remove clearcoat from bundle\n            var pfEl = self.atcForm.querySelector('input[name=\"properties[Paint Formula]\"]');\n            if (!repairPlan && pfEl && pfEl.value === 'Single Stage' && kitExtras.length > 0) {\n              var ccVid = self._getClearcoatVariantId ? self._getClearcoatVariantId() : 0;\n              if (ccVid) {\n                var filtered = [];\n                for (var k = 0; k < kitExtras.length; k++) {\n                  if (kitExtras[k].id !== ccVid) filtered.push(kitExtras[k]);\n                }\n                kitExtras = filtered;\n              }\n            }\n            if (kitExtras.length > 0) {\n               items = items.concat(kitExtras);\n            }\n            if (repairPlan) {\n              items = appendRepairPlanOrdinaryItems(items, repairPlan.ordinaryItems);\n            }\n\n            try {\n              quickAddModal = self.atcForm && self.atcForm.closest ? self.atcForm.closest('quick-add-modal') : null;\n            } catch (_e) {\n              quickAddModal = null;\n            }\n\n            if (!claimCartRequest(self)) {\n              if (repairPlan) {\n                completeRepairPlanRequest(self, self.atcForm, new Error('A cart request is already in progress. Please wait for it to finish.'), null);\n              }\n              finishAtcFlow();\n              return;\n            }\n            if (repairPlan) {\n              repairPlan.transportStarted = true;\n              setRepairPlanButtonBusy(repairPlan.button, true);\n            } else {\n              self.disable('Adding...');\n            }\n            var secId = currentSectionId(self.atcForm);\n            addItemsAndRender(items, secId, function(err){\n              releaseCartRequest(self);\n              if (!repairPlan) self.enable();\n              finishAtcFlow();\n              if (repairPlan) {\n                repairPlan.transportStarted = false;\n                if (err) {\n                  self._clearModalProductContext();\n                  if (err.psIntegrityFailure) {\n                    stopCustomColorIntegrityFailure(self, self.atcForm, self._lastPayload || {}, { reason: err.psIntegrityReason || 'identity_unavailable' });\n                    return;\n                  }\n                  markRepairPlanTransportError(err);\n                  setFormErrorMessage(self.atcForm, err.message || 'Unable to add this item to your cart. Please try again.');\n                  completeRepairPlanRequest(self, self.atcForm, err, null);\n                  return;\n                }\n                self._clearModalProductContext();\n                completeRepairPlanRequest(self, self.atcForm, null, { items: items });\n                return;\n              }\n              if (err){\n                self._clearModalProductContext();\n                if (err.psIntegrityFailure) {\n                  stopCustomColorIntegrityFailure(self, self.atcForm, self._lastPayload || {}, { reason: err.psIntegrityReason || 'identity_unavailable' });\n                  return;\n                }\n                if (!attemptNativeCartFallback(self.atcForm, self._lastPayload || {}, err)) {\n                  setFormErrorMessage(self.atcForm, err.message || 'Unable to add this item to your cart. Please try again.');\n                  return;\n                }\n              } else {\n                self._clearModalProductContext();\n              }\n            }, {\n              quickAddModal: quickAddModal,\n              requireCompleteItems: !!repairPlan,\n              integrityForm: self.atcForm,\n              integrityData: self._lastPayload || {},\n              beforeSend: repairPlan && repairPlan.beforeSend\n            });\n          });\n        }\n\n        if (!isCustomColorLineItem(self.atcForm, self._lastPayload || {}, serializeProperties(self.atcForm))) {\n          if (self._repairPlanRequest && self._repairPlanRequest.form === self.atcForm) {\n            completeRepairPlanRequest(self, self.atcForm, new Error('Please choose a color-specific paint kit before adding this repair plan.'), null);\n          }\n          return true;\n        }\n        if (self.isCatalyzedSprayOnlyBlocked()) {\n          self.applyCatalyzedSprayOnlyGuard(self._lastPayload || {});\n          if (self._repairPlanRequest && self._repairPlanRequest.form === self.atcForm) {\n            completeRepairPlanRequest(self, self.atcForm, new Error('This color is available only as a catalyzed spray can.'), null);\n          }\n          return false;\n        }\n        if(evt && evt.preventDefault) evt.preventDefault();\n        if(evt && evt.stopImmediatePropagation) evt.stopImmediatePropagation();\n        if(evt && evt.stopPropagation) evt.stopPropagation();\n        if (!claimAtcFlow(self)) {\n          if (self._repairPlanRequest && self._repairPlanRequest.form === self.atcForm) {\n            completeRepairPlanRequest(self, self.atcForm, new Error('A cart request is already in progress. Please wait for it to finish.'), null);\n          }\n          return false;\n        }\n        trackCustomColorFunnel('atc_click', { product_type: self._currentProductBase || '' });\n        self._captureModalProductContext(self.atcForm, self.atcBtn);\n\n        if (shouldRefreshColorContext(self.atcForm, self._lastPayload || {})) {\n          self.disable('Loading...');\n          fetchColorContextFromCookie(function(_err, fetchedPayload){\n            var nextPayload = self._lastPayload || {};\n            if (_err) {\n              stopCustomColorIntegrityFailure(self, self.atcForm, nextPayload || {}, { reason: _err.psColorContextReason || 'color_context_unavailable', properties: serializeProperties(self.atcForm) });\n              return;\n            }\n            if (fetchedPayload) nextPayload = mergePayload(nextPayload, fetchedPayload);\n            syncControllerPayload(self, nextPayload || {});\n            self.enable();\n            continueAtc();\n          });\n          return false;\n        }\n\n        continueAtc();\n      }\n\n      self._onAtcHandler = onAtc;\n      if (skipAttach) return;\n      self.atcForm.addEventListener('submit', onAtc, true);\n      if(self.atcBtn && self.atcBtn.addEventListener){\n        self.atcBtn.addEventListener('click', onAtc, true);\n      }\n    },\n\n    invokeAddToCart: function(form, btn, evt){\n      var self = this;\n      var payload = null;\n      if (!form) return false;\n\n      this.atcForm = form;\n      if (btn) this.atcBtn = btn;\n\n      payload = mergePayload(\n        mergePayload(\n          ((typeof window !== 'undefined' && window.PS_SSR && typeof window.PS_SSR === 'object') ? window.PS_SSR : {}) || {},\n          ((PS.ssr && PS.ssr()) || {}) || {}\n        ),\n        this._lastPayload || {}\n      );\n\n      function bindFromPayload(nextPayload){\n        syncControllerPayload(self, nextPayload || {});\n        self._bindYearGate({ skipAttach: true });\n      }\n\n      if (shouldRefreshColorContext(form, payload || {})) {\n        this.disable('Loading...');\n        fetchColorContextFromCookie(function(_err, fetchedPayload){\n          var nextPayload = payload;\n          if (_err) {\n            stopCustomColorIntegrityFailure(self, form, nextPayload || {}, { reason: _err.psColorContextReason || 'color_context_unavailable', properties: serializeProperties(form) });\n            return;\n          }\n          if (fetchedPayload) nextPayload = mergePayload(payload || {}, fetchedPayload);\n          bindFromPayload(nextPayload || {});\n          self.enable();\n          if (typeof self._onAtcHandler !== 'function') {\n            if (isCustomColorLineItem(form, nextPayload || {}, serializeProperties(form))) {\n              stopCustomColorIntegrityFailure(self, form, nextPayload || {}, { reason: 'handler_unavailable', properties: serializeProperties(form) });\n              setFormErrorMessage(form, 'Custom-color Add to Cart is still loading. Please try again.');\n              return;\n            }\n            if (self._repairPlanRequest && self._repairPlanRequest.form === form) {\n              completeRepairPlanRequest(self, form, new Error('The repair plan could not start. Please try again.'), null);\n              return;\n            }\n            form.submit();\n            return;\n          }\n          self._onAtcHandler(evt || null);\n        });\n        return true;\n      }\n\n      bindFromPayload(payload || {});\n\n      if (typeof this._onAtcHandler !== 'function') {\n        if (isCustomColorLineItem(form, payload || {}, serializeProperties(form))) {\n          stopCustomColorIntegrityFailure(this, form, payload || {}, { reason: 'handler_unavailable', properties: serializeProperties(form) });\n          setFormErrorMessage(form, 'Custom-color Add to Cart is still loading. Please try again.');\n        }\n        return false;\n      }\n      this._onAtcHandler(evt || null);\n      return true;\n    },\n\n    /*\n     * Add the selected color-specific repair kit and ordinary accessory variants\n     * in one managed cart request. The form must be the selected kit's own custom\n     * color form; pass null for accessories-only. Ordinary items intentionally\n     * contain only Shopify variant ids and quantities, never paint properties.\n     */\n    readRepairPlanCartSnapshot: function(done){ requestCartSnapshot(done); },\n    addRepairPlanItems: function(customColorForms, ordinaryItems, button, done, beforeSend, options){\n      var self = this;\n      var forms = customColorForms && typeof customColorForms.length === 'number' ? Array.prototype.slice.call(customColorForms) : [];\n      var ordinary = normalizeRepairPlanOrdinaryItems(ordinaryItems);\n      var request = null;\n      var i = 0;\n      var form = null;\n      var formButton = null;\n      var props = null;\n\n      function failImmediately(message){\n        var error = new Error(message);\n        try { if (typeof done === 'function') done(error, null); } catch (_eDone) {}\n        return false;\n      }\n\n      if (!Array.isArray(customColorForms) || !Array.isArray(ordinaryItems)) {\n        return failImmediately('Some selected products are invalid. Please reload the plan before adding.');\n      }\n      if (ordinaryItems.length !== ordinary.length || ordinary.length > 24) {\n        return failImmediately('Some selected products or quantities are invalid. Please reload the plan before adding.');\n      }\n      if (forms.length > 3) return failImmediately('Choose no more than three color-specific paint products in one repair plan.');\n      if (!forms.length) return this._addRepairPlanSingle(null, ordinary, button, done, beforeSend, options);\n      if (forms.length === 1) return this._addRepairPlanSingle(forms[0], ordinary, button, done, beforeSend, options);\n      if (this._repairPlanInFlight || this._repairPlanRequest) {\n        return failImmediately('A repair plan is already being added. Please wait for it to finish.');\n      }\n      if (this._atcFlowInFlight || this._cartRequestInFlight) {\n        return failImmediately('Another cart action is in progress. Finish it before adding this plan.');\n      }\n\n      for (i = 0; i < forms.length; i += 1) {\n        form = forms[i];\n        if (!form || !form.querySelector || !form.querySelector('input[name=\"id\"]')) {\n          return failImmediately('A selected color-specific paint product is unavailable. Please choose it again.');\n        }\n        props = prepareRepairPlanColorForm(form, this._lastPayload || {});\n        if (!isCustomColorLineItem(form, this._lastPayload || {}, props)) {\n          return failImmediately('A selected color-specific paint product could not be confirmed. Please choose it again.');\n        }\n        if (isCatalyzedSprayOnly((props['Color Name'] || (this._lastPayload || {}).color || '')) && !isCatalyzedAllowedBase(getCurrentProductBase(this._lastPayload || {}, form))) {\n          return failImmediately('This color is available only as a catalyzed spray can.');\n        }\n      }\n      if (!button && forms[0].querySelector) {\n        formButton = forms[0].querySelector('[type=\"submit\"], .product-form__submit');\n      }\n      request = {\n        form: forms[0],\n        forms: forms,\n        multiForm: true,\n        ordinaryItems: ordinary,\n        button: button || formButton || null,\n        done: done,\n        beforeSend: typeof beforeSend === 'function' ? beforeSend : null,\n        formulaBasis: options && options.formulaBasis === 'Single Stage' ? 'Single Stage' : '',\n        originalForm: this.atcForm || null,\n        originalBtn: this.atcBtn || null,\n        originalPayload: this._lastPayload || null,\n        originalProductBase: this._currentProductBase,\n        originalCatalyzedOnly: this._isCatalyzedOnly,\n        originalSprayProduct: this._isSprayProduct,\n        transportStarted: false,\n        completed: false\n      };\n      this._repairPlanRequest = request;\n      this._repairPlanInFlight = true;\n      setRepairPlanButtonBusy(request.button, true);\n      if (!this.invokeAddToCart(forms[0], request.button, null)) {\n        completeRepairPlanRequest(this, forms[0], new Error('The repair plan could not start. Please try again.'), null);\n        return false;\n      }\n      return true;\n    },\n\n    _addRepairPlanSingle: function(form, ordinaryItems, button, done, beforeSend, options){\n      var self = this;\n      var ordinary = normalizeRepairPlanOrdinaryItems(ordinaryItems);\n      var request = null;\n      var started = false;\n      var payload = null;\n      var error = null;\n      var formButton = null;\n\n      function failImmediately(message){\n        error = new Error(message);\n        try { if (typeof done === 'function') done(error, null); } catch (_eDone) {}\n        return false;\n      }\n\n      if (this._repairPlanInFlight || this._repairPlanRequest) {\n        return failImmediately('A repair plan is already being added. Please wait for it to finish.');\n      }\n      if (this._atcFlowInFlight || this._cartRequestInFlight) {\n        return failImmediately('Another cart action is in progress. Finish it before adding this plan.');\n      }\n      if (!Array.isArray(ordinaryItems) || ordinaryItems.length !== ordinary.length || ordinary.length > 24) {\n        return failImmediately('Some selected products or quantities are invalid. Please reload the plan before adding.');\n      }\n      if (!form && !ordinary.length) {\n        return failImmediately('Choose at least one product to add to your cart.');\n      }\n      if (form && !button && form.querySelector) {\n        formButton = form.querySelector('[type=\"submit\"], .product-form__submit');\n      }\n\n      request = {\n        form: form || null,\n        ordinaryItems: ordinary,\n        button: button || formButton || null,\n        done: done,\n        beforeSend: typeof beforeSend === 'function' ? beforeSend : null,\n        formulaBasis: options && options.formulaBasis === 'Single Stage' ? 'Single Stage' : '',\n        originalForm: this.atcForm || null,\n        originalBtn: this.atcBtn || null,\n        originalPayload: this._lastPayload || null,\n        originalProductBase: this._currentProductBase,\n        originalCatalyzedOnly: this._isCatalyzedOnly,\n        originalSprayProduct: this._isSprayProduct,\n        transportStarted: false,\n        completed: false\n      };\n      this._repairPlanRequest = request;\n      this._repairPlanInFlight = true;\n      setRepairPlanButtonBusy(request.button, true);\n\n      if (!form) {\n        if (!claimCartRequest(this)) {\n          completeRepairPlanRequest(this, null, new Error('A cart request is already in progress. Please wait for it to finish.'), null);\n          return false;\n        }\n        request.transportStarted = true;\n        addItemsAndRender(ordinary, '', function(err, result){\n          releaseCartRequest(self);\n          request.transportStarted = false;\n          if (err) markRepairPlanTransportError(err);\n          completeRepairPlanRequest(self, null, err || null, result || { items: ordinary });\n        }, { requireCompleteItems: true, beforeSend: request.beforeSend });\n        return true;\n      }\n\n      if (!form.querySelector || !form.querySelector('input[name=\"id\"]')) {\n        completeRepairPlanRequest(this, form, new Error('The selected paint kit is unavailable. Please choose it again.'), null);\n        return false;\n      }\n\n      payload = mergePayload(\n        mergePayload(\n          ((typeof window !== 'undefined' && window.PS_SSR && typeof window.PS_SSR === 'object') ? window.PS_SSR : {}) || {},\n          ((PS.ssr && PS.ssr()) || {}) || {}\n        ),\n        this._lastPayload || {}\n      );\n      if (!isCustomColorLineItem(form, payload, serializeProperties(form))) {\n        completeRepairPlanRequest(this, form, new Error('Please choose a color-specific paint kit before adding this repair plan.'), null);\n        return false;\n      }\n\n      started = this.invokeAddToCart(form, request.button, null);\n      if (!started && this._repairPlanRequest === request) {\n        completeRepairPlanRequest(this, form, new Error('The repair plan could not start. Please try again.'), null);\n      }\n      return !!started;\n    },\n\n    /* Backward-compatible single-form entry point for existing callers. */\n    addRepairPlan: function(form, ordinaryItems, button, done){\n      return this.addRepairPlanItems(form ? [form] : [], ordinaryItems, button, done);\n    },\n\n    // Clearcoat UI helpers\n    hideAllCollections: function(){\n      if (!this._collectionPairs.length) this._collectionPairs = findCollectionPairs();\n      for (var i = 0; i < this._collectionPairs.length; i++){\n        setHidden(this._collectionPairs[i].el, true);\n      }\n    },\n\ntoggleCollectionsByFlag: function(isTricoat){\n      if (!this._collectionPairs.length) this._collectionPairs = findCollectionPairs();\n      var want = isTricoat ? 'tricoat' : 'basecoat';\n      for (var i = 0; i < this._collectionPairs.length; i++){\n        var p = this._collectionPairs[i];\n        setHidden(p.el, p.type !== want);\n      }\n    },\n\n    disable: function(label){\n      var showLoading = false;\n      if (this.isCatalyzedSprayOnlyBlocked()) {\n        label = label || 'Spray Can Only';\n      }\n      var b = this.atcBtn; if (!b) return;\n      showLoading = String(label || '').toLowerCase() === 'adding...';\n      b.disabled = true;\n      if (showLoading) b.classList.add('loading');\n      var span = b.querySelector('span');\n      var spinner = b.querySelector('.loading__spinner');\n      if (!b.dataset.originalText) {\n        b.dataset.originalText = span ? (span.textContent || 'Add to cart') : (b.textContent || 'Add to cart');\n      }\n      if (label) { if (span) span.textContent = label; else b.textContent = label; }\n      if (spinner) {\n        if (showLoading) spinner.classList.remove('hidden');\n        else spinner.classList.add('hidden');\n      }\n      b.setAttribute('aria-disabled','true');\n    },\n\n    enable: function(){\n      if (this.isCatalyzedSprayOnlyBlocked()) return;\n      var b = this.atcBtn; if (!b) return;\n      var orig = b.dataset.originalText || 'Add to cart';\n      var span = b.querySelector('span');\n      var spinner = b.querySelector('.loading__spinner');\n      if (span) span.textContent = orig; else b.textContent = orig;\n      b.classList.remove('loading');\n      b.disabled = false;\n      if (spinner) spinner.classList.add('hidden');\n      b.setAttribute('aria-disabled','false');\n    },\n\n    isCatalyzedSprayOnlyBlocked: function(){\n      if (!this._isCatalyzedOnly) return false;\n      if (this._currentProductBase) return !isCatalyzedAllowedBase(this._currentProductBase);\n      return isColorProductRoute();\n    },\n\n    applyCatalyzedSprayOnlyGuard: function(payload){\n      var p = payload || this._lastPayload || {};\n      var colorName = p.color || '';\n      var form = this.atcForm;\n      var btn = this.atcBtn;\n      var base = getCurrentProductBase(p, form);\n      this._isCatalyzedOnly = isCatalyzedSprayOnly(colorName);\n      this._currentProductBase = base;\n      this._isSprayProduct = base === 'spray';\n\n      if (!form || !btn) return;\n\n      var note = form.querySelector('[data-ps-catalyzed-note=\"1\"]');\n      var blocked = this.isCatalyzedSprayOnlyBlocked();\n      var dpb = findDynamicCheckoutNearForm(form);\n\n      if (!blocked) {\n        if (note && note.parentNode) note.parentNode.removeChild(note);\n        btn.removeAttribute('data-ps-catalyzed-blocked');\n        if (dpb) dpb.style.display = '';\n        return;\n      }\n\n      this.disable('Spray Can Only');\n      btn.setAttribute('data-ps-catalyzed-blocked', '1');\n      if (dpb) dpb.style.display = 'none';\n\n      if (!note) {\n        note = document.createElement('div');\n        note.setAttribute('data-ps-catalyzed-note', '1');\n        note.setAttribute('style', 'margin-top:12px;padding:10px;border:1px solid #d9c27a;background:#fff8e5;color:#2a2a2a;font-size:14px;line-height:1.4;');\n      }\n\n      var sprayHref = buildSprayOnlyUrl(p);\n      note.innerHTML = 'This selected color is available only as a Spray Can. <a href=\"' + sprayHref + '\">Go to Spray Can product</a>.';\n      if (btn.parentNode && note.parentNode !== btn.parentNode) {\n        btn.parentNode.appendChild(note);\n      }\n    }\n  };\n\n  function bindPdpColorContextListener(){\n    if (!document || !document.addEventListener) return;\n    if (!PS || !PS.PDP || PS.PDP._colorContextListenerBound) return;\n    document.addEventListener('ps:color:validated', function(ev){\n      var d = ev && ev.detail ? ev.detail : {};\n      if (PS && PS.PDP && typeof PS.PDP.rememberColorContext === 'function') {\n        PS.PDP.rememberColorContext(d);\n      }\n    });\n    PS.PDP._colorContextListenerBound = true;\n  }\n\n  function shouldAutoInitPdp(){\n    try {\n      var path = (window.location && window.location.pathname) ? String(window.location.pathname) : '';\n      if (/^\\/products\\//.test(path)) return true;\n    } catch (_e) {}\n    return false;\n  }\n\n  // Auto init the PDP controller once the DOM is ready so the year gate and cart wiring are active.\n  if (document && document.addEventListener) {\n    try {\n      bindPdpColorContextListener();\n    } catch (_e) {}\n    if (document.readyState === 'loading') {\n      document.addEventListener('DOMContentLoaded', function(){\n        try {\n          normalizeLegacyColorFocusHeadings();\n        } catch (_eNormalize) {}\n        try {\n          if (PS && PS.PDP && !PS.PDP._bound && shouldAutoInitPdp()) {\n            PS.PDP.init();\n          }\n        } catch (_e) {}\n      });\n    } else {\n      try {\n        normalizeLegacyColorFocusHeadings();\n      } catch (_eNormalizeReady) {}\n      try {\n        if (PS && PS.PDP && !PS.PDP._bound && shouldAutoInitPdp()) {\n          PS.PDP.init();\n        }\n      } catch (_e) {}\n    }\n  }\n\n})(window, document);\n"],
  "mappings": "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",
  "names": ["window", "document", "path", "payload", "key", "checked", "i", "descContent", "mainDesc", "newPrice", "container", "priceEls", "p", "options", "pfEl"]
}
