/* ============================================================
   HRX-OS 人效域 UI · 共享样式层
   文件：assets/emp-ui.css
   加载顺序：app.css → tokens-a11y.css → emp-ui.css（本文件最后）
   ------------------------------------------------------------
   铁律（老板 2026-09-30 令）：
   ① 零新增色值 —— 颜色只取 app.css / tokens-a11y.css 既有令牌及其透明度
   ② 不改任何既有文件的结构与脚本 —— 本文件是纯叠加
   ③ 用色比重对齐原版：渐变(--grad) 为主动效、青绿(--cyan) 为信息强调、
      品牌蓝(--brand) 为主按钮，避免整体偏蓝
   ============================================================ */

/* ---------- 0. 体积无关的基础重置（仅作用于 emp 页面容器） ---------- */
.emp *{box-sizing:border-box}
.emp{--e-tint-brand:rgba(79,140,255,.14);--e-tint-brand2:rgba(79,140,255,.26);
     --e-tint-cyan:rgba(45,212,191,.13);--e-tint-violet:rgba(167,139,250,.15);
     --e-tint-green:rgba(61,220,132,.14);--e-tint-yellow:rgba(251,191,36,.14);
     --e-tint-red:rgba(248,113,113,.15);
     font-size:13px;line-height:1.55}
.emp a{color:var(--brand-light);text-decoration:none}
/* 2026-10-06 偏移根因修复(UI-OPT v1.42b): 旧页经 emp-adopt 挂壳后, head 内联 body 布局样式
   (padding:28px / min-height:100vh / radial-gradient 背景) 未重置, 将 emp 整壳推挤偏移;
   body.emp 特异性覆盖之, 一处修复全站旧页(loop-board/analysis/eng-rank/load-board 等) */
body.emp{padding:0;margin:0;min-height:100vh;background:var(--bg)}

/* ---------- 1. 外壳布局 ---------- */
.e-top{height:52px;display:flex;align-items:center;gap:13px;padding:0 18px;
  background:var(--e-tint-6_24_42-74);border-bottom:1px solid var(--line);
  backdrop-filter:blur(14px);position:sticky;top:0;z-index:60}
.e-logo{display:flex;align-items:center;gap:9px;font-weight:800;font-size:14px;color:var(--txt)}
.e-logo .mk{width:26px;height:26px;border-radius:8px;background:var(--grad);
  display:grid;place-items:center;font-size:13px;color:var(--on-accent);font-weight:800}
.e-sp{flex:1}
.e-chip{border:1px solid var(--line2);background:var(--card);border-radius:999px;
  padding:3px 11px;font-size:11.5px;color:var(--sub);cursor:pointer;user-select:none}
.e-chip.on{border-color:var(--cyan);color:var(--cyan);background:var(--e-tint-cyan)}
.e-who{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--sub)}
.e-who b{color:var(--txt)}
.e-avt{width:26px;height:26px;border-radius:50%;background:var(--grad);
  display:grid;place-items:center;font-size:11px;color:var(--on-accent);font-weight:700}

.e-shell{display:flex;height:calc(100vh - 52px);overflow:hidden}
.e-side{width:218px;flex:none;border-right:1px solid var(--line);
  background:var(--e-tint-6_24_42-42);padding:12px 9px 40px;
  position:static;height:100%;overflow-y:auto}
.e-main{flex:1;min-width:0;padding:18px 22px 60px;height:100%;overflow-y:auto}

/* 侧栏导航 */
.e-nsec{margin:0 0 12px}
.e-nsec>.sh{font-size:11px;font-weight:700;color:var(--dim);letter-spacing:.6px;
  padding:5px 9px;display:flex;align-items:center;gap:6px}
.e-nsec>.sh .tag{font-size:11px;padding:0 5px;border-radius:5px;
  background:var(--e-tint-cyan);color:var(--cyan);letter-spacing:0;font-weight:700}
.e-ni{display:flex;align-items:center;gap:8px;padding:7px 9px;border-radius:9px;
  font-size:12.5px;color:var(--sub);cursor:pointer;margin-bottom:1px;transition:.15s}
.e-ni:hover{background:var(--card);color:var(--txt)}
.e-ni.on{background:linear-gradient(90deg,var(--e-tint-brand2),var(--e-tint-violet));
  color:var(--txt);font-weight:600;box-shadow:inset 2px 0 0 var(--cyan)}
.e-ni .ic{width:15px;text-align:center;opacity:.85;font-size:12px}
.e-ni .bd{margin-left:auto;font-size:11px;background:var(--red);color:var(--on-accent);
  border-radius:999px;padding:0 6px;font-weight:700}
.e-ni .bd.g{background:var(--e-tint-cyan);color:var(--cyan)}

/* 面包屑 */
.e-crumb{font-size:11.5px;color:var(--dim);margin-bottom:9px;display:flex;gap:7px;align-items:center;flex-wrap:wrap}
.e-crumb a{color:var(--dim)}
.e-crumb a:hover{color:var(--cyan)}
.e-crumb .sep{opacity:.5}

/* ---------- 2. 页头 ---------- */
.e-head{display:flex;align-items:flex-start;gap:14px;margin-bottom:16px;flex-wrap:wrap}
.e-title{font-size:19px;font-weight:800;letter-spacing:.2px;color:var(--txt);
  display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.e-sub{font-size:12px;color:var(--dim);margin-top:3px;max-width:1000px;line-height:1.65}
.e-actions{display:flex;gap:8px;flex-wrap:wrap}

/* ---------- 3. 标签 ---------- */
.e-tag{font-size:11px;font-weight:600;padding:2px 8px;border-radius:999px;
  border:1px solid var(--e-tint-cyan-40);color:var(--cyan);background:var(--e-tint-cyan);white-space:nowrap}
.e-tag.v{border-color:var(--e-tint-167_139_250-45);color:var(--violet);background:var(--e-tint-violet)}
.e-tag.y{border-color:var(--e-tint-251_191_36-45);color:var(--yellow);background:var(--e-tint-yellow)}
.e-tag.r{border-color:var(--e-tint-248_113_113-45);color:var(--red);background:var(--e-tint-red)}
.e-tag.g{border-color:var(--e-tint-61_220_132-45);color:var(--green);background:var(--e-tint-green)}
.e-tag.b{border-color:var(--e-tint-brand-45);color:var(--brand-light);background:var(--e-tint-brand)}

/* ---------- 4. 栅格与卡 ---------- */
.e-grid{display:grid;gap:13px}
.e-g2{grid-template-columns:repeat(2,minmax(0,1fr))}
.e-g3{grid-template-columns:repeat(3,minmax(0,1fr))}
.e-g4{grid-template-columns:repeat(4,minmax(0,1fr))}
.e-g5{grid-template-columns:repeat(5,minmax(0,1fr))}
.e-g21{grid-template-columns:minmax(0,2fr) minmax(0,1fr)}
.e-auto{display:grid;gap:13px;grid-template-columns:repeat(auto-fit,minmax(210px,1fr))}
.e-card{background:var(--card);border:1px solid var(--line);border-radius:12px;
  padding:14px 16px;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);position:relative;overflow:hidden}
.e-card.tight{padding:11px 13px}
.e-card.acc{border-color:var(--e-tint-brand-34);
  background:linear-gradient(180deg,var(--e-tint-brand),var(--e-tint-white-03))}
.e-card.warn{border-color:var(--e-tint-251_191_36-34)}
.e-card.err{border-color:var(--e-tint-248_113_113-38);
  background:linear-gradient(180deg,var(--e-tint-red),var(--e-tint-white-03))}
.e-card.ok{border-color:var(--e-tint-61_220_132-30)}
.e-ct{display:flex;align-items:center;gap:9px;margin-bottom:11px;flex-wrap:wrap}
.e-ct h3{margin:0;font-size:13.5px;font-weight:700;letter-spacing:.2px;color:var(--txt)}
.e-ct .hint{font-size:11px;color:var(--dim)}
.e-sec{font-size:12px;font-weight:700;color:var(--sub);letter-spacing:.5px;
  margin:22px 0 10px;display:flex;align-items:center;gap:9px}
.e-sec::before{content:"";width:3px;height:13px;border-radius:2px;background:var(--grad)}
.e-sec .sp{flex:1}

/* ---------- 5. KPI ---------- */
.e-kpi{padding:12px 14px;position:relative;overflow:hidden}
.e-kpi .lb{font-size:11.5px;color:var(--sub)}
.e-kpi .num{font-family:var(--font-num);font-size:25px;font-weight:800;
  margin:5px 0 2px;line-height:1.1;letter-spacing:.3px;color:var(--txt)}
.e-kpi .base{font-size:11px;color:var(--dim)}
.e-kpi .src{font-size:11px;color:var(--dim);margin-top:7px;padding-top:7px;
  border-top:1px dashed var(--line);display:flex;gap:6px;align-items:center;flex-wrap:wrap}

/* 数据可信度四标记 */
.e-trust{font-size:11px;font-weight:700;padding:1px 6px;border-radius:5px;letter-spacing:.3px;white-space:nowrap}
.e-trust.real{background:var(--e-tint-green);color:var(--green);border:1px solid var(--e-tint-61_220_132-35)}
.e-trust.sim{background:var(--e-tint-yellow);color:var(--yellow);border:1px solid var(--e-tint-251_191_36-38)}
.e-trust.none{background:var(--e-tint-red);color:var(--red);border:1px solid var(--e-tint-248_113_113-38)}
.e-trust.manual{background:var(--e-tint-147_197_253-14);color:var(--info-soft);border:1px solid var(--e-tint-147_197_253-32)}

/* ---------- 6. 表格 ---------- */
.e-tbl{width:100%;border-collapse:collapse;font-size:12px}
.e-tbl th{text-align:left;font-weight:600;color:var(--dim);font-size:11px;
  padding:7px 9px;border-bottom:1px solid var(--line2);white-space:nowrap}
.e-tbl td{padding:8px 9px;border-bottom:1px solid var(--line);color:var(--sub);vertical-align:middle}
.e-tbl tr:last-child td{border-bottom:none}
.e-tbl tbody tr:hover td{background:var(--e-tint-white-035)}
.e-tbl td.k,.e-tbl th.k{color:var(--txt);font-weight:600}
.e-tbl .n{font-family:var(--font-num);text-align:right}
.e-tbl tr.clickable{cursor:pointer}
.e-tbl tr.clickable:hover td{background:var(--e-tint-brand)}
.e-scroll{overflow-x:auto}
.e-scroll .e-tbl{min-width:900px}

/* ---------- 7. 徽章 / 点 ---------- */
.e-bdg{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:600;
  padding:2px 8px;border-radius:6px;white-space:nowrap}
.e-bdg.g{background:var(--e-tint-green);color:var(--green)}
.e-bdg.y{background:var(--e-tint-yellow);color:var(--yellow)}
.e-bdg.r{background:var(--e-tint-red);color:var(--red)}
.e-bdg.b{background:var(--e-tint-brand);color:var(--brand-light)}
.e-bdg.v{background:var(--e-tint-violet);color:var(--violet)}
.e-bdg.c{background:var(--e-tint-cyan);color:var(--cyan)}
.e-bdg.d{background:var(--e-tint-white-07);color:var(--dim)}
.e-dot{width:8px;height:8px;border-radius:50%;display:inline-block;flex:none}
.e-dot.g{background:var(--green);box-shadow:0 0 7px var(--e-tint-61_220_132-75)}
.e-dot.y{background:var(--yellow);box-shadow:0 0 7px var(--e-tint-251_191_36-75)}
.e-dot.r{background:var(--red);box-shadow:0 0 7px var(--e-tint-248_113_113-80)}
.e-dot.c{background:var(--cyan);box-shadow:0 0 7px var(--e-tint-cyan-75)}
.e-dot.d{background:var(--e-tint-white-22)}
.e-pulse{animation:epl 1.9s infinite}
@keyframes epl{0%,100%{opacity:1}50%{opacity:.35}}

/* ---------- 8. 按钮 ---------- */
.e-btn{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;
  padding:6px 13px;border-radius:9px;border:1px solid var(--line2);
  background:var(--card2);color:var(--txt);cursor:pointer;transition:.16s;
  text-decoration:none;font-family:inherit}
.e-btn:hover{border-color:var(--cyan);color:var(--txt)}
.e-btn.p{background:linear-gradient(135deg,var(--brand),var(--violet-2));
  border-color:transparent;color:var(--on-accent)}
.e-btn.p:hover{filter:brightness(1.1)}
.e-btn.c{background:var(--e-tint-cyan);border-color:var(--e-tint-cyan-40);color:var(--cyan)}
.e-btn.g{background:var(--e-tint-green);border-color:var(--e-tint-61_220_132-40);color:var(--green)}
.e-btn.r{background:var(--e-tint-red);border-color:var(--e-tint-248_113_113-40);color:var(--red)}
.e-btn.sm{font-size:11px;padding:4px 10px}
.e-btn[disabled]{opacity:.45;cursor:not-allowed}

/* ---------- 9. 标签页 ---------- */
.e-tabs{display:flex;gap:6px;border-bottom:1px solid var(--line);margin-bottom:14px;flex-wrap:wrap}
.e-tab{font-size:12.5px;font-weight:600;color:var(--dim);padding:8px 13px;cursor:pointer;
  border-bottom:2px solid transparent;margin-bottom:-1px;transition:.16s;user-select:none}
.e-tab:hover{color:var(--sub)}
.e-tab.on{color:var(--cyan);border-bottom-color:var(--cyan)}
.e-pane{display:none}
.e-pane.on{display:block}

/* ---------- 10. 筛选与搜索 ---------- */
.e-filter{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:12px}
.e-inp{background:var(--e-tint-white-05);border:1px solid var(--line2);border-radius:9px;
  padding:6px 11px;font-size:12px;color:var(--txt);font-family:inherit;min-width:180px;outline:none}
.e-inp:focus{border-color:var(--cyan);box-shadow:0 0 0 3px var(--e-tint-cyan)}
.e-inp::placeholder{color:var(--dim)}
.e-sel{background:var(--e-tint-white-05);border:1px solid var(--line2);border-radius:9px;
  padding:6px 10px;font-size:12px;color:var(--txt);font-family:inherit;outline:none;cursor:pointer}
.e-sel option,.e-sel optgroup{background:var(--surface-card);color:var(--txt)}
select option{background:var(--surface-card);color:var(--txt)}
.e-pill{font-size:11px;font-weight:600;padding:4px 11px;border-radius:999px;cursor:pointer;
  border:1px solid var(--line2);background:var(--card);color:var(--sub);transition:.16s;user-select:none}
.e-pill:hover{border-color:var(--cyan);color:var(--txt)}
.e-pill.on{background:var(--e-tint-cyan);border-color:var(--e-tint-cyan-50);color:var(--cyan)}

/* ---------- 11. 时间轴 ---------- */
.e-tl{position:relative;padding-left:20px}
.e-tl::before{content:"";position:absolute;left:5px;top:4px;bottom:4px;width:1px;background:var(--line2)}
.e-tl .it{position:relative;padding:0 0 14px}
.e-tl .it::before{content:"";position:absolute;left:-19px;top:5px;width:9px;height:9px;
  border-radius:50%;background:var(--bg);border:2px solid var(--brand)}
.e-tl .it.now::before{border-color:var(--yellow);box-shadow:0 0 9px var(--e-tint-251_191_36-70)}
.e-tl .it.done::before{border-color:var(--green);background:var(--green)}
.e-tl .it.bad::before{border-color:var(--red);background:var(--red);box-shadow:0 0 9px var(--e-tint-248_113_113-70)}
.e-tl .tt{font-size:12.5px;color:var(--txt);font-weight:600}
.e-tl .td{font-size:11px;color:var(--dim);margin-top:2px;line-height:1.6}

/* ---------- 12. 建议卡 ---------- */
.e-adv{border:1px solid var(--e-tint-cyan-35);
  background:linear-gradient(160deg,var(--e-tint-cyan),var(--e-tint-brand));
  border-radius:10px;padding:13px 15px}
.e-adv .h{display:flex;align-items:center;gap:8px;font-weight:700;font-size:13px;
  margin-bottom:9px;color:var(--txt)}
.e-adv .blk{margin-bottom:9px}
.e-adv .blk .t{font-size:11px;color:var(--cyan);font-weight:700;letter-spacing:.4px;margin-bottom:3px}
.e-adv .blk .c{font-size:12px;color:var(--sub);line-height:1.65}
.e-adv .blk .c b{color:var(--txt)}
.e-tagline{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px}
.e-tg{font-size:11px;padding:2px 8px;border-radius:6px;background:var(--e-tint-white-07);
  color:var(--sub);border:1px solid var(--line);cursor:pointer}
.e-tg:hover{border-color:var(--cyan);color:var(--txt)}

/* ---------- 13. 进度 ---------- */
.e-bar{height:6px;border-radius:5px;background:var(--e-tint-white-10);overflow:hidden;margin-top:6px}
.e-bar>i{display:block;height:100%;border-radius:5px;background:linear-gradient(90deg,var(--brand),var(--violet))}
.e-bar.c>i{background:linear-gradient(90deg,var(--cyan),var(--green))}
.e-bar.g>i{background:linear-gradient(90deg,var(--green),var(--cyan))}
.e-bar.y>i{background:linear-gradient(90deg,var(--yellow),var(--orange))}
.e-bar.r>i{background:linear-gradient(90deg,var(--orange),var(--red))}

/* ---------- 14. 说明条 ---------- */
.e-note{border-left:3px solid var(--brand);background:var(--e-tint-brand);
  padding:9px 13px;border-radius:0 9px 9px 0;font-size:11.5px;color:var(--sub);line-height:1.68}
.e-note.y{border-color:var(--yellow);background:var(--e-tint-yellow)}
.e-note.r{border-color:var(--red);background:var(--e-tint-red)}
.e-note.g{border-color:var(--green);background:var(--e-tint-green)}
.e-note.c{border-color:var(--cyan);background:var(--e-tint-cyan)}
.e-note b{color:var(--txt)}

/* ---------- 15. 键值表 ---------- */
.e-kv{display:grid;grid-template-columns:auto 1fr;gap:4px 12px;font-size:11.5px}
.e-kv .k{color:var(--dim)}
.e-kv .v{color:var(--txt)}

/* ---------- 16. 甘特 ---------- */
.e-grow{display:grid;grid-template-columns:130px 1fr 78px;gap:10px;align-items:center;
  padding:5px 0;font-size:11.5px}
.e-gtrack{position:relative;height:17px;background:var(--e-tint-white-05);border-radius:5px;overflow:hidden}
.e-gbar{position:absolute;top:0;bottom:0;border-radius:5px;
  background:linear-gradient(90deg,var(--brand),var(--violet-2))}
.e-gbar.done{background:linear-gradient(90deg,var(--green),var(--cyan))}
.e-gbar.late{background:linear-gradient(90deg,var(--orange),var(--red))}
.e-gaxis{display:grid;grid-template-columns:130px 1fr 78px;gap:10px;font-size:11px;
  color:var(--dim);margin-top:6px}

/* ---------- 17. 泳道地图 ---------- */
.e-map{overflow-x:auto;padding-bottom:6px}
.e-map table{border-collapse:collapse;min-width:1180px;width:100%}
.e-map th.st{font-size:11px;text-align:center;padding:6px 4px;line-height:1.3;
  color:var(--sub);font-weight:600;border-bottom:1px solid var(--line2);white-space:nowrap}
.e-map th.st .n{display:block;font-size:11px;color:var(--dim);font-weight:400}
.e-map td.st{text-align:center;padding:7px 3px;border-bottom:1px solid var(--line)}
.e-lane{display:flex;align-items:center;gap:9px;min-width:190px}
.e-lane .nm{font-size:12px;color:var(--txt);font-weight:600}
.e-lane .sub{font-size:11px;color:var(--dim)}

/* ---------- 18. 抽屉（占位，由 JS 生成） ---------- */
.e-drawer{position:fixed;top:0;right:-560px;width:540px;max-width:92vw;height:100vh;
  background:var(--surface-card);border-left:1px solid var(--line2);z-index:200;
  transition:right .26s ease;overflow-y:auto;padding:18px 20px 60px;
  box-shadow:-18px 0 40px var(--e-tint-0_0_0-45)}
.e-drawer.on{right:0}
.e-mask{position:fixed;inset:0;background:var(--e-tint-4_14_26-60);z-index:190;display:none}
.e-mask.on{display:block}
.e-dh{display:flex;align-items:center;gap:10px;margin-bottom:14px}
.e-dh h3{margin:0;font-size:15px;font-weight:800;color:var(--txt)}
.e-x{margin-left:auto;cursor:pointer;font-size:18px;color:var(--dim);line-height:1}
.e-x:hover{color:var(--red)}

/* ---------- 19. 页脚 ---------- */
.e-foot{margin-top:26px;padding-top:14px;border-top:1px solid var(--line);
  font-size:11px;color:var(--dim);display:flex;gap:16px;flex-wrap:wrap}

/* ---------- 20. 焦点可达（叠加 tokens-a11y 的焦点环） ---------- */
.emp :focus-visible{outline:2px solid var(--cyan);outline-offset:2px;border-radius:6px}

/* ---------- 21. 响应式 ---------- */
@media (max-width:1180px){
  .e-g5,.e-g4{grid-template-columns:repeat(2,minmax(0,1fr))}
  .e-g3,.e-g21{grid-template-columns:1fr}
}
@media (max-width:820px){
  .e-side{display:none}
  .e-g2{grid-template-columns:1fr}
  .e-main{padding:14px 14px 50px}
}


/* ---------- 11. 旧顶栏迁入（功能融合补齐 · 2026-09-30 老板拍板 A）----------
   旧 #topbarSlot 由 role-gate.js 填充：全局搜索 / 主题 / AI 助手 / 体检 /
   用户身份 / 改密 / 退出；hrx-enhance.js 注入 4 快捷工具。整体迁入 .e-top 后
   只做定位与去重，不重写样式；色值一律沿用原令牌，无新增色值。 */
.e-top > .topbar{display:flex;align-items:center;gap:12px;flex:1;min-width:0;
  height:auto;padding:0;background:none;border:0;box-shadow:none;
  position:static;backdrop-filter:none;-webkit-backdrop-filter:none}
.e-top > .topbar::after{display:none}
.e-top > .topbar .brand{display:none}            /* 新壳已自带品牌，去重 */
.e-top > .topbar .search{display:block;flex:1;max-width:420px;position:relative}
/* 2026-10-06 顶栏搜索框清理(UI-OPT v1.42c): 左侧导航已有「🔍 全局搜索」入口(search.html),
   旧页迁入新壳顶栏的重复全局搜索框全站隐藏(售后闭环驾驶舱等所有 emp 壳页面统一生效) */
.e-top > .topbar .search{display:none}
/* v1.45 全局右上角刷新/悬浮控件清理(2026-10-06 老板令「全局不要出现悬浮的刷新按钮,主要在右上角」+「右上角不要有搜索、导出csv」):
   ① 顶栏刷新钮(role-gate tb-btn[title=刷新])全站隐藏——折叠侧栏钮(title=折叠侧栏,v10FoldBtn)保留
   ② 悬浮导出/刷新/搜索/导出菜单(id 族)兜底隐藏——!important 压过注入内联style, 即使注入脚本复活/新增也不显示 */
.e-top > .topbar .tb-btn[title="刷新"]{display:none}
#hrxAutoExport, #hrxAutoRefresh, #hrxAutoSearch, #hrxExportMenu{display:none!important}
.e-top > .topbar .search input{width:100%;padding:7px 12px 7px 32px;border-radius:8px;
  border:1px solid var(--line);background:var(--e-tint-white-05);color:var(--txt);
  font-size:12px;outline:none}
.e-top > .topbar .search input:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--e-tint-brand)}
.e-top > .topbar .top-right{margin-left:auto;display:flex;align-items:center;gap:10px}
.e-top > .topbar .user{display:flex;align-items:center;gap:8px;padding:4px 10px;border-radius:8px;
  border:1px solid var(--line);background:var(--e-tint-white-04)}
.e-top > .topbar .user .av{width:26px;height:26px;border-radius:50%;display:flex;align-items:center;
  justify-content:center;font-size:12px;color:var(--txt)}
.e-top > .topbar .user .name{font-size:12px;font-weight:600;color:var(--txt)}
.e-top > .topbar .user .role-tag{font-size:11px;color:var(--sub,var(--dim))}
.e-top > .topbar .logout{padding:5px 11px;border-radius:8px;border:1px solid var(--e-tint-red);
  color:var(--red);font-size:12px;text-decoration:none}
.e-top > .topbar .ai-btn{font-size:12px}
/* 挂上真顶栏（真身份 + 真退出）后，隐藏新壳里硬编码的占位身份/视角胶囊 */
body[data-emp-hastopbar="1"] .e-sp,
body[data-emp-hastopbar="1"] .e-chip,
body[data-emp-hastopbar="1"] .e-who{display:none}
body[data-emp-hastopbar="1"] .e-top > .topbar .brand{display:none}

/* ---------- 20. 门户卡矩阵 / 空态（P6 门户型原型专用） ---------- */
.e-navgrid{display:grid;gap:13px;grid-template-columns:repeat(auto-fill,minmax(232px,1fr))}
.e-navcard{position:relative;display:block;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:14px 16px;text-decoration:none;color:inherit;transition:transform .16s,border-color .16s,background .16s;cursor:pointer}
.e-navcard:hover,.e-navcard:focus-visible{transform:translateY(-2px);border-color:var(--e-tint-cyan-50);background:var(--e-tint-cyan);outline:none}
.e-navcard:focus-visible{box-shadow:0 0 0 3px var(--e-tint-cyan)}
.e-navcard .ic{font-size:22px;line-height:1;margin-bottom:9px;display:block}
.e-navcard .t{font-size:13.5px;font-weight:700;color:var(--txt);display:flex;align-items:center;gap:7px;flex-wrap:wrap;line-height:1.45}
.e-navcard .d{font-size:11.5px;color:var(--dim);line-height:1.62;margin-top:5px}
.e-navcard .mt{margin-top:9px;padding-top:9px;border-top:1px dashed var(--line);display:flex;align-items:center;gap:7px;font-size:11px;color:var(--dim);flex-wrap:wrap}
.e-navcard.hot{border-color:var(--e-tint-248_113_113-34)}
.e-navcard.mgr{border-color:var(--e-tint-167_139_250-32)}
.e-navcard.dev{border-color:var(--e-tint-cyan-28)}
.e-empty{padding:34px 18px;text-align:center;color:var(--dim);font-size:12px;line-height:1.7}
.e-empty .ic{font-size:30px;opacity:.45;margin-bottom:9px;display:block}

/* ===== W10 token expansion (2026-10-02): page-level tints/solids pulled into the baseline ===== */
:root{
  --e-tint-cyan-09:rgba(45,212,191,.09);
  --e-tint-cyan-10:rgba(45,212,191,.1);
  --e-tint-cyan-12:rgba(45,212,191,.12);
  --e-tint-cyan-14:rgba(45,212,191,.14);
  --e-tint-cyan-16:rgba(45,212,191,.16);
  --e-tint-cyan-18:rgba(45,212,191,.18);
  --e-tint-cyan-20:rgba(45,212,191,.2);
  --e-tint-cyan-25:rgba(45,212,191,.25);
  --e-tint-cyan-50:rgba(45,212,191,.5);
  --e-tint-indigo-05:rgba(99,91,255,.05);
  --e-tint-indigo-08:rgba(99,91,255,.08);
  --e-tint-indigo-10:rgba(99,91,255,.1);
  --e-tint-indigo-12:rgba(99,91,255,.12);
  --e-tint-indigo-13:rgba(99,91,255,.13);
  --e-tint-indigo-14:rgba(99,91,255,.14);
  --e-tint-indigo-16:rgba(99,91,255,.16);
  --e-tint-indigo-18:rgba(99,91,255,.18);
  --e-tint-indigo-20:rgba(99,91,255,.2);
  --e-tint-indigo-22:rgba(99,91,255,.22);
  --e-tint-indigo-25:rgba(99,91,255,.25);
  --e-tint-indigo-35:rgba(99,91,255,.35);
  --e-tint-indigo-55:rgba(99,91,255,.55);
  --e-tint-brand-20:rgba(79,140,255,.20);
  --e-tint-brand-22:rgba(79,140,255,.22);
  --e-tint-pink-08:rgba(244,114,182,.08);
  --e-tint-pink-10:rgba(244,114,182,.1);
  --e-tint-pink-12:rgba(244,114,182,.12);
  --e-tint-sky-12:rgba(0,212,255,.12);
  --e-tint-teal-12:rgba(20,184,166,.12);
  --e-tint-teal-22:rgba(20,184,166,.22);
  --e-tint-branddeep-13:rgba(43,92,230,.13);
  --e-tint-white-02:rgba(255,255,255,.02);
  --e-tint-white-05:rgba(255,255,255,.05);
  --e-tint-white-12:rgba(255,255,255,.12);
  --e-tint-white-32:rgba(255,255,255,.32);
  --e-tint-white-40:rgba(255,255,255,.4);
  --e-tint-deep-30:rgba(10,37,64,.3);
  --e-tint-deep-40:rgba(7,15,34,.4);
  --e-deep-1:#0a1a3c;
  --e-deep-2:#0a1c3d;
  --e-deep-3:#07132c;
  --e-deep-4:#123067;
  --e-deep-5:#0e1a2e;
  --e-deep-6:#0a1322;
  --e-solid-teal:#14b8a6;
  --e-solid-green-a:#00a854;
  --e-solid-green-b:#059669;
  --e-solid-amber:#d97706;
  --e-solid-mint:#7ef0da;
  --e-solid-blue:#3b82f6;
  --e-solid-black:#000;
  --e-solid-cyan-a:#0891b2;
  --e-solid-cyan-b:#0e7490;
  --e-solid-sky:#0ea5e9;
  --e-solid-brand-a:#2f6bff;
}

/* ===== W10b: deep header tints (2026-10-02) ===== */
:root{
  --e-tint-deep-94:rgba(13,23,42,.94);
  --e-tint-deep-86:rgba(9,18,34,.86);
}

/* ============================================================
   P1.1 新增令牌 · 变体 B（零视觉变化）= 236 个（A 保留 227 + 精确档 9）
   DOC-20261002-SWDEV-PLAN-030 · P1.1 定标产物 · 生成于 2026-10-02
   方案: β / 容差 20 —— 只给「出现次数 ≥ 20 且已有令牌族」的色值建令牌
   本块为纯新增，不改动既有任何定义（RL-29 / RL-15）
   ============================================================ */
/* 与变体 A 的差异：下列色值改采 3 位精度令牌，使视觉变化 = 0 */
:root{
  --e-tint-0_0_0-03:rgba(0,0,0,.03);
  --e-tint-0_0_0-06:rgba(0,0,0,.06);
  --e-tint-0_0_0-08:rgba(0,0,0,.08);
  --e-tint-0_0_0-12:rgba(0,0,0,.12);
  --e-tint-0_0_0-15:rgba(0,0,0,.15);
  --e-tint-0_0_0-18:rgba(0,0,0,.18);
  --e-tint-0_0_0-22:rgba(0,0,0,.22);
  --e-tint-0_0_0-24:rgba(0,0,0,.24);
  --e-tint-0_0_0-25:rgba(0,0,0,.25);
  --e-tint-0_0_0-28:rgba(0,0,0,.28);
  --e-tint-0_0_0-30:rgba(0,0,0,.3);
  --e-tint-0_0_0-35:rgba(0,0,0,.35);
  --e-tint-0_0_0-40:rgba(0,0,0,.4);
  --e-tint-0_0_0-41:rgba(0,0,0,.41);
  --e-tint-0_0_0-42:rgba(0,0,0,.42);
  --e-tint-0_0_0-45:rgba(0,0,0,.45);
  --e-tint-0_0_0-50:rgba(0,0,0,.5);
  --e-tint-0_0_0-55:rgba(0,0,0,.55);
  --e-tint-0_0_0-60:rgba(0,0,0,.6);
  --e-tint-0_0_0-65:rgba(0,0,0,.65);
  --e-tint-0_0_0-75:rgba(0,0,0,.75);
  --e-tint-248_113_113-05:rgba(248,113,113,.05);
  --e-tint-248_113_113-06:rgba(248,113,113,.06);
  --e-tint-248_113_113-07:rgba(248,113,113,.07);
  --e-tint-248_113_113-08:rgba(248,113,113,.08);
  --e-tint-248_113_113-09:rgba(248,113,113,.09);
  --e-tint-248_113_113-10:rgba(248,113,113,.1);
  --e-tint-248_113_113-12:rgba(248,113,113,.12);
  --e-tint-248_113_113-13:rgba(248,113,113,.13);
  --e-tint-248_113_113-14:rgba(248,113,113,.14);
  --e-tint-248_113_113-15:rgba(248,113,113,.15);
  --e-tint-248_113_113-16:rgba(248,113,113,.16);
  --e-tint-248_113_113-20:rgba(248,113,113,.2);
  --e-tint-248_113_113-25:rgba(248,113,113,.25);
  --e-tint-248_113_113-30:rgba(248,113,113,.3);
  --e-tint-248_113_113-32:rgba(248,113,113,.32);
  --e-tint-248_113_113-33:rgba(248,113,113,.33);
  --e-tint-248_113_113-34:rgba(248,113,113,.34);
  --e-tint-248_113_113-35:rgba(248,113,113,.35);
  --e-tint-248_113_113-38:rgba(248,113,113,.38);
  --e-tint-248_113_113-40:rgba(248,113,113,.4);
  --e-tint-248_113_113-45:rgba(248,113,113,.45);
  --e-tint-248_113_113-50:rgba(248,113,113,.5);
  --e-tint-248_113_113-55:rgba(248,113,113,.55);
  --e-tint-248_113_113-60:rgba(248,113,113,.6);
  --e-tint-248_113_113-70:rgba(248,113,113,.7);
  --e-tint-248_113_113-80:rgba(248,113,113,.8);
  --e-tint-251_191_36-05:rgba(251,191,36,.05);
  --e-tint-251_191_36-06:rgba(251,191,36,.06);
  --e-tint-251_191_36-07:rgba(251,191,36,.07);
  --e-tint-251_191_36-08:rgba(251,191,36,.08);
  --e-tint-251_191_36-09:rgba(251,191,36,.09);
  --e-tint-251_191_36-10:rgba(251,191,36,.1);
  --e-tint-251_191_36-12:rgba(251,191,36,.12);
  --e-tint-251_191_36-13:rgba(251,191,36,.13);
  --e-tint-251_191_36-14:rgba(251,191,36,.14);
  --e-tint-251_191_36-15:rgba(251,191,36,.15);
  --e-tint-251_191_36-16:rgba(251,191,36,.16);
  --e-tint-251_191_36-18:rgba(251,191,36,.18);
  --e-tint-251_191_36-20:rgba(251,191,36,.2);
  --e-tint-251_191_36-25:rgba(251,191,36,.25);
  --e-tint-251_191_36-30:rgba(251,191,36,.3);
  --e-tint-251_191_36-33:rgba(251,191,36,.33);
  --e-tint-251_191_36-34:rgba(251,191,36,.34);
  --e-tint-251_191_36-35:rgba(251,191,36,.35);
  --e-tint-251_191_36-38:rgba(251,191,36,.38);
  --e-tint-251_191_36-40:rgba(251,191,36,.4);
  --e-tint-251_191_36-45:rgba(251,191,36,.45);
  --e-tint-251_191_36-50:rgba(251,191,36,.5);
  --e-tint-251_191_36-55:rgba(251,191,36,.55);
  --e-tint-251_191_36-70:rgba(251,191,36,.7);
  --e-tint-251_191_36-75:rgba(251,191,36,.75);
  --e-tint-251_191_36-80:rgba(251,191,36,.8);
  /* C-001(B3 20261006): eng-rank 排名徽章 r2(银)/r3(铜) 背景由硬编码 rgba 收编为 3 位精度令牌，视觉零变化 */
  --e-tint-195_205_217-12:rgba(195,205,217,.12);
  --e-tint-217_119_6-22:rgba(217,119,6,.22);
  --e-tint-52_211_153-05:rgba(52,211,153,.05);
  --e-tint-52_211_153-06:rgba(52,211,153,.06);
  --e-tint-52_211_153-07:rgba(52,211,153,.07);
  --e-tint-52_211_153-08:rgba(52,211,153,.08);
  --e-tint-52_211_153-10:rgba(52,211,153,.1);
  --e-tint-52_211_153-12:rgba(52,211,153,.12);
  --e-tint-52_211_153-14:rgba(52,211,153,.14);
  --e-tint-52_211_153-15:rgba(52,211,153,.15);
  --e-tint-52_211_153-18:rgba(52,211,153,.18);
  --e-tint-52_211_153-20:rgba(52,211,153,.2);
  --e-tint-52_211_153-25:rgba(52,211,153,.25);
  --e-tint-52_211_153-28:rgba(52,211,153,.28);
  --e-tint-52_211_153-30:rgba(52,211,153,.3);
  --e-tint-52_211_153-40:rgba(52,211,153,.4);
  --e-tint-52_211_153-45:rgba(52,211,153,.45);
  --e-tint-52_211_153-92:rgba(52,211,153,.92);
  --e-tint-61_220_132-06:rgba(61,220,132,.06);
  --e-tint-61_220_132-07:rgba(61,220,132,.07);
  --e-tint-61_220_132-08:rgba(61,220,132,.08);
  --e-tint-61_220_132-10:rgba(61,220,132,.1);
  --e-tint-61_220_132-12:rgba(61,220,132,.12);
  --e-tint-61_220_132-14:rgba(61,220,132,.14);
  --e-tint-61_220_132-15:rgba(61,220,132,.15);
  --e-tint-61_220_132-16:rgba(61,220,132,.16);
  --e-tint-61_220_132-20:rgba(61,220,132,.2);
  --e-tint-61_220_132-25:rgba(61,220,132,.25);
  --e-tint-61_220_132-30:rgba(61,220,132,.3);
  --e-tint-61_220_132-35:rgba(61,220,132,.35);
  --e-tint-61_220_132-36:rgba(61,220,132,.36);
  --e-tint-61_220_132-40:rgba(61,220,132,.4);
  --e-tint-61_220_132-45:rgba(61,220,132,.45);
  --e-tint-61_220_132-50:rgba(61,220,132,.5);
  --e-tint-61_220_132-70:rgba(61,220,132,.7);
  --e-tint-61_220_132-75:rgba(61,220,132,.75);
  --e-tint-61_220_132-80:rgba(61,220,132,.8);
  --e-tint-brand-04:rgba(79,140,255,.04);
  --e-tint-brand-08:rgba(79,140,255,.08);
  --e-tint-brand-10:rgba(79,140,255,.1);
  --e-tint-brand-12:rgba(79,140,255,.12);
  --e-tint-brand-14:rgba(79,140,255,.14);
  --e-tint-brand-15:rgba(79,140,255,.15);
  --e-tint-brand-16:rgba(79,140,255,.16);
  --e-tint-brand-18:rgba(79,140,255,.18);
  --e-tint-brand-25:rgba(79,140,255,.25);
  --e-tint-brand-26:rgba(79,140,255,.26);
  --e-tint-brand-28:rgba(79,140,255,.28);
  --e-tint-brand-30:rgba(79,140,255,.3);
  --e-tint-brand-34:rgba(79,140,255,.34);
  --e-tint-brand-35:rgba(79,140,255,.35);
  --e-tint-brand-40:rgba(79,140,255,.4);
  --e-tint-brand-45:rgba(79,140,255,.45);
  --e-tint-brand-55:rgba(79,140,255,.55);
  --e-tint-brand-60:rgba(79,140,255,.6);
  --e-tint-branddeep-08:rgba(43,92,230,.08);
  --e-tint-branddeep-10:rgba(43,92,230,.1);
  --e-tint-branddeep-12:rgba(43,92,230,.12);
  --e-tint-branddeep-15:rgba(43,92,230,.15);
  --e-tint-branddeep-20:rgba(43,92,230,.2);
  --e-tint-branddeep-25:rgba(43,92,230,.25);
  --e-tint-branddeep-30:rgba(43,92,230,.3);
  --e-tint-branddeep-32:rgba(43,92,230,.32);
  --e-tint-branddeep-35:rgba(43,92,230,.35);
  --e-tint-branddeep-40:rgba(43,92,230,.4);
  --e-tint-branddeep-50:rgba(43,92,230,.5);
  --e-tint-cyan-04:rgba(45,212,191,.04);
  --e-tint-cyan-05:rgba(45,212,191,.05);
  --e-tint-cyan-06:rgba(45,212,191,.06);
  --e-tint-cyan-07:rgba(45,212,191,.07);
  --e-tint-cyan-08:rgba(45,212,191,.08);
  --e-tint-cyan-13:rgba(45,212,191,.13);
  --e-tint-cyan-15:rgba(45,212,191,.15);
  --e-tint-cyan-22:rgba(45,212,191,.22);
  --e-tint-cyan-24:rgba(45,212,191,.24);
  --e-tint-cyan-28:rgba(45,212,191,.28);
  --e-tint-cyan-30:rgba(45,212,191,.3);
  --e-tint-cyan-32:rgba(45,212,191,.32);
  --e-tint-cyan-35:rgba(45,212,191,.35);
  --e-tint-cyan-40:rgba(45,212,191,.4);
  --e-tint-cyan-45:rgba(45,212,191,.45);
  --e-tint-cyan-55:rgba(45,212,191,.55);
  --e-tint-cyan-60:rgba(45,212,191,.6);
  --e-tint-cyan-65:rgba(45,212,191,.65);
  --e-tint-cyan-75:rgba(45,212,191,.75);
  --e-tint-cyan-80:rgba(45,212,191,.8);
  --e-tint-cyan-85:rgba(45,212,191,.85);
  --e-tint-indigo-06:rgba(99,91,255,.06);
  --e-tint-indigo-07:rgba(99,91,255,.07);
  --e-tint-indigo-15:rgba(99,91,255,.15);
  --e-tint-indigo-28:rgba(99,91,255,.28);
  --e-tint-indigo-30:rgba(99,91,255,.3);
  --e-tint-indigo-38:rgba(99,91,255,.38);
  --e-tint-indigo-40:rgba(99,91,255,.4);
  --e-tint-indigo-45:rgba(99,91,255,.45);
  --e-tint-indigo-50:rgba(99,91,255,.5);
  --e-tint-indigo-60:rgba(99,91,255,.6);
  --e-tint-indigo-65:rgba(99,91,255,.65);
  --e-tint-indigo-70:rgba(99,91,255,.7);
  --e-tint-indigo-80:rgba(99,91,255,.8);
  --e-tint-pink-07:rgba(244,114,182,.07);
  --e-tint-pink-17:rgba(244,114,182,.17);
  --e-tint-pink-20:rgba(244,114,182,.2);
  --e-tint-pink-90:rgba(244,114,182,.9);
  --e-tint-sky-04:rgba(0,212,255,.04);
  --e-tint-sky-05:rgba(0,212,255,.05);
  --e-tint-sky-06:rgba(0,212,255,.06);
  --e-tint-sky-07:rgba(0,212,255,.07);
  --e-tint-sky-08:rgba(0,212,255,.08);
  --e-tint-sky-10:rgba(0,212,255,.1);
  --e-tint-sky-14:rgba(0,212,255,.14);
  --e-tint-sky-15:rgba(0,212,255,.15);
  --e-tint-sky-18:rgba(0,212,255,.18);
  --e-tint-sky-20:rgba(0,212,255,.2);
  --e-tint-sky-25:rgba(0,212,255,.25);
  --e-tint-sky-28:rgba(0,212,255,.28);
  --e-tint-sky-30:rgba(0,212,255,.3);
  --e-tint-sky-35:rgba(0,212,255,.35);
  --e-tint-sky-40:rgba(0,212,255,.4);
  --e-tint-sky-45:rgba(0,212,255,.45);
  --e-tint-sky-50:rgba(0,212,255,.5);
  --e-tint-sky-55:rgba(0,212,255,.55);
  --e-tint-sky-60:rgba(0,212,255,.6);
  --e-tint-sky-65:rgba(0,212,255,.65);
  --e-tint-sky-70:rgba(0,212,255,.7);
  --e-tint-sky-80:rgba(0,212,255,.8);
  --e-tint-sky-85:rgba(0,212,255,.85);
  --e-tint-teal-28:rgba(20,184,166,.28);
  --e-tint-teal-90:rgba(20,184,166,.9);
  --e-tint-white-09:rgba(255,255,255,.09);
  --e-tint-white-10:rgba(255,255,255,.1);
  --e-tint-white-13:rgba(255,255,255,.13);
  --e-tint-white-14:rgba(255,255,255,.14);
  --e-tint-white-15:rgba(255,255,255,.15);
  --e-tint-white-16:rgba(255,255,255,.16);
  --e-tint-white-18:rgba(255,255,255,.18);
  --e-tint-white-20:rgba(255,255,255,.2);
  --e-tint-white-22:rgba(255,255,255,.22);
  --e-tint-white-25:rgba(255,255,255,.25);
  --e-tint-white-28:rgba(255,255,255,.28);
  --e-tint-white-30:rgba(255,255,255,.3);
  --e-tint-white-35:rgba(255,255,255,.35);
  --e-tint-white-45:rgba(255,255,255,.45);
  --e-tint-white-70:rgba(255,255,255,.7);
  --e-tint-white-75:rgba(255,255,255,.75);
  --e-tint-white-80:rgba(255,255,255,.8);
  --e-tint-white-82:rgba(255,255,255,.82);
  --e-tint-white-85:rgba(255,255,255,.85);
  --e-tint-white-86:rgba(255,255,255,.86);
  --e-tint-white-90:rgba(255,255,255,.9);
  --e-tint-white-92:rgba(255,255,255,.92);
  --e-tint-white-94:rgba(255,255,255,.94);
  --e-tint-white-95:rgba(255,255,255,.95);
  --e-tint-white-97:rgba(255,255,255,.97);
  --e-tint-white-98:rgba(255,255,255,.98);
  --e-tint-white-99:rgba(255,255,255,.99);
  --e-tint-white-045:rgba(255,255,255,0.045);  /* 精确档: rgba(255,255,255,.045) */
  --e-tint-white-065:rgba(255,255,255,0.065);  /* 精确档: rgba(255,255,255,.065) */
  --e-tint-white-028:rgba(255,255,255,0.028);  /* 精确档: rgba(255,255,255,.028) */
  --e-tint-white-105:rgba(255,255,255,0.105);  /* 精确档: rgba(255,255,255,.105) */
  --e-tint-white-015:rgba(255,255,255,0.015);  /* 精确档: rgba(255,255,255,.015) */
  --e-tint-white-035:rgba(255,255,255,0.035);  /* 精确档: rgba(255,255,255,.035) */
  --e-tint-white-055:rgba(255,255,255,0.055);  /* 精确档: rgba(255,255,255,.055) */
  --e-tint-white-075:rgba(255,255,255,0.075);  /* 精确档: rgba(255,255,255,.075) */
  --e-tint-white-025:rgba(255,255,255,0.025);  /* 精确档: rgba(255,255,255,.025) */
}

/* ============================================================
   P1.4 缺口修补 · 补齐「映射指向未定义令牌」（2026-10-02）
   原因：生成令牌表时以下 5 个被误判为「已存在」，未写入补丁，
        导致替换被 DEFINED 检查挡下，残留 525 处未换。
   本块为纯新增，不改动既有任何定义。
   ============================================================ */
:root{
  --e-tint-white-03:rgba(255,255,255,.03);
  --e-tint-white-04:rgba(255,255,255,.04);
  --e-tint-white-06:rgba(255,255,255,.06);
  --e-tint-white-07:rgba(255,255,255,.07);
  --e-tint-white-08:rgba(255,255,255,.08);
}

/* ============================================================
   P1.5 离板色裁决落地（2026-10-03 老板批准）
   高频值新增 token（值不变、零视觉位移），供页面内联替换。
   本块为纯新增，不改动既有任何定义。
   ============================================================ */
:root{
  --e-tint-4_12_24-72:rgba(4,12,24,.72);
  --e-tint-220_38_38-40:rgba(220,38,38,.4);
  --e-tint-8_10_24-78:rgba(8,10,24,.78);
  --e-tint-13_23_48-80:rgba(13,23,48,.8);
  --e-tint-167_139_250-30:rgba(167,139,250,.3);
  --e-tint-239_68_68-15:rgba(239,68,68,.15);
  --e-tint-245_158_11-40:rgba(245,158,11,.4);
  --e-tint-13_23_48-60:rgba(13,23,48,.6);
  --e-tint-13_23_48-75:rgba(13,23,48,.75);
  --e-solid-hex-071018:#071018;
  --e-tint-7_15_34-60:rgba(7,15,34,.6);
  --e-solid-hex-9fc4ff:#9fc4ff;
  --e-tint-0_168_84-30:rgba(0,168,84,.3);
  --e-tint-245_158_11-30:rgba(245,158,11,.3);
  --e-tint-148_163_184-15:rgba(148,163,184,.15);
}

/* ============================================================
   2026-10-05 UI 审计闭环（X3/X5/X10，SH-CSS 独占）
   出处: ui-audit-hrx-os/HRX-OS-UI设计全量审计报告-20261005.md
   本块为纯新增，不改动既有任何定义，色值与被替换字面量逐字节一致（零视觉位移）。
   ============================================================ */

/* ---------- X10 品牌蓝锚定（注释层，不改任何变量值） ----------
   唯一品牌锚点 = --brand (#4f8cff，定义于 app.css)。
   使用边界（仅约定，不重映射任何现有引用）：
     · --brand   —— 主按钮 / 链接 / 强调线 / 品牌渐变起点（唯一对外品牌色）
     · --violet / --violet-2 —— 仅用于徽标、警示性强调、品牌渐变尾段；禁止作为普通交互主色
     · --blue (#635bff)     —— 历史兼容保留，新组件不得再引用；遇新需求一律取 --brand
     · --e-solid-* 系列     —— 仅页面级/图表专用实色，禁止回灌组件层
   收敛目标：页面主色漂移到此为止，新代码只认 --brand 为品牌蓝入口。 */

/* ---------- X3 组件层硬编码色 token 化（值不变，纯新增令牌） ----------
   下列字面量原散落在 .e-top/.e-side/.e-tag.v/.e-trust.manual/.e-mask/
   .e-navcard.mgr/.e-sel option/.e-login-tip 等真实样式规则中；无现成精确档，
   按 P1.5 离板色裁决惯例建同名令牌，引用处已改 var()。 */
:root{
  --e-tint-6_24_42-74:rgba(6,24,42,.74);          /* .e-top 背景 */
  --e-tint-6_24_42-42:rgba(6,24,42,.42);          /* .e-side 背景 */
  --e-tint-167_139_250-45:rgba(167,139,250,.45);  /* .e-tag.v 描边（对齐 -45 描边族） */
  --e-tint-167_139_250-32:rgba(167,139,250,.32);  /* .e-navcard.mgr 描边 */
  --e-tint-147_197_253-14:rgba(147,197,253,.14);  /* .e-trust.manual 底（=--info-soft 同色族） */
  --e-tint-147_197_253-32:rgba(147,197,253,.32);  /* .e-trust.manual 描边 */
  --e-tint-4_14_26-60:rgba(4,14,26,.6);           /* .e-mask 遮罩 */
  --e-tint-244_201_93-08:rgba(244,201,93,.08);    /* .e-login-tip 底 */
  --e-tint-244_201_93-35:rgba(244,201,93,.35);    /* .e-login-tip 描边 */
  --e-solid-hex-f4c95d:#f4c95d;                   /* .e-login-tip 文字（原硬编码 #f4c95d，无现成黄色档） */
}

/* ---------- X5 语义别名层（只读别名，指向既有语义 token，不新增色值） ----------
   背景：300+ --e-tint-* 机器命名与 --ok-soft/--warn-soft 并存，取色靠猜；
         下列 --sem-* 提供「成功/警告/错误/信息」四字可读入口。
   注：--ok-soft/--warn-soft/--err-soft/--info-soft（浅色变体）既已存在，勿重复添加，
       需要浅色文字/徽标时仍取 *-soft；--sem-* 指向对应主色实心语义。 */
:root{
  --sem-ok:var(--green);     /* 成功-主色（与 --ok-soft 同语义族） */
  --sem-warn:var(--yellow);  /* 警告-主色（与 --warn-soft 同语义族） */
  --sem-err:var(--red);      /* 错误-主色（与 --err-soft 同语义族） */
  --sem-info:var(--cyan);    /* 信息-主色（与 --info-soft 同语义族） */
}

/* ============================================================
   2026-10-04 技术债治理 · 行内 style 收敛共享类（纯新增，不改既有定义）
   出处: _work-20261004-techdebt/style-patterns.txt（全站 6150 处行内 style 高频模式统计）
   用法: 仅将页面静态 HTML 中与下列 1:1 精确匹配的行内 style 属性收敛为该类；
         动态渲染层（JS 模板串）禁止使用；值与内联完全一致、零视觉位移。
   ============================================================ */
.emp .e-m0{margin:0}
.emp .e-my14{margin:14px 0}
.emp .e-mt4{margin-top:4px}
.emp .e-mt6{margin-top:6px}
.emp .e-mt8{margin-top:8px}
.emp .e-mt9{margin-top:9px}
.emp .e-mt10{margin-top:10px}
.emp .e-mt12{margin-top:12px}
.emp .e-mt14{margin-top:14px}
.emp .e-mb4{margin-bottom:4px}
.emp .e-mb8{margin-bottom:8px}
.emp .e-mb12{margin-bottom:12px}
.emp .e-mb13{margin-bottom:13px}
.emp .e-mb14{margin-bottom:14px}
.emp .e-fs11{font-size:11px}
.emp .e-fs115{font-size:11.5px}
.emp .e-fs12{font-size:12px}
.emp .e-fs125{font-size:12.5px}
.emp .e-fs13{font-size:13px}
.emp .e-fs17{font-size:17px}
.emp .e-tac{text-align:center}
/* P2⑨ 高频对齐工具类（2026-10-05 预置，供 rbac.html 等行内 text-align 抽类）。
   注：.e-tac 为既有简写中心类；下方 .e-ta-center 为全名写法，二者同效，任选其一收敛内联。 */
.emp .e-ta-left{text-align:left}
.emp .e-ta-center{text-align:center}
.emp .e-ta-right{text-align:right}

/* ========== 导航分组折叠与收纳（2026-10-04 全站导航优化改造，nav-redesign-spec） ========== */
.e-nsec > .sh { cursor: pointer; user-select: none; border-radius: 7px; transition: background .15s, color .15s; }
.e-nsec > .sh:hover { background: var(--card); color: var(--txt); }
.e-nsec > .sh .cnt { margin-left: auto; font-size: 10px; font-weight: 700; color: var(--dim); opacity: .6; }
.e-nsec > .sh .caret { display: inline-block; font-size: 10px; color: var(--dim); opacity: .6; transition: transform .18s; }
.e-nsec.closed > .sh .caret { transform: rotate(-90deg); }
.e-nsec.closed > .e-ni { display: none; }
/* v20261004e 导航固定+未登录提示条 */
.e-login-tip{display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--e-solid-hex-f4c95d);background:var(--e-tint-244_201_93-08);border:1px solid var(--e-tint-244_201_93-35);border-radius:8px;padding:7px 12px;margin-bottom:14px}

/* ============================================================
   2026-10-05 二轮追加（X7/P2⑨ 行内抽类共享层 + 新令牌，SH-CSS 独占）
   出处: FIX-COORD-S5 / FIX-COORD-S2 / S3 登记；值与各页内联逐字一致（零视觉位移）。
   ============================================================ */

/* ---------- .pp-grid / .pp-kpi 项目/文档页栅格（FIX-COORD-S5 登记） ----------
   来源: project-code/project-docs/form-templates/meeting 四页 <style> 逐字复制。
   断点取舍：原登记 1100/760，本类统一到全站 900/768 ——
     ① 对齐全站 900/768/480 断点体系；② acceptance/design-check/change-impact
       (S7) 三页已先行迁移到 900/768。S5 四页迁移时栅格断点由 1100→900 收敛，
       属体系统一，非视觉回归。
   注: 各页当前 .pp-kpi 页内实现为 repeat(auto-fit,minmax(220px,1fr))+gap14，
       与登记值 repeat(4,1fr)+gap12 有出入；本类按登记值落地，迁移时请 S5 核对。 */
.pp-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}
.pp-kpi{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
@media(max-width:900px){.pp-grid{grid-template-columns:1fr}}
@media(max-width:768px){.pp-kpi{grid-template-columns:repeat(2,1fr)}}

/* ---------- --e-tint-orange 铜牌橙 tint（FIX-COORD-S2 登记） ----------
   供 eng-rank .pill.r3 铜牌排名背景，与金牌 --e-tint-251_191_36-16 视觉区分。 */
:root{
  --e-tint-orange:rgba(251,146,60,.22);
}

/* ---------- S3 行内抽类共享工具类（people-dept/emp-dept 内联收敛） ----------
   .e-pad-16-18       people-dept 个人排行卡 padding ×10
   .e-card-accent-sky people-dept 减负账单卡描边+内距 ×11
   .e-note-bill       people-dept 减负账单文本 ×11
   .progress-track-80 排行表进度轨道宽 ×11（注：可与 .e-bar 体系合并，待收敛）
   .e-mt11            emp-dept ×5（既有档 10/12 缺 11px，补 11px 档） */
.emp .e-pad-16-18{padding:16px 18px}
.emp .e-card-accent-sky{border-color:var(--e-tint-sky-35);padding:14px 18px}
.emp .e-note-bill{color:var(--sub);line-height:1.9}
.progress-track-80{width:80px}
.emp .e-mt11{margin-top:11px}
