chore: эмодзи → HTML entity во всех учебниках 10-11 классов
This commit is contained in:
@@ -254,7 +254,7 @@ a{color:inherit;text-decoration:none}
|
||||
<section id="sec-p10" class="sec" data-watermark="±"><div class="sec-header"><span class="sec-num">§ 10</span><h2 class="sec-h">Синус, косинус, тангенс суммы и разности</h2></div><div id="p10-body"></div></section>
|
||||
<section id="sec-p11" class="sec" data-watermark="2α"><div class="sec-header"><span class="sec-num">§ 11</span><h2 class="sec-h">Формулы двойного аргумента</h2></div><div id="p11-body"></div></section>
|
||||
<section id="sec-p12" class="sec" data-watermark="·"><div class="sec-header"><span class="sec-num">§ 12</span><h2 class="sec-h">Преобразование суммы в произведение</h2></div><div id="p12-body"></div></section>
|
||||
<section id="sec-final1" class="sec" data-watermark="★"><div class="sec-header"><span class="sec-num" style="background:linear-gradient(135deg,#0d9488,#5eead4)">Финал главы</span><h2 class="sec-h">Итоги. 6 боссов главы 1</h2></div><div id="final1-body"></div></section>
|
||||
<section id="sec-final1" class="sec" data-watermark="★"><div class="sec-header"><span class="sec-num" style="background:linear-gradient(135deg,#0d9488,#5eead4)">Финал главы</span><h2 class="sec-h">Итоги. 6 боссов главы 1</h2></div><div id="final1-body"></div></section>
|
||||
</div>
|
||||
|
||||
<aside class="col-side" id="col-side"><div id="sidebar-content"></div></aside>
|
||||
@@ -383,7 +383,7 @@ const PARAS = [
|
||||
{ id:'p10',num:'§ 10', name:'Сумма и разность', sub:'sin(α±β)' },
|
||||
{ id:'p11',num:'§ 11', name:'Двойной аргумент', sub:'sin 2α' },
|
||||
{ id:'p12',num:'§ 12', name:'Сумма → произведение', sub:'sin α + sin β' },
|
||||
{ id:'final1', num:'★', name:'Финал главы', sub:'6 боссов', final:true },
|
||||
{ id:'final1', num:'★', name:'Финал главы', sub:'6 боссов', final:true },
|
||||
];
|
||||
|
||||
function buildParaSelector(){
|
||||
@@ -573,7 +573,7 @@ function buildSidebar(id){
|
||||
html+='<div class="sidecard" style="background:linear-gradient(135deg,var(--warn-bg,#fef3c7),var(--pri-soft));border-color:var(--warn,#f59e0b)"><h4 style="color:#92400e">Подсказка</h4><div class="sidecard-row" style="font-size:.84rem;line-height:1.55">'+tip.html+'</div></div>';
|
||||
if(STATE.achievements.size>0){
|
||||
html+='<div class="sidecard"><h4>Достижения</h4>';
|
||||
[...STATE.achievements.values()].slice(-4).forEach(text=>{ html+='<div class="sidecard-row" style="font-size:.78rem;color:var(--ok)">✓ '+text+'</div>'; });
|
||||
[...STATE.achievements.values()].slice(-4).forEach(text=>{ html+='<div class="sidecard-row" style="font-size:.78rem;color:var(--ok)">✓ '+text+'</div>'; });
|
||||
html+='</div>';
|
||||
}
|
||||
box.innerHTML=html;
|
||||
@@ -690,7 +690,7 @@ function makeBoss(paraId, bossDef){
|
||||
const q=document.getElementById(idP+'-q');
|
||||
const fb=document.getElementById(idP+'-fb');
|
||||
if(st.defeated){
|
||||
stageEl.textContent='✓ Побеждён'; fill.style.width='100%';
|
||||
stageEl.textContent='✓ Побеждён'; fill.style.width='100%';
|
||||
q.innerHTML='<b style="color:'+bossDef.color+'">Босс повержен!</b>';
|
||||
document.getElementById(idP+'-go').disabled=true;
|
||||
document.getElementById(idP+'-go').style.opacity=.5;
|
||||
@@ -1141,9 +1141,9 @@ function buildP2(){
|
||||
/* IV3: возможно ли */
|
||||
(function(){
|
||||
const Q=[
|
||||
{ e:'$\\sin\\alpha = 5/13$ и $\\cos\\alpha = 12/13$ одновременно', ok:true, why:'$(5/13)^2 + (12/13)^2 = 169/169 = 1$ ✓' },
|
||||
{ e:'$\\sin\\alpha = 5/13$ и $\\cos\\alpha = 12/13$ одновременно', ok:true, why:'$(5/13)^2 + (12/13)^2 = 169/169 = 1$ ✓' },
|
||||
{ e:'$\\sin\\alpha = -0{,}3$ и $\\cos\\alpha = 0{,}4$ одновременно', ok:false, why:'$0{,}09 + 0{,}16 = 0{,}25 \\ne 1$.' },
|
||||
{ e:'$\\sin\\alpha = 0{,}8$ и $\\cos\\alpha = 0{,}6$ одновременно', ok:true, why:'$0{,}64 + 0{,}36 = 1$ ✓' },
|
||||
{ e:'$\\sin\\alpha = 0{,}8$ и $\\cos\\alpha = 0{,}6$ одновременно', ok:true, why:'$0{,}64 + 0{,}36 = 1$ ✓' },
|
||||
{ e:'$\\sin\\alpha = \\sqrt{3}$', ok:false, why:'$\\sqrt{3} \\approx 1{,}73 > 1$.' },
|
||||
{ e:'$\\cos\\alpha = -1$', ok:true, why:'$\\cos\\pi = -1$.' },
|
||||
{ e:'$\\sin\\alpha = 2$', ok:false, why:'$|\\sin\\alpha| \\le 1$.' },
|
||||
@@ -1421,7 +1421,7 @@ function buildP4(){
|
||||
title:'Босс §4 — Тождества',
|
||||
steps:[
|
||||
{ q:'Чему равно $\\sin^2 30° + \\cos^2 30°$?', verify:(v)=>+v===1, hint:'Основное тождество, всегда равно 1.' },
|
||||
{ q:'$\\sin\\alpha = 5/13$ и $\\cos\\alpha = 12/13$. Возможно? «да»/«нет»', verify:(v)=>String(v).trim().toLowerCase().startsWith('д'), hint:'$25/169 + 144/169 = 1$ ✓.' },
|
||||
{ q:'$\\sin\\alpha = 5/13$ и $\\cos\\alpha = 12/13$. Возможно? «да»/«нет»', verify:(v)=>String(v).trim().toLowerCase().startsWith('д'), hint:'$25/169 + 144/169 = 1$ ✓.' },
|
||||
{ q:'$\\sin\\alpha = -3/5$, $\\alpha \\in (\\pi; 3\\pi/2)$. Найди $\\cos\\alpha$ как дробь (введи -4/5).', verify:(v)=>{const s=String(v).replace(/\\s/g,''); return s==='-4/5'||+v===-0.8;}, hint:'$\\cos^2 = 16/25$, в III четверти $\\cos < 0$.' },
|
||||
{ q:'Если $\\tg\\alpha = 0{,}75$, то $\\ctg\\alpha = ?$ (введи в виде десятичной дроби).', verify:(v)=>Math.abs(+v - 4/3) < 0.01, hint:'$\\ctg = 1/\\tg = 1/0{,}75 = 4/3 \\approx 1{,}33$.' },
|
||||
{ q:'Упрости: $(1 + \\tg^2\\alpha) \\cdot \\cos^2\\alpha$. Чему равно?', verify:(v)=>+v===1, hint:'$1 + \\tg^2 = 1/\\cos^2$, значит произведение $= 1$.' },
|
||||
@@ -2272,7 +2272,7 @@ function buildP8(){
|
||||
{ q:'Сколько корней у $\\sin x = 0{,}5$ на промежутке $[0;\\,2\\pi]$?', verify:(v)=>+v===2, hint:'$x_1 = \\pi/6$ и $x_2 = 5\\pi/6$ — обе в промежутке.' },
|
||||
{ q:'Реши $\\cos x = -1$. Введи корень в $[0;\\,2\\pi]$ как pi (если ответ $\\pi$).', verify:(v)=>{const s=String(v).replace(/\\s/g,'').toLowerCase(); return s==='pi'||s==='π';}, hint:'$\\cos\\pi = -1$.' },
|
||||
{ q:'Реши $2\\cos^2 x + 3\\cos x + 1 = 0$. Сколько корней в $[0;\\,2\\pi)$?', verify:(v)=>+v===3, hint:'$t = \\cos x$: $2t^2+3t+1=0$, $t = -1$ или $t = -1/2$. cos=−1: x=π. cos=−1/2: x=2π/3, 4π/3. Итого 3.' },
|
||||
{ q:'Решает ли значение $x = \\dfrac{\\pi}{2}$ уравнение $\\sin x \\cos x = 0$? «да» или «нет»', verify:(v)=>String(v).trim().toLowerCase().startsWith('д'), hint:'$\\cos(\\pi/2) = 0$, произведение = 0 ✓.' },
|
||||
{ q:'Решает ли значение $x = \\dfrac{\\pi}{2}$ уравнение $\\sin x \\cos x = 0$? «да» или «нет»', verify:(v)=>String(v).trim().toLowerCase().startsWith('д'), hint:'$\\cos(\\pi/2) = 0$, произведение = 0 ✓.' },
|
||||
{ q:'Реши $\\tg x = 1$. Введи наименьший положительный корень как pi/n.', verify:(v)=>{const s=String(v).replace(/\\s/g,'').toLowerCase(); return s==='pi/4'||s==='π/4';}, hint:'$\\arctg 1 = \\pi/4$, серия $x = \\pi/4 + \\pi n$.' },
|
||||
]
|
||||
});
|
||||
@@ -2969,15 +2969,15 @@ function buildFinal1(){
|
||||
|
||||
/* === Hero card === */
|
||||
html += '<div style="background:linear-gradient(135deg,#0d9488,#7c3aed);color:#fff;border-radius:18px;padding:24px 22px;margin-bottom:24px;box-shadow:0 8px 28px rgba(13,148,136,.25);position:relative;overflow:hidden">'
|
||||
+'<div style="position:absolute;right:-20px;top:-30px;font-size:8rem;font-weight:900;color:rgba(255,255,255,.1);font-family:Unbounded,sans-serif;line-height:1;pointer-events:none">★</div>'
|
||||
+'<div style="position:absolute;right:-20px;top:-30px;font-size:8rem;font-weight:900;color:rgba(255,255,255,.1);font-family:Unbounded,sans-serif;line-height:1;pointer-events:none">★</div>'
|
||||
+'<div style="position:relative;z-index:1">'
|
||||
+'<div style="font-size:.78rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;opacity:.85;margin-bottom:6px">ФИНАЛ ГЛАВЫ 1</div>'
|
||||
+'<h2 style="font-family:Unbounded,sans-serif;font-size:1.55rem;font-weight:800;margin-bottom:8px">6 интегрированных боссов</h2>'
|
||||
+'<p style="font-size:.95rem;opacity:.92;margin-bottom:14px;max-width:580px">Каждый босс проверяет синтез нескольких параграфов главы. Победи всех — получи ачивку <b>«Магистр тригонометрии»</b> и +150 XP.</p>'
|
||||
+'<div style="display:flex;gap:12px;flex-wrap:wrap;align-items:center">'
|
||||
+'<div style="padding:8px 14px;background:rgba(255,255,255,.18);border-radius:99px;font-size:.82rem;font-weight:700">★ 6 боссов</div>'
|
||||
+'<div style="padding:8px 14px;background:rgba(255,255,255,.18);border-radius:99px;font-size:.82rem;font-weight:700">★ 6 боссов</div>'
|
||||
+'<div style="padding:8px 14px;background:rgba(255,255,255,.18);border-radius:99px;font-size:.82rem;font-weight:700">+ до 300 XP</div>'
|
||||
+'<div style="padding:8px 14px;background:rgba(255,255,255,.18);border-radius:99px;font-size:.82rem;font-weight:700">★ Финальная ачивка</div>'
|
||||
+'<div style="padding:8px 14px;background:rgba(255,255,255,.18);border-radius:99px;font-size:.82rem;font-weight:700">★ Финальная ачивка</div>'
|
||||
+'</div></div></div>';
|
||||
|
||||
/* === Overall progress === */
|
||||
@@ -2995,7 +2995,7 @@ function buildFinal1(){
|
||||
|
||||
/* === Celebration === */
|
||||
html += '<div id="final1-cel" style="display:none;margin:24px 0;padding:24px 22px;background:linear-gradient(135deg,#fef3c7,#fde68a);border:2px solid #f59e0b;border-radius:18px;text-align:center;box-shadow:0 6px 22px rgba(245,158,11,.25)">'
|
||||
+'<div style="font-size:3rem;margin-bottom:6px">★</div>'
|
||||
+'<div style="font-size:3rem;margin-bottom:6px">★</div>'
|
||||
+'<div style="font-family:Unbounded,sans-serif;font-size:1.4rem;font-weight:900;color:#92400e;margin-bottom:6px">МАГИСТР ТРИГОНОМЕТРИИ!</div>'
|
||||
+'<div style="font-size:.95rem;color:#78350f;margin-bottom:14px">Ты победил всех 6 боссов главы 1 и освоил тригонометрию.<br>Получено: <b>+150 XP</b> и финальная ачивка.</div>'
|
||||
+'<a href="/textbook/algebra-10" style="display:inline-flex;align-items:center;gap:8px;padding:11px 22px;background:linear-gradient(135deg,#0d9488,#7c3aed);color:#fff;border-radius:11px;font-weight:700;text-decoration:none">Вернуться к Алгебре 10 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" style="width:16px;height:16px"><polyline points="9 18 15 12 9 6"/></svg></a>'
|
||||
@@ -3064,7 +3064,7 @@ function buildFinal1(){
|
||||
const q=document.getElementById('bb-'+b.n+'-q');
|
||||
const fb=document.getElementById('bb-'+b.n+'-fb');
|
||||
if(st.defeated){
|
||||
stageEl.textContent='✓ Побеждён';
|
||||
stageEl.textContent='✓ Побеждён';
|
||||
fill.style.width='100%';
|
||||
q.innerHTML='<b style="color:'+b.color+'">Босс повержен!</b>';
|
||||
document.getElementById('bb-'+b.n+'-go').disabled=true;
|
||||
|
||||
@@ -218,7 +218,7 @@ a{color:inherit;text-decoration:none}
|
||||
<section id="sec-p15" class="sec" data-watermark="↔"><div class="sec-header"><span class="sec-num">§ 15</span><h2 class="sec-h">Применение свойств для преобразований</h2></div><div id="p15-body"></div></section>
|
||||
<section id="sec-p16" class="sec" data-watermark="∿"><div class="sec-header"><span class="sec-num">§ 16</span><h2 class="sec-h">Функция y = ⁿ√x. Свойства и график</h2></div><div id="p16-body"></div></section>
|
||||
<section id="sec-p17" class="sec" data-watermark="="><div class="sec-header"><span class="sec-num">§ 17</span><h2 class="sec-h">Иррациональные уравнения</h2></div><div id="p17-body"></div></section>
|
||||
<section id="sec-final2" class="sec" data-watermark="★"><div class="sec-header"><span class="sec-num" style="background:linear-gradient(135deg,#7c3aed,#c4b5fd)">Финал главы</span><h2 class="sec-h">Итоги. 4 босса главы 2</h2></div><div id="final2-body"></div></section>
|
||||
<section id="sec-final2" class="sec" data-watermark="★"><div class="sec-header"><span class="sec-num" style="background:linear-gradient(135deg,#7c3aed,#c4b5fd)">Финал главы</span><h2 class="sec-h">Итоги. 4 босса главы 2</h2></div><div id="final2-body"></div></section>
|
||||
</div>
|
||||
|
||||
<aside class="col-side" id="col-side"><div id="sidebar-content"></div></aside>
|
||||
@@ -326,7 +326,7 @@ const PARAS = [
|
||||
{ id:'p15', num:'§ 15', name:'Преобразования', sub:'вынесение, рационализация' },
|
||||
{ id:'p16', num:'§ 16', name:'y = ⁿ√x', sub:'свойства и графики' },
|
||||
{ id:'p17', num:'§ 17', name:'Иррац. уравнения', sub:'возведение в степень' },
|
||||
{ id:'final2', num:'★', name:'Финал главы', sub:'4 босса', final:true },
|
||||
{ id:'final2', num:'★', name:'Финал главы', sub:'4 босса', final:true },
|
||||
];
|
||||
|
||||
function buildParaSelector(){
|
||||
@@ -431,7 +431,7 @@ function buildSidebar(id){
|
||||
html+='<div class="sidecard" style="background:linear-gradient(135deg,var(--warn-bg,#fef3c7),var(--pri-soft));border-color:var(--warn,#f59e0b)"><h4 style="color:#92400e">Подсказка</h4><div class="sidecard-row" style="font-size:.84rem;line-height:1.55">'+tip.html+'</div></div>';
|
||||
if(STATE.achievements.size>0){
|
||||
html+='<div class="sidecard"><h4>Достижения</h4>';
|
||||
[...STATE.achievements.values()].slice(-4).forEach(text=>{ html+='<div class="sidecard-row" style="font-size:.78rem;color:var(--ok)">✓ '+text+'</div>'; });
|
||||
[...STATE.achievements.values()].slice(-4).forEach(text=>{ html+='<div class="sidecard-row" style="font-size:.78rem;color:var(--ok)">✓ '+text+'</div>'; });
|
||||
html+='</div>';
|
||||
}
|
||||
box.innerHTML=html;
|
||||
@@ -547,7 +547,7 @@ function makeBoss(paraId, bossDef){
|
||||
const q=document.getElementById(idP+'-q');
|
||||
const fb=document.getElementById(idP+'-fb');
|
||||
if(st.defeated){
|
||||
stageEl.textContent='✓ Побеждён'; fill.style.width='100%';
|
||||
stageEl.textContent='✓ Побеждён'; fill.style.width='100%';
|
||||
q.innerHTML='<b style="color:'+bossDef.color+'">Босс повержен!</b>';
|
||||
document.getElementById(idP+'-go').disabled=true;
|
||||
document.getElementById(idP+'-go').style.opacity=.5;
|
||||
@@ -1223,7 +1223,7 @@ function buildP17(){
|
||||
<ol style="padding-left:22px;line-height:1.9">
|
||||
<li>Возводим в квадрат: $x + 3 = 25$.</li>
|
||||
<li>$x = 22$.</li>
|
||||
<li>Проверка: $\\sqrt{22 + 3} = \\sqrt{25} = 5$ ✓.</li>
|
||||
<li>Проверка: $\\sqrt{22 + 3} = \\sqrt{25} = 5$ ✓.</li>
|
||||
</ol>
|
||||
<p><b>Уравнение с подвохом.</b> $\\sqrt{x - 1} = x - 7$.</p>
|
||||
<p>Возводим в квадрат: $x - 1 = (x - 7)^2 = x^2 - 14x + 49$.</p>
|
||||
@@ -1231,7 +1231,7 @@ function buildP17(){
|
||||
<p><b>Проверка:</b></p>
|
||||
<ul style="padding-left:22px;line-height:1.85">
|
||||
<li>$x = 5$: $\\sqrt{4} = 5 - 7 = -2$. Но $\\sqrt{4} = 2 \\ne -2$. <b>Посторонний!</b></li>
|
||||
<li>$x = 10$: $\\sqrt{9} = 10 - 7 = 3$. ✓</li>
|
||||
<li>$x = 10$: $\\sqrt{9} = 10 - 7 = 3$. ✓</li>
|
||||
</ul>
|
||||
<p>Ответ: $x = 10$.</p>`);
|
||||
|
||||
@@ -1369,15 +1369,15 @@ function buildFinal2(){
|
||||
|
||||
/* === Hero card === */
|
||||
html += '<div style="background:linear-gradient(135deg,#7c3aed,#c4b5fd);color:#fff;border-radius:18px;padding:24px 22px;margin-bottom:24px;box-shadow:0 8px 28px rgba(124,58,237,.25);position:relative;overflow:hidden">'
|
||||
+'<div style="position:absolute;right:-20px;top:-30px;font-size:8rem;font-weight:900;color:rgba(255,255,255,.1);font-family:Unbounded,sans-serif;line-height:1;pointer-events:none">★</div>'
|
||||
+'<div style="position:absolute;right:-20px;top:-30px;font-size:8rem;font-weight:900;color:rgba(255,255,255,.1);font-family:Unbounded,sans-serif;line-height:1;pointer-events:none">★</div>'
|
||||
+'<div style="position:relative;z-index:1">'
|
||||
+'<div style="font-size:.78rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;opacity:.85;margin-bottom:6px">ФИНАЛ ГЛАВЫ 2</div>'
|
||||
+'<h2 style="font-family:Unbounded,sans-serif;font-size:1.55rem;font-weight:800;margin-bottom:8px">4 интегрированных босса</h2>'
|
||||
+'<p style="font-size:.95rem;opacity:.92;margin-bottom:14px;max-width:580px">Каждый босс проверяет синтез знаний главы. Победи всех — получи ачивку <b>«Магистр корней»</b> и +100 XP.</p>'
|
||||
+'<div style="display:flex;gap:12px;flex-wrap:wrap;align-items:center">'
|
||||
+'<div style="padding:8px 14px;background:rgba(255,255,255,.18);border-radius:99px;font-size:.82rem;font-weight:700">★ 4 босса</div>'
|
||||
+'<div style="padding:8px 14px;background:rgba(255,255,255,.18);border-radius:99px;font-size:.82rem;font-weight:700">★ 4 босса</div>'
|
||||
+'<div style="padding:8px 14px;background:rgba(255,255,255,.18);border-radius:99px;font-size:.82rem;font-weight:700">+ до 200 XP</div>'
|
||||
+'<div style="padding:8px 14px;background:rgba(255,255,255,.18);border-radius:99px;font-size:.82rem;font-weight:700">★ Финальная ачивка</div>'
|
||||
+'<div style="padding:8px 14px;background:rgba(255,255,255,.18);border-radius:99px;font-size:.82rem;font-weight:700">★ Финальная ачивка</div>'
|
||||
+'</div></div></div>';
|
||||
|
||||
/* === Overall progress === */
|
||||
@@ -1394,7 +1394,7 @@ function buildFinal2(){
|
||||
|
||||
/* === Celebration === */
|
||||
html += '<div id="final2-cel" style="display:none;margin:24px 0;padding:24px 22px;background:linear-gradient(135deg,#fef3c7,#fde68a);border:2px solid #f59e0b;border-radius:18px;text-align:center;box-shadow:0 6px 22px rgba(245,158,11,.25)">'
|
||||
+'<div style="font-size:3rem;margin-bottom:6px">★</div>'
|
||||
+'<div style="font-size:3rem;margin-bottom:6px">★</div>'
|
||||
+'<div style="font-family:Unbounded,sans-serif;font-size:1.4rem;font-weight:900;color:#92400e;margin-bottom:6px">МАГИСТР КОРНЕЙ!</div>'
|
||||
+'<div style="font-size:.95rem;color:#78350f;margin-bottom:14px">Ты победил всех 4 боссов главы 2 и освоил корни n-й степени.<br>Получено: <b>+100 XP</b> и финальная ачивка.</div>'
|
||||
+'<a href="/textbook/algebra-10" style="display:inline-flex;align-items:center;gap:8px;padding:11px 22px;background:linear-gradient(135deg,#7c3aed,#a855f7);color:#fff;border-radius:11px;font-weight:700;text-decoration:none">Вернуться к Алгебре 10 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" style="width:16px;height:16px"><polyline points="9 18 15 12 9 6"/></svg></a>'
|
||||
@@ -1455,7 +1455,7 @@ function buildFinal2(){
|
||||
const q=document.getElementById('bb-'+b.n+'-q');
|
||||
const fb=document.getElementById('bb-'+b.n+'-fb');
|
||||
if(st.defeated){
|
||||
stageEl.textContent='✓ Побеждён';
|
||||
stageEl.textContent='✓ Побеждён';
|
||||
fill.style.width='100%';
|
||||
q.innerHTML='<b style="color:'+b.color+'">Босс повержен!</b>';
|
||||
document.getElementById('bb-'+b.n+'-go').disabled=true;
|
||||
|
||||
@@ -221,8 +221,8 @@ a{color:inherit;text-decoration:none}
|
||||
<section id="sec-p19" class="sec" data-watermark="(uv)'"><div class="sec-header"><span class="sec-num">§ 19</span><h2 class="sec-h">Правила вычисления производных</h2></div><div id="p19-body"></div></section>
|
||||
<section id="sec-p20" class="sec" data-watermark="↗"><div class="sec-header"><span class="sec-num">§ 20</span><h2 class="sec-h">Геометрический смысл. Монотонность</h2></div><div id="p20-body"></div></section>
|
||||
<section id="sec-p21" class="sec" data-watermark="∪∩"><div class="sec-header"><span class="sec-num">§ 21</span><h2 class="sec-h">Применение к исследованию функций</h2></div><div id="p21-body"></div></section>
|
||||
<section id="sec-p22" class="sec" data-watermark="★"><div class="sec-header"><span class="sec-num">§ 22</span><h2 class="sec-h">Наибольшее и наименьшее значения</h2></div><div id="p22-body"></div></section>
|
||||
<section id="sec-final3" class="sec" data-watermark="★"><div class="sec-header"><span class="sec-num" style="background:linear-gradient(135deg,#059669,#86efac)">Финал главы</span><h2 class="sec-h">Итоги. 5 боссов главы 3</h2></div><div id="final3-body"></div></section>
|
||||
<section id="sec-p22" class="sec" data-watermark="★"><div class="sec-header"><span class="sec-num">§ 22</span><h2 class="sec-h">Наибольшее и наименьшее значения</h2></div><div id="p22-body"></div></section>
|
||||
<section id="sec-final3" class="sec" data-watermark="★"><div class="sec-header"><span class="sec-num" style="background:linear-gradient(135deg,#059669,#86efac)">Финал главы</span><h2 class="sec-h">Итоги. 5 боссов главы 3</h2></div><div id="final3-body"></div></section>
|
||||
</div>
|
||||
|
||||
<aside class="col-side" id="col-side"><div id="sidebar-content"></div></aside>
|
||||
@@ -252,7 +252,7 @@ const ACH_LABELS = {
|
||||
p22_done:'Наиб./наим. значения — освоены!',
|
||||
ch3_done:'Глава 3 — Производная пройдена!',
|
||||
deriv_master:'Магистр производных! +150 XP',
|
||||
alg10_master:'★ Алгебра 10 пройдена полностью!',
|
||||
alg10_master:'★ Алгебра 10 пройдена полностью!',
|
||||
};
|
||||
|
||||
function loadProgress(){
|
||||
@@ -331,7 +331,7 @@ const PARAS = [
|
||||
{ id:'p20', num:'§ 20', name:'Касательная, монотонность', sub:'геом. смысл' },
|
||||
{ id:'p21', num:'§ 21', name:'Исследование функций', sub:'экстремумы' },
|
||||
{ id:'p22', num:'§ 22', name:'Наиб. и наим. значения', sub:'на отрезке' },
|
||||
{ id:'final3', num:'★', name:'Финал главы', sub:'5 боссов', final:true },
|
||||
{ id:'final3', num:'★', name:'Финал главы', sub:'5 боссов', final:true },
|
||||
];
|
||||
|
||||
function buildParaSelector(){
|
||||
@@ -437,7 +437,7 @@ function buildSidebar(id){
|
||||
html+='<div class="sidecard" style="background:linear-gradient(135deg,var(--warn-bg,#fef3c7),var(--pri-soft));border-color:var(--warn,#f59e0b)"><h4 style="color:#92400e">Подсказка</h4><div class="sidecard-row" style="font-size:.84rem;line-height:1.55">'+tip.html+'</div></div>';
|
||||
if(STATE.achievements.size>0){
|
||||
html+='<div class="sidecard"><h4>Достижения</h4>';
|
||||
[...STATE.achievements.values()].slice(-4).forEach(text=>{ html+='<div class="sidecard-row" style="font-size:.78rem;color:var(--ok)">✓ '+text+'</div>'; });
|
||||
[...STATE.achievements.values()].slice(-4).forEach(text=>{ html+='<div class="sidecard-row" style="font-size:.78rem;color:var(--ok)">✓ '+text+'</div>'; });
|
||||
html+='</div>';
|
||||
}
|
||||
box.innerHTML=html;
|
||||
@@ -553,7 +553,7 @@ function makeBoss(paraId, bossDef){
|
||||
const q=document.getElementById(idP+'-q');
|
||||
const fb=document.getElementById(idP+'-fb');
|
||||
if(st.defeated){
|
||||
stageEl.textContent='✓ Побеждён'; fill.style.width='100%';
|
||||
stageEl.textContent='✓ Побеждён'; fill.style.width='100%';
|
||||
q.innerHTML='<b style="color:'+bossDef.color+'">Босс повержен!</b>';
|
||||
document.getElementById(idP+'-go').disabled=true;
|
||||
document.getElementById(idP+'-go').style.opacity=.5;
|
||||
@@ -1379,15 +1379,15 @@ function buildFinal3(){
|
||||
let html = '';
|
||||
|
||||
html += '<div style="background:linear-gradient(135deg,#059669,#86efac);color:#fff;border-radius:18px;padding:24px 22px;margin-bottom:24px;box-shadow:0 8px 28px rgba(5,150,105,.25);position:relative;overflow:hidden">'
|
||||
+'<div style="position:absolute;right:-20px;top:-30px;font-size:8rem;font-weight:900;color:rgba(255,255,255,.1);font-family:Unbounded,sans-serif;line-height:1;pointer-events:none">★</div>'
|
||||
+'<div style="position:absolute;right:-20px;top:-30px;font-size:8rem;font-weight:900;color:rgba(255,255,255,.1);font-family:Unbounded,sans-serif;line-height:1;pointer-events:none">★</div>'
|
||||
+'<div style="position:relative;z-index:1">'
|
||||
+'<div style="font-size:.78rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;opacity:.85;margin-bottom:6px">ФИНАЛ ГЛАВЫ 3</div>'
|
||||
+'<h2 style="font-family:Unbounded,sans-serif;font-size:1.55rem;font-weight:800;margin-bottom:8px">5 интегрированных боссов</h2>'
|
||||
+'<p style="font-size:.95rem;opacity:.92;margin-bottom:14px;max-width:580px">Каждый босс проверяет синтез знаний главы. Победи всех — получи ачивку <b>«Магистр производных»</b> и +150 XP. <br>А если уже завершил Главы 1 и 2 — получишь финальную ачивку <b>«Алгебра 10 пройдена!»</b>.</p>'
|
||||
+'<div style="display:flex;gap:12px;flex-wrap:wrap;align-items:center">'
|
||||
+'<div style="padding:8px 14px;background:rgba(255,255,255,.18);border-radius:99px;font-size:.82rem;font-weight:700">★ 5 боссов</div>'
|
||||
+'<div style="padding:8px 14px;background:rgba(255,255,255,.18);border-radius:99px;font-size:.82rem;font-weight:700">★ 5 боссов</div>'
|
||||
+'<div style="padding:8px 14px;background:rgba(255,255,255,.18);border-radius:99px;font-size:.82rem;font-weight:700">+ до 250 XP</div>'
|
||||
+'<div style="padding:8px 14px;background:rgba(255,255,255,.18);border-radius:99px;font-size:.82rem;font-weight:700">★ Курсовая ачивка</div>'
|
||||
+'<div style="padding:8px 14px;background:rgba(255,255,255,.18);border-radius:99px;font-size:.82rem;font-weight:700">★ Курсовая ачивка</div>'
|
||||
+'</div></div></div>';
|
||||
|
||||
html += '<div style="background:var(--card);border:1.5px solid var(--border);border-radius:14px;padding:16px 20px;margin-bottom:20px">'
|
||||
@@ -1402,10 +1402,10 @@ function buildFinal3(){
|
||||
html += '<div id="final3-bosses"></div>';
|
||||
|
||||
html += '<div id="final3-cel" style="display:none;margin:24px 0;padding:28px 22px;background:linear-gradient(135deg,#fef3c7,#fde68a);border:2px solid #f59e0b;border-radius:18px;text-align:center;box-shadow:0 6px 22px rgba(245,158,11,.25)">'
|
||||
+'<div style="font-size:3.5rem;margin-bottom:6px">★</div>'
|
||||
+'<div style="font-size:3.5rem;margin-bottom:6px">★</div>'
|
||||
+'<div style="font-family:Unbounded,sans-serif;font-size:1.5rem;font-weight:900;color:#92400e;margin-bottom:6px">МАГИСТР ПРОИЗВОДНЫХ!</div>'
|
||||
+'<div style="font-size:.95rem;color:#78350f;margin-bottom:8px">Ты победил всех 5 боссов главы 3.<br>Получено: <b>+150 XP</b> и ачивка <b>«Магистр производных»</b>.</div>'
|
||||
+'<div id="final3-mega" style="display:none;margin:14px 0;padding:14px;background:linear-gradient(135deg,#059669,#7c3aed,#0d9488);color:#fff;border-radius:12px;font-family:Unbounded,sans-serif;font-weight:800;font-size:1.1rem">✦ АЛГЕБРА 10 ПРОЙДЕНА ПОЛНОСТЬЮ! ✦</div>'
|
||||
+'<div id="final3-mega" style="display:none;margin:14px 0;padding:14px;background:linear-gradient(135deg,#059669,#7c3aed,#0d9488);color:#fff;border-radius:12px;font-family:Unbounded,sans-serif;font-weight:800;font-size:1.1rem">✦ АЛГЕБРА 10 ПРОЙДЕНА ПОЛНОСТЬЮ! ✦</div>'
|
||||
+'<a href="/textbook/algebra-10" style="display:inline-flex;align-items:center;gap:8px;padding:11px 22px;background:linear-gradient(135deg,#059669,#10b981);color:#fff;border-radius:11px;font-weight:700;text-decoration:none;margin-top:8px">Вернуться к Алгебре 10 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" style="width:16px;height:16px"><polyline points="9 18 15 12 9 6"/></svg></a>'
|
||||
+'</div>';
|
||||
|
||||
@@ -1476,7 +1476,7 @@ function buildFinal3(){
|
||||
const q=document.getElementById('bb-'+b.n+'-q');
|
||||
const fb=document.getElementById('bb-'+b.n+'-fb');
|
||||
if(st.defeated){
|
||||
stageEl.textContent='✓ Побеждён';
|
||||
stageEl.textContent='✓ Побеждён';
|
||||
fill.style.width='100%';
|
||||
q.innerHTML='<b style="color:'+b.color+'">Босс повержен!</b>';
|
||||
document.getElementById('bb-'+b.n+'-go').disabled=true;
|
||||
|
||||
@@ -265,7 +265,7 @@ input[type=range]:active{box-shadow:0 0 0 4px var(--pri-soft);border-radius:8px}
|
||||
<section id="sec-p1" class="sec" data-watermark="a^{m/n}"><div class="sec-header"><span class="sec-num">§ 1</span><h2 class="sec-h">Степень с рациональным показателем</h2></div><div id="p1-body"></div></section>
|
||||
<section id="sec-p2" class="sec" data-watermark="x^α"><div class="sec-header"><span class="sec-num">§ 2</span><h2 class="sec-h">Степенная функция</h2></div><div id="p2-body"></div></section>
|
||||
<section id="sec-p3" class="sec" data-watermark="log"><div class="sec-header"><span class="sec-num">§ 3</span><h2 class="sec-h">Определение логарифма</h2></div><div id="p3-body"></div></section>
|
||||
<section id="sec-final1" class="sec" data-watermark="★"><div class="sec-header"><span class="sec-num" style="background:linear-gradient(135deg,#d97706,#f59e0b)">★</span><h2 class="sec-h">Финал главы</h2></div><div id="final1-body"></div></section>
|
||||
<section id="sec-final1" class="sec" data-watermark="★"><div class="sec-header"><span class="sec-num" style="background:linear-gradient(135deg,#d97706,#f59e0b)">★</span><h2 class="sec-h">Финал главы</h2></div><div id="final1-body"></div></section>
|
||||
|
||||
</div>
|
||||
<aside class="col-side" id="col-side"><div id="sidebar-content"></div></aside>
|
||||
@@ -294,7 +294,7 @@ const PARAS = [
|
||||
{ id:'p1', num:'§ 1', name:'Степень с рациональным показателем', sub:'$a^{m/n} = \\sqrt[n]{a^m}$' },
|
||||
{ id:'p2', num:'§ 2', name:'Степенная функция', sub:'$y = x^\\alpha$' },
|
||||
{ id:'p3', num:'§ 3', name:'Определение логарифма', sub:'$\\log_a b = c$' },
|
||||
{ id:'final1', num:'★', name:'Финал главы', sub:'Итоги · боссы главы 1', final:true }
|
||||
{ id:'final1', num:'★', name:'Финал главы', sub:'Итоги · боссы главы 1', final:true }
|
||||
];
|
||||
PARAS.forEach(p => { STATE.progress[p.id] = 0; });
|
||||
|
||||
@@ -1829,7 +1829,7 @@ function buildFinal1(){
|
||||
if(BOSS_STATE[idx].defeated){
|
||||
card.style.background = 'linear-gradient(135deg,var(--sec-acc-soft),var(--pri-soft))';
|
||||
card.classList.add('glow');
|
||||
goBtn.disabled = true; goBtn.style.opacity = .55; goBtn.textContent = '✓ Повержен';
|
||||
goBtn.disabled = true; goBtn.style.opacity = .55; goBtn.textContent = '✓ Повержен';
|
||||
ansInp.disabled = true;
|
||||
}
|
||||
goBtn.addEventListener('click', ()=>{
|
||||
@@ -1843,7 +1843,7 @@ function buildFinal1(){
|
||||
feedback(fb, true, '✓ Босс '+b.n+' повержен! +10 XP. '+b.hint);
|
||||
addXp(10, 'boss-ch1-'+b.n);
|
||||
bumpProgress('final1', 18);
|
||||
goBtn.disabled = true; goBtn.style.opacity = .55; goBtn.textContent = '✓ Повержен';
|
||||
goBtn.disabled = true; goBtn.style.opacity = .55; goBtn.textContent = '✓ Повержен';
|
||||
ansInp.disabled = true;
|
||||
card.style.background = 'linear-gradient(135deg,var(--sec-acc-soft),var(--pri-soft))';
|
||||
card.classList.add('glow','pulse');
|
||||
|
||||
@@ -245,7 +245,7 @@ input[type=range]:active{box-shadow:0 0 0 4px var(--pri-soft);border-radius:8px}
|
||||
<section id="sec-p4" class="sec" data-watermark="a^x"><div class="sec-header"><span class="sec-num">§ 4</span><h2 class="sec-h">Показательная функция</h2></div><div id="p4-body"></div></section>
|
||||
<section id="sec-p5" class="sec" data-watermark="="><div class="sec-header"><span class="sec-num">§ 5</span><h2 class="sec-h">Показательные уравнения</h2></div><div id="p5-body"></div></section>
|
||||
<section id="sec-p6" class="sec" data-watermark=">"><div class="sec-header"><span class="sec-num">§ 6</span><h2 class="sec-h">Показательные неравенства</h2></div><div id="p6-body"></div></section>
|
||||
<section id="sec-final2" class="sec" data-watermark="★"><div class="sec-header"><span class="sec-num" style="background:linear-gradient(135deg,#7c3aed,#8b5cf6)">★</span><h2 class="sec-h">Финал главы</h2></div><div id="final2-body"></div></section>
|
||||
<section id="sec-final2" class="sec" data-watermark="★"><div class="sec-header"><span class="sec-num" style="background:linear-gradient(135deg,#7c3aed,#8b5cf6)">★</span><h2 class="sec-h">Финал главы</h2></div><div id="final2-body"></div></section>
|
||||
|
||||
</div>
|
||||
<aside class="col-side" id="col-side"><div id="sidebar-content"></div></aside>
|
||||
@@ -274,7 +274,7 @@ const PARAS = [
|
||||
{ id:'p4', num:'§ 4', name:'Показательная функция', sub:'$y = a^x$' },
|
||||
{ id:'p5', num:'§ 5', name:'Показательные уравнения', sub:'$a^{f(x)} = a^{g(x)}$' },
|
||||
{ id:'p6', num:'§ 6', name:'Показательные неравенства', sub:'$a^x > b$' },
|
||||
{ id:'final2', num:'★', name:'Финал главы', sub:'Итоги · боссы главы 2', final:true }
|
||||
{ id:'final2', num:'★', name:'Финал главы', sub:'Итоги · боссы главы 2', final:true }
|
||||
];
|
||||
PARAS.forEach(p => { STATE.progress[p.id] = 0; });
|
||||
|
||||
@@ -2122,7 +2122,7 @@ function buildFinal2(){
|
||||
if(BOSS_STATE[idx].defeated){
|
||||
card.style.background = 'linear-gradient(135deg,var(--sec-acc-soft),var(--pri-soft))';
|
||||
card.classList.add('glow');
|
||||
goBtn.disabled = true; goBtn.style.opacity = .55; goBtn.textContent = '✓ Повержен';
|
||||
goBtn.disabled = true; goBtn.style.opacity = .55; goBtn.textContent = '✓ Повержен';
|
||||
ansInp.disabled = true;
|
||||
}
|
||||
goBtn.addEventListener('click', ()=>{
|
||||
@@ -2136,7 +2136,7 @@ function buildFinal2(){
|
||||
feedback(fb, true, '✓ Босс '+b.n+' повержен! +10 XP. '+b.hint);
|
||||
addXp(10, 'boss-ch2-'+b.n);
|
||||
bumpProgress('final2', 18);
|
||||
goBtn.disabled = true; goBtn.style.opacity = .55; goBtn.textContent = '✓ Повержен';
|
||||
goBtn.disabled = true; goBtn.style.opacity = .55; goBtn.textContent = '✓ Повержен';
|
||||
ansInp.disabled = true;
|
||||
card.style.background = 'linear-gradient(135deg,var(--sec-acc-soft),var(--pri-soft))';
|
||||
card.classList.add('glow','pulse');
|
||||
|
||||
@@ -267,7 +267,7 @@ input[type=range]:active{box-shadow:0 0 0 4px var(--pri-soft);border-radius:8px}
|
||||
<section id="sec-p8" class="sec" data-watermark="log_a x"><div class="sec-header"><span class="sec-num">§ 8</span><h2 class="sec-h">Логарифмическая функция</h2></div><div id="p8-body"></div></section>
|
||||
<section id="sec-p9" class="sec" data-watermark="log="><div class="sec-header"><span class="sec-num">§ 9</span><h2 class="sec-h">Логарифмические уравнения</h2></div><div id="p9-body"></div></section>
|
||||
<section id="sec-p10" class="sec" data-watermark="log>"><div class="sec-header"><span class="sec-num">§ 10</span><h2 class="sec-h">Логарифмические неравенства</h2></div><div id="p10-body"></div></section>
|
||||
<section id="sec-final3" class="sec" data-watermark="★"><div class="sec-header"><span class="sec-num" style="background:linear-gradient(135deg,#0891b2,#06b6d4)">★</span><h2 class="sec-h">Финал главы</h2></div><div id="final3-body"></div></section>
|
||||
<section id="sec-final3" class="sec" data-watermark="★"><div class="sec-header"><span class="sec-num" style="background:linear-gradient(135deg,#0891b2,#06b6d4)">★</span><h2 class="sec-h">Финал главы</h2></div><div id="final3-body"></div></section>
|
||||
|
||||
</div>
|
||||
<aside class="col-side" id="col-side"><div id="sidebar-content"></div></aside>
|
||||
@@ -297,7 +297,7 @@ const PARAS = [
|
||||
{ id:'p8', num:'§ 8', name:'Логарифмическая функция', sub:'$y = \\log_a x$' },
|
||||
{ id:'p9', num:'§ 9', name:'Логарифмические уравнения', sub:'$\\log_a f = \\log_a g$' },
|
||||
{ id:'p10', num:'§ 10', name:'Логарифмические неравенства', sub:'$\\log_a f > b$' },
|
||||
{ id:'final3', num:'★', name:'Финал главы', sub:'Итоги · боссы главы 3', final:true }
|
||||
{ id:'final3', num:'★', name:'Финал главы', sub:'Итоги · боссы главы 3', final:true }
|
||||
];
|
||||
PARAS.forEach(p => { STATE.progress[p.id] = 0; });
|
||||
|
||||
@@ -2682,7 +2682,7 @@ function buildFinal3(){
|
||||
if(BOSS_STATE[idx].defeated){
|
||||
card.style.background = 'linear-gradient(135deg,var(--sec-acc-soft),var(--pri-soft))';
|
||||
card.classList.add('glow');
|
||||
goBtn.disabled = true; goBtn.style.opacity = .55; goBtn.textContent = '✓ Повержен';
|
||||
goBtn.disabled = true; goBtn.style.opacity = .55; goBtn.textContent = '✓ Повержен';
|
||||
ansInp.disabled = true;
|
||||
}
|
||||
goBtn.addEventListener('click', ()=>{
|
||||
@@ -2696,7 +2696,7 @@ function buildFinal3(){
|
||||
feedback(fb, true, '✓ Босс '+b.n+' повержен! +10 XP. '+b.hint);
|
||||
addXp(10, 'boss-ch3-'+b.n);
|
||||
bumpProgress('final3', 18);
|
||||
goBtn.disabled = true; goBtn.style.opacity = .55; goBtn.textContent = '✓ Повержен';
|
||||
goBtn.disabled = true; goBtn.style.opacity = .55; goBtn.textContent = '✓ Повержен';
|
||||
ansInp.disabled = true;
|
||||
card.style.background = 'linear-gradient(135deg,var(--sec-acc-soft),var(--pri-soft))';
|
||||
card.classList.add('glow','pulse');
|
||||
|
||||
@@ -534,7 +534,7 @@ var FIN_BOSSES = [
|
||||
title: 'Графический синтез',
|
||||
tag: 'Гл. 2 + Гл. 3',
|
||||
q: 'Сколько решений имеет уравнение $2^x = 6 - x$?',
|
||||
hint: '$y = 2^x$ возрастает, $y = 6 - x$ убывает. При $x = 2$: $4 = 4$ ✓. Пересечение возр. и убыв. графиков.',
|
||||
hint: '$y = 2^x$ возрастает, $y = 6 - x$ убывает. При $x = 2$: $4 = 4$ ✓. Пересечение возр. и убыв. графиков.',
|
||||
ans: 1,
|
||||
step: '1'
|
||||
},
|
||||
|
||||
@@ -239,7 +239,7 @@ const PARAS = [
|
||||
{ id:'p1', num:'§ 4', name:'Расположение прямых', sub:'Пересек. · парал. · скрещ.' },
|
||||
{ id:'p2', num:'§ 5', name:'Прямая и плоскость', sub:'3 случая · признак $a \\parallel \\alpha$' },
|
||||
{ id:'p3', num:'§ 6', name:'Две плоскости', sub:'Признак $\\alpha \\parallel \\beta$' },
|
||||
{ id:'final', num:'★', name:'Финал раздела', sub:'4 интегрированных босса', final:true }
|
||||
{ id:'final', num:'★', name:'Финал раздела', sub:'4 интегрированных босса', final:true }
|
||||
];
|
||||
PARAS.forEach(p => { STATE.progress[p.id] = 0; });
|
||||
|
||||
|
||||
@@ -241,7 +241,7 @@ const PARAS = [
|
||||
{ id:'p2', num:'§ 8', name:'Расстояния', sub:'Точка → плоскость, скрещ.' },
|
||||
{ id:'p3', num:'§ 9', name:'Угол + ТТП', sub:'Наклонная, проекция, ТТП' },
|
||||
{ id:'p4', num:'§ 10', name:'⊥-плоскости', sub:'Двугранный угол, признак' },
|
||||
{ id:'final', num:'★', name:'Финал раздела', sub:'5 интегр. боссов', final:true }
|
||||
{ id:'final', num:'★', name:'Финал раздела', sub:'5 интегр. боссов', final:true }
|
||||
];
|
||||
PARAS.forEach(p => { STATE.progress[p.id] = 0; });
|
||||
|
||||
|
||||
@@ -244,7 +244,7 @@ const PARAS = [
|
||||
{ id:'p2', num:'§ 12', name:'Векторы', sub:'$\\vec{a}+\\vec{b}, k\\vec{a}$, базис' },
|
||||
{ id:'p3', num:'§ 13', name:'Скаляр. произв.', sub:'$\\vec{a}\\cdot\\vec{b} = x_1x_2+y_1y_2+z_1z_2$' },
|
||||
{ id:'p4', num:'§ 14', name:'Применение метода', sub:'Куб в координатах · углы' },
|
||||
{ id:'final', num:'★', name:'Финал курса', sub:'Мега-ачивка stereo10_master', final:true }
|
||||
{ id:'final', num:'★', name:'Финал курса', sub:'Мега-ачивка stereo10_master', final:true }
|
||||
];
|
||||
PARAS.forEach(p => { STATE.progress[p.id] = 0; });
|
||||
|
||||
@@ -258,7 +258,7 @@ const ACH_LABELS = {
|
||||
p4_done:'§14 — применение метода освоено',
|
||||
start:'Начало раздела 4!',
|
||||
r4_done:'Раздел 4 пройден!',
|
||||
master:'★ Геометрия 10 пройдена!'
|
||||
master:'★ Геометрия 10 пройдена!'
|
||||
};
|
||||
|
||||
function loadProgress(){
|
||||
@@ -775,7 +775,7 @@ function buildP4(){
|
||||
function buildFinal(){
|
||||
const box = document.getElementById('final-body'); if(!box) return;
|
||||
let html = '';
|
||||
html += '<div class="stub-note"><h3>Финал курса · 4 интегрированных босса</h3><p>Победи 4 финальных босса (координаты, векторы, скаляр., сборная). После — ачивка stereo10_r4_master + 120 XP.</p><p style="margin-top:8px;color:var(--pri2);font-weight:800">★ Если все 4 ачивки разделов получены — выдаётся <b>МЕГА-АЧИВКА stereo10_master</b> + 200 XP супер-бонус.</p></div>';
|
||||
html += '<div class="stub-note"><h3>Финал курса · 4 интегрированных босса</h3><p>Победи 4 финальных босса (координаты, векторы, скаляр., сборная). После — ачивка stereo10_r4_master + 120 XP.</p><p style="margin-top:8px;color:var(--pri2);font-weight:800">★ Если все 4 ачивки разделов получены — выдаётся <b>МЕГА-АЧИВКА stereo10_master</b> + 200 XP супер-бонус.</p></div>';
|
||||
|
||||
html += '<div id="boss-f1-slot"></div>';
|
||||
html += '<div id="boss-f2-slot"></div>';
|
||||
@@ -819,10 +819,10 @@ function checkFinalComplete(){
|
||||
ach.push('stereo10_master');
|
||||
localStorage.setItem('geometry10_achievements', JSON.stringify(ach));
|
||||
addXp(200, 'master');
|
||||
achievement('master', '★ Геометрия 10 пройдена!');
|
||||
megaHtml = '<div style="margin-top:18px;padding:24px;background:linear-gradient(135deg,#fef3c7,#fde68a);border:2px solid #f59e0b;border-radius:14px;text-align:center"><div style="font-family:Unbounded,sans-serif;font-size:1.5rem;font-weight:900;color:#92400e;margin-bottom:10px">★★★ ГЕОМЕТРИЯ 10 ПРОЙДЕНА! ★★★</div><div style="font-size:.95rem;color:#78350f;margin-bottom:14px">Все 4 раздела освоены. Стереометрия — твоя сила. Главная ачивка курса <code style="background:#fbbf24;padding:2px 8px;border-radius:5px">stereo10_master</code> + 200 XP мега-бонус.</div></div>';
|
||||
achievement('master', '★ Геометрия 10 пройдена!');
|
||||
megaHtml = '<div style="margin-top:18px;padding:24px;background:linear-gradient(135deg,#fef3c7,#fde68a);border:2px solid #f59e0b;border-radius:14px;text-align:center"><div style="font-family:Unbounded,sans-serif;font-size:1.5rem;font-weight:900;color:#92400e;margin-bottom:10px">★★★ ГЕОМЕТРИЯ 10 ПРОЙДЕНА! ★★★</div><div style="font-size:.95rem;color:#78350f;margin-bottom:14px">Все 4 раздела освоены. Стереометрия — твоя сила. Главная ачивка курса <code style="background:#fbbf24;padding:2px 8px;border-radius:5px">stereo10_master</code> + 200 XP мега-бонус.</div></div>';
|
||||
} else if(hasAll){
|
||||
megaHtml = '<div style="margin-top:18px;padding:18px;background:linear-gradient(135deg,#fef3c7,#fde68a);border:2px solid #f59e0b;border-radius:14px;font-family:Unbounded,sans-serif;color:#92400e;font-weight:800">★ Главная ачивка stereo10_master уже получена. Геометрия 10 пройдена!</div>';
|
||||
megaHtml = '<div style="margin-top:18px;padding:18px;background:linear-gradient(135deg,#fef3c7,#fde68a);border:2px solid #f59e0b;border-radius:14px;font-family:Unbounded,sans-serif;color:#92400e;font-weight:800">★ Главная ачивка stereo10_master уже получена. Геометрия 10 пройдена!</div>';
|
||||
} else {
|
||||
const missing = [];
|
||||
if(ach.indexOf('stereo10_r1_master')<0) missing.push('R1');
|
||||
|
||||
@@ -267,7 +267,7 @@ input[type=range]:active{box-shadow:0 0 0 4px var(--pri-soft);border-radius:8px}
|
||||
|
||||
<section id="sec-p1" class="sec" data-watermark="\triangle"><div class="sec-header"><span class="sec-num">§ 1</span><h2 class="sec-h">Призма</h2></div><div id="p1-body"></div></section>
|
||||
<section id="sec-p2" class="sec" data-watermark="\bigcirc"><div class="sec-header"><span class="sec-num">§ 2</span><h2 class="sec-h">Цилиндр</h2></div><div id="p2-body"></div></section>
|
||||
<section id="sec-final1" class="sec" data-watermark="★"><div class="sec-header"><span class="sec-num" style="background:linear-gradient(135deg,#d97706,#f59e0b)">★</span><h2 class="sec-h">Финал раздела</h2></div><div id="final1-body"></div></section>
|
||||
<section id="sec-final1" class="sec" data-watermark="★"><div class="sec-header"><span class="sec-num" style="background:linear-gradient(135deg,#d97706,#f59e0b)">★</span><h2 class="sec-h">Финал раздела</h2></div><div id="final1-body"></div></section>
|
||||
|
||||
</div>
|
||||
<aside class="col-side" id="col-side"><div id="sidebar-content"></div></aside>
|
||||
@@ -295,7 +295,7 @@ const _TB_SLUG = 'geometry-11-ch1';
|
||||
const PARAS = [
|
||||
{ id:'p1', num:'§ 1', name:"Призма", sub:'$S_{бок}=Pl$, $V=S_{осн}h$' },
|
||||
{ id:'p2', num:'§ 2', name:"Цилиндр", sub:'$S_{бок}=2\\pi Rh$, $V=\\pi R^2h$' },
|
||||
{ id:'final1', num:'★', name:"Финал раздела", sub:'Итоги · боссы раздела 1', final:true }
|
||||
{ id:'final1', num:'★', name:"Финал раздела", sub:'Итоги · боссы раздела 1', final:true }
|
||||
];
|
||||
PARAS.forEach(p => { STATE.progress[p.id] = 0; });
|
||||
|
||||
|
||||
@@ -267,7 +267,7 @@ input[type=range]:active{box-shadow:0 0 0 4px var(--pri-soft);border-radius:8px}
|
||||
|
||||
<section id="sec-p3" class="sec" data-watermark="\triangledown"><div class="sec-header"><span class="sec-num">§ 3</span><h2 class="sec-h">Пирамида</h2></div><div id="p3-body"></div></section>
|
||||
<section id="sec-p4" class="sec" data-watermark="\nabla"><div class="sec-header"><span class="sec-num">§ 4</span><h2 class="sec-h">Конус</h2></div><div id="p4-body"></div></section>
|
||||
<section id="sec-final2" class="sec" data-watermark="★"><div class="sec-header"><span class="sec-num" style="background:linear-gradient(135deg,#059669,#10b981)">★</span><h2 class="sec-h">Финал раздела</h2></div><div id="final2-body"></div></section>
|
||||
<section id="sec-final2" class="sec" data-watermark="★"><div class="sec-header"><span class="sec-num" style="background:linear-gradient(135deg,#059669,#10b981)">★</span><h2 class="sec-h">Финал раздела</h2></div><div id="final2-body"></div></section>
|
||||
|
||||
</div>
|
||||
<aside class="col-side" id="col-side"><div id="sidebar-content"></div></aside>
|
||||
@@ -295,7 +295,7 @@ const _TB_SLUG = 'geometry-11-ch2';
|
||||
const PARAS = [
|
||||
{ id:'p3', num:'§ 3', name:"Пирамида", sub:'$V=\\frac{1}{3}S_{осн}h$' },
|
||||
{ id:'p4', num:'§ 4', name:"Конус", sub:'$S_{бок}=\\pi Rl$' },
|
||||
{ id:'final2', num:'★', name:"Финал раздела", sub:'Итоги · боссы раздела 2', final:true }
|
||||
{ id:'final2', num:'★', name:"Финал раздела", sub:'Итоги · боссы раздела 2', final:true }
|
||||
];
|
||||
PARAS.forEach(p => { STATE.progress[p.id] = 0; });
|
||||
|
||||
|
||||
@@ -269,7 +269,7 @@ input[type=range]:active{box-shadow:0 0 0 4px var(--pri-soft);border-radius:8px}
|
||||
<section id="sec-p5" class="sec" data-watermark="S^2"><div class="sec-header"><span class="sec-num">§ 5</span><h2 class="sec-h">Сфера</h2></div><div id="p5-body"></div></section>
|
||||
<section id="sec-p6" class="sec" data-watermark="V"><div class="sec-header"><span class="sec-num">§ 6</span><h2 class="sec-h">Шар</h2></div><div id="p6-body"></div></section>
|
||||
<section id="sec-p7" class="sec" data-watermark="\star"><div class="sec-header"><span class="sec-num">§ 7</span><h2 class="sec-h">Правильные многогранники</h2></div><div id="p7-body"></div></section>
|
||||
<section id="sec-final3" class="sec" data-watermark="★"><div class="sec-header"><span class="sec-num" style="background:linear-gradient(135deg,#7c3aed,#a78bfa)">★</span><h2 class="sec-h">Финал раздела</h2></div><div id="final3-body"></div></section>
|
||||
<section id="sec-final3" class="sec" data-watermark="★"><div class="sec-header"><span class="sec-num" style="background:linear-gradient(135deg,#7c3aed,#a78bfa)">★</span><h2 class="sec-h">Финал раздела</h2></div><div id="final3-body"></div></section>
|
||||
|
||||
</div>
|
||||
<aside class="col-side" id="col-side"><div id="sidebar-content"></div></aside>
|
||||
@@ -298,7 +298,7 @@ const PARAS = [
|
||||
{ id:'p5', num:'§ 5', name:"Сфера", sub:'$(x-a)^2+(y-b)^2+(z-c)^2=R^2$' },
|
||||
{ id:'p6', num:'§ 6', name:"Шар", sub:'$S=4\\pi R^2$, $V=\\frac{4}{3}\\pi R^3$' },
|
||||
{ id:'p7', num:'§ 7', name:"Правильные многогранники", sub:'5 платоновых тел' },
|
||||
{ id:'final3', num:'★', name:"Финал раздела", sub:'Итоги · боссы раздела 3', final:true }
|
||||
{ id:'final3', num:'★', name:"Финал раздела", sub:'Итоги · боссы раздела 3', final:true }
|
||||
];
|
||||
PARAS.forEach(p => { STATE.progress[p.id] = 0; });
|
||||
|
||||
@@ -1724,11 +1724,11 @@ function buildP7(){
|
||||
+ '<p>где $V$ — число вершин, $E$ — рёбер, $F$ — граней.</p>'
|
||||
+ '<p><b>Проверка для платоновых тел:</b></p>'
|
||||
+ '<ul style="margin:6px 0 10px 22px;line-height:1.7">'
|
||||
+ '<li>Тетраэдр: $4 - 6 + 4 = 2$ ✓</li>'
|
||||
+ '<li>Куб: $8 - 12 + 6 = 2$ ✓</li>'
|
||||
+ '<li>Октаэдр: $6 - 12 + 8 = 2$ ✓</li>'
|
||||
+ '<li>Додекаэдр: $20 - 30 + 12 = 2$ ✓</li>'
|
||||
+ '<li>Икосаэдр: $12 - 30 + 20 = 2$ ✓</li>'
|
||||
+ '<li>Тетраэдр: $4 - 6 + 4 = 2$ ✓</li>'
|
||||
+ '<li>Куб: $8 - 12 + 6 = 2$ ✓</li>'
|
||||
+ '<li>Октаэдр: $6 - 12 + 8 = 2$ ✓</li>'
|
||||
+ '<li>Додекаэдр: $20 - 30 + 12 = 2$ ✓</li>'
|
||||
+ '<li>Икосаэдр: $12 - 30 + 20 = 2$ ✓</li>'
|
||||
+ '</ul>'
|
||||
+ '<p style="font-weight:700;margin-top:10px">Двойственные пары.</p>'
|
||||
+ '<p>Если в исходном теле соединить центры соседних граней — получится <b>двойственный</b> многогранник. Числа $F$ и $V$ у двойственной пары меняются местами, число рёбер $E$ сохраняется.</p>'
|
||||
|
||||
@@ -271,7 +271,7 @@ input[type=range]:active{box-shadow:0 0 0 4px var(--pri-soft);border-radius:8px}
|
||||
<section id="sec-p9" class="sec" data-watermark="S="><div class="sec-header"><span class="sec-num">§ 9</span><h2 class="sec-h">Геометрические величины</h2></div><div id="p9-body"></div></section>
|
||||
<section id="sec-p10" class="sec" data-watermark="\vec{v}"><div class="sec-header"><span class="sec-num">§ 10</span><h2 class="sec-h">Координаты и векторы</h2></div><div id="p10-body"></div></section>
|
||||
<section id="sec-p11" class="sec" data-watermark="\circlearrowleft"><div class="sec-header"><span class="sec-num">§ 11</span><h2 class="sec-h">Геометрические построения</h2></div><div id="p11-body"></div></section>
|
||||
<section id="sec-final4" class="sec" data-watermark="★"><div class="sec-header"><span class="sec-num" style="background:linear-gradient(135deg,#e11d48,#f43f5e)">★</span><h2 class="sec-h">Финал раздела</h2></div><div id="final4-body"></div></section>
|
||||
<section id="sec-final4" class="sec" data-watermark="★"><div class="sec-header"><span class="sec-num" style="background:linear-gradient(135deg,#e11d48,#f43f5e)">★</span><h2 class="sec-h">Финал раздела</h2></div><div id="final4-body"></div></section>
|
||||
|
||||
</div>
|
||||
<aside class="col-side" id="col-side"><div id="sidebar-content"></div></aside>
|
||||
@@ -301,7 +301,7 @@ const PARAS = [
|
||||
{ id:'p9', num:'§ 9', name:"Геометрические величины", sub:'площади, объёмы' },
|
||||
{ id:'p10', num:'§ 10', name:"Координаты и векторы", sub:'3D: $\\vec{a}=(x;y;z)$' },
|
||||
{ id:'p11', num:'§ 11', name:"Геометрические построения", sub:'циркуль и линейка' },
|
||||
{ id:'final4', num:'★', name:"Финал раздела", sub:'Итоги · боссы раздела 4', final:true }
|
||||
{ id:'final4', num:'★', name:"Финал раздела", sub:'Итоги · боссы раздела 4', final:true }
|
||||
];
|
||||
PARAS.forEach(p => { STATE.progress[p.id] = 0; });
|
||||
|
||||
|
||||
Reference in New Issue
Block a user