Files

2225 lines
203 KiB
HTML
Raw Permalink 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 name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Руководство для учителей — LearnSpace</title>
<link rel="icon" href="/favicon.svg" type="image/svg+xml" />
<link href="https://fonts.googleapis.com/css2?family=Unbounded:wght@400;700;800&family=Manrope:wght@400;500;600;700&display=swap" rel="stylesheet" />
<link rel="stylesheet" href="/css/ls.css" />
<script src="https://cdn.jsdelivr.net/npm/lucide@0.469.0/dist/umd/lucide.min.js"></script>
<style>
.sb-content { background: #f4f5f8; overflow-y: auto; }
/* ── Two-column doc layout ── */
.tg-layout {
display: flex; align-items: flex-start;
max-width: 1320px; margin: 0 auto;
padding: 0 24px 80px; gap: 28px;
min-height: 100%;
}
/* ══════════════════════════════
NAV SIDEBAR
══════════════════════════════ */
.tg-nav {
width: 264px; flex-shrink: 0;
position: sticky; top: 0;
max-height: 100vh; overflow-y: auto;
padding: 24px 0 40px;
scrollbar-width: thin;
}
.tg-nav::-webkit-scrollbar { width: 3px; }
.tg-nav::-webkit-scrollbar-thumb { background: rgba(155,93,229,0.25); border-radius: 99px; }
.tg-nav-header { padding: 0 16px 16px; border-bottom: 1px solid rgba(15,23,42,0.08); margin-bottom: 12px; }
.tg-nav-title {
font-family: 'Unbounded', sans-serif; font-size: 0.72rem; font-weight: 800;
color: var(--text-3); text-transform: uppercase; letter-spacing: 0.1em;
margin-bottom: 10px;
}
.tg-progress-wrap { margin-bottom: 6px; }
.tg-progress-bar-outer {
height: 4px; background: rgba(15,23,42,0.08); border-radius: 99px; overflow: hidden;
}
.tg-progress-bar-inner {
height: 100%; background: linear-gradient(90deg, #9B5DE5, #06D6E0);
border-radius: 99px; width: 0%; transition: width 0.3s;
}
.tg-progress-text { font-size: 0.68rem; color: var(--text-3); margin-top: 5px; }
/* Search in nav */
.tg-nav-search {
padding: 0 12px 10px;
}
.tg-nav-search input {
width: 100%; padding: 7px 12px 7px 32px;
background: #fff; border: 1.5px solid rgba(15,23,42,0.09);
border-radius: 10px; font-family: 'Manrope', sans-serif;
font-size: 0.78rem; color: #0F172A; outline: none;
transition: border-color 0.18s;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%238898AA' stroke-width='2.5'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.35-4.35'/%3E%3C/svg%3E");
background-repeat: no-repeat; background-position: 10px center;
}
.tg-nav-search input:focus { border-color: rgba(155,93,229,0.4); }
/* Chapter items */
.tg-nav-chapter { margin-bottom: 2px; }
.tg-nav-ch-btn {
display: flex; align-items: center; gap: 9px;
width: 100%; padding: 8px 16px;
background: none; border: none; cursor: pointer;
border-radius: 10px; transition: background 0.15s;
font-family: 'Manrope', sans-serif; text-align: left;
}
.tg-nav-ch-btn:hover { background: rgba(155,93,229,0.07); }
.tg-nav-ch-btn.active { background: rgba(155,93,229,0.1); }
.tg-nav-ch-icon {
width: 26px; height: 26px; border-radius: 8px; flex-shrink: 0;
background: rgba(15,23,42,0.06); display: flex; align-items: center; justify-content: center;
}
.tg-nav-ch-icon svg { width: 13px; height: 13px; color: var(--text-3); stroke: var(--text-3); }
.tg-nav-ch-btn.active .tg-nav-ch-icon { background: rgba(155,93,229,0.12); }
.tg-nav-ch-btn.active .tg-nav-ch-icon svg { color: #9B5DE5; stroke: #9B5DE5; }
.tg-nav-ch-label {
flex: 1; font-size: 0.8rem; font-weight: 600; color: #3D4F6B; line-height: 1.3;
}
.tg-nav-ch-btn.active .tg-nav-ch-label { color: #0F172A; font-weight: 700; }
.tg-nav-ch-status { flex-shrink: 0; }
.tg-nav-ch-status svg { width: 14px; height: 14px; color: #06D664; stroke: #06D664; display: none; }
.tg-nav-ch-btn.read .tg-nav-ch-status svg { display: block; }
.tg-nav-ch-chevron { flex-shrink: 0; transition: transform 0.2s; }
.tg-nav-ch-chevron svg { width: 12px; height: 12px; color: var(--text-3); stroke: var(--text-3); }
.tg-nav-chapter.open .tg-nav-ch-chevron { transform: rotate(90deg); }
/* Sub-sections */
.tg-nav-sections { overflow: hidden; max-height: 0; transition: max-height 0.25s ease; }
.tg-nav-chapter.open .tg-nav-sections { max-height: 800px; }
.tg-nav-sec-link {
display: flex; align-items: center; gap: 8px;
padding: 5px 16px 5px 51px;
font-size: 0.74rem; color: var(--text-3); text-decoration: none;
border-radius: 8px; transition: all 0.15s; cursor: pointer;
}
.tg-nav-sec-link:hover { color: #0F172A; background: rgba(15,23,42,0.04); }
.tg-nav-sec-link.active {
color: #9B5DE5; font-weight: 600;
background: rgba(155,93,229,0.06);
}
.tg-nav-sec-link.active::before {
content: ''; width: 4px; height: 4px; border-radius: 50%;
background: #9B5DE5; flex-shrink: 0;
}
/* ══════════════════════════════
CONTENT AREA
══════════════════════════════ */
.tg-content { flex: 1; min-width: 0; padding: 24px 0; }
/* Hero */
.tg-hero {
background: linear-gradient(135deg, #f8f6ff 0%, #eef2ff 100%);
border: 1.5px solid rgba(155,93,229,0.15);
border-radius: 24px; padding: 40px 40px 36px;
margin-bottom: 36px; position: relative; overflow: hidden;
}
.tg-hero::before {
content: '';
position: absolute; inset: 0;
background-image: radial-gradient(circle, rgba(15,23,42,0.035) 1px, transparent 1px);
background-size: 20px 20px; pointer-events: none;
}
.tg-hero-badge {
display: inline-flex; align-items: center; gap: 6px;
background: rgba(155,93,229,0.1); border: 1px solid rgba(155,93,229,0.25);
color: #7c3aed; font-size: 0.7rem; font-weight: 700;
letter-spacing: 0.1em; text-transform: uppercase;
padding: 4px 12px; border-radius: 99px; margin-bottom: 16px;
}
.tg-hero-title {
font-family: 'Unbounded', sans-serif;
font-size: clamp(1.4rem, 3vw, 2rem); font-weight: 800;
line-height: 1.25; color: #0F172A; margin-bottom: 12px;
}
.tg-hero-title span {
background: linear-gradient(135deg, #9B5DE5, #06D6E0);
-webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text;
}
.tg-hero-sub { font-size: 0.9rem; color: #5a6a8a; line-height: 1.65; margin-bottom: 24px; max-width: 560px; }
.tg-hero-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.tg-hero-chip {
display: flex; align-items: center; gap: 6px;
background: #fff; border: 1.5px solid rgba(15,23,42,0.08);
color: #3D4F6B; font-size: 0.76rem; font-weight: 600;
padding: 5px 12px; border-radius: 99px;
box-shadow: 0 1px 4px rgba(15,23,42,0.05);
}
.tg-hero-chip svg { width: 13px; height: 13px; }
/* Chapter */
.tg-chapter { margin-bottom: 0; display: none; }
.tg-chapter.tg-active { display: block; animation: tgFadeIn 0.28s ease; }
@keyframes tgFadeIn { from { opacity:0; transform:translateY(10px); } to { opacity:1; transform:translateY(0); } }
/* Search mode: reveal all chapters so matches are visible */
.tg-content.tg-search-mode .tg-chapter { display: block; margin-bottom: 32px; }
.tg-content.tg-search-mode .tg-chapter.search-hidden { display: none; }
.tg-chapter-header {
display: flex; align-items: center; gap: 16px;
padding: 28px 0 18px;
border-bottom: 2px solid rgba(155,93,229,0.12);
margin-bottom: 28px;
}
.tg-chapter-icon {
width: 52px; height: 52px; border-radius: 16px; flex-shrink: 0;
background: rgba(155,93,229,0.1); border: 1.5px solid rgba(155,93,229,0.2);
display: flex; align-items: center; justify-content: center;
}
.tg-chapter-icon svg { width: 24px; height: 24px; color: #9B5DE5; stroke: #9B5DE5; }
.tg-chapter-meta { flex: 1; }
.tg-chapter-num {
font-size: 0.66rem; font-weight: 700; color: var(--text-3);
text-transform: uppercase; letter-spacing: 0.1em; margin-bottom: 4px;
}
.tg-chapter-title {
font-family: 'Unbounded', sans-serif;
font-size: 1.25rem; font-weight: 800; color: #0F172A; line-height: 1.25;
}
.tg-chapter-try {
display: inline-flex; align-items: center; gap: 7px;
padding: 8px 16px; border-radius: 99px;
background: rgba(155,93,229,0.1); border: 1.5px solid rgba(155,93,229,0.25);
color: #7c3aed; font-size: 0.78rem; font-weight: 700;
text-decoration: none; transition: all 0.18s; flex-shrink: 0;
}
.tg-chapter-try:hover { background: #9B5DE5; color: #fff; }
.tg-chapter-try svg { width: 14px; height: 14px; }
/* Section */
.tg-section { margin-bottom: 36px; scroll-margin-top: 24px; }
.tg-section-title {
font-family: 'Unbounded', sans-serif; font-size: 0.9rem; font-weight: 800;
color: #0F172A; margin-bottom: 16px;
display: flex; align-items: center; gap: 10px;
}
.tg-section-title::before {
content: ''; display: block; width: 3px; height: 18px;
background: linear-gradient(180deg, #9B5DE5, #06D6E0);
border-radius: 99px; flex-shrink: 0;
}
.tg-section p { font-size: 0.88rem; color: #3D4F6B; line-height: 1.7; margin-bottom: 14px; }
/* Steps */
.tg-steps { display: flex; flex-direction: column; gap: 8px; margin-bottom: 14px; }
.tg-step {
display: flex; align-items: flex-start; gap: 14px;
padding: 14px 18px; background: #fff;
border: 1.5px solid rgba(15,23,42,0.07); border-radius: 14px;
box-shadow: 0 1px 4px rgba(15,23,42,0.04);
}
.tg-step-num {
width: 28px; height: 28px; border-radius: 50%; flex-shrink: 0;
background: rgba(155,93,229,0.1); border: 1.5px solid rgba(155,93,229,0.25);
color: #9B5DE5; font-family: 'Unbounded', sans-serif;
font-size: 0.68rem; font-weight: 800;
display: flex; align-items: center; justify-content: center;
}
.tg-step-body { flex: 1; font-size: 0.86rem; line-height: 1.6; color: #0F172A; }
.tg-step-body b { font-weight: 700; }
.tg-step-body code {
font-family: monospace; background: rgba(155,93,229,0.09);
padding: 1px 7px; border-radius: 6px; font-size: 0.83rem; color: #7c3aed;
}
/* Note boxes */
.tg-tip, .tg-warning, .tg-success, .tg-note {
display: flex; align-items: flex-start; gap: 12px;
padding: 14px 18px; border-radius: 14px; margin: 12px 0;
}
.tg-tip { background: rgba(6,214,224,0.06); border: 1.5px solid rgba(6,214,224,0.2); border-left: 4px solid #06D6E0; }
.tg-warning{ background: rgba(241,91,181,0.05); border: 1.5px solid rgba(241,91,181,0.2); border-left: 4px solid #F15BB5; }
.tg-success{ background: rgba(6,214,100,0.06); border: 1.5px solid rgba(6,214,100,0.2); border-left: 4px solid #06D664; }
.tg-note { background: rgba(155,93,229,0.05); border: 1.5px solid rgba(155,93,229,0.18); border-left: 4px solid #9B5DE5; }
.tg-box-icon { flex-shrink: 0; margin-top: 1px; }
.tg-box-icon svg { width: 18px; height: 18px; }
.tg-tip .tg-box-icon svg { color: #0891b2; stroke: #0891b2; }
.tg-warning .tg-box-icon svg { color: #db2777; stroke: #db2777; }
.tg-success .tg-box-icon svg { color: #059669; stroke: #059669; }
.tg-note .tg-box-icon svg { color: #9B5DE5; stroke: #9B5DE5; }
.tg-box-body { flex: 1; font-size: 0.84rem; line-height: 1.6; color: #0F172A; }
.tg-box-label { font-weight: 700; margin-bottom: 3px; font-size: 0.8rem; }
.tg-tip .tg-box-label { color: #0891b2; }
.tg-warning .tg-box-label { color: #db2777; }
.tg-success .tg-box-label { color: #059669; }
.tg-note .tg-box-label { color: #9B5DE5; }
/* Accordion (type cards, block types) */
.tg-accordion { display: flex; flex-direction: column; gap: 6px; margin-bottom: 14px; }
.tg-acc-item { background: #fff; border: 1.5px solid rgba(15,23,42,0.07); border-radius: 14px; overflow: hidden; box-shadow: 0 1px 4px rgba(15,23,42,0.04); }
.tg-acc-head {
display: flex; align-items: center; gap: 12px;
padding: 13px 18px; cursor: pointer; user-select: none;
transition: background 0.15s;
}
.tg-acc-head:hover { background: rgba(155,93,229,0.04); }
.tg-acc-badge {
font-family: 'Unbounded', sans-serif; font-size: 0.65rem; font-weight: 800;
padding: 3px 9px; border-radius: 99px; flex-shrink: 0;
}
.tg-acc-name { font-size: 0.86rem; font-weight: 700; color: #0F172A; flex: 1; }
.tg-acc-desc-short { font-size: 0.78rem; color: var(--text-3); }
.tg-acc-chevron { transition: transform 0.2s; }
.tg-acc-chevron svg { width: 14px; height: 14px; color: var(--text-3); stroke: var(--text-3); }
.tg-acc-item.open .tg-acc-chevron { transform: rotate(180deg); }
.tg-acc-body {
max-height: 0; overflow: hidden;
transition: max-height 0.25s ease, padding 0.25s;
padding: 0 18px;
}
.tg-acc-item.open .tg-acc-body { max-height: 400px; padding: 0 18px 16px; }
.tg-acc-body p { font-size: 0.83rem; color: #3D4F6B; line-height: 1.65; margin-top: 6px; }
.tg-acc-body ul { font-size: 0.83rem; color: #3D4F6B; line-height: 1.8; padding-left: 18px; margin-top: 6px; }
/* Checklist */
.tg-checklist { background: #fff; border: 1.5px solid rgba(15,23,42,0.07); border-radius: 18px; overflow: hidden; box-shadow: 0 2px 8px rgba(15,23,42,0.04); }
.tg-checklist-header { padding: 18px 22px 14px; border-bottom: 1px solid rgba(15,23,42,0.07); display: flex; align-items: center; justify-content: space-between; }
.tg-checklist-title { font-family: 'Unbounded', sans-serif; font-size: 0.82rem; font-weight: 800; color: #0F172A; }
.tg-checklist-prog { font-size: 0.72rem; color: var(--text-3); }
.tg-checklist-bar { height: 4px; background: rgba(15,23,42,0.07); }
.tg-checklist-bar-inner { height: 100%; background: linear-gradient(90deg, #9B5DE5, #06D6E0); width: 0%; transition: width 0.4s; }
.tg-checklist-items { padding: 10px 12px 12px; }
.tg-cl-item {
display: flex; align-items: center; gap: 12px;
padding: 9px 10px; border-radius: 10px; transition: background 0.15s; cursor: pointer;
}
.tg-cl-item:hover { background: rgba(155,93,229,0.05); }
.tg-cl-item input[type="checkbox"] { width: 17px; height: 17px; accent-color: #9B5DE5; cursor: pointer; flex-shrink: 0; }
.tg-cl-label { flex: 1; font-size: 0.84rem; color: #0F172A; font-weight: 500; }
.tg-cl-item.checked .tg-cl-label { text-decoration: line-through; color: var(--text-3); }
.tg-cl-link { font-size: 0.72rem; color: #9B5DE5; text-decoration: none; white-space: nowrap; }
.tg-cl-link:hover { text-decoration: underline; }
/* Keyboard shortcuts table */
.tg-shortcuts { display: grid; grid-template-columns: auto 1fr; gap: 6px 16px; margin-bottom: 14px; }
.tg-kbd {
font-family: monospace; font-size: 0.78rem; font-weight: 700;
background: #fff; border: 1.5px solid rgba(15,23,42,0.12);
border-bottom-width: 3px; border-radius: 7px;
padding: 3px 9px; color: #0F172A; white-space: nowrap;
align-self: center;
}
.tg-kbd-desc { font-size: 0.82rem; color: #3D4F6B; align-self: center; line-height: 1.4; }
/* UI mock */
.tg-mock {
background: #fff; border: 1.5px solid rgba(15,23,42,0.08);
border-radius: 16px; overflow: hidden; margin: 16px 0;
box-shadow: 0 4px 16px rgba(15,23,42,0.07);
}
.tg-mock-bar {
height: 36px; background: rgba(15,23,42,0.04);
border-bottom: 1px solid rgba(15,23,42,0.07);
display: flex; align-items: center; gap: 7px; padding: 0 14px;
}
.tg-mock-dot { width: 8px; height: 8px; border-radius: 50%; }
.tg-mock-body { padding: 16px 20px; }
.tg-mock-row { display: flex; gap: 10px; align-items: center; margin-bottom: 8px; }
.tg-mock-skel { background: rgba(15,23,42,0.07); border-radius: 6px; }
/* Tools grid */
.tg-tools-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 10px; margin-bottom: 14px; }
.tg-tool-card {
display: flex; align-items: center; gap: 10px;
padding: 11px 14px; background: #fff;
border: 1.5px solid rgba(15,23,42,0.07); border-radius: 12px;
box-shadow: 0 1px 4px rgba(15,23,42,0.04);
}
.tg-tool-icon {
width: 34px; height: 34px; border-radius: 9px; flex-shrink: 0;
background: rgba(155,93,229,0.09); display: flex; align-items: center; justify-content: center;
}
.tg-tool-icon svg { width: 16px; height: 16px; color: #9B5DE5; stroke: #9B5DE5; }
.tg-tool-name { font-size: 0.8rem; font-weight: 700; color: #0F172A; }
.tg-tool-desc { font-size: 0.7rem; color: var(--text-3); margin-top: 1px; }
/* Chapter nav */
.tg-chapter-nav { display: flex; gap: 12px; margin-top: 40px; padding-top: 24px; border-top: 1.5px solid rgba(15,23,42,0.08); }
.tg-ch-nav-btn {
flex: 1; display: flex; align-items: center; gap: 12px;
padding: 16px 20px; background: #fff;
border: 1.5px solid rgba(15,23,42,0.08); border-radius: 16px;
text-decoration: none; color: inherit; cursor: pointer;
transition: all 0.18s; box-shadow: 0 1px 6px rgba(15,23,42,0.04);
}
.tg-ch-nav-btn:hover { border-color: rgba(155,93,229,0.3); transform: translateY(-2px); box-shadow: 0 6px 20px rgba(15,23,42,0.08); }
.tg-ch-nav-btn.next { flex-direction: row-reverse; text-align: right; }
.tg-ch-nav-icon { width: 36px; height: 36px; border-radius: 10px; background: rgba(155,93,229,0.1); display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.tg-ch-nav-icon svg { width: 16px; height: 16px; color: #9B5DE5; stroke: #9B5DE5; }
.tg-ch-nav-label { font-size: 0.68rem; color: var(--text-3); text-transform: uppercase; letter-spacing: 0.07em; font-weight: 700; }
.tg-ch-nav-title { font-size: 0.84rem; font-weight: 700; color: #0F172A; margin-top: 2px; }
/* Divider */
.tg-divider { height: 1px; background: rgba(15,23,42,0.08); margin: 20px 0; }
/* Badge colors per question type */
.badge-single { background: rgba(155,93,229,0.12); color: #7c3aed; }
.badge-multiple { background: rgba(6,214,224,0.12); color: #0891b2; }
.badge-text { background: rgba(241,91,181,0.12); color: #db2777; }
.badge-number { background: rgba(6,214,100,0.12); color: #059669; }
.badge-order { background: rgba(255,179,71,0.12); color: #d97706; }
.badge-match { background: rgba(15,23,42,0.08); color: #3D4F6B; }
/* Highlight search matches */
mark { background: rgba(155,93,229,0.18); color: #7c3aed; border-radius: 3px; padding: 0 2px; }
/* Hidden by search filter */
.tg-section.search-hidden { display: none; }
.tg-chapter.search-hidden { display: none; }
/* Admin guide */
.tg-admin-divider { display:flex; align-items:center; gap:8px; margin:20px 0 8px; font-family:'Unbounded',sans-serif; font-size:0.58rem; font-weight:800; letter-spacing:0.09em; text-transform:uppercase; color:#c0306a; }
.tg-admin-divider::before,.tg-admin-divider::after { content:''; flex:1; height:1px; background:rgba(241,91,181,0.2); }
.tg-nav-chapter.admin .tg-nav-ch-btn { color:#c0306a; }
.tg-nav-chapter.admin .tg-nav-ch-btn .tg-nav-ch-icon svg { stroke:#c0306a; }
.tg-nav-chapter.admin .tg-nav-ch-btn:hover,.tg-nav-chapter.admin .tg-nav-ch-btn.active { background:rgba(241,91,181,0.07); }
.tg-chapter.admin-chapter .tg-chapter-header { background:linear-gradient(135deg,rgba(241,91,181,0.04),rgba(155,93,229,0.04)); border-radius:16px; margin-bottom:4px; }
.tg-chapter.admin-chapter .tg-chapter-icon svg { stroke:#c0306a; }
.tg-chapter.admin-chapter .tg-chapter-num { color:#c0306a; }
.tg-chapter.admin-chapter .tg-chapter-try { background:rgba(241,91,181,0.1); color:#c0306a; border:1.5px solid rgba(241,91,181,0.25); }
.tg-chapter.admin-chapter .tg-chapter-try:hover { background:#c0306a; color:#fff; }
.tg-chapter-admin-header { display:inline-flex; align-items:center; gap:7px; padding:5px 13px; border-radius:99px; background:rgba(241,91,181,0.1); color:#c0306a; font-size:0.74rem; font-weight:700; margin-bottom:18px; }
.tg-chapter-admin-header svg { width:13px; height:13px; stroke:currentColor; }
/* Mobile */
@media (max-width: 1024px) {
.tg-layout { padding: 0 16px 60px; gap: 0; }
.tg-nav { display: none; }
.tg-content { padding: 20px 0; }
}
@media (max-width: 768px) {
.tg-hero { padding: 28px 22px; }
.tg-tools-grid { grid-template-columns: 1fr 1fr; }
.tg-chapter-nav { flex-direction: column; }
}
</style>
</head>
<body>
<div class="app-layout">
<aside class="sidebar" id="app-sidebar"></aside>
<div class="notif-drop" id="notif-drop"></div>
<div class="sb-content" id="tg-scroll">
<div class="tg-layout">
<!-- ══ LEFT NAV ══ -->
<nav class="tg-nav" id="tg-nav">
<div class="tg-nav-header">
<div class="tg-nav-title">Содержание</div>
<div class="tg-progress-wrap">
<div class="tg-progress-bar-outer"><div class="tg-progress-bar-inner" id="tg-prog-bar"></div></div>
<div class="tg-progress-text" id="tg-prog-text">0 из 21 глав прочитано</div>
</div>
</div>
<div class="tg-nav-search">
<input type="text" id="tg-search" placeholder="Поиск по руководству..." />
</div>
<div id="tg-nav-chapters"></div>
<div id="tg-nav-admin" style="display:none">
<div class="tg-admin-divider"><i data-lucide="shield" style="width:12px;height:12px;stroke:#c0306a;vertical-align:-2px"></i> Администратор</div>
<div id="tg-nav-admin-chapters"></div>
</div>
</nav>
<!-- ══ CONTENT ══ -->
<main class="tg-content">
<!-- Hero -->
<div class="tg-hero">
<div class="tg-hero-badge"><i data-lucide="book-marked" style="width:12px;height:12px"></i> Руководство для учителей</div>
<h1 class="tg-hero-title">Полное руководство по<br><span>LearnSpace</span></h1>
<p class="tg-hero-sub">Пошаговые инструкции по всем возможностям платформы — от создания первого класса до проведения онлайн-уроков в реальном времени.</p>
</div>
<!-- ═══ CHAPTER 1 ═══ -->
<div class="tg-chapter" id="ch-1">
<div class="tg-chapter-header">
<div class="tg-chapter-icon"><i data-lucide="rocket"></i></div>
<div class="tg-chapter-meta">
<div class="tg-chapter-num">Глава 1</div>
<div class="tg-chapter-title">Быстрый старт</div>
</div>
<a href="/dashboard" class="tg-chapter-try" target="_blank"><i data-lucide="external-link"></i> Открыть</a>
</div>
<div class="tg-section" id="s-1-1">
<div class="tg-section-title">1.1 Первый вход и настройка профиля</div>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num">1</div><div class="tg-step-body">Откройте LearnSpace и войдите, используя email и пароль, выданные администратором.</div></div>
<div class="tg-step"><div class="tg-step-num">2</div><div class="tg-step-body">После входа вы попадёте на <b>Дашборд</b>. Перейдите в раздел <b>«Профиль»</b> через боковое меню.</div></div>
<div class="tg-step"><div class="tg-step-num">3</div><div class="tg-step-body">Укажите полное имя — ученики будут видеть его в классах и на уроках.</div></div>
</div>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="lightbulb"></i></div><div class="tg-box-body"><div class="tg-box-label">Подсказка</div>Аватар генерируется автоматически из инициалов. Загрузить своё фото можно в настройках профиля.</div></div>
</div>
<div class="tg-section" id="s-1-2">
<div class="tg-section-title">1.2 Знакомство с интерфейсом</div>
<p><b>Боковое меню (sidebar)</b> — доступ ко всем модулям. Учительские разделы (Аналитика, Банк вопросов, Live-квиз, Журнал) видны только при роли «Учитель».</p>
<div class="tg-shortcuts">
<span class="tg-kbd">Ctrl + K</span><span class="tg-kbd-desc">Быстрый поиск по урокам, вопросам, файлам</span>
<span class="tg-kbd"></span><span class="tg-kbd-desc">Свернуть боковое меню (кнопка-шеврон вверху sidebar)</span>
</div>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="smartphone"></i></div><div class="tg-box-body"><div class="tg-box-label">Мобильная версия</div>На мобильных sidebar открывается кнопкой в нижней панели навигации.</div></div>
</div>
<div class="tg-section" id="s-1-3">
<div class="tg-section-title">1.3 Ваш первый класс за 5 минут</div>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num">1</div><div class="tg-step-body">Перейдите в раздел <b>«Классы»</b> через боковое меню.</div></div>
<div class="tg-step"><div class="tg-step-num">2</div><div class="tg-step-body">Нажмите кнопку <b>«+»</b> в верхнем правом углу списка классов.</div></div>
<div class="tg-step"><div class="tg-step-num">3</div><div class="tg-step-body">Заполните название, выберите предмет, добавьте описание (необязательно). Нажмите <b>«Создать»</b>.</div></div>
<div class="tg-step"><div class="tg-step-num">4</div><div class="tg-step-body">Скопируйте код приглашения и отправьте ученикам.</div></div>
</div>
<div class="tg-success"><div class="tg-box-icon"><i data-lucide="check-circle"></i></div><div class="tg-box-body"><div class="tg-box-label">Готово!</div>Ученики смогут вступить в класс, введя код на своём дашборде в кнопке «Вступить в класс».</div></div>
</div>
<div class="tg-section" id="s-1-4">
<div class="tg-section-title">1.4 Контрольный список готовности</div>
<p>Отметьте выполненные шаги — прогресс сохраняется автоматически.</p>
<div class="tg-checklist">
<div class="tg-checklist-header">
<div class="tg-checklist-title">Чеклист нового учителя</div>
<div class="tg-checklist-prog" id="cl-prog">0 / 6</div>
</div>
<div class="tg-checklist-bar"><div class="tg-checklist-bar-inner" id="cl-bar"></div></div>
<div class="tg-checklist-items">
<label class="tg-cl-item" data-id="profile"><input type="checkbox" /><span class="tg-cl-label">Профиль настроен (имя, фото)</span><a href="/profile" class="tg-cl-link">Профиль →</a></label>
<label class="tg-cl-item" data-id="class"><input type="checkbox" /><span class="tg-cl-label">Первый класс создан</span><a href="/classes" class="tg-cl-link">Классы →</a></label>
<label class="tg-cl-item" data-id="students"><input type="checkbox" /><span class="tg-cl-label">Ученики приглашены</span><a href="/classes" class="tg-cl-link">Классы →</a></label>
<label class="tg-cl-item" data-id="question"><input type="checkbox" /><span class="tg-cl-label">Первый вопрос добавлен в банк</span><a href="/question-bank" class="tg-cl-link">Банк →</a></label>
<label class="tg-cl-item" data-id="assignment"><input type="checkbox" /><span class="tg-cl-label">Первое задание назначено</span><a href="/classes" class="tg-cl-link">Классы →</a></label>
<label class="tg-cl-item" data-id="library"><input type="checkbox" /><span class="tg-cl-label">Первый файл загружен в библиотеку</span><a href="/library" class="tg-cl-link">Библиотека →</a></label>
</div>
</div>
</div>
<div class="tg-chapter-nav">
<div class="tg-ch-nav-btn next" onclick="scrollToChapter('ch-2')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-right"></i></div>
<div><div class="tg-ch-nav-label">Следующая глава</div><div class="tg-ch-nav-title">Управление классами</div></div>
</div>
</div>
</div>
<!-- ═══ CHAPTER 2 ═══ -->
<div class="tg-chapter" id="ch-2">
<div class="tg-chapter-header">
<div class="tg-chapter-icon"><i data-lucide="graduation-cap"></i></div>
<div class="tg-chapter-meta">
<div class="tg-chapter-num">Глава 2</div>
<div class="tg-chapter-title">Управление классами</div>
</div>
<a href="/classes" class="tg-chapter-try" target="_blank"><i data-lucide="external-link"></i> Классы</a>
</div>
<div class="tg-section" id="s-2-1">
<div class="tg-section-title">2.1 Создание класса</div>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num">1</div><div class="tg-step-body">Откройте раздел <b>«Классы»</b> → нажмите <b>«+»</b> в левой панели.</div></div>
<div class="tg-step"><div class="tg-step-num">2</div><div class="tg-step-body">Введите <b>название</b>, выберите <b>предмет</b> из выпадающего списка, добавьте описание.</div></div>
<div class="tg-step"><div class="tg-step-num">3</div><div class="tg-step-body">Нажмите <b>«Создать»</b>. Класс появится в списке слева.</div></div>
</div>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="lightbulb"></i></div><div class="tg-box-body"><div class="tg-box-label">Подсказка</div>Название видят ученики — используйте понятные: <code>8-Б Биология</code> или <code>Физика 10 класс</code>.</div></div>
</div>
<div class="tg-section" id="s-2-2">
<div class="tg-section-title">2.2 Приглашение учеников</div>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num">1</div><div class="tg-step-body">Выберите класс из списка слева → в детальной панели найдите <b>блок с кодом</b> приглашения.</div></div>
<div class="tg-step"><div class="tg-step-num">2</div><div class="tg-step-body">Нажмите на код — он автоматически скопируется в буфер обмена.</div></div>
<div class="tg-step"><div class="tg-step-num">3</div><div class="tg-step-body">Отправьте код ученикам (мессенджер, на доске). Ученики вводят его через <b>«Вступить в класс»</b> на своём дашборде.</div></div>
</div>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="link"></i></div><div class="tg-box-body"><div class="tg-box-label">Ссылка-приглашение</div>Кнопка «Копировать ссылку» рядом с кодом — ученик перейдёт по ней и автоматически вступит в класс.</div></div>
</div>
<div class="tg-section" id="s-2-3">
<div class="tg-section-title">2.3 Просмотр состава и удаление ученика</div>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num">1</div><div class="tg-step-body">Откройте класс → вкладка <b>«Ученики»</b>. Таблица: имя, email, средний балл, дата вступления.</div></div>
<div class="tg-step"><div class="tg-step-num">2</div><div class="tg-step-body">Для удаления — нажмите кнопку <b>«X»</b> справа от имени ученика и подтвердите.</div></div>
</div>
<div class="tg-warning"><div class="tg-box-icon"><i data-lucide="alert-triangle"></i></div><div class="tg-box-body"><div class="tg-box-label">Внимание</div>Удалённый ученик потеряет доступ к заданиям и материалам класса. Его результаты сохранятся в аналитике.</div></div>
</div>
<div class="tg-section" id="s-2-4">
<div class="tg-section-title">2.4 Обновление кода приглашения</div>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num">1</div><div class="tg-step-body">В детальной панели класса нажмите <b>«Обновить код»</b>.</div></div>
<div class="tg-step"><div class="tg-step-num">2</div><div class="tg-step-body">Старый код станет недействительным, новый будет сгенерирован и скопирован.</div></div>
</div>
<div class="tg-warning"><div class="tg-box-icon"><i data-lucide="alert-triangle"></i></div><div class="tg-box-body"><div class="tg-box-label">Внимание</div>Все ранее отправленные ссылки и коды перестанут работать. Убедитесь, что нужные ученики уже вступили.</div></div>
</div>
<div class="tg-chapter-nav">
<div class="tg-ch-nav-btn prev" onclick="scrollToChapter('ch-1')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-left"></i></div>
<div><div class="tg-ch-nav-label">Предыдущая глава</div><div class="tg-ch-nav-title">Быстрый старт</div></div>
</div>
<div class="tg-ch-nav-btn next" onclick="scrollToChapter('ch-3')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-right"></i></div>
<div><div class="tg-ch-nav-label">Следующая глава</div><div class="tg-ch-nav-title">Банк вопросов</div></div>
</div>
</div>
</div>
<!-- ═══ CHAPTER 3 ═══ -->
<div class="tg-chapter" id="ch-3">
<div class="tg-chapter-header">
<div class="tg-chapter-icon"><i data-lucide="database"></i></div>
<div class="tg-chapter-meta">
<div class="tg-chapter-num">Глава 3</div>
<div class="tg-chapter-title">Банк вопросов</div>
</div>
<a href="/question-bank" class="tg-chapter-try" target="_blank"><i data-lucide="external-link"></i> Банк вопросов</a>
</div>
<div class="tg-section" id="s-3-1">
<div class="tg-section-title">3.1 Создание вопроса</div>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num">1</div><div class="tg-step-body">Нажмите <b>«Создать вопрос»</b> в правом верхнем углу страницы.</div></div>
<div class="tg-step"><div class="tg-step-num">2</div><div class="tg-step-body">Выберите <b>тип вопроса</b> (см. раздел 3.2 ниже).</div></div>
<div class="tg-step"><div class="tg-step-num">3</div><div class="tg-step-body">Введите текст вопроса. LaTeX-формулы — оборачивайте в <code>$...$</code> или <code>$$...$$</code>.</div></div>
<div class="tg-step"><div class="tg-step-num">4</div><div class="tg-step-body">Добавьте варианты ответов и отметьте правильные.</div></div>
<div class="tg-step"><div class="tg-step-num">5</div><div class="tg-step-body">Укажите <b>предмет</b> и <b>тему</b>. Нажмите <b>«Сохранить»</b>.</div></div>
</div>
</div>
<div class="tg-section" id="s-3-2">
<div class="tg-section-title">3.2 Типы вопросов</div>
<div class="tg-accordion">
<div class="tg-acc-item open">
<div class="tg-acc-head" onclick="toggleAcc(this)">
<span class="tg-acc-badge badge-single">single</span>
<span class="tg-acc-name">Один правильный ответ</span>
<span class="tg-acc-desc-short">Радиокнопки</span>
<span class="tg-acc-chevron"><i data-lucide="chevron-down"></i></span>
</div>
<div class="tg-acc-body"><p>Ученик выбирает один вариант из нескольких предложенных. Используйте для вопросов с однозначным ответом.</p><ul><li>Минимум 2 варианта, один правильный</li><li>Можно добавить изображение к вопросу</li></ul></div>
</div>
<div class="tg-acc-item">
<div class="tg-acc-head" onclick="toggleAcc(this)">
<span class="tg-acc-badge badge-multiple">multiple</span>
<span class="tg-acc-name">Несколько правильных ответов</span>
<span class="tg-acc-desc-short">Чекбоксы</span>
<span class="tg-acc-chevron"><i data-lucide="chevron-down"></i></span>
</div>
<div class="tg-acc-body"><p>Ученик отмечает все правильные варианты. Частичное попадание засчитывается пропорционально.</p><ul><li>Минимум 2 правильных варианта</li><li>Балл = доля правильно отмеченных</li></ul></div>
</div>
<div class="tg-acc-item">
<div class="tg-acc-head" onclick="toggleAcc(this)">
<span class="tg-acc-badge badge-text">text</span>
<span class="tg-acc-name">Свободный текстовый ответ</span>
<span class="tg-acc-desc-short">Поле ввода</span>
<span class="tg-acc-chevron"><i data-lucide="chevron-down"></i></span>
</div>
<div class="tg-acc-body"><p>Ученик вводит текст. Проверяется точное совпадение (регистр не учитывается).</p><ul><li>Укажите эталонный ответ и допустимые синонимы через запятую</li></ul></div>
</div>
<div class="tg-acc-item">
<div class="tg-acc-head" onclick="toggleAcc(this)">
<span class="tg-acc-badge badge-number">number</span>
<span class="tg-acc-name">Числовой ответ</span>
<span class="tg-acc-desc-short">С погрешностью</span>
<span class="tg-acc-chevron"><i data-lucide="chevron-down"></i></span>
</div>
<div class="tg-acc-body"><p>Ученик вводит число. Вы задаёте правильный ответ и допустимую погрешность.</p><ul><li>Пример: ответ 9.8, погрешность ±0.1 — принимает 9.7–9.9</li></ul></div>
</div>
<div class="tg-acc-item">
<div class="tg-acc-head" onclick="toggleAcc(this)">
<span class="tg-acc-badge badge-order">order</span>
<span class="tg-acc-name">Расположи в порядке</span>
<span class="tg-acc-desc-short">Drag &amp; Drop</span>
<span class="tg-acc-chevron"><i data-lucide="chevron-down"></i></span>
</div>
<div class="tg-acc-body"><p>Ученик перетаскивает элементы в правильном порядке (хронология, последовательность реакций и т.д.).</p></div>
</div>
<div class="tg-acc-item">
<div class="tg-acc-head" onclick="toggleAcc(this)">
<span class="tg-acc-badge badge-match">match</span>
<span class="tg-acc-name">Сопоставление</span>
<span class="tg-acc-desc-short">Два столбца</span>
<span class="tg-acc-chevron"><i data-lucide="chevron-down"></i></span>
</div>
<div class="tg-acc-body"><p>Ученик соединяет элементы левого столбца с правым. Идеально для терминов и определений, органов и функций.</p></div>
</div>
</div>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="lightbulb"></i></div><div class="tg-box-body"><div class="tg-box-label">Совет</div>Комбинируйте разные типы в одном тесте — это даёт более объективную оценку знаний.</div></div>
</div>
<div class="tg-section" id="s-3-3">
<div class="tg-section-title">3.3 Дублирование и импорт CSV</div>
<p><b>Дублировать</b> — нажмите кнопку копирования рядом с вопросом. Откроется редактор с копией — измените текст или варианты и сохраните.</p>
<div class="tg-divider"></div>
<p><b>Импорт из CSV:</b></p>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num">1</div><div class="tg-step-body">Подготовьте CSV в кодировке <code>UTF-8</code>, разделитель — точка с запятой <code>;</code>. Формат: <code>тип;вопрос;варианты;ответ;предмет;тема</code></div></div>
<div class="tg-step"><div class="tg-step-num">2</div><div class="tg-step-body">Нажмите <b>«Импорт CSV»</b> в шапке страницы, выберите файл.</div></div>
<div class="tg-step"><div class="tg-step-num">3</div><div class="tg-step-body">Система покажет превью. Подтвердите импорт.</div></div>
</div>
<div class="tg-warning"><div class="tg-box-icon"><i data-lucide="alert-triangle"></i></div><div class="tg-box-body"><div class="tg-box-label">Внимание</div>Обязательно UTF-8, иначе кириллица отобразится некорректно. При ошибке используйте Excel «Сохранить как → CSV UTF-8».</div></div>
</div>
<div class="tg-chapter-nav">
<div class="tg-ch-nav-btn prev" onclick="scrollToChapter('ch-2')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-left"></i></div>
<div><div class="tg-ch-nav-label">Предыдущая глава</div><div class="tg-ch-nav-title">Управление классами</div></div>
</div>
<div class="tg-ch-nav-btn next" onclick="scrollToChapter('ch-4')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-right"></i></div>
<div><div class="tg-ch-nav-label">Следующая глава</div><div class="tg-ch-nav-title">Задания и тесты</div></div>
</div>
</div>
</div>
<!-- ═══ CHAPTER 4 ═══ -->
<div class="tg-chapter" id="ch-4">
<div class="tg-chapter-header">
<div class="tg-chapter-icon"><i data-lucide="clipboard-check"></i></div>
<div class="tg-chapter-meta">
<div class="tg-chapter-num">Глава 4</div>
<div class="tg-chapter-title">Задания и тесты</div>
</div>
<a href="/classes" class="tg-chapter-try" target="_blank"><i data-lucide="external-link"></i> Классы</a>
</div>
<div class="tg-section" id="s-4-1">
<div class="tg-section-title">4.1 Создание задания</div>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num">1</div><div class="tg-step-body">Перейдите в <b>«Классы»</b> → выберите класс → вкладка <b>«Задания»</b>.</div></div>
<div class="tg-step"><div class="tg-step-num">2</div><div class="tg-step-body">Нажмите <b>«Создать задание»</b>, введите название.</div></div>
<div class="tg-step"><div class="tg-step-num">3</div><div class="tg-step-body">Добавьте вопросы из банка — используйте поиск и фильтры по предмету/теме.</div></div>
<div class="tg-step"><div class="tg-step-num">4</div><div class="tg-step-body">Настройте параметры (дедлайн, время, попытки) → нажмите <b>«Опубликовать»</b>.</div></div>
</div>
</div>
<div class="tg-section" id="s-4-2">
<div class="tg-section-title">4.2 Параметры задания</div>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Дедлайн</b> — дата и время, после которых задание нельзя начать. Оставьте пустым для бессрочного задания.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Время на прохождение</b> — лимит в минутах. Таймер начинается при открытии теста учеником.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Количество попыток</b> — сколько раз ученик может пройти тест. По умолчанию — 1.</div></div>
</div>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="lightbulb"></i></div><div class="tg-box-body"><div class="tg-box-label">Рекомендация</div>Для домашних работ — 2–3 попытки без ограничения времени. Для контрольных — 1 попытка с таймером.</div></div>
</div>
<div class="tg-section" id="s-4-3">
<div class="tg-section-title">4.3 Результаты и статистика</div>
<p>Откройте задание из вкладки «Задания» → таблица: ученик, балл (%), дата сдачи, номер попытки.</p>
<p>Нажмите на ученика для детализации — ответы по каждому вопросу, время выполнения.</p>
<div class="tg-note"><div class="tg-box-icon"><i data-lucide="bar-chart-2"></i></div><div class="tg-box-body"><div class="tg-box-label">Статистика по вопросам</div>Процент правильных ответов по каждому вопросу. Вопросы с низким процентом подсвечены красным — они требуют дополнительного объяснения на уроке.</div></div>
</div>
<div class="tg-section" id="s-4-4">
<div class="tg-section-title">4.4 Кому: класс, ученик, личный список</div>
<p>При создании задания в выпадашке <b>«Кому»</b> доступны четыре режима:</p>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num">1</div><div class="tg-step-body"><b>Всему классу</b> — каждый ученик в составе класса получает задание, прогресс — общий «X / N сдано».</div></div>
<div class="tg-step"><div class="tg-step-num">2</div><div class="tg-step-body"><b>Нескольким классам…</b> — открывает список ваших классов с чекбоксами. Удобно для параллелей одного потока.</div></div>
<div class="tg-step"><div class="tg-step-num">3</div><div class="tg-step-body"><b>Имя ученика (лично)</b> — пункты с пометкой «(лично)» в конце выпадашки. Список собран из участников <em>текущего класса</em>.</div></div>
<div class="tg-step"><div class="tg-step-num">4</div><div class="tg-step-body"><b>Ученику из «Мои ученики»</b> — для тех, кого нет в ваших классах (репетиторство, индивидуальные занятия). Сначала добавьте их в Главе 12, затем используйте раздел <b>«Учебники»</b> или назначайте напрямую.</div></div>
</div>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="lightbulb"></i></div><div class="tg-box-body"><div class="tg-box-label">Личное задание</div>В дашборде ученика такое задание помечается «Личное задание» (вместо имени класса). Ученик получает обычное уведомление-колокольчик.</div></div>
</div>
<div class="tg-chapter-nav">
<div class="tg-ch-nav-btn prev" onclick="scrollToChapter('ch-3')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-left"></i></div>
<div><div class="tg-ch-nav-label">Предыдущая глава</div><div class="tg-ch-nav-title">Банк вопросов</div></div>
</div>
<div class="tg-ch-nav-btn next" onclick="scrollToChapter('ch-5')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-right"></i></div>
<div><div class="tg-ch-nav-label">Следующая глава</div><div class="tg-ch-nav-title">Онлайн-урок</div></div>
</div>
</div>
</div>
<!-- ═══ CHAPTER 5 ═══ -->
<div class="tg-chapter" id="ch-5">
<div class="tg-chapter-header">
<div class="tg-chapter-icon"><i data-lucide="presentation"></i></div>
<div class="tg-chapter-meta">
<div class="tg-chapter-num">Глава 5</div>
<div class="tg-chapter-title">Онлайн-урок</div>
</div>
<a href="/classroom" class="tg-chapter-try" target="_blank"><i data-lucide="external-link"></i> Онлайн-урок</a>
</div>
<div class="tg-section" id="s-5-1">
<div class="tg-section-title">5.1 Запуск и завершение урока</div>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num">1</div><div class="tg-step-body">Перейдите в <b>«Онлайн-урок»</b> → нажмите <b>«Начать урок»</b>.</div></div>
<div class="tg-step"><div class="tg-step-num">2</div><div class="tg-step-body">Выберите класс. Урок запущен — ученики из класса получат уведомление и смогут присоединиться.</div></div>
<div class="tg-step"><div class="tg-step-num">3</div><div class="tg-step-body">Для завершения — красная кнопка <b>«Завершить урок»</b> в шапке. Урок сохранится в архиве.</div></div>
</div>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="archive"></i></div><div class="tg-box-body"><div class="tg-box-label">Архив уроков</div>Все прошедшие уроки с доской, чатом и посещаемостью доступны в разделе «Архив уроков».</div></div>
</div>
<div class="tg-section" id="s-5-2">
<div class="tg-section-title">5.2 Инструменты доски</div>
<div class="tg-tools-grid">
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="pencil"></i></div><div><div class="tg-tool-name">Карандаш</div><div class="tg-tool-desc">Свободное рисование</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="highlighter"></i></div><div><div class="tg-tool-name">Маркер</div><div class="tg-tool-desc">Полупрозрачное выделение</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="zap"></i></div><div><div class="tg-tool-name">Лазер</div><div class="tg-tool-desc">Указка, не сохраняется</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="eraser"></i></div><div><div class="tg-tool-name">Ластик</div><div class="tg-tool-desc">Стирает штрихи</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="shapes"></i></div><div><div class="tg-tool-name">Фигуры (11)</div><div class="tg-tool-desc">Прямоугольник, круг, стрелка и др.</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="git-merge"></i></div><div><div class="tg-tool-name">Коннектор</div><div class="tg-tool-desc">Линия между объектами</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="sticky-note"></i></div><div><div class="tg-tool-name">Стикер</div><div class="tg-tool-desc">Цветная заметка</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="type"></i></div><div><div class="tg-tool-name">Текст</div><div class="tg-tool-desc">Текстовый блок</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="image"></i></div><div><div class="tg-tool-name">Изображение</div><div class="tg-tool-desc">Загрузка картинки</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="sigma"></i></div><div><div class="tg-tool-name">Формула LaTeX</div><div class="tg-tool-desc">Математические формулы</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="table"></i></div><div><div class="tg-tool-name">Таблица</div><div class="tg-tool-desc">Интерактивная таблица</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="axis-3d"></i></div><div><div class="tg-tool-name">Координатная ось</div><div class="tg-tool-desc">Система с графиками</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="minus"></i></div><div><div class="tg-tool-name">Числовая прямая</div><div class="tg-tool-desc">Прямая с делениями</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="circle"></i></div><div><div class="tg-tool-name">Циркуль</div><div class="tg-tool-desc">Дуги и окружности</div></div></div>
</div>
<div class="tg-shortcuts">
<span class="tg-kbd">Ctrl+Z</span><span class="tg-kbd-desc">Отменить</span>
<span class="tg-kbd">Ctrl+Y</span><span class="tg-kbd-desc">Повторить</span>
<span class="tg-kbd">Ctrl+C / Ctrl+V</span><span class="tg-kbd-desc">Копировать / Вставить объект</span>
<span class="tg-kbd">Del</span><span class="tg-kbd-desc">Удалить выделенный объект</span>
<span class="tg-kbd">Ctrl+A</span><span class="tg-kbd-desc">Выделить всё на странице</span>
</div>
</div>
<div class="tg-section" id="s-5-3">
<div class="tg-section-title">5.3 Страницы, шаблоны и экспорт</div>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num">1</div><div class="tg-step-body">Нажмите <b>«+»</b> в панели миниатюр слева → выберите шаблон: <b>Пустая, Клетка, Линейка, Точки, Координатная плоскость</b>.</div></div>
<div class="tg-step"><div class="tg-step-num">2</div><div class="tg-step-body">Переключайтесь между страницами кликом по миниатюре. Ученики видят текущую страницу учителя в реальном времени.</div></div>
<div class="tg-step"><div class="tg-step-num">3</div><div class="tg-step-body"><b>Экспорт в PNG</b> — кнопка с иконкой загрузки в шапке. Текущая страница сохраняется как изображение.</div></div>
</div>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="layout-template"></i></div><div class="tg-box-body"><div class="tg-box-label">Подготовка заранее</div>Создайте несколько страниц с нужными шаблонами до начала урока — это сэкономит время во время объяснения.</div></div>
</div>
<div class="tg-section" id="s-5-4">
<div class="tg-section-title">5.4 Zoom, Pan и темы доски</div>
<div class="tg-shortcuts">
<span class="tg-kbd">Колесо мыши</span><span class="tg-kbd-desc">Zoom in / out к курсору</span>
<span class="tg-kbd">Ctrl+0</span><span class="tg-kbd-desc">Сбросить масштаб</span>
<span class="tg-kbd">Space + drag</span><span class="tg-kbd-desc">Прокрутка (pan) доски</span>
</div>
<p>При zoom > 1 в правом нижнем углу появляется <b>минимап</b> — кликните или перетащите для навигации по доске.</p>
<p><b>Темы доски</b> (переключение через меню настроек): <b>Chalkboard</b> (зелёная меловая), <b>Blackboard</b> (чёрная), <b>Corkboard</b> (пробковая), <b>Whiteboard</b> (белая маркерная).</p>
</div>
<div class="tg-section" id="s-5-5">
<div class="tg-section-title">5.5 Чат, видеосвязь и управление учениками</div>
<p><b>Чат</b> — правая панель, сообщения в реальном времени. Ученики видят сообщения учителя и других учеников.</p>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Видеосвязь (WebRTC)</b> — нажмите кнопку камеры/микрофона в шапке. Браузер запросит разрешение при первом включении.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Поднятая рука</b> — уведомление в шапке при поднятии руки учеником. Нажмите для ответа.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Разрешить рисование</b> — в списке участников переключите тогл рядом с именем ученика.</div></div>
</div>
<div class="tg-warning"><div class="tg-box-icon"><i data-lucide="alert-triangle"></i></div><div class="tg-box-body"><div class="tg-box-label">Видеосвязь</div>Требует разрешения браузера на камеру и микрофон. Для стабильной связи за NAT рекомендуется использование TURN-сервера.</div></div>
</div>
<div class="tg-section" id="s-5-6">
<div class="tg-section-title">5.6 Гостевая ссылка и Live-квиз</div>
<p><b>Гостевая ссылка</b> — нажмите «Гостевая ссылка» в шапке урока. Любой человек по ссылке увидит доску в режиме просмотра без регистрации. Удобно для открытых вебинаров.</p>
<div class="tg-divider"></div>
<p><b>Live-квиз во время урока:</b></p>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num">1</div><div class="tg-step-body">Нажмите кнопку <b>«Live-квиз»</b> в шапке урока.</div></div>
<div class="tg-step"><div class="tg-step-num">2</div><div class="tg-step-body">Выберите вопросы из банка, настройте время на вопрос.</div></div>
<div class="tg-step"><div class="tg-step-num">3</div><div class="tg-step-body">Запустите — ученики увидят вопросы на своих экранах. Результаты отображаются в реальном времени.</div></div>
</div>
</div>
<div class="tg-chapter-nav">
<div class="tg-ch-nav-btn prev" onclick="scrollToChapter('ch-4')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-left"></i></div>
<div><div class="tg-ch-nav-label">Предыдущая глава</div><div class="tg-ch-nav-title">Задания и тесты</div></div>
</div>
<div class="tg-ch-nav-btn next" onclick="scrollToChapter('ch-6')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-right"></i></div>
<div><div class="tg-ch-nav-label">Следующая глава</div><div class="tg-ch-nav-title">Библиотека материалов</div></div>
</div>
</div>
</div>
<!-- ═══ CHAPTER 6 ═══ -->
<div class="tg-chapter" id="ch-6">
<div class="tg-chapter-header">
<div class="tg-chapter-icon"><i data-lucide="book-open"></i></div>
<div class="tg-chapter-meta">
<div class="tg-chapter-num">Глава 6</div>
<div class="tg-chapter-title">Библиотека материалов</div>
</div>
<a href="/library" class="tg-chapter-try" target="_blank"><i data-lucide="external-link"></i> Библиотека</a>
</div>
<div class="tg-section" id="s-6-1">
<div class="tg-section-title">6.1 Загрузка файлов</div>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num">1</div><div class="tg-step-body">Нажмите <b>«Загрузить»</b> в шапке страницы.</div></div>
<div class="tg-step"><div class="tg-step-num">2</div><div class="tg-step-body">Выберите файл(ы). Поддерживаются: PDF, DOCX, PPTX, изображения, видео.</div></div>
<div class="tg-step"><div class="tg-step-num">3</div><div class="tg-step-body">Опционально выберите класс(ы) для предоставления доступа прямо при загрузке.</div></div>
</div>
</div>
<div class="tg-section" id="s-6-2">
<div class="tg-section-title">6.2 Папки и управление доступом</div>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num">1</div><div class="tg-step-body"><b>Новая папка</b> — нажмите «Новая папка», введите название. Перетаскивайте файлы в папки.</div></div>
<div class="tg-step"><div class="tg-step-num">2</div><div class="tg-step-body"><b>Доступ по классу</b> — нажмите на файл/папку → «Доступ» → выберите классы.</div></div>
</div>
<div class="tg-note"><div class="tg-box-icon"><i data-lucide="eye-off"></i></div><div class="tg-box-body"><div class="tg-box-label">Приватность</div>Файлы без назначенного класса видны только вам. Ученики видят только те материалы, к которым им выдан доступ.</div></div>
</div>
<div class="tg-chapter-nav">
<div class="tg-ch-nav-btn prev" onclick="scrollToChapter('ch-5')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-left"></i></div>
<div><div class="tg-ch-nav-label">Предыдущая глава</div><div class="tg-ch-nav-title">Онлайн-урок</div></div>
</div>
<div class="tg-ch-nav-btn next" onclick="scrollToChapter('ch-7')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-right"></i></div>
<div><div class="tg-ch-nav-label">Следующая глава</div><div class="tg-ch-nav-title">Редактор уроков</div></div>
</div>
</div>
</div>
<!-- ═══ CHAPTER 7 ═══ -->
<div class="tg-chapter" id="ch-7">
<div class="tg-chapter-header">
<div class="tg-chapter-icon"><i data-lucide="file-edit"></i></div>
<div class="tg-chapter-meta">
<div class="tg-chapter-num">Глава 7</div>
<div class="tg-chapter-title">Редактор уроков</div>
</div>
<a href="/my-lessons" class="tg-chapter-try" target="_blank"><i data-lucide="external-link"></i> Мои уроки</a>
</div>
<div class="tg-section" id="s-7-1">
<div class="tg-section-title">7.1 Создание урока</div>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num">1</div><div class="tg-step-body">Перейдите в <b>«Мои уроки»</b> → нажмите <b>«Создать урок»</b>.</div></div>
<div class="tg-step"><div class="tg-step-num">2</div><div class="tg-step-body">Введите название, выберите предмет и тему.</div></div>
<div class="tg-step"><div class="tg-step-num">3</div><div class="tg-step-body">Добавляйте блоки контента кнопкой <b>«+»</b> между блоками.</div></div>
<div class="tg-step"><div class="tg-step-num">4</div><div class="tg-step-body">Нажмите <b>«Опубликовать»</b> → выберите класс(ы). Урок появится в «Теории» у учеников.</div></div>
</div>
</div>
<div class="tg-section" id="s-7-2">
<div class="tg-section-title">7.2 Типы блоков</div>
<div class="tg-accordion">
<div class="tg-acc-item open"><div class="tg-acc-head" onclick="toggleAcc(this)"><span class="tg-acc-badge badge-single">Текст</span><span class="tg-acc-name">Параграф</span><span class="tg-acc-chevron"><i data-lucide="chevron-down"></i></span></div><div class="tg-acc-body"><p>Форматированный текст с поддержкой жирного, курсива, подчёркивания. Оптимально для основного содержания урока.</p></div></div>
<div class="tg-acc-item"><div class="tg-acc-head" onclick="toggleAcc(this)"><span class="tg-acc-badge badge-multiple">H2/H3</span><span class="tg-acc-name">Заголовок</span><span class="tg-acc-chevron"><i data-lucide="chevron-down"></i></span></div><div class="tg-acc-body"><p>Структурные заголовки второго и третьего уровня. Используйте для разделения темы на подтемы.</p></div></div>
<div class="tg-acc-item"><div class="tg-acc-head" onclick="toggleAcc(this)"><span class="tg-acc-badge badge-text">Изображение</span><span class="tg-acc-name">Картинка</span><span class="tg-acc-chevron"><i data-lucide="chevron-down"></i></span></div><div class="tg-acc-body"><p>Загрузка файла или вставка URL. Поддерживаются JPG, PNG, GIF, SVG. Подпись необязательна.</p></div></div>
<div class="tg-acc-item"><div class="tg-acc-head" onclick="toggleAcc(this)"><span class="tg-acc-badge badge-number">Видео</span><span class="tg-acc-name">Видео</span><span class="tg-acc-chevron"><i data-lucide="chevron-down"></i></span></div><div class="tg-acc-body"><p>Вставка YouTube/Vimeo по URL или загрузка видеофайла. Поддерживает embed с плеером.</p></div></div>
<div class="tg-acc-item"><div class="tg-acc-head" onclick="toggleAcc(this)"><span class="tg-acc-badge badge-order">LaTeX</span><span class="tg-acc-name">Формула</span><span class="tg-acc-chevron"><i data-lucide="chevron-down"></i></span></div><div class="tg-acc-body"><p>Блок формулы с live-превью через KaTeX. Введите LaTeX-код — формула отобразится в реальном времени.</p></div></div>
<div class="tg-acc-item"><div class="tg-acc-head" onclick="toggleAcc(this)"><span class="tg-acc-badge badge-match">Тест</span><span class="tg-acc-name">Встроенный тест</span><span class="tg-acc-chevron"><i data-lucide="chevron-down"></i></span></div><div class="tg-acc-body"><p>Встроенный мини-тест из банка вопросов прямо в теле урока. Ученик проходит его не выходя из урока.</p></div></div>
</div>
</div>
<div class="tg-chapter-nav">
<div class="tg-ch-nav-btn prev" onclick="scrollToChapter('ch-6')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-left"></i></div>
<div><div class="tg-ch-nav-label">Предыдущая глава</div><div class="tg-ch-nav-title">Библиотека материалов</div></div>
</div>
<div class="tg-ch-nav-btn next" onclick="scrollToChapter('ch-8')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-right"></i></div>
<div><div class="tg-ch-nav-label">Следующая глава</div><div class="tg-ch-nav-title">Аналитика</div></div>
</div>
</div>
</div>
<!-- ═══ CHAPTER 8 ═══ -->
<div class="tg-chapter" id="ch-8">
<div class="tg-chapter-header">
<div class="tg-chapter-icon"><i data-lucide="bar-chart-2"></i></div>
<div class="tg-chapter-meta">
<div class="tg-chapter-num">Глава 8</div>
<div class="tg-chapter-title">Аналитика</div>
</div>
<a href="/analytics" class="tg-chapter-try" target="_blank"><i data-lucide="external-link"></i> Аналитика</a>
</div>
<div class="tg-section" id="s-8-1">
<div class="tg-section-title">8.1 Дашборд аналитики</div>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num">1</div><div class="tg-step-body">Перейдите в <b>«Аналитика»</b> → выберите класс из выпадающего списка в шапке.</div></div>
<div class="tg-step"><div class="tg-step-num">2</div><div class="tg-step-body">Сводные карточки: средний балл, количество учеников, выполненных заданий, активность за неделю.</div></div>
<div class="tg-step"><div class="tg-step-num">3</div><div class="tg-step-body">Графики успеваемости по времени и распределение оценок по диапазонам.</div></div>
</div>
</div>
<div class="tg-section" id="s-8-2">
<div class="tg-section-title">8.2 Профиль ученика и слабые темы</div>
<p>Нажмите на имя ученика в таблице — откроется детализация: результаты по каждому заданию, динамика прогресса, слабые темы.</p>
<div class="tg-note"><div class="tg-box-icon"><i data-lucide="trending-down"></i></div><div class="tg-box-body"><div class="tg-box-label">Слабые темы</div>Система автоматически выделяет темы с наименьшим процентом правильных ответов. Создайте дополнительное задание по ним или уделите время на объяснение.</div></div>
</div>
<div class="tg-chapter-nav">
<div class="tg-ch-nav-btn prev" onclick="scrollToChapter('ch-7')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-left"></i></div>
<div><div class="tg-ch-nav-label">Предыдущая глава</div><div class="tg-ch-nav-title">Редактор уроков</div></div>
</div>
<div class="tg-ch-nav-btn next" onclick="scrollToChapter('ch-9')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-right"></i></div>
<div><div class="tg-ch-nav-label">Следующая глава</div><div class="tg-ch-nav-title">Журнал оценок</div></div>
</div>
</div>
</div>
<!-- ═══ CHAPTER 9 ═══ -->
<div class="tg-chapter" id="ch-9">
<div class="tg-chapter-header">
<div class="tg-chapter-icon"><i data-lucide="table"></i></div>
<div class="tg-chapter-meta">
<div class="tg-chapter-num">Глава 9</div>
<div class="tg-chapter-title">Журнал оценок</div>
</div>
<a href="/gradebook" class="tg-chapter-try" target="_blank"><i data-lucide="external-link"></i> Журнал</a>
</div>
<div class="tg-section" id="s-9-1">
<div class="tg-section-title">9.1 Чтение таблицы и экспорт</div>
<p>Перейдите в <b>«Журнал»</b> → выберите класс. Строки — ученики, столбцы — задания.</p>
<p><b>Цветовая кодировка ячеек:</b></p>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num" style="background:rgba(6,214,100,0.15);border-color:rgba(6,214,100,0.3);color:#059669"></div><div class="tg-step-body"><b>Зелёный</b> — выше 70%. Отличный результат.</div></div>
<div class="tg-step"><div class="tg-step-num" style="background:rgba(255,179,71,0.15);border-color:rgba(255,179,71,0.3);color:#d97706">~</div><div class="tg-step-body"><b>Жёлтый</b> — 40–70%. Удовлетворительно, требует внимания.</div></div>
<div class="tg-step"><div class="tg-step-num" style="background:rgba(241,91,181,0.15);border-color:rgba(241,91,181,0.3);color:#db2777">!</div><div class="tg-step-body"><b>Розовый</b> — ниже 40%. Тема не усвоена.</div></div>
</div>
<div class="tg-steps" style="margin-top:14px">
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Экспорт CSV</b> — нажмите кнопку в шапке журнала. Откройте в Excel или Google Sheets для дальнейшей обработки.</div></div>
</div>
</div>
<div class="tg-chapter-nav">
<div class="tg-ch-nav-btn prev" onclick="scrollToChapter('ch-8')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-left"></i></div>
<div><div class="tg-ch-nav-label">Предыдущая глава</div><div class="tg-ch-nav-title">Аналитика</div></div>
</div>
<div class="tg-ch-nav-btn next" onclick="scrollToChapter('ch-10')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-right"></i></div>
<div><div class="tg-ch-nav-label">Следующая глава</div><div class="tg-ch-nav-title">Live-квиз</div></div>
</div>
</div>
</div>
<!-- ═══ CHAPTER 10 ═══ -->
<div class="tg-chapter" id="ch-10">
<div class="tg-chapter-header">
<div class="tg-chapter-icon"><i data-lucide="radio"></i></div>
<div class="tg-chapter-meta">
<div class="tg-chapter-num">Глава 10</div>
<div class="tg-chapter-title">Live-квиз</div>
</div>
<a href="/live-quiz" class="tg-chapter-try" target="_blank"><i data-lucide="external-link"></i> Live-квиз</a>
</div>
<div class="tg-section" id="s-10-1">
<div class="tg-section-title">10.1 Создание и запуск сессии</div>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num">1</div><div class="tg-step-body">Перейдите в <b>«Live-квиз»</b> → нажмите <b>«Создать сессию»</b>.</div></div>
<div class="tg-step"><div class="tg-step-num">2</div><div class="tg-step-body">Выберите вопросы из банка, настройте время на вопрос (по умолчанию 30 сек.).</div></div>
<div class="tg-step"><div class="tg-step-num">3</div><div class="tg-step-body">Нажмите <b>«Запустить»</b>. Ученики, находящиеся в классе, автоматически подключатся.</div></div>
</div>
</div>
<div class="tg-section" id="s-10-2">
<div class="tg-section-title">10.2 Управление в реальном времени</div>
<p>На экране — текущий вопрос и таймер. Счётчик ответивших учеников обновляется в реальном времени.</p>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body">Переходите к следующему вопросу <b>вручную</b> (кнопка «Далее») или автоматически по истечении времени.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body">После каждого вопроса — <b>мгновенная статистика</b>: сколько % ответили правильно, распределение ответов.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body">После завершения — <b>таблица лидеров</b> и полная статистика по всем вопросам.</div></div>
</div>
<div class="tg-success"><div class="tg-box-icon"><i data-lucide="check-circle"></i></div><div class="tg-box-body"><div class="tg-box-label">Поздравляем!</div>Вы прошли всё руководство. Теперь вы знаете все возможности LearnSpace. Удачных уроков!</div></div>
</div>
<div class="tg-chapter-nav">
<div class="tg-ch-nav-btn prev" onclick="scrollToChapter('ch-9')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-left"></i></div>
<div><div class="tg-ch-nav-label">Предыдущая глава</div><div class="tg-ch-nav-title">Журнал оценок</div></div>
</div>
<div class="tg-ch-nav-btn next" onclick="scrollToChapter('ch-11')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-right"></i></div>
<div><div class="tg-ch-nav-label">Следующая глава</div><div class="tg-ch-nav-title">Учебники</div></div>
</div>
</div>
</div>
<!-- ═══ CHAPTER 11 — TEXTBOOKS ═══ -->
<div class="tg-chapter" id="ch-11">
<div class="tg-chapter-header">
<div class="tg-chapter-icon"><i data-lucide="book-open-text"></i></div>
<div class="tg-chapter-meta">
<div class="tg-chapter-num">Глава 11</div>
<div class="tg-chapter-title">Учебники</div>
</div>
<a href="/textbooks" class="tg-chapter-try" target="_blank"><i data-lucide="external-link"></i> Учебники</a>
</div>
<div class="tg-section" id="s-11-1">
<div class="tg-section-title">11.1 Каталог учебников</div>
<p>Раздел <b>«Учебники»</b> в боковом меню — полные интерактивные курсы по предметам со встроенными формулами (KaTeX), диаграммами и анимациями. Каталог постоянно расширяется; сейчас доступны курсы по четырём предметам:</p>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num">Σ</div><div class="tg-step-body"><b>Математика</b> — Математика 5–6, Алгебра 7–11, Геометрия 7–11.</div></div>
<div class="tg-step"><div class="tg-step-num">Φ</div><div class="tg-step-body"><b>Физика</b> — Физика 7, 8, 9, 10, 11 (с лабораторными практикумами).</div></div>
<div class="tg-step"><div class="tg-step-num">Х</div><div class="tg-step-body"><b>Химия</b> — Химия 7, 8, 9.</div></div>
</div>
<p>Большие курсы разбиты на карточки по главам (например, «Алгебра 7 · Степень» или «Геометрия 8 · Площади»). На карточке учебника видна шкала прогресса «X из Y параграфов прочитано» и кнопка <b>«Продолжить»</b> — открывает учебник на последнем посещённом параграфе.</p>
<div class="tg-note"><div class="tg-box-icon"><i data-lucide="info"></i></div><div class="tg-box-body"><div class="tg-box-label">Что видят ученики</div>По умолчанию учебники ученикам <b>не</b> показываются, пока администратор не откроет доступ (Глава 17). Учителя и админы видят весь каталог всегда.</div></div>
</div>
<div class="tg-section" id="s-11-2">
<div class="tg-section-title">11.2 Чтение и отметки</div>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num">1</div><div class="tg-step-body">Откройте учебник кнопкой «Открыть» на карточке — он раскроется в режиме полного экрана.</div></div>
<div class="tg-step"><div class="tg-step-num">2</div><div class="tg-step-body">Навигация по параграфам — pills в верхней части (§1, §2, …). Активный параграф подсвечивается.</div></div>
<div class="tg-step"><div class="tg-step-num">3</div><div class="tg-step-body">Рядом с заголовком каждого § есть кнопка <b>«Прочитано»</b> — отмечайте по мере изучения. Параграфы получают зелёный индикатор на pill.</div></div>
<div class="tg-step"><div class="tg-step-num">4</div><div class="tg-step-body">Выделите любой текст (8–400 символов) → появится плавающая кнопка <b>«+ Закладка»</b>. Сохраните с заметкой — закладки списком в overlay слева вверху.</div></div>
<div class="tg-step"><div class="tg-step-num">5</div><div class="tg-step-body">Кнопка <b>«← Учебники»</b> в левом верхнем углу — возврат к каталогу.</div></div>
</div>
<div class="tg-note"><div class="tg-box-icon"><i data-lucide="info"></i></div><div class="tg-box-body"><div class="tg-box-label">Сохранение</div>Прогресс и закладки сохраняются как в браузере, так и на сервере (если вы залогинены). Открывайте учебник на телефоне — увидите всё то же, что отметили на компьютере.</div></div>
</div>
<div class="tg-section" id="s-11-3">
<div class="tg-section-title">11.3 Назначить чтение как ДЗ</div>
<p>Учитель и админ могут назначить чтение глав ученику или классу.</p>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num">1</div><div class="tg-step-body">На карточке учебника нажмите фиолетовую кнопку <b>«+»</b> (Назначить).</div></div>
<div class="tg-step"><div class="tg-step-num">2</div><div class="tg-step-body">В модалке выберите вкладку <b>«Классу»</b> или <b>«Ученику»</b>.<br><b>Классу</b> — чекбоксы для нескольких классов сразу.<br><b>Ученику</b> — поиск по имени/email (включая «Моих учеников» из Главы 13).</div></div>
<div class="tg-step"><div class="tg-step-num">3</div><div class="tg-step-body">Укажите диапазон параграфов: <code>1-5</code> или список <code>1,3,7</code>. Пусто = весь учебник.</div></div>
<div class="tg-step"><div class="tg-step-num">4</div><div class="tg-step-body">Опционально — срок сдачи. Нажмите <b>«Назначить»</b>.</div></div>
</div>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="check-circle"></i></div><div class="tg-box-body"><div class="tg-box-label">Авто-проверка</div>Как только ученик отметит все требуемые § как «Прочитано» — задание автоматически становится «Сдано», вам приходит уведомление-колокольчик.</div></div>
</div>
<div class="tg-section" id="s-11-4">
<div class="tg-section-title">11.4 Прогресс класса по учебнику</div>
<p>В правом верхнем углу каталога — кнопка <b>«Прогресс класса»</b> (только для учителей). Откроет страницу с таблицей: каждый ученик класса, шкала прогресса, последний прочитанный параграф и дата последнего чтения.</p>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body">Сортировка автоматическая: сначала те, кто прочитал больше.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body">Селекторы вверху позволяют переключать учебник × класс — удобно сравнивать.</div></div>
</div>
</div>
<div class="tg-chapter-nav">
<div class="tg-ch-nav-btn prev" onclick="scrollToChapter('ch-10')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-left"></i></div>
<div><div class="tg-ch-nav-label">Предыдущая глава</div><div class="tg-ch-nav-title">Live-квиз</div></div>
</div>
<div class="tg-ch-nav-btn next" onclick="scrollToChapter('ch-12')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-right"></i></div>
<div><div class="tg-ch-nav-label">Следующая глава</div><div class="tg-ch-nav-title">Экзамен 9 класс</div></div>
</div>
</div>
</div>
<!-- ═══ CHAPTER 12 — EXAM 9 ═══ -->
<div class="tg-chapter" id="ch-12">
<div class="tg-chapter-header">
<div class="tg-chapter-icon"><i data-lucide="clipboard-check"></i></div>
<div class="tg-chapter-meta">
<div class="tg-chapter-num">Глава 12</div>
<div class="tg-chapter-title">Экзамен 9 класс — Математика</div>
</div>
<a href="/exam-prep/math9" class="tg-chapter-try" target="_blank"><i data-lucide="external-link"></i> Подготовка 9</a>
</div>
<div class="tg-section" id="s-12-1">
<div class="tg-section-title">12.1 Что внутри</div>
<p>Раздел <b>«Экзамен 9 класс»</b> — банк из <b>80 экзаменационных вариантов</b> по математике за 9 класс. Каждый вариант — 10 задач: 3 с выбором ответа, 7 открытых. У каждой задачи есть полное пошаговое решение с формулами (KaTeX) и иллюстрациями.</p>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body">Кнопка <b>«Выбрать вариант»</b> в шапке открывает сетку 80 номеров.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body">Прогресс отмечается прямо на сетке: зелёный — все решения посмотрены, жёлтый — часть.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body">Возвращаясь на страницу, автоматически открывается последний просмотренный вариант.</div></div>
</div>
</div>
<div class="tg-section" id="s-12-2">
<div class="tg-section-title">12.2 Назначить вариант как ДЗ</div>
<p>Каждый <b>нечётный</b> вариант (1, 3, 5, …, 79) импортирован в банк вопросов как готовый тест из 10 задач. Их можно назначать как обычные тесты:</p>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num">1</div><div class="tg-step-body">Откройте нужный вариант на странице <b>«Экзамен 9»</b>.</div></div>
<div class="tg-step"><div class="tg-step-num">2</div><div class="tg-step-body">Над заголовком — кнопка <b>«Назначить как ДЗ»</b> (видна учителям/админам).</div></div>
<div class="tg-step"><div class="tg-step-num">3</div><div class="tg-step-body">Выберите классы и срок — задание создаётся как обычный тест, ученики проходят через стандартный test-runner.</div></div>
</div>
<div class="tg-note"><div class="tg-box-icon"><i data-lucide="info"></i></div><div class="tg-box-body"><div class="tg-box-label">Чётные варианты</div>Для чётных (2, 4, … 80) кнопка «Назначить» неактивна — варианты доступны только для самостоятельного просмотра. Это сделано чтобы у вас оставались «свежие» варианты для самостоятельной подготовки учеников.</div></div>
</div>
<div class="tg-section" id="s-12-3">
<div class="tg-section-title">12.3 Режим подготовки (хаб)</div>
<p>Пункт меню <b>«Подготовка к экзамену 9»</b> (<a href="/exam-prep/math9">/exam-prep/math9</a>) — современный хаб подготовки с несколькими режимами:</p>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Темы</b> — тренировка по конкретным темам экзамена.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Варианты</b> — те самые 80 полных вариантов с разбором.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Практика</b> — тренажёр отдельных задач.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Пробник</b> — экзамен на время с итоговым баллом.</div></div>
</div>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="sparkles"></i></div><div class="tg-box-body"><div class="tg-box-label">Квантик на задачах</div>Если администратор включил кнопки помощника (Глава A7), на карточках задач появляются «Подсказка» и «Спросить Квантика» — наводящий шаг или полный разбор. Задачи также связаны с параграфами учебников (deep-link).</div></div>
</div>
<div class="tg-chapter-nav">
<div class="tg-ch-nav-btn prev" onclick="scrollToChapter('ch-11')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-left"></i></div>
<div><div class="tg-ch-nav-label">Предыдущая глава</div><div class="tg-ch-nav-title">Учебники</div></div>
</div>
<div class="tg-ch-nav-btn next" onclick="scrollToChapter('ch-13')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-right"></i></div>
<div><div class="tg-ch-nav-label">Следующая глава</div><div class="tg-ch-nav-title">Мои ученики</div></div>
</div>
</div>
</div>
<!-- ═══ CHAPTER 13 — MY STUDENTS ═══ -->
<div class="tg-chapter" id="ch-13">
<div class="tg-chapter-header">
<div class="tg-chapter-icon"><i data-lucide="user-plus"></i></div>
<div class="tg-chapter-meta">
<div class="tg-chapter-num">Глава 13</div>
<div class="tg-chapter-title">Мои ученики (без класса)</div>
</div>
<a href="/my-students" class="tg-chapter-try" target="_blank"><i data-lucide="external-link"></i> Мои ученики</a>
</div>
<div class="tg-section" id="s-13-1">
<div class="tg-section-title">13.1 Когда это нужно</div>
<p>Раздел <b>«Мои ученики»</b> — личный список учеников, которых вы хотите учить вне школьного класса:</p>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Репетиторство</b> — частные ученики, которым вы даёте задания индивидуально.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Подготовка к ЦТ/экзаменам</b> — несколько учеников из разных школ.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Доп-занятия</b> — для тех, кому нужна индивидуальная программа в дополнение к классу.</div></div>
</div>
<p>Это альтернатива классу из одного человека: меньше бюрократии, никаких приглашений по коду — только email.</p>
</div>
<div class="tg-section" id="s-13-2">
<div class="tg-section-title">13.2 Добавить ученика</div>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num">1</div><div class="tg-step-body">Откройте <b>«Мои ученики»</b> в боковом меню.</div></div>
<div class="tg-step"><div class="tg-step-num">2</div><div class="tg-step-body">В форме <b>«Добавить ученика»</b> введите email — он должен совпадать с email регистрации ученика на платформе.</div></div>
<div class="tg-step"><div class="tg-step-num">3</div><div class="tg-step-body">Опционально — заметка (например, «9Б, физика, СБ 16:00»). Видна только вам.</div></div>
<div class="tg-step"><div class="tg-step-num">4</div><div class="tg-step-body">Нажмите <b>«Добавить»</b>. Ученик получит уведомление «Вас добавил учитель».</div></div>
</div>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="user-check"></i></div><div class="tg-box-body"><div class="tg-box-label">Если ученика нет на платформе</div>Сначала отправьте ему ссылку на регистрацию (/login → создать аккаунт), пусть зарегистрируется с тем email, который вы хотите добавить.</div></div>
</div>
<div class="tg-section" id="s-13-3">
<div class="tg-section-title">13.3 Назначение заданий</div>
<p>После добавления ученик появляется в поисках в модалках назначений:</p>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Чтение учебника</b> — на <a href="/textbooks">/textbooks</a> → кнопка «+» → вкладка «Ученику» → начинайте набирать имя/email — ученик появится в результатах.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Тесты и файлы</b> — в той же модалке создания задания в классе. Учеников из «Моих учеников» можно найти в общем поиске.</div></div>
</div>
<div class="tg-note"><div class="tg-box-icon"><i data-lucide="shield-check"></i></div><div class="tg-box-body"><div class="tg-box-label">Безопасность</div>Учитель может назначать задания только тем ученикам, которые либо в его классе, либо в его списке «Мои ученики». Списки видят только сами учителя — никто другой.</div></div>
</div>
<div class="tg-section" id="s-13-4">
<div class="tg-section-title">13.4 Удаление и заметки</div>
<p>Каждая строка списка — отдельный ученик. Доступные действия:</p>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Иконка корзины</b> — убрать ученика из списка. Уже созданные задания НЕ удаляются — ученик продолжит их видеть.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body">Счётчик «Заданий» показывает, сколько вы лично выдали этому ученику.</div></div>
</div>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="arrow-right-circle"></i></div><div class="tg-box-body"><div class="tg-box-label">Продолжайте изучение</div>Следующие главы: Лаборатория (14), Биохимия (15), Геймификация (16), Доступ к контенту (17).</div></div>
</div>
<div class="tg-chapter-nav">
<div class="tg-ch-nav-btn prev" onclick="scrollToChapter('ch-12')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-left"></i></div>
<div><div class="tg-ch-nav-label">Предыдущая глава</div><div class="tg-ch-nav-title">Экзамен 9 класс</div></div>
</div>
<div class="tg-ch-nav-btn next" onclick="scrollToChapter('ch-14')" style="text-align:right">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-right"></i></div>
<div><div class="tg-ch-nav-label">Следующая глава</div><div class="tg-ch-nav-title">Лаборатория</div></div>
</div>
</div>
</div>
<!-- ═══ CHAPTER 14 — LAB ═══ -->
<div class="tg-chapter" id="ch-14">
<div class="tg-chapter-header">
<div class="tg-chapter-icon"><i data-lucide="flask-conical"></i></div>
<div class="tg-chapter-meta">
<div class="tg-chapter-num">Глава 14</div>
<div class="tg-chapter-title">Виртуальная лаборатория</div>
</div>
<a href="/lab" class="tg-chapter-try" target="_blank"><i data-lucide="external-link"></i> Лаборатория</a>
</div>
<div class="tg-section" id="s-14-1">
<div class="tg-section-title">14.1 Что это и зачем</div>
<p>Виртуальная лаборатория — 40 интерактивных симуляций по физике, химии, математике и биологии. Всё работает прямо в браузере, никаких установок не нужно.</p>
<div class="tg-tools-grid">
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="atom"></i></div><div><div class="tg-tool-name">Физика (14)</div><div class="tg-tool-desc">Маятник, волны, оптика, электричество, газы…</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="flask-conical"></i></div><div><div class="tg-tool-name">Химия (14)</div><div class="tg-tool-desc">Орбитали, кристаллы, реакции, периодическая таблица…</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="calculator"></i></div><div><div class="tg-tool-name">Математика (9)</div><div class="tg-tool-desc">Графики, планиметрия, стереометрия 3D, вероятность…</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="leaf"></i></div><div><div class="tg-tool-name">Биология (2)</div><div class="tg-tool-desc">Деление клетки, фотосинтез</div></div></div>
</div>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="link"></i></div><div class="tg-box-body"><div class="tg-box-label">Deep-link на конкретную симуляцию</div>Откройте нужную симуляцию и скопируйте адрес — в нём уже будет параметр <b>?sim=название</b>. Вставьте ссылку в задание или чат урока, и ученик попадёт прямо в неё.</div></div>
</div>
<div class="tg-section" id="s-14-2">
<div class="tg-section-title">14.2 Связь с учебниками</div>
<p>В учебниках рядом с нужными параграфами появляется кнопка <b>«В лабораторию»</b> с числом связанных симуляций. Нажмите — откроется лаборатория с уже выбранной симуляцией по теме.</p>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num">1</div><div class="tg-step-body">Откройте учебник → нужный параграф.</div></div>
<div class="tg-step"><div class="tg-step-num">2</div><div class="tg-step-body">Нажмите кнопку с иконкой колбы в правом углу параграфа.</div></div>
<div class="tg-step"><div class="tg-step-num">3</div><div class="tg-step-body">Браузер откроет лабораторию и автоматически запустит нужную симуляцию.</div></div>
</div>
</div>
<div class="tg-section" id="s-14-3">
<div class="tg-section-title">14.3 Стереометрия 3D</div>
<p>Симуляция <b>«Стереометрия»</b> — интерактивные объёмные тела: куб, пирамида, призма, конус, цилиндр, сфера, правильные многогранники и усечённые фигуры.</p>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Вращение</b> — зажмите кнопку мыши и тяните. Фигура крутится в 3D.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Производные точки</b> — середины рёбер, центры граней, засечки.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Deep-link на фигуру</b> — например, <code>/lab?sim=stereo:cube</code> откроет сразу куб.</div></div>
</div>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="monitor"></i></div><div class="tg-box-body"><div class="tg-box-label">На онлайн-уроке</div>Откройте симуляцию в соседней вкладке и включите демонстрацию экрана — ученики увидят 3D-вращение в реальном времени. Или используйте режим аннотации прямо поверх симуляции на доске.</div></div>
</div>
<div class="tg-chapter-nav">
<div class="tg-ch-nav-btn prev" onclick="scrollToChapter('ch-13')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-left"></i></div>
<div><div class="tg-ch-nav-label">Предыдущая глава</div><div class="tg-ch-nav-title">Мои ученики</div></div>
</div>
<div class="tg-ch-nav-btn next" onclick="scrollToChapter('ch-15')" style="text-align:right">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-right"></i></div>
<div><div class="tg-ch-nav-label">Следующая глава</div><div class="tg-ch-nav-title">Биохимия</div></div>
</div>
</div>
</div>
<!-- ═══ CHAPTER 15 — BIOCHEM ═══ -->
<div class="tg-chapter" id="ch-15">
<div class="tg-chapter-header">
<div class="tg-chapter-icon"><i data-lucide="atom"></i></div>
<div class="tg-chapter-meta">
<div class="tg-chapter-num">Глава 15</div>
<div class="tg-chapter-title">Биохимия</div>
</div>
<a href="/biochem" class="tg-chapter-try" target="_blank"><i data-lucide="external-link"></i> Биохимия</a>
</div>
<div class="tg-section" id="s-15-1">
<div class="tg-section-title">15.1 Молекулярный редактор</div>
<p>Страница <b>/biochem</b> — интерактивный редактор молекул. Собирайте молекулы из атомов и связей, платформа мгновенно вычисляет свойства.</p>
<div class="tg-tools-grid">
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="circle"></i></div><div><div class="tg-tool-name">Атомы</div><div class="tg-tool-desc">C, H, O, N, S, P, галогены, металлы</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="git-merge"></i></div><div><div class="tg-tool-name">Связи</div><div class="tg-tool-desc">Одинарные, двойные, тройные</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="box"></i></div><div><div class="tg-tool-name">3D VSEPR</div><div class="tg-tool-desc">Настоящая 3D-геометрия по теории ОЭПВО</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="zap"></i></div><div><div class="tg-tool-name">Заряды δ±</div><div class="tg-tool-desc">Тепловая карта, стрелка диполя</div></div></div>
</div>
<p>В панели свойств автоматически отображаются: <b>молярная масса</b>, <b>DBE</b> (степень ненасыщенности), <b>гибридизация</b>, <b>форма молекулы</b>, <b>дипольный момент</b>, <b>полярность</b>, <b>функциональные группы</b>.</p>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="alert-circle"></i></div><div class="tg-box-body"><div class="tg-box-label">Валентность в реальном времени</div>Если превысить валентность атома — появится подсказка: «Углерод (C): занято 5 связей, максимум 4 — убери 1». Сохранение заблокируется до исправления.</div></div>
</div>
<div class="tg-section" id="s-15-2">
<div class="tg-section-title">15.2 Библиотека и свойства</div>
<p><b>/biochem-library</b> — 105+ молекул с карточками и 2D/3D-превью. Можно сравнивать несколько молекул и экспортировать таблицу в CSV.</p>
<p><b>/biochem-properties</b> — сравнение молекул: столбчатый график молярных масс, массовые доли элементов.</p>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="download"></i></div><div class="tg-box-body"><div class="tg-box-label">SMILES и экспорт</div>В редакторе можно ввести SMILES-строку (например, <code>CC(=O)O</code> — уксусная кислота), молекула построится автоматически. Готовую молекулу можно экспортировать как PNG или JSON.</div></div>
</div>
<div class="tg-section" id="s-15-3">
<div class="tg-section-title">15.3 Реакции и метаболические пути</div>
<p><b>/biochem-reactions</b> — 27 реакций с автоматической балансировкой (показывает коэффициенты) и энергодиаграммой (экзо-/эндотермические с ΔH).</p>
<p><b>/biochem-pathways</b> — метаболические пути (гликолиз, цикл Кребса и др.) с пошаговым Learn-режимом. За прохождение начисляется XP.</p>
</div>
<div class="tg-chapter-nav">
<div class="tg-ch-nav-btn prev" onclick="scrollToChapter('ch-14')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-left"></i></div>
<div><div class="tg-ch-nav-label">Предыдущая глава</div><div class="tg-ch-nav-title">Лаборатория</div></div>
</div>
<div class="tg-ch-nav-btn next" onclick="scrollToChapter('ch-16')" style="text-align:right">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-right"></i></div>
<div><div class="tg-ch-nav-label">Следующая глава</div><div class="tg-ch-nav-title">Геймификация</div></div>
</div>
</div>
</div>
<!-- ═══ CHAPTER 16 — GAMIFICATION ═══ -->
<div class="tg-chapter" id="ch-16">
<div class="tg-chapter-header">
<div class="tg-chapter-icon"><i data-lucide="zap"></i></div>
<div class="tg-chapter-meta">
<div class="tg-chapter-num">Глава 16</div>
<div class="tg-chapter-title">Геймификация и питомец</div>
</div>
<a href="/pet" class="tg-chapter-try" target="_blank"><i data-lucide="external-link"></i> Питомец</a>
</div>
<div class="tg-section" id="s-16-1">
<div class="tg-section-title">16.1 XP, уровни и достижения</div>
<p>Каждое действие ученика приносит <b>опыт (XP)</b>: тесты, лаборатория, чтение учебников, ежедневная активность, ответы на уроке.</p>
<div class="tg-tools-grid">
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="trending-up"></i></div><div><div class="tg-tool-name">8 уровней</div><div class="tg-tool-desc">Новичок → Легенда, у каждого своя модель питомца</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="trophy"></i></div><div><div class="tg-tool-name">38+ достижений</div><div class="tg-tool-desc">Стрики, лаборатория, тесты, биохимия, топ-10</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="flame"></i></div><div><div class="tg-tool-name">Стрики</div><div class="tg-tool-desc">Серия дней подряд — бонусный XP</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="target"></i></div><div><div class="tg-tool-name">Ежедневная цель</div><div class="tg-tool-desc">Лёгкая / Средняя / Тяжёлая</div></div></div>
</div>
</div>
<div class="tg-section" id="s-16-2">
<div class="tg-section-title">16.2 Виртуальный питомец</div>
<p>У каждого ученика есть личный питомец — существо, которое растёт вместе с прогрессом. Ухаживайте за ним: кормите, гладьте.</p>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Имя</b> — ученик выбирает сам при первом посещении /pet.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Цвет</b> — 6 вариантов (фиолетовый, голубой, золотой, красный, зелёный, синий).</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Эволюция</b> — с ростом XP появляются уши (ур. 2), антенны (3), крылья (4), корона (5+).</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Настроение</b> — зависит от стрика и частоты визитов: бодр, в духе, скучает, голоден.</div></div>
</div>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="star"></i></div><div class="tg-box-body"><div class="tg-box-label">Радужный ошейник</div>При стрике 7+ дней подряд питомец получает анимированный радужный ошейник. Отличный мотиватор для регулярной работы!</div></div>
</div>
<div class="tg-chapter-nav">
<div class="tg-ch-nav-btn prev" onclick="scrollToChapter('ch-15')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-left"></i></div>
<div><div class="tg-ch-nav-label">Предыдущая глава</div><div class="tg-ch-nav-title">Биохимия</div></div>
</div>
<div class="tg-ch-nav-btn next" onclick="scrollToChapter('ch-17')" style="text-align:right">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-right"></i></div>
<div><div class="tg-ch-nav-label">Следующая глава</div><div class="tg-ch-nav-title">Доступ к контенту</div></div>
</div>
</div>
</div>
<!-- ═══ CHAPTER 17 — ACCESS ═══ -->
<div class="tg-chapter" id="ch-17">
<div class="tg-chapter-header">
<div class="tg-chapter-icon"><i data-lucide="shield-check"></i></div>
<div class="tg-chapter-meta">
<div class="tg-chapter-num">Глава 17</div>
<div class="tg-chapter-title">Доступ к контенту</div>
</div>
<a href="/admin" class="tg-chapter-try" target="_blank"><i data-lucide="external-link"></i> Админ-панель</a>
</div>
<div class="tg-section" id="s-17-1">
<div class="tg-section-title">17.1 Открытие учебников и экзаменов классу</div>
<p>По умолчанию ученики видят только те учебники и экзамены, к которым им открыт доступ. Это настраивается через <b>allowlist</b> — белый список.</p>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num">1</div><div class="tg-step-body">Откройте <b>Админ-панель → вкладка «Доступ к контенту»</b>.</div></div>
<div class="tg-step"><div class="tg-step-num">2</div><div class="tg-step-body">Выберите учебник или экзамен из списка.</div></div>
<div class="tg-step"><div class="tg-step-num">3</div><div class="tg-step-body">Добавьте класс — все ученики класса получат доступ. Или выберите конкретного ученика — доступ только у него.</div></div>
</div>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="users"></i></div><div class="tg-box-body"><div class="tg-box-label">Приоритеты</div>Доступ ученика выше доступа класса: если классу учебник закрыт, но конкретному ученику открыт — он его увидит.</div></div>
</div>
<div class="tg-section" id="s-17-2">
<div class="tg-section-title">17.2 Feature Flags — включение модулей</div>
<p>В <b>Админ-панели → «Настройки»</b> можно включать и отключать целые модули платформы:</p>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Биохимия</b> — полностью скрыть модуль для учеников.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Учебники</b> — отключить раздел учебников.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Флэшкарты, Live-квиз</b> — включить/выключить по необходимости.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Экзаменационные тесты</b> — модуль с 80 вариантами по математике 9 класса.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>И другие</b> — Доска, Классы, Питомец и геймификация, Карта знаний, Красная книга, Кроссворд, Виселица, Коллекция, Квантик-ассистент: каждый модуль скрывается своим флагом.</div></div>
</div>
<div class="tg-note"><div class="tg-box-icon"><i data-lucide="shield"></i></div><div class="tg-box-body"><div class="tg-box-label">Только для администратора</div>Изменение feature flags и доступа к контенту доступно только пользователям с ролью <b>admin</b>. Учителя видят только то, к чему у их класса есть доступ.</div></div>
</div>
<div class="tg-section" id="s-17-3">
<div class="tg-section-title">17.3 System Health</div>
<p>Администраторам доступна вкладка <b>«System Health»</b> в панели с метриками сервера в реальном времени:</p>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>CPU и RAM</b> — текущая нагрузка процессора и память.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Event loop lag</b> — задержка обработки запросов.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>HTTP-статистика</b> — количество запросов, самые медленные и частые роуты.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Тренды</b> — canvas-графики нагрузки за последние минуты.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Журнал ошибок</b> — последние ошибки сервера с трейсом.</div></div>
</div>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="arrow-right-circle"></i></div><div class="tg-box-body"><div class="tg-box-label">Дальше</div>Ещё три раздела: Квантик-ассистент (18), Флэшкарты (19) и обзор остальных модулей (20).</div></div>
</div>
<div class="tg-chapter-nav">
<div class="tg-ch-nav-btn prev" onclick="scrollToChapter('ch-16')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-left"></i></div>
<div><div class="tg-ch-nav-label">Предыдущая глава</div><div class="tg-ch-nav-title">Геймификация</div></div>
</div>
<div class="tg-ch-nav-btn next" onclick="scrollToChapter('ch-18')" style="text-align:right">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-right"></i></div>
<div><div class="tg-ch-nav-label">Следующая глава</div><div class="tg-ch-nav-title">Квантик-ассистент</div></div>
</div>
</div>
</div>
<!-- ═══ CHAPTER 18 — КВАНТИК-АССИСТЕНТ ═══ -->
<div class="tg-chapter" id="ch-18">
<div class="tg-chapter-header">
<div class="tg-chapter-icon"><i data-lucide="sparkles"></i></div>
<div class="tg-chapter-meta">
<div class="tg-chapter-num">Глава 18</div>
<div class="tg-chapter-title">Квантик-ассистент</div>
</div>
<a href="/dashboard" class="tg-chapter-try" target="_blank"><i data-lucide="external-link"></i> Открыть</a>
</div>
<div class="tg-section" id="s-18-1">
<div class="tg-section-title">18.1 Что умеет Квантик</div>
<p><b>Квантик</b> — встроенный ИИ-помощник. Плавающая кнопка-питомец в левом нижнем углу есть на дашборде, в учебниках и на других страницах. Помогает и ученикам, и учителям.</p>
<div class="tg-tools-grid">
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="message-circle"></i></div><div><div class="tg-tool-name">Отвечает на вопросы</div><div class="tg-tool-desc">По платформе и школьной программе</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="book-open-text"></i></div><div><div class="tg-tool-name">Ищет в учебниках</div><div class="tg-tool-desc">RAG: отвечает по тексту учебников и ссылается на §</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="history"></i></div><div><div class="tg-tool-name">Помнит диалог</div><div class="tg-tool-desc">Учитывает предыдущие реплики беседы</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="copy"></i></div><div><div class="tg-tool-name">Делает флэшкарты</div><div class="tg-tool-desc">Сгенерирует карточки из текста (Глава 19)</div></div></div>
</div>
<div class="tg-note"><div class="tg-box-icon"><i data-lucide="quote"></i></div><div class="tg-box-body"><div class="tg-box-label">Источники под ответом</div>Если ответ опирался на учебник, под ним появляются ссылки на параграфы. Ответ можно оценить лайком/дизлайком — это помогает улучшать помощника.</div></div>
</div>
<div class="tg-section" id="s-18-2">
<div class="tg-section-title">18.2 Спроси Квантика</div>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num">1</div><div class="tg-step-body">Нажмите кнопку-питомца → откроется окно с полем ввода.</div></div>
<div class="tg-step"><div class="tg-step-num">2</div><div class="tg-step-body">Задайте вопрос: «объясни теорему Виета», «как создать класс», «реши …». Можно продолжать беседу — Квантик помнит контекст.</div></div>
<div class="tg-step"><div class="tg-step-num">3</div><div class="tg-step-body">В учебнике выделите фрагмент текста — появится кнопка <b>«Объяснить выделенное»</b>.</div></div>
</div>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="graduation-cap"></i></div><div class="tg-box-body"><div class="tg-box-label">Для учителей</div>Квантик понимает учительские задачи: попросите составить вопросы по теме, план урока или объяснить, как работает инструмент платформы.</div></div>
</div>
<div class="tg-section" id="s-18-3">
<div class="tg-section-title">18.3 Подсказки на экзамене</div>
<p>На карточках задач в «Подготовке к экзамену» Квантик умеет работать в двух особых режимах:</p>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Подсказка</b> — даёт наводящий шаг, <i>не</i> выдавая готовый ответ. Ученик додумывает сам.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Спросить Квантика</b> — полное объяснение задачи с формулами.</div></div>
</div>
<div class="tg-note"><div class="tg-box-icon"><i data-lucide="toggle-left"></i></div><div class="tg-box-body"><div class="tg-box-label">Включается администратором</div>Сам помощник и кнопки на карточках экзамена включаются/отключаются в админ-панели (раздел «Помощник», Глава A7). На вопросы «какая ты модель» Квантик намеренно не отвечает.</div></div>
</div>
<div class="tg-chapter-nav">
<div class="tg-ch-nav-btn prev" onclick="scrollToChapter('ch-17')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-left"></i></div>
<div><div class="tg-ch-nav-label">Предыдущая глава</div><div class="tg-ch-nav-title">Доступ к контенту</div></div>
</div>
<div class="tg-ch-nav-btn next" onclick="scrollToChapter('ch-19')" style="text-align:right">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-right"></i></div>
<div><div class="tg-ch-nav-label">Следующая глава</div><div class="tg-ch-nav-title">Флэшкарты</div></div>
</div>
</div>
</div>
<!-- ═══ CHAPTER 19 — ФЛЭШКАРТЫ ═══ -->
<div class="tg-chapter" id="ch-19">
<div class="tg-chapter-header">
<div class="tg-chapter-icon"><i data-lucide="copy"></i></div>
<div class="tg-chapter-meta">
<div class="tg-chapter-num">Глава 19</div>
<div class="tg-chapter-title">Флэшкарты</div>
</div>
<a href="/flashcards" class="tg-chapter-try" target="_blank"><i data-lucide="external-link"></i> Флэшкарты</a>
</div>
<div class="tg-section" id="s-19-1">
<div class="tg-section-title">19.1 Колоды и карточки</div>
<p>Раздел <b>«Флэшкарты»</b> — карточки «вопрос → ответ» для заучивания с интервальным повторением.</p>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num">1</div><div class="tg-step-body">Создайте <b>колоду</b> (тема): название и цвет.</div></div>
<div class="tg-step"><div class="tg-step-num">2</div><div class="tg-step-body">Добавляйте карточки: лицевая сторона (вопрос/термин) и оборот (ответ/определение).</div></div>
<div class="tg-step"><div class="tg-step-num">3</div><div class="tg-step-body">Запустите повторение — карточки показываются по алгоритму интервального повторения; отмечайте «знаю / не знаю».</div></div>
</div>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="bell"></i></div><div class="tg-box-body"><div class="tg-box-label">Виджет на дашборде</div>На дашборде есть блок «Повтори карточку» — напоминает про карточки, которые пора повторить.</div></div>
</div>
<div class="tg-section" id="s-19-2">
<div class="tg-section-title">19.2 Картинки и формулы</div>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Картинки</b> — на лицевую и оборотную сторону можно загрузить изображение (схема, график, рисунок).</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Формулы KaTeX</b> — в редакторе есть палитра символов и живое превью; формулы оборачивайте в <code>$...$</code> или <code>$$...$$</code>.</div></div>
</div>
</div>
<div class="tg-section" id="s-19-3">
<div class="tg-section-title">19.3 Массовый импорт и генерация ИИ</div>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num">1</div><div class="tg-step-body"><b>Добавить список</b> — вставьте сразу много пар «вопрос — ответ» (можно с картинками) и создайте десятки карточек за раз.</div></div>
<div class="tg-step"><div class="tg-step-num">2</div><div class="tg-step-body"><b>Генерация Квантиком</b> — дайте помощнику текст (например, параграф), и он предложит готовый набор карточек.</div></div>
</div>
<div class="tg-note"><div class="tg-box-icon"><i data-lucide="toggle-left"></i></div><div class="tg-box-body"><div class="tg-box-label">Feature flag</div>Модуль флэшкартов целиком включается/выключается в админ-панели (Глава 17).</div></div>
</div>
<div class="tg-chapter-nav">
<div class="tg-ch-nav-btn prev" onclick="scrollToChapter('ch-18')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-left"></i></div>
<div><div class="tg-ch-nav-label">Предыдущая глава</div><div class="tg-ch-nav-title">Квантик-ассистент</div></div>
</div>
<div class="tg-ch-nav-btn next" onclick="scrollToChapter('ch-20')" style="text-align:right">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-right"></i></div>
<div><div class="tg-ch-nav-label">Следующая глава</div><div class="tg-ch-nav-title">Ещё модули</div></div>
</div>
</div>
</div>
<!-- ═══ CHAPTER 20 — ЕЩЁ МОДУЛИ ═══ -->
<div class="tg-chapter" id="ch-20">
<div class="tg-chapter-header">
<div class="tg-chapter-icon"><i data-lucide="grid-3x3"></i></div>
<div class="tg-chapter-meta">
<div class="tg-chapter-num">Глава 20</div>
<div class="tg-chapter-title">Ещё модули платформы</div>
</div>
<a href="/sitemap" class="tg-chapter-try" target="_blank"><i data-lucide="external-link"></i> Путеводитель</a>
</div>
<div class="tg-section" id="s-20-1">
<div class="tg-section-title">20.1 Карта знаний и Теория</div>
<p><b>Карта знаний</b> (<a href="/knowledge-map">/knowledge-map</a>) — визуальная карта тем и связей между ними. <b>Теория</b> (<a href="/theory">/theory</a>) — лента опубликованных уроков-конспектов, которые ученики получают из «Редактора уроков» (Глава 7).</p>
</div>
<div class="tg-section" id="s-20-2">
<div class="tg-section-title">20.2 Игры: Кроссворд и Виселица</div>
<p>Учебные игры для закрепления терминов: <b>Кроссворд</b> (<a href="/crossword">/crossword</a>) и <b>Виселица</b> (<a href="/hangman">/hangman</a>). За прохождение начисляется XP (Глава 16). Включаются/отключаются feature-флагами.</p>
</div>
<div class="tg-section" id="s-20-3">
<div class="tg-section-title">20.3 Красная книга и Коллекция</div>
<p><b>Красная книга</b> (<a href="/red-book">/red-book</a>) — модуль по экологии и биоразнообразию: виды, биомы, экосистемы и игры-квесты. <b>Коллекция</b> (<a href="/collection">/collection</a>) — собранные учеником материалы и награды.</p>
</div>
<div class="tg-section" id="s-20-4">
<div class="tg-section-title">20.4 Мои материалы, Магазин и Родители</div>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Мои материалы</b> (<a href="/my-materials">/my-materials</a>) — ученик сохраняет к себе доску (PNG) и заметки из онлайн-урока; копия остаётся даже после удаления сессии.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Магазин наград</b> — за монеты (начисляются вместе с XP) ученик покупает предметы и награды.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Родительские аккаунты</b> (<a href="/parent">/parent</a>) — родитель привязывается к ученику и видит его прогресс и уведомления.</div></div>
</div>
<div class="tg-success"><div class="tg-box-icon"><i data-lucide="check-circle"></i></div><div class="tg-box-body"><div class="tg-box-label">Почти всё</div>Дальше — мощный «Конструктор симуляций» (создание своих интерактивных сцен), а за ним — главы для администраторов (видны только под ролью admin).</div></div>
</div>
<div class="tg-chapter-nav">
<div class="tg-ch-nav-btn prev" onclick="scrollToChapter('ch-19')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-left"></i></div>
<div><div class="tg-ch-nav-label">Предыдущая глава</div><div class="tg-ch-nav-title">Флэшкарты</div></div>
</div>
<div class="tg-ch-nav-btn next" onclick="scrollToChapter('ch-21')" style="text-align:right">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-right"></i></div>
<div><div class="tg-ch-nav-label">Следующая глава</div><div class="tg-ch-nav-title">Конструктор симуляций</div></div>
</div>
</div>
</div>
<!-- ═══ CHAPTER 21 — КОНСТРУКТОР СИМУЛЯЦИЙ ═══ -->
<div class="tg-chapter" id="ch-21">
<div class="tg-chapter-header">
<div class="tg-chapter-icon"><i data-lucide="pencil-ruler"></i></div>
<div class="tg-chapter-meta">
<div class="tg-chapter-num">Глава 21</div>
<div class="tg-chapter-title">Конструктор симуляций</div>
</div>
<a href="/sim-builder" class="tg-chapter-try" target="_blank"><i data-lucide="external-link"></i> Открыть конструктор</a>
</div>
<div class="tg-section" id="s-21-1">
<div class="tg-section-title">21.1 Что это и где</div>
<p><b>Конструктор симуляций</b> — инструмент, в котором вы сами, без программирования, собираете интерактивную 2D-сцену: параметры-ползунки, объекты (точки, отрезки, векторы, фигуры, подписи), привязанные <b>формулами</b> к параметрам и времени, настоящую физику и графики. Готовую симуляцию можно сохранить, опубликовать в лабораторию, раздать классу и открыть на доске онлайн-урока.</p>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body">Открыть: в боковом меню пункт <b>«Конструктор симуляций»</b> или адрес <a href="/sim-builder">/sim-builder</a>. Доступно учителю и администратору.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body">Симуляция — это <b>данные</b>, а не код. Формулы вычисляются безопасным движком (доступны только математические функции), поэтому готовыми сценами безопасно делиться.</div></div>
</div>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="lightbulb"></i></div><div class="tg-box-body"><div class="tg-box-label">Что реально собрать</div>Кинематику (брошенное тело, равноускоренное движение), колебания и волны, графики функций, геометрические чертежи, а с включённой физикой — маятники, пружины и упругие столкновения.</div></div>
<div class="tg-note"><div class="tg-box-icon"><i data-lucide="shield"></i></div><div class="tg-box-body"><div class="tg-box-label">Если пункта меню нет</div>Администратор мог отключить конструктор: <b>Админка → Функции → «Конструктор симуляций»</b>. При выключенном тумблере страница недоступна, но ранее опубликованные симуляции в лаборатории продолжают работать.</div></div>
</div>
<div class="tg-section" id="s-21-2">
<div class="tg-section-title">21.2 Рабочее поле</div>
<p>В центре — <b>живое превью</b>: всё, что вы добавляете и меняете, сразу видно. Слева — панели настроек, сверху — панель инструментов (Тест, Сброс, Сохранить, Опубликовать, Шаблон, Раздать, отмена/повтор).</p>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Масштаб</b> — колесо мыши (приближает к курсору).</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Перемещение вида (панорама)</b> — перетаскивание мышью по пустому месту сцены.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Кнопки в углу сцены</b> — «Вписать» (показать всю область) и «Сбросить вид».</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Сетка и оси</b> с числовыми делениями и точкой (0,0) рисуются автоматически; границы области задаются в настройках сцены (xmin/xmax/ymin/ymax).</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body">Контролы запущенной симуляции (ползунки, плей/пауза) — плавающая панель в углу, не закрывает сцену; её можно свернуть.</div></div>
</div>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="play"></i></div><div class="tg-box-body"><div class="tg-box-label">Кнопка «Тест»</div>Запускает анимацию (время <code>t</code> идёт), «Сброс» — возвращает в начало. Пока симуляция на паузе, перетаскивание объектов и ползунки служат для настройки сцены.</div></div>
</div>
<div class="tg-section" id="s-21-3">
<div class="tg-section-title">21.3 Параметры (ползунки)</div>
<p>Параметр — это переменная со ползунком, которой можно управлять прямо в симуляции. На параметры потом ссылаются формулы объектов.</p>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num">1</div><div class="tg-step-body">Откройте панель <b>«Параметры»</b> → «Добавить параметр».</div></div>
<div class="tg-step"><div class="tg-step-num">2</div><div class="tg-step-body">Задайте: <b>имя</b> (латиницей, например <code>v</code>, <code>theta</code>), минимум, максимум, шаг, начальное значение и (необязательно) единицу.</div></div>
<div class="tg-step"><div class="tg-step-num">3</div><div class="tg-step-body">В превью появится ползунок — двигайте его, чтобы видеть, как меняется сцена.</div></div>
</div>
<div class="tg-note"><div class="tg-box-icon"><i data-lucide="alert-triangle"></i></div><div class="tg-box-body"><div class="tg-box-label">Зарезервированные имена</div>Нельзя называть параметр <code>t</code> (время), <code>e</code>, <code>pi</code>, <code>w</code>, <code>h</code> — это служебные имена в формулах. Конструктор предупредит и не даст сохранить.</div></div>
</div>
<div class="tg-section" id="s-21-4">
<div class="tg-section-title">21.4 Объекты и формулы</div>
<p>Объекты — это то, что рисуется на сцене. Любое числовое поле объекта (координата, радиус, размер) можно задать <b>числом или формулой</b> от параметров и времени <code>t</code>.</p>
<div class="tg-tools-grid">
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="dot"></i></div><div><div class="tg-tool-name">Точка / Отрезок / Вектор</div><div class="tg-tool-desc">Базовая геометрия со стрелками</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="circle"></i></div><div><div class="tg-tool-name">Круг / Прямоугольник</div><div class="tg-tool-desc">Фигуры с заливкой</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="spline"></i></div><div><div class="tg-tool-name">Ломаная / Кривая</div><div class="tg-tool-desc">Набор точек</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="type"></i></div><div><div class="tg-tool-name">Подпись (LaTeX)</div><div class="tg-tool-desc">Текст и формулы KaTeX</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="line-chart"></i></div><div><div class="tg-tool-name">График</div><div class="tg-tool-desc">Кривая y=f(x), см. 21.7</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="gauge"></i></div><div><div class="tg-tool-name">Индикатор (readout)</div><div class="tg-tool-desc">Живое числовое значение</div></div></div>
</div>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num">1</div><div class="tg-step-body">Панель <b>«Объекты»</b> → выберите тип → «Добавить».</div></div>
<div class="tg-step"><div class="tg-step-num">2</div><div class="tg-step-body">В полях координат пишите формулы: например для броска тела <code>x = v*cos(theta)*t</code>, <code>y = v*sin(theta)*t - 5*t^2</code>.</div></div>
<div class="tg-step"><div class="tg-step-num">3</div><div class="tg-step-body">Кнопка <b>fx</b> у поля открывает палитру: параметры, время <code>t</code>, функции (sin, cos, sqrt, abs, exp, ln…), константы (pi, e). Клик вставляет имя в формулу.</div></div>
<div class="tg-step"><div class="tg-step-num">4</div><div class="tg-step-body">Объект можно поставить мышью: нажмите значок <b>«прицел»</b> у объекта и кликните по сцене — координаты подставятся (см. 21.5).</div></div>
<div class="tg-step"><div class="tg-step-num">5</div><div class="tg-step-body">У объекта можно задать <b>id</b> и затем ссылаться на его координаты в других формулах: <code>id.x</code>, <code>id.y</code>.</div></div>
</div>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="function-square"></i></div><div class="tg-box-body"><div class="tg-box-label">Ошибки в формуле</div>Если выражение записано неверно, поле подсветится и покажет ошибку — симуляция при этом не ломается. Деление на ноль и неопределённости дают 0.</div></div>
</div>
<div class="tg-section" id="s-21-5">
<div class="tg-section-title">21.5 Стиль, порядок и прямое редактирование</div>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Стиль объекта</b>: выбор цвета (палитра), прозрачность, толщина и тип линии (сплошная / штрих / пунктир), стиль точки, свечение, градиентная заливка.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Порядок и операции</b>: кнопки «вверх/вниз» меняют порядок отрисовки (что поверх чего), есть дублирование и тумблер видимости (глаз), удаление.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Перетаскивание на сцене</b>: значок «прицел» включает ручки — тяните точку, концы отрезка/вектора, вершины ломаной прямо на превью (на паузе). Поля с формулами при этом не затираются.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Привязка к сетке</b> (тумблер в панели инструментов) — координаты при перетаскивании округляются к узлам сетки.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Отмена/повтор</b>: кнопки в панели инструментов и горячие клавиши <code>Ctrl+Z</code> / <code>Ctrl+Y</code> (или <code>Ctrl+Shift+Z</code>).</div></div>
</div>
</div>
<div class="tg-section" id="s-21-6">
<div class="tg-section-title">21.6 Физика</div>
<p>Включите тумблер <b>«Физика»</b> — и часть объектов будет двигаться по законам механики, а не по формуле. Движок сам интегрирует движение.</p>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Общие силы</b>: гравитация (g по X и Y), трение, упругость столкновений (0…1).</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Тело</b>: у точки/круга включите «тело» и задайте массу и начальную скорость (vx, vy). Тело падает, сталкивается, отскакивает.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Пружины</b> — между двумя телами или телом и точкой-якорем (жёсткость, длина покоя, демпфирование).</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Стены</b> — границы области (низ/верх/лево/право) или произвольный отрезок: от них тела отражаются.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body">Тело можно <b>тянуть мышью</b> на паузе; при отпускании в запущенной сцене оно полетит.</div></div>
</div>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="info"></i></div><div class="tg-box-body"><div class="tg-box-label">Формулы и физика вместе</div>Физические тела и формульные объекты сосуществуют на одной сцене: например, подпись или вектор скорости можно привязать к координатам тела через <code>id.x</code>, <code>id.y</code>.</div></div>
</div>
<div class="tg-section" id="s-21-7">
<div class="tg-section-title">21.7 Графики и диаграммы</div>
<p>Объект <b>«График»</b> рисует кривую функции прямо на сцене в мировых координатах.</p>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body">Задайте выражение (например <code>sin(x)</code>), переменную (по умолчанию <code>x</code>), диапазон и число точек.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Несколько кривых</b> на одном графике — у каждой свои цвет, подпись, толщина и стиль линии.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Заливка под кривой</b>, <b>маркеры точек</b> и <b>легенда</b> (по подписям кривых) включаются переключателями.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body">Режим <b>«след» (trace)</b> — кривая накапливается по времени <code>t</code> (удобно строить график величины в ходе анимации).</div></div>
</div>
</div>
<div class="tg-section" id="s-21-8">
<div class="tg-section-title">21.8 Сохранение, публикация и раздача</div>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Сохранить</b> — симуляция сохраняется как черновик (видна только вам).</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Опубликовать</b> — симуляция появляется в лаборатории для всех; «Снять с публикации» возвращает в черновик.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Шаблон</b> — начать не с нуля, а с заготовки (пустая, маятник, график, бросок).</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Раздать классу</b> — ученики класса получают уведомление со ссылкой на симуляцию (она автоматически публикуется).</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Клонировать</b> — сделать свою копию чужой опубликованной симуляции и доработать её.</div></div>
</div>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="flask-conical"></i></div><div class="tg-box-body"><div class="tg-box-label">Где появляются ваши симуляции</div>В <a href="/lab">лаборатории</a> есть раздел <b>«Мои симуляции»</b> — там ваши черновики и опубликованные, с кнопками «Редактировать» и «Удалить». Прямая ссылка вида <code>/lab?sim=custom:НОМЕР</code> открывает конкретную симуляцию.</div></div>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="presentation"></i></div><div class="tg-box-body"><div class="tg-box-label">На онлайн-уроке</div>Свою симуляцию можно открыть на доске урока — значения ползунков синхронизируются у учеников, а поверх можно рисовать аннотации.</div></div>
<div class="tg-success"><div class="tg-box-icon"><i data-lucide="check-circle"></i></div><div class="tg-box-body"><div class="tg-box-label">Готово</div>Это вся учительская часть руководства. Дальше — главы для администраторов (видны только под ролью admin).</div></div>
</div>
<div class="tg-chapter-nav">
<div class="tg-ch-nav-btn prev" onclick="scrollToChapter('ch-20')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-left"></i></div>
<div><div class="tg-ch-nav-label">Предыдущая глава</div><div class="tg-ch-nav-title">Ещё модули платформы</div></div>
</div>
<div class="tg-ch-nav-btn next" onclick="scrollToChapter('ch-1')" style="text-align:right">
<div class="tg-ch-nav-icon"><i data-lucide="rotate-ccw"></i></div>
<div><div class="tg-ch-nav-label">Вернуться к началу</div><div class="tg-ch-nav-title">Быстрый старт</div></div>
</div>
</div>
</div>
<!-- ═══ ADMIN GUIDE (только для роли admin, скрыт по умолчанию) ═══ -->
<div id="tg-admin-content" style="display:none">
<!-- A1 -->
<div class="tg-chapter admin-chapter" id="ch-a1">
<div class="tg-chapter-header">
<div class="tg-chapter-icon"><i data-lucide="layout-dashboard"></i></div>
<div class="tg-chapter-meta">
<div class="tg-chapter-num">Глава A1</div>
<div class="tg-chapter-title">Командный центр</div>
</div>
<a href="/dashboard" class="tg-chapter-try" target="_blank"><i data-lucide="external-link"></i> Дашборд</a>
</div>
<div class="tg-chapter-admin-header"><i data-lucide="shield"></i> Только для администратора</div>
<div class="tg-section" id="s-a1-1">
<div class="tg-section-title">A1.1 Дашборд администратора</div>
<p>Администратор попадает на <b>командный центр</b> — специальный дашборд вместо ученического. Показывает состояние платформы за последние 24 часа.</p>
<div class="tg-tools-grid">
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="play-circle"></i></div><div><div class="tg-tool-name">Сессий запущено</div><div class="tg-tool-desc">Со спарклайном за 7 дней</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="activity"></i></div><div><div class="tg-tool-name">Активных пользователей</div><div class="tg-tool-desc">За 24 часа</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="user-plus"></i></div><div><div class="tg-tool-name">Новые регистрации</div><div class="tg-tool-desc">За 24 часа</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="check-circle"></i></div><div><div class="tg-tool-name">Завершаемость</div><div class="tg-tool-desc">Доля незаброшенных сессий</div></div></div>
</div>
</div>
<div class="tg-section" id="s-a1-2">
<div class="tg-section-title">A1.2 Очередь триажа «Требует внимания»</div>
<p>Центральный блок дашборда — события, требующие действия. Три вкладки:</p>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Блокировки</b> — заблокированные за неделю. Кнопка «Открыть» → карточка пользователя.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Зависшие</b> — сессии, не завершившиеся более 1 часа. Кнопка «Сессия» → к ней.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Брошенные</b> — всплеск прерванных сессий за 24ч (сигнал проблемы).</div></div>
</div>
</div>
<div class="tg-section" id="s-a1-3">
<div class="tg-section-title">A1.3 Лента завершений и статистика</div>
<p><b>Лента завершений</b> — поток последних завершённых сессий с % и распределением по предметам.</p>
<p><b>Результаты дня</b>: Топ-5 (лучшие) и «Нужна помощь» (&lt;50%) — быстрый способ выявить учеников, которым сложно.</p>
</div>
<div class="tg-chapter-nav">
<div class="tg-ch-nav-btn next" onclick="scrollToChapter('ch-a2')" style="text-align:right">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-right"></i></div>
<div><div class="tg-ch-nav-label">Следующая глава</div><div class="tg-ch-nav-title">Управление пользователями</div></div>
</div>
</div>
</div>
<!-- A2 -->
<div class="tg-chapter admin-chapter" id="ch-a2">
<div class="tg-chapter-header">
<div class="tg-chapter-icon"><i data-lucide="users"></i></div>
<div class="tg-chapter-meta">
<div class="tg-chapter-num">Глава A2</div>
<div class="tg-chapter-title">Управление пользователями</div>
</div>
<a href="/admin#users" class="tg-chapter-try" target="_blank"><i data-lucide="external-link"></i> Пользователи</a>
</div>
<div class="tg-chapter-admin-header"><i data-lucide="shield"></i> Только для администратора</div>
<div class="tg-section" id="s-a2-1">
<div class="tg-section-title">A2.1 Список и фильтры</div>
<p>Вкладка <b>«Пользователи»</b> — все зарегистрированные: имя, email, роль, регистрация, последний вход, количество тестов, средний балл. Фильтры: по роли, поиск по имени/email.</p>
</div>
<div class="tg-section" id="s-a2-2">
<div class="tg-section-title">A2.2 Карточка пользователя</div>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Смена роли</b> — student / teacher / admin / free_student. Инвалидирует токен.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Блокировка / разблокировка</b> — заблокированный не может войти.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>История сессий</b> — все тестовые сессии с результатами.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Удаление</b> — полное удаление пользователя и всех его данных.</div></div>
</div>
<div class="tg-warning"><div class="tg-box-icon"><i data-lucide="alert-triangle"></i></div><div class="tg-box-body"><div class="tg-box-label">Нельзя изменить свою роль</div>Защита от случайного лишения прав.</div></div>
</div>
<div class="tg-section" id="s-a2-3">
<div class="tg-section-title">A2.3 Глобальный поиск (Ctrl+K)</div>
<p>В любом разделе нажмите <b>Ctrl+K</b> — command palette: поиск пользователей, тестов, классов. Результаты кликабельны.</p>
</div>
<div class="tg-chapter-nav">
<div class="tg-ch-nav-btn prev" onclick="scrollToChapter('ch-a1')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-left"></i></div>
<div><div class="tg-ch-nav-label">Предыдущая глава</div><div class="tg-ch-nav-title">Командный центр</div></div>
</div>
<div class="tg-ch-nav-btn next" onclick="scrollToChapter('ch-a3')" style="text-align:right">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-right"></i></div>
<div><div class="tg-ch-nav-label">Следующая глава</div><div class="tg-ch-nav-title">Контент и доступ</div></div>
</div>
</div>
</div>
<!-- A3 -->
<div class="tg-chapter admin-chapter" id="ch-a3">
<div class="tg-chapter-header">
<div class="tg-chapter-icon"><i data-lucide="book-lock"></i></div>
<div class="tg-chapter-meta">
<div class="tg-chapter-num">Глава A3</div>
<div class="tg-chapter-title">Контент и доступ к учебникам</div>
</div>
<a href="/admin#access" class="tg-chapter-try" target="_blank"><i data-lucide="external-link"></i> Доступ</a>
</div>
<div class="tg-chapter-admin-header"><i data-lucide="shield"></i> Только для администратора</div>
<div class="tg-section" id="s-a3-1">
<div class="tg-section-title">A3.1 Allowlist — открытие учебников</div>
<p>Вкладка <b>«Доступ к контенту»</b>. Ученики видят только учебники/экзамены, которые администратор явно открыл. Выберите учебник → добавьте класс или конкретного ученика.</p>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="shield-check"></i></div><div class="tg-box-body"><div class="tg-box-label">Приоритеты</div>Доступ ученика выше доступа класса. Администраторы и учителя видят весь контент всегда.</div></div>
</div>
<div class="tg-section" id="s-a3-2">
<div class="tg-section-title">A3.2 Управление симуляциями</div>
<p>Вкладка <b>«Симуляции»</b> — каталог 40 симуляций: включить/выключить, пометить как рекомендованную (featured), привязать к параграфам учебников (кнопка «В лабораторию»).</p>
</div>
<div class="tg-section" id="s-a3-3">
<div class="tg-section-title">A3.3 Feature Flags</div>
<p>Включение/отключение модулей платформы без перезапуска сервера: биохимия, учебники, флэшкарты, доска, live-квиз, экзамен, симуляции, игры (кроссворд, виселица), красная книга, карта знаний, коллекция, питомец и геймификация, Квантик-ассистент.</p>
</div>
<div class="tg-chapter-nav">
<div class="tg-ch-nav-btn prev" onclick="scrollToChapter('ch-a2')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-left"></i></div>
<div><div class="tg-ch-nav-label">Предыдущая глава</div><div class="tg-ch-nav-title">Пользователи</div></div>
</div>
<div class="tg-ch-nav-btn next" onclick="scrollToChapter('ch-a4')" style="text-align:right">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-right"></i></div>
<div><div class="tg-ch-nav-label">Следующая глава</div><div class="tg-ch-nav-title">Геймификация (admin)</div></div>
</div>
</div>
</div>
<!-- A4 -->
<div class="tg-chapter admin-chapter" id="ch-a4">
<div class="tg-chapter-header">
<div class="tg-chapter-icon"><i data-lucide="zap"></i></div>
<div class="tg-chapter-meta">
<div class="tg-chapter-num">Глава A4</div>
<div class="tg-chapter-title">Геймификация — панель администратора</div>
</div>
<a href="/admin#gam" class="tg-chapter-try" target="_blank"><i data-lucide="external-link"></i> Геймификация</a>
</div>
<div class="tg-chapter-admin-header"><i data-lucide="shield"></i> Только для администратора</div>
<div class="tg-section" id="s-a4-1">
<div class="tg-section-title">A4.1 Статистика</div>
<p>Суммарный XP и монеты, средний уровень, достижений выдано, Топ-10 по XP, последние начисления XP с читаемыми подписями.</p>
</div>
<div class="tg-section" id="s-a4-2">
<div class="tg-section-title">A4.2 Начисление XP и монет</div>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num">1</div><div class="tg-step-body">Выберите пользователя из списка. Фильтр по имени для быстрого поиска.</div></div>
<div class="tg-step"><div class="tg-step-num">2</div><div class="tg-step-body">Задайте XP через пресеты (0/+10/+25/+50/+100/+250). <b>0 = не начисляется.</b></div></div>
<div class="tg-step"><div class="tg-step-num">3</div><div class="tg-step-body">Задайте монеты (0/+10/+25/+50), укажите причину, нажмите «Начислить».</div></div>
</div>
</div>
<div class="tg-section" id="s-a4-3">
<div class="tg-section-title">A4.3 Сброс прогресса</div>
<p>Удаляет весь XP, монеты, достижения и историю начислений выбранного пользователя.</p>
<div class="tg-warning"><div class="tg-box-icon"><i data-lucide="alert-triangle"></i></div><div class="tg-box-body"><div class="tg-box-label">Необратимо</div>Данные удаляются безвозвратно. Требуется подтверждение.</div></div>
</div>
<div class="tg-chapter-nav">
<div class="tg-ch-nav-btn prev" onclick="scrollToChapter('ch-a3')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-left"></i></div>
<div><div class="tg-ch-nav-label">Предыдущая глава</div><div class="tg-ch-nav-title">Контент и доступ</div></div>
</div>
<div class="tg-ch-nav-btn next" onclick="scrollToChapter('ch-a5')" style="text-align:right">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-right"></i></div>
<div><div class="tg-ch-nav-label">Следующая глава</div><div class="tg-ch-nav-title">Аудит и безопасность</div></div>
</div>
</div>
</div>
<!-- A5 -->
<div class="tg-chapter admin-chapter" id="ch-a5">
<div class="tg-chapter-header">
<div class="tg-chapter-icon"><i data-lucide="file-text"></i></div>
<div class="tg-chapter-meta">
<div class="tg-chapter-num">Глава A5</div>
<div class="tg-chapter-title">Аудит и безопасность</div>
</div>
<a href="/admin#sublog" class="tg-chapter-try" target="_blank"><i data-lucide="external-link"></i> Аудит-лог</a>
</div>
<div class="tg-chapter-admin-header"><i data-lucide="shield"></i> Только для администратора</div>
<div class="tg-section" id="s-a5-1">
<div class="tg-section-title">A5.1 Аудит-лог</div>
<p>Хронология всех административных действий: смены ролей, блокировки, начисления XP, сброс прогресса, изменения разрешений.</p>
</div>
<div class="tg-section" id="s-a5-2">
<div class="tg-section-title">A5.2 Разрешения (RBAC)</div>
<p>Вкладка <b>«Разрешения»</b> — гранулярный контроль: per-role (для роли целиком) и per-user (для конкретного пользователя, приоритет выше).</p>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="info"></i></div><div class="tg-box-body"><div class="tg-box-label">free_student</div>Роль с минимальными правами — гибко расширяется разрешениями. Используйте для демо-аккаунтов.</div></div>
</div>
<div class="tg-section" id="s-a5-3">
<div class="tg-section-title">A5.3 Модерация аватаров</div>
<p>Ученики загружают фото — оно не показывается до подтверждения. Карточка ученика → вкладка «Аватар» → Принять / Отклонить.</p>
</div>
<div class="tg-chapter-nav">
<div class="tg-ch-nav-btn prev" onclick="scrollToChapter('ch-a4')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-left"></i></div>
<div><div class="tg-ch-nav-label">Предыдущая глава</div><div class="tg-ch-nav-title">Геймификация (admin)</div></div>
</div>
<div class="tg-ch-nav-btn next" onclick="scrollToChapter('ch-a6')" style="text-align:right">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-right"></i></div>
<div><div class="tg-ch-nav-label">Следующая глава</div><div class="tg-ch-nav-title">System Health</div></div>
</div>
</div>
</div>
<!-- A6 -->
<div class="tg-chapter admin-chapter" id="ch-a6">
<div class="tg-chapter-header">
<div class="tg-chapter-icon"><i data-lucide="activity"></i></div>
<div class="tg-chapter-meta">
<div class="tg-chapter-num">Глава A6</div>
<div class="tg-chapter-title">System Health</div>
</div>
<a href="/admin#health" class="tg-chapter-try" target="_blank"><i data-lucide="external-link"></i> Health</a>
</div>
<div class="tg-chapter-admin-header"><i data-lucide="shield"></i> Только для администратора</div>
<div class="tg-section" id="s-a6-1">
<div class="tg-section-title">A6.1 Метрики сервера</div>
<div class="tg-tools-grid">
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="cpu"></i></div><div><div class="tg-tool-name">CPU / RAM</div><div class="tg-tool-desc">Текущая нагрузка и память</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="clock"></i></div><div><div class="tg-tool-name">Event Loop Lag</div><div class="tg-tool-desc">Задержка обработки запросов</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="bar-chart-3"></i></div><div><div class="tg-tool-name">Тренды</div><div class="tg-tool-desc">Canvas-графики нагрузки</div></div></div>
<div class="tg-tool-card"><div class="tg-tool-icon"><i data-lucide="alert-circle"></i></div><div><div class="tg-tool-name">Журнал ошибок</div><div class="tg-tool-desc">Последние ошибки с трейсом</div></div></div>
</div>
</div>
<div class="tg-section" id="s-a6-2">
<div class="tg-section-title">A6.2 HTTP-статистика</div>
<p>Самые медленные роуты (avgMs), самые частые, соотношение статус-кодов 2xx/4xx/5xx.</p>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="alert-circle"></i></div><div class="tg-box-body"><div class="tg-box-label">Event Loop Lag &gt; 200ms</div>Сигнал перегрузки. Проверьте журнал ошибок и медленные роуты.</div></div>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="sparkles"></i></div><div class="tg-box-body"><div class="tg-box-label">Почти всё</div>Остался последний раздел — настройка ИИ-помощника Квантика (Глава A7).</div></div>
</div>
<div class="tg-chapter-nav">
<div class="tg-ch-nav-btn prev" onclick="scrollToChapter('ch-a5')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-left"></i></div>
<div><div class="tg-ch-nav-label">Предыдущая глава</div><div class="tg-ch-nav-title">Аудит и безопасность</div></div>
</div>
<div class="tg-ch-nav-btn next" onclick="scrollToChapter('ch-a7')" style="text-align:right">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-right"></i></div>
<div><div class="tg-ch-nav-label">Следующая глава</div><div class="tg-ch-nav-title">Помощник Квантик (ИИ)</div></div>
</div>
</div>
</div>
<!-- A7 -->
<div class="tg-chapter admin-chapter" id="ch-a7">
<div class="tg-chapter-header">
<div class="tg-chapter-icon"><i data-lucide="sparkles"></i></div>
<div class="tg-chapter-meta">
<div class="tg-chapter-num">Глава A7</div>
<div class="tg-chapter-title">Помощник Квантик — провайдеры ИИ</div>
</div>
<a href="/admin" class="tg-chapter-try" target="_blank"><i data-lucide="external-link"></i> Помощник</a>
</div>
<div class="tg-chapter-admin-header"><i data-lucide="shield"></i> Только для администратора</div>
<div class="tg-section" id="s-a7-1">
<div class="tg-section-title">A7.1 Провайдеры и авто-перехват</div>
<p>Вкладка <b>«Помощник»</b> в админ-панели. Вверху — общий выключатель Квантика для всей системы. Ниже — карточки провайдеров ИИ.</p>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Активный</b> провайдер (фиолетовая рамка) используется первым.</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body">При лимите/ошибке Квантик <b>автоматически переключается</b> на следующего провайдера с ключом; в админке появляется баннер «работаю на …» (его можно снять кнопкой).</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body">Кнопки на карточке: <b>Сделать активным · Тест · Изменить · Удалить</b>. Форма добавления свёрнута, открывается кнопкой «+ Добавить провайдера».</div></div>
</div>
</div>
<div class="tg-section" id="s-a7-2">
<div class="tg-section-title">A7.2 Модели и лимиты</div>
<p>Для провайдера Kilo доступен список бесплатных моделей прямо на карточке (переключатель). Кнопка <b>«Загрузить модели провайдера»</b> в форме подтягивает живой список моделей с их лимитами.</p>
<div class="tg-tip"><div class="tg-box-icon"><i data-lucide="gauge"></i></div><div class="tg-box-body"><div class="tg-box-label">Лимиты моделей</div>Под моделью показывается «контекст · ответ до N токенов · бесплатно/платно» — данные тянутся автоматически из API провайдера (работает и для Gemini, и для новых моделей).</div></div>
</div>
<div class="tg-section" id="s-a7-3">
<div class="tg-section-title">A7.3 RAG, экзамен и статистика</div>
<div class="tg-steps">
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>RAG по учебникам</b> — тумблер «Искать ответы по учебникам» + кнопка «Переиндексировать учебники».</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Кнопки на экзамене</b> — тумблер показа «Подсказка / Спросить Квантика» на карточках задач (Глава 18).</div></div>
<div class="tg-step"><div class="tg-step-num"></div><div class="tg-step-body"><b>Статистика</b> — запросы к ИИ / из кэша / FAQ за день и за 30 дней, лайки и дизлайки.</div></div>
</div>
<div class="tg-success"><div class="tg-box-icon"><i data-lucide="check-circle"></i></div><div class="tg-box-body"><div class="tg-box-label">Готово!</div>Вы изучили полное руководство — все разделы для учителей и администраторов.</div></div>
</div>
<div class="tg-chapter-nav">
<div class="tg-ch-nav-btn prev" onclick="scrollToChapter('ch-a6')">
<div class="tg-ch-nav-icon"><i data-lucide="arrow-left"></i></div>
<div><div class="tg-ch-nav-label">Предыдущая глава</div><div class="tg-ch-nav-title">System Health</div></div>
</div>
<div class="tg-ch-nav-btn next" onclick="scrollToChapter('ch-1')" style="text-align:right">
<div class="tg-ch-nav-icon"><i data-lucide="rotate-ccw"></i></div>
<div><div class="tg-ch-nav-label">Вернуться к началу</div><div class="tg-ch-nav-title">Быстрый старт</div></div>
</div>
</div>
</div>
</div><!-- #tg-admin-content -->
</main>
</div>
</div><!-- .sb-content -->
</div><!-- .app-layout -->
<script src="/js/api.js"></script>
<script src="/js/sidebar.js"></script>
<script src="/js/notifications.js"></script>
<script src="/js/search.js"></script>
<script src="/js/mobile.js"></script>
<script>
const { isAdmin } = LS.initPage();
lucide.createIcons();
if (isAdmin) {
document.getElementById('tg-admin-content').style.display = '';
document.getElementById('tg-nav-admin').style.display = '';
}
/* ── Chapter metadata ── */
const CHAPTERS = [
{ id:'ch-1', label:'Быстрый старт', icon:'rocket', sections:['s-1-1','s-1-2','s-1-3','s-1-4'], sLabels:['Первый вход','Интерфейс','Первый класс','Чеклист'] },
{ id:'ch-2', label:'Управление классами', icon:'graduation-cap', sections:['s-2-1','s-2-2','s-2-3','s-2-4'], sLabels:['Создание класса','Приглашение','Состав и удаление','Обновление кода'] },
{ id:'ch-3', label:'Банк вопросов', icon:'database', sections:['s-3-1','s-3-2','s-3-3'], sLabels:['Создание вопроса','Типы вопросов','Дублирование и импорт'] },
{ id:'ch-4', label:'Задания и тесты', icon:'clipboard-check', sections:['s-4-1','s-4-2','s-4-3','s-4-4'], sLabels:['Создание задания','Параметры','Результаты и статистика','Кому: класс / ученик / личный список'] },
{ id:'ch-5', label:'Онлайн-урок', icon:'presentation', sections:['s-5-1','s-5-2','s-5-3','s-5-4','s-5-5','s-5-6'], sLabels:['Запуск и завершение','Инструменты доски','Страницы и шаблоны','Zoom и темы','Чат и видеосвязь','Гостевая ссылка'] },
{ id:'ch-6', label:'Библиотека материалов', icon:'book-open', sections:['s-6-1','s-6-2'], sLabels:['Загрузка файлов','Папки и доступ'] },
{ id:'ch-7', label:'Редактор уроков', icon:'file-edit', sections:['s-7-1','s-7-2'], sLabels:['Создание урока','Типы блоков'] },
{ id:'ch-8', label:'Аналитика', icon:'bar-chart-2', sections:['s-8-1','s-8-2'], sLabels:['Дашборд аналитики','Профиль ученика'] },
{ id:'ch-9', label:'Журнал оценок', icon:'table', sections:['s-9-1'], sLabels:['Таблица и экспорт'] },
{ id:'ch-10', label:'Live-квиз', icon:'radio', sections:['s-10-1','s-10-2'], sLabels:['Создание сессии','Управление'] },
{ id:'ch-11', label:'Учебники', icon:'book-open-text', sections:['s-11-1','s-11-2','s-11-3','s-11-4'], sLabels:['Каталог','Чтение и отметки','Назначить как ДЗ','Прогресс класса'] },
{ id:'ch-12', label:'Экзамен 9 класс', icon:'clipboard-check', sections:['s-12-1','s-12-2','s-12-3'], sLabels:['Что внутри','Назначить вариант','Режим подготовки'] },
{ id:'ch-13', label:'Мои ученики', icon:'user-plus', sections:['s-13-1','s-13-2','s-13-3','s-13-4'], sLabels:['Когда нужно','Добавить ученика','Назначение','Удаление и заметки'] },
{ id:'ch-14', label:'Виртуальная лаборатория', icon:'flask-conical', sections:['s-14-1','s-14-2','s-14-3'], sLabels:['40 симуляций','Связь с учебниками','Стереометрия 3D'] },
{ id:'ch-15', label:'Биохимия', icon:'atom', sections:['s-15-1','s-15-2','s-15-3'], sLabels:['Молекулярный редактор','Библиотека и свойства','Реакции и пути'] },
{ id:'ch-16', label:'Геймификация и питомец', icon:'zap', sections:['s-16-1','s-16-2'], sLabels:['XP и достижения','Виртуальный питомец'] },
{ id:'ch-17', label:'Доступ к контенту', icon:'shield-check', sections:['s-17-1','s-17-2','s-17-3'], sLabels:['Открытие учебников классу','Feature Flags','System Health'] },
{ id:'ch-18', label:'Квантик-ассистент', icon:'sparkles', sections:['s-18-1','s-18-2','s-18-3'], sLabels:['Что умеет','Спроси Квантика','Подсказки на экзамене'] },
{ id:'ch-19', label:'Флэшкарты', icon:'copy', sections:['s-19-1','s-19-2','s-19-3'], sLabels:['Колоды и карточки','Картинки и формулы','Импорт и генерация ИИ'] },
{ id:'ch-20', label:'Ещё модули платформы', icon:'grid-3x3', sections:['s-20-1','s-20-2','s-20-3','s-20-4'], sLabels:['Карта знаний и Теория','Игры: Кроссворд, Виселица','Красная книга и Коллекция','Материалы, Магазин, Родители'] },
{ id:'ch-21', label:'Конструктор симуляций', icon:'pencil-ruler', sections:['s-21-1','s-21-2','s-21-3','s-21-4','s-21-5','s-21-6','s-21-7','s-21-8'], sLabels:['Что это и где','Рабочее поле','Параметры','Объекты и формулы','Стиль и порядок','Физика','Графики','Сохранение и раздача'] },
];
const ADMIN_CHAPTERS = [
{ id:'ch-a1', label:'Командный центр', icon:'layout-dashboard', sections:['s-a1-1','s-a1-2','s-a1-3'], sLabels:['Дашборд администратора','Очередь триажа','Лента и статистика'] },
{ id:'ch-a2', label:'Управление пользователями', icon:'users', sections:['s-a2-1','s-a2-2','s-a2-3'], sLabels:['Список и фильтры','Карточка пользователя','Глобальный поиск'] },
{ id:'ch-a3', label:'Контент и доступ', icon:'book-lock', sections:['s-a3-1','s-a3-2','s-a3-3'], sLabels:['Allowlist учебников','Симуляции','Feature Flags'] },
{ id:'ch-a4', label:'Геймификация (admin)', icon:'zap', sections:['s-a4-1','s-a4-2','s-a4-3'], sLabels:['Статистика','Начисление XP/монет','Сброс прогресса'] },
{ id:'ch-a5', label:'Аудит и безопасность', icon:'file-text', sections:['s-a5-1','s-a5-2','s-a5-3'], sLabels:['Аудит-лог','Разрешения RBAC','Модерация аватаров'] },
{ id:'ch-a6', label:'System Health', icon:'activity', sections:['s-a6-1','s-a6-2'], sLabels:['Метрики сервера','HTTP-статистика'] },
{ id:'ch-a7', label:'Помощник Квантик (ИИ)', icon:'sparkles', sections:['s-a7-1','s-a7-2','s-a7-3'], sLabels:['Провайдеры и failover','Модели и лимиты','RAG и статистика'] },
];
const ALL_CHAPTERS = () => isAdmin ? [...CHAPTERS, ...ADMIN_CHAPTERS] : CHAPTERS;
/* ── Render nav ── */
function buildNavItem(ch, label, container, extraClass) {
const div = document.createElement('div');
div.className = 'tg-nav-chapter' + (extraClass ? ' ' + extraClass : '');
div.dataset.ch = ch.id;
div.innerHTML = `
<button class="tg-nav-ch-btn" onclick="navChapterClick('${ch.id}',this)">
<span class="tg-nav-ch-icon"><i data-lucide="${ch.icon}"></i></span>
<span class="tg-nav-ch-label">${label}</span>
<span class="tg-nav-ch-status"><i data-lucide="check"></i></span>
<span class="tg-nav-ch-chevron"><i data-lucide="chevron-right"></i></span>
</button>
<div class="tg-nav-sections">
${ch.sections.map((sid, si) => `<a class="tg-nav-sec-link" data-sec="${sid}" onclick="scrollToSection('${sid}')">${ch.sLabels[si]}</a>`).join('')}
</div>`;
container.appendChild(div);
}
const navContainer = document.getElementById('tg-nav-chapters');
CHAPTERS.forEach((ch, ci) => buildNavItem(ch, (ci+1) + '. ' + ch.label, navContainer, ''));
if (isAdmin) {
const adminNavContainer = document.getElementById('tg-nav-admin-chapters');
ADMIN_CHAPTERS.forEach((ch, ci) => buildNavItem(ch, 'A' + (ci+1) + '. ' + ch.label, adminNavContainer, 'admin'));
}
lucide.createIcons();
/* ── Chapter switching ── */
const scrollEl = document.getElementById('tg-scroll');
const progBar = document.getElementById('tg-prog-bar');
const tgContent = document.querySelector('.tg-content');
let _activeChId = null;
function showChapter(chId, sectionId) {
const newEl = document.getElementById(chId);
if (!newEl) return;
if (_activeChId) {
const prev = document.getElementById(_activeChId);
if (prev) prev.classList.remove('tg-active');
}
newEl.classList.add('tg-active');
_activeChId = chId;
history.replaceState(null, '', '#' + chId);
scrollEl.scrollTop = 0;
if (sectionId) {
requestAnimationFrame(() => {
const sec = document.getElementById(sectionId);
if (sec) {
const top = sec.offsetTop - 80;
scrollEl.scrollTo({ top, behavior: 'smooth' });
}
});
}
// Nav: highlight active chapter, open its sub-list
document.querySelectorAll('.tg-nav-chapter').forEach(div => {
const isThis = div.dataset.ch === chId;
div.querySelector('.tg-nav-ch-btn').classList.toggle('active', isThis);
if (isThis && !div.classList.contains('open')) div.classList.add('open');
});
document.querySelectorAll('.tg-nav-sec-link').forEach(a => a.classList.remove('active'));
markRead(chId);
}
function scrollToChapter(chId) { showChapter(chId); }
function scrollToSection(secId) {
const ch = ALL_CHAPTERS().find(c => c.sections.includes(secId));
if (ch) showChapter(ch.id, secId);
}
function navChapterClick(chId, btn) {
btn.closest('.tg-nav-chapter').classList.toggle('open');
showChapter(chId);
}
/* ── Read tracking ── */
const READ_KEY = 'ls_tg_read';
let readChapters = JSON.parse(localStorage.getItem(READ_KEY) || '[]');
function markRead(chId) {
if (!readChapters.includes(chId)) {
readChapters.push(chId);
localStorage.setItem(READ_KEY, JSON.stringify(readChapters));
}
updateReadUI();
}
function updateReadUI() {
document.querySelectorAll('.tg-nav-chapter').forEach(div => {
div.querySelector('.tg-nav-ch-btn').classList.toggle('read', readChapters.includes(div.dataset.ch));
});
const n = readChapters.length;
const total = ALL_CHAPTERS().length;
document.getElementById('tg-prog-text').textContent = `${n} из ${total} глав прочитано`;
progBar.style.width = Math.round(n / total * 100) + '%';
}
updateReadUI();
/* ── Checklist ── */
const CL_KEY = 'ls_tg_checklist';
const clState = JSON.parse(localStorage.getItem(CL_KEY) || '{}');
document.querySelectorAll('.tg-cl-item').forEach(item => {
const id = item.dataset.id;
const cb = item.querySelector('input');
if (clState[id]) { cb.checked = true; item.classList.add('checked'); }
cb.addEventListener('change', () => {
clState[id] = cb.checked;
item.classList.toggle('checked', cb.checked);
localStorage.setItem(CL_KEY, JSON.stringify(clState));
updateChecklist();
});
item.querySelector('.tg-cl-link')?.addEventListener('click', e => e.stopPropagation());
});
function updateChecklist() {
const total = document.querySelectorAll('.tg-cl-item').length;
const done = document.querySelectorAll('.tg-cl-item input:checked').length;
document.getElementById('cl-prog').textContent = `${done} / ${total}`;
document.getElementById('cl-bar').style.width = Math.round(done / total * 100) + '%';
}
updateChecklist();
/* ── Accordion ── */
function toggleAcc(head) {
head.closest('.tg-acc-item').classList.toggle('open');
}
/* ── Search: show all chapters matching query ── */
document.getElementById('tg-search').addEventListener('input', function() {
const q = this.value.trim().toLowerCase();
if (!q) {
tgContent.classList.remove('tg-search-mode');
document.querySelectorAll('.tg-chapter, .tg-section').forEach(el => el.classList.remove('search-hidden'));
return;
}
tgContent.classList.add('tg-search-mode');
document.querySelectorAll('.tg-section').forEach(sec => {
sec.classList.toggle('search-hidden', !sec.textContent.toLowerCase().includes(q));
});
document.querySelectorAll('.tg-chapter').forEach(ch => {
ch.classList.toggle('search-hidden', ch.querySelectorAll('.tg-section:not(.search-hidden)').length === 0);
});
});
/* ── Init from hash or default ch-1 ── */
const initHash = location.hash.replace('#', '');
showChapter(ALL_CHAPTERS().find(c => c.id === initHash) ? initHash : 'ch-1');
</script>
</body>
</html>