:root{--bg-app:#f8fafc;--bg-sidebar:#fff;--bg-card:#fff;--bg-card-subtle:#f1f5f9;--bg-hover:#f8fafc;--border:#e2e8f0;--border-subtle:#edf2f7;--border-focus:#4f46e5;--text-main:#0f172a;--text-secondary:#475569;--text-muted:#94a3b8;--primary:#4f46e5;--primary-hover:#4338ca;--primary-light:#eef2ff;--success:#16a34a;--success-light:#f0fdf4;--warning:#d97706;--warning-light:#fffbeb;--danger:#dc2626;--danger-light:#fef2f2;--radius-sm:6px;--radius-md:10px;--radius-lg:14px;--radius-full:9999px;--shadow-sm:0 1px 3px 0 #0000000d, 0 1px 2px 0 #0000000a;--shadow-md:0 4px 6px -1px #00000012, 0 2px 4px -1px #0000000a;--shadow-lg:0 10px 15px -3px #00000014, 0 4px 6px -2px #0000000a}*{box-sizing:border-box;margin:0;padding:0}body{background-color:var(--bg-app);color:var(--text-main);-webkit-font-smoothing:antialiased;min-height:100vh;font-family:Plus Jakarta Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;line-height:1.5}code{border-radius:var(--radius-sm);color:#4f46e5;background:#f1f5f9;padding:.15rem .35rem;font-family:JetBrains Mono,monospace;font-size:.84em}.app-layout{background-color:var(--bg-app);min-height:100vh;display:flex}.app-sidebar{background-color:var(--bg-sidebar);border-right:1px solid var(--border);flex-direction:column;flex-shrink:0;width:250px;height:100vh;display:flex;position:sticky;top:0}.sidebar-brand{border-bottom:1px solid var(--border);align-items:center;gap:.75rem;padding:1.25rem;display:flex}.sidebar-logo{color:#fff;border-radius:var(--radius-md);background:linear-gradient(135deg,#4f46e5,#6366f1);justify-content:center;align-items:center;width:36px;height:36px;display:flex;box-shadow:0 2px 6px #4f46e54d}.sidebar-title{color:var(--text-main);font-size:1.05rem;font-weight:800;line-height:1.2}.sidebar-subtitle{color:var(--text-muted);font-size:.72rem;font-weight:500}.sidebar-nav{flex-direction:column;flex:1;gap:.35rem;padding:1rem .75rem;display:flex}.nav-item{border-radius:var(--radius-md);color:var(--text-secondary);cursor:pointer;text-align:left;background:0 0;border:1px solid #0000;align-items:center;gap:.75rem;width:100%;padding:.65rem .85rem;font-size:.84rem;font-weight:600;transition:all .15s;display:flex}.nav-item:hover{color:var(--text-main);background-color:#f1f5f9}.nav-item.active{background-color:var(--primary-light);color:var(--primary);border-color:#4f46e533}.nav-badge{color:#fff;border-radius:var(--radius-full);background:#4f46e5;margin-left:auto;padding:.1rem .45rem;font-size:.68rem}.nav-count{color:var(--text-secondary);border-radius:var(--radius-full);background:#e2e8f0;margin-left:auto;padding:.1rem .45rem;font-size:.72rem;font-weight:700}.sidebar-footer{border-top:1px solid var(--border);padding:1rem}.db-status-box{border:1px solid var(--border);border-radius:var(--radius-md);background:#f8fafc;padding:.75rem}.status-indicator{border-radius:50%;width:8px;height:8px;display:inline-block}.status-indicator.online{background-color:#16a34a;box-shadow:0 0 6px #16a34a}.status-indicator.offline{background-color:#dc2626;box-shadow:0 0 6px #dc2626}.main-content-area{flex-direction:column;flex:1;gap:1.5rem;max-width:1300px;padding:1.75rem 2rem;display:flex;overflow-y:auto}.page-header-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);padding:1.25rem 1.5rem}.page-title{color:var(--text-main);align-items:center;gap:.6rem;margin-bottom:.25rem;font-size:1.35rem;font-weight:800;display:flex}.page-description{color:var(--text-secondary);font-size:.85rem;line-height:1.5}.card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);overflow:hidden}.upload-card{flex-direction:column;gap:1rem;padding:1.25rem;display:flex}.dropzone-light{border-radius:var(--radius-lg);text-align:center;cursor:pointer;background:#f8fafc;border:2px dashed #cbd5e1;flex-direction:column;align-items:center;gap:.75rem;padding:2.25rem 1.5rem;transition:all .2s;display:flex}.dropzone-light:hover{border-color:var(--primary);background:var(--primary-light)}.upload-icon-circle{width:58px;height:58px;color:var(--primary);box-shadow:var(--shadow-sm);background:#fff;border-radius:50%;justify-content:center;align-items:center;display:flex}.mapping-bar{border:1px solid var(--border);border-radius:var(--radius-md);background:#f8fafc;flex-direction:column;gap:.75rem;padding:.85rem 1.25rem;display:flex}.mapping-selectors{flex-wrap:wrap;align-items:center;gap:1.25rem;display:flex}.selector-group{align-items:center;gap:.5rem;display:flex}.selector-label{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.03em;font-size:.78rem;font-weight:700}.form-select-light{border:1px solid var(--border);color:var(--text-main);border-radius:var(--radius-md);cursor:pointer;background:#fff;outline:none;min-width:170px;padding:.45rem .75rem;font-size:.84rem;font-weight:600}.form-select-light:focus{border-color:var(--primary);box-shadow:0 0 0 3px #4f46e526}.metrics-row{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.85rem;display:grid}.metric-pill{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-md);cursor:pointer;flex-direction:column;gap:.2rem;padding:.85rem 1rem;transition:all .15s;display:flex}.metric-pill:hover,.metric-pill.active{border-color:var(--primary);box-shadow:var(--shadow-sm);transform:translateY(-1px)}.metric-num{color:var(--text-main);font-size:1.45rem;font-weight:800;line-height:1}.metric-text{color:var(--text-secondary);font-size:.74rem;font-weight:600}.metric-pill.success .metric-num{color:#16a34a}.metric-pill.warning .metric-num{color:#d97706}.metric-pill.danger .metric-num{color:#dc2626}.table-card-light{flex-direction:column;display:flex}.table-top-actions{border-bottom:1px solid var(--border);background:#fff;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;padding:1rem 1.25rem;display:flex}.table-responsive{width:100%;overflow-x:auto}.clean-table{border-collapse:collapse;text-align:left;width:100%;font-size:.85rem}.clean-table th{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em;border-bottom:1px solid var(--border);white-space:nowrap;background:#f8fafc;padding:.75rem 1rem;font-size:.74rem;font-weight:700}.clean-table td{border-bottom:1px solid var(--border-subtle);color:var(--text-main);vertical-align:middle;padding:.75rem 1rem}.clean-table tbody tr:hover{background-color:#f8fafc}.badge-light{border-radius:var(--radius-full);align-items:center;gap:.35rem;padding:.2rem .55rem;font-size:.72rem;font-weight:700;display:inline-flex}.badge-success{color:#15803d;background:#dcfce7}.badge-warning{color:#b45309;background:#fef3c7}.badge-danger{color:#b91c1c;background:#fee2e2}.btn{border-radius:var(--radius-md);cursor:pointer;white-space:nowrap;border:1px solid #0000;justify-content:center;align-items:center;gap:.5rem;padding:.55rem 1rem;font-size:.84rem;font-weight:600;transition:all .15s;display:inline-flex}.btn-primary{color:#fff;background:#4f46e5;box-shadow:0 1px 3px #4f46e54d}.btn-primary:hover:not(:disabled){background:#4338ca;transform:translateY(-1px)}.btn-secondary{color:var(--text-main);background:#f1f5f9;border-color:#e2e8f0}.btn-secondary:hover:not(:disabled){background:#e2e8f0}.btn-outline{color:var(--text-main);background:#fff;border-color:#cbd5e1}.btn-outline:hover:not(:disabled){background:#f8fafc;border-color:#94a3b8}.btn-sm{padding:.35rem .75rem;font-size:.78rem}.btn:disabled{opacity:.5;cursor:not-allowed}.toast-container{z-index:200;flex-direction:column;gap:.6rem;display:flex;position:fixed;bottom:1.5rem;right:1.5rem}.toast{border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);color:var(--text-main);border-left:4px solid var(--primary);background:#fff;padding:.75rem 1.15rem;font-size:.84rem;animation:.25s ease-out slideInRight}.toast-success{border-left-color:#16a34a}.toast-error{border-left-color:#dc2626}.toast-info{border-left-color:#4f46e5}@keyframes slideInRight{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}@media (width<=900px){.app-layout{flex-direction:column}.app-sidebar{width:100%;height:auto;position:static}.main-content-area{padding:1rem}}
