:root{
  --bg:#0d1117; --panel:#161b22; --panel2:#1c2128; --line:#30363d;
  --fg:#e6edf3; --mut:#8b949e; --acc:#58a6ff; --ok:#3fb950; --bad:#f85149; --warn:#d29922;
}
*{box-sizing:border-box;margin:0;padding:0}
body{
  background:var(--bg); color:var(--fg); font:14px/1.6 -apple-system,"Segoe UI","Microsoft YaHei",sans-serif;
  padding-bottom:40px;
}
code{background:#0d1117;padding:1px 5px;border-radius:3px;font-size:12px;color:#79c0ff}

/* ---------------- header ---------------- */
header{
  display:flex;align-items:center;justify-content:space-between;
  padding:14px 22px;border-bottom:1px solid var(--line);background:var(--panel);
  position:sticky;top:0;z-index:20;
}
.logo{font-size:19px;font-weight:700;letter-spacing:-.3px}
.tag{color:var(--mut);font-size:12px;margin-left:8px}
.hright{display:flex;align-items:center;gap:10px}
.privbadge{
  font-size:12px;color:var(--ok);border:1px solid #238636;border-radius:20px;
  padding:3px 12px;background:#0d2818;cursor:help;
}
button{font:inherit;cursor:pointer;border-radius:6px;border:1px solid var(--line);
  background:var(--panel2);color:var(--fg);padding:6px 14px}
button:hover{border-color:#484f58}
.ghost{background:transparent;color:var(--mut)}
.primary{background:#1f6feb;border-color:#1f6feb;color:#fff}
.primary:hover{background:#388bfd}

/* ---------------- 诊断 ---------------- */
#diagPanel{
  display:none;margin:0;padding:0 22px;background:#0d1117;border-bottom:1px solid var(--line);
}
#diagPanel.show{display:block;padding:14px 22px}
.diag-head{font-weight:600;font-size:13px;margin-bottom:8px;color:var(--acc)}
.drow{display:flex;justify-content:space-between;gap:16px;padding:4px 0;
  border-bottom:1px solid #21262d;font-size:12.5px}
.drow span{color:var(--mut)}
.drow b{font-weight:500;font-variant-numeric:tabular-nums;text-align:right}
.dim{color:var(--mut);font-size:13px}

/* ---------------- 布局 ---------------- */
main{display:grid;grid-template-columns:1fr 330px;gap:18px;padding:18px 22px;max-width:1400px;margin:0 auto}
@media (max-width:900px){main{grid-template-columns:1fr}}

/* ---------------- 拖放 ---------------- */
.drop{
  border:2px dashed var(--line);border-radius:10px;padding:34px 20px;text-align:center;
  cursor:pointer;transition:.15s;background:var(--panel);
}
.drop:hover,.drop.over{border-color:var(--acc);background:#0f1a2b}
.drop-icon{font-size:26px;color:var(--mut)}
.drop-t{font-weight:600;margin-top:6px}
.drop-s{color:var(--mut);font-size:12px;margin-top:4px}

/* ---------------- 汇总 ---------------- */
.summary{display:flex;gap:10px;margin:14px 0;flex-wrap:wrap}
.sum-item{background:var(--panel);border:1px solid var(--line);border-radius:8px;
  padding:8px 14px;min-width:92px;text-align:center}
.sum-item b{display:block;font-size:17px;font-variant-numeric:tabular-nums}
.sum-item span{font-size:11px;color:var(--mut)}
.sum-item.hl b{color:var(--acc)}
.sum-item.good b{color:var(--ok)}
.sum-item.bad b{color:var(--bad)}

/* ---------------- 列表 ---------------- */
.list{margin-top:6px}
.empty{color:var(--mut);text-align:center;padding:26px;font-size:13px}
.row{display:flex;align-items:center;gap:12px;background:var(--panel);
  border:1px solid var(--line);border-radius:8px;padding:9px 12px;margin-bottom:8px}
.row.done{border-left:3px solid var(--ok)}
.row.err{border-left:3px solid var(--bad)}
.row.work{border-left:3px solid var(--warn)}
.thumb{width:46px;height:46px;object-fit:cover;border-radius:5px;background:#000;flex:0 0 auto}
.r-main{flex:1 1 0;min-width:0}
.r-name{font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.r-src{color:var(--mut);font-size:11.5px}
.r-out{text-align:right;flex:0 0 auto;min-width:118px}
.r-size{font-size:14px;font-variant-numeric:tabular-nums}
.r-size.good{color:var(--ok)}
.r-size.bad{color:var(--bad)}
.r-size span{font-size:11px;margin-left:5px}
.r-meta{color:var(--mut);font-size:11px;font-variant-numeric:tabular-nums}
/* 编码引擎标记：让用户知道这张图到底走的哪条路径（原生 / WASM） */
.r-eng{display:inline-block;margin-left:6px;padding:1px 6px;border-radius:999px;
  font-size:10.5px;line-height:1.5;vertical-align:middle;
  background:var(--acc-soft,rgba(99,102,241,.10));color:var(--acc);
  border:1px solid var(--acc-line,rgba(99,102,241,.28))}
.r-err{color:var(--bad);font-size:11.5px;max-width:260px}
.r-act{display:flex;gap:6px;flex:0 0 auto}
.r-act .cmp,.r-act .dl{font-size:12px;padding:4px 10px;text-decoration:none;color:var(--fg)}
.r-act .dl{background:#238636;border-color:#238636;color:#fff;display:inline-block}

/* ---------------- 控制面板 ---------------- */
.panel{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:14px;margin-bottom:14px}
.p-title{font-size:12px;color:var(--mut);text-transform:uppercase;letter-spacing:.5px;margin-bottom:10px}
.presets{display:grid;grid-template-columns:1fr 1fr;gap:7px}
.preset{font-size:12.5px;padding:7px 4px}
.preset.on{background:#1f6feb;border-color:#1f6feb;color:#fff}
.p-desc{color:var(--mut);font-size:12px;margin-top:8px}
.fld{display:block;margin-top:12px;font-size:12.5px}
.fld>span{display:block;color:var(--mut);margin-bottom:5px}
.fld>span b{color:var(--fg)}
.fld select,.fld input[type=range]{width:100%}
.fld select{background:var(--panel2);color:var(--fg);border:1px solid var(--line);
  border-radius:6px;padding:6px 8px;font:inherit;font-size:13px}
.f-note{color:var(--mut);font-size:11.5px;margin-top:6px;line-height:1.55}
.btns{display:flex;gap:8px;margin-top:14px}
.btns button{flex:1}

/* ---------------- 能力标签 ---------------- */
.caps{display:flex;flex-wrap:wrap;gap:6px}
.cap{font-size:11.5px;padding:3px 9px;border-radius:5px;border:1px solid var(--line);background:var(--panel2)}
.cap b{font-weight:600;margin-left:6px;opacity:.85}
.cap-ok{border-color:#238636;color:var(--ok)}
.cap-no{border-color:#6e7681;color:var(--mut)}
.cap-wasm{border-color:#9e6a03;color:var(--warn)}

/* ---------------- 对比 ---------------- */
#cmpModal{display:none;position:fixed;inset:0;background:rgba(0,0,0,.82);z-index:50;
  align-items:center;justify-content:center;padding:24px}
#cmpModal.show{display:flex}
.cmp-box{background:var(--panel);border:1px solid var(--line);border-radius:10px;
  max-width:1000px;width:100%;padding:16px}
.cmp-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;
  font-size:13px;font-weight:600}
.cmp-view{position:relative;background:#000;border-radius:6px;overflow:hidden;
  max-height:66vh;display:flex;align-items:center;justify-content:center;user-select:none}
.cmp-view img{display:block;max-width:100%;max-height:66vh;object-fit:contain}
#cmpBWrap{position:absolute;inset:0;display:flex;align-items:center;justify-content:center}
#cmpSplitBar{position:absolute;top:0;bottom:0;width:2px;background:var(--acc);
  cursor:ew-resize;pointer-events:auto;left:50%}
#cmpSplitBar::after{content:'';position:absolute;top:50%;left:-9px;width:20px;height:20px;
  margin-top:-10px;border-radius:50%;background:var(--acc);border:2px solid #fff}
.cmp-label{position:absolute;top:10px;font-size:11px;background:rgba(0,0,0,.65);
  padding:2px 8px;border-radius:4px;transition:.15s}
.cmp-label.left{left:10px}
.cmp-label.right{right:10px}
.cmp-info{color:var(--mut);font-size:12.5px;margin-top:10px;font-variant-numeric:tabular-nums}
.cmp-hint{color:var(--mut);font-size:11.5px;margin-top:4px}

footer{max-width:1400px;margin:10px auto 0;padding:14px 22px;border-top:1px solid var(--line);
  color:var(--mut);font-size:12px;line-height:1.7}
footer b{color:var(--fg)}
