/* 工具箱外壳：顶栏 + 首页模块卡 + 列表页。
   各模块自己的界面用各自的样式表；外壳只管"工具箱"这一层。
   外壳沿用深蓝，模块内容区不受影响（检查单内容区是纯黑白）。 */

:root{
  --navy:#0d2b45;
  --deep:#14456e;
  --blue:#2b7bbf;
  --mid:#6aa9dc;
  --pale:#dcebf8;
  --pale2:#f3f8fd;
  --line:#cfe0f0;
  --line2:#e3eef8;
  --ink:#1f3b52;
  --muted:#7d99b0;
  --danger:#b4483f;
  --radius:10px;
  --shadow:0 1px 3px rgba(13,43,69,.08), 0 6px 20px rgba(13,43,69,.06);
}

*{box-sizing:border-box;margin:0;padding:0;}
body{
  font-family:"Microsoft YaHei","PingFang SC","HarmonyOS Sans SC","Hiragino Sans GB",sans-serif;
  background:#eef3f8;color:var(--ink);font-size:15px;line-height:1.5;
  -webkit-text-size-adjust:100%;
}
button,input,select{font:inherit;color:inherit;}
a{color:inherit;text-decoration:none;}

/* ---------------------------------------------------------------- 顶栏 */
.bar{
  position:sticky;top:0;z-index:50;
  background:linear-gradient(120deg,var(--navy) 0%,var(--deep) 55%,var(--blue) 100%);
  color:#fff;box-shadow:0 2px 12px rgba(13,43,69,.22);
}
.bar-in{
  max-width:1180px;margin:0 auto;padding:10px 18px;
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;
}
.brand{font-size:17px;font-weight:700;letter-spacing:2px;white-space:nowrap;}
.brand small{display:block;font-size:9px;letter-spacing:1.6px;color:#a9cdea;font-weight:400;}
.spacer{flex:1;}
.who{font-size:13px;color:#cfe4f6;}
.btn{
  border:1px solid rgba(255,255,255,.35);background:rgba(255,255,255,.12);
  color:#fff;border-radius:8px;padding:7px 12px;cursor:pointer;
  font-size:13.5px;white-space:nowrap;transition:.15s;
}
.btn:hover{background:rgba(255,255,255,.24);}
.btn.solid{background:#fff;color:var(--deep);border-color:#fff;font-weight:600;}
.btn.solid:hover{background:var(--pale);}

/* ---------------------------------------------------------------- 布局 */
.wrap{max-width:1180px;margin:0 auto;padding:26px 18px 60px;}
.page-title{
  font-size:13px;font-weight:700;letter-spacing:3px;color:var(--muted);
  margin-bottom:16px;text-transform:uppercase;
}
.crumbs{font-size:13px;color:var(--muted);margin-bottom:14px;}
.crumbs a{color:var(--blue);}
.crumbs a:hover{text-decoration:underline;}

/* ---------------------------------------------------------------- 模块卡 */
.mod-grid{
  display:grid;gap:16px;
  grid-template-columns:repeat(auto-fill,minmax(280px,1fr));
}
.mod{
  display:flex;flex-direction:column;gap:8px;
  background:#fff;border:1px solid var(--line);border-radius:var(--radius);
  padding:20px;box-shadow:var(--shadow);transition:.16s;
  border-top:3px solid var(--blue);
}
.mod:hover{transform:translateY(-2px);box-shadow:0 10px 28px rgba(13,43,69,.13);}
.mod-tag{
  font-size:10px;letter-spacing:2px;color:var(--mid);font-weight:700;
}
.mod h2{font-size:19px;color:var(--deep);letter-spacing:1px;}
.mod p{font-size:13.5px;color:var(--muted);line-height:1.65;flex:1;}
.mod-go{font-size:13px;color:var(--blue);font-weight:600;}

/* ---------------------------------------------------------------- 通用卡片 */
.card{
  background:#fff;border:1px solid var(--line);border-radius:var(--radius);
  box-shadow:var(--shadow);overflow:hidden;
}
.card > h2{
  font-size:13px;font-weight:700;letter-spacing:1.6px;color:#fff;
  padding:9px 16px;display:flex;align-items:center;gap:10px;
  background:linear-gradient(90deg,var(--navy),var(--deep));
}
.card > h2 .right{margin-left:auto;font-weight:400;font-size:12px;opacity:.9;}
.pad{padding:16px;}

.btn-plain{
  border:1px solid var(--line);background:#fff;color:var(--deep);
  border-radius:8px;padding:9px 16px;cursor:pointer;font-size:14px;transition:.15s;
}
.btn-plain:hover{background:var(--pale2);border-color:var(--mid);}
.btn-plain.primary{background:var(--blue);border-color:var(--blue);color:#fff;font-weight:600;}
.btn-plain.primary:hover{background:var(--deep);border-color:var(--deep);}
.btn-plain.danger{color:var(--danger);border-color:#e8c4c0;}
.btn-plain.danger:hover{background:#fdf1f0;}

.empty{color:#b9cfe2;font-size:14px;padding:26px;text-align:center;}

/* ---------------------------------------------------------------- 模态框 */
.modal{
  position:fixed;inset:0;z-index:300;display:grid;place-items:center;
  background:rgba(13,43,69,.42);padding:20px;overflow:auto;
}
.modal[hidden]{display:none;}
.modal-box{
  background:#fff;border-radius:14px;max-width:620px;width:100%;
  padding:22px 24px;box-shadow:0 24px 70px rgba(6,22,38,.4);
  max-height:92vh;overflow:auto;
}
.modal-box h3{font-size:17px;color:var(--deep);margin-bottom:12px;letter-spacing:1px;}
.modal-box p{font-size:14px;color:var(--ink);line-height:1.65;margin-bottom:14px;}
.sub-h{font-size:13px;color:var(--deep);margin:20px 0 8px;letter-spacing:1px;}
.modal-acts{display:flex;gap:9px;justify-content:flex-end;margin-top:20px;}

.u-row{
  display:flex;align-items:center;gap:12px;padding:10px 4px;
  border-bottom:1px dashed var(--line2);flex-wrap:wrap;
}
.u-name{font-weight:600;display:flex;align-items:center;gap:7px;}
.badge{
  font-style:normal;font-size:10.5px;font-weight:700;padding:1px 7px;border-radius:5px;
  background:var(--pale);color:var(--blue);
}
.badge.off{background:#f0f2f5;color:#8b98a6;}
.u-meta{font-size:12.5px;color:var(--muted);}
.u-acts{margin-left:auto;display:flex;gap:6px;}
.mini{
  font-size:12.5px;padding:6px 11px;border-radius:6px;cursor:pointer;
  border:1px solid var(--line);background:#fff;color:var(--deep);transition:.12s;
}
.mini:hover{background:var(--pale2);border-color:var(--mid);}
.mini.danger{color:var(--danger);border-color:#e8c4c0;}
.mini.danger:hover{background:#fdf1f0;}

.newuser{display:flex;gap:8px;flex-wrap:wrap;align-items:center;}
.newuser input{
  border:1px solid var(--line);border-radius:8px;padding:9px 12px;font-size:14px;
  background:var(--pale2);outline:none;flex:1;min-width:150px;
}
.newuser input:focus{border-color:var(--blue);background:#fff;}
.newuser .chk{display:flex;align-items:center;gap:6px;font-size:13.5px;cursor:pointer;}
.newuser .chk input{width:17px;height:17px;accent-color:var(--blue);cursor:pointer;flex:0 0 auto;}

.toast{
  position:fixed;left:50%;bottom:26px;transform:translateX(-50%) translateY(90px);
  background:var(--navy);color:#fff;padding:11px 20px;border-radius:9px;
  font-size:13.5px;box-shadow:0 8px 26px rgba(13,43,69,.3);
  transition:transform .22s ease;z-index:400;pointer-events:none;max-width:80vw;
}
.toast.show{transform:translateX(-50%) translateY(0);}
