Fixes
- Shutdown: Ctrl+C now exits cleanly — added re-entrancy guard so multiple SIGINT signals don't spawn duplicate shutdown cycles
- Shutdown: Fixed force-kill timer loop that kept firing repeatedly when child processes didn't exit immediately
- Static files: PWA manifest, service worker, and workbox scripts now served with correct MIME types (were being served as HTML in production)
- Docker: Fixed runtime stage build failure — copy pruned node_modules from builder instead of re-running npm ci without a lockfile