:root{--blue-900: #1e3a8a;--blue-800: #1e40af;--blue-600: #2563eb;--blue-100: #dbeafe;--blue-50: #eff6ff;--slate-900: #0f172a;--slate-700: #334155;--slate-500: #64748b;--slate-300: #cbd5e1;--slate-100: #f1f5f9;--slate-50: #f8fafc;--green-700: #15803d;--green-100: #dcfce7;--yellow-700: #a16207;--yellow-100: #fef9c3;--red-700: #b91c1c;--red-100: #fee2e2;--gray-500: #6b7280;--gray-100: #f3f4f6;--white: #ffffff;--nav-h: 64px;--topbar-h: 56px;--sidebar-w: 220px;--radius: 12px;--radius-sm: 8px;--shadow: 0 1px 3px rgba(0,0,0,.08), 0 1px 2px rgba(0,0,0,.04);--shadow-md: 0 4px 6px -1px rgba(0,0,0,.08), 0 2px 4px -1px rgba(0,0,0,.04)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body{height:100%;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:16px;color:var(--slate-900);background:var(--slate-100);-webkit-font-smoothing:antialiased}#app{height:100%}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.card{background:var(--white);border-radius:var(--radius);box-shadow:var(--shadow);padding:1rem}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;padding:.75rem 1.25rem;border:none;border-radius:var(--radius-sm);font-size:1rem;font-weight:600;cursor:pointer;transition:opacity .15s,background .15s;text-decoration:none}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--blue-800);color:var(--white);width:100%}.btn-primary:hover:not(:disabled){background:var(--blue-900)}.btn-ghost{background:transparent;color:var(--slate-700)}.btn-ghost:hover{background:var(--slate-100)}.badge{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .6rem;border-radius:999px;font-size:.75rem;font-weight:600}.badge-red{background:var(--red-100);color:var(--red-700)}.badge-yellow{background:var(--yellow-100);color:var(--yellow-700)}.badge-green{background:var(--green-100);color:var(--green-700)}.badge-gray{background:var(--gray-100);color:var(--gray-500)}.alert{display:flex;align-items:flex-start;gap:.75rem;padding:.875rem 1rem;border-radius:var(--radius-sm);font-size:.9rem;line-height:1.5}.alert-warn{background:var(--yellow-100);color:var(--yellow-700)}.alert-err{background:var(--red-100);color:var(--red-700)}.alert-info{background:var(--blue-50);color:var(--blue-800)}.field{display:flex;flex-direction:column;gap:.4rem}.field label{font-size:.875rem;font-weight:600;color:var(--slate-700)}.field input{padding:.75rem 1rem;border:1.5px solid var(--slate-300);border-radius:var(--radius-sm);font-size:1rem;background:var(--white);transition:border-color .15s;-webkit-appearance:none}.field input:focus{outline:none;border-color:var(--blue-600);box-shadow:0 0 0 3px var(--blue-100)}.fk-layout{display:flex;flex-direction:column;height:100dvh}.topbar{position:sticky;top:0;z-index:10;height:var(--topbar-h);background:var(--blue-800);color:var(--white);display:flex;align-items:center;padding:0 1rem;gap:.75rem;box-shadow:var(--shadow-md)}.topbar-title{font-size:1.1rem;font-weight:700;flex:1}.topbar-user{font-size:.85rem;opacity:.85}.fk-content{flex:1;overflow-y:auto;padding:1rem;padding-bottom:calc(var(--nav-h) + 1rem);display:flex;flex-direction:column;gap:1rem}.bottom-nav{position:fixed;bottom:0;left:0;right:0;height:var(--nav-h);background:var(--white);border-top:1px solid var(--slate-300);display:flex;z-index:10}.bottom-nav a{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.2rem;text-decoration:none;color:var(--slate-500);font-size:.65rem;font-weight:500;padding:.5rem 0;transition:color .15s;-webkit-tap-highlight-color:transparent}.bottom-nav a.active,.bottom-nav a:hover{color:var(--blue-800)}.bottom-nav svg{width:22px;height:22px}.bo-layout{display:flex;height:100dvh}.sidebar{width:var(--sidebar-w);background:var(--blue-900);color:var(--white);display:flex;flex-direction:column;flex-shrink:0}.sidebar-brand{padding:1.25rem 1rem;font-size:1.1rem;font-weight:800;border-bottom:1px solid rgba(255,255,255,.12)}.sidebar-brand small{display:block;font-size:.7rem;font-weight:400;opacity:.6;margin-top:.15rem}.sidebar nav{flex:1;padding:.75rem 0}.sidebar nav a{display:flex;align-items:center;gap:.75rem;padding:.75rem 1rem;color:#ffffffbf;text-decoration:none;font-size:.9rem;font-weight:500;transition:background .15s,color .15s}.sidebar nav a svg{width:18px;height:18px;flex-shrink:0}.sidebar nav a:hover,.sidebar nav a.active{background:#ffffff1a;color:var(--white)}.sidebar-footer{padding:.75rem 1rem;border-top:1px solid rgba(255,255,255,.12);font-size:.8rem;opacity:.6}.bo-main{flex:1;display:flex;flex-direction:column;overflow:hidden}.bo-topbar{height:var(--topbar-h);background:var(--white);border-bottom:1px solid var(--slate-300);display:flex;align-items:center;padding:0 1.5rem;gap:1rem}.bo-topbar h1{font-size:1.1rem;font-weight:700;flex:1}.bo-content{flex:1;overflow-y:auto;padding:1.5rem;display:flex;flex-direction:column;gap:1.25rem}.grid-2{display:grid;grid-template-columns:repeat(2,1fr);gap:1rem}.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem}@media(max-width:640px){.grid-2,.grid-3{grid-template-columns:1fr}}.stat-card{background:var(--white);border-radius:var(--radius);padding:1.25rem;box-shadow:var(--shadow)}.stat-card .stat-label{font-size:.8rem;font-weight:600;color:var(--slate-500);text-transform:uppercase;letter-spacing:.05em}.stat-card .stat-value{font-size:2rem;font-weight:800;color:var(--slate-900);line-height:1.1;margin-top:.25rem}.stat-card .stat-desc{font-size:.8rem;color:var(--slate-500);margin-top:.25rem}.login-wrap{min-height:100dvh;background:var(--blue-800);display:flex;align-items:center;justify-content:center;padding:1.5rem}.login-card{background:var(--white);border-radius:var(--radius);padding:2rem 1.75rem;width:100%;max-width:400px;box-shadow:var(--shadow-md);display:flex;flex-direction:column;gap:1.5rem}.login-header{text-align:center}.login-header h1{font-size:1.6rem;font-weight:800;color:var(--blue-800)}.login-header p{font-size:.875rem;color:var(--slate-500);margin-top:.35rem}.login-form{display:flex;flex-direction:column;gap:1rem}
