feat: nopaint painting system for AC Native + DJ/wifi/handle fixes
Painting system:
- page(painting) switches render target, returns chainable proxy
- paste(painting, dx, dy) alpha-composites onto current target
- painting(w,h,cb) now exposes .pixels Uint8Array for direct access
- graph_line_thick() for variable-width brush strokes
- line(x0,y0,x1,y1,thickness) JS API with 5th thickness param
- New painting.mjs piece: persistent canvas, freehand line brush,
color cycling (c key), clear (n key), scroll thickness
DJ fixes:
- Speed control moved to audio callback with linear interpolation
(was broken in decoder resampler) — scratching actually works
- Negative speed support (-4x to +4x) for reverse scratching
- TTS fixed: was calling tts.speak() but API is sound.speak()
WiFi: ClearPass captive portal cmd=authenticate strategy
ac-os: strip @ prefix from handle, USE_SDL defaults off
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>