#!/usr/bin/env node
// Генератор скелетов глав Физики 7. Создаёт physics_7_ch1..ch5.html из единого шаблона.
// Phase 0: скелет с инфраструктурой (header, navigator, sidebar, KaTeX, прогресс/XP, goTo),
// без §-контента — наполняется в Phase 1+.
const fs = require('fs');
const path = require('path');
const VER = '20260530';
const OUT = path.join(__dirname, '..', '..', 'frontend', 'textbooks');
const CHAPTERS = [
{
n: 1, slug: 'physics-7-ch1',
title: 'Физические методы познания природы',
range: '§§1–7',
accent: '#4f46e5', accentD: '#3730a3', accentSoft: '#e0e7ff',
coverGrad: 'linear-gradient(135deg,#312e81,#4f46e5 60%,#a5b4fc)',
paras: [
{ id:'p1', num:'§ 1', title:'Физика — наука о природе', wm:'?' },
{ id:'p2', num:'§ 2', title:'Тело, явление, величина', wm:'×' },
{ id:'p3', num:'§ 3', title:'Методы исследования в физике', wm:'⚙' },
{ id:'p4', num:'§ 4', title:'Прямые и косвенные измерения', wm:'=' },
{ id:'p5', num:'§ 5', title:'Единицы измерения. СИ', wm:'м' },
{ id:'p6', num:'§ 6', title:'Действия над физическими величинами', wm:'±' },
{ id:'p7', num:'§ 7', title:'Цена деления. Погрешность', wm:'∇' },
{ id:'final1', num:'Финал', title:'Итоги главы 1', wm:'★' },
],
achTitle: 'Юный физик',
},
{
n: 2, slug: 'physics-7-ch2',
title: 'Строение вещества',
range: '§§8–13',
accent: '#7c3aed', accentD: '#5b21b6', accentSoft: '#ede9fe',
coverGrad: 'linear-gradient(135deg,#4c1d95,#7c3aed 60%,#c4b5fd)',
paras: [
{ id:'p8', num:'§ 8', title:'Дискретное строение вещества', wm:'•' },
{ id:'p9', num:'§ 9', title:'Тепловое движение частиц', wm:'~' },
{ id:'p10', num:'§ 10', title:'Взаимодействие частиц', wm:'⇌' },
{ id:'p11', num:'§ 11', title:'Газ, жидкость, твёрдое', wm:'△' },
{ id:'p12', num:'§ 12', title:'Тепловое расширение', wm:'↔' },
{ id:'p13', num:'§ 13', title:'Температура. Термометры', wm:'°' },
{ id:'final2', num:'Финал', title:'Итоги главы 2', wm:'★' },
],
achTitle: 'Знаток вещества',
},
{
n: 3, slug: 'physics-7-ch3',
title: 'Движение и силы',
range: '§§14–27',
accent: '#dc2626', accentD: '#991b1b', accentSoft: '#fee2e2',
coverGrad: 'linear-gradient(135deg,#7f1d1d,#dc2626 60%,#f87171)',
paras: [
{ id:'p14', num:'§ 14', title:'Механическое движение. Относительность', wm:'→' },
{ id:'p15', num:'§ 15', title:'Траектория, путь, время', wm:'s' },
{ id:'p16', num:'§ 16', title:'Равномерное движение. Скорость', wm:'v' },
{ id:'p17', num:'§ 17', title:'Графики s(t) и v(t)', wm:'∠' },
{ id:'p18', num:'§ 18', title:'Средняя скорость', wm:'⟨⟩' },
{ id:'p19', num:'§ 19', title:'Инерция', wm:'∞' },
{ id:'p20', num:'§ 20', title:'Масса. Плотность', wm:'ρ' },
{ id:'p21', num:'§ 21', title:'Сила', wm:'F' },
{ id:'p22', num:'§ 22', title:'Сила тяжести', wm:'↓' },
{ id:'p23', num:'§ 23', title:'Сила упругости', wm:'≈' },
{ id:'p24', num:'§ 24', title:'Вес тела', wm:'P' },
{ id:'p25', num:'§ 25', title:'Динамометр', wm:'⊥' },
{ id:'p26', num:'§ 26', title:'Сложение сил', wm:'+' },
{ id:'p27', num:'§ 27', title:'Сила трения', wm:'~' },
{ id:'final3', num:'Финал', title:'Итоги главы 3', wm:'★' },
],
achTitle: 'Мастер движения',
},
{
n: 4, slug: 'physics-7-ch4',
title: 'Давление',
range: '§§28–35',
accent: '#d97706', accentD: '#92400e', accentSoft: '#fef3c7',
coverGrad: 'linear-gradient(135deg,#78350f,#d97706 60%,#fbbf24)',
paras: [
{ id:'p28', num:'§ 28', title:'Давление. Единицы давления', wm:'p' },
{ id:'p29', num:'§ 29', title:'Давление газа', wm:'∴' },
{ id:'p30', num:'§ 30', title:'Закон Паскаля', wm:'⊕' },
{ id:'p31', num:'§ 31', title:'Гидростатическое давление', wm:'≡' },
{ id:'p32', num:'§ 32', title:'Сообщающиеся сосуды', wm:'U' },
{ id:'p33', num:'§ 33', title:'Газы и их вес', wm:'⌒' },
{ id:'p34', num:'§ 34', title:'Атмосферное давление', wm:'∼' },
{ id:'p35', num:'§ 35', title:'Барометры и манометры', wm:'⏚' },
{ id:'final4', num:'Финал', title:'Итоги главы 4', wm:'★' },
],
achTitle: 'Властелин давления',
},
{
n: 5, slug: 'physics-7-ch5',
title: 'Работа. Мощность. Энергия',
range: '§§36–42',
accent: '#10b981', accentD: '#047857', accentSoft: '#d1fae5',
coverGrad: 'linear-gradient(135deg,#064e3b,#10b981 60%,#6ee7b7)',
paras: [
{ id:'p36', num:'§ 36', title:'Механическая работа', wm:'A' },
{ id:'p37', num:'§ 37', title:'КПД', wm:'η' },
{ id:'p38', num:'§ 38', title:'Мощность', wm:'P' },
{ id:'p39', num:'§ 39', title:'Кинетическая энергия',wm:'Eк' },
{ id:'p40', num:'§ 40', title:'Потенциальная энергия',wm:'Eп' },
{ id:'p41', num:'§ 41', title:'Расчёт Eп = mgh', wm:'h' },
{ id:'p42', num:'§ 42', title:'Закон сохранения энергии',wm:'∑' },
{ id:'final5', num:'Финал', title:'Итоги главы 5', wm:'★' },
],
achTitle: 'Энергетик',
},
];
function makeHTML(C) {
const parasJs = C.paras.map(p => `{id:'${p.id}',num:'${p.num}',title:${JSON.stringify(p.title)},wm:'${p.wm}'}`).join(',');
const sections = C.paras.map(p =>
` ${p.title}