/* ================= 奖金考核系统 · 蓝色专业主题 ================= */
:root{
  --blue-900:#0b2f5e;
  --blue-800:#123f7a;
  --blue-700:#1a5199;
  --blue-600:#1f66c1;
  --blue-500:#2a7ade;
  --blue-300:#7fb2ee;
  --blue-100:#dbeafe;
  --blue-50:#eff6ff;

  --ink-900:#0f172a;
  --ink-700:#334155;
  --ink-500:#64748b;
  --ink-400:#94a3b8;
  --line:#e2e8f0;
  --line-soft:#eef2f7;
  --bg:#f4f7fb;
  --card:#ffffff;

  --ok:#15803d; --ok-bg:#e8f7ee;
  --warn:#b45309; --warn-bg:#fef3c7;
  --bad:#b91c1c;  --bad-bg:#fee2e2;
  --info:#1f66c1; --info-bg:#e6f0fd;

  --radius:10px;
  --shadow-sm:0 1px 2px rgba(15,42,82,.06),0 1px 3px rgba(15,42,82,.05);
  --shadow-md:0 4px 14px rgba(15,42,82,.09);
  --topbar-h:64px; --actionbar-h:52px; --side-w:212px;
}

*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
  font-family:"Microsoft YaHei","PingFang SC","Hiragino Sans GB","Segoe UI",system-ui,sans-serif;
  background:var(--bg); color:var(--ink-900); font-size:13.5px; line-height:1.6;
  -webkit-font-smoothing:antialiased;
}
svg.ico,svg.nico{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex:none}
svg.nico{width:16px;height:16px}

/* ---------- 顶部栏 ---------- */
.topbar{
  height:var(--topbar-h); background:linear-gradient(100deg,var(--blue-900) 0%,var(--blue-700) 55%,var(--blue-600) 100%);
  color:#fff; display:flex; align-items:center; padding:0 20px; position:sticky; top:0; z-index:60;
  box-shadow:0 2px 10px rgba(11,47,94,.22);
}
.topbar-left{flex:1 1 0;min-width:0;display:flex;align-items:center;flex-wrap:wrap;gap:4px 14px}
.topbar-right{flex:0 0 250px;display:flex;align-items:center;justify-content:flex-end}
.me-info{display:flex;align-items:center;flex-wrap:wrap;min-width:0;line-height:1.2}
.me-field{display:inline-flex;align-items:baseline;gap:6px;white-space:nowrap}
.me-field i{font-style:normal;font-size:11px;color:#9fc2ee;letter-spacing:.3px}
.me-field b{font-size:13px;font-weight:600;color:#fff}
.me-sep{flex:0 0 auto;width:1px;height:13px;background:rgba(255,255,255,.3);margin:0 13px}
.topbar-center{flex:1;text-align:center;min-width:0}
.brand{display:flex;align-items:center;gap:9px;opacity:.95}
.brand svg{stroke:#bfdbfe}
.brand-txt{font-size:14px;font-weight:600;letter-spacing:.5px}
.app-title{font-size:22px;font-weight:700;letter-spacing:4px;line-height:1.25}
.app-sub{font-size:11.5px;color:#c7dcf7;letter-spacing:.3px;margin-top:1px}
.month-box{display:flex;align-items:center;gap:8px;background:rgba(255,255,255,.14);padding:6px 11px;border-radius:8px;border:1px solid rgba(255,255,255,.18)}
.month-box label{font-size:12px;color:#dbeafe;white-space:nowrap}
.month-box select{
  background:#fff;color:var(--blue-800);border:none;border-radius:5px;padding:4px 8px;
  font-size:12.5px;font-weight:600;font-family:inherit;cursor:pointer;outline:none;min-width:104px;
}

/* ---------- 操作条 ---------- */
.actionbar{background:var(--card);border-bottom:1px solid var(--line);position:sticky;top:var(--topbar-h);z-index:55}
.actionbar-inner{height:var(--actionbar-h);display:flex;align-items:center;gap:8px;padding:0 20px}

/* ---------- 本地模式告警条 ---------- */
.local-warn{display:flex;align-items:center;gap:8px;padding:7px 20px;background:var(--warn-bg);
  color:var(--warn);font-size:12.5px;line-height:1.5;border-bottom:1px solid #f6d98a;
  position:sticky;top:var(--topbar-h);z-index:54}
.local-warn code{background:#fff8e6;border:1px solid #f0d28a;border-radius:5px;padding:1px 6px;
  font-family:Consolas,Menlo,monospace;font-size:12px;color:#92400e}
.ab-spacer{flex:1}
.data-stat{font-size:12px;color:var(--ink-500);margin-right:6px}
.data-stat b{color:var(--blue-700)}

.btn{
  display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 13px;
  background:#fff;color:var(--ink-700);border:1px solid var(--line);border-radius:7px;
  font-size:12.5px;font-family:inherit;cursor:pointer;transition:.15s;white-space:nowrap;
}
.btn:hover{border-color:var(--blue-300);color:var(--blue-700);background:var(--blue-50)}
.btn:active{transform:translateY(1px)}
.btn-primary{background:var(--blue-600);border-color:var(--blue-600);color:#fff}
.btn-primary:hover{background:var(--blue-700);border-color:var(--blue-700);color:#fff}
.btn-danger{color:var(--bad);border-color:#f3c4c4}
.btn-danger:hover{background:var(--bad-bg);border-color:#e79c9c;color:var(--bad)}
.btn-sm{height:27px;padding:0 10px;font-size:12px;border-radius:6px}
.btn-ghost{background:transparent;border-color:transparent;color:var(--blue-600)}
.btn-ghost:hover{background:var(--blue-50)}
.btn:disabled{opacity:.45;cursor:not-allowed}

/* ---------- 布局 ---------- */
.layout{display:flex;min-height:calc(100vh - var(--topbar-h) - var(--actionbar-h))}
.sidebar{
  width:var(--side-w);flex:none;background:var(--card);border-right:1px solid var(--line);
  position:sticky;top:calc(var(--topbar-h) + var(--actionbar-h));height:calc(100vh - var(--topbar-h) - var(--actionbar-h));
  display:flex;flex-direction:column;justify-content:space-between;
}
#navMenu{padding:12px 10px;overflow-y:auto}
.nav-group-title{font-size:10.5px;color:var(--ink-400);letter-spacing:1.4px;padding:12px 10px 6px;font-weight:600}
.nav-item{
  display:flex;align-items:center;gap:9px;padding:9px 11px;border-radius:7px;margin-bottom:2px;
  color:var(--ink-700);font-size:13px;cursor:pointer;text-decoration:none;transition:.14s;
  border-left:3px solid transparent;
}
.nav-item span{flex:1}
.nav-item em{
  font-style:normal;font-size:10.5px;background:var(--line-soft);color:var(--ink-500);
  padding:1px 6px;border-radius:9px;min-width:18px;text-align:center;
}
.nav-item:hover{background:var(--blue-50);color:var(--blue-700)}
.nav-item.active{background:var(--blue-50);color:var(--blue-700);font-weight:600;border-left-color:var(--blue-600)}
.nav-item.active em{background:var(--blue-600);color:#fff}
.sidebar-foot{padding:12px 14px;border-top:1px solid var(--line-soft);font-size:10.5px;color:var(--ink-400);line-height:1.7}
.sf-ver{color:var(--blue-300)}

.content{flex:1;padding:18px 22px 40px;min-width:0;overflow-x:hidden}

/* ---------- 通用卡片 ---------- */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm);margin-bottom:16px}
.card-head{
  display:flex;align-items:center;gap:10px;padding:13px 16px;border-bottom:1px solid var(--line-soft);
}
.card-head h2{font-size:14.5px;font-weight:600;color:var(--blue-900);display:flex;align-items:center;gap:8px}
.card-head h2::before{content:"";width:3px;height:14px;background:var(--blue-600);border-radius:2px}
.card-head .ch-sub{font-size:11.5px;color:var(--ink-400);font-weight:400}
.card-head .spacer{flex:1}
.card-body{padding:16px}
.card-body.tight{padding:0}

.page-head{display:flex;align-items:flex-end;gap:12px;margin-bottom:14px;flex-wrap:wrap}
.page-head h1{font-size:19px;color:var(--blue-900);font-weight:700}
.page-head p{font-size:12.5px;color:var(--ink-500)}

/* ---------- 工具条 ---------- */
.toolbar{display:flex;align-items:center;gap:9px;flex-wrap:wrap;padding:13px 16px;border-bottom:1px solid var(--line-soft);background:#fbfdff;border-radius:var(--radius) var(--radius) 0 0}
.search-box{position:relative;display:flex;align-items:center}
.search-box svg{position:absolute;left:9px;width:14px;height:14px;stroke:var(--ink-400);fill:none;stroke-width:2}
.search-box input{
  height:31px;padding:0 10px 0 29px;border:1px solid var(--line);border-radius:7px;font-size:12.5px;
  font-family:inherit;outline:none;width:190px;transition:.15s;background:#fff;
}
.search-box input:focus{border-color:var(--blue-500);box-shadow:0 0 0 3px var(--blue-50);width:230px}

.dd{position:relative}
.dd-btn{
  display:inline-flex;align-items:center;gap:7px;height:31px;padding:0 11px;background:#fff;
  border:1px solid var(--line);border-radius:7px;font-size:12.5px;cursor:pointer;color:var(--ink-700);font-family:inherit;
}
.dd-btn:hover{border-color:var(--blue-300);color:var(--blue-700)}
.dd-btn .cnt{background:var(--blue-600);color:#fff;border-radius:9px;padding:0 6px;font-size:10.5px;line-height:15px}
.dd-btn .arw{width:9px;height:9px;border-right:1.6px solid var(--ink-400);border-bottom:1.6px solid var(--ink-400);transform:rotate(45deg) translate(-2px,-2px)}
.dd-panel{
  display:none;position:absolute;top:35px;left:0;z-index:40;background:#fff;border:1px solid var(--line);
  border-radius:9px;box-shadow:var(--shadow-md);padding:9px;min-width:216px;max-height:330px;overflow-y:auto;
}
.dd.open .dd-panel{display:block}
.dd-tools{display:flex;gap:6px;padding-bottom:8px;margin-bottom:6px;border-bottom:1px solid var(--line-soft)}
.dd-tools button{flex:1;height:25px;font-size:11.5px;border:1px solid var(--line);background:#fff;border-radius:5px;cursor:pointer;color:var(--ink-700);font-family:inherit}
.dd-tools button:hover{background:var(--blue-50);color:var(--blue-700);border-color:var(--blue-300)}
.dd-opt{display:flex;align-items:center;gap:8px;padding:6px 7px;border-radius:6px;cursor:pointer;font-size:12.5px}
.dd-opt:hover{background:var(--blue-50)}
.dd-opt input{accent-color:var(--blue-600);cursor:pointer;width:14px;height:14px}
.dd-opt .n{flex:1}
.dd-opt .c{font-size:11px;color:var(--ink-400)}

select.sel,input.inp{
  height:31px;border:1px solid var(--line);border-radius:7px;padding:0 9px;font-size:12.5px;
  font-family:inherit;outline:none;background:#fff;color:var(--ink-700);cursor:pointer;
}
select.sel:focus,input.inp:focus{border-color:var(--blue-500);box-shadow:0 0 0 3px var(--blue-50)}
.chip-row{display:flex;gap:6px;flex-wrap:wrap}
.chip{
  padding:4px 10px;border-radius:14px;border:1px solid var(--line);background:#fff;font-size:12px;
  cursor:pointer;color:var(--ink-700);transition:.14s;font-family:inherit;
}
.chip:hover{border-color:var(--blue-300);color:var(--blue-700)}
.chip.on{background:var(--blue-600);border-color:var(--blue-600);color:#fff;font-weight:600}

/* ---------- 表格 ---------- */
.tbl-wrap{overflow-x:auto;max-width:100%}
table.tbl{width:100%;border-collapse:collapse;font-size:12.5px;white-space:nowrap}
table.tbl th{
  background:#f2f7fd;color:var(--blue-900);font-weight:600;text-align:left;padding:9px 11px;
  border-bottom:1px solid var(--line);position:sticky;top:0;z-index:2;font-size:12px;
}
table.tbl th.sortable{cursor:pointer;user-select:none}
table.tbl th.sortable:hover{background:var(--blue-100)}
table.tbl th .sarrow{color:var(--blue-600);font-size:10px;margin-left:3px}
table.tbl td{padding:8px 11px;border-bottom:1px solid var(--line-soft);color:var(--ink-700)}
table.tbl tbody tr:hover{background:var(--blue-50)}
table.tbl tbody tr.clickable{cursor:pointer}
table.tbl .num{text-align:right;font-variant-numeric:tabular-nums;font-family:"Consolas","Menlo",monospace}
table.tbl .center{text-align:center}
table.tbl tfoot td{background:#f8fafc;font-weight:600;color:var(--blue-900);border-top:2px solid var(--line)}
.tbl-empty{padding:52px 20px;text-align:center;color:var(--ink-400);font-size:13px}
.tbl-empty .big{font-size:15px;color:var(--ink-500);margin-bottom:6px}

/* 排名标识 */
.rank{
  display:inline-flex;align-items:center;justify-content:center;min-width:24px;height:22px;padding:0 6px;
  border-radius:5px;font-size:11.5px;font-weight:700;background:var(--line-soft);color:var(--ink-500);
  font-family:"Consolas",monospace;
}
.rank.r1{background:linear-gradient(135deg,#f5b301,#ffd75e);color:#6b4a00;box-shadow:0 1px 3px rgba(245,179,1,.4)}
.rank.r2{background:linear-gradient(135deg,#9aa8b8,#cfd8e3);color:#39424d}
.rank.r3{background:linear-gradient(135deg,#c2803f,#e0a76b);color:#4a2c07}
.rank.top{background:var(--blue-100);color:var(--blue-800)}

.grade{display:inline-block;min-width:22px;text-align:center;padding:1px 7px;border-radius:5px;font-size:11.5px;font-weight:700}
.g-A{background:#dcfce7;color:#15803d}
.g-B{background:#dbeafe;color:#1d4ed8}
.g-C{background:#fef3c7;color:#b45309}
.g-D{background:#ffedd5;color:#c2410c}
.g-E{background:#fee2e2;color:#b91c1c}

.tag{display:inline-block;padding:1px 7px;border-radius:5px;font-size:11px;font-weight:500}
.t-gray{background:var(--line-soft);color:var(--ink-500)}
.t-blue{background:var(--info-bg);color:var(--info)}
.t-green{background:var(--ok-bg);color:var(--ok)}
.t-amber{background:var(--warn-bg);color:var(--warn)}
.t-red{background:var(--bad-bg);color:var(--bad)}

.bar-cell{display:flex;align-items:center;gap:7px;min-width:118px}
.bar-track{flex:1;height:6px;background:var(--line-soft);border-radius:3px;overflow:hidden;min-width:56px}
.bar-fill{height:100%;border-radius:3px;background:linear-gradient(90deg,var(--blue-500),var(--blue-700))}
.bar-fill.low{background:linear-gradient(90deg,#f59e0b,#d97706)}
.bar-fill.bad{background:linear-gradient(90deg,#ef4444,#b91c1c)}
.bar-val{font-family:"Consolas",monospace;font-size:12px;font-weight:600;color:var(--blue-800);min-width:42px;text-align:right}

/* ---------- 统计卡片 ---------- */
.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(158px,1fr));gap:12px;margin-top:16px}
.stat-card{
  background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:14px 15px;
  box-shadow:var(--shadow-sm);position:relative;overflow:hidden;transition:.16s;
}
.stat-card:hover{box-shadow:var(--shadow-md);transform:translateY(-1px)}
.stat-card::after{content:"";position:absolute;left:0;top:0;width:3px;height:100%;background:var(--blue-600)}
.stat-card.c-green::after{background:var(--ok)}
.stat-card.c-amber::after{background:#d97706}
.stat-card.c-red::after{background:var(--bad)}
.stat-card.c-deep::after{background:var(--blue-900)}
.sc-label{font-size:11.5px;color:var(--ink-500);display:flex;align-items:center;gap:5px;margin-bottom:6px}
.sc-value{font-size:25px;font-weight:700;color:var(--blue-900);font-family:"Consolas","Menlo",monospace;line-height:1.15}
.sc-value small{font-size:12.5px;font-weight:500;color:var(--ink-400);margin-left:2px;font-family:inherit}
.sc-note{font-size:11px;color:var(--ink-400);margin-top:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* ---------- 图表 ---------- */
.chart-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.chart-grid.one{grid-template-columns:1fr}
@media(max-width:1180px){.chart-grid{grid-template-columns:1fr}}
.chart-box{position:relative;height:320px;padding:6px 4px}
.chart-box.tall{height:380px}
.chart-box.xtall{height:440px}

.insight{background:var(--blue-50);border:1px solid var(--blue-100);border-radius:8px;padding:12px 14px;font-size:12.5px;color:var(--ink-700);line-height:1.85}
.insight b{color:var(--blue-800)}
.insight .il{display:flex;gap:8px;margin-bottom:5px}
.insight .il:last-child{margin-bottom:0}
.insight .il i{font-style:normal;color:var(--blue-600);font-weight:700;flex:none}
.insight.warn{background:#fffbeb;border-color:#fde68a}
.insight.warn .il i{color:#b45309}
.insight.ok{background:#f0fdf4;border-color:#bbf7d0}
.insight.ok .il i{color:#15803d}

.norm-badge{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:14px;font-size:12px;font-weight:600}
.norm-yes{background:var(--ok-bg);color:var(--ok)}
.norm-no{background:var(--warn-bg);color:var(--warn)}

/* ---------- 流程 ---------- */
.flow-steps{display:flex;align-items:stretch;gap:0;flex-wrap:wrap}
.fstep{
  flex:1;min-width:132px;padding:11px 12px;border:1px solid var(--line);background:#fff;position:relative;
  border-right:none;
}
.fstep:first-child{border-radius:8px 0 0 8px}
.fstep:last-child{border-right:1px solid var(--line);border-radius:0 8px 8px 0}
.fstep.done{background:#f0fdf4;border-color:#bbf7d0}
.fstep.cur{background:var(--blue-50);border-color:var(--blue-300);box-shadow:inset 0 -2px 0 var(--blue-600)}
.fs-top{display:flex;align-items:center;gap:7px;margin-bottom:3px}
.fs-no{width:19px;height:19px;border-radius:50%;background:var(--line-soft);color:var(--ink-500);font-size:11px;
  display:flex;align-items:center;justify-content:center;font-weight:700;flex:none}
.fstep.done .fs-no{background:var(--ok);color:#fff}
.fstep.cur .fs-no{background:var(--blue-600);color:#fff}
.fs-name{font-size:12.5px;font-weight:600;color:var(--ink-700)}
.fstep.done .fs-name{color:var(--ok)}
.fstep.cur .fs-name{color:var(--blue-700)}
.fs-meta{font-size:11px;color:var(--ink-400);padding-left:26px}

.progress-wide{height:8px;background:var(--line-soft);border-radius:4px;overflow:hidden}
.progress-wide > i{display:block;height:100%;background:linear-gradient(90deg,var(--blue-500),var(--blue-700));border-radius:4px;transition:.3s}

/* ---------- 评分表单 ---------- */
.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px}
.fld{display:flex;flex-direction:column;gap:4px}
.fld label{font-size:11.5px;color:var(--ink-500);font-weight:500}
.fld input,.fld select,.fld textarea{
  border:1px solid var(--line);border-radius:6px;padding:6px 9px;font-size:12.5px;font-family:inherit;
  outline:none;background:#fff;color:var(--ink-900);width:100%;
}
.fld textarea{resize:vertical;min-height:58px;line-height:1.6}
.fld input:focus,.fld select:focus,.fld textarea:focus{border-color:var(--blue-500);box-shadow:0 0 0 3px var(--blue-50)}
.fld input:disabled{background:#f8fafc;color:var(--ink-400)}
.fld .hint{font-size:10.5px;color:var(--ink-400)}

table.score-tbl{width:100%;border-collapse:collapse;font-size:12.5px}
table.score-tbl th{background:#f2f7fd;color:var(--blue-900);font-weight:600;padding:8px 9px;border:1px solid var(--line);font-size:11.5px;text-align:center}
table.score-tbl td{padding:7px 9px;border:1px solid var(--line-soft);color:var(--ink-700);vertical-align:middle}
table.score-tbl td.wrap{white-space:normal;min-width:180px;line-height:1.55}
table.score-tbl td.std{font-size:11px;color:var(--ink-500);white-space:normal;min-width:230px;line-height:1.5}
table.score-tbl .dimcell{background:#f8fbff;font-weight:600;color:var(--blue-800);text-align:center;width:78px}
table.score-tbl input.sc{
  width:56px;height:28px;text-align:center;border:1px solid var(--line);border-radius:5px;font-size:12.5px;
  font-family:"Consolas",monospace;outline:none;
}
table.score-tbl input.sc:focus{border-color:var(--blue-500);box-shadow:0 0 0 3px var(--blue-50)}
table.score-tbl input.sc:disabled{background:#f8fafc;color:var(--ink-400)}
table.score-tbl select.sc{width:100%;min-width:104px;height:28px;border:1px solid var(--line);border-radius:5px;font-size:12px;font-family:inherit;outline:none;background:#fff}
table.score-tbl .calc{text-align:right;font-family:"Consolas",monospace;font-weight:600;color:var(--blue-700)}
table.score-tbl tr.total-row td{background:#eff6ff;font-weight:700;color:var(--blue-900)}

.summary-strip{display:grid;grid-template-columns:repeat(auto-fit,minmax(126px,1fr));gap:1px;background:var(--line);border:1px solid var(--line);border-radius:8px;overflow:hidden}
.ss-item{background:#fff;padding:10px 12px}
.ss-item.hl{background:var(--blue-50)}
.ss-lbl{font-size:11px;color:var(--ink-500);margin-bottom:3px}
.ss-val{font-size:17px;font-weight:700;color:var(--blue-900);font-family:"Consolas",monospace}
.ss-val.money{color:var(--ok)}
.ss-val.neg{color:var(--bad)}
.ss-val small{font-size:11px;color:var(--ink-400);font-weight:500;font-family:inherit}

/* ---------- 抽屉 ---------- */
.drawer-mask{position:fixed;inset:0;background:rgba(15,42,82,.36);z-index:90;display:none}
.drawer-mask.show{display:block}
.drawer{
  position:fixed;top:0;right:-980px;width:min(980px,94vw);height:100vh;background:var(--bg);z-index:95;
  box-shadow:-6px 0 26px rgba(15,42,82,.2);transition:right .26s cubic-bezier(.4,0,.2,1);display:flex;flex-direction:column;
}
.drawer.show{right:0}
.drawer-head{
  padding:14px 20px;background:linear-gradient(100deg,var(--blue-900),var(--blue-700));color:#fff;
  display:flex;align-items:center;justify-content:space-between;flex:none;
}
.dh-title{font-size:16px;font-weight:600}
.dh-sub{font-size:11.5px;color:#c7dcf7;margin-top:2px}
.drawer-close{background:rgba(255,255,255,.16);border:none;color:#fff;width:29px;height:29px;border-radius:6px;font-size:19px;cursor:pointer;line-height:1}
.drawer-close:hover{background:rgba(255,255,255,.28)}
.drawer-body{flex:1;overflow-y:auto;padding:16px 20px 40px}

/* ---------- Toast ---------- */
.toast-wrap{position:fixed;top:78px;right:22px;z-index:200;display:flex;flex-direction:column;gap:9px}
.toast{
  background:#fff;border-left:3px solid var(--blue-600);border-radius:7px;padding:11px 15px;font-size:12.5px;
  box-shadow:var(--shadow-md);min-width:210px;max-width:400px;animation:tin .22s ease;color:var(--ink-700);
}
.toast.ok{border-left-color:var(--ok)}
.toast.err{border-left-color:var(--bad)}
.toast.warn{border-left-color:#d97706}
.toast b{display:block;color:var(--ink-900);margin-bottom:2px}
@keyframes tin{from{opacity:0;transform:translateX(22px)}to{opacity:1;transform:none}}

/* ---------- 空状态 ---------- */
.empty-state{text-align:center;padding:64px 20px;color:var(--ink-400)}
.empty-state svg{width:52px;height:52px;stroke:var(--blue-300);fill:none;stroke-width:1.4;margin-bottom:14px}
.empty-state h3{font-size:15.5px;color:var(--ink-700);margin-bottom:7px;font-weight:600}
.empty-state p{font-size:12.5px;max-width:470px;margin:0 auto 8px;line-height:1.85}
.empty-state .es-actions{margin-top:16px;display:flex;gap:9px;justify-content:center}

/* ---------- 标准页 ---------- */
.std-sec{margin-bottom:20px}
.std-sec h3{font-size:14px;color:var(--blue-800);margin-bottom:9px;padding-left:9px;border-left:3px solid var(--blue-600)}
.std-note{font-size:12.5px;color:var(--ink-700);line-height:1.9;background:#fbfdff;border:1px solid var(--line-soft);border-radius:8px;padding:12px 15px}
.std-note code{background:var(--blue-50);color:var(--blue-800);padding:1px 6px;border-radius:4px;font-family:"Consolas",monospace;font-size:12px}
.kv-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(215px,1fr));gap:9px}
.kv{background:#fff;border:1px solid var(--line);border-radius:8px;padding:10px 13px}
.kv .k{font-size:11.5px;color:var(--ink-500)}
.kv .v{font-size:13.5px;color:var(--blue-900);font-weight:600;margin-top:2px}

/* 滚动条 */
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:#c7d4e3;border-radius:5px;border:2px solid transparent;background-clip:padding-box}
::-webkit-scrollbar-thumb:hover{background:#a8bacd;background-clip:padding-box}

@media(max-width:900px){
  .topbar-left,.topbar-right{flex:0 0 auto}
  .brand-txt,.app-sub{display:none}
  .sidebar{width:58px}
  .nav-item span,.nav-group-title,.sidebar-foot,.nav-item em{display:none}
  .nav-item{justify-content:center}
  .content{padding:14px}
}

/* ================= 登录 / 强制改密屏 ================= */
/* 未登录时隐藏主布局，仅显示登录遮罩 */
body.logged-out .topbar,
body.logged-out .actionbar,
body.logged-out .layout,
body.logged-out .drawer-mask,
body.logged-out .drawer{display:none !important}

.login-screen{
  display:none;position:fixed;inset:0;z-index:999;
  background:linear-gradient(135deg,var(--blue-900) 0%,var(--blue-700) 50%,var(--blue-600) 100%);
  align-items:center;justify-content:center;padding:20px;
}
.login-card{
  width:384px;max-width:100%;background:#fff;border-radius:16px;padding:34px 34px 28px;
  box-shadow:0 24px 60px rgba(8,28,58,.42);text-align:center;
}
.login-logo{
  width:64px;height:64px;margin:0 auto 14px;border-radius:16px;
  background:linear-gradient(135deg,var(--blue-600),var(--blue-800));color:#fff;
  display:flex;align-items:center;justify-content:center;box-shadow:0 8px 20px rgba(31,102,193,.4);
}
.login-logo svg{stroke:#fff}
.login-title{font-size:21px;font-weight:700;color:var(--blue-900);letter-spacing:1px}
.login-sub{font-size:12px;color:var(--ink-500);margin:6px 0 22px;line-height:1.6}
.login-form{display:flex;flex-direction:column;text-align:left;gap:7px}
.login-form label{font-size:12px;color:var(--ink-700);font-weight:500;margin-top:4px}
.login-form input{
  height:40px;border:1px solid var(--line);border-radius:8px;padding:0 12px;font-size:13.5px;
  font-family:inherit;outline:none;background:#fff;color:var(--ink-900);transition:.15s;
}
.login-form input:focus{border-color:var(--blue-500);box-shadow:0 0 0 3px var(--blue-50)}
.login-err{color:var(--bad);font-size:12px;min-height:16px;margin-top:2px;text-align:center}
.login-btn{
  height:42px;margin-top:14px;border:none;border-radius:8px;background:var(--blue-600);color:#fff;
  font-size:15px;font-weight:600;letter-spacing:3px;cursor:pointer;font-family:inherit;transition:.15s;
}
.login-btn:hover{background:var(--blue-700)}
.login-btn:active{transform:translateY(1px)}
.login-tip{margin-top:16px;font-size:11.5px;color:var(--ink-400);line-height:1.6}
.login-tip b{color:var(--blue-700)}

/* ================= 登录态用户栏 ================= */
.user-bar{
  display:flex;align-items:center;gap:10px;background:rgba(255,255,255,.14);
  padding:5px 6px 5px 12px;border-radius:9px;border:1px solid rgba(255,255,255,.18);
}
.ub-info{display:flex;flex-direction:column;line-height:1.25;text-align:right}
.ub-name{font-size:13px;font-weight:600;color:#fff}
.ub-role{font-size:10.5px;color:#c7dcf7}
.ub-btn{
  height:28px;padding:0 11px;border:none;border-radius:6px;background:rgba(255,255,255,.22);
  color:#fff;font-size:12px;cursor:pointer;font-family:inherit;transition:.15s;white-space:nowrap;
}
.ub-btn:hover{background:rgba(255,255,255,.34)}
.ub-logout{background:rgba(255,255,255,.12)}
.ub-logout:hover{background:rgba(254,202,202,.32);color:#fff}
.ub-sync{display:inline-flex;align-items:center;height:22px;padding:0 9px;border-radius:11px;font-size:10.5px;font-weight:600;white-space:nowrap}
.ub-sync.on{background:rgba(134,239,172,.22);color:#bbf7d0}
.ub-sync.on::before{content:"";width:6px;height:6px;border-radius:50%;background:#4ade80;margin-right:5px}
.ub-sync.local{background:rgba(255,255,255,.16);color:#dbeafe}

/* ================= 角色标签 ================= */
.role-tg{display:inline-block;padding:2px 9px;border-radius:11px;font-size:11px;font-weight:600;margin:1px 3px 1px 0;line-height:1.7;white-space:nowrap}
.r-super{background:#fde8f3;color:#be185d}
.r-employee{background:var(--line-soft);color:var(--ink-500)}
.r-deptHead{background:var(--info-bg);color:var(--info)}
.r-gmHead{background:#e0f2fe;color:#0369a1}
.r-reviewer{background:var(--warn-bg);color:var(--warn)}
.r-ceo{background:#fef3c7;color:#92400e}

/* ================= 复选标签 ================= */
.chk{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--ink-700);cursor:pointer}
.chk input{width:15px;height:15px;accent-color:var(--blue-600);cursor:pointer;flex:none}
