handleExtensionChange was calling handleFormChange() explicitly, but the
change event also bubbles up to the form's onchange handler which calls
handleFormChange() again - causing two saves per change.
Now handleExtensionChange only calls checkCacheStatus() since the form's
onchange already handles saving.
- Use @floating-ui/dom for intelligent tooltip placement
- Tooltips now shift/flip to stay within viewport bounds
- Collapse hidden tooltips to prevent horizontal scroll overflow
- Move tooltip setup to App.svelte for global coverage
Call showOrHideGraphicsOptions() after loading config from OPFS to ensure
Anti-aliasing and Anisotropic filtering are properly hidden when the
Software renderer is already configured in the INI file.
- Replace vanilla JS with Svelte 5 components
- Add Vite build system with Terser optimization
- Reorganize assets into src/ and public/ directories
- Update README with setup instructions