* WIP
* stuff
* WIP: Interactive 3D score cube for save editor
* Conditionally render ScoreCube to properly clean up WebGL canvas
Only mount the ScoreCube component when on the save-editor page.
This ensures onDestroy is called when navigating away, properly
disposing of the WebGL renderer and removing the canvas from DOM.
* Refactor: Consolidate formats and genericize WDB rendering
- Move parsing/serialization code to src/core/formats/:
- BinaryReader.js, BinaryWriter.js (shared utilities)
- SaveGameParser.js, SaveGameSerializer.js
- PlayersParser.js, PlayersSerializer.js
- Create formats/index.js as barrel export
- Extract generic WdbModelRenderer from ScoreCubeRenderer:
- WdbModelRenderer handles D3DRM geometry and paletted textures
- ScoreCubeRenderer extends it with score-specific logic
- Prepares for rendering other WDB models in the future
- Keep savegame/constants.js for domain-specific constants
- savegame/index.js remains as high-level API facade
* Save editor UI improvements
- Make save slot cards fixed width (85px) to prevent resizing with name length
- Make save slot cards more compact (smaller icons, padding, font)
- Remove Act selection from Character section
- Remove box-shadow from selected character to fix collapsed section bleed
* Improve score cube lighting to match in-game appearance
- Use flat, even lighting (high ambient + soft front light)
- Remove harsh directional shadows from edges
- Adjust camera position slightly for better framing
* Add spacing below score cube canvas
* Add spinning loader while loading score cube
* Update three.js to 0.182.0 and fix npm audit issues
- Update three.js from 0.170.0 to 0.182.0
- Fix npm audit vulnerabilities (devalue, lodash, svelte)
- Remaining vulns are in dev dependencies (vite, workbox-cli)
* Fix score cube overflow on mobile
Add max-width constraints to prevent the score cube from expanding
its container on narrow viewports while preserving its natural
200x200 size on desktop.
* Add save slot carousel and improve empty states
- Add reusable Carousel component with arrow navigation, drag-to-scroll,
and click-to-scroll-into-view functionality
- Replace static save slot list with horizontal carousel
- Add empty state with image when no save files exist
- Add prompt state when saves exist but none is selected
- Reset selected slot when entering Save Editor page
* Add February 2026 changelog entry for Save Editor
* Add missing January 2026 changelog entries for Safari and mobile fixes
* Remove unused mission images
* Refactor opfs.js to reduce code duplication
- Consolidate getFileHandle to use getOpfsRoot internally
- Add writeTextFile helper that uses writeBinaryFile
- Extract showToast helper for toast notifications
- Simplify saveConfig to use writeTextFile instead of duplicate worker
- Simplify fileExists and readBinaryFile to use getFileHandle
* Remove unused ScoreColorButton component
* Remove unused UI components
- 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