- saveState is now debounced (~400ms) to coalesce rapid changes; a pending write is flushed on beforeunload and on visibilitychange→hidden so the last change is never lost. - The SheetJS <script> gets defer so it no longer blocks initial parse; the typeof XLSX guard already covers any not-yet-available case. Verified headless: app loads without JS/CSP errors. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>