// ─── BACKGROUND & WAKE LOCK ───────────────────────────────────── let wakeLock = null; async function requestWakeLock() { try { if ('wakeLock' in navigator) { wakeLock = await navigator.wakeLock.request('screen'); wakeLock.addEventListener('release', () => { console.log('Wake Lock released'); }); } } catch (err) { console.warn('WakeLock failed:', err); } } document.addEventListener('visibilitychange', async () => { if (document.visibilityState === 'visible') { await requestWakeLock(); if (!ws || ws.readyState !== 1) connect(); } }); // Pre-init AudioContext on first user interaction document.addEventListener('click', async () => { if (!audioCtx) { audioCtx = new AudioContext({sampleRate: 16000}); await audioCtx.audioWorklet.addModule('pcm-processor.js').catch(() => {}); } if (audioCtx.state === 'suspended') await audioCtx.resume(); await requestWakeLock(); }, { once: true });