:root { --bg:#f6f7f5; --card:#fff; --text:#1d2421; --muted:#68736d; --line:#e2e6e3; --brand:#1f6b4f; --bad:#b42318; --badbg:#fce8e6; --warnbg:#fff6dd; --good:#18794e; --goodbg:#e6f4ea; }
* { box-sizing: border-box; }
body { margin:0; font:14px/1.6 -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif; background:var(--bg); color:var(--text); }
a { color:var(--brand); }
.top { display:flex; justify-content:space-between; align-items:center; padding:10px 20px; background:var(--brand); color:#fff; }
.top a { color:#fff; } .brand { font-weight:600; }
.layout { display:flex; min-height:calc(100vh - 44px); }
.side { width:200px; flex-shrink:0; padding:16px 0; border-right:1px solid var(--line); background:#fff; }
.side a { display:block; padding:8px 18px; text-decoration:none; color:var(--text); }
.side a.sub { padding-left:32px; font-size:13px; color:var(--muted); }
.side a.on { background:var(--goodbg); color:var(--brand); font-weight:600; }
.side a.old { color:var(--muted); } .side small { margin-left:6px; font-size:11px; border:1px solid var(--line); border-radius:4px; padding:0 4px; }
main { flex:1; padding:20px 28px; max-width:1200px; min-width:0; }
main.solo { margin:60px auto; max-width:380px; }
h1 { font-size:22px; margin:0 0 12px; } h2 { font-size:16px; margin:24px 0 8px; }
.card { background:var(--card); border:1px solid var(--line); border-radius:8px; padding:14px 16px; margin:10px 0; }
.card h2 { margin:0; }
.card.error { border-color:var(--bad); background:var(--badbg); }
.card.good { background:var(--goodbg); border-color:#b7dfc4; }
.flash, .warn { padding:10px 14px; border-radius:6px; margin:10px 0; background:var(--warnbg); border:1px solid #f0d99a; }
.muted { color:var(--muted); } .bad { color:var(--bad); font-weight:600; }
.login label { display:block; margin:12px 0; } .login input { display:block; width:100%; margin-top:4px; }
input, select { font:inherit; padding:6px 8px; border:1px solid var(--line); border-radius:6px; background:#fff; }
button, .btn { font:inherit; padding:7px 16px; border-radius:6px; border:1px solid var(--brand); background:var(--brand); color:#fff; cursor:pointer; text-decoration:none; display:inline-block; }
button.ghost, .btn.ghost { background:#fff; color:var(--brand); }
button.small { padding:2px 10px; font-size:12px; }
.upload { display:flex; flex-wrap:wrap; gap:10px; align-items:center; } .upload p { width:100%; margin:0; }
table { border-collapse:collapse; width:100%; background:#fff; margin:6px 0; }
th, td { text-align:left; padding:6px 10px; border-bottom:1px solid var(--line); vertical-align:top; }
th { background:#f0f3f1; font-weight:600; font-size:13px; white-space:nowrap; }
td.n, th.n { text-align:right; }
.tag { white-space:nowrap; padding:1px 8px; border-radius:10px; font-size:12px; background:#eee; }
.s-完成 { background:var(--goodbg); color:var(--good); } .s-失败 { background:var(--badbg); color:var(--bad); }
.s-处理中, .s-排队中, .s-检查中 { background:var(--warnbg); }
.stats { display:flex; flex-wrap:wrap; gap:10px; margin:14px 0; }
.stats div { background:#fff; border:1px solid var(--line); border-radius:8px; padding:10px 16px; min-width:100px; color:var(--muted); }
.stats b { display:block; font-size:24px; color:var(--text); }
.stats .good b { color:var(--good); } .stats .badbox { border-color:var(--bad); } .stats .badbox b { color:var(--bad); }
.downloads .btn { margin-right:6px; margin-bottom:6px; }
.group summary { cursor:pointer; font-size:15px; } .count { color:var(--bad); margin-left:8px; }
.guide { background:var(--warnbg); padding:6px 10px; border-radius:6px; }
pre { white-space:pre-wrap; word-break:break-all; background:#f7f8f7; padding:10px; border-radius:6px; margin:8px 0 0; font-family:inherit; font-size:13px; line-height:1.6; }
.row { display:flex; justify-content:space-between; align-items:center; gap:10px; }
.inline { display:flex; flex-wrap:wrap; gap:8px; align-items:center; margin-top:8px; }
.two { display:grid; grid-template-columns:2fr 1fr; gap:16px; align-items:start; }
.pending { display:grid; grid-template-columns:140px 1fr 140px auto; gap:10px; align-items:center; }
.pending small { grid-column:1 / -1; }
@media (max-width:760px) {
  .layout { display:block; } .side { width:auto; display:flex; flex-wrap:wrap; padding:6px; border-right:0; border-bottom:1px solid var(--line); }
  .side a { padding:6px 10px; } .side a.sub { padding-left:10px; }
  main { padding:14px 16px; } .two, .pending { grid-template-columns:1fr; }
  table { display:block; overflow-x:auto; }
}
.product, .customer { border-top:1px solid var(--line); padding:12px 0; }
.product:first-of-type, .customer:first-of-type { border-top:0; }
.phead { display:flex; flex-wrap:wrap; align-items:center; gap:10px; margin-bottom:6px; }
.pname { font-size:16px; }
.use { display:inline-flex; gap:4px; align-items:center; background:var(--goodbg); padding:2px 8px; border-radius:6px; cursor:pointer; }
.codeline { margin:3px 0; display:flex; flex-wrap:wrap; gap:6px; align-items:baseline; }
.lbl { color:var(--muted); min-width:120px; }
.code { font-family:ui-monospace, Menlo, Consolas, monospace; font-weight:600; }
.kind { font-size:11px; border:1px solid var(--line); border-radius:4px; padding:0 4px; color:var(--muted); }
.zh { color:var(--text); }
.en { color:var(--muted); font-size:12px; width:100%; }
.ai { font-size:11px; color:#a15c00; }
.edit { display:flex; flex-wrap:wrap; gap:12px; margin:8px 0 4px; }
.edit label { display:flex; flex-direction:column; font-size:12px; color:var(--muted); }
.edit input { min-width:260px; }
.tx summary { cursor:pointer; color:var(--muted); font-size:12px; }
td input { width:100%; min-width:120px; } td input.wide { min-width:260px; }
.small-text { font-size:12px; max-width:260px; }
.cand { margin-bottom:6px; }
.codes td { vertical-align:top; }
.submitbar { position:sticky; bottom:0; background:var(--bg); padding:12px 0; display:flex; flex-wrap:wrap; gap:12px; align-items:center; border-top:1px solid var(--line); margin-top:8px; }
.stats small { display:block; font-size:12px; }
.stats.kinds div { min-width:120px; }
