На десктопе (>980px) .col-side уже видна как sticky-колонка справа в grid 1fr 280px.
Клик по кнопке #sidebar-btn добавлял .col-side-backdrop.show — backdrop с
z-index:9990 затемнял всю страницу, перекрывая sticky-aside. Со стороны
выглядело как «ничего не открылось» — на самом деле появлялась чёрная вуаль.
Фикс: @media(min-width:981px) скрывает #sidebar-btn и подавляет показ backdrop.
На мобайле (≤980px) кнопка и overlay работают как раньше.
Применено в 51 файле: physics 8/9/10 chN, algebra 7/9/10/11 chN + 8 ch2-3,
geometry 7/8/9/11 chN, geometry_10 r1-4.
Until now the 'gamification' feature flag did nothing: it had no row in
app_settings, the admin couldn't toggle it, awardXP/awardCoins ignored
it, and the CSS only hid three dashboard widgets — XP bars in textbooks
stayed visible regardless.
Phase 1 closes every hole.
Backend (source of truth):
• migration 029 seeds feature_gamification_enabled=1
• new isGamificationEnabled() helper in gamification/_shared.js with a
30s cache + invalidateGamificationCache() for instant admin toggles
• awardXP / awardCoins / updateStreak / unlockAchievement /
checkAchievements all bail out when the flag is off
• /api/gamification/* and /api/shop/* (user routes) return 404 when
disabled; admin routes remain open so the switch itself is reachable
• adminController.updateFeatures gains 'gamification' in the allow-list
and invalidates the cache on flip
Frontend:
• LS.isGamificationEnabled() (synchronous, populated by loadFeatures)
so xp.js + applyCosmetics can bail without a round-trip
• xp.js load/add/flush become no-ops when the flag is off
• applyCosmetics skips the round-trip when off
• CSS .no-gamification rule expanded to cover .hero-xp-badge, .po-xp,
.xp-card, .xp-bar, #frames-section, and a universal [data-gamified]
hook for future blocks
Textbooks (Variant 2 of the plan):
• backend/scripts/wrap_textbook_xp.py — idempotent script that adds
data-gamified to 167 XP tags across 63 textbook files (chapters +
hubs, all subjects/grades). Single CSS rule now hides everything.
Verified end-to-end: with the flag off, awardXP/awardCoins write nothing;
flipping back restores normal behavior.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
В сообщениях feedback (после Проверить) формулы с $...$ показывались
как сырой LaTeX-источник, например 'Повтори: $S_1/S_2 = k^2.$'.
Причина: feedback() устанавливал innerHTML но не вызывал renderMath()
на этом элементе, поэтому KaTeX не обрабатывал формулы.
Добавлен try{renderMath(elm);}catch(e){} после установки innerHTML
во всех 3 файлах (ch1, ch2, ch3).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Баг: у элементов .feedback стоит inline style='display:none' и CSS-класс
.feedback с display:none. Класс .feedback.ok должен переключать на
display:block, но inline-стиль имеет ВЫСШУЮ специфичность и перекрывает
классовый display:block.
В итоге onclick-обработчики работали корректно (вызывали feedback()),
но сообщение оставалось скрытым из-за inline display:none.
Симптом: 'нажимаешь Проверить — ничего не происходит' в боссах, DnD,
тренажёрах, квизах — везде где есть .feedback элемент.
Фикс: функция feedback() теперь явно сбрасывает elm.style.display='block'
после установки класса. Добавлен null-check на elm.
Затронуто 3 файла (ch1, ch2, ch3). Все feedback-элементы во всех
параграфах теперь показываются после клика по Проверить.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Системная переработка SVG-рисунков с парой треугольников ABC + A'B'C':
второй треугольник теперь спатиально отделён от первого (gap 30-50px),
viewBox расширен под обе фигуры + поля для подписей, аннотации перенесены
к верху/низу области.
Затронутые места:
1. §3 ИНТЕРАКТИВ 1 (slider k) — T2 анкорится в B2x=Cx+50, динамический W
2. §5 Card 5.1 — viewBox 350×195, label k= перенесён к низу
3. §5 ИНТЕРАКТИВ 2 Step 1 — viewBox 320×170, gap 37px, label наверху
4. §6 ИНТЕРАКТИВ 2 Step 1 — viewBox 330×165, gap 39px, label наверху
5. §7 Card 7.1 — viewBox 310×185, gap 38px, ratio внизу
6. §7 ИНТЕРАКТИВ 2 Step 1 — viewBox 310×160, gap 33px
7. §8 «через параллель» — полный редизайн viewBox 340×250: E внутри,
биссектриса с метками, CE параллельная с штрихами, BD/DC цветные
8. §9 Card 9.1 — gap 44px, label вверху
9. §9 ИНТЕРАКТИВ 2 Step 1 — gap 38px, label вверху
10. §9 БОСС task 1 — viewBox 310×158, gap 42px, label вверху
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
В концах доказательств использовался LaTeX-маркер \square (или
\blacksquare) для QED. KaTeX рендерит его как пустой квадрат U+25A1
который во многих браузерах отображается как 'тофу' (битый глиф).
Заменены во всех 3 главах геометрии:
- \$\square\$ → <b>ч.т.д.</b> (HTML текст)
- \$\blacksquare\$ → <b>ч.т.д.</b>
- \quad\square в $$ → закрытие $$ + 'ч.т.д.'
- \square ABCD (как символ параллелограмма) → просто ABCD
Затронуто: 29 в ch1 + 26 в ch2 + 1 в ch3.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sокращения признаков подобия везде заменены на полные русские названия:
- УУ/ДД → 'по двум углам' / 'Признак по двум углам'
- СУС/СДС → 'по двум сторонам и углу' / 'Признак по двум сторонам и углу между ними'
- ССС → 'по трём сторонам' / 'Признак по трём сторонам'
Сокращения оставлены только в скобках после полного имени для первого
упоминания (например, 'по двум углам (УУ)'). Затронуты: PARAS, SIDEBARS,
TIPS, заголовки виджетов в §4-§9, finale, DnD-чипы и квизы.
В KaTeX-выражениях формальных доказательств SAS/SSS оставлены (это
международная нотация конгруэнтности).
SVG-фиксы:
- §3 (карточка 3.1): viewBox расширен 360×155, маленький треугольник
отодвинут на 50px от большого (B'=245,135), не накладывается.
- §5 (карточка 5.1): viewBox 360×160, маленький треугольник на 45px
правее.
- §6 (карточка 6.1): viewBox 300×192 (выше), треугольник смещён вниз,
аннотации перенесены к низу карточки.
- §8 (доказательство через параллель): полный редизайн SVG (viewBox
0 -30 340 215): точка E чётко отделена от A, добавлены штрихи
параллельности CE∥AD, подпись 'CE ∥ AD'.
- §9 (слайдер k): динамическое размещение B2x =
Math.max(C1x+30, 200), второй треугольник не накладывается на
первый при больших значениях k.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Часть 1 — Итоговая шпаргалка: 9 mini-cards с SVG-иконкой и формулой
в KaTeX для каждого § (от Фалеса до отношения площадей).
Часть 2 — Интерактивная карта связей (SVG 620×340):
центральный узел 'Подобие треугольников' → 3 признака (УУ, СУС, ССС)
→ следствия (Фалес, прямая||стороне, биссектриса, площади, m:n).
Клик подсвечивает связи и показывает описание с KaTeX.
Часть 3 — 7 боссов (по 10 XP):
Босс 1: параллель MN — k=8/12, AN=12
Босс 2: биссектриса AB=15 AC=10 BC=14 — BD=8.4, DC=5.6
Босс 3: УУ+площади k=1.5, S=12 — S'=27
Босс 4: деление 20 см в 3:2 — AC=12, CB=8
Босс 5: СУС+косинус AB=8 AC=12 ∠=60° k=1.5 — A'B'=12, A'C'=18, BC≈11
Босс 6: высоты и площади k=2 — h'=3, S=36
Босс 7: средняя линия M середина AB, MN∥BC — MN=10.5, AN/NC=1, ratio=0.25
Часть 4 — Финальная плашка: confetti + achievement
'Мастер подобия Главы 3' + 50 XP бонус + кнопка перехода к Главе 4.
File: 4095 → 4709 LOC. ГЛАВА 3 ПОЛНОСТЬЮ ЗАВЕРШЕНА.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
§8 Свойство биссектрисы треугольника: SVG с слайдерами AB/AC/BC,
автоматическое построение точки D на BC через BD/DC=AB/AC, цветовая
подсветка отрезков BD/DC; 5-шаговое доказательство через параллель
CE∥AD, равнобедренный △ACE и теорему Фалеса; калькулятор BD,DC по
сторонам; DnD верна ли пропорция; тренажёр; босс.
§9 Отношение площадей подобных треугольников: SVG двух подобных
треугольников со слайдерами k=0.5..3 и S₂, live S₁=k²·S₂;
5-шаговое доказательство через S=½·a·h и подстановку отношений;
двухрежимный калькулятор (k,S₂→S₁ или S₁,S₂→k=√(S₁/S₂)); DnD
по k²=4 vs k²=9; mini-quiz из 5 вопросов с обобщением на произвольные
подобные фигуры; тренажёр; босс.
File: 3234 → 4095 LOC. Все 9 §§ Главы 3 готовы.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
§1 Доказательство Фалеса: точки пересечения трёх параллельных секущих
со второй стороной угла были заданы фиксированно (y=65/92/119), но
по геометрии должны вычисляться из наклона второй стороны
(slope=-80/230). Пересчитано во всех 5 шагах + добавлены метки точек,
штрихи равенства параллельных отрезков, корректные подписи A'/B'/C'.
Step 5: вертикальные линии заменены на отрезки между двумя секущими.
§3 Card 3.1: треугольник A'B'C' не был подобен ABC (отношения
сторон 1.59 vs 2.06). Пересчитан как точное масштабирование ABC
с коэффициентом k=2 относительно якоря B. Также фикс баги
'a/a*k/k' (всегда =1) в подписи коэффициента.
§5 Card 5.1: малый треугольник не подобен большому (отношения
1.71/2.03/1.88). Пересчитан с k=2 от якоря B.
Босс задача 1: тоже не подобен — исправлен на k=3.
Step 1 доказательства: тоже исправлен на k=5/3.
§6 Card 6.1: треугольники имели разные углы ∠A (68.6° vs 50.8°)
и непропорциональные стороны. Пересчитано с равными углами в A
и пропорцией k=2.
Босс задача 1: viewBox расширен, координаты исправлены на k=1.5.
Step 1: исправлено на k=2.
§7 Card 7.1: стороны не пропорциональны (2.68/1.68/1.80).
Пересчитано с k=2.5 от якоря B.
Step 1: исправлено на k=2.
Интерактивные слайдеры (§3 k, §5 α/β/k, §6 SAS, §7 SSS) — проверены,
они корректно вычисляют координаты по слайдерам.
Всего: 18 статичных + 5 интерактивных SVG проверено, 12 исправлено.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
§6 Второй признак (СУС — сторона-угол-сторона): SVG двух треугольников
с 4 слайдерами (AB, AC, угол A, k), второй автомасштабируется через SAS;
5-шаговое доказательство; калькулятор через теорему косинусов; DnD
подобны/не подобны (5 пар); тренажёр; босс.
§7 Третий признак (ССС — три стороны): SVG двух треугольников с 4
слайдерами (a, b, c, k), оба строятся через теорему косинусов с проверкой
неравенства треугольника; 5-шаговое доказательство; калькулятор проверки
пропорциональности 6 сторон; DnD; mini-quiz из 5 вопросов на все 3
признака (УУ, СУС, ССС); тренажёр; босс.
File: 2338 → 3182 LOC. 7 of 9 §§ Главы 3 готовы.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
§4 Свойство параллельной прямой: SVG-треугольник со слайдером положения
MN (t=0..1), live коэффициент подобия k, подсветка △AMN; 5-шаговое
доказательство через соответственные углы; калькулятор AM,AB,BC→MN+k;
DnD пропорция верна/неверна; тренажёр; босс.
§5 Первый признак подобия (по двум углам): SVG двух треугольников
с 3 слайдерами (α, β, k), оба строятся через теорему синусов с
автоподобием; 5-шаговое доказательство через сумму углов 180° и
вспомогательное построение; DnD подобны/не подобны по углам; калькулятор
2 угла + сторона → соответствующая сторона; тренажёр; босс.
File: 1557 → 2338 LOC.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
§1 Теорема Фалеса (обобщённая): SVG-угол со слайдером количества параллелей
2-6 и наклона стороны 10-60°, live пересчёт отношений; 5-шаговое
доказательство; калькулятор пропорций a/b=c/x; DnD; тренажёр; босс.
§2 Деление отрезка в отношении m:n: SVG-построение циркулем-линейкой
со слайдерами m,n=1-6, анимация с лучом и параллельной через Pm;
калькулятор AB,m,n→AC,CB; 4-шаговое доказательство формулы координат;
тренажёр; босс.
§3 Определение подобных треугольников: SVG два треугольника со слайдером
k=0.5-3.0, второй масштабируется коэффициентом подобия, стороны подписаны;
калькулятор a,b,c,k→a',b',c'; DnD подобные/неподобные пары; тренажёр;
mini-quiz из 4 теоретических вопросов; босс.
GLOSSARY: +пропорциональность.
File: 429 → 1557 LOC.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>