:root{
  color-scheme:light;
  --bg:#F3F4F8; --surface:#FFFFFF; --sunk:#EBEDF3; --ink:#1B1E2B; --muted:#5D6275; --line:#DADDE8;
  --accent:#5B3FA8; --accent-soft:#ECE7F8; --on-accent:#FFFFFF;
  --d0:#B42318; --d0s:#FDE4E1; --d1:#C4320A; --d1s:#FEE8DC; --d2:#B54708; --d2s:#FEF0D7; --d3:#93600A; --d3s:#FDF3D2; --d4:#7A6A0C; --d4s:#F8F5D0; --d5:#5E6A12; --d5s:#F1F5D6;
  --k-posi:#BF131B; --k-posi-t:#BF131B; --k-pol:#2E9E6A; --k-pol-t:#1F7A50; --k-pe:#FF8A00; --k-pe-t:#B85F00; --k-ssi:#8CC63F; --k-ssi-t:#4E7A12; --k-mmsi:#E8579B; --k-mmsi-t:#BE2F72; --k-es:#F5C518; --k-es-t:#8F6B00;
  --k-en:#2F6FEB; --k-en-t:#2356C4; --k-ads:#38BDF8; --k-ads-t:#0A76A6; --k-mkt:#8B5CF6; --k-mkt-t:#6A3BD8;
  --c1:#2E6FD8; --c2:#D2572B; --c3:#1F8A6A; --c4:#A83F8C; --c5:#7A5AC8; --c6:#8A6D1E; --c7:#3C7D8C;
  --display:"Unbounded","Golos Text",system-ui,sans-serif;
  --body:"Golos Text",system-ui,-apple-system,"Segoe UI",sans-serif;
  --mono:"JetBrains Mono",ui-monospace,Consolas,monospace;
}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){color-scheme:dark;
    --bg:#12131A; --surface:#1B1D27; --sunk:#232634; --ink:#E8E9F1; --muted:#A0A4B8; --line:#2E3242;
    --accent:#B39DFF; --accent-soft:#2A2442; --on-accent:#12131A;
    --d0:#FF8A80; --d0s:#3F1A18; --d1:#FF9466; --d1s:#3D2016; --d2:#FFB547; --d2s:#3A2A12; --d3:#F2C94C; --d3s:#342C10; --d4:#D9D35A; --d4s:#2E2C10; --d5:#B8D36A; --d5s:#272E12;
    --k-posi:#BF131B; --k-posi-t:#E5535A; --k-pol:#3CC286; --k-pol-t:#5ED9A0; --k-pe:#FF9A1F; --k-pe-t:#FFB65C; --k-ssi:#A6E05A; --k-ssi-t:#BDEB80; --k-mmsi:#FF7AB8; --k-mmsi-t:#FF9CCB; --k-es:#FFD43B; --k-es-t:#FFD95C;
    --k-en:#6EA8FE; --k-en-t:#8DBBFF; --k-ads:#7DD3FC; --k-ads-t:#9ADDFD; --k-mkt:#B197FC; --k-mkt-t:#C4B1FD;
    --c1:#7FA8FF; --c2:#FF9A6E; --c3:#5ED3A9; --c4:#F08BD2; --c5:#B79CFF; --c6:#E0C06A; --c7:#6CC7D9;}
}
:root[data-theme="dark"]{color-scheme:dark;
  --k-posi:#BF131B; --k-posi-t:#E5535A; --k-pol:#3CC286; --k-pol-t:#5ED9A0; --k-pe:#FF9A1F; --k-pe-t:#FFB65C; --k-ssi:#A6E05A; --k-ssi-t:#BDEB80; --k-mmsi:#FF7AB8; --k-mmsi-t:#FF9CCB; --k-es:#FFD43B; --k-es-t:#FFD95C;
  --k-en:#6EA8FE; --k-en-t:#8DBBFF; --k-ads:#7DD3FC; --k-ads-t:#9ADDFD; --k-mkt:#B197FC; --k-mkt-t:#C4B1FD;
  --bg:#12131A; --surface:#1B1D27; --sunk:#232634; --ink:#E8E9F1; --muted:#A0A4B8; --line:#2E3242;
  --accent:#B39DFF; --accent-soft:#2A2442; --on-accent:#12131A;
  --d0:#FF8A80; --d0s:#3F1A18; --d1:#FF9466; --d1s:#3D2016; --d2:#FFB547; --d2s:#3A2A12; --d3:#F2C94C; --d3s:#342C10; --d4:#D9D35A; --d4s:#2E2C10; --d5:#B8D36A; --d5s:#272E12;
  --c1:#7FA8FF; --c2:#FF9A6E; --c3:#5ED3A9; --c4:#F08BD2; --c5:#B79CFF; --c6:#E0C06A; --c7:#6CC7D9;}
*{box-sizing:border-box}
[hidden]{display:none!important}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--body);font-size:16px;line-height:1.5;
  padding:calc(24px + env(safe-area-inset-top)) max(16px,env(safe-area-inset-right)) calc(56px + env(safe-area-inset-bottom)) max(16px,env(safe-area-inset-left))}
.wrap{max-width:720px;margin:0 auto;display:flex;flex-direction:column;gap:20px}
#app{display:flex;flex-direction:column;gap:20px}
.top{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
h1{margin:0;font-family:var(--display);font-weight:600;font-size:clamp(24px,6vw,32px);letter-spacing:-.01em;color:var(--accent)}
.sub{margin:4px 0 0;color:var(--muted);font-size:14px}
.icon-btn{flex:none;width:40px;height:40px;border-radius:12px;border:1px solid var(--line);background:var(--surface);color:var(--ink);font-size:18px;cursor:pointer}
a{color:var(--accent);font-weight:500;overflow-wrap:anywhere}
button.link{border:0;background:none;padding:0;color:var(--accent);font:inherit;font-weight:600;cursor:pointer}
button:focus-visible,input:focus-visible,a:focus-visible,summary:focus-visible{outline:2px solid var(--accent);outline-offset:2px}

/* Вход */
.login{background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:20px;display:flex;flex-direction:column;gap:12px}
.login h2{margin:0;font-family:var(--display);font-weight:500;font-size:20px}
.login form{display:flex;flex-direction:column;gap:10px}
.login label{font-size:14px;color:var(--muted)}
.login input{font:inherit;font-size:18px;padding:12px 14px;border-radius:12px;border:1px solid var(--line);background:var(--sunk);color:var(--ink);width:100%}
#code{font-family:var(--mono);letter-spacing:.2em}
.primary{font:inherit;font-weight:600;padding:12px 16px;border-radius:12px;border:0;background:var(--accent);color:var(--on-accent);cursor:pointer}
.primary:disabled{opacity:.6;cursor:default}
.msg{margin:0;font-size:14px;min-height:1.5em}
.msg.err{color:var(--d0)}
.hint{margin:0;font-size:13px;color:var(--muted)}

/* Календарь */
.cal{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:6px 8px;display:flex;flex-direction:column;gap:3px}
.cal-top{display:flex;align-items:center;gap:6px}
.cal-top .nav{width:24px;height:24px;border-radius:8px;font-size:13px}
.cal-top h2{flex:1;margin:0;font-family:var(--display);font-weight:500;font-size:13px;text-transform:capitalize;text-align:center}
.nav{width:28px;height:28px;border-radius:10px;border:1px solid var(--line);background:var(--surface);color:var(--ink);font:inherit;font-size:15px;cursor:pointer;flex:none}
.grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}
.cal .grid{max-width:340px;width:100%;margin:0 auto}
.wd{font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);text-align:center;padding-bottom:1px}
.day{position:relative;min-height:21px;border-radius:6px;border:1px solid transparent;background:var(--sunk);padding:0;display:flex;align-items:center;justify-content:center;font:inherit;color:var(--ink);cursor:pointer}
.day.out{opacity:.35}
.day.today{border-color:var(--accent)}
.day.today .n{color:var(--accent);font-weight:700}
.day.sel{background:var(--accent);color:var(--on-accent)}
.day.sel .n{color:var(--on-accent)}
.day .n{font-family:var(--mono);font-size:10px;font-variant-numeric:tabular-nums}
.day.due .n{color:#fff;font-weight:700;text-shadow:0 0 3px rgba(0,0,0,.55),0 0 1px rgba(0,0,0,.7)}
.day.due.done{opacity:.45}
.day.due.today{box-shadow:inset 0 0 0 2px var(--surface)}
.day.sel{outline:2px solid var(--accent);outline-offset:1px}
.dots{display:flex;flex-wrap:wrap;justify-content:center;gap:3px;max-width:100%}
.dot{width:6px;height:6px;border-radius:50%;background:var(--cc)}
.day.sel .dot{box-shadow:0 0 0 1.5px var(--on-accent)}

/* Пары */
.sched{background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:14px;display:flex;flex-direction:column;gap:10px}
.sched-top{display:flex;align-items:baseline;justify-content:space-between;gap:8px;flex-wrap:wrap}
.sched-top h2{margin:0;font-family:var(--display);font-weight:500;font-size:17px}
.grp{font-family:var(--mono);font-size:11px;color:var(--muted)}
.wk-nav{display:flex;align-items:center;gap:8px}
.wk-nav span{flex:1;text-align:center;font-size:14px;font-weight:600}
.tabs{display:grid;grid-template-columns:repeat(6,1fr);gap:4px}
.tab{display:flex;flex-direction:column;align-items:center;padding:5px 0 6px;position:relative;font:inherit;border-radius:9px;border:1px solid transparent;background:var(--sunk);color:var(--ink);cursor:pointer}
.tab .tw{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;opacity:.8}
.tab .tn{font-family:var(--mono);font-size:15px;font-variant-numeric:tabular-nums}
.tab.today{border-color:var(--accent)}
.tab.on{background:var(--accent);color:var(--on-accent)}
.tab.empty:not(.on){color:var(--muted);opacity:.6}
.tdot{position:absolute;top:4px;right:6px;width:6px;height:6px;border-radius:50%;background:var(--d1)}
.tab.on .tdot{background:var(--on-accent)}
.pairs{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.pair{display:flex;gap:12px;padding:10px 12px;border-radius:12px;background:var(--sunk);border-left:4px solid var(--cc)}
.ptime{flex:none;width:44px;display:flex;flex-direction:column;font-family:var(--mono);font-size:12px;font-variant-numeric:tabular-nums;color:var(--muted)}
.ptime b{color:var(--ink);font-weight:500;font-size:13px}
.pbody{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.pname{font-weight:600;font-size:15px;overflow-wrap:anywhere}
.pmeta{font-size:12px;color:var(--muted);overflow-wrap:anywhere}
.phw{align-self:flex-start;margin-top:4px;font-size:11px;font-weight:700;color:var(--cct,var(--cc));background:var(--surface);padding:1px 8px;border-radius:999px}
.nopair{padding:14px;border-radius:12px;background:var(--sunk);color:var(--muted);font-size:14px;text-align:center}
.pdue{padding:8px 12px;border-radius:10px;background:var(--d1s);color:var(--d1);font-size:13px;font-weight:600}

/* Задания */
.filter{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:14px;color:var(--muted)}
.filter button{border:0;background:none;color:var(--accent);font:inherit;font-weight:600;cursor:pointer;padding:0}
.sec{display:flex;flex-direction:column;gap:12px}
.subj{background:var(--surface);border:1px solid var(--line);border-top:5px solid var(--cc);border-radius:16px;padding:14px 14px 6px;display:flex;flex-direction:column;gap:6px}
.subj-h{display:flex;align-items:baseline;justify-content:space-between;gap:4px 10px;flex-wrap:wrap}
.subj-h .dueline{flex-basis:100%}
.subj-h h2{margin:0;font-family:var(--display);font-weight:500;font-size:18px;color:var(--cct,var(--cc))}
.cnt{font-size:13px;font-weight:600;color:var(--muted);font-variant-numeric:tabular-nums}
.subj.all .cnt{color:var(--c3)}
.dgroup{display:flex;flex-direction:column;padding-top:8px;border-top:1px dashed var(--line)}
.subj-h + .dgroup{border-top:0;padding-top:2px}
.dgroup>.dueline{padding-bottom:2px}
.dueline{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.dd{font-size:13px;font-weight:600;color:var(--muted)}
.badge{font-size:12px;font-weight:700;padding:2px 9px;border-radius:999px;white-space:nowrap}
.b0{color:var(--d0);background:var(--d0s)} .b1{color:var(--d1);background:var(--d1s)} .b2{color:var(--d2);background:var(--d2s)}
.b3{color:var(--d3);background:var(--d3s)} .b4{color:var(--d4);background:var(--d4s)} .b5{color:var(--d5);background:var(--d5s)}
.bn{color:var(--muted);background:var(--sunk)}
.rows{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.task{display:flex;gap:12px;align-items:flex-start;border-top:1px solid var(--line);padding:12px 0}
.task:first-child{border-top:0}
.cell{flex:none;position:relative;width:30px;height:30px;cursor:pointer}
.cell input{position:absolute;inset:0;opacity:0;margin:0;cursor:pointer}
.cell .box{display:grid;place-items:center;width:30px;height:30px;border:2px solid var(--line);border-radius:8px;background:var(--sunk);transition:background .15s,border-color .15s}
.cell input:checked+.box{background:var(--cc);border-color:var(--cc)}
.cell input:checked+.box::after{content:"";width:8px;height:14px;border:solid #fff;filter:drop-shadow(0 0 1px rgba(0,0,0,.6));border-width:0 3px 3px 0;transform:translateY(-2px) rotate(45deg)}
.cell input:focus-visible+.box{outline:2px solid var(--accent);outline-offset:2px}
.body{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px}
.ttl{font-weight:600;cursor:pointer;overflow-wrap:anywhere}
.sum{margin:0;font-size:14px;color:var(--muted);white-space:pre-line;overflow-wrap:anywhere}
.tg{align-self:flex-start;font-size:13px;font-weight:600;color:var(--d2);background:var(--d2s);padding:3px 8px;border-radius:8px}
details.pages summary{cursor:pointer;color:var(--accent);font-weight:600;font-size:14px}
details.pages figure{margin:10px 0 0;display:flex;flex-direction:column;gap:4px}
details.pages img{width:100%;height:auto;border:1px solid var(--line);border-radius:8px;background:#fff}
details.pages figcaption{font-size:12px;color:var(--muted)}
.empty{margin:0;padding:18px;border-radius:14px;background:var(--surface);border:1px dashed var(--line);color:var(--muted);font-size:14px;text-align:center}
.past summary{cursor:pointer;color:var(--muted);font-size:14px}
.past .sec{margin-top:10px;opacity:.75}
footer{font-size:12px;color:var(--muted);text-align:center;display:flex;flex-direction:column;gap:6px}
footer p{margin:0}
.acct summary{cursor:pointer;display:inline}
.acct p{margin-top:6px}
@media (prefers-reduced-motion: reduce){.cell .box{transition:none}}

/* Учебники */
.books{background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:14px}
.books summary{cursor:pointer;font-family:var(--display);font-weight:500;font-size:15px}
.book-form{display:flex;gap:8px;margin-top:12px}
.book-form select,.book-form input{font:inherit;padding:8px 10px;border-radius:10px;border:1px solid var(--line);background:var(--sunk);color:var(--ink);min-width:0}
.book-form select{flex:1}
.book-form input{width:76px;font-family:var(--mono)}
.book-form .primary{padding:8px 14px}
.book-nav{display:flex;justify-content:space-between;margin-top:8px}
#bookOut figure{margin:8px 0 0;display:flex;flex-direction:column;gap:4px}
#bookOut img{width:100%;height:auto;border:1px solid var(--line);border-radius:8px;background:#fff}
#bookOut figcaption{font-size:12px;color:var(--muted)}

/* Материалы из Telegram */
.mat{display:flex;flex-direction:column;gap:6px;padding:10px 0;border-top:1px solid var(--line)}
.mat:first-of-type{border-top:0}
#matsOut{margin-top:8px}
.mat-h{font-size:12px;font-weight:600;color:var(--muted);overflow-wrap:anywhere}
.mat audio{width:100%}
.mat img{width:100%;height:auto;border-radius:8px;border:1px solid var(--line)}
.mats-q{width:100%;margin-top:12px;font:inherit;padding:8px 10px;border-radius:10px;border:1px solid var(--line);background:var(--sunk);color:var(--ink)}
details.lecture{border-top:1px solid var(--line);padding:10px 0}
details.lecture>summary{cursor:pointer;font-weight:600}
details.ocr summary{cursor:pointer;color:var(--accent);font-size:13px;font-weight:600}
details.ocr .sum{white-space:pre-line;margin-top:6px}

/* Плитки разделов */
.tools{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.tool{position:relative;display:flex;flex-direction:row;align-items:center;gap:8px;min-height:44px;padding:8px 10px;border-radius:12px;border:1px solid var(--line);border-left:4px solid var(--tc);background:var(--surface);color:var(--ink);font:inherit;text-align:left;cursor:pointer}
.tool .ti{font-size:16px;line-height:1}
.tool .tl{font-size:13px;font-weight:600;line-height:1.2;padding-right:18px}
.tool .tn{position:absolute;top:50%;transform:translateY(-50%);right:10px;font-family:var(--mono);font-size:11px;color:var(--muted)}
.tool.on{background:var(--tc);border-color:var(--tc);color:#fff;text-shadow:0 0 2px rgba(0,0,0,.45)}
.tool.on .tn{color:#fff}
.panel{background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:12px 14px;margin-top:-10px}
.panel h3{margin:0 0 6px;font-family:var(--display);font-weight:500;font-size:15px}
.vq{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:6px}
.vq input[type=search]{flex:1;min-width:140px;font:inherit;padding:7px 10px;border-radius:10px;border:1px solid var(--line);background:var(--sunk);color:var(--ink)}
.vq label{font-size:13px;color:var(--muted);display:flex;gap:6px;align-items:center}
.vset{margin-top:10px;font-size:13px;color:var(--muted)}
.vset b{color:var(--ink)}
.vlist{list-style:none;margin:4px 0 0;padding:0}
.vrow{display:grid;grid-template-columns:1fr 1fr;gap:2px 12px;padding:7px 0;border-top:1px solid var(--line);cursor:pointer}
.vrow:first-child{border-top:0}
.vw{font-weight:600;overflow-wrap:anywhere}
.vt{color:var(--muted);overflow-wrap:anywhere}
.vex{grid-column:1/-1;font-size:13px;color:var(--muted);font-style:italic}
.vrow.hid .vt,.vrow.hid .vex{filter:blur(6px);user-select:none}

/* Легенда предметов под календарём — во всю ширину, заметно */
.legend{display:grid;grid-template-columns:repeat(3,1fr);gap:3px 8px;margin-top:3px}
.legend span{display:flex;align-items:center;gap:5px;font-size:10px;font-weight:600;color:var(--ink);line-height:1.15;min-width:0;overflow-wrap:anywhere}
.legend .dot{flex:none;width:8px;height:8px;border-radius:50%;box-shadow:0 0 0 1.5px var(--surface),0 0 0 2.5px var(--cc)}
@media (min-width:560px){.legend{grid-template-columns:repeat(6,1fr)}}
.parts{display:flex;flex-wrap:wrap;gap:6px 14px}
.bhead{margin:12px 0 4px;font-family:var(--display);font-weight:600;font-size:17px;color:var(--ink);padding-left:10px;border-left:4px solid var(--cc)}
.bhead:first-child{margin-top:4px}
.bitem{display:flex;flex-direction:column;gap:4px;padding:6px 0 6px 14px;font-size:15px}

/* Выполненные задания: остаются на месте, но компактные и серые */
.task.done{padding:6px 0;opacity:.55;gap:10px}
.task.done .ttl{color:var(--muted);text-decoration:line-through;font-size:13px;font-weight:500}
.task.done .sum,.task.done .tg,.task.done details,.task.done .body>a{display:none}
.task.done .cell,.task.done .cell .box{width:22px;height:22px}
.task.done .cell input:checked+.box{background:var(--muted);border-color:var(--muted)}
.task.done .cell input:checked+.box::after{width:6px;height:10px;border-width:0 2px 2px 0}
@media (prefers-reduced-motion:no-preference){.task{transition:opacity .2s,padding .2s}}
/* Все задания карточки сделаны — карточка тоже тише */
.subj.all{opacity:.7;border-top-color:var(--line)}
.subj.all .subj-h h2{font-size:15px;color:var(--muted)}
.subj.all .dueline{display:none}

/* Юниты в словаре */
.vunit{margin:14px 0 2px;font-family:var(--display);font-weight:600;font-size:16px;color:var(--ink);padding-left:8px;border-left:4px solid var(--accent)}
.vunit:first-child{margin-top:2px}

/* Слова на сегодня */
.daily{background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:12px 14px;display:flex;flex-direction:column;gap:6px}
.daily-top{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}
.daily h2{margin:0;font-family:var(--display);font-weight:500;font-size:16px}
.dtabs{display:flex;gap:6px}
.dtab{font:inherit;font-size:12px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--line);background:var(--sunk);color:var(--ink);cursor:pointer}
.dtab.on{background:var(--tc);border-color:var(--tc);color:#fff;text-shadow:0 0 2px rgba(0,0,0,.45)}
.dage{font-size:12px;font-weight:700;color:var(--muted);margin-top:6px;text-transform:uppercase;letter-spacing:.04em}
.dlist{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}
.dword{display:grid;grid-template-columns:1fr 1fr;gap:2px 10px;padding:7px 10px;border-radius:10px;background:var(--accent-soft);cursor:pointer}
.dword .vw{font-weight:700}
.dword .vt{color:var(--muted)}
.dword.hid .vt,.dword.hid .vex{filter:blur(6px);user-select:none}
.dlist.age1 .dword{background:var(--sunk);opacity:.8;padding:5px 10px;font-size:14px}
.dlist.age1 .dword .vw{font-weight:600}
.dlist.age2 .dword{background:transparent;border:1px dashed var(--line);opacity:.55;padding:4px 10px;font-size:13px}
.dlist.age2 .dword .vw{font-weight:500}

/* Случайное «Помнишь?» */
.recall{position:fixed;left:50%;bottom:calc(16px + env(safe-area-inset-bottom));transform:translateX(-50%);z-index:50;display:flex;align-items:center;gap:10px;max-width:calc(100% - 32px);padding:10px 40px 10px 14px;border-radius:14px;background:var(--surface);border:1px solid var(--line);border-left:4px solid var(--accent);box-shadow:0 8px 24px rgba(0,0,0,.18);cursor:pointer}
.recall .rk{font-size:12px;color:var(--muted);font-weight:700;white-space:nowrap}
.recall b{font-size:16px}
.recall .rt{color:var(--muted)}
.recall.hid .rt{filter:blur(6px)}
.recall button{position:absolute;right:8px;top:50%;transform:translateY(-50%);border:0;background:none;font-size:20px;color:var(--muted);cursor:pointer}
.dword .vex,.dword .vtheme{grid-column:1/-1;font-size:13px;color:var(--muted)}
.dword .vex{font-style:italic}
.dword .vtheme{font-size:11px;text-transform:uppercase;letter-spacing:.04em}
.dword.hid .vt,.dword.hid .vex,.dword.hid .vtheme{display:none}
.dword.hid{grid-template-columns:1fr}
/* Слова по полочкам: раздел → тема → слова */
.vgrp{border:1px solid var(--line);border-radius:12px;margin-top:10px;padding:0 12px}
.vgrp>summary{padding:11px 0;cursor:pointer;display:flex;gap:8px;align-items:baseline;flex-wrap:wrap;font-family:var(--display);font-size:16px}
.vgrp[open]>summary{border-bottom:1px solid var(--line)}
.vtopic{border-top:1px solid var(--line)}
.vtopic:first-of-type{border-top:0}
.vtopic>summary{padding:9px 0 9px 4px;cursor:pointer;display:flex;justify-content:space-between;gap:10px;font-size:15px}
.vtopic[open]>summary{font-weight:600}
.vtopic .vlist{margin:0 0 8px;padding-left:4px}
.vcnt{color:var(--muted);font-size:12px;font-family:inherit;font-weight:400;white-space:nowrap}
.vgrp>summary .vcnt{margin-left:auto}
/* Повтори слова: две карточки */
.daily h2 .dnote{font-family:var(--body,inherit);font-size:12px;font-weight:600;color:var(--muted);margin-left:6px}
.dcards{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.dcard{position:relative;min-width:0;padding-right:20px !important;display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto;column-gap:8px;align-items:center;padding:12px 10px;border-radius:14px;border:1px solid color-mix(in srgb,var(--tc) 45%,var(--line));background:linear-gradient(135deg,color-mix(in srgb,var(--tc) 22%,var(--surface)),var(--surface) 75%);color:var(--ink);font:inherit;text-align:left;cursor:pointer;box-shadow:0 1px 0 rgba(0,0,0,.03);transition:transform .12s ease,box-shadow .12s ease}
.dcard:active{transform:scale(.98)}
.dcard .dflag{grid-row:1/3;font-size:22px;line-height:1}
.dcard .dname{font-weight:700;font-size:15px}
.dcard .dsub{font-size:12px;color:var(--muted);white-space:nowrap}
.dcard::after{content:"›";position:absolute;right:8px;top:50%;transform:translateY(-50%);font-size:20px;color:var(--muted);transition:transform .15s ease}
.dcard.on{border-color:var(--tc);box-shadow:0 0 0 2px color-mix(in srgb,var(--tc) 55%,transparent)}
.dcard.on::after{transform:translateY(-50%) rotate(90deg)}
#dailyBody{display:flex;flex-direction:column;gap:6px}
#dailyBody[hidden]{display:none}
.dlist.age3 .dword{background:transparent;border:1px solid color-mix(in srgb,var(--accent) 45%,var(--line));padding:5px 10px;font-size:14px}
.dlist.age3 .dword .vw{font-weight:600}
/* Повтори слова: компактные «плашки» в несколько рядов; нажатая раскрывается на всю ширину */
#dailyOut .dlist{flex-direction:row;flex-wrap:wrap;gap:5px}
#dailyOut .dword{display:inline-flex;flex-direction:column;flex:0 1 auto;max-width:100%;gap:2px;padding:5px 10px;border-radius:999px;font-size:14px}
#dailyOut .dword .vw{font-weight:600}
#dailyOut .dword:not(.hid){flex:1 1 100%;border-radius:12px;padding:7px 12px}
#dailyOut .dlist.age0 .dword{font-size:15px}
#dailyOut .dlist.age1 .dword,#dailyOut .dlist.age3 .dword{font-size:13px;padding:4px 10px}
#dailyOut .dlist.age1 .dword:not(.hid),#dailyOut .dlist.age3 .dword:not(.hid){padding:7px 12px}
/* Вся лексика: название учебника сверху, разделы компактнее */
.vbook{margin:6px 0 2px;font-family:var(--display);font-weight:600;font-size:15px;color:var(--ink)}
.vgrp{margin-top:6px;padding:0 10px;border-radius:10px}
.vgrp>summary{padding:7px 0;font-family:inherit;font-size:13px}
.vgrp>summary b{font-weight:600}
.vtopic>summary{padding:6px 0 6px 4px;font-size:13px}
.vcnt{font-size:11px}
.vgrp>summary{flex-wrap:nowrap;align-items:center;gap:10px}
.vgrp>summary b{flex:1;min-width:0;line-height:1.25}
.vgrp>summary .vcnt{margin-left:0}
/* Открытое слово: перевод и пример крупно и ярко, чтобы запоминались */
#dailyOut .dword:not(.hid) .vt{color:var(--accent);font-weight:700;font-size:17px;line-height:1.3}
#dailyOut .dword:not(.hid) .vex{color:var(--ink);font-size:15px;line-height:1.4;font-style:italic;opacity:.9}
#dailyOut .dword:not(.hid){background:var(--surface);box-shadow:0 0 0 2px var(--accent) inset}
.vrow:not(.hid) .vt{color:var(--accent);font-weight:600}
.vrow:not(.hid) .vex{color:var(--ink);font-size:14px;opacity:.85}
/* Разделы тем же шрифтом, что и юниты внутри */
.vgrp>summary{padding:6px 0 6px 4px;font-size:13px;color:var(--ink)}
.vgrp>summary b{font-weight:400}
.vgrp>summary .vcnt{font-size:11px}
.vgrp{margin-top:4px}
/* Открытое слово: главное — само слово; перевод цветной, но спокойнее; пример читаемый */
#dailyOut .dword:not(.hid) .vw{font-size:18px;font-weight:700;color:var(--ink)}
#dailyOut .dword:not(.hid) .vt{font-size:14px;font-weight:500;color:var(--accent)}
#dailyOut .dword:not(.hid) .vex{font-size:14px;color:var(--ink);opacity:.8;font-style:italic}
#dailyOut .dword:not(.hid) .vt{font-size:15px;font-weight:600}
/* Перевод во всплывающей подсказке: плашки остаются на месте */
#dailyOut .dword,#dailyOut .dword:not(.hid){position:relative;flex:0 1 auto;border-radius:999px;padding:5px 10px}
#dailyOut .dlist.age1 .dword:not(.hid),#dailyOut .dlist.age3 .dword:not(.hid){padding:4px 10px}
#dailyOut .dword:not(.hid) .vw{font-size:inherit}
#dailyOut .dword.hid .dpop{display:none}
#dailyOut .dpop{position:absolute;z-index:20;top:calc(100% + 6px);left:0;width:max-content;max-width:min(280px,80vw);display:flex;flex-direction:column;gap:3px;padding:8px 12px;border-radius:12px;background:var(--surface);color:var(--ink);box-shadow:0 6px 20px rgba(0,0,0,.18),0 0 0 2px var(--accent);cursor:default;font-weight:400;opacity:1}
#dailyOut .dword.pright .dpop{left:auto;right:0}
#dailyOut .dpop::before{content:"";position:absolute;top:-6px;left:16px;border:6px solid transparent;border-top:0;border-bottom-color:var(--accent)}
#dailyOut .dword.pright .dpop::before{left:auto;right:16px}
#dailyOut .dpop .vt{font-size:15px;font-weight:600;color:var(--accent);filter:none}
#dailyOut .dpop .vex{font-size:14px;color:var(--ink);opacity:.8;font-style:italic;filter:none}
#dailyOut .dlist{position:relative}
/* Расписание: даты недели компактнее, сам блок — лёгкая цветная обводка */
.tabs{gap:3px}
.tab{padding:3px 0 4px;border-radius:8px}
.tab .tw{font-size:10px}
.tab .tn{font-size:13px}
.tdot{top:3px;right:4px;width:5px;height:5px}
.sched{border:1.5px solid color-mix(in srgb,var(--accent) 35%,var(--line))}
/* Повтори слова — яркий заметный блок */
.daily{border:2px solid color-mix(in srgb,var(--accent) 70%,transparent);background:linear-gradient(135deg,color-mix(in srgb,var(--accent) 16%,var(--surface)) 0%,color-mix(in srgb,var(--k-es) 14%,var(--surface)) 55%,color-mix(in srgb,var(--k-en) 16%,var(--surface)) 100%);box-shadow:0 4px 14px color-mix(in srgb,var(--accent) 18%,transparent)}
.daily h2{color:var(--accent);font-weight:600}
.daily .dcard{background:var(--surface)}
/* Тёмная тема: «Повтори слова» — насыщенный фиолетово-синий блок со свечением */
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]) .daily{background:linear-gradient(135deg,#4a2f8f 0%,#34256e 45%,#1e3a78 100%);border-color:#a78bfa;box-shadow:0 0 0 1px rgba(167,139,250,.25),0 6px 22px rgba(124,92,255,.35)}
  :root:not([data-theme="light"]) .daily h2{color:#fff}
  :root:not([data-theme="light"]) .daily h2 .dnote{color:rgba(255,255,255,.75)}
  :root:not([data-theme="light"]) .daily .dcard{background:rgba(15,14,30,.55)}
  :root:not([data-theme="light"]) .daily .hint,:root:not([data-theme="light"]) .daily .dage{color:rgba(255,255,255,.75)}
}
:root[data-theme="dark"] .daily{background:linear-gradient(135deg,#4a2f8f 0%,#34256e 45%,#1e3a78 100%);border-color:#a78bfa;box-shadow:0 0 0 1px rgba(167,139,250,.25),0 6px 22px rgba(124,92,255,.35)}
:root[data-theme="dark"] .daily h2{color:#fff}
:root[data-theme="dark"] .daily h2 .dnote{color:rgba(255,255,255,.75)}
:root[data-theme="dark"] .daily .dcard{background:rgba(15,14,30,.55)}
:root[data-theme="dark"] .daily .hint,:root[data-theme="dark"] .daily .dage{color:rgba(255,255,255,.75)}
/* Перевод — всегда в одном месте: плашка внизу экрана */
.wordbar{position:fixed;z-index:50;left:12px;right:12px;bottom:calc(12px + env(safe-area-inset-bottom,0px));max-width:520px;margin:0 auto;display:grid;grid-template-columns:1fr auto;gap:2px 12px;padding:12px 14px;border-radius:16px;background:var(--surface);color:var(--ink);box-shadow:0 10px 30px rgba(0,0,0,.25),0 0 0 2px var(--accent);cursor:pointer;animation:wbin .15s ease-out}
.wordbar[hidden]{display:none}
.wordbar .vw{grid-column:1;font-size:18px;font-weight:700}
.wordbar .vt{grid-column:1;font-size:15px;font-weight:600;color:var(--accent)}
.wordbar .vex{grid-column:1;font-size:14px;font-style:italic;color:var(--ink);opacity:.8}
.wordbar .wbx{grid-column:2;grid-row:1;align-self:start;font-size:14px;color:var(--muted);padding:2px 4px}
@keyframes wbin{from{transform:translateY(12px);opacity:0}to{transform:none;opacity:1}}
/* Слова в открытом языке: яркие плашки, не сливаются с цветным фоном блока */
#dailyOut .dword{background:var(--surface);color:var(--ink);opacity:1;border:1.5px solid color-mix(in srgb,var(--tc) 70%,var(--line));box-shadow:0 1px 3px rgba(0,0,0,.08)}
#dailyOut .dlist.age0 .dword{border-width:2px;font-weight:700}
#dailyOut .dlist.age1 .dword{border-color:color-mix(in srgb,var(--tc) 40%,var(--line))}
#dailyOut .dlist.age3 .dword{border-style:dashed;border-color:color-mix(in srgb,var(--tc) 55%,var(--line))}
#dailyOut .dword:not(.hid){box-shadow:0 0 0 2px var(--accent),0 2px 6px rgba(0,0,0,.15)}
#dailyOut .dage{color:var(--ink);opacity:.75}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]) #dailyOut .dword{background:#15132a;color:#fff}}
:root[data-theme="dark"] #dailyOut .dword{background:#15132a;color:#fff}
/* Подсказка в «Повтори слова» — на светлой подложке, чтобы читалась */
#dailyBody .hint{background:color-mix(in srgb,var(--surface) 85%,transparent);color:var(--ink);opacity:1;padding:8px 10px;border-radius:10px;font-size:13px;line-height:1.4}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]) #dailyBody .hint{background:rgba(15,14,30,.6);color:#fff}}
:root[data-theme="dark"] #dailyBody .hint{background:rgba(15,14,30,.6);color:#fff}
#dailyOut .dage{opacity:1;color:var(--ink);font-weight:700}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]) #dailyOut .dage{color:#fff}}
:root[data-theme="dark"] #dailyOut .dage{color:#fff}

/* Вся лексика — внизу, после заданий */
.tools-bottom{margin-top:16px}
/* Слайды лекции: сетка миниатюр и просмотр на весь экран */
.slides{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-top:8px}
@media (min-width:560px){.slides{grid-template-columns:repeat(5,1fr)}}
.slide{position:relative;aspect-ratio:4/3;padding:0;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:var(--sunk);cursor:pointer}
.slide img{width:100%;height:100%;object-fit:cover;display:block}
.slide-n{position:absolute;left:4px;bottom:4px;font-size:11px;font-weight:700;color:#fff;background:rgba(0,0,0,.55);border-radius:6px;padding:1px 6px}
.slide-na{font-size:11px;color:var(--muted)}
.slideview{position:fixed;inset:0;z-index:60;background:rgba(10,10,20,.94);display:flex;flex-direction:column;align-items:center;gap:10px;padding:calc(10px + env(safe-area-inset-top,0px)) 10px 16px;overflow-y:auto}
.slideview[hidden]{display:none}
.sv-bar{display:flex;align-items:center;gap:8px;width:100%;max-width:900px}
.sv-t{flex:1;text-align:center;color:#fff;font-weight:600;font-size:14px}
.sv-btn{width:40px;height:40px;border-radius:12px;border:1px solid rgba(255,255,255,.3);background:rgba(255,255,255,.1);color:#fff;font-size:20px;cursor:pointer}
.sv-img{max-width:100%;max-height:70vh;object-fit:contain;border-radius:8px}
.sv-ocr{width:100%;max-width:900px;background:var(--surface);color:var(--ink);border-radius:10px;padding:8px 12px}
body.noscroll{overflow:hidden}
/* Конспект лекции */
.kbody{margin-top:8px;font-size:14px;line-height:1.5;color:var(--ink)}
.kbody h3{font-size:17px;margin:12px 0 6px}
.kbody h4{font-size:15px;margin:14px 0 6px;color:var(--accent)}
.kbody h5{font-size:14px;margin:12px 0 4px}
.kbody p{margin:6px 0}
.kbody ul,.kbody ol{margin:4px 0 8px;padding-left:20px}
.kbody li{margin:2px 0}
.kbody .kq{font-size:12px;color:var(--muted);border-left:3px solid var(--line);padding-left:8px}
.kbody .kt{overflow-x:auto;margin:8px 0}
.kbody table{border-collapse:collapse;font-size:12px;min-width:560px}
.kbody th,.kbody td{border:1px solid var(--line);padding:4px 6px;vertical-align:top;text-align:left}
.kbody th{background:var(--sunk)}
/* Слайды лекции — горизонтальная лента, листается пальцем */
.slides{display:flex;gap:8px;overflow-x:auto;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;padding-bottom:6px;overscroll-behavior-x:contain}
.slides .slide{flex:0 0 78%;scroll-snap-align:start;aspect-ratio:3/4}
@media (min-width:560px){.slides .slide{flex-basis:40%}}
.slides .slide img{object-fit:cover}
.slides .slide-n{font-size:12px}
/* Слайд + его текст рядом (в ленте) */
.slides .slidecard{flex:0 0 82%;scroll-snap-align:start;display:flex;flex-direction:column;gap:6px;min-width:0}
@media (min-width:560px){.slides .slidecard{flex-basis:42%}}
.slides .slidecard .slide{flex:none;width:100%;aspect-ratio:4/3}
.slide-t{white-space:pre-line;font-size:13px;line-height:1.45;color:var(--ink);background:var(--sunk);border-radius:8px;padding:8px 10px;max-height:260px;overflow-y:auto}
.slide-t.raw{color:var(--muted);font-size:12px}
.sv-text{white-space:pre-line;width:100%;max-width:900px;background:var(--surface);color:var(--ink);border-radius:10px;padding:10px 12px;font-size:15px;line-height:1.5}
/* Текст лекции — главный, слайд — маленький под ним */
.slides .slidecard{flex-basis:88%}
.slides .slidecard .slide{aspect-ratio:auto;height:92px;width:124px;align-self:flex-start;opacity:.9}
.slides .slidecard .slide-n{font-size:10px}
.slide-t{order:0;max-height:62vh;font-size:15px;line-height:1.55;background:var(--surface);border:1.5px solid color-mix(in srgb,var(--accent) 45%,var(--line));border-left:5px solid var(--accent);border-radius:12px;padding:12px 14px;box-shadow:0 2px 8px color-mix(in srgb,var(--accent) 12%,transparent)}
.slide-th{font-weight:700;color:var(--accent);margin-bottom:6px;font-size:15px}
.slide-t.raw{font-size:13px}
.tsum{white-space:pre-line}
/* Важные отметки в календаре */
.day.ev{box-shadow:inset 0 0 0 2.5px #E5484D;font-weight:700}
.day .evstar{position:absolute;top:-4px;right:-3px;font-size:11px;color:#E5484D;line-height:1}
#calEvents{display:flex;flex-direction:column;gap:3px}
.calev{font-size:13px;padding:6px 10px;border-radius:10px;background:color-mix(in srgb,#E5484D 14%,var(--surface));border:1.5px solid #E5484D;color:var(--ink)}
.calev b{color:#E5484D}


/* Книга-ссылка в задании (Un día en Barcelona) */
.bref{margin:6px 0;display:flex;flex-direction:column;gap:2px}
.bref a{font-weight:600}
.bref-t{font-size:.9em;opacity:.85}

/* Закреплённое наверху: квизлеты по испанскому */
.pinned{position:relative;overflow:hidden;margin:0 0 16px;padding:18px 16px 14px;border-radius:22px;color:#fff;
  background:linear-gradient(135deg,#FF2E7E 0%,#FF6A3D 45%,#FFC23A 100%);box-shadow:0 10px 28px rgba(255,60,120,.35)}
.pinned::before,.pinned::after{content:"";position:absolute;border-radius:50%;background:rgba(255,255,255,.18);pointer-events:none}
.pinned::before{width:160px;height:160px;right:-50px;top:-60px}
.pinned::after{width:90px;height:90px;left:-30px;bottom:-40px}
.pin-tag{position:relative;display:inline-block;font-size:12px;font-weight:700;letter-spacing:.02em;background:rgba(255,255,255,.25);padding:3px 10px;border-radius:999px}
.pin-cap{position:relative;margin:10px 0 12px;font-family:Unbounded,system-ui,sans-serif;font-size:20px;line-height:1.25;font-weight:600;color:#fff;text-shadow:0 2px 10px rgba(150,0,60,.35)}
.pin-row{position:relative;display:grid;grid-template-columns:1fr 1fr;gap:10px}
.pin-card{display:flex;flex-direction:column;gap:4px;padding:12px;border-radius:16px;background:#fff;color:#2A1240;text-decoration:none;
  box-shadow:0 4px 14px rgba(120,0,50,.25);transition:transform .15s ease}
.pin-card:active{transform:scale(.97)}
.pin-ico{font-size:24px;line-height:1}
.pin-t{font-weight:700;font-size:15px}
.pin-go{margin-top:auto;font-size:13px;font-weight:700;color:#FF2E7E}
.pin-until{position:relative;margin:10px 0 0;font-size:12px;opacity:.9}
@media (max-width:360px){.pin-row{grid-template-columns:1fr}}

/* Полоска «Мой прогресс за неделю» — для мотивации, яркая, но спокойная */
.weekbar{margin:4px 0 14px;padding:10px 12px 9px;border-radius:14px;background:var(--surface);border:1px solid var(--line)}
.wb-top{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:6px}
.wb-l{font-size:14px;font-weight:700;color:var(--ink)}
.wb-n{font-size:16px;font-weight:800;color:var(--accent)}
.wb-track{height:10px;border-radius:999px;background:var(--accent-soft);overflow:hidden}
.wb-fill{height:100%;width:0;border-radius:999px;background:linear-gradient(90deg,#7C5CFF,#FF5FA2 60%,#FFB23E);transition:width .4s ease}
.wb-sub{margin-top:5px;font-size:12px;color:var(--muted)}
.weekbar.full .wb-n::after{content:" 🎉"}
