# Soft Lab

A single-page, touch-friendly Three.js jelly playground. No build step, package installation, or external runtime requests. Three.js **0.180.0** and the Manrope font are vendored with their licenses.

## Run

Serve this directory with any static server, for example:

```sh
python3 -m http.server 8000
```

Open `http://localhost:8000`. Use HTTP rather than opening `index.html` directly, because browsers restrict local ES-module imports. A WebGL 2-capable browser is required.

## Controls

- **Click / tap** the jelly to poke it.
- **Hold and drag** to squish or stretch; release to watch it jiggle and settle. Mouse, touch, and pen work.
- **Drop it** releases the blob from height. **Fresh start** resets its shape and position, keeping your selected color and squishiness.
- Choose **Lime, Lavender, or Peach**, and adjust **Squishiness** from firm to extra gooey.
- **Keyboard:** focus the scene with Tab, then **Space** pokes. **D** drops and **R** resets when not operating a UI control. **Escape** closes help.

## Under the hood

Roughly 650–1,000 mesh particles use volume-preserving soft-body physics at 120 Hz. Transmissive shading, studio highlights, wrapped backlighting, and internal bubbles give the jelly its finish; a procedural contact shadow is visible through it. Mobile uses a lighter mesh, reduced-resolution transmission, and capped/adaptive pixel ratio for a **60 fps target**. Physics and drawing sleep at rest and pause in background tabs. Actual fps depends on your device. All application code is in `index.html`.
