/* @source 母版 <style> 壳层专属段,逐段拼装(#login/.side/.topbar/.drawer/.modal/.palette/.notif-pop/.role-pop/.scope-pop/#toasts)。
   本文件收:第3节登录页 + 第4节壳(去掉 .page/.page-h,那两个是模块页头原语,已归 base.css)+ 第11节抽屉/弹窗/命令面板 + Toast +
   第12节内 .notif-pop/.role-pop/.scope 前缀(全局包范围弹层)。
   注(2026-09-09 更新):#roleGrid/.role-grid/.role-card/.role-sect(登录页角色卡片墙)已随 renderLogin() 一并删除
   (未登录页面不得渲染在岗人员名单),这批选择器已从 scripts/check_css_parity.js 的登录页例外清单里按选择器剔除比对。 */

/* -------- 第3节:登录页 #login(2026-09-09 成品化重做:公司名/系统名/账号/密码/登录/错误位,去口号与教学提示) -------- */
/* ============ 3. 登录页 ============ */
#login {
  position:fixed;
  inset:0;
  background:var(--bg-page);
  display:flex;
  align-items:center;
  align-items:safe center;   /* 小屏内容高于视口时退回 start 对齐,使内容整体可滚达 */
  justify-content:center;
  overflow-y:auto;
  padding:var(--sp-6);
  z-index:200;
}
#login.hide {
  display:none;
}
.login-wrap {
  width:368px;
  max-width:100%;
}
.login-card {
  background:var(--bg);
  border:1px solid var(--border);
  border-radius:var(--r-lg);
  box-shadow:var(--shadow-xs);
  padding:var(--sp-8) var(--sp-6) var(--sp-5);
}
.login-logo {
  display:flex;
  justify-content:center;
  margin-bottom:var(--sp-5);
}
.login-logo .mark {
  width:34px;
  height:34px;
  border-radius:var(--r-lg);
  background:var(--accent);
  display:flex;
  align-items:center;
  justify-content:center;
  color:#fff;
  font-weight:700;
  font-size:var(--fs-xl);
}
.login-title {
  font-size:var(--fs-2xl);
  font-weight:650;
  letter-spacing:.3px;
  text-align:center;
  line-height:1.35;
}
.login-org {
  margin-top:var(--sp-2);
  text-align:center;
  color:var(--text-2);
  font-size:var(--fs-sm);
  letter-spacing:.5px;
}
.login-form {
  margin-top:var(--sp-8);
  text-align:left;
}
.login-form .field {
  margin-bottom:var(--sp-4);
}
.login-form #lg-btn {
  width:100%;
  justify-content:center;
  padding:7px 12px;
  margin-top:var(--sp-2);
}
.login-msg {
  min-height:18px;
  margin-top:var(--sp-2);
  text-align:center;
  font-size:var(--fs-sm);
  color:var(--red);
}
.rp-sect {
  padding:6px 10px 2px;
  font-size:var(--fs-xs);
  font-weight:650;
  color:var(--text-3);
  letter-spacing:2px;
}
#content.ro-gm .btn.pri:not(.ro-keep),#content.ro-gm .btn.danger:not(.ro-keep) {
  display:none!important;
}
#content.ro-gm [data-flow] {
  display:none;
}


/* -------- @source L318-563 第4节:全局壳(#app/.side/.topbar/.rolechip 等) -------- */
/* ============ 4. 全局壳 ============ */
#app {
  display:none;
  height:100vh;
}
#app.show {
  display:flex;
}
.side {
  width:216px;
  min-width:216px;
  background:var(--bg-subtle);
  border-right:1px solid var(--border);
  display:flex;
  flex-direction:column;
  transition:margin var(--t);
}
.side-head {
  padding:14px 14px 10px;
  display:flex;
  align-items:center;
  gap:8px;
}
.side-head .mark {
  width:24px;
  height:24px;
  border-radius:7px;
  background:var(--accent);
  color:#fff;
  display:flex;
  align-items:center;
  justify-content:center;
  font-weight:700;
  font-size:var(--fs-sm);
  box-shadow:0 1px 2px rgba(var(--accent-rgb),.35);
}
.side-head .nm {
  font-weight:650;
  font-size:var(--fs-lg);
  letter-spacing:.2px;
}
.side-body {
  flex:1;
  overflow-y:auto;
  padding:4px 8px 16px;
}
.sgroup {
  margin-top:10px;
}
.sgroup-h {
  display:flex;
  align-items:center;
  gap:4px;
  padding:4px 8px;
  color:var(--text-3);
  font-size:var(--fs-xs);
  font-weight:600;
  letter-spacing:1px;
  cursor:pointer;
  user-select:none;
  border-radius:var(--r-sm);
}
.sgroup-h:hover {
  color:var(--text-2);
}
.sgroup.common .sgroup-h {
  color:var(--accent);
}
.sgroup-h svg {
  transition:transform var(--t);
}
.sgroup.closed .sgroup-h svg {
  transform:rotate(-90deg);
}
.sgroup.closed .sitem {
  display:none;
}
.sitem {
  display:flex;
  align-items:center;
  gap:9px;
  padding:6px 9px;
  border-radius:var(--r-md);
  color:var(--text-2);
  font-size:var(--fs-md);
  cursor:pointer;
  transition:background var(--t),color var(--t);
  margin:1px 0;
  width:100%;
  text-align:left;
}
.sitem:hover {
  background:var(--bg-hover);
  color:var(--text);
}
.sitem.on {
  background:var(--accent-weak);
  color:var(--accent);
  font-weight:550;
}
.sitem svg {
  flex:none;
  opacity:.75;
}
.sitem .cnt {
  margin-left:auto;
  font-size:var(--fs-xs);
  background:var(--bg-active);
  border-radius:var(--r-pill);
  padding:0 6px;
  line-height:17px;
  color:var(--text-2);
  font-variant-numeric:tabular-nums;
}
.sitem.on .cnt {
  background:#fff;
  color:var(--accent);
}
.side-foot {
  padding:10px 12px;
  border-top:1px solid var(--border);
  font-size:var(--fs-xs);
  color:var(--text-3);
}
.side-foot .kbd {
  margin-left:2px;
}
.main {
  flex:1;
  display:flex;
  flex-direction:column;
  min-width:0;
}
.topbar {
  height:48px;
  border-bottom:1px solid var(--border);
  display:flex;
  align-items:center;
  padding:0 var(--sp-5);
  gap:var(--sp-3);
  background:var(--bg);
}
.crumb {
  display:flex;
  align-items:center;
  gap:6px;
  color:var(--text-2);
  font-size:var(--fs-md);
}
.crumb b {
  color:var(--text);
  font-weight:600;
}
.searchbox {
  display:flex;
  align-items:center;
  gap:8px;
  border:1px solid var(--border);
  border-radius:var(--r-md);
  padding:5px 10px;
  color:var(--text-3);
  font-size:var(--fs-sm);
  cursor:pointer;
  min-width:220px;
  transition:border-color var(--t),background var(--t);
  background:var(--bg-subtle);
}
.searchbox:hover {
  background:var(--bg);
  border-color:var(--border-strong);
}
.kbd {
  display:inline-block;
  border:1px solid var(--border);
  border-bottom-width:2px;
  border-radius:var(--r-sm);
  padding:0 5px;
  font-size:10px;
  color:var(--text-2);
  background:var(--bg);
  font-family:inherit;
  line-height:16px;
}
.iconbtn {
  width:30px;
  height:30px;
  border-radius:var(--r-md);
  display:flex;
  align-items:center;
  justify-content:center;
  color:var(--text-2);
  position:relative;
  transition:background var(--t);
}
.iconbtn:hover {
  background:var(--bg-hover);
}
.iconbtn.dis {
  opacity:.35;
  cursor:not-allowed;
  pointer-events:none;
}
.iconbtn .dot {
  position:absolute;
  top:5px;
  right:5px;
  width:7px;
  height:7px;
  border-radius:50%;
  background:var(--red);
  border:1.5px solid #fff;
}
.rolechip {
  display:flex;
  align-items:center;
  gap:8px;
  border:1px solid var(--border);
  border-radius:var(--r-md);
  padding:4px 10px 4px 5px;
  cursor:pointer;
  transition:border-color var(--t);
  background:var(--bg);
}
.rolechip:hover {
  border-color:var(--border-strong);
}
.avatar {
  width:22px;
  height:22px;
  border-radius:50%;
  background:var(--accent);
  color:#fff;
  font-size:10px;
  display:flex;
  align-items:center;
  justify-content:center;
  font-weight:600;
}
.rolechip .rn {
  font-size:var(--fs-sm);
  font-weight:500;
}
.rolechip .rr {
  font-size:var(--fs-xs);
  color:var(--text-3);
}

/* -------- @source L564-568 第4节内:.content(壳唯一滚动容器) -------- */
.content {
  flex:1;
  overflow-y:auto;
  background:var(--bg-page);
}

/* -------- @source L1134-1325 第11节:抽屉 / 弹窗 / 命令面板(.drawer/.modal/.palette) -------- */
/* ============ 11. 抽屉 / 弹窗 / 命令面板 / Toast ============ */
.drawer-mask {
  position:fixed;
  inset:0;
  background:rgba(20,21,38,.32);
  opacity:0;
  pointer-events:none;
  transition:opacity var(--t);
  z-index:90;
}
.drawer-mask.show {
  opacity:1;
  pointer-events:auto;
}
.drawer {
  position:fixed;
  top:0;
  right:0;
  bottom:0;
  width:920px;
  max-width:92vw;
  background:var(--bg);
  border-left:1px solid var(--border);
  box-shadow:var(--shadow-lg);
  transform:translateX(102%);
  transition:transform 200ms cubic-bezier(.4,0,.2,1);
  z-index:91;
  display:flex;
  flex-direction:column;
}
.drawer.show {
  transform:none;
}
.drawer-h {
  padding:14px 20px;
  border-bottom:1px solid var(--border);
  display:flex;
  align-items:flex-start;
  gap:10px;
}
.drawer-b {
  flex:1;
  overflow-y:auto;
  padding:16px 20px;
}
.modal-mask {
  position:fixed;
  inset:0;
  background:rgba(20,21,38,.36);
  display:flex;
  align-items:flex-start;
  justify-content:center;
  padding-top:9vh;
  opacity:0;
  pointer-events:none;
  transition:opacity var(--t);
  z-index:110;
}
.modal-mask.show {
  opacity:1;
  pointer-events:auto;
}
.modal {
  background:var(--bg);
  border-radius:var(--r-lg);
  box-shadow:var(--shadow-lg);
  width:560px;
  max-width:92vw;
  max-height:80vh;
  display:flex;
  flex-direction:column;
  transform:translateY(8px) scale(.98);
  transition:transform var(--t);
}
.modal-mask.show .modal {
  transform:none;
}
.modal.wide {
  width:840px;
}
.modal-h {
  padding:14px 20px;
  border-bottom:1px solid var(--border);
  display:flex;
  align-items:center;
  font-weight:600;
  font-size:var(--fs-lg);
}
.modal-h .sp {
  flex:1;
}
.modal-b {
  padding:16px 20px;
  overflow-y:auto;
}
.modal-f {
  padding:12px 20px;
  border-top:1px solid var(--border);
  display:flex;
  justify-content:flex-end;
  gap:8px;
  background:var(--bg-subtle);
  border-radius:0 0 var(--r-lg) var(--r-lg);
}
.palette-mask {
  position:fixed;
  inset:0;
  background:rgba(20,21,38,.30);
  display:flex;
  align-items:flex-start;
  justify-content:center;
  padding-top:14vh;
  opacity:0;
  pointer-events:none;
  transition:opacity var(--t);
  z-index:120;
}
.palette-mask.show {
  opacity:1;
  pointer-events:auto;
}
.palette {
  width:600px;
  max-width:92vw;
  background:var(--bg);
  border-radius:var(--r-lg);
  box-shadow:var(--shadow-lg);
  overflow:hidden;
  border:1px solid var(--border);
}
.palette input {
  width:100%;
  border:none;
  outline:none;
  padding:14px 18px;
  font-size:15px;
  border-bottom:1px solid var(--border);
}
.palette-list {
  max-height:380px;
  overflow-y:auto;
  padding:6px;
}
.pal-group {
  padding:8px 12px 2px;
  font-size:var(--fs-xs);
  color:var(--text-3);
  font-weight:600;
  letter-spacing:.5px;
}
.pal-item {
  display:flex;
  align-items:center;
  gap:10px;
  padding:8px 12px;
  border-radius:var(--r-md);
  cursor:pointer;
  font-size:var(--fs-md);
}
.pal-item .desc {
  color:var(--text-3);
  font-size:var(--fs-sm);
}
.pal-item .sp {
  flex:1;
}
.pal-item.sel {
  background:var(--accent-weak);
  color:var(--accent);
}
.pal-item:hover {
  background:var(--accent-weak);
  color:var(--accent);
}
.pal-item svg {
  opacity:.7;
  flex:none;
}
.pal-empty {
  padding:24px;
  text-align:center;
  color:var(--text-3);
}
.palette-foot {
  border-top:1px solid var(--border);
  padding:8px 14px;
  display:flex;
  gap:14px;
  font-size:var(--fs-xs);
  color:var(--text-3);
  background:var(--bg-subtle);
}

/* -------- @source L1369-1416 第11节:Toast -------- */
#toasts {
  position:fixed;
  bottom:24px;
  left:50%;
  transform:translateX(-50%);
  z-index:150;
  display:flex;
  flex-direction:column;
  gap:8px;
  align-items:center;
}
.toast {
  background:#1D1F2A;
  color:#fff;
  border-radius:var(--r-md);
  padding:9px 16px;
  font-size:var(--fs-md);
  box-shadow:var(--shadow-md);
  display:flex;
  align-items:center;
  gap:8px;
  animation:toastin 180ms ease;
}
.toast.ok::before {
  content:"✓";
  color:#4ADE80;
  font-weight:700;
}
.toast.warn::before {
  content:"!";
  color:#FBBF24;
  font-weight:700;
}
.toast.err::before {
  content:"✕";
  color:#F87171;
  font-weight:700;
}
@keyframes toastin {
  from {
    opacity:0;
    transform:translateY(8px);
  }
  to {
    opacity:1;
  }
}


/* -------- @source L1705-1831 第12节内:.notif-pop/.role-pop/.scope 前缀(全局包范围弹层) -------- */
.notif-pop {
  position:fixed;
  top:52px;
  right:120px;
  width:360px;
  background:var(--bg);
  border:1px solid var(--border);
  border-radius:var(--r-lg);
  box-shadow:var(--shadow-md);
  z-index:95;
  display:none;
  max-height:70vh;
  overflow-y:auto;
}
.notif-pop.show {
  display:block;
  animation:fadein 150ms ease;
}
.notif-item {
  padding:10px 14px;
  border-bottom:1px solid var(--line);
  font-size:var(--fs-sm);
  display:flex;
  gap:10px;
  cursor:pointer;
}
.notif-item:hover {
  background:var(--bg-subtle);
}
.notif-item .ni-dot {
  width:7px;
  height:7px;
  border-radius:50%;
  background:var(--accent);
  margin-top:6px;
  flex:none;
}
.notif-item.read .ni-dot {
  background:var(--border);
}
.role-pop {
  position:fixed;
  top:52px;
  right:16px;
  width:250px;
  background:var(--bg);
  border:1px solid var(--border);
  border-radius:var(--r-lg);
  box-shadow:var(--shadow-md);
  z-index:95;
  display:none;
  padding:6px;
}
.role-pop.show {
  display:block;
  animation:fadein 150ms ease;
}
.role-pop .rp-item {
  display:flex;
  align-items:center;
  gap:8px;
  padding:7px 10px;
  border-radius:var(--r-md);
  cursor:pointer;
  font-size:var(--fs-md);
  width:100%;
  text-align:left;
}
.role-pop .rp-item:hover {
  background:var(--bg-hover);
}
.role-pop .rp-item.on {
  background:var(--accent-weak);
  color:var(--accent);
}
.role-pop .rp-item .rr {
  margin-left:auto;
  font-size:var(--fs-xs);
  color:var(--text-3);
}
/* 全局包范围（壳层 scope- 前缀） */
.scope-btn{display:flex;align-items:center;gap:6px;border:1px solid var(--border);border-radius:var(--r-md);padding:5px 10px;font-size:var(--fs-sm);cursor:pointer;background:var(--bg);color:var(--text-2);position:relative;max-width:170px;white-space:nowrap;overflow:hidden;transition:border-color var(--t)}
.scope-btn:hover{border-color:var(--border-strong)}
.scope-btn .dot{position:absolute;top:4px;right:4px;width:7px;height:7px;border-radius:50%;background:var(--amber)}
.scope-badge{display:inline-flex;align-items:center;gap:4px;margin-left:10px;padding:2px 8px;border-radius:var(--r-pill);font-size:var(--fs-xs);border:1px solid var(--border);color:var(--text-3);cursor:pointer;white-space:nowrap;background:var(--bg)}
.scope-badge.on{border-color:var(--amber-border);color:var(--amber-text-on-bg);background:var(--amber-bg);font-weight:600}
.scope-badge.warn{border-color:var(--red-border);color:var(--red);background:var(--red-bg);cursor:default}
.scope-badge.gray{cursor:default}
.scope-pop{position:fixed;top:52px;right:16px;width:392px;background:var(--bg);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--shadow-md);display:none;flex-direction:column;z-index:70}
.scope-pop.show{display:flex}
.scope-hd{display:flex;align-items:center;padding:10px 14px;border-bottom:1px solid var(--border)}
.scope-kw{margin:8px 10px}
.scope-master{display:flex;align-items:center;gap:8px;padding:8px 12px;border-bottom:1px solid var(--border);background:var(--bg-subtle);cursor:pointer}
.scope-master-lab{flex:1;font-size:var(--fs-sm);font-weight:650;color:var(--text)}
.scope-master-lab small{display:block;font-size:var(--fs-xs);font-weight:500;color:var(--text-3);margin-top:1px}
.scope-list{max-height:320px;overflow-y:auto;padding:2px 6px}
.scope-group{border-bottom:1px solid var(--line)}
.scope-group:last-child{border-bottom:none}
.scope-group-head{display:flex;align-items:center;gap:8px;padding:8px 6px;cursor:pointer;border-radius:var(--r-sm)}
.scope-group-head:hover{background:var(--bg-subtle)}
.scope-chev{display:flex;color:var(--text-3);flex:0 0 auto;transition:transform var(--t)}
.scope-group.closed .scope-chev{transform:rotate(-90deg)}
.scope-group.closed .scope-pkg-list{display:none}
.scope-group-name{flex:1;font-size:var(--fs-sm);font-weight:600;color:var(--text)}
.scope-group-meta{font-size:var(--fs-xs);color:var(--text-3);font-weight:500;white-space:nowrap}
.scope-pkg-list{padding:0 6px 4px 31px}
.scope-pkg-row{display:flex;align-items:center;gap:8px;padding:5px 4px;border-radius:var(--r-sm);cursor:pointer}
.scope-pkg-row:hover{background:var(--bg-subtle)}
.scope-pkg-code{font-size:10px;color:var(--text-3)}
.scope-pkg-name{flex:1;font-size:var(--fs-sm);color:var(--text-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.scope-chk-input:checked~.scope-pkg-name{color:var(--text);font-weight:500}
.scope-cnt{font-size:10px;color:var(--text-3);background:var(--bg-active);border-radius:var(--r-pill);padding:1px 6px;flex:0 0 auto;font-variant-numeric:tabular-nums}
.scope-rate{font-size:10px;font-weight:700;padding:1px 6px;border-radius:var(--r-pill);flex:0 0 auto}
.scope-rate.hi{background:var(--green-bg);color:var(--green)}
.scope-rate.mid{background:var(--amber-bg);color:var(--amber-text-on-bg)}
.scope-rate.lo{background:var(--bg-active);color:var(--text-3)}
.scope-chk{width:15px;height:15px;border:1.5px solid var(--border-strong);border-radius:var(--r-sm);position:relative;flex:0 0 auto;background:var(--bg)}
.scope-chk.on{background:var(--accent);border-color:var(--accent)}
.scope-chk.on::after{content:"";position:absolute;left:4px;top:1.5px;width:4px;height:7.5px;border:solid #fff;border-width:0 1.5px 1.5px 0;transform:rotate(45deg)}
.scope-chk.mid{background:var(--accent);border-color:var(--accent)}
.scope-chk.mid::after{content:"";position:absolute;left:3px;top:6px;width:7px;height:1.5px;background:#fff}
.scope-chk-input{position:absolute;opacity:0;width:1px;height:1px;pointer-events:none}
.scope-chk-input:checked+.scope-chk{background:var(--accent);border-color:var(--accent)}
.scope-chk-input:checked+.scope-chk::after{content:"";position:absolute;left:4px;top:1.5px;width:4px;height:7.5px;border:solid #fff;border-width:0 1.5px 1.5px 0;transform:rotate(45deg)}
.scope-ft{display:flex;align-items:center;gap:8px;padding:10px 14px;border-top:1px solid var(--border)}
.scope-sum{font-size:var(--fs-sm);color:var(--text)}
.scope-sum-pct{font-size:var(--fs-xs);color:var(--text-3);margin-left:6px}

/* ===== NON-MASTER-BEGIN(2026-09-13 F 流验收修复:F-1 写口忙态 + F-2 窄屏断点)
   母版 <style> 段没有这些规则 —— 它们是验收后新增的修复,不是拆分遗漏。
   scripts/check_css_parity.js 按本对 BEGIN/END 标记把整段从"拆分侧"剔除后再与母版逐行比对,
   因此本段之外的 1800+ 行仍受"任何增/删/改都 FAIL"的原有约束;新增非母版规则必须写进本段。 ===== */

/* —— F-1(P1):写口提交在途的忙态(data/shared 两层共用同一个类名) —— */
.is-busy{opacity:.55;cursor:progress;pointer-events:none;box-shadow:none}

/* —— F-2(P1):窄屏壳层。桌面态(>768px)这三条只把两个新锚点藏起来,1366/1920 零影响 —— */
#navMenuBtn{display:none}
#sideMask{display:none}

@media (max-width:768px){
  /* 侧栏:216px 常驻 → 左侧抽屉(汉堡开合,遮罩/ESC/选中菜单项即收) */
  #navMenuBtn{display:flex;flex:0 0 auto}
  .side{position:fixed;top:0;left:0;bottom:0;z-index:130;width:min(78vw,280px);min-width:0;transform:translateX(-101%);transition:transform var(--t);box-shadow:var(--shadow-lg)}
  #app.nav-open .side{transform:none}
  #sideMask{display:block;position:fixed;inset:0;z-index:129;background:rgba(20,21,38,.36);opacity:0;pointer-events:none;transition:opacity var(--t)}
  #app.nav-open #sideMask{opacity:1;pointer-events:auto}
  /* 主内容占满,顶栏收窄不挤出横向滚动条 */
  .main{width:100%;min-width:0}
  .topbar{padding:0 var(--sp-3);gap:var(--sp-2)}
  .crumb{min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
  .topbar .searchbox{min-width:0;flex:0 0 auto;max-width:32px;overflow:hidden;padding:5px 8px}
  .topbar .searchbox .kbd,.topbar .searchbox .sp{display:none}
  .scope-btn{max-width:92px;padding:5px 8px}
  .rolechip{padding:4px 6px}
  .rolechip .rr{display:none}
  /* 页面:单列栅格 + 窄内边距;宽内容(表格/横向卡片带)一律在自己的容器里横滚,body 不横滚 */
  .page{padding:var(--sp-4) var(--sp-3);max-width:100%}
  .g2,.g3,.g4,.grid.g2,.grid.g3,.grid.g4{grid-template-columns:1fr}
  .tbl-wrap,.tbl-scroll{overflow-x:auto}
  .formula{overflow-x:auto}
  /* 抽屉/弹窗:窄屏铺满,避免 92vw 之外再被内容撑宽 */
  .drawer{width:100%;max-width:100%}
  .modal,.modal.wide{width:100%;max-width:calc(100vw - 16px)}
  .palette{width:auto;max-width:calc(100vw - 16px);margin:0 8px}
}

/* —— A-04/A-18(P2):读口失败的诚实提示条(shell/router.js renderLoadIssueBar) —— */
.load-issue-bar{margin:0 0 12px;padding:8px 12px;border:1px solid var(--amber-border);background:var(--amber-bg);color:var(--amber-text-on-bg);border-radius:var(--r-md);font-size:var(--fs-sm);line-height:1.7}

/* —— A-13(P2):回款工作台的月份筛选控件(此前三池按月筛但页面无控件无说明) —— */
.filter-month{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-sm);color:var(--text-2)}

/* —— A-24(P3):登录页快捷键提示行 —— */
.login-tip{margin-top:14px;font-size:var(--fs-xs);color:var(--text-3);line-height:1.9;text-align:center}
/* ===== NON-MASTER-END ===== */
