1. Non-blocking scan capture upload (emitScannedCard)
- Card result shows immediately; upload fires in background
- Removes ~500ms blocking S3/MinIO roundtrip from the result path
2. Parallel OCR workers for name + number strips (ocr-worker)
- Two independent Tesseract workers run simultaneously
- Cuts Layer 1 OCR time ~50% on mobile (name + number in parallel)
- terminateOcrWorker cleans up both workers on teardown
3. Faster pre-verification timing (scanner-card-detection)
- VERIFICATION_INTERVAL_MS: 1000 → 500ms
- MIN_FIRST_SEEN_MS_FOR_VERIFY: 800 → 500ms
- Net ~300ms faster from first detection to verification start
All 58 scanner tests pass (2.20s).