:root{--sans:"Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;font-family:var(--sans);color:#1f2937;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:#f4f6fb;font-size:14px;line-height:1.5}*{box-sizing:border-box}body{min-height:100vh;margin:0}#root{min-height:100vh}a{color:#2563eb;text-decoration:none}a:hover{text-decoration:underline}h1,h2,h3,h4{color:#0f172a}button{font-family:inherit}.auth-shell{color:#1f2937;background:#0f172a;grid-template-columns:1.1fr 1fr;min-height:100vh;display:grid}.auth-side{color:#fff;background:linear-gradient(135deg,#1e3a8a 0%,#6d28d9 100%);align-items:center;padding:48px 64px;display:flex}.auth-brand h1{color:#fff;margin:0 0 16px;font-size:36px;font-weight:700}.auth-brand p{opacity:.85;margin-bottom:24px;font-size:17px}.auth-brand ul{opacity:.9;padding-left:18px;line-height:1.9;list-style:"✦  "}.auth-content{background:#f9fafb;justify-content:center;align-items:center;padding:32px;display:flex}@media (width<=900px){.auth-shell{grid-template-columns:1fr}.auth-side{min-height:220px;padding:32px}}.sidebar{color:#475569;background:linear-gradient(#fff 0%,#f8fafc 100%);border-right:1px solid #e2e8f0;flex-direction:column;width:250px;height:100vh;display:flex;position:sticky;top:0;box-shadow:1px 0 3px #0f172a0a}.sidebar-brand{color:inherit;cursor:pointer;background:linear-gradient(135deg,#2563eb0f 0%,#2563eb00 70%);border-bottom:1px solid #e2e8f0;align-items:center;gap:12px;padding:20px;text-decoration:none;transition:background .15s;display:flex}.sidebar-brand:hover{background:linear-gradient(135deg,#2563eb1f 0%,#2563eb05 70%);text-decoration:none}.sidebar-brand:hover .brand-title{color:#2563eb}.brand-mark{background:linear-gradient(135deg,#3b82f6 0%,#2563eb 100%);border-radius:10px;place-items:center;width:42px;height:42px;font-size:26px;display:grid;box-shadow:0 4px 10px #2563eb40}.brand-title{color:#0f172a;letter-spacing:-.1px;font-size:15px;font-weight:700;transition:color .15s}.brand-sub{color:#94a3b8;margin-top:2px;font-size:11px}.sidebar-nav{flex-direction:column;flex:1;gap:3px;padding:14px 10px;display:flex;overflow-y:auto}.sidebar-link{color:#475569;border-radius:9px;align-items:center;gap:11px;padding:10px 12px;font-size:13.5px;font-weight:500;text-decoration:none;transition:all .15s;display:flex;position:relative}.sidebar-link:hover{color:#2563eb;background:#f1f5f9;text-decoration:none}.sidebar-link.active{color:#fff;background:linear-gradient(135deg,#3b82f6 0%,#2563eb 100%);font-weight:600;box-shadow:0 4px 12px #2563eb40}.sidebar-link.active:hover{color:#fff}.sidebar-icon{text-align:center;width:22px;font-size:16px}.sidebar-foot{color:#94a3b8;background:#f8fafc;border-top:1px solid #e2e8f0;padding:14px 20px;font-size:11.5px}@media (width<=768px){.sidebar{width:64px}.brand-title,.brand-sub,.sidebar-link span:not(.sidebar-icon),.sidebar-foot{display:none}.sidebar-link{justify-content:center}.sidebar-brand{justify-content:center;padding:18px 8px}.brand-mark{width:38px;height:38px;font-size:22px}}.topbar{background:#fff;border-bottom:1px solid #e5e7eb;justify-content:space-between;align-items:center;padding:14px 28px;display:flex}.topbar-left h2{color:#0f172a;margin:0;font-size:18px}.topbar-sub{color:#64748b;font-size:12px;display:block}.topbar-right{align-items:center;gap:16px;display:flex}.user-chip{align-items:center;gap:10px;display:flex}.avatar{color:#fff;background:#2563eb;border-radius:50%;place-items:center;width:38px;height:38px;font-weight:600;display:grid}.user-name{color:#0f172a;font-size:14px;font-weight:600}.user-role{color:#6b7280;font-size:11px}.logout-btn{cursor:pointer;color:#374151;background:#f3f4f6;border:1px solid #e5e7eb;border-radius:6px;padding:7px 14px;font-size:13px}.logout-btn:hover{color:#fff;background:#ef4444;border-color:#ef4444}@media (width<=600px){.topbar-sub{display:none}}.dashboard-shell{color:#1f2937;background:#f4f6fb;min-height:100vh;display:flex}.dashboard-main{flex-direction:column;flex:1;min-width:0;display:flex}.dashboard-content{flex:1;padding:24px 28px;overflow-x:hidden}.loading-screen{color:#6b7280;place-items:center;height:100vh;font-size:18px;display:grid}@media (width<=768px){.dashboard-content{padding:16px}}.auth-card{background:#fff;border-radius:12px;width:100%;max-width:420px;padding:36px 32px;box-shadow:0 6px 20px #00000014}.auth-card h2{color:#0f172a;margin:0 0 6px;font-size:24px}.auth-sub{color:#6b7280;margin:0 0 24px;font-size:13px}.auth-error{color:#991b1b;background:#fee2e2;border-radius:6px;margin-bottom:14px;padding:10px 14px;font-size:13px}.auth-success{color:#065f46;background:#d1fae5;border-radius:6px;margin-bottom:14px;padding:10px 14px;font-size:13px}.auth-actions{justify-content:flex-end;margin:-6px 0 16px;display:flex}.auth-link{color:#2563eb;font-size:13px;text-decoration:none}.auth-link:hover{text-decoration:underline}.auth-submit{width:100%;padding:11px;font-size:15px}.auth-foot{text-align:center;color:#6b7280;margin-top:18px;font-size:13px}.auth-foot a{color:#2563eb;font-weight:500;text-decoration:none}.auth-hint{text-align:center;color:#6b7280;background:#f3f4f6;border-radius:6px;margin-top:16px;padding:10px;font-size:12px}.page-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;margin-bottom:18px;display:flex}.page-title{color:#0f172a;margin:0;font-size:22px;font-weight:600}.page-subtitle{color:#64748b;margin:4px 0 0;font-size:13px}.page-actions{flex-wrap:wrap;gap:8px;display:flex}.btn{color:#fff;cursor:pointer;background:#2563eb;border:none;border-radius:6px;padding:8px 16px;font-size:14px;font-weight:500;transition:background .15s}.btn:hover{background:#1d4ed8}.btn:disabled{opacity:.6;cursor:not-allowed}.btn-ghost{color:#374151;background:#fff;border:1px solid #e5e7eb}.btn-ghost:hover{background:#f3f4f6}.btn-danger{background:#dc2626}.btn-danger:hover{background:#b91c1c}.btn-success{background:#10b981}.btn-success:hover{background:#059669}.btn-sm{padding:5px 10px;font-size:12px}.card{background:#fff;border-radius:10px;padding:20px;box-shadow:0 1px 2px #0000000a,0 1px 3px #0000000f}.badge{border-radius:999px;padding:3px 10px;font-size:12px;font-weight:500;display:inline-block}.badge-ok{color:#065f46;background:#d1fae5}.badge-info{color:#1e40af;background:#dbeafe}.badge-warn{color:#92400e;background:#fef3c7}.badge-danger{color:#991b1b;background:#fee2e2}.badge-muted{color:#4b5563;background:#f3f4f6}.progress-wrap{background:#f3f4f6;border-radius:999px;min-width:90px;height:18px;position:relative;overflow:hidden}.progress-fill{border-radius:999px;height:100%;transition:width .3s}.progress-text{color:#1f2937;place-items:center;font-size:11px;font-weight:600;display:grid;position:absolute;inset:0}.stat-card{background:#fff;border-left:4px solid #2563eb;border-radius:14px;align-items:center;gap:14px;padding:18px 20px;transition:transform .18s,box-shadow .18s;display:flex;box-shadow:0 1px 2px #0000000a,0 1px 3px #0000000f}.stat-card:hover{transform:translateY(-2px);box-shadow:0 6px 16px #0f172a14,0 2px 4px #0f172a0d}.stat-icon{background:#eff6ff;border-radius:12px;flex-shrink:0;place-items:center;width:52px;height:52px;font-size:26px;display:grid}.stat-body{min-width:0}.stat-label{color:#6b7280;font-size:13px;font-weight:500}.stat-value{color:#0f172a;margin-top:2px;font-size:26px;font-weight:700;line-height:1.1}.stat-hint{color:#94a3b8;margin-top:4px;font-size:11px}.stat-success{border-left-color:#10b981}.stat-success .stat-icon{background:#d1fae5}.stat-warn{border-left-color:#f59e0b}.stat-warn .stat-icon{background:#fef3c7}.stat-danger{border-left-color:#dc2626}.stat-danger .stat-icon{background:#fee2e2}.hero-banner{color:#fff;background:linear-gradient(135deg,#2563eb 0%,#1e40af 60%,#1e3a8a 100%);border-radius:16px;flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:20px;margin-bottom:18px;padding:24px 28px;display:flex;position:relative;overflow:hidden;box-shadow:0 8px 24px #2563eb2e}.hero-banner:before{content:"";pointer-events:none;background:radial-gradient(circle,#ffffff2e 0%,#0000 70%);border-radius:50%;width:220px;height:220px;position:absolute;top:-60px;right:-60px}.hero-banner:after{content:"";pointer-events:none;background:radial-gradient(circle,#ffffff1a 0%,#0000 70%);border-radius:50%;width:200px;height:200px;position:absolute;bottom:-80px;left:30%}.hero-text{z-index:1}.hero-greet{color:#fff;letter-spacing:-.2px;margin:0;font-size:24px;font-weight:700}.hero-sub{color:#ffffffd9;max-width:600px;margin:6px 0 0;font-size:14px}.hero-actions{z-index:1;flex-wrap:wrap;gap:8px;display:flex}.hero-actions .btn{color:#1e40af;background:#fff;font-weight:600}.hero-actions .btn:hover{background:#f1f5f9}.hero-actions .btn-ghost{color:#fff;background:0 0;border:1px solid #fff6}.hero-actions .btn-ghost:hover{background:#ffffff1f}.card-head{justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;display:flex}.card-head h3{color:#0f172a;margin:0;font-size:15px;font-weight:600}.card-link{color:#2563eb;white-space:nowrap;font-size:12px;font-weight:500}.donut-wrap{flex-wrap:wrap;align-items:center;gap:22px;display:flex}.donut-num{fill:#0f172a;font-size:30px;font-weight:700}.donut-lbl{fill:#64748b;font-size:11px}.donut-legend{flex-direction:column;flex:1;gap:10px;min-width:160px;margin:0;padding:0;list-style:none;display:flex}.donut-legend li{color:#1f2937;align-items:center;gap:10px;font-size:13px;display:flex}.donut-legend .dot{border-radius:4px;flex-shrink:0;width:12px;height:12px}.donut-legend .lbl{color:#475569;flex:1}.donut-legend .val{color:#0f172a;font-weight:600}.donut-legend .pct{color:#94a3b8;font-size:11px;font-weight:400}.bar-list{flex-direction:column;gap:14px;margin:0;padding:0;list-style:none;display:flex}.bar-list .bar-head{justify-content:space-between;margin-bottom:6px;font-size:13px;display:flex}.bar-list .bar-label{color:#475569;font-weight:500}.bar-list .bar-val{color:#0f172a;font-weight:600}.bar-list .bar-track{background:#f1f5f9;border-radius:999px;height:10px;overflow:hidden}.bar-list .bar-fill{border-radius:999px;height:100%;transition:width .4s}.empty-state{text-align:center;color:#6b7280;padding:56px 12px}.empty-icon{margin-bottom:10px;font-size:36px}.loading-box{color:#475569;align-items:center;gap:10px;padding:18px;font-size:14px;display:flex}.spinner{border:3px solid #e2e8f0;border-top-color:#2563eb;border-radius:50%;width:18px;height:18px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.data-table{border-collapse:collapse;width:100%;font-size:14px}.data-table thead th{text-align:left;color:#475569;white-space:nowrap;background:#f8fafc;border-bottom:1px solid #e5e7eb;padding:12px;font-size:13px;font-weight:600}.data-table tbody td{vertical-align:middle;border-bottom:1px solid #f1f5f9;padding:12px}.data-table tbody tr:hover{background:#f9fafb}.form-row{margin-bottom:14px}.form-grid{grid-template-columns:repeat(2,1fr);gap:14px;display:grid}@media (width<=600px){.form-grid{grid-template-columns:1fr}}.label{color:#374151;margin-bottom:5px;font-size:13px;font-weight:500;display:block}.input,.select,.textarea{box-sizing:border-box;color:#1f2937;background:#fff;border:1px solid #d1d5db;border-radius:6px;width:100%;padding:9px 12px;font-size:14px}.input:focus,.select:focus,.textarea:focus{border-color:#2563eb;outline:none;box-shadow:0 0 0 3px #2563eb26}.textarea{resize:vertical;min-height:80px}.filter-bar{flex-wrap:wrap;gap:10px;margin-bottom:16px;display:flex}.filter-bar .input,.filter-bar .select{width:auto;min-width:180px}.modal-backdrop{z-index:100;background:#0f172a8c;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.modal{background:#fff;border-radius:12px;flex-direction:column;width:100%;max-width:520px;max-height:90vh;display:flex}.modal-md{max-width:640px}.modal-lg{max-width:880px}.modal-head{border-bottom:1px solid #e5e7eb;justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.modal-head h3{color:#0f172a;margin:0;font-size:17px}.modal-close{cursor:pointer;color:#94a3b8;background:0 0;border:none;font-size:24px;line-height:1}.modal-body{padding:20px;overflow-y:auto}.modal-foot{border-top:1px solid #e5e7eb;justify-content:flex-end;gap:8px;padding:14px 20px;display:flex}.grid-2{grid-template-columns:1fr 1fr;gap:16px;display:grid}.grid-3{grid-template-columns:repeat(3,1fr);gap:16px;display:grid}.grid-4{grid-template-columns:repeat(4,1fr);gap:16px;display:grid}@media (width<=1100px){.grid-3,.grid-4{grid-template-columns:repeat(2,1fr)}}@media (width<=600px){.grid-2,.grid-3,.grid-4{grid-template-columns:1fr}}.text-muted{color:#6b7280}.text-danger{color:#dc2626}.text-right{text-align:right}.flex-row{align-items:center;gap:8px;display:flex}.mt-12{margin-top:12px}.mt-16{margin-top:16px}.mb-12{margin-bottom:12px}
