feat(chemistry7): визуал V3 (Глава 3) — пузырьки, морфинг цвета, индикаторы

Подключён chem7_anim.js в Главу 3.
- §21 ряд активности (звёздный): клик металла левее H₂ → анимация пузырьков
  H₂ (bubbleField); правее (Cu, Ag) — «реакция не идёт»;
- §19 восстановление CuO: colorBlock плавно чёрный→красный (медь); горение —
  пламя водорода;
- §20/ЛО3 индикаторы: блок плавно меняет цвет на цвет индикатора в кислоте.

Тесты chem7: 16/16; полный прогон 162/165 (3 — baseline Auth).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-05-30 19:51:27 +03:00
parent e8cb95be55
commit 33f968bff9
3 changed files with 31 additions and 10 deletions
+5
View File
@@ -194,8 +194,10 @@ test('ch3 Волна 1: §18 + §19 + §20 + ЛО3 монтируются', asyn
assert.ok(doc.querySelector('#p18-card svg'), 'паспорт водорода §18');
doc.defaultView.goTo('p19'); await wait(100);
assert.ok(doc.querySelector('#p19-rx #p19-pick'), 'реакции водорода §19');
assert.ok(doc.querySelector('#p19-stage div'), 'анимация реакции §19');
doc.defaultView.goTo('p20'); await wait(100);
assert.ok(doc.querySelector('#p20-ind #p20-ind-ind'), 'индикаторы §20');
assert.ok(doc.querySelector('#p20-ind-drop div'), 'анимация индикатора §20');
assert.ok(doc.querySelector('#p20-acids table'), 'таблица кислот §20');
doc.defaultView.goTo('lo3'); await wait(100);
assert.ok(doc.querySelector('#lo3-ind #lo3-ind-ind'), 'индикаторы ЛО3');
@@ -206,6 +208,9 @@ test('ch3 Волна 2: §21 + ЛО4 + §22 + ПР3 + финал главы мо
const { doc, errors } = await loadDom('chemistry_7_ch3.html');
doc.defaultView.goTo('p21'); await wait(100);
assert.ok(doc.querySelector('#p21-act .act-cell'), 'ряд активности §21');
// клик по Zn (левее H₂) → пузырьки H₂
doc.querySelector('#p21-act .act-cell[data-i="5"]').dispatchEvent(new doc.defaultView.Event('click', { bubbles: true })); await wait(40);
assert.ok(doc.querySelector('#p21-tube div'), 'пузырьки H₂ при реакции металла с кислотой §21');
doc.defaultView.goTo('lo4'); await wait(100);
assert.ok(doc.querySelector('#lo4-rx #lo4-go'), 'опыт металл+кислота ЛО4');
doc.defaultView.goTo('p22'); await wait(100);