*{margin:0;padding:0;box-sizing:border-box}
:root{
  --primary:#4F6BFF;--primary-dark:#3B55E6;--bg:#F6F8FC;--card:#FFFFFF;
  --text:#1B2333;--text2:#6B7280;--border:#E7EAF3;--green:#10B981;--red:#EF4444;--orange:#F59E0B;
}
body{font-family:"PingFang SC","Microsoft YaHei",system-ui,sans-serif;background:var(--bg);color:var(--text);min-height:100vh;display:flex;flex-direction:column}
a{color:var(--primary);text-decoration:none}
.login-wrap{flex:1 1 auto;min-height:calc(100vh - 400px);display:flex;align-items:center;justify-content:center;padding:20px}
.login-card{width:100%;max-width:400px;background:var(--card);border-radius:16px;padding:40px 36px;box-shadow:0 8px 30px rgba(30,45,90,.08)}
.logo{display:flex;align-items:center;gap:10px;margin-bottom:28px;justify-content:center}
.logo-mark{width:38px;height:38px;border-radius:10px;background:linear-gradient(135deg,#0F172A,#334155);display:flex;align-items:center;justify-content:center;color:#fff;font-weight:700;font-size:20px}
.logo-name{font-size:22px;font-weight:700}
.login-card h2{font-size:16px;color:var(--text2);text-align:center;margin-bottom:24px;font-weight:400}
.field{margin-bottom:16px}
.field input{width:100%;padding:12px 14px;border:1px solid var(--border);border-radius:10px;font-size:14px;outline:none;transition:.2s}
.field input:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(79,107,255,.12)}
.btn{display:inline-block;border:none;cursor:pointer;border-radius:10px;font-size:14px;padding:12px 20px;transition:.2s;background:var(--primary);color:#fff}
.btn:hover{background:var(--primary-dark)}
.btn-plain{background:#fff;color:var(--text);border:1px solid var(--border)}
.btn-plain:hover{background:var(--bg)}
.btn-danger{background:var(--red)}
.btn-danger:hover{background:#DC2626}
.alt{margin-top:18px;text-align:center;font-size:13px;color:var(--text2)}
.layout{display:none;min-height:100vh;flex:1 1 auto}
.layout.on{display:block}
.topbar{height:60px;background:#0F172A;display:flex;align-items:center;padding:0 24px;position:sticky;top:0;z-index:50}
.topbar .logo{margin-bottom:0;justify-content:flex-start}
.topbar .logo-mark{width:30px;height:30px;font-size:15px;border-radius:8px;background:linear-gradient(135deg,#4F6BFF,#8B5CF6)}
.topbar .logo-name{font-size:17px;color:#fff}
.topbar-right{margin-left:auto;display:flex;align-items:center;gap:14px;font-size:13px;color:#94A3B8}
.link-logout{cursor:pointer;color:#F87171}
.body-wrap{display:flex;max-width:1440px;margin:0 auto;gap:20px;padding:20px 24px}
.sidenav{width:190px;flex-shrink:0}
.sidenav a{display:block;padding:11px 16px;border-radius:10px;color:var(--text2);font-size:14px;margin-bottom:4px;cursor:pointer}
.sidenav a.on{background:var(--primary);color:#fff}
.sidenav a:not(.on):hover{background:#EEF1F9}
.content{flex:1;min-width:0}
.page{display:none}
.page.on{display:block}
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--border);margin-bottom:18px}
.tabs a{padding:10px 16px;font-size:14px;color:var(--text2);border-bottom:2px solid transparent;cursor:pointer;margin-bottom:-1px}
.tabs a.on{color:var(--primary);border-bottom-color:var(--primary);font-weight:600}
.tab-page{display:none}
.tab-page.on{display:block}
.card{background:var(--card);border-radius:14px;padding:22px;margin-bottom:18px;box-shadow:0 2px 10px rgba(30,45,90,.04)}
.card h3{font-size:15px;margin-bottom:16px;display:flex;align-items:center;gap:8px}
.grid{display:grid;gap:14px}
.grid-4{grid-template-columns:repeat(4,1fr)}
.grid-3{grid-template-columns:repeat(3,1fr)}
.stat{background:var(--card);border-radius:14px;padding:18px 20px;box-shadow:0 2px 10px rgba(30,45,90,.04)}
.stat .lb{font-size:12px;color:var(--text2)}
.stat .val{font-size:24px;font-weight:700;margin-top:6px;font-variant-numeric:tabular-nums}
.stat .sub{font-size:12px;color:var(--text2);margin-top:4px}
table{width:100%;border-collapse:collapse;font-size:13px}
th{text-align:left;color:var(--text2);font-weight:500;padding:10px 12px;border-bottom:1px solid var(--border);white-space:nowrap}
td{padding:11px 12px;border-bottom:1px solid #F0F2F8;word-break:break-all}
tr:last-child td{border-bottom:none}
.tag{display:inline-block;padding:2px 10px;border-radius:20px;font-size:12px}
.tag-green{background:rgba(16,185,129,.1);color:var(--green)}
.tag-red{background:rgba(239,68,68,.1);color:var(--red)}
.tag-gray{background:#F0F2F8;color:var(--text2)}
.tag-blue{background:rgba(79,107,255,.1);color:var(--primary)}
.tag-orange{background:rgba(245,158,11,.12);color:#B45309}
.muted{color:var(--text2);font-size:12px}
.row-actions{display:flex;gap:8px;flex-wrap:wrap}
.row-actions a{cursor:pointer;font-size:12px;white-space:nowrap}
.danger{color:var(--red)}
.empty{text-align:center;color:var(--text2);padding:30px 0;font-size:13px}
.btn-sm{padding:7px 14px;font-size:13px}
.head-flex{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;gap:10px;flex-wrap:wrap}
.head-flex h3{margin-bottom:0}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.form-grid .full{grid-column:1/-1}
.form-grid label{display:block;font-size:12px;color:var(--text2);margin-bottom:5px}
.form-grid input,.form-grid select,.form-grid textarea{width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:8px;font-size:13px;outline:none;font-family:inherit}
.form-grid input:focus,.form-grid select:focus,.form-grid textarea:focus{border-color:var(--primary)}
.modal-mask{display:none;position:fixed;inset:0;background:rgba(15,23,42,.45);z-index:100;align-items:center;justify-content:center;padding:20px}
.modal-mask.on{display:flex}
.modal{background:#fff;border-radius:14px;width:100%;max-width:640px;max-height:88vh;overflow:auto;padding:24px}
.modal h3{margin-bottom:18px}
.toast{position:fixed;top:20px;left:50%;transform:translateX(-50%);background:#1B2333;color:#fff;padding:10px 22px;border-radius:10px;font-size:13px;z-index:200;display:none;max-width:80vw}
.copy-key{font-family:Consolas,monospace;font-size:12px;background:#F6F8FC;padding:2px 6px;border-radius:4px}
.alert{background:rgba(245,158,11,.08);border:1px solid rgba(245,158,11,.25);color:#92400E;padding:10px 14px;border-radius:10px;font-size:12px;margin-bottom:16px;line-height:1.7}
.toolbar{display:flex;gap:10px;margin-bottom:14px;flex-wrap:wrap;align-items:center}
.toolbar input,.toolbar select{padding:9px 12px;border:1px solid var(--border);border-radius:8px;font-size:13px;outline:none}
.toolbar input:focus,.toolbar select:focus{border-color:var(--primary)}
@media (max-width:1024px){
  .grid-4{grid-template-columns:repeat(2,1fr)}
  .grid-3{grid-template-columns:repeat(2,1fr)}
}
@media (max-width:768px){
  .body-wrap{flex-direction:column;padding:14px}
  .sidenav{width:100%;display:flex;overflow-x:auto;gap:6px}
  .sidenav a{white-space:nowrap;margin-bottom:0}
  .form-grid{grid-template-columns:1fr}
}
@media (max-width:480px){.grid-4{grid-template-columns:1fr}.grid-3{grid-template-columns:1fr}}
/* ---------- 全站通知横幅 ---------- */
.notice-bar{height:60px;display:flex;align-items:center;justify-content:center;gap:18px;color:#fff;font-size:14.5px;position:relative;text-align:center;padding:0 70px}
.notice-bar a.notice-close{position:absolute;right:24px;top:50%;transform:translateY(-50%);color:rgba(255,255,255,.85);font-size:12.5px;cursor:pointer;background:rgba(255,255,255,.16);padding:6px 14px;border-radius:20px;text-decoration:none}
.notice-bar a.notice-close:hover{background:rgba(255,255,255,.28)}
.notice-bar-demo{height:60px;display:flex;align-items:center;justify-content:center;gap:18px;color:#fff;font-size:14.5px;position:relative;border-radius:12px}
.notice-close-demo{position:absolute;right:24px;top:50%;transform:translateY(-50%);color:rgba(255,255,255,.85);font-size:12.5px;cursor:pointer}
@media (max-width:480px){.notice-bar{font-size:13px;padding:0 60px}.notice-bar a.notice-close{right:12px}}
/* ---------- 页脚（与前台 index.html 一致） ---------- */
.footer{background:#0B1020;color:#8892A6;padding:56px 0 32px;font-size:13px;flex-shrink:0}
.footer-in{max-width:1440px;margin:0 auto;padding:0 24px}
.footer-grid{display:grid;grid-template-columns:2fr 1fr 1fr 1fr;gap:40px}
.footer .f-logo{display:flex;align-items:center;gap:10px;color:#fff;margin-bottom:14px}
.footer .logo-mark{width:38px;height:38px;border-radius:10px;background:linear-gradient(135deg,#4F6BFF,#8B5CF6);display:flex;align-items:center;justify-content:center;color:#fff;font-weight:700;font-size:20px}
.footer .logo-name{font-size:22px;font-weight:700;color:#fff}
.footer h4{color:#E5E9F2;font-size:14px;margin-bottom:14px}
.footer ul{list-style:none}
.footer li{margin-bottom:9px}
.footer a{color:#8892A6}
.footer a:hover{color:#fff}
.footer .copy{margin-top:44px;padding-top:22px;border-top:1px solid rgba(255,255,255,.08);display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px;font-size:12px}
@media (max-width:1024px){
  .footer-grid{grid-template-columns:1fr 1fr}
}
@media (max-width:480px){
  .footer-grid{grid-template-columns:1fr}
  .footer{padding:40px 0 24px}
}
