The demo showed "Live demo unavailable in this browser" on fully capable
browsers (e.g. Chrome) whenever a page load wasn't cross-origin isolated —
a soft SPA navigation, or a visit cached from before the COOP/COEP headers
went live. The old reload guard used a sticky sessionStorage flag that, once
set during a non-isolated load, never cleared, so it skipped the recovery
reload and showed a misleading "unsupported browser" message.
- Reload guard now uses a timestamp, not a sticky flag: a stale flag from an
earlier visit no longer permanently strands the demo (reload loop still
prevented within a 10s debounce).
- Non-isolated pages now open the standalone viewer (/gerber-demo/, isolated
on its own and always works) in a new tab instead of dead-ending.
- The "needs a recent browser" note only shows when provably incapable
(isolated but missing SharedArrayBuffer/WebGL2).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>