/* Melis ile Türkçe — umumiy uslub */
:root{
  --red:#e11d48; --red-d:#be123c; --red-soft:rgba(225,29,72,.10);
  --vio:#7c3aed; --pink:#db2777;
  --grad:linear-gradient(135deg,#7c3aed 0%,#c026d3 48%,#f43f5e 100%);
  --grad-soft:linear-gradient(135deg,rgba(124,58,237,.12),rgba(244,63,94,.10));
  --bg:#f3f1fa; --card:rgba(255,255,255,.74); --card-solid:#ffffff; --ink:#17132a; --muted:#6c6684; --line:rgba(40,30,80,.09); --soft:rgba(110,90,170,.08);
  --ok:#059669; --ok-soft:rgba(5,150,105,.12); --warn:#c2770b; --warn-soft:rgba(217,119,6,.13); --bad:#e11d48; --bad-soft:rgba(225,29,72,.11);
  --s2:#4f46e5; --s2-soft:rgba(79,70,229,.12);
  --side:#120f1c; --side-ink:#bdb6d6; --side-line:rgba(255,255,255,.07);
  --glass-b:rgba(255,255,255,.7); --blob1:rgba(124,58,237,.20); --blob2:rgba(244,63,94,.16); --blob3:rgba(56,189,248,.14);
  --r:20px; --shadow:0 1px 2px rgba(30,20,70,.04),0 10px 30px -12px rgba(60,40,140,.18);
  --glow:0 10px 24px -8px rgba(192,38,211,.55);
}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){
  --bg:#0c0a14; --card:rgba(28,24,44,.62); --card-solid:#1a1628; --ink:#f1eefb; --muted:#9d97b5; --line:rgba(255,255,255,.08); --soft:rgba(255,255,255,.06);
  --red-soft:rgba(244,63,94,.16); --ok:#34d399; --ok-soft:rgba(52,211,153,.14); --warn:#fbbf24; --warn-soft:rgba(251,191,36,.14); --bad:#fb7185; --bad-soft:rgba(251,113,133,.15);
  --s2:#a5b4fc; --s2-soft:rgba(129,140,248,.17);
  --side:#0a0811; --glass-b:rgba(255,255,255,.07); --blob1:rgba(124,58,237,.30); --blob2:rgba(244,63,94,.18); --blob3:rgba(56,189,248,.10);
  --shadow:0 10px 30px -12px rgba(0,0,0,.6); color-scheme:dark;
}}
:root[data-theme="dark"]{
  --bg:#0c0a14; --card:rgba(28,24,44,.62); --card-solid:#1a1628; --ink:#f1eefb; --muted:#9d97b5; --line:rgba(255,255,255,.08); --soft:rgba(255,255,255,.06);
  --red-soft:rgba(244,63,94,.16); --ok:#34d399; --ok-soft:rgba(52,211,153,.14); --warn:#fbbf24; --warn-soft:rgba(251,191,36,.14); --bad:#fb7185; --bad-soft:rgba(251,113,133,.15);
  --s2:#a5b4fc; --s2-soft:rgba(129,140,248,.17);
  --side:#0a0811; --glass-b:rgba(255,255,255,.07); --blob1:rgba(124,58,237,.30); --blob2:rgba(244,63,94,.18); --blob3:rgba(56,189,248,.10);
  --shadow:0 10px 30px -12px rgba(0,0,0,.6); color-scheme:dark;
}
*{box-sizing:border-box}
[hidden]{display:none!important}
html,body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.5 Manrope,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;-webkit-font-smoothing:antialiased}
a{color:inherit;text-decoration:none}
button,input,select,textarea{font:inherit;color:inherit}
h1{font-size:26px;line-height:1.2;margin:0;letter-spacing:-.02em;font-weight:800}
h2{font-size:17px;margin:0 0 12px;font-weight:700;display:flex;justify-content:space-between;align-items:center;gap:8px}
h2.sub{margin:24px 4px 10px}
h3{margin:0 0 4px;font-size:16px}
.muted{color:var(--muted)} .small{font-size:13px} .center{text-align:center} .red{color:var(--red)}
.ic{width:20px;height:20px;flex:none}

/* ---------- yon panel ---------- */
.side{position:fixed;inset:0 auto 0 0;width:248px;background:var(--card);border-right:1px solid var(--line);display:flex;flex-direction:column;padding:18px 14px;z-index:20}
.brand{display:flex;align-items:center;gap:10px;font-size:17px;padding:4px 8px 18px}
.brand b{font-weight:800}
.brand.big{font-size:20px;justify-content:center;padding:0 0 10px}
.logo{width:36px;height:36px;border-radius:11px;background:var(--red);color:#fff;display:grid;place-items:center;font-weight:800;font-size:18px;box-shadow:0 4px 12px rgba(200,16,46,.3)}
.side nav{display:flex;flex-direction:column;gap:2px;flex:1;overflow:auto}
.side nav a{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:11px;color:var(--muted);font-weight:600;position:relative}
.side nav a:hover{background:var(--soft);color:var(--ink)}
.side nav a.on{background:var(--red-soft);color:var(--red)}
.badge{margin-left:auto;background:var(--red);color:#fff;font-style:normal;font-size:11px;font-weight:700;border-radius:999px;min-width:20px;height:20px;display:grid;place-items:center;padding:0 6px}
.me{display:flex;align-items:center;gap:10px;padding:12px 8px 0;border-top:1px solid var(--line)}
.me .who{flex:1;min-width:0}.me .who b{display:block;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.me .who small{color:var(--muted);font-size:12px}
.me>a:last-child{color:var(--muted);padding:6px;border-radius:8px}.me>a:last-child:hover{background:var(--soft);color:var(--red)}
main{padding:28px 32px 60px;max-width:1180px}
main.with-side{margin-left:248px}

/* ---------- umumiy bloklar ---------- */
.ph{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;margin-bottom:20px;flex-wrap:wrap}
.ph p{margin:6px 0 0}
.crumb{display:inline-block;color:var(--muted);font-weight:600;font-size:14px;margin-bottom:6px}
.crumb:hover{color:var(--red)}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:20px;box-shadow:var(--shadow);margin-bottom:16px}
.card.flush{padding:6px}
.card.narrow{max-width:460px}
.card.notice{border-color:var(--red);background:var(--red-soft)}
.card.notice pre{background:var(--card);padding:12px 14px;border-radius:10px;white-space:pre-wrap;font:600 14px/1.6 Manrope,monospace;margin:10px 0}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start}
.grid2>div>.card:last-child{margin-bottom:16px}
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px}
.gcard h3{font-size:18px}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.more{font-size:13px;font-weight:600;color:var(--red)}
.empty{color:var(--muted);text-align:center;padding:28px 16px;margin:0}
.flash{padding:12px 16px;border-radius:12px;margin-bottom:16px;font-weight:600;background:var(--ok-soft);color:var(--ok)}
.flash.bad{background:var(--bad-soft);color:var(--bad)}

.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:16px}
.stat{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:16px 18px;box-shadow:var(--shadow)}
.stat b{display:block;font-size:30px;font-weight:800;letter-spacing:-.03em;line-height:1.1}
.stat b small{font-size:16px;color:var(--muted);font-weight:600}
.stat span{color:var(--muted);font-size:13px;font-weight:600}

.live{display:flex;align-items:center;gap:10px;background:var(--red);color:#fff;padding:12px 16px;border-radius:12px;margin-bottom:12px;font-weight:700}
.dot{width:10px;height:10px;border-radius:50%;background:#fff;animation:pulse 1.4s infinite;flex:none}
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(255,255,255,.7)}100%{box-shadow:0 0 0 10px rgba(255,255,255,0)}}

/* ro'yxat */
.list{display:flex;flex-direction:column}
.item{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:12px}
.item+.item{border-top:1px solid var(--line);border-top-left-radius:0;border-top-right-radius:0}
.list>.item:not(:last-child){border-bottom-left-radius:0;border-bottom-right-radius:0}
a.item:hover,.item.on{background:var(--soft)}
.item>div:not(.ava):not(.fic):not(.date),.item .grow{flex:1;min-width:0}
.item b{display:block;font-weight:700;overflow:hidden;text-overflow:ellipsis}
.item small{display:block;color:var(--muted);font-size:13px;overflow:hidden;text-overflow:ellipsis}
.item.col{flex-direction:column;align-items:stretch;gap:8px}
.item .row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.item audio{margin-top:6px;width:100%;max-width:420px;height:36px}
.chev{color:var(--muted);font-size:22px}
.ava{width:40px;height:40px;border-radius:50%;background:var(--red-soft);color:var(--red);display:grid;place-items:center;font-weight:800;flex:none}
.ava.sm{width:30px;height:30px;font-size:13px}
.ava.lg{width:64px;height:64px;font-size:24px}
.ava.teacher{background:var(--red);color:#fff}
.fic{width:40px;height:40px;border-radius:12px;background:var(--soft);display:grid;place-items:center;color:var(--red);flex:none}
.date{width:44px;text-align:center;flex:none}.date b{font-size:20px}.date small{font-size:11px}

.pill{display:inline-block;font-style:normal;font-size:11.5px;font-weight:700;padding:2px 8px;border-radius:999px;background:var(--soft);color:var(--muted);vertical-align:2px}
.pill.red{background:var(--red-soft);color:var(--red)}
.pill.st-present{background:var(--ok-soft);color:var(--ok)}
.pill.st-late{background:var(--warn-soft);color:var(--warn)}
.pill.st-absent{background:var(--bad-soft);color:var(--bad)}
.score{display:inline-grid;place-items:center;min-width:38px;height:30px;padding:0 6px;border-radius:9px;font-weight:800;font-size:14px}
.score.s3{background:var(--ok-soft);color:var(--ok)}
.score.s2{background:var(--s2-soft);color:var(--s2)}
.score.s1{background:var(--warn-soft);color:var(--warn)}
.score.s0{background:var(--bad-soft);color:var(--bad)}
.score.empty-score{color:var(--muted)}
.nb{font-style:normal;font-weight:800;color:var(--bad);font-size:13px}
.dot-ok{font-style:normal;color:var(--ok);font-weight:800}

/* tugmalar */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;background:var(--red);color:#fff;border:0;border-radius:12px;padding:11px 18px;font-weight:700;cursor:pointer;white-space:nowrap;transition:background .15s,transform .1s}
.btn:hover{background:var(--red-d)}
.btn:active{transform:scale(.98)}
.btn:disabled{opacity:.5;cursor:default}
.btn.ghost{background:var(--soft);color:var(--ink)}
.btn.ghost:hover{background:var(--line)}
.btn.danger{background:var(--bad-soft);color:var(--bad)}
.btn.sm{padding:7px 12px;font-size:13.5px;border-radius:10px}
.btn.wide{width:100%;margin-top:8px}
.btn.round{width:44px;height:44px;padding:0;border-radius:50%;flex:none}
.icon-btn{background:none;border:0;width:38px;height:38px;border-radius:10px;display:grid;place-items:center;color:var(--muted);cursor:pointer;flex:none}
.icon-btn:hover{background:var(--soft);color:var(--ink)}
.icon-btn.danger:hover{color:var(--bad)}
.link{background:none;border:0;padding:0;cursor:pointer;font-weight:600;text-decoration:underline}
.link.danger{color:var(--bad)}
.inline-danger{margin:-4px 4px 20px}
.actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:16px}
.sticky-actions{position:sticky;bottom:0;background:var(--card);padding:12px 0 2px;margin-top:8px;border-top:1px solid var(--line)}
.danger-zone{border-color:var(--bad-soft)}

/* formalar */
label{display:block;font-weight:600;font-size:13.5px;margin-bottom:12px}
input:not([type=checkbox]):not([type=radio]):not([type=file]),select,textarea{display:block;width:100%;margin-top:6px;padding:11px 13px;border:1.5px solid var(--line);border-radius:11px;background:var(--card);font-weight:500;outline:none;transition:border .15s}
input:focus,select:focus,textarea:focus{border-color:var(--red)}
input[type=file]{display:block;margin-top:6px;font-size:13.5px}
textarea{resize:vertical}
fieldset{border:1.5px solid var(--line);border-radius:12px;padding:10px 14px 4px;margin:0 0 12px}
legend{font-weight:700;font-size:13.5px;padding:0 6px}
.checks{display:flex;flex-wrap:wrap;gap:4px 14px;padding:4px 0 8px}
.checks.cols{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));max-height:280px;overflow:auto}
.chk{display:flex;align-items:center;gap:8px;font-weight:500;margin:0;padding:5px 0;cursor:pointer}
.chk input{width:18px;height:18px;accent-color:var(--red);flex:none}
input.filter{margin:4px 0 6px}
.search{margin-bottom:12px}
.search input{margin:0}
.quick{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:2px 0 10px}

/* modal */
dialog.modal{border:0;border-radius:20px;padding:24px;width:min(520px,calc(100vw - 24px));background:var(--card);color:var(--ink);box-shadow:0 20px 60px rgba(0,0,0,.25)}
dialog.modal::backdrop{background:rgba(20,18,16,.45);backdrop-filter:blur(2px)}

/* tablar */
.tabs{display:flex;gap:6px;overflow-x:auto;margin-bottom:14px;padding-bottom:2px}
.tabs a{padding:8px 14px;border-radius:999px;background:var(--card);border:1px solid var(--line);font-weight:600;white-space:nowrap;color:var(--muted)}
.tabs a.on{background:var(--ink);color:var(--card);border-color:var(--ink)}

/* jadval */
.table-wrap{overflow-x:auto}
table{width:100%;border-collapse:collapse;font-size:14px}
th,td{padding:11px 12px;text-align:left;border-bottom:1px solid var(--line);white-space:nowrap}
th{font-size:12.5px;color:var(--muted);font-weight:700;text-transform:uppercase;letter-spacing:.03em}
tr:last-child td{border-bottom:0}
.num{text-align:right}
.journal th.lcol a{color:var(--red);font-weight:800}
.journal td.cell{text-align:center;padding:6px}
.journal td.cell a{display:block;min-width:42px;padding:2px}
.journal td.cell sup{color:var(--warn);font-weight:800}
.journal .sticky{position:sticky;left:0;background:var(--card);z-index:1;font-weight:700;max-width:200px;overflow:hidden;text-overflow:ellipsis}
.legend{color:var(--muted);font-size:13px;padding:8px 14px 10px;margin:0;display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.legend .score{min-width:30px;height:24px;font-size:12px}
.addlesson{display:flex;gap:12px;align-items:flex-end;flex-wrap:wrap;padding:16px 20px}
.addlesson label{margin:0}.addlesson .grow{flex:1;min-width:200px}
table.rating .place{font-size:20px;width:44px;text-align:center}
table.rating tr.me td{background:var(--red-soft)}
.bar{display:inline-block;width:80px;height:6px;border-radius:3px;background:var(--soft);margin-right:8px;vertical-align:middle;overflow:hidden}
.bar i{display:block;height:100%;background:var(--red);border-radius:3px}

/* dars baholash */
.marks{display:flex;flex-direction:column;gap:2px}
.mrow{display:grid;grid-template-columns:minmax(140px,1.3fr) auto 90px minmax(120px,1fr);gap:10px;align-items:center;padding:8px 0;border-bottom:1px solid var(--line)}
.mname{font-weight:700}
.seg{display:inline-flex;background:var(--soft);border-radius:11px;padding:3px}
.seg label{margin:0;cursor:pointer}
.seg input{position:absolute;opacity:0;pointer-events:none}
.seg span{display:block;padding:7px 11px;border-radius:9px;font-size:13px;font-weight:700;color:var(--muted)}
.seg .st-present input:checked+span{background:var(--ok);color:#fff}
.seg .st-late input:checked+span{background:var(--warn);color:#fff}
.seg .st-absent input:checked+span{background:var(--bad);color:#fff}
.mrow input.score-in,.mrow input.cm-in{margin:0}
.score-in{text-align:center;font-weight:800}

/* xabarlar */
.msgs{display:grid;grid-template-columns:320px 1fr;gap:16px;align-items:start}
.msgs .threads{max-height:calc(100vh - 180px);overflow:auto}
.thread{display:flex;flex-direction:column;height:calc(100vh - 180px);min-height:420px;padding:0;overflow:hidden}
.thread.solo{max-width:760px}
.thread-head{padding:14px 18px;border-bottom:1px solid var(--line);display:flex;gap:10px;align-items:baseline}
.bubbles{flex:1;overflow:auto;padding:16px;display:flex;flex-direction:column;gap:8px;background:var(--bg)}
.bubble{max-width:78%;padding:10px 14px;border-radius:16px;background:var(--card);border:1px solid var(--line);align-self:flex-start;white-space:normal;word-wrap:break-word}
.bubble.out{align-self:flex-end;background:var(--red);color:#fff;border-color:var(--red)}
.bubble time{display:block;font-size:11px;opacity:.65;margin-top:4px}
.composer{display:flex;gap:10px;padding:12px;border-top:1px solid var(--line);align-items:flex-end}
.composer textarea{margin:0;resize:none;border-radius:22px;padding:11px 16px;max-height:160px}
.only-mobile{display:none}

/* kirish sahifasi */
.auth{min-height:100vh;display:grid;place-items:center;padding:20px;background:
  radial-gradient(600px 300px at 15% 10%,rgba(200,16,46,.10),transparent 70%),
  radial-gradient(500px 300px at 90% 90%,rgba(200,16,46,.08),transparent 70%)}
.auth-card{width:100%;max-width:400px;padding:30px 28px}
.auth-card h1{text-align:center;font-size:22px;margin-top:6px}
.auth-card>p.muted{text-align:center;margin:6px 0 20px}

#toast{position:fixed;left:50%;bottom:28px;transform:translate(-50%,20px);background:var(--ink);color:var(--card);padding:12px 18px;border-radius:12px;font-weight:600;opacity:0;transition:.25s;z-index:100;max-width:calc(100vw - 32px);text-align:center;pointer-events:none}
#toast.on{opacity:1;transform:translate(-50%,0)}

/* ============ CHAT ============ */
body.chat-page{height:100dvh;overflow:hidden}
.chat{display:flex;flex-direction:column;height:100dvh;max-width:900px;margin:0 auto;background:var(--card);border-left:1px solid var(--line);border-right:1px solid var(--line)}
.chat-head{display:flex;align-items:center;gap:10px;padding:10px 14px;border-bottom:1px solid var(--line);padding-top:max(10px,env(safe-area-inset-top))}
.chat-head .back{font-size:30px;line-height:1;padding:0 8px 4px;color:var(--muted)}
.chat-head .grow{flex:1;min-width:0}
.chat-head b{display:block;font-size:16px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chat-head small{color:var(--muted);font-size:12.5px}
.voice-join{padding:9px 14px}
.voice-join.live{animation:glow 1.6s infinite}
.voice-join.on{background:var(--ok)}
@keyframes glow{0%{box-shadow:0 0 0 0 rgba(200,16,46,.5)}100%{box-shadow:0 0 0 10px rgba(200,16,46,0)}}
.rec-banner{display:flex;align-items:center;gap:8px;justify-content:center;background:var(--red);color:#fff;font-weight:700;font-size:13px;padding:6px}
.voice{background:linear-gradient(180deg,#221d1a,#171412);color:#fff;padding:16px 14px 12px}
.voice.preview .voice-ctl{display:none}
.voice.preview::before{content:"Jonli suhbatda:";display:block;font-size:12px;opacity:.6;margin:-4px 0 8px;font-weight:600}
.voice-peers{display:flex;gap:14px;overflow-x:auto;padding-bottom:6px}
.peer{display:flex;flex-direction:column;align-items:center;gap:4px;width:74px;flex:none;text-align:center}
.peer .ava{background:#3a3330;color:#fff;transition:box-shadow .15s}
.peer .ava.teacher{background:var(--red)}
.peer.talk .ava{box-shadow:0 0 0 3px #4ade80,0 0 18px rgba(74,222,128,.5)}
.peer.connecting .ava{opacity:.5}
.peer b{font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:74px}
.peer small{font-size:11px;opacity:.6;min-height:14px}
.voice-ctl{display:flex;justify-content:center;gap:12px;margin-top:10px}
.vbtn{display:flex;flex-direction:column;align-items:center;gap:4px;background:none;border:0;color:#fff;cursor:pointer;font-size:12px;font-weight:600;min-width:74px}
.vbtn .ic,.vbtn .rdot{width:52px;height:52px;padding:14px;border-radius:50%;background:#3a3330;box-sizing:border-box}
.vbtn.off .ic{background:#fff;color:#171412}
.vbtn.leave .ic{background:#e5484d}
.vbtn .rdot{display:block;position:relative}
.vbtn .rdot::after{content:"";position:absolute;inset:16px;border-radius:50%;background:#e5484d}
.vbtn.rec.on .rdot{background:#e5484d;animation:glow 1.4s infinite}
.vbtn.rec.on .rdot::after{inset:18px;border-radius:3px;background:#fff}
.vbtn.locked{opacity:.4}
.voice-note{text-align:center;font-size:12.5px;opacity:.7;margin:8px 0 0;min-height:1em}
.feed{flex:1;overflow-y:auto;padding:14px;display:flex;flex-direction:column;gap:6px;background:var(--bg)}
.feed-empty{margin:auto;color:var(--muted)}
.day{align-self:center;font-size:12px;font-weight:700;color:var(--muted);background:var(--card);border:1px solid var(--line);padding:3px 10px;border-radius:999px;margin:8px 0}
.msg{display:flex;gap:8px;align-items:flex-end;max-width:82%}
.msg.out{align-self:flex-end;flex-direction:row-reverse}
.mb{background:var(--card);border:1px solid var(--line);border-radius:16px 16px 16px 4px;padding:8px 12px;position:relative;min-width:80px;word-wrap:break-word;overflow-wrap:anywhere}
.msg.out .mb{background:var(--red);border-color:var(--red);color:#fff;border-radius:16px 16px 4px 16px}
.msg.out .mb a{color:#fff}
.mb .who{display:block;font-size:12.5px;color:var(--red);margin-bottom:2px}
.mb .txt.deleted{font-style:italic;opacity:.6}
.mb time{display:block;text-align:right;font-size:11px;opacity:.6;margin-top:2px}
.mb img{display:block;max-width:100%;max-height:320px;border-radius:10px;margin:2px 0 4px}
.mb video{max-width:100%;border-radius:10px}
.mb audio{max-width:260px;height:36px}
.fileatt{display:flex;gap:10px;align-items:center;padding:4px 0}
.fileatt span:first-child{font-size:26px}
.fileatt b{display:block;font-size:14px}.fileatt small{opacity:.7;font-size:12px}
.mdel{position:absolute;top:-8px;right:-8px;width:22px;height:22px;border-radius:50%;border:1px solid var(--line);background:var(--card);color:var(--muted);font-size:11px;cursor:pointer;display:none}
.msg:hover .mdel{display:block}
.chat-composer{display:flex;gap:8px;align-items:flex-end;padding:10px;border-top:1px solid var(--line);padding-bottom:max(10px,env(safe-area-inset-bottom))}
.chat-composer .grow{flex:1;min-width:0}
.chat-composer textarea{margin:0;resize:none;border-radius:22px;padding:11px 16px;max-height:160px}
.attach{cursor:pointer;margin:0 0 3px}
.file-chip{display:flex;gap:8px;align-items:center;background:var(--soft);border-radius:10px;padding:6px 10px;margin-bottom:6px;font-size:13px;font-weight:600}
.file-chip span{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.file-chip button{border:0;background:none;cursor:pointer;color:var(--muted)}

/* ============ MOBIL ============ */
@media (max-width:860px){
  main{padding:18px 16px 96px}
  main.with-side{margin-left:0}
  .side{inset:auto 0 0 0;width:auto;height:auto;flex-direction:row;padding:6px 6px calc(6px + env(safe-area-inset-bottom));border-right:0;border-top:1px solid var(--line)}
  .side .brand,.side .me{display:none}
  .side nav{flex-direction:row;overflow-x:auto;gap:0;justify-content:space-around}
  .side nav a{flex-direction:column;gap:3px;padding:6px 8px;font-size:10.5px;min-width:64px;text-align:center}
  .side nav a span{white-space:nowrap}
  .side nav a.on{background:none}
  .side nav .badge{position:absolute;top:2px;right:12px;min-width:16px;height:16px;font-size:10px}
  .grid2,.row2,.msgs{grid-template-columns:1fr}
  h1{font-size:22px}
  .stat b{font-size:24px}
  .mrow{grid-template-columns:1fr 80px;grid-template-areas:"n n" "s sc" "c c"}
  .mname{grid-area:n}.seg{grid-area:s}.score-in{grid-area:sc}.cm-in{grid-area:c}
  .msgs.has-thread .threads{display:none}
  .msgs:not(.has-thread) .thread{display:none}
  .only-mobile{display:inline}
  .thread{height:calc(100dvh - 200px)}
  .msg{max-width:92%}
  .chat{border:0}
  .voice-join span{display:none}
  .voice-join{width:44px;height:44px;padding:0;border-radius:50%}
}

/* ---------- v2: moliya, Telegram ---------- */
.flash.warn{background:var(--warn-soft);color:var(--warn)}
.flash.warn a{text-decoration:underline}
.flash code{font-size:13px}
.toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:14px}
.toolbar input,.toolbar select{width:auto;margin:0;min-width:0}
.toolbar input[type=month]{max-width:180px}
.toolbar select{max-width:260px}
.fin-stats .stat b{font-size:20px;white-space:nowrap}
.fin-stats{grid-template-columns:repeat(auto-fit,minmax(170px,1fr))}
.stat.ok b{color:var(--ok)}
.stat.bad b{color:var(--bad)}
.pill.pay-paid{background:var(--ok-soft);color:var(--ok)}
.pill.pay-part{background:var(--warn-soft);color:var(--warn)}
.pill.pay-wait{background:var(--soft);color:var(--muted)}
.pill.pay-overdue{background:var(--bad-soft);color:var(--bad)}
.red{color:var(--red)}
table.fin td{vertical-align:middle}
.row-act{display:flex;gap:6px;justify-content:flex-end;align-items:center}
.row-act form{margin:0}
.row-act .ic{width:16px;height:16px}
.tgmark{color:#229ed9;display:inline-flex;vertical-align:-3px}
.tgmark .ic{width:16px;height:16px}
.fic.ok{color:var(--ok);background:var(--ok-soft)}
.row2.eq{grid-template-columns:1fr 1fr}
.pay-card{display:grid;gap:4px}
.pay-big{font-size:30px;font-weight:800;letter-spacing:-.03em}
.plan-row{display:grid;grid-template-columns:1.3fr 1fr 1fr;gap:10px;align-items:end;padding:10px 0;border-bottom:1px solid var(--line)}
.plan-row:last-of-type{border-bottom:0}
.plan-row b{align-self:center}
.tg-box{display:flex;gap:12px;align-items:center;flex-wrap:wrap}
@media (max-width:860px){.plan-row{grid-template-columns:1fr 1fr}.plan-row b{grid-column:1/-1}.row2.eq{grid-template-columns:1fr 1fr}}
/* Telegram ichida: yuqori bo'sh joy kamroq */
body.in-tg main{padding-top:16px}
.creds{background:var(--soft);padding:12px 14px;border-radius:10px;font:600 14px/1.6 ui-monospace,Menlo,monospace;white-space:pre-wrap;margin:8px 0;overflow-wrap:anywhere}
.card > h2:has(.btn){display:flex;justify-content:space-between;align-items:center;gap:8px}
.money-strip{display:flex;gap:10px;flex-wrap:wrap;align-items:center;justify-content:space-between}
.money-strip b{font-size:18px}
.ok-t{color:var(--ok)}
a.flash{display:block}
@media (max-width:860px){
  .side nav{justify-content:flex-start;scrollbar-width:none}
  .side nav::-webkit-scrollbar{display:none}
  .side nav a{flex:1 0 auto;min-width:54px;padding:6px 4px;font-size:10px}
}


/* =====================================================================
   v3 — «Zamonaviy gradient»: to'q yon menyu, shishasimon kartalar, gradientlar
   ===================================================================== */
html{background:var(--bg)}
body{background:transparent;min-height:100vh}
body::before{content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;
  background:radial-gradient(42vw 42vw at 12% -6%,var(--blob1),transparent 62%),
             radial-gradient(38vw 38vw at 100% 18%,var(--blob2),transparent 60%),
             radial-gradient(40vw 40vw at 55% 108%,var(--blob3),transparent 62%)}
h1{font-size:30px;letter-spacing:-.035em}
.ph h1{background:linear-gradient(120deg,var(--ink) 30%,var(--vio) 75%,var(--pink));-webkit-background-clip:text;background-clip:text;color:transparent}
::selection{background:rgba(192,38,211,.25)}

/* yon menyu — doim to'q */
.side{background:linear-gradient(180deg,#171226 0%,var(--side) 60%);border-right:0;color:var(--side-ink);box-shadow:8px 0 40px -20px rgba(30,10,80,.5)}
.side::after{content:"";position:absolute;left:-60px;top:-60px;width:220px;height:220px;border-radius:50%;background:radial-gradient(circle,rgba(168,85,247,.35),transparent 70%);pointer-events:none}
.side .brand{color:#fff;position:relative;z-index:1}
.logo{background:var(--grad);box-shadow:var(--glow);border-radius:12px}
.side nav{position:relative;z-index:1}
.side nav a{color:var(--side-ink);transition:background .2s,color .2s,transform .15s}
.side nav a:hover{background:rgba(255,255,255,.06);color:#fff}
.side nav a.on{background:var(--grad);color:#fff;box-shadow:var(--glow)}
.side nav a.on .ic{filter:drop-shadow(0 1px 2px rgba(0,0,0,.25))}
.side .badge{background:#fff;color:var(--pink)}
.side nav a:not(.on) .badge{background:var(--grad);color:#fff}
.me{border-top:1px solid var(--side-line);color:#fff;position:relative;z-index:1}
.me .who small{color:var(--side-ink)}
.me .ava{background:var(--grad);color:#fff}
.me .icon-btn,.me>a:last-child{color:var(--side-ink)}
.me .icon-btn:hover,.me>a:last-child:hover{background:rgba(255,255,255,.08);color:#fff}
.theme-toggle .ic:last-child{display:none}
:root[data-theme="dark"] .theme-toggle .ic:first-child{display:none}
:root[data-theme="dark"] .theme-toggle .ic:last-child{display:block}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .theme-toggle .ic:first-child{display:none}:root:not([data-theme="light"]) .theme-toggle .ic:last-child{display:block}}

/* shishasimon kartalar */
.card,.stat,dialog.modal,.tabs a,.thread,.chat{backdrop-filter:blur(18px) saturate(1.4);-webkit-backdrop-filter:blur(18px) saturate(1.4)}
.card{background:var(--card);border:1px solid var(--glass-b);box-shadow:var(--shadow);border-radius:var(--r)}
a.card,.gcard{transition:transform .2s,box-shadow .2s}
a.card:hover,.gcard:hover{transform:translateY(-3px);box-shadow:0 18px 40px -18px rgba(90,40,180,.4)}
.card.notice{background:var(--grad-soft);border-color:rgba(192,38,211,.3)}
.card.notice pre{background:var(--card-solid)}

/* statistika — birinchisi gradient «qahramon» */
.stat{position:relative;overflow:hidden;background:var(--card);border:1px solid var(--glass-b);box-shadow:var(--shadow);border-radius:var(--r);padding:18px 20px}
.stat::after{content:"";position:absolute;right:-30px;top:-30px;width:90px;height:90px;border-radius:50%;background:var(--grad);opacity:.12}
.stats>.stat:first-child{background:var(--grad);border-color:transparent;color:#fff;box-shadow:var(--glow)}
.stats>.stat:first-child span,.stats>.stat:first-child b small{color:rgba(255,255,255,.82)}
.stats>.stat:first-child::after{background:#fff;opacity:.16;width:140px;height:140px;right:-40px;top:-50px}
.stat.ok b{color:var(--ok)} .stat.bad b{color:var(--bad)}

/* tugmalar */
.btn{background:var(--grad);background-size:140% 140%;background-position:0 0;box-shadow:var(--glow);transition:background-position .4s,transform .1s,box-shadow .2s;border-radius:13px}
.btn:hover{background:var(--grad);background-size:140% 140%;background-position:100% 100%;box-shadow:0 14px 30px -10px rgba(192,38,211,.7)}
.btn.ghost{background:var(--soft);color:var(--ink);box-shadow:none;border:1px solid var(--line)}
.btn.ghost:hover{background:var(--grad-soft);color:var(--ink)}
.btn.danger{background:var(--bad-soft);color:var(--bad);box-shadow:none}
.btn.danger:hover{background:var(--bad);color:#fff}
.btn .ic{width:17px;height:17px}
.icon-btn.danger{color:var(--muted)}
.icon-btn.danger:hover{background:var(--bad-soft);color:var(--bad)}
.del-form{margin:0;display:inline-flex}

/* tablar, pill, ro'yxat */
.tabs a{background:var(--card);border:1px solid var(--glass-b);transition:all .2s}
.tabs a:hover{color:var(--ink)}
.tabs a.on{background:var(--grad);color:#fff;border-color:transparent;box-shadow:var(--glow)}
a.item:hover,.item.on{background:var(--grad-soft)}
.ava{background:var(--grad-soft);color:var(--vio)}
.ava.teacher{background:var(--grad);color:#fff}
.fic{background:var(--grad-soft);color:var(--vio);border-radius:14px}
.more{color:var(--vio)}
.crumb:hover{color:var(--vio)}
.bar{background:var(--soft)} .bar i{background:var(--grad)}
table.rating tr.me td{background:var(--grad-soft)}
.journal th.lcol a{color:var(--vio)}
th{color:var(--muted)}
.journal .sticky,.sticky-actions{background:var(--card-solid)}
.live{background:var(--grad);box-shadow:var(--glow);border-radius:16px}
.flash{border:1px solid transparent;backdrop-filter:blur(10px)}

/* formalar */
input:not([type=checkbox]):not([type=radio]):not([type=file]),select,textarea{background:var(--card-solid);border-color:var(--line);border-radius:12px}
input:focus,select:focus,textarea:focus{border-color:var(--vio);box-shadow:0 0 0 4px rgba(124,58,237,.15)}
.chk input,.seg input{accent-color:var(--vio)}
dialog.modal{background:var(--card-solid);border:1px solid var(--glass-b)}
dialog.modal::backdrop{background:rgba(12,8,30,.5);backdrop-filter:blur(6px)}
dialog.modal[open]{animation:pop .22s ease-out}
@keyframes pop{from{opacity:0;transform:translateY(10px) scale(.98)}}

/* xabarlar */
.bubbles{background:transparent}
.bubble{background:var(--card-solid);border-color:var(--line)}
.bubble.out{background:var(--grad);border-color:transparent;box-shadow:var(--glow)}

/* kirish sahifasi */
.auth{background:none}
.auth-card{background:var(--card);border:1px solid var(--glass-b);box-shadow:0 30px 80px -30px rgba(90,40,180,.5)}
.auth-card h1{background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent;font-size:26px}
.brand.big .logo{width:44px;height:44px;font-size:22px}

/* chat */
body.chat-page{background:transparent}
.chat{background:var(--card);border-color:var(--glass-b)}
.voice{background:radial-gradient(120% 140% at 0% 0%,#3b1d6e 0%,#1a1030 45%,#0e0a18 100%)}
.peer .ava{background:rgba(255,255,255,.1)}
.peer .ava.teacher{background:var(--grad)}
.vbtn .ic,.vbtn .rdot{background:rgba(255,255,255,.1)}
.feed{background:transparent}
.mb{background:var(--card-solid);border-color:var(--line)}
.msg.out .mb{background:var(--grad);border-color:transparent}
.mb .who{color:var(--vio)}
.day{background:var(--card-solid)}
.rec-banner{background:var(--grad)}
.voice-join{box-shadow:var(--glow)}
.voice-join.on{background:linear-gradient(135deg,#059669,#10b981)}
.chat-head form{margin:0}

/* moliya */
.pill.pay-wait{background:var(--soft)}
.money-strip{background:var(--grad-soft)}
.fic.ok{background:var(--ok-soft);color:var(--ok)}
.pay-big{background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}

/* paydo bo'lish animatsiyasi */
.rise{animation:rise .5s cubic-bezier(.2,.7,.2,1) both;animation-delay:var(--d,0ms)}
@keyframes rise{from{opacity:0;transform:translateY(12px)}}
@media (prefers-reduced-motion:reduce){.rise,dialog.modal[open]{animation:none}.btn,.card,.gcard{transition:none}}

/* yuqori panel (faqat telefonda) */
.topbar{display:none}
@media (max-width:860px){
  .topbar{display:flex;align-items:center;gap:6px;position:sticky;top:0;z-index:25;
    padding:calc(8px + env(safe-area-inset-top,0px)) max(12px,env(safe-area-inset-right,0px)) 8px max(16px,env(safe-area-inset-left,0px));
    background:color-mix(in srgb,var(--side) 92%,transparent);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);color:#fff}
  .topbar .brand{padding:0;flex:1;font-size:16px;color:#fff}
  .topbar .logo{width:32px;height:32px;font-size:16px}
  .topbar .icon-btn{color:var(--side-ink)}
  .topbar .icon-btn:hover{background:rgba(255,255,255,.08);color:#fff}
  main{padding-top:18px}
  .side{background:color-mix(in srgb,var(--side) 94%,transparent);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border-top:1px solid var(--side-line);box-shadow:0 -10px 30px -12px rgba(20,10,60,.5)}
  .side::after{display:none}
  .side nav a{border-radius:14px}
  .side nav a.on{background:none;box-shadow:none;color:#fff}
  .side nav a.on .ic{color:#fff;background:var(--grad);border-radius:10px;padding:3px;width:30px;height:26px;box-shadow:var(--glow)}
  .side nav .badge{background:#fff;color:var(--pink)}
  h1{font-size:24px}
  body.in-tg .topbar{display:none}
}
table.fin{font-size:13.5px}
table.fin th,table.fin td{padding:10px 8px}
table.fin .btn.sm{padding:6px 10px;font-size:12.5px}
table.fin .row-act .icon-btn{width:32px;height:32px}
@media (max-width:860px){.side nav a{flex:1 1 0;min-width:52px}.side nav a span{overflow:hidden;text-overflow:ellipsis;max-width:60px}}
@media (max-width:860px){.side nav a{flex:1 0 56px;min-width:56px}.side nav a span{max-width:56px}}
@media (max-width:520px){.chats-list .item .btn.ghost{display:none}}

/* ---------- v4: ustoz ekrani ---------- */
.stage{position:relative;background:#000;border-radius:16px;overflow:hidden;margin-bottom:12px;aspect-ratio:16/9;max-height:min(58vh,520px);width:100%;max-width:100%;box-shadow:0 20px 50px -20px rgba(0,0,0,.8)}
.stage video{width:100%;height:100%;object-fit:contain;display:block;background:#000}
.stage-label{position:absolute;left:10px;top:10px;display:flex;gap:6px;align-items:center;background:rgba(0,0,0,.55);backdrop-filter:blur(8px);color:#fff;font-size:12.5px;font-weight:700;padding:5px 10px;border-radius:999px}
.stage-label .ic{width:15px;height:15px}
.stage-full{position:absolute;right:10px;bottom:10px;width:38px;height:38px;border-radius:12px;border:0;background:rgba(0,0,0,.55);backdrop-filter:blur(8px);color:#fff;display:grid;place-items:center;cursor:pointer}
.stage-full .ic{width:18px;height:18px}
.stage:fullscreen{border-radius:0;max-height:none;aspect-ratio:auto}
.voice.has-stage .voice-peers{justify-content:center}
.voice.has-stage .peer .ava.lg{width:44px;height:44px;font-size:17px}
.vbtn.share.on .ic{background:var(--grad);box-shadow:var(--glow)}
.rec-video{display:block;width:100%;max-width:520px;border-radius:12px;background:#000;margin-top:6px;aspect-ratio:16/9}
/* doska */
.stage{width:min(100%, calc(min(58vh,520px) * 16 / 9));max-height:none;margin:0 auto 12px}
.stage-box{position:absolute;inset:0;background:#000}
.stage.whiteboard .stage-box{background:#fff;background-image:radial-gradient(#e6e3ef 1px,transparent 1px);background-size:22px 22px}
.stage.whiteboard video{visibility:hidden}
.board{position:absolute;inset:0;width:100%;height:100%;display:block}
.board.can-draw{touch-action:none;cursor:crosshair}
.board.can-draw.erasing{cursor:cell}
.stage:fullscreen{width:100vw;height:100vh;aspect-ratio:auto;display:grid;place-items:center;background:#000}
.stage:fullscreen .stage-box{position:relative;inset:auto;width:min(100vw,calc(100vh * 16 / 9));aspect-ratio:16/9}
.board-tools{position:absolute;left:50%;bottom:10px;transform:translateX(-50%);display:flex;align-items:center;gap:4px;padding:6px 8px;border-radius:16px;background:rgba(15,10,30,.72);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);box-shadow:0 10px 30px -10px rgba(0,0,0,.6);max-width:calc(100% - 70px);overflow-x:auto;scrollbar-width:none}
.board-tools .sw{width:24px;height:24px;border-radius:50%;border:2px solid rgba(255,255,255,.35);background:var(--c);cursor:pointer;flex:none;padding:0}
.board-tools .sw.on{border-color:#fff;box-shadow:0 0 0 2px rgba(232,121,249,.9)}
.board-tools .tb{width:32px;height:32px;border-radius:10px;border:0;background:none;color:#fff;display:grid;place-items:center;cursor:pointer;flex:none;opacity:.8}
.board-tools .tb:hover{background:rgba(255,255,255,.1);opacity:1}
.board-tools .tb.on{background:var(--grad);opacity:1}
.board-tools .tb b{display:block;border-radius:50%;background:#fff}
.board-tools .tb .ic{width:18px;height:18px}
.board-tools .sep{width:1px;height:20px;background:rgba(255,255,255,.2);margin:0 3px;flex:none}
@media (max-width:560px){.board-tools .sw{width:20px;height:20px}.board-tools .tb{width:28px;height:28px}.voice-ctl{flex-wrap:wrap;gap:8px}.vbtn{min-width:62px}.vbtn .ic,.vbtn .rdot{width:46px;height:46px;padding:12px}}
