/* ===========================================================
   水印工作台 · 蓝白科技风
   =========================================================== */
:root {
  --blue-50:#eff6ff; --blue-100:#dbeafe; --blue-200:#bfdbfe; --blue-300:#93c5fd;
  --blue-400:#60a5fa; --blue-500:#3b82f6; --blue-600:#2563eb; --blue-700:#1d4ed8;
  --blue-800:#1e40af; --blue-900:#1e3a8a;
  --ink:#0b1220; --ink-2:#1e293b; --muted:#64748b; --muted-2:#94a3b8;
  --line:#e3eaf6; --line-2:#cfdbf0;
  --surface:#ffffff; --surface-2:#f7f9ff;
  --danger:#dc2626; --ok:#059669;
  --r-s:8px; --r-m:12px; --r-l:18px;
  --sh-1:0 1px 2px rgba(16,32,64,.05), 0 6px 18px rgba(16,32,64,.06);
  --sh-2:0 10px 34px rgba(21,58,138,.14);
  --sh-3:0 18px 60px rgba(21,58,138,.22);
  --ease:cubic-bezier(.22,.61,.36,1);
  --pane-l:300px; --pane-r:372px;
}

* { box-sizing:border-box; }
/* 下面多处用 class 上的 display:grid/flex 覆盖 UA 的 [hidden]{display:none}，必须强制生效 */
[hidden] { display:none !important; }
html,body { height:100%; }
body {
  margin:0; font-family:"PingFang SC","Microsoft YaHei","Segoe UI",system-ui,-apple-system,sans-serif;
  color:var(--ink); background:#eef3fc; font-size:14px; line-height:1.55;
  -webkit-font-smoothing:antialiased; overflow:hidden;
}
button,input,select,textarea { font:inherit; color:inherit; }
h2,h3,p,ul,ol { margin:0; }
ul,ol { padding:0; list-style:none; }

/* ---------- 背景层 ---------- */
.bg-grid,.bg-glow { position:fixed; inset:0; z-index:0; pointer-events:none; }
.bg-grid {
  background-image:linear-gradient(rgba(37,99,235,.055) 1px,transparent 1px),
                   linear-gradient(90deg,rgba(37,99,235,.055) 1px,transparent 1px);
  background-size:44px 44px;
  mask-image:radial-gradient(ellipse 120% 90% at 50% 0%,#000 35%,transparent 78%);
  -webkit-mask-image:radial-gradient(ellipse 120% 90% at 50% 0%,#000 35%,transparent 78%);
  animation:gridDrift 26s linear infinite;
}
@keyframes gridDrift { to { background-position:44px 44px,44px 44px; } }
.bg-glow { filter:blur(90px); opacity:.55; }
.bg-glow-a { background:radial-gradient(420px 420px at 12% 8%,rgba(96,165,250,.5),transparent 70%); animation:float1 18s ease-in-out infinite; }
.bg-glow-b { background:radial-gradient(520px 520px at 88% 92%,rgba(29,78,216,.32),transparent 70%); animation:float2 22s ease-in-out infinite; }
@keyframes float1 { 50% { transform:translate3d(60px,40px,0) scale(1.12); } }
@keyframes float2 { 50% { transform:translate3d(-70px,-50px,0) scale(1.08); } }

/* ---------- 顶栏 ---------- */
.topbar {
  position:relative; z-index:5; height:58px; display:flex; align-items:center; justify-content:space-between;
  padding:0 18px; background:rgba(255,255,255,.78); backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px);
  border-bottom:1px solid var(--line);
}
.brand { display:flex; align-items:center; gap:11px; }
.brand-mark {
  width:34px; height:34px; border-radius:10px; display:grid; place-items:center; font-size:18px; color:#fff;
  background:linear-gradient(135deg,var(--blue-500),var(--blue-800)); box-shadow:0 6px 18px rgba(37,99,235,.4);
  animation:pulseMark 4.5s var(--ease) infinite;
}
@keyframes pulseMark { 0%,100%{ box-shadow:0 6px 18px rgba(37,99,235,.38);} 50%{ box-shadow:0 6px 26px rgba(37,99,235,.66);} }
.brand-text { display:flex; flex-direction:column; line-height:1.15; }
.brand-text strong { font-size:15px; letter-spacing:.4px; }
.brand-text small { font-size:11px; color:var(--muted); }
.topbar-right { display:flex; align-items:center; gap:12px; }
.caps { display:flex; gap:6px; }
.cap {
  font-size:11px; padding:3px 9px; border-radius:999px; border:1px solid var(--line-2); color:var(--muted);
  background:rgba(255,255,255,.7); display:inline-flex; align-items:center; gap:4px;
}
.cap.on { color:var(--blue-700); border-color:var(--blue-200); background:var(--blue-50); }
.cap.off { color:#9a3412; border-color:#fed7aa; background:#fff7ed; }

/* ---------- 主体三栏 ---------- */
.workbench {
  position:relative; z-index:2; display:grid; grid-template-columns:var(--pane-l) minmax(0,1fr) var(--pane-r);
  gap:14px; padding:14px; height:calc(100vh - 58px);
}
.pane {
  background:var(--surface); border:1px solid var(--line); border-radius:var(--r-l); box-shadow:var(--sh-1);
  display:flex; flex-direction:column; min-height:0; overflow:hidden;
  animation:riseIn .5s var(--ease) both;
}
.pane-center { animation-delay:.06s; }
.pane-right { animation-delay:.12s; }
@keyframes riseIn { from { opacity:0; transform:translateY(14px);} }

.pane-head {
  display:flex; align-items:center; justify-content:space-between; padding:13px 15px 10px;
}
.pane-head h2 { font-size:13px; font-weight:600; letter-spacing:.5px; color:var(--ink-2); display:flex; align-items:center; gap:7px; }
.pane-head h2 i { color:var(--blue-600); }
.count-chip {
  min-width:22px; text-align:center; font-size:11px; font-weight:600; color:var(--blue-700);
  background:var(--blue-50); border:1px solid var(--blue-100); border-radius:999px; padding:1px 8px;
}

/* ---------- 拖拽区 ---------- */
.dropzone {
  margin:0 14px 10px; padding:20px 12px; border:1.5px dashed var(--line-2); border-radius:var(--r-m);
  background:linear-gradient(180deg,var(--surface-2),#fff); text-align:center; cursor:pointer;
  transition:border-color .22s var(--ease), background .22s, transform .22s var(--ease);
}
.dropzone:hover { border-color:var(--blue-300); transform:translateY(-1px); }
.dropzone.hot { border-color:var(--blue-600); background:var(--blue-50); box-shadow:inset 0 0 0 3px rgba(37,99,235,.09); }
.dz-icon { font-size:26px; color:var(--blue-500); display:block; animation:bob 3.2s ease-in-out infinite; }
@keyframes bob { 50% { transform:translateY(-5px);} }
.dz-title { font-size:12.5px; font-weight:600; margin-top:5px; }
.dz-sub { font-size:11px; color:var(--muted-2); margin-top:2px; }

.queue-actions { display:flex; gap:8px; padding:0 14px 10px; }
.queue-actions .btn { flex:1; justify-content:center; }

.queue { flex:1; min-height:0; overflow-y:auto; padding:0 12px 12px; display:grid; grid-template-columns:1fr 1fr; gap:9px; align-content:start; }
.queue-empty { flex:1; display:grid; place-content:center; justify-items:center; gap:8px; color:var(--muted-2); text-align:center; padding:0 24px 30px; }
.queue-empty i { font-size:32px; opacity:.5; }
.queue-empty p { font-size:12px; }
body.has-items .queue-empty { display:none; }

.qcard {
  position:relative; border-radius:var(--r-m); overflow:hidden; border:1px solid var(--line);
  background:#0b1220; cursor:pointer; aspect-ratio:1/1; transition:transform .2s var(--ease), box-shadow .2s, border-color .2s;
  animation:pop .28s var(--ease) both;
}
@keyframes pop { from { opacity:0; transform:scale(.9);} }
.qcard:hover { transform:translateY(-2px); box-shadow:var(--sh-2); }
.qcard.active { border-color:var(--blue-600); box-shadow:0 0 0 2px rgba(37,99,235,.25); }
.qcard img { width:100%; height:100%; object-fit:cover; display:block; opacity:.92; }
.qcard .qidx { position:absolute; left:5px; top:5px; font-size:10px; font-weight:700; color:#fff; background:rgba(11,18,32,.62); border-radius:6px; padding:0 5px; backdrop-filter:blur(4px); }
.qcard .qbadge { position:absolute; right:5px; top:5px; font-size:10px; color:#fff; background:var(--blue-600); border-radius:6px; padding:1px 5px; }
.qcard .qname { position:absolute; left:0; right:0; bottom:0; font-size:10px; color:#fff; padding:11px 6px 4px; background:linear-gradient(transparent,rgba(8,15,30,.82)); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.qcard .qdel { position:absolute; right:4px; bottom:4px; width:20px; height:20px; border:0; border-radius:6px; background:rgba(11,18,32,.6); color:#fff; display:grid; place-items:center; cursor:pointer; opacity:0; transition:opacity .18s, background .18s; }
.qcard:hover .qdel { opacity:1; }
.qcard .qdel:hover { background:var(--danger); }
.qcard .qstate { position:absolute; inset:0; display:grid; place-items:center; gap:5px; background:rgba(8,15,30,.66); color:#fff; font-size:11px; opacity:0; transition:opacity .2s; }
.qcard.busy .qstate { opacity:1; }
.qcard.done { border-color:#a7f3d0; }
.qcard.done .qstate { opacity:1; background:rgba(6,78,59,.55); }
.qcard.fail .qstate { opacity:1; background:rgba(127,29,29,.6); }
.qbar { position:absolute; left:0; bottom:0; height:3px; background:linear-gradient(90deg,var(--blue-400),var(--blue-700)); width:0; transition:width .3s var(--ease); }

/* ---------- 预览区 ---------- */
.stage-bar { display:flex; align-items:center; justify-content:space-between; padding:11px 16px; border-bottom:1px solid var(--line); gap:12px; }
.stage-bar-left { display:flex; align-items:baseline; gap:10px; min-width:0; }
.stage-file { font-weight:600; font-size:13px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.stage-dim { font-size:11.5px; color:var(--muted-2); white-space:nowrap; }
.stage-tools { display:flex; align-items:center; gap:8px; }
.zoom-group { display:flex; align-items:center; gap:2px; background:var(--surface-2); border:1px solid var(--line); border-radius:999px; padding:2px; }
.zoom-label { min-width:52px; text-align:center; font-size:11.5px; color:var(--muted); font-variant-numeric:tabular-nums; }

.stage {
  flex:1; min-height:0; position:relative; overflow:auto; display:grid; place-items:center; padding:18px;
  background:
    radial-gradient(60% 60% at 50% 40%,rgba(37,99,235,.06),transparent 70%),
    repeating-conic-gradient(#f1f5fb 0% 25%,#fff 0% 50%) 0 0/22px 22px;
}
.canvas { display:block; box-shadow:var(--sh-3); border-radius:4px; max-width:none; transition:opacity .18s; }
.canvas.hidden-src { opacity:.25; }
.stage-placeholder { position:absolute; inset:0; display:grid; place-content:center; justify-items:center; gap:10px; color:var(--muted-2); pointer-events:none; }
.stage-placeholder i { font-size:40px; opacity:.45; }
.stage-placeholder p { font-size:12.5px; }
body.has-items .stage-placeholder { display:none; }
.loading-veil { position:absolute; inset:0; display:grid; place-content:center; justify-items:center; gap:9px; background:rgba(255,255,255,.6); backdrop-filter:blur(2px); opacity:0; pointer-events:none; transition:opacity .2s; }
.loading-veil.show { opacity:1; }
.loading-veil em { font-size:11.5px; color:var(--muted); font-style:normal; }
.spinner { width:26px; height:26px; border:2.5px solid var(--blue-100); border-top-color:var(--blue-600); border-radius:50%; animation:spin .8s linear infinite; }
@keyframes spin { to { transform:rotate(360deg);} }

.stage-foot { display:flex; align-items:center; justify-content:space-between; gap:12px; padding:11px 16px; border-top:1px solid var(--line); }
.foot-info { font-size:12px; color:var(--muted); display:flex; align-items:center; gap:7px; min-width:0; }
.foot-info .dot { width:7px; height:7px; border-radius:50%; background:var(--muted-2); flex:none; }
.foot-info.ready .dot { background:var(--blue-500); box-shadow:0 0 0 3px rgba(59,130,246,.16); }
.foot-info.err .dot { background:var(--danger); }
.foot-actions { display:flex; gap:9px; }

/* ---------- 结果面板 ---------- */
.results { border-top:1px solid var(--blue-100); background:linear-gradient(180deg,var(--blue-50),#fff); padding:12px 16px 14px; max-height:42%; display:flex; flex-direction:column; animation:slideUP .32s var(--ease) both; }
@keyframes slideUP { from { opacity:0; transform:translateY(14px);} }
.results-head { display:flex; align-items:center; justify-content:space-between; gap:10px; }
.results-head h3 { font-size:13px; display:flex; align-items:center; gap:7px; }
.results-head h3 i { color:var(--blue-600); }
.results-head small { color:var(--muted); font-weight:400; margin-left:6px; }
.results-head > div { display:flex; gap:6px; align-items:center; }
.results-list { overflow-y:auto; margin:9px 0; display:flex; flex-direction:column; gap:6px; }
.res-row { display:flex; align-items:center; gap:9px; background:#fff; border:1px solid var(--line); border-radius:var(--r-s); padding:6px 9px; font-size:12px; transition:border-color .18s, box-shadow .18s; }
.res-row:hover { border-color:var(--blue-200); box-shadow:var(--sh-1); }
.res-row img { width:30px; height:30px; object-fit:cover; border-radius:5px; flex:none; }
.res-name { flex:none; max-width:32%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-weight:600; }
.res-url { flex:1; min-width:0; color:var(--blue-700); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-family:ui-monospace,Consolas,monospace; font-size:11px; }
.results-foot { display:flex; align-items:center; gap:12px; }
.results-tip { font-size:11.5px; color:var(--muted); }

/* ---------- 右栏 tabs ---------- */
.tabs { display:flex; gap:2px; padding:8px 10px 0; border-bottom:1px solid var(--line); background:var(--surface-2); }
.tab { flex:1; border:0; background:transparent; padding:8px 2px 10px; border-radius:9px 9px 0 0; font-size:11.5px; color:var(--muted); cursor:pointer; display:flex; flex-direction:column; align-items:center; gap:3px; transition:color .2s, background .2s; }
.tab i { font-size:15px; }
.tab:hover { color:var(--blue-700); background:rgba(37,99,235,.05); }
.tab.active { color:var(--blue-700); background:#fff; font-weight:600; box-shadow:inset 0 -2px 0 var(--blue-600); }

.panels { flex:1; min-height:0; overflow-y:auto; padding:14px 15px 8px; position:relative; }
.panel { display:none; }
.panel.active { display:block; animation:fadeIn .28s var(--ease) both; }
@keyframes fadeIn { from { opacity:0; transform:translateX(8px);} }

.pane-foot { display:flex; align-items:center; justify-content:space-between; gap:8px; padding:10px 14px; border-top:1px solid var(--line); background:var(--surface-2); }
.pane-foot .switch b { font-size:12px; }

/* ---------- 控件 ---------- */
.field-label { display:block; font-size:11.5px; font-weight:600; color:var(--muted); letter-spacing:.3px; margin-bottom:6px; }
.block { padding:10px 0; border-bottom:1px dashed var(--line); }
.block:last-child { border-bottom:0; }
.block.grid-2 { display:grid; grid-template-columns:1fr 1fr; gap:10px; }
.block.notice { background:var(--surface-2); border:1px solid var(--line); border-radius:var(--r-m); padding:11px 12px; margin-top:6px; }
.block.notice p { font-size:11.5px; color:var(--muted); }
.block.notice p + p { margin-top:5px; }
.block.notice i { color:var(--blue-600); }
.block.notice b { color:var(--ink-2); }
.mt { margin-top:12px; }
.hint { font-size:11px; color:var(--muted-2); margin-top:6px; line-height:1.5; }

.form-input {
  width:100%; border:1px solid var(--line-2); border-radius:var(--r-s); background:#fff; padding:8px 10px;
  font-size:13px; transition:border-color .18s, box-shadow .18s;
}
.form-input:focus { outline:0; border-color:var(--blue-500); box-shadow:0 0 0 3px rgba(59,130,246,.15); }
textarea.form-input { resize:vertical; line-height:1.5; font-family:inherit; }
select.form-input { appearance:none; background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'><path fill='%2364748b' d='M6 8.5 1.8 4.3l.9-.9L6 6.7l3.3-3.3.9.9z'/></svg>"); background-repeat:no-repeat; background-position:right 9px center; padding-right:26px; }
.hex { font-family:ui-monospace,Consolas,monospace; text-transform:lowercase; }

.btn {
  border:1px solid transparent; border-radius:var(--r-s); padding:8px 13px; font-size:12.5px; font-weight:600;
  display:inline-flex; align-items:center; gap:6px; cursor:pointer; white-space:nowrap;
  transition:transform .16s var(--ease), box-shadow .2s, background .2s, border-color .2s, opacity .2s;
}
.btn:active { transform:translateY(1px) scale(.99); }
.btn[disabled] { opacity:.45; pointer-events:none; }
.btn-primary { color:#fff; background:linear-gradient(135deg,var(--blue-500),var(--blue-700)); box-shadow:0 5px 16px rgba(37,99,235,.32); }
.btn-primary:hover { box-shadow:0 8px 24px rgba(37,99,235,.45); transform:translateY(-1px); }
.btn-ghost { background:#fff; border-color:var(--line-2); color:var(--ink-2); }
.btn-ghost:hover { border-color:var(--blue-300); color:var(--blue-700); background:var(--blue-50); }
.btn-sm { padding:5px 10px; font-size:11.5px; }
.w-100 { width:100%; justify-content:center; }
.text-danger { color:var(--danger); }
.text-danger:hover { border-color:#fca5a5; background:#fef2f2; color:var(--danger); }

.icon-btn {
  width:30px; height:30px; border:1px solid var(--line); background:#fff; border-radius:8px; color:var(--muted);
  display:grid; place-items:center; cursor:pointer; transition:.18s var(--ease); flex:none;
}
.icon-btn:hover { color:var(--blue-700); border-color:var(--blue-300); background:var(--blue-50); }
.icon-btn.on { color:#fff; background:var(--blue-600); border-color:var(--blue-600); }
#btn-compare.active { background:var(--ink-2); color:#fff; border-color:var(--ink-2); }

.slider-row { padding:9px 0; }
.slider-row label { display:flex; justify-content:space-between; font-size:11.5px; color:var(--muted); margin-bottom:5px; }
.slider-row output { color:var(--blue-700); font-weight:700; font-variant-numeric:tabular-nums; }
.slider-row.inline { flex:1; margin:0; padding:0; }
input[type=range] {
  -webkit-appearance:none; appearance:none; width:100%; height:20px; background:transparent; cursor:pointer;
}
input[type=range]::-webkit-slider-runnable-track { height:4px; border-radius:999px; background:linear-gradient(90deg,var(--blue-200),var(--blue-100)); }
input[type=range]::-webkit-slider-thumb {
  -webkit-appearance:none; width:15px; height:15px; border-radius:50%; background:#fff; border:2px solid var(--blue-600);
  margin-top:-5.5px; box-shadow:0 2px 6px rgba(37,99,235,.4); transition:transform .16s var(--ease);
}
input[type=range]:hover::-webkit-slider-thumb { transform:scale(1.16); }
input[type=range]:active::-webkit-slider-thumb { transform:scale(1.3); }
input[type=range]::-moz-range-track { height:4px; border-radius:999px; background:var(--blue-100); }
input[type=range]::-moz-range-thumb { width:14px; height:14px; border-radius:50%; background:#fff; border:2px solid var(--blue-600); }

.switch { display:flex; align-items:center; gap:8px; cursor:pointer; user-select:none; }
.switch input { position:absolute; opacity:0; pointer-events:none; }
.switch span { width:34px; height:19px; border-radius:999px; background:var(--line-2); position:relative; flex:none; transition:background .22s var(--ease); }
.switch span::after { content:""; position:absolute; top:2.5px; left:2.5px; width:14px; height:14px; border-radius:50%; background:#fff; box-shadow:0 1px 3px rgba(0,0,0,.25); transition:transform .22s var(--ease); }
.switch input:checked + span { background:linear-gradient(90deg,var(--blue-500),var(--blue-700)); }
.switch input:checked + span::after { transform:translateX(15px); }
.switch b { font-weight:500; font-size:12.5px; }
.switch input:focus-visible + span { box-shadow:0 0 0 3px rgba(59,130,246,.25); }

.seg-group { padding-bottom:10px; border-bottom:1px dashed var(--line); }
.segmented { display:grid; grid-template-columns:1fr 1fr; gap:4px; background:var(--surface-2); border:1px solid var(--line); border-radius:var(--r-m); padding:4px; }
.segmented label {
  display:flex; flex-direction:column; align-items:center; gap:3px; padding:8px 4px; border-radius:9px; cursor:pointer;
  font-size:11.5px; color:var(--muted); transition:.2s var(--ease); position:relative;
}
.segmented label i { font-size:16px; }
.segmented input { position:absolute; opacity:0; }
.segmented label:hover { color:var(--blue-700); }
.segmented label.on { background:#fff; color:var(--blue-700); font-weight:600; box-shadow:var(--sh-1); }

.chip-radios { display:flex; flex-wrap:wrap; gap:6px; }
.chip-radios label { position:relative; }
.chip-radios input { position:absolute; opacity:0; }
.chip-radios span { display:block; font-size:11.5px; padding:5px 11px; border-radius:999px; border:1px solid var(--line-2); color:var(--muted); cursor:pointer; transition:.18s var(--ease); }
.chip-radios span:hover { border-color:var(--blue-300); color:var(--blue-700); }
.chip-radios input:checked + span { background:var(--blue-600); border-color:var(--blue-600); color:#fff; font-weight:600; box-shadow:0 3px 10px rgba(37,99,235,.3); }

.pos-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:6px; max-width:168px; }
.pos-grid button { aspect-ratio:1/1; border:1px solid var(--line-2); background:var(--surface-2); border-radius:9px; cursor:pointer; position:relative; transition:.18s var(--ease); }
.pos-grid button::before { content:""; position:absolute; inset:0; margin:auto; width:14px; height:9px; border-radius:3px; background:var(--muted-2); transition:.18s var(--ease); }
.pos-grid button:hover { border-color:var(--blue-400); }
.pos-grid button:hover::before { background:var(--blue-400); }
.pos-grid button.on { border-color:var(--blue-600); background:var(--blue-50); box-shadow:0 0 0 2px rgba(37,99,235,.16); }
.pos-grid button.on::before { background:var(--blue-600); width:20px; height:12px; }
.pos-tl::before{align-self:start} /* handled by inset:margin auto below */
.pos-grid button[data-pos="tl"]::before, .pos-grid button[data-pos="tc"]::before, .pos-grid button[data-pos="tr"]::before { top:5px; bottom:auto; margin:auto 0; }
.pos-grid button[data-pos="ml"]::before, .pos-grid button[data-pos="mc"]::before, .pos-grid button[data-pos="mr"]::before { top:0; bottom:0; }
.pos-grid button[data-pos="bl"]::before, .pos-grid button[data-pos="bc"]::before, .pos-grid button[data-pos="br"]::before { bottom:5px; top:auto; margin:auto 0; }
.pos-grid button[data-pos="tl"]::before, .pos-grid button[data-pos="ml"]::before, .pos-grid button[data-pos="bl"]::before { left:5px; right:auto; margin:0 auto 0 0; }
.pos-grid button[data-pos="tc"]::before, .pos-grid button[data-pos="mc"]::before, .pos-grid button[data-pos="bc"]::before { left:0; right:0; margin:auto; }
.pos-grid button[data-pos="tr"]::before, .pos-grid button[data-pos="mr"]::before, .pos-grid button[data-pos="br"]::before { right:5px; left:auto; margin:0 0 auto 0; }

.angle-presets { display:flex; gap:6px; margin-top:8px; }
.angle-presets button { flex:1; font-size:11px; padding:4px 0; border:1px solid var(--line-2); background:#fff; border-radius:7px; color:var(--muted); cursor:pointer; transition:.16s; }
.angle-presets button:hover { border-color:var(--blue-400); color:var(--blue-700); background:var(--blue-50); }

.color-row { display:flex; align-items:center; gap:9px; flex-wrap:wrap; }
.color-input { width:38px; height:32px; padding:2px; border:1px solid var(--line-2); border-radius:8px; background:#fff; cursor:pointer; flex:none; }
.color-input::-webkit-color-swatch-wrapper { padding:0; }
.color-input::-webkit-color-swatch { border:0; border-radius:5px; }
.color-row .hex { flex:1; min-width:96px; }

.swatches { display:flex; flex-wrap:wrap; gap:5px; margin-top:9px; }
.swatches button { width:21px; height:21px; border-radius:6px; border:1px solid rgba(15,23,42,.12); cursor:pointer; transition:transform .16s var(--ease), box-shadow .16s; }
.swatches button:hover { transform:scale(1.16); box-shadow:var(--sh-1); }
.swatches button.on { box-shadow:0 0 0 2px #fff,0 0 0 4px var(--blue-600); }

.sub-block { margin-top:10px; padding:10px; border-radius:var(--r-s); background:var(--surface-2); border:1px solid var(--line); display:none; }
.sub-block.open { display:block; animation:fadeIn .22s var(--ease) both; }

.mini-actions { display:flex; gap:7px; margin-top:8px; }
.ph-chips { display:flex; flex-wrap:wrap; gap:5px; margin-top:8px; }
.ph-chips button { font-size:11px; padding:3px 9px; border-radius:999px; border:1px dashed var(--blue-200); background:var(--blue-50); color:var(--blue-700); cursor:pointer; transition:.16s var(--ease); }
.ph-chips button:hover { background:var(--blue-100); border-style:solid; }

.imgpick { border:1.5px dashed var(--line-2); border-radius:var(--r-m); padding:14px; text-align:center; margin-bottom:8px; cursor:pointer; transition:.2s var(--ease); background:var(--surface-2); }
.imgpick:hover { border-color:var(--blue-300); background:var(--blue-50); }
.imgpick:focus-visible, .dropzone:focus-visible { outline:none; border-color:var(--blue-500); box-shadow:0 0 0 3px rgba(59,130,246,.18); }
.imgpick-empty { font-size:11.5px; color:var(--muted); }
.imgpick-empty i { display:block; font-size:20px; color:var(--blue-500); margin-bottom:4px; }
.imgpick-fill { position:relative; display:inline-block; }
.imgpick-fill img { max-width:100%; max-height:96px; display:block; border-radius:6px; background:repeating-conic-gradient(#eef2f8 0% 25%,#fff 0% 50%) 0 0/14px 14px; }
.imgpick-del { position:absolute; right:-7px; top:-7px; width:22px; height:22px; border-radius:50%; background:var(--ink-2); color:#fff; border:2px solid #fff; }

/* ---------- 预设 ---------- */
.preset-groups { display:flex; flex-direction:column; gap:14px; }
.pg-head { display:flex; align-items:center; gap:7px; font-size:12px; font-weight:700; color:var(--ink-2); margin-bottom:8px; }
.pg-head i { color:var(--blue-600); font-size:14px; }
.pg-head span { font-size:10.5px; color:var(--muted-2); font-weight:400; }
.preset-grid { display:grid; grid-template-columns:1fr 1fr; gap:8px; }
.pcard {
  border:1px solid var(--line); border-radius:var(--r-m); overflow:hidden; background:#fff; cursor:pointer;
  transition:transform .18s var(--ease), box-shadow .18s, border-color .18s; text-align:left; padding:0;
}
.pcard:hover { transform:translateY(-2px); box-shadow:var(--sh-2); border-color:var(--blue-200); }
.pcard.on { border-color:var(--blue-600); box-shadow:0 0 0 2px rgba(37,99,235,.2); }
.pcard canvas { display:block; width:100%; aspect-ratio:320/100; height:auto; background:#eef2f8; }
.pcard .pname { display:block; font-size:11px; padding:5px 7px 6px; color:var(--ink-2); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; border-top:1px solid var(--line); }
.pcard.on .pname { background:var(--blue-50); color:var(--blue-800); font-weight:600; }

/* ---------- 弹窗 / toast ---------- */
.modal-mask { position:fixed; inset:0; z-index:60; background:rgba(11,18,32,.42); backdrop-filter:blur(4px); display:grid; place-items:center; animation:fadeIn .2s both; }
.modal { width:min(560px,92vw); background:#fff; border-radius:var(--r-l); box-shadow:var(--sh-3); overflow:hidden; animation:riseIn .3s var(--ease) both; }
.modal-head { display:flex; align-items:center; justify-content:space-between; padding:14px 16px; border-bottom:1px solid var(--line); background:linear-gradient(180deg,var(--blue-50),#fff); }
.modal-head h3 { font-size:14px; display:flex; align-items:center; gap:8px; }
.modal-head h3 i { color:var(--blue-600); }
.modal-body { padding:16px; }
.steps { counter-reset:s; display:flex; flex-direction:column; gap:11px; }
.steps li { position:relative; padding-left:30px; font-size:12.5px; color:var(--muted); line-height:1.65; }
.steps li b { color:var(--ink); }
.steps li::before { counter-increment:s; content:counter(s); position:absolute; left:0; top:1px; width:20px; height:20px; border-radius:50%; background:var(--blue-50); border:1px solid var(--blue-200); color:var(--blue-700); font-size:11px; font-weight:700; display:grid; place-items:center; }
.mb-tip { margin-top:14px; font-size:12px; color:var(--blue-800); background:var(--blue-50); border:1px solid var(--blue-100); border-radius:var(--r-s); padding:9px 11px; }
.mb-tip i { margin-right:5px; }

.toast-wrap { position:fixed; right:18px; bottom:18px; z-index:80; display:flex; flex-direction:column; gap:9px; align-items:flex-end; }
.toast {
  display:flex; align-items:center; gap:9px; background:rgba(11,18,32,.93); color:#fff; font-size:12.5px;
  padding:10px 14px; border-radius:10px; box-shadow:var(--sh-3); animation:toastIn .3s var(--ease) both; max-width:380px;
}
.toast.out { animation:toastOut .26s var(--ease) both; }
.toast i { font-size:15px; }
.toast.ok i { color:#4ade80; }
.toast.err i { color:#f87171; }
.toast.info i { color:var(--blue-300); }
@keyframes toastIn { from { opacity:0; transform:translateX(24px) scale(.96);} }
@keyframes toastOut { to { opacity:0; transform:translateX(24px) scale(.96);} }

/* ---------- 进度 ---------- */
.pg { height:3px; background:var(--blue-100); border-radius:999px; overflow:hidden; width:90px; }
.pg > i { display:block; height:100%; background:linear-gradient(90deg,var(--blue-400),var(--blue-700)); width:0; transition:width .25s var(--ease); }

/* ---------- 响应式 ---------- */
@media (max-width:1240px) {
  :root { --pane-l:250px; --pane-r:330px; }
  .queue { grid-template-columns:1fr; }
}
@media (max-width:1000px) {
  body { overflow:auto; }
  .workbench { grid-template-columns:1fr; height:auto; }
  .pane { max-height:none; }
  .stage { min-height:340px; }
  .queue { max-height:280px; }
  .panels { max-height:520px; }
}
::-webkit-scrollbar { width:9px; height:9px; }
::-webkit-scrollbar-thumb { background:#cbd8ee; border-radius:999px; border:2px solid transparent; background-clip:content-box; }
::-webkit-scrollbar-thumb:hover { background:#a9bfe6; background-clip:content-box; }
::-webkit-scrollbar-track { background:transparent; }
