/* кабинеты ученика и преподавателя — на тех же токенах, что и учебник */
#cab,#tch{max-width:52rem;margin:0 auto;padding:1.4rem 1rem 5rem;position:relative;z-index:1}
.login{max-width:26rem;margin:3rem auto;background:var(--card);border:1px solid var(--line);
  border-radius:var(--r);padding:1.4rem 1.5rem;box-shadow:var(--shadow)}
.login h1{font-family:var(--serif);font-weight:600;font-size:1.6rem;margin:0 0 .3rem}
.login p{color:var(--muted);font-size:.9rem;margin:0 0 1rem}
.field{width:100%;border:1px solid var(--line);border-radius:12px;background:var(--card);color:var(--ink);
  font:inherit;font-size:1.05rem;padding:.65rem .8rem;letter-spacing:.08em;text-transform:uppercase}
.field.plain{letter-spacing:0;text-transform:none;font-size:.95rem}
.field:focus{outline:none;border-color:var(--u)}
.btn{border:0;background:var(--u);color:#fff;border-radius:12px;padding:.65rem 1.1rem;font:inherit;
  font-weight:600;cursor:pointer;transition:transform .1s ease-out}
.btn:active{transform:scale(.97)}
.btn.ghost{background:transparent;color:var(--u);border:1px solid var(--line)}
.btn.sm{padding:.4rem .75rem;font-size:.82rem}
.err{color:var(--warn);font-size:.86rem;margin-top:.5rem}

.hello{display:flex;align-items:baseline;gap:.8rem;flex-wrap:wrap;margin-bottom:1.2rem}
.hello h1{font-family:var(--serif);font-weight:600;font-size:clamp(1.7rem,4.5vw,2.3rem);margin:0;letter-spacing:-.02em}
.hello .who{color:var(--muted);font-size:.9rem}
.hello .out{margin-left:auto}

.grid2{display:grid;grid-template-columns:1fr 1fr;gap:1rem}
@media (max-width:760px){.grid2{grid-template-columns:1fr}}
.panel{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:1rem 1.1rem;
  box-shadow:var(--shadow);margin-bottom:1rem}
.panel h2{font-family:var(--serif);font-weight:600;font-size:1.15rem;margin:0 0 .6rem;letter-spacing:-.01em}
.panel h2 small{font-family:var(--sans);color:var(--muted);font-weight:400;font-size:.8rem;margin-left:.4rem}
.empty{color:var(--muted);font-size:.88rem}

.row{display:flex;gap:.7rem;align-items:flex-start;padding:.6rem 0;border-top:1px solid var(--line)}
.row:first-of-type{border-top:0}
.row .t{flex:1;min-width:0}
.row .t b{display:block;font-size:.95rem}
.row .t small{color:var(--muted);font-size:.8rem}
.when{flex:none;width:6.4rem;text-align:left}
.when b{display:block;font-size:.85rem}
.when small{color:var(--muted);font-size:.75rem}
.st{flex:none;font-size:.7rem;font-weight:700;border-radius:999px;padding:.2rem .55rem;white-space:nowrap}
.st.assigned{background:var(--u-soft);color:var(--u)}
.st.submitted{background:#eef2ff;color:#3b4fd8}
.st.checked{background:var(--ok-soft);color:var(--ok)}
.st.redo{background:#fde8e4;color:#c0512c}
.st.planned{background:var(--u-soft);color:var(--u)}
.st.done{background:var(--ok-soft);color:var(--ok)}
.st.cancelled{background:#eee;color:#777}

.lrow{display:flex;align-items:center;gap:.7rem;padding:.5rem 0;border-top:1px solid var(--line);text-decoration:none;color:inherit}
.lrow:first-of-type{border-top:0}
.lrow .id{width:2.2rem;font-size:.75rem;font-weight:700;color:var(--muted)}
.lrow .nm{flex:1;font-size:.93rem}
.lrow .bar{width:6rem;height:5px;border-radius:3px;background:var(--line);overflow:hidden}
.lrow .bar i{display:block;height:100%;background:var(--ok)}
.lrow .pct{width:2.6rem;text-align:right;font-size:.75rem;color:var(--muted);font-variant-numeric:tabular-nums}
.lrow .cov{font-size:.7rem;color:var(--ok);font-weight:700}

.comment{background:var(--ok-soft);border-radius:10px;padding:.5rem .7rem;font-size:.86rem;margin-top:.4rem}
.grade{font-weight:700;color:var(--ok)}
.chips{display:flex;flex-wrap:wrap;gap:.35rem}
.chip{border:1px solid var(--line);border-radius:999px;padding:.2rem .6rem;font-size:.78rem;background:var(--card)}

/* Telegram */
.tgwrap{display:flex;justify-content:center;margin:.4rem 0 .6rem;min-height:40px}
.or{text-align:center;color:var(--muted);font-size:.8rem;margin:.2rem 0 .8rem}
.tgbar{margin:-.4rem 0 1rem;padding:.6rem .9rem;border-radius:12px;background:var(--card);border:1px solid var(--line);font-size:.9rem;color:var(--muted)}
.tgbar b{color:var(--ink)} .tgbar code{background:rgba(0,0,0,.06);padding:.1em .35em;border-radius:5px}
.tgpanel .row .t small{white-space:normal}
