9 Commits

Author SHA1 Message Date
Maxim Dolgolyov 6ae7e1877e fix(phys8): восстановлен <!doctype>, JS-блок интерактивов возвращён в <script> (ch1-3) 2026-06-01 10:53:42 +03:00
Maxim Dolgolyov ca67ae6e0d feat(phys8 ch3): Phase 3 — Световые явления (визуал + 9 IV-6)
Hero: spectrum-drift градиент (18s), солнце SVG-watermark
(rotate-анимация 40s), live-meter длины волны (400/470/550/600/700 нм
с цветами цикла).

9 section watermarks: лампа, тень, угол, зеркало, парабола,
рефракция, линза, призма, глаз.

9 IV-6 интерактивов:
§32 Источники — кнопки 'Точечный/Протяжённый' с динамической
тенью (точечный — чёткая, протяжённый — с полутенью).
§33 Тени — drag-источника по X, размер тени пересчитывается
проективно.
§34 Закон отражения — scrubber угла, лучи + нормаль.
§35 Плоское зеркало — drag-d объекта, мнимое изображение за
зеркалом на том же расстоянии (штриховая стрелка).
§36 Сферическое зеркало — drag-d, формула 1/v+1/d=1/F,
изображение с правильным знаком/размером.
§37 Преломление — scrubber угла, закон Снеллиуса (n₁=1, n₂=1.33).
§38 Линза — 3 главных луча от объекта, формула v=dF/(d-F),
изображение по принципу геометрической оптики.
§39 Дисперсия — призма с разложением белого света на 7 цветов
видимого спектра.
§40 Глаз — кнопки 'Норма/Близорукость/Дальнозоркость' с
fokus-точкой и корректирующей линзой (рассеив/собир).
2026-05-30 10:26:17 +03:00
Maxim Dolgolyov 77e4dffb43 feat(phys8): Phase 0 redesign foundation — CSS + JS infrastructure
Закладывает уникальный визуальный язык и engine'ы для редизайна Физики 8.

CSS:
- phys8-design-system.css (12 КБ): 3 темы (thermal/electric/spectrum),
  тематические hero-палитры, watermarks, animations (thermal-shift,
  electric-pulse, spectrum-drift, wm-breathe/flicker/rotate, noise overlay),
  staggered fade-in для виджетов, soft elevation на карточках,
  monospace для физ. величин, topic-aware progress bars,
  mobile responsive (≤768px), prefers-reduced-motion.
- phys8-interactives.css (10 КБ): .p8-draggable + .p8-droptarget с
  hover-effects, .p8-palette (для circuit-builder), .p8-scrubber,
  .p8-readout табло, .p8-tooltip, .p8-sandbox canvas wrapper,
  .p8-thermometer + .p8-compass-needle SVG-композиции, glow-utility.

JS:
- phys8-anim.js (6 КБ): easing-функции (quad/cubic/expo/back/elastic/
  bounce/spring), tween-engine с onUpdate/onComplete, raf-wrapper,
  oscillate, stagger, onVisible (IntersectionObserver). Экспорт P8Anim.
- phys8-drag.js (12 КБ): универсальный drag-engine. P8Drag.attach()
  для DOM/SVG, P8Drag.attachCanvas() для логических объектов с
  hit-test, P8Drag.attachPalette() для drag-from-palette-to-drop,
  constraints (lockX/Y, bounds, snap-to-grid), touch + mouse + pointer.
- phys8-helpers.js (18 КБ): тематические хелперы. P8Helpers.thermal
  (tempColor 0-1, heatFlowArrow, molecule, thermometerSVG,
  convectionCellParticles), .em (chargeSVG, circuitComponent для
  battery/resistor/lamp/ammeter/voltmeter/switch, fieldLineFrom),
  .optics (rayLine, lensSVG converging/diverging, mirrorPlane),
  .svg utils (el, create, linearGradient, radialGradient,
  gradientArrow, labeledText).

Линковка (redesign_p8_phase0.cjs):
- 2 CSS-link после katex CDN
- 3 JS-link после phys.js/xp.js
- body class p8-theme-thermal/electric/spectrum на ch1/ch2/ch3
- hub и lab — без темы (нейтральный пурпурный brand)
2026-05-30 09:55:00 +03:00
Maxim Dolgolyov 9d5a2959e1 fix(textbooks): кнопка «Шпаргалка» не открывала контент на desktop
На десктопе (>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.
2026-05-30 09:51:04 +03:00
Maxim Dolgolyov 15fbd73847 feat(p8 ch2-3): IV-5 расчётные задачи для всех MCQ-only параграфов
Завершение Physics 8 — IV-5 добавлен в оставшиеся 13 параграфов:

Ch2 (Электромагнитные явления, 11 параграфов):
- §12 Электризация: 5 (выравнивание зарядов, n=q/e)
- §13 Проводники/диэлектрики: 5 (плотность носителей, I=q/t)
- §14 Электростатическая индукция: 5 (заземление, угол отклонения)
- §16 Строение атома: 5 (q=ne, заряд ядра)
- §17 Электрическое поле: 5 (E=F/q, F=qE, A=qEd, плотность линий)
- §19 Источники тока: 5 (ЭДС = A/q, A = εIt)
- §21 Электрическая цепь: 5 (I = q/t, числ. электронов)
- §28 Постоянные магниты: 5 (полюса, северный/южный)
- §29 Магнитное поле тока: 5 (F = BIL, B ∝ I)
- §30 Опыт Эрстеда: 5 (правило буравчика, год открытия)
- §31 Электромагнит: 5 (B ∝ N, B ∝ I, сердечник)

Ch3 (Световые явления, 2 параграфа):
- §32 Источники света: 5 (c=3·10^8, время до Луны/Солнца)
- §39 Дисперсия/глаз: 5 (спектр, длины волн, D=1/F)

Итого: 65 новых задач с автопроверкой, подсказкой-решением (KaTeX),
+20 XP. Все Phys 8 параграфы теперь имеют числовой тренажёр.
2026-05-30 09:36:22 +03:00
Maxim Dolgolyov 1f17fb40dc fix(textbooks): извлечён общий widget CSS — phys-textbook-widgets.css
Жалоба пользователя по Физике 8 (но проблема общая для Phys 8 и Phys 9):
страницы глав используют классы .wg/.dnd-pool/.dnd-chip/.btn/.score-display/
.feedback/.actions/.sliders/.spoiler/.drop-box в HTML-разметке, но CSS-правила
для них живут только в physics_10_ch1.html. Из-за этого карточки-задания,
chip'ы drag-and-drop, кнопки и feedback-блоки в Phys 8 и Phys 9 рендерились
без стилей (как обычный текст).

- extract_widget_css.cjs: вытягивает CSS-блок (.btn..pre-.col-side) из
  physics_10_ch1.html в frontend/css/phys-textbook-widgets.css (6.4 КБ)
- Подключает <link> в 11 файлов: physics_8_ch1/ch2/ch3/hub/lab,
  physics_9_ch1..ch5, physics_9_hub
- migrate_phys9_content.js теперь инжектит ссылку на widget CSS при будущих
  миграциях (рядом с FA CDN)
2026-05-30 09:16:24 +03:00
Maxim Dolgolyov a6bc034bdb feat(phys8 ch3): Phase 5 Wave 3+4 — §36-40 + Финал — Глава 3 завершена
§36 Преломление света:
- Закон Снеллиуса с интерактивным OPTICS.refractRay
- 4 материала (воздух/вода/стекло/алмаз)
- Полное внутреннее отражение
- 5 численных задач

§37 Линзы. Оптическая сила:
- OPTICS.thinLens — собирающая и рассеивающая
- D = 1/F, дптр
- 5 задач (включая F=17 мм для глаза)

§38 Построение изображений (ГЛАВНЫЙ ВИЗУАЛ ОПТИКИ):
- Конструктор изображения через OPTICS.buildLensImage
- slider F и d, увеличение, тип изображения
- 5 типов (d>2F/2F/F<d<2F/d=F/d<F)
- DnD устройств (фотоаппарат/проектор/лупа)
- 5 задач на формулу тонкой линзы

§39 Глаз как оптическая система:
- OPTICS.eyeDiagram с slider'ом аккомодации
- 5 элементов глаза, MCQ
- DnD оптические vs нервные части

§40 Дефекты зрения. Очки:
- Визуализация близоруков. и дальнозоркости с очками
- OPTICS.thinLens исправляет фокус
- 5 задач (включая «знак D»)

ФИНАЛ ГЛАВЫ 3:
- Шпаргалка из 10 формул
- 7 интегрированных боссов: c, отражение, преломление, D, тонкая
  линза, очки, магистр света
- Ачивка light_master (+50 XP)

Глава 3 «Световые явления» (§§32-40, 9 параграфов + финал) закончена.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 08:58:32 +03:00
Maxim Dolgolyov 0c6618fb38 feat(phys8 ch3): Phase 5 Wave 1+2 — §32 источники + §33 тени + §34 отражение + §35 зеркало
§32 Источники света:
- 3 теории: естеств./искусств., тепловые/люминесц., точечные
- IV-1: 8 раундов «светит/отражает»
- IV-2: 6 раундов «тепловой/люминесцентный»
- IV-3: DnD 8 источников на 2 категории
- IV-4: 6 MCQ

§33 Скорость света и распространение:
- 3 теории: c, прямолинейность, тень/полутень
- IV-1: ГЛАВНЫЙ ВИЗУАЛ — динамическая тень/полутень: slider'ы
  размера источника (0=точечный → 40=протяжённый) и расстояния,
  рисуются зоны тени и полутени на экране
- IV-2: калькулятор времени пролёта света
- IV-3: DnD 8 утверждений правда/ложь
- IV-4: 5 числовых задач (Солнце, Луна, скорость vs звук)

§34 Отражение света:
- 3 теории: закон отражения, зеркальное/диффузное, примеры
- IV-1: динамическая визуализация через OPTICS.reflectRay,
  slider α 0-80°
- IV-2: 6 раундов «зеркало/диффузное»
- IV-3: DnD 8 поверхностей
- IV-4: 5 задач (включая поворот зеркала)

§35 Плоское зеркало:
- 3 теории: свойства изображения, построение, зеркальные надписи
- IV-1: построение мнимого изображения через OPTICS.mirrorPlane
  + OPTICS.lightObject, slider расстояния
- IV-2: 6 True/False
- IV-3: DnD свойств изображения
- IV-4: 5 задач (включая 2 зеркала под 90°)

§36-40 + финал — stub-заглушки, будут реализованы в Wave 3-4.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 08:52:26 +03:00
Maxim Dolgolyov 33a91900a8 feat(phys8): Phase 0 — skeleton hub + 3 chapters + lab + phys.js/optics.js
Полная инфраструктура курса «Физика 8» (Исаченкова, 2018):
- physics_8_hub.html: палитра violet/indigo, 3 главы + ЛР + финал курса
  с 10 интегрированными боссами и ачивкой «Магистр физики 8» (+150 XP)
- physics_8_ch1.html (Тепловые, §§1–11): красный акцент
- physics_8_ch2.html (Электромагнитные, §§12–31): янтарный акцент
- physics_8_ch3.html (Световые, §§32–40): голубой акцент
- physics_8_lab.html (7 ЛР): зелёный акцент
- Расширение phys.js: tempColor, thermometer, calorimeter, createHeatBar,
  phaseGraphTT, Rseries, Rparallel
- Новый модуль optics.js: ray, refractRay, reflectRay, mirrorPlane,
  mirrorSpherical, thinLens, buildLensImage, goldenRays, eyeDiagram,
  lightObject, shadowTriangle
- Миграция 037: replace legacy children (thermal/electro/optics) на
  physics-8-ch1/ch2/ch3 + physics-8-lab; обновлён hub до 47 пунктов

BUILDERS всех § рендерят stub с указанием Phase/Wave из PLAN_PHYSICS_8.md.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-29 22:41:37 +03:00