@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');

:root{
  --green:#15453F;
  --cream:#F8F9F4;
  --ink:#15453F;
  --muted:#4d6a63;
  --ok:#1f8f4e;
  --bad:#c0392b;
  --border:#15453F;
}
*{box-sizing:border-box;}
html,body{margin:0;padding:0;max-width:100%;overflow-x:hidden;}
body{
  font-family:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Arial,sans-serif;
  background:var(--cream);
  color:var(--ink);
  line-height:1.6;
  min-height:100vh;
}
a{color:var(--green);}

/* ===== ШАПКА — round 10: по прямому запросу Максима лого стоит СЛЕВА, а кнопки аккаунта
   (Личный кабинет / Войти / Выйти) — СПРАВА в той же строке (раньше было лого по центру и
   отдельная узкая подложка .advent-subnav под шапкой — подложка убрана целиком, «На основной
   сайт» тоже удалена). Это осознанная правка ТОЛЬКО для авторизованных экранов кабинета/урока —
   публичный сайт school-advent-academy.ru свою вёрстку с центрированным лого не меняет.
   На мобильном (см. медиа-запрос ниже) кнопки сворачиваются в сендвич-меню. ===== */
/* round 11 ФИКС: round 10 сделал .advent-header justify-content:space-between НА ВСЮ ширину
   экрана — на широких мониторах лого оказывалось у самого левого края, а кнопки у самого
   правого, тогда как реальный контент (.main) занимает только центральную колонку 900px —
   визуально «два разных мира». Жалоба Максима: «не по углам нужно распихать логотипы и
   кнопки, а по ширине полезной информации». Фикс — тот же приём, что раньше был у убранной
   .advent-subnav-inner (max-width:900px;margin:0 auto): заворачиваем лого+кнопки во
   внутренний .advent-header-inner той же ширины, что и .main, а не во всю .advent-header. */
.advent-header{
  padding:14px 24px;position:sticky;top:0;background-color:var(--green);z-index:1000;
  border-bottom:1px solid rgba(248,249,244,.15);
}
.advent-header-inner{
  max-width:900px;margin:0 auto;display:flex;justify-content:space-between;align-items:center;gap:16px;width:100%;
}
.advent-logo-link{display:inline-flex;align-items:center;text-decoration:none;transition:.3s ease;flex:none;}
.advent-logo-link:hover{transform:translate(-3px,-3px);filter:drop-shadow(6px 6px 0 rgba(248,249,244,.2));}
.advent-logo-img{display:block;width:110px;height:46px;object-fit:contain;image-rendering:auto;}

.advent-header-actions{display:flex;align-items:center;gap:22px;}
.advent-header-link{
  color:var(--cream) !important;text-decoration:none !important;font-size:12px;font-weight:600;
  text-transform:uppercase;letter-spacing:.8px;white-space:nowrap;opacity:.92;
}
.advent-header-link:hover{opacity:1;text-decoration:underline !important;}

/* Бургер — скрыт на десктопе (кнопки видны прямо в шапке), появляется по медиа-запросу ниже */
.advent-header-burger{
  display:none;flex-direction:column;justify-content:center;gap:5px;
  width:34px;height:34px;padding:0;border:none;background:transparent;cursor:pointer;flex:none;
}
.advent-header-burger span{display:block;width:100%;height:2px;background:var(--cream);border-radius:2px;transition:.2s ease;}
.advent-header-burger.open span:nth-child(1){transform:translateY(7px) rotate(45deg);}
.advent-header-burger.open span:nth-child(2){opacity:0;}
.advent-header-burger.open span:nth-child(3){transform:translateY(-7px) rotate(-45deg);}

@media (max-width:600px){
  .advent-header-burger{display:flex;}
  .advent-header-actions{
    display:none;position:absolute;top:100%;right:0;left:0;flex-direction:column;
    align-items:flex-start;gap:0;background:var(--green);
    border-bottom:1px solid rgba(248,249,244,.15);padding:6px 24px 14px;
  }
  .advent-header-actions.open{display:flex;}
  .advent-header-actions .advent-header-link{padding:10px 0;width:100%;}
}

/* ===== кабинет: шаги Урок / Тренажёр / Куратор ===== */
.cabinet-nav{background:var(--green);border-bottom:1px solid rgba(248,249,244,.15);}
.cabinet-nav-inner{max-width:900px;margin:0 auto;padding:0 24px;display:flex;gap:4px;overflow-x:auto;}
.cabinet-tab{
  display:flex;align-items:center;gap:8px;padding:14px 6px;margin-right:22px;
  text-decoration:none !important;color:#cfe0da;font-weight:600;font-size:14px;
  border-bottom:3px solid transparent;white-space:nowrap;
}
.cabinet-tab .n{
  width:20px;height:20px;border-radius:50%;background:rgba(248,249,244,.18);color:#F8F9F4;
  font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center;flex:none;
}
.cabinet-tab.active{color:#F8F9F4;border-bottom-color:#F8F9F4;}
.cabinet-tab.active .n{background:#F8F9F4;color:var(--green);}
.cabinet-tab.disabled{opacity:.4;pointer-events:none;}

/* ===== кабинет: шаги Урок / Тренажёр / Куратор ===== */
.cabinet-nav{background:var(--green);border-bottom:1px solid rgba(248,249,244,.15);}
.cabinet-nav-inner{max-width:900px;margin:0 auto;padding:0 24px;display:flex;gap:4px;overflow-x:auto;}
.cabinet-tab{
  display:flex;align-items:center;gap:8px;padding:14px 6px;margin-right:22px;
  text-decoration:none !important;color:#cfe0da;font-weight:600;font-size:14px;
  border-bottom:3px solid transparent;white-space:nowrap;
}
.cabinet-tab .n{
  width:20px;height:20px;border-radius:50%;background:rgba(248,249,244,.18);color:#F8F9F4;
  font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center;flex:none;
}
.cabinet-tab.active{color:#F8F9F4;border-bottom-color:#F8F9F4;}
.cabinet-tab.active .n{background:#F8F9F4;color:var(--green);}
.cabinet-tab.disabled{opacity:.4;pointer-events:none;}

main{max-width:900px;margin:0 auto;padding:32px 24px 100px;width:100%;}

/* --- Карточка входа/регистрации (index.html) — round 7: раньше .card держала свой
   max-width БЕЗ margin:auto, поэтому внутри центрированного .main (900px) сама карточка
   съезжала к левому краю и не совпадала с центром лого в шапке. Теперь центр общий. --- */
.auth-wrap{max-width:420px;margin:0 auto;}

.breadcrumb{font-size:13px;color:var(--muted);margin-bottom:16px;}
.breadcrumb a{color:var(--muted);text-decoration:none;}
.breadcrumb a:hover{text-decoration:underline;}

h1{font-family:'Times New Roman',serif;font-size:28px;font-weight:700;margin:0 0 10px;color:var(--green);letter-spacing:.2px;text-transform:uppercase;line-height:1.12;}
h2{font-size:16px;font-weight:700;margin:24px 0 10px;color:var(--green);text-transform:uppercase;letter-spacing:.4px;}
p{margin:0 0 12px;word-wrap:break-word;}
.lead{color:var(--muted);font-size:15px;}

.card{background:var(--cream);border:1px solid var(--green);border-radius:8px;padding:24px;margin-bottom:20px;transition:all .3s ease;}
.card:hover{box-shadow:0 16px 40px rgba(21,69,63,.14);transform:translateY(-4px);border-color:#FFD5ED;}

.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  font-family:inherit;background:var(--green);color:var(--cream);border:1px solid var(--green);
  border-radius:10px;padding:18px 38px;font-size:13px;font-weight:600;letter-spacing:1.5px;
  text-transform:uppercase;cursor:pointer;text-decoration:none !important;transition:all .3s ease;
}
.btn:hover{background:transparent;color:var(--green);}
.btn:disabled{opacity:.4;cursor:default;}
.btn.ghost{background:transparent;color:var(--green);border:1px solid var(--green);}
.btn.ghost:hover{background:var(--green);color:var(--cream);}
.btn.small{padding:11px 22px;font-size:12px;}
.btn.block{width:100%;}

label.field-label{display:block;font-size:12px;font-weight:700;color:var(--green);text-transform:uppercase;letter-spacing:.4px;margin:0 0 6px;}
input[type=text],input[type=email],input[type=password],input[type=date],textarea{
  width:100%;padding:13px 16px;border:1px solid var(--green);border-radius:2px;
  font-family:inherit;font-size:15px;background:var(--cream);color:var(--ink);
}
textarea{resize:vertical;}
input:focus,textarea:focus{outline:2px solid var(--green);outline-offset:1px;}
input:disabled{opacity:.6;cursor:default;}
select{
  width:100%;padding:13px 16px;border:1px solid var(--green);border-radius:2px;
  font-family:inherit;font-size:15px;background:var(--cream);color:var(--ink);
}
select:focus{outline:2px solid var(--green);outline-offset:1px;}
.field{margin-bottom:14px;}
.field-row{display:flex;gap:12px;}
.field-row .field{flex:1;}
/* round 15: пол в профиле — два радио-варианта в один ряд, высота как у обычного поля */
.cab-radio-row{display:flex;gap:18px;align-items:center;padding:13px 0;}
.cab-radio{display:flex;align-items:center;gap:6px;font-size:14px;color:var(--ink);cursor:pointer;font-weight:normal;text-transform:none;letter-spacing:normal;}
.cab-radio input{width:auto;margin:0;}

.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center;}

/* round 11c: настоящий профиль (аватар + редактируемые поля + привязанные каналы + устройства) —
   заменяет собой прежнюю пустую карточку «Здравствуйте!». */
.cab-profile-top{display:flex;gap:24px;flex-wrap:wrap;margin-bottom:18px;}
.cab-avatar-wrap{display:flex;flex-direction:column;align-items:center;gap:8px;width:120px;flex-shrink:0;}
.cab-avatar{
  width:96px;height:96px;border-radius:50%;object-fit:cover;border:2px solid var(--green);background:var(--green);
}
.cab-avatar-placeholder{
  display:flex;align-items:center;justify-content:center;color:var(--cream);
  font-family:'Times New Roman',serif;font-size:36px;font-weight:700;
}
.cab-avatar-btn{cursor:pointer;text-align:center;width:100%;box-sizing:border-box;}
.cab-avatar-hint{font-size:11px;color:var(--muted);text-align:center;}
.cab-profile-fields{flex:1;min-width:260px;}
.cab-save-msg{font-size:13px;color:var(--muted);}
.cab-profile-linked{
  display:flex;gap:24px;flex-wrap:wrap;padding:14px 0;margin:4px 0 4px;
  border-top:1px solid rgba(21,69,63,.15);border-bottom:1px solid rgba(21,69,63,.15);
}
.cab-linked-item{font-size:14px;color:var(--ink);}
.cab-linked-label{font-weight:700;color:var(--green);margin-right:8px;}

.cab-session-row{
  display:flex;justify-content:space-between;align-items:center;gap:14px;flex-wrap:wrap;
  padding:12px 0;border-bottom:1px solid rgba(21,69,63,.12);
}
.cab-session-row:last-child{border-bottom:none;}
.cab-session-device{font-weight:600;color:var(--ink);font-size:14.5px;}
.cab-session-meta{font-size:12.5px;color:var(--muted);margin-top:2px;}

.notice{background:var(--cream);border:1px solid #eddca0;color:#6b4e00;border-radius:2px;padding:12px 14px;font-size:14px;margin-bottom:16px;}
.notice.error{border-color:var(--bad);color:var(--bad);}
.notice.ok{border-color:var(--ok);color:var(--ok);}

/* round 7: раньше .conspect имел СВОЮ рамку+фон внутри .card, у которой уже есть своя
   рамка+фон — получались две вложенные зелёные рамки вплотную друг к другу («двойные
   рамки»). Теперь рамка одна — от внешней .card, конспект — просто типографика внутри. */
.conspect{font-size:15px;}
.conspect p:last-child{margin-bottom:0;}
.conspect h3{color:var(--green);font-family:'Times New Roman',serif;font-size:18px;margin:18px 0 8px;}
.conspect h3:first-child{margin-top:0;}
.conspect ul{margin:0 0 12px;padding-left:20px;}
.conspect li{margin-bottom:6px;}
.conspect .ex{color:var(--muted);font-style:italic;}

.video-wrap{position:relative;background:var(--green);border-radius:2px;overflow:hidden;margin-bottom:20px;}
.video-wrap video{display:block;width:100%;height:auto;background:#000;}
/* 13.08.2026: пока Bunny-плеер грузится внутри iframe, снаружи было видно некрасивый
   тёмно-зелёный прямоугольник .video-wrap (фон рассчитан на old self-hosted <video>).
   Для Bunny-embed своя обёртка: светлый фон + текст "Загрузка..." под iframe, который
   закрывает его как только реально отрисуется. */
.video-wrap--bunny{background:var(--cream);}
/* оверлей поверх iframe (не под ним!) - у cross-origin Bunny-iframe свой непрозрачный
   документ, он перекрывает всё что "под" ним ещё до того как реально отрисует плеер,
   поэтому текст загрузки должен быть СВЕРХУ и гаснуть по событию iframe.onload (лучший
   доступный сигнал без интеграции Bunny Player.js SDK - см. комментарий в lesson.html). */
.video-loading-overlay{position:absolute;inset:0;background:var(--cream);display:flex;
  align-items:center;justify-content:center;z-index:2;color:var(--green);opacity:.7;
  font-family:'Inter',sans-serif;font-size:15px;transition:opacity .3s ease;pointer-events:none;}

.quiz-opt{display:flex;gap:8px;align-items:flex-start;margin:8px 0;font-size:14px;cursor:pointer;}
.quiz-opt input{margin-top:3px;}

.feedback{border-radius:2px;padding:12px 14px;margin-top:12px;font-size:14px;font-weight:700;border:1px solid transparent;}
.feedback.ok{border-color:var(--ok);color:var(--ok);}
.feedback.bad{border-color:var(--bad);color:var(--bad);}

/* --- Уроко-тренажёр — 1:1 экран как в боевом голосовом тренажёре (app/static/index.html):
   строка прогресса «Фраза N из total», фраза в подсвеченной рамке (Times New Roman),
   кнопка микрофона рядом с полем ответа, фидбек НЕ пропадает по таймеру — держится,
   пока не нажата «Следующая фраза →». --- */
.trainer-progress{font-size:13px;color:var(--muted);margin-bottom:4px;text-transform:uppercase;letter-spacing:.8px;}
.trainer-prompt{
  background:rgba(21,69,63,.06);border-radius:12px;padding:18px;font-size:19px;
  font-weight:600;margin:8px 0 16px;color:var(--green);font-family:'Times New Roman',serif;
}
.trainer-answer-row{display:flex;gap:10px;flex-wrap:wrap;align-items:stretch;}
.trainer-answer-row input{flex:1;min-width:180px;}
.mic-btn{
  display:inline-flex;align-items:center;gap:6px;background:transparent;color:var(--green);
  border:1px solid var(--green);border-radius:10px;padding:0 16px;font-family:inherit;font-size:12px;
  font-weight:600;text-transform:uppercase;letter-spacing:.6px;cursor:pointer;transition:all .25s ease;white-space:nowrap;
}
.mic-btn:hover{background:var(--green);color:var(--cream);}
.mic-btn.listening{background:var(--bad);border-color:var(--bad);color:#fff;}
.mic-btn.unsupported{display:none;}
.trainer-feedback{margin-top:14px;padding:14px;border-radius:12px;font-size:15px;}
.trainer-feedback.ok{background:rgba(21,69,63,.06);border:1px solid rgba(21,69,63,.25);color:var(--green);}
.trainer-feedback.bad{background:#FBF3EA;border:1px solid #E6CBA6;color:#7A4A1E;}
.trainer-feedback b{display:block;margin-bottom:4px;}
.trainer-topic-badge{font-size:12px;color:var(--muted);margin-top:10px;}

.result-card{border-radius:2px;padding:26px;text-align:center;margin-top:16px;border:1px solid var(--border);}
.result-card.confirmed{border-color:var(--ok);}
.result-card.weak{border-color:#c98a1d;}
.result-card.other{border-color:var(--border);}
.result-card .big{font-family:'Times New Roman',serif;font-size:22px;font-weight:700;margin-bottom:8px;color:var(--green);}

.chat-log{max-height:360px;overflow-y:auto;padding:4px;margin-bottom:14px;}
.msg{padding:12px 16px;border-radius:2px;margin-bottom:10px;font-size:14px;max-width:85%;white-space:pre-wrap;word-wrap:break-word;border:1px solid var(--border);}
.msg.user{background:var(--green);color:#F8F9F4;margin-left:auto;border-color:var(--green);}
.msg.assistant{background:var(--cream);}

.mini-hero{background:var(--cream);padding:48px 24px 20px;border-bottom:1px solid rgba(21,69,63,.12);}
/* round 8: .main/.auth-wrap/.card уже центрированы контейнером (round 7), но ТЕКСТ внутри
   .mini-hero-inner (h1 и .lead) — обычный блочный текст, он остаётся у левого края СВОЕГО
   контейнера, а не «уезжает», просто не совпадает по центру с центрированной колонкой ниже
   — из-за этого страница выглядит несимметричной. Контейнер ≠ выравнивание текста внутри
   него — это два разных CSS-свойства, и центрируя контейнер, текст внутри не центрируешь
   автоматически. Фикс: явный text-align:center на весь блок мини-шапки. */
.mini-hero-inner{max-width:900px;margin:0 auto;text-align:center;}
.mini-hero h1{color:var(--green) !important;}
.mini-hero .lead{color:var(--muted);font-size:17px;}

.authtabs{display:flex;gap:6px;margin-bottom:20px;background:var(--green);border-radius:2px;padding:4px;}
.authtab{
  flex:1;text-align:center;padding:11px;border-radius:2px;font-weight:700;font-size:13px;
  cursor:pointer;color:#cfe0da;text-transform:uppercase;letter-spacing:.3px;user-select:none;
}
.authtab.active{background:var(--cream);color:var(--green);}

details.techlog{margin-top:30px;}
details.techlog summary{cursor:pointer;color:var(--muted);font-size:12px;}
.log-box{background:#0d1f1c;color:#9fd8bb;font-size:11px;padding:10px;border-radius:2px;max-height:180px;overflow:auto;white-space:pre-wrap;margin-top:8px;}

.hidden{display:none !important;}

/* --- Тест «собери вопрос из слов» — портирован 1:1 с реальной страницы урока
   (data-answer/word-pool/drop-zone/check-btn/reset-btn), включая размеры кнопок,
   скругление 22px и hover-эффект офсет-тени. Никакой отдельной «отправки результата» —
   в оригинале каждое задание проверяется само по себе, фидбек не пропадает по таймеру. --- */
.wq-section-title{font-family:'Times New Roman',serif;font-size:15px;font-weight:700;color:var(--green);text-transform:uppercase;letter-spacing:.3px;margin:22px 0 4px;}
.wq-section-title:first-child{margin-top:0;}
.wq-section-sub{color:var(--muted);font-size:13px;margin:0 0 16px;}
.wq-item{margin-bottom:28px;padding-bottom:22px;border-bottom:1px dashed rgba(21,69,63,.15);}
.wq-item:last-child{margin-bottom:0;border-bottom:none;padding-bottom:0;}
.wq-badge{background:var(--green);color:var(--cream);width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:50%;font-size:14px;font-weight:600;margin-bottom:12px;}
.wq-pool,.wq-zone{display:flex;flex-wrap:wrap;gap:10px;min-height:52px;padding:16px;border-radius:8px;margin-bottom:14px;border:1px solid var(--green);}
.wq-pool{background:rgba(21,69,63,.05);}
.wq-zone{background:var(--cream);border-style:dashed;}
.wq-card{background:var(--cream);border:1px solid var(--green);padding:8px 14px;border-radius:6px;cursor:pointer;user-select:none;font-size:15px;font-weight:500;color:var(--ink);transition:all .15s ease;}
.wq-card:hover{box-shadow:3px 3px 0 var(--green);transform:translate(-1px,-1px);}
.wq-card:active{transform:translate(0,0);box-shadow:none;}
.wq-row{display:flex;align-items:flex-start;gap:8px;}
.wq-mark{font-size:16px;font-weight:600;color:var(--green);padding-top:16px;}
.wq-btns{display:flex;gap:10px;flex-wrap:wrap;}
.wq-btns button{
  padding:12px 30px;border-radius:22px;cursor:pointer;font-family:inherit;font-size:13px;
  font-weight:600;text-transform:uppercase;letter-spacing:.8px;border:1px solid var(--green);
  background:transparent;color:var(--green);transition:all .3s ease;
}
.wq-btns button.wq-check{background:var(--green);color:var(--cream);}
.wq-btns button.wq-check:hover{background:var(--cream);color:var(--green);box-shadow:4px 4px 0 var(--green);transform:translate(-2px,-2px);}
.wq-btns button.wq-reset:hover{background:rgba(21,69,63,.05);box-shadow:4px 4px 0 var(--green);transform:translate(-2px,-2px);}
.wq-feedback{margin-top:10px;font-weight:600;font-size:14px;min-height:20px;}
.wq-feedback.ok{color:#1f8f4e;}
.wq-feedback.bad{color:#c0392b;}

/* --- Вход через Telegram (index.html) --- */
.or-divider{display:flex;align-items:center;gap:12px;margin:18px 0;color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.6px;}
.or-divider::before,.or-divider::after{content:"";flex:1;height:1px;background:rgba(21,69,63,.2);}
.tg-login-wrap{display:flex;justify-content:center;min-height:44px;align-items:center;}
.tg-login-fallback{display:block;text-align:center;margin-top:10px;font-size:12px;color:var(--muted);text-decoration:underline;cursor:pointer;}

/* --- ИИ-куратор — 1:1 порт реального виджета getcourse_injection.js (те же классы,
   отступы, радиусы, шрифты — не приблизительная копия). На узкой центрированной колонке
   (.main 900px) сайдбар НЕ сдвигает контент (раньше это ломало центрирование конспекта/видео
   на обычных ноутбучных экранах) — он показывается только там, где для него объективно есть
   место в правом отступе БЕЗ сдвига страницы (от 1600px), иначе — мобильный FAB+шторка,
   как и в оригинале ниже 769px. --- */
/* round 7: раньше сайдбар держался за ПРАВЫЙ КРАЙ ЭКРАНА (right:20px) — на широких мониторах
   центрированная колонка контента (.main 900px) остаётся у центра, а сайдбар «уезжал» далеко
   вправо, к самому краю. Теперь сайдбар считает позицию от центра страницы (там же, где правый
   край .main), поэтому всегда прижат к контенту на 20px, независимо от ширины экрана. Также
   расширен (320→380px) по просьбе — на десктопе места достаточно. */
.curator-sidebar-desktop{
  position:fixed;top:80px;left:calc(50% + 470px);width:380px;font-family:'Times New Roman',Times,serif;z-index:900;
}
.curator-sidebar-desktop > div{
  /* 13.08.2026 ФИКС («дизайн урок неверный, белый цвет мы не используем»): панель куратора
     была на чистом #fff — единственное белое пятно на всей кремовой (--cream #F8F9F4) странице
     курса. Канон палитры (brand.rule.canonical-color-palette): фон #F8F9F4, тёмно-зелёный
     #15453F, розовый #FFD5ED только для акцентов — белый (#fff/#ffffff) в интерфейсе не
     используется вообще. */
  background:var(--cream);border-radius:12px;padding:20px;box-shadow:0 4px 16px rgba(0,0,0,.12);
  display:flex;flex-direction:column;max-height:75vh;overflow:hidden;
}
.curator-head{display:flex;align-items:center;margin-bottom:16px;padding-bottom:12px;border-bottom:2px solid #f0f0f0;gap:10px;}
.curator-avatar{width:36px;height:36px;background:var(--green);border-radius:8px;display:flex;align-items:center;justify-content:center;flex-shrink:0;overflow:hidden;}
.curator-avatar img{width:36px;height:36px;display:block;border-radius:6px;}
.curator-head h3{font-size:17px;font-weight:700;color:var(--green);margin:0;font-family:'Inter',sans-serif;text-transform:none;}
.curator-head p{font-size:12px;color:#999;margin:2px 0 0;}
.curator-chat{flex:1;overflow-y:auto;margin-bottom:12px;background:var(--cream);border-radius:8px;padding:12px;display:flex;flex-direction:column;gap:10px;font-family:'Times New Roman',Times,serif;min-height:120px;}
.curator-msg{display:flex;gap:8px;}
.curator-msg.user{justify-content:flex-end;align-items:flex-end;}
.curator-msg .av{width:28px;height:28px;min-width:28px;background:var(--green);border-radius:6px;display:flex;align-items:center;justify-content:center;overflow:hidden;}
.curator-msg .av img{width:28px;height:28px;border-radius:4px;display:block;}
.curator-msg .av.av-user{color:var(--cream);font-family:'Inter',sans-serif;font-weight:600;font-size:12px;}
.curator-msg .bub{max-width:calc(100% - 40px);padding:10px 12px;border-radius:6px;font-size:16px;line-height:1.5;word-wrap:break-word;}
.curator-msg .bub.a{background:var(--cream);color:var(--green);border:1px solid #d0e8e5;border-bottom-left-radius:2px;}
.curator-msg .bub.u{background:var(--green);color:#fff;border-bottom-right-radius:2px;}
.curator-msg .bub img{max-width:100%;border-radius:6px;display:block;margin-bottom:6px;}
.curator-imgbar{display:none;align-items:center;gap:8px;margin-bottom:8px;font-family:'Inter',sans-serif;font-size:13px;color:var(--green);}
.curator-imgbar img{width:36px;height:36px;object-fit:cover;border-radius:4px;border:1px solid var(--green);}
.curator-imgbar .rm{cursor:pointer;color:#c0392b;font-weight:700;}
.curator-row{display:flex;gap:8px;}
.curator-row button.attach{background:var(--cream);color:var(--green);border:2px solid #e0e0e0;border-radius:4px;padding:8px 12px;font-size:17px;cursor:pointer;flex-shrink:0;}
.curator-row input[type=text]{flex:1;min-width:0;border:2px solid #e0e0e0;border-radius:4px;padding:10px 12px;font-size:15px;font-family:'Times New Roman',Times,serif;background:#fff;color:var(--ink);}
.curator-row button.send{background:var(--green);color:#fff;border:none;border-radius:4px;padding:10px 16px;font-size:14px;font-weight:600;font-family:'Inter',sans-serif;cursor:pointer;white-space:nowrap;}
.curator-credit{font-family:'Inter',sans-serif;font-size:11px;color:#999;text-align:center;margin-top:8px;padding-top:8px;border-top:1px solid #e0e0e0;}

.curator-fab{position:fixed;bottom:20px;right:20px;width:60px;height:60px;border-radius:50%;background:var(--green);
  display:flex;align-items:center;justify-content:center;overflow:hidden;border:3px solid #fff;
  cursor:pointer;box-shadow:0 4px 16px rgba(21,69,63,.3);z-index:950;transition:opacity .3s ease,visibility .3s ease;}
.curator-fab img{width:100%;height:100%;display:block;border-radius:50%;}
.curator-fab.hidden{opacity:0 !important;visibility:hidden !important;pointer-events:none !important;}
.curator-modal{display:none;position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:999;opacity:0;transition:opacity .3s ease;font-family:'Times New Roman',Times,serif;}
.curator-bottom-sheet{position:absolute;left:0;right:0;bottom:0;max-height:85vh;background:var(--cream);border-radius:16px 16px 0 0;
  padding:20px;display:flex;flex-direction:column;transform:translateY(100%);transition:transform .3s ease;}
/* порог поднят с 1600 до 1740px round 7: при ширине сайдбара 380px и отступе от контента
   на 1740px он всегда целиком помещается на экране, с запасом от края
   (см. CURATOR_SIDEBAR_MIN_WIDTH в app.js — должен совпадать с этим числом). */
@media (max-width:1739px){ .curator-sidebar-desktop{display:none !important;} }
@media (min-width:1740px){ .curator-fab,.curator-modal{display:none !important;} }

/* --- Переход к следующему уроку --- */
.next-lesson-card{text-align:center;padding:26px 24px;}
.next-lesson-card .eyebrow{font-size:11px;text-transform:uppercase;letter-spacing:1.2px;color:var(--muted);margin-bottom:8px;}
.next-lesson-card .title{font-family:'Times New Roman',serif;font-size:20px;font-weight:700;color:var(--green);margin-bottom:16px;}

/* --- Личный кабинет (index.html, авторизован) — round 8: карточка приветствия,
   переиспользует .card, отдельного класса на паддинг/рамку не нужно.
   round 9: кабинет наполнен реальными данными (курсы+прогресс, слабые темы) — стили
   списка уроков и строк слабых тем, без переизобретения — те же токены, что у остального
   сайта (Times New Roman заголовки, зелёный/приглушённый текст, пунктирный разделитель
   как у .wq-item). --- */
.cabinet-greeting{font-family:'Times New Roman',serif;font-size:20px;font-weight:700;color:var(--green);margin:0 0 8px;}
.cabinet-course{color:var(--muted);font-size:15px;margin:0 0 20px;}

.cab-course-title{font-family:'Times New Roman',serif;font-size:17px;font-weight:700;color:var(--green);margin:0 0 6px;}
.cab-course-title:not(:first-child){margin-top:20px;}
.cab-module{font-size:12px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.4px;margin:14px 0 2px;}
.cab-module:first-of-type{margin-top:6px;}
.cab-lesson{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:1px dashed rgba(21,69,63,.15);}
.cab-lesson:last-child{border-bottom:none;}
.cab-lesson a{color:var(--ink);text-decoration:none;font-weight:600;font-size:15px;}
.cab-lesson a:hover{text-decoration:underline;color:var(--green);}
.cab-status{font-size:15px;width:18px;text-align:center;flex:none;}
.cab-status.passed{color:var(--ok);}
.cab-status.progress{color:#c98a1d;}
.cab-status.new{color:var(--muted);}
.cab-weak-item{display:flex;justify-content:space-between;align-items:center;gap:14px;padding:10px 0;border-bottom:1px dashed rgba(21,69,63,.15);}
.cab-weak-item:last-child{border-bottom:none;}
.cab-weak-item span{font-size:15px;font-weight:600;color:var(--ink);}

/* --- round 11: афиша/интенсивы/блог — «дотянуть кабинет по содержанию до /personal-account»
   (реальной страницы GetCourse). Все три блока ведут на живые страницы school-advent-academy.ru
   (target=_blank — переход на другой домен), карточки — те же токены бренда (рамка var(--green),
   hover-сдвиг с тенью, как у .card/.wq-card), просто под сетку вместо списка. --- */
.cab-event-promo{display:flex;justify-content:space-between;align-items:center;gap:20px;flex-wrap:wrap;}
.cab-event-promo-title{font-family:'Times New Roman',serif;font-size:17px;font-weight:700;color:var(--green);margin-bottom:4px;}
.cab-event-promo-text{flex:1;min-width:220px;}

.cab-intensive-grid,.cab-blog-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:14px;margin-top:14px;}
.cab-intensive-card,.cab-blog-card{
  display:block;border:1px solid var(--green);border-radius:8px;padding:16px;
  text-decoration:none !important;transition:all .25s ease;background:var(--cream);
}
.cab-intensive-card:hover,.cab-blog-card:hover{transform:translate(-3px,-3px);box-shadow:6px 6px 0 rgba(21,69,63,.18);}
.cab-intensive-title{font-weight:700;font-size:14.5px;color:var(--ink);margin-bottom:8px;line-height:1.3;}
.cab-intensive-price{font-size:13px;color:var(--muted);font-weight:600;}
.cab-blog-title{font-family:'Times New Roman',serif;font-weight:700;font-size:15.5px;color:var(--green);margin-bottom:6px;}
.cab-blog-desc{font-size:13px;color:var(--muted);line-height:1.4;}

/* ===== round 8: мобильная адаптивность =====
   До этого правила все карточки (.card, .wq-pool/.wq-zone) несли ОДИНАКОВЫЙ паддинг что
   на десктопе, что на телефоне (24px/16px + рамка + border-radius 8px) — на узком экране
   (390-430px реальной ширины) это ощутимая доля экрана уходит просто на внутренние отступы
   и рамки, а не на контент («куча рамок съедает 50% пространства» — жалоба Максима,
   скриншоты 1080×2340). Тот же .card используется и в форме регистрации (index.html), и в
   .wq-pool/.wq-zone теста «собери вопрос» (lesson.html) — правило одно на всех, отдельно
   ничего не дублируем. Ужимаем паддинги/радиусы/шрифты, НЕ трогая структуру и логику. */
@media (max-width:600px){
  main{padding:20px 12px 72px;}
  .mini-hero{padding:28px 14px 14px;}
  h1{font-size:21px;}
  .card{padding:14px;border-radius:6px;}
  .card:hover{transform:none;box-shadow:none;}
  .auth-wrap{max-width:100%;}
  .field-row{gap:8px;}
  .btn{padding:14px 18px;font-size:12px;}
  .authtabs{padding:3px;}
  .wq-pool,.wq-zone{padding:8px;gap:6px;border-radius:6px;min-height:44px;}
  .wq-card{padding:6px 10px;font-size:14px;}
  .wq-item{margin-bottom:18px;padding-bottom:14px;}
  .wq-btns button{padding:10px 18px;font-size:11px;}
  .trainer-prompt{padding:14px;font-size:16px;}
  .curator-sidebar-desktop{display:none !important;}
  .cab-intensive-grid,.cab-blog-grid{grid-template-columns:1fr 1fr;gap:8px;}
  .cab-intensive-card,.cab-blog-card{padding:10px;}
  .cab-event-promo{flex-direction:column;align-items:stretch;}
  .cab-profile-top{flex-direction:column;align-items:center;text-align:center;}
  .cab-avatar-wrap{width:100%;}
}


/* round 25: раньше склейка блоков конспекта делалась инлайновым margin-top:-45px прямо
   в контенте урока — текст наезжал друг на друга. Отрицательные отступы убраны из уроков,
   а стык соседних блоков оформляем здесь, один раз и для всех. */
.theory-container + .theory-container {
    margin-top: 0;
    padding-top: 0;
    border-top: none;
}
.theory-container p { line-height: 1.6; }
.theory-container .highlight-box { margin: 14px 0; line-height: 1.7; }


/* ===== КОНСПЕКТ УРОКА: вёрстка блоков, приехавших с GetCourse ==============
   25.08.2026. Конспекты перенесены из GetCourse ВМЕСТЕ с их разметкой
   (.theory-section, .step-badge, .highlight-bg, .example-row и т.д.), но CSS этих
   классов остался на GetCourse — поэтому урок выглядел сплошным текстом и «хуже,
   чем было». Здесь те же блоки одеты в наш брендовый стиль: нумерованные шаги,
   врезки с примерами, карточки формул, цитаты-предупреждения. =============== */
.conspect .theory-container{display:block;}
.conspect .theory-title{
  font-family:'Times New Roman',Times,serif;font-size:24px;line-height:1.25;
  color:var(--green);margin:0 0 6px;text-transform:uppercase;letter-spacing:.01em;
}
.conspect .theory-subtitle{
  color:var(--muted);font-size:14px;margin:0 0 22px;
}

/* шаг теории: карточка со свето-зелёной подложкой и номером слева */
.conspect .theory-section{
  position:relative;background:#fff;border:1px solid rgba(21,69,63,.14);
  border-radius:16px;padding:20px 22px 18px 56px;margin:0 0 16px;
}
.conspect .theory-section > p:last-child{margin-bottom:0;}
.conspect .step-badge{
  position:absolute;left:16px;top:20px;width:28px;height:28px;border-radius:50%;
  background:var(--green);color:var(--cream);font-weight:800;font-size:14px;
  display:flex;align-items:center;justify-content:center;line-height:1;
}

/* «Например: …» — светлая врезка с зелёной полосой */
.conspect .highlight-bg,
.conspect .highlight-box{
  background:#EEF3F0;border-left:3px solid var(--green);border-radius:10px;
  padding:12px 16px;margin:14px 0;
}
.conspect .highlight-bg p,
.conspect .highlight-box p{margin:0;}
.conspect .highlight-bg em,
.conspect .highlight-box em{color:var(--green);font-style:italic;}

/* формулы и пары примеров */
.conspect .example-row{display:flex;gap:14px;flex-wrap:wrap;margin:14px 0;align-items:flex-start;}
/* в конспектах GetCourse у .example-row часто стоит inline flex-direction:column —
   без align-items карточки формул растягивались на всю высоту строки и выглядели пустыми коробками */
.conspect .example-row .ex-item{align-self:flex-start;flex:0 1 auto;}
/* когда в inline-стиле блока стоит колонка — карточка занимает всю ширину, а не тянется в высоту */
.conspect .example-row[style*="column"] .ex-item{width:100%;}
.conspect .ex-item{
  flex:1 1 240px;background:var(--cream);border:1px dashed rgba(21,69,63,.3);
  border-radius:12px;padding:12px 14px;
}
.conspect .ex-item strong{display:block;color:var(--green);margin-bottom:4px;font-size:13px;
  text-transform:uppercase;letter-spacing:.04em;}
.conspect .ex-item small{font-family:'SFMono-Regular',Menlo,Consolas,monospace;font-size:13.5px;color:var(--ink);}

/* предупреждение «не забывайте, что…» */
.conspect .theory-quote{
  margin:16px 0;padding:14px 18px;border:0;border-left:3px solid #C9A227;
  background:#FBF7E9;border-radius:10px;font-size:14.5px;color:#4A3E1B;
}
.conspect .theory-quote strong{color:#3A3113;}

.conspect .theory-list{margin:12px 0;padding-left:20px;}
.conspect .theory-list li{margin-bottom:8px;}

.conspect table{width:100%;border-collapse:collapse;margin:14px 0;font-size:14px;}
.conspect th,.conspect td{border:1px solid rgba(21,69,63,.16);padding:8px 10px;text-align:left;}
.conspect th{background:var(--green);color:var(--cream);font-weight:700;}
.conspect img{max-width:100%;height:auto;border-radius:12px;}

@media(max-width:560px){
  .conspect .theory-section{padding:18px 16px 14px 46px;}
  .conspect .step-badge{left:12px;top:18px;width:24px;height:24px;font-size:13px;}
  .conspect .theory-title{font-size:20px;}
  .conspect .example-row{flex-direction:column;}
}


/* пропуски в тексте (практика типа «вставь верную форму») */
.cloze-gap{
  display:inline-block;margin:0 4px;padding:4px 8px;border:1px solid rgba(21,69,63,.35);
  border-radius:8px;background:#fff;font-family:inherit;font-size:14px;color:var(--ink);
}
.cloze-gap:focus{outline:none;border-color:#3F7A6F;box-shadow:0 0 0 3px rgba(63,122,111,.16);}
