body{font-family:system-ui,sans-serif;margin:0;background:#111;color:#eee}
header{display:flex;justify-content:space-between;align-items:center;
padding:.6rem 1rem;background:#1b1b1b;border-bottom:1px solid #333}
.brand{font-weight:700}
.card{background:#1b1b1b;border:1px solid #333;border-radius:8px;
padding:1rem;margin:1rem}
.center{display:flex;min-height:100vh;align-items:center;justify-content:center;
background:#111}
.center .card{width:min(92vw,22rem);display:flex;flex-direction:column;gap:.7rem}
.center h1{margin:0;font-size:1.2rem}
input[type=password]{padding:.55rem;border-radius:6px;border:1px solid #444;
background:#222;color:#eee}
button{padding:.5rem .9rem;border-radius:6px;border:1px solid #444;
background:#2c2c2c;color:#eee;cursor:pointer}
button:hover{background:#3a3a3a}
.submit{display:flex;flex-direction:column;gap:.6rem}
.submit .row{display:flex;gap:.6rem;align-items:center;justify-content:space-between}
input[type=file]{color:#ccc;font-size:.85rem;max-width:60%}
textarea{width:100%;box-sizing:border-box;padding:.55rem;border-radius:6px;
border:1px solid #444;background:#222;color:#eee;font:inherit}
.msg{min-height:1.2em;font-size:.9em;color:#8fd}
table{width:calc(100% - 2rem);margin:0 1rem 2rem;border-collapse:collapse;
font-size:.85rem}
th,td{padding:.35rem .5rem;border-bottom:1px solid #2a2a2a;text-align:left;
vertical-align:top;word-break:break-all}
thead th{color:#aaa;background:#1b1b1b;position:sticky;top:0}
tr.taskrow{cursor:pointer}
tr.taskrow:hover{background:#202020}
td.state-waiting{color:#ffd866}
td.state-downloading{color:#8fd}
td.state-uploading{color:#ab9df2}
td.state-done{color:#7dc98f}
td.state-failed{color:#ff6c6c}
.titlecell{display:flex;align-items:center;gap:.4rem;min-width:8rem}
img.thumb{width:34px;height:34px;object-fit:cover;border-radius:4px;flex:none}
.logrow td{background:#0d0d0d}
.logrow pre{margin:0;max-height:14rem;overflow:auto;white-space:pre-wrap;
font-size:.75rem;color:#9a9a9a}
.hidden{display:none}
.empty{color:#777}
