Washes — two layers · animated backdrop + interactive overlay

starting…
Paint
Texture
Brush
Backdrop

Two independent Washes.create() instances stacked with CSS. The backdrop (#bg) runs setAnimation() and has pointer-events:none, so it never steals input. The overlay (#fg) is transparent(true) and sits on top, capturing all painting. They share no simulation state. The HUD shows the backdrop's measured frame time; an adaptive loop steps its quality() preset down when perfMetrics().framep95 exceeds budget and back up when it recovers — so a heavy backdrop self-throttles without touching the overlay.