Store categories as authored strings. Trim and deduplicate without changing case, compare without case sensitivity, and keep all observed categories available to filters and editors.
Mods are renamed by role (shell2d_base, menu_base, ui_base, live2d_base,
editor_tools, cthangover_story, cthangover_murakami, cthangover_party) and
every reference follows. Engine UI prefabs (dialog, answers, message, game
menu, inventory, map, skills) and their panel entries moved out of the story
mod into the subsystem mods; the card_novel and vn_starter_novel collections
are removed.
- MenuBuilder skips a button whose MenuButtonEntry.Visible predicate is
false (e.g. "Continue" only when a last session exists); a throwing
predicate is logged and the button stays visible.
- MenuBuilder.OpenScene returns the overlay it opened (null when the
scene failed to build), so callers can configure it.
- Text for mods left out of a game's mod set: mods/not_in_game_reason.
- ToolBox: instead of a text button per tool (which did not fit the 60x60
icon row and overlapped the icons) the HUD gets one "tools" icon button
with a popup listing every visible tool, sorted by localized name.
- ToolWindow: chrome that follows the UI style guide (title on the left,
close on the right, drag-to-move, double-click/maximize, edge resize),
a status bar with buffered status/hint text, dirty-state confirmation
and keyboard shortcuts (Ctrl+S in _Input, other keys only when no
focused control consumed them).
- ToolTheme: denser copy of the game theme for editor toolbars;
ToolStatusKind: status bar message kinds.
- New tools icon and the tool window texts (unsaved changes, maximize,
close, menu title) in en/ru.