*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{background:#fff;color:#1a1a1a;font:15px/1.55 -apple-system,BlinkMacSystemFont,"Segoe UI","Microsoft YaHei",sans-serif;-webkit-text-size-adjust:100%}
h1,h2,h3{margin:0;font-weight:600}
h1{font-size:20px}
h2{font-size:16px;margin:18px 0 10px}
h3{font-size:14px;margin:14px 0 8px}
p{margin:6px 0}
.muted{color:#6b6b6b}
.small{font-size:12px}
code,pre{font-family:Consolas,Menlo,monospace;font-size:12px}
code{background:#f2f2f2;padding:1px 4px;border:1px solid #e5e5e5;border-radius:2px;white-space:nowrap}
pre{background:#f7f7f7;border:1px solid #e2e2e2;padding:10px;overflow:auto;white-space:pre-wrap;word-break:break-all;margin:8px 0}
a{color:#111}

/* 登录 */
.login-body{min-height:100vh;display:flex;align-items:flex-start;justify-content:center;padding:14vh 18px 30px;background:#fff}
.login-card{width:100%;max-width:380px;border:1px solid #dcdcdc;padding:26px 22px}
.login-card h1{margin-bottom:4px}
.login-card form{margin-top:20px}
.login-card label{display:block;font-size:13px;margin:12px 0 5px}
input,select{font:inherit;color:inherit}
.login-card input{width:100%}
.input,input[type=text],input[type=password],input[type=search]{
  border:1px solid #d0d0d0;background:#fff;padding:9px 10px;outline:none;border-radius:0;min-width:0;
}
.input:focus,input:focus,select:focus{border-color:#111}
.tip{border:1px solid #dcdcdc;background:#fafafa;padding:9px 11px;font-size:13px;margin-top:16px}
.msg{min-height:20px;font-size:13px;margin-top:10px}
.msg.bad{color:#b00020}

/* 按钮 */
.btn{border:1px solid #111;background:#111;color:#fff;padding:9px 14px;cursor:pointer;font:inherit;border-radius:0}
.btn:hover{background:#333}
.btn:disabled{opacity:.5;cursor:default}
.btn.ghost{background:#fff;color:#111;border:1px solid #d0d0d0}
.btn.ghost:hover{background:#f5f5f5}
.btn.small{padding:6px 11px;font-size:13px}
.btn.primary{width:100%;margin-top:18px}
.btn.danger{background:#fff;color:#111;border:1px solid #d0d0d0}

/* 主体 */
.app{max-width:760px;margin:0 auto;padding:16px 14px 60px}
.top{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;border-bottom:1px solid #e5e5e5;padding-bottom:12px}
.tabs{display:flex;gap:0;border-bottom:1px solid #dcdcdc;margin:14px 0 0;overflow-x:auto}
.tab{border:0;border-bottom:2px solid transparent;background:none;padding:9px 14px;font:inherit;cursor:pointer;white-space:nowrap;color:#555}
.tab.on{border-bottom-color:#111;color:#111;font-weight:600}
.pane{display:none;padding-top:4px}
.pane.on{display:block}
.row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.row.between{justify-content:space-between}

.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(105px,1fr));gap:8px;margin:14px 0}
.card{border:1px solid #dcdcdc;padding:10px 8px;text-align:center}
.card b{display:block;font-size:19px;font-weight:600}
.card span{font-size:11px;color:#6b6b6b}

.list{display:flex;flex-direction:column;gap:8px}
.item{border:1px solid #dcdcdc;padding:11px 12px}
.item .title{font-weight:600;word-break:break-all}
.item .meta{font-size:12px;color:#6b6b6b;word-break:break-all}
.item .acts{display:flex;gap:6px;flex-wrap:wrap;margin-top:9px}
.badge{display:inline-block;border:1px solid #111;padding:0 6px;font-size:11px;margin-left:6px;vertical-align:1px}
.badge.gray{border-color:#ccc;color:#666}
.badge.ok{background:#111;color:#fff;border-color:#111}
.badge.warn{border-color:#b00020;color:#b00020}

/* 上传 */
.drop{border:1px dashed #bdbdbd;padding:24px 14px;text-align:center;cursor:pointer;margin-top:10px}
.drop.hover{background:#f7f7f7;border-color:#111}
.upload-status{margin-top:12px;font-size:13px}
.up-row{border:1px solid #e5e5e5;padding:8px 10px;margin-bottom:6px}
.up-row.bad{border-color:#e0b4b4;color:#b00020}
.bar{height:4px;background:#eee;margin-top:6px}
.bar > i{display:block;height:100%;background:#111;width:0}

.panel{border:1px solid #dcdcdc;padding:12px;margin-bottom:12px}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:10px}
.form-grid .input{width:100%}

.toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);background:#111;color:#fff;padding:9px 16px;font-size:13px;z-index:20;max-width:86vw}

@media (min-width:1024px){
  .app{max-width:1020px;padding:22px 24px 80px}
  .cards{grid-template-columns:repeat(5,1fr)}
  .list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
  .login-body{padding-top:16vh}
}
