83f0ba9c04
Три проблемы UX отключения модулей: 1) Пустой блок флешкарт на дашборде: виджет #w-flashcard — <div>, а скрытие шло только по [href]. Добавлена карта FEATURE_WIDGETS (флешкарты→#w-flashcard) — контейнер прячется целиком. 2) Лаборатория не уходила из сайдбара: не было ГЛОБАЛЬНОГО тумблера lab (только free-student). Добавлен в whitelist updateFeatures + GAME_FEATURES; map уже знал lab→/lab. Теперь выключение скрывает пункт и редиректит со страницы. 3) Мигание выключенных модулей (FOUC): hideDisabledFeatures асинхронный. Теперь loadFeatures кэширует /api/features в localStorage, а _applyFeatureCss инъектит <style id=ls-feat-hide> синхронно из кэша на ранней загрузке (api.js идёт до sidebar.js) — сайдбар/виджеты строятся уже скрытыми. Геймификация: класс no-gamification ставится на <html> (раньше body), ls.css правило body.no-gamification → .no-gamification (работает и для html, и для body). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>