:root{
  --bg:#0e1016; --panel:#161922; --panel2:#1b1f29; --border:#262b38; --border2:#333a49;
  --text:#e9ebf1; --muted:#949bab; --faint:#5c6474;
  --accent:#d99a4e; --accent2:#eab469; --accent-soft:rgba(217,154,78,.14);
  --good:#4bb17c; --track:#232734;
  --sans:-apple-system,system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  --mono:ui-monospace,"SF Mono",Menlo,"Roboto Mono",Consolas,monospace;
  --ease:cubic-bezier(.23,1,.32,1);
  --r:14px;
  --safe-t:env(safe-area-inset-top); --safe-b:env(safe-area-inset-bottom);
}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{background:var(--bg);color:var(--text);font-family:var(--sans);-webkit-font-smoothing:antialiased;
  line-height:1.5;overscroll-behavior-y:none}
#app{min-height:100%}
button{font:inherit;color:inherit;cursor:pointer;border:0;background:none}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}

/* pressable */
.press{transition:transform 140ms var(--ease)}
.press:active{transform:scale(.97)}
@media (prefers-reduced-motion:reduce){.press{transition:none}}

/* ---- header ---- */
.top{position:sticky;top:0;z-index:10;background:rgba(14,16,22,.82);backdrop-filter:blur(12px);
  border-bottom:1px solid var(--border);padding:calc(12px + var(--safe-t)) 18px 12px;
  display:flex;align-items:center;gap:12px}
.top .brand{font-family:var(--mono);font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--accent)}
.top .sp{flex:1}
.top button.link{color:var(--muted);font-size:13px}
.back{display:inline-flex;align-items:center;gap:6px;color:var(--muted);font-size:14px}

.wrap{max-width:920px;margin:0 auto;padding:20px 16px calc(40px + var(--safe-b))}

/* ---- login ---- */
.login{min-height:100dvh;display:grid;place-items:center;padding:24px}
.login .card{width:100%;max-width:360px;background:var(--panel);border:1px solid var(--border);
  border-radius:var(--r);padding:26px 24px}
.login h1{font-size:26px;margin:0 0 4px;letter-spacing:-.02em}
.login p{color:var(--muted);margin:0 0 22px;font-size:14px}
.login label{display:block;font-family:var(--mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;
  color:var(--faint);margin:14px 0 6px}
.login input{width:100%;background:var(--panel2);border:1px solid var(--border2);border-radius:10px;
  padding:12px 13px;color:var(--text);font-size:16px}
.login input:focus{border-color:var(--accent);outline:none}
.btn{width:100%;margin-top:22px;background:linear-gradient(180deg,var(--accent2),var(--accent));color:#1a1206;
  font-weight:650;padding:13px;border-radius:11px;transition:transform 140ms var(--ease),filter 140ms var(--ease)}
.btn:active{transform:scale(.98)}
.btn[disabled]{filter:grayscale(.4) opacity(.7);cursor:default}
.err{color:#e0715c;font-size:13px;margin-top:12px;min-height:16px}

/* ---- catalog ---- */
h1.title{font-size:clamp(24px,5vw,34px);letter-spacing:-.02em;margin:6px 0 2px;text-wrap:balance}
.subt{color:var(--muted);font-size:14px;font-family:var(--mono);margin-bottom:22px}
.module{margin:26px 0}
.module h2{font-size:15px;letter-spacing:.01em;margin:0 0 12px;display:flex;align-items:baseline;gap:10px}
.module h2 .n{font-family:var(--mono);font-size:12px;color:var(--faint)}
.lessons{display:flex;flex-direction:column;gap:8px}
.lesson{display:grid;grid-template-columns:auto 1fr auto;gap:14px;align-items:center;
  background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:13px 15px;text-align:left;width:100%}
.lesson:hover{border-color:var(--border2)}
.lesson .idx{font-family:var(--mono);font-size:13px;color:var(--faint);width:26px;text-align:right}
.lesson .nm{min-width:0}
.lesson .nm .t{font-weight:600;font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lesson .bar{height:4px;border-radius:99px;background:var(--track);margin-top:8px;overflow:hidden;max-width:260px}
.lesson .bar>i{display:block;height:100%;background:var(--accent);border-radius:99px}
.lesson.done .bar>i{background:var(--good)}
.lesson .dur{font-family:var(--mono);font-variant-numeric:tabular-nums;font-size:12.5px;color:var(--muted);white-space:nowrap}
.lesson .chk{color:var(--good);font-size:15px}

.courses{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px;margin-top:20px}
.course{background:var(--panel);border:1px solid var(--border);border-radius:var(--r);padding:20px 18px;text-align:left}
.course .cn{font-size:18px;font-weight:650;letter-spacing:-.01em}
.course .cm{color:var(--muted);font-size:13px;font-family:var(--mono);margin-top:6px}

/* ---- player ---- */
.player{min-height:100dvh;background:#000;display:flex;flex-direction:column}
.player .pv{width:100%;background:#000;aspect-ratio:16/9;max-height:75vh}
.player video{width:100%;height:100%;background:#000;display:block}
.player .pbar{padding:calc(10px + var(--safe-t)) 16px 10px;display:flex;align-items:center;gap:12px;
  background:rgba(14,16,22,.9)}
.player .pinfo{padding:16px 18px calc(24px + var(--safe-b));background:var(--bg);flex:1}
.player h2{font-size:20px;margin:0 0 4px;letter-spacing:-.01em;text-wrap:balance}
.player .meta{color:var(--muted);font-family:var(--mono);font-size:12.5px}
.navrow{display:flex;gap:10px;margin-top:20px}
.navrow button{flex:1;background:var(--panel);border:1px solid var(--border);border-radius:11px;padding:12px;
  font-weight:600;font-size:14px;transition:transform 140ms var(--ease)}
.navrow button:active{transform:scale(.98)}
.navrow button[disabled]{opacity:.4;cursor:default}

.center{min-height:60vh;display:grid;place-items:center;color:var(--muted);font-family:var(--mono);font-size:14px}
.spin{width:22px;height:22px;border:2px solid var(--border2);border-top-color:var(--accent);border-radius:50%;
  animation:sp .7s linear infinite;margin-right:10px;display:inline-block;vertical-align:middle}
@keyframes sp{to{transform:rotate(360deg)}}

/* ---- материалы ---- */
.materials{display:flex;flex-direction:column;gap:7px;margin-top:10px}
.mhead{font-family:var(--mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--faint);margin:8px 2px 3px}
.mat{display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:center;text-decoration:none;color:var(--text);
  background:var(--panel2);border:1px solid var(--border);border-radius:12px;padding:11px 14px}
.mat:hover{border-color:var(--border2)}
.mkind{font-family:var(--mono);font-size:10px;font-weight:700;letter-spacing:.03em;padding:4px 0;width:38px;text-align:center;
  border-radius:6px;background:var(--accent-soft);color:var(--accent2)}
.mkind.word{background:rgba(78,140,217,.14);color:#7fb0ea}
.mkind.excel{background:rgba(75,177,124,.14);color:#5fc48f}
.mkind.text,.mkind.file,.mkind.archive,.mkind.ppt{background:rgba(148,155,171,.14);color:var(--muted)}
.mnm{min-width:0;font-size:14.5px;font-weight:550;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mact{display:flex;align-items:center;gap:10px;font-family:var(--mono);font-size:12px;color:var(--muted);white-space:nowrap}
.mact .msz{font-variant-numeric:tabular-nums;color:var(--faint)}

/* ---- встроенный просмотр документа ---- */
.docov{position:fixed;inset:0;z-index:100;background:var(--bg);display:none;flex-direction:column}
.docov.show{display:flex}
.docbar{flex:0 0 auto;display:flex;align-items:center;gap:12px;
  padding:calc(11px + var(--safe-t)) 14px 11px;background:rgba(14,16,22,.96);
  backdrop-filter:blur(10px);border-bottom:1px solid var(--border)}
.docbar .dc{color:var(--accent2);font-size:15px;font-weight:600;padding:2px 2px}
.docbar .docname{flex:1;min-width:0;font-size:13px;color:var(--muted);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.docbar .dopen{flex:0 0 auto;color:var(--muted);font-family:var(--mono);font-size:12px;
  border:1px solid var(--border2);border-radius:8px;padding:6px 9px}
.docframe{flex:1;width:100%;border:0;background:#fff}
