const CACHE = 'qbank-v1'; self.addEventListener('install', () => self.skipWaiting()); self.addEventListener('activate', e => e.waitUntil(clients.claim())); self.addEventListener('fetch', e => { // Network-first: serve fresh, fall back to cache for GET requests. if (e.request.method !== 'GET') return; e.respondWith( fetch(e.request) .then(res => { if (res.ok) { const clone = res.clone(); caches.open(CACHE).then(c => c.put(e.request, clone)); } return res; }) .catch(() => caches.match(e.request)) ); });