:root{--app-bg: #f5f7fb;--surface: #fff;--sidebar-bg: #101c36;--sidebar-hover: #203353;--brand: #2563eb;--brand-soft: #eff6ff;--text: #17243b;--text-muted: #718096;--border: #e7ecf3;--success: #13986e;--danger: #db5263;--warning: #cf8b29;--card-radius: 14px;--shadow: 0 6px 24px rgba(16, 30, 60, .035);font-family:Inter,system-ui,PingFang SC,Microsoft YaHei,sans-serif;color:var(--text)}*{box-sizing:border-box}body{margin:0;background:var(--app-bg)}button,input,select{font:inherit}button{cursor:pointer}.layout{display:flex;min-height:100vh}.sidebar{width:232px;background:var(--sidebar-bg);color:#b9c9e1;position:sticky;top:0;height:100vh;display:flex;flex-direction:column;flex:none}.brand{display:flex;gap:10px;align-items:center;color:#fff;padding:24px 20px 20px;font-weight:750;letter-spacing:-.3px}.mark{width:32px;height:32px;border-radius:10px;display:grid;place-items:center;background:linear-gradient(135deg,#4084ff,#1d54d9)}.group{margin:8px 22px;font-size:10px;letter-spacing:1.4px;color:#7286a7;font-weight:700}.nav a{color:#b4c2d8;text-decoration:none;display:flex;gap:10px;margin:2px 10px;padding:10px 12px;border-radius:10px;position:relative;font-size:13px}.nav a.router-link-active{background:#24426c;color:#fff;font-weight:650}.nav a.router-link-active:before{content:"";width:3px;background:#6ca4ff;position:absolute;left:0;top:10px;bottom:10px;border-radius:4px}.side-foot{margin-top:auto;padding:16px 18px 20px;border-top:1px solid #293b56;font-size:11px;color:#8093b3}.main{min-width:0;flex:1}.top{height:66px;display:flex;align-items:center;justify-content:space-between;padding:0 28px;background:#ffffffd9;border-bottom:1px solid var(--border);position:sticky;top:0;z-index:2}.content{max-width:1560px;margin:0 auto;padding:28px 32px 48px}.head{display:flex;justify-content:space-between;gap:16px;align-items:flex-start;margin-bottom:20px}h1{font-size:22px;margin:0;letter-spacing:-.4px}.sub{color:var(--text-muted);font-size:12px;margin-top:4px}.controls,.row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.select,.btn,.search{border:1px solid var(--border);background:#fff;border-radius:9px;min-height:36px;padding:0 12px;color:#53637a}.btn.primary{background:var(--brand);color:#fff;border-color:var(--brand)}.kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--card-radius);box-shadow:var(--shadow)}.kpi{padding:20px 22px}.kpi span,.muted{color:var(--text-muted);font-size:12px}.kpi strong{display:block;font-size:28px;margin-top:6px;font-variant-numeric:tabular-nums;letter-spacing:-.6px}.up{color:var(--success);font-weight:700}.down{color:var(--danger);font-weight:700}.flat{color:var(--warning);font-weight:700}.grid-2{display:grid;grid-template-columns:1.7fr .9fr;gap:16px;margin-top:16px}.grid-2.even{grid-template-columns:1fr 1fr}.block{padding:18px 20px}.block h2{margin:0 0 8px;font-size:15px}table{width:100%;border-collapse:collapse}th,td{padding:11px 10px;border-bottom:1px solid #f0f3f8;font-size:13px;text-align:left}th{color:#94a1b3;font-size:11px;font-weight:650;background:#f8fafd}.num{text-align:right;font-variant-numeric:tabular-nums}.tag{background:var(--brand-soft);color:var(--brand);border-radius:6px;padding:3px 7px;font-size:11px}.warn{background:#fff5df;color:#9a6b12}.pager{display:flex;justify-content:flex-end;gap:8px;padding:12px}.menu-btn{display:none;border:0;background:none;font-size:20px}.toast{position:fixed;right:20px;bottom:20px;background:#16253f;color:#fff;padding:12px 14px;border-radius:10px}.login{min-height:100vh;display:grid;place-items:center}.login .card{width:min(420px,calc(100% - 32px));padding:28px}.login input{width:100%;margin:8px 0 14px}.chart{height:280px}.empty{padding:28px;color:var(--text-muted)}@media (max-width: 1280px){.kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-2,.grid-2.even{grid-template-columns:1fr}}@media (max-width: 768px){.sidebar{position:fixed;z-index:5;transform:translate(-100%)}.sidebar.open{transform:none}.menu-btn{display:inline}.content{padding:18px 14px 32px}.top{padding:0 14px}}@media (max-width: 390px){.kpis{grid-template-columns:1fr}.kpi strong{font-size:24px}}
