:root{
  --violet:#5B4BD4; --violet-dark:#4436B3; --violet-tint:#EFEDFB;
  --coral:#FF6B4A; --coral-dark:#E04E2E; --sun:#FFC93C; --sun-dark:#8A6A00;
  --ink:#221E3F; --text:#332F52; --muted:#6E6A8A; --line:#E5E2F2;
  --bg:#FDFCFA; --card:#FFFFFF;
}
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth}
body{font-family:'Manrope',sans-serif;color:var(--text);background:var(--bg);font-size:16.5px;line-height:1.65}
h1,h2,h3{font-family:'Bricolage Grotesque',sans-serif;font-weight:700;color:var(--ink);line-height:1.12}
h1{font-size:46px;letter-spacing:-.01em}
h2{font-size:33px;margin-bottom:14px}
h3{font-size:19px}
.container{max-width:1080px;margin:0 auto;padding:0 24px}
section{padding:88px 0}
.eyebrow{display:inline-block;font-size:12.5px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
  color:var(--violet);background:var(--violet-tint);padding:6px 14px;border-radius:99px;margin-bottom:16px}
.section-sub{color:var(--muted);max-width:600px;margin-bottom:44px}
.squig{position:relative;white-space:nowrap}
.squig svg{position:absolute;left:0;bottom:-8px;width:100%;height:12px}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;font:700 15px 'Manrope',sans-serif;
  border:2px solid transparent;border-radius:99px;height:52px;padding:0 28px;cursor:pointer;text-decoration:none;
  transition:background .18s,border-color .18s,color .18s,transform .1s}
.btn:active{transform:scale(.98)}
.btn:focus-visible{outline:3px solid var(--sun);outline-offset:2px}
.btn-primary{background:var(--violet);color:#fff}
.btn-primary:hover{background:var(--violet-dark)}
.btn-coral{background:var(--coral);color:#fff}
.btn-coral:hover{background:var(--coral-dark)}
.btn-outline{background:transparent;color:var(--violet);border-color:var(--violet)}
.btn-outline:hover{background:var(--violet);color:#fff}
.btn-ghost{background:transparent;color:var(--violet);padding:0 10px}
.btn-ghost:hover{color:var(--coral)}
header{position:sticky;top:0;background:rgba(253,252,250,.93);backdrop-filter:blur(10px);border-bottom:1px solid var(--line);z-index:50}
.nav{height:74px;display:flex;align-items:center;justify-content:space-between}
.logo{font-family:'Bricolage Grotesque',sans-serif;font-size:23px;font-weight:700;color:var(--ink);text-decoration:none}
.logo span{color:var(--coral)}
.nav-links{display:flex;gap:30px;list-style:none}
.nav-links a{color:var(--text);text-decoration:none;font-weight:600;font-size:14.5px}
.nav-links a:hover{color:var(--violet)}
.nav-drop{position:relative;display:flex;align-items:center;gap:4px}
.nav-drop-toggle{background:none;border:none;padding:2px;cursor:pointer;color:var(--text);display:flex;align-items:center}
.nav-drop-toggle svg{width:10px;height:10px;transition:transform .15s}
.nav-drop.open .nav-drop-toggle svg{transform:rotate(180deg)}
.nav-submenu{display:none;position:absolute;top:calc(100% + 16px);left:50%;transform:translateX(-50%);background:#fff;
  border:1px solid var(--line);border-radius:14px;box-shadow:0 18px 40px rgba(34,30,63,.16);padding:8px;min-width:230px;z-index:60}
.nav-drop.open .nav-submenu{display:block}
.nav-submenu a{display:block;padding:9px 14px;border-radius:9px;font-weight:600;font-size:14px;color:var(--text)!important;text-decoration:none;white-space:nowrap}
.nav-submenu a:hover{background:var(--violet-tint);color:var(--violet)!important}
@media (max-width:900px){
  .nav-submenu{position:static;transform:none;box-shadow:none;border:none;padding:4px 0 4px 14px;margin-top:6px;display:none}
  .nav-drop.open .nav-submenu{display:block}
  .nav-drop{flex-wrap:wrap}
}
@media (min-width:901px){.nav-drop:hover .nav-submenu{display:block}}
.burger{display:none;background:none;border:none;cursor:pointer;padding:8px}
.burger span{display:block;width:22px;height:2px;background:var(--ink);margin:5px 0;border-radius:2px}
.promo{background:var(--ink);color:#EDEBFA;font-size:14px;padding:10px 0}
.promo .container{display:flex;justify-content:center;gap:14px;align-items:center;flex-wrap:wrap;text-align:center}
.promo a{color:var(--sun);font-weight:700;text-decoration:none}
/* Hero */
.hero2{padding:60px 0 76px;background:linear-gradient(180deg,var(--violet-tint) 0%,var(--bg) 82%)}
.hero2-grid{display:grid;grid-template-columns:1.08fr .92fr;gap:52px;align-items:start}
.hero2 .lead{font-size:18px;color:var(--muted);margin:22px 0 26px;max-width:520px}
.hero-note{margin-top:18px;font-size:14px;color:var(--muted)}
.hero-note b{color:var(--ink)}
.grade-tags{display:flex;gap:10px;flex-wrap:wrap;margin-top:6px}
.grade-tag{font-size:13px;font-weight:700;color:var(--violet);background:#fff;border:1.5px solid var(--line);border-radius:99px;padding:7px 15px}
.hero-visual{position:relative;margin-top:38px}
.hero-figure{border-radius:20px;overflow:hidden;border:1.5px solid var(--line);background:#fff;transform:rotate(-1deg)}
.hero-figure svg{display:block;width:100%;height:auto}
.badge-float{position:absolute;background:#fff;border-radius:14px;padding:10px 16px;font-size:13px;color:var(--muted);
  box-shadow:0 10px 26px rgba(34,30,63,.12);font-weight:600}
.badge-float b{display:block;font-family:'Bricolage Grotesque',sans-serif;font-size:19px;color:var(--ink)}
.bf-1{top:-16px;left:-12px;transform:rotate(2deg);border-bottom:3px solid var(--sun)}
.bf-2{bottom:-14px;right:-8px;transform:rotate(-2deg);border-bottom:3px solid var(--coral)}
.hero-form{background:#fff;border-radius:20px;padding:30px;box-shadow:0 18px 48px rgba(34,30,63,.12)}
.hero-form h2{font-size:25px;margin-bottom:6px}
.hero-form h2 em{font-style:normal;color:var(--coral)}
.form-sub{color:var(--muted);font-size:14.5px;margin-bottom:20px}
/* Цифри */
.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
.stat{background:#fff;border:1.5px solid var(--line);border-radius:18px;padding:26px 28px}
.stat b{font-family:'Bricolage Grotesque',sans-serif;font-size:30px;color:var(--violet);display:block}
.stat:nth-child(2) b{color:var(--coral)}
.stat:nth-child(3) b{color:var(--sun-dark)}
.stat span{font-size:14px;color:var(--muted);font-weight:600}
/* Кроки */
.alt{background:var(--violet-tint)}
.steps{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
.step{background:#fff;border-radius:18px;padding:32px 28px}
.step-num{width:42px;height:42px;border-radius:14px;display:flex;align-items:center;justify-content:center;
  font-family:'Bricolage Grotesque',sans-serif;font-size:17px;font-weight:700;margin-bottom:16px}
.step:nth-child(1) .step-num{background:var(--violet-tint);color:var(--violet)}
.step:nth-child(2) .step-num{background:#FFE9E2;color:var(--coral-dark)}
.step:nth-child(3) .step-num{background:#FFF3D1;color:var(--sun-dark)}
.step p{color:var(--muted);font-size:15px;margin-top:10px}
/* Курси */
.courses{display:grid;grid-template-columns:repeat(3,1fr);gap:22px}
.course{background:#fff;border:1.5px solid var(--line);border-radius:20px;display:flex;flex-direction:column;overflow:hidden;transition:transform .15s,box-shadow .15s}
.course:hover{transform:translateY(-4px);box-shadow:0 14px 34px rgba(34,30,63,.1)}
.course-art svg{display:block;width:100%;height:auto}
.course-body{padding:26px;display:flex;flex-direction:column;flex:1}
.course-level{display:inline-block;align-self:flex-start;font-size:12px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;
  border-radius:99px;padding:5px 12px;margin-bottom:12px}
.course:nth-child(1) .course-level{background:var(--violet-tint);color:var(--violet)}
.course:nth-child(2) .course-level{background:#FFE9E2;color:var(--coral-dark)}
.course:nth-child(3) .course-level{background:#FFF3D1;color:var(--sun-dark)}
.course ul{list-style:none;margin:12px 0 20px;flex:1}
.course li{font-size:14.5px;color:var(--muted);padding:5px 0 5px 26px;position:relative}
.course li::before{content:"✓";position:absolute;left:0;color:var(--violet);font-weight:700}
.course-price{font-weight:700;color:var(--ink);margin-bottom:16px}
.course-price span{color:var(--muted);font-weight:500;font-size:14px}
/* Платформа */
.platform-grid{display:grid;grid-template-columns:.9fr 1.1fr;gap:52px;align-items:center}
.plat-list{list-style:none;margin-top:22px}
.plat-list li{padding:13px 0 13px 36px;position:relative;font-size:15.5px}
.plat-list li::before{content:"";position:absolute;left:0;top:18px;width:18px;height:18px;border-radius:6px;background:var(--sun)}
.plat-list li:nth-child(2)::before{background:var(--coral)}
.plat-list li:nth-child(3)::before{background:var(--violet)}
.plat-list li:nth-child(4)::before{background:var(--sun)}
.plat-list li b{color:var(--ink)}
.browser{border-radius:18px;overflow:hidden;border:1.5px solid var(--line);background:#fff;box-shadow:0 16px 40px rgba(34,30,63,.1);transform:rotate(1deg)}
.browser-bar{display:flex;align-items:center;gap:6px;padding:11px 14px;border-bottom:1px solid var(--line);background:var(--violet-tint)}
.dot{width:9px;height:9px;border-radius:50%;background:#CFC9EE}
.browser-url{font-size:12px;color:var(--muted);margin-left:10px;font-weight:600}
.browser svg{display:block;width:100%;height:auto}
/* Викладачі */
.teachers{display:grid;grid-template-columns:repeat(3,1fr);gap:22px}
.teacher{background:#fff;border:1.5px solid var(--line);border-radius:20px;overflow:hidden}
.photo-ph{aspect-ratio:4/3;background:var(--violet-tint)}
.photo-ph svg{display:block;width:100%;height:100%}
.teacher-body{padding:22px 24px}
.teacher-meta{color:var(--muted);font-size:14px;margin:6px 0 12px}
.creds{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px}
.cred{font-size:12px;font-weight:700;color:var(--violet);background:var(--violet-tint);border-radius:99px;padding:5px 12px}
/* Ціни */
.pricing{display:grid;grid-template-columns:repeat(3,1fr);gap:22px}
.price-card{background:#fff;border:1.5px solid var(--line);border-radius:20px;padding:36px 30px;position:relative}
.price-card.featured{border-color:var(--violet);border-width:2.5px}
.feat-badge{position:absolute;top:-14px;left:30px;background:var(--sun);color:var(--sun-dark);font-size:12px;font-weight:700;
  padding:5px 14px;border-radius:99px;transform:rotate(-1.5deg)}
.price{font-family:'Bricolage Grotesque',sans-serif;font-size:36px;color:var(--ink);margin:12px 0 2px;font-weight:700}
.per{color:var(--muted);font-size:14px;margin-bottom:8px}
.save{color:var(--coral-dark);font-weight:700;font-size:14px;margin-bottom:24px;min-height:21px}
/* FAQ */
.faq-item{background:#fff;border:1.5px solid var(--line);border-radius:16px;margin-bottom:10px;overflow:hidden}
.faq-q{width:100%;background:none;border:none;text-align:left;font:700 16.5px 'Manrope',sans-serif;color:var(--ink);
  padding:20px 52px 20px 22px;cursor:pointer;position:relative}
.faq-q::after{content:"+";position:absolute;right:20px;top:16px;font-family:'Bricolage Grotesque',sans-serif;font-size:24px;color:var(--coral);transition:transform .2s}
.faq-item.open .faq-q::after{transform:rotate(45deg)}
.faq-a{max-height:0;overflow:hidden;transition:max-height .25s ease;color:var(--muted);font-size:15.5px}
.faq-item.open .faq-a{max-height:240px}
.faq-a p{padding:0 22px 20px}
/* CTA */
.cta{background:var(--violet);border-radius:28px;margin:0 24px}
.cta-wrap{max-width:1032px;margin:0 auto;padding:64px 48px;display:grid;grid-template-columns:1fr 1fr;gap:56px;align-items:start;color:#EDEBFA}
.cta h2{color:#fff}
.cta .eyebrow{background:rgba(255,255,255,.14);color:var(--sun)}
.cta p{color:#CFC9F2}
.contact-row{margin-top:28px;font-size:15px;color:#CFC9F2}
.contact-row a{color:#fff;font-weight:700;text-decoration:none;border-bottom:2px solid var(--sun)}
.form{background:#fff;border-radius:20px;padding:32px;color:var(--text)}
.field{margin-bottom:16px}
.field label{display:block;font-weight:700;font-size:13.5px;margin-bottom:7px;color:var(--ink)}
.field input,.field select{width:100%;height:48px;border:1.5px solid var(--line);border-radius:12px;padding:0 14px;
  font:500 15px 'Manrope',sans-serif;background:#fff;color:var(--text)}
.field input:focus,.field select:focus{outline:none;border-color:var(--violet);box-shadow:0 0 0 3px var(--violet-tint)}
.field .err{display:none;color:#D2372B;font-size:13px;margin-top:6px}
.field.invalid input{border-color:#D2372B}
.field.invalid .err{display:block}
.fine{font-size:12.5px;color:var(--muted);margin-top:12px}
.fine a{color:var(--muted)}
.form-success{display:none;text-align:center;padding:32px 0}
.check{width:56px;height:56px;border-radius:50%;background:var(--sun);display:flex;align-items:center;justify-content:center;margin:0 auto 16px;color:var(--sun-dark);font-size:24px;font-weight:700}
footer{padding:44px 0 36px;color:var(--muted);font-size:14px}
.footer-grid{display:flex;justify-content:space-between;gap:24px;flex-wrap:wrap}
footer a{color:var(--muted)}
.modal-bg{display:none;position:fixed;inset:0;background:rgba(34,30,63,.55);z-index:100;align-items:center;justify-content:center;padding:20px}
.modal-bg.show{display:flex}
.modal{background:#fff;border-radius:20px;max-width:520px;width:100%;padding:32px;position:relative}
.modal-close{position:absolute;top:14px;right:14px;background:none;border:none;font-size:20px;color:var(--muted);cursor:pointer;padding:6px}
.video-ph{background:var(--violet-tint);border-radius:14px;aspect-ratio:16/9;display:flex;align-items:center;justify-content:center;color:var(--muted);margin-top:18px;font-size:14px}
@media (max-width:900px){
  h1{font-size:31px} h2{font-size:25px}
  section{padding:56px 0}
  .hero2{padding:40px 0 56px}
  .hero2-grid,.platform-grid{grid-template-columns:1fr}
  .cta-wrap{grid-template-columns:1fr;padding:40px 24px}
  .cta{margin:0 12px}
  .steps,.stats,.courses,.teachers,.pricing{grid-template-columns:1fr}
  .badge-float{position:static;display:inline-block;margin:10px 8px 0 0;transform:none}
  .hero-visual{margin-top:24px}
  .hero-figure,.browser{transform:none}
  .nav-links{display:none;position:absolute;top:74px;left:0;right:0;background:#fff;flex-direction:column;padding:20px 24px;gap:16px;border-bottom:1px solid var(--line)}
  .nav-links.show{display:flex}
  .burger{display:block}
}

/* Панель довіри */
.trust-bar{display:flex;justify-content:center;gap:0;background:#fff;border:1.5px solid var(--line);border-radius:18px;flex-wrap:wrap;margin-top:-34px;position:relative;z-index:2}
.trust-item{padding:20px 34px;text-align:center;border-right:1.5px solid var(--line);min-width:170px}
.trust-item:last-child{border-right:none}
.trust-item b{font-family:'Bricolage Grotesque',sans-serif;font-size:24px;color:var(--ink);display:block}
.trust-item b .star{color:var(--sun)}
.trust-item span{font-size:13px;color:var(--muted);font-weight:600}
/* Дашборд цифр */
.dash{display:grid;grid-template-columns:repeat(4,1fr);gap:20px}
.dash-card{background:#fff;border:1.5px solid var(--line);border-radius:20px;padding:26px}
.dash-card.hl{background:var(--violet);border-color:var(--violet);color:#EDEBFA}
.dash-label{font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin-bottom:12px}
.dash-card.hl .dash-label{color:#CFC9F2}
.dash-num{font-family:'Bricolage Grotesque',sans-serif;font-size:34px;font-weight:700;color:var(--ink);line-height:1.05}
.dash-card.hl .dash-num{color:#fff}
.dash-sub{font-size:13.5px;color:var(--muted);font-weight:600;margin-top:8px}
.dash-card.hl .dash-sub{color:#CFC9F2}
.dash-bar{height:8px;border-radius:4px;background:var(--violet-tint);margin-top:14px;overflow:hidden}
.dash-bar i{display:block;height:100%;width:68%;background:linear-gradient(90deg,var(--violet),var(--coral));transition:width .8s ease}
.dash-live{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:800;color:#1F7A3D;
  background:#E9F8EE;border:1.5px solid #C7E9D3;border-radius:99px;padding:3px 10px;margin-left:8px;vertical-align:1px}
.dash-live i{width:7px;height:7px;border-radius:50%;background:#2FA85B;animation:dashPulse 1.6s infinite}
@keyframes dashPulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.8)}}
.dash-num.bump{animation:dashBump .5s ease}
@keyframes dashBump{0%{transform:translateY(0)}35%{transform:translateY(-4px)}100%{transform:translateY(0)}}
/* 4 кроки пробного */
.steps4{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}
.steps4 .step{padding:28px 24px}
.step:nth-child(4) .step-num{background:#E8F6EC;color:#1F7A3D}
/* Формати навчання */
.formats{display:grid;grid-template-columns:1fr 1fr;gap:24px}
/* Формат лишився один: розтягнута на всю ширину картка виглядає як
   помилка верстки, а половинна — як загублений сусід. Тому по центру. */
.formats.single{grid-template-columns:minmax(0,620px);justify-content:center}
.format{background:#fff;border:1.5px solid var(--line);border-radius:22px;padding:34px 32px}
.format-head{display:flex;align-items:center;gap:14px;margin-bottom:20px}
.format-ico{width:52px;height:52px;border-radius:16px;display:flex;align-items:center;justify-content:center}
.format:nth-child(1) .format-ico{background:var(--violet-tint)}
.format:nth-child(2) .format-ico{background:#FFF3D1}
.format ul{list-style:none;margin:0 0 24px}
.format li{font-size:15px;color:var(--muted);padding:7px 0 7px 28px;position:relative;font-weight:500}
.format li::before{content:"✓";position:absolute;left:0;font-weight:700;color:var(--violet)}
.format:nth-child(2) li::before{color:var(--sun-dark)}
.format-btns{display:flex;gap:10px;flex-wrap:wrap}
@media (max-width:900px){
  .dash,.steps4,.formats{grid-template-columns:1fr}
  .trust-bar{margin-top:0}
  .trust-item{border-right:none;border-bottom:1.5px solid var(--line);width:100%}
  .trust-item:last-child{border-bottom:none}
}


/* Великий футер */
.bigfoot{background:var(--ink);color:#B9B4D6;padding:64px 0 28px;margin-top:0}
.bigfoot a{color:#B9B4D6;text-decoration:none;font-size:14.5px}
.bigfoot a:hover{color:#fff}
.bf-grid{display:grid;grid-template-columns:1fr 1fr 1fr 1.2fr;gap:40px}
.bf-col h4{font-family:'Bricolage Grotesque',sans-serif;font-size:16px;color:#fff;margin-bottom:16px}
.bf-col ul{list-style:none}
.bf-col li{padding:5px 0}
.bf-logo{font-family:'Bricolage Grotesque',sans-serif;font-size:22px;font-weight:700;color:#fff}
.bf-logo span{color:var(--coral)}
.socials{display:flex;gap:10px;margin:16px 0 22px}
.soc{width:40px;height:40px;border-radius:12px;background:rgba(255,255,255,.08);display:flex;align-items:center;justify-content:center;transition:background .15s}
.soc:hover{background:var(--violet)}
.soc svg{width:19px;height:19px;fill:#fff}
.cb-form input{width:100%;height:46px;border:none;border-radius:12px;padding:0 14px;font:500 15px 'Manrope',sans-serif;margin-bottom:10px;background:#fff;color:var(--text)}
.cb-form input:focus{outline:3px solid var(--violet)}
.pay-badges{display:flex;gap:14px;margin-top:20px;align-items:center;font-size:12px;font-weight:700;letter-spacing:.03em;color:#8F89B5}
.pay-badges span{border:1.5px solid rgba(255,255,255,.18);border-radius:8px;padding:6px 12px}
.bf-bottom{border-top:1px solid rgba(255,255,255,.12);margin-top:44px;padding-top:22px;display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;font-size:13px;color:#8F89B5}
.bf-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:18px}
.bf-actions .btn{height:44px;font-size:14px}
.btn-foot{background:transparent;color:#fff;border:1.5px solid rgba(255,255,255,.35)}
.btn-foot:hover{background:rgba(255,255,255,.1)}
@media (max-width:900px){.bf-grid{grid-template-columns:1fr 1fr}.bf-col.wide{grid-column:1/-1}}
@media (max-width:560px){.bf-grid{grid-template-columns:1fr}}


/* Режим редагування */
#adminPanel{display:none;position:fixed;left:50%;bottom:18px;transform:translateX(-50%);z-index:200;
  background:var(--ink);color:#fff;border-radius:16px;padding:12px 16px;box-shadow:0 14px 40px rgba(34,30,63,.35);
  align-items:center;gap:12px;max-width:calc(100% - 24px);flex-wrap:wrap;justify-content:center}
#adminPanel.show{display:flex}
#adminPanel .ap-hint{font-size:13.5px;color:#CFC9F2;font-weight:600}
#adminPanel .btn{height:40px;font-size:14px;padding:0 18px}
body.editing [contenteditable="true"]{outline:1.5px dashed rgba(91,75,212,.55);outline-offset:2px;border-radius:4px;cursor:text}
body.editing [contenteditable="true"]:hover{outline-color:var(--coral)}
body.editing [contenteditable="true"]:focus{outline:2px solid var(--violet);background:rgba(91,75,212,.06)}
#editToast{display:none;position:fixed;right:18px;top:18px;z-index:210;background:#1F7A3D;color:#fff;
  border-radius:12px;padding:12px 18px;font-size:14px;font-weight:600}
#editToast.show{display:block}


/* Перемикач тарифів */
.ptabs{display:inline-flex;background:#fff;border:1.5px solid var(--line);border-radius:99px;padding:5px;margin-bottom:34px}
.ptab{border:none;background:transparent;font:700 14.5px 'Manrope',sans-serif;color:var(--muted);
  border-radius:99px;height:42px;padding:0 24px;cursor:pointer;transition:background .15s,color .15s}
.ptab.active{background:var(--violet);color:#fff}
.pgrid{display:none}
.pgrid.active{display:grid}


.ap-colors{display:flex;gap:12px;align-items:center;flex-wrap:wrap}
.ap-colors label{font-size:12.5px;color:#CFC9F2;font-weight:600;display:flex;align-items:center;gap:6px}
.ap-colors input[type=color]{width:34px;height:28px;border:none;border-radius:8px;padding:0;background:none;cursor:pointer}
body.editing .img-slot{cursor:pointer;position:relative}
body.editing .img-slot::after{content:"Замінити фото";position:absolute;inset:auto 8px 8px auto;background:var(--ink);color:#fff;
  font:600 11px 'Manrope',sans-serif;padding:5px 10px;border-radius:8px;opacity:.9;pointer-events:none}
.img-slot img{display:block;width:100%;height:100%;object-fit:cover}
.edit-tools{position:absolute;top:8px;right:8px;display:flex;gap:6px;z-index:5}
.edit-tools button{width:30px;height:30px;border-radius:9px;border:none;cursor:pointer;font:700 15px 'Manrope',sans-serif;
  background:var(--ink);color:#fff;opacity:.9}
.edit-tools .et-del{background:#B4231F}
body.editing .can-clone{position:relative}
body.editing section{position:relative}
.sec-tools{position:absolute;top:10px;left:10px;z-index:6}
.sec-tools button{border:none;border-radius:9px;background:var(--ink);color:#fff;font:600 12px 'Manrope',sans-serif;
  padding:6px 12px;cursor:pointer;opacity:.9}
body.editing section[data-hidden="1"]{opacity:.35;outline:2px dashed #B4231F;outline-offset:-2px}


/* Міні-урок і слово дня */
.try-grid{display:grid;grid-template-columns:1.15fr .85fr;gap:24px;align-items:stretch}
.quiz{background:#fff;border:1.5px solid var(--line);border-radius:22px;padding:32px}
.quiz-progress{display:flex;gap:8px;margin-bottom:22px}
.qdot{width:34px;height:8px;border-radius:4px;background:var(--violet-tint)}
.qdot.done{background:var(--violet)}
.quiz-q{font-family:'Bricolage Grotesque',sans-serif;font-size:23px;font-weight:700;color:var(--ink);margin-bottom:22px;line-height:1.35}
.quiz-q .gap{display:inline-block;min-width:86px;border-bottom:3px solid var(--sun);text-align:center;color:var(--violet)}
.quiz-opts{display:flex;gap:10px;flex-wrap:wrap}
.qopt{border:2px solid var(--line);background:#fff;border-radius:14px;font:700 16px 'Manrope',sans-serif;color:var(--ink);
  padding:12px 26px;cursor:pointer;transition:border-color .15s,background .15s,transform .1s}
.qopt:hover{border-color:var(--violet)}
.qopt:active{transform:scale(.97)}
.qopt.ok{border-color:#1F7A3D;background:#E8F6EC;color:#1F7A3D}
.qopt.bad{border-color:#B4231F;background:#FBEAEA;color:#B4231F}
.quiz-fb{min-height:24px;margin-top:16px;font-weight:700;font-size:15px}
.quiz-fb.ok{color:#1F7A3D}
.quiz-fb.bad{color:#B4231F}
.quiz-final{text-align:center;padding:18px 0}
.quiz-score{font-family:'Bricolage Grotesque',sans-serif;font-size:44px;font-weight:700;color:var(--violet)}
/* Слово дня */
.wod{perspective:1000px;cursor:pointer;min-height:100%}
.wod-inner{position:relative;width:100%;height:100%;min-height:320px;transition:transform .5s;transform-style:preserve-3d}
.wod.flip .wod-inner{transform:rotateY(180deg)}
.wod-face{position:absolute;inset:0;backface-visibility:hidden;border-radius:22px;padding:32px;
  display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center}
.wod-front{background:var(--violet);color:#fff}
.wod-back{background:var(--sun);color:var(--ink);transform:rotateY(180deg)}
.wod-label{font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;opacity:.75;margin-bottom:14px}
.wod-word{font-family:'Bricolage Grotesque',sans-serif;font-size:42px;font-weight:700}
.wod-tr{font-size:15px;margin-top:12px;opacity:.85;font-weight:600}
.wod-ex{font-size:16px;margin-top:14px;font-weight:600;max-width:280px}
@media (max-width:900px){.try-grid{grid-template-columns:1fr}.wod-inner{min-height:240px}}
@media (prefers-reduced-motion:reduce){.wod-inner{transition:none}}


/* Промо-попап */
.popup-bg{display:none;position:fixed;inset:0;background:rgba(34,30,63,.55);z-index:150;align-items:center;justify-content:center;padding:20px}
.popup-bg.show{display:flex}
.popup{background:#fff;border-radius:24px;max-width:640px;width:100%;overflow:hidden;position:relative;
  display:grid;grid-template-columns:.9fr 1.1fr;opacity:0;transform:translateY(46px) scale(.92)}
.popup-bg.show .popup{animation:popIn .45s cubic-bezier(.2,.9,.3,1.2) forwards}
@keyframes popIn{to{opacity:1;transform:translateY(0) scale(1)}}
.popup-art{background:var(--violet);position:relative;min-height:100%}
.popup-art svg{display:block;width:100%;height:100%}
.popup-body{padding:34px 30px}
.popup-tag{display:inline-block;background:#FFF3D1;color:var(--sun-dark);font-size:12px;font-weight:700;
  letter-spacing:.06em;text-transform:uppercase;border-radius:99px;padding:5px 12px;margin-bottom:14px}
.popup h3{font-size:25px;line-height:1.2;margin-bottom:10px}
.popup p{color:var(--muted);font-size:15px;margin-bottom:20px;font-weight:500}
.popup-close{position:absolute;top:12px;right:12px;width:36px;height:36px;border-radius:50%;border:none;cursor:pointer;
  background:rgba(34,30,63,.08);color:var(--ink);font-size:16px;z-index:2}
.popup-close:hover{background:rgba(34,30,63,.16)}
@media (max-width:640px){.popup{grid-template-columns:1fr}.popup-art{min-height:150px}}
@media (prefers-reduced-motion:reduce){.popup-bg.show .popup{animation:none;opacity:1;transform:none}}


/* Верхня рекламка */
.promo{background:linear-gradient(90deg,var(--violet) 0%,#7A5BE0 60%,var(--coral) 130%);position:relative}
.promo .container{position:relative;padding-right:44px}
.promo-gift{font-size:16px}
.promo-x{position:absolute;right:12px;top:50%;transform:translateY(-50%);background:rgba(255,255,255,.15);
  border:none;color:#fff;width:26px;height:26px;border-radius:50%;cursor:pointer;font-size:12px}
.promo-x:hover{background:rgba(255,255,255,.3)}
.promo.hidden{display:none}
/* Кутове віконце */
.corner-ad{position:fixed;right:18px;bottom:18px;z-index:120;background:#fff;border:1.5px solid var(--line);
  border-radius:18px;box-shadow:0 16px 40px rgba(34,30,63,.18);padding:16px 18px;max-width:270px;
  display:none;align-items:flex-start;gap:12px}
.corner-ad.show{display:flex;animation:cornerIn .4s cubic-bezier(.2,.9,.3,1.15)}
@keyframes cornerIn{from{opacity:0;transform:translateY(24px)}to{opacity:1;transform:none}}
.ca-ico{width:42px;height:42px;border-radius:13px;background:var(--violet-tint);display:flex;align-items:center;
  justify-content:center;flex-shrink:0;font-size:20px}
.ca-title{font-family:'Bricolage Grotesque',sans-serif;font-size:15px;font-weight:700;color:var(--ink);line-height:1.25}
.ca-sub{font-size:12.5px;color:var(--muted);font-weight:600;margin:4px 0 10px}
.ca-btn{display:inline-flex;align-items:center;height:34px;padding:0 14px;border-radius:99px;background:var(--coral);
  color:#fff;font:700 13px 'Manrope',sans-serif;text-decoration:none}
.ca-btn:hover{background:var(--coral-dark)}
.ca-x{position:absolute;top:8px;right:8px;border:none;background:none;color:var(--muted);cursor:pointer;font-size:13px;padding:4px}
@media (max-width:640px){.corner-ad{right:10px;left:10px;bottom:10px;max-width:none}}
@media (prefers-reduced-motion:reduce){.corner-ad.show{animation:none}}


.promo-bubble{background:#fff;color:var(--violet);font:700 13px 'Manrope',sans-serif;border-radius:99px;
  padding:6px 14px;position:relative;white-space:nowrap;transition:opacity .3s}
.promo-bubble::after{content:"";position:absolute;left:16px;bottom:-5px;border:6px solid transparent;
  border-top-color:#fff;border-bottom:0}
.promo-bubble.fade{opacity:0}
@media (max-width:640px){.promo-bubble{display:none}}


/* Фотогалерея */
.gallery{display:grid;grid-template-columns:repeat(4,1fr);gap:22px}
.g-card{background:#fff;border:1.5px solid var(--line);border-radius:16px;padding:12px 12px 14px;
  transition:transform .15s,box-shadow .15s}
.g-card:nth-child(odd){transform:rotate(-1.2deg)}
.g-card:nth-child(even){transform:rotate(1.2deg)}
.g-card:hover{transform:rotate(0) translateY(-4px);box-shadow:0 14px 34px rgba(34,30,63,.12)}
.g-photo{aspect-ratio:4/3;border-radius:10px;overflow:hidden;background:var(--violet-tint)}
.g-photo img{display:block;width:100%;height:100%;object-fit:cover}
.g-cap{font-size:13.5px;font-weight:700;color:var(--ink);text-align:center;margin-top:10px}
@media (max-width:900px){.gallery{grid-template-columns:1fr 1fr}}
@media (max-width:560px){.gallery{grid-template-columns:1fr}}
@media (prefers-reduced-motion:reduce){.g-card{transform:none!important}}


/* Відгуки */
.reviews{display:grid;grid-template-columns:repeat(3,1fr);gap:22px}
.review{background:#fff;border:1.5px solid var(--line);border-radius:20px;padding:28px 26px;display:flex;flex-direction:column}
.stars{color:var(--sun);font-size:17px;letter-spacing:2px;margin-bottom:14px}
.review p{color:var(--text);font-size:15px;flex:1;font-weight:500}
.review-a{display:flex;align-items:center;gap:12px;margin-top:18px;padding-top:16px;border-top:1.5px solid var(--line)}
.review-av{width:42px;height:42px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  font:700 15px 'Bricolage Grotesque',sans-serif;color:#fff}
.review-name{font-weight:700;color:var(--ink);font-size:14.5px}
.review-meta{font-size:12.5px;color:var(--muted);font-weight:600}
@media (max-width:900px){.reviews{grid-template-columns:1fr}}
/* Месенджери */
.msgr{position:fixed;left:18px;bottom:18px;z-index:120;display:flex;flex-direction:column;gap:10px}
.msgr a{width:50px;height:50px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  box-shadow:0 10px 26px rgba(34,30,63,.22);transition:transform .12s}
.msgr a:hover{transform:scale(1.08)}
.msgr svg{width:26px;height:26px;fill:#fff}
.msgr .m-tg{background:#2AABEE}
.msgr .m-vb{background:#7360F2}
@media (max-width:640px){.msgr{left:10px;bottom:10px}.msgr a{width:44px;height:44px}}


/* Тест рівня */
.lt-card{background:#fff;border:1.5px solid var(--line);border-radius:22px;padding:32px;max-width:640px;margin:0 auto}
.lt-progress{display:flex;gap:6px;margin-bottom:20px}
.lt-dot{flex:1;height:8px;border-radius:4px;background:var(--violet-tint)}
.lt-dot.done{background:var(--violet)}
.lt-q{font-family:'Bricolage Grotesque',sans-serif;font-size:21px;font-weight:700;color:var(--ink);margin-bottom:18px;line-height:1.35}
.lt-opts{display:grid;gap:10px}
.lt-opt{border:2px solid var(--line);background:#fff;border-radius:14px;font:600 15.5px 'Manrope',sans-serif;color:var(--ink);
  padding:13px 18px;cursor:pointer;text-align:left;transition:border-color .12s,background .12s}
.lt-opt:hover{border-color:var(--violet);background:var(--violet-tint)}
.lt-result{text-align:center}
.lt-level{font-family:'Bricolage Grotesque',sans-serif;font-size:52px;font-weight:700;color:var(--violet);margin:8px 0}
.lt-bar{height:12px;border-radius:6px;background:var(--violet-tint);overflow:hidden;max-width:340px;margin:14px auto}
.lt-bar i{display:block;height:100%;background:linear-gradient(90deg,var(--violet),var(--coral))}


/* Бонус після заявки */
.bonus{margin-top:20px;text-align:left;background:#FFFBEF;border:1.5px solid #F0D48A;border-radius:14px;padding:16px 18px}
.bonus h4{font-family:'Bricolage Grotesque',sans-serif;font-size:15px;color:var(--sun-dark);margin-bottom:10px}
.bonus ol{margin:0 0 0 18px;font-size:14px}
.bonus li{padding:3px 0;color:var(--ink);font-weight:600}
.bonus li span{color:var(--muted);font-weight:500}
/* Про школу */
.about-grid{display:grid;grid-template-columns:.85fr 1.15fr;gap:40px;align-items:center}
.founder{border:1.5px solid var(--line);border-radius:20px;overflow:hidden;background:#fff}
.founder .photo-ph{aspect-ratio:4/5}
.founder-cap{padding:16px 20px}
.values{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:28px}
.value{background:#fff;border:1.5px solid var(--line);border-radius:16px;padding:20px}
.value .v-ico{width:40px;height:40px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:18px;margin-bottom:12px}
.value:nth-child(1) .v-ico{background:var(--violet-tint)}
.value:nth-child(2) .v-ico{background:#FFE9E2}
.value:nth-child(3) .v-ico{background:#FFF3D1}
.value p{font-size:14px;color:var(--muted);font-weight:500;margin-top:6px}
@media (max-width:900px){.about-grid,.values{grid-template-columns:1fr}}

/* Цифри школи */
.stats-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-top:28px}
.stat-card{background:#fff;border:1.5px solid var(--line);border-radius:16px;padding:20px}
.stat-card.violet{background:var(--violet);border-color:var(--violet)}
.stat-card.violet *{color:#fff}
.stat-eyebrow{display:flex;align-items:center;gap:8px;font-size:12.5px;font-weight:700;letter-spacing:.03em;text-transform:uppercase;color:var(--muted)}
.stat-card.violet .stat-eyebrow{color:#D9D4F5}
.live-dot{width:8px;height:8px;border-radius:99px;background:#3FBE6B;position:relative;flex:none}
.live-dot::after{content:'';position:absolute;inset:-4px;border-radius:99px;background:#3FBE6B;opacity:.4;animation:livePulse 1.8s ease-out infinite}
@keyframes livePulse{0%{transform:scale(.6);opacity:.5}100%{transform:scale(2.2);opacity:0}}
.stat-num{font-family:'Bricolage Grotesque',sans-serif;font-weight:700;font-size:32px;color:var(--ink);margin-top:10px;line-height:1.1}
.stat-sub{font-size:13.5px;color:var(--muted);margin-top:6px;font-weight:500}
.stat-card.violet .stat-sub{color:#D9D4F5}
@media (max-width:900px){.stats-grid{grid-template-columns:repeat(2,1fr)}}


/* Вправа: переписати реченння синонімом */
.rw{margin-bottom:22px}
.rw-orig{font-size:16px;color:var(--ink);font-weight:600;margin-bottom:8px}
.rw-orig b{color:var(--violet)}
.rw-row{display:flex;gap:10px;align-items:flex-start;flex-wrap:wrap;position:relative}
.rw-input{flex:1;min-width:220px;border:2px solid var(--line);border-radius:12px;padding:11px 14px;
  font:600 15px 'Manrope',sans-serif;color:var(--ink)}
.rw-input:focus{outline:none;border-color:var(--violet)}
.rw-input.ok{border-color:var(--green);background:#F2FBF5}
.rw-input.near{border-color:#D9A521;background:#FFFBEF}
.rw-check{height:44px}
/* Підказка викладача — тільки в ролі викладача (body.role-teacher) */
.rw-hint{display:none}
body.role-teacher .rw-hint{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:700;
  color:var(--sun-dark);background:#FFF3D1;border:1px solid #F0D48A;border-radius:99px;padding:5px 12px;margin-top:6px;cursor:help;position:relative}
body.role-teacher .rw-hint .rw-answer{display:none;position:absolute;left:0;bottom:130%;z-index:20;
  background:var(--ink);color:#fff;font-weight:600;border-radius:10px;padding:8px 12px;white-space:nowrap;
  box-shadow:0 8px 22px rgba(34,30,63,.3);font-size:13px}
body.role-teacher .rw-hint:hover .rw-answer{display:block}
.rw-teacher-note{display:none}
body.role-teacher .rw-teacher-note{display:block;background:#EFEDFB;border-left:3px solid var(--violet);
  border-radius:0 10px 10px 0;padding:8px 12px;font-size:12.5px;color:var(--violet);font-weight:600;margin-bottom:14px}
.rw-fb{min-height:20px;font-weight:700;font-size:13.5px;margin-top:6px;width:100%}


/* Бібліотека завдань учня */
.ex-types{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:18px}
.ex-type{background:#fff;border:1.5px solid var(--line);border-radius:16px;padding:16px;cursor:pointer;text-align:center;transition:border-color .12s,transform .1s}
.ex-type:hover{border-color:var(--violet);transform:translateY(-2px)}
.ex-type.active{border-color:var(--violet);background:var(--violet-tint)}
.ex-type .et-ico{font-size:26px;margin-bottom:8px}
.ex-type .et-name{font-weight:700;color:var(--ink);font-size:14px}
.ex-type .et-cnt{font-size:12px;color:var(--muted);font-weight:600;margin-top:2px}
/* Пропуск-слово / порядок слів */
.gap-input{display:inline-block;min-width:110px;border:none;border-bottom:2px solid var(--violet);
  font:600 16px 'Manrope',sans-serif;color:var(--violet);text-align:center;padding:2px 6px;background:transparent}
.gap-input:focus{outline:none;border-bottom-color:var(--coral)}
.words-bank{display:flex;gap:8px;flex-wrap:wrap;margin:14px 0}
.word-chip{border:2px solid var(--line);background:#fff;border-radius:10px;padding:8px 14px;font-weight:700;
  color:var(--ink);cursor:pointer;transition:border-color .12s}
.word-chip:hover{border-color:var(--violet)}
.word-chip.used{opacity:.35;pointer-events:none}
.words-answer{min-height:48px;border:2px dashed var(--line);border-radius:12px;padding:10px;display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.words-answer .word-chip{cursor:pointer;border-style:solid}
.words-answer:empty::before{content:"Клікай слова по порядку…";color:var(--muted);font-weight:600;font-size:14px}
/* Панель викладача: конструктор ДЗ */
.hwbuilder{border:1.5px solid var(--violet);border-radius:16px;padding:18px;margin-top:14px;background:#FBFAFF;display:none}
body.role-teacher .hwbuilder{display:block}
.hwb-row{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:10px}
.hwb-row select,.hwb-row input{border:1.5px solid var(--line);border-radius:10px;padding:9px 12px;font:600 14px 'Manrope',sans-serif}
.hwb-row input{flex:1;min-width:180px}
.assigned-list{margin-top:12px}
.assigned-item{display:flex;justify-content:space-between;align-items:center;gap:10px;background:#fff;border:1.5px solid var(--line);
  border-radius:10px;padding:10px 14px;margin-bottom:6px;font-size:14px}
.assigned-item .ai-del{border:none;background:none;color:var(--red);cursor:pointer;font-weight:700;font-size:15px}


/* Секції уроку */
.lesson-layout{display:grid;grid-template-columns:200px 1fr;gap:20px;align-items:start}
.sections{background:#fff;border:1.5px solid var(--line);border-radius:16px;padding:14px;position:sticky;top:16px}
.sections h3{font-size:13px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin-bottom:10px;padding:0 6px}
.sec-it{display:flex;align-items:center;gap:9px;padding:9px 10px;border-radius:10px;cursor:pointer;font-weight:700;font-size:13.5px;color:var(--muted);border:none;background:none;width:100%;text-align:left}
.sec-it .si-ic{font-size:16px}
.sec-it .si-check{margin-left:auto;font-size:12px;color:var(--green);opacity:0}
.sec-it.done .si-check{opacity:1}
.sec-it.active{background:var(--violet-tint);color:var(--violet)}
.sec-it:hover:not(.active){color:var(--ink)}
.sec-body{background:#fff;border:1.5px solid var(--line);border-radius:16px;padding:24px;min-height:340px}
.sec-body h2{font-size:20px;margin-bottom:4px}
.sec-tag{display:inline-block;font-size:12px;font-weight:700;color:var(--violet);background:var(--violet-tint);border-radius:99px;padding:4px 12px;margin-bottom:14px}
.reading-text{background:var(--violet-tint);border-radius:12px;padding:16px 18px;font-size:15.5px;line-height:1.7;margin-bottom:16px}
.reading-text b{color:var(--violet)}
.speak-box{text-align:center;padding:10px 0}
.mic-btn{width:80px;height:80px;border-radius:50%;border:none;background:var(--coral);color:#fff;font-size:30px;cursor:pointer;margin:10px auto;display:block;transition:transform .1s}
.mic-btn:active{transform:scale(.94)}
.mic-btn.rec{background:var(--red);animation:pulse 1s infinite}
@keyframes pulse{0%,100%{box-shadow:0 0 0 0 rgba(180,35,31,.4)}50%{box-shadow:0 0 0 12px rgba(180,35,31,0)}}
.sec-nav{display:flex;justify-content:space-between;margin-top:20px;gap:10px}
.dict-item{display:flex;justify-content:space-between;padding:12px 0;border-bottom:1px solid var(--line)}
.dict-item:last-child{border-bottom:none}
.dict-w{font-weight:700;color:var(--ink)}
.dict-t{color:var(--muted);font-weight:600}
.dict-play{border:none;background:var(--violet-tint);color:var(--violet);border-radius:8px;width:32px;height:32px;cursor:pointer}
.cool-emoji{display:flex;gap:12px;justify-content:center;margin:16px 0}
.cool-emoji button{font-size:32px;background:none;border:2px solid var(--line);border-radius:14px;width:60px;height:60px;cursor:pointer}
.cool-emoji button:hover{border-color:var(--violet)}
.cool-emoji button.sel{border-color:var(--violet);background:var(--violet-tint)}
@media (max-width:820px){.lesson-layout{grid-template-columns:1fr}.sections{position:static}}


/* Навігація матеріалів (Change Unit) */
.unit-bar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:16px}
.unit-btn{display:inline-flex;align-items:center;gap:8px;background:#fff;border:1.5px solid var(--line);border-radius:99px;
  padding:8px 16px;font-weight:700;font-size:14px;color:var(--ink);cursor:pointer}
.unit-btn:hover{border-color:var(--violet)}
.unit-current{font-weight:700;color:var(--violet)}
.levels{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}
.level-card{display:flex;align-items:center;gap:14px;background:#fff;border:1.5px solid var(--line);border-radius:16px;
  padding:16px;cursor:pointer;transition:border-color .12s,transform .1s}
.level-card:hover{border-color:var(--violet);transform:translateY(-2px)}
.level-badge{width:56px;height:56px;border-radius:14px;display:flex;align-items:center;justify-content:center;
  font-family:'Bricolage Grotesque',sans-serif;font-weight:700;font-size:20px;color:#fff;flex-shrink:0}
.level-info b{color:var(--ink);font-size:15px}
.level-info .li-sub{font-size:13px;color:var(--muted);font-weight:600}
.level-info .li-prog{font-size:12px;color:var(--violet);font-weight:700;margin-top:2px}
.lesson-list-item{display:flex;align-items:center;gap:14px;background:#fff;border:1.5px solid var(--line);border-radius:14px;
  padding:14px 16px;margin-bottom:8px;cursor:pointer;transition:border-color .12s}
.lesson-list-item:hover{border-color:var(--violet)}
.lesson-num{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  font-family:'Bricolage Grotesque',sans-serif;font-weight:700;color:#fff;flex-shrink:0;background:var(--coral)}
.lesson-list-item.done .lesson-num{background:var(--green)}
.lesson-list-item.current{border-color:var(--violet);background:var(--violet-tint)}
.lesson-title{font-weight:700;color:var(--ink);flex:1}
.lesson-open{color:var(--violet);font-weight:700;font-size:13px}
.lesson-list-item.done .lesson-check{color:var(--green);font-weight:700}
/* Teacher's notes */
.teacher-notes{display:none}
body.role-teacher .teacher-notes{display:block;background:#E7F3FB;border-radius:12px;padding:14px 16px;margin-bottom:16px;font-size:14px}
body.role-teacher .teacher-notes .tn-h{font-weight:700;color:#1a6ca8;margin-bottom:6px;display:flex;align-items:center;gap:6px}
body.role-teacher .teacher-notes .tn-time{color:var(--coral-dark);font-weight:700;font-size:13px;margin:8px 0 2px}


/* Спливаючий перекладач */
#wordPop{position:fixed;z-index:300;display:none;background:var(--ink);color:#fff;border-radius:14px;
  padding:14px 16px;box-shadow:0 14px 40px rgba(34,30,63,.35);max-width:300px;font-size:14px}
#wordPop.show{display:block;animation:wpIn .15s}
@keyframes wpIn{from{opacity:0;transform:translateY(6px)}to{opacity:1}}
#wordPop .wp-en{font-weight:700;font-size:16px;margin-bottom:4px}
#wordPop .wp-ua{color:#CFC9F2;margin-bottom:10px}
#wordPop .wp-btns{display:flex;gap:8px}
#wordPop button{border:none;border-radius:9px;padding:7px 12px;font:700 13px 'Manrope',sans-serif;cursor:pointer}
#wordPop .wp-add{background:var(--coral);color:#fff}
#wordPop .wp-say{background:rgba(255,255,255,.15);color:#fff}
#wordPop::after{content:"";position:absolute;left:24px;bottom:-6px;border:6px solid transparent;border-top-color:var(--ink);border-bottom:0}
/* Мій словник (розділ Практика) */
.mydict-empty{color:var(--muted);font-weight:600;text-align:center;padding:20px}
.mydict-item{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:11px 0;border-bottom:1px solid var(--line)}
.mydict-item:last-child{border-bottom:none}
.mydict-del{border:none;background:none;color:var(--red);cursor:pointer;font-weight:700}
.mydict-learn{border:none;background:var(--violet-tint);color:var(--violet);border-radius:8px;padding:5px 10px;font:700 12px 'Manrope',sans-serif;cursor:pointer}
.mydict-item.learned .dict-w{text-decoration:line-through;opacity:.6}
.mydict-item.learned .mydict-learn{background:var(--green-tint);color:var(--green)}


/* Статистика прогресу */
.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:12px;margin-top:14px}
.stat-tile{background:var(--violet-tint);border-radius:14px;padding:16px;text-align:center}
.stat-tile b{font-family:'Bricolage Grotesque',sans-serif;font-size:26px;color:var(--violet);display:block}
.stat-tile span{font-size:12.5px;font-weight:700;color:var(--muted)}
.stat-tile.coral{background:#FFE9E2}.stat-tile.coral b{color:var(--coral-dark)}
.stat-tile.sun{background:#FFF3D1}.stat-tile.sun b{color:var(--sun-dark)}
.stat-tile.green{background:var(--green-tint)}.stat-tile.green b{color:var(--green)}

@media (prefers-reduced-motion:reduce){*{transition:none!important;scroll-behavior:auto}}

/* ===== КАБІНЕТ (вкладені правила) ===== */
@keyframes tIn{from{opacity:0;transform:translateY(-8px)}to{opacity:1}}
/* #parPkg — контейнер пакетів у вигляді батьків. Картки туди переносить
   parShowPkg() зі сторінки «Оплата», а всі їхні стилі (.pkg, .card,
   .price) вкладені сюди, всередину #cabView, — за межами кабінету вони
   просто не діяли, і пакети розсипались у голий текст. Додаємо саме
   вузький контейнер, а не весь #parView: інакше на вигляд батьків
   впали б і .side, і .topbar, і решта каркаса кабінету. */
#cabView, #parPkg{
--bg:#F6F5FC; --green:#1F7A3D; --green-tint:#E8F6EC; --red:#B4231F; --red-tint:#FBEAEA; --card:#FFFFFF;
--shadow-sm:0 2px 8px rgba(34,30,63,.05);
--shadow-md:0 8px 24px rgba(34,30,63,.08);
--shadow-lg:0 18px 40px rgba(34,30,63,.14);



&{font-family:'Manrope',sans-serif;color:var(--text);background:var(--bg);font-size:15.5px;line-height:1.6}
h1,h2,h3{font-family:'Bricolage Grotesque',sans-serif;font-weight:700;color:var(--ink)}
h1{font-size:25px} h2{font-size:19px} h3{font-size:16px}
button{font-family:'Manrope',sans-serif}
*:focus-visible{outline:2.5px solid var(--sun);outline-offset:2px}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;font:700 14px 'Manrope',sans-serif;
  border:2px solid transparent;border-radius:99px;height:42px;padding:0 20px;cursor:pointer;text-decoration:none;
  transition:background .15s,border-color .15s,transform .12s,box-shadow .15s}
.btn:active{transform:scale(.97)}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn-primary{background:var(--violet);color:#fff;box-shadow:0 6px 16px rgba(91,75,212,.28)}
.btn-primary:hover:not(:disabled){background:var(--violet-dark);transform:translateY(-1px);box-shadow:0 10px 20px rgba(91,75,212,.34)}
.btn-coral{background:var(--coral);color:#fff;box-shadow:0 6px 16px rgba(255,107,74,.28)}
.btn-coral:hover:not(:disabled){background:var(--coral-dark);transform:translateY(-1px);box-shadow:0 10px 20px rgba(255,107,74,.34)}
.btn-outline{background:#fff;color:var(--ink);border-color:var(--line)}
.btn-outline:hover{border-color:var(--violet);color:var(--violet);transform:translateY(-1px)}
.btn-ghost{background:transparent;color:var(--violet);padding:0 10px}
.btn-ghost:hover{color:var(--coral-dark)}
.btn-danger{background:var(--red);color:#fff}
/* Каркас */
.app{display:flex;min-height:100vh}
.side{width:230px;background:#fff;border-right:1.5px solid var(--line);padding:20px 12px;display:flex;flex-direction:column;gap:3px;position:sticky;top:0;height:100vh}
.logo{font-family:'Bricolage Grotesque',sans-serif;font-size:20px;font-weight:700;color:var(--ink);padding:6px 12px 20px}
.logo span{color:var(--coral)}
.nav-it{position:relative;display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:12px;font-weight:700;font-size:14px;
  color:var(--muted);cursor:pointer;border:none;background:none;text-align:left;width:100%;
  transition:background .15s,color .15s,transform .12s}
.nav-it svg{width:19px;height:19px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0;transition:transform .15s}
.nav-it.active{background:var(--violet-tint);color:var(--violet)}
.nav-it.active::before{content:'';position:absolute;left:-12px;top:50%;transform:translateY(-50%);width:4px;height:20px;border-radius:0 4px 4px 0;background:var(--violet)}
.nav-it:hover:not(.active){color:var(--ink);background:#F7F6FE}
.nav-it:hover:not(.active) svg{transform:translateX(1px)}
.side-bottom{margin-top:auto;padding:12px;border-top:1.5px solid var(--line);display:flex;align-items:center;gap:10px}
.ava{width:36px;height:36px;border-radius:50%;background:linear-gradient(135deg,var(--coral),var(--sun));color:#fff;display:flex;align-items:center;justify-content:center;font:700 14px 'Bricolage Grotesque',sans-serif;box-shadow:0 4px 10px rgba(255,107,74,.3)}
.main{flex:1;min-width:0;padding:24px 28px 90px}
.topbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:22px;gap:12px;flex-wrap:wrap}
.balance-pill{display:inline-flex;align-items:center;gap:8px;background:#fff;border:1.5px solid var(--line);border-radius:99px;
  padding:8px 16px;font-weight:700;font-size:14px;cursor:pointer;transition:border-color .15s,transform .12s,box-shadow .15s;box-shadow:var(--shadow-sm)}
.balance-pill:hover{border-color:var(--violet);transform:translateY(-1px);box-shadow:var(--shadow-md)}
.balance-pill b{color:var(--violet)}
/* Картки */
.card{background:#fff;border:1.5px solid var(--line);border-radius:18px;padding:22px;box-shadow:var(--shadow-sm);transition:box-shadow .2s,transform .2s;position:relative;overflow:hidden}
.next-card{padding-top:24px}
.next-card::before{content:'';position:absolute;left:0;top:0;right:0;height:5px;background:linear-gradient(90deg,var(--violet),var(--coral))}
.mini-icon{width:38px;height:38px;border-radius:11px;display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0;background:var(--violet-tint)}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:16px}
.muted{color:var(--muted);font-size:13.5px;font-weight:600}
.pill{display:inline-block;font-size:12px;font-weight:700;border-radius:99px;padding:4px 12px}
.pill.v{background:var(--violet-tint);color:var(--violet)}
.pill.g{background:var(--green-tint);color:var(--green)}
.pill.r{background:var(--red-tint);color:var(--red)}
.pill.y{background:#FFF3D1;color:var(--sun-dark)}
.streak{background:linear-gradient(135deg,#FFF3D1,#FFE2AC);color:var(--sun-dark);font-weight:700;font-size:13px;border-radius:99px;padding:5px 13px;box-shadow:0 3px 8px rgba(138,106,0,.12)}
/* Сторінки */
.page{display:none}
.page.active{display:block;animation:pageIn .28s ease both}
@keyframes pageIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}
/* Розклад */
.day{margin-bottom:18px}
.day-h{font-weight:700;color:var(--muted);font-size:13px;text-transform:uppercase;letter-spacing:.06em;margin-bottom:8px}
.slot{display:flex;justify-content:space-between;align-items:center;gap:12px;background:#fff;border:1.5px solid var(--line);
  border-radius:14px;padding:14px 16px;margin-bottom:8px;transition:transform .15s,box-shadow .15s,border-color .15s}
.slot.free{border-style:dashed;border-color:#7BC494;background:var(--green-tint);cursor:pointer}
.slot.free:hover{border-color:var(--green);transform:translateY(-1px);box-shadow:var(--shadow-sm)}
.slot.mine{border-color:var(--violet);background:var(--violet-tint)}
.slot-t{font-weight:700;color:var(--ink)}
.slot-sub{font-size:13px;color:var(--muted);font-weight:600}
/* Домашки */
.hw{display:flex;justify-content:space-between;align-items:center;gap:12px;background:#fff;border:1.5px solid var(--line);
  border-radius:16px;padding:18px;margin-bottom:12px;transition:box-shadow .15s,transform .15s}
.hw:hover{box-shadow:var(--shadow-md);transform:translateY(-1px)}
.progressbar{height:9px;border-radius:99px;background:var(--violet-tint);overflow:hidden;margin-top:8px;width:180px}
.progressbar i{display:block;height:100%;background:linear-gradient(90deg,var(--violet),var(--coral));border-radius:99px;transition:width .5s ease}
/* Вправа */
.ex-q{font-family:'Bricolage Grotesque',sans-serif;font-size:21px;font-weight:700;color:var(--ink);margin:14px 0 18px}
.ex-q .gap{display:inline-block;min-width:80px;border-bottom:3px solid var(--sun);text-align:center;color:var(--violet)}
.qopt{border:2px solid var(--line);background:#fff;border-radius:12px;font:700 15px 'Manrope',sans-serif;color:var(--ink);
  padding:11px 22px;cursor:pointer;margin:0 8px 8px 0}
.qopt.ok{border-color:var(--green);background:var(--green-tint);color:var(--green)}
.qopt.bad{border-color:var(--red);background:var(--red-tint);color:var(--red)}
/* Додаткові завдання в секціях уроку */
.extra-tasks{margin-top:20px;border-top:2px dashed var(--line);padding-top:14px}
.xt-h{font-weight:800;font-size:16px;color:var(--ink);margin-bottom:2px}
.xt-note{color:var(--muted);font-size:13px;margin-bottom:12px}
.xq{margin-bottom:14px}
.xq-q{font-weight:700;margin-bottom:8px;font-size:15px}
.xq-opts{display:flex;flex-wrap:wrap;gap:8px}
.xq-opts .qopt{padding:8px 14px}
.xq-play{border:none;border-radius:10px;padding:5px 10px;background:var(--violet);color:#fff;cursor:pointer;font-size:15px;vertical-align:middle}
.xt-say{background:#F5F3FC;border-radius:12px;padding:10px 14px;margin-bottom:8px;font-size:15px}
/* ===== Пісні на початку/в кінці уроку ===== */
.songbox{display:flex;gap:14px;align-items:flex-start;background:linear-gradient(135deg,#F3EFFF,#FFF3E9);border:2px solid var(--line);border-radius:16px;padding:14px 16px;margin-bottom:16px;flex-wrap:wrap}
.song-emoji{font-size:40px;animation:songWave 1.6s ease-in-out infinite;transform-origin:70% 70%}
@keyframes songWave{0%,100%{transform:rotate(0)}25%{transform:rotate(18deg)}50%{transform:rotate(-8deg)}75%{transform:rotate(12deg)}}
.song-t{font-weight:800;font-size:16px;color:var(--ink);margin-bottom:6px}
.song-lines{font-size:14.5px;line-height:1.7}
.sline{display:block;color:var(--muted);transition:all .25s;border-radius:8px;padding:1px 6px}
.sline.now{color:var(--ink);font-weight:800;background:#fff}
.song-play{margin-left:auto;align-self:center}
/* ===== Анімовані «gif»-картки з фразами ===== */
.gifrow{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:14px}
.gifcard{background:#fff;border:2px solid var(--line);border-radius:14px;padding:10px 14px;display:flex;align-items:center;gap:8px;font-weight:800;color:var(--ink)}
.gifcard .g-e{font-size:24px;display:inline-block}
.gifcard.bounce .g-e{animation:gBounce 1s ease-in-out infinite}
.gifcard.spin .g-e{animation:gSpin 2.4s linear infinite}
.gifcard.pulse .g-e{animation:gPulse 1.2s ease-in-out infinite}
.gifcard.shake .g-e{animation:songWave 1.4s ease-in-out infinite;transform-origin:70% 70%}
@keyframes gBounce{0%,100%{transform:translateY(0)}50%{transform:translateY(-7px)}}
@keyframes gSpin{from{transform:rotate(0)}to{transform:rotate(360deg)}}
@keyframes gPulse{0%,100%{transform:scale(1)}50%{transform:scale(1.25)}}
/* ===== Фліп-картки словника в уроці ===== */
.vcards{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;margin-top:12px}
.vcard{perspective:600px;cursor:pointer;height:92px}
.vcard-in{position:relative;width:100%;height:100%;transition:transform .4s;transform-style:preserve-3d}
.vcard.fl .vcard-in{transform:rotateY(180deg)}
.vface{position:absolute;inset:0;backface-visibility:hidden;border:2px solid var(--line);border-radius:14px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;background:#fff;font-weight:800;padding:6px;text-align:center}
.vface small{font-weight:600;color:var(--muted);font-size:11px}
.vface.back{transform:rotateY(180deg);background:var(--violet);color:#fff;border-color:var(--violet)}
/* ===== Похвала англійською за правильні відповіді ===== */
#praise{position:fixed;left:50%;top:38%;transform:translate(-50%,-50%) scale(.6);z-index:400;background:#fff;border:3px solid var(--green);color:var(--green);border-radius:20px;padding:14px 26px;font:800 22px 'Manrope',sans-serif;box-shadow:0 16px 44px rgba(34,30,63,.22);opacity:0;pointer-events:none;transition:all .25s}
#praise.show{opacity:1;transform:translate(-50%,-50%) scale(1)}
#praise .p-e{font-size:28px;display:inline-block;animation:gBounce .7s ease-in-out infinite}
/* ===== YouTube-відео в уроці ===== */
.ytbox{background:#fff;border:2px solid var(--line);border-radius:16px;padding:14px 16px;margin-bottom:16px}
.yt-t{font-weight:800;color:var(--ink);margin-bottom:10px}
.yt-tabs{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:10px}
.yt-load{border:2px solid var(--line);background:#fff;border-radius:99px;font:700 13px 'Manrope',sans-serif;color:var(--muted);padding:8px 14px;cursor:pointer}
.yt-load.active{border-color:var(--coral);color:var(--coral);background:#FFF1EC}
.yt-frame{position:relative;width:100%;aspect-ratio:16/9;border-radius:12px;overflow:hidden;background:#F3F1FA;display:flex;align-items:center;justify-content:center;color:var(--muted);font-weight:700}
.yt-frame iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
.yt-poster{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  background-size:cover;background-position:center;text-decoration:none}
.yt-poster:before{content:'';position:absolute;inset:0;background:rgba(0,0,0,.22)}
.yt-poster .ytp-play{position:relative;width:66px;height:66px;border-radius:50%;background:rgba(255,255,255,.94);
  color:#E4574B;display:flex;align-items:center;justify-content:center;font-size:26px;padding-left:5px;
  box-shadow:0 6px 20px rgba(0,0,0,.3);transition:.15s}
.yt-poster:hover .ytp-play{transform:scale(1.09)}
.yt-poster .ytp-cap{position:absolute;left:0;right:0;bottom:0;padding:10px 14px;color:#fff;font-weight:700;font-size:13.5px;
  background:linear-gradient(transparent,rgba(0,0,0,.65))}
.yt-note{margin-top:10px;font-size:12.5px;color:var(--muted);background:#FFF8E1;border:1.5px dashed #F0C86A;border-radius:10px;padding:8px 11px}
/* ===== "Let's talk!" — колесо для обговорення ===== */
.talkwheel{background:#fff;border:2px solid var(--line);border-radius:16px;padding:16px 16px 22px;margin-bottom:16px;text-align:center}
.tw-h{font-weight:800;color:var(--ink);margin-bottom:2px;text-align:left}
.wheel-wrap{position:relative;width:240px;margin:0 auto}
.wheel-pointer{position:absolute;top:-6px;left:50%;transform:translateX(-50%);font-size:22px;color:var(--coral);z-index:2;line-height:1}
.wheel-disc{transition:transform 2.4s cubic-bezier(.17,.67,.14,1);will-change:transform}
.wheel-result{margin-top:16px;background:var(--violet-tint);border-radius:14px;padding:16px}
.wr-label{font-weight:700;color:var(--violet);font-size:13px;text-transform:uppercase;letter-spacing:.05em;margin-bottom:6px}
.wr-q{font-family:'Bricolage Grotesque',sans-serif;font-weight:700;font-size:19px;color:var(--ink)}
/* ===== "Discuss!" — колода карток ===== */
.discuss-deck{background:#fff;border:2px solid var(--line);border-radius:16px;padding:16px 16px 22px;margin-bottom:16px;text-align:center}
.dd-h{font-weight:800;color:var(--ink);margin-bottom:2px;text-align:left}
.dd-stage{display:flex;justify-content:center;margin:14px 0}
.dd-card{width:220px;min-height:140px;border-radius:16px;background:linear-gradient(135deg,#1F7A3D,#0E5C28);color:#fff;
  display:flex;align-items:center;justify-content:center;padding:18px;box-shadow:0 12px 26px rgba(31,122,61,.28);
  transition:transform .35s;position:relative}
.dd-card.shuffling{animation:ddShake .5s ease}
@keyframes ddShake{0%,100%{transform:rotate(0)}25%{transform:rotate(-4deg)}75%{transform:rotate(4deg)}}
.dd-card .dd-face{font-size:44px;transition:opacity .18s}
.dd-card.flipped .dd-face{display:none}
.dd-q{font-weight:700;font-size:17px;line-height:1.4}
.dd-controls{display:flex;gap:12px;justify-content:center;margin-top:16px}
.mood-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;max-width:300px;margin:14px auto}
.mood-cell{aspect-ratio:1;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:20px;box-shadow:0 4px 10px rgba(0,0,0,.14)}
/* ===== "Complete the blog" ===== */
.blog-cloze{background:#fff;border:2px solid var(--line);border-radius:16px;padding:16px 18px 20px;margin-bottom:16px}
.bc-h{font-weight:800;color:var(--ink);margin-bottom:10px}
.bc-card{background:linear-gradient(135deg,var(--violet-tint),#F3F1FA);border-radius:14px;padding:18px 20px}
.bc-text{line-height:2.1;font-size:15.5px;color:var(--ink)}
.cloze-in{border:2px solid var(--violet);border-radius:8px;padding:2px 8px;font:700 14px 'Manrope',sans-serif;color:var(--ink);
  margin:0 3px;text-align:center;background:#fff}
.cloze-in.ok{border-color:var(--green);background:#E8F6EC}
.cloze-in.bad{border-color:var(--red);background:#FBEAEA}
.bc-hint{margin-top:10px;font-size:13px;color:var(--muted);font-weight:700}
.brand-mark{display:flex;align-items:center;gap:6px;justify-content:flex-end;margin-top:14px;opacity:.55;font:800 12px 'Bricolage Grotesque',sans-serif;color:var(--violet)}
.brand-mark svg{width:16px;height:16px}
.cloze-wrap{position:relative;display:inline-block}
/* Плаваюча підказка з відповіддю (при наведенні на клітинку) */
#answerTip{display:none;position:fixed;left:0;top:0;z-index:99999;background:#E4F6E9;
  color:#2E9E52;font:700 16px 'Manrope',sans-serif;padding:9px 18px;border-radius:14px;
  white-space:nowrap;pointer-events:none;box-shadow:0 6px 18px rgba(20,60,35,.12)}
#answerTip::after{content:'';position:absolute;left:50%;top:100%;transform:translateX(-50%);
  border:7px solid transparent;border-top-color:#E4F6E9;border-bottom:none}
#answerTip.below::after{top:auto;bottom:100%;border-top:none;border-bottom:7px solid #E4F6E9}
/* Оплати */
.pkg{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:14px}
.pkg .card{text-align:center;transition:transform .18s,box-shadow .18s}
.pkg .card:hover{transform:translateY(-3px);box-shadow:var(--shadow-md)}
.pkg .price{font-family:'Bricolage Grotesque',sans-serif;font-size:26px;font-weight:700;color:var(--ink);margin:6px 0}
.ledger{width:100%;border-collapse:collapse;margin-top:14px;font-size:14px}
.ledger th{text-align:left;color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.05em;padding:8px 10px;border-bottom:1.5px solid var(--line)}
.ledger td{padding:10px;border-bottom:1px solid var(--line)}
.ledger tbody tr{transition:background .12s}
.ledger tbody tr:hover{background:#FAF9FF}
.delta-p{color:var(--green);font-weight:700}
.delta-m{color:var(--red);font-weight:700}
/* Прогрес */
.badges{display:flex;gap:12px;flex-wrap:wrap;margin-top:12px}
.bdg{width:92px;text-align:center;background:#fff;border:1.5px solid var(--line);border-radius:14px;padding:12px 6px;font-size:11.5px;font-weight:700;color:var(--ink);transition:transform .18s,box-shadow .18s,border-color .18s}
.bdg:not(.locked):hover{transform:translateY(-3px) scale(1.03);box-shadow:var(--shadow-md);border-color:var(--sun)}
.bdg .bi{font-size:24px;margin-bottom:6px;transition:transform .2s}
.bdg:not(.locked):hover .bi{transform:scale(1.15) rotate(-6deg)}
.bdg.locked{opacity:.4}
/* Модалка, тост */
.modal-bg{display:none;position:fixed;inset:0;background:rgba(34,30,63,.55);z-index:100;align-items:center;justify-content:center;padding:16px}
.modal-bg.show{display:flex}
.modal{background:#fff;border-radius:20px;max-width:420px;width:100%;padding:26px;position:relative}
/* ===== Тижневий розклад викладача ===== */
.tt-tabs{display:flex;gap:20px;border-bottom:2px solid var(--line);margin-bottom:14px;flex-wrap:wrap}
.tt-tab{border:none;background:none;font:700 15px 'Manrope',sans-serif;color:var(--muted);padding:8px 2px;cursor:pointer;border-bottom:3px solid transparent;margin-bottom:-2px}
.tt-tab.active{color:var(--ink);border-color:var(--violet)}
.wk-head{display:flex;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}
.wk-nav{border:1px solid var(--line);background:#fff;border-radius:10px;width:38px;height:38px;cursor:pointer;font-size:16px;color:var(--violet)}
.wk-range{font-weight:800;color:var(--ink);min-width:140px;text-align:center;border:1px solid var(--line);border-radius:10px;padding:9px 14px}
.wk-tz{margin-left:auto;color:var(--muted);font-size:13px;border:1px solid var(--line);border-radius:10px;padding:9px 12px}
.wk-scroll{overflow-x:auto}
.wk-grid{display:grid;grid-template-columns:50px repeat(7,minmax(96px,1fr));border:1px solid var(--line);border-radius:14px;overflow:hidden;background:#fff;min-width:760px}
.wk-dayh{padding:9px 4px;text-align:center;font-weight:800;font-size:13px;border-bottom:1px solid var(--line);background:#FAFAFE;color:var(--ink)}
.wk-dayh.today span{background:var(--coral);color:#fff;border-radius:99px;padding:3px 10px}
.wk-hour{font-size:11px;color:var(--muted);text-align:right;padding:4px 6px 0 0;border-top:1px solid var(--line);background:#FAFAFE}
.wk-cell{border-top:1px solid var(--line);border-left:1px solid var(--line);min-height:46px;padding:2px;position:relative;cursor:pointer}
.wk-cell:hover{background:#F7F6FE}
.wk-cell:hover::after{content:'＋';position:absolute;right:6px;bottom:2px;color:var(--violet);font-weight:800;font-size:14px;opacity:.7}
.wk-les{border-radius:9px;padding:5px 7px;font-size:12px;font-weight:700;margin-bottom:3px;cursor:pointer;display:flex;align-items:center;gap:5px;overflow:hidden;white-space:nowrap;position:relative}
.wk-les .wl-i{width:18px;height:18px;border-radius:6px;background:rgba(255,255,255,.75);display:inline-flex;align-items:center;justify-content:center;font-size:11px;flex:0 0 18px}
.wk-les.done{background:#C9F2D0;color:#1F7A3D}
.wk-les.planned{background:#FFE2AC;color:#8A5B00}
.wk-les.noshow{background:#FBD2D0;color:#B4231F}
.wk-les .wl-alert{position:absolute;top:-5px;left:-5px;background:#E2574C;color:#fff;width:15px;height:15px;border-radius:50%;font-size:10px;display:flex;align-items:center;justify-content:center}
.wk-les .wl-q{position:absolute;top:-5px;right:-5px;background:#F2A324;color:#fff;width:15px;height:15px;border-radius:50%;font-size:10px;font-weight:800;display:flex;align-items:center;justify-content:center}
/* Скасоване заняття не зникає з тижня: учень має бачити, що урок був і
   що його скасували, — інакше порожнє місце виглядає як помилка. */
.wk-les.cancelled{background:#EFEDF6;color:#8A86A8;text-decoration:line-through}
/* Час заняття минув, а стану ніхто не поставив. Червоне, як і пропуск,
   але порожнє всередині: це ще не вирок, це нагадування закрити урок. */
.wk-les.expired{background:#FDEBEA;color:#B4231F;box-shadow:inset 0 0 0 1.5px #F0A9A5}
/* Учень уже поставив зірочки за це заняття. */
.wk-les .wl-star{position:absolute;top:-5px;right:-5px;color:#FFC93C;font-size:12px;text-shadow:0 0 2px rgba(0,0,0,.35)}
/* центр сповіщень */
.ntf-wrap{position:relative;margin-left:auto}
.ntf-cnt{position:absolute;top:-6px;right:-6px;background:#E2574C;color:#fff;border-radius:99px;font-size:10px;font-weight:800;padding:2px 5px;min-width:16px;text-align:center}
.ntf-panel{display:none;position:absolute;right:0;top:46px;width:min(360px,86vw);background:#fff;border:1px solid var(--line);border-radius:16px;box-shadow:0 14px 40px rgba(34,30,63,.18);z-index:60;max-height:380px;overflow:auto}
.ntf-panel.show{display:block}
.ntf-it{display:flex;gap:10px;padding:12px 14px;border-bottom:1px solid var(--line);font-size:13.5px;line-height:1.45}
.ntf-it:last-child{border-bottom:none}
.ntf-it .ntf-t{color:var(--muted);font-size:11.5px;margin-top:2px}
.ntf-empty{padding:18px;text-align:center;color:var(--muted)}
/* пакети уроків */
.pk{border:2px solid var(--line);border-radius:14px;padding:12px 14px;margin-bottom:10px;cursor:pointer;display:flex;justify-content:space-between;align-items:center;gap:10px}
.pk:hover{border-color:var(--violet)}
.pk.sel{border-color:var(--violet);background:var(--violet-tint)}
.pk .pk-n{font-weight:800;color:var(--ink)}
.pk .pk-d{color:var(--muted);font-size:13px}
.pk .pk-p{font-weight:800;color:var(--violet);white-space:nowrap}
.wk-legend{display:flex;gap:16px;margin-top:10px;flex-wrap:wrap;font-size:13px;color:var(--muted)}
.wk-dot{display:inline-block;width:11px;height:11px;border-radius:3px;margin-right:5px;vertical-align:middle}
/* студенти */
.st-row{display:flex;align-items:center;gap:14px;padding:14px 0;border-bottom:1px solid var(--line)}
.st-ava{width:52px;height:52px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:800;color:#fff;font-size:18px;flex:0 0 52px}
.st-name{font-weight:800;color:var(--ink)}
.st-actions{margin-left:auto;display:flex;gap:8px;align-items:center}
.st-search{width:100%;border:1px solid var(--line);border-radius:12px;padding:11px 14px;font:600 14px 'Manrope',sans-serif;margin-bottom:14px}
.sp-head{display:flex;gap:18px;align-items:center;margin-bottom:16px;flex-wrap:wrap}
.sp-ava{width:92px;height:92px;border-radius:50%;font-size:32px;color:#fff;display:flex;align-items:center;justify-content:center;font-weight:800}
.sp-tabs{display:flex;gap:18px;border-bottom:2px solid var(--line);margin:14px 0}
.sp-tab{border:none;background:none;font:700 15px 'Manrope',sans-serif;color:var(--muted);padding:7px 2px;cursor:pointer;border-bottom:3px solid transparent;margin-bottom:-2px}
.sp-tab.active{color:var(--ink);border-color:var(--violet)}
.fld{display:grid;grid-template-columns:160px 1fr;gap:10px;align-items:start;margin-bottom:12px}
.fld>label{font-weight:700;color:var(--ink);padding-top:10px;font-size:14px}
.fld input,.fld select,.fld textarea{width:100%;border:1px solid var(--line);border-radius:12px;padding:10px 12px;font:600 14px 'Manrope',sans-serif;color:var(--ink);background:#fff}
.fld textarea{min-height:72px;resize:vertical}
@media(max-width:560px){.fld{grid-template-columns:1fr}.fld>label{padding-top:0}}
.modal-close{position:absolute;top:12px;right:12px;background:none;border:none;font-size:18px;color:var(--muted);cursor:pointer;padding:6px}
.m-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}
#toast{position:fixed;right:16px;top:16px;z-index:120;display:flex;flex-direction:column;gap:8px}
.toast{background:#fff;border-left:4px solid var(--green);border-radius:12px;box-shadow:0 12px 30px rgba(34,30,63,.18);
  padding:12px 18px;font-weight:700;font-size:14px;animation:tIn .25s}
.toast.err{border-left-color:var(--red)}

/* Мобільний */
.tabbar{display:none}
@media (max-width:820px){
  .side{display:none}
  .main{padding:16px 14px 84px}
  .grid2,.pkg{grid-template-columns:1fr}
  .tabbar{display:flex;position:fixed;left:0;right:0;bottom:0;background:rgba(255,255,255,.94);backdrop-filter:blur(10px);border-top:1.5px solid var(--line);z-index:90;padding-bottom:env(safe-area-inset-bottom)}
  .tab{flex:1;border:none;background:none;padding:8px 4px 10px;font:700 10.5px 'Manrope',sans-serif;color:var(--muted);cursor:pointer;transition:color .15s,transform .15s}
  .tab svg{width:20px;height:20px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;display:block;margin:0 auto 3px;transition:transform .15s}
  .tab.active{color:var(--violet)}
  .tab.active svg{transform:translateY(-2px)}
}

/* Тижневий стрік */
.week{display:flex;gap:10px;margin-top:14px;flex-wrap:wrap}
.wd{width:44px;text-align:center}
.wd .dot{width:34px;height:34px;border-radius:50%;background:var(--violet-tint);margin:0 auto 4px;
  display:flex;align-items:center;justify-content:center;font-size:15px;transition:transform .15s,box-shadow .15s}
.wd.done .dot{background:linear-gradient(135deg,var(--sun),var(--coral));box-shadow:0 4px 10px rgba(255,107,74,.28)}
.wd.today .dot{outline:2px solid var(--violet);outline-offset:2px}
.wd .lbl{font-size:11px;font-weight:700;color:var(--muted)}
.wd.today .lbl{color:var(--violet)}
/* Флеш-картки */
.fc-wrap{max-width:380px;margin:0 auto;text-align:center}
.fc{perspective:900px;cursor:pointer;height:190px;margin:14px 0}
.fc-inner{position:relative;width:100%;height:100%;transition:transform .45s;transform-style:preserve-3d}
.fc.flip .fc-inner{transform:rotateY(180deg)}
.fc-face{position:absolute;inset:0;backface-visibility:hidden;border-radius:18px;display:flex;flex-direction:column;
  align-items:center;justify-content:center;font-family:'Bricolage Grotesque',sans-serif;font-weight:700}
.fc-front{background:var(--violet);color:#fff;font-size:34px}
.fc-back{background:var(--sun);color:var(--ink);transform:rotateY(180deg);font-size:26px}
.fc-face small{font-family:'Manrope',sans-serif;font-size:12px;font-weight:600;opacity:.75;margin-top:8px}
.fc-btns{display:flex;gap:10px;justify-content:center}
.fc-count{margin-top:12px}
/* Матчинг */
.match{display:grid;grid-template-columns:1fr 1fr;gap:10px;max-width:440px}
.m-it{border:2px solid var(--line);background:#fff;border-radius:12px;padding:12px;font-weight:700;color:var(--ink);
  cursor:pointer;text-align:center;transition:border-color .12s,background .12s}
.m-it.sel{border-color:var(--violet);background:var(--violet-tint)}
.m-it.done{border-color:var(--green);background:var(--green-tint);color:var(--green);cursor:default}
.m-it.err{border-color:var(--red);background:var(--red-tint)}
/* Аудіювання */
.listen-btn{width:74px;height:74px;border-radius:50%;border:none;background:var(--violet);color:#fff;font-size:28px;
  cursor:pointer;display:block;margin:6px auto 16px;transition:transform .1s}
.listen-btn:active{transform:scale(.94)}
.game-tabs{display:flex;gap:8px;margin-bottom:16px;flex-wrap:wrap}
.gtab{border:2px solid var(--line);background:#fff;border-radius:99px;font:700 13.5px 'Manrope',sans-serif;color:var(--muted);
  height:38px;padding:0 18px;cursor:pointer}
.gtab.active{border-color:var(--violet);background:var(--violet-tint);color:var(--violet)}
.gpane{display:none}.gpane.active{display:block}


/* Тест рівня */
.lt-card{background:#fff;border:1.5px solid var(--line);border-radius:22px;padding:32px;max-width:640px;margin:0 auto}
.lt-progress{display:flex;gap:6px;margin-bottom:20px}
.lt-dot{flex:1;height:8px;border-radius:4px;background:var(--violet-tint)}
.lt-dot.done{background:var(--violet)}
.lt-q{font-family:'Bricolage Grotesque',sans-serif;font-size:21px;font-weight:700;color:var(--ink);margin-bottom:18px;line-height:1.35}
.lt-opts{display:grid;gap:10px}
.lt-opt{border:2px solid var(--line);background:#fff;border-radius:14px;font:600 15.5px 'Manrope',sans-serif;color:var(--ink);
  padding:13px 18px;cursor:pointer;text-align:left;transition:border-color .12s,background .12s}
.lt-opt:hover{border-color:var(--violet);background:var(--violet-tint)}
.lt-result{text-align:center}
.lt-level{font-family:'Bricolage Grotesque',sans-serif;font-size:52px;font-weight:700;color:var(--violet);margin:8px 0}
.lt-bar{height:12px;border-radius:6px;background:var(--violet-tint);overflow:hidden;max-width:340px;margin:14px auto}
.lt-bar i{display:block;height:100%;background:linear-gradient(90deg,var(--violet),var(--coral))}


/* Бонус після заявки */
.bonus{margin-top:20px;text-align:left;background:#FFFBEF;border:1.5px solid #F0D48A;border-radius:14px;padding:16px 18px}
.bonus h4{font-family:'Bricolage Grotesque',sans-serif;font-size:15px;color:var(--sun-dark);margin-bottom:10px}
.bonus ol{margin:0 0 0 18px;font-size:14px}
.bonus li{padding:3px 0;color:var(--ink);font-weight:600}
.bonus li span{color:var(--muted);font-weight:500}
/* Про школу */
.about-grid{display:grid;grid-template-columns:.85fr 1.15fr;gap:40px;align-items:center}
.founder{border:1.5px solid var(--line);border-radius:20px;overflow:hidden;background:#fff}
.founder .photo-ph{aspect-ratio:4/5}
.founder-cap{padding:16px 20px}
.values{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:28px}
.value{background:#fff;border:1.5px solid var(--line);border-radius:16px;padding:20px}
.value .v-ico{width:40px;height:40px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:18px;margin-bottom:12px}
.value:nth-child(1) .v-ico{background:var(--violet-tint)}
.value:nth-child(2) .v-ico{background:#FFE9E2}
.value:nth-child(3) .v-ico{background:#FFF3D1}
.value p{font-size:14px;color:var(--muted);font-weight:500;margin-top:6px}
@media (max-width:900px){.about-grid,.values{grid-template-columns:1fr}}


/* Вправа: переписати реченння синонімом */
.rw{margin-bottom:22px}
.rw-orig{font-size:16px;color:var(--ink);font-weight:600;margin-bottom:8px}
.rw-orig b{color:var(--violet)}
.rw-row{display:flex;gap:10px;align-items:flex-start;flex-wrap:wrap;position:relative}
.rw-input{flex:1;min-width:220px;border:2px solid var(--line);border-radius:12px;padding:11px 14px;
  font:600 15px 'Manrope',sans-serif;color:var(--ink)}
.rw-input:focus{outline:none;border-color:var(--violet)}
.rw-input.ok{border-color:var(--green);background:#F2FBF5}
.rw-input.near{border-color:#D9A521;background:#FFFBEF}
.open-answer{width:100%;border:2px solid var(--line);border-radius:12px;padding:12px 14px;font:600 15px 'Manrope',sans-serif;
  color:var(--ink);resize:vertical;min-height:90px}
.open-answer:focus{outline:none;border-color:var(--violet)}
.open-answer.ok{border-color:var(--green);background:#F2FBF5}
.open-answer.bad{border-color:var(--red)}
.open-count{margin-top:6px;font-size:12.5px;color:var(--muted);font-weight:700}
.ld-stars{display:flex;gap:8px;justify-content:center}
.ld-star{font-size:38px;line-height:1;background:none;border:none;cursor:pointer;color:#E2DFEF;transition:color .15s,transform .15s;padding:2px}
.ld-star:hover{transform:scale(1.12)}
.ld-star.on{color:var(--sun,#FFC93C)}
.rw-check{height:44px}
/* Підказка викладача — тільки в ролі викладача (body.role-teacher) */
.rw-hint{display:none}
body.role-teacher .rw-hint{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:700;
  color:var(--sun-dark);background:#FFF3D1;border:1px solid #F0D48A;border-radius:99px;padding:5px 12px;margin-top:6px;cursor:help;position:relative}
body.role-teacher .rw-hint .rw-answer{display:none;position:absolute;left:0;bottom:130%;z-index:20;
  background:var(--ink);color:#fff;font-weight:600;border-radius:10px;padding:8px 12px;white-space:nowrap;
  box-shadow:0 8px 22px rgba(34,30,63,.3);font-size:13px}
body.role-teacher .rw-hint:hover .rw-answer{display:block}
.rw-teacher-note{display:none}
body.role-teacher .rw-teacher-note{display:block;background:#EFEDFB;border-left:3px solid var(--violet);
  border-radius:0 10px 10px 0;padding:8px 12px;font-size:12.5px;color:var(--violet);font-weight:600;margin-bottom:14px}
.rw-fb{min-height:20px;font-weight:700;font-size:13.5px;margin-top:6px;width:100%}


/* Бібліотека завдань учня */
.ex-types{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:18px}
.ex-type{background:#fff;border:1.5px solid var(--line);border-radius:16px;padding:16px;cursor:pointer;text-align:center;transition:border-color .12s,transform .1s}
.ex-type:hover{border-color:var(--violet);transform:translateY(-2px)}
.ex-type.active{border-color:var(--violet);background:var(--violet-tint)}
.ex-type .et-ico{font-size:26px;margin-bottom:8px}
.ex-type .et-name{font-weight:700;color:var(--ink);font-size:14px}
.ex-type .et-cnt{font-size:12px;color:var(--muted);font-weight:600;margin-top:2px}
/* Пропуск-слово / порядок слів */
.gap-input{display:inline-block;min-width:110px;border:none;border-bottom:2px solid var(--violet);
  font:600 16px 'Manrope',sans-serif;color:var(--violet);text-align:center;padding:2px 6px;background:transparent}
.gap-input:focus{outline:none;border-bottom-color:var(--coral)}
.words-bank{display:flex;gap:8px;flex-wrap:wrap;margin:14px 0}
.word-chip{border:2px solid var(--line);background:#fff;border-radius:10px;padding:8px 14px;font-weight:700;
  color:var(--ink);cursor:pointer;transition:border-color .12s}
.word-chip:hover{border-color:var(--violet)}
.word-chip.used{opacity:.35;pointer-events:none}
.words-answer{min-height:48px;border:2px dashed var(--line);border-radius:12px;padding:10px;display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.words-answer .word-chip{cursor:pointer;border-style:solid}
.words-answer:empty::before{content:"Клікай слова по порядку…";color:var(--muted);font-weight:600;font-size:14px}
/* Панель викладача: конструктор ДЗ */
.hwbuilder{border:1.5px solid var(--violet);border-radius:16px;padding:18px;margin-top:14px;background:#FBFAFF;display:none}
body.role-teacher .hwbuilder{display:block}
.hwb-row{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:10px}
.hwb-row select,.hwb-row input{border:1.5px solid var(--line);border-radius:10px;padding:9px 12px;font:600 14px 'Manrope',sans-serif}
.hwb-row input{flex:1;min-width:180px}
.assigned-list{margin-top:12px}
.assigned-item{display:flex;justify-content:space-between;align-items:center;gap:10px;background:#fff;border:1.5px solid var(--line);
  border-radius:10px;padding:10px 14px;margin-bottom:6px;font-size:14px}
.assigned-item .ai-del{border:none;background:none;color:var(--red);cursor:pointer;font-weight:700;font-size:15px}


/* Секції уроку */
.lesson-layout{display:grid;grid-template-columns:200px 1fr;gap:20px;align-items:start}
.sections{background:#fff;border:1.5px solid var(--line);border-radius:16px;padding:14px;position:sticky;top:16px}
.sections h3{font-size:13px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin-bottom:10px;padding:0 6px}
.sec-it{display:flex;align-items:center;gap:9px;padding:9px 10px;border-radius:10px;cursor:pointer;font-weight:700;font-size:13.5px;color:var(--muted);border:none;background:none;width:100%;text-align:left}
.sec-it .si-ic{font-size:16px}
.sec-it .si-check{margin-left:auto;font-size:12px;color:var(--green);opacity:0}
.sec-it.done .si-check{opacity:1}
.sec-it.active{background:var(--violet-tint);color:var(--violet)}
.sec-it:hover:not(.active){color:var(--ink)}
.sec-body{background:#fff;border:1.5px solid var(--line);border-radius:16px;padding:24px;min-height:340px}
.sec-body h2{font-size:20px;margin-bottom:4px}
.sec-tag{display:inline-block;font-size:12px;font-weight:700;color:var(--violet);background:var(--violet-tint);border-radius:99px;padding:4px 12px;margin-bottom:14px}
.reading-text{background:var(--violet-tint);border-radius:12px;padding:16px 18px;font-size:15.5px;line-height:1.7;margin-bottom:16px}
.reading-text b{color:var(--violet)}
.speak-box{text-align:center;padding:10px 0}
.mic-btn{width:80px;height:80px;border-radius:50%;border:none;background:var(--coral);color:#fff;font-size:30px;cursor:pointer;margin:10px auto;display:block;transition:transform .1s}
.mic-btn:active{transform:scale(.94)}
.mic-btn.rec{background:var(--red);animation:pulse 1s infinite}
@keyframes pulse{0%,100%{box-shadow:0 0 0 0 rgba(180,35,31,.4)}50%{box-shadow:0 0 0 12px rgba(180,35,31,0)}}
.sec-nav{display:flex;justify-content:space-between;margin-top:20px;gap:10px}
.dict-item{display:flex;justify-content:space-between;padding:12px 0;border-bottom:1px solid var(--line)}
.dict-item:last-child{border-bottom:none}
.dict-w{font-weight:700;color:var(--ink)}
.dict-t{color:var(--muted);font-weight:600}
.dict-play{border:none;background:var(--violet-tint);color:var(--violet);border-radius:8px;width:32px;height:32px;cursor:pointer}
.cool-emoji{display:flex;gap:12px;justify-content:center;margin:16px 0}
.cool-emoji button{font-size:32px;background:none;border:2px solid var(--line);border-radius:14px;width:60px;height:60px;cursor:pointer}
.cool-emoji button:hover{border-color:var(--violet)}
.cool-emoji button.sel{border-color:var(--violet);background:var(--violet-tint)}
@media (max-width:820px){.lesson-layout{grid-template-columns:1fr}.sections{position:static}}


/* Навігація матеріалів (Change Unit) */
.unit-bar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:16px}
.unit-btn{display:inline-flex;align-items:center;gap:8px;background:#fff;border:1.5px solid var(--line);border-radius:99px;
  padding:8px 16px;font-weight:700;font-size:14px;color:var(--ink);cursor:pointer}
.unit-btn:hover{border-color:var(--violet)}
.unit-current{font-weight:700;color:var(--violet)}
.levels{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}
.level-card{display:flex;align-items:center;gap:14px;background:#fff;border:1.5px solid var(--line);border-radius:16px;
  padding:16px;cursor:pointer;transition:border-color .12s,transform .1s}
.level-card:hover{border-color:var(--violet);transform:translateY(-2px)}
.level-badge{width:56px;height:56px;border-radius:14px;display:flex;align-items:center;justify-content:center;
  font-family:'Bricolage Grotesque',sans-serif;font-weight:700;font-size:20px;color:#fff;flex-shrink:0}
.level-info b{color:var(--ink);font-size:15px}
.level-info .li-sub{font-size:13px;color:var(--muted);font-weight:600}
.level-info .li-prog{font-size:12px;color:var(--violet);font-weight:700;margin-top:2px}
.lesson-list-item{display:flex;align-items:center;gap:14px;background:#fff;border:1.5px solid var(--line);border-radius:14px;
  padding:14px 16px;margin-bottom:8px;cursor:pointer;transition:border-color .12s}
.lesson-list-item:hover{border-color:var(--violet)}
.lesson-num{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  font-family:'Bricolage Grotesque',sans-serif;font-weight:700;color:#fff;flex-shrink:0;background:var(--coral)}
.lesson-list-item.done .lesson-num{background:var(--green)}
.lesson-list-item.current{border-color:var(--violet);background:var(--violet-tint)}
.lesson-title{font-weight:700;color:var(--ink);flex:1}
.lesson-open{color:var(--violet);font-weight:700;font-size:13px}
.lesson-list-item.done .lesson-check{color:var(--green);font-weight:700}
/* Teacher's notes */
.teacher-notes{display:none}
body.role-teacher .teacher-notes{display:block;background:#E7F3FB;border-radius:12px;padding:14px 16px;margin-bottom:16px;font-size:14px}
body.role-teacher .teacher-notes .tn-h{font-weight:700;color:#1a6ca8;margin-bottom:6px;display:flex;align-items:center;gap:6px}
body.role-teacher .teacher-notes .tn-time{color:var(--coral-dark);font-weight:700;font-size:13px;margin:8px 0 2px}


/* Спливаючий перекладач */
#wordPop{position:fixed;z-index:300;display:none;background:var(--ink);color:#fff;border-radius:14px;
  padding:14px 16px;box-shadow:0 14px 40px rgba(34,30,63,.35);max-width:300px;font-size:14px}
#wordPop.show{display:block;animation:wpIn .15s}
@keyframes wpIn{from{opacity:0;transform:translateY(6px)}to{opacity:1}}
#wordPop .wp-en{font-weight:700;font-size:16px;margin-bottom:4px}
#wordPop .wp-ua{color:#CFC9F2;margin-bottom:10px}
#wordPop .wp-btns{display:flex;gap:8px}
#wordPop button{border:none;border-radius:9px;padding:7px 12px;font:700 13px 'Manrope',sans-serif;cursor:pointer}
#wordPop .wp-add{background:var(--coral);color:#fff}
#wordPop .wp-say{background:rgba(255,255,255,.15);color:#fff}
#wordPop::after{content:"";position:absolute;left:24px;bottom:-6px;border:6px solid transparent;border-top-color:var(--ink);border-bottom:0}
/* Мій словник (розділ Практика) */
.mydict-empty{color:var(--muted);font-weight:600;text-align:center;padding:20px}
.mydict-item{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:11px 0;border-bottom:1px solid var(--line)}
.mydict-item:last-child{border-bottom:none}
.mydict-del{border:none;background:none;color:var(--red);cursor:pointer;font-weight:700}
.mydict-learn{border:none;background:var(--violet-tint);color:var(--violet);border-radius:8px;padding:5px 10px;font:700 12px 'Manrope',sans-serif;cursor:pointer}
.mydict-item.learned .dict-w{text-decoration:line-through;opacity:.6}
.mydict-item.learned .mydict-learn{background:var(--green-tint);color:var(--green)}


/* Статистика прогресу */
.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:12px;margin-top:14px}
.stat-tile{background:var(--violet-tint);border-radius:14px;padding:16px;text-align:center;transition:transform .18s,box-shadow .18s}
.stat-tile:hover{transform:translateY(-2px);box-shadow:var(--shadow-sm)}
.stat-tile b{font-family:'Bricolage Grotesque',sans-serif;font-size:26px;color:var(--violet);display:block}
.stat-tile span{font-size:12.5px;font-weight:700;color:var(--muted)}
.stat-tile.coral{background:#FFE9E2}.stat-tile.coral b{color:var(--coral-dark)}
.stat-tile.sun{background:#FFF3D1}.stat-tile.sun b{color:var(--sun-dark)}
.stat-tile.green{background:var(--green-tint)}.stat-tile.green b{color:var(--green)}
/* Кільце рівня */
.lvl-ring{width:100px;height:100px;border-radius:50%;flex-shrink:0;display:flex;align-items:center;justify-content:center;
  background:conic-gradient(var(--violet) calc(var(--pct,68)*1%), var(--violet-tint) 0);position:relative}
.lvl-ring::before{content:'';position:absolute;inset:8px;border-radius:50%;background:#fff}
.lvl-ring b{position:relative;font-family:'Bricolage Grotesque',sans-serif;font-size:19px;color:var(--ink);line-height:1.1;text-align:center}
.lvl-ring span{position:relative}

@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}

}

/* ===== КАБІНЕТ БАТЬКІВ ===== */
#parView{
  background:#F7F6FB;min-height:100vh;font-size:15.5px;
  & .pwrap{max-width:820px;margin:0 auto;padding:26px 20px 60px}
  & .phead{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:12px;margin-bottom:20px}
  & .pcard{background:#fff;border:1.5px solid var(--line);border-radius:18px;padding:22px;margin-bottom:16px}
  & .att{display:flex;gap:6px;flex-wrap:wrap;margin-top:12px}
  & .att .a{width:26px;height:26px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700}
  & .a.p{background:#E8F6EC;color:#1F7A3D}
  & .a.m{background:#FBEAEA;color:#B4231F}
  & .a.n{background:var(--violet-tint);color:var(--muted)}
  & .kpi{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:4px}
  & .kpi .k{background:var(--violet-tint);border-radius:14px;padding:14px;text-align:center}
  & .kpi b{font-family:'Bricolage Grotesque',sans-serif;font-size:22px;color:var(--violet);display:block}
  & .kpi span{font-size:12px;font-weight:700;color:var(--muted)}
  & .comment{border-left:3px solid var(--sun);padding:10px 14px;background:#FFFBEF;border-radius:0 12px 12px 0;margin-top:10px}
  & .comment .who{font-size:12.5px;font-weight:700;color:var(--muted);margin-top:6px}
  @media (max-width:640px){& .kpi{grid-template-columns:1fr}}
}
#parView[hidden]{display:none}

/* ===== КАБІНЕТ ВИКЛАДАЧА ===== */
#teachView{
  background:#F7F6FB;min-height:100vh;font-size:15.5px;
  & .twrap{max-width:860px;margin:0 auto;padding:26px 20px 60px}
  & .tcard{background:#fff;border:1.5px solid var(--line);border-radius:18px;padding:22px;margin-bottom:16px}
  & .tl{display:flex;justify-content:space-between;align-items:center;gap:12px;border:1.5px solid var(--line);
        border-radius:14px;padding:14px 16px;margin-bottom:8px;background:#fff}
  & .tl.cancelled{border-color:#F0B9B4;background:#FBEAEA}
  & .tl.cancelled .tl-t{text-decoration:line-through;color:var(--muted)}
  & .tl-t{font-weight:700;color:var(--ink)}
  & .tl-sub{font-size:13px;color:var(--muted);font-weight:600}
  & .ev{display:flex;gap:12px;align-items:flex-start;padding:12px 0;border-bottom:1px solid var(--line)}
  & .ev:last-child{border-bottom:none}
  & .ev-ico{width:36px;height:36px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:16px;flex-shrink:0}
  & .ev-ico.late{background:#FBEAEA}
  & .ev-ico.okc{background:#E8F6EC}
  & .ev-t{font-weight:700;color:var(--ink);font-size:14.5px}
  & .ev-s{font-size:13px;color:var(--muted);font-weight:600}
  & .empty{color:var(--muted);font-weight:600;text-align:center;padding:18px 0}
  & .day-h{font-weight:700;color:var(--muted);font-size:13px;text-transform:uppercase;letter-spacing:.06em;margin:14px 0 8px}

  & .conduct{border:1.5px solid var(--line);border-radius:14px;padding:16px;margin:-2px 0 10px;background:#FBFAFF}
  & .att-pills{display:flex;gap:8px;flex-wrap:wrap;margin:8px 0 12px}
  & .apill{border:2px solid var(--line);background:#fff;border-radius:99px;font:700 13px 'Manrope',sans-serif;
    color:var(--muted);height:34px;padding:0 16px;cursor:pointer}
  & .apill.sel-p{border-color:var(--green);background:#E8F6EC;color:var(--green)}
  & .apill.sel-a{border-color:var(--red);background:#FBEAEA;color:var(--red)}
  & .apill.sel-l{border-color:#D9A521;background:#FFF3D1;color:var(--sun-dark)}
  & textarea{width:100%;border:1.5px solid var(--line);border-radius:12px;padding:10px 12px;
    font:500 14px 'Manrope',sans-serif;min-height:64px;resize:vertical}
  & textarea:focus{outline:none;border-color:var(--violet)}
  & .tl.completed{border-color:#9AD3AC;background:#F2FBF5}

  /* ===== ПРОВЕДЕННЯ УРОКУ (вправи + контекстне меню) ===== */
  & .lesson-room{max-width:1100px;width:100%;max-height:88vh;padding:0;overflow:hidden;display:flex;flex-direction:column}
  & .lr-top{display:flex;align-items:center;justify-content:space-between;padding:16px 22px;border-bottom:1.5px solid var(--line);flex-shrink:0}
  & .lr-title{font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:18px;color:var(--ink)}
  & .lr-grid{display:flex;flex:1;min-height:0}
  & .lr-rail{width:56px;flex-shrink:0;border-right:1.5px solid var(--line);display:flex;flex-direction:column;align-items:center;
    gap:6px;padding:16px 0}
  & .lr-rail-btn{width:38px;height:38px;border-radius:11px;border:none;background:none;color:var(--muted);cursor:pointer;
    display:flex;align-items:center;justify-content:center;font-size:17px;transition:background .15s,color .15s}
  & .lr-rail-btn:hover{background:var(--violet-tint);color:var(--violet)}
  & .lr-main{flex:1;min-width:0;overflow-y:auto;padding:22px 24px}
  & .lr-ex{border:1.5px solid var(--line);border-radius:16px;padding:18px 20px;margin-bottom:16px;background:#fff;
    transition:opacity .15s,background .15s}
  & .lr-ex.hidden-ex{opacity:.5;background:#FAFAFA}
  & .lr-ex-head{display:flex;align-items:center;justify-content:space-between;gap:10px;position:relative}
  & .lr-ex-title{display:flex;align-items:center;gap:10px;font-weight:800;font-size:16px;color:var(--ink)}
  & .lr-ex-num{background:var(--violet-tint);color:var(--violet);font:800 12px 'Manrope',sans-serif;border-radius:8px;
    padding:3px 8px;flex-shrink:0}
  & .lr-ex-sub{color:var(--muted);font-size:13px;font-weight:600;margin-top:6px}
  & .lr-tags{display:flex;gap:6px;margin-top:8px;flex-wrap:wrap}
  & .lr-tag{font:700 11.5px 'Manrope',sans-serif;padding:3px 9px;border-radius:99px}
  & .lr-tag.hw{background:#FFF3D1;color:var(--sun-dark)}
  & .lr-tag.off{background:#FBEAEA;color:var(--red)}
  & .lr-menu-btn{width:30px;height:30px;border-radius:9px;border:1.5px solid var(--line);background:#FAFAFC;color:var(--ink);cursor:pointer;
    font-size:18px;flex-shrink:0;line-height:1;flex-shrink:0}
  & .lr-menu-btn:hover{background:var(--violet-tint);color:var(--violet);border-color:var(--violet)}
  & .lr-dict-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px;margin-top:12px}
  & .lr-dict-w{background:var(--violet-tint);border-radius:10px;padding:8px 10px;display:flex;flex-direction:column;gap:2px}
  & .lr-dict-w b{color:var(--violet);font-size:13.5px}
  & .lr-dict-w span{color:var(--muted);font-size:12px;font-weight:600}
  & .lr-menu{display:none;position:absolute;top:36px;right:0;background:#fff;border:1.5px solid var(--line);border-radius:14px;
    box-shadow:0 14px 34px rgba(34,30,63,.16);padding:6px;z-index:5;min-width:220px}
  & .lr-menu.open{display:block}
  & .lr-menu button{display:flex;align-items:center;gap:10px;width:100%;border:none;background:none;text-align:left;
    padding:9px 10px;border-radius:9px;font:700 13.5px 'Manrope',sans-serif;color:var(--ink);cursor:pointer}
  & .lr-menu button:hover{background:var(--violet-tint);color:var(--violet)}
  & .lr-menu button.danger:hover{background:#FBEAEA;color:var(--red)}
  & .lr-side{width:270px;flex-shrink:0;border-left:1.5px solid var(--line);padding:20px;overflow-y:auto}
  & .lr-call{border:1.5px solid var(--line);border-radius:14px;padding:18px;text-align:center;margin-bottom:18px}
  & .lr-call .ic{font-size:22px;margin-bottom:6px}
  & .lr-sec{display:flex;align-items:center;gap:10px;padding:8px 6px;border-radius:10px;font-weight:700;font-size:14px;
    color:var(--muted);cursor:pointer}
  & .lr-sec.active{color:var(--violet)}
  & .lr-sec .dot{width:7px;height:7px;border-radius:50%;background:var(--violet);flex-shrink:0;opacity:0}
  & .lr-sec.active .dot{opacity:1}
  @media(max-width:820px){.lr-side{display:none} .lr-rail{display:none}}

}
#teachView[hidden]{display:none}
.notif-dot{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;border-radius:99px;
  background:var(--red);color:#fff;font:700 11.5px 'Manrope',sans-serif;padding:0 6px;margin-left:6px}

/* ===== ТЕСТ НА РІВЕНЬ АНГЛІЙСЬКОЇ (плейсмент-тест) ===== */
#placementView{
  --pt-violet:#5B4BD4; --pt-tint:#EFEDFB; --pt-ink:#1A1A2E; --pt-muted:#6E6A8A; --pt-line:#E9E9EF;
  --pt-mint:#EAF7EE; --pt-mint-line:#C9EAD3; --pt-yellow:#FFC93C; --pt-green:#1F7A3D;
  background:#FFFFFF;min-height:100vh;font-family:'Manrope',sans-serif;color:var(--pt-ink);
  & .ptwrap{max-width:900px;margin:0 auto;padding:32px 20px 80px;min-height:70vh;display:flex;flex-direction:column;justify-content:center}
  & .pt-scr{display:none;animation:ptIn .3s ease both}
  & .pt-scr.active{display:block}
  @keyframes ptIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
  & h1{font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:32px;line-height:1.2;margin-bottom:14px;color:var(--pt-ink)}
  & h2{font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:24px;margin-bottom:10px;color:var(--pt-ink)}
  & p{color:var(--pt-muted);font-size:16px;line-height:1.6}
  & .pt-btn{display:inline-flex;align-items:center;gap:8px;font:700 15px 'Manrope',sans-serif;background:var(--pt-violet);
    color:#fff;border:none;border-radius:99px;height:52px;padding:0 30px;cursor:pointer;margin-top:22px;transition:background .15s,transform .1s;box-shadow:0 6px 18px rgba(91,75,212,.25)}
  & .pt-btn:hover{background:#4436B3;transform:translateY(-1px)}
  & .pt-btn.outline{background:#fff;color:var(--pt-violet);border:2px solid var(--pt-violet);height:50px}
  & .pt-btn.outline:hover{background:var(--pt-tint)}
  & .pt-progress{height:6px;border-radius:99px;background:#F1F1F5;overflow:hidden;margin-bottom:28px;max-width:340px}
  & .pt-progress i{display:block;height:100%;background:linear-gradient(90deg,var(--pt-yellow),var(--pt-violet));border-radius:99px;transition:width .35s ease}
  & .pt-split{display:grid;grid-template-columns:1fr 1fr;gap:40px;align-items:center}
  & .pt-scene{border-radius:50%;aspect-ratio:1/1;max-width:280px;margin:0 auto;background:var(--pt-yellow);
    display:flex;align-items:center;justify-content:center;font-size:84px;position:relative;box-shadow:0 16px 40px rgba(255,201,60,.35)}
  & .pt-scene::before,& .pt-scene::after{content:'';position:absolute;border-radius:50%;background:#fff;opacity:.5}
  & .pt-scene::before{width:14px;height:14px;top:10%;right:16%}
  & .pt-scene::after{width:8px;height:8px;bottom:18%;left:12%}
  @media(max-width:760px){.pt-split{grid-template-columns:1fr}}
  & .pt-num{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:8px;
    background:var(--pt-mint);color:var(--pt-green);font:800 13px 'Manrope',sans-serif;margin-right:8px;flex-shrink:0}
  & .pt-q{display:flex;align-items:flex-start;gap:2px;font-size:22px;font-weight:700;color:var(--pt-ink);margin-bottom:22px;line-height:1.4}
  & .pt-q .who{font-weight:800}
  & .pt-q .blank{color:var(--pt-violet);border-bottom:3px solid var(--pt-yellow)}
  & .pt-npc{color:var(--pt-muted);font-size:16px;font-weight:700;margin-bottom:10px}
  & .pt-opts{display:flex;flex-direction:column;gap:14px;max-width:460px}
  & .pt-opt{display:flex;align-items:center;gap:14px;background:var(--pt-mint);border:2px solid var(--pt-mint-line);border-radius:14px;
    padding:14px 18px;cursor:pointer;font-weight:700;font-size:16px;color:var(--pt-ink);transition:border-color .15s,background .15s,transform .1s;text-align:left}
  & .pt-opt:hover{border-color:var(--pt-green);transform:translateX(2px)}
  & .pt-opt .lt{width:26px;height:26px;border-radius:8px;background:#fff;display:flex;align-items:center;justify-content:center;
    font-weight:800;font-size:13px;color:var(--pt-green);flex-shrink:0}
  & .pt-opt.ok{background:#DCF3E2;border-color:var(--pt-green)}
  & .pt-opt.ok .lt{background:var(--pt-green);color:#fff}
  & .pt-opt.bad{background:#FBEAEA;border-color:#B4231F}
  & .pt-opt.bad .lt{background:#B4231F;color:#fff}
  & .pt-reading-text{background:#FAFAFC;border:1.5px solid var(--pt-line);border-radius:18px;padding:24px 26px;font-size:15.5px;
    line-height:1.75;color:var(--pt-ink);max-height:420px;overflow:auto;margin-bottom:26px}
  & .pt-reading-text p{color:var(--pt-ink);margin-bottom:14px}
  & .pt-reading-text p:last-child{margin-bottom:0}
  & .pt-audio-card{background:var(--pt-mint);border:2px solid var(--pt-mint-line);border-radius:20px;padding:26px;margin-bottom:22px}
  & .pt-audio-top{display:flex;align-items:center;gap:16px;margin-bottom:18px}
  & .pt-audio-icon{width:56px;height:56px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;
    font-size:26px;flex-shrink:0;box-shadow:0 6px 14px rgba(31,122,61,.15)}
  & .pt-audio-icon.playing{animation:ptPulse 1s ease-in-out infinite}
  @keyframes ptPulse{0%,100%{transform:scale(1)}50%{transform:scale(1.12)}}
  & .pt-audio-title{font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:18px;color:var(--pt-ink)}
  & .pt-play-row{display:flex;align-items:center;flex-wrap:wrap;gap:6px}
  & .pt-play-btn{display:inline-flex;align-items:center;gap:8px;background:var(--pt-green);color:#fff;border:none;border-radius:99px;
    height:46px;padding:0 24px;font:700 14px 'Manrope',sans-serif;cursor:pointer;transition:background .15s,transform .1s}
  & .pt-play-btn:hover:not(:disabled){background:#175f30;transform:translateY(-1px)}
  & .pt-play-btn:disabled{opacity:.7;cursor:default}
  & .pt-transcript-toggle{background:none;border:none;color:var(--pt-green);font-weight:700;font-size:13px;cursor:pointer;
    margin-left:8px;text-decoration:underline;padding:6px}
  & .pt-transcript{margin-top:16px;background:#fff;border-radius:14px;padding:14px 16px;font-size:14.5px;line-height:1.6;color:var(--pt-ink)}
  & .pt-choice-row{display:flex;gap:14px;flex-wrap:wrap;margin-top:10px}
  & .pt-result-card{background:#fff;border:1.5px solid var(--pt-line);border-radius:20px;padding:28px;box-shadow:0 12px 34px rgba(26,26,46,.08)}
  & .pt-bonus-item{display:flex;align-items:center;gap:10px;font-size:15px;color:var(--pt-ink);margin:10px 0;padding:12px 14px;background:var(--pt-mint);border-radius:12px}
  & .pt-promo{display:flex;align-items:center;gap:10px;margin-top:16px;background:#FFF8E1;border:2px dashed var(--pt-yellow);border-radius:12px;padding:12px 16px}
  & .pt-promo span{font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:20px;letter-spacing:.05em;color:var(--pt-ink);flex:1}
  & .pt-copy-btn{background:var(--pt-violet);color:#fff;border:none;border-radius:99px;padding:8px 16px;font:700 13px 'Manrope',sans-serif;cursor:pointer;transition:background .15s}
  & .pt-copy-btn:hover{background:#4436B3}
  & .pt-band{display:inline-flex;align-items:center;gap:10px;background:var(--pt-mint);color:var(--pt-green);font:800 22px 'Bricolage Grotesque',sans-serif;
    border-radius:14px;padding:12px 20px;margin:14px 0}
  & .pt-breakdown{display:flex;flex-direction:column;gap:8px;margin-top:14px}
  & .pt-breakdown div{display:flex;align-items:center;gap:10px;color:var(--pt-muted);font-weight:700;font-size:15px}
  & .pt-breakdown b{color:var(--pt-ink)}
  & .pt-arrow{width:22px;height:22px;border-radius:6px;background:var(--pt-mint);color:var(--pt-green);display:flex;
    align-items:center;justify-content:center;font-size:12px;font-weight:800;flex-shrink:0}
  & .pt-close{position:fixed;top:20px;right:20px;background:#fff;border:1.5px solid var(--pt-line);border-radius:99px;
    width:40px;height:40px;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:16px;color:var(--pt-muted);z-index:10}
  & .pt-close:hover{color:var(--pt-violet);border-color:var(--pt-violet)}
  @media(max-width:600px){& h1{font-size:26px} & .pt-q{font-size:18px} & .pt-scene{max-width:180px;font-size:56px}}
}
#placementView[hidden]{display:none}
body.placemode .msgr,body.placemode .corner-ad,body.placemode .popup-bg{display:none!important}

#toast{position:fixed;right:16px;top:16px;z-index:200;display:flex;flex-direction:column;gap:8px}
#toast .toast{background:#fff;border-left:4px solid #1F7A3D;border-radius:12px;box-shadow:0 12px 30px rgba(34,30,63,.18);
  padding:12px 18px;font:700 14px 'Manrope',sans-serif;color:#221E3F;animation:tIn .25s}
#toast .toast.err{border-left-color:#B4231F}
@keyframes tIn{from{opacity:0;transform:translateX(20px)}to{opacity:1;transform:translateX(0)}}

.blk-menu-wrap{position:relative;display:inline-flex;flex-shrink:0}
.blk-menu-btn{width:28px;height:28px;border-radius:8px;border:1.5px solid #E2DFF5;background:#FAFAFC;color:#221E3F;
  cursor:pointer;font-size:16px;line-height:1;flex-shrink:0}
.blk-menu-btn:hover{background:#EFEDFB;color:#5B4BD4;border-color:#5B4BD4}
.blk-menu{display:none;position:absolute;top:34px;right:0;background:#fff;border:1.5px solid #E2DFF5;border-radius:12px;
  box-shadow:0 14px 34px rgba(34,30,63,.16);padding:6px;z-index:15;min-width:210px}
.blk-menu.open{display:block}
.blk-menu button{display:flex;align-items:center;gap:8px;width:100%;border:none;background:none;text-align:left;
  padding:8px 10px;border-radius:8px;font:700 13px 'Manrope',sans-serif;color:#221E3F;cursor:pointer}
.blk-menu button:hover{background:#EFEDFB;color:#5B4BD4}
.blk-menu button.danger:hover{background:#FBEAEA;color:#B4231F}
.blk-hidden{opacity:.45}
.blk-tag{display:inline-flex;font:700 11px 'Manrope',sans-serif;padding:3px 8px;border-radius:99px;margin-left:8px;vertical-align:middle}
.blk-tag.hw{background:#FFF3D1;color:#8A6A00}
.blk-tag.off{background:#FBEAEA;color:#B4231F}
.sec-main-wrap{position:relative;padding-top:6px}
.sec-main-wrap>.blk-menu-wrap{position:absolute;top:2px;right:0;z-index:6}


body.cabmode .msgr,body.cabmode .corner-ad,body.cabmode .popup-bg{display:none!important}
body.parmode .msgr,body.parmode .corner-ad,body.parmode .popup-bg{display:none!important}
body.teachmode .msgr,body.teachmode .corner-ad,body.teachmode .popup-bg{display:none!important}
#cabView[hidden]{display:none}
#siteView[hidden]{display:none}

/* ===== ПЕРЕМИКАЧ РОЛІ ===== */
.role-sw{display:inline-flex;background:#EFEDFB;border-radius:99px;padding:3px;gap:2px}
.role-sw button{border:none;background:transparent;cursor:pointer;font:800 12.5px 'Manrope',sans-serif;
  color:#6C63A6;padding:6px 13px;border-radius:99px;transition:.15s}
.role-sw button.on{background:#fff;color:var(--violet);box-shadow:0 2px 6px rgba(60,40,140,.14)}
.only-teacher{display:none}
body.role-teacher .only-teacher{display:block}
body.role-teacher .only-teacher.inline{display:inline-flex}
body.role-teacher .only-student{display:none}

/* ===== ПІДКАЗКА ВЧИТЕЛЮ ПЕРЕД ЗАВДАННЯМ ===== */
.t-tip{display:none;background:#E8F6FE;border-radius:14px;padding:13px 16px;margin:0 0 14px;font-size:14.5px;color:#1E7FB8;line-height:1.65}
body.role-teacher .t-tip{display:block}
.t-tip .tt-h{display:flex;align-items:center;gap:7px;font-weight:800;margin-bottom:7px;color:#1E7FB8}
.t-tip ul{margin:4px 0 0 16px}
.t-tip li{margin-bottom:3px}

/* ===== ЦІЛІ УРОКУ (After this lesson, I will...) ===== */
.goals{background:#fff;border:1.5px solid var(--line);border-radius:16px;padding:16px 18px;margin-bottom:18px}
.goals h4{font:800 17px 'Bricolage Grotesque',sans-serif;color:var(--ink);margin-bottom:12px;display:flex;align-items:center;gap:8px}
.goal-it{display:flex;align-items:flex-start;gap:11px;padding:6px 0;cursor:pointer;font-size:15px;color:var(--ink)}
.goal-bx{flex:0 0 22px;width:22px;height:22px;border-radius:6px;background:#E9F8EE;border:1.5px solid #BFE6CC;
  display:flex;align-items:center;justify-content:center;font-size:13px;color:transparent;transition:.15s;margin-top:1px}
.goal-it.on .goal-bx{background:var(--green,#2FA85B);border-color:var(--green,#2FA85B);color:#fff}
.goal-it.on{color:var(--muted);text-decoration:line-through}

/* ===== LANGUAGE BOX (пояснення правила) ===== */
.langbox{background:linear-gradient(135deg,#EFEBFC,#F6F3FF);border-radius:18px;padding:18px 20px 22px;margin:6px 0 18px;position:relative}
.lb-title{display:block;background:var(--violet);color:#fff;font:800 17px 'Bricolage Grotesque',sans-serif;
  text-align:center;border-radius:99px;padding:9px 22px;margin:0 auto 16px;max-width:520px}
.lb-lines{font:700 21px 'Bricolage Grotesque',sans-serif;line-height:1.65;color:var(--ink)}
.lb-lines b{color:var(--violet)}
.lb-note{margin-top:14px;background:#fff;border-radius:12px;padding:11px 14px;font-size:14.5px;color:var(--ink);line-height:1.6}
.lb-note b{color:var(--violet)}
.lb-table{width:100%;border-collapse:collapse;margin-top:12px;background:#fff;border-radius:12px;overflow:hidden;font-size:14.5px}
.lb-table th{background:#E4DEFA;color:var(--violet);text-align:left;padding:9px 12px;font-weight:800;font-size:13px}
.lb-table td{padding:9px 12px;border-top:1px solid #EFEDF7}
.lb-nav{display:flex;align-items:center;justify-content:center;gap:16px;margin-top:14px;color:var(--violet);font-weight:800}
.lb-nav button{border:none;background:transparent;color:var(--violet);font-size:20px;cursor:pointer;padding:2px 8px;border-radius:8px}
.lb-nav button:disabled{opacity:.3;cursor:default}

/* ===== SPEAKING — питання-чеклист ===== */
.spk-list{background:#fff;border:1.5px solid var(--line);border-radius:16px;padding:16px 18px;margin:10px 0 16px}
.spk-q{display:flex;align-items:flex-start;gap:10px;padding:7px 0;font-size:15.5px;color:var(--ink);cursor:pointer;line-height:1.55}
.spk-q .sq-bx{flex:0 0 17px;width:17px;height:17px;border:2px solid #C9C4E4;border-radius:4px;margin-top:3px;transition:.15s}
.spk-q.on .sq-bx{background:var(--violet);border-color:var(--violet)}
.spk-q.on{opacity:.5}
.spk-q b{color:var(--ink)}
.spk-topics{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0 4px}
.spk-topic{background:#FFF1E8;color:var(--coral-dark,#C4441F);border:none;border-radius:99px;padding:8px 15px;
  font:700 14px 'Manrope',sans-serif;cursor:pointer;transition:.15s}
.spk-topic:hover{background:var(--coral);color:#fff}

/* ===== GIF-реакції ===== */
.gifwall{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:12px;margin:12px 0}
.gifw{border-radius:16px;padding:18px 10px;text-align:center;color:#fff;font:800 14px 'Manrope',sans-serif;
  cursor:pointer;user-select:none;line-height:1.35;box-shadow:0 4px 14px rgba(40,20,90,.10)}
.gifw .gw-e{display:block;font-size:44px;margin-bottom:6px;line-height:1}
.gifw:active{transform:scale(.96)}
@keyframes gwBounce{0%,100%{transform:translateY(0)}50%{transform:translateY(-9px)}}
@keyframes gwShake{0%,100%{transform:rotate(0)}25%{transform:rotate(-9deg)}75%{transform:rotate(9deg)}}
@keyframes gwPulse{0%,100%{transform:scale(1)}50%{transform:scale(1.14)}}
@keyframes gwSpin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}
@keyframes gwFloat{0%,100%{transform:translateY(0) rotate(-3deg)}50%{transform:translateY(-7px) rotate(3deg)}}
.gw-bounce .gw-e{animation:gwBounce 1s infinite}
.gw-shake .gw-e{animation:gwShake .9s infinite}
.gw-pulse .gw-e{animation:gwPulse 1.2s infinite}
.gw-spin .gw-e{animation:gwSpin 3s linear infinite}
.gw-float .gw-e{animation:gwFloat 2s ease-in-out infinite}

/* ===== ДРІЛИ (вправи на закріплення) ===== */
.drill{background:#fff;border:1.5px solid var(--line);border-radius:16px;padding:16px 18px;margin-bottom:14px}
.drill-h{font:800 16px 'Bricolage Grotesque',sans-serif;color:var(--ink);margin-bottom:4px;display:flex;
  align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}
.drill-lvl{font:700 11px 'Manrope',sans-serif;padding:3px 9px;border-radius:99px;background:#EFEDFB;color:var(--violet)}
.drill-lvl.easy{background:#E9F8EE;color:#1F7A3D}
.drill-lvl.hard{background:#FFEAE4;color:#C4441F}
.drill-sub{font-size:13.5px;color:var(--muted);margin-bottom:12px}

/* ===== ДОМАШКА НА ВИДНОМУ МІСЦІ ===== */
.hw-banner{display:flex;align-items:center;gap:14px;background:linear-gradient(135deg,#FFF4E2,#FFE9F0);
  border-radius:18px;padding:16px 18px;margin-bottom:18px;flex-wrap:wrap}
.hw-banner .hb-ic{font-size:34px;line-height:1}
.hw-banner .hb-t{font:800 17px 'Bricolage Grotesque',sans-serif;color:var(--ink)}
.hw-banner .hb-s{font-size:13.5px;color:var(--muted);margin-top:2px}
.hw-banner .hb-btn{margin-left:auto}
.nav-it .nav-badge{margin-left:auto;background:var(--coral);color:#fff;font:800 11px 'Manrope',sans-serif;
  border-radius:99px;padding:2px 8px;min-width:20px;text-align:center}
.assign-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;background:#F7F6FD;border-radius:12px;
  padding:10px 12px;margin-top:10px}
.assign-row select{border:1.5px solid var(--line);border-radius:10px;padding:8px 10px;font:600 14px 'Manrope',sans-serif}

.logo-mark{width:30px;height:30px;flex:0 0 30px;display:inline-block;vertical-align:-8px;margin-right:8px}
.logo{display:inline-flex;align-items:center}
.bf-logo{display:flex;align-items:center;gap:8px}
.bf-logo .logo-mark{margin-right:0}
.side .logo .logo-mark{width:26px;height:26px;flex:0 0 26px;margin-right:0}
.brand-mark svg{width:16px;height:16px}

/* ===== СУВОРЕ РОЗМЕЖУВАННЯ РОЛЕЙ ===== */
body:not(.role-teacher) .blk-menu-wrap,
body:not(.role-teacher) #hwBuilder,
body:not(.role-teacher) .assign-row,
body:not(.role-teacher) .answer-key,
body:not(.role-teacher) .nav-it[data-page="students"],
body:not(.role-teacher) .nav-it[data-page="classes"],
body:not(.role-teacher) .tab[data-page="students"],
body:not(.role-teacher) .tab[data-page="classes"],
body:not(.role-teacher) .nav-it[data-page="kb"],
body:not(.role-teacher) .tab[data-page="kb"],
body:not(.role-teacher) #teachEnter,
body:not(.role-teacher) #lmDelete{display:none !important}
body.role-teacher .only-student{display:none}

/* ===== КЛЮЧ ВІДПОВІДЕЙ ДЛЯ ВИКЛАДАЧА ===== */
.answer-key{background:#E9F8EE;border:1.5px dashed #8FD3A8;border-radius:14px;padding:12px 15px;margin:10px 0 4px}
.answer-key .ak-h{font:800 13px 'Manrope',sans-serif;color:#1F7A3D;margin-bottom:7px;display:flex;align-items:center;gap:6px}
.answer-key ol{margin:0 0 0 18px;color:#1F7A3D;font-size:14.5px}
.answer-key li{margin-bottom:3px;font-weight:700}
.answer-key .ak-note{font-size:12.5px;color:#3E7A55;margin-top:7px;font-weight:600;opacity:.85}

/* ===== ВКЛАДКИ LESSON / HOMEWORK ===== */
.lh-tabs{display:flex;align-items:center;gap:26px;border-bottom:1.5px solid var(--line);margin-bottom:18px;padding-bottom:0}
.lh-tab{background:none;border:none;font:800 18px 'Bricolage Grotesque',sans-serif;color:var(--muted);
  cursor:pointer;padding:0 0 12px;position:relative;display:flex;align-items:center;gap:8px}
.lh-tab.on{color:var(--ink)}
.lh-tab.on::after{content:'';position:absolute;left:0;right:0;bottom:-1.5px;height:3px;background:#4FA3D9;border-radius:3px}
.lh-new{background:var(--coral);color:#fff;font:800 10.5px 'Manrope',sans-serif;border-radius:6px;padding:2px 7px;letter-spacing:.04em}

/* ===== ЗДАЧА ДОМАШКИ ===== */
.hw-submit{background:linear-gradient(135deg,#E9F8EE,#F2FBF5);border-radius:16px;padding:16px 18px;margin:14px 0;
  display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.hw-submit .hs-t{font:800 16px 'Bricolage Grotesque',sans-serif;color:#1F7A3D}
.hw-submit .hs-s{font-size:13.5px;color:#3E7A55;margin-top:2px}
.hw-card{background:#fff;border:1.5px solid var(--line);border-radius:16px;padding:15px 17px;margin-bottom:12px}
.hw-card.done{border-color:#8FD3A8;background:#F7FDF9}
.hw-card-h{display:flex;align-items:center;gap:11px;flex-wrap:wrap}
.hw-card-h .hc-ic{font-size:22px}
.hw-card-h .hc-t{font-weight:800;font-size:15.5px}
.hw-card-h .hc-m{font-size:13px;color:var(--muted);margin-top:2px}
.hw-status{margin-left:auto;font:800 12px 'Manrope',sans-serif;border-radius:99px;padding:5px 12px}
.hw-status.todo{background:#FFF1E8;color:#C4441F}
.hw-status.sent{background:#E9F8EE;color:#1F7A3D}

/* ===== ТАБЛИЦЯ НЕПРАВИЛЬНИХ ДІЄСЛІВ ===== */
.irr-wrap{background:#fff;border:1.5px solid var(--line);border-radius:16px;padding:6px 4px 4px;margin:12px 0 18px;overflow:auto}
.irr{width:100%;border-collapse:collapse;font-size:14.5px;min-width:520px}
.irr th{position:sticky;top:0;background:#EFEDFB;color:var(--violet);text-align:left;padding:10px 12px;font-weight:800;font-size:12.5px;letter-spacing:.03em}
.irr td{padding:8px 12px;border-top:1px solid #F0EEF8}
.irr tr:hover td{background:#FAF9FE}
.irr .v1{font-weight:800;color:var(--ink)}
.irr .v2{color:var(--violet);font-weight:700}
.irr .v3{color:var(--coral);font-weight:700}
.irr .ua{color:var(--muted);font-size:13.5px}

/* Час уроку — один рядок без переносів */
.lm-time{display:flex;gap:7px;align-items:center;flex-wrap:nowrap;min-width:0}
.lm-time select{min-width:0;padding:9px 8px;font-size:14px}
.lm-time #lmDate{flex:1 1 auto;min-width:96px}
.lm-time #lmH,.lm-time #lmM{flex:0 0 66px;width:66px;text-align:center}
.lm-colon{font-weight:800;color:var(--muted)}
@media(max-width:420px){.lm-time #lmDate{min-width:80px}.lm-time #lmH,.lm-time #lmM{flex:0 0 58px;width:58px}}

/* ===== ГОДИННИК І РОБОЧІ ГОДИНИ (фото 2–4) ===== */
.clock-btn{display:inline-flex;align-items:center;gap:7px;background:#F4F3FA;border:1.5px solid var(--line);
  border-radius:12px;padding:8px 13px;font:700 13.5px 'Manrope',sans-serif;color:var(--ink);cursor:pointer}
.clock-btn:hover{border-color:var(--violet);color:var(--violet)}
.clock-btn .cb-tz{color:var(--coral)}
.gear-btn{width:38px;height:38px;border-radius:12px;border:1.5px solid var(--line);background:#fff;cursor:pointer;
  font-size:17px;display:inline-flex;align-items:center;justify-content:center}
.gear-btn:hover{border-color:var(--violet);background:#F7F6FD}
.gear-pop{position:absolute;top:48px;right:0;background:#fff;border:1.5px solid var(--line);border-radius:16px;
  box-shadow:0 14px 36px rgba(30,20,70,.16);padding:16px 18px;z-index:60;min-width:270px;display:none}
.gear-pop.open{display:block}
.gear-pop h4{font:800 15px 'Bricolage Grotesque',sans-serif;margin-bottom:11px}
.gear-row{display:flex;align-items:center;gap:9px;margin-bottom:13px}
.gear-row select{flex:1;padding:9px 10px;border:1.5px solid var(--line);border-radius:10px;font:600 14px 'Manrope',sans-serif}
.wh-grid{display:grid;grid-template-columns:64px repeat(7,1fr);gap:3px;min-width:600px}
.wh-grid .wh-h{font:800 12px 'Manrope',sans-serif;color:var(--muted);text-align:center;padding:7px 2px}
.wh-grid .wh-t{font:700 12.5px 'Manrope',sans-serif;color:var(--muted);padding:8px 6px;text-align:right}
.wh-cell{height:34px;border-radius:8px;background:#F5F4FA;border:1.5px solid transparent;cursor:pointer;
  display:flex;align-items:center;justify-content:center;font-size:15px;transition:.12s}
.wh-cell:hover{border-color:var(--violet)}
.wh-cell.free{background:#E9F8EE;color:#1F7A3D;border-color:#8FD3A8}
.wh-cell.busy{background:#FFEDE4;color:#C4441F;border-color:#F4B79E;cursor:not-allowed}
.wh-scroll{max-height:52vh;overflow:auto;padding-right:4px}
.wh-legend{display:flex;gap:16px;flex-wrap:wrap;margin-top:14px;font-size:13px;color:var(--muted)}
.wh-legend span{display:inline-flex;align-items:center;gap:6px}
.wh-legend i{width:15px;height:15px;border-radius:5px;display:inline-block;font-style:normal}

/* ===== КОЛЕСО ТЕМ (фото 8) ===== */
.wheel-wrap{text-align:center;margin:14px 0}
.wheel-box{position:relative;display:inline-block}
.wheel-pin{position:absolute;top:-4px;left:50%;transform:translateX(-50%);color:var(--coral);font-size:22px;z-index:3;line-height:1}
.wheel{width:240px;height:240px;border-radius:50%;transition:transform 3.4s cubic-bezier(.17,.67,.2,1);
  box-shadow:0 8px 26px rgba(30,20,70,.16)}
.wheel-hub{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:44px;height:44px;
  border-radius:50%;background:#fff;box-shadow:0 2px 8px rgba(0,0,0,.18);z-index:2}
.wheel-out{background:#F3F1FA;border-radius:16px;padding:16px 18px;margin-top:14px}
.wheel-out .wo-l{font:800 12px 'Manrope',sans-serif;color:var(--violet);letter-spacing:.06em;margin-bottom:6px}
.wheel-out .wo-q{font:800 18px 'Bricolage Grotesque',sans-serif;line-height:1.35}
.wheel-done{display:flex;flex-wrap:wrap;gap:7px;margin-top:12px}
.wheel-done span{background:#E9F8EE;color:#1F7A3D;border-radius:99px;padding:5px 11px;font:700 12.5px 'Manrope',sans-serif;
  text-decoration:line-through;opacity:.8}

/* ===== ВИБІР СМАЙЛИКА (фото 9) ===== */
.emo-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(62px,1fr));gap:12px;max-width:400px;margin:14px auto 0}
.emo{aspect-ratio:1;border-radius:50%;border:3px solid transparent;font-size:29px;cursor:pointer;
  display:flex;align-items:center;justify-content:center;transition:.15s;box-shadow:0 3px 10px rgba(30,20,70,.10)}
.emo:hover{transform:scale(1.09)}
.emo.sel{border-color:var(--ink);transform:scale(1.13)}
.emo-out{text-align:center;margin-top:14px;font-size:15px;color:var(--ink);min-height:24px;font-weight:700}
.emo-pick{font-size:22px;vertical-align:-3px}
/* ===== Рівень і закріплений урок учня ===== */
.sp-assign{margin-top:12px;padding-top:12px;border-top:2px dashed var(--line)}
.sp-assign .sa-h{font-weight:800;font-size:14px;margin-bottom:8px}
.sp-assign .sa-l{display:block;font-size:12px;font-weight:700;color:var(--muted);margin:8px 0 4px}
.sp-assign .sa-sel{width:100%;border:1.5px solid var(--line);border-radius:10px;padding:9px 10px;
  font:600 14px 'Manrope',sans-serif;color:var(--ink);background:#fff;cursor:pointer}
.sp-assign .sa-sel:focus{outline:none;border-color:var(--violet)}
.sp-assign .sa-btns{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
.sp-assign .sa-hint{font-size:12px;margin-top:8px;line-height:1.5}
.st-lv{display:inline-flex;align-items:center;justify-content:center;min-width:30px;height:20px;border-radius:99px;
  color:#fff;font:800 11px 'Manrope',sans-serif;padding:0 7px;margin-right:5px}
.st-pin{color:#C4841F;font-weight:800}
.lesson-list-item.pinned{border-color:#F0C86A;background:#FFF8E1}
.level-card.mine{border-color:var(--violet);box-shadow:0 0 0 2px rgba(91,75,212,.12)}
.teacher-only{display:none}
body.role-teacher .teacher-only:not([hidden]){display:inline-flex}
.emo:hover{transform:scale(1.08)}
.mood-cell{border:none;cursor:pointer}

/* ===== ДОДАВАННЯ СЛІВ У СЛОВНИК (фото 10) ===== */
.dict-add{display:flex;gap:8px;flex-wrap:wrap;background:#F7F6FD;border-radius:14px;padding:12px 14px;margin:12px 0}
.dict-add input{flex:1;min-width:120px;border:1.5px solid var(--line);border-radius:10px;padding:10px 12px;
  font:600 14.5px 'Manrope',sans-serif}
.dict-add input:focus{outline:none;border-color:var(--violet)}
.dict-row{display:flex;align-items:center;gap:12px;padding:11px 2px;border-bottom:1px solid var(--line)}
.dict-row .dw{font-weight:800;font-size:15.5px}
.dict-row .dt{color:var(--muted);font-size:15px}
.dict-row .dx{margin-left:auto;background:none;border:none;color:var(--muted);cursor:pointer;font-size:17px;padding:4px 8px;border-radius:8px}
.dict-row .dx:hover{background:#FBEAEA;color:#B4231F}
.dict-say{border:none;background:#EFEDFB;color:var(--violet);width:34px;height:34px;border-radius:10px;cursor:pointer;font-size:15px}
.dict-say:hover{background:var(--violet);color:#fff}

/* ===== ПІСНЯ / ВІДЕО ===== */
.song{background:linear-gradient(135deg,#F3F1FA,#FFF1EC);border-radius:18px;padding:18px 20px;margin:12px 0;
  display:flex;gap:16px;align-items:flex-start;flex-wrap:wrap}
.song .s-ic{font-size:38px;line-height:1}
.song .s-t{font:800 17px 'Bricolage Grotesque',sans-serif;margin-bottom:8px}
.song .s-lyr{font-size:15px;line-height:1.85;color:var(--violet)}
.song .s-lyr b{color:var(--coral)}
.song .s-act{margin-left:auto;display:flex;flex-direction:column;gap:8px}
.vid-card{background:#fff;border:1.5px solid var(--line);border-radius:16px;padding:16px 18px;margin:12px 0}
.vid-card .v-t{font:800 16px 'Bricolage Grotesque',sans-serif;margin-bottom:4px}
.vid-card .v-s{font-size:13.5px;color:var(--muted);margin-bottom:12px}
.vid-thumb{position:relative;border-radius:14px;overflow:hidden;background:linear-gradient(135deg,#3B3663,#5B4BD4);
  aspect-ratio:16/9;display:flex;align-items:center;justify-content:center;cursor:pointer;text-decoration:none}
.vid-thumb .vt-play{width:64px;height:64px;border-radius:50%;background:rgba(255,255,255,.94);color:#E4574B;
  display:flex;align-items:center;justify-content:center;font-size:26px;padding-left:5px;box-shadow:0 6px 20px rgba(0,0,0,.25);transition:.15s}
.vid-thumb:hover .vt-play{transform:scale(1.09)}
.vid-thumb .vt-cap{position:absolute;left:0;right:0;bottom:0;padding:12px 15px;color:#fff;font-weight:700;font-size:14px;
  background:linear-gradient(transparent,rgba(0,0,0,.6))}

/* Free slot in the schedule grid — plain white cell (no green fill) */
.wk-cell.has-free{background:#fff}
.wk-cell.has-free:hover{background:#FAFAFE;box-shadow:inset 0 0 0 1.5px var(--line)}

/* ===== STUDENT ROLE: read-only schedule ===== */
body:not(.role-teacher) .wk-cell{cursor:default}
body:not(.role-teacher) .wk-cell:hover{background:transparent}
body:not(.role-teacher) .wk-cell:hover::after{content:none}
body:not(.role-teacher) .tt-tab[data-tt="students"],
body:not(.role-teacher) .ntf-wrap,
body:not(.role-teacher) #wkAddBtn{display:none !important}
body:not(.role-teacher) .wk-les{cursor:default}

/* ===== ІГРИ ===== */
.mem-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(104px,1fr));gap:10px;margin:12px 0}
.mem-c{aspect-ratio:4/3;border:2px solid var(--line);border-radius:14px;background:#F7F6FD;cursor:pointer;
  position:relative;font:800 14.5px 'Manrope',sans-serif;color:var(--ink);overflow:hidden;transition:.15s}
.mem-c:hover{border-color:var(--violet)}
.mem-back{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,var(--violet),#7C6CF0);color:#fff;font-size:24px;transition:.25s}
.mem-face{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;padding:6px;text-align:center}
.mem-c.flip .mem-back,.mem-c.done .mem-back{opacity:0;transform:scale(.7)}
.mem-c.done{border-color:#8FD3A8;background:#E9F8EE;cursor:default}
.gscr-slot{min-height:52px;background:#F7F6FD;border-radius:12px;padding:11px 14px;display:flex;gap:6px;
  flex-wrap:wrap;align-items:center;margin-bottom:10px}
.gscr-s{background:var(--violet);color:#fff;border-radius:8px;padding:6px 12px;font:800 17px 'Manrope',sans-serif}
.gscr-bank{display:flex;gap:8px;flex-wrap:wrap}
.gscr-bank .gscr-l{width:44px;height:44px;border:2px solid var(--line);border-radius:11px;background:#fff;
  font:800 18px 'Manrope',sans-serif;color:var(--ink);cursor:pointer;transition:.15s}
.gscr-bank .gscr-l:hover:not(:disabled){border-color:var(--violet);background:#F7F6FD}
.tf-list{background:#fff;border:1.5px solid var(--line);border-radius:16px;padding:6px 16px}
.tf-row{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid var(--line);flex-wrap:wrap}
.tf-row:last-child{border-bottom:none}
.tf-q{flex:1;min-width:190px;font-size:15px}
.tf-b{display:flex;gap:7px}
.tf-btn{border:2px solid var(--line);background:#fff;border-radius:10px;padding:8px 17px;
  font:700 14px 'Manrope',sans-serif;color:var(--ink);cursor:pointer;transition:.15s}
.tf-btn:hover:not([data-done]){border-color:var(--violet)}
.tf-btn.ok{background:#E9F8EE;border-color:#8FD3A8;color:#1F7A3D}
.tf-btn.bad{background:#FBEAEA;border-color:#EFA7A4;color:#B4231F}

/* ============================================================
   SpeakOn v2 — Dictionary (levels + personal) & Task pack 2.0
   ============================================================ */
.dc-tabs{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px}
.dc-tab{border:1.5px solid var(--line);background:#fff;border-radius:12px;padding:9px 16px;
  font:800 14px 'Manrope',sans-serif;color:var(--muted);cursor:pointer}
.dc-tab.active{background:var(--violet);border-color:var(--violet);color:#fff}
.dc-bar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:14px}
.lvchip{border:1.5px solid var(--line);background:#fff;border-radius:999px;padding:7px 14px;
  font:800 13px 'Manrope',sans-serif;color:var(--muted);cursor:pointer}
.lvchip.on{color:#fff;border-color:transparent}
.dc-search{flex:1;min-width:180px;border:1.5px solid var(--line);border-radius:12px;padding:10px 14px;
  font:600 14.5px 'Manrope',sans-serif}
.dc-search:focus{outline:none;border-color:var(--violet)}
.wgroup{background:#fff;border:1.5px solid var(--line);border-radius:16px;padding:14px 16px;margin-bottom:12px}
.wgroup h4{margin:0 0 4px;font-size:16px;display:flex;align-items:center;gap:8px}
.wgroup .wg-sub{color:var(--muted);font-size:12.5px;margin-bottom:8px}
.wgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:6px}
.wrow{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:10px}
.wrow:hover{background:#F7F6FD}
.wrow .we{font-weight:800;font-size:14.5px}
.wrow .wu{color:var(--muted);font-size:13.5px}
.wrow .wbtns{margin-left:auto;display:flex;gap:2px}
.wrow button{border:none;background:none;cursor:pointer;font-size:15px;padding:3px 6px;border-radius:8px;color:var(--muted)}
.wrow button:hover{background:#EDEAFB;color:var(--violet)}
.wrow.known .we{color:var(--green);}
.wrow.known .we::after{content:' ✓'}
.dc-stat{display:flex;gap:14px;flex-wrap:wrap;align-items:center;background:#F6F4FF;border-radius:14px;
  padding:12px 16px;margin-bottom:14px;font-weight:700;font-size:14px}
.dc-stat b{color:var(--violet)}
.dc-prog{flex:1;min-width:120px;height:9px;background:#E4DFFA;border-radius:6px;overflow:hidden}
.dc-prog i{display:block;height:100%;background:var(--violet);border-radius:6px}
.newword{background:#FFF6EC;border:1.5px solid #F3D3AC;border-radius:14px;padding:12px 14px;margin-bottom:14px}
.newword .nw-h{font-weight:800;color:#B06B12;margin-bottom:6px;font-size:14px}
.nw-chip{display:inline-flex;align-items:center;gap:6px;background:#fff;border:1.5px solid #F0D8B6;
  border-radius:999px;padding:6px 12px;margin:3px 4px 3px 0;font-weight:700;font-size:13.5px}
.stud-sel{border:1.5px solid var(--line);border-radius:12px;padding:9px 12px;font:700 14px 'Manrope',sans-serif;background:#fff}

/* ---- Task pack 2.0 ---- */
.t2{background:#fff;border:1.5px solid var(--line);border-radius:16px;padding:14px 16px;margin:10px 0}
.t2-q{font-weight:700;font-size:15.5px;margin-bottom:10px}
.t2-slot{min-height:46px;border:2px dashed #D7D1F2;border-radius:12px;padding:8px;display:flex;
  flex-wrap:wrap;gap:6px;align-items:center;background:#FAF9FF;margin-bottom:10px}
.t2-bank{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}
.t2-chip{border:1.5px solid var(--line);background:#fff;border-radius:10px;padding:7px 12px;
  font:800 14px 'Manrope',sans-serif;color:var(--ink);cursor:pointer}
.t2-chip:hover{border-color:var(--violet);color:var(--violet)}
.t2-chip.used{opacity:.25;pointer-events:none}
.t2-slot .t2-chip{background:#EDEAFB;border-color:#D7D1F2;color:var(--violet)}
.t2-in{border:1.5px solid var(--line);border-radius:10px;padding:9px 12px;font:700 15px 'Manrope',sans-serif;
  min-width:140px;flex:1}
.t2-in:focus{outline:none;border-color:var(--violet)}
.t2-line{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.t2-act{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}
.t2-fb{margin-top:8px;font-weight:700;font-size:14px;min-height:20px}
.t2-fb.ok{color:var(--green)}
.t2-fb.bad{color:var(--red)}
.t2-w{display:inline-block;padding:2px 4px;border-radius:6px;cursor:pointer}
.t2-w:hover{background:#FFECE7;color:var(--coral)}
.t2-w.hit{background:var(--green-tint);color:var(--green);font-weight:800}
.t2-w.miss{background:#FBE3E1;color:var(--red)}
.t2-cats{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:8px}
.t2-cat{border:2px dashed #D7D1F2;border-radius:12px;padding:10px;min-height:64px;background:#FAF9FF;cursor:pointer}
.t2-cat b{display:block;font-size:13.5px;color:var(--violet);margin-bottom:6px}
.t2-cat.sel{border-color:var(--violet);background:#EFEBFE}
.t2-m{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.t2-mb{border:1.5px solid var(--line);background:#fff;border-radius:10px;padding:9px 10px;
  font:700 14px 'Manrope',sans-serif;cursor:pointer;text-align:left}
.t2-mb.sel{border-color:var(--violet);background:#EDEAFB}
.t2-mb.ok{border-color:var(--green);background:var(--green-tint);color:var(--green);pointer-events:none}
.t2-tabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px}
.t2-tab{border:1.5px solid var(--line);background:#fff;border-radius:999px;padding:6px 13px;
  font:800 12.5px 'Manrope',sans-serif;color:var(--muted);cursor:pointer}
.t2-tab.on{background:var(--coral);border-color:var(--coral);color:#fff}
.t2-count{margin-left:auto;font-size:12.5px;color:var(--muted);font-weight:700}
.t2-ta{width:100%;border:1.5px solid var(--line);border-radius:12px;padding:11px 13px;
  font:600 14.5px 'Manrope',sans-serif;min-height:96px;resize:vertical}
.t2-ta:focus{outline:none;border-color:var(--violet)}
.t2-check-list{margin:8px 0 0 18px;font-size:13.5px;color:var(--muted)}
.sprint{background:linear-gradient(135deg,#5B4BD4,#7C6CF0);color:#fff;border-radius:16px;padding:16px 18px;text-align:center}
.sprint .sp-t{font-size:34px;font-weight:900;letter-spacing:-1px}
.sprint .sp-w{font-size:22px;font-weight:800;margin:8px 0}
.sprint .sp-o{display:flex;gap:8px;flex-wrap:wrap;justify-content:center;margin-top:8px}
.sprint .sp-o button{border:none;border-radius:12px;padding:10px 16px;font:800 14px 'Manrope',sans-serif;
  background:rgba(255,255,255,.16);color:#fff;cursor:pointer}
.sprint .sp-o button:hover{background:rgba(255,255,255,.3)}
.tr-modes{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px}
.tr-mode{border:1.5px solid var(--line);background:#fff;border-radius:12px;padding:9px 14px;
  font:800 13.5px 'Manrope',sans-serif;color:var(--muted);cursor:pointer}
.tr-mode.on{background:var(--violet);border-color:var(--violet);color:#fff}
.tr-card{background:#fff;border:1.5px solid var(--line);border-radius:18px;padding:22px;text-align:center;max-width:520px}
.tr-word{font-size:26px;font-weight:900;margin:6px 0 14px}
.tr-bar{height:8px;background:#EDEAFB;border-radius:6px;overflow:hidden;margin-bottom:14px}
.tr-bar i{display:block;height:100%;background:var(--violet)}
@media(max-width:640px){.t2-cats{grid-template-columns:1fr}.t2-m{grid-template-columns:1fr}}

/* ============================================================
   SpeakOn v3 — спільна дошка, офлайн-режим, Telegram
   ============================================================ */
.bd-wrap{display:grid;grid-template-columns:1fr 260px;gap:14px}
@media(max-width:900px){.bd-wrap{grid-template-columns:1fr}}
.bd-tools{display:flex;gap:6px;flex-wrap:wrap;align-items:center;background:#fff;border:1.5px solid var(--line);
  border-radius:14px;padding:8px 10px;margin-bottom:10px}
.bd-t{border:1.5px solid transparent;background:#F5F3FD;border-radius:10px;width:38px;height:36px;
  font-size:17px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center}
.bd-t:hover{background:#EDEAFB}
.bd-t.on{background:var(--violet);color:#fff}
.bd-sep{width:1px;height:26px;background:var(--line);margin:0 4px}
.bd-col{width:24px;height:24px;border-radius:50%;border:2px solid #fff;box-shadow:0 0 0 1.5px var(--line);cursor:pointer}
.bd-col.on{box-shadow:0 0 0 3px var(--violet)}
.bd-w{width:26px;height:26px;border-radius:8px;border:1.5px solid var(--line);background:#fff;cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center}
.bd-w.on{border-color:var(--violet);background:#EDEAFB}
.bd-w i{display:block;background:var(--ink);border-radius:99px}
.bd-canvas-wrap{position:relative;background:#fff;border:1.5px solid var(--line);border-radius:16px;overflow:hidden}
#bdCanvas{display:block;width:100%;height:520px;touch-action:none;cursor:crosshair}
@media(max-width:640px){#bdCanvas{height:380px}}
.bd-cursor{position:absolute;pointer-events:none;transform:translate(-3px,-3px);z-index:5;transition:left .08s linear,top .08s linear}
.bd-cursor b{display:block;font-size:11px;font-weight:800;background:var(--violet);color:#fff;
  border-radius:8px;padding:2px 6px;margin-top:10px;white-space:nowrap}
.bd-side .card{padding:14px 16px;margin-bottom:12px}
.bd-user{display:flex;align-items:center;gap:9px;padding:7px 0}
.bd-dot{width:9px;height:9px;border-radius:50%;background:var(--green)}
.bd-hint{font-size:12.5px;color:var(--muted);line-height:1.55}
.bd-live{display:inline-flex;align-items:center;gap:6px;font-weight:800;font-size:12.5px;color:var(--green)}
.bd-live i{width:8px;height:8px;border-radius:50%;background:var(--green);animation:bdp 1.4s infinite}
@keyframes bdp{0%,100%{opacity:1}50%{opacity:.25}}

/* --- офлайн / PWA --- */
#netPill{cursor:default}
#netPill.off{background:#FBE3E1;color:#B4231F}
.sync-badge{background:#FFF3D1;color:var(--sun-dark);border-radius:999px;padding:4px 10px;font-weight:800;font-size:12px}
.off-bar{position:fixed;left:0;right:0;bottom:0;z-index:120;background:#3B3663;color:#fff;
  padding:9px 14px;font-weight:700;font-size:13.5px;display:none;align-items:center;gap:10px;justify-content:center}
.off-bar.show{display:flex}
.off-bar button{background:rgba(255,255,255,.18);border:none;color:#fff;border-radius:9px;padding:5px 12px;
  font:800 12.5px 'Manrope',sans-serif;cursor:pointer}

/* --- Telegram --- */
.tg-grid{display:grid;grid-template-columns:1fr 380px;gap:16px}
@media(max-width:900px){.tg-grid{grid-template-columns:1fr}}
.tg-phone{background:#17212B;border-radius:22px;padding:14px 12px 18px;box-shadow:0 12px 30px rgba(0,0,0,.18)}
.tg-head{display:flex;align-items:center;gap:10px;padding:4px 6px 12px;border-bottom:1px solid #24313D;margin-bottom:12px}
.tg-ava{width:38px;height:38px;border-radius:50%;background:linear-gradient(135deg,#5B4BD4,#7C6CF0);
  display:flex;align-items:center;justify-content:center;font-size:18px}
.tg-name{color:#fff;font-weight:800;font-size:14.5px}
.tg-sub{color:#7D8E9C;font-size:12px}
.tg-msg{background:#212D3B;color:#E9F0F6;border-radius:14px 14px 14px 4px;padding:10px 13px;margin:8px 0;
  font-size:13.5px;line-height:1.55;max-width:92%}
.tg-msg b{color:#fff}
.tg-msg.me{background:#2B5278;margin-left:auto;border-radius:14px 14px 4px 14px}
.tg-time{font-size:10.5px;color:#7D8E9C;text-align:right;margin-top:4px}
.tg-btns{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.tg-btn{background:#2B5278;color:#E9F0F6;border:none;border-radius:9px;padding:7px 11px;font:700 12.5px 'Manrope',sans-serif}
.tg-set{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid var(--line)}
.tg-set:last-child{border-bottom:none}
.tg-set label{flex:1;font-weight:700;font-size:14px;cursor:pointer}
.tg-set .muted{font-size:12.5px;font-weight:600}
.sw{position:relative;width:44px;height:25px;flex:none}
.sw input{opacity:0;width:0;height:0;position:absolute}
.sw i{position:absolute;inset:0;background:#DDD8F0;border-radius:99px;transition:.2s;cursor:pointer}
.sw i:before{content:'';position:absolute;width:19px;height:19px;left:3px;top:3px;background:#fff;border-radius:50%;transition:.2s}
.sw input:checked + i{background:var(--violet)}
.sw input:checked + i:before{transform:translateX(19px)}
.tg-code{font:800 15px ui-monospace,Menlo,Consolas,monospace;background:#F3F1FA;color:var(--violet);
  border-radius:10px;padding:9px 14px;display:inline-block;letter-spacing:1px}
.cmd-row{display:flex;gap:10px;padding:8px 0;border-bottom:1px solid var(--line);font-size:14px}
.cmd-row:last-child{border-bottom:none}
.cmd-row code{font:800 13.5px ui-monospace,Menlo,Consolas,monospace;color:var(--violet);min-width:104px}

/* Правило браузера [hidden]{display:none} задається селектором елемента,
   тож будь-який .role-sw{display:inline-flex} його перебиває за
   специфічністю — і «прихований» перемикач лишається на екрані.
   Та сама пастка вже траплялась із модалкою в адмінці. */
[hidden] { display: none !important }

/* ===== ХТО ЗАРАЗ НА УРОЦІ =================================================
   Кружечки згори. Накладаються один на одного, як у месенджерах: двоє
   людей мають читатись як «ми тут разом», а не як два окремі значки.
   Порожній контейнер не займає місця — коли нікого немає, і сліду немає. */
.live-who{display:flex;align-items:center}
.live-who:empty{display:none}
.live-ava{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;
  font:700 12px 'Manrope',sans-serif;color:#fff;border:2px solid #fff;
  margin-left:-8px;position:relative;cursor:default;
  box-shadow:0 2px 6px rgba(34,30,63,.18)}
.live-ava:first-child{margin-left:0}
.live-ava.tc{background:linear-gradient(135deg,#7C6CF0,#5B4BD4)}   /* викладач */
.live-ava.st{background:linear-gradient(135deg,#FF8A6B,#FF6B4A)}   /* учень */
/* Зелена цятка — «на звʼязку просто зараз», а не «має акаунт». */
.live-ava::after{content:'';position:absolute;right:-1px;bottom:-1px;width:9px;height:9px;
  border-radius:50%;background:#25C26E;border:2px solid #fff}
.live-ava.me{outline:2px solid var(--violet-tint)}

/* ===== ЖИВИЙ УРОК ========================================================
   Панель викладача. Згорнута — це вузька вкладка збоку, щоб не перекривала
   урок; розгорнута — картка з тим, що учень робить просто зараз. */
#livePanel{position:fixed;right:0;bottom:90px;z-index:150;display:flex;align-items:flex-end}
#livePanel .live-body{display:none;width:320px;max-height:60vh;overflow:auto;background:#fff;
  border:1.5px solid var(--line);border-right:0;border-radius:16px 0 0 16px;padding:16px;
  box-shadow:0 18px 40px rgba(34,30,63,.16)}
#livePanel.open .live-body{display:block}
.live-tab{border:0;background:var(--violet);color:#fff;font:700 13px 'Manrope',sans-serif;
  cursor:pointer;padding:12px 8px;border-radius:12px 0 0 12px;writing-mode:vertical-rl;
  transform:rotate(180deg);box-shadow:0 8px 20px rgba(60,40,140,.25)}
.live-live{color:#1F7A3D;font-weight:700;font-size:13.5px;margin-bottom:10px}
.live-off{color:var(--muted);font-size:13.5px;margin-bottom:10px}
.live-hint{color:var(--muted);font-size:13px;line-height:1.5}
.live-online{display:grid;gap:8px;margin-top:10px}
.live-feed{display:grid;gap:6px;margin-bottom:12px}
.live-row{font-size:13.5px;line-height:1.45;padding:7px 10px;background:var(--bg);border-radius:10px}
.live-where{display:block;font-size:11.5px;color:var(--muted);text-transform:uppercase;letter-spacing:.03em}
/* Підпис автора рядка. Стрічку тепер читають з обох боків, і без нього
   не розібрати, де твоя дія, а де чужа. */
.live-who{display:inline-block;margin-right:6px;padding:1px 7px;border-radius:999px;
  font-size:10.5px;font-weight:800;text-transform:uppercase;letter-spacing:.04em;
  background:var(--violet-tint);color:var(--violet)}
.live-who.me{background:#E8E6F5;color:var(--muted)}
.live-row i{color:var(--muted);font-style:normal;font-size:12.5px}
.live-editable{cursor:pointer;position:relative}
.live-editable:hover{background:var(--violet-tint)}
.live-fix{display:block;margin-top:3px;font-size:11.5px;color:var(--violet);font-weight:700}
.live-fixbox{display:grid;gap:6px;padding:10px;margin-bottom:10px;
  background:var(--violet-tint);border-radius:12px}
.live-fixbox input{height:38px;border:1.5px solid var(--violet);border-radius:10px;padding:0 10px;
  font:500 14px 'Manrope',sans-serif;background:#fff}
.live-say{display:flex;gap:6px;margin-bottom:8px}

/* Поле, яке щойно виправила викладачка. Помітно й недовго: учень мусить
   побачити, що текст змінився не сам, але підсвітка не має лишатись на
   весь урок. */
@keyframes liveEdited{
  0%{background:#FFF3C4;border-color:#E2A400}
  100%{background:#fff;border-color:var(--line)}
}
.live-edited{animation:liveEdited 1.6s ease-out}
.live-say input{flex:1;min-width:0;height:38px;border:1.5px solid var(--line);border-radius:10px;
  padding:0 10px;font:500 14px 'Manrope',sans-serif}
.live-stop{width:100%}

/* ===== ЗАПИТ РАХУНКУ =====================================================
   Модалка «куди написати по рахунок». Живе тут, а не в 30-cabinet.css:
   там усе вкладене в #cabView{…}, а ця потрібна ще й у вигляді батьків,
   який лежить поруч, а не всередині. */
.ask-bg{position:fixed;inset:0;z-index:200;display:none;align-items:center;justify-content:center;
  padding:20px;background:rgba(34,30,63,.45)}
.ask-bg.show{display:flex}
.ask{width:100%;max-width:420px;background:#fff;border-radius:20px;padding:24px;
  box-shadow:0 18px 40px rgba(34,30,63,.22);text-align:center}
.ask h3{font-family:'Bricolage Grotesque',sans-serif;font-size:20px;margin:0 0 6px;color:var(--ink)}
.ask-what{font-family:'Bricolage Grotesque',sans-serif;font-size:22px;font-weight:700;
  color:var(--violet);margin-bottom:10px}
.ask p{margin:0 0 16px;font-size:14px;line-height:1.5}
.ask-links{display:grid;gap:8px}
.ask-links .btn{width:100%}
.ask-close{margin-top:14px;width:100%}

/* ===== КІНЕЦЬ УРОКУ: ЗІРОЧКИ ============================================
   Те саме віконце, але без посилань: тут не читають, тут натискають одну
   зірочку. Тому зірочки великі — це головна і єдина дія в цьому вікні. */
.end-emoji{font-size:34px;line-height:1;margin-bottom:4px}
.end-ask .ask-what{margin-bottom:2px}
.end-who{font-size:13px;margin-bottom:10px}
.stars{display:flex;justify-content:center;gap:4px;margin:2px 0 6px}
.star{background:none;border:0;padding:2px 4px;cursor:pointer;font-size:36px;line-height:1;
  color:var(--line);transition:color .12s,transform .12s}
.star:hover{color:var(--sun)}
.star.on{color:var(--sun)}
.star:active{transform:scale(.88)}
/* Наведення підсвічує всі зірочки ліворуч від курсора, а не одну під ним:
   інакше «чотири зірки» доводиться уявляти. */
.stars:hover .star{color:var(--sun)}
.stars .star:hover ~ .star{color:var(--line)}
.end-word{min-height:22px;font-weight:700;color:var(--violet);font-size:14px;margin-bottom:10px}
.end-note{width:100%;height:40px;border:1.5px solid var(--line);border-radius:10px;
  padding:0 12px;font:500 14px 'Manrope',sans-serif;margin-bottom:10px}
.end-note:focus{outline:none;border-color:var(--violet)}
.end-send{width:100%}
.end-send:disabled{opacity:.5;cursor:default}

/* ===== ДОМАШНЄ ЗАВДАННЯ (справжнє) =======================================
   Головне тут — блок прикріпленого. Дитина сфотографувала зошит і не має
   гадати, чи дійшло: файл видно списком, з мініатюрою, іменем і часом,
   а не сховано за словом «прикріплено». */
.hwr-card{margin-bottom:16px}
.hwr-head{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;margin-bottom:14px}
.hwr-title{font-size:17px;margin:0 0 3px}
.hwr-due{font-size:12.5px;color:var(--muted)}
.hwr-pill{flex:0 0 auto;padding:4px 11px;border-radius:999px;font-size:11.5px;font-weight:800;
  text-transform:uppercase;letter-spacing:.03em}
.hwr-todo{background:#FFE2AC;color:#8A5B00}
.hwr-sent{background:var(--violet-tint);color:var(--violet)}
.hwr-done{background:#C9F2D0;color:#1F7A3D}
.hwr-skip{background:#EFEDF6;color:#8A86A8}

.hwr-task{margin-bottom:14px}
.hwr-q{display:flex;gap:8px;font-size:14.5px;line-height:1.5;margin-bottom:7px}
.hwr-q span{flex:0 0 21px;height:21px;border-radius:7px;background:var(--violet-tint);color:var(--violet);
  font-size:12px;font-weight:800;display:inline-flex;align-items:center;justify-content:center}
.hwr-in{width:100%;border:1.5px solid var(--line);border-radius:12px;padding:10px 12px;
  font:500 14.5px 'Manrope',sans-serif;background:#fff;resize:vertical}
.hwr-in:focus{outline:0;border-color:var(--violet)}
.hwr-in:disabled{background:var(--bg);color:var(--muted)}

.hwr-files{border:1.5px dashed var(--line);border-radius:14px;padding:13px;margin:14px 0}
.hwr-files-h{font-size:13px;font-weight:800;color:var(--ink);margin-bottom:9px}
.hwr-empty{font-size:13px;color:var(--muted);line-height:1.5;margin:0}
.hwr-file{display:flex;align-items:center;gap:10px;padding:7px;border-radius:10px;background:var(--bg);
  margin-bottom:7px}
.hwr-thumb{width:44px;height:44px;border-radius:9px;object-fit:cover;display:block;background:#fff;
  border:1px solid var(--line)}
.hwr-doc{display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:800;
  color:var(--violet)}
.hwr-fmeta{flex:1;min-width:0;font-size:13px;line-height:1.4}
.hwr-fmeta b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hwr-fmeta span{font-size:11.5px;color:var(--muted)}
.hwr-del{border:0;background:0;color:var(--muted);font-size:15px;cursor:pointer;padding:4px 7px;
  border-radius:8px}
.hwr-del:hover{background:#FBD2D0;color:#B4231F}
.hwr-attach{display:inline-block;margin-top:4px;padding:8px 14px;border-radius:11px;cursor:pointer;
  border:1.5px solid var(--violet);color:var(--violet);font:800 13px 'Manrope',sans-serif}
.hwr-attach:hover{background:var(--violet-tint)}

.hwr-note{font-size:13.5px;line-height:1.5;padding:10px 12px;border-radius:11px;margin-bottom:12px}
.hwr-ok{background:#C9F2D0;color:#1F7A3D}
.hwr-sent-note{background:var(--violet-tint);color:var(--violet)}
.hwr-fb{margin-top:5px;font-weight:500;color:var(--ink)}
.hwr-send{width:100%}

/* ===== ЩО РОБИТЬ ДРУГИЙ ===================================================
   Не рядок у стрічці збоку, а та сама клітинка на екрані — в обох. Рамка
   зовні, а не фон: підмінити вигляд відповіді учня означало б підказати
   йому те, чого він не питав. */
.live-ghost{position:relative;outline:2.5px solid var(--violet);outline-offset:2px;
  border-radius:10px;animation:liveGhostIn .35s ease}
.live-ghost::after{content:attr(data-ghost);position:absolute;top:-9px;left:8px;z-index:3;
  padding:1px 7px;border-radius:999px;background:var(--violet);color:#fff;
  font:800 9.5px 'Manrope',sans-serif;text-transform:uppercase;letter-spacing:.05em;
  pointer-events:none;white-space:nowrap}
.live-ghost[data-ghost="student"]{outline-color:#E2574C}
.live-ghost[data-ghost="student"]::after{background:#E2574C}
@keyframes liveGhostIn{from{outline-color:transparent}to{outline-color:currentColor}}
@media (prefers-reduced-motion:reduce){.live-ghost{animation:none}}

      #page-kb{--kb-tint:#EFEDFB}
      #page-kb .kb-hero{background:var(--ink);border-radius:20px;padding:22px 26px;color:#fff;margin-bottom:16px}
      #page-kb .kb-hero h2{font:800 26px 'Bricolage Grotesque',sans-serif;margin:0 0 6px;color:#fff;letter-spacing:-.02em}
      #page-kb .kb-hero p{margin:0;font-size:14.5px;color:#C7C3E0;max-width:70ch}
      #page-kb .kb-hero .kb-upd{font:700 11px 'Manrope',sans-serif;letter-spacing:.14em;text-transform:uppercase;color:var(--sun);margin-bottom:8px}
      #page-kb .kb-tools{display:flex;gap:10px;align-items:center;flex-wrap:wrap;position:sticky;top:0;z-index:5;
        background:var(--bg);padding:10px 0 12px;margin-bottom:4px}
      #page-kb .kb-search{flex:1;min-width:220px;border:1.5px solid var(--line);border-radius:12px;padding:10px 14px;
        font:600 14px 'Manrope',sans-serif;background:#fff;color:var(--text)}
      #page-kb .kb-search:focus{outline:2px solid var(--violet);outline-offset:1px}
      #page-kb .kb-chips{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:14px}
      #page-kb .kb-chip{background:#fff;border:1.5px solid var(--line);border-radius:99px;padding:6px 12px;
        font:700 12.5px 'Manrope',sans-serif;color:var(--text);cursor:pointer;text-decoration:none;display:inline-block}
      #page-kb .kb-chip:hover{border-color:var(--violet);color:var(--violet-dark)}
      #page-kb .kb-sec{background:#fff;border:1.5px solid var(--line);border-radius:18px;padding:20px 24px;margin-bottom:14px}
      #page-kb .kb-sec>h3{display:flex;gap:12px;align-items:center;font:800 21px 'Bricolage Grotesque',sans-serif;
        color:var(--ink);margin:0 0 3px;letter-spacing:-.02em}
      #page-kb .kb-n{background:var(--violet);color:#fff;min-width:30px;height:30px;border-radius:10px;
        display:flex;align-items:center;justify-content:center;font:800 13px 'Manrope',sans-serif;flex:none}
      #page-kb .kb-sub{color:var(--muted);font-size:14px;margin:0 0 14px 42px}
      #page-kb .kb-sec h4{font:800 16px 'Bricolage Grotesque',sans-serif;color:var(--ink);margin:18px 0 6px}
      #page-kb .kb-sec p{font-size:14.5px;line-height:1.6;margin:8px 0}
      #page-kb .kb-sec ul,#page-kb .kb-sec ol{font-size:14.5px;line-height:1.6;padding-left:20px;margin:8px 0}
      #page-kb .kb-sec li{margin:4px 0}
      #page-kb .kb-grid{display:grid;gap:12px;margin:14px 0}
      #page-kb .kb-g2{grid-template-columns:repeat(2,minmax(0,1fr))}
      #page-kb .kb-g3{grid-template-columns:repeat(3,minmax(0,1fr))}
      #page-kb .kb-g4{grid-template-columns:repeat(4,minmax(0,1fr))}
      #page-kb .kb-card{background:#FBFAFF;border:1.5px solid var(--line);border-radius:14px;padding:14px 16px}
      #page-kb .kb-card b{display:block;font:800 15px 'Bricolage Grotesque',sans-serif;color:var(--ink);margin-bottom:4px}
      #page-kb .kb-card span{font-size:13.5px;color:var(--muted);line-height:1.5}
      #page-kb .kb-card .kb-em{font-size:20px;display:block;margin-bottom:6px}
      #page-kb .kb-note{border-radius:14px;padding:14px 17px;margin:14px 0;font-size:14.5px;line-height:1.55}
      #page-kb .kb-note b{display:block;margin-bottom:3px}
      #page-kb .kb-v{background:var(--kb-tint);border:1.5px solid #D9D4F5}
      #page-kb .kb-v b{color:var(--violet-dark)}
      #page-kb .kb-g{background:var(--green-tint);border:1.5px solid #C4E5CE;color:#17532B}
      #page-kb .kb-g b{color:var(--green)}
      #page-kb .kb-r{background:var(--red-tint);border:1.5px solid #F0C9C7;color:#7A1A17}
      #page-kb .kb-r b{color:var(--red)}
      #page-kb .kb-t{width:100%;border-collapse:collapse;margin:12px 0;font-size:14px;background:#fff;
        border:1.5px solid var(--line);border-radius:14px;overflow:hidden}
      #page-kb .kb-t th{background:var(--kb-tint);text-align:left;font:800 12.5px 'Manrope',sans-serif;
        color:var(--ink);padding:10px 13px}
      #page-kb .kb-t td{padding:10px 13px;border-top:1px solid var(--line);vertical-align:top;line-height:1.5}
      #page-kb .kb-pair{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:14px 0}
      #page-kb .kb-pair>div{border-radius:14px;padding:13px 16px;font-size:14px;line-height:1.55}
      #page-kb .kb-bad{background:var(--red-tint);border:1.5px solid #F0C9C7}
      #page-kb .kb-good{background:var(--green-tint);border:1.5px solid #C4E5CE}
      #page-kb .kb-tag{font:800 10.5px 'Manrope',sans-serif;letter-spacing:.1em;text-transform:uppercase;display:block;margin-bottom:5px}
      #page-kb .kb-bad .kb-tag{color:var(--red)} #page-kb .kb-good .kb-tag{color:var(--green)}
      #page-kb .kb-line{margin:14px 0 4px;background:var(--ink);border-radius:18px;padding:18px 20px;color:#fff}
      #page-kb .kb-line .kb-lh{display:flex;justify-content:space-between;align-items:baseline;flex-wrap:wrap;gap:8px;margin-bottom:14px}
      #page-kb .kb-line .kb-lh b{font:800 17px 'Bricolage Grotesque',sans-serif}
      #page-kb .kb-line .kb-lh span{font-size:12.5px;color:#B7B2D6}
      #page-kb .kb-bar{display:flex;gap:3px;height:52px}
      #page-kb .kb-seg{border:0;border-radius:8px;cursor:pointer;font:800 11px 'Manrope',sans-serif;color:#221E3F;
        display:flex;flex-direction:column;justify-content:center;align-items:center;padding:2px;line-height:1.15;transition:transform .14s}
      #page-kb .kb-seg small{font-weight:600;font-size:10px;opacity:.7}
      #page-kb .kb-seg:hover{transform:translateY(-3px)}
      #page-kb .kb-seg[aria-selected="true"]{outline:2px solid #fff;outline-offset:2px}
      #page-kb .kb-axis{display:flex;justify-content:space-between;font-size:11px;color:#8F8AB5;margin-top:7px}
      #page-kb .kb-body{margin-top:14px;background:rgba(255,255,255,.07);border-radius:13px;padding:14px 16px;
        font-size:14px;color:#E9E7F7;min-height:92px}
      #page-kb .kb-body h5{font:800 15px 'Bricolage Grotesque',sans-serif;margin:0 0 5px;color:#fff}
      #page-kb .kb-body ul{margin:5px 0 0;padding-left:19px}
      #page-kb .kb-check{list-style:none;padding:0;margin:12px 0}
      #page-kb .kb-check li{border-bottom:1px solid var(--line)}
      #page-kb .kb-check button{width:100%;display:flex;gap:11px;align-items:flex-start;background:none;border:0;
        padding:9px 2px;font:500 14.5px 'Manrope',sans-serif;text-align:left;color:var(--text);cursor:pointer;line-height:1.5}
      #page-kb .kb-box{width:20px;height:20px;border:2px solid var(--line);border-radius:6px;flex:none;margin-top:2px;
        display:flex;align-items:center;justify-content:center;font-size:12px;color:#fff}
      #page-kb .kb-check button[aria-pressed="true"] .kb-box{background:var(--green);border-color:var(--green)}
      #page-kb .kb-check button[aria-pressed="true"] .kb-box::after{content:"✓"}
      #page-kb .kb-check button[aria-pressed="true"] .kb-lbl{color:var(--muted);text-decoration:line-through}
      #page-kb .kb-prog{font-size:13px;color:var(--muted);margin:4px 0 0}
      #page-kb details{background:#FBFAFF;border:1.5px solid var(--line);border-radius:14px;margin:9px 0;overflow:hidden}
      #page-kb summary{cursor:pointer;padding:12px 16px;font:800 15px 'Bricolage Grotesque',sans-serif;color:var(--ink);
        list-style:none;display:flex;gap:10px;align-items:center}
      #page-kb summary::-webkit-details-marker{display:none}
      #page-kb summary::before{content:"→";color:var(--coral);font-weight:800;transition:transform .16s}
      #page-kb details[open] summary::before{transform:rotate(90deg)}
      #page-kb .kb-d{padding:0 16px 14px 42px;font-size:14px;line-height:1.6;color:var(--text)}
      #page-kb .kb-hide{display:none!important}
      #page-kb .kb-empty{padding:26px;text-align:center;color:var(--muted);font-size:14.5px}
      @media(max-width:900px){#page-kb .kb-g2,#page-kb .kb-g3,#page-kb .kb-g4,#page-kb .kb-pair{grid-template-columns:1fr}
        #page-kb .kb-bar{height:auto;flex-direction:column}
        #page-kb .kb-seg{height:38px;flex-direction:row;gap:8px}}
/* ==========================================================================
   РОЛЬОВИЙ ШЛЮЗ
   ==========================================================================

   Прототип ховав учительські елементи правилами виду `.only-teacher{display:none}`.
   Це найслабша можлива форма: (0,0,1,0) і жодного !important. Вона програє
   будь-якому пізнішому або специфічнішому оголошенню `display` — а таких у
   кодовій базі багато:

     .gear-btn{display:inline-flex}          → 50-app.css, пізніше за .only-teacher
     #cabView .btn{display:inline-flex}      → 30-cabinet.css, вкладене, (1,0,1,0)

   Через це учень бачив ⚙️ «робочі години» і кнопку «Invite the student to
   the board». Тому шлюз мусить бути безумовним: один файл, підключений
   останнім, тільки !important. Якщо десь з'явиться новий display — шлюз
   однаково виграє.

   Регресію стереже tests/roles.spec.js: він перевіряє, що для учня жоден
   із перелічених нижче селекторів не має видимого елемента.
   ========================================================================== */

/* --- те, що бачить лише викладач ------------------------------------- */
body:not(.role-teacher) .only-teacher,
body:not(.role-teacher) .teacher-only,
body:not(.role-teacher) .t-tip,
body:not(.role-teacher) .teacher-notes,
body:not(.role-teacher) .rw-hint,
body:not(.role-teacher) .rw-teacher-note,
body:not(.role-teacher) .hwbuilder,
body:not(.role-teacher) #hwBuilder,
body:not(.role-teacher) .assign-row,
body:not(.role-teacher) .answer-key,
body:not(.role-teacher) .blk-menu-wrap,
body:not(.role-teacher) .ntf-wrap,
body:not(.role-teacher) #teachEnter,
body:not(.role-teacher) #lmDelete,
body:not(.role-teacher) #wkAddBtn,
body:not(.role-teacher) #whGear,
body:not(.role-teacher) .nav-it[data-page="students"],
body:not(.role-teacher) .nav-it[data-page="classes"],
body:not(.role-teacher) .nav-it[data-page="kb"],
body:not(.role-teacher) .tab[data-page="students"],
body:not(.role-teacher) .tab[data-page="classes"],
body:not(.role-teacher) .tab[data-page="kb"],
body:not(.role-teacher) .tt-tab[data-tt="students"],
body:not(.role-teacher) .tt-tab[data-tt="classes"],
body:not(.role-teacher) #tt-classes,
body:not(.role-teacher) #tt-students { display: none !important }

/* --- те, що бачить лише учень ---------------------------------------- */
body.role-teacher .only-student { display: none !important }

/* --- посилання «Для батьків»: учневі воно веде в чужий вигляд --------- */
body[data-role="student"] .nav-it[href="#parents"],
body[data-role="student"] .m-more-it[href="#parents"] { display: none !important }

/* --- меню учня: лише те, чим він справді користується ----------------
   Спільна дошка нічого нікуди не передає (транспорту в коді немає),
   сторінка Telegram — інструкція англійською про токен і `node bot.js`,
   а оплата пакетів — справа батьків, у них для цього окремий вигляд.
   Самі сторінки лишаються: шлюз на go() у 180-auth.js повертає учня
   на головну, якщо він потрапить туди в обхід кнопки. */
body[data-role="student"] .nav-it[data-page="board"],
body[data-role="student"] .nav-it[data-page="tg"],
body[data-role="student"] .nav-it[data-page="pay"],
body[data-role="student"] .m-more-it[data-page="board"],
body[data-role="student"] .m-more-it[data-page="tg"],
body[data-role="student"] .m-more-it[data-page="pay"],
body[data-role="student"] .tab[data-page="board"],
body[data-role="student"] .tab[data-page="tg"],
body[data-role="student"] .tab[data-page="pay"] { display: none !important }

/* --- плашка DEMO: для справжнього акаунта вона просто бреше ----------- */
body[data-role] .pill.demo,
body[data-role] #demoPill { display: none !important }

/* Курсор і ховери, що обіцяють учневі дію, якої в нього немає. */
body:not(.role-teacher) .wk-cell,
body:not(.role-teacher) .wk-les { cursor: default }
body:not(.role-teacher) .wk-cell:hover { background: transparent }
body:not(.role-teacher) .wk-cell:hover::after { content: none }

/* Плашки «ДЕМО» у виглядах батьків і викладача: для справжнього акаунта
   вони просто неправда. Позначені класом, бо ці два вигляди мають власну
   шапку, окрему від кабінету. */
body[data-role] .demo-pill { display: none !important }

/* Виняток — вигляд батьків, доки на ньому не справжні числа.
   Розмітка цього вигляду досі прототипна: імʼя дитини, відвідуваність,
   «домашніх вчасно» і залишок занять стоять константами в index.html.
   Справжні підставляє 198-parents-real.js із /api/my/children — і аж тоді
   ставить body[data-parents="real"], після чого плашка гасне сама.
   Тобто позначка тримається рівно доти, доки на екрані вигадка: у
   персоналу, який зазирнув у чужий вигляд, і в батьків, поки відповідь
   сервера в дорозі або не дійшла.

   Вигляд плашки доводиться повторити тут: .pill живе в 30-cabinet.css
   усередині #cabView, #parPkg, а ця шапка — за межами обох, тож клас на
   ній сам по собі не малює нічого. */
body[data-role] #parView .demo-pill {
  display: inline-block !important;
  background: #FFF3D1; color: var(--sun-dark);
  font-size: 12px; font-weight: 700;
  border-radius: 99px; padding: 4px 12px;
}
body[data-role][data-parents="real"] #parView .demo-pill { display: none !important }

/* «Кабінет дитини →» веде на #cabinet, куди батьків не пускає шлюз, —
   тобто це кнопка в нікуди. Персоналу вона потрібна, батькам ні. */
body[data-role="parent"] .kid-cab { display: none !important }

/* Панель живого уроку бачать обоє — і викладачка, і учень.
   Спершу вона була приладом спостереження, тому в учня її ховали. Але
   односторонній урок не буває: коли текст у полі змінюється сам собою,
   а підказка блимає тостом і зникає, дитина бачить не допомогу, а збій.
   У неї те саме вікно, тільки без кнопок — читати, а не керувати.
   Батькам вона й далі ні до чого: це урок, а не нагляд. */
body[data-role="parent"] #livePanel { display: none !important }

/* ==========================================================================
   МОБІЛЬНИЙ ІНТЕРФЕЙС КАБІНЕТУ
   ==========================================================================

   Чому цей файл існує.

   У монолітному прототипі мобільні правила лежали ВСЕРЕДИНІ блоку
   `#cabView{ … }` — тобто `.side{display:none}` фактично означало
   `#cabView .side{display:none}` і перемагало `#cabView .side{width:230px}`.
   Розбиття на файли (Фаза 1) розрізало цей блок навпіл: усе, що йшло після
   рядка «Тижневий розклад викладача», потрапило в 40-features.css уже БЕЗ
   обгортки. Специфічність мобільних правил впала з (1,0,1,0) до (0,0,1,0),
   і сайдбар перестав ховатись. На екрані 390px це давало 230px сайдбара +
   160px контенту й документ шириною 607px.

   Перевірка Фази 1 цього не спіймала, бо доводила побайтову тотожність
   конкатенації СКРИПТІВ, а тести дивились лише на 1280×900.

   Тому мобільний каркас — окремий файл, підключений останнім, із власною
   специфічністю. Регресію стереже tests/mobile.spec.js: він вимагає, щоб
   на 360/390/414 px документ не був ширший за екран на жодній зі сторінок.

   Каркас: сайдбар зникає, знизу — панель із 4 головних розділів і кнопкою
   «Ще», яка відкриває аркуш із рештою. У сайдбарі 13 пунктів; втиснути їх
   у панель на 360px неможливо — виходить по 27px на пункт.
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. Каркас
   -------------------------------------------------------------------------- */
@media (max-width: 820px) {
  #cabView .app { display: block }
  #cabView .side { display: none !important }
  #cabView .main { padding: 14px 14px calc(76px + env(safe-area-inset-bottom)) }

  /* Шапка: заголовок окремим рядком, пігулки — стрічкою, що прокручується.
     Інакше «7 lessons» і «Вийти» переносяться й з'їдають пів екрана. */
  #cabView .topbar {
    display: block;
    margin-bottom: 16px;
  }
  #cabView .topbar h1 { font-size: 21px; line-height: 1.25; margin-bottom: 10px }
  #cabView .topbar h1 .streak { font-size: 12px; padding: 3px 9px; vertical-align: middle }
  #cabView .topbar > div {
    display: flex !important;
    gap: 8px;
    overflow-x: auto;
    scrollbar-width: none;
    padding-bottom: 2px;
    -webkit-overflow-scrolling: touch;
  }
  #cabView .topbar > div::-webkit-scrollbar { display: none }
  #cabView .topbar > div > * { flex: 0 0 auto }

  /* Сітки, розраховані на широкий екран. */
  #cabView .grid2,
  #cabView .pkg,
  #cabView .tg-grid,
  #cabView .bd-wrap,
  #cabView .t2-cats,
  #cabView .t2-m { grid-template-columns: 1fr }

  /* Діти grid/flex за замовчуванням мають min-width:auto й не дають
     контейнеру звузитись — саме через це сторінка Telegram вилазила
     за 360px, хоча сітка вже була одноколонковою. */
  #cabView .grid2 > *,
  #cabView .pkg > *,
  #cabView .tg-grid > *,
  #cabView .bd-wrap > *,
  #cabView .page > * { min-width: 0 }

  /* Ті самі картки пакетів тепер стоять і у вигляді батьків (parShowPkg
     переносить їх туди зі сторінки «Оплата»). Правила вище прив'язані до
     #cabView, тож на телефоні пакети в батьків лишались би триколонковими
     й розчавленими. */
  #parPkg .pkg { grid-template-columns: 1fr }
  #parPkg .pkg > * { min-width: 0 }

  #cabView .card,
  #parPkg .card { padding: 16px; border-radius: 16px }
  #cabView h1 { font-size: 21px }
  #cabView h2 { font-size: 17px }

  /* Довгі слова й посилання не мусять розсувати картку. */
  #cabView .page { overflow-wrap: anywhere }
}

/* --------------------------------------------------------------------------
   2. Нижня панель і аркуш «Ще»
   -------------------------------------------------------------------------- */
@media (max-width: 820px) {
  .tabbar {
    display: flex;
    position: fixed; left: 0; right: 0; bottom: 0; z-index: 90;
    background: rgba(255, 255, 255, .96);
    backdrop-filter: blur(10px);
    border-top: 1.5px solid var(--line);
    padding-bottom: env(safe-area-inset-bottom);
  }
  /* У панелі лишаються тільки чотири розділи — решта в аркуші «Ще». */
  .tabbar .tab { display: none }
  .tabbar .tab[data-page="home"],
  .tabbar .tab[data-page="lesson"],
  .tabbar .tab[data-page="hw"],
  .tabbar .tab[data-page="dict"],
  .tabbar .m-more { display: block }

  .tabbar .tab,
  .tabbar .m-more {
    flex: 1 1 0; min-width: 0;
    border: none; background: none;
    padding: 7px 2px 8px;
    font: 700 10.5px 'Manrope', sans-serif;
    color: var(--muted); cursor: pointer;
    min-height: 52px;
    transition: color .15s;
  }
  .tabbar .tab svg,
  .tabbar .m-more svg {
    width: 21px; height: 21px; stroke: currentColor; fill: none;
    stroke-width: 2; stroke-linecap: round; stroke-linejoin: round;
    display: block; margin: 0 auto 3px;
  }
  .tabbar .tab.active,
  .tabbar .m-more.active { color: var(--violet) }
  .tabbar .tab span.nav-badge { display: none }

  /* Лічильник домашок і слів — крапкою, а не числом: на 10px цифра не читається. */
  .tabbar .tab.has-badge { position: relative }
  .tabbar .tab.has-badge::after {
    content: ''; position: absolute; top: 6px; left: 50%; margin-left: 8px;
    width: 7px; height: 7px; border-radius: 50%; background: var(--coral);
  }
}
@media (min-width: 821px) {
  .tabbar { display: none }
}

/* Аркуш «Ще» — те саме меню, що в сайдбарі, тільки знизу. */
.m-sheet-bg {
  position: fixed; inset: 0; z-index: 200;
  background: rgba(34, 30, 63, .5);
  display: none;
}
.m-sheet-bg.show { display: block }
.m-sheet {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 201;
  background: #fff;
  border-radius: 22px 22px 0 0;
  padding: 10px 10px calc(14px + env(safe-area-inset-bottom));
  max-height: 82vh; overflow-y: auto;
  transform: translateY(100%);
  transition: transform .24s cubic-bezier(.22, .8, .3, 1);
  box-shadow: 0 -14px 40px rgba(34, 30, 63, .2);
}
.m-sheet-bg.show .m-sheet { transform: translateY(0) }
.m-sheet-grip {
  width: 40px; height: 4px; border-radius: 99px;
  background: var(--line); margin: 4px auto 12px;
}
.m-more-it {
  display: flex; align-items: center; gap: 12px;
  width: 100%; min-height: 48px;
  padding: 11px 14px; border: 0; background: none;
  border-radius: 13px; cursor: pointer;
  font: 700 15px 'Manrope', sans-serif; color: var(--ink);
  text-align: left; text-decoration: none;
}
.m-more-it:active { background: var(--violet-tint) }
.m-more-it.active { background: var(--violet-tint); color: var(--violet) }
.m-more-it svg {
  width: 20px; height: 20px; stroke: currentColor; fill: none;
  stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; flex-shrink: 0;
}
.m-more-it .m-ic { width: 20px; text-align: center; font-size: 17px; flex-shrink: 0 }
.m-more-it .m-badge {
  margin-left: auto; background: var(--coral); color: #fff;
  border-radius: 99px; font-size: 11.5px; padding: 2px 8px;
}
.m-sheet-sep { height: 1.5px; background: var(--line); margin: 8px 12px }
.m-sheet-who {
  display: flex; align-items: center; gap: 11px;
  padding: 6px 14px 12px;
}
/* Аркуш лежить поза #cabView, тож вкладене `#cabView .ava{…}` на нього
   не діє — кружечок з ініціалами доводиться описати ще раз. */
.m-sheet-who .ava {
  width: 40px; height: 40px; flex-shrink: 0;
  border-radius: 50%; display: flex; align-items: center; justify-content: center;
  background: linear-gradient(135deg, var(--coral), var(--sun)); color: #fff;
  font: 700 15px 'Bricolage Grotesque', system-ui, sans-serif;
  box-shadow: 0 4px 10px rgba(255, 107, 74, .3);
}
@media (min-width: 821px) {
  .m-sheet-bg { display: none !important }
}

/* --------------------------------------------------------------------------
   3. Модалки → нижні аркуші
   -------------------------------------------------------------------------- */
@media (max-width: 820px) {
  /* Селектор без #cabView — модалки лендінга (заявка, юридичні документи,
     пояснення про встановлення) лежать поза кабінетом і на телефоні
     потрібні так само. Через це доводиться писати !important: вкладене
     `#cabView .modal-bg{align-items:center}` має специфічність (1,0,1,0)
     і без нього перемагає. */
  .modal-bg { padding: 0 !important; align-items: flex-end !important }
  .modal {
    max-width: none !important; width: 100% !important;
    border-radius: 22px 22px 0 0 !important;
    padding: 22px 18px calc(22px + env(safe-area-inset-bottom)) !important;
    max-height: 88vh !important; overflow-y: auto !important;
  }
  #cabView .m-actions { flex-direction: column-reverse; gap: 8px }
  #cabView .m-actions .btn { width: 100%; height: 48px }

  /* Тост перекривав нижню панель, стоячи в правому верхньому куті
     поверх заголовка сторінки. */
  #toast {
    right: 12px; left: 12px; top: auto;
    bottom: calc(72px + env(safe-area-inset-bottom));
    align-items: stretch;
  }
  .toast { font-size: 13.5px; padding: 11px 14px }
}

/* --------------------------------------------------------------------------
   4. Дрібниці, які на дотик важать більше, ніж на миші
   -------------------------------------------------------------------------- */
@media (max-width: 820px) {
  /* Apple HIG і Material сходяться на 44px мінімальної цілі. */
  #cabView .btn { min-height: 44px }
  #cabView .qopt,
  #cabView .lvchip,
  #cabView .gtab,
  #cabView .yt-load,
  #cabView .sd-say,
  #cabView .sd-add,
  #cabView .bd-w { min-height: 40px; display: inline-flex; align-items: center }

  /* Ряди «зліва текст, справа кнопка» на вузькому екрані ламаються. */
  #cabView .hw,
  #cabView .slot,
  #cabView .hw-banner { flex-wrap: wrap }
  #cabView .hw > *,
  #cabView .slot > * { min-width: 0 }
  #cabView .hw-banner .hb-btn { width: 100%; margin-top: 4px }
  #cabView .progressbar { width: 100% }

  /* Таблиця журналу оплат: краще горизонтальний скрол, ніж стиснуті колонки. */
  #cabView .ledger { display: block; overflow-x: auto; white-space: nowrap; font-size: 13px }

  /* Спливаючий перекладач не має вилазити за екран. */
  #wordPop { max-width: calc(100vw - 24px) }

  /* Вкладки розкладу й сторінки учня скролимо, а не переносимо. */
  #cabView .tt-tabs,
  #cabView .sp-tabs,
  #cabView .yt-tabs {
    flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none;
  }
  #cabView .tt-tabs::-webkit-scrollbar,
  #cabView .sp-tabs::-webkit-scrollbar { display: none }
  #cabView .tt-tab { flex: 0 0 auto }

  /* Список секцій уроку. На широкому екрані це колонка ліворуч; на телефоні
     вона стає дев'ятьма рядками над самим уроком і, оскільки `1fr` має
     min-width:auto, розтягує сітку до 541px. Тому — стрічка «пігулок»,
     яка прокручується вбік: і в екран влазить, і крок уроку видно.  */
  #cabView .lesson-layout { grid-template-columns: minmax(0, 1fr) }
  #cabView .sections {
    display: flex; gap: 8px;
    overflow-x: auto; scrollbar-width: none;
    padding: 10px; position: static;
    border-radius: 14px; min-width: 0;
  }
  #cabView .sections::-webkit-scrollbar { display: none }
  #cabView .sections h3 { display: none }
  #cabView .sec-it {
    flex: 0 0 auto; width: auto;
    white-space: nowrap;
    padding: 9px 14px; min-height: 40px;
    border-radius: 99px; background: #F5F4FB;
  }
  #cabView .sec-it.active { background: var(--violet-tint) }
  #cabView .sec-it .si-check { margin-left: 6px }
  #cabView .sec-body { padding: 16px; min-height: 0 }

  /* Флеш-картки й колесо на маленькому екрані. */
  #cabView .fc { height: 165px }
  #cabView .wheel-wrap { width: min(240px, 72vw) }
  #cabView .dd-card { width: min(220px, 74vw) }
  #cabView .badges { gap: 8px }
  #cabView .bdg { width: calc(33.333% - 6px) }
}

/* Дуже вузькі екрани (iPhone SE, старі Android). */
@media (max-width: 400px) {
  #cabView .main { padding-left: 11px; padding-right: 11px }
  .tabbar .tab, .tabbar .m-more { font-size: 9.5px }
  #cabView .topbar h1 { font-size: 19.5px }
}

/* --------------------------------------------------------------------------
   5. Встановлений застосунок
   -------------------------------------------------------------------------- */
@media (display-mode: standalone) {
  /* У власному вікні кнопка «встановити» безглузда, а посилання на сайт
     виводить користувача із застосунку без шляху назад. */
  #installBtn { display: none !important }
  body { overscroll-behavior-y: none }
}

/* --------------------------------------------------------------------------
   6. Очікування уроку
   -------------------------------------------------------------------------- */
/* Урок приходить із бази (190-lessons.js). Поки він у дорозі, показуємо
   очікування, а не згенеровану заглушку: побачити чужий текст і за секунду
   інший — гірше, ніж побачити три крапки. */
.lesson-wait {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 10px; min-height: 220px; color: var(--muted);
}
.lesson-wait .lw-dot {
  width: 9px; height: 9px; border-radius: 50%; background: var(--violet);
  display: inline-block; margin: 0 3px;
  animation: lwPulse 1.1s ease-in-out infinite;
}
.lesson-wait .lw-dot:nth-child(2) { animation-delay: .15s }
.lesson-wait .lw-dot:nth-child(3) { animation-delay: .3s }
.lesson-wait .lw-t { font-weight: 700; font-size: 14px }
@keyframes lwPulse { 0%, 100% { opacity: .25; transform: scale(.85) } 50% { opacity: 1; transform: scale(1) } }
@media (prefers-reduced-motion: reduce) { .lesson-wait .lw-dot { animation: none; opacity: .6 } }
