Replace green overlay rendering with cutout-on-checkerboard preview:
- Slab pixels show actual photo RGB with mask-based alpha
- Removed background area shows 10px checkerboard (224/192 gray)
- Knob debounce from a1d4a96 preserved unchanged
Update Playwright test to assert checkerboard + slab pixels
visible, not green overlay avgAlpha.
- drawMaskOverlay: reduce green overlay max alpha 140→80 (~31% opacity),
lighten green from (0,200,0) to (60,220,60) so photo stays visible
- resolveSheet: when auto-detect is ambiguous, try both green and black
sheet modes, pick whichever produces non-trivial slab area (1%-99%)
- Knob sliders: debounce full remask to 150ms; oninput redraws with
previous mask (cheap), onchange triggers immediate full remask
- Add onDestroy cleanup for debounce timeout
Fixes: issue #55 — iPad mask preview nearly solid green, knobs laggy
- Add id='photo-file-input' to file input and for='photo-file-input' to label
- Convert on:change → onchange, on:click → onclick, on:input → oninput
(Svelte 5 requires native DOM event properties, not on: directives)
- Add Playwright BVT suite confirming file selection → mask step advance
- Test image: 100x60 PNG with green border (hue=66°) and white interior