{
  "version": 3,
  "sources": ["/cdn/shop/t/4/assets/noise-shader.js?r=1789080886824"],
  "sourcesContent": ["(function () {\n  const VS = `attribute vec2 a_position;\nvarying vec2 v_texCoord;\nvoid main() {\n  v_texCoord = a_position * 0.5 + 0.5;\n  gl_Position = vec4(a_position, 0.0, 1.0);\n}`;\n\n  const FS = `precision highp float;\nvarying vec2 v_texCoord;\nuniform float u_time;\nuniform vec2 u_resolution;\nuniform vec2 u_mouse;\n\nvec3 background = vec3(0.965, 0.957, 0.941);\nvec3 surface = vec3(0.85, 0.82, 0.76);\nvec3 accent = vec3(0.75, 0.68, 0.62);\n\nfloat noise(vec2 p) {\n  return fract(sin(dot(p, vec2(12.9898, 78.233))) * 43758.5453);\n}\nfloat smooth_noise(vec2 p) {\n  vec2 i = floor(p);\n  vec2 f = fract(p);\n  f = f * f * (3.0 - 2.0 * f);\n  float a = noise(i);\n  float b = noise(i + vec2(1.0, 0.0));\n  float c = noise(i + vec2(0.0, 1.0));\n  float d = noise(i + vec2(1.0, 1.0));\n  return mix(mix(a, b, f.x), mix(c, d, f.x), f.y);\n}\nfloat fbm(vec2 p) {\n  float v = 0.0;\n  float a = 0.5;\n  vec2 shift = vec2(100.0);\n  for (int i = 0; i < 6; ++i) {\n    v += a * smooth_noise(p);\n    p = p * 2.0 + shift;\n    a *= 0.5;\n  }\n  return v;\n}\nvoid main() {\n  vec2 uv = v_texCoord;\n  vec2 q = vec2(0.0);\n  q.x = fbm(uv + 0.2 * u_time);\n  q.y = fbm(uv + vec2(1.0) + 0.15 * u_time);\n  vec2 r = vec2(0.0);\n  r.x = fbm(uv + 1.2 * q + vec2(1.7, 9.2) + 0.25 * u_time);\n  r.y = fbm(uv + 1.2 * q + vec2(8.3, 2.8) + 0.2 * u_time);\n  float f = fbm(uv + r);\n  vec3 color = mix(background, surface, clamp(f * f * 3.5, 0.0, 1.0));\n  color = mix(color, accent, clamp(length(r) * 0.8, 0.0, 1.0) * 0.5);\n  float mouseDist = length(uv - (u_mouse / u_resolution));\n  color += (1.0 - smoothstep(0.0, 0.4, mouseDist)) * 0.05;\n  gl_FragColor = vec4(color, 1.0);\n}`;\n\n  function initNoiseShader(canvas) {\n    const gl =\n      canvas.getContext('webgl') ||\n      canvas.getContext('experimental-webgl');\n    if (!gl) return null;\n\n    const syncSize = () => {\n      const w = canvas.clientWidth || 1;\n      const h = canvas.clientHeight || 1;\n      if (canvas.width !== w || canvas.height !== h) {\n        canvas.width = w;\n        canvas.height = h;\n      }\n    };\n\n    const ro = new ResizeObserver(syncSize);\n    ro.observe(canvas);\n    syncSize();\n\n    const compile = (type, src) => {\n      const s = gl.createShader(type);\n      gl.shaderSource(s, src);\n      gl.compileShader(s);\n      return s;\n    };\n\n    const prog = gl.createProgram();\n    gl.attachShader(prog, compile(gl.VERTEX_SHADER, VS));\n    gl.attachShader(prog, compile(gl.FRAGMENT_SHADER, FS));\n    gl.linkProgram(prog);\n    gl.useProgram(prog);\n\n    const buf = gl.createBuffer();\n    gl.bindBuffer(gl.ARRAY_BUFFER, buf);\n    gl.bufferData(\n      gl.ARRAY_BUFFER,\n      new Float32Array([-1, -1, 1, -1, -1, 1, 1, 1]),\n      gl.STATIC_DRAW\n    );\n\n    const pos = gl.getAttribLocation(prog, 'a_position');\n    gl.enableVertexAttribArray(pos);\n    gl.vertexAttribPointer(pos, 2, gl.FLOAT, false, 0, 0);\n\n    const uTime = gl.getUniformLocation(prog, 'u_time');\n    const uRes = gl.getUniformLocation(prog, 'u_resolution');\n    const uMouse = gl.getUniformLocation(prog, 'u_mouse');\n\n    const mouse = { x: canvas.width / 2, y: canvas.height / 2 };\n    const onMove = (e) => {\n      const rect = canvas.getBoundingClientRect();\n      if (!rect.width || !rect.height) return;\n      const nx = (e.clientX - rect.left) / rect.width;\n      const ny = 1.0 - (e.clientY - rect.top) / rect.height;\n      mouse.x = nx * canvas.width;\n      mouse.y = ny * canvas.height;\n    };\n    window.addEventListener('mousemove', onMove);\n\n    let raf = 0;\n    const render = (t) => {\n      gl.viewport(0, 0, canvas.width, canvas.height);\n      if (uTime) gl.uniform1f(uTime, t * 0.001);\n      if (uRes) gl.uniform2f(uRes, canvas.width, canvas.height);\n      if (uMouse) gl.uniform2f(uMouse, mouse.x, mouse.y);\n      gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n      raf = requestAnimationFrame(render);\n    };\n    raf = requestAnimationFrame(render);\n\n    return () => {\n      cancelAnimationFrame(raf);\n      window.removeEventListener('mousemove', onMove);\n      ro.disconnect();\n    };\n  }\n\n  document.addEventListener('DOMContentLoaded', () => {\n    document.querySelectorAll('[data-noise-shader]').forEach((canvas) => {\n      initNoiseShader(canvas);\n    });\n  });\n})();\n"],
  "mappings": "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",
  "names": []
}
