{
  "version": 3,
  "sources": ["/cdn/shop/t/3/assets/fluid-home.js?x=9273"],
  "sourcesContent": ["/* FLUID 3D garments (three.js).\n   The hoodie and quarter-zip are textured 3D models generated in Meshy from the studio photos (front, back, side),\n   slimmed down in Blender for the web: shape in assets/fl3d-<piece>.glb (compressed), textures as JPGs\n   (fl3d-<piece>-base / -mr / -normal). One texture set serves all four colours: the shader keeps each pixel's light\n   and shade (folds, ribbing, fabric) and replaces only the cloth colour; metal (the zip) stays metal and the dark\n   logo turns cream on dark pieces. A new colour rises through the cloth like liquid.\n   Used twice: the home hero (drag to turn, slow auto-spin) and the colour story (scroll turns it).\n   If WebGL is missing the plain photos already in the page stay visible. */\nimport * as THREE from \"three\";\nimport { GLTFLoader } from \"three/addons/loaders/GLTFLoader.js\";\nimport { DRACOLoader } from \"three/addons/loaders/DRACOLoader.js\";\nimport { RoomEnvironment } from \"three/addons/environments/RoomEnvironment.js\";\n\nconst ASSETS = window.FL_ASSETS || {};\nconst reduce = matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\nconst TAU = Math.PI * 2;\n\n/* cloth colours (sRGB) and the logo colour on each; cream uses the model's own cloth colour */\nconst FABRIC = {\n  black: { cloth: \"#2a2a2a\", emblem: \"#e9dfc8\", logo: 1 },\n  cream: { cloth: null, emblem: null, logo: 0 },\n  olive: { cloth: \"#545838\", emblem: \"#e9dfc8\", logo: 1 },\n  maroon: { cloth: \"#5a1524\", emblem: \"#efe3cd\", logo: 1 }\n};\n/* the FLUID chest emblem is the same small size on every piece (about 3 cm on the garment; brand rule 25-35 mm) */\nconst EMBLEM_SIZE = 0.036;\n/* per piece: files and the cloth's own median colour/brightness (measured by tools/meshy_textures.py) */\nconst PIECE = {\n  hoodie: { glb: \"model-hoodie\", textured: false, cream: \"#e6dcc8\", medLum: 1, emblem: [0.185, 0.69, EMBLEM_SIZE], normal: 0, detail: [1, 1] },\n  quarterzip: { glb: \"model-quarterzip\", textured: false, cream: \"#e6dcc8\", medLum: 1, emblem: [0.19, 0.705, EMBLEM_SIZE], normal: 0, detail: [1, 1] }\n};\n\n/* ---------- FLUID emblem decal (white on transparent, drawn from the brand SVG) ---------- */\nlet emblemTex = null;\nfunction emblemTexture() {\n  if (emblemTex) return emblemTex;\n  const c = document.createElement(\"canvas\"); c.width = c.height = 512;\n  emblemTex = new THREE.CanvasTexture(c);\n  const img = new Image(); img.crossOrigin = \"anonymous\";\n  img.onload = () => { c.getContext(\"2d\").drawImage(img, 0, 0, 512, 512); emblemTex.needsUpdate = true; };\n  if (ASSETS.emblem) img.src = ASSETS.emblem;\n  return emblemTex;\n}\n\n/* ---------- a viewer: one canvas showing one garment at a time ---------- */\nfunction createViewer(stage, canvas, { fitMargin = 1.1 } = {}) {\n  let renderer;\n  try { renderer = new THREE.WebGLRenderer({ canvas, alpha: true, antialias: true, powerPreference: \"high-performance\" }); }\n  catch (e) { return null; }\n  if (!renderer.getContext()) return null;\n  renderer.setPixelRatio(Math.min(devicePixelRatio || 1, 2));\n  renderer.outputColorSpace = THREE.SRGBColorSpace;\n  renderer.setClearColor(0x000000, 0);\n  const scene = new THREE.Scene();\n  const pmrem = new THREE.PMREMGenerator(renderer);\n  scene.environment = pmrem.fromScene(new RoomEnvironment(), 0.04).texture;\n  const camera = new THREE.PerspectiveCamera(24, 1, 0.1, 60);\n  // light: one spotlight from above, a soft fill from the front, an edge light from behind\n  scene.add(new THREE.HemisphereLight(0xffffff, 0x303030, 0.55));\n  const spot = new THREE.SpotLight(0xffffff, 55, 0, 0.55, 0.65, 2); spot.position.set(0.4, 5.2, 2.6); scene.add(spot); scene.add(spot.target);\n  const fill = new THREE.DirectionalLight(0xffffff, 0.55); fill.position.set(0.6, 0.4, 4); scene.add(fill);\n  const rim = new THREE.DirectionalLight(0xfff2e0, 1.4); rim.position.set(-2.5, 2.5, -3.5); scene.add(rim);\n  const bank = new THREE.Group(); scene.add(bank);              // tilts and banks the spin axis, like a garment floating in air\n  const holder = new THREE.Group(); bank.add(holder);\n\n  const draco = new DRACOLoader(); draco.setDecoderPath(\"https://cdn.jsdelivr.net/npm/three@0.160.0/examples/jsm/libs/draco/gltf/\");\n  const gltf = new GLTFLoader(); gltf.setDRACOLoader(draco);\n  const tl = new THREE.TextureLoader(); tl.setCrossOrigin(\"anonymous\");\n  const aniso = Math.min(8, renderer.capabilities.getMaxAnisotropy());\n  const tex = (url, srgb) => new Promise((res, rej) => tl.load(url, t => {\n    t.flipY = false; t.colorSpace = srgb ? THREE.SRGBColorSpace : THREE.NoColorSpace; t.anisotropy = aniso; res(t);\n  }, undefined, rej));\n  const pieces = new Map();   // piece -> Promise of { scene, base, mr, normal, box }\n  function getPiece(piece) {\n    if (!pieces.has(piece)) {\n      const P = PIECE[piece];\n      const model = new Promise((res, rej) => gltf.load(ASSETS[P.glb], g => res(g.scene), undefined, rej));\n      pieces.set(piece, P.textured\n        ? Promise.all([model, tex(ASSETS[`tex-${P.tex}-base`], true), tex(ASSETS[`tex-${P.tex}-mr`], false), tex(ASSETS[`tex-${P.tex}-normal`], false)])\n            .then(([sc, base, mr, normal]) => ({ scene: sc, base, mr, normal }))\n        : model.then(sc => ({ scene: sc })));\n    }\n    return pieces.get(piece);\n  }\n\n  function clothMaterial(piece, t, y0, y1, emb) {\n    const P = PIECE[piece];\n    const u = {\n      uTint: { value: new THREE.Color(P.cream) }, uTint2: { value: new THREE.Color(P.cream) },\n      uEmb: { value: new THREE.Color(\"#1d1b18\") }, uEmb2: { value: new THREE.Color(\"#1d1b18\") },\n      uLogo: { value: 0 }, uLogo2: { value: 0 }, uMix: { value: 1 }, uTime: { value: 0 }, uFade: { value: 1 },\n      uMedLum: { value: P.medLum }, uCream: { value: new THREE.Color(P.cream) }, uY: { value: new THREE.Vector2(y0, y1) },\n      uEmbTex: { value: emblemTexture() }, uEmbRect: { value: emb }, uEmbZ: { value: 0 }\n    };\n    const m = P.textured\n      ? new THREE.MeshStandardMaterial({ map: t.base, roughnessMap: t.mr, metalnessMap: t.mr, normalMap: t.normal, roughness: 1, metalness: 1, envMapIntensity: 0.35 })\n      : new THREE.MeshStandardMaterial({ vertexColors: true, roughness: 0.92, metalness: 0, envMapIntensity: 0.3, side: THREE.DoubleSide });   // baked soft shadows ride in the vertex colours\n    if (P.textured) m.normalScale.setScalar(P.normal);\n    u.uDetail = { value: new THREE.Vector2(P.detail[0], P.detail[1]) };\n    m.onBeforeCompile = sh => {\n      Object.assign(sh.uniforms, u);\n      sh.vertexShader = \"varying vec3 vObj; varying vec3 vObjN;\\n\" + sh.vertexShader.replace(\"#include <begin_vertex>\", \"#include <begin_vertex>\\n  vObj = position; vObjN = normal;\");\n      sh.fragmentShader = /* glsl */`\n        uniform vec3 uTint, uTint2, uEmb, uEmb2, uCream, uEmbRect; uniform float uLogo, uLogo2, uMix, uTime, uFade, uMedLum; uniform vec2 uY, uDetail;\n        uniform sampler2D uEmbTex; uniform float uEmbZ;\n        varying vec3 vObj; varying vec3 vObjN;\n        float flHash(vec2 p) { return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453); }\n        float flNoise(vec2 p) { vec2 i = floor(p), f = fract(p); vec2 w = f * f * (3.0 - 2.0 * f);\n          return mix(mix(flHash(i), flHash(i + vec2(1, 0)), w.x), mix(flHash(i + vec2(0, 1)), flHash(i + vec2(1, 1)), w.x), w.y); }\n      ` + sh.fragmentShader\n        .replace(\"void main() {\", \"void main() {\\n  if (uFade < 0.999 && flHash(gl_FragCoord.xy) > uFade) discard;\")\n        .replace(\"#include <map_fragment>\", /* glsl */`\n          #ifdef USE_MAP\n            vec4 texel = texture2D(map, vMapUv);\n            float metal = texture2D(metalnessMap, vMetalnessMapUv).b;\n          #else\n            vec4 texel = vec4(1.0);\n            float metal = 0.0;\n          #endif\n          float detail = dot(texel.rgb, vec3(0.2126, 0.7152, 0.0722)) / uMedLum;      // this pixel's light and shade (1.0 when untextured)\n          #ifndef USE_MAP\n            detail = 0.96 + 0.08 * flNoise(vObj.xy * 260.0 + vObj.z * 120.0);         // fine fleece texture\n          #endif\n          // the next colour rises from the hem like liquid\n          float v = (vObj.y - uY.x) / (uY.y - uY.x);\n          float wave = flNoise(vec2(vObj.x * 2.5 + uTime * 0.6, uTime * 0.3)) * 0.1 + sin(vObj.x * 7.0 + uTime * 3.0) * 0.012;\n          float level = uMix * 1.4 - 0.2;\n          float k = 1.0 - smoothstep(level - 0.03, level + 0.03, v - wave);\n          vec3 tint = mix(uTint, uTint2, k); vec3 emb = mix(uEmb, uEmb2, k); float logo = mix(uLogo, uLogo2, k);\n          vec3 cloth = tint * clamp(detail, uDetail.x, uDetail.y);\n          float isLogo = (1.0 - smoothstep(0.3, 0.5, detail)) * logo;              // the dark chest logo turns cream on dark cloth\n          #ifdef USE_MAP\n          cloth = mix(cloth, tint, 1.0 - smoothstep(0.3, 0.5, detail));             // erase Meshy's soft baked logo; the crisp decal below replaces it\n          #endif\n          // the FLUID emblem on the left chest, projected from the front\n          vec2 euv = (vObj.xy - uEmbRect.xy) / uEmbRect.z + 0.5;\n          float einside = step(0.0, euv.x) * step(euv.x, 1.0) * step(0.0, euv.y) * step(euv.y, 1.0) * smoothstep(0.25, 0.55, normalize(vObjN).z) * step(uEmbZ, vObj.z);   // front of the chest only, never the arm behind it\n          cloth = mix(cloth, emb * mix(0.85, 1.0, clamp(detail, 0.0, 1.0)), texture2D(uEmbTex, euv).a * einside);\n          vec3 col = mix(cloth, texel.rgb, step(0.5, metal));                        // the zip stays metal\n          float edge = (1.0 - smoothstep(0.0, 0.025, abs(v - wave - level))) * step(0.001, uMix) * step(uMix, 0.999);\n          diffuseColor.rgb *= col + edge * 0.08;\n        `);\n    };\n    m.userData.u = u;\n    return m;\n  }\n\n  function makeInstance(piece, data) {\n    const group = data.scene.clone(true);\n    const box = new THREE.Box3().setFromObject(group), c = box.getCenter(new THREE.Vector3()), size = box.getSize(new THREE.Vector3());\n    const E = PIECE[piece].emblem;\n    const embRect = new THREE.Vector3(c.x + E[0] * size.x, box.min.y + E[1] * size.y, E[2] * size.y);\n    const material = clothMaterial(piece, data, box.min.y, box.max.y, embRect);\n    material.userData.u.uEmbZ.value = box.max.z - 0.22 * size.z;\n    const metal = new THREE.MeshStandardMaterial({ color: 0xc9c9c6, metalness: 1, roughness: 0.28, envMapIntensity: 1.2 });\n    group.traverse(o => { if (o.isMesh) { o.material = /_zip$/i.test(o.name) ? metal : material; o.frustumCulled = false; } });\n    group.position.sub(c);\n    const wrap = new THREE.Group(); wrap.add(group);\n    return { piece, mesh: wrap, material, u: material.userData.u, size, look: null };\n  }\n  function colourOf(piece, colour) {\n    const f = FABRIC[colour] || FABRIC.black, P = PIECE[piece];\n    return { cloth: f.cloth || P.cream, emblem: f.emblem || \"#1d1b18\", logo: f.logo };\n  }\n  function setColours(inst, colour, second) {\n    const c = colourOf(inst.piece, colour), u = inst.u;\n    if (second) { u.uTint2.value.set(c.cloth); u.uEmb2.value.set(c.emblem); u.uLogo2.value = c.logo; }\n    else { u.uTint.value.set(c.cloth); u.uTint2.value.set(c.cloth); u.uEmb.value.set(c.emblem); u.uEmb2.value.set(c.emblem); u.uLogo.value = u.uLogo2.value = c.logo; }\n  }\n\n  let cur = null, wipe = null, fade = null, seq = 0, onReady = null, fitSize = new THREE.Vector3(1.5, 2.0, 0.7);\n  function finish() {\n    if (wipe) { const u = cur.u; u.uTint.value.copy(u.uTint2.value); u.uEmb.value.copy(u.uEmb2.value); u.uLogo.value = u.uLogo2.value; u.uMix.value = 1; wipe = null; }\n    if (fade) { holder.remove(fade.out.mesh); fade.out.material.dispose(); fade.in.u.uFade.value = 1; fade = null; }\n  }\n  function show(inst) { cur = inst; fitSize = inst.size; resize(); }\n  async function setLook(next, instant) {\n    const my = ++seq;\n    const data = await getPiece(next.product);\n    if (my !== seq) return;\n    finish();\n    if (!cur) { const i = makeInstance(next.product, data); setColours(i, next.colour); i.look = next; holder.add(i.mesh); show(i); onReady && onReady(); return; }\n    if (cur.look && cur.look.product === next.product && cur.look.colour === next.colour) return;\n    const t0 = performance.now();\n    if (cur.piece === next.product && !instant && !reduce) {\n      setColours(cur, next.colour, true); cur.u.uMix.value = 0; cur.look = next; wipe = { t0, dur: 1150 };\n    } else {\n      const inc = makeInstance(next.product, data); setColours(inc, next.colour); inc.look = next;\n      if (instant || reduce) { holder.remove(cur.mesh); cur.material.dispose(); holder.add(inc.mesh); show(inc); }\n      else { inc.u.uFade.value = 0; holder.add(inc.mesh); fade = { out: cur, in: inc, t0, dur: 700 }; show(inc); }\n    }\n  }\n  // colour story: colour a, with colour b rising through it by `mix` (driven by scroll, no timers)\n  let scrubPiece = null;\n  async function scrub(d) {\n    scrubPiece = d.product;\n    const data = await getPiece(d.product);\n    if (scrubPiece !== d.product) return;                  // the scroll moved on while this piece loaded\n    if (!cur) { const i = makeInstance(d.product, data); holder.add(i.mesh); show(i); onReady && onReady(); }\n    else if (cur.piece !== d.product) {                    // hoodie -> quarter-zip (or back): swap the model with a quick fade\n      finish();\n      const inc = makeInstance(d.product, data);\n      if (reduce) { holder.remove(cur.mesh); cur.material.dispose(); holder.add(inc.mesh); show(inc); }\n      else { inc.u.uFade.value = 0; holder.add(inc.mesh); fade = { out: cur, in: inc, t0: performance.now(), dur: 450 }; show(inc); }\n    }\n    const ca = colourOf(cur.piece, d.a), cb = colourOf(cur.piece, d.b), u = cur.u;\n    u.uTint.value.set(ca.cloth); u.uEmb.value.set(ca.emblem); u.uLogo.value = ca.logo;\n    u.uTint2.value.set(cb.cloth); u.uEmb2.value.set(cb.emblem); u.uLogo2.value = cb.logo;\n    u.uMix.value = d.mix;\n  }\n\n  const state = { rotY: -0.3, tilt: 0 };\n  function resize() {\n    const w = stage.clientWidth, h = stage.clientHeight; if (!w || !h) return;\n    renderer.setSize(w, h, false);\n    camera.aspect = w / h;\n    const t = Math.tan(THREE.MathUtils.degToRad(camera.fov / 2));\n    const gh = fitSize.y, gw = Math.max(fitSize.x, fitSize.z);\n    const dist = Math.max((gh * fitMargin) / 2 / t, (gw * fitMargin * 1.1) / 2 / t / camera.aspect);\n    camera.position.set(0, -0.28 * gh / 2, dist + 0.3); camera.lookAt(0, 0.03, 0);   // slightly low, looking up, like a product film\n    camera.updateProjectionMatrix();\n  }\n  new ResizeObserver(resize).observe(stage); resize();\n\n  let visible = true;\n  if (\"IntersectionObserver\" in window) new IntersectionObserver(([e]) => { visible = e.isIntersecting; }).observe(stage);\n  const clock = new THREE.Clock();\n  const hooks = [];\n  function frame() {\n    requestAnimationFrame(frame);\n    if (!visible || !cur) return;\n    const dt = Math.min(clock.getDelta(), 0.05), t = clock.elapsedTime, now = performance.now();\n    for (const h of hooks) h(dt, t);\n    holder.rotation.set(0, state.rotY, 0);\n    const sw = reduce ? 0 : 1;\n    bank.rotation.set(0.1 + state.tilt, 0, sw * (Math.sin(state.rotY) * 0.12 - 0.05 + Math.sin(t * 0.6) * 0.02));\n    bank.position.y = sw * Math.sin(t * 0.9) * 0.035;   // floats\n    for (const o of [cur, fade && fade.out]) if (o) o.u.uTime.value = t;\n    if (wipe) {\n      const k = Math.min(1, (now - wipe.t0) / wipe.dur);\n      cur.u.uMix.value = k < 0.5 ? 2 * k * k : 1 - Math.pow(-2 * k + 2, 2) / 2;\n      if (k >= 1) finish();\n    }\n    if (fade) {\n      const k = Math.min(1, (now - fade.t0) / fade.dur);\n      fade.out.u.uFade.value = 1 - k; fade.in.u.uFade.value = k;\n      state.rotY += (1 - k) * 0.05;\n      if (k >= 1) finish();\n    }\n    renderer.render(scene, camera);\n  }\n  frame();\n  return { setLook, scrub, state, hooks, stage, set onReady(f) { onReady = f; } };\n}\n\n/* ---------- hero: drag to turn, otherwise a slow spin that lingers on the front ---------- */\nconst hero = document.querySelector(\"[data-fl-hero]\");\nif (hero) {\n  const stage = hero.querySelector(\"[data-hero-stage]\");\n  const viewer = createViewer(stage, hero.querySelector(\".fl-hero-canvas\"), { fitMargin: 1.12 });\n  if (viewer) {\n    const { state } = viewer;\n    let dragging = false, lastX = 0, vel = 0, lastMove = 0, tiltTarget = 0;\n    stage.addEventListener(\"pointerdown\", e => { dragging = true; lastX = e.clientX; vel = 0; stage.classList.add(\"dragging\"); stage.setPointerCapture(e.pointerId); });\n    stage.addEventListener(\"pointermove\", e => {\n      const r = stage.getBoundingClientRect();\n      tiltTarget = (((e.clientY - r.top) / r.height) * 2 - 1) * 0.1;\n      if (!dragging) return;\n      const dx = e.clientX - lastX; lastX = e.clientX;\n      state.rotY += dx * 0.012; vel = dx * 0.012; lastMove = performance.now();\n    });\n    const end = () => { dragging = false; stage.classList.remove(\"dragging\"); };\n    stage.addEventListener(\"pointerup\", end); stage.addEventListener(\"pointercancel\", end);\n    stage.addEventListener(\"pointerleave\", () => { tiltTarget = 0; });\n    viewer.hooks.push((dt) => {\n      if (!dragging) {\n        vel *= 0.94; state.rotY += vel;\n        const idle = performance.now() - lastMove > 1500;\n        if (idle && !reduce) state.rotY += dt * (0.14 + 0.62 * Math.pow(Math.sin(state.rotY / 2), 2));   // slows down at the front\n      }\n      state.tilt += (tiltTarget - state.tilt) * Math.min(1, dt * 4);\n    });\n    viewer.onReady = () => hero.classList.add(\"gl\");\n    let first = true;\n    document.addEventListener(\"fl:look\", e => { if (e.detail) { viewer.setLook(e.detail, first); first = false; } });\n    viewer.setLook({ product: \"hoodie\", colour: \"black\" }, true).catch(() => {});\n  }\n}\n\n/* ---------- colour story: one model in the middle; scroll turns it and walks through pieces and colours ---------- */\ndocument.querySelectorAll(\"[data-fl-cs]\").forEach(story => {\n  const card = story.querySelector(\".fl-cs-card\");\n  const viewer = createViewer(card, card.querySelector(\".fl-cs-canvas\"), { fitMargin: 1.06 });\n  if (!viewer) return;\n  viewer.onReady = () => story.classList.add(\"gl\");\n  let target = 0, tiltT = 0;\n  story.addEventListener(\"fl:story\", e => {\n    const { piece, colour, next, mix, f } = e.detail;\n    viewer.scrub({ product: piece, a: colour, b: next, mix });\n    target = reduce ? 0 : f * TAU;                        // exactly one full turn per step, in step with the scroll\n    tiltT = reduce ? 0 : Math.sin(f * TAU) * -0.05;\n  });\n  viewer.hooks.push(dt => {\n    const k = 1 - Math.exp(-dt * 18);\n    viewer.state.rotY += (target - viewer.state.rotY) * k;\n    viewer.state.tilt += (tiltT - viewer.state.tilt) * k;\n  });\n  viewer.scrub({ product: card.dataset.piece || \"hoodie\", a: \"black\", b: \"black\", mix: 0 });\n});\n"],
  "mappings": "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",
  "names": []
}
