/* ================= 页面级样式 ================= */

/* —— 登录页 —— */
.login-stage { min-height: 100vh; display: grid; grid-template-columns: 1.06fr .94fr; }
.login-left {
  position: relative; overflow: hidden; color: #EAF2EC;
  background:
    radial-gradient(90% 55% at 8% 0%, rgba(90,190,150,.20), transparent 60%),
    radial-gradient(70% 50% at 100% 100%, rgba(15,80,60,.5), transparent 65%),
    linear-gradient(160deg, #0F2E23 0%, #14382C 55%, #0B2419 100%);
  padding: 52px 58px; display: flex; flex-direction: column;
}
.login-left .ll-brand { display: flex; align-items: center; gap: 12px; }
.login-left .ll-brand .brand-name { font-size: 19px; font-weight: 800; letter-spacing: .05em; }
.login-left .ll-body { margin: auto 0; max-width: 500px; }
.login-left h1 { font-size: clamp(26px, 3vw, 36px); line-height: 1.35; letter-spacing: .02em; margin: 18px 0 12px; }
.login-left h1 .hl { color: #8ADCB9; }
.login-left .ll-desc { color: rgba(234,242,236,.72); font-size: 14.5px; line-height: 1.9; max-width: 430px; }
.login-points { margin-top: 30px; display: grid; gap: 12px; }
.lp { display: flex; gap: 12px; align-items: flex-start; }
.lp .lp-ico {
  width: 34px; height: 34px; border-radius: 10px; flex: 0 0 34px;
  display: grid; place-items: center; background: rgba(143,220,185,.14);
  border: 1px solid rgba(143,220,185,.25); color: #8ADCB9;
}
.lp .lp-ico svg { width: 16px; height: 16px; }
.lp b { display: block; font-size: 13.5px; color: #EFF6F1; }
.lp span { font-size: 12px; color: rgba(234,242,236,.6); line-height: 1.6; }
.login-left .ll-foot { color: rgba(234,242,236,.4); font-size: 11.5px; margin-top: 26px; letter-spacing: .03em; }
.login-left .ll-foot svg { width: 11px; height: 11px; vertical-align: -1px; }

.login-right {
  background: var(--paper); display: grid; place-items: center; padding: 40px 24px; position: relative;
}
.login-card { width: min(400px, 100%); animation: qz-pop var(--mid) var(--ease) both; }
.login-card .lc-title { font-size: 22px; font-weight: 800; letter-spacing: .01em; }
.login-card .lc-sub { color: var(--ink-3); font-size: 12.5px; margin: 6px 0 22px; }
.demo-idents { margin: 22px 0 4px; }
.demo-idents .di-label { font-size: 11px; font-weight: 700; letter-spacing: .16em; color: var(--ink-3); margin-bottom: 8px; display: flex; align-items: center; gap: 6px; }
.demo-idents .di-label svg { width: 12px; height: 12px; }
.demo-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.demo-btn {
  display: flex; gap: 10px; align-items: center; text-align: left; cursor: pointer;
  border: 1px solid var(--line); background: var(--surface); border-radius: var(--r-md);
  padding: 9px 11px; transition: all var(--fast);
}
.demo-btn:hover { border-color: var(--brand-bright); box-shadow: var(--shadow-1); }
.demo-btn .db-name { font-size: 12.5px; font-weight: 700; line-height: 1.3; }
.demo-btn .db-role { font-size: 10.5px; color: var(--ink-3); }
.login-alt { margin-top: 18px; text-align: center; }
.login-alt a { font-size: 12px; }
.login-sec-foot { margin-top: 26px; text-align: center; font-size: 11px; color: var(--ink-3); line-height: 2; }
.login-sec-foot a { font-size: 11px; }

/* —— 总览 —— */
.stat-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; }
.stat-card {
  background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-lg);
  padding: 16px 18px 15px; position: relative; overflow: hidden;
}
.stat-card::before { content: ""; position: absolute; inset: 0 0 auto 0; height: 3px; }
.stat-card.sc-brand::before { background: linear-gradient(90deg, var(--brand-bright), var(--brand)); }
.stat-card.sc-warn::before { background: linear-gradient(90deg, #E4B84F, var(--warn)); }
.stat-card.sc-dang::before { background: linear-gradient(90deg, #E0835F, var(--danger)); }
.stat-card.sc-info::before { background: linear-gradient(90deg, #7FA9C2, var(--info)); }
.stat-card .sc-top { display: flex; align-items: center; gap: 8px; color: var(--ink-3); font-size: 11.5px; font-weight: 600; letter-spacing: .05em; }
.stat-card .sc-top svg { width: 13px; height: 13px; }
.stat-card .sc-num { font-size: 30px; font-weight: 800; margin: 8px 0 2px; line-height: 1; }
.stat-card .sc-num small { font-size: 14px; font-weight: 600; color: var(--ink-3); margin-left: 4px; }
.stat-card .sc-foot { font-size: 11.5px; color: var(--ink-3); margin-top: 6px; }
.sc-up { color: var(--ok); font-weight: 700; } .sc-dn { color: var(--danger); font-weight: 700; }

.overview-grid { display: grid; grid-template-columns: minmax(0,1.6fr) minmax(0,1fr); gap: 18px; align-items: start; }
.risk-item { display: flex; gap: 12px; padding: 12px 2px; border-bottom: 1px dashed var(--line); align-items: flex-start; }
.risk-item:last-child { border-bottom: 0; }
.risk-item .rk-ico { width: 32px; height: 32px; border-radius: 9px; flex: 0 0 32px; display: grid; place-items: center; }
.risk-item .rk-ico svg { width: 15px; height: 15px; }
.risk-item b { font-size: 13px; display: block; }
.risk-item p { font-size: 12px; color: var(--ink-2); margin-top: 2px; line-height: 1.6; }
.risk-item .rk-go { margin-left: auto; align-self: center; }
.baseline-item { display: flex; gap: 12px; align-items: center; padding: 10px 2px; border-bottom: 1px dashed var(--line); font-size: 13px; }
.baseline-item:last-child { border-bottom: 0; }
.baseline-item .bi-t { color: var(--ink-2); flex: 1; }
.baseline-item .bi-t small { display: block; color: var(--ink-3); font-size: 11px; margin-top: 1px; }
.baseline-item .bi-val { font-weight: 700; font-family: var(--font-display); }

/* 里程碑徽标 */
.mile-row { display: flex; align-items: center; gap: 12px; padding: 11px 2px; border-bottom: 1px dashed var(--line); }
.mile-row:last-child { border-bottom: 0; }
.mile-row .mr-dot { width: 30px; height: 30px; border-radius: 50%; flex: 0 0 30px; display: grid; place-items: center; border: 2px solid var(--line-2); color: var(--ink-3); background: var(--surface); }
.mile-row.done .mr-dot { border-color: var(--brand); background: var(--brand); color: #fff; }
.mile-row .mr-dot svg { width: 14px; height: 14px; }
.mile-row .mr-t { flex: 1; font-size: 13px; font-weight: 600; }
.mile-row .mr-d { font-size: 11.5px; color: var(--ink-3); }
.mile-row.cur .mr-t { color: var(--brand-ink); }

/* —— 成员 —— */
.member-row { display: flex; align-items: center; gap: 12px; padding: 10px 2px; }
.member-row .mr-info { flex: 1; min-width: 0; }
.member-row .mr-name { font-weight: 700; font-size: 13.5px; display: flex; align-items: center; gap: 8px; }
.member-row .mr-sub { font-size: 11.5px; color: var(--ink-3); margin-top: 1px; }
.member-row .mr-actions { display: flex; gap: 6px; align-items: center; }

.filter-row { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.filter-row .grow { flex: 1; min-width: 180px; }

/* 邀请向导链接卡 */
.invite-link-card {
  background: var(--brand-wash-2); border: 1px dashed var(--brand-bright);
  border-radius: var(--r-md); padding: 12px 14px; display: flex; align-items: center; gap: 10px;
}
.invite-link-card .il-url {
  flex: 1; font-family: var(--font-display); font-size: 12px; color: var(--brand-ink);
  background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-xs);
  padding: 7px 10px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; direction: rtl; text-align: left;
}
.qr-frame {
  width: 132px; height: 132px; margin: 4px auto 8px; padding: 10px; background: #fff;
  border: 1px solid var(--line-2); border-radius: var(--r-md); display: grid; place-items: center;
}
.qr-frame svg { width: 100%; height: 100%; }
.role-pick { display: grid; gap: 8px; }
.role-opt {
  display: flex; align-items: flex-start; gap: 10px; cursor: pointer;
  border: 1.5px solid var(--line); border-radius: var(--r-md); padding: 10px 12px;
  transition: all var(--fast); background: var(--surface);
}
.role-opt:hover { border-color: var(--brand-bright); }
.role-opt.sel { border-color: var(--brand); background: var(--brand-wash-2); box-shadow: 0 0 0 3px rgba(47,143,116,.1); }
.role-opt .ro-radio { width: 16px; height: 16px; border-radius: 50%; border: 2px solid var(--line-3); flex: 0 0 16px; margin-top: 2px; }
.role-opt.sel .ro-radio { border-color: var(--brand); border-width: 4px; }
.role-opt b { display: block; font-size: 13px; }
.role-opt p { font-size: 11.5px; color: var(--ink-3); margin-top: 2px; line-height: 1.55; }
.role-opt .ro-cap { margin-left: auto; font-size: 10.5px; color: var(--ink-3); white-space: nowrap; align-self: center; }

/* 角色卡片 */
.role-card { display: flex; gap: 14px; align-items: flex-start; padding: 16px 18px; cursor: pointer; }
.role-card .rc-ico { width: 40px; height: 40px; border-radius: 12px; display: grid; place-items: center; flex: 0 0 40px; }
.role-card .rc-ico svg { width: 18px; height: 18px; }
.role-card b { font-size: 14px; display: flex; align-items: center; gap: 8px; }
.role-card .rc-desc { font-size: 12px; color: var(--ink-2); margin-top: 3px; line-height: 1.6; }
.role-card .rc-meta { font-size: 11.5px; color: var(--ink-3); margin-top: 8px; display: flex; gap: 14px; flex-wrap: wrap; }
.role-card .rc-meta i { font-style: normal; display: inline-flex; align-items: center; gap: 4px; }
.role-card .rc-meta svg { width: 11px; height: 11px; }

/* 数据范围徽标 */
.scope-pill { display: inline-flex; align-items: center; gap: 6px; font-size: 11.5px; font-weight: 600; padding: 2px 9px; border-radius: var(--r-full); }
.scope-pill.sp-org { background: var(--brand-wash); color: var(--brand-ink); }
.scope-pill.sp-mine { background: var(--info-wash); color: var(--info); }
.scope-pill.sp-part { background: var(--warn-wash); color: var(--warn-deep); }

/* —— 审计 —— */
.audit-feed { position: relative; }
.audit-row { display: flex; gap: 14px; padding: 12px 0; }
.audit-row .ar-dot { flex: 0 0 10px; width: 10px; height: 10px; border-radius: 50%; margin-top: 6px; position: relative; z-index: 1; }
.audit-row .ar-body { flex: 1; min-width: 0; }
.audit-row .ar-act { font-size: 13px; }
.audit-row .ar-act b { font-weight: 700; }
.audit-row .ar-meta { font-size: 11.5px; color: var(--ink-3); margin-top: 2px; display: flex; gap: 12px; flex-wrap: wrap; align-items: center; }
.audit-row .ar-delta { margin-top: 6px; font-size: 12px; background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-sm); padding: 6px 10px; font-family: var(--font-display); color: var(--ink-2); }
.timeline { position: relative; padding-left: 0; }
.sev-dot-1 { background: var(--ok); } .sev-dot-2 { background: var(--warn); } .sev-dot-3 { background: var(--danger); }

/* —— 安全 —— */
.sec-card { display: flex; gap: 14px; align-items: center; padding: 14px 2px; border-bottom: 1px dashed var(--line); }
.sec-card:last-child { border-bottom: 0; }
.sec-card .sc-ico { width: 40px; height: 40px; border-radius: 12px; flex: 0 0 40px; display: grid; place-items: center; }
.sec-card .sc-ico svg { width: 18px; height: 18px; }
.sec-card .sc-t { flex: 1; }
.sec-card .sc-t b { font-size: 13.5px; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.sec-card .sc-t p { font-size: 12px; color: var(--ink-2); margin-top: 2px; line-height: 1.6; }
.device-item { display: flex; gap: 12px; padding: 12px 2px; border-bottom: 1px dashed var(--line); align-items: flex-start; }
.device-item:last-child { border-bottom: 0; }
.device-item .dv-ico { width: 36px; height: 36px; border-radius: 10px; background: var(--surface); border: 1px solid var(--line); display: grid; place-items: center; color: var(--ink-2); }
.device-item .dv-ico svg { width: 17px; height: 17px; }
.device-item .dv-t { flex: 1; }
.device-item b { font-size: 13px; }
.device-item .dv-meta { font-size: 11.5px; color: var(--ink-3); margin-top: 2px; }

/* 密码强度 */
.pw-meter { display: flex; gap: 4px; margin-top: 8px; }
.pw-meter i { height: 4px; flex: 1; border-radius: 2px; background: var(--line-2); transition: background var(--fast); }
.pw-meter.lv1 i:nth-child(1) { background: var(--danger); }
.pw-meter.lv2 i:nth-child(-n+2) { background: var(--warn); }
.pw-meter.lv3 i:nth-child(-n+3) { background: var(--brand-bright); }
.pw-meter.lv4 i { background: var(--brand); }
.pw-tip { font-size: 11px; margin-top: 4px; color: var(--ink-3); }

/* —— 403 —— */
.denied-wrap { min-height: calc(100vh - 120px); display: grid; place-items: center; }
.denied-box { text-align: center; max-width: 480px; padding: 20px; }
.denied-box .d-illus { width: 220px; margin: 0 auto 8px; }
.denied-box h1 { font-size: 22px; margin-bottom: 8px; }
.denied-box p { color: var(--ink-2); font-size: 13.5px; line-height: 1.8; }
.denied-tip { margin: 18px auto 0; background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-lg); padding: 14px 18px; text-align: left; }
.denied-tip b { font-size: 13px; display: flex; gap: 8px; align-items: center; }
.denied-tip li { font-size: 12.5px; color: var(--ink-2); padding: 2px 0; }

/* 登录记录表格适配 + misc */
.split-h { display: flex; gap: 22px; align-items: center; }
.split-h::after { content: ""; flex: 1; height: 1px; background: var(--line); }

.pipe-dot { width: 3px; height: 3px; border-radius: 50%; background: var(--line-3); display: inline-block; vertical-align: middle; }

/* 上手引导 */
.tour-step { padding: 6px 2px 4px; }
.tour-step b { display: flex; align-items: center; gap: 8px; font-size: 13.5px; }
.tour-step p { font-size: 12.5px; color: var(--ink-2); margin-top: 4px; line-height: 1.7; }
.tour-illus { height: 108px; margin: 4px 0 10px; display: grid; place-items: center; color: var(--brand-bright); }
.tour-illus svg { width: 86px; height: 86px; }

/* 移动端 H5 登录示意 */
.h5-frame {
  width: 248px; border-radius: 26px; border: 1px solid var(--line-2);
  background: var(--surface); overflow: hidden; box-shadow: var(--shadow-2);
  margin: 0 auto;
}
.h5-frame .h5-head { background: linear-gradient(150deg, #0F2E23, #16412F); padding: 18px 16px 30px; color: #EAF2EC; position: relative; overflow: hidden; }
.h5-frame .h5-head::after { content: ""; position: absolute; right: -30px; top: -30px; width: 120px; height: 120px; border-radius: 50%; background: rgba(143,220,185,.16); }
.h5-frame .h5-body { padding: 14px; background: var(--paper); min-height: 300px; }
.h5-org { font-size: 9px; letter-spacing: .1em; color: rgba(234,242,236,.6); }
.h5-title { font-size: 16px; font-weight: 800; margin-top: 4px; }
.h5-actions { margin-top: 14px; display: grid; gap: 8px; }

/* misc layout utils */
.gap-8 { gap: 8px; } .gap-12 { gap: 12px; } .gap-16 { gap: 16px; }
.row { display: flex; align-items: center; }
.mt-6{margin-top:6px}.mt-10{margin-top:10px}.mt-14{margin-top:14px}.mt-18{margin-top:18px}.mt-24{margin-top:24px}
.mb-4{margin-bottom:4px}.mb-8{margin-bottom:8px}.mb-12{margin-bottom:12px}.mb-16{margin-bottom:16px}
.flex-1 { flex: 1; } .muted { color: var(--ink-3); } .small{font-size:12px}
.text-right { text-align: right; }
.divider-x { height: 1px; background: var(--line); margin: 14px 0; }
.mono { font-family: var(--font-display); font-variant-numeric: tabular-nums; }
.w-full { width: 100%; }

/* —— 补充间距工具（业务主线屏使用） —— */
.mt-2{margin-top:2px}.mt-3{margin-top:3px}.mt-4{margin-top:4px}.mt-5{margin-top:5px}
.mt-8{margin-top:8px}.mt-12{margin-top:12px}.mt-16{margin-top:16px}.mt-20{margin-top:20px}.mt-22{margin-top:22px}
.mb-2{margin-bottom:2px}.mb-3{margin-bottom:3px}.mb-6{margin-bottom:6px}.mb-10{margin-bottom:10px}.mb-14{margin-bottom:14px}.mb-18{margin-bottom:18px}
.mr-4{margin-right:4px}.mr-6{margin-right:6px}.ml-4{margin-left:4px}.ml-8{margin-left:8px}
.text-c{text-align:center}
/* —— 项目时间轴节点 —— */
.mile-row .mr-t{font-size:11px}
/* —— 表格中部对齐复用 —— */
.c{text-align:center}
