{
  "version": 3,
  "sources": ["/cdn/shop/t/10/assets/zooniform.js?znf=20260629-quote-tier-r1"],
  "sourcesContent": ["(() => {\n  const DESIGN_TOOL_URL = '/design-tool/';\n  const FACEBOOK_URL = 'https://www.facebook.com/zooniform?mibextid=wwXIfr';\n\n  const normalizeDesignToolUrl = (url) => {\n    const value = String(url || '').trim();\n    return value.replace(/\\/+$/, '') === '/pages/developer' ? DESIGN_TOOL_URL : value || DESIGN_TOOL_URL;\n  };\n\n  const normalizeFacebookUrl = (url) => {\n    const value = String(url || '').trim();\n    if (!value) return value;\n    try {\n      const parsed = new URL(value, window.location.origin);\n      const pathname = parsed.pathname.replace(/\\/+$/, '');\n      if (parsed.hostname.endsWith('facebook.com') && (pathname === '' || pathname === '/zooniform')) return FACEBOOK_URL;\n    } catch (error) {\n      return value;\n    }\n    return value;\n  };\n\n  const money = (cents) => {\n    const value = Number(cents || 0) / 100;\n    return new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(value);\n  };\n\n  const moneyFromDollars = (value) => money(Math.round(Number(value || 0) * 100));\n\n  const parseNumber = (value) => {\n    const cleaned = String(value || '').replace(/,/g, '').replace(/[^0-9.-]/g, '');\n    const parsed = Number(cleaned);\n    return Number.isFinite(parsed) ? parsed : 0;\n  };\n\n  const parseCents = (value) => {\n    const parsed = parseNumber(value);\n    return Math.round(parsed);\n  };\n\n  const getFieldValue = (root, name) => {\n    const checked = root.querySelector(`input[name=\"${name}\"]:checked`);\n    if (checked) return checked.value;\n    const field = root.querySelector(`select[name=\"${name}\"], input[name=\"${name}\"], textarea[name=\"${name}\"]`);\n    return field ? field.value : '';\n  };\n\n  const removePreviewImageProperties = (root = document) => {\n    root.querySelectorAll('input[name=\"properties[_Preview Image]\"], [data-preview-image-property]').forEach((field) => {\n      field.remove();\n    });\n  };\n\n  document.documentElement.classList.remove('no-js');\n  removePreviewImageProperties();\n\n  document.querySelectorAll('a[href=\"/pages/developer\"], a[href=\"/pages/developer/\"]').forEach((link) => {\n    link.setAttribute('href', DESIGN_TOOL_URL);\n  });\n\n  document.querySelectorAll('a[href*=\"facebook.com\"]').forEach((link) => {\n    link.setAttribute('href', normalizeFacebookUrl(link.getAttribute('href')));\n  });\n\n  document.querySelectorAll('[data-design-tool-url]').forEach((element) => {\n    element.dataset.designToolUrl = normalizeDesignToolUrl(element.dataset.designToolUrl);\n  });\n\n  const menu = document.querySelector('[data-menu]');\n  const menuToggles = document.querySelectorAll('[data-menu-toggle]');\n  if (menuToggles.length && menu) {\n    menuToggles.forEach((menuToggle) => {\n      menuToggle.addEventListener('click', () => {\n        const expanded = menu.classList.contains('is-open');\n        menu.classList.toggle('is-open', !expanded);\n        menuToggles.forEach((toggle) => toggle.setAttribute('aria-expanded', String(!expanded)));\n      });\n    });\n  }\n\n  document.querySelectorAll('[data-mega-trigger]').forEach((trigger) => {\n    trigger.addEventListener('click', () => {\n      const item = trigger.closest('.mega-nav__item');\n      if (!item) return;\n      document.querySelectorAll('.mega-nav__item.is-open').forEach((openItem) => {\n        if (openItem !== item) openItem.classList.remove('is-open');\n      });\n      item.classList.toggle('is-open');\n    });\n  });\n\n  document.addEventListener('click', (event) => {\n    if (!event.target.closest('.mega-nav')) {\n      document.querySelectorAll('.mega-nav__item.is-open').forEach((item) => item.classList.remove('is-open'));\n    }\n  });\n\n  document.querySelectorAll('[data-tabs]').forEach((tabs) => {\n    tabs.querySelectorAll('[data-tab-button]').forEach((button) => {\n      button.addEventListener('click', () => {\n        const name = button.dataset.tabButton;\n        tabs.querySelectorAll('[data-tab-button]').forEach((btn) => btn.classList.toggle('is-active', btn === button));\n        tabs.querySelectorAll('[data-tab-panel]').forEach((panel) => {\n          panel.hidden = panel.dataset.tabPanel !== name;\n        });\n      });\n    });\n  });\n\n  document.querySelectorAll('.product-config').forEach((section) => {\n    const main = section.querySelector('.product-gallery-main img');\n    if (!main) return;\n    section.querySelectorAll('.product-gallery-thumbs button').forEach((button) => {\n      button.addEventListener('click', () => {\n        const thumb = button.querySelector('img');\n        if (!thumb) return;\n        const nextSrc = thumb.currentSrc || thumb.src;\n        main.src = nextSrc.replace(/width=\\d+/, 'width=1200');\n        main.srcset = '';\n        main.alt = thumb.alt || main.alt;\n      });\n    });\n  });\n\n  document.querySelectorAll('[data-product-config]').forEach((config) => {\n    const form = config.querySelector('.config-form');\n    if (!form) return;\n    removePreviewImageProperties(form);\n\n    const basePrice = Number(config.dataset.basePrice || 0);\n    const priceDisplay = config.querySelector('[data-price-display]');\n    const summary = config.querySelector('[data-config-summary]');\n    const pricingNote = config.querySelector('[data-pricing-note]');\n    const sizeWidth = config.querySelector('[data-size-width]');\n    const sizeHeight = config.querySelector('[data-size-height]');\n    const sizeUnit = config.querySelector('[data-size-unit]');\n    const conversion = config.querySelector('[data-size-conversion]');\n    const upload = config.querySelector('[data-artwork-file]');\n    const uploadLabel = config.querySelector('[data-upload-label]');\n    const uploadStatus = config.querySelector('[data-upload-status]');\n    const designInput = config.querySelector('[data-design-id-input]');\n    const designStatus = config.querySelector('[data-design-status]');\n    const quotedEstimate = config.querySelector('[data-quoted-estimate]');\n    const pricingSourceProperty = config.querySelector('[data-pricing-source-property]');\n    const quoteConfigScript = form.querySelector('[data-quote-config]');\n    const editorPricingScript = form.querySelector('[data-editor-pricing-rules]');\n    const editorPricingMatrixScript = form.querySelector('[data-editor-pricing-matrix]');\n    const previewConfigScript = form.querySelector('[data-quote-preview-map]');\n    const previewImage = form.querySelector('[data-quote-preview-image]');\n    const previewTitle = form.querySelector('[data-quote-preview-title]');\n    const previewSummary = form.querySelector('[data-quote-preview-summary]');\n    const previewSelectionProperty = form.querySelector('[data-preview-selection-property]');\n    const mainProductImage = config.querySelector('.product-gallery-main img');\n    const dynamicFields = form.querySelector('[data-dynamic-quote-fields]');\n    let quoteConfig = {};\n    let editorPricingRules = [];\n    let editorPricingMatrix = [];\n    let previewConfig = {};\n    const pricingMode = config.dataset.pricingMode || 'request_quote';\n    const editorPricingVerified = config.dataset.editorPricingVerified === 'true';\n    const requestQuoteLabel = config.dataset.requestQuoteLabel || 'Request Custom Quote';\n    const pricingSourceLabel = config.dataset.pricingSource || 'Verified editor pricing table';\n    const requestQuoteNote = config.dataset.requestQuoteNote || '';\n    const verifiedPricingNote = config.dataset.verifiedPricingNote || '';\n\n    try {\n      quoteConfig = JSON.parse(quoteConfigScript?.textContent || '{}') || {};\n    } catch {\n      quoteConfig = {};\n    }\n\n    try {\n      editorPricingRules = JSON.parse(editorPricingScript?.textContent || '[]') || [];\n    } catch {\n      editorPricingRules = [];\n    }\n\n    try {\n      editorPricingMatrix = JSON.parse(editorPricingMatrixScript?.textContent || '[]') || [];\n    } catch {\n      editorPricingMatrix = [];\n    }\n\n    try {\n      previewConfig = JSON.parse(previewConfigScript?.textContent || '{}') || {};\n    } catch {\n      previewConfig = {};\n    }\n\n    const fieldIsActive = (field) => {\n      const wrapper = field.closest('label, .quote-dynamic-field');\n      return !field.disabled && !field.hidden && !wrapper?.hidden;\n    };\n    const quoteField = (name) => {\n      const fields = [...form.querySelectorAll(`[data-quote-field=\"${name}\"]`)];\n      return fields.find(fieldIsActive) || fields[0] || null;\n    };\n    const quoteFields = () => [...form.querySelectorAll('[data-quote-field]')].filter((field) => {\n      return fieldIsActive(field) && field.dataset.quoteSummary !== 'false';\n    });\n\n    const normalizeOption = (option) => {\n      if (typeof option === 'object' && option !== null) {\n        const label = String(option.label ?? option.value ?? '').trim();\n        const value = String(option.value ?? option.label ?? '').trim();\n        return label ? { label, value } : null;\n      }\n      const label = String(option ?? '').trim();\n      return label ? { label, value: label } : null;\n    };\n\n    const labelToKey = (label = '') => String(label)\n      .replace(/&/g, ' and ')\n      .replace(/[^a-z0-9]+/gi, ' ')\n      .trim()\n      .replace(/\\s+([a-z0-9])/gi, (_, char) => char.toUpperCase())\n      .replace(/^[A-Z]/, (char) => char.toLowerCase());\n\n    const propertyNameFor = (field) => String(field.property || field.propertyName || field.label || field.key || 'Quote Option').trim();\n\n    const readableValue = (field) => {\n      if (field.type === 'checkbox') return field.checked ? (field.value || 'Yes') : '';\n      if (field.tagName === 'SELECT') return field.selectedOptions[0]?.textContent?.trim() || field.value;\n      return String(field.value || '').trim();\n    };\n\n    const cleanKeyText = (value) => String(value || '').toLowerCase().replace(/[^a-z0-9]+/g, ' ').trim();\n    const productDefaultPreviewKeys = new Set(['banner', 'largeFormat', 'marketing', 'promotional', 'shrinkSleeve', 'labels']);\n    const fallbackProductImagePattern = /\\/cdn\\/shop\\/t\\/\\d+\\/assets\\/znf-product-die-cut-stickers-main/i;\n\n    const normalizeImageUrl = (url) => {\n      const value = String(url || '').trim();\n      if (!value) return '';\n      try {\n        return new URL(value, window.location.href).toString();\n      } catch {\n        return value;\n      }\n    };\n\n    const imageUrlWithWidth = (url, width) => {\n      const value = normalizeImageUrl(url);\n      if (!value) return '';\n      try {\n        const parsed = new URL(value);\n        parsed.searchParams.set('width', String(width));\n        return parsed.toString();\n      } catch {\n        return value;\n      }\n    };\n\n    const isPackagedDieCutFallback = (url) => fallbackProductImagePattern.test(String(url || ''));\n\n    const fieldValueForKey = (key) => {\n      if (!key || key === 'always') return '';\n      const direct = quoteField(key);\n      if (direct) return readableValue(direct);\n      const normalizedKey = cleanKeyText(key);\n      const found = quoteFields().find((field) => {\n        const quoteKey = cleanKeyText(field.dataset.quoteField);\n        const quoteLabel = cleanKeyText(field.dataset.quoteLabel);\n        const fieldName = cleanKeyText(String(field.name || '').replace(/^properties\\[|\\]$/g, ''));\n        return quoteKey === normalizedKey || quoteLabel === normalizedKey || fieldName === normalizedKey;\n      });\n      return found ? readableValue(found) : '';\n    };\n\n    const dimensionUnitMultiplier = (value) => {\n      const normalized = cleanKeyText(value);\n      if (normalized.includes('mm')) return 1 / 25.4;\n      if (normalized.includes('millimeter')) return 1 / 25.4;\n      if (normalized.includes('cm')) return 1 / 2.54;\n      if (normalized.includes('centimeter')) return 1 / 2.54;\n      if (normalized.includes('ft')) return 12;\n      if (normalized.includes('foot')) return 12;\n      if (normalized.includes('feet')) return 12;\n      return 1;\n    };\n\n    const quoteDimensionsInches = () => {\n      let widthValue = fieldValueForKey('width');\n      let heightValue = fieldValueForKey('height');\n      let width = parseNumber(widthValue);\n      let height = parseNumber(heightValue);\n      let unitSource = `${widthValue} ${heightValue}`;\n\n      if (!width || !height) {\n        const sizeValue = fieldValueForKey('sizes') || fieldValueForKey('size');\n        const sizeMatch = String(sizeValue || '').match(/([0-9]+(?:\\.[0-9]+)?)\\s*(?:x|\u00D7|by)\\s*([0-9]+(?:\\.[0-9]+)?)/i);\n        if (sizeMatch) {\n          width = width || parseNumber(sizeMatch[1]);\n          height = height || parseNumber(sizeMatch[2]);\n          unitSource = sizeValue;\n        }\n      }\n\n      const multiplier = dimensionUnitMultiplier(unitSource);\n      return {\n        widthInches: width > 0 ? width * multiplier : 0,\n        heightInches: height > 0 ? height * multiplier : 0\n      };\n    };\n\n    const hasCustomQuoteValue = () => quoteFields().some((field) => {\n      const value = cleanKeyText(readableValue(field));\n      return value.includes('custom quote') || value.includes('request quote') || value.includes('contact') || value === 'custom';\n    });\n\n    const resolvePreviewKey = () => {\n      const shape = cleanKeyText(getFieldValue(form, 'properties[Shape]'));\n      const material = cleanKeyText(getFieldValue(form, 'properties[Material]'));\n      const media = cleanKeyText(getFieldValue(form, 'properties[Media]'));\n      const title = cleanKeyText(config.querySelector('h1')?.textContent || document.title);\n      const combined = `${shape} ${material} ${media} ${title}`;\n\n      if (/\\b(banner|banners|mesh|flag|retractable|backdrop)\\b/.test(combined)) return 'banner';\n      if (/\\b(canvas|polyester|gator|acrylic|aluminum|coroplast|poster|posters|pvc|foamcore|floor|wall|window cling|window vinyl|window graphic|sign|signs|large format)\\b/.test(combined)) return 'largeFormat';\n      if (/\\b(business card|business cards|brochure|brochures|flyer|flyers|postcard|postcards|door hanger|door hangers|rack card|rack cards|folder|folders|envelope|envelopes|booklet|booklets|bookmark|bookmarks|greeting card|greeting cards|ncr|notepad|notepads)\\b/.test(combined)) return 'marketing';\n      if (/\\b(car magnet|car magnets|promo|promotional|promotion)\\b/.test(combined)) return 'promotional';\n      if (/\\b(shrink sleeve|shrink sleeves)\\b/.test(combined)) return 'shrinkSleeve';\n      if (/\\bvinyl stickers?\\b/.test(title)) return 'vinyl';\n      if (/\\bdie cut stickers?\\b/.test(title) || shape.includes('die cut')) return 'dieCut';\n      if (/\\b(cbd label|mailing label|sample label|label|labels)\\b/.test(combined)) return 'labels';\n      if (combined.includes('roll')) return 'roll';\n      if (combined.includes('sheet') || combined.includes('sample')) return 'sheet';\n      if (combined.includes('circle')) return 'circle';\n      if (combined.includes('oval')) return 'oval';\n      if (combined.includes('rectangle')) return 'rectangle';\n      if (combined.includes('square')) return 'square';\n      if (combined.includes('custom shape')) return 'customShape';\n      if (combined.includes('clear')) return 'clear';\n      if (combined.includes('waterproof') || combined.includes('weatherproof')) return 'waterproof';\n      if (combined.includes('vinyl')) return 'vinyl';\n      if (combined.includes('apparel') || combined.includes('apron') || combined.includes('shirt')) return 'apparel';\n      return 'default';\n    };\n\n    const updatePreview = (selected) => {\n      const key = resolvePreviewKey();\n      let preview = previewConfig[key] || previewConfig.default || {};\n      if (productDefaultPreviewKeys.has(key) && previewConfig.default?.src) preview = previewConfig.default;\n      const src = preview.src || '';\n      const label = preview.label || config.querySelector('h1')?.textContent?.trim() || 'Product preview';\n      const selection = selected?.join(', ') || '';\n      if (previewImage && src) {\n        previewImage.src = src;\n        previewImage.alt = label;\n      }\n      if (mainProductImage && src) {\n        mainProductImage.src = src;\n        mainProductImage.srcset = '';\n        mainProductImage.alt = label;\n      }\n      if (previewTitle) previewTitle.textContent = label;\n      if (previewSummary) previewSummary.textContent = selection || previewSummary.textContent;\n      if (previewSelectionProperty) previewSelectionProperty.value = selection;\n    };\n\n    const repairStaleProductImage = () => {\n      const handle = window.location.pathname.match(/^\\/products\\/([^/?#]+)/)?.[1];\n      if (!handle || !mainProductImage) return;\n      const currentMainSrc = mainProductImage.currentSrc || mainProductImage.src || '';\n      const currentPreviewSrc = previewImage?.currentSrc || previewImage?.src || '';\n      const defaultPreviewSrc = previewConfig.default?.src || '';\n      if (\n        !isPackagedDieCutFallback(currentMainSrc) &&\n        !isPackagedDieCutFallback(currentPreviewSrc) &&\n        !isPackagedDieCutFallback(defaultPreviewSrc)\n      ) return;\n\n      fetch(`/products/${handle}.js`, { credentials: 'same-origin' })\n        .then((response) => (response.ok ? response.json() : null))\n        .then((productJson) => {\n          if (!productJson) return;\n          const productImage = productJson.featured_image || productJson.images?.[0] || '';\n          const imageSrc = normalizeImageUrl(productImage);\n          if (!imageSrc || isPackagedDieCutFallback(imageSrc)) return;\n\n          const label = productJson.title || config.querySelector('h1')?.textContent?.trim() || 'Product preview';\n          const mainSrc = imageUrlWithWidth(imageSrc, 1200);\n          const previewSrc = imageUrlWithWidth(imageSrc, 720);\n          previewConfig.default = { src: previewSrc, label };\n\n          if (isPackagedDieCutFallback(currentMainSrc) || !mainProductImage.src) {\n            mainProductImage.src = mainSrc;\n            mainProductImage.srcset = '';\n            mainProductImage.alt = label;\n          }\n          if (previewImage && (isPackagedDieCutFallback(currentPreviewSrc) || !previewImage.src)) {\n            previewImage.src = previewSrc;\n            previewImage.alt = label;\n          }\n          if (previewTitle && previewTitle.textContent.trim() !== label) previewTitle.textContent = label;\n        })\n        .catch(() => {});\n    };\n\n    const configureQuantityInput = () => {\n      if (quoteConfig.quantityInput !== true && quoteConfig.quantityMode !== 'input') return;\n      const field = quoteField('quantity');\n      if (!field || field.tagName !== 'SELECT') return;\n      const input = document.createElement('input');\n      input.type = 'number';\n      input.name = field.name;\n      input.value = String(quoteConfig.firstQuantity || quoteConfig.defaultQuantity || field.value || '1');\n      input.min = String(quoteConfig.minimum || 1);\n      input.inputMode = 'numeric';\n      input.autocomplete = 'off';\n      input.dataset.quoteField = 'quantity';\n      input.dataset.quoteLabel = field.dataset.quoteLabel || 'Quantity';\n      if (field.hasAttribute('data-print-quantity')) input.setAttribute('data-print-quantity', '');\n      field.replaceWith(input);\n    };\n\n    const setOptions = (fieldName, options) => {\n      const field = quoteField(fieldName);\n      if (!field || !Array.isArray(options)) return;\n      const normalized = options.map(normalizeOption).filter(Boolean);\n      const wrapper = form.querySelector(`[data-quote-optional=\"${fieldName}\"]`);\n      if (!normalized.length) {\n        field.disabled = true;\n        if (wrapper) wrapper.hidden = true;\n        return;\n      }\n      if (field.tagName !== 'SELECT') return;\n      field.disabled = false;\n      if (wrapper) wrapper.hidden = false;\n      field.innerHTML = '';\n      normalized.forEach((option) => {\n        const element = document.createElement('option');\n        element.value = option.value;\n        element.textContent = option.label;\n        field.append(element);\n      });\n    };\n\n    const fieldInputType = (field, options) => {\n      const requested = String(field.type || field.inputType || '').toLowerCase();\n      if (['text', 'number', 'textarea', 'checkbox'].includes(requested)) return requested;\n      return options.length ? 'select' : 'text';\n    };\n\n    const createDynamicField = (field) => {\n      const label = String(field.label || field.name || '').trim();\n      if (!label) return null;\n      const key = String(field.key || field.quoteKey || labelToKey(label)).trim();\n      if (!key || quoteField(key)) return null;\n      const options = Array.isArray(field.options) ? field.options.map(normalizeOption).filter(Boolean) : [];\n      const type = fieldInputType(field, options);\n      const propertyName = propertyNameFor(field);\n      const wrapper = document.createElement('label');\n      wrapper.className = `quote-dynamic-field${field.fullWidth ? ' quote-field--wide' : ''}${type === 'checkbox' ? ' quote-field--checkbox' : ''}`;\n\n      const text = document.createElement('span');\n      text.textContent = label;\n      wrapper.append(text);\n\n      let input;\n      if (type === 'textarea') {\n        input = document.createElement('textarea');\n        input.placeholder = field.placeholder || '';\n        input.value = field.defaultValue || field.value || '';\n      } else if (type === 'select') {\n        input = document.createElement('select');\n        options.forEach((option) => {\n          const element = document.createElement('option');\n          element.value = option.value;\n          element.textContent = option.label;\n          if (field.defaultValue != null && String(field.defaultValue) === option.value) element.selected = true;\n          input.append(element);\n        });\n      } else {\n        input = document.createElement('input');\n        input.type = type;\n        if (type === 'number') input.inputMode = 'decimal';\n        if (type === 'checkbox') {\n          input.value = field.defaultValue || field.value || 'Yes';\n          input.checked = field.checked === true;\n        } else {\n          input.value = field.defaultValue || field.value || '';\n          input.placeholder = field.placeholder || '';\n        }\n      }\n\n      input.name = `properties[${propertyName}]`;\n      input.dataset.quoteField = key;\n      input.dataset.quoteLabel = label;\n      if (field.required) input.required = true;\n      wrapper.append(input);\n\n      if (field.suffix || field.helpText) {\n        const help = document.createElement('small');\n        help.className = 'quote-field__hint';\n        help.textContent = field.helpText || field.suffix;\n        wrapper.append(help);\n      }\n      return wrapper;\n    };\n\n    const renderDynamicFields = () => {\n      if (!dynamicFields) return;\n      const fields = []\n        .concat(Array.isArray(quoteConfig.sizeFields) ? quoteConfig.sizeFields : [])\n        .concat(Array.isArray(quoteConfig.customFields) ? quoteConfig.customFields : []);\n      if (!fields.length) return;\n      dynamicFields.innerHTML = '';\n      fields.map(createDynamicField).filter(Boolean).forEach((field) => dynamicFields.append(field));\n    };\n\n    const applyQuoteConfig = () => {\n      if (!Object.keys(quoteConfig).length) return;\n      const firstPrinting = Array.isArray(quoteConfig.printingOptions) ? quoteConfig.printingOptions[0] : null;\n      configureQuantityInput();\n      setOptions('quantity', quoteConfig.quantityOptions || firstPrinting?.quantities || []);\n      setOptions('sizes', quoteConfig.sizeOptions || []);\n      setOptions('pages', quoteConfig.pagesOptions || []);\n      setOptions('coverType', quoteConfig.coverTypeOptions || []);\n      setOptions('media', quoteConfig.mediaOptions || []);\n      setOptions('shape', quoteConfig.shapeOptions || []);\n      setOptions('material', quoteConfig.materialOptions || []);\n      setOptions('finish', quoteConfig.finishOptions || []);\n      setOptions('turnaround', quoteConfig.turnaroundOptions || []);\n      setOptions('printing', quoteConfig.printingOptions || []);\n      setOptions('printingMethod', quoteConfig.printingMethodOptions || []);\n      renderDynamicFields();\n    };\n\n    const updateSizeConversion = () => {\n      const width = Number(sizeWidth?.value || 2);\n      const height = Number(sizeHeight?.value || 3);\n      const unit = sizeUnit?.value || 'in';\n      if (!conversion) return;\n      if (unit === 'mm') {\n        conversion.textContent = `${width} mm x ${height} mm = ${(width / 25.4).toFixed(2)} in x ${(height / 25.4).toFixed(2)} in`;\n      } else {\n        conversion.textContent = `${width} in x ${height} in = ${(width * 25.4).toFixed(1)} mm x ${(height * 25.4).toFixed(1)} mm`;\n      }\n    };\n\n    const estimate = () => {\n      const quantityRaw = getFieldValue(form, 'properties[Print Quantity]');\n      const media = getFieldValue(form, 'properties[Media]');\n      const printing = getFieldValue(form, 'properties[Printing]');\n      const printingMethod = getFieldValue(form, 'properties[Printing Method]');\n      const size = getFieldValue(form, 'properties[Size]');\n      const pages = getFieldValue(form, 'properties[Pages]');\n      const coverType = getFieldValue(form, 'properties[Cover Type]');\n      const quantity = parseNumber(quantityRaw);\n      let estimated = '';\n      let estimateSource = '';\n\n      const matchesEditorRule = (rule) => {\n        if (!rule || rule.enabled === false) return false;\n        const fieldKey = rule.field === 'custom' ? rule.customField : rule.field;\n        const operator = rule.operator || 'equals';\n        if (fieldKey === 'always' || operator === 'always') return true;\n        const currentValue = fieldValueForKey(fieldKey);\n        const normalizedCurrent = cleanKeyText(currentValue);\n        const normalizedMatch = cleanKeyText(rule.matchValue);\n        if (operator === 'equals') return normalizedCurrent === normalizedMatch;\n        if (operator === 'contains') return normalizedMatch ? normalizedCurrent.includes(normalizedMatch) : false;\n        if (operator === 'not_equals') return normalizedCurrent !== normalizedMatch;\n        if (operator === 'quantity_at_least') return quantity >= parseNumber(rule.minQuantity || rule.matchValue);\n        if (operator === 'quantity_at_most') return quantity <= parseNumber(rule.maxQuantity || rule.matchValue);\n        if (operator === 'quantity_between') {\n          const minimum = parseNumber(rule.minQuantity);\n          const maximum = parseNumber(rule.maxQuantity);\n          return quantity >= minimum && quantity <= maximum;\n        }\n        return false;\n      };\n\n      const matchesText = (fieldKey, expected) => {\n        const value = cleanKeyText(fieldValueForKey(fieldKey));\n        const target = cleanKeyText(expected);\n        return !target || value === target;\n      };\n\n      const matchesMatrixRow = (row) => {\n        if (!row || row.enabled === false) return false;\n        if (parseCents(row.priceCents) <= 0) return false;\n        const rowQuantity = parseNumber(row.quantity);\n        const minimum = parseNumber(row.minQuantity);\n        const maximum = parseNumber(row.maxQuantity);\n        if (rowQuantity > 0 && quantity !== rowQuantity) return false;\n        if (minimum > 0 && quantity < minimum) return false;\n        if (maximum > 0 && quantity > maximum) return false;\n        if (!matchesText('sizes', row.size)) return false;\n        if (!matchesText('shape', row.shape)) return false;\n        if (!matchesText('material', row.material)) return false;\n        if (!matchesText('finish', row.finish)) return false;\n        if (!matchesText('turnaround', row.turnaround)) return false;\n        if (!matchesText('pages', row.pages)) return false;\n        if (!matchesText('coverType', row.coverType)) return false;\n        if (!matchesText('media', row.media)) return false;\n        if (!matchesText('printing', row.printing)) return false;\n        if (!matchesText('printingMethod', row.printingMethod)) return false;\n        if (!matchesText('width', row.width)) return false;\n        if (!matchesText('height', row.height)) return false;\n        if (!matchesText('proof', row.proof)) return false;\n        if (!matchesText('laminate', row.laminate)) return false;\n        if (!matchesText('grommets', row.grommets)) return false;\n        if (!matchesText('polePockets', row.polePockets)) return false;\n        if (!matchesText('hemming', row.hemming)) return false;\n        if (!matchesText('roundedCorners', row.roundedCorners)) return false;\n        if (String(row.customField || '').trim() && !matchesText(row.customField, row.customValue)) return false;\n        return true;\n      };\n\n      const calculateEditorMatrix = () => {\n        if (!editorPricingVerified || !Array.isArray(editorPricingMatrix) || !editorPricingMatrix.length || hasCustomQuoteValue()) return null;\n        const matchedRow = editorPricingMatrix.find(matchesMatrixRow);\n        if (!matchedRow) return null;\n        return {\n          cents: parseCents(matchedRow.priceCents),\n          source: matchedRow.sourceLabel || pricingSourceLabel\n        };\n      };\n\n      const calculateEditorRules = () => {\n        if (!editorPricingVerified || !Array.isArray(editorPricingRules) || !editorPricingRules.length || hasCustomQuoteValue()) return null;\n        let total = parseCents(basePrice);\n        let matched = false;\n        editorPricingRules.forEach((rule) => {\n          if (!matchesEditorRule(rule)) return;\n          matched = true;\n          const amount = parseCents(rule.amountCents);\n          const percentage = parseNumber(rule.percentage);\n          const multiplier = parseNumber(rule.multiplier);\n          if (rule.calculation === 'set_total') {\n            total = amount;\n          } else if (rule.calculation === 'set_per_unit') {\n            total = amount * Math.max(quantity, 1);\n          } else if (rule.calculation === 'add_per_unit') {\n            total += amount * quantity;\n          } else if (rule.calculation === 'set_per_square_foot' || rule.calculation === 'add_per_square_foot') {\n            const dimensions = quoteDimensionsInches();\n            const squareFeet = (dimensions.widthInches * dimensions.heightInches) / 144;\n            const areaTotal = Math.round(amount * squareFeet * Math.max(quantity, 1));\n            if (rule.calculation === 'set_per_square_foot') {\n              total = areaTotal;\n            } else {\n              total += areaTotal;\n            }\n          } else if (rule.calculation === 'set_per_square_inch' || rule.calculation === 'add_per_square_inch') {\n            const dimensions = quoteDimensionsInches();\n            const squareInches = dimensions.widthInches * dimensions.heightInches;\n            const areaTotal = Math.round(amount * squareInches * Math.max(quantity, 1));\n            if (rule.calculation === 'set_per_square_inch') {\n              total = areaTotal;\n            } else {\n              total += areaTotal;\n            }\n          } else if (rule.calculation === 'add_percent') {\n            total += Math.round(total * (percentage / 100));\n          } else if (rule.calculation === 'multiply') {\n            total = Math.round(total * (multiplier || 1));\n          } else {\n            total += amount;\n          }\n        });\n        return matched || basePrice > 0 ? Math.max(0, total) : null;\n      };\n\n      const calculateVerifiedJson = () => {\n        if (hasCustomQuoteValue()) return null;\n        const printingOptions = Array.isArray(quoteConfig.printingOptions) ? quoteConfig.printingOptions : [];\n        const table = printingOptions.find((option) => option.value === printing || option.label === printing) || printingOptions[0];\n        if (quoteConfig.pricingVerified !== true || !table || !Array.isArray(table.quantities) || !Array.isArray(table.prices)) return null;\n        let priceIndex = table.quantities.findIndex((tableQuantity) => Number(tableQuantity) === quantity);\n        if (priceIndex < 0) priceIndex = quoteField('quantity')?.selectedIndex ?? 0;\n        const tablePrice = table.prices[priceIndex];\n        return tablePrice == null ? null : Math.round(Number(tablePrice) * 100);\n      };\n\n      let calculatedCents = null;\n      const matrixResult = pricingMode === 'editor_rules' || pricingMode === 'editor_rules_then_json'\n        ? calculateEditorMatrix()\n        : null;\n      if (matrixResult) {\n        calculatedCents = matrixResult.cents;\n        estimateSource = matrixResult.source;\n      }\n      if (pricingMode === 'editor_rules' || pricingMode === 'editor_rules_then_json') {\n        if (calculatedCents == null) calculatedCents = calculateEditorRules();\n        if (calculatedCents != null && !estimateSource) estimateSource = pricingSourceLabel;\n      }\n      if (calculatedCents == null && (pricingMode === 'verified_json' || pricingMode === 'editor_rules_then_json')) {\n        calculatedCents = calculateVerifiedJson();\n        if (calculatedCents != null) estimateSource = quoteConfig.pricingSource || 'Verified quote table';\n      }\n\n      estimated = calculatedCents == null ? requestQuoteLabel : money(calculatedCents);\n      if (priceDisplay) priceDisplay.textContent = estimated;\n      if (quotedEstimate) quotedEstimate.value = estimated;\n      if (pricingSourceProperty) pricingSourceProperty.value = estimateSource || 'Unverified or missing pricing source';\n      if (pricingNote) {\n        const note = calculatedCents == null ? requestQuoteNote : (estimateSource || verifiedPricingNote);\n        pricingNote.textContent = note;\n        pricingNote.hidden = !note;\n      }\n\n      const selected = quoteFields().map((field) => {\n        const value = readableValue(field);\n        if (!value) return '';\n        const label = field.dataset.quoteLabel || field.name?.replace(/^properties\\[|\\]$/g, '') || '';\n        if (field.dataset.quoteField === 'quantity') return `${value} qty`;\n        return label ? `${label}: ${value}` : value;\n      }).filter(Boolean);\n      if (summary) summary.textContent = selected.join(', ');\n      updatePreview(selected);\n      updateSizeConversion();\n    };\n\n    applyQuoteConfig();\n    form.addEventListener('change', estimate);\n    form.addEventListener('input', estimate);\n    estimate();\n    repairStaleProductImage();\n\n    upload?.addEventListener('change', () => {\n      const file = upload.files?.[0];\n      if (file) {\n        if (uploadLabel) uploadLabel.textContent = file.name;\n        if (uploadStatus) uploadStatus.value = `Uploaded: ${file.name}`;\n      } else {\n        if (uploadLabel) uploadLabel.textContent = 'PDF, AI, EPS, SVG, PNG, or JPG';\n        if (uploadStatus) uploadStatus.value = 'No file uploaded';\n      }\n    });\n\n    const modal = document.querySelector('[data-design-modal]');\n    const frame = modal?.querySelector('[data-design-tool-frame]');\n    const launch = config.querySelector('[data-design-tool-launch]');\n    const close = modal?.querySelector('[data-design-modal-close]');\n\n    launch?.addEventListener('click', () => {\n      const toolUrl = normalizeDesignToolUrl(launch.dataset.designToolUrl);\n      if (toolUrl === DESIGN_TOOL_URL) {\n        window.location.href = toolUrl;\n        return;\n      }\n      if (!modal || !frame) return;\n      const productTitle = encodeURIComponent(document.querySelector('h1')?.textContent?.trim() || 'Zooniform product');\n      frame.src = `${toolUrl}${toolUrl.includes('?') ? '&' : '?'}embed=shopify&product=${productTitle}`;\n      modal.hidden = false;\n      document.body.classList.add('modal-open');\n    });\n\n    close?.addEventListener('click', () => {\n      if (!modal) return;\n      modal.hidden = true;\n      document.body.classList.remove('modal-open');\n    });\n\n    window.addEventListener('message', (event) => {\n      const data = event.data || {};\n      if (data.type !== 'ZOONIFORM_DESIGN_SAVED') return;\n      if (designInput) designInput.value = data.designId || '';\n      if (designStatus) designStatus.textContent = data.designId ? `Online design saved: ${data.designId}` : 'Online design saved.';\n      if (modal) modal.hidden = true;\n      document.body.classList.remove('modal-open');\n    });\n  });\n\n  document.querySelectorAll('[data-home-quote]').forEach((panel) => {\n    const productSelect = panel.querySelector('[data-home-quote-product]');\n    const productScript = panel.querySelector('[data-home-quote-products]');\n    const estimate = panel.querySelector('[data-home-quote-estimate]');\n    const unitPrice = panel.querySelector('[data-home-quote-unit-price]');\n    const note = panel.querySelector('[data-home-quote-note]');\n    const quoteButton = panel.querySelector('[data-home-quote-button]');\n    const defaultQuoteUrl = panel.dataset.quoteUrl || '/pages/request-a-quote';\n    const requestQuoteValue = panel.dataset.requestQuoteValue || 'Request Custom Quote';\n    let products = [];\n\n    try {\n      products = JSON.parse(productScript?.textContent || '[]') || [];\n    } catch (error) {\n      products = [];\n    }\n    if (!productSelect || !products.length) return;\n\n    const splitLines = (value) => String(value || '')\n      .split(/\\r?\\n|;/)\n      .map((line) => line.trim())\n      .filter(Boolean)\n      .map((line) => {\n        return { label: line, value: line };\n      });\n\n    const parseUnitTiers = (value) => String(value || '')\n      .split(/\\r?\\n|;/)\n      .map((line) => line.trim())\n      .filter(Boolean)\n      .map((line) => {\n        const parts = line.split(/[=:|]/);\n        const quantity = parseNumber(parts[0]);\n        const unitCents = Math.round(parseNumber(parts[1]) * 100);\n        return quantity > 0 && unitCents > 0 ? { quantity, unitCents } : null;\n      })\n      .filter(Boolean)\n      .sort((a, b) => a.quantity - b.quantity);\n\n    const activeProduct = () => products.find((product) => product.id === productSelect.value) || products[0];\n\n    const fieldForKey = (key) => {\n      const wrapper = panel.querySelector(`[data-home-quote-field=\"${key}\"]`);\n      const label = wrapper?.querySelector('[data-home-quote-field-label]');\n      const select = wrapper?.querySelector('select');\n      return { wrapper, label, select };\n    };\n\n    const selectedQuantity = () => {\n      const quantityField = fieldForKey('quantity').select;\n      return Math.max(parseNumber(quantityField?.value), 1);\n    };\n\n    const tierForQuantity = (tiers, quantity) => {\n      if (!Array.isArray(tiers) || !tiers.length) return null;\n      const exact = tiers.find((tier) => tier.quantity === quantity);\n      if (exact) return exact;\n      return tiers.filter((tier) => tier.quantity <= quantity).pop() || tiers[0];\n    };\n\n    const setFieldOptions = (key, fieldConfig) => {\n      const field = fieldForKey(key);\n      if (!field.wrapper || !field.select) return;\n      const options = splitLines(fieldConfig?.options);\n      field.wrapper.hidden = !options.length;\n      if (field.label) field.label.textContent = fieldConfig?.label || key;\n      field.select.innerHTML = '';\n      options.forEach((item) => {\n        const option = document.createElement('option');\n        option.value = item.value;\n        option.textContent = item.label;\n        field.select.append(option);\n      });\n    };\n\n    const updateEstimate = () => {\n      const product = activeProduct();\n      const quantity = selectedQuantity();\n      const tiers = parseUnitTiers(product.unitPriceTiers);\n      const matchedTier = product.pricingVerified ? tierForQuantity(tiers, quantity) : null;\n      const productUrl = product.url || defaultQuoteUrl;\n      if (quoteButton) quoteButton.setAttribute('href', productUrl.startsWith('/') || productUrl.startsWith('http') ? productUrl : defaultQuoteUrl);\n      if (matchedTier) {\n        const total = matchedTier.unitCents * quantity;\n        if (estimate) estimate.textContent = money(total);\n        if (unitPrice) {\n          unitPrice.textContent = `${money(matchedTier.unitCents)} / ea`;\n          unitPrice.hidden = false;\n        }\n        if (note) {\n          note.textContent = product.pricingSource || 'Verified editor pricing table';\n          note.hidden = false;\n        }\n      } else {\n        if (estimate) estimate.textContent = product.requestQuoteValue || requestQuoteValue;\n        if (unitPrice) unitPrice.hidden = true;\n        if (note) {\n          note.textContent = product.requestQuoteNote || 'Final pricing is confirmed before production.';\n          note.hidden = false;\n        }\n      }\n    };\n\n    const updateProductFields = () => {\n      const product = activeProduct();\n      Object.entries(product.fields || {}).forEach(([key, fieldConfig]) => {\n        setFieldOptions(key, fieldConfig);\n      });\n      updateEstimate();\n    };\n\n    products.forEach((product, index) => {\n      const option = document.createElement('option');\n      option.value = product.id || String(index);\n      option.textContent = product.title || `Product ${index + 1}`;\n      product.id = option.value;\n      productSelect.append(option);\n    });\n\n    productSelect.addEventListener('change', updateProductFields);\n    panel.querySelectorAll('[data-home-quote-field] select').forEach((select) => {\n      select.addEventListener('change', updateEstimate);\n    });\n    updateProductFields();\n  });\n})();\n\n/* Zooniform verified label pricing \u2014 detailed_label_pricing_en_fixed (2).xlsx */\n(() => {\n  const LABEL_HANDLES = new Set([\n    'sample-label',\n    'mailing-label',\n    'cbd-label',\n    'die-cut-stickers',\n  ]);\n  const handle = window.location.pathname.match(/^\\/products\\/([^/?#]+)/)?.[1];\n  if (!LABEL_HANDLES.has(handle)) return;\n\n  const SIZES = [2, 3, 4, 5, 6, 7, 8, 9, 10];\n  const QUANTITIES = [10, 50, 100, 150, 200, 300, 500, 700, 1000];\n  const FINISHES = [\n    { value: 'None', label: 'NON COATING', index: 0 },\n    { value: 'Gloss', label: 'Glossy Lamination', index: 1 },\n    { value: 'Matte', label: 'Matte Lamination', index: 2 },\n  ];\n  const PRICE_CENTS = {\n    2: { 10: [3000, 3035, 3075], 50: [4000, 4105, 4225], 100: [5000, 5175, 5375], 150: [6000, 6245, 6525], 200: [7000, 7315, 7675], 300: [7700, 8155, 8675], 500: [9850, 10585, 11425], 700: [11550, 12600, 13800], 1000: [13860, 15330, 17010] },\n    3: { 10: [3000, 3035, 3075], 50: [5000, 5175, 5375], 100: [7000, 7315, 7675], 150: [7700, 8155, 8675], 200: [9300, 9895, 10575], 300: [11250, 12125, 13125], 500: [13860, 15330, 17010], 700: [17848, 19912, 22272], 1000: [25410, 28350, 31710] },\n    4: { 10: [3500, 3570, 3650], 50: [7000, 7315, 7675], 100: [9300, 9895, 10575], 150: [11250, 12125, 13125], 200: [13090, 14280, 15640], 300: [16500, 18250, 20250], 500: [25410, 28350, 31710], 700: [32175, 36270, 40950], 1000: [45925, 51770, 58450] },\n    5: { 10: [3500, 3570, 3650], 50: [7000, 7315, 7675], 100: [9300, 9895, 10575], 150: [11250, 12125, 13125], 200: [13090, 14280, 15640], 300: [16500, 18250, 20250], 500: [25410, 28350, 31710], 700: [32175, 36270, 40950], 1000: [45925, 51770, 58450] },\n    6: { 10: [5000, 5175, 5375], 50: [11250, 12125, 13125], 100: [16500, 18250, 20250], 150: [22688, 25312, 28312], 200: [30250, 33750, 37750], 300: [41250, 46500, 52500], 500: [61875, 70625, 80625], 700: [86625, 98875, 112875], 1000: [123750, 141250, 161250] },\n    7: { 10: [5000, 5175, 5375], 50: [11250, 12125, 13125], 100: [16500, 18250, 20250], 150: [22688, 25312, 28312], 200: [30250, 33750, 37750], 300: [41250, 46500, 52500], 500: [61875, 70625, 80625], 700: [86625, 98875, 112875], 1000: [123750, 141250, 161250] },\n    8: { 10: [5000, 5175, 5375], 50: [11250, 12125, 13125], 100: [16500, 18250, 20250], 150: [22688, 25312, 28312], 200: [30250, 33750, 37750], 300: [41250, 46500, 52500], 500: [61875, 70625, 80625], 700: [86625, 98875, 112875], 1000: [123750, 141250, 161250] },\n    9: { 10: [7500, 7850, 8250], 50: [16500, 18250, 20250], 100: [30250, 33750, 37750], 150: [41250, 46500, 52500], 200: [55000, 62000, 70000], 300: [74250, 84750, 96750], 500: [123750, 141250, 161250], 700: [154000, 178500, 206500], 1000: [220000, 255000, 295000] },\n    10: { 10: [7500, 7850, 8250], 50: [16500, 18250, 20250], 100: [30250, 33750, 37750], 150: [41250, 46500, 52500], 200: [55000, 62000, 70000], 300: [74250, 84750, 96750], 500: [123750, 141250, 161250], 700: [154000, 178500, 206500], 1000: [220000, 255000, 295000] },\n  };\n  const SOURCE = 'Verified label pricing matrix';\n  const money = (cents) => new Intl.NumberFormat('en-US', {\n    style: 'currency',\n    currency: 'USD',\n  }).format(cents / 100);\n  const setSelectOptions = (select, items, selectedValue) => {\n    select.innerHTML = '';\n    items.forEach((item) => {\n      const option = document.createElement('option');\n      option.value = String(item.value ?? item);\n      option.textContent = String(item.label ?? item);\n      option.selected = String(option.value) === String(selectedValue);\n      select.append(option);\n    });\n  };\n  const ensureSelect = (field) => {\n    if (field.tagName === 'SELECT') return field;\n    const select = document.createElement('select');\n    select.name = field.name;\n    Object.assign(select.dataset, field.dataset);\n    field.replaceWith(select);\n    return select;\n  };\n  const createFinishField = (form) => {\n    const wrapper = document.createElement('label');\n    wrapper.className = 'quote-dynamic-field';\n    const label = document.createElement('span');\n    label.textContent = 'Laminate';\n    const select = document.createElement('select');\n    select.name = 'properties[Laminate]';\n    select.dataset.quoteField = 'laminate';\n    select.dataset.quoteLabel = 'Laminate';\n    wrapper.append(label, select);\n    const dynamicFields = form.querySelector('[data-dynamic-quote-fields]');\n    (dynamicFields || form).append(wrapper);\n    return select;\n  };\n\n  document.querySelectorAll('[data-product-config]').forEach((config) => {\n    const form = config.querySelector('.config-form');\n    let width = form?.querySelector('[data-quote-field=\"width\"]');\n    let height = form?.querySelector('[data-quote-field=\"height\"]');\n    let laminate = form?.querySelector('[data-quote-field=\"laminate\"]');\n    let quantity = form?.querySelector('[data-quote-field=\"quantity\"]');\n    if (!form || !width || !height || !quantity) return;\n\n    quantity = ensureSelect(quantity);\n    width = ensureSelect(width);\n    height = ensureSelect(height);\n    laminate = laminate ? ensureSelect(laminate) : createFinishField(form);\n    setSelectOptions(quantity, QUANTITIES, 10);\n    setSelectOptions(width, SIZES.map((size) => ({ value: size, label: `${size}\\\"` })), 2);\n    setSelectOptions(height, SIZES.map((size) => ({ value: size, label: `${size}\\\"` })), 2);\n    setSelectOptions(laminate, FINISHES, 'None');\n\n    width.dataset.quoteLabel = 'Size';\n    const widthWrapper = width.closest('label, .quote-dynamic-field');\n    const widthLabel = widthWrapper?.querySelector('span');\n    if (widthLabel) widthLabel.textContent = 'Size';\n    const heightWrapper = height.closest('label, .quote-dynamic-field');\n    if (heightWrapper) heightWrapper.hidden = true;\n    config.dataset.labelPricingMatrix = 'verified';\n\n    const updateLabelEstimate = () => {\n      height.value = width.value;\n      const size = Number(width.value);\n      const qty = Number(quantity.value);\n      const finish = FINISHES.find((item) => item.value === laminate.value);\n      const cents = finish ? PRICE_CENTS[size]?.[qty]?.[finish.index] : null;\n      const price = cents == null ? 'Request Custom Quote' : money(cents);\n      const priceDisplay = config.querySelector('[data-price-display]');\n      const quotedEstimate = config.querySelector('[data-quoted-estimate]');\n      const pricingSource = config.querySelector('[data-pricing-source-property]');\n      const pricingNote = config.querySelector('[data-pricing-note]');\n      if (priceDisplay) priceDisplay.textContent = price;\n      if (quotedEstimate) quotedEstimate.value = price;\n      if (pricingSource) pricingSource.value = cents == null ? 'Missing label pricing combination' : SOURCE;\n      if (pricingNote) {\n        pricingNote.textContent = cents == null ? 'Choose a listed size, quantity, and finish.' : SOURCE;\n        pricingNote.hidden = false;\n      }\n    };\n\n    form.addEventListener('change', updateLabelEstimate);\n    form.addEventListener('input', updateLabelEstimate);\n    form.dispatchEvent(new Event('change', { bubbles: true }));\n  });\n})();\n\n(() => {\n  if (!window.location.pathname.startsWith('/collections/')) return;\n\n  document.querySelectorAll('main a[href]').forEach((link) => {\n    const href = link.getAttribute('href');\n    const normalizedHref = href?.trim();\n    if (normalizedHref?.startsWith('/') && normalizedHref !== href) {\n      link.setAttribute('href', normalizedHref);\n    }\n  });\n\n  document.querySelectorAll('main article').forEach((card) => {\n    const productLink = card.querySelector('a[href*=\"/products/\"]');\n    if (!productLink || card.dataset.productCardLinked === 'true') return;\n\n    const productUrl = productLink.getAttribute('href')?.trim();\n    if (!productUrl) return;\n\n    card.dataset.productCardLinked = 'true';\n    card.style.cursor = 'pointer';\n    card.addEventListener('click', (event) => {\n      if (event.target.closest('a, button, input, select, textarea, label')) return;\n      window.location.assign(productUrl);\n    });\n  });\n})();\n"],
  "mappings": "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",
  "names": ["label"]
}
