doExtract() only checked data.message, so JSON responses with
error key (e.g. 'no ISO files found') would show green success.
Now checks data.error first and displays it in red.
- serve.go: embedded web UI (embed.FS), REST API endpoints for
search, list, download (SSE progress), and WAV extraction
- main.go: added serve subcommand and flag registration
- web/ui: vanilla JS frontend with search cards, download queue,
extract controls; dark theme, zero dependencies
- electron/: Electron wrapper that spawns fetch serve as sidecar,
reads port from stdout, creates BrowserWindow; electron-builder
config for macOS .app bundle with akaiutil + script as resources
Refs #1, #9