feat(text7): Wave 0 — каркас Алгебры 7 и Геометрии 7 (hubs + миграции + стабы)
- docs/PLAN_ALGEBRA_7_GEOMETRY_7.md: полный план реализации (содержание, архитектура, волны) - 018_algebra_7_hub.sql: hub algebra-7 (sort=6) + 4 ch (§1-§3, §4-§14, §15-§20, §21-§25) - 019_geometry_7_hub.sql: hub geometry-7 (sort=7) + 5 ch (§1-§7, §8-§14, §15-§18, §19-§26, §27-§31) - algebra_7_hub.html: 4-карточный hub в pink-теме (Арефьева/Пирютко 2022) - geometry_7_hub.html: 5-карточный hub в blue-теме (Казаков 2022) - 9 стаб-страниц глав со ссылкой назад в свой hub (заглушки до реализации волн 1-9) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,96 @@
|
|||||||
|
'use strict';
|
||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
|
||||||
|
const root = path.join(__dirname, '..', '..', 'frontend', 'textbooks');
|
||||||
|
|
||||||
|
const STUBS = [
|
||||||
|
{ f:'algebra_7_ch1.html', hub:'/textbook/algebra-7', hubName:'Алгебра 7', ch:'Глава 1 · Степень', range:'§1–§3', color:'#d97706', colorD:'#b45309', wm:'aⁿ' },
|
||||||
|
{ f:'algebra_7_ch2.html', hub:'/textbook/algebra-7', hubName:'Алгебра 7', ch:'Глава 2 · Выражения и их преобразования', range:'§4–§14', color:'#059669', colorD:'#047857', wm:'P(x)' },
|
||||||
|
{ f:'algebra_7_ch3.html', hub:'/textbook/algebra-7', hubName:'Алгебра 7', ch:'Глава 3 · Линейные уравнения. Неравенства. Функция', range:'§15–§20', color:'#7c3aed', colorD:'#6d28d9', wm:'y=kx' },
|
||||||
|
{ f:'algebra_7_ch4.html', hub:'/textbook/algebra-7', hubName:'Алгебра 7', ch:'Глава 4 · Системы линейных уравнений', range:'§21–§25', color:'#0891b2', colorD:'#0e7490', wm:'{' },
|
||||||
|
{ f:'geometry_7_ch1.html', hub:'/textbook/geometry-7', hubName:'Геометрия 7', ch:'Глава 1 · Начальные понятия', range:'§1–§7', color:'#d97706', colorD:'#b45309', wm:'●' },
|
||||||
|
{ f:'geometry_7_ch2.html', hub:'/textbook/geometry-7', hubName:'Геометрия 7', ch:'Глава 2 · Признаки равенства треугольников', range:'§8–§14', color:'#059669', colorD:'#047857', wm:'△' },
|
||||||
|
{ f:'geometry_7_ch3.html', hub:'/textbook/geometry-7', hubName:'Геометрия 7', ch:'Глава 3 · Параллельность прямых', range:'§15–§18', color:'#7c3aed', colorD:'#6d28d9', wm:'∥' },
|
||||||
|
{ f:'geometry_7_ch4.html', hub:'/textbook/geometry-7', hubName:'Геометрия 7', ch:'Глава 4 · Сумма углов треугольника', range:'§19–§26', color:'#0891b2', colorD:'#0e7490', wm:'∠' },
|
||||||
|
{ f:'geometry_7_ch5.html', hub:'/textbook/geometry-7', hubName:'Геометрия 7', ch:'Глава 5 · Задачи на построение', range:'§27–§31', color:'#db2777', colorD:'#9d174d', wm:'◯' },
|
||||||
|
];
|
||||||
|
|
||||||
|
const tpl = ({ hub, hubName, ch, range, color, colorD, wm }) => `<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||||
|
<title>${ch}</title>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@600;800;900&family=Inter:wght@400;600;700&display=swap" rel="stylesheet">
|
||||||
|
<script src="/js/api.js" defer></script>
|
||||||
|
<style>
|
||||||
|
:root{--bg:#fafafa;--card:#fff;--text:#0f172a;--muted:#64748b;--border:#e2e8f0;--pri:${color};--pri-d:${colorD};--pri-soft:${color}1a}
|
||||||
|
html.dark{--bg:#0a0a0e;--card:#13120a;--text:#fef9e7;--muted:#a39070;--border:#2a2512}
|
||||||
|
*{margin:0;padding:0;box-sizing:border-box}
|
||||||
|
html,body{min-height:100vh}
|
||||||
|
body{font-family:'Inter',system-ui,sans-serif;background:var(--bg);color:var(--text);line-height:1.55}
|
||||||
|
.hdr{position:relative;background:linear-gradient(110deg,${colorD},${color} 60%,${color}cc);color:#fff;padding:46px 22px 30px;overflow:hidden;border-bottom:2px solid ${color}33}
|
||||||
|
.hdr::before{content:'${wm}';position:absolute;right:-12px;top:50%;transform:translateY(-50%);font-family:'Outfit',sans-serif;font-size:clamp(5rem,15vw,11rem);font-weight:900;color:transparent;-webkit-text-stroke:1.5px rgba(255,255,255,.12);line-height:1;pointer-events:none}
|
||||||
|
.hdr-inner{position:relative;z-index:1;max-width:1100px;margin:0 auto;display:flex;align-items:center;gap:18px;flex-wrap:wrap}
|
||||||
|
.hdr-back{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;background:rgba(255,255,255,.14);border-radius:9px;color:#fff;text-decoration:none;font-size:.85rem;font-weight:600}
|
||||||
|
.hdr-back:hover{background:rgba(255,255,255,.24)}
|
||||||
|
.hdr h1{font-family:'Outfit',sans-serif;font-size:1.6rem;font-weight:900}
|
||||||
|
.hdr-sub{font-size:.92rem;opacity:.85;margin-top:4px}
|
||||||
|
.ic{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;display:inline-block;vertical-align:middle}
|
||||||
|
main{max-width:740px;margin:0 auto;padding:48px 22px 80px}
|
||||||
|
.coming{background:var(--card);border:1.5px solid var(--border);border-radius:18px;padding:32px 28px;text-align:center;box-shadow:0 4px 18px rgba(0,0,0,.05)}
|
||||||
|
.coming-icon{width:72px;height:72px;border-radius:20px;background:var(--pri-soft);display:flex;align-items:center;justify-content:center;margin:0 auto 18px;color:var(--pri-d)}
|
||||||
|
.coming-icon svg{width:36px;height:36px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
|
||||||
|
.coming h2{font-family:'Outfit',sans-serif;font-size:1.5rem;color:var(--pri-d);margin-bottom:12px}
|
||||||
|
.coming p{font-size:1rem;color:var(--muted);margin-bottom:8px}
|
||||||
|
.coming p b{color:var(--text)}
|
||||||
|
.coming-cta{margin-top:24px;display:inline-flex;align-items:center;gap:8px;padding:12px 22px;background:linear-gradient(135deg,var(--pri),var(--pri-d));color:#fff;border-radius:12px;font-weight:700;text-decoration:none;box-shadow:0 6px 22px ${color}33}
|
||||||
|
.coming-cta:hover{filter:brightness(1.08)}
|
||||||
|
.range-pill{display:inline-block;padding:5px 13px;background:var(--pri-soft);color:var(--pri-d);border-radius:99px;font-size:.84rem;font-weight:700;margin-top:6px}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<header class="hdr">
|
||||||
|
<div class="hdr-inner">
|
||||||
|
<div>
|
||||||
|
<a href="${hub}" class="hdr-back">
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><polyline points="15 18 9 12 15 6"/></svg>
|
||||||
|
К ${hubName}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h1>${ch}</h1>
|
||||||
|
<div class="hdr-sub">${range}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<div class="coming">
|
||||||
|
<div class="coming-icon">
|
||||||
|
<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
|
||||||
|
</div>
|
||||||
|
<h2>Глава в разработке</h2>
|
||||||
|
<p>Эта глава — часть нового курса <b>${hubName}</b>.</p>
|
||||||
|
<p>Содержание (${range}) уже спланировано — теория, интерактивы и финальный босс появятся в одной из ближайших волн реализации.</p>
|
||||||
|
<div class="range-pill">${range}</div>
|
||||||
|
<div style="margin-top:8px">
|
||||||
|
<a href="${hub}" class="coming-cta">
|
||||||
|
Вернуться к учебнику
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><polyline points="9 18 15 12 9 6"/></svg>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
`;
|
||||||
|
|
||||||
|
for (const s of STUBS) {
|
||||||
|
fs.writeFileSync(path.join(root, s.f), tpl(s), 'utf8');
|
||||||
|
console.log('wrote ' + s.f);
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
-- Algebra 7 hub migration.
|
||||||
|
-- Adds hub row + 4 chapter children for Алгебра 7 (Арефьева/Пирютко, 2022).
|
||||||
|
-- Pattern mirrors 014_algebra_8_hub.sql and 017_geometry_8_hub.sql.
|
||||||
|
|
||||||
|
-- 1. Hub row.
|
||||||
|
INSERT INTO textbooks
|
||||||
|
(slug, subject, grade, title, author, description, html_path, para_count, color, sort_order, is_active)
|
||||||
|
VALUES
|
||||||
|
('algebra-7', 'math', 7, 'Алгебра — 7 класс', '',
|
||||||
|
'Полный курс алгебры 7 класса по учебнику И. Г. Арефьевой и О. Н. Пирютко: степени, многочлены и ФСУ, линейные уравнения и функция, системы. 4 главы, 25 параграфов, ~120 интерактивов, 21 босс-проверка.',
|
||||||
|
'algebra_7_hub.html', 25, 'pink', 6, 1);
|
||||||
|
|
||||||
|
-- 2. Chapter children.
|
||||||
|
INSERT INTO textbooks
|
||||||
|
(slug, subject, grade, title, author, description, html_path, para_count, color, sort_order, is_active, parent_slug)
|
||||||
|
VALUES
|
||||||
|
('algebra-7-ch1', 'math', 7, 'Алгебра 7 · Степень',
|
||||||
|
'',
|
||||||
|
'§1–§3: степень с натуральным и целым показателем, свойства степени, стандартный вид числа.',
|
||||||
|
'algebra_7_ch1.html', 3, 'amber', 1, 1, 'algebra-7'),
|
||||||
|
('algebra-7-ch2', 'math', 7, 'Алгебра 7 · Выражения и преобразования',
|
||||||
|
'',
|
||||||
|
'§4–§14: числовые выражения и тождества, одночлены и многочлены, действия с ними, формулы сокращённого умножения, разложение на множители.',
|
||||||
|
'algebra_7_ch2.html', 11, 'emerald', 2, 1, 'algebra-7'),
|
||||||
|
('algebra-7-ch3', 'math', 7, 'Алгебра 7 · Линейные уравнения. Неравенства. Функция',
|
||||||
|
'',
|
||||||
|
'§15–§20: линейные уравнения и текстовые задачи, числовые и линейные неравенства, функция и её график, линейная функция.',
|
||||||
|
'algebra_7_ch3.html', 6, 'violet', 3, 1, 'algebra-7'),
|
||||||
|
('algebra-7-ch4', 'math', 7, 'Алгебра 7 · Системы линейных уравнений',
|
||||||
|
'',
|
||||||
|
'§21–§25: линейное уравнение с двумя переменными, графический способ, системы и способы их решения, текстовые задачи на системы.',
|
||||||
|
'algebra_7_ch4.html', 5, 'cyan', 4, 1, 'algebra-7');
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
-- Geometry 7 hub migration.
|
||||||
|
-- Adds hub row + 5 chapter children for Геометрия 7 (Казаков, 2022).
|
||||||
|
-- Pattern mirrors 017_geometry_8_hub.sql.
|
||||||
|
|
||||||
|
-- 1. Hub row.
|
||||||
|
INSERT INTO textbooks
|
||||||
|
(slug, subject, grade, title, author, description, html_path, para_count, color, sort_order, is_active)
|
||||||
|
VALUES
|
||||||
|
('geometry-7', 'math', 7, 'Геометрия — 7 класс', '',
|
||||||
|
'Полный курс геометрии 7 класса по учебнику В. В. Казакова: начальные понятия, признаки равенства треугольников, параллельность прямых, сумма углов треугольника, задачи на построение. 5 глав, 31 параграф, ~150 интерактивов, 25 боссов-проверок.',
|
||||||
|
'geometry_7_hub.html', 31, 'blue', 7, 1);
|
||||||
|
|
||||||
|
-- 2. Chapter children.
|
||||||
|
INSERT INTO textbooks
|
||||||
|
(slug, subject, grade, title, author, description, html_path, para_count, color, sort_order, is_active, parent_slug)
|
||||||
|
VALUES
|
||||||
|
('geometry-7-ch1', 'math', 7, 'Геометрия 7 · Начальные понятия',
|
||||||
|
'',
|
||||||
|
'§1–§7: прямая, луч, отрезок, ломаная, окружность и круг, углы и их виды, смежные и вертикальные углы, перпендикулярные прямые.',
|
||||||
|
'geometry_7_ch1.html', 7, 'amber', 1, 1, 'geometry-7'),
|
||||||
|
('geometry-7-ch2', 'math', 7, 'Геометрия 7 · Признаки равенства треугольников',
|
||||||
|
'',
|
||||||
|
'§8–§14: три признака равенства треугольников, высота, медиана и биссектриса, равнобедренный треугольник и его признаки, серединный перпендикуляр.',
|
||||||
|
'geometry_7_ch2.html', 7, 'emerald', 2, 1, 'geometry-7'),
|
||||||
|
('geometry-7-ch3', 'math', 7, 'Геометрия 7 · Параллельность прямых',
|
||||||
|
'',
|
||||||
|
'§15–§18: признаки параллельности прямых, аксиома параллельных, свойства параллельных, углы с параллельными и перпендикулярными сторонами.',
|
||||||
|
'geometry_7_ch3.html', 4, 'purple', 3, 1, 'geometry-7'),
|
||||||
|
('geometry-7-ch4', 'math', 7, 'Геометрия 7 · Сумма углов треугольника',
|
||||||
|
'',
|
||||||
|
'§19–§26: сумма углов, внешний угол, соотношения между сторонами и углами, неравенство треугольника, прямоугольные треугольники, биссектриса угла, свойство катета против угла 30°.',
|
||||||
|
'geometry_7_ch4.html', 8, 'cyan', 4, 1, 'geometry-7'),
|
||||||
|
('geometry-7-ch5', 'math', 7, 'Геометрия 7 · Задачи на построение',
|
||||||
|
'',
|
||||||
|
'§27–§31: основные задачи на построение циркулем и линейкой, треугольник по трём сторонам, биссектриса, середина отрезка, перпендикулярная прямая, геометрическое место точек.',
|
||||||
|
'geometry_7_ch5.html', 5, 'pink', 5, 1, 'geometry-7');
|
||||||
@@ -0,0 +1,346 @@
|
|||||||
|
# План реализации учебников: Алгебра 7 + Геометрия 7
|
||||||
|
|
||||||
|
> **Источники** (строго по программе РБ, 2-е изд. 2022):
|
||||||
|
> - `algebra_7kl_arefieva_rus_2022.pdf` — И. Г. Арефьева, О. Н. Пирютко. Алгебра. 7 класс. — Мн.: Народная асвета, 2022 (312 с., 25 §, 4 главы)
|
||||||
|
> - `geometriya_7kl_kazakov_rus_2022.pdf` — В. В. Казаков. Геометрия. 7 класс. — Мн.: Народная асвета, 2022 (189 с., 31 §, 5 глав)
|
||||||
|
>
|
||||||
|
> **Архитектура** — реплика паттерна `algebra-8` / `geometry-8`:
|
||||||
|
> - 1 hub-страница + N chapter-страниц на учебник
|
||||||
|
> - `textbooks` + `parent_slug` группирует главы под hub
|
||||||
|
> - SPA-чаптер: `PARAS[]` + `BUILDERS{}` + lazy build + boss-fight в финале
|
||||||
|
> - XP/прогресс через `/js/xp.js` и `/js/api.js` (`window.LS.*`)
|
||||||
|
> - Стек: vanilla JS, inline SVG (`.ic`), KaTeX CDN, без бандлера
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЧАСТЬ 1. АЛГЕБРА 7 — содержание (Арефьева/Пирютко 2022)
|
||||||
|
|
||||||
|
### Глава 1. Степень с натуральным и целым показателями (3 §, с. 4-43)
|
||||||
|
| § | Тема | Стр. |
|
||||||
|
|---|------|------|
|
||||||
|
| §1 | Степень с натуральным показателем и её свойства | 4 |
|
||||||
|
| §2 | Степень с целым показателем и её свойства | 22 |
|
||||||
|
| §3 | Стандартный вид числа | 34 |
|
||||||
|
| ★ | Практическая математика · Итоговая самооценка · Увлекательная математика | 40-43 |
|
||||||
|
|
||||||
|
### Глава 2. Выражения и их преобразования (11 §, с. 44-145)
|
||||||
|
| § | Тема | Стр. |
|
||||||
|
|---|------|------|
|
||||||
|
| §4 | Числовые выражения и выражения с переменными | 44 |
|
||||||
|
| §5 | Тождество | 53 |
|
||||||
|
| §6 | Одночлен | 60 |
|
||||||
|
| §7 | Действия с одночленами | 67 |
|
||||||
|
| §8 | Многочлен | 78 |
|
||||||
|
| §9 | Сложение и вычитание многочленов | 84 |
|
||||||
|
| §10 | Умножение и деление многочлена на одночлен | 91 |
|
||||||
|
| §11 | Умножение многочленов | 98 |
|
||||||
|
| §12 | ФСУ: квадрат суммы и квадрат разности | 105 |
|
||||||
|
| §13 | ФСУ: произведение суммы и разности (a²-b²) | 116 |
|
||||||
|
| §14 | Разложение многочлена на множители | 125 |
|
||||||
|
| ★ | Итог главы | 141-145 |
|
||||||
|
|
||||||
|
### Глава 3. Линейные уравнения. Линейные неравенства. Линейная функция (6 §, с. 146-253)
|
||||||
|
| § | Тема | Стр. |
|
||||||
|
|---|------|------|
|
||||||
|
| §15 | Линейные уравнения с одной переменной | 146 |
|
||||||
|
| §16 | Решение текстовых задач с помощью линейных уравнений | 160 |
|
||||||
|
| §17 | Числовые неравенства | 175 |
|
||||||
|
| §18 | Линейные неравенства с одной переменной | 191 |
|
||||||
|
| §19 | Функция | 205 |
|
||||||
|
| §20 | Линейная функция и её свойства | 226 |
|
||||||
|
| ★ | Итог главы | 250-253 |
|
||||||
|
|
||||||
|
### Глава 4. Системы двух линейных уравнений с двумя переменными (5 §, с. 254-302)
|
||||||
|
| § | Тема | Стр. |
|
||||||
|
|---|------|------|
|
||||||
|
| §21 | Линейное уравнение с двумя переменными | 254 |
|
||||||
|
| §22 | График линейного уравнения ax + by = c | 262 |
|
||||||
|
| §23 | Система линейных уравнений с двумя переменными | 268 |
|
||||||
|
| §24 | Способы решения системы линейных уравнений | 277 |
|
||||||
|
| §25 | Решение текстовых задач с помощью системы | 289 |
|
||||||
|
| ★ | Итог главы | 299-302 |
|
||||||
|
|
||||||
|
**ИТОГО Алгебра 7: 4 главы, 25 §, ~120 интерактивов (5/§), 4 босса-финала.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЧАСТЬ 2. ГЕОМЕТРИЯ 7 — содержание (Казаков 2022)
|
||||||
|
|
||||||
|
### Глава I. Начальные понятия геометрии (7 §, с. 8-55)
|
||||||
|
| § | Тема | Стр. |
|
||||||
|
|---|------|------|
|
||||||
|
| §1 | Повторение геометрического материала 5-6 классов | 8 |
|
||||||
|
| §2 | Предмет геометрии | 13 |
|
||||||
|
| §3 | Прямая. Луч. Отрезок. Ломаная | 19 |
|
||||||
|
| §4 | Окружность и круг | 30 |
|
||||||
|
| §5 | Угол. Виды углов | 35 |
|
||||||
|
| §6 | Смежные углы. Вертикальные углы | 41 |
|
||||||
|
| §7 | Перпендикулярные прямые | 47 |
|
||||||
|
|
||||||
|
### Глава II. Признаки равенства треугольников (7 §, с. 56-91)
|
||||||
|
| § | Тема | Стр. |
|
||||||
|
|---|------|------|
|
||||||
|
| §8 | Треугольники | 56 |
|
||||||
|
| §9 | Первый и второй признаки равенства треугольников | 60 |
|
||||||
|
| §10 | Высота, медиана и биссектриса треугольника | 66 |
|
||||||
|
| §11 | Равнобедренный треугольник | 70 |
|
||||||
|
| §12 | Признаки равнобедренного треугольника | 76 |
|
||||||
|
| §13 | Третий признак равенства треугольников | 80 |
|
||||||
|
| §14 | Серединный перпендикуляр к отрезку | 84 |
|
||||||
|
|
||||||
|
### Глава III. Параллельность прямых на плоскости (4 §, с. 92-117)
|
||||||
|
| § | Тема | Стр. |
|
||||||
|
|---|------|------|
|
||||||
|
| §15 | Признаки параллельности прямых | 92 |
|
||||||
|
| §16 | Аксиома параллельных прямых | 100 |
|
||||||
|
| §17 | Свойства параллельных прямых | 105 |
|
||||||
|
| §18* | Углы с соответственно параллельными/перпендикулярными сторонами | 112 |
|
||||||
|
|
||||||
|
### Глава IV. Сумма углов треугольника (8 §, с. 118-157)
|
||||||
|
| § | Тема | Стр. |
|
||||||
|
|---|------|------|
|
||||||
|
| §19 | Сумма углов треугольника | 118 |
|
||||||
|
| §20 | Внешний угол треугольника | 124 |
|
||||||
|
| §21 | Соотношения между сторонами и углами треугольника | 128 |
|
||||||
|
| §22 | Неравенство треугольника | 133 |
|
||||||
|
| §23 | Признаки равенства прямоугольных треугольников | 137 |
|
||||||
|
| §24 | Свойство точек биссектрисы угла | 142 |
|
||||||
|
| §25 | Свойство катета, лежащего против угла в 30° | 145 |
|
||||||
|
| §26 | Расстояние между параллельными прямыми | 149 |
|
||||||
|
|
||||||
|
### Глава V. Задачи на построение (5 §, с. 158-175)
|
||||||
|
| § | Тема | Стр. |
|
||||||
|
|---|------|------|
|
||||||
|
| §27 | О задачах на построение | 158 |
|
||||||
|
| §28 | Построение треугольника по 3 сторонам. Построение угла, равного данному | 162 |
|
||||||
|
| §29 | Построение биссектрисы угла. Построение середины отрезка | 165 |
|
||||||
|
| §30 | Построение прямой, перпендикулярной данной | 167 |
|
||||||
|
| §31 | Геометрическое место точек | 171 |
|
||||||
|
|
||||||
|
**ИТОГО Геометрия 7: 5 глав, 31 §, ~150 интерактивов (5/§), 5 боссов.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЧАСТЬ 3. АРХИТЕКТУРА (повторяем алгебру 8 / геометрию 8)
|
||||||
|
|
||||||
|
### 3.1. Таблица `textbooks` — новые строки
|
||||||
|
|
||||||
|
```
|
||||||
|
Алгебра 7 (hub)
|
||||||
|
├─ algebra-7 (hub, parent_slug=NULL, html=algebra_7_hub.html)
|
||||||
|
├─ algebra-7-ch1 (3 §, parent_slug=algebra-7, color=amber)
|
||||||
|
├─ algebra-7-ch2 (11 §, parent_slug=algebra-7, color=emerald)
|
||||||
|
├─ algebra-7-ch3 (6 §, parent_slug=algebra-7, color=violet)
|
||||||
|
└─ algebra-7-ch4 (5 §, parent_slug=algebra-7, color=cyan)
|
||||||
|
|
||||||
|
Геометрия 7 (hub)
|
||||||
|
├─ geometry-7 (hub, parent_slug=NULL, html=geometry_7_hub.html)
|
||||||
|
├─ geometry-7-ch1 (7 §, parent_slug=geometry-7, color=amber)
|
||||||
|
├─ geometry-7-ch2 (7 §, parent_slug=geometry-7, color=emerald)
|
||||||
|
├─ geometry-7-ch3 (4 §, parent_slug=geometry-7, color=purple)
|
||||||
|
├─ geometry-7-ch4 (8 §, parent_slug=geometry-7, color=cyan)
|
||||||
|
└─ geometry-7-ch5 (5 §, parent_slug=geometry-7, color=pink)
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.2. Файлы под `frontend/textbooks/`
|
||||||
|
```
|
||||||
|
algebra_7_hub.html ~12 КБ (карточки 4 глав + общий прогресс)
|
||||||
|
algebra_7_ch1.html ~250 КБ (3 § + final + builders)
|
||||||
|
algebra_7_ch2.html ~600 КБ (11 § — самая большая глава)
|
||||||
|
algebra_7_ch3.html ~400 КБ (6 § + функции + графики)
|
||||||
|
algebra_7_ch4.html ~350 КБ (5 § + системы + графики 2D)
|
||||||
|
|
||||||
|
geometry_7_hub.html ~12 КБ
|
||||||
|
geometry_7_ch1.html ~350 КБ (7 §, базовая геометрия)
|
||||||
|
geometry_7_ch2.html ~400 КБ (7 §, треугольники)
|
||||||
|
geometry_7_ch3.html ~230 КБ (4 §, параллельность)
|
||||||
|
geometry_7_ch4.html ~450 КБ (8 §, углы)
|
||||||
|
geometry_7_ch5.html ~280 КБ (5 §, задачи на построение)
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.3. Миграции БД (порядок номеров: после 017)
|
||||||
|
```
|
||||||
|
018_algebra_7_hub.sql — hub + 4 chapter rows + индекс по grade
|
||||||
|
019_geometry_7_hub.sql — hub + 5 chapter rows
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.4. Цветовая палитра (HSL ≈ как в геометрии 8)
|
||||||
|
|
||||||
|
| Глава | Алгебра 7 | Геометрия 7 |
|
||||||
|
|-------|-----------|-------------|
|
||||||
|
| Ch1 | `#d97706` amber (степени → "огонь") | `#d97706` amber (начала) |
|
||||||
|
| Ch2 | `#059669` emerald (выражения → "рост") | `#059669` emerald (треугольники) |
|
||||||
|
| Ch3 | `#7c3aed` violet (уравнения/функции) | `#7c3aed` violet (параллели) |
|
||||||
|
| Ch4 | `#0891b2` cyan (системы) | `#0891b2` cyan (углы) |
|
||||||
|
| Ch5 | — | `#db2777` pink (построения) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЧАСТЬ 4. ИНТЕРАКТИВНЫЕ ЭЛЕМЕНТЫ — каталог типов
|
||||||
|
|
||||||
|
Каждый § содержит 4-6 интерактивов. Типы и где применять:
|
||||||
|
|
||||||
|
### Универсальные (оба учебника)
|
||||||
|
- **Тренажёр-калькулятор** — поле ввода + проверка ответа (КаТеХ для формул)
|
||||||
|
- **Перетаскивание (DnD)** — сопоставить термин ↔ определение
|
||||||
|
- **Множественный выбор** — 4 варианта, 1 правильный, объяснение
|
||||||
|
- **Заполни пропуск** — формула с _____ полями
|
||||||
|
- **Шаг-за-шагом** — раскрытие решения с проверками после каждого шага
|
||||||
|
- **Викторина** — серия мелких вопросов, итоговый счёт
|
||||||
|
|
||||||
|
### Алгебра 7 — специфические
|
||||||
|
- **Степень-конструктор** (§1-§2) — кликом изменяешь основание/показатель, видишь результат
|
||||||
|
- **Стандартный вид число-машина** (§3) — слайдер мантисса+порядок
|
||||||
|
- **Полиномиальный набор** (§6-§11) — drag тайлы (одночлены) → сумма/произведение
|
||||||
|
- **ФСУ-визуализатор** (§12-§13) — квадрат суммы как геометрическая площадь (4 цветных прямоугольника)
|
||||||
|
- **Разложение-пазл** (§14) — найди общий множитель / группировка / ФСУ
|
||||||
|
- **Уравнение-весы** (§15-§16) — двусторонняя чаша весов, перенос членов
|
||||||
|
- **Координатная плоскость** (§19-§22) — клик задаёт точку, рисуем линию
|
||||||
|
- **Слайдеры k/b** (§20) — `y = kx + b` с интерактивными ползунками
|
||||||
|
- **Метод подстановки/сложения** (§24) — пошаговая анимация решения системы
|
||||||
|
|
||||||
|
### Геометрия 7 — специфические
|
||||||
|
- **SVG-конструктор фигур** (вся книга) — drag вершин треугольника/угла + измерения углов
|
||||||
|
- **Проверка коллинеарности** (§3) — три точки → проверяем равенство сумм отрезков
|
||||||
|
- **Транспортир** (§5-§6) — интерактивный круговой транспортир, движение луча
|
||||||
|
- **Признаки равенства Δ** (§9, §13) — сопоставить два Δ, перетащить совпадающие элементы
|
||||||
|
- **Биссектриса/медиана/высота-симулятор** (§10) — перетягивай вершины, наблюдай поведение
|
||||||
|
- **Серединный перпендикуляр** (§14) — точка-проверка равноудалённости
|
||||||
|
- **Углы при пересечении** (§15-§17) — две параллельные + секущая, цветовая разметка 8 углов
|
||||||
|
- **Сумма углов** (§19) — разрежь треугольник на 3 части → сложи в развёрнутый угол
|
||||||
|
- **Неравенство треугольника** (§22) — слайдеры длин сторон, "невозможно/возможно"
|
||||||
|
- **Построения циркулем** (§27-§31) — пошаговая анимация с командами «возьми циркуль», «проведи дугу»
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЧАСТЬ 5. БОССЫ (финальные проверки)
|
||||||
|
|
||||||
|
В конце каждой главы — `final<N>` параграф с **5-7 боссами**:
|
||||||
|
- Босс = большая задача (5 этапов в случайном порядке) с ХП-баром
|
||||||
|
- За полное прохождение: +50 XP + звезда главы
|
||||||
|
- Цвета боссов = palette главы
|
||||||
|
- Структура из `geometry_8_ch1.html`: `BOSSES = [{n,title,color,steps:[...]}]`
|
||||||
|
|
||||||
|
### Конкретно
|
||||||
|
| Учебник | Боссы (по главам) | Всего |
|
||||||
|
|---------|-------------------|-------|
|
||||||
|
| Алгебра 7 | 5+6+5+5 | 21 |
|
||||||
|
| Геометрия 7 | 5+6+4+6+4 | 25 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЧАСТЬ 6. ПОРЯДОК РЕАЛИЗАЦИИ — ВОЛНЫ
|
||||||
|
|
||||||
|
> Каждая волна = 1 коммит + push. Тестируется в браузере перед мержем.
|
||||||
|
|
||||||
|
### ВОЛНА 0. Каркас (1 коммит)
|
||||||
|
- [ ] Миграции `018_algebra_7_hub.sql`, `019_geometry_7_hub.sql`
|
||||||
|
- [ ] Hub-страницы: `algebra_7_hub.html`, `geometry_7_hub.html` (по шаблону `geometry_8_hub.html`)
|
||||||
|
- [ ] Регистрация в `admin-textbooks.html` (если нужны UI-настройки)
|
||||||
|
- [ ] Регистрация в `library.html` / `dashboard.html` (если там показывается список)
|
||||||
|
- [ ] Проверка: hub-карточки открываются (заглушки 4/5 глав)
|
||||||
|
|
||||||
|
### ВОЛНЫ 1-4. АЛГЕБРА 7 — по главам
|
||||||
|
| Волна | Файл | § | Время-оценка | Главные риски |
|
||||||
|
|-------|------|---|--------------|---------------|
|
||||||
|
| 1 | `algebra_7_ch1.html` | §1-§3 + final | M | Степени с целым показателем — много граничных случаев |
|
||||||
|
| 2 | `algebra_7_ch2.html` | §4-§14 + final | XL | 11 § — самая большая глава; ФСУ-визуализаторы |
|
||||||
|
| 3 | `algebra_7_ch3.html` | §15-§20 + final | L | Линейная функция — нужен SVG-график с осями |
|
||||||
|
| 4 | `algebra_7_ch4.html` | §21-§25 + final | L | Системы — пошаговая анимация метода |
|
||||||
|
|
||||||
|
### ВОЛНЫ 5-9. ГЕОМЕТРИЯ 7 — по главам
|
||||||
|
| Волна | Файл | § | Время-оценка | Главные риски |
|
||||||
|
|-------|------|---|--------------|---------------|
|
||||||
|
| 5 | `geometry_7_ch1.html` | §1-§7 + final | L | Базовые SVG-примитивы (отрезок/луч/угол) — задел на всю книгу |
|
||||||
|
| 6 | `geometry_7_ch2.html` | §8-§14 + final | L | Признаки равенства Δ — DnD сопоставление сторон/углов |
|
||||||
|
| 7 | `geometry_7_ch3.html` | §15-§18 + final | M | Параллельные + секущая = 8 углов |
|
||||||
|
| 8 | `geometry_7_ch4.html` | §19-§26 + final | L | Внешний угол + неравенство Δ + 30° свойство |
|
||||||
|
| 9 | `geometry_7_ch5.html` | §27-§31 + final | M | Анимации построений циркулем (SVG-`<animateTransform>`) |
|
||||||
|
|
||||||
|
### ВОЛНА 10. Полировка
|
||||||
|
- [ ] Аудит SVG-геометрии (вся точность чисел — по уроку Геометрии 8 ch4)
|
||||||
|
- [ ] Мобильная адаптация (≤768px): свернуть navi, увеличить хитбоксы DnD
|
||||||
|
- [ ] Dark mode — проверка по всем боссам
|
||||||
|
- [ ] Кэш-инвалидация (Cache-Control no-cache в `<head>`)
|
||||||
|
- [ ] Регрессия других учебников (не сломали)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЧАСТЬ 7. КОНКРЕТНЫЕ ТЕХНИЧЕСКИЕ НОТЫ
|
||||||
|
|
||||||
|
### 7.1. SVG-builder helpers (вынести в `frontend/js/geom7_svg.js`)
|
||||||
|
Геометрия 7 много раз использует одни и те же сценки. Прежде чем писать главу 1, сделать:
|
||||||
|
```js
|
||||||
|
LS.geom7 = {
|
||||||
|
segment(x1,y1,x2,y2,opts), point(x,y,label),
|
||||||
|
triangle(p1,p2,p3,opts), angleArc(vx,vy, r, a1,a2),
|
||||||
|
parallel(line1,line2, secant), perpendicular(p, line),
|
||||||
|
draggable(svgEl, onMove), measure(x1,y1,x2,y2)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7.2. Координатные оси (для алгебры §19-§22 и §22-§24)
|
||||||
|
Аналогично — `frontend/js/algebra7_axes.js`: координатная сетка, точка, прямая по двум точкам, прямая `y=kx+b`, прямая `ax+by=c`.
|
||||||
|
|
||||||
|
### 7.3. KaTeX rendering
|
||||||
|
Уже подключено через CDN. Делимитеры `$...$` для inline, `$$...$$` для блока. Учить с примеров `geometry_8_ch1.html` строки 12-13.
|
||||||
|
|
||||||
|
### 7.4. Прогресс / XP
|
||||||
|
- `LS.markParaRead(textbook_slug, para_id)` — после каждого прочитанного §
|
||||||
|
- `LS.giveXP(amount, reason)` — после каждого пройденного интерактива (+5 XP)
|
||||||
|
- Босс = +50 XP, +1 звезда главы
|
||||||
|
|
||||||
|
### 7.5. Регистрация в `admin.html` (ADMIN_SIMS)
|
||||||
|
Если учебники прокидываются в админку (как симуляции в lab.html) — **немедленно** обновить ADMIN_SIMS массив. См. memory `feedback_sims_admin_sync.md`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЧАСТЬ 8. КРИТЕРИИ ПРИЁМКИ
|
||||||
|
|
||||||
|
Каждая глава считается готовой когда:
|
||||||
|
1. Все § открываются по клику из навигатора без ошибок в консоли
|
||||||
|
2. KaTeX рендерит все формулы (нет `$...$` в plain text)
|
||||||
|
3. Все интерактивы дают обратную связь (✓/✗) и +XP
|
||||||
|
4. Финальный босс проходим (5 этапов → +50 XP, +звезда)
|
||||||
|
5. Прогресс сохраняется через `LS.markParaRead`
|
||||||
|
6. На мобильном (375×667) — нет горизонтального скролла
|
||||||
|
7. Dark mode не ломает контрастность
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЧАСТЬ 9. ОЦЕНКА ОБЪЁМА
|
||||||
|
|
||||||
|
| Метрика | Алгебра 7 | Геометрия 7 | Всего |
|
||||||
|
|---------|-----------|-------------|-------|
|
||||||
|
| HTML-файлов | 5 | 6 | 11 |
|
||||||
|
| Объём кода (~) | 1.6 МБ | 1.7 МБ | 3.3 МБ |
|
||||||
|
| Параграфов (§) | 25 | 31 | 56 |
|
||||||
|
| Интерактивов | ~120 | ~150 | ~270 |
|
||||||
|
| Боссов | 21 | 25 | 46 |
|
||||||
|
| SQL-миграций | 1 | 1 | 2 |
|
||||||
|
| JS-хелперов | 1 (`algebra7_axes.js`) | 1 (`geom7_svg.js`) | 2 |
|
||||||
|
| Коммитов | 4 | 5 | 9 + 1 (Wave 0) + 1 (Wave 10) = **11** |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ЧАСТЬ 10. РИСКИ И МИТИГАЦИИ
|
||||||
|
|
||||||
|
| Риск | Митигация |
|
||||||
|
|------|-----------|
|
||||||
|
| Геометрия 7 § ОЧЕНЬ много SVG → копипаста | Сначала Глава 1 = задел библиотеки `geom7_svg.js`. Дальше реюз. |
|
||||||
|
| ФСУ §12-§13 — визуализатор квадрата суммы трудоёмкий | Готовый SVG-шаблон из MathJS / Manim ↔ ручной inline-SVG |
|
||||||
|
| Чаптер-файл > 600 КБ (Алгебра ch2) → IDE тормозит | Можно разбить ch2 на 2 файла (как было сделано для физики). Решение принять перед стартом волны 2. |
|
||||||
|
| Конфликт sort_order в `textbooks` | После hub-вставки — обновить sort_order у physics-8/geometry-8, чтобы 7-класс шёл первым. |
|
||||||
|
| Регрессия — сломать существующие учебники | Каждая волна = свой коммит, не трогаем чужие файлы. |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ИТОГО
|
||||||
|
|
||||||
|
- **Старт**: Волна 0 (миграции + 2 hub'a) — 1 коммит, ~2 ч.
|
||||||
|
- **Алгебра 7**: 4 волны, ~16-20 ч работы.
|
||||||
|
- **Геометрия 7**: 5 волн, ~22-28 ч работы.
|
||||||
|
- **Полировка**: 1 волна, ~4 ч.
|
||||||
|
- **Всего**: ~45-55 ч работы, 11 коммитов, 11 HTML + 2 SQL + 2 JS-хелпера.
|
||||||
|
|
||||||
|
> После утверждения плана: запустить Волну 0 (миграции + hub'ы) одним коммитом — `feat(text7): caркас алгебры 7 и геометрии 7 (hubs + миграции)`.
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||||
|
<title>Глава 1 · Степень</title>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@600;800;900&family=Inter:wght@400;600;700&display=swap" rel="stylesheet">
|
||||||
|
<script src="/js/api.js" defer></script>
|
||||||
|
<style>
|
||||||
|
:root{--bg:#fafafa;--card:#fff;--text:#0f172a;--muted:#64748b;--border:#e2e8f0;--pri:#d97706;--pri-d:#b45309;--pri-soft:#d977061a}
|
||||||
|
html.dark{--bg:#0a0a0e;--card:#13120a;--text:#fef9e7;--muted:#a39070;--border:#2a2512}
|
||||||
|
*{margin:0;padding:0;box-sizing:border-box}
|
||||||
|
html,body{min-height:100vh}
|
||||||
|
body{font-family:'Inter',system-ui,sans-serif;background:var(--bg);color:var(--text);line-height:1.55}
|
||||||
|
.hdr{position:relative;background:linear-gradient(110deg,#b45309,#d97706 60%,#d97706cc);color:#fff;padding:46px 22px 30px;overflow:hidden;border-bottom:2px solid #d9770633}
|
||||||
|
.hdr::before{content:'aⁿ';position:absolute;right:-12px;top:50%;transform:translateY(-50%);font-family:'Outfit',sans-serif;font-size:clamp(5rem,15vw,11rem);font-weight:900;color:transparent;-webkit-text-stroke:1.5px rgba(255,255,255,.12);line-height:1;pointer-events:none}
|
||||||
|
.hdr-inner{position:relative;z-index:1;max-width:1100px;margin:0 auto;display:flex;align-items:center;gap:18px;flex-wrap:wrap}
|
||||||
|
.hdr-back{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;background:rgba(255,255,255,.14);border-radius:9px;color:#fff;text-decoration:none;font-size:.85rem;font-weight:600}
|
||||||
|
.hdr-back:hover{background:rgba(255,255,255,.24)}
|
||||||
|
.hdr h1{font-family:'Outfit',sans-serif;font-size:1.6rem;font-weight:900}
|
||||||
|
.hdr-sub{font-size:.92rem;opacity:.85;margin-top:4px}
|
||||||
|
.ic{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;display:inline-block;vertical-align:middle}
|
||||||
|
main{max-width:740px;margin:0 auto;padding:48px 22px 80px}
|
||||||
|
.coming{background:var(--card);border:1.5px solid var(--border);border-radius:18px;padding:32px 28px;text-align:center;box-shadow:0 4px 18px rgba(0,0,0,.05)}
|
||||||
|
.coming-icon{width:72px;height:72px;border-radius:20px;background:var(--pri-soft);display:flex;align-items:center;justify-content:center;margin:0 auto 18px;color:var(--pri-d)}
|
||||||
|
.coming-icon svg{width:36px;height:36px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
|
||||||
|
.coming h2{font-family:'Outfit',sans-serif;font-size:1.5rem;color:var(--pri-d);margin-bottom:12px}
|
||||||
|
.coming p{font-size:1rem;color:var(--muted);margin-bottom:8px}
|
||||||
|
.coming p b{color:var(--text)}
|
||||||
|
.coming-cta{margin-top:24px;display:inline-flex;align-items:center;gap:8px;padding:12px 22px;background:linear-gradient(135deg,var(--pri),var(--pri-d));color:#fff;border-radius:12px;font-weight:700;text-decoration:none;box-shadow:0 6px 22px #d9770633}
|
||||||
|
.coming-cta:hover{filter:brightness(1.08)}
|
||||||
|
.range-pill{display:inline-block;padding:5px 13px;background:var(--pri-soft);color:var(--pri-d);border-radius:99px;font-size:.84rem;font-weight:700;margin-top:6px}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<header class="hdr">
|
||||||
|
<div class="hdr-inner">
|
||||||
|
<div>
|
||||||
|
<a href="/textbook/algebra-7" class="hdr-back">
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><polyline points="15 18 9 12 15 6"/></svg>
|
||||||
|
К Алгебра 7
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h1>Глава 1 · Степень</h1>
|
||||||
|
<div class="hdr-sub">§1–§3</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<div class="coming">
|
||||||
|
<div class="coming-icon">
|
||||||
|
<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
|
||||||
|
</div>
|
||||||
|
<h2>Глава в разработке</h2>
|
||||||
|
<p>Эта глава — часть нового курса <b>Алгебра 7</b>.</p>
|
||||||
|
<p>Содержание (§1–§3) уже спланировано — теория, интерактивы и финальный босс появятся в одной из ближайших волн реализации.</p>
|
||||||
|
<div class="range-pill">§1–§3</div>
|
||||||
|
<div style="margin-top:8px">
|
||||||
|
<a href="/textbook/algebra-7" class="coming-cta">
|
||||||
|
Вернуться к учебнику
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><polyline points="9 18 15 12 9 6"/></svg>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||||
|
<title>Глава 2 · Выражения и их преобразования</title>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@600;800;900&family=Inter:wght@400;600;700&display=swap" rel="stylesheet">
|
||||||
|
<script src="/js/api.js" defer></script>
|
||||||
|
<style>
|
||||||
|
:root{--bg:#fafafa;--card:#fff;--text:#0f172a;--muted:#64748b;--border:#e2e8f0;--pri:#059669;--pri-d:#047857;--pri-soft:#0596691a}
|
||||||
|
html.dark{--bg:#0a0a0e;--card:#13120a;--text:#fef9e7;--muted:#a39070;--border:#2a2512}
|
||||||
|
*{margin:0;padding:0;box-sizing:border-box}
|
||||||
|
html,body{min-height:100vh}
|
||||||
|
body{font-family:'Inter',system-ui,sans-serif;background:var(--bg);color:var(--text);line-height:1.55}
|
||||||
|
.hdr{position:relative;background:linear-gradient(110deg,#047857,#059669 60%,#059669cc);color:#fff;padding:46px 22px 30px;overflow:hidden;border-bottom:2px solid #05966933}
|
||||||
|
.hdr::before{content:'P(x)';position:absolute;right:-12px;top:50%;transform:translateY(-50%);font-family:'Outfit',sans-serif;font-size:clamp(5rem,15vw,11rem);font-weight:900;color:transparent;-webkit-text-stroke:1.5px rgba(255,255,255,.12);line-height:1;pointer-events:none}
|
||||||
|
.hdr-inner{position:relative;z-index:1;max-width:1100px;margin:0 auto;display:flex;align-items:center;gap:18px;flex-wrap:wrap}
|
||||||
|
.hdr-back{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;background:rgba(255,255,255,.14);border-radius:9px;color:#fff;text-decoration:none;font-size:.85rem;font-weight:600}
|
||||||
|
.hdr-back:hover{background:rgba(255,255,255,.24)}
|
||||||
|
.hdr h1{font-family:'Outfit',sans-serif;font-size:1.6rem;font-weight:900}
|
||||||
|
.hdr-sub{font-size:.92rem;opacity:.85;margin-top:4px}
|
||||||
|
.ic{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;display:inline-block;vertical-align:middle}
|
||||||
|
main{max-width:740px;margin:0 auto;padding:48px 22px 80px}
|
||||||
|
.coming{background:var(--card);border:1.5px solid var(--border);border-radius:18px;padding:32px 28px;text-align:center;box-shadow:0 4px 18px rgba(0,0,0,.05)}
|
||||||
|
.coming-icon{width:72px;height:72px;border-radius:20px;background:var(--pri-soft);display:flex;align-items:center;justify-content:center;margin:0 auto 18px;color:var(--pri-d)}
|
||||||
|
.coming-icon svg{width:36px;height:36px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
|
||||||
|
.coming h2{font-family:'Outfit',sans-serif;font-size:1.5rem;color:var(--pri-d);margin-bottom:12px}
|
||||||
|
.coming p{font-size:1rem;color:var(--muted);margin-bottom:8px}
|
||||||
|
.coming p b{color:var(--text)}
|
||||||
|
.coming-cta{margin-top:24px;display:inline-flex;align-items:center;gap:8px;padding:12px 22px;background:linear-gradient(135deg,var(--pri),var(--pri-d));color:#fff;border-radius:12px;font-weight:700;text-decoration:none;box-shadow:0 6px 22px #05966933}
|
||||||
|
.coming-cta:hover{filter:brightness(1.08)}
|
||||||
|
.range-pill{display:inline-block;padding:5px 13px;background:var(--pri-soft);color:var(--pri-d);border-radius:99px;font-size:.84rem;font-weight:700;margin-top:6px}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<header class="hdr">
|
||||||
|
<div class="hdr-inner">
|
||||||
|
<div>
|
||||||
|
<a href="/textbook/algebra-7" class="hdr-back">
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><polyline points="15 18 9 12 15 6"/></svg>
|
||||||
|
К Алгебра 7
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h1>Глава 2 · Выражения и их преобразования</h1>
|
||||||
|
<div class="hdr-sub">§4–§14</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<div class="coming">
|
||||||
|
<div class="coming-icon">
|
||||||
|
<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
|
||||||
|
</div>
|
||||||
|
<h2>Глава в разработке</h2>
|
||||||
|
<p>Эта глава — часть нового курса <b>Алгебра 7</b>.</p>
|
||||||
|
<p>Содержание (§4–§14) уже спланировано — теория, интерактивы и финальный босс появятся в одной из ближайших волн реализации.</p>
|
||||||
|
<div class="range-pill">§4–§14</div>
|
||||||
|
<div style="margin-top:8px">
|
||||||
|
<a href="/textbook/algebra-7" class="coming-cta">
|
||||||
|
Вернуться к учебнику
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><polyline points="9 18 15 12 9 6"/></svg>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||||
|
<title>Глава 3 · Линейные уравнения. Неравенства. Функция</title>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@600;800;900&family=Inter:wght@400;600;700&display=swap" rel="stylesheet">
|
||||||
|
<script src="/js/api.js" defer></script>
|
||||||
|
<style>
|
||||||
|
:root{--bg:#fafafa;--card:#fff;--text:#0f172a;--muted:#64748b;--border:#e2e8f0;--pri:#7c3aed;--pri-d:#6d28d9;--pri-soft:#7c3aed1a}
|
||||||
|
html.dark{--bg:#0a0a0e;--card:#13120a;--text:#fef9e7;--muted:#a39070;--border:#2a2512}
|
||||||
|
*{margin:0;padding:0;box-sizing:border-box}
|
||||||
|
html,body{min-height:100vh}
|
||||||
|
body{font-family:'Inter',system-ui,sans-serif;background:var(--bg);color:var(--text);line-height:1.55}
|
||||||
|
.hdr{position:relative;background:linear-gradient(110deg,#6d28d9,#7c3aed 60%,#7c3aedcc);color:#fff;padding:46px 22px 30px;overflow:hidden;border-bottom:2px solid #7c3aed33}
|
||||||
|
.hdr::before{content:'y=kx';position:absolute;right:-12px;top:50%;transform:translateY(-50%);font-family:'Outfit',sans-serif;font-size:clamp(5rem,15vw,11rem);font-weight:900;color:transparent;-webkit-text-stroke:1.5px rgba(255,255,255,.12);line-height:1;pointer-events:none}
|
||||||
|
.hdr-inner{position:relative;z-index:1;max-width:1100px;margin:0 auto;display:flex;align-items:center;gap:18px;flex-wrap:wrap}
|
||||||
|
.hdr-back{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;background:rgba(255,255,255,.14);border-radius:9px;color:#fff;text-decoration:none;font-size:.85rem;font-weight:600}
|
||||||
|
.hdr-back:hover{background:rgba(255,255,255,.24)}
|
||||||
|
.hdr h1{font-family:'Outfit',sans-serif;font-size:1.6rem;font-weight:900}
|
||||||
|
.hdr-sub{font-size:.92rem;opacity:.85;margin-top:4px}
|
||||||
|
.ic{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;display:inline-block;vertical-align:middle}
|
||||||
|
main{max-width:740px;margin:0 auto;padding:48px 22px 80px}
|
||||||
|
.coming{background:var(--card);border:1.5px solid var(--border);border-radius:18px;padding:32px 28px;text-align:center;box-shadow:0 4px 18px rgba(0,0,0,.05)}
|
||||||
|
.coming-icon{width:72px;height:72px;border-radius:20px;background:var(--pri-soft);display:flex;align-items:center;justify-content:center;margin:0 auto 18px;color:var(--pri-d)}
|
||||||
|
.coming-icon svg{width:36px;height:36px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
|
||||||
|
.coming h2{font-family:'Outfit',sans-serif;font-size:1.5rem;color:var(--pri-d);margin-bottom:12px}
|
||||||
|
.coming p{font-size:1rem;color:var(--muted);margin-bottom:8px}
|
||||||
|
.coming p b{color:var(--text)}
|
||||||
|
.coming-cta{margin-top:24px;display:inline-flex;align-items:center;gap:8px;padding:12px 22px;background:linear-gradient(135deg,var(--pri),var(--pri-d));color:#fff;border-radius:12px;font-weight:700;text-decoration:none;box-shadow:0 6px 22px #7c3aed33}
|
||||||
|
.coming-cta:hover{filter:brightness(1.08)}
|
||||||
|
.range-pill{display:inline-block;padding:5px 13px;background:var(--pri-soft);color:var(--pri-d);border-radius:99px;font-size:.84rem;font-weight:700;margin-top:6px}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<header class="hdr">
|
||||||
|
<div class="hdr-inner">
|
||||||
|
<div>
|
||||||
|
<a href="/textbook/algebra-7" class="hdr-back">
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><polyline points="15 18 9 12 15 6"/></svg>
|
||||||
|
К Алгебра 7
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h1>Глава 3 · Линейные уравнения. Неравенства. Функция</h1>
|
||||||
|
<div class="hdr-sub">§15–§20</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<div class="coming">
|
||||||
|
<div class="coming-icon">
|
||||||
|
<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
|
||||||
|
</div>
|
||||||
|
<h2>Глава в разработке</h2>
|
||||||
|
<p>Эта глава — часть нового курса <b>Алгебра 7</b>.</p>
|
||||||
|
<p>Содержание (§15–§20) уже спланировано — теория, интерактивы и финальный босс появятся в одной из ближайших волн реализации.</p>
|
||||||
|
<div class="range-pill">§15–§20</div>
|
||||||
|
<div style="margin-top:8px">
|
||||||
|
<a href="/textbook/algebra-7" class="coming-cta">
|
||||||
|
Вернуться к учебнику
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><polyline points="9 18 15 12 9 6"/></svg>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||||
|
<title>Глава 4 · Системы линейных уравнений</title>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@600;800;900&family=Inter:wght@400;600;700&display=swap" rel="stylesheet">
|
||||||
|
<script src="/js/api.js" defer></script>
|
||||||
|
<style>
|
||||||
|
:root{--bg:#fafafa;--card:#fff;--text:#0f172a;--muted:#64748b;--border:#e2e8f0;--pri:#0891b2;--pri-d:#0e7490;--pri-soft:#0891b21a}
|
||||||
|
html.dark{--bg:#0a0a0e;--card:#13120a;--text:#fef9e7;--muted:#a39070;--border:#2a2512}
|
||||||
|
*{margin:0;padding:0;box-sizing:border-box}
|
||||||
|
html,body{min-height:100vh}
|
||||||
|
body{font-family:'Inter',system-ui,sans-serif;background:var(--bg);color:var(--text);line-height:1.55}
|
||||||
|
.hdr{position:relative;background:linear-gradient(110deg,#0e7490,#0891b2 60%,#0891b2cc);color:#fff;padding:46px 22px 30px;overflow:hidden;border-bottom:2px solid #0891b233}
|
||||||
|
.hdr::before{content:'{';position:absolute;right:-12px;top:50%;transform:translateY(-50%);font-family:'Outfit',sans-serif;font-size:clamp(5rem,15vw,11rem);font-weight:900;color:transparent;-webkit-text-stroke:1.5px rgba(255,255,255,.12);line-height:1;pointer-events:none}
|
||||||
|
.hdr-inner{position:relative;z-index:1;max-width:1100px;margin:0 auto;display:flex;align-items:center;gap:18px;flex-wrap:wrap}
|
||||||
|
.hdr-back{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;background:rgba(255,255,255,.14);border-radius:9px;color:#fff;text-decoration:none;font-size:.85rem;font-weight:600}
|
||||||
|
.hdr-back:hover{background:rgba(255,255,255,.24)}
|
||||||
|
.hdr h1{font-family:'Outfit',sans-serif;font-size:1.6rem;font-weight:900}
|
||||||
|
.hdr-sub{font-size:.92rem;opacity:.85;margin-top:4px}
|
||||||
|
.ic{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;display:inline-block;vertical-align:middle}
|
||||||
|
main{max-width:740px;margin:0 auto;padding:48px 22px 80px}
|
||||||
|
.coming{background:var(--card);border:1.5px solid var(--border);border-radius:18px;padding:32px 28px;text-align:center;box-shadow:0 4px 18px rgba(0,0,0,.05)}
|
||||||
|
.coming-icon{width:72px;height:72px;border-radius:20px;background:var(--pri-soft);display:flex;align-items:center;justify-content:center;margin:0 auto 18px;color:var(--pri-d)}
|
||||||
|
.coming-icon svg{width:36px;height:36px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
|
||||||
|
.coming h2{font-family:'Outfit',sans-serif;font-size:1.5rem;color:var(--pri-d);margin-bottom:12px}
|
||||||
|
.coming p{font-size:1rem;color:var(--muted);margin-bottom:8px}
|
||||||
|
.coming p b{color:var(--text)}
|
||||||
|
.coming-cta{margin-top:24px;display:inline-flex;align-items:center;gap:8px;padding:12px 22px;background:linear-gradient(135deg,var(--pri),var(--pri-d));color:#fff;border-radius:12px;font-weight:700;text-decoration:none;box-shadow:0 6px 22px #0891b233}
|
||||||
|
.coming-cta:hover{filter:brightness(1.08)}
|
||||||
|
.range-pill{display:inline-block;padding:5px 13px;background:var(--pri-soft);color:var(--pri-d);border-radius:99px;font-size:.84rem;font-weight:700;margin-top:6px}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<header class="hdr">
|
||||||
|
<div class="hdr-inner">
|
||||||
|
<div>
|
||||||
|
<a href="/textbook/algebra-7" class="hdr-back">
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><polyline points="15 18 9 12 15 6"/></svg>
|
||||||
|
К Алгебра 7
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h1>Глава 4 · Системы линейных уравнений</h1>
|
||||||
|
<div class="hdr-sub">§21–§25</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<div class="coming">
|
||||||
|
<div class="coming-icon">
|
||||||
|
<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
|
||||||
|
</div>
|
||||||
|
<h2>Глава в разработке</h2>
|
||||||
|
<p>Эта глава — часть нового курса <b>Алгебра 7</b>.</p>
|
||||||
|
<p>Содержание (§21–§25) уже спланировано — теория, интерактивы и финальный босс появятся в одной из ближайших волн реализации.</p>
|
||||||
|
<div class="range-pill">§21–§25</div>
|
||||||
|
<div style="margin-top:8px">
|
||||||
|
<a href="/textbook/algebra-7" class="coming-cta">
|
||||||
|
Вернуться к учебнику
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><polyline points="9 18 15 12 9 6"/></svg>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,353 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
|
||||||
|
<meta http-equiv="Pragma" content="no-cache">
|
||||||
|
<meta http-equiv="Expires" content="0">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||||
|
<title>Алгебра 7 класс — учебник</title>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@400;500;600;700;800;900&family=Inter:wght@400;500;600;700&family=Unbounded:wght@400;700;800;900&display=swap" rel="stylesheet">
|
||||||
|
<script src="/js/api.js" defer></script>
|
||||||
|
<script src="/js/xp.js" defer></script>
|
||||||
|
<style>
|
||||||
|
:root{
|
||||||
|
--bg:#fdf2f8; --card:#fff;
|
||||||
|
--text:#1a1a2e; --muted:#6b5b73;
|
||||||
|
--border:#fce7f3;
|
||||||
|
--pri:#db2777; --pri-d:#9d174d;
|
||||||
|
--pri-soft:#fce7f3;
|
||||||
|
--ch1:#d97706; --ch1-d:#b45309;
|
||||||
|
--ch2:#059669; --ch2-d:#047857;
|
||||||
|
--ch3:#7c3aed; --ch3-d:#6d28d9;
|
||||||
|
--ch4:#0891b2; --ch4-d:#0e7490;
|
||||||
|
--sh:0 4px 16px rgba(219,39,119,.10);
|
||||||
|
--sh-h:0 12px 36px rgba(219,39,119,.18);
|
||||||
|
}
|
||||||
|
html.dark{
|
||||||
|
--bg:#1a0f1a; --card:#2a1929;
|
||||||
|
--text:#f5e6f0; --muted:#b0a0b0;
|
||||||
|
--border:#5a2a5a;
|
||||||
|
--pri-soft:rgba(219,39,119,.16);
|
||||||
|
}
|
||||||
|
*{margin:0;padding:0;box-sizing:border-box}
|
||||||
|
html,body{min-height:100vh}
|
||||||
|
body{font-family:'Inter',system-ui,sans-serif;background:var(--bg);color:var(--text);line-height:1.55;transition:background .25s,color .25s}
|
||||||
|
|
||||||
|
/* HEADER */
|
||||||
|
.hdr{position:relative;background:linear-gradient(110deg,#9d174d 0%,#db2777 55%,#f472b6 100%);color:#fff;padding:32px 24px 28px;overflow:hidden;border-bottom:2px solid rgba(255,180,210,.15)}
|
||||||
|
.hdr::before{content:'АЛГЕБРА';position:absolute;right:-14px;top:-18%;font-family:'Outfit',sans-serif;font-size:clamp(5rem,16vw,13rem);font-weight:900;letter-spacing:-.04em;color:transparent;-webkit-text-stroke:1.5px rgba(255,220,235,.10);line-height:1;pointer-events:none;user-select:none}
|
||||||
|
.hdr-inner{position:relative;z-index:1;max-width:1100px;margin:0 auto;display:flex;align-items:center;gap:18px;flex-wrap:wrap}
|
||||||
|
.hdr-back{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;background:rgba(255,255,255,.14);border-radius:9px;color:#fff;text-decoration:none;font-size:.85rem;font-weight:600;transition:background .15s}
|
||||||
|
.hdr-back:hover{background:rgba(255,255,255,.24)}
|
||||||
|
.hdr h1{font-family:'Outfit',sans-serif;font-size:1.85rem;font-weight:900;letter-spacing:-.01em}
|
||||||
|
.hdr-sub{font-size:.92rem;opacity:.85;margin-top:4px}
|
||||||
|
.hdr-side{margin-left:auto;display:flex;gap:8px}
|
||||||
|
.hdr-btn{padding:8px 12px;background:rgba(255,255,255,.14);border:none;color:#fff;border-radius:9px;cursor:pointer;font-weight:600;font-size:.82rem;display:inline-flex;align-items:center;gap:6px;transition:background .15s;font-family:inherit}
|
||||||
|
.hdr-btn:hover{background:rgba(255,255,255,.24)}
|
||||||
|
.ic{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
|
||||||
|
|
||||||
|
main{max-width:1100px;margin:0 auto;padding:32px 24px 60px}
|
||||||
|
|
||||||
|
/* OVERALL PROGRESS */
|
||||||
|
.prog-overall{background:linear-gradient(135deg,var(--pri-soft),rgba(124,58,237,.10));border:1px solid var(--border);border-radius:14px;padding:14px 18px;margin-bottom:28px;display:flex;gap:14px;align-items:center;flex-wrap:wrap}
|
||||||
|
.po-icon{width:46px;height:46px;border-radius:12px;background:linear-gradient(135deg,#db2777,#7c3aed);color:#fff;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-family:'Outfit',sans-serif;font-size:1.4rem;font-weight:900;font-style:italic}
|
||||||
|
.po-text{flex:1;min-width:160px}
|
||||||
|
.po-label{font-size:.78rem;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin-bottom:4px}
|
||||||
|
.po-bar{height:8px;background:rgba(219,39,119,.12);border-radius:5px;overflow:hidden;margin-top:6px}
|
||||||
|
.po-fill{height:100%;background:linear-gradient(90deg,var(--pri),#7c3aed);border-radius:5px;transition:width .5s}
|
||||||
|
.po-xp{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;background:linear-gradient(135deg,#f59e0b,var(--pri));color:#fff;border-radius:99px;font-size:.8rem;font-weight:800;font-family:'Unbounded',sans-serif;letter-spacing:.02em;box-shadow:0 4px 12px rgba(219,39,119,.22)}
|
||||||
|
|
||||||
|
/* CHAPTER GRID — 4 chapters: 1 / 2 / 4 columns */
|
||||||
|
.ch-grid{display:grid;grid-template-columns:1fr;gap:18px;margin-bottom:30px}
|
||||||
|
@media(min-width:600px){.ch-grid{grid-template-columns:1fr 1fr}}
|
||||||
|
@media(min-width:1000px){.ch-grid{grid-template-columns:repeat(4,1fr)}}
|
||||||
|
|
||||||
|
.ch-card{background:var(--card);border:1.5px solid var(--border);border-radius:18px;overflow:hidden;display:flex;flex-direction:column;transition:transform .2s,box-shadow .2s,border-color .2s;cursor:pointer;text-decoration:none;color:inherit}
|
||||||
|
.ch-card:hover{transform:translateY(-4px);box-shadow:var(--sh-h)}
|
||||||
|
.ch-cover{padding:22px 22px 18px;color:#fff;position:relative;overflow:hidden}
|
||||||
|
.ch-cover-wm{position:absolute;right:-8px;top:-22px;font-size:6rem;font-weight:900;font-family:'Outfit',sans-serif;line-height:1;color:rgba(255,255,255,.18);pointer-events:none}
|
||||||
|
.ch-num{display:inline-block;padding:4px 10px;background:rgba(255,255,255,.22);border-radius:99px;font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;margin-bottom:8px;position:relative;z-index:1}
|
||||||
|
.ch-title{font-family:'Outfit',sans-serif;font-size:1.1rem;font-weight:800;letter-spacing:-.01em;position:relative;z-index:1;line-height:1.3}
|
||||||
|
.ch-range{font-size:.84rem;opacity:.88;margin-top:4px;position:relative;z-index:1;font-weight:500}
|
||||||
|
|
||||||
|
.ch-cover.ch1{background:linear-gradient(135deg,#92400e,#d97706 60%,#fbbf24)}
|
||||||
|
.ch-cover.ch2{background:linear-gradient(135deg,#064e3b,#059669 60%,#34d399)}
|
||||||
|
.ch-cover.ch3{background:linear-gradient(135deg,#3b0764,#7c3aed 60%,#a78bfa)}
|
||||||
|
.ch-cover.ch4{background:linear-gradient(135deg,#164e63,#0891b2 60%,#22d3ee)}
|
||||||
|
|
||||||
|
.ch-body{padding:16px 20px 18px;display:flex;flex-direction:column;flex:1}
|
||||||
|
.ch-desc{font-size:.88rem;color:var(--text);opacity:.82;flex:1;margin-bottom:12px;line-height:1.55}
|
||||||
|
|
||||||
|
.ch-prog{margin-bottom:12px}
|
||||||
|
.ch-prog-label{display:flex;justify-content:space-between;font-size:.74rem;color:var(--muted);font-weight:600;margin-bottom:4px}
|
||||||
|
.ch-prog-bar{height:6px;background:rgba(0,0,0,.07);border-radius:4px;overflow:hidden}
|
||||||
|
.ch-prog-fill{height:100%;border-radius:4px;transition:width .5s}
|
||||||
|
.ch-card.ch1-card .ch-prog-fill{background:linear-gradient(90deg,var(--ch1),var(--ch1-d))}
|
||||||
|
.ch-card.ch2-card .ch-prog-fill{background:linear-gradient(90deg,var(--ch2),var(--ch2-d))}
|
||||||
|
.ch-card.ch3-card .ch-prog-fill{background:linear-gradient(90deg,var(--ch3),var(--ch3-d))}
|
||||||
|
.ch-card.ch4-card .ch-prog-fill{background:linear-gradient(90deg,var(--ch4),var(--ch4-d))}
|
||||||
|
|
||||||
|
.ch-action{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-radius:11px;font-weight:700;font-size:.9rem;color:#fff;transition:filter .15s}
|
||||||
|
.ch-action:hover{filter:brightness(1.08)}
|
||||||
|
.ch-card.ch1-card .ch-action{background:linear-gradient(135deg,var(--ch1),#fbbf24)}
|
||||||
|
.ch-card.ch2-card .ch-action{background:linear-gradient(135deg,var(--ch2),#34d399)}
|
||||||
|
.ch-card.ch3-card .ch-action{background:linear-gradient(135deg,var(--ch3),#a78bfa)}
|
||||||
|
.ch-card.ch4-card .ch-action{background:linear-gradient(135deg,var(--ch4),#22d3ee)}
|
||||||
|
|
||||||
|
/* ACHIEVEMENT STRIP */
|
||||||
|
.ach-strip{background:var(--card);border:1.5px solid var(--border);border-radius:16px;padding:18px 22px;margin-bottom:28px;display:flex;align-items:center;gap:16px;transition:border-color .4s,box-shadow .4s}
|
||||||
|
.ach-strip.lit{border-color:#f59e0b;box-shadow:0 0 0 3px rgba(245,158,11,.18)}
|
||||||
|
.ach-icon{width:52px;height:52px;border-radius:14px;background:rgba(0,0,0,.06);display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:background .4s}
|
||||||
|
.ach-strip.lit .ach-icon{background:linear-gradient(135deg,#fbbf24,#f59e0b)}
|
||||||
|
.ach-icon svg{width:28px;height:28px;stroke:var(--muted);fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
|
||||||
|
.ach-strip.lit .ach-icon svg{stroke:#fff}
|
||||||
|
.ach-text{flex:1}
|
||||||
|
.ach-title{font-weight:800;font-size:1.02rem;color:var(--text)}
|
||||||
|
.ach-sub{font-size:.85rem;color:var(--muted);margin-top:2px}
|
||||||
|
.ach-strip.lit .ach-title{color:#92400e}
|
||||||
|
|
||||||
|
.foot{text-align:center;padding:24px 16px;color:var(--muted);font-size:.78rem;border-top:1px solid var(--border)}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<header class="hdr">
|
||||||
|
<div class="hdr-inner">
|
||||||
|
<div>
|
||||||
|
<a href="/textbooks" class="hdr-back">
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><polyline points="15 18 9 12 15 6"/></svg>
|
||||||
|
К каталогу
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h1>Алгебра — 7 класс</h1>
|
||||||
|
<div class="hdr-sub">Полный курс: степени, многочлены, уравнения, системы</div>
|
||||||
|
</div>
|
||||||
|
<div class="hdr-side">
|
||||||
|
<button id="theme-btn" class="hdr-btn" title="Сменить тему">
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><path d="M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8z"/></svg>
|
||||||
|
<span id="theme-lab">Тёмная</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
|
||||||
|
<section class="prog-overall">
|
||||||
|
<div class="po-icon">x</div>
|
||||||
|
<div class="po-text">
|
||||||
|
<div class="po-label">Общий прогресс по курсу</div>
|
||||||
|
<div id="overall-text" style="font-size:1.05rem;font-weight:700">Загрузка...</div>
|
||||||
|
<div class="po-bar"><div id="overall-fill" class="po-fill" style="width:0%"></div></div>
|
||||||
|
</div>
|
||||||
|
<div id="hero-xp-badge" class="po-xp" style="display:none">0 XP</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div class="ch-grid">
|
||||||
|
|
||||||
|
<a href="/textbook/algebra-7-ch1" class="ch-card ch1-card" id="ch-1">
|
||||||
|
<div class="ch-cover ch1">
|
||||||
|
<div class="ch-cover-wm">aⁿ</div>
|
||||||
|
<div class="ch-num">Глава 1</div>
|
||||||
|
<div class="ch-title">Степень с натуральным и целым показателем</div>
|
||||||
|
<div class="ch-range">§1–§3 + Финал</div>
|
||||||
|
</div>
|
||||||
|
<div class="ch-body">
|
||||||
|
<div class="ch-desc">Степень с натуральным и целым показателем, свойства степени, стандартный вид числа.</div>
|
||||||
|
<div class="ch-prog">
|
||||||
|
<div class="ch-prog-label"><span>Прогресс</span><span id="prog-1">0%</span></div>
|
||||||
|
<div class="ch-prog-bar"><div class="ch-prog-fill" id="fill-1" style="width:0%"></div></div>
|
||||||
|
</div>
|
||||||
|
<div class="ch-action">
|
||||||
|
<span id="btn-1">Открыть главу</span>
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><polyline points="9 18 15 12 9 6"/></svg>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="/textbook/algebra-7-ch2" class="ch-card ch2-card" id="ch-2">
|
||||||
|
<div class="ch-cover ch2">
|
||||||
|
<div class="ch-cover-wm">P(x)</div>
|
||||||
|
<div class="ch-num">Глава 2</div>
|
||||||
|
<div class="ch-title">Выражения и их преобразования</div>
|
||||||
|
<div class="ch-range">§4–§14 + Финал</div>
|
||||||
|
</div>
|
||||||
|
<div class="ch-body">
|
||||||
|
<div class="ch-desc">Тождества, одночлены и многочлены, действия с ними, формулы сокращённого умножения, разложение на множители.</div>
|
||||||
|
<div class="ch-prog">
|
||||||
|
<div class="ch-prog-label"><span>Прогресс</span><span id="prog-2">0%</span></div>
|
||||||
|
<div class="ch-prog-bar"><div class="ch-prog-fill" id="fill-2" style="width:0%"></div></div>
|
||||||
|
</div>
|
||||||
|
<div class="ch-action">
|
||||||
|
<span id="btn-2">Открыть главу</span>
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><polyline points="9 18 15 12 9 6"/></svg>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="/textbook/algebra-7-ch3" class="ch-card ch3-card" id="ch-3">
|
||||||
|
<div class="ch-cover ch3">
|
||||||
|
<div class="ch-cover-wm">y=kx</div>
|
||||||
|
<div class="ch-num">Глава 3</div>
|
||||||
|
<div class="ch-title">Линейные уравнения. Неравенства. Функция</div>
|
||||||
|
<div class="ch-range">§15–§20 + Финал</div>
|
||||||
|
</div>
|
||||||
|
<div class="ch-body">
|
||||||
|
<div class="ch-desc">Линейные уравнения и текстовые задачи, числовые и линейные неравенства, функция и её график, линейная функция.</div>
|
||||||
|
<div class="ch-prog">
|
||||||
|
<div class="ch-prog-label"><span>Прогресс</span><span id="prog-3">0%</span></div>
|
||||||
|
<div class="ch-prog-bar"><div class="ch-prog-fill" id="fill-3" style="width:0%"></div></div>
|
||||||
|
</div>
|
||||||
|
<div class="ch-action">
|
||||||
|
<span id="btn-3">Открыть главу</span>
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><polyline points="9 18 15 12 9 6"/></svg>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="/textbook/algebra-7-ch4" class="ch-card ch4-card" id="ch-4">
|
||||||
|
<div class="ch-cover ch4">
|
||||||
|
<div class="ch-cover-wm">{</div>
|
||||||
|
<div class="ch-num">Глава 4</div>
|
||||||
|
<div class="ch-title">Системы линейных уравнений</div>
|
||||||
|
<div class="ch-range">§21–§25 + Финал</div>
|
||||||
|
</div>
|
||||||
|
<div class="ch-body">
|
||||||
|
<div class="ch-desc">Линейные уравнения с двумя переменными, графический способ, системы и способы их решения, текстовые задачи.</div>
|
||||||
|
<div class="ch-prog">
|
||||||
|
<div class="ch-prog-label"><span>Прогресс</span><span id="prog-4">0%</span></div>
|
||||||
|
<div class="ch-prog-bar"><div class="ch-prog-fill" id="fill-4" style="width:0%"></div></div>
|
||||||
|
</div>
|
||||||
|
<div class="ch-action">
|
||||||
|
<span id="btn-4">Открыть главу</span>
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><polyline points="9 18 15 12 9 6"/></svg>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ach-strip" id="ach-strip">
|
||||||
|
<div class="ach-icon">
|
||||||
|
<svg viewBox="0 0 24 24">
|
||||||
|
<path d="M6 9H4l-1-3h18l-1 3h-2M6 9l1 6h10l1-6M6 9h12"/><path d="M9 21h6M12 15v6"/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<div class="ach-text">
|
||||||
|
<div class="ach-title">Магистр алгебры 7</div>
|
||||||
|
<div class="ach-sub" id="ach-sub">Прочитайте все 25 параграфов четырёх глав, чтобы получить достижение</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<footer class="foot">
|
||||||
|
Интерактивный учебник «Алгебра — 7 класс» · И. Г. Арефьева, О. Н. Пирютко · LearnSpace
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/* THEME */
|
||||||
|
(function(){
|
||||||
|
var saved = localStorage.getItem('algebra7_theme') || localStorage.getItem('theme') || 'light';
|
||||||
|
if (saved === 'dark') document.documentElement.classList.add('dark');
|
||||||
|
var lab = document.getElementById('theme-lab');
|
||||||
|
if (lab) lab.textContent = saved === 'dark' ? 'Светлая' : 'Тёмная';
|
||||||
|
document.getElementById('theme-btn').addEventListener('click', function(){
|
||||||
|
document.documentElement.classList.toggle('dark');
|
||||||
|
var dark = document.documentElement.classList.contains('dark');
|
||||||
|
localStorage.setItem('algebra7_theme', dark ? 'dark' : 'light');
|
||||||
|
localStorage.setItem('theme', dark ? 'dark' : 'light');
|
||||||
|
if (lab) lab.textContent = dark ? 'Светлая' : 'Тёмная';
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
||||||
|
/* PROGRESS */
|
||||||
|
var TOTAL = 25;
|
||||||
|
var CH_PARA = {
|
||||||
|
'algebra-7-ch1': 3,
|
||||||
|
'algebra-7-ch2': 11,
|
||||||
|
'algebra-7-ch3': 6,
|
||||||
|
'algebra-7-ch4': 5,
|
||||||
|
};
|
||||||
|
var CH_IDX = {
|
||||||
|
'algebra-7-ch1': 1,
|
||||||
|
'algebra-7-ch2': 2,
|
||||||
|
'algebra-7-ch3': 3,
|
||||||
|
'algebra-7-ch4': 4,
|
||||||
|
};
|
||||||
|
|
||||||
|
function setChProg(idx, readCount, total) {
|
||||||
|
var pct = total ? Math.round(readCount * 100 / total) : 0;
|
||||||
|
var labelEl = document.getElementById('prog-' + idx);
|
||||||
|
var fillEl = document.getElementById('fill-' + idx);
|
||||||
|
var btnEl = document.getElementById('btn-' + idx);
|
||||||
|
if (labelEl) labelEl.textContent = pct + '%';
|
||||||
|
if (fillEl) fillEl.style.width = pct + '%';
|
||||||
|
if (btnEl) {
|
||||||
|
if (readCount > 0 && readCount < total) btnEl.textContent = 'Продолжить';
|
||||||
|
else if (readCount >= total) btnEl.textContent = 'Открыть снова';
|
||||||
|
else btnEl.textContent = 'Открыть главу';
|
||||||
|
}
|
||||||
|
return pct;
|
||||||
|
}
|
||||||
|
|
||||||
|
function renderProgress(children) {
|
||||||
|
var totalRead = 0;
|
||||||
|
for (var i = 0; i < children.length; i++) {
|
||||||
|
var ch = children[i];
|
||||||
|
var idx = CH_IDX[ch.slug];
|
||||||
|
if (!idx) continue;
|
||||||
|
var read = ch.progress ? ch.progress.read.length : 0;
|
||||||
|
var total = ch.para_count || CH_PARA[ch.slug] || 1;
|
||||||
|
totalRead += read;
|
||||||
|
setChProg(idx, read, total);
|
||||||
|
}
|
||||||
|
|
||||||
|
var pct = Math.round(totalRead * 100 / TOTAL);
|
||||||
|
var overallEl = document.getElementById('overall-text');
|
||||||
|
var fillEl = document.getElementById('overall-fill');
|
||||||
|
if (overallEl) overallEl.textContent = totalRead + ' из ' + TOTAL + ' параграфов · ' + pct + '%';
|
||||||
|
if (fillEl) fillEl.style.width = pct + '%';
|
||||||
|
|
||||||
|
var xpBadge = document.getElementById('hero-xp-badge');
|
||||||
|
var xp = parseInt(localStorage.getItem('algebra7_xp') || '0', 10) || 0;
|
||||||
|
if (xpBadge && xp > 0) {
|
||||||
|
xpBadge.style.display = '';
|
||||||
|
xpBadge.textContent = xp + ' XP';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (totalRead >= TOTAL) {
|
||||||
|
var strip = document.getElementById('ach-strip');
|
||||||
|
var sub = document.getElementById('ach-sub');
|
||||||
|
if (strip) strip.classList.add('lit');
|
||||||
|
if (sub) sub.textContent = 'Выполнено! Вы прочитали весь курс алгебры 7 класса.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadProgress() {
|
||||||
|
if (typeof window.LS === 'undefined' || typeof window.LS.api !== 'function') {
|
||||||
|
renderProgress([]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
window.LS.api('/api/textbooks/algebra-7/children')
|
||||||
|
.then(function(data) {
|
||||||
|
if (data && data.children) renderProgress(data.children);
|
||||||
|
else renderProgress([]);
|
||||||
|
})
|
||||||
|
.catch(function() { renderProgress([]); });
|
||||||
|
}
|
||||||
|
|
||||||
|
if (document.readyState === 'loading') {
|
||||||
|
document.addEventListener('DOMContentLoaded', loadProgress);
|
||||||
|
} else {
|
||||||
|
loadProgress();
|
||||||
|
}
|
||||||
|
window.addEventListener('focus', loadProgress);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||||
|
<title>Глава 1 · Начальные понятия</title>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@600;800;900&family=Inter:wght@400;600;700&display=swap" rel="stylesheet">
|
||||||
|
<script src="/js/api.js" defer></script>
|
||||||
|
<style>
|
||||||
|
:root{--bg:#fafafa;--card:#fff;--text:#0f172a;--muted:#64748b;--border:#e2e8f0;--pri:#d97706;--pri-d:#b45309;--pri-soft:#d977061a}
|
||||||
|
html.dark{--bg:#0a0a0e;--card:#13120a;--text:#fef9e7;--muted:#a39070;--border:#2a2512}
|
||||||
|
*{margin:0;padding:0;box-sizing:border-box}
|
||||||
|
html,body{min-height:100vh}
|
||||||
|
body{font-family:'Inter',system-ui,sans-serif;background:var(--bg);color:var(--text);line-height:1.55}
|
||||||
|
.hdr{position:relative;background:linear-gradient(110deg,#b45309,#d97706 60%,#d97706cc);color:#fff;padding:46px 22px 30px;overflow:hidden;border-bottom:2px solid #d9770633}
|
||||||
|
.hdr::before{content:'●';position:absolute;right:-12px;top:50%;transform:translateY(-50%);font-family:'Outfit',sans-serif;font-size:clamp(5rem,15vw,11rem);font-weight:900;color:transparent;-webkit-text-stroke:1.5px rgba(255,255,255,.12);line-height:1;pointer-events:none}
|
||||||
|
.hdr-inner{position:relative;z-index:1;max-width:1100px;margin:0 auto;display:flex;align-items:center;gap:18px;flex-wrap:wrap}
|
||||||
|
.hdr-back{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;background:rgba(255,255,255,.14);border-radius:9px;color:#fff;text-decoration:none;font-size:.85rem;font-weight:600}
|
||||||
|
.hdr-back:hover{background:rgba(255,255,255,.24)}
|
||||||
|
.hdr h1{font-family:'Outfit',sans-serif;font-size:1.6rem;font-weight:900}
|
||||||
|
.hdr-sub{font-size:.92rem;opacity:.85;margin-top:4px}
|
||||||
|
.ic{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;display:inline-block;vertical-align:middle}
|
||||||
|
main{max-width:740px;margin:0 auto;padding:48px 22px 80px}
|
||||||
|
.coming{background:var(--card);border:1.5px solid var(--border);border-radius:18px;padding:32px 28px;text-align:center;box-shadow:0 4px 18px rgba(0,0,0,.05)}
|
||||||
|
.coming-icon{width:72px;height:72px;border-radius:20px;background:var(--pri-soft);display:flex;align-items:center;justify-content:center;margin:0 auto 18px;color:var(--pri-d)}
|
||||||
|
.coming-icon svg{width:36px;height:36px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
|
||||||
|
.coming h2{font-family:'Outfit',sans-serif;font-size:1.5rem;color:var(--pri-d);margin-bottom:12px}
|
||||||
|
.coming p{font-size:1rem;color:var(--muted);margin-bottom:8px}
|
||||||
|
.coming p b{color:var(--text)}
|
||||||
|
.coming-cta{margin-top:24px;display:inline-flex;align-items:center;gap:8px;padding:12px 22px;background:linear-gradient(135deg,var(--pri),var(--pri-d));color:#fff;border-radius:12px;font-weight:700;text-decoration:none;box-shadow:0 6px 22px #d9770633}
|
||||||
|
.coming-cta:hover{filter:brightness(1.08)}
|
||||||
|
.range-pill{display:inline-block;padding:5px 13px;background:var(--pri-soft);color:var(--pri-d);border-radius:99px;font-size:.84rem;font-weight:700;margin-top:6px}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<header class="hdr">
|
||||||
|
<div class="hdr-inner">
|
||||||
|
<div>
|
||||||
|
<a href="/textbook/geometry-7" class="hdr-back">
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><polyline points="15 18 9 12 15 6"/></svg>
|
||||||
|
К Геометрия 7
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h1>Глава 1 · Начальные понятия</h1>
|
||||||
|
<div class="hdr-sub">§1–§7</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<div class="coming">
|
||||||
|
<div class="coming-icon">
|
||||||
|
<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
|
||||||
|
</div>
|
||||||
|
<h2>Глава в разработке</h2>
|
||||||
|
<p>Эта глава — часть нового курса <b>Геометрия 7</b>.</p>
|
||||||
|
<p>Содержание (§1–§7) уже спланировано — теория, интерактивы и финальный босс появятся в одной из ближайших волн реализации.</p>
|
||||||
|
<div class="range-pill">§1–§7</div>
|
||||||
|
<div style="margin-top:8px">
|
||||||
|
<a href="/textbook/geometry-7" class="coming-cta">
|
||||||
|
Вернуться к учебнику
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><polyline points="9 18 15 12 9 6"/></svg>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||||
|
<title>Глава 2 · Признаки равенства треугольников</title>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@600;800;900&family=Inter:wght@400;600;700&display=swap" rel="stylesheet">
|
||||||
|
<script src="/js/api.js" defer></script>
|
||||||
|
<style>
|
||||||
|
:root{--bg:#fafafa;--card:#fff;--text:#0f172a;--muted:#64748b;--border:#e2e8f0;--pri:#059669;--pri-d:#047857;--pri-soft:#0596691a}
|
||||||
|
html.dark{--bg:#0a0a0e;--card:#13120a;--text:#fef9e7;--muted:#a39070;--border:#2a2512}
|
||||||
|
*{margin:0;padding:0;box-sizing:border-box}
|
||||||
|
html,body{min-height:100vh}
|
||||||
|
body{font-family:'Inter',system-ui,sans-serif;background:var(--bg);color:var(--text);line-height:1.55}
|
||||||
|
.hdr{position:relative;background:linear-gradient(110deg,#047857,#059669 60%,#059669cc);color:#fff;padding:46px 22px 30px;overflow:hidden;border-bottom:2px solid #05966933}
|
||||||
|
.hdr::before{content:'△';position:absolute;right:-12px;top:50%;transform:translateY(-50%);font-family:'Outfit',sans-serif;font-size:clamp(5rem,15vw,11rem);font-weight:900;color:transparent;-webkit-text-stroke:1.5px rgba(255,255,255,.12);line-height:1;pointer-events:none}
|
||||||
|
.hdr-inner{position:relative;z-index:1;max-width:1100px;margin:0 auto;display:flex;align-items:center;gap:18px;flex-wrap:wrap}
|
||||||
|
.hdr-back{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;background:rgba(255,255,255,.14);border-radius:9px;color:#fff;text-decoration:none;font-size:.85rem;font-weight:600}
|
||||||
|
.hdr-back:hover{background:rgba(255,255,255,.24)}
|
||||||
|
.hdr h1{font-family:'Outfit',sans-serif;font-size:1.6rem;font-weight:900}
|
||||||
|
.hdr-sub{font-size:.92rem;opacity:.85;margin-top:4px}
|
||||||
|
.ic{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;display:inline-block;vertical-align:middle}
|
||||||
|
main{max-width:740px;margin:0 auto;padding:48px 22px 80px}
|
||||||
|
.coming{background:var(--card);border:1.5px solid var(--border);border-radius:18px;padding:32px 28px;text-align:center;box-shadow:0 4px 18px rgba(0,0,0,.05)}
|
||||||
|
.coming-icon{width:72px;height:72px;border-radius:20px;background:var(--pri-soft);display:flex;align-items:center;justify-content:center;margin:0 auto 18px;color:var(--pri-d)}
|
||||||
|
.coming-icon svg{width:36px;height:36px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
|
||||||
|
.coming h2{font-family:'Outfit',sans-serif;font-size:1.5rem;color:var(--pri-d);margin-bottom:12px}
|
||||||
|
.coming p{font-size:1rem;color:var(--muted);margin-bottom:8px}
|
||||||
|
.coming p b{color:var(--text)}
|
||||||
|
.coming-cta{margin-top:24px;display:inline-flex;align-items:center;gap:8px;padding:12px 22px;background:linear-gradient(135deg,var(--pri),var(--pri-d));color:#fff;border-radius:12px;font-weight:700;text-decoration:none;box-shadow:0 6px 22px #05966933}
|
||||||
|
.coming-cta:hover{filter:brightness(1.08)}
|
||||||
|
.range-pill{display:inline-block;padding:5px 13px;background:var(--pri-soft);color:var(--pri-d);border-radius:99px;font-size:.84rem;font-weight:700;margin-top:6px}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<header class="hdr">
|
||||||
|
<div class="hdr-inner">
|
||||||
|
<div>
|
||||||
|
<a href="/textbook/geometry-7" class="hdr-back">
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><polyline points="15 18 9 12 15 6"/></svg>
|
||||||
|
К Геометрия 7
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h1>Глава 2 · Признаки равенства треугольников</h1>
|
||||||
|
<div class="hdr-sub">§8–§14</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<div class="coming">
|
||||||
|
<div class="coming-icon">
|
||||||
|
<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
|
||||||
|
</div>
|
||||||
|
<h2>Глава в разработке</h2>
|
||||||
|
<p>Эта глава — часть нового курса <b>Геометрия 7</b>.</p>
|
||||||
|
<p>Содержание (§8–§14) уже спланировано — теория, интерактивы и финальный босс появятся в одной из ближайших волн реализации.</p>
|
||||||
|
<div class="range-pill">§8–§14</div>
|
||||||
|
<div style="margin-top:8px">
|
||||||
|
<a href="/textbook/geometry-7" class="coming-cta">
|
||||||
|
Вернуться к учебнику
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><polyline points="9 18 15 12 9 6"/></svg>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||||
|
<title>Глава 3 · Параллельность прямых</title>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@600;800;900&family=Inter:wght@400;600;700&display=swap" rel="stylesheet">
|
||||||
|
<script src="/js/api.js" defer></script>
|
||||||
|
<style>
|
||||||
|
:root{--bg:#fafafa;--card:#fff;--text:#0f172a;--muted:#64748b;--border:#e2e8f0;--pri:#7c3aed;--pri-d:#6d28d9;--pri-soft:#7c3aed1a}
|
||||||
|
html.dark{--bg:#0a0a0e;--card:#13120a;--text:#fef9e7;--muted:#a39070;--border:#2a2512}
|
||||||
|
*{margin:0;padding:0;box-sizing:border-box}
|
||||||
|
html,body{min-height:100vh}
|
||||||
|
body{font-family:'Inter',system-ui,sans-serif;background:var(--bg);color:var(--text);line-height:1.55}
|
||||||
|
.hdr{position:relative;background:linear-gradient(110deg,#6d28d9,#7c3aed 60%,#7c3aedcc);color:#fff;padding:46px 22px 30px;overflow:hidden;border-bottom:2px solid #7c3aed33}
|
||||||
|
.hdr::before{content:'∥';position:absolute;right:-12px;top:50%;transform:translateY(-50%);font-family:'Outfit',sans-serif;font-size:clamp(5rem,15vw,11rem);font-weight:900;color:transparent;-webkit-text-stroke:1.5px rgba(255,255,255,.12);line-height:1;pointer-events:none}
|
||||||
|
.hdr-inner{position:relative;z-index:1;max-width:1100px;margin:0 auto;display:flex;align-items:center;gap:18px;flex-wrap:wrap}
|
||||||
|
.hdr-back{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;background:rgba(255,255,255,.14);border-radius:9px;color:#fff;text-decoration:none;font-size:.85rem;font-weight:600}
|
||||||
|
.hdr-back:hover{background:rgba(255,255,255,.24)}
|
||||||
|
.hdr h1{font-family:'Outfit',sans-serif;font-size:1.6rem;font-weight:900}
|
||||||
|
.hdr-sub{font-size:.92rem;opacity:.85;margin-top:4px}
|
||||||
|
.ic{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;display:inline-block;vertical-align:middle}
|
||||||
|
main{max-width:740px;margin:0 auto;padding:48px 22px 80px}
|
||||||
|
.coming{background:var(--card);border:1.5px solid var(--border);border-radius:18px;padding:32px 28px;text-align:center;box-shadow:0 4px 18px rgba(0,0,0,.05)}
|
||||||
|
.coming-icon{width:72px;height:72px;border-radius:20px;background:var(--pri-soft);display:flex;align-items:center;justify-content:center;margin:0 auto 18px;color:var(--pri-d)}
|
||||||
|
.coming-icon svg{width:36px;height:36px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
|
||||||
|
.coming h2{font-family:'Outfit',sans-serif;font-size:1.5rem;color:var(--pri-d);margin-bottom:12px}
|
||||||
|
.coming p{font-size:1rem;color:var(--muted);margin-bottom:8px}
|
||||||
|
.coming p b{color:var(--text)}
|
||||||
|
.coming-cta{margin-top:24px;display:inline-flex;align-items:center;gap:8px;padding:12px 22px;background:linear-gradient(135deg,var(--pri),var(--pri-d));color:#fff;border-radius:12px;font-weight:700;text-decoration:none;box-shadow:0 6px 22px #7c3aed33}
|
||||||
|
.coming-cta:hover{filter:brightness(1.08)}
|
||||||
|
.range-pill{display:inline-block;padding:5px 13px;background:var(--pri-soft);color:var(--pri-d);border-radius:99px;font-size:.84rem;font-weight:700;margin-top:6px}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<header class="hdr">
|
||||||
|
<div class="hdr-inner">
|
||||||
|
<div>
|
||||||
|
<a href="/textbook/geometry-7" class="hdr-back">
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><polyline points="15 18 9 12 15 6"/></svg>
|
||||||
|
К Геометрия 7
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h1>Глава 3 · Параллельность прямых</h1>
|
||||||
|
<div class="hdr-sub">§15–§18</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<div class="coming">
|
||||||
|
<div class="coming-icon">
|
||||||
|
<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
|
||||||
|
</div>
|
||||||
|
<h2>Глава в разработке</h2>
|
||||||
|
<p>Эта глава — часть нового курса <b>Геометрия 7</b>.</p>
|
||||||
|
<p>Содержание (§15–§18) уже спланировано — теория, интерактивы и финальный босс появятся в одной из ближайших волн реализации.</p>
|
||||||
|
<div class="range-pill">§15–§18</div>
|
||||||
|
<div style="margin-top:8px">
|
||||||
|
<a href="/textbook/geometry-7" class="coming-cta">
|
||||||
|
Вернуться к учебнику
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><polyline points="9 18 15 12 9 6"/></svg>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||||
|
<title>Глава 4 · Сумма углов треугольника</title>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@600;800;900&family=Inter:wght@400;600;700&display=swap" rel="stylesheet">
|
||||||
|
<script src="/js/api.js" defer></script>
|
||||||
|
<style>
|
||||||
|
:root{--bg:#fafafa;--card:#fff;--text:#0f172a;--muted:#64748b;--border:#e2e8f0;--pri:#0891b2;--pri-d:#0e7490;--pri-soft:#0891b21a}
|
||||||
|
html.dark{--bg:#0a0a0e;--card:#13120a;--text:#fef9e7;--muted:#a39070;--border:#2a2512}
|
||||||
|
*{margin:0;padding:0;box-sizing:border-box}
|
||||||
|
html,body{min-height:100vh}
|
||||||
|
body{font-family:'Inter',system-ui,sans-serif;background:var(--bg);color:var(--text);line-height:1.55}
|
||||||
|
.hdr{position:relative;background:linear-gradient(110deg,#0e7490,#0891b2 60%,#0891b2cc);color:#fff;padding:46px 22px 30px;overflow:hidden;border-bottom:2px solid #0891b233}
|
||||||
|
.hdr::before{content:'∠';position:absolute;right:-12px;top:50%;transform:translateY(-50%);font-family:'Outfit',sans-serif;font-size:clamp(5rem,15vw,11rem);font-weight:900;color:transparent;-webkit-text-stroke:1.5px rgba(255,255,255,.12);line-height:1;pointer-events:none}
|
||||||
|
.hdr-inner{position:relative;z-index:1;max-width:1100px;margin:0 auto;display:flex;align-items:center;gap:18px;flex-wrap:wrap}
|
||||||
|
.hdr-back{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;background:rgba(255,255,255,.14);border-radius:9px;color:#fff;text-decoration:none;font-size:.85rem;font-weight:600}
|
||||||
|
.hdr-back:hover{background:rgba(255,255,255,.24)}
|
||||||
|
.hdr h1{font-family:'Outfit',sans-serif;font-size:1.6rem;font-weight:900}
|
||||||
|
.hdr-sub{font-size:.92rem;opacity:.85;margin-top:4px}
|
||||||
|
.ic{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;display:inline-block;vertical-align:middle}
|
||||||
|
main{max-width:740px;margin:0 auto;padding:48px 22px 80px}
|
||||||
|
.coming{background:var(--card);border:1.5px solid var(--border);border-radius:18px;padding:32px 28px;text-align:center;box-shadow:0 4px 18px rgba(0,0,0,.05)}
|
||||||
|
.coming-icon{width:72px;height:72px;border-radius:20px;background:var(--pri-soft);display:flex;align-items:center;justify-content:center;margin:0 auto 18px;color:var(--pri-d)}
|
||||||
|
.coming-icon svg{width:36px;height:36px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
|
||||||
|
.coming h2{font-family:'Outfit',sans-serif;font-size:1.5rem;color:var(--pri-d);margin-bottom:12px}
|
||||||
|
.coming p{font-size:1rem;color:var(--muted);margin-bottom:8px}
|
||||||
|
.coming p b{color:var(--text)}
|
||||||
|
.coming-cta{margin-top:24px;display:inline-flex;align-items:center;gap:8px;padding:12px 22px;background:linear-gradient(135deg,var(--pri),var(--pri-d));color:#fff;border-radius:12px;font-weight:700;text-decoration:none;box-shadow:0 6px 22px #0891b233}
|
||||||
|
.coming-cta:hover{filter:brightness(1.08)}
|
||||||
|
.range-pill{display:inline-block;padding:5px 13px;background:var(--pri-soft);color:var(--pri-d);border-radius:99px;font-size:.84rem;font-weight:700;margin-top:6px}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<header class="hdr">
|
||||||
|
<div class="hdr-inner">
|
||||||
|
<div>
|
||||||
|
<a href="/textbook/geometry-7" class="hdr-back">
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><polyline points="15 18 9 12 15 6"/></svg>
|
||||||
|
К Геометрия 7
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h1>Глава 4 · Сумма углов треугольника</h1>
|
||||||
|
<div class="hdr-sub">§19–§26</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<div class="coming">
|
||||||
|
<div class="coming-icon">
|
||||||
|
<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
|
||||||
|
</div>
|
||||||
|
<h2>Глава в разработке</h2>
|
||||||
|
<p>Эта глава — часть нового курса <b>Геометрия 7</b>.</p>
|
||||||
|
<p>Содержание (§19–§26) уже спланировано — теория, интерактивы и финальный босс появятся в одной из ближайших волн реализации.</p>
|
||||||
|
<div class="range-pill">§19–§26</div>
|
||||||
|
<div style="margin-top:8px">
|
||||||
|
<a href="/textbook/geometry-7" class="coming-cta">
|
||||||
|
Вернуться к учебнику
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><polyline points="9 18 15 12 9 6"/></svg>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||||
|
<title>Глава 5 · Задачи на построение</title>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@600;800;900&family=Inter:wght@400;600;700&display=swap" rel="stylesheet">
|
||||||
|
<script src="/js/api.js" defer></script>
|
||||||
|
<style>
|
||||||
|
:root{--bg:#fafafa;--card:#fff;--text:#0f172a;--muted:#64748b;--border:#e2e8f0;--pri:#db2777;--pri-d:#9d174d;--pri-soft:#db27771a}
|
||||||
|
html.dark{--bg:#0a0a0e;--card:#13120a;--text:#fef9e7;--muted:#a39070;--border:#2a2512}
|
||||||
|
*{margin:0;padding:0;box-sizing:border-box}
|
||||||
|
html,body{min-height:100vh}
|
||||||
|
body{font-family:'Inter',system-ui,sans-serif;background:var(--bg);color:var(--text);line-height:1.55}
|
||||||
|
.hdr{position:relative;background:linear-gradient(110deg,#9d174d,#db2777 60%,#db2777cc);color:#fff;padding:46px 22px 30px;overflow:hidden;border-bottom:2px solid #db277733}
|
||||||
|
.hdr::before{content:'◯';position:absolute;right:-12px;top:50%;transform:translateY(-50%);font-family:'Outfit',sans-serif;font-size:clamp(5rem,15vw,11rem);font-weight:900;color:transparent;-webkit-text-stroke:1.5px rgba(255,255,255,.12);line-height:1;pointer-events:none}
|
||||||
|
.hdr-inner{position:relative;z-index:1;max-width:1100px;margin:0 auto;display:flex;align-items:center;gap:18px;flex-wrap:wrap}
|
||||||
|
.hdr-back{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;background:rgba(255,255,255,.14);border-radius:9px;color:#fff;text-decoration:none;font-size:.85rem;font-weight:600}
|
||||||
|
.hdr-back:hover{background:rgba(255,255,255,.24)}
|
||||||
|
.hdr h1{font-family:'Outfit',sans-serif;font-size:1.6rem;font-weight:900}
|
||||||
|
.hdr-sub{font-size:.92rem;opacity:.85;margin-top:4px}
|
||||||
|
.ic{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;display:inline-block;vertical-align:middle}
|
||||||
|
main{max-width:740px;margin:0 auto;padding:48px 22px 80px}
|
||||||
|
.coming{background:var(--card);border:1.5px solid var(--border);border-radius:18px;padding:32px 28px;text-align:center;box-shadow:0 4px 18px rgba(0,0,0,.05)}
|
||||||
|
.coming-icon{width:72px;height:72px;border-radius:20px;background:var(--pri-soft);display:flex;align-items:center;justify-content:center;margin:0 auto 18px;color:var(--pri-d)}
|
||||||
|
.coming-icon svg{width:36px;height:36px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
|
||||||
|
.coming h2{font-family:'Outfit',sans-serif;font-size:1.5rem;color:var(--pri-d);margin-bottom:12px}
|
||||||
|
.coming p{font-size:1rem;color:var(--muted);margin-bottom:8px}
|
||||||
|
.coming p b{color:var(--text)}
|
||||||
|
.coming-cta{margin-top:24px;display:inline-flex;align-items:center;gap:8px;padding:12px 22px;background:linear-gradient(135deg,var(--pri),var(--pri-d));color:#fff;border-radius:12px;font-weight:700;text-decoration:none;box-shadow:0 6px 22px #db277733}
|
||||||
|
.coming-cta:hover{filter:brightness(1.08)}
|
||||||
|
.range-pill{display:inline-block;padding:5px 13px;background:var(--pri-soft);color:var(--pri-d);border-radius:99px;font-size:.84rem;font-weight:700;margin-top:6px}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<header class="hdr">
|
||||||
|
<div class="hdr-inner">
|
||||||
|
<div>
|
||||||
|
<a href="/textbook/geometry-7" class="hdr-back">
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><polyline points="15 18 9 12 15 6"/></svg>
|
||||||
|
К Геометрия 7
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h1>Глава 5 · Задачи на построение</h1>
|
||||||
|
<div class="hdr-sub">§27–§31</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<div class="coming">
|
||||||
|
<div class="coming-icon">
|
||||||
|
<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
|
||||||
|
</div>
|
||||||
|
<h2>Глава в разработке</h2>
|
||||||
|
<p>Эта глава — часть нового курса <b>Геометрия 7</b>.</p>
|
||||||
|
<p>Содержание (§27–§31) уже спланировано — теория, интерактивы и финальный босс появятся в одной из ближайших волн реализации.</p>
|
||||||
|
<div class="range-pill">§27–§31</div>
|
||||||
|
<div style="margin-top:8px">
|
||||||
|
<a href="/textbook/geometry-7" class="coming-cta">
|
||||||
|
Вернуться к учебнику
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><polyline points="9 18 15 12 9 6"/></svg>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,394 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
|
||||||
|
<meta http-equiv="Pragma" content="no-cache">
|
||||||
|
<meta http-equiv="Expires" content="0">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||||
|
<title>Геометрия 7 класс — учебник</title>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@400;500;600;700;800;900&family=Inter:wght@400;500;600;700&family=Unbounded:wght@400;700;800;900&display=swap" rel="stylesheet">
|
||||||
|
<script src="/js/api.js" defer></script>
|
||||||
|
<script src="/js/xp.js" defer></script>
|
||||||
|
<style>
|
||||||
|
:root{
|
||||||
|
--bg:#eff6ff; --card:#fff;
|
||||||
|
--text:#1e1b4b; --muted:#4b5563;
|
||||||
|
--border:#bfdbfe;
|
||||||
|
--pri:#1d4ed8; --pri-d:#1e40af;
|
||||||
|
--pri-soft:#dbeafe;
|
||||||
|
--ch1:#d97706; --ch1-d:#b45309;
|
||||||
|
--ch2:#059669; --ch2-d:#047857;
|
||||||
|
--ch3:#7c3aed; --ch3-d:#6d28d9;
|
||||||
|
--ch4:#0891b2; --ch4-d:#0e7490;
|
||||||
|
--ch5:#db2777; --ch5-d:#9d174d;
|
||||||
|
--sh:0 4px 16px rgba(29,78,216,.09);
|
||||||
|
--sh-h:0 12px 36px rgba(29,78,216,.18);
|
||||||
|
}
|
||||||
|
html.dark{
|
||||||
|
--bg:#080d1a; --card:#0f1a2e;
|
||||||
|
--text:#e0eaff; --muted:#8ba3c7;
|
||||||
|
--border:#1e3a5f;
|
||||||
|
--pri-soft:rgba(29,78,216,.18);
|
||||||
|
}
|
||||||
|
*{margin:0;padding:0;box-sizing:border-box}
|
||||||
|
html,body{min-height:100vh}
|
||||||
|
body{font-family:'Inter',system-ui,sans-serif;background:var(--bg);color:var(--text);line-height:1.55;transition:background .25s,color .25s}
|
||||||
|
|
||||||
|
/* HEADER */
|
||||||
|
.hdr{position:relative;background:linear-gradient(110deg,#1e40af 0%,#1d4ed8 50%,#06b6d4 100%);color:#fff;padding:32px 24px 28px;overflow:hidden;border-bottom:2px solid rgba(147,210,255,.15)}
|
||||||
|
.hdr-geo-wm{position:absolute;right:10px;top:50%;transform:translateY(-50%);pointer-events:none;user-select:none;opacity:.12;display:flex;align-items:center;gap:6px}
|
||||||
|
.hdr-geo-wm svg{width:120px;height:120px;stroke:#fff;stroke-width:1.5;fill:none}
|
||||||
|
.hdr-inner{position:relative;z-index:1;max-width:1100px;margin:0 auto;display:flex;align-items:center;gap:18px;flex-wrap:wrap}
|
||||||
|
.hdr-back{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;background:rgba(255,255,255,.14);border-radius:9px;color:#fff;text-decoration:none;font-size:.85rem;font-weight:600;transition:background .15s}
|
||||||
|
.hdr-back:hover{background:rgba(255,255,255,.24)}
|
||||||
|
.hdr h1{font-family:'Outfit',sans-serif;font-size:1.85rem;font-weight:900;letter-spacing:-.01em}
|
||||||
|
.hdr-sub{font-size:.92rem;opacity:.85;margin-top:4px}
|
||||||
|
.hdr-side{margin-left:auto;display:flex;gap:8px}
|
||||||
|
.hdr-btn{padding:8px 12px;background:rgba(255,255,255,.14);border:none;color:#fff;border-radius:9px;cursor:pointer;font-weight:600;font-size:.82rem;display:inline-flex;align-items:center;gap:6px;transition:background .15s;font-family:inherit}
|
||||||
|
.hdr-btn:hover{background:rgba(255,255,255,.24)}
|
||||||
|
.ic{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
|
||||||
|
|
||||||
|
main{max-width:1100px;margin:0 auto;padding:32px 24px 60px}
|
||||||
|
|
||||||
|
/* OVERALL PROGRESS */
|
||||||
|
.prog-overall{background:linear-gradient(135deg,var(--pri-soft),rgba(6,182,212,.12));border:1px solid var(--border);border-radius:14px;padding:14px 18px;margin-bottom:28px;display:flex;gap:14px;align-items:center;flex-wrap:wrap}
|
||||||
|
.po-icon{width:46px;height:46px;border-radius:12px;background:linear-gradient(135deg,#1d4ed8,#06b6d4);color:#fff;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-family:'Outfit',sans-serif;font-size:1.2rem;font-weight:900}
|
||||||
|
.po-text{flex:1;min-width:160px}
|
||||||
|
.po-label{font-size:.78rem;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin-bottom:4px}
|
||||||
|
.po-bar{height:8px;background:rgba(29,78,216,.12);border-radius:5px;overflow:hidden;margin-top:6px}
|
||||||
|
.po-fill{height:100%;background:linear-gradient(90deg,var(--pri),#06b6d4);border-radius:5px;transition:width .5s}
|
||||||
|
.po-xp{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;background:linear-gradient(135deg,#f59e0b,var(--pri));color:#fff;border-radius:99px;font-size:.8rem;font-weight:800;font-family:'Unbounded',sans-serif;letter-spacing:.02em;box-shadow:0 4px 12px rgba(29,78,216,.22)}
|
||||||
|
|
||||||
|
/* CHAPTER GRID — 5 chapters: 1 / 2 / 3 / 5 columns */
|
||||||
|
.ch-grid{display:grid;grid-template-columns:1fr;gap:18px;margin-bottom:30px}
|
||||||
|
@media(min-width:600px){.ch-grid{grid-template-columns:1fr 1fr}}
|
||||||
|
@media(min-width:900px){.ch-grid{grid-template-columns:repeat(3,1fr)}}
|
||||||
|
@media(min-width:1180px){.ch-grid{grid-template-columns:repeat(5,1fr)}}
|
||||||
|
|
||||||
|
.ch-card{background:var(--card);border:1.5px solid var(--border);border-radius:18px;overflow:hidden;display:flex;flex-direction:column;transition:transform .2s,box-shadow .2s,border-color .2s;cursor:pointer;text-decoration:none;color:inherit}
|
||||||
|
.ch-card:hover{transform:translateY(-4px);box-shadow:var(--sh-h)}
|
||||||
|
.ch-cover{padding:22px 22px 18px;color:#fff;position:relative;overflow:hidden}
|
||||||
|
.ch-cover-wm{position:absolute;right:-8px;top:-22px;font-size:6rem;font-weight:900;font-family:'Outfit',sans-serif;line-height:1;color:rgba(255,255,255,.18);pointer-events:none}
|
||||||
|
.ch-num{display:inline-block;padding:4px 10px;background:rgba(255,255,255,.22);border-radius:99px;font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;margin-bottom:8px;position:relative;z-index:1}
|
||||||
|
.ch-title{font-family:'Outfit',sans-serif;font-size:1.05rem;font-weight:800;letter-spacing:-.01em;position:relative;z-index:1;line-height:1.3}
|
||||||
|
.ch-range{font-size:.82rem;opacity:.88;margin-top:4px;position:relative;z-index:1;font-weight:500}
|
||||||
|
|
||||||
|
.ch-cover.ch1{background:linear-gradient(135deg,#92400e,#d97706 60%,#fbbf24)}
|
||||||
|
.ch-cover.ch2{background:linear-gradient(135deg,#064e3b,#059669 60%,#34d399)}
|
||||||
|
.ch-cover.ch3{background:linear-gradient(135deg,#3b0764,#7c3aed 60%,#a78bfa)}
|
||||||
|
.ch-cover.ch4{background:linear-gradient(135deg,#164e63,#0891b2 60%,#22d3ee)}
|
||||||
|
.ch-cover.ch5{background:linear-gradient(135deg,#831843,#db2777 60%,#f472b6)}
|
||||||
|
|
||||||
|
.ch-body{padding:16px 20px 18px;display:flex;flex-direction:column;flex:1}
|
||||||
|
.ch-desc{font-size:.85rem;color:var(--text);opacity:.82;flex:1;margin-bottom:12px;line-height:1.55}
|
||||||
|
|
||||||
|
.ch-prog{margin-bottom:12px}
|
||||||
|
.ch-prog-label{display:flex;justify-content:space-between;font-size:.74rem;color:var(--muted);font-weight:600;margin-bottom:4px}
|
||||||
|
.ch-prog-bar{height:6px;background:rgba(0,0,0,.07);border-radius:4px;overflow:hidden}
|
||||||
|
.ch-prog-fill{height:100%;border-radius:4px;transition:width .5s}
|
||||||
|
.ch-card.ch1-card .ch-prog-fill{background:linear-gradient(90deg,var(--ch1),var(--ch1-d))}
|
||||||
|
.ch-card.ch2-card .ch-prog-fill{background:linear-gradient(90deg,var(--ch2),var(--ch2-d))}
|
||||||
|
.ch-card.ch3-card .ch-prog-fill{background:linear-gradient(90deg,var(--ch3),var(--ch3-d))}
|
||||||
|
.ch-card.ch4-card .ch-prog-fill{background:linear-gradient(90deg,var(--ch4),var(--ch4-d))}
|
||||||
|
.ch-card.ch5-card .ch-prog-fill{background:linear-gradient(90deg,var(--ch5),var(--ch5-d))}
|
||||||
|
|
||||||
|
.ch-action{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-radius:11px;font-weight:700;font-size:.88rem;color:#fff;transition:filter .15s}
|
||||||
|
.ch-action:hover{filter:brightness(1.08)}
|
||||||
|
.ch-card.ch1-card .ch-action{background:linear-gradient(135deg,var(--ch1),#fbbf24)}
|
||||||
|
.ch-card.ch2-card .ch-action{background:linear-gradient(135deg,var(--ch2),#34d399)}
|
||||||
|
.ch-card.ch3-card .ch-action{background:linear-gradient(135deg,var(--ch3),#a78bfa)}
|
||||||
|
.ch-card.ch4-card .ch-action{background:linear-gradient(135deg,var(--ch4),#22d3ee)}
|
||||||
|
.ch-card.ch5-card .ch-action{background:linear-gradient(135deg,var(--ch5),#f472b6)}
|
||||||
|
|
||||||
|
/* ACHIEVEMENT STRIP */
|
||||||
|
.ach-strip{background:var(--card);border:1.5px solid var(--border);border-radius:16px;padding:18px 22px;margin-bottom:28px;display:flex;align-items:center;gap:16px;transition:border-color .4s,box-shadow .4s}
|
||||||
|
.ach-strip.lit{border-color:#f59e0b;box-shadow:0 0 0 3px rgba(245,158,11,.18)}
|
||||||
|
.ach-icon{width:52px;height:52px;border-radius:14px;background:rgba(0,0,0,.06);display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:background .4s}
|
||||||
|
.ach-strip.lit .ach-icon{background:linear-gradient(135deg,#fbbf24,#f59e0b)}
|
||||||
|
.ach-icon svg{width:28px;height:28px;stroke:var(--muted);fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
|
||||||
|
.ach-strip.lit .ach-icon svg{stroke:#fff}
|
||||||
|
.ach-text{flex:1}
|
||||||
|
.ach-title{font-weight:800;font-size:1.02rem;color:var(--text)}
|
||||||
|
.ach-sub{font-size:.85rem;color:var(--muted);margin-top:2px}
|
||||||
|
.ach-strip.lit .ach-title{color:#92400e}
|
||||||
|
|
||||||
|
.foot{text-align:center;padding:24px 16px;color:var(--muted);font-size:.78rem;border-top:1px solid var(--border)}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<header class="hdr">
|
||||||
|
<div class="hdr-geo-wm">
|
||||||
|
<svg viewBox="0 0 120 120">
|
||||||
|
<polygon points="60,8 112,92 8,92" stroke-width="1.5"/>
|
||||||
|
<circle cx="60" cy="60" r="38" stroke-width="1.2"/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<div class="hdr-inner">
|
||||||
|
<div>
|
||||||
|
<a href="/textbooks" class="hdr-back">
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><polyline points="15 18 9 12 15 6"/></svg>
|
||||||
|
К каталогу
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h1>Геометрия — 7 класс</h1>
|
||||||
|
<div class="hdr-sub">Полный курс: начала, треугольники, параллельность, углы, построения</div>
|
||||||
|
</div>
|
||||||
|
<div class="hdr-side">
|
||||||
|
<button id="theme-btn" class="hdr-btn" title="Сменить тему">
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><path d="M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8z"/></svg>
|
||||||
|
<span id="theme-lab">Тёмная</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
|
||||||
|
<section class="prog-overall">
|
||||||
|
<div class="po-icon">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" style="width:22px;height:22px">
|
||||||
|
<polygon points="12,2 22,20 2,20"/>
|
||||||
|
<circle cx="12" cy="12" r="4"/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<div class="po-text">
|
||||||
|
<div class="po-label">Общий прогресс по курсу</div>
|
||||||
|
<div id="overall-text" style="font-size:1.05rem;font-weight:700">Загрузка...</div>
|
||||||
|
<div class="po-bar"><div id="overall-fill" class="po-fill" style="width:0%"></div></div>
|
||||||
|
</div>
|
||||||
|
<div id="hero-xp-badge" class="po-xp" style="display:none">0 XP</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div class="ch-grid">
|
||||||
|
|
||||||
|
<a href="/textbook/geometry-7-ch1" class="ch-card ch1-card" id="ch-1">
|
||||||
|
<div class="ch-cover ch1">
|
||||||
|
<div class="ch-cover-wm">●</div>
|
||||||
|
<div class="ch-num">Глава 1</div>
|
||||||
|
<div class="ch-title">Начальные понятия</div>
|
||||||
|
<div class="ch-range">§1–§7 + Финал</div>
|
||||||
|
</div>
|
||||||
|
<div class="ch-body">
|
||||||
|
<div class="ch-desc">Прямая, луч, отрезок, ломаная, окружность и круг, углы, смежные и вертикальные углы, перпендикулярные прямые.</div>
|
||||||
|
<div class="ch-prog">
|
||||||
|
<div class="ch-prog-label"><span>Прогресс</span><span id="prog-1">0%</span></div>
|
||||||
|
<div class="ch-prog-bar"><div class="ch-prog-fill" id="fill-1" style="width:0%"></div></div>
|
||||||
|
</div>
|
||||||
|
<div class="ch-action">
|
||||||
|
<span id="btn-1">Открыть главу</span>
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><polyline points="9 18 15 12 9 6"/></svg>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="/textbook/geometry-7-ch2" class="ch-card ch2-card" id="ch-2">
|
||||||
|
<div class="ch-cover ch2">
|
||||||
|
<div class="ch-cover-wm">△</div>
|
||||||
|
<div class="ch-num">Глава 2</div>
|
||||||
|
<div class="ch-title">Признаки равенства треугольников</div>
|
||||||
|
<div class="ch-range">§8–§14 + Финал</div>
|
||||||
|
</div>
|
||||||
|
<div class="ch-body">
|
||||||
|
<div class="ch-desc">Три признака равенства треугольников, высота, медиана и биссектриса, равнобедренный треугольник, серединный перпендикуляр.</div>
|
||||||
|
<div class="ch-prog">
|
||||||
|
<div class="ch-prog-label"><span>Прогресс</span><span id="prog-2">0%</span></div>
|
||||||
|
<div class="ch-prog-bar"><div class="ch-prog-fill" id="fill-2" style="width:0%"></div></div>
|
||||||
|
</div>
|
||||||
|
<div class="ch-action">
|
||||||
|
<span id="btn-2">Открыть главу</span>
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><polyline points="9 18 15 12 9 6"/></svg>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="/textbook/geometry-7-ch3" class="ch-card ch3-card" id="ch-3">
|
||||||
|
<div class="ch-cover ch3">
|
||||||
|
<div class="ch-cover-wm">∥</div>
|
||||||
|
<div class="ch-num">Глава 3</div>
|
||||||
|
<div class="ch-title">Параллельность прямых</div>
|
||||||
|
<div class="ch-range">§15–§18 + Финал</div>
|
||||||
|
</div>
|
||||||
|
<div class="ch-body">
|
||||||
|
<div class="ch-desc">Признаки параллельности, аксиома параллельных, свойства параллельных, углы с параллельными и перпендикулярными сторонами.</div>
|
||||||
|
<div class="ch-prog">
|
||||||
|
<div class="ch-prog-label"><span>Прогресс</span><span id="prog-3">0%</span></div>
|
||||||
|
<div class="ch-prog-bar"><div class="ch-prog-fill" id="fill-3" style="width:0%"></div></div>
|
||||||
|
</div>
|
||||||
|
<div class="ch-action">
|
||||||
|
<span id="btn-3">Открыть главу</span>
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><polyline points="9 18 15 12 9 6"/></svg>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="/textbook/geometry-7-ch4" class="ch-card ch4-card" id="ch-4">
|
||||||
|
<div class="ch-cover ch4">
|
||||||
|
<div class="ch-cover-wm">∠</div>
|
||||||
|
<div class="ch-num">Глава 4</div>
|
||||||
|
<div class="ch-title">Сумма углов треугольника</div>
|
||||||
|
<div class="ch-range">§19–§26 + Финал</div>
|
||||||
|
</div>
|
||||||
|
<div class="ch-body">
|
||||||
|
<div class="ch-desc">Сумма углов, внешний угол, соотношения между сторонами и углами, неравенство треугольника, прямоугольные треугольники, биссектриса.</div>
|
||||||
|
<div class="ch-prog">
|
||||||
|
<div class="ch-prog-label"><span>Прогресс</span><span id="prog-4">0%</span></div>
|
||||||
|
<div class="ch-prog-bar"><div class="ch-prog-fill" id="fill-4" style="width:0%"></div></div>
|
||||||
|
</div>
|
||||||
|
<div class="ch-action">
|
||||||
|
<span id="btn-4">Открыть главу</span>
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><polyline points="9 18 15 12 9 6"/></svg>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="/textbook/geometry-7-ch5" class="ch-card ch5-card" id="ch-5">
|
||||||
|
<div class="ch-cover ch5">
|
||||||
|
<div class="ch-cover-wm">◯</div>
|
||||||
|
<div class="ch-num">Глава 5</div>
|
||||||
|
<div class="ch-title">Задачи на построение</div>
|
||||||
|
<div class="ch-range">§27–§31 + Финал</div>
|
||||||
|
</div>
|
||||||
|
<div class="ch-body">
|
||||||
|
<div class="ch-desc">Построения циркулем и линейкой: треугольник по трём сторонам, биссектриса, середина отрезка, перпендикуляр, геометрическое место точек.</div>
|
||||||
|
<div class="ch-prog">
|
||||||
|
<div class="ch-prog-label"><span>Прогресс</span><span id="prog-5">0%</span></div>
|
||||||
|
<div class="ch-prog-bar"><div class="ch-prog-fill" id="fill-5" style="width:0%"></div></div>
|
||||||
|
</div>
|
||||||
|
<div class="ch-action">
|
||||||
|
<span id="btn-5">Открыть главу</span>
|
||||||
|
<svg class="ic" viewBox="0 0 24 24"><polyline points="9 18 15 12 9 6"/></svg>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ach-strip" id="ach-strip">
|
||||||
|
<div class="ach-icon">
|
||||||
|
<svg viewBox="0 0 24 24">
|
||||||
|
<polygon points="12,2 22,20 2,20"/>
|
||||||
|
<circle cx="12" cy="12" r="3"/>
|
||||||
|
<line x1="12" y1="2" x2="12" y2="9"/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<div class="ach-text">
|
||||||
|
<div class="ach-title">Мастер геометрии 7</div>
|
||||||
|
<div class="ach-sub" id="ach-sub">Прочитайте все 31 параграф пяти глав, чтобы получить достижение</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<footer class="foot">
|
||||||
|
Интерактивный учебник «Геометрия — 7 класс» · В. В. Казаков · LearnSpace
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/* THEME */
|
||||||
|
(function(){
|
||||||
|
var saved = localStorage.getItem('geometry7_theme') || localStorage.getItem('theme') || 'light';
|
||||||
|
if (saved === 'dark') document.documentElement.classList.add('dark');
|
||||||
|
var lab = document.getElementById('theme-lab');
|
||||||
|
if (lab) lab.textContent = saved === 'dark' ? 'Светлая' : 'Тёмная';
|
||||||
|
document.getElementById('theme-btn').addEventListener('click', function(){
|
||||||
|
document.documentElement.classList.toggle('dark');
|
||||||
|
var dark = document.documentElement.classList.contains('dark');
|
||||||
|
localStorage.setItem('geometry7_theme', dark ? 'dark' : 'light');
|
||||||
|
localStorage.setItem('theme', dark ? 'dark' : 'light');
|
||||||
|
if (lab) lab.textContent = dark ? 'Светлая' : 'Тёмная';
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
||||||
|
/* PROGRESS */
|
||||||
|
var TOTAL = 31;
|
||||||
|
var CH_PARA = {
|
||||||
|
'geometry-7-ch1': 7,
|
||||||
|
'geometry-7-ch2': 7,
|
||||||
|
'geometry-7-ch3': 4,
|
||||||
|
'geometry-7-ch4': 8,
|
||||||
|
'geometry-7-ch5': 5,
|
||||||
|
};
|
||||||
|
var CH_IDX = {
|
||||||
|
'geometry-7-ch1': 1,
|
||||||
|
'geometry-7-ch2': 2,
|
||||||
|
'geometry-7-ch3': 3,
|
||||||
|
'geometry-7-ch4': 4,
|
||||||
|
'geometry-7-ch5': 5,
|
||||||
|
};
|
||||||
|
|
||||||
|
function setChProg(idx, readCount, total) {
|
||||||
|
var pct = total ? Math.round(readCount * 100 / total) : 0;
|
||||||
|
var labelEl = document.getElementById('prog-' + idx);
|
||||||
|
var fillEl = document.getElementById('fill-' + idx);
|
||||||
|
var btnEl = document.getElementById('btn-' + idx);
|
||||||
|
if (labelEl) labelEl.textContent = pct + '%';
|
||||||
|
if (fillEl) fillEl.style.width = pct + '%';
|
||||||
|
if (btnEl) {
|
||||||
|
if (readCount > 0 && readCount < total) btnEl.textContent = 'Продолжить';
|
||||||
|
else if (readCount >= total) btnEl.textContent = 'Открыть снова';
|
||||||
|
else btnEl.textContent = 'Открыть главу';
|
||||||
|
}
|
||||||
|
return pct;
|
||||||
|
}
|
||||||
|
|
||||||
|
function renderProgress(children) {
|
||||||
|
var totalRead = 0;
|
||||||
|
for (var i = 0; i < children.length; i++) {
|
||||||
|
var ch = children[i];
|
||||||
|
var idx = CH_IDX[ch.slug];
|
||||||
|
if (!idx) continue;
|
||||||
|
var read = ch.progress ? ch.progress.read.length : 0;
|
||||||
|
var total = ch.para_count || CH_PARA[ch.slug] || 1;
|
||||||
|
totalRead += read;
|
||||||
|
setChProg(idx, read, total);
|
||||||
|
}
|
||||||
|
|
||||||
|
var pct = Math.round(totalRead * 100 / TOTAL);
|
||||||
|
var overallEl = document.getElementById('overall-text');
|
||||||
|
var fillEl = document.getElementById('overall-fill');
|
||||||
|
if (overallEl) overallEl.textContent = totalRead + ' из ' + TOTAL + ' параграфов · ' + pct + '%';
|
||||||
|
if (fillEl) fillEl.style.width = pct + '%';
|
||||||
|
|
||||||
|
var xpBadge = document.getElementById('hero-xp-badge');
|
||||||
|
var xp = parseInt(localStorage.getItem('geometry7_xp') || '0', 10) || 0;
|
||||||
|
if (xpBadge && xp > 0) {
|
||||||
|
xpBadge.style.display = '';
|
||||||
|
xpBadge.textContent = xp + ' XP';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (totalRead >= TOTAL) {
|
||||||
|
var strip = document.getElementById('ach-strip');
|
||||||
|
var sub = document.getElementById('ach-sub');
|
||||||
|
if (strip) strip.classList.add('lit');
|
||||||
|
if (sub) sub.textContent = 'Выполнено! Вы прочитали весь курс геометрии 7 класса.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadProgress() {
|
||||||
|
if (typeof window.LS === 'undefined' || typeof window.LS.api !== 'function') {
|
||||||
|
renderProgress([]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
window.LS.api('/api/textbooks/geometry-7/children')
|
||||||
|
.then(function(data) {
|
||||||
|
if (data && data.children) renderProgress(data.children);
|
||||||
|
else renderProgress([]);
|
||||||
|
})
|
||||||
|
.catch(function() { renderProgress([]); });
|
||||||
|
}
|
||||||
|
|
||||||
|
if (document.readyState === 'loading') {
|
||||||
|
document.addEventListener('DOMContentLoaded', loadProgress);
|
||||||
|
} else {
|
||||||
|
loadProgress();
|
||||||
|
}
|
||||||
|
window.addEventListener('focus', loadProgress);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Reference in New Issue
Block a user