{
  "version": 3,
  "sources": ["/cdn/shop/t/15/assets/armadio-sports.js?as_rev=20261103-20"],
  "sourcesContent": ["(() => {\n  const root = document.querySelector('[data-armadio-sports]');\n  if (!root) return;\n  const query = new URLSearchParams(location.search);\n  document.querySelectorAll('.as__tools a[aria-label=\"Account\"]').forEach((link) => {\n    const accountUrl = new URL(link.href, window.location.origin);\n    accountUrl.searchParams.set('context', 'sports');\n    link.href = accountUrl.toString();\n  });\n  const getSportsOrderReference = () => {\n    const saved = localStorage.getItem('armadio-sports-order-reference');\n    if (/^AS-[A-Z0-9-]{8,}$/.test(saved || '')) return saved;\n    const date = new Date().toISOString().slice(0, 10).replace(/-/g, '');\n    const suffix = Math.random().toString(36).slice(2, 7).toUpperCase();\n    const reference = `AS-${date}-${suffix}`;\n    localStorage.setItem('armadio-sports-order-reference', reference);\n    return reference;\n  };\n  const readSportsWishlist = () => {\n    try {\n      const saved = JSON.parse(localStorage.getItem('armadio-sports-wishlist') || '[]');\n      return Array.isArray(saved) ? saved.map(String) : [];\n    } catch (error) {\n      return [];\n    }\n  };\n  const syncSportsWishlistBadge = (items = readSportsWishlist()) => {\n    document.querySelectorAll('[data-sports-wishlist-link], a[aria-label=\"Wishlist\"]').forEach((link) => {\n      let badge = link.querySelector('[data-wishlist-count]');\n      if (!badge) {\n        badge = document.createElement('b');\n        badge.dataset.wishlistCount = '';\n        link.appendChild(badge);\n      }\n      badge.textContent = items.length;\n      badge.hidden = items.length === 0;\n    });\n  };\n  syncSportsWishlistBadge();\n  const contactInterest = root.querySelector('[data-contact-interest]');\n  if (contactInterest && query.get('interest')) {\n    const requestedInterest = query.get('interest');\n    if ([...contactInterest.options].some((option) => option.value === requestedInterest)) contactInterest.value = requestedInterest;\n  }\n  const contactEnquiry = root.querySelector('[data-contact-enquiry]');\n  if (contactEnquiry && query.get('enquiry') === 'custom-design') contactEnquiry.value = 'Custom jersey design';\n  const contactForm = root.querySelector('#SportsContactForm');\n  const contactArtwork = root.querySelector('[data-contact-artwork]');\n  const contactArtworkStatus = root.querySelector('[data-contact-artwork-status]');\n  const contactArtworkName = root.querySelector('[data-contact-artwork-name]');\n  const contactArtworkSize = root.querySelector('[data-contact-artwork-size]');\n  const syncContactArtworkRequirement = () => {\n    if (!contactArtwork) return;\n    const required = contactEnquiry?.value === 'Custom jersey design';\n    contactArtwork.required = required;\n    contactArtwork.setAttribute('aria-required', required ? 'true' : 'false');\n  };\n  contactEnquiry?.addEventListener('change', syncContactArtworkRequirement);\n  syncContactArtworkRequirement();\n  contactArtwork?.addEventListener('change', () => {\n    const file = contactArtwork.files?.[0];\n    if (!file) {\n      if (contactArtworkName) contactArtworkName.value = '';\n      if (contactArtworkSize) contactArtworkSize.value = '';\n      if (contactArtworkStatus) contactArtworkStatus.textContent = '';\n      return;\n    }\n    const extension = file.name.split('.').pop()?.toLowerCase() || '';\n    if (!['jpg', 'jpeg', 'png', 'pdf', 'ai', 'psd', 'cdr'].includes(extension)) {\n      contactArtwork.value = '';\n      if (contactArtworkStatus) contactArtworkStatus.textContent = 'Use a JPG, PNG, PDF, AI, PSD or CDR file.';\n      return;\n    }\n    if (file.size > 20 * 1024 * 1024) {\n      contactArtwork.value = '';\n      if (contactArtworkStatus) contactArtworkStatus.textContent = 'File must be 20 MB or smaller.';\n      return;\n    }\n    if (contactArtworkName) contactArtworkName.value = file.name;\n    if (contactArtworkSize) contactArtworkSize.value = `${(file.size / 1024 / 1024).toFixed(2)} MB`;\n    if (contactArtworkStatus) contactArtworkStatus.textContent = `Ready to upload: ${file.name} \u00B7 ${(file.size / 1024 / 1024).toFixed(2)} MB`;\n  });\n  contactForm?.addEventListener('submit', (event) => {\n    syncContactArtworkRequirement();\n    if (contactArtwork?.required && !contactArtwork.files?.length) {\n      event.preventDefault();\n      contactArtworkStatus.textContent = 'Upload the design file before sending this custom-design enquiry.';\n      contactArtwork.focus();\n      return;\n    }\n    if (!contactForm.checkValidity()) return;\n    const submit = contactForm.querySelector('[type=\"submit\"]');\n    if (submit) {\n      submit.disabled = true;\n      submit.textContent = contactArtwork?.files?.length ? 'Uploading design and sending\u2026' : 'Sending enquiry\u2026';\n    }\n  });\n  const formatDesignName = (value = '') => {\n    const words = value.replace(/-/g, ' ').trim().split(/\\s+/).filter(Boolean);\n    while (words.length > 1 && /^\\d+$/.test(words[words.length - 1])) words.pop();\n    const genericSuffixes = new Set(['performance', 'jersey']);\n    while (words.length > 1 && genericSuffixes.has(words[words.length - 1].toLowerCase())) words.pop();\n    return words.map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(' ');\n  };\n  root.querySelectorAll('a[href*=\"/products/\"]').forEach((productLink) => {\n    const productUrl = new URL(productLink.href, location.origin);\n    const productHandle = productUrl.pathname.split('/products/')[1]?.split('/')[0];\n    if (!productHandle) return;\n    const card = productLink.closest('.as__shop-card,.as__design-card');\n    const existingCustomiserLink = card?.querySelector('a[href*=\"/pages/armadio-sports-customiser\"]');\n    const customiserUrl = existingCustomiserLink\n      ? new URL(existingCustomiserLink.href, location.origin)\n      : new URL('/pages/armadio-sports-customiser', location.origin);\n    customiserUrl.searchParams.set('design', productHandle);\n    if (!customiserUrl.searchParams.has('product')) customiserUrl.searchParams.set('product', card?.dataset.product || 'jersey');\n    productLink.href = `${customiserUrl.pathname}${customiserUrl.search}`;\n    if (existingCustomiserLink) existingCustomiserLink.href = productLink.href;\n  });\n  const makePreview = root.querySelector('[data-make-preview]');\n  if (makePreview) {\n    const fabricInput = makePreview.querySelector('[data-team-fabric-input]');\n    makePreview.querySelectorAll('[data-team-fabric]').forEach((button) => button.addEventListener('click', () => {\n      makePreview.querySelectorAll('[data-team-fabric]').forEach((item) => item.classList.toggle('is-active', item === button));\n      fabricInput.value = button.dataset.teamFabric;\n    }));\n  }\n  const rail = root.querySelector('[data-rail]');\n  if (rail) {\n    const moveRail = (direction) => rail.scrollBy({ left: direction * Math.max(rail.clientWidth * .82, 280), behavior: 'smooth' });\n    root.querySelector('[data-rail-prev]')?.addEventListener('click', () => moveRail(-1));\n    root.querySelector('[data-rail-next]')?.addEventListener('click', () => moveRail(1));\n  }\n  root.querySelectorAll('[data-selected-design],[data-review-design]').forEach((el) => {\n    const design = query.get('design') || localStorage.getItem('armadio-design') || 'Volt';\n    el.textContent = formatDesignName(design);\n  });\n  const grid = root.querySelector('[data-design-grid]');\n  if (grid) {\n    const cardGrid = grid.querySelector('.as__shop-grid') || grid;\n    const loadMore = grid.querySelector('[data-load-more]');\n    const resultCount = grid.querySelector('[data-result-count]');\n    const empty = grid.querySelector('[data-design-empty]');\n    const sort = grid.querySelector('[data-design-sort]');\n    const priceFilter = grid.querySelector('[data-price-filter]');\n    const priceMinLabel = grid.querySelector('[data-price-min]');\n    const priceCurrentLabel = grid.querySelector('[data-price-current]');\n    const quickFilters = { age: '', product: '' };\n    // The current Sports catalogue is intentionally small enough to render in full.\n    // Keeping a nine-card client-side page created incomplete four-column rows and\n    // made valid products look missing, so all matching cards stay visible.\n    let visibleLimit = Number.POSITIVE_INFINITY;\n    let wishlist = readSportsWishlist();\n    const wishlistLinks = [...document.querySelectorAll('[data-sports-wishlist-link], a[aria-label=\"Wishlist\"]')];\n    const updateWishlistHeader = (animate = false) => {\n      wishlistLinks.forEach((link) => {\n        let badge = link.querySelector('[data-wishlist-count]');\n        if (!badge) {\n          badge = document.createElement('b');\n          badge.dataset.wishlistCount = '';\n          link.appendChild(badge);\n        }\n        badge.textContent = wishlist.length;\n        badge.hidden = wishlist.length === 0;\n        if (animate) {\n          link.classList.remove('is-twinkling');\n          requestAnimationFrame(() => link.classList.add('is-twinkling'));\n          setTimeout(() => link.classList.remove('is-twinkling'), 700);\n        }\n      });\n      root.querySelectorAll('[data-favourite]').forEach((button) => {\n        const active = wishlist.includes(button.dataset.wishlistKey);\n        button.classList.toggle('is-active', active);\n        button.textContent = active ? '\u2665' : '\u2661';\n        button.setAttribute('aria-pressed', String(active));\n      });\n    };\n    const catalogPrices = [...grid.querySelectorAll('[data-design-card]')].map((card) => Number(card.dataset.price)).filter(Number.isFinite);\n    const minimumPrice = catalogPrices.length ? Math.min(...catalogPrices) : 0;\n    const maximumPrice = catalogPrices.length ? Math.max(...catalogPrices) : 0;\n    if (priceFilter) {\n      priceFilter.min = String(minimumPrice);\n      priceFilter.max = String(maximumPrice);\n      priceFilter.value = String(maximumPrice);\n    }\n    if (priceMinLabel) priceMinLabel.textContent = `\u20B9${minimumPrice}`;\n    if (priceCurrentLabel) priceCurrentLabel.textContent = `Up to \u20B9${maximumPrice}`;\n    const catalogCards = [...grid.querySelectorAll('[data-design-card]')];\n    const filterValueExists = (group, value) => catalogCards.some((card) => (card.dataset[group] || '').split(' ').includes(value));\n    grid.querySelectorAll('[data-filter]').forEach((input) => {\n      const isReservedEmptySport = input.dataset.filter === 'sport' && input.value === 'basketball';\n      const available = isReservedEmptySport || filterValueExists(input.dataset.filter, input.value);\n      const label = input.closest('label');\n      if (label) label.hidden = !available;\n      input.disabled = !available;\n      if (!available) input.checked = false;\n    });\n    grid.querySelectorAll('[data-quick-filter]').forEach((button) => {\n      if (!button.dataset.value) return;\n      const available = filterValueExists(button.dataset.quickFilter, button.dataset.value);\n      button.hidden = !available;\n      button.disabled = !available;\n    });\n    const applyFilters = () => {\n      const search = (grid.querySelector('[data-design-search]')?.value || '').trim().toLowerCase();\n      const filters = [...root.querySelectorAll('[data-filter]:checked')];\n      const cards = [...grid.querySelectorAll('[data-design-card]')];\n      if (sort) cards.sort((first, second) => {\n        if (sort.value === 'name') return first.dataset.name.localeCompare(second.dataset.name);\n        if (sort.value === 'price-low') return Number(first.dataset.price) - Number(second.dataset.price);\n        if (sort.value === 'price-high') return Number(second.dataset.price) - Number(first.dataset.price);\n        return Number(first.dataset.catalogIndex) - Number(second.dataset.catalogIndex);\n      }).forEach((card) => cardGrid.appendChild(card));\n      let matched = 0;\n      cards.forEach((card) => {\n        const matchesSearch = card.dataset.name.includes(search);\n        const matchesCheckboxes = ['product', 'sport', 'neckline', 'sleeve', 'age', 'colour'].every((group) => {\n          const selected = filters.filter((input) => input.dataset.filter === group).map((input) => input.value);\n          return !selected.length || selected.some((value) => card.dataset[group].split(' ').includes(value));\n        });\n        const matchesQuick = Object.entries(quickFilters).every(([group, value]) => !value || card.dataset[group].split(' ').includes(value));\n        const matchesPrice = !priceFilter || Number(card.dataset.price) <= Number(priceFilter.value);\n        const match = matchesSearch && matchesCheckboxes && matchesQuick && matchesPrice;\n        if (match) matched += 1;\n        card.hidden = !match || matched > visibleLimit;\n      });\n      if (empty) empty.hidden = matched > 0;\n      if (loadMore) loadMore.hidden = matched <= visibleLimit;\n      if (resultCount) resultCount.textContent = `${matched} product${matched === 1 ? '' : 's'}`;\n    };\n    grid.querySelectorAll('[data-filter],[data-design-search]').forEach((input) => input.addEventListener('input', () => { visibleLimit = Number.POSITIVE_INFINITY; applyFilters(); }));\n    priceFilter?.addEventListener('input', () => {\n      if (priceCurrentLabel) priceCurrentLabel.textContent = `Up to \u20B9${priceFilter.value}`;\n      visibleLimit = Number.POSITIVE_INFINITY;\n      applyFilters();\n    });\n    sort?.addEventListener('change', applyFilters);\n    const quickButtons = [...grid.querySelectorAll('[data-quick-filter]')];\n    const syncQuickButtons = () => quickButtons.forEach((button) => {\n      const selected = quickFilters[button.dataset.quickFilter] === button.dataset.value;\n      button.classList.toggle('is-active', selected);\n      button.setAttribute('aria-pressed', String(selected));\n    });\n    quickButtons.forEach((button) => button.addEventListener('click', () => {\n      const group = button.dataset.quickFilter;\n      quickFilters[group] = button.dataset.value;\n      syncQuickButtons();\n      visibleLimit = Number.POSITIVE_INFINITY;\n      applyFilters();\n    }));\n    grid.querySelector('[data-clear-filters]')?.addEventListener('click', () => {\n      grid.querySelectorAll('[data-filter]').forEach((input) => { input.checked = false; });\n      grid.querySelectorAll('[data-design-search]').forEach((input) => { input.value = ''; });\n      if (priceFilter) priceFilter.value = String(maximumPrice);\n      if (priceCurrentLabel) priceCurrentLabel.textContent = `Up to \u20B9${maximumPrice}`;\n      Object.keys(quickFilters).forEach((key) => { quickFilters[key] = ''; });\n      syncQuickButtons();\n      visibleLimit = Number.POSITIVE_INFINITY;\n      applyFilters();\n    });\n    grid.querySelector('[data-filter-toggle]')?.addEventListener('click', (event) => {\n      const expanded = event.currentTarget.getAttribute('aria-expanded') === 'true';\n      event.currentTarget.setAttribute('aria-expanded', String(!expanded));\n      grid.querySelector('[data-filter-panel]')?.classList.toggle('is-open', !expanded);\n    });\n    loadMore?.addEventListener('click', () => { visibleLimit = Number.POSITIVE_INFINITY; applyFilters(); });\n    grid.querySelectorAll('[data-favourite]').forEach((button) => button.addEventListener('click', () => {\n      const key = button.dataset.wishlistKey;\n      const removing = wishlist.includes(key);\n      wishlist = removing ? wishlist.filter((item) => item !== key) : [...wishlist, key];\n      localStorage.setItem('armadio-sports-wishlist', JSON.stringify(wishlist));\n      updateWishlistHeader(!removing);\n      document.dispatchEvent(new CustomEvent('armadio:wishlist-change', { detail: { items: wishlist } }));\n    }));\n    const requestedSport = query.get('sport');\n    const requestedSportFilter = [...grid.querySelectorAll('[data-filter=\"sport\"]')].find((input) => input.value === requestedSport);\n    if (requestedSportFilter && !requestedSportFilter.disabled) requestedSportFilter.checked = true;\n    const refreshSavedDesigns = () => {\n      wishlist = readSportsWishlist();\n      updateWishlistHeader();\n    };\n    window.addEventListener('pageshow', refreshSavedDesigns);\n    window.addEventListener('storage', (event) => {\n      if (event.key === 'armadio-sports-wishlist' || event.key === null) refreshSavedDesigns();\n    });\n    syncQuickButtons();\n    updateWishlistHeader();\n    applyFilters();\n  }\n  const wishlistPage = root.querySelector('[data-wishlist-page]');\n  if (wishlistPage) {\n    const cards = [...wishlistPage.querySelectorAll('[data-wishlist-item]')];\n    const count = wishlistPage.querySelector('[data-wishlist-page-count]');\n    const status = wishlistPage.querySelector('[data-wishlist-page-status]');\n    const empty = wishlistPage.querySelector('[data-wishlist-empty]');\n    const clear = wishlistPage.querySelector('[data-wishlist-clear]');\n    const renderWishlist = () => {\n      const wishlist = readSportsWishlist();\n      let visible = 0;\n      cards.forEach((card) => {\n        const selected = wishlist.includes(String(card.dataset.wishlistKey));\n        card.hidden = !selected;\n        if (selected) visible += 1;\n      });\n      if (count) count.textContent = visible;\n      if (status) status.textContent = visible ? `${visible} saved design${visible === 1 ? '' : 's'} ready to customise.` : 'No saved designs yet.';\n      if (empty) empty.hidden = visible !== 0;\n      if (clear) clear.hidden = visible === 0;\n      syncSportsWishlistBadge(wishlist);\n    };\n    wishlistPage.querySelectorAll('[data-wishlist-remove]').forEach((button) => button.addEventListener('click', () => {\n      const card = button.closest('[data-wishlist-item]');\n      const next = readSportsWishlist().filter((key) => key !== String(card?.dataset.wishlistKey || ''));\n      localStorage.setItem('armadio-sports-wishlist', JSON.stringify(next));\n      renderWishlist();\n    }));\n    clear?.addEventListener('click', () => {\n      localStorage.setItem('armadio-sports-wishlist', '[]');\n      renderWishlist();\n    });\n    window.addEventListener('storage', (event) => { if (event.key === 'armadio-sports-wishlist') renderWishlist(); });\n    renderWishlist();\n  }\n  const ageSelect = root.querySelector('[data-age-select]');\n  if (ageSelect) ageSelect.addEventListener('change', () => {\n    const size = root.querySelector('[data-size-select]');\n    size.innerHTML = ageSelect.value === 'junior' ? '<option>2\u20133 Y</option><option>4\u20135 Y</option><option>6\u20137 Y</option><option>8\u20139 Y</option><option>10\u201311 Y</option><option>12\u201313 Y</option>' : '<option>S</option><option>M</option><option>L</option><option>XL</option><option>2XL</option><option>3XL</option><option>4XL</option><option>5XL</option>';\n  });\n  const kitForm = root.querySelector('[data-kit-form]');\n  if (kitForm) {\n    const customiserPreview = root.querySelector('.as__customiser-preview');\n    const rosterSection = root.querySelector('.as__config-section--roster');\n    const kitBuilderSection = root.querySelector('[data-kit-builder]');\n    const customiserAction = kitForm.querySelector('.as__customiser-action');\n    const stackedBuilder = window.matchMedia('(max-width: 1200px)');\n    const syncBuilderOrder = () => {\n      if (!customiserPreview || !rosterSection || !kitBuilderSection || !customiserAction) return;\n      if (stackedBuilder.matches) {\n        kitForm.insertBefore(rosterSection, customiserAction);\n        kitForm.insertBefore(kitBuilderSection, customiserAction);\n      } else {\n        customiserPreview.append(rosterSection, kitBuilderSection);\n      }\n    };\n    syncBuilderOrder();\n    if (stackedBuilder.addEventListener) stackedBuilder.addEventListener('change', syncBuilderOrder);\n    else stackedBuilder.addListener(syncBuilderOrder);\n    const designHandle = query.get('design');\n    const customDesignMode = query.get('mode') === 'custom';\n    const selectedDesign = root.querySelector('[data-selected-design]');\n    if (selectedDesign && designHandle) selectedDesign.textContent = formatDesignName(designHandle);\n    if (selectedDesign && customDesignMode) selectedDesign.textContent = 'Custom design';\n    const artworkDetails = root.querySelector('[data-artwork-details]');\n    if (artworkDetails && customDesignMode) artworkDetails.open = true;\n    const fabricInputs = [...kitForm.querySelectorAll('input[name=\"fabric\"]')];\n    fabricInputs.forEach((input, index) => {\n      input.checked = index === 0;\n    });\n    const previewArt = root.querySelector('[data-customiser-art]');\n    const kitBuilder = root.querySelector('[data-kit-builder]');\n    if (previewArt && designHandle && query.get('mode') !== 'custom') {\n      fetch(`/products/${encodeURIComponent(designHandle)}.js`, { headers: { Accept: 'application/json' } })\n        .then((response) => {\n          if (!response.ok) throw new Error('Product preview unavailable');\n          return response.json();\n        })\n        .then((product) => {\n          const imageUrl = product.featured_image || product.images?.[0];\n          if (imageUrl) {\n            previewArt.style.setProperty('--as-selected-design-image', `url(\"${imageUrl}\")`);\n            previewArt.classList.add('has-selected-design-image');\n          }\n          const mediaRail = root.querySelector('[data-product-media-rail]');\n          const mediaItems = Array.isArray(product.media) && product.media.length\n            ? product.media.map((media) => ({ src: media.preview_image?.src || media.src, alt: media.alt || media.preview_image?.alt || '' }))\n            : (product.images || []).map((src) => ({ src, alt: '' }));\n          if (mediaRail && mediaItems.length > 1) {\n            const viewNames = ['Front + back', 'Half sleeve front', 'Half sleeve back', 'Full sleeve front', 'Full sleeve back'];\n            mediaRail.replaceChildren(...mediaItems.filter((media) => media.src).map((media, index) => {\n              const button = document.createElement('button');\n              const label = media.alt || viewNames[index] || `View ${index + 1}`;\n              button.type = 'button';\n              button.className = `as__product-media-thumb${index === 0 ? ' is-active' : ''}`;\n              button.setAttribute('aria-label', label);\n              button.setAttribute('aria-pressed', index === 0 ? 'true' : 'false');\n              const image = document.createElement('img');\n              image.src = media.src;\n              image.alt = '';\n              image.loading = index === 0 ? 'eager' : 'lazy';\n              button.append(image);\n              button.addEventListener('click', () => {\n                previewArt.style.setProperty('--as-selected-design-image', `url(\"${media.src}\")`);\n                mediaRail.querySelectorAll('button').forEach((item) => {\n                  const selected = item === button;\n                  item.classList.toggle('is-active', selected);\n                  item.setAttribute('aria-pressed', selected ? 'true' : 'false');\n                });\n              });\n              return button;\n            }));\n            mediaRail.hidden = false;\n          }\n          const tags = Array.isArray(product.tags) ? product.tags.map((tag) => String(tag).toLowerCase()) : [];\n          kitBuilder?.classList.toggle('has-matching-kit-images', tags.includes('matching-kit-images'));\n        })\n        .catch(() => kitBuilder?.classList.remove('has-matching-kit-images'));\n    }\n    const letteringPreview = kitForm.querySelector('[data-lettering-preview]');\n    const letteringPreviewLabel = kitForm.querySelector('[data-lettering-preview-label]');\n    const syncLettering = (input, animate = false) => {\n      if (!input?.checked) return;\n      if (previewArt) previewArt.dataset.lettering = input.value;\n      if (letteringPreview) {\n        letteringPreview.dataset.lettering = input.value;\n        letteringPreview.classList.toggle('is-updating', animate);\n        if (animate) window.setTimeout(() => letteringPreview.classList.remove('is-updating'), 260);\n      }\n      if (letteringPreviewLabel) letteringPreviewLabel.textContent = `${input.value.charAt(0).toUpperCase()}${input.value.slice(1)} preview`;\n    };\n    kitForm.querySelectorAll('input[name=\"lettering\"]').forEach((input) => input.addEventListener('change', () => syncLettering(input, true)));\n    syncLettering(kitForm.querySelector('input[name=\"lettering\"]:checked'));\n    const logoInput = kitForm.querySelector('input[name=\"team_logo\"]');\n    const artworkInput = kitForm.querySelector('[data-artwork-input]');\n    const artworkStatus = root.querySelector('[data-artwork-status]');\n    const logoPreview = root.querySelector('[data-customiser-logo]');\n    const logoStatus = root.querySelector('[data-logo-status]');\n    const teamInput = kitForm.querySelector('input[name=\"team_name\"]');\n    const teamPreview = root.querySelector('[data-preview-team]');\n    const supportsChestTeamName = Boolean(designHandle && designHandle.includes('batting-line'));\n    const syncTeamName = () => {\n      if (!teamPreview) return;\n      teamPreview.hidden = !supportsChestTeamName;\n      teamPreview.textContent = teamInput?.value.trim().toUpperCase() || 'YOUR TEAM';\n    };\n    teamInput?.addEventListener('input', syncTeamName);\n    syncTeamName();\n    let customiserLogoUrl = '';\n    const savedLogo = localStorage.getItem('armadio-team-logo-preview');\n    if (savedLogo && logoPreview) {\n      logoPreview.src = savedLogo;\n      logoPreview.hidden = false;\n      if (logoStatus) { logoStatus.textContent = 'Saved logo restored on this device.'; logoStatus.className = 'as__upload-status is-success'; }\n    }\n    logoInput?.addEventListener('change', async () => {\n      if (customiserLogoUrl) URL.revokeObjectURL(customiserLogoUrl);\n      const file = logoInput.files?.[0];\n      if (!file || !logoPreview) return;\n      logoPreview.hidden = true;\n      if (file.type !== 'image/png' && !file.name.toLowerCase().endsWith('.png')) {\n        logoInput.value = '';\n        if (logoStatus) { logoStatus.textContent = 'Please upload a PNG file only.'; logoStatus.className = 'as__upload-status is-error'; }\n        return;\n      }\n      customiserLogoUrl = URL.createObjectURL(file);\n      const uploadedImage = new Image();\n      uploadedImage.src = customiserLogoUrl;\n      try { await uploadedImage.decode(); } catch (error) {\n        logoInput.value = '';\n        if (logoStatus) { logoStatus.textContent = 'This PNG could not be read. Please upload another file.'; logoStatus.className = 'as__upload-status is-error'; }\n        return;\n      }\n      if (uploadedImage.naturalWidth < 500 || uploadedImage.naturalHeight < 500) {\n        logoInput.value = '';\n        if (logoStatus) { logoStatus.textContent = 'Logo must be at least 500 \u00D7 500 px for clear printing.'; logoStatus.className = 'as__upload-status is-error'; }\n        return;\n      }\n      const canvas = document.createElement('canvas');\n      const scale = Math.min(1, 256 / Math.max(uploadedImage.naturalWidth, uploadedImage.naturalHeight));\n      canvas.width = Math.max(1, Math.round(uploadedImage.naturalWidth * scale));\n      canvas.height = Math.max(1, Math.round(uploadedImage.naturalHeight * scale));\n      const context = canvas.getContext('2d', { willReadFrequently: true });\n      context.drawImage(uploadedImage, 0, 0, canvas.width, canvas.height);\n      const pixels = context.getImageData(0, 0, canvas.width, canvas.height).data;\n      let hasTransparency = false;\n      for (let index = 3; index < pixels.length; index += 4) {\n        if (pixels[index] < 250) { hasTransparency = true; break; }\n      }\n      if (!hasTransparency) {\n        logoInput.value = '';\n        if (logoStatus) { logoStatus.textContent = 'The PNG must have a transparent, background-free canvas.'; logoStatus.className = 'as__upload-status is-error'; }\n        return;\n      }\n      logoPreview.src = customiserLogoUrl;\n      logoPreview.hidden = false;\n      try {\n        localStorage.setItem('armadio-team-logo-preview', canvas.toDataURL('image/png'));\n        localStorage.setItem('armadio-team-logo-name', file.name);\n      } catch (error) {\n        localStorage.removeItem('armadio-team-logo-preview');\n      }\n      if (logoStatus) { logoStatus.textContent = `Logo ready \u00B7 ${uploadedImage.naturalWidth} \u00D7 ${uploadedImage.naturalHeight} px`; logoStatus.className = 'as__upload-status is-success'; }\n    });\n    const savedArtworkName = localStorage.getItem('armadio-artwork-name');\n    if (savedArtworkName && artworkStatus) {\n      artworkStatus.textContent = `Saved selection \u00B7 ${savedArtworkName}`;\n      artworkStatus.className = 'as__upload-status is-success';\n    }\n    artworkInput?.addEventListener('change', () => {\n      const file = artworkInput.files?.[0];\n      if (!file) return;\n      const extension = file.name.split('.').pop()?.toLowerCase() || '';\n      const allowed = new Set(['png', 'jpg', 'jpeg', 'pdf', 'ai', 'psd', 'cdr']);\n      if (!allowed.has(extension)) {\n        artworkInput.value = '';\n        if (artworkStatus) { artworkStatus.textContent = 'Use JPG, PNG, PDF, AI, PSD or CDR artwork.'; artworkStatus.className = 'as__upload-status is-error'; }\n        return;\n      }\n      if (file.size > 20 * 1024 * 1024) {\n        artworkInput.value = '';\n        if (artworkStatus) { artworkStatus.textContent = 'Artwork must be 20 MB or smaller.'; artworkStatus.className = 'as__upload-status is-error'; }\n        return;\n      }\n      localStorage.setItem('armadio-artwork-name', file.name);\n      localStorage.setItem('armadio-artwork-size', String(file.size));\n      if (artworkStatus) { artworkStatus.textContent = `Artwork ready \u00B7 ${file.name}`; artworkStatus.className = 'as__upload-status is-success'; }\n    });\n  }\n  const saveReview = root.querySelector('[data-save-and-review]');\n  if (saveReview) saveReview.addEventListener('click', () => {\n    const form = new FormData(root.querySelector('[data-kit-form]'));\n    const data = Object.fromEntries(form.entries());\n    data.extras = form.getAll('extras');\n    const artwork = form.get('artwork');\n    const teamLogo = form.get('team_logo');\n    data.artwork_name = artwork instanceof File && artwork.name ? artwork.name : localStorage.getItem('armadio-artwork-name') || '';\n    data.team_logo_name = teamLogo instanceof File && teamLogo.name ? teamLogo.name : localStorage.getItem('armadio-team-logo-name') || '';\n    delete data.artwork;\n    delete data.team_logo;\n    getSportsOrderReference();\n    localStorage.setItem('armadio-kit', JSON.stringify(data));\n    localStorage.setItem('armadio-design', root.querySelector('[data-selected-design]').textContent);\n    localStorage.setItem('armadio-design-handle', query.get('design') || '');\n    localStorage.setItem('armadio-design-product-id', query.get('product_id') || '');\n    if (root.querySelector('[data-roster]')) localStorage.setItem('armadio-roster-draft', JSON.stringify(getRosterData()));\n    if (root.querySelector('[data-kit-rosters]')) localStorage.setItem('armadio-kit-layers-draft', JSON.stringify(getKitRosterData()));\n    location.href = '/pages/armadio-sports-review';\n  });\n  root.querySelectorAll('[data-size-guide]').forEach((guide) => {\n    const headings = { jersey: 'Jersey size chart', shorts: 'Shorts size chart', joggers: 'Joggers size chart', jacket: 'Jacket size chart', bib: 'Training bib size chart' };\n    const notes = {\n      jersey: '<strong>How to measure:</strong> Chest is measured around the fullest part. Length is measured from the highest shoulder point to the hem.',\n      shorts: '<strong>Reference fit:</strong> Measure the natural waist and compare with a well-fitting pair of shorts.',\n      joggers: '<strong>Reference fit:</strong> Waist is measured relaxed. Length runs from waistband to ankle.',\n      jacket: '<strong>Reference fit:</strong> Chest is measured around the fullest part over a light layer.',\n      bib: '<strong>Reference fit:</strong> Width is measured flat across the garment; length runs shoulder to hem.'\n    };\n    guide.querySelectorAll('[data-size-product]').forEach((button) => button.addEventListener('click', () => {\n      const product = button.dataset.sizeProduct;\n      guide.querySelectorAll('[data-size-product]').forEach((item) => { const active = item === button; item.classList.toggle('is-active', active); item.setAttribute('aria-selected', active ? 'true' : 'false'); });\n      guide.querySelectorAll('[data-size-panel]').forEach((panel) => { const active = panel.dataset.sizePanel === product; panel.hidden = !active; panel.classList.toggle('is-active', active); });\n      guide.querySelectorAll('[data-size-image]').forEach((image) => { image.hidden = image.dataset.sizeImage !== product; });\n      const heading = guide.querySelector('[data-size-heading]'); if (heading) heading.textContent = headings[product];\n      const note = guide.querySelector('[data-size-note]'); if (note) note.innerHTML = notes[product];\n    }));\n    guide.querySelectorAll('[data-size-age]').forEach((button) => button.addEventListener('click', () => {\n      guide.querySelectorAll('[data-size-age]').forEach((item) => item.classList.toggle('is-active', item === button));\n      guide.querySelectorAll('[data-size-table]').forEach((table) => { table.hidden = button.dataset.sizeAge !== 'both' && table.dataset.sizeTable !== button.dataset.sizeAge; });\n    }));\n  });\n\n  const sizeDialog = root.querySelector('[data-size-dialog]');\n  if (sizeDialog) {\n    root.querySelectorAll('a[href*=\"armadio-sports-size-guide\"], [data-size-dialog-open]').forEach((trigger) => trigger.addEventListener('click', (event) => { event.preventDefault(); sizeDialog.showModal(); }));\n    sizeDialog.querySelector('[data-size-dialog-close]')?.addEventListener('click', () => sizeDialog.close());\n    sizeDialog.addEventListener('click', (event) => { if (event.target === sizeDialog) sizeDialog.close(); });\n  }\n  const roster = root.querySelector('[data-roster]');\n  const rosterCount = root.querySelector('[data-roster-count]');\n  const summaryJerseys = root.querySelector('[data-summary-jerseys]');\n  const summaryExtras = root.querySelector('[data-summary-extras]');\n  const reviewContinue = root.querySelector('[data-review-continue]');\n  let customerLoggedIn = root.dataset.customerLoggedIn === 'true';\n  const sportsAuthReturned = sessionStorage.getItem('armadio-sports-auth-pending') === '1';\n  if (sportsAuthReturned) {\n    customerLoggedIn = true;\n    sessionStorage.removeItem('armadio-sports-auth-pending');\n  }\n  const accountLoginUrl = root.dataset.accountLoginUrl || '/account/login';\n  const approval = root.querySelector('[data-approval]');\n  const sportsCheckoutForm = root.querySelector('[data-sports-checkout-form]');\n  const shippingPinInput = root.querySelector('[data-shipping-pin]');\n  const deliveryPinInput = root.querySelector('[data-delivery-pin]');\n  const shippingResult = root.querySelector('[data-shipping-result]');\n  const shippingCheck = root.querySelector('[data-shipping-check]');\n  const shippingOpen = root.querySelector('[data-shipping-open]');\n  const checkoutCity = root.querySelector('[data-checkout-city]');\n  const checkoutState = root.querySelector('[data-checkout-state]');\n  const checkoutLocality = root.querySelector('[data-checkout-locality]');\n  const checkoutLocalityWrap = root.querySelector('[data-checkout-locality-wrap]');\n  let sportsShipping = null;\n  const isDelhiNcrPin = (pin) => /^(110|121|122|201)\\d{3}$/.test(pin);\n  const getSportsCheckoutDetails = () => ({\n    name: root.querySelector('[data-checkout-name]')?.value.trim() || '',\n    email: root.querySelector('[data-checkout-email]')?.value.trim() || '',\n    phone: root.querySelector('[data-checkout-phone]')?.value.trim() || '',\n    address: root.querySelector('[data-checkout-address]')?.value.trim() || '',\n    city: root.querySelector('[data-checkout-city]')?.value.trim() || '',\n    state: root.querySelector('[data-checkout-state]')?.value.trim() || '',\n    pin: deliveryPinInput?.value.trim() || ''\n  });\n  const kitBuilder = root.querySelector('[data-kit-builder]');\n  const kitRosters = root.querySelector('[data-kit-rosters]');\n  const seniorSizes = ['S', 'M', 'L', 'XL', '2XL', '3XL', '4XL', '5XL'];\n  const juniorSizes = ['2\u20133 Y', '4\u20135 Y', '6\u20137 Y', '8\u20139 Y', '10\u201311 Y', '12\u201313 Y'];\n  const capQualities = [\n    ['promotional-multicolour', 'Promotional multi-colour', 120],\n    ['tipping-cotton', 'Tipping cotton', 306],\n    ['piping-cotton', 'Piping cotton', 306],\n    ['line-stitching-cotton', 'Line stitching cotton', 306],\n    ['embroidered-cotton', 'Embroidered cotton', 306],\n    ['premium-cotton', 'Premium cotton', 419],\n    ['custom-cotton', 'Custom cotton', 419],\n    ['embroidered-denim-standard', 'Embroidered denim \u00B7 Standard', 390],\n    ['embroidered-denim-mid', 'Embroidered denim \u00B7 Plus', 495],\n    ['embroidered-denim-premium', 'Embroidered denim \u00B7 Premium', 540],\n    ['beanie-standard', 'Beanie \u00B7 Standard', 420],\n    ['beanie-mid', 'Beanie \u00B7 Plus', 495],\n    ['beanie-premium', 'Beanie \u00B7 Premium', 570]\n  ];\n  const formatter = new Intl.NumberFormat('en-IN', { style: 'currency', currency: 'INR', maximumFractionDigits: 0 });\n  const getRosterData = () => Array.from(roster?.children || []).map((row) => ({\n    type: row.querySelector('[data-roster-type]')?.value || 'with-details',\n    name: row.querySelector('[data-roster-name]').value.trim(),\n    number: row.querySelector('[data-roster-number]').value.trim(),\n    age: row.querySelector('[data-roster-age]').value,\n    size: row.querySelector('[data-roster-size]').value,\n    sleeve: row.querySelector('[data-roster-sleeve]')?.value || 'Half sleeve'\n  }));\n  const getKitRosterData = () => Array.from(kitRosters?.querySelectorAll('[data-kit-panel]') || []).map((panel) => ({\n    product: panel.dataset.kitPanel,\n    items: Array.from(panel.querySelectorAll('[data-kit-row]')).map((row) => ({\n      name: row.querySelector('[data-kit-name]')?.value.trim() || '',\n      number: row.querySelector('[data-kit-number]')?.value.trim() || '',\n      age: row.querySelector('[data-kit-age]')?.value || 'Adult',\n      size: row.querySelector('[data-kit-size]')?.value || 'One size',\n      quality: row.querySelector('[data-kit-quality]')?.value || '',\n      unitPrice: Number(row.dataset.kitUnitPrice || 0)\n    }))\n  }));\n  const getKitItemPrice = (row) => {\n    const panel = row.closest('[data-kit-panel]');\n    if (!panel) return 0;\n    if (panel.dataset.kitPanel === 'cap') {\n      const quality = capQualities.find(([key]) => key === row.querySelector('[data-kit-quality]')?.value);\n      return quality?.[2] || Number(panel.dataset.kitPrice || 0);\n    }\n    if (panel.dataset.kitPanel === 'jacket' && row.querySelector('[data-kit-size]')?.value === '3XL') return 900;\n    return Number(panel.dataset.kitPrice || 0);\n  };\n  const syncKitRowPrice = (row) => {\n    const price = getKitItemPrice(row);\n    row.dataset.kitUnitPrice = String(price);\n    const output = row.querySelector('[data-kit-row-price]');\n    if (output) output.textContent = formatter.format(price);\n    return price;\n  };\n  const getSavedKitTotal = () => {\n    let layers = [];\n    try { layers = JSON.parse(localStorage.getItem('armadio-kit-layers-draft') || '[]'); } catch (error) { return 0; }\n    if (!Array.isArray(layers)) return 0;\n    const basePrices = { shorts: 350, joggers: 600, jacket: 800, bib: 200, cap: 120 };\n    return layers.reduce((total, layer) => total + (layer.items || []).reduce((layerTotal, item) => {\n      if (layer.product === 'cap') return layerTotal + (capQualities.find(([key]) => key === item.quality)?.[2] || item.unitPrice || 120);\n      if (layer.product === 'jacket' && item.size === '3XL') return layerTotal + 900;\n      return layerTotal + (item.unitPrice || basePrices[layer.product] || 0);\n    }, 0), 0);\n  };\n  const updateReview = () => {\n    if (!roster) return;\n    const players = getRosterData();\n    const validRoster = players.filter((player) => {\n      const personalisationValid = player.type === 'without-details' || player.name || player.number;\n      return player.size && personalisationValid;\n    });\n    const validPlayers = validRoster.length;\n    if (sportsShipping?.mode === 'courier') {\n      sportsShipping.amount = validPlayers * 55;\n      const shippingAmount = shippingResult?.querySelector('strong');\n      if (shippingAmount) shippingAmount.textContent = formatter.format(sportsShipping.amount);\n    }\n    const extras = root.querySelectorAll('[data-kit-row]').length;\n    const previewName = root.querySelector('[data-preview-name]');\n    const previewNumber = root.querySelector('[data-preview-number]');\n    if (previewName) previewName.textContent = 'PLAYER';\n    if (previewNumber) previewNumber.textContent = '00';\n    if (rosterCount) rosterCount.textContent = `${validPlayers} / 15 jerseys`;\n    root.querySelectorAll('[data-summary-jerseys]').forEach((output) => { output.textContent = validPlayers; });\n    if (summaryExtras) summaryExtras.textContent = extras;\n    let storedKit = {};\n    try { storedKit = JSON.parse(localStorage.getItem('armadio-kit') || '{}'); } catch (error) { storedKit = {}; }\n    const storedFabricPrices = { smooth: 500, 'dot-net': 600, core: 600, jacquard: 800, elite: 800 };\n    const fabricPrice = Number(root.querySelector('input[name=\"fabric\"]:checked')?.dataset.price || storedFabricPrices[storedKit.fabric] || 500);\n    const pieceCount = root.querySelector('[data-piece-count]');\n    const unitPriceOutput = root.querySelector('[data-unit-price]');\n    const orderTotal = root.querySelector('[data-order-total]');\n    const jerseyTotal = validRoster.reduce((total, player) => total + fabricPrice + (player.sleeve === 'Full sleeve' ? 100 : 0), 0);\n    const activeKitRows = Array.from(root.querySelectorAll('[data-kit-row]'));\n    const kitTotal = activeKitRows.length ? activeKitRows.reduce((total, row) => total + syncKitRowPrice(row), 0) : getSavedKitTotal();\n    const shippingTotal = sportsShipping?.amount || 0;\n    const grandTotal = jerseyTotal + kitTotal + shippingTotal;\n    if (pieceCount) pieceCount.textContent = validPlayers;\n    if (unitPriceOutput) unitPriceOutput.textContent = formatter.format(fabricPrice);\n    if (orderTotal) orderTotal.textContent = formatter.format(jerseyTotal);\n    root.querySelectorAll('[data-jersey-total]').forEach((output) => { output.textContent = formatter.format(jerseyTotal); });\n    root.querySelectorAll('[data-kit-total]').forEach((output) => { output.textContent = formatter.format(kitTotal); });\n    root.querySelectorAll('[data-grand-total], [data-summary-order-total]').forEach((output) => { output.textContent = formatter.format(grandTotal); });\n    root.querySelectorAll('[data-checkout-jersey-line], [data-checkout-jersey-total]').forEach((output) => { output.textContent = formatter.format(jerseyTotal); });\n    root.querySelectorAll('[data-checkout-final-total]').forEach((output) => { output.textContent = sportsShipping ? formatter.format(grandTotal) : '\u2014'; });\n    localStorage.setItem('armadio-order-pricing', JSON.stringify({ jerseyTotal, kitTotal, shippingTotal, discountAmount: 0, grandTotal, originalTotal: grandTotal }));\n    const remaining = Math.max(0, 15 - validPlayers);\n    const incompleteNotice = root.querySelector('[data-checkout-incomplete]');\n    const moqState = root.querySelector('[data-checkout-moq-state]');\n    const checkoutTitle = root.querySelector('[data-checkout-title]');\n    const checkoutSaving = root.querySelector('[data-checkout-saving]');\n    if (incompleteNotice) incompleteNotice.hidden = remaining === 0;\n    if (moqState) {\n      moqState.textContent = remaining ? `${remaining} jersey${remaining === 1 ? '' : 's'} still required` : '15-player minimum met';\n      moqState.classList.toggle('is-incomplete', remaining > 0);\n    }\n    if (checkoutTitle) checkoutTitle.textContent = remaining ? 'Your team kit, finish your squad.' : `${(JSON.parse(localStorage.getItem('armadio-kit') || '{}').team_name || 'Your team kit')}, your squad is ready.`;\n    if (checkoutSaving) {\n      checkoutSaving.textContent = remaining ? `Minimum order not met \u00B7 ${remaining} jersey${remaining === 1 ? '' : 's'} required` : 'Team pricing applied \u00B7 MOQ complete';\n      checkoutSaving.classList.toggle('is-incomplete', remaining > 0);\n    }\n    const checkoutDetailsValid = !sportsCheckoutForm || sportsCheckoutForm.checkValidity();\n    const ready = remaining === 0 && (!approval || approval.checked) && checkoutDetailsValid && sportsShipping !== null;\n    if (reviewContinue) {\n      reviewContinue.disabled = !ready;\n      reviewContinue.textContent = remaining ? `Add ${remaining} more jersey${remaining === 1 ? '' : 's'} to continue` : !approval?.checked ? 'Confirm roster to continue' : !sportsShipping ? 'Calculate shipping to continue' : !checkoutDetailsValid ? 'Complete the required details' : !customerLoggedIn ? 'Login / create account to continue \u2192' : `Pay ${formatter.format(grandTotal)} securely with PayU \u2192`;\n    }\n    if (saveReview) {\n      saveReview.disabled = remaining > 0;\n      saveReview.textContent = remaining ? `Add ${remaining} more jersey${remaining === 1 ? '' : 's'} to continue` : 'Save kit & continue \u2192';\n    }\n  };\n  const setSizeOptions = (row) => {\n    const age = row.querySelector('[data-roster-age]').value;\n    const size = row.querySelector('[data-roster-size]');\n    const values = age === 'Junior' ? juniorSizes : seniorSizes;\n    const current = size.value;\n    size.innerHTML = values.map((value) => `<option>${value}</option>`).join('');\n    if (values.includes(current)) size.value = current;\n  };\n  const addPlayer = (player = {}) => {\n    if (!roster) return;\n    const row = document.createElement('div');\n    row.className = 'as__roster-row';\n    row.innerHTML = '<label><span>Jersey personalisation</span><select data-roster-type><option value=\"with-details\">With name and/or number</option><option value=\"without-details\">Without name and/or number</option></select><input maxlength=\"18\" placeholder=\"Name on jersey (optional)\" data-roster-name></label><label><span>Number</span><input inputmode=\"numeric\" pattern=\"[0-9]{0,4}\" maxlength=\"4\" placeholder=\"Optional\" data-roster-number></label><label><span>Age group</span><select data-roster-age><option>Senior</option><option>Junior</option></select></label><label><span>Size</span><select data-roster-size></select></label><label><span>Sleeve</span><select data-roster-sleeve><option>Half sleeve</option><option>Full sleeve</option></select></label><button type=\"button\" class=\"as__roster-remove\" aria-label=\"Remove jersey\">\u00D7</button>';\n    const savedType = player.type === 'Plain' || player.type === 'without-details' ? 'without-details' : 'with-details';\n    row.querySelector('[data-roster-type]').value = savedType;\n    row.querySelector('[data-roster-age]').value = player.age || 'Senior';\n    setSizeOptions(row);\n    row.querySelector('[data-roster-name]').value = player.name || '';\n    row.querySelector('[data-roster-number]').value = String(player.number || '').replace(/\\D/g, '').slice(0, 4);\n    if (player.size) row.querySelector('[data-roster-size]').value = player.size;\n    if (player.sleeve) row.querySelector('[data-roster-sleeve]').value = player.sleeve;\n    const syncRosterType = () => {\n      const plain = row.querySelector('[data-roster-type]').value === 'without-details';\n      const name = row.querySelector('[data-roster-name]');\n      const number = row.querySelector('[data-roster-number]');\n      name.disabled = plain;\n      number.disabled = plain;\n      name.required = false;\n      number.required = false;\n      if (plain) { name.value = ''; number.value = ''; }\n      row.classList.toggle('is-plain', plain);\n      updateReview();\n    };\n    row.querySelector('[data-roster-type]').addEventListener('change', syncRosterType);\n    row.querySelector('[data-roster-age]').addEventListener('change', () => { setSizeOptions(row); updateReview(); });\n    row.querySelector('[data-roster-number]').addEventListener('input', (event) => {\n      event.currentTarget.value = event.currentTarget.value.replace(/\\D/g, '').slice(0, 4);\n    });\n    row.querySelectorAll('input, select').forEach((field) => field.addEventListener('input', updateReview));\n    row.querySelector('button').addEventListener('click', () => { row.remove(); updateReview(); });\n    roster.appendChild(row);\n    syncRosterType();\n    updateReview();\n  };\n  const rosterImport = root.querySelector('[data-roster-import]');\n  if (rosterImport && roster) {\n    const fileInput = rosterImport.querySelector('[data-roster-file]');\n    const status = rosterImport.querySelector('[data-roster-import-status]');\n    const review = rosterImport.querySelector('[data-roster-import-review]');\n    const summary = rosterImport.querySelector('[data-roster-import-summary]');\n    let importedPlayers = [];\n    const cleanHeader = (value) => String(value || '').toLowerCase().replace(/[^a-z0-9]/g, '');\n    const aliases = {\n      name: ['name', 'player', 'playername', 'fullname', 'studentname', 'participantname', 'athletename', 'membername', 'jerseyname', 'nameonjersey'],\n      number: ['number', 'no', 'playernumber', 'jerseynumber', 'shirtno'],\n      age: ['age', 'agegroup', 'category', 'fit'],\n      size: ['size', 'jerseysize', 'tshirtsize', 'shirtsize'],\n      sleeve: ['sleeve', 'sleeves', 'sleevetype', 'sleevelength']\n    };\n    const findValue = (row, key) => {\n      const header = Object.keys(row).find((item) => aliases[key].includes(cleanHeader(item)));\n      return header ? String(row[header] ?? '').trim() : '';\n    };\n    const normaliseSize = (value) => {\n      const size = String(value || '').toUpperCase().replace(/\\s+/g, '').replace('XXXL', '3XL').replace('XXL', '2XL');\n      const senior = { S: 'S', M: 'M', L: 'L', XL: 'XL', '2XL': '2XL', '3XL': '3XL', '4XL': '4XL', '5XL': '5XL' };\n      if (senior[size]) return senior[size];\n      const years = size.match(/(2|4|6|8|10|12)(?:-|\u2013|TO)?(3|5|7|9|11|13)/);\n      return years ? `${years[1]}\u2013${years[2]} Y` : '';\n    };\n    const mapPlayer = (row, index) => {\n      const name = findValue(row, 'name').slice(0, 18);\n      const number = findValue(row, 'number').replace(/\\.0$/, '').replace(/\\D/g, '').slice(0, 4);\n      const rawAge = findValue(row, 'age').toLowerCase();\n      const size = normaliseSize(findValue(row, 'size'));\n      const age = rawAge.includes('junior') || rawAge.includes('kid') || juniorSizes.includes(size) ? 'Junior' : rawAge.includes('senior') ? 'Senior' : '';\n      const rawSleeve = findValue(row, 'sleeve');\n      const sleeve = /full|long/i.test(rawSleeve) ? 'Full sleeve' : /half|short/i.test(rawSleeve) ? 'Half sleeve' : '';\n      const missing = [!age && 'Age Group', !size && 'Size', !sleeve && 'Sleeve'].filter(Boolean);\n      return { type: name || number ? 'with-details' : 'without-details', name, number, age, size, sleeve, missing, sourceRow: index + 2 };\n    };\n    const showImport = (rows) => {\n      const ignoredRows = [];\n      const activeRows = rows.filter((row, index) => {\n        if (/^example:/i.test(findValue(row, 'name'))) {\n          ignoredRows.push(`row ${index + 2}: template example was not replaced`);\n          return false;\n        }\n        const active = ['name', 'number', 'size', 'sleeve'].some((key) => findValue(row, key)) || !/^senior$/i.test(findValue(row, 'age'));\n        return active;\n      });\n      importedPlayers = activeRows.map(mapPlayer);\n      const invalid = importedPlayers.filter((player) => player.missing.length > 0);\n      const applyButton = review.querySelector('[data-roster-import-apply]');\n      if (applyButton) applyButton.hidden = true;\n      review.hidden = importedPlayers.length === 0 && ignoredRows.length === 0;\n      if (invalid.length) {\n        summary.innerHTML = `<strong>${importedPlayers.length} roster row${importedPlayers.length === 1 ? '' : 's'} read</strong><span>Upload stopped. Please complete ${invalid.map((player) => `row ${player.sourceRow}: ${player.missing.join(', ')}`).join(' \u00B7 ')}${ignoredRows.length ? ` \u00B7 Ignored ${ignoredRows.join(' \u00B7 ')}` : ''}</span>`;\n      } else if (importedPlayers.length) {\n        roster.innerHTML = '';\n        importedPlayers.forEach(addPlayer);\n        localStorage.setItem('armadio-roster-draft', JSON.stringify(getRosterData()));\n        summary.innerHTML = `<strong>${importedPlayers.length} jersey${importedPlayers.length === 1 ? '' : 's'} added below</strong><span>${ignoredRows.length ? `Ignored ${ignoredRows.join(' \u00B7 ')}. Replace the example row with a real player if it should count.` : 'Every spreadsheet row has been added and remains editable.'}</span>`;\n      }\n      status.textContent = invalid.length ? 'Roster not imported. Fix the exact rows listed below and upload again.' : importedPlayers.length ? 'Roster uploaded and added below.' : 'No player rows were found in this sheet.';\n      status.classList.toggle('is-error', invalid.length > 0);\n      status.classList.toggle('is-success', invalid.length === 0 && importedPlayers.length > 0);\n      if (!invalid.length && importedPlayers.length) roster.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    };\n    fileInput?.addEventListener('change', async () => {\n      const file = fileInput.files?.[0];\n      if (!file) return;\n      status.className = 'as__roster-import-status';\n      status.textContent = `Reading ${file.name}\u2026`;\n      review.hidden = true;\n      try {\n        if (!window.XLSX) throw new Error('Spreadsheet reader is still loading. Please try again.');\n        const workbook = window.XLSX.read(await file.arrayBuffer(), { type: 'array' });\n        const sheet = workbook.Sheets[workbook.SheetNames[0]];\n        showImport(window.XLSX.utils.sheet_to_json(sheet, { defval: '', raw: false }));\n      } catch (error) {\n        status.textContent = error.message || 'This file could not be read. Please use the roster template.';\n        status.classList.add('is-error');\n      }\n    });\n    rosterImport.querySelector('[data-roster-template]')?.addEventListener('click', () => {\n      if (!window.XLSX) {\n        status.textContent = 'The Excel template generator is still loading. Please try again in a moment.';\n        status.classList.add('is-error');\n        return;\n      }\n      const rows = [\n        ['Name', 'Number', 'Age Group', 'Size', 'Sleeve'],\n        ['Aarav', '7', 'Senior', 'M', 'Half sleeve'],\n        ['Kabir', '10', 'Senior', 'L', 'Full sleeve']\n      ];\n      const sheet = window.XLSX.utils.aoa_to_sheet(rows);\n      sheet['!cols'] = [{ wch: 24 }, { wch: 12 }, { wch: 16 }, { wch: 12 }, { wch: 18 }];\n      const workbook = window.XLSX.utils.book_new();\n      window.XLSX.utils.book_append_sheet(workbook, sheet, 'Team roster');\n      window.XLSX.writeFile(workbook, 'armadio-sports-roster-template.xlsx', { compression: true });\n      status.textContent = 'Excel roster template downloaded.';\n      status.classList.remove('is-error');\n      status.classList.add('is-success');\n    });\n    rosterImport.querySelector('[data-roster-template]')?.addEventListener('click', async (event) => {\n      const themeScript = document.querySelector('script[src*=\"armadio-sports.js\"]');\n      const templateUrl = themeScript?.src.replace(/armadio-sports\\.js(?:\\?.*)?$/, 'armadio-sports-roster-template.xlsx');\n      if (!templateUrl) return;\n      event.preventDefault();\n      event.stopImmediatePropagation();\n      const button = event.currentTarget;\n      button.disabled = true;\n      status.textContent = 'Preparing the Excel roster template\u2026';\n      status.classList.remove('is-error', 'is-success');\n      try {\n        const response = await fetch(templateUrl, { mode: 'cors', credentials: 'omit', cache: 'no-store' });\n        if (!response.ok) throw new Error(`Template request failed: ${response.status}`);\n        const blob = await response.blob();\n        const objectUrl = URL.createObjectURL(blob);\n        const download = document.createElement('a');\n        download.href = objectUrl;\n        download.download = 'armadio-sports-roster-template.xlsx';\n        download.hidden = true;\n        document.body.appendChild(download);\n        download.click();\n        download.remove();\n        window.setTimeout(() => URL.revokeObjectURL(objectUrl), 30000);\n        status.textContent = 'Excel roster template downloaded. Check your Downloads folder.';\n        status.classList.add('is-success');\n      } catch (error) {\n        console.error('Armadio roster template download failed', error);\n        status.textContent = 'The template could not be downloaded. Please try again.';\n        status.classList.add('is-error');\n      } finally {\n        button.disabled = false;\n      }\n    }, true);\n  }\n  if (roster) {\n    const rosterHead = roster.parentElement?.querySelector('.as__roster-head');\n    if (rosterHead && !rosterHead.querySelector('[data-roster-sleeve-heading]')) {\n      const sleeveHeading = document.createElement('span');\n      sleeveHeading.dataset.rosterSleeveHeading = '';\n      sleeveHeading.textContent = 'Sleeve';\n      rosterHead.insertBefore(sleeveHeading, rosterHead.children[4] || null);\n    }\n    let saved = [];\n    try { saved = JSON.parse(localStorage.getItem('armadio-roster-draft') || '[]'); } catch (error) { localStorage.removeItem('armadio-roster-draft'); }\n    if (Array.isArray(saved) && saved.length) saved.forEach(addPlayer); else addPlayer();\n    root.querySelector('[data-add-player]')?.addEventListener('click', () => addPlayer());\n    root.querySelectorAll('input[name=\"fabric\"]').forEach((input) => input.addEventListener('change', updateReview));\n    approval?.addEventListener('change', updateReview);\n    const kit = JSON.parse(localStorage.getItem('armadio-kit') || '{}');\n    const design = localStorage.getItem('armadio-design') || 'Volt';\n    root.querySelectorAll('[data-review-design], [data-summary-design]').forEach((item) => { item.textContent = design; });\n    root.querySelectorAll('[data-review-team], [data-summary-team]').forEach((item) => { item.textContent = kit.team_name || 'Your team kit'; });\n    root.querySelectorAll('[data-order-reference]').forEach((item) => { item.textContent = getSportsOrderReference(); });\n    const fabricNames = { smooth: 'Smooth / Polyester', core: 'Dot Net', elite: 'Elite / Jacquard' };\n    root.querySelectorAll('[data-review-fabric], [data-summary-fabric]').forEach((item) => { item.textContent = fabricNames[kit.fabric] || 'Smooth / Polyester'; });\n    const savedColour = localStorage.getItem('armadio-kit-colour') || 'As selected';\n    root.querySelectorAll('[data-summary-colour]').forEach((item) => { item.textContent = savedColour; });\n    root.querySelectorAll('[name=\"kit_colour\"]').forEach((input) => input.addEventListener('change', () => {\n      root.querySelectorAll('[data-summary-colour]').forEach((item) => { item.textContent = input.value; });\n      localStorage.setItem('armadio-kit-colour', input.value);\n    }));\n    updateReview();\n  }\n  if (root.matches('[data-page-kind=\"review\"]') || root.dataset.pageKind === 'review') {\n    localStorage.removeItem('armadio-sports-checkout');\n    const addWorkingDays = (start, days) => {\n      const result = new Date(start);\n      let added = 0;\n      while (added < days) {\n        result.setDate(result.getDate() + 1);\n        if (result.getDay() !== 0 && result.getDay() !== 6) added += 1;\n      }\n      return result;\n    };\n    const formatDeliveryDate = (date) => new Intl.DateTimeFormat('en-IN', { day: 'numeric', month: 'short', year: 'numeric' }).format(date);\n    const deliveryWindow = root.querySelector('[data-delivery-window]');\n    if (deliveryWindow) deliveryWindow.textContent = `${formatDeliveryDate(addWorkingDays(new Date(), 15))} \u2013 ${formatDeliveryDate(addWorkingDays(new Date(), 17))}`;\n    const lookupPincode = async (pin) => {\n      try {\n        const response = await fetch(`https://api.postalpincode.in/pincode/${encodeURIComponent(pin)}`, { headers: { Accept: 'application/json' } });\n        if (!response.ok) return null;\n        const payload = await response.json();\n        const offices = Array.isArray(payload?.[0]?.PostOffice) ? payload[0].PostOffice : [];\n        if (!offices.length) return null;\n        return {\n          city: offices[0].District || offices[0].Block || '',\n          state: offices[0].State || '',\n          localities: [...new Set(offices.map((office) => office.Name).filter(Boolean))]\n        };\n      } catch (error) {\n        return null;\n      }\n    };\n    const applyPincodeLocation = (location) => {\n      if (!location) return;\n      if (checkoutCity && location.city) checkoutCity.value = location.city;\n      if (checkoutState && location.state) checkoutState.value = location.state;\n      if (checkoutLocality && checkoutLocalityWrap) {\n        checkoutLocality.innerHTML = ['<option value=\"\">Choose locality / post office</option>', ...location.localities.map((name) => `<option value=\"${name.replace(/\"/g, '&quot;')}\">${name}</option>`)].join('');\n        checkoutLocalityWrap.hidden = location.localities.length === 0;\n        if (location.localities.length === 1) checkoutLocality.value = location.localities[0];\n      }\n    };\n    let shippingRequest = 0;\n    const calculateShipping = async () => {\n      const request = ++shippingRequest;\n      const pin = shippingPinInput?.value.trim() || '';\n      if (!/^\\d{6}$/.test(pin)) {\n        sportsShipping = null;\n        shippingResult?.classList.remove('is-calculated', 'is-delhi');\n        if (shippingResult) shippingResult.textContent = 'Enter a valid 6-digit delivery PIN.';\n        updateReview();\n        return;\n      }\n      if (shippingCheck) {\n        shippingCheck.disabled = true;\n        shippingCheck.textContent = 'Checking\u2026';\n      }\n      const deliveryPinAtStart = deliveryPinInput?.value;\n      sportsShipping = null;\n      updateReview();\n      const location = await lookupPincode(pin);\n      if (request !== shippingRequest) return;\n      if (shippingCheck) {\n        shippingCheck.disabled = false;\n        shippingCheck.textContent = 'Check PIN';\n      }\n      if (shippingPinInput?.value.trim() !== pin || deliveryPinInput?.value !== deliveryPinAtStart) return;\n      applyPincodeLocation(location);\n      const jerseyCount = getRosterData().filter((player) => player.size && (player.type === 'without-details' || player.name || player.number)).length;\n      const porter = isDelhiNcrPin(pin);\n      sportsShipping = { amount: porter ? 0 : jerseyCount * 55, mode: porter ? 'porter' : 'courier', pin };\n      if (shippingOpen) shippingOpen.hidden = true;\n      if (deliveryPinInput) deliveryPinInput.value = pin;\n      if (shippingResult) {\n        shippingResult.classList.add('is-calculated');\n        shippingResult.classList.toggle('is-delhi', porter);\n        const place = location?.city && location?.state ? ` \u00B7 ${location.city}, ${location.state}` : '';\n        shippingResult.innerHTML = porter ? `<span>Delhi NCR${place} \u00B7 Porter services available</span><strong>Confirmed separately</strong>` : `<span>Delivery available${place}</span><strong>${formatter.format(sportsShipping.amount)}</strong>`;\n      }\n      updateReview();\n    };\n    shippingCheck?.addEventListener('click', calculateShipping);\n    shippingOpen?.addEventListener('click', () => shippingPinInput?.focus());\n    shippingPinInput?.addEventListener('input', () => {\n      shippingRequest += 1;\n      if (shippingCheck) {\n        shippingCheck.disabled = false;\n        shippingCheck.textContent = 'Check PIN';\n      }\n      sportsShipping = null;\n      if (shippingOpen) shippingOpen.hidden = false;\n      if (shippingResult) shippingResult.textContent = 'Check the PIN to calculate shipping.';\n      shippingResult?.classList.remove('is-calculated', 'is-delhi');\n      updateReview();\n    });\n    sportsCheckoutForm?.addEventListener('input', () => {\n      if (deliveryPinInput && sportsShipping && deliveryPinInput.value.trim() !== sportsShipping.pin) {\n        sportsShipping = null;\n        if (shippingOpen) shippingOpen.hidden = false;\n        if (shippingResult) shippingResult.textContent = 'Delivery PIN changed. Check the PIN again to calculate shipping.';\n        shippingResult?.classList.remove('is-calculated', 'is-delhi');\n      }\n      updateReview();\n    });\n    let savedCheckoutDraft = {};\n    try { savedCheckoutDraft = JSON.parse(sessionStorage.getItem('armadio-sports-checkout-draft') || '{}'); } catch (error) { sessionStorage.removeItem('armadio-sports-checkout-draft'); }\n    if (savedCheckoutDraft && Object.keys(savedCheckoutDraft).length) {\n      const checkoutFields = {\n        name: root.querySelector('[data-checkout-name]'),\n        email: root.querySelector('[data-checkout-email]'),\n        phone: root.querySelector('[data-checkout-phone]'),\n        address: root.querySelector('[data-checkout-address]'),\n        city: checkoutCity,\n        state: checkoutState,\n        pin: deliveryPinInput\n      };\n      Object.entries(checkoutFields).forEach(([key, field]) => { if (field && savedCheckoutDraft[key]) field.value = savedCheckoutDraft[key]; });\n      if (approval) approval.checked = Boolean(savedCheckoutDraft.approved);\n      if (shippingPinInput && savedCheckoutDraft.shippingPin) {\n        shippingPinInput.value = savedCheckoutDraft.shippingPin;\n        calculateShipping().then(() => {\n          if (checkoutLocality && savedCheckoutDraft.locality) checkoutLocality.value = savedCheckoutDraft.locality;\n          updateReview();\n        });\n      } else updateReview();\n    }\n    const designHandle = localStorage.getItem('armadio-design-handle') || '';\n    if (designHandle) fetch(`/products/${encodeURIComponent(designHandle)}.js`, { headers: { Accept: 'application/json' } }).then((response) => {\n      if (!response.ok) throw new Error('Product preview unavailable');\n      return response.json();\n    }).then((product) => {\n      const mediaItems = Array.isArray(product.media) && product.media.length\n        ? product.media.map((media) => ({ src: media.preview_image?.src || media.src, alt: String(media.alt || media.preview_image?.alt || '').toLowerCase() })).filter((media) => media.src)\n        : (product.images || []).map((src) => ({ src, alt: '' }));\n      const front = mediaItems.find((media) => media.alt.includes('half sleeve front') || (media.alt.includes('front') && !media.alt.includes('back'))) || mediaItems[1] || mediaItems[0];\n      const back = mediaItems.find((media) => media.alt.includes('half sleeve back') || (media.alt.includes('back') && !media.alt.includes('front'))) || mediaItems[2] || mediaItems[1] || mediaItems[0];\n      const frontImage = root.querySelector('[data-checkout-product-front]');\n      const backImage = root.querySelector('[data-checkout-product-back]');\n      if (frontImage && front?.src) frontImage.src = front.src;\n      if (backImage && back?.src) backImage.src = back.src;\n    }).catch(() => {});\n    updateReview();\n  }\n  if (kitBuilder && kitRosters) {\n    let savedKitLayers = [];\n    try { savedKitLayers = JSON.parse(localStorage.getItem('armadio-kit-layers-draft') || '[]'); } catch (error) { localStorage.removeItem('armadio-kit-layers-draft'); }\n    const saveKitLayers = () => {\n      localStorage.setItem('armadio-kit-layers-draft', JSON.stringify(getKitRosterData()));\n      updateReview();\n    };\n    const addKitRow = (panel, item = {}) => {\n      const printMode = panel.dataset.kitPrint;\n      const sized = panel.dataset.kitSized === 'true';\n      const row = document.createElement('div');\n      row.className = 'as__kit-row';\n      row.dataset.kitRow = '';\n      const nameField = printMode === 'name-number' ? '<label><span>Name</span><input maxlength=\"18\" placeholder=\"Optional name\" data-kit-name></label>' : '';\n      const numberField = printMode === 'number' || printMode === 'name-number' ? '<label><span>Number</span><input inputmode=\"numeric\" maxlength=\"3\" placeholder=\"Optional\" data-kit-number></label>' : '';\n      const fitFields = sized ? '<label><span>Age group</span><select data-kit-age><option>Senior</option><option>Junior</option></select></label><label><span>Size</span><select data-kit-size></select></label>' : '<p class=\"as__kit-one-size\">Adult \u00B7 One size</p>';\n      const qualityField = panel.dataset.kitPanel === 'cap' ? `<label class=\"as__kit-quality\"><span>Cap quality</span><select data-kit-quality>${capQualities.map(([key, label, price]) => `<option value=\"${key}\">${label} \u00B7 ${formatter.format(price)}</option>`).join('')}</select></label>` : '';\n      row.innerHTML = `${nameField}${numberField}${fitFields}${qualityField}<output class=\"as__kit-row-price\" data-kit-row-price aria-label=\"Item price\">${formatter.format(Number(panel.dataset.kitPrice || 0))}</output><button type=\"button\" class=\"as__roster-remove\" aria-label=\"Remove item\">\u00D7</button>`;\n      const age = row.querySelector('[data-kit-age]');\n      const size = row.querySelector('[data-kit-size]');\n      const syncKitSizes = () => {\n        if (!age || !size) return;\n        const values = age.value === 'Junior' ? juniorSizes : seniorSizes;\n        const current = size.value || item.size || '';\n        size.innerHTML = values.map((value) => `<option>${value}</option>`).join('');\n        if (values.includes(current)) size.value = current;\n      };\n      if (row.querySelector('[data-kit-name]')) row.querySelector('[data-kit-name]').value = item.name || '';\n      if (row.querySelector('[data-kit-number]')) row.querySelector('[data-kit-number]').value = item.number || '';\n      if (row.querySelector('[data-kit-quality]') && item.quality) row.querySelector('[data-kit-quality]').value = item.quality;\n      if (age) age.value = item.age || 'Senior';\n      syncKitSizes();\n      if (size && item.size) size.value = item.size;\n      syncKitRowPrice(row);\n      age?.addEventListener('change', () => { syncKitSizes(); saveKitLayers(); });\n      row.querySelectorAll('input, select').forEach((field) => field.addEventListener('input', saveKitLayers));\n      row.querySelector('button').addEventListener('click', () => { row.remove(); saveKitLayers(); });\n      panel.querySelector('[data-kit-list]').appendChild(row);\n      saveKitLayers();\n    };\n    const openKitPanel = (button, savedItems = []) => {\n      const key = button.dataset.kitProduct;\n      if (kitRosters.querySelector(`[data-kit-panel=\"${key}\"]`)) return;\n      button.classList.add('is-selected');\n      button.setAttribute('aria-pressed', 'true');\n      button.querySelector('small').textContent = 'Added to kit';\n      const panel = document.createElement('article');\n      panel.className = 'as__kit-panel';\n      panel.dataset.kitPanel = key;\n      panel.dataset.kitPrint = button.dataset.kitPrint;\n      panel.dataset.kitSized = button.dataset.kitSized;\n      panel.dataset.kitPrice = button.dataset.kitPrice;\n      const rule = button.dataset.kitPrint === 'name-number' ? 'Name and number printing available.' : button.dataset.kitPrint === 'number' ? 'Number printing available; names are not printed on this item.' : 'Adult one-size item; no name or number printing.';\n      panel.innerHTML = `<div class=\"as__kit-panel-head\"><div><h3>${button.dataset.kitName} roster</h3><p>${rule}</p></div><div><button type=\"button\" class=\"as__button as__button--small\" data-add-kit-row>\uFF0B Add item</button><button type=\"button\" class=\"as__kit-remove-layer\" aria-label=\"Remove ${button.dataset.kitName} from kit\">Remove layer</button></div></div><div class=\"as__kit-list\" data-kit-list></div>`;\n      kitRosters.appendChild(panel);\n      panel.querySelector('[data-add-kit-row]').addEventListener('click', () => addKitRow(panel));\n      panel.querySelector('.as__kit-remove-layer').addEventListener('click', () => {\n        panel.remove();\n        button.classList.remove('is-selected');\n        button.setAttribute('aria-pressed', 'false');\n        button.querySelector('small').textContent = `From ${formatter.format(Number(button.dataset.kitPrice || 0))} \u00B7 Add`;\n        saveKitLayers();\n      });\n      if (savedItems.length) savedItems.forEach((item) => addKitRow(panel, item)); else addKitRow(panel);\n    };\n    kitBuilder.querySelectorAll('[data-kit-product]').forEach((button) => {\n      const savedLayer = Array.isArray(savedKitLayers) ? savedKitLayers.find((layer) => layer.product === button.dataset.kitProduct) : null;\n      if (savedLayer) openKitPanel(button, savedLayer.items || []);\n      button.addEventListener('click', () => {\n        const panel = kitRosters.querySelector(`[data-kit-panel=\"${button.dataset.kitProduct}\"]`);\n        if (panel) panel.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); else openKitPanel(button);\n      });\n    });\n  }\n  const importInput = root.querySelector('[data-roster-import]');\n  if (importInput) importInput.addEventListener('change', async () => {\n    const file = importInput.files[0]; if (!file) return;\n    const lines = (await file.text()).split(/\\r?\\n/).filter(Boolean).slice(1, 51);\n    lines.forEach((line) => { const values = line.split(','); addPlayer({ name: values[0], number: values[1], age: values[2], size: values[3], extra: values[4] }); });\n  });\n  const status = root.querySelector('[data-status]');\n  const deliveryInput = root.querySelector('input[placeholder=\"Enter pincode\"]');\n  deliveryInput?.closest('label')?.remove();\n  const summaryNote = root.querySelector('.as__summary-note');\n  if (summaryNote) summaryNote.textContent = 'After you place the order, an Armadio team member will be assigned and will contact you directly for artwork, production and delivery coordination.';\n  const fetchProductForCheckout = async (handle) => {\n    const response = await fetch(`/products/${encodeURIComponent(handle)}.js`, { headers: { Accept: 'application/json' } });\n    if (!response.ok) throw new Error(`The checkout product \u201C${handle}\u201D is unavailable.`);\n    return response.json();\n  };\n  const normaliseVariantTitle = (value) => String(value || '').trim().toLowerCase();\n  const getSavedKitLayers = () => {\n    try {\n      const saved = JSON.parse(localStorage.getItem('armadio-kit-layers-draft') || '[]');\n      return Array.isArray(saved) ? saved : [];\n    } catch (error) {\n      return [];\n    }\n  };\n  const addSportsOrderToCart = async () => {\n    const rosterEntries = getRosterData().filter((player) => {\n      const personalisationValid = player.type === 'without-details' || player.name || player.number;\n      return player.size && personalisationValid;\n    });\n    if (rosterEntries.length < 15) throw new Error('Please add at least 15 valid jerseys before checkout.');\n    if (!sportsShipping) throw new Error('Please calculate shipping with the delivery PIN.');\n    if (sportsCheckoutForm && !sportsCheckoutForm.reportValidity()) throw new Error('Please complete the required contact and delivery details.');\n    const checkoutDetails = getSportsCheckoutDetails();\n\n    let kit = {};\n    try { kit = JSON.parse(localStorage.getItem('armadio-kit') || '{}'); } catch (error) { kit = {}; }\n    const design = localStorage.getItem('armadio-design') || 'Custom design';\n    const designHandle = localStorage.getItem('armadio-design-handle') || '';\n    const colour = localStorage.getItem('armadio-kit-colour') || root.querySelector('[name=\"kit_colour\"]:checked')?.value || 'As selected';\n    const teamName = kit.team_name?.trim() || 'Team order';\n    const fabric = kit.fabric || 'smooth';\n    const fabricLabels = { smooth: 'Smooth / Polyester', 'dot-net': 'Dot Net', core: 'Dot Net', jacquard: 'Elite / Jacquard', elite: 'Elite / Jacquard' };\n    const lettering = kit.lettering || 'athletic';\n    const baseHandle = designHandle || 'armadio-sports-custom-jersey';\n    const [baseProduct, addOnProduct] = await Promise.all([\n      fetchProductForCheckout(baseHandle),\n      fetchProductForCheckout('armadio-sports-add-ons')\n    ]);\n    const baseVariant = baseProduct.variants?.find((variant) => variant.available !== false) || baseProduct.variants?.[0];\n    if (!baseVariant?.id) throw new Error('The selected jersey is not available for checkout.');\n    const addOnVariants = new Map((addOnProduct.variants || []).map((variant) => [normaliseVariantTitle(variant.title), variant]));\n    const requireAddOn = (title) => {\n      const variant = addOnVariants.get(normaliseVariantTitle(title));\n      if (!variant?.id) throw new Error(`The billing item \u201C${title}\u201D is not available.`);\n      return variant.id;\n    };\n    const commonProperties = {\n      'Order reference': getSportsOrderReference(),\n      'Team': teamName,\n      'Design': design,\n      'Fabric': fabricLabels[fabric] || fabric,\n      'Kit colour': colour,\n      'Lettering': lettering.charAt(0).toUpperCase() + lettering.slice(1),\n      'Customer email': checkoutDetails.email,\n      'Customer phone': checkoutDetails.phone,\n      'Delivery address': `${checkoutDetails.address}, ${checkoutDetails.city}, ${checkoutDetails.state} - ${checkoutDetails.pin}`,\n      'Shipping method': sportsShipping.mode === 'porter' ? 'Delhi NCR \u00B7 Porter \u00B7 charge confirmed separately' : `Outside Delhi courier \u00B7 ${formatter.format(sportsShipping.amount)}`,\n      '_Armadio Sports order': 'Yes'\n    };\n    const items = rosterEntries.map((player, index) => ({\n      id: baseVariant.id,\n      quantity: 1,\n      properties: {\n        ...commonProperties,\n        'Roster position': String(index + 1),\n        'Personalisation': player.type === 'without-details' ? 'Plain jersey' : 'Name and/or number',\n        'Player name': player.name || '\u2014',\n        'Player number': player.number || '\u2014',\n        'Age group': player.age,\n        'Size': player.size,\n        'Sleeve': player.sleeve\n      }\n    }));\n    if (fabric === 'dot-net' || fabric === 'core') {\n      items.push({ id: requireAddOn('Dot Net fabric upgrade'), quantity: rosterEntries.length, properties: { Team: teamName, Design: design, '_Armadio Sports order': 'Yes' } });\n    }\n    if (fabric === 'jacquard' || fabric === 'elite') {\n      items.push({ id: requireAddOn('Elite / Jacquard fabric upgrade'), quantity: rosterEntries.length, properties: { Team: teamName, Design: design, '_Armadio Sports order': 'Yes' } });\n    }\n    const fullSleeveCount = rosterEntries.filter((player) => player.sleeve === 'Full sleeve').length;\n    if (fullSleeveCount) {\n      items.push({ id: requireAddOn('Full sleeve upgrade'), quantity: fullSleeveCount, properties: { Team: teamName, Design: design, '_Armadio Sports order': 'Yes' } });\n    }\n    if (sportsShipping.mode === 'courier' && sportsShipping.amount > 0) {\n      items.push({ id: requireAddOn('Outside Delhi shipping per jersey'), quantity: rosterEntries.length, properties: { Team: teamName, Design: design, 'Delivery PIN': checkoutDetails.pin, '_Armadio Sports order': 'Yes' } });\n    }\n\n    const kitVariantTitles = {\n      shorts: () => 'Team shorts',\n      joggers: () => 'Team joggers',\n      jacket: (item) => item.size === '3XL' ? 'Winter jacket 3XL' : 'Winter jacket',\n      bib: () => 'Training bib'\n    };\n    const capVariantTitles = new Map(capQualities.map(([key, label]) => [key, label.startsWith('Beanie') ? label.replace(' \u00B7 ', ' - ') : `Cap - ${label.replace(' \u00B7 ', ' ')}`]));\n    getSavedKitLayers().forEach((layer) => {\n      (layer.items || []).forEach((item, index) => {\n        const variantTitle = layer.product === 'cap' ? capVariantTitles.get(item.quality) : kitVariantTitles[layer.product]?.(item);\n        if (!variantTitle) return;\n        items.push({\n          id: requireAddOn(variantTitle),\n          quantity: 1,\n          properties: {\n            Team: teamName,\n            Design: design,\n            'Kit item position': String(index + 1),\n            'Name': item.name || '\u2014',\n            'Number': item.number || '\u2014',\n            'Age group': item.age || 'Adult',\n            'Size': item.size || 'One size',\n            'Quality': item.quality || 'Standard',\n            '_Armadio Sports order': 'Yes'\n          }\n        });\n      });\n    });\n\n    const currentCartResponse = await fetch('/cart.js', { headers: { Accept: 'application/json' } });\n    if (!currentCartResponse.ok) throw new Error('The current cart could not be checked. Please try again.');\n    const currentCart = await currentCartResponse.json();\n    const existingItems = Array.isArray(currentCart.items) ? currentCart.items : [];\n    const hasRetailItems = existingItems.some((item) => item.properties?.['_Armadio Sports order'] !== 'Yes');\n    if (hasRetailItems) {\n      const replaceCart = window.confirm('Your bag contains regular Armadio products. Sports team orders use a separate prepaid checkout. Replace the current bag with this team order?');\n      if (!replaceCart) throw new Error('Your existing bag was kept. Open Sports checkout again when you are ready to replace it.');\n    }\n    // Keep existing lines intact until Shopify accepts the replacement items.\n    const replacementId = window.crypto.randomUUID();\n    items.forEach((item) => { item.properties._ArmadioSportsBatch = replacementId; });\n    const previousLineUpdates = Object.fromEntries(existingItems.map((item) => [item.key, 0]));\n\n    const response = await fetch('/cart/add.js', {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n      body: JSON.stringify({ items })\n    });\n    if (!response.ok) {\n      const error = await response.json().catch(() => ({}));\n      throw new Error(error.description || 'The team order could not be added to the cart.');\n    }\n    const orderAttributes = {\n      'Armadio Sports order': 'Yes',\n      'Team': teamName,\n      'Design': design,\n      'Customer email': checkoutDetails.email,\n      'Customer phone': checkoutDetails.phone,\n      'Delivery PIN': checkoutDetails.pin,\n      'Sports shipping': sportsShipping.mode === 'porter' ? 'Delhi NCR \u00B7 Porter charge confirmed separately' : `Outside Delhi courier \u00B7 ${formatter.format(sportsShipping.amount)}`,\n      'Expected timeline': 'Approximately 15\u201317 working days from order confirmation',\n    };\n    const updateResponse = await fetch('/cart/update.js', {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n      body: JSON.stringify({ updates: previousLineUpdates, attributes: { ...orderAttributes, 'Payment route': 'PayU prepaid checkout' }, note: `Armadio Sports \u00B7 PayU prepaid team order \u00B7 ${teamName} \u00B7 ${design}` })\n    });\n    if (!updateResponse.ok) throw new Error('The team order details could not be attached. Please try again.');\n    return items;\n  };\n  reviewContinue?.addEventListener('click', async () => {\n    if (reviewContinue.disabled || !status) return;\n    if (!customerLoggedIn) {\n      const details = getSportsCheckoutDetails();\n      localStorage.setItem('armadio-sports-account-prefill', JSON.stringify({ name: details.name || '', email: details.email || '', phone: details.phone || '' }));\n      sessionStorage.setItem('armadio-sports-checkout-draft', JSON.stringify({\n        ...details,\n        locality: checkoutLocality?.value || '',\n        shippingPin: shippingPinInput?.value.trim() || '',\n        approved: Boolean(approval?.checked)\n      }));\n      sessionStorage.setItem('armadio-sports-auth-pending', '1');\n      const returnUrl = `${window.location.pathname}${window.location.search}`;\n      const loginUrl = new URL('/customer_authentication/login', window.location.origin);\n      loginUrl.searchParams.set('return_to', returnUrl);\n      if (window.Shopify?.designMode) window.top.location.assign(loginUrl.toString());\n      else window.location.assign(loginUrl.toString());\n      return;\n    }\n    localStorage.setItem('armadio-roster-draft', JSON.stringify(getRosterData()));\n    reviewContinue.disabled = true;\n    reviewContinue.textContent = 'Preparing PayU checkout\u2026';\n    status.textContent = 'Adding your complete team kit to the cart.';\n    try {\n      await addSportsOrderToCart();\n      status.textContent = 'Team kit added. Opening secure PayU checkout\u2026';\n      window.location.assign('/checkout');\n    } catch (error) {\n      status.textContent = error.message || 'Checkout could not be prepared. Please try again.';\n      updateReview();\n    }\n  });\n  const saveKit = root.querySelector('[data-save-kit]');\n  if (saveKit) saveKit.addEventListener('click', () => { localStorage.setItem('armadio-roster-draft', JSON.stringify(getRosterData())); status.textContent = 'Kit and roster saved on this device.'; });\n  const share = root.querySelector('[data-share-kit]');\n  if (share) share.addEventListener('click', async () => { await navigator.clipboard.writeText(`Armadio team kit draft \u00B7 ${getRosterData().length} roster entries`); status.textContent = 'Kit summary copied.'; });\n})();\n"],
  "mappings": "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",
  "names": ["status", "kitBuilder", "location"]
}
