88caa1e976
Recording now creates an offscreen <img> (browser-native MJPEG decoding) and captures frames via canvas.toBlob() at 100ms intervals. This replaces the broken fetch-based multipart parser. - useRecorder: img+canvas capture instead of fetch+ReadableStream - RecorderControls: removed Cancel button, only Record/Stop remain - App.vue: removed cancel wiring