.api-status[data-v-4301a110]{display:inline-flex;align-items:center;justify-self:end;gap:8px;min-height:34px;padding:0 12px;border:1px solid var(--border);border-radius:999px;color:var(--text-muted);background:var(--surface);cursor:pointer}.status-dot[data-v-4301a110]{width:8px;height:8px;border-radius:50%;background:#98a3a1}.api-status.online .status-dot[data-v-4301a110]{background:var(--success);box-shadow:0 0 0 4px #247a551f}.api-status.offline .status-dot[data-v-4301a110]{background:var(--danger);box-shadow:0 0 0 4px #b641371f}.api-status.checking .status-dot[data-v-4301a110]{background:var(--warning)}.camera-toolbar[data-v-019815a8]{align-items:center}.camera-toolbar>div[data-v-019815a8]:first-child{display:grid;gap:3px}.camera-controls[data-v-019815a8]{display:flex;align-items:center;gap:8px}.camera-controls select[data-v-019815a8]{min-width:150px;min-height:36px;padding:0 9px;border:1px solid var(--border);border-radius:6px;color:var(--text);background:var(--surface)}.camera-status[data-v-019815a8]{display:flex;align-items:center;gap:10px;padding:10px 12px;border-bottom:1px solid var(--border);color:var(--text-muted);background:var(--surface-muted)}.camera-status>span[data-v-019815a8]:nth-child(2){display:grid;gap:2px;min-width:0}.camera-status strong[data-v-019815a8]{color:var(--text);font-size:.88rem}.camera-status small[data-v-019815a8]{overflow-wrap:anywhere}.camera-status-dot[data-v-019815a8]{width:9px;height:9px;flex:0 0 auto;border-radius:50%;background:#98a3a1}.camera-status.available .camera-status-dot[data-v-019815a8],.camera-status.mock .camera-status-dot[data-v-019815a8]{background:var(--success);box-shadow:0 0 0 4px #247a551f}.camera-status.initializing .camera-status-dot[data-v-019815a8]{background:var(--warning)}.camera-status.not_found .camera-status-dot[data-v-019815a8],.camera-status.open_failed .camera-status-dot[data-v-019815a8],.camera-status.busy .camera-status-dot[data-v-019815a8],.camera-status.disconnected .camera-status-dot[data-v-019815a8],.camera-status.read_failed .camera-status-dot[data-v-019815a8]{background:var(--danger);box-shadow:0 0 0 4px #b641371a}.camera-status-code[data-v-019815a8]{margin-left:auto;color:var(--text-muted);font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:.68rem;white-space:nowrap}.compact[data-v-019815a8]{min-height:36px;padding:0 13px}.camera-stage[data-v-019815a8]{position:relative;display:grid;place-items:center;min-height:320px;overflow:hidden;background:linear-gradient(rgba(255,255,255,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.045) 1px,transparent 1px),#17201f;background-size:28px 28px}.camera-image[data-v-019815a8]{display:block;width:auto;max-width:100%;height:auto;max-height:68vh;object-fit:contain;border:1px solid rgba(105,210,197,.35);border-radius:8px;background:#101716}.live-badge[data-v-019815a8]{position:absolute;top:10px;left:10px;z-index:2;padding:3px 10px;border-radius:999px;color:#0f1716;background:#69d2c5;font-size:.68rem;font-weight:700;letter-spacing:.08em;box-shadow:0 1px 6px #00000059}.camera-metrics[data-v-019815a8]{display:flex;flex-wrap:wrap;gap:4px 16px;padding:8px 12px;border-bottom:1px solid var(--border);color:var(--text-muted);background:var(--surface-muted);font-size:.75rem;line-height:1.6;font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.camera-metrics span[data-v-019815a8]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.camera-empty[data-v-019815a8]{display:grid;max-width:560px;gap:10px;justify-items:center;padding:28px;color:#d8e3e1;text-align:center}.camera-empty>span[data-v-019815a8]{color:#69d2c5;font-size:.72rem}.camera-empty strong[data-v-019815a8]{font-size:1rem}.camera-empty p[data-v-019815a8]{margin:0;color:#aebdbb;font-size:.86rem}.camera-state-actions[data-v-019815a8]{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-top:4px}@media(max-width:620px){.camera-toolbar[data-v-019815a8]{align-items:stretch;flex-direction:column}.camera-controls[data-v-019815a8]{width:100%}.camera-controls select[data-v-019815a8]{flex:1;min-width:0}.camera-status[data-v-019815a8]{align-items:flex-start}.camera-status-code[data-v-019815a8]{display:none}.camera-metrics[data-v-019815a8]{gap:2px 12px;font-size:.7rem}.camera-metrics span[data-v-019815a8]{max-width:100%}}@media(max-width:760px){.camera-stage[data-v-019815a8]{min-height:260px}}.capture-actions[data-v-00e90026]{display:flex;gap:10px}@media(max-width:520px){.capture-actions[data-v-00e90026]{flex-direction:column}}.result-layout[data-v-3fc935be]{display:grid;grid-template-columns:130px 1fr;gap:18px}.color-preview[data-v-3fc935be]{min-height:130px;border:1px solid var(--border);border-radius:6px;background:#f5f8f7}.color-values[data-v-3fc935be]{display:grid;gap:8px;margin:0}.color-values>div[data-v-3fc935be]{display:grid;grid-template-columns:54px 1fr;align-items:center;min-height:38px;padding:0 11px;border:1px solid var(--border);border-radius:6px;background:var(--surface-muted)}.color-values dt[data-v-3fc935be]{color:var(--text-muted);font-size:.78rem}.color-values dd[data-v-3fc935be]{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0;font-family:Consolas,Cascadia Mono,monospace;font-size:.9rem}.result-actions[data-v-3fc935be]{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:14px 16px;border-top:1px solid var(--border)}.upload-status[data-v-3fc935be]{display:grid;gap:3px;min-width:0;color:var(--text-muted);font-size:.78rem}.upload-status strong[data-v-3fc935be]{color:var(--success);font-size:.86rem}.upload-status span[data-v-3fc935be]{overflow-wrap:anywhere}.copy-button[data-v-3fc935be]{min-height:28px;padding:0 9px;border:1px solid var(--border);border-radius:5px;color:var(--accent-strong);background:var(--surface);font-family:Segoe UI,sans-serif;font-size:.76rem;cursor:pointer}.copy-button[data-v-3fc935be]:disabled{color:var(--text-muted);cursor:not-allowed}@media(max-width:560px){.result-layout[data-v-3fc935be]{grid-template-columns:1fr}.color-preview[data-v-3fc935be]{min-height:92px}.result-actions[data-v-3fc935be]{align-items:stretch;flex-direction:column}}.roi-stage[data-v-852cfd71]{display:grid;place-items:center;min-height:320px;padding:24px;background:linear-gradient(45deg,#edf1f0 25%,transparent 25%),linear-gradient(-45deg,#edf1f0 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#edf1f0 75%),linear-gradient(-45deg,transparent 75%,#edf1f0 75%);background-color:#f7f9f8;background-position:0 0,0 10px,10px -10px,-10px 0;background-size:20px 20px}.image-frame[data-v-852cfd71]{position:relative;display:inline-block;max-width:100%;line-height:0;cursor:crosshair;touch-action:none;user-select:none;-webkit-user-select:none}.capture-image[data-v-852cfd71]{display:block;width:auto;height:auto;max-width:100%;max-height:68vh;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}.image-frame.roi-locked[data-v-852cfd71]{cursor:default;touch-action:auto}.image-frame.roi-locked .capture-image[data-v-852cfd71]{touch-action:auto}.roi-selection[data-v-852cfd71]{position:absolute;border:2px solid #40d4c4;background:#40d4c429;box-shadow:0 0 0 1px #17201fb3,inset 0 0 0 1px #ffffff73;pointer-events:none}.roi-actions[data-v-852cfd71]{display:flex;align-items:center;justify-content:space-between;gap:18px;width:100%;margin-top:16px}.roi-buttons[data-v-852cfd71]{display:flex;gap:10px;margin-left:auto}.roi-error[data-v-852cfd71]{margin:0;color:var(--danger);font-size:.84rem}.roi-empty[data-v-852cfd71]{display:grid;justify-items:center;color:var(--text-muted);text-align:center}.roi-empty strong[data-v-852cfd71]{margin-top:18px;color:var(--text)}.roi-empty small[data-v-852cfd71]{margin-top:6px}.roi-corners[data-v-852cfd71]{position:relative;width:82px;height:64px;border:1px dashed #95a6a2}.roi-corners[data-v-852cfd71]:before,.roi-corners[data-v-852cfd71]:after{position:absolute;width:14px;height:14px;border-color:var(--accent);border-style:solid;content:""}.roi-corners[data-v-852cfd71]:before{top:-2px;left:-2px;border-width:3px 0 0 3px}.roi-corners[data-v-852cfd71]:after{right:-2px;bottom:-2px;border-width:0 3px 3px 0}@media(max-width:560px){.roi-stage[data-v-852cfd71]{padding:12px}.roi-actions[data-v-852cfd71]{align-items:stretch;flex-direction:column}.roi-buttons[data-v-852cfd71]{width:100%}.roi-buttons .button[data-v-852cfd71]{flex:1}}.workflow-state[data-v-f4a65ea7]{padding:7px 11px;border:1px solid var(--border);border-radius:999px;color:var(--text-muted);background:var(--surface);font-size:.82rem;white-space:nowrap}.workflow-error[data-v-f4a65ea7]{margin:0 0 16px;padding:10px 12px;border:1px solid rgba(182,65,55,.32);border-radius:6px;color:var(--danger);background:#b641370f}.workspace-grid[data-v-f4a65ea7]{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(340px,.65fr);gap:18px;align-items:start}.camera-area[data-v-f4a65ea7]{grid-column:1}.capture-area[data-v-f4a65ea7]{grid-column:2}.roi-area[data-v-f4a65ea7]{grid-column:1}.result-area[data-v-f4a65ea7]{grid-column:2}@media(max-width:960px){.workspace-grid[data-v-f4a65ea7]{grid-template-columns:1fr}.camera-area[data-v-f4a65ea7],.capture-area[data-v-f4a65ea7],.roi-area[data-v-f4a65ea7],.result-area[data-v-f4a65ea7]{grid-column:1}}.logs-view[data-v-206a5826]{max-width:1180px}.storage-badge[data-v-206a5826]{padding:7px 11px;border:1px solid var(--border);border-radius:999px;color:var(--accent-strong);background:var(--accent-soft);font-size:.82rem;white-space:nowrap}.workflow-error[data-v-206a5826]{margin:0 0 16px;padding:10px 12px;border:1px solid rgba(182,65,55,.32);border-radius:6px;color:var(--danger);background:#b641370f}.log-toolbar[data-v-206a5826]{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-bottom:16px;padding:14px 0;border-top:1px solid var(--border);border-bottom:1px solid var(--border)}.log-toolbar>div[data-v-206a5826]{display:grid;gap:3px}.log-toolbar strong[data-v-206a5826]{font-size:.96rem}.log-toolbar span[data-v-206a5826]{color:var(--text-muted);font-size:.8rem}.danger-button[data-v-206a5826]{color:var(--danger)}.log-state[data-v-206a5826]{display:grid;justify-items:center;gap:8px;min-height:260px;place-content:center;border:1px dashed var(--border);border-radius:8px;color:var(--text-muted);text-align:center}.log-state strong[data-v-206a5826]{color:var(--text)}.loading-line[data-v-206a5826]{width:42px;height:3px;border-radius:999px;background:var(--accent);animation:loading-pulse-206a5826 .9s ease-in-out infinite alternate}@keyframes loading-pulse-206a5826{0%{opacity:.35;transform:scaleX(.55)}to{opacity:1;transform:scaleX(1)}}.log-list[data-v-206a5826]{display:grid;gap:14px}.log-entry[data-v-206a5826]{overflow:hidden;border:1px solid var(--border);border-radius:8px;background:var(--surface);box-shadow:var(--shadow)}.log-entry-header[data-v-206a5826]{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:13px 16px;border-bottom:1px solid var(--border);background:var(--surface-muted)}.log-time[data-v-206a5826]{display:flex;align-items:baseline;gap:10px}.log-time span[data-v-206a5826]{color:var(--text-muted);font-size:.78rem}.log-time strong[data-v-206a5826]{font-family:Consolas,Cascadia Mono,monospace;font-size:.98rem}.entry-meta[data-v-206a5826]{display:flex;align-items:center;gap:8px}.entry-meta>span[data-v-206a5826]{padding:4px 8px;border:1px solid var(--border);border-radius:5px;color:var(--text-muted);background:var(--surface);font-size:.75rem}.text-button[data-v-206a5826]{min-height:30px;padding:0 8px;border-radius:5px;color:var(--accent-strong);background:transparent;cursor:pointer}.text-button[data-v-206a5826]:hover:not(:disabled){background:var(--accent-soft)}.text-button[data-v-206a5826]:disabled{color:var(--text-muted);cursor:not-allowed}.danger-text[data-v-206a5826]{color:var(--danger)}.log-entry-body[data-v-206a5826]{display:grid;grid-template-columns:minmax(360px,1fr) minmax(310px,.82fr)}.log-media[data-v-206a5826]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;padding:16px}.media-button[data-v-206a5826]{position:relative;display:grid;gap:0;overflow:hidden;min-width:0;padding:0;border:1px solid var(--border);border-radius:6px;background:#edf1f0;cursor:zoom-in}.media-button img[data-v-206a5826]{display:block;width:100%;aspect-ratio:4 / 3;object-fit:contain}.media-button span[data-v-206a5826]{padding:7px 9px;border-top:1px solid var(--border);color:var(--text-muted);background:var(--surface);font-size:.76rem;text-align:left}.media-placeholder[data-v-206a5826]{display:grid;align-content:center;justify-items:center;gap:6px;min-height:180px;padding:16px;border:1px dashed var(--border);border-radius:6px;color:var(--text-muted);background:var(--surface-muted);text-align:center}.media-placeholder strong[data-v-206a5826]{color:var(--text);font-size:.86rem}.media-placeholder span[data-v-206a5826]{font-size:.76rem}.log-data[data-v-206a5826]{display:grid;align-content:start;gap:14px;padding:16px;border-left:1px solid var(--border)}.color-heading[data-v-206a5826]{display:flex;align-items:center;gap:12px}.color-swatch[data-v-206a5826]{width:48px;height:48px;flex:0 0 auto;border:1px solid var(--border);border-radius:6px}.color-heading>div[data-v-206a5826]{display:grid;gap:2px}.color-heading span[data-v-206a5826]{color:var(--text-muted);font-size:.76rem}.color-heading strong[data-v-206a5826]{font-family:Consolas,Cascadia Mono,monospace;font-size:1rem}.log-data dl[data-v-206a5826]{display:grid;gap:0;margin:0}.log-data dl>div[data-v-206a5826]{display:grid;grid-template-columns:58px minmax(0,1fr);gap:10px;align-items:baseline;padding:8px 0;border-bottom:1px solid var(--border)}.log-data dt[data-v-206a5826]{color:var(--text-muted);font-size:.76rem}.log-data dd[data-v-206a5826]{min-width:0;margin:0;font-family:Consolas,Cascadia Mono,monospace;font-size:.86rem}.request-id[data-v-206a5826]{overflow-wrap:anywhere}.upload-message[data-v-206a5826]{margin:0;color:var(--text-muted);font-size:.78rem}.pagination[data-v-206a5826]{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-top:18px;color:var(--text-muted);font-size:.82rem}.pagination>div[data-v-206a5826]{display:flex;align-items:center;gap:10px}.image-modal[data-v-206a5826]{position:fixed;z-index:50;inset:0;display:grid;place-items:center;padding:24px;background:#0e1716c7}.image-modal-content[data-v-206a5826]{display:grid;width:min(1100px,100%);max-height:calc(100vh - 48px);overflow:hidden;border:1px solid rgba(255,255,255,.24);border-radius:8px;background:#101817}.image-modal-header[data-v-206a5826]{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:10px 12px 10px 16px;color:#fff;border-bottom:1px solid rgba(255,255,255,.16)}.image-modal-header .text-button[data-v-206a5826]{color:#fff}.image-modal-content img[data-v-206a5826]{display:block;width:100%;max-height:calc(100vh - 116px);object-fit:contain}@media(max-width:900px){.log-entry-body[data-v-206a5826]{grid-template-columns:1fr}.log-data[data-v-206a5826]{border-top:1px solid var(--border);border-left:0}}@media(max-width:620px){.log-toolbar[data-v-206a5826],.log-entry-header[data-v-206a5826],.pagination[data-v-206a5826]{align-items:stretch;flex-direction:column}.entry-meta[data-v-206a5826]{flex-wrap:wrap}.log-media[data-v-206a5826]{grid-template-columns:1fr}.pagination>div[data-v-206a5826]{display:grid;grid-template-columns:1fr auto 1fr}.image-modal[data-v-206a5826]{padding:10px}}.settings-view[data-v-cf53f6b6]{max-width:920px}.settings-panel[data-v-cf53f6b6]{padding:clamp(18px,3vw,30px)}.settings-grid[data-v-cf53f6b6]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}.field[data-v-cf53f6b6]{display:grid;gap:8px}.field-wide[data-v-cf53f6b6]{grid-column:1 / -1}.field>span[data-v-cf53f6b6]{color:var(--text-muted);font-size:.84rem}.field input[data-v-cf53f6b6]{width:100%;min-height:42px;padding:0 12px;border:1px solid var(--border);border-radius:6px;outline:none;color:var(--text);background:var(--surface-muted)}.field input[data-v-cf53f6b6]:focus{border-color:var(--accent);box-shadow:0 0 0 3px #0e766e1f}.toggle-row[data-v-cf53f6b6]{display:flex;align-items:center;justify-content:space-between;gap:18px;min-height:76px;padding:14px 16px;border:1px solid var(--border);border-radius:8px;background:var(--surface-muted)}.toggle-row span[data-v-cf53f6b6]{display:grid;gap:4px}.toggle-row strong[data-v-cf53f6b6]{font-size:.9rem}.toggle-row small[data-v-cf53f6b6]{color:var(--text-muted);font-size:.78rem}.toggle-row input[data-v-cf53f6b6]{width:38px;height:20px;accent-color:var(--accent)}.settings-section-heading[data-v-cf53f6b6]{display:grid;gap:5px;padding-top:6px;border-top:1px solid var(--border)}.settings-section-heading strong[data-v-cf53f6b6]{font-size:.96rem}.settings-section-heading span[data-v-cf53f6b6]{color:var(--text-muted);font-size:.8rem}.settings-footer[data-v-cf53f6b6]{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-top:24px;padding-top:20px;border-top:1px solid var(--border)}.settings-actions[data-v-cf53f6b6]{display:flex;gap:10px;margin-left:auto}.form-message[data-v-cf53f6b6]{margin:0;font-size:.88rem}.form-message.success[data-v-cf53f6b6]{color:var(--success)}.form-message.error[data-v-cf53f6b6]{color:var(--danger)}@media(max-width:680px){.settings-grid[data-v-cf53f6b6]{grid-template-columns:1fr}.field-wide[data-v-cf53f6b6]{grid-column:1}.settings-footer[data-v-cf53f6b6]{align-items:stretch;flex-direction:column}.settings-actions[data-v-cf53f6b6]{margin-left:0}.settings-actions .button[data-v-cf53f6b6]{flex:1}}:root{color:#182326;background:#eef2f1;font-family:Segoe UI Variable,Segoe UI,Microsoft YaHei UI,sans-serif;font-synthesis:none;text-rendering:optimizeLegibility;letter-spacing:0;--surface: #ffffff;--surface-muted: #f5f8f7;--surface-strong: #e3eae8;--border: #cad5d2;--text: #182326;--text-muted: #60706d;--accent: #0e766e;--accent-strong: #095c56;--accent-soft: #d8efeb;--danger: #b64137;--warning: #a06414;--success: #247a55;--shadow: 0 14px 35px rgba(25, 43, 40, .08)}*{box-sizing:border-box}html,body,#app{min-width:320px;min-height:100%;margin:0}body{min-height:100vh;background:linear-gradient(135deg,rgba(14,118,110,.07),transparent 36%),#eef2f1}button,input{font:inherit}button{border:0}a{color:inherit;text-decoration:none}.app-shell{min-height:100vh}.app-header{position:sticky;z-index:10;top:0;display:grid;grid-template-columns:minmax(210px,1fr) auto minmax(210px,1fr);align-items:center;gap:24px;min-height:72px;padding:12px clamp(18px,4vw,54px);border-bottom:1px solid rgba(202,213,210,.9);background:#fffffff0;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.brand{display:inline-flex;align-items:center;gap:12px;width:max-content}.brand-mark{width:12px;height:36px;border-radius:3px;background:linear-gradient(180deg,#12a095,#d58128);box-shadow:0 0 0 5px #0e766e1a}.brand strong,.brand small{display:block}.brand strong{font-size:1.08rem;line-height:1.2}.brand small{margin-top:3px;color:var(--text-muted);font-size:.75rem}.main-nav{display:flex;gap:6px;padding:4px;border:1px solid var(--border);border-radius:8px;background:var(--surface-muted)}.main-nav a{min-width:82px;padding:8px 14px;border-radius:6px;color:var(--text-muted);font-size:.9rem;text-align:center}.main-nav a.router-link-active{color:var(--accent-strong);background:var(--surface);box-shadow:0 2px 8px #192b2814}.app-main{width:min(1440px,100%);margin:0 auto;padding:clamp(20px,3vw,40px) clamp(16px,4vw,54px) 56px}.page-heading{display:flex;align-items:end;justify-content:space-between;gap:24px;margin-bottom:22px}.page-heading h1{margin:0;font-size:clamp(1.65rem,2.4vw,2.35rem);line-height:1.15}.page-heading p{max-width:600px;margin:7px 0 0;color:var(--text-muted);line-height:1.55}.panel{min-width:0;overflow:hidden;border:1px solid var(--border);border-radius:8px;background:var(--surface);box-shadow:var(--shadow)}.panel-header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 16px;border-bottom:1px solid var(--border);background:var(--surface-muted)}.panel-header h2{margin:0;font-size:.96rem;font-weight:650}.panel-body{padding:16px}.muted{color:var(--text-muted)}.button{display:inline-flex;align-items:center;justify-content:center;min-height:38px;padding:0 16px;border-radius:6px;color:#fff;background:var(--accent);cursor:pointer;transition:background .14s ease,transform .14s ease}.button:hover:not(:disabled){background:var(--accent-strong)}.button:active:not(:disabled){transform:translateY(1px)}.button.secondary{color:var(--text);border:1px solid var(--border);background:var(--surface)}.button.secondary:hover:not(:disabled){background:var(--surface-strong)}.button:disabled{color:#8b9896;background:#dfe5e3;cursor:not-allowed}@media(max-width:760px){.app-header{grid-template-columns:1fr auto;gap:10px 14px}.main-nav{grid-column:1 / -1;grid-row:2;width:100%}.main-nav a{flex:1}.app-main{padding-top:22px}.page-heading{align-items:start;flex-direction:column}}
