## 1. Setup

- [x] 1.1 Add `sw.js` to site root output (place in `site/public/sw.js`)
- [x] 1.2 Add service worker registration to the base layout (register only in production)

## 2. Pre-cache Site Shell

- [x] 2.1 Implement versioned cache names and an explicit cache version constant
- [x] 2.2 Implement `install` handler to pre-cache critical shell assets
- [x] 2.3 Implement `activate` handler to delete old version caches

## 3. Runtime Caching

- [x] 3.1 Implement network-first strategy for navigation/document requests with cache fallback
- [x] 3.2 Implement cache-first strategy for images/media with network fallback
- [x] 3.3 Add a bounded eviction policy for media cache size

## 4. Verification

- [x] 4.1 Verify service worker registers in production build and does not register in dev
- [x] 4.2 Verify repeat navigation and asset loads hit cache (Chrome DevTools Application tab)
- [x] 4.3 Verify a new deploy triggers cache version update and old caches are removed
