:root{--bg-primary: #0a0e17;--bg-secondary: #111827;--bg-card: rgba(17, 24, 39, .7);--bg-card-hover: rgba(30, 41, 59, .8);--bg-glass: rgba(255, 255, 255, .03);--border-glass: rgba(255, 255, 255, .08);--border-active: rgba(99, 102, 241, .5);--text-primary: #f1f5f9;--text-secondary: #94a3b8;--text-muted: #64748b;--accent-primary: #818cf8;--accent-secondary: #6366f1;--accent-glow: rgba(99, 102, 241, .25);--success: #34d399;--success-bg: rgba(52, 211, 153, .1);--warning: #fbbf24;--warning-bg: rgba(251, 191, 36, .1);--error: #f87171;--error-bg: rgba(248, 113, 113, .1);--gradient-primary: linear-gradient(135deg, #6366f1 0%, #8b5cf6 50%, #a78bfa 100%);--gradient-surface: linear-gradient(180deg, rgba(99, 102, 241, .05) 0%, transparent 100%);--font-sans: "Inter", -apple-system, BlinkMacSystemFont, sans-serif;--font-mono: "JetBrains Mono", "Fira Code", monospace;--radius-sm: 8px;--radius-md: 12px;--radius-lg: 16px;--radius-xl: 24px;--ease-out: cubic-bezier(.16, 1, .3, 1);--transition-fast: .15s var(--ease-out);--transition-normal: .25s var(--ease-out);--transition-slow: .4s var(--ease-out)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{font-size:16px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{font-family:var(--font-sans);background:var(--bg-primary);color:var(--text-primary);min-height:100vh;line-height:1.6}#root{min-height:100vh;display:flex;flex-direction:column}.app{min-height:100vh;position:relative;overflow:hidden}.app:before{content:"";position:fixed;top:-50%;left:-50%;width:200%;height:200%;background:radial-gradient(ellipse at 30% 20%,rgba(99,102,241,.08) 0%,transparent 50%),radial-gradient(ellipse at 70% 80%,rgba(139,92,246,.06) 0%,transparent 50%);pointer-events:none;z-index:0}.app-header{padding:24px 32px;display:flex;align-items:center;gap:16px;position:relative;z-index:1;border-bottom:1px solid var(--border-glass)}.app-logo{width:40px;height:40px;border-radius:var(--radius-sm);background:var(--gradient-primary);display:flex;align-items:center;justify-content:center;font-weight:800;font-size:18px;color:#fff;flex-shrink:0}.app-title{font-size:20px;font-weight:700;letter-spacing:-.02em}.app-subtitle{font-size:13px;color:var(--text-muted);margin-left:auto}.app-content{flex:1;display:flex;align-items:center;justify-content:center;padding:32px;position:relative;z-index:1}.card{background:var(--bg-card);border:1px solid var(--border-glass);border-radius:var(--radius-lg);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);transition:border-color var(--transition-normal),box-shadow var(--transition-normal)}.card:hover{border-color:var(--border-active)}.card-lg{padding:48px;max-width:640px;width:100%}.upload-zone{border:2px dashed var(--border-glass);border-radius:var(--radius-lg);padding:64px 48px;text-align:center;cursor:pointer;transition:all var(--transition-normal);position:relative;overflow:hidden}.upload-zone:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:var(--gradient-surface);opacity:0;transition:opacity var(--transition-normal)}.upload-zone:hover,.upload-zone.drag-over{border-color:var(--accent-primary);background:#6366f10a}.upload-zone:hover:before,.upload-zone.drag-over:before{opacity:1}.upload-icon{width:72px;height:72px;margin:0 auto 24px;border-radius:50%;background:#6366f11a;display:flex;align-items:center;justify-content:center;font-size:32px;transition:transform var(--transition-normal),background var(--transition-normal)}.upload-zone:hover .upload-icon{transform:scale(1.08) translateY(-4px);background:#6366f12e}.upload-title{font-size:18px;font-weight:600;margin-bottom:8px}.upload-hint{font-size:14px;color:var(--text-muted)}.upload-input{display:none}.file-selected{margin-top:24px;padding:16px 20px;background:var(--bg-glass);border:1px solid var(--border-glass);border-radius:var(--radius-md);display:flex;align-items:center;gap:12px}.file-icon{font-size:24px}.file-info{flex:1}.file-name{font-size:14px;font-weight:500;font-family:var(--font-mono);color:var(--text-primary)}.file-size{font-size:12px;color:var(--text-muted)}.file-remove{background:none;border:none;color:var(--text-muted);cursor:pointer;font-size:18px;padding:4px;transition:color var(--transition-fast)}.file-remove:hover{color:var(--error)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:12px 24px;border:none;border-radius:var(--radius-md);font-family:var(--font-sans);font-size:14px;font-weight:600;cursor:pointer;transition:all var(--transition-fast);position:relative;overflow:hidden}.btn:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:#fff0;transition:background var(--transition-fast)}.btn:hover:after{background:#ffffff14}.btn:active{transform:scale(.98)}.btn-primary{background:var(--gradient-primary);color:#fff;box-shadow:0 4px 16px var(--accent-glow)}.btn-primary:hover{box-shadow:0 6px 24px var(--accent-glow)}.btn-primary:disabled{opacity:.5;cursor:not-allowed;box-shadow:none}.btn-secondary{background:var(--bg-glass);border:1px solid var(--border-glass);color:var(--text-primary)}.btn-success{background:linear-gradient(135deg,#059669,#10b981);color:#fff;box-shadow:0 4px 16px #10b98140}.btn-lg{padding:16px 32px;font-size:16px;border-radius:var(--radius-md);width:100%;margin-top:24px}.progress-container{max-width:720px;width:100%}.progress-header{margin-bottom:32px}.progress-title{font-size:24px;font-weight:700;margin-bottom:4px}.progress-file{font-size:13px;color:var(--text-muted);font-family:var(--font-mono)}.progress-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-bottom:32px}.stat-card{padding:20px;background:var(--bg-card);border:1px solid var(--border-glass);border-radius:var(--radius-md);text-align:center}.stat-value{font-size:28px;font-weight:800;letter-spacing:-.02em;background:var(--gradient-primary);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.stat-label{font-size:12px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em;margin-top:4px}.progress-bar-wrapper{margin-bottom:24px}.progress-bar-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.progress-percent{font-size:14px;font-weight:600;color:var(--accent-primary)}.progress-count{font-size:13px;color:var(--text-muted)}.progress-bar{height:8px;background:#6366f11a;border-radius:4px;overflow:hidden}.progress-bar-fill{height:100%;background:var(--gradient-primary);border-radius:4px;transition:width var(--transition-slow);position:relative}.progress-bar-fill:after{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(90deg,transparent,rgba(255,255,255,.3),transparent);animation:shimmer 2s infinite}@keyframes shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}.page-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(44px,1fr));gap:6px}.page-dot{aspect-ratio:1;border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:600;font-family:var(--font-mono);transition:all var(--transition-fast);border:1px solid transparent}.page-dot.pending{background:#64748b26;color:var(--text-muted);border-color:var(--border-glass)}.page-dot.processing{background:#6366f126;color:var(--accent-primary);border-color:var(--accent-primary);animation:pulse 1.5s ease-in-out infinite}.page-dot.completed{background:var(--success-bg);color:var(--success);border-color:#34d3994d}.page-dot.failed{background:var(--error-bg);color:var(--error);border-color:#f871714d}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.results-container{max-width:960px;width:100%}.results-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:32px;flex-wrap:wrap;gap:16px}.results-title{font-size:24px;font-weight:700}.results-actions{display:flex;gap:12px}.results-summary{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:32px}.results-lot{padding:16px 24px;background:var(--bg-card);border:1px solid var(--border-glass);border-radius:var(--radius-md);margin-bottom:24px}.lot-label{font-size:12px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em}.lot-value{font-size:18px;font-weight:700;font-family:var(--font-mono);color:var(--accent-primary);margin-top:4px}.data-table-wrapper{overflow-x:auto;border:1px solid var(--border-glass);border-radius:var(--radius-lg);background:var(--bg-card)}.data-table{width:100%;border-collapse:collapse;font-size:13px}.data-table th{padding:12px 16px;text-align:left;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);background:#0003;border-bottom:1px solid var(--border-glass);white-space:nowrap}.data-table td{padding:10px 16px;border-bottom:1px solid rgba(255,255,255,.03);color:var(--text-secondary);font-family:var(--font-mono);font-size:12px}.data-table tr:hover td{background:#6366f108}.data-table tr:last-child td{border-bottom:none}.badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:600}.badge-warning{background:var(--warning-bg);color:var(--warning)}.badge-success{background:var(--success-bg);color:var(--success)}.confidence-bar{width:48px;height:4px;background:#ffffff14;border-radius:2px;display:inline-block;vertical-align:middle;margin-right:6px}.confidence-fill{height:100%;border-radius:2px}.confidence-high{background:var(--success)}.confidence-medium{background:var(--warning)}.confidence-low{background:var(--error)}.inline-input{width:100%;background:transparent;border:1px solid transparent;color:inherit;font-family:inherit;font-size:inherit;padding:4px 6px;border-radius:var(--radius-sm);transition:all var(--transition-fast)}.inline-input:hover{background:#ffffff0d}.inline-input:focus{outline:none;border-color:var(--accent-primary);background:#0003}.inline-input::placeholder{color:var(--text-muted)}.error-banner{padding:16px 20px;background:var(--error-bg);border:1px solid rgba(248,113,113,.2);border-radius:var(--radius-md);color:var(--error);font-size:14px;margin-top:16px}@keyframes fadeIn{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.fade-in{animation:fadeIn .5s var(--ease-out) forwards}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.spinner{width:20px;height:20px;border:2px solid rgba(255,255,255,.2);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite}@media(max-width:768px){.app-header{padding:16px 20px}.app-content{padding:20px}.card-lg{padding:32px 24px}.upload-zone{padding:48px 24px}.progress-stats,.results-summary{grid-template-columns:repeat(2,1fr)}.results-header{flex-direction:column;align-items:flex-start}}
