:root{--pri:#5046E5;--bg:#f1f5f9;--card:#fff;--txt:#0f172a;--muted:#64748b;--border:#e2e8f0;--warn:#D97706;--ok:#059669}
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:system-ui,"Microsoft YaHei",sans-serif;background:var(--bg);color:var(--txt);font-size:14px}
.container{max-width:1100px;margin:0 auto;padding:16px}
.topbar{background:var(--card);border-bottom:1px solid var(--border);padding:10px 16px;display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.topbar b{color:var(--pri)}
.topbar .spacer{flex:1}
button,.btn{background:var(--pri);color:#fff;border:none;border-radius:6px;padding:8px 16px;cursor:pointer;font-size:14px}
button.ghost,.btn.ghost{background:#fff;color:var(--pri);border:1px solid var(--pri)}
button.danger{background:#dc2626}
button.warn{background:var(--warn)}
button:disabled{opacity:.5;cursor:not-allowed}
input,select{padding:8px 10px;border:1px solid var(--border);border-radius:6px;font-size:14px;background:#fff;width:100%}
label{display:block;margin:8px 0 4px;color:var(--muted);font-size:13px}
.card{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:16px;margin-bottom:16px}
.grid{display:grid;gap:12px}
@media(min-width:768px){.g4{grid-template-columns:repeat(4,1fr)}.g3{grid-template-columns:repeat(3,1fr)}.g2{grid-template-columns:repeat(2,1fr)}}
@media(max-width:767px){.g4,.g3,.g2{grid-template-columns:repeat(2,1fr)}}
@media(max-width:520px){.g4,.g3,.g2{grid-template-columns:1fr}}
@media(max-width:768px){.container{padding:10px}.topbar{padding:8px 10px}.topbar button{padding:6px 10px;font-size:13px}}
table{width:100%;border-collapse:collapse;font-size:13px}
th,td{padding:8px 10px;border-bottom:1px solid var(--border);text-align:left;white-space:nowrap}
th{background:#f8fafc;color:var(--muted);font-weight:600}
.num{text-align:right;font-variant-numeric:tabular-nums}
.tag{display:inline-block;padding:2px 8px;border-radius:99px;font-size:12px}
.tag.actual{background:#dcfce7;color:var(--ok)}
.tag.forecast{background:#fef3c7;color:var(--warn)}
.tag.sim{background:#fde68a;color:#92400e}
.tag.off{background:#fee2e2;color:#b91c1c}
.stat{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:12px 16px}
.stat .v{font-size:20px;font-weight:700;color:var(--pri);margin-top:2px}
.stat .l{color:var(--muted);font-size:12px}
.tabs{display:flex;gap:8px;margin-bottom:16px;flex-wrap:wrap}
.tabs a{padding:8px 16px;border-radius:8px;text-decoration:none;color:var(--txt);background:var(--card);border:1px solid var(--border)}
.tabs a.on{background:var(--pri);color:#fff;border-color:var(--pri)}
.msg{padding:10px 14px;border-radius:8px;margin:10px 0;font-size:13px}
.msg.err{background:#fee2e2;color:#b91c1c}
.msg.ok{background:#dcfce7;color:var(--ok)}
.login-box{max-width:380px;margin:8vh auto}
.nav{display:none}
.nav a{color:var(--pri);text-decoration:none}
.muted{color:var(--muted);font-size:12px}
.flex{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.pager{display:flex;gap:8px;align-items:center;margin-top:10px}
