${spec.heroH}
+${spec.heroP}
+diff --git a/backend/scripts/gen_geom9.js b/backend/scripts/gen_geom9.js
new file mode 100644
index 0000000..f20bf78
--- /dev/null
+++ b/backend/scripts/gen_geom9.js
@@ -0,0 +1,680 @@
+'use strict';
+const fs = require('fs');
+const path = require('path');
+
+const OUT_DIR = path.join(__dirname, '..', '..', 'frontend', 'textbooks');
+
+const SPECS = {
+ ch2: {
+ n: 2,
+ title: 'Окружности',
+ subtitle: 'Описанная · вписанная · четырёхугольники',
+ heroH: 'Вписанные и описанные окружности',
+ heroP: 'Здесь мы изучаем описанную и вписанную окружности треугольника, специальные формулы для прямоугольного треугольника $R = c/2$ и $r = (a+b-c)/2$, а также критерии вписанных и описанных четырёхугольников: $\\alpha + \\gamma = 180^\\circ$ и $a+c = b+d$.',
+ heroWm: '○',
+ headerWmName: 'ГЛАВА 2',
+ paras: [
+ { id: 'p7', num: '§ 7', name: 'Описанная и вписанная окружности треугольника', sub: 'центр $O$, радиус $R$, $r$', watermark: '○' },
+ { id: 'p8', num: '§ 8', name: 'Окружности прямоугольного треугольника', sub: '$R = c/2$, $r = (a+b-c)/2$', watermark: '⊥' },
+ { id: 'p9', num: '§ 9', name: 'Вписанные и описанные четырёхугольники', sub: '$\\alpha + \\gamma = 180^\\circ$', watermark: '◇' },
+ { id: 'final2', num: '★', name: 'Финал главы', sub: 'Итоги главы 2', final: true, watermark: '★' }
+ ],
+ palette: {
+ pri: '#059669', pri2: '#047857', priSoft: '#d1fae5',
+ acc: '#34d399', acc2: '#059669', accSoft: '#ecfdf5',
+ darkBg: '#08201b', darkCard: '#0a2b22', darkCardSoft: '#0d3329', darkText: '#d1fae5', darkMuted: '#7aa89a', darkBorder: '#1c463a',
+ hdrGrad: 'linear-gradient(110deg,#064e3b 0%,#059669 55%,#34d399 100%)',
+ hdrStroke: 'rgba(209,250,229,.12)',
+ hdrUnderline: 'rgba(209,250,229,.2)'
+ },
+ sidebars: {
+ p7: { rows: [['Описанная','через все вершины'],['Центр','пересечение серединных перпендикуляров'],['Вписанная','касается всех сторон'],['Центр_in','пересечение биссектрис']] },
+ p8: { rows: [['Описанная','$R = \\tfrac{c}{2}$ — половина гипотенузы'],['Центр','середина гипотенузы'],['Вписанная','$r = \\tfrac{a+b-c}{2}$']] },
+ p9: { rows: [['Вписанный','$\\alpha + \\gamma = 180^\\circ$'],['Описанный','$a+c = b+d$']] },
+ final2: { rows: [['§§7–9','теория главы 2'],['Дальше','глава 3 — теоремы синусов и косинусов']] }
+ },
+ tips: {
+ p7: 'Центр описанной окружности — точка пересечения серединных перпендикуляров. Центр вписанной — точка пересечения биссектрис.',
+ p8: 'В прямоугольном треугольнике гипотенуза — диаметр описанной окружности, отсюда $R = \\tfrac{c}{2}$.',
+ p9: 'Четырёхугольник вписан в окружность ⟺ суммы противоположных углов равны $180^\\circ$. Четырёхугольник описан ⟺ суммы противоположных сторон равны.',
+ final2: 'Главные результаты главы 2: формулы радиусов окружностей треугольника и критерии вписанных и описанных четырёхугольников.'
+ },
+ achLabels: {
+ start: 'Начало главы 2!',
+ p7_done: 'Описанная и вписанная окружности освоены!',
+ p8_done: 'Окружности прямоугольного треугольника освоены!',
+ p9_done: 'Вписанные и описанные четырёхугольники освоены!',
+ ch2_done: 'Глава 2 пройдена! Окружности — финал!'
+ }
+ },
+ ch3: {
+ n: 3,
+ title: 'Теоремы синусов и косинусов',
+ subtitle: 'Произвольный треугольник · формула Герона',
+ heroH: 'Теоремы синусов и косинусов',
+ heroP: 'Здесь мы выводим теорему синусов $\\tfrac{a}{\\sin A} = 2R$, теорему косинусов $a^2 = b^2 + c^2 - 2bc\\cos A$ и формулу Герона $S = \\sqrt{p(p-a)(p-b)(p-c)}$. С их помощью решается любой треугольник.',
+ heroWm: '∠',
+ headerWmName: 'ГЛАВА 3',
+ paras: [
+ { id: 'p10', num: '§ 10', name: 'Теорема синусов', sub: '$\\tfrac{a}{\\sin A} = 2R$', watermark: 'sin' },
+ { id: 'p11', num: '§ 11', name: 'Теорема косинусов', sub: '$a^2 = b^2 + c^2 - 2bc\\cos A$', watermark: 'cos' },
+ { id: 'p12', num: '§ 12', name: 'Формула Герона. Решение треугольников', sub: '$S = \\sqrt{p(p-a)(p-b)(p-c)}$', watermark: '√' },
+ { id: 'final3', num: '★', name: 'Финал главы', sub: 'Итоги главы 3', final: true, watermark: '★' }
+ ],
+ palette: {
+ pri: '#7c3aed', pri2: '#6d28d9', priSoft: '#ede9fe',
+ acc: '#a78bfa', acc2: '#7c3aed', accSoft: '#f5f3ff',
+ darkBg: '#160b29', darkCard: '#1d1238', darkCardSoft: '#241646', darkText: '#ede9fe', darkMuted: '#a08fbf', darkBorder: '#352160',
+ hdrGrad: 'linear-gradient(110deg,#3b0764 0%,#7c3aed 55%,#a78bfa 100%)',
+ hdrStroke: 'rgba(237,233,254,.12)',
+ hdrUnderline: 'rgba(237,233,254,.2)'
+ },
+ sidebars: {
+ p10: { rows: [['Теорема','$\\tfrac{a}{\\sin A} = \\tfrac{b}{\\sin B} = \\tfrac{c}{\\sin C} = 2R$'],['Применение','две стороны и угол напротив']] },
+ p11: { rows: [['Теорема','$a^2 = b^2 + c^2 - 2bc\\cos A$'],['Применение','три стороны или две стороны и угол']] },
+ p12: { rows: [['Полупериметр','$p = \\tfrac{a+b+c}{2}$'],['Площадь','$S = \\sqrt{p(p-a)(p-b)(p-c)}$']] },
+ final3: { rows: [['§§10–12','теория главы 3'],['Дальше','глава 4 — правильные многоугольники']] }
+ },
+ tips: {
+ p10: 'Теорема синусов: $\\dfrac{a}{\\sin A} = 2R$, где $R$ — радиус описанной окружности.',
+ p11: 'Теорема косинусов обобщает теорему Пифагора: при $A = 90^\\circ$ получаем $a^2 = b^2 + c^2$.',
+ p12: 'Формула Герона позволяет найти площадь треугольника, зная только три его стороны.',
+ final3: 'Главные результаты главы 3: теоремы синусов и косинусов, формула Герона.'
+ },
+ achLabels: {
+ start: 'Начало главы 3!',
+ p10_done: 'Теорема синусов освоена!',
+ p11_done: 'Теорема косинусов освоена!',
+ p12_done: 'Формула Герона освоена!',
+ ch3_done: 'Глава 3 пройдена! Теоремы синусов и косинусов — финал!'
+ }
+ },
+ ch4: {
+ n: 4,
+ title: 'Правильные многоугольники',
+ subtitle: 'Угол · радиусы · длина окружности · площадь круга',
+ heroH: 'Правильные многоугольники',
+ heroP: 'Здесь мы изучаем правильные многоугольники, формулу внутреннего угла $\\beta = \\tfrac{180^\\circ(n-2)}{n}$, связи стороны и радиуса описанной окружности, частные случаи (треугольник, квадрат, шестиугольник) и формулы $C = 2\\pi R$, $S = \\pi R^2$.',
+ heroWm: '⬢',
+ headerWmName: 'ГЛАВА 4',
+ paras: [
+ { id: 'p13', num: '§ 13', name: 'Правильные многоугольники', sub: '$\\beta = \\tfrac{180^\\circ(n-2)}{n}$', watermark: '⬢' },
+ { id: 'p14', num: '§ 14', name: 'Формулы радиусов', sub: '$\\tfrac{a}{2} = R\\sin\\tfrac{180^\\circ}{n}$', watermark: 'R' },
+ { id: 'p15', num: '§ 15', name: 'Треугольник, квадрат, шестиугольник', sub: '$a = R\\sqrt{3}, R\\sqrt{2}, R$', watermark: '△□⬡' },
+ { id: 'p16', num: '§ 16', name: 'Длина окружности и площадь круга', sub: '$C = 2\\pi R$, $S = \\pi R^2$', watermark: '⊙' },
+ { id: 'final4', num: '★', name: 'Финал главы', sub: 'Итоги главы 4 · Геометрия 9 пройдена!', final: true, watermark: '★' }
+ ],
+ palette: {
+ pri: '#0891b2', pri2: '#0e7490', priSoft: '#cffafe',
+ acc: '#22d3ee', acc2: '#0891b2', accSoft: '#ecfeff',
+ darkBg: '#04141a', darkCard: '#0a1b22', darkCardSoft: '#0d2229', darkText: '#e0fcff', darkMuted: '#7aa8b3', darkBorder: '#163842',
+ hdrGrad: 'linear-gradient(110deg,#164e63 0%,#0891b2 55%,#22d3ee 100%)',
+ hdrStroke: 'rgba(209,250,255,.12)',
+ hdrUnderline: 'rgba(165,243,252,.2)'
+ },
+ sidebars: {
+ p13: { rows: [['Внутренний угол','$\\beta = \\tfrac{180^\\circ(n-2)}{n}$'],['Центральный угол','$\\tfrac{360^\\circ}{n}$']] },
+ p14: { rows: [['Сторона','$a = 2R\\sin\\tfrac{180^\\circ}{n}$'],['Радиус вписанной','$r = R\\cos\\tfrac{180^\\circ}{n}$']] },
+ p15: { rows: [['Треугольник','$a = R\\sqrt{3}$'],['Квадрат','$a = R\\sqrt{2}$'],['Шестиугольник','$a = R$']] },
+ p16: { rows: [['Длина','$C = 2\\pi R$'],['Площадь','$S = \\pi R^2$'],['Сектор','$S = \\tfrac{\\pi R^2 \\alpha}{360^\\circ}$']] },
+ final4: { rows: [['§§13–16','теория главы 4'],['Геометрия 9','полностью пройдена!']] }
+ },
+ tips: {
+ p13: 'В правильном $n$-угольнике все стороны и углы равны. Внутренний угол $\\beta = \\dfrac{180^\\circ(n-2)}{n}$.',
+ p14: '$\\dfrac{a}{2} = R\\sin\\dfrac{180^\\circ}{n}$ — половина стороны через радиус описанной окружности.',
+ p15: 'Запомни: в правильном треугольнике $a = R\\sqrt{3}$, в квадрате $a = R\\sqrt{2}$, в шестиугольнике $a = R$.',
+ p16: '$C = 2\\pi R$ — длина окружности; $S = \\pi R^2$ — площадь круга.',
+ final4: 'Главные результаты главы 4: формулы правильных многоугольников и круга. Вся Геометрия 9 в твоём арсенале!'
+ },
+ achLabels: {
+ start: 'Начало главы 4!',
+ p13_done: 'Правильные многоугольники освоены!',
+ p15_done: 'Треугольник, квадрат, шестиугольник освоены!',
+ p16_done: 'Длина окружности и площадь круга освоены!',
+ ch4_done: 'Глава 4 пройдена! Геометрия 9 — финал!'
+ }
+ }
+};
+
+function jsStr(s){ return s.replace(/\\/g, '\\\\').replace(/'/g, "\\'"); }
+function cap(s){ return s[0].toUpperCase() + s.slice(1); }
+
+function buildChapter(spec){
+ const N = spec.n;
+ const paras = spec.paras;
+ const total = paras.length;
+ const firstP = paras[0].id;
+ const finalId = paras[paras.length-1].id;
+ const lastNonFinal = paras[paras.length-2].id;
+ const p = spec.palette;
+
+ const sectionsHtml = paras.map(par => {
+ const cls = par.final ? ' style="background:linear-gradient(135deg,'+p.pri+','+p.acc+')"' : '';
+ const heading = par.final ? ('Итоги главы '+N) : par.name;
+ return ` ${heading}
Итоговый раздел главы «${spec.title}» будет добавлен в следующих обновлениях.
+Раздел Phase 7.
\`); + html += readButton('${finalId}'); + html += secNav('${lastNonFinal}', null); + body.innerHTML = html; + wireReadBtn('${finalId}'); + if(window.renderMathInElement) renderMath(body); +}`; + + const progressInit = paras.map(par => `${par.id}:0`).join(','); + + return ` + + + + + + +${spec.heroP}
+Здесь мы изучаем тригонометрические функции sin, cos, tg, ctg острого и тупого угла, решаем прямоугольный треугольник, выводим формулы площади $S = \tfrac{1}{2}ab\sin C$ и находим высоту к гипотенузе как среднее геометрическое $h^2 = a_1 b_1$.
+Здесь мы изучаем описанную и вписанную окружности треугольника, специальные формулы для прямоугольного треугольника $R = c/2$ и $r = (a+b-c)/2$, а также критерии вписанных и описанных четырёхугольников: $\alpha + \gamma = 180^\circ$ и $a+c = b+d$.
+Здесь мы выводим теорему синусов $\tfrac{a}{\sin A} = 2R$, теорему косинусов $a^2 = b^2 + c^2 - 2bc\cos A$ и формулу Герона $S = \sqrt{p(p-a)(p-b)(p-c)}$. С их помощью решается любой треугольник.
+Здесь мы изучаем правильные многоугольники, формулу внутреннего угла $\beta = \tfrac{180^\circ(n-2)}{n}$, связи стороны и радиуса описанной окружности, частные случаи (треугольник, квадрат, шестиугольник) и формулы $C = 2\pi R$, $S = \pi R^2$.
+