:root{--bg: #f4f5f7;--surface: #ffffff;--surface-soft: #f8f9fa;--border: #e4e7ec;--border-strong: #d0d5dd;--text: #101828;--text-secondary: #475467;--text-muted: #98a2b3;--primary: #0f766e;--primary-strong: #115e59;--primary-soft: #ecfdf5;--danger: #b42318;--danger-soft: #fef3f2;--amber: #b7791f;--radius-sm: 8px;--radius-md: 12px;--radius-lg: 16px;--shadow-sm: 0 1px 2px rgb(16 24 40 / .05);--shadow-md: 0 1px 3px rgb(16 24 40 / .08), 0 6px 20px rgb(16 24 40 / .06);--shadow-lg: 0 8px 24px rgb(16 24 40 / .1), 0 20px 48px rgb(16 24 40 / .08);color:var(--text);background:var(--bg);font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}*{box-sizing:border-box}body{margin:0;min-width:320px;min-height:100vh}button,input,select{font:inherit}button{cursor:pointer}:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.app-shell{display:grid;grid-template-columns:minmax(0,1fr) 400px;min-height:100vh;background:var(--bg)}.workspace{display:flex;min-width:0;flex-direction:column;gap:18px;padding:24px 28px}.topbar{display:flex;align-items:center;justify-content:space-between;gap:18px;flex-wrap:wrap}.brand-block{min-width:0}.brand-logo{display:inline-flex;align-items:center;gap:12px}.logo-mark{display:inline-grid;place-items:center;width:42px;height:42px;border-radius:var(--radius-md);background:linear-gradient(135deg,var(--primary) 0%,#0d9488 100%);color:#fff;box-shadow:var(--shadow-sm)}.logo-mark span{font-size:1.25rem;font-weight:700}.logo-text{display:grid;line-height:1.2}.logo-text strong{color:var(--text);font-size:1.15rem;font-weight:700;letter-spacing:-.01em}.logo-text small{margin-top:2px;color:var(--text-muted);font-size:.78rem;font-weight:500}.eyebrow{margin:0 0 4px;color:var(--text-muted);font-size:.72rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase}.topbar-actions{display:flex;align-items:center;justify-content:flex-end;gap:10px;flex-wrap:wrap}.gallery-open-button{display:inline-flex;align-items:center;gap:8px;min-height:40px;padding:0 14px;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);color:var(--text);font-size:.88rem;font-weight:600;white-space:nowrap;box-shadow:var(--shadow-sm);transition:border-color .14s ease,box-shadow .14s ease}.gallery-open-button:hover{border-color:var(--border-strong);box-shadow:var(--shadow-md)}.gallery-open-button small{display:inline-grid;place-items:center;min-width:20px;height:20px;padding:0 5px;border-radius:999px;background:var(--primary);color:#fff;font-size:.72rem;font-weight:700}.language-controls{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:6px 8px;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-sm)}.language-controls label{display:inline-grid;gap:2px;color:var(--text-muted);font-size:.66rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase}.language-controls select{min-width:120px;height:32px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-soft);color:var(--text);padding:0 8px;font-size:.86rem;font-weight:600;text-transform:none;transition:border-color .14s ease}.language-controls select:hover{border-color:var(--border-strong)}.gallery-flow{display:grid;gap:10px;min-width:0}.gallery-flow-header{display:flex;align-items:center;gap:12px;color:var(--text-secondary);font-size:.78rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase}.gallery-flow-header:after{content:"";height:1px;flex:1;background:var(--border)}.gallery-rail{display:grid;grid-auto-flow:column;grid-auto-columns:164px;gap:12px;min-width:0;overflow-x:auto;padding:2px 2px 10px;scroll-snap-type:x proximity}.gallery-rail::-webkit-scrollbar,.drawer-gallery-list::-webkit-scrollbar,.learning-panel::-webkit-scrollbar{width:8px;height:8px}.gallery-rail::-webkit-scrollbar-thumb,.drawer-gallery-list::-webkit-scrollbar-thumb,.learning-panel::-webkit-scrollbar-thumb{border:2px solid transparent;border-radius:999px;background:#10182838;background-clip:padding-box}.gallery-add-card,.flow-card{position:relative;width:164px;height:104px;flex:0 0 auto;scroll-snap-align:start;overflow:hidden;border-radius:var(--radius-md)}.gallery-add-card{display:grid;place-items:center;align-content:center;gap:6px;border:1.5px dashed var(--border-strong);background:var(--surface);color:var(--text-secondary);font-size:.82rem;font-weight:600;cursor:pointer;transition:border-color .14s ease,color .14s ease,background .14s ease}.gallery-add-card:hover{border-color:var(--primary);color:var(--primary);background:var(--primary-soft)}.flow-card{border:2px solid transparent;background:#16181d;box-shadow:var(--shadow-sm);cursor:pointer;transition:transform .14s ease,box-shadow .14s ease,border-color .14s ease}.flow-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-md)}.flow-card.active{border-color:var(--primary)}.flow-card img,.gallery-tile img{width:100%;height:100%;object-fit:cover;display:block}.flow-card-shade{position:absolute;inset:0;background:linear-gradient(180deg,#00000005 40%,#000000ad);pointer-events:none}.flow-card-meta{position:absolute;right:10px;bottom:8px;left:10px;color:#fff}.flow-card-meta strong,.flow-card-meta small,.gallery-tile-meta strong,.gallery-tile-meta small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.flow-card-meta strong{font-size:.82rem;font-weight:600;line-height:1.2}.flow-card-meta small{margin-top:1px;color:#ffffffbf;font-size:.72rem}.flow-card-actions{position:absolute;top:7px;right:7px;display:flex;gap:6px;opacity:0;transform:translateY(-4px);transition:opacity .15s ease,transform .15s ease}.flow-card:hover .flow-card-actions,.flow-card:focus-within .flow-card-actions{opacity:1;transform:translateY(0)}.overlay-controls{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.rerun-button,.overlay-controls label{display:inline-flex;align-items:center;gap:8px;min-height:36px;padding:0 12px;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);color:var(--text-secondary);font-size:.83rem;font-weight:600;box-shadow:var(--shadow-sm);transition:border-color .14s ease,color .14s ease;-webkit-user-select:none;user-select:none}.overlay-controls label:hover{border-color:var(--border-strong);color:var(--text)}.rerun-button{border-color:var(--primary);background:var(--primary);color:#fff;transition:background .14s ease,border-color .14s ease}.rerun-button:hover:not(:disabled){border-color:var(--primary-strong);background:var(--primary-strong)}.rerun-button:disabled{cursor:not-allowed;border-color:var(--border);background:var(--surface-soft);color:var(--text-muted)}.overlay-controls input{width:15px;height:15px;margin:0;accent-color:var(--primary)}.upload-zone{position:relative;display:grid;place-items:center;min-height:560px;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface);overflow:hidden;box-shadow:var(--shadow-md)}.upload-zone.has-image{border-color:#1c2027;background:#12151a}.upload-zone input[type=file]{position:absolute;width:1px;height:1px;opacity:0}.upload-empty{display:grid;place-items:center;align-content:center;gap:14px;width:min(440px,calc(100% - 48px));min-height:340px;border:1.5px dashed var(--border-strong);border-radius:var(--radius-lg);color:var(--text-secondary);font-weight:600;cursor:pointer;background:var(--surface-soft);transition:border-color .16s ease,color .16s ease,background .16s ease}.upload-empty:hover{border-color:var(--primary);color:var(--primary);background:var(--primary-soft)}.image-stage{position:relative;display:grid;place-items:center;width:100%;height:100%;min-height:560px}.change-photo-button{position:absolute;z-index:4;top:16px;left:16px;display:inline-flex;align-items:center;gap:7px;min-height:36px;padding:0 13px;border-radius:999px;background:#ffffffeb;color:var(--text);font-size:.84rem;font-weight:600;box-shadow:0 4px 16px #0000003d;cursor:pointer;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);transition:background .14s ease}.change-photo-button:hover{background:#fff}.image-frame{position:relative;display:inline-grid;max-width:100%;max-height:calc(100vh - 250px)}.image-frame img{max-width:100%;max-height:calc(100vh - 250px);width:auto;height:auto;object-fit:contain;display:block}.overlay{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.overlay g{pointer-events:auto;cursor:pointer}.overlay rect{filter:drop-shadow(0 1px 2px rgb(0 0 0 / .35));transition:stroke-width .12s ease}.overlay polygon{mix-blend-mode:multiply}.overlay-label-layer{position:absolute;inset:0;z-index:2;pointer-events:none}.yolo-label{position:absolute;display:inline-flex;align-items:center;gap:5px;max-width:min(220px,50%);min-height:24px;border:0;border-radius:6px 6px 6px 2px;color:#fff;font-size:12.5px;font-weight:600;line-height:1.1;overflow:hidden;padding:4px 8px 4px 6px;white-space:nowrap;box-shadow:0 2px 8px #0006;pointer-events:auto;transform:translateY(-100%);transition:filter .12s ease}.yolo-label span{overflow:hidden;text-overflow:ellipsis}.yolo-label:hover{filter:brightness(1.12)}.yolo-label.inside{transform:none;border-radius:2px 6px 6px}.yolo-label.selected{outline:2px solid rgb(255 255 255 / .95);outline-offset:1px}.selected-shape rect,.selected-shape polygon{filter:drop-shadow(0 3px 6px rgb(0 0 0 / .4))}.loading-panel{position:absolute;right:18px;bottom:18px;display:inline-flex;align-items:center;gap:10px;min-height:42px;padding:0 15px;border-radius:999px;background:#fffffff0;color:var(--text);font-size:.88rem;font-weight:600;box-shadow:0 6px 24px #0000003d;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.process-log-stack{position:fixed;right:422px;bottom:20px;z-index:5;display:grid;gap:8px;width:min(340px,calc(100% - 36px));pointer-events:none}.process-log{display:grid;gap:7px;padding:12px 13px;border:1px solid rgb(255 255 255 / .14);border-radius:var(--radius-md);background:#171c24eb;color:#f8fafc;box-shadow:var(--shadow-lg);animation:processToast 5.2s ease forwards;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.process-log.done{background:#065f54f0}.process-log.error{background:#8c2218f0;animation-duration:7.2s}.process-log-topline{display:flex;align-items:center;gap:8px;min-width:0}.process-log-topline strong{display:inline-flex;align-items:center;justify-content:center;min-width:40px;height:22px;border-radius:999px;background:#ffffff24;font-size:.74rem;font-weight:700}.process-log-topline span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:700;font-size:.9rem}.process-log p{margin:0;color:#f8fafcb8;font-size:.8rem;line-height:1.4}.process-progress{width:100%;height:3px;overflow:hidden;border-radius:999px;background:#ffffff29}.process-progress span{display:block;height:100%;border-radius:inherit;background:#34d399;transition:width .18s ease}.process-log.done .process-progress span{background:#a7f3d0}.process-log.error .process-progress span{background:#fecaca}@keyframes processToast{0%{opacity:0;transform:translateY(8px)}9%,78%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-8px)}}.spin{animation:spin .9s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.error-banner{padding:12px 15px;border:1px solid #fda29b;border-radius:var(--radius-md);background:var(--danger-soft);color:var(--danger);font-size:.88rem;font-weight:500}.learning-panel{position:sticky;top:0;display:flex;flex-direction:column;gap:16px;height:100vh;padding:24px 22px;overflow:auto;border-left:1px solid var(--border);background:var(--surface)}.panel-header{display:flex;align-items:center;gap:9px;color:var(--text);font-size:1rem;font-weight:700}.panel-header small{margin-left:auto;padding:3px 9px;border-radius:999px;background:var(--primary-soft);color:var(--primary-strong);font-size:.7rem;font-weight:600}.panel-action{display:inline-grid;place-items:center;width:32px;height:32px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-secondary);transition:border-color .14s ease,color .14s ease}.panel-action:hover:not(:disabled){border-color:var(--border-strong);color:var(--text)}.panel-action.text-action{display:inline-flex;gap:6px;width:auto;height:30px;padding:0 10px;font-size:.76rem;font-weight:600;text-transform:none}.panel-action:disabled{cursor:not-allowed;color:var(--text-muted)}.empty-panel{display:grid;place-items:center;align-content:center;gap:12px;min-height:280px;border:1.5px dashed var(--border);border-radius:var(--radius-lg);color:var(--text-muted);text-align:center}.empty-panel p{max-width:240px;margin:0;font-size:.9rem;line-height:1.5}.object-list{display:grid;gap:10px}.object-item{width:100%;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);overflow:hidden;box-shadow:var(--shadow-sm);transition:border-color .14s ease,box-shadow .14s ease}.object-item:hover{border-color:var(--border-strong)}.object-item.selected{border-color:var(--primary);box-shadow:0 0 0 1px var(--primary),var(--shadow-sm)}.object-summary{display:grid;grid-template-columns:10px minmax(0,1fr) 32px 20px;align-items:center;gap:12px;min-height:58px;padding:10px 12px;cursor:pointer}.object-item strong,.object-item small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.object-item strong{color:var(--text);font-size:1.02rem;font-weight:700;letter-spacing:-.01em}.object-item small{margin-top:2px;color:var(--text-secondary);font-size:.8rem}.word-line{min-width:0}.inline-icon-button{display:inline-grid;place-items:center;width:32px;height:32px;border:1px solid var(--border);border-radius:999px;background:var(--surface);color:var(--primary);transition:border-color .14s ease,background .14s ease}.inline-icon-button:hover{border-color:var(--primary);background:var(--primary-soft)}.chevron{color:var(--text-muted);transition:transform .15s ease}.chevron.expanded{transform:rotate(180deg)}.color-dot{width:10px;height:10px;border-radius:999px;box-shadow:0 0 0 3px #1018280d}.object-details{display:grid;gap:12px;padding:2px 14px 14px;border-top:1px solid var(--surface-soft)}dl{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;margin:8px 0 0}dl .span-2{grid-column:span 2}dl div{min-width:0;padding:8px 10px;border-radius:var(--radius-sm);background:var(--surface-soft)}dt{color:var(--text-muted);font-size:.68rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase}dd{margin:3px 0 0;color:var(--text);font-size:.88rem;font-weight:600;overflow-wrap:anywhere}.example-block{display:grid;gap:6px;margin:0;padding:10px 12px;border-left:3px solid var(--primary);border-radius:0 var(--radius-sm) var(--radius-sm) 0;background:var(--surface-soft)}.example,.translation,.notes p{margin:0;line-height:1.5}.example{color:var(--text);font-size:.98rem;font-weight:600}.empty-example{color:var(--text-muted);font-size:.86rem;font-weight:500}.translation{color:var(--text-secondary);font-size:.86rem}.confidence{margin:0;color:var(--text-muted);font-size:.74rem;font-weight:500}.notes{display:grid;gap:8px;padding:12px 14px;border:1px solid #fde8c8;border-radius:var(--radius-md);background:#fffaf0;color:#92610e;font-size:.8rem}.gallery-drawer-backdrop{position:fixed;inset:0;z-index:20;display:flex;justify-content:flex-end;background:#10182870;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.gallery-drawer{display:flex;flex-direction:column;gap:16px;width:min(620px,94vw);height:100%;padding:24px;background:var(--surface);box-shadow:var(--shadow-lg)}.drawer-header{display:grid;grid-template-columns:minmax(0,1fr) 32px 32px;align-items:center;gap:10px}.drawer-header h2{margin:0;color:var(--text);font-size:1.4rem;font-weight:700;letter-spacing:-.01em}.drawer-gallery-list{overflow:auto;padding-right:2px}.gallery-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:12px}.gallery-tile{position:relative;min-height:150px;border:2px solid transparent;border-radius:var(--radius-md);background:#16181d;overflow:hidden;cursor:pointer;transition:transform .14s ease,box-shadow .14s ease}.gallery-tile:hover{transform:translateY(-2px);box-shadow:var(--shadow-md)}.gallery-tile.active{border-color:var(--primary)}.gallery-tile-meta{position:absolute;right:10px;bottom:9px;left:10px;z-index:1;color:#fff}.gallery-tile:after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,#00000005 40%,#000000ad)}.gallery-tile-meta strong{font-size:.88rem;font-weight:600}.gallery-tile-meta small,.gallery-empty{color:#ffffffbf;font-size:.76rem}.gallery-tile-actions{position:absolute;top:8px;right:8px;z-index:2;display:flex;gap:6px}.mini-icon{display:inline-grid;place-items:center;width:28px;height:28px;border:1px solid rgb(255 255 255 / .4);border-radius:999px;background:#ffffffe6;color:var(--text-secondary);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);transition:background .14s ease}.mini-icon:hover{background:#fff}.mini-icon.favorite{color:var(--amber)}.mini-icon.danger{color:var(--danger)}.gallery-empty{margin:0;color:var(--text-muted)}@media(max-width:1120px){.app-shell{grid-template-columns:1fr}.learning-panel{position:relative;height:auto;min-height:420px;border-left:0;border-top:1px solid var(--border)}.image-frame,.image-frame img{max-height:68vh}.process-log-stack{right:18px}}@media(max-width:760px){.workspace,.learning-panel{padding:16px}.topbar{flex-direction:column;align-items:stretch}.topbar-actions{justify-content:flex-start}.language-controls{width:100%}.language-controls label{flex:1}.language-controls select{width:100%;min-width:0}.gallery-rail{grid-auto-columns:140px}.gallery-add-card,.flow-card{width:140px;height:94px}.upload-zone,.image-stage{min-height:380px}.process-log-stack{right:12px;bottom:12px;width:min(320px,calc(100% - 24px))}.image-frame,.image-frame img{max-height:58vh}dl{grid-template-columns:1fr}dl .span-2{grid-column:auto}}
