.camera-container{flex-direction:column;align-items:center;gap:1rem;display:flex}.camera-start{background:#1a1a2e;border:2px dashed #444;border-radius:16px;flex-direction:column;align-items:center;gap:1.5rem;width:100%;max-width:500px;padding:3rem 2rem;display:flex}.camera-icon{font-size:4rem}.camera-start p{color:#aaa;text-align:center;font-size:1rem}.camera-buttons{flex-wrap:wrap;justify-content:center;gap:1rem;display:flex}.camera-live{background:#000;border-radius:12px;width:100%;max-width:640px;position:relative;overflow:hidden}.camera-video{object-fit:cover;background:#000;border-radius:12px;width:100%;min-height:320px;display:block}.camera-focus-overlay{pointer-events:none;justify-content:center;align-items:center;display:flex;position:absolute;inset:0 0 70px}.focus-reticle{border-radius:16px;flex-direction:column;justify-content:flex-end;align-items:center;width:260px;max-width:75%;height:260px;max-height:75%;padding-bottom:12px;display:flex;position:relative;box-shadow:0 0 0 9999px #00000052}.focus-corner{border-style:solid;border-color:#22c55e;width:28px;height:28px;position:absolute}.focus-corner.top-left{border-width:4px 0 0 4px;border-top-left-radius:12px;top:0;left:0}.focus-corner.top-right{border-width:4px 4px 0 0;border-top-right-radius:12px;top:0;right:0}.focus-corner.bottom-left{border-width:0 0 4px 4px;border-bottom-left-radius:12px;bottom:0;left:0}.focus-corner.bottom-right{border-width:0 4px 4px 0;border-bottom-right-radius:12px;bottom:0;right:0}.focus-hint{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);color:#f1f5f9;letter-spacing:.02em;background:#0f172abf;border:1px solid #22c55e66;border-radius:20px;align-items:center;gap:6px;padding:4px 12px;font-size:.8rem;font-weight:600;display:flex}.camera-controls{background:#0009;justify-content:center;align-items:center;gap:1.5rem;padding:1rem;display:flex;position:absolute;bottom:0;left:0;right:0}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary:hover:not(:disabled){background:#15803d}.btn-secondary{color:#e5e7eb;background:#374151}.btn-secondary:hover:not(:disabled){background:#4b5563}.btn-capture{color:#000;background:#fff;border:3px solid #16a34a;border-radius:50%;justify-content:center;align-items:center;width:64px;height:64px;padding:0;font-size:1.5rem;display:flex}.btn-capture:hover:not(:disabled){border-color:#22c55e;transform:scale(1.05)}.loading-overlay{z-index:100;color:#fff;background:#000000b3;flex-direction:column;justify-content:center;align-items:center;gap:1rem;font-size:1.2rem;display:flex;position:fixed;inset:0}.spinner{border:4px solid #fff3;border-top-color:#16a34a;border-radius:50%;width:48px;height:48px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.error-banner{color:#fecaca;text-align:center;background:#991b1b;border-radius:10px;width:100%;max-width:500px;padding:.75rem 1.25rem}.bbox-selector-wrapper{flex-direction:column;gap:.75rem;width:100%;display:flex}.bbox-image-stage{-webkit-user-select:none;user-select:none;touch-action:none;background:#09090f;border:2px solid #2d2d44;border-radius:12px;width:100%;transition:border-color .2s;position:relative;overflow:hidden;box-shadow:0 4px 24px #0006}.bbox-image-stage.drawing-mode{cursor:crosshair;border-color:#38bdf8;box-shadow:0 0 20px #38bdf840}.bbox-source-image{object-fit:contain;pointer-events:none;width:100%;max-height:380px;display:block}.bbox-overlay-rect{pointer-events:none;box-sizing:border-box;z-index:10;border:2.5px solid #10b981;border-radius:6px;position:absolute}.bbox-overlay-rect.is-drawing{border-style:dashed}.bbox-overlay-rect.is-customized{border-width:3px}.bbox-tag{color:#fff;white-space:nowrap;z-index:12;border-radius:4px;align-items:center;gap:.35rem;padding:.2rem .55rem;font-size:.75rem;font-weight:700;display:inline-flex;position:absolute;top:-28px;left:-2px;box-shadow:0 2px 8px #0006}@media (height<=500px){.bbox-tag{top:2px}}.bbox-tag-badge{text-transform:uppercase;letter-spacing:.5px;background:#0006;border-radius:3px;padding:.1rem .35rem;font-size:.65rem}.bbox-handle{background:#fff;border:2px solid;border-radius:2px;width:9px;height:9px;position:absolute;box-shadow:0 0 4px #0009}.bbox-handle.tl{top:-5px;left:-5px}.bbox-handle.tr{top:-5px;right:-5px}.bbox-handle.bl{bottom:-5px;left:-5px}.bbox-handle.br{bottom:-5px;right:-5px}.bbox-instruction-hint{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);color:#e2e8f0;pointer-events:none;white-space:nowrap;z-index:15;background:#0f172ad9;border:1px solid #38bdf866;border-radius:9999px;padding:.4rem .9rem;font-size:.78rem;font-weight:500;animation:2s ease-in-out infinite pulse-subtle;position:absolute;bottom:12px;left:50%;transform:translate(-50%);box-shadow:0 4px 12px #00000080}@keyframes pulse-subtle{0%,to{opacity:.95;transform:translate(-50%)scale(1)}50%{opacity:.75;transform:translate(-50%)scale(.98)}}.bbox-controls-bar{flex-wrap:wrap;justify-content:center;align-items:center;gap:.6rem;display:flex}.btn-bbox-toggle{color:#94a3b8;cursor:pointer;background:#1e293b;border:1px solid #334155;border-radius:8px;align-items:center;gap:.4rem;padding:.45rem .9rem;font-size:.82rem;font-weight:600;transition:all .2s;display:inline-flex}.btn-bbox-toggle:hover{color:#f8fafc;background:#334155;border-color:#475569}.btn-bbox-toggle.active{color:#38bdf8;background:#0ea5e926;border-color:#38bdf8;box-shadow:0 0 10px #38bdf833}.btn-bbox-reset{color:#94a3b8;cursor:pointer;background:0 0;border:1px dashed #475569;border-radius:8px;align-items:center;gap:.35rem;padding:.45rem .75rem;font-size:.8rem;font-weight:500;transition:all .2s;display:inline-flex}.btn-bbox-reset:hover{color:#f87171;background:#ef44441a;border-color:#ef4444}.result-container{flex-direction:column;align-items:center;gap:1.5rem;width:100%;max-width:500px;display:flex}.result-image-wrapper{border-radius:12px;width:100%;overflow:hidden;box-shadow:0 4px 20px #0000004d}.result-image{object-fit:cover;width:100%;max-height:280px;display:block}.result-card{text-align:center;background:#1a1a2e;border:2px solid;border-radius:16px;flex-direction:column;align-items:center;gap:.75rem;width:100%;padding:2rem;display:flex}.result-card-error{border-color:#f97316}.result-card-error h2{color:#f97316}.result-icon{font-size:3rem}.result-material{text-transform:uppercase;margin:0;font-size:1.75rem;font-weight:700}.confidence-bar-wrapper{background:#2d2d44;border-radius:4px;width:100%;height:8px;overflow:hidden}.confidence-bar{border-radius:4px;height:100%;transition:width .6s}.confidence-text{color:#9ca3af;margin:0;font-size:.95rem}.instruction-card{text-align:left;border:1px solid;border-radius:10px;align-items:flex-start;gap:.75rem;width:100%;padding:1rem;display:flex}.instruction-card p{color:#d1d5db;margin:0;font-size:.95rem}.instruction-icon{flex-shrink:0;font-size:1.25rem}.error-message{color:#fb923c;font-size:1rem}.btn{cursor:pointer;border:none;border-radius:10px;padding:.75rem 1.5rem;font-size:1rem;font-weight:600;transition:all .2s}.btn-primary{color:#fff;background:#16a34a}.btn-primary:hover{background:#15803d}.btn-reset{background:#2563eb;width:100%;padding:.9rem;font-size:1.05rem}.btn-reset:hover{background:#1d4ed8}.learning-card{background:#111827;border:1px solid #374151;border-radius:14px;flex-direction:column;gap:1rem;width:100%;padding:1.25rem;display:flex;box-shadow:0 4px 16px #00000040}.learning-header{text-align:center}.learning-badge{color:#93c5fd;text-transform:uppercase;letter-spacing:.05em;background:#1e3a8a;border-radius:9999px;margin-bottom:.4rem;padding:.25rem .6rem;font-size:.75rem;font-weight:700;display:inline-block}.learning-header h3{color:#f3f4f6;margin:0;font-size:1.05rem;font-weight:600}.feedback-actions{gap:.75rem;width:100%;display:flex}.btn-feedback-yes{color:#6ee7b7;background:#065f46;border:1px solid #059669;flex:1}.btn-feedback-yes:hover{color:#fff;background:#047857}.btn-feedback-no{color:#fca5a5;background:#7f1d1d;border:1px solid #dc2626;flex:1}.btn-feedback-no:hover{color:#fff;background:#991b1b}.correction-container{flex-direction:column;gap:.75rem;display:flex}.correction-title{color:#9ca3af;text-align:center;margin:0;font-size:.9rem}.material-selector-grid{grid-template-columns:repeat(3,1fr);gap:.6rem;display:grid}.material-chip{cursor:pointer;color:#e5e7eb;border:2px solid;border-radius:10px;flex-direction:column;justify-content:center;align-items:center;padding:.6rem .4rem;transition:all .2s;display:flex}.material-chip:hover{filter:brightness(1.2);transform:translateY(-2px)}.material-chip.selected{transform:scale(1.03);box-shadow:0 0 12px #fff3}.chip-icon{margin-bottom:.2rem;font-size:1.5rem}.chip-label{font-size:.8rem;font-weight:600}.correction-actions{gap:.6rem;margin-top:.4rem;display:flex}.btn-save-correction{color:#fff;background:#16a34a;flex:2}.btn-save-correction:disabled{opacity:.4;cursor:not-allowed}.btn-save-correction:not(:disabled):hover{background:#15803d}.btn-cancel-correction{color:#9ca3af;background:#374151;flex:1}.btn-cancel-correction:hover{color:#fff;background:#4b5563}.feedback-loading{color:#93c5fd;justify-content:center;align-items:center;gap:.75rem;padding:.5rem;font-size:.9rem;display:flex}.spinner-small{border:2px solid #93c5fd4d;border-top-color:#93c5fd;border-radius:50%;width:18px;height:18px;animation:.8s linear infinite spin}.feedback-alert{text-align:center;border-radius:10px;padding:.85rem}.feedback-alert.success{color:#a7f3d0;background:#10b98126;border:1px solid #10b981}.success-headline{margin:0 0 .3rem;font-size:.95rem;font-weight:600}.success-sub{color:#6ee7b7;margin:0;font-size:.85rem}.feedback-alert.error{color:#fca5a5;background:#ef444426;border:1px solid #ef4444;font-size:.9rem}.tp{flex-direction:column;gap:1.25rem;width:100%;max-width:760px;margin:0 auto;display:flex}.tp-section{background:var(--bg-secondary);border:1px solid #2a2a40;border-radius:12px;flex-direction:column;gap:.75rem;padding:1rem;display:flex}.tp-section h2{font-size:1.05rem;font-weight:600}.tp-muted{color:var(--text-secondary);font-size:.82rem}.tp input[type=text],.tp input[type=password],.tp input[type=number],.tp select{background:var(--bg-primary);color:var(--text-primary);border:1px solid #333;border-radius:8px;min-width:0;padding:.5rem .6rem;font-size:.9rem}.tp input[type=file]{color:var(--text-secondary);min-width:0;font-size:.85rem}.tp-row,.tp-upload{flex-wrap:wrap;gap:.5rem;display:flex}.tp-row input,.tp-upload input[type=text]{flex:180px}.tp-btn{color:var(--text-primary);cursor:pointer;background:#24243a;border:1px solid #444;border-radius:8px;padding:.45rem .9rem;font-size:.85rem;font-weight:600}.tp-btn:disabled{opacity:.5;cursor:not-allowed}.tp-btn-primary{background:var(--accent);border-color:var(--accent);color:#fff}.tp-btn-danger{color:#fca5a5;border-color:#7f1d1d}.tp-error{color:#fecaca;background:#3b0d0d;border:1px solid #7f1d1d;border-radius:8px;padding:.75rem;font-size:.9rem}.tp-error-text{color:#fca5a5;font-size:.85rem}.tp-card{border:1px solid #2f2f48;border-radius:10px;flex-direction:column;gap:.5rem;padding:.75rem;display:flex}.tp-card-head{flex-wrap:wrap;justify-content:space-between;gap:.75rem;display:flex}.tp-actions{flex-wrap:wrap;align-items:flex-start;gap:.4rem;display:flex}.tp-status{background:#333;border-radius:9999px;margin-left:.25rem;padding:.1rem .5rem;font-size:.72rem;display:inline-block}.tp-status-ready,.tp-status-completed{color:#bbf7d0;background:#14532d}.tp-status-processing,.tp-status-preparing,.tp-status-queued,.tp-status-running{color:#bfdbfe;background:#1e3a8a}.tp-status-error,.tp-status-failed{color:#fecaca;background:#7f1d1d}.tp-warnings{color:#fcd34d;margin-left:1.1rem;font-size:.8rem}.tp-mapping{flex-direction:column;gap:.6rem;display:flex}.tp-mapping-grid{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:.4rem .75rem;display:grid}.tp-mapping-row{justify-content:space-between;align-items:center;gap:.5rem;font-size:.85rem;display:flex}.tp-mapping-row select{width:9.5rem}.tp-form{flex-direction:column;gap:.75rem;display:flex}.tp-form label,.tp-field{flex-direction:column;gap:.3rem;font-size:.85rem;display:flex}.tp-form label.tp-check{flex-direction:row;align-items:center;gap:.5rem}.tp-grid{grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:.6rem;display:grid}.tp-progress{background:#2a2a40;border-radius:9999px;height:8px;overflow:hidden}.tp-progress-bar{background:var(--accent);height:100%;transition:width .3s}.tp-metrics{flex-wrap:wrap;gap:.9rem;font-size:.82rem;display:flex}.tp-test{background:#10261a;border-radius:8px;padding:.5rem .6rem;font-size:.85rem}.tp-log{white-space:pre-wrap;word-break:break-all;background:#0a0a12;border-radius:8px;max-height:260px;padding:.6rem;font-size:.72rem;overflow:auto}:root{--bg-primary:#0f0f1a;--bg-secondary:#1a1a2e;--text-primary:#f1f5f9;--text-secondary:#9ca3af;--accent:#16a34a}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg-primary);color:var(--text-primary);min-height:100vh;font-family:Inter,Segoe UI,system-ui,-apple-system,sans-serif}.app{flex-direction:column;min-height:100vh;display:flex}.app-header{text-align:center;border-bottom:1px solid #222;padding:2rem 1rem 1rem}.app-header h1{color:var(--accent);font-size:1.75rem;font-weight:700}.app-header p{color:var(--text-secondary);margin-top:.25rem;font-size:.9rem}.header-badges{flex-wrap:wrap;justify-content:center;gap:.75rem;margin-top:.75rem;display:flex}.badge-model{color:#4ade80;background:#22c55e26;border:1px solid #22c55e59;border-radius:9999px;align-items:center;padding:.3rem .75rem;font-size:.8rem;font-weight:600;display:inline-flex}.badge-learning{color:#a5b4fc;background:#6366f126;border:1px solid #6366f159;border-radius:9999px;align-items:center;gap:.3rem;padding:.3rem .75rem;font-size:.8rem;font-weight:500;display:inline-flex}.badge-learning strong{color:#fff;font-weight:700}.app-main{flex:1;justify-content:center;align-items:flex-start;padding:2rem 1rem;display:flex}.app-footer{text-align:center;color:var(--text-secondary);border-top:1px solid #222;padding:1rem;font-size:.8rem}.app-tabs{justify-content:center;gap:.5rem;margin-top:1rem;display:flex}.app-tabs button{color:var(--text-secondary);cursor:pointer;background:0 0;border:1px solid #333;border-radius:9999px;padding:.4rem 1rem;font-weight:600}.app-tabs button.active{background:var(--accent);border-color:var(--accent);color:#fff}
