{
  "version": 3,
  "sources": ["/cdn/shop/t/258/assets/swishcb-product-summary.js?swishcb=20260915-1"],
  "sourcesContent": ["(() => {\n  const SUMMARY_SELECTOR = '[data-swishcb-product-summary]';\n  const METERS_PER_FOOT = 0.3048;\n  const STANDARD_CONTACT_TITLE = 'Contact Us';\n  const STANDARD_CONTACT_DESCRIPTION = 'Fill out the contact form, and our team will respond within 24 hours to help you set up your court at no additional cost.';\n  const TWO_HOOP_CONTACT_DESCRIPTION = 'Send us your court dimensions, and our team will get back to you within 24 hours with personalized support and total costs.';\n  const LARGE_COURT_CONTACT_TITLE = 'Get Pricing';\n  const LARGE_COURT_CONTACT_DESCRIPTION = 'Receive the total cost for your custom-designed sports court by sending us the required dimensions and your shipping address. We\u2019ll respond within 24 hours.';\n\n  const cleanText = (value) => String(value || '').replace(/\\s+/g, ' ').trim();\n\n  const numberValue = (input) => {\n    const value = Number(String(input?.value || '').replace(',', '.'));\n    return Number.isFinite(value) ? value : 0;\n  };\n\n  const formatMoney = (amount, currencyCode) => {\n    const currency = String(currencyCode || 'EUR').toUpperCase();\n    const locale = document.documentElement.lang || (currency === 'USD' ? 'en-US' : 'en-IE');\n    return `${window.SwishCBPricing.formatTotal(amount, currency, locale)} ${currency}`;\n  };\n\n  const setText = (root, selector, value) => {\n    const element = root.querySelector(selector);\n    const nextValue = value || '\u2014';\n    if (element && element.textContent !== nextValue) element.textContent = nextValue;\n  };\n\n  const selectedText = (select) => {\n    if (!select) return '\u2014';\n    return cleanText(select.selectedOptions?.[0]?.textContent || select.options?.[select.selectedIndex]?.textContent);\n  };\n\n  const sourceUnit = (input, fallback) => input?.closest('[data-unit]')?.dataset.unit || fallback;\n\n  const inputMeters = (input, fallbackUnit = 'm') => {\n    const value = numberValue(input);\n    const unit = String(sourceUnit(input, fallbackUnit) || fallbackUnit).toLowerCase();\n    if (unit === 'ft') return value * METERS_PER_FOOT;\n    if (unit === 'in') return value * 0.0254;\n    if (unit === 'cm') return value / 100;\n    return value;\n  };\n\n  const round = (value, places = 4) => {\n    const factor = 10 ** places;\n    return Math.round((Number(value) + Number.EPSILON) * factor) / factor;\n  };\n\n  const getBuilderPayload = () => {\n    try {\n      const payload = window.SwishCourtBuilder?.getContactPayload?.();\n      return payload && typeof payload === 'object' ? payload : {};\n    } catch (_) {\n      return {};\n    }\n  };\n\n  const formatValue = (input, fallbackUnit) => {\n    const value = cleanText(input?.value);\n    return value ? `${value} ${sourceUnit(input, fallbackUnit)}` : '\u2014';\n  };\n\n  const isActiveOverhang = (input) => {\n    const row = input.closest('[data-hoop-distance-row]');\n    return Boolean(\n      row &&\n        !row.hidden &&\n        row.getAttribute('aria-hidden') !== 'true' &&\n        row.dataset.swishcbLayoutHidden !== 'true'\n    );\n  };\n\n  const activeOverhangInputs = (builder) => {\n    const inputs = Array.from(builder.querySelectorAll('[data-hoop-distance]'));\n    const active = inputs.filter(isActiveOverhang);\n    return active.length ? active : inputs.slice(0, 1);\n  };\n\n  const renderColor = (summary, builder, key, sourceSelector, options = {}) => {\n    const row = summary.querySelector(`[data-swishcb-summary-color-row=\"${key}\"]`);\n    const source = builder.querySelector(sourceSelector);\n    if (!row || !source || options.visible === false) {\n      if (row) row.hidden = true;\n      return;\n    }\n\n    const labelElement = row.querySelector('[data-swishcb-summary-color-label]') || row.firstElementChild;\n    if (labelElement && options.label && labelElement.textContent !== options.label) labelElement.textContent = options.label;\n    const value = String(source.value || '').toUpperCase();\n    row.hidden = false;\n    const swatch = row.querySelector('[data-swishcb-summary-color-swatch]');\n    if (swatch) swatch.style.backgroundColor = value;\n    const hex = row.querySelector('[data-swishcb-summary-color-hex]');\n    if (hex && hex.textContent !== (value || '\u2014')) hex.textContent = value || '\u2014';\n    const button = row.querySelector('[data-swishcb-summary-color-button]');\n    if (button) {\n      const label = cleanText(row.firstElementChild?.textContent) || key;\n      button.setAttribute('aria-label', `Change ${label} color, currently ${value || 'not set'}`);\n    }\n  };\n\n  const getCourtData = (builder) => {\n    const payload = getBuilderPayload();\n    const widthInput = builder.querySelector('#swishcb-width');\n    const lengthInput = builder.querySelector('#swishcb-length');\n    const unitSelect = builder.querySelector('[data-swishcb-unit-select]');\n    const checkedUnit = builder.querySelector('input[name=\"swishcb-units\"]:checked');\n    const selectedUnit = cleanText(unitSelect?.value || checkedUnit?.value || payload.units || sourceUnit(widthInput, 'm')).toLowerCase();\n    const widthM = Number(payload.widthM) > 0 ? Number(payload.widthM) : inputMeters(widthInput);\n    const lengthM = Number(payload.lengthM) > 0 ? Number(payload.lengthM) : inputMeters(lengthInput);\n    const installedSurface = payload.installedSurfaceM && typeof payload.installedSurfaceM === 'object'\n      ? payload.installedSurfaceM\n      : {};\n    const installedWidthM = Number(installedSurface.width_m ?? installedSurface.width);\n    const installedLengthM = Number(installedSurface.length_m ?? installedSurface.length);\n    const type = builder.querySelector('#court-xxx');\n    const series = builder.querySelector('#swishcb-tile-series');\n    const hoopSelection = payload.hoopSelection && typeof payload.hoopSelection === 'object'\n      ? payload.hoopSelection\n      : null;\n    const hoopCount = ['left', 'right', 'top', 'bottom'].filter((side) =>\n      hoopSelection ? Boolean(hoopSelection[`${side}On`]) : Boolean(builder.querySelector(`#swishcb-${side}-hoop`)?.checked)\n    ).length;\n    return {\n      payload,\n      hoopCount,\n      widthInput,\n      lengthInput,\n      widthM,\n      lengthM,\n      // The product title describes the shipped/installed court, so it must\n      // include the active tile series' outer edge pieces. Keep widthM and\n      // lengthM as the builder footprint because pricing and editable fields\n      // intentionally use those values.\n      titleWidthM: installedWidthM > 0 ? installedWidthM : widthM,\n      titleLengthM: installedLengthM > 0 ? installedLengthM : lengthM,\n      displayUnit: selectedUnit === 'ft' ? 'ft' : 'm',\n      sport: cleanText(payload.courtType || type?.value),\n      sportLabel: selectedText(type),\n      seriesId: cleanText(payload.tileSeries || series?.value),\n      seriesLabel: selectedText(series)\n    };\n  };\n\n  const isBasketballCourt = (courtData) => {\n    const sportId = normalizeSportId(courtData?.sport);\n    const configuredCourtType = (window.SwishCBConfig?.COURT_TYPES || []).find((courtType) => (\n      normalizeSportId(courtType?.id) === sportId\n    ));\n    return configuredCourtType?.basketball === true\n      || ['basketball', 'fiba', 'nba', 'ncaa', 'usahs'].includes(sportId);\n  };\n\n  const installedCourtAreaM2 = (builder, courtData) => {\n    const orderingArea = Number(builder?.dataset?.swishcbOrderAreaM2);\n    if (Number.isFinite(orderingArea) && orderingArea > 0) return orderingArea;\n\n    const widthM = inputMeters(courtData?.widthInput || builder?.querySelector('#swishcb-width'));\n    const lengthM = inputMeters(courtData?.lengthInput || builder?.querySelector('#swishcb-length'));\n    return widthM > 0 && lengthM > 0 ? widthM * lengthM : 0;\n  };\n\n  const syncLargeCourtPresentation = (summary, builder, courtData) => {\n    const areaM2 = installedCourtAreaM2(builder, courtData);\n    const requiresCustomPricing = courtData.seriesId.startsWith('hardwood') || Boolean(\n      window.SwishCBCustomSurface?.sanitize(courtData.payload?.customSurface)\n    );\n    const showTwoHoopIntro = builder.dataset.swishcbConfigurator !== 'cards' && isBasketballCourt(courtData) && courtData.hoopCount === 2\n      && builder.classList.contains('swishcb--summary-advanced')\n      && !builder.classList.contains('swishcb--preview-order-card')\n      && builder.dataset.swishcbRuntimeMode !== 'order-editor';\n    const productInfo = summary.closest('product-info');\n    const contactPanel = builder.querySelector('details[data-swishcb-panel=\"contact\"]');\n    const contactSummary = contactPanel?.querySelector(':scope > summary');\n    const contactTitle = contactSummary?.querySelector('.swishcb__panel-title');\n    const contactDescription = contactPanel?.querySelector(':scope > .swishcb__panel__content .swishcb__hint--intro');\n    const value = requiresCustomPricing ? 'true' : 'false';\n    if (productInfo) productInfo.dataset.swishcbV2LargeCourt = value;\n    builder.dataset.swishcbV2LargeCourt = value;\n    builder.dataset.swishcbV2InstalledAreaM2 = areaM2 > 0 ? String(round(areaM2, 4)) : '';\n    const nextContactTitle = requiresCustomPricing ? LARGE_COURT_CONTACT_TITLE : STANDARD_CONTACT_TITLE;\n    const nextContactDescription = showTwoHoopIntro\n      ? TWO_HOOP_CONTACT_DESCRIPTION\n      : requiresCustomPricing ? LARGE_COURT_CONTACT_DESCRIPTION : STANDARD_CONTACT_DESCRIPTION;\n    if (contactTitle && contactTitle.textContent !== nextContactTitle) contactTitle.textContent = nextContactTitle;\n    if (contactDescription && contactDescription.textContent !== nextContactDescription) contactDescription.textContent = nextContactDescription;\n    if (contactPanel) {\n      // Hiding the disclosure must leave the form accessible. Remember its\n      // prior state so changing back to another hoop count restores it.\n      if (showTwoHoopIntro && contactPanel.dataset.swishcbTwoHoopIntro !== 'true') {\n        contactPanel.dataset.swishcbContactPreviousCollapsed = contactPanel.dataset.swishcbSummaryCollapsed || 'true';\n        contactPanel.dataset.swishcbTwoHoopIntro = 'true';\n      } else if (!showTwoHoopIntro && contactPanel.dataset.swishcbTwoHoopIntro === 'true') {\n        contactPanel.dataset.swishcbSummaryCollapsed = contactPanel.dataset.swishcbContactPreviousCollapsed || 'true';\n        if (contactSummary) contactSummary.setAttribute('aria-expanded', contactPanel.dataset.swishcbSummaryCollapsed === 'true' ? 'false' : 'true');\n        delete contactPanel.dataset.swishcbContactPreviousCollapsed;\n        delete contactPanel.dataset.swishcbTwoHoopIntro;\n      }\n      if (requiresCustomPricing || showTwoHoopIntro) {\n        contactPanel.dataset.swishcbV2ForcedOpen = 'true';\n        contactPanel.dataset.swishcbSummaryCollapsed = 'false';\n        contactPanel.open = true;\n        if (contactSummary) contactSummary.setAttribute('aria-expanded', 'true');\n      } else {\n        delete contactPanel.dataset.swishcbV2ForcedOpen;\n      }\n    }\n    return requiresCustomPricing;\n  };\n\n  const ensureBasketballMeasurementDefaults = (builder, courtData) => {\n    const sportId = normalizeSportId(courtData?.sport);\n    if (!isBasketballCourt(courtData)) {\n      delete builder.dataset.swishcbV2BasketballMeasurementsFor;\n      return;\n    }\n    if (builder.dataset.swishcbV2BasketballMeasurementsFor === sportId) return;\n    builder.dataset.swishcbV2BasketballMeasurementsFor = sportId;\n    // Defaults must not replace measurement choices from a shared design or\n    // a customer who has already used the measurement checkboxes.\n    if (builder.__swishcbHasSharedMeasurementSelection || builder.__swishcbMeasurementSelectionTouched) return;\n\n    const none = builder.querySelector('#swishcb-measurements-none');\n    const required = [builder.querySelector('#swishcb-measurements-total')].filter(Boolean);\n    if (none) none.checked = false;\n    required.forEach((input) => {\n      if (input.checked) return;\n      input.checked = true;\n      input.dispatchEvent(new Event('change', { bubbles: true }));\n    });\n  };\n\n  const calculatePricing = (builder, courtData = getCourtData(builder)) => {\n    if (!(courtData.widthM > 0) || !(courtData.lengthM > 0)) return null;\n    if (!['elastic', 'elite', 'large-elite'].includes(courtData.seriesId)) return null;\n    // Use the checkout quote, including its physical tile footprint, market,\n    // configured artwork allowance/rate and optional hoop purchase. A second\n    // calculator here can drift from the amount submitted by Order Now.\n    const pricing = window.SwishCB?.ordering?.getPricing?.(builder);\n    return pricing?.series === courtData.seriesId ? pricing : null;\n  };\n\n  const renderPrice = (summary, builder, courtData, pricing) => {\n    const productInfo = summary.closest('product-info');\n    const priceElement = productInfo?.querySelector('[data-swishcb-product-price]');\n    if (!priceElement) return;\n    const orderState = window.SwishCB?.ordering?.getState?.(builder);\n    if (!orderState) return;\n    const needsSeries = !courtData.seriesId || courtData.seriesId === 'none';\n    const needsQuote = courtData.seriesId.startsWith('hardwood') || orderState?.eligible === false;\n    const hasPrice = Boolean(pricing && Number.isFinite(Number(pricing.total)) && !needsSeries && !needsQuote);\n    const payment = window.SwishCB?.ordering?.getPayment?.(builder, pricing);\n    const value = needsSeries\n      ? 'Select a tile series to see the price.'\n      : !(courtData.widthM > 0 && courtData.lengthM > 0)\n        ? 'Enter your court dimensions to see the price.'\n        : needsQuote\n          ? 'Contact us for pricing.'\n          : hasPrice ? formatMoney(payment?.dueNow ?? Number(pricing.total), pricing.currencyCode) : 'Price unavailable. Please try again.';\n    if (priceElement.textContent !== value) priceElement.textContent = value;\n    priceElement.dataset.swishcbPriceState = hasPrice ? 'ready' : needsSeries ? 'needs-series' : needsQuote ? 'quote' : 'unavailable';\n    priceElement.closest('[role=\"status\"]')?.setAttribute('aria-label', hasPrice ? `${payment?.plan === 'deposit-30' ? 'First payment, 30% deposit' : 'Calculated court total'} ${value}` : value);\n    const chooseSeries = productInfo.querySelector('[data-swishcb-product-price-select-series]');\n    if (chooseSeries) chooseSeries.hidden = !needsSeries;\n    const checkout = productInfo.querySelector('[data-swishcb-v2-secure-checkout]');\n    if (checkout && !checkout.classList.contains('loading') && checkout.getAttribute('aria-busy') !== 'true') {\n      const disabled = !hasPrice || !orderState?.purchasable;\n      if (checkout.disabled !== disabled) checkout.disabled = disabled;\n      checkout.setAttribute('aria-disabled', String(disabled));\n    }\n    window.SwishCBSidebar?.refreshReview(builder);\n  };\n\n  const formatFeet = (meters) => {\n    if (!(Number(meters) > 0)) return '';\n    const feet = Number(meters) / METERS_PER_FOOT;\n    if (!Number.isFinite(feet)) return '';\n    if (Math.abs(feet - Math.round(feet)) < 0.005) return String(Math.round(feet));\n    return feet.toFixed(2).replace(/\\.?0+$/, '');\n  };\n\n  const formatMeters = (meters) => {\n    if (!(Number(meters) > 0)) return '';\n    const value = Number(meters);\n    if (!Number.isFinite(value)) return '';\n    if (Math.abs(value - Math.round(value)) < 0.0005) return String(Math.round(value));\n    return value.toFixed(3).replace(/\\.?0+$/, '');\n  };\n\n  const normalizeSportId = (value) => {\n    const normalized = cleanText(value)\n      .toLowerCase()\n      .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n      .replace(/[^a-z0-9]+/g, '-')\n      .replace(/^-+|-+$/g, '');\n    const aliases = {\n      'us-highschool': 'usahs',\n      'us-high-school': 'usahs',\n      'usa-highschool': 'usahs',\n      'usa-high-school': 'usahs',\n      'high-school': 'usahs',\n      hs: 'usahs',\n      'us-highschool3': 'usahs3',\n      'us-high-school-3': 'usahs3',\n      'usa-high-school-3': 'usahs3',\n      'high-school-3': 'usahs3'\n    };\n    return aliases[normalized] || normalized;\n  };\n\n  const SPORT_AREA_COLOR_LABELS = Object.freeze({\n    basketball: Object.freeze({ main: 'Main court', key: 'Key' }),\n    fiba: Object.freeze({ main: 'Main court', key: 'Key' }),\n    nba: Object.freeze({ main: 'Main court', key: 'Key' }),\n    ncaa: Object.freeze({ main: 'Main court', key: 'Key' }),\n    usahs: Object.freeze({ main: 'Main court', key: 'Key' }),\n    usahs3: Object.freeze({ main: 'Main court', key: 'Key' }),\n    tennis: Object.freeze({ main: 'Backcourt & alleys', key: 'Service courts' }),\n    pickleball: Object.freeze({ main: 'Service courts', key: 'Kitchen' }),\n    padel: Object.freeze({ main: 'Backcourts', key: 'Service boxes' }),\n    volleyball: Object.freeze({ main: 'Back zones', key: 'Front zones' }),\n    shuffleboard: Object.freeze({ main: 'Scoring areas', key: 'Details' }),\n    cornhole: Object.freeze({ main: 'Boards & lanes', key: 'Details' }),\n    futsal: Object.freeze({ main: 'Court halves', key: 'Penalty areas' }),\n    netball: Object.freeze({ main: 'Thirds', key: 'Goal circles' }),\n    racquetball: Object.freeze({ main: 'Racquetball court', key: 'Service zone' })\n  });\n\n  const sportAreaColorLabels = (sport) => (\n    SPORT_AREA_COLOR_LABELS[normalizeSportId(sport)] || { main: 'Main court', key: 'Secondary court areas' }\n  );\n\n  const SPORT_TITLE_LABELS = Object.freeze({\n    basketball: 'Basketball',\n    fiba: 'FIBA Basketball',\n    nba: 'NBA Basketball',\n    ncaa: 'NCAA Basketball',\n    usahs: 'High School Basketball',\n    tennis: 'Tennis',\n    pickleball: 'Pickleball',\n    racquetball: 'Racquetball',\n    padel: 'Padel',\n    volleyball: 'Volleyball',\n    shuffleboard: 'Shuffleboard',\n    cornhole: 'Cornhole',\n    futsal: 'Futsal',\n    netball: 'Netball'\n  });\n\n  const getExtraSportDefinition = (extraId) => {\n    const config = window.SwishCBConfig || {};\n    try {\n      if (typeof config.getExtraLineTypeDefinition === 'function') {\n        const definition = config.getExtraLineTypeDefinition(extraId);\n        if (definition) return definition;\n      }\n    } catch (_) {}\n    const definitions = Array.isArray(config.EXTRA_LINE_TYPES) ? config.EXTRA_LINE_TYPES : [];\n    const wanted = normalizeSportId(extraId);\n    return definitions.find((definition) => normalizeSportId(definition?.id) === wanted) || null;\n  };\n\n  const sportTitleLabel = (sportId, fallbackLabel = '') => {\n    let id = normalizeSportId(sportId);\n    const basketballExtraIds = {\n      fiba3: 'fiba',\n      'fiba-3': 'fiba',\n      nba3: 'nba',\n      'nba-3': 'nba',\n      ncaa3: 'ncaa',\n      'ncaa-3': 'ncaa',\n      usahs3: 'usahs',\n      'usahs-3': 'usahs'\n    };\n    id = basketballExtraIds[id] || id;\n    const repeatedBaseId = id.replace(/-\\d+$/, '');\n    if (SPORT_TITLE_LABELS[repeatedBaseId]) id = repeatedBaseId;\n    if (SPORT_TITLE_LABELS[id]) return SPORT_TITLE_LABELS[id];\n\n    const fallback = cleanText(fallbackLabel)\n      .replace(/\\s+lines?$/i, '')\n      .replace(/\\s+3[- ]point$/i, '')\n      .replace(/\\s+court$/i, '');\n    return fallback || cleanText(id.replace(/[-_]+/g, ' ').replace(/\\b\\w/g, (letter) => letter.toUpperCase()));\n  };\n\n  const enabledExtraSportLabels = (courtData) => {\n    const payload = courtData?.payload && typeof courtData.payload === 'object' ? courtData.payload : {};\n    const config = payload.config && typeof payload.config === 'object' ? payload.config : {};\n    const entries = payload.extraSports && typeof payload.extraSports === 'object'\n      ? payload.extraSports\n      : (payload.extras && typeof payload.extras === 'object'\n        ? payload.extras\n        : (config.extras && typeof config.extras === 'object' ? config.extras : {}));\n    const layerOrder = Array.isArray(payload.extraSportLayerOrder)\n      ? payload.extraSportLayerOrder.slice()\n      : (Array.isArray(config.extraSportLayerOrder) ? config.extraSportLayerOrder.slice() : []);\n\n    Object.keys(entries).forEach((id) => {\n      if (!layerOrder.includes(id)) layerOrder.push(id);\n    });\n\n    return layerOrder.reduce((labels, id) => {\n      const entry = entries[id];\n      if (!(entry === true || entry?.enabled === true)) return labels;\n      const definition = getExtraSportDefinition(id);\n      const baseId = normalizeSportId(definition?.instanceOf || definition?.id || id);\n      const rulesetId = normalizeSportId(definition?.ruleset);\n      const label = sportTitleLabel(baseId || rulesetId || id, definition?.label || id);\n      if (label && !labels.some((existing) => existing.toLowerCase() === label.toLowerCase())) labels.push(label);\n      return labels;\n    }, []);\n  };\n\n  const joinSportLabels = (labels) => {\n    if (labels.length <= 1) return labels[0] || '';\n    if (labels.length === 2) return `${labels[0]} and ${labels[1]}`;\n    return `${labels.slice(0, -1).join(', ')}, and ${labels[labels.length - 1]}`;\n  };\n\n  const dynamicCourtTitle = (courtData) => {\n    const displayUnit = courtData.displayUnit === 'ft' ? 'ft' : 'm';\n    const widthM = Number(courtData.titleWidthM) > 0 ? Number(courtData.titleWidthM) : courtData.widthM;\n    const lengthM = Number(courtData.titleLengthM) > 0 ? Number(courtData.titleLengthM) : courtData.lengthM;\n    const width = displayUnit === 'ft' ? formatFeet(widthM) : formatMeters(widthM);\n    const length = displayUnit === 'ft' ? formatFeet(lengthM) : formatMeters(lengthM);\n    const primarySport = sportTitleLabel(courtData.sport, courtData.sportLabel);\n    const sports = [primarySport, ...enabledExtraSportLabels(courtData)].filter((label, index, labels) => (\n      label && labels.findIndex((item) => item.toLowerCase() === label.toLowerCase()) === index\n    ));\n    const dimensions = width && length ? `${width} \u00D7 ${length} ${displayUnit} ` : '';\n    const sportsLabel = joinSportLabels(sports);\n    return `Order Your ${dimensions}Court${sportsLabel ? ` with ${sportsLabel} Lines` : ''}`;\n  };\n\n  const SPORT_DESCRIPTION_LABELS = Object.freeze({\n    basketball: 'basketball',\n    fiba: 'FIBA basketball',\n    nba: 'NBA basketball',\n    ncaa: 'NCAA basketball',\n    usahs: 'high school basketball',\n    tennis: 'tennis',\n    pickleball: 'pickleball',\n    racquetball: 'racquetball',\n    padel: 'padel',\n    volleyball: 'volleyball',\n    shuffleboard: 'shuffleboard',\n    cornhole: 'cornhole',\n    futsal: 'futsal',\n    netball: 'netball'\n  });\n\n  const dynamicCourtDescription = (courtData, configuredDescription = '') => {\n    const sportId = normalizeSportId(courtData.sport);\n    const fallback = cleanText(courtData.sportLabel || courtData.sport)\n      .replace(/\\s+court$/i, '')\n      .toLowerCase();\n    const sportLabel = SPORT_DESCRIPTION_LABELS[sportId] || fallback || 'custom sports';\n    const configured = cleanText(configuredDescription);\n    if (isBasketballCourt(courtData) && /^Get your custom basketball court\\b/i.test(configured)) {\n      return configured;\n    }\n    return `Get your custom ${sportLabel} court with a few clicks. Review the measurements, colors, and logos, then proceed to checkout. Once your court arrives, simply assemble it on a solid surface like a large puzzle.`;\n  };\n\n  const renderDynamicTitle = (summary, courtData) => {\n    const builder = summary.closest('#swish-court-builder');\n    const generatedTitle = dynamicCourtTitle(courtData);\n    const title = builder?.dataset.swishcbConfigurator === 'cards'\n      ? `Order Your ${sportTitleLabel(courtData.sport, courtData.sportLabel) || 'Custom Sports'} Court`\n      : builder?.classList.contains('swishcb--three-court-card')\n      ? generatedTitle.replace(/^Order Your\\s+/i, '')\n      : generatedTitle;\n    summary.closest('product-info')?.querySelectorAll('[data-swishcb-dynamic-product-title]').forEach((element) => {\n      if (element.textContent !== title) element.textContent = title;\n    });\n    if (builder?.dataset.swishcbConfigurator === 'cards') {\n      const heading = builder.querySelector('.product__info-container > .product__title');\n      if (heading && !heading.parentElement.querySelector(':scope > .swishcb__intro')) {\n        const intro = document.createElement('p');\n        intro.className = 'product__text swishcb__intro';\n        intro.textContent = 'Choose any court dimensions, select any colors, and add your logos.';\n        heading.after(intro);\n      }\n    }\n    return title;\n  };\n\n  const renderDynamicDescription = (summary, courtData) => {\n    const elements = Array.from(summary.closest('product-info')?.querySelectorAll('[data-swishcb-dynamic-product-description]') || []);\n    elements.forEach((element) => {\n      if (!element.dataset.swishcbConfiguredDescription) {\n        element.dataset.swishcbConfiguredDescription = cleanText(element.textContent);\n      }\n    });\n    const configuredDescription = elements.find((element) => element.dataset.swishcbConfiguredDescription)\n      ?.dataset.swishcbConfiguredDescription || '';\n    const builder = summary.closest('#swish-court-builder');\n    const description = builder?.classList.contains('swishcb--preview-order-card')\n      ? 'Get your custom court with a few clicks. Review the measurements, colors, logos, and tile series, then proceed to checkout.'\n      : dynamicCourtDescription(courtData, configuredDescription);\n    elements.forEach((element) => {\n      if (element.textContent !== description) element.textContent = description;\n    });\n    return description;\n  };\n\n  const setBuilderLabel = (builder, selector, text) => {\n    const source = builder.querySelector(selector);\n    const label = source?.closest('.swishcb__row')?.querySelector('.swishcb__row-label .swishcb__tt--label');\n    if (!label) return;\n    if (label.textContent !== text) label.textContent = text;\n    label.setAttribute('aria-label', `${text} information`);\n  };\n\n  const bindSummaryPanelDisclosures = (builder) => {\n    if (builder.dataset.swishcbConfigurator === 'cards') return;\n    builder.querySelectorAll('.swishcb__controls details[data-swishcb-panel]:not([data-swishcb-static-open=\"true\"]):not([data-swishcb-native-disclosure=\"true\"])').forEach((panel) => {\n      const summary = panel.querySelector(':scope > summary');\n      if (!summary || summary.dataset.swishcbSummaryDisclosureBound === 'true') return;\n      // Keep the two primary design sections ready to use on first load. The\n      // underlying details stay mounted/open for the product layout, while\n      // aria-expanded and the product disclosure state control visibility.\n      const initiallyExpanded = ['main-info', 'colors'].includes(panel.dataset.swishcbPanel);\n      summary.dataset.swishcbSummaryDisclosureBound = 'true';\n      panel.dataset.swishcbSummaryCollapsed = initiallyExpanded ? 'false' : 'true';\n      panel.open = true;\n      summary.setAttribute('aria-expanded', initiallyExpanded ? 'true' : 'false');\n\n      const togglePanel = () => {\n        if (panel.dataset.swishcbV2ForcedOpen === 'true') return;\n        const nextExpanded = panel.dataset.swishcbSummaryCollapsed === 'true';\n        panel.dataset.swishcbSummaryCollapsed = nextExpanded ? 'false' : 'true';\n        panel.open = true;\n        summary.setAttribute('aria-expanded', nextExpanded ? 'true' : 'false');\n      };\n\n      let handledByPointer = false;\n      summary.addEventListener('pointerup', (event) => {\n        if (typeof event.button === 'number' && event.button !== 0) return;\n        event.preventDefault();\n        event.stopPropagation();\n        event.stopImmediatePropagation();\n        togglePanel();\n        handledByPointer = true;\n        window.setTimeout(() => { panel.open = true; }, 0);\n      });\n      summary.addEventListener('click', (event) => {\n        event.preventDefault();\n        event.stopPropagation();\n        event.stopImmediatePropagation();\n        if (handledByPointer) {\n          handledByPointer = false;\n          return;\n        }\n        togglePanel();\n        window.setTimeout(() => { panel.open = true; }, 0);\n      });\n      panel.addEventListener('toggle', () => {\n        if (!panel.open) window.setTimeout(() => { panel.open = true; }, 0);\n      });\n    });\n  };\n\n  const resizeContactNotes = (textarea) => {\n    if (!(textarea instanceof HTMLTextAreaElement)) return;\n    const minimumHeight = Number.parseFloat(textarea.dataset.swishcbContactNotesMinHeight) || 88;\n    if (!textarea.value) {\n      textarea.style.removeProperty('height');\n      return;\n    }\n    textarea.style.height = `${minimumHeight}px`;\n    const borderHeight = Math.max(0, textarea.offsetHeight - textarea.clientHeight);\n    const nextHeight = Math.max(minimumHeight, textarea.scrollHeight + borderHeight);\n    textarea.style.height = `${Math.ceil(nextHeight)}px`;\n  };\n\n  const bindContactNotesAutoResize = (builder) => {\n    builder.querySelectorAll('[data-swishcb-contact-notes]').forEach((textarea) => {\n      if (textarea.dataset.swishcbContactNotesBound !== 'true') {\n        textarea.dataset.swishcbContactNotesBound = 'true';\n        textarea.addEventListener('input', () => resizeContactNotes(textarea));\n        textarea.addEventListener('change', () => resizeContactNotes(textarea));\n        if (textarea.value) resizeContactNotes(textarea);\n      }\n    });\n  };\n\n  const arrangeCheckoutSection = (builder) => {\n    // Preview cards keep their inline summary and shared embedded editor.\n    if (!builder.classList.contains('swishcb--summary-advanced') ||\n        builder.classList.contains('swishcb--preview-order-card') ||\n        builder.dataset.swishcbRuntimeMode === 'order-editor') return;\n    const panel = builder.querySelector('[data-swishcb-v2-checkout-panel]');\n    const content = panel?.querySelector('[data-swishcb-v2-checkout-content]');\n    if (!content) return;\n    if (builder.dataset.swishcbConfigurator === 'cards') {\n      const title = panel.querySelector(':scope > summary .swishcb__panel-title');\n      if (title && title.textContent !== 'Review & order') title.textContent = 'Review & order';\n    }\n    const inlineReview = builder.dataset.swishcbConfigurator === 'cards'\n      ? builder.querySelector('.swishcb__review-details') : null;\n    builder.querySelectorAll('[data-swishcb-v2-order-content]').forEach((node) => {\n      if (!content.contains(node) && !inlineReview?.contains(node)) content.appendChild(node);\n    });\n    // Keep the secondary design action below the purchase button when checkout\n    // blocks move from the product column into the Order Now disclosure.\n    const designButton = builder.querySelector('[data-swishcb-design-court-block]');\n    const buyButtons = content.querySelector('[data-swishcb-v2-secure-checkout]')\n      ?.closest('[data-swishcb-v2-order-content]');\n    if (designButton && buyButtons && buyButtons.nextElementSibling !== designButton) {\n      buyButtons.after(designButton);\n    }\n    if (panel.hidden) panel.hidden = false;\n    if (!panel.hasAttribute('data-swishcb-layout-hidden') && panel.hasAttribute('aria-hidden')) panel.removeAttribute('aria-hidden');\n    if (builder.dataset.swishcbConfigurator === 'cards' && !content.querySelector('[data-swishcb-configurator-contact]')) {\n      const contactButton = document.createElement('button');\n      contactButton.type = 'button';\n      contactButton.className = 'button button--secondary button--full-width swishcb__configurator-contact';\n      contactButton.dataset.swishcbConfiguratorContact = 'true';\n      contactButton.textContent = 'Contact Us';\n      contactButton.addEventListener('click', () => {\n        const contact = builder.querySelector('[data-swishcb-panel=\"contact\"]');\n        window.SwishCBSidebar?.openPanel(contact);\n        contact?.scrollIntoView({ behavior: 'smooth', block: 'start' });\n        // Announce the opened form without activating a field or the mobile keyboard.\n        contact?.querySelector(':scope > summary:not([hidden])')?.focus({ preventScroll: true });\n      });\n      content.appendChild(contactButton);\n    }\n  };\n\n  const syncCourtPanelLayout = (builder, courtData) => {\n    if (!builder.classList.contains('swishcb--summary-advanced') ||\n        builder.classList.contains('swishcb--preview-order-card') ||\n        builder.dataset.swishcbRuntimeMode === 'order-editor') return;\n\n    const controls = builder.querySelector('.swishcb__controls');\n    const settings = controls?.querySelector('.swishcb__settings-group');\n    const checkout = builder.querySelector('[data-swishcb-v2-checkout-panel]');\n    const contact = controls?.querySelector('[data-swishcb-panel=\"contact\"]');\n    if (!settings || !checkout || !contact) return;\n\n    if (builder.dataset.swishcbConfigurator === 'cards') {\n      window.SwishCBSidebar?.sync(builder);\n      builder.dataset.swishcbSummaryPanelLayout = 'cards';\n      return;\n    }\n\n    const orderFirst = !isBasketballCourt(courtData) || courtData.hoopCount === 1;\n    if (orderFirst) {\n      if (checkout.nextElementSibling !== settings) controls.insertBefore(checkout, settings);\n      if (controls.lastElementChild !== contact) controls.appendChild(contact);\n    } else {\n      if (contact.nextElementSibling !== settings) controls.insertBefore(contact, settings);\n      if (settings.nextElementSibling !== checkout) settings.after(checkout);\n    }\n\n    // Apply defaults only on entry to a layout, never on the repeated summary\n    // refreshes triggered by pricing, dimensions, colors or customer toggles.\n    const layout = orderFirst ? 'order-first' : 'design-first';\n    if (builder.dataset.swishcbSummaryPanelLayout === layout) return;\n    builder.dataset.swishcbSummaryPanelLayout = layout;\n    const expandedPanels = orderFirst\n      ? ['checkout', 'main-info', 'colors', 'contact']\n      : ['main-info', 'colors'];\n    const panels = controls.querySelectorAll(':scope > details[data-swishcb-panel], :scope > .swishcb__settings-group > details[data-swishcb-panel]');\n    panels.forEach((panel) => {\n      if (panel.dataset.swishcbStaticOpen === 'true') return;\n      const expanded = expandedPanels.includes(panel.dataset.swishcbPanel) || panel.dataset.swishcbV2ForcedOpen === 'true';\n      if (panel.dataset.swishcbNativeDisclosure === 'true') {\n        panel.open = expanded;\n      } else {\n        panel.dataset.swishcbSummaryCollapsed = expanded ? 'false' : 'true';\n        panel.open = true;\n      }\n      panel.querySelector(':scope > summary')?.setAttribute('aria-expanded', expanded ? 'true' : 'false');\n    });\n  };\n\n  const normalizeBuilderLabels = (builder) => {\n    arrangeCheckoutSection(builder);\n    bindSummaryPanelDisclosures(builder);\n    bindContactNotesAutoResize(builder);\n    if (builder.dataset.swishcbConfigurator === 'cards') window.SwishCBSidebar?.sync(builder);\n    setBuilderLabel(builder, '#swishcb-width', builder.dataset.swishcbConfigurator === 'cards' ? 'Your court width' : 'Court width');\n    setBuilderLabel(builder, '#swishcb-length', builder.dataset.swishcbConfigurator === 'cards' ? 'Your court length' : 'Court length');\n    setBuilderLabel(builder, '#swishcb-tile-series', 'Tile series');\n    const keyFitLabel = builder.querySelector('[data-key-tile-alignment-key-label]');\n    const lineFitLabel = builder.querySelector('[data-key-tile-alignment-line-label]');\n    if (keyFitLabel) {\n      keyFitLabel.hidden = true;\n      keyFitLabel.setAttribute('aria-hidden', 'true');\n    }\n    if (lineFitLabel) {\n      lineFitLabel.hidden = false;\n      lineFitLabel.setAttribute('aria-hidden', 'false');\n      const lineFitText = lineFitLabel.querySelector('.swishcb__tt--label');\n      if (lineFitText) {\n        if (lineFitText.textContent !== 'Line Fit') lineFitText.textContent = 'Line Fit';\n        lineFitText.setAttribute('aria-label', 'Line Fit information');\n      }\n    }\n    builder.querySelectorAll('[data-size-adjust=\"width\"]').forEach((button) => {\n      button.setAttribute('aria-label', String(button.getAttribute('aria-label') || '').replace(/total court width/gi, 'court width'));\n    });\n    builder.querySelectorAll('[data-size-adjust=\"length\"]').forEach((button) => {\n      button.setAttribute('aria-label', String(button.getAttribute('aria-label') || '').replace(/total court length/gi, 'court length'));\n    });\n  };\n\n  const activeEdgeSides = (builder) => {\n    const sides = ['left', 'right', 'top', 'bottom'];\n    return sides.filter((side) => builder.querySelector(`#swishcb-tile-edge-${side}`)?.checked);\n  };\n\n  const activeEdgesText = (builder) => {\n    const sides = ['left', 'right', 'top', 'bottom'];\n    const active = activeEdgeSides(builder);\n    if (active.length === sides.length) return 'All 4 sides';\n    if (!active.length) return 'None';\n    return active.map((side) => side.charAt(0).toUpperCase() + side.slice(1)).join(', ');\n  };\n\n  const activeBorderSides = (builder, payload = getBuilderPayload()) => {\n    const sides = ['left', 'right', 'top', 'bottom'];\n    const selection = payload?.borderSelection && typeof payload.borderSelection === 'object'\n      ? payload.borderSelection\n      : null;\n    const sizes = payload?.borderSizesM && typeof payload.borderSizesM === 'object'\n      ? payload.borderSizesM\n      : null;\n    if (selection || sizes) {\n      return sides.filter((side) => {\n        const payloadSizeM = Number(sizes?.[side]);\n        const sizeM = payloadSizeM > 0\n          ? payloadSizeM\n          : inputMeters(builder.querySelector(`[data-border-size=\"${side}\"]`), 'cm');\n        const selectedValue = selection ? selection[`${side}On`] : null;\n        const enabled = selection\n          ? selectedValue === true || selectedValue === 1 || String(selectedValue).toLowerCase() === 'true' || String(selectedValue) === '1'\n          : sizeM > 0;\n        return enabled && sizeM > 0;\n      });\n    }\n    return sides.filter((side) => inputMeters(builder.querySelector(`[data-border-size=\"${side}\"]`), 'cm') > 0);\n  };\n\n  const artworkCounts = (builder) => {\n    const logoCount = builder.querySelectorAll('[data-logo-list] [data-logo-remove]:not([disabled])').length;\n    const textCount = builder.querySelectorAll('[data-text-id] [data-text-remove]:not([disabled])').length;\n    return { logoCount, textCount, total: logoCount + textCount };\n  };\n\n  const colorValues = (builder, payload = getBuilderPayload()) => {\n    const hasBorders = activeBorderSides(builder, payload).length > 0;\n    const hasEdges = activeEdgeSides(builder).length > 0;\n    return {\n      main: cleanText(builder.querySelector('#swishcb-color-main')?.value).toUpperCase(),\n      key: cleanText(builder.querySelector('#swishcb-color-key')?.value).toUpperCase(),\n      border: hasBorders ? cleanText(builder.querySelector('#swishcb-color-border')?.value).toUpperCase() : '',\n      lines: cleanText(builder.querySelector('#swishcb-color-lines')?.value).toUpperCase(),\n      edges: hasEdges ? cleanText(builder.querySelector('#swishcb-color-edge')?.value).toUpperCase() : ''\n    };\n  };\n\n  const activeOverhangCm = (builder) => {\n    const input = activeOverhangInputs(builder)[0];\n    return input ? round(inputMeters(input, 'cm') * 100, 2) : '';\n  };\n\n  const syncCartProperties = (summary, builder, courtData, pricing, title) => {\n    const productInfo = summary.closest('product-info');\n    const form = productInfo?.querySelector('form[data-type=\"add-to-cart-form\"]');\n    if (!form) return;\n\n    const config = builder.querySelector('[data-bind=\"config-json\"]')?.value || '';\n    const previewUrl = builder.querySelector('[data-bind=\"preview-url\"]')?.value || '';\n    const design2dUrl = builder.querySelector('[data-bind=\"design-2d-url\"]')?.value || '';\n    const edges = activeEdgesText(builder);\n    const artwork = artworkCounts(builder);\n    const colors = colorValues(builder, courtData.payload);\n    const colorLabels = sportAreaColorLabels(courtData.sport);\n    const activeBorders = activeBorderSides(builder, courtData.payload);\n    const colorSpecifications = [\n      colors.main ? `${colorLabels.main}: ${colors.main}` : '',\n      colors.key ? `${colorLabels.key}: ${colors.key}` : '',\n      colors.border ? `${activeBorders.length === 1 ? 'Border' : 'Borders'}: ${colors.border}` : '',\n      colors.lines ? `Lines: ${colors.lines}` : '',\n      colors.edges ? `Edges: ${colors.edges}` : ''\n    ].filter(Boolean);\n    const overhangCm = activeOverhangCm(builder);\n    const areaM2 = courtData.widthM > 0 && courtData.lengthM > 0 ? courtData.widthM * courtData.lengthM : null;\n    const specifications = [\n      `Court type: ${courtData.sportLabel || courtData.sport || '\u2014'}`,\n      `Court width: ${formatValue(courtData.widthInput, 'm')}`,\n      `Court length: ${formatValue(courtData.lengthInput, 'm')}`,\n      `Edges: ${edges}`,\n      overhangCm !== '' ? `Hoop overhang: ${overhangCm} cm` : '',\n      `Tile series: ${courtData.seriesLabel || courtData.seriesId || '\u2014'}`,\n      `Colors: ${colorSpecifications.join(', ') || '\u2014'}`,\n      artwork.total ? `Logos & text: ${artwork.logoCount} logo(s), ${artwork.textCount} text item(s)` : ''\n    ].filter(Boolean).join('; ');\n\n    const properties = {\n      config,\n      preview_url: previewUrl,\n      design_2d_url: design2dUrl,\n      share_url: courtData.payload.shareUrl || window.location.href,\n      sport: courtData.sport,\n      width_m: courtData.widthM > 0 ? round(courtData.widthM, 4) : '',\n      length_m: courtData.lengthM > 0 ? round(courtData.lengthM, 4) : '',\n      area_m2: areaM2 == null ? '' : round(areaM2, 4),\n      title,\n      series: courtData.seriesLabel || courtData.seriesId,\n      specifications,\n      edges,\n      hoop_overhang_cm: overhangCm,\n      colors: JSON.stringify(colors),\n      logos_text: artwork.total ? `${artwork.logoCount} logo(s), ${artwork.textCount} text item(s)` : 'None',\n      price_currency: pricing?.currencyCode || '',\n      price_unit: pricing?.areaUnit || '',\n      price_band: pricing?.bandThreshold ?? '',\n      unit_rate: pricing?.unitRate ?? '',\n      price_per_tile: pricing?.pricePerTile ?? '',\n      tile_area_m2: pricing?.tileAreaM2 ?? '',\n      artwork_area_m2: pricing?.artwork ? round(pricing.artwork.totalAreaM2, 4) : '',\n      artwork_chargeable_area_m2: pricing?.artwork ? round(pricing.artwork.chargeableAreaM2, 4) : '',\n      artwork_surcharge: pricing?.artworkSurcharge ?? '',\n      calculated_total: pricing?.total ?? '',\n      payment_plan: window.SwishCB?.ordering?.getPayment?.(builder, pricing)?.plan || 'full',\n      payment_due_now: window.SwishCB?.ordering?.getPayment?.(builder, pricing)?.dueNow ?? '',\n      payment_balance: window.SwishCB?.ordering?.getPayment?.(builder, pricing)?.balance ?? ''\n    };\n\n    // Keep the current configuration in memory and add it to the FormData at\n    // submission time. Persisting large preview/config strings into 25 live\n    // hidden inputs on every preview render can make the product page jank.\n    form.swishcbCourtProperties = properties;\n  };\n\n  const renderSummary = (summary, builder) => {\n    const courtData = getCourtData(builder);\n    // The static controls initially have no dimensions. Wait for the builder\n    // to finish restoring its preset/shared design before publishing a title,\n    // price, or layout based on those controls.\n    if (!(Number(courtData.payload.widthM) > 0 && Number(courtData.payload.lengthM) > 0)) return;\n    normalizeBuilderLabels(builder);\n    ensureBasketballMeasurementDefaults(builder, courtData);\n    syncLargeCourtPresentation(summary, builder, courtData);\n    syncCourtPanelLayout(builder, courtData);\n    const pricing = calculatePricing(builder, courtData);\n    const title = renderDynamicTitle(summary, courtData);\n    renderDynamicDescription(summary, courtData);\n    const width = builder.querySelector('#swishcb-width');\n    const length = builder.querySelector('#swishcb-length');\n    const type = builder.querySelector('#court-xxx');\n    const series = builder.querySelector('#swishcb-tile-series');\n    const overhangs = activeOverhangInputs(builder);\n    const overhangField = summary.querySelector('[data-swishcb-summary-overhang]');\n    const overhangItem = overhangField?.closest('.swishcb__product-summary-item');\n\n    setText(summary, '[data-swishcb-summary-type]', selectedText(type));\n    setText(summary, '[data-swishcb-summary-width]', formatValue(width, 'm'));\n    setText(summary, '[data-swishcb-summary-length]', formatValue(length, 'm'));\n    setText(summary, '[data-swishcb-summary-series]', selectedText(series));\n    const { logoCount, textCount, total: artworkCount } = artworkCounts(builder);\n    const logosItem = summary.querySelector('[data-swishcb-summary-logos-item]');\n    if (logosItem) logosItem.hidden = artworkCount === 0;\n    if (artworkCount) {\n      const artworkParts = [];\n      if (logoCount) artworkParts.push(`${logoCount} ${logoCount === 1 ? 'logo' : 'logos'}`);\n      if (textCount) artworkParts.push(`${textCount} text ${textCount === 1 ? 'item' : 'items'}`);\n      setText(summary, '[data-swishcb-summary-logos]', `${artworkParts.join(', ')} added`);\n    }\n\n    const edgeValue = activeEdgesText(builder);\n    setText(summary, '[data-swishcb-summary-edges]', edgeValue);\n\n    if (overhangItem) overhangItem.hidden = !overhangs.length;\n    if (overhangField && document.activeElement !== overhangField && overhangs[0]) {\n      overhangField.value = overhangs[0].value;\n      const valueShell = overhangField.closest('[data-unit]');\n      if (valueShell) valueShell.dataset.unit = sourceUnit(overhangs[0], 'cm');\n    }\n\n    const areaColorLabels = sportAreaColorLabels(courtData.sport);\n    const borderCount = activeBorderSides(builder, courtData.payload).length;\n    const edgeCount = activeEdgeSides(builder).length;\n    renderColor(summary, builder, 'main', '#swishcb-color-main', { label: areaColorLabels.main });\n    renderColor(summary, builder, 'key', '#swishcb-color-key', { label: areaColorLabels.key });\n    renderColor(summary, builder, 'border', '#swishcb-color-border', {\n      label: borderCount === 1 ? 'Border' : 'Borders',\n      visible: borderCount > 0\n    });\n    renderColor(summary, builder, 'lines', '#swishcb-color-lines', { label: 'Lines' });\n    renderColor(summary, builder, 'edges', '#swishcb-color-edge', { label: 'Edges', visible: edgeCount > 0 });\n    renderPrice(summary, builder, courtData, pricing);\n    syncCartProperties(summary, builder, courtData, pricing, title);\n  };\n\n  const initSummary = (summary) => {\n    if (summary.dataset.swishcbProductSummaryBound === 'true') return;\n\n    const productInfo = summary.closest('product-info');\n    const builder = productInfo?.querySelector('#swish-court-builder');\n    if (!builder) return;\n\n    const unitSelect = builder.querySelector('[data-swishcb-unit-select]');\n    const unitRadios = Array.from(builder.querySelectorAll('input[name=\"swishcb-units\"]'));\n    const syncUnitSelect = () => {\n      const checked = unitRadios.find((radio) => radio.checked);\n      if (unitSelect && checked && unitSelect.value !== checked.value) unitSelect.value = checked.value;\n    };\n    unitSelect?.addEventListener('change', () => {\n      const target = unitRadios.find((radio) => radio.value === unitSelect.value);\n      if (!target) return;\n      target.checked = true;\n      target.dispatchEvent(new Event('change', { bubbles: true }));\n      syncUnitSelect();\n    });\n    unitRadios.forEach((radio) => radio.addEventListener('change', syncUnitSelect));\n    syncUnitSelect();\n\n    summary.dataset.swishcbProductSummaryBound = 'true';\n    bindSummaryPanelDisclosures(builder);\n    let renderTimer = 0;\n    let lastSourceSignature = '';\n    const sourceSignature = () => JSON.stringify([\n      Boolean(window.SwishCourtBuilder?.getContactPayload),\n      builder.dataset.swishcbOrderAreaM2,\n      builder.dataset.swishcbOrderInstalledWidthM,\n      builder.dataset.swishcbOrderInstalledLengthM,\n      ...Array.from(builder.querySelectorAll('input, select, textarea'))\n        .filter((input) => !input.closest('[data-swishcb-product-summary], [data-swishcb-order-panel], [data-swishcb-product-order-specifications], [data-swishcb-panel=\"contact\"]'))\n        .map((input) => [input.id, input.name, input.value, input.checked, input.disabled, sourceUnit(input, ''), input.closest('[data-hoop-distance-row]')?.hidden])\n    ]);\n    const scheduleRender = () => {\n      if (renderTimer) return;\n      renderTimer = window.setTimeout(() => {\n        renderTimer = 0;\n        if (!summary.isConnected) return;\n        renderSummary(summary, builder);\n        lastSourceSignature = sourceSignature();\n      }, 40);\n    };\n\n    const overhangField = summary.querySelector('[data-swishcb-summary-overhang]');\n    const forwardOverhang = (eventName) => {\n      activeOverhangInputs(builder).forEach((source) => {\n        source.value = overhangField.value;\n        source.dispatchEvent(new Event(eventName, { bubbles: true }));\n      });\n    };\n\n    overhangField?.addEventListener('input', () => {\n      forwardOverhang('input');\n      forwardOverhang('change');\n    });\n    overhangField?.addEventListener('change', () => {\n      forwardOverhang('change');\n      scheduleRender();\n    });\n    overhangField?.addEventListener('blur', scheduleRender);\n\n    const productForm = productInfo.querySelector('form[data-type=\"add-to-cart-form\"]');\n    productForm?.addEventListener('submit', () => renderSummary(summary, builder), true);\n    productForm?.addEventListener('pointerdown', () => renderSummary(summary, builder), true);\n    productForm?.addEventListener('formdata', (event) => {\n      renderSummary(summary, builder);\n      Object.entries(productForm.swishcbCourtProperties || {}).forEach(([key, value]) => {\n        event.formData.set(`properties[swish.court.${key}]`, value == null ? '' : String(value));\n      });\n    });\n\n    const secureCheckoutButton = productInfo.querySelector('[data-swishcb-v2-secure-checkout]');\n    productInfo.querySelector('[data-swishcb-product-price-select-series]')?.addEventListener('click', () => {\n      const series = builder.querySelector('#swishcb-tile-series');\n      if (!series) return;\n      for (let parent = series.parentElement; parent && parent !== builder; parent = parent.parentElement) {\n        if (parent.tagName === 'DETAILS') parent.open = true;\n      }\n      series.scrollIntoView({ block: 'center', behavior: 'auto' });\n      series.focus({ preventScroll: true });\n    });\n    secureCheckoutButton?.addEventListener('click', (event) => {\n      event.preventDefault();\n      event.stopPropagation();\n      renderSummary(summary, builder);\n      const ordering = window.SwishCB?.ordering;\n      if (!ordering || typeof ordering.startCheckout !== 'function') return;\n      ordering.startCheckout(builder, secureCheckoutButton);\n    });\n\n    const openSummaryColor = (event, button) => {\n      const targetInput = builder.querySelector(button.dataset.swishcbSummaryColorTarget || '');\n      const colorTools = window.SwishCB?.getColorTools?.(builder);\n      if (!targetInput || !colorTools) return false;\n      event.preventDefault();\n      event.stopPropagation();\n      colorTools.ensurePreviewColorPickerContext({ openColorsPanel: false });\n      colorTools.bindPopoverToTarget(targetInput, colorTools.resolvePanelColorPopoverTarget(targetInput));\n      if (!colorTools.openColorPopoverNearElement(button)) {\n        colorTools.openPopoverAt(window.innerWidth / 2, window.innerHeight / 2);\n      }\n      return true;\n    };\n\n    summary.querySelectorAll('[data-swishcb-summary-color-button]').forEach((button) => {\n      let handledByPointer = false;\n      button.dataset.swishcbSummaryColorBound = 'true';\n      button.addEventListener('pointerdown', (event) => {\n        if (event.pointerType === 'touch') return;\n        if (typeof event.button === 'number' && event.button !== 0) return;\n        handledByPointer = openSummaryColor(event, button);\n      });\n      button.addEventListener('click', (event) => {\n        if (handledByPointer) {\n          handledByPointer = false;\n          event.preventDefault();\n          event.stopPropagation();\n          return;\n        }\n        openSummaryColor(event, button);\n      });\n    });\n\n    builder.addEventListener('input', scheduleRender, true);\n    builder.addEventListener('change', scheduleRender, true);\n    builder.addEventListener('swishcb:statechange', scheduleRender);\n    builder.addEventListener('swishcb:rendered', scheduleRender);\n    builder.addEventListener('swish:order-price-changed', scheduleRender);\n    builder.addEventListener('swish:order-eligibility-changed', scheduleRender);\n    window.addEventListener('swish:units-changed', scheduleRender);\n    window.addEventListener('swish:dimension-display-changed', scheduleRender);\n    window.addEventListener('swish:dimensions-changed', scheduleRender);\n    window.addEventListener('swish:builder-state-changed', scheduleRender);\n    window.addEventListener('hashchange', scheduleRender);\n\n    scheduleRender();\n\n    // Some builder updates assign input.value without an event. Watch their\n    // values, not the rendered summary: observing our own DOM writes (or a\n    // video's playback controls) creates an endless summary/checkout loop.\n    const poll = window.setInterval(() => {\n      if (!summary.isConnected) {\n        window.clearInterval(poll);\n        window.clearTimeout(renderTimer);\n        return;\n      }\n      if (sourceSignature() !== lastSourceSignature) scheduleRender();\n    }, 600);\n  };\n\n  const initAll = (scope = document) => {\n    scope.querySelectorAll(SUMMARY_SELECTOR).forEach(initSummary);\n  };\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', () => initAll());\n  } else {\n    initAll();\n  }\n\n  document.addEventListener('shopify:section:load', (event) => initAll(event.target));\n})();\n"],
  "mappings": "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",
  "names": []
}
