:root{
  --bg:#0e1116;--bg-2:#161b22;--panel:#1c232d;--panel-2:#222b36;--line:#2b3542;--line-2:#374253;
  --text:#e6edf3;--muted:#9aa7b4;--faint:#6b7683;--brand:#6ea8fe;--brand-2:#4f7dd6;--accent:#7ee3c2;
  --ok:#4ade80;--warn:#fbbf24;--err:#f87171;--info:#60a5fa;--radius:14px;
  --font:'Segoe UI',system-ui,-apple-system,Roboto,Helvetica,Arial,sans-serif;
}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--text);font-family:var(--font);font-size:14px;line-height:1.5}
a{color:var(--brand);text-decoration:none}
.wrap{max-width:1120px;margin:0 auto;padding:26px 28px 60px}
.top{display:flex;justify-content:space-between;align-items:center;margin-bottom:22px;flex-wrap:wrap;gap:14px}
.brand{display:flex;align-items:center;gap:11px}
.brand .mark{width:32px;height:32px;border-radius:8px;background:linear-gradient(135deg,var(--brand),var(--accent));
  display:grid;place-items:center;font-weight:800;color:#0c1017}
.brand b{font-size:17px}.brand small{display:block;color:var(--faint);font-size:11px}
h1{font-size:22px;margin:0}.sub{color:var(--muted);font-size:13px}
.btn{border:1px solid var(--line-2);background:var(--panel);color:var(--text);padding:9px 15px;border-radius:9px;
  font-weight:600;font-size:13px;cursor:pointer;transition:.15s;text-decoration:none;display:inline-flex;
  align-items:center;gap:7px}
.btn:hover{background:var(--panel-2)}
.btn.primary{background:linear-gradient(135deg,var(--brand),var(--brand-2));border:none;color:#0c1017}
.btn.sm{padding:6px 11px;font-size:12px}.btn.danger{color:var(--err);border-color:#5a2b2b}
.grid{display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}
.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;transition:.16s}
.card:hover{transform:translateY(-3px);border-color:var(--line-2)}
.cover{height:70px;background:linear-gradient(135deg,#26405f,#182635);position:relative}
.cover.language{background:linear-gradient(135deg,#5f3a2f,#301c18)}
.cover.paper{background:linear-gradient(135deg,#3a2f5f,#1e1b32)}
.cover.reference{background:linear-gradient(135deg,#2f5f4a,#182f26)}
.cover .type{position:absolute;top:11px;left:14px;font-size:10.5px;font-weight:700;letter-spacing:.6px;
  text-transform:uppercase;background:rgba(0,0,0,.35);padding:3px 8px;border-radius:6px}
.card .body{padding:14px 16px 16px}.card h3{margin:0 0 3px;font-size:15px}
.card .auth{color:var(--muted);font-size:12.5px;margin-bottom:10px}
.badge{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:600;padding:4px 9px;
  border-radius:20px;border:1px solid transparent}
.badge .dot{width:7px;height:7px;border-radius:50%}
.badge.ok{color:#bbf7d0;background:#12281c;border-color:#1f4d33}.badge.ok .dot{background:var(--ok)}
.badge.run{color:#bfdbfe;background:#12233b;border-color:#1e3a5f}.badge.run .dot{background:var(--info)}
.badge.warn{color:#fde68a;background:#2b230f;border-color:#5a4a1b}.badge.warn .dot{background:var(--warn)}
.badge.err{color:#fecaca;background:#2b1414;border-color:#5a2626}.badge.err .dot{background:var(--err)}
.badge.idle{color:var(--muted);background:#171d25;border-color:var(--line)}.badge.idle .dot{background:var(--faint)}
.pl{height:7px;background:#0d1117;border-radius:6px;overflow:hidden;margin:11px 0 4px}
.pl>i{display:block;height:100%;background:linear-gradient(90deg,var(--brand),var(--accent))}
.pl>i.ok{background:linear-gradient(90deg,var(--ok),#22c55e)}.pl>i.warn{background:linear-gradient(90deg,var(--warn),#f59e0b)}
.meta{display:flex;justify-content:space-between;font-size:12px;color:var(--muted);margin-top:8px}
.meta b{color:var(--text)}
.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:20px;margin-bottom:16px}
.empty{text-align:center;padding:54px 20px;color:var(--muted)}.empty .big{font-size:42px;opacity:.7}
.toc .row{display:flex;align-items:center;gap:13px;padding:11px;border-radius:10px;border:1px solid transparent}
.toc .row:hover{background:var(--bg-2);border-color:var(--line)}
.toc .num{width:26px;height:26px;border-radius:7px;background:var(--panel-2);display:grid;place-items:center;
  font-size:12px;color:var(--muted);flex:none;border:1px solid var(--line)}
.toc .t{flex:1;min-width:0}.toc .t b{font-size:13.5px}.toc .t small{color:var(--faint);font-size:11.5px;display:block}
.kv{display:grid;grid-template-columns:auto 1fr;gap:6px 18px;font-size:13px}.kv .k{color:var(--faint)}
.log{background:#0b0e13;border:1px solid var(--line);border-radius:10px;padding:13px 15px;font-family:Consolas,monospace;
  font-size:12.5px;color:#cbd5e1;max-height:260px;overflow:auto;white-space:pre-wrap}
.banner{display:flex;gap:13px;border-radius:12px;padding:14px 17px;margin-bottom:16px}
.banner.err{background:#241214;border:1px solid #5a2626}.banner.warn{background:#241f0f;border:1px solid #5a4a1b}
.banner code{background:rgba(255,255,255,.07);padding:1px 6px;border-radius:5px}
.back{color:var(--muted);display:inline-block;margin-bottom:14px}
.reader h3{color:var(--brand);border-bottom:1px solid var(--line);padding-bottom:6px;margin-top:20px}

/* Upload modal + settings additions */
.banner{border-radius:12px;padding:14px 17px;margin-bottom:16px}
.banner.warn{background:#2b230f;border:1px solid #5a4a1b}
.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.6);display:flex;align-items:center;
  justify-content:center;z-index:100}
.modal{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);
  width:440px;max-width:92vw;max-height:88vh;overflow-y:auto;padding:0}
.modal-head{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;
  border-bottom:1px solid var(--line);font-size:15px}
.modal-close{cursor:pointer;color:var(--faint);font-size:20px;line-height:1}
.modal form{padding:16px 20px}
.drop{border:2px dashed var(--line-2);border-radius:12px;padding:26px 14px;text-align:center;
  color:var(--muted);cursor:pointer;margin-bottom:14px;font-size:13px}
.drop:hover{border-color:var(--brand)}
.field-row{display:flex;gap:10px;align-items:center;margin-bottom:10px;font-size:13px}
.field-row label{width:110px;flex:none;color:var(--muted)}
.field-row input,.field-row select{flex:1;background:var(--bg-2);border:1px solid var(--line);
  border-radius:8px;padding:7px 10px;color:var(--text);font-size:13px}
.settings-section{margin-bottom:22px}
.settings-section h3{font-size:14px;margin:0 0 12px;color:var(--text)}
.readiness-row{display:flex;align-items:center;gap:8px;font-size:13px;margin-bottom:6px}
.check{color:var(--ok)}.cross{color:var(--warn)}

/* Flashcards */
.flashcard{width:100%;max-width:520px;height:220px;margin:16px auto 0;perspective:1200px;cursor:pointer}
.fc-inner{position:relative;width:100%;height:100%;transition:transform .5s;transform-style:preserve-3d}
.fc-inner.flipped{transform:rotateY(180deg)}
.fc-face{position:absolute;inset:0;backface-visibility:hidden;border-radius:14px;border:1px solid var(--line);
  display:flex;align-items:center;justify-content:center;padding:24px;font-size:16px;text-align:center;
  background:var(--panel-2)}
.fc-back{transform:rotateY(180deg);background:linear-gradient(135deg,#16241c,#122018);color:#bbf7d0}

/* Quiz */
.quiz-q{margin-bottom:20px;padding-bottom:16px;border-bottom:1px solid var(--line)}
.quiz-choices{margin-top:8px;display:flex;flex-direction:column;gap:6px}
.quiz-choice{display:flex;align-items:center;gap:8px;padding:7px 10px;border-radius:8px;
  border:1px solid var(--line);cursor:pointer;font-size:13.5px}
.quiz-choice:hover{background:var(--bg-2)}
.quiz-choice.correct{border-color:var(--ok);background:#12281c}
.quiz-choice.incorrect{border-color:var(--err);background:#2b1414}
.chip{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;background:var(--panel-2);
  border:1px solid var(--line-2);padding:3px 9px;border-radius:20px;color:var(--brand)}
.chip:hover{background:var(--bg-2)}
.stat-row{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-top:8px}
.stat{background:var(--bg-2);border:1px solid var(--line);border-radius:10px;padding:12px 14px}
.stat .n{font-size:22px;font-weight:700}
.stat .n.br{color:var(--brand)}.stat .n.ok{color:var(--ok)}.stat .n.wn{color:var(--warn)}
.stat .l{color:var(--muted);font-size:11.5px;margin-top:2px}
@media(max-width:700px){.stat-row{grid-template-columns:repeat(2,1fr)}}
