*{margin:0;padding:0;box-sizing:border-box}:root{--bg: #f5f6f8;--panel: #ffffff;--border: #e3e6ea;--text: #24292f;--text-dim: #6a737d;--primary: #1f6feb;--primary-dark: #1a5fd0;--danger: #cf222e;--sidebar: #1c2530;--sidebar-text: #b6bec9}body{font-family:Microsoft YaHei,PingFang SC,system-ui,sans-serif;background:var(--bg);color:var(--text);font-size:14px}.layout{display:flex;min-height:100vh}.sidebar{width:200px;background:var(--sidebar);color:var(--sidebar-text);display:flex;flex-direction:column;flex-shrink:0}.sidebar .brand{padding:20px 16px;font-size:16px;font-weight:700;color:#fff;border-bottom:1px solid rgba(255,255,255,.08)}.sidebar nav{flex:1;padding:12px 0}.sidebar nav a{display:block;padding:10px 20px;color:var(--sidebar-text);text-decoration:none}.sidebar nav a:hover{background:#ffffff0f;color:#fff}.sidebar nav a.router-exact-active{background:var(--primary);color:#fff}.sidebar .foot{padding:16px 20px;border-top:1px solid rgba(255,255,255,.08)}.sidebar .foot button{width:100%}.main{flex:1;padding:24px 32px;min-width:0}.page-title{font-size:18px;font-weight:700;margin-bottom:20px}.card{background:var(--panel);border:1px solid var(--border);border-radius:8px;padding:16px 20px;margin-bottom:20px}.stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:16px;margin-bottom:20px}.stat{background:var(--panel);border:1px solid var(--border);border-radius:8px;padding:16px}.stat .num{font-size:26px;font-weight:700;margin-top:4px}.stat .label{color:var(--text-dim);font-size:13px}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:10px 12px;border-bottom:1px solid var(--border);vertical-align:top}th{color:var(--text-dim);font-weight:400;font-size:13px;white-space:nowrap}tr:hover td{background:#f8f9fb}.text-dim{color:var(--text-dim)}.text-mono{font-family:Consolas,monospace;font-size:13px}.break-all{word-break:break-all}button{font-size:14px;padding:6px 16px;border-radius:6px;border:1px solid var(--border);background:var(--panel);color:var(--text);cursor:pointer}button:hover{background:#f3f4f6}button.primary{background:var(--primary);border-color:var(--primary);color:#fff}button.primary:hover{background:var(--primary-dark)}button.danger{color:var(--danger);border-color:var(--danger)}button.danger:hover{background:#fff5f5}button:disabled{opacity:.5;cursor:not-allowed}input{font-size:14px;padding:6px 10px;border:1px solid var(--border);border-radius:6px;outline:none}input:focus{border-color:var(--primary)}.toolbar{display:flex;gap:12px;margin-bottom:16px;align-items:center;flex-wrap:wrap}.toolbar input{width:260px}.toolbar .total{color:var(--text-dim)}.pager{display:flex;gap:8px;align-items:center;margin-top:16px;justify-content:flex-end}.tag{display:inline-block;padding:1px 8px;border-radius:10px;font-size:12px}.tag.green{background:#dafbe1;color:#1a7f37}.tag.gray{background:#eff2f5;color:var(--text-dim)}.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center}.login-box{width:340px;background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:32px}.login-box h2{margin-bottom:20px;text-align:center}.login-box .err{color:var(--danger);margin-top:12px;text-align:center}.login-box input{width:100%}.login-box button{width:100%;margin-top:16px;padding:8px}.trend-bars{display:flex;align-items:flex-end;gap:6px;height:120px;padding-top:8px}.trend-bars .bar-col{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;min-width:0}.trend-bars .bar{width:100%;max-width:32px;background:var(--primary);border-radius:3px 3px 0 0;min-height:1px}.trend-bars .bar-val{font-size:11px;color:var(--text-dim)}.trend-bars .bar-date{font-size:11px;color:var(--text-dim);white-space:nowrap}
