1. The SVG loads as an <img> and rasterizes into a 256×256 offscreen canvas.

2. Every pixel becomes a particle; RGB is quantized to 4-bit bins.

3. Dots with the same bin collapse into one color bucket (≈20–80 per SVG).

4. Draw pass: one fillStyle per bucket, batched fillRects. 10k+ particles at 60fps.

5. Hover pushes with cubic falloff; click fires a shockwave; requestAnimationFrame stops at rest.

Technique adapted from Emil Kowalski's Agents with Taste.