{
  "version": 3,
  "sources": ["/cdn/shop/t/262/assets/swish-court-builder-contact.js?swishcb=20260830-1"],
  "sourcesContent": ["(function () {\n  try { window.__swishcbContactLoaded = true; } catch (_) {}\n  const HAS_DOM = typeof window !== 'undefined' && typeof document !== 'undefined';\n  const MAX_PREVIEW_BYTES = 250 * 1024;\n  const MAX_PREVIEW_DATA_CHARS = 60000;\n  const MAX_CONTACT_BODY_CHARS = 3500;\n  const MAX_CONTACT_SUMMARY_CHARS = 1500;\n  const MAX_CONTACT_DETAILS_CHARS = 12000;\n  const MAX_CONTACT_CONFIG_CHARS = MAX_CONTACT_DETAILS_CHARS;\n  const MAX_CONTACT_PAGE_URL_CHARS = 300;\n  const MAX_CONTACT_SHARE_URL_CHARS = 6000;\n  const MAX_CONTACT_UPLOAD_FIELD_CHARS = 6000;\n  const MAX_LOGO_FILE_BYTES = 3 * 1024 * 1024;\n  const MAX_TOTAL_LOGO_BYTES = 8 * 1024 * 1024;\n  const MAX_TOTAL_ATTACHMENT_BYTES = 10 * 1024 * 1024;\n  const MAX_SHARE_IMAGE_BYTES = 4 * 1024 * 1024;\n\n  function shouldGeneratePreviewData(opts) {\n    return !(opts && opts.previewAttached);\n  }\n\n  function getRoot() {\n    return document.getElementById('swish-court-builder');\n  }\n\n  function getContactForm(root) {\n    if (!root) return null;\n    return root.querySelector('#SwishContactPanel');\n  }\n\n  function getApi() {\n    return (typeof window !== 'undefined' && window.SwishCourtBuilder) ? window.SwishCourtBuilder : null;\n  }\n\n  function waitForApi(timeoutMs) {\n    const start = Date.now();\n    return new Promise((resolve) => {\n      const tick = () => {\n        const api = getApi();\n        if (api && typeof api.getContactPayload === 'function') return resolve(api);\n        if (Date.now() - start > timeoutMs) return resolve(null);\n        setTimeout(tick, 100);\n      };\n      tick();\n    });\n  }\n\n  function nowMs() {\n    if (typeof performance !== 'undefined' && typeof performance.now === 'function') {\n      return performance.now();\n    }\n    return Date.now();\n  }\n\n  function createDebugSession() {\n    const startedAt = nowMs();\n    return {\n      startedAtIso: (new Date()).toISOString(),\n      marks: [],\n      mark(label, extra) {\n        const elapsedMs = Math.round((nowMs() - startedAt) * 100) / 100;\n        this.marks.push({\n          label,\n          elapsedMs,\n          extra: extra || null\n        });\n      }\n    };\n  }\n\n  function publishDebugSession(session, result, error) {\n    if (!session) return;\n\n    const payload = {\n      startedAt: session.startedAtIso,\n      marks: Array.isArray(session.marks) ? session.marks.slice() : [],\n      result: result || null,\n      error: error ? String((error && error.message) || error) : null\n    };\n\n    try {\n      window.__swishcbContactLastSubmission = payload;\n    } catch (_) {}\n\n  }\n\n  function getSubmitButton(form) {\n    if (!form) return null;\n    return form.querySelector('[data-swishcb-contact-submit], button[type=\"submit\"], input[type=\"submit\"]');\n  }\n\n  function getSubmitLabel(form) {\n    if (!form) return null;\n    return form.querySelector('[data-swishcb-contact-submit-label]');\n  }\n\n  function getStatusBox(form) {\n    if (!form) return null;\n    return form.querySelector('[data-swishcb-contact-status]');\n  }\n\n  function setStatusMessage(form, message, isError) {\n    const box = getStatusBox(form);\n    if (!box) return;\n\n    const rawText = message == null ? '' : String(message);\n    const text = rawText && !isError && !/^Thanks\\./i.test(rawText) ? 'Loading' : rawText;\n    box.hidden = !text;\n    box.textContent = text;\n    box.dataset.state = isError ? 'error' : 'info';\n    box.setAttribute('role', isError ? 'alert' : 'status');\n  }\n\n  function clearStatusMessage(form) {\n    setStatusMessage(form, '', false);\n  }\n\n  function publishContactSuccess(form, root, submitResult) {\n    const builderRoot = root || getRoot();\n    const contactPanel = form && form.closest\n      ? form.closest('[data-swishcb-contact-panel]')\n      : null;\n    const detail = {\n      root: builderRoot || null,\n      form: form || null,\n      submitResult: submitResult || null,\n      confirmed: true\n    };\n\n    if (builderRoot) builderRoot.dataset.swishcbContactCompleted = 'true';\n    if (contactPanel) contactPanel.dataset.swishcbContactCompleted = 'true';\n\n    try {\n      if (builderRoot) {\n        builderRoot.dispatchEvent(new CustomEvent('swish:contact-submitted', {\n          bubbles: true,\n          detail\n        }));\n      }\n    } catch (_) {}\n    try {\n      window.dispatchEvent(new CustomEvent('swish:contact-submitted', { detail }));\n    } catch (_) {}\n  }\n\n  function publishContactSubmissionStarted(form, root) {\n    const builderRoot = root || getRoot();\n    const detail = { root: builderRoot || null, form: form || null, pending: true };\n    try {\n      if (builderRoot) {\n        builderRoot.dispatchEvent(new CustomEvent('swish:contact-submission-started', {\n          bubbles: true,\n          detail\n        }));\n      }\n    } catch (_) {}\n  }\n\n  function publishContactSubmissionFailed(form, root, error) {\n    const builderRoot = root || getRoot();\n    const detail = {\n      root: builderRoot || null,\n      form: form || null,\n      error: error ? String((error && error.message) || error) : ''\n    };\n    try {\n      if (builderRoot) {\n        builderRoot.dispatchEvent(new CustomEvent('swish:contact-submission-failed', {\n          bubbles: true,\n          detail\n        }));\n      }\n    } catch (_) {}\n  }\n\n  function setSubmittingState(form, isSubmitting) {\n    const button = getSubmitButton(form);\n    if (!button) return;\n\n    form.setAttribute('aria-busy', isSubmitting ? 'true' : 'false');\n    button.disabled = !!isSubmitting;\n\n    const label = getSubmitLabel(form);\n    if (label) {\n      if (!button.dataset.swishcbDefaultLabel) {\n        button.dataset.swishcbDefaultLabel = label.textContent || 'Send Message';\n      }\n      label.textContent = isSubmitting ? 'Loading' : button.dataset.swishcbDefaultLabel;\n      return;\n    }\n\n    if (button.tagName === 'INPUT') {\n      if (!button.dataset.swishcbDefaultLabel) {\n        button.dataset.swishcbDefaultLabel = button.value || 'Send Message';\n      }\n      button.value = isSubmitting ? 'Loading' : button.dataset.swishcbDefaultLabel;\n      return;\n    }\n\n    if (!button.dataset.swishcbDefaultLabel) {\n      button.dataset.swishcbDefaultLabel = button.textContent || 'Send Message';\n    }\n    button.textContent = isSubmitting ? 'Loading' : button.dataset.swishcbDefaultLabel;\n  }\n\n  function ensureField(form, selector, fallbackTag, attrs) {\n    let field = form.querySelector(selector);\n    if (field) return field;\n    const el = document.createElement(fallbackTag || 'input');\n    if (attrs) {\n      Object.keys(attrs).forEach((key) => el.setAttribute(key, attrs[key]));\n    }\n    form.appendChild(el);\n    return el;\n  }\n\n  function setFieldValue(field, value) {\n    if (!field) return;\n    field.value = value == null ? '' : String(value);\n  }\n\n  function setFieldSubmissionValue(field, value) {\n    const text = value == null ? '' : String(value);\n    setFieldValue(field, text);\n    if (field) field.disabled = !text;\n    return text;\n  }\n\n  function ensureHiddenTextarea(form, selector, attrs) {\n    const field = ensureField(form, selector, 'textarea', attrs);\n    field.hidden = true;\n    return field;\n  }\n\n  function resetGeneratedField(field) {\n    if (!field) return;\n    field.hidden = true;\n    field.disabled = true;\n    setFieldValue(field, '');\n  }\n\n  function isContactTestMode() {\n    if (typeof window === 'undefined') return false;\n    if (window.__SWISHCB_TEST__) return true;\n    try {\n      return String(new URLSearchParams(window.location.search || '').get('swishcb_test') || '') === '1';\n    } catch (_) {\n      return false;\n    }\n  }\n\n  function clearFileInput(input) {\n    if (!input) return;\n    try {\n      input.value = '';\n    } catch (_) {}\n    input.disabled = true;\n  }\n\n  function buildContactReturnToValue() {\n    if (typeof window === 'undefined' || !window.location) return 'back';\n\n    const path = window.location.pathname || '/';\n    const search = window.location.search || '';\n    const hash = window.location.hash || '#SwishContactPanel';\n    return `${path}${search}${hash}`;\n  }\n\n  function ensureReturnToField(form) {\n    if (!form) return null;\n\n    let field = form.querySelector('input[name=\"return_to\"]');\n    if (!field) {\n      field = document.createElement('input');\n      field.type = 'hidden';\n      field.name = 'return_to';\n      field.id = 'swishcb-contact-return-to';\n      form.appendChild(field);\n    }\n\n    field.disabled = false;\n    field.value = buildContactReturnToValue();\n    return field;\n  }\n\n  function prepareNativeContactPost(form) {\n    if (!form) return;\n\n    ensureReturnToField(form);\n    form.setAttribute('method', 'post');\n    form.removeAttribute('data-shopify-captcha');\n    form.removeAttribute('enctype');\n    try { form.enctype = 'application/x-www-form-urlencoded'; } catch (_) {}\n\n    const submitButton = getSubmitButton(form);\n    if (submitButton) {\n      submitButton.removeAttribute('formaction');\n      submitButton.removeAttribute('formenctype');\n      submitButton.removeAttribute('formmethod');\n    }\n\n    clearFileInput(form.querySelector('#swishcb-contact-preview-file'));\n    clearFileInput(form.querySelector('#swishcb-contact-logo-files'));\n  }\n\n  function normalizeValue(value, fallback) {\n    const text = value == null ? '' : String(value);\n    const trimmed = text.trim();\n    return trimmed ? trimmed : (fallback || '-');\n  }\n\n  function readFormValue(form, selector) {\n    if (!form) return '';\n    const el = form.querySelector(selector);\n    if (!el || !('value' in el)) return '';\n    return String(el.value || '');\n  }\n\n  function readFormCheckbox(form, selector) {\n    if (!form) return false;\n    const el = form.querySelector(selector);\n    return !!(el && el.checked);\n  }\n\n  function safeNumber(value) {\n    const n = Number(value);\n    return Number.isFinite(n) ? n : null;\n  }\n\n  function getContactUnits(form) {\n    const radio = form ? form.querySelector('input[name=\"swishcb-contact-units\"]:checked') : null;\n    return radio ? radio.value : null;\n  }\n\n  function getBuilderUnits(root) {\n    const radio = root ? root.querySelector('input[name=\"swishcb-units\"]:checked') : null;\n    return radio ? radio.value : null;\n  }\n\n  function getUnitFromConfig(config) {\n    if (!config || typeof config !== 'object') return null;\n    const u = String(config.units || '').toLowerCase();\n    return (u === 'ft' || u === 'm') ? u : null;\n  }\n\n  function buildPayload(api, form, root) {\n    const builderRoot = root || getRoot();\n    const payload = api && typeof api.getContactPayload === 'function'\n      ? api.getContactPayload()\n      : {};\n\n    const configField = form ? form.querySelector('#swishcb-contact-config') : null;\n    const configRaw = configField ? String(configField.value || '') : '';\n    let config = null;\n    try { config = configRaw ? JSON.parse(configRaw) : null; } catch (_) { config = null; }\n\n    payload.configRaw = payload.configRaw || configRaw;\n    payload.config = payload.config || config;\n    payload.timestamp = payload.timestamp || (new Date()).toISOString();\n\n    const fallbackUrl = (typeof window !== 'undefined' && window.location) ? window.location.href : '';\n    payload.pageUrl = payload.pageUrl || fallbackUrl;\n    payload.shareUrl = payload.shareUrl || payload.pageUrl || fallbackUrl;\n\n    payload.units = payload.units || getUnitFromConfig(config) || getContactUnits(form) || getBuilderUnits(builderRoot) || 'm';\n    payload.lengthM = (payload.lengthM != null) ? payload.lengthM : safeNumber(config && config.length);\n    payload.widthM = (payload.widthM != null) ? payload.widthM : safeNumber(config && config.width);\n    payload.rotation = (payload.rotation != null) ? payload.rotation : safeNumber(config && config.rotation);\n    payload.ruleset = payload.ruleset || (config && config.ruleset) || null;\n    payload.colors = payload.colors || (config && config.colors) || null;\n    payload.detailColors = payload.detailColors || (config && config.detailColors) || null;\n    payload.hiddenDetails = payload.hiddenDetails || (config && config.hiddenDetails) || [];\n    payload.detailVisibility = payload.detailVisibility || (config && config.detailVisibility) || null;\n    payload.extraSports = payload.extraSports || (config && config.extras) || null;\n    payload.texts = payload.texts || (config && Array.isArray(config.texts) ? config.texts : []);\n    if (!payload.view && config && config.view3d) {\n      payload.view = {\n        mode: null,\n        zoom: Number.isFinite(config.view3d.zoom) ? config.view3d.zoom : null,\n        autoRotate: !!config.view3d.autoRotate\n      };\n    }\n\n    if (!payload.hoopsMode) {\n      payload.hoopsMode = readHoopsModeFromDom(builderRoot);\n    }\n    if (!payload.hoopSelection) {\n      payload.hoopSelection = readHoopSelectionFromDom(builderRoot);\n    }\n    if (!payload.borderSelection) {\n      payload.borderSelection = readBorderSelectionFromDom(builderRoot, payload.hoopSelection);\n    }\n    if (!payload.hoopOverhangsM || !['left', 'right', 'top', 'bottom'].some((side) => Number.isFinite(payload.hoopOverhangsM[side]))) {\n      const overhangs = readOverhangsFromDom(builderRoot, payload.units);\n      if (overhangs) payload.hoopOverhangsM = overhangs;\n    }\n\n    return payload;\n  }\n\n  function buildPrimePayload(form, root) {\n    try {\n      return buildPayload(getApi(), form, root) || {};\n    } catch (_) {\n      const fallbackUrl = (typeof window !== 'undefined' && window.location) ? window.location.href : '';\n      return {\n        pageUrl: fallbackUrl,\n        shareUrl: fallbackUrl\n      };\n    }\n  }\n\n  function parsePositiveContactDimension(value) {\n    const number = Number(String(value == null ? '' : value).trim().replace(',', '.'));\n    return Number.isFinite(number) && number > 0 ? number : null;\n  }\n\n  function convertContactDimension(value, inputUnits, outputUnits) {\n    const number = parsePositiveContactDimension(value);\n    if (number == null) return null;\n    const fromUnits = inputUnits === 'ft' ? 'ft' : 'm';\n    const toUnits = outputUnits === 'ft' ? 'ft' : 'm';\n    if (fromUnits === toUnits) return number;\n    return fromUnits === 'ft' ? number * 0.3048 : number / 0.3048;\n  }\n\n  function readBuilderDimensionForContact(root, selector, contactUnits) {\n    const field = root ? root.querySelector(selector) : null;\n    const value = field ? parsePositiveContactDimension(field.value) : null;\n    if (!value) return null;\n    const builderUnits = getBuilderUnits(root) || 'm';\n    if (builderUnits === contactUnits) return value;\n    return builderUnits === 'ft' ? value * 0.3048 : value * 3.280839895013123;\n  }\n\n  function applyContactDimensionsToBuilder(form, root) {\n    const contactWidth = parsePositiveContactDimension(readFormValue(form, '#swishcb-contact-width'));\n    const contactLength = parsePositiveContactDimension(readFormValue(form, '#swishcb-contact-length'));\n    if (!contactWidth && !contactLength) return false;\n    const api = getApi();\n    if (!api || typeof api.setContactDimensions !== 'function') return false;\n    const units = getContactUnits(form) || 'm';\n    const width = contactWidth || readBuilderDimensionForContact(root, '#swishcb-width', units);\n    const length = contactLength || readBuilderDimensionForContact(root, '#swishcb-length', units);\n    if (!width || !length) return false;\n    const signature = [units, width, length].join(':');\n    if (form.dataset.swishcbAppliedContactDimensions === signature) return true;\n    const applied = api.setContactDimensions({ width, length, units });\n    if (applied) form.dataset.swishcbAppliedContactDimensions = signature;\n    return !!applied;\n  }\n\n  function m2ft(m) {\n    return Number(m) * 3.28084;\n  }\n\n  function fmt(n, digits) {\n    if (!Number.isFinite(n)) return '-';\n    const d = Number.isFinite(digits) ? digits : 2;\n    return Number(n).toFixed(d);\n  }\n\n  function fmtMetersFeet(m) {\n    if (!Number.isFinite(m)) return '-';\n    const mVal = fmt(m, 2);\n    const ftVal = fmt(m2ft(m), 2);\n    return `${mVal} m (${ftVal} ft)`;\n  }\n\n  function fmtDistanceByUnit(m, unit) {\n    if (!Number.isFinite(m)) return '-';\n    if (unit === 'ft') return `${fmt(m2ft(m), 2)} ft`;\n    return `${fmt(m, 2)} m`;\n  }\n\n  function fmtTrim(n, digits) {\n    if (!Number.isFinite(n)) return '-';\n    const d = Number.isFinite(digits) ? digits : 2;\n    const fixed = Number(n).toFixed(d);\n    return fixed.replace(/\\.0+$/, '').replace(/(\\.\\d*[1-9])0+$/, '$1');\n  }\n\n  function fmtBytes(bytes) {\n    if (!Number.isFinite(bytes)) return '-';\n    if (bytes < 1024) return `${bytes} B`;\n    const kb = bytes / 1024;\n    if (kb < 1024) return `${fmtTrim(kb, 1)} KB`;\n    const mb = kb / 1024;\n    return `${fmtTrim(mb, 2)} MB`;\n  }\n\n  function getTextLength(value) {\n    if (value == null) return 0;\n    return String(value).length;\n  }\n\n  function sanitizeText(value) {\n    return value == null ? '' : String(value).trim();\n  }\n\n  function appendSubmissionNote(notes, message) {\n    const text = sanitizeText(message);\n    if (!text) return;\n    if (notes.indexOf(text) !== -1) return;\n    notes.push(text);\n  }\n\n  function getCanonicalPageUrl(rawUrl) {\n    const fallback = (typeof window !== 'undefined' && window.location)\n      ? `${window.location.origin}${window.location.pathname}`\n      : '';\n    const source = sanitizeText(rawUrl) || fallback;\n    if (!source) return '';\n\n    try {\n      const url = new URL(source, fallback || undefined);\n      return `${url.origin}${url.pathname}`;\n    } catch (_) {\n      return source.split('#')[0].split('?')[0];\n    }\n  }\n\n  function omitOversizedValue(value, maxChars, label, notes) {\n    const text = sanitizeText(value);\n    if (!text) return '';\n    if (text.length <= maxChars) return text;\n    appendSubmissionNote(notes, `${label} was omitted because it exceeded ${maxChars} characters.`);\n    return '';\n  }\n\n  function trimTextForField(value, maxChars, label) {\n    const text = value == null ? '' : String(value);\n    if (!text || text.length <= maxChars) return text;\n    const suffix = `\\n[${label} trimmed from ${text.length} characters]`;\n    if (suffix.length >= maxChars) {\n      return text.slice(0, maxChars);\n    }\n    return `${text.slice(0, maxChars - suffix.length)}${suffix}`;\n  }\n\n  function buildSubmissionNotesBlock(notes) {\n    if (!Array.isArray(notes) || !notes.length) return '';\n    return `\\n\\nSubmission notes\\n- ${notes.join('\\n- ')}`;\n  }\n\n  function buildUploadEndpoint() {\n    if (typeof window === 'undefined' || !window.EComposer || !window.EComposer.proxy_path) {\n      return null;\n    }\n\n    const proxyPath = String(window.EComposer.proxy_path || '').replace(/\\/$/, '');\n    if (!proxyPath) return null;\n\n    try {\n      return new URL(proxyPath + '/contact-form', window.location.origin).toString();\n    } catch (_) {\n      return window.location.origin + proxyPath + '/contact-form';\n    }\n  }\n\n  async function uploadFile(endpoint, file, fileName) {\n    const body = new FormData();\n    body.append('file', file, fileName || 'upload.bin');\n\n    const response = await fetch(endpoint, {\n      method: 'POST',\n      body,\n      credentials: 'same-origin'\n    });\n\n    const payload = await response.json();\n    if (!response.ok || !payload || payload.status !== 'success' || !payload.src_file) {\n      throw new Error((payload && payload.message) || 'Upload failed.');\n    }\n\n    return payload.src_file;\n  }\n\n  let zipCrcTable = null;\n\n  function getZipCrcTable() {\n    if (zipCrcTable) return zipCrcTable;\n    zipCrcTable = new Uint32Array(256);\n    for (let i = 0; i < 256; i += 1) {\n      let c = i;\n      for (let k = 0; k < 8; k += 1) {\n        c = (c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1);\n      }\n      zipCrcTable[i] = c >>> 0;\n    }\n    return zipCrcTable;\n  }\n\n  function crc32Bytes(bytes) {\n    const table = getZipCrcTable();\n    let crc = 0xFFFFFFFF;\n    for (let i = 0; i < bytes.length; i += 1) {\n      crc = table[(crc ^ bytes[i]) & 0xFF] ^ (crc >>> 8);\n    }\n    return (crc ^ 0xFFFFFFFF) >>> 0;\n  }\n\n  function writeZipU16(view, offset, value) {\n    view.setUint16(offset, value & 0xFFFF, true);\n  }\n\n  function writeZipU32(view, offset, value) {\n    view.setUint32(offset, value >>> 0, true);\n  }\n\n  function getZipDosDateTime(date) {\n    const d = date instanceof Date ? date : new Date();\n    const year = Math.max(1980, d.getFullYear());\n    const dosTime = ((d.getHours() & 0x1F) << 11) |\n      ((d.getMinutes() & 0x3F) << 5) |\n      (Math.floor(d.getSeconds() / 2) & 0x1F);\n    const dosDate = (((year - 1980) & 0x7F) << 9) |\n      (((d.getMonth() + 1) & 0x0F) << 5) |\n      (d.getDate() & 0x1F);\n    return { dosTime, dosDate };\n  }\n\n  function encodeZipText(value) {\n    const text = value == null ? '' : String(value);\n    if (typeof TextEncoder === 'function') return new TextEncoder().encode(text);\n    const encoded = unescape(encodeURIComponent(text));\n    const bytes = new Uint8Array(encoded.length);\n    for (let i = 0; i < encoded.length; i += 1) bytes[i] = encoded.charCodeAt(i);\n    return bytes;\n  }\n\n  function createStoredZipBlob(fileName, text) {\n    const innerName = String(fileName || 'swish-court-builder-settings.json').replace(/[\\\\/:*?\"<>|]+/g, '-');\n    const nameBytes = encodeZipText(innerName || 'swish-court-builder-settings.json');\n    const dataBytes = encodeZipText(text || '');\n    const crc = crc32Bytes(dataBytes);\n    const stamp = getZipDosDateTime(new Date());\n    const flags = 0x0800;\n    const method = 0;\n\n    const local = new Uint8Array(30 + nameBytes.length);\n    const localView = new DataView(local.buffer);\n    writeZipU32(localView, 0, 0x04034B50);\n    writeZipU16(localView, 4, 20);\n    writeZipU16(localView, 6, flags);\n    writeZipU16(localView, 8, method);\n    writeZipU16(localView, 10, stamp.dosTime);\n    writeZipU16(localView, 12, stamp.dosDate);\n    writeZipU32(localView, 14, crc);\n    writeZipU32(localView, 18, dataBytes.length);\n    writeZipU32(localView, 22, dataBytes.length);\n    writeZipU16(localView, 26, nameBytes.length);\n    writeZipU16(localView, 28, 0);\n    local.set(nameBytes, 30);\n\n    const centralOffset = local.length + dataBytes.length;\n    const central = new Uint8Array(46 + nameBytes.length);\n    const centralView = new DataView(central.buffer);\n    writeZipU32(centralView, 0, 0x02014B50);\n    writeZipU16(centralView, 4, 20);\n    writeZipU16(centralView, 6, 20);\n    writeZipU16(centralView, 8, flags);\n    writeZipU16(centralView, 10, method);\n    writeZipU16(centralView, 12, stamp.dosTime);\n    writeZipU16(centralView, 14, stamp.dosDate);\n    writeZipU32(centralView, 16, crc);\n    writeZipU32(centralView, 20, dataBytes.length);\n    writeZipU32(centralView, 24, dataBytes.length);\n    writeZipU16(centralView, 28, nameBytes.length);\n    writeZipU16(centralView, 30, 0);\n    writeZipU16(centralView, 32, 0);\n    writeZipU16(centralView, 34, 0);\n    writeZipU16(centralView, 36, 0);\n    writeZipU32(centralView, 38, 0);\n    writeZipU32(centralView, 42, 0);\n    central.set(nameBytes, 46);\n\n    const end = new Uint8Array(22);\n    const endView = new DataView(end.buffer);\n    writeZipU32(endView, 0, 0x06054B50);\n    writeZipU16(endView, 4, 0);\n    writeZipU16(endView, 6, 0);\n    writeZipU16(endView, 8, 1);\n    writeZipU16(endView, 10, 1);\n    writeZipU32(endView, 12, central.length);\n    writeZipU32(endView, 16, centralOffset);\n    writeZipU16(endView, 20, 0);\n\n    return new Blob([local, dataBytes, central, end], { type: 'application/zip' });\n  }\n\n  async function uploadJsonFile(endpoint, jsonText, fileName) {\n    if (!endpoint || !jsonText) return '';\n    const BlobCtor = (typeof Blob === 'function') ? Blob : null;\n    if (!BlobCtor) return '';\n    const blob = createStoredZipBlob(fileName || 'swish-court-builder-settings.json', jsonText);\n    return uploadFile(endpoint, blob, 'swish-court-builder-settings.zip');\n  }\n\n  function isPublicHttpUrl(value) {\n    return /^https?:\\/\\//i.test(String(value || '').trim());\n  }\n\n  function firstPublicUrl() {\n    for (let i = 0; i < arguments.length; i += 1) {\n      const text = String(arguments[i] || '').trim();\n      if (isPublicHttpUrl(text)) return text;\n    }\n    return '';\n  }\n\n  function getShareAssetBlob(asset) {\n    if (!asset || typeof asset !== 'object') return null;\n    const BlobCtor = (typeof Blob === 'function') ? Blob : null;\n    const FileCtor = (typeof File === 'function') ? File : null;\n    if (asset.file && FileCtor && asset.file instanceof FileCtor) return asset.file;\n    if (asset.blob && BlobCtor && asset.blob instanceof BlobCtor) return asset.blob;\n    if (asset.file && BlobCtor && asset.file instanceof BlobCtor) return asset.file;\n    return null;\n  }\n\n  function getShareAssetFileName(asset, fallback) {\n    const raw = String((asset && (asset.fileName || (asset.file && asset.file.name))) || fallback || 'swish-court-share-file').trim();\n    return raw.replace(/[\\\\/:*?\"<>|]+/g, '-').slice(0, 120) || fallback || 'swish-court-share-file';\n  }\n\n  function getShareAssetMeta(asset, uploadedUrl, reason) {\n    if (!asset || typeof asset !== 'object') return null;\n    return {\n      mode: asset.mode || null,\n      kind: asset.kind || null,\n      fileName: asset.fileName || (asset.file && asset.file.name) || null,\n      mimeType: asset.mimeType || (asset.blob && asset.blob.type) || (asset.file && asset.file.type) || null,\n      width: Number.isFinite(Number(asset.width)) ? Number(asset.width) : null,\n      height: Number.isFinite(Number(asset.height)) ? Number(asset.height) : null,\n      bytes: Number.isFinite(Number(asset.byteSize)) ? Number(asset.byteSize) : (\n        asset.blob && Number.isFinite(Number(asset.blob.size)) ? Number(asset.blob.size) : null\n      ),\n      publicUrl: uploadedUrl || firstPublicUrl(asset.publicUrl, asset.deliveryUrl, asset.previewUrl),\n      uploadedUrl: uploadedUrl || null,\n      deliveryUrl: firstPublicUrl(asset.deliveryUrl),\n      previewUrl: firstPublicUrl(asset.previewUrl),\n      sourceKind: asset.sourceKind || null,\n      deliverySource: asset.deliverySource || null,\n      normalizationState: asset.normalizationState || null,\n      uploadReason: reason || null\n    };\n  }\n\n  async function uploadPreparedShareAsset(label, asset, uploadEndpoint, options, form, submissionNotes) {\n    const opts = options && typeof options === 'object' ? options : {};\n    const publicUrl = firstPublicUrl(asset && asset.publicUrl, asset && asset.deliveryUrl, asset && asset.previewUrl);\n    const blob = getShareAssetBlob(asset);\n    const fileName = getShareAssetFileName(asset, opts.fileName || 'swish-court-share-file');\n    const maxBytes = Number.isFinite(opts.maxBytes) ? opts.maxBytes : MAX_SHARE_IMAGE_BYTES;\n\n    if (opts.preferPublicUrl && publicUrl) {\n      return getShareAssetMeta(asset, publicUrl, 'using hosted share export');\n    }\n\n    if (!blob && publicUrl) {\n      return getShareAssetMeta(asset, publicUrl, 'using hosted share export');\n    }\n\n    if (!blob) {\n      appendSubmissionNote(submissionNotes, `${label} was omitted because the browser did not provide a downloadable file.`);\n      return getShareAssetMeta(asset, '', 'missing local file');\n    }\n\n    if (blob.size > maxBytes) {\n      appendSubmissionNote(submissionNotes, `${label} was omitted because it exceeded ${fmtBytes(maxBytes)}.`);\n      return getShareAssetMeta(asset, publicUrl, `exceeded ${fmtBytes(maxBytes)}`);\n    }\n\n    if (!uploadEndpoint) {\n      appendSubmissionNote(submissionNotes, `${label} was omitted because file uploads are unavailable on this page.`);\n      return getShareAssetMeta(asset, publicUrl, 'upload unavailable');\n    }\n\n    setStatusMessage(form, `Uploading ${label.toLowerCase()}...`, false);\n    try {\n      const uploadedUrl = await uploadFile(uploadEndpoint, blob, fileName);\n      return getShareAssetMeta(asset, uploadedUrl, 'uploaded');\n    } catch (error) {\n      appendSubmissionNote(\n        submissionNotes,\n        `${label} could not be uploaded: ${(error && error.message) || 'Upload failed.'}`\n      );\n      return getShareAssetMeta(asset, publicUrl, 'upload failed');\n    }\n  }\n\n  async function prepareInquiryShareMedia(api, uploadEndpoint, form, submissionNotes, debugSession) {\n    const result = {\n      exactPreviewUrl: '',\n      shareHash: '',\n      shareData: null,\n      logoManifestUrl: '',\n      design2d: null,\n      errors: []\n    };\n\n    if (!api || typeof api.prepareContactShareAssets !== 'function') {\n      appendSubmissionNote(submissionNotes, 'Share-window exact link and 2D export were omitted because this builder version does not expose inquiry share assets.');\n      return result;\n    }\n\n    let prepared = null;\n    try {\n      setStatusMessage(form, 'Preparing exact share link and 2D design...', false);\n      prepared = await api.prepareContactShareAssets({\n        include2d: true,\n        includeVideo: false\n      });\n    } catch (error) {\n      appendSubmissionNote(\n        submissionNotes,\n        `Share-window exact link and 2D export could not be prepared: ${(error && error.message) || 'Share export failed.'}`\n      );\n      result.errors.push({\n        stage: 'prepare-share-assets',\n        message: (error && error.message) || 'Share export failed.'\n      });\n      return result;\n    }\n\n    prepared = prepared && typeof prepared === 'object' ? prepared : {};\n    result.exactPreviewUrl = String(prepared.shareUrl || '').trim();\n    result.shareHash = String(prepared.shareHash || '').trim();\n    result.shareData = prepared.shareData || null;\n    result.logoManifestUrl = String(prepared.logoManifestUrl || '').trim();\n    result.errors = Array.isArray(prepared.errors) ? prepared.errors.slice() : [];\n\n    if (result.errors.length) {\n      appendSubmissionNote(\n        submissionNotes,\n        `Some share export steps reported issues: ${result.errors.map((error) => `${error.stage || 'share'}: ${error.message || 'failed'}`).join('; ')}`\n      );\n    }\n\n    if (debugSession) {\n      debugSession.mark('share-media-prepared', {\n        exactPreviewUrl: !!result.exactPreviewUrl,\n        design2d: !!prepared.design2d,\n        video3d: false,\n        errors: result.errors.length\n      });\n    }\n\n    result.design2d = await uploadPreparedShareAsset(\n      '2D design image',\n      prepared.design2d,\n      uploadEndpoint,\n      {\n        fileName: 'swish-court-2d-design.png',\n        maxBytes: MAX_SHARE_IMAGE_BYTES,\n        preferPublicUrl: false\n      },\n      form,\n      submissionNotes\n    );\n\n    return result;\n  }\n\n  function summarizeRawText(value) {\n    const length = getTextLength(value);\n    if (!length) return null;\n    return {\n      omitted: true,\n      length\n    };\n  }\n\n  function makeJsonSafe(value, seen) {\n    if (value == null) return value;\n    const type = typeof value;\n    if (type === 'string' || type === 'number' || type === 'boolean') {\n      if (type === 'number') return Number.isFinite(value) ? value : null;\n      return value;\n    }\n    if (type !== 'object') return null;\n    const FileCtor = (typeof File === 'function') ? File : null;\n    const BlobCtor = (typeof Blob === 'function') ? Blob : null;\n    if (FileCtor && value instanceof FileCtor) {\n      return {\n        fileName: value.name || '',\n        fileType: value.type || '',\n        fileSize: Number(value.size) || 0,\n        fileLastModified: Number(value.lastModified) || 0\n      };\n    }\n    if (BlobCtor && value instanceof BlobCtor) {\n      return {\n        blobType: value.type || '',\n        blobSize: Number(value.size) || 0\n      };\n    }\n    const guard = seen || [];\n    if (guard.indexOf(value) !== -1) return '[Circular]';\n    const nextSeen = guard.concat([value]);\n    if (Array.isArray(value)) {\n      return value.map((item) => makeJsonSafe(item, nextSeen));\n    }\n    const out = {};\n    Object.keys(value).forEach((key) => {\n      const item = value[key];\n      if (typeof item === 'function' || typeof item === 'undefined') return;\n      out[key] = makeJsonSafe(item, nextSeen);\n    });\n    return out;\n  }\n\n  function buildFullBuilderPayload(payload, meta) {\n    const source = payload && typeof payload === 'object' ? payload : {};\n    const safe = makeJsonSafe(source) || {};\n    const uploadedLogoUrls = meta && Array.isArray(meta.uploadedLogoUrls) ? meta.uploadedLogoUrls.slice() : [];\n    const uploadedPreviewUrl = meta && meta.previewUrl ? String(meta.previewUrl) : '';\n    const uploadedDesign2dUrl = meta && meta.design2dUrl ? String(meta.design2dUrl) : '';\n    const exactPreviewUrl = meta && meta.exactPreviewUrl ? String(meta.exactPreviewUrl) : '';\n    safe.logoFiles = Array.isArray(source.logoFiles)\n      ? source.logoFiles.map((file) => makeJsonSafe(file))\n      : [];\n    safe.uploadedLogoUrls = uploadedLogoUrls;\n    safe.uploadedPreviewUrl = uploadedPreviewUrl || null;\n    safe.uploadedDesign2dUrl = uploadedDesign2dUrl || null;\n    safe.uploadedVideo3dUrl = null;\n    safe.exactPreviewUrl = exactPreviewUrl || safe.shareUrl || null;\n    safe.captureCompleteness = {\n      fullCanonicalPayload: true,\n      binaryLogoFilesRepresentedAsMetadata: true,\n      uploadedLogoUrlsIncluded: uploadedLogoUrls,\n      uploadedPreviewUrl: uploadedPreviewUrl || null,\n      uploadedDesign2dUrl: uploadedDesign2dUrl || null,\n      uploadedVideo3dUrl: null,\n      exactPreviewUrl: exactPreviewUrl || safe.shareUrl || null\n    };\n    return safe;\n  }\n\n  function buildSettingsIndex(payload) {\n    const p = payload && typeof payload === 'object' ? payload : {};\n    return {\n      mode: p.mode || p.courtMode || 'single',\n      courtType: p.courtType || null,\n      ruleset: p.ruleset || null,\n      units: p.units || null,\n      sizeM: { length: p.lengthM ?? null, width: p.widthM ?? null },\n      rotation: p.rotation ?? null,\n      measurements: p.measurements || null,\n      lineSize: {\n        selected: p.nonBasketballLineSizeMode || null,\n        effective: p.nonBasketballLineSizeEffectiveMode || null,\n        geometry: p.nonBasketballLineSizeGeometry || null\n      },\n      tiles: {\n        enabled: p.tilesEnabled ?? !!p.tileCounts,\n        series: p.tileSeries || (p.shareData && p.shareData.ts) || null,\n        edges: p.tileEdges || null,\n        edgeMask: p.tileEdgeMask ?? null,\n        edgeSizeM: p.tileEdgeSizeM ?? null,\n        counts: p.tileCounts || null,\n        footprintM: p.tileFootprintM || null,\n        installedSurfaceM: p.installedSurfaceM || null,\n        materialCounts: p.tileMaterialCounts || null,\n        materialOwnership: p.tileMaterialOwnership || null\n      },\n      hoops: {\n        mode: p.hoopsMode || null,\n        lineType: p.hoopLineType || null,\n        preset: p.hoopModelPreset || null,\n        selection: p.hoopSelection || null,\n        overhangsM: p.hoopOverhangsM || null,\n        overhangEditedSides: p.hoopOverhangEditedSides || [],\n        presetGeometry: p.hoopPresetGeometry || null\n      },\n      borders: {\n        selection: p.borderSelection || null,\n        sizesM: p.borderSizesM || null\n      },\n      basketballKey: {\n        matchKeyMode: p.keyDimensionsM && p.keyDimensionsM.mode ? p.keyDimensionsM.mode : (p.shareData && p.shareData.kta) || null,\n        keyTileAlignment: p.keyTileAlignment || (p.shareData && p.shareData.kta) || null,\n        overlayKeysLinkedToBase: p.overlayKeysLinkedToBase ?? null,\n        dimensionsM: p.keyDimensionsM || null,\n        dimensionsDisplay: p.keyDimensionsDisplay || null,\n        centerCircle: p.centerCircleDiameter || null,\n        threePoint: p.threePointDistance || null\n      },\n      sportFeatures: {\n        futsal: {\n          mode: p.futsalMode || null,\n          playingAreaM: p.futsalPlayingAreaM || null,\n          penaltyAreaM: p.futsalPenaltyAreaM || null\n        },\n        netball: {\n          playingAreaM: p.netballPlayingAreaM || null,\n          goalPostM: p.netballGoalPostM || null\n        }\n      },\n      colors: {\n        mainColors: p.colors || null,\n        detailColors: p.detailColors || null,\n        detailVisibility: p.detailVisibility || null,\n        hiddenDetails: p.hiddenDetails || [],\n        edgeColors: p.edgeColors || null\n      },\n      extraSports: p.extraSports || null,\n      logos: {\n        unit: p.logoUnit || null,\n        manifestUrl: p.logoManifestUrl || null,\n        logos: p.logos || []\n      },\n      view: p.view || null,\n      share: {\n        url: p.shareUrl || null,\n        exactPreviewUrl: p.exactPreviewUrl || null,\n        hash: p.shareHash || null,\n        data: p.shareData || null,\n        design2dUrl: p.uploadedDesign2dUrl || null,\n        video3dUrl: null\n      },\n      multiCourt: {\n        selectedCourtId: p.selectedCourtId || null,\n        totalSurfaceM: p.totalSurfaceM || null,\n        surfaceSettings: p.surfaceSettings || null,\n        courts: Array.isArray(p.courts) ? p.courts : []\n      }\n    };\n  }\n\n  function fmtToggle(value) {\n    return value ? 'On' : 'Off';\n  }\n\n  function fmtYesNo(value) {\n    return value ? 'Yes' : 'No';\n  }\n\n  function fmtHoopsMode(value) {\n    const raw = String(value ?? '').trim();\n    if (!raw) return '-';\n    if (raw === '0') return 'None';\n    if (raw === '1') return '1 hoop';\n    return `${raw} hoops`;\n  }\n\n  function fmtSelectionVerbose(sel) {\n    if (!sel) return '-';\n    return `Left ${fmtToggle(sel.leftOn)} | Right ${fmtToggle(sel.rightOn)} | Top ${fmtToggle(sel.topOn)} | Bottom ${fmtToggle(sel.bottomOn)}`;\n  }\n\n  function fmtOverhangByUnit(m, unit) {\n    if (!Number.isFinite(m)) return '-';\n    if (unit === 'ft') return `${fmt(m2ft(m), 2)} ft`;\n    return `${fmtTrim(m * 100, 1)} cm`;\n  }\n\n  function fmtSelection(sel) {\n    if (!sel) return '-';\n    const items = [\n      `L:${sel.leftOn ? 'on' : 'off'}`,\n      `R:${sel.rightOn ? 'on' : 'off'}`,\n      `T:${sel.topOn ? 'on' : 'off'}`,\n      `B:${sel.bottomOn ? 'on' : 'off'}`\n    ];\n    return items.join(', ');\n  }\n\n  function getBuilderConfig() {\n    try {\n      return (typeof window !== 'undefined' && window.SwishCBConfig) ? window.SwishCBConfig : {};\n    } catch (_) {\n      return {};\n    }\n  }\n\n  function humanizeBuilderId(value) {\n    const raw = String(value || '').trim();\n    if (!raw) return '';\n    return raw\n      .replace(/^extra_/i, '')\n      .replace(/__/g, ' ')\n      .replace(/([a-z])([A-Z])/g, '$1 $2')\n      .replace(/[_-]+/g, ' ')\n      .replace(/\\b3\\s*pt\\b/gi, '3PT')\n      .replace(/\\b3\\s*point\\b/gi, '3-point')\n      .replace(/\\s+/g, ' ')\n      .trim()\n      .replace(/\\b[a-z]/g, (ch) => ch.toUpperCase());\n  }\n\n  function getExtraDefinitionById(extraId) {\n    const cfg = getBuilderConfig();\n    const list = Array.isArray(cfg.EXTRA_LINE_TYPES) ? cfg.EXTRA_LINE_TYPES : [];\n    const wanted = String(extraId || '').trim().toLowerCase();\n    if (!wanted) return null;\n    return list.find((item) => item && String(item.id || '').toLowerCase() === wanted) || null;\n  }\n\n  function getDetailKeyForExtraDefinition(def) {\n    const cfg = getBuilderConfig();\n    const rulesetId = String(def && def.ruleset || '').trim().toUpperCase();\n    const rules = rulesetId && cfg.RULESETS ? cfg.RULESETS[rulesetId] : null;\n    return String((rules && rules.detailKey) || rulesetId || '').trim().toUpperCase();\n  }\n\n  function getDetailPartLabel(partId, detailKey) {\n    const cfg = getBuilderConfig();\n    const library = cfg.DETAIL_LIBRARY || {};\n    const keys = detailKey ? [detailKey] : Object.keys(library || {});\n    const wanted = String(partId || '').trim();\n    if (!wanted) return '';\n    for (let i = 0; i < keys.length; i += 1) {\n      const meta = library[keys[i]];\n      const parts = meta && Array.isArray(meta.parts) ? meta.parts : [];\n      const part = parts.find((item) => item && item.id === wanted);\n      if (!part) continue;\n      let label = String(part.label || '').trim() || humanizeBuilderId(wanted);\n      const groups = meta && Array.isArray(meta.groups) ? meta.groups : [];\n      const group = groups.find((item) => item && item.id === part.group);\n      const groupLabel = String(group && group.label || '').trim();\n      if (\n        groupLabel &&\n        /^(left|right|top|bottom|center)$/i.test(String(part.group || '')) &&\n        label.toLowerCase().indexOf(groupLabel.toLowerCase()) !== 0\n      ) {\n        label = `${groupLabel} ${label}`;\n      }\n      return label;\n    }\n    return humanizeBuilderId(wanted);\n  }\n\n  function parseExtraDetailIdForDisplay(id) {\n    const text = String(id || '').trim();\n    if (!text || text.indexOf('extra_') !== 0) return null;\n    const rest = text.slice('extra_'.length);\n    const idx = rest.indexOf('__');\n    if (idx <= 0) return null;\n    const extraId = rest.slice(0, idx).toLowerCase();\n    const partId = rest.slice(idx + 2);\n    if (!extraId || !partId) return null;\n    return { extraId, partId };\n  }\n\n  function formatExtraIdForDisplay(extraId) {\n    const def = getExtraDefinitionById(extraId);\n    const label = String(def && def.label || '').trim();\n    if (label) return label;\n    return humanizeBuilderId(extraId);\n  }\n\n  function formatDetailIdForDisplay(id) {\n    const parsed = parseExtraDetailIdForDisplay(id);\n    if (parsed) {\n      const def = getExtraDefinitionById(parsed.extraId);\n      const detailKey = getDetailKeyForExtraDefinition(def);\n      return `${formatExtraIdForDisplay(parsed.extraId)} - ${getDetailPartLabel(parsed.partId, detailKey)}`;\n    }\n    return getDetailPartLabel(id, '') || humanizeBuilderId(id);\n  }\n\n  function fmtKeyValueList(obj) {\n    if (!obj || typeof obj !== 'object') return 'none';\n    const entries = Object.entries(obj)\n      .filter(([, v]) => v != null && String(v).trim() !== '')\n      .map(([k, v]) => `${formatDetailIdForDisplay(k)}: ${v}`);\n    return entries.length ? entries.join(', ') : 'none';\n  }\n\n  function fmtHiddenList(items) {\n    return Array.isArray(items) && items.length ? items.map(formatDetailIdForDisplay).join(', ') : 'none';\n  }\n\n  function fmtVisibilityOverrides(detailVisibility) {\n    if (!detailVisibility || typeof detailVisibility !== 'object') return 'none';\n    const hidden = Object.entries(detailVisibility)\n      .filter(([, v]) => v === false)\n      .map(([k]) => formatDetailIdForDisplay(k));\n    return hidden.length ? `hidden: ${hidden.join(', ')}` : 'none';\n  }\n\n  function fmtExtraSports(extraSports) {\n    if (!extraSports || typeof extraSports !== 'object') return 'none';\n    const entries = Object.entries(extraSports);\n    const enabled = entries.filter(([, v]) => v && v.enabled);\n    if (!enabled.length) return 'none';\n    return enabled.map(([key, v]) => `${formatExtraIdForDisplay(key)}${v && v.color ? ` (${v.color})` : ''}`).join(', ');\n  }\n\n  function parseNumericInput(value) {\n    const raw = value == null ? '' : String(value);\n    const normalized = raw.replace(',', '.');\n    const num = Number(normalized);\n    return Number.isFinite(num) ? num : null;\n  }\n\n  function normalizeBuilderKey(value) {\n    return String(value || '')\n      .trim()\n      .toLowerCase()\n      .replace(/[_\\s]+/g, '-');\n  }\n\n  function normalizeBuilderSport(value) {\n    const normalized = normalizeBuilderKey(value);\n    if (!normalized) return '';\n    if (normalized.indexOf('pickleball') !== -1) return 'pickleball';\n    if (normalized.indexOf('racquetball') !== -1) return 'racquetball';\n    if (normalized.indexOf('tennis') !== -1) return 'tennis';\n    if (normalized.indexOf('padel') !== -1) return 'padel';\n    if (normalized.indexOf('volleyball') !== -1) return 'volleyball';\n    if (normalized.indexOf('futsal') !== -1) return 'futsal';\n    if (normalized.indexOf('netball') !== -1) return 'netball';\n    if (\n      normalized.indexOf('basketball') !== -1 ||\n      normalized.indexOf('fiba') !== -1 ||\n      normalized.indexOf('nba') !== -1 ||\n      normalized.indexOf('ncaa') !== -1 ||\n      normalized === 'usahs' ||\n      normalized.indexOf('high-school') !== -1 ||\n      normalized.indexOf('highschool') !== -1 ||\n      normalized === 'hs'\n    ) {\n      return 'basketball';\n    }\n    return normalized.replace(/-/g, ' ');\n  }\n\n  function mapRulesetToOfficialDimensionKey(ruleset) {\n    const normalized = normalizeBuilderKey(ruleset);\n    if (!normalized) return null;\n    if (normalized.indexOf('fiba') !== -1 && normalized.indexOf('border') !== -1) return 'fiba-1900x3200-h2';\n    if (normalized.indexOf('fiba') !== -1 && normalized.indexOf('half') !== -1) return 'fiba-1500x1400-h1';\n    if (normalized.indexOf('fiba') !== -1) return 'fiba-1500x2800-h2';\n    if (normalized.indexOf('nba') !== -1 && normalized.indexOf('half') !== -1 && normalized.indexOf('competition') !== -1) return 'nba-1924x1833-h1';\n    if (normalized.indexOf('nba') !== -1 && normalized.indexOf('half') !== -1) return 'nba-1524x1433-h1';\n    if (normalized.indexOf('nba') !== -1 && normalized.indexOf('border') !== -1) return 'nba-1924x3265-h2';\n    if (normalized.indexOf('nba') !== -1) return 'nba-1524x2865-h2';\n    if ((normalized.indexOf('ncaa') !== -1 || normalized.indexOf('college') !== -1) && normalized.indexOf('half') !== -1 && normalized.indexOf('competition') !== -1) return 'ncaa-1924x1833-h1';\n    if ((normalized.indexOf('ncaa') !== -1 || normalized.indexOf('college') !== -1) && normalized.indexOf('half') !== -1) return 'ncaa-1524x1433-h1';\n    if ((normalized.indexOf('ncaa') !== -1 || normalized.indexOf('college') !== -1) && normalized.indexOf('border') !== -1) return 'ncaa-1924x3265-h2';\n    if (normalized.indexOf('ncaa') !== -1 || normalized.indexOf('college') !== -1) return 'ncaa-1524x2865-h2';\n    if ((normalized === 'usahs' || normalized.indexOf('high-school') !== -1 || normalized.indexOf('highschool') !== -1 || normalized === 'hs') && normalized.indexOf('half') !== -1 && normalized.indexOf('competition') !== -1) return 'usahs-1924x1680-h1';\n    if ((normalized === 'usahs' || normalized.indexOf('high-school') !== -1 || normalized.indexOf('highschool') !== -1 || normalized === 'hs') && normalized.indexOf('half') !== -1) return 'usahs-1524x1280-h1';\n    if ((normalized === 'usahs' || normalized.indexOf('high-school') !== -1 || normalized.indexOf('highschool') !== -1 || normalized === 'hs') && normalized.indexOf('border') !== -1) return 'usahs-1924x2960-h2';\n    if (normalized === 'usahs' || normalized.indexOf('high-school') !== -1 || normalized.indexOf('highschool') !== -1 || normalized === 'hs') return 'usahs-1524x2560-h2';\n    if (normalized.indexOf('pickleball') !== -1) return 'pickleball-610x1341-h0';\n    if (normalized.indexOf('racquetball') !== -1) return 'racquetball-610x1219-h0';\n    if (normalized.indexOf('tennis') !== -1) return 'tennis-1097x2377-h0';\n    if (normalized.indexOf('padel') !== -1) return 'padel-1000x2000-h0';\n    if (normalized.indexOf('volleyball') !== -1) return 'volleyball-900x1800-h0';\n    if (normalized.indexOf('shuffleboard') !== -1) return 'shuffleboard-183x1585-h0';\n    if (normalized.indexOf('futsal') !== -1) return 'futsal-2000x4000-h0';\n    if (normalized.indexOf('netball') !== -1) return 'netball-1525x3050-h0';\n    return null;\n  }\n\n  function deriveBuilderSports(payload) {\n    const sports = [];\n    const seen = Object.create(null);\n    const add = function (value) {\n      const normalized = normalizeBuilderSport(value);\n      if (!normalized || seen[normalized]) return;\n      seen[normalized] = true;\n      sports.push(normalized);\n    };\n\n    add(payload.ruleset);\n    add(payload.courtType);\n    if (Array.isArray(payload.courts)) {\n      payload.courts.forEach(function (court) {\n        if (!court) return;\n        add(court.ruleset);\n        add(court.courtType);\n        add(court.courtTypeLabel);\n        if (court.extraSports && typeof court.extraSports === 'object') {\n          Object.keys(court.extraSports).forEach(function (key) {\n            const config = court.extraSports[key];\n            if (config && config.enabled) add(key);\n          });\n        }\n      });\n    }\n\n    if (payload.extraSports && typeof payload.extraSports === 'object') {\n      Object.keys(payload.extraSports).forEach(function (key) {\n        const config = payload.extraSports[key];\n        if (config && config.enabled) {\n          add(key);\n        }\n      });\n    }\n\n    return sports;\n  }\n\n  function deriveBuilderLines(payload) {\n    const lines = [];\n    const seen = Object.create(null);\n    const add = function (value) {\n      const text = String(value || '').trim();\n      if (!text || seen[text]) return;\n      seen[text] = true;\n      lines.push(text.replace(/[-_]+/g, ' '));\n    };\n\n    add(payload.ruleset);\n    if (Array.isArray(payload.courts)) {\n      payload.courts.forEach(function (court) {\n        if (!court) return;\n        add(court.ruleset);\n        if (court.extraSports && typeof court.extraSports === 'object') {\n          Object.keys(court.extraSports).forEach(function (key) {\n            const config = court.extraSports[key];\n            if (config && config.enabled) add(key);\n          });\n        }\n      });\n    }\n\n    if (payload.extraSports && typeof payload.extraSports === 'object') {\n      Object.keys(payload.extraSports).forEach(function (key) {\n        const config = payload.extraSports[key];\n        if (config && config.enabled) {\n          add(key);\n        }\n      });\n    }\n\n    return lines;\n  }\n\n  function collectBuilderRawFields(form) {\n    const data = new FormData(form);\n    const raw = Object.create(null);\n    const FileCtor = (typeof File === 'function') ? File : null;\n    data.forEach(function (value, name) {\n      if (!/^contact\\[/.test(name) || (FileCtor && value instanceof FileCtor)) return;\n      const match = String(name).match(/^contact\\[(.+)\\]$/);\n      const key = (match ? String(match[1]) : String(name))\n        .trim()\n        .toLowerCase()\n        .replace(/[_-]+/g, ' ')\n        .replace(/\\s+/g, ' ');\n      const text = sanitizeText(value);\n      if (!text) return;\n      if (!Object.prototype.hasOwnProperty.call(raw, key)) {\n        raw[key] = text;\n        return;\n      }\n      if (Array.isArray(raw[key])) {\n        raw[key].push(text);\n        return;\n      }\n      raw[key] = [raw[key], text];\n    });\n    return raw;\n  }\n\n  function getBuilderLocalization(root) {\n    const globalLocalization = (typeof window !== 'undefined' && window.SWISH_SYSTEM_LOCALIZATION)\n      ? window.SWISH_SYSTEM_LOCALIZATION\n      : null;\n\n    return {\n      market: sanitizeText(\n        (root && root.getAttribute && root.getAttribute('data-swish-market')) ||\n        (globalLocalization && (globalLocalization.market || globalLocalization.marketName)) ||\n        ''\n      ),\n      country: sanitizeText(\n        (root && root.getAttribute && root.getAttribute('data-swish-country')) ||\n        (globalLocalization && (globalLocalization.country || globalLocalization.countryCode)) ||\n        ''\n      ),\n      countryCode: sanitizeText(\n        (root && root.getAttribute && root.getAttribute('data-swish-country-code')) ||\n        (globalLocalization && globalLocalization.countryCode) ||\n        ''\n      )\n    };\n  }\n\n  function ensureMetadataField(form, selector, name, value) {\n    const field = ensureField(form, selector, 'input', {\n      id: selector.replace(/^#/, ''),\n      type: 'hidden',\n      name: name\n    });\n    setFieldSubmissionValue(field, value);\n    return field;\n  }\n\n  function ensureBuilderMetadataFields(root, form, pageUrl, origin) {\n    const localization = getBuilderLocalization(root);\n    ensureMetadataField(form, '#swishcb-contact-source-website', 'contact[Source website]', origin || '');\n    ensureMetadataField(form, '#swishcb-contact-source-page', 'contact[Source page]', pageUrl || '');\n    ensureMetadataField(form, '#swishcb-contact-market', 'contact[Market]', localization.market);\n    ensureMetadataField(form, '#swishcb-contact-country', 'contact[Country]', localization.country || localization.countryCode);\n    ensureMetadataField(form, '#swishcb-contact-category', 'contact[Swish Category]', 'FLOORING');\n    return localization;\n  }\n\n  async function submitBuilderIntake(root, form, payload, data) {\n    const intake = (typeof window !== 'undefined') ? window.SwishSystemIntake : null;\n    if (!intake || typeof intake.ensureIntakeIdField !== 'function' || typeof intake.postThemePayload !== 'function') {\n      return {\n        ok: false,\n        skipped: true,\n        reason: 'missing-intake'\n      };\n    }\n\n    const intakeId = intake.ensureIntakeIdField(form);\n    const localization = ensureBuilderMetadataFields(\n      root,\n      form,\n      data.pageUrl || ((typeof window !== 'undefined' && window.location) ? window.location.href : ''),\n      (typeof window !== 'undefined' && window.location) ? window.location.origin : ''\n    );\n    const rawFields = collectBuilderRawFields(form);\n    const contactValues = data.contactValues || {};\n    const firstName = sanitizeText(contactValues.firstName);\n    const lastName = sanitizeText(contactValues.lastName);\n    const fullName = [firstName, lastName].filter(Boolean).join(' ').trim();\n    const logoUrls = Array.isArray(data.logoUrls) ? data.logoUrls.slice() : [];\n    const isMultiCourt = String(payload.mode || payload.courtMode || '').toLowerCase() === 'multiple';\n    const units = payload.units === 'ft' ? 'ft' : 'm';\n    const builderWidth = Number.isFinite(payload.widthM)\n      ? (units === 'ft' ? m2ft(payload.widthM) : payload.widthM)\n      : null;\n    const builderLength = Number.isFinite(payload.lengthM)\n      ? (units === 'ft' ? m2ft(payload.lengthM) : payload.lengthM)\n      : null;\n    const contactUnits = contactValues.units || units;\n    const contactWidth = convertContactDimension(contactValues.width, contactUnits, units);\n    const contactLength = convertContactDimension(contactValues.length, contactUnits, units);\n    const surfaceWidth = isMultiCourt\n      ? builderWidth\n      : ((Number.isFinite(contactWidth) && contactWidth > 0) ? contactWidth : builderWidth);\n    const surfaceLength = isMultiCourt\n      ? builderLength\n      : ((Number.isFinite(contactLength) && contactLength > 0) ? contactLength : builderLength);\n\n    return intake.postThemePayload(root, {\n      intakeId: intakeId,\n      source: 'BUILDER',\n      formType: 'swish-court-builder',\n      pageUrl: data.pageUrl || ((typeof window !== 'undefined' && window.location) ? window.location.href : null),\n      origin: (typeof window !== 'undefined' && window.location) ? window.location.origin : null,\n      geoCountry: localization.country || localization.countryCode || null,\n      category: 'FLOORING',\n      submittedAt: payload.timestamp || (new Date()).toISOString(),\n      contact: {\n        fullName: fullName || null,\n        firstName: firstName || null,\n        lastName: lastName || null,\n        email: sanitizeText(contactValues.email) || null,\n        phone: sanitizeText(contactValues.phone) || null,\n        shippingAddress: sanitizeText(contactValues.shipping) || null,\n        country: localization.country || localization.countryCode || null,\n        company: null\n      },\n      court: {\n        width: surfaceWidth,\n        length: surfaceLength,\n        units: units,\n        officialDimensionKey: isMultiCourt ? null : mapRulesetToOfficialDimensionKey(payload.ruleset),\n        courtType: isMultiCourt ? 'Multiple Courts' : (payload.courtType || null),\n        sports: deriveBuilderSports(payload),\n        lines: deriveBuilderLines(payload),\n        notes: sanitizeText(contactValues.notes) || null,\n        timeline: null,\n        colors: {\n          colors: payload.colors || null,\n          detailColors: payload.detailColors || null,\n          hiddenDetails: payload.hiddenDetails || [],\n          detailVisibility: payload.detailVisibility || null\n        },\n        builderConfiguration: data.details || payload.config || payload.configRaw || null,\n        previewUrl: data.design2dUrl || data.previewUrl || null,\n        shareUrl: data.exactPreviewUrl || data.shareUrl || null\n      },\n      builder: {\n        summary: data.summary || null,\n        raw: data.details || payload.config || payload.configRaw || null,\n        previewImageUrl: data.previewUrl || null,\n        exactPreviewUrl: data.exactPreviewUrl || data.shareUrl || null,\n        design2dUrl: data.design2dUrl || null,\n        shareMedia: data.shareMedia || null,\n        logoFiles: logoUrls\n      },\n      attachmentUrls: {\n        previewImage: data.previewUrl || null,\n        design2d: data.design2dUrl || null,\n        logoFiles: logoUrls,\n        uploads: [data.design2dUrl].filter(Boolean)\n      },\n      rawFields: rawFields\n    });\n  }\n\n  function readHoopSelectionFromDom(root) {\n    if (!root) return null;\n    const leftBox = root.querySelector('#swishcb-left-hoop');\n    const rightBox = root.querySelector('#swishcb-right-hoop');\n    const topBox = root.querySelector('#swishcb-top-hoop');\n    const bottomBox = root.querySelector('#swishcb-bottom-hoop');\n    if (!leftBox && !rightBox && !topBox && !bottomBox) return null;\n    return {\n      leftOn: !!(leftBox && leftBox.checked),\n      rightOn: !!(rightBox && rightBox.checked),\n      topOn: !!(topBox && topBox.checked),\n      bottomOn: !!(bottomBox && bottomBox.checked)\n    };\n  }\n\n  function readBorderSelectionFromDom(root, hoopSelection) {\n    if (!root) return null;\n    const hasSizeInputs = !!root.querySelector('#swishcb-left-border-size, #swishcb-right-border-size, #swishcb-top-border-size, #swishcb-bottom-border-size');\n    if (!hasSizeInputs) return null;\n    const borderSizePositive = (side) => {\n      const input = root.querySelector(`#swishcb-${side}-border-size`);\n      if (!input) return false;\n      const value = parseNumericInput(input.value);\n      return Number.isFinite(value) && value > 0;\n    };\n    return {\n      leftOn: borderSizePositive('left'),\n      rightOn: borderSizePositive('right'),\n      topOn: borderSizePositive('top'),\n      bottomOn: borderSizePositive('bottom')\n    };\n  }\n\n  function readOverhangsFromDom(root, unit) {\n    if (!root) return null;\n    const leftInput = root.querySelector('#swishcb-left-hoop-distance');\n    const rightInput = root.querySelector('#swishcb-right-hoop-distance');\n    const topInput = root.querySelector('#swishcb-top-hoop-distance');\n    const bottomInput = root.querySelector('#swishcb-bottom-hoop-distance');\n    if (!leftInput && !rightInput && !topInput && !bottomInput) return null;\n    const toMeters = (value) => {\n      const num = parseNumericInput(value);\n      if (!Number.isFinite(num)) return null;\n      if (unit === 'ft') return num / 3.28084;\n      return num / 100;\n    };\n    return {\n      left: toMeters(leftInput && leftInput.value),\n      right: toMeters(rightInput && rightInput.value),\n      top: toMeters(topInput && topInput.value),\n      bottom: toMeters(bottomInput && bottomInput.value)\n    };\n  }\n\n  function readHoopsModeFromDom(root) {\n    if (!root) return null;\n    const select = root.querySelector('#swishcb-hoops-mode');\n    return select ? select.value : null;\n  }\n\n  function formatNbaFourPointSelection(court) {\n    if (!court || String(court.ruleset || '').toUpperCase() !== 'NBA') return '';\n    const colors = court.detailColors || {};\n    const hidden = new Set(court.hiddenDetails || []);\n    const visibility = court.detailVisibility || {};\n    const selection = court.hoopSelection;\n    return ['left', 'right', 'top', 'bottom'].reduce((items, side) => {\n      const id = `${side}FourPointLine`;\n      const color = String(colors[id] || '').toUpperCase();\n      if (selection && !selection[`${side}On`]) return items;\n      if (hidden.has(id) || visibility[id] === false || !/^#[0-9A-F]{6}$/.test(color)) return items;\n      items.push(`${side.charAt(0).toUpperCase() + side.slice(1)} hoop (${color})`);\n      return items;\n    }, []).join(', ');\n  }\n\n  function buildSummary(payload, previewInfo, logoAttachInfo, contactValues, root) {\n    const lines = [];\n    const contact = contactValues || {};\n    const unit = payload.units || 'm';\n    const config = payload.config || null;\n    const shareData = payload.shareData || null;\n    const builderRoot = root || getRoot();\n    const isMultiCourt = String(payload.mode || payload.courtMode || '').toLowerCase() === 'multiple';\n\n    const resolveDimension = (raw, meters) => {\n      const trimmed = String(raw || '').trim();\n      const contactUnit = contact.units || unit;\n      const value = convertContactDimension(trimmed, contactUnit, unit);\n      if (value != null) return contactUnit === unit ? trimmed : fmt(value, 2);\n      if (Number.isFinite(meters)) {\n        const val = unit === 'ft' ? m2ft(meters) : meters;\n        return fmt(val, 2);\n      }\n      return '';\n    };\n    const widthValue = resolveDimension(contact.width, payload.widthM);\n    const lengthValue = resolveDimension(contact.length, payload.lengthM);\n    const fullName = `${String(contact.firstName || '').trim()} ${String(contact.lastName || '').trim()}`.trim();\n\n    const readSelectLabel = (selector) => {\n      if (!builderRoot) return '';\n      const select = builderRoot.querySelector(selector);\n      if (!select || !select.options || select.selectedIndex < 0) return '';\n      const option = select.options[select.selectedIndex];\n      if (!option) return '';\n      const value = String(option.value || '').trim();\n      const isPlaceholder = option.dataset && option.dataset.placeholder === '1';\n      if (isPlaceholder || !value) return '';\n      const label = String(option.textContent || '').trim();\n      return label || value;\n    };\n    const courtTypeLabel = isMultiCourt\n      ? 'Multiple Courts'\n      : (readSelectLabel('#court-xxx') || payload.courtType || (shareData && shareData.ct) || '-');\n    const sizePresetLabel = readSelectLabel('#court-preset') || 'Custom';\n    const colorPresetLabel = readSelectLabel('#color-preset') || 'Custom';\n    const hoopPresetLabel = readSelectLabel('#swishcb-hoop-preset') || (payload.hoopModelPreset || 'Custom');\n\n    const formatSelection = (sel) => {\n      if (!sel) return '-';\n      return `L ${sel.leftOn ? 'on' : 'off'} | R ${sel.rightOn ? 'on' : 'off'} | T ${sel.topOn ? 'on' : 'off'} | B ${sel.bottomOn ? 'on' : 'off'}`;\n    };\n    const formatView = () => {\n      if (!payload.view) return '-';\n      const mode = payload.view.mode ? String(payload.view.mode).toUpperCase() : '-';\n      const zoom = payload.view.zoom ?? '-';\n      const autoRotate = payload.view.autoRotate ? 'on' : 'off';\n      return `${mode} (zoom ${zoom}, auto-rotate ${autoRotate})`;\n    };\n    const formatBuffers = (buf) => {\n      if (!buf) return '-';\n      return `L ${fmtDistanceByUnit(buf.left, unit)} | R ${fmtDistanceByUnit(buf.right, unit)} | T ${fmtDistanceByUnit(buf.top, unit)} | B ${fmtDistanceByUnit(buf.bottom, unit)}`;\n    };\n    const formatTileCounts = () => {\n      const counts = payload.tileCounts || null;\n      if (!counts) return '-';\n      const series = payload.tileSeries || (payload.shareData && payload.shareData.ts) || '';\n      return `L ${counts.length ?? '-'} x W ${counts.width ?? '-'}${series ? ` (${series})` : ''}`;\n    };\n    const formatMeasurements = () => {\n      const measurements = payload.measurements && typeof payload.measurements === 'object'\n        ? payload.measurements\n        : null;\n      if (!measurements) return '-';\n      const order = ['total', 'keys', 'three', 'penalty', 'goal'];\n      return order\n        .filter((key) => Object.prototype.hasOwnProperty.call(measurements, key))\n        .map((key) => `${key}:${measurements[key] ? 'on' : 'off'}`)\n        .join(' | ') || '-';\n    };\n    const formatLineSize = () => {\n      const selected = payload.nonBasketballLineSizeMode || '-';\n      const effective = payload.nonBasketballLineSizeEffectiveMode || '-';\n      const geom = payload.nonBasketballLineSizeGeometry || null;\n      const target = geom && Number.isFinite(Number(geom.targetLengthM)) && Number.isFinite(Number(geom.targetWidthM))\n        ? ` | target L ${fmtDistanceByUnit(Number(geom.targetLengthM), unit)} x W ${fmtDistanceByUnit(Number(geom.targetWidthM), unit)}`\n        : '';\n      return `${selected} / effective ${effective}${target}`;\n    };\n    const formatHoopPoleBuffer = (buf) => {\n      if (!buf) return '-';\n      return `L ${fmtDistanceByUnit(buf.left, unit)} | R ${fmtDistanceByUnit(buf.right, unit)}`;\n    };\n    const formatOverhangs = (overhangs) => {\n      if (!overhangs) return '-';\n      return `L ${fmtDistanceByUnit(overhangs.left, unit)} | R ${fmtDistanceByUnit(overhangs.right, unit)} | T ${fmtDistanceByUnit(overhangs.top, unit)} | B ${fmtDistanceByUnit(overhangs.bottom, unit)}`;\n    };\n    const formatKeyDimensions = (keyDims) => {\n      if (!keyDims) return '-';\n      const length = fmtDistanceByUnit(keyDims.length, unit);\n      const width = fmtDistanceByUnit(keyDims.width, unit);\n      const mode = keyDims.manual ? 'custom' : 'default';\n      const ftRadius = Number.isFinite(Number(keyDims.freeThrowHalfCircleRadiusM))\n        ? ` | free-throw half-circle R ${fmtDistanceByUnit(keyDims.freeThrowHalfCircleRadiusM, unit)}`\n        : '';\n      return `L ${length} x W ${width} (${mode})${ftRadius}`;\n    };\n    const formatThreePointDistance = () => {\n      const source = payload.threePointDistance && typeof payload.threePointDistance === 'object'\n        ? payload.threePointDistance\n        : null;\n      const distance = source && Number.isFinite(Number(source.displayedM))\n        ? Number(source.displayedM)\n        : (Number.isFinite(Number(payload.threePointDistanceM)) ? Number(payload.threePointDistanceM) : null);\n      if (!Number.isFinite(distance)) return null;\n      const mode = source && source.manual ? 'custom' : 'default';\n      return `${fmtDistanceByUnit(distance, unit)} (${mode})`;\n    };\n    const formatGoalPostRadius = () => {\n      const source = payload.netballGoalPostM && typeof payload.netballGoalPostM === 'object'\n        ? payload.netballGoalPostM\n        : null;\n      const radius = source && Number.isFinite(source.radius)\n        ? source.radius\n        : (Number.isFinite(payload.goalPostRadiusM) ? payload.goalPostRadiusM : null);\n      if (!Number.isFinite(radius)) return null;\n      const mode = source && source.manual ? 'custom' : 'default';\n      return `${fmtDistanceByUnit(radius, unit)} (${mode})`;\n    };\n    const formatExtraSportsLines = () => {\n      const entries = (payload.extraSports && typeof payload.extraSports === 'object') ? payload.extraSports : {};\n      const order = ['fiba3', 'nba3', 'ncaa3', 'usahs3', 'tennis', 'pickleball', 'racquetball', 'padel', 'volleyball', 'shuffleboard', 'cornhole', 'futsal', 'netball'];\n      const extraIds = Array.from(new Set(order.concat(Object.keys(entries))));\n      return extraIds.map((id) => {\n        const entry = entries[id] || {};\n        const label = formatExtraIdForDisplay(id);\n        const enabled = !!entry.enabled;\n        if (!enabled) return `  - ${label}: off`;\n        const color = entry.color ? String(entry.color).toLowerCase() : '-';\n        const scaleValue = Number(entry.scale);\n        const rotationValue = Number(entry.rotation);\n        const offsetXValue = Number(entry.offsetX);\n        const offsetYValue = Number(entry.offsetY);\n        const scale = Number.isFinite(scaleValue) ? fmtTrim(scaleValue, 2) : '-';\n        if (Number.isFinite(rotationValue)) entry.rotation = rotationValue;\n        const rotation = Number.isFinite(entry.rotation) ? `${Math.round(entry.rotation)}\u00B0` : '-';\n        const offsetX = Number.isFinite(offsetXValue) ? fmtDistanceByUnit(offsetXValue, unit) : '-';\n        const offsetY = Number.isFinite(offsetYValue) ? fmtDistanceByUnit(offsetYValue, unit) : '-';\n        return `  - ${label}: on | color ${color} | scale ${scale} | rot ${rotation} | offset (${offsetX}, ${offsetY})`;\n      });\n    };\n    const readTextField = (entry, keys) => {\n      if (!entry || typeof entry !== 'object') return '';\n      for (let index = 0; index < keys.length; index += 1) {\n        const key = keys[index];\n        if (entry[key] != null && String(entry[key]).trim()) return entry[key];\n      }\n      return '';\n    };\n    const getTextEntriesForSummary = () => {\n      const sources = [\n        Array.isArray(payload.texts) ? payload.texts : [],\n        config && Array.isArray(config.texts) ? config.texts : [],\n        shareData && Array.isArray(shareData.txt) ? shareData.txt : []\n      ];\n      const source = sources.find((entries) => entries && entries.length) || [];\n      return source.filter((entry) => String(readTextField(entry, ['text', 't']) || '').trim());\n    };\n    const formatTextSummaryLine = (entry, idx) => {\n      const label = String(readTextField(entry, ['label']) || `Text ${idx + 1}`).trim();\n      const rawText = String(readTextField(entry, ['text', 't']) || '').replace(/\\s+/g, ' ').trim();\n      const displayText = rawText.length > 70 ? `${rawText.slice(0, 67)}...` : rawText;\n      const font = normalizeValue(readTextField(entry, ['font', 'f']));\n      const fontColor = normalizeValue(readTextField(entry, ['color', 'c']), '#000000');\n      const strokeColor = normalizeValue(readTextField(entry, ['strokeColor', 'sc', 'outlineColor', 'oc']), '#000000');\n      const strokeRaw = Number(readTextField(entry, ['strokeSize', 'ss', 'os']));\n      const xRaw = Number(readTextField(entry, ['x']));\n      const yRaw = Number(readTextField(entry, ['y']));\n      const scaleRaw = Number(readTextField(entry, ['scale', 's']));\n      const rotationRaw = Number(readTextField(entry, ['rotation', 'r']));\n      const strokeSize = Number.isFinite(strokeRaw) ? `${fmtTrim(strokeRaw, 2)}%` : '-';\n      const x = Number.isFinite(xRaw) ? fmtDistanceByUnit(xRaw, unit) : '-';\n      const y = Number.isFinite(yRaw) ? fmtDistanceByUnit(yRaw, unit) : '-';\n      const scale = Number.isFinite(scaleRaw) ? `${fmtTrim(scaleRaw * 100, 1)}%` : '-';\n      const rotation = Number.isFinite(rotationRaw) ? `${fmtTrim(rotationRaw, 1)} deg` : '-';\n      const customFontName = String(readTextField(entry, ['customFontName', 'fontName', 'cn']) || '').trim();\n      const customFontFile = String(readTextField(entry, ['customFontFileName', 'fontFileName', 'fn']) || '').trim();\n      const customFont = customFontName || customFontFile\n        ? ` | custom font ${normalizeValue([customFontName, customFontFile].filter(Boolean).join(' / '))}`\n        : '';\n      return `  - ${label}: \"${displayText}\" | font ${font} | font color ${fontColor} | stroke ${strokeColor} ${strokeSize} | pos (${x}, ${y}) | scale ${scale} | rot ${rotation}${customFont}`;\n    };\n\n    lines.push('Submission Summary:');\n    lines.push('Customer info');\n    lines.push(`- Court width: ${normalizeValue(widthValue)}`);\n    lines.push(`- Court length: ${normalizeValue(lengthValue)}`);\n    lines.push(`- Name: ${normalizeValue(fullName)}`);\n    lines.push(`- Email: ${normalizeValue(contact.email)}`);\n    lines.push(`- Phone: ${normalizeValue(contact.phone)}`);\n    lines.push(`- Shipping address: ${normalizeValue(contact.shipping)}`);\n    lines.push(`- Notes: ${normalizeValue(contact.notes)}`);\n    lines.push(`- Receive samples: ${normalizeValue(contact.receiveSamples)}`);\n\n    lines.push('');\n    lines.push('Court info');\n    lines.push(`- Court type: ${normalizeValue(courtTypeLabel)}`);\n    lines.push(`- Ruleset: ${normalizeValue(payload.ruleset || (config && config.ruleset))}`);\n    // Keep this optional feature ahead of verbose geometry so the short inquiry\n    // summary retains it when the full settings are delivered as an attachment.\n    const fourPointSelection = !isMultiCourt && formatNbaFourPointSelection(payload);\n    if (fourPointSelection) lines.push(`- NBA 4-point line: ${fourPointSelection}`);\n    lines.push(`- Size preset: ${normalizeValue(sizePresetLabel)}`);\n    lines.push(`- Units: ${normalizeValue(payload.units)}`);\n    lines.push(`- Footprint: L ${fmtMetersFeet(payload.lengthM)} x W ${fmtMetersFeet(payload.widthM)}`);\n    lines.push(`- Line size: ${formatLineSize()}`);\n    lines.push(`- Tile counts: ${formatTileCounts()}`);\n    lines.push(`- Measurements: ${formatMeasurements()}`);\n    if (isMultiCourt && Array.isArray(payload.courts)) {\n      lines.push('- Court mode: Multiple Courts');\n      lines.push(`- Courts: ${payload.courts.length}`);\n      payload.courts.forEach((court, idx) => {\n        const label = court && (court.courtTypeLabel || court.courtType || court.ruleset)\n          ? (court.courtTypeLabel || court.courtType || court.ruleset)\n          : 'Court';\n        const length = fmtDistanceByUnit(court && Number(court.lengthM), unit);\n        const width = fmtDistanceByUnit(court && Number(court.widthM), unit);\n        const x = fmtDistanceByUnit(court && Number(court.xM), unit);\n        const y = fmtDistanceByUnit(court && Number(court.yM), unit);\n        const selected = court && court.selected ? ' | selected' : '';\n        const threePoint = Number.isFinite(Number(court && court.threePointDistanceM))\n          ? ` | 3PT ${fmtDistanceByUnit(Number(court.threePointDistanceM), unit)}`\n          : '';\n        lines.push(`  - Court ${court && court.number ? court.number : idx + 1}: ${label} | L ${length} x W ${width} | pos (${x}, ${y})${threePoint}${selected}`);\n        const courtFourPointSelection = formatNbaFourPointSelection(court);\n        if (courtFourPointSelection) lines.push(`    NBA 4-point line: ${courtFourPointSelection}`);\n      });\n    }\n    if (config && config.playableBox) {\n      const pl = config.playableBox.length_m;\n      const pw = config.playableBox.width_m;\n      lines.push(`- Playable: L ${fmtMetersFeet(pl)} x W ${fmtMetersFeet(pw)}`);\n    }\n    if (config && config.buffers_m) {\n      lines.push(`- Buffers: ${formatBuffers(config.buffers_m)}`);\n    }\n    if (config && config.hoopPoleBuffer_m) {\n      lines.push(`- Hoop pole buffer: ${formatHoopPoleBuffer(config.hoopPoleBuffer_m)}`);\n    }\n    lines.push(`- Rotation: ${Number.isFinite(payload.rotation) ? `${Math.round(payload.rotation)}\u00B0` : '-'}`);\n    lines.push(`- Hoops: ${fmtHoopsMode(payload.hoopsMode)}`);\n    lines.push(`- Hoop selection: ${formatSelection(payload.hoopSelection)}`);\n    lines.push(`- Border boxes: ${formatSelection(payload.borderSelection)}`);\n    lines.push(`- Border sizes: ${formatBuffers(payload.borderSizesM)}`);\n    lines.push(`- Overhangs: ${formatOverhangs(payload.hoopOverhangsM)}`);\n    const goalPostRadius = formatGoalPostRadius();\n    if (goalPostRadius) {\n      lines.push(`- Goal Post radius: ${goalPostRadius}`);\n    } else {\n      lines.push(`- Key dimensions: ${formatKeyDimensions(payload.keyDimensionsM)}`);\n      lines.push(`- Key/match mode: ${normalizeValue(payload.keyDimensionsM && payload.keyDimensionsM.mode || payload.shareData && payload.shareData.kta)}`);\n      const threePointDistance = formatThreePointDistance();\n      if (threePointDistance) lines.push(`- 3-Point distance: ${threePointDistance}`);\n    }\n    lines.push(`- Hoop preset: ${normalizeValue(hoopPresetLabel, 'Custom')}`);\n    lines.push(`- View: ${formatView()}`);\n\n    lines.push('');\n    lines.push('Extra sports');\n    lines.push('- Extra sports:');\n    lines.push(...formatExtraSportsLines());\n\n    lines.push('');\n    lines.push('Colors');\n    lines.push(`- Colour preset: ${normalizeValue(colorPresetLabel)}`);\n    lines.push(`- Main: ${payload.colors && payload.colors.main ? payload.colors.main : '-'}`);\n    lines.push(`- Key: ${payload.colors && payload.colors.key ? payload.colors.key : '-'}`);\n    lines.push(`- Lines: ${payload.colors && payload.colors.lines ? payload.colors.lines : '-'}`);\n    lines.push(`- Border: ${payload.colors && payload.colors.border ? payload.colors.border : '-'}`);\n    lines.push(`- Edge: ${payload.colors && payload.colors.edge ? payload.colors.edge : '-'}`);\n    lines.push(`- Detail colors: ${fmtKeyValueList(payload.detailColors)}`);\n    lines.push(`- Detail visibility: ${fmtVisibilityOverrides(payload.detailVisibility)}`);\n    lines.push(`- Hidden detail ids: ${fmtHiddenList(payload.hiddenDetails)}`);\n\n    lines.push('');\n    lines.push('Logos');\n    if (Array.isArray(payload.logos) && payload.logos.length) {\n      lines.push(`- Logos: ${payload.logos.length}`);\n      payload.logos.forEach((logo, idx) => {\n        const logoUnit = payload.logoUnit || unit || 'm';\n        const w = fmtDistanceByUnit(logo.widthM, logoUnit);\n        const h = fmtDistanceByUnit(logo.heightM, logoUnit);\n        const x = fmtDistanceByUnit(logo.x, logoUnit);\n        const y = fmtDistanceByUnit(logo.y, logoUnit);\n        const scale = Number.isFinite(logo.scale) ? fmtTrim(logo.scale, 2) : '-';\n        const rotation = Number.isFinite(logo.rotation) ? `${Math.round(logo.rotation)}\u00B0` : '-';\n        const fileType = logo.fileType || '-';\n        const fileSize = fmtBytes(logo.fileSize);\n        lines.push(`  - Logo ${idx + 1}: ${logo.fileName || logo.label || 'Logo'} | ${w} x ${h} | pos (${x}, ${y}) | scale ${scale} | rot ${rotation} | bg ${logo.removeBgMode || 'none'} | file ${fileType} ${fileSize}`);\n      });\n    } else {\n      lines.push('- Logos: none');\n    }\n    lines.push(`- Logo attachments: ${logoAttachInfo && logoAttachInfo.summary ? logoAttachInfo.summary : 'none'}`);\n\n    lines.push('');\n    lines.push('Text');\n    const textEntries = getTextEntriesForSummary();\n    if (textEntries.length) {\n      lines.push(`- Text elements: ${textEntries.length}`);\n      textEntries.forEach((entry, idx) => {\n        lines.push(formatTextSummaryLine(entry, idx));\n      });\n    } else {\n      lines.push('- Text elements: none');\n    }\n\n    lines.push('');\n    lines.push('Links & preview');\n    lines.push(`- Share URL: ${normalizeValue(payload.shareUrl)}`);\n    lines.push(`- Page URL: ${normalizeValue(payload.pageUrl)}`);\n    lines.push(`- Preview image: ${previewInfo && previewInfo.summary ? previewInfo.summary : 'not included'}`);\n\n    if (logoAttachInfo && Array.isArray(logoAttachInfo.accepted) && logoAttachInfo.accepted.length) {\n      lines.push(`- Logo files attached: ${logoAttachInfo.accepted.join(', ')}`);\n    }\n    if (logoAttachInfo && Array.isArray(logoAttachInfo.skipped) && logoAttachInfo.skipped.length) {\n      lines.push(`- Logo files skipped: ${logoAttachInfo.skipped.join(', ')}`);\n    }\n    return lines.join('\\n');\n  }\n\n  async function pickPreview(api) {\n    if (!api || typeof api.getSnapshotData !== 'function') return null;\n    const attempts = [\n      {\n        maxWidth: 760,\n        maxHeight: 430,\n        renderWidth: 760,\n        renderHeight: 430,\n        renderAtMaxSize: true,\n        quality: 0.92,\n        type: 'image/png',\n        noRotation: true,\n        whiteBg: true,\n        saveStyle: true,\n        includeDataUrl: false\n      },\n      {\n        maxWidth: 520,\n        maxHeight: 300,\n        renderWidth: 520,\n        renderHeight: 300,\n        renderAtMaxSize: true,\n        quality: 0.92,\n        type: 'image/png',\n        noRotation: true,\n        whiteBg: true,\n        saveStyle: true,\n        includeDataUrl: false\n      }\n    ];\n    let best = null;\n    for (const attempt of attempts) {\n      const result = await api.getSnapshotData(attempt);\n      if (!result) continue;\n      best = result;\n      if (result.blob && result.blob.size <= MAX_PREVIEW_BYTES) return result;\n    }\n    return best;\n  }\n\n  async function pickPreviewData(api) {\n    if (!api || typeof api.getSnapshotData !== 'function') return null;\n    const attempts = [\n      {\n        maxWidth: 420,\n        maxHeight: 240,\n        renderWidth: 420,\n        renderHeight: 240,\n        renderAtMaxSize: true,\n        quality: 0.92,\n        type: 'image/png',\n        noRotation: true,\n        whiteBg: true,\n        saveStyle: true,\n        includeBlob: false\n      },\n      {\n        maxWidth: 280,\n        maxHeight: 160,\n        renderWidth: 280,\n        renderHeight: 160,\n        renderAtMaxSize: true,\n        quality: 0.92,\n        type: 'image/png',\n        noRotation: true,\n        whiteBg: true,\n        saveStyle: true,\n        includeBlob: false\n      }\n    ];\n    let best = null;\n    for (const attempt of attempts) {\n      const result = await api.getSnapshotData(attempt);\n      if (!result) continue;\n      best = result;\n      if (result.dataUrl && result.dataUrl.length <= MAX_PREVIEW_DATA_CHARS) return result;\n    }\n    return best;\n  }\n\n  function attachFiles(input, files) {\n    if (!input || !files || !files.length) return false;\n    try {\n      const wasDisabled = !!input.disabled;\n      if (wasDisabled) input.disabled = false;\n      const dt = new DataTransfer();\n      files.forEach((file) => dt.items.add(file));\n      input.files = dt.files;\n      const attached = !!(input.files && input.files.length > 0);\n      if (wasDisabled && !attached) input.disabled = true;\n      return attached;\n    } catch (_) {\n      return false;\n    }\n  }\n\n  async function handleSubmit(form, api, root, debugSession) {\n    if (form.dataset.swishcbContactSubmitting === '1') {\n      return { submitted: false, reason: 'busy' };\n    }\n    if (!form.checkValidity()) {\n      try { form.reportValidity(); } catch (_) {}\n      return { submitted: false, reason: 'invalid' };\n    }\n    form.dataset.swishcbContactSubmitting = '1';\n\n    try {\n      const payload = buildPayload(api, form, root);\n      if (debugSession) debugSession.mark('payload-built');\n\n      const submissionNotes = [];\n      const bodyField = ensureHiddenTextarea(form, '#swishcb-contact-body', {\n        id: 'swishcb-contact-body',\n        name: 'contact[body]',\n        hidden: ''\n      });\n      const summaryField = ensureHiddenTextarea(form, '#swishcb-contact-summary', {\n        id: 'swishcb-contact-summary',\n        name: 'contact[Court Summary]',\n        hidden: ''\n      });\n      const detailsField = ensureHiddenTextarea(form, '#swishcb-contact-details', {\n        id: 'swishcb-contact-details',\n        name: 'contact[Court Details JSON]',\n        hidden: ''\n      });\n      const previewUploadField = ensureHiddenTextarea(form, '#swishcb-contact-preview-upload', {\n        id: 'swishcb-contact-preview-upload',\n        name: 'contact[2D Preview Image]',\n        hidden: ''\n      });\n      const logoUploadField = ensureHiddenTextarea(form, '#swishcb-contact-logo-upload', {\n        id: 'swishcb-contact-logo-upload',\n        name: 'contact[Logo Files]',\n        hidden: ''\n      });\n      const pageUrlField = ensureField(form, '#swishcb-contact-page-url', 'input', {\n        id: 'swishcb-contact-page-url',\n        type: 'hidden',\n        name: 'contact[Page URL]'\n      });\n      const shareUrlField = ensureField(form, '#swishcb-contact-share-url', 'input', {\n        id: 'swishcb-contact-share-url',\n        type: 'hidden',\n        name: 'contact[Share URL]'\n      });\n      const exactPreviewUrlField = ensureField(form, '#swishcb-contact-exact-preview-url', 'input', {\n        id: 'swishcb-contact-exact-preview-url',\n        type: 'hidden',\n        name: 'contact[Exact Preview URL]'\n      });\n      const design2dUrlField = ensureField(form, '#swishcb-contact-design-2d-url', 'input', {\n        id: 'swishcb-contact-design-2d-url',\n        type: 'hidden',\n        name: 'contact[2D Design Image]'\n      });\n      const configField = form.querySelector('#swishcb-contact-config');\n      const previewUrlField = form.querySelector('#swishcb-contact-preview');\n      const previewDataField = form.querySelector('#swishcb-contact-preview-data');\n      const previewFileInput = form.querySelector('#swishcb-contact-preview-file');\n      const logoInput = form.querySelector('#swishcb-contact-logo-files');\n      const uploadEndpoint = buildUploadEndpoint();\n\n      resetGeneratedField(previewUploadField);\n      resetGeneratedField(logoUploadField);\n      if (previewDataField) {\n        setFieldValue(previewDataField, '');\n        previewDataField.disabled = true;\n      }\n      clearFileInput(previewFileInput);\n      clearFileInput(logoInput);\n      if (debugSession) {\n        debugSession.mark('upload-endpoint-ready', {\n          available: !!uploadEndpoint\n        });\n      }\n\n      const preview = await pickPreview(api);\n      if (debugSession) {\n        debugSession.mark('preview-picked', {\n          available: !!(preview && preview.blob),\n          bytes: preview && preview.blob ? preview.blob.size : null\n        });\n      }\n      let previewUploadedUrl = '';\n      let previewUploadReason = '';\n      if (preview && preview.blob) {\n        if (preview.blob.size > MAX_PREVIEW_BYTES) {\n          previewUploadReason = `preview exceeded ${fmtBytes(MAX_PREVIEW_BYTES)}`;\n          appendSubmissionNote(\n            submissionNotes,\n            `The generated 2D preview image was omitted because it exceeded ${fmtBytes(MAX_PREVIEW_BYTES)}.`\n          );\n        } else if (!uploadEndpoint) {\n          previewUploadReason = 'upload unavailable';\n          appendSubmissionNote(\n            submissionNotes,\n            'The generated 2D preview image was omitted because file uploads are unavailable on this page.'\n          );\n        } else {\n          setStatusMessage(form, 'Uploading preview image...', false);\n          try {\n            previewUploadedUrl = await uploadFile(\n              uploadEndpoint,\n              preview.blob,\n              'swish-court-preview.png'\n            );\n          } catch (error) {\n            previewUploadReason = 'upload failed';\n            appendSubmissionNote(\n              submissionNotes,\n              `The generated 2D preview image could not be uploaded: ${(error && error.message) || 'Upload failed.'}`\n            );\n          }\n        }\n      }\n      const submittedPreviewUrl = omitOversizedValue(\n        previewUploadedUrl,\n        MAX_CONTACT_SHARE_URL_CHARS,\n        'Preview URL',\n        submissionNotes\n      );\n      setFieldSubmissionValue(previewUploadField, submittedPreviewUrl);\n      if (debugSession) {\n        debugSession.mark('preview-upload-processed', {\n          uploaded: !!submittedPreviewUrl,\n          reason: previewUploadReason || null\n        });\n      }\n\n      const logoFiles = Array.isArray(payload.logoFiles) ? payload.logoFiles : [];\n      const acceptedLogos = [];\n      const skippedLogos = [];\n      const uploadedLogoLines = [];\n      let totalLogoBytes = 0;\n      const previewBytes = preview && preview.blob ? Math.min(preview.blob.size, MAX_PREVIEW_BYTES) : 0;\n      const logoBudget = Math.max(0, Math.min(MAX_TOTAL_LOGO_BYTES, MAX_TOTAL_ATTACHMENT_BYTES - previewBytes));\n      const FileCtor = (typeof File === 'function') ? File : null;\n      logoFiles.forEach((file) => {\n        if (!file || (FileCtor && !(file instanceof FileCtor))) return;\n        if (file.size > MAX_LOGO_FILE_BYTES) {\n          skippedLogos.push(`${file.name} (too large)`);\n          return;\n        }\n        if (totalLogoBytes + file.size > logoBudget) {\n          skippedLogos.push(`${file.name} (total limit)`);\n          return;\n        }\n        acceptedLogos.push(file);\n        totalLogoBytes += file.size;\n      });\n\n      if (acceptedLogos.length && !uploadEndpoint) {\n        appendSubmissionNote(\n          submissionNotes,\n          'Logo files were omitted because file uploads are unavailable on this page.'\n        );\n        acceptedLogos.forEach((file) => skippedLogos.push(`${file.name} (upload unavailable)`));\n      } else {\n        for (let index = 0; index < acceptedLogos.length; index += 1) {\n          const file = acceptedLogos[index];\n          setStatusMessage(form, `Uploading logo files (${index + 1}/${acceptedLogos.length})...`, false);\n          try {\n            const uploadedUrl = await uploadFile(uploadEndpoint, file, file.name || `logo-${index + 1}.bin`);\n            uploadedLogoLines.push(`${file.name}: ${uploadedUrl}`);\n          } catch (error) {\n            skippedLogos.push(`${file.name} (upload failed)`);\n            appendSubmissionNote(\n              submissionNotes,\n              `Logo file \"${file.name}\" could not be uploaded: ${(error && error.message) || 'Upload failed.'}`\n            );\n          }\n        }\n      }\n\n      const submittedLogoLines = trimTextForField(\n        uploadedLogoLines.join('\\n'),\n        MAX_CONTACT_UPLOAD_FIELD_CHARS,\n        'Logo Files'\n      );\n      setFieldSubmissionValue(logoUploadField, submittedLogoLines);\n      if (debugSession) {\n        debugSession.mark('logos-processed', {\n          uploaded: uploadedLogoLines.length,\n          skipped: skippedLogos.length\n        });\n      }\n\n      const previewInfo = {\n        summary: submittedPreviewUrl\n          ? `uploaded (${Math.round(((preview && preview.blob && preview.blob.size) || 0) / 1024)} KB)`\n          : (previewUploadReason ? `omitted (${previewUploadReason})` : 'not included'),\n        width: preview ? preview.width : null,\n        height: preview ? preview.height : null,\n        type: preview ? preview.type : null,\n        bytes: preview && preview.blob ? preview.blob.size : null\n      };\n\n      const logoAttachInfo = {\n        summary: uploadedLogoLines.length\n          ? `${uploadedLogoLines.length} uploaded${skippedLogos.length ? `, ${skippedLogos.length} skipped` : ''}`\n          : (acceptedLogos.length ? `0 uploaded, ${skippedLogos.length || acceptedLogos.length} skipped` : 'none'),\n        accepted: uploadedLogoLines.map((line) => line.split(': ')[0]),\n        skipped: skippedLogos\n      };\n\n      const shareMediaInfo = await prepareInquiryShareMedia(\n        api,\n        uploadEndpoint,\n        form,\n        submissionNotes,\n        debugSession\n      );\n      const design2dUrl = shareMediaInfo && shareMediaInfo.design2d\n        ? String(shareMediaInfo.design2d.publicUrl || shareMediaInfo.design2d.uploadedUrl || '').trim()\n        : '';\n      if (shareMediaInfo && shareMediaInfo.exactPreviewUrl) {\n        payload.shareUrl = shareMediaInfo.exactPreviewUrl;\n      }\n      if (shareMediaInfo && shareMediaInfo.shareHash) {\n        payload.shareHash = shareMediaInfo.shareHash;\n      }\n      if (shareMediaInfo && shareMediaInfo.shareData) {\n        payload.shareData = shareMediaInfo.shareData;\n      }\n      if (shareMediaInfo && shareMediaInfo.logoManifestUrl) {\n        payload.logoManifestUrl = shareMediaInfo.logoManifestUrl;\n      }\n\n      const submittedPageUrl = omitOversizedValue(\n        getCanonicalPageUrl(payload.pageUrl),\n        MAX_CONTACT_PAGE_URL_CHARS,\n        'Page URL',\n        submissionNotes\n      ) || getCanonicalPageUrl();\n      const submittedExactPreviewUrl = omitOversizedValue(\n        (shareMediaInfo && shareMediaInfo.exactPreviewUrl) || payload.shareUrl,\n        MAX_CONTACT_SHARE_URL_CHARS,\n        'Exact Preview URL',\n        submissionNotes\n      );\n      const submittedShareUrl = omitOversizedValue(\n        submittedExactPreviewUrl || payload.shareUrl,\n        MAX_CONTACT_SHARE_URL_CHARS,\n        'Share URL',\n        submissionNotes\n      );\n      const submittedDesign2dUrl = omitOversizedValue(\n        design2dUrl,\n        MAX_CONTACT_SHARE_URL_CHARS,\n        '2D Design Image',\n        submissionNotes\n      );\n      const submittedConfig = omitOversizedValue(\n        payload.configRaw,\n        MAX_CONTACT_CONFIG_CHARS,\n        'Court Config',\n        submissionNotes\n      );\n\n      setFieldSubmissionValue(pageUrlField, submittedPageUrl);\n      setFieldSubmissionValue(shareUrlField, submittedShareUrl);\n      setFieldSubmissionValue(exactPreviewUrlField, submittedExactPreviewUrl || submittedShareUrl);\n      setFieldSubmissionValue(design2dUrlField, submittedDesign2dUrl);\n      setFieldSubmissionValue(previewUrlField, submittedPreviewUrl);\n      setFieldSubmissionValue(configField, submittedConfig);\n\n      const contactValues = {\n        units: getContactUnits(form) || payload.units || 'm',\n        width: readFormValue(form, '#swishcb-contact-width'),\n        length: readFormValue(form, '#swishcb-contact-length'),\n        shipping: readFormValue(form, '#swishcb-contact-address'),\n        firstName: readFormValue(form, '#swishcb-contact-first'),\n        lastName: readFormValue(form, '#swishcb-contact-last'),\n        email: readFormValue(form, '#swishcb-contact-email'),\n        phone: readFormValue(form, '#swishcb-contact-phone'),\n        notes: readFormValue(form, '#swishcb-contact-notes'),\n        receiveSamples: fmtYesNo(readFormCheckbox(form, '#swishcb-contact-samples'))\n      };\n      const standardNameField = ensureField(form, '#swishcb-contact-name', 'input', {\n        id: 'swishcb-contact-name',\n        type: 'hidden',\n        name: 'contact[name]'\n      });\n      const standardPhoneField = ensureField(form, '#swishcb-contact-phone-standard', 'input', {\n        id: 'swishcb-contact-phone-standard',\n        type: 'hidden',\n        name: 'contact[phone]'\n      });\n      setFieldSubmissionValue(\n        standardNameField,\n        [contactValues.firstName, contactValues.lastName].filter(Boolean).join(' ').trim()\n      );\n      setFieldSubmissionValue(standardPhoneField, contactValues.phone);\n      const uploadedLogoUrls = uploadedLogoLines\n        .map(function (line) {\n          const parts = String(line).split(': ');\n          return parts.length > 1 ? parts.slice(1).join(': ').trim() : '';\n        })\n        .filter(Boolean);\n      const fullBuilderPayload = buildFullBuilderPayload(payload, {\n        uploadedLogoUrls,\n        previewUrl: submittedPreviewUrl,\n        design2dUrl: submittedDesign2dUrl,\n        exactPreviewUrl: submittedExactPreviewUrl || submittedShareUrl\n      });\n      const settingsIndex = buildSettingsIndex(fullBuilderPayload);\n      const details = {\n        schema: 'swish-court-builder-contact-details',\n        schemaVersion: 2,\n        completeness: {\n          fullCanonicalPayloadIncluded: true,\n          settingsIndexIncluded: true,\n          shopifyFieldMayBeLong: true,\n          binaryLogoFilesRepresentedAsMetadata: true\n        },\n        timestamp: payload.timestamp || null,\n        pageUrl: payload.pageUrl || submittedPageUrl || null,\n        submittedPageUrl: submittedPageUrl || null,\n        shareUrl: payload.shareUrl || submittedShareUrl || null,\n        submittedShareUrl: submittedShareUrl || null,\n        exactPreviewUrl: submittedExactPreviewUrl || submittedShareUrl || null,\n        shareHash: payload.shareHash || null,\n        shareData: payload.shareData || null,\n        settingsIndex,\n        fullBuilderPayload,\n        courtType: payload.courtType || null,\n        ruleset: payload.ruleset || null,\n        mode: payload.mode || payload.courtMode || 'single',\n        selectedCourtId: payload.selectedCourtId || null,\n        totalSurfaceM: payload.totalSurfaceM || null,\n        courts: Array.isArray(payload.courts) ? payload.courts : [],\n        units: payload.units || null,\n        lengthM: payload.lengthM ?? null,\n        widthM: payload.widthM ?? null,\n        rotation: payload.rotation ?? null,\n        measurements: payload.measurements || null,\n        nonBasketballLineSizeMode: payload.nonBasketballLineSizeMode || null,\n        nonBasketballLineSizeEffectiveMode: payload.nonBasketballLineSizeEffectiveMode || null,\n        nonBasketballLineSizeGeometry: payload.nonBasketballLineSizeGeometry || null,\n        tilesEnabled: payload.tilesEnabled ?? null,\n        tileSeries: payload.tileSeries || (payload.shareData && payload.shareData.ts) || null,\n        tileEdges: payload.tileEdges || null,\n        tileEdgeMask: payload.tileEdgeMask ?? null,\n        tileEdgeSizeM: payload.tileEdgeSizeM ?? null,\n        tileCounts: payload.tileCounts || null,\n        tileFootprintM: payload.tileFootprintM || null,\n        tileMaterialCounts: payload.tileMaterialCounts || null,\n        tileMaterialOwnership: payload.tileMaterialOwnership || null,\n        installedSurfaceM: payload.installedSurfaceM || null,\n        edgeColors: payload.edgeColors || null,\n        colors: payload.colors || null,\n        detailColors: payload.detailColors || null,\n        hiddenDetails: payload.hiddenDetails || [],\n        detailVisibility: payload.detailVisibility || null,\n        extraSports: payload.extraSports || null,\n        hoopOverhangsM: payload.hoopOverhangsM || null,\n        hoopOverhangEditedSides: payload.hoopOverhangEditedSides || [],\n        keyTileAlignment: payload.keyTileAlignment || (payload.shareData && payload.shareData.kta) || null,\n        overlayKeysLinkedToBase: payload.overlayKeysLinkedToBase ?? null,\n        keyDimensionsM: payload.keyDimensionsM || null,\n        keyDimensionsDisplay: payload.keyDimensionsDisplay || null,\n        centerCircleDiameterM: payload.centerCircleDiameterM ?? null,\n        centerCircleDiameter: payload.centerCircleDiameter || null,\n        centerCircleDiameterDisplay: payload.centerCircleDiameterDisplay || null,\n        threePointDistanceM: payload.threePointDistanceM ?? null,\n        threePointDistance: payload.threePointDistance || null,\n        threePointDistanceDisplay: payload.threePointDistanceDisplay || null,\n        futsalMode: payload.futsalMode || null,\n        futsalPlayingAreaM: payload.futsalPlayingAreaM || null,\n        futsalPenaltyAreaM: payload.futsalPenaltyAreaM || null,\n        futsalPlayingAreaDisplay: payload.futsalPlayingAreaDisplay || null,\n        futsalPenaltyAreaDisplay: payload.futsalPenaltyAreaDisplay || null,\n        netballPlayingAreaM: payload.netballPlayingAreaM || null,\n        netballGoalPostM: payload.netballGoalPostM || null,\n        netballPlayingAreaDisplay: payload.netballPlayingAreaDisplay || null,\n        netballGoalPostDisplay: payload.netballGoalPostDisplay || null,\n        goalPostRadiusM: payload.goalPostRadiusM ?? null,\n        hoopModelPreset: payload.hoopModelPreset || null,\n        hoopPresetGeometry: payload.hoopPresetGeometry || null,\n        hoopsMode: payload.hoopsMode || null,\n        hoopLineType: payload.hoopLineType || null,\n        hoopSelection: payload.hoopSelection || null,\n        borderSelection: payload.borderSelection || null,\n        borderSizesM: payload.borderSizesM || null,\n        view: payload.view || null,\n        officialGeometry: payload.officialGeometry || null,\n        basketballPaintGeometry: payload.basketballPaintGeometry || null,\n        surfaceSettings: payload.surfaceSettings || null,\n        config: payload.config || null,\n        configRaw: payload.configRaw || null,\n        logos: payload.logos || [],\n        texts: payload.texts || [],\n        logoFiles: fullBuilderPayload.logoFiles || [],\n        logoUnit: payload.logoUnit || 'm',\n        logoManifestUrl: payload.logoManifestUrl || null,\n        uploadedLogoUrls,\n        shareMedia: {\n          exactPreviewUrl: submittedExactPreviewUrl || submittedShareUrl || null,\n          shareHash: payload.shareHash || null,\n          logoManifestUrl: payload.logoManifestUrl || null,\n          errors: shareMediaInfo && Array.isArray(shareMediaInfo.errors) ? shareMediaInfo.errors : [],\n          design2d: shareMediaInfo ? shareMediaInfo.design2d : null\n        },\n        preview: {\n          width: previewInfo.width || null,\n          height: previewInfo.height || null,\n          type: previewInfo.type || null,\n          bytes: previewInfo.bytes || null,\n          uploadedUrl: submittedPreviewUrl || null\n        },\n        design2d: Object.assign({}, (shareMediaInfo && shareMediaInfo.design2d) || {}, {\n          uploadedUrl: submittedDesign2dUrl || null\n        }),\n        attachments: logoAttachInfo\n      };\n      let detailsJson = '';\n      try {\n        detailsJson = JSON.stringify(details);\n      } catch (_) {\n        detailsJson = '';\n      }\n      if (getTextLength(detailsJson) > MAX_CONTACT_DETAILS_CHARS) {\n        let detailsUploadUrl = '';\n        if (uploadEndpoint) {\n          try {\n            setStatusMessage(form, 'Uploading full court settings JSON...', false);\n            detailsUploadUrl = await uploadJsonFile(uploadEndpoint, detailsJson, 'swish-court-builder-settings.json');\n          } catch (error) {\n            detailsUploadUrl = '';\n            appendSubmissionNote(\n              submissionNotes,\n              `The full Court Details JSON could not be uploaded separately: ${(error && error.message) || 'Upload failed.'}`\n            );\n          }\n        }\n        if (detailsUploadUrl) {\n          details.fullSettingsJsonUrl = detailsUploadUrl;\n          details.completeness.fullSettingsJsonUploaded = true;\n          appendSubmissionNote(\n            submissionNotes,\n            `Full Court Details JSON was included in the form and also uploaded here: ${detailsUploadUrl}`\n          );\n          try { detailsJson = JSON.stringify(details); } catch (_) {}\n        } else {\n          appendSubmissionNote(\n            submissionNotes,\n            `Full Court Details JSON is included in the hidden form field even though it exceeds the legacy ${MAX_CONTACT_DETAILS_CHARS} character target.`\n          );\n        }\n      }\n\n      const summaryPayload = Object.assign({}, payload, {\n        pageUrl: submittedPageUrl,\n        shareUrl: submittedShareUrl\n      });\n      const summary = buildSummary(summaryPayload, previewInfo, logoAttachInfo, contactValues, root);\n      const notesBlock = buildSubmissionNotesBlock(submissionNotes);\n      const summaryWithNotes = notesBlock\n        ? `${notesBlock.trim()}\\n\\n${summary}`\n        : summary;\n      const submittedBody = trimTextForField(summaryWithNotes, MAX_CONTACT_BODY_CHARS, 'Contact message');\n      const submittedSummary = trimTextForField(summaryWithNotes, MAX_CONTACT_SUMMARY_CHARS, 'Court Summary');\n\n      setFieldSubmissionValue(bodyField, submittedBody);\n      setFieldSubmissionValue(summaryField, submittedSummary);\n      setFieldSubmissionValue(detailsField, detailsJson);\n      if (debugSession) {\n        debugSession.mark('fields-populated', {\n          bodyLength: bodyField.value ? bodyField.value.length : 0,\n          summaryLength: summaryField.value ? summaryField.value.length : 0,\n          detailsLength: detailsField.value ? detailsField.value.length : 0\n        });\n      }\n      let intakeResult = null;\n      try {\n        intakeResult = await submitBuilderIntake(root, form, payload, {\n          contactValues: contactValues,\n          details: details,\n          pageUrl: submittedPageUrl,\n          previewUrl: submittedPreviewUrl,\n          exactPreviewUrl: submittedExactPreviewUrl || submittedShareUrl,\n          design2dUrl: submittedDesign2dUrl,\n          shareMedia: {\n            exactPreviewUrl: submittedExactPreviewUrl || submittedShareUrl || null,\n            design2d: shareMediaInfo ? shareMediaInfo.design2d : null,\n            errors: shareMediaInfo && Array.isArray(shareMediaInfo.errors) ? shareMediaInfo.errors : []\n          },\n          shareUrl: submittedShareUrl,\n          summary: submittedSummary,\n          logoUrls: uploadedLogoUrls\n        });\n        if (intakeResult && intakeResult.ok) {\n          if (debugSession) debugSession.mark('swish-intake-posted');\n        } else {\n          const reason = intakeResult && (intakeResult.reason || intakeResult.error || (intakeResult.result && intakeResult.result.error));\n          throw new Error(reason || 'The inquiry intake endpoint did not confirm delivery.');\n        }\n      } catch (error) {\n        if (debugSession) {\n          debugSession.mark('swish-intake-failed', {\n            message: String((error && error.message) || error || 'Unknown intake error')\n          });\n        }\n        try { console.warn('[Swish Court Builder] Intake post failed.', error); } catch (_) {}\n        throw new Error('We could not send your message right now. Please try again in a moment.');\n      }\n\n      clearStatusMessage(form);\n      setStatusMessage(form, 'Thanks. Your court inquiry has been sent.', false);\n      setSubmittingState(form, false);\n\n      if (debugSession) debugSession.mark('submit-complete-via-swish-intake');\n      const submitResult = {\n        protected: false,\n        method: 'swish-system-intake',\n        nativeContact: false,\n        intakePosted: !!(intakeResult && intakeResult.ok)\n      };\n      publishContactSuccess(form, root, submitResult);\n      return {\n        submitted: true,\n        submitResult\n      };\n    } finally {\n      form.dataset.swishcbContactSubmitting = '0';\n    }\n  }\n\n  const boundContactForms = new WeakSet();\n\n  function init() {\n    const root = getRoot();\n    const form = getContactForm(root);\n    if (!form) return;\n    if (boundContactForms.has(form)) return;\n    boundContactForms.add(form);\n    form.dataset.swishcbContactBound = '1';\n\n    const primeFields = () => {\n      prepareNativeContactPost(form);\n      const pageUrlField = ensureField(form, '#swishcb-contact-page-url', 'input', {\n        id: 'swishcb-contact-page-url',\n        type: 'hidden',\n        name: 'contact[Page URL]'\n      });\n      const shareUrlField = ensureField(form, '#swishcb-contact-share-url', 'input', {\n        id: 'swishcb-contact-share-url',\n        type: 'hidden',\n        name: 'contact[Share URL]'\n      });\n      const exactPreviewUrlField = ensureField(form, '#swishcb-contact-exact-preview-url', 'input', {\n        id: 'swishcb-contact-exact-preview-url',\n        type: 'hidden',\n        name: 'contact[Exact Preview URL]'\n      });\n      const design2dUrlField = ensureField(form, '#swishcb-contact-design-2d-url', 'input', {\n        id: 'swishcb-contact-design-2d-url',\n        type: 'hidden',\n        name: 'contact[2D Design Image]'\n      });\n      const previewUrlField = form.querySelector('#swishcb-contact-preview');\n      const bodyField = ensureHiddenTextarea(form, '#swishcb-contact-body', {\n        id: 'swishcb-contact-body',\n        name: 'contact[body]',\n        hidden: ''\n      });\n      const payload = buildPrimePayload(form, root);\n      const fallbackPageUrl = getCanonicalPageUrl(payload.pageUrl);\n      const shareUrl = payload.shareUrl || payload.pageUrl || ((typeof window !== 'undefined' && window.location) ? window.location.href : fallbackPageUrl);\n      ensureBuilderMetadataFields(\n        root,\n        form,\n        fallbackPageUrl,\n        (typeof window !== 'undefined' && window.location) ? window.location.origin : ''\n      );\n      setFieldSubmissionValue(pageUrlField, fallbackPageUrl);\n      setFieldSubmissionValue(shareUrlField, shareUrl);\n      setFieldSubmissionValue(exactPreviewUrlField, shareUrl);\n      setFieldSubmissionValue(design2dUrlField, '');\n      setFieldValue(previewUrlField, '');\n      if (previewUrlField) previewUrlField.disabled = true;\n      if (bodyField) {\n        setFieldValue(bodyField, '');\n        bodyField.disabled = false;\n      }\n\n      const previewFileInput = form.querySelector('#swishcb-contact-preview-file');\n      const logoInput = form.querySelector('#swishcb-contact-logo-files');\n      clearFileInput(previewFileInput);\n      clearFileInput(logoInput);\n    };\n    let primeTimers = [];\n    const clearPrimeTimers = () => {\n      try {\n        primeTimers.forEach((timer) => window.clearTimeout(timer));\n      } catch (_) {}\n      primeTimers = [];\n    };\n    const queuePrimeFields = (delay) => {\n      const timer = window.setTimeout(() => {\n        primeTimers = primeTimers.filter((value) => value !== timer);\n        try { primeFields(); } catch (_) {}\n      }, delay);\n      primeTimers.push(timer);\n    };\n    const schedulePrimeFields = () => {\n      clearPrimeTimers();\n      queuePrimeFields(0);\n      queuePrimeFields(80);\n      queuePrimeFields(350);\n      queuePrimeFields(1200);\n      queuePrimeFields(2400);\n    };\n\n    let contactSubmissionPending = false;\n    const onSubmit = async (event) => {\n      event.preventDefault();\n      if (contactSubmissionPending || form.dataset.swishcbContactSubmitting === '1') return;\n      if (!form.checkValidity()) {\n        try { form.reportValidity(); } catch (_) {}\n        return;\n      }\n      contactSubmissionPending = true;\n\n      const debugSession = createDebugSession();\n      let submitted = false;\n\n      try {\n        applyContactDimensionsToBuilder(form, root);\n        clearStatusMessage(form);\n        setSubmittingState(form, true);\n        publishContactSubmissionStarted(form, root);\n        debugSession.mark('submit-intercepted');\n        const api = await waitForApi(2000);\n        debugSession.mark('api-ready', {\n          available: !!api\n        });\n        const submission = await handleSubmit(form, api, root, debugSession);\n        if (submission && submission.submitted) {\n          submitted = true;\n          publishDebugSession(debugSession, {\n            status: 'submitted',\n            submitResult: submission.submitResult || null\n          });\n        } else {\n          if (submission && submission.reason === 'invalid') {\n            setStatusMessage(form, 'Please complete the required fields and try again.', true);\n          }\n          publishDebugSession(debugSession, {\n            status: 'skipped',\n            reason: (submission && submission.reason) || 'unknown'\n          });\n        }\n      } catch (error) {\n        publishContactSubmissionFailed(form, root, error);\n        setStatusMessage(\n          form,\n          (error && error.message) || 'We could not send your message right now. Please try again.',\n          true\n        );\n        publishDebugSession(debugSession, { status: 'failed' }, error);\n      } finally {\n        contactSubmissionPending = false;\n        if (!submitted) {\n          setSubmittingState(form, false);\n        }\n      }\n    };\n\n    let contactDimensionTimer = null;\n    const syncContactDimensionUnits = (convertExistingValues) => {\n      const units = getContactUnits(form) || 'm';\n      const previousUnits = form.dataset.swishcbContactUnits || units;\n      if (convertExistingValues && previousUnits !== units) {\n        ['#swishcb-contact-width', '#swishcb-contact-length'].forEach((selector) => {\n          const field = form.querySelector(selector);\n          const value = field ? parsePositiveContactDimension(field.value) : null;\n          if (!field || !value) return;\n          const converted = previousUnits === 'm' && units === 'ft'\n            ? value * 3.280839895013123\n            : value * 0.3048;\n          field.value = fmtTrim(converted, units === 'ft' ? 2 : 4);\n        });\n      }\n      form.dataset.swishcbContactUnits = units;\n      ['#swishcb-contact-width', '#swishcb-contact-length'].forEach((selector) => {\n        const field = form.querySelector(selector);\n        const wrap = field && field.closest ? field.closest('[data-unit]') : null;\n        if (wrap) wrap.dataset.unit = units;\n      });\n      form.querySelectorAll('[data-swishcb-contact-unit-select]').forEach((select) => {\n        if (select.value !== units) select.value = units;\n      });\n    };\n    const syncContactDimensions = (immediate) => {\n      if (contactDimensionTimer !== null) {\n        window.clearTimeout(contactDimensionTimer);\n        contactDimensionTimer = null;\n      }\n      const apply = () => {\n        contactDimensionTimer = null;\n        applyContactDimensionsToBuilder(form, root);\n      };\n      if (immediate) apply();\n      else contactDimensionTimer = window.setTimeout(apply, 120);\n    };\n    ['#swishcb-contact-width', '#swishcb-contact-length'].forEach((selector) => {\n      const field = form.querySelector(selector);\n      if (!field) return;\n      field.addEventListener('input', () => syncContactDimensions(false));\n      field.addEventListener('change', () => syncContactDimensions(true));\n      field.addEventListener('blur', () => syncContactDimensions(true));\n    });\n    form.querySelectorAll('input[name=\"swishcb-contact-units\"]').forEach((radio) => {\n      radio.addEventListener('change', () => {\n        if (!radio.checked) return;\n        syncContactDimensionUnits(true);\n        form.dataset.swishcbAppliedContactDimensions = '';\n        syncContactDimensions(true);\n      });\n    });\n    form.querySelectorAll('[data-swishcb-contact-unit-select]').forEach((select) => {\n      select.addEventListener('change', () => {\n        const units = String(select.value || '').toLowerCase() === 'ft' ? 'ft' : 'm';\n        const radio = form.querySelector(`input[name=\"swishcb-contact-units\"][value=\"${units}\"]`);\n        if (!radio) return;\n        if (!radio.checked) {\n          radio.checked = true;\n          radio.dispatchEvent(new Event('change', { bubbles: true }));\n          return;\n        }\n        syncContactDimensionUnits(false);\n        form.dataset.swishcbAppliedContactDimensions = '';\n        syncContactDimensions(true);\n      });\n    });\n    syncContactDimensionUnits(false);\n\n    if (isContactTestMode()) {\n      window.__swishcbContactTest = {\n        primeFields,\n        buildPayload: () => buildPayload(getApi(), form, root),\n        submitForTest: async (options) => {\n          const opts = options && typeof options === 'object' ? options : {};\n          const previousCaptcha = window.SwishShopifyCaptcha;\n          const previousIntake = window.SwishSystemIntake;\n          const previousPrepareShareAssets = window.SwishCourtBuilder && window.SwishCourtBuilder.prepareContactShareAssets;\n          let capturedCaptcha = null;\n          let capturedIntake = null;\n\n          const makeFieldSnapshot = () => {\n            const fields = {};\n            try {\n              Array.from(new FormData(form).entries()).forEach(([key, value]) => {\n                fields[key] = typeof value === 'string' ? value : '[file]';\n              });\n            } catch (_) {}\n            return fields;\n          };\n\n          if (opts.stubSubmit !== false) {\n            window.SwishShopifyCaptcha = {\n              ...previousCaptcha,\n              shouldAllowNativeSubmit: () => false,\n              submitForm: async (_form, submitOptions) => {\n                capturedCaptcha = {\n                  options: submitOptions ? { timeoutMs: submitOptions.timeoutMs || null } : null,\n                  fields: makeFieldSnapshot()\n                };\n                return { protected: false, method: 'test-stub' };\n              }\n            };\n          }\n\n          if (opts.stubIntake !== false) {\n            window.SwishSystemIntake = {\n              ensureIntakeIdField: (_form) => {\n                let field = _form.querySelector('input[name=\"contact[Intake ID]\"]');\n                if (!field) {\n                  field = document.createElement('input');\n                  field.type = 'hidden';\n                  field.name = 'contact[Intake ID]';\n                  _form.appendChild(field);\n                }\n                field.value = opts.intakeId || 'swishcb-contact-test';\n                return field.value;\n              },\n              postThemePayload: async (_root, payload) => {\n                capturedIntake = payload;\n                return { ok: true, stubbed: true };\n              }\n            };\n          }\n\n          if (opts.stubShareMedia !== false && window.SwishCourtBuilder) {\n            window.SwishCourtBuilder.prepareContactShareAssets = async () => ({\n              ok: true,\n              shareUrl: opts.exactPreviewUrl || 'https://swishcourt.com/pages/fiba-basketball-court-flooring#swishcb=v=4&ct=fiba&u=m&l=32&w=19&view=3d',\n              shareHash: '#swishcb=v=4&ct=fiba&u=m&l=32&w=19&view=3d',\n              shareData: { v: '4', ct: 'fiba', u: 'm', l: 32, w: 19, view: '3d' },\n              logoManifestUrl: opts.logoManifestUrl || '',\n              design2d: {\n                mode: '2d',\n                kind: 'image',\n                fileName: 'swish-court-2d-design.png',\n                mimeType: 'image/png',\n                width: 1600,\n                height: 900,\n                publicUrl: opts.design2dUrl || 'https://cdn.shopify.com/s/files/test/swish-court-2d-design.png'\n              },\n              errors: []\n            });\n          }\n\n          const debugSession = createDebugSession();\n          debugSession.mark('test-submit-start');\n\n          try {\n            const api = await waitForApi(Number(opts.timeoutMs) || 2000);\n            debugSession.mark('api-ready', { available: !!api });\n            const submission = await handleSubmit(form, api, root, debugSession);\n            publishDebugSession(debugSession, {\n              status: submission && submission.submitted ? 'submitted' : 'skipped',\n              reason: submission && submission.reason ? submission.reason : null,\n              submitResult: submission && submission.submitResult ? submission.submitResult : null\n            });\n\n            const detailsField = form.querySelector('#swishcb-contact-details');\n            const summaryField = form.querySelector('#swishcb-contact-summary');\n            const bodyField = form.querySelector('#swishcb-contact-body');\n            const detailsJson = detailsField ? String(detailsField.value || '') : '';\n            let details = null;\n            try { details = detailsJson ? JSON.parse(detailsJson) : null; } catch (_) { details = null; }\n\n            return {\n              submission,\n              debug: window.__swishcbContactLastSubmission || null,\n              details,\n              detailsJson,\n              detailsLength: detailsJson.length,\n              summary: summaryField ? String(summaryField.value || '') : '',\n              body: bodyField ? String(bodyField.value || '') : '',\n              capturedCaptcha,\n              capturedIntake\n            };\n          } finally {\n            if (opts.restoreGlobals !== false) {\n              window.SwishShopifyCaptcha = previousCaptcha;\n              window.SwishSystemIntake = previousIntake;\n              if (window.SwishCourtBuilder) {\n                if (previousPrepareShareAssets) {\n                  window.SwishCourtBuilder.prepareContactShareAssets = previousPrepareShareAssets;\n                } else {\n                  try { delete window.SwishCourtBuilder.prepareContactShareAssets; } catch (_) {\n                    window.SwishCourtBuilder.prepareContactShareAssets = undefined;\n                  }\n                }\n              }\n            }\n          }\n        }\n      };\n    }\n\n    primeFields();\n    window.setTimeout(() => { try { primeFields(); } catch (_) {} }, 250);\n    window.setTimeout(() => { try { primeFields(); } catch (_) {} }, 1000);\n    clearStatusMessage(form);\n    root.addEventListener('input', schedulePrimeFields, true);\n    root.addEventListener('change', schedulePrimeFields, true);\n    window.addEventListener('hashchange', schedulePrimeFields);\n    window.addEventListener('swish:ruleset-changed', schedulePrimeFields);\n    window.addEventListener('swish:dimensions-changed', schedulePrimeFields);\n    window.addEventListener('swish:units-changed', schedulePrimeFields);\n    window.addEventListener('swish:dimension-display-changed', schedulePrimeFields);\n    window.addEventListener('swish:builder-state-changed', schedulePrimeFields);\n    form.addEventListener('submit', onSubmit, true);\n\n    const submitButton = form.querySelector('button[type=\"submit\"], input[type=\"submit\"]');\n    if (submitButton) {\n      submitButton.addEventListener('click', onSubmit, true);\n    }\n  }\n\n  if (!HAS_DOM) {\n    if (typeof module !== 'undefined' && module.exports) {\n      module.exports = { shouldGeneratePreviewData };\n    }\n    return;\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init, { once: true });\n  } else {\n    init();\n  }\n\n  if (typeof MutationObserver !== 'undefined') {\n    let initTimer = null;\n    const observer = new MutationObserver(() => {\n      if (typeof window === 'undefined') return;\n      if (initTimer !== null) return;\n      initTimer = window.setTimeout(() => {\n        initTimer = null;\n        init();\n      }, 0);\n    });\n    observer.observe(document.documentElement, { childList: true, subtree: true });\n  }\n})();\n"],
  "mappings": "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",
  "names": []
}
