:root{
  --bg:#0f1115; --panel:#171a21; --panel2:#1d212a; --line:#2a2f3a; --text:#e6e8ec; --dim:#8b93a3;
  --accent:#7bd88f; --accent-ink:#0d1f12; --amber:#f2b84b; --red:#ef6b6b; --blue:#6fb3ff; --radius:10px;
  --mono:"Cascadia Mono",Consolas,"SF Mono",Menlo,monospace;
}
*{box-sizing:border-box}
html,body{margin:0;background:var(--bg);color:var(--text);
  font:14px/1.5 "Microsoft JhengHei","PingFang TC","Noto Sans TC",system-ui,sans-serif}
button,input,select,textarea{font:inherit;color:inherit}
.hidden{display:none!important}
.dim{color:var(--dim)} .small{font-size:12.5px} small{font-size:12px} .mono{font-family:var(--mono)}
.row{display:flex;align-items:center}.gap{gap:8px}.wrap{flex-wrap:wrap}.spacer{flex:1}

.top{position:sticky;top:0;z-index:10;display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding:10px 20px;
  background:rgba(15,17,21,.94);backdrop-filter:blur(6px);border-bottom:1px solid var(--line)}
.brand{font-weight:700;font-size:17px}.brand .sub{font-weight:400;color:var(--accent);font-size:12.5px;margin-left:8px}
.caps{margin-left:auto;display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.chip{font-size:12px;padding:3px 9px;border-radius:999px;border:1px solid var(--line);background:var(--panel);white-space:nowrap}
.chip.hw{color:var(--accent);border-color:#2f5a3a}.chip.sw{color:var(--amber);border-color:#5a4a26}
.chip.none{color:var(--dim);text-decoration:line-through}.chip.unknown{color:var(--blue);border-color:#264a6a}
.chip.dim{color:var(--dim)}
.banner{padding:9px 20px;font-size:13px;background:#2a2414;color:#f6d38b;border-bottom:1px solid var(--line)}
.banner.err{background:#341a1a;color:#ffb3b3}

main{padding:16px 20px 30px;max-width:1500px;margin:0 auto}
.grid{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);grid-template-areas:"files settings" "preview settings";grid-template-rows:auto 1fr;gap:16px;align-items:start}
.grid>.panel:nth-child(1){grid-area:files}.grid>.panel:nth-child(2){grid-area:settings}.grid>.preview-panel{grid-area:preview}
@media (max-width:1000px){.grid{grid-template-columns:1fr;grid-template-areas:"files" "preview" "settings"}}
.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:16px}
.panel h2{font-size:15px;margin:0;font-weight:600}
.panel-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px;flex-wrap:wrap}

.btn{display:inline-flex;align-items:center;gap:6px;background:var(--panel2);border:1px solid var(--line);padding:7px 14px;border-radius:8px;cursor:pointer;white-space:nowrap}
.btn:hover{border-color:#3d4452}.btn.ghost{background:transparent}.btn.small{padding:4px 10px;font-size:13px}
.btn.primary{background:var(--accent);color:var(--accent-ink);border-color:var(--accent);font-weight:600}
.btn.big{width:100%;justify-content:center;padding:12px;font-size:16px;margin-top:10px}
.btn:disabled{opacity:.45;cursor:not-allowed}.btn.danger{color:var(--red)}
input[type=number],input:not([type]),select,textarea{background:var(--bg);border:1px solid var(--line);border-radius:7px;padding:6px 9px}
textarea{width:100%;resize:vertical;margin:6px 0}
input[type=range]{width:100%;accent-color:var(--accent)}
input[type=color]{width:40px;height:28px;padding:0;border:1px solid var(--line);border-radius:6px;background:none}
.num{width:90px}.tc{width:120px;font-family:var(--mono)}.small-in{width:110px;padding:4px 8px;font-size:13px}
.check{display:inline-flex;align-items:center;gap:6px;cursor:pointer;font-size:13px}
.check input{accent-color:var(--accent)}

.field{margin-bottom:13px}
.field>label:first-child{display:block;font-size:12px;color:var(--dim);margin-bottom:5px}
.hint{display:block;color:var(--dim);margin-top:4px}
.two{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.seg{display:inline-flex;flex-wrap:wrap;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:var(--bg)}
.seg button{border:0;background:none;padding:7px 14px;cursor:pointer;color:var(--dim);border-right:1px solid var(--line);display:flex;flex-direction:column;align-items:center;line-height:1.2}
.seg button:last-child{border-right:0}
.seg button.on{background:var(--panel2);color:var(--text);box-shadow:inset 0 -2px 0 var(--accent)}
.seg button:disabled{opacity:.35;cursor:not-allowed}
.seg i{font-style:normal;font-size:10.5px;margin-top:2px;color:var(--dim)}
.seg i.hw{color:var(--accent)}.seg i.sw{color:var(--amber)}.seg i.unknown{color:var(--blue)}
.presets{display:flex;flex-wrap:wrap;gap:6px}
.preset{border:1px solid var(--line);background:var(--bg);border-radius:8px;padding:6px 11px;cursor:pointer;font-size:13px;color:var(--dim)}
.preset.on{border-color:var(--accent);color:var(--text);background:#14231a}
.block{border:1px solid var(--line);border-radius:8px;padding:8px 12px;margin-bottom:10px;background:var(--panel2)}
.block summary{cursor:pointer;list-style:none}.block summary::-webkit-details-marker{display:none}
.block[open] summary{margin-bottom:8px}
.pos{display:inline-grid;grid-template-columns:repeat(3,26px);gap:3px}
.pos button{height:22px;border:1px solid var(--line);background:var(--bg);border-radius:4px;cursor:pointer;padding:0}
.pos button.on{background:var(--accent);border-color:var(--accent)}

.drop{border:1.5px dashed #394050;border-radius:var(--radius);padding:22px;text-align:center;color:var(--dim);transition:.15s;margin-bottom:12px}
body.dragging .drop{border-color:var(--accent);background:#14231a;color:var(--text)}
.files{display:flex;flex-direction:column;gap:8px;max-height:520px;overflow:auto}
.fc{background:var(--panel2);border:1px solid var(--line);border-radius:9px;padding:10px 12px;cursor:pointer;position:relative}
.fc.sel{border-color:var(--accent)}
.fc .fname{font-weight:600;padding-right:26px;word-break:break-all}
.fc .spec{font-family:var(--mono);font-size:12px;color:#c9d1dd;margin-top:2px}
.fc .plan{font-size:12.5px;margin-top:5px;color:var(--dim)}
.fc .plan b{color:var(--text)}
.fc .x{position:absolute;top:6px;right:6px;background:none;border:0;color:var(--dim);cursor:pointer;font-size:14px}
.note{font-size:12.5px;color:var(--dim);margin-top:3px}.note.w{color:var(--amber)}.note.e{color:var(--red)}
.bar{height:6px;background:var(--bg);border-radius:9px;overflow:hidden;margin-top:6px}.bar>i{display:block;height:100%;background:var(--accent);transition:width .3s}
.status{font-size:12.5px;margin-top:4px}.ok{color:var(--accent)}
.runbar{margin-top:12px;border-top:1px solid var(--line);padding-top:12px}

.pv{position:relative;background:#000;border-radius:8px;overflow:hidden;aspect-ratio:16/9;display:flex;align-items:center;justify-content:center}
.pv canvas{max-width:100%;max-height:100%;display:block}
.pv-msg{position:absolute;color:var(--dim);font-size:13px;text-align:center;padding:20px}
#pvTime{margin:10px 0 6px}
.trimrow{font-size:13px}

.foot{text-align:center;color:var(--dim);font-size:12px;padding:10px 20px 30px}
.toasts{position:fixed;right:16px;bottom:16px;display:flex;flex-direction:column;gap:8px;z-index:60;max-width:420px}
.toast{background:var(--panel2);border:1px solid var(--line);border-left:3px solid var(--accent);padding:10px 14px;border-radius:8px;font-size:13px;box-shadow:0 6px 20px rgba(0,0,0,.4)}
.toast.err{border-left-color:var(--red)}.toast.warn{border-left-color:var(--amber)}
