@import "https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;500;600;700&family=Plus+Jakarta+Sans:wght@300;400;500;600;700&display=swap";:root{--font-primary:"Plus Jakarta Sans", sans-serif;--font-display:"Outfit", sans-serif;--bg-darker:#080c14;--bg-dark:#0f172a;--bg-card:#1e293bb3;--bg-card-hover:#1e293be6;--border-color:#ffffff14;--border-focus:#10b98166;--primary:#10b981;--primary-hover:#059669;--primary-glow:#10b98126;--secondary:#6366f1;--accent:#f59e0b;--danger:#ef4444;--danger-hover:#dc2626;--success:#10b981;--text-primary:#f8fafc;--text-secondary:#94a3b8;--text-muted:#64748b;--glass-bg:#0f172a99;--glass-border:#ffffff0d;--glass-shadow:0 8px 32px 0 #0000005e;--blur:16px;--transition:all .3s cubic-bezier(.4, 0, .2, 1);--input-bg:#0f172acc;--table-th-bg:#0f172acc;--table-bg:#0f172a66;--table-row-hover:#ffffff05;--logo-gradient-start:#fff;--logo-gradient-end:#a7f3d0;--pagination-btn-bg:#ffffff0d;--pagination-btn-hover-bg:#ffffff1a;--input-focus-bg:#0f172af2}body.light-mode{--bg-darker:#f1f5f9;--bg-dark:#fff;--bg-card:#fffc;--bg-card-hover:#fffffff2;--border-color:#00000014;--border-focus:#10b98166;--primary:#10b981;--primary-hover:#059669;--primary-glow:#10b9811a;--secondary:#4f46e5;--accent:#d97706;--danger:#ef4444;--danger-hover:#dc2626;--success:#10b981;--text-primary:#0f172a;--text-secondary:#475569;--text-muted:#64748b;--glass-bg:#ffffffb3;--glass-border:#0000000f;--glass-shadow:0 8px 32px 0 #00000014;--input-bg:#ffffffe6;--table-th-bg:#f1f5f9e6;--table-bg:#fff9;--table-row-hover:#00000005;--logo-gradient-start:#0f172a;--logo-gradient-end:#059669;--pagination-btn-bg:#0000000a;--pagination-btn-hover-bg:#00000014;--input-focus-bg:#fffffff2}*{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--font-primary);background-color:var(--bg-darker);color:var(--text-primary);background-image:radial-gradient(circle at 10% 20%,#10b9810d 0%,#0000 40%),radial-gradient(circle at 90% 80%,#6366f10d 0%,#0000 40%);background-attachment:fixed;min-height:100vh;overflow-x:hidden}h1,h2,h3,h4,h5,h6{font-family:var(--font-display);letter-spacing:-.02em;font-weight:600}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes pulseGlow{0%,to{box-shadow:0 0 15px #10b98133}50%{box-shadow:0 0 25px #10b98166}}.app-container{flex-direction:column;min-height:100vh;display:flex}.login-layout{justify-content:center;align-items:center;min-height:100vh;padding:20px;display:flex}.dashboard-layout{flex-direction:column;gap:24px;width:100%;max-width:1600px;margin:0 auto;padding:24px;animation:.5s ease-out fadeIn;display:flex}.glass-card{background:var(--glass-bg);-webkit-backdrop-filter:blur(var(--blur));border:1px solid var(--glass-border);box-shadow:var(--glass-shadow);transition:var(--transition);border-radius:16px;padding:28px}.glass-card:hover{border-color:#ffffff1a}.header-bar{border-bottom:1px solid var(--border-color);justify-content:space-between;align-items:center;margin-bottom:10px;padding-bottom:20px;display:flex}.logo-section{align-items:center;gap:12px;display:flex}.logo-icon{background:linear-gradient(135deg, var(--primary), var(--secondary));color:#fff;border-radius:10px;justify-content:center;align-items:center;width:40px;height:40px;font-size:20px;font-weight:700;display:flex;box-shadow:0 0 20px #10b9814d}.logo-text{background:linear-gradient(to right, var(--logo-gradient-start), var(--logo-gradient-end));-webkit-text-fill-color:transparent;-webkit-background-clip:text;font-size:24px;font-weight:700}.user-nav-actions{align-items:center;gap:16px;display:flex}.user-badge{border:1px solid var(--border-color);background:#ffffff0d;border-radius:99px;align-items:center;gap:8px;padding:6px 14px;font-size:14px;display:flex}.badge-dot{background-color:var(--primary);width:8px;height:8px;box-shadow:0 0 8px var(--primary);border-radius:50%}.login-card{border:1px solid #10b98126;width:100%;max-width:420px;padding:40px 32px;animation:.6s cubic-bezier(.16,1,.3,1) fadeIn}.login-header{text-align:center;margin-bottom:32px}.login-header h2{color:#fff;margin-bottom:8px;font-size:28px}.login-header p{color:var(--text-secondary);font-size:14px}.form-group{margin-bottom:20px}.form-group label{text-transform:uppercase;letter-spacing:.05em;color:var(--text-secondary);margin-bottom:8px;font-size:13px;font-weight:600;display:block}.input-wrapper{position:relative}.form-input{background:var(--input-bg);border:1px solid var(--border-color);width:100%;color:var(--text-primary);font-family:var(--font-primary);transition:var(--transition);border-radius:8px;padding:12px 16px;font-size:15px}.form-input:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-glow);background:var(--input-focus-bg);outline:none}.form-input option{background-color:var(--bg-dark);color:var(--text-primary)}.form-input::placeholder{color:var(--text-muted)}.btn{font-family:var(--font-primary);cursor:pointer;transition:var(--transition);border:none;border-radius:8px;justify-content:center;align-items:center;gap:8px;padding:12px 24px;font-size:14px;font-weight:600;display:inline-flex}.btn-primary{background-color:var(--primary);color:#080c14}.btn-primary:hover{background-color:var(--primary-hover);transform:translateY(-1px)}.btn-primary:active{transform:translateY(0)}.btn-secondary{color:var(--text-primary);border:1px solid var(--border-color);background-color:#ffffff0d}.btn-secondary:hover{background-color:#ffffff1a;border-color:#fff3}.btn-danger{background-color:var(--danger);color:#fff}.btn-danger:hover{background-color:var(--danger-hover)}.btn-block{width:100%}.btn-sm{border-radius:6px;padding:6px 12px;font-size:12px}.tab-container{border:1px solid var(--border-color);background:#0003;border-radius:8px;align-self:flex-start;gap:8px;padding:4px;display:flex}.tab-btn{color:var(--text-secondary);font-family:var(--font-primary);cursor:pointer;transition:var(--transition);background:0 0;border:none;border-radius:6px;padding:8px 16px;font-size:14px;font-weight:500}.tab-btn.active{background-color:var(--bg-dark);color:var(--primary);box-shadow:0 4px 12px #0003}.filter-card{padding:24px}.filter-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:20px;display:flex}.filter-title{color:var(--text-primary);align-items:center;gap:8px;font-size:18px;font-weight:700;display:flex}.filter-inputs-grid{grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:16px;margin-bottom:20px;display:grid}.filter-group{flex-direction:column;gap:6px;display:flex}.filter-group label{color:var(--text-secondary);text-transform:uppercase;font-size:12px;font-weight:600}.filter-actions-bar{border-top:1px solid var(--border-color);flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:12px;padding-top:16px;display:flex}.stats-dashboard{margin:12px 0}.stats-grid{grid-template-columns:repeat(auto-fit,minmax(270px,1fr));gap:20px;display:grid}.kpi-card{background:var(--glass-bg);-webkit-backdrop-filter:blur(var(--blur));border:1px solid var(--glass-border);box-shadow:var(--glass-shadow);transition:var(--transition);border-radius:16px;flex-direction:column;justify-content:space-between;padding:20px;display:flex}.kpi-card:hover{border-color:#ffffff26;transform:translateY(-2px)}.kpi-card.lenca{border-left:5px solid #10b981}.kpi-card.xuongca{border-left:5px solid #ef4444}.kpi-card.luong{border-left:5px solid #6366f1}.kpi-header{justify-content:space-between;align-items:flex-start;margin-bottom:12px;display:flex}.kpi-title{text-transform:uppercase;letter-spacing:.05em;color:var(--text-secondary);align-items:center;gap:8px;font-size:13px;font-weight:700;display:flex}.kpi-value{font-size:30px;font-weight:800;font-family:var(--font-display);color:var(--text-primary);letter-spacing:-.02em;line-height:1}.kpi-section-title{text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);margin-top:10px;margin-bottom:8px;font-size:12px;font-weight:700}.kpi-chips-container{flex-wrap:wrap;gap:10px;display:flex}.kpi-chip{border:1px solid var(--border-color);color:var(--text-primary);background:#ffffff0d;border-radius:8px;align-items:center;gap:8px;padding:8px 16px;font-size:16px;font-weight:600;display:inline-flex}.kpi-chip-count{color:var(--primary);background:#10b98126;border-radius:6px;padding:3px 12px;font-size:16px;font-weight:800}body.light-mode .kpi-chip{background:#00000008;border-color:#00000014}.table-responsive{border:1px solid var(--border-color);background:var(--table-bg);border-radius:12px;width:100%;overflow-x:auto}.custom-table{border-collapse:collapse;text-align:left;width:100%;font-size:14px}.custom-table th{background-color:var(--table-th-bg);color:var(--text-secondary);border-bottom:1px solid var(--border-color);font-weight:600;font-family:var(--font-display);text-transform:uppercase;letter-spacing:.05em;white-space:nowrap;padding:16px 20px;font-size:13px}.custom-table td{border-bottom:1px solid var(--border-color);color:var(--text-primary);white-space:nowrap;padding:14px 20px}.custom-table tbody tr{transition:var(--transition)}.custom-table tbody tr:hover{background-color:var(--table-row-hover)}.status-badge{border-radius:99px;align-items:center;padding:4px 10px;font-size:12px;font-weight:600;display:inline-flex}.status-badge.len-ca{color:#34d399;background-color:#10b98126;border:1px solid #10b9814d}.status-badge.xuong-ca{color:#f87171;background-color:#ef444426;border:1px solid #ef44444d}.status-badge.role-admin{color:#818cf8;background-color:#6366f126;border:1px solid #6366f14d}.status-badge.role-user{color:#fbbf24;background-color:#f59e0b26;border:1px solid #f59e0b4d}.status-badge.locked{color:#ef4444;background-color:#ef444433;border:1px solid #ef4444}.status-badge.active{color:#10b981;background-color:#10b98133;border:1px solid #10b981}.pagination-controls{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;margin-top:16px;display:flex}.pagination-info{color:var(--text-secondary);font-size:14px}.pagination-actions{align-items:center;gap:8px;display:flex}.pagination-btn{background-color:var(--pagination-btn-bg);border:1px solid var(--border-color);width:36px;height:36px;color:var(--text-primary);cursor:pointer;transition:var(--transition);border-radius:8px;justify-content:center;align-items:center;font-weight:700;display:flex}.pagination-btn:hover:not(:disabled){background-color:var(--pagination-btn-hover-bg);color:var(--primary)}.pagination-btn:disabled{opacity:.4;cursor:not-allowed}.pagination-btn.active{background-color:var(--primary);color:#080c14;border-color:var(--primary)}.limit-select{border:1px solid var(--border-color);color:#fff;cursor:pointer;background:#0f172acc;border-radius:6px;outline:none;padding:6px 12px}.limit-select:focus{border-color:var(--primary)}.notification{border-radius:8px;align-items:center;gap:10px;margin-bottom:16px;padding:12px 16px;font-size:14px;display:flex}.notification.error{color:#f87171;background-color:#ef444426;border:1px solid #ef44444d}.notification.success{color:#34d399;background-color:#10b98126;border:1px solid #10b9814d}.modal-overlay{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:1000;background-color:#000000bf;justify-content:center;align-items:center;animation:.3s ease-out fadeIn;display:flex;position:fixed;inset:0}.modal-content{background:var(--bg-dark);width:100%;max-width:480px;color:var(--text-primary);border:1px solid var(--border-color);padding:32px;box-shadow:0 20px 25px -5px #00000080}body.light-mode .modal-content{color:#0f172a;background:#fff;border:1px solid #0000001f;box-shadow:0 20px 25px -5px #00000026}.modal-header{justify-content:space-between;align-items:center;margin-bottom:24px;display:flex}.modal-header h3{color:var(--text-primary);font-size:20px}.modal-desc{color:var(--text-secondary);margin-bottom:16px;font-size:14px;line-height:1.5}body.light-mode .modal-desc{color:#334155}.file-selected-box{color:#10b981;background:#10b98126;border:1px solid #10b98166;border-radius:8px;align-items:center;gap:8px;margin-bottom:16px;padding:12px 16px;font-size:13px;font-weight:600;display:flex}body.light-mode .file-selected-box{color:#047857;background:#ecfdf5;border-color:#a7f3d0}.warnings-box{color:#f59e0b;background:#f59e0b26;border:1px solid #f59e0b66;border-radius:10px;margin-bottom:16px;padding:12px 16px;font-size:13px}body.light-mode .warnings-box{color:#b45309;background:#fffbeb;border-color:#fde68a}.tip-box{border:1px solid var(--border-color);color:var(--text-secondary);background:#ffffff0a;border-radius:10px;margin-bottom:24px;padding:12px 16px;font-size:12px}body.light-mode .tip-box{color:#334155;background:#f8fafc;border-color:#cbd5e1}.close-btn{color:var(--text-secondary);cursor:pointer;transition:var(--transition);background:0 0;border:none;font-size:24px}.close-btn:hover{color:#fff}.admin-section{flex-direction:column;gap:20px;display:flex}.admin-header,.flex-between{justify-content:space-between;align-items:center;display:flex}.empty-state{text-align:center;color:var(--text-secondary);padding:48px 24px}.empty-icon{opacity:.5;margin-bottom:16px;font-size:40px}.loading-spinner{border:3px solid #ffffff1a;border-top-color:var(--primary);border-radius:50%;width:28px;height:28px;margin:0 auto;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.loading-container{color:var(--text-secondary);flex-direction:column;justify-content:center;align-items:center;gap:16px;padding:60px 0;display:flex}.connection-status{border:1px solid var(--border-color);background:#ffffff0d;border-radius:99px;align-items:center;gap:6px;padding:6px 12px;display:flex}body.light-mode .connection-status{background:#00000008}.status-dot{border-radius:50%;width:10px;height:10px;display:inline-block;position:relative}.status-dot.connected{background-color:var(--primary);box-shadow:0 0 8px var(--primary)}.status-dot.disconnected{background-color:var(--danger);box-shadow:0 0 8px var(--danger)}.theme-toggle-btn{border:1px solid var(--border-color);color:var(--text-primary);cursor:pointer;width:36px;height:36px;transition:var(--transition);background:#ffffff0d;border-radius:50%;justify-content:center;align-items:center;font-size:16px;display:flex}.theme-toggle-btn:hover{background:#ffffff1a;transform:scale(1.05)}body.light-mode .theme-toggle-btn{background:#00000008}body.light-mode .modal-header h3{color:var(--text-primary)}body.light-mode .close-btn{color:var(--text-secondary)}body.light-mode .close-btn:hover{color:var(--text-primary)}.btn-link{color:var(--primary);font-family:var(--font-primary);cursor:pointer;transition:var(--transition);background:0 0;border:none;font-size:13px;text-decoration:underline}.btn-link:hover{color:var(--primary-hover)}
