:root{--primary-teal: #021F21;--secondary-teal: #014751;--soft-teal: #DBF9F1;--accent: #37F4B5;--heading: #0F172B;--body-text: #45556C;--bg-light: #F8FAFC;--border: #E2E8F0;--border-strong: #CBD5E1;--danger-bg: #FEF2F2;--danger-border: #FECACA;--danger-text: #B91C1C;--success-bg: #ECFDF5;--success-border: #A7F3D0;--success-text: #047857;--warning-bg: #FFFBEB;--warning-border: #FDE68A;--warning-text: #92400E;--shadow-soft: 0 1px 3px rgba(0, 0, 0, .06), 0 4px 16px rgba(0, 0, 0, .04);--shadow-card: 0 2px 8px rgba(2, 31, 33, .08)}*{box-sizing:border-box}html,body,#root{margin:0;padding:0;min-height:100vh}body{font-family:Inter,ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif;background-color:var(--bg-light);color:var(--body-text);-webkit-font-smoothing:antialiased}.app-shell{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:32px 16px}.uploader-container{width:100%;max-width:480px;background:#fff;padding:32px;border-radius:16px;box-shadow:var(--shadow-soft);border:1px solid var(--border)}.brand{display:flex;align-items:center;gap:10px;margin-bottom:20px}.brand-mark-logo{height:32px;width:auto;flex-shrink:0}.brand-text{display:flex;flex-direction:column;line-height:1.1}.brand-name{color:var(--heading);font-weight:600;font-size:.95rem}.brand-tag{color:var(--secondary-teal);font-size:.65rem;font-weight:500;letter-spacing:.06em;text-transform:uppercase}.uploader-container h2{margin:0 0 6px;color:var(--heading);font-weight:600;font-size:1.4rem;letter-spacing:-.01em}.subtitle{margin:0 0 24px;color:var(--body-text);font-size:.9rem}.field-label{display:block;font-size:.75rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--body-text);margin-bottom:8px}.dropzone{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;width:100%;padding:28px 16px;border:1.5px dashed var(--border-strong);border-radius:12px;background:var(--bg-light);cursor:pointer;transition:all .15s ease;text-align:center}.dropzone:hover{border-color:var(--secondary-teal);background:#fff}.dropzone.has-file{border-style:solid;border-color:var(--secondary-teal);background:var(--soft-teal)}.dropzone input[type=file]{display:none}.dropzone-icon{color:var(--secondary-teal)}.dropzone-title{font-size:.9rem;font-weight:500;color:var(--heading)}.dropzone-hint{font-size:.78rem;color:var(--body-text);letter-spacing:.02em}.file-meta{display:flex;align-items:center;gap:8px;font-size:.85rem;color:var(--heading);font-weight:500}.file-meta-size{font-size:.75rem;color:var(--body-text);font-weight:400}.entity-section{margin-top:22px}.entity-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}.select-all-btn{background:none;border:none;padding:0;font:inherit;font-size:.78rem;font-weight:500;color:var(--secondary-teal);cursor:pointer}.select-all-btn:hover{color:var(--primary-teal);text-decoration:underline}.entity-chips{display:flex;flex-wrap:wrap;gap:8px}.entity-chip{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:999px;border:1px solid var(--border);background:#fff;color:var(--body-text);font-size:.8rem;font-weight:500;cursor:pointer;transition:all .12s ease;-webkit-user-select:none;user-select:none}.entity-chip:hover{border-color:var(--border-strong)}.entity-chip.selected{background:var(--primary-teal);border-color:var(--primary-teal);color:#fff}.entity-chip-check{display:inline-flex;width:14px;height:14px;align-items:center;justify-content:center}.upload-button{width:100%;margin-top:24px;background-color:var(--primary-teal);color:#fff;border:none;padding:13px 16px;border-radius:10px;font-weight:500;font-size:.95rem;cursor:pointer;transition:background .15s ease,transform .15s ease;display:inline-flex;align-items:center;justify-content:center;gap:8px}.upload-button:hover:not(:disabled){background-color:var(--secondary-teal)}.upload-button:active:not(:disabled){transform:translateY(1px)}.upload-button:disabled{background-color:#e2e8f0;color:#94a3b8;cursor:not-allowed}.secondary-button{width:100%;margin-top:10px;background:#fff;color:var(--heading);border:1px solid var(--border-strong);padding:11px 16px;border-radius:10px;font-weight:500;font-size:.9rem;cursor:pointer;transition:background .15s ease}.secondary-button:hover{background:var(--bg-light)}.loading-wrapper{margin-top:24px;display:flex;align-items:center;justify-content:center;gap:10px;padding:14px;background:var(--bg-light);border:1px solid var(--border);border-radius:10px;color:var(--body-text);font-size:.9rem}.spinner{width:16px;height:16px;border:2px solid var(--border-strong);border-top-color:var(--secondary-teal);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.alert{margin-top:16px;display:flex;gap:10px;padding:12px 14px;border-radius:10px;font-size:.85rem;line-height:1.4;align-items:flex-start}.alert-error{background:var(--danger-bg);border:1px solid var(--danger-border);color:var(--danger-text)}.alert-warning{background:var(--warning-bg);border:1px solid var(--warning-border);color:var(--warning-text)}.alert-icon{flex-shrink:0;margin-top:1px}.success-area{margin-top:24px;padding:20px;background-color:var(--success-bg);border:1px solid var(--success-border);border-radius:12px;animation:slideUp .3s ease-out}.success-title{display:flex;align-items:center;gap:8px;margin:0 0 4px;color:var(--success-text);font-weight:600;font-size:.95rem}.success-sub{margin:0 0 14px;font-size:.82rem;color:var(--body-text)}.download-link{display:inline-flex;align-items:center;gap:8px;width:100%;justify-content:center;background:var(--primary-teal);color:#fff;text-decoration:none;font-weight:500;font-size:.9rem;padding:11px 16px;border-radius:10px;transition:background .15s ease}.download-link:hover{background:var(--secondary-teal)}@keyframes slideUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
