- App provides HistoryHandle as context (both build modes; stacks stay
empty on the server) and passes it to persist::init_hydrated
- persist: init_hydrated starts undo tracking after the localStorage
load (first captured state = saved state, not mock); clear_all and
apply_import call undo::before_replace so they are undoable
- header: Отменить/Вернуть buttons with disabled states driven by the
reactive stack depths; Ctrl+Z / Ctrl+Shift+Z / Ctrl+Y via a window
keydown listener that skips editable targets (browser owns those)
- SCSS: disabled control buttons dim out
Save downloads dashboard.json, Load opens a file picker and imports
through apply_import with errors reported in the modal, Clear asks for
confirmation then wipes to Dashboard::blank(). App provides the store
and ModalState and mounts the modal; init_hydrated starts autosave.
Doc comments on all modules, components, entities, helpers and type
aliases; larger comments on the important entities (Dashboard, PlayerData,
Context, App, Numput, item data). No behavior changes.