Codrops 원본

Volatile Nexus: Tinkering with Glass, Caustics, Cubes and Sound in Three.js

섹션 · MIT

섹션 더 보기
ORIGINAL PREVIEW
Volatile Nexus: Tinkering with Glass, Caustics, Cubes and Sound in Three.js 정적 미리보기

갤러리 안에서는 화면을 벗어나거나 움직임을 멈추면 예제도 닫힙니다. 다시 재생할 때는 처음부터 시작해요.

큰 화면으로 보기 새 탭

SOURCE FILES

원본 코드 읽기

11개 파일

수집한 원본 소스와 실행 안내를 함께 제공합니다.

garden-anomaly/index.html
파일 저장

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>Garden Anomaly.</title>
<link rel="stylesheet" href="styles/style.css"/>
</head>
<body>
<div id="pane-container"></div>
<div id="vignette"></div>
<div id="title-block">
  <span id="title-eyebrow">Tinker Day #41</span>
  <span id="title-headline">Garden anomaly.</span>
  <p style="font-size: 14px;">
    Move mouse over the bubbles in the<br>glass to interact. Mousedown & move<br> 
    to rotate the scene.<br><br>You might enable sound for<br>the full experience.<br />
  </p>
</div>
<footer><a id="nav-prev-all" href="https://dasprinzip.com/tinker/index.html">&#8593; Checkout all days</a><a id="nav-prev" href="https://dasprinzip.com/tinker/day40/"><br>&larr; The Day Before.</a></footer>
<div id="loader"><div class="spinner"></div><div class="loading-text">loading<span class="dot">.</span><span class="dot">.</span><span class="dot">.</span></div></div>
<script type="importmap">
{
  "imports": {
    "three": "https://cdn.jsdelivr.net/npm/three@0.184.0/build/three.webgpu.js",
    "three/webgpu": "https://cdn.jsdelivr.net/npm/three@0.184.0/build/three.webgpu.js",
    "three/tsl": "https://cdn.jsdelivr.net/npm/three@0.184.0/build/three.tsl.js",
    "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.184.0/examples/jsm/",
    "tweakpane": "https://cdn.jsdelivr.net/npm/tweakpane@4.0.5/dist/tweakpane.min.js"
  }
}
</script>
<script type="module">
import * as THREE from 'three';
import { uv, vec3, vec4, smoothstep, pow, uniform, pass, color, uniformArray, positionGeometry, normalize, max, float, exp, transformNormalToView, texture, vec2, cross } from 'three/tsl';
import { bloom } from 'three/addons/tsl/display/BloomNode.js';
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
import { RoomEnvironment } from 'three/addons/environments/RoomEnvironment.js';
import { Pane } from 'tweakpane';



// ═══════════════════════════════════════════════════════════════════
//  housekeeping git mostly image free ...that´s why base64
// ═══════════════════════════════════════════════════════════════════

const ROUGH_B64 = 'data:image/jpeg;base64,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';
const NORMAL_B64 = 'data:image/webp;base64,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';



// ═══════════════════════════════════════════════════════════════════
//  tweakable param(s)
// ═══════════════════════════════════════════════════════════════════

const prm = {
  // physics
  simSpeed:   0.37,
  gravity:    1.65,    // downward pull
  throwPow:   1.04,    // hover-fling impulse strength
  friction:   3.91,    // contact damping (settles the pile, slides on glass)
  damp:       0.9,    // air drag (1/s)
  // shell
  ior:        1.30,
  thickness:  1.42,
  roughness:  0.36,
  nrmScale:   1.0,    // ice normal-map strength
  irid:       0.90,
  iridIor:    1.55,
  envInt:     2.12,
  bgInt:      1.0,    // background (incl. through-glass) intensity
  bulgeAmt:   0.15,   // impact → bulge amplitude scale
  bulgeSharp: 43.30,     // bump localization (higher = tighter)
  bulgeRel:   2.77,   // bulge relax-back rate (1/s)
  attColor:   '#0033ff', // attenuation (glass depth) tint
  attDist:    8.40,      // attenuation distance
  dentAO:     3.20,    // AO-style darkening inside the dent
  dentNrm:    1.96,    // analytic normal perturbation strength
  scanInt:    0.45,   // scanline emissive intensity
  scanSpeed:  0.18,   // scanline wander speed (uv/s)
  rotY:       0.12,   // constant glass spin around Y (rad/s)
  rotX:       0.05,   // slower tumble around X (rad/s)
  // blobs
  blobRough:  0.34,
  blobCoat:   0.35,
  colorDeep:  '#1f7cff',
  colorLight: '#082b4f',
  blowPow:    5.22,    // invisible up-blast strength
  blowDelay:  0.2,    // seconds of rest before the blast (200ms)
  // sound
  sndOn:      true,
  sndVol:     0.12,
  // glow / post
  bgTop:      '#faf5ea', // background gradient top
  bgBot:      '#d6c9b4', // background gradient bottom
  shadowColor: '#4d6096',
  shadowScale: 0.0,
  glowColor:  '#93b4f2',
  glowAlpha:  0.62,
  shadowAlpha: 1.00,
  bloomStrength: 0.02,
  bloomRadius:   0.00,
  bloomThreshold: 0.76,
  exposure:   0.80,
};

const SHELL_R = 1.3;
const N_BLOBS = 64;



// ═══════════════════════════════════════════════════════════════════
//  setup renderer
// ═══════════════════════════════════════════════════════════════════

if (!navigator.gpu) document.getElementById('ver').textContent = 'WebGPU not available in this browser';

const renderer = new THREE.WebGPURenderer({ antialias: true });
renderer.setPixelRatio(Math.min(devicePixelRatio, 2));
renderer.setSize(innerWidth, innerHeight);
renderer.toneMapping = THREE.ACESFilmicToneMapping;
renderer.toneMappingExposure = prm.exposure;
document.body.appendChild(renderer.domElement);
await renderer.init();

const scene = new THREE.Scene();
// vertical gradient backdrop, rebuildable from the pane
const bgCanvas = document.createElement('canvas');
bgCanvas.width = 4; bgCanvas.height = 512;
const bgTex = new THREE.CanvasTexture(bgCanvas);
bgTex.colorSpace = THREE.SRGBColorSpace;
function rebuildBg() {
  const g = bgCanvas.getContext('2d');
  const grad = g.createLinearGradient(0, 0, 0, 512);
  grad.addColorStop(0, prm.bgTop);
  grad.addColorStop(1, prm.bgBot);
  g.fillStyle = grad; g.fillRect(0, 0, 4, 512);
  bgTex.needsUpdate = true;
  document.body.style.background = `linear-gradient(${prm.bgTop}, ${prm.bgBot})`;
}
rebuildBg();
scene.background = bgTex;



// ═══════════════════════════════════════════════════════════════════
//  external envmap
// ═══════════════════════════════════════════════════════════════════

const ENV_URL = './equiRectGarden.jpg'; // set to '' to always keep the gradient
function useEnvmap(t) {
  t.mapping = THREE.EquirectangularReflectionMapping;
  scene.background = t;
  scene.environment = t;
}
if (ENV_URL) {
  try {
    if (/\.hdr$/i.test(ENV_URL)) {
      const { HDRLoader } = await import('three/addons/loaders/HDRLoader.js');
      new HDRLoader().load(ENV_URL, useEnvmap, undefined, () => {});
    } else {
      new THREE.TextureLoader().load(ENV_URL, t => { t.colorSpace = THREE.SRGBColorSpace; useEnvmap(t); }, undefined, () => {});
    }
  } catch (e) { /* keep gradient */ }
}

const camera = new THREE.PerspectiveCamera(38, innerWidth / innerHeight, 0.1, 60);
camera.position.set(0, 0.08, 7.6);

const controls = new OrbitControls(camera, renderer.domElement);
controls.enableDamping = true;
controls.dampingFactor = 0.06;
controls.target.set(0, 0, 0);



// ═══════════════════════════════════════════════════════════════════
//  environment
// ═══════════════════════════════════════════════════════════════════

const pmrem = new THREE.PMREMGenerator(renderer);
const roomEnv = pmrem.fromScene(new RoomEnvironment(), 0.04).texture;
scene.environment = roomEnv;
scene.environmentIntensity = prm.envInt;

const key = new THREE.DirectionalLight(0xffffff, 1.2);
key.position.set(2.5, 4, 3);
scene.add(key);
scene.add(new THREE.AmbientLight(0xffffff, 0.55));



// ═══════════════════════════════════════════════════════════════════
//  halo + shadow (billboards)
// ═══════════════════════════════════════════════════════════════════

const uGlowCol = uniform(new THREE.Color(prm.glowColor));
const uGlowA   = uniform(prm.glowAlpha);
const uShadA   = uniform(prm.shadowAlpha);

const gd = uv().sub(0.5).length().mul(2); // 0 center → 1 edge
const radialA = smoothstep(1.0, 0.15, gd).mul(pow(smoothstep(1.0, 0.0, gd), 1.5));

const glowMat = new THREE.MeshBasicNodeMaterial();
glowMat.transparent = true;
glowMat.depthWrite = false;
glowMat.colorNode = vec4(vec3(uGlowCol), radialA.mul(uGlowA));
const glow = new THREE.Mesh(new THREE.PlaneGeometry(4.6, 4.6), glowMat);
glow.position.set(0, -0.35, -1.2);
glow.renderOrder = -2;
scene.add(glow);

const shadMat = new THREE.MeshBasicNodeMaterial();
shadMat.transparent = true;
shadMat.depthWrite = false;
shadMat.depthTest = false;
const uShadCol = uniform(new THREE.Color(prm.shadowColor));
shadMat.colorNode = vec4(vec3(uShadCol), radialA.mul(uShadA));
const shadow = new THREE.Mesh(new THREE.PlaneGeometry(3.7, 1.5), shadMat);
shadow.position.set(0, -1.42, 0);
shadow.renderOrder = 20;
shadow.scale.set(Math.max(prm.shadowScale, 1e-4), Math.max(prm.shadowScale, 1e-4), 1);
scene.add(shadow);



// ═══════════════════════════════════════════════════════════════════
//  glass shell
// ═══════════════════════════════════════════════════════════════════

const N_BULGE = 8;
const bulgeVecs = Array.from({ length: N_BULGE }, () => new THREE.Vector4(0, 1, 0, 0)); // xyz dir, w amp
const uBulges = uniformArray(bulgeVecs);
const uBulgeSharp = uniform(prm.bulgeSharp);

const shellMat = new THREE.MeshPhysicalNodeMaterial({
  transmission: 1.0,
  thickness: prm.thickness,
  ior: prm.ior,
  roughness: prm.roughness,
  metalness: 0,
  iridescence: prm.irid,
  iridescenceIOR: prm.iridIor,
  iridescenceThicknessRange: [140, 380],
  clearcoat: 1.0,
  clearcoatRoughness: 0.10,
  specularIntensity: 1.0,
  envMapIntensity: prm.envInt,
  attenuationColor: new THREE.Color(prm.attColor),
  attenuationDistance: prm.attDist,
});

{
  const uDentAO  = uniform(prm.dentAO);
  const uDentNrm = uniform(prm.dentNrm);
  window.__dentU = { uDentAO, uDentNrm }; // pane hookup below

  // bump field B(n̂) = Σ A·max(n̂·d,0)^s and its tangential gradient
  // ∇(u^s) = s·u^(s-1)·(d − n̂·u)/R  — evaluated per-stage from positionGeometry
  const buildBump = () => {
    const nrm = normalize(positionGeometry);
    let bump = float(0);
    let grad = vec3(0, 0, 0);
    for (let k = 0; k < N_BULGE; k++) {
      const b = uBulges.element(k);
      const u = max(nrm.dot(b.xyz), 0.0);
      bump = bump.add(b.w.mul(pow(u, uBulgeSharp)));
      grad = grad.add(
        b.xyz.sub(nrm.mul(u))
          .mul(b.w.mul(uBulgeSharp).mul(pow(u, uBulgeSharp.sub(1))))
      );
    }
    return { nrm, bump, grad: grad.div(SHELL_R) };
  };

  // vertex: displace outward
  const v = buildBump();
  shellMat.positionNode = positionGeometry.add(v.nrm.mul(v.bump));

  // fragment: per-pixel perturbed normal — highlights and refraction bend
  // across the dent — plus AO-style darkening scaled by bump height
  const f = buildBump();
  // ice normal map in a sphere tangent frame, combined with the dent gradient
  const normalTex = new THREE.TextureLoader().load(NORMAL_B64);
  normalTex.wrapS = normalTex.wrapT = THREE.RepeatWrapping;
  const uNrmScale = uniform(prm.nrmScale);
  window.__nrmU = { uNrmScale };
  const tN = texture(normalTex, uv().mul(2)).xyz.mul(2).sub(1); // tiled 2x
  const T = normalize(cross(vec3(0, 1, 0), f.nrm).add(vec3(1e-4, 0, 0)));
  const B = cross(f.nrm, T);
  shellMat.normalNode = transformNormalToView(normalize(
    f.nrm.mul(tN.z)
      .add(T.mul(tN.x.mul(uNrmScale)))
      .add(B.mul(tN.y.mul(uNrmScale)))
      .sub(f.grad.mul(uDentNrm))
  ));
  const ao = exp(f.bump.mul(uDentAO).negate());
  shellMat.colorNode = vec3(ao);
  shellMat.aoNode = ao;

  // wandering white scanlines — canvas-generated strip in the emissive channel
  const c = document.createElement('canvas');
  c.width = 4; c.height = 1024;
  const g = c.getContext('2d');
  g.fillStyle = '#000'; g.fillRect(0, 0, 4, 1024);
  const drawLine = (y, h, a) => {
    g.fillStyle = `rgba(255,255,255,${a})`;
    g.fillRect(0, y, 4, h); // hard-edged; texture filtering supplies the AA
  };
  for (let i = 0; i < 22; i++) {
    const y = Math.random() * 1024;
    const h = 1 + Math.random() * 3;       // thin: 1–4px of 1024
    const a = 0.35 + Math.random() * 0.65;
    drawLine(y, h, a);
    drawLine(y - 1024, h, a); // seamless wrap
    drawLine(y + 1024, h, a);
  }
  const scanTex = new THREE.CanvasTexture(c);
  scanTex.wrapS = scanTex.wrapT = THREE.RepeatWrapping;
  scanTex.colorSpace = THREE.SRGBColorSpace;

  const uScan = uniform(0);
  const uScanInt = uniform(prm.scanInt);
  window.__scanU = { uScan, uScanInt };
  shellMat.emissiveNode = vec3(texture(scanTex, uv().add(vec2(0, uScan))).r).mul(uScanInt);

  // chunky-ice roughness map (embedded), modulated by the roughness slider
  const roughTex = new THREE.TextureLoader().load(ROUGH_B64);
  roughTex.wrapS = roughTex.wrapT = THREE.RepeatWrapping;
  const uRoughMul = uniform(prm.roughness);
  window.__roughU = { uRoughMul };
  shellMat.roughnessNode = texture(roughTex, uv()).r.mul(uRoughMul).mul(2);
}
const shell = new THREE.Mesh(new THREE.SphereGeometry(SHELL_R, 96, 96), shellMat);
scene.add(shell);



// ═══════════════════════════════════════════════════════════════════
//  blob(s)
//  !!! must be opaque — the transmission pass only 
//  captures opaque geometry !!!
// ═══════════════════════════════════════════════════════════════════

const blobMat = new THREE.MeshPhysicalMaterial({
  roughness: prm.blobRough,
  metalness: 0,
  clearcoat: prm.blobCoat,
  clearcoatRoughness: 0.25,
  envMapIntensity: 0.55,
});
blobMat.transparent = false;

const blobGeo = new THREE.SphereGeometry(1, 32, 32);
const blobs = new THREE.InstancedMesh(blobGeo, blobMat, N_BLOBS);
blobs.instanceMatrix.setUsage(THREE.DynamicDrawUsage);
scene.add(blobs);



// ═══════════════════════════════════════════════════════════════════
//  sim state
// ═══════════════════════════════════════════════════════════════════

const P  = new Float32Array(N_BLOBS * 3);  // position
const Pp = new Float32Array(N_BLOBS * 3);  // previous position (PBD)
const V  = new Float32Array(N_BLOBS * 3);  // velocity
const R  = new Float32Array(N_BLOBS);      // radius
const touch = new Uint8Array(N_BLOBS);     // in-contact flag (this frame)
const wallPrev = new Uint8Array(N_BLOBS);  // was touching the glass last frame
const rushCd = new Float32Array(N_BLOBS);  // collision-rescatter cooldown
const rushPow = new Float32Array(N_BLOBS); // pending rescatter impact power



// ═══════════════════════════════════════════════════════════════════
//  bulge slots: A = impact amplitude, 
//  age drives an attack/release envelope
// ═══════════════════════════════════════════════════════════════════

const bulgeA = new Float32Array(N_BULGE);
const bulgeAge = new Float32Array(N_BULGE);

const _bq = new THREE.Quaternion();
const _bv = new THREE.Vector3();
function spawnBulge(nx, ny, nz, amp) {
  // the shell rotates: store the dent in its LOCAL frame so it rides the
  // glass like real material deformation instead of drifting across it
  _bv.set(nx, ny, nz).applyQuaternion(_bq.copy(shell.quaternion).invert());
  nx = _bv.x; ny = _bv.y; nz = _bv.z;
  let k = 0, best = Infinity; // reuse the most faded slot
  for (let s = 0; s < N_BULGE; s++) {
    const cur = bulgeA[s] * Math.exp(-bulgeAge[s] * prm.bulgeRel);
    if (cur < best) { best = cur; k = s; }
  }
  bulgeVecs[k].set(nx, ny, nz, 0);
  bulgeA[k] = amp;
  bulgeAge[k] = 0;
}

function updateBulges(dt) {
  for (let k = 0; k < N_BULGE; k++) {
    bulgeAge[k] += dt;
    // smooth ease-in (attack 18/s ≈ 0.1s) and exponential relax-back
    const amp = bulgeA[k]
      * (1 - Math.exp(-bulgeAge[k] * 18))
      * Math.exp(-bulgeAge[k] * prm.bulgeRel);
    bulgeVecs[k].w = amp;
  }
}

const colDeep = new THREE.Color(prm.colorDeep);
const colLight = new THREE.Color(prm.colorLight);
const tint = new Float32Array(N_BLOBS);   // per-blob deep light mix
const restT = new Float32Array(N_BLOBS);  // time spent at rest
const _c = new THREE.Color();
const _m = new THREE.Matrix4();

function applyColors() {
  colDeep.set(prm.colorDeep);
  colLight.set(prm.colorLight);
  for (let i = 0; i < N_BLOBS; i++) {
    _c.copy(colDeep).lerp(colLight, tint[i]);
    blobs.setColorAt(i, _c);
  }
  blobs.instanceColor.needsUpdate = true;
}

function seed() {
  for (let i = 0; i < N_BLOBS; i++) {
    // mostly tiny, a few large
    R[i] = 0.045 + Math.pow(Math.random(), 2.4) * 0.20;
    // rain in from the upper half, staggered so they land one after another
    const a = Math.random() * Math.PI * 2;
    const rr = Math.sqrt(Math.random()) * 0.7;
    P[i * 3 + 0] = Math.cos(a) * rr;
    P[i * 3 + 1] = 0.2 + Math.random() * 0.95;
    P[i * 3 + 2] = Math.sin(a) * rr;
    V[i * 3] = V[i * 3 + 1] = V[i * 3 + 2] = 0;
    tint[i] = Math.pow(Math.random(), 0.8);
    restT[i] = 0;
    _m.makeScale(R[i], R[i], R[i]);
    _m.setPosition(P[i * 3], P[i * 3 + 1], P[i * 3 + 2]);
    blobs.setMatrixAt(i, _m); // all matrices valid before first render
  }
  blobs.instanceMatrix.needsUpdate = true;
  applyColors();
}

seed();



// ═══════════════════════════════════════════════════════════════════
//  sim step (PBD, 64 blobs)
// ═══════════════════════════════════════════════════════════════════

function step(dt) {
  const inner = SHELL_R - 0.04;
  const damp = Math.exp(-prm.damp * dt);
  const invDt = 1 / dt;

  // predict
  for (let i = 0; i < N_BLOBS; i++) {
    const ix = i * 3;
    Pp[ix] = P[ix]; Pp[ix + 1] = P[ix + 1]; Pp[ix + 2] = P[ix + 2];
    V[ix + 1] -= prm.gravity * dt;
    V[ix] *= damp; V[ix + 1] *= damp; V[ix + 2] *= damp;
    P[ix]     += V[ix]     * dt;
    P[ix + 1] += V[ix + 1] * dt;
    P[ix + 2] += V[ix + 2] * dt;
    touch[i] = 0;
    if (rushCd[i] > 0) rushCd[i] -= dt;
  }

  // wall-impact detection (before constraints eat the velocity):
  // a blob newly reaching the glass with real outward speed dents it outward
  for (let i = 0; i < N_BLOBS; i++) {
    const ix = i * 3;
    const pr = Math.hypot(P[ix], P[ix + 1], P[ix + 2]);
    const maxR = SHELL_R - 0.04 - R[i];
    const atWall = pr > maxR ? 1 : 0;
    if (atWall && !wallPrev[i] && pr > 1e-5) {
      const nx = P[ix] / pr, ny = P[ix + 1] / pr, nz = P[ix + 2] / pr;
      const vn = V[ix] * nx + V[ix + 1] * ny + V[ix + 2] * nz;
      if (vn > 0.45) {
        const amp = Math.min(vn, 3.5) * prm.bulgeAmt * (0.4 + R[i] * 2.5);
        spawnBulge(nx, ny, nz, amp);
        playHit((R[i] - 0.045) / 0.20, vn, P[ix]);
      }
    }
    wallPrev[i] = atWall;
  }

  // project constraints: blob-blob separation (mass-weighted) + glass wall
  for (let it = 0; it < 3; it++) {
    for (let i = 0; i < N_BLOBS; i++) {
      const ix = i * 3;
      for (let j = i + 1; j < N_BLOBS; j++) {
        const jx = j * 3;
        const dx = P[ix] - P[jx], dy = P[ix + 1] - P[jx + 1], dz = P[ix + 2] - P[jx + 2];
        const d = Math.hypot(dx, dy, dz);
        const minD = R[i] + R[j];
        if (d < minD && d > 1e-5) {
          touch[i] = touch[j] = 1;
          const mi = R[i] ** 3, mj = R[j] ** 3;
          const wi = mj / (mi + mj), wj = mi / (mi + mj);
          const ov = (minD - d) / d;
          P[ix] += dx * ov * wi; P[ix + 1] += dy * ov * wi; P[ix + 2] += dz * ov * wi;
          P[jx] -= dx * ov * wj; P[jx + 1] -= dy * ov * wj; P[jx + 2] -= dz * ov * wj;
          if (it === 0) {
            // energetic impact? queue a random rescatter for both balls
            // (applied AFTER velocity derivation — PBD would overwrite it here)
            const vn = ((V[ix] - V[jx]) * dx + (V[ix + 1] - V[jx + 1]) * dy + (V[ix + 2] - V[jx + 2]) * dz) / d;
            if (vn < -1.1) {
              const pow_ = Math.min(-vn, 4);
              if (rushCd[i] <= 0) { rushPow[i] = Math.max(rushPow[i], pow_); rushCd[i] = 0.18; }
              if (rushCd[j] <= 0) { rushPow[j] = Math.max(rushPow[j], pow_); rushCd[j] = 0.18; }
            }
          }
        }
      }
    }
    for (let i = 0; i < N_BLOBS; i++) {
      const ix = i * 3;
      const pr = Math.hypot(P[ix], P[ix + 1], P[ix + 2]);
      const maxR = SHELL_R - 0.04 - R[i];
      if (pr > maxR) {
        touch[i] = 1;
        const f = maxR / pr;
        P[ix] *= f; P[ix + 1] *= f; P[ix + 2] *= f;
      }
    }
  }

  // derive velocity from what actually happened; contact damping settles
  // the pile and doubles as glass friction
  const cd = Math.exp(-prm.friction * dt);
  for (let i = 0; i < N_BLOBS; i++) {
    const ix = i * 3;
    V[ix]     = (P[ix]     - Pp[ix])     * invDt;
    V[ix + 1] = (P[ix + 1] - Pp[ix + 1]) * invDt;
    V[ix + 2] = (P[ix + 2] - Pp[ix + 2]) * invDt;
    if (touch[i]) { V[ix] *= cd; V[ix + 1] *= cd; V[ix + 2] *= cd; }

    // collision rescatter: force a direction change + repowered random rush
    if (rushPow[i] > 0) {
      const own = Math.hypot(V[ix], V[ix + 1], V[ix + 2]);
      const spd = Math.min(Math.max(own * 0.6 + rushPow[i] * 0.55, 0.6), 4.5);
      const ra = Math.random() * Math.PI * 2;
      const ry = Math.random() * 1.3 - 0.3;              // mostly up, a little down allowed
      const rh = Math.sqrt(Math.max(1 - ry * ry, 0.05));
      V[ix]     = Math.cos(ra) * rh * spd;
      V[ix + 1] = ry * spd;
      V[ix + 2] = Math.sin(ra) * rh * spd;
      rushPow[i] = 0;
    }

    // invisible force: resting longer than blowDelay gets blown back up
    const spd = Math.hypot(V[ix], V[ix + 1], V[ix + 2]);
    if (spd < 0.15) restT[i] += dt; else restT[i] = 0;
    if (restT[i] > prm.blowDelay) {
      restT[i] = 0;
      const bp = prm.blowPow * (0.7 + Math.random() * 0.8);
      const ba = Math.random() * Math.PI * 2;
      const bh = 0.2 + Math.random() * 0.55;             // some sideways drift
      V[ix]     += Math.cos(ba) * bh * bp;
      V[ix + 1] += bp * (0.8 + Math.random() * 0.5);     // dominant up-blast
      V[ix + 2] += Math.sin(ba) * bh * bp;
    }

    _m.makeScale(R[i], R[i], R[i]);
    _m.setPosition(P[ix], P[ix + 1], P[ix + 2]);
    blobs.setMatrixAt(i, _m);
  }
  blobs.instanceMatrix.needsUpdate = true;
}



// ═══════════════════════════════════════════════════════════════════
//  sound(s)
// ═══════════════════════════════════════════════════════════════════

const SND = { ctx: null, master: null, last: 0, voices: 0 };
function ensureAudio() {
  if (SND.ctx) { if (SND.ctx.state === 'suspended') SND.ctx.resume(); return; }
  const C = window.AudioContext || window.webkitAudioContext;
  if (!C) return;
  SND.ctx = new C();
  const ctx = SND.ctx;
  const comp = ctx.createDynamicsCompressor();
  comp.threshold.value = -18; comp.ratio.value = 6;
  comp.connect(ctx.destination);
  SND.master = ctx.createGain();
  SND.master.gain.value = prm.sndVol;
  // flanger bus: dry + LFO-modulated short delay with gentle feedback
  const dry = ctx.createGain(); dry.gain.value = 0.75;
  const wet = ctx.createGain(); wet.gain.value = 0.55;
  const dl = ctx.createDelay(0.03); dl.delayTime.value = 0.0045;
  const fb = ctx.createGain(); fb.gain.value = 0.35;
  const lfo = ctx.createOscillator(); lfo.frequency.value = 0.45;
  const lfoAmt = ctx.createGain(); lfoAmt.gain.value = 0.0018;
  lfo.connect(lfoAmt); lfoAmt.connect(dl.delayTime); lfo.start();
  SND.master.connect(dry); dry.connect(comp);
  SND.master.connect(dl); dl.connect(fb); fb.connect(dl);
  dl.connect(wet); wet.connect(comp);
}
const PENTA = [261.63, 293.66, 329.63, 392.00, 440.00, 523.25, 587.33, 659.25, 784.00, 880.00];
function playHit(size01, vel, x) {
  if (!prm.sndOn || !SND.ctx || SND.ctx.state !== 'running') return;
  const t = SND.ctx.currentTime;
  if (t - SND.last < 0.05 || SND.voices > 8) return; // rate limit
  SND.last = t; SND.voices++;
  const f = PENTA[Math.max(0, Math.min(9, Math.floor((1 - size01) * 9.99)))];
  const vol = Math.min(vel / 3, 1) * 0.7;
  const p = SND.ctx.createStereoPanner();
  p.pan.value = Math.max(-1, Math.min(1, x / 1.3)) * 0.8;
  p.connect(SND.master);
  // consonant partial stack: fundamental, fifth, octave, twelfth
  const partials = [
    [1.0, 1.0, 0.60], [1.5, 0.32, 0.45], [2.0, 0.28, 0.40], [3.0, 0.10, 0.25],
  ];
  let ended = 0;
  for (const [ratio, amp, dur] of partials) {
    const o = SND.ctx.createOscillator();
    const g = SND.ctx.createGain();
    o.type = 'sine';
    if (ratio === 1.0) {
      o.frequency.setValueAtTime(f * 1.05, t);           // soft droop = boing
      o.frequency.exponentialRampToValueAtTime(f, t + 0.10);
    } else o.frequency.value = f * ratio;
    g.gain.setValueAtTime(0.0001, t);
    g.gain.exponentialRampToValueAtTime(Math.max(vol * amp, 0.001), t + 0.012);
    g.gain.exponentialRampToValueAtTime(0.0001, t + dur);
    o.connect(g); g.connect(p);
    o.start(t); o.stop(t + dur + 0.05);
    o.onended = () => { if (++ended === partials.length) SND.voices--; };
  }
}



// ═══════════════════════════════════════════════════════════════════
//  pointer fling
// ═══════════════════════════════════════════════════════════════════

const ray = new THREE.Raycaster();
const ndc = new THREE.Vector2();
const ndcPrev = new THREE.Vector2();
const camRight = new THREE.Vector3();
const camUp = new THREE.Vector3();
const _w = new THREE.Vector3();
let havePrev = false;
let flingDrag = false;

function toNdc(e) {
  ndc.set((e.clientX / innerWidth) * 2 - 1, -(e.clientY / innerHeight) * 2 + 1);
}

function rayDist(i, o, dir) {
  const ix = i * 3;
  const px = P[ix] - o.x, py = P[ix + 1] - o.y, pz = P[ix + 2] - o.z;
  const t = px * dir.x + py * dir.y + pz * dir.z;
  const cx = px - dir.x * t, cy = py - dir.y * t, cz = pz - dir.z * t;
  return Math.hypot(cx, cy, cz);
}

function fling(dxN, dyN) {
  const speed = Math.hypot(dxN, dyN);
  if (speed < 0.0005) return;
  ray.setFromCamera(ndc, camera);
  camera.matrixWorld.extractBasis(camRight, camUp, _w);
  const o = ray.ray.origin, dir = ray.ray.direction;
  for (let i = 0; i < N_BLOBS; i++) {
    // generous pad — airborne balls stay easy to hit again mid-flight
    if (rayDist(i, o, dir) < R[i] + 0.14) {
      const ix = i * 3;
      const k = prm.throwPow * Math.min(speed * 30, 3) / Math.max(R[i] / 0.09, 0.6);
      // each ball rushes off in its own random direction; the swipe only
      // steers lightly. Vertical is always upward — down is the rest state.
      const ra = Math.random() * Math.PI * 2;
      const rmag = k * (3 + Math.random() * 10);
      V[ix]     += Math.cos(ra) * rmag + (camRight.x * dxN + camUp.x * dyN) * k * 4;
      V[ix + 1] += k * (0.8 + Math.random() * 2.7);
      V[ix + 2] += Math.sin(ra) * rmag + (camRight.z * dxN + camUp.z * dyN) * k * 4;
    }
  }
}

addEventListener('pointerdown', (e) => {
  ensureAudio();
  toNdc(e);
  ndcPrev.copy(ndc);
  havePrev = true;
  // touching a bubble claims the gesture for flinging instead of orbiting
  ray.setFromCamera(ndc, camera);
  const o = ray.ray.origin, dir = ray.ray.direction;
  for (let i = 0; i < N_BLOBS; i++) {
    if (rayDist(i, o, dir) < R[i] + 0.14) { flingDrag = true; break; }
  }
  controls.enabled = !flingDrag;
});

addEventListener('pointermove', (e) => {
  toNdc(e);
  if (!havePrev) { ndcPrev.copy(ndc); havePrev = true; return; }
  const dxN = ndc.x - ndcPrev.x, dyN = ndc.y - ndcPrev.y;
  ndcPrev.copy(ndc);
  if (e.buttons === 0 || flingDrag) fling(dxN, dyN);
});

const endGesture = () => { flingDrag = false; controls.enabled = true; };
addEventListener('pointerup', endGesture);
addEventListener('pointercancel', endGesture);



// ═══════════════════════════════════════════════════════════════════
//  postpro
// ═══════════════════════════════════════════════════════════════════

const pipeline = new THREE.RenderPipeline(renderer);
const scenePass = pass(scene, camera);
const sceneColor = scenePass.getTextureNode();
const bloomPass = bloom(sceneColor, prm.bloomStrength, prm.bloomRadius, prm.bloomThreshold);
pipeline.outputNode = sceneColor.add(bloomPass);



// ═══════════════════════════════════════════════════════════════════
//  setup: tweakpane
// ═══════════════════════════════════════════════════════════════════

const pane = new Pane({ title: 'Controls', expanded: false });

function addColor(folder, key, onChange) {
  const b = folder.addBinding(prm, key, { view: 'text' });
  const input = b.element.querySelector('input');
  input.type = 'color';
  input.value = prm[key];
  input.addEventListener('input', () => { prm[key] = input.value; onChange(input.value); });
}

const fSim = pane.addFolder({ title: 'motion' });
fSim.addBinding(prm, 'simSpeed', { min: 0, max: 2 });
fSim.addBinding(prm, 'gravity', { min: 0.2, max: 6 });
fSim.addBinding(prm, 'throwPow', { min: 0, max: 8 });
fSim.addBinding(prm, 'friction', { min: 0, max: 8 });
fSim.addBinding(prm, 'damp', { min: 0, max: 3 });
fSim.addBinding(prm, 'blowPow', { min: 0, max: 6 });
fSim.addBinding(prm, 'blowDelay', { min: 0.05, max: 3 });
fSim.addButton({ title: 'rain again' }).on('click', seed);

const fSnd = pane.addFolder({ title: 'sound' });
fSnd.addBinding(prm, 'sndOn');
fSnd.addBinding(prm, 'sndVol', { min: 0, max: 1 }).on('change', e => { if (SND.master) SND.master.gain.value = e.value; });

const fShell = pane.addFolder({ title: 'shell' });
fShell.addBinding(prm, 'ior', { min: 1.0, max: 1.6 }).on('change', e => shellMat.ior = e.value);
fShell.addBinding(prm, 'thickness', { min: 0.02, max: 2 }).on('change', e => shellMat.thickness = e.value);
fShell.addBinding(prm, 'roughness', { min: 0, max: 0.6 }).on('change', e => window.__roughU.uRoughMul.value = e.value);
fShell.addBinding(prm, 'nrmScale', { min: 0, max: 3 }).on('change', e => window.__nrmU.uNrmScale.value = e.value);
fShell.addBinding(prm, 'irid', { min: 0, max: 1 }).on('change', e => shellMat.iridescence = e.value);
fShell.addBinding(prm, 'iridIor', { min: 1, max: 2 }).on('change', e => shellMat.iridescenceIOR = e.value);
fShell.addBinding(prm, 'envInt', { min: 0, max: 3 }).on('change', e => {
  shellMat.envMapIntensity = e.value;
  scene.environmentIntensity = e.value; // global IBL — visible with HDRI reflections
});
fShell.addBinding(prm, 'bgInt', { min: 0, max: 3 }).on('change', e => scene.backgroundIntensity = e.value);
addColor(fShell, 'attColor', v => shellMat.attenuationColor.set(v));
fShell.addBinding(prm, 'attDist', { min: 0.2, max: 10 }).on('change', e => shellMat.attenuationDistance = e.value);
fShell.addBinding(prm, 'bulgeAmt', { min: 0, max: 0.35 });
fShell.addBinding(prm, 'bulgeSharp', { min: 8, max: 120 }).on('change', e => uBulgeSharp.value = e.value);
fShell.addBinding(prm, 'bulgeRel', { min: 0.5, max: 10 });
fShell.addBinding(prm, 'dentAO', { min: 0, max: 14 }).on('change', e => window.__dentU.uDentAO.value = e.value);
fShell.addBinding(prm, 'dentNrm', { min: 0, max: 2.5 }).on('change', e => window.__dentU.uDentNrm.value = e.value);
fShell.addBinding(prm, 'scanInt', { min: 0, max: 2 }).on('change', e => window.__scanU.uScanInt.value = e.value);
fShell.addBinding(prm, 'scanSpeed', { min: -0.3, max: 0.3 });
fShell.addBinding(prm, 'rotY', { min: -0.6, max: 0.6 });
fShell.addBinding(prm, 'rotX', { min: -0.6, max: 0.6 });

const fBlob = pane.addFolder({ title: 'blobs' });
fBlob.addBinding(prm, 'blobRough', { min: 0, max: 1 }).on('change', e => blobMat.roughness = e.value);
fBlob.addBinding(prm, 'blobCoat', { min: 0, max: 1 }).on('change', e => blobMat.clearcoat = e.value);
addColor(fBlob, 'colorDeep', applyColors);
addColor(fBlob, 'colorLight', applyColors);

const fLook = pane.addFolder({ title: 'glow / post' });
addColor(fLook, 'bgTop', rebuildBg);
addColor(fLook, 'bgBot', rebuildBg);
addColor(fLook, 'shadowColor', v => uShadCol.value.set(v));
fLook.addBinding(prm, 'shadowScale', { min: 0, max: 2 }).on('change', e => shadow.scale.set(Math.max(e.value, 1e-4), Math.max(e.value, 1e-4), 1));
addColor(fLook, 'glowColor', v => uGlowCol.value.set(v));
fLook.addBinding(prm, 'glowAlpha', { min: 0, max: 1 }).on('change', e => uGlowA.value = e.value);
fLook.addBinding(prm, 'shadowAlpha', { min: 0, max: 1 }).on('change', e => uShadA.value = e.value);
fLook.addBinding(prm, 'bloomStrength', { min: 0, max: 2 }).on('change', e => bloomPass.strength.value = e.value);
fLook.addBinding(prm, 'bloomRadius', { min: 0, max: 1.5 }).on('change', e => bloomPass.radius.value = e.value);
fLook.addBinding(prm, 'bloomThreshold', { min: 0, max: 1.2 }).on('change', e => bloomPass.threshold.value = e.value);
fLook.addBinding(prm, 'exposure', { min: 0.2, max: 2.5 }).on('change', e => renderer.toneMappingExposure = e.value);



// ═══════════════════════════════════════════════════════════════════
//  resize
// ═══════════════════════════════════════════════════════════════════ 

addEventListener('resize', () => {
  camera.aspect = innerWidth / innerHeight;
  camera.updateProjectionMatrix();
  renderer.setSize(innerWidth, innerHeight);
});



// ═══════════════════════════════════════════════════════════════════
//  render-loop
// ═══════════════════════════════════════════════════════════════════ 

const timer = new THREE.Timer();
const _back = new THREE.Vector3();
const _bx = new THREE.Vector3(), _by = new THREE.Vector3(), _bz = new THREE.Vector3();
let firstFrame = true;

renderer.setAnimationLoop(() => {
  timer.update();
  const rdt = Math.min(timer.getDelta(), 1 / 30);
  const dt = rdt * prm.simSpeed;
  if (dt > 0) { step(dt); updateBulges(dt); }
  shell.rotation.y += prm.rotY * rdt; // constant spin, independent of simSpeed
  shell.rotation.x += prm.rotX * rdt;
  window.__scanU.uScan.value = (window.__scanU.uScan.value + prm.scanSpeed * dt) % 1;

  // halo behind the sphere along the view direction; the shadow is anchored
  // in SCREEN space: positioned along the camera's screen-down axis from the
  // sphere center and screen-aligned — same spot just below the glass from
  // every camera angle, never tilting, never drifting onto the sphere
  camera.getWorldDirection(_back);
  glow.position.set(0, -0.35, 0).addScaledVector(_back, 1.2);
  glow.quaternion.copy(camera.quaternion);
  camera.matrixWorld.extractBasis(_bx, _by, _bz);
  shadow.position.copy(_by).multiplyScalar(-1.42); // screen-down from center
  shadow.quaternion.copy(camera.quaternion);
  controls.update();
  pipeline.render();

  if(firstFrame){ firstFrame=false; document.getElementById('loader').classList.add('hidden'); }
});
</script>
</body>
</html>
garden-anomaly/styles/style.css
파일 저장

@import url('https://fonts.googleapis.com/css2?family=Cinzel:wght@800&display=swap');

* { margin: 0; padding: 0; box-sizing: border-box; }
html, body { margin: 0px; padding: 0px;  line-height: 1.1; font-family: 'Cinzel', sans-serif; width: 100%; height: 100%; overflow: hidden; background: #000; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }

* { margin:0; padding:0; box-sizing:border-box; }
html, body {
  width:100%; height:100vh;
  background: #2A7B9B;
  background-image: linear-gradient(to bottom right, #FD8451, #FFBD6F);


  display:flex; align-items:center; justify-content:center;
  overflow:hidden; color:white;§
}
canvas { display:block; cursor:grab; touch-action:none;position:fixed; top:0; left:0; width:100%; height:100%; }
canvas:active { cursor:grabbing; }
#loader {
  position:fixed; top:0; left:0; width:100%; height:100%;
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:14px;
  z-index:900; pointer-events:none;
  transition: opacity 0.5s ease;
}
#loader.hidden { opacity:0; }
.spinner {
  width:36px; height:36px;
  border: 3px solid rgba(255,255,255,0.25);
  border-top-color: rgba(255,255,255,0.7);
  border-radius:50%;
  animation: spin 0.8s linear infinite;
}
@keyframes spin { to { transform:rotate(360deg); } }
.loading-text {
  font: 400 13px 'Helvetica Neue', Arial, sans-serif;
  color: rgba(255,255,255,0.7);
  letter-spacing: 0.08em;
}
.loading-text .dot {
  animation: dotFade 1.4s ease-in-out infinite;
  opacity:0;
}
.loading-text .dot:nth-child(1) { animation-delay: 0.0s; }
.loading-text .dot:nth-child(2) { animation-delay: 0.2s; }
.loading-text .dot:nth-child(3) { animation-delay: 0.4s; }
@keyframes dotFade {
  0%, 80%, 100% { opacity:0; }
  40% { opacity:1; }
}
#fps {font-size:30px;font-family:monospace;color:black;}
/* ── Tweakpane host ── */
#pane-container {
  position: fixed;
  top: 16px;
  right: 16px;
  z-index: 100;
  display:block;
}


a {
  color: #D0D0D0;
  text-decoration: none;
}
/* ── Tweakpane dark theme ── */
:root {
  --tp-base-background-color:             hsl(222,22%,7%);
  --tp-base-shadow-color:                 hsla(0,0%,0%,0.35);
  --tp-button-background-color:           hsl(222,18%,15%);
  --tp-button-background-color-active:    hsl(222,18%,22%);
  --tp-button-background-color-focus:     hsl(222,18%,20%);
  --tp-button-background-color-hover:     hsl(222,18%,19%);
  --tp-button-foreground-color:           hsl(155,90%,62%);
  --tp-container-background-color:        hsl(222,18%,11%);
  --tp-container-background-color-active: hsl(222,18%,15%);
  --tp-container-background-color-focus:  hsl(222,18%,14%);
  --tp-container-background-color-hover:  hsl(222,18%,13%);
  --tp-container-foreground-color:        hsla(155,90%,62%,0.65);
  --tp-groove-foreground-color:           hsl(222,18%,22%);
  --tp-input-background-color:            hsl(222,18%,13%);
  --tp-input-background-color-active:     hsl(222,18%,20%);
  --tp-input-background-color-focus:      hsl(222,18%,17%);
  --tp-input-background-color-hover:      hsl(222,18%,16%);
  --tp-input-foreground-color:            hsl(155,90%,74%);
  --tp-label-foreground-color:            hsl(220,16%,52%);
  --tp-monitor-background-color:          hsl(222,18%,10%);
  --tp-monitor-foreground-color:          hsla(155,90%,62%,0.85);
}

/* ── Vignette ── */
#vignette {
  pointer-events: none;
  background: transparent;
  height: 100vh;
  width: 100%;
  box-shadow: inset 0 0 50px rgba(0,0,0,0.23);
  position: fixed;
  z-index: 98;
}

/* ── FPS counter ── */
#fps {
  position: fixed;
  bottom: 16px;
  right: 16px;
  font: 500 10px/1 'Cinzel', monospace;
  color: rgba(61,255,160,0.0);
  letter-spacing: .08em;
  pointer-events: none;
  z-index: 1200;
}

#title-text {
  position: fixed;  
  max-width:250px;
  overflow-wrap: break-word;
  top: 118px;
  left: 28px;  
  max-width: 250px;
  z-index: 201;
  color:white;
  text-shadow: 2px 2px 6px rgba(0,0,0,0.8);
}

/* ── Title block (top-left) ── */
#title-block {
  position: fixed;
  top: 28px;
  left: 28px;
  z-index: 200;
  pointer-events: auto;
  display: flex;
  flex-direction: column;
  gap: 16px;
}
#title-eyebrow {
  font: 400 16px/1 'Cinzel', monospace;
  text-transform: uppercase;
  color: #ffffff;
  text-shadow: 2px 2px 6px rgba(0,0,0,0.8);
}
#title-headline {
  font: 600 28px/1 'Cinzel', system-ui, sans-serif;
  color: #ffffff;
  text-shadow: 3px 3px 10px rgba(0,0,0,0.8);
}

p {
  font: 400 12px/1 'Cinzel', monospace;
  text-transform: uppercase;
  color: #ffffff;
  text-shadow: 2px 2px 6px rgba(0,0,0,0.8);
  line-height: 1.5;
}

/* ── Nav link (bottom-left) ── */
#nav-prev-all {
  position: fixed;
  bottom: 56px;
  left: 28px;
  z-index: 200;
  font: 400 14px/1 'Cinzel', monospace;
  letter-spacing: .02em;
  text-transform: uppercase;
  color: #ffffff;
  text-decoration: none;
  text-shadow: 2px 2px 6px rgba(0,0,0,0.8);
}
#nav-prev-all:hover {
  text-shadow: 3px 3px 10px rgba(0,0,0,0.9);
}

/* ── Nav link (bottom-left) ── */
#nav-prev {
  position: fixed;
  bottom: 28px;
  left: 28px;
  z-index: 200;
  font: 400 14px/1 'Cinzel', monospace;
  letter-spacing: .02em;
  text-transform: uppercase;
  color: #ffffff;
  text-decoration: none;
  text-shadow: 2px 2px 6px rgba(0,0,0,0.8);
}
#nav-prev:hover {
  text-shadow: 3px 3px 10px rgba(0,0,0,0.9);
}

@media (max-width: 968px) {
  #pane-container {
    position: fixed;
    top: 16px;
    right: 6px;
    z-index: 100;
    width: 190px;
  }
  #pane-container .tp-dfwv {
    width: 190px;
    border-radius: 10px;
    border: 1px solid rgba(255,255,255,0.07);
    box-shadow: 0 8px 48px rgba(0,0,0,0.55);
    overflow: hidden;
  }
  #title-eyebrow {
    font: 400 11px/1 'Cinzel', monospace;
    text-transform: uppercase;
    color: #ffffff;
    text-shadow: 2px 2px 6px rgba(0,0,0,0.8);
  }
  #title-headline {
    font: 600 23px/1 'Cinzel', system-ui, sans-serif;
    color: #ffffff;
    text-shadow: 3px 3px 10px rgba(0,0,0,0.8);
  }  
  #title-text {
    font: 400 11px/1 'Cinzel', monospace;
    position: fixed;  
    max-width:200px;
    width:200px;
    overflow-wrap: break-word;
    top: 98px;
    left: 28px;  
    z-index: 201;
    color:white;
    text-shadow: 2px 2px 6px rgba(0,0,0,0.8);
  }  
}
함께 쓰는 파일 9개 보기
volatile-nexus/index.html
파일 저장

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
<title>Volatile Nexus.</title>
<link rel="stylesheet" href="styles/style.css"/>
<script type="importmap">
{
  "imports": {
    "three": "https://cdnjs.cloudflare.com/ajax/libs/three.js/0.178.0/three.webgpu.min.js",
    "three/webgpu": "https://cdnjs.cloudflare.com/ajax/libs/three.js/0.178.0/three.webgpu.min.js",
    "three/tsl": "https://cdnjs.cloudflare.com/ajax/libs/three.js/0.178.0/three.tsl.min.js"
  }
}
</script>
</head>
<body>
<div id="pane-container"></div>
<div id="vignette"></div>
<div id="title-block">
  <span id="title-eyebrow">Tinker Day #42</span>
  <span id="title-headline">Volatile Nexus.</span>
  <p style="font-size: 14px;">
    Move mouse over glass ring to make<br>it wobble. Hover the cubes 
    to part it.<br>Mousedown & move rotates the scene.<br><br>
    Sound starts playing with your first<br>interaction.<br />
  </p>
</div>
<footer><a id="nav-prev-all" href="https://dasprinzip.com/tinker/index.html">&#8593; Checkout all days</a><a id="nav-prev" href="https://dasprinzip.com/tinker/day41/"><br>&larr; The Day Before.</a></footer>
<div id="loader"><div class="spinner"></div><div class="loading-text">loading<span class="dot">.</span><span class="dot">.</span><span class="dot">.</span></div></div>
<div id="tag"></div>
<script>
  const __fail = (msg) => {
    const l = document.getElementById('loader');
    if (!l) return;
    l.classList.remove('hidden');
    const sp = l.querySelector('.spinner'); if (sp) sp.style.display = 'none';
    const t = l.querySelector('.loading-text');
    if (t) t.textContent = 'error — ' + msg;
  };
  window.addEventListener('error', e => __fail(e.message || 'script error'));
  window.addEventListener('unhandledrejection', e =>
    __fail(e.reason && e.reason.message ? e.reason.message : String(e.reason)));
</script>
<script type="module">
import * as THREE from 'three';
import {
  screenUV, uniform, vec2, vec3, vec4, color, mix, smoothstep,
  length, abs, pow, oneMinus, dot, cos, sin, time, normalView,
  positionViewDirection, refract, div, Fn, float, uv,
  reflector, positionWorld, mx_noise_float,
  mx_worley_noise_float, texture, uniformArray, Loop, int, exp,
  normalize, positionGeometry, positionLocal, normalLocal,
  transformNormalToView
} from 'three/tsl';



// ═══════════════════════════════════════════════════════════════════
//  setup renderer
// ═══════════════════════════════════════════════════════════════════

const renderer = new THREE.WebGPURenderer({ antialias: true });
renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.toneMapping = THREE.ACESFilmicToneMapping;
renderer.toneMappingExposure = 0.60;

renderer.setClearColor(0x000000, 0);

renderer.shadowMap.enabled = true;
renderer.shadowMap.transmitted = true;
document.body.appendChild(renderer.domElement);

const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(38, innerWidth / innerHeight, 0.1, 60);
camera.position.set(0, 0.35, 5.0);



// ═══════════════════════════════════════════════════════════════════
//  background (pure TSL)
// ═══════════════════════════════════════════════════════════════════

const aspect = uniform(innerWidth / innerHeight);
const p = screenUV.sub(vec2(0.5, 0.5)).mul(vec2(aspect, 1.0));
const d = length(p);
const bgBase = mix(color(0x76909f), color(0x3d5566), smoothstep(0.02, 0.85, d));
const pool  = smoothstep(0.62, 0.0, length(p.mul(vec2(0.75, 1.45)).sub(vec2(0.0, -0.16)))).mul(0.12);
const upper = smoothstep(0.5, 0.0, length(p.sub(vec2(0.06, 0.16)))).mul(0.10);
const halo  = smoothstep(0.14, 0.0, abs(d.sub(0.47))).mul(0.035);
scene.backgroundNode = vec4(bgBase.add(pool).add(upper).add(halo), 1.0);



// ═══════════════════════════════════════════════════════════════════
//  procedural environment
// ═══════════════════════════════════════════════════════════════════

const envColorA = new THREE.Color(0x2b6bff); // deep blue
const envColorB = new THREE.Color(0xff3c8a); // magenta
const envColorC = new THREE.Color(0x18e0d8); // cyan
const envState = { sat: 1.0, bright: 1.0, bands: 5.0,
                   causticAmt: 2.99, causticScale: 13.73, causticChroma: 0.02,
                   causticIntensity: 6.09, causticOcclusion: 14.13,
                   causticColor: new THREE.Color(0xeaf6ff) };



// ═══════════════════════════════════════════════════════════════════
//  CPU worley noise
// ═══════════════════════════════════════════════════════════════════

function hash2(i, j) {
  let n = Math.sin(i * 127.1 + j * 311.7) * 43758.5453;
  const a = n - Math.floor(n);
  n = Math.sin(i * 269.5 + j * 183.3) * 43758.5453;
  const b = n - Math.floor(n);
  return [a, b];
}
function worley(x, y) {
  const xi = Math.floor(x), yi = Math.floor(y);
  let best = 1e9;
  for (let dj = -1; dj <= 1; dj++) {
    for (let di = -1; di <= 1; di++) {
      const ci = xi + di, cj = yi + dj;
      const [ox, oy] = hash2(ci, cj);
      const px = ci + ox, py = cj + oy;
      const d = (px - x) * (px - x) + (py - y) * (py - y);
      if (d < best) best = d;
    }
  }
  return Math.sqrt(best);
}

function causticCell(x, y) {
  const w = 1.0 - Math.min(1.0, worley(x, y));
  return w * w * w;
}

function buildEnvTexture() {
  const W = 512, H = 256;
  const data = new Float32Array(W * H * 4);
  const blob = (u, v, cu, cv, su, sv) => {
    let du = Math.abs(u - cu); du = Math.min(du, 1 - du);
    const dv = v - cv;
    return Math.exp(-((du * du) / (su * su) + (dv * dv) / (sv * sv)));
  };
  for (let y = 0; y < H; y++) {
    const v = y / (H - 1);
    for (let x = 0; x < W; x++) {
      const u = x / (W - 1);

      // base: cool vertical gradient
      let r = 0.06 + 0.22 * v, g = 0.09 + 0.28 * v, b = 0.14 + 0.38 * v;

      // big soft key light overhead — gives the bright core the glass needs
      const key = 6.0 * blob(u, v, 0.50, 0.90, 0.18, 0.11);
      r += key; g += key * 1.02; b += key * 1.06;

      // SATURATED COLOUR BANDS — the actual source of the colour in the ring.
      // Angular bands around the sphere, so refraction sweeps through them
      // and dispersion splits each band edge into a spectrum.
      const phase = u * Math.PI * 2.0 * envState.bands;
      const w1 = Math.pow(Math.max(0, Math.sin(phase)), 3.0);
      const w2 = Math.pow(Math.max(0, Math.sin(phase + 2.1)), 3.0);
      const w3 = Math.pow(Math.max(0, Math.sin(phase + 4.2)), 3.0);
      // concentrate the bands around the horizon, where the ring looks
      const beltMask = Math.exp(-Math.pow((v - 0.52) / 0.30, 2.0));
      const bandAmp = 2.6 * beltMask * envState.sat;
      r += (envColorA.r * w1 + envColorB.r * w2 + envColorC.r * w3) * bandAmp;
      g += (envColorA.g * w1 + envColorB.g * w2 + envColorC.g * w3) * bandAmp;
      b += (envColorA.b * w1 + envColorB.b * w2 + envColorC.b * w3) * bandAmp;

      // CAUSTIC LAYER — same pattern and same parameters as the floor
      // projection (scale, chroma, intensity, occlusion, colour), baked
      // into the environment so the ring refracts it with nothing on
      // the ground. Changing the caustics folder re-bakes this.
      const cs = envState.causticScale;
      const ch = envState.causticChroma;
      const cx = u * cs * 2.0, cy = v * cs;
      let cr = causticCell(cx - ch * cs, cy);
      let cg = causticCell(cx, cy - ch * cs);
      let cb = causticCell(cx + ch * cs, cy + ch * cs);
      // occlusion sharpens the cells the way the shadow-pass term does
      const occP = Math.max(0.05, envState.causticOcclusion) * 0.16;
      cr = Math.pow(cr, occP); cg = Math.pow(cg, occP); cb = Math.pow(cb, occP);
      // intensity scaling mirrors the castShadowNode multiplier
      const cAmp = envState.causticAmt * beltMask *
                   (envState.causticIntensity / 22.0) * 3.2;
      const cc = envState.causticColor;
      r += cr * cAmp * cc.r; g += cg * cAmp * cc.g; b += cb * cAmp * cc.b;

      // two bright vertical strips — the long streak reflections
      const s1 = 1.5 * blob(u, v, 0.16, 0.55, 0.030, 0.28);
      const s2 = 1.2 * blob(u, v, 0.80, 0.50, 0.028, 0.30);
      r += s1 + s2; g += (s1 + s2) * 1.02; b += (s1 + s2) * 1.08;

      // cool floor bounce
      const fb = 0.45 * blob(u, v, 0.5, 0.05, 0.5, 0.10);
      r += fb * 0.55; g += fb * 0.65; b += fb * 0.85;

      const i = (y * W + x) * 4;
      data[i]     = r * envState.bright;
      data[i + 1] = g * envState.bright;
      data[i + 2] = b * envState.bright;
      data[i + 3] = 1;
    }
  }
  const tex = new THREE.DataTexture(data, W, H, THREE.RGBAFormat, THREE.FloatType);
  tex.mapping = THREE.EquirectangularReflectionMapping;
  tex.magFilter = THREE.LinearFilter;
  tex.minFilter = THREE.LinearFilter;
  tex.needsUpdate = true;
  return tex;
}

let pmrem = null;
let envSeq = 0;
let rendererReady = false;

async function refreshEnv() {
  const raw = buildEnvTexture();
  const seq = ++envSeq;

  if (!rendererReady) {
    const old = scene.environment;
    scene.environment = raw;
    if (old && old !== raw) old.dispose();
    return;
  }

  try {
    if (!pmrem) pmrem = new THREE.PMREMGenerator(renderer);
    const result = await pmrem.fromEquirectangularAsync(raw);

    if (seq !== envSeq) {
      result.texture.dispose();
      raw.dispose();
      return;
    }
    const old = scene.environment;
    scene.environment = result.texture;
    raw.dispose();
    if (old && old !== result.texture) old.dispose();
  } catch (err) {
    console.warn('PMREM unavailable, using raw environment:', err);
    if (seq !== envSeq) { raw.dispose(); return; }
    const old = scene.environment;
    scene.environment = raw;
    if (old && old !== raw) old.dispose();
  }
}

refreshEnv().catch(e => console.warn("env bake failed:", e));



// ═══════════════════════════════════════════════════════════════════
//  ring geometry
// ═══════════════════════════════════════════════════════════════════

function roundedRingGeometry(rIn, rOut, halfH, cr, cornerSeg = 14, latheSeg = 200) {
  const pts = [];
  const arc = (cx, cy, a0, a1) => {
    for (let i = 0; i <= cornerSeg; i++) {
      const a = a0 + (a1 - a0) * (i / cornerSeg);
      pts.push(new THREE.Vector2(cx + Math.cos(a) * cr, cy + Math.sin(a) * cr));
    }
  };
  pts.push(new THREE.Vector2(rIn + cr, -halfH));
  pts.push(new THREE.Vector2(rOut - cr, -halfH));
  arc(rOut - cr, -halfH + cr, -Math.PI / 2, 0);
  pts.push(new THREE.Vector2(rOut, halfH - cr));
  arc(rOut - cr, halfH - cr, 0, Math.PI / 2);
  pts.push(new THREE.Vector2(rIn + cr, halfH));
  arc(rIn + cr, halfH - cr, Math.PI / 2, Math.PI);
  pts.push(new THREE.Vector2(rIn, -halfH + cr));
  arc(rIn + cr, -halfH + cr, Math.PI, Math.PI * 1.5);
  pts.push(pts[0].clone());
  const geo = new THREE.LatheGeometry(pts, latheSeg);
  geo.computeVertexNormals();
  return geo;
}
const ringGeo = roundedRingGeometry(0.56, 1.0, 0.44, 0.17);



// ═══════════════════════════════════════════════════════════════════
//  glass material
// ═══════════════════════════════════════════════════════════════════

const glass = new THREE.MeshPhysicalNodeMaterial({
  color: 0xffffff,
  transmission: 1.0,
  thickness: 1.5,
  roughness: 0.035,
  metalness: 0.0,
  ior: 1.5,
  dispersion: 14.0,
  iridescence: 0.35,
  iridescenceIOR: 1.3,
  iridescenceThicknessRange: [120, 480],
  clearcoat: 0.0,
  clearcoatRoughness: 0.05,
  specularIntensity: 1.0,
  envMapIntensity: 2.1,
  attenuationColor: new THREE.Color(0xdff2ff),
  attenuationDistance: 4.0
});
glass.transparent = true; 

const uFresnelStrength = uniform(0.87);
const uFresnelPower = uniform(4.25);
const uRainbowSpeed = uniform(0.04);



// ═══════════════════════════════════════════════════════════════════
//  refracted cube buffer
// ═══════════════════════════════════════════════════════════════════

const cubeRT = new THREE.RenderTarget(
  Math.floor(innerWidth * 0.5), Math.floor(innerHeight * 0.5)
);
const uCubeIor = uniform(1.5);          // kept in sync with the glass IOR
const uCubeRefrAmt = uniform(2.0);      // brightness of the refracted cubes
const uCubeRefrShift = uniform(0.22);   // thickness-like refraction shift
const uCubeRefrChroma = uniform(0.32);  // per-channel IOR spread — strong CA
const uCubeSpectral = uniform(0.25);    // iridescent tinting of the refraction
const uCubeRefrBlur = uniform(0.15);    // frosted-glass blur of the refraction
const uCubeRefrSat = uniform(1.4);      // saturation boost of the refraction
const uCubeFlip = uniform(0);           // 1 if the backend flips RT Y

{
  const facing = abs(dot(normalView, positionViewDirection));
  const fres = pow(oneMinus(facing), uFresnelPower);
  const t = normalView.x.mul(1.4).add(normalView.y.mul(0.9)).add(time.mul(uRainbowSpeed));
  const rainbow = cos(t.mul(6.2831).add(vec3(0.0, 2.094, 4.188))).mul(0.5).add(0.5);



  // ═══════════════════════════════════════════════════════════════════
  //  refracted swarm: sample cube buffer along the refracted eye ray
  // ═══════════════════════════════════════════════════════════════════

  const jx = mx_noise_float(vec3(screenUV.mul(140.0), time.mul(0.5)));
  const jy = mx_noise_float(vec3(screenUV.yx.mul(140.0).add(7.3), time.mul(0.5)));
  const blurJit = vec2(jx, jy).mul(uCubeRefrBlur.mul(0.06));
  const sampleAt = (dIor) => {
    const rr = refract(
      positionViewDirection.negate(), normalView, div(1.0, uCubeIor.add(dIor))
    );
    const s = screenUV.add(rr.xy.mul(uCubeRefrShift)).add(blurJit);
    return texture(cubeRT.texture,
      vec2(s.x, mix(s.y, oneMinus(s.y), uCubeFlip)));
  };
  const cR = sampleAt(uCubeRefrChroma.negate()).r;
  const cG = sampleAt(float(0.0)).g;
  const cB = sampleAt(uCubeRefrChroma).b;

  const rawCol = vec3(cR, cG, cB);
  const luma = dot(rawCol, vec3(0.299, 0.587, 0.114));
  const satCol = mix(vec3(luma), rawCol, uCubeRefrSat).clamp(0.0, 8.0);

  const spectralTint = mix(vec3(1.0), rainbow.mul(1.6), uCubeSpectral);
  const swarmGlow = satCol.mul(spectralTint).mul(uCubeRefrAmt)
    .mul(pow(facing, float(1.2)));

  glass.emissiveNode = rainbow.mul(fres).mul(uFresnelStrength).add(swarmGlow);
}


// ═══════════════════════════════════════════════════════════════════
//  mouse ripple on the glass
// ═══════════════════════════════════════════════════════════════════

const RIPPLE_MAX = 12;
const ripPosArr = []; for (let i = 0; i < RIPPLE_MAX; i++) ripPosArr.push(new THREE.Vector3());
const ripAgeArr = new Array(RIPPLE_MAX).fill(99);
const ripStrArr = new Array(RIPPLE_MAX).fill(0);
const uRipPos = uniformArray(ripPosArr);
const uRipAge = uniformArray(ripAgeArr);
const uRipStr = uniformArray(ripStrArr);
const uRingWobble = uniform(0.05);

const ringRippleFn = Fn(([p]) => {
  const total = float(0).toVar();
  Loop({ start: int(0), end: int(RIPPLE_MAX), type: 'int' }, ({ i }) => {
    const age = uRipAge.element(i);
    const str = uRipStr.element(i);
    const ctr = uRipPos.element(i);
    const dist = length(p.sub(ctr));
    const shell = dist.sub(age.mul(1.4));
    const ringW = exp(shell.mul(shell).mul(-6.0));
    const osc = cos(dist.mul(9.0).sub(age.mul(11.0)));
    const decay = exp(age.mul(-2.6));
    total.addAssign(osc.mul(ringW).mul(decay).mul(str));
  });
  return total;
});

{

  const pg = positionGeometry;
  const cDir = normalize(pg.xz);
  const tubeCtr = vec3(cDir.x.mul(0.78), 0.0, cDir.y.mul(0.78));
  const rippleDir = normalize(pg.sub(tubeCtr));
  const dispAt = (p) => ringRippleFn(p).mul(uRingWobble);
  glass.positionNode = positionLocal.add(rippleDir.mul(dispAt(pg)));

  const REPS = 0.04;
  glass.normalNode = Fn(() => {
    const dx = dispAt(pg.add(vec3(REPS, 0, 0))).sub(dispAt(pg.add(vec3(-REPS, 0, 0))));
    const dy = dispAt(pg.add(vec3(0, REPS, 0))).sub(dispAt(pg.add(vec3(0, -REPS, 0))));
    const dz = dispAt(pg.add(vec3(0, 0, REPS))).sub(dispAt(pg.add(vec3(0, 0, -REPS))));
    const grad = vec3(dx, dy, dz).mul(float(1.0 / (2.0 * REPS)));
    const n = normalize(normalLocal.sub(grad.mul(0.7)));
    return transformNormalToView(n);
  })();
}



// ═══════════════════════════════════════════════════════════════════
//  caustics (castShadowNode)
// ═══════════════════════════════════════════════════════════════════

const uCausticOcclusion = uniform(14.13);
const uCausticIntensity = uniform(6.09);
const uCausticScale = uniform(5.97);
const uCausticSpeed = uniform(0.06);
const uChroma = uniform(0.02);
const uCausticColor = uniform(new THREE.Color(0xeaf6ff));
const uIorShadow = uniform(1.5);

glass.castShadowNode = Fn(() => {
  const refr = refract(
    positionViewDirection.negate(), normalView, div(1.0, uIorShadow)
  ).normalize();

  const occ = pow(abs(normalView.z), uCausticOcclusion);

  const baseUV = refr.xy.mul(uCausticScale);
  const tt = time.mul(uCausticSpeed);

  const cell = (o) =>
    pow(oneMinus(mx_worley_noise_float(vec3(baseUV.add(o), tt))), float(3.0));

  const caustic = vec3(
    cell(vec2(uChroma.negate(), 0.0)),
    cell(vec2(0.0, uChroma.negate())),
    cell(vec2(uChroma, uChroma))
  );

  return caustic.mul(occ.mul(uCausticIntensity)).add(occ).mul(uCausticColor);
})();

const ring = new THREE.Mesh(ringGeo, glass);
ring.castShadow = true;
const rig = new THREE.Group();
rig.add(ring);
scene.add(rig);
ring.rotation.set(1.22, 0.0, 0.0);
rig.rotation.set(0.06, -0.55, -0.10);
rig.position.y = -0.12;

const ripRaycaster = new THREE.Raycaster();
const ripNDC = new THREE.Vector2();
const _ripLocal = new THREE.Vector3();
let ripPrev = null, ripLastSpawn = 0, ripLastCast = 0;

function spawnRipple(local, strength) {
  let slot = 0, oldest = -1;
  for (let i = 0; i < RIPPLE_MAX; i++) {
    if (ripAgeArr[i] > oldest) { oldest = ripAgeArr[i]; slot = i; }
  }
  ripPosArr[slot].copy(local);
  ripAgeArr[slot] = 0;
  ripStrArr[slot] = strength;
}

function rippleJS(p) {
  let total = 0;
  for (let i = 0; i < RIPPLE_MAX; i++) {
    const age = ripAgeArr[i];
    if (age > 5) continue; 
    const dx = p.x - ripPosArr[i].x;
    const dy = p.y - ripPosArr[i].y;
    const dz = p.z - ripPosArr[i].z;
    const dist = Math.sqrt(dx * dx + dy * dy + dz * dz);
    const shell = dist - age * 1.4;
    total += Math.cos(dist * 9.0 - age * 11.0) *
             Math.exp(-6.0 * shell * shell) *
             Math.exp(-2.6 * age) * ripStrArr[i];
  }
  return total;
}
const _flrLocal = new THREE.Vector3(), _flrDir = new THREE.Vector3(),
      _flrInv = new THREE.Matrix4();

renderer.domElement.addEventListener('pointermove', (e) => {
  const now = performance.now();
  if (now - ripLastCast < 25) return; // brute-force lathe raycast: throttle
  ripLastCast = now;
  ripNDC.set((e.clientX / innerWidth) * 2 - 1,
             -(e.clientY / innerHeight) * 2 + 1);
  ripRaycaster.setFromCamera(ripNDC, camera);
  const hit = ripRaycaster.intersectObject(ring, false);
  if (hit.length) {
    _ripLocal.copy(hit[0].point);
    ring.worldToLocal(_ripLocal);
    if (now - ripLastSpawn > 30) {
      let str = 1.0;
      if (ripPrev) {
        str = THREE.MathUtils.clamp(0.5 + _ripLocal.distanceTo(ripPrev) * 16, 0.4, 1.8);
      }
      spawnRipple(_ripLocal, str);
      ripLastSpawn = now;
      ripPrev = _ripLocal.clone();
    }
  } else {
    ripPrev = null;
  }
});



// ═══════════════════════════════════════════════════════════════════
//  golden cube swarm
// ═══════════════════════════════════════════════════════════════════

const CUBE_COUNT = 2000;

// procedural brushed-gold texture — no external asset needed
function goldTexture() {
  const s = 128;
  const c = document.createElement('canvas');
  c.width = c.height = s;
  const ctx = c.getContext('2d');
  ctx.fillStyle = '#c9962f';
  ctx.fillRect(0, 0, s, s);
  // horizontal brushed streaks, light and dark
  for (let i = 0; i < 280; i++) {
    const y = Math.random() * s;
    const w = 8 + Math.random() * 72;
    const x = Math.random() * s - w / 2;
    ctx.fillStyle = Math.random() > 0.5
      ? `rgba(255,222,150,${0.05 + Math.random() * 0.16})`
      : `rgba(115,70,12,${0.04 + Math.random() * 0.12})`;
    ctx.fillRect(x, y, w, 1 + Math.random() * 1.6);
  }
  // fine speckle for a hammered-metal grain
  for (let i = 0; i < 170; i++) {
    ctx.fillStyle = Math.random() > 0.5
      ? 'rgba(255,240,195,0.35)' : 'rgba(92,56,8,0.30)';
    ctx.fillRect(Math.random() * s, Math.random() * s, 1.4, 1.4);
  }
  const t = new THREE.CanvasTexture(c);
  t.colorSpace = THREE.SRGBColorSpace;
  t.wrapS = t.wrapT = THREE.RepeatWrapping;
  return t;
}

const SwarmMat = THREE.MeshStandardNodeMaterial || THREE.MeshStandardMaterial;
const cubeMat = new SwarmMat({
  map: goldTexture(),
  color: 0xffe9b0,
  metalness: 1.0,
  roughness: 0.28,
  envMapIntensity: 1.6,
  opacity: 1.0
});

const swarmHolder = new THREE.Group();
swarmHolder.rotation.copy(ring.rotation);
rig.add(swarmHolder);

const swarm = new THREE.InstancedMesh(
  new THREE.BoxGeometry(1, 1, 1), cubeMat, CUBE_COUNT
);
swarm.instanceMatrix.setUsage(THREE.DynamicDrawUsage);
swarm.frustumCulled = false; // instances move every frame; skip stale bounds
swarm.renderOrder = 6;       // after glass (0) and after the ghost pass (5)
swarmHolder.add(swarm);



// ═══════════════════════════════════════════════════════════════════
//  x-ray pass: shows behind-glass cubes in true sync
// ═══════════════════════════════════════════════════════════════════

const ghostMat = new SwarmMat({
  map: cubeMat.map,
  color: 0xd99a35,
  metalness: 1.0,
  roughness: 0.5,
  envMapIntensity: 0.9,
  emissive: 0x8a5a12,
  emissiveIntensity: 0.35,
  transparent: true,
  opacity: 0.85,
  depthWrite: false,
  depthTest: true
});
ghostMat.depthFunc = THREE.GreaterDepth;
const swarmGhost = new THREE.InstancedMesh(
  swarm.geometry, ghostMat, CUBE_COUNT
);
swarmGhost.instanceMatrix = swarm.instanceMatrix; // share the live buffer
swarmGhost.frustumCulled = false;
swarmGhost.renderOrder = 5; // after the glass, BEFORE the main swarm
swarmHolder.add(swarmGhost);


// ═══════════════════════════════════════════════════════════════════
//  cube-only mirror scene for the refraction buffer
// ═══════════════════════════════════════════════════════════════════

const rtScene = new THREE.Scene();
const rtHolder = new THREE.Group();
rtHolder.matrixAutoUpdate = false; // copied from swarmHolder every frame
rtScene.add(rtHolder);

const rtMat = new SwarmMat({
  map: cubeMat.map,
  color: 0xffe9b0,
  metalness: 1.0,
  roughness: 0.28,
  envMapIntensity: 1.6
});
const rtSwarm = new THREE.InstancedMesh(swarm.geometry, rtMat, CUBE_COUNT);
rtSwarm.instanceMatrix = swarm.instanceMatrix; // share the live buffer
rtSwarm.frustumCulled = false;
rtHolder.add(rtSwarm);

const swarmPath = new THREE.CatmullRomCurve3([
  new THREE.Vector3(0.00, -2.10, 0.0),  // behind, lining up on the hole
  new THREE.Vector3(0.00, -1.10, 0.0),
  new THREE.Vector3(0.00,  0.00, 0.0),  // dead centre of the hole
  new THREE.Vector3(0.00,  1.10, 0.0),
  new THREE.Vector3(0.35,  1.90, 0.0),  // exit, banking to the side
  new THREE.Vector3(1.35,  1.65, 0.0),
  new THREE.Vector3(2.05,  0.85, 0.0),
  new THREE.Vector3(2.30,  0.00, 0.0),  // widest point beside the ring
  new THREE.Vector3(2.05, -0.85, 0.0),
  new THREE.Vector3(1.35, -1.65, 0.0),
  new THREE.Vector3(0.35, -1.90, 0.0)   // sweeping back behind the ring
], true, 'catmullrom', 0.5);

const PATH_SAMPLES = 2048;
const pathPos = new Float32Array((PATH_SAMPLES + 1) * 3);
const pathTan = new Float32Array((PATH_SAMPLES + 1) * 3);
{
  const p = new THREE.Vector3(), tg = new THREE.Vector3();
  for (let i = 0; i <= PATH_SAMPLES; i++) {
    const u = (i % PATH_SAMPLES) / PATH_SAMPLES; // wrap: last entry = first
    swarmPath.getPointAt(u, p);
    swarmPath.getTangentAt(u, tg);
    pathPos[i * 3] = p.x; pathPos[i * 3 + 1] = p.y; pathPos[i * 3 + 2] = p.z;
    pathTan[i * 3] = tg.x; pathTan[i * 3 + 1] = tg.y; pathTan[i * 3 + 2] = tg.z;
  }
}

let holeU0 = 0, holeU1 = 0;
{
  let first = -1, last = -1;
  for (let i = 0; i <= PATH_SAMPLES; i++) {
    const j = i * 3;
    const d = Math.hypot(pathPos[j], pathPos[j + 1], pathPos[j + 2]);
    if (d < 0.75) { if (first < 0) first = i; last = i; }
  }
  holeU0 = first / PATH_SAMPLES;
  holeU1 = last / PATH_SAMPLES;
}

function samplePath(u, outP, outT) {
  const f = u * PATH_SAMPLES;
  const i0 = Math.floor(f), a = f - i0;
  const j0 = i0 * 3, j1 = (i0 + 1) * 3;
  outP.set(
    pathPos[j0] + (pathPos[j1] - pathPos[j0]) * a,
    pathPos[j0 + 1] + (pathPos[j1 + 1] - pathPos[j0 + 1]) * a,
    pathPos[j0 + 2] + (pathPos[j1 + 2] - pathPos[j0 + 2]) * a
  );
  outT.set(
    pathTan[j0] + (pathTan[j1] - pathTan[j0]) * a,
    pathTan[j0 + 1] + (pathTan[j1 + 1] - pathTan[j0 + 1]) * a,
    pathTan[j0 + 2] + (pathTan[j1 + 2] - pathTan[j0 + 2]) * a
  ).normalize();
}

const cubes = [];
{
  const rand = (a, b) => a + Math.random() * (b - a);
  for (let i = 0; i < CUBE_COUNT; i++) {
    // offsets in a unit disc across the path
    const a = Math.random() * Math.PI * 2;
    const r = Math.sqrt(Math.random());
    cubes.push({
      phase: (i + rand(0, 0.8)) / CUBE_COUNT * 0.5, // half-loop stream
      ox: Math.cos(a) * r,                   // across-path offset (in-plane)
      oy: Math.sin(a) * r,                   // across-path offset (out-of-plane)
      wobSpeed: rand(0.7, 1.8),
      wobPhase: rand(0, Math.PI * 2),
      axis: new THREE.Vector3(rand(-1, 1), rand(-1, 1), rand(-1, 1)).normalize(),
      spin: rand(0.8, 2.6) * (Math.random() < 0.5 ? -1 : 1),
      spin0: rand(0, Math.PI * 2),
      size: rand(0.024, 0.050),
      lap: -1, ang: 0, angPrev: 0,           // per-lap branch state
      dx: 0, dy: 0, dz: 0,                   // spring displacement (mouse)
      vx: 0, vy: 0, vz: 0                    // spring velocity
    });
  }
}



// ═══════════════════════════════════════════════════════════════════
//  mouse proximity: cubes near the cursor's pick ray get pushed away
// ═══════════════════════════════════════════════════════════════════

const swarmState = { speed: 0.1, scatter: 0.21, size: 0.64,
                     mouse: true, mouseRadius: 0.55, mouseForce: 45 };

const lapAngles = [0]; // first lap: right-hand side
function lapAngle(k) {
  if (k < 0) return lapAngles[0];
  while (lapAngles.length <= k) {
    const prev = lapAngles[lapAngles.length - 1];
    const opts = [0, Math.PI, Math.PI / 2] // no bottom branch
      .filter(a => a !== prev); // never the same branch twice in a row
    lapAngles.push(opts[(Math.random() * opts.length) | 0]);
  }
  return lapAngles[k];
}
const mouseNDC = new THREE.Vector2(10, 10);
let mouseActive = false;
renderer.domElement.addEventListener('pointermove', (e) => {
  mouseNDC.set((e.clientX / innerWidth) * 2 - 1,
               -(e.clientY / innerHeight) * 2 + 1);
  mouseActive = true;
});
renderer.domElement.addEventListener('pointerleave', () => {
  mouseActive = false;
});

const swarmRaycaster = new THREE.Raycaster();
const _sp = new THREE.Vector3(), _st = new THREE.Vector3(),
      _sn1 = new THREE.Vector3(), _sn2 = new THREE.Vector3(),
      _sq = new THREE.Quaternion(), _ss = new THREE.Vector3(),
      _sm = new THREE.Matrix4(), _sup = new THREE.Vector3(0, 0, 1),
      _sinv = new THREE.Matrix4(),
      _sro = new THREE.Vector3(), _srd = new THREE.Vector3();

function updateSwarm(t, dt) {
  const head = t * swarmState.speed;

  // mouse pick ray in holder-local space, once per frame
  let rayOK = false;
  if (mouseActive && swarmState.mouse) {
    swarmRaycaster.setFromCamera(mouseNDC, camera);
    swarmHolder.updateMatrixWorld();
    _sinv.copy(swarmHolder.matrixWorld).invert();
    _sro.copy(swarmRaycaster.ray.origin).applyMatrix4(_sinv);
    _srd.copy(swarmRaycaster.ray.direction).transformDirection(_sinv).normalize();
    rayOK = true;
  }
  const R = swarmState.mouseRadius;
  const kSpring = 26.0, kDamp = 7.5; // settle back in about half a second
  let distAcc = 0; // summed repel displacement -> audio disturbance

  for (let i = 0; i < CUBE_COUNT; i++) {
    const c = cubes[i];
    const g = head + c.phase;
    const lap = Math.floor(g);
    const u = g - lap;
    if (c.lap !== lap) {
      c.lap = lap;
      c.ang = lapAngle(lap);
      c.angPrev = lapAngle(lap - 1);
    }
    samplePath(u, _sp, _st);
    // blend from last lap's branch just after the wrap — position there is
    // on the rotation axis (x=0), so only the cross-path offsets swing,
    // and easing them over the first stretch keeps that swing smooth
    let ang = c.ang;
    if (u < 0.08) {
      let d = c.ang - c.angPrev;
      d = ((d + Math.PI) % (Math.PI * 2) + Math.PI * 2) % (Math.PI * 2) - Math.PI;
      const w = u / 0.08;
      ang = c.angPrev + d * (w * w * (3 - 2 * w));
    }
    // rotate path point + tangent around the hole axis (local Y)
    const caB = Math.cos(ang), saB = Math.sin(ang);
    let rxB = _sp.x * caB + _sp.z * saB;
    _sp.z = -_sp.x * saB + _sp.z * caB; _sp.x = rxB;
    rxB = _st.x * caB + _st.z * saB;
    _st.z = -_st.x * saB + _st.z * caB; _st.x = rxB;
    // cross-path basis: the curve lies in the XY plane, so its tangent is
    // never parallel to +Z and this frame stays stable along the loop
    _sn1.crossVectors(_st, _sup).normalize();
    _sn2.crossVectors(_st, _sn1).normalize();
    // the swarm pinches tight to thread the hole, relaxes out on the arc
    const pinch = 0.45 + 0.55 * Math.min(1, _sp.length() / 1.1);
    const ox = (c.ox + Math.sin(t * c.wobSpeed + c.wobPhase) * 0.16)
               * swarmState.scatter * pinch;
    const oy = (c.oy + Math.cos(t * c.wobSpeed * 0.8 + c.wobPhase) * 0.16)
               * swarmState.scatter * pinch;
    _sp.addScaledVector(_sn1, ox).addScaledVector(_sn2, oy);


    // ═══════════════════════════════════════════════════════════════════
    //  mouse spring physics
    // ═══════════════════════════════════════════════════════════════════

    // spring pulls the displacement back to zero; damping stops jitter
    let fx = -kSpring * c.dx - kDamp * c.vx;
    let fy = -kSpring * c.dy - kDamp * c.vy;
    let fz = -kSpring * c.dz - kDamp * c.vz;
    if (rayOK) {
      // closest point on the pick ray to this cube's current position
      const cx = _sp.x + c.dx, cy = _sp.y + c.dy, cz = _sp.z + c.dz;
      const px = cx - _sro.x, py = cy - _sro.y, pz = cz - _sro.z;
      const tp = px * _srd.x + py * _srd.y + pz * _srd.z;
      if (tp > 0) {
        let rx = cx - (_sro.x + _srd.x * tp);
        let ry = cy - (_sro.y + _srd.y * tp);
        let rz = cz - (_sro.z + _srd.z * tp);
        const d = Math.sqrt(rx * rx + ry * ry + rz * rz);
        if (d < R) {
          // degenerate: cube dead on the ray — pick a stable side to flee
          if (d < 1e-4) { rx = c.ox || 0.3; ry = 0.2; rz = c.oy || 0.3; }
          const inv = 1 / (d < 1e-4 ? Math.hypot(rx, ry, rz) : d);
          const fall = 1 - d / R;               // 1 at the ray, 0 at the rim
          const s = fall * fall * swarmState.mouseForce;
          fx += rx * inv * s; fy += ry * inv * s; fz += rz * inv * s;
        }
      }
    }
    // semi-implicit euler; displacement capped so nothing can fly away
    c.vx += fx * dt; c.vy += fy * dt; c.vz += fz * dt;
    c.dx += c.vx * dt; c.dy += c.vy * dt; c.dz += c.vz * dt;
    const dm = Math.sqrt(c.dx * c.dx + c.dy * c.dy + c.dz * c.dz);
    if (dm > 1.2) {
      const sc = 1.2 / dm;
      c.dx *= sc; c.dy *= sc; c.dz *= sc;
    }
    distAcc += Math.min(dm, 1.2);
    _sp.x += c.dx; _sp.y += c.dy; _sp.z += c.dz;
    // ---------------------------------------------------------------

    // self-rotation about each cube's own random axis
    _sq.setFromAxisAngle(c.axis, c.spin0 + t * c.spin);
    const sz = c.size * swarmState.size;
    _ss.set(sz, sz, sz);
    _sm.compose(_sp, _sq, _ss);
    swarm.setMatrixAt(i, _sm);
  }
  swarmState.disturb = distAcc / CUBE_COUNT;
  swarm.instanceMatrix.needsUpdate = true;
}
updateSwarm(0, 0.016); // valid matrices before the first frame / warm-up

// ------------------------------------------------- ambient sound
// Fully synthesized (no assets), wired to the same data the visuals use:
//  - pad whose lowpass opens with the ripple field's live energy
//  - water-plops fired by ripple impulses (pitch/level from stroke speed)
//  - shimmer bed that swells with the fraction of the stream currently
//    inside the ring's hole (head phase vs the path's hole window)
//  - each lap's branch decision re-tunes the pad chord slightly
// Browsers require a user gesture before audio: starts on first click.
let actx = null, masterGain = null, padFilter = null, shimmerGain = null,
    shimmerBP = null, noiseBuf = null,
    glassGain = null, glassBP = null, audioReady = false, audioLap = -1;
const padOscs = [];
const PAD_ROOT = 110; // A2

function ensureAudio() {
  if (actx) { if (actx.state === 'suspended') actx.resume(); return; }
  const AC = window.AudioContext || window.webkitAudioContext;
  if (!AC) return;
  actx = new AC();
  masterGain = actx.createGain();
  masterGain.gain.value = 0;
  masterGain.connect(actx.destination);

  // ---- pad: four soft partials through a slow-breathing lowpass
  padFilter = actx.createBiquadFilter();
  padFilter.type = 'lowpass';
  padFilter.frequency.value = 520;
  padFilter.Q.value = 0.7;
  const padGain = actx.createGain();
  padGain.gain.value = 0.16;
  padFilter.connect(padGain);
  padGain.connect(masterGain);
  const ratios = [1, 1.5, 2.0, 2.52];
  ratios.forEach((r, i) => {
    const o = actx.createOscillator();
    o.type = i < 2 ? 'sine' : 'triangle';
    o.frequency.value = PAD_ROOT * r;
    const g = actx.createGain();
    g.gain.value = i < 2 ? 0.5 : 0.16;
    o.connect(g); g.connect(padFilter); o.start();
    padOscs.push({ o, r });
    const lfo = actx.createOscillator();
    lfo.frequency.value = 0.06 + i * 0.031;
    const lg = actx.createGain();
    lg.gain.value = 1.4 + i;
    lfo.connect(lg); lg.connect(o.detune); lfo.start();
  });

  // ---- airy noise bed
  noiseBuf = actx.createBuffer(1, actx.sampleRate * 2, actx.sampleRate);
  const nd = noiseBuf.getChannelData(0);
  for (let i = 0; i < nd.length; i++) nd[i] = Math.random() * 2 - 1;
  const mkNoise = () => {
    const src = actx.createBufferSource();
    src.buffer = noiseBuf; src.loop = true; src.start();
    return src;
  };
  const nbp = actx.createBiquadFilter();
  nbp.type = 'bandpass'; nbp.frequency.value = 420; nbp.Q.value = 0.5;
  const ng = actx.createGain(); ng.gain.value = 0.025;
  mkNoise().connect(nbp); nbp.connect(ng); ng.connect(masterGain);

  // ---- shimmer: beating triangles + bright noise, gated by hole coverage
  shimmerGain = actx.createGain();
  shimmerGain.gain.value = 0;
  shimmerGain.connect(masterGain);
  [660, 663, 990].forEach((fz) => {
    const o = actx.createOscillator();
    o.type = 'triangle'; o.frequency.value = fz;
    const g = actx.createGain(); g.gain.value = 0.3;
    o.connect(g); g.connect(shimmerGain); o.start();
  });
  shimmerBP = actx.createBiquadFilter();
  shimmerBP.type = 'bandpass';
  shimmerBP.frequency.value = 1500;
  shimmerBP.Q.value = 1.1;
  const sng = actx.createGain(); sng.gain.value = 0.45;
  mkNoise().connect(shimmerBP); shimmerBP.connect(sng);
  sng.connect(shimmerGain);

  // ---- singing glass: the wobble sound. No discrete triggers — a
  // high-Q resonant noise tone (the wine-glass-rim hum) whose LEVEL is
  // driven every frame by the ripple field's energy: it swells while you
  // stroke the glass and fades as the waves decay. Two resonances plus a
  // slow vibrato keep it alive rather than sterile.
  glassGain = actx.createGain();
  glassGain.gain.value = 0;
  glassGain.connect(masterGain);
  glassBP = actx.createBiquadFilter();
  glassBP.type = 'bandpass';
  glassBP.frequency.value = 640;
  glassBP.Q.value = 18;
  const glassBP2 = actx.createBiquadFilter();
  glassBP2.type = 'bandpass';
  glassBP2.frequency.value = 963;
  glassBP2.Q.value = 14;
  const glassBP2g = actx.createGain();
  glassBP2g.gain.value = 0.5;
  mkNoise().connect(glassBP); glassBP.connect(glassGain);
  mkNoise().connect(glassBP2); glassBP2.connect(glassBP2g);
  glassBP2g.connect(glassGain);
  const glassVib = actx.createOscillator();
  glassVib.frequency.value = 0.8;
  const glassVibG = actx.createGain();
  glassVibG.gain.value = 6;
  glassVib.connect(glassVibG); glassVibG.connect(glassBP.frequency);
  glassVib.start();

  audioReady = true;
}



// ═══════════════════════════════════════════════════════════════════
//  cross-device audio unlock.
// ═══════════════════════════════════════════════════════════════════

for (const ev of ['pointerdown', 'pointermove', 'touchstart', 'touchend',
                  'mousedown', 'click', 'wheel', 'keydown']) {
  window.addEventListener(ev, ensureAudio, { passive: true });
}


function circOverlap(a0, len, b0, b1) {
  let ov = 0;
  for (const off of [0, 1, -1]) {
    const s0 = a0 + off, e0 = s0 + len;
    ov += Math.max(0, Math.min(e0, b1) - Math.max(s0, b0));
  }
  return ov;
}


// ═══════════════════════════════════════════════════════════════════
//  floor (receives caustics).
// ═══════════════════════════════════════════════════════════════════

const floorMat = new THREE.MeshStandardNodeMaterial({
  color: 0x63808f,
  roughness: 0.95,
  metalness: 0.0
});
floorMat.transparent = true;
// fade the disc into the painted backdrop so the horizon stays invisible
floorMat.opacityNode = smoothstep(1.0, 0.35, length(uv().sub(0.5).mul(2.0)));



// ═══════════════════════════════════════════════════════════════════
//  wet floor reflection.
// ═══════════════════════════════════════════════════════════════════

const uWetAmount = uniform(0.95);      // how mirrored the floor is
const uWetBlur = uniform(0.15);        // softness of the reflection
const uWetDistort = uniform(0.22);     // ripple/puddle distortion
const uWetScale = uniform(2.2);        // ripple size
const uWetSpeed = uniform(0.12);       // ripple movement
const uWetFresnel = uniform(2.4);      // how strongly angle affects it
const uWetTint = uniform(new THREE.Color(0xbcd6e6));
const uWetRough = uniform(0.12);       // v37 value — strong mirror. Raise it if the ring dims.
const MIRROR_Y = -1.141;
const _mirDBS = new THREE.Vector2();
renderer.getDrawingBufferSize(_mirDBS);
const mirrorRT = new THREE.RenderTarget(
  _mirDBS.x, _mirDBS.y, { type: THREE.HalfFloatType }
);
const mirrorCam = new THREE.PerspectiveCamera();
const uMirrorTexMat = uniform(new THREE.Matrix4());
const _mirTM = new THREE.Matrix4();
const _mirPos = new THREE.Vector3(), _mirDir = new THREE.Vector3(),
      _mirUp = new THREE.Vector3(), _mirTgt = new THREE.Vector3();

function renderMirror() {
  camera.updateMatrixWorld();
  // reflect the camera across the floor plane (proper rotation — no
  // negative scale, so winding and culling stay correct)
  _mirPos.setFromMatrixPosition(camera.matrixWorld);
  _mirPos.y = 2 * MIRROR_Y - _mirPos.y;
  camera.getWorldDirection(_mirDir);
  _mirDir.y *= -1;
  _mirUp.set(0, 1, 0).applyQuaternion(camera.quaternion);
  _mirUp.y *= -1;
  mirrorCam.position.copy(_mirPos);
  mirrorCam.up.copy(_mirUp);
  _mirTgt.copy(_mirPos).add(_mirDir);
  mirrorCam.lookAt(_mirTgt);
  mirrorCam.projectionMatrix.copy(camera.projectionMatrix);
  mirrorCam.projectionMatrixInverse.copy(camera.projectionMatrixInverse);
  mirrorCam.updateMatrixWorld(true);
  mirrorCam.matrixWorldInverse.copy(mirrorCam.matrixWorld).invert();
  // reflector texture matrix: world position -> mirror-view UV.
  // NOTE the NEGATED Y row: WebGPU samples render-target textures with V
  // pointing DOWN, so the classic WebGL bias (+0.5 Y) lands every lookup
  // at the vertically mirrored spot — the reflection then appears
  // displaced to the wrong region of the floor, seemingly "behind" the
  // scene. Flipping V in the bias puts it exactly under the objects.
  _mirTM.set(
    0.5, 0, 0, 0.5,
    0, -0.5, 0, 0.5,
    0, 0, 0.5, 0.5,
    0, 0, 0, 1
  ).multiply(mirrorCam.projectionMatrix)
   .multiply(mirrorCam.matrixWorldInverse);
  uMirrorTexMat.value.copy(_mirTM);
  // the floor must not sample itself while being drawn into the mirror
  floor.visible = false;
  renderer.setRenderTarget(mirrorRT);
  renderer.render(scene, mirrorCam);
  renderer.setRenderTarget(null);
  floor.visible = true;
}
const wetOK = true;

if (wetOK) {
  // Distort the reflection lookup with drifting noise — this is what makes
  // it read as a wet, uneven surface instead of polished glass.
  const rippleUV = positionWorld.xz.mul(uWetScale);
  const n1 = mx_noise_float(vec3(rippleUV, time.mul(uWetSpeed)));
  const n2 = mx_noise_float(vec3(rippleUV.yx.mul(1.7), time.mul(uWetSpeed).add(11.0)));
  // Blur: scatter the mirror lookup with high-frequency noise. Larger
  // scatter reads as a softer reflection.
  const jitter = mx_noise_float(
    vec3(positionWorld.xz.mul(90.0), time.mul(0.5))
  );
  const jitter2 = mx_noise_float(
    vec3(positionWorld.zx.mul(90.0).add(31.7), time.mul(0.5))
  );
  const mirClip = uMirrorTexMat.mul(vec4(positionWorld, 1.0));
  const mirUV = mirClip.xy.div(mirClip.w)
    .add(vec2(n1, n2).mul(uWetDistort.mul(0.06)))
    .add(vec2(jitter, jitter2).mul(uWetBlur.mul(0.045)));
  const rBase = texture(mirrorRT.texture, mirUV);

  // fresnel: reflections strengthen at grazing angles, like real wet ground
  const facing = abs(dot(normalView, positionViewDirection));
  const fres = pow(oneMinus(facing), uWetFresnel);

  // fade the mirror out toward the disc edge so it blends into the backdrop
  const radial = smoothstep(1.0, 0.25, length(uv().sub(0.5).mul(2.0)));

  // Add the reflection ON TOP of the floor colour rather than blending
  // toward it.
  floorMat.colorNode = mix(
    color(0x63808f),
    rBase.rgb.mul(uWetTint),
    fres.mul(uWetAmount).mul(radial).clamp(0, 1)
  );
  // wet ground is smoother than dry
  floorMat.roughnessNode = mix(float(0.95), uWetRough,
    uWetAmount.mul(radial).clamp(0, 1));
}

const floor = new THREE.Mesh(new THREE.CircleGeometry(9, 64), floorMat);
floor.rotation.x = -Math.PI / 2;
floor.position.y = -1.14;
floor.receiveShadow = true;
scene.add(floor);



// ═══════════════════════════════════════════════════════════════════
//  light(s).
// ═══════════════════════════════════════════════════════════════════

const spot = new THREE.SpotLight(0xffffff, 182.61);
spot.position.set(1.4, 4.2, 1.8);
spot.angle = 0.10;
spot.penumbra = 1.0;
spot.decay = 2;
spot.distance = 0;
spot.castShadow = true;
spot.shadow.mapType = THREE.HalfFloatType; // HDR caustics
spot.shadow.mapSize.set(2048, 2048);
spot.shadow.camera.near = 0.5;
spot.shadow.camera.far = 15;
spot.shadow.intensity = 0.98;
spot.shadow.bias = -0.0002;
spot.target.position.set(0, -1, 0);
scene.add(spot, spot.target);

const fill = new THREE.DirectionalLight(0xbcd6e6, 0.45);
fill.position.set(-3, 1, 2);
scene.add(fill);



// ═══════════════════════════════════════════════════════════════════
//  lens flare(s).
// ═══════════════════════════════════════════════════════════════════

const flareScene = new THREE.Scene();
const flareCam = new THREE.OrthographicCamera(-1, 1, 1, -1, 0, 1);

function radialTex(size, stops) {
  const c = document.createElement('canvas');
  c.width = c.height = size;
  const ctx = c.getContext('2d');
  const g = ctx.createRadialGradient(size/2, size/2, 0, size/2, size/2, size/2);
  for (const [p, col] of stops) g.addColorStop(p, col);
  ctx.fillStyle = g;
  ctx.fillRect(0, 0, size, size);
  const t = new THREE.CanvasTexture(c);
  t.colorSpace = THREE.SRGBColorSpace;
  return t;
}

const texGlow = radialTex(256, [
  [0, 'rgba(255,255,255,1)'], [0.25, 'rgba(226,240,255,0.5)'],
  [0.6, 'rgba(180,214,255,0.12)'], [1, 'rgba(150,190,255,0)']
]);

function hexTex(size, rgba, ring) {
  const c = document.createElement('canvas');
  c.width = c.height = size;
  const ctx = c.getContext('2d');
  const r = size * 0.42, cx = size / 2;
  ctx.beginPath();
  for (let i = 0; i < 6; i++) {
    const a = (i / 6) * Math.PI * 2 + Math.PI / 6;
    const x = cx + Math.cos(a) * r, y = cx + Math.sin(a) * r;
    i ? ctx.lineTo(x, y) : ctx.moveTo(x, y);
  }
  ctx.closePath();
  if (ring) { ctx.strokeStyle = rgba; ctx.lineWidth = size * 0.05; ctx.stroke(); }
  else { ctx.fillStyle = rgba; ctx.fill(); }
  const t = new THREE.CanvasTexture(c);
  t.colorSpace = THREE.SRGBColorSpace;
  return t;
}

function streakTex(w, h) {
  const c = document.createElement('canvas');
  c.width = w; c.height = h;
  const ctx = c.getContext('2d');
  const g = ctx.createLinearGradient(0, 0, w, 0);
  g.addColorStop(0, 'rgba(90,150,255,0)');
  g.addColorStop(0.35, 'rgba(150,200,255,0.35)');
  g.addColorStop(0.5, 'rgba(235,248,255,0.95)');
  g.addColorStop(0.65, 'rgba(150,200,255,0.35)');
  g.addColorStop(1, 'rgba(90,150,255,0)');
  ctx.fillStyle = g;
  ctx.fillRect(0, 0, w, h);
  const t = new THREE.CanvasTexture(c);
  t.colorSpace = THREE.SRGBColorSpace;
  return t;
}

function burstTex(size) {
  const c = document.createElement('canvas');
  c.width = c.height = size;
  const ctx = c.getContext('2d');
  const cx = size / 2;
  const ray = (ang, len, wid, a) => {
    ctx.save(); ctx.translate(cx, cx); ctx.rotate(ang);
    const g = ctx.createLinearGradient(-len, 0, len, 0);
    g.addColorStop(0, 'rgba(255,255,255,0)');
    g.addColorStop(0.5, `rgba(255,255,255,${a})`);
    g.addColorStop(1, 'rgba(255,255,255,0)');
    ctx.fillStyle = g;
    ctx.fillRect(-len, -wid / 2, len * 2, wid);
    ctx.restore();
  };
  ray(0, size * 0.48, 2.5, 0.9);
  ray(Math.PI / 2, size * 0.48, 2.5, 0.9);
  ray(Math.PI / 4, size * 0.26, 1.6, 0.35);
  ray(-Math.PI / 4, size * 0.26, 1.6, 0.35);
  ray(Math.PI / 8, size * 0.34, 1.2, 0.22);
  ray(-Math.PI / 8, size * 0.34, 1.2, 0.22);
  const t = new THREE.CanvasTexture(c);
  t.colorSpace = THREE.SRGBColorSpace;
  return t;
}

function flareQuad(tex, w, h, color, opacity) {
  const Basic = THREE.MeshBasicNodeMaterial || THREE.MeshBasicMaterial;
  const m = new THREE.Mesh(
    new THREE.PlaneGeometry(1, 1),
    new Basic({
      map: tex, color: new THREE.Color(color),
      transparent: true, opacity,
      blending: THREE.AdditiveBlending,
      depthTest: false, depthWrite: false
    })
  );
  m.scale.set(w, h, 1);
  m.userData.baseScale = [w, h];
  m.userData.baseOpacity = opacity;
  flareScene.add(m);
  return m;
}

const texHexA = hexTex(128, 'rgba(255,180,120,0.55)', false);
const texHexB = hexTex(128, 'rgba(120,200,255,0.5)', false);
const texRing = hexTex(128, 'rgba(190,230,255,0.6)', true);
const texStreak = streakTex(512, 8);
const texBurst = burstTex(256);

const elGlow   = flareQuad(texGlow,   0.55, 0.55, 0xdcefff, 0.85);
const elBurst  = flareQuad(texBurst,  0.75, 0.75, 0xffffff, 0.75);
const elStreak = flareQuad(texStreak, 1.70, 0.05, 0x9fc8ff, 0.55);

const ghosts = [
  { el: flareQuad(texHexA, 0.11, 0.11, 0xffb478, 0.30), k: 0.32 },
  { el: flareQuad(texGlow, 0.07, 0.07, 0xff9a6a, 0.22), k: 0.55 },
  { el: flareQuad(texHexB, 0.19, 0.19, 0x7ec8ff, 0.24), k: 0.85 },
  { el: flareQuad(texRing, 0.34, 0.34, 0xbfe4ff, 0.30), k: 1.18 },
  { el: flareQuad(texHexA, 0.13, 0.13, 0xffd0a0, 0.20), k: 1.45 },
  { el: flareQuad(texGlow, 0.26, 0.26, 0x8fd8ff, 0.16), k: 1.75 }
];


const flareAnchor = new THREE.Vector3();
const flareOffset = new THREE.Vector3(0.34, 0.86, 0.30);
const flareNDC = new THREE.Vector3();
const flareSmooth = { x: 0, y: 0, vis: 0, init: false };
const camDir = new THREE.Vector3();
const toLight = new THREE.Vector3();



// ═══════════════════════════════════════════════════════════════════
//  smoothstep easing — no hard clamping edges
// ═══════════════════════════════════════════════════════════════════

const ease = (e0, e1, x) => {
  const t = Math.min(1, Math.max(0, (x - e0) / (e1 - e0)));
  return t * t * (3 - 2 * t);
};

function updateFlare(t, dt) {

  rig.updateMatrixWorld();
  flareAnchor.setFromMatrixPosition(rig.matrixWorld).add(flareOffset);

  if (uRingWobble.value > 0) {
    ring.updateMatrixWorld();
    _flrInv.copy(ring.matrixWorld).invert();
    _flrLocal.copy(flareAnchor).applyMatrix4(_flrInv);
    const d = rippleJS(_flrLocal) * uRingWobble.value;
    if (d !== 0) {
      const cl = Math.hypot(_flrLocal.x, _flrLocal.z) || 1;
      _flrDir.set(
        _flrLocal.x - (_flrLocal.x / cl) * 0.78,
        _flrLocal.y,
        _flrLocal.z - (_flrLocal.z / cl) * 0.78
      ).normalize();
      _flrLocal.addScaledVector(_flrDir, d);
      flareAnchor.copy(_flrLocal).applyMatrix4(ring.matrixWorld);
    }
  }
  flareNDC.copy(flareAnchor).project(camera);

  const aspectR = innerWidth / innerHeight;
  const tx = flareNDC.x * aspectR, ty = flareNDC.y;

  // is the light in front of the camera at all?
  camera.getWorldDirection(camDir);
  toLight.copy(flareAnchor).sub(camera.position).normalize();
  const facing = camDir.dot(toLight); // 1 = dead ahead

  // Eased visibility. Ranges are generous: the flare only fades once the
  // source is genuinely leaving the frame or swinging behind the camera.
  const edgeX = ease(2.2, 1.0, Math.abs(flareNDC.x));
  const edgeY = ease(2.2, 1.0, Math.abs(flareNDC.y));
  const front = ease(-0.1, 0.25, facing);
  const targetVis = edgeX * edgeY * front * params.flareStrength;

  // temporal smoothing — framerate independent, kills the per-frame jitter
  if (!flareSmooth.init) {
    flareSmooth.x = tx; flareSmooth.y = ty; flareSmooth.vis = targetVis;
    flareSmooth.init = true;
  }
  const posLag = 1 - Math.pow(0.0001, dt);   // fast but smoothed
  const visLag = 1 - Math.pow(0.00005, dt);  // slightly softer for opacity
  flareSmooth.x += (tx - flareSmooth.x) * posLag;
  flareSmooth.y += (ty - flareSmooth.y) * posLag;
  flareSmooth.vis += (targetVis - flareSmooth.vis) * visLag;

  const x = flareSmooth.x, y = flareSmooth.y, vis = flareSmooth.vis;
  const twinkle = 0.94 + Math.sin(t * 2.6) * 0.04 + Math.sin(t * 6.1) * 0.02;

  const place = (el, px, py, sc, op) => {
    el.position.set(px, py, 0);
    const [bw, bh] = el.userData.baseScale;
    el.scale.set(bw * sc, bh * sc, 1);
    el.material.opacity = el.userData.baseOpacity * op;
    el.visible = op > 0.002;
  };

  place(elGlow,  x, y, 1 + Math.sin(t * 1.9) * 0.03, vis * twinkle);
  place(elBurst, x, y, 1 + Math.sin(t * 1.4) * 0.04, vis * twinkle * 0.9);
  place(elStreak, x, y, 1, vis * twinkle * 0.8);
  elBurst.rotation.z = Math.sin(t * 0.1) * 0.03;

  for (const g of ghosts) {
    // ghosts ride the axis from the light through screen centre
    place(g.el, -x * g.k, -y * g.k, 1, vis);
  }
}



// ═══════════════════════════════════════════════════════════════════
//  orbit camera
// ═══════════════════════════════════════════════════════════════════

const target = new THREE.Vector3(0, -0.06, 0);
const sph = new THREE.Spherical().setFromVector3(
  camera.position.clone().sub(target)
);
let lastFraming = null;
let paramsReady = false;   // true once the params object exists
let pane = null;

const PHI_MAX = 1.229 + 0.4521739130; // orbit ceiling: rotate V <= 0.4521739130
const applyCamera = () => {
  sph.phi = Math.max(0.05, Math.min(PHI_MAX, sph.phi));
  sph.radius = Math.max(2.0, Math.min(14.0, sph.radius));
  camera.position.setFromSpherical(sph).add(target);
  camera.lookAt(target);
  camera.updateMatrixWorld(true);
  syncCameraParams();
};

let syncingCamera = false;
function syncCameraParams() {
  if (!paramsReady || syncingCamera) return;
  syncingCamera = true;

  params.startTheta = sph.theta - (-0.522);
  params.startPhi = sph.phi - 1.229;
  params.startShiftX = target.x;
  params.startShiftY = target.y - (-0.06);

  const fovY = camera.fov * Math.PI / 180;
  const fovX = 2 * Math.atan(Math.tan(fovY / 2) * (innerWidth / innerHeight));
  const visW = 2 * sph.radius * Math.tan(fovX / 2);
  const visH = 2 * sph.radius * Math.tan(fovY / 2);
  params.startFill = 2.0 / Math.min(visW, visH);

  lastFraming = [params.startFill, params.startTheta, params.startPhi,
                 params.startShiftX, params.startShiftY].join();

  if (pane) pane.refresh();
  syncingCamera = false;
}



// ═══════════════════════════════════════════════════════════════════
//  startup framing.
// ═══════════════════════════════════════════════════════════════════

function frameStart() {
  // Guard the write-back: applyCamera() below calls syncCameraParams(),
  // which would immediately recompute the params from the camera we are
  // in the middle of setting — rounding the saved values back at us.
  syncingCamera = true;
  const P = paramsReady ? params : null;
  // Square onto the hole by default (theta -29.9deg, phi 70.4deg is the
  // exact hole axis), with offsets so the view can be nudged precisely.
  sph.theta = -0.522 + (P ? P.startTheta : 0);
  sph.phi = 1.229 + (P ? P.startPhi : 0);
  // vertical framing: shifts the ring up/down in frame
  target.y = -0.06 + (P ? P.startShiftY : 0);
  target.x = P ? P.startShiftX : 0;
  // Distance is derived from the viewport so the ring keeps the same
  // on-screen size regardless of window shape, rather than being a fixed
  // number tuned to one aspect ratio.
  const aspect = innerWidth / innerHeight;
  const fovY = camera.fov * Math.PI / 180;
  const fovX = 2 * Math.atan(Math.tan(fovY / 2) * aspect);
  const D = 2.0;                       // ring diameter (outer radius 1.0)
  const fillW = paramsReady ? params.startFill : 0.3688989901;
  // distance so the ring spans fillW of the width...
  const dW = D / (2 * fillW * Math.tan(fovX / 2));
  // ...and never more than fillW of the height either (matters on wide
  // windows, where fitting purely by width would overflow vertically)
  const dH = D / (2 * fillW * Math.tan(fovY / 2));
  sph.radius = Math.max(2.0, Math.min(14.0, Math.max(dW, dH)));
  applyCamera();
  syncingCamera = false;
  // keep the change-detector aligned with the values we just applied, so
  // the next unrelated slider tweak doesn't see a stale key and re-frame
  if (paramsReady) {
    lastFraming = [params.startFill, params.startTheta, params.startPhi,
                   params.startShiftX, params.startShiftY].join();
  }
}
applyCamera();

const pointers = new Map();
let lastPinch = 0;
const el = renderer.domElement;
el.addEventListener('pointerdown', e => {
  el.setPointerCapture(e.pointerId);
  pointers.set(e.pointerId, { x: e.clientX, y: e.clientY });
  if (pointers.size === 2) {
    const [a, b] = [...pointers.values()];
    lastPinch = Math.hypot(a.x - b.x, a.y - b.y);
  }
});
el.addEventListener('pointermove', e => {
  if (!pointers.has(e.pointerId)) return;
  const prev = pointers.get(e.pointerId);
  const dx = e.clientX - prev.x, dy = e.clientY - prev.y;
  pointers.set(e.pointerId, { x: e.clientX, y: e.clientY });
  if (pointers.size === 1) {
    sph.theta -= dx * 0.005;
    sph.phi -= dy * 0.005;
    cameraDirty = true; // committed once per frame, in the render loop
  } else if (pointers.size === 2) {
    const [a, b] = [...pointers.values()];
    const pinch = Math.hypot(a.x - b.x, a.y - b.y);
    if (lastPinch > 0) {
      sph.radius *= lastPinch / pinch;
      cameraDirty = true;
    }
    lastPinch = pinch;
  }
});
const endPointer = e => { pointers.delete(e.pointerId); lastPinch = 0; };
el.addEventListener('pointerup', endPointer);
el.addEventListener('pointercancel', endPointer);
el.addEventListener('wheel', e => {
  e.preventDefault();
  sph.radius *= 1 + e.deltaY * 0.001;
  cameraDirty = true;
}, { passive: false });



// ═══════════════════════════════════════════════════════════════════
//  param(s)
// ═══════════════════════════════════════════════════════════════════

const params = {
  color: '#ffffff',
  transmission: glass.transmission,
  thickness: glass.thickness,
  roughness: glass.roughness,
  metalness: glass.metalness,
  ior: glass.ior,
  dispersion: glass.dispersion,
  iridescence: glass.iridescence,
  iridescenceIOR: glass.iridescenceIOR,
  iridThicknessMin: 120,
  iridThicknessMax: 480,
  clearcoat: glass.clearcoat,
  clearcoatRoughness: glass.clearcoatRoughness,
  sheen: 0,
  sheenRoughness: 1,
  sheenColor: '#ffffff',
  specularIntensity: glass.specularIntensity,
  specularColor: '#ffffff',
  attenuationColor: '#dff2ff',
  attenuationDistance: glass.attenuationDistance,
  envMapIntensity: glass.envMapIntensity,
  exposure: renderer.toneMappingExposure,
  edgeStrength: uFresnelStrength.value,
  edgePower: uFresnelPower.value,
  edgeSpeed: uRainbowSpeed.value,
  // caustics
  caustics: true,
  showRing: true,
  floorCaustics: true,
  envSat: 1.0,
  envBright: 1.0,
  envBands: 5.0,
  envColorA: '#2b6bff',
  envColorB: '#ff3c8a',
  envColorC: '#18e0d8',
  envCausticAmt: 2.99,
  causticOcclusion: uCausticOcclusion.value,
  causticIntensity: uCausticIntensity.value,
  causticScale: uCausticScale.value,
  causticSpeed: uCausticSpeed.value,
  causticChroma: uChroma.value,
  causticColor: '#eaf6ff',
  spotIntensity: spot.intensity,
  spotAngle: spot.angle,
  // scene
  wetFloor: true,
  wetAmount: 0.95,
  wetBlur: 0.15,
  wetDistort: 0.22,
  wetScale: 2.2,
  wetSpeed: 0.12,
  wetFresnel: 2.4,
  wetRough: 0.12,
  wetTint: '#d6c7f9',
  startFill: 0.3688989901,
  startTheta: 0.626,
  startPhi: 0.3799793782,
  startShiftX: 0.0,
  startShiftY: 0.0,
  lockFraming: false,
  fov: 38,
  autoSway: true,
  lensFlare: true,
  flareStrength: 1.0,
  floorColor: '#63808f',
  // golden cube swarm
  swarmEnabled: true,
  soundEnabled: true,
  soundVolume: 0.5,
  ringRipple: true,
  ringWobble: 0.05,
  swarmSpeed: 0.1,
  swarmScatter: 0.21,
  swarmSize: 0.64,
  swarmMouse: true,
  swarmMouseRadius: 0.55,
  swarmMouseForce: 45,
  swarmGlassMode: 'custom',
  swarmXray: false,
  swarmXrayAmt: 0.25,
  swarmXrayColor: '#d99a35',
  swarmRefract: true,
  swarmRefractAmt: 2.0,
  swarmRefractShift: 0.22,
  swarmRefractChroma: 0.32,
  swarmRefractSpectral: 0.25,
  swarmRefractBlur: 0.15,
  swarmRefractSat: 1.4,
  swarmRefractFlip: false
};

paramsReady = true;
frameStart();

let lastEnvKey = null;
let lastGlassKey = null;
let camReadoutFn = null;
let envTimer = null;
let envPrimed = false;   // first env bake runs immediately, not debounced

function applyParams() {
  if (syncingCamera) return;
  glass.color.set(params.color);
  glass.transmission = params.transmission;
  glass.thickness = params.thickness;
  glass.roughness = params.roughness;
  glass.metalness = params.metalness;
  glass.ior = params.ior;
  glass.dispersion = params.dispersion;
  glass.iridescence = params.iridescence;
  glass.iridescenceIOR = params.iridescenceIOR;
  glass.iridescenceThicknessRange = [params.iridThicknessMin, params.iridThicknessMax];
  glass.clearcoat = params.clearcoat;
  glass.clearcoatRoughness = params.clearcoatRoughness;
  glass.sheen = params.sheen;
  glass.sheenRoughness = params.sheenRoughness;
  glass.sheenColor.set(params.sheenColor);
  glass.specularIntensity = params.specularIntensity;
  glass.specularColor.set(params.specularColor);
  glass.attenuationColor.set(params.attenuationColor);
  glass.attenuationDistance = params.attenuationDistance;
  glass.envMapIntensity = params.envMapIntensity;
  const glassKey = [params.color, params.transmission, params.thickness,
    params.roughness, params.metalness, params.ior, params.dispersion,
    params.iridescence, params.iridescenceIOR, params.iridThicknessMin,
    params.iridThicknessMax, params.clearcoat, params.clearcoatRoughness,
    params.sheen, params.sheenRoughness, params.sheenColor,
    params.specularIntensity, params.specularColor, params.attenuationColor,
    params.attenuationDistance, params.envMapIntensity].join();
  if (glassKey !== lastGlassKey) {
    lastGlassKey = glassKey;
    glass.needsUpdate = true;
  }

  renderer.toneMappingExposure = params.exposure;
  uFresnelStrength.value = params.edgeStrength;
  uFresnelPower.value = params.edgePower;
  uRainbowSpeed.value = params.edgeSpeed;

  ring.castShadow = params.caustics;

  // ghost mode: keep the caster in the shadow pass, hide it from the camera
  const wantGhost = !params.showRing;
  const isGhost = glass.outputNode !== null;
  if (wantGhost !== isGhost) {
    glass.outputNode = wantGhost ? vec4(0.0) : null;
    glass.depthWrite = !wantGhost;
    glass.needsUpdate = true;
  }

  const envKey = [params.envSat, params.envBright, params.envBands,
                  params.envColorA, params.envColorB, params.envColorC,
                  params.envCausticAmt, params.causticScale,
                  params.causticChroma, params.causticIntensity,
                  params.causticOcclusion, params.causticColor].join();
  if (envKey !== lastEnvKey) {
    lastEnvKey = envKey;
    envState.sat = params.envSat;
    envState.bright = params.envBright;
    envState.bands = params.envBands;
    envState.causticAmt = params.envCausticAmt;
    // shared with the floor projection — one source of truth
    envState.causticScale = params.causticScale * 2.3;
    envState.causticChroma = params.causticChroma;
    envState.causticIntensity = params.causticIntensity;
    envState.causticOcclusion = params.causticOcclusion;
    envState.causticColor.set(params.causticColor);
    envColorA.set(params.envColorA);
    envColorB.set(params.envColorB);
    envColorC.set(params.envColorC);
    // The 120ms debounce keeps slider drags smooth, but on the FIRST apply
    // it would leave the scene showing a stale environment. Bake at once.
    clearTimeout(envTimer);
    if (envPrimed) {
      envTimer = setTimeout(() => refreshEnv().catch(e => console.warn("env bake failed:", e)), 120);
    } else {
      envPrimed = true;
      refreshEnv().catch(e => console.warn("env bake failed:", e));
    }
  }

  if (floor.receiveShadow !== params.floorCaustics) {
    floor.receiveShadow = params.floorCaustics;
    floorMat.needsUpdate = true;
  }
  uCausticOcclusion.value = params.causticOcclusion;
  uCausticIntensity.value = params.causticIntensity;
  uCausticScale.value = params.causticScale;
  uCausticSpeed.value = params.causticSpeed;
  uChroma.value = params.causticChroma;
  uCausticColor.value.set(params.causticColor);
  uIorShadow.value = params.ior; // keep shadow refraction in sync with IOR
  spot.intensity = params.spotIntensity;
  spot.angle = params.spotAngle;

  floorMat.color.set(params.floorColor);
  const framingKey = [params.startFill, params.startTheta, params.startPhi,
                      params.startShiftX, params.startShiftY].join();
  if (framingKey !== lastFraming) {
    lastFraming = framingKey;
    frameStart();
  }
  if (camera.fov !== params.fov) {
    camera.fov = params.fov;
    camera.updateProjectionMatrix();
  }
  uWetAmount.value = params.wetFloor ? params.wetAmount : 0;
  uWetBlur.value = params.wetBlur;
  uWetDistort.value = params.wetDistort;
  uWetScale.value = params.wetScale;
  uWetSpeed.value = params.wetSpeed;
  uWetFresnel.value = params.wetFresnel;
  uWetRough.value = params.wetRough;
  uWetTint.value.set(params.wetTint);

  flareScene.visible = params.lensFlare;
  uRingWobble.value = params.ringRipple ? params.ringWobble : 0;

  swarm.visible = params.swarmEnabled;
  swarmState.speed = params.swarmSpeed;
  swarmState.scatter = params.swarmScatter;
  swarmState.size = params.swarmSize;
  swarmState.mouse = params.swarmMouse;
  swarmState.mouseRadius = params.swarmMouseRadius;
  swarmState.mouseForce = params.swarmMouseForce;
  // glass mode: physical (v54 backdrop dispersion) vs custom (synced)
  const physGlass = params.swarmGlassMode === 'physical';
  if (cubeMat.transparent !== !physGlass) {
    cubeMat.transparent = !physGlass;
    cubeMat.needsUpdate = true;
  }
  swarm.renderOrder = physGlass ? 0 : 6;
  swarmGhost.visible = params.swarmEnabled && params.swarmXray && !physGlass;
  ghostMat.opacity = params.swarmXrayAmt;
  ghostMat.color.set(params.swarmXrayColor);
  uCubeIor.value = params.ior; // refracted cubes bend with the glass IOR
  // 'refract in glass' now works in BOTH modes: stacked on physical it
  // reaches cubes the backdrop can't see, softening the dead angles
  uCubeRefrAmt.value = params.swarmRefract ? params.swarmRefractAmt : 0;
  uCubeRefrShift.value = params.swarmRefractShift;
  uCubeRefrChroma.value = params.swarmRefractChroma;
  uCubeSpectral.value = params.swarmRefractSpectral;
  uCubeRefrBlur.value = params.swarmRefractBlur;
  uCubeRefrSat.value = params.swarmRefractSat;
  uCubeFlip.value = params.swarmRefractFlip ? 1 : 0;
}

async function loadPane() {
  const urls = [
    'https://cdn.jsdelivr.net/npm/tweakpane@4.0.5/dist/tweakpane.min.js',
    'https://unpkg.com/tweakpane@4.0.5/dist/tweakpane.min.js',
    'https://esm.sh/tweakpane@4.0.5'
  ];
  let Pane = null;
  for (const url of urls) {
    try {
      ({ Pane } = await import(/* @vite-ignore */ url));
      if (Pane) break;
    } catch (_) { /* try next CDN */ }
  }
  if (!Pane) {
    document.getElementById('tag').textContent +=
      ' · tweakpane CDN unreachable — scene runs without panel';
    return;
  }

  pane = new Pane({
    container: document.getElementById('pane-container'),
    title: 'MeshPhysicalNodeMaterial · v102'
  });
  pane.on('change', applyParams);

  const failed = [];
  const bind = (folder, key, opts) => {
    try {
      const b = folder.addBinding(params, key, opts);
      b.on('change', applyParams);
    } catch (err) {
      failed.push(key);
      console.error('pane binding failed:', key, err);
    }
  };

  const fGlass = pane.addFolder({ title: 'glass' });
  bind(fGlass, 'color');
  bind(fGlass, 'transmission', { min: 0, max: 1 });
  bind(fGlass, 'thickness', { min: 0, max: 5 });
  bind(fGlass, 'roughness', { min: 0, max: 1 });
  bind(fGlass, 'metalness', { min: 0, max: 1 });
  bind(fGlass, 'ior', { min: 1, max: 2.333 });
  bind(fGlass, 'dispersion', { min: 0, max: 20 });

  const fCaustics = pane.addFolder({ title: 'caustics (floor + baked into glass)' });
  bind(fCaustics, 'caustics');
  bind(fCaustics, 'showRing', { label: 'show ring' });
  bind(fCaustics, 'floorCaustics', { label: 'floor caustics' });
  bind(fCaustics, 'envCausticAmt', { label: 'caustics in glass', min: 0, max: 5 });

  const fEnv = pane.addFolder({ title: 'refracted environment (invisible)' });
  bind(fEnv, 'envSat', { label: 'colour amount', min: 0, max: 3 });
  bind(fEnv, 'envBright', { label: 'brightness', min: 0.2, max: 3 });
  bind(fEnv, 'envBands', { label: 'bands', min: 1, max: 12, step: 1 });
  bind(fEnv, 'envColorA', { label: 'colour A' });
  bind(fEnv, 'envColorB', { label: 'colour B' });
  bind(fEnv, 'envColorC', { label: 'colour C' });
  bind(fCaustics, 'causticOcclusion', { min: 0, max: 20 });
  bind(fCaustics, 'causticIntensity', { min: 0, max: 80 });
  bind(fCaustics, 'causticScale', { min: 0.5, max: 10 });
  bind(fCaustics, 'causticSpeed', { min: 0, max: 0.5 });
  bind(fCaustics, 'causticChroma', { min: 0, max: 0.08 });
  bind(fCaustics, 'causticColor');
  bind(fCaustics, 'spotIntensity', { min: 0, max: 200 });
  bind(fCaustics, 'spotAngle', { min: 0.1, max: 1.2 });

  const fIrid = pane.addFolder({ title: 'iridescence', expanded: false });
  bind(fIrid, 'iridescence', { min: 0, max: 1 });
  bind(fIrid, 'iridescenceIOR', { min: 1, max: 2.5 });
  bind(fIrid, 'iridThicknessMin', { min: 0, max: 1200, step: 1 });
  bind(fIrid, 'iridThicknessMax', { min: 0, max: 1200, step: 1 });

  const fCoat = pane.addFolder({ title: 'clearcoat / sheen / specular', expanded: false });
  bind(fCoat, 'clearcoat', { min: 0, max: 1 });
  bind(fCoat, 'clearcoatRoughness', { min: 0, max: 1 });
  bind(fCoat, 'sheen', { min: 0, max: 1 });
  bind(fCoat, 'sheenRoughness', { min: 0, max: 1 });
  bind(fCoat, 'sheenColor');
  bind(fCoat, 'specularIntensity', { min: 0, max: 2 });
  bind(fCoat, 'specularColor');

  const fVol = pane.addFolder({ title: 'volume', expanded: false });
  bind(fVol, 'attenuationColor');
  bind(fVol, 'attenuationDistance', { min: 0.1, max: 10 });

  const fEdge = pane.addFolder({ title: 'rainbow edge (tsl)', expanded: false });
  bind(fEdge, 'edgeStrength', { min: 0, max: 1 });
  bind(fEdge, 'edgePower', { min: 0.5, max: 8 });
  bind(fEdge, 'edgeSpeed', { min: 0, max: 0.5 });

  const fWet = pane.addFolder({ title: 'wet floor' });
  bind(fWet, 'wetFloor', { label: 'enabled' });
  bind(fWet, 'wetAmount', { label: 'reflectivity', min: 0, max: 1 });
  bind(fWet, 'wetBlur', { label: 'blurriness', min: 0, max: 1.5 });
  bind(fWet, 'wetDistort', { label: 'ripple distort', min: 0, max: 1.5 });
  bind(fWet, 'wetScale', { label: 'ripple scale', min: 0.3, max: 8 });
  bind(fWet, 'wetSpeed', { label: 'ripple speed', min: 0, max: 0.6 });
  bind(fWet, 'wetFresnel', { label: 'fresnel', min: 0.5, max: 6 });
  bind(fWet, 'wetRough', { label: 'surface roughness', min: 0.05, max: 0.95 });
  bind(fWet, 'wetTint', { label: 'tint' });

  const fCam = pane.addFolder({ title: 'camera framing' });
  bind(fCam, 'fov', { label: 'field of view', min: 15, max: 75 });
  bind(fCam, 'startFill', { label: 'ring fills', min: 0.25, max: 0.95 });
  bind(fCam, 'startTheta', { label: 'rotate H', min: -0.8, max: 0.8 });
  bind(fCam, 'startPhi', { label: 'rotate V', min: -0.8, max: 0.4521739130 });
  bind(fCam, 'startShiftX', { label: 'shift X', min: -1.5, max: 1.5 });
  bind(fCam, 'startShiftY', { label: 'shift Y', min: -1.5, max: 1.5 });
  bind(fCam, 'lockFraming', { label: 'refit on resize' });
  fCam.addButton({ title: 'reset to start view' }).on('click', () => {
    frameStart();
  });
  // Live readout of the current view. Updated every frame from the render
  // loop (see camReadoutFn), so dragging to orbit and scrolling to zoom
  // both update it immediately — read the numbers off and pass them on.
  try {
    const camReadout = fCam.addBlade({ view: 'text', label: 'current view',
      parse: v => v, value: '', disabled: true });
    camReadoutFn = () => {
      camReadout.value =
        'th ' + (sph.theta + 0.522).toFixed(3) +
        '  ph ' + (sph.phi - 1.229).toFixed(3) +
        '  fill ' + (2.0 / (2 * sph.radius *
          Math.tan(2 * Math.atan(Math.tan(camera.fov * Math.PI / 360) *
          (innerWidth / innerHeight)) / 2))).toFixed(3);
    };
  } catch (err) {
    camReadoutFn = () => {
      const tg = document.getElementById('tag');
      if (tg) tg.textContent = 'v35 — view: th ' +
        (sph.theta + 0.522).toFixed(3) + '  ph ' + (sph.phi - 1.229).toFixed(3) +
        '  r ' + sph.radius.toFixed(2);
    };
  }

  const fSwarm = pane.addFolder({ title: 'golden cube swarm' });
  bind(fSwarm, 'swarmEnabled', { label: 'enabled' });
  bind(fSwarm, 'swarmGlassMode', { label: 'glass mode',
    options: { 'custom (synced)': 'custom', 'physical (v54)': 'physical' } });
  bind(fSwarm, 'swarmSpeed', { label: 'speed', min: 0, max: 0.2 });
  bind(fSwarm, 'swarmScatter', { label: 'spread', min: 0, max: 0.6 });
  bind(fSwarm, 'swarmSize', { label: 'cube size', min: 0.05, max: 2.5 });
  bind(fSwarm, 'swarmMouse', { label: 'mouse repel' });
  bind(fSwarm, 'swarmMouseRadius', { label: 'repel radius', min: 0.1, max: 1.5 });
  bind(fSwarm, 'swarmMouseForce', { label: 'repel force', min: 0, max: 150 });
  bind(fSwarm, 'swarmXray', { label: 'x-ray through glass' });
  bind(fSwarm, 'swarmXrayAmt', { label: 'x-ray strength', min: 0, max: 1 });
  bind(fSwarm, 'swarmXrayColor', { label: 'x-ray gold tint' });
  bind(fSwarm, 'swarmRefract', { label: 'refract in glass' });
  bind(fSwarm, 'swarmRefractAmt', { label: 'refraction amount', min: 0, max: 5 });
  bind(fSwarm, 'swarmRefractShift', { label: 'refraction shift', min: 0, max: 0.5 });
  bind(fSwarm, 'swarmRefractChroma', { label: 'refr. dispersion', min: 0, max: 0.6 });
  bind(fSwarm, 'swarmRefractSpectral', { label: 'refr. iridescence', min: 0, max: 1 });
  bind(fSwarm, 'swarmRefractBlur', { label: 'refr. blur', min: 0, max: 1.5 });
  bind(fSwarm, 'swarmRefractSat', { label: 'refr. saturation', min: 0, max: 3 });
  bind(fSwarm, 'swarmRefractFlip', { label: 'flip refr. Y' });

  const fSound = pane.addFolder({ title: 'ambient sound (click once to start)' });
  bind(fSound, 'soundEnabled', { label: 'enabled' });
  bind(fSound, 'soundVolume', { label: 'volume', min: 0, max: 1 });

  const fRipple = pane.addFolder({ title: 'ring ripple (hover the glass)' });
  bind(fRipple, 'ringRipple', { label: 'enabled' });
  bind(fRipple, 'ringWobble', { label: 'wobble height', min: 0, max: 0.2 });

  const fScene = pane.addFolder({ title: 'scene', expanded: false });
  bind(fScene, 'envMapIntensity', { min: 0, max: 4 });
  bind(fScene, 'exposure', { min: 0.2, max: 3 });
  bind(fScene, 'floorColor');
  bind(fScene, 'autoSway');
  bind(fScene, 'lensFlare', { label: 'lens flare' });
  bind(fScene, 'flareStrength', { label: 'flare strength', min: 0, max: 2 });

  if (failed.length) {
    document.getElementById('tag').textContent +=
      ' · pane bindings failed: ' + failed.join(', ');
  }

  applyParams();
}



// ═══════════════════════════════════════════════════════════════════
//  resize + loop
// ═══════════════════════════════════════════════════════════════════

addEventListener('resize', () => {
  camera.aspect = innerWidth / innerHeight;
  camera.updateProjectionMatrix();
  renderer.setSize(innerWidth, innerHeight);
  cubeRT.setSize(Math.floor(innerWidth * 0.5), Math.floor(innerHeight * 0.5));
  renderer.getDrawingBufferSize(_mirDBS);
  mirrorRT.setSize(_mirDBS.x, _mirDBS.y);
  aspect.value = innerWidth / innerHeight;
  if (params && params.lockFraming) frameStart();
});

const clock = new THREE.Clock();
let lastT = 0;
let cameraDirty = false; // orbit input pending, applied at render time
const baseY = rig.rotation.y, baseX = rig.rotation.x;

async function start() {
  await renderer.init();

  rendererReady = true;
  await refreshEnv();

  applyParams();
  frameStart();

  scene.updateMatrixWorld(true);
  camera.updateMatrixWorld(true);

  syncingCamera = true;
  const warmRadius = sph.radius;
  for (let i = 0; i < 4; i++) {
    sph.radius = warmRadius * (i % 2 === 0 ? 1.0005 : 1.0);
    applyCamera();
    scene.updateMatrixWorld(true);
    renderer.render(scene, camera);
    await new Promise(r => requestAnimationFrame(r));
  }

  sph.radius = warmRadius;
  applyCamera();
  syncingCamera = false;
  renderer.render(scene, camera);

  document.getElementById('loader').classList.add('hidden');
  renderer.setAnimationLoop(() => {
    const t = clock.getElapsedTime();
    const dt = Math.min(0.1, Math.max(0.0001, t - lastT));
    lastT = t;
    if (params.autoSway) {
      rig.rotation.y = baseY + Math.sin(t * 0.21) * 0.10;
      rig.rotation.x = baseX + Math.sin(t * 0.15 + 1.3) * 0.03;
    }
    if (params.lensFlare) updateFlare(t, dt);
    if (params.swarmEnabled) updateSwarm(t, dt);
    for (let i = 0; i < RIPPLE_MAX; i++) ripAgeArr[i] += dt;
    if (audioReady) {
      const an = actx.currentTime;
      let en = 0;
      for (let i = 0; i < RIPPLE_MAX; i++) {
        if (ripAgeArr[i] < 4) en += ripStrArr[i] * Math.exp(-2.6 * ripAgeArr[i]);
      }
      padFilter.frequency.setTargetAtTime(520 + Math.min(en, 3) * 450, an, 0.1);
      if (glassGain) {
        glassGain.gain.setTargetAtTime(
          params.soundEnabled ? Math.min(en, 2.5) * 0.095 : 0, an, 0.12);
        glassBP.frequency.setTargetAtTime(
          640 + Math.min(en, 2.5) * 90, an, 0.2);
      }
      const headF = (t * swarmState.speed) % 1;
      const cover = circOverlap(headF, 0.5, holeU0, holeU1) /
                    Math.max(1e-4, holeU1 - holeU0);

      const disturb = swarmState.disturb || 0;
      shimmerGain.gain.setTargetAtTime(
        params.soundEnabled
          ? cover * 0.10 + Math.min(disturb * 0.18, 0.05) : 0, an, 0.4);
      masterGain.gain.setTargetAtTime(
        params.soundEnabled ? params.soundVolume * 0.6 : 0, an, 0.3);

      const lapNow = Math.floor(t * swarmState.speed);
      if (lapNow !== audioLap) {
        audioLap = lapNow;
        const ang = lapAngle(lapNow);
        const semis = ang === 0 ? 0 : (ang === Math.PI ? -2 : 3);
        const mulF = Math.pow(2, semis / 12);
        for (const { o, r } of padOscs) {
          o.frequency.setTargetAtTime(PAD_ROOT * r * mulF, an, 0.8);
        }
      }
    }

    if (params.swarmEnabled && params.swarmRefract) {
      rtHolder.matrix.copy(swarmHolder.matrixWorld);
      rtScene.environment = scene.environment; // IBL for the lit gold
      renderer.setRenderTarget(cubeRT);
      renderer.render(rtScene, camera);
      renderer.setRenderTarget(null);
    }

    if (cameraDirty) { cameraDirty = false; applyCamera(); }
    if (camReadoutFn) camReadoutFn();
    if (params.wetFloor) renderMirror();
    renderer.render(scene, camera);

    if (params.lensFlare) {
      renderer.autoClear = false;
      flareCam.left = -innerWidth / innerHeight;
      flareCam.right = innerWidth / innerHeight;
      flareCam.updateProjectionMatrix();
      renderer.render(flareScene, flareCam);
      renderer.autoClear = true;
    }
  });
  loadPane();
}
start().catch(err => __fail(err.message || String(err)));
</script>
</body>
</html>
volatile-nexus/styles/style.css
파일 저장

@import url('https://fonts.googleapis.com/css2?family=Cinzel:wght@800&display=swap');

* { margin: 0; padding: 0; box-sizing: border-box; }
html, body { margin: 0px; padding: 0px;  line-height: 1.1; font-family: 'Cinzel', sans-serif; width: 100%; height: 100%; overflow: hidden; background: #000; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }

* { margin:0; padding:0; box-sizing:border-box; }
html, body {
  width:100%; height:100vh;
  background: #004680; /* fallback for old browsers */
  background: -webkit-linear-gradient(to right, #4484ba, #004680); /* Chrome 10-25, Safari 5.1-6 */
  background: linear-gradient(to right, #4484ba, #004680);
  display:flex; align-items:center; justify-content:center;
  overflow:hidden; color:white;§
}
canvas { display:block; cursor:grab; touch-action:none;position:fixed; top:0; left:0; width:100%; height:100%; }
canvas:active { cursor:grabbing; }
#loader {
  position:fixed; top:0; left:0; width:100%; height:100%;
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:14px;
  z-index:900; pointer-events:none;
  transition: opacity 0.5s ease;
}
#loader.hidden { opacity:0; }
.spinner {
  width:36px; height:36px;
  border: 3px solid rgba(255,255,255,0.25);
  border-top-color: rgba(255,255,255,0.7);
  border-radius:50%;
  animation: spin 0.8s linear infinite;
}
@keyframes spin { to { transform:rotate(360deg); } }
.loading-text {
  font: 400 13px 'Helvetica Neue', Arial, sans-serif;
  color: rgba(255,255,255,0.7);
  letter-spacing: 0.08em;
}
.loading-text .dot {
  animation: dotFade 1.4s ease-in-out infinite;
  opacity:0;
}
.loading-text .dot:nth-child(1) { animation-delay: 0.0s; }
.loading-text .dot:nth-child(2) { animation-delay: 0.2s; }
.loading-text .dot:nth-child(3) { animation-delay: 0.4s; }
@keyframes dotFade {
  0%, 80%, 100% { opacity:0; }
  40% { opacity:1; }
}
#fps {font-size:30px;font-family:monospace;color:black;}
/* ── Tweakpane host ── */
#pane-container {
  position: fixed;
  top: 16px;
  right: 16px;
  z-index: 100;
  display:none;
}


a {
  color: #D0D0D0;
  text-decoration: none;
}
/* ── Tweakpane dark theme ── */
:root {
  --tp-base-background-color:             hsl(222,22%,7%);
  --tp-base-shadow-color:                 hsla(0,0%,0%,0.35);
  --tp-button-background-color:           hsl(222,18%,15%);
  --tp-button-background-color-active:    hsl(222,18%,22%);
  --tp-button-background-color-focus:     hsl(222,18%,20%);
  --tp-button-background-color-hover:     hsl(222,18%,19%);
  --tp-button-foreground-color:           hsl(155,90%,62%);
  --tp-container-background-color:        hsl(222,18%,11%);
  --tp-container-background-color-active: hsl(222,18%,15%);
  --tp-container-background-color-focus:  hsl(222,18%,14%);
  --tp-container-background-color-hover:  hsl(222,18%,13%);
  --tp-container-foreground-color:        hsla(155,90%,62%,0.65);
  --tp-groove-foreground-color:           hsl(222,18%,22%);
  --tp-input-background-color:            hsl(222,18%,13%);
  --tp-input-background-color-active:     hsl(222,18%,20%);
  --tp-input-background-color-focus:      hsl(222,18%,17%);
  --tp-input-background-color-hover:      hsl(222,18%,16%);
  --tp-input-foreground-color:            hsl(155,90%,74%);
  --tp-label-foreground-color:            hsl(220,16%,52%);
  --tp-monitor-background-color:          hsl(222,18%,10%);
  --tp-monitor-foreground-color:          hsla(155,90%,62%,0.85);
}

/* ── Vignette ── */
#vignette {
  pointer-events: none;
  background: transparent;
  height: 100vh;
  width: 100%;
  box-shadow: inset 0 0 50px rgba(0,0,0,0.23);
  position: fixed;
  z-index: 98;
}

/* ── FPS counter ── */
#fps {
  position: fixed;
  bottom: 16px;
  right: 16px;
  font: 500 10px/1 'Cinzel', monospace;
  color: rgba(61,255,160,0.0);
  letter-spacing: .08em;
  pointer-events: none;
  z-index: 1200;
}

#title-text {
  position: fixed;  
  max-width:250px;
  overflow-wrap: break-word;
  top: 118px;
  left: 28px;  
  max-width: 250px;
  z-index: 201;
  color:white;
  text-shadow: 2px 2px 6px rgba(0,0,0,0.8);
}

/* ── Title block (top-left) ── */
#title-block {
  position: fixed;
  top: 28px;
  left: 28px;
  z-index: 200;
  pointer-events: none;
  display: flex;
  flex-direction: column;
  gap: 16px;
}
#title-eyebrow {
  font: 400 16px/1 'Cinzel', monospace;
  text-transform: uppercase;
  color: #ffffff;
  text-shadow: 2px 2px 6px rgba(0,0,0,0.8);
}
#title-headline {
  font: 600 28px/1 'Cinzel', system-ui, sans-serif;
  color: #ffffff;
  text-shadow: 3px 3px 10px rgba(0,0,0,0.8);
}

p {
  font: 400 12px/1 'Cinzel', monospace;
  text-transform: uppercase;
  color: #ffffff;
  text-shadow: 2px 2px 6px rgba(0,0,0,0.8);
  line-height: 1.5;
}

/* ── Nav link (bottom-left) ── */
#nav-prev-all {
  position: fixed;
  bottom: 56px;
  left: 28px;
  z-index: 200;
  font: 400 14px/1 'Cinzel', monospace;
  letter-spacing: .02em;
  text-transform: uppercase;
  color: #ffffff;
  text-decoration: none;
  text-shadow: 2px 2px 6px rgba(0,0,0,0.8);
}
#nav-prev-all:hover {
  text-shadow: 3px 3px 10px rgba(0,0,0,0.9);
}

/* ── Nav link (bottom-left) ── */
#nav-prev {
  position: fixed;
  bottom: 28px;
  left: 28px;
  z-index: 200;
  font: 400 14px/1 'Cinzel', monospace;
  letter-spacing: .02em;
  text-transform: uppercase;
  color: #ffffff;
  text-decoration: none;
  text-shadow: 2px 2px 6px rgba(0,0,0,0.8);
}
#nav-prev:hover {
  text-shadow: 3px 3px 10px rgba(0,0,0,0.9);
}

@media (max-width: 968px) {
  #pane-container {
    position: fixed;
    top: 16px;
    right: 6px;
    z-index: 100;
    width: 190px;
  }
  #pane-container .tp-dfwv {
    width: 190px;
    border-radius: 10px;
    border: 1px solid rgba(255,255,255,0.07);
    box-shadow: 0 8px 48px rgba(0,0,0,0.55);
    overflow: hidden;
  }
  #title-eyebrow {
    font: 400 11px/1 'Cinzel', monospace;
    text-transform: uppercase;
    color: #ffffff;
    text-shadow: 2px 2px 6px rgba(0,0,0,0.8);
  }
  #title-headline {
    font: 600 23px/1 'Cinzel', system-ui, sans-serif;
    color: #ffffff;
    text-shadow: 3px 3px 10px rgba(0,0,0,0.8);
  }  
  #title-text {
    font: 400 11px/1 'Cinzel', monospace;
    position: fixed;  
    max-width:200px;
    width:200px;
    overflow-wrap: break-word;
    top: 98px;
    left: 28px;  
    z-index: 201;
    color:white;
    text-shadow: 2px 2px 6px rgba(0,0,0,0.8);
  }  
}
Original author attribution실행 안내·자료
파일 저장

Volatile Nexus: Tinkering with Glass, Caustics, Cubes and Sound in Three.js
Original author: Frank Reitberger
Published by Codrops. Copyright (c) 2026 Codrops.
License: MIT, pursuant to the publisher's downloadable-demo grant.
Keep CODROPS-MIT-2026.txt and the original project notices with copies.
Third-party media exceptions and credits are recorded separately in the source inventory.
Media credits and license evidence실행 안내·자료
파일 저장

garden-anomaly/styles/font/Open_Sans/LICENSE.txt

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


garden-anomaly/styles/font/Open_Sans/README.txt
Open Sans Variable Font
=======================

This download contains Open Sans as both variable fonts and static fonts.

Open Sans is a variable font with these axes:
  wdth
  wght

This means all the styles are contained in these files:
  OpenSans-VariableFont_wdth,wght.ttf
  OpenSans-Italic-VariableFont_wdth,wght.ttf

If your app fully supports variable fonts, you can now pick intermediate styles
that aren’t available as static fonts. Not all apps support variable fonts, and
in those cases you can use the static font files for Open Sans:
  static/OpenSans_Condensed/OpenSans_Condensed-Light.ttf
  static/OpenSans_Condensed/OpenSans_Condensed-Regular.ttf
  static/OpenSans_Condensed/OpenSans_Condensed-Medium.ttf
  static/OpenSans_Condensed/OpenSans_Condensed-SemiBold.ttf
  static/OpenSans_Condensed/OpenSans_Condensed-Bold.ttf
  static/OpenSans_Condensed/OpenSans_Condensed-ExtraBold.ttf
  static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-Light.ttf
  static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-Regular.ttf
  static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-Medium.ttf
  static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-SemiBold.ttf
  static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-Bold.ttf
  static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-ExtraBold.ttf
  static/OpenSans/OpenSans-Light.ttf
  static/OpenSans/OpenSans-Regular.ttf
  static/OpenSans/OpenSans-Medium.ttf
  static/OpenSans/OpenSans-SemiBold.ttf
  static/OpenSans/OpenSans-Bold.ttf
  static/OpenSans/OpenSans-ExtraBold.ttf
  static/OpenSans_Condensed/OpenSans_Condensed-LightItalic.ttf
  static/OpenSans_Condensed/OpenSans_Condensed-Italic.ttf
  static/OpenSans_Condensed/OpenSans_Condensed-MediumItalic.ttf
  static/OpenSans_Condensed/OpenSans_Condensed-SemiBoldItalic.ttf
  static/OpenSans_Condensed/OpenSans_Condensed-BoldItalic.ttf
  static/OpenSans_Condensed/OpenSans_Condensed-ExtraBoldItalic.ttf
  static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-LightItalic.ttf
  static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-Italic.ttf
  static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-MediumItalic.ttf
  static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-SemiBoldItalic.ttf
  static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-BoldItalic.ttf
  static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-ExtraBoldItalic.ttf
  static/OpenSans/OpenSans-LightItalic.ttf
  static/OpenSans/OpenSans-Italic.ttf
  static/OpenSans/OpenSans-MediumItalic.ttf
  static/OpenSans/OpenSans-SemiBoldItalic.ttf
  static/OpenSans/OpenSans-BoldItalic.ttf
  static/OpenSans/OpenSans-ExtraBoldItalic.ttf

Get started
-----------

1. Install the font files you want to use

2. Use your app's font picker to view the font family and all the
available styles

Learn more about variable fonts
-------------------------------

  https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts
  https://variablefonts.typenetwork.com
  https://medium.com/variable-fonts

In desktop apps

  https://theblog.adobe.com/can-variable-fonts-illustrator-cc
  https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts

Online

  https://developers.google.com/fonts/docs/getting_started
  https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide
  https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts

Installing fonts

  MacOS: https://support.apple.com/en-us/HT201749
  Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux
  Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows

Android Apps

  https://developers.google.com/fonts/docs/android
  https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts

License
-------
Please read the full license text (LICENSE.txt) to understand the permissions,
restrictions and requirements for usage, redistribution, and modification.

You can use them in your products & projects – print or digital,
commercial or otherwise.

This isn't legal advice, please consider consulting a lawyer and see the full
license for all details.


garden-anomaly/styles/font/Space_Grotesk/OFL.txt
Copyright 2020 The Space Grotesk Project Authors (https://github.com/floriankarsten/space-grotesk)

This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL


-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------

PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.

The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded, 
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.

DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.

"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).

"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).

"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.

"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.

PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:

1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.

2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.

3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.

4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.

5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.

TERMINATION
This license becomes null and void if any of the above conditions are
not met.

DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.


garden-anomaly/styles/font/Space_Grotesk/README.txt
Space Grotesk Variable Font
===========================

This download contains Space Grotesk as both a variable font and static fonts.

Space Grotesk is a variable font with this axis:
  wght

This means all the styles are contained in a single file:
  SpaceGrotesk-VariableFont_wght.ttf

If your app fully supports variable fonts, you can now pick intermediate styles
that aren’t available as static fonts. Not all apps support variable fonts, and
in those cases you can use the static font files for Space Grotesk:
  static/SpaceGrotesk-Light.ttf
  static/SpaceGrotesk-Regular.ttf
  static/SpaceGrotesk-Medium.ttf
  static/SpaceGrotesk-SemiBold.ttf
  static/SpaceGrotesk-Bold.ttf

Get started
-----------

1. Install the font files you want to use

2. Use your app's font picker to view the font family and all the
available styles

Learn more about variable fonts
-------------------------------

  https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts
  https://variablefonts.typenetwork.com
  https://medium.com/variable-fonts

In desktop apps

  https://theblog.adobe.com/can-variable-fonts-illustrator-cc
  https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts

Online

  https://developers.google.com/fonts/docs/getting_started
  https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide
  https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts

Installing fonts

  MacOS: https://support.apple.com/en-us/HT201749
  Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux
  Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows

Android Apps

  https://developers.google.com/fonts/docs/android
  https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts

License
-------
Please read the full license text (OFL.txt) to understand the permissions,
restrictions and requirements for usage, redistribution, and modification.

You can use them in your products & projects – print or digital,
commercial or otherwise.

This isn't legal advice, please consider consulting a lawyer and see the full
license for all details.


volatile-nexus/styles/font/Open_Sans/LICENSE.txt

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


volatile-nexus/styles/font/Open_Sans/README.txt
Open Sans Variable Font
=======================

This download contains Open Sans as both variable fonts and static fonts.

Open Sans is a variable font with these axes:
  wdth
  wght

This means all the styles are contained in these files:
  OpenSans-VariableFont_wdth,wght.ttf
  OpenSans-Italic-VariableFont_wdth,wght.ttf

If your app fully supports variable fonts, you can now pick intermediate styles
that aren’t available as static fonts. Not all apps support variable fonts, and
in those cases you can use the static font files for Open Sans:
  static/OpenSans_Condensed/OpenSans_Condensed-Light.ttf
  static/OpenSans_Condensed/OpenSans_Condensed-Regular.ttf
  static/OpenSans_Condensed/OpenSans_Condensed-Medium.ttf
  static/OpenSans_Condensed/OpenSans_Condensed-SemiBold.ttf
  static/OpenSans_Condensed/OpenSans_Condensed-Bold.ttf
  static/OpenSans_Condensed/OpenSans_Condensed-ExtraBold.ttf
  static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-Light.ttf
  static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-Regular.ttf
  static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-Medium.ttf
  static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-SemiBold.ttf
  static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-Bold.ttf
  static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-ExtraBold.ttf
  static/OpenSans/OpenSans-Light.ttf
  static/OpenSans/OpenSans-Regular.ttf
  static/OpenSans/OpenSans-Medium.ttf
  static/OpenSans/OpenSans-SemiBold.ttf
  static/OpenSans/OpenSans-Bold.ttf
  static/OpenSans/OpenSans-ExtraBold.ttf
  static/OpenSans_Condensed/OpenSans_Condensed-LightItalic.ttf
  static/OpenSans_Condensed/OpenSans_Condensed-Italic.ttf
  static/OpenSans_Condensed/OpenSans_Condensed-MediumItalic.ttf
  static/OpenSans_Condensed/OpenSans_Condensed-SemiBoldItalic.ttf
  static/OpenSans_Condensed/OpenSans_Condensed-BoldItalic.ttf
  static/OpenSans_Condensed/OpenSans_Condensed-ExtraBoldItalic.ttf
  static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-LightItalic.ttf
  static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-Italic.ttf
  static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-MediumItalic.ttf
  static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-SemiBoldItalic.ttf
  static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-BoldItalic.ttf
  static/OpenSans_SemiCondensed/OpenSans_SemiCondensed-ExtraBoldItalic.ttf
  static/OpenSans/OpenSans-LightItalic.ttf
  static/OpenSans/OpenSans-Italic.ttf
  static/OpenSans/OpenSans-MediumItalic.ttf
  static/OpenSans/OpenSans-SemiBoldItalic.ttf
  static/OpenSans/OpenSans-BoldItalic.ttf
  static/OpenSans/OpenSans-ExtraBoldItalic.ttf

Get started
-----------

1. Install the font files you want to use

2. Use your app's font picker to view the font family and all the
available styles

Learn more about variable fonts
-------------------------------

  https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts
  https://variablefonts.typenetwork.com
  https://medium.com/variable-fonts

In desktop apps

  https://theblog.adobe.com/can-variable-fonts-illustrator-cc
  https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts

Online

  https://developers.google.com/fonts/docs/getting_started
  https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide
  https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts

Installing fonts

  MacOS: https://support.apple.com/en-us/HT201749
  Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux
  Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows

Android Apps

  https://developers.google.com/fonts/docs/android
  https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts

License
-------
Please read the full license text (LICENSE.txt) to understand the permissions,
restrictions and requirements for usage, redistribution, and modification.

You can use them in your products & projects – print or digital,
commercial or otherwise.

This isn't legal advice, please consider consulting a lawyer and see the full
license for all details.


volatile-nexus/styles/font/Space_Grotesk/OFL.txt
Copyright 2020 The Space Grotesk Project Authors (https://github.com/floriankarsten/space-grotesk)

This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL


-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------

PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.

The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded, 
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.

DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.

"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).

"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).

"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.

"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.

PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:

1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.

2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.

3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.

4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.

5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.

TERMINATION
This license becomes null and void if any of the above conditions are
not met.

DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.


volatile-nexus/styles/font/Space_Grotesk/README.txt
Space Grotesk Variable Font
===========================

This download contains Space Grotesk as both a variable font and static fonts.

Space Grotesk is a variable font with this axis:
  wght

This means all the styles are contained in a single file:
  SpaceGrotesk-VariableFont_wght.ttf

If your app fully supports variable fonts, you can now pick intermediate styles
that aren’t available as static fonts. Not all apps support variable fonts, and
in those cases you can use the static font files for Space Grotesk:
  static/SpaceGrotesk-Light.ttf
  static/SpaceGrotesk-Regular.ttf
  static/SpaceGrotesk-Medium.ttf
  static/SpaceGrotesk-SemiBold.ttf
  static/SpaceGrotesk-Bold.ttf

Get started
-----------

1. Install the font files you want to use

2. Use your app's font picker to view the font family and all the
available styles

Learn more about variable fonts
-------------------------------

  https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts
  https://variablefonts.typenetwork.com
  https://medium.com/variable-fonts

In desktop apps

  https://theblog.adobe.com/can-variable-fonts-illustrator-cc
  https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts

Online

  https://developers.google.com/fonts/docs/getting_started
  https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide
  https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts

Installing fonts

  MacOS: https://support.apple.com/en-us/HT201749
  Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux
  Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows

Android Apps

  https://developers.google.com/fonts/docs/android
  https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts

License
-------
Please read the full license text (OFL.txt) to understand the permissions,
restrictions and requirements for usage, redistribution, and modification.

You can use them in your products & projects – print or digital,
commercial or otherwise.

This isn't legal advice, please consider consulting a lawyer and see the full
license for all details.

garden-anomaly/styles/font/Open_Sans/LICENSE.txt실행 안내·자료
파일 저장


                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
garden-anomaly/styles/font/Open_Sans/LICENSE.txt.http.json실행 안내·자료
파일 저장

{
  "url": "https://raw.githubusercontent.com/prinzipiell/tsl/c70b125d035a48105ca1e67933ebb0f7fcb7a34e/garden-anomaly/styles/font/Open_Sans/LICENSE.txt",
  "attempts": [
    {
      "startedAt": "2026-09-22T02:23:34.616Z",
      "status": 200,
      "finalUrl": "https://raw.githubusercontent.com/prinzipiell/tsl/c70b125d035a48105ca1e67933ebb0f7fcb7a34e/garden-anomaly/styles/font/Open_Sans/LICENSE.txt",
      "contentType": "text/plain; charset=utf-8",
      "bytes": 11358,
      "sha256": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30",
      "finishedAt": "2026-09-22T02:23:34.829Z"
    }
  ],
  "ok": true,
  "finalUrl": "https://raw.githubusercontent.com/prinzipiell/tsl/c70b125d035a48105ca1e67933ebb0f7fcb7a34e/garden-anomaly/styles/font/Open_Sans/LICENSE.txt",
  "fetchedAt": "2026-09-22T02:23:34.829Z",
  "sha256": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30",
  "bytes": 11358
}
volatile-nexus/styles/font/Open_Sans/LICENSE.txt실행 안내·자료
파일 저장


                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
volatile-nexus/styles/font/Open_Sans/LICENSE.txt.http.json실행 안내·자료
파일 저장

{
  "url": "https://raw.githubusercontent.com/prinzipiell/tsl/c70b125d035a48105ca1e67933ebb0f7fcb7a34e/volatile-nexus/styles/font/Open_Sans/LICENSE.txt",
  "attempts": [
    {
      "startedAt": "2026-09-22T02:23:36.106Z",
      "status": 200,
      "finalUrl": "https://raw.githubusercontent.com/prinzipiell/tsl/c70b125d035a48105ca1e67933ebb0f7fcb7a34e/volatile-nexus/styles/font/Open_Sans/LICENSE.txt",
      "contentType": "text/plain; charset=utf-8",
      "bytes": 11358,
      "sha256": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30",
      "finishedAt": "2026-09-22T02:23:36.394Z"
    }
  ],
  "ok": true,
  "finalUrl": "https://raw.githubusercontent.com/prinzipiell/tsl/c70b125d035a48105ca1e67933ebb0f7fcb7a34e/volatile-nexus/styles/font/Open_Sans/LICENSE.txt",
  "fetchedAt": "2026-09-22T02:23:36.394Z",
  "sha256": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30",
  "bytes": 11358
}
Bundled dependency licenses실행 안내·자료
파일 저장

https://cdn.jsdelivr.net/gh/cocopon/tweakpane@4.0.5/LICENSE.txt
Copyright (c) 2016 cocopon <cocopon@me.com>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


https://cdn.jsdelivr.net/npm/three@0.178.0/LICENSE
The MIT License

Copyright © 2010-2025 three.js authors

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.


https://cdn.jsdelivr.net/npm/three@0.184.0/LICENSE
The MIT License

Copyright © 2010-2026 three.js authors

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.