/* 后台统一样式（登录页 + 控制台）。配色与 .NET / Node 版保持一致：teal #009688，危险色 #FF5722。 */
:root { --teal:#009688; --teal-dark:#00877a; --orange:#FF5722; }

/* ---------- 登录页 ---------- */
html.login-page-root, body.login-page { height:100%; }
body.login-page {
  margin:0;
  font-family:"Microsoft YaHei UI","Microsoft YaHei",-apple-system,sans-serif;
  background:linear-gradient(135deg,#009688 0%,#00695c 100%);
  display:flex; align-items:center; justify-content:center;
}
.login-card {
  width:360px; background:#fff; border-radius:8px;
  box-shadow:0 10px 30px rgba(0,0,0,.22); padding:34px 30px 26px;
}
.login-card .logo { text-align:center; margin-bottom:6px; }
.login-card .logo .layui-icon { font-size:40px; color:var(--teal); }
.login-card h2 { text-align:center; font-size:20px; color:#1f2d3d; margin:8px 0 22px; font-weight:600; }
.login-card .layui-input { height:42px; }
.login-card .btn-login {
  width:100%; height:42px; background:var(--teal); color:#fff;
  border:none; border-radius:4px; font-size:15px; cursor:pointer;
}
.login-card .btn-login:hover { background:var(--teal-dark); }
.login-card .btn-login[disabled] { background:#b0bec5; cursor:not-allowed; }
.login-tip { text-align:center; color:#9aa4b2; font-size:12px; margin-top:14px; }
.login-err { color:var(--orange); font-size:13px; min-height:18px; margin-top:10px; }

/* ---------- 控制台 ---------- */
html, body { height:100%; }
body {
  margin:0; font-family:"Microsoft YaHei UI","Microsoft YaHei",-apple-system,sans-serif;
  background:#f2f3f5; color:#1f2d3d;
}
.topbar { height:52px; background:#20222a; color:#c2c9d6; display:flex; align-items:center; padding:0 18px;
  position:fixed; top:0; left:0; right:0; z-index:100; }
.topbar .brand { color:#fff; font-size:16px; font-weight:600; letter-spacing:1px; display:flex; align-items:center; }
.topbar .brand .layui-icon { color:var(--teal); margin-right:8px; font-size:20px; }
.topbar .spacer { flex:1; }
.topbar .who { color:#8a94a6; font-size:13px; margin-right:14px; }
.topbar .logout { color:#c2c9d6; cursor:pointer; font-size:13px; }
.topbar .logout:hover { color:#fff; }

.sidebar { position:fixed; top:52px; bottom:0; left:0; width:200px; background:#20222a; overflow-y:auto; z-index:90; }
.sidebar .nav-group { color:#6b7280; font-size:12px; padding:14px 20px 6px; letter-spacing:1px; }
.sidebar .nav-item { display:flex; align-items:center; padding:11px 20px; color:#c2c9d6; cursor:pointer;
  font-size:14px; border-left:3px solid transparent; }
.sidebar .nav-item .layui-icon { margin-right:10px; font-size:16px; }
.sidebar .nav-item:hover { color:#fff; background:#24262e; }
.sidebar .nav-item.active { color:#fff; background:#24262e; border-left-color:var(--teal); }

.main { margin-left:200px; margin-top:52px; padding:14px 18px 40px; }
.module-tabs { background:#fff; border-radius:6px 6px 0 0; padding:0 10px; display:flex; gap:2px;
  border-bottom:1px solid #eee; overflow-x:auto; }
.module-tabs .mtab { padding:12px 16px; font-size:13px; color:#5b6577; cursor:pointer; white-space:nowrap;
  border-bottom:2px solid transparent; }
.module-tabs .mtab:hover { color:var(--teal); }
.module-tabs .mtab.active { color:var(--teal); border-bottom-color:var(--teal); font-weight:600; }
.module-tabs .mtab i { margin-right:5px; }

.panel { display:none; }
.panel.active { display:block; }
.card { background:#fff; border-radius:0 0 6px 6px; padding:16px 18px 20px; box-shadow:0 1px 3px rgba(0,0,0,.05); }

.searchbar { display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-bottom:14px; }
.searchbar .label { color:#5b6577; font-size:13px; }
.searchbar select, .searchbar input { height:34px; border:1px solid #e2e5ea; border-radius:4px; padding:0 10px;
  font-size:13px; outline:none; color:#1f2d3d; }
.searchbar select:focus, .searchbar input:focus { border-color:var(--teal); }
.searchbar input.kw { width:220px; }
.btn { border:none; border-radius:4px; padding:0 16px; height:34px; font-size:13px; cursor:pointer; color:#fff;
  background:var(--teal); }
.btn:hover { background:var(--teal-dark); }
.btn.warn { background:var(--orange); }
.btn.warn:hover { background:#e64a19; }
.btn.ghost { background:#fff; color:#5b6577; border:1px solid #e2e5ea; }
.btn.ghost:hover { color:var(--teal); border-color:var(--teal); background:#f6fdfc; }
.btn[disabled] { opacity:.6; cursor:not-allowed; }
.toolbar { display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-bottom:12px; }
.toolbar .sel-info { color:#8a94a6; font-size:13px; }

.tbl-wrap { overflow:auto; }
table.tbl { width:100%; border-collapse:collapse; font-size:13px; }
table.tbl th, table.tbl td { padding:9px 10px; text-align:left; border-bottom:1px solid #f0f1f3; white-space:nowrap; }
table.tbl thead th { background:#fafbfc; color:#5b6577; font-weight:600; }
table.tbl tbody tr:nth-child(even) { background:#fafbfc; }
table.tbl tbody tr:hover { background:#f0fbfa; }
.mono { font-family:Consolas,Menlo,monospace; }
.tag { display:inline-block; padding:1px 8px; border-radius:10px; font-size:12px; line-height:18px; }
.tag-unused { background:#eef2f7; color:#5b6577; }
.tag-active { background:#e6f7f4; color:#009688; }
.tag-expired { background:#fff1f0; color:#f5222d; }
.tag-banned { background:#fff2e8; color:#FF5722; }
.tag-trial { background:#fffbe6; color:#d48806; margin-left:4px; }
.ops .mini { border:none; border-radius:3px; padding:3px 9px; font-size:12px; cursor:pointer; margin-right:5px;
  color:#fff; background:var(--teal); }
.ops .mini:hover { opacity:.88; }
.ops .mini.warn { background:var(--orange); }
.ops .mini.gray { background:#8a94a6; }

.pager { margin-top:14px; text-align:right; }
.empty { text-align:center; color:#aab2bd; padding:36px 0; font-size:13px; }
.hint { color:#8a94a6; font-size:13px; line-height:22px; }
.form-row { margin-bottom:16px; }
.form-row label { display:block; font-size:13px; color:#5b6577; margin-bottom:6px; }
.form-row input { width:280px; height:36px; border:1px solid #e2e5ea; border-radius:4px; padding:0 10px;
  font-size:13px; outline:none; }
.form-row input:focus { border-color:var(--teal); }
.keys-box { white-space:pre; font-family:Consolas,monospace; font-size:13px; background:#fafbfc;
  border:1px solid #eee; border-radius:4px; padding:10px; max-height:260px; overflow:auto; }
.log-box { white-space:pre-wrap; font-family:Consolas,monospace; font-size:12px; background:#1e1e1e;
  color:#d4d4d4; border-radius:4px; padding:10px; max-height:460px; overflow:auto; line-height:1.6; }

.stat-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:14px; }
.stat { background:#fff; border:1px solid #f0f1f3; border-radius:6px; padding:16px 18px; }
.stat .k { color:#8a94a6; font-size:13px; }
.stat .v { font-size:26px; font-weight:600; margin-top:6px; color:#1f2d3d; }
.stat.t .v { color:var(--teal); }
.stat.d .v { color:var(--orange); }
.stat.clickable { cursor:pointer; transition:border-color .15s ease, box-shadow .15s ease; }
.stat.clickable:hover { border-color:#cfd8e3; box-shadow:0 2px 8px rgba(31,45,61,.06); }
