import { createRoot } from "react-dom/client"; import App from "./App"; import "./index.css"; import { performanceMonitor } from "./lib/performance-observer"; import { resourceLoader } from "./lib/critical-resource-loader"; // Recover from stale-chunk blank screens caused by deploys with new asset hashes. // When a lazy-loaded JS module 404s after a deploy, the browser fires a global error // with "Importing a module script failed". We reload once to get fresh HTML + chunks. // The sessionStorage flag prevents an infinite reload loop if the new deploy is broken. (function installChunkErrorRecovery() { const FLAG = 'chunk_reload_attempted'; window.addEventListener('error', (event) => { const msg = event.message || ''; if ( msg.includes('Importing a module script failed') || msg.includes('Failed to fetch dynamically imported module') || msg.includes('error loading dynamically imported module') ) { if (sessionStorage.getItem(FLAG)) return; // already tried once this session sessionStorage.setItem(FLAG, '1'); // Tell PostHog a stale-chunk error was detected. The snippet loads // synchronously so window.posthog is available before React mounts. try { (window as any).posthog?.capture('stale_chunk_detected', { reload_already_attempted: false }); } catch {} // Show a friendly overlay before reloading so users aren't confused by // a sudden flash (React may not have mounted yet, so we inject raw HTML). const overlay = document.createElement('div'); overlay.style.cssText = [ 'position:fixed', 'inset:0', 'z-index:99999', 'display:flex', 'align-items:center', 'justify-content:center', 'background:rgba(0,0,0,0.55)', 'backdrop-filter:blur(4px)', '-webkit-backdrop-filter:blur(4px)', ].join(';'); overlay.innerHTML = `