Files
Learn_System/frontend/textbooks/math_6_hub.html
T
Maxim Dolgolyov 0bb48d3f04 feat(math6): курсовой финал на хабе + звание «Математик 6 класса»
Капстоун-бой из 6 испытаний (по одному из каждой главы: десятичные,
проценты, множества, рациональные, координаты, геометрия) с HP-баром.
Победа 5/6 → +150 XP (LS.xp) + звание «Математик 6 класса» (зажигается
ачивка-strip, флаг localStorage math6_course_done). Тесты math6: 17/17.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 20:11:15 +03:00

383 lines
26 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!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>Математика 6 класс — учебник</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:#f5f6ff; --card:#fff;
--text:#16162e; --muted:#5b5b78;
--border:#e4e6f7;
--pri:#4f46e5; --pri-d:#3730a3;
--pri-soft:#e0e7ff;
--c1:#4f46e5; --c1-d:#3730a3; /* гл.1 — indigo */
--c2:#0891b2; --c2-d:#0e7490; /* гл.2 — cyan */
--c3:#7c3aed; --c3-d:#6d28d9; /* гл.3 — violet */
--c4:#e11d48; --c4-d:#be123c; /* гл.4 — rose */
--c5:#059669; --c5-d:#047857; /* гл.5 — emerald */
--c6:#d97706; --c6-d:#b45309; /* гл.6 — amber */
--sh:0 4px 16px rgba(79,70,229,.10);
--sh-h:0 12px 36px rgba(79,70,229,.18);
}
html.dark{
--bg:#0a0a16; --card:#13131f;
--text:#e8eaf6; --muted:#9aa0c0;
--border:#26263a;
--pri-soft:rgba(79,70,229,.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}
.hdr{position:relative;background:linear-gradient(110deg,#312e81 0%,#4f46e5 55%,#818cf8 100%);color:#fff;padding:32px 24px 28px;overflow:hidden;border-bottom:2px solid rgba(199,210,254,.18)}
.hdr::before{content:'6';position:absolute;right:24px;top:-30%;font-family:'Unbounded',sans-serif;font-size:clamp(7rem,20vw,15rem);font-weight:900;letter-spacing:-.04em;color:transparent;-webkit-text-stroke:1.5px rgba(224,231,255,.16);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,.16);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,.26)}
.hdr h1{font-family:'Outfit',sans-serif;font-size:1.85rem;font-weight:900;letter-spacing:-.01em}
.hdr-sub{font-size:.92rem;opacity:.9;margin-top:4px}
.hdr-side{margin-left:auto;display:flex;gap:8px}
.hdr-btn{padding:8px 12px;background:rgba(255,255,255,.16);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,.26)}
.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}
.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,#4f46e5,#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}
.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(79,70,229,.14);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(79,70,229,.22)}
.ch-grid{display:grid;grid-template-columns:1fr;gap:18px;margin-bottom:30px}
@media(min-width:620px){.ch-grid{grid-template-columns:1fr 1fr}}
@media(min-width:980px){.ch-grid{grid-template-columns:1fr 1fr 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;min-height:118px}
.ch-cover-wm{position:absolute;right:2px;top:-14px;font-size:4.2rem;font-weight:900;font-family:'Unbounded',sans-serif;line-height:1;color:rgba(255,255,255,.20);pointer-events:none;letter-spacing:-.03em}
.ch-num{display:inline-block;padding:4px 10px;background:rgba(255,255,255,.24);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:.92;margin-top:4px;position:relative;z-index:1;font-weight:500}
.ch-cover.cc1{background:linear-gradient(135deg,#312e81,#4f46e5 60%,#818cf8)}
.ch-cover.cc2{background:linear-gradient(135deg,#164e63,#0891b2 60%,#22d3ee)}
.ch-cover.cc3{background:linear-gradient(135deg,#4c1d95,#7c3aed 60%,#a78bfa)}
.ch-cover.cc4{background:linear-gradient(135deg,#881337,#e11d48 60%,#fb7185)}
.ch-cover.cc5{background:linear-gradient(135deg,#064e3b,#059669 60%,#34d399)}
.ch-cover.cc6{background:linear-gradient(135deg,#92400e,#d97706 60%,#fbbf24)}
.ch-body{padding:16px 20px 18px;display:flex;flex-direction:column;flex:1}
.ch-desc{font-size:.88rem;color:var(--text);opacity:.84;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.k1 .ch-prog-fill{background:linear-gradient(90deg,var(--c1),var(--c1-d))}
.ch-card.k2 .ch-prog-fill{background:linear-gradient(90deg,var(--c2),var(--c2-d))}
.ch-card.k3 .ch-prog-fill{background:linear-gradient(90deg,var(--c3),var(--c3-d))}
.ch-card.k4 .ch-prog-fill{background:linear-gradient(90deg,var(--c4),var(--c4-d))}
.ch-card.k5 .ch-prog-fill{background:linear-gradient(90deg,var(--c5),var(--c5-d))}
.ch-card.k6 .ch-prog-fill{background:linear-gradient(90deg,var(--c6),var(--c6-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.k1 .ch-action{background:linear-gradient(135deg,var(--c1),#818cf8)}
.ch-card.k2 .ch-action{background:linear-gradient(135deg,var(--c2),#22d3ee)}
.ch-card.k3 .ch-action{background:linear-gradient(135deg,var(--c3),#a78bfa)}
.ch-card.k4 .ch-action{background:linear-gradient(135deg,var(--c4),#fb7185)}
.ch-card.k5 .ch-action{background:linear-gradient(135deg,var(--c5),#34d399)}
.ch-card.k6 .ch-action{background:linear-gradient(135deg,var(--c6),#fbbf24)}
.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}
/* COURSE FINAL */
.cf-wrap{background:var(--card);border:1.5px solid var(--border);border-radius:18px;overflow:hidden;margin-bottom:28px;box-shadow:var(--sh)}
.cf-head{padding:18px 22px;background:linear-gradient(135deg,#312e81,#4f46e5 55%,#7c3aed);color:#fff;cursor:pointer;display:flex;align-items:center;gap:14px;user-select:none}
.cf-head:hover{filter:brightness(1.07)}
.cf-hi{width:46px;height:46px;border-radius:12px;background:rgba(255,255,255,.2);display:flex;align-items:center;justify-content:center;flex-shrink:0}
.cf-hi svg{width:26px;height:26px;stroke:#fff;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.cf-ht{flex:1;min-width:0}
.cf-tag{display:inline-block;padding:3px 9px;background:rgba(255,255,255,.24);border-radius:99px;font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;margin-bottom:4px}
.cf-title{font-family:'Outfit',sans-serif;font-size:1.18rem;font-weight:800;line-height:1.25}
.cf-sub{font-size:.84rem;opacity:.9;margin-top:2px}
.cf-chev{flex-shrink:0;transition:transform .25s}
.cf-chev svg{width:24px;height:24px;stroke:#fff;fill:none;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}
.cf-wrap.open .cf-chev{transform:rotate(180deg)}
.cf-body{display:none;padding:22px}
.cf-wrap.open .cf-body{display:block}
.cf-hp{height:14px;background:rgba(220,38,38,.12);border-radius:9px;overflow:hidden;border:1px solid #fecaca;margin:6px 0 12px}
.cf-hp-fill{height:100%;background:linear-gradient(90deg,#dc2626,#f59e0b);border-radius:9px;transition:width .5s}
.cf-meta{display:flex;gap:16px;font-size:.9rem;color:var(--muted);margin-bottom:10px;font-weight:600}
.cf-name{font-weight:800;color:#4338ca;text-align:center;margin-bottom:6px}
.cf-q{font-size:1.05rem;line-height:1.5;padding:12px 14px;background:var(--pri-soft);border-radius:9px;margin-bottom:10px;text-align:center}
.cf-row{display:flex;gap:10px;justify-content:center;align-items:center;flex-wrap:wrap}
.cf-inp{padding:9px 12px;border:1.5px solid var(--border);border-radius:8px;background:var(--card);color:var(--text);width:140px;text-align:center;font-family:'Outfit',monospace;font-size:1rem}
.cf-btn{padding:9px 18px;border-radius:9px;background:linear-gradient(135deg,#4f46e5,#7c3aed);color:#fff;font-weight:700;border:none;cursor:pointer}
.cf-fb{margin-top:10px;padding:10px 14px;border-radius:9px;font-weight:600;font-size:.9rem;display:none}
.cf-fb.ok{display:block;background:#d1fae5;color:#065f46}
.cf-fb.bad{display:block;background:#fee2e2;color:#7f1d1d}
.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>Математика — 6 класс</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"></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" data-gamified>0 XP</div>
</section>
<div class="ch-grid">
<a href="/textbook/math-6-ch1" class="ch-card k1" id="ch-1">
<div class="ch-cover cc1"><div class="ch-cover-wm">0,5</div>
<div class="ch-num">Глава 1</div>
<div class="ch-title">Десятичные дроби</div>
<div class="ch-range">§1–§12</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/math-6-ch2" class="ch-card k2" id="ch-2">
<div class="ch-cover cc2"><div class="ch-cover-wm">%</div>
<div class="ch-num">Глава 2</div>
<div class="ch-title">Проценты и пропорции</div>
<div class="ch-range">§1–§9</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/math-6-ch3" class="ch-card k3" id="ch-3">
<div class="ch-cover cc3"><div class="ch-cover-wm"></div>
<div class="ch-num">Глава 3</div>
<div class="ch-title">Множество</div>
<div class="ch-range">§1–§5</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/math-6-ch4" class="ch-card k4" id="ch-4">
<div class="ch-cover cc4"><div class="ch-cover-wm">5</div>
<div class="ch-num">Глава 4</div>
<div class="ch-title">Рациональные числа</div>
<div class="ch-range">§1–§11</div>
</div>
<div class="ch-body">
<div class="ch-desc">Отрицательные числа, координатная прямая, модуль, множества Z и Q, сравнение и все действия, законы сложения.</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/math-6-ch5" class="ch-card k5" id="ch-5">
<div class="ch-cover cc5"><div class="ch-cover-wm">xy</div>
<div class="ch-num">Глава 5</div>
<div class="ch-title">Координатная плоскость</div>
<div class="ch-range">§1–§5</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>
<a href="/textbook/math-6-ch6" class="ch-card k6" id="ch-6">
<div class="ch-cover cc6"><div class="ch-cover-wm"></div>
<div class="ch-num">Глава 6</div>
<div class="ch-title">Наглядная геометрия</div>
<div class="ch-range">§1–§5</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-6">0%</span></div><div class="ch-prog-bar"><div class="ch-prog-fill" id="fill-6" style="width:0%"></div></div></div>
<div class="ch-action"><span id="btn-6">Открыть главу</span><svg class="ic" viewBox="0 0 24 24"><polyline points="9 18 15 12 9 6"/></svg></div>
</div>
</a>
</div>
<div class="cf-wrap" id="cf-wrap">
<div class="cf-head" id="cf-head">
<div class="cf-hi"><svg viewBox="0 0 24 24"><polygon points="12 2 15 9 22 9 17 14 19 22 12 17 5 22 7 14 2 9 9 9"/></svg></div>
<div class="cf-ht">
<span class="cf-tag">Курсовой финал</span>
<div class="cf-title">6 испытаний — по одному из каждой главы</div>
<div class="cf-sub">Победи 5 из 6 и получи звание «Математик 6 класса» (+150 XP)</div>
</div>
<div class="cf-chev"><svg viewBox="0 0 24 24"><polyline points="6 9 12 15 18 9"/></svg></div>
</div>
<div class="cf-body">
<div class="cf-hp"><div class="cf-hp-fill" id="cf-hp" style="width:100%"></div></div>
<div class="cf-meta"><span>Испытание <b id="cf-i">1</b> / 6</span><span>Пройдено: <b id="cf-s">0</b> / 6</span></div>
<div class="cf-name" id="cf-name"></div>
<div class="cf-q" id="cf-q"></div>
<div class="cf-row"><input type="text" id="cf-a" class="cf-inp" placeholder="ответ"><button class="cf-btn" id="cf-go">Ответить</button></div>
<div class="cf-fb" id="cf-fb"></div>
</div>
</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">Математик 6 класса</div>
<div class="ach-sub" id="ach-sub">Пройдите все 38 параграфов шести глав, чтобы получить достижение</div>
</div>
</div>
</main>
<footer class="foot">Интерактивный учебник «Математика — 6 класс» · LearnSpace</footer>
<script>
'use strict';
(function(){
var saved = localStorage.getItem('math6_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('math6_theme', dark ? 'dark' : 'light'); localStorage.setItem('theme', dark ? 'dark' : 'light');
if (lab) lab.textContent = dark ? 'Светлая' : 'Тёмная';
});
})();
var TOTAL = 48;
var CH_IDX = { 'math-6-ch1':1,'math-6-ch2':2,'math-6-ch3':3,'math-6-ch4':4,'math-6-ch5':5,'math-6-ch6':6 };
var CH_PARA = { 'math-6-ch1':12,'math-6-ch2':9,'math-6-ch3':5,'math-6-ch4':11,'math-6-ch5':5,'math-6-ch6':6 };
function setChProg(idx, read, total){
var pct = total ? Math.round(read*100/total) : 0;
var l=document.getElementById('prog-'+idx),f=document.getElementById('fill-'+idx),b=document.getElementById('btn-'+idx);
if(l)l.textContent=pct+'%'; if(f)f.style.width=pct+'%';
if(b){ if(read>0&&read<total)b.textContent='Продолжить'; else if(read>=total)b.textContent='Открыть снова'; else b.textContent='Открыть главу'; }
}
function renderProgress(children){
var totalRead=0;
for(var i=0;i<children.length;i++){ var ch=children[i],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 o=document.getElementById('overall-text'),f=document.getElementById('overall-fill');
if(o)o.textContent=totalRead+' из '+TOTAL+' параграфов · '+pct+'%'; if(f)f.style.width=pct+'%';
var xpBadge=document.getElementById('hero-xp-badge'),xp=parseInt(localStorage.getItem('math6_xp')||'0',10)||0;
if(xpBadge&&xp>0){ xpBadge.style.display=''; xpBadge.textContent=xp+' XP'; }
if(totalRead>=TOTAL){ var s=document.getElementById('ach-strip'),sub=document.getElementById('ach-sub'); if(s)s.classList.add('lit'); if(sub)sub.textContent='Выполнено! Вы прошли весь курс математики 6 класса.'; }
}
function loadProgress(){
if(typeof window.LS==='undefined'||typeof window.LS.api!=='function'){ renderProgress([]); return; }
window.LS.api('/api/textbooks/math-6/children').then(function(data){ renderProgress(data&&data.children?data.children:[]); }).catch(function(){ renderProgress([]); });
}
if(document.readyState==='loading') document.addEventListener('DOMContentLoaded', loadProgress); else loadProgress();
window.addEventListener('focus', loadProgress);
/* ===================== КУРСОВОЙ ФИНАЛ ===================== */
(function(){
function _ri(a,b){ return a + Math.floor(Math.random()*(b-a+1)); }
function _pick(a){ return a[_ri(0,a.length-1)]; }
function comma(x){ return String(x).replace('.',','); }
var head=document.getElementById('cf-head'), wrap=document.getElementById('cf-wrap');
if(!head) return;
head.addEventListener('click', function(){ wrap.classList.toggle('open'); });
function litAch(text){ var s=document.getElementById('ach-strip'), sub=document.getElementById('ach-sub'); if(s)s.classList.add('lit'); if(sub)sub.textContent=text||'Звание «Математик 6 класса» получено!'; }
if(localStorage.getItem('math6_course_done')==='1') litAch();
var bosses=[
function(){ var p=_pick([[1.2,0.5,0.6],[2.5,0.4,1],[0.3,6,1.8],[0.2,0.4,0.08],[1.5,0.2,0.3]]); return {name:'Глава 1 · Десятичные дроби', q:'Вычисли '+comma(p[0])+' · '+comma(p[1])+'.', ans:p[2]}; },
function(){ var n=_pick([40,60,80,200]), m=_pick([10,20,25,5]); return {name:'Глава 2 · Проценты', q:'Найди '+m+'% от '+n+'.', ans:n*m/100}; },
function(){ var c=_ri(2,6), a=c+_ri(3,8), b=c+_ri(3,8); return {name:'Глава 3 · Множество', q:'|A|='+a+', |B|='+b+', |A∩B|='+c+'. Найди |AB|.', ans:a+b-c}; },
function(){ var a=_pick([-7,-4,-9,8,-12]), b=_pick([12,15,-3,-6,20]); return {name:'Глава 4 · Рациональные числа', q:'Вычисли '+a+' + ('+b+').', ans:a+b}; },
function(){ var k=_pick([2,3,4,5]), a=_pick([2,3,4]); return {name:'Глава 5 · Координаты', q:'Прямая y=kx проходит через ('+a+'; '+(k*a)+'). Найди k.', ans:k}; },
function(){ var r=_pick([2,3,4,5]); return {name:'Глава 6 · Геометрия', q:'Площадь круга S=πr² при r='+r+' (π=3,14).', ans:Math.round(3.14*r*r*100)/100}; }
];
var i=0, score=0, cur=null, done=false;
function show(){
if(i>=6){ done=true;
document.getElementById('cf-name').textContent='';
document.getElementById('cf-q').innerHTML=(score>=5?'<b>Победа!</b> Звание «Математик 6 класса» ваше!':'<b>Бой окончен.</b> Пройдено '+score+' / 6. Попробуйте ещё раз!');
document.getElementById('cf-hp').style.width=(score>=5?0:35)+'%';
document.querySelector('.cf-row').style.display='none';
if(score>=5){ if(localStorage.getItem('math6_course_done')!=='1'){ localStorage.setItem('math6_course_done','1'); if(window.LS&&window.LS.xp)window.LS.xp.add(150,'math6-course'); } litAch(); }
return; }
cur=bosses[i](); document.getElementById('cf-i').textContent=i+1; document.getElementById('cf-s').textContent=score;
document.getElementById('cf-name').textContent=cur.name;
document.getElementById('cf-hp').style.width=(100-i*100/6)+'%';
document.getElementById('cf-q').textContent=cur.q;
document.getElementById('cf-a').value=''; document.getElementById('cf-fb').style.display='none';
}
function go(){ if(done||i>=6)return; var fb=document.getElementById('cf-fb'), v=parseFloat(document.getElementById('cf-a').value.replace(',','.').trim());
if(isNaN(v)){ fb.className='cf-fb bad'; fb.textContent='Введите число.'; return; }
if(Math.abs(v-cur.ans)<0.011){ score++; fb.className='cf-fb ok'; fb.textContent='✓ Верно! Ответ '+comma(cur.ans)+'.'; }
else { fb.className='cf-fb bad'; fb.textContent='✗ Неверно. Правильно: '+comma(cur.ans)+'.'; }
document.getElementById('cf-s').textContent=score; i++; setTimeout(show,1300);
}
document.getElementById('cf-go').addEventListener('click', go);
document.getElementById('cf-a').addEventListener('keydown', function(e){ if(e.key==='Enter')go(); });
show();
})();
</script>
</body>
</html>