- Remove vite-plugin-pwa and all service worker code. The app no longer
registers a service worker; legacy SWs are unregistered on load.
- Move snapshot parsing (thousands of sync Path.exists() calls) into a
thread pool via asyncio.to_thread() so the health check responds
immediately on startup.
- Wrap aiopathlib AsyncPath.iterdir() (sync os.scandir under the hood)
in asyncio.to_thread() in scanner and scanning modules so directory
walks do not monopolize the event loop.