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.