{
  "version": 3,
  "sources": ["/cdn/shop/t/22/assets/wavelength-skin-visualization.js?wv_version=20260819_01"],
  "sourcesContent": ["(() => {\n  if (window.YamuriWavelengthVisualization) {\n    window.YamuriWavelengthVisualization.init(document);\n    return;\n  }\n\n  const selector = '[data-wavelength-visualization]';\n  const instances = new Map();\n  const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)');\n  const compactViewport = window.matchMedia('(max-width: 749px)');\n  const anchors = [\n    [380, [91, 71, 214]], [480, [45, 134, 255]], [590, [214, 126, 0]],\n    [630, [218, 64, 42]], [660, [196, 48, 45]], [670, [166, 35, 35]],\n    [810, [139, 103, 206]], [830, [122, 80, 221]], [850, [105, 54, 204]],\n    [940, [83, 31, 164]], [1100, [61, 20, 123]]\n  ];\n\n  const clampWavelength = (value) => Math.min(1100, Math.max(380, Number.parseInt(value, 10) || 660));\n  const interpolate = (start, end, amount) => Math.round(start + (end - start) * amount);\n\n  const wavelengthColor = (value) => {\n    const wavelength = clampWavelength(value);\n    for (let index = 0; index < anchors.length - 1; index += 1) {\n      const current = anchors[index];\n      const next = anchors[index + 1];\n      if (wavelength < current[0] || wavelength > next[0]) continue;\n      const amount = (wavelength - current[0]) / (next[0] - current[0]);\n      const color = current[1].map((channel, channelIndex) => interpolate(channel, next[1][channelIndex], amount));\n      return `rgb(${color.join(', ')})`;\n    }\n    return `rgb(${anchors[anchors.length - 1][1].join(', ')})`;\n  };\n\n  const gaussian = (x, center, width, height) => height * Math.exp(-Math.pow((x - center) / width, 2));\n\n  const makePath = (bandIndex, layerIndex, bandCount, layerMidpoint, layerSpacing) => {\n    const points = [];\n    const compact = compactViewport.matches;\n    const base = compact\n      ? 135 + bandIndex * (200 / Math.max(bandCount - 1, 1))\n      : 185 + bandIndex * (140 / Math.max(bandCount - 1, 1));\n    const phase = bandIndex * .72 + layerIndex * .06;\n    const offset = (layerIndex - layerMidpoint) * layerSpacing;\n    for (let x = 0; x <= 780; x += 12) {\n      const contour = (48 * Math.sin(x / 120 + phase)\n        + 22 * Math.sin(x / 52 + phase * 1.7)\n        + gaussian(x, 215, 95, -64)\n        + gaussian(x, 470, 80, 46)\n        + gaussian(x, 610, 95, -24));\n      points.push(`${x},${(base + contour + offset).toFixed(2)}`);\n    }\n    return `M ${points.join(' L ')}`;\n  };\n\n  const svgElement = (name, attributes = {}) => {\n    const element = document.createElementNS('http://www.w3.org/2000/svg', name);\n    Object.entries(attributes).forEach(([key, value]) => element.setAttribute(key, String(value)));\n    return element;\n  };\n\n  const renderSvg = (instance) => {\n    const svg = instance.root.querySelector('[data-wavelength-svg]');\n    const bands = Array.from(instance.root.querySelectorAll('[data-wavelength-band]'));\n    if (!svg || !bands.length) return;\n\n    const fragment = document.createDocumentFragment();\n    const guideCount = compactViewport.matches ? 5 : 9;\n    for (let index = 0; index < guideCount; index += 1) {\n      const x = 18 + index * ((780 - 36) / (guideCount - 1));\n      fragment.append(\n        svgElement('line', { class: 'wavelength-visualization__depth-line', x1: x, y1: 15, x2: x, y2: 500 }),\n        svgElement('circle', { class: 'wavelength-visualization__depth-dot', cx: x, cy: 15, r: 2.2 }),\n        svgElement('circle', { class: 'wavelength-visualization__depth-dot', cx: x, cy: 500, r: 2.2 })\n      );\n    }\n\n    bands.forEach((band, bandIndex) => {\n      const value = clampWavelength(band.dataset.wavelength);\n      const color = band.dataset.autoColor === 'true' ? wavelengthColor(value) : band.dataset.color;\n      band.style.setProperty('--wv-band-color', color);\n      const group = svgElement('g', { class: 'wavelength-visualization__wave-group' });\n      group.style.setProperty('--wv-band-color', color);\n      group.style.animationDelay = `${bandIndex * -.65}s`;\n\n      const layerCount = compactViewport.matches ? 9 : 21;\n      const layerMidpoint = (layerCount - 1) / 2;\n      const layerSpacing = compactViewport.matches ? 6.5 : 4.2;\n      for (let layerIndex = 0; layerIndex < layerCount; layerIndex += 1) {\n        const distance = Math.abs(layerIndex - layerMidpoint);\n        const path = svgElement('path', {\n          class: `wavelength-visualization__wave${layerIndex === layerMidpoint ? ' wavelength-visualization__wave--highlight' : ''}`,\n          d: makePath(bandIndex, layerIndex, bands.length, layerMidpoint, layerSpacing)\n        });\n        if (layerIndex !== layerMidpoint) path.style.opacity = String(.16 + (1 - distance / (layerMidpoint + 1)) * .3);\n        group.append(path);\n      }\n      fragment.append(group);\n    });\n\n    svg.replaceChildren(fragment);\n  };\n\n  const motionAllowed = (instance) => instance.enabled\n    && instance.visible\n    && !document.hidden\n    && (!instance.respectReducedMotion || !reducedMotion.matches);\n\n  const updateMotion = (instance) => {\n    const active = motionAllowed(instance);\n    instance.root.classList.toggle('is-animation-active', active);\n  };\n\n  const initRoot = (root) => {\n    if (instances.has(root)) return;\n    const rect = root.getBoundingClientRect();\n    const instance = {\n      root,\n      enabled: root.dataset.enableAnimation !== 'false',\n      respectReducedMotion: root.dataset.respectReducedMotion !== 'false',\n      visible: rect.bottom >= -160 && rect.top <= window.innerHeight + 160,\n      observer: null\n    };\n\n    renderSvg(instance);\n    if ('IntersectionObserver' in window) {\n      instance.observer = new IntersectionObserver((entries) => {\n        instance.visible = entries.some((entry) => entry.isIntersecting);\n        updateMotion(instance);\n      }, { rootMargin: '160px 0px', threshold: 0 });\n      instance.observer.observe(root);\n    } else {\n      instance.visible = true;\n    }\n\n    instances.set(root, instance);\n    updateMotion(instance);\n  };\n\n  const init = (scope = document) => {\n    if (scope.matches?.(selector)) initRoot(scope);\n    scope.querySelectorAll?.(selector).forEach(initRoot);\n  };\n\n  const destroy = (scope) => {\n    const roots = [];\n    if (scope.matches?.(selector)) roots.push(scope);\n    scope.querySelectorAll?.(selector).forEach((root) => roots.push(root));\n    roots.forEach((root) => {\n      const instance = instances.get(root);\n      if (!instance) return;\n      instance.observer?.disconnect();\n      instances.delete(root);\n    });\n  };\n\n  const updateAll = () => instances.forEach(updateMotion);\n  const api = { init, destroy };\n  window.YamuriWavelengthVisualization = api;\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', () => init(), { once: true });\n  } else {\n    init();\n  }\n  document.addEventListener('visibilitychange', updateAll);\n  reducedMotion.addEventListener?.('change', updateAll);\n  compactViewport.addEventListener?.('change', () => {\n    instances.forEach((instance) => {\n      renderSvg(instance);\n      updateMotion(instance);\n    });\n  });\n  document.addEventListener('shopify:section:load', (event) => init(event.target));\n  document.addEventListener('shopify:section:unload', (event) => destroy(event.target));\n})();\n"],
  "mappings": "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",
  "names": []
}
