{
  "version": 3,
  "sources": ["/cdn/shop/t/55/assets/main.js?cb=20261016v12"],
  "sourcesContent": ["/* ==========================================================================\r\n   PrintMe Theme - Main JavaScript Controller\r\n   Interactive UI logic: Slideshow, Tabs, Cart Drawer, Modals & Toast\r\n   ========================================================================== */\r\n\r\nlet titleTypingTimer = null;\r\n\r\nfunction animateTypingText(elemOrId, text, speed = 35) {\r\n  const elem = typeof elemOrId === 'string' ? document.getElementById(elemOrId) : elemOrId;\r\n  if (!elem || !text) return;\r\n\r\n  if (titleTypingTimer) {\r\n    clearInterval(titleTypingTimer);\r\n    titleTypingTimer = null;\r\n  }\r\n\r\n  elem.textContent = '';\r\n  elem.classList.add('typing-active');\r\n  let charIdx = 0;\r\n\r\n  titleTypingTimer = setInterval(() => {\r\n    if (charIdx < text.length) {\r\n      elem.textContent = text.substring(0, charIdx + 1);\r\n      charIdx++;\r\n    } else {\r\n      clearInterval(titleTypingTimer);\r\n      titleTypingTimer = null;\r\n      setTimeout(() => elem.classList.remove('typing-active'), 400);\r\n    }\r\n  }, speed);\r\n}\r\n\r\n/* --------------------------------------------------------------------------\r\n   HyperText Matrix Scramble Animation Effect on Hover\r\n   -------------------------------------------------------------------------- */\r\nconst ALPHABETS = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\".split(\"\");\r\n\r\nwindow.triggerHyperTextEffect = function (elem) {\r\n  // Animation disabled for finish buttons\r\n  return;\r\n};\r\n\r\nfunction initHyperTextHover() {\r\n  // Disabled\r\n}\r\n\r\nfunction initParallaxEffects() {\r\n  const parallaxLayers = document.querySelectorAll('.parallax-floating-layer');\r\n  if (!parallaxLayers.length) return;\r\n\r\n  let ticking = false;\r\n\r\n  window.addEventListener('scroll', () => {\r\n    if (!ticking) {\r\n      window.requestAnimationFrame(() => {\r\n        const scrolled = window.pageYOffset || document.documentElement.scrollTop;\r\n        parallaxLayers.forEach(layer => {\r\n          const speed = parseFloat(layer.dataset.speed || layer.dataset.parallaxSpeed) || 0.15;\r\n          const rect = layer.getBoundingClientRect();\r\n          if (rect.top < window.innerHeight + 200 && rect.bottom > -200) {\r\n            const yPos = Math.round(scrolled * speed * 0.4);\r\n            layer.style.transform = `translate3d(0, ${yPos}px, 0)`;\r\n          }\r\n        });\r\n        ticking = false;\r\n      });\r\n      ticking = true;\r\n    }\r\n  }, { passive: true });\r\n}\r\n\r\nfunction filterHomeCategory(category, buttonEl) {\r\n  const section = (buttonEl && buttonEl.closest('.product-tabs-section')) || document.querySelector('.product-tabs-section');\r\n  if (!section) return;\r\n\r\n  const pills = section.querySelectorAll('.product-filter-pills .filter-pill');\r\n  pills.forEach(pill => {\r\n    pill.classList.remove('active');\r\n    pill.style.background = '#ffffff';\r\n    pill.style.color = '#475569';\r\n    pill.style.boxShadow = 'none';\r\n    const cat = pill.getAttribute('data-category');\r\n    if (cat === 'tshirts') pill.style.borderColor = 'rgba(168,212,176,0.6)';\r\n    else if (cat === 'tumbler') pill.style.borderColor = 'rgba(245,173,114,0.6)';\r\n    else if (cat === 'mugs') pill.style.borderColor = 'rgba(162,217,247,0.6)';\r\n    else if (cat === 'gifts') pill.style.borderColor = 'rgba(178,180,179,0.6)';\r\n    else pill.style.borderColor = '#e2e8f0';\r\n  });\r\n\r\n  const activePill = buttonEl || section.querySelector(`.product-filter-pills .filter-pill[data-category=\"${category}\"]`);\r\n  if (activePill) {\r\n    activePill.classList.add('active');\r\n    activePill.style.background = '#0f172a';\r\n    activePill.style.color = '#ffffff';\r\n    activePill.style.borderColor = '#0f172a';\r\n    activePill.style.boxShadow = '0 4px 14px rgba(15,23,42,0.2)';\r\n  }\r\n\r\n  const cards = section.querySelectorAll('.product-grid .product-card');\r\n  cards.forEach(card => {\r\n    const cardCat = card.getAttribute('data-category');\r\n    const inAll = card.getAttribute('data-in-all') === 'true';\r\n\r\n    if (category === 'all') {\r\n      card.style.display = inAll ? 'flex' : 'none';\r\n    } else {\r\n      card.style.display = (cardCat === category) ? 'flex' : 'none';\r\n    }\r\n  });\r\n}\r\nwindow.filterHomeCategory = filterHomeCategory;\r\n\r\nfunction initProductTabs() {\r\n  const section = document.querySelector('.product-tabs-section');\r\n  if (!section) return;\r\n  const pills = section.querySelectorAll('.product-filter-pills .filter-pill');\r\n  pills.forEach(pill => {\r\n    pill.addEventListener('click', function (e) {\r\n      e.preventDefault();\r\n      const cat = this.getAttribute('data-category') || 'all';\r\n      filterHomeCategory(cat, this);\r\n    });\r\n  });\r\n}\r\nwindow.initProductTabs = initProductTabs;\r\n\r\ndocument.addEventListener('DOMContentLoaded', () => {\r\n  if (typeof initSlideshow === 'function') initSlideshow();\r\n  if (typeof initProductTabs === 'function') initProductTabs();\r\n  if (typeof initCartDrawer === 'function') initCartDrawer();\r\n  if (typeof initWishlistDrawer === 'function') initWishlistDrawer();\r\n  if (typeof initQuickView === 'function') initQuickView();\r\n  if (typeof initSearchOverlay === 'function') initSearchOverlay();\r\n  if (typeof window.shuffleInbuiltStickers === 'function') window.shuffleInbuiltStickers();\r\n  if (typeof initScrollReveal === 'function') initScrollReveal();\r\n  if (typeof init3DTiltEffects === 'function') init3DTiltEffects();\r\n  if (typeof initHyperTextHover === 'function') initHyperTextHover();\r\n  if (typeof initParallaxEffects === 'function') initParallaxEffects();\r\n\r\n  const mainTitle = document.getElementById('product-title-main');\r\n  if (mainTitle && mainTitle.textContent.trim()) {\r\n    animateTypingText(mainTitle, mainTitle.textContent.trim(), 35);\r\n  }\r\n});\r\n\r\n/* ==========================================================================\r\n   Shopify Cart & Drawer State Controller\r\n   ========================================================================== */\r\nlet localCartItems = [];\r\n\r\nfunction parsePriceToNumber(priceVal) {\r\n  if (priceVal === null || priceVal === undefined) return 0;\r\n\r\n  if (typeof priceVal === 'number') {\r\n    if (isNaN(priceVal)) return 0;\r\n    if (priceVal >= 10000 && Number.isInteger(priceVal) && priceVal % 100 === 0) {\r\n      return priceVal / 100;\r\n    }\r\n    return priceVal;\r\n  }\r\n\r\n  const str = String(priceVal).trim();\r\n  if (!str) return 0;\r\n\r\n  const hasCurrencySymbol = str.includes('\u20B9') || str.includes('Rs') || str.includes('RS') || str.includes('rs');\r\n  const hasDecimal = str.includes('.');\r\n  const cleaned = str.replace(/[^0-9.]/g, '');\r\n  let num = parseFloat(cleaned) || 0;\r\n\r\n  if (num === 0) return 0;\r\n\r\n  if (!hasCurrencySymbol && !hasDecimal && num >= 10000 && Number.isInteger(num) && num % 100 === 0) {\r\n    num = num / 100;\r\n  }\r\n\r\n  return num;\r\n}\r\nwindow.parsePriceToNumber = parsePriceToNumber;\r\n\r\n\r\nfunction getSlabDiscountedUnitPrice(baseUnitPrice, qty) {\r\n  const TSHIRT_SLABS = [\r\n    { min: 1, max: 2, discount: 0 },\r\n    { min: 3, max: 4, discount: 0.11 },\r\n    { min: 5, max: 9, discount: 0.24 },\r\n    { min: 10, max: 19, discount: 0.27 },\r\n    { min: 20, max: 29, discount: 0.32 },\r\n    { min: 30, max: 49, discount: 0.35 },\r\n    { min: 50, max: 75, discount: 0.40 },\r\n    { min: 76, max: 9999, discount: 0.43 }\r\n  ];\r\n\r\n  let activeDiscount = 0;\r\n  for (let i = 0; i < TSHIRT_SLABS.length; i++) {\r\n    if (qty >= TSHIRT_SLABS[i].min && qty <= TSHIRT_SLABS[i].max) {\r\n      activeDiscount = TSHIRT_SLABS[i].discount;\r\n      break;\r\n    }\r\n  }\r\n  if (qty >= 76) activeDiscount = 0.43;\r\n\r\n  return Math.round(baseUnitPrice * (1 - activeDiscount));\r\n}\r\n\r\nfunction isGarmentItem(itemOrShopifyItem) {\r\n  if (!itemOrShopifyItem) return false;\r\n  const props = itemOrShopifyItem.properties || {};\r\n  const name = String(itemOrShopifyItem.name || itemOrShopifyItem.title || itemOrShopifyItem.product_title || '').toLowerCase();\r\n  const fitProp = props['T-Shirt Fit'] ? String(props['T-Shirt Fit']).toLowerCase() : '';\r\n\r\n  if (fitProp) return true;\r\n  if (name.includes('t-shirt') || name.includes('tee') || name.includes('shirt') || name.includes('polo') || name.includes('oversiz') || name.includes('hoodie') || name.includes('sweatshirt') || name.includes('apparel') || name.includes('garment') || name.includes('roundneck') || name.includes('v-neck')) return true;\r\n  return false;\r\n}\r\n\r\nfunction isInbuiltGarment(itemOrShopifyItem) {\r\n  if (!itemOrShopifyItem) return false;\r\n  if (itemOrShopifyItem.isInbuilt === true) return true;\r\n  const props = itemOrShopifyItem.properties || {};\r\n  if (props['Type'] === 'In-Built Ready-Made' || props['Product Type'] === 'In-Built') return true;\r\n  const name = String(itemOrShopifyItem.name || itemOrShopifyItem.title || itemOrShopifyItem.product_title || '').toLowerCase();\r\n\r\n  if (name.startsWith('customized ') || name.startsWith('custom ') || name.includes('custom polo') || name.includes('custom oversized') || name.includes('custom round') || name.includes('with your company logo') || name.includes('order logo printed')) {\r\n    return false;\r\n  }\r\n\r\n  if (props['Uploaded Logo 1'] || props['Artwork'] || props['Logo 1'] || props['Front Print'] || props['Back Print'] || props['Print Location']) {\r\n    return false;\r\n  }\r\n\r\n  if (isGarmentItem(itemOrShopifyItem)) {\r\n    return true;\r\n  }\r\n  return false;\r\n}\r\nwindow.isInbuiltGarment = isInbuiltGarment;\r\n\r\nfunction isStickerProduct(itemOrShopifyItem) {\r\n  if (!itemOrShopifyItem) return false;\r\n  if (isGarmentItem(itemOrShopifyItem)) return false;\r\n  const props = itemOrShopifyItem.properties || {};\r\n  const name = String(itemOrShopifyItem.name || itemOrShopifyItem.title || itemOrShopifyItem.product_title || '').toLowerCase();\r\n\r\n  if (props['Finish / Material']) return true;\r\n  if (name.includes('sticker') || name.includes('uv dtf') || name.includes('transfer sheet') || name.includes('die cut') || (name.includes('dtf') && !isGarmentItem(itemOrShopifyItem))) return true;\r\n  return false;\r\n}\r\n\r\nfunction isCapProduct(itemOrShopifyItem) {\r\n  if (!itemOrShopifyItem) return false;\r\n  const props = itemOrShopifyItem.properties || {};\r\n  const name = String(itemOrShopifyItem.name || itemOrShopifyItem.title || itemOrShopifyItem.product_title || itemOrShopifyItem.baseTitle || '').toLowerCase();\r\n  const rawId = String(itemOrShopifyItem.mappedVariantId || itemOrShopifyItem.id || itemOrShopifyItem.variant_id || '').trim();\r\n  const itemId = String(itemOrShopifyItem.id || '').trim();\r\n  const hasCapProp = Boolean(props['Cap Color'] || props['Cap Customization'] || props['Cap Preview Photo']);\r\n  const hasCapWord = /\\bcaps?\\b/i.test(name) || /\\bcaps?\\b/i.test(String(itemOrShopifyItem.baseTitle || ''));\r\n  return Boolean(hasCapWord || rawId === '67587052437636' || itemId.startsWith('cap_') || hasCapProp);\r\n}\r\nwindow.isCapProduct = isCapProduct;\r\n\r\nfunction getItemUnitPrice(itemOrShopifyItem) {\r\n  if (!itemOrShopifyItem) return 625;\r\n  const props = itemOrShopifyItem.properties || {};\r\n  const qty = parseInt(itemOrShopifyItem.quantity || 1, 10);\r\n  const name = String(itemOrShopifyItem.name || itemOrShopifyItem.title || itemOrShopifyItem.product_title || '').toLowerCase();\r\n\r\n  const isGarment = isGarmentItem(itemOrShopifyItem);\r\n  const isSticker = isStickerProduct(itemOrShopifyItem);\r\n\r\n  if (isSticker) {\r\n    if (props['Total Price']) {\r\n      const tot = parsePriceToNumber(props['Total Price']);\r\n      if (tot >= 1) return tot;\r\n    }\r\n    if (props['Price']) {\r\n      const p = parsePriceToNumber(props['Price']);\r\n      if (p >= 1) return p;\r\n    }\r\n    if (props['Unit Price']) {\r\n      const u = parsePriceToNumber(props['Unit Price']);\r\n      if (u >= 1) return u;\r\n    }\r\n    if (props['Unit Rate']) {\r\n      const r = parsePriceToNumber(props['Unit Rate']);\r\n      if (r >= 1) return r * qty;\r\n    }\r\n    let rawStickerPrice = 0;\r\n    if (typeof itemOrShopifyItem.final_price === 'number') {\r\n      rawStickerPrice = itemOrShopifyItem.final_price >= 10000 ? itemOrShopifyItem.final_price / 100 : itemOrShopifyItem.final_price;\r\n    } else {\r\n      rawStickerPrice = parsePriceToNumber(itemOrShopifyItem.price);\r\n    }\r\n    if (rawStickerPrice >= 1) return rawStickerPrice;\r\n\r\n    return 150;\r\n  }\r\n\r\n  // A1. Check if item is a Tumbler or Mug vessel\r\n  const isTumbler = name.includes('tumbler') && !name.includes('sheet') && !name.includes('trasfer') && !name.includes('transfer') && !name.includes('sticker');\r\n  const isMug = name.includes('mug') && !name.includes('sheet') && !name.includes('trasfer') && !name.includes('transfer') && !name.includes('sticker');\r\n  if (isTumbler || isMug) {\r\n    if (props['Unit Price']) {\r\n      const u = parsePriceToNumber(props['Unit Price']);\r\n      if (u >= 100) return u;\r\n    }\r\n    if (props['Price']) {\r\n      const p = parsePriceToNumber(props['Price']);\r\n      if (p >= 100 && qty > 0) return Math.round(p / qty);\r\n    }\r\n    if (itemOrShopifyItem.price) {\r\n      const rawP = parsePriceToNumber(itemOrShopifyItem.price);\r\n      if (rawP >= 100 && qty > 0) return Math.round(rawP / qty);\r\n    }\r\n    return 200;\r\n  }\r\n\r\n  // A2. Check if item is a Gift Product\r\n  const isGift = name.includes('gift') || name.includes('card holder') || name.includes('keychain') || name.includes('pen comes with box') || name.includes('diary');\r\n  if (isGift) {\r\n    if (props['Price']) {\r\n      const p = parsePriceToNumber(props['Price']);\r\n      if (p >= 100) return p;\r\n    }\r\n    if (props['Unit Price']) {\r\n      const u = parsePriceToNumber(props['Unit Price']);\r\n      if (u >= 100) return u;\r\n    }\r\n    let giftPrice = parsePriceToNumber(itemOrShopifyItem.price);\r\n    if (giftPrice >= 100) return giftPrice;\r\n    return 249;\r\n  }\r\n\r\n  // B. Check if item is a Cap Product\r\n  const isCap = isCapProduct(itemOrShopifyItem);\r\n  if (isCap) {\r\n    let capUnitPrice = 250;\r\n    if (qty >= 150) capUnitPrice = 138;\r\n    else if (qty >= 100) capUnitPrice = 148;\r\n    else if (qty >= 50) capUnitPrice = 170;\r\n    else if (qty >= 25) capUnitPrice = 188;\r\n    else if (qty >= 10) capUnitPrice = 205;\r\n    else if (qty >= 5) capUnitPrice = 220;\r\n    else capUnitPrice = 250;\r\n    return capUnitPrice;\r\n  }\r\n\r\n  // C. Garment Pricing\r\n  const isOversized = name.includes('oversiz') || (props['T-Shirt Fit'] && String(props['T-Shirt Fit']).toLowerCase().includes('oversiz'));\r\n  const isPolo = name.includes('polo') || (props['T-Shirt Fit'] && String(props['T-Shirt Fit']).toLowerCase().includes('polo'));\r\n  const isRound = name.includes('round') || (props['T-Shirt Fit'] && String(props['T-Shirt Fit']).toLowerCase().includes('round'));\r\n\r\n  let baseUnitPrice = 625;\r\n  if (name.includes('hangry') || name.includes('naruto')) {\r\n    baseUnitPrice = 999;\r\n  } else if (name.includes('cool dogs') || name.includes('earth is art') || name.includes('flow')) {\r\n    baseUnitPrice = 799;\r\n  } else if (name.includes('nature harmony')) {\r\n    baseUnitPrice = 499;\r\n  } else if (isOversized) {\r\n    baseUnitPrice = 799;\r\n  } else if (isPolo) {\r\n    baseUnitPrice = 625;\r\n  } else if (isRound) {\r\n    baseUnitPrice = 599;\r\n  }\r\n\r\n  const hasBackPrint = name.includes('with back print') || (props['Back Print'] && String(props['Back Print']).toLowerCase().includes('with back print'));\r\n  if (hasBackPrint) {\r\n    baseUnitPrice += 100;\r\n  }\r\n\r\n  // In-Built T-Shirts: Flat price, no discount slab!\r\n  if (typeof isInbuiltGarment === 'function' && isInbuiltGarment(itemOrShopifyItem)) {\r\n    return baseUnitPrice;\r\n  }\r\n\r\n  return getSlabDiscountedUnitPrice(baseUnitPrice, qty);\r\n}\r\nwindow.getItemUnitPrice = getItemUnitPrice;\r\n\r\n\r\nfunction formatMoney(amount) {\r\n  const num = parsePriceToNumber(amount);\r\n  return '\u20B9' + num.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\r\n}\r\n\r\nfunction getCapImageUrl(colorName) {\r\n  const cleanColor = String(colorName || 'black').toLowerCase();\r\n  let fileName = 'cap-black-front.jpg';\r\n  if (cleanColor.includes('white')) fileName = 'cap-white-front.jpg';\r\n  else if (cleanColor.includes('navy') || cleanColor.includes('blue')) fileName = 'cap-navy-front.jpg';\r\n  else if (cleanColor.includes('red')) fileName = 'cap-red-front.jpg';\r\n  else fileName = 'cap-black-front.jpg';\r\n\r\n  if (window.elementaCapAssets && window.elementaCapAssets[fileName]) {\r\n    return window.elementaCapAssets[fileName];\r\n  }\r\n  if (window.getShopifyAsset) {\r\n    return window.getShopifyAsset('assets/' + fileName);\r\n  }\r\n  return 'assets/' + fileName;\r\n}\r\n\r\nfunction deduplicateLocalCart() {\r\n  if (!Array.isArray(localCartItems) || localCartItems.length <= 1) return;\r\n  const cleaned = [];\r\n  const seenMap = {};\r\n\r\n  localCartItems.forEach(item => {\r\n    if (!item) return;\r\n    const rawId = String(item.id || '').trim();\r\n    const mappedId = String(item.mappedVariantId || '').trim();\r\n    const vKey = (mappedId && /^\\d+$/.test(mappedId)) ? mappedId : ((rawId && /^\\d+$/.test(rawId)) ? rawId : null);\r\n\r\n    const props = item.properties || {};\r\n    const cartId = props['_cartId'] || '';\r\n    const hasCustomProps = Object.keys(props).length > 0 && (\r\n      Boolean(props['Finish / Material']) || Boolean(props['Uploaded Artwork']) || Boolean(props['Size Breakdown']) ||\r\n      Boolean(props['Back Print']) || Boolean(props['Product Name']) || Boolean(props['T-Shirt Fit']) ||\r\n      Boolean(props['Front Artwork']) || Boolean(props['Back Artwork']) || Boolean(props['Custom Text']) ||\r\n      Boolean(props['Paired Sticker']) || Boolean(props['Add-on Paired']) || Boolean(props['_pairId']) || Boolean(item.pairId) || Boolean(cartId)\r\n    );\r\n\r\n    const pairTag = item.pairId || props['_pairId'] || props['Pair ID'] || (item.isAddon ? ('addon_' + (item.parentItemId || rawId)) : '') || (item.isParentItem ? ('parent_' + rawId) : '');\r\n    const customSig = hasCustomProps ? `${props['Finish / Material'] || ''}_${props['Shape / Sheet Size'] || ''}_${props['Size'] || ''}_${props['Uploaded Artwork'] || ''}_${props['Front Artwork'] || ''}_${props['Back Artwork'] || ''}_${props['Custom Text'] || ''}_${cartId || rawId}` : '';\r\n    const dedupVKey = vKey ? (pairTag ? `${vKey}_${pairTag}_${rawId}` : (customSig ? `${vKey}_custom_${customSig}` : vKey)) : null;\r\n\r\n    if (dedupVKey) {\r\n      if (seenMap[dedupVKey] !== undefined) {\r\n        const existingIdx = seenMap[dedupVKey];\r\n        const existingItem = cleaned[existingIdx];\r\n        const existingProps = existingItem.properties || {};\r\n        const existingHasProps = Object.keys(existingProps).length > 0 && (\r\n          Boolean(existingProps['Finish / Material']) || Boolean(existingProps['Uploaded Artwork']) || Boolean(existingProps['Size Breakdown']) ||\r\n          Boolean(existingProps['Back Print']) || Boolean(existingProps['Product Name']) || Boolean(existingProps['T-Shirt Fit']) ||\r\n          Boolean(existingProps['Front Artwork']) || Boolean(existingProps['Back Artwork']) || Boolean(existingProps['Custom Text']) ||\r\n          Boolean(existingProps['Paired Sticker']) || Boolean(existingProps['Add-on Paired']) || Boolean(existingProps['_pairId']) || Boolean(existingItem.pairId)\r\n        );\r\n\r\n        if (hasCustomProps && !existingHasProps) {\r\n          cleaned[existingIdx] = item;\r\n        } else if (!hasCustomProps && existingHasProps) {\r\n          // Discard generic server duplicate\r\n        } else {\r\n          cleaned[existingIdx] = item;\r\n        }\r\n      } else {\r\n        seenMap[dedupVKey] = cleaned.length;\r\n        cleaned.push(item);\r\n      }\r\n    } else {\r\n      cleaned.push(item);\r\n    }\r\n  });\r\n\r\n  localCartItems = cleaned;\r\n}\r\n\r\nfunction loadLocalCart() {\r\n  try {\r\n    const saved = localStorage.getItem('elementa_cart_items');\r\n    if (saved) {\r\n      localCartItems = JSON.parse(saved);\r\n      localCartItems.forEach(item => {\r\n        if (item && window.inbuiltProductVariantMap) {\r\n          const rawName = String(item.name || item.title || '').replace(/^Product Name:\\s*/i, '').trim();\r\n          const rawBaseTitle = String(item.baseTitle || '').replace(/^Product Name:\\s*/i, '').trim();\r\n          const priceStr = String(item.price || (item.properties && item.properties['Price']) || '');\r\n          const normName = (rawName + ' ' + rawBaseTitle).toLowerCase().replace(/[^a-z0-9]/g, '');\r\n\r\n          let mappedId = null;\r\n\r\n          if (item.mappedVariantId && /^\\d{14,}$/.test(String(item.mappedVariantId).trim())) {\r\n            mappedId = String(item.mappedVariantId).trim();\r\n          } else if (normName.includes('3in1')) {\r\n            mappedId = '67585069416580';\r\n          } else if (normName.includes('2in1')) {\r\n            if (normName.includes('cardholder')) mappedId = '67585069351044';\r\n            else mappedId = '67585069285508';\r\n          } else if (normName.includes('4in1')) {\r\n            const numPrice = (typeof parsePriceToNumber === 'function') ? parsePriceToNumber(priceStr || item.price) : 0;\r\n            if (priceStr.includes('1099') || priceStr.includes('1,099') || numPrice >= 1000) mappedId = '67585069514884';\r\n            else mappedId = '67585069449348';\r\n          }\r\n\r\n          if (!mappedId) {\r\n            const mapKeys = Object.keys(window.inbuiltProductVariantMap).filter(k => k.length > 3).sort((a, b) => b.length - a.length);\r\n            for (const key of mapKeys) {\r\n              const normKey = key.toLowerCase().replace(/[^a-z0-9]/g, '');\r\n              if (normName.includes(normKey)) {\r\n                mappedId = window.inbuiltProductVariantMap[key];\r\n                item.baseTitle = key;\r\n                break;\r\n              }\r\n            }\r\n          }\r\n\r\n          if (mappedId) {\r\n            item.mappedVariantId = mappedId;\r\n          }\r\n        }\r\n\r\n        const isCap = (item.name || '').toLowerCase().includes('cap') || (item.properties && item.properties['Cap Color']);\r\n        if (isCap) {\r\n          const capColor = (item.properties && item.properties['Cap Color']) || item.name || 'black';\r\n          const capPhoto = getCapImageUrl(capColor);\r\n          if (!item.img || item.img.includes('slider-1') || item.img.includes('placeholder')) {\r\n            item.img = capPhoto;\r\n          }\r\n        }\r\n\r\n        if (item) {\r\n          if (item.properties) {\r\n            if (item.properties['_pairId'] && !item.pairId) item.pairId = item.properties['_pairId'];\r\n            if (item.properties['_parentItemId'] && !item.parentItemId) item.parentItemId = item.properties['_parentItemId'];\r\n            if (item.properties['Paired Sticker']) item.isAddon = true;\r\n            if (item.properties['Add-on Paired']) item.isParentItem = true;\r\n          }\r\n          const itemLowerName = String(item.name || item.title || '').toLowerCase();\r\n          const itemIsGarment = itemLowerName.includes('custom') || itemLowerName.includes('t-shirt') || itemLowerName.includes('tee') || itemLowerName.includes('shirt') || itemLowerName.includes('polo') || itemLowerName.includes('oversiz') || itemLowerName.includes('hoodie');\r\n          const itemIsSticker = !itemIsGarment && (itemLowerName.includes('sticker') || itemLowerName.includes('dtf') || (item.properties && item.properties['Finish / Material']));\r\n          const itemIsTumblerOrMug = itemLowerName.includes('tumbler') || itemLowerName.includes('mug');\r\n\r\n          if (item.price && parsePriceToNumber(item.price) < 300 && !itemIsSticker && !itemIsTumblerOrMug) {\r\n            delete item.price;\r\n          }\r\n          if (item.properties) {\r\n            if (item.properties['Price'] && parsePriceToNumber(item.properties['Price']) < 300 && !itemIsSticker && !itemIsTumblerOrMug) {\r\n              delete item.properties['Price'];\r\n            }\r\n            if (item.properties['Unit Price'] && parsePriceToNumber(item.properties['Unit Price']) < 300 && !itemIsSticker && !itemIsTumblerOrMug) {\r\n              delete item.properties['Unit Price'];\r\n            }\r\n          }\r\n\r\n          if (isCapProduct(item)) {\r\n            item.quantity = Math.max(2, parseInt(item.quantity || 2, 10));\r\n          }\r\n\r\n          const unitNum = getItemUnitPrice(item);\r\n          item.price = '\u20B9' + unitNum.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\r\n        }\r\n      });\r\n      deduplicateLocalCart();\r\n      saveLocalCart();\r\n    } else {\r\n      localCartItems = [];\r\n    }\r\n  } catch (e) {\r\n    localCartItems = [];\r\n  }\r\n  window.localCartItems = localCartItems;\r\n}\r\n\r\nfunction saveLocalCart() {\r\n  window.localCartItems = localCartItems;\r\n  try {\r\n    localStorage.setItem('elementa_cart_items', JSON.stringify(localCartItems));\r\n  } catch (e) { }\r\n}\r\n\r\nwindow.showToast = function (message, type = 'success') {\r\n  const container = document.getElementById('cart-toast-container') || document.body;\r\n  const toast = document.createElement('div');\r\n  toast.className = 'cart-toast';\r\n  toast.innerHTML = `<i class=\"fa-solid fa-circle-check\" style=\"color: #A8D4B0; font-size: 18px;\"></i> <span>${message}</span>`;\r\n  container.appendChild(toast);\r\n\r\n  setTimeout(() => {\r\n    toast.style.animation = 'toastOut 0.3s ease forwards';\r\n    setTimeout(() => {\r\n      if (toast.parentNode) toast.parentNode.removeChild(toast);\r\n    }, 300);\r\n  }, 3000);\r\n};\r\nfunction showToast(message, type = 'success') {\r\n  if (typeof window.showToast === 'function') {\r\n    return window.showToast(message, type);\r\n  }\r\n}\r\n\r\n\r\nwindow.openCartDrawer = function () {\r\n  const drawer = document.getElementById('cart-drawer');\r\n  const overlay = document.getElementById('cart-drawer-overlay');\r\n  if (drawer) drawer.classList.add('active', 'open');\r\n  if (overlay) overlay.classList.add('active', 'open');\r\n  document.body.style.overflow = 'hidden';\r\n};\r\n\r\nwindow.closeCartDrawer = function () {\r\n  const drawer = document.getElementById('cart-drawer');\r\n  const overlay = document.getElementById('cart-drawer-overlay');\r\n  if (drawer) drawer.classList.remove('active', 'open');\r\n  if (overlay) overlay.classList.remove('active', 'open');\r\n  document.body.style.overflow = '';\r\n};\r\n\r\nwindow.toggleCartDrawer = function () {\r\n  const drawer = document.getElementById('cart-drawer');\r\n  if (drawer && (drawer.classList.contains('active') || drawer.classList.contains('open'))) {\r\n    window.closeCartDrawer();\r\n  } else {\r\n    window.openCartDrawer();\r\n  }\r\n};\r\n\r\nwindow.renderCartDrawer = function () {\r\n  const container = document.getElementById('cart-drawer-items');\r\n  const subtotalElem = document.getElementById('cart-subtotal-price');\r\n  const badgeCounts = document.querySelectorAll('.cart-badge-count, .badge-count');\r\n\r\n  let totalQty = 0;\r\n  let subtotal = 0;\r\n\r\n  localCartItems.forEach(item => {\r\n    const unitPriceNum = getItemUnitPrice(item);\r\n    const formattedUnit = '\u20B9' + unitPriceNum.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\r\n    item.price = formattedUnit;\r\n\r\n    const qty = parseInt(item.quantity || 1, 10);\r\n    totalQty += qty;\r\n    subtotal += unitPriceNum * qty;\r\n  });\r\n\r\n  badgeCounts.forEach(badge => {\r\n    badge.textContent = totalQty;\r\n    badge.style.display = totalQty > 0 ? 'inline-flex' : 'inline-block';\r\n  });\r\n\r\n  if (subtotalElem) {\r\n    subtotalElem.textContent = '\u20B9' + subtotal.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\r\n  }\r\n\r\n  if (!container) return;\r\n\r\n  if (localCartItems.length === 0) {\r\n    container.innerHTML = `\r\n      <div class=\"empty-cart-state\">\r\n        <i class=\"fa-solid fa-basket-shopping empty-cart-icon\"></i>\r\n        <p style=\"font-size: 16.5px; font-weight: 700; color: #0f172a; margin-bottom: 6px;\">Your cart is empty</p>\r\n        <p style=\"font-size: 13.5px; margin: 0;\">Browse our custom apparel & stickers and add your favorite products!</p>\r\n      </div>\r\n    `;\r\n    return;\r\n  }\r\n\r\n  let html = '';\r\n  localCartItems.forEach((item, index) => {\r\n    const isSticker = isStickerProduct(item);\r\n    const finishProp = (item.properties && item.properties['Finish / Material']) ? String(item.properties['Finish / Material']).toLowerCase() : '';\r\n\r\n    let finishImg = 'assets/sticker-transparent-main.jpg';\r\n    if (finishProp.includes('transparent')) {\r\n      finishImg = 'assets/sticker-transparent-main.jpg';\r\n    } else if (finishProp.includes('vinyl')) {\r\n      finishImg = 'assets/sticker-vinyl-hand-elementa.jpg';\r\n    } else if (finishProp.includes('uv dtf')) {\r\n      finishImg = 'assets/sticker-uvdtf-serum-bottle.jpg';\r\n    } else if (finishProp.includes('standard') || finishProp.includes('paper')) {\r\n      finishImg = 'assets/sticker-paper-redbox.jpg';\r\n    }\r\n\r\n    const isCap = isCapProduct(item);\r\n    if (isCap && (item.quantity || 1) < 2) {\r\n      item.quantity = 2;\r\n    }\r\n    let itemImg = item.img || item.image;\r\n    if (isCap) {\r\n      const capColor = (item.properties && item.properties['Cap Color']) || item.name || 'black';\r\n      const capPhoto = getCapImageUrl(capColor);\r\n      itemImg = (item.img && !item.img.includes('slider-1') && !item.img.includes('placeholder')) ? item.img : capPhoto;\r\n    } else {\r\n      const defaultFallback = isSticker ? finishImg : 'assets/elementa-logo.png';\r\n      itemImg = item.img || item.image || (window.getShopifyAsset ? window.getShopifyAsset(defaultFallback) : defaultFallback);\r\n    }\r\n    const itemTitle = item.name || item.title || 'Custom Product';\r\n    const itemPrice = formatMoney(item.price);\r\n\r\n    let metaHtml = '';\r\n    if (item.properties && typeof item.properties === 'object') {\r\n      metaHtml = Object.entries(item.properties)\r\n        .map(([k, v]) => {\r\n          if (!v) return '';\r\n          // Filter internal tracking properties\r\n          if (k.startsWith('_') || k === 'Pair ID' || k === 'Parent Item ID' || k === 'Add-on Type' || k === 'Cap Preview Photo' || k.toLowerCase().includes('cap preview')) return '';\r\n          let valStr = String(v);\r\n          if (v instanceof File) {\r\n            valStr = `\uD83D\uDCCE ${v.name}`;\r\n          } else if (typeof v === 'string' && (v.startsWith('http://') || v.startsWith('https://') || v.startsWith('//'))) {\r\n            valStr = `<a href=\"${v}\" target=\"_blank\" rel=\"noopener\" style=\"color: #0284c7; text-decoration: underline; font-weight: 700;\">View File \u2197</a>`;\r\n          }\r\n          return `<div><strong>${k}:</strong> ${valStr}</div>`;\r\n        })\r\n        .join('');\r\n    } else if (item.variant) {\r\n      metaHtml = `<div>${item.variant}</div>`;\r\n    }\r\n\r\n    let addonBadgeHtml = '';\r\n    const isAddonItem = item.isAddon || Boolean(item.properties && item.properties['Paired Sticker']);\r\n    const isParentWithAddon = item.isParentItem || Boolean(item.properties && item.properties['Add-on Paired']);\r\n\r\n    if (isAddonItem) {\r\n      const pairedTitle = (item.properties && item.properties['Paired Sticker']) || 'Sticker';\r\n      addonBadgeHtml = `\r\n        <div style=\"margin-bottom: 4px;\">\r\n          <span style=\"display: inline-flex; align-items: center; gap: 4px; background: #eff6ff; color: #1d4ed8; font-size: 11px; font-weight: 800; padding: 2px 8px; border-radius: 999px; border: 1px solid #bfdbfe; text-transform: uppercase;\">\r\n            <i class=\"fa-solid fa-paperclip\"></i> Add-on with ${pairedTitle}\r\n          </span>\r\n        </div>\r\n      `;\r\n    } else if (isParentWithAddon) {\r\n      const vesselTitle = (item.properties && item.properties['Add-on Paired']) || 'Vessel';\r\n      addonBadgeHtml = `\r\n        <div style=\"margin-bottom: 4px;\">\r\n          <span style=\"display: inline-flex; align-items: center; gap: 4px; background: #ecfdf5; color: #047857; font-size: 11px; font-weight: 800; padding: 2px 8px; border-radius: 999px; border: 1px solid #a7f3d0; text-transform: uppercase;\">\r\n            <i class=\"fa-solid fa-mug-hot\"></i> Includes ${vesselTitle} Add-on\r\n          </span>\r\n        </div>\r\n      `;\r\n    }\r\n\r\n    html += `\r\n      <div class=\"cart-item\">\r\n        <button class=\"cart-item-remove\" onclick=\"removeFromCart('${item.id || index}')\" title=\"Remove Item\">\r\n          <i class=\"fa-regular fa-trash-can\"></i>\r\n        </button>\r\n        <img src=\"${itemImg}\" alt=\"${itemTitle}\" class=\"cart-item-img\" onerror=\"this.src='https://via.placeholder.com/80';\">\r\n        <div class=\"cart-item-details\">\r\n          ${addonBadgeHtml}\r\n          <h4 class=\"cart-item-title\">${itemTitle}</h4>\r\n          ${metaHtml ? `<div class=\"cart-item-meta\">${metaHtml}</div>` : ''}\r\n          <div class=\"cart-item-price\">${itemPrice}</div>\r\n          <div class=\"cart-item-qty-row\">\r\n            <button class=\"cart-qty-btn\" onclick=\"updateCartItemQty('${item.id || index}', -1)\" ${isCap && (item.quantity || 1) <= 2 ? 'title=\"Minimum order for Customized Caps is 2 pcs\" style=\"opacity: 0.55; cursor: not-allowed;\"' : ''}>-</button>\r\n            <span class=\"cart-qty-val\">${item.quantity || 1}</span>\r\n            <button class=\"cart-qty-btn\" onclick=\"updateCartItemQty('${item.id || index}', 1)\">+</button>\r\n            ${isCap ? '<span style=\"font-size: 11px; font-weight: 700; color: #0284c7; background: #f0f9ff; border: 1px solid #bae6fd; padding: 2px 8px; border-radius: 6px; margin-left: 6px;\"><i class=\"fa-solid fa-circle-info\" style=\"font-size: 10px; margin-right: 3px;\"></i>Min 2 Pcs</span>' : ''}\r\n          </div>\r\n        </div>\r\n      </div>\r\n    `;\r\n  });\r\n\r\n  container.innerHTML = html;\r\n};\r\n\r\nwindow.handleAddToCart = function (itemData) {\r\n  if (!itemData) return;\r\n\r\n  const rawId = itemData.id || itemData.variant_id || itemData.mappedVariantId || '';\r\n  const itemName = itemData.name || itemData.title || itemData.product_title || 'Custom Product';\r\n\r\n  let priceNum = parsePriceToNumber(itemData.price);\r\n  const isCustomConfigured = !!(\r\n    (itemData.properties && (\r\n      itemData.properties['Total Price'] ||\r\n      itemData.properties['Unit Price'] ||\r\n      itemData.properties['Finish / Material'] ||\r\n      itemData.properties['T-Shirt Fit'] ||\r\n      itemData.properties['Size Breakdown'] ||\r\n      itemData.properties['Custom Options'] ||\r\n      itemData.properties['Uploaded Artwork']\r\n    )) ||\r\n    (itemName.toLowerCase().includes('custom') && (itemData.properties || itemData.mappedVariantId))\r\n  );\r\n\r\n  if (!isCustomConfigured && priceNum < 300) {\r\n    const lower = itemName.toLowerCase();\r\n    if (lower.includes('hangry') || lower.includes('naruto') || lower.includes('one piece') || lower.includes('pink panther') || lower.includes('999')) priceNum = 999;\r\n    else if (lower.includes('hoodie') || lower.includes('sweatshirt')) priceNum = 1299;\r\n    else if (lower.includes('oversiz')) priceNum = 799;\r\n    else if (lower.includes('graphic') || lower.includes('organic') || lower.includes('dtg')) priceNum = 499;\r\n    else if (lower.includes('round')) priceNum = 599;\r\n    else if (lower.includes('polo')) priceNum = 625;\r\n    else if (lower.includes('sticker') || lower.includes('dtf')) priceNum = 150;\r\n    else if (lower.includes('tumbler') || lower.includes('mug')) priceNum = 200;\r\n    else if (lower.includes('cap')) priceNum = 250;\r\n    else if (lower.includes('gift')) priceNum = 249;\r\n    else priceNum = 799;\r\n  }\r\n\r\n  const itemPrice = '\u20B9' + priceNum.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\r\n  const itemImg = itemData.img || itemData.image || itemData.featured_image || '';\r\n  let quantity = parseInt(itemData.quantity || 1, 10);\r\n  if (isCapProduct(itemData)) {\r\n    quantity = Math.max(2, quantity);\r\n  }\r\n  const properties = itemData.properties || null;\r\n\r\n  // 1. Resolve Variant ID \u2014 priority order:\r\n  //    a) Explicit numeric ID passed in itemData (most trusted)\r\n  //    b) inbuiltProductVariantMap lookup by product name\r\n  //    c) DOM form input fallback (for standard Shopify product-form add-to-cart)\r\n  let resolvedVariantId = null;\r\n\r\n  // a) Prefer explicit mappedVariantId or raw numeric ID first\r\n  if (itemData.mappedVariantId && /^\\d{10,}$/.test(String(itemData.mappedVariantId).trim())) {\r\n    resolvedVariantId = String(itemData.mappedVariantId).trim();\r\n  } else if (/^\\d{10,}$/.test(String(rawId).trim()) && !String(rawId).startsWith('17')) {\r\n    resolvedVariantId = String(rawId).trim();\r\n  }\r\n\r\n  // b) Name-based lookup in inbuiltProductVariantMap\r\n  if (!resolvedVariantId && typeof inbuiltProductVariantMap !== 'undefined' && inbuiltProductVariantMap) {\r\n    const cleanName = itemName.replace(/^Product Name:\\s*/i, '').replace(/\\s*\\([^)]*\\)/g, '').trim();\r\n    if (inbuiltProductVariantMap[cleanName]) {\r\n      resolvedVariantId = inbuiltProductVariantMap[cleanName];\r\n    } else if (inbuiltProductVariantMap[itemName]) {\r\n      resolvedVariantId = inbuiltProductVariantMap[itemName];\r\n    } else {\r\n      // Try partial/normalized match\r\n      const normLookup = cleanName.toLowerCase().replace(/[^a-z0-9]/g, '');\r\n      const mapKeys = Object.keys(inbuiltProductVariantMap).filter(k => k.length > 5);\r\n      for (const k of mapKeys) {\r\n        if (normLookup.includes(k.toLowerCase().replace(/[^a-z0-9]/g, '')) ||\r\n          k.toLowerCase().replace(/[^a-z0-9]/g, '').includes(normLookup)) {\r\n          resolvedVariantId = inbuiltProductVariantMap[k];\r\n          break;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  // c) Custom T-Shirt resolution: match exact front/back print variant based on options\r\n  const itemProps = itemData.properties || {};\r\n  const isCustomTshirt = (itemName.toLowerCase().includes('custom') &&\r\n    (itemName.toLowerCase().includes('polo') || itemName.toLowerCase().includes('oversiz') || itemName.toLowerCase().includes('round'))) ||\r\n    (itemProps && (itemProps['T-Shirt Fit'] || itemProps['Back Print']));\r\n\r\n  if (!resolvedVariantId && isCustomTshirt) {\r\n    const hasBackPrint = (itemProps['Back Print'] === 'With Back Print') ||\r\n      itemName.toLowerCase().includes('with back print');\r\n    const isPolo = itemName.toLowerCase().includes('polo') || (itemProps['T-Shirt Fit'] && String(itemProps['T-Shirt Fit']).toLowerCase().includes('polo'));\r\n    const isOversized = itemName.toLowerCase().includes('oversiz') || (itemProps['T-Shirt Fit'] && String(itemProps['T-Shirt Fit']).toLowerCase().includes('oversiz'));\r\n\r\n    if (isPolo) {\r\n      resolvedVariantId = hasBackPrint ? '52875687231620' : '52875687067780';\r\n    } else if (isOversized) {\r\n      resolvedVariantId = hasBackPrint ? '52875686379652' : '52875686215812';\r\n    } else {\r\n      resolvedVariantId = hasBackPrint ? '52875689590916' : '52875689427076';\r\n    }\r\n  }\r\n\r\n  // d) DOM fallback: only if no ID resolved yet \u2014 read from the visible product form\r\n  if (!resolvedVariantId) {\r\n    const activeVariantInput = document.querySelector(\r\n      'form[action*=\"/cart/add\"] select[name=\"id\"], ' +\r\n      'form[action*=\"/cart/add\"] input[name=\"id\"]:checked, ' +\r\n      'form[action*=\"/cart/add\"] input[name=\"id\"][type=\"hidden\"]'\r\n    );\r\n    if (activeVariantInput && activeVariantInput.value && /^\\d{10,}$/.test(String(activeVariantInput.value).trim())) {\r\n      resolvedVariantId = activeVariantInput.value.trim();\r\n      console.log('Variant ID resolved from DOM form input:', resolvedVariantId);\r\n    }\r\n  }\r\n\r\n  // Fallback category variant map\r\n  if (!resolvedVariantId) {\r\n    const lowerName = itemName.toLowerCase();\r\n    const categoryVariantMap = {\r\n      polo_front: '52875687067780',\r\n      polo_both: '52875687231620',\r\n      oversized_front: '52875686215812',\r\n      oversized_both: '52875686379652',\r\n      round_front: '52875689427076',\r\n      round_both: '52875689590916',\r\n      cap: '67587052437636',\r\n      gift: '67585069285508',\r\n      sticker: '67585065189508',\r\n      default: '52875689427076'\r\n    };\r\n    if (lowerName.includes('cap')) resolvedVariantId = categoryVariantMap.cap;\r\n    else if (lowerName.includes('sticker')) resolvedVariantId = categoryVariantMap.sticker;\r\n    else if (lowerName.includes('gift')) resolvedVariantId = categoryVariantMap.gift;\r\n    else if (lowerName.includes('polo')) resolvedVariantId = categoryVariantMap.polo_front;\r\n    else if (lowerName.includes('oversiz')) resolvedVariantId = categoryVariantMap.oversized_front;\r\n    else resolvedVariantId = categoryVariantMap.round_front;\r\n  }\r\n\r\n  const finalVariantNum = Number(resolvedVariantId);\r\n\r\n  // 2. Local Cart update for drawer UI\r\n  addLocalCartItem({\r\n    id: rawId || resolvedVariantId,\r\n    mappedVariantId: resolvedVariantId,\r\n    baseTitle: itemData.baseTitle || null,\r\n    name: itemName,\r\n    price: itemPrice,\r\n    img: itemImg,\r\n    quantity: quantity,\r\n    properties: properties\r\n  });\r\n\r\n  // 3. Fallback & Debugging: Log variant ID and check validity\r\n  if (!finalVariantNum || isNaN(finalVariantNum) || String(finalVariantNum).length < 10) {\r\n    console.error('Add to Cart Failed: variantId is missing, undefined, or null:', resolvedVariantId);\r\n    showToast(`Added \"${itemName}\" to cart!`);\r\n    openCartDrawer();\r\n    return;\r\n  }\r\n\r\n  console.log('Adding variant ID:', finalVariantNum);\r\n\r\n  // 4. Send formatted request payload to /cart/add.js\r\n  const rootPath = (window.Shopify && window.Shopify.routes && window.Shopify.routes.root ? window.Shopify.routes.root : '/');\r\n\r\n  const isOneRupeeSticker = ['67585065189508', '67585065058436', '67585065123972', '67686638256260', '67686441746564', '67686441779332', '67686441844868'].includes(String(resolvedVariantId)) ||\r\n    (itemName.toLowerCase().includes('sticker') && !itemName.toLowerCase().includes('tumblr') && !itemName.toLowerCase().includes('mug'));\r\n\r\n  let shopifyAddQty = Number(quantity) || 1;\r\n  if (isOneRupeeSticker) {\r\n    const calculatedRupees = Math.round(parsePriceToNumber(itemPrice) || parsePriceToNumber(properties && (properties['Total Price'] || properties['Price'])) || 1);\r\n    shopifyAddQty = calculatedRupees > 0 ? (calculatedRupees * (Number(quantity) || 1)) : (Number(quantity) || 1);\r\n  }\r\n\r\n  let hasBinaryFile = false;\r\n  if (properties && typeof properties === 'object') {\r\n    for (const val of Object.values(properties)) {\r\n      if (val instanceof File || val instanceof Blob) {\r\n        hasBinaryFile = true;\r\n        break;\r\n      }\r\n    }\r\n  }\r\n\r\n  let fetchPromise;\r\n  if (hasBinaryFile) {\r\n    const formData = new FormData();\r\n    formData.append('id', Number(finalVariantNum));\r\n    formData.append('quantity', shopifyAddQty);\r\n    for (const [propKey, propVal] of Object.entries(properties || {})) {\r\n      if (propVal !== undefined && propVal !== null) {\r\n        if (propVal instanceof File || propVal instanceof Blob) {\r\n          formData.append(`properties[${propKey}]`, propVal, propVal.name || 'artwork.png');\r\n        } else {\r\n          formData.append(`properties[${propKey}]`, String(propVal));\r\n        }\r\n      }\r\n    }\r\n    fetchPromise = fetch(rootPath + 'cart/add.js', {\r\n      method: 'POST',\r\n      headers: {\r\n        'Accept': 'application/json'\r\n      },\r\n      body: formData\r\n    });\r\n  } else {\r\n    fetchPromise = fetch(rootPath + 'cart/add.js', {\r\n      method: 'POST',\r\n      headers: {\r\n        'Content-Type': 'application/json',\r\n        'Accept': 'application/json'\r\n      },\r\n      body: JSON.stringify({\r\n        items: [{\r\n          id: Number(finalVariantNum),\r\n          quantity: shopifyAddQty,\r\n          properties: properties || {}\r\n        }]\r\n      })\r\n    });\r\n  }\r\n\r\n  fetchPromise\r\n    .then(res => {\r\n      if (!res.ok) {\r\n        return res.text().then(errText => {\r\n          console.error('Shopify /cart/add.js error response:', res.status, errText);\r\n          throw new Error(`Shopify cart error status ${res.status}: ${errText}`);\r\n        });\r\n      }\r\n      return res.json();\r\n    })\r\n    .then(data => {\r\n      console.log('Successfully added variant to Shopify cart:', data);\r\n      if (data && data.properties) {\r\n        const targetLocal = localCartItems.slice().reverse().find(i =>\r\n          String(i.id) === String(rawId || resolvedVariantId) ||\r\n          String(i.mappedVariantId) === String(resolvedVariantId)\r\n        );\r\n        if (targetLocal && targetLocal.properties) {\r\n          for (const [pk, pv] of Object.entries(data.properties)) {\r\n            if (typeof pv === 'string' && (pv.includes('/uploads/') || pv.startsWith('http://') || pv.startsWith('https://') || pv.startsWith('//'))) {\r\n              targetLocal.properties[pk] = pv;\r\n            }\r\n          }\r\n          saveLocalCart();\r\n          renderCartDrawer();\r\n        }\r\n      }\r\n      fetchShopifyCart();\r\n    })\r\n    .catch(err => {\r\n      console.warn('Shopify cart add warning (local drawer preserved):', err);\r\n    });\r\n\r\n  showToast(`Added \"${itemName}\" to cart!`);\r\n  openCartDrawer();\r\n};\r\n\r\nfunction handleAddToCart(itemData) {\r\n  if (typeof window.handleAddToCart === 'function') {\r\n    return window.handleAddToCart(itemData);\r\n  }\r\n}\r\n\r\nfunction addLocalCartItem(item) {\r\n  if (isCapProduct(item)) {\r\n    item.quantity = Math.max(2, parseInt(item.quantity || 2, 10));\r\n  }\r\n  let formattedPrice = '';\r\n  if (item.properties && item.properties['Unit Price']) {\r\n    const priceNum = parsePriceToNumber(item.properties['Unit Price']);\r\n    formattedPrice = '\u20B9' + priceNum.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\r\n  } else {\r\n    const priceNum = parsePriceToNumber(item.price);\r\n    formattedPrice = '\u20B9' + priceNum.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\r\n  }\r\n  item.price = formattedPrice;\r\n\r\n  if (item.properties && typeof item.properties === 'object') {\r\n    const cleanProps = {};\r\n    for (const [k, v] of Object.entries(item.properties)) {\r\n      if (v instanceof File) {\r\n        cleanProps[k] = `\uD83D\uDCCE ${v.name}`;\r\n      } else {\r\n        cleanProps[k] = v;\r\n      }\r\n    }\r\n    item.properties = cleanProps;\r\n  }\r\n\r\n  const itemVariantId = (item.mappedVariantId && /^\\d+$/.test(String(item.mappedVariantId).trim()))\r\n    ? String(item.mappedVariantId).trim()\r\n    : (/^\\d+$/.test(String(item.id).trim()) ? String(item.id).trim() : null);\r\n\r\n  const existingIdx = localCartItems.findIndex(i => {\r\n    if (i.id === item.id) return true;\r\n    if (item.pairId || i.pairId || item.isAddon || i.isAddon || (item.properties && item.properties['_pairId']) || (i.properties && i.properties['_pairId']) || (item.properties && item.properties['Paired Sticker']) || (item.properties && item.properties['Add-on Paired'])) {\r\n      return false;\r\n    }\r\n\r\n    const itemProps = item.properties || {};\r\n    const iProps = i.properties || {};\r\n\r\n    if (itemProps['_cartId'] && iProps['_cartId']) {\r\n      if (itemProps['_cartId'] === iProps['_cartId']) return true;\r\n      return false;\r\n    }\r\n\r\n    const itemIsCustom = Boolean(\r\n      itemProps['Finish / Material'] || itemProps['Uploaded Artwork'] || itemProps['Size Breakdown'] ||\r\n      itemProps['Back Print'] || itemProps['T-Shirt Fit'] || itemProps['Front Artwork'] || itemProps['Back Artwork'] ||\r\n      itemProps['Custom Text'] || itemProps['Customization'] || itemProps['Special Instructions'] || itemProps['Size']\r\n    );\r\n    const iIsCustom = Boolean(\r\n      iProps['Finish / Material'] || iProps['Uploaded Artwork'] || iProps['Size Breakdown'] ||\r\n      iProps['Back Print'] || iProps['T-Shirt Fit'] || iProps['Front Artwork'] || iProps['Back Artwork'] ||\r\n      iProps['Custom Text'] || iProps['Customization'] || iProps['Special Instructions'] || iProps['Size']\r\n    );\r\n\r\n    if (itemIsCustom || iIsCustom) {\r\n      if (itemVariantId) {\r\n        const iVariantId = (i.mappedVariantId && /^\\d+$/.test(String(i.mappedVariantId).trim()))\r\n          ? String(i.mappedVariantId).trim()\r\n          : (/^\\d+$/.test(String(i.id).trim()) ? String(i.id).trim() : null);\r\n        if (iVariantId && iVariantId === itemVariantId) {\r\n          const sameFinish = (itemProps['Finish / Material'] || '') === (iProps['Finish / Material'] || '');\r\n          const sameShape = (itemProps['Shape / Sheet Size'] || '') === (iProps['Shape / Sheet Size'] || '');\r\n          const sameSize = (itemProps['Size'] || '') === (iProps['Size'] || '');\r\n          const sameArt = (itemProps['Uploaded Artwork'] || '') === (iProps['Uploaded Artwork'] || '') &&\r\n            (itemProps['Front Artwork'] || '') === (iProps['Front Artwork'] || '') &&\r\n            (itemProps['Back Artwork'] || '') === (iProps['Back Artwork'] || '');\r\n          const sameText = (itemProps['Custom Text'] || '') === (iProps['Custom Text'] || '');\r\n          const sameBreakdown = (itemProps['Size Breakdown'] || '') === (iProps['Size Breakdown'] || '');\r\n\r\n          if (sameFinish && sameShape && sameSize && sameArt && sameText && sameBreakdown) {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n      return false;\r\n    }\r\n\r\n    if (itemVariantId) {\r\n      const iVariantId = (i.mappedVariantId && /^\\d+$/.test(String(i.mappedVariantId).trim()))\r\n        ? String(i.mappedVariantId).trim()\r\n        : (/^\\d+$/.test(String(i.id).trim()) ? String(i.id).trim() : null);\r\n      if (iVariantId && iVariantId === itemVariantId) {\r\n        return true;\r\n      }\r\n    }\r\n    return false;\r\n  });\r\n\r\n  if (existingIdx !== -1) {\r\n    const existing = localCartItems[existingIdx];\r\n    existing.quantity = (existing.quantity || 1) + (item.quantity || 1);\r\n    existing.price = formattedPrice;\r\n    if (item.mappedVariantId) existing.mappedVariantId = item.mappedVariantId;\r\n    if (item.baseTitle) existing.baseTitle = item.baseTitle;\r\n    if (item.properties) existing.properties = item.properties;\r\n  } else {\r\n    localCartItems.push(item);\r\n  }\r\n\r\n  deduplicateLocalCart();\r\n  saveLocalCart();\r\n  renderCartDrawer();\r\n}\r\n\r\nwindow.updateCartItemQty = async function (targetId, change) {\r\n  const targetIdStr = String(targetId).trim();\r\n  const index = localCartItems.findIndex((item, idx) =>\r\n    String(item.id).trim() === targetIdStr || String(idx) === targetIdStr\r\n  );\r\n\r\n  if (index !== -1) {\r\n    const item = localCartItems[index];\r\n    const isCap = isCapProduct(item);\r\n\r\n    // Prevent reducing quantity below 2 for Customized Caps\r\n    if (isCap && change < 0 && (item.quantity || 1) <= 2) {\r\n      if (typeof window.showToast === 'function') {\r\n        window.showToast('Minimum order for Customized Caps is 2 pcs');\r\n      } else if (typeof showToast === 'function') {\r\n        showToast('Minimum order for Customized Caps is 2 pcs');\r\n      }\r\n      return;\r\n    }\r\n\r\n    const newQty = (item.quantity || 1) + change;\r\n\r\n    if (newQty <= 0) {\r\n      window.removeFromCart(targetId);\r\n      return;\r\n    }\r\n\r\n    if (isCap && newQty < 2) {\r\n      if (typeof window.showToast === 'function') {\r\n        window.showToast('Minimum order for Customized Caps is 2 pcs');\r\n      } else if (typeof showToast === 'function') {\r\n        showToast('Minimum order for Customized Caps is 2 pcs');\r\n      }\r\n      return;\r\n    }\r\n\r\n    item.quantity = newQty;\r\n\r\n    // For caps: sync properties and item title with updated quantity slab and unit price\r\n    if (isCap) {\r\n      const capUnitPrice = getItemUnitPrice(item);\r\n      if (item.properties) {\r\n        item.properties['Unit Price'] = `\u20B9${capUnitPrice.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;\r\n        item.properties['Total Price'] = `\u20B9${(capUnitPrice * newQty).toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;\r\n      }\r\n      if (item.name && item.name.includes('Pcs')) {\r\n        item.name = item.name.replace(/\\s*-\\s*\\d+\\s*Pcs/i, ` - ${newQty} Pcs`);\r\n      }\r\n    }\r\n\r\n    // Find paired item if exists\r\n    const pairId = item.pairId || (item.properties && (item.properties['_pairId'] || item.properties['Pair ID']));\r\n    let pairedItem = null;\r\n\r\n    if (pairId) {\r\n      pairedItem = localCartItems.find(other =>\r\n        other !== item && (\r\n          other.pairId === pairId ||\r\n          (other.properties && (other.properties['_pairId'] === pairId || other.properties['Pair ID'] === pairId)) ||\r\n          other.parentItemId === item.id ||\r\n          other.id === item.parentItemId\r\n        )\r\n      );\r\n    } else if (item.properties && item.properties['Add-on Paired']) {\r\n      const pairedName = String(item.properties['Add-on Paired']).toLowerCase();\r\n      pairedItem = localCartItems.find(other =>\r\n        other !== item &&\r\n        (other.name || '').toLowerCase().includes(pairedName) &&\r\n        (other.properties && other.properties['Paired Sticker'])\r\n      );\r\n    } else if (item.properties && item.properties['Paired Sticker']) {\r\n      const pairedStickerTitle = String(item.properties['Paired Sticker']).toLowerCase();\r\n      pairedItem = localCartItems.find(other =>\r\n        other !== item &&\r\n        (other.name || other.title || other.baseTitle || '').toLowerCase().includes(pairedStickerTitle)\r\n      );\r\n    }\r\n\r\n    if (pairedItem) {\r\n      pairedItem.quantity = newQty;\r\n    }\r\n\r\n    saveLocalCart();\r\n    renderCartDrawer();\r\n\r\n    const rootPath = (window.Shopify && window.Shopify.routes && window.Shopify.routes.root ? window.Shopify.routes.root : '/');\r\n\r\n    const variantIdToChange = (/^\\d+$/.test(String(item.id).trim()))\r\n      ? String(item.id).trim()\r\n      : (item.mappedVariantId || null);\r\n\r\n    if (variantIdToChange) {\r\n      try {\r\n        const isOneRupee = ['67585065189508', '67585065058436', '67585065123972', '67686638256260', '67686441746564', '67686441779332', '67686441844868'].includes(String(variantIdToChange)) ||\r\n          isStickerProduct(item);\r\n\r\n        let shopifyChangeQty = newQty;\r\n        if (isOneRupee) {\r\n          const unitPriceNum = getItemUnitPrice(item);\r\n          shopifyChangeQty = Math.round(unitPriceNum * newQty);\r\n        }\r\n\r\n        await fetch(rootPath + 'cart/change.js', {\r\n          method: 'POST',\r\n          headers: { 'Content-Type': 'application/json' },\r\n          credentials: 'same-origin',\r\n          body: JSON.stringify({\r\n            id: String(variantIdToChange),\r\n            quantity: shopifyChangeQty\r\n          })\r\n        });\r\n      } catch (err) {\r\n        console.warn('Shopify cart qty update error:', err);\r\n      }\r\n    }\r\n\r\n    if (pairedItem) {\r\n      const pairedVariantId = (/^\\d+$/.test(String(pairedItem.id).trim()))\r\n        ? String(pairedItem.id).trim()\r\n        : (pairedItem.mappedVariantId || null);\r\n\r\n      if (pairedVariantId) {\r\n        try {\r\n          const isPairedOneRupee = ['67585065189508', '67585065058436', '67585065123972', '67686638256260', '67686441746564', '67686441779332', '67686441844868'].includes(String(pairedVariantId)) ||\r\n            (typeof isStickerProduct === 'function' && isStickerProduct(pairedItem));\r\n\r\n          let pairedShopifyQty = newQty;\r\n          if (isPairedOneRupee) {\r\n            const pairedUnit = (typeof getItemUnitPrice === 'function') ? getItemUnitPrice(pairedItem) : 200;\r\n            pairedShopifyQty = Math.round(pairedUnit * newQty);\r\n          }\r\n\r\n          await fetch(rootPath + 'cart/change.js', {\r\n            method: 'POST',\r\n            headers: { 'Content-Type': 'application/json' },\r\n            credentials: 'same-origin',\r\n            body: JSON.stringify({\r\n              id: String(pairedVariantId),\r\n              quantity: pairedShopifyQty\r\n            })\r\n          });\r\n        } catch (err) {\r\n          console.warn('Shopify paired cart qty update error:', err);\r\n        }\r\n      }\r\n    }\r\n  }\r\n};\r\n\r\nwindow.removeFromCart = async function (targetId) {\r\n  const targetIdStr = String(targetId).trim();\r\n\r\n  const index = localCartItems.findIndex((item, idx) =>\r\n    String(item.id).trim() === targetIdStr || String(idx) === targetIdStr\r\n  );\r\n\r\n  if (index !== -1) {\r\n    const removedItem = localCartItems[index];\r\n    const itemsToRemove = [removedItem];\r\n\r\n    // Check pairing relationships\r\n    const pairId = removedItem.pairId || (removedItem.properties && (removedItem.properties['_pairId'] || removedItem.properties['Pair ID']));\r\n    const isAddon = removedItem.isAddon || Boolean(removedItem.properties && removedItem.properties['Paired Sticker']);\r\n    const isParent = !isAddon || removedItem.isParentItem || Boolean(removedItem.properties && removedItem.properties['Add-on Paired']);\r\n\r\n    if (isParent) {\r\n      // If the parent sticker is removed, ALSO remove all paired add-on vessels!\r\n      localCartItems.forEach(other => {\r\n        if (other === removedItem) return;\r\n        const otherPairId = other.pairId || (other.properties && (other.properties['_pairId'] || other.properties['Pair ID']));\r\n        const isPairedByPairId = pairId && otherPairId && (pairId === otherPairId);\r\n        const isPairedByParentId = (other.parentItemId && other.parentItemId === removedItem.id) ||\r\n          (other.properties && other.properties['_parentItemId'] === removedItem.id);\r\n        const isPairedByTitle = other.properties && other.properties['Paired Sticker'] &&\r\n          (other.properties['Paired Sticker'] === removedItem.baseTitle ||\r\n            other.properties['Paired Sticker'] === removedItem.name ||\r\n            (removedItem.name && removedItem.name.includes(other.properties['Paired Sticker'])));\r\n\r\n        if (isPairedByPairId || isPairedByParentId || isPairedByTitle) {\r\n          itemsToRemove.push(other);\r\n        }\r\n      });\r\n    } else {\r\n      // If only the add-on vessel was removed directly by the user:\r\n      // Clear the paired status on the parent sticker so it stays as a standalone sheet\r\n      localCartItems.forEach(other => {\r\n        if (other === removedItem) return;\r\n        const otherPairId = other.pairId || (other.properties && (other.properties['_pairId'] || other.properties['Pair ID']));\r\n        const isPaired = (pairId && otherPairId && pairId === otherPairId) ||\r\n          (removedItem.parentItemId && other.id === removedItem.parentItemId) ||\r\n          (removedItem.properties && removedItem.properties['_parentItemId'] === other.id);\r\n        if (isPaired) {\r\n          other.pairId = null;\r\n          other.isParentItem = false;\r\n          other.pairedItemId = null;\r\n          if (other.properties) {\r\n            delete other.properties['Add-on Paired'];\r\n            delete other.properties['_pairId'];\r\n            delete other.properties['_pairedItemId'];\r\n          }\r\n        }\r\n      });\r\n    }\r\n\r\n    // Remove all marked items from localCartItems\r\n    localCartItems = localCartItems.filter(item => !itemsToRemove.includes(item));\r\n    deduplicateLocalCart();\r\n    saveLocalCart();\r\n    renderCartDrawer();\r\n\r\n    const rootPath = (window.Shopify && window.Shopify.routes && window.Shopify.routes.root ? window.Shopify.routes.root : '/');\r\n\r\n    if (localCartItems.length === 0) {\r\n      try {\r\n        await fetch(rootPath + 'cart/clear.js', { method: 'POST', credentials: 'same-origin' });\r\n      } catch (err) { }\r\n    } else {\r\n      for (const itm of itemsToRemove) {\r\n        const variantIdToRemove = (/^\\d+$/.test(String(itm.id).trim()))\r\n          ? String(itm.id).trim()\r\n          : (itm.mappedVariantId || null);\r\n\r\n        if (variantIdToRemove) {\r\n          try {\r\n            await fetch(rootPath + 'cart/change.js', {\r\n              method: 'POST',\r\n              headers: { 'Content-Type': 'application/json' },\r\n              credentials: 'same-origin',\r\n              body: JSON.stringify({\r\n                id: String(variantIdToRemove),\r\n                quantity: 0\r\n              })\r\n            });\r\n          } catch (err) {\r\n            console.warn('Shopify cart item removal error:', err);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n};\r\n\r\nfunction fetchShopifyCart() {\r\n  fetch((window.Shopify && window.Shopify.routes && window.Shopify.routes.root ? window.Shopify.routes.root : '/') + 'cart.js')\r\n    .then(res => res.json())\r\n    .then(cart => {\r\n      if (!cart || !cart.items) return;\r\n      if (cart.items.length === 0) return;\r\n\r\n      if (!localCartItems || localCartItems.length === 0) {\r\n        cart.items.forEach(shopifyItem => {\r\n          const itemProps = shopifyItem.properties || {};\r\n          const isOneRupee = ['67585065189508', '67585065058436', '67585065123972', '67686638256260', '67686441746564', '67686441779332', '67686441844868'].includes(String(shopifyItem.id)) ||\r\n            (typeof isStickerProduct === 'function' && isStickerProduct(shopifyItem));\r\n\r\n          let displayQty = shopifyItem.quantity;\r\n          let displayPrice = `\u20B9${(shopifyItem.final_price / 100).toFixed(2)}`;\r\n\r\n          if (isOneRupee) {\r\n            const tot = parsePriceToNumber(itemProps['Total Price'] || itemProps['Price']) || (shopifyItem.line_price / 100) || 1;\r\n            displayPrice = `\u20B9${tot.toFixed(2)}`;\r\n            displayQty = Math.max(1, Math.round(shopifyItem.quantity / (tot || 1)));\r\n          }\r\n\r\n          if (isCapProduct(shopifyItem)) {\r\n            displayQty = Math.max(2, displayQty);\r\n          }\r\n\r\n          const formatted = {\r\n            id: itemProps['_cartId'] || String(shopifyItem.id),\r\n            mappedVariantId: String(shopifyItem.id),\r\n            name: itemProps['Product Name'] || shopifyItem.product_title || shopifyItem.title,\r\n            price: displayPrice,\r\n            img: shopifyItem.image || 'https://via.placeholder.com/80',\r\n            quantity: displayQty,\r\n            properties: itemProps\r\n          };\r\n          localCartItems.push(formatted);\r\n        });\r\n        deduplicateLocalCart();\r\n        saveLocalCart();\r\n        renderCartDrawer();\r\n      } else {\r\n        cart.items.forEach(shopifyItem => {\r\n          const itemProps = shopifyItem.properties || {};\r\n          const localMatch = localCartItems.find(i =>\r\n            (itemProps['_cartId'] && i.properties && i.properties['_cartId'] === itemProps['_cartId']) ||\r\n            String(i.mappedVariantId || i.id) === String(shopifyItem.id) ||\r\n            String(i.id) === String(shopifyItem.id)\r\n          );\r\n          if (localMatch && localMatch.properties) {\r\n            for (const [pk, pv] of Object.entries(itemProps)) {\r\n              if (typeof pv === 'string' && (pv.includes('/uploads/') || pv.startsWith('http://') || pv.startsWith('https://') || pv.startsWith('//'))) {\r\n                localMatch.properties[pk] = pv;\r\n              }\r\n            }\r\n          }\r\n        });\r\n        deduplicateLocalCart();\r\n        saveLocalCart();\r\n        renderCartDrawer();\r\n      }\r\n    })\r\n    .catch(err => console.warn('Shopify cart sync warning:', err));\r\n}\r\n\r\nwindow.initCartDrawer = function () {\r\n  loadLocalCart();\r\n  renderCartDrawer();\r\n  fetchShopifyCart();\r\n\r\n  const cartBtns = document.querySelectorAll('#header-cart-btn, [data-cart-toggle], .flo-header-cart-btn');\r\n  cartBtns.forEach(btn => {\r\n    btn.addEventListener('click', (e) => {\r\n      e.preventDefault();\r\n      window.toggleCartDrawer();\r\n    });\r\n  });\r\n};\r\n\r\nwindow.inbuiltProductVariantMap = {\r\n  \"1\": \"67585069285508\",\r\n  \"3\": \"67585069351044\",\r\n  \"4\": \"67585069416580\",\r\n  \"7\": \"67585069449348\",\r\n  \"8\": \"67585069514884\",\r\n  \"Tumbler\": \"67643948925060\",\r\n  \"Mug\": \"67643948990596\",\r\n  \"67643948925060\": \"67643948925060\",\r\n  \"67643948990596\": \"67643948990596\",\r\n  \"67587052437636\": \"67587052437636\",\r\n  \"Customized Cotton Cap\": \"67587052437636\",\r\n  \"Customized Cotton Caps\": \"67587052437636\",\r\n  \"Cotton Cap\": \"67587052437636\",\r\n  \"Vinyl Custom Stickers\": \"67585065123972\",\r\n  \"Transparent Custom Stickers\": \"67686638256260\",\r\n  \"Standard Paper Custom Stickers\": \"67585065189508\",\r\n  \"UV DTF Custom Stickers\": \"67585065058436\",\r\n  \"67585069285508\": \"67585069285508\",\r\n  \"67585069351044\": \"67585069351044\",\r\n  \"67585069416580\": \"67585069416580\",\r\n  \"67585069449348\": \"67585069449348\",\r\n  \"67585069514884\": \"67585069514884\",\r\n  \"2 in 1 Gift Set (Card Holder and pen comes with box)\": \"67585069351044\",\r\n  \"2 in 1 gift set (Card Holder and pen comes with box)\": \"67585069351044\",\r\n  \"2 in 1 gift set (Keychain and pen comes with box)\": \"67585069285508\",\r\n  \"2 in 1 Gift Set (Keychain and pen comes with box)\": \"67585069285508\",\r\n  \"3 in 1 Card Holder, Keychain and Pen comes with box\": \"67585069416580\",\r\n  \"3 in 1 Card Holder, Key Chain and pen comes with box\": \"67585069416580\",\r\n  \"4 in 1 gift set (Diary, Card holder, Keychain and pen comes with box)\": \"67585069449348\",\r\n  \"4 in 1 gift set (Diary, Card Holder, Keychain and pen comes with box)\": \"67585069514884\",\r\n  \"Berries UV DTF Mug Transfer Sheet\": \"67585068695684\",\r\n  \"Berries UV DTF Mug Trasfer Sheet\": \"67585068695684\",\r\n  \"Berries UV DTF Tumblr Transfer Sheet\": \"67585066336388\",\r\n  \"Berries UV DTF Tumblr Trasfer Sheet\": \"67585066336388\",\r\n  \"Birds and Bloom UV DTF Mug Transfer Sheet\": \"67585068040324\",\r\n  \"Birds and Bloom UV DTF Mug Trasfer Sheet\": \"67585068040324\",\r\n  \"Birds and Bloom UV DTF Tumblr Transfer Sheet\": \"67585065353348\",\r\n  \"Birds and Bloom UV DTF Tumblr Trasfer Sheet\": \"67585065353348\",\r\n  \"Bloom UV DTF Mug Transfer Sheet\": \"67585068073092\",\r\n  \"Bloom UV DTF Mug Trasfer Sheet\": \"67585068073092\",\r\n  \"Bloom UV DTF Tumblr Transfer Sheet\": \"67585065418884\",\r\n  \"Bloom UV DTF Tumblr Trasfer Sheet\": \"67585065418884\",\r\n  \"Blue Leaves UV DTF Mug Transfer Sheet\": \"67585068793988\",\r\n  \"Blue Leaves UV DTF Mug Trasfer Sheet\": \"67585068793988\",\r\n  \"Blue Leaves UV DTF Tumblr Transfer Sheet\": \"52941055426692\",\r\n  \"Blue Leaves UV DTF Tumblr Trasfer Sheet\": \"52941055426692\",\r\n  \"Bows with Hearts UV DTF Mug Transfer Sheet\": \"67585068302468\",\r\n  \"Bows with Hearts UV DTF Mug Trasfer Sheet\": \"67585068302468\",\r\n  \"Bows with Hearts UV DTF Tumblr Transfer Sheet\": \"67585065648260\",\r\n  \"Bows with Hearts UV DTF Tumblr Trasfer Sheet\": \"67585065648260\",\r\n  \"Cars UV DTF Mug Transfer Sheet\": \"67585068859524\",\r\n  \"Cars UV DTF Mug Trasfer Sheet\": \"67585068859524\",\r\n  \"Cars UV DTF Tumblr Transfer Sheet\": \"67585066107012\",\r\n  \"Cars UV DTF Tumblr Trasfer Sheet\": \"67585066107012\",\r\n  \"Chillies UV DTF Mug Transfer Sheet\": \"67585068892292\",\r\n  \"Chillies UV DTF Mug Trasfer Sheet\": \"67585068892292\",\r\n  \"Chillies UV DTF Tumblr Transfer Sheet\": \"67585066369156\",\r\n  \"Chillies UV DTF Tumblr Trasfer Sheet\": \"67585066369156\",\r\n  \"Christmas Theme UV DTF Mug Transfer Sheet\": \"67585068236932\",\r\n  \"Christmas Theme UV DTF Mug Trasfer Sheet\": \"67585068236932\",\r\n  \"Christmas Theme UV DTF Tumblr Transfer Sheet\": \"67585065549956\",\r\n  \"Christmas Theme UV DTF Tumblr Trasfer Sheet\": \"67585065549956\",\r\n  \"Cool Dogs Oversized Tee\": \"52946862735492\",\r\n  \"10521324617860\": \"52946862735492\",\r\n  \"Daisy UV DTF Mug Transfer Sheet\": \"67585068138628\",\r\n  \"Daisy UV DTF Mug Trasfer Sheet\": \"67585068138628\",\r\n  \"Daisy UV DTF Tumblr Transfer Sheet\": \"67585065484420\",\r\n  \"Daisy UV DTF Tumblr Trasfer Sheet\": \"67585065484420\",\r\n  \"Die Cuts Custom Stickers\": \"67585065123972\",\r\n  \"Dinosaur UV DTF Mug Transfer Sheet\": \"67585069252740\",\r\n  \"Dinosaur UV DTF Mug Trasfer Sheet\": \"67585069252740\",\r\n  \"Dinosour Theme UV DTF Tumblr Transfer Sheet\": \"67585066139780\",\r\n  \"Dinosour Theme UV DTF Tumblr Trasfer Sheet\": \"67585066139780\",\r\n  \"Earth is Art Oversized Tee\": \"52947302350980\",\r\n  \"Floral UV DTF Mug Transfer Sheet\": \"67585068204164\",\r\n  \"Floral UV DTF Mug Trasfer Sheet\": \"67585068204164\",\r\n  \"Floral UV DTF Tumblr Transfer Sheet\": \"67585065615492\",\r\n  \"Floral UV DTF Tumblr Trasfer Sheet\": \"67585065615492\",\r\n  \"Flow Oversized Tee\": \"67585059225732\",\r\n  \"Flowers UV DTF Mug Transfer Sheet\": \"67585068957828\",\r\n  \"Flowers UV DTF Mug Trasfer Sheet\": \"67585068957828\",\r\n  \"Flowers UV DTF Tumblr Transfer Sheet\": \"67585066434692\",\r\n  \"Flowers UV DTF Tumblr Trasfer Sheet\": \"67585066434692\",\r\n  \"Hangry Oversized Tee\": \"67585059389572\",\r\n  \"Heart Oversized Tee\": \"67585059520644\",\r\n  \"Hot Wheels Oversized Tee\": \"67585059684484\",\r\n  \"Kiss Cuts Custom Stickers\": \"67585065189508\",\r\n  \"Custom Stickers\": \"67585065189508\",\r\n  \"Lemon and Blueberries UV DTF Mug Transfer Sheet\": \"67585069023364\",\r\n  \"Lemon and Blueberries UV DTF Mug Trasfer Sheet\": \"67585069023364\",\r\n  \"Lemon and Blueberries UV DTF Tumblr Transfer Sheet\": \"67585066532996\",\r\n  \"Lemon and Blueberries UV DTF Tumblr Trasfer Sheet\": \"67585066532996\",\r\n  \"Lemon UV DTF Mug Transfer Sheet\": \"67585069056132\",\r\n  \"Lemon UV DTF Mug Trasfer Sheet\": \"67585069056132\",\r\n  \"Lemon UV DTF Tumblr Transfer Sheet\": \"67585067876484\",\r\n  \"Lemon UV DTF Tumblr Trasfer Sheet\": \"67585067876484\",\r\n  \"Majnu Bhai Painting Oversized Tee\": \"67585059848324\",\r\n  \"Marg and Music Oversized Tee\": \"67585060012164\",\r\n  \"Marvel Oversized Tee\": \"67585060176004\",\r\n  \"Naruto Oversized Tee Black Color\": \"67585060307076\",\r\n  \"Naruto Oversized Tee White Color\": \"67585060470916\",\r\n  \"NewYork UV DTF Mug Transfer Sheet\": \"67585069121668\",\r\n  \"NewYork UV DTF Mug Trasfer Sheet\": \"67585069121668\",\r\n  \"NewYork UV DTF Tumblr Transfer Sheet\": \"67585066205316\",\r\n  \"NewYork UV DTF Tumblr Trasfer Sheet\": \"67585066205316\",\r\n  \"Not a Morning Person Oversized Tee\": \"67585060634756\",\r\n  \"One Piece Oversized Tee\": \"67585060798596\",\r\n  \"Peep Oversized Tee\": \"67585060929668\",\r\n  \"Pink Bows Theme UV DTF Tumblr Transfer Sheet\": \"67585066270852\",\r\n  \"Pink Bows Theme UV DTF Tumblr Trasfer Sheet\": \"67585066270852\",\r\n  \"Pink Bows UV DTF Mug Transfer Sheet\": \"67585069187204\",\r\n  \"Pink Bows UV DTF Mug Trasfer Sheet\": \"67585069187204\",\r\n  \"Pink Panther Oversized Tee\": \"67585061093508\",\r\n  \"Plot Oversized Tee\": \"67585061257348\",\r\n  \"Pokemon UV DTF Mug Transfer Sheet\": \"67585068466308\",\r\n  \"Pokemon UV DTF Mug Trasfer Sheet\": \"67585068466308\",\r\n  \"pokemon UV DTF Tumblr Transfer Sheet\": \"67585065779332\",\r\n  \"pokemon UV DTF Tumblr Trasfer Sheet\": \"67585065779332\",\r\n  \"Potter head UV DTF Mug Transfer Sheet\": \"67585068400772\",\r\n  \"Potter head UV DTF Mug Trasfer Sheet\": \"67585068400772\",\r\n  \"Potter head UV DTF Tumblr Transfer Sheet\": \"67585065713796\",\r\n  \"Potter head UV DTF Tumblr Trasfer Sheet\": \"67585065713796\",\r\n  \"Sheet Cuts Custom Stickers\": \"67585065058436\",\r\n  \"Sip And Yap Oversized Tee\": \"67585061421188\",\r\n  \"Skateboard UV DTF Mug Transfer Sheet\": \"67585068597380\",\r\n  \"Skateboard UV DTF Mug Trasfer Sheet\": \"67585068597380\",\r\n  \"Skateboard UV DTF Tumblr Transfer Sheet\": \"67585065877636\",\r\n  \"Skateboard UV DTF Tumblr Trasfer Sheet\": \"67585065877636\",\r\n  \"Spicy Life Oversized Tee\": \"67585061585028\",\r\n  \"Strawberries UV DTF Mug Transfer Sheet\": \"67585068531844\",\r\n  \"Strawberries UV DTF Mug Trasfer Sheet\": \"67585068531844\",\r\n  \"Strawberries UV DTF Tumblr Transfer Sheet\": \"67585065812100\",\r\n  \"Strawberries UV DTF Tumblr Trasfer Sheet\": \"67585065812100\",\r\n  \"Strawberry Patch UV DTF Mug Transfer Sheet\": \"67585068662916\",\r\n  \"Strawberry Patch UV DTF Mug Trasfer Sheet\": \"67585068662916\",\r\n  \"Strawberry Patch UV DTF Tumblr Transfer Sheet\": \"67585065943172\",\r\n  \"Strawberry Patch UV DTF Tumblr Trasfer Sheet\": \"67585065943172\",\r\n  \"Sushi Lover Oversized Tee\": \"67585061716100\",\r\n  \"Tequila Oversized Tee\": \"67585061879940\",\r\n  \"Too Pretty For a Job Oversized Tee\": \"67585062043780\",\r\n  \"Yapper Oversized Tee\": \"67586112618628\",\r\n  \"Zero Plans Oversized Tee\": \"67586097315972\"\r\n};\r\n\r\nasync function getStoreFallbackVariantId() {\r\n  try {\r\n    const rootPath = (window.Shopify && window.Shopify.routes && window.Shopify.routes.root ? window.Shopify.routes.root : '/');\r\n    const res = await fetch(rootPath + 'products.json?limit=5');\r\n    const data = await res.json();\r\n    if (data && data.products && data.products.length > 0) {\r\n      for (const prod of data.products) {\r\n        if (prod.variants && prod.variants.length > 0) {\r\n          const avail = prod.variants.find(v => v.available) || prod.variants[0];\r\n          if (avail && avail.id) return String(avail.id);\r\n        }\r\n      }\r\n    }\r\n  } catch (e) { }\r\n  return '67585068204164';\r\n}\r\n\r\nwindow.goToCheckout = async function () {\r\n  const checkoutBtn = document.getElementById('cart-checkout-btn');\r\n  const originalHtml = checkoutBtn ? checkoutBtn.innerHTML : 'Checkout Now';\r\n\r\n  if (checkoutBtn) {\r\n    checkoutBtn.disabled = true;\r\n    checkoutBtn.style.opacity = '0.7';\r\n    checkoutBtn.innerHTML = '<i class=\"fa-solid fa-spinner fa-spin\"></i> Preparing Checkout...';\r\n  }\r\n\r\n  try {\r\n    if (!localCartItems || localCartItems.length === 0) {\r\n      if (window.showToast) window.showToast('Your cart is empty! Add products before checking out.');\r\n      if (checkoutBtn) {\r\n        checkoutBtn.disabled = false;\r\n        checkoutBtn.style.opacity = '1';\r\n        checkoutBtn.innerHTML = originalHtml;\r\n      }\r\n      return;\r\n    }\r\n\r\n    const rootPath = (window.Shopify && window.Shopify.routes && window.Shopify.routes.root ? window.Shopify.routes.root : '/');\r\n\r\n    // 1. Calculate quantity-based slab discount ONLY for customized apparel\r\n    let totalCustomQty = 0;\r\n    (localCartItems || []).forEach(item => {\r\n      if (typeof isInbuiltGarment === 'function' && isInbuiltGarment(item)) {\r\n        return; // In-built t-shirts do NOT count towards custom volume discount slab\r\n      }\r\n      const name = String(item.name || item.title || '').toLowerCase();\r\n      if (name.includes('custom') || (typeof isGarmentItem === 'function' && isGarmentItem(item) && !isInbuiltGarment(item))) {\r\n        totalCustomQty += parseInt(item.quantity || 1, 10);\r\n      }\r\n    });\r\n\r\n    let discountCode = '';\r\n    if (totalCustomQty >= 76) discountCode = 'SLAB43';\r\n    else if (totalCustomQty >= 50) discountCode = 'SLAB40';\r\n    else if (totalCustomQty >= 30) discountCode = 'SLAB35';\r\n    else if (totalCustomQty >= 20) discountCode = 'SLAB32';\r\n    else if (totalCustomQty >= 10) discountCode = 'SLAB27';\r\n    else if (totalCustomQty >= 5) discountCode = 'SLAB24';\r\n    else if (totalCustomQty >= 3) discountCode = 'SLAB11';\r\n\r\n    // 2. Category variant map for custom product fallbacks\r\n    const categoryVariantMap = {\r\n      polo_front: '52875687067780',\r\n      polo_both: '52875687231620',\r\n      oversized_front: '52875686215812',\r\n      oversized_both: '52875686379652',\r\n      round_front: '52875689427076',\r\n      round_both: '52875689590916',\r\n      cap: '67587052437636',\r\n      gift: '67585069285508',\r\n      sticker: '67585065189508',\r\n      default: '52875689427076'\r\n    };\r\n\r\n    const shopifyPayloadItems = localCartItems.map(item => {\r\n      const itemStrId = String(item.id || '').trim();\r\n      const isRealVariant = /^\\d{14,}$/.test(itemStrId) && !itemStrId.startsWith('17');\r\n      const cleanName = (item.name || item.title || '').replace(/^Product Name:\\s*/i, '').replace(/\\s*\\([^)]*\\)/g, '').trim();\r\n      const rawName = String(item.name || item.title || '').replace(/^Product Name:\\s*/i, '').trim();\r\n      const rawBaseTitle = String(item.baseTitle || '').replace(/^Product Name:\\s*/i, '').trim();\r\n      const priceStr = String(item.price || (item.properties && item.properties['Price']) || '');\r\n      const normName = (rawName + ' ' + rawBaseTitle).toLowerCase().replace(/[^a-z0-9]/g, '');\r\n\r\n      const itemText = (String(item.name || '') + ' ' + String(item.title || '') + ' ' + String(item.id || '')).toLowerCase();\r\n      const isSticker = (typeof isStickerProduct === 'function') ? isStickerProduct(item) : (itemText.includes('sticker') && !itemText.includes('tumblr') && !itemText.includes('mug'));\r\n      const isVessel = (itemText.includes('tumbler') || itemText.includes('mug')) && !itemText.includes('sheet') && !itemText.includes('trasfer') && !itemText.includes('transfer') && !itemText.includes('sticker');\r\n      const hasBothPrints = itemText.includes('with back print') || (item.properties && item.properties['Back Print'] === 'With Back Print');\r\n      const isCustomTshirt = (itemText.includes('custom') && (itemText.includes('polo') || itemText.includes('oversiz') || itemText.includes('round'))) ||\r\n        (item.properties && (item.properties['T-Shirt Fit'] || item.properties['Back Print']));\r\n\r\n      let variantId;\r\n\r\n      let prefixMatchedId = null;\r\n      if (typeof inbuiltProductVariantMap !== 'undefined' && inbuiltProductVariantMap) {\r\n        const mapKeys = Object.keys(inbuiltProductVariantMap).filter(k => k.length > 3).sort((a, b) => b.length - a.length);\r\n        for (const mapKey of mapKeys) {\r\n          const normKey = mapKey.toLowerCase().replace(/[^a-z0-9]/g, '');\r\n          if (normName.includes(normKey)) {\r\n            prefixMatchedId = inbuiltProductVariantMap[mapKey];\r\n            break;\r\n          }\r\n        }\r\n      }\r\n\r\n      if (isVessel) {\r\n        variantId = (itemText.includes('tumbler')) ? 67643948925060 : 67643948990596;\r\n      } else if (isCustomTshirt) {\r\n        if (itemText.includes('polo') || (item.properties && String(item.properties['T-Shirt Fit']).toLowerCase().includes('polo'))) {\r\n          variantId = parseInt(hasBothPrints ? categoryVariantMap.polo_both : categoryVariantMap.polo_front, 10);\r\n        } else if (itemText.includes('oversiz') || (item.properties && String(item.properties['T-Shirt Fit']).toLowerCase().includes('oversiz'))) {\r\n          variantId = parseInt(hasBothPrints ? categoryVariantMap.oversized_both : categoryVariantMap.oversized_front, 10);\r\n        } else {\r\n          variantId = parseInt(hasBothPrints ? categoryVariantMap.round_both : categoryVariantMap.round_front, 10);\r\n        }\r\n      } else if (item.mappedVariantId && /^\\d{14,}$/.test(String(item.mappedVariantId).trim())) {\r\n        variantId = parseInt(item.mappedVariantId, 10);\r\n      } else if (isRealVariant) {\r\n        variantId = parseInt(itemStrId, 10);\r\n      } else if (normName.includes('4in1')) {\r\n        const numPrice = (typeof parsePriceToNumber === 'function') ? parsePriceToNumber(priceStr || item.price) : 0;\r\n        if (priceStr.includes('1099') || priceStr.includes('1,099') || numPrice >= 1000) {\r\n          variantId = 67585069514884;\r\n        } else {\r\n          variantId = 67585069449348;\r\n        }\r\n      } else if (prefixMatchedId) {\r\n        variantId = parseInt(prefixMatchedId, 10);\r\n      } else if (item.baseTitle && typeof inbuiltProductVariantMap !== 'undefined' && inbuiltProductVariantMap[item.baseTitle]) {\r\n        variantId = parseInt(inbuiltProductVariantMap[item.baseTitle], 10);\r\n      } else if (typeof inbuiltProductVariantMap !== 'undefined' && (inbuiltProductVariantMap[cleanName] || inbuiltProductVariantMap[item.name])) {\r\n        const directMatch = inbuiltProductVariantMap[cleanName] || inbuiltProductVariantMap[item.name];\r\n        variantId = parseInt(directMatch, 10);\r\n      } else {\r\n        const isGiftItem = itemText.includes('gift') || itemText.includes('card') || itemText.includes('pen') || itemText.includes('keychain') || itemText.includes('box') || itemStrId.startsWith('gift_');\r\n\r\n        let matchedFallback = categoryVariantMap.default;\r\n\r\n        if (itemText.includes('cap')) {\r\n          matchedFallback = categoryVariantMap.cap;\r\n        } else if (isSticker) {\r\n          if (itemText.includes('uv dtf')) {\r\n            matchedFallback = '67585065058436';\r\n          } else if (itemText.includes('transparent')) {\r\n            matchedFallback = '67686638256260';\r\n          } else if (itemText.includes('vinyl') || itemText.includes('die cut')) {\r\n            matchedFallback = '67585065123972';\r\n          } else {\r\n            matchedFallback = '67585065189508';\r\n          }\r\n        } else if (isGiftItem) {\r\n          matchedFallback = categoryVariantMap.gift;\r\n        } else if (itemText.includes('polo')) {\r\n          matchedFallback = hasBothPrints ? categoryVariantMap.polo_both : categoryVariantMap.polo_front;\r\n        } else if (itemText.includes('oversiz')) {\r\n          matchedFallback = hasBothPrints ? categoryVariantMap.oversized_both : categoryVariantMap.oversized_front;\r\n        } else {\r\n          matchedFallback = hasBothPrints ? categoryVariantMap.round_both : categoryVariantMap.round_front;\r\n        }\r\n\r\n        variantId = parseInt(matchedFallback, 10);\r\n      }\r\n\r\n      const itemProperties = Object.assign({}, item.properties || {});\r\n      itemProperties['Product Name'] = item.name || item.title || 'Custom Product';\r\n      if (item.price) itemProperties['Price'] = String(item.price);\r\n\r\n      let finalQty = parseInt(item.quantity || 1, 10);\r\n      if (isCapProduct(item)) {\r\n        finalQty = Math.max(2, finalQty);\r\n      }\r\n\r\n      if (isVessel) {\r\n        finalQty = parseInt(item.quantity || 1, 10);\r\n      } else {\r\n        const isOneRupeeSticker = ['67585065189508', '67585065058436', '67585065123972', '67686638256260', '67686441746564', '67686441779332', '67686441844868'].includes(String(variantId)) ||\r\n          (isSticker && !itemText.includes('tumblr') && !itemText.includes('mug'));\r\n\r\n        if (isOneRupeeSticker) {\r\n          let stickerPrice = 0;\r\n          if (itemProperties['Total Price']) {\r\n            stickerPrice = parsePriceToNumber(itemProperties['Total Price']);\r\n          }\r\n          if (!stickerPrice && itemProperties['Price']) {\r\n            stickerPrice = parsePriceToNumber(itemProperties['Price']);\r\n          }\r\n          if (!stickerPrice && item.price) {\r\n            stickerPrice = parsePriceToNumber(item.price);\r\n          }\r\n          if (!stickerPrice) {\r\n            stickerPrice = getItemUnitPrice(item);\r\n          }\r\n          if (stickerPrice >= 1) {\r\n            finalQty = Math.round(stickerPrice * finalQty);\r\n          }\r\n        }\r\n      }\r\n\r\n      return {\r\n        id: variantId,\r\n        quantity: finalQty,\r\n        properties: itemProperties\r\n      };\r\n    });\r\n\r\n    // 3. Sync to Shopify cart via AJAX\r\n    await fetch(rootPath + 'cart/clear.js', { method: 'POST', credentials: 'same-origin' }).catch(() => { });\r\n    await fetch(rootPath + 'cart/add.js', {\r\n      method: 'POST',\r\n      headers: { 'Content-Type': 'application/json' },\r\n      credentials: 'same-origin',\r\n      body: JSON.stringify({ items: shopifyPayloadItems })\r\n    }).catch(() => { });\r\n\r\n    // 4. Navigate directly to Shopify Checkout\r\n    const checkoutUrl = rootPath + 'checkout' + (discountCode ? '?discount=' + encodeURIComponent(discountCode) : '');\r\n    window.location.href = checkoutUrl;\r\n\r\n  } catch (e) {\r\n    console.error('Checkout error:', e);\r\n    window.location.href = (window.Shopify && window.Shopify.routes && window.Shopify.routes.root ? window.Shopify.routes.root : '/') + 'checkout';\r\n  }\r\n};\r\n\r\nfunction initWishlistDrawer() {\r\n  const drawer = document.getElementById('wishlist-drawer');\r\n  const overlay = document.getElementById('wishlist-drawer-overlay');\r\n  const wishlistBtn = document.getElementById('header-wishlist-btn');\r\n  const closeBtn = document.getElementById('wishlist-drawer-close');\r\n\r\n  window.openWishlist = function () {\r\n    if (overlay && drawer) {\r\n      renderWishlist();\r\n      overlay.classList.add('active');\r\n      drawer.classList.add('active');\r\n    }\r\n  };\r\n\r\n  window.closeWishlist = function () {\r\n    if (overlay && drawer) {\r\n      overlay.classList.remove('active');\r\n      drawer.classList.remove('active');\r\n    }\r\n  };\r\n\r\n  if (wishlistBtn) {\r\n    wishlistBtn.addEventListener('click', (e) => {\r\n      e.preventDefault();\r\n      window.openWishlist();\r\n    });\r\n  }\r\n  if (closeBtn) closeBtn.addEventListener('click', window.closeWishlist);\r\n  if (overlay) overlay.addEventListener('click', window.closeWishlist);\r\n\r\n  if (typeof checkPendingWishlistOnLoad === 'function') {\r\n    checkPendingWishlistOnLoad();\r\n  }\r\n}\r\n\r\nfunction renderWishlist() {\r\n  const container = document.getElementById('wishlist-drawer-items');\r\n  if (!container) return;\r\n\r\n  if (wishlistItems.length === 0) {\r\n    container.innerHTML = `<div style=\"text-align:center; padding: 40px 0; color: #747d8c;\">\r\n      <i class=\"fa-regular fa-heart\" style=\"font-size: 32px; color: #cbd5e1; margin-bottom: 12px; display: block;\"></i>\r\n      <p style=\"font-size: 16px; font-weight: 600;\">Your wishlist is empty</p>\r\n      <p style=\"font-size: 13px;\">Save items you love to your wishlist!</p>\r\n    </div>`;\r\n    return;\r\n  }\r\n\r\n  container.innerHTML = wishlistItems.map((item, index) => {\r\n    return `\r\n      <div style=\"display: flex; gap: 15px; margin-bottom: 20px; align-items: center; border-bottom: 1px solid #eee; padding-bottom: 15px;\">\r\n        <img src=\"${item.img}\" style=\"width: 60px; height: 60px; object-fit: contain; background: #f8fafc; border-radius: 8px; padding: 5px;\">\r\n        <div style=\"flex: 1;\">\r\n          <h5 style=\"font-size: 14px; font-weight: 600; color: #1e272e; margin-bottom: 4px;\">${item.name}</h5>\r\n          <span style=\"font-size: 14px; font-weight: 700; color: #00a8ff;\">${item.price}</span>\r\n        </div>\r\n        <button onclick=\"moveWishlistItemToCart(${index})\" style=\"background: #00a8ff; color: #fff; border: none; padding: 6px 10px; border-radius: 6px; font-size: 12px; font-weight: 700; cursor: pointer; margin-right: 5px;\" title=\"Add to Cart\">Add to Cart</button>\r\n        <button onclick=\"removeWishlistItem(${index})\" style=\"color: #ff4757; font-weight: bold; background: none; border: none; cursor: pointer; font-size: 16px;\" title=\"Remove from Wishlist\">\u2715</button>\r\n      </div>\r\n    `;\r\n  }).join('');\r\n}\r\n\r\nwindow.removeWishlistItem = function (index) {\r\n  wishlistItems.splice(index, 1);\r\n  saveWishlistToStorage();\r\n  updateWishlistBadgeCount();\r\n  renderWishlist();\r\n};\r\n\r\nwindow.moveWishlistItemToCart = function (index) {\r\n  const item = wishlistItems[index];\r\n  if (item) {\r\n    handleAddToCart(item);\r\n  }\r\n};\r\n\r\nwindow.addTshirtWishlist = window.addTshirtToWishlist = function () {\r\n  const qty = tshirtState.targetQty || 1;\r\n  const totalPrice = tshirtState.totalPrice || (tshirtState.unitPrice || 699.00);\r\n  const itemName = `Custom T-Shirt (${tshirtState.color}, ${tshirtState.fit}, ${tshirtState.finish}) - ${qty} Pcs`;\r\n  const imgUrl = tshirtState.artworkDataUrl || 'assets/tshirt-main-dtg.jpg';\r\n\r\n  handleAddToWishlist({\r\n    id: Date.now(),\r\n    name: itemName,\r\n    price: `\u20B9${totalPrice.toLocaleString('en-IN')}`,\r\n    img: imgUrl\r\n  });\r\n};\r\n\r\nwindow.addStickerToWishlist = function () {\r\n  if (!stickerState.finish) {\r\n    alert('Please select a Finish / Material before adding to wishlist!');\r\n    return;\r\n  }\r\n  const totalPrice = stickerState.totalPrice || 0;\r\n  const sheets = stickerState.sheets || 1;\r\n  const itemName = `Custom Stickers (${stickerState.finish}, ${stickerState.shape || 'Circle'}, ${sheets} Sheets)`;\r\n  const imgUrl = stickerState.artworkDataUrl || 'assets/sticker-transparent-bottle.jpg';\r\n\r\n  handleAddToWishlist({\r\n    id: Date.now(),\r\n    name: itemName,\r\n    price: `\u20B9${totalPrice.toLocaleString('en-IN')}`,\r\n    img: imgUrl\r\n  });\r\n};\r\n\r\nwindow.addGiftToWishlist = function () {\r\n  const qty = giftState.targetQty || 1;\r\n  const totalPrice = giftState.totalPrice || (giftState.basePrice * qty);\r\n  const title = giftState.productTitle || '3 in 1 Gift Set';\r\n  const itemName = `${title} - ${qty} Pc(s)`;\r\n  const imgUrl = giftState.artworkDataUrl || giftState.productImg || 'assets/gift-product-1-main.jpg';\r\n\r\n  handleAddToWishlist({\r\n    id: Date.now(),\r\n    name: itemName,\r\n    price: `\u20B9${totalPrice.toLocaleString('en-IN')}`,\r\n    img: imgUrl\r\n  });\r\n};\r\n\r\n/* --------------------------------------------------------------------------\r\n   4. Quick View Modal & Toast Notifications\r\n   -------------------------------------------------------------------------- */\r\nfunction initQuickView() {\r\n  const quickViewBtns = document.querySelectorAll('.btn-quick-view');\r\n  quickViewBtns.forEach(btn => {\r\n    btn.addEventListener('click', (e) => {\r\n      e.preventDefault();\r\n      const productCard = btn.closest('.product-card');\r\n      const name = productCard.querySelector('.product-name').textContent;\r\n      showToast(`Quick View for \"${name}\"`);\r\n    });\r\n  });\r\n}\r\n\r\nfunction showToast(message) {\r\n  // Toast notifications disabled per user request\r\n}\r\n\r\n/* --------------------------------------------------------------------------\r\n   5. Stickers Product Page Configurator Logic\r\n   -------------------------------------------------------------------------- */\r\nlet stickerState = {\r\n  finish: null,\r\n  shape: null,\r\n  size: '3\" x 3\"',\r\n  sheets: null,\r\n  uvSheetSize: null,\r\n  artworkFile: null,\r\n  artworkDataUrl: null,\r\n  artworkScale: 100,\r\n  artworkApproved: false,\r\n  perSheetRate: 0,\r\n  totalPrice: 0,\r\n  viewMode: 'lifestyle'\r\n};\r\n\r\nwindow.toggleArtworkApproval = function (elem) {\r\n  stickerState.artworkApproved = elem ? elem.checked : false;\r\n  if (typeof window.updateStickerAddBtnState === 'function') {\r\n    window.updateStickerAddBtnState();\r\n  }\r\n};\r\n\r\nwindow.updateStickerAddBtnState = function () {\r\n  const addBtn = document.getElementById('btn-add-custom-cart');\r\n  if (!addBtn) return;\r\n\r\n  const hasFinish = !!stickerState.finish;\r\n  const isUvDtf = hasFinish && String(stickerState.finish).toLowerCase().includes('uv dtf');\r\n  const hasShapeOrSheet = isUvDtf ? !!stickerState.uvSheetSize : !!stickerState.shape;\r\n  const hasQty = !!stickerState.sheets && stickerState.sheets >= 1;\r\n  const hasArtwork = !!(stickerState.artworkFile || stickerState.artworkDataUrl);\r\n  const isApproved = !!stickerState.artworkApproved;\r\n\r\n  const isEnabled = hasFinish && hasShapeOrSheet && hasQty && hasArtwork && isApproved;\r\n\r\n  if (isEnabled) {\r\n    addBtn.removeAttribute('disabled');\r\n    addBtn.disabled = false;\r\n    addBtn.style.setProperty('opacity', '1', 'important');\r\n    addBtn.style.setProperty('cursor', 'pointer', 'important');\r\n    addBtn.style.setProperty('pointer-events', 'auto', 'important');\r\n    addBtn.style.setProperty('box-shadow', '0 8px 20px rgba(20, 61, 28, 0.3)', 'important');\r\n    addBtn.style.setProperty('filter', 'none', 'important');\r\n    addBtn.style.setProperty('background', '#143d1c', 'important');\r\n\r\n    const sheets = stickerState.sheets || 1;\r\n    const totalPrice = stickerState.totalPrice || 0;\r\n    addBtn.innerHTML = `<i class=\"fa-solid fa-cart-shopping\"></i> Add ${sheets} Sheet${sheets > 1 ? 's' : ''} to Cart \u2014 \u20B9${totalPrice.toLocaleString('en-IN')}`;\r\n  } else {\r\n    addBtn.setAttribute('disabled', 'disabled');\r\n    addBtn.disabled = true;\r\n    addBtn.style.setProperty('opacity', '0.45', 'important');\r\n    addBtn.style.setProperty('cursor', 'not-allowed', 'important');\r\n    addBtn.style.setProperty('pointer-events', 'auto', 'important');\r\n    addBtn.style.setProperty('box-shadow', 'none', 'important');\r\n    addBtn.style.setProperty('filter', 'grayscale(0.6)', 'important');\r\n    addBtn.style.setProperty('background', '#94a3b8', 'important');\r\n\r\n    if (hasFinish && hasShapeOrSheet && hasQty && hasArtwork && !isApproved) {\r\n      addBtn.innerHTML = `<i class=\"fa-solid fa-square-check\"></i> Please Tick Design Approval Checkbox Above`;\r\n    } else {\r\n      addBtn.innerHTML = `<i class=\"fa-solid fa-hand-pointer\"></i> Please Select Options & Upload Artwork Above`;\r\n    }\r\n  }\r\n};\r\n\r\nwindow.switchGalleryViewMode = function (mode) {\r\n  const canvasView = document.getElementById('sticker-canvas-view');\r\n  const lifestyleView = document.getElementById('sticker-lifestyle-view');\r\n  const btnCanvas = document.getElementById('view-btn-canvas');\r\n  const btnLifestyle = document.getElementById('view-btn-lifestyle');\r\n\r\n  stickerState.viewMode = mode;\r\n\r\n  if (mode === 'canvas') {\r\n    if (canvasView) canvasView.style.display = 'flex';\r\n    if (lifestyleView) lifestyleView.style.display = 'none';\r\n    if (btnCanvas) btnCanvas.classList.add('active');\r\n    if (btnLifestyle) btnLifestyle.classList.remove('active');\r\n  } else {\r\n    if (canvasView) canvasView.style.display = 'none';\r\n    if (lifestyleView) lifestyleView.style.display = 'block';\r\n    if (btnCanvas) btnCanvas.classList.remove('active');\r\n    if (btnLifestyle) btnLifestyle.classList.add('active');\r\n  }\r\n};\r\n\r\nwindow.toggleCanvasGrid = function (btn) {\r\n  const wrapper = document.getElementById('sticker-canvas-view');\r\n  if (wrapper) {\r\n    wrapper.classList.toggle('grid-bg');\r\n    if (btn) btn.classList.toggle('active');\r\n  }\r\n};\r\n\r\nwindow.resetCanvasTransform = function () {\r\n  stickerState.artworkScale = 100;\r\n  const slider = document.getElementById('artwork-scale-slider');\r\n  if (slider) slider.value = 100;\r\n  const percentText = document.getElementById('artwork-scale-percent');\r\n  if (percentText) percentText.textContent = '100%';\r\n\r\n  const artImg = document.getElementById('sticker-artwork-img');\r\n  if (artImg) {\r\n    artImg.style.transform = 'scale(1)';\r\n  }\r\n\r\n  const dieCut = document.getElementById('sticker-die-cut-object');\r\n  if (dieCut) {\r\n    dieCut.classList.remove('morph-pop');\r\n    void dieCut.offsetWidth;\r\n    dieCut.classList.add('morph-pop');\r\n  }\r\n};\r\n\r\nwindow.selectShape = function (elem) {\r\n  document.querySelectorAll('.shape-btn').forEach(b => b.classList.remove('active'));\r\n  elem.classList.add('active');\r\n  const shapeKey = elem.dataset.shape || elem.querySelector('strong').textContent;\r\n  stickerState.shape = shapeKey;\r\n\r\n  const lInput = document.getElementById('sticker-length-input');\r\n  const wInput = document.getElementById('sticker-width-input') || document.getElementById('sticker-breadth-input');\r\n  const lockIndicator = document.getElementById('square-locked-indicator');\r\n  const len = lInput ? parseFloat(lInput.value) || 3 : 3;\r\n  const brd = wInput ? parseFloat(wInput.value) || 3 : 3;\r\n\r\n  if (shapeKey === 'Square') {\r\n    if (lInput && wInput) {\r\n      wInput.value = lInput.value;\r\n      wInput.readOnly = true;\r\n      wInput.style.backgroundColor = '#f1f5f9';\r\n      wInput.style.cursor = 'not-allowed';\r\n      wInput.style.color = '#64748b';\r\n      wInput.style.borderColor = '#cbd5e1';\r\n      wInput.setAttribute('title', 'Width is automatically locked to Length for Square shape');\r\n    }\r\n    if (lockIndicator) {\r\n      lockIndicator.style.display = 'inline-flex';\r\n    }\r\n  } else {\r\n    if (wInput) {\r\n      wInput.readOnly = false;\r\n      wInput.style.backgroundColor = '';\r\n      wInput.style.cursor = '';\r\n      wInput.style.color = '';\r\n      wInput.style.borderColor = '';\r\n      wInput.removeAttribute('title');\r\n    }\r\n    if (lockIndicator) {\r\n      lockIndicator.style.display = 'none';\r\n    }\r\n    if (shapeKey === 'Rectangle' && len === brd) {\r\n      if (lInput && wInput) {\r\n        lInput.value = 4;\r\n        wInput.value = 2.5;\r\n      }\r\n    } else if (shapeKey === 'Oval' && len === brd) {\r\n      if (lInput && wInput) {\r\n        lInput.value = 3.5;\r\n        wInput.value = 2.5;\r\n      }\r\n    }\r\n  }\r\n\r\n  const dieCut = document.getElementById('sticker-die-cut-object');\r\n  if (dieCut) {\r\n    dieCut.classList.remove('shape-circle', 'shape-rectangle', 'shape-square', 'shape-oval', 'shape-shapecut');\r\n    const shapeClassMap = {\r\n      'Circle': 'shape-circle',\r\n      'Rectangle': 'shape-rectangle',\r\n      'Square': 'shape-square',\r\n      'Oval': 'shape-oval',\r\n      'Shape Cut Sticker': 'shape-shapecut',\r\n      'Shape Cut': 'shape-shapecut'\r\n    };\r\n    const sClass = shapeClassMap[shapeKey] || 'shape-circle';\r\n    dieCut.classList.add(sClass);\r\n\r\n    // Apply Elastic Morph Pop Animation\r\n    dieCut.classList.remove('morph-pop');\r\n    void dieCut.offsetWidth;\r\n    dieCut.classList.add('morph-pop');\r\n  }\r\n\r\n  updateCustomSize();\r\n  if (typeof window.updateStickerAddBtnState === 'function') {\r\n    window.updateStickerAddBtnState();\r\n  }\r\n  showToast(`Selected Shape: ${shapeKey}`);\r\n};\r\n\r\nconst materialGalleryMap = {\r\n  'Standard Paper': {\r\n    title: 'Standard Paper Stickers',\r\n    description: 'Simple, versatile, and made for everyday use.<br>Our Standard Paper Stickers are an easy way to add your logo, message, or design to packaging, labels, gifts, and more. Upload your design, choose your size, and we\\'ll turn it into stickers made just for you.<br><br><strong>Perfect for packaging, thank-you stickers, product labels, event favours, and everyday branding.</strong>',\r\n    main: 'assets/sticker-paper-hand.jpg',\r\n    badge: 'STANDARD PAPER',\r\n    thumbs: [\r\n      { src: 'assets/sticker-paper-hand.jpg', label: 'Thank You Round Sticker (Hand)' },\r\n      { src: 'assets/sticker-paper-redbox.jpg', label: 'Thank You Label on Red Gift Box' },\r\n      { src: 'assets/sticker-paper-cardboard.jpg', label: 'Barcode & Social Labels on Cardboard' },\r\n      { src: 'assets/sticker-size-guide.png', label: 'Coin Size Reference Guide' }\r\n    ]\r\n  },\r\n  'Vinyl': {\r\n    title: 'Custom Vinyl Stickers',\r\n    description: 'Made to last, wherever you stick them.<br>Our Vinyl Stickers are durable, water-resistant, and perfect when you need something stronger than a regular paper sticker. Customize them with your logo, artwork, or design and use them across a variety of smooth surfaces.<br><br><strong>Perfect for bottles, packaging, laptops, jars, products, and more.</strong>',\r\n    main: 'assets/sticker-vinyl-hand-elementa.jpg',\r\n    badge: 'VINYL GLOSS',\r\n    thumbs: [\r\n      { src: 'assets/sticker-vinyl-hand-elementa.jpg', label: 'Elementa Round Vinyl Sticker (Hand)' },\r\n      { src: 'assets/sticker-vinyl-redbox.jpg', label: 'Vinyl Sticker on Red Gift Box' },\r\n      { src: 'assets/sticker-vinyl-shapecut-funny.jpg', label: 'Die-Cut Shape Cut Vinyl Stickers' },\r\n      { src: 'assets/sticker-size-guide.png', label: 'Coin Size Reference Guide' }\r\n    ]\r\n  },\r\n  'Transparent': {\r\n    title: 'Transparent Stickers',\r\n    description: 'Clean, subtle, and designed to blend in. Our Transparent Stickers give your design a clean, seamless look while allowing the surface underneath to show through. They\\'re perfect when you want your branding to stand out without a visible sticker background.<br><br><strong>Perfect for glass, jars, bottles, clear packaging, acrylic, and minimal branding.</strong>',\r\n    main: 'assets/sticker-transparent-hand-elementa.jpg',\r\n    badge: 'TRANSPARENT',\r\n    thumbs: [\r\n      { src: 'assets/sticker-transparent-hand-elementa.jpg', label: 'Elementa Clear Logo Sticker' },\r\n      { src: 'assets/sticker-transparent-bottle.jpg', label: 'Elementa Clear Spray Bottle Label' },\r\n      { src: 'assets/sticker-transparent-bamboo-candle.jpg', label: 'Bamboo Candle Jar Label' },\r\n      { src: 'assets/sticker-size-guide.png', label: 'Coin Size Reference Guide' }\r\n    ]\r\n  },\r\n  'UV DTF (transfer stickers)': {\r\n    title: 'UV DTF Transfer Stickers',\r\n    description: 'A premium look, made effortless.<br>Our UV DTF Transfer Stickers are made for designs that deserve a more elevated finish. With no visible background, your design sits seamlessly on the surface, creating a clean, high-end look that feels almost directly printed on. Durable, waterproof, and made to stand out.<br><br><strong>Perfect for glass, acrylic, bottles, jars, tumblers, packaging, and other hard surfaces.</strong>',\r\n    main: 'assets/sticker-uvdtf-serum-bottle.jpg',\r\n    badge: 'UV DTF 3D',\r\n    thumbs: [\r\n      { src: 'assets/sticker-uvdtf-serum-bottle.jpg', label: 'UV DTF Amber Serum Bottle' },\r\n      { src: 'assets/sticker-uvdtf-glass-tumbler.jpg', label: 'UV DTF Glass Tumbler' },\r\n      { src: 'assets/sticker-uvdtf-how-to-apply.jpg', label: 'Steps to Apply UV DTF Transfer Sticker' },\r\n      { src: 'assets/sticker-size-guide.png', label: 'Coin Size Reference Guide' }\r\n    ]\r\n  },\r\n  'Default': {\r\n    title: 'Custom Stickers',\r\n    description: '<strong>Custom Stickers for Every Project and Business</strong><br>Bring your ideas to life with high-quality custom stickers made for both home and commercial use. Whether you are running a business, leveling up your product packaging, organising your kitchen, or personalising your gear, we turn your designs into premium stickers. Upload your artwork, choose your material, and let us handle the rest.',\r\n    main: 'assets/sticker-transparent-bottle.jpg',\r\n    badge: 'CUSTOM STICKERS',\r\n    thumbs: [\r\n      { src: 'assets/sticker-transparent-bottle.jpg', label: 'Elementa Clear Spray Bottle' },\r\n      { src: 'assets/sticker-transparent-hand-elementa.jpg', label: 'Elementa Clear Logo Sticker (Hand)' },\r\n      { src: 'assets/sticker-transparent-bamboo-candle.jpg', label: 'Bamboo Candle Jar Label' },\r\n      { src: 'assets/sticker-vinyl-shapecut-funny.jpg', label: 'Die-Cut Shape Cut Vinyl Stickers' }\r\n    ]\r\n  }\r\n};\r\n\r\nlet currentMaterialThumbs = materialGalleryMap['Default'].thumbs;\r\nlet currentImageIndex = 0;\r\nlet galleryAutoplayTimer = null;\r\n\r\nfunction startGalleryAutoplay() {\r\n  stopGalleryAutoplay();\r\n  galleryAutoplayTimer = setInterval(() => {\r\n    if (currentMaterialThumbs && currentMaterialThumbs.length > 0) {\r\n      currentImageIndex = (currentImageIndex + 1) % currentMaterialThumbs.length;\r\n      changeMainImageIndex(currentImageIndex, false);\r\n    }\r\n  }, 4000);\r\n}\r\n\r\nfunction stopGalleryAutoplay() {\r\n  if (galleryAutoplayTimer) {\r\n    clearInterval(galleryAutoplayTimer);\r\n    galleryAutoplayTimer = null;\r\n  }\r\n}\r\n\r\nwindow.changeMainImageIndex = function (index, userClicked = true) {\r\n  currentImageIndex = index;\r\n  if (currentMaterialThumbs && currentMaterialThumbs[index]) {\r\n    const mainImg = document.getElementById('main-product-img');\r\n    if (mainImg) {\r\n      const targetSrc = currentMaterialThumbs[index].src;\r\n      mainImg.src = window.getShopifyAsset ? window.getShopifyAsset(targetSrc) : targetSrc;\r\n      mainImg.style.animation = 'fadeIn 0.3s ease';\r\n    }\r\n    document.querySelectorAll('.sticker-gallery-thumb-btn, .gallery-dot').forEach((d, i) => {\r\n      if (i === index) {\r\n        d.classList.add('active');\r\n        d.style.borderColor = '#00b894';\r\n        d.style.boxShadow = '0 0 0 2px rgba(0, 184, 148, 0.3)';\r\n      } else {\r\n        d.classList.remove('active');\r\n        d.style.borderColor = '#e2e8f0';\r\n        d.style.boxShadow = 'none';\r\n      }\r\n    });\r\n  }\r\n  if (userClicked) {\r\n    startGalleryAutoplay();\r\n  }\r\n};\r\n\r\nwindow.selectFinish = function (elem) {\r\n  document.querySelectorAll('.finish-btn').forEach(b => b.classList.remove('active'));\r\n  elem.classList.add('active');\r\n  const finishKey = elem.dataset.finish || elem.querySelector('strong').textContent;\r\n  stickerState.finish = finishKey;\r\n\r\n  const isUvDtf = finishKey.includes('UV DTF');\r\n\r\n  const shapeLabel = document.getElementById('step-shape-label');\r\n  const standardShapes = document.getElementById('standard-shapes-grid');\r\n  const uvdtfSheets = document.getElementById('uvdtf-sheets-grid');\r\n\r\n  if (isUvDtf) {\r\n    if (shapeLabel) shapeLabel.textContent = '2. SHEET TYPE:';\r\n    if (standardShapes) standardShapes.style.display = 'none';\r\n    if (uvdtfSheets) uvdtfSheets.style.display = 'grid';\r\n  } else {\r\n    if (shapeLabel) shapeLabel.textContent = '2. SHAPE:';\r\n    if (standardShapes) standardShapes.style.display = 'grid';\r\n    if (uvdtfSheets) uvdtfSheets.style.display = 'none';\r\n  }\r\n\r\n  // Update Live Studio Canvas Finish Class & Effects\r\n  const dieCut = document.getElementById('sticker-die-cut-object');\r\n  if (dieCut) {\r\n    dieCut.classList.remove('finish-paper', 'finish-vinyl', 'finish-transparent', 'finish-uvdtf');\r\n    if (finishKey === 'Standard Paper') dieCut.classList.add('finish-paper');\r\n    else if (finishKey === 'Transparent') dieCut.classList.add('finish-transparent');\r\n    else if (isUvDtf) dieCut.classList.add('finish-uvdtf');\r\n    else dieCut.classList.add('finish-vinyl');\r\n\r\n    dieCut.classList.remove('morph-pop');\r\n    void dieCut.offsetWidth;\r\n    dieCut.classList.add('morph-pop');\r\n  }\r\n\r\n  // Trigger Particle Beam Shimmer Ray Sweep Animation\r\n  const sweepLayer = document.getElementById('material-sweep-layer');\r\n  if (sweepLayer) {\r\n    sweepLayer.classList.remove('trigger-sweep');\r\n    void sweepLayer.offsetWidth;\r\n    sweepLayer.classList.add('trigger-sweep');\r\n  }\r\n\r\n  const galleryData = materialGalleryMap[finishKey];\r\n  if (galleryData) {\r\n    currentMaterialThumbs = galleryData.thumbs;\r\n    currentImageIndex = 0;\r\n\r\n    const titleElem = document.getElementById('product-title-main');\r\n    if (titleElem && galleryData.title) {\r\n      titleElem.textContent = galleryData.title;\r\n    }\r\n\r\n    const descElem = document.getElementById('product-summary-desc');\r\n    if (descElem && galleryData.description) {\r\n      descElem.innerHTML = galleryData.description;\r\n    }\r\n\r\n    const mainImg = document.getElementById('main-product-img');\r\n    if (mainImg) {\r\n      mainImg.src = window.getShopifyAsset ? window.getShopifyAsset(galleryData.main) : galleryData.main;\r\n      mainImg.style.animation = 'fadeIn 0.4s ease';\r\n    }\r\n\r\n    const badge = document.getElementById('product-material-badge');\r\n    if (badge) {\r\n      badge.textContent = galleryData.badge;\r\n    }\r\n\r\n    const dotsContainer = document.getElementById('gallery-dots-container');\r\n    if (dotsContainer && galleryData.thumbs) {\r\n      dotsContainer.innerHTML = galleryData.thumbs.map((item, index) => {\r\n        const thumbUrl = (typeof window.getShopifyAsset === 'function') ? window.getShopifyAsset(item.src) : item.src;\r\n        return `\r\n          <div class=\"sticker-gallery-thumb-btn ${index === 0 ? 'active' : ''}\"\r\n               title=\"${item.label}\"\r\n               onclick=\"changeMainImageIndex(${index})\"\r\n               style=\"width: 64px; height: 64px; border-radius: 12px; border: 2px solid ${index === 0 ? '#00b894' : '#e2e8f0'}; overflow: hidden; cursor: pointer; background: #ffffff; transition: all 0.2s ease; ${index === 0 ? 'box-shadow: 0 0 0 2px rgba(0, 184, 148, 0.3);' : ''}\">\r\n            <img src=\"${thumbUrl}\" alt=\"${item.label}\" style=\"width: 100%; height: 100%; object-fit: cover; display: block;\">\r\n          </div>\r\n        `;\r\n      }).join('');\r\n    }\r\n    startGalleryAutoplay();\r\n    updateCustomSize();\r\n    recalculateStickerPrice();\r\n  }\r\n\r\n  if (typeof window.updateStickerAddBtnState === 'function') {\r\n    window.updateStickerAddBtnState();\r\n  }\r\n  showToast(`Selected Material: ${finishKey}`);\r\n};\r\n\r\n\r\nwindow.selectUvSheet = function (sheetType, elem) {\r\n  document.querySelectorAll('#uvdtf-sheets-grid .shape-btn').forEach(b => b.classList.remove('active'));\r\n  if (elem) elem.classList.add('active');\r\n  stickerState.uvSheetSize = sheetType;\r\n  updateCustomSize();\r\n  recalculateStickerPrice();\r\n  if (typeof window.updateStickerAddBtnState === 'function') {\r\n    window.updateStickerAddBtnState();\r\n  }\r\n  showToast(`Selected UV DTF Sheet: ${sheetType}`);\r\n};\r\n\r\nwindow.selectSheetQty = function (sheetCount, elem) {\r\n  const count = parseInt(sheetCount, 10) || 1;\r\n  stickerState.sheets = count;\r\n\r\n  document.querySelectorAll('.sheet-qty-btn').forEach(b => b.classList.remove('active'));\r\n  if (elem) {\r\n    elem.classList.add('active');\r\n  } else {\r\n    const matchingBtn = document.querySelector(`.sheet-qty-btn[data-sheets=\"${count}\"]`);\r\n    if (matchingBtn) matchingBtn.classList.add('active');\r\n  }\r\n\r\n  const manualInput = document.getElementById('manual-sheets-input');\r\n  if (manualInput) manualInput.value = count;\r\n\r\n  recalculateStickerPrice();\r\n  if (typeof window.updateStickerAddBtnState === 'function') {\r\n    window.updateStickerAddBtnState();\r\n  }\r\n  showToast(`Selected ${count} Sheet${count > 1 ? 's' : ''}`);\r\n};\r\n\r\nwindow.updateManualSheets = function (val) {\r\n  const count = Math.max(1, parseInt(val, 10) || 1);\r\n  stickerState.sheets = count;\r\n\r\n  document.querySelectorAll('.sheet-qty-btn').forEach(b => {\r\n    const bSheets = parseInt(b.dataset.sheets || '0', 10);\r\n    if (bSheets === count) {\r\n      b.classList.add('active');\r\n    } else {\r\n      b.classList.remove('active');\r\n    }\r\n  });\r\n\r\n  recalculateStickerPrice();\r\n  if (typeof window.updateStickerAddBtnState === 'function') {\r\n    window.updateStickerAddBtnState();\r\n  }\r\n};\r\n\r\nwindow.recalculateStickerPrice = function () {\r\n  const sheets = stickerState.sheets || 1;\r\n  const finish = stickerState.finish || 'Vinyl';\r\n  const uvSheetSize = stickerState.uvSheetSize || 'A3';\r\n\r\n  let perSheetPrice = 130;\r\n\r\n  const finishLower = finish.toLowerCase();\r\n  const isUvDtf = finishLower.includes('uv dtf');\r\n  const isTransparent = finishLower.includes('transparent');\r\n  const isStandard = finishLower.includes('standard') || finishLower.includes('paper');\r\n\r\n  if (isUvDtf) {\r\n    if (uvSheetSize === 'A4') {\r\n      if (sheets >= 100) perSheetPrice = 180;\r\n      else if (sheets >= 50) perSheetPrice = 185;\r\n      else if (sheets >= 25) perSheetPrice = 195;\r\n      else if (sheets >= 10) perSheetPrice = 245;\r\n      else if (sheets >= 5) perSheetPrice = 299;\r\n      else perSheetPrice = 399;\r\n    } else { // A3\r\n      if (sheets >= 100) perSheetPrice = 360;\r\n      else if (sheets >= 50) perSheetPrice = 370;\r\n      else if (sheets >= 25) perSheetPrice = 380;\r\n      else if (sheets >= 10) perSheetPrice = 510;\r\n      else if (sheets >= 5) perSheetPrice = 525;\r\n      else perSheetPrice = 579;\r\n    }\r\n  } else if (isStandard) {\r\n    if (sheets >= 100) perSheetPrice = 77;\r\n    else if (sheets >= 50) perSheetPrice = 80;\r\n    else if (sheets >= 25) perSheetPrice = 84;\r\n    else if (sheets >= 10) perSheetPrice = 88;\r\n    else if (sheets >= 5) perSheetPrice = 93;\r\n    else perSheetPrice = 100;\r\n  } else {\r\n    // Transparent or Vinyl (Both follow 130, 110, 93, 92, 91, 88)\r\n    if (sheets >= 100) perSheetPrice = 88;\r\n    else if (sheets >= 50) perSheetPrice = 91;\r\n    else if (sheets >= 25) perSheetPrice = 92;\r\n    else if (sheets >= 10) perSheetPrice = 93;\r\n    else if (sheets >= 5) perSheetPrice = 110;\r\n    else perSheetPrice = 130;\r\n  }\r\n\r\n  const totalPrice = sheets * perSheetPrice;\r\n  stickerState.perSheetRate = perSheetPrice;\r\n  stickerState.totalPrice = totalPrice;\r\n\r\n  // Update UI Displays\r\n  const totalPriceElem = document.getElementById('calc-total-price');\r\n  if (totalPriceElem) {\r\n    totalPriceElem.textContent = `\u20B9${totalPrice.toLocaleString('en-IN')}`;\r\n  }\r\n\r\n  const unitPriceElem = document.getElementById('calc-unit-price');\r\n  if (unitPriceElem) {\r\n    unitPriceElem.textContent = `\u20B9${perSheetPrice}/sheet \u2022 Total: ${sheets} Sheet${sheets > 1 ? 's' : ''}`;\r\n  }\r\n\r\n  const addToCartBtn = document.getElementById('btn-add-custom-cart');\r\n  if (addToCartBtn) {\r\n    addToCartBtn.innerHTML = `<i class=\"fa-solid fa-cart-shopping\"></i> Add ${sheets} Sheet${sheets > 1 ? 's' : ''} to Cart \u2014 \u20B9${totalPrice.toLocaleString('en-IN')}`;\r\n    addToCartBtn.style.background = 'var(--primary-teal)';\r\n  }\r\n\r\n  // Update manual total stickers tag\r\n  const manualTotalTag = document.getElementById('manual-sheets-total-stickers');\r\n  const countPerSheetElem = document.getElementById('calc-stickers-per-sheet');\r\n  if (manualTotalTag && countPerSheetElem) {\r\n    const perSheet = parseInt(countPerSheetElem.textContent) || 17;\r\n    const totalStickers = (sheets * perSheet).toLocaleString();\r\n    manualTotalTag.textContent = `Total: ${totalStickers} Stickers (${sheets} Sheets)`;\r\n  }\r\n\r\n  if (typeof window.updateStickerAddBtnState === 'function') {\r\n    window.updateStickerAddBtnState();\r\n  }\r\n};\r\n\r\nwindow.setQuickSize = function (l, w) {\r\n  const lInput = document.getElementById('sticker-length-input');\r\n  const wInput = document.getElementById('sticker-width-input') || document.getElementById('sticker-breadth-input');\r\n\r\n  if (stickerState.shape === 'Square') {\r\n    w = l;\r\n  }\r\n\r\n  const isUvDtf = stickerState.finish && String(stickerState.finish).toLowerCase().includes('uv dtf');\r\n  const isA4 = isUvDtf && stickerState.uvSheetSize === 'A4';\r\n  const maxLen = isA4 ? 10 : 16;\r\n  const maxWid = isA4 ? 7 : 10;\r\n\r\n  const validL = Math.min(maxLen, Math.max(0.5, parseFloat(l) || 1));\r\n  const validW = Math.min(maxWid, Math.max(0.5, parseFloat(w) || 1));\r\n\r\n  if (lInput) lInput.value = validL;\r\n  if (wInput) wInput.value = (stickerState.shape === 'Square') ? validL : validW;\r\n  updateCustomSize();\r\n  recalculateStickerPrice();\r\n};\r\n\r\nwindow.updateCustomSize = function () {\r\n  const lInput = document.getElementById('sticker-length-input');\r\n  const wInput = document.getElementById('sticker-width-input') || document.getElementById('sticker-breadth-input');\r\n  const lockIndicator = document.getElementById('square-locked-indicator');\r\n\r\n  const isUvDtf = stickerState.finish && String(stickerState.finish).toLowerCase().includes('uv dtf');\r\n  const isA4 = isUvDtf && stickerState.uvSheetSize === 'A4';\r\n  const maxLen = isA4 ? 10 : 16;\r\n  const maxWid = isA4 ? 7 : 10;\r\n\r\n  const isSquare = (stickerState.shape === 'Square');\r\n\r\n  if (isSquare) {\r\n    const squareMax = Math.min(maxLen, maxWid);\r\n    if (lInput) {\r\n      lInput.setAttribute('max', squareMax);\r\n      let curLen = parseFloat(lInput.value) || 1;\r\n      if (curLen > squareMax) {\r\n        curLen = squareMax;\r\n        lInput.value = squareMax;\r\n      }\r\n    }\r\n    if (wInput && lInput) {\r\n      wInput.value = lInput.value;\r\n      wInput.readOnly = true;\r\n      wInput.style.backgroundColor = '#f1f5f9';\r\n      wInput.style.cursor = 'not-allowed';\r\n      wInput.style.color = '#64748b';\r\n      wInput.style.borderColor = '#cbd5e1';\r\n      wInput.setAttribute('title', 'Width is automatically locked to Length for Square shape');\r\n    }\r\n    if (lockIndicator) {\r\n      lockIndicator.style.display = 'inline-flex';\r\n    }\r\n  } else {\r\n    if (lInput) {\r\n      lInput.setAttribute('max', maxLen);\r\n    }\r\n    if (wInput) {\r\n      wInput.setAttribute('max', maxWid);\r\n      wInput.readOnly = false;\r\n      wInput.style.backgroundColor = '';\r\n      wInput.style.cursor = '';\r\n      wInput.style.color = '';\r\n      wInput.style.borderColor = '';\r\n      wInput.removeAttribute('title');\r\n    }\r\n    if (lockIndicator) {\r\n      lockIndicator.style.display = 'none';\r\n    }\r\n  }\r\n\r\n  let len = lInput ? (parseFloat(lInput.value) || 1) : 3;\r\n  let brd = wInput ? (parseFloat(wInput.value) || 1) : 3;\r\n\r\n  if (isSquare) {\r\n    brd = len;\r\n    if (wInput) wInput.value = len;\r\n  } else {\r\n    if (lInput && len > maxLen) {\r\n      len = maxLen;\r\n      lInput.value = maxLen;\r\n    }\r\n    if (wInput && brd > maxWid) {\r\n      brd = maxWid;\r\n      wInput.value = maxWid;\r\n    }\r\n  }\r\n\r\n  const sizeLabelSpan = document.getElementById('size-max-hint-span');\r\n  if (sizeLabelSpan) {\r\n    if (isSquare) {\r\n      const squareMax = Math.min(maxLen, maxWid);\r\n      sizeLabelSpan.textContent = `(Square: Max ${squareMax}\" Length \u00D7 ${squareMax}\" Width)`;\r\n    } else {\r\n      sizeLabelSpan.textContent = isA4 ? '(Max 10\" Length \u00D7 Max 7\" Width for A4)' : '(Max 16\" Length \u00D7 Max 10\" Width)';\r\n    }\r\n  }\r\n\r\n  stickerState.size = `${len}\" x ${brd}\"`;\r\n\r\n  // Dynamic Live Aspect Ratio calculation for Die-Cut Object\r\n  const dieCut = document.getElementById('sticker-die-cut-object');\r\n  if (dieCut) {\r\n    let ratio = len / brd;\r\n    if (stickerState.shape === 'Square') {\r\n      ratio = 1.0;\r\n    } else if (stickerState.shape === 'Rectangle' && ratio === 1) {\r\n      ratio = 1.6;\r\n    }\r\n\r\n    if (ratio >= 1) {\r\n      const w = Math.min(94, Math.max(55, 75 * Math.sqrt(ratio / 1.3)));\r\n      const h = Math.min(85, Math.max(32, w / ratio));\r\n      dieCut.style.width = `${w.toFixed(1)}%`;\r\n      dieCut.style.height = `${h.toFixed(1)}%`;\r\n    } else {\r\n      const h = Math.min(85, Math.max(55, 75 * Math.sqrt(1.3 / ratio)));\r\n      const w = Math.min(94, Math.max(32, h * ratio));\r\n      dieCut.style.width = `${w.toFixed(1)}%`;\r\n      dieCut.style.height = `${h.toFixed(1)}%`;\r\n    }\r\n  }\r\n\r\n  // Update Live Dimension Guides on Canvas Box\r\n  const topLabel = document.getElementById('dimension-top-label');\r\n  const leftLabel = document.getElementById('dimension-left-label');\r\n  if (topLabel) {\r\n    topLabel.textContent = `${len.toFixed(1)}\"`;\r\n    topLabel.classList.remove('pulse-scale');\r\n    void topLabel.offsetWidth;\r\n    topLabel.classList.add('pulse-scale');\r\n  }\r\n  if (leftLabel) {\r\n    leftLabel.textContent = `${brd.toFixed(1)}\"`;\r\n    leftLabel.classList.remove('pulse-scale');\r\n    void leftLabel.offsetWidth;\r\n    leftLabel.classList.add('pulse-scale');\r\n  }\r\n\r\n  let sheetWidth = 10;\r\n  let sheetHeight = 16;\r\n  let sheetLabel = 'Sheet Size: 10\" x 16\" (160 sq in)';\r\n\r\n  if (isUvDtf) {\r\n    if (stickerState.uvSheetSize === 'A4') {\r\n      sheetWidth = 7;\r\n      sheetHeight = 10;\r\n      sheetLabel = 'Sheet Size: A4 7\" x 10\" (70 sq in)';\r\n    } else {\r\n      sheetWidth = 10;\r\n      sheetHeight = 16;\r\n      sheetLabel = 'Sheet Size: A3 10\" x 16\" (160 sq in)';\r\n    }\r\n  }\r\n\r\n  const sheetArea = sheetWidth * sheetHeight;\r\n  const stickerArea = len * brd;\r\n  const countPerSheet = stickerArea > 0 ? Math.floor(sheetArea / stickerArea) : 0;\r\n\r\n  const countElem = document.getElementById('calc-stickers-per-sheet');\r\n  if (countElem) {\r\n    countElem.textContent = `${countPerSheet} Stickers per Sheet`;\r\n  }\r\n\r\n  // Update total stickers count tags in quantity sheet buttons\r\n  document.querySelectorAll('.total-stickers-tag').forEach(tag => {\r\n    const sCount = parseInt(tag.dataset.sheets || '1', 10);\r\n    const totalStickers = (sCount * countPerSheet).toLocaleString();\r\n    tag.textContent = `${totalStickers} Stickers`;\r\n  });\r\n\r\n  document.querySelectorAll('.size-preset-chip').forEach(chip => {\r\n    const text = `${len}\"x${brd}\"`;\r\n    if (chip.textContent.trim() === text) chip.classList.add('active');\r\n    else chip.classList.remove('active');\r\n  });\r\n};\r\n\r\nwindow.generatePdfPreviewDataUrl = function (fileName) {\r\n  const raw = (fileName || 'Document.pdf').replace(/^.*[\\\\\\/]/, '');\r\n  const cleanName = raw.length > 20 ? (raw.substring(0, 17) + '...') : raw;\r\n  const svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 320\" width=\"320\" height=\"320\">\r\n    <rect width=\"320\" height=\"320\" rx=\"24\" fill=\"#ffffff\" stroke=\"#e2e8f0\" stroke-width=\"4\"/>\r\n    <rect x=\"70\" y=\"40\" width=\"180\" height=\"230\" rx=\"14\" fill=\"#f8fafc\" stroke=\"#cbd5e1\" stroke-width=\"2.5\"/>\r\n    <path d=\"M200 40 L250 90 L200 90 Z\" fill=\"#e2e8f0\" stroke=\"#cbd5e1\" stroke-width=\"1.5\"/>\r\n    <rect x=\"95\" y=\"115\" width=\"130\" height=\"48\" rx=\"8\" fill=\"#e11d48\"/>\r\n    <text x=\"160\" y=\"148\" fill=\"#ffffff\" font-size=\"24\" font-weight=\"900\" font-family=\"-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, sans-serif\" text-anchor=\"middle\" letter-spacing=\"2\">PDF</text>\r\n    <text x=\"160\" y=\"200\" fill=\"#0f172a\" font-size=\"13\" font-weight=\"700\" font-family=\"-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, sans-serif\" text-anchor=\"middle\">${cleanName}</text>\r\n    <text x=\"160\" y=\"228\" fill=\"#059669\" font-size=\"11\" font-weight=\"700\" font-family=\"-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, sans-serif\" text-anchor=\"middle\">\u2713 PRINT READY DOCUMENT</text>\r\n  </svg>`;\r\n  return 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(svg);\r\n};\r\n\r\nwindow.handleFileUpload = function (input) {\r\n  if (input.files && input.files[0]) {\r\n    const file = input.files[0];\r\n    const isPdf = file.name.toLowerCase().endsWith('.pdf') || file.type === 'application/pdf';\r\n    stickerState.artworkFile = file.name;\r\n    stickerState.rawFile = file;\r\n\r\n    // Trigger CDN upload in background\r\n    if (typeof window.uploadArtworkToShopifyCDN === 'function') {\r\n      window.uploadArtworkToShopifyCDN(file, 'sticker');\r\n    }\r\n\r\n    const onFileReady = function (dataUrl) {\r\n      stickerState.artworkDataUrl = dataUrl;\r\n      stickerState.artworkApproved = false;\r\n\r\n      const chk = document.getElementById('chk-artwork-approval');\r\n      if (chk) chk.checked = false;\r\n\r\n      // Update Canvas Image\r\n      const artImg = document.getElementById('sticker-artwork-img');\r\n      if (artImg) {\r\n        artImg.src = dataUrl;\r\n        artImg.style.animation = 'none';\r\n        void artImg.offsetWidth;\r\n        artImg.style.animation = 'fadeIn 0.4s ease';\r\n      }\r\n\r\n      // Update Artwork Thumbnail Card\r\n      const thumb = document.getElementById('artwork-thumb-preview');\r\n      if (thumb) thumb.src = dataUrl;\r\n\r\n      const fileNameElem = document.getElementById('artwork-file-name');\r\n      if (fileNameElem) fileNameElem.textContent = file.name;\r\n\r\n      const card = document.getElementById('uploaded-artwork-card');\r\n      if (card) card.style.display = 'block';\r\n\r\n      // Trigger Morph Pop Animation\r\n      const dieCut = document.getElementById('sticker-die-cut-object');\r\n      if (dieCut) {\r\n        dieCut.classList.remove('morph-pop');\r\n        void dieCut.offsetWidth;\r\n        dieCut.classList.add('morph-pop');\r\n      }\r\n\r\n      if (typeof window.updateStickerAddBtnState === 'function') {\r\n        window.updateStickerAddBtnState();\r\n      }\r\n      showToast(`Artwork \"${file.name}\" loaded onto live sticker!`);\r\n    };\r\n\r\n    if (isPdf) {\r\n      onFileReady(window.generatePdfPreviewDataUrl(file.name));\r\n    } else {\r\n      const reader = new FileReader();\r\n      reader.onload = function (e) {\r\n        onFileReady(e.target.result);\r\n      };\r\n      reader.readAsDataURL(file);\r\n    }\r\n  }\r\n};\r\n\r\nwindow.updateArtworkScale = function (val) {\r\n  const scale = parseInt(val, 10) || 100;\r\n  stickerState.artworkScale = scale;\r\n\r\n  const percentElem = document.getElementById('artwork-scale-percent');\r\n  if (percentElem) percentElem.textContent = `${scale}%`;\r\n\r\n  const artImg = document.getElementById('sticker-artwork-img');\r\n  if (artImg) {\r\n    artImg.style.transform = `scale(${scale / 100})`;\r\n  }\r\n};\r\n\r\nwindow.removeUploadedArtwork = function () {\r\n  stickerState.artworkFile = null;\r\n  stickerState.artworkDataUrl = null;\r\n  stickerState.artworkScale = 100;\r\n  stickerState.artworkApproved = false;\r\n\r\n  const chk = document.getElementById('chk-artwork-approval');\r\n  if (chk) chk.checked = false;\r\n\r\n  const card = document.getElementById('uploaded-artwork-card');\r\n  if (card) card.style.display = 'none';\r\n\r\n  const fileInput = document.getElementById('artwork-input');\r\n  if (fileInput) fileInput.value = '';\r\n\r\n  const artImg = document.getElementById('sticker-artwork-img');\r\n  if (artImg) {\r\n    artImg.src = 'assets/elementa-logo.png';\r\n    artImg.style.transform = 'scale(1)';\r\n  }\r\n\r\n  if (typeof window.updateStickerAddBtnState === 'function') {\r\n    window.updateStickerAddBtnState();\r\n  }\r\n  showToast('Uploaded artwork removed');\r\n};\r\n\r\nwindow.addStickerToCart = function () {\r\n  const missingOptions = [];\r\n\r\n  if (!stickerState.finish) {\r\n    missingOptions.push('1. Choose Finish / Material');\r\n  }\r\n\r\n  const isUvDtf = stickerState.finish && String(stickerState.finish).toLowerCase().includes('uv dtf');\r\n  if (isUvDtf) {\r\n    if (!stickerState.uvSheetSize) missingOptions.push('2. Sheet Size (A4/A3)');\r\n  } else {\r\n    if (!stickerState.shape) missingOptions.push('2. Shape');\r\n  }\r\n\r\n  if (!stickerState.sheets || stickerState.sheets < 1) {\r\n    missingOptions.push('4. Quantity (Sheets)');\r\n  }\r\n\r\n  if (!stickerState.artworkFile && !stickerState.artworkDataUrl) {\r\n    missingOptions.push('5. Upload Your Artwork');\r\n  } else if (!stickerState.artworkApproved) {\r\n    missingOptions.push('Design Authorization & Approval Checkbox');\r\n  }\r\n\r\n  if (missingOptions.length > 0) {\r\n    const msg = `Please select/upload the following required option${missingOptions.length > 1 ? 's' : ''}: ${missingOptions.join(', ')}`;\r\n    if (window.showToast) window.showToast(msg, 'warning');\r\n    else alert(msg);\r\n    return;\r\n  }\r\n\r\n  const totalPrice = stickerState.totalPrice || 0;\r\n  const sheets = stickerState.sheets || 1;\r\n  const shapeOrSheet = isUvDtf ? stickerState.uvSheetSize : stickerState.shape;\r\n  const itemName = `Custom Stickers (${stickerState.finish}, ${shapeOrSheet}, ${stickerState.size || '3\" x 3\"'}, ${sheets} Sheets)`;\r\n\r\n  let finishImg = 'assets/sticker-transparent-main.jpg';\r\n  const finishLower = (stickerState.finish || '').toLowerCase();\r\n  if (finishLower.includes('transparent')) {\r\n    finishImg = 'assets/sticker-transparent-main.jpg';\r\n  } else if (finishLower.includes('vinyl')) {\r\n    finishImg = 'assets/sticker-vinyl-hand-elementa.jpg';\r\n  } else if (finishLower.includes('uv dtf')) {\r\n    finishImg = 'assets/sticker-uvdtf-serum-bottle.jpg';\r\n  } else if (finishLower.includes('standard') || finishLower.includes('paper')) {\r\n    finishImg = 'assets/sticker-paper-redbox.jpg';\r\n  }\r\n\r\n  const imgUrl = stickerState.artworkDataUrl || (window.getShopifyAsset ? window.getShopifyAsset(finishImg) : finishImg);\r\n\r\n  let selectedStickerVariantId = '67585065123972'; // Default: Vinyl Custom Stickers\r\n  if (isUvDtf || finishLower.includes('uv dtf')) {\r\n    selectedStickerVariantId = '67585065058436'; // UV DTF Custom Stickers\r\n  } else if (finishLower.includes('transparent')) {\r\n    selectedStickerVariantId = '67686638256260'; // Transparent Custom Stickers\r\n  } else if (finishLower.includes('vinyl') || finishLower.includes('die cut')) {\r\n    selectedStickerVariantId = '67585065123972'; // Vinyl Custom Stickers\r\n  } else {\r\n    selectedStickerVariantId = '67585065189508'; // Standard Paper Custom Stickers\r\n  }\r\n\r\n  const fileObj = stickerState.artworkFile || stickerState.rawFile;\r\n  const artIdentifier = (fileObj && fileObj.name)\r\n    ? (fileObj.name + '_' + (fileObj.size || ''))\r\n    : (typeof fileObj === 'string' && fileObj.length < 100\r\n      ? fileObj\r\n      : (stickerState.artworkCdnUrl ? stickerState.artworkCdnUrl.split('/').pop().split('?')[0] : 'design'));\r\n\r\n  const rawConfigParts = [\r\n    stickerState.finish || '',\r\n    shapeOrSheet || '',\r\n    stickerState.size || '3x3',\r\n    sheets || 1,\r\n    artIdentifier\r\n  ].join('_').toLowerCase().replace(/[^a-z0-9_-]/g, '_').substring(0, 80);\r\n\r\n  const stickerConfigKey = 'stk_' + rawConfigParts;\r\n\r\n  handleAddToCart({\r\n    id: stickerConfigKey,\r\n    mappedVariantId: selectedStickerVariantId,\r\n    name: itemName,\r\n    price: `\u20B9${totalPrice.toLocaleString('en-IN')}`,\r\n    img: imgUrl,\r\n    quantity: 1,\r\n    properties: {\r\n      'Finish / Material': stickerState.finish,\r\n      'Shape / Sheet Size': shapeOrSheet,\r\n      'Size': stickerState.size || '3\" x 3\"',\r\n      'Quantity': `${sheets} Sheet(s)`,\r\n      'Unit Rate': `\u20B9${stickerState.perSheetRate || 0}/sheet`,\r\n      'Unit Price': `\u20B9${totalPrice.toLocaleString('en-IN')}`,\r\n      'Total Price': `\u20B9${totalPrice.toLocaleString('en-IN')}`,\r\n      'Price': `\u20B9${totalPrice.toLocaleString('en-IN')}`,\r\n      'Uploaded Artwork': stickerState.artworkCdnUrl || stickerState.rawFile || stickerState.artworkFile || 'Attached',\r\n      'Design Authorization': 'Reviewed & Approved by Customer',\r\n      '_cartId': stickerConfigKey\r\n    }\r\n  });\r\n};\r\n\r\n/* --------------------------------------------------------------------------\r\n   6. Ultra-Attractive Animation Controllers (3D Tilt, Scroll Reveal, Sales Ticker)\r\n   -------------------------------------------------------------------------- */\r\n\r\n// 6.1 Scroll Reveal Observer\r\nfunction initScrollReveal() {\r\n  const elements = document.querySelectorAll('.reveal-on-scroll');\r\n  if (!elements.length) return;\r\n\r\n  elements.forEach(el => el.classList.add('is-visible'));\r\n\r\n  const observer = new IntersectionObserver((entries) => {\r\n    entries.forEach(entry => {\r\n      if (entry.isIntersecting) {\r\n        entry.target.classList.add('is-visible');\r\n      }\r\n    });\r\n  }, { threshold: 0.12 });\r\n\r\n  elements.forEach(el => observer.observe(el));\r\n}\r\n\r\n// 6.2 3D Card Perspective Physics Tilt Effect\r\nfunction init3DTiltEffects() {\r\n  const tiltCards = document.querySelectorAll('.tilt-card, .product-card, .inbuilt-product-card, .spec-card-box');\r\n\r\n  tiltCards.forEach(card => {\r\n    card.addEventListener('mousemove', (e) => {\r\n      const rect = card.getBoundingClientRect();\r\n      const x = e.clientX - rect.left;\r\n      const y = e.clientY - rect.top;\r\n      const centerX = rect.width / 2;\r\n      const centerY = rect.height / 2;\r\n      const rotateX = ((y - centerY) / centerY) * -10;\r\n      const rotateY = ((x - centerX) / centerX) * 10;\r\n\r\n      card.style.transform = `perspective(1000px) rotateX(${rotateX.toFixed(2)}deg) rotateY(${rotateY.toFixed(2)}deg) scale3d(1.02, 1.02, 1.02)`;\r\n    });\r\n\r\n    card.addEventListener('mouseleave', () => {\r\n      card.style.transform = 'perspective(1000px) rotateX(0deg) rotateY(0deg) scale3d(1, 1, 1)';\r\n    });\r\n  });\r\n}\r\n\r\n/* ==========================================================================\r\n   Custom T-Shirts Studio Page Logic\r\n   ========================================================================== */\r\n\r\nconst tshirtMaterialGalleryMap = {\r\n  'Default': {\r\n    title: 'Custom T-Shirt',\r\n    description: `<strong>Custom T-Shirts for Every Style, Brand, and Event</strong><br>Bring your apparel ideas to life with high-quality custom printed t-shirts made for personal wear, team uniforms, brand merch, and events. Choose your fabric, printing method, size, and color, upload your design, and let us handle the rest.`,\r\n    main: 'assets/tshirt-main-dtg.jpg',\r\n    badge: 'CUSTOM T-SHIRT',\r\n    thumbs: [\r\n      { src: 'assets/tshirt-main-dtg.jpg', label: 'DTG Print' },\r\n      { src: 'assets/tshirt-screen-print.jpg', label: 'Screen Print' },\r\n      { src: 'assets/tshirt-hoodie-embroidery.jpg', label: 'Embroidered Hoodie' },\r\n      { src: 'assets/tshirt-polo-shirt.jpg', label: 'Embroidered Polo' }\r\n    ]\r\n  },\r\n  'DTG': {\r\n    title: 'Direct to Garment (DTG) T-Shirts',\r\n    description: `High-definition photo realistic print quality directly onto 100% combed organic cotton. Unlimited color gradients with zero setup fee. Ideal for complex designs, artwork, and small batch orders.`,\r\n    main: 'assets/tshirt-main-dtg.jpg',\r\n    badge: 'DTG PRINTING',\r\n    thumbs: [\r\n      { src: 'assets/tshirt-main-dtg.jpg', label: 'DTG Full Graphic' },\r\n      { src: 'assets/tshirt-screen-print.jpg', label: 'Vintage Black Tee' },\r\n      { src: 'assets/tshirt-polo-shirt.jpg', label: 'White Polo' },\r\n      { src: 'assets/tshirt-hoodie-embroidery.jpg', label: 'Navy Hoodie' }\r\n    ]\r\n  },\r\n  'Screen Printing': {\r\n    title: 'Custom Screen Printed T-Shirts',\r\n    description: `Vibrant, long-lasting plastisol and discharge inks. Maximum durability that withstands 100+ machine washes. Best value for bulk orders, team uniforms, and merchandise lines.`,\r\n    main: 'assets/tshirt-screen-print.jpg',\r\n    badge: 'SCREEN PRINTING',\r\n    thumbs: [\r\n      { src: 'assets/tshirt-screen-print.jpg', label: 'Screen Print Graphic' },\r\n      { src: 'assets/tshirt-main-dtg.jpg', label: 'DTG Organic Tee' },\r\n      { src: 'assets/tshirt-polo-shirt.jpg', label: 'White Polo' },\r\n      { src: 'assets/tshirt-hoodie-embroidery.jpg', label: 'Navy Hoodie' }\r\n    ]\r\n  },\r\n  'Embroidery': {\r\n    title: 'Custom Embroidered Hoodies & Polos',\r\n    description: `Premium 3D stitched thread embroidery for corporate branding, logos, and premium fleece hoodies. Provides an executive, elegant feel that never fades or peels.`,\r\n    main: 'assets/tshirt-hoodie-embroidery.jpg',\r\n    badge: 'EMBROIDERY',\r\n    thumbs: [\r\n      { src: 'assets/tshirt-hoodie-embroidery.jpg', label: 'Navy Hoodie Crest' },\r\n      { src: 'assets/tshirt-polo-shirt.jpg', label: 'White Polo Badge' },\r\n      { src: 'assets/tshirt-main-dtg.jpg', label: 'DTG Graphic Tee' },\r\n      { src: 'assets/tshirt-screen-print.jpg', label: 'Screen Print Tee' }\r\n    ]\r\n  },\r\n  'Sublimation': {\r\n    title: 'Full Color Sublimation Shirts',\r\n    description: `All-over seam-to-seam dye sublimation on moisture-wicking performance polyester. Zero weight, breathable, and permanently fused colors for sportswear and jerseys.`,\r\n    main: 'assets/tshirt-polo-shirt.jpg',\r\n    badge: 'SUBLIMATION',\r\n    thumbs: [\r\n      { src: 'assets/tshirt-polo-shirt.jpg', label: 'Sublimated Polo' },\r\n      { src: 'assets/tshirt-main-dtg.jpg', label: 'DTG Graphic Tee' },\r\n      { src: 'assets/tshirt-screen-print.jpg', label: 'Screen Print' },\r\n      { src: 'assets/tshirt-hoodie-embroidery.jpg', label: 'Navy Hoodie' }\r\n    ]\r\n  }\r\n};\r\n\r\nlet tshirtState = {\r\n  logoCount: 0,\r\n  reviewCount: 0, // Initial review count is 0 -> Hide reviews star element per user requirement\r\n  ratingScore: 4.3,\r\n  finish: 'DTG',\r\n  fit: 'Polo T Shirts',\r\n  color: 'Black',\r\n  colorHex: '#18181b',\r\n  placement: 'Front Center',\r\n  hasBackPrint: false,\r\n  specialInstructions: '',\r\n  targetQty: 2,\r\n  sizeDistribution: {\r\n    'S': 0,\r\n    'M': 0,\r\n    'L': 0,\r\n    'XL': 0,\r\n    'XXL': 0\r\n  },\r\n  artworkFile: null,\r\n  artworkDataUrl: null,\r\n  artworkScale: 100,\r\n  customText: '',\r\n  roundNeckFrontMode: '4x4',\r\n  unitPrice: 0,\r\n  totalPrice: 0,\r\n  viewMode: 'lifestyle'\r\n};\r\n\r\nlet currentTshirtThumbs = tshirtMaterialGalleryMap['Default'].thumbs;\r\nlet currentTshirtImgIndex = 0;\r\n\r\nwindow.toggleTshirtBackPrint = function (enabled) {\r\n  tshirtState.hasBackPrint = !!enabled;\r\n  const toggleCheckbox = document.getElementById('tshirt-back-print-toggle');\r\n  if (toggleCheckbox) toggleCheckbox.checked = tshirtState.hasBackPrint;\r\n\r\n  if (tshirtState.hasBackPrint) {\r\n    if (typeof window.setTshirtLogoCount === 'function') {\r\n      window.setTshirtLogoCount(2, document.getElementById('btn-logo-count-2'));\r\n    }\r\n  } else {\r\n    // If back print is turned OFF, clear back logo and force 1 logo (Front only)\r\n    tshirtState.artworkDataUrl2 = null;\r\n    tshirtState.artworkFile2 = null;\r\n    const logoImg2 = document.getElementById('tshirt-canvas-logo-img-2');\r\n    if (logoImg2) { logoImg2.style.display = 'none'; logoImg2.src = ''; }\r\n    const row2 = document.getElementById('artwork-info-row-2');\r\n    if (row2) row2.style.display = 'none';\r\n    const container2 = document.getElementById('tshirt-draggable-logo-container-2');\r\n    if (container2) container2.style.display = 'none';\r\n    const input2 = document.getElementById('tshirt-file-input-2');\r\n    if (input2) input2.value = '';\r\n\r\n    if (typeof window.setTshirtLogoCount === 'function') {\r\n      window.setTshirtLogoCount(1, document.getElementById('btn-logo-count-1'));\r\n    }\r\n  }\r\n\r\n  if (typeof window.recalculateTshirtPrice === 'function') {\r\n    window.recalculateTshirtPrice();\r\n  }\r\n};\r\n\r\nwindow.selectDiscountTier = function (minQty, maxQty) {\r\n  const fitClean = (tshirtState.fit || '').toLowerCase();\r\n  const isOversized = fitClean.includes('oversiz');\r\n  const minimumAllowed = isOversized ? 1 : 2;\r\n\r\n  let min = Math.max(minimumAllowed, parseInt(minQty, 10) || minimumAllowed);\r\n\r\n  tshirtState.targetQty = min;\r\n  window.isUserModifyingSizes = false;\r\n\r\n  // Reset size distribution so sizes remain 0 for manual user entry\r\n  window.autoAllocateSizesForQty(min);\r\n\r\n  // Sync Custom Quantity Input field\r\n  const customInput = document.getElementById('elementa-custom-total-qty-input');\r\n  if (customInput) {\r\n    customInput.value = min;\r\n    customInput.focus();\r\n  }\r\n\r\n  if (typeof window.updateSizeAllocationUI === 'function') {\r\n    window.updateSizeAllocationUI();\r\n  }\r\n  if (typeof window.recalculateTshirtPrice === 'function') {\r\n    window.recalculateTshirtPrice();\r\n  }\r\n  showToast(`Selected ${min} Pcs tier. You can adjust exact quantity in the Custom Order Quantity box below.`);\r\n};\r\n\r\nwindow.onCustomTotalQtyChange = function (val) {\r\n  let qty = parseInt(val, 10);\r\n  const fitClean = (tshirtState.fit || '').toLowerCase();\r\n  const isOversized = fitClean.includes('oversiz');\r\n  const minQty = isOversized ? 1 : 2;\r\n\r\n  if (isNaN(qty) || qty < minQty) {\r\n    qty = minQty;\r\n  }\r\n\r\n  tshirtState.targetQty = qty;\r\n  window.isUserModifyingSizes = false;\r\n\r\n  if (typeof window.updateSizeAllocationUI === 'function') {\r\n    window.updateSizeAllocationUI();\r\n  }\r\n  if (typeof window.recalculateTshirtPrice === 'function') {\r\n    window.recalculateTshirtPrice();\r\n  }\r\n};\r\n\r\nwindow.adjustCustomTotalQuantity = function (delta) {\r\n  const fitClean = (tshirtState.fit || '').toLowerCase();\r\n  const isOversized = fitClean.includes('oversiz');\r\n  const minQty = isOversized ? 1 : 2;\r\n\r\n  let current = tshirtState.targetQty || minQty;\r\n  let newQty = current + delta;\r\n  if (newQty < minQty) newQty = minQty;\r\n\r\n  const customInput = document.getElementById('elementa-custom-total-qty-input');\r\n  if (customInput) customInput.value = newQty;\r\n\r\n  window.onCustomTotalQtyChange(newQty);\r\n};\r\n\r\nwindow.addNudgeQuantity = function () {\r\n  const nudgeBtn = document.getElementById('tshirt-nudge-btn');\r\n  const delta = nudgeBtn ? (parseInt(nudgeBtn.getAttribute('data-delta'), 10) || 1) : 1;\r\n\r\n  const fitClean = (tshirtState.fit || '').toLowerCase();\r\n  const isOversized = fitClean.includes('oversiz');\r\n  const minimumAllowed = isOversized ? 1 : 2;\r\n\r\n  let current = tshirtState.targetQty || minimumAllowed;\r\n  let newQty = current + delta;\r\n\r\n  tshirtState.targetQty = newQty;\r\n  window.autoAllocateSizesForQty(newQty);\r\n\r\n  if (typeof window.updateSizeAllocationUI === 'function') {\r\n    window.updateSizeAllocationUI();\r\n  }\r\n  if (typeof window.recalculateTshirtPrice === 'function') {\r\n    window.recalculateTshirtPrice();\r\n  }\r\n  showToast(`Added ${delta} more piece${delta > 1 ? 's' : ''}! New total: ${newQty} Pcs`);\r\n};\r\n\r\nwindow.toggleDiscountTableModal = function () {\r\n  const table = document.getElementById('elementa-discount-table-expand');\r\n  if (table) {\r\n    const isHidden = table.style.display === 'none' || table.style.display === '';\r\n    table.style.display = isHidden ? 'block' : 'none';\r\n    if (isHidden) {\r\n      table.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\r\n    }\r\n  }\r\n};\r\n\r\nwindow.autoAllocateSizesForQty = function (qty) {\r\n  const fitClean = (tshirtState.fit || '').toLowerCase();\r\n  const isOversized = fitClean.includes('oversiz');\r\n  const sizes = isOversized ? ['S', 'M', 'L', 'XL'] : ['S', 'M', 'L', 'XL', 'XXL'];\r\n\r\n  // Reset sizes to 0 so users enter sizes manually\r\n  sizes.forEach(s => tshirtState.sizeDistribution[s] = 0);\r\n  if (isOversized) tshirtState.sizeDistribution['XXL'] = 0;\r\n};\r\n\r\nwindow.updateSpecialInstructions = function (textVal) {\r\n  tshirtState.specialInstructions = String(textVal || '').trim();\r\n};\r\n\r\nwindow.selectTshirtQuantityPreset = function (targetCount, elem) {\r\n  document.querySelectorAll('#custom-mode-view .tshirt-qty-chips-flex .qty-chip-btn').forEach(b => b.classList.remove('active'));\r\n  if (elem) elem.classList.add('active');\r\n\r\n  tshirtState.targetQty = targetCount;\r\n  window.autoAllocateSizesForQty(targetCount);\r\n\r\n  updateSizeAllocationUI();\r\n  recalculateTshirtPrice();\r\n};\r\n\r\nwindow.activateCustomQtyInput = function (chipElem) {\r\n  document.querySelectorAll('#custom-mode-view .tshirt-qty-chips-flex .qty-chip-btn').forEach(b => b.classList.remove('active'));\r\n  if (chipElem) chipElem.classList.add('active');\r\n\r\n  const customBox = document.getElementById('custom-qty-input-box');\r\n  const customInput = document.getElementById('tshirt-custom-qty-input');\r\n  if (customBox) customBox.style.display = 'inline-flex';\r\n  if (customInput) {\r\n    customInput.focus();\r\n    if (customInput.value) {\r\n      handleCustomTshirtQtyInput(customInput.value);\r\n    }\r\n  }\r\n};\r\n\r\nwindow.handleCustomTshirtQtyInput = function (val) {\r\n  let qty = parseInt(val, 10);\r\n  const isOversized = tshirtState && (tshirtState.fit === 'Oversized T-Shirts' || tshirtState.fit === 'Oversized');\r\n  const minQty = isOversized ? 1 : 2;\r\n\r\n  if (isNaN(qty) || qty < minQty) {\r\n    qty = minQty;\r\n  }\r\n\r\n  tshirtState.targetQty = qty;\r\n  window.autoAllocateSizesForQty(qty);\r\n\r\n  updateSizeAllocationUI();\r\n  recalculateTshirtPrice();\r\n};\r\n\r\nwindow.applyTshirtSizePreset = function (targetCount) {\r\n  selectTshirtQuantityPreset(targetCount, null);\r\n};\r\n\r\nwindow.isUserModifyingSizes = false;\r\n\r\nwindow.toggleModifySizes = function (enable) {\r\n  window.isUserModifyingSizes = !!enable;\r\n  if (typeof window.updateSizeAllocationUI === 'function') {\r\n    window.updateSizeAllocationUI();\r\n  }\r\n};\r\n\r\nwindow.adjustSizeQty = function (sizeKey, delta) {\r\n  const currentVal = tshirtState.sizeDistribution[sizeKey] || 0;\r\n  if (delta < 0) {\r\n    tshirtState.sizeDistribution[sizeKey] = Math.max(0, currentVal - 1);\r\n  } else if (delta > 0) {\r\n    tshirtState.sizeDistribution[sizeKey] = currentVal + 1;\r\n  }\r\n\r\n  updateSizeAllocationUI();\r\n  recalculateTshirtPrice();\r\n};\r\n\r\nwindow.directInputSizeQty = function (sizeKey, val) {\r\n  let num = parseInt(val, 10);\r\n  if (isNaN(num) || num < 0) num = 0;\r\n  tshirtState.sizeDistribution[sizeKey] = num;\r\n\r\n  updateSizeAllocationUI();\r\n  recalculateTshirtPrice();\r\n};\r\n\r\nwindow.updateSizeAllocationUI = function () {\r\n  const isOversized = (tshirtState.fit || '').toLowerCase().includes('oversiz');\r\n\r\n  // Hide XXL size card if Oversized T-Shirts is active\r\n  const xxlCard = document.getElementById('size-card-XXL');\r\n  if (xxlCard) {\r\n    if (isOversized) {\r\n      xxlCard.style.display = 'none';\r\n      if (tshirtState && tshirtState.sizeDistribution) {\r\n        tshirtState.sizeDistribution['XXL'] = 0;\r\n      }\r\n    } else {\r\n      xxlCard.style.display = 'flex';\r\n    }\r\n  }\r\n\r\n  const totalAllocated = Object.keys(tshirtState.sizeDistribution).reduce((sum, key) => {\r\n    if (isOversized && key === 'XXL') return sum;\r\n    return sum + (tshirtState.sizeDistribution[key] || 0);\r\n  }, 0);\r\n  const target = tshirtState.targetQty || (isOversized ? 1 : 2);\r\n\r\n  // 1. Sync size input fields & card active styles\r\n  Object.keys(tshirtState.sizeDistribution).forEach(key => {\r\n    const inputElem = document.getElementById(`size-qty-input-${key}`);\r\n    if (inputElem) {\r\n      if (inputElem.tagName === 'INPUT') {\r\n        inputElem.value = tshirtState.sizeDistribution[key];\r\n      } else {\r\n        inputElem.textContent = tshirtState.sizeDistribution[key];\r\n      }\r\n      const card = document.getElementById(`size-card-${key}`);\r\n      if (card) {\r\n        if (tshirtState.sizeDistribution[key] > 0) card.classList.add('has-qty');\r\n        else card.classList.remove('has-qty');\r\n      }\r\n    }\r\n  });\r\n\r\n  // 2. Fetch DOM elements for expandable size section\r\n  const summaryBar = document.getElementById('elementa-size-summary-bar');\r\n  const inputsBox = document.getElementById('elementa-size-inputs-box');\r\n  const countElem = document.getElementById('allocated-size-count');\r\n  const hintElem = document.getElementById('size-alloc-hint');\r\n  const doneBtn = document.getElementById('btn-done-modify-sizes');\r\n  const summaryTitle = document.getElementById('elementa-size-summary-title');\r\n  const summaryDetails = document.getElementById('elementa-size-summary-details');\r\n\r\n  // Build readable size allocation details (e.g., S: 1, M: 2, L: 2)\r\n  const sizeParts = [];\r\n  Object.keys(tshirtState.sizeDistribution).forEach(key => {\r\n    if (isOversized && key === 'XXL') return;\r\n    const cnt = tshirtState.sizeDistribution[key] || 0;\r\n    if (cnt > 0) sizeParts.push(`${key}: ${cnt}`);\r\n  });\r\n  const detailsText = sizeParts.length > 0 ? sizeParts.join(', ') : 'None selected';\r\n\r\n  if (summaryTitle) summaryTitle.textContent = `Sizes Allocated (${totalAllocated}/${target} Pcs)`;\r\n  if (summaryDetails) summaryDetails.textContent = detailsText;\r\n\r\n  // 3. Dynamic Auto-Collapse / Expand & Messaging Logic\r\n  if (totalAllocated === target && target > 0) {\r\n    if (!window.isUserModifyingSizes) {\r\n      // Complete & not manually editing -> Auto-hide input cards, show compact summary bar\r\n      if (summaryBar) summaryBar.style.display = 'flex';\r\n      if (inputsBox) inputsBox.style.display = 'none';\r\n    } else {\r\n      // User clicked \"Modify Sizes\" -> Keep input cards open with Done button\r\n      if (summaryBar) summaryBar.style.display = 'none';\r\n      if (inputsBox) inputsBox.style.display = 'block';\r\n      if (doneBtn) doneBtn.style.display = 'inline-block';\r\n      if (countElem) {\r\n        countElem.textContent = `${totalAllocated}/${target} Selected`;\r\n        countElem.style.color = '#15803d';\r\n      }\r\n      if (hintElem) {\r\n        hintElem.textContent = '\u2713 Size allocation complete! Click \"Done\" to finish.';\r\n        hintElem.style.color = '#15803d';\r\n      }\r\n    }\r\n  } else {\r\n    // Allocation incomplete or exceeded -> Reset modify flag, open input cards, hide summary bar\r\n    window.isUserModifyingSizes = false;\r\n    if (summaryBar) summaryBar.style.display = 'none';\r\n    if (inputsBox) inputsBox.style.display = 'block';\r\n    if (doneBtn) doneBtn.style.display = 'none';\r\n\r\n    if (countElem) {\r\n      if (totalAllocated < target) {\r\n        countElem.textContent = `${totalAllocated}/${target} Selected`;\r\n        countElem.style.color = '#dc2626';\r\n        if (hintElem) {\r\n          const rem = target - totalAllocated;\r\n          hintElem.textContent = `(Select remaining ${rem} pc${rem > 1 ? 's' : ''} across sizes below)`;\r\n          hintElem.style.color = '#0284c7';\r\n        }\r\n      } else {\r\n        // totalAllocated > target (Exceeded!)\r\n        countElem.textContent = `${totalAllocated}/${target} Selected (Exceeded!)`;\r\n        countElem.style.color = '#dc2626';\r\n        if (hintElem) {\r\n          const excess = totalAllocated - target;\r\n          hintElem.textContent = `\u26A0\uFE0F Allocated sizes (${totalAllocated} pcs) exceed total quantity (${target} pcs). Please decrease sizes by ${excess} pc${excess > 1 ? 's' : ''}.`;\r\n          hintElem.style.color = '#dc2626';\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  if (typeof window.toggleTshirtAddToCartState === 'function') {\r\n    window.toggleTshirtAddToCartState();\r\n  }\r\n};\r\n\r\nwindow.updateTshirtReviewsDisplay = function () {\r\n  const container = document.getElementById('tshirt-reviews-container');\r\n  if (!container) return;\r\n  if (tshirtState.reviewCount > 0) {\r\n    container.style.display = 'flex';\r\n    const numElem = document.getElementById('tshirt-review-num');\r\n    if (numElem) numElem.textContent = tshirtState.reviewCount;\r\n    const scoreElem = document.getElementById('tshirt-rating-score');\r\n    if (scoreElem) scoreElem.textContent = tshirtState.ratingScore;\r\n  } else {\r\n    container.style.display = 'none';\r\n  }\r\n};\r\n\r\nwindow.switchTshirtGalleryViewMode = function (mode) {\r\n  const canvasView = document.getElementById('tshirt-canvas-view');\r\n  const lifestyleView = document.getElementById('tshirt-lifestyle-view');\r\n  const btnCanvas = document.getElementById('tshirt-view-btn-canvas');\r\n  const btnLifestyle = document.getElementById('tshirt-view-btn-lifestyle');\r\n  const thumbsContainer = document.getElementById('tshirt-gallery-thumbs-container');\r\n\r\n  tshirtState.viewMode = mode;\r\n\r\n  if (mode === 'canvas') {\r\n    if (canvasView) canvasView.style.display = 'flex';\r\n    if (lifestyleView) lifestyleView.style.display = 'none';\r\n    if (thumbsContainer) thumbsContainer.style.display = 'none';\r\n    if (btnCanvas) btnCanvas.classList.add('active');\r\n    if (btnLifestyle) btnLifestyle.classList.remove('active');\r\n    if (typeof window.markZoomMirrorDirty === 'function') window.markZoomMirrorDirty();\r\n    if (typeof window.syncCanvasZoomMirror === 'function') window.syncCanvasZoomMirror();\r\n  } else {\r\n    if (canvasView) canvasView.style.display = 'none';\r\n    if (lifestyleView) lifestyleView.style.display = 'block';\r\n    if (thumbsContainer) thumbsContainer.style.display = 'flex';\r\n    if (btnLifestyle) btnLifestyle.classList.add('active');\r\n    if (btnCanvas) btnCanvas.classList.remove('active');\r\n  }\r\n  if (typeof window.syncProductConfigHeight === 'function') setTimeout(window.syncProductConfigHeight, 50);\r\n};\r\n\r\nwindow.switchTshirtPageMode = function (mode) {\r\n  const btnInbuilt = document.getElementById('btn-mode-inbuilt');\r\n  const btnCustom = document.getElementById('btn-mode-custom');\r\n  if (!btnInbuilt && !btnCustom) return;\r\n\r\n  const inbuiltView = document.getElementById('inbuilt-mode-view');\r\n  const singleView = document.getElementById('single-product-mode-view');\r\n  const customView = document.getElementById('custom-mode-view');\r\n  const extraSections = document.querySelectorAll('.size-chart-banner-section, .order-process-banner-section, .about-brand-section, .related-products-section');\r\n\r\n  if (!inbuiltView || !customView) return;\r\n\r\n  const heroBanner = document.querySelector('.stickers-hero-banner');\r\n  if (heroBanner) heroBanner.style.display = 'block';\r\n  extraSections.forEach(sec => sec.style.display = 'block');\r\n  if (singleView) {\r\n    singleView.style.display = 'none';\r\n    singleView.classList.remove('active');\r\n  }\r\n\r\n  if (mode === 'custom') {\r\n    inbuiltView.classList.remove('active');\r\n    inbuiltView.style.display = 'none';\r\n    customView.classList.add('active');\r\n    customView.style.display = 'block';\r\n    if (btnInbuilt) {\r\n      btnInbuilt.classList.remove('active');\r\n      btnInbuilt.style.background = 'transparent';\r\n      btnInbuilt.style.color = 'var(--dark-main)';\r\n    }\r\n    if (btnCustom) {\r\n      btnCustom.classList.add('active');\r\n      btnCustom.style.background = '#A8D4B0';\r\n      btnCustom.style.color = '#143d1c';\r\n    }\r\n    window.location.hash = 'custom';\r\n    if (typeof window.syncProductConfigHeight === 'function') {\r\n      setTimeout(window.syncProductConfigHeight, 30);\r\n      setTimeout(window.syncProductConfigHeight, 150);\r\n    }\r\n  } else {\r\n    customView.classList.remove('active');\r\n    customView.style.display = 'none';\r\n    inbuiltView.classList.add('active');\r\n    inbuiltView.style.display = 'block';\r\n    if (btnCustom) {\r\n      btnCustom.classList.remove('active');\r\n      btnCustom.style.background = 'transparent';\r\n      btnCustom.style.color = 'var(--dark-main)';\r\n    }\r\n    if (btnInbuilt) {\r\n      btnInbuilt.classList.add('active');\r\n      btnInbuilt.style.background = '#A8D4B0';\r\n      btnInbuilt.style.color = '#143d1c';\r\n    }\r\n    window.location.hash = 'inbuilt';\r\n  }\r\n};\r\n\r\nwindow.filterTshirtCatalog = function (category, btnElement) {\r\n  document.querySelectorAll('.inbuilt-filter-btn').forEach(btn => btn.classList.remove('active'));\r\n  if (btnElement) btnElement.classList.add('active');\r\n\r\n  const target = (category || 'all').toLowerCase().trim();\r\n\r\n  const cards = document.querySelectorAll('#inbuilt-tshirt-catalog-grid .inbuilt-product-card');\r\n  cards.forEach(card => {\r\n    const cardCat = (card.getAttribute('data-category') || '').toLowerCase();\r\n    const cardText = (card.textContent || '').toLowerCase();\r\n\r\n    if (target === 'all' || cardCat.includes(target) || cardText.includes(target)) {\r\n      card.style.display = 'flex';\r\n      card.style.animation = 'fadeIn 0.3s ease';\r\n    } else {\r\n      card.style.display = 'none';\r\n    }\r\n  });\r\n};\r\n\r\nwindow.selectInbuiltSize = function (element) {\r\n  const container = element.closest('.inbuilt-pack-selector');\r\n  if (container) {\r\n    container.querySelectorAll('.inbuilt-pack-opt').forEach(opt => opt.classList.remove('active'));\r\n    element.classList.add('active');\r\n  }\r\n};\r\n\r\nwindow.selectTshirtFinish = function (elem) {\r\n  const finishKey = elem.getAttribute('data-finish') || 'DTG';\r\n  document.querySelectorAll('#custom-mode-view .finish-btn').forEach(b => b.classList.remove('active'));\r\n  elem.classList.add('active');\r\n  tshirtState.finish = finishKey;\r\n\r\n  const galleryData = tshirtMaterialGalleryMap[finishKey];\r\n  if (galleryData) {\r\n    currentTshirtThumbs = galleryData.thumbs;\r\n    currentTshirtImgIndex = 0;\r\n\r\n    const mainImg = document.getElementById('tshirt-main-product-img');\r\n    if (mainImg) {\r\n      mainImg.src = window.getShopifyAsset ? window.getShopifyAsset(galleryData.main) : galleryData.main;\r\n      mainImg.style.animation = 'fadeIn 0.4s ease';\r\n    }\r\n\r\n    const badge = document.getElementById('tshirt-material-badge');\r\n    if (badge) {\r\n      badge.textContent = galleryData.badge;\r\n    }\r\n  }\r\n  recalculateTshirtPrice();\r\n  showToast(`Selected Method: ${finishKey}`);\r\n};\r\n\r\nwindow.selectTshirtFit = function (fitName, elem) {\r\n  const cleanFit = (fitName || '').toString().trim().toLowerCase();\r\n\r\n  document.querySelectorAll('.tshirt-fit-sub-btn').forEach(b => {\r\n    b.classList.remove('active');\r\n    b.style.background = 'transparent';\r\n    b.style.color = 'var(--dark-main)';\r\n  });\r\n\r\n  if (!elem) {\r\n    if (cleanFit.includes('oversize') || cleanFit.includes('oversized')) {\r\n      elem = document.querySelector('.tshirt-fit-sub-btn[onclick*=\"Oversized\"]');\r\n    } else if (cleanFit.includes('round') || cleanFit.includes('rounded')) {\r\n      elem = document.querySelector('.tshirt-fit-sub-btn[onclick*=\"Rounded\"]');\r\n    } else {\r\n      elem = document.querySelector('.tshirt-fit-sub-btn[onclick*=\"Polo\"]');\r\n    }\r\n  }\r\n\r\n  if (elem) {\r\n    elem.classList.add('active');\r\n    elem.style.background = '#A8D4B0';\r\n    elem.style.color = '#143d1c';\r\n  }\r\n\r\n  tshirtState.fit = cleanFit.includes('oversize') ? 'Oversized T-Shirts' : (cleanFit.includes('round') ? 'Rounded Neck' : 'Polo T Shirts');\r\n\r\n  // 1. Filter Inbuilt Products catalog grid if inbuilt view active\r\n  const inbuiltView = document.getElementById('inbuilt-mode-view');\r\n  if (inbuiltView) {\r\n    const allBtn = document.querySelector('.inbuilt-filter-btn[onclick*=\"all\"]') || document.querySelector('.inbuilt-filter-btn');\r\n    if (typeof window.filterTshirtCatalog === 'function') {\r\n      window.filterTshirtCatalog('all', allBtn);\r\n    }\r\n  }\r\n\r\n  // 2. Update Product Main Title & Front Box Selector & Description\r\n  const titleElem = document.getElementById('tshirt-product-title-main');\r\n  if (titleElem) {\r\n    if (cleanFit.includes('oversize')) {\r\n      titleElem.textContent = 'CUSTOMIZED OVERSIZED TSHIRT WITH YOUR DESIGN';\r\n    } else if (cleanFit.includes('round')) {\r\n      titleElem.textContent = 'CUSTOMIZED ROUND NECK TSHIRT WITH YOUR DESIGN OR COMPANY LOGO';\r\n    } else {\r\n      titleElem.textContent = 'Customized Polo T-Shirt With Your Company Logo | Order Logo Printed Tees';\r\n    }\r\n  }\r\n\r\n  // Dynamically update ALL Description Box items per fit across DOM\r\n  document.querySelectorAll('.tshirt-specs-desc-box ul').forEach(descUl => {\r\n    const activeFitText = (fitName || tshirtState.fit || '').toString().trim().toLowerCase();\r\n    if (activeFitText.includes('oversize') || activeFitText.includes('oversized')) {\r\n      descUl.innerHTML = `\r\n        <li>\u2713 Premium 180 GSM Fabric</li>\r\n        <li>\u2713 Lightweight &amp; Breathable</li>\r\n        <li>\u2713 Relaxed Oversized Fit</li>\r\n        <li>\u2713 Perfect for Everyday Wear</li>\r\n      `;\r\n    } else if (activeFitText.includes('round') || activeFitText.includes('rounded')) {\r\n      descUl.innerHTML = `\r\n        <li>\u2713 180 GSM Fabric</li>\r\n        <li>\u2713 100% Cotton</li>\r\n        <li>\u2713 Regular Fit</li>\r\n        <li>\u2713 Lightweight &amp; Breathable</li>\r\n      `;\r\n    } else {\r\n      descUl.innerHTML = `\r\n        <li>\u2713 Premium 200 GSM Fabric</li>\r\n        <li>\u2713 Lightweight &amp; Breathable</li>\r\n        <li>\u2713 Regular fit</li>\r\n        <li>\u2713 Perfect for Everyday Wear</li>\r\n      `;\r\n    }\r\n  });\r\n\r\n  // Remove any remaining 'Inclusive of All Taxes' span elements dynamically\r\n  document.querySelectorAll('.tshirt-top-price-card span').forEach(s => {\r\n    if ((s.textContent || '').toLowerCase().includes('inclusive of all taxes')) {\r\n      s.remove();\r\n    }\r\n  });\r\n\r\n  const boxSelector = document.getElementById('roundneck-front-box-selector');\r\n  if (boxSelector) {\r\n    if (cleanFit.includes('round')) {\r\n      boxSelector.style.display = 'block';\r\n    } else {\r\n      boxSelector.style.display = 'none';\r\n    }\r\n  }\r\n\r\n  // Handle Quantity options & Min Qty dynamically (Oversized = Min 1, Others = Min 2)\r\n  const isOversizedFit = cleanFit.includes('oversize') || cleanFit.includes('oversized');\r\n  const customInput = document.getElementById('tshirt-custom-qty-input');\r\n  const qtyChip1 = document.getElementById('qty-chip-1');\r\n  const customQtyBtn = document.getElementById('custom-qty-chip-btn');\r\n  const customQtyBox = document.getElementById('custom-qty-input-box');\r\n\r\n  if (isOversizedFit) {\r\n    if (customInput) {\r\n      customInput.min = \"1\";\r\n      customInput.placeholder = \"Min 1\";\r\n      if (!customInput.value || customInput.value === \"2\") {\r\n        customInput.value = \"1\";\r\n      }\r\n    }\r\n    if (qtyChip1) {\r\n      qtyChip1.style.display = 'none';\r\n    }\r\n    if (!tshirtState.targetQty || tshirtState.targetQty < 1 || tshirtState.targetQty === 2) {\r\n      tshirtState.targetQty = 1;\r\n    }\r\n\r\n    // Hide preset chips for Oversized T-Shirts (Custom Qty only)\r\n    document.querySelectorAll('.tshirt-qty-chips-flex .qty-chip-btn[data-qty]').forEach(btn => {\r\n      btn.style.display = 'none';\r\n    });\r\n\r\n    if (customQtyBtn) {\r\n      customQtyBtn.style.display = 'inline-flex';\r\n      customQtyBtn.classList.add('active');\r\n    }\r\n    if (customQtyBox) customQtyBox.style.display = 'inline-flex';\r\n\r\n    const headerLabel = document.getElementById('tshirt-qty-header-label');\r\n    if (headerLabel) headerLabel.textContent = `${tshirtState.targetQty} PCS (CUSTOM)`;\r\n\r\n    // Remove/Hide XXL size for Oversized T-Shirts\r\n    const xxlCard = document.getElementById('size-card-XXL');\r\n    if (xxlCard) xxlCard.style.display = 'none';\r\n    const xxlInput = document.getElementById('size-qty-input-XXL');\r\n    if (xxlInput) {\r\n      const xxlRow = xxlInput.closest('.size-counter-row, .elementa-compact-size-card');\r\n      if (xxlRow) xxlRow.style.display = 'none';\r\n      if (typeof tshirtState !== 'undefined' && tshirtState.sizeDistribution) {\r\n        tshirtState.sizeDistribution['XXL'] = 0;\r\n      }\r\n      xxlInput.value = 0;\r\n    }\r\n  } else {\r\n    if (customInput) {\r\n      customInput.min = \"2\";\r\n      customInput.placeholder = \"Min 2\";\r\n      if (customInput.value === \"1\") {\r\n        customInput.value = \"2\";\r\n      }\r\n    }\r\n    if (qtyChip1) {\r\n      qtyChip1.style.display = 'none';\r\n    }\r\n    document.querySelectorAll('.tshirt-qty-chips-flex .qty-chip-btn[data-qty]').forEach(btn => {\r\n      if (btn.getAttribute('data-qty') === '1') {\r\n        btn.style.display = 'none';\r\n      } else {\r\n        btn.style.display = 'inline-block';\r\n      }\r\n    });\r\n\r\n    if (customQtyBtn) customQtyBtn.style.display = 'inline-flex';\r\n\r\n    if (!tshirtState.targetQty || tshirtState.targetQty < 2) {\r\n      tshirtState.targetQty = 2;\r\n      const chip2 = document.querySelector('.tshirt-qty-chips-flex .qty-chip-btn[data-qty=\"2\"]');\r\n      if (chip2) {\r\n        document.querySelectorAll('#custom-mode-view .tshirt-qty-chips-flex .qty-chip-btn').forEach(b => b.classList.remove('active'));\r\n        chip2.classList.add('active');\r\n      }\r\n      const headerLabel = document.getElementById('tshirt-qty-header-label');\r\n      if (headerLabel) headerLabel.textContent = '2 PCS';\r\n    }\r\n\r\n    // Show XXL size for Polo & Round Neck T-Shirts\r\n    const xxlCard = document.getElementById('size-card-XXL');\r\n    if (xxlCard) xxlCard.style.display = 'flex';\r\n    const xxlInput = document.getElementById('size-qty-input-XXL');\r\n    if (xxlInput) {\r\n      const xxlRow = xxlInput.closest('.size-counter-row, .elementa-compact-size-card');\r\n      if (xxlRow) xxlRow.style.display = 'flex';\r\n    }\r\n  }\r\n\r\n  // 3. Update Swatches for Oversized vs Round Neck vs Standard T-Shirts\r\n  if (typeof window.updateTshirtColorSwatchesForFit === 'function') {\r\n    window.updateTshirtColorSwatchesForFit(tshirtState.fit);\r\n  }\r\n\r\n  // 4. Update box position & size for current fit\r\n  if (typeof window.updateBoxPositionForColor === 'function') {\r\n    window.updateBoxPositionForColor(tshirtState.color || 'Black');\r\n  }\r\n\r\n  // 5. Recalculate price & update front/back logo box transform\r\n  if (typeof window.recalculateTshirtPrice === 'function') {\r\n    window.recalculateTshirtPrice();\r\n  }\r\n  if (typeof applyLogoTransformUI === 'function') {\r\n    applyLogoTransformUI();\r\n  }\r\n\r\n  showToast(`Selected Style: ${tshirtState.fit}`);\r\n  if (typeof window.updateSizeChartForCurrentFit === 'function') {\r\n    window.updateSizeChartForCurrentFit();\r\n  }\r\n};\r\n\r\nwindow.updateTshirtColorSwatchesForFit = function (fitName) {\r\n  const container = document.getElementById('tshirt-color-grid-container');\r\n  if (!container) return;\r\n\r\n  let currentFit = fitName || (typeof tshirtState !== 'undefined' && tshirtState.fit) || '';\r\n  if (!currentFit) {\r\n    const activeSubBtn = document.querySelector('.tshirt-fit-sub-btn.active');\r\n    if (activeSubBtn) currentFit = activeSubBtn.textContent || '';\r\n  }\r\n\r\n  const cleanFit = currentFit.toString().trim().toLowerCase();\r\n  let targetTag = 'polo';\r\n  if (cleanFit.includes('oversize') || cleanFit.includes('oversized')) {\r\n    targetTag = 'oversized';\r\n  } else if (cleanFit.includes('round') || cleanFit.includes('rounded')) {\r\n    targetTag = 'round';\r\n  }\r\n\r\n  const allowedColorsByTag = {\r\n    'oversized': ['white', 'black', 'red', 'navy blue'],\r\n    'round': ['black', 'white', 'navy blue', 'red'],\r\n    'polo': ['black', 'white', 'navy blue', 'red', 'grey']\r\n  };\r\n\r\n  const defaultFitsByColor = {\r\n    'black': 'polo,oversized,round',\r\n    'white': 'polo,oversized,round',\r\n    'navy blue': 'polo,oversized,round',\r\n    'red': 'polo,oversized,round',\r\n    'grey': 'polo'\r\n  };\r\n\r\n  const existingButtons = container.querySelectorAll('.color-swatch-card');\r\n  let targetSwatch = null;\r\n  if (existingButtons && existingButtons.length > 0) {\r\n    let firstVisible = null;\r\n    let currentActiveVisible = null;\r\n    existingButtons.forEach(btn => {\r\n      const colorName = (btn.getAttribute('data-color') || btn.textContent || '').trim().toLowerCase();\r\n      let fits = (btn.getAttribute('data-fits') || '').toLowerCase();\r\n\r\n      if (!fits) {\r\n        fits = defaultFitsByColor[colorName] || 'polo';\r\n        btn.setAttribute('data-fits', fits);\r\n      }\r\n\r\n      const isAllowed = fits.includes(targetTag) || (allowedColorsByTag[targetTag] && allowedColorsByTag[targetTag].includes(colorName));\r\n\r\n      if (isAllowed) {\r\n        btn.style.setProperty('display', 'inline-flex', 'important');\r\n        if (!firstVisible) firstVisible = btn;\r\n        if (btn.classList.contains('active')) currentActiveVisible = btn;\r\n      } else {\r\n        btn.style.setProperty('display', 'none', 'important');\r\n        btn.classList.remove('active');\r\n      }\r\n    });\r\n\r\n    targetSwatch = currentActiveVisible || firstVisible;\r\n    if (targetSwatch) {\r\n      existingButtons.forEach(b => b.classList.remove('active'));\r\n      targetSwatch.classList.add('active');\r\n      const colorName = targetSwatch.getAttribute('data-color') || 'Black';\r\n      const colorHex = targetSwatch.getAttribute('data-hex') || '#0f172a';\r\n      if (typeof selectTshirtColor === 'function') {\r\n        selectTshirtColor(colorName, colorHex, targetSwatch);\r\n      }\r\n      try {\r\n        targetSwatch.dispatchEvent(new Event('change', { bubbles: true }));\r\n      } catch (e) { }\r\n    }\r\n  } else {\r\n    if (targetTag === 'oversized') {\r\n      container.innerHTML = `\r\n        <button type=\"button\" class=\"color-swatch-card active\" data-color=\"White\" data-hex=\"#ffffff\" data-fits=\"polo,oversized,round\" onclick=\"selectTshirtColor('White', '#ffffff', this)\">\r\n          <span class=\"swatch-circle\" style=\"background: #ffffff; border: 1px solid #cbd5e1;\"></span>\r\n          <span class=\"swatch-name\">White</span>\r\n        </button>\r\n        <button type=\"button\" class=\"color-swatch-card\" data-color=\"Black\" data-hex=\"#0f172a\" data-fits=\"polo,oversized,round\" onclick=\"selectTshirtColor('Black', '#0f172a', this)\">\r\n          <span class=\"swatch-circle\" style=\"background: #0f172a;\"></span>\r\n          <span class=\"swatch-name\">Black</span>\r\n        </button>\r\n        <button type=\"button\" class=\"color-swatch-card\" data-color=\"Red\" data-hex=\"#dc2626\" data-fits=\"polo,oversized,round\" onclick=\"selectTshirtColor('Red', '#dc2626', this)\">\r\n          <span class=\"swatch-circle\" style=\"background: #dc2626;\"></span>\r\n          <span class=\"swatch-name\">Red</span>\r\n        </button>\r\n        <button type=\"button\" class=\"color-swatch-card\" data-color=\"Navy Blue\" data-hex=\"#1e3a8a\" data-fits=\"polo,oversized,round\" onclick=\"selectTshirtColor('Navy Blue', '#1e3a8a', this)\">\r\n          <span class=\"swatch-circle\" style=\"background: #1e3a8a;\"></span>\r\n          <span class=\"swatch-name\">Navy Blue</span>\r\n        </button>\r\n      `;\r\n      targetSwatch = container.querySelector('[data-color=\"White\"]');\r\n      if (typeof selectTshirtColor === 'function') selectTshirtColor('White', '#ffffff', targetSwatch);\r\n    } else if (targetTag === 'round') {\r\n      container.innerHTML = `\r\n        <button type=\"button\" class=\"color-swatch-card active\" data-color=\"Black\" data-hex=\"#0f172a\" data-fits=\"polo,oversized,round\" onclick=\"selectTshirtColor('Black', '#0f172a', this)\">\r\n          <span class=\"swatch-circle\" style=\"background: #0f172a;\"></span>\r\n          <span class=\"swatch-name\">Black</span>\r\n        </button>\r\n        <button type=\"button\" class=\"color-swatch-card\" data-color=\"White\" data-hex=\"#ffffff\" data-fits=\"polo,oversized,round\" onclick=\"selectTshirtColor('White', '#ffffff', this)\">\r\n          <span class=\"swatch-circle\" style=\"background: #ffffff; border: 1px solid #cbd5e1;\"></span>\r\n          <span class=\"swatch-name\">White</span>\r\n        </button>\r\n        <button type=\"button\" class=\"color-swatch-card\" data-color=\"Navy Blue\" data-hex=\"#1e3a8a\" data-fits=\"polo,oversized,round\" onclick=\"selectTshirtColor('Navy Blue', '#1e3a8a', this)\">\r\n          <span class=\"swatch-circle\" style=\"background: #1e3a8a;\"></span>\r\n          <span class=\"swatch-name\">Navy Blue</span>\r\n        </button>\r\n        <button type=\"button\" class=\"color-swatch-card\" data-color=\"Red\" data-hex=\"#dc2626\" data-fits=\"polo,oversized,round\" onclick=\"selectTshirtColor('Red', '#dc2626', this)\">\r\n          <span class=\"swatch-circle\" style=\"background: #dc2626;\"></span>\r\n          <span class=\"swatch-name\">Red</span>\r\n        </button>\r\n      `;\r\n      targetSwatch = container.querySelector('[data-color=\"Black\"]');\r\n      if (typeof selectTshirtColor === 'function') selectTshirtColor('Black', '#0f172a', targetSwatch);\r\n    } else {\r\n      container.innerHTML = `\r\n        <button type=\"button\" class=\"color-swatch-card active\" data-color=\"Black\" data-hex=\"#111827\" data-fits=\"polo,oversized,round\" onclick=\"selectTshirtColor('Black', '#111827', this)\">\r\n          <span class=\"swatch-circle\" style=\"background: #111827;\"></span>\r\n          <span class=\"swatch-name\">Black</span>\r\n        </button>\r\n        <button type=\"button\" class=\"color-swatch-card\" data-color=\"White\" data-hex=\"#ffffff\" data-fits=\"polo,oversized,round\" onclick=\"selectTshirtColor('White', '#ffffff', this)\">\r\n          <span class=\"swatch-circle\" style=\"background: #ffffff; border: 1px solid #cbd5e1;\"></span>\r\n          <span class=\"swatch-name\">White</span>\r\n        </button>\r\n        <button type=\"button\" class=\"color-swatch-card\" data-color=\"Navy Blue\" data-hex=\"#1e3a8a\" data-fits=\"polo,oversized,round\" onclick=\"selectTshirtColor('Navy Blue', '#1e3a8a', this)\">\r\n          <span class=\"swatch-circle\" style=\"background: #1e3a8a;\"></span>\r\n          <span class=\"swatch-name\">Navy Blue</span>\r\n        </button>\r\n        <button type=\"button\" class=\"color-swatch-card\" data-color=\"Red\" data-hex=\"#dc2626\" data-fits=\"polo,oversized,round\" onclick=\"selectTshirtColor('Red', '#dc2626', this)\">\r\n          <span class=\"swatch-circle\" style=\"background: #dc2626;\"></span>\r\n          <span class=\"swatch-name\">Red</span>\r\n        </button>\r\n        <button type=\"button\" class=\"color-swatch-card\" data-color=\"Grey\" data-hex=\"#6b7280\" data-fits=\"polo\" onclick=\"selectTshirtColor('Grey', '#6b7280', this)\">\r\n          <span class=\"swatch-circle\" style=\"background: #6b7280;\"></span>\r\n          <span class=\"swatch-name\">Grey</span>\r\n        </button>\r\n      `;\r\n      targetSwatch = container.querySelector('[data-color=\"Black\"]');\r\n      if (typeof selectTshirtColor === 'function') selectTshirtColor('Black', '#111827', targetSwatch);\r\n    }\r\n  }\r\n\r\n  if (typeof window.renderPoloColorThumbnails === 'function') {\r\n    window.renderPoloColorThumbnails();\r\n  }\r\n};\r\n\r\nfunction updateImageWithFade(imgElem, newSrc) {\r\n  if (!imgElem || !newSrc) return;\r\n  const currentSrc = imgElem.getAttribute('src') || imgElem.src || '';\r\n  if (currentSrc === newSrc) {\r\n    imgElem.style.opacity = '1';\r\n    return;\r\n  }\r\n  imgElem.style.transition = 'opacity 0.15s ease-in-out';\r\n  imgElem.style.opacity = '0.35';\r\n\r\n  const loader = new Image();\r\n  loader.onload = function () {\r\n    imgElem.src = newSrc;\r\n    imgElem.style.opacity = '1';\r\n  };\r\n  loader.onerror = function () {\r\n    imgElem.src = newSrc;\r\n    imgElem.style.opacity = '1';\r\n  };\r\n  loader.src = newSrc;\r\n}\r\n\r\nlet tshirtColorImageMap = {\r\n  'Black': 'assets/polo-black.jpg',\r\n  'White': 'assets/polo-white.jpg',\r\n  'Navy Blue': 'assets/polo-navy.jpg',\r\n  'Red': 'assets/polo-red.jpg',\r\n  'Grey': 'assets/polo-grey.jpg'\r\n};\r\n\r\nfunction getTshirtColorImage(colorName) {\r\n  let activeFit = (tshirtState && tshirtState.fit) ? tshirtState.fit : '';\r\n  if (!activeFit) {\r\n    const activeSubBtn = document.querySelector('.tshirt-fit-sub-btn.active');\r\n    if (activeSubBtn) {\r\n      activeFit = activeSubBtn.textContent || '';\r\n    }\r\n  }\r\n\r\n  const fitLower = activeFit.toLowerCase();\r\n\r\n  if (fitLower.includes('round') || fitLower.includes('rounded')) {\r\n    const clean = (colorName || '').trim().toLowerCase();\r\n    if (clean.includes('white')) return 'assets/roundneck-white.jpg';\r\n    if (clean.includes('black')) return 'assets/roundneck-black.jpg';\r\n    if (clean.includes('navy') || clean.includes('blue')) return 'assets/roundneck-navy.jpg';\r\n    if (clean.includes('red')) return 'assets/roundneck-red.jpg';\r\n    return 'assets/roundneck-black.jpg';\r\n  }\r\n\r\n  if (fitLower.includes('oversize') || fitLower.includes('oversized')) {\r\n    const clean = (colorName || '').trim().toLowerCase();\r\n    if (clean.includes('white')) return 'assets/oversized-white.png';\r\n    if (clean.includes('black')) return 'assets/oversized-black.png';\r\n    if (clean.includes('red')) return 'assets/oversized-red.png';\r\n    if (clean.includes('navy') || clean.includes('blue')) return 'assets/oversized-navy.png';\r\n    return 'assets/oversized-white.png';\r\n  }\r\n\r\n  if (!colorName) return 'assets/polo-black.jpg';\r\n  if (tshirtColorImageMap[colorName]) return tshirtColorImageMap[colorName];\r\n\r\n  const clean = colorName.trim().toLowerCase();\r\n  for (const [key, val] of Object.entries(tshirtColorImageMap)) {\r\n    if (key.toLowerCase() === clean) return val;\r\n  }\r\n\r\n  if (clean.includes('navy') || clean.includes('blue')) return 'assets/polo-navy.jpg';\r\n  if (clean.includes('red')) return 'assets/polo-red.jpg';\r\n  if (clean.includes('white')) return 'assets/polo-white.jpg';\r\n  if (clean.includes('black')) return 'assets/polo-black.jpg';\r\n  if (clean.includes('grey') || clean.includes('gray')) return 'assets/polo-grey.jpg';\r\n\r\n  return 'assets/polo-black.jpg';\r\n}\r\n\r\n/* Color Thumbnails Slider Strip Handler (Polo, Oversized & Round Neck) */\r\nwindow.renderPoloColorThumbnails = function () {\r\n  const container = document.getElementById('tshirt-gallery-thumbs-container');\r\n  if (!container) return;\r\n\r\n  let currentFit = (tshirtState && tshirtState.fit) ? tshirtState.fit : '';\r\n  if (!currentFit) {\r\n    const activeSubBtn = document.querySelector('.tshirt-fit-sub-btn.active');\r\n    if (activeSubBtn) {\r\n      currentFit = activeSubBtn.textContent || '';\r\n    }\r\n  }\r\n  if (!currentFit) {\r\n    const path = (window.location.pathname || '').toLowerCase();\r\n    const pageTitle = (document.title || '').toLowerCase();\r\n    const shopTitle = (window.shopifyProductTitle || '').toLowerCase();\r\n    const shopHandle = (window.shopifyProductHandle || '').toLowerCase();\r\n    if (path.includes('oversiz') || pageTitle.includes('oversiz') || shopTitle.includes('oversiz') || shopHandle.includes('oversiz')) {\r\n      currentFit = 'oversized';\r\n    } else if (path.includes('round') || pageTitle.includes('round') || shopTitle.includes('round') || shopHandle.includes('round')) {\r\n      currentFit = 'round';\r\n    } else {\r\n      currentFit = 'polo';\r\n    }\r\n  }\r\n\r\n  const cleanFit = currentFit.toLowerCase();\r\n  let fitColors = [];\r\n  let fitLabelSuffix = 'T-Shirt';\r\n\r\n  if (cleanFit.includes('oversiz')) {\r\n    fitLabelSuffix = 'Oversized T-Shirt';\r\n    fitColors = [\r\n      { name: 'White', hex: '#ffffff', file: 'oversized-white.png' },\r\n      { name: 'Black', hex: '#0f172a', file: 'oversized-black.png' },\r\n      { name: 'Navy Blue', hex: '#1e3a8a', file: 'oversized-navy.png' },\r\n      { name: 'Red', hex: '#dc2626', file: 'oversized-red.png' }\r\n    ];\r\n  } else if (cleanFit.includes('round')) {\r\n    fitLabelSuffix = 'Round Neck T-Shirt';\r\n    fitColors = [\r\n      { name: 'White', hex: '#ffffff', file: 'roundneck-white.jpg' },\r\n      { name: 'Black', hex: '#0f172a', file: 'roundneck-black.jpg' },\r\n      { name: 'Navy Blue', hex: '#1e3a8a', file: 'roundneck-navy.jpg' },\r\n      { name: 'Red', hex: '#dc2626', file: 'roundneck-red.jpg' }\r\n    ];\r\n  } else {\r\n    fitLabelSuffix = 'Polo T-Shirt';\r\n    fitColors = [\r\n      { name: 'White', hex: '#ffffff', file: 'polo-white.jpg' },\r\n      { name: 'Black', hex: '#0f172a', file: 'polo-black.jpg' },\r\n      { name: 'Navy Blue', hex: '#1e3a8a', file: 'polo-navy.jpg' },\r\n      { name: 'Red', hex: '#dc2626', file: 'polo-red.jpg' },\r\n      { name: 'Grey', hex: '#6b7280', file: 'polo-grey.jpg' }\r\n    ];\r\n  }\r\n\r\n  const activeColor = (tshirtState && tshirtState.color) ? tshirtState.color : fitColors[0].name;\r\n\r\n  container.innerHTML = fitColors.map(c => {\r\n    let imgSrc = `assets/${c.file}`;\r\n    if (window.getShopifyAsset) {\r\n      imgSrc = window.getShopifyAsset(c.file) || window.getShopifyAsset(`assets/${c.file}`) || imgSrc;\r\n    }\r\n    const isCleanMatch = (c.name.toLowerCase() === activeColor.toLowerCase() || activeColor.toLowerCase().includes(c.name.toLowerCase()) || c.name.toLowerCase().includes(activeColor.toLowerCase()));\r\n    const activeClass = isCleanMatch ? 'active' : '';\r\n\r\n    return `\r\n      <button type=\"button\" \r\n              class=\"gallery-thumb-card color-thumb-item ${activeClass}\" \r\n              data-color-name=\"${c.name}\"\r\n              data-color-hex=\"${c.hex}\"\r\n              onclick=\"selectTshirtColorFromThumb('${c.name}', '${c.hex}', this)\"\r\n              title=\"${c.name} ${fitLabelSuffix}\">\r\n        <img src=\"${imgSrc}\" alt=\"${c.name} ${fitLabelSuffix}\">\r\n        <span style=\"position: absolute; bottom: 0; left: 0; right: 0; background: rgba(15, 23, 42, 0.75); color: #ffffff; font-size: 9px; font-weight: 800; text-align: center; padding: 2px 0; text-transform: uppercase; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; letter-spacing: 0.3px;\">${c.name}</span>\r\n      </button>\r\n    `;\r\n  }).join('');\r\n};\r\nwindow.renderTshirtColorThumbnails = window.renderPoloColorThumbnails;\r\n\r\nwindow.scrollTshirtThumbnails = function (direction) {\r\n  const container = document.getElementById('tshirt-gallery-thumbs-container');\r\n  if (!container) return;\r\n  const scrollAmount = 200;\r\n  container.scrollBy({ left: direction * scrollAmount, behavior: 'smooth' });\r\n};\r\n\r\nwindow.selectTshirtColorFromThumb = function (colorName, colorHex, thumbBtnElem) {\r\n  // 1. Find matching color swatch card in option tab\r\n  let targetSwatch = null;\r\n  const swatches = document.querySelectorAll('#custom-mode-view .color-swatch-card, .tshirt-color-grid .color-swatch-card');\r\n  swatches.forEach(swatch => {\r\n    const sColor = swatch.getAttribute('data-color') || '';\r\n    if (sColor.toLowerCase() === colorName.toLowerCase() || colorName.toLowerCase().includes(sColor.toLowerCase()) || sColor.toLowerCase().includes(colorName.toLowerCase())) {\r\n      targetSwatch = swatch;\r\n    }\r\n  });\r\n\r\n  // 2. Highlight active thumbnail in slider\r\n  document.querySelectorAll('#tshirt-gallery-thumbs-container .gallery-thumb-card').forEach(card => {\r\n    card.classList.remove('active');\r\n  });\r\n  if (thumbBtnElem) {\r\n    thumbBtnElem.classList.add('active');\r\n    thumbBtnElem.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'center' });\r\n  }\r\n\r\n  // 3. Trigger selectTshirtColor logic\r\n  if (typeof window.selectTshirtColor === 'function') {\r\n    window.selectTshirtColor(colorName, colorHex, targetSwatch);\r\n  }\r\n};\r\n\r\nwindow.selectTshirtColor = function (colorName, colorHex, elem) {\r\n  document.querySelectorAll('#custom-mode-view .color-swatch-card').forEach(b => b.classList.remove('active'));\r\n  if (elem) {\r\n    elem.classList.add('active');\r\n    try {\r\n      elem.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'center' });\r\n    } catch (e) { }\r\n  }\r\n\r\n  tshirtState.color = colorName;\r\n  tshirtState.colorHex = colorHex;\r\n\r\n  const labelElem = document.getElementById('selected-tshirt-color-label');\r\n  if (labelElem) labelElem.textContent = colorName.toUpperCase();\r\n\r\n  const svgPath = document.getElementById('tshirt-svg-body-path');\r\n  if (svgPath) {\r\n    svgPath.setAttribute('fill', colorHex);\r\n    svgPath.style.transition = 'fill 0.3s ease';\r\n  }\r\n\r\n  // Update both Lifestyle Photo AND Live Studio Canvas Photo Background\r\n  let rawColorImg = null;\r\n  if (elem && (elem.getAttribute('data-image') || elem.getAttribute('data-variant-image') || elem.getAttribute('data-src'))) {\r\n    rawColorImg = elem.getAttribute('data-image') || elem.getAttribute('data-variant-image') || elem.getAttribute('data-src');\r\n  } else {\r\n    rawColorImg = getTshirtColorImage(colorName);\r\n  }\r\n\r\n  if (rawColorImg) {\r\n    const colorImgSrc = (window.getShopifyAsset && !rawColorImg.startsWith('http') && !rawColorImg.startsWith('//')) ? window.getShopifyAsset(rawColorImg) : rawColorImg;\r\n\r\n    const mainImg = document.getElementById('tshirt-main-product-img') || document.getElementById('PrimaryImage-product-template') || document.getElementById('main-product-img');\r\n    if (mainImg) {\r\n      updateImageWithFade(mainImg, colorImgSrc);\r\n      const resultBox = document.getElementById('tshirt-zoom-result-box');\r\n      if (resultBox && tshirtState.viewMode !== 'canvas') {\r\n        resultBox.style.backgroundImage = `url('${colorImgSrc}')`;\r\n      }\r\n    }\r\n\r\n    const canvasBgImg = document.getElementById('tshirt-canvas-bg-img');\r\n    if (canvasBgImg) {\r\n      updateImageWithFade(canvasBgImg, colorImgSrc);\r\n    }\r\n    if (typeof window.markZoomMirrorDirty === 'function') {\r\n      window.markZoomMirrorDirty();\r\n    }\r\n  }\r\n\r\n  // Sync active state in Polo color thumbnail slider strip\r\n  const thumbCards = document.querySelectorAll('#tshirt-gallery-thumbs-container .color-thumb-item');\r\n  thumbCards.forEach(card => {\r\n    const cName = card.getAttribute('data-color-name') || '';\r\n    if (cName.toLowerCase() === colorName.toLowerCase() || colorName.toLowerCase().includes(cName.toLowerCase()) || cName.toLowerCase().includes(colorName.toLowerCase())) {\r\n      card.classList.add('active');\r\n      card.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'center' });\r\n    } else {\r\n      card.classList.remove('active');\r\n    }\r\n  });\r\n\r\n  // Automatically update box position & size based on selected t-shirt color\r\n  if (typeof window.updateBoxPositionForColor === 'function') {\r\n    window.updateBoxPositionForColor(colorName);\r\n  }\r\n\r\n  showToast(`Selected Color: ${colorName}`);\r\n};\r\n\r\n/* Front vs Back View Interactive Split Slider Handler */\r\nlet tshirtViewSliderVal = 50; // 0 = Front Only, 50 = Both, 100 = Back Only\r\n\r\nwindow.updateTshirtViewSlider = function (val) {\r\n  tshirtViewSliderVal = parseInt(val, 10);\r\n  const sliderElem = document.getElementById('tshirt-view-split-slider');\r\n  if (sliderElem) sliderElem.value = tshirtViewSliderVal;\r\n\r\n  const percentElem = document.getElementById('tshirt-view-slider-val-text');\r\n  const stageWrapper = document.getElementById('tshirt-canvas-stage-wrapper');\r\n  if (!stageWrapper) return;\r\n\r\n  if (tshirtViewSliderVal === 50) {\r\n    // Center (50%): Both Front & Back visible side-by-side\r\n    stageWrapper.style.transform = 'scale(1) translateX(0%)';\r\n    if (percentElem) percentElem.textContent = 'Both Views (50%)';\r\n  } else if (tshirtViewSliderVal < 50) {\r\n    // Moving Left (0% to 49%): Focus on Front View (Left side of photo)\r\n    let shiftX = ((50 - tshirtViewSliderVal) / 50) * 23;\r\n    let scaleZoom = 1.0 + ((50 - tshirtViewSliderVal) / 50) * 0.35;\r\n    stageWrapper.style.transform = `scale(${scaleZoom}) translateX(${shiftX}%)`;\r\n    if (percentElem) percentElem.textContent = `Front Focus (${Math.round((50 - tshirtViewSliderVal) * 2)}%)`;\r\n  } else {\r\n    // Moving Right (51% to 100%): Focus on Back View (Right side of photo)\r\n    let shiftX = ((tshirtViewSliderVal - 50) / 50) * -23;\r\n    let scaleZoom = 1.0 + ((tshirtViewSliderVal - 50) / 50) * 0.35;\r\n    stageWrapper.style.transform = `scale(${scaleZoom}) translateX(${shiftX}%)`;\r\n    if (percentElem) percentElem.textContent = `Back Focus (${Math.round((tshirtViewSliderVal - 50) * 2)}%)`;\r\n  }\r\n};\r\n\r\n/* Active Logo Editing Selector State (Logo 1 vs Logo 2) */\r\nlet activeEditLogo = 1; // 1 or 2\r\n\r\nwindow.setActiveEditLogo = function (num, btnElem, e) {\r\n  if (e && e.stopPropagation) {\r\n    e.stopPropagation();\r\n  }\r\n  activeEditLogo = num;\r\n\r\n  const tab1 = document.getElementById('btn-edit-logo-1');\r\n  const tab2 = document.getElementById('btn-edit-logo-2');\r\n  if (tab1 && tab2) {\r\n    tab1.classList.remove('active');\r\n    tab2.classList.remove('active');\r\n    if (num === 1) tab1.classList.add('active');\r\n    else if (num === 2) tab2.classList.add('active');\r\n  } else if (btnElem && btnElem.classList) {\r\n    btnElem.classList.add('active');\r\n  }\r\n\r\n  document.querySelectorAll('.tshirt-draggable-logo-container, .tshirt-draggable-text-container').forEach(c => c.classList.remove('is-selected'));\r\n  let targetElem = null;\r\n  if (num === 1) targetElem = document.getElementById('tshirt-draggable-logo-container');\r\n  else if (num === 2) targetElem = document.getElementById('tshirt-draggable-logo-container-2');\r\n  else if (num === 'text') targetElem = document.getElementById('tshirt-draggable-text-container');\r\n\r\n  if (targetElem) {\r\n    targetElem.classList.add('is-selected');\r\n  }\r\n\r\n  applyLogoTransformUI();\r\n  showToast(`Active Controls: Adjusting Logo ${num}`);\r\n};\r\n\r\n/* Dynamic Logo Count Button Label Updates */\r\nwindow.updateLogoCountButtonLabels = function () {\r\n  const btn1 = document.getElementById('btn-logo-count-1');\r\n  const btn2 = document.getElementById('btn-logo-count-2');\r\n  if (!btn1 && !btn2) return;\r\n\r\n  let frontText = 'Front 4\" X 4\"';\r\n  let backText = 'Back 10\" X 10\"';\r\n\r\n  if (tshirtState && tshirtState.fit === 'Oversized T-Shirts') {\r\n    frontText = 'Front 12\" X 12\"';\r\n    backText = 'Back 12\" X 12\"';\r\n  } else if (tshirtState && (tshirtState.fit === 'Rounded Neck' || tshirtState.fit === 'Round Neck')) {\r\n    const mode = tshirtState.roundNeckFrontMode || '4x4';\r\n    frontText = (mode === '4x4') ? 'Front 4\" X 4\"' : 'Front 10\" X 10\"';\r\n    backText = 'Back 10\" X 10\"';\r\n  } else {\r\n    // Polo / Regular T-Shirt\r\n    frontText = 'Front 4\" X 4\"';\r\n    backText = 'Back 10\" X 10\"';\r\n  }\r\n\r\n  if (btn1) {\r\n    btn1.innerHTML = `<i class=\"fa-solid fa-image\"></i> Image (${frontText})`;\r\n  }\r\n  if (btn2) {\r\n    btn2.innerHTML = `<i class=\"fa-solid fa-images\"></i> Images (${backText})`;\r\n  }\r\n};\r\n\r\n/* Number of Logos Selector (1 Logo vs 2 Logos) */\r\nwindow.setTshirtLogoCount = function (count, elem) {\r\n  if (count === 2 && !tshirtState.hasBackPrint) {\r\n    showToast(\"\uD83D\uDD12 Please turn ON 'Add Back Print (+\u20B9100/pc)' switch above first to enable Back Print uploads!\");\r\n    const toggleCheckbox = document.getElementById('tshirt-back-print-toggle');\r\n    if (toggleCheckbox) {\r\n      toggleCheckbox.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n      const parent = toggleCheckbox.closest('.elementa-toggle-switch') || toggleCheckbox.parentElement;\r\n      if (parent) {\r\n        parent.style.transition = 'all 0.3s ease';\r\n        parent.style.boxShadow = '0 0 0 4px rgba(225, 29, 72, 0.4)';\r\n        setTimeout(() => { parent.style.boxShadow = ''; }, 2000);\r\n      }\r\n    }\r\n    return;\r\n  }\r\n\r\n  tshirtState.logoCount = count;\r\n  document.querySelectorAll('#btn-logo-count-1, #btn-logo-count-2').forEach(b => b.classList.remove('active'));\r\n  if (elem) {\r\n    elem.classList.add('active');\r\n  } else {\r\n    const targetBtn = document.getElementById(count === 2 ? 'btn-logo-count-2' : 'btn-logo-count-1');\r\n    if (targetBtn) targetBtn.classList.add('active');\r\n  }\r\n\r\n  const editTabContainer = document.getElementById('active-logo-edit-tab-container');\r\n  const container2 = document.getElementById('tshirt-draggable-logo-container-2');\r\n  const roundNeckBoxSelector = document.getElementById('roundneck-front-box-selector');\r\n\r\n  if (count === 2) {\r\n    if (editTabContainer) editTabContainer.style.display = 'block';\r\n    if (container2) {\r\n      container2.style.display = 'flex';\r\n      const logoImg2 = document.getElementById('tshirt-canvas-logo-img-2');\r\n      if (logoImg2 && tshirtState.artworkDataUrl2) {\r\n        logoImg2.src = tshirtState.artworkDataUrl2;\r\n        logoImg2.style.display = 'block';\r\n      } else if (logoImg2 && tshirtState.artworkDataUrl) {\r\n        logoImg2.src = tshirtState.artworkDataUrl;\r\n        logoImg2.style.display = 'block';\r\n      }\r\n    }\r\n    if (roundNeckBoxSelector) roundNeckBoxSelector.style.display = 'none';\r\n    applyLogoTransformUI();\r\n    showToast('Images (Back Logo) Selected: Upload Image 1 & Image 2');\r\n  } else if (count === 1) {\r\n    if (editTabContainer) editTabContainer.style.display = 'none';\r\n    if (container2) container2.style.display = 'none';\r\n    if (roundNeckBoxSelector && (tshirtState.fit === 'Rounded Neck' || tshirtState.fit === 'Round Neck')) {\r\n      roundNeckBoxSelector.style.display = 'block';\r\n    }\r\n    activeEditLogo = 1;\r\n    applyLogoTransformUI();\r\n    showToast('Image (Front Logo) Selected: Upload Image 1');\r\n  }\r\n\r\n  if (typeof window.updateLogoUploadStepUI === 'function') {\r\n    window.updateLogoUploadStepUI();\r\n  }\r\n};\r\n\r\nwindow.updateLogoUploadStepUI = function () {\r\n  const btn1 = document.getElementById('btn-logo-count-1');\r\n  const btn2 = document.getElementById('btn-logo-count-2');\r\n  const dropzone1 = document.getElementById('tshirt-dropzone-1');\r\n  const dropzone2 = document.getElementById('tshirt-dropzone-2');\r\n  const roundNeckBoxSelector = document.getElementById('roundneck-front-box-selector');\r\n\r\n  if (btn1) btn1.style.display = 'inline-flex';\r\n  if (btn2) {\r\n    btn2.style.display = 'inline-flex';\r\n    if (!tshirtState.hasBackPrint) {\r\n      btn2.style.opacity = '0.7';\r\n      btn2.title = \"Turn ON 'Add Back Print (+\u20B9100/pc)' switch above to enable\";\r\n      btn2.innerHTML = `<i class=\"fa-solid fa-lock\" style=\"margin-right: 4px; color: #be123c;\"></i> Images (Back 10\" X 10\")`;\r\n    } else {\r\n      btn2.style.opacity = '1';\r\n      btn2.title = \"\";\r\n      btn2.innerHTML = `<i class=\"fa-solid fa-images\"></i> Images (Back 10\" X 10\")`;\r\n    }\r\n  }\r\n\r\n  const count = (tshirtState && typeof tshirtState.logoCount === 'number') ? tshirtState.logoCount : 0;\r\n  const isRoundNeck = !!(tshirtState && tshirtState.fit && tshirtState.fit.toLowerCase().includes('round'));\r\n\r\n  if (count === 1) {\r\n    if (btn1) btn1.classList.add('active');\r\n    if (btn2) btn2.classList.remove('active');\r\n    if (dropzone1) dropzone1.style.display = 'block';\r\n    if (dropzone2) dropzone2.style.display = 'none';\r\n    if (roundNeckBoxSelector) roundNeckBoxSelector.style.display = isRoundNeck ? 'block' : 'none';\r\n  } else if (count === 2 && tshirtState.hasBackPrint) {\r\n    if (btn1) btn1.classList.remove('active');\r\n    if (btn2) btn2.classList.add('active');\r\n    if (dropzone1) dropzone1.style.display = 'none';\r\n    if (dropzone2) dropzone2.style.display = 'block';\r\n    if (roundNeckBoxSelector) roundNeckBoxSelector.style.display = 'none';\r\n  } else {\r\n    // count === 0 or count === 2 without back print enabled\r\n    if (btn1) btn1.classList.remove('active');\r\n    if (btn2) btn2.classList.remove('active');\r\n    if (dropzone1) dropzone1.style.display = 'none';\r\n    if (dropzone2) dropzone2.style.display = 'none';\r\n    if (roundNeckBoxSelector) roundNeckBoxSelector.style.display = 'none';\r\n  }\r\n};\r\n\r\n/* Per-Color Print Box Positions & Box Size Configurations */\r\nlet tshirtColorBoxConfig = {\r\n  'Black': { xPercent: 37.7, yPercent: 43.5, boxSizePx: 40 },\r\n  'White': { xPercent: 34.9, yPercent: 38.6, boxSizePx: 41 },\r\n  'Navy Blue': { xPercent: 35.1, yPercent: 36.9, boxSizePx: 40 },\r\n  'Light Blue': { xPercent: 35.5, yPercent: 34.7, boxSizePx: 40 },\r\n  'Red': { xPercent: 35, yPercent: 37.3, boxSizePx: 40 },\r\n  'Maroon': { xPercent: 35.6, yPercent: 34.9, boxSizePx: 57 },\r\n  'Yellow': { xPercent: 35.8, yPercent: 33.5, boxSizePx: 60 },\r\n  'Green': { xPercent: 35.7, yPercent: 35.5, boxSizePx: 56 },\r\n  'Dark Green': { xPercent: 36.7, yPercent: 38.3, boxSizePx: 52 },\r\n  'Lime': { xPercent: 35.7, yPercent: 34.7, boxSizePx: 59 },\r\n  'Orange': { xPercent: 35.4, yPercent: 34.6, boxSizePx: 59 },\r\n  'Camel': { xPercent: 35.2, yPercent: 35, boxSizePx: 52 },\r\n  'Pink': { xPercent: 36.7, yPercent: 36.6, boxSizePx: 57 },\r\n  'Grey': { xPercent: 35.9, yPercent: 39.9, boxSizePx: 40 }\r\n};\r\n\r\n/* Per-Color Print Box Configurations for BACK Logo (12\" x 12\" / 10\" x 10\") */\r\nlet tshirtColorBoxConfigBack = {\r\n  'Black': { xPercent: 70, yPercent: 43.2, boxSizePx: 75 },\r\n  'White': { xPercent: 72, yPercent: 40.5, boxSizePx: 93 },\r\n  'Navy Blue': { xPercent: 71, yPercent: 39, boxSizePx: 85 },\r\n  'Light Blue': { xPercent: 71.5, yPercent: 36, boxSizePx: 115 },\r\n  'Red': { xPercent: 71.5, yPercent: 38, boxSizePx: 90 },\r\n  'Maroon': { xPercent: 71, yPercent: 36, boxSizePx: 109 },\r\n  'Yellow': { xPercent: 71.8, yPercent: 35, boxSizePx: 120 },\r\n  'Green': { xPercent: 71, yPercent: 37, boxSizePx: 110 },\r\n  'Dark Green': { xPercent: 70.5, yPercent: 38.2, boxSizePx: 100 },\r\n  'Lime': { xPercent: 72.5, yPercent: 36.7, boxSizePx: 120 },\r\n  'Orange': { xPercent: 71.5, yPercent: 35.5, boxSizePx: 115 },\r\n  'Camel': { xPercent: 70.5, yPercent: 36.2, boxSizePx: 110 },\r\n  'Pink': { xPercent: 72.9, yPercent: 38.3, boxSizePx: 115 },\r\n  'Grey': { xPercent: 71, yPercent: 40, boxSizePx: 80 }\r\n};\r\n\r\n/* Per-Color Print Box Configurations for OVERSIZED T-Shirt FRONT View */\r\nlet oversizedColorBoxConfigFront = {\r\n  'White': { xPercent: 29.35, yPercent: 47.66, boxWidthPx: 105, boxHeightPx: 130 },\r\n  'Black': { xPercent: 29.45, yPercent: 47.66, boxWidthPx: 105, boxHeightPx: 132 },\r\n  'Red': { xPercent: 29, yPercent: 47.66, boxWidthPx: 110, boxHeightPx: 132 },\r\n  'Navy Blue': { xPercent: 29, yPercent: 46.66, boxWidthPx: 110, boxHeightPx: 132 }\r\n};\r\n\r\n/* Per-Color Print Box Configurations for OVERSIZED T-Shirt BACK View */\r\nlet oversizedColorBoxConfigBack = {\r\n  'White': { xPercent: 71.48, yPercent: 47.66, boxWidthPx: 105, boxHeightPx: 130 },\r\n  'Black': { xPercent: 71, yPercent: 47.66, boxWidthPx: 105, boxHeightPx: 132 },\r\n  'Red': { xPercent: 71.5, yPercent: 47.56, boxWidthPx: 110, boxHeightPx: 135 },\r\n  'Navy Blue': { xPercent: 71.8, yPercent: 46.56, boxWidthPx: 105, boxHeightPx: 130 }\r\n};\r\n\r\n/* Per-Color Print Box Configurations for ROUND NECK T-Shirt FRONT View (4\" x 4\") */\r\nlet roundNeckColorBoxConfigFront4x4 = {\r\n  'Black': { xPercent: 36.3, yPercent: 35, boxWidthPx: 43, boxHeightPx: 43 },\r\n  'White': { xPercent: 36.6, yPercent: 36, boxWidthPx: 43, boxHeightPx: 43 },\r\n  'Navy Blue': { xPercent: 36.3, yPercent: 36, boxWidthPx: 43, boxHeightPx: 42 },\r\n  'Grey': { xPercent: 36.2, yPercent: 31, boxWidthPx: 51, boxHeightPx: 51 },\r\n  'Red': { xPercent: 36.3, yPercent: 35.5, boxWidthPx: 41, boxHeightPx: 42 }\r\n};\r\n\r\n/* Per-Color Print Box Configurations for ROUND NECK T-Shirt FRONT View (10\" x 10\") */\r\nlet roundNeckColorBoxConfigFront10x10 = {\r\n  'Black': { xPercent: 26, yPercent: 49.85, boxWidthPx: 111, boxHeightPx: 114 },\r\n  'White': { xPercent: 26.25, yPercent: 51, boxWidthPx: 111, boxHeightPx: 112 },\r\n  'Navy Blue': { xPercent: 25.8, yPercent: 50.5, boxWidthPx: 111, boxHeightPx: 112 },\r\n  'Grey': { xPercent: 25.8, yPercent: 50.0, boxWidthPx: 149, boxHeightPx: 145 },\r\n  'Red': { xPercent: 25.8, yPercent: 50.0, boxWidthPx: 111, boxHeightPx: 112 }\r\n};\r\nlet roundNeckColorBoxConfigFront12x12 = roundNeckColorBoxConfigFront10x10;\r\n\r\n/* Per-Color Print Box Configurations for ROUND NECK T-Shirt BACK View */\r\nlet roundNeckColorBoxConfigBack = {\r\n  'Black': { xPercent: 72.75, yPercent: 45, boxWidthPx: 122, boxHeightPx: 123.5 },\r\n  'White': { xPercent: 73.7, yPercent: 45.8, boxWidthPx: 122, boxHeightPx: 127 },\r\n  'Navy Blue': { xPercent: 72.5, yPercent: 45, boxWidthPx: 122, boxHeightPx: 122 },\r\n  'Grey': { xPercent: 72.35, yPercent: 43.5, boxWidthPx: 161, boxHeightPx: 165 },\r\n  'Red': { xPercent: 72.50, yPercent: 45, boxWidthPx: 122, boxHeightPx: 122 }\r\n};\r\n\r\nfunction getColorBoxConfig(map, colorName) {\r\n  if (!map || !colorName) return null;\r\n  if (map[colorName]) return map[colorName];\r\n  const clean = String(colorName).trim().toLowerCase();\r\n  for (const [key, val] of Object.entries(map)) {\r\n    const k = String(key).trim().toLowerCase();\r\n    if (k === clean || k.replace(/\\s+/g, '') === clean.replace(/\\s+/g, '') || clean.includes(k) || k.includes(clean)) {\r\n      return val;\r\n    }\r\n  }\r\n  return null;\r\n}\r\n\r\nwindow.setRoundNeckFrontBoxMode = function (mode, btnElem) {\r\n  const cleanMode = (mode === '10x10' || mode === '12x12') ? '10x10' : '4x4';\r\n  tshirtState.roundNeckFrontMode = cleanMode;\r\n\r\n  document.querySelectorAll('#btn-rn-box-4x4, #btn-rn-box-12x12').forEach(b => b.classList.remove('active'));\r\n  if (btnElem) {\r\n    btnElem.classList.add('active');\r\n  } else {\r\n    const targetBtn = document.getElementById(cleanMode === '4x4' ? 'btn-rn-box-4x4' : 'btn-rn-box-12x12');\r\n    if (targetBtn) targetBtn.classList.add('active');\r\n  }\r\n\r\n  const frontBadge = document.getElementById('tshirt-front-print-badge');\r\n  if (frontBadge) {\r\n    frontBadge.innerHTML = `<i class=\"fa-solid fa-ruler-combined\"></i> ${cleanMode === '4x4' ? '4\" \u00D7 4\"' : '10\" \u00D7 10\"'} Front Print Area`;\r\n  }\r\n\r\n  if (typeof window.updateBoxPositionForColor === 'function') {\r\n    window.updateBoxPositionForColor(tshirtState.color || 'Black');\r\n  }\r\n  if (typeof applyLogoTransformUI === 'function') {\r\n    applyLogoTransformUI();\r\n  }\r\n\r\n  showToast(`Front Print Size: ${cleanMode === '4x4' ? '4\" \u00D7 4\" Left Chest' : '10\" \u00D7 10\" Center Front'}`);\r\n};\r\n\r\nwindow.updateBoxPositionForColor = function (colorName) {\r\n  if (!colorName) return;\r\n\r\n  const currentFit = (typeof tshirtState !== 'undefined' && tshirtState.fit) ? tshirtState.fit : 'Polo T Shirts';\r\n\r\n  if (currentFit === 'Oversized T-Shirts') {\r\n    // 1. Oversized FRONT Logo Box (Rectangular: 144px x 175px)\r\n    let configFront = getColorBoxConfig(oversizedColorBoxConfigFront, colorName) || { xPercent: 29.35, yPercent: 47, boxWidthPx: 144, boxHeightPx: 175 };\r\n\r\n    tshirtLogoPosition.xPercent = configFront.xPercent;\r\n    tshirtLogoPosition.yPercent = configFront.yPercent;\r\n    tshirtLogoPosition.boxWidthPx = configFront.boxWidthPx || 144;\r\n    tshirtLogoPosition.boxHeightPx = configFront.boxHeightPx || 175;\r\n    tshirtLogoPosition.boxSizePx = configFront.boxWidthPx || 144;\r\n\r\n    // 2. Oversized BACK Logo Box (Rectangular: 140px x 173px)\r\n    let configBack = getColorBoxConfig(oversizedColorBoxConfigBack, colorName) || { xPercent: 71.48, yPercent: 47, boxWidthPx: 140, boxHeightPx: 173 };\r\n\r\n    tshirtLogoPosition2.xPercent = configBack.xPercent;\r\n    tshirtLogoPosition2.yPercent = configBack.yPercent;\r\n    tshirtLogoPosition2.boxWidthPx = configBack.boxWidthPx || 140;\r\n    tshirtLogoPosition2.boxHeightPx = configBack.boxHeightPx || 173;\r\n    tshirtLogoPosition2.boxSizePx = configBack.boxWidthPx || 140;\r\n  } else if (currentFit === 'Rounded Neck' || currentFit === 'Round Neck') {\r\n    const mode = (tshirtState && tshirtState.roundNeckFrontMode) || '4x4';\r\n    const configMap = (mode === '12x12' || mode === '10x10')\r\n      ? (roundNeckColorBoxConfigFront10x10 || roundNeckColorBoxConfigFront12x12)\r\n      : roundNeckColorBoxConfigFront4x4;\r\n\r\n    let configFront = getColorBoxConfig(configMap, colorName);\r\n    if (!configFront) {\r\n      configFront = (mode === '12x12' || mode === '10x10')\r\n        ? { xPercent: 26, yPercent: 49.85, boxWidthPx: 151, boxHeightPx: 147.5 }\r\n        : { xPercent: 36.3, yPercent: 30.5, boxWidthPx: 51, boxHeightPx: 51 };\r\n    }\r\n\r\n    tshirtLogoPosition.xPercent = configFront.xPercent;\r\n    tshirtLogoPosition.yPercent = configFront.yPercent;\r\n    tshirtLogoPosition.boxWidthPx = configFront.boxWidthPx || 51;\r\n    tshirtLogoPosition.boxHeightPx = configFront.boxHeightPx || 51;\r\n    tshirtLogoPosition.boxSizePx = configFront.boxWidthPx || 51;\r\n\r\n    let configBack = getColorBoxConfig(roundNeckColorBoxConfigBack, colorName) || { xPercent: 72.75, yPercent: 43, boxWidthPx: 162, boxHeightPx: 163.5 };\r\n\r\n    tshirtLogoPosition2.xPercent = configBack.xPercent;\r\n    tshirtLogoPosition2.yPercent = configBack.yPercent;\r\n    tshirtLogoPosition2.boxWidthPx = configBack.boxWidthPx || 162;\r\n    tshirtLogoPosition2.boxHeightPx = configBack.boxHeightPx || 163.5;\r\n    tshirtLogoPosition2.boxSizePx = configBack.boxWidthPx || 162;\r\n  } else {\r\n    // Standard Polo / Regular T-Shirt Configurations\r\n    let config = getColorBoxConfig(tshirtColorBoxConfig, colorName) || { xPercent: 37.7, yPercent: 41.3, boxSizePx: 49 };\r\n\r\n    tshirtLogoPosition.xPercent = config.xPercent;\r\n    tshirtLogoPosition.yPercent = config.yPercent;\r\n    tshirtLogoPosition.boxSizePx = config.boxSizePx || 49;\r\n    tshirtLogoPosition.boxWidthPx = config.boxWidthPx || config.boxSizePx || 49;\r\n    tshirtLogoPosition.boxHeightPx = config.boxHeightPx || config.boxSizePx || 49;\r\n\r\n    let configBack = getColorBoxConfig(tshirtColorBoxConfigBack, colorName) || { xPercent: 70, yPercent: 41.5, boxSizePx: 100 };\r\n\r\n    tshirtLogoPosition2.xPercent = configBack.xPercent;\r\n    tshirtLogoPosition2.yPercent = configBack.yPercent;\r\n    tshirtLogoPosition2.boxSizePx = configBack.boxSizePx || 100;\r\n    tshirtLogoPosition2.boxWidthPx = configBack.boxWidthPx || configBack.boxSizePx || 100;\r\n    tshirtLogoPosition2.boxHeightPx = configBack.boxHeightPx || configBack.boxSizePx || 100;\r\n  }\r\n\r\n  tshirtLogoOffset1.xPx = 0;\r\n  tshirtLogoOffset1.yPx = 0;\r\n  tshirtLogoOffset2.xPx = 0;\r\n  tshirtLogoOffset2.yPx = 0;\r\n\r\n  if (typeof applyLogoTransformUI === 'function') {\r\n    applyLogoTransformUI();\r\n  }\r\n};\r\n\r\n/* Draggable Logo Containers & Position State */\r\nlet tshirtLogoPosition = {\r\n  xPercent: 37.7, // Fixed position X (37.7%)\r\n  yPercent: 41.3, // Fixed position Y (41.3%)\r\n  boxSizePx: 49,  // Exact 49px x 49px Print Box size\r\n  boxWidthPx: 49,\r\n  boxHeightPx: 49,\r\n  scale: 80       // default 80% on UI slider\r\n};\r\n\r\nlet tshirtLogoPosition2 = {\r\n  xPercent: 72, // default 72% (Back View)\r\n  yPercent: 38, // default 38%\r\n  boxSizePx: 85, // default 85px Back Box size\r\n  boxWidthPx: 85,\r\n  boxHeightPx: 85,\r\n  scale: 80    // default 80% on UI slider\r\n};\r\n\r\nlet tshirtLogoOffset1 = { xPx: 0, yPx: 0 };\r\nlet tshirtLogoOffset2 = { xPx: 0, yPx: 0 };\r\n\r\nwindow.setLogoPositionPreset = function (presetKey, btnElem) {\r\n  if (btnElem) {\r\n    document.querySelectorAll('#custom-mode-view .qty-chip-btn[id^=\"pos-preset-\"]').forEach(b => b.classList.remove('active'));\r\n    btnElem.classList.add('active');\r\n  }\r\n\r\n  if (activeEditLogo !== 2) {\r\n    if (presetKey === 'left-chest') {\r\n      tshirtLogoPosition.xPercent = 37.7;\r\n      tshirtLogoPosition.yPercent = 41.3;\r\n      tshirtLogoPosition.scale = 70;\r\n    } else if (presetKey === 'center') {\r\n      tshirtLogoPosition.xPercent = 50;\r\n      tshirtLogoPosition.yPercent = 45;\r\n      tshirtLogoPosition.scale = 100;\r\n    } else if (presetKey === 'right-chest') {\r\n      tshirtLogoPosition.xPercent = 65;\r\n      tshirtLogoPosition.yPercent = 41.3;\r\n      tshirtLogoPosition.scale = 70;\r\n    }\r\n  } else {\r\n    if (presetKey === 'center') {\r\n      tshirtLogoPosition2.xPercent = 72;\r\n      tshirtLogoPosition2.yPercent = 38;\r\n      tshirtLogoPosition2.scale = 100;\r\n    } else if (presetKey === 'upper-back') {\r\n      tshirtLogoPosition2.xPercent = 72;\r\n      tshirtLogoPosition2.yPercent = 28;\r\n      tshirtLogoPosition2.scale = 80;\r\n    } else if (presetKey === 'lower-back') {\r\n      tshirtLogoPosition2.xPercent = 72;\r\n      tshirtLogoPosition2.yPercent = 60;\r\n      tshirtLogoPosition2.scale = 80;\r\n    }\r\n  }\r\n\r\n  applyLogoTransformUI();\r\n};\r\n\r\nwindow.updateTshirtArtworkScale = function (val) {\r\n  let scale = parseInt(val, 10) || 80;\r\n  if (scale > 100) scale = 100;\r\n  if (scale < 20) scale = 20;\r\n  if (activeEditLogo === 2) {\r\n    tshirtLogoPosition2.scale = scale;\r\n  } else {\r\n    tshirtLogoPosition.scale = scale;\r\n  }\r\n  if (typeof window.markZoomMirrorDirty === 'function') {\r\n    window.markZoomMirrorDirty();\r\n  }\r\n  applyLogoTransformUI();\r\n};\r\n\r\nwindow.initTshirtMouseWheelLogoZoom = function () {\r\n  const stage = document.getElementById('tshirt-canvas-stage');\r\n  const logo1 = document.getElementById('tshirt-canvas-logo-img');\r\n  const logo2 = document.getElementById('tshirt-canvas-logo-img-2');\r\n  const printBox1 = document.getElementById('tshirt-print-box-4x4');\r\n  const printBox2 = document.getElementById('tshirt-print-box-12x12');\r\n  const container1 = document.getElementById('tshirt-draggable-logo-container');\r\n  const container2 = document.getElementById('tshirt-draggable-logo-container-2');\r\n\r\n  const elementsToBind = [stage, logo1, logo2, printBox1, printBox2, container1, container2].filter(Boolean);\r\n\r\n  elementsToBind.forEach(elem => {\r\n    if (elem.dataset.wheelZoomInitialized === 'true') return;\r\n    elem.dataset.wheelZoomInitialized = 'true';\r\n\r\n    elem.addEventListener('wheel', function (e) {\r\n      const hasLogo1 = tshirtState && tshirtState.artworkDataUrl && tshirtState.artworkDataUrl.length > 0;\r\n      const hasLogo2 = tshirtState && tshirtState.artworkDataUrl2 && tshirtState.artworkDataUrl2.length > 0;\r\n      if (!hasLogo1 && !hasLogo2) return;\r\n\r\n      // Prevent page scrolling while using mouse wheel over logo or canvas\r\n      e.preventDefault();\r\n      e.stopPropagation();\r\n\r\n      // Determine target logo (Logo 1 or Logo 2)\r\n      let targetLogo = activeEditLogo || 1;\r\n      if (elem.id === 'tshirt-canvas-logo-img-2' || elem.id === 'tshirt-draggable-logo-container-2' || elem.id === 'tshirt-print-box-12x12') {\r\n        if (hasLogo2) {\r\n          targetLogo = 2;\r\n          if (typeof setActiveEditLogo === 'function') {\r\n            const btn2 = document.getElementById('btn-edit-logo-2');\r\n            if (btn2) setActiveEditLogo(2, btn2);\r\n          }\r\n        }\r\n      } else if (elem.id === 'tshirt-canvas-logo-img' || elem.id === 'tshirt-draggable-logo-container') {\r\n        if (hasLogo1) {\r\n          targetLogo = 1;\r\n          if (typeof setActiveEditLogo === 'function') {\r\n            const btn1 = document.getElementById('btn-edit-logo-1');\r\n            if (btn1) setActiveEditLogo(1, btn1);\r\n          }\r\n        }\r\n      }\r\n\r\n      const posObj = (targetLogo === 2) ? tshirtLogoPosition2 : tshirtLogoPosition;\r\n      const currentScale = (posObj && posObj.scale) ? posObj.scale : 80;\r\n\r\n      // Mouse wheel UP (deltaY < 0): Increase logo size\r\n      // Mouse wheel DOWN (deltaY > 0): Decrease logo size\r\n      const step = 4;\r\n      let newScale = currentScale;\r\n\r\n      if (e.deltaY < 0) {\r\n        newScale = Math.min(100, currentScale + step);\r\n      } else if (e.deltaY > 0) {\r\n        newScale = Math.max(20, currentScale - step);\r\n      }\r\n\r\n      if (newScale !== currentScale) {\r\n        activeEditLogo = targetLogo;\r\n        window.updateTshirtArtworkScale(newScale);\r\n      }\r\n    }, { passive: false });\r\n  });\r\n};\r\n\r\nwindow.updateLogoPosX = function (val) {\r\n  const pos = parseInt(val, 10) || 50;\r\n  if (typeof activeEditLogo !== 'undefined' && activeEditLogo === 2) {\r\n    if (typeof tshirtLogoPosition2 !== 'undefined') tshirtLogoPosition2.xPercent = pos;\r\n  } else {\r\n    if (typeof tshirtLogoPosition !== 'undefined') tshirtLogoPosition.xPercent = pos;\r\n  }\r\n  if (typeof window.markZoomMirrorDirty === 'function') {\r\n    window.markZoomMirrorDirty();\r\n  }\r\n  if (typeof applyLogoTransformUI === 'function') {\r\n    applyLogoTransformUI();\r\n  }\r\n};\r\n\r\nwindow.updateLogoPosY = function (val) {\r\n  const pos = parseInt(val, 10) || 50;\r\n  if (typeof activeEditLogo !== 'undefined' && activeEditLogo === 2) {\r\n    if (typeof tshirtLogoPosition2 !== 'undefined') tshirtLogoPosition2.yPercent = pos;\r\n  } else {\r\n    if (typeof tshirtLogoPosition !== 'undefined') tshirtLogoPosition.yPercent = pos;\r\n  }\r\n  if (typeof window.markZoomMirrorDirty === 'function') {\r\n    window.markZoomMirrorDirty();\r\n  }\r\n  if (typeof applyLogoTransformUI === 'function') {\r\n    applyLogoTransformUI();\r\n  }\r\n};\r\n\r\nfunction selectQtyChip(elem) {\r\n  if (!elem) return;\r\n  document.querySelectorAll('#custom-mode-view .qty-chip-btn').forEach(btn => btn.classList.remove('active'));\r\n  elem.classList.add('active');\r\n  showToast(`Qty Selected: ${elem.textContent.trim()}`);\r\n}\r\n\r\nfunction selectFinishOption(finishKey, targetElem) {\r\n  document.querySelectorAll('#custom-mode-view .finish-option-card').forEach(c => {\r\n    c.classList.remove('is-selected');\r\n  });\r\n  if (targetElem) {\r\n    targetElem.classList.add('is-selected');\r\n  }\r\n}\r\n\r\nfunction selectDraggableItem(targetElem) {\r\n  document.querySelectorAll('#tshirt-draggable-logo-container, #tshirt-draggable-logo-container-2, #tshirt-draggable-text-container').forEach(el => {\r\n    el.classList.remove('is-selected');\r\n  });\r\n  if (targetElem) {\r\n    targetElem.classList.add('is-selected');\r\n  }\r\n}\r\n\r\nfunction applyLogoTransformUI() {\r\n  const currentFit = (typeof tshirtState !== 'undefined' && tshirtState.fit) ? tshirtState.fit : 'Polo T Shirts';\r\n\r\n  const badgeElem = document.getElementById('tshirt-front-print-badge');\r\n  const badgeBackElem = document.getElementById('tshirt-back-print-badge');\r\n\r\n  if (currentFit === 'Oversized T-Shirts') {\r\n    if (badgeElem) badgeElem.innerHTML = '<i class=\"fa-solid fa-ruler-combined\"></i> 12\" \u00D7 12\" Front Print Area';\r\n    if (badgeBackElem) badgeBackElem.innerHTML = '<i class=\"fa-solid fa-ruler-combined\"></i> 12\" \u00D7 12\" Back Print Area';\r\n    if (!tshirtLogoPosition.boxWidthPx) tshirtLogoPosition.boxWidthPx = 144;\r\n    if (!tshirtLogoPosition.boxHeightPx) tshirtLogoPosition.boxHeightPx = 175;\r\n    if (!tshirtLogoPosition2.boxWidthPx) tshirtLogoPosition2.boxWidthPx = 140;\r\n    if (!tshirtLogoPosition2.boxHeightPx) tshirtLogoPosition2.boxHeightPx = 173;\r\n  } else if (currentFit === 'Rounded Neck' || currentFit === 'Round Neck') {\r\n    const mode = (tshirtState && tshirtState.roundNeckFrontMode) || '4x4';\r\n    if (badgeElem) {\r\n      badgeElem.innerHTML = `<i class=\"fa-solid fa-ruler-combined\"></i> ${mode === '10x10' || mode === '12x12' ? '10\" \u00D7 10\"' : '10\" \u00D7 10\"'} Front Print Area`;\r\n    }\r\n    if (badgeBackElem) {\r\n      badgeBackElem.innerHTML = '<i class=\"fa-solid fa-ruler-combined\"></i> 10\" \u00D7 10\" Back Print Area';\r\n    }\r\n    if (!tshirtLogoPosition.boxWidthPx) tshirtLogoPosition.boxWidthPx = 72;\r\n    if (!tshirtLogoPosition.boxHeightPx) tshirtLogoPosition.boxHeightPx = 72;\r\n    if (!tshirtLogoPosition2.boxWidthPx) tshirtLogoPosition2.boxWidthPx = 210;\r\n    if (!tshirtLogoPosition2.boxHeightPx) tshirtLogoPosition2.boxHeightPx = 210;\r\n  } else {\r\n    if (badgeElem) badgeElem.innerHTML = '<i class=\"fa-solid fa-ruler-combined\"></i> 4\" \u00D7 4\" Front Print Area';\r\n    if (badgeBackElem) badgeBackElem.innerHTML = '<i class=\"fa-solid fa-ruler-combined\"></i> 10\" \u00D7 10\" Back Print Area';\r\n    if (!tshirtLogoPosition.boxWidthPx) tshirtLogoPosition.boxWidthPx = 49;\r\n    if (!tshirtLogoPosition.boxHeightPx) tshirtLogoPosition.boxHeightPx = 49;\r\n    if (!tshirtLogoPosition2.boxWidthPx) tshirtLogoPosition2.boxWidthPx = 85;\r\n    if (!tshirtLogoPosition2.boxHeightPx) tshirtLogoPosition2.boxHeightPx = 85;\r\n  }\r\n\r\n  const container = document.getElementById('tshirt-draggable-logo-container');\r\n  if (container) {\r\n    container.style.left = `${tshirtLogoPosition.xPercent}%`;\r\n    container.style.top = `${tshirtLogoPosition.yPercent}%`;\r\n  }\r\n\r\n  const container2 = document.getElementById('tshirt-draggable-logo-container-2');\r\n  if (container2) {\r\n    container2.style.left = `${tshirtLogoPosition2.xPercent}%`;\r\n    container2.style.top = `${tshirtLogoPosition2.yPercent}%`;\r\n  }\r\n\r\n  const containerText = document.getElementById('tshirt-draggable-text-container');\r\n  if (containerText) {\r\n    containerText.style.left = `${tshirtTextPosition.xPercent}%`;\r\n    containerText.style.top = `${tshirtTextPosition.yPercent}%`;\r\n  }\r\n\r\n  const stage = document.getElementById('tshirt-canvas-stage-wrapper') || document.getElementById('tshirt-photo-canvas-container');\r\n  const stageWidth = (stage && stage.offsetWidth > 50) ? stage.offsetWidth : 540;\r\n  const stageScale = stageWidth / 540;\r\n\r\n  const baseW1 = tshirtLogoPosition.boxWidthPx || tshirtLogoPosition.boxSizePx || 49;\r\n  const baseH1 = tshirtLogoPosition.boxHeightPx || tshirtLogoPosition.boxSizePx || 49;\r\n  const boxW1 = Math.max(20, Math.round(baseW1 * stageScale));\r\n  const boxH1 = Math.max(20, Math.round(baseH1 * stageScale));\r\n\r\n  const printBox = document.getElementById('tshirt-print-box-4x4');\r\n  if (printBox) {\r\n    printBox.style.setProperty('width', `${boxW1}px`, 'important');\r\n    printBox.style.setProperty('height', `${boxH1}px`, 'important');\r\n    printBox.style.setProperty('min-width', `${boxW1}px`, 'important');\r\n    printBox.style.setProperty('min-height', `${boxH1}px`, 'important');\r\n    printBox.style.setProperty('max-width', `${boxW1}px`, 'important');\r\n    printBox.style.setProperty('max-height', `${boxH1}px`, 'important');\r\n  }\r\n\r\n  const baseW2 = tshirtLogoPosition2.boxWidthPx || tshirtLogoPosition2.boxSizePx || 85;\r\n  const baseH2 = tshirtLogoPosition2.boxHeightPx || tshirtLogoPosition2.boxSizePx || 85;\r\n  const boxW2 = Math.max(20, Math.round(baseW2 * stageScale));\r\n  const boxH2 = Math.max(20, Math.round(baseH2 * stageScale));\r\n\r\n  const printBox2 = document.getElementById('tshirt-print-box-12x12');\r\n  if (printBox2) {\r\n    printBox2.style.setProperty('width', `${boxW2}px`, 'important');\r\n    printBox2.style.setProperty('height', `${boxH2}px`, 'important');\r\n    printBox2.style.setProperty('min-width', `${boxW2}px`, 'important');\r\n    printBox2.style.setProperty('min-height', `${boxH2}px`, 'important');\r\n    printBox2.style.setProperty('max-width', `${boxW2}px`, 'important');\r\n    printBox2.style.setProperty('max-height', `${boxH2}px`, 'important');\r\n    printBox2.style.setProperty('overflow', 'hidden', 'important');\r\n    printBox2.style.setProperty('box-sizing', 'border-box', 'important');\r\n  }\r\n\r\n  const logoImg = document.getElementById('tshirt-canvas-logo-img');\r\n  if (logoImg) {\r\n    const scaleFactor1 = (tshirtLogoPosition.scale / 100) * 1.60;\r\n    const pxSize1 = Math.round(boxW1 * scaleFactor1);\r\n    logoImg.style.width = `${pxSize1}px`;\r\n    logoImg.style.height = `${pxSize1}px`;\r\n    logoImg.style.minWidth = `${pxSize1}px`;\r\n    logoImg.style.minHeight = `${pxSize1}px`;\r\n    logoImg.style.maxWidth = 'none';\r\n    logoImg.style.maxHeight = 'none';\r\n    logoImg.style.transform = `translate(${tshirtLogoOffset1.xPx}px, ${tshirtLogoOffset1.yPx}px)`;\r\n    logoImg.style.cursor = 'grab';\r\n    logoImg.style.pointerEvents = 'auto';\r\n  }\r\n\r\n  const logoImg2 = document.getElementById('tshirt-canvas-logo-img-2');\r\n  if (logoImg2) {\r\n    const scaleFactor2 = (tshirtLogoPosition2.scale / 100) * 1.60;\r\n    const pxSize2 = Math.round(boxW2 * scaleFactor2);\r\n    logoImg2.style.setProperty('width', `${pxSize2}px`, 'important');\r\n    logoImg2.style.setProperty('height', `${pxSize2}px`, 'important');\r\n    logoImg2.style.setProperty('min-width', `${pxSize2}px`, 'important');\r\n    logoImg2.style.setProperty('min-height', `${pxSize2}px`, 'important');\r\n    logoImg2.style.setProperty('max-width', '100%', 'important');\r\n    logoImg2.style.setProperty('max-height', '100%', 'important');\r\n    logoImg2.style.setProperty('object-fit', 'contain', 'important');\r\n    logoImg2.style.transform = `translate(${tshirtLogoOffset2.xPx}px, ${tshirtLogoOffset2.yPx}px)`;\r\n    logoImg2.style.cursor = 'grab';\r\n    logoImg2.style.pointerEvents = 'auto';\r\n  }\r\n\r\n  // Sync sliders to whichever logo is currently selected (Logo 1 = Front, Logo 2 = Back)\r\n  const currentPos = (activeEditLogo === 2) ? tshirtLogoPosition2 : tshirtLogoPosition;\r\n\r\n  const scaleSlider = document.getElementById('tshirt-artwork-scale-slider');\r\n  if (scaleSlider) {\r\n    scaleSlider.min = 20;\r\n    scaleSlider.max = 100;\r\n    scaleSlider.value = currentPos.scale;\r\n  }\r\n  const scalePercent = document.getElementById('tshirt-artwork-scale-percent');\r\n  if (scalePercent) scalePercent.textContent = `${currentPos.scale}%`;\r\n\r\n  const posXSlider = document.getElementById('tshirt-artwork-posx-slider');\r\n  if (posXSlider) posXSlider.value = currentPos.xPercent;\r\n  const posXVal = document.getElementById('tshirt-artwork-posx-val');\r\n  if (posXVal) posXVal.textContent = `${currentPos.xPercent}%`;\r\n\r\n  const posYSlider = document.getElementById('tshirt-artwork-posy-slider');\r\n  if (posYSlider) posYSlider.value = currentPos.yPercent;\r\n  const posYVal = document.getElementById('tshirt-artwork-posy-val');\r\n  if (posYVal) posYVal.textContent = `${currentPos.yPercent}%`;\r\n\r\n  // Directly update existing mirror clone elements if present in DOM, otherwise mark dirty\r\n  const mirrorClone = document.getElementById('tshirt-stage-mirror-clone');\r\n  if (mirrorClone) {\r\n    const mirrorLogo1 = mirrorClone.querySelector('#tshirt-draggable-logo-container');\r\n    if (mirrorLogo1) {\r\n      mirrorLogo1.style.left = `${tshirtLogoPosition.xPercent}%`;\r\n      mirrorLogo1.style.top = `${tshirtLogoPosition.yPercent}%`;\r\n    }\r\n    const mirrorBox1 = mirrorClone.querySelector('#tshirt-print-box-4x4');\r\n    if (mirrorBox1 && printBox) {\r\n      mirrorBox1.style.width = printBox.style.width;\r\n      mirrorBox1.style.height = printBox.style.height;\r\n      mirrorBox1.style.minWidth = printBox.style.minWidth;\r\n      mirrorBox1.style.minHeight = printBox.style.minHeight;\r\n      mirrorBox1.style.maxWidth = printBox.style.maxWidth;\r\n      mirrorBox1.style.maxHeight = printBox.style.maxHeight;\r\n    }\r\n    const mirrorImg1 = mirrorClone.querySelector('#tshirt-canvas-logo-img');\r\n    if (mirrorImg1 && logoImg) {\r\n      mirrorImg1.style.width = logoImg.style.width;\r\n      mirrorImg1.style.height = logoImg.style.height;\r\n      mirrorImg1.style.minWidth = logoImg.style.minWidth;\r\n      mirrorImg1.style.minHeight = logoImg.style.minHeight;\r\n      mirrorImg1.style.maxWidth = logoImg.style.maxWidth;\r\n      mirrorImg1.style.maxHeight = logoImg.style.maxHeight;\r\n      if (logoImg.src) mirrorImg1.src = logoImg.src;\r\n      mirrorImg1.style.display = logoImg.style.display;\r\n      mirrorImg1.style.transform = logoImg.style.transform;\r\n    }\r\n\r\n    const mirrorLogo2 = mirrorClone.querySelector('#tshirt-draggable-logo-container-2');\r\n    if (mirrorLogo2) {\r\n      mirrorLogo2.style.left = `${tshirtLogoPosition2.xPercent}%`;\r\n      mirrorLogo2.style.top = `${tshirtLogoPosition2.yPercent}%`;\r\n    }\r\n    const mirrorBox2 = mirrorClone.querySelector('#tshirt-print-box-12x12');\r\n    if (mirrorBox2 && printBox2) {\r\n      mirrorBox2.style.width = printBox2.style.width;\r\n      mirrorBox2.style.height = printBox2.style.height;\r\n      mirrorBox2.style.minWidth = printBox2.style.minWidth;\r\n      mirrorBox2.style.minHeight = printBox2.style.minHeight;\r\n      mirrorBox2.style.maxWidth = printBox2.style.maxWidth;\r\n      mirrorBox2.style.maxHeight = printBox2.style.maxHeight;\r\n    }\r\n    const mirrorImg2 = mirrorClone.querySelector('#tshirt-canvas-logo-img-2');\r\n    if (mirrorImg2 && logoImg2) {\r\n      mirrorImg2.style.width = logoImg2.style.width;\r\n      mirrorImg2.style.height = logoImg2.style.height;\r\n      mirrorImg2.style.minWidth = logoImg2.style.minWidth;\r\n      mirrorImg2.style.minHeight = logoImg2.style.minHeight;\r\n      mirrorImg2.style.maxWidth = logoImg2.style.maxWidth;\r\n      mirrorImg2.style.maxHeight = logoImg2.style.maxHeight;\r\n      if (logoImg2.src) mirrorImg2.src = logoImg2.src;\r\n      mirrorImg2.style.display = logoImg2.style.display;\r\n      mirrorImg2.style.transform = logoImg2.style.transform;\r\n    }\r\n\r\n    const mirrorText = mirrorClone.querySelector('#tshirt-draggable-text-container');\r\n    if (mirrorText) {\r\n      mirrorText.style.left = `${tshirtTextPosition.xPercent}%`;\r\n      mirrorText.style.top = `${tshirtTextPosition.yPercent}%`;\r\n    }\r\n  } else {\r\n    if (typeof window.markZoomMirrorDirty === 'function') {\r\n      window.markZoomMirrorDirty();\r\n    }\r\n  }\r\n\r\n  if (typeof window.syncCanvasZoomMirror === 'function') {\r\n    window.syncCanvasZoomMirror();\r\n  }\r\n  if (typeof window.initTshirtMouseWheelLogoZoom === 'function') {\r\n    window.initTshirtMouseWheelLogoZoom();\r\n  }\r\n  if (typeof window.updateLogoCountButtonLabels === 'function') {\r\n    window.updateLogoCountButtonLabels();\r\n  }\r\n}\r\n\r\n// Auto-resync print box dimensions when the browser window or stage container resizes\r\nwindow.addEventListener('resize', function () {\r\n  if (typeof applyLogoTransformUI === 'function') {\r\n    applyLogoTransformUI();\r\n  }\r\n});\r\nif (window.ResizeObserver) {\r\n  window.addEventListener('DOMContentLoaded', function () {\r\n    const stageElem = document.getElementById('tshirt-canvas-stage-wrapper') || document.getElementById('tshirt-photo-canvas-container');\r\n    if (stageElem) {\r\n      new ResizeObserver(function () {\r\n        if (typeof applyLogoTransformUI === 'function') {\r\n          applyLogoTransformUI();\r\n        }\r\n      }).observe(stageElem);\r\n    }\r\n  });\r\n}\r\n\r\nfunction setupSingleDrag(dragElem, stateObj) {\r\n  const stageElem = document.getElementById('tshirt-photo-canvas-container');\r\n  if (!dragElem || !stageElem) return;\r\n\r\n  let isDragging = false;\r\n  let startX = 0;\r\n  let startY = 0;\r\n  let startLeftPercent = stateObj.xPercent;\r\n  let startTopPercent = stateObj.yPercent;\r\n\r\n  function onDragStart(e) {\r\n    isDragging = true;\r\n    window.isDraggingLogo = true;\r\n    dragElem.style.cursor = 'grabbing';\r\n    selectDraggableItem(dragElem);\r\n\r\n\r\n\r\n    const clientX = e.touches ? e.touches[0].clientX : e.clientX;\r\n    const clientY = e.touches ? e.touches[0].clientY : e.clientY;\r\n\r\n    startX = clientX;\r\n    startY = clientY;\r\n    startLeftPercent = stateObj.xPercent;\r\n    startTopPercent = stateObj.yPercent;\r\n\r\n    document.addEventListener('mousemove', onDragMove);\r\n    document.addEventListener('mouseup', onDragEnd);\r\n    document.addEventListener('touchmove', onDragMove, { passive: false });\r\n    document.addEventListener('touchend', onDragEnd);\r\n  }\r\n\r\n  function onDragMove(e) {\r\n    if (!isDragging) return;\r\n    if (e.touches && e.cancelable) e.preventDefault();\r\n\r\n    const clientX = e.touches ? e.touches[0].clientX : e.clientX;\r\n    const clientY = e.touches ? e.touches[0].clientY : e.clientY;\r\n\r\n    const rect = stageElem.getBoundingClientRect();\r\n    if (rect.width === 0 || rect.height === 0) return;\r\n\r\n    const deltaX = clientX - startX;\r\n    const deltaY = clientY - startY;\r\n\r\n    const deltaXPercent = (deltaX / rect.width) * 100;\r\n    const deltaYPercent = (deltaY / rect.height) * 100;\r\n\r\n    let newX = Math.min(88, Math.max(12, startLeftPercent + deltaXPercent));\r\n    let newY = Math.min(88, Math.max(12, startTopPercent + deltaYPercent));\r\n\r\n    stateObj.xPercent = Math.round(newX);\r\n    stateObj.yPercent = Math.round(newY);\r\n\r\n    if (typeof window.markZoomMirrorDirty === 'function') {\r\n      window.markZoomMirrorDirty();\r\n    }\r\n    applyLogoTransformUI();\r\n  }\r\n\r\n  function onDragEnd() {\r\n    if (isDragging) {\r\n      isDragging = false;\r\n      window.isDraggingLogo = false;\r\n      dragElem.style.cursor = 'grab';\r\n      document.removeEventListener('mousemove', onDragMove);\r\n      document.removeEventListener('mouseup', onDragEnd);\r\n      document.removeEventListener('touchmove', onDragMove);\r\n      document.removeEventListener('touchend', onDragEnd);\r\n    }\r\n  }\r\n\r\n  dragElem.addEventListener('mousedown', onDragStart);\r\n  dragElem.addEventListener('touchstart', onDragStart, { passive: false });\r\n}\r\n\r\nfunction setupLogoInnerDrag(logoImgElem, offsetObj, logoIndex) {\r\n  if (!logoImgElem) return;\r\n\r\n  let isDragging = false;\r\n  let startX = 0;\r\n  let startY = 0;\r\n  let startOffsetX = 0;\r\n  let startOffsetY = 0;\r\n\r\n  function onDragStart(e) {\r\n    if (logoImgElem.style.display === 'none') return;\r\n    e.stopPropagation();\r\n    isDragging = true;\r\n    window.isDraggingLogo = true;\r\n    logoImgElem.style.cursor = 'grabbing';\r\n    const parentContainer = (logoIndex === 2) ? document.getElementById('tshirt-draggable-logo-container-2') : document.getElementById('tshirt-draggable-logo-container');\r\n    selectDraggableItem(parentContainer);\r\n    if (typeof setActiveEditLogo === 'function') {\r\n      setActiveEditLogo(logoIndex, e);\r\n    }\r\n\r\n\r\n\r\n    const clientX = e.touches ? e.touches[0].clientX : e.clientX;\r\n    const clientY = e.touches ? e.touches[0].clientY : e.clientY;\r\n\r\n    startX = clientX;\r\n    startY = clientY;\r\n    startOffsetX = offsetObj.xPx || 0;\r\n    startOffsetY = offsetObj.yPx || 0;\r\n\r\n    document.addEventListener('mousemove', onDragMove);\r\n    document.addEventListener('mouseup', onDragEnd);\r\n    document.addEventListener('touchmove', onDragMove, { passive: false });\r\n    document.addEventListener('touchend', onDragEnd);\r\n  }\r\n\r\n  function onDragMove(e) {\r\n    if (!isDragging) return;\r\n    if (e.touches && e.cancelable) e.preventDefault();\r\n\r\n    const clientX = e.touches ? e.touches[0].clientX : e.clientX;\r\n    const clientY = e.touches ? e.touches[0].clientY : e.clientY;\r\n\r\n    const deltaX = clientX - startX;\r\n    const deltaY = clientY - startY;\r\n\r\n    offsetObj.xPx = Math.round(startOffsetX + deltaX);\r\n    offsetObj.yPx = Math.round(startOffsetY + deltaY);\r\n\r\n    if (typeof window.markZoomMirrorDirty === 'function') {\r\n      window.markZoomMirrorDirty();\r\n    }\r\n    applyLogoTransformUI();\r\n  }\r\n\r\n  function onDragEnd() {\r\n    if (isDragging) {\r\n      isDragging = false;\r\n      window.isDraggingLogo = false;\r\n      logoImgElem.style.cursor = 'grab';\r\n      document.removeEventListener('mousemove', onDragMove);\r\n      document.removeEventListener('mouseup', onDragEnd);\r\n      document.removeEventListener('touchmove', onDragMove);\r\n      document.removeEventListener('touchend', onDragEnd);\r\n    }\r\n  }\r\n\r\n  logoImgElem.addEventListener('mousedown', onDragStart);\r\n  logoImgElem.addEventListener('touchstart', onDragStart, { passive: false });\r\n}\r\n\r\nlet tshirtTextPosition = {\r\n  xPercent: 35,\r\n  yPercent: 62\r\n};\r\n\r\nfunction initLogoDragAndDrop() {\r\n  const dragElem1 = document.getElementById('tshirt-draggable-logo-container');\r\n  const dragElem2 = document.getElementById('tshirt-draggable-logo-container-2');\r\n  const dragElemText = document.getElementById('tshirt-draggable-text-container');\r\n\r\n  const logoImg1 = document.getElementById('tshirt-canvas-logo-img');\r\n  const logoImg2 = document.getElementById('tshirt-canvas-logo-img-2');\r\n\r\n  // Print Boxes 1 (Front) & 2 (Back) locations are fixed per color (non-draggable)\r\n  if (dragElem1) dragElem1.style.cursor = 'default';\r\n  if (dragElem2) dragElem2.style.cursor = 'default';\r\n\r\n  // Logo images are draggable inside their print boxes with strict overflow clipping\r\n  if (logoImg1) setupLogoInnerDrag(logoImg1, tshirtLogoOffset1, 1);\r\n  if (logoImg2) setupLogoInnerDrag(logoImg2, tshirtLogoOffset2, 2);\r\n\r\n  if (dragElemText) setupSingleDrag(dragElemText, tshirtTextPosition);\r\n\r\n  // Click outside listener to hide badges when clicking off the T-shirt!\r\n  const stageCanvas = document.getElementById('tshirt-photo-canvas-container');\r\n  if (stageCanvas) {\r\n    stageCanvas.addEventListener('click', function (e) {\r\n      if (!e.target.closest('#tshirt-draggable-logo-container, #tshirt-draggable-logo-container-2, #tshirt-draggable-text-container')) {\r\n        selectDraggableItem(null);\r\n      }\r\n    });\r\n  }\r\n}\r\n\r\n/* ==========================================================================\r\n   Shopify Artwork Upload Controller & Animated Loading Screen Bar\r\n   ========================================================================== */\r\n\r\nlet elementaUploadModalTimer = null;\r\nlet elementaUploadProgressInterval = null;\r\n\r\nfunction formatUploadFileSize(bytes) {\r\n  if (!bytes || bytes === 0) return '0 Bytes';\r\n  const k = 1024;\r\n  const sizes = ['Bytes', 'KB', 'MB', 'GB'];\r\n  const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n  return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + ' ' + sizes[i];\r\n}\r\n\r\nfunction initElementaUploadModal() {\r\n  if (typeof document === 'undefined') return;\r\n  if (document.getElementById('elementa-upload-modal-overlay')) return;\r\n\r\n  // 1. Inject Styles\r\n  const styleEl = document.createElement('style');\r\n  styleEl.id = 'elementa-upload-modal-styles';\r\n  styleEl.textContent = `\r\n    .elementa-upload-overlay {\r\n      position: fixed !important;\r\n      inset: 0 !important;\r\n      top: 0 !important;\r\n      left: 0 !important;\r\n      width: 100vw !important;\r\n      height: 100vh !important;\r\n      z-index: 2147483647 !important;\r\n      background: rgba(15, 23, 42, 0.8) !important;\r\n      backdrop-filter: blur(10px) !important;\r\n      -webkit-backdrop-filter: blur(10px) !important;\r\n      display: flex !important;\r\n      align-items: center !important;\r\n      justify-content: center !important;\r\n      padding: 20px !important;\r\n      opacity: 0 !important;\r\n      visibility: hidden !important;\r\n      pointer-events: none !important;\r\n      transition: opacity 0.3s cubic-bezier(0.16, 1, 0.3, 1), visibility 0.3s !important;\r\n    }\r\n    .elementa-upload-overlay.active {\r\n      opacity: 1 !important;\r\n      visibility: visible !important;\r\n      pointer-events: auto !important;\r\n    }\r\n    .elementa-upload-modal {\r\n      position: relative;\r\n      background: #ffffff;\r\n      border-radius: 24px;\r\n      width: 100%;\r\n      max-width: 440px;\r\n      padding: 36px 28px 30px;\r\n      box-shadow: 0 25px 60px -12px rgba(15, 23, 42, 0.4), 0 0 0 1px rgba(255, 255, 255, 0.2);\r\n      text-align: center;\r\n      overflow: hidden;\r\n      transform: scale(0.92) translateY(12px);\r\n      transition: transform 0.3s cubic-bezier(0.16, 1, 0.3, 1);\r\n      font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\r\n    }\r\n    .elementa-upload-overlay.active .elementa-upload-modal {\r\n      transform: scale(1) translateY(0);\r\n    }\r\n    .elementa-upload-top-bar {\r\n      position: absolute;\r\n      top: 0;\r\n      left: 0;\r\n      right: 0;\r\n      height: 5px;\r\n      background: linear-gradient(90deg, #3b82f6, #8b5cf6, #ec4899);\r\n    }\r\n    .elementa-upload-icon-wrap {\r\n      position: relative;\r\n      width: 72px;\r\n      height: 72px;\r\n      margin: 0 auto 16px;\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n    }\r\n    .elementa-upload-pulse-ring {\r\n      position: absolute;\r\n      inset: 0;\r\n      border-radius: 50%;\r\n      background: rgba(99, 102, 241, 0.2);\r\n      animation: uploadRingPulse 2s infinite cubic-bezier(0.4, 0, 0.6, 1);\r\n    }\r\n    @keyframes uploadRingPulse {\r\n      0% { transform: scale(0.85); opacity: 0.8; }\r\n      50% { transform: scale(1.25); opacity: 0.2; }\r\n      100% { transform: scale(0.85); opacity: 0.8; }\r\n    }\r\n    .elementa-upload-icon-circle {\r\n      position: relative;\r\n      width: 56px;\r\n      height: 56px;\r\n      border-radius: 50%;\r\n      background: linear-gradient(135deg, #4f46e5, #06b6d4);\r\n      color: #ffffff;\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n      box-shadow: 0 8px 20px -4px rgba(79, 70, 229, 0.5);\r\n      animation: uploadIconFloat 2.5s ease-in-out infinite;\r\n    }\r\n    @keyframes uploadIconFloat {\r\n      0%, 100% { transform: translateY(0); }\r\n      50% { transform: translateY(-4px); }\r\n    }\r\n    .elementa-upload-title {\r\n      font-size: 20px;\r\n      font-weight: 700;\r\n      color: #0f172a;\r\n      margin: 0 0 6px;\r\n      letter-spacing: -0.02em;\r\n    }\r\n    .elementa-upload-subtitle {\r\n      font-size: 13.5px;\r\n      color: #64748b;\r\n      margin: 0 0 16px;\r\n      line-height: 1.5;\r\n    }\r\n    .elementa-upload-file-chip {\r\n      display: inline-flex;\r\n      align-items: center;\r\n      gap: 8px;\r\n      background: #f8fafc;\r\n      border: 1px solid #e2e8f0;\r\n      border-radius: 999px;\r\n      padding: 6px 14px;\r\n      margin-bottom: 20px;\r\n      color: #334155;\r\n      font-size: 12.5px;\r\n      max-width: 90%;\r\n    }\r\n    .elementa-upload-chip-name {\r\n      font-weight: 600;\r\n      white-space: nowrap;\r\n      overflow: hidden;\r\n      text-overflow: ellipsis;\r\n      max-width: 180px;\r\n    }\r\n    .elementa-upload-chip-size {\r\n      color: #94a3b8;\r\n      font-size: 11.5px;\r\n    }\r\n    .elementa-upload-progress-container {\r\n      margin-top: 6px;\r\n    }\r\n    .elementa-upload-progress-track {\r\n      width: 100%;\r\n      height: 9px;\r\n      background: #e2e8f0;\r\n      border-radius: 999px;\r\n      overflow: hidden;\r\n      position: relative;\r\n    }\r\n    .elementa-upload-progress-fill {\r\n      height: 100%;\r\n      background: linear-gradient(90deg, #4f46e5, #3b82f6, #06b6d4);\r\n      border-radius: 999px;\r\n      transition: width 0.35s cubic-bezier(0.16, 1, 0.3, 1);\r\n      position: relative;\r\n      overflow: hidden;\r\n    }\r\n    .elementa-upload-progress-shimmer {\r\n      position: absolute;\r\n      top: 0;\r\n      left: 0;\r\n      bottom: 0;\r\n      width: 100%;\r\n      background: linear-gradient(90deg, transparent, rgba(255,255,255,0.6), transparent);\r\n      animation: uploadShimmer 1.4s infinite;\r\n    }\r\n    @keyframes uploadShimmer {\r\n      0% { transform: translateX(-100%); }\r\n      100% { transform: translateX(100%); }\r\n    }\r\n    .elementa-upload-progress-meta {\r\n      display: flex;\r\n      justify-content: space-between;\r\n      align-items: center;\r\n      margin-top: 10px;\r\n      font-size: 12px;\r\n    }\r\n    .elementa-upload-status-text {\r\n      color: #64748b;\r\n      font-weight: 500;\r\n    }\r\n    .elementa-upload-percent-text {\r\n      color: #0f172a;\r\n      font-weight: 700;\r\n      font-variant-numeric: tabular-nums;\r\n    }\r\n    .elementa-upload-success-icon-wrap {\r\n      width: 72px;\r\n      height: 72px;\r\n      margin: 0 auto 16px;\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n    }\r\n    .elementa-upload-success-circle {\r\n      width: 64px;\r\n      height: 64px;\r\n      border-radius: 50%;\r\n      background: linear-gradient(135deg, #10b981, #059669);\r\n      color: #ffffff;\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n      box-shadow: 0 10px 25px -4px rgba(16, 185, 129, 0.5);\r\n      animation: uploadSuccessPop 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275);\r\n    }\r\n    @keyframes uploadSuccessPop {\r\n      0% { transform: scale(0.4); opacity: 0; }\r\n      70% { transform: scale(1.15); }\r\n      100% { transform: scale(1); opacity: 1; }\r\n    }\r\n    .elementa-upload-success-title {\r\n      font-size: 21px;\r\n      font-weight: 800;\r\n      color: #0f172a;\r\n      margin: 0 0 8px;\r\n      letter-spacing: -0.02em;\r\n    }\r\n    .elementa-upload-success-subtitle {\r\n      font-size: 13.5px;\r\n      color: #475569;\r\n      margin: 0 0 18px;\r\n      line-height: 1.5;\r\n    }\r\n    .elementa-upload-verified-badge {\r\n      display: inline-flex;\r\n      align-items: center;\r\n      gap: 6px;\r\n      background: #ecfdf5;\r\n      border: 1px solid #a7f3d0;\r\n      color: #065f46;\r\n      font-size: 12px;\r\n      font-weight: 600;\r\n      padding: 6px 14px;\r\n      border-radius: 999px;\r\n      margin-bottom: 22px;\r\n    }\r\n    .elementa-upload-continue-btn {\r\n      display: inline-flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n      gap: 8px;\r\n      width: 100%;\r\n      padding: 13px 20px;\r\n      background: linear-gradient(135deg, #0f172a, #1e293b);\r\n      color: #ffffff;\r\n      border: none;\r\n      border-radius: 14px;\r\n      font-size: 14px;\r\n      font-weight: 600;\r\n      cursor: pointer;\r\n      transition: all 0.2s ease;\r\n      box-shadow: 0 4px 14px rgba(15, 23, 42, 0.25);\r\n    }\r\n    .elementa-upload-continue-btn:hover {\r\n      background: #000000;\r\n      transform: translateY(-1px);\r\n      box-shadow: 0 6px 18px rgba(15, 23, 42, 0.35);\r\n    }\r\n    .elementa-upload-error-icon-wrap {\r\n      width: 64px;\r\n      height: 64px;\r\n      border-radius: 50%;\r\n      background: #fef2f2;\r\n      margin: 0 auto 16px;\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n    }\r\n    .elementa-upload-error-title {\r\n      font-size: 19px;\r\n      font-weight: 700;\r\n      color: #991b1b;\r\n      margin: 0 0 6px;\r\n    }\r\n  `;\r\n  document.head.appendChild(styleEl);\r\n\r\n  // 2. Inject Modal HTML\r\n  const overlayEl = document.createElement('div');\r\n  overlayEl.id = 'elementa-upload-modal-overlay';\r\n  overlayEl.className = 'elementa-upload-overlay';\r\n  overlayEl.innerHTML = `\r\n    <div class=\"elementa-upload-modal\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Upload Progress\">\r\n      <div class=\"elementa-upload-top-bar\"></div>\r\n\r\n      <!-- 1. Loading View -->\r\n      <div id=\"elementa-upload-view-loading\">\r\n        <div class=\"elementa-upload-icon-wrap\">\r\n          <div class=\"elementa-upload-pulse-ring\"></div>\r\n          <div class=\"elementa-upload-icon-circle\">\r\n            <svg viewBox=\"0 0 24 24\" width=\"28\" height=\"28\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n              <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/>\r\n              <polyline points=\"17 8 12 3 7 8\"/>\r\n              <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\"/>\r\n            </svg>\r\n          </div>\r\n        </div>\r\n\r\n        <h3 class=\"elementa-upload-title\">Uploading Your Artwork...</h3>\r\n        <p class=\"elementa-upload-subtitle\">Connecting and assigning your image directly to Shopify.</p>\r\n\r\n        <div class=\"elementa-upload-file-chip\">\r\n          <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n            <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"/>\r\n            <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\"/>\r\n            <polyline points=\"21 15 16 10 5 21\"/>\r\n          </svg>\r\n          <span id=\"elementa-upload-chip-name\" class=\"elementa-upload-chip-name\">artwork.png</span>\r\n          <span id=\"elementa-upload-chip-size\" class=\"elementa-upload-chip-size\">0 KB</span>\r\n        </div>\r\n\r\n        <div class=\"elementa-upload-progress-container\">\r\n          <div class=\"elementa-upload-progress-track\">\r\n            <div id=\"elementa-upload-progress-fill\" class=\"elementa-upload-progress-fill\" style=\"width: 10%;\">\r\n              <div class=\"elementa-upload-progress-shimmer\"></div>\r\n            </div>\r\n          </div>\r\n          <div class=\"elementa-upload-progress-meta\">\r\n            <span id=\"elementa-upload-status-text\" class=\"elementa-upload-status-text\">Uploading image to Shopify...</span>\r\n            <span id=\"elementa-upload-percent-text\" class=\"elementa-upload-percent-text\">10%</span>\r\n          </div>\r\n        </div>\r\n      </div>\r\n\r\n      <!-- 2. Success View -->\r\n      <div id=\"elementa-upload-view-success\" style=\"display: none;\">\r\n        <div class=\"elementa-upload-success-icon-wrap\">\r\n          <div class=\"elementa-upload-success-circle\">\r\n            <svg viewBox=\"0 0 24 24\" width=\"36\" height=\"36\" fill=\"none\" stroke=\"#ffffff\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n              <polyline points=\"20 6 9 17 4 12\"/>\r\n            </svg>\r\n          </div>\r\n        </div>\r\n\r\n        <h3 class=\"elementa-upload-success-title\">Thank you for uploading your image!</h3>\r\n        <p class=\"elementa-upload-success-subtitle\">Your artwork has been safely processed and assigned to Shopify.</p>\r\n\r\n        <div class=\"elementa-upload-verified-badge\">\r\n          <svg viewBox=\"0 0 20 20\" width=\"14\" height=\"14\" fill=\"#059669\">\r\n            <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\" clip-rule=\"evenodd\"/>\r\n          </svg>\r\n          <span>Assigned to Shopify \u2022 Print-Ready</span>\r\n        </div>\r\n\r\n        <button type=\"button\" id=\"elementa-upload-dismiss-btn\" class=\"elementa-upload-continue-btn\">\r\n          <span>Continue Customizing</span>\r\n          <svg viewBox=\"0 0 20 20\" width=\"16\" height=\"16\" fill=\"currentColor\">\r\n            <path fill-rule=\"evenodd\" d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\" clip-rule=\"evenodd\"/>\r\n          </svg>\r\n        </button>\r\n      </div>\r\n\r\n      <!-- 3. Error View -->\r\n      <div id=\"elementa-upload-view-error\" style=\"display: none;\">\r\n        <div class=\"elementa-upload-error-icon-wrap\">\r\n          <svg viewBox=\"0 0 24 24\" width=\"34\" height=\"34\" fill=\"none\" stroke=\"#ef4444\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n            <circle cx=\"12\" cy=\"12\" r=\"10\"/>\r\n            <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"/>\r\n            <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"/>\r\n          </svg>\r\n        </div>\r\n        <h3 class=\"elementa-upload-error-title\">Upload Interrupted</h3>\r\n        <p id=\"elementa-upload-error-msg\" class=\"elementa-upload-subtitle\">We couldn't assign the image to Shopify. Please check your connection and try again.</p>\r\n        <button type=\"button\" id=\"elementa-upload-retry-btn\" class=\"elementa-upload-continue-btn\" style=\"background: #0f172a; margin-top: 14px;\">\r\n          <span>Close & Try Again</span>\r\n        </button>\r\n      </div>\r\n    </div>\r\n  `;\r\n  document.body.appendChild(overlayEl);\r\n\r\n  const dismissBtn = document.getElementById('elementa-upload-dismiss-btn');\r\n  if (dismissBtn) {\r\n    dismissBtn.addEventListener('click', function () {\r\n      if (elementaUploadModalTimer) clearTimeout(elementaUploadModalTimer);\r\n      closeElementaUploadModal();\r\n    });\r\n  }\r\n\r\n  const retryBtn = document.getElementById('elementa-upload-retry-btn');\r\n  if (retryBtn) {\r\n    retryBtn.addEventListener('click', function () {\r\n      closeElementaUploadModal();\r\n    });\r\n  }\r\n}\r\n\r\nfunction showElementaUploadLoading(fileName, fileSize) {\r\n  initElementaUploadModal();\r\n  if (elementaUploadModalTimer) clearTimeout(elementaUploadModalTimer);\r\n  if (elementaUploadProgressInterval) clearInterval(elementaUploadProgressInterval);\r\n\r\n  const overlay = document.getElementById('elementa-upload-modal-overlay');\r\n  const viewLoading = document.getElementById('elementa-upload-view-loading');\r\n  const viewSuccess = document.getElementById('elementa-upload-view-success');\r\n  const viewError = document.getElementById('elementa-upload-view-error');\r\n\r\n  const chipName = document.getElementById('elementa-upload-chip-name');\r\n  const chipSize = document.getElementById('elementa-upload-chip-size');\r\n  const fill = document.getElementById('elementa-upload-progress-fill');\r\n  const percentText = document.getElementById('elementa-upload-percent-text');\r\n  const statusText = document.getElementById('elementa-upload-status-text');\r\n\r\n  if (chipName) chipName.textContent = fileName || 'artwork.png';\r\n  if (chipSize) chipSize.textContent = formatUploadFileSize(fileSize);\r\n\r\n  if (viewLoading) viewLoading.style.display = 'block';\r\n  if (viewSuccess) viewSuccess.style.display = 'none';\r\n  if (viewError) viewError.style.display = 'none';\r\n\r\n  if (fill) fill.style.width = '12%';\r\n  if (percentText) percentText.textContent = '12%';\r\n  if (statusText) statusText.textContent = 'Uploading image to Shopify...';\r\n\r\n  if (overlay) overlay.classList.add('active');\r\n\r\n  // Smooth progressive ticker while network transfer happens\r\n  let currentP = 12;\r\n  elementaUploadProgressInterval = setInterval(() => {\r\n    if (currentP < 86) {\r\n      currentP += Math.floor(Math.random() * 8) + 4;\r\n      if (currentP > 86) currentP = 86;\r\n      if (fill) fill.style.width = `${currentP}%`;\r\n      if (percentText) percentText.textContent = `${currentP}%`;\r\n\r\n      if (statusText) {\r\n        if (currentP > 60) statusText.textContent = 'Assigning artwork to Shopify...';\r\n        else if (currentP > 35) statusText.textContent = 'Securing high-resolution file...';\r\n      }\r\n    }\r\n  }, 220);\r\n}\r\n\r\nfunction showElementaUploadSuccess() {\r\n  if (elementaUploadProgressInterval) {\r\n    clearInterval(elementaUploadProgressInterval);\r\n    elementaUploadProgressInterval = null;\r\n  }\r\n\r\n  const fill = document.getElementById('elementa-upload-progress-fill');\r\n  const percentText = document.getElementById('elementa-upload-percent-text');\r\n  const statusText = document.getElementById('elementa-upload-status-text');\r\n\r\n  if (fill) fill.style.width = '100%';\r\n  if (percentText) percentText.textContent = '100%';\r\n  if (statusText) statusText.textContent = 'Assigned to Shopify \u2713';\r\n\r\n  setTimeout(() => {\r\n    const viewLoading = document.getElementById('elementa-upload-view-loading');\r\n    const viewSuccess = document.getElementById('elementa-upload-view-success');\r\n    if (viewLoading) viewLoading.style.display = 'none';\r\n    if (viewSuccess) viewSuccess.style.display = 'block';\r\n\r\n    // Auto-dismiss after 2.5 seconds\r\n    if (elementaUploadModalTimer) clearTimeout(elementaUploadModalTimer);\r\n    elementaUploadModalTimer = setTimeout(() => {\r\n      closeElementaUploadModal();\r\n    }, 2500);\r\n  }, 350);\r\n}\r\n\r\nfunction showElementaUploadError(errMsg) {\r\n  if (elementaUploadProgressInterval) {\r\n    clearInterval(elementaUploadProgressInterval);\r\n    elementaUploadProgressInterval = null;\r\n  }\r\n  const viewLoading = document.getElementById('elementa-upload-view-loading');\r\n  const viewError = document.getElementById('elementa-upload-view-error');\r\n  const errorMsgEl = document.getElementById('elementa-upload-error-msg');\r\n\r\n  if (viewLoading) viewLoading.style.display = 'none';\r\n  if (viewError) viewError.style.display = 'block';\r\n  if (errorMsgEl && errMsg) errorMsgEl.textContent = errMsg;\r\n}\r\n\r\nfunction closeElementaUploadModal() {\r\n  if (elementaUploadProgressInterval) {\r\n    clearInterval(elementaUploadProgressInterval);\r\n    elementaUploadProgressInterval = null;\r\n  }\r\n  if (elementaUploadModalTimer) {\r\n    clearTimeout(elementaUploadModalTimer);\r\n    elementaUploadModalTimer = null;\r\n  }\r\n  const overlay = document.getElementById('elementa-upload-modal-overlay');\r\n  if (overlay) overlay.classList.remove('active');\r\n}\r\n\r\nwindow.uploadArtworkToShopifyCDN = async function (file, context = 1) {\r\n  let nameElem = null;\r\n  if (context === 1 || context === 2) {\r\n    nameElem = document.getElementById(`tshirt-artwork-file-name-${context}`);\r\n  } else if (context === 'sticker') {\r\n    nameElem = document.getElementById('artwork-file-name');\r\n  } else if (context === 'cap') {\r\n    nameElem = document.getElementById('cap-file-name-text');\r\n  } else if (context === 'gift') {\r\n    nameElem = document.getElementById('gift-artwork-file-name');\r\n  }\r\n\r\n  const origText = nameElem ? nameElem.textContent : '';\r\n  if (nameElem) {\r\n    nameElem.textContent = `${file.name} (Uploading to CDN... \u23F3)`;\r\n  }\r\n\r\n  // Show the animated loading screen bar\r\n  showElementaUploadLoading(file.name, file.size);\r\n\r\n  const rootPath = (window.Shopify && window.Shopify.routes && window.Shopify.routes.root ? window.Shopify.routes.root : '/');\r\n\r\n  try {\r\n    let cdnUrl = null;\r\n\r\n    // 1. If a dedicated custom endpoint is explicitly set and not the default proxy, try it\r\n    if (window.SHOPIFY_CDN_UPLOAD_ENDPOINT && window.SHOPIFY_CDN_UPLOAD_ENDPOINT !== '/apps/elementa-upload') {\r\n      try {\r\n        const customFormData = new FormData();\r\n        customFormData.append('file', file, file.name);\r\n        const resCustom = await fetch(window.SHOPIFY_CDN_UPLOAD_ENDPOINT, {\r\n          method: 'POST',\r\n          body: customFormData\r\n        });\r\n        if (resCustom.ok) {\r\n          const dataCustom = await resCustom.json();\r\n          if (dataCustom && dataCustom.url) {\r\n            cdnUrl = dataCustom.url;\r\n          }\r\n        }\r\n      } catch (errCustom) {\r\n        console.warn('[Shopify CDN] Custom endpoint fallback notice:', errCustom);\r\n      }\r\n    }\r\n\r\n    // 2. Direct, reliable Shopify Cart upload (generates permanent https://cdn.shopify.com/.../uploads/... URL)\r\n    if (!cdnUrl) {\r\n      let targetVariantId = '67585065189508'; // Default sticker variant\r\n      if (context === 1 || context === 2) {\r\n        targetVariantId = '52875689427076';\r\n      } else if (context === 'cap') {\r\n        targetVariantId = '67587052437636';\r\n      } else if (context === 'gift') {\r\n        targetVariantId = '67585069285508';\r\n      } else if (context === 'sticker' && typeof selectedStickerVariantId !== 'undefined' && selectedStickerVariantId) {\r\n        targetVariantId = String(selectedStickerVariantId);\r\n      }\r\n\r\n      const uploadFormData = new FormData();\r\n      uploadFormData.append('id', Number(targetVariantId));\r\n      uploadFormData.append('quantity', '1');\r\n      uploadFormData.append('properties[_elementa_artwork_temp]', 'true');\r\n      uploadFormData.append('properties[Uploaded Artwork]', file, file.name || 'artwork.png');\r\n\r\n      const cartAddRes = await fetch(rootPath + 'cart/add.js', {\r\n        method: 'POST',\r\n        headers: { 'Accept': 'application/json' },\r\n        body: uploadFormData\r\n      });\r\n\r\n      if (cartAddRes.ok) {\r\n        const cartAddData = await cartAddRes.json();\r\n        if (cartAddData && cartAddData.properties) {\r\n          cdnUrl = cartAddData.properties['Uploaded Artwork'] ||\r\n            Object.values(cartAddData.properties).find(v =>\r\n              typeof v === 'string' && (v.includes('/uploads/') || v.startsWith('http://') || v.startsWith('https://') || v.startsWith('//'))\r\n            );\r\n        }\r\n\r\n        // Immediately delete temporary upload item from cart so cart remains pristine\r\n        if (cartAddData && cartAddData.key) {\r\n          fetch(rootPath + 'cart/change.js', {\r\n            method: 'POST',\r\n            headers: {\r\n              'Content-Type': 'application/json',\r\n              'Accept': 'application/json'\r\n            },\r\n            body: JSON.stringify({ id: cartAddData.key, quantity: 0 })\r\n          }).catch(() => { });\r\n        }\r\n      } else {\r\n        throw new Error('Could not upload image to Shopify. Status: ' + cartAddRes.status);\r\n      }\r\n    }\r\n\r\n    if (cdnUrl) {\r\n      // Successfully assigned to Shopify! Store in appropriate state\r\n      if (context === 1) {\r\n        tshirtState.artworkCdnUrl = cdnUrl;\r\n      } else if (context === 2) {\r\n        tshirtState.artworkCdnUrl2 = cdnUrl;\r\n      } else if (context === 'sticker' && typeof stickerState !== 'undefined') {\r\n        stickerState.artworkCdnUrl = cdnUrl;\r\n      } else if (context === 'cap' && typeof capState !== 'undefined') {\r\n        capState.artworkCdnUrl = cdnUrl;\r\n      } else if (context === 'gift' && typeof giftState !== 'undefined') {\r\n        giftState.artworkCdnUrl = cdnUrl;\r\n      }\r\n\r\n      if (nameElem) {\r\n        nameElem.textContent = `${file.name} (Uploaded \u2713)`;\r\n      }\r\n      console.log(`[Shopify CDN] Successfully assigned image to Shopify for ${context}:`, cdnUrl);\r\n\r\n      // Show the beautiful completion message requested by the user\r\n      showElementaUploadSuccess();\r\n      return cdnUrl;\r\n    } else {\r\n      throw new Error('Shopify did not return an artwork URL.');\r\n    }\r\n  } catch (err) {\r\n    console.warn(`[Shopify CDN] Upload notice for ${context}:`, err);\r\n    if (nameElem) {\r\n      nameElem.textContent = origText || file.name;\r\n    }\r\n    showElementaUploadError('Failed to assign image to Shopify. Please check your file & connection.');\r\n    return null;\r\n  }\r\n};\r\n\r\n// Pre-initialize upload modal & dropzone listeners immediately\r\nif (typeof document !== 'undefined') {\r\n  if (document.readyState === 'loading') {\r\n    document.addEventListener('DOMContentLoaded', function () {\r\n      initElementaUploadModal();\r\n      initStickerDropzoneDrag();\r\n    });\r\n  } else {\r\n    initElementaUploadModal();\r\n    initStickerDropzoneDrag();\r\n  }\r\n}\r\n\r\nfunction initStickerDropzoneDrag() {\r\n  const dropzones = document.querySelectorAll('#artwork-dropzone-box, #tshirt-dropzone-1, #tshirt-dropzone-2');\r\n  dropzones.forEach(dz => {\r\n    if (dz.dataset.dropInit) return;\r\n    dz.dataset.dropInit = 'true';\r\n    ['dragenter', 'dragover'].forEach(evt => {\r\n      dz.addEventListener(evt, e => {\r\n        e.preventDefault();\r\n        e.stopPropagation();\r\n        dz.style.borderColor = '#4f46e5';\r\n      });\r\n    });\r\n    ['dragleave', 'drop'].forEach(evt => {\r\n      dz.addEventListener(evt, e => {\r\n        e.preventDefault();\r\n        e.stopPropagation();\r\n        dz.style.borderColor = '';\r\n      });\r\n    });\r\n    dz.addEventListener('drop', e => {\r\n      if (e.dataTransfer && e.dataTransfer.files && e.dataTransfer.files.length) {\r\n        if (dz.id === 'artwork-dropzone-box' && typeof window.handleFileUpload === 'function') {\r\n          window.handleFileUpload({ files: e.dataTransfer.files });\r\n        } else if (dz.id === 'tshirt-dropzone-1' && typeof window.handleTshirtFileUploadNum === 'function') {\r\n          window.handleTshirtFileUploadNum(1, { files: e.dataTransfer.files });\r\n        } else if (dz.id === 'tshirt-dropzone-2' && typeof window.handleTshirtFileUploadNum === 'function') {\r\n          window.handleTshirtFileUploadNum(2, { files: e.dataTransfer.files });\r\n        }\r\n      }\r\n    });\r\n  });\r\n}\r\n\r\n\r\nwindow.handleTshirtFileUploadNum = function (num, input) {\r\n  if (num === 2 && !tshirtState.hasBackPrint) {\r\n    showToast(\"\uD83D\uDD12 Please turn ON 'Add Back Print (+\u20B9100/pc)' switch above first to enable Back Print uploads!\");\r\n    if (input) input.value = '';\r\n    const toggleCheckbox = document.getElementById('tshirt-back-print-toggle');\r\n    if (toggleCheckbox) {\r\n      toggleCheckbox.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n    }\r\n    return;\r\n  }\r\n\r\n  if (input.files && input.files[0]) {\r\n    const file = input.files[0];\r\n    const isPdf = file.name.toLowerCase().endsWith('.pdf') || file.type === 'application/pdf';\r\n\r\n    // Trigger CDN upload in background\r\n    if (typeof window.uploadArtworkToShopifyCDN === 'function') {\r\n      window.uploadArtworkToShopifyCDN(file, num);\r\n    }\r\n\r\n    const onFileReady = function (dataUrl) {\r\n      if (num === 1) {\r\n        tshirtState.artworkFile = file.name;\r\n        tshirtState.artworkDataUrl = dataUrl;\r\n        tshirtState.rawFile = file;\r\n\r\n        const logoImg1 = document.getElementById('tshirt-canvas-logo-img');\r\n        if (logoImg1) {\r\n          logoImg1.src = dataUrl;\r\n          logoImg1.style.display = 'block';\r\n          logoImg1.style.animation = 'fadeIn 0.4s ease';\r\n        }\r\n        const thumb1 = document.getElementById('tshirt-artwork-thumb-preview-1');\r\n        if (thumb1) thumb1.src = dataUrl;\r\n        const nameElem1 = document.getElementById('tshirt-artwork-file-name-1');\r\n        if (nameElem1) nameElem1.textContent = `Image 1: ${file.name}`;\r\n        const row1 = document.getElementById('artwork-info-row-1');\r\n        if (row1) row1.style.display = 'flex';\r\n      } else {\r\n        tshirtState.artworkFile2 = file.name;\r\n        tshirtState.artworkDataUrl2 = dataUrl;\r\n        tshirtState.rawFile2 = file;\r\n\r\n        const logoImg2 = document.getElementById('tshirt-canvas-logo-img-2');\r\n        if (logoImg2) {\r\n          logoImg2.src = dataUrl;\r\n          logoImg2.style.display = 'block';\r\n          logoImg2.style.animation = 'fadeIn 0.4s ease';\r\n        }\r\n        const thumb2 = document.getElementById('tshirt-artwork-thumb-preview-2');\r\n        if (thumb2) thumb2.src = dataUrl;\r\n        const nameElem2 = document.getElementById('tshirt-artwork-file-name-2');\r\n        if (nameElem2) nameElem2.textContent = `Image 2: ${file.name}`;\r\n        const row2 = document.getElementById('artwork-info-row-2');\r\n        if (row2) row2.style.display = 'flex';\r\n\r\n        // Auto activate 2 Logos view\r\n        setTshirtLogoCount(2);\r\n      }\r\n\r\n      const card = document.getElementById('tshirt-uploaded-artwork-card');\r\n      if (card) card.style.display = 'block';\r\n\r\n      switchTshirtGalleryViewMode('canvas');\r\n      if (typeof window.markZoomMirrorDirty === 'function') window.markZoomMirrorDirty();\r\n      applyLogoTransformUI();\r\n      if (typeof window.updateLogoUploadStepUI === 'function') window.updateLogoUploadStepUI();\r\n      if (typeof window.updateAuthCheckboxVisibility === 'function') window.updateAuthCheckboxVisibility();\r\n      showToast(`Uploaded Image ${num}: \"${file.name}\" rendered on T-Shirt!`);\r\n    };\r\n\r\n    if (isPdf && typeof window.generatePdfPreviewDataUrl === 'function') {\r\n      onFileReady(window.generatePdfPreviewDataUrl(file.name));\r\n    } else {\r\n      const reader = new FileReader();\r\n      reader.onload = function (e) {\r\n        onFileReady(e.target.result);\r\n      };\r\n      reader.readAsDataURL(file);\r\n    }\r\n  }\r\n};\r\n\r\nwindow.removeTshirtUploadedArtworkNum = function (num) {\r\n  if (num === 1) {\r\n    tshirtState.artworkFile = null;\r\n    tshirtState.artworkDataUrl = null;\r\n    tshirtState.artworkCdnUrl = null;\r\n    const logoImg1 = document.getElementById('tshirt-canvas-logo-img');\r\n    if (logoImg1) { logoImg1.style.display = 'none'; logoImg1.src = ''; }\r\n    const row1 = document.getElementById('artwork-info-row-1');\r\n    if (row1) row1.style.display = 'none';\r\n    const input1 = document.getElementById('tshirt-file-input-1');\r\n    if (input1) input1.value = '';\r\n  } else {\r\n    tshirtState.artworkFile2 = null;\r\n    tshirtState.artworkDataUrl2 = null;\r\n    tshirtState.artworkCdnUrl2 = null;\r\n    const logoImg2 = document.getElementById('tshirt-canvas-logo-img-2');\r\n    if (logoImg2) { logoImg2.style.display = 'none'; logoImg2.src = ''; }\r\n    const row2 = document.getElementById('artwork-info-row-2');\r\n    if (row2) row2.style.display = 'none';\r\n    const input2 = document.getElementById('tshirt-file-input-2');\r\n    if (input2) input2.value = '';\r\n  }\r\n\r\n  if (!tshirtState.artworkDataUrl && !tshirtState.artworkDataUrl2) {\r\n    const card = document.getElementById('tshirt-uploaded-artwork-card');\r\n    if (card) card.style.display = 'none';\r\n  }\r\n\r\n  if (typeof window.updateLogoUploadStepUI === 'function') window.updateLogoUploadStepUI();\r\n  if (typeof window.markZoomMirrorDirty === 'function') window.markZoomMirrorDirty();\r\n  if (typeof window.syncCanvasZoomMirror === 'function') window.syncCanvasZoomMirror();\r\n  if (typeof window.updateAuthCheckboxVisibility === 'function') window.updateAuthCheckboxVisibility();\r\n\r\n  showToast(`Image ${num} removed`);\r\n};\r\n\r\nwindow.updateTshirtCustomText = function (val) {\r\n  tshirtState.customText = val || '';\r\n  const textContainer = document.getElementById('tshirt-draggable-text-container');\r\n  const textDisplay = document.getElementById('tshirt-canvas-text-display');\r\n\r\n  if (textDisplay) {\r\n    textDisplay.textContent = val;\r\n  }\r\n  if (textContainer) {\r\n    if (val && val.trim().length > 0) {\r\n      textContainer.style.display = 'flex';\r\n      textContainer.style.animation = 'fadeIn 0.3s ease';\r\n    } else {\r\n      textContainer.style.display = 'none';\r\n    }\r\n  }\r\n\r\n  if (typeof window.markZoomMirrorDirty === 'function') window.markZoomMirrorDirty();\r\n  if (typeof window.syncCanvasZoomMirror === 'function') window.syncCanvasZoomMirror();\r\n  if (typeof window.updateAuthCheckboxVisibility === 'function') window.updateAuthCheckboxVisibility();\r\n};\r\n\r\nwindow.updateTshirtCustomTextColor = function (colorHex, btnElem) {\r\n  tshirtState.textColor = colorHex;\r\n  const textDisplay = document.getElementById('tshirt-canvas-text-display');\r\n  const picker = document.getElementById('tshirt-text-color-picker');\r\n\r\n  if (textDisplay) {\r\n    textDisplay.style.color = colorHex;\r\n    if (colorHex.toLowerCase() === '#ffffff') {\r\n      textDisplay.style.textShadow = '0 2px 6px rgba(0,0,0,0.95)';\r\n    } else {\r\n      textDisplay.style.textShadow = '0 1px 4px rgba(255,255,255,0.9), 0 2px 6px rgba(0,0,0,0.85)';\r\n    }\r\n  }\r\n\r\n  if (picker) {\r\n    picker.value = colorHex;\r\n  }\r\n\r\n  if (btnElem) {\r\n    document.querySelectorAll('.text-color-swatch-btn').forEach(b => {\r\n      b.classList.remove('active');\r\n      b.style.outline = 'none';\r\n    });\r\n    btnElem.classList.add('active');\r\n    btnElem.style.outline = '3px solid #be123c';\r\n  }\r\n\r\n  if (typeof window.markZoomMirrorDirty === 'function') window.markZoomMirrorDirty();\r\n  if (typeof window.syncCanvasZoomMirror === 'function') window.syncCanvasZoomMirror();\r\n\r\n  showToast(`Text Color changed to ${colorHex}`);\r\n};\r\n\r\nwindow.recalculateTshirtPrice = function () {\r\n  const TSHIRT_SLABS = [\r\n    { min: 1, max: 2, discount: 0, label: '2 pcs' },\r\n    { min: 3, max: 4, discount: 0.11, label: '3\u20134 pcs' },\r\n    { min: 5, max: 9, discount: 0.24, label: '5\u20139 pcs' },\r\n    { min: 10, max: 19, discount: 0.27, label: '10\u201319 pcs' },\r\n    { min: 20, max: 29, discount: 0.32, label: '20\u201329 pcs' },\r\n    { min: 30, max: 49, discount: 0.35, label: '30\u201349 pcs' },\r\n    { min: 50, max: 75, discount: 0.40, label: '50\u201375 pcs' },\r\n    { min: 76, max: 9999, discount: 0.43, label: '76\u2013100 pcs' }\r\n  ];\r\n\r\n  let baseUnitPrice = 625.00; // Polo default base unit (Without back print)\r\n  const fitClean = (tshirtState.fit || '').toLowerCase();\r\n  if (fitClean.includes('oversiz')) {\r\n    baseUnitPrice = 799.00;\r\n  } else if (fitClean.includes('round')) {\r\n    baseUnitPrice = 599.00;\r\n  } else {\r\n    baseUnitPrice = 625.00;\r\n  }\r\n\r\n  // Add back print surcharge (+\u20B9100/pc) ONLY if toggle is checked\r\n  const hasBackPrint = !!tshirtState.hasBackPrint;\r\n  tshirtState.hasBackPrint = hasBackPrint;\r\n  if (hasBackPrint) {\r\n    baseUnitPrice += 100.00;\r\n  }\r\n\r\n  const minAllowed = fitClean.includes('oversiz') ? 1 : 2;\r\n  const qty = Math.max(minAllowed, tshirtState.targetQty || minAllowed);\r\n  tshirtState.targetQty = qty;\r\n\r\n  // Sync Custom Quantity Input Field\r\n  const customInput = document.getElementById('elementa-custom-total-qty-input');\r\n  if (customInput && document.activeElement !== customInput) {\r\n    customInput.value = qty;\r\n  }\r\n\r\n  // Find active slab index\r\n  let activeSlabIndex = 0;\r\n  for (let i = 0; i < TSHIRT_SLABS.length; i++) {\r\n    if (qty >= TSHIRT_SLABS[i].min && qty <= TSHIRT_SLABS[i].max) {\r\n      activeSlabIndex = i;\r\n      break;\r\n    }\r\n  }\r\n  if (qty >= 76) activeSlabIndex = 7;\r\n\r\n  const activeDiscount = TSHIRT_SLABS[activeSlabIndex].discount;\r\n  const calculatedUnitPrice = Math.round(baseUnitPrice * (1 - activeDiscount));\r\n  const totalPrice = Math.round(calculatedUnitPrice * qty);\r\n\r\n  tshirtState.unitPrice = calculatedUnitPrice;\r\n  tshirtState.totalPrice = totalPrice;\r\n\r\n  // 1. Update Progress Tracker Line Fill & Milestone Node States\r\n  const progressFill = document.getElementById('elementa-tracker-progress-fill');\r\n  if (progressFill) {\r\n    const pct = Math.min(100, Math.max(0, (activeSlabIndex / (TSHIRT_SLABS.length - 1)) * 100));\r\n    progressFill.style.width = `${pct}%`;\r\n  }\r\n\r\n  const nodes = document.querySelectorAll('.elementa-milestones-row .elementa-milestone-node');\r\n  nodes.forEach((node, idx) => {\r\n    const priceSpan = node.querySelector('.node-price');\r\n    if (priceSpan && TSHIRT_SLABS[idx]) {\r\n      const slabUnit = Math.round(baseUnitPrice * (1 - TSHIRT_SLABS[idx].discount));\r\n      priceSpan.textContent = `\u20B9${slabUnit}`;\r\n    }\r\n\r\n    if (idx === activeSlabIndex) {\r\n      node.classList.add('active');\r\n      node.classList.remove('passed');\r\n    } else if (idx < activeSlabIndex) {\r\n      node.classList.remove('active');\r\n      node.classList.add('passed');\r\n    } else {\r\n      node.classList.remove('active');\r\n      node.classList.remove('passed');\r\n    }\r\n  });\r\n\r\n  // Auto-scroll active milestone into center on mobile\r\n  if (nodes && nodes[activeSlabIndex]) {\r\n    try {\r\n      nodes[activeSlabIndex].scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'center' });\r\n    } catch (e) { }\r\n  }\r\n\r\n  // 1b. Update Tier Grid Cards Unit Prices and Active State if present\r\n  const tierCards = document.querySelectorAll('#tshirt-tier-grid .elementa-tier-card');\r\n  tierCards.forEach((card, idx) => {\r\n    if (idx < TSHIRT_SLABS.length) {\r\n      const slab = TSHIRT_SLABS[idx];\r\n      const slabUnit = Math.round(baseUnitPrice * (1 - slab.discount));\r\n      const unitElem = card.querySelector('.elementa-tier-unit');\r\n      if (unitElem) unitElem.textContent = `\u20B9${slabUnit} / pc`;\r\n\r\n      if (idx === activeSlabIndex) {\r\n        card.classList.add('active');\r\n      } else {\r\n        card.classList.remove('active');\r\n      }\r\n    }\r\n  });\r\n\r\n  // 2. Update Dynamic Price & Summary Banner\r\n  const unitPriceElem = document.getElementById('tshirt-summary-unit-price');\r\n  if (unitPriceElem) unitPriceElem.textContent = `\u20B9${calculatedUnitPrice} / pc`;\r\n\r\n  const totalPriceElem = document.getElementById('tshirt-summary-total-price');\r\n  if (totalPriceElem) totalPriceElem.textContent = `\u20B9${totalPrice.toLocaleString('en-IN')} Total`;\r\n\r\n  const saveTagElem = document.getElementById('tshirt-summary-save-tag');\r\n  if (saveTagElem) {\r\n    const pct = Math.round(activeDiscount * 100);\r\n    if (pct > 0) {\r\n      saveTagElem.textContent = `SAVE ${pct}% OFF`;\r\n      saveTagElem.style.background = '#f97316';\r\n    } else {\r\n      saveTagElem.textContent = `BASE PRICE`;\r\n      saveTagElem.style.background = '#64748b';\r\n    }\r\n  }\r\n\r\n  // 3. Update Dynamic Upsell Nudge Bar\r\n  const nudgeBar = document.getElementById('tshirt-upsell-nudge-bar');\r\n  const nudgeText = document.getElementById('tshirt-nudge-text');\r\n  const nudgeBtn = document.getElementById('tshirt-nudge-btn');\r\n\r\n  if (activeSlabIndex < TSHIRT_SLABS.length - 1) {\r\n    const nextSlab = TSHIRT_SLABS[activeSlabIndex + 1];\r\n    const deltaQty = nextSlab.min - qty;\r\n    const nextUnitPrice = Math.round(baseUnitPrice * (1 - nextSlab.discount));\r\n    const perPieceSavings = Math.max(1, calculatedUnitPrice - nextUnitPrice);\r\n\r\n    if (nudgeText) {\r\n      nudgeText.textContent = `Add ${deltaQty} more piece${deltaQty > 1 ? 's' : ''} \u2014 pay \u20B9${nextUnitPrice}/pc and save \u20B9${perPieceSavings} on every piece!`;\r\n    }\r\n    if (nudgeBtn) {\r\n      nudgeBtn.textContent = `+ Add ${deltaQty} More`;\r\n      nudgeBtn.setAttribute('data-delta', deltaQty);\r\n      nudgeBtn.style.display = 'inline-block';\r\n    }\r\n    if (nudgeBar) nudgeBar.style.display = 'flex';\r\n  } else {\r\n    if (nudgeText) {\r\n      nudgeText.textContent = `\uD83C\uDF89 You've unlocked our MAXIMUM 43% OFF bulk tier rate!`;\r\n    }\r\n    if (nudgeBtn) nudgeBtn.style.display = 'none';\r\n    if (nudgeBar) nudgeBar.style.display = 'flex';\r\n  }\r\n\r\n  // 4. Update Header Top Price Card\r\n  const topPriceNum = document.getElementById('tshirt-top-price-num');\r\n  if (topPriceNum) topPriceNum.textContent = `\u20B9${totalPrice.toLocaleString('en-IN')}`;\r\n\r\n  const topMrpNum = document.getElementById('tshirt-top-mrp-num');\r\n  if (topMrpNum) {\r\n    const baseMrp = Math.round(baseUnitPrice * 1.2 * qty);\r\n    topMrpNum.textContent = `\u20B9${baseMrp.toLocaleString('en-IN')}`;\r\n  }\r\n\r\n  const saveBadge = document.getElementById('tshirt-top-save-badge');\r\n  if (saveBadge) {\r\n    const pct = Math.round(activeDiscount * 100);\r\n    saveBadge.textContent = pct > 0 ? `SAVE ${pct}%` : `BASE PRICE`;\r\n  }\r\n\r\n  // 5. Update Allocated Size Counter\r\n  const countElem = document.getElementById('allocated-size-count');\r\n  const totalAllocated = Object.values(tshirtState.sizeDistribution).reduce((a, b) => a + b, 0);\r\n  if (countElem) {\r\n    countElem.textContent = `${totalAllocated}/${qty} Selected`;\r\n    countElem.style.color = totalAllocated === qty ? '#15803d' : '#dc2626';\r\n  }\r\n\r\n  // 6. Update Add to Cart Button CTA\r\n  const addBtn = document.getElementById('btn-add-tshirt-cart');\r\n  if (addBtn) {\r\n    const fitTitle = tshirtState.fit || 'Custom T-Shirt';\r\n    addBtn.innerHTML = `<i class=\"fa-solid fa-cart-shopping\"></i> Add ${fitTitle} to Cart \u2022 \u20B9${totalPrice.toLocaleString('en-IN')}`;\r\n  }\r\n};\r\n\r\nwindow.updateAuthCheckboxVisibility = function () {\r\n  const authBox = document.getElementById('tshirt-auth-step-box');\r\n  if (!authBox) return;\r\n\r\n  const hasLogo1 = tshirtState.artworkDataUrl && tshirtState.artworkDataUrl.length > 0;\r\n  const hasLogo2 = tshirtState.artworkDataUrl2 && tshirtState.artworkDataUrl2.length > 0;\r\n  const hasText = tshirtState.customText && tshirtState.customText.trim().length > 0;\r\n\r\n  if (hasLogo1 || hasLogo2 || hasText) {\r\n    authBox.style.display = 'block';\r\n  } else {\r\n    authBox.style.display = 'none';\r\n    const checkbox = document.getElementById('tshirt-auth-checkbox');\r\n    if (checkbox) checkbox.checked = false;\r\n  }\r\n  if (typeof window.toggleTshirtAddToCartState === 'function') {\r\n    window.toggleTshirtAddToCartState();\r\n  }\r\n};\r\n\r\nwindow.toggleTshirtAddToCartState = function () {\r\n  const authBox = document.getElementById('tshirt-auth-step-box');\r\n  const checkbox = document.getElementById('tshirt-auth-checkbox');\r\n  const addBtn = document.getElementById('btn-add-tshirt-cart');\r\n  if (!addBtn) return;\r\n\r\n  const isOversized = tshirtState && (tshirtState.fit === 'Oversized T-Shirts' || tshirtState.fit === 'Oversized');\r\n  const minQty = isOversized ? 1 : 2;\r\n\r\n  // 1. Logo uploaded check\r\n  const hasLogo1 = tshirtState && tshirtState.artworkDataUrl && tshirtState.artworkDataUrl.length > 0;\r\n  const hasLogo2 = tshirtState && tshirtState.artworkDataUrl2 && tshirtState.artworkDataUrl2.length > 0;\r\n  const hasLogo = hasLogo1 || hasLogo2;\r\n\r\n  if (authBox) {\r\n    if (hasLogo) {\r\n      authBox.style.display = 'block';\r\n    } else {\r\n      authBox.style.display = 'none';\r\n      if (checkbox) checkbox.checked = false;\r\n    }\r\n  }\r\n\r\n  // 2. Authorization checkbox checked\r\n  const isChecked = checkbox && checkbox.checked;\r\n\r\n  // 3. Quantity selected check\r\n  const targetQty = (tshirtState && tshirtState.targetQty) ? tshirtState.targetQty : 0;\r\n  const hasValidQty = targetQty >= minQty;\r\n\r\n  // 4. Size allocation check\r\n  const sizeDist = (tshirtState && tshirtState.sizeDistribution) ? tshirtState.sizeDistribution : {};\r\n  const totalAllocated = Object.values(sizeDist).reduce((a, b) => a + b, 0);\r\n\r\n  const isSizeAllocated = totalAllocated === targetQty && totalAllocated >= minQty;\r\n\r\n  // ALL CONDITIONS MUST BE MET TO ENABLE THE BUTTON\r\n  const isEnabled = hasLogo && isChecked && hasValidQty && isSizeAllocated;\r\n\r\n  if (isEnabled) {\r\n    addBtn.removeAttribute('disabled');\r\n    addBtn.disabled = false;\r\n    addBtn.style.setProperty('opacity', '1', 'important');\r\n    addBtn.style.setProperty('cursor', 'pointer', 'important');\r\n    addBtn.style.setProperty('pointer-events', 'auto', 'important');\r\n    addBtn.style.setProperty('box-shadow', '0 8px 20px rgba(20, 61, 28, 0.3)', 'important');\r\n    addBtn.style.setProperty('filter', 'none', 'important');\r\n    addBtn.style.setProperty('background', '#143d1c', 'important');\r\n  } else {\r\n    addBtn.setAttribute('disabled', 'disabled');\r\n    addBtn.disabled = true;\r\n    addBtn.style.setProperty('opacity', '0.45', 'important');\r\n    addBtn.style.setProperty('cursor', 'not-allowed', 'important');\r\n    addBtn.style.setProperty('pointer-events', 'none', 'important');\r\n    addBtn.style.setProperty('box-shadow', 'none', 'important');\r\n    addBtn.style.setProperty('filter', 'grayscale(0.6)', 'important');\r\n    addBtn.style.setProperty('background', '#94a3b8', 'important');\r\n  }\r\n};\r\n\r\nwindow.addTshirtToCart = function () {\r\n  const authBox = document.getElementById('tshirt-auth-step-box');\r\n  const isAuthBoxVisible = authBox && authBox.style.display !== 'none';\r\n  const checkbox = document.getElementById('tshirt-auth-checkbox');\r\n  if (isAuthBoxVisible && checkbox && !checkbox.checked) {\r\n    showToast('Please accept the design authorization checkbox to proceed.');\r\n    return;\r\n  }\r\n\r\n  const isOversized = tshirtState && (tshirtState.fit === 'Oversized T-Shirts' || tshirtState.fit === 'Oversized');\r\n  const minQty = isOversized ? 1 : 2;\r\n  const qty = Math.max(minQty, tshirtState.targetQty || minQty);\r\n  const totalPrice = tshirtState.totalPrice || 1250;\r\n  const unitPrice = tshirtState.unitPrice || Math.round(totalPrice / qty);\r\n\r\n  const breakdownParts = [];\r\n  Object.keys(tshirtState.sizeDistribution).forEach(sizeKey => {\r\n    const count = tshirtState.sizeDistribution[sizeKey];\r\n    if (count > 0) {\r\n      breakdownParts.push(`${count}x ${sizeKey}`);\r\n    }\r\n  });\r\n\r\n  const sizeSummary = breakdownParts.length > 0 ? breakdownParts.join(', ') : 'Default Size';\r\n  const backPrintStr = (tshirtState.hasBackPrint || tshirtState.logoCount === 2) ? 'With Back Print' : 'No Back Print';\r\n  const specialInstrStr = tshirtState.specialInstructions ? ` [Note: ${tshirtState.specialInstructions}]` : '';\r\n\r\n  const hasBackPrint = (tshirtState.hasBackPrint || tshirtState.logoCount === 2);\r\n  const fitLower = String(tshirtState.fit || '').toLowerCase();\r\n  let customVariantId = '52875689427076';\r\n  if (fitLower.includes('polo')) {\r\n    customVariantId = hasBackPrint ? '52875687231620' : '52875687067780';\r\n  } else if (fitLower.includes('oversiz')) {\r\n    customVariantId = hasBackPrint ? '52875686379652' : '52875686215812';\r\n  } else {\r\n    customVariantId = hasBackPrint ? '52875689590916' : '52875689427076';\r\n  }\r\n\r\n  // Determine Front and Back Print Sizes across all 3 customized T-Shirt styles\r\n  let frontPrintSize = '4\" \u00D7 4\" (Left Chest)';\r\n  let backPrintSize = hasBackPrint ? '10\" \u00D7 10\" (Center Back)' : 'None';\r\n\r\n  if (fitLower.includes('oversiz')) {\r\n    frontPrintSize = '12\" \u00D7 12\" (Center Front)';\r\n    backPrintSize = hasBackPrint ? '12\" \u00D7 12\" (Center Back)' : 'None';\r\n  } else if (fitLower.includes('round')) {\r\n    const rnMode = (tshirtState && tshirtState.roundNeckFrontMode) || '4x4';\r\n    frontPrintSize = (rnMode === '10x10' || rnMode === '12x12') ? '10\" \u00D7 10\" (Center Front)' : '4\" \u00D7 4\" (Left Chest)';\r\n    backPrintSize = hasBackPrint ? '10\" \u00D7 10\" (Center Back)' : 'None';\r\n  } else {\r\n    // Polo T-Shirts\r\n    frontPrintSize = '4\" \u00D7 4\" (Left Chest)';\r\n    backPrintSize = hasBackPrint ? '10\" \u00D7 10\" (Center Back)' : 'None';\r\n  }\r\n\r\n  const itemName = `Custom ${tshirtState.fit || 'T-Shirt'} (${tshirtState.color}, Front: ${frontPrintSize}, ${backPrintStr}, ${tshirtState.finish}) - ${qty} Pcs [${sizeSummary}]${specialInstrStr}`;\r\n\r\n  const imgUrl = tshirtState.artworkDataUrl || 'assets/tshirt-main-dtg.jpg';\r\n\r\n  const customProperties = {\r\n    'T-Shirt Fit': tshirtState.fit,\r\n    'Color': tshirtState.color,\r\n    'Front Print Size': frontPrintSize,\r\n    'Back Print': backPrintStr,\r\n    'Size Breakdown': sizeSummary,\r\n    'Unit Price': `\u20B9${unitPrice.toLocaleString('en-IN')}`,\r\n    'Total Price': `\u20B9${totalPrice.toLocaleString('en-IN')}`,\r\n    'Special Instructions': tshirtState.specialInstructions || 'None'\r\n  };\r\n\r\n  if (hasBackPrint) {\r\n    customProperties['Back Print Size'] = backPrintSize;\r\n  }\r\n\r\n  if (tshirtState.artworkCdnUrl) {\r\n    customProperties['Front Artwork'] = tshirtState.artworkCdnUrl;\r\n  } else if (tshirtState.rawFile) {\r\n    customProperties['Front Artwork'] = tshirtState.rawFile;\r\n  } else if (tshirtState.artworkFile) {\r\n    customProperties['Front Artwork'] = tshirtState.artworkFile;\r\n  }\r\n\r\n  if (tshirtState.artworkCdnUrl2) {\r\n    customProperties['Back Artwork'] = tshirtState.artworkCdnUrl2;\r\n  } else if (tshirtState.rawFile2) {\r\n    customProperties['Back Artwork'] = tshirtState.rawFile2;\r\n  } else if (tshirtState.artworkFile2) {\r\n    customProperties['Back Artwork'] = tshirtState.artworkFile2;\r\n  }\r\n\r\n  handleAddToCart({\r\n    id: 'custom_tshirt_' + Date.now(),\r\n    mappedVariantId: customVariantId,\r\n    name: itemName,\r\n    price: `\u20B9${unitPrice.toLocaleString('en-IN')}`,\r\n    img: imgUrl,\r\n    quantity: qty,\r\n    properties: customProperties\r\n  });\r\n};\r\n\r\nwindow.getSizeChartAsset = function (fitKey) {\r\n  let filename = 'size-chart-roundneck.png';\r\n  const clean = (fitKey || '').toString().toLowerCase();\r\n\r\n  if (clean.includes('oversize')) {\r\n    filename = 'size-chart-oversized.png';\r\n  } else if (clean.includes('polo')) {\r\n    filename = 'size-chart-polo.png';\r\n  } else if (clean.includes('round') || clean.includes('rounded')) {\r\n    filename = 'size-chart-roundneck.png';\r\n  }\r\n\r\n  if (typeof window.getShopifyAsset === 'function') {\r\n    return window.getShopifyAsset(filename);\r\n  }\r\n  if (window.shopifyAssetMap && window.shopifyAssetMap[filename]) {\r\n    return window.shopifyAssetMap[filename];\r\n  }\r\n  return 'assets/' + filename;\r\n};\r\n\r\nwindow.updateSizeChartForCurrentFit = function (customFit) {\r\n  let fit = customFit || (typeof tshirtState !== 'undefined' && tshirtState ? tshirtState.fit : '');\r\n\r\n  if (!fit) {\r\n    const handle = (window.shopifyProductHandle || window.location.pathname || '').toLowerCase();\r\n    if (handle.includes('oversize')) fit = 'Oversized T-Shirts';\r\n    else if (handle.includes('polo')) fit = 'Polo T Shirts';\r\n    else if (handle.includes('round')) fit = 'Rounded Neck';\r\n  }\r\n\r\n  const imgUrl = window.getSizeChartAsset(fit);\r\n\r\n  // Update expandable card image\r\n  const expandImg = document.getElementById('size-chart-expand-img') || document.getElementById('size-chart-img');\r\n  if (expandImg) {\r\n    expandImg.src = imgUrl;\r\n  }\r\n\r\n  // Update banner section image\r\n  const bannerImg = document.getElementById('size-chart-banner-img') || document.querySelector('.size-chart-banner-section img');\r\n  if (bannerImg) {\r\n    bannerImg.src = imgUrl;\r\n  }\r\n\r\n  // Update card title\r\n  const titleElem = document.getElementById('size-chart-card-title') || document.getElementById('size-chart-title');\r\n  if (titleElem) {\r\n    let fitLabel = 'Round Neck';\r\n    const cleanFit = (fit || '').toLowerCase();\r\n    if (cleanFit.includes('oversize')) fitLabel = 'Oversized';\r\n    else if (cleanFit.includes('polo')) fitLabel = 'Polo';\r\n    else if (cleanFit.includes('round')) fitLabel = 'Round Neck';\r\n\r\n    titleElem.innerHTML = `<i class=\"fa-solid fa-ruler-combined\" style=\"color: #0284c7;\"></i> ${fitLabel} T-Shirt Size Chart Guide (Inches)`;\r\n  }\r\n};\r\n\r\nwindow.toggleSizeChartCard = function () {\r\n  window.updateSizeChartForCurrentFit();\r\n  const box = document.getElementById('size-chart-expand-box');\r\n  if (box) {\r\n    box.style.display = (box.style.display === 'none' || !box.style.display) ? 'block' : 'none';\r\n  }\r\n};\r\n\r\nconst tshirtDefaultThumbs = [\r\n  'assets/polo-black.jpg',\r\n  'assets/tshirt-screen-print.jpg',\r\n  'assets/tshirt-hoodie-embroidery.jpg',\r\n  'assets/tshirt-polo-shirt.jpg'\r\n];\r\n\r\nwindow.changeTshirtImageIndex = function (idx) {\r\n  currentTshirtImgIndex = idx;\r\n\r\n  const mainImg = document.getElementById('tshirt-main-product-img');\r\n  if (mainImg) {\r\n    const thumbs = document.querySelectorAll('#tshirt-gallery-thumbs-container .gallery-thumb-card img');\r\n    let targetSrc = '';\r\n    if (thumbs && thumbs[idx]) {\r\n      targetSrc = thumbs[idx].getAttribute('src');\r\n    } else if (tshirtDefaultThumbs[idx]) {\r\n      targetSrc = tshirtDefaultThumbs[idx];\r\n    }\r\n\r\n    if (targetSrc) {\r\n      const finalSrc = window.getShopifyAsset ? window.getShopifyAsset(targetSrc) : targetSrc;\r\n      mainImg.src = finalSrc;\r\n      mainImg.style.animation = 'none';\r\n      void mainImg.offsetWidth;\r\n      mainImg.style.animation = 'fadeIn 0.4s ease';\r\n\r\n      const resultBox = document.getElementById('tshirt-zoom-result-box');\r\n      if (resultBox && tshirtState.viewMode !== 'canvas') {\r\n        resultBox.style.backgroundImage = `url('${finalSrc}')`;\r\n      }\r\n    }\r\n  }\r\n\r\n  const dots = document.querySelectorAll('#tshirt-gallery-dots-container .gallery-dot');\r\n  dots.forEach((dot, i) => {\r\n    if (i === idx) dot.classList.add('active');\r\n    else dot.classList.remove('active');\r\n  });\r\n\r\n  const thumbCards = document.querySelectorAll('#tshirt-gallery-thumbs-container .gallery-thumb-card');\r\n  thumbCards.forEach((thumb, i) => {\r\n    if (i === idx) thumb.classList.add('active');\r\n    else thumb.classList.remove('active');\r\n  });\r\n};\r\n\r\nwindow.filterTshirtCatalog = function (cat, elem) {\r\n  document.querySelectorAll('.inbuilt-filter-btn').forEach(b => b.classList.remove('active'));\r\n  if (elem) elem.classList.add('active');\r\n\r\n  const target = (cat || 'all').toLowerCase().trim();\r\n\r\n  document.querySelectorAll('#inbuilt-tshirt-catalog-grid .inbuilt-product-card').forEach(card => {\r\n    const cardCat = (card.getAttribute('data-category') || card.dataset.category || '').toLowerCase();\r\n    const cardText = (card.textContent || '').toLowerCase();\r\n\r\n    if (target === 'all' || cardCat.includes(target) || cardText.includes(target)) {\r\n      card.style.display = 'flex';\r\n      card.style.animation = 'fadeIn 0.3s ease';\r\n    } else {\r\n      card.style.display = 'none';\r\n    }\r\n  });\r\n};\r\n\r\nwindow.switchStickerMode = function (mode) {\r\n  const btnInbuilt = document.getElementById('tab-btn-inbuilt');\r\n  const btnCustom = document.getElementById('tab-btn-custom');\r\n  if (!btnInbuilt && !btnCustom) return;\r\n\r\n  const inbuiltView = document.getElementById('inbuilt-mode-view');\r\n  const customView = document.getElementById('custom-mode-view');\r\n  if (!inbuiltView || !customView) return;\r\n\r\n  if (mode === 'custom') {\r\n    inbuiltView.classList.remove('active');\r\n    inbuiltView.style.display = 'none';\r\n    customView.classList.add('active');\r\n    customView.style.display = 'block';\r\n    if (btnInbuilt) {\r\n      btnInbuilt.classList.remove('active');\r\n      btnInbuilt.style.background = 'transparent';\r\n      btnInbuilt.style.color = 'var(--dark-main)';\r\n    }\r\n    if (btnCustom) {\r\n      btnCustom.classList.add('active');\r\n      btnCustom.style.background = '#A8D4B0';\r\n      btnCustom.style.color = '#143d1c';\r\n    }\r\n    window.location.hash = 'custom';\r\n    if (typeof window.syncProductConfigHeight === 'function') {\r\n      setTimeout(window.syncProductConfigHeight, 30);\r\n      setTimeout(window.syncProductConfigHeight, 150);\r\n    }\r\n  } else {\r\n    customView.classList.remove('active');\r\n    customView.style.display = 'none';\r\n    inbuiltView.classList.add('active');\r\n    inbuiltView.style.display = 'block';\r\n    if (btnCustom) {\r\n      btnCustom.classList.remove('active');\r\n      btnCustom.style.background = 'transparent';\r\n      btnCustom.style.color = 'var(--dark-main)';\r\n    }\r\n    if (btnInbuilt) {\r\n      btnInbuilt.classList.add('active');\r\n      btnInbuilt.style.background = '#A8D4B0';\r\n      btnInbuilt.style.color = '#143d1c';\r\n    }\r\n    if (typeof window.shuffleInbuiltStickers === 'function') {\r\n      window.shuffleInbuiltStickers();\r\n    }\r\n    window.location.hash = 'inbuilt';\r\n  }\r\n};\r\n\r\nwindow.switchTshirtPageMode = function (mode) {\r\n  const btnInbuilt = document.getElementById('btn-mode-inbuilt');\r\n  const btnCustom = document.getElementById('btn-mode-custom');\r\n  if (!btnInbuilt && !btnCustom) return;\r\n\r\n  const inbuiltView = document.getElementById('inbuilt-mode-view');\r\n  const singleView = document.getElementById('single-product-mode-view');\r\n  const customView = document.getElementById('custom-mode-view');\r\n  const extraSections = document.querySelectorAll('.size-chart-banner-section, .order-process-banner-section, .about-brand-section, .related-products-section');\r\n\r\n  if (!inbuiltView || !customView) return;\r\n\r\n  const heroBanner = document.querySelector('.stickers-hero-banner');\r\n  if (heroBanner) heroBanner.style.display = 'block';\r\n  extraSections.forEach(sec => sec.style.display = 'block');\r\n  if (singleView) {\r\n    singleView.style.display = 'none';\r\n    singleView.classList.remove('active');\r\n  }\r\n\r\n  if (mode === 'custom') {\r\n    inbuiltView.classList.remove('active');\r\n    inbuiltView.style.display = 'none';\r\n    customView.classList.add('active');\r\n    customView.style.display = 'block';\r\n    if (btnInbuilt) {\r\n      btnInbuilt.classList.remove('active');\r\n      btnInbuilt.style.background = 'transparent';\r\n      btnInbuilt.style.color = 'var(--dark-main)';\r\n    }\r\n    if (btnCustom) {\r\n      btnCustom.classList.add('active');\r\n      btnCustom.style.background = '#A8D4B0';\r\n      btnCustom.style.color = '#143d1c';\r\n    }\r\n    window.location.hash = 'custom';\r\n    if (typeof window.syncProductConfigHeight === 'function') {\r\n      setTimeout(window.syncProductConfigHeight, 30);\r\n      setTimeout(window.syncProductConfigHeight, 150);\r\n    }\r\n  } else {\r\n    customView.classList.remove('active');\r\n    customView.style.display = 'none';\r\n    inbuiltView.classList.add('active');\r\n    inbuiltView.style.display = 'block';\r\n    if (btnCustom) {\r\n      btnCustom.classList.remove('active');\r\n      btnCustom.style.background = 'transparent';\r\n      btnCustom.style.color = 'var(--dark-main)';\r\n    }\r\n    if (btnInbuilt) {\r\n      btnInbuilt.classList.add('active');\r\n      btnInbuilt.style.background = '#A8D4B0';\r\n      btnInbuilt.style.color = '#143d1c';\r\n    }\r\n    window.location.hash = 'inbuilt';\r\n  }\r\n};\r\n\r\nwindow.currentStickerMainCategory = 'all';\r\nwindow.currentStickerSubCategory = 'all';\r\n\r\nwindow.shuffleInbuiltStickers = function (force) {\r\n  try {\r\n    const grid = document.getElementById('inbuilt-catalog-grid');\r\n    if (!grid) return;\r\n    if (window.__inbuiltStickersShuffled && !force) return;\r\n    const cards = Array.from(grid.querySelectorAll('.inbuilt-product-card'));\r\n    if (cards.length <= 1) return;\r\n\r\n    for (let i = cards.length - 1; i > 0; i--) {\r\n      const j = Math.floor(Math.random() * (i + 1));\r\n      const temp = cards[i];\r\n      cards[i] = cards[j];\r\n      cards[j] = temp;\r\n    }\r\n\r\n    const frag = document.createDocumentFragment();\r\n    cards.forEach(card => frag.appendChild(card));\r\n    grid.appendChild(frag);\r\n    window.__inbuiltStickersShuffled = true;\r\n  } catch (err) {\r\n    console.warn('Inbuilt sticker shuffle error:', err);\r\n  }\r\n};\r\n\r\nwindow.filterInbuiltMainCategory = function (category, btnElement) {\r\n  window.currentStickerMainCategory = category;\r\n  window.currentStickerSubCategory = 'all';\r\n\r\n  document.querySelectorAll('.inbuilt-chip-btn').forEach(btn => {\r\n    btn.classList.remove('active');\r\n    btn.style.background = 'transparent';\r\n    btn.style.color = 'var(--dark-main)';\r\n  });\r\n  if (btnElement) {\r\n    btnElement.classList.add('active');\r\n    btnElement.style.background = '#A8D4B0';\r\n    btnElement.style.color = '#143d1c';\r\n  }\r\n\r\n  const subCatBar = document.getElementById('uv-dtf-subcategories-bar');\r\n  if (subCatBar) {\r\n    subCatBar.style.display = 'none';\r\n  }\r\n  window.currentStickerSubCategory = 'all';\r\n\r\n  window.applyInbuiltStickerFilter();\r\n};\r\n\r\nwindow.filterInbuiltSubCategory = function (subCategory, btnElement) {\r\n  window.currentStickerSubCategory = subCategory;\r\n\r\n  const subCatBar = document.getElementById('uv-dtf-subcategories-bar');\r\n  if (subCatBar) {\r\n    subCatBar.querySelectorAll('.inbuilt-subchip-btn').forEach(btn => {\r\n      btn.classList.remove('active');\r\n      btn.style.background = '#ffffff';\r\n      btn.style.color = 'var(--dark-main)';\r\n    });\r\n  }\r\n\r\n  if (btnElement) {\r\n    btnElement.classList.add('active');\r\n    btnElement.style.background = '#00b894';\r\n    btnElement.style.color = '#ffffff';\r\n  }\r\n\r\n  window.applyInbuiltStickerFilter();\r\n};\r\n\r\nwindow.filterInbuiltCategory = function (category, btnElement) {\r\n  window.filterInbuiltMainCategory(category, btnElement);\r\n};\r\n\r\nwindow.applyInbuiltStickerFilter = function () {\r\n  const mainCat = window.currentStickerMainCategory || 'all';\r\n  const subCat = window.currentStickerSubCategory || 'all';\r\n  const searchVal = (document.getElementById('inbuilt-search-input')?.value || '').toLowerCase().trim();\r\n\r\n  const cards = document.querySelectorAll('#inbuilt-catalog-grid .inbuilt-product-card');\r\n  cards.forEach(card => {\r\n    const cardMain = card.dataset.category || '';\r\n    const cardSub = card.dataset.subcategory || '';\r\n    const title = card.querySelector('.inbuilt-card-title')?.textContent.toLowerCase() || '';\r\n    const catText = card.querySelector('.inbuilt-card-category')?.textContent.toLowerCase() || '';\r\n\r\n    let matchMain = (mainCat === 'all' || cardMain === mainCat);\r\n    let matchSub = (subCat === 'all' || cardSub === subCat);\r\n    let matchSearch = (!searchVal || title.includes(searchVal) || catText.includes(searchVal));\r\n\r\n    if (matchMain && matchSub && matchSearch) {\r\n      card.style.display = 'flex';\r\n    } else {\r\n      card.style.display = 'none';\r\n    }\r\n  });\r\n};\r\n\r\nwindow.filterInbuiltSearch = function (query) {\r\n  window.applyInbuiltStickerFilter();\r\n};\r\n\r\nwindow.selectInbuiltPack = function (chipElement, price) {\r\n  const parent = chipElement.closest('.inbuilt-product-card');\r\n  if (!parent) return;\r\n  parent.querySelectorAll('.inbuilt-pack-opt').forEach(opt => opt.classList.remove('active'));\r\n  chipElement.classList.add('active');\r\n  const priceElem = parent.querySelector('.card-price-num');\r\n  if (priceElem) priceElem.textContent = price;\r\n};\r\n\r\nwindow.selectInbuiltSize = function (element) {\r\n  const parent = element.closest('.inbuilt-pack-selector');\r\n  if (!parent) return;\r\n  parent.querySelectorAll('.inbuilt-pack-opt').forEach(opt => opt.classList.remove('active'));\r\n  element.classList.add('active');\r\n};\r\n\r\nwindow.addInbuiltCardToCart = function (btnElement) {\r\n  const card = btnElement.closest('.inbuilt-product-card');\r\n  if (!card) return;\r\n  const title = card.querySelector('.inbuilt-card-title')?.textContent.trim() || 'Item';\r\n  const packOpt = card.querySelector('.inbuilt-pack-opt.active')?.textContent.trim() || '';\r\n  const imgUrl = card.querySelector('.inbuilt-card-media img')?.src || '';\r\n\r\n  let priceNum = 0;\r\n  const priceNumElem = card.querySelector('.card-price-num');\r\n  if (priceNumElem) {\r\n    priceNum = parseFloat(priceNumElem.textContent.replace(/,/g, '')) || 0;\r\n  }\r\n\r\n  if (priceNum <= 0) {\r\n    const priceTagElem = card.querySelector('.inbuilt-price-tag');\r\n    if (priceTagElem) {\r\n      const clone = priceTagElem.cloneNode(true);\r\n      clone.querySelectorAll('strike, del, s, style, script, .strike, .original-price').forEach(el => el.remove());\r\n      const cleanText = clone.textContent.replace(/[^0-9.]/g, '');\r\n      priceNum = parseFloat(cleanText) || 0;\r\n    }\r\n  }\r\n\r\n  if (priceNum < 300) {\r\n    const lowerTitle = title.toLowerCase();\r\n    if (lowerTitle.includes('hangry') || lowerTitle.includes('naruto') || lowerTitle.includes('one piece') || lowerTitle.includes('pink panther') || lowerTitle.includes('999')) priceNum = 999;\r\n    else if (lowerTitle.includes('hoodie') || lowerTitle.includes('sweatshirt')) priceNum = 1299;\r\n    else if (lowerTitle.includes('oversiz')) priceNum = 799;\r\n    else if (lowerTitle.includes('graphic') || lowerTitle.includes('organic') || lowerTitle.includes('dtg')) priceNum = 499;\r\n    else if (lowerTitle.includes('round')) priceNum = 599;\r\n    else if (lowerTitle.includes('polo')) priceNum = 625;\r\n    else if (lowerTitle.includes('sticker') || lowerTitle.includes('dtf')) priceNum = 150;\r\n    else if (lowerTitle.includes('cap')) priceNum = 250;\r\n    else priceNum = 799;\r\n  }\r\n\r\n  handleAddToCart({\r\n    id: `inbuilt-${Date.now()}`,\r\n    name: packOpt ? `${title} (${packOpt})` : title,\r\n    price: `\u20B9${priceNum.toLocaleString('en-IN')}`,\r\n    img: imgUrl,\r\n    quantity: 1\r\n  });\r\n};\r\n\r\n/* ==========================================================================\r\n   In-Built Sticker Quick-View Modal Controller\r\n   ========================================================================== */\r\nwindow.currentInbuiltModalProduct = null;\r\n\r\nwindow.openInbuiltStickerModal = function (cardElement) {\r\n  if (!cardElement) return;\r\n\r\n  let rawTitle = cardElement.querySelector('.inbuilt-card-title')?.textContent.trim() || 'Custom Sticker';\r\n  const title = rawTitle.replace(/trasfer/gi, 'Transfer');\r\n  const category = cardElement.querySelector('.inbuilt-card-category')?.textContent.trim() || 'Sticker';\r\n  const reviews = cardElement.querySelector('.inbuilt-rating-stars span')?.textContent.trim() || '(24 reviews)';\r\n  const priceText = cardElement.querySelector('.card-price-num')?.textContent.trim() || '150';\r\n  const mainImgSrc = cardElement.querySelector('.inbuilt-card-media img')?.src || '';\r\n  let basePriceNum = parseFloat(priceText.replace(/,/g, '')) || 0;\r\n  if (basePriceNum < 100) basePriceNum = 150;\r\n\r\n  window.currentInbuiltModalProduct = {\r\n    title: title,\r\n    category: category,\r\n    basePrice: basePriceNum,\r\n    mainImg: mainImgSrc,\r\n    selectedQty: 1\r\n  };\r\n\r\n  // Populate Modal Fields\r\n  const titleElem = document.getElementById('inbuilt-modal-title');\r\n  if (titleElem) titleElem.textContent = title;\r\n\r\n  const catElem = document.getElementById('inbuilt-modal-category');\r\n  if (catElem) catElem.textContent = category;\r\n\r\n  const revElem = document.getElementById('inbuilt-modal-reviews');\r\n  if (revElem) revElem.textContent = `(4.9 \u2605 \u2022 ${reviews.replace(/[()]/g, '')})`;\r\n\r\n  const priceElem = document.getElementById('inbuilt-modal-price');\r\n  if (priceElem) priceElem.textContent = `\u20B9${basePriceNum.toLocaleString('en-IN')}`;\r\n\r\n  const mainImgElem = document.getElementById('inbuilt-modal-main-img');\r\n  if (mainImgElem) {\r\n    mainImgElem.src = mainImgSrc;\r\n    mainImgElem.alt = title;\r\n  }\r\n\r\n  // Dynamic Category Description & Features List\r\n  const catKey = (cardElement.getAttribute('data-category') || category || '').toLowerCase();\r\n  const isMugCategory = catKey.includes('mug');\r\n  const isTumblerCategory = catKey.includes('tumbler');\r\n  const hasAddonOption = isMugCategory || isTumblerCategory;\r\n  let cardVariantId = cardElement.getAttribute('data-variant-id') || null;\r\n  if (!cardVariantId && typeof inbuiltProductVariantMap !== 'undefined' && inbuiltProductVariantMap) {\r\n    if (inbuiltProductVariantMap[title]) {\r\n      cardVariantId = inbuiltProductVariantMap[title];\r\n    } else {\r\n      const normLookup = title.toLowerCase().replace(/[^a-z0-9]/g, '');\r\n      const mapKeys = Object.keys(inbuiltProductVariantMap).filter(k => k.length > 4);\r\n      for (const k of mapKeys) {\r\n        const normK = k.toLowerCase().replace(/[^a-z0-9]/g, '');\r\n        if (normLookup.includes(normK) || normK.includes(normLookup)) {\r\n          cardVariantId = inbuiltProductVariantMap[k];\r\n          break;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  window.currentInbuiltModalProduct = {\r\n    title: title,\r\n    category: category,\r\n    basePrice: basePriceNum,\r\n    mainImg: mainImgSrc,\r\n    variantId: cardVariantId,\r\n    selectedQty: 1,\r\n    isMugCategory: isMugCategory,\r\n    isTumblerCategory: isTumblerCategory,\r\n    includeMugAddon: false,\r\n    applicationPreference: 'Pre-Applied'\r\n  };\r\n\r\n  // Toggle Mug/Tumbler Option Wrapper visibility & update labels\r\n  const mugWrapper = document.getElementById('inbuilt-modal-mug-options-wrapper');\r\n  const addonLabelElem = document.getElementById('inbuilt-modal-addon-label-text');\r\n  const addonBadgeElem = document.getElementById('inbuilt-modal-addon-badge-text');\r\n  const appWrapper = document.getElementById('inbuilt-modal-application-wrapper');\r\n  const preDescElem = document.getElementById('inbuilt-app-preapplied-desc');\r\n  const diyDescElem = document.getElementById('inbuilt-app-diykit-desc');\r\n\r\n  if (mugWrapper) {\r\n    if (hasAddonOption) {\r\n      mugWrapper.style.display = 'block';\r\n      const sheetRadio = document.querySelector('input[name=\"inbuilt_mug_option\"][value=\"sheet_only\"]');\r\n      if (sheetRadio) sheetRadio.checked = true;\r\n\r\n      const vesselWord = isTumblerCategory ? 'tumbler' : 'mug';\r\n\r\n      if (isTumblerCategory) {\r\n        if (addonLabelElem) addonLabelElem.textContent = 'Add Tumbler (+\u20B9200)';\r\n        if (addonBadgeElem) addonBadgeElem.textContent = 'Glass Tumbler';\r\n      } else {\r\n        if (addonLabelElem) addonLabelElem.textContent = 'Add Mug (+\u20B9200)';\r\n        if (addonBadgeElem) addonBadgeElem.textContent = 'Ceramic Mug';\r\n      }\r\n\r\n      // Update descriptions dynamically (strictly tumbler or mug, never both!)\r\n      if (preDescElem) preDescElem.textContent = `Sticker applied to your ${vesselWord}.`;\r\n      if (diyDescElem) diyDescElem.textContent = `Receive the sticker and ${vesselWord} separately; apply it yourself.`;\r\n\r\n      // Hide sub-options initially because sheet_only is selected by default\r\n      if (appWrapper) appWrapper.style.display = 'none';\r\n\r\n      // Reset application radio to Pre-Applied\r\n      const preRadio = document.querySelector('input[name=\"inbuilt_app_pref\"][value=\"Pre-Applied\"]');\r\n      if (preRadio) preRadio.checked = true;\r\n\r\n      // Reset card borders\r\n      const lblSheet = document.getElementById('lbl-mug-opt-sheet');\r\n      const lblMug = document.getElementById('lbl-mug-opt-withmug');\r\n      if (lblSheet) {\r\n        lblSheet.style.borderColor = '#00b894';\r\n        lblSheet.style.borderWidth = '2px';\r\n        lblSheet.style.background = '#f0fdf4';\r\n      }\r\n      if (lblMug) {\r\n        lblMug.style.borderColor = '#e2e8f0';\r\n        lblMug.style.borderWidth = '1.5px';\r\n        lblMug.style.background = '#ffffff';\r\n      }\r\n      const lblPre = document.getElementById('lbl-app-preapplied');\r\n      const lblDiy = document.getElementById('lbl-app-diykit');\r\n      if (lblPre) {\r\n        lblPre.style.borderColor = '#00b894';\r\n        lblPre.style.borderWidth = '2px';\r\n        lblPre.style.background = '#f0fdf4';\r\n      }\r\n      if (lblDiy) {\r\n        lblDiy.style.borderColor = '#e2e8f0';\r\n        lblDiy.style.borderWidth = '1.5px';\r\n        lblDiy.style.background = '#ffffff';\r\n      }\r\n    } else {\r\n      mugWrapper.style.display = 'none';\r\n      if (appWrapper) appWrapper.style.display = 'none';\r\n    }\r\n  }\r\n\r\n  let descHtml = '';\r\n  let features = [];\r\n  let noteHtml = '';\r\n\r\n  if (catKey.includes('tumbler')) {\r\n    descHtml = `\r\n      <p style=\"margin: 0 0 10px 0;\">Give your tumblers a personalised touch with our ready-to-apply UV DTF transfer stickers. Use the complete design as shown, or cut out individual elements from the sheet and arrange them however you like.</p>\r\n      <p style=\"margin: 0 0 10px 0;\">Perfect for tumblers, bottles, mugs, glassware and other smooth, hard surfaces.</p>\r\n      <p style=\"margin: 0 0 10px 0; font-weight: 700; color: #0f172a;\">How it works: Cut \u2192 Peel \u2192 Position \u2192 Rub \u2192 Peel</p>\r\n    `;\r\n    features = [\r\n      '\u2713 Ready to Apply',\r\n      '\u2713 No Heat or Special Equipment Required',\r\n      '\u2713 Suitable for Smooth, Hard Surfaces'\r\n    ];\r\n    noteHtml = `<i class=\"fa-solid fa-circle-info\" style=\"color: #f97316;\"></i> <strong>Please note:</strong> \u20B9150 includes the UV DTF transfer sheet only. The tumbler shown in the preview is not included and can be added separately for \u20B9200.`;\r\n  } else if (isMugCategory) {\r\n    descHtml = `\r\n      <p style=\"margin: 0 0 10px 0;\">Give your mugs a personalised touch with our ready-to-apply UV DTF transfers. Apply the complete design or cut out individual elements and arrange them your way.</p>\r\n      <p style=\"margin: 0 0 10px 0;\">Perfect for mugs, tumblers, bottles, glassware and other smooth, hard surfaces.</p>\r\n      <p style=\"margin: 0 0 10px 0; font-weight: 700; color: #0f172a;\">How it works: Cut \u2192 Peel \u2192 Position \u2192 Rub \u2192 Peel</p>\r\n    `;\r\n    features = [\r\n      '\u2713 Ready to Apply',\r\n      '\u2713 No Heat or Special Equipment Required',\r\n      '\u2713 Suitable for Smooth, Hard Surfaces'\r\n    ];\r\n    noteHtml = `<i class=\"fa-solid fa-circle-info\" style=\"color: #f97316;\"></i> <strong>Please note:</strong> \u20B9150 includes the UV DTF transfer sheet only. The mug shown in the preview is not included and can be added separately for \u20B9200.`;\r\n  } else {\r\n    descHtml = `\r\n      <p style=\"margin: 0 0 8px 0;\">Give your everyday items a personalised touch with our UV DTF transfer stickers. Use the complete design, or cut out individual elements from the sheet and arrange them however you like.</p>\r\n      <p style=\"margin: 0 0 8px 0;\">Perfect for tumblers, bottles, mugs, glassware, jars and other smooth, hard surfaces. Simply cut, peel, position, press and transfer. No heat or special equipment required.</p>\r\n      <p style=\"margin: 0; font-weight: 700; color: #0f172a;\">One sheet, endless ways to make it yours.</p>\r\n    `;\r\n    features = [\r\n      '\u2713 Premium Waterproof & Scratch-Resistant UV DTF Transfer',\r\n      '\u2713 Easy 3-Step Application: Peel, Stick & Rub',\r\n      '\u2713 High-Gloss Finish & Vibrant Long-Lasting Colors',\r\n      '\u2713 Strong Adhesive \u2014 Perfect for Tumblers, Mugs, Glassware & Water Bottles'\r\n    ];\r\n  }\r\n\r\n  const descTextElem = document.getElementById('inbuilt-modal-desc-text');\r\n  if (descTextElem) descTextElem.innerHTML = descHtml;\r\n\r\n  const descListElem = document.getElementById('inbuilt-modal-desc-list');\r\n  if (descListElem) {\r\n    descListElem.innerHTML = features.map(item => `<li style=\"margin-bottom: 4px;\">${item}</li>`).join('');\r\n  }\r\n\r\n  const descNoteElem = document.getElementById('inbuilt-modal-desc-note');\r\n  if (descNoteElem) {\r\n    if (noteHtml) {\r\n      descNoteElem.innerHTML = `<div style=\"padding: 10px 14px; background: #fff7ed; border: 1px solid #ffedd5; border-radius: 10px; font-size: 12px; color: #9a3412; font-weight: 600;\">${noteHtml}</div>`;\r\n      descNoteElem.style.display = 'block';\r\n    } else {\r\n      descNoteElem.innerHTML = '';\r\n      descNoteElem.style.display = 'none';\r\n    }\r\n  }\r\n\r\n  // Handle Thumbnails Gallery (deduplicated by filename)\r\n  const thumbsContainer = document.getElementById('inbuilt-modal-thumbs');\r\n  if (thumbsContainer) {\r\n    thumbsContainer.innerHTML = '';\r\n    const images = [];\r\n    const seenFilenames = new Set();\r\n\r\n    const addImageUrl = (url) => {\r\n      if (!url) return;\r\n      const cleanUrl = url.trim();\r\n      if (!cleanUrl) return;\r\n      const filename = cleanUrl.split('?')[0].split('#')[0].split('/').pop().toLowerCase();\r\n      if (filename && !seenFilenames.has(filename)) {\r\n        seenFilenames.add(filename);\r\n        images.push(cleanUrl);\r\n      }\r\n    };\r\n\r\n    // 1. Add main image\r\n    addImageUrl(mainImgSrc);\r\n\r\n    // 2. Add data-images from card if available\r\n    const dataImgs = cardElement.getAttribute('data-images');\r\n    if (dataImgs) {\r\n      dataImgs.split(',').forEach(url => addImageUrl(url));\r\n    }\r\n\r\n    // 3. Ensure 2nd sizing guide photo is included for all Tumbler & Mug items in pop-up modal\r\n    const catLower = ((cardElement.getAttribute('data-category') || '') + ' ' + (category || '')).toLowerCase();\r\n    const isTumbler = catLower.includes('tumbler');\r\n    const isMug = catLower.includes('mug');\r\n\r\n    if (isTumbler) {\r\n      const guideUrl = (typeof window.getShopifyAsset === 'function') ? window.getShopifyAsset('tumbler-sizing-guide.png') : 'assets/tumbler-sizing-guide.png';\r\n      addImageUrl(guideUrl);\r\n    } else if (isMug) {\r\n      const guideUrl = (typeof window.getShopifyAsset === 'function') ? window.getShopifyAsset('mug-sizing-guide.png') : 'assets/mug-sizing-guide.png';\r\n      addImageUrl(guideUrl);\r\n    }\r\n\r\n    if (images.length > 1) {\r\n      images.forEach((imgUrl, idx) => {\r\n        const thumbBtn = document.createElement('div');\r\n        thumbBtn.style.cssText = `width: 54px; height: 54px; border-radius: 10px; border: 2px solid ${idx === 0 ? '#00b894' : '#cbd5e1'}; overflow: hidden; cursor: pointer; background: #ffffff; transition: all 0.2s ease;`;\r\n        thumbBtn.innerHTML = `<img src=\"${imgUrl}\" alt=\"Thumbnail\" style=\"width: 100%; height: 100%; object-fit: contain;\">`;\r\n        thumbBtn.onclick = function () {\r\n          window.switchInbuiltModalImage(this, imgUrl);\r\n        };\r\n        thumbsContainer.appendChild(thumbBtn);\r\n      });\r\n      thumbsContainer.style.display = 'flex';\r\n    } else {\r\n      thumbsContainer.style.display = 'none';\r\n    }\r\n  }\r\n\r\n  // Reset Quantity\r\n  const qtyInput = document.getElementById('inbuilt-modal-qty-input');\r\n  if (qtyInput) qtyInput.value = \"1\";\r\n\r\n  // Reset chips active state\r\n  document.querySelectorAll('.inbuilt-modal-qty-chip').forEach((chip, idx) => {\r\n    if (idx === 0) {\r\n      chip.classList.add('active');\r\n      chip.style.background = '#A8D4B0';\r\n      chip.style.color = '#143d1c';\r\n    } else {\r\n      chip.classList.remove('active');\r\n      chip.style.background = '#ffffff';\r\n      chip.style.color = '#334155';\r\n    }\r\n  });\r\n\r\n  // Display Backdrop Modal\r\n  const backdrop = document.getElementById('inbuilt-product-modal-backdrop');\r\n  if (backdrop) {\r\n    backdrop.style.display = 'flex';\r\n    document.body.style.overflow = 'hidden';\r\n  }\r\n};\r\n\r\nwindow.closeInbuiltStickerModal = function (e) {\r\n  if (e && e.target && e.target.id !== 'inbuilt-product-modal-backdrop') return;\r\n  const backdrop = document.getElementById('inbuilt-product-modal-backdrop');\r\n  if (backdrop) {\r\n    backdrop.style.display = 'none';\r\n    document.body.style.overflow = '';\r\n  }\r\n};\r\n\r\nwindow.switchInbuiltModalImage = function (thumbElem, imgSrc) {\r\n  const mainImg = document.getElementById('inbuilt-modal-main-img');\r\n  if (mainImg) {\r\n    mainImg.style.opacity = '0.4';\r\n    setTimeout(() => {\r\n      mainImg.src = imgSrc;\r\n      mainImg.style.opacity = '1';\r\n    }, 150);\r\n  }\r\n\r\n  if (thumbElem) {\r\n    const parent = thumbElem.parentElement;\r\n    if (parent) {\r\n      parent.querySelectorAll('div').forEach(d => d.style.borderColor = '#cbd5e1');\r\n      thumbElem.style.borderColor = '#00b894';\r\n    }\r\n  }\r\n};\r\n\r\nwindow.toggleInbuiltMugAddon = function (optVal) {\r\n  if (!window.currentInbuiltModalProduct) return;\r\n  const isWithMug = (optVal === 'with_mug');\r\n  window.currentInbuiltModalProduct.includeMugAddon = isWithMug;\r\n\r\n  const lblSheet = document.getElementById('lbl-mug-opt-sheet');\r\n  const lblMug = document.getElementById('lbl-mug-opt-withmug');\r\n  const appWrapper = document.getElementById('inbuilt-modal-application-wrapper');\r\n\r\n  if (isWithMug) {\r\n    if (lblSheet) {\r\n      lblSheet.style.borderColor = '#e2e8f0';\r\n      lblSheet.style.borderWidth = '1.5px';\r\n      lblSheet.style.background = '#ffffff';\r\n    }\r\n    if (lblMug) {\r\n      lblMug.style.borderColor = '#00b894';\r\n      lblMug.style.borderWidth = '2px';\r\n      lblMug.style.background = '#f0fdf4';\r\n    }\r\n    if (appWrapper) {\r\n      appWrapper.style.display = 'block';\r\n    }\r\n    // Default to Pre-Applied if not set\r\n    if (!window.currentInbuiltModalProduct.applicationPreference) {\r\n      window.currentInbuiltModalProduct.applicationPreference = 'Pre-Applied';\r\n    }\r\n    const currentPref = window.currentInbuiltModalProduct.applicationPreference;\r\n    window.toggleInbuiltAppPreference(currentPref);\r\n  } else {\r\n    if (lblSheet) {\r\n      lblSheet.style.borderColor = '#00b894';\r\n      lblSheet.style.borderWidth = '2px';\r\n      lblSheet.style.background = '#f0fdf4';\r\n    }\r\n    if (lblMug) {\r\n      lblMug.style.borderColor = '#e2e8f0';\r\n      lblMug.style.borderWidth = '1.5px';\r\n      lblMug.style.background = '#ffffff';\r\n    }\r\n    if (appWrapper) {\r\n      appWrapper.style.display = 'none';\r\n    }\r\n  }\r\n\r\n  const qty = parseInt(document.getElementById('inbuilt-modal-qty-input')?.value || '1', 10) || 1;\r\n  window.updateInbuiltModalPrice(qty);\r\n};\r\n\r\nwindow.toggleInbuiltAppPreference = function (pref) {\r\n  if (!window.currentInbuiltModalProduct) return;\r\n  window.currentInbuiltModalProduct.applicationPreference = pref;\r\n\r\n  const isPreApplied = (pref === 'Pre-Applied');\r\n  const lblPre = document.getElementById('lbl-app-preapplied');\r\n  const lblDiy = document.getElementById('lbl-app-diykit');\r\n  const preRadio = document.querySelector('input[name=\"inbuilt_app_pref\"][value=\"Pre-Applied\"]');\r\n  const diyRadio = document.querySelector('input[name=\"inbuilt_app_pref\"][value=\"DIY Kit\"]');\r\n\r\n  if (isPreApplied) {\r\n    if (preRadio) preRadio.checked = true;\r\n    if (lblPre) {\r\n      lblPre.style.borderColor = '#00b894';\r\n      lblPre.style.borderWidth = '2px';\r\n      lblPre.style.background = '#f0fdf4';\r\n    }\r\n    if (lblDiy) {\r\n      lblDiy.style.borderColor = '#e2e8f0';\r\n      lblDiy.style.borderWidth = '1.5px';\r\n      lblDiy.style.background = '#ffffff';\r\n    }\r\n  } else {\r\n    if (diyRadio) diyRadio.checked = true;\r\n    if (lblPre) {\r\n      lblPre.style.borderColor = '#e2e8f0';\r\n      lblPre.style.borderWidth = '1.5px';\r\n      lblPre.style.background = '#ffffff';\r\n    }\r\n    if (lblDiy) {\r\n      lblDiy.style.borderColor = '#00b894';\r\n      lblDiy.style.borderWidth = '2px';\r\n      lblDiy.style.background = '#f0fdf4';\r\n    }\r\n  }\r\n};\r\n\r\nwindow.changeInbuiltModalQty = function (delta) {\r\n  const input = document.getElementById('inbuilt-modal-qty-input');\r\n  if (!input) return;\r\n  let val = parseInt(input.value || '1', 10) + delta;\r\n  if (isNaN(val) || val < 1) val = 1;\r\n  if (val > 500) val = 500;\r\n  input.value = val;\r\n\r\n  window.updateInbuiltModalPrice(val);\r\n};\r\n\r\nwindow.setInbuiltModalQty = function (qty, chipElem) {\r\n  const input = document.getElementById('inbuilt-modal-qty-input');\r\n  if (input) input.value = qty;\r\n\r\n  document.querySelectorAll('.inbuilt-modal-qty-chip').forEach(c => {\r\n    c.classList.remove('active');\r\n    c.style.background = '#ffffff';\r\n    c.style.color = '#334155';\r\n  });\r\n  if (chipElem) {\r\n    chipElem.classList.add('active');\r\n    chipElem.style.background = '#A8D4B0';\r\n    chipElem.style.color = '#143d1c';\r\n  }\r\n\r\n  window.updateInbuiltModalPrice(qty);\r\n};\r\n\r\nwindow.validateInbuiltModalQty = function (inputElem) {\r\n  let val = parseInt(inputElem.value || '1', 10);\r\n  if (isNaN(val) || val < 1) val = 1;\r\n  if (val > 500) val = 500;\r\n  inputElem.value = val;\r\n  window.updateInbuiltModalPrice(val);\r\n};\r\n\r\nwindow.updateInbuiltModalPrice = function (qty) {\r\n  if (!window.currentInbuiltModalProduct) return;\r\n  window.currentInbuiltModalProduct.selectedQty = qty;\r\n  const product = window.currentInbuiltModalProduct;\r\n  const base = product.basePrice || 150;\r\n  const addon = product.includeMugAddon ? 200 : 0;\r\n  const unitPrice = base + addon;\r\n  const totalPrice = unitPrice * qty;\r\n\r\n  const priceElem = document.getElementById('inbuilt-modal-price');\r\n  if (priceElem) {\r\n    if (product.includeMugAddon) {\r\n      const addonLabel = product.isTumblerCategory ? 'Tumbler' : 'Mug';\r\n      priceElem.innerHTML = `\u20B9${totalPrice.toLocaleString('en-IN')} <span style=\"font-size: 13px; color: #64748b; font-weight: 700;\">(\u20B9150 Sheet + \u20B9200 ${addonLabel} x ${qty})</span>`;\r\n    } else {\r\n      priceElem.textContent = `\u20B9${totalPrice.toLocaleString('en-IN')}`;\r\n    }\r\n  }\r\n};\r\n\r\nwindow.handleAddMultipleToCart = function (itemsArray, toastMessage) {\r\n  if (!Array.isArray(itemsArray) || itemsArray.length === 0) return;\r\n\r\n  const rootPath = (window.Shopify && window.Shopify.routes && window.Shopify.routes.root ? window.Shopify.routes.root : '/');\r\n  const shopifyItemsPayload = [];\r\n\r\n  itemsArray.forEach(itemData => {\r\n    const rawId = itemData.id || itemData.variant_id || itemData.mappedVariantId || '';\r\n    const itemName = itemData.name || itemData.title || itemData.product_title || 'Custom Product';\r\n    const quantity = parseInt(itemData.quantity || 1, 10);\r\n    const properties = itemData.properties || {};\r\n\r\n    let priceNum = parsePriceToNumber(itemData.price);\r\n    const itemPrice = '\u20B9' + priceNum.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\r\n    const itemImg = itemData.img || itemData.image || '';\r\n\r\n    // 1. Resolve Variant ID\r\n    let resolvedVariantId = null;\r\n    if (itemData.mappedVariantId && /^\\d{10,}$/.test(String(itemData.mappedVariantId).trim())) {\r\n      resolvedVariantId = String(itemData.mappedVariantId).trim();\r\n    } else if (/^\\d{10,}$/.test(String(rawId).trim()) && !String(rawId).startsWith('17')) {\r\n      resolvedVariantId = String(rawId).trim();\r\n    } else if (typeof inbuiltProductVariantMap !== 'undefined' && inbuiltProductVariantMap) {\r\n      const cleanName = itemName.replace(/^Product Name:\\s*/i, '').replace(/\\s*\\([^)]*\\)/g, '').trim();\r\n      const baseTitle = itemData.baseTitle ? String(itemData.baseTitle).trim() : '';\r\n      if (inbuiltProductVariantMap[baseTitle]) {\r\n        resolvedVariantId = inbuiltProductVariantMap[baseTitle];\r\n      } else if (inbuiltProductVariantMap[cleanName]) {\r\n        resolvedVariantId = inbuiltProductVariantMap[cleanName];\r\n      } else if (inbuiltProductVariantMap[itemName]) {\r\n        resolvedVariantId = inbuiltProductVariantMap[itemName];\r\n      } else {\r\n        const normLookup = (cleanName + ' ' + baseTitle).toLowerCase().replace(/[^a-z0-9]/g, '');\r\n        const mapKeys = Object.keys(inbuiltProductVariantMap).filter(k => k.length > 4).sort((a, b) => b.length - a.length);\r\n        for (const k of mapKeys) {\r\n          const normK = k.toLowerCase().replace(/[^a-z0-9]/g, '');\r\n          if (normLookup.includes(normK) || normK.includes(normLookup)) {\r\n            resolvedVariantId = inbuiltProductVariantMap[k];\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    const isVesselItem = (itemName.toLowerCase().includes('tumbler') || itemName.toLowerCase().includes('mug')) &&\r\n      !itemName.toLowerCase().includes('sheet') && !itemName.toLowerCase().includes('trasfer') && !itemName.toLowerCase().includes('transfer') && !itemName.toLowerCase().includes('sticker');\r\n\r\n    if (isVesselItem) {\r\n      resolvedVariantId = itemName.toLowerCase().includes('tumbler') ? '67643948925060' : '67643948990596';\r\n    } else if (!resolvedVariantId) {\r\n      resolvedVariantId = '67585065189508';\r\n    }\r\n\r\n    // 2. Add to Local Cart for drawer\r\n    addLocalCartItem({\r\n      id: rawId || resolvedVariantId,\r\n      mappedVariantId: resolvedVariantId,\r\n      baseTitle: itemData.baseTitle || null,\r\n      name: itemName,\r\n      price: itemPrice,\r\n      img: itemImg,\r\n      quantity: quantity,\r\n      properties: properties,\r\n      pairId: itemData.pairId || (properties && properties['_pairId']) || null,\r\n      isParentItem: Boolean(itemData.isParentItem || (properties && properties['Add-on Paired'])),\r\n      isAddon: Boolean(itemData.isAddon || (properties && properties['Paired Sticker'])),\r\n      parentItemId: itemData.parentItemId || (properties && properties['_parentItemId']) || null,\r\n      pairedItemId: itemData.pairedItemId || (properties && properties['_pairedItemId']) || null\r\n    });\r\n\r\n    // 3. Prepare Shopify payload\r\n    const shopifyQty = quantity;\r\n    shopifyItemsPayload.push({\r\n      id: Number(resolvedVariantId),\r\n      quantity: shopifyQty,\r\n      properties: properties\r\n    });\r\n  });\r\n\r\n  // 4. Send atomic POST request to Shopify /cart/add.js\r\n  fetch(rootPath + 'cart/add.js', {\r\n    method: 'POST',\r\n    headers: {\r\n      'Content-Type': 'application/json',\r\n      'Accept': 'application/json'\r\n    },\r\n    body: JSON.stringify({ items: shopifyItemsPayload })\r\n  })\r\n    .then(res => res.json())\r\n    .then(data => {\r\n      console.log('Successfully added bundle items to Shopify cart:', data);\r\n      fetchShopifyCart();\r\n    })\r\n    .catch(err => {\r\n      console.warn('Shopify bundle cart add warning (local drawer preserved):', err);\r\n    });\r\n\r\n  showToast(toastMessage || 'Added items to cart!');\r\n  openCartDrawer();\r\n};\r\n\r\nwindow.addInbuiltModalToCart = function () {\r\n  if (!window.currentInbuiltModalProduct) return;\r\n\r\n  const product = window.currentInbuiltModalProduct;\r\n  const qty = parseInt(document.getElementById('inbuilt-modal-qty-input')?.value || '1', 10) || 1;\r\n  const stickerUnitPrice = product.basePrice || 150;\r\n\r\n  if (product.includeMugAddon) {\r\n    const vesselName = product.isTumblerCategory ? 'Tumbler' : 'Mug';\r\n    const vesselVariantId = product.isTumblerCategory ? '67643948925060' : '67643948990596';\r\n    const vesselImg = product.isTumblerCategory\r\n      ? 'https://cdn.shopify.com/s/files/1/1021/4352/4996/files/tumbler.png?v=1791652264'\r\n      : 'https://cdn.shopify.com/s/files/1/1021/4352/4996/files/mug.png?v=1791652268';\r\n    const appPref = product.applicationPreference || 'Pre-Applied';\r\n    const appDetails = appPref === 'Pre-Applied'\r\n      ? `Sticker applied to your ${vesselName.toLowerCase()}`\r\n      : `Receive sticker and ${vesselName.toLowerCase()} separately; apply it yourself`;\r\n\r\n    const pairId = 'pair_' + Date.now() + '_' + Math.floor(Math.random() * 10000);\r\n    const stickerItemId = `inbuilt-sticker-${Date.now()}`;\r\n    const vesselItemId = `inbuilt-vessel-${Date.now() + 1}`;\r\n\r\n    const stickerItem = {\r\n      id: stickerItemId,\r\n      pairId: pairId,\r\n      isParentItem: true,\r\n      pairedItemId: vesselItemId,\r\n      baseTitle: product.title,\r\n      mappedVariantId: product.variantId || null,\r\n      name: `${product.title} (${qty} Pcs)`,\r\n      price: `\u20B9${(stickerUnitPrice * qty).toLocaleString('en-IN')}`,\r\n      img: product.mainImg,\r\n      quantity: qty,\r\n      properties: {\r\n        'Category': product.category || 'UV DTF Sticker',\r\n        'Add-on Paired': vesselName,\r\n        'Application Method': appPref,\r\n        'Application Details': appDetails,\r\n        '_pairId': pairId,\r\n        '_pairedItemId': vesselItemId\r\n      }\r\n    };\r\n\r\n    const vesselItem = {\r\n      id: vesselItemId,\r\n      pairId: pairId,\r\n      isAddon: true,\r\n      parentItemId: stickerItemId,\r\n      pairedItemId: stickerItemId,\r\n      baseTitle: vesselName,\r\n      mappedVariantId: vesselVariantId,\r\n      name: `${vesselName} [${appPref}] (${qty} Pcs)`,\r\n      price: `\u20B9${(200 * qty).toLocaleString('en-IN')}`,\r\n      img: vesselImg,\r\n      quantity: qty,\r\n      properties: {\r\n        'Paired Sticker': product.title,\r\n        'Application Method': appPref,\r\n        'Application Details': appDetails,\r\n        '_pairId': pairId,\r\n        '_parentItemId': stickerItemId\r\n      }\r\n    };\r\n\r\n    window.handleAddMultipleToCart([stickerItem, vesselItem], `Added \"${product.title}\" and \"${vesselName}\" to cart!`);\r\n  } else {\r\n    // Transfer Sheet Only\r\n    const stickerItem = {\r\n      id: `inbuilt-modal-${Date.now()}`,\r\n      baseTitle: product.title,\r\n      mappedVariantId: product.variantId || null,\r\n      name: `${product.title} (${qty} Pcs)`,\r\n      price: `\u20B9${(stickerUnitPrice * qty).toLocaleString('en-IN')}`,\r\n      img: product.mainImg,\r\n      quantity: qty,\r\n      properties: {\r\n        'Category': product.category || 'UV DTF Sticker'\r\n      }\r\n    };\r\n    handleAddToCart(stickerItem);\r\n  }\r\n\r\n  window.closeInbuiltStickerModal();\r\n};\r\n\r\n/* ==========================================================================\r\n   Amazon-Style Image Zoom Magnifier Lens & Result Box Controller\r\n   (Supports both Lifestyle Mockup View & Live Studio Canvas View with Full Logo & Text Zoom)\r\n   ========================================================================== */\r\nwindow.initTshirtImageMagnifier = function () {\r\n  // Completely remove zoom box and lens elements from DOM per user request\r\n  document.querySelectorAll('#tshirt-zoom-result-box, .image-zoom-result-box, .image-zoom-lens').forEach(el => el.remove());\r\n  window.markZoomMirrorDirty = function () { };\r\n  window.syncCanvasZoomMirror = function () { };\r\n};\r\n\r\n/* ==========================================================================\r\n   Custom 2-in-1 Gift Set Studio Controller (#B2B4B3 & #A2D9F7 Theme System)\r\n   ========================================================================== */\r\nlet giftState = {\r\n  targetQty: 1,\r\n  mode: 'logo', // 'logo' (Upload Design), 'text' (Write Text), 'plain' (No text/logo)\r\n  customText: '',\r\n  artworkFile: null,\r\n  artworkDataUrl: null,\r\n  basePrice: 249.00,\r\n  baseMrp: 399.00,\r\n  unitPrice: 249.00,\r\n  totalPrice: 249.00,\r\n  viewMode: 'lifestyle',\r\n  productTitle: '3 in 1 Gift Set',\r\n  productImg: 'assets/gift-product-1-main.jpg',\r\n  selectedProductId: null,\r\n  selectedFinish: null\r\n};\r\n\r\nwindow.switchGiftPageMode = function (mode) {\r\n  const catalogView = document.getElementById('gift-catalog-view');\r\n  const customView = document.getElementById('gift-custom-mode-view') || document.getElementById('custom-gift-view') || document.getElementById('custom-mode-view');\r\n  const btnCatalog = document.getElementById('btn-mode-catalog');\r\n  const btnCustom = document.getElementById('btn-mode-custom');\r\n\r\n  if (mode === 'custom') {\r\n    if (catalogView) catalogView.style.display = 'none';\r\n    if (customView) customView.style.display = 'block';\r\n    if (btnCustom) btnCustom.classList.add('active');\r\n    if (btnCatalog) btnCatalog.classList.remove('active');\r\n  } else {\r\n    if (catalogView) catalogView.style.display = 'block';\r\n    if (customView) customView.style.display = 'none';\r\n    if (btnCatalog) btnCatalog.classList.add('active');\r\n    if (btnCustom) btnCustom.classList.remove('active');\r\n  }\r\n};\r\n\r\nlet giftHeroTimer = 10;\r\nlet giftHeroInterval = null;\r\nlet giftHeroShrunk = false;\r\n\r\nwindow.startGiftHeroTimer = function () {\r\n  giftHeroShrunk = false;\r\n  giftHeroTimer = 10;\r\n\r\n  const heroWrapper = document.getElementById('gift-interactive-hero-wrapper');\r\n  const timerNum = document.getElementById('gift-hero-timer-num');\r\n\r\n  if (heroWrapper) {\r\n    heroWrapper.classList.remove('gift-hero-split');\r\n    heroWrapper.classList.add('gift-hero-fullscreen');\r\n    heroWrapper.style.display = 'flex';\r\n  }\r\n\r\n  if (timerNum) timerNum.textContent = giftHeroTimer;\r\n\r\n  clearInterval(giftHeroInterval);\r\n  giftHeroInterval = setInterval(() => {\r\n    giftHeroTimer--;\r\n    if (timerNum) timerNum.textContent = giftHeroTimer > 0 ? giftHeroTimer : 0;\r\n    if (giftHeroTimer <= 0) {\r\n      clearInterval(giftHeroInterval);\r\n      window.triggerGiftHeroShrink();\r\n    }\r\n  }, 1000);\r\n\r\n  // Add scroll-to-skip listeners\r\n  window.addEventListener('scroll', window.handleGiftScrollToSkip, { passive: true });\r\n  window.addEventListener('wheel', window.handleGiftScrollToSkip, { passive: true });\r\n  window.addEventListener('touchmove', window.handleGiftScrollToSkip, { passive: true });\r\n};\r\n\r\nwindow.handleGiftScrollToSkip = function (e) {\r\n  if (!giftHeroShrunk) {\r\n    window.triggerGiftHeroShrink();\r\n  }\r\n};\r\n\r\nwindow.triggerGiftHeroShrink = function (manual = false) {\r\n  if (giftHeroShrunk) return;\r\n  giftHeroShrunk = true;\r\n  clearInterval(giftHeroInterval);\r\n\r\n  window.removeEventListener('scroll', window.handleGiftScrollToSkip);\r\n  window.removeEventListener('wheel', window.handleGiftScrollToSkip);\r\n  window.removeEventListener('touchmove', window.handleGiftScrollToSkip);\r\n\r\n  const heroWrapper = document.getElementById('gift-interactive-hero-wrapper');\r\n  if (heroWrapper) {\r\n    heroWrapper.classList.remove('gift-hero-fullscreen');\r\n    heroWrapper.classList.add('gift-hero-split');\r\n  }\r\n\r\n  if (manual) {\r\n    document.getElementById('gift-studio-configurator-section')?.scrollIntoView({ behavior: 'smooth' });\r\n  }\r\n};\r\n\r\nwindow.toggleGiftHeroMute = function () {\r\n  const vid = document.getElementById('gift-hero-video-player');\r\n  const icon = document.getElementById('gift-hero-mute-icon');\r\n  if (vid) {\r\n    vid.muted = !vid.muted;\r\n    if (icon) {\r\n      icon.className = vid.muted ? \"fa-solid fa-volume-xmark\" : \"fa-solid fa-volume-high\";\r\n    }\r\n  }\r\n};\r\n\r\n\r\n\r\nwindow.openGiftProductStudio = function (id, title, price, mrp, mainImg, detailImg, videoUrl, videoPoster) {\r\n  giftState.selectedProductId = id;\r\n  let parsedGiftPrice = parseFloat(price) || 0;\r\n  if (parsedGiftPrice < 100) {\r\n    const lower = String(title || '').toLowerCase();\r\n    if (lower.includes('card holder') && (lower.includes('399') || lower.includes('685'))) parsedGiftPrice = 399;\r\n    else if (lower.includes('3 in 1') || lower.includes('525')) parsedGiftPrice = 525;\r\n    else if (lower.includes('799') || lower.includes('595')) parsedGiftPrice = 799;\r\n    else if (lower.includes('1099') || lower.includes('1,099')) parsedGiftPrice = 1099;\r\n    else parsedGiftPrice = 249;\r\n  }\r\n  giftState.basePrice = parsedGiftPrice;\r\n  giftState.baseMrp = Math.max(parsedGiftPrice * 1.5, parseFloat(mrp) || 399.00);\r\n  giftState.productTitle = title;\r\n  giftState.productImg = mainImg;\r\n  giftState.specialInstructions = '';\r\n  const instrInput = document.getElementById('gift-special-instructions');\r\n  if (instrInput) instrInput.value = '';\r\n  giftState.customFeatures = { logo: true, text: false };\r\n  window.toggleGiftCustomFeature('init');\r\n\r\n  const titleElem = document.getElementById('gift-product-title');\r\n  if (titleElem) titleElem.textContent = title;\r\n\r\n  if (document.getElementById('gift-hero-active-title')) {\r\n    document.getElementById('gift-hero-active-title').textContent = title;\r\n    document.getElementById('gift-hero-active-price').textContent = '\u20B9' + (parseFloat(price) || 249.00).toFixed(2);\r\n  }\r\n\r\n  const mainImgElem = document.getElementById('gift-main-product-img');\r\n  if (mainImgElem) mainImgElem.src = mainImg;\r\n\r\n  const bgImgElem = document.getElementById('gift-canvas-bg-img');\r\n  if (bgImgElem) bgImgElem.src = detailImg || mainImg;\r\n\r\n  // Set Hero Video Source & Poster\r\n  const heroVidPlayer = document.getElementById('gift-hero-video-player');\r\n  const heroVidSrc = document.getElementById('gift-hero-video-src');\r\n\r\n  const defaultVideoMap = {\r\n    '1': 'gift-product-1-video.mp4',\r\n    '3': 'gift-product-3-video.mp4',\r\n    '4': 'gift-product-4-video.mp4',\r\n    '7': 'gift-product-7-video.mp4',\r\n    '8': 'gift-product-8-video.mp4'\r\n  };\r\n\r\n  let actualVideoSrc = videoUrl;\r\n  if (!actualVideoSrc || typeof actualVideoSrc !== 'string' || !actualVideoSrc.includes('.mp4')) {\r\n    const mapped = defaultVideoMap[String(id)] || 'gift-product-1-video.mp4';\r\n    actualVideoSrc = 'assets/' + mapped;\r\n  }\r\n\r\n  const actualPoster = videoPoster || mainImg;\r\n\r\n  if (heroVidPlayer && heroVidSrc) {\r\n    if (actualPoster) heroVidPlayer.poster = actualPoster;\r\n    heroVidSrc.src = actualVideoSrc;\r\n    heroVidPlayer.load();\r\n    heroVidPlayer.play().catch(e => console.log('Autoplay prevented:', e));\r\n  }\r\n\r\n  // Build gallery thumbnails dynamically\r\n  const thumbsWrapper = document.getElementById('gift-gallery-thumbs-wrapper');\r\n  if (thumbsWrapper) {\r\n    thumbsWrapper.innerHTML = '';\r\n    const images = [];\r\n    if (mainImg) images.push(mainImg);\r\n    if (detailImg && detailImg !== mainImg) images.push(detailImg);\r\n\r\n    if (images.length > 1) {\r\n      images.forEach((imgUrl, idx) => {\r\n        const thumbBtn = document.createElement('div');\r\n        thumbBtn.className = `gift-thumb-btn ${idx === 0 ? 'active' : ''}`;\r\n        thumbBtn.style.cssText = `width: 64px; height: 64px; border-radius: 12px; border: 2px solid ${idx === 0 ? '#0c4a6e' : '#cbd5e1'}; overflow: hidden; cursor: pointer; background: #ffffff; transition: all 0.2s ease;`;\r\n        thumbBtn.innerHTML = `<img src=\"${imgUrl}\" alt=\"Thumbnail ${idx + 1}\" style=\"width: 100%; height: 100%; object-fit: cover;\">`;\r\n        thumbBtn.onclick = function () {\r\n          document.querySelectorAll('.gift-thumb-btn').forEach(b => {\r\n            b.style.borderColor = '#cbd5e1';\r\n            b.classList.remove('active');\r\n          });\r\n          this.style.borderColor = '#0c4a6e';\r\n          this.classList.add('active');\r\n          if (mainImgElem) mainImgElem.src = imgUrl;\r\n        };\r\n        thumbsWrapper.appendChild(thumbBtn);\r\n      });\r\n      thumbsWrapper.style.display = 'flex';\r\n    } else {\r\n      thumbsWrapper.style.display = 'none';\r\n    }\r\n  }\r\n\r\n  // Finish option selector visibility for Product 9 (Visiting Card Holder)\r\n  const finishBox = document.getElementById('gift-finish-option-box');\r\n  if (finishBox) {\r\n    if (id === '9') {\r\n      finishBox.style.display = 'block';\r\n      giftState.selectedFinish = 'Stainless steel with black top';\r\n    } else {\r\n      finishBox.style.display = 'none';\r\n      giftState.selectedFinish = null;\r\n    }\r\n  }\r\n\r\n  // Reset dropdown to 1 pc\r\n  const dropdown = document.getElementById('gift-qty-dropdown');\r\n  if (dropdown) dropdown.value = \"1\";\r\n  giftState.targetQty = 1;\r\n\r\n  recalculateGiftPrice();\r\n  switchGiftPageMode('custom');\r\n\r\n  window.startGiftHeroTimer();\r\n  showToast(`Opened Studio for \"${title.slice(0, 35)}...\"`);\r\n};\r\n\r\nwindow.switchGiftFinishOption = function (finishKey, imgUrl, btnElem) {\r\n  giftState.selectedFinish = finishKey === 'black' ? 'Stainless steel with black top' : 'Stainless steel with brown top';\r\n  giftState.productImg = imgUrl;\r\n\r\n  const mainImgElem = document.getElementById('gift-main-product-img');\r\n  if (mainImgElem) mainImgElem.src = imgUrl;\r\n\r\n  const bgImgElem = document.getElementById('gift-canvas-bg-img');\r\n  if (bgImgElem) bgImgElem.src = imgUrl;\r\n\r\n  const thumbElem = document.getElementById('gift-card-9-thumb-img');\r\n  if (thumbElem) thumbElem.src = imgUrl;\r\n\r\n  const allBtns = document.querySelectorAll('.gift-finish-chip-btn');\r\n  allBtns.forEach(b => {\r\n    b.classList.remove('active');\r\n    b.style.borderColor = '#e2e8f0';\r\n    b.style.background = '#ffffff';\r\n  });\r\n\r\n  if (btnElem) {\r\n    btnElem.classList.add('active');\r\n    btnElem.style.borderColor = '#0284c7';\r\n    btnElem.style.background = '#f0f9ff';\r\n  }\r\n\r\n  showToast(`Selected Finish: ${giftState.selectedFinish}`);\r\n};\r\n\r\nwindow.selectGiftQuantity = function (qtyVal, selectElem) {\r\n  let qty = parseInt(qtyVal, 10);\r\n  if (isNaN(qty) || qty <= 0) qty = 1;\r\n\r\n  giftState.targetQty = qty;\r\n\r\n  const customBox = document.getElementById('gift-custom-qty-box');\r\n  if (customBox) {\r\n    if (qtyVal === 'custom') {\r\n      customBox.style.display = 'block';\r\n      const customInput = document.getElementById('gift-custom-qty-input');\r\n      if (customInput) customInput.focus();\r\n      return;\r\n    } else {\r\n      customBox.style.display = 'none';\r\n    }\r\n  }\r\n\r\n  recalculateGiftPrice();\r\n};\r\n\r\nwindow.handleGiftCustomQtyInput = function (val) {\r\n  let qty = parseInt(val, 10);\r\n  if (isNaN(qty) || qty <= 0) qty = 1;\r\n  giftState.targetQty = qty;\r\n  recalculateGiftPrice();\r\n};\r\n\r\nwindow.updateGiftAddBtnState = function () {\r\n  const addBtn = document.getElementById('btn-add-gift-cart');\r\n  const hintElem = document.getElementById('gift-add-hint-text');\r\n  if (!addBtn) return { isValid: false, reasonMsg: '' };\r\n\r\n  if (!giftState.customFeatures) {\r\n    giftState.customFeatures = { logo: true, text: false };\r\n  }\r\n\r\n  const isLogoOn = !!giftState.customFeatures.logo;\r\n  const isTextOn = !!giftState.customFeatures.text;\r\n  const isPlainOn = (!isLogoOn && !isTextOn);\r\n\r\n  const authBox = document.getElementById('gift-auth-step-box');\r\n  const authCheckbox = document.getElementById('gift-auth-checkbox');\r\n\r\n  const hasArtwork = !!(giftState.artworkFile || giftState.artworkDataUrl);\r\n  const isArtworkApproved = authCheckbox ? !!authCheckbox.checked : false;\r\n\r\n  // Sync auth step box visibility\r\n  if (authBox) {\r\n    if (isLogoOn && hasArtwork) {\r\n      authBox.style.display = 'block';\r\n    } else {\r\n      authBox.style.display = 'none';\r\n      if (!hasArtwork && authCheckbox) {\r\n        authCheckbox.checked = false;\r\n      }\r\n    }\r\n  }\r\n\r\n  const customTextVal = (giftState.customText || '').trim();\r\n  const hasValidText = customTextVal.length > 0;\r\n\r\n  let isValid = false;\r\n  let reasonMsg = '';\r\n\r\n  if (isPlainOn) {\r\n    // \"Don't want to add any text or logo\" -> directly clickable\r\n    isValid = true;\r\n  } else if (isLogoOn && isTextOn) {\r\n    // Both logo AND text selected\r\n    if (!hasArtwork) {\r\n      reasonMsg = 'Please upload your design/logo image to enable Add to Cart';\r\n    } else if (!isArtworkApproved) {\r\n      reasonMsg = 'Please tick the design authorization box to proceed';\r\n    } else if (!hasValidText) {\r\n      reasonMsg = 'Please enter your custom text to enable Add to Cart';\r\n    } else {\r\n      isValid = true;\r\n    }\r\n  } else if (isLogoOn) {\r\n    // Only Logo selected\r\n    if (!hasArtwork) {\r\n      reasonMsg = 'Please upload your design/logo image to enable Add to Cart';\r\n    } else if (!isArtworkApproved) {\r\n      reasonMsg = 'Please tick the design authorization box to proceed';\r\n    } else {\r\n      isValid = true;\r\n    }\r\n  } else if (isTextOn) {\r\n    // Only Text selected\r\n    if (!hasValidText) {\r\n      reasonMsg = 'Please enter your custom text to enable Add to Cart';\r\n    } else {\r\n      isValid = true;\r\n    }\r\n  }\r\n\r\n  // Update button visual & clickable state\r\n  if (isValid) {\r\n    addBtn.removeAttribute('disabled');\r\n    addBtn.disabled = false;\r\n    addBtn.style.setProperty('opacity', '1', 'important');\r\n    addBtn.style.setProperty('cursor', 'pointer', 'important');\r\n    addBtn.style.setProperty('pointer-events', 'auto', 'important');\r\n    addBtn.style.setProperty('box-shadow', '0 10px 25px rgba(162,217,247,0.5)', 'important');\r\n    addBtn.style.setProperty('filter', 'none', 'important');\r\n    addBtn.style.setProperty('background', '#A2D9F7', 'important');\r\n    addBtn.style.setProperty('color', '#0c4a6e', 'important');\r\n    if (hintElem) {\r\n      hintElem.style.display = 'none';\r\n      hintElem.textContent = '';\r\n    }\r\n  } else {\r\n    addBtn.setAttribute('disabled', 'disabled');\r\n    addBtn.disabled = true;\r\n    addBtn.style.setProperty('opacity', '0.45', 'important');\r\n    addBtn.style.setProperty('cursor', 'not-allowed', 'important');\r\n    addBtn.style.setProperty('pointer-events', 'none', 'important');\r\n    addBtn.style.setProperty('box-shadow', 'none', 'important');\r\n    addBtn.style.setProperty('filter', 'grayscale(0.6)', 'important');\r\n    addBtn.style.setProperty('background', '#94a3b8', 'important');\r\n    addBtn.style.setProperty('color', '#ffffff', 'important');\r\n    if (hintElem) {\r\n      hintElem.style.display = 'block';\r\n      hintElem.textContent = reasonMsg;\r\n    }\r\n  }\r\n\r\n  return { isValid, reasonMsg };\r\n};\r\n\r\nwindow.toggleGiftCustomFeature = function (featureKey) {\r\n  if (!giftState.customFeatures) {\r\n    giftState.customFeatures = { logo: true, text: false };\r\n  }\r\n\r\n  if (featureKey === 'plain') {\r\n    giftState.customFeatures.logo = false;\r\n    giftState.customFeatures.text = false;\r\n  } else if (featureKey === 'logo') {\r\n    giftState.customFeatures.logo = !giftState.customFeatures.logo;\r\n  } else if (featureKey === 'text') {\r\n    giftState.customFeatures.text = !giftState.customFeatures.text;\r\n  } else if (featureKey === 'init') {\r\n    // retain current state\r\n  }\r\n\r\n  const isLogoOn = giftState.customFeatures.logo;\r\n  const isTextOn = giftState.customFeatures.text;\r\n  const isPlainOn = (!isLogoOn && !isTextOn);\r\n\r\n  // Update chip active states\r\n  const chipLogo = document.getElementById('gift-chip-logo');\r\n  const chipText = document.getElementById('gift-chip-text');\r\n  const chipPlain = document.getElementById('gift-chip-plain');\r\n\r\n  if (chipLogo) chipLogo.classList.toggle('active', isLogoOn);\r\n  if (chipText) chipText.classList.toggle('active', isTextOn);\r\n  if (chipPlain) chipPlain.classList.toggle('active', isPlainOn);\r\n\r\n  // Update input box visibilities\r\n  const uploadBox = document.getElementById('gift-upload-option-box');\r\n  const textBox = document.getElementById('gift-text-option-box');\r\n  const plainBox = document.getElementById('gift-plain-option-box');\r\n\r\n  if (uploadBox) uploadBox.style.display = isLogoOn ? 'block' : 'none';\r\n  if (textBox) textBox.style.display = isTextOn ? 'block' : 'none';\r\n  if (plainBox) plainBox.style.display = isPlainOn ? 'block' : 'none';\r\n\r\n  // Update live stage elements\r\n  const canvasLogoContainer = document.getElementById('gift-canvas-logo-container');\r\n  const canvasTextContainer = document.getElementById('gift-canvas-text-container');\r\n\r\n  if (canvasLogoContainer) {\r\n    canvasLogoContainer.style.display = (isLogoOn && giftState.artworkDataUrl) ? 'flex' : 'none';\r\n  }\r\n  if (canvasTextContainer) {\r\n    canvasTextContainer.style.display = (isTextOn && giftState.customText) ? 'flex' : 'none';\r\n  }\r\n\r\n  // Keep giftState.mode synced for cart description\r\n  if (isLogoOn && isTextOn) giftState.mode = 'both';\r\n  else if (isLogoOn) giftState.mode = 'logo';\r\n  else if (isTextOn) giftState.mode = 'text';\r\n  else giftState.mode = 'plain';\r\n\r\n  if (typeof window.markGiftZoomMirrorDirty === 'function') window.markGiftZoomMirrorDirty();\r\n  if (typeof window.syncGiftZoomMirror === 'function') window.syncGiftZoomMirror();\r\n  if (typeof window.updateGiftAddBtnState === 'function') window.updateGiftAddBtnState();\r\n};\r\n\r\n\r\nwindow.switchGiftCustomMode = function (modeKey, btnElem) {\r\n  if (modeKey === 'logo') window.toggleGiftCustomFeature('logo');\r\n  else if (modeKey === 'text') window.toggleGiftCustomFeature('text');\r\n  else if (modeKey === 'both') {\r\n    giftState.customFeatures = { logo: true, text: true };\r\n    window.toggleGiftCustomFeature('init');\r\n  } else {\r\n    window.toggleGiftCustomFeature('plain');\r\n  }\r\n};\r\n\r\nwindow.handleGiftFileUpload = function (input) {\r\n  if (input.files && input.files[0]) {\r\n    const file = input.files[0];\r\n    const isPdf = file.name.toLowerCase().endsWith('.pdf') || file.type === 'application/pdf';\r\n    giftState.artworkFile = file.name;\r\n    giftState.rawFile = file;\r\n\r\n    // Trigger CDN upload in background\r\n    if (typeof window.uploadArtworkToShopifyCDN === 'function') {\r\n      window.uploadArtworkToShopifyCDN(file, 'gift');\r\n    }\r\n\r\n    const onFileReady = function (dataUrl) {\r\n      giftState.artworkDataUrl = dataUrl;\r\n\r\n      const logoImg = document.getElementById('gift-canvas-logo-img');\r\n      const logoContainer = document.getElementById('gift-canvas-logo-container');\r\n\r\n      if (logoImg) logoImg.src = dataUrl;\r\n      if (logoContainer) logoContainer.style.display = 'flex';\r\n\r\n      const fileNameElem = document.getElementById('gift-artwork-file-name');\r\n      if (fileNameElem) fileNameElem.textContent = `File: ${file.name}`;\r\n\r\n      const infoRow = document.getElementById('gift-artwork-info-row');\r\n      if (infoRow) infoRow.style.display = 'flex';\r\n\r\n      // Photo gallery mode is active for custom gifts\r\n      if (typeof window.markGiftZoomMirrorDirty === 'function') window.markGiftZoomMirrorDirty();\r\n      if (typeof window.syncGiftZoomMirror === 'function') window.syncGiftZoomMirror();\r\n      if (typeof window.updateGiftAddBtnState === 'function') window.updateGiftAddBtnState();\r\n\r\n      showToast(`Uploaded Design: \"${file.name}\" rendered on Gift Set!`);\r\n    };\r\n\r\n    if (isPdf && typeof window.generatePdfPreviewDataUrl === 'function') {\r\n      onFileReady(window.generatePdfPreviewDataUrl(file.name));\r\n    } else {\r\n      const reader = new FileReader();\r\n      reader.onload = function (e) {\r\n        onFileReady(e.target.result);\r\n      };\r\n      reader.readAsDataURL(file);\r\n    }\r\n  }\r\n};\r\n\r\nwindow.removeGiftUploadedArtwork = function () {\r\n  giftState.artworkFile = null;\r\n  giftState.artworkDataUrl = null;\r\n  giftState.rawFile = null;\r\n\r\n  const authCheckbox = document.getElementById('gift-auth-checkbox');\r\n  if (authCheckbox) authCheckbox.checked = false;\r\n  const authBox = document.getElementById('gift-auth-step-box');\r\n  if (authBox) authBox.style.display = 'none';\r\n\r\n  const logoImg = document.getElementById('gift-canvas-logo-img');\r\n  const logoContainer = document.getElementById('gift-canvas-logo-container');\r\n  if (logoImg) logoImg.src = '';\r\n  if (logoContainer) logoContainer.style.display = 'none';\r\n\r\n  const infoRow = document.getElementById('gift-artwork-info-row');\r\n  if (infoRow) infoRow.style.display = 'none';\r\n\r\n  const fileInput = document.getElementById('gift-file-input');\r\n  if (fileInput) fileInput.value = '';\r\n\r\n  if (typeof window.markGiftZoomMirrorDirty === 'function') window.markGiftZoomMirrorDirty();\r\n  if (typeof window.syncGiftZoomMirror === 'function') window.syncGiftZoomMirror();\r\n  if (typeof window.updateGiftAddBtnState === 'function') window.updateGiftAddBtnState();\r\n\r\n  showToast('Uploaded design removed');\r\n};\r\n\r\nwindow.updateGiftCustomText = function (val) {\r\n  giftState.customText = val || '';\r\n  const textDisplay = document.getElementById('gift-canvas-text-display');\r\n  const textContainer = document.getElementById('gift-canvas-text-container');\r\n\r\n  if (textDisplay) textDisplay.textContent = val;\r\n  if (textContainer) {\r\n    if (val && val.trim().length > 0 && giftState.mode === 'text') {\r\n      textContainer.style.display = 'flex';\r\n    } else {\r\n      textContainer.style.display = 'none';\r\n    }\r\n  }\r\n\r\n  if (typeof window.markGiftZoomMirrorDirty === 'function') window.markGiftZoomMirrorDirty();\r\n  if (typeof window.syncGiftZoomMirror === 'function') window.syncGiftZoomMirror();\r\n  if (typeof window.updateGiftAddBtnState === 'function') window.updateGiftAddBtnState();\r\n};\r\n\r\n\r\nwindow.changeGiftInputQty = function (delta) {\r\n  const input = document.getElementById('gift-qty-input-field');\r\n  if (!input) return;\r\n  let currentVal = parseInt(input.value) || 1;\r\n  currentVal += delta;\r\n  if (currentVal < 1) currentVal = 1;\r\n  input.value = currentVal;\r\n  window.onGiftQtyInput(currentVal);\r\n};\r\n\r\nwindow.setGiftQtyFromTier = function (qty) {\r\n  const input = document.getElementById('gift-qty-input-field');\r\n  if (input) input.value = qty;\r\n  window.onGiftQtyInput(qty);\r\n};\r\n\r\nwindow.onGiftQtyInput = function (val) {\r\n  let qty = parseInt(val) || 1;\r\n  if (qty < 1) qty = 1;\r\n  giftState.targetQty = qty;\r\n  window.recalculateGiftPrice();\r\n};\r\n\r\nwindow.recalculateGiftPrice = function () {\r\n  const qty = giftState.targetQty || 1;\r\n  const baseUnitPrice = giftState.basePrice || 249.00;\r\n\r\n  // Exact Discount Tiers requested by user:\r\n  // 1-3 pcs: MRP (0%)\r\n  // 4-10 pcs: 5% OFF\r\n  // 11-25 pcs: 10% OFF\r\n  // 26-50 pcs: 20% OFF\r\n  // 51-100+ pcs: 32% OFF\r\n  let discountPercent = 0;\r\n  let activeTierId = 'gift-tier-1';\r\n  let badgeText = 'Base Price (0% OFF)';\r\n  let badgeBg = '#f0fdf4';\r\n  let badgeColor = '#16a34a';\r\n\r\n  if (qty >= 51) {\r\n    discountPercent = 32;\r\n    activeTierId = 'gift-tier-5';\r\n    badgeText = '\u26A1 32% OFF Applied!';\r\n    badgeBg = '#fef2f2';\r\n    badgeColor = '#dc2626';\r\n  } else if (qty >= 26) {\r\n    discountPercent = 20;\r\n    activeTierId = 'gift-tier-4';\r\n    badgeText = '\u26A1 20% OFF Applied!';\r\n    badgeBg = '#f3e8ff';\r\n    badgeColor = '#7c3aed';\r\n  } else if (qty >= 11) {\r\n    discountPercent = 10;\r\n    activeTierId = 'gift-tier-3';\r\n    badgeText = '\u26A1 10% OFF Applied!';\r\n    badgeBg = '#e0f2fe';\r\n    badgeColor = '#0284c7';\r\n  } else if (qty >= 4) {\r\n    discountPercent = 5;\r\n    activeTierId = 'gift-tier-2';\r\n    badgeText = '\u26A1 5% OFF Applied!';\r\n    badgeBg = '#e0f2fe';\r\n    badgeColor = '#0284c7';\r\n  }\r\n\r\n  const discountMult = (100 - discountPercent) / 100;\r\n  const unitPrice = Math.round(baseUnitPrice * discountMult);\r\n  const totalPrice = Math.round(qty * unitPrice);\r\n\r\n  giftState.unitPrice = unitPrice;\r\n  giftState.totalPrice = totalPrice;\r\n\r\n  const formattedTotal = totalPrice.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\r\n  const formattedUnit = unitPrice.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\r\n\r\n  const topPriceNum = document.getElementById('gift-top-price-num');\r\n  if (topPriceNum) topPriceNum.textContent = `\u20B9${formattedTotal}`;\r\n\r\n  const liveUnitElem = document.getElementById('gift-live-unit-price');\r\n  if (liveUnitElem) liveUnitElem.textContent = `\u20B9${formattedUnit} / pc`;\r\n\r\n  const addBtn = document.getElementById('btn-add-gift-cart');\r\n  if (addBtn) {\r\n    addBtn.innerHTML = `<i class=\"fa-solid fa-cart-shopping\"></i> Add Custom Gift Set to Cart \u2022 \u20B9${formattedTotal}`;\r\n  }\r\n\r\n  // Update Tier rows active styles dynamically\r\n  for (let i = 1; i <= 5; i++) {\r\n    const row = document.getElementById(`gift-tier-${i}`);\r\n    if (row) {\r\n      row.style.background = '#ffffff';\r\n      row.style.borderLeftColor = 'transparent';\r\n      row.classList.remove('active');\r\n    }\r\n  }\r\n\r\n  const activeRow = document.getElementById(activeTierId);\r\n  if (activeRow) {\r\n    activeRow.style.background = '#f0fdf4';\r\n    activeRow.style.borderLeftColor = badgeColor;\r\n    activeRow.classList.add('active');\r\n  }\r\n\r\n  const activeBadge = document.getElementById('gift-discount-active-badge');\r\n  if (activeBadge) {\r\n    activeBadge.textContent = badgeText;\r\n    activeBadge.style.background = badgeBg;\r\n    activeBadge.style.color = badgeColor;\r\n  }\r\n\r\n  if (typeof window.updateGiftAddBtnState === 'function') {\r\n    window.updateGiftAddBtnState();\r\n  }\r\n};\r\n\r\n\r\nwindow.addGiftToCart = function () {\r\n  if (typeof window.updateGiftAddBtnState === 'function') {\r\n    const check = window.updateGiftAddBtnState();\r\n    if (!check.isValid) {\r\n      if (typeof showToast === 'function') showToast(check.reasonMsg || 'Please complete required custom options first.');\r\n      return;\r\n    }\r\n  }\r\n\r\n  const qty = giftState.targetQty || 1;\r\n  const totalPrice = giftState.totalPrice || (giftState.basePrice * qty);\r\n\r\n  let modeDesc = 'Plain Set (No Customization)';\r\n  if (giftState.mode === 'both') {\r\n    modeDesc = `Custom Logo (${giftState.artworkFile || 'Uploaded Logo'}) & Text (\"${giftState.customText || 'Custom Text'}\")`;\r\n  } else if (giftState.mode === 'logo') {\r\n    modeDesc = `Custom Logo (${giftState.artworkFile || 'Uploaded Design'})`;\r\n  } else if (giftState.mode === 'text') {\r\n    modeDesc = `Custom Text (\"${giftState.customText || 'Custom Name'}\")`;\r\n  }\r\n\r\n  if (giftState.selectedFinish) {\r\n    modeDesc += ` \u2022 ${giftState.selectedFinish}`;\r\n  }\r\n\r\n  if (giftState.specialInstructions && giftState.specialInstructions.trim()) {\r\n    modeDesc += ` \u2022 Note: ${giftState.specialInstructions.trim()}`;\r\n  }\r\n\r\n  const title = giftState.productTitle || '2 in 1 gift set (Keychain and pen comes with box)';\r\n  const itemName = `${title} (${modeDesc}) - ${qty} Pc(s)`;\r\n  const imgUrl = giftState.artworkDataUrl || giftState.productImg || 'assets/gift-product-1-main.jpg';\r\n\r\n  let mappedVar = '67585069285508';\r\n  if (giftState.selectedProductId === '8' || (title && (title.includes('1099') || totalPrice >= 1000))) {\r\n    mappedVar = '67585069514884'; // 4 in 1 gift set (1099.00, set6.png)\r\n  } else if (giftState.selectedProductId === '7' || (title && (title.includes('799') || title.includes('595')))) {\r\n    mappedVar = '67585069449348'; // 4 in 1 gift set (799.00, set_5_2.png)\r\n  } else if (typeof inbuiltProductVariantMap !== 'undefined' && (inbuiltProductVariantMap[title] || inbuiltProductVariantMap[giftState.selectedProductId])) {\r\n    mappedVar = inbuiltProductVariantMap[title] || inbuiltProductVariantMap[giftState.selectedProductId];\r\n  }\r\n\r\n  const giftProperties = {\r\n    'Product Name': itemName,\r\n    'Price': `\u20B9${totalPrice.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`,\r\n    'Customization': modeDesc\r\n  };\r\n\r\n  if (giftState.artworkCdnUrl) {\r\n    giftProperties['Uploaded Artwork'] = giftState.artworkCdnUrl;\r\n  } else if (giftState.rawFile) {\r\n    giftProperties['Uploaded Artwork'] = giftState.rawFile;\r\n  } else if (giftState.artworkFile) {\r\n    giftProperties['Uploaded Artwork'] = giftState.artworkFile;\r\n  }\r\n  if (giftState.customText) {\r\n    giftProperties['Custom Text'] = giftState.customText;\r\n  }\r\n  if (giftState.specialInstructions && giftState.specialInstructions.trim()) {\r\n    giftProperties['Special Instructions'] = giftState.specialInstructions.trim();\r\n  }\r\n\r\n  handleAddToCart({\r\n    id: 'gift_' + Date.now(),\r\n    mappedVariantId: mappedVar,\r\n    baseTitle: title,\r\n    name: itemName,\r\n    price: `\u20B9${totalPrice.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`,\r\n    img: imgUrl,\r\n    quantity: qty,\r\n    properties: giftProperties\r\n  });\r\n};\r\n\r\nwindow.updateGiftSpecialInstructions = function (val) {\r\n  giftState.specialInstructions = val || '';\r\n};\r\n\r\nwindow.quickAddGiftToCart = function (title, price, img) {\r\n  const mappedVar = (typeof inbuiltProductVariantMap !== 'undefined' && inbuiltProductVariantMap[title]) || '67585069285508';\r\n  handleAddToCart({\r\n    id: 'gift_' + Date.now(),\r\n    mappedVariantId: mappedVar,\r\n    baseTitle: title,\r\n    name: title,\r\n    price: `\u20B9${price}`,\r\n    img: img,\r\n    quantity: 1,\r\n    properties: {\r\n      'Product Name': title\r\n    }\r\n  });\r\n};\r\n\r\nwindow.switchGiftGalleryViewMode = function (mode) {\r\n  const canvasView = document.getElementById('gift-canvas-view');\r\n  const lifestyleView = document.getElementById('gift-lifestyle-view');\r\n  const btnCanvas = document.getElementById('gift-view-btn-canvas');\r\n  const btnLifestyle = document.getElementById('gift-view-btn-lifestyle');\r\n\r\n  giftState.viewMode = mode;\r\n\r\n  if (mode === 'canvas') {\r\n    if (canvasView) canvasView.style.display = 'flex';\r\n    if (lifestyleView) lifestyleView.style.display = 'none';\r\n    if (btnCanvas) btnCanvas.classList.add('active');\r\n    if (btnLifestyle) btnLifestyle.classList.remove('active');\r\n    if (typeof window.markGiftZoomMirrorDirty === 'function') window.markGiftZoomMirrorDirty();\r\n    if (typeof window.syncGiftZoomMirror === 'function') window.syncGiftZoomMirror();\r\n  } else {\r\n    if (canvasView) canvasView.style.display = 'none';\r\n    if (lifestyleView) lifestyleView.style.display = 'block';\r\n    if (btnLifestyle) btnLifestyle.classList.add('active');\r\n    if (btnCanvas) btnCanvas.classList.remove('active');\r\n  }\r\n};\r\n\r\nwindow.initGiftImageMagnifier = function () {\r\n  const parentCol = document.querySelector('.product-gallery-col');\r\n  if (!parentCol) return;\r\n\r\n  let resultBox = parentCol.querySelector('#tshirt-zoom-result-box');\r\n  if (!resultBox) {\r\n    resultBox = document.createElement('div');\r\n    resultBox.id = 'tshirt-zoom-result-box';\r\n    resultBox.className = 'image-zoom-result-box';\r\n    parentCol.appendChild(resultBox);\r\n  }\r\n\r\n  let mirror = resultBox.querySelector('#gift-zoom-canvas-mirror');\r\n  if (!mirror) {\r\n    mirror = document.createElement('div');\r\n    mirror.id = 'gift-zoom-canvas-mirror';\r\n    mirror.style.cssText = 'position: absolute; top: 0; left: 0; transform-origin: 0 0; pointer-events: none; display: none;';\r\n    resultBox.appendChild(mirror);\r\n  }\r\n\r\n  const stageWrapper = document.getElementById('gift-canvas-stage-wrapper');\r\n  if (stageWrapper) {\r\n    let lens = stageWrapper.querySelector('.image-zoom-lens');\r\n    if (!lens) {\r\n      lens = document.createElement('div');\r\n      lens.className = 'image-zoom-lens';\r\n      stageWrapper.appendChild(lens);\r\n    }\r\n\r\n    let giftZoomDirty = true;\r\n    window.markGiftZoomMirrorDirty = function () { giftZoomDirty = true; };\r\n\r\n    window.syncGiftZoomMirror = function (mouseEvent) {\r\n      const stageRect = stageWrapper.getBoundingClientRect();\r\n      if (stageRect.width === 0 || stageRect.height === 0) return;\r\n\r\n      resultBox.style.backgroundImage = 'none';\r\n\r\n      if (giftZoomDirty || !mirror.firstElementChild) {\r\n        const clone = stageWrapper.cloneNode(true);\r\n        clone.id = 'gift-stage-mirror-clone';\r\n        clone.style.cssText = `position: absolute; top: 0; left: 0; width: ${stageRect.width}px; height: ${stageRect.height}px; pointer-events: none; transform: none !important;`;\r\n        clone.querySelectorAll('.image-zoom-lens').forEach(b => b.remove());\r\n        mirror.style.width = `${stageRect.width}px`;\r\n        mirror.style.height = `${stageRect.height}px`;\r\n        mirror.innerHTML = '';\r\n        mirror.appendChild(clone);\r\n        giftZoomDirty = false;\r\n      }\r\n\r\n      const lensWidth = lens.offsetWidth || 150;\r\n      const lensHeight = lens.offsetHeight || 150;\r\n      let posX = 0; let posY = 0;\r\n\r\n      if (mouseEvent && typeof mouseEvent.clientX === 'number') {\r\n        let x = mouseEvent.clientX - stageRect.left;\r\n        let y = mouseEvent.clientY - stageRect.top;\r\n        posX = x - lensWidth / 2;\r\n        posY = y - lensHeight / 2;\r\n      } else {\r\n        posX = parseFloat(lens.style.left) || 0;\r\n        posY = parseFloat(lens.style.top) || 0;\r\n      }\r\n\r\n      if (posX < 0) posX = 0;\r\n      if (posY < 0) posY = 0;\r\n      if (posX > stageRect.width - lensWidth) posX = stageRect.width - lensWidth;\r\n      if (posY > stageRect.height - lensHeight) posY = stageRect.height - lensHeight;\r\n\r\n      lens.style.left = `${posX}px`;\r\n      lens.style.top = `${posY}px`;\r\n\r\n      const ratioX = (resultBox.offsetWidth || 540) / lensWidth;\r\n      mirror.style.transformOrigin = '0 0';\r\n      mirror.style.transform = `scale(${ratioX}) translate(${-posX}px, ${-posY}px)`;\r\n    };\r\n\r\n    stageWrapper.addEventListener('mouseenter', function (e) {\r\n      if (window.innerWidth >= 1024) {\r\n        window.syncGiftZoomMirror(e);\r\n        mirror.style.display = 'block';\r\n        lens.style.display = 'block';\r\n        resultBox.style.display = 'block';\r\n      }\r\n    });\r\n\r\n    stageWrapper.addEventListener('mouseleave', function () {\r\n      lens.style.display = 'none';\r\n      resultBox.style.display = 'none';\r\n      mirror.style.display = 'none';\r\n    });\r\n\r\n    stageWrapper.addEventListener('mousemove', function (e) {\r\n      if (window.innerWidth >= 1024) {\r\n        window.syncGiftZoomMirror(e);\r\n        mirror.style.display = 'block';\r\n        lens.style.display = 'block';\r\n        resultBox.style.display = 'block';\r\n      }\r\n    });\r\n  }\r\n};\r\n\r\ndocument.addEventListener('DOMContentLoaded', function () {\r\n  if (typeof window.renderPoloColorThumbnails === 'function') window.renderPoloColorThumbnails();\r\n  if (typeof window.updateLogoUploadStepUI === 'function') window.updateLogoUploadStepUI();\r\n  initLogoDragAndDrop();\r\n  initTshirtImageMagnifier();\r\n  initGiftImageMagnifier();\r\n\r\n  const currentPath = (window.location.pathname || '').toLowerCase();\r\n  const currentHash = (window.location.hash || '').toLowerCase();\r\n  const pageTitle = (document.title || '').toLowerCase();\r\n  const shopTitle = (window.shopifyProductTitle || '').toLowerCase();\r\n  const shopHandle = (window.shopifyProductHandle || '').toLowerCase();\r\n\r\n  const activeDOMFitBtn = document.querySelector('.tshirt-fit-sub-btn.active');\r\n  let activeDOMFitName = activeDOMFitBtn ? (activeDOMFitBtn.textContent || '').toLowerCase() : '';\r\n\r\n  // 1. Determine target fit for current product / page\r\n  let targetFit = 'Polo T Shirts';\r\n  let targetBtn = document.querySelector('.tshirt-fit-sub-btn[onclick*=\"Polo\"]') || activeDOMFitBtn;\r\n\r\n  if (currentHash.includes('oversiz') || currentPath.includes('oversiz') || pageTitle.includes('oversiz') || shopTitle.includes('oversiz') || shopHandle.includes('oversiz') || activeDOMFitName.includes('oversiz')) {\r\n    targetFit = 'Oversized T-Shirts';\r\n    targetBtn = document.querySelector('.tshirt-fit-sub-btn[onclick*=\"Oversized\"]') || activeDOMFitBtn;\r\n  } else if (currentHash.includes('round') || currentPath.includes('round') || pageTitle.includes('round') || shopTitle.includes('round') || shopHandle.includes('round') || activeDOMFitName.includes('round')) {\r\n    targetFit = 'Rounded Neck';\r\n    targetBtn = document.querySelector('.tshirt-fit-sub-btn[onclick*=\"Rounded\"]') || activeDOMFitBtn;\r\n  }\r\n\r\n  tshirtState.fit = targetFit;\r\n\r\n  // 2. Always apply fit selection and update description on load\r\n  if (typeof window.selectTshirtFit === 'function') {\r\n    window.selectTshirtFit(targetFit, targetBtn);\r\n  } else {\r\n    if (typeof window.updateBoxPositionForColor === 'function') window.updateBoxPositionForColor(tshirtState.color || 'Black');\r\n    if (typeof applyLogoTransformUI === 'function') applyLogoTransformUI();\r\n  }\r\n\r\n  // 3. Handle Custom Mode vs Inbuilt Mode display based on URL query, hash, path, or active button state\r\n  const currentSearch = (window.location.search || '').toLowerCase();\r\n  const searchParams = new URLSearchParams(window.location.search);\r\n  const modeParam = (searchParams.get('mode') || searchParams.get('tab') || '').toLowerCase().trim();\r\n\r\n  const isCustomRequested = modeParam === 'custom' || currentSearch.includes('mode=custom') || currentSearch.includes('tab=custom') || currentHash.includes('custom') || currentPath.includes('/products/custom');\r\n  const isInbuiltRequested = modeParam === 'inbuilt' || currentSearch.includes('mode=inbuilt') || currentSearch.includes('tab=inbuilt') || currentHash.includes('inbuilt') || searchParams.has('cat') || searchParams.has('product') || searchParams.has('open_product');\r\n\r\n  if (isCustomRequested) {\r\n    if (document.getElementById('tab-btn-custom') && typeof window.switchStickerMode === 'function') {\r\n      window.switchStickerMode('custom');\r\n    }\r\n    if (document.getElementById('btn-mode-custom') && typeof window.switchTshirtPageMode === 'function') {\r\n      window.switchTshirtPageMode('custom');\r\n    }\r\n  } else if (isInbuiltRequested) {\r\n    if (document.getElementById('tab-btn-inbuilt') && typeof window.switchStickerMode === 'function') {\r\n      window.switchStickerMode('inbuilt');\r\n    }\r\n    if (document.getElementById('btn-mode-inbuilt') && typeof window.switchTshirtPageMode === 'function') {\r\n      window.switchTshirtPageMode('inbuilt');\r\n    }\r\n  }\r\n\r\n  // Smooth scroll to customer-reviews anchor if present in URL\r\n  if (currentHash.includes('customer-reviews')) {\r\n    setTimeout(function () {\r\n      var revElem = document.getElementById('customer-reviews');\r\n      if (revElem) revElem.scrollIntoView({ behavior: 'smooth' });\r\n    }, 400);\r\n  }\r\n});\r\nwindow.syncProductConfigHeight = function () {\r\n  if (window.innerWidth >= 992) {\r\n    const visibleCustomView = document.querySelector('#custom-mode-view:not([style*=\"display: none\"]), .product-page-section');\r\n    const galleryCol = visibleCustomView ? visibleCustomView.querySelector('.product-gallery-col') : document.querySelector('.product-gallery-col');\r\n    const infoCols = document.querySelectorAll('.product-info-col, .product-config-col');\r\n\r\n    if (galleryCol && infoCols.length > 0) {\r\n      let galleryHeight = galleryCol.offsetHeight;\r\n      const mainImg = galleryCol.querySelector('#main-product-img, #tshirt-main-product-img, img');\r\n      if (mainImg && mainImg.offsetHeight > 200) {\r\n        galleryHeight = Math.max(galleryHeight, mainImg.offsetHeight);\r\n      }\r\n      if (galleryHeight < 540) {\r\n        galleryHeight = 580;\r\n      }\r\n\r\n      infoCols.forEach(function (col) {\r\n        col.style.height = galleryHeight + 'px';\r\n        col.style.maxHeight = galleryHeight + 'px';\r\n        col.style.overflowY = 'auto';\r\n        col.style.boxSizing = 'border-box';\r\n      });\r\n    }\r\n  } else {\r\n    const infoCols = document.querySelectorAll('.product-info-col, .product-config-col');\r\n    infoCols.forEach(function (col) {\r\n      col.style.maxHeight = 'none';\r\n      col.style.height = 'auto';\r\n      col.style.overflowY = 'visible';\r\n      col.style.overflow = 'visible';\r\n    });\r\n  }\r\n};\r\n\r\nwindow.addEventListener('resize', window.syncProductConfigHeight);\r\nwindow.addEventListener('DOMContentLoaded', function () {\r\n  if (typeof window.updateAuthCheckboxVisibility === 'function') {\r\n    window.updateAuthCheckboxVisibility();\r\n  }\r\n  if (typeof window.updateGiftAddBtnState === 'function') {\r\n    window.updateGiftAddBtnState();\r\n  }\r\n  if (typeof window.updateCapAddBtnState === 'function') {\r\n    window.updateCapAddBtnState();\r\n  }\r\n  window.syncProductConfigHeight();\r\n  document.querySelectorAll('#main-product-img, #tshirt-main-product-img, .product-gallery-col img').forEach(function (img) {\r\n    if (img.complete) {\r\n      window.syncProductConfigHeight();\r\n    } else {\r\n      img.addEventListener('load', window.syncProductConfigHeight);\r\n    }\r\n  });\r\n  if (window.ResizeObserver) {\r\n    document.querySelectorAll('.product-gallery-col').forEach(function (col) {\r\n      new ResizeObserver(function () {\r\n        window.syncProductConfigHeight();\r\n      }).observe(col);\r\n    });\r\n  }\r\n});\r\nwindow.addEventListener('load', function () {\r\n  window.syncProductConfigHeight();\r\n  if (typeof window.updateGiftAddBtnState === 'function') window.updateGiftAddBtnState();\r\n  if (typeof window.updateCapAddBtnState === 'function') window.updateCapAddBtnState();\r\n});\r\nsetTimeout(window.syncProductConfigHeight, 50);\r\nsetTimeout(window.syncProductConfigHeight, 200);\r\nsetTimeout(window.syncProductConfigHeight, 600);\r\nsetTimeout(window.syncProductConfigHeight, 1200);\r\n\r\nif (document.readyState === 'complete' || document.readyState === 'interactive') {\r\n  if (typeof window.renderPoloColorThumbnails === 'function') window.renderPoloColorThumbnails();\r\n  initLogoDragAndDrop();\r\n  initTshirtImageMagnifier();\r\n  initGiftImageMagnifier();\r\n  if (typeof window.updateAuthCheckboxVisibility === 'function') {\r\n    window.updateAuthCheckboxVisibility();\r\n  }\r\n  if (typeof window.updateGiftAddBtnState === 'function') {\r\n    window.updateGiftAddBtnState();\r\n  }\r\n  if (typeof window.updateCapAddBtnState === 'function') {\r\n    window.updateCapAddBtnState();\r\n  }\r\n  window.syncProductConfigHeight();\r\n}\r\n\r\n\r\n\r\n\r\nwindow.openTshirtProductStudio = function (cardElem) {\r\n  try {\r\n    if (!cardElem) return;\r\n    const card = cardElem.closest ? (cardElem.closest('.inbuilt-product-card') || cardElem) : cardElem;\r\n    const title = card.querySelector('.inbuilt-card-title')?.textContent.trim() || 'Custom T-Shirt';\r\n    const price = card.querySelector('.inbuilt-price-tag')?.textContent.trim() || '\u20B9799.00';\r\n    const category = card.querySelector('.inbuilt-card-category')?.textContent.trim() || 'Oversized T-Shirt';\r\n    const imgSrc = card.querySelector('.inbuilt-card-media img')?.src || card.querySelector('img')?.src || '';\r\n\r\n    window.currentSingleProductData = { title, price, category, imgSrc };\r\n\r\n    const titleEl = document.getElementById('tshirt-single-title');\r\n    const breadTitleEl = document.getElementById('tshirt-single-breadcrumb-title');\r\n    const priceEl = document.getElementById('tshirt-single-price');\r\n    const catEl = document.getElementById('tshirt-single-category');\r\n    const imgEl = document.getElementById('tshirt-single-main-img');\r\n    const qtyEl = document.getElementById('single-tshirt-qty-input');\r\n    const thumbsContainer = document.getElementById('tshirt-single-thumbs-container');\r\n\r\n    if (titleEl) titleEl.textContent = title;\r\n    if (breadTitleEl) breadTitleEl.textContent = title;\r\n    if (priceEl) priceEl.textContent = price;\r\n    if (catEl) catEl.textContent = category;\r\n    if (imgEl) imgEl.src = imgSrc;\r\n    if (qtyEl) qtyEl.value = 1;\r\n\r\n    if (thumbsContainer) {\r\n      thumbsContainer.innerHTML = '';\r\n      let imagesList = [];\r\n\r\n      const dataImages = card.getAttribute('data-images');\r\n      if (dataImages && dataImages.trim()) {\r\n        imagesList = dataImages.split('|').map(s => s.trim()).filter(Boolean);\r\n      }\r\n\r\n      if (imagesList.length === 0 && imgSrc) {\r\n        imagesList.push(imgSrc);\r\n      }\r\n\r\n      const catLower = category.toLowerCase();\r\n      let sizeChartAsset = '';\r\n      if (catLower.includes('round')) {\r\n        sizeChartAsset = window.shopifyAssetMap?.['size-chart-roundneck.png'] || '';\r\n      } else if (catLower.includes('polo')) {\r\n        sizeChartAsset = window.shopifyAssetMap?.['size-chart-polo.png'] || '';\r\n      } else {\r\n        sizeChartAsset = window.shopifyAssetMap?.['size-chart-oversized.png'] || '';\r\n      }\r\n\r\n      if (sizeChartAsset && !imagesList.includes(sizeChartAsset)) {\r\n        imagesList.push(sizeChartAsset);\r\n      }\r\n\r\n      if (imagesList.length > 0) {\r\n        imagesList.forEach((url, idx) => {\r\n          const thumbBtn = document.createElement('button');\r\n          thumbBtn.type = 'button';\r\n          thumbBtn.style.cssText = `\r\n            width: 72px;\r\n            height: 72px;\r\n            border-radius: 12px;\r\n            border: ${idx === 0 ? '2.5px solid #A8D4B0' : '2px solid #e2e8f0'};\r\n            background: #ffffff;\r\n            padding: 4px;\r\n            cursor: pointer;\r\n            overflow: hidden;\r\n            transition: all 0.2s ease;\r\n            box-shadow: ${idx === 0 ? '0 4px 12px rgba(168,212,176,0.4)' : 'none'};\r\n          `;\r\n\r\n          const thumbImg = document.createElement('img');\r\n          thumbImg.src = url;\r\n          thumbImg.alt = `${title} view ${idx + 1}`;\r\n          thumbImg.style.cssText = 'width: 100%; height: 100%; object-fit: contain; border-radius: 8px;';\r\n\r\n          thumbBtn.appendChild(thumbImg);\r\n\r\n          thumbBtn.onclick = function () {\r\n            if (imgEl) {\r\n              imgEl.style.opacity = '0.3';\r\n              setTimeout(() => {\r\n                imgEl.src = url;\r\n                imgEl.style.opacity = '1';\r\n              }, 100);\r\n            }\r\n            thumbsContainer.querySelectorAll('button').forEach(b => {\r\n              b.style.border = '2px solid #e2e8f0';\r\n              b.style.boxShadow = 'none';\r\n            });\r\n            thumbBtn.style.border = '2.5px solid #A8D4B0';\r\n            thumbBtn.style.boxShadow = '0 4px 12px rgba(168,212,176,0.4)';\r\n          };\r\n\r\n          thumbsContainer.appendChild(thumbBtn);\r\n        });\r\n      }\r\n    }\r\n\r\n    const heroBanner = document.querySelector('.stickers-hero-banner');\r\n    const viewInbuilt = document.getElementById('inbuilt-mode-view');\r\n    const viewCustom = document.getElementById('custom-mode-view');\r\n    const viewSingle = document.getElementById('single-product-mode-view');\r\n\r\n    if (heroBanner) heroBanner.style.display = 'none';\r\n    if (viewInbuilt) {\r\n      viewInbuilt.style.display = 'none';\r\n      viewInbuilt.classList.remove('active');\r\n    }\r\n    if (viewCustom) {\r\n      viewCustom.style.display = 'none';\r\n      viewCustom.classList.remove('active');\r\n    }\r\n    if (viewSingle) {\r\n      viewSingle.style.display = 'block';\r\n      viewSingle.classList.add('active');\r\n    }\r\n\r\n    window.scrollTo({ top: 0, behavior: 'smooth' });\r\n  } catch (e) {\r\n    console.error(\"openTshirtProductStudio error:\", e);\r\n  }\r\n};\r\n\r\nwindow.backToTshirtCatalog = function () {\r\n  const heroBanner = document.querySelector('.stickers-hero-banner');\r\n  const viewInbuilt = document.getElementById('inbuilt-mode-view');\r\n  const viewCustom = document.getElementById('custom-mode-view');\r\n  const viewSingle = document.getElementById('single-product-mode-view');\r\n  const extraSections = document.querySelectorAll('.size-chart-banner-section, .order-process-banner-section, .about-brand-section, .related-products-section');\r\n\r\n  if (heroBanner) heroBanner.style.display = 'block';\r\n  if (viewSingle) {\r\n    viewSingle.style.display = 'none';\r\n    viewSingle.classList.remove('active');\r\n  }\r\n  if (viewCustom) {\r\n    viewCustom.style.display = 'none';\r\n    viewCustom.classList.remove('active');\r\n  }\r\n  extraSections.forEach(sec => sec.style.display = 'block');\r\n\r\n  if (viewInbuilt) {\r\n    viewInbuilt.style.display = 'block';\r\n    viewInbuilt.classList.add('active');\r\n  }\r\n\r\n  window.scrollTo({ top: 0, behavior: 'smooth' });\r\n};\r\n\r\nwindow.selectSingleSize = function (size, btnElem) {\r\n  window.currentSingleTshirtSize = size;\r\n  document.querySelectorAll('.single-tshirt-size-chip').forEach(b => {\r\n    b.style.background = '#ffffff';\r\n    b.style.color = '#334155';\r\n    b.style.borderColor = '#cbd5e1';\r\n  });\r\n  if (btnElem) {\r\n    btnElem.style.background = '#A8D4B0';\r\n    btnElem.style.color = '#143d1c';\r\n    btnElem.style.borderColor = '#A8D4B0';\r\n  }\r\n};\r\n\r\nwindow.changeSingleTshirtQty = function (delta) {\r\n  const input = document.getElementById('single-tshirt-qty-input');\r\n  if (!input) return;\r\n  let val = parseInt(input.value) || 1;\r\n  val = Math.max(1, val + delta);\r\n  input.value = val;\r\n};\r\n\r\nwindow.addSingleTshirtToCart = function () {\r\n  if (!window.currentSingleProductData) return;\r\n  const qty = parseInt(document.getElementById('single-tshirt-qty-input').value) || 1;\r\n  const p = window.currentSingleProductData;\r\n  const size = window.currentSingleTshirtSize || 'M';\r\n\r\n  if (typeof handleAddToCart === 'function') {\r\n    handleAddToCart({\r\n      id: p.title.toLowerCase().replace(/[^a-z0-9]+/g, '-') + '-' + size,\r\n      name: `${p.title} (${size})`,\r\n      price: p.price,\r\n      img: p.imgSrc,\r\n      quantity: qty\r\n    });\r\n  }\r\n};\r\n\r\n/* ==========================================================================\r\n   CUSTOMIZED COTTON CAPS PRODUCT PAGE MODULE (ELEMENTA DESIGN SYSTEM)\r\n   ========================================================================== */\r\n\r\nwindow.capState = {\r\n  color: 'Black',\r\n  colorHex: '#18181b',\r\n  customMethod: 'upload', // 'upload' vs 'text'\r\n  artworkFile: null,\r\n  artworkDataUrl: null,\r\n  artworkScale: 80,\r\n  customText: '',\r\n  textColor: '#ffffff',\r\n  specialInstructions: '',\r\n  targetQty: 2,\r\n  unitPrice: 250,\r\n  totalPrice: 500\r\n};\r\n\r\nconst CAP_SLABS = [\r\n  { min: 2, max: 4, unitPrice: 250, discountPct: 0, label: '2\u20134 pcs' },\r\n  { min: 5, max: 9, unitPrice: 220, discountPct: 0.12, label: '5\u20139 pcs' },\r\n  { min: 10, max: 24, unitPrice: 205, discountPct: 0.18, label: '10\u201324 pcs' },\r\n  { min: 25, max: 49, unitPrice: 188, discountPct: 0.25, label: '25\u201349 pcs' },\r\n  { min: 50, max: 99, unitPrice: 170, discountPct: 0.32, label: '50\u201399 pcs' },\r\n  { min: 100, max: 149, unitPrice: 148, discountPct: 0.41, label: '100\u2013149 pcs' },\r\n  { min: 150, max: 9999, unitPrice: 138, discountPct: 0.45, label: '150\u2013200 pcs' }\r\n];\r\n\r\nwindow.selectCapColor = function (colorName, colorHex, btnElem) {\r\n  capState.color = colorName;\r\n  capState.colorHex = colorHex;\r\n\r\n  const labelElem = document.getElementById('selected-cap-color-name');\r\n  if (labelElem) labelElem.textContent = colorName.toUpperCase();\r\n\r\n  document.querySelectorAll('.cap-color-swatch-btn').forEach(b => {\r\n    b.classList.remove('active');\r\n    b.style.border = '1.5px solid #cbd5e1';\r\n  });\r\n  if (btnElem) {\r\n    btnElem.classList.add('active');\r\n    btnElem.style.border = '2px solid #0284c7';\r\n  }\r\n\r\n  showToast(`Selected Cap Color: ${colorName}`);\r\n};\r\n\r\nwindow.switchCapSimplePhoto = function (imgSrc, elem) {\r\n  document.querySelectorAll('.cap-thumb-photo-card').forEach(card => {\r\n    card.classList.remove('active');\r\n    card.style.border = '1.5px solid #e2e8f0';\r\n  });\r\n  if (elem) {\r\n    elem.classList.add('active');\r\n    elem.style.border = '2.5px solid #0284c7';\r\n  }\r\n\r\n  const videoWrapper = document.getElementById('cap-video-wrapper');\r\n  const stageVideo = document.getElementById('cap-photo-stage-video');\r\n  if (stageVideo) stageVideo.pause();\r\n  if (videoWrapper) videoWrapper.style.display = 'none';\r\n\r\n  const stageImg = document.getElementById('cap-photo-stage-img');\r\n  if (stageImg) {\r\n    stageImg.style.display = 'block';\r\n    stageImg.src = imgSrc;\r\n  }\r\n};\r\n\r\nwindow.switchCapToVideo = function (elem) {\r\n  document.querySelectorAll('.cap-thumb-photo-card').forEach(card => {\r\n    card.classList.remove('active');\r\n    card.style.border = '1.5px solid #e2e8f0';\r\n  });\r\n  if (elem) {\r\n    elem.classList.add('active');\r\n    elem.style.border = '2.5px solid #00b894';\r\n  }\r\n\r\n  const stageImg = document.getElementById('cap-photo-stage-img');\r\n  if (stageImg) stageImg.style.display = 'none';\r\n\r\n  const videoWrapper = document.getElementById('cap-video-wrapper');\r\n  const stageVideo = document.getElementById('cap-photo-stage-video');\r\n  if (videoWrapper) videoWrapper.style.display = 'flex';\r\n  if (stageVideo) {\r\n    stageVideo.currentTime = 0;\r\n    const playPromise = stageVideo.play();\r\n    if (playPromise !== undefined) {\r\n      playPromise.catch(() => {\r\n        stageVideo.muted = true;\r\n        stageVideo.play();\r\n      });\r\n    }\r\n  }\r\n};\r\n\r\nwindow.switchCapGalleryPhoto = function (photoKey, elem) {\r\n  document.querySelectorAll('.cap-thumb-photo-card').forEach(card => {\r\n    card.classList.remove('active');\r\n    card.style.border = '1px solid #e2e8f0';\r\n  });\r\n  if (elem) {\r\n    elem.classList.add('active');\r\n    elem.style.border = '2px solid #0284c7';\r\n  }\r\n\r\n  const stageImg = document.getElementById('cap-photo-stage-img');\r\n  const boundaryBox = document.getElementById('cap-print-boundary-box');\r\n  const logoBox = document.getElementById('cap-draggable-logo-container');\r\n  const textBox = document.getElementById('cap-draggable-text-container');\r\n\r\n  const fileMap = {\r\n    'hero': 'cap-hero-cluster.jpg',\r\n    'black': 'cap-black-front.jpg',\r\n    'white': 'cap-white-front.jpg',\r\n    'navy': 'cap-navy-front.jpg',\r\n    'red': 'cap-red-front.jpg',\r\n    'side': 'cap-navy-side.jpg',\r\n    'back': 'cap-navy-back.jpg',\r\n    'fabric': 'cap-navy-fabric.jpg',\r\n    'top': 'cap-navy-top.jpg',\r\n    '3q': 'cap-navy-3q.jpg'\r\n  };\r\n\r\n  const fileName = fileMap[photoKey] || 'cap-hero-cluster.jpg';\r\n  if (stageImg) {\r\n    if (window.elementaCapAssets && window.elementaCapAssets[fileName]) {\r\n      stageImg.src = window.elementaCapAssets[fileName];\r\n    } else if (elem && elem.querySelector('img')) {\r\n      stageImg.src = elem.querySelector('img').src;\r\n    }\r\n  }\r\n\r\n  const frontKeys = ['black', 'white', 'navy', 'red'];\r\n  if (frontKeys.includes(photoKey)) {\r\n    if (boundaryBox) boundaryBox.style.display = 'flex';\r\n    if (logoBox && capState.artworkDataUrl && capState.customMethod === 'upload') logoBox.style.display = 'flex';\r\n    if (textBox && capState.customText && capState.customMethod === 'text') textBox.style.display = 'block';\r\n\r\n    // Also sync color swatch in customizer form\r\n    const colorNameMap = { 'black': 'Black', 'white': 'White', 'navy': 'Navy Blue', 'red': 'Red' };\r\n    const colorHexMap = { 'black': '#18181b', 'white': '#ffffff', 'navy': '#1e3a8a', 'red': '#dc2626' };\r\n    const targetName = colorNameMap[photoKey];\r\n    if (targetName) {\r\n      capState.color = targetName;\r\n      capState.colorHex = colorHexMap[photoKey];\r\n      const labelElem = document.getElementById('selected-cap-color-name');\r\n      if (labelElem) labelElem.textContent = targetName.toUpperCase();\r\n\r\n      document.querySelectorAll('.cap-color-swatch-btn').forEach(b => {\r\n        b.classList.remove('active');\r\n        b.style.border = '1.5px solid #cbd5e1';\r\n        if (b.getAttribute('onclick') && b.getAttribute('onclick').includes(`'${targetName}'`)) {\r\n          b.classList.add('active');\r\n          b.style.border = '2px solid #0284c7';\r\n        }\r\n      });\r\n    }\r\n  } else {\r\n    if (boundaryBox) boundaryBox.style.display = 'none';\r\n    if (logoBox) logoBox.style.display = 'none';\r\n    if (textBox) textBox.style.display = 'none';\r\n  }\r\n};\r\n\r\nwindow.updateCapAddBtnState = function () {\r\n  const addBtn = document.getElementById('btn-add-cap-cart');\r\n  const hintElem = document.getElementById('cap-add-hint-text');\r\n\r\n  if (!addBtn) return { isValid: false, reasonMsg: '' };\r\n\r\n  const currentMethod = capState.customMethod || 'upload'; // 'upload' or 'text'\r\n  const authBox = document.getElementById('cap-auth-step-box');\r\n  const authCheckbox = document.getElementById('cap-auth-checkbox');\r\n\r\n  const hasArtwork = !!(capState.rawFile || capState.artworkFile || capState.artworkDataUrl);\r\n  const isArtworkApproved = authCheckbox ? !!authCheckbox.checked : false;\r\n\r\n  // Sync auth checkbox step box visibility\r\n  if (authBox) {\r\n    if (currentMethod === 'upload' && hasArtwork) {\r\n      authBox.style.display = 'block';\r\n    } else {\r\n      authBox.style.display = 'none';\r\n      if (!hasArtwork && authCheckbox) {\r\n        authCheckbox.checked = false;\r\n      }\r\n    }\r\n  }\r\n\r\n  const customTextVal = (capState.customText || '').trim();\r\n  const hasValidText = customTextVal.length > 0;\r\n\r\n  let isValid = false;\r\n  let reasonMsg = '';\r\n\r\n  if (currentMethod === 'upload') {\r\n    if (!hasArtwork) {\r\n      reasonMsg = 'Please upload your design/logo image to enable Add to Cart';\r\n    } else if (!isArtworkApproved) {\r\n      reasonMsg = 'Please tick the design authorization box to proceed';\r\n    } else {\r\n      isValid = true;\r\n    }\r\n  } else if (currentMethod === 'text') {\r\n    if (!hasValidText) {\r\n      reasonMsg = 'Please enter your custom text to enable Add to Cart';\r\n    } else {\r\n      isValid = true;\r\n    }\r\n  }\r\n\r\n  // Update Add to Cart button state & aesthetics\r\n  if (addBtn) {\r\n    if (isValid) {\r\n      addBtn.removeAttribute('disabled');\r\n      addBtn.disabled = false;\r\n      addBtn.style.setProperty('opacity', '1', 'important');\r\n      addBtn.style.setProperty('cursor', 'pointer', 'important');\r\n      addBtn.style.setProperty('pointer-events', 'auto', 'important');\r\n      addBtn.style.setProperty('filter', 'none', 'important');\r\n      addBtn.style.setProperty('background', '#143d1c', 'important');\r\n      addBtn.style.setProperty('color', '#ffffff', 'important');\r\n      addBtn.style.setProperty('box-shadow', '0 4px 14px rgba(20,61,28,0.25)', 'important');\r\n    } else {\r\n      addBtn.setAttribute('disabled', 'disabled');\r\n      addBtn.disabled = true;\r\n      addBtn.style.setProperty('opacity', '0.45', 'important');\r\n      addBtn.style.setProperty('cursor', 'not-allowed', 'important');\r\n      addBtn.style.setProperty('pointer-events', 'none', 'important');\r\n      addBtn.style.setProperty('filter', 'grayscale(0.6)', 'important');\r\n      addBtn.style.setProperty('background', '#94a3b8', 'important');\r\n      addBtn.style.setProperty('color', '#ffffff', 'important');\r\n      addBtn.style.setProperty('box-shadow', 'none', 'important');\r\n    }\r\n  }\r\n\r\n  // Update hint text element\r\n  if (hintElem) {\r\n    if (isValid) {\r\n      hintElem.style.display = 'none';\r\n      hintElem.textContent = '';\r\n    } else {\r\n      hintElem.style.display = 'block';\r\n      hintElem.textContent = reasonMsg;\r\n    }\r\n  }\r\n\r\n  return { isValid, reasonMsg };\r\n};\r\n\r\nwindow.switchCapCustomMethod = function (method, btnElem) {\r\n  capState.customMethod = method;\r\n\r\n  document.querySelectorAll('.cap-method-tab').forEach(b => {\r\n    b.classList.remove('active');\r\n    b.style.background = '#ffffff';\r\n    b.style.color = '#475569';\r\n    b.style.border = '1.5px solid #cbd5e1';\r\n  });\r\n\r\n  if (btnElem) {\r\n    btnElem.classList.add('active');\r\n    btnElem.style.background = '#e0f2fe';\r\n    btnElem.style.color = '#0284c7';\r\n    btnElem.style.border = '2px solid #0284c7';\r\n  }\r\n\r\n  const uploadBox = document.getElementById('cap-upload-method-box');\r\n  const textBox = document.getElementById('cap-text-method-box');\r\n\r\n  const canvasLogoBox = document.getElementById('cap-draggable-logo-container');\r\n  const canvasTextBox = document.getElementById('cap-draggable-text-container');\r\n\r\n  if (method === 'upload') {\r\n    if (uploadBox) uploadBox.style.display = 'block';\r\n    if (textBox) textBox.style.display = 'none';\r\n  } else {\r\n    if (uploadBox) uploadBox.style.display = 'none';\r\n    if (textBox) textBox.style.display = 'block';\r\n  }\r\n\r\n  // Preserve both live mockups on crown if both have been provided\r\n  if (canvasLogoBox) {\r\n    canvasLogoBox.style.display = (capState.artworkDataUrl) ? 'flex' : 'none';\r\n  }\r\n  if (canvasTextBox) {\r\n    canvasTextBox.style.display = (capState.customText && capState.customText.length > 0) ? 'block' : 'none';\r\n  }\r\n\r\n  if (typeof window.updateCapAddBtnState === 'function') window.updateCapAddBtnState();\r\n};\r\n\r\nwindow.handleCapFileUpload = function (input) {\r\n  if (input.files && input.files[0]) {\r\n    const file = input.files[0];\r\n    const isPdf = file.name.toLowerCase().endsWith('.pdf') || file.type === 'application/pdf';\r\n    capState.rawFile = file;\r\n\r\n    // Trigger CDN upload in background\r\n    if (typeof window.uploadArtworkToShopifyCDN === 'function') {\r\n      window.uploadArtworkToShopifyCDN(file, 'cap');\r\n    }\r\n\r\n    const onFileReady = function (dataUrl) {\r\n      capState.artworkFile = file.name;\r\n      capState.artworkDataUrl = dataUrl;\r\n\r\n      const thumbImg = document.getElementById('cap-thumb-preview');\r\n      if (thumbImg) thumbImg.src = dataUrl;\r\n\r\n      const fileNameElem = document.getElementById('cap-file-name-text');\r\n      if (fileNameElem) fileNameElem.textContent = file.name;\r\n\r\n      const card = document.getElementById('cap-uploaded-file-card');\r\n      if (card) card.style.display = 'block';\r\n\r\n      const logoImg = document.getElementById('cap-canvas-logo-img');\r\n      const logoBox = document.getElementById('cap-draggable-logo-container');\r\n\r\n      if (logoImg) logoImg.src = dataUrl;\r\n      if (logoBox) logoBox.style.display = 'flex';\r\n\r\n      // Update mutual text notice\r\n      const textNotice = document.getElementById('cap-text-file-notice');\r\n      const textNoticeName = document.getElementById('cap-text-file-notice-name');\r\n      if (textNotice && textNoticeName) {\r\n        textNoticeName.textContent = file.name;\r\n        textNotice.style.display = 'block';\r\n      }\r\n\r\n      if (typeof window.updateCapAddBtnState === 'function') window.updateCapAddBtnState();\r\n\r\n      showToast(`Uploaded Cap Logo: \"${file.name}\" attached & rendered live on crown!`);\r\n    };\r\n\r\n    if (isPdf && typeof window.generatePdfPreviewDataUrl === 'function') {\r\n      onFileReady(window.generatePdfPreviewDataUrl(file.name));\r\n    } else {\r\n      const reader = new FileReader();\r\n      reader.onload = function (e) {\r\n        onFileReady(e.target.result);\r\n      };\r\n      reader.readAsDataURL(file);\r\n    }\r\n  }\r\n};\r\n\r\nwindow.removeCapUploadedFile = function () {\r\n  capState.artworkFile = null;\r\n  capState.artworkDataUrl = null;\r\n  capState.rawFile = null;\r\n\r\n  const authCheckbox = document.getElementById('cap-auth-checkbox');\r\n  if (authCheckbox) authCheckbox.checked = false;\r\n  const authBox = document.getElementById('cap-auth-step-box');\r\n  if (authBox) authBox.style.display = 'none';\r\n\r\n  const card = document.getElementById('cap-uploaded-file-card');\r\n  if (card) card.style.display = 'none';\r\n\r\n  const logoBox = document.getElementById('cap-draggable-logo-container');\r\n  if (logoBox) logoBox.style.display = 'none';\r\n\r\n  const fileInput = document.getElementById('cap-file-input');\r\n  if (fileInput) fileInput.value = '';\r\n\r\n  const textNotice = document.getElementById('cap-text-file-notice');\r\n  if (textNotice) textNotice.style.display = 'none';\r\n\r\n  if (typeof window.updateCapAddBtnState === 'function') window.updateCapAddBtnState();\r\n\r\n  showToast('Cap Logo Removed');\r\n};\r\n\r\nwindow.updateCapLogoScale = function (val) {\r\n  const scalePct = parseInt(val, 10) || 80;\r\n  capState.artworkScale = scalePct;\r\n\r\n  const scaleText = document.getElementById('cap-logo-scale-text');\r\n  if (scaleText) scaleText.textContent = `${scalePct}%`;\r\n\r\n  const logoImg = document.getElementById('cap-canvas-logo-img');\r\n  if (logoImg) {\r\n    logoImg.style.transform = `scale(${scalePct / 100})`;\r\n  }\r\n};\r\n\r\nwindow.updateCapCustomText = function (val) {\r\n  capState.customText = String(val || '').trim();\r\n  const textDisplay = document.getElementById('cap-canvas-text-display');\r\n  const textBox = document.getElementById('cap-draggable-text-container');\r\n\r\n  if (textDisplay) textDisplay.textContent = val || 'MY TEXT';\r\n\r\n  if (textBox) {\r\n    if (val && val.length > 0) {\r\n      textBox.style.display = 'block';\r\n    } else {\r\n      textBox.style.display = 'none';\r\n    }\r\n  }\r\n\r\n  // Update mutual upload notice\r\n  const uploadNotice = document.getElementById('cap-upload-text-notice');\r\n  const uploadNoticeVal = document.getElementById('cap-upload-text-notice-val');\r\n  if (uploadNotice && uploadNoticeVal) {\r\n    if (capState.customText) {\r\n      uploadNoticeVal.textContent = capState.customText;\r\n      uploadNotice.style.display = 'block';\r\n    } else {\r\n      uploadNotice.style.display = 'none';\r\n    }\r\n  }\r\n\r\n  if (typeof window.updateCapAddBtnState === 'function') window.updateCapAddBtnState();\r\n};\r\n\r\nwindow.updateCapTextColor = function (hexColor, btnElem) {\r\n  capState.textColor = hexColor;\r\n\r\n  document.querySelectorAll('.cap-text-color-btn').forEach(b => {\r\n    b.style.border = '1.5px solid #cbd5e1';\r\n    b.classList.remove('active');\r\n  });\r\n\r\n  let targetBtn = btnElem;\r\n  if (!targetBtn && hexColor) {\r\n    const customCircle = document.getElementById('cap-custom-color-circle');\r\n    if (customCircle && customCircle.dataset.color === hexColor) {\r\n      targetBtn = customCircle;\r\n    }\r\n  }\r\n\r\n  if (targetBtn) {\r\n    targetBtn.style.border = '2px solid #0284c7';\r\n    targetBtn.classList.add('active');\r\n  }\r\n\r\n  const textDisplay = document.getElementById('cap-canvas-text-display');\r\n  if (textDisplay) {\r\n    textDisplay.style.color = hexColor;\r\n  }\r\n  showToast(`Cap Text Color changed to ${hexColor.toUpperCase()}`);\r\n};\r\n\r\nwindow.onCustomCapColorPickerChange = function (hexVal) {\r\n  if (!hexVal) return;\r\n  const cleanHex = hexVal.replace('#', '').toUpperCase();\r\n  const hexInput = document.getElementById('cap-custom-color-hex');\r\n  if (hexInput) hexInput.value = cleanHex;\r\n\r\n  const customCircle = document.getElementById('cap-custom-color-circle');\r\n  if (customCircle) {\r\n    customCircle.style.background = '#' + cleanHex;\r\n    customCircle.dataset.color = '#' + cleanHex;\r\n  }\r\n  const plusIcon = document.getElementById('cap-custom-color-plus-icon');\r\n  if (plusIcon) plusIcon.style.display = 'none';\r\n\r\n  updateCapTextColor('#' + cleanHex, customCircle);\r\n};\r\n\r\nwindow.onCustomCapHexInput = function (rawVal) {\r\n  let cleanHex = rawVal.trim().replace('#', '').toUpperCase();\r\n\r\n  if (/^([0-9A-F]{3}){1,2}$/i.test(cleanHex)) {\r\n    if (cleanHex.length === 3) {\r\n      cleanHex = cleanHex[0] + cleanHex[0] + cleanHex[1] + cleanHex[1] + cleanHex[2] + cleanHex[2];\r\n    }\r\n    const fullHex = '#' + cleanHex;\r\n\r\n    const colorPicker = document.getElementById('cap-custom-color-picker');\r\n    if (colorPicker) colorPicker.value = fullHex;\r\n\r\n    const customCircle = document.getElementById('cap-custom-color-circle');\r\n    if (customCircle) {\r\n      customCircle.style.background = fullHex;\r\n      customCircle.dataset.color = fullHex;\r\n    }\r\n    const plusIcon = document.getElementById('cap-custom-color-plus-icon');\r\n    if (plusIcon) plusIcon.style.display = 'none';\r\n\r\n    updateCapTextColor(fullHex, customCircle);\r\n  }\r\n};\r\n\r\nwindow.updateCapSpecialInstructions = function (val) {\r\n  capState.specialInstructions = String(val || '').trim();\r\n};\r\n\r\nwindow.recalculateCapPrice = function () {\r\n  const minQty = 2;\r\n  const qty = Math.max(minQty, capState.targetQty || minQty);\r\n  capState.targetQty = qty;\r\n\r\n  // Sync Custom Quantity Input Field\r\n  const customInput = document.getElementById('elementa-custom-cap-qty-input');\r\n  if (customInput && document.activeElement !== customInput) {\r\n    customInput.value = qty;\r\n  }\r\n\r\n  // Find active slab index\r\n  let activeSlabIndex = 0;\r\n  for (let i = 0; i < CAP_SLABS.length; i++) {\r\n    if (qty >= CAP_SLABS[i].min && qty <= CAP_SLABS[i].max) {\r\n      activeSlabIndex = i;\r\n      break;\r\n    }\r\n  }\r\n  if (qty >= 150) activeSlabIndex = 6;\r\n\r\n  const activeSlab = CAP_SLABS[activeSlabIndex];\r\n  const unitPrice = activeSlab.unitPrice;\r\n  const totalPrice = unitPrice * qty;\r\n\r\n  capState.unitPrice = unitPrice;\r\n  capState.totalPrice = totalPrice;\r\n\r\n  // 1. Update Progress Bar Fill Line & Milestone Node Active States\r\n  const progressFill = document.getElementById('cap-tracker-progress-fill');\r\n  if (progressFill) {\r\n    const pct = Math.min(100, Math.max(0, (activeSlabIndex / (CAP_SLABS.length - 1)) * 100));\r\n    progressFill.style.width = `${pct}%`;\r\n  }\r\n\r\n  const nodes = document.querySelectorAll('.caps-configurator-page .elementa-milestone-node');\r\n  nodes.forEach((node, idx) => {\r\n    if (idx === activeSlabIndex) {\r\n      node.classList.add('active');\r\n      node.classList.remove('passed');\r\n    } else if (idx < activeSlabIndex) {\r\n      node.classList.remove('active');\r\n      node.classList.add('passed');\r\n    } else {\r\n      node.classList.remove('active');\r\n      node.classList.remove('passed');\r\n    }\r\n  });\r\n\r\n  // Auto-scroll active milestone into center on mobile\r\n  if (nodes && nodes[activeSlabIndex]) {\r\n    try {\r\n      nodes[activeSlabIndex].scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'center' });\r\n    } catch (e) { }\r\n  }\r\n\r\n  const unitPriceElem = document.getElementById('cap-summary-unit-price');\r\n  if (unitPriceElem) unitPriceElem.textContent = `\u20B9${unitPrice} / cap`;\r\n\r\n  const totalPriceElem = document.getElementById('cap-summary-total-price');\r\n  if (totalPriceElem) totalPriceElem.textContent = `\u20B9${totalPrice.toLocaleString('en-IN')} Total`;\r\n\r\n  // 3. Update Dynamic Upsell Nudge Bar\r\n  const nudgeText = document.getElementById('cap-nudge-text');\r\n  const nudgeBtn = document.getElementById('cap-nudge-btn');\r\n\r\n  if (activeSlabIndex < CAP_SLABS.length - 1) {\r\n    const nextSlab = CAP_SLABS[activeSlabIndex + 1];\r\n    const deltaQty = nextSlab.min - qty;\r\n    if (nudgeText) nudgeText.textContent = `Add ${deltaQty} more cap${deltaQty > 1 ? 's' : ''} to lower your price to \u20B9${nextSlab.unitPrice}/cap!`;\r\n    if (nudgeBtn) {\r\n      nudgeBtn.textContent = `+ Add ${deltaQty} More`;\r\n      nudgeBtn.setAttribute('data-delta', deltaQty);\r\n      nudgeBtn.style.display = 'inline-block';\r\n    }\r\n  } else {\r\n    if (nudgeText) nudgeText.textContent = `\uD83C\uDF89 You've unlocked our MAXIMUM 45% OFF bulk rate!`;\r\n    if (nudgeBtn) nudgeBtn.style.display = 'none';\r\n  }\r\n\r\n  // 4. Update CTA Button Text\r\n  const addBtn = document.getElementById('btn-add-cap-cart');\r\n  if (addBtn) {\r\n    addBtn.innerHTML = `<i class=\"fa-solid fa-cart-shopping\"></i> Add Customized Caps to Cart \u2022 \u20B9${totalPrice.toLocaleString('en-IN')}`;\r\n  }\r\n\r\n  if (typeof window.updateCapAddBtnState === 'function') {\r\n    window.updateCapAddBtnState();\r\n  }\r\n};\r\n\r\nwindow.onCustomCapTotalQtyChange = function (val) {\r\n  let qty = parseInt(val, 10);\r\n  if (isNaN(qty) || qty < 2) qty = 2;\r\n  capState.targetQty = qty;\r\n  recalculateCapPrice();\r\n};\r\n\r\nwindow.adjustCustomCapTotalQuantity = function (delta) {\r\n  let current = capState.targetQty || 2;\r\n  let newQty = Math.max(2, current + delta);\r\n  const customInput = document.getElementById('elementa-custom-cap-qty-input');\r\n  if (customInput) customInput.value = newQty;\r\n  onCustomCapTotalQtyChange(newQty);\r\n};\r\n\r\nwindow.selectCapDiscountTier = function (minQty) {\r\n  let qty = Math.max(2, parseInt(minQty, 10) || 2);\r\n  capState.targetQty = qty;\r\n  const customInput = document.getElementById('elementa-custom-cap-qty-input');\r\n  if (customInput) customInput.value = qty;\r\n  recalculateCapPrice();\r\n  showToast(`Selected ${qty} Pcs Cap Tier`);\r\n};\r\n\r\nwindow.toggleCapDiscountTable = function () {\r\n  const tableBox = document.getElementById('cap-discount-table-expand');\r\n  if (tableBox) {\r\n    tableBox.style.display = (tableBox.style.display === 'none' || !tableBox.style.display) ? 'block' : 'none';\r\n  }\r\n};\r\n\r\nwindow.addCapNudgeQuantity = function () {\r\n  const nudgeBtn = document.getElementById('cap-nudge-btn');\r\n  const delta = nudgeBtn ? (parseInt(nudgeBtn.getAttribute('data-delta'), 10) || 1) : 1;\r\n  const newQty = (capState.targetQty || 2) + delta;\r\n  capState.targetQty = newQty;\r\n  recalculateCapPrice();\r\n  showToast(`Added ${delta} more cap${delta > 1 ? 's' : ''}! New total: ${newQty} Pcs`);\r\n};\r\n\r\nwindow.addCapToCart = function () {\r\n  if (typeof window.updateCapAddBtnState === 'function') {\r\n    const check = window.updateCapAddBtnState();\r\n    if (!check.isValid) {\r\n      if (typeof showToast === 'function') showToast(check.reasonMsg || 'Please complete required custom options first.');\r\n      return;\r\n    }\r\n  }\r\n\r\n  const qty = Math.max(2, capState.targetQty || 2);\r\n  const unitP = capState.unitPrice || 250;\r\n  const totalPrice = capState.totalPrice || (unitP * qty);\r\n\r\n  const hasUpload = !!(capState.rawFile || capState.artworkFile);\r\n  const hasText = !!(capState.customText && capState.customText.trim());\r\n\r\n  let customDetailsArr = [];\r\n  if (hasUpload) {\r\n    customDetailsArr.push(`Logo: \"${capState.artworkFile || 'Uploaded Design'}\"`);\r\n  }\r\n  if (hasText) {\r\n    customDetailsArr.push(`Text: \"${capState.customText}\" (Color: ${capState.textColor || '#ffffff'})`);\r\n  }\r\n  if (customDetailsArr.length === 0) {\r\n    customDetailsArr.push('Custom Design');\r\n  }\r\n  const textDetails = customDetailsArr.join(', ');\r\n  const specialInstrStr = capState.specialInstructions ? ` [Note: ${capState.specialInstructions}]` : '';\r\n\r\n  const itemName = `Customized Cotton Cap (${capState.color}, ${textDetails}) - ${qty} Pcs${specialInstrStr}`;\r\n  const capPhotoUrl = (typeof getCapImageUrl === 'function') ? getCapImageUrl(capState.color) : 'assets/cap-black-front.jpg';\r\n  const imgUrl = capState.artworkDataUrl || capPhotoUrl;\r\n\r\n  let customMethodLabel = 'Custom Design';\r\n  if (hasUpload && hasText) {\r\n    customMethodLabel = 'Custom Logo + Text';\r\n  } else if (hasUpload) {\r\n    customMethodLabel = 'Upload Design';\r\n  } else if (hasText) {\r\n    customMethodLabel = 'Add Custom Text';\r\n  }\r\n\r\n  const props = {\r\n    'Cap Color': capState.color,\r\n    'Customization Method': customMethodLabel,\r\n    'Special Instructions': capState.specialInstructions || 'None',\r\n    'Unit Price': `\u20B9${unitP.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`,\r\n    'Total Price': `\u20B9${totalPrice.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`\r\n  };\r\n\r\n  if (hasUpload) {\r\n    props['Uploaded Artwork'] = capState.artworkCdnUrl || capState.rawFile || capState.artworkFile || 'File attached';\r\n  }\r\n\r\n  if (hasText) {\r\n    props['Custom Text'] = capState.customText;\r\n    props['Text Color'] = capState.textColor || '#ffffff';\r\n  }\r\n\r\n  if (typeof handleAddToCart === 'function') {\r\n    handleAddToCart({\r\n      id: 'cap_' + Date.now(),\r\n      mappedVariantId: '67587052437636',\r\n      baseTitle: 'Customized Cotton Cap',\r\n      name: itemName,\r\n      price: `\u20B9${unitP.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`,\r\n      img: imgUrl,\r\n      quantity: qty,\r\n      properties: props\r\n    });\r\n  } else {\r\n    showToast(`Added ${qty} Customized Cotton Caps to Cart!`);\r\n  }\r\n};\r\n\r\nwindow.giftVideosData = [\r\n  {\r\n    title: \"Executive 3-in-1 Gift Set Overview & Showcase\",\r\n    duration: \"HD Video 1\",\r\n    src: \"assets/gift-video-1.mp4\",\r\n    poster: \"assets/gift-set-customize-detail.jpg\"\r\n  },\r\n  {\r\n    title: \"Precision Laser Engraving Craftsmanship\",\r\n    duration: \"HD Video 2\",\r\n    src: \"assets/gift-video-2.mp4\",\r\n    poster: \"assets/gift-product-1.jpg\"\r\n  },\r\n  {\r\n    title: \"Metallic Card Holder & Rollerball Pen Close-Up\",\r\n    duration: \"HD Video 3\",\r\n    src: \"assets/gift-video-3.mp4\",\r\n    poster: \"assets/gift-product-3.jpg\"\r\n  },\r\n  {\r\n    title: \"Luxury Presentation Box & Gift Unboxing\",\r\n    duration: \"HD Video 4\",\r\n    src: \"assets/gift-video-4.mp4\",\r\n    poster: \"assets/gift-product-1-main.jpg\"\r\n  }\r\n];\r\n\r\nwindow.switchGiftShowcaseVideo = function (index) {\r\n  const thumbCard = document.getElementById('gift-video-thumb-' + index);\r\n\r\n  let src = thumbCard ? thumbCard.getAttribute('data-video-src') : null;\r\n  let poster = thumbCard ? thumbCard.getAttribute('data-video-poster') : null;\r\n  let title = thumbCard ? thumbCard.getAttribute('data-video-title') : null;\r\n  let duration = thumbCard ? thumbCard.getAttribute('data-video-duration') : null;\r\n\r\n  if (!src && window.giftVideosData && window.giftVideosData[index]) {\r\n    const videoData = window.giftVideosData[index];\r\n    src = videoData.src;\r\n    poster = videoData.poster;\r\n    title = videoData.title;\r\n    duration = videoData.duration;\r\n  }\r\n\r\n  const player = document.getElementById('gift-showcase-video-player');\r\n  const playerSrc = document.getElementById('gift-showcase-video-src');\r\n  const titleElem = document.getElementById('gift-active-video-title');\r\n  const durationElem = document.getElementById('gift-active-video-duration');\r\n\r\n  if (titleElem && title) titleElem.textContent = title;\r\n  if (durationElem && duration) durationElem.textContent = duration;\r\n\r\n  if (player && playerSrc && src) {\r\n    if (poster) player.poster = poster;\r\n    playerSrc.src = src;\r\n    player.load();\r\n    player.play().catch(e => console.log('Autoplay prevented or paused:', e));\r\n  }\r\n\r\n  document.querySelectorAll('.gift-video-thumb-card').forEach((card, idx) => {\r\n    if (idx === index) {\r\n      card.style.borderColor = '#0284c7';\r\n      card.style.borderWidth = '2.5px';\r\n      card.style.background = '#f0f9ff';\r\n      card.style.boxShadow = '0 4px 14px rgba(2, 132, 199, 0.15)';\r\n      const btn = card.querySelector('.fa-play')?.parentElement;\r\n      if (btn) {\r\n        btn.style.background = '#0284c7';\r\n        btn.style.color = '#ffffff';\r\n      }\r\n    } else {\r\n      card.style.borderColor = '#e2e8f0';\r\n      card.style.borderWidth = '1.5px';\r\n      card.style.background = '#ffffff';\r\n      card.style.boxShadow = 'none';\r\n      const btn = card.querySelector('.fa-play')?.parentElement;\r\n      if (btn) {\r\n        btn.style.background = 'rgba(255,255,255,0.9)';\r\n        btn.style.color = '#0f172a';\r\n      }\r\n    }\r\n  });\r\n};\r\n\r\nwindow.buyCapNow = function () {\r\n  if (typeof window.updateCapAddBtnState === 'function') {\r\n    const check = window.updateCapAddBtnState();\r\n    if (!check.isValid) {\r\n      if (typeof showToast === 'function') showToast(check.reasonMsg || 'Please complete required custom options first.');\r\n      return;\r\n    }\r\n  }\r\n  addCapToCart();\r\n  setTimeout(() => {\r\n    if (typeof openCartDrawer === 'function') openCartDrawer();\r\n  }, 300);\r\n};\r\n\r\n/* ==========================================================================\r\n   Home Page Parallax & Interactive Scroll Effects Engine\r\n   ========================================================================== */\r\nwindow.addEventListener('scroll', function () {\r\n  const scrolled = window.pageYOffset;\r\n  const parallaxLayers = document.querySelectorAll('.parallax-floating-layer');\r\n  parallaxLayers.forEach((layer) => {\r\n    const speed = parseFloat(layer.getAttribute('data-parallax-speed')) || 0.12;\r\n    layer.style.transform = `translateY(${scrolled * speed}px)`;\r\n  });\r\n\r\n  const parallaxBgs = document.querySelectorAll('.parallax-bg-layer');\r\n  parallaxBgs.forEach((bg) => {\r\n    const speed = parseFloat(bg.getAttribute('data-parallax-speed')) || 0.06;\r\n    bg.style.backgroundPositionY = `${scrolled * speed}px`;\r\n  });\r\n}, { passive: true });\r\n\r\n/* ==========================================================================\r\n   Horizontal Drag Scroll for Color Swatch Grid & Sliders\r\n   ========================================================================== */\r\n(function () {\r\n  function initDragScrollContainers() {\r\n    const containers = document.querySelectorAll('.tshirt-color-grid, #tshirt-color-grid-container, .elementa-milestones-track-wrapper');\r\n    containers.forEach(container => {\r\n      if (container.dataset.dragScrollInit) return;\r\n      container.dataset.dragScrollInit = 'true';\r\n      let isDown = false;\r\n      let startX = 0;\r\n      let scrollLeft = 0;\r\n      let moved = false;\r\n\r\n      container.addEventListener('mousedown', (e) => {\r\n        isDown = true;\r\n        moved = false;\r\n        startX = e.pageX - container.offsetLeft;\r\n        scrollLeft = container.scrollLeft;\r\n      });\r\n\r\n      window.addEventListener('mouseup', () => {\r\n        if (!isDown) return;\r\n        isDown = false;\r\n        container.style.cursor = '';\r\n      });\r\n\r\n      container.addEventListener('mouseleave', () => {\r\n        isDown = false;\r\n        container.style.cursor = '';\r\n      });\r\n\r\n      container.addEventListener('mousemove', (e) => {\r\n        if (!isDown) return;\r\n        e.preventDefault();\r\n        const x = e.pageX - container.offsetLeft;\r\n        const walk = (x - startX) * 1.5;\r\n        if (Math.abs(walk) > 4) {\r\n          moved = true;\r\n          container.style.cursor = 'grabbing';\r\n        }\r\n        container.scrollLeft = scrollLeft - walk;\r\n      });\r\n\r\n      // Prevent accidental click when dragging\r\n      container.addEventListener('click', (e) => {\r\n        if (moved) {\r\n          e.stopPropagation();\r\n          e.preventDefault();\r\n          moved = false;\r\n        }\r\n      }, true);\r\n\r\n      // Support horizontal scrolling on mouse wheel\r\n      container.addEventListener('wheel', (e) => {\r\n        if (e.deltaY !== 0 && container.scrollWidth > container.clientWidth) {\r\n          e.preventDefault();\r\n          container.scrollLeft += e.deltaY;\r\n        }\r\n      }, { passive: false });\r\n    });\r\n  }\r\n\r\n  if (document.readyState === 'loading') {\r\n    document.addEventListener('DOMContentLoaded', initDragScrollContainers);\r\n  } else {\r\n    initDragScrollContainers();\r\n  }\r\n  window.addEventListener('load', initDragScrollContainers);\r\n})();\r\n\r\n\r\n// Auto-correct any 'trasfer' typos to 'transfer' in inbuilt sticker titles\r\ndocument.addEventListener('DOMContentLoaded', function () {\r\n  function sanitizeStickerTitles() {\r\n    document.querySelectorAll('.inbuilt-card-title, #inbuilt-modal-title, .inbuilt-product-card img').forEach(function (el) {\r\n      if (el.tagName === 'IMG' && el.alt && /trasfer/i.test(el.alt)) {\r\n        el.alt = el.alt.replace(/trasfer/gi, 'Transfer');\r\n      } else if (el.textContent && /trasfer/i.test(el.textContent)) {\r\n        el.textContent = el.textContent.replace(/trasfer/gi, 'Transfer');\r\n      }\r\n    });\r\n  }\r\n  sanitizeStickerTitles();\r\n  setTimeout(sanitizeStickerTitles, 500);\r\n  setTimeout(sanitizeStickerTitles, 1500);\r\n});\r\n"],
  "mappings": "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",
  "names": ["selectedStickerVariantId", "clean"]
}
