// Runs before the page paints: marks that JavaScript is on, so hints written for // readers without it (in the server-rendered pages) can be hidden, and applies the // reader's saved light or dark choice so the page never flashes the other theme. document.documentElement.classList.add('js'); try { const t = localStorage.getItem('duly-theme'); if (t === 'light' || t === 'dark') document.documentElement.dataset.theme = t; } catch { // Storage blocked (private window, site data off): follow the system setting. } // Motion only when the reader allows it and the browser can tell what is on screen. // If the app script never takes over, fall back to the static page after 4 s. try { if ('IntersectionObserver' in window && !matchMedia('(prefers-reduced-motion: reduce)').matches) { document.documentElement.classList.add('motion'); setTimeout(() => { if (!window.__dulyMotion) document.documentElement.classList.remove('motion'); }, 4000); } } catch { document.documentElement.classList.remove('motion'); }