- app-core: LRUCache class (max 3 entries, LRU eviction), exported to window
- app-core: isStorageAvailable replaces typeof localStorage checks
- app-core: Notification.show() — убраны inline-стили конфликтующие с CSS, reflow fix
- app-core: fadeIn/fadeOut — очистка transition после завершения анимации
- search-window: lawsCache Map → LRUCache(3), память ограничена 3 серверами
- search-window: renderLaws/renderRules рефактор — вынесены buildPenaltyHTML,
buildEmptyState, buildLawItemHTML, buildRuleItemHTML; дублированный SVG удалён
- search-window: убраны переменные-пустышки textClass/noteClass/expClass/excClass
- search-window: setTimeout(0) → requestAnimationFrame везде
- search-window: opacityListenersSetup флаг теперь реально выставляется
- settings-manager: resetAllSettings — localStorage.clear() → точечное удаление
только ключей настроек (кэш данных больше не стирается)
- settings-manager: настройки объединены в app_settings JSON, миграция со старых ключей
- main-window: 7 магических setTimeout → transitionend + double rAF
- main-window: убран setTimeout(50) в DOMContentLoaded