:root{--bg: #14161c;--bg-card: #1b1e26;--bg-input: #232733;--border: #2d3341;--text: #e6e9ef;--text-dim: #98a0b0;--accent: #4c8dff;--accent-dim: #2c5aa8;--danger: #ff5a5a;--ok: #3ecf8e;--warn: #ffb340}*{box-sizing:border-box}body{margin:0;padding:0;background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,PingFang SC,sans-serif;font-size:14px;line-height:1.6}.app{max-width:980px;margin:0 auto;padding:24px 20px 60px}.banner{border-radius:8px;padding:11px 15px;margin-bottom:16px;font-size:13px;line-height:1.6;font-weight:600;border:1px solid transparent}.banner-error{background:#ff5a5a24;border-color:var(--danger);color:#ffc9c9;animation:bannerPulse 1.6s ease-in-out infinite}.banner-warn{background:#ffb34021;border-color:var(--warn);color:#ffe0b0}@keyframes bannerPulse{0%,to{border-color:var(--danger)}50%{border-color:#ff5a5a59}}.app-header{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:20px;flex-wrap:wrap}.brand h1{margin:0;font-size:20px;font-weight:600}.subtitle{margin:2px 0 0;color:var(--text-dim);font-size:12px}.header-status{display:flex;align-items:center;gap:8px;color:var(--text-dim);font-size:13px}.dot{width:9px;height:9px;border-radius:50%;background:#555;flex:none}.dot-idle{background:#5a6070}.dot-running{background:var(--ok);box-shadow:0 0 8px var(--ok);animation:pulse 1.6s ease-in-out infinite}.dot-alert{background:var(--danger);box-shadow:0 0 10px var(--danger);animation:pulse .7s ease-in-out infinite}.dot-error{background:var(--warn)}@keyframes pulse{0%,to{opacity:1}50%{opacity:.35}}.card{background:var(--bg-card);border:1px solid var(--border);border-radius:10px;padding:16px 18px;margin-bottom:16px}.card-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px;flex-wrap:wrap}.card-head h2{margin:0;font-size:15px;font-weight:600}.head-actions{display:flex;gap:8px;flex-wrap:wrap}.btn{background:var(--bg-input);color:var(--text);border:1px solid var(--border);border-radius:7px;padding:7px 14px;font-size:13px;font-family:inherit;cursor:pointer;transition:background .15s,border-color .15s,opacity .15s}.btn:hover:not(:disabled){background:#2b3040;border-color:#3b4252}.btn:disabled{opacity:.4;cursor:not-allowed}.btn-primary{background:var(--accent-dim);border-color:var(--accent);color:#fff}.btn-primary:hover:not(:disabled){background:var(--accent)}.btn-danger{background:#6b2222;border-color:var(--danger);color:#ffd9d9}.btn-danger:hover:not(:disabled){background:var(--danger);color:#fff}.btn-ghost{background:transparent}.preview-wrap{position:relative;width:100%;max-width:620px;margin:0 auto;min-height:200px;background:#0d0f13;border:1px solid var(--border);border-radius:8px;overflow:hidden;display:flex;align-items:center;justify-content:center}#preview{display:block;width:100%;height:auto}.region-box{position:absolute;border:2px dashed rgba(76,141,255,.9);background:#4c8dff12;pointer-events:none;display:none}.preview-hint{position:absolute;color:var(--text-dim);font-size:13px;text-align:center;padding:0 24px}.tips{margin:12px 0 0;color:var(--text-dim);font-size:12px;line-height:1.7}.metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:10px}.metric{background:var(--bg-input);border-radius:7px;padding:9px 12px;display:flex;flex-direction:column;gap:2px}.metric-label{color:var(--text-dim);font-size:11px}.metric-value{font-size:15px;font-weight:600;font-variant-numeric:tabular-nums}.ocr-preview{margin-top:12px;background:var(--bg-input);border-radius:7px;padding:10px 12px}.ocr-preview-label{color:var(--text-dim);font-size:11px;display:block;margin-bottom:4px}.ocr-text{font-size:13px;word-break:break-all;min-height:20px;color:#c8d0e0}.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:12px 14px}.field{display:flex;flex-direction:column;gap:5px}.field-wide{grid-column:1 / -1}.field-label{color:var(--text-dim);font-size:12px}input[type=text],input[type=number],select,textarea{background:var(--bg-input);border:1px solid var(--border);border-radius:6px;color:var(--text);padding:7px 10px;font-size:13px;font-family:inherit;width:100%;outline:none;transition:border-color .15s}input[type=text]:focus,input[type=number]:focus,select:focus,textarea:focus{border-color:var(--accent)}textarea{resize:vertical;line-height:1.6}.toggles{margin-top:14px;display:flex;flex-direction:column;gap:8px}.toggle{display:flex;align-items:center;gap:9px;font-size:13px;color:#cfd6e4;cursor:pointer}.toggle input[type=checkbox]{width:15px;height:15px;accent-color:var(--accent);cursor:pointer;flex:none}.test-row{margin-top:16px;display:flex;align-items:center;gap:12px;flex-wrap:wrap}.test-hint{color:var(--text-dim);font-size:12px}.log{background:#0d0f13;border:1px solid var(--border);border-radius:7px;padding:10px 12px;height:200px;overflow-y:auto;font-family:ui-monospace,Consolas,Courier New,monospace;font-size:12px;line-height:1.75}.log-line{color:#9aa4b8;white-space:pre-wrap;word-break:break-all}.log-line.hit{color:var(--danger);font-weight:600}.log-line.err{color:var(--warn)}.log-time{color:#5a6272;margin-right:8px}@media (max-width: 640px){.app-header,.card-head{flex-direction:column;align-items:flex-start}}
