/* ============================================================
   超级通讯平台 · 后台管理控制台样式（独立，电脑宽屏）
   复用 tokens.css 的午夜蓝令牌；与用户端 web/ 完全隔离。
   ============================================================ */
* { margin:0; padding:0; box-sizing:border-box; -webkit-tap-highlight-color:transparent; }
html, body { height:100%; }
body {
  font-family: var(--font); font-size: var(--fs-14); color: var(--text);
  background:
    radial-gradient(1000px 500px at 90% -10%, rgba(59,130,246,0.08), transparent 60%),
    #070A14;
  -webkit-font-smoothing: antialiased;
}
a { color:inherit; text-decoration:none; }
button { font-family:inherit; cursor:pointer; border:none; background:none; color:inherit; }
input,select,textarea { font-family:inherit; }
ul { list-style:none; }
::-webkit-scrollbar { width:9px; height:9px; }
::-webkit-scrollbar-thumb { background:rgba(255,255,255,.1); border-radius:8px; }
::-webkit-scrollbar-track { background:transparent; }

.row{display:flex;align-items:center;} .between{justify-content:space-between;}
.grow{flex:1;} .muted{color:var(--text-sub);} .faint{color:var(--text-faint);}
.gap-2{gap:8px;} .gap-3{gap:12px;} .gap-4{gap:16px;}
.hidden{display:none!important;} .ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}

/* ---------- 登录页 ---------- */
.login-wrap { min-height:100vh; display:flex; align-items:center; justify-content:center; padding:24px; }
.login-card { width:380px; background:var(--bg-card); border:1px solid var(--border); border-radius:var(--r-xl); padding:36px 32px; box-shadow:var(--shadow-lg); }
.login-card .logo { width:64px;height:64px;border-radius:18px;margin:0 auto 18px;display:flex;align-items:center;justify-content:center;font-size:32px;
  background:linear-gradient(135deg,var(--primary),var(--accent)); box-shadow:var(--glow-primary); }
.login-card h1 { text-align:center; font-size:20px; font-weight:800; }
.login-card .sub { text-align:center; color:var(--text-sub); font-size:13px; margin:8px 0 24px; }
.field { margin-bottom:14px; }
.field label { display:block; font-size:12px; color:var(--text-sub); margin-bottom:6px; }
.input { width:100%; height:44px; background:var(--bg-input); border:1px solid var(--border); border-radius:var(--r-md); padding:0 14px; color:var(--text); font-size:14px; }
.input:focus { outline:none; border-color:var(--primary); }
.btn { display:inline-flex; align-items:center; justify-content:center; gap:6px; height:42px; padding:0 18px; border-radius:var(--r-md); font-size:14px; font-weight:600; transition:all .15s; }
.btn-primary { background:var(--primary); color:#fff; } .btn-primary:hover{background:var(--primary-strong);}
.btn-ghost { background:var(--bg-card-2); color:var(--text); border:1px solid var(--border-strong); } .btn-ghost:hover{border-color:var(--primary);color:var(--accent);}
.btn-sm { height:34px; padding:0 12px; font-size:13px; }
.btn-block { width:100%; }
.login-tip { text-align:center; font-size:12px; color:var(--text-faint); margin-top:16px; }

/* ---------- 主框架 ---------- */
.layout { display:flex; min-height:100vh; }
.sidebar { width:230px; flex:none; background:var(--bg-elevated); border-right:1px solid var(--border); display:flex; flex-direction:column; position:sticky; top:0; height:100vh; }
.sidebar .brand { display:flex; align-items:center; gap:10px; padding:18px 18px; border-bottom:1px solid var(--border); }
.sidebar .brand .b-ico { width:38px;height:38px;border-radius:11px;display:flex;align-items:center;justify-content:center;font-size:20px;background:linear-gradient(135deg,var(--primary),var(--accent)); }
.sidebar .brand .b-t { font-weight:800; font-size:15px; } .sidebar .brand .b-s{font-size:11px;color:var(--text-faint);}
.nav { flex:1; overflow-y:auto; padding:8px 10px 14px; }
.nav-group-title { font-size:11px; color:var(--text-faint); font-weight:600; letter-spacing:.5px;
  padding:12px 12px 5px; text-transform:none; }
.nav-group-title:first-child { padding-top:4px; }
.nav-item { display:flex; align-items:center; gap:11px; padding:11px 12px; border-radius:var(--r-md); color:var(--text-sub); font-size:14px; cursor:pointer; margin-bottom:2px; transition:all .14s; }
.nav-item:hover { background:var(--bg-card-2); color:var(--text); }
.nav-item.active { background:var(--primary-weak); color:var(--accent); font-weight:600; }
.nav-item .ni-ico { width:22px; text-align:center; font-size:17px; }
.nav-item .ni-badge { margin-left:auto; font-size:11px; background:var(--danger); color:#fff; border-radius:var(--r-pill); padding:0 6px; min-width:18px; text-align:center; }
.sidebar .side-foot { padding:12px 16px; border-top:1px solid var(--border); font-size:11px; color:var(--text-faint); }

.main { flex:1; display:flex; flex-direction:column; min-width:0; }
.topbar { height:58px; flex:none; display:flex; align-items:center; gap:14px; padding:0 22px; background:var(--bg-elevated); border-bottom:1px solid var(--border); position:sticky; top:0; z-index:5; }
.topbar .page-title { font-size:17px; font-weight:700; }
.topbar .tb-right { margin-left:auto; display:flex; align-items:center; gap:14px; }
.topbar .tb-ico { width:36px;height:36px;border-radius:10px;display:flex;align-items:center;justify-content:center;color:var(--text-sub); }
.topbar .tb-ico:hover{background:var(--bg-card-2);color:var(--accent);}
.topbar .admin-chip { display:flex;align-items:center;gap:8px;padding:5px 10px 5px 6px;background:var(--bg-card-2);border:1px solid var(--border);border-radius:var(--r-pill);font-size:13px; }
.avatar { width:34px;height:34px;border-radius:50%;background:linear-gradient(135deg,#243049,#161d30);display:flex;align-items:center;justify-content:center;font-weight:600;border:1px solid var(--border);flex:none; }
.avatar.sm{width:30px;height:30px;font-size:13px;}

.content { flex:1; padding:22px; overflow-y:auto; }

/* ---------- 通用组件 ---------- */
.kpis { display:grid; grid-template-columns:repeat(4,1fr); gap:14px; margin-bottom:18px; }
.kpi { background:linear-gradient(135deg,#18233b,#131a2c); border:1px solid var(--border); border-radius:var(--r-lg); padding:16px; }
.kpi .k-top{display:flex;align-items:center;justify-content:space-between;}
.kpi .k-ico{width:40px;height:40px;border-radius:11px;background:var(--primary-weak);display:flex;align-items:center;justify-content:center;font-size:20px;}
.kpi .k-n{font-size:26px;font-weight:800;margin-top:10px;}
.kpi .k-l{font-size:12px;color:var(--text-sub);margin-top:2px;}
.kpi .k-up{font-size:12px;color:var(--success);} .kpi .k-down{font-size:12px;color:var(--danger);}

.panel { background:var(--bg-card); border:1px solid var(--border); border-radius:var(--r-lg); margin-bottom:16px; overflow:hidden; }
.panel-head { display:flex; align-items:center; padding:14px 16px; border-bottom:1px solid var(--border); }
.panel-head .ph-t { font-weight:700; } .panel-head .ph-r{margin-left:auto;display:flex;gap:8px;align-items:center;}
.panel-body { padding:16px; }

.toolbar { display:flex; gap:10px; align-items:center; margin-bottom:14px; flex-wrap:wrap; }
.search { height:38px; background:var(--bg-input); border:1px solid var(--border); border-radius:var(--r-md); padding:0 12px; color:var(--text); min-width:240px; }
.search:focus{outline:none;border-color:var(--primary);}
.select { height:38px; background:var(--bg-input); border:1px solid var(--border); border-radius:var(--r-md); padding:0 10px; color:var(--text); }

/* 表格 */
table.tbl { width:100%; border-collapse:collapse; font-size:13px; }
table.tbl th { text-align:left; padding:11px 14px; color:var(--text-sub); font-weight:600; border-bottom:1px solid var(--border); background:var(--bg-elevated); position:sticky; top:0; white-space:nowrap; }
table.tbl td { padding:11px 14px; border-bottom:1px solid var(--divider); }
table.tbl tr:hover td { background:var(--bg-card-2); }
.tbl-wrap { background:var(--bg-card); border:1px solid var(--border); border-radius:var(--r-lg); overflow:auto; }

.tag { display:inline-flex; align-items:center; gap:4px; padding:2px 9px; border-radius:var(--r-pill); font-size:12px; font-weight:500; background:var(--bg-card-2); color:var(--text-sub); border:1px solid var(--border); }
.tag.green{background:rgba(52,211,153,.14);color:var(--success);border-color:transparent;}
.tag.red{background:rgba(242,84,91,.14);color:var(--danger);border-color:transparent;}
.tag.amber{background:rgba(251,191,36,.14);color:var(--warning);border-color:transparent;}
.tag.blue{background:var(--primary-weak);color:var(--accent);border-color:transparent;}

.link-btn { color:var(--accent); font-size:13px; cursor:pointer; } .link-btn:hover{text-decoration:underline;}
.link-btn.danger{color:var(--danger);}

/* 图表（纯CSS柱状） */
.chart { height:200px; display:flex; align-items:flex-end; gap:10px; padding:16px; }
.chart .bar { flex:1; background:linear-gradient(180deg,var(--primary),rgba(59,130,246,.15)); border-radius:6px 6px 0 0; position:relative; min-height:6px; transition:height .4s; }
.chart .bar span { position:absolute; bottom:-20px; left:0; right:0; text-align:center; font-size:11px; color:var(--text-faint); }

/* 两栏 */
.cols { display:grid; grid-template-columns:1fr 1fr; gap:16px; }
.cols-3 { display:grid; grid-template-columns:repeat(3,1fr); gap:16px; }

/* 进度/水位条 */
.bar-line { height:8px; border-radius:4px; background:var(--bg-input); overflow:hidden; }
.bar-line .fill { height:100%; }

/* 列表项 */
.li { display:flex; align-items:center; gap:12px; padding:12px 14px; border-bottom:1px solid var(--divider); }
.li:last-child{border-bottom:none;}

/* 开关 */
.switch{position:relative;width:42px;height:24px;flex:none;}
.switch input{opacity:0;width:0;height:0;}
.switch .slider{position:absolute;inset:0;background:var(--bg-input);border:1px solid var(--border-strong);border-radius:var(--r-pill);transition:.2s;}
.switch .slider::before{content:"";position:absolute;height:18px;width:18px;left:2px;top:2px;background:#fff;border-radius:50%;transition:.2s;}
.switch input:checked + .slider{background:var(--primary);border-color:transparent;}
.switch input:checked + .slider::before{transform:translateX(18px);}

.empty-note{ text-align:center; color:var(--text-faint); font-size:12px; padding:14px; }

/* 弹窗 */
.modal-mask{ position:fixed; inset:0; background:rgba(6,10,20,.7); display:flex; align-items:center; justify-content:center; z-index:200; padding:20px; }
.modal{ width:420px; max-width:100%; background:var(--bg-card); border:1px solid var(--border-strong); border-radius:var(--r-lg); box-shadow:var(--shadow-lg); max-height:90vh; display:flex; flex-direction:column; }
.modal-head{ display:flex; align-items:center; padding:16px 18px; border-bottom:1px solid var(--border); font-weight:700; }
.modal-head .modal-x{ margin-left:auto; cursor:pointer; color:var(--text-sub); }
.modal-body{ padding:18px; overflow-y:auto; }
.modal-body .field{ margin-bottom:14px; }
.modal-body .field label{ display:block; font-size:12px; color:var(--text-sub); margin-bottom:6px; }
.modal-foot{ display:flex; justify-content:flex-end; gap:10px; padding:14px 18px; border-top:1px solid var(--border); }

/* 响应式：窄屏折叠侧栏 */
@media (max-width: 860px){
  .sidebar{ position:fixed; left:0; top:0; z-index:50; transform:translateX(-100%); transition:transform .2s; }
  .sidebar.open{ transform:translateX(0); }
  .kpis{ grid-template-columns:repeat(2,1fr); }
  .cols,.cols-3{ grid-template-columns:1fr; }
}
