// Генератор physics_10_ch{1..6}.html — Phase 0 skeleton со STUB-builder'ами. // Берём алгебру 11 ch1 как базу, заменяем только инфраструктуру: // - title, theme keys, slug, hero, sec-nav names, PARAS list // - STUB-builder для каждого § (37) + final{1..6} // - SIDEBARS / TIPS / ACH_LABELS // CSS POLISH + ICONS + 2D-хелперы оставляем 1:1 (нужны Phase 1+). 'use strict'; const fs = require('fs'); const path = require('path'); const TBOOKS = path.join(__dirname, '..', '..', 'frontend', 'textbooks'); const SRC = path.join(TBOOKS, 'algebra_11_ch1.html'); // === Данные глав === const PARA_NAMES = { p1:'Основные положения МКТ', p2:'Масса и размеры молекул. Количество вещества', p3:'Идеальный газ. Основное уравнение МКТ', p4:'Температура. Тепловое равновесие', p5:'Уравнение состояния идеального газа', p6:'Изопроцессы', p7:'Строение и свойства твёрдых тел', p8:'Строение и свойства жидкостей', p9:'Испарение и конденсация. Насыщенный пар', p10:'Влажность воздуха', p11:'Внутренняя энергия', p12:'Работа в термодинамике', p13:'Количество теплоты', p14:'Первый закон термодинамики', p15:'Тепловые двигатели. Цикл Карно', p16:'Электрический заряд', p17:'Закон Кулона', p18:'Электростатическое поле', p19:'Напряжённость поля. Принцип суперпозиции', p20:'Линии напряжённости', p21:'Работа поля. Потенциал', p22:'Разность потенциалов. Напряжение', p23:'Конденсаторы', p24:'Энергия поля конденсатора', p25:'ЭДС источника тока', p26:'Закон Ома для полной цепи', p27:'Магнитное поле тока', p28:'Индукция магнитного поля', p29:'Сила Ампера', p30:'Сила Лоренца', p31:'Магнитный поток. Электромагнитная индукция', p32:'Правило Ленца. Закон Фарадея', p33:'Самоиндукция', p34:'Ток в металлах. Сверхпроводимость', p35:'Ток в электролитах', p36:'Ток в газах. Плазма', p37:'Ток в полупроводниках', }; // Sub-формулы (с двойным backslash для JS string literals) const PARA_SUBS = { p1:'Положения МКТ', p2:'$N_A = 6{,}022 \\\\cdot 10^{23}$', p3:'$p = \\\\dfrac{1}{3}nm\\\\overline{v^2}$', p4:'$\\\\overline{E_k} = \\\\dfrac{3}{2}kT$', p5:'$pV = \\\\nu RT$', p6:'$pV/T = \\\\text{const}$', p7:'Кристаллы', p8:'Поверхностное натяжение', p9:'Насыщенный пар', p10:'$\\\\varphi = p/p_н$', p11:'$U = \\\\dfrac{3}{2}\\\\nu RT$', p12:'$A = p\\\\Delta V$', p13:'$Q = cm\\\\Delta T$', p14:'$Q = \\\\Delta U + A$', p15:'$\\\\eta = (T_1-T_2)/T_1$', p16:'$q = ne$', p17:'$F = k\\\\dfrac{q_1 q_2}{r^2}$', p18:'$\\\\vec{E}$', p19:'$\\\\vec{E} = \\\\sum \\\\vec{E_i}$', p20:'Силовые линии', p21:'$A = qU$', p22:'$U = E \\\\cdot d$', p23:'$C = q/U$', p24:'$W = CU^2/2$', p25:'$\\\\mathcal{E}$', p26:'$I = \\\\mathcal{E}/(R+r)$', p27:'Опыт Эрстеда', p28:'$\\\\vec{B}$', p29:'$F = BIL\\\\sin\\\\alpha$', p30:'$F = qvB$', p31:'$\\\\Phi = BS\\\\cos\\\\alpha$', p32:'$\\\\mathcal{E}_i = -d\\\\Phi/dt$', p33:'$L$, $W_L = LI^2/2$', p34:'$\\\\rho(T)$', p35:'$m = kIt$', p36:'Виды разрядов', p37:'n-/p-тип', }; // Watermarks для секций (короткие) const PARA_WM = { p1:'МКТ', p2:'N_A', p3:'pV', p4:'T', p5:'pV=νRT', p6:'iso', p7:'cryst', p8:'σ', p9:'пар', p10:'φ', p11:'U', p12:'A', p13:'Q', p14:'1-й', p15:'Карно', p16:'q', p17:'Кулон', p18:'&vec;E', p19:'E', p20:'→', p21:'A=qU', p22:'U', p23:'C', p24:'CU²', p25:'ε', p26:'Ом', p27:'Эрстед', p28:'B', p29:'Ампер', p30:'Лоренц', p31:'Φ', p32:'Фарадей', p33:'L', p34:'ρ(T)', p35:'m=kIt', p36:'plasma', p37:'n/p', final1:'★', final2:'★', final3:'★', final4:'★', final5:'★', final6:'★', }; const CHAPTERS = { ch1: { paras: ['p1','p2','p3','p4','p5','p6','p7','p8','p9','p10'], final: 'final1', title: 'Основы МКТ', headerSub: 'Молекулярно-кинетическая теория · идеальный газ · изопроцессы · влажность', hero: { h:'Молекулярная физика — почему вещество ведёт себя так', p:'Молекулярно-кинетическая теория объясняет свойства вещества движением и взаимодействием молекул. Изучаем газы, твёрдые тела, жидкости, температуру, давление и влажность.' }, pri:'#2563eb', priD:'#1d4ed8', priSoft:'#dbeafe', priLight:'#60a5fa', headerGrad:'linear-gradient(110deg,#1e3a8a 0%,#2563eb 55%,#60a5fa 100%)', chNum:1, watermarkHero:'T', }, ch2: { paras: ['p11','p12','p13','p14','p15'], final: 'final2', title: 'Термодинамика', headerSub: 'Внутренняя энергия · работа · теплота · 1-й закон · тепловые двигатели', hero: { h:'Термодинамика — превращения энергии', p:'Термодинамика — наука о превращении энергии. Внутренняя энергия, работа газа, количество теплоты, первый закон и тепловые двигатели.' }, pri:'#059669', priD:'#047857', priSoft:'#d1fae5', priLight:'#34d399', headerGrad:'linear-gradient(110deg,#064e3b 0%,#059669 55%,#34d399 100%)', chNum:2, watermarkHero:'ΔU', }, ch3: { paras: ['p16','p17','p18','p19','p20','p21','p22','p23','p24'], final: 'final3', title: 'Электростатика', headerSub: 'Заряд · Кулон · поле · потенциал · напряжение · конденсаторы', hero: { h:'Электростатика — поле неподвижных зарядов', p:'Электрический заряд создаёт поле. Изучаем закон Кулона, напряжённость и потенциал поля, конденсаторы и их энергию.' }, pri:'#7c3aed', priD:'#6d28d9', priSoft:'#ede9fe', priLight:'#a78bfa', headerGrad:'linear-gradient(110deg,#3b0764 0%,#7c3aed 55%,#a78bfa 100%)', chNum:3, watermarkHero:'+q', }, ch4: { paras: ['p25','p26'], final: 'final4', title: 'Постоянный ток', headerSub: 'ЭДС источника · закон Ома для полной цепи · КПД', hero: { h:'Постоянный ток в полной цепи', p:'Постоянный ток в полной цепи: ЭДС источника, закон Ома, КПД источника.' }, pri:'#db2777', priD:'#be185d', priSoft:'#fce7f3', priLight:'#f472b6', headerGrad:'linear-gradient(110deg,#831843 0%,#db2777 55%,#f472b6 100%)', chNum:4, watermarkHero:'I', }, ch5: { paras: ['p27','p28','p29','p30','p31','p32','p33'], final: 'final5', title: 'Магнитное поле и ЭМИ', headerSub: 'Магнитное поле · Ампер · Лоренц · поток · индукция · Ленц · Фарадей · самоиндукция', hero: { h:'Магнитное поле и электромагнитная индукция', p:'Магнитное поле тока, сила Ампера, сила Лоренца, явление электромагнитной индукции и закон Фарадея.' }, pri:'#0891b2', priD:'#0e7490', priSoft:'#cffafe', priLight:'#22d3ee', headerGrad:'linear-gradient(110deg,#164e63 0%,#0891b2 55%,#22d3ee 100%)', chNum:5, watermarkHero:'B', }, ch6: { paras: ['p34','p35','p36','p37'], final: 'final6', title: 'Ток в различных средах', headerSub: 'Металлы · сверхпроводимость · электролиз · газы · плазма · полупроводники', hero: { h:'Электрический ток в разных средах', p:'Электрический ток ведёт себя по-разному в металлах, электролитах, газах и полупроводниках. Сверхпроводимость, электролиз, плазма, p-n переход.' }, pri:'#10b981', priD:'#059669', priSoft:'#d1fae5', priLight:'#6ee7b7', headerGrad:'linear-gradient(110deg,#064e3b 0%,#10b981 55%,#6ee7b7 100%)', chNum:6, watermarkHero:'n/p', }, }; // === Sidebar rows: краткие подсказки для каждого § === const SIDEBAR_ROWS = { p1: [['Положения','3 положения МКТ: все вещества из частиц, частицы движутся, взаимодействуют'],['Опыты','Броуновское движение, диффузия'],['Размер','$d \\\\sim 10^{-10}$ м']], p2: [['Авогадро','$N_A = 6{,}022 \\\\cdot 10^{23}$ 1/моль'],['Количество в-ва','$\\\\nu = N/N_A = m/M$'],['Молярная масса','$M$ — кг/моль']], p3: [['Идеальный газ','точечные частицы, упругие столкновения'],['Осн. ур-ие МКТ','$p = \\\\tfrac{1}{3}nm\\\\overline{v^2}$'],['Концентрация','$n = N/V$']], p4: [['Темпер.','$T$ — мера ср. кин. энергии'],['$\\\\overline{E_k}$','$\\\\overline{E_k} = \\\\tfrac{3}{2}kT$'],['Шкалы','$T_K = t + 273{,}15$']], p5: [['Менделеев-Клапейрон','$pV = \\\\nu RT$'],['Клапейрон','$\\\\frac{pV}{T} = \\\\text{const}$'],['$R$','$R = 8{,}314$ Дж/(моль·К)']], p6: [['Изотерма','$T = \\\\text{const}$: $pV = \\\\text{const}$ (Бойль-Мариотт)'],['Изобара','$p = \\\\text{const}$: $V/T = \\\\text{const}$ (Гей-Люссак)'],['Изохора','$V = \\\\text{const}$: $p/T = \\\\text{const}$ (Шарль)']], p7: [['Крист.','дальний порядок'],['Аморф.','ближний порядок, нет $T_{пл}$'],['Деформ.','упругая, пластическая']], p8: [['Жидкость','ближний порядок, текучесть'],['Поверх. натяж.','$\\\\sigma$ — Н/м'],['Капилляр','смачивание']], p9: [['Испар.','с поверхности'],['Кипение','$p_{нас} = p_{внеш}$'],['Нас. пар','динам. равновесие']], p10: [['Абс. вл.','$\\\\rho_{пара}$ — кг/м³'],['Отн. вл.','$\\\\varphi = p/p_{нас} \\\\cdot 100\\\\%$'],['Точка росы','$T$, при которой $\\\\varphi = 100\\\\%$']], p11: [['$U$','$U = \\\\tfrac{3}{2}\\\\nu RT$ — для одноат. идеал. газа'],['$\\\\Delta U$','зависит только от $T$ для идеал. газа'],['Способы','теплопередача, работа']], p12: [['$A_{газ}$','$A = p\\\\Delta V$ при $p = \\\\text{const}$'],['Геометрия','площадь под графиком $p(V)$'],['Знак','газ расш. — $A > 0$']], p13: [['$Q = cm\\\\Delta T$','нагрев/охлаждение'],['$Q = \\\\lambda m$','плавление'],['$Q = rm$','парообразование'],['$Q = qm$','сгорание']], p14: [['1-й закон','$Q = \\\\Delta U + A$'],['Изопроц.','частные случаи'],['Адиабат.','$Q = 0 \\\\Rightarrow A = -\\\\Delta U$']], p15: [['КПД','$\\\\eta = A_{пол}/Q_1$'],['Карно','$\\\\eta_{max} = (T_1 - T_2)/T_1$'],['Циклы','Отто, Дизель']], p16: [['Заряд','$q$ — Кл'],['Электрон','$e = 1{,}6 \\\\cdot 10^{-19}$ Кл'],['Закон сохр.','$\\\\sum q = \\\\text{const}$ в замкн. системе'],['$q = ne$','дискретность']], p17: [['Закон','$F = k\\\\dfrac{|q_1 q_2|}{r^2}$'],['$k$','$k = 9 \\\\cdot 10^9$ Н·м²/Кл²'],['$\\\\varepsilon_0$','$\\\\varepsilon_0 = 8{,}85 \\\\cdot 10^{-12}$ Ф/м']], p18: [['Поле','посредник взаимодействия'],['Свойства','действует на заряд силой $\\\\vec{F}$'],['Источник','$+q$ или $-q$']], p19: [['$\\\\vec{E}$','$\\\\vec{E} = \\\\vec{F}/q_0$'],['Точ. заряд','$E = k|q|/r^2$'],['Суперпоз.','$\\\\vec{E} = \\\\sum \\\\vec{E_i}$']], p20: [['Линии','касат. — $\\\\vec{E}$'],['Густота','$E$ велико — линии чаще'],['$+ \\\\to -$','начало на $+$, конец на $-$ или $\\\\infty$']], p21: [['Работа поля','$A_{поля} = qU$ — не зависит от пути'],['Потенц.','$\\\\varphi = W_p/q$'],['Знак','от $+$ к $-$ ток. зар. — $A > 0$']], p22: [['Разность','$U = \\\\varphi_1 - \\\\varphi_2$'],['Однор. поле','$U = Ed$'],['Эквипот.','$\\\\bot$ линиям $\\\\vec{E}$']], p23: [['$C = q/U$','Ф (фарад)'],['Плоский','$C = \\\\varepsilon\\\\varepsilon_0 S/d$'],['Парал.','$C = \\\\sum C_i$'],['Послед.','$1/C = \\\\sum 1/C_i$']], p24: [['Энергия','$W = \\\\tfrac{CU^2}{2} = \\\\tfrac{q^2}{2C} = \\\\tfrac{qU}{2}$'],['Плотн.','$w = \\\\tfrac{\\\\varepsilon\\\\varepsilon_0 E^2}{2}$']], p25: [['$\\\\mathcal{E}$','ЭДС — В'],['Сторон. силы','внутри источника'],['$\\\\mathcal{E} = A_{стор}/q$','']], p26: [['$I = \\\\mathcal{E}/(R+r)$','полная цепь'],['КЗ','$I_{кз} = \\\\mathcal{E}/r$'],['КПД','$\\\\eta = R/(R+r)$'],['$U = \\\\mathcal{E} - Ir$','напр. на полюсах']], p27: [['Эрстед','ток отклоняет стрелку'],['Поле тока','вихревое, $\\\\vec{B}$'],['Правая рука','для проводника']], p28: [['$\\\\vec{B}$','индукция магн. поля — Тл'],['Линии','замкнутые, без начала/конца'],['Опр.','$B = F_{max}/(IL)$']], p29: [['$F_A = BIL\\\\sin\\\\alpha$','сила Ампера'],['Левая рука','для напр-я силы'],['$F_A \\\\bot \\\\vec{B}, \\\\vec{I}$','']], p30: [['$F_л = qvB\\\\sin\\\\alpha$','сила Лоренца'],['Радиус','$r = mv/(qB)$'],['$F_л \\\\bot \\\\vec{v}$','траектория — окружность/спираль']], p31: [['$\\\\Phi = BS\\\\cos\\\\alpha$','магн. поток — Вб'],['ЭМИ','при $\\\\Delta\\\\Phi \\\\ne 0$ возникает $\\\\mathcal{E}_i$'],['Опыт Фарадея','']], p32: [['Ленц','$I_{инд}$ противодействует причине'],['$\\\\mathcal{E}_i = -d\\\\Phi/dt$','закон Фарадея'],['Знак','определяет Ленц']], p33: [['$\\\\mathcal{E}_{si} = -L\\\\dfrac{dI}{dt}$','самоиндукция'],['$L$','индуктивность — Гн'],['$W_L = LI^2/2$','энергия магн. поля']], p34: [['Носители','свободные электроны'],['$\\\\rho(T) = \\\\rho_0(1 + \\\\alpha t)$','зависимость от $T$'],['Сверхпров.','$T < T_c$, $\\\\rho = 0$']], p35: [['Электролит','раствор/расплав ионных в-в'],['$m = kIt$','1-й закон Фарадея'],['$k = M/(zF)$','эл.-хим. эквивалент'],['$F$','$F = 96485$ Кл/моль']], p36: [['Несам.','требует ионизатора'],['Самост.','тлеющий, искровой, дуговой, коронный'],['Плазма','газ из ионов и электронов']], p37: [['n-тип','примесь-донор, носители — электроны'],['p-тип','примесь-акцептор, носители — дырки'],['p-n','одностор. проводимость, диод']], }; // Tips на каждый параграф — краткая подсказка const TIPS_HTML = { p1: 'Положения МКТ: все вещества из частиц, частицы движутся, взаимодействуют. Доказательства — диффузия, броуновское движение.', p2: '$N_A = 6{,}022 \\\\cdot 10^{23}$ — число частиц в 1 моле. $\\\\nu = m/M = N/N_A$.', p3: 'Идеальный газ: точечные молекулы, упругие столкновения. Основное ур-ие МКТ: $p = \\\\tfrac{1}{3}nm\\\\overline{v^2}$.', p4: '$T$ — мера ср. кин. энергии: $\\\\overline{E_k} = \\\\tfrac{3}{2}kT$. Абс. ноль $T = 0$ К $= -273{,}15$°C.', p5: 'Уравнение Менделеева-Клапейрона: $pV = \\\\nu RT$, где $R = 8{,}314$ Дж/(моль·К).', p6: 'Изопроцессы: при фиксации одного параметра ($T$, $p$ или $V$). Бойль-Мариотт, Гей-Люссак, Шарль.', p7: 'Кристалл — дальний порядок, $T_{пл}$ определена. Аморфные — ближний порядок, плавятся плавно.', p8: 'Жидкость имеет $V$, но не имеет форму. Поверхностное натяжение $\\\\sigma$ создаёт «плёнку» на поверхности.', p9: 'Насыщенный пар — пар в динамическом равновесии с жидкостью. $p_{нас}$ зависит только от $T$.', p10: 'Отн. влажность: $\\\\varphi = p_{пара}/p_{нас} \\\\cdot 100\\\\%$. При $\\\\varphi = 100\\\\%$ — точка росы.', p11: 'Внутр. энергия идеал. одноат. газа: $U = \\\\tfrac{3}{2}\\\\nu RT$. Зависит только от $T$.', p12: 'Работа газа: $A = p\\\\Delta V$ при $p = \\\\text{const}$. Геометрически — площадь под графиком $p(V)$.', p13: '$Q = cm\\\\Delta T$ — нагрев. $Q = \\\\lambda m$ — плавление. $Q = rm$ — парообразование. $Q = qm$ — сгорание.', p14: '1-й закон термодинамики: $Q = \\\\Delta U + A$ — теплота идёт на изменение внутр. энергии и работу газа.', p15: 'КПД цикла Карно: $\\\\eta_{max} = (T_1 - T_2)/T_1$ — максимально возможный при данных $T_1, T_2$.', p16: 'Заряд квантуется: $q = ne$, где $e = 1{,}6 \\\\cdot 10^{-19}$ Кл. Закон сохранения заряда — фундаментальный.', p17: '$F = k\\\\dfrac{|q_1 q_2|}{r^2}$, $k = 9 \\\\cdot 10^9$ Н·м²/Кл². Аналог закона всемирного тяготения.', p18: 'Поле — посредник взаимодействия. Действует на заряд силой $\\\\vec{F} = q\\\\vec{E}$.', p19: '$\\\\vec{E} = \\\\vec{F}/q_0$ — векторная характеристика поля. Принцип суперпозиции: $\\\\vec{E} = \\\\sum \\\\vec{E_i}$.', p20: 'Линии напряжённости — касательные к $\\\\vec{E}$. Начинаются на «+» зарядах, заканчиваются на «−» или в $\\\\infty$.', p21: 'Работа поля не зависит от пути: $A_{поля} = qU = q(\\\\varphi_1 - \\\\varphi_2)$. Поле потенциально.', p22: 'В однородном поле: $U = E \\\\cdot d$. Эквипотенциальные поверхности перпендикулярны линиям $\\\\vec{E}$.', p23: '$C = q/U$ — Ф. Плоский: $C = \\\\dfrac{\\\\varepsilon\\\\varepsilon_0 S}{d}$. Параллельно — $C_\\\\Sigma = \\\\sum C_i$.', p24: '$W = \\\\dfrac{CU^2}{2} = \\\\dfrac{q^2}{2C} = \\\\dfrac{qU}{2}$ — три эквивалентные формулы.', p25: 'ЭДС — работа сторонних сил по перемещению единичного заряда: $\\\\mathcal{E} = A_{стор}/q$. Измер. в В.', p26: 'Закон Ома для полной цепи: $I = \\\\dfrac{\\\\mathcal{E}}{R + r}$. КПД источника: $\\\\eta = R/(R + r)$.', p27: 'Опыт Эрстеда показал: ток создаёт магн. поле. Линии $\\\\vec{B}$ вокруг тока — концентр. окружности.', p28: '$\\\\vec{B}$ — индукция магн. поля, измер. в Тл. Линии замкнуты (магн. поле — вихревое).', p29: 'Сила Ампера: $F_A = BIL\\\\sin\\\\alpha$. Направление — по правилу левой руки.', p30: 'Сила Лоренца: $F_л = qvB\\\\sin\\\\alpha$. Заряд движется по окружности с $r = mv/(qB)$.', p31: 'Магн. поток: $\\\\Phi = BS\\\\cos\\\\alpha$. Измеряется в Вб. ЭМИ возникает при $\\\\Delta\\\\Phi \\\\ne 0$.', p32: 'Закон Фарадея: $\\\\mathcal{E}_i = -\\\\dfrac{d\\\\Phi}{dt}$. Правило Ленца: $I_{инд}$ противодействует $\\\\Delta\\\\Phi$.', p33: 'Самоиндукция: $\\\\mathcal{E}_{si} = -L\\\\dfrac{dI}{dt}$. Энергия магн. поля катушки: $W_L = LI^2/2$.', p34: 'В металлах носители — свободные электроны. $\\\\rho(T) = \\\\rho_0(1 + \\\\alpha t)$. Сверхпров.: $\\\\rho = 0$.', p35: 'Электролиз: $m = kIt$ — 1-й закон Фарадея. $k = M/(zF)$, $F = 96485$ Кл/моль.', p36: 'Самостоятельный разряд: тлеющий, искровой, дуговой, коронный. Плазма — ионизованный газ.', p37: 'Полупроводники: n-тип (донор, электроны) и p-тип (акцептор, дырки). p-n переход — диод.', final1: 'Финал главы 1 — интегрированные задачи по §§1–10. В разработке (Phase 1+).', final2: 'Финал главы 2 — интегрированные задачи по §§11–15. В разработке (Phase 2+).', final3: 'Финал главы 3 — интегрированные задачи по §§16–24. В разработке (Phase 3+).', final4: 'Финал главы 4 — интегрированные задачи по §§25–26. В разработке (Phase 4+).', final5: 'Финал главы 5 — интегрированные задачи по §§27–33. В разработке (Phase 5+).', final6: 'Финал главы 6 — интегрированные задачи по §§34–37. В разработке (Phase 6+).', }; // === Билд одного ch === function buildCh(chKey) { const C = CHAPTERS[chKey]; const slug = 'physics-10-' + chKey; const lsPrefix = 'physics10_' + chKey; const xpKey = 'physics10_xp'; const allParas = [...C.paras, C.final]; const paraNum = (pid) => { if (pid.startsWith('final')) return '★'; return '§\xa0' + pid.slice(1); }; // PARAS JS literal const parasArr = allParas.map(pid => { if (pid.startsWith('final')) { return ` { id:'${pid}', num:'\\u2605', name:'Финал главы', sub:'Итоги \\u00b7 боссы главы ${C.chNum}', final:true }`; } const sub = PARA_SUBS[pid] || ''; return ` { id:'${pid}', num:'\\u00a7 ${pid.slice(1)}', name:${JSON.stringify(PARA_NAMES[pid])}, sub:'${sub}' }`; }).join(',\n'); // TOTAL_PARAS const total = allParas.length; // ACH_LABELS — мини const achLabels = [ ` start:"Начало главы ${C.chNum}!"`, ...C.paras.map(pid => ` ${pid}_done:${JSON.stringify(PARA_NAMES[pid] + ' освоен!')}`), ` ${chKey}_done:"Глава ${C.chNum} пройдена!"`, ].join(',\n'); // SIDEBARS JS — для каждой п в главе + final const sidebarObj = allParas.map(pid => { const rows = pid.startsWith('final') ? [[`§§${C.paras[0].slice(1)}–${C.paras[C.paras.length-1].slice(1)}`, `теория главы ${C.chNum}`],['Награда','+50 XP']] : (SIDEBAR_ROWS[pid] || [['В разработке',`шпаргалка ${pid}`]]); const titleStr = pid.startsWith('final') ? `Финал главы ${C.chNum}` : `Шпаргалка ${pid.startsWith('p') ? '§' + pid.slice(1) : pid}`; const rowsLit = rows.map(([k,v]) => `["${k}","${v}"]`).join(','); return ` ${pid}:{title:"${titleStr}",rows:[${rowsLit}]}`; }).join(',\n'); // TIPS JS const tipsArr = allParas.map(pid => { const html = TIPS_HTML[pid] || `Подсказка к ${pid} — в разработке.`; return ` {sec:'${pid}',html:"${html.replace(/"/g, '\\"')}"}`; }).join(',\n'); // STUB-builder для каждого п const builders = allParas.map(pid => { const isFinal = pid.startsWith('final'); const name = isFinal ? `Финал главы ${C.chNum}` : PARA_NAMES[pid]; const num = isFinal ? '★' : '§' + pid.slice(1); const next = (() => { const idx = allParas.indexOf(pid); return idx < allParas.length - 1 ? allParas[idx+1] : null; })(); const prev = (() => { const idx = allParas.indexOf(pid); return idx > 0 ? allParas[idx-1] : null; })(); const prevStr = prev ? `'${prev}'` : 'null'; const nextStr = next ? `'${next}'` : 'null'; return `function build_${pid}(){ const box = document.getElementById('${pid}-body'); let html = ''; html += makeCard('theory', ${JSON.stringify(name)}, ${JSON.stringify(num)}, \`

${name} — этот параграф в разработке (Phase 1+).

Здесь появятся: теория, формулы, разобранные примеры и 3–4 интерактива в стиле «алгебры 11» — таблицы, симуляции, ползунки, drag-and-drop и автопроверяемые тренажёры.

Phase 0: создан скелет учебника. Phase ${C.chNum}+: наполнение этого § содержанием по учебнику «Физика 10» (Беларусь, 2019).

\`); html += secNav(${prevStr}, ${nextStr}); html += readButton('${pid}'); box.innerHTML = html; renderMath(box); wireReadBtn('${pid}'); }`; }).join('\n\n'); // BUILDERS map const buildersMap = allParas.map(pid => `${pid}:()=>build_${pid}()`).join(', '); // sec node HTML const secNodes = allParas.map(pid => { const isFinal = pid.startsWith('final'); const num = isFinal ? '★' : '§ ' + pid.slice(1); const titleHtml = isFinal ? 'Финал главы' : PARA_NAMES[pid]; const wm = PARA_WM[pid] || '?'; const numHtml = isFinal ? `` : `${num}`; return `
${numHtml}

${titleHtml}

`; }).join('\n'); // sec accent CSS — все секции одного цвета главы const secCss = allParas.map(pid => `.sec[id="sec-${pid}"]{ --sec-acc:${C.pri}; --sec-acc-d:${C.priD}; --sec-acc-soft:${C.priSoft}; }` ).join('\n'); // Search NAMES map for secNav titles const namesObj = allParas.map(pid => { const v = pid.startsWith('final') ? 'Финал' : '\\xA7' + pid.slice(1); return `${pid}:'${v}'`; }).join(','); // === Финальный HTML === const html = ` Физика 10 · Глава ${C.chNum} · «${C.title}»

Физика 10 · Глава ${C.chNum}

${C.headerSub}
К физике 10

${C.hero.h}

${C.hero.p}

Прогресс по главе
0%
Параграфы главы
${secNodes}
Достижение!
`; return html; } // === Run === for (const chKey of ['ch1','ch2','ch3','ch4','ch5','ch6']) { const dst = path.join(TBOOKS, `physics_10_${chKey}.html`); const html = buildCh(chKey); fs.writeFileSync(dst, html); // Parse-check the inline