:root,:root[data-theme=dark]{--bg-primary:#0a0a0a;--bg-secondary:#1a1a1a;--bg-tertiary:#2a2a2a;--primary-color:#06f;--primary-hover:#2680ff;--text-primary:#fff;--text-secondary:#b0b0b0;--success:#0c8;--warning:#fa0;--error:#f44;--border:#333;--shadow:#00000080}:root[data-theme=light]{--bg-primary:#f5f7fa;--bg-secondary:#fff;--bg-tertiary:#eef1f6;--primary-color:#06f;--primary-hover:#0052cc;--text-primary:#0a0a0a;--text-secondary:#5a5a5a;--success:#00a86b;--warning:#c80;--error:#d32f2f;--border:#d5dbe3;--shadow:#0000001f}*{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--bg-primary);color:var(--text-primary);-webkit-font-smoothing:antialiased;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif}a{color:var(--primary-color);text-decoration:none}button{font:inherit;cursor:pointer;border:1px solid var(--border);background:var(--bg-tertiary);color:var(--text-primary);border-radius:8px;padding:8px 14px;transition:background .15s,border-color .15s,opacity .15s}button:hover:not(:disabled){border-color:var(--primary-color)}button:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--primary-color);border-color:var(--primary-color);color:#fff}.btn-primary:hover:not(:disabled){background:var(--primary-hover)}.btn-ghost{background:0 0}.btn-danger{color:var(--error);border-color:var(--error)}.btn-sm{border-radius:6px;padding:4px 10px;font-size:13px}input,select,textarea{font:inherit;background:var(--bg-primary);color:var(--text-primary);border:1px solid var(--border);border-radius:6px;padding:7px 9px}input:focus,select:focus,textarea:focus{border-color:var(--primary-color);outline:none}.navbar{background:var(--bg-secondary);border-bottom:1px solid var(--border);z-index:10;justify-content:space-between;align-items:center;height:58px;padding:0 20px;display:flex;position:sticky;top:0}.navbar .logo{letter-spacing:.2px;font-size:17px;font-weight:700}.navbar .logo .accent{color:var(--primary-color)}.navbar .nav-right{align-items:center;gap:10px;display:flex}.navbar .user-email{color:var(--text-secondary);font-size:13px}.tabs{background:var(--bg-secondary);border-bottom:1px solid var(--border);gap:4px;padding:0 16px;display:flex;overflow-x:auto}.tabs a{color:var(--text-secondary);white-space:nowrap;border-bottom:2px solid #0000;padding:12px 16px;font-size:14px;font-weight:500}.tabs a.active{color:var(--text-primary);border-bottom-color:var(--primary-color)}.tabs a:hover{color:var(--text-primary)}.page{max-width:1280px;margin:0 auto;padding:24px}.page-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:18px;display:flex}.page-header h1{margin:0;font-size:22px}.muted{color:var(--text-secondary)}.row-actions{align-items:center;gap:8px;display:flex}.card-grid{grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:14px;margin-bottom:24px;display:grid}.card{background:var(--bg-secondary);border:1px solid var(--border);border-radius:12px;padding:18px}.card .label{color:var(--text-secondary);margin-bottom:6px;font-size:13px}.card .value{font-size:28px;font-weight:700}.card .sub{color:var(--text-secondary);margin-top:4px;font-size:12px}.table-wrap{background:var(--bg-secondary);border:1px solid var(--border);border-radius:12px;overflow:auto}table{border-collapse:collapse;width:100%;font-size:14px}th,td{text-align:left;border-bottom:1px solid var(--border);white-space:nowrap;padding:10px 14px}th{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px;background:var(--bg-secondary);font-size:12px;font-weight:600;position:sticky;top:0}tbody tr:hover{background:var(--bg-tertiary)}.num{text-align:center;font-variant-numeric:tabular-nums}td.editable{text-align:center}td.editable input,td.editable select{text-align:center;width:90px}tr.dirty{background:#0066ff14}.badge{border:1px solid var(--border);border-radius:999px;padding:2px 9px;font-size:12px;font-weight:600;display:inline-block}.badge.ok,.badge.yes,.badge.uploaded{color:var(--success);border-color:var(--success)}.badge.failed,.badge.error{color:var(--error);border-color:var(--error)}.badge.processing{color:var(--warning);border-color:var(--warning)}.progress{background:var(--bg-tertiary);vertical-align:middle;border-radius:999px;width:110px;height:8px;display:inline-block;position:relative;overflow:hidden}.progress>span{background:var(--primary-color);height:100%;display:block}.login-wrap{place-items:center;min-height:100vh;padding:20px;display:grid}.login-card{background:var(--bg-secondary);border:1px solid var(--border);width:100%;max-width:380px;box-shadow:0 10px 40px var(--shadow);border-radius:16px;padding:32px}.login-card h1{margin:0 0 4px;font-size:22px}.login-card .sub{color:var(--text-secondary);margin-bottom:22px;font-size:14px}.field{flex-direction:column;gap:6px;margin-bottom:14px;display:flex}.field label{color:var(--text-secondary);font-size:13px}.field input{width:100%}.form-error{border:1px solid var(--error);color:var(--error);background:#ff44441f;border-radius:8px;margin-bottom:14px;padding:9px 12px;font-size:13px}.modal-overlay{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:50;background:#0000008c;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.modal{background:var(--bg-secondary);border:1px solid var(--border);width:100%;max-width:520px;max-height:88vh;box-shadow:0 20px 60px var(--shadow);border-radius:14px;padding:22px;overflow:auto}.modal h2{margin:0 0 16px;font-size:18px}.toast-stack{z-index:100;flex-direction:column;gap:10px;display:flex;position:fixed;bottom:20px;right:20px}.toast{background:var(--bg-tertiary);border:1px solid var(--border);min-width:220px;box-shadow:0 6px 20px var(--shadow);border-left-width:4px;border-radius:8px;padding:12px 16px;font-size:14px}.toast.success{border-left-color:var(--success)}.toast.error{border-left-color:var(--error)}.toast.info{border-left-color:var(--primary-color)}.center-screen{min-height:60vh;color:var(--text-secondary);place-items:center;display:grid}.spinner{border:3px solid var(--border);border-top-color:var(--primary-color);border-radius:50%;width:28px;height:28px;animation:.7s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.toolbar{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:14px;display:flex}.pager{color:var(--text-secondary);justify-content:flex-end;align-items:center;gap:8px;margin-top:12px;font-size:13px;display:flex}@media (width<=640px){.page{padding:16px}.navbar .user-email{display:none}}
