/* ★ hidden 属性必须真正隐藏 —— 否则会被下面的 display:flex 覆盖 */
[hidden]{display:none !important}

:root{
  --bg:#f5f6f8; --card:#fff; --line:#e8eaef; --fg:#1c1f24; --sub:#6b7280;
  --blue:#1f6feb; --green:#12855a; --red:#c9362b; --amber:#b7791f;
  --w0:96px;
  /* ★ 2026-10-17 UI 统一：卡片阴影只留两级，圆角只留三档。
     原来 0 1px 3px 和 0 1px 2px 混用、圆角 10/12/14 混用，整套界面看起来"差一点点"。 */
  --sh1:0 1px 2px rgba(16,24,40,.04),0 1px 3px rgba(16,24,40,.06);
  --sh2:0 4px 16px rgba(16,24,40,.10);
  --r1:8px; --r2:12px; --r3:16px;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
/* ★ 数字等宽：表格与卡片里的金额/比例逐位对齐，扫视时不用来回找小数点 */
body{margin:0;background:var(--bg);color:var(--fg);
  font:14px/1.5 -apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;
  font-variant-numeric:tabular-nums;-webkit-font-smoothing:antialiased}
h1{font-size:17px;margin:0;font-weight:600}
h2{font-size:15px;margin:0 0 10px;font-weight:600}
h3{font-size:15px;margin:0 0 12px}

.hero{background:linear-gradient(135deg,#1f6feb,#2b8cf0);color:#fff;padding:14px 16px 16px;
  border-radius:0 0 16px 16px}
.hero-top{display:flex;align-items:center;justify-content:space-between}
.hero-sub{font-size:12px;opacity:.9;margin-top:6px;line-height:1.4}
.ghost{background:rgba(255,255,255,.18);color:#fff;border:0;border-radius:8px;
  padding:5px 10px;font-size:13px}
/* ★ hero 上三个图标按钮必须一样大：👥（骑手管理）是 emoji，字形盒比 ↻ / ⚙ 矮，
   没有固定高度时实测 👥=25px、↻/⚙=28px —— 用户 2026-10-16 截图反馈
   「骑手那个按钮高度不一致」。给 hero 内的 ghost 固定最小尺寸 + flex 居中，
   三个按钮就都是 36×28 了。只作用于 .hero，弹窗里的 ghost 不受影响。 */
.hero .ghost{min-height:28px;min-width:36px;display:inline-flex;
  align-items:center;justify-content:center;line-height:1}
.modal .ghost{background:#eef0f4;color:#333}

.tabs{display:flex;gap:6px;padding:12px 16px 0}
.tabs button{flex:1;padding:9px 0;border:0;border-radius:10px;background:#fff;color:var(--sub);
  font-size:14px;font-weight:500;box-shadow:0 1px 2px rgba(0,0,0,.04)}
.tabs button.on{background:var(--blue);color:#fff}

.rangebar{padding:10px 16px 0}
.quick{display:flex;gap:6px;flex-wrap:wrap}
.quick button{padding:7px 12px;border:1px solid var(--line);background:#fff;border-radius:999px;
  font-size:13px;color:var(--sub)}
.quick button.on{background:#e8f1ff;border-color:#bcd8ff;color:var(--blue);font-weight:600}
.dates{display:flex;align-items:center;gap:8px;margin-top:8px}
.dates input{flex:1;padding:8px;border:1px solid var(--line);border-radius:8px;font-size:13px;
  background:#fff;min-width:0}
.to{color:var(--sub)}
.primary{background:var(--blue);color:#fff;border:0;border-radius:8px;padding:8px 14px;font-size:13px}
.rangetext{font-size:12px;color:var(--sub);margin-top:8px}

main{padding:12px 16px 40px}
/* 卡片栅格：固定 2 列（用户 2026-10-07 要求恢复原排版，不要改）。 */
.cards{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
/* 当前对象提示条：占满整行，不跟卡片抢格子 */
.cardScope{grid-column:1/-1;font-size:12px;color:var(--sub);
  background:var(--card);border-radius:var(--r2);padding:9px 12px;box-shadow:var(--sh1)}
.cardScope b{color:var(--fg);font-weight:650}
.card{background:var(--card);border-radius:var(--r2);padding:12px;box-shadow:var(--sh1)}
.card .k{font-size:12px;color:var(--sub)}
.card .v{font-size:22px;font-weight:650;margin-top:4px;letter-spacing:-.3px}
.card .u{font-size:12px;font-weight:400;color:var(--sub);margin-left:2px}
.card .d{font-size:11px;color:var(--sub);margin-top:4px;line-height:1.55}
/* ★ 环比昨日：给静态数字一个上下文。good/bad 由 JS 按指标语义判定
   （准时率涨=好，不满意率/复合时长涨=坏），不在这里用红绿一刀切。 */
.card .mom{font-size:11px;margin-top:3px;font-weight:600}
.card .mom.good{color:#2e7d32}
.card .mom.bad{color:#c62828}
.card.wide{grid-column:span 2}
.g{color:var(--green)}.r{color:var(--red)}.a{color:var(--amber)}

.panel{background:var(--card);border-radius:var(--r2);padding:14px;margin-top:12px;
  box-shadow:var(--sh1)}
.hint{font-size:11px;color:var(--sub);font-weight:400}

.period{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px}
.pchip{background:#f2f5fa;border-radius:10px;padding:8px 10px;min-width:74px}
.pchip .k{font-size:11px;color:var(--sub)}
.pchip .v{font-size:18px;font-weight:650}
.pchip.big{background:#e8f1ff}
.pchip.big .v{color:var(--blue)}

.daily-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;
  /* ★ 横滑提示（2026-10-17）：左右两侧的渐隐阴影只在「还能往那边滑」时出现
     —— 用 background-attachment:local 的遮罩随内容移动，到头就被遮住。
     没有这个提示，用户根本不知道表格右边还有列。 */
  background-image:
    linear-gradient(to right,#fff 30%,rgba(255,255,255,0)),
    linear-gradient(to left,#fff 30%,rgba(255,255,255,0)),
    linear-gradient(to right,rgba(16,24,40,.13),rgba(16,24,40,0)),
    linear-gradient(to left,rgba(16,24,40,.13),rgba(16,24,40,0));
  background-position:left center,right center,left center,right center;
  background-repeat:no-repeat;
  background-size:28px 100%,28px 100%,12px 100%,12px 100%;
  background-attachment:local,local,scroll,scroll}
table{border-collapse:separate;border-spacing:0;font-size:12px;min-width:100%}
th,td{padding:7px 8px;border-bottom:1px solid var(--line);text-align:right;white-space:nowrap}
th:first-child,td:first-child{text-align:left;position:sticky;left:0;background:#fff;z-index:1;
  min-width:var(--w0)}
thead th{color:var(--sub);font-weight:500;background:#fafbfc;position:sticky;top:0}
thead th:first-child{background:#fafbfc;z-index:2}
td.sc{font-size:11px;color:var(--sub)}
.badge{display:inline-block;padding:1px 5px;border-radius:4px;font-size:10px;background:#eef1f6;color:#555}

.list{display:flex;flex-direction:column;gap:6px}

/* ★ 紧凑行 + 展开详情（master-detail）
   原来每行铺开 4 个指标 + 19px 大字号单量，4 个站点就占满一屏。
   现在默认两行（名称+单量 / 关键率），点开才显示完整分子分母网格。
   高度实测：收起 ~58px，展开 ~250px，4 个站点一屏能看到 6~7 个。 */
.item{padding:7px 9px;border-radius:9px;background:#fafbfc;cursor:pointer;
  border:1px solid transparent;transition:background .12s,border-color .12s}
.item .row1{display:flex;align-items:baseline;gap:8px}
/* ★ 名字+站点允许换行（站点名要完整显示，用户 2026-10-06）。
   原来 b 是 nowrap + ellipsis、整行是 flex nowrap，站点一长就挤掉名字。
   现在整行 flex-wrap，站点可换行；名字只在极端窄屏时才省略。 */
.item .row1 .nm{flex:1;min-width:0;font-size:12.5px;display:flex;
  align-items:baseline;gap:6px;flex-wrap:wrap}
/* 名称过长时截断（完整名在 title 里） */
.item .row1 .nm b{font-weight:600;min-width:0;white-space:nowrap}
.item .row1 .tag{font-size:10.5px;color:var(--sub);white-space:nowrap}
.item .row1 .sc{font-size:15px;font-weight:700;color:var(--blue);white-space:nowrap}

/* 第二行：4 个关键率。
   ★ 极窄屏（320px，容器仅 300px）放不下 4 项共 281px + 间隙 → 用横向滚动
     而不是换行：换行会让每行从 57px 涨到 89px，4 个站点就滚半天。
     flex-wrap 保持 nowrap，靠 overflow-x:auto 处理溢出。 */
.item .row2{display:flex;flex-wrap:wrap;gap:4px 8px;margin-top:2px;
  font-size:10.5px;color:var(--sub);justify-content:space-between;
  overflow-x:auto;-webkit-overflow-scrolling:touch;
  scrollbar-width:none}
.item .row2::-webkit-scrollbar{display:none}
.item .row2 span{white-space:nowrap;flex:0 1 auto}
.item .row2 b{color:var(--fg);font-weight:600;font-size:11.5px}

/* 骑手行：站点与名字并排显示（站点次要，用小字灰色） */
/* ★ 站点名【完整显示】（用户 2026-10-06）：原来 max-width:9em + ellipsis
   把「福州晋安区福新中路站-UB」截成「福州晋安区福新…」，而横向空间本来就有富余。
   现在不限宽、允许换行；名字与站点整体允许折行，不撑破单量那一列。 */
.item .nm .site{display:inline-block;margin-left:6px;padding:1px 5px;
  font-size:10px;font-weight:500;color:var(--sub);background:var(--bg);
  border:1px solid var(--line);border-radius:4px;vertical-align:middle;
  white-space:normal;overflow-wrap:anywhere}
.item .nm .site .multi{font-style:normal;color:#b45309;margin-left:3px;font-weight:700}

/* ★ 六格（2×3）：指标从 4 个增到 6 个（加人效/出勤/妥投/准时/单均复合/不满意）。
   桌面 3 列×2 行，手机 2 列×3 行。
   —— 原来 row2 是 nowrap + overflow-x:auto，6 个指标会撑出一屏横向滚动条，
      右侧指标要滑才能看到，违反「不遮挡」的要求，所以这里改回 grid。 */
.item .row2.g6{display:grid;grid-template-columns:repeat(3,1fr);
  gap:3px 10px;overflow-x:visible}
.item .row2.g6 span{white-space:normal;display:flex;align-items:baseline;
  gap:3px;min-width:0;overflow-wrap:anywhere}

/* 展开区：默认收起 */
.item .row3{display:none;margin-top:6px;padding-top:6px;border-top:1px dashed var(--line)}
.item .more{display:none}
.item.open{background:#fff;border-color:var(--blue);box-shadow:0 1px 4px rgba(31,111,235,.12)}
.item.open .row3{display:block}
/* 核心指标：两列 */
/* ★ 明细区统一用 grid。原来 .deep 用 column-count 多栏、里面 .deepGrid 又是
   2 列 grid —— 两套列布局嵌套，排版必然错乱。现在只有一套 grid。 */
.item.open .row3 .deep{display:block}
.item.open .row3 .kv{display:flex;justify-content:space-between;gap:6px;
  font-size:10.5px;color:var(--sub);padding:1.5px 0;
  background:#fff;border-radius:5px;padding:3px 6px}
.item.open .row3 .deepGrid{display:grid;gap:0 10px;margin-top:4px;
  padding-top:4px;border-top:1px dashed var(--line)}
.item.open .row3 .deepGrid:first-of-type{border-top:0;margin-top:0;padding-top:0}
.item.open .row3 .kv b{color:var(--fg);font-weight:600;white-space:nowrap}
.item.open .row3 .deep summary{display:block;cursor:pointer;
  font-size:10.5px;color:var(--blue);margin-bottom:4px;list-style:none}
.item.open .row3 .deep summary::-webkit-details-marker{display:none}
/* 本月（考核定稿）单独一组，红色区分 —— 与「所选日期」的实时数据不同源 */
.item.open .row3 .kv.red{background:#fff5f5}
.item.open .row3 .kv.red span{color:#b03030}
.item.open .row3 .kv.red b{color:#c62828}
.item.open .row3 .kv.score{background:#f2f7ff}
.item.open .row3 .kv.score b{color:var(--blue);font-weight:700}
.item.open .row3 .kv.score.red{background:#fff5f5}
.item.open .row3 .kv.score.red b{color:#c62828}
/* 列数随宽度自适应：小屏 2 列，大屏 4 列 */
.item.open .row3 .deepGrid{grid-template-columns:repeat(2,1fr)}
@media (max-width:340px){ .item.open .row3 .deepGrid{grid-template-columns:1fr} }
@media (min-width:760px){ .item.open .row3 .deepGrid{grid-template-columns:repeat(3,1fr)} }
@media (min-width:1100px){ .item.open .row3 .deepGrid{grid-template-columns:repeat(4,1fr)} }

/* 旧选中态（点击高亮）保留 */
.item.on{background:#fff}
/* ★ 选中行：整行标色（左侧色条 + 淡蓝底），列表保持全量以便横向对比，
   不再做成「点进去只剩一行 + 点返回」那种绕路交互。 */
.item.on{box-shadow:inset 3px 0 0 var(--blue);background:#f2f7ff}
.item.on .nm b{color:var(--blue)}

/* ★ 明细下方的「该对象考核得分」块 */
.objscore{margin-top:12px;padding-top:12px;border-top:2px solid var(--line)}
.os-head{display:flex;align-items:center;justify-content:space-between;gap:10px;
  margin-bottom:10px;flex-wrap:wrap}
.os-nm{font-size:14px;font-weight:650}
.os-nm .badge{font-size:10px;font-weight:400;color:var(--sub);margin-left:4px}
.os-tot{display:flex;align-items:baseline;gap:6px}
.os-tot .k{font-size:11px;color:var(--sub)}
.os-tot b{font-size:22px;font-weight:700}
.os-sec{font-size:11px;color:var(--sub);margin:10px 0 5px;font-weight:600}
/* 分层可信度提示：T0 估算 / 缺分层 */
.os-warn{font-size:10.5px;color:#8a6d1f;background:#fff8e6;border:1px solid #f3e2b0;
  border-radius:7px;padding:5px 8px;margin:0 0 8px;line-height:1.45}
.os-warn.err{color:#9c2a20;background:#fdf0ee;border-color:#f3ccc6}
.os-none{font-size:11px;color:var(--sub);padding:4px 0}
.os-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:6px}
.os-cell{background:#fafbfc;border-radius:8px;padding:7px 9px}
.os-cell .k{font-size:10.5px;color:var(--sub)}
.os-cell .r2{display:flex;align-items:baseline;justify-content:space-between;gap:6px;margin-top:2px}
.os-cell .val{font-size:14px;font-weight:650}
.os-cell .sc{font-size:12px;font-weight:650}
@media (min-width:760px){ .os-grid{grid-template-columns:repeat(4,1fr)} }

.modal{position:fixed;inset:0;background:rgba(0,0,0,.4);display:flex;align-items:flex-start;
  justify-content:center;padding:16px;z-index:99;overflow-y:auto;-webkit-overflow-scrolling:touch}
.modal-card{background:#fff;border-radius:14px;padding:18px;width:100%;max-width:380px;
  margin:auto;max-height:calc(100vh - 32px);overflow-y:auto;-webkit-overflow-scrolling:touch;
  overscroll-behavior:contain}
.modal-card label{display:block;font-size:12px;color:var(--sub);margin-bottom:10px}
.modal-card input{width:100%;margin-top:4px;padding:9px;border:1px solid var(--line);
  border-radius:8px;font-size:13px}
.modal-card .row{display:flex;gap:8px;margin-top:6px}
.empty{color:var(--sub);font-size:13px;padding:22px 12px;text-align:center;line-height:1.7}
.loading{color:var(--sub);font-size:13px;padding:14px 0;text-align:center}

/* ── 骨架屏（2026-10-17）：首屏等接口时先占位，避免"加载中…"→内容 的布局跳动 ── */
.sk{background:linear-gradient(90deg,#eceff3 25%,#f5f7fa 37%,#eceff3 63%);
  background-size:400% 100%;animation:skmove 1.3s ease infinite;border-radius:6px}
@keyframes skmove{0%{background-position:100% 50%}100%{background-position:0 50%}}
.sk-card{background:var(--card);border-radius:var(--r2);padding:12px;box-shadow:var(--sh1)}
.sk-card .sk{margin-bottom:7px}
.sk-k{height:11px;width:52%}
.sk-v{height:22px;width:64%}
.sk-d{height:10px;width:86%;margin-bottom:0!important}
@media (prefers-reduced-motion:reduce){.sk{animation:none}}

.notice{background:#fff8e6;border:1px solid #ffe2a8;color:#7a5b12;border-radius:10px;
  padding:10px 12px;font-size:13px;margin-bottom:12px;display:flex;align-items:center;
  gap:8px;flex-wrap:wrap}
.notice .primary{padding:5px 10px;font-size:12px}

/* ── 账号条 ─────────────────────────────────────────── */
.acctbar{display:flex;align-items:center;gap:8px;margin-top:10px}
.acctbar select{flex:1;min-width:0;background:rgba(255,255,255,.16);color:#fff;border:0;
  border-radius:9px;padding:7px 10px;font-size:13px;appearance:none}
.acctbar select option{color:#222}
.acct-state{font-size:12px;opacity:.92;white-space:nowrap}
.hero-state{font-size:11px;opacity:.8;margin-top:5px}

/* ── 设置里的账号列表 ───────────────────────────────── */
.sec-title{font-size:12px;font-weight:600;color:#333;margin:16px 0 8px;
  padding-top:12px;border-top:1px solid var(--line)}
.sec-title:first-of-type{margin-top:8px;padding-top:0;border-top:0}
.acct-list{display:flex;flex-direction:column;gap:7px}
.acct-row{display:flex;align-items:center;gap:6px;padding:8px 10px;border-radius:9px;background:#f7f8fa}
.acct-row.on{background:#e8f1ff}
.acct-row .nm{flex:1;min-width:0;font-size:12.5px}
.acct-row .nm b{font-size:13px}
.acct-row .nm .sub{font-size:11px;color:var(--sub);margin-top:2px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mini{padding:4px 8px;font-size:11px;border:1px solid var(--line);background:#fff;
  border-radius:7px;color:#444;white-space:nowrap}
.mini.danger{color:var(--red);border-color:#f3c9c5}
.modal-card label .sub,.modal-card .sub{display:block;font-size:11px;color:var(--sub);
  margin-top:3px;line-height:1.4}
.modal-card textarea{width:100%;margin-top:4px;padding:8px;border:1px solid var(--line);
  border-radius:8px;font-size:12px;font-family:inherit;resize:vertical}
.cap-wrap{text-align:center;margin:6px 0 12px}
.cap-wrap img{max-width:100%;border-radius:8px;border:1px solid var(--line);background:#fff}
.adv{margin-top:14px}
.adv summary{font-size:12px;color:var(--sub);cursor:pointer;padding:6px 0}
.adv label{margin-top:8px}
.empty{padding:10px 0}

/* ── 登录页 ─────────────────────────────────────────── */
.login-view{min-height:100vh;display:flex;align-items:center;justify-content:center;
  padding:24px;background:linear-gradient(160deg,#1f6feb,#0d47a1)}
.login-card{width:100%;max-width:360px;background:#fff;border-radius:16px;padding:24px 22px;
  box-shadow:0 12px 40px rgba(0,0,0,.25)}
.login-card h1{font-size:19px;margin:0 0 4px;text-align:center}
.login-tip{font-size:12.5px;color:#b7791f;background:#fff8e6;border:1px solid #ffe2a8;
  border-radius:9px;padding:8px 10px;margin:10px 0 4px;text-align:center}
.login-card label{display:block;font-size:12px;color:var(--sub);margin:12px 0 0}
.login-card input{width:100%;margin-top:5px;padding:11px;border:1px solid var(--line);
  border-radius:10px;font-size:15px}
.primary.block{width:100%;margin-top:18px;padding:12px;font-size:15px;border-radius:10px}
.login-msg{font-size:12.5px;color:var(--red);margin-top:10px;min-height:16px;text-align:center}
.login-foot{display:flex;justify-content:space-between;align-items:center;margin-top:14px;
  font-size:11px;color:var(--sub)}
.linkbtn{background:none;border:0;color:var(--blue);font-size:11px;padding:0}

.card-head{display:flex;align-items:center;justify-content:space-between;
  position:sticky;top:-18px;background:#fff;padding:4px 0 10px;margin:-4px 0 0;z-index:2}
.card-head h3{margin:0}

/* ── 得分板 ─────────────────────────────────────────── */
.sb-list{display:flex;flex-direction:column;gap:12px}
.sb-card{background:#f7f9fc;border-radius:12px;padding:12px 14px;border:1px solid #eaeef5}
.sb-card.on{border-color:#c3dbff;background:#f2f7ff}
.sb-name{font-size:14px;font-weight:650;margin-bottom:8px}
.sb-name .badge{font-size:10px;font-weight:400;background:#eef1f6;color:#666;
  border-radius:4px;padding:1px 5px;margin-left:4px;vertical-align:middle}
.sb-head{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:10px}
.sb-h{background:#fff;border-radius:10px;padding:9px 11px;border:1px solid #eef1f6}
.sb-h .k{font-size:11px;color:var(--sub)}
.sb-h .v{font-size:26px;font-weight:700;color:var(--blue);line-height:1.15}
.sb-h .k2{font-size:10.5px;color:var(--sub);margin-top:2px}
.sb-sec{font-size:11px;color:var(--sub);margin:8px 0 5px;padding-top:6px;border-top:1px dashed #e3e8f0}
.sb-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.sb-cell{background:#fff;border:1px solid #eef1f6;border-radius:9px;padding:7px 9px}
.sb-cell .k{font-size:11px;color:var(--sub)}
.sb-cell .row2{display:flex;align-items:baseline;justify-content:space-between;margin-top:2px}
.sb-cell .val{font-size:13.5px;font-weight:600}
.sb-cell .sc{font-size:15px;font-weight:700;color:var(--blue)}
.sb-cell .sc.g{color:var(--green)} .sb-cell .sc.r{color:var(--red)}
.sb-none{font-size:12px;color:var(--sub);padding:4px 0}
.chart-title{font-size:12px;color:var(--sub);margin:14px 0 6px}
.chart-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
.legend{display:flex;gap:10px;flex-wrap:wrap;font-size:11px;color:var(--sub);margin-top:6px}
.legend i{display:inline-block;width:14px;height:3px;border-radius:2px;margin-right:4px;vertical-align:middle}
.chk{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--sub);margin-left:6px}
.chk input{width:auto;margin:0}

.wtag{font-size:9.5px;font-weight:400;background:#fff4e5;color:#b7791f;
  border:1px solid #ffe0b2;border-radius:4px;padding:0 4px;margin-left:3px;vertical-align:middle}

/* ═══ 今日数据同步进度条 ═══ */
.syncbar{margin:10px 12px 0;padding:10px 12px;background:var(--card);border:1px solid var(--line);
  border-radius:12px;box-shadow:0 1px 2px rgba(16,24,40,.04)}
.syncbar.on{border-color:#bcd7ff;background:linear-gradient(180deg,#f7fbff,#fff)}
.sb-top{display:flex;align-items:center;gap:7px}
.sb-dot{width:7px;height:7px;border-radius:50%;background:var(--sub);flex:none}
.syncbar.on .sb-dot{background:var(--blue);animation:sbpulse 1.1s ease-in-out infinite}
@keyframes sbpulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.7)}}
.sb-stage{font-size:12.5px;font-weight:600;flex:1;min-width:0;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.sb-pct{font-size:12.5px;font-weight:700;color:var(--blue);font-variant-numeric:tabular-nums}
.sb-track{height:5px;background:#eef1f6;border-radius:3px;margin:7px 0 6px;overflow:hidden}
.sb-fill{height:100%;width:0;background:linear-gradient(90deg,#2b8cf0,#1f6feb);
  border-radius:3px;transition:width .35s ease}
.syncbar.done .sb-fill{background:linear-gradient(90deg,#16a34a,#12855a)}
.sb-foot{display:flex;align-items:center;gap:8px}
.sb-meta{font-size:10.5px;color:var(--sub);line-height:1.5;flex:1;min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sb-btn{flex:none;font-size:10.5px;padding:2px 8px;border-radius:6px;border:1px solid var(--line);
  background:#fff;color:var(--sub);cursor:pointer}
.sb-btn:active{background:#f2f4f8}
.syncbar.err{border-color:#f5c6c0;background:#fff8f7}
.syncbar.err .sb-pct{color:var(--red)}


/* ═══ 异常明细标签 + 弹窗 ═══ */
.abn-wrap{margin-top:12px;border-top:1px dashed var(--line);padding-top:10px}
.abn-title{font-size:11.5px;font-weight:600;color:var(--sub);margin-bottom:7px}
.abn-title .hint{font-weight:400}
.abnbar{display:flex;flex-wrap:wrap;gap:6px}
.abnchip{font-size:11px;padding:4px 9px;border-radius:14px;border:1px solid var(--line);
  background:#fff;color:var(--text);cursor:pointer;line-height:1.5}
.abnchip b{font-variant-numeric:tabular-nums;color:var(--red);margin-left:2px}
.abnchip:active{background:#f2f4f8}
.abnchip.zero{color:#c2c8d2;cursor:default;background:#fafbfc}
.abnchip.zero b{color:#c2c8d2}
.modal-card.wide{max-width:860px}
.mono{font-variant-numeric:tabular-nums;font-size:11px}
#abnTbl td,#abnTbl th{white-space:nowrap}
#abnTbl{min-width:640px}
[CONTEXT OFFLOADED] Content (~272 tokens, 664 bytes) saved to: /var/minis/offloads/tools/file_write_g90d4d36p5i2.txt/* ── 数据卡片：所选日期 / 全月 / 环比 三行合一 ──────────────────── */
.tris{display:grid;gap:6px;grid-template-columns:repeat(2,1fr);margin-top:6px}
.tri{background:#fafbfc;border-radius:7px;padding:6px 8px;min-width:0}
.tri.score{background:#eef4ff}
.tri .k{font-size:10.5px;color:var(--sub);white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis}
.tri .cur{font-size:15px;font-weight:650;color:var(--fg);margin-top:1px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tri.score .cur{font-size:17px;color:var(--blue);font-weight:700}
.tri .sub{display:flex;justify-content:space-between;gap:6px;font-size:10px;
  color:var(--sub);margin-top:2px;white-space:nowrap}
.tri .dl.up{color:#c0392b}
.tri .dl.dn{color:#1a8a4a}
@media (max-width:400px){ .tris{grid-template-columns:1fr} }
@media (min-width:900px){ .tris{grid-template-columns:repeat(4,1fr)} }

/* ── 今日实时罗盘：站点维度 ────────────────────────────────────────── */
#rt .rt-head{font-size:11px;color:var(--sub);padding:6px 2px 8px;
  display:flex;justify-content:space-between}
#rt .rt-row{border-top:1px solid var(--line);padding:7px 2px}
#rt .rt-nm{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
#rt .rt-nm b{font-size:12.5px}
#rt .rt-sub{font-size:10.5px;color:var(--sub);white-space:nowrap}
#rt .rt-cells{display:grid;gap:6px;grid-template-columns:repeat(4,1fr);margin-top:5px}
#rt .rt-cell{background:#fafbfc;border-radius:6px;padding:4px 7px}
#rt .rt-cell .k{font-size:10px;color:var(--sub)}
#rt .rt-cell .v{font-size:13.5px;font-weight:650;white-space:nowrap}
#rt .rt-d{font-size:9.5px;margin-left:4px}
/* ★ 2026-10-18：JS 产出的是 good/bad 类，CSS 里却只写了 up/dn ——
   差值的红绿颜色从来没生效过（一直继承正文色）。两套都留着，谁用都不出错。 */
#rt .rt-d.good,#rt .rt-d.dn{color:#1a8a4a}
#rt .rt-d.bad,#rt .rt-d.up{color:#c0392b}
/* 左右两个块必须等高：右边多一行差值，左边只有数值时会被压矮，看起来一高一低 */
#rt .rt-cell{display:flex;flex-direction:column;justify-content:center;min-height:46px}
@media (max-width:420px){ #rt .rt-cells{grid-template-columns:repeat(2,1fr)} }
/* ── 顶部「当前对象」卡片：所选日期 / 全月 / 环比 三行合一 ───────── */
.tcard{background:#fafbfc;border-radius:9px;padding:8px 10px;min-width:0}
.tcard.hi{background:#eef4ff}
.tcard .k{font-size:11px;color:var(--sub);white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis}
.tcard .v{font-size:19px;font-weight:680;color:var(--fg);margin-top:1px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.15}
.tcard.hi .v{font-size:22px;color:var(--blue);font-weight:700}
.tcard .cmp{display:flex;justify-content:space-between;gap:6px;font-size:10.5px;
  color:var(--sub);margin-top:3px;white-space:nowrap}
.tcard .dl.good{color:#1a8a4a}
.tcard .dl.bad{color:#c0392b}
.tcard .d{font-size:10px;color:var(--sub);margin-top:2px;line-height:1.35}

/* ── 今日实时罗盘：平台值 vs 本地计算值 核对 ───────────────────────── */
#rt .rt-note{font-size:11px;color:var(--sub);padding:6px 2px 8px;line-height:1.5}
#rt .rt-note b{color:var(--fg)}
#rt .rt-row{border-top:1px solid var(--line);padding:7px 2px;
  display:flex;justify-content:space-between;align-items:center;gap:10px}
#rt .rt-nm{min-width:0}
#rt .rt-nm b{font-size:12.5px;display:block}
#rt .rt-sub{font-size:10px;color:var(--sub)}
#rt .rt-cells{display:flex;gap:8px;flex-shrink:0}
#rt .rt-cell{background:#fafbfc;border-radius:6px;padding:4px 9px;min-width:86px;
  text-align:right}
#rt .rt-cell .k{font-size:9.5px;color:var(--sub)}
#rt .rt-cell .v{font-size:14px;font-weight:650;white-space:nowrap}
#rt .rt-d{font-size:10px;margin-left:5px}
#rt .rt-d.good{color:#1a8a4a}
#rt .rt-d.bad{color:#c0392b}
@media (max-width:420px){
  #rt .rt-row{flex-direction:column;align-items:stretch}
  #rt .rt-cells{gap:6px}
  #rt .rt-cell{flex:1;min-width:0}
}

/* ── 明细列表：排序 + 分位筛选工具条 ─────────────────────────────── */
.listbar{padding:2px 0 8px}
.listbar .lb-row{display:flex;flex-wrap:wrap;align-items:center;gap:5px;margin-bottom:5px}
.listbar .lb-lab{font-size:11px;color:var(--sub);margin-right:2px}
/* ★ 工具条一行内的控件高度必须一致（用户 2026-10-16 指出）。
   原来三种高度：.lb 按钮 21px / .lb-in 输入框 27px / .msel-btn 24px，
   同一行参差不齐。现在统一 min-height:26px，.lb-row 已经是 align-items:center，
   所以整行齐平。 */
.listbar .lb{font-size:11px;padding:3px 9px;border:1px solid var(--line);
  border-radius:12px;background:#fff;color:var(--sub);cursor:pointer;white-space:nowrap;
  min-height:26px;display:inline-flex;align-items:center}
.listbar .lb:hover{border-color:var(--blue);color:var(--blue)}
.listbar .lb.on{background:var(--blue);border-color:var(--blue);color:#fff;font-weight:600}
.listbar .lb-hint{font-size:10.5px;color:var(--sub);margin-left:4px}
/* 未出分人数：按得分排序时没分的骑手会沉到最后被分位筛掉，
   必须显式说出来，否则用户只觉得"人数对不上" */
.listbar .lb-noscore{font-style:normal;color:#b45309;background:#fef3c7;
  border:1px solid #fde68a;border-radius:4px;padding:0 4px;margin-left:2px}

/* ── 卡片点击 → 整月趋势图 ───────────────────────────────────────── */
.tcard{cursor:pointer}
.tcard:hover{box-shadow:0 1px 6px rgba(31,111,235,.14)}
#trendBox{padding:10px 12px}
.tr-head{display:flex;align-items:center;gap:8px;font-size:12px;margin-bottom:4px;
  flex-wrap:nowrap;overflow:hidden}
/* ★ 标题/副标题不许换行（用户 2026-10-07：加了按钮后标题折成两行） */
.tr-head>b{flex:0 0 auto;white-space:nowrap}
.tr-head .hint{flex:1 1 auto;min-width:0;white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis}
.tr-head .hint{font-size:10.5px}
.tr-close{margin-left:auto}
.trendsvg{max-width:100%;height:auto;display:block}
.trendsvg circle:hover{r:4.5}

/* 待办：需要人工处理的风神登录态失效 */
.tchip.auth{display:inline-flex;align-items:center;gap:6px;max-width:100%;
  white-space:normal;line-height:1.4;padding:3px 8px}
.tchip.auth .tfix{flex-shrink:0;padding:1px 8px;font-size:10.5px;
  border:1px solid #c9362b;color:#c9362b;background:#fff;border-radius:10px;cursor:pointer}
.tchip.auth .tfix:hover{background:#c9362b;color:#fff}

/* 没更新成功的日期提示 */
.pending{margin:6px 0 0;font-size:11.5px;line-height:1.5;color:#b06000;
  background:#fff8e6;border:1px solid #ffe2a8;border-radius:8px;padding:6px 9px}
.pending .hint{color:#a08a5a;margin-left:4px}

/* ── 实时运营罗盘（整商核对用）：放最底部，必须完全可见、不被遮挡 ──
   之前它排在待办上方，且页内其它 sticky 头部（.card-head z-index:2）
   滚动到时会浮在它上面，底部内容被盖住 —— 而它恰恰是用来核对数据的，
   看不到等于没有。给它独立层级 + 足够底部留白。 */
#rtPanel{margin-top:14px;position:relative;z-index:5}
#rtPanel .todo-head{position:sticky;top:0;z-index:6;background:var(--card);
  border-radius:10px 10px 0 0}
#rt .rt-note{background:#f7fbff;border:1px solid #d8e7ff;border-radius:7px;
  padding:6px 9px;margin:2px 0 8px}
#rt .rt-row{border-top:1px solid var(--line);padding:9px 2px}
#rt .rt-cell{min-width:96px}
@media (min-width:900px){
  #rt .rt-cells{display:grid;grid-template-columns:repeat(4,1fr)}
}

/* ── 正在拉取的任务（可取消）──────────────────────────────────────── */
.pulling{margin-top:8px;border:1px solid #ffe2a8;background:#fffaf0;
  border-radius:8px;padding:7px 9px}
.pl-head{font-size:11.5px;color:#8a6d3b;margin-bottom:5px}
.pl-row{display:flex;align-items:center;gap:8px;font-size:12px;
  padding:4px 0;border-top:1px solid #f5e4c0}
.pl-row:first-of-type{border-top:0}
.pl-d{font-weight:650;color:var(--fg);min-width:88px}
.pl-s{color:var(--sub);font-size:11px;flex:1;min-width:96px}
.pl-t{color:var(--sub);font-size:11px;white-space:nowrap}
.pl-x{font-size:11px;padding:2px 9px;border:1px solid #c9362b;color:#c9362b;
  background:#fff;border-radius:10px;cursor:pointer;white-space:nowrap}
.pl-x:hover:not(:disabled){background:#c9362b;color:#fff}
.pl-x:disabled{opacity:.5;cursor:default}

/* ── 明细行：手机端 4 个指标挤在一行会被裁掉首字（"人效"→"效"）──
   原来 row2 是 nowrap + flex:0 0 auto，放不下就直接溢出裁切。
   现在允许换行，并让每个标签占满一格（2×2 网格），文字永远完整。 */
@media (max-width:520px){
  .item .row2{display:grid;grid-template-columns:1fr 1fr;gap:3px 8px}
  /* ★ 手机端同样是【3 列 × 2 行】（用户口径 3*2）。
     之前误做成 2 列 3 行，虽然不截断，但行数多、每行只放 2 个指标，
     视觉上比 2×2 更松散，也和"3*2"的预期不符。 */
  .item .row2.g6{grid-template-columns:repeat(3,1fr);gap:3px 6px}
  .item .row2.g6 span{gap:2px;font-size:10px}
  .item .row2.g6 b{font-size:11px}
  .item .row2 span{white-space:normal;overflow-wrap:anywhere;
    display:flex;align-items:baseline;gap:3px;min-width:0}
  .item .row1{gap:6px}
  .item .row1 .sc{font-size:16px}
  .item .row1 .nm{font-size:13px;line-height:1.35}
}

/* 暂停按钮（与取消区分：暂停可恢复，取消是彻底停） */
.pl-p{font-size:11px;padding:2px 9px;border:1px solid var(--blue);color:var(--blue);
  background:#fff;border-radius:10px;cursor:pointer;white-space:nowrap}
.pl-p:hover:not(:disabled){background:var(--blue);color:#fff}
.pl-p:disabled{opacity:.5;cursor:default}
.pl-s{min-width:96px}


/* 自定义分位输入框 */
.lb-in{width:58px;padding:3px 5px;font-size:12px;min-height:26px;border:1px solid var(--line);
  border-radius:6px;background:#fff;color:var(--fg);text-align:center}
.lb-in:focus{outline:none;border-color:var(--blue)}
.lb-pct{font-size:11px;color:var(--sub);margin-left:2px}


/* 站点下拉多选 */
.msel{position:relative;display:inline-block;vertical-align:middle}
.msel-btn{display:inline-flex;align-items:center;gap:6px;padding:4px 9px;min-height:26px;
  font-size:12px;color:var(--fg);background:#fff;border:1px solid var(--line);
  border-radius:14px;cursor:pointer;max-width:15em}
.msel-btn span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.msel-ar{flex:0 0 auto;color:var(--sub);transition:transform .15s}
.msel.open .msel-ar{transform:rotate(180deg)}
.msel-pop{position:absolute;z-index:60;left:0;top:calc(100% + 4px);min-width:100%;
  max-width:16em;max-height:52vh;overflow-y:auto;padding:4px;
  background:#fff;border:1px solid var(--line);border-radius:8px;
  box-shadow:0 6px 20px rgba(0,0,0,.14)}
.msel-all,.msel-it{display:flex;align-items:center;gap:7px;padding:6px 8px;
  font-size:12.5px;border-radius:6px;cursor:pointer;white-space:nowrap}
.msel-all{font-weight:600;border-bottom:1px solid var(--line);border-radius:0;
  margin-bottom:2px;padding-bottom:7px}
.msel-all:hover,.msel-it:hover{background:var(--bg)}
.msel-it input,.msel-all input{width:15px;height:15px;flex:0 0 auto;
  accent-color:var(--blue);cursor:pointer}
.msel-it span{overflow:hidden;text-overflow:ellipsis}

/* 自定义分位输入（补 ✕ 按钮） */
.lb-inwrap{display:inline-flex;align-items:center;gap:3px}
.lb-x{padding:2px 6px;font-size:12px;line-height:1;color:var(--sub);
  background:#fff;border:1px solid var(--line);border-radius:6px;cursor:pointer;
  min-height:26px;min-width:26px;display:inline-flex;align-items:center;justify-content:center}

.lb-ok{padding:3px 10px;font-size:12px;font-weight:600;color:#fff;
  background:var(--blue);border:1px solid var(--blue);border-radius:6px;cursor:pointer;
  min-height:26px;display:inline-flex;align-items:center}
.lb-ok:active{opacity:.85}


/* ══ 趋势图 / 得分板图表：固定 Y 轴 + 横向滑动 + 全屏 ══════════════
   ★ 左侧刻度列 position:sticky，横向滑动时留在原地，
     否则刻度跟着滚走，滑动时就失去了读数参照（用户 2026-10-07）。 */




/* ══ 趋势图：滑动（仅数据挤时）/ 全屏 ══════════════════════════════
   ★ 只在容器上加 overflow-x，【不改 SVG、不拆坐标系、不动任何现有样式】——
     没触发滑动的场景，显示与之前逐像素一致（用户 2026-10-07 明确要求）。 */
.tr-scroll{overflow-x:hidden}
.tr-scroll.on{overflow-x:auto;-webkit-overflow-scrolling:touch;
  overscroll-behavior-x:contain}
/* ★★ 2026-10-22：宽图表必须放弃 .trendsvg 的 max-width:100% ——
   否则 SVG 虽然算出了 976px 的宽度，却被 CSS 压回容器宽（360px），
   22 天的横轴日期和数值标签全挤成一团，而且永远不会触发横向滚动
   （内容没超出，overflow-x:auto 就没得滚）。用户原话：「天数变多之后看不清」。 */
.tr-scroll.on .trendsvg{max-width:none;width:auto}
.tr-scroll.on::-webkit-scrollbar{height:5px}
.tr-scroll.on::-webkit-scrollbar-thumb{background:#d7dde5;border-radius:3px}
.tr-head .tr-act{min-width:26px;text-align:center;flex:0 0 auto}

/* 全屏：fixed 铺满。不用 Fullscreen API（iOS 需手势、退出后布局易坏） */
#trendBox.full{position:fixed;inset:0;z-index:200;background:#fff;
  margin:0;border-radius:0;overflow:auto;padding:8px}
#trendBox.full .tr-scroll{overflow:auto !important;max-height:calc(100vh - 60px)}
#trendBox.full svg{max-height:calc(100vh - 110px);height:auto}
body.noScroll{overflow:hidden}

/* ═══ 骑手管理（整屏覆盖） ═══════════════════════════════════════════════ */
.hr-view{position:fixed;inset:0;z-index:60;background:var(--bg,#0d1117);overflow-y:auto;
  padding:14px 12px 40px;-webkit-overflow-scrolling:touch}
.hr-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:6px}
.hr-title{font-size:19px;font-weight:700}
.hr-btns{display:flex;gap:6px}
.hr-meta{margin:0 0 8px}
.hr-cards{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin:10px 0 14px}
.hr-card{background:var(--card,#161b22);border:1px solid var(--line,#30363d);border-radius:10px;
  padding:10px 11px}
.hr-k{font-size:12px;color:var(--dim,#8b949e)}
.hr-v{font-size:22px;font-weight:700;line-height:1.25;margin-top:2px}
.hr-u{font-size:12px;font-weight:400;color:var(--dim,#8b949e);margin-left:2px}
.hr-s{font-size:11px;color:var(--dim,#8b949e);margin-top:3px}
.hr-tabs{margin:6px 0 8px;display:flex;gap:6px;flex-wrap:wrap}
.hr-filter{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin:6px 0 10px}
.hr-filter select,.hr-filter input{background:var(--card,#161b22);color:inherit;
  border:1px solid var(--line,#30363d);border-radius:7px;padding:8px 10px;font-size:13px;
  min-height:36px;max-width:46vw}
.hr-agg{background:var(--card,#161b22);border:1px solid var(--line,#30363d);border-radius:9px;
  padding:9px 11px;font-size:12.5px;line-height:1.7;margin-bottom:10px}
.hr-tbl{width:100%;border-collapse:collapse;font-size:12.5px;white-space:nowrap}
.hr-tbl th,.hr-tbl td{border-bottom:1px solid var(--line,#30363d);padding:6px 8px;text-align:left}
/* 扣款方案表单：违规类型不换行、不被截断（如「提前点送达不满意单」） */
#finRuleForm .hr-tbl td:first-child{white-space:nowrap;width:1%;padding-right:14px}
#finRuleForm .hr-tbl{min-width:100%}
#finRuleForm .fr-price{width:88px}
.hr-tbl th{position:sticky;top:0;background:var(--card,#161b22);z-index:1;font-weight:600}
/* ★ 首列吸附（2026-10-17）：名册 7 列、线索 10 列，手机上必然要横滑。
   姓名列必须跟着走，否则滑到「身份证/留存天数」就不知道这行是谁。
   注意 th 要【同时】sticky top 和 left —— 只写 left 会把表头的 top 吸附顶掉。 */
/* ★ 首列还要【限宽】：表格 auto layout 会把所有剩余宽度都塞给首列
   （实测姓名列被撑到 160px，横滑时一下子盖住「状态」「站点」两列）。
   固定 104px 够放 3~4 个汉字的名字。min-width 对 table-cell 无效，只能用 width。 */
.hr-tbl th:first-child,.hr-tbl td:first-child{
  position:sticky;left:0;background:var(--card,#fff);z-index:2;
  width:104px;max-width:104px;overflow:hidden;text-overflow:ellipsis;
  box-shadow:8px 0 8px -8px rgba(16,24,40,.22)}
.hr-tbl th:first-child{top:0;z-index:3}
/* ★ 离职行用【颜色】弱化，不能用 opacity —— opacity 会把首列 sticky 的
   白色背景也变半透明，横滑时后面的列从姓名底下透出来（2026-10-17 实测截到）。 */
.hr-tbl tr.hr-off td{color:#9aa1ab}
.hr-tbl tr.hr-off td:first-child{background:var(--card,#fff)}
.hr-tbl td.hr-dim{color:var(--dim,#8b949e)}
.hr-body .daily-wrap{overflow:auto;max-height:62vh;border:1px solid var(--line,#30363d);
  border-radius:9px}

/* ★ 骑手管理内的按钮统一尺寸（用户 2026-10-16：「按钮跟其他按钮大小不一致」）。
   原来三类按钮各是各的：顶部「同步/关闭」用 .mini（23px 高、11px 字），
   分段 tab 34px，「筛选」36px —— 一屏里三种大小。
   现在全视图统一走 .hr-btn：36px 高 / 13.5px 字，跟分段 tab、下拉框、输入框同高。 */
.hr-btn{padding:8px 14px;font-size:13.5px;line-height:1.2;min-height:36px;
  border:1px solid var(--line,#30363d);background:var(--card,#161b22);border-radius:9px;
  color:var(--fg,#1c1f24);white-space:nowrap}
.hr-btn:active{background:#eef1f6}
.hr-view .tabs button{min-height:36px}
.hr-filter .hr-btn{flex:0 0 auto}
.hr-filter #hrLMsg,.hr-filter #hrSMsg{flex:1 1 100%;line-height:1.5}

/* ★ 骑手明细的姓名搜索框（.lb-in 默认只有 58px，装不下名字） */
.lb-kwwrap{flex:1 1 auto;max-width:100%}
.lb-kw{width:150px;max-width:60vw;text-align:left;padding:4px 8px;font-size:13px;min-height:26px}
.lb-kw::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}

/* ── 交互细节（2026-10-17 UI 优化）────────────────────────────── */
/* 键盘/踏板聚焦时才显示轮廓，鼠标点击不出现蓝色框 */
button:focus-visible,select:focus-visible,input:focus-visible,
[tabindex]:focus-visible{outline:2px solid var(--blue);outline-offset:2px}
/* 长列表滚动更顺：给结果区加惯性滚动与滚动链收敛 */
.daily-wrap{overscroll-behavior-x:contain}
/* 小屏安全区：底部内容不被手势条压住 */
@media (max-width:480px){
  body{padding-bottom:env(safe-area-inset-bottom,0)}
}

/* 扣款方案：档卡片 + 可多选的 chip */
.fr-card{border:1px solid var(--line);border-radius:var(--r2);padding:12px;
  margin-bottom:14px;background:var(--card)}
.fr-card-hd{display:flex;justify-content:space-between;align-items:center;
  margin-bottom:10px;font-weight:600;font-size:13.5px}
.fr-row{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-bottom:8px}
.fr-lab{font-size:12px;color:var(--sub);min-width:4.8em;flex:0 0 auto}
.chip{min-height:28px;padding:3px 11px;border-radius:999px;border:1px solid var(--line);
  background:var(--card);color:var(--fg);font-size:12.5px;cursor:pointer}
.chip.on{background:var(--blue);border-color:var(--blue);color:#fff}
.fr-price{width:92px;box-sizing:border-box}

/* 财务宽表：二级表头（第一行分组，第二行列名；基础信息列跨两行） */
.fin-tbl .fin-head th{
  position:sticky;z-index:2;height:34px;box-sizing:border-box;
  font-size:13px;font-weight:600;text-align:center;
  background:#eef1f7;color:#333a45;
  border-bottom:1px solid var(--line);border-right:1px solid var(--line)}
.fin-tbl .fin-head tr:nth-child(1) th{top:0;height:30px}
.fin-tbl .fin-head tr:nth-child(1) th[rowspan="2"]{z-index:3;border-bottom:1px solid var(--line)}
.fin-tbl .fin-head tr:nth-child(2) th{top:30px}
.fin-tbl .fin-head .fin-grp{
  font-size:13px;font-weight:700;text-align:center;letter-spacing:.5px;
  background:#e2e8f2;color:#1f2937;
  border-left:1px solid var(--line);border-right:1px solid var(--line);
  border-bottom:1px solid var(--line)}
/* 表格正文也补上下竖线，和表头的分组对齐 */
.fin-tbl tbody td{border-right:1px solid #f1f3f7}

/* 一级表头（分组标题）颜色间隔 —— 4 色循环，相邻分组一眼能分开 */
.fin-tbl .fin-head .fin-grp.g0{background:#dfe7f5;color:#1e3a8a}
.fin-tbl .fin-head .fin-grp.g1{background:#e6ecf5;color:#1f4e79}
.fin-tbl .fin-head .fin-grp.g2{background:#e9e5f5;color:#3b2f70}
.fin-tbl .fin-head .fin-grp.g3{background:#e5f1ec;color:#1f5347}

/* 二级列名的底色跟所属分组走（横向滚动后仍能分辨分组） */
/* 用色相区分（蓝 / 绿 / 紫 / 橙），比只改明度更容易分辨 */
.fin-tbl .fin-head tr:nth-child(2) th.lg0{background:#e6effb;color:#1e3a8a}
.fin-tbl .fin-head tr:nth-child(2) th.lg1{background:#e7f4ea;color:#14532d}
.fin-tbl .fin-head tr:nth-child(2) th.lg2{background:#f0eafb;color:#4c1d95}
.fin-tbl .fin-head tr:nth-child(2) th.lg3{background:#fdf0e6;color:#7c2d12}


/* ★ 财务宽表首列：不要骑手管理那套 104px 限宽，并且吸附层级要最高，
   否则「骑手」「属性」这两个跨两行的表头横滑时会压在第一列表头上 */
.fin-tbl th:first-child,.fin-tbl td:first-child{width:auto;max-width:none;min-width:7.5em}
.fin-tbl .fin-head th:first-child{z-index:6}
.fin-tbl .fin-head tr:nth-child(1) th[rowspan="2"]{z-index:5}
.fin-tbl tbody td:first-child{z-index:4}
/* 首列（站点/骑手）必须高于同行的其它跨行表头，否则「骑手」「属性」会压上来 */
.fin-tbl .fin-head tr:nth-child(1) th:first-child{z-index:9 !important}
.fin-tbl tbody td:first-child{position:sticky;left:0;z-index:8 !important}

/* 财务宽表：数据值也居中 */
.fin-tbl tbody td{text-align:center}
.fin-tbl tbody td:first-child{text-align:left}

/* ★ 2026-10-24 薪资方案：折叠卡片 */
.fp-fold { padding: 10px 12px !important; }
.fp-fold .fr-card-hd { margin: 0; align-items: center; }
.fp-sum { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.fp-sum b { font-size: 14px; }
.fp-sum .hint { font-size: 11px; color: #6b7280; line-height: 1.5; white-space: normal; }
.fp-acts { display: flex; gap: 6px; flex-shrink: 0; }
.fp-acts .hr-btn { padding: 4px 10px; font-size: 12px; }


/* ★ 2026-11-03：退出登录按钮 —— 手机上好点（原来藏在「高级」里，几乎找不到） */
.logout-btn{
  padding:9px 14px;min-height:36px;border-radius:9px;
  border:1px solid #e2b7b2;color:#b3372c;background:#fff7f6;
  font-size:13px;font-weight:600;white-space:nowrap;
}
.logout-btn:active{background:#fdeceb}
.who-line{font-size:12px;color:var(--muted);margin:-4px 0 10px}

/* ★ 2026-11-05 排班矩阵（按用户参考图：每格三行 缺口/达成率/已排÷应排） */
.sched-lvl{display:flex;gap:8px;padding:10px 12px 4px;justify-content:center}
.sched-lvl button{padding:7px 20px;border-radius:18px;border:1px solid #dfe3ea;
  background:#fff;font-size:13.5px;color:#333}
.sched-lvl button.on{background:#1f6feb;border-color:#1f6feb;color:#fff;font-weight:600}
.sched-tip{padding:2px 12px 8px}
.mx-wrap{overflow-x:auto;padding-bottom:14px;-webkit-overflow-scrolling:touch}
.mx-tbl{border-collapse:separate;border-spacing:0;font-size:12.5px;min-width:100%}
.mx-tbl th,.mx-tbl td{border-bottom:1px solid #e9edf3;padding:0}
.mx-tbl thead th{position:sticky;top:0;background:#f7f9fc;z-index:2;
  padding:11px 8px;font-weight:600;color:#3b4252;white-space:nowrap;text-align:center;font-size:12.5px}
.mx-tbl thead th.mx-n{left:0;z-index:3;text-align:left;padding-left:12px;min-width:104px}
.mx-tbl td.mx-n{position:sticky;left:0;background:#fff;z-index:1;
  padding:10px 12px;text-align:left;font-weight:500;white-space:nowrap;
  box-shadow:1px 0 0 #e9edf3}
.mx-c{text-align:center;padding:9px 10px;white-space:nowrap;min-width:62px}
.mx-g{font-size:12.5px;font-weight:600;line-height:1.5}
.mx-r{font-size:14px;font-weight:700;line-height:1.35}
.mx-f{font-size:11px;color:#8b93a3;line-height:1.4}
.mx-up{color:#0f9d58}
.mx-mid{color:#e08a00}
.mx-down{color:#d93025}
.mx-zero{color:#6b7280}
.mx-gray{color:#b6bcc6}
.mx-tbl tr.mx-tot td{background:#f7f9fc;font-weight:700;border-top:2px solid #cfd6e0}
.mx-tbl tr.mx-tot td.mx-n{background:#f7f9fc}
