:root {
  --bg:#0f1115; --card:#171a21; --card2:#1d212b; --text:#e8eaed; --muted:#9aa0a6;
  --line:#2a2f3a; --accent:#4f8cff; --accent2:#7ee2a8;
}
* { box-sizing:border-box; }
body { margin:0; background:var(--bg); color:var(--text); font-family:-apple-system,"Segoe UI","Microsoft YaHei",sans-serif; }
a { color:inherit; text-decoration:none; }
.topbar { display:flex; justify-content:space-between; align-items:center; padding:14px 22px; border-bottom:1px solid var(--line); }
.brand { font-weight:600; letter-spacing:.4px; }
.nav { display:flex; gap:16px; align-items:center; font-size:13px; color:var(--muted); }
.nav a:hover { color:var(--text); }
.who { color:var(--text); }
.container { max-width:980px; margin:0 auto; padding:26px 18px 70px; }
.hero { margin:8px 0 22px; }
.hero h1, .page-head h1 { margin:6px 0 4px; font-size:24px; }
.page-head { margin:4px 0 18px; }
.card { background:var(--card); border:1px solid var(--line); border-radius:14px; padding:20px; margin-bottom:18px; }
.card.narrow { max-width:430px; margin:56px auto; }
.muted { color:var(--muted); font-size:13px; }
.center { text-align:center; }
.link { color:var(--accent); font-size:13px; }
.flash { background:#3a1d1d; color:#ff9b9b; border-radius:10px; padding:10px 14px; margin-bottom:16px; font-size:13px; }
label { display:block; font-size:13px; color:var(--muted); margin:12px 0 6px; }
input { width:100%; padding:11px 12px; border-radius:9px; border:1px solid var(--line); background:#0e1014; color:var(--text); font-size:15px; }
button { border:0; border-radius:9px; padding:10px 16px; font-size:14px; cursor:pointer; }
.primary { background:var(--accent); color:#fff; width:100%; margin-top:16px; }
.secondary { background:#2a3140; color:var(--text); padding:7px 12px; font-size:13px; }
button:disabled { opacity:.55; cursor:default; }
.msg { min-height:18px; font-size:13px; color:#ffb4a8; }
.module-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:18px; }
.module-card { position:relative; aspect-ratio:1.618/1; background:linear-gradient(150deg,var(--card2),var(--card)); border:1px solid var(--line); border-radius:16px; padding:18px; display:flex; flex-direction:column; justify-content:space-between; transition:transform .15s,border-color .15s; }
.module-card:hover { transform:translateY(-3px); border-color:var(--accent); }
.module-icon { font-size:26px; color:var(--accent2); }
.module-name { display:block; font-size:17px; font-weight:600; margin-bottom:6px; }
.module-desc { display:block; font-size:12px; color:var(--muted); line-height:1.5; }
.module-arrow { position:absolute; right:16px; bottom:14px; color:var(--muted); }
@media (max-width:900px) { .module-grid { grid-template-columns:repeat(2,minmax(0,1fr)); } }
@media (max-width:600px) { .module-grid { grid-template-columns:1fr; } .module-card { aspect-ratio:auto; min-height:130px; } }
.dropzone { display:flex; align-items:center; justify-content:center; min-height:120px; border:1px dashed #3a4252; border-radius:12px; margin-top:14px; cursor:pointer; color:var(--muted); }
.dropzone input { display:none; }
.dropzone.drag { border-color:var(--accent); color:var(--text); }
.progress-wrap { margin-top:14px; }
.progress { height:8px; background:#232936; border-radius:99px; overflow:hidden; }
#progressBar { height:100%; width:0; background:var(--accent); transition:width .2s; }
.hidden { display:none; }
.tasks { display:flex; flex-direction:column; gap:10px; margin-top:12px; }
.task { display:flex; justify-content:space-between; gap:12px; padding:12px; border:1px solid var(--line); border-radius:10px; }
.task .name { font-size:14px; word-break:break-all; }
.task .meta { font-size:12px; color:var(--muted); margin-top:4px; }
.badge { font-size:12px; padding:3px 8px; border-radius:99px; background:#232936; color:var(--muted); white-space:nowrap; height:fit-content; }
.badge.uploaded { background:#22304a; color:#8ab4ff; }
.badge.processing { background:#3a2f17; color:#ffcc80; }
.badge.done { background:#173a25; color:#7ee2a8; }
.badge.failed { background:#3a1d1d; color:#ff9b9b; }
.table { width:100%; border-collapse:collapse; font-size:13px; }
.table th, .table td { text-align:left; padding:10px 8px; border-bottom:1px solid var(--line); vertical-align:top; }
.table th { color:var(--muted); font-weight:500; }
.inline-form { display:flex; flex-wrap:wrap; gap:10px; align-items:center; }
.check { display:inline-flex; gap:5px; align-items:center; margin:0; color:var(--text); font-size:13px; }
.check input { width:auto; }
.tag { font-size:11px; background:#22304a; color:#8ab4ff; padding:2px 6px; border-radius:99px; }
