{
  "version": 3,
  "sources": ["/cdn/shop/t/14/assets/goat-fit-profile.js?qa=20260727"],
  "sourcesContent": ["(() => {\n  if (!document.body.classList.contains('goat-template-product')) return;\n  const modal = document.querySelector('[data-goat-fit-modal]');\n  const entry = document.querySelector('[data-goat-fit-entry]');\n  if (!modal || !entry) return;\n\n  const DB_NAME = 'goat-private-fit-profile';\n  const STORE = 'profile';\n  const KEY = 'primary';\n  const form = modal.querySelector('[data-goat-fit-form]');\n  const saved = modal.querySelector('[data-goat-fit-saved]');\n  const status = modal.querySelector('[data-goat-fit-status]');\n  const photoInput = modal.querySelector('[data-goat-fit-photo]');\n  const preview = modal.querySelector('[data-goat-fit-photo-preview]');\n  const previewImage = preview?.querySelector('img');\n  const photoStage = modal.querySelector('[data-goat-fit-photo-stage]');\n  const qualityPanel = modal.querySelector('[data-goat-fit-quality]');\n  const genderInput = form.querySelector('[data-goat-fit-gender]');\n  let previewUrl = null;\n  let compressedPhoto = null;\n  let photoQuality = null;\n\n  const placeEntry = () => {\n    const details = [...document.querySelectorAll('.product-container .product-details, .mobile-container .product-details')]\n      .find(node => node.offsetParent !== null);\n    if (!details) return;\n    const forms = [...details.querySelectorAll('form')];\n    const buyForm = forms.find(node => /buy now/i.test(node.textContent || ''));\n    const cartForm = forms.find(node => /add to cart/i.test(node.textContent || ''));\n    const appButton = document.querySelector('button[id^=\"tryon-btn-\"]');\n    const appSection = appButton?.closest('.shopify-section');\n    const target = appSection?.parentElement === details ? appSection : (buyForm || cartForm);\n    if (target && entry.parentElement !== details) details.insertBefore(entry, target);\n  };\n\n  const track = (event, details = {}) => {\n    window.dataLayer = window.dataLayer || [];\n    window.dataLayer.push({event, product_id: entry.dataset.productId, product_name: entry.dataset.productTitle, ...details});\n  };\n  const openDb = () => new Promise((resolve, reject) => {\n    const request = indexedDB.open(DB_NAME, 1);\n    request.onupgradeneeded = () => request.result.createObjectStore(STORE);\n    request.onsuccess = () => resolve(request.result);\n    request.onerror = () => reject(request.error);\n  });\n  const dbAction = async (mode, action) => {\n    const db = await openDb();\n    return new Promise((resolve, reject) => {\n      const tx = db.transaction(STORE, mode);\n      const request = action(tx.objectStore(STORE));\n      request.onsuccess = () => resolve(request.result);\n      request.onerror = () => reject(request.error);\n      tx.oncomplete = () => db.close();\n    });\n  };\n  const getProfile = () => dbAction('readonly', store => store.get(KEY));\n  const saveProfile = profile => dbAction('readwrite', store => store.put(profile, KEY));\n  const deleteProfile = () => dbAction('readwrite', store => store.delete(KEY));\n\n  const profileIsComplete = profile => Boolean(profile?.photo && profile?.size && profile?.gender);\n  const genderLabel = value => ({men:'Men', women:'Women', 'non-binary':'Another fit', 'prefer-not':'Not specified'})[value] || value;\n  const renderQuality = quality => {\n    if (!qualityPanel || !quality) return;\n    qualityPanel.hidden = false;\n    qualityPanel.classList.remove('is-good','is-warning','is-fail');\n    qualityPanel.classList.add(`is-${quality.level}`);\n    qualityPanel.querySelector('[data-goat-fit-quality-title]').textContent = quality.title;\n    qualityPanel.querySelector('[data-goat-fit-quality-copy]').textContent = quality.message;\n  };\n  const inspectFaceFraming = async image => {\n    if (!('FaceDetector' in window)) {\n      return {\n        pass:true,\n        verified:false,\n        level:'warning',\n        title:'Clarity passed \u00B7 check the framing',\n        message:'Keep one full face, the complete top of the head and both shoulders visible. This browser cannot run the optional on-device face-framing check; no AI credit has been used.'\n      };\n    }\n    try {\n      const detector = new FaceDetector({fastMode:true, maxDetectedFaces:2});\n      const faces = await detector.detect(image);\n      if (faces.length !== 1) {\n        return {\n          pass:false,\n          verified:true,\n          level:'fail',\n          title:faces.length ? 'Use a photograph with one person' : 'We could not find a complete face',\n          message:faces.length ? 'Use one front-facing person only, with the full head and shoulders visible.' : 'Choose another full-body photograph with the face looking forward, in clear light, and space above the hairline.'\n        };\n      }\n      const box = faces[0].boundingBox;\n      const width = image.naturalWidth || image.width;\n      const height = image.naturalHeight || image.height;\n      const topMargin = box.y / height;\n      const faceWidth = box.width / width;\n      const faceBottom = (box.y + box.height) / height;\n      if (topMargin < .018 || faceWidth < .055 || faceBottom > .48) {\n        return {\n          pass:false,\n          verified:true,\n          level:'fail',\n          title:'Reframe before generating',\n          message:'Show the complete top of the head with a little space above it, keep the face large enough to recognise, and include both shoulders and the full body.'\n        };\n      }\n      return {\n        pass:true,\n        verified:true,\n        level:'good',\n        title:'Face and photo framing passed \u00B7 zero AI credits used',\n        message:'One complete face, headroom, light and image clarity passed locally on this device. The AI result can still vary and will be checked again after generation.'\n      };\n    } catch (error) {\n      return {\n        pass:true,\n        verified:false,\n        level:'warning',\n        title:'Clarity passed \u00B7 check the framing',\n        message:'Keep one full face, the complete top of the head and both shoulders visible. The on-device face check was unavailable; no AI credit has been used.'\n      };\n    }\n  };\n  const mergeQuality = (base, face) => {\n    if (!base.pass) return base;\n    if (!face.pass) return {...base, ...face, width:base.width, height:base.height, brightness:base.brightness, contrast:base.contrast, sharpness:base.sharpness};\n    if (base.level === 'warning') return {...base, verified:face.verified, message:`${base.message} ${face.message}`};\n    return {...base, ...face, width:base.width, height:base.height, brightness:base.brightness, contrast:base.contrast, sharpness:base.sharpness};\n  };\n  const inspectImage = image => {\n    const max = 160;\n    const scale = Math.min(1, max / Math.max(image.naturalWidth || image.width, image.naturalHeight || image.height));\n    const canvas = document.createElement('canvas');\n    canvas.width = Math.max(1, Math.round((image.naturalWidth || image.width) * scale));\n    canvas.height = Math.max(1, Math.round((image.naturalHeight || image.height) * scale));\n    const context = canvas.getContext('2d', {willReadFrequently:true});\n    context.drawImage(image, 0, 0, canvas.width, canvas.height);\n    const pixels = context.getImageData(0, 0, canvas.width, canvas.height).data;\n    const greys = new Float32Array(canvas.width * canvas.height);\n    let sum = 0;\n    for (let i = 0, p = 0; i < pixels.length; i += 4, p += 1) {\n      const grey = pixels[i] * .299 + pixels[i + 1] * .587 + pixels[i + 2] * .114;\n      greys[p] = grey;\n      sum += grey;\n    }\n    const brightness = sum / greys.length;\n    let variance = 0;\n    let edges = 0;\n    let edgeCount = 0;\n    greys.forEach(value => { variance += (value - brightness) ** 2; });\n    for (let y = 1; y < canvas.height; y += 1) for (let x = 1; x < canvas.width; x += 1) {\n      const i = y * canvas.width + x;\n      edges += Math.abs(greys[i] - greys[i - 1]) + Math.abs(greys[i] - greys[i - canvas.width]);\n      edgeCount += 2;\n    }\n    const contrast = Math.sqrt(variance / greys.length);\n    const sharpness = edges / Math.max(1, edgeCount);\n    const width = image.naturalWidth || image.width;\n    const height = image.naturalHeight || image.height;\n    if (width < 480 || height < 600) return {pass:false, level:'fail', title:'Please use a larger photograph', message:`${width} \u00D7 ${height}px is too small. Use at least 480 \u00D7 600px for a recognisable face and cleaner jacket preview.`, width, height, brightness, contrast, sharpness};\n    if (brightness < 20 || brightness > 245) return {pass:false, level:'fail', title:'Lighting needs improvement', message:'This photograph is too dark or too bright. Retake it in even, natural light before continuing.', width, height, brightness, contrast, sharpness};\n    if (contrast < 18 || sharpness < 5.5) return {pass:true, level:'warning', title:'Usable, but a clearer photo will look better', message:'The image appears soft or low-contrast. You may continue, but a sharp front-facing photo in natural light will produce a more reliable preview.', width, height, brightness, contrast, sharpness};\n    return {pass:true, level:'good', title:'Photo clarity passed \u00B7 zero AI credits used', message:`${width} \u00D7 ${height}px with suitable light and clarity. This local check does not generate or charge for a preview.`, width, height, brightness, contrast, sharpness};\n  };\n  const inspectBlob = blob => new Promise((resolve, reject) => {\n    const image = new Image();\n    const url = URL.createObjectURL(blob);\n    image.onload = async () => {\n      const result = mergeQuality(inspectImage(image), await inspectFaceFraming(image));\n      URL.revokeObjectURL(url);\n      resolve(result);\n    };\n    image.onerror = () => { URL.revokeObjectURL(url); reject(new Error('Photo could not be read')); };\n    image.src = url;\n  });\n  const compress = file => new Promise((resolve, reject) => {\n    const image = new Image();\n    const url = URL.createObjectURL(file);\n    image.onload = async () => {\n      const quality = mergeQuality(inspectImage(image), await inspectFaceFraming(image));\n      const max = 1280;\n      const scale = Math.min(1, max / Math.max(image.width, image.height));\n      const canvas = document.createElement('canvas');\n      canvas.width = Math.round(image.width * scale);\n      canvas.height = Math.round(image.height * scale);\n      canvas.getContext('2d').drawImage(image, 0, 0, canvas.width, canvas.height);\n      canvas.toBlob(blob => { URL.revokeObjectURL(url); blob ? resolve({blob, quality}) : reject(new Error('Photo compression failed')); }, 'image/jpeg', .82);\n    };\n    image.onerror = () => { URL.revokeObjectURL(url); reject(new Error('Photo could not be read')); };\n    image.src = url;\n  });\n  const showImage = blob => {\n    if (!preview || !previewImage || !blob) return;\n    if (previewUrl) URL.revokeObjectURL(previewUrl);\n    previewUrl = URL.createObjectURL(blob);\n    previewImage.src = previewUrl;\n    preview.hidden = false;\n    if (photoInput) photoInput.required = false;\n    photoStage?.classList.add('has-photo');\n    modal.querySelector('[data-goat-fit-photo-label]').textContent = 'Change photograph';\n  };\n  const showForm = profile => {\n    form.hidden = false;\n    saved.hidden = true;\n    if (!profile) { if (photoInput) photoInput.required = true; return; }\n    genderInput.value = profile.gender || '';\n    form.querySelector('[data-goat-fit-size]').value = profile.size || '';\n    form.querySelector('[data-goat-fit-height]').value = profile.height || '';\n    form.querySelector('[data-goat-fit-chest]').value = profile.chest || '';\n    form.querySelector('[data-goat-fit-phone]').value = profile.phone || '';\n    compressedPhoto = profile.photo || null;\n    photoQuality = profile.quality || null;\n    showImage(compressedPhoto);\n    if (photoQuality) renderQuality(photoQuality);\n    else if (compressedPhoto) inspectBlob(compressedPhoto).then(result => { photoQuality = result; renderQuality(result); }).catch(() => null);\n  };\n  const showSaved = profile => {\n    form.hidden = true;\n    saved.hidden = false;\n    modal.querySelector('[data-goat-fit-saved-copy]').textContent = `${genderLabel(profile.gender)} \u00B7 size ${profile.size}${profile.height ? ` \u00B7 ${profile.height} cm` : ''}. One click will generate ${entry.dataset.productTitle} on your saved photo.`;\n  };\n  const openModal = async () => {\n    modal.hidden = false;\n    document.body.classList.add('goat-fit-modal-open');\n    const profile = await getProfile().catch(() => null);\n    profileIsComplete(profile) ? showSaved(profile) : showForm(profile || null);\n    if (profile && !profileIsComplete(profile)) status.textContent = 'One quick update: choose your gender / fit profile to enable one-click previews.';\n    modal.querySelector('.goat-fit-modal__panel').focus?.();\n    track('fit_profile_open');\n  };\n  const closeModal = () => { modal.hidden = true; document.body.classList.remove('goat-fit-modal-open'); };\n\n  const populateTryOn = async (profile, {autoStart = true} = {}) => {\n    const appButton = document.querySelector('button[id^=\"tryon-btn-\"]');\n    if (!appButton) {\n      status.textContent = 'The AI fitting room is temporarily unavailable. Your profile is saved; please use WhatsApp fit help before ordering.';\n      track('fit_preview_unavailable');\n      return;\n    }\n    status.textContent = 'Opening the private AI fitting room and preparing this jacket\u2026';\n    appButton.click();\n    const started = Date.now();\n    let photoInserted = false;\n    let generationStarted = false;\n    const timer = window.setInterval(() => {\n      const input = [...document.querySelectorAll('input[type=\"file\"]')].find(node =>\n        node !== photoInput &&\n        !node.hasAttribute('capture') &&\n        /image/.test(node.getAttribute('accept') || '')\n      );\n      if (!photoInserted && input && profile.photo) {\n        const transfer = new DataTransfer();\n        transfer.items.add(new File([profile.photo], 'goat-fit-profile.jpg', {type:'image/jpeg'}));\n        input.files = transfer.files;\n        input.dispatchEvent(new Event('change', {bubbles:true}));\n        photoInserted = true;\n        track('fit_preview_photo_inserted', {cached_profile:true});\n      }\n      if (photoInserted && autoStart && !generationStarted) {\n        const startButton = [...document.querySelectorAll('button')].find(node =>\n          node.offsetParent !== null &&\n          !node.disabled &&\n          /^get started$/i.test((node.textContent || '').trim())\n        );\n        if (startButton) {\n          generationStarted = true;\n          startButton.click();\n          window.clearInterval(timer);\n          closeModal();\n          track('fit_preview_generation_started', {cached_profile:true, explicit_product_click:true});\n        }\n      } else if (photoInserted && !autoStart) {\n        window.clearInterval(timer);\n        closeModal();\n      }\n      if (Date.now() - started > 12000 && !generationStarted) {\n        window.clearInterval(timer);\n        status.textContent = photoInserted ? 'Your photo is ready inside the fitting room. Press \u201CGet started\u201D to generate this jacket.' : 'The fitting room opened, but the saved photo could not be inserted automatically. Choose it once inside the fitting room.';\n      }\n    }, 250);\n  };\n\n  photoInput?.addEventListener('change', async () => {\n    const file = photoInput.files?.[0];\n    if (!file) return;\n    if (file.size > 8 * 1024 * 1024) { photoInput.value = ''; status.textContent = 'Please choose a photograph smaller than 8 MB.'; return; }\n    try {\n      const result = await compress(file);\n      compressedPhoto = result.blob;\n      photoQuality = result.quality;\n      modal.querySelector('[data-goat-fit-photo-label]').textContent = 'Change photograph';\n      showImage(compressedPhoto);\n      renderQuality(photoQuality);\n      status.textContent = photoQuality.pass ? 'Checked and compressed privately on this device. No AI credit has been used.' : 'Replace this photo before saving. No AI credit has been used.';\n    } catch (error) { status.textContent = error.message; }\n  });\n  form?.addEventListener('submit', async event => {\n    event.preventDefault();\n    if (!form.reportValidity() || !compressedPhoto) { status.textContent = 'Please add a clear photograph, choose gender / fit profile and select your usual size.'; return; }\n    if (!photoQuality) photoQuality = await inspectBlob(compressedPhoto).catch(() => null);\n    if (photoQuality && !photoQuality.pass) { renderQuality(photoQuality); status.textContent = 'Please replace this photograph before generating a preview.'; return; }\n    const profile = {\n      photo: compressedPhoto,\n      quality: photoQuality,\n      gender: genderInput.value,\n      size: form.querySelector('[data-goat-fit-size]').value,\n      height: form.querySelector('[data-goat-fit-height]').value,\n      chest: form.querySelector('[data-goat-fit-chest]').value,\n      phone: form.querySelector('[data-goat-fit-phone]').value.trim(),\n      consentedAt: new Date().toISOString(),\n      version: 3\n    };\n    try {\n      await saveProfile(profile);\n      showSaved(profile);\n      entry.querySelector('[data-goat-fit-entry-copy]').textContent = `${genderLabel(profile.gender)} \u00B7 size ${profile.size} \u00B7 one click per chosen jacket`;\n      entry.querySelector('[data-goat-fit-open]').textContent = 'Generate on me \u00B7 1 preview';\n      track('fit_profile_saved', {size:profile.size, gender:profile.gender, has_phone:Boolean(profile.phone)});\n      await populateTryOn(profile, {autoStart:true});\n    } catch (error) { status.textContent = 'This browser could not save the profile. Please check private browsing or storage settings.'; }\n  });\n  modal.querySelector('[data-goat-fit-preview]')?.addEventListener('click', async () => {\n    const profile = await getProfile().catch(() => null);\n    if (profileIsComplete(profile)) await populateTryOn(profile, {autoStart:true});\n  });\n  modal.querySelector('[data-goat-fit-edit]')?.addEventListener('click', async () => showForm(await getProfile().catch(() => null)));\n  modal.querySelector('[data-goat-fit-delete]')?.addEventListener('click', async () => {\n    await deleteProfile().catch(() => null);\n    compressedPhoto = null;\n    photoQuality = null;\n    photoInput.value = '';\n    photoInput.required = true;\n    if (preview) preview.hidden = true;\n    photoStage?.classList.remove('has-photo');\n    if (qualityPanel) qualityPanel.hidden = true;\n    modal.querySelector('[data-goat-fit-photo-label]').textContent = 'Upload my photograph';\n    entry.querySelector('[data-goat-fit-entry-copy]').textContent = 'Upload once. Then generate any chosen jacket on you in one click.';\n    entry.querySelector('[data-goat-fit-open]').textContent = 'Create my Fit Profile';\n    status.textContent = 'Your private Fit Profile was deleted from this device.';\n    showForm(null);\n    track('fit_profile_deleted');\n  });\n  entry.querySelector('[data-goat-fit-open]')?.addEventListener('click', async () => {\n    const profile = await getProfile().catch(() => null);\n    if (profileIsComplete(profile)) {\n      track('fit_preview_one_click', {gender:profile.gender, size:profile.size});\n      await populateTryOn(profile, {autoStart:true});\n    } else {\n      await openModal();\n    }\n  });\n  modal.querySelectorAll('[data-goat-fit-close]').forEach(button => button.addEventListener('click', closeModal));\n  document.addEventListener('keydown', event => { if (event.key === 'Escape' && !modal.hidden) closeModal(); });\n  getProfile().then(profile => {\n    if (!profile) return;\n    if (profileIsComplete(profile)) {\n      entry.querySelector('[data-goat-fit-entry-copy]').textContent = `${genderLabel(profile.gender)} \u00B7 size ${profile.size} \u00B7 one click per chosen jacket`;\n      entry.querySelector('[data-goat-fit-open]').textContent = 'Generate on me \u00B7 1 preview';\n    } else {\n      entry.querySelector('[data-goat-fit-entry-copy]').textContent = 'Complete one profile field to unlock one-click jacket previews.';\n      entry.querySelector('[data-goat-fit-open]').textContent = 'Complete Fit Profile';\n    }\n  }).catch(() => null);\n  placeEntry();\n  window.addEventListener('resize', placeEntry, {passive:true});\n\n})();\n"],
  "mappings": "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",
  "names": []
}
