Two issues were causing the service worker to not cache assets in production:
1. The prefetch baseUrl was hardcoded to /vite-dev/ which only exists in
development. In production, assets are served from /packs/. Added
ASSET_PATH build-time constant to use the correct path per environment.
2. The service worker was built before assets:precompile, so the Vite
manifest didn't exist yet, resulting in 0 precached assets. Moved
the SW build to after_assets_precompile so it can read the manifest.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>