Commit Graph

447 Commits

Author SHA1 Message Date
Maxim Dolgolyov 27a67d0866 feat(phys11 ch3): Wave 6 — §18-§20 + phys-fx SphericalMirror/RefractionLab/PrismSpectrum
- phys-fx.js: PHYS.SphericalMirror (вогнутые/выпуклые с формулой и 3 лучами), PHYS.RefractionLab (закон Снелла + ПВО), PHYS.PrismSpectrum (дисперсия, 7 цветов через модель Коши)
- §18: сферические зеркала, формула 1/d + 1/f = 1/F, увеличение Γ = -f/d, построение
- §19: показатель преломления n=c/v, закон Снелла, полное внутр. отражение
- §20: призма + дисперсия, плоскопараллельная пластинка, оптоволокно
- 6 квизов (I5-I7 CALC/TH) + 3 босса (b5-b7)
- §21-§23 + Final остаются заглушками для W7
2026-05-29 18:41:51 +03:00
Maxim Dolgolyov a5ffc624cf feat(phys10 ch6 wave2 + final): §36 «Газы» + §37 «Полупроводники» + Финал Главы 6 2026-05-29 18:41:39 +03:00
Maxim Dolgolyov e4801dcc2f feat(phys11 ch3): Wave 5 — Глава 3 «Оптика» §14-§17 + phys-fx TwoSlit/DiffractionGrating/FlatMirror
- phys-fx.js: PHYS.TwoSlit (опыт Юнга), PHYS.DiffractionGrating (с радужным спектром), PHYS.FlatMirror
- ch3 §14: Электромагнитная природа света + скорость света
- ch3 §15: Интерференция (опыт Юнга)
- ch3 §16: Дифракция света + дифракционная решётка
- ch3 §17: Отражение света + плоское зеркало
- 8 квизов (I1_CALC/NAT, I2_CALC/TH, I3_CALC/TH, I4_CALC/IMG)
- 4 босса (b1-b4) для §14-§17
- §18-§23 + Final — заглушки для W6/W7
2026-05-29 18:35:08 +03:00
Maxim Dolgolyov bed085ac98 feat(phys10 ch6 wave1): §34 «Ток в металлах» + §35 «Электролиты»
§34 «Электрический ток в металлах. Сверхпроводимость»:
- 3 makeCard: природа тока, R(t) для металлов, сверхпроводимость
- IV1: симуляция дрейфа электронов в решётке (SVG, slider U)
- IV2: график R(t) = R_0(1 + alpha t), переключение материалов + скачок T_c
- IV3: квикфайр на носителей заряда в средах (6 вопросов)
- IV4: тренажёр 5 задач (rho L/S, R при разных T, T_c ртути)

§35 «Электрический ток в электролитах. Электролиз»:
- 3 makeCard: электролиты/ионы, законы Фарадея, применение
- IV1: симуляция электролиза (катионы → катоду, анионы → аноду)
- IV2: калькулятор массы m = MIt/(Fn) для Cu/Ag/Al/Fe/H
- IV3: квикфайр направления ионов (6 вопросов, 2 кнопки)
- IV4: тренажёр 5 задач (расчёт m для Cu/Ag, F = 96500)
2026-05-29 18:32:53 +03:00
Maxim Dolgolyov e192feefcc feat(phys11 W4): Глава 2 §10-§13 + Финал главы 2
§10 Производство и передача электроэнергии:
- ТЭС/ГЭС/АЭС; формула потерь P=I²R
- Идея высоковольтных ЛЭП: чтобы уменьшить потери, повышают U
- Магистральные ЛЭП до 750 кВ → 220 В у потребителя
- 5 расчётов (включая повышение U в k раз → потери /k²)
- Босс §10: 5 этапов, +70 XP

§11 Экологические проблемы:
- ВИЭ: ВЭС, СЭС, ГеоТЭС, приливные, биогаз
- Достоинства (без CO₂) и недостатки (погода, площадь)
- 6+5 квизов на типы и плюсы/минусы
- Босс §11: 5 этапов, +70 XP

§12 ЭМ волны. Шкала ЭМ волн:
- ЭМ волна как поперечная, c = 1/√(ε₀μ₀) = 3·10⁸ м/с
- Inline SVG-шкала: радио/СВЧ/ИК/видимый/УФ/рентген/γ
  с радужным градиентом для видимого света
- 5 расчётов λ↔ν + 5 MC на диапазоны
- Босс §12: 5 этапов, +70 XP

§13 Действие ЭМ на живые организмы:
- Ионизирующее (>10 эВ: УФ-С, рентген, γ) vs неионизирующее
- Полезные применения и опасности
- Защита: экранирование (свинец), расстояние, время
- Босс §13: 5 этапов, +65 XP

Финал главы 2:
- 4 интегральных босса (LC+ток, трансф+ЛЭП, ЭМ волны, сборная)
- Celebration: ачивка phys11_ch2_master + 100 XP бонус

Файл 63 → 91 КБ. JS валидируется.
2026-05-29 18:25:30 +03:00
Maxim Dolgolyov d93d8b782e feat(phys10 ch5 wave4 + final): §33 «Самоиндукция» + Финал Главы 5 (7 боссов) 2026-05-29 18:24:57 +03:00
Maxim Dolgolyov 8c3e7ce7aa feat(phys10 ch5 wave3): §31 «Магнитный поток + ЭМИ» + §32 «Ленц + Фарадей» 2026-05-29 18:18:29 +03:00
Maxim Dolgolyov a09616450f feat(phys11 W3): Глава 2 §7-§9 + расширение phys-fx.js (LCcircuit, ACgen, Transformer)
phys-fx.js (+3 электротехнических компонента):
- PHYS.LCcircuit: колебательный контур со схемой C↔L, провода, стрелка тока,
  заряды на пластинах (меняют знак), энергетические столбцы W_C и W_L,
  формула T=2π√(LC) с актуальным значением
- PHYS.ACgen: генератор переменного тока — слева вращающаяся рамка в B,
  справа график U(t)=U₀sin(ωt) с историей
- PHYS.Transformer: схема трансформатора с сердечником, обмотки N₁, N₂,
  входное U₁, расчётное U₂, коэф. трансформации k, отметка повышающий/понижающий

physics_11_ch2.html (~63 КБ, violet-тема):
- 2-кол layout с col-side, hero violet-градиент
- psel-grid 8 карточек (§7-§13 + Финал); §7-§9 активны
- Watermarks: LC, ∿, ≡, , ⚙, λ, ☣, ★

§7 Колебательный контур. Формула Томсона:
- 3 теор. карточки (контур, формула Томсона, превращения энергии)
- Инт. 1: LCcircuit с ползунками L (1-100 мГн), C (0.1-10 мкФ)
- Инт. 2: расчёт T, ν (5 input)
- Инт. 3: аналогии и свойства (5 MC)
- Босс §7: 5 этапов, +70 XP

§8 Вынужденные ЭМ колеб. Переменный ток:
- 2 теор. карточки (генератор, действ. значения I₀/√2)
- Инт. 1: ACgen (вращ. рамка → синусоида) с ползунком ω
- Инт. 2: расчёт I/I₀, U/U₀ (5 input)
- Инт. 3: теория действующих значений (5 MC)
- Босс §8: 5 этапов, +70 XP

§9 Трансформатор:
- 2 теор. карточки (устройство, коэф. трансформации, I₁U₁=I₂U₂)
- Инт. 1: Transformer с ползунками N₁ (50-1000), N₂ (10-1000), U₁ (12-10000 В)
- Инт. 2: расчёт U₂, I₂, k (5 input)
- Инт. 3: повышающий/понижающий (5 MC)
- Босс §9: 5 этапов, +70 XP

§10-§13, Финал — stub-карточки 'в разработке (W4)'.

LocalStorage: physics11_ch2_*, общий physics11_xp
Server sync: /api/textbooks/physics-11-ch2/progress
2026-05-29 18:15:00 +03:00
Maxim Dolgolyov 7aa681b503 feat(phys10 ch5 wave2): §29 «Сила Ампера» + §30 «Сила Лоренца» + 3D-траектория 2026-05-29 18:11:18 +03:00
Maxim Dolgolyov 6087c814b3 feat(phys10 ch5 wave1): §27 «Магнитное поле тока» + §28 «Индукция» 2026-05-29 18:03:50 +03:00
Maxim Dolgolyov fb01e5aafb feat(phys11 W2): Глава 1 §4-§6 + Финал + ResonanceCurve/TransverseWave/LongitudinalWave
phys-fx.js (+3 компонента):
- PHYS.ResonanceCurve: график A(ω) при разных γ затухания, маркер ω₀ и текущей ω
- PHYS.TransverseWave: бегущая поперечная волна (струна) с красным маркером колеблющейся точки + скобка λ
- PHYS.LongitudinalWave: зоны сжатия/разрежения через 60 точек-молекул

physics_11_ch1.html (63→89 КБ):

§4 Резонанс:
- 2 теор. карточки (свобод./вынужд., резонанс ω≈ω₀, формула A(ω))
- Инт. 1: ResonanceCurve с ползунками γ и ω — видно как пик уменьшается с ростом затухания
- Инт. 2: верно/неверно (5)
- Инт. 3: что произойдёт (5, качели/мост Tacoma/солдатский шаг)
- Босс §4: 5 этапов, +70 XP

§5 Волны:
- 2 теор. карточки (определение, поперечные/продольные, λ=vT)
- Инт. 1: TransverseWave с 3 ползунками (A, λ, v) — красная точка показывает что частица колеблется на месте
- Инт. 2: LongitudinalWave (звук-аналог) с 2 ползунками
- Инт. 3: расчёт λ,v,T (5 input)
- Инт. 4: тип волны и свойства (5 MC)
- Босс §5: 5 этапов, +70 XP

§6 Звук:
- 2 теор. карточки (звук как продол. упруг. волна, диапазоны, громкость/высота/тембр)
- Инт. 1: LongitudinalWave (звуковая) с ползунками A, λ
- Инт. 2: расчёт λ звука в воздухе (5 input)
- Инт. 3: свойства звука (5 MC)
- Босс §6: 5 этапов, +65 XP

Финал главы 1:
- 4 интегральных босса (колебания, маятники+энергия, резонанс, волны+звук)
- Celebration: ачивка phys11_ch1_master + 100 XP бонус
- Сохранение в localStorage.physics11_achievements
2026-05-29 18:02:53 +03:00
Maxim Dolgolyov 2b13976610 feat(phys10 ch4 + final): §25 ЭДС + §26 закон Ома + Финал Главы 4 2026-05-29 17:56:38 +03:00
Maxim Dolgolyov f2a1c6e24d feat(phys11 W1): Глава 1 §1-§3 + расширение phys-fx.js (EnergyView)
phys-fx.js (+EnergyView):
- PHYS.EnergyView — график 3 кривых: W_к (красный), W_п (зелёный), W_мех=const (фиолетовый пунктир)
- Использует кинетическую/потенциальную энергию для гарм. колеб.: cos², sin², сумма = 1
- Легенда в правом верхнем углу

physics_11_ch1.html (~63 КБ):
Архитектура geom_10_r1 (geom11-стиль):
- 2-кол layout с col-side (XP card + cheat sheet + tip)
- Hero cyan-градиент + кнопка 'Начать §1'
- psel-grid: 6 параграфов + Финал; §1-§3 активны, §4-§6 и Финал locked
- sec секции с watermark (∿, маятник, E, ☰, ∿, муз. нота, ★)
- card теории + wg workshops + opt-btn кнопки

§1 Колебательное движение. Гарм. колебания:
- 3 теор. карточки (определение, T/ν/ω, гарм. колеб. x=Acos(ωt+φ₀))
- Инт. 1: Oscillogram с ползунками A, ω, φ (live-анимация)
- Инт. 2: Расчёт T,ν,ω (5 задач input)
- Инт. 3: Свойства колеб. (5 MC)
- Босс §1: 5 этапов, +65 XP

§2 Маятники:
- 2 теор. карточки (пружинный T=2π√(m/k), матем. T=2π√(l/g))
- Инт. 1: SpringMass + Pendulum side-by-side с 4 ползунками (m,k,l,g)
- Инт. 2: Расчёт T (5 input)
- Инт. 3: Как изменится T (5 MC)
- Босс §2: 5 этапов, +70 XP

§3 Превращения энергии:
- 2 теор. карточки (формулы W_к, W_п; закон сохранения W_мех=kA²/2)
- Инт. 1: EnergyView с ползунками A, ω (3 кривые в реал. времени)
- Инт. 2: Расчёт энергии (5 input)
- Инт. 3: Превращения энергии (5 MC)
- Босс §3: 5 этапов, +65 XP

§4-§6 и Финал — stub-карточки 'в разработке (W2)'.

LocalStorage: physics11_ch1_*, physics11_xp (общий со всем курсом)
Server sync: /api/textbooks/physics-11-ch1/progress
2026-05-29 17:52:47 +03:00
Maxim Dolgolyov f999ad550e feat(phys10 ch3 wave5 + final): §24 «Энергия конденсатора» + Финал Главы 3 (7 боссов) 2026-05-29 17:48:13 +03:00
Maxim Dolgolyov 22b95ed072 feat(phys11 W0): инфра — миграция БД, phys-fx.js, hub + 8 stub-глав
Миграция 031_physics_11_hub.sql:
- hub textbook 'physics-11' (cyan, sort 12, para_count 45)
- 8 children по главам: ch1 cyan, ch2 violet, ch3 amber, ch4 blue,
  ch5 pink, ch6 green, ch7 rose, ch8 indigo

frontend/js/phys-fx.js (~360 строк):
- Глобальный requestAnimationFrame-цикл (Ticker) с подписками
- util.subscribe/unsubscribe + IntersectionObserver-пауза невидимых
- util.svgFrame, util.axes, util.slider — общие хелперы
- PHYS.Oscillogram: гарм. колебания с амплитудой/частотой/фазой/затуханием
- PHYS.SpringMass: пружинный маятник (T=2π√(m/k)) с зигзаг-пружиной
- PHYS.Pendulum: математический маятник (T=2π√(l/g)) с дугой

frontend/textbooks/physics_11_hub.html:
- Header cyan-gradient + watermark ФИЗИКА
- 4-кол grid карточек глав (8 шт., responsive)
- Прогресс-бар курса + API /api/textbooks/physics-11/children

frontend/textbooks/physics_11_ch1..ch8.html:
- Stub-страницы по образцу geometry_10_r1..r4 (W0)
- Список параграфов с ключевыми формулами + 'Будет добавлено в волне WN'
- Каждая глава со своей темой (gradient, watermark, цветами)
- phys-fx.js подключён сразу (ready для W1+)

backend/scripts/gen_phys11_stubs.js — генератор для повторных сборок.
2026-05-29 17:42:36 +03:00
Maxim Dolgolyov 774b54afc8 feat(phys10 ch3 wave4): §22 «Напряжение» + §23 «Конденсаторы» 2026-05-29 17:41:19 +03:00
Maxim Dolgolyov a24c334730 docs(plans): убраны лабораторные работы из плана Физика 11
- Удалён physics_11_labs.html из списка файлов
- Удалена секция 'Лабораторный эксперимент' в хабе и wireframe
- Убрана волна W15 'physics_11_labs.html — 9 лабораторных работ' (W16 polish → W15)
- Обновлены счётчики: 10 файлов → 9, ~28 сессий → ~26, 16 волн → 15
- Из итогов убрана строка про 9 лабораторок
2026-05-29 17:35:51 +03:00
Maxim Dolgolyov dfc17ae717 feat(phys10 ch3 wave3): §20 «Линии поля» + §21 «Работа и потенциал» 2026-05-29 17:34:50 +03:00
Maxim Dolgolyov dc7ad11e52 docs(plans): добавлен большой план реализации Физика 11 (Жилко-Маркович-Сокольский 2021)
Самый большой план проекта:
- 8 глав, 45 параграфов
- Новая библиотека phys-fx.js (~1000 строк): осциллограммы, маятники,
  волны, LC-контуры, RayTracer (линзы/зеркала/призмы), фотоэффект,
  атом Бора, спектры, ядро, радиоактивный распад, цепная реакция
- 8 цветовых тем по главам (cyan/violet/amber/sky/yellow/emerald/red/indigo)
- ~92 босса, ~135 квизов, 9 ачивок (включая phys11_master)
- 9 лабораторных работ — отдельная страница
- 16 волн реализации (~28 сессий) — крупнейший курс проекта
- Стиль единый с geom11_ch1 / geom10_r1 (2-кол layout, psel-grid, wg)
- Глобальный RAF-таймер для экономии CPU при 5-10 симуляциях на странице
- IntersectionObserver для паузы невидимых симуляций
2026-05-29 17:32:27 +03:00
Maxim Dolgolyov de1dbea8aa feat(phys10 ch3 wave2): §18 «Поле» + §19 «Напряжённость и суперпозиция» 2026-05-29 17:27:35 +03:00
Maxim Dolgolyov 1611e4b461 feat(phys10 ch3 wave1): §16 «Заряд» + §17 «Закон Кулона» 2026-05-29 17:21:04 +03:00
Maxim Dolgolyov 07adcbd108 feat(phys10 ch2 wave3 + final): §15 «Цикл Карно» + Финал Главы 2 (5 боссов) 2026-05-29 17:13:22 +03:00
Maxim Dolgolyov f2398dd078 feat(phys10 ch2 wave2): §13 «Количество теплоты» + §14 «Первый закон ТД»
Наполнены параграфы §13 и §14 (build_p13, build_p14) — теория, формулы,
4 интерактива каждый.

§13:
- 3 теоретические карточки (Q=cmΔT, фазовые переходы, баланс)
- ИНТ1: универсальный калькулятор Q (4 режима: нагрев/плавл/исп/сгор)
- ИНТ2: SVG-график нагревания льда → воды → пара (4 сегмента)
- ИНТ3: DnD-сортер 6 явлений → 4 типа процессов
- ИНТ4: тренажёр 6 задач

§14:
- 3 теоретические карточки (формулировка, изопроцессы, адиабата)
- ИНТ1: визуализатор первого закона с бар-чартом Q, ΔU, A для 4 процессов
- ИНТ2: калькулятор Q = ΔU + A (3 режима поиска)
- ИНТ3: квикфайр 'что неизменно' (T/V/p/Q)
- ИНТ4: тренажёр 5 задач

Файл: 1537 → 2325 строк. KaTeX-делимитеры, renderMath, secNav, wireReadBtn.
2026-05-29 17:06:13 +03:00
Maxim Dolgolyov e1a694ed90 feat(phys10 ch2 wave1): §11 «Внутренняя энергия» + §12 «Работа в ТД» 2026-05-29 16:58:44 +03:00
Maxim Dolgolyov 5e9bafb20c feat(phys10 ch1 wave5 + final): §9 «Испарение» + §10 «Влажность» + Финал Главы 1 (7 боссов) 2026-05-29 16:51:43 +03:00
Maxim Dolgolyov c3d6af8757 fix(exam-prep): normalize LaTeX in dashboard preview text
Recent-attempts widget on /exam-prep/:examKey was showing raw LaTeX
like '\dfrac{7}{9}' because stripPreview only removed HTML tags.
Now it also converts common LaTeX to readable unicode (fractions →
a/b, \sqrt → √, \cdot → ·, comparisons → ≤≥≠, Greek letters, etc.)
before truncating.

KaTeX rendering would be overkill for a 100-char preview row; this
just makes the existing text legible.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 16:45:59 +03:00
Maxim Dolgolyov 4154e0b791 feat(phys10 ch1 wave4): §7 «Твёрдые тела» + §8 «Жидкости» 2026-05-29 16:42:20 +03:00
Maxim Dolgolyov 5356096349 fix(api): auto-stringify object bodies in LS.api (apiFetch)
LS.api was passing raw object bodies straight to fetch(), which coerces
them to '[object Object]' — the server then parsed empty JSON and 400'd
on missing fields. This silently broke every POST that uses LS.api
directly (EP.api.startMock, saveAttempt, mockAnswer, etc.).

LS.post already stringified, so most call sites worked. Now apiFetch
mirrors that behavior for plain objects, while FormData / Blob /
URLSearchParams / ArrayBuffer / strings still pass through unchanged.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 16:40:42 +03:00
Maxim Dolgolyov 2b653c4655 feat(phys10 ch1 wave3): §5 «Уравнение состояния» + §6 «Изопроцессы» (PV/VT/PT диаграммы) 2026-05-29 16:35:13 +03:00
Maxim Dolgolyov b0c024be76 feat(geom10 r4 viz): переделаны все 6 SVG-рисунков — больше деталей, цветовая кодировка
§11 ПДСК:
- Расширил сцену до 460×340, осей до 3.4 единиц
- Добавил тики 1/2/3 на каждой оси с цветными цифрами
- Точка M(2;1;3) показана с реальными координатами + пунктирные проекции на плоскость Oxy, оси Ox/Oy, ось Oz
- Маркер на проекции M в плоскости Oxy

§11 Расстояние:
- A(0;0;0), B(2;2;2) — простые координаты
- Прямоугольный параллелепипед-подсказка с цветными рёбрами:
  Δx=2 красное, Δy=2 зелёное, Δz=2 синее (с подписями)
- Бледные пунктирные рёбра остальной части коробки
- Жирная фиолетовая главная диагональ AB
- Маркер прямого угла в углу — иллюстрирует 3D-Пифагор

§12 Сложение:
- Параллелограмм-подсказка (стрелка b из O + пунктир B→C)
- Треугольник: a красный из O, b зелёный из конца a
- Сумма a+b — толстая фиолетовая диагональ
- Подпись 'правило треугольника'

§12 Базис:
- Толстые i (красный), j (зелёный), k (синий) — 3.4 ширина
- Вектор a = 2i + 1.5j + 1.5k показан как ломаная-разложение:
  2i (бледно-розовый) → 1.5j (бледно-зелёный) → 1.5k (бледно-синий)
- Итог — толстый фиолетовый с подписью разложения
- Цифры коэффициентов на каждом сегменте

§13 Скалярное произведение:
- Векторы a, b в плоскости z=0 (без лишней глубины)
- Линия проекции (b → точка проекции на a) — серый пунктир
- Отрезок |b|·cos φ — толстый оранжевый вдоль a (геометрический смысл!)
- Маркер прямого угла на проекции
- Угол φ амбер
- Подпись '|b|·cos φ' над отрезком

§14 Куб в координатах:
- Подсветка цветных осей (не серых) + тики '1'
- Координаты всех 8 вершин показаны как (x;y;z) рядом с буквами
- Главная диагональ AC₁ — толстый фиолетовый пунктир с подписью '|AC₁|=√3'
- Сцена расширена до 500×360
2026-05-29 16:27:47 +03:00
Maxim Dolgolyov 7acc606cc2 feat(phys10 ch1 wave2): §3 «Идеальный газ» + §4 «Температура» + симуляции 2026-05-29 16:25:24 +03:00
Maxim Dolgolyov 3116f9d815 feat(phys10 ch1 wave1): §1 «МКТ» + §2 «Количество вещества» + симуляция броуновского движения 2026-05-29 16:18:53 +03:00
Maxim Dolgolyov d387018ee5 feat(geom10 W14): r4 (Координаты и векторы) переписан в стиле geom11 — финал курса
Раздел 4 §11-§14 + Финал курса + МЕГА-АЧИВКА stereo10_master:
- §11 Координаты: 3 карточки + SVG ПДСК + SVG расстояния + 3 интерактива + Босс §11 (+70 XP)
- §12 Векторы: 3 карточки + SVG сложения + SVG базиса + 3 интерактива + Босс §12 (+70 XP)
- §13 Скаляр. произв.: 3 карточки + SVG + 3 интерактива + Босс §13 (+70 XP)
- §14 Применение: алгоритм + SVG куба в коорд. + 3 интерактива + Босс §14 (+80 XP)
- Финал: 4 интегр. босса + celebration → ачивка stereo10_r4_master + 120 XP

★ ГЛАВНАЯ МЕХАНИКА: если у пользователя есть все 4 ачивки разделов
(stereo10_r1_master + r2 + r3 + r4) — автоматически выдаётся МЕГА-АЧИВКА
stereo10_master + 200 XP супер-бонус. Если каких-то ачивок нет —
celebration показывает список недостающих разделов.

Архитектура geom11_ch1:
- 2-кол layout с sticky col-side (XP/cheat sheet)
- Hero с amber-фоном (#78350f→#d97706→#fcd34d)
- psel-grid тапы для переключения параграфов
- formula-plate для красивых формул
- KaTeX onload renderMathInElement

Тема: amber (--pri:#d97706, --pri2:#b45309)
LocalStorage: geometry10_r4_*, geometry10_achievements (общий)

ИТОГ: Геометрия 10 (5 файлов: hub + r1-r4) переписана в едином стиле geom11.
4 раздела, 14 параграфов, ~50 интерактивов, ~30 боссов, 5 ачивок.
2026-05-29 16:16:02 +03:00
Maxim Dolgolyov 573de62963 feat(phys10 phase0): skeleton + миграция + phys.js модуль (37 §, 6 глав)
- Миграция 030_physics_10_hub.sql: hub physics-10 + 6 ch (color amber, sort 11, 37 §)
- frontend/textbooks/physics_10_hub.html (hub, yellow/amber palette, 6 chapter cards, финал placeholder)
- 6 ch-файлов physics_10_ch{1..6}.html: skeleton с PARAS, sec-nodes, SIDEBARS, TIPS,
  STUB-builder'ами для всех 37 §§ + 6 финалов, POLISH CSS, ICONS, 2D-хелперы,
  подключения phys.js + g3d.js
- frontend/js/phys.js: новый модуль window.PHYS с 21 экспортом —
  drawArrow, fieldLinesPointCharge, chargeMark, magneticFieldGrid, molecule,
  createGasSim, batteryEMF, resistor, capacitorSymbol, ammeterSymbol,
  voltmeterSymbol, lightbulbSymbol, inductorSymbol, wire, CONST + 6 конвертеров единиц

Все ch следуют паттерну algebra_11_ch1.html (Wave 5). Авторы не указаны.
Phase 1+ — наполнение содержанием по учебнику «Физика 10» (Беларусь, 2019).

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-05-29 16:12:08 +03:00
Maxim Dolgolyov 663459a675 feat(geom10 W13): r3 (Перпендикулярность) переписан в стиле geom11
Раздел 3 §7-§10 + Финал в архитектуре geom11_ch1:
- 4 параграфа: §7 ⊥-прямая, §8 расстояния, §9 ТТП, §10 ⊥-плоскости
- 5 финальных боссов (vs 4 в r1/r2)
- 2-кол layout с sticky col-side (XP/cheat sheet)
- Hero с rose-фоном (#7f1d1d→#e11d48→#fda4af)
- psel-grid тапы для переключения параграфов
- KaTeX onload renderMathInElement

Контент:
- §7 ⊥-прямая: SVG определения + признака + 6 карточек + 3 интерактива + Босс §7 (+70 XP)
- §8 Расстояния: 4 типа SVG + детальный SVG + 4 карточки + 3 интерактива (вкл. куб с √2) + Босс §8 (+70 XP)
- §9 ТТП: SVG наклонной+проекции + SVG ТТП + 3 карточки + 3 интерактива + Босс §9 (+70 XP)
- §10 ⊥-плоскости: SVG двугранного угла + SVG признака + 4 карточки + 3 интерактива + Босс §10 (+75 XP)
- Финал: 5 боссов + celebration → ачивка stereo10_r3_master + 130 XP

Тема: rose (--pri:#e11d48, --pri2:#be123c)
LocalStorage: geometry10_r3_*
2026-05-29 16:08:46 +03:00
Maxim Dolgolyov d5bb907adc feat(geom10 W12): r2 (Параллельность) переписан в стиле geom11
Раздел 2 §4-§6 + Финал по архитектуре geom11_ch1:
- 2-кол layout с sticky col-side (XP/cheat sheet)
- Hero с emerald-фоном + кнопка 'Начать §4'
- psel-grid тапы для переключения параграфов
- sec секции с watermark, ленивая сборка через BUILDERS
- card теории + wg workshop боксы для тренажёров
- KaTeX onload renderMathInElement

Контент:
- §4 Прямые в пространстве: 4 теор. карточки + 3 SVG (пересек./парал./скрещ.) + куб с 3 типами пар + 3 интерактива + Босс §4 (+65 XP)
- §5 Прямая и плоскость: 3 карточки + 3 SVG (a⊂α, a∩α=M, a∥α) + признак SVG + 3 интерактива + Босс §5 (+65 XP)
- §6 Две плоскости: 3 карточки + 2 SVG (пересек./парал.) + признак SVG + 3 интерактива + Босс §6 (+65 XP)
- Финал: 4 интегральных босса + celebration → ачивка stereo10_r2_master + 100 XP

Тема: emerald (--pri:#059669, --pri2:#047857, gradient #064e3b → #059669 → #86efac)
LocalStorage: geometry10_r2_*
2026-05-29 16:01:13 +03:00
Maxim Dolgolyov 09a292eca6 feat(geom10 W11): r1 переписан в стиле geom11 — SPA с psel-tabs, hero, sidebar
Новая архитектура (повторяет geom11_ch1):
- 2-кол layout (.main + col-side sticky XP/cheat sheet)
- Hero с анимированным фоном + кнопка 'Начать §1' + прогресс
- .psel-grid карточки параграфов (тапы переключения)
- .sec секции с watermark, ленивая сборка через BUILDERS
- .card теории с цветными card-icon (theory/rule/algo/example)
- .wg workshop боксы для тренажёров
- .spoiler детали (раскрывающиеся блоки)
- KaTeX onload renderMathInElement (фикс race)

Сохранён весь контент:
- §1: 5 теоретических карточек + 3 интерактива + Босс §1 (+60 XP)
- §2: 3 карточки + 3 интерактива + Босс §2 (+65 XP)
- §3: 4 карточки + 4-шаговая анимация шестиугольного сечения + 3 интерактива + Босс §3 (+70 XP)
- Финал: 4 интегральных босса + celebration → ачивка stereo10_r1_master + 100 XP

Stereo3D через/js/stereo3d.js (синхронная загрузка)
LocalStorage: geometry10_r1_progress, geometry10_r1_achievements, geometry10_r1_quiz_*, geometry10_r1_boss-*
Server sync via /api/textbooks/geometry-10-r1/progress
2026-05-29 15:54:33 +03:00
Maxim Dolgolyov 4533ef14ed feat(geom10 W10): hub переписан в стиле geom11 — 4-кол grid + финал курса + шпаргалка
- KaTeX: onload-инициализация (фикс race с DOMContentLoaded)
- 4-кол grid карточек разделов (mobile/tablet/desktop responsive)
- Цвета карточек: r1 blue, r2 emerald, r3 rose, r4 amber (соответствуют разделам)
- Watermarks: △ ∥ ⊥ →
- Финал курса (аккордеон):
  - Шпаргалка курса: 4 карточки с формулами по разделам (Эйлер, признаки парал./перп., ТТП, расстояние, скаляр.)
  - 9 интегрированных боссов с подсказками + tolerance
  - Master ачивка stereo10_course_master + 100 XP
  - CTA при прохождении
- Прогресс: TOTAL=14, обновлены CH_PARA/CH_IDX
- localStorage keys: geometry10_course_master, geometry10_course_bosses, geometry10_xp
2026-05-29 15:45:22 +03:00
Maxim Dolgolyov 3869cebe95 feat(geom10 W9): Финал Раздела 4 + МЕГА-АЧИВКА stereo10_master (Геометрия 10 пройдена!)
Финал R4:
- Босс 1 Координаты и расстояния (4 этапа, +30 XP)
- Босс 2 Векторы (4 этапа, +30 XP)
- Босс 3 Скалярное произведение (4 этапа, +35 XP)
- Босс 4 Сборная (5 этапов, +55 XP — диагональ куба √3, 2√3; cos углов диагоналей)
- Celebration: ачивка stereo10_r4_master + 120 XP бонус

ГЛАВНАЯ МЕХАНИКА: если в localStorage есть все 4 ачивки разделов
(stereo10_r1_master + stereo10_r2_master + stereo10_r3_master + stereo10_r4_master)
автоматически выдаётся МЕГА-АЧИВКА stereo10_master + 200 XP супер-бонус.
Если каких-то ачивок нет — celebration показывает список недостающих разделов.

sec-nav: финал-таб разблокирован, refreshTabs учитывает {f1..f4}.

ИТОГ: Геометрия 10 полностью завершена.
- 4 раздела, 14 параграфов
- ~140 интерактивов (квизы MC + input + tnp/слайдеры)
- 4 финала, 20+ боссов
- 5 ачивок: r1..r4 + master
- stereo3d.js (~650 строк) для всех 3D-рисунков
2026-05-29 15:36:58 +03:00
Maxim Dolgolyov c2a2497e49 feat(geom10 W8): Раздел 4 §11-§14 — Координаты и векторы (полная реализация)
§11 Координаты в пространстве:
- SVG ПДСК: 3 цветные оси + точка M(2;3;4) с пунктирными проекциями
- SVG расстояния: параллелепипед на разностях координат + диагональ AB
- 6 теоретических карточек (ПДСК, координаты, пл-сти, расстояние, середина, особые точки)
- 3 тренажёра: где точка (6), расстояние (5, с √2/√3), середина (5)
- Босс §11: 5 этапов, +70 XP

§12 Векторы:
- SVG сложения: параллелограмм + правило треугольника (a, b, a+b)
- SVG базиса: i, j, k единичные векторы вдоль осей + вектор a с проекциями
- 6 теоретических карточек (определение, равенство, сложение, k·a, координаты, коллинеарность)
- 3 тренажёра: действия (5), AB координаты (5), коллинеарность (5)
- Босс §12: 5 этапов, +70 XP

§13 Скалярное произведение:
- SVG: 2 вектора a, b из O + угол φ между ними
- 6 теоретических карточек (определение, координатная формула, свойства, ⊥, угол, знак)
- 3 тренажёра: вычисление (5), перпендикулярность (5), cos угла (4)
- Босс §13: 5 этапов, +70 XP

§14 Применение векторно-координатного метода:
- SVG: куб ABCDA1B1C1D1 в координатах с ребром 1
- Алгоритм решения на formula-plate
- 6 теоретических карточек (уравнения пл-сти, угол прямых/прямой+пл-сть/пл-стей, расстояние, когда применять)
- 3 тренажёра: куб в координатах (5), угол через скаляр (4), выбор метода (5)
- Босс §14: 6 этапов, +80 XP

normalizeAns: общая утилита (≡ r3) + поддержка координат через ; или ,
Финал R4 — stub до W9 (4 босса + ачивка stereo10_master = главная награда курса).
2026-05-29 15:33:58 +03:00
Maxim Dolgolyov 22675fd48e chore: убраны упоминания авторов из всех учебников
Материал учебников теперь полностью наш (LearnSpace), оригинальные
авторы (Арефьева, Латотин, Казаков и др.) убраны из:
- поля textbooks.author в БД (миграция 029);
- footer'ов hub-файлов (9 файлов).

Содержание теории и интерактивов не затронуто.
2026-05-29 15:27:21 +03:00
Maxim Dolgolyov 7f045737d3 feat(geom10 W7): Финал Раздела 3 — 5 боссов + ачивка stereo10_r3_master
- Босс 1 Прямая ⊥ плоскость (4 этапа, +30 XP)
- Босс 2 Расстояния (4 этапа, +30 XP)
- Босс 3 Угол + ТТП (4 этапа, +35 XP, поддержка √2/2, 1/√3 и т.п.)
- Босс 4 ⊥-плоскости (4 этапа, +30 XP)
- Босс 5 Сборная (5 этапов, +45 XP — диагональ куба √3, sin угла 1/√3)
- Celebration: ачивка stereo10_r3_master + 130 XP бонус
- sec-nav: финал-таб разблокирован, refreshTabs учитывает {f1..f5}
- Состояние: STATE.bosses{f1..f5} + geometry10_achievements в localStorage
2026-05-29 15:26:04 +03:00
Maxim Dolgolyov cf4507a4d6 feat(geom10 W6): Раздел 3 §9 + §10 — угол с плоскостью, ТТП, перпендикулярность плоскостей
§9 Угол между прямой и плоскостью:
- SVG определения: A, H, B + перпендикуляр AH (красный), наклонная AB (синий), проекция HB (зелёный), угол φ
- SVG ТТП: AH⊥α, BC⊂α, HB⊥BC ⇒ AB⊥BC (прямая теорема)
- 6 теоретических карточек (определения, угол, прямая+обратная ТТП, равные наклонные, формулы tg/sin/cos, ТТП в кубе)
- 3 тренажёра: элементы (6), углы в кубе (5, с поддержкой √2/2, sqrt(2)/2, 0.707), применима ли ТТП (5)
- Босс §9: 5 этапов, +70 XP

§10 Перпендикулярность плоскостей:
- SVG двугранного угла: 2 полуплоскости с общим ребром l, линейный угол φ между MP⊥l и MQ⊥l
- SVG признака α⊥β: α содержит l⊥β
- 6 теоретических карточек (двугранный угол, линейный угол, ⊥-плоскости, признак, свойство, ⊥ в кубе)
- 3 тренажёра: двугранный угол (5), признак ⊥ плоскостей (5), ⊥ грани куба (5)
- Босс §10: 6 этапов, +75 XP

Финал R3 остаётся stub до W7.
2026-05-29 15:20:40 +03:00
Maxim Dolgolyov f2933a6186 fix(geom11 ch4): сырой KaTeX в <option> §9 → unicode-текст (a, b, α°, d₁, d₂) 2026-05-29 15:18:32 +03:00
Maxim Dolgolyov e6a1a697bd feat(geom10 W5): Раздел 3 §7 + §8 — Перпендикулярность и расстояния
§7 Перпендикулярность прямой и плоскости:
- SVG определения: плоскость α + вертикальная l + 4 прямые в α с маркерами 90°
- SVG признака: l + m + n пересекающиеся в O, прямые углы
- 6 теоретических карточек (определение, признак, свойства, параллельность+⊥, существование, куб)
- 3 тренажёра: перпендикулярна ли (6), применение признака (5), ⊥ в кубе (5)
- Босс §7: 5 этапов, +70 XP

§8 Расстояния:
- 4 случая side-by-side (точка→плоскость / прямая∥плоскость / парал. плоскости / скрещ. прямые)
- Детальный SVG: точка A над плоскостью + перпендикуляр AO + наклонная AB
- 6 теоретических карточек
- 3 тренажёра: расстояния в кубе (6, с поддержкой √2 / sqrt(2) / корень), какой тип задачи (5), верно/неверно (5)
- Босс §8: 5 этапов, +70 XP
- normalizeAns: общая утилита для ввода √2, sqrt(2), корень2, 1.41, 1.414

§9, §10, Финал — stub до W6/W7.
2026-05-29 15:14:50 +03:00
Maxim Dolgolyov 169a5130ba feat(geom11 phase5 final): итоговая шпаргалка + 9 боссов + ачивка «Магистр геометрии 11»
Финал курса Геометрия 11 заменил placeholder-аккордеон полноценным
контентом по образцу algebra_11_hub.html.

Контент:
- 4 mini-карточки шпаргалки (Раздел 1 Призма+Цилиндр; Раздел 2
  Пирамида+Конус; Раздел 3 Сфера+Шар+Многогранники; Раздел 4
  Повторение) с ключевыми формулами в KaTeX.
- 9 интегрированных боссов: Призма+Цилиндр (3.46), Апофема пирамиды
  (5), Развёртка конуса (120°), Шар в кубе (113.04), Уравнение сферы
  (R=3), Октаэдр (8 граней), 3D-вектор (длина 3), Диагональ
  параллелепипеда (3), Магистр стереометрии — тетраэдр в кубе (8.49).
- Lazy-render при первом раскрытии (renderFinBosses).
- При 9/9 → ачивка geom11_master «Магистр геометрии 11», +100 XP,
  confetti, подсветка ach-strip, кнопка «К каталогу учебников».
- localStorage geometry11_course_bosses сохраняет прогресс боссов.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-05-29 15:14:04 +03:00
Maxim Dolgolyov 87a057f5b9 feat(geom10 W4): Финал Раздела 2 — 4 босса + ачивка stereo10_r2_master
- Босс 1 Прямые в пространстве (4 этапа, +35 XP)
- Босс 2 Прямая и плоскость (4 этапа, +35 XP)
- Босс 3 Две плоскости (4 этапа, +35 XP)
- Босс 4 Сборная (5 этапов, +45 XP)
- Celebration: ачивка stereo10_r2_master + 100 XP бонус
- sec-nav: финал-таб разблокирован, отмечается при победе над всеми 4 боссами
- Состояние: STATE.bosses{f1..f4} + geometry10_achievements в localStorage
2026-05-29 15:08:52 +03:00
Maxim Dolgolyov eb19ce3cf9 fix(auth): include avatar_url in login response + lazy refresh stale cache
Login was only returning {id, email, name, role}, so localStorage.ls_user
never had avatar_url for sessions started before today — and the sidebar
fell back to initials forever. Fixes:

  • login response now includes avatar_url
  • renderNavAvatar detects 'undefined' (cache predates the field) vs
    'null' (verified absent) and fires a one-shot /auth/me refresh in
    the background, then re-paints. Self-healing for existing sessions
    without forcing re-login.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 15:07:16 +03:00
Maxim Dolgolyov 4423a72635 feat(geom11 ch4 wave3 + final): §11 «Построения» + Финал Раздела 4 2026-05-29 15:06:29 +03:00
Maxim Dolgolyov 46d373752c fix(profile): visual frame previews in shop + sidebar avatar sync
Shop items of type 'frame' now render a real avatar-sized preview with
the frame's CSS applied (instead of a generic lucide icon) so buyers
see exactly what they're paying for. Title items get a tag-shaped
preview in their color. The avatar-frames section above the shop also
shows the user's actual avatar inside the frame circles, not 'LS' text.

Sidebar nav-avatar now:
  • renders the uploaded avatar_url instead of always showing initials
    (LS.initPage + new LS.refreshNavAvatar helper)
  • picks up frame CSS on every page via applyCosmetics — previously
    only dashboard.html applied it
  • repaints immediately after picking/deleting an avatar preset
    (avPickPreset / avDelete now call LS.setUser + LS.refreshNavAvatar)

Backend getMyActive resolves avatar_frame to {id, css} for both
gamification frames ('fire', 'crown', ...) and shop-purchased frames
('shop_<id>'), so the client doesn't need a second round-trip to
look up the CSS.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 15:04:27 +03:00