:root{--bg:#0f1115;--card:#181b22;--bd:#2a2f3a;--fg:#e6e8ee;--mut:#8b93a5;--pri:#4f8cff;--ok:#2ecc71;--err:#ff5d5d;--warn:#f5a623}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--fg);font:14px/1.5 -apple-system,"Segoe UI",Roboto,"PingFang SC","Microsoft YaHei",sans-serif}
header{display:flex;justify-content:space-between;align-items:center;padding:12px 20px;border-bottom:1px solid var(--bd)}
h1{font-size:18px;margin:0}h3{margin:0 0 10px;font-size:15px}
main{max-width:980px;margin:0 auto;padding:16px;display:grid;gap:14px}
.card{background:var(--card);border:1px solid var(--bd);border-radius:10px;padding:14px}
.muted{color:var(--mut)}.small{font-size:12px}.hidden{display:none!important}
.row{display:flex;flex-wrap:wrap;gap:12px;align-items:center;margin-top:10px}
label{display:flex;gap:6px;align-items:center}
input,textarea{background:#0f1218;color:var(--fg);border:1px solid var(--bd);border-radius:6px;padding:6px 8px;font:inherit}
textarea{width:100%;resize:vertical}
.chk{cursor:pointer}
.btn{background:#242936;color:var(--fg);border:1px solid var(--bd);border-radius:6px;padding:6px 12px;cursor:pointer;white-space:nowrap}
select{background:#0f1218;color:var(--fg);border:1px solid var(--bd);border-radius:6px;padding:6px 8px;font:inherit}
.acts{flex-wrap:wrap;justify-content:flex-end}
.btn:hover{border-color:var(--pri)}.btn.primary{background:var(--pri);border-color:var(--pri);color:#fff}
.btn.small{padding:2px 8px;font-size:12px}.hdr-right{display:flex;gap:12px;align-items:center}
.drop{border:2px dashed var(--bd);border-radius:10px;padding:26px;text-align:center}
.drop.over{border-color:var(--pri);background:#141a28}
.link{color:var(--pri);cursor:pointer;text-decoration:underline}
.overlay{position:fixed;inset:0;background:rgba(0,0,0,.75);display:flex;align-items:center;justify-content:center;z-index:9}
.login-card{width:320px;display:grid;gap:10px}.err{color:var(--err);min-height:18px}
.job{border:1px solid var(--bd);border-radius:8px;padding:10px;margin-bottom:8px}
.job .top{display:flex;justify-content:space-between;gap:8px;align-items:center}
.job .name{font-weight:600;word-break:break-all}
.badge{padding:1px 8px;border-radius:10px;font-size:12px;background:#242936;white-space:nowrap}
.badge.done{background:#12361f;color:var(--ok)}.badge.error{background:#3b1717;color:var(--err)}
.badge.uploading,.badge.downloading,.badge.to_gd{background:#14284a;color:var(--pri)}
.badge.queued{background:#3a2d12;color:var(--warn)}
.bar{height:8px;background:#0f1218;border-radius:4px;margin:8px 0 4px;overflow:hidden}
.bar>i{display:block;height:100%;background:linear-gradient(90deg,#4f8cff,#7aa8ff);width:0;transition:width .3s}
.job.done .bar>i{background:var(--ok)}.job.error .bar>i{background:var(--err)}
.meta{display:flex;flex-wrap:wrap;gap:12px;color:var(--mut);font-size:12px}
.job .errtxt{color:var(--err);margin-top:4px;word-break:break-all}
.acts{display:flex;gap:6px}
