:root{font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,SF Pro Display,Segoe UI,sans-serif;color:#1d1d1f;background:#f5f5f7;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;--blue: #007aff;--green: #34c759;--orange: #ff9500;--red: #ff2d55;--text-muted: #6e6e73;--surface: rgba(255, 255, 255, .86);--line: rgba(0, 0, 0, .1);--shadow: 0 18px 50px rgba(0, 0, 0, .08)}*{box-sizing:border-box}body{margin:0;min-width:1120px;min-height:100vh;background:linear-gradient(180deg,#fbfbfd,#f5f5f7 48%,#eeeff2)}button,input,textarea{font:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.6}.app{min-height:100vh;display:grid;grid-template-rows:auto auto 1fr}.toolbar{height:72px;padding:12px 18px;display:flex;align-items:center;justify-content:space-between;gap:24px;background:#ffffffd1;border-bottom:1px solid var(--line);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);position:sticky;top:0;z-index:10}.brand{display:flex;align-items:center;gap:12px;min-width:260px}.brand-mark{width:42px;height:42px;display:grid;place-items:center;border-radius:12px;background:#1d1d1f;color:#fff;font-weight:700;letter-spacing:0}.brand h1{font-size:19px;line-height:1.1;margin:0;letter-spacing:0}.brand span{color:var(--text-muted);font-size:12px}.toolbar-actions{display:flex;align-items:center;gap:10px}.toolbar-file-button,.primary-button,.secondary-button,.icon-button{border:0;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:36px;padding:0 14px;white-space:nowrap;transition:transform .16s ease,background .16s ease,box-shadow .16s ease}.toolbar-file-button,.primary-button{background:var(--blue);color:#fff;box-shadow:0 8px 18px #007aff38}.secondary-button,.icon-button{background:#f2f2f4;color:#1d1d1f}.toolbar-file-button:hover,.primary-button:hover,.secondary-button:hover,.icon-button:hover{transform:translateY(-1px)}.hidden-file-input{display:none}.icon-button{width:34px;height:34px;padding:0}.icon-button.subtle{background:transparent;color:var(--text-muted);box-shadow:none}.notice{margin:12px 18px 0;padding:10px 14px;border-radius:8px;color:#7a3100;background:#fff3d6;border:1px solid #ffd58a}.workbench{height:calc(100vh - 72px);min-height:620px;display:grid;grid-template-columns:260px minmax(520px,1fr) 320px;gap:14px;padding:14px;overflow:hidden}.sidebar,.right-rail,.canvas-shell{min-height:0}.sidebar{display:grid;grid-template-rows:auto auto minmax(0,1fr);gap:12px}.project-status,.ai-controls,.panel,.canvas-shell{background:var(--surface);border:1px solid var(--line);border-radius:8px;box-shadow:var(--shadow)}.project-status{padding:12px;display:grid;grid-template-columns:1fr 1fr;gap:10px}.status-card{padding:10px;border-radius:8px;background:#f7f7f9}.status-card span,.thumbnail-meta small,.brand span,.muted,.canvas-toolbar p,.empty-sidebar span{color:var(--text-muted)}.status-card strong{display:block;margin-top:4px;font-size:24px}.progress-card{grid-column:1 / -1}.progress-bar{height:6px;margin-top:8px;overflow:hidden;border-radius:999px;background:#e2e5e9}.progress-bar span{display:block;height:100%;border-radius:inherit;background:var(--blue)}.autosave{grid-column:1 / -1;min-height:30px;display:flex;align-items:center;gap:8px;color:var(--green);font-size:13px}.autosave-error{color:var(--red)}.sidebar-filters{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.filter-tab{min-height:34px;padding:7px 9px;display:flex;align-items:center;justify-content:space-between;gap:8px;border:1px solid var(--line);border-radius:8px;color:#1d1d1f;background:#ffffffc7}.filter-tab span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px}.filter-tab strong{font-size:12px;color:var(--text-muted)}.filter-tab.active{border-color:#007aff80;color:var(--blue);background:#eef6ff}.thumbnail-list{overflow:auto;display:flex;flex-direction:column;gap:8px;padding-right:2px}.thumbnail-item{width:100%;min-height:68px;border:1px solid var(--line);border-radius:8px;padding:8px;display:grid;grid-template-columns:52px 1fr 18px;align-items:center;gap:10px;text-align:left;background:#ffffffc7}.thumbnail-item.active{border-color:#007aff80;background:#eef6ff}.thumbnail-item.status-ai-pending{border-color:#ff950057}.thumbnail-preview{width:52px;height:52px;display:grid;place-items:center;overflow:hidden;border-radius:6px;background:#e9e9ed;color:var(--text-muted)}.thumbnail-preview img{width:100%;height:100%;object-fit:cover}.thumbnail-meta{min-width:0;display:grid;gap:4px}.thumbnail-meta strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px}.processed-icon{color:var(--green)}.empty-sidebar,.empty-canvas{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:28px 18px;min-height:260px;text-align:center;color:var(--text-muted)}.empty-sidebar p,.empty-canvas h2,.empty-canvas p{margin:0}.canvas-shell{min-width:0;display:grid;grid-template-rows:auto 1fr;overflow:hidden}.canvas-toolbar{min-height:48px;padding:10px 12px;display:flex;align-items:center;justify-content:space-between;gap:14px;border-bottom:1px solid var(--line)}.canvas-toolbar p{margin:0;font-size:13px}.zoom-controls{display:inline-flex;align-items:center;gap:8px;font-size:13px}.canvas-viewport{min-height:0;overflow:auto;display:grid;place-items:start center;padding:28px;background:#dfe1e6;position:relative}.annotation-svg{background:#fff;box-shadow:0 20px 60px #0000002e;touch-action:none;-webkit-user-select:none;user-select:none}.annotation-svg.pan-mode{cursor:grab}.annotation-rect{fill:transparent;stroke-width:3;vector-effect:non-scaling-stroke;cursor:move}.annotation-rect.selected{stroke-dasharray:8 5}.annotation-rect.ai-pending{fill:#ff950014;stroke-dasharray:7 5}.annotation-rect.draft{fill:#007aff17;stroke-dasharray:6 4}.annotation-label{paint-order:stroke;stroke:#fff;stroke-width:5;font-size:16px;font-weight:700;pointer-events:none}.resize-handle{fill:#fff;stroke:#1d1d1f;stroke-width:1;vector-effect:non-scaling-stroke;cursor:nwse-resize}.resize-handle-hit-area{fill:transparent;stroke:transparent;pointer-events:all}.resize-handle,.resize-handle-hit-area{vector-effect:non-scaling-stroke}.resize-handle-n,.resize-handle-s{cursor:ns-resize}.resize-handle-e,.resize-handle-w{cursor:ew-resize}.resize-handle-ne,.resize-handle-sw{cursor:nesw-resize}.resize-handle-nw,.resize-handle-se{cursor:nwse-resize}.canvas-context-menu{position:fixed;z-index:20;min-width:132px;padding:4px;border:1px solid var(--line);border-radius:8px;background:#fff;box-shadow:0 12px 28px #00000029}.canvas-context-menu button{width:100%;min-height:30px;border:0;border-radius:6px;padding:0 9px;text-align:left;color:var(--red);background:transparent}.canvas-context-menu button:hover{background:#fff1f4}.annotation-class-menu{position:fixed;z-index:20;min-width:160px;max-height:240px;padding:4px;border:1px solid var(--line);border-radius:8px;background:#fff;box-shadow:0 12px 28px #00000029;overflow-y:auto}.annotation-class-menu button{width:100%;min-height:32px;border:0;border-radius:6px;padding:0 9px;display:flex;align-items:center;gap:8px;text-align:left;color:#1d1d1f;background:transparent}.annotation-class-menu button:hover:not(:disabled){background:#f2f2f7}.annotation-class-menu button.is-current{font-weight:600;background:#eef6ff}.annotation-class-menu button:disabled{cursor:default;opacity:1}.right-rail{display:grid;grid-template-rows:minmax(190px,1fr) auto minmax(190px,1fr);gap:12px;height:100%;overflow:hidden}.ai-controls{padding:12px}.ai-controls-header{display:grid;grid-template-columns:24px 1fr auto;align-items:center;gap:8px;margin-bottom:10px}.ai-controls-icon{width:24px;height:24px;display:grid;place-items:center;border-radius:8px;color:var(--blue);background:#eef6ff}.ai-controls-header strong,.ai-pending-count,.confidence-control span,.confidence-control strong{font-size:13px}.ai-pending-count{color:var(--orange)}.confidence-control{display:grid;gap:8px}.confidence-control+.confidence-control{margin-top:10px}.ai-model-control{display:grid;gap:6px;margin-bottom:10px}.ai-model-control span,.ai-model-control small{color:var(--text-muted);font-size:12px}.ai-model-control select{width:100%;min-height:36px;border:1px solid var(--line);border-radius:8px;padding:7px 9px;color:#1d1d1f;background:#fff}.confidence-control span{display:flex;justify-content:space-between;gap:8px;color:var(--text-muted)}.confidence-control strong{color:#1d1d1f}.confidence-control input{width:100%}.ai-actions{display:grid;grid-template-columns:1fr;gap:8px;margin-top:12px}.ai-actions .primary-button,.ai-actions .secondary-button{width:100%}.ai-error{margin:10px 0 0;color:var(--red);font-size:12px}.ai-run-summary{margin-top:10px;padding:8px 9px;border-radius:8px;background:#f7f7f9;color:var(--text-muted);font-size:12px}.ai-run-summary p{margin:5px 0 0;color:#7a3100}.panel{min-height:0;padding:14px;overflow:auto}.panel-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.panel h2{margin:0;font-size:15px}.class-list,.annotation-list{display:grid;gap:8px}.class-row,.annotation-row{display:grid;grid-template-columns:1fr auto auto;gap:6px;align-items:center}.class-chip,.annotation-row>button:first-child{border:1px solid var(--line);border-radius:8px;min-height:38px;padding:7px 10px;display:flex;align-items:center;gap:8px;color:#1d1d1f;background:#fff;text-align:left}.class-chip.selected,.annotation-row.selected>button:first-child{border-color:var(--class-color, var(--blue));background:color-mix(in srgb,var(--class-color, var(--blue)) 12%,#fff)}.annotation-row.ai-pending>button:first-child{border-color:#ff950073;background:#fff7eb}.annotation-row.ai-pending.selected>button:first-child{border-color:var(--orange);background:color-mix(in srgb,var(--orange) 18%,#fff)}.class-swatch{width:12px;height:12px;flex:0 0 auto;border-radius:999px;background:var(--class-color, var(--blue))}.class-form{margin-top:14px;display:grid;gap:10px}.class-form label{display:grid;gap:6px;font-size:12px;color:var(--text-muted)}.class-form input,.class-form textarea{width:100%;border:1px solid var(--line);border-radius:8px;padding:9px 10px;background:#ffffffe0;color:#1d1d1f;resize:vertical}.empty-toggle{min-height:38px;margin-bottom:12px;display:flex;align-items:center;gap:8px;color:#1d1d1f}.annotation-row>button:first-child{min-width:0;justify-content:flex-start}.annotation-row strong,.annotation-row small{display:block}.annotation-row small{color:var(--text-muted);margin-top:3px}.annotation-row.ai-pending small:last-child{color:var(--orange)}@media(max-width:1180px){body{min-width:980px}.workbench{grid-template-columns:220px minmax(460px,1fr) 280px}}
