/* 伊互助健康管理平台 —— 全局样式（暖绿医疗 · 方向 A） */
:root {
  --brand: #1a54b7;
  --brand-d: #12408f;
  --brand-l: #3f8ae0;
  --brand-surface: #12408f;
  --brand-tint: #e8f0fc;
  --aux: #2f9bf0;
  --aux-strong: #1a6fc4;
  --aux-tint: #eaf5fe;
  --ok: #0E8B57;
  --warn: #E8943B;
  --danger: #c0392b;
  --bg: #f4f7fc;
  --card: #ffffff;
  --line: #dfe8f6;
  --tx: #16233a;
  --tx2: #4a5a75;
  --tx3: #8593ad;
  --radius: 14px;
  --shadow: 0 2px 10px rgba(26,84,183,.07);
  --shadow-1: 0 2px 10px rgba(26,84,183,.07);
  --shadow-2: 0 8px 24px rgba(26,84,183,.12);
}

* { box-sizing: border-box; }
html, body { height: 100%; }
body {
  margin: 0;
  background: var(--bg);
  color: var(--tx);
  font: 14px/1.6 -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
}
h1, h2, h3, h4 { margin: 0; font-weight: 600; }
a { color: var(--brand); text-decoration: none; }
.hidden { display: none !important; }
.mono { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 12.5px; }
.num { font-variant-numeric: tabular-nums; }
.strong { font-weight: 600; }
.ellip { max-width: 260px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* ---------------- 按钮 / 表单 ---------------- */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  height: 36px; padding: 0 14px; border: 1px solid var(--line); border-radius: 10px;
  background: #fff; color: var(--tx); font-size: 14px; cursor: pointer;
  transition: .15s; white-space: nowrap;
}
.btn:hover { border-color: #cfe0d8; background: #f3f8f4; }
.btn:disabled { opacity: .6; cursor: not-allowed; }
.btn.primary { background: var(--brand-surface); border-color: transparent; color: #fff; }
.btn.primary:hover { background: var(--brand); }
.btn.ghost { background: #eef4f0; }
.btn.danger { background: #fff; border-color: #f0c8c2; color: var(--danger); }
.btn.danger:hover { background: #fdf3f2; }
.btn.sm { height: 30px; padding: 0 10px; font-size: 13px; border-radius: 8px; }
.btn.block { width: 100%; }
.btn.send { height: 36px; margin-top: 22px; }

label { display: flex; flex-direction: column; gap: 6px; font-size: 13px; color: var(--tx2); }
input, select, textarea {
  height: 36px; padding: 0 10px; border: 1px solid var(--line); border-radius: 10px;
  background: #fff; color: var(--tx); font-size: 14px; font-family: inherit; outline: none; width: 100%;
}
textarea { height: auto; padding: 8px 10px; resize: vertical; line-height: 1.6; }
input:focus, select:focus, textarea:focus { border-color: var(--brand); box-shadow: 0 0 0 3px rgba(26,84,183,.14); }
.inp { width: auto; }
.row { display: flex; gap: 10px; align-items: flex-end; }
.row .grow { flex: 1; }

/* ---------------- 登录页 ---------------- */
.auth-screen {
  min-height: 100vh; display: flex; align-items: center; justify-content: center; padding: 24px;
  background:
    radial-gradient(1200px 600px at 15% -10%, rgba(14, 139, 87, .42), transparent 60%),
    radial-gradient(900px 500px at 100% 110%, rgba(47, 168, 115, .3), transparent 60%),
    linear-gradient(160deg, #12408f 0%, #0E8B57 55%, #2FA873 100%);
}
.auth-card {
  width: 100%; max-width: 420px; background: #fff; border-radius: 16px; padding: 28px;
  box-shadow: 0 24px 60px rgba(6, 24, 56, .35);
}
.auth-brand { display: flex; align-items: center; gap: 14px; margin-bottom: 22px; }
.auth-logo {
  width: 46px; height: 46px; border-radius: 14px; flex: none;
  background: linear-gradient(135deg, var(--brand), var(--brand-l));
  color: #fff; font-size: 22px; font-weight: 700; display: flex; align-items: center; justify-content: center;
}
.auth-brand h1 { font-size: 20px; }
.auth-brand p { margin: 2px 0 0; color: var(--tx3); font-size: 12.5px; }
.tabs { display: flex; gap: 4px; background: #f1f4f9; padding: 4px; border-radius: 10px; margin-bottom: 18px; }
.tabs .tab {
  flex: 1; height: 32px; border: 0; background: transparent; border-radius: 7px;
  font-size: 13px; color: var(--tx2); cursor: pointer; font-family: inherit;
}
.tabs .tab.active { background: #fff; color: var(--brand); font-weight: 600; box-shadow: var(--shadow); }
.pane { display: none; flex-direction: column; gap: 14px; }
.pane.active { display: flex; }
.pane .btn.block { margin-top: 4px; }
/* 登录按钮 + 注册独立入口（并排） */
.auth-actions { margin-top: 4px; }
.auth-actions .btn.ghost { flex: none; min-width: 92px; }
.hint { margin: 0; font-size: 12px; color: var(--tx3); line-height: 1.5; }
.auth-msg { margin-top: 14px; font-size: 13px; min-height: 20px; text-align: center; color: var(--tx2); }
.auth-msg.err { color: var(--danger); }
.auth-msg.ok { color: var(--ok); }

.reset-line { display: flex; justify-content: flex-end; margin-top: -4px; }
.linkbtn {
  border: 0; background: none; padding: 0; color: var(--brand);
  font-size: 13px; cursor: pointer; font-family: inherit;
}
.linkbtn:hover { text-decoration: underline; }
.quick > .btn { grid-column: 1 / -1; }
.quick .row { align-items: center; }

/* ---------------- 应用外壳 ----------------
   外壳高度锁定为一屏（dvh 优先，100vh 兜底），并 overflow:hidden：
   让内部 .sidebar / .content 各自成为独立滚动容器，整页不再被长内容撑高、
   顶栏也不会随整页滚动消失。无 dvh 的旧内核回退到 100vh（min-height 一并保留）。 */
.app-shell { min-height: 100vh; height: 100vh; height: 100dvh; overflow: hidden; display: flex; flex-direction: column; }
.topbar {
  height: 58px; flex: none; display: flex; align-items: center; justify-content: flex-start;
  padding: 0 18px; color: #fff;
  background: linear-gradient(120deg, var(--brand-d), var(--brand) 60%, var(--brand-l));
}
.tb-left { display: flex; align-items: center; gap: 10px; }
.tb-logo {
  width: 32px; height: 32px; border-radius: 10px; background: rgba(255, 255, 255, .18);
  display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: 17px;
}
.tb-title { font-size: 16px; font-weight: 600; line-height: 1.2; }
.tb-title em { display: block; font-style: normal; font-size: 11.5px; opacity: .8; font-weight: 400; }
.tb-right { display: flex; align-items: center; gap: 12px; }
.who { font-size: 13px; opacity: .92; }
.tb-right .btn.ghost { background: rgba(255, 255, 255, .16); border-color: rgba(255, 255, 255, .28); color: #fff; }
.tb-right .btn.ghost:hover { background: rgba(255, 255, 255, .26); }

.body { flex: 1; display: flex; min-height: 0; }
.sidebar {
  width: 208px; flex: none; background: #fff; border-right: 1px solid var(--line);
  padding: 12px 10px; display: flex; flex-direction: column; gap: 2px;
  /* 侧栏自身作为滚动容器：导航项很多（超管 38 项）时不撑高整页，可独立滚到末项 */
  overflow-y: auto; min-height: 0;
}
.nav-item {
  display: flex; align-items: center; gap: 10px; height: 40px; padding: 0 12px;
  border: 0; background: transparent; border-radius: 10px; cursor: pointer;
  color: var(--tx2); font-size: 14px; font-family: inherit; text-align: left; width: 100%;
}
.nav-item i { font-style: normal; width: 18px; text-align: center; opacity: .75; }
.nav-item:hover { background: #f2f5fa; color: var(--tx); }
.nav-item.active { background: rgba(26,84,183,.10); color: var(--brand); font-weight: 600; }
.nav-item.active i { opacity: 1; }
/* 危险入口（系统重置）：红色高亮 + 呼吸圆点，仅超级管理员可见 */
.nav-item.danger { color: #c0392b; font-weight: 600; margin-top: 6px; border-top: 1px solid var(--line); border-radius: 0 0 8px 8px; padding-top: 10px; height: 46px; }
.nav-item.danger i { opacity: 1; font-size: 15px; }
.nav-item.danger:hover { background: #fdeceb; }
.nav-item.danger.active { background: rgba(192, 57, 43, .12); color: #c0392b; }
.nav-item.danger .dot { width: 6px; height: 6px; border-radius: 50%; background: #c0392b; margin-left: auto; animation: pulse 1.6s ease-in-out infinite; }
@keyframes pulse { 0%,100% { opacity: 1; } 50% { opacity: .25; } }
.content { flex: 1; padding: 20px; min-width: 0; overflow-x: auto; }
.tabbar { display: none; }

/* ---------------- 页面元素 ---------------- */
/* 后台管理子页签 / 列表辅助 */
.subtabs { display: flex; gap: 6px; margin-bottom: 14px; flex-wrap: wrap; }
/* ---------- 登录页 · 申请注册 ---------- */
.auth-card .req { color: #c0392b; margin-left: 3px; font-weight: 600; }
/* 修复：label 全局为 column flex，导致标签文字与必填星号被拆成两行。
   auth-card 内改用 block：文字与星号同行，输入控件独占一行。 */
.auth-card label { display: block; font-size: 13px; color: var(--tx2); }
.auth-card label > input,
.auth-card label > select,
.auth-card label > textarea { display: block; margin-top: 6px; }
.auth-card label > .row { margin-top: 6px; }
.reg-tip {
  font-size: 13px; color: #5c6b81; background: #F2F8F4; border: 1px solid var(--line);
  border-radius: 10px; padding: 9px 12px; margin: 0 0 14px; line-height: 1.65;
}
.auth-card select {
  width: 100%; height: 42px; border: 1px solid var(--line); border-radius: 10px;
  padding: 0 10px; font: inherit; font-size: 15px; background: #fff; color: var(--tx); margin-top: 6px;
}
.auth-card textarea {
  width: 100%; border: 1px solid var(--line); border-radius: 10px; padding: 9px 12px;
  font: inherit; font-size: 15px; margin-top: 6px; resize: vertical; line-height: 1.6;
}
/* 警示行：红色提示（对外域名未部署、危险操作等） */
.warnx { color: #c0392b; background: #fdf3f2; border: 1px solid #f0c2bc;
  border-radius: 10px; padding: 10px 12px; font-size: 13px; line-height: 1.7; margin: 10px 0; }
.stab.danger { color: #c0392b; border-color: #f0c2bc; font-weight: 600; }
.stab.danger.active { background: #c0392b; border-color: #c0392b; color: #fff; }
.stab {
  height: 32px; padding: 0 14px; border: 1px solid var(--line); background: #fff;
  border-radius: 10px; cursor: pointer; font-size: 13px; color: var(--tx2); font-family: inherit;
}
.stab:hover { background: #f4f9f5; }
.stab.active { background: rgba(26,84,183,.10); border-color: transparent; color: var(--brand); font-weight: 600; }
.listinfo { color: var(--tx2); font-size: 13px; margin-bottom: 10px; }
.pager { display: flex; gap: 10px; justify-content: center; margin-top: 12px; }
.tip { color: var(--tx3); font-size: 12.5px; margin-left: 10px; }
b.ok { color: var(--ok); }

.page-hd { display: flex; align-items: baseline; gap: 10px; margin-bottom: 16px; }
.page-hd h2 { font-size: 19px; }
.page-sub { color: var(--tx3); font-size: 13px; }
.actions { margin-bottom: 14px; }
.loading { padding: 40px; text-align: center; color: var(--tx3); }

.kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 12px; margin-bottom: 16px; }
.kpi { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 14px 16px; box-shadow: var(--shadow); }
.k-label { font-size: 12.5px; color: var(--tx3); }
.k-num { font-size: 26px; font-weight: 700; line-height: 1.3; }
.k-num small { font-size: 12px; font-weight: 500; color: var(--tx3); margin-left: 4px; }
.kpi.run .k-num { color: var(--brand); }
.kpi.ok .k-num { color: var(--ok); }
.kpi.warn .k-num { color: var(--warn); }
a.kpi { text-decoration: none; color: inherit; display: block; }
a.kpi:hover { border-color: var(--tx3); }
a.kpi .k-label::after { content: " ›"; color: var(--tx3); }

.grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; align-items: start; }
.card { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); box-shadow: var(--shadow); margin-bottom: 14px; overflow: hidden; }
.card-hd { display: flex; align-items: center; justify-content: flex-start; gap: 10px; padding: 12px 16px; border-bottom: 1px solid var(--line); }
.card-hd h3 { font-size: 15px; }
.card-hd .tag { font-size: 12px; color: var(--tx3); }
.card-hd .link { font-size: 13px; }
.card-bd { padding: 14px 16px; }
b.danger { color: var(--danger); }

.empty { padding: 30px 16px; text-align: center; color: var(--tx3); }
.empty-ico { font-size: 26px; color: #cfd8e6; margin-bottom: 4px; }
.empty p { margin: 0; font-size: 14px; }
.empty small { font-size: 12px; }

/* 表格 */
.tbl-wrap { overflow-x: auto; background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); box-shadow: var(--shadow); }
.tbl { width: 100%; border-collapse: collapse; font-size: 13.5px; }
.tbl th { background: #f4f9f5; color: var(--tx2); font-weight: 600; text-align: left; padding: 10px 12px; white-space: nowrap; border-bottom: 1px solid var(--line); }
.tbl td { padding: 11px 12px; border-bottom: 1px solid #eef4f0; vertical-align: middle; }
.tbl tbody tr:last-child td { border-bottom: 0; }
.tbl tbody tr:hover { background: #f6faf7; }
.tbl .rowlink { cursor: pointer; }
.tbl .rowlate { background: #fff8f6; }
.tbl .ops { white-space: nowrap; text-align: right; }
.tbl .ops .btn { margin-left: 6px; }

/* 进度条 */
.bar { height: 6px; background: #eef4f0; border-radius: 4px; overflow: hidden; min-width: 80px; }
.bar i { display: block; height: 100%; background: linear-gradient(90deg, var(--brand), var(--brand-l)); border-radius: 4px; }
.bar.big { height: 10px; flex: 1; max-width: 320px; }
.bars { display: flex; flex-direction: column; gap: 9px; }
.bar-row { display: flex; align-items: center; gap: 10px; }
.bar-row .bl { width: 110px; flex: none; font-size: 13px; color: var(--tx2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bar-row .bar { flex: 1; }
.bar-row b { width: 34px; text-align: right; font-size: 13px; }

/* 状态标签 */
.pill { display: inline-block; padding: 2px 9px; border-radius: 999px; font-size: 12px; line-height: 1.7; background: #eef3f0; color: var(--tx2); }
.pill.ok { background: #e6f6ef; color: var(--ok); }
.pill.run { background: var(--brand-tint); color: var(--brand); }
.pill.warn { background: #fdf3e2; color: var(--warn); }
.pill.danger { background: #fdeceb; color: var(--danger); }
.pill.off { background: #eef3f0; color: var(--tx3); }
.muted { color: var(--tx3); }
.reminder-list { margin: 4px 0 8px; padding-left: 20px; }
.reminder-list li { margin: 6px 0; line-height: 1.5; }

/* 待办列表 */
.todo { list-style: none; margin: 0; padding: 0; }
.todo li {
  display: flex; align-items: center; gap: 10px; padding: 9px 10px; border-radius: 10px;
  cursor: pointer; border-bottom: 1px solid #f0f5f1;
}
.todo li:last-child { border-bottom: 0; }
.todo li:hover { background: #f5faf6; }
.todo li.late { background: #fff8f6; }
.td-no { font-weight: 600; flex: none; width: 108px; }
.td-ord { flex: 1; color: var(--tx2); font-size: 13px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.td-date { flex: none; font-size: 12.5px; color: var(--tx3); }
.todo li.late .td-date { color: var(--danger); }

/* 筛选条 */
.filters { display: flex; flex-wrap: wrap; gap: 10px; margin-bottom: 14px; }
.filters .inp { height: 36px; }
.filters #f-kw { min-width: 240px; flex: 1; }

/* 工单详情 */
.detail-hd { margin-bottom: 14px; }
.detail-hd .back { font-size: 13px; }
.detail-hd h2 { font-size: 20px; margin: 6px 0 4px; display: flex; align-items: center; gap: 10px; }
.detail-sub { color: var(--tx2); font-size: 13px; }
.prog { display: flex; align-items: center; gap: 12px; margin-bottom: 14px; flex-wrap: wrap; }
.prog b { font-size: 18px; }
.prog span { color: var(--tx2); font-size: 13px; }
.prog .btn { margin-left: auto; }

.nodes { display: flex; flex-direction: column; gap: 10px; }
.node { border: 1px solid var(--line); border-radius: 10px; padding: 10px 12px; background: #fafdfb; }
.node.run { border-color: #cfe6dc; background: #f2faf6; }
.node.done { border-color: #c9ecdc; background: #f6fcf9; }
.node.skip { opacity: .68; }
.n-hd { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }
.n-seq {
  width: 22px; height: 22px; border-radius: 50%; background: var(--brand); color: #fff;
  font-size: 12px; display: flex; align-items: center; justify-content: center; flex: none;
}
.node.done .n-seq { background: var(--ok); }
.n-hd b { font-size: 14px; }
.n-form { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
.n-form .inp { height: 32px; font-size: 13px; }
.n-form .grow { flex: 1; min-width: 160px; }

/* 迷你列表 / 卡片内列表 */
.mini-tbl { display: flex; flex-direction: column; }
.mini-row {
  display: flex; align-items: center; gap: 8px; padding: 8px 0;
  border-bottom: 1px solid #f0f5f1; font-size: 13px; flex-wrap: wrap;
}
.mini-row:last-child { border-bottom: 0; }
.mini-row small { color: var(--tx3); font-size: 12px; flex: 1; min-width: 120px; }
.mini-row .bar { flex: 1; max-width: 180px; }

/* 注册审批 */
.ap-group { margin-bottom: 18px; }
.ap-group:last-child { margin-bottom: 0; }
.ap-ghd {
  font-size: 13px; font-weight: 600; color: var(--tx);
  padding: 8px 12px; background: #f3f8f5; border-radius: 10px;
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
}
.ap-ghd small { color: var(--tx3); font-weight: 400; font-size: 12px; }
.ap-item {
  display: flex; align-items: flex-start; gap: 12px; padding: 12px 4px;
  border-bottom: 1px solid #f0f5f1;
}
.ap-item:last-child { border-bottom: 0; }
.ap-main { flex: 1; min-width: 220px; }
.ap-name { font-size: 15px; font-weight: 600; color: var(--tx); }
.ap-meta { font-size: 13px; color: var(--tx2); margin-top: 3px; }
.ap-meta.small { font-size: 12px; color: var(--tx3); }
.ap-meta code { background: #f3f8f5; padding: 1px 6px; border-radius: 4px; font-size: 12px; }
.ap-note {
  font-size: 13px; color: var(--tx2); margin-top: 6px; padding: 7px 10px;
  background: #f8fcf9; border-left: 3px solid var(--line); border-radius: 0 6px 6px 0;
}
.ap-ops { display: flex; gap: 8px; flex-shrink: 0; }

.chips { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 14px; }
.chipx { background: #fff; border: 1px solid var(--line); border-radius: 999px; padding: 4px 12px; font-size: 13px; color: var(--tx2); }
.chipx b { color: var(--brand); }

.rec { display: flex; flex-direction: column; grid-column: 1 / -1; }
.rec-row { display: flex; gap: 10px; padding: 7px 0; border-bottom: 1px solid #f0f5f1; font-size: 13.5px; }
.rec-row:last-child { border-bottom: 0; }
.rk { width: 96px; flex: none; color: var(--tx3); }
.rv { flex: 1; white-space: pre-wrap; }
.sub { margin: 14px 0 8px; font-size: 14px; grid-column: 1 / -1; }

/* ---------------- 弹窗 ---------------- */
.mask {
  position: fixed; inset: 0; background: rgba(12, 26, 48, .5); z-index: 50;
  display: flex; align-items: center; justify-content: center; padding: 20px; overflow: auto;
}
.modal {
  width: 100%; max-width: 520px; background: #fff; border-radius: 14px; box-shadow: 0 20px 60px rgba(10, 26, 56, .35);
  display: flex; flex-direction: column; max-height: 88vh;
}
.modal.wide { max-width: 760px; }
.modal.narrow { max-width: 380px; }
.modal-hd { display: flex; align-items: center; justify-content: flex-start; padding: 14px 18px; border-bottom: 1px solid var(--line); }
.modal-hd h3 { font-size: 16px; }
.modal-hd .x { border: 0; background: transparent; font-size: 24px; line-height: 1; color: var(--tx3); cursor: pointer; }
.modal-bd { padding: 16px 18px; overflow: auto; display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.modal.narrow .modal-bd { display: block; }
.modal-bd label.full { grid-column: 1 / -1; }
.modal-bd .chk { flex-direction: row; align-items: center; gap: 8px; }
.modal-bd .chk input { width: 16px; height: 16px; }
.confirm-text { margin: 0; font-size: 14px; line-height: 1.7; }
.modal-ft { display: flex; justify-content: flex-end; gap: 10px; padding: 12px 18px; border-top: 1px solid var(--line); }
label small { font-weight: 400; font-size: 11.5px; color: var(--tx3); }

/* 内联「快捷新建」建档区 */
.quick {
  margin-top: 2px; padding: 10px 12px; border: 1px dashed #bfe0d2; border-radius: 10px;
  background: #f3f9f5; display: grid; grid-template-columns: 1fr 1fr; gap: 10px;
}
.quick .q-tip { grid-column: 1 / -1; font-size: 12px; color: var(--brand); line-height: 1.5; }
.quick label { gap: 4px; }
.quick label.full { grid-column: 1 / -1; }
.quick input, .quick select, .quick textarea { background: #fff; }

/* Toast */
.toast {
  position: fixed; left: 50%; bottom: 40px; transform: translate(-50%, 20px);
  background: #143524; color: #fff; padding: 10px 18px; border-radius: 10px; font-size: 14px;
  opacity: 0; pointer-events: none; transition: .22s; z-index: 80;
}
.toast.show { opacity: 1; transform: translate(-50%, 0); }

/* ---------------- 移动端 ---------------- */
/* ---------- 个人中心 · 键值对 ---------- */
.kv-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 0 18px; }
.kv { display: flex; gap: 10px; font-size: 14px; padding: 7px 0; border-bottom: 1px dashed var(--line); }
.kv > span { flex: 0 0 104px; color: var(--tx3); font-size: 13px; }
.kv > b { font-weight: 600; word-break: break-all; }

@media (max-width: 900px) {
  .sidebar { display: none; }
  .content { padding: 14px 12px 84px; }
  .grid2 { grid-template-columns: 1fr; }
  .tabbar {
    display: flex; position: fixed; left: 0; right: 0; bottom: 0; z-index: 40;
    background: #fff; border-top: 1px solid var(--line);
    padding: 4px 2px calc(4px + env(safe-area-inset-bottom));
    box-shadow: 0 -2px 12px rgba(26,84,183,.07);
    overflow-x: auto; -webkit-overflow-scrolling: touch;
  }
  /* 蜂鸟式底栏：4~5 个主入口平分宽度，图标在上文字在下，选中加顶部指示条 */
  .tabbar .nav-item {
    flex-direction: column; gap: 3px; height: auto; min-height: 52px; padding: 7px 2px;
    font-size: 11.5px; flex: 1 1 0; min-width: 62px; justify-content: center; position: relative;
  }
  .tabbar .nav-item i { font-size: 20px; line-height: 1; opacity: .9; }
  .tabbar .nav-item.active { background: transparent; color: var(--brand); }
  .tabbar .nav-item.active i { opacity: 1; }
  .tabbar .nav-item.active::before {
    content: ''; position: absolute; top: 0; left: 50%; transform: translateX(-50%);
    width: 22px; height: 3px; border-radius: 999px; background: var(--brand);
  }
  .kpis { grid-template-columns: 1fr 1fr; }
  .filters { gap: 8px; }
  .filters .inp, .filters .btn { flex: 1; min-width: 140px; }
  .ellip { max-width: 150px; }
}
@media (max-width: 640px) {
  .modal-bd { grid-template-columns: 1fr; }
  .quick { grid-template-columns: 1fr; }
  .modal { max-height: 92vh; }
  .n-form .inp { width: 100%; }
  .td-ord { display: none; }
  /* 顶栏换行：标题/账号占第一行，全局搜索独占第二行。
     原先搜索框 min-width:140px 在窄屏被挤到只剩几个字，实际不可用。 */
  .topbar { height: auto; flex-wrap: wrap; padding: 8px 12px; row-gap: 8px; }
  .tb-left { min-width: 0; }
  .tb-title { font-size: 15px; }
  .tb-search { flex: 1 1 100%; max-width: none; min-width: 0; order: 3; }
}

/* ============ 顶部全局搜索 ============ */
.tb-search { flex: 1; max-width: 420px; min-width: 140px; }
.tb-search input {
  width: 100%; height: 34px; padding: 0 12px; border: 1px solid #d8e4de;
  border-radius: 999px; background: #f3f8f4; font-size: 13px; color: #1f2d3d; outline: none;
}
.tb-search input:focus { border-color: var(--brand); background: #fff; }

/* ============ 工作流步骤条 ============ */
.stepper { display: flex; gap: 0; overflow-x: auto; padding: 6px 0 2px; }
.step {
  flex: 1 1 0; min-width: 132px; text-align: center; position: relative; padding: 4px 8px 0;
}
.step::after {
  content: ''; position: absolute; top: 15px; left: 50%; width: 100%; height: 2px; background: #e2ebe6; z-index: 0;
}
.step:last-child::after { display: none; }
.s-dot {
  position: relative; z-index: 1; width: 30px; height: 30px; margin: 0 auto 6px; border-radius: 50%;
  background: #eef3f0; color: #8a97a8; font-size: 13px; font-weight: 700;
  display: flex; align-items: center; justify-content: center; border: 2px solid #e2ebe6;
}
.s-name { font-size: 13px; font-weight: 600; color: #46536a; }
.s-meta { font-size: 11.5px; color: #95a1b3; margin-top: 2px; }
.s-desc { font-size: 11.5px; color: #7c8899; margin-top: 4px; line-height: 1.45; }
.step.done .s-dot { background: #2FA873; border-color: #2FA873; color: #fff; }
.step.done .s-name { color: #2FA873; }
.step.run .s-dot { background: var(--brand); border-color: var(--brand); color: #fff; box-shadow: 0 0 0 4px rgba(26,84,183,.14); }
.step.run .s-name { color: var(--brand); }
.step.skip .s-dot { background: #f0f5f1; color: #aab8b0; }
.step.skip .s-name { color: #aab8b0; text-decoration: line-through; }
.flow-ops { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 14px; padding-top: 12px; border-top: 1px solid #eef4f0; }
.n-desc { font-size: 12px; color: #7c8899; margin: 2px 0 6px; }

/* ============ 业务看板 ============ */
/* 第1项（2026-10-17）：业务流程看板重排版 —— 配色改回蓝白体系（原为旧暖绿残留），列头带序号，卡片信息分层 */
.flow-ov { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-bottom: 12px; }
.fov-i { display: inline-flex; align-items: baseline; gap: 8px; padding: 9px 16px; border: 1px solid var(--line, #e3e8e5); border-radius: 12px; background: #fff; }
.fov-i > i { font-style: normal; font-size: 12px; color: var(--tx3, #8b9a92); }
.fov-i > b { font-size: 19px; color: var(--brand, #1a54b7); font-weight: 700; line-height: 1; }
.fov-i.fov-ok > b { color: #0E8B57; }
.fov-i.fov-warn { border-color: #f3c3c3; background: #fffafa; }
.fov-i.fov-warn > b { color: #d93f3f; }
.fov-sel { margin-left: auto; }
.fov-sel .inp { min-width: 220px; }
.flow-tip { font-size: 12.5px; color: var(--tx3, #8b9a92); margin-bottom: 12px; }

.board { display: flex; gap: 14px; overflow-x: auto; padding: 4px 2px 14px; align-items: stretch; }
/* 第2次修复（2026-10-17）：原为固定列宽 flex:0 0 236px —— 步骤列少时整排挤在左侧、右侧大片留白。
   改为**弹性等分铺满**：列数少时自动变宽填满容器，列数多到单列窄于 208px 时才横向滚动。 */
.bcol {
  flex: 1 1 0; min-width: 168px;
  background: #F7F9FC; border: 1px solid var(--line, #e3e8e5);
  border-radius: 16px; display: flex; flex-direction: column; scroll-snap-align: start;
}
.bcol-hd {
  display: flex; align-items: center; gap: 8px; padding: 12px 14px;
  border-bottom: 1px solid var(--line, #e3e8e5); background: rgba(26, 84, 183, .04);
  border-radius: 16px 16px 0 0;
}
.bcol-no {
  width: 20px; height: 20px; line-height: 20px; text-align: center; border-radius: 50%;
  background: var(--brand, #1a54b7); color: #fff; font-size: 11px; font-weight: 700; flex-shrink: 0;
}
.bcol-hd b { flex: 1; font-size: 13px; font-weight: 600; color: var(--tx, #1d2735); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bcol-hd .cnt { flex-shrink: 0; background: rgba(26, 84, 183, .12); color: var(--brand, #1a54b7); border-radius: 999px; font-size: 11px; font-weight: 700; padding: 2px 9px; }
.bcol-done .bcol-no { background: #0E8B57; }
.bcol-done .bcol-hd .cnt { background: rgba(14, 139, 87, .12); color: #0E8B57; }
.bcol-bd { padding: 12px; display: flex; flex-direction: column; gap: 10px; min-height: 70px; }
.bcol-empty { color: #c2cad6; font-size: 12px; text-align: center; padding: 16px 0; }
.bcard {
  background: #fff; border: 1px solid var(--line, #e3e8e5); border-radius: 12px; padding: 12px; cursor: pointer;
  transition: box-shadow .15s, transform .15s, border-color .15s;
}
.bcard:hover { box-shadow: 0 6px 18px rgba(26, 84, 183, .14); transform: translateY(-2px); border-color: rgba(26, 84, 183, .35); }
.bcard.late { border-color: #f3c3c3; background: #fffafa; }
.bc-top { display: flex; align-items: center; gap: 6px; }
.bc-no { font-size: 12px; font-weight: 700; color: var(--brand, #1a54b7); font-family: ui-monospace, Consolas, monospace; }
.bc-cli { font-size: 13.5px; font-weight: 600; color: var(--tx, #1d2735); margin-top: 6px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bc-pat { font-size: 11.5px; color: var(--tx3, #8b9a92); margin-top: 3px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bc-ft { display: flex; justify-content: flex-start; align-items: baseline; font-size: 11.5px; color: var(--tx3, #8b9a92); margin-top: 6px; }
.bc-ft .bc-amt { color: var(--tx, #1d2735); font-weight: 600; font-size: 12px; }
.bcard .bar { margin-top: 8px; }

/* 窄屏（≤900px）业务流程：步骤切换 Tab + 单列卡片列表（替代横向看板） */
.flow-steps {
  display: flex; gap: 8px; overflow-x: auto; padding: 4px 2px 12px;
  -webkit-overflow-scrolling: touch; scrollbar-width: none;
}
.flow-steps::-webkit-scrollbar { display: none; }
.fstep {
  flex: 0 0 auto; display: inline-flex; align-items: center; gap: 6px;
  padding: 9px 14px; border-radius: 999px; cursor: pointer;
  border: 1px solid var(--line, #e3e8e5); background: #fff;
  font-size: 13px; color: var(--tx2, #5c6b81); white-space: nowrap;
  font-family: inherit; line-height: 1.4;
}
.fstep .fs-no {
  width: 18px; height: 18px; line-height: 18px; text-align: center; border-radius: 50%;
  background: rgba(26, 84, 183, .10); color: var(--brand, #1a54b7);
  font-size: 11px; font-weight: 700; flex-shrink: 0;
}
.fstep .fs-cnt {
  min-width: 18px; text-align: center; padding: 1px 6px; border-radius: 999px;
  background: var(--bg2, #f1f4f9); color: var(--tx3, #8b9a92); font-size: 11px; font-weight: 700;
}
.fstep.on { background: var(--brand, #1a54b7); border-color: var(--brand, #1a54b7); color: #fff; font-weight: 600; }
.fstep.on .fs-no { background: rgba(255, 255, 255, .28); color: #fff; }
.fstep.on .fs-cnt { background: rgba(255, 255, 255, .28); color: #fff; }
.fstep-done.on { background: #0E8B57; border-color: #0E8B57; }
.fstep:active { transform: scale(.97); }
.fstep-body { display: flex; flex-direction: column; gap: 10px; padding-bottom: 8px; }
.fstep-body .bcard { width: 100%; }

/* ============ 权限管理 ============ */
.perm-head { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-bottom: 12px; }
.perm-tools { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 14px; }
.perm-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 8px 14px; }
.perm-grid .chk { display: flex; align-items: center; gap: 6px; font-size: 13px; color: #3a465c; cursor: pointer; }
.perm-grid .chk input { width: 15px; height: 15px; accent-color: var(--brand); }

/* ============ 审核拦截页 ============ */
.blocked { max-width: 560px; margin: 60px auto; text-align: center; padding: 32px 24px; background: #fff; border: 1px solid #e6efe9; border-radius: 16px; }
.blk-ico { font-size: 42px; margin-bottom: 10px; }
.blocked h3 { font-size: 18px; color: #2b3548; margin-bottom: 8px; }
.blk-acc { font-size: 13px; color: #5c6a80; margin-bottom: 10px; }
.blk-hint { font-size: 13px; color: #7c8899; line-height: 1.7; margin-bottom: 18px; }
.blocked .btn { margin: 0 5px; }

/* ============ 其他 ============ */
.card.alert { border-color: #f0d9a8; }
.card.alert .card-hd { background: #fff9ee; border-bottom-color: #f4e6c8; }
.tbl tr.rowlate { background: #fffafa; }
.rowlink { cursor: pointer; }
.link { color: var(--brand); text-decoration: none; font-size: 12.5px; cursor: pointer; }
.link:hover { text-decoration: underline; }
/* 「查看详情」等无 href 的链接型元素：悬停时明确呈现可点击状态（手型 + 下划线 + 加深） */
a.link:hover, .link:hover { cursor: pointer; text-decoration: underline; opacity: .85; }

/* ===== 多选分类（multicheck） ===== */
.modal-bd .field { grid-column: 1 / -1; display: block; }
.field-label { font-size: 13px; color: var(--tx2); margin-bottom: 6px; }
.field-label .req { color: var(--danger); margin-left: 2px; }
.checks { display: flex; flex-wrap: wrap; gap: 8px 16px; }
.chk.inline { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; color: #3a465c; cursor: pointer; margin: 0; }
.chk.inline input { width: 15px; height: 15px; accent-color: var(--brand); }
.custom-type { margin-top: 8px; display: flex; flex-direction: column; gap: 4px; }
.custom-type .inp { max-width: 320px; }

/* 提醒时间「确定」确认提示 */
.remind-confirm-note { margin-left: 8px; font-size: 12.5px; }

/* 修改记录（审计）弹窗 */
.log-detail { color: var(--tx3); font-size: 12.5px; margin-top: 2px; padding-left: 4px; }

/* 专家多分类：单元格内多个 pill 自动换行 */
td.cats { line-height: 1.8; }

/* ===== 商业化前台：额度条 / 套餐卡 / 账单 ===== */
.quota-bar { background:var(--card); border:1px solid var(--line); border-radius:10px; padding:12px 14px; margin:12px 0; }
.quota-bar .qb-txt { font-size:13.5px; color:var(--tx2); }
.quota-bar .qb-txt b { color:var(--tx); }
.qb-track { height:8px; background:#eef3f0; border-radius:6px; margin-top:8px; overflow:hidden; }
.qb-fill { height:100%; background:var(--ok); border-radius:6px; transition:width .3s; }
.quota-bar.warn .qb-fill { background:var(--warn); }
.quota-bar.danger .qb-fill { background:var(--danger); }
.qb-hint { margin-top:8px; font-size:12.5px; color:var(--warn); }

.plan-cards { display:grid; grid-template-columns:repeat(auto-fill,minmax(220px,1fr)); gap:14px; margin:12px 0; }
.plan-card { background:var(--card); border:1px solid var(--line); border-radius:12px;
  padding:16px; display:flex; flex-direction:column; gap:8px; }
.plan-card.cur { border-color:var(--brand); box-shadow:0 0 0 2px rgba(26,84,183,.14); }
.pc-name { font-size:15px; font-weight:600; }
.pc-price { font-size:22px; font-weight:600; color:var(--brand); }
.pc-price small { font-size:12px; color:var(--tx3); font-weight:400; }
.pc-quota { font-size:13px; color:var(--tx2); }
.pc-feat { font-size:12.5px; color:var(--tx3); line-height:1.6; flex:1; }
.pc-free { font-size:12.5px; color:var(--tx3); padding:6px 0; }
.pay-code { background:#f3f8f4; border:1px dashed var(--line); border-radius:8px; padding:10px;
  font-size:12px; word-break:break-all; margin-top:10px;
  font-family:Consolas,Monaco,"Courier New",monospace; }
.pay-qr { margin:10px 0; }
.pay-qr img { border:1px solid var(--line); border-radius:8px; background:#fff; }

/* ===== 日程排班 ===== */
.days { display:flex; gap:8px; overflow-x:auto; padding:4px 0 8px; }
.day { flex:0 0 64px; border:1px solid var(--line); background:var(--card); border-radius:10px;
  padding:8px 4px; cursor:pointer; text-align:center; }
.day b { display:block; font-size:13px; }
.day span { font-size:11.5px; color:var(--tx3); }
.day.on { border-color:var(--brand); background:#E7F5EF; }
.day.today b { color:var(--brand); }
.sch-list { display:flex; flex-direction:column; gap:8px; margin-top:6px; }
.sch-card { display:flex; align-items:center; gap:10px; background:var(--card);
  border:1px solid var(--line); border-left:4px solid var(--brand); border-radius:10px;
  padding:10px 12px; text-decoration:none; color:inherit; }
.sch-card.warn { border-left-color:var(--warn); }
.sch-card.ok   { border-left-color:var(--ok); }
.sch-card.off  { border-left-color:var(--tx3); }
.sch-card i { font-style:normal; font-size:16px; }
.sc-bd { flex:1; min-width:0; }
.sc-t { font-size:14px; font-weight:600; }
.sc-s { font-size:12.5px; color:var(--tx3); }

/* ===== 资料附件 ===== */
.file-list { display:flex; flex-direction:column; gap:8px; margin-top:6px; }
.file-card { display:flex; align-items:center; gap:10px; background:var(--card);
  border:1px solid var(--line); border-radius:10px; padding:10px 12px; }
.file-card i { font-style:normal; font-size:20px; flex:0 0 auto; }
.fc-bd { flex:1; min-width:0; }
.fc-t { font-size:14px; font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.fc-s { font-size:12.5px; color:var(--tx3); }
.fc-ops { display:flex; gap:6px; flex:0 0 auto; }

/* ===== 需求10 / 14：客户·就诊人详情 Tab + 页面内记录 + 附件 ===== */
.detail-ops { margin-top: 8px; display: flex; gap: 8px; flex-wrap: wrap; }
.tabs .tab .cnt { font-style: normal; opacity: .65; font-size: 12px; margin-left: 2px; }
.note-list { display: flex; flex-direction: column; gap: 8px; }
.note-card { background: var(--card); border: 1px solid var(--line); border-left: 4px solid var(--brand);
  border-radius: 10px; padding: 10px 12px; }
.note-card.ok { border-left-color: var(--ok); }
.note-card.warn { border-left-color: var(--warn); }
.note-card.run { border-left-color: var(--brand); }
.nc-hd { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 4px; }
.nc-hd small { color: var(--tx3); font-size: 12px; }
.nc-bd { font-size: 13.5px; line-height: 1.6; white-space: pre-wrap; word-break: break-word; }

/* ===== 需求11：日程排班充实（日历 / 待办 / 冲突 / 工时 / 快速排班） ===== */
.conflict-card { border-color: #f0d9a8; background: #fff8e8; }
.cf-hd { color: #8a6d1a; font-weight: 600; margin-bottom: 6px; }
.cal-grid { display: grid; grid-template-columns: repeat(7, minmax(96px, 1fr)); gap: 8px; overflow-x: auto; }
.cal-col { border: 1px solid var(--line); border-radius: 10px; background: var(--card);
  min-height: 120px; display: flex; flex-direction: column; }
.cal-col.today { border-color: var(--brand); box-shadow: 0 0 0 1px var(--brand) inset; }
.cal-hd { padding: 6px 8px; border-bottom: 1px solid var(--line); font-size: 12px; color: var(--tx3);
  display: flex; justify-content: flex-start; }
.cal-hd b { color: var(--tx2); font-size: 12px; }
.cal-body { padding: 6px; display: flex; flex-direction: column; gap: 5px; flex: 1; }
.cal-ord { display: flex; align-items: center; gap: 5px; border: 1px solid var(--line); background: #f4f8ff;
  border-radius: 7px; padding: 4px 6px; cursor: pointer; text-align: left; font-size: 12px; }
.cal-ord:hover { border-color: var(--brand); }
.cal-ord .co-t { font-weight: 600; color: var(--brand); flex: 0 0 auto; }
.cal-ord .co-n { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cal-dot { width: 8px; height: 8px; border-radius: 50%; flex: 0 0 auto; background: var(--tx3); }
.cal-dot.run { background: var(--brand); }
.cal-dot.ok { background: var(--ok); }
.cal-add { border: 1px dashed var(--line); background: transparent; border-radius: 7px; color: var(--tx3);
  cursor: pointer; padding: 6px; font-size: 14px; }
.cal-add:hover { border-color: var(--brand); color: var(--brand); }
.todo-wrap { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 12px; }
.todo-seg { border: 1px solid var(--line); border-radius: 10px; padding: 8px 10px; }
.ts-hd { font-weight: 600; font-size: 13px; margin-bottom: 6px; color: var(--tx2); }
.todo-row { display: flex; align-items: center; gap: 8px; padding: 6px 0; border-bottom: 1px dashed var(--line); }
.todo-row:last-child { border-bottom: 0; }
.tr-t { font-weight: 600; color: var(--brand); flex: 0 0 auto; font-size: 12.5px; }
.tr-b { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.tr-b small { color: var(--tx3); font-size: 12px; }
.stat-bar { margin-bottom: 10px; }
.sb-hd { display: flex; justify-content: flex-start; font-size: 12.5px; color: var(--tx2); margin-bottom: 4px; }
.sb-track { height: 8px; background: #eef2f7; border-radius: 6px; overflow: hidden; margin-bottom: 4px; }
.sb-fill { height: 100%; border-radius: 6px; min-width: 2px; }
.sb-fill.work { background: var(--brand); }
.sb-fill.plan { background: #c3d3ea; }

@media (max-width: 720px) {
  .cal-grid { grid-template-columns: repeat(7, 84px); }
}

/* ===== 移动端：表格转卡片（仅作用于 .tbl.cards，陪诊师主要用手机） ===== */
@media (max-width: 720px) {
  .tbl.cards thead { display:none; }
  .tbl.cards, .tbl.cards tbody, .tbl.cards tr, .tbl.cards td { display:block; width:100%; }
  .tbl.cards tr { background:var(--card); border:1px solid var(--line); border-radius:10px;
    margin-bottom:10px; padding:8px 10px; }
  .tbl.cards td { border:none; padding:5px 0; font-size:13.5px;
    display:flex; justify-content:space-between; gap:10px; text-align:right; }
  .tbl.cards td::before { content:attr(data-label); color:var(--tx3); font-size:12.5px;
    flex:0 0 auto; text-align:left; }
  .tbl.cards td.ops { display:flex; flex-wrap:wrap; justify-content:flex-start;
    padding-top:8px; border-top:1px dashed var(--line); }
  .tbl.cards td.ops::before { display:none; }
  .tbl.cards td.ops .btn { flex:1 1 auto; min-width:88px; }
}

/* 首页额度卡片 */
.quota-card { display:flex; align-items:center; justify-content:space-between; gap:16px;
  text-decoration:none; color:inherit; margin:12px 0; }
.quota-card.warn { border-color:var(--warn); background:#fffbf3; }
.quota-card:hover { box-shadow:0 2px 10px rgba(0,0,0,.06); }

/* ===== 新手引导向导（蜂鸟/美团众包风格：分步引导） ===== */
.modal.onboard { max-width: 480px; }
.ob-count { font-size: 12px; color: var(--tx2); margin-left: auto; }
.modal.onboard .modal-bd h4 { margin: 2px 0 10px; font-size: 16px; color: var(--tx); }
.modal.onboard .modal-bd p { color: var(--tx2); line-height: 1.75; margin: 0; }
.ob-flow { margin: 10px 0 2px; }
.ob-note { font-size: 12.5px; color: var(--tx2); margin: 8px 0 0; }
.onboard .stepper .step { min-width: 64px; }
.onboard .modal-ft { display: flex; justify-content: flex-start; align-items: center; }

/* ===== 骑手式首页 hero（陪诊师视角：今天赚多少、有什么单、下一步干啥） ===== */
.rider-hero { display: flex; align-items: center; gap: 18px; flex-wrap: wrap;
  background: linear-gradient(135deg, var(--brand), #2FA873); color: #fff;
  border-radius: 14px; padding: 18px 20px; margin: 12px 0; }
.rider-hero .rh-label { font-size: 12.5px; opacity: .85; }
.rider-hero .rh-num { font-size: 30px; font-weight: 700; line-height: 1.1; }
.rider-hero .rh-num.sm { font-size: 22px; }
.rider-hero .rh-sub { font-size: 12px; opacity: .8; margin-top: 2px; }
.rider-hero .rh-stat { text-align: center; min-width: 64px; }
.rider-hero .rh-cta { margin-left: auto; display: flex; gap: 8px; }
.rider-hero .rh-cta .btn { background: rgba(255,255,255,.16); border-color: transparent; color: #fff; }
.rider-hero .rh-cta .btn:hover { background: rgba(255,255,255,.28); }
.rider-hero .rh-cta .btn.ghost { background: transparent; border-color: rgba(255,255,255,.5); }

/* ===== Phase 1：任务大厅 / 收益看板 / 等级 ===== */
.sec-hd { display: flex; align-items: baseline; gap: 8px; margin: 18px 0 4px; }
.sec-hd h3 { font-size: 15px; margin: 0; }
.sec-hd .muted { font-size: 12.5px; }
.task-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 12px; margin: 10px 0; }
.task-card { padding: 14px; }
.task-card .tc-top { display: flex; justify-content: flex-start; align-items: center; gap: 8px; }
.task-card .tc-mid { font-weight: 600; margin: 8px 0 4px; }
.task-card .tc-meta { font-size: 12.5px; color: var(--tx2); line-height: 1.6; }
.task-card .btn.block { width: 100%; margin-top: 10px; }
.level-card { padding: 16px; }
.level-card .lc-hd { display: flex; justify-content: flex-start; align-items: center; }
.level-card .lvl-fill { height: 8px; background: var(--ok); border-radius: 6px; margin: 10px 0 6px; transition: width .3s; }
.level-card .lc-ft { font-size: 13px; color: var(--tx2); }
.level-card .lc-perk { font-size: 12.5px; color: var(--tx3); margin-top: 6px; }
.lvl { padding: 12px; opacity: .55; }
.lvl.on { opacity: 1; border-color: var(--ok); }
.lvl b { display: block; }
.lvl small { color: var(--tx3); }

/* ===== Phase 2：健康商城分类 tabs ===== */
.tabs { display: flex; gap: 6px; margin: 10px 0; flex-wrap: wrap; }
.tab { padding: 6px 14px; border: 1px solid var(--line); background: var(--card); border-radius: 999px;
  font-size: 13px; color: var(--tx2); cursor: pointer; }
.tab.on { background: var(--brand); color: #fff; border-color: transparent; }
.qc-t { font-size:12.5px; color:var(--tx3); }
.qc-v { font-size:20px; font-weight:600; margin-top:2px; }
.qc-r { text-align:right; font-size:12.5px; color:var(--tx2); }
.qc-hint { color:var(--warn); margin-top:4px; }
.card .kv { display:grid; grid-template-columns:repeat(auto-fill,minmax(180px,1fr)); gap:10px 18px; }
.card .kv .k { color:var(--tx3); font-size:12.5px; display:block; margin-bottom:2px; }

@media (max-width: 900px) {
  .tb-search { max-width: none; min-width: 72px; }
  .tb-title em { display: none; }
  .tb-right { gap: 6px; }
  .tb-right .btn.ghost.sm { padding: 4px 8px; font-size: 12px; }
  .who { max-width: 78px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .step { min-width: 108px; }
}

/* ============ 渠道需求：二维码 + 进度时间线 ============ */
.qrline { display: flex; gap: 18px; align-items: flex-start; flex-wrap: wrap; margin-top: 12px; }
.qrline .qr, .qr { width: 180px; height: 180px; background: #fff; border: 1px solid var(--line); border-radius: 10px; }
.qrline .qr-side { flex: 1; min-width: 220px; }
.qrline code { display: block; word-break: break-all; background: #f4f9f5; border: 1px solid var(--line);
  padding: 8px 10px; border-radius: 10px; font-size: 12.5px; color: var(--tx2); margin-bottom: 10px; }
.tl { margin-top: 10px; border-left: 2px solid var(--line); padding-left: 18px; }
.tl-row { position: relative; padding: 5px 0; font-size: 13.5px; color: var(--tx); }
.tl-row::before { content: ''; position: absolute; left: -24px; top: 11px; width: 10px; height: 10px;
  border-radius: 50%; background: var(--brand); }
.tl-time { color: var(--tx3); margin-left: 10px; font-size: 12.5px; }
.tl-note { color: var(--tx2); }
@media (max-width: 900px) { .qrline .qr { width: 140px; height: 140px; } }

/* 团队管理：权限分组标题 + 协作看板快捷卡 */
.perm-sub { margin: 12px 0; }
.perm-sub > b { display:block; font-size: 13px; color: var(--tx2); margin-bottom: 6px; }
.quick-card .card-bd { padding: 14px 16px; }

/* ===== Phase 3：激励闭环（积分 / 邀请 / 勋章） ===== */
.inv-code { font-size: 24px; font-weight: 700; letter-spacing: 2px; color: var(--brand);
  background: #E7F5EF; border: 1px dashed var(--brand); border-radius: 10px; padding: 12px; text-align: center; margin: 10px 0; }
.bd-icon { font-size: 34px; text-align: center; margin-bottom: 6px; }
.plist { display: flex; flex-direction: column; gap: 8px; margin-top: 8px; }
.prow { display: flex; align-items: center; justify-content: flex-start; gap: 10px;
  padding: 10px 12px; background: var(--card); border: 1px solid var(--line); border-radius: 10px; }
.prow small { color: var(--tx3); }
.lvl .bd-icon { opacity: .4; }
.lvl.on .bd-icon { opacity: 1; }
.hint-inner { background: #E7F5EF; border-color: transparent; color: var(--tx2); }
.ob-invite { margin-top: 12px; padding-top: 12px; border-top: 1px dashed var(--line); }
.ob-invite label { display: block; font-size: 13px; color: var(--tx2); margin-bottom: 6px; }
.ob-invite .inp { width: 100%; margin-bottom: 6px; }

/* ==================================================================
   蜂鸟众包式界面：今天 / 我的任务 / 收益 / 我的
   面向新入行陪诊师（大字、强对比、单一主行动、44px+ 可点区域）
   ================================================================== */

/* ---------- 桌面侧栏「全部功能」次级区 ---------- */
.nav-sec {
  margin-top: 14px; padding-top: 10px; border-top: 1px solid var(--line);
  display: flex; flex-direction: column; gap: 2px;
}
.nav-sec-t { font-size: 12px; color: var(--tx3); letter-spacing: .08em; padding: 0 12px 6px; }

/* ---------- 个人中心 · 全部功能九宫格 ---------- */
/* ⚠️ 用户 2026-10-17：`.allfn` 被 4 处共用（首页快捷区 / 管理端聚合卡 / 管理模块 / 个人中心全部功能）。
   需求14 只要求「工作台首页功能区」一排两个，故保持默认 4 列，另用 .allfn-2col 只作用于首页与聚合卡，
   避免把个人中心「全部功能」也带歪（曾整片改成 2 列造成个人中心布局松散）。 */
.allfn { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; }
.allfn-item {
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 7px;
  min-height: 76px; padding: 12px 6px; background: #fff; border: 1px solid var(--line);
  border-radius: 10px; cursor: pointer; text-align: center; transition: .15s;
}
.allfn-item i { font-style: normal; font-size: 22px; line-height: 1; color: var(--brand); }
.allfn-item span { font-size: 12px; color: var(--tx2); line-height: 1.3; }
.allfn-item:active { background: var(--brand-tint); border-color: #cfe6db; }
.allfn-item.danger i, .allfn-item.danger span { color: var(--danger); }

/* 需求14：工作台首页功能区「一排两个」—— 仅作用于首页快捷区与管理端聚合卡 */
.allfn.allfn-2col { grid-template-columns: repeat(2, 1fr) !important; gap: 12px; }
.allfn.allfn-2col .allfn-item {
  flex-direction: row; align-items: center; justify-content: flex-start; gap: 12px;
  min-height: 62px; padding: 13px 15px; border-radius: 14px; text-align: left;
  box-shadow: 0 1px 3px rgba(17,58,122,.05);
}
.allfn.allfn-2col .allfn-item i {
  flex: 0 0 auto; width: 38px; height: 38px; border-radius: 11px; font-size: 19px;
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--brand-tint, #eef4fd);
}
.allfn.allfn-2col .allfn-item span { font-size: 13.5px; font-weight: 600; color: var(--tx); }

/* ---------- 需求3：管理端工作台 · 待办与审批聚合卡 ---------- */
.apx-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(148px, 1fr)); gap: 10px; }
.apx-card {
  display: flex; flex-direction: column; gap: 2px; text-decoration: none; color: inherit;
  background: #fff; border: 1px solid var(--line); border-radius: 10px; padding: 12px 14px;
  transition: border-color .15s ease, transform .12s ease, box-shadow .15s ease;
}
.apx-card:hover { border-color: var(--tx3); transform: translateY(-1px); box-shadow: 0 4px 12px rgba(26,84,183,.10); }
.apx-card .ax-n { font-size: 24px; font-weight: 700; line-height: 1.2; }
.apx-card .ax-t { font-size: 13px; color: var(--tx2); }
.apx-card .ax-s { font-size: 11.5px; color: var(--tx3); }
.apx-card .ax-go { font-size: 12px; color: var(--brand); margin-top: 4px; }
.apx-card.hot { border-color: var(--warn); background: #fffaf1; }
.apx-card.hot .ax-n { color: var(--warn); }

/* ---------- 今天 · 蜂鸟式骑手 hero ---------- */
.fy-hero {
  border-radius: var(--radius); padding: 18px 20px; margin-bottom: 14px; color: #fff;
  background: linear-gradient(135deg, var(--brand) 0%, var(--brand-d) 100%);
  box-shadow: var(--shadow-2);
}
.fy-hero .fh-main { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.fy-hero .fh-side { display: flex; gap: 18px; margin-top: 12px; }
.fy-hero .fh-num { font-size: 40px; font-weight: 700; line-height: 1.1; font-variant-numeric: tabular-nums; }
.fy-hero .fh-num.sm { font-size: 22px; font-weight: 700; line-height: 1.2; }
.fy-hero .fh-label { font-size: 13px; color: rgba(255,255,255,.82); margin-top: 4px; }
.fy-hero .fh-main .fh-label { margin-top: 0; }

/* 唯一主行动按钮：大、圆、显眼 —— 每屏只应有一个 */
.fy-cta {
  display: flex; align-items: center; justify-content: center; width: 100%;
  min-height: 52px; margin-top: 16px; border: 0; border-radius: 999px;
  background: #fff; color: var(--brand-d); font-size: 17px; font-weight: 600;
  font-family: inherit; cursor: pointer; text-decoration: none;
  box-shadow: 0 6px 16px rgba(0,0,0,.16); transition: .15s;
}
.fy-cta:active { transform: scale(.985); }

/* 首页 Hero 快捷按钮行：新建工单 / 新建客户 —— 复用品牌色 token */
.fy-cta-row{display:flex;gap:10px;margin:12px 16px 0}
.fy-cta-btn{flex:1;text-align:center;padding:11px 10px;border-radius:12px;font-size:15px;font-weight:600;background:#eef3fb;color:var(--brand);border:1px solid #dbe6fb}
.fy-cta-btn.primary{background:var(--brand);color:#fff;border-color:var(--brand)}
.fy-cta-btn:active{transform:translateY(1px)}

/* ---------- 三大场景卡：待开始 / 进行中 / 待记录 ---------- */
.fy-scenes { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-bottom: 14px; }
.fy-scene {
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px;
  min-height: 78px; padding: 14px 8px; background: #fff; border: 1px solid var(--line);
  border-radius: 10px; cursor: pointer; transition: .15s;
}
.fy-scene .fs-num { font-size: 26px; font-weight: 700; color: var(--brand); line-height: 1.15; font-variant-numeric: tabular-nums; }
.fy-scene .fs-label { font-size: 12.5px; color: var(--tx2); }
.fy-scene:active { transform: scale(.98); background: #f7fafe; }

/* ---------- 今日时间轴 ---------- */
.fy-timeline { display: flex; flex-direction: column; gap: 8px; }
.fy-tl-item {
  display: flex; align-items: center; gap: 12px; min-height: 56px;
  padding: 12px 14px; background: #fff; border: 1px solid var(--line);
  border-radius: 10px; cursor: pointer; transition: .15s;
}
.fy-tl-item:active { background: var(--brand-tint); }
.fy-tl-item .ft-time { flex: none; font-size: 15px; font-weight: 700; font-variant-numeric: tabular-nums; }
.fy-tl-item .ft-name { flex: 1; min-width: 0; font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fy-tl-item .ft-pill {
  flex: none; font-size: 12px; padding: 3px 10px; border-radius: 999px;
  background: var(--brand-tint); color: var(--brand-d); white-space: nowrap;
}
.fy-tl-item .ft-pill.warn { background: var(--aux-tint); color: var(--aux-strong); }
.fy-tl-item .ft-pill.danger { background: #fdeceb; color: var(--danger); }

/* ---------- 常用功能快捷入口 ---------- */
.fy-quick { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
.fy-qitem {
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px;
  min-height: 72px; padding: 12px 6px; background: #fff; border: 1px solid var(--line);
  border-radius: 10px; cursor: pointer; text-align: center; transition: .15s;
}
.fy-qitem i { font-style: normal; font-size: 21px; line-height: 1; color: var(--brand); }
.fy-qitem span { font-size: 12.5px; color: var(--tx2); }
.fy-qitem:active { background: var(--brand-tint); }

/* ---------- 我的任务 · 大卡片 ---------- */
.task-card-lg {
  padding: 16px; border: 1px solid var(--line); border-radius: var(--radius);
  background: #fff; box-shadow: var(--shadow-1); margin-bottom: 12px;
}
.task-card-lg .btn { margin-top: 12px; }

/* ---------- 大号按钮 ---------- */
.btn.lg { height: 48px; padding: 0 20px; font-size: 16px; border-radius: 12px; font-weight: 600; }
.btn.lg.block { width: 100%; }

/* ---------- 移动端放大：新人和长者优先 ---------- */
@media (max-width: 900px) {
  .fy-hero { padding: 16px; }
  .fy-hero .fh-num { font-size: 36px; }
  .fy-cta { min-height: 54px; font-size: 17.5px; }
  .btn.lg { height: 50px; font-size: 16.5px; }
  .allfn-item, .fy-qitem, .fy-scene { min-height: 72px; }
}
@media (max-width: 400px) {
  .allfn { gap: 8px; }
  .allfn-item { padding: 10px 4px; }
  .allfn-item span { font-size: 11.5px; }
}

/* ==================================================================
   动态交互层（UI 优化 · 仅视觉/交互，不改动任何结构与业务逻辑）
   统一使用 v1.1 设计 token；尊重 prefers-reduced-motion
   ================================================================== */

/* —— 统一图标呈现：品牌色圆角磁贴，提升一致性与现代感 —— */
.sidebar .nav-item:not(.danger) i,
.fy-qitem i, .allfn-item i, .sch-card i, .file-card i {
  display: inline-flex; align-items: center; justify-content: center;
  border-radius: 9px; background: var(--brand-tint); color: var(--brand-d);
  font-style: normal; opacity: 1; flex: none;
  transition: transform .18s ease, background .18s ease;
}
.sidebar .nav-item:not(.danger) i { width: 28px; height: 28px; border-radius: 8px; font-size: 15px; }
.fy-qitem i { width: 40px; height: 40px; border-radius: 11px; font-size: 21px; }
.allfn-item i { width: 40px; height: 40px; border-radius: 11px; font-size: 21px; }
.sch-card i { width: 34px; height: 34px; border-radius: 9px; font-size: 17px; }
.file-card i { width: 38px; height: 38px; border-radius: 10px; font-size: 19px; }
.sidebar .nav-item:hover:not(.danger) i { transform: scale(1.08); background: #dbe9fb; }
.sidebar .nav-item.active i { background: var(--brand); }
.fy-qitem:hover i, .allfn-item:hover i { transform: scale(1.08) translateY(-1px); background: #dbe9fb; }
.sch-card:hover i, .file-card:hover i { transform: scale(1.06); }

/* —— 关键帧 —— */
@keyframes ybUp   { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
@keyframes ybIn   { from { opacity: 0; } to { opacity: 1; } }
@keyframes ybPop  { from { opacity: 0; transform: translateY(14px) scale(.97); } to { opacity: 1; transform: none; } }
@keyframes ybMask { from { opacity: 0; } to { opacity: 1; } }

/* —— 入场动画（SPA 每次切页自然重放，呈现活感） —— */
.kpi, .card, .bcard, .sch-card, .file-card, .prow, .task-card-lg,
.quota-bar, .quota-card, .plan-card, .level-card, .fy-scene, .fy-qitem,
.allfn-item, .ap-item, .auth-card, .fy-hero, .rider-hero {
  animation: ybUp .42s cubic-bezier(.2,.7,.2,1) both;
}
.todo li, .tl-row { animation: ybUp .34s ease both; }

/* 错落入场：主要网格 */
.kpis > .kpi:nth-child(2){animation-delay:.05s}.kpis > .kpi:nth-child(3){animation-delay:.10s}.kpis > .kpi:nth-child(4){animation-delay:.15s}.kpis > .kpi:nth-child(5){animation-delay:.20s}.kpis > .kpi:nth-child(6){animation-delay:.25s}
.fy-scenes > .fy-scene:nth-child(2){animation-delay:.06s}.fy-scenes > .fy-scene:nth-child(3){animation-delay:.12s}
.fy-quick > .fy-qitem:nth-child(2){animation-delay:.04s}.fy-quick > .fy-qitem:nth-child(3){animation-delay:.08s}.fy-quick > .fy-qitem:nth-child(4){animation-delay:.12s}.fy-quick > .fy-qitem:nth-child(5){animation-delay:.16s}.fy-quick > .fy-qitem:nth-child(6){animation-delay:.20s}
.allfn > .allfn-item:nth-child(2){animation-delay:.03s}.allfn > .allfn-item:nth-child(3){animation-delay:.06s}.allfn > .allfn-item:nth-child(4){animation-delay:.09s}.allfn > .allfn-item:nth-child(5){animation-delay:.12s}.allfn > .allfn-item:nth-child(6){animation-delay:.15s}.allfn > .allfn-item:nth-child(7){animation-delay:.18s}.allfn > .allfn-item:nth-child(8){animation-delay:.21s}
.task-grid > .task-card:nth-child(2){animation-delay:.05s}.task-grid > .task-card:nth-child(3){animation-delay:.10s}.task-grid > .task-card:nth-child(4){animation-delay:.15s}.task-grid > .task-card:nth-child(5){animation-delay:.20s}.task-grid > .task-card:nth-child(6){animation-delay:.25s}
.plan-cards > .plan-card:nth-child(2){animation-delay:.06s}.plan-cards > .plan-card:nth-child(3){animation-delay:.12s}.plan-cards > .plan-card:nth-child(4){animation-delay:.18s}
.board > .bcol:nth-child(2){animation-delay:.06s}.board > .bcol:nth-child(3){animation-delay:.12s}.board > .bcol:nth-child(4){animation-delay:.18s}.board > .bcol:nth-child(5){animation-delay:.24s}

/* —— 悬停微交互 —— */
.btn { transition: background .18s ease, border-color .18s ease, box-shadow .18s ease, transform .12s ease; }
.btn:hover { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(26,84,183,.14); }
.btn:active { transform: translateY(0); }
.btn.primary:hover { box-shadow: 0 6px 16px rgba(18,64,143,.28); transform: translateY(-1px); }

.card { transition: box-shadow .22s ease, transform .22s ease, border-color .22s ease; }
.card:hover { box-shadow: var(--shadow-2); transform: translateY(-2px); border-color: #dbe6fb; }

.kpi { transition: box-shadow .22s ease, transform .22s ease, border-color .22s ease; }
.kpi:hover { box-shadow: var(--shadow-2); transform: translateY(-2px); border-color: #cfe6db; }
a.kpi:hover { border-color: #cfe6db; }

.bcard:hover { box-shadow: 0 8px 22px rgba(26,84,183,.18); transform: translateY(-2px); }

.sch-card, .file-card { transition: transform .16s ease, box-shadow .16s ease, border-color .16s ease; }
.sch-card:hover, .file-card:hover { transform: translateY(-2px); box-shadow: var(--shadow-2); }

.sidebar .nav-item { transition: background .15s ease, color .15s ease, transform .15s ease; }
.sidebar .nav-item:hover { transform: translateX(3px); }

.tbl tbody tr, .todo li { transition: background .15s ease; }
.fy-scene, .fy-qitem, .allfn-item, .task-card-lg {
  transition: transform .16s ease, box-shadow .16s ease, background .16s ease, border-color .16s ease;
}
.fy-scene:hover, .fy-qitem:hover, .task-card-lg:hover {
  transform: translateY(-3px); box-shadow: var(--shadow-2); border-color: #cfe6db;
}
.allfn-item:hover { transform: translateY(-2px); box-shadow: var(--shadow); border-color: #cfe6db; }

.day { transition: border-color .15s ease, background .15s ease, transform .15s ease, box-shadow .15s ease; }
.day:hover { transform: translateY(-2px); box-shadow: var(--shadow); }
.day.on { transform: translateY(-1px); }

.s-dot { transition: background .3s ease, box-shadow .3s ease, border-color .3s ease, color .3s ease; }
.bar i { transition: width .4s cubic-bezier(.2,.8,.2,1); }
.qb-fill { transition: width .4s cubic-bezier(.2,.8,.2,1); }

.tab, .stab, .chipx, .pill { transition: background .15s ease, color .15s ease, border-color .15s ease, box-shadow .15s ease; }
.tabs .tab { transition: background .2s ease, color .2s ease, box-shadow .2s ease; }

/* 大 CTA 悬停抬升 */
.fy-cta { transition: transform .16s ease, box-shadow .16s ease; }
.fy-cta:hover { transform: translateY(-2px); box-shadow: 0 10px 24px rgba(0,0,0,.2); }
.fy-cta-btn { transition: transform .15s ease, box-shadow .15s ease, background .15s ease, border-color .15s ease; }
.fy-cta-btn:hover { transform: translateY(-2px); box-shadow: 0 6px 16px rgba(26,84,183,.16); }
.fy-cta-btn.primary:hover { box-shadow: 0 8px 20px rgba(18,64,143,.32); }

/* 顶部品牌 logo 微交互 */
.tb-logo { transition: transform .2s ease, background .2s ease; }
.tb-logo:hover { transform: scale(1.06) rotate(-2deg); }

/* 聚焦可见态（无障碍 + 高级感） */
.btn:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible,
.tab:focus-visible, .stab:focus-visible, .nav-item:focus-visible,
.allfn-item:focus-visible, .fy-qitem:focus-visible, .fy-scene:focus-visible,
.fy-cta:focus-visible, .fy-cta-btn:focus-visible, .day:focus-visible {
  outline: 2px solid var(--brand-l); outline-offset: 2px;
}

/* 弹窗入场 */
.mask { animation: ybMask .2s ease both; }
.modal { animation: ybPop .26s cubic-bezier(.2,.8,.2,1) both; }

/* 品牌色选区 + 平滑滚动 */
::selection { background: var(--brand-tint); color: var(--brand-d); }
html { scroll-behavior: smooth; }

/* 尊重减少动态偏好 */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .001ms !important;
    animation-delay: 0ms !important;
    transition-duration: .001ms !important;
    scroll-behavior: auto !important;
  }
}

/* ============ 新模块：被浏览/曝光 · 医疗资源协作 · 转单市场 · 登录二维码 ============ */
a.fy-focus-card { display:block; text-decoration:none; color:#fff; background:linear-gradient(135deg,var(--brand) 0%,var(--brand-d,#12408f) 100%); border-radius:14px; padding:16px 18px; margin:14px 0; box-shadow:0 6px 18px rgba(26,84,183,.16); transition:transform .15s ease, box-shadow .15s ease; }
a.fy-focus-card:hover { transform:translateY(-2px); box-shadow:0 10px 24px rgba(26,84,183,.22); }
.fy-focus-card .ff-cap { display:block; font-size:13px; color:rgba(255,255,255,.92); }
.fy-focus-card .ff-sub { display:block; font-size:12px; color:rgba(255,255,255,.72); margin-top:4px; }

.card.focus-hero { padding:18px 20px; }
.focus-hero .fh-watch { display:flex; align-items:baseline; gap:10px; margin-bottom:14px; }
.focus-hero .fh-num { font-size:44px; font-weight:700; line-height:1; color:var(--brand); font-variant-numeric:tabular-nums; }
.focus-hero .fh-num.sm { font-size:24px; }
.focus-hero .fh-cap { font-size:13px; color:var(--tx2); }
.focus-hero .fh-weight { display:flex; align-items:center; gap:12px; flex-wrap:wrap; }
.focus-hero .fh-score { font-size:28px; font-weight:700; color:var(--brand-d,#12408f); font-variant-numeric:tabular-nums; }
.focus-hero .fh-tier { font-size:12.5px; font-weight:600; padding:4px 12px; border-radius:999px; background:var(--brand-tint,#e8f4ee); color:var(--brand-d,#12408f); }
.focus-hero .fh-bar { flex:1; min-width:120px; height:8px; border-radius:999px; background:var(--line); overflow:hidden; }
.focus-hero .fh-bar > i { display:block; height:100%; background:linear-gradient(90deg,var(--brand-l,#3aa776),var(--brand)); border-radius:999px; }

.dims { display:flex; flex-direction:column; gap:12px; margin-top:6px; }
.dim { display:grid; grid-template-columns:1fr auto; grid-template-areas:"n v" "bar bar"; row-gap:5px; column-gap:12px; align-items:center; }
.dim-n { grid-area:n; font-size:12.5px; color:var(--tx2); }
.dim-v { grid-area:v; font-size:12.5px; color:var(--tx); font-weight:600; }
.dim-bar { grid-area:bar; height:6px; border-radius:999px; background:var(--line); overflow:hidden; }
.dim-bar > i { display:block; height:100%; background:linear-gradient(90deg,var(--brand-l,#3aa776),var(--brand)); border-radius:999px; }

.card.res-item, .card.trans-item { padding:16px 18px; margin-bottom:12px; }
.res-item .ri-hd, .trans-item .ri-hd { display:flex; justify-content:space-between; align-items:flex-start; gap:12px; }
.res-item .ri-hd b, .trans-item .ri-hd b { font-size:15px; color:var(--tx); }
.res-item .ri-meta, .trans-item .ri-meta { font-size:12.5px; color:var(--tx3); margin:6px 0; }
.res-item .ri-budget, .trans-item .ri-budget { font-size:14px; font-weight:600; color:var(--brand-d,#12408f); }
/* 规则1/3（用户 2026-10-17）：接单人数 + 已报价标记 */
.res-item .ri-stats { display:flex; align-items:center; gap:8px; font-size:12.5px; color:var(--tx2,#5c6b81); margin-top:6px; }
.res-item .ri-foot, .trans-item .ri-foot { display:flex; justify-content:space-between; align-items:center; gap:12px; margin-top:12px; flex-wrap:wrap; }

/* ============ 待审批角标 ============ */
.nav-item { position:relative; }
.nav-item .badge {
  position:absolute; top:6px; right:50%; margin-right:-22px;
  min-width:18px; height:18px; padding:0 5px; border-radius:999px;
  background:var(--danger,#c0392b); color:#fff; font-size:11px; font-weight:700;
  display:flex; align-items:center; justify-content:center; line-height:1;
  box-shadow:0 0 0 2px var(--card,#fff);
}
.tabbar .nav-item .badge { margin-right:-26px; }

/* ============ 更多选项（选填）折叠区 ============ */
.field-group { margin-top:10px; border:1px dashed var(--line,#e3e8e5); border-radius:12px; padding:4px 12px 10px; background:rgba(26,84,183,.03); }
.field-group > summary { cursor:pointer; font-size:13px; font-weight:600; color:var(--tx2,#6b7c75); padding:8px 0; list-style:none; }
.field-group > summary::-webkit-details-marker { display:none; }
.field-group > summary::before { content:"▸ "; color:var(--brand,#0E8B57); }
.field-group[open] > summary::before { content:"▾ "; }

/* ============ 资源与合作 ============ */
/* 需求3（用户 2026-10-17）：全局「返回上一级」浮钮（仅移动端显示，非首页时可见） */
#global-back { position: fixed; left: 10px; top: 50%; transform: translateY(-50%); z-index: 9998;
  width: 38px; height: 38px; border-radius: 50%; border: 1px solid var(--line, #dfe8f6);
  background: rgba(255,255,255,.95); box-shadow: 0 2px 12px rgba(17,58,122,.16);
  font-size: 22px; line-height: 1; color: var(--brand, #1a54b7); display: none; cursor: pointer; }
@media (max-width: 900px) { #global-back { display: block; } }

/* 七.2 公告栏（用户 2026-10-17）：首页顶部醒目展示 */
.announce-card .card-bd { padding: 8px 16px 12px; }
.ann-item { padding: 8px 10px; border-radius: 8px; margin-bottom: 6px; }
.ann-item + .ann-item { border-top: 1px dashed var(--line, #dfe8f6); }
.ann-item.imp { background: #fff4f0; border-left: 3px solid #d9534f; }
.ann-item.pinned { background: #fff9ec; border-left: 3px solid #e8943b; }
.ann-title { display: flex; align-items: center; font-size: 13.5px; }
.ann-body { font-size: 12.5px; color: var(--tx3, #8593ad); margin-top: 3px; line-height: 1.6; }

/* 1.3 需求中心筛选面板（用户 2026-10-17）：关键词 + 城市 + 医院 + 资源类型 + 时间 */
.hub-filter { display: flex; flex-wrap: wrap; gap: 8px; margin: 0 0 14px; }
.hub-filter .inp { flex: 1 1 150px; min-width: 0; }
.hub-filter #hf-kw { flex: 2 1 220px; }
.hub-filter #hf-clear { flex: 0 0 auto; }
@media (max-width: 640px) {
  .hub-filter .inp { flex: 1 1 calc(50% - 4px); }
  .hub-filter #hf-kw { flex: 1 1 100%; }
}
/* 用户要求（2026-10-17）：页签重设计为「现代分段控件」+ 两行分组
   —— 第一行「市场」（全部 / 资源协作 / 转单），第二行「我的」（我的发布 / 我的报价）。
   不再横向滚动：用户反馈单行滚动时绿色两个页签被藏在右侧，很多人不知道能滑。
   两行分组后五个页签一眼全见，"我的"独立成行 + 淡绿底色，权重反而更高。 */
.hub-seg {
  display: flex; flex-direction: column; gap: 6px;
  margin: 4px 0 14px; padding: 5px;
  background: var(--bg2, #f1f5fb); border: 1px solid var(--line, #e3e8e5);
  border-radius: 14px;
}
.hub-seg-row { display: flex; gap: 6px; }
.hub-seg::-webkit-scrollbar { display: none; }
.hub-seg .seg {
  flex: 1 1 0; min-width: 0;
  display: flex; align-items: center; justify-content: center; gap: 7px;
  padding: 10px 10px; border: 0; border-radius: 10px; background: transparent;
  font-family: inherit; font-size: 13.5px; font-weight: 600;
  color: var(--tx2, #5c6b81); cursor: pointer; white-space: nowrap;
  transition: background .18s ease, color .18s ease, box-shadow .18s ease;
}
.hub-seg .seg:hover:not(.on) { background: rgba(26, 84, 183, .06); color: var(--brand, #1a54b7); }
.hub-seg .seg.on {
  background: #fff; color: var(--brand, #1a54b7); font-weight: 700;
  box-shadow: 0 2px 8px rgba(26, 84, 183, .14), 0 0 0 1px rgba(26, 84, 183, .10);
}
.hub-seg .seg-ico { font-size: 15px; line-height: 1; flex: none; }
.hub-seg .seg-n {
  min-width: 20px; padding: 1px 7px; border-radius: 999px; text-align: center;
  background: rgba(26, 84, 183, .12); color: var(--brand, #1a54b7);
  font-size: 11.5px; font-weight: 700; font-variant-numeric: tabular-nums;
}
.hub-seg .seg.on .seg-n { background: var(--brand, #1a54b7); color: #fff; }
/* 「我的」一行：淡绿底色 + 选中态绿色，与市场行拉开 */
.hub-seg-mine { background: rgba(14, 139, 87, .07); border-radius: 10px; padding: 4px; }
.hub-seg-mine .seg:hover:not(.on) { background: rgba(14, 139, 87, .10); color: #0E8B57; }
.hub-seg .seg.on[data-tab="mine"], .hub-seg .seg.on[data-tab="myq"] { color: #0E8B57; }
.hub-seg .seg.on[data-tab="mine"] .seg-n,
.hub-seg .seg.on[data-tab="myq"] .seg-n { background: #0E8B57; }
.hub-seg-mine .seg.on { box-shadow: 0 2px 8px rgba(14, 139, 87, .16), 0 0 0 1px rgba(14, 139, 87, .22); }
@media (max-width: 640px) {
  .hub-seg { border-radius: 12px; }
  .hub-seg .seg { font-size: 12.5px; padding: 9px 6px; gap: 5px; }
}

/* 用户要求（2026-10-17）：聊天输入法弹出时隐藏底部导航。
   tabbar 是 position:fixed 且内容区为它预留了 padding-bottom，
   键盘弹出后这部分预留高度会把聊天窗往下顶、使输入条落到键盘后面。 */
body.kb-on .tabbar { display: none !important; }
/* 用户要求（2026-10-17）：需求卡片类型角标更明显（加粗 + 更饱和 + 色点 + 描边） */
.hub-type-badge {
  display:inline-flex; align-items:center; gap:5px;
  padding:4px 12px; border-radius:6px; font-size:12px; font-weight:700;
  margin-right:10px; letter-spacing:.3px; border:1.5px solid transparent;
}
.hub-type-badge::before { content:""; width:7px; height:7px; border-radius:50%; background:currentColor; flex:none; }
.hub-type-badge.res { background:rgba(26,84,183,.16); color:#0F3E8C; border-color:rgba(26,84,183,.45); }
.hub-type-badge.trans { background:rgba(232,148,59,.22); color:#8A4E0E; border-color:rgba(232,148,59,.55); }

/* 需求卡片状态 tag（已接单 / 待接单 / 待指派 等）更显著 */
.res-item .ri-hd .tag, .trans-item .ri-hd .tag {
  font-weight:700; font-size:12.5px; padding:3px 11px; border:1px solid transparent; white-space:nowrap;
}
.res-item .ri-hd .tag.ok, .trans-item .ri-hd .tag.ok { background:rgba(14,139,87,.18); color:#0B6B45; border-color:rgba(14,139,87,.42); }
.res-item .ri-hd .tag.warn, .trans-item .ri-hd .tag.warn { background:rgba(232,148,59,.22); color:#8A4E0E; border-color:rgba(232,148,59,.52); }
.res-item .ri-hd .tag.run, .trans-item .ri-hd .tag.run { background:rgba(26,84,183,.16); color:#0F3E8C; border-color:rgba(26,84,183,.42); }
.res-item .ri-hd .tag.danger, .trans-item .ri-hd .tag.danger { background:rgba(217,63,63,.16); color:#A52020; border-color:rgba(217,63,63,.42); }

/* 资源与合作页：未读消息显著横幅（有未读才出现） */
.hub-unread-banner {
  display:flex; align-items:center; gap:10px;
  margin:0 0 14px; padding:12px 16px; border-radius:12px;
  background:linear-gradient(90deg,#1A54B7,#2F9BF0); color:#fff;
  font-size:14.5px; font-weight:600; text-decoration:none;
  box-shadow:0 4px 14px rgba(26,84,183,.28);
  animation:hubUbPulse 2.4s ease-in-out infinite;
}
.hub-unread-banner b { font-size:17px; }
.hub-unread-banner .hub-ub-go { margin-left:auto; font-size:13px; opacity:.92; }
.hub-unread-banner .hub-ub-dot {
  width:10px; height:10px; border-radius:50%; background:#FFD166; flex:none;
  animation:hubUbDot 1.6s infinite;
}
@keyframes hubUbPulse { 0%,100%{box-shadow:0 4px 14px rgba(26,84,183,.28)} 50%{box-shadow:0 4px 22px rgba(26,84,183,.5)} }
@keyframes hubUbDot { 0%{box-shadow:0 0 0 0 rgba(255,209,102,.75)} 70%{box-shadow:0 0 0 9px rgba(255,209,102,0)} 100%{box-shadow:0 0 0 0 rgba(255,209,102,0)} }

/* 工作台首页：新消息醒目浮层提醒（点击进「站内沟通」） */
.newmsg-toast {
  position:fixed; left:50%; transform:translateX(-50%);
  top:calc(env(safe-area-inset-top,0px) + 74px);
  z-index:9999; min-width:250px; max-width:88vw;
  padding:12px 20px; border-radius:14px; cursor:pointer;
  background:linear-gradient(135deg,#1A54B7,#2F9BF0); color:#fff;
  box-shadow:0 10px 30px rgba(26,84,183,.45);
  animation:ntIn .28s ease-out, ntFloat 2.6s ease-in-out .3s infinite;
}
.newmsg-toast .nt-main { font-size:16px; }
.newmsg-toast .nt-main b { font-size:18px; }
.newmsg-toast .nt-sub { font-size:12.5px; opacity:.9; margin-top:3px; }
@keyframes ntIn { from{opacity:0; transform:translateX(-50%) translateY(-16px)} to{opacity:1; transform:translateX(-50%) translateY(0)} }
@keyframes ntFloat { 0%,100%{box-shadow:0 10px 30px rgba(26,84,183,.45)} 50%{box-shadow:0 10px 38px rgba(47,155,240,.6)} }
@media (prefers-reduced-motion: reduce) {
  .newmsg-toast, .hub-unread-banner, .hub-unread-banner .hub-ub-dot { animation:none; }
}

/* ============ 底部 Tab 图标优化（更大字号 + 更大触控区） ============ */
.tabbar .nav-item { padding-top:8px; padding-bottom:8px; }
.tabbar .nav-item i { font-size:22px; line-height:1.1; }
.tabbar .nav-item span { font-size:11.5px; margin-top:2px; }

/* ============ #10 管理员侧栏「全部功能」分组 ============ */
.nav-group { display:flex; flex-direction:column; gap:2px; }
.nav-group + .nav-group { margin-top:8px; }
.nav-group-t {
  font-size:11px; color:var(--tx3); letter-spacing:.1em;
  padding:4px 12px 2px; opacity:.92; white-space:nowrap;
}

/* ============ #10 后台管理：分组卡片式页签 ============ */
.admin-groups {
  display:grid; grid-template-columns:repeat(auto-fill, minmax(230px, 1fr));
  gap:10px; margin-bottom:14px;
}
.admin-group {
  border:1px solid var(--line,#e3e8e5); border-radius:12px;
  padding:10px 12px 12px; background:var(--card,#fff);
}
.admin-group .ag-t {
  font-size:12px; font-weight:700; color:var(--tx2,#6b7c75);
  letter-spacing:.06em; margin-bottom:8px; display:flex; align-items:center; gap:6px;
}
.admin-group .ag-t::before {
  content:""; width:4px; height:14px; border-radius:2px;
  background:var(--brand,#0E8B57); flex:none;
}
.admin-group .ag-items { display:flex; flex-wrap:wrap; gap:6px; }

/* ============ #1 首页「今日」hero（陪诊师，粘性体验） ============ */
.fy-hero .ft-row { display:flex; align-items:flex-end; gap:22px; flex-wrap:wrap; }
.fy-hero .ft-stat { min-width:72px; text-decoration:none; }
.fy-hero .ft-stat.main { min-width:110px; }
.fy-hero .fh-num.warn { color:#ffd98a; -webkit-text-fill-color:#ffd98a; }
.fy-hero .quota-badge { margin-top:12px; }
.quota-badge {
  display:inline-flex; align-items:center; gap:4px; padding:3px 10px;
  border-radius:999px; font-size:12px; font-weight:600; text-decoration:none;
  background:rgba(255,255,255,.16); color:rgba(255,255,255,.92);
  border:1px solid rgba(255,255,255,.3);
}
.quota-badge.warn { background:rgba(255,215,130,.24); color:#ffe9c2; border-color:rgba(255,215,130,.5); }
.app-hero .quota-badge {
  background:rgba(26,84,183,.1); color:var(--brand-d,#12408f);
  border:1px solid rgba(26,84,183,.22); margin-top:8px; font-weight:600;
}
.app-hero .quota-badge.warn {
  background:rgba(232,148,59,.14); color:#9A5A16; border-color:rgba(232,148,59,.4);
}
.fy-hero .ft-ctas { display:flex; gap:10px; margin-top:14px; flex-wrap:wrap; }
.fy-hero .ft-ctas .fy-cta-btn {
  flex:1; min-width:104px; text-decoration:none;
  background:rgba(255,255,255,.16); color:#fff; border:1px solid rgba(255,255,255,.35);
}
.fy-hero .ft-ctas .fy-cta-btn.primary {
  background:#fff; color:var(--brand-d,#12408f); border-color:#fff;
  box-shadow:0 6px 16px rgba(0,0,0,.18); flex:1.6;
}
.app-hero .ah-quick { display:flex; align-items:center; gap:8px; flex-wrap:wrap; position:relative; z-index:1; }

/* ============ #1 首页：专属二维码折叠区（保留生成与下载） ============ */
.qr-fold {
  border:1px dashed var(--line,#e3e8e5); border-radius:12px;
  padding:4px 12px 10px; margin:4px 0 14px; background:rgba(26,84,183,.03);
}
.qr-fold > summary { cursor:pointer; font-size:13px; font-weight:600; color:var(--tx2,#6b7c75); padding:8px 0; list-style:none; }
.qr-fold > summary::-webkit-details-marker { display:none; }
.qr-fold > summary::before { content:"▸ "; color:var(--brand,#0E8B57); }
.qr-fold[open] > summary::before { content:"▾ "; }
.qr-fold > summary::after { content:"（点开展示 / 下载）"; font-size:11.5px; color:var(--tx3); font-weight:400; margin-left:6px; }
.qr-fold .card { margin-top:8px; }

/* ============ #6 资源与合作：次级主行动按钮（暖橙，与品牌蓝形成明确区分） ============ */
.btn.aux2 { background:#D97A16; border-color:transparent; color:#fff; }
.btn.aux2:hover { background:#B96607; border-color:transparent; color:#fff; }
.btn.aux2:active { background:#A85C06; border-color:transparent; color:#fff; }

/* ============ #1/#2 内嵌「指定陪诊师」选择器 ============ */
.cp-holder { margin:2px 0 10px; }
.cp-box {
  border:1px solid var(--line,#e3e8e5); border-radius:12px; padding:10px 12px;
  background:rgba(26,84,183,.03);
}
.cp-hd { font-size:12.5px; font-weight:600; color:var(--tx2,#6b7c75); margin-bottom:8px; }
.cp-box > .inp { width:100%; margin-bottom:8px; }
.cp-list { max-height:220px; overflow:auto; display:flex; flex-direction:column; gap:6px; }
.cp-row {
  display:flex; align-items:center; gap:10px; flex-wrap:wrap;
  padding:8px 10px; background:#fff; border:1px solid var(--line,#e3e8e5); border-radius:10px;
}
.cp-row .cp-name { font-weight:600; font-size:13.5px; color:var(--tx); min-width:80px; }
.cp-row .cp-meta { flex:1; font-size:12.5px; color:var(--tx3,#8b9a92); }
/* 第7项（2026-10-17）：角色 / 已完成单数 / 评分 横向并列的标签组 */
.cp-stats { flex:1; display:flex; flex-wrap:wrap; align-items:center; gap:8px; min-width:0; }
.cp-stat {
  display:inline-flex; align-items:center; gap:4px;
  padding:2px 8px; border-radius:6px; background:rgba(26,84,183,.06);
  font-size:12px; line-height:1.6; white-space:nowrap;
}
.cp-stat > i { font-style:normal; color:var(--tx3,#8b9a92); }
.cp-stat > b { color:var(--tx); font-weight:600; }
.cp-stat.ok { background:rgba(14,139,87,.10); }
.cp-stat.ok > b { color:#0E8B57; }
.cp-picked { padding:8px 10px; border:1px solid #cfe6db; background:#f2faf6; border-radius:10px; font-size:13px; }
.cp-picked .btn { margin-left:8px; }

/* ==================================================================
   兼容层（折叠屏 / 阔屏中间态 / 深色模式强制反色 / 底部导航遮挡）
   —— 纯样式，不改动任何 DOM 结构或业务逻辑。
   —— 分工：本文件只负责「结构 / 布局 / 主题声明」；
      与视觉层（玻璃、极光、底色）相关的覆盖统一放在 premium.css 末尾的
      「移动端视觉降级区」，避免跨文件 !important 兜底，级联保持干净。
      本层仅在渐变文字 @supports 兜底处保留 !important（该处必须压过 premium.css，
      原因见该规则注释）。
   ================================================================== */

/* ---------- A. 显式浅色主题：修复安卓 / 鸿蒙「深色模式强制转换」导致的整页偏色 ---------- */
:root { color-scheme: light; }
@media (prefers-color-scheme: dark) { :root { color-scheme: light; } }

html {
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
}
body {
  /* 显式文字色：即使用户系统开启深色模式，也保持浅色医疗蓝白，杜绝整页反色。
     底色（浅色实底 + 极光背景）统一由 premium.css 的 body 承担，此处不重复声明。 */
  color: var(--tx);
  -webkit-tap-highlight-color: transparent;
}

/* ---------- B. 底部导航与主内容：不再重叠 + 主 Tab 等宽 / 图标文字稳定对齐 ---------- */
/* 鸿蒙/安卓风险规避：用 dvh 替代 100vh。带浏览器地址栏时 100vh 偏大，会让页面底部越界、
   最后一行被固定导航压住；dvh 取「当前可视高度」。不支持 dvh 的内核会忽略该声明，
   自动回退到既有 100vh，无副作用。 */
.app-shell, .auth-screen { min-height: 100dvh; }

@media (max-width: 900px) {
  /* 主内容底部留白 = 导航高度 + 手势安全区 + 余量。
     导航实测 ≈ 58px（图标行 20 + 文字 ~13 + gap 2 + 上下内边距 12 + 栏内边距 8 + 上边框 1）；
     取 88px 兜底：兼顾鸿蒙系统「字体放大」把导航撑高、以及 env(safe-area-inset-bottom) 手势区。
     所有视图都渲染进 #content(.content)，故这是唯一需要补底部留白的滚动容器；一并写出别名以防回归。 */
  /* 用户 2026-10-17：底部 Tab 曾被最后一行卡片压住（卡片内边距调整后内容变高）。
     留白从 88px 提到 110px（导航 ~70-80px + 手势区 + 余量），并给滚动容器加 scroll-padding。 */
  .content, #content, main.content {
    padding-bottom: calc(110px + env(safe-area-inset-bottom)) !important;
    scroll-padding-bottom: calc(110px + env(safe-area-inset-bottom));
  }

  .tabbar {
    /* grid 自动等分：无论是 6 个主 Tab（陪诊师/内部）还是 2 个（外部协作）都严格等宽。
       不透明实底 + 关闭玻璃模糊由 premium.css 的 ≤900 规则负责（见该文件末尾视觉降级区）。 */
    display: grid;
    grid-auto-flow: column;
    grid-auto-columns: minmax(0, 1fr);
    align-items: center;               /* 各列纵向居中，避免某一列被撑高后整体错位 */
    height: auto;                      /* 不固定高度：随内容自适应，杜绝「压字」 */
    z-index: 60;                       /* 高于主内容，滚动内容不从导航后透出 */
    overflow: hidden;                  /* 等宽后无需横向滚动，避免内容被裁切 */
    padding-bottom: calc(4px + env(safe-area-inset-bottom));
  }
  /* 稳定结构：flex 纵向 + 水平居中。
     显式 text-align:center 用于覆盖侧栏继承来的 text-align:left ——
     否则 span 变成整宽块后文字会左对齐，正是「图标居中、文字偏左」的错位来源。 */
  .tabbar .nav-item {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 2px;
    line-height: 1.05;
    text-align: center;
    flex: none;                        /* 宽度交给 grid 等分 */
    min-width: 0;                      /* 原 min-width:62px 在窄屏导致 6 Tab 溢出、文字被挤压 */
    max-width: none;
    width: 100%;
    height: auto;
    padding: 6px 2px;
    overflow: hidden;
  }
  /* 图标：取消侧栏 i{width:18px} 把 20px 图标塞进 18px 盒子造成的水平偏移；固定行高防字体放大抖动 */
  .tabbar .nav-item i {
    flex: none;
    width: auto;
    height: 20px;
    line-height: 20px;
    font-size: 20px;
    text-align: center;
    opacity: .9;
  }
  /* 文字：clamp 自适应 + 强制不换行 + 省略号。系统字体被放大时也不会换行把导航撑高（这是重叠的直接诱因） */
  /* 只约束「真正的文字标签」；显式排除底部 Tab 里的两个非文字 span：
     .nav-admin-tag（管理员「管理」标签，绝对定位）与 .nav-unread-dot（未读红点）。
     否则 width:100% 会把它们撑成整个 Tab 宽 → 溢出到相邻 Tab 并与图标重叠。 */
  .tabbar .nav-item > span:not(.nav-admin-tag):not(.nav-unread-dot) {
    display: block;
    width: 100%;
    max-width: 100%;
    margin-top: 0;                     /* 间距统一交给 flex gap，避免与旧的 margin-top 叠加 */
    font-size: clamp(10px, 3.2vw, 12px);
    line-height: 1.1;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }
  /* 兜底：确保这两个非文字 span 不被同族规则污染（红点自身的 inline 8×8 仍然生效，inline 优先级更高） */
  .tabbar .nav-item .nav-admin-tag,
  .tabbar .nav-item .nav-unread-dot { display: inline-block; width: auto; max-width: none; }
}

/* 超窄屏（≤360，如 Galaxy Z Fold 外屏）：进一步压缩字号，保证 6 个主 Tab 一行放下且不换行错位 */
@media (max-width: 360px) {
  .tabbar .nav-item { padding-left: 0; padding-right: 0; }
  .tabbar .nav-item i { font-size: 19px; height: 19px; line-height: 19px; }
  .tabbar .nav-item > span:not(.nav-admin-tag):not(.nav-unread-dot) { font-size: 10.5px; }
}

/* ---------- C. 阔折叠 / 平板中间态（600–1024px，含 Z Fold 内屏 ≈900×750） ----------
   原实现只在 max-width:900px 有移动样式，>900px 直接落到桌面布局，
   在 900px 附近的阔折叠内屏上容易出现「内容贴边 / hero 变形 / 卡片被压」。
   这里给主内容设定可读最大宽度并居中，hero 与卡片一律 100% 宽、内部元素不溢出。
   布局互斥保证：≤900px = 移动布局（侧栏隐藏 + 底部导航）；>900px = 桌面布局（侧栏 + 无底部导航），
   任一宽度只会出现其中一种，绝不会「侧栏 + 底部导航」并存。 */
@media (min-width: 600px) and (max-width: 1024px) {
  .content { width: 100%; max-width: 760px; margin-left: auto; margin-right: auto; }
  .app-hero, .fy-hero, .rider-hero, .card, .kpi, .tbl-wrap, .plan-cards, .task-grid, .board {
    max-width: 100%; min-width: 0;
  }
  .app-hero { flex-wrap: wrap; }
  .ah-stats { flex-wrap: wrap; gap: 16px; }
  .fy-hero .ft-row { gap: 16px; }
}

/* ---------- D. 后台管理分组卡片：任何宽度都完整可见（不裁切 / 不横向溢出） ---------- */
.admin-groups > *, .admin-group, .admin-group .ag-items { min-width: 0; }
.stab { white-space: nowrap; max-width: 100%; }         /* 标签不换行，高度稳定；整块按钮随容器换行 */
.admin-group .ag-items { max-width: 100%; }
@media (max-width: 640px) {
  .admin-groups { grid-template-columns: 1fr; }         /* 窄屏单列，分组卡片不互相挤压 */
}

/* ---------- E. 渐变文字兜底：避免不支持 background-clip:text 的 WebView 上标题「消失」 ----------
   premium.css 用 background-clip:text + color:transparent 实现渐变字；
   鸿蒙 / 老内核 WebView 若不支持该特性，文字会整块不可见（被误判为「板块显示不完整」）。 */
@supports not ((-webkit-background-clip: text) or (background-clip: text)) {
  .ah-hi, .page-hd h2 {
    background: none !important;
    -webkit-text-fill-color: currentColor !important;
    color: var(--brand-d) !important;
  }
}

/* ---------- F. 管理端首页「数据大盘」：主卡（3） + 次级卡（5）分层视觉 ----------
   仅作用于管理端首页新类 .db-*，不改动其它页面既有的 .kpis / .kpi 视觉。
   每张卡用内联 --c:"r,g,b" 指定语义色，图标色块与强调色统一取该变量。 */
/* 用户要求（2026-10-17）：数据大盘统一卡片尺寸 —— **两个一排、共五排**（10 项）。
   原先是 db-mains(3 张 3 列大卡) + db-subs(7 张 4 列小卡) 两级尺寸，视觉割裂、
   未读消息权重不够。现合并为一个 12 栏网格，每张 span 6（2 列），五排严丝合缝铺满；
   「未读消息」排在第一位右侧，与「我的任务」同处第一行、权重对齐。 */
.db-grid { display: grid; grid-template-columns: repeat(12, 1fr); gap: 12px; }
.db-grid > * { grid-column: span 6; }
/* 仅极窄屏（≤340px，市面几乎无此类设备）才退化为单列；
   常规手机（含 iPhone SE 375px）一律保持「两个一排、共五排」。 */
@media (max-width: 340px) {
  .db-grid > * { grid-column: span 12; }
}
/* 老结构保留兼容（其他页面若仍引用） */
/* 用户要求（2026-10-19）：主卡统一 2 列，与移动端一致（原来桌面 3 列 → 4 张卡排成 3+1 也会留白） */
.db-mains { display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; margin-bottom: 12px; }
.db-subs  { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }
.db-card {
  position: relative; display: flex; flex-direction: column; gap: 7px; overflow: hidden;
  background: #fff; border: 1px solid var(--line); border-radius: 14px;
  padding: 15px 16px; box-shadow: var(--shadow-1); text-decoration: none; color: inherit;
  transition: box-shadow .2s ease, transform .2s ease, border-color .2s ease;
}
.db-card:hover { box-shadow: var(--shadow-2); transform: translateY(-2px); border-color: #cfe0f6; }
.db-ico {
  width: 34px; height: 34px; border-radius: 10px; display: grid; place-items: center;
  font-size: 17px; line-height: 1; background: rgba(var(--c, 26, 84, 183), .12);
}
.db-t { font-size: 12px; color: var(--tx3); }
.db-v {
  font-size: 24px; font-weight: 700; line-height: 1.2; color: var(--tx);
  font-variant-numeric: tabular-nums; display: flex; align-items: baseline; gap: 2px;
}
.db-v small { font-size: 12px; font-weight: 500; color: var(--tx3); margin-left: 3px; }
/* 主卡：更宽更高、数字更大更粗，顶部一条语义渐变细边 */
.db-main { padding: 17px 18px; }
.db-main::before {
  content: ''; position: absolute; left: 0; right: 0; top: 0; height: 3px;
  background: linear-gradient(90deg, rgba(var(--c, 26, 84, 183), .9), rgba(var(--c, 26, 84, 183), .18));
}
.db-main .db-ico { width: 40px; height: 40px; font-size: 20px; border-radius: 12px; }
.db-main .db-t { font-size: 13px; }
.db-main .db-v { font-size: 30px; font-weight: 800; letter-spacing: .3px; }
.db-main .db-v small { font-size: 13px; }
/* 待办合计 > 0：主卡浅橙强调（中性=0） */
.db-main.db-hot { border-color: #f1d3a8; background: linear-gradient(180deg, #fffaf1, #fff); }
.db-main.db-hot .db-v { color: var(--warn); }
/* 在线人数：绿点 + 数字；离线（0）时灰点 */
.db-dot {
  display: inline-block; width: 9px; height: 9px; border-radius: 50%; margin-right: 7px;
  align-self: center; background: var(--tx3); flex: 0 0 auto;
}
.db-dot.on { background: var(--ok); box-shadow: 0 0 0 3px rgba(14, 139, 87, .16); }
/* 可下钻卡片右上角箭头 */
.db-card.db-link::after { content: '›'; position: absolute; right: 15px; top: 15px; color: var(--tx3); font-size: 14px; }
@media (max-width: 900px) {
  .db-mains { grid-template-columns: 1fr; }              /* 移动端：主卡整行 1 列 */
  .db-subs  { grid-template-columns: repeat(2, 1fr); }   /* 移动端：次级卡 2 列 */
  .db-main .db-v { font-size: 26px; }
}

/* ---------- G. 第6项：「全部功能」搜索框（个人中心网格 + 桌面侧栏） ----------
   两处搜索框只做前端显隐过滤，不新增任何数据请求。宽度用 flex-basis + min-width:0
   让窄屏可收缩，避免把 card-hd 里的标题 / 数量标签挤出去。 */
.allfn-kw {
  width: 180px; flex: 0 1 180px; min-width: 0; height: 32px; margin-left: auto;
  padding: 0 10px; font-size: 13px; border-radius: 9px;
}
.nav-sec-kw {
  width: 100%; height: 32px; margin: 0 0 8px; padding: 0 10px; font-size: 13px; border-radius: 9px;
}
@media (max-width: 560px) {
  .allfn-kw { width: 120px; flex-basis: 120px; }
}

/* ==================================================================
   H. 跨端兼容加固（iOS / 安卓 / 鸿蒙 / 微信小程序 web-view）
   ------------------------------------------------------------------
   仅「新增」，不重写任何既有规则；全部选择器在本项目真实存在
   （本项目顶栏类名是 .topbar，不存在 .navbar —— 指令中的 .navbar 已对应替换）。
   运行环境 class 由 app.js 顶部的「环境探测」写入 <html>：
     env-ios / env-android / env-harmony / env-wx / in-mp
   每条 safe-area 都写两行：先 constant(...)（老 iOS 11.0–11.2）再 env(...)（新内核覆盖）。
   ================================================================== */

/* ---------- H1. 惯性滚动 + 关闭「橡皮筋 / 下拉刷新」 ----------
   微信 web-view 与 iOS 上，整页下拉弹动会让底部固定栏跟着跳、并露出页面底色。 */
html, body { overscroll-behavior-y: none; }
body { -webkit-overflow-scrolling: touch; }
/* 真正滚动的是内容区与侧栏，惯性滚动一并开启（body 本身不是滚动容器） */
.content, #content, main.content, .sidebar { -webkit-overflow-scrolling: touch; }

/* ---------- H2. 点按 / 长按行为 ---------- */
/* 去 iOS 双击缩放带来的 300ms 点击延迟 */
a, button, .btn, .nav-item, .allfn-item, [role="button"] { touch-action: manipulation; }
/* 微信 / iOS 长按图片不弹「存储图片」菜单 */
img, svg { -webkit-touch-callout: none; }
/* 导航 / 按钮 / 页头禁选中，避免长按选中文字 */
.topbar, .tabbar, .page-hd, .btn, .nav-item { -webkit-user-select: none; user-select: none; }
/* 输入框必须保留可选中 */
input, textarea, select { -webkit-user-select: text; user-select: text; }

/* ---------- H3. safe-area 补齐（此前只用了底部 3 处，顶部 / 左右缺失） ---------- */
/* H3-a. 顶部栏：viewport-fit=cover 下顶栏会顶到状态栏 / 挖孔区，
   让顶栏自身延伸进安全区（背景渐变一并覆盖），内容仍居中于原 58px 主体内。
   仅在移动端（≤900）启用；>900 桌面布局保持 58px 不变。 */
@media (max-width: 900px) {
  .topbar {
    padding-top: constant(safe-area-inset-top);
    padding-top: env(safe-area-inset-top);
    height: calc(58px + constant(safe-area-inset-top));
    height: calc(58px + env(safe-area-inset-top));
  }
}
/* H3-a′. ≤640 顶栏是「auto 高度 + 换行」布局，不能套用上面的固定高度，
   仅把安全区叠加到原有 8px 上内边距（避免重复叠加）。 */
@media (max-width: 640px) {
  .topbar {
    height: auto;
    padding-top: calc(8px + constant(safe-area-inset-top));
    padding-top: calc(8px + env(safe-area-inset-top));
  }
}
/* H3-b. 底部导航：底部手势条安全区（原 4px 内边距 + 安全区，不重复叠加） */
.tabbar {
  padding-bottom: calc(4px + constant(safe-area-inset-bottom));
  padding-bottom: calc(4px + env(safe-area-inset-bottom));
}
/* H3-c. 主内容底部留白同步补 constant 兜底（值与原 88px + env 一致） */
@media (max-width: 900px) {
  .content, #content, main.content {
    padding-bottom: calc(88px + constant(safe-area-inset-bottom));
    padding-bottom: calc(88px + env(safe-area-inset-bottom));
  }
}
/* H3-d. 横屏 / 挖孔左右安全区：只作用于「内容滚动容器」。
   未放到 .app-shell 上 —— 否则内容区会与外壳各缩进一次（双倍），
   并在顶栏 / 底栏两侧露出底色缝隙；放内容区既不裁切内容，顶栏渐变仍能铺满整屏。 */
.content, #content, main.content {
  padding-left: calc(20px + constant(safe-area-inset-left));
  padding-left: calc(20px + env(safe-area-inset-left));
  padding-right: calc(20px + constant(safe-area-inset-right));
  padding-right: calc(20px + env(safe-area-inset-right));
}

/* ---------- H4. iOS 输入框聚焦自动放大 ----------
   只要 input/select/textarea 的 font-size < 16px，iOS 聚焦就会把整页放大且不还原。
   仅窄屏启用；不使用 !important —— 改用「同等或更高权重 + 位于文件末尾」覆盖既有小字号规则
   （覆盖清单：base 14px、.auth-card select/textarea 15px、.n-form .inp 13px、
     .tb-search input 13px、.allfn-kw / .nav-sec-kw 13px）。 */
@media (max-width: 900px) {
  input, select, textarea { font-size: 16px; }
  .auth-card input, .auth-card select, .auth-card textarea { font-size: 16px; }
  .n-form .inp, .n-form input, .n-form select, .n-form textarea { font-size: 16px; }
  .tb-search input { font-size: 16px; }
  .allfn-kw, .nav-sec-kw, .inp { font-size: 16px; }
}

/* ---------- H5. 微信小程序 web-view 容器（<html class="in-mp">） ---------- */
html.in-mp { overscroll-behavior: none; }
/* 小程序容器自带导航栏，H5 顶栏 / 页头不再吸顶重复一层 */
.in-mp .topbar, .in-mp .page-hd { position: static; }
/* 小程序 web-view 底部没有浏览器地址栏，safe-area 由容器处理，避免二次留白 */
.in-mp .tabbar { padding-bottom: max(8px, env(safe-area-inset-bottom)); }

/* ---------- H6. 鸿蒙 / 老内核兜底 ---------- */
/* 不支持 dvh 的内核回退 100vh（与文件开头 @122 的 100vh 兜底一致，这里显式再声明一次） */
@supports not (height: 100dvh) { .app-shell { height: 100vh; } }
/* 部分鸿蒙内核：overflow + 圆角 / 阴影并存时闪动，给合成层兜底 */
.btn, .card, .modal { -webkit-backface-visibility: hidden; }

/* ============ 反馈图片：缩略图 + 全屏预览（2026-10-23） ============ */
.fb-thumbs { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 6px; width: 100%; }
.fb-thumb { position: relative; width: 40px; height: 40px; flex: 0 0 auto; border-radius: 6px; overflow: hidden;
  background: #eef2f8; border: 1px solid #e2e8f2; display: inline-flex; align-items: center;
  justify-content: center; cursor: pointer; transition: border-color .15s, box-shadow .15s; }
.fb-thumb img { max-width: 100%; max-height: 100%; width: 100%; height: 100%; object-fit: cover; display: block; }
.fb-thumb.loading::after { content: '…'; position: absolute; color: #8493A8; font-size: 14px; }
.fb-thumb.err img { display: none; }
.fb-thumb.err::after { content: '无法\n预览'; white-space: pre; position: absolute; color: #c0392b;
  font-size: 9px; line-height: 1.15; text-align: center; }
.fb-thumb:hover, .fb-thumb:focus-visible { border-color: var(--brand); box-shadow: 0 0 0 2px rgba(26,84,183,.14); outline: none; }
.fb-thumb-more { font-size: 12px; color: #5b6b82; background: #f2f5fa; cursor: default; }
.fb-modal-imgs { margin: 0 0 12px; padding: 10px 12px; background: #f7f9fc; border: 1px solid #e8eef7; border-radius: 10px; }
.fb-modal-t { font-size: 12.5px; color: #5b6b82; margin-bottom: 6px; }

.fb-mask { position: fixed; inset: 0; z-index: 10020; background: rgba(10,16,28,.84);
  display: flex; align-items: center; justify-content: center; }
.fb-mask-hd { position: fixed; top: 0; left: 0; right: 0; height: 48px; padding: 0 14px;
  display: flex; align-items: center; justify-content: flex-start; color: #fff; }
.fb-mask-count { font-size: 13px; opacity: .9; }
.fb-mask-x { width: 36px; height: 36px; border: 0; border-radius: 50%; cursor: pointer;
  background: rgba(255,255,255,.16); color: #fff; font-size: 22px; line-height: 1; }
.fb-mask-stage { position: relative; display: flex; align-items: center; justify-content: center;
  max-width: 92vw; max-height: 80vh; }
.fb-mask-img { max-width: 92vw; max-height: 80vh; width: auto; height: auto; border-radius: 8px;
  opacity: 0; transition: opacity .15s ease; background: #fff; }
.fb-mask-img.show { opacity: 1; }
.fb-mask-load { position: absolute; color: #fff; font-size: 13px; letter-spacing: .5px; }
.fb-mask-err { position: absolute; display: none; color: #ffd9d4; font-size: 13px; }
.fb-mask-err.show { display: block; }
.fb-mask-retry { margin-left: 8px; padding: 2px 10px; border-radius: 6px; cursor: pointer;
  border: 1px solid rgba(255,255,255,.55); background: transparent; color: #fff; }
.fb-mask-nav { position: fixed; top: 50%; transform: translateY(-50%); width: 44px; height: 64px;
  border: 0; border-radius: 10px; cursor: pointer; font-size: 30px; line-height: 1;
  background: rgba(255,255,255,.14); color: #fff; }
.fb-mask-nav.prev { left: 10px; }
.fb-mask-nav.next { right: 10px; }
@media (max-width: 640px) {
  .fb-thumb { width: 40px; height: 40px; }
  .fb-mask-nav { width: 36px; height: 52px; font-size: 24px; }
  .fb-mask-img { max-width: 94vw; max-height: 72vh; }
}

/* ============ 可点击的系统通知（订单报价 / 采纳）============
   聊天里 msg_type='system' 的订单通知改为可点，复用 [data-chat-ref] 跳转详情。
   用 .wx-msgs 前缀提高优先级，压过 chatStyleOnce 注入的 .wx-sys 默认样式。 */
.wx-msgs .wx-sys-link { cursor: pointer; color: var(--brand); background: rgba(26,84,183,.08);
  border: 1px solid rgba(26,84,183,.18); }
.wx-msgs .wx-sys-link:hover, .wx-msgs .wx-sys-link:focus-visible {
  background: rgba(26,84,183,.15); text-decoration: underline; outline: none; }
.wx-msgs .wx-sys-go { font-weight: 700; margin-left: 4px; }

/* ============ 需求单/转单卡「打开中」态（2026-10-23）============
   点「查看详情」或整卡时立即给出反馈，避免手机端点了没反应的感觉。 */
.card.ri-open { opacity: .55; position: relative; pointer-events: none; }
.card.ri-open::after { content: '打开中…'; position: absolute; inset: 0; display: flex;
  align-items: center; justify-content: center; font-size: 13px; font-weight: 500;
  color: #1a54b7; background: rgba(255,255,255,.55); border-radius: inherit; }

/* ============ 需求单 / 转单「订单号」小标签（2026-10-24）============ */
.hub-no { font-family: ui-monospace, Menlo, Consolas, monospace; font-size: 11px; line-height: 16px;
  color: #5B6B82; background: #F2F5FA; border: 1px solid #E2E8F2; border-radius: 4px;
  padding: 1px 5px; margin-right: 6px; letter-spacing: .3px; white-space: nowrap; vertical-align: 1px; }

/* ============ 审核订单：可点单号 + 操作列重排（2026-10-24）============ */
.rev-no { cursor: pointer; color: var(--brand); font-size: 12.5px; }
.rev-no:hover, .rev-no:focus-visible { text-decoration: underline; outline: none; }
.rev-ops { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.rev-ops .btn { padding: 4px 10px; height: auto; line-height: 1.5; font-size: 12px; white-space: nowrap; }
.rev-ops .btn.sm { min-height: 0; }

/* ============ 资源与合作「订单中心」垂直下拉菜单（2026-10-24）============
   注意：用 position:fixed + JS 计算坐标，彻底避开父级 overflow:hidden 裁切与层叠上下文问题，
   否则菜单会被下方卡片盖住 / 被裁掉（用户反馈）。 */
.hub-oc-wrap { position: relative; display: inline-block; }
.hub-oc-menu { display: none; position: fixed; top: 0; left: 0; z-index: 2147483000;
  min-width: 156px; background: #fff; border: 1px solid #E2E8F2; border-radius: 12px;
  box-shadow: 0 14px 38px rgba(14,27,46,.22); padding: 6px; }
.hub-oc-wrap.open .hub-oc-menu { display: block; }
.hub-oc-menu button { display: block; width: 100%; text-align: left; border: 0; background: none;
  padding: 9px 12px; font-size: 13.5px; border-radius: 8px; color: #25303F; cursor: pointer;
  font-family: inherit; }
.hub-oc-menu button:hover, .hub-oc-menu button:focus-visible { background: #F2F5FA; color: #1A54B7; outline: none; }
@media (max-width: 640px) {
  .hub-oc-menu { left: auto; right: 0; min-width: 140px; }
}

/* ============ 审核订单表格：紧凑化（2026-10-24 二次调整）============
   原问题：待审核行有 7 个按钮竖排成一列，把整行撑到 2~3 倍高，表格显得又空又乱。
   方案：操作列改成「两列紧凑网格」，按钮更小、行距更紧；同时收窄单元格上下内边距。 */
.rev-tbl th, .rev-tbl td { padding-top: 8px !important; padding-bottom: 8px !important; }
.rev-tbl td.ops { width: 150px; vertical-align: top; }
.rev-tbl .rev-ops {
  display: grid; grid-template-columns: repeat(2, minmax(62px, 1fr));
  gap: 4px; width: 138px; align-items: stretch;
}
.rev-tbl .rev-ops .btn {
  padding: 2px 4px; font-size: 11.5px; line-height: 1.55; min-height: 0;
  white-space: nowrap; justify-content: center; text-align: center;
}
.rev-tbl .rev-ops .btn.sm { width: 100%; }
@media (max-width: 900px) {
  .rev-tbl td.ops { width: 132px; }
  .rev-tbl .rev-ops { width: 124px; grid-template-columns: repeat(2, minmax(56px, 1fr)); }
}
/* ============================================================
   伊互助健康管理平台 · 高级感视觉层（蓝白医疗 · 玻璃拟态）
   本文件在 app.css 之后加载，仅覆盖设计令牌与外观，不改动任何功能逻辑。
   主色由翡翠绿调整为「蓝白」（呼应平台原始医疗蓝 #1a54b7），
   保留玻璃拟态 + 入场动效 + 光泽扫描等高级感交互；
   深蓝实底 + 白字，显著提升夜间（暗环境）可读性。
   ============================================================ */

:root {
  --brand: #1a54b7;
  --brand-d: #12408f;
  --brand-l: #3f8ae0;
  --brand-surface: #12408f;
  --brand-tint: #e8f0fc;
  /* 蓝色系点缀（azure）——替代原香槟金，保持蓝白统一 */
  --gold: #2f9bf0;
  --gold-soft: #8cc7f7;
  --gold-tint: #eaf5fe;
  --gold-deep: #1a6fc4;
  /* 玻璃与底色（蓝白） */
  --bg: #f4f7fc;
  --bg-2: #eaf1fb;
  --card: rgba(255, 255, 255, .82);
  --card-solid: #ffffff;
  --line: rgba(26, 84, 183, .14);
  --glass-brd: rgba(255, 255, 255, .62);
  --tx: #16233a;
  --tx2: #4a5a75;
  --tx3: #8593ad;
  --radius: 18px;
  --radius-sm: 12px;
  --shadow: 0 6px 20px rgba(18, 64, 143, .08);
  --shadow-1: 0 6px 20px rgba(18, 64, 143, .08);
  --shadow-2: 0 18px 48px rgba(18, 64, 143, .16);
  --ease: cubic-bezier(.22, .61, .36, 1);
}

* { box-sizing: border-box; }

/* ---------------- 全局底色：蓝白极光渐变 ---------------- */
body {
  background:
    radial-gradient(880px 520px at 10% -10%, rgba(143, 199, 247, .22), transparent 60%),
    radial-gradient(1100px 720px at 102% -5%, rgba(63, 138, 224, .20), transparent 55%),
    radial-gradient(820px 620px at 48% 122%, rgba(26, 84, 183, .14), transparent 60%),
    linear-gradient(160deg, #f4f7fc 0%, #e9f1fb 100%);
  /* 显式浅色实底（替代原 background-attachment: fixed）。
     fixed 会让背景层相对视口定位，移动端（地址栏伸缩 / 折叠屏）已知会导致
     背景与装饰层「位置偏移」，故改用默认 scroll，并保留一个不透明浅色底兜底。 */
  background-color: #f5f7fb;
  color: var(--tx);
  -webkit-font-smoothing: antialiased;
}
/* 缓慢游移的极光光晕，增强“高级动态感” */
body::before {
  content: "";
  position: fixed;
  inset: -20% -10% auto -10%;
  height: 70vh;
  background:
    radial-gradient(600px 360px at 20% 30%, rgba(143, 199, 247, .16), transparent 70%),
    radial-gradient(700px 420px at 80% 60%, rgba(63, 138, 224, .16), transparent 70%);
  filter: blur(10px);
  z-index: 0;
  pointer-events: none;
  animation: aurora 22s ease-in-out infinite alternate;
}
@keyframes aurora {
  0%   { transform: translate3d(-3%, -2%, 0) scale(1); opacity: .8; }
  100% { transform: translate3d(4%, 3%, 0) scale(1.08); opacity: 1; }
}
.app-shell, #auth { position: relative; z-index: 1; }

/* ---------------- 顶栏（深蓝 + azure 下沿） ---------------- */
.topbar {
  background: linear-gradient(120deg, var(--brand-d) 0%, var(--brand) 55%, var(--brand-l) 100%);
  box-shadow: 0 10px 32px rgba(18, 64, 143, .28);
  position: relative;
}
.topbar::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 2px;
  background: linear-gradient(90deg, transparent, var(--gold-soft), transparent);
  opacity: .75;
}
.tb-logo {
  background: rgba(255, 255, 255, .2);
  box-shadow: 0 0 0 1px rgba(255, 255, 255, .25), 0 0 18px rgba(143, 199, 247, .4);
}
.tb-right .btn.ghost { background: rgba(255, 255, 255, .16); border-color: rgba(255, 255, 255, .3); color: #fff; }
.tb-right .btn.ghost:hover { background: rgba(255, 255, 255, .26); }
.tb-title, .tb-title em, .who { color: #fff; }

/* 移动端「身份角色标识」徽标（替代密码管理按钮位置） */
.role-badge {
  display: none; align-items: center; gap: 6px;
  padding: 5px 11px; border-radius: 999px; font-size: 12px; font-weight: 600; color: #fff;
  background: rgba(255, 255, 255, .18); border: 1px solid rgba(255, 255, 255, .34);
  white-space: nowrap; max-width: 46vw; overflow: hidden; text-overflow: ellipsis;
}
.role-badge .rb-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--gold-soft); box-shadow: 0 0 6px var(--gold-soft); flex: none; }

/* ---------------- 侧栏（玻璃） ---------------- */
.sidebar {
  background: rgba(255, 255, 255, .55);
  -webkit-backdrop-filter: blur(18px) saturate(140%);
  backdrop-filter: blur(18px) saturate(140%);
  border-right: 1px solid var(--glass-brd);
}
.nav-item {
  border-radius: 12px;
  transition: background .2s var(--ease), color .2s var(--ease), transform .2s var(--ease), box-shadow .2s var(--ease);
}
.nav-item:hover { background: rgba(26, 84, 183, .08); color: var(--tx); transform: translateX(2px); }
.nav-item.active {
  background: linear-gradient(100deg, rgba(26, 84, 183, .16), rgba(143, 199, 247, .18));
  color: var(--brand-d);
  font-weight: 600;
  box-shadow: inset 3px 0 0 var(--gold), 0 6px 16px rgba(18, 64, 143, .10);
}
.nav-item.active i { color: var(--gold-deep); opacity: 1; }
.nav-sec { border-top: 1px solid var(--glass-brd); margin-top: 6px; padding-top: 6px; }
.nav-sec-t { color: var(--tx3); font-size: 11px; letter-spacing: .12em; padding: 4px 12px; }

/* ---------------- 内容区入场动效（强交互感） ---------------- */
.content { position: relative; }
.content > * { animation: fadeUp .5s var(--ease) both; }
/* 用户要求（2026-10-17）：聊天窗口不参与入场动画。
   fadeUp 的 to 帧写了 transform，配合 fill-mode:both，动画结束后 computed transform
   会停留在 matrix(1,0,0,1,0,0) —— 这个「单位矩阵」虽无视觉效果，却会创建 fixed 包含块，
   导致聊天输入条 position:fixed 后相对 .wx-wrap 定位（左偏 21px、右侧超出被裁）。
   三星 Fold8 外屏「发送键被裁一半」正是此因（宽屏看不出来，窄屏立刻暴露）。 */
.content > .wx-wrap { animation: none; }
/* 用户反馈（2026-10-17）：兜底压掉任何来源的 transform（fadeUp 残留 / JS 内联 / 未来新增），
   否则会创建 fixed 包含块 → 聊天输入条 fixed 后偏移或被裁（三星 Fold8 外屏实锤）。 */
.wx-wrap { transform: none !important; }
.content > *:nth-child(1) { animation-delay: .03s; }
.content > *:nth-child(2) { animation-delay: .07s; }
.content > *:nth-child(3) { animation-delay: .11s; }
.content > *:nth-child(4) { animation-delay: .15s; }
.content > *:nth-child(5) { animation-delay: .19s; }
.content > *:nth-child(6) { animation-delay: .23s; }
.content > *:nth-child(7) { animation-delay: .27s; }
.content > *:nth-child(8) { animation-delay: .31s; }
@keyframes fadeUp {
  from { opacity: 0; transform: translateY(16px); }
  to   { opacity: 1; transform: none; }
}

/* ---------------- 卡片（玻璃 + 悬浮微动效） ---------------- */
.card {
  background: var(--card);
  -webkit-backdrop-filter: blur(14px) saturate(130%);
  backdrop-filter: blur(14px) saturate(130%);
  border: 1px solid var(--glass-brd);
  border-radius: var(--radius);
  box-shadow: var(--shadow);
  transition: transform .28s var(--ease), box-shadow .28s var(--ease), border-color .28s var(--ease);
  margin-bottom: 14px; overflow: hidden;
}
.card:hover {
  transform: translateY(-3px);
  box-shadow: var(--shadow-2);
  border-color: rgba(143, 199, 247, .55);
}
.card-hd { border-bottom: 1px solid rgba(26, 84, 183, .1); }
.card-hd h3 { letter-spacing: .3px; }
.card-hd .tag {
  background: var(--gold-tint); color: var(--gold-deep);
  border: 1px solid rgba(47, 155, 240, .25); border-radius: 999px; padding: 1px 9px;
}

/* ---------------- KPI ---------------- */
.kpis { gap: 14px; margin-bottom: 16px; }
.kpi {
  background: var(--card);
  -webkit-backdrop-filter: blur(12px);
  backdrop-filter: blur(12px);
  border: 1px solid var(--glass-brd);
  border-radius: var(--radius);
  box-shadow: var(--shadow);
  position: relative; overflow: hidden;
  transition: transform .26s var(--ease), box-shadow .26s var(--ease), border-color .26s var(--ease);
}
.kpi::before {
  content: ""; position: absolute; top: 0; left: 0; right: 0; height: 3px;
  background: linear-gradient(90deg, var(--brand), var(--gold-soft));
  opacity: .85;
}
.kpi:hover { transform: translateY(-4px); box-shadow: var(--shadow-2); border-color: rgba(143, 199, 247, .5); }
.k-num { font-size: 28px; letter-spacing: -.5px; }
.kpi.run .k-num { color: var(--brand); }
.kpi.ok .k-num { color: var(--gold-deep); }
.kpi.warn .k-num { color: var(--gold-deep); }
a.kpi:hover { border-color: rgba(143, 199, 247, .5); }

/* ---------------- 按钮 ---------------- */
.btn {
  border-radius: 12px;
  transition: transform .18s var(--ease), background .18s var(--ease), box-shadow .18s var(--ease), border-color .18s var(--ease);
}
.btn:hover { transform: translateY(-1px); }
.btn:active { transform: translateY(0) scale(.98); }
.btn.primary {
  background: linear-gradient(120deg, var(--brand-d), var(--brand) 60%, var(--brand-l));
  box-shadow: 0 6px 18px rgba(18, 64, 143, .28);
  position: relative; overflow: hidden;
}
.btn.primary::after {
  content: ""; position: absolute; top: 0; left: -60%; width: 42%; height: 100%;
  background: linear-gradient(100deg, transparent, rgba(255, 255, 255, .4), transparent);
  transform: skewX(-18deg); transition: left .6s var(--ease);
}
.btn.primary:hover { transform: translateY(-1px); box-shadow: 0 10px 26px rgba(18, 64, 143, .34); }
.btn.primary:hover::after { left: 130%; }
.btn.ghost { background: rgba(255, 255, 255, .6); border-color: var(--glass-brd); }
.btn.danger { background: #fff; }
.btn.sm { border-radius: 10px; }

/* ---------------- 输入 / 表单 ---------------- */
input, select, textarea {
  border-radius: 12px;
  border: 1px solid var(--line);
  background: rgba(255, 255, 255, .72);
  transition: border-color .18s var(--ease), box-shadow .18s var(--ease);
}
input:focus, select:focus, textarea:focus {
  border-color: var(--brand);
  box-shadow: 0 0 0 3px rgba(26, 84, 183, .16), 0 0 0 5px rgba(143, 199, 247, .14);
}

/* ---------------- 弹窗（玻璃） ---------------- */
#modal-root .modal, .modal {
  background: rgba(255, 255, 255, .94);
  -webkit-backdrop-filter: blur(22px) saturate(140%);
  backdrop-filter: blur(22px) saturate(140%);
  border: 1px solid var(--glass-brd);
  border-radius: var(--radius);
  box-shadow: var(--shadow-2);
  animation: modalIn .3s var(--ease);
}
@keyframes modalIn {
  from { opacity: 0; transform: translateY(18px) scale(.98); }
  to   { opacity: 1; transform: none; }
}
.mask { background: rgba(16, 32, 64, .34); -webkit-backdrop-filter: blur(3px); backdrop-filter: blur(3px); }

/* ---------------- 表格 ---------------- */
.tbl-wrap {
  background: rgba(255, 255, 255, .7);
  -webkit-backdrop-filter: blur(10px);
  backdrop-filter: blur(10px);
  border: 1px solid var(--glass-brd);
  border-radius: var(--radius);
}
.tbl th { background: rgba(232, 240, 252, .7); }
.tbl tbody tr:hover { background: rgba(26, 84, 183, .06); }

/* ---------------- 状态标签（蓝白 + 语义色） ---------------- */
.pill { background: rgba(255, 255, 255, .7); border: 1px solid var(--line); }
.pill.ok { background: #e6f6ef; color: #0a6a45; border-color: rgba(14, 139, 87, .22); }
.pill.run { background: var(--brand-tint); color: var(--brand-d); border-color: rgba(26, 84, 183, .2); }
.pill.warn { background: var(--gold-tint); color: var(--gold-deep); border-color: rgba(47, 155, 240, .25); }
.pill.danger { background: #fdeceb; color: #c0392b; border-color: rgba(192, 57, 43, .2); }

/* ---------------- 进度条 ---------------- */
.bar i { background: linear-gradient(90deg, var(--brand), var(--gold-soft)); }

/* ---------------- 页面标题：蓝→azure 渐变字 ---------------- */
.page-hd h2 {
  background: linear-gradient(90deg, var(--brand-d), var(--gold-deep));
  -webkit-background-clip: text; background-clip: text; color: transparent;
}

/* ---------------- 工作台欢迎 Hero（非陪诊师，浅色玻璃卡） ---------------- */
.app-hero {
  display: flex; align-items: center; justify-content: flex-start; gap: 16px; flex-wrap: wrap;
  padding: 22px 24px;
  background: linear-gradient(120deg, rgba(26, 84, 183, .12), rgba(143, 199, 247, .16));
  border: 1px solid var(--glass-brd);
  border-radius: var(--radius);
  -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px);
  box-shadow: var(--shadow);
  margin-bottom: 16px;
  position: relative; overflow: hidden;
}
.app-hero::after {
  content: ""; position: absolute; right: -40px; top: -40px; width: 180px; height: 180px;
  background: radial-gradient(circle, rgba(143, 199, 247, .35), transparent 70%);
  filter: blur(6px);
}
.ah-greet { position: relative; z-index: 1; }
.ah-hi { font-size: 22px; font-weight: 700; background: linear-gradient(90deg, var(--brand-d), var(--gold-deep)); -webkit-background-clip: text; background-clip: text; color: transparent; }
.ah-sub { font-size: 13px; color: var(--tx2); margin-top: 4px; }
.ah-stats { display: flex; gap: 22px; position: relative; z-index: 1; }
.ah-stat { text-align: center; }
.ah-stat b { display: block; font-size: 22px; font-weight: 700; color: var(--brand-d); font-variant-numeric: tabular-nums; }
.ah-stat b.warn { color: var(--gold-deep); }
.ah-stat span { font-size: 12px; color: var(--tx3); }
.ah-cta {
  position: relative; z-index: 1;
  padding: 10px 16px; border-radius: 12px; text-decoration: none;
  background: linear-gradient(120deg, var(--brand-d), var(--brand) 60%, var(--brand-l));
  color: #fff; font-size: 13px; font-weight: 600;
  box-shadow: 0 6px 18px rgba(18, 64, 143, .28);
  transition: transform .18s var(--ease), box-shadow .18s var(--ease);
}
.ah-cta:hover { transform: translateY(-1px); box-shadow: 0 10px 26px rgba(18, 64, 143, .34); }

/* ---------------- 间距适配（修复窄屏「新建工单/客户」贴脸统计框） ---------------- */
.fy-hero { margin-bottom: 14px; }
.fy-cta { display: block; margin: 0 0 14px; }
.fy-focus-card { margin: 14px 0 16px; }
.fy-cta-row { margin: 14px 16px 18px; }   /* 关键：补足底部间距，避免与下方统计框挨太近 */
.fy-scenes { margin: 0 0 18px; }
.fy-quick { margin: 2px 0 6px; }

/* ---------------- 陪诊师「今天」首屏（深蓝实底 + 白字，夜间高可读） ---------------- */
.fy-hero {
  background: linear-gradient(120deg, var(--brand-d) 0%, var(--brand) 100%);
  border: 1px solid rgba(255, 255, 255, .14);
  border-radius: var(--radius);
  box-shadow: 0 14px 34px rgba(18, 64, 143, .28);
  color: #fff;
}
.fy-hero .fh-num,
.fy-hero .fh-num.sm { color: #fff; -webkit-text-fill-color: #fff; background: none; font-variant-numeric: tabular-nums; }
.fy-hero .fh-label { color: rgba(255, 255, 255, .86); }
.fy-cta {
  background: linear-gradient(120deg, var(--brand-d), var(--brand) 60%, var(--brand-l));
  color: #fff; box-shadow: 0 8px 20px rgba(18, 64, 143, .3);
}
.fy-scene { border: 1px solid var(--glass-brd); }
.fy-scene .fs-num { color: var(--brand-d); }

/* ---------------- 登录页（深蓝玻璃卡 + 极光） ---------------- */
.auth-screen {
  background:
    radial-gradient(900px 520px at 12% -10%, rgba(143, 199, 247, .28), transparent 60%),
    radial-gradient(1000px 620px at 100% 110%, rgba(63, 138, 224, .34), transparent 55%),
    linear-gradient(160deg, #0b3f80 0%, #1553b0 52%, #2f7fd6 100%);
}
.auth-card {
  background: rgba(255, 255, 255, .9);
  -webkit-backdrop-filter: blur(22px) saturate(140%);
  backdrop-filter: blur(22px) saturate(140%);
  border: 1px solid rgba(255, 255, 255, .5);
  border-radius: 20px;
  box-shadow: 0 30px 70px rgba(6, 24, 56, .4);
  animation: modalIn .4s var(--ease);
}
.auth-logo { box-shadow: 0 8px 22px rgba(143, 199, 247, .4); }
.tabs { background: #eef3fb; }
.tabs .tab.active { color: var(--brand-d); box-shadow: 0 4px 12px rgba(18, 64, 143, .12); }
.reg-tip { background: rgba(232, 240, 252, .8); border-color: rgba(26, 84, 183, .2); }

/* ---------------- Toast ---------------- */
.toast {
  background: rgba(18, 40, 80, .94); color: #fff; border: 1px solid rgba(143, 199, 247, .4);
  -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px);
  border-radius: 12px; box-shadow: var(--shadow-2);
}

/* ---------------- 移动端 tabbar ---------------- */
.tabbar {
  background: rgba(255, 255, 255, .7);
  -webkit-backdrop-filter: blur(18px) saturate(140%);
  backdrop-filter: blur(18px) saturate(140%);
  border-top: 1px solid var(--glass-brd);
}
.tabbar .nav-item.active { color: var(--brand-d); }

/* ---------------- 移动端：顶栏身份标识（窄屏隐藏密码管理，显示角色徽标） ---------------- */
@media (max-width: 720px) {
  .tb-right .role-badge { display: inline-flex; }
  .tb-right #btn-pwd { display: none; }
  .tb-right .who { display: none; }
  .tb-search { max-width: 40vw; }
}

/* 兼容性兜底：不支持 backdrop-filter 时退回实底，避免文字看不清 */
@supports not ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) {
  .sidebar, .card, .kpi, .tbl-wrap, .app-hero, .fy-hero, .auth-card, .modal, .tabbar, .toast {
    background: var(--card-solid) !important;
  }
  .fy-hero { background: var(--brand-d) !important; color: #fff; }
  body::before { display: none; }
}

/* 尊重无障碍：减少动态 */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .001ms !important; animation-iteration-count: 1 !important; transition-duration: .001ms !important; }
  body::before { animation: none; }
}

/* ============================================================
   移动端 / 阔折叠中间态的「视觉降级区」
   目的：安卓 / 鸿蒙上，fixed 装饰层 + backdrop-filter 玻璃 + 半透明导航组合，
   易引发「装饰层位置偏移 / 重绘偏色 / 掉帧」，且半透明导航会让滚动内容透出。
   桌面（>1024 / >900）保留玻璃拟态与极光，视觉不降级。
   本区位于文件末尾，靠「同权重靠后生效」压过上方同名规则，**全部无需 !important**。
   ============================================================ */
@media (max-width: 1024px) {
  /* 关闭粘性极光层：position:fixed + filter:blur 是「位置偏移 + 重绘偏色」的常见来源 */
  body::before { display: none; }
  /* 欢迎 Hero：关闭玻璃模糊，改用不透明浅色底（内层蓝色渐变 + #fff 实底） */
  .app-hero {
    background: linear-gradient(120deg, rgba(26, 84, 183, .10), rgba(143, 199, 247, .14)) #ffffff;
    -webkit-backdrop-filter: none;
    backdrop-filter: none;
  }
}
@media (max-width: 900px) {
  /* 底部导航：必须不透明，滚动内容不从导航后透出（同时关掉玻璃模糊） */
  .tabbar {
    background: #ffffff;
    -webkit-backdrop-filter: none;
    backdrop-filter: none;
  }
}

/* ============================================================================
   全局视觉升级 v2（用户 2026-10-17：聊天/工单/客户/日程/结算/统计等模块
   「UI 需要更高级、更美观」）—— 统一提升卡片层次、标题气场、按钮质感、
   表格精致度、聊天气泡与输入区，一次改动覆盖全站，避免逐页重复改。
   原则：只调视觉（圆角/阴影/间距/字重/渐变），不动任何布局结构与交互逻辑。
   ============================================================================ */

/* ① 卡片：更大圆角 + 柔和多层阴影 + 细边框，去扁平感 */
.card {
  border-radius: 16px !important;
  border: 1px solid var(--line, #e6edf8) !important;
  box-shadow: 0 1px 2px rgba(17, 58, 122, .04), 0 8px 24px -12px rgba(17, 58, 122, .10) !important;
  transition: box-shadow .2s ease, transform .2s ease;
}
.card:hover { box-shadow: 0 2px 4px rgba(17,58,122,.05), 0 12px 32px -14px rgba(17,58,122,.16) !important; }

/* ② 卡片头：保持原有内边距（12/16px）—— 曾加大到 16/20 导致首页数据卡变松动、内容变高，
   与固定底部导航产生重叠，故恢复原值，只提升字重与对齐。 */
.card-hd { padding: 12px 16px !important; align-items: center; }
.card-hd h3 { font-size: 15px !important; font-weight: 700 !important; letter-spacing: .2px; }
.card-bd { padding: 14px 16px !important; }

/* ③ 页面标题区（head）：渐变承托，提升首屏气场 */
.ph, .page-hd { border-radius: 16px; }

/* ④ 主按钮：渐变质感 + 微抬起 */
.btn.primary {
  background-image: linear-gradient(135deg, #2b6fe0 0%, #1a54b7 100%);
  border-color: transparent !important;
  box-shadow: 0 2px 6px rgba(26, 84, 183, .22);
  transition: transform .15s ease, box-shadow .15s ease, filter .15s ease;
}
.btn.primary:hover { filter: brightness(1.06); box-shadow: 0 4px 14px rgba(26, 84, 183, .28); }
.btn.primary:active { transform: translateY(1px) scale(.99); }
.btn { border-radius: 10px; transition: transform .15s ease, background .15s ease, border-color .15s ease; }
.btn:active { transform: scale(.98); }

/* ⑤ 表格：表头浅蓝底、行悬停高亮、圆角容器 */
.tbl-wrap { border-radius: 14px; border: 1px solid var(--line, #e6edf8); overflow: hidden; }
.tbl thead th {
  background: #f4f8ff !important; font-weight: 700 !important; font-size: 12.5px !important;
  color: var(--tx2, #5c6b81) !important; border-bottom: 1px solid var(--line, #e6edf8) !important;
  padding: 11px 12px !important; letter-spacing: .3px;
}
.tbl tbody tr { transition: background .15s ease; }
.tbl tbody tr:hover { background: #f8fbff !important; }
.tbl tbody td { padding: 12px !important; }

/* ⑥ KPI / 数据卡：大数字 + 渐变点缀 */
.kpi, .db-card { border-radius: 14px !important; transition: transform .18s ease, box-shadow .18s ease; }
.kpi:hover, .db-card:hover { transform: translateY(-1px); }
.k-num, .kpi-v { font-variant-numeric: tabular-nums; letter-spacing: -.5px; }

/* ⑦ 列表卡片（资源/转单/工单）：悬停微抬，边界更清晰 */
.res-item, .trans-item, .card-list > .card { border-radius: 14px !important; }
.res-item:hover, .trans-item:hover { transform: translateY(-2px); box-shadow: 0 10px 26px -14px rgba(17,58,122,.22) !important; }

/* ⑧ 聊天界面：气泡更圆润、输入区更精致、消息区留白更舒服 */
.wx-wrap { border-radius: 16px; overflow: hidden; }
.wx-hd { background-image: linear-gradient(135deg, #2b6fe0, #1a54b7) !important; }
.wx-bub { border-radius: 14px !important; box-shadow: 0 1px 3px rgba(17,58,122,.08); line-height: 1.65; }
.chat-bub, .chat-row .chat-bub { border-radius: 14px !important; }
.wx-inp { border-radius: 20px !important; }
.wx-send { border-radius: 18px !important; font-weight: 600; }
.chat-sep { color: var(--tx3); letter-spacing: .5px; }

/* ⑨ 分区标题 / 列表信息条：更克制的层级 */
.listinfo { border-radius: 12px; line-height: 1.7; }

/* ⑩ 表单控件：统一圆角与聚焦光晕 */
.inp, select.inp, textarea.inp { border-radius: 10px !important; transition: border-color .15s ease, box-shadow .15s ease; }
.inp:focus, select.inp:focus, textarea.inp:focus {
  border-color: #7ea9ee !important; box-shadow: 0 0 0 3px rgba(43, 111, 224, .12) !important; outline: none;
}

/* ⑪ 徽标 / 标签：更精致的胶囊感 */
.tag, .pill { border-radius: 999px !important; font-weight: 600; letter-spacing: .2px; }

/* ⑫ 空状态：更舒展 */
.empty { padding: 44px 20px !important; color: var(--tx3); }

/* 需求19（用户 2026-10-17）：日程排班首屏概览 hero —— 渐变承托 + 大日期 + 关键数字 + 快捷操作 */
.sch-hero {
  display: flex; align-items: center; justify-content: flex-start; gap: 16px; flex-wrap: wrap;
  margin: 0 0 14px; padding: 20px 22px; border-radius: 18px;
  background: linear-gradient(135deg, #2b6fe0 0%, #1a54b7 62%, #12408f 100%);
  box-shadow: 0 10px 28px -14px rgba(18, 64, 143, .55);
  color: #fff;
}
.sch-hero .sh-date { font-size: 22px; font-weight: 800; letter-spacing: -.4px; line-height: 1.25; }
.sch-hero .sh-date small { font-size: 13px; font-weight: 500; opacity: .82; margin-left: 6px; }
.sch-hero .sh-sub { margin-top: 6px; font-size: 13px; opacity: .9; }
.sch-hero .sh-sub b { font-size: 16px; font-weight: 800; color: #fff; }
.sch-hero .sh-right { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.sch-hero .btn { background: rgba(255,255,255,.16); border-color: rgba(255,255,255,.28); color: #fff; backdrop-filter: blur(4px); }
.sch-hero .btn:hover { background: rgba(255,255,255,.26); }
.sch-hero .btn.primary { background: #fff; color: var(--brand, #1a54b7); border-color: #fff; box-shadow: 0 2px 10px rgba(0,0,0,.12); }
@media (max-width: 640px) {
  .sch-hero { padding: 16px 18px; }
  .sch-hero .sh-date { font-size: 19px; }
  .sch-hero .sh-right { width: 100%; }
  .sch-hero .sh-right .btn { flex: 1 1 auto; text-align: center; }
}

/* 今日待办分组：更精致的卡片感 */
.todo-seg { border-radius: 12px; }
.todo-row { border-radius: 10px; transition: background .15s ease; }
.todo-row:hover { background: #f8fbff; }

/* ============================================================================
   需求22（用户 2026-10-17）：管理后台 11 项功能页 —— 导航分组与页签视觉重设计
   （内容区的卡片/表格已由「全局视觉升级 v2」统一覆盖，这里补齐后台外壳）
   ============================================================================ */
.admin-groups { display: flex; flex-direction: column; gap: 12px; margin-bottom: 16px; }
.admin-group {
  background: #fff; border: 1px solid var(--line, #e6edf8); border-radius: 16px;
  padding: 14px 16px; box-shadow: 0 1px 3px rgba(17,58,122,.05);
}
.ag-t {
  font-size: 11.5px; font-weight: 800; letter-spacing: 1.2px; text-transform: uppercase;
  color: var(--tx3, #8593ad); margin-bottom: 10px;
}
.ag-items { display: flex; flex-wrap: wrap; gap: 8px; }
.stab {
  padding: 8px 15px; border-radius: 999px; border: 1px solid var(--line, #e6edf8);
  background: #f8fbff; font-size: 13px; font-weight: 600; color: var(--tx2, #5c6b81);
  cursor: pointer; transition: all .18s ease; font-family: inherit;
}
.stab:hover { background: #eef4ff; border-color: #cfe0f8; color: var(--brand, #1a54b7); }
.stab.active {
  background: linear-gradient(135deg, #2b6fe0 0%, #1a54b7 100%);
  color: #fff; border-color: transparent;
  box-shadow: 0 3px 12px rgba(26, 84, 183, .30);
}
.stab.danger { color: var(--danger, #c0392b); border-color: #f3d3d0; }
.stab.danger.active { background: linear-gradient(135deg, #e05a4e, #c0392b); color: #fff; border-color: transparent; }

/* 后台内容区：顶部留白与卡片间距更从容 */
#admin-bd > .card + .card, #admin-bd > section + section { margin-top: 14px; }
#admin-bd .listinfo { margin-bottom: 12px; }
@media (max-width: 640px) {
  .admin-group { padding: 12px; border-radius: 14px; }
  .stab { padding: 7px 12px; font-size: 12.5px; }
}
/* ============================================================================
   伊互助 · Design System v3  (2026-10-17)
   —— 由 UI Designer 建立。目标：专业、可信、有温度的医疗协作工具气质。
   —— 设计哲学：Refined Restraint（克制的精致）。高级感 = 一致性 × 层次 × 细节，
      而非堆砌特效。所有改动只作用于「视觉属性」（色彩/字重/圆角/阴影/边框/间距节奏），
      不改变任何 DOM 结构、不改会撑高的 padding 尺寸，确保功能与布局零回归。
   ============================================================================ */

/* ─────────────────────────────────────────────────────────
   1. DESIGN TOKENS · 设计令牌
   ───────────────────────────────────────────────────────── */
:root {
  /* ▸ 品牌色阶（Blueprint Blue）—— 医疗信任感，比政务蓝更深更沉 */
  --c-brand-50:  #EEF4FF;
  --c-brand-100: #DCE7FD;
  --c-brand-200: #BCD0FA;
  --c-brand-300: #8FB0F4;
  --c-brand-400: #5A8BEA;
  --c-brand-500: #2F6BD8;   /* 主色：交互主态 */
  --c-brand-600: #1E52B8;   /* 主色深：hover / 强调 */
  --c-brand-700: #163E92;   /* 品牌深：标题栏、hero */
  --c-brand-800: #10306F;
  --c-brand-900: #0B2455;

  /* ▸ 中性色阶（Slate，带蓝调避免脏灰） */
  --c-ink-900: #0E1B2E;     /* 主文字 */
  --c-ink-700: #33445C;     /* 次级文字 */
  --c-ink-500: #5B6B82;     /* 辅助文字 */
  --c-ink-400: #8493A8;     /* 占位 / 弱提示 */
  --c-ink-300: #A9B6C7;
  --c-line-1:  #E7EDF6;     /* 主分隔线 */
  --c-line-2:  #EFF3F9;     /* 极细分隔线 */
  --c-surface-0: #FFFFFF;
  --c-surface-1: #F7F9FD;   /* 页面底 */
  --c-surface-2: #F1F5FB;   /* 凹陷区 / 表头 */
  --c-surface-3: #E9EFF8;   /* 更深凹陷 */

  /* ▸ 语义色（与品牌蓝协调，降低饱和度以显克制） */
  --c-ok:      #0E8B57;
  --c-ok-bg:   #E8F7EF;
  --c-warn:    #C97A16;
  --c-warn-bg: #FFF6E6;
  --c-danger:  #C0392B;
  --c-danger-bg:#FDECEA;
  --c-info:    #2F6BD8;
  --c-info-bg: #EEF4FF;

  /* ▸ 字体阶梯（1.25 倍率，医疗界面偏保守，正文 14px） */
  --fs-2xs: 11px;
  --fs-xs:  12px;
  --fs-sm:  13px;
  --fs-md:  14px;
  --fs-lg:  15px;
  --fs-xl:  17px;
  --fs-2xl: 20px;
  --fs-3xl: 24px;
  --fs-4xl: 28px;

  /* ▸ 间距（4pt 网格） */
  --sp-1: 4px;  --sp-2: 8px;  --sp-3: 12px; --sp-4: 16px;
  --sp-5: 20px; --sp-6: 24px; --sp-8: 32px; --sp-10: 40px;

  /* ▸ 圆角阶梯 */
  --r-sm: 8px;  --r-md: 10px; --r-lg: 14px; --r-xl: 18px; --r-pill: 999px;

  /* ▸ 阴影阶梯（全部带蓝调，避免灰死） */
  --e-1: 0 1px 2px rgba(14, 27, 46, .04);
  --e-2: 0 1px 2px rgba(14, 27, 46, .04), 0 4px 14px -6px rgba(14, 27, 46, .08);
  --e-3: 0 2px 4px rgba(14, 27, 46, .05), 0 10px 28px -10px rgba(14, 27, 46, .14);
  --e-4: 0 6px 16px rgba(14, 27, 46, .08), 0 20px 48px -16px rgba(14, 27, 46, .20);
  --e-focus: 0 0 0 3px rgba(47, 107, 216, .16);

  /* ▸ 动效 */
  --t-fast: 140ms cubic-bezier(.4, 0, .2, 1);
  --t-base: 200ms cubic-bezier(.4, 0, .2, 1);

  /* ▸ 兼容旧变量（app.css 中大量引用，统一指向新令牌） */
  --brand: var(--c-brand-600);
  --brand-d: var(--c-brand-700);
  --brand-l: var(--c-brand-400);
  --brand-surface: var(--c-brand-700);
  --brand-tint: var(--c-brand-50);
  --aux: #2F9BF0;
  --aux-strong: #1A6FC4;
  --aux-tint: #EAF5FE;
  --ok: var(--c-ok);
  --warn: var(--c-warn);
  --danger: var(--c-danger);
  --bg: var(--c-surface-1);
  --card: var(--c-surface-0);
  --line: var(--c-line-1);
  --tx: var(--c-ink-900);
  --tx2: var(--c-ink-700);
  --tx3: var(--c-ink-500);
  --radius: var(--r-lg);
  --shadow: var(--e-2);
  --shadow-1: var(--e-1);
  --shadow-2: var(--e-3);
}

/* ─────────────────────────────────────────────────────────
   2. BASE · 基底
   ───────────────────────────────────────────────────────── */
body {
  background: var(--c-surface-1);
  background-image: linear-gradient(180deg, #F8FAFE 0%, #F4F7FC 240px);
  background-attachment: fixed;
  color: var(--c-ink-900);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}
/* 数字统一等宽，表格与金额对齐更整齐 */
.num, .k-num, .kpi-v, td.num, .money, .mono { font-variant-numeric: tabular-nums; }

::selection { background: var(--c-brand-200); color: var(--c-ink-900); }

/* 滚动条：细而克制（仅 Webkit） */
::-webkit-scrollbar { width: 8px; height: 8px; }
::-webkit-scrollbar-thumb { background: #D3DDEB; border-radius: var(--r-pill); border: 2px solid transparent; background-clip: content-box; }
::-webkit-scrollbar-thumb:hover { background: #BCC9DB; background-clip: content-box; }
::-webkit-scrollbar-track { background: transparent; }

/* ─────────────────────────────────────────────────────────
   3. CARD · 卡片（信息承载的基本单元）
   ───────────────────────────────────────────────────────── */
.card {
  background: var(--c-surface-0) !important;
  border: 1px solid var(--c-line-1) !important;
  border-radius: var(--r-xl) !important;
  box-shadow: var(--e-1) !important;
  transition: box-shadow var(--t-base), border-color var(--t-base) !important;
}
/* hover 只提阴影，不位移 —— 位移会造成相邻元素视觉抖动 */
.card:hover { box-shadow: var(--e-2) !important; border-color: #DEE7F4 !important; }

/* 卡片标题：左侧品牌色细竖条作为视觉锚点（比加粗更高级） */
.card-hd { border-bottom: 1px solid var(--c-line-2) !important; }
.card-hd h3 {
  font-size: var(--fs-lg) !important;
  font-weight: 650 !important;
  letter-spacing: -.1px;
  color: var(--c-ink-900);
  display: flex; align-items: center; gap: var(--sp-2);
}
.card-hd h3::before {
  content: ""; flex: 0 0 auto; width: 3px; height: 15px; border-radius: 2px;
  background: linear-gradient(180deg, var(--c-brand-500), var(--c-brand-700));
}
/* 无标题卡片（纯容器）不加竖条 */
.card-hd:empty h3::before, .card-hd h3:empty::before { display: none; }

/* ─────────────────────────────────────────────────────────
   4. BUTTON · 按钮
   ───────────────────────────────────────────────────────── */
.btn {
  border-radius: var(--r-md) !important;
  font-weight: 550;
  letter-spacing: .1px;
  transition: background var(--t-fast), border-color var(--t-fast),
              box-shadow var(--t-fast), transform var(--t-fast) !important;
}
.btn.primary {
  background-color: var(--c-brand-600) !important;
  background-image: linear-gradient(180deg, #2F6BD8 0%, #1E52B8 100%) !important;
  border: 1px solid #1A4AA6 !important;
  color: #fff !important;
  box-shadow: 0 1px 2px rgba(16, 48, 111, .24), inset 0 1px 0 rgba(255, 255, 255, .16) !important;
}
.btn.primary:hover {
  background-image: linear-gradient(180deg, #3A76E0 0%, #2358C4 100%) !important;
  box-shadow: 0 2px 8px rgba(30, 82, 184, .30), inset 0 1px 0 rgba(255, 255, 255, .16) !important;
}
.btn.primary:active { transform: translateY(.5px); box-shadow: 0 1px 2px rgba(16,48,111,.24) !important; }
.btn:focus-visible { outline: none; box-shadow: var(--e-focus) !important; }
.btn.danger {
  color: var(--c-danger) !important; border-color: #F0D2CE !important; background: #fff !important;
}
.btn.danger:hover { background: var(--c-danger-bg) !important; border-color: #E7BDB7 !important; }
.btn.ok { color: var(--c-ok) !important; border-color: #CBE9D9 !important; background: #fff !important; }
.btn.ok:hover { background: var(--c-ok-bg) !important; }
.btn.aux2 { color: var(--c-brand-600) !important; border-color: var(--c-brand-200) !important; background: #fff !important; }
.btn.aux2:hover { background: var(--c-brand-50) !important; }

/* ─────────────────────────────────────────────────────────
   5. FORM · 表单控件
   ───────────────────────────────────────────────────────── */
.inp, select.inp, textarea.inp, .field input, .field select, .field textarea {
  border-radius: var(--r-md) !important;
  border-color: #DCE5F2 !important;
  background: #fff !important;
  color: var(--c-ink-900) !important;
  transition: border-color var(--t-fast), box-shadow var(--t-fast) !important;
}
.inp::placeholder, .field input::placeholder, .field textarea::placeholder { color: var(--c-ink-300) !important; }
.inp:focus, select.inp:focus, textarea.inp:focus,
.field input:focus, .field select:focus, .field textarea:focus {
  outline: none !important;
  border-color: var(--c-brand-400) !important;
  box-shadow: var(--e-focus) !important;
}

/* ─────────────────────────────────────────────────────────
   6. TABLE · 表格
   ───────────────────────────────────────────────────────── */
.tbl-wrap { border-radius: var(--r-lg) !important; border: 1px solid var(--c-line-1) !important; }
.tbl thead th {
  background: var(--c-surface-2) !important;
  color: var(--c-ink-500) !important;
  font-size: var(--fs-xs) !important;
  font-weight: 650 !important;
  letter-spacing: .4px;
  text-transform: none;
  border-bottom: 1px solid var(--c-line-1) !important;
}
.tbl tbody td { border-bottom: 1px solid var(--c-line-2) !important; color: var(--c-ink-700); }
.tbl tbody tr:last-child td { border-bottom: none !important; }
.tbl tbody tr { transition: background var(--t-fast) !important; }
.tbl tbody tr:hover { background: #F8FBFF !important; }
.tbl tbody tr.rowlink { cursor: pointer; }

/* ─────────────────────────────────────────────────────────
   7. TAG / PILL · 标签与状态胶囊
   ───────────────────────────────────────────────────────── */
.tag, .pill {
  border-radius: var(--r-pill) !important;
  font-size: var(--fs-2xs) !important;
  font-weight: 650 !important;
  letter-spacing: .2px;
  padding: 2px 8px;
  border-width: 1px;
  border-style: solid;
}
.pill.ok, .tag.ok { background: var(--c-ok-bg) !important; color: var(--c-ok) !important; border-color: #CDEBDB !important; }
.pill.warn, .tag.warn { background: var(--c-warn-bg) !important; color: var(--c-warn) !important; border-color: #F3E0BE !important; }
.pill.danger, .tag.danger { background: var(--c-danger-bg) !important; color: var(--c-danger) !important; border-color: #F1D3CF !important; }
.pill.run, .tag.run { background: var(--c-info-bg) !important; color: var(--c-brand-600) !important; border-color: var(--c-brand-200) !important; }

/* ─────────────────────────────────────────────────────────
   8. KPI · 数据指标卡
   ───────────────────────────────────────────────────────── */
.kpi, .db-card { border-radius: var(--r-lg) !important; border-color: var(--c-line-1) !important; }
.k-num, .kpi-v { font-weight: 700 !important; letter-spacing: -.6px; color: var(--c-ink-900); }
.k-label, .kpi-t { font-size: var(--fs-xs) !important; color: var(--c-ink-500) !important; font-weight: 500; }

/* ─────────────────────────────────────────────────────────
   9. NAV · 侧栏与底部 Tab
   ───────────────────────────────────────────────────────── */
.nav-item, .sidebar .nav-item {
  border-radius: var(--r-md) !important;
  font-weight: 550;
  transition: background var(--t-fast), color var(--t-fast) !important;
}
.nav-item i { transition: transform var(--t-fast); }
.nav-item:hover i { transform: translateY(-1px); }
.nav-group-t, .nav-sec-t {
  font-size: var(--fs-2xs) !important; font-weight: 750 !important;
  letter-spacing: 1px; color: var(--c-ink-400) !important;
}

/* 底部 Tab：白底 + 顶部极细线 + 激活态品牌色（替代厚重实底） */
.tabbar {
  background: rgba(255, 255, 255, .96) !important;
  border-top: 1px solid var(--c-line-1) !important;
  box-shadow: 0 -4px 20px -12px rgba(14, 27, 46, .16) !important;
  backdrop-filter: saturate(180%) blur(12px);
  -webkit-backdrop-filter: saturate(180%) blur(12px);
}
.tabbar .nav-item { color: var(--c-ink-400); }
.tabbar .nav-item.on, .tabbar .nav-item.active { color: var(--c-brand-600); }
.tabbar .nav-item span { font-size: var(--fs-2xs) !important; font-weight: 600; }

/* ─────────────────────────────────────────────────────────
   10. HERO / PAGE HEADER · 首屏与页头
   ───────────────────────────────────────────────────────── */
/* 页面标题：更强的字号对比 + 克制的副标题 */
.ph { padding-bottom: var(--sp-2); }
.ph h2, .page-title { letter-spacing: -.4px; font-weight: 700; }

/* ─────────────────────────────────────────────────────────
   11. EMPTY / LISTINFO · 空状态与信息条
   ───────────────────────────────────────────────────────── */
.empty { color: var(--c-ink-400) !important; }
.empty p { font-weight: 550; color: var(--c-ink-500); }
.listinfo {
  background: var(--c-brand-50) !important;
  border: 1px solid var(--c-brand-100) !important;
  border-radius: var(--r-lg) !important;
  color: var(--c-ink-700) !important;
  line-height: 1.75;
}

/* ─────────────────────────────────────────────────────────
   12. MODAL · 弹窗（层次感的关键）
   ───────────────────────────────────────────────────────── */
.modal {
  border-radius: var(--r-xl) !important;
  box-shadow: var(--e-4) !important;
  border: 1px solid var(--c-line-1);
}
.modal-hd { border-bottom: 1px solid var(--c-line-2) !important; }
.modal-hd h3 { font-weight: 700; letter-spacing: -.2px; }
.modal-ft { border-top: 1px solid var(--c-line-2) !important; background: #FCFDFF; }

/* ─────────────────────────────────────────────────────────
   13. 可访问性 · Accessibility（WCAG AA）
   ───────────────────────────────────────────────────────── */
/* 触控目标最小 44px（仅移动端，避免影响桌面紧凑表格） */
@media (max-width: 900px) {
  .tabbar .nav-item { min-height: 44px; }
  .btn.sm { min-height: 32px; }
}
/* 尊重系统「减少动态效果」偏好 */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .01ms !important;
    transition-duration: .01ms !important;
  }
}
/* 键盘可达：所有可交互元素有可见焦点环 */
a:focus-visible, button:focus-visible, [data-res]:focus-visible, [data-tab]:focus-visible {
  outline: 2px solid var(--c-brand-400);
  outline-offset: 2px;
  border-radius: var(--r-sm);
}

/* ─────────────────────────────────────────────────────────
   14. 深色适配防护：本项目为强制浅色，防止系统/浏览器反色
   ───────────────────────────────────────────────────────── */
:root { color-scheme: light; }

/* ─────────────────────────────────────────────────────────
   15. DATA BOARD · 数据大盘专项（信息密度重排）
   问题诊断：移动端主卡单列排列，每张近 200px 高却只承载「图标+标签+数字」，
   留白过剩 → 视觉空旷，缺乏高级感。改为「1 大 + 2 小」节奏：
   首个核心指标（用户总数）占满整行作为视觉焦点，后两张并排，形成主次层级。
   ───────────────────────────────────────────────────────── */
@media (max-width: 900px) {
  .db-mains { grid-template-columns: repeat(2, 1fr) !important; gap: 10px !important; }
  /* 用户要求（2026-10-19）：取消「首个卡占整行」的特殊处理 ——
     原来 4 张主卡排成 1+2+1，最后一张（即时消息）只剩半行、右侧留白，视觉很乱。
     现在统一 2×2：第一排「公司/平台用户总数 + 本月服务金额」，第二排「待办合计 + 即时消息」。 */
  .db-mains > .db-card:first-child { grid-column: auto !important; }
  .db-mains > .db-card:first-child .db-v { font-size: 21px !important; letter-spacing: -.4px !important; }
}

/* 主卡内部收紧，提升信息密度（仅数据大盘，不波及全局卡片） */
.db-main { padding: 15px 16px !important; }
.db-card { gap: 6px !important; border-radius: var(--r-lg) !important; }
/* hover 只提阴影不位移 —— 位移会让相邻卡片产生视觉抖动，低级感来源之一 */
.db-card:hover { transform: none !important; box-shadow: var(--e-3) !important; }

/* 数字层级：主卡更强，标签更轻，形成明确的三级层次 */
.db-v { font-size: 25px !important; font-weight: 750 !important; letter-spacing: -.8px; line-height: 1.15 !important; }
.db-main .db-v { font-size: 30px !important; }
.db-v small { font-size: var(--fs-xs) !important; font-weight: 500 !important; color: var(--c-ink-400) !important; }
.db-t { font-size: var(--fs-xs) !important; font-weight: 550 !important; color: var(--c-ink-500) !important; letter-spacing: .1px; }

/* 图标容器：柔和的双色渐变底，替代单调的平铺色块 */
.db-ico {
  width: 36px !important; height: 36px !important; border-radius: var(--r-md) !important;
  font-size: 17px !important;
  background-image: linear-gradient(135deg, rgba(255,255,255,.55), rgba(255,255,255,0));
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.5);
  border: 1px solid rgba(14,27,46,.04);
}
/* 顶部语义细边：更克制（2px → 视觉更利落） */
.db-main::before { height: 2px !important; opacity: .9; }

/* 移动端底部 Tab 与内容的安全距离再确认（v3 统一留白节奏） */
@media (max-width: 900px) {
  .content, #content, main.content { padding-bottom: calc(112px + env(safe-area-inset-bottom)) !important; }
}

/* 16. 数字防裁切（2 列窄卡必须缩字号，否则 19,545.00 这类金额会溢出被裁） */
@media (max-width: 900px) {
  .db-mains > .db-card .db-v { font-size: 21px !important; letter-spacing: -.4px; }
  .db-mains > .db-card:first-child .db-v { font-size: 30px !important; letter-spacing: -.8px; }
  .db-mains > .db-card .db-v small { font-size: 11px !important; }
}
/* 所有 KPI 数字容器：最小宽度归零 + 允许内容完整显示 */
/* 2026-10-24（布局统一）：数据大盘统一栅格 —— 管理员与陪诊师看板都用 .db-grid（每排 2 张），
   同行卡片等高拉伸、尺寸/对齐完全一致，彻底消除「2 列 + 4 列混排」造成的错位与留白。 */
.db-grid { align-items: stretch !important; }
.db-grid > .db-card { height: 100% !important; min-height: 92px; }
@media (max-width: 900px) {
  .db-grid > .db-card { min-height: 86px; }
}
.db-card, .kpi, .db-v { min-width: 0; }
.db-v { overflow: visible; }

/* ═══════════════════════════════════════════════════════════
   批次 A · 服务工单 / 客户管理 / 各类列表页
   （通用组件：.filters 筛选栏、.tbl.cards 卡片化表格、.listinfo）
   ═══════════════════════════════════════════════════════════ */

/* ① 筛选栏：从「裸输入框排一排」升级为独立容器，与列表形成清晰分组 */
.filters {
  background: var(--c-surface-0);
  border: 1px solid var(--c-line-1);
  border-radius: var(--r-lg);
  padding: 12px 14px;
  box-shadow: var(--e-1);
  gap: 10px;
  margin-bottom: 14px;
}
.filters .inp { height: 38px; border-radius: var(--r-md) !important; }
.filters .btn { height: 38px; }
@media (max-width: 640px) {
  .filters { padding: 10px 12px; }
  .filters .inp, .filters .btn { flex: 1 1 calc(50% - 5px); min-width: 0; }
}

/* ② 移动端表格→卡片：更舒展的卡片、更清晰的行内层级 */
@media (max-width: 900px) {
  .tbl.cards tr {
    border-radius: var(--r-lg) !important;
    border: 1px solid var(--c-line-1) !important;
    box-shadow: var(--e-1);
    padding: 12px 14px !important;
    margin-bottom: 10px;
    transition: box-shadow var(--t-fast);
  }
  .tbl.cards tr:active { box-shadow: var(--e-2); }
  .tbl.cards td { padding: 4px 0 !important; font-size: var(--fs-sm) !important; }
  /* 标签列：小字灰色标签，值加粗，形成「标签 : 值」的阅读节奏 */
  .tbl.cards td::before {
    font-size: var(--fs-2xs) !important;
    font-weight: 600;
    letter-spacing: .3px;
    color: var(--c-ink-400) !important;
  }
  .tbl.cards td.strong { font-size: var(--fs-md) !important; padding-top: 2px !important; }
  .tbl.cards td.ops {
    margin-top: 8px; padding-top: 10px !important;
    border-top: 1px solid var(--c-line-2) !important;
    gap: 8px;
  }
}

/* ③ 桌面表格：行高与图标对齐更精致 */
.tbl td .tag, .tbl td .pill { vertical-align: middle; }
.tbl td a.link { font-weight: 550; }
.tbl td.ellip { color: var(--c-ink-500); }

/* ④ 列表信息条（筛选结果计数）：更轻、更贴近列表 */
.listinfo {
  font-size: var(--fs-sm) !important;
  color: var(--c-ink-700) !important;
}
.listinfo b { color: var(--c-brand-600); font-weight: 750; }

/* ⑤ 列表容器间距节奏 */
#content > .card-list, #content > .tbl-wrap { margin-top: 2px; }
.card-list { display: flex; flex-direction: column; gap: 10px; }

/* ═══════════════════════════════════════════════════════════
   批次 B · 日程排班 / 工作记录
   ═══════════════════════════════════════════════════════════ */

/* ① 周历：格子更精致，今日用「品牌色环 + 浅色底」替代细描边 */
.cal-grid { gap: 10px !important; }
.cal-col {
  border-radius: var(--r-lg) !important;
  border: 1px solid var(--c-line-1) !important;
  background: var(--c-surface-0) !important;
  transition: box-shadow var(--t-fast), border-color var(--t-fast), transform var(--t-fast);
}
.cal-col:hover { box-shadow: var(--e-2); border-color: #DDE7F5 !important; }
/* 今日：品牌色环 + 极浅底，视觉上"活"起来 */
.cal-col.today {
  border-color: var(--c-brand-400) !important;
  box-shadow: 0 0 0 2px rgba(47, 107, 216, .14), var(--e-2) !important;
  background: linear-gradient(180deg, #F6FAFF 0%, #FFFFFF 56px) !important;
}
.cal-hd { padding-bottom: 6px; }
.cal-hd b { font-weight: 750; color: var(--c-ink-900); letter-spacing: -.2px; }
.cal-col.today .cal-hd b { color: var(--c-brand-600); }

/* 日格内的工单项：小卡片，便于辨识 */
.cal-ord {
  border-radius: var(--r-sm) !important;
  background: var(--c-surface-0) !important;
  border: 1px solid var(--c-line-2) !important;
  box-shadow: var(--e-1);
  transition: box-shadow var(--t-fast), transform var(--t-fast);
}
.cal-ord:hover { box-shadow: var(--e-2); transform: translateY(-1px); }
.co-t { font-weight: 700 !important; color: var(--c-brand-600) !important; }

/* 空白格「＋」：虚线描边，克制提示 */
.cal-add {
  border-radius: var(--r-sm) !important;
  border: 1px dashed #D3DEEE !important;
  color: var(--c-ink-300) !important;
  background: transparent !important;
  transition: all var(--t-fast);
}
.cal-add:hover { border-color: var(--c-brand-300) !important; color: var(--c-brand-500) !important; background: var(--c-brand-50) !important; }

/* ② 今日待办：分组带状态色标题条 */
.todo-seg {
  border-radius: var(--r-lg) !important;
  border: 1px solid var(--c-line-1) !important;
  padding: 10px 12px !important;
  background: var(--c-surface-0);
  box-shadow: var(--e-1);
}
.todo-seg + .todo-seg { margin-top: 10px; }
.ts-hd {
  font-size: var(--fs-xs) !important;
  font-weight: 700 !important;
  letter-spacing: .3px;
  color: var(--c-ink-500) !important;
  margin-bottom: 6px;
}
.todo-row {
  border-bottom: 1px dashed var(--c-line-2) !important;
  padding: 8px 4px !important;
  border-radius: var(--r-sm);
}
.todo-row:hover { background: #F8FBFF; }
.tr-t { font-weight: 700 !important; color: var(--c-brand-600) !important; font-variant-numeric: tabular-nums; }
.tr-b small { color: var(--c-ink-400) !important; }

/* ③ 工时统计条：圆角 + 渐变填充，视觉更"数据化" */
.stat-bar { padding: 4px 0; }
.sb-hd b { font-weight: 700; }
.sb-hd span { color: var(--c-ink-500) !important; font-variant-numeric: tabular-nums; }
.sb-track {
  height: 8px !important;
  border-radius: var(--r-pill) !important;
  background: var(--c-surface-2) !important;
  overflow: hidden;
  margin-top: 5px;
}
.sb-fill { border-radius: var(--r-pill) !important; }
.sb-fill.work { background-image: linear-gradient(90deg, var(--c-brand-500), var(--c-brand-700)) !important; }
.sb-fill.plan { background: #C9D8EE !important; }

/* ④ 日程明细卡片（按日聚合的三类条目） */
.sch-list { gap: 8px !important; }
.sch-card {
  border-radius: var(--r-lg) !important;
  border: 1px solid var(--c-line-1) !important;
  border-left-width: 3px !important;
  box-shadow: var(--e-1);
  transition: box-shadow var(--t-fast), transform var(--t-fast);
}
.sch-card:hover { box-shadow: var(--e-2); transform: translateX(1px); }
.sc-t { font-weight: 650; color: var(--c-ink-900); }
.sc-s { color: var(--c-ink-500) !important; font-size: var(--fs-xs); }

/* ⑤ 冲突提醒：警示感更克制但仍然醒目 */
.conflict-card {
  border-radius: var(--r-lg) !important;
  border: 1px solid #F5DFC0 !important;
  background: linear-gradient(180deg, #FFFBF3, #FFF8EE) !important;
}
.cf-hd { color: var(--c-warn) !important; font-weight: 700; }

/* ⑥ 工作记录页：与批次 A 的卡片化表格一致（若用 .tbl.cards 已自动继承） */

/* ═══════════════════════════════════════════════════════════
   批次 C · 收费结算 / 数据统计
   ═══════════════════════════════════════════════════════════ */
/* 金额列：等宽数字 + 品牌色强调，便于快速扫读 */
.tbl td.num, .tbl td .num, .money { font-variant-numeric: tabular-nums; font-weight: 650; }
.tbl td.num { color: var(--c-ink-900); }
/* 统计页的进度/占比条统一为圆角渐变 */
.progress, .bar, .pbar, .rate-bar {
  border-radius: var(--r-pill) !important; overflow: hidden;
  background: var(--c-surface-2) !important;
}
.progress i, .bar i, .pbar i, .rate-bar i {
  border-radius: var(--r-pill) !important;
  background-image: linear-gradient(90deg, var(--c-brand-500), var(--c-brand-700)) !important;
}
/* 收费状态徽标统一胶囊 */
.tbl td .tag { white-space: nowrap; }

/* ═══════════════════════════════════════════════════════════
   批次 D · 聊天 / 站内沟通
   ═══════════════════════════════════════════════════════════ */
/* ① 会话列表项：卡片化 + 未读强调 */
.wx-sess-main {
  border-radius: var(--r-md);
  padding: 10px 8px;
  transition: background var(--t-fast);
}
.wx-sess-main:hover { background: #F8FBFF; }
.wx-sess-nm { font-weight: 650 !important; color: var(--c-ink-900) !important; }
.wx-sess-sub, .wx-sess-last { color: var(--c-ink-400) !important; font-size: var(--fs-xs) !important; }
.wx-badge {
  background: var(--c-danger) !important;
  border-radius: var(--r-pill) !important;
  font-size: 10px !important; font-weight: 750 !important;
  min-width: 17px; height: 17px; line-height: 17px; padding: 0 5px;
  box-shadow: 0 1px 3px rgba(192,57,43,.28);
}

/* ② 聊天头部：v3 品牌渐变 */
.wx-hd {
  background-image: linear-gradient(135deg, var(--c-brand-500) 0%, var(--c-brand-700) 100%) !important;
  box-shadow: 0 1px 0 rgba(255,255,255,.12) inset;
}
.wx-hd-c { font-weight: 650; letter-spacing: .1px; }

/* ③ 消息区：更柔和的底，让气泡浮起来 */
.wx-msgs { background: linear-gradient(180deg, #F7F9FD, #F3F6FB) !important; }

/* ④ 气泡：圆角 + 轻阴影（对方白、自己品牌渐变） */
.wx-bub {
  border-radius: 14px !important;
  box-shadow: 0 1px 2px rgba(14,27,46,.06), 0 6px 16px -10px rgba(14,27,46,.14) !important;
  line-height: 1.68 !important;
  font-size: var(--fs-md);
  word-break: break-word;
}
/* 自己发的气泡（若用 .me / .self 标记） */
.wx-bub.me, .wx-bub.self, .wx-row.me .wx-bub {
  background-image: linear-gradient(135deg, var(--c-brand-500), var(--c-brand-600)) !important;
  color: #fff !important;
}
/* 头像：圆形 + 细边，视觉更整齐 */
.wx-av { border-radius: 50% !important; box-shadow: 0 0 0 1px rgba(14,27,46,.06); }

/* ⑤ 输入区：精致化 */
.wx-inp {
  border-radius: var(--r-pill) !important;
  background: var(--c-surface-2) !important;
  border: 1px solid transparent !important;
  height: 38px;
  transition: border-color var(--t-fast), background var(--t-fast), box-shadow var(--t-fast);
}
.wx-inp:focus {
  background: #fff !important;
  border-color: var(--c-brand-400) !important;
  box-shadow: var(--e-focus) !important;
}
.wx-send {
  border-radius: var(--r-pill) !important;
  font-weight: 650 !important;
  background-image: linear-gradient(180deg, #2F6BD8, #1E52B8) !important;
  box-shadow: 0 1px 3px rgba(30,82,184,.30) !important;
}
.wx-ico {
  border-radius: 50% !important;
  transition: background var(--t-fast);
}
.wx-ico:hover { background: var(--c-surface-2); }

/* ═══════════════════════════════════════════════════════════
   批次 F · 商城 / 保险 / 积分 / 勋章（通用卡面强化）
   ═══════════════════════════════════════════════════════════ */
/* 商品/权益卡：悬停微抬 + 更强阴影边界 */
.goods-card, .plan-card, .mall-item, .ins-card, .badge-item, .point-item {
  border-radius: var(--r-lg) !important;
  border: 1px solid var(--c-line-1) !important;
  box-shadow: var(--e-1);
  transition: box-shadow var(--t-base), transform var(--t-base), border-color var(--t-base);
}
.goods-card:hover, .plan-card:hover, .mall-item:hover, .ins-card:hover {
  box-shadow: var(--e-3); transform: translateY(-2px); border-color: #DCE6F5 !important;
}
/* 套餐卡：当前套餐用品牌环标记 */
.plan-card.cur {
  border-color: var(--c-brand-400) !important;
  box-shadow: 0 0 0 2px rgba(47,107,216,.14), var(--e-2) !important;
}
/* 勋章：未解锁降低饱和而非整体变灰，保留辨识度 */
.badge-item.locked, .badge-item.off { filter: grayscale(.6); opacity: .62; }
/* 积分数字强调 */
.point-num, .pts, .score-num { font-weight: 750 !important; letter-spacing: -.5px; color: var(--c-brand-600); font-variant-numeric: tabular-nums; }

/* ═══════════════════════════════════════════════════════════
   批次 E · 页头排版修复（通用）
   问题：head(title, sub) 用 flex 横排，移动端副标题过长会把主标题挤成两行
   （如「日程排班」被挤成「日程排 / 班」）。改为移动端上下堆叠。
   ═══════════════════════════════════════════════════════════ */
@media (max-width: 900px) {
  .page-hd {
    flex-direction: column !important;
    align-items: flex-start !important;
    gap: 3px !important;
    margin-bottom: 14px !important;
  }
  .page-hd h2 { font-size: var(--fs-2xl) !important; letter-spacing: -.3px; line-height: 1.3; white-space: nowrap; }
  .page-sub { font-size: var(--fs-xs) !important; color: var(--c-ink-400) !important; line-height: 1.5; }
}
/* 桌面端页头：主标题与副标题基线对齐更精致 */
.page-hd h2 { font-weight: 700; letter-spacing: -.3px; }
.page-sub { font-size: var(--fs-sm); }

/* ═══════════════════════════════════════════════════════════
   批次 E · 个人中心「管理后台」11 项页签
   各页复用 .card / .tbl / .kpis / .subtabs / .listinfo / .ops，
   主体已由 v3 统一覆盖；此处补齐后台专属组件。
   ═══════════════════════════════════════════════════════════ */

/* ① 子页签（日志/反馈等页内细分）：与后台 .stab 胶囊风格统一 */
.subtabs {
  display: flex; gap: 8px; flex-wrap: wrap;
  background: var(--c-surface-0); border: 1px solid var(--c-line-1);
  border-radius: var(--r-lg); padding: 8px 10px; margin-bottom: 14px;
  box-shadow: var(--e-1);
}
.subtabs .stab, .subtabs > button {
  border-radius: var(--r-pill) !important;
  padding: 7px 14px; font-size: var(--fs-sm); font-weight: 600;
  border: 1px solid transparent; background: transparent; color: var(--c-ink-500);
  cursor: pointer; transition: all var(--t-fast);
}
.subtabs .stab:hover, .subtabs > button:hover { background: var(--c-brand-50); color: var(--c-brand-600); }
.subtabs .stab.active, .subtabs > button.active {
  background-image: linear-gradient(135deg, var(--c-brand-500), var(--c-brand-600));
  color: #fff; box-shadow: 0 2px 8px rgba(30,82,184,.26);
}

/* ② 数据总览 KPI 网格：卡片对齐、留白一致 */
.kpis { gap: 12px !important; }
.kpis > .card, .kpis > .kpi {
  border-radius: var(--r-lg) !important;
  padding: 14px 16px;
  margin-bottom: 0 !important;
}

/* ③ 危险操作卡（系统重置）：克制的警示边界 */
.card.alert {
  border-color: #F2D7D3 !important;
  background: linear-gradient(180deg, #FFFCFB, #FFFFFF 60%) !important;
}
.card.alert .card-hd h3::before { background: linear-gradient(180deg, #E05A4E, #C0392B) !important; }
.card.alert .card-hd { border-bottom-color: #F7E4E1 !important; }

/* ④ 操作按钮区：统一间距与换行 */
.ops { gap: 8px; flex-wrap: wrap; align-items: center; }
.ops > .btn { margin: 0; }
.flow-ops { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }

/* ⑤ 权限矩阵 / 勾选组：更清晰的点击区 */
.perm-grid, .perm-group { border-radius: var(--r-lg); }
.perm-group + .perm-group { margin-top: 10px; }
.perm-grid label, .perm-item, .chk {
  border-radius: var(--r-md);
  padding: 6px 10px;
  transition: background var(--t-fast);
}
.perm-grid label:hover, .perm-item:hover, .chk:hover { background: var(--c-brand-50); }
/* 复选框统一品牌色 */
input[type="checkbox"], input[type="radio"] { accent-color: var(--c-brand-600); }

/* ⑥ 日志/表格页：时间列弱化、操作列右对齐 */
.tbl td .mono, .tbl td.mono { font-family: ui-monospace, "SF Mono", Menlo, monospace; font-size: var(--fs-xs); color: var(--c-ink-500); }
.tbl td.ops { white-space: nowrap; }

/* ⑦ 成员列表头像位（若有）：圆形 */
.m-av, .avatar { border-radius: 50% !important; box-shadow: 0 0 0 1px rgba(14,27,46,.06); }

/* ⑧ 后台卡片间距：同页多卡片呼吸更均匀 */
#admin-bd .card { margin-bottom: 14px !important; }
#admin-bd .card:last-child { margin-bottom: 0 !important; }

/* ═══════════════════════════════════════════════════════════
   用户反馈 v2（2026-10-17）
   ═══════════════════════════════════════════════════════════ */

/* ① 「首页不要大卡，全部小卡，2 列排列」——取消首卡 span 2，所有 KPI 等大切 2 列 */
@media (max-width: 900px) {
  .db-mains { grid-template-columns: repeat(2, 1fr) !important; gap: 10px !important; }
  .db-mains > .db-card:first-child { grid-column: auto !important; }
  /* 等大后所有卡数字统一 21px，避免宽窄不一导致的字号跳变 */
  .db-mains > .db-card .db-v,
  .db-mains > .db-card:first-child .db-v { font-size: 21px !important; letter-spacing: -.4px; }
  .db-mains > .db-card .db-ico { width: 32px !important; height: 32px !important; font-size: 15px !important; }
  .db-mains > .db-card { padding: 13px 14px !important; }
}
/* 桌面端保持 3 列等宽（大屏信息密度更好） */
@media (min-width: 901px) {
  .db-mains { grid-template-columns: repeat(3, 1fr) !important; }
  .db-mains > .db-card:first-child { grid-column: auto !important; }
}

/* ②「发布转单」按钮不够明显 → 从白底描边升级为实心渐变（与主按钮同权重但用辅助色区分） */
.btn.aux2 {
  background-image: linear-gradient(180deg, #3D8BE8 0%, #1F6FC8 100%) !important;
  border: 1px solid #1A5FAF !important;
  color: #fff !important;
  font-weight: 600 !important;
  box-shadow: 0 1px 2px rgba(26, 95, 175, .28), inset 0 1px 0 rgba(255, 255, 255, .18) !important;
}
.btn.aux2:hover {
  background-image: linear-gradient(180deg, #4D97EE 0%, #2879D4 100%) !important;
  box-shadow: 0 3px 10px rgba(31, 111, 200, .30), inset 0 1px 0 rgba(255,255,255,.18) !important;
}
.btn.aux2:active { transform: translateY(.5px); }
/* 禁用态仍保持可读 */
.btn.aux2:disabled, .btn.aux2[disabled] { opacity: .55; }

/* ═══════════════════════════════════════════════════════════
   用户反馈 ③：聊天界面「还不够高级」——精修
   ═══════════════════════════════════════════════════════════ */

/* ① 头像：从「浅色底 + 蓝字」升级为「品牌渐变 + 白字」圆形，
   单字居中，对比度与质感同时提升（配合 JS 取首字） */
.wx-av {
  border-radius: 50% !important;
  background-image: linear-gradient(135deg, var(--c-brand-400) 0%, var(--c-brand-600) 100%) !important;
  color: #fff !important;
  font-weight: 700 !important;
  font-size: 17px !important;
  display: flex; align-items: center; justify-content: center;
  letter-spacing: 0;
  box-shadow: 0 2px 8px -2px rgba(30, 82, 184, .38), inset 0 1px 0 rgba(255,255,255,.24) !important;
  text-shadow: 0 1px 1px rgba(16,48,111,.18);
}
/* 自己的头像用浅色反白，区分双方 */
.wx-row.me .wx-av {
  background-image: linear-gradient(135deg, #E8F0FC, #D2E2FA) !important;
  color: var(--c-brand-600) !important;
  box-shadow: 0 0 0 1px rgba(30,82,184,.10) !important;
  text-shadow: none;
}

/* ② 会话列表：更大的呼吸、更清晰的三层信息（名字 / 预览 / 时间） */
.wx-sess {
  padding: 12px 14px !important;
  border-radius: var(--r-lg) !important;
  transition: background var(--t-fast);
  align-items: center;
}
.wx-sess + .wx-sess { border-top: 1px solid var(--c-line-2); }
.wx-sess:hover { background: #F8FBFF; }
.wx-sess .wx-av { width: 46px !important; height: 46px !important; font-size: 18px !important; }
.wx-sess-nm { font-size: var(--fs-lg) !important; font-weight: 650 !important; color: var(--c-ink-900) !important; letter-spacing: -.1px; }
.wx-sess-tm { font-size: var(--fs-2xs) !important; color: var(--c-ink-400) !important; font-variant-numeric: tabular-nums; white-space: nowrap; }
.wx-sess-last, .wx-sess-sub {
  font-size: var(--fs-sm) !important;
  color: var(--c-ink-500) !important;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  margin-top: 2px;
}
.wx-sess-top { align-items: baseline; gap: 8px; }

/* ③ 消息气泡：更明显的双边差异（自己=品牌渐变、对方=白底细边框） */
.wx-bub {
  padding: 9px 13px !important;
  max-width: 100% !important;
  border: 1px solid transparent;
}
.wx-row:not(.me) .wx-bub {
  background: #fff !important;
  border-color: var(--c-line-1) !important;
  color: var(--c-ink-900) !important;
  border-top-left-radius: 4px !important;   /* 指向说话人，更有"对话感" */
}
.wx-row.me .wx-bub, .wx-bub.me, .wx-bub.self {
  background-image: linear-gradient(135deg, var(--c-brand-500), var(--c-brand-600)) !important;
  border-color: transparent !important;
  color: #fff !important;
  border-top-right-radius: 4px !important;
}
/* 时间标签：更小更淡，附在气泡下方 */
.wx-t { font-size: 10.5px !important; color: var(--c-ink-300) !important; margin-top: 3px; }
/* 自己的消息整体右对齐感（若已有 flex 方向则由原逻辑控制，这里只补间距） */
.wx-row { margin-bottom: 2px; }
.wx-row.me { justify-content: flex-end; }

/* ④ 消息区：留白更舒适，气泡间距更松 */
.wx-msgs { padding: 16px 14px 18px !important; gap: 14px !important; }

/* ⑤ 顶部工具条与输入区：更轻的边框感 */
.wx-tools { background: rgba(255,255,255,.86) !important; backdrop-filter: blur(8px); }
.wx-bar { box-shadow: 0 -1px 0 var(--c-line-1); background: #fff !important; }
/* 空状态：会话为空时给引导感 */
.wx-sess-empty { padding: 48px 20px; text-align: center; color: var(--c-ink-400); }

/* ⑥ 会话列表容器：卡片化 */
.wx-list-bd { border-radius: var(--r-xl) !important; }

/* ① 补：3 个主卡在 2 列网格里会空一格（2+1）。
   把第 3 张（待办合计）改为「横向宽条卡」填满整行 —— 高度不变、内部横排，
   视觉上是条状小卡而非大卡，正好满足「全部小卡、2 列排列、不留空白」。 */
@media (max-width: 900px) {
  .db-mains > .db-card:nth-child(3) {
    grid-column: span 2;
    flex-direction: row !important;
    align-items: center !important;
    gap: 12px !important;
    min-height: 62px;
  }
  .db-mains > .db-card:nth-child(3) .db-v {
    margin-left: auto;
    font-size: 21px !important;
  }
  .db-mains > .db-card:nth-child(3) .db-t { margin-bottom: 0; }
  /* 宽条卡的顶部语义色条改为左侧竖条，更像"横向卡片" */
  .db-mains > .db-card:nth-child(3)::before {
    left: 0; top: 0; bottom: 0; right: auto;
    width: 3px; height: auto;
    border-radius: 3px 0 0 3px;
  }
}

/* ═══════════════════════════════════════════════════════════
   用户反馈 ④：「没有太多感知」——后台视觉锚点强化（纯 CSS 伪元素，不改 DOM）
   ═══════════════════════════════════════════════════════════ */
/* ① 每个分组卡加左侧品牌竖条 + 略深的组标题，扫视时更快定位 */
.admin-group {
  position: relative;
  padding-left: 18px !important;
  overflow: hidden;
}
.admin-group::before {
  content: "";
  position: absolute; left: 0; top: 14px; bottom: 14px; width: 3px;
  border-radius: 0 3px 3px 0;
  background: linear-gradient(180deg, var(--c-brand-300), var(--c-brand-600));
}
.ag-t {
  color: var(--c-ink-700) !important;
  font-size: var(--fs-xs) !important;
  letter-spacing: 1.4px !important;
}
/* ② 页签：未激活也带细描边，激活更明显的"按下感" */
.stab {
  border-color: var(--c-line-1) !important;
  background: var(--c-surface-0) !important;
}
.stab.active {
  border-color: transparent !important;
  transform: translateY(-1px);
  box-shadow: 0 4px 12px -2px rgba(26, 84, 183, .34) !important;
}
/* ③ 后台页头：加一条品牌渐变细底线，与内容区形成分隔 */
#content > .page-hd:has(+ .admin-groups) { padding-bottom: 12px; }
/* ④ 后台数据卡（成员总数等）：数字更大、更有存在感 */
#admin-bd .kpi-v, #admin-bd .k-num { font-size: 24px !important; font-weight: 750 !important; letter-spacing: -.6px; }
#admin-bd .kpi, #admin-bd .db-card { padding: 14px 16px !important; }
/* ⑤ 表格首列（成员名/工单号）加强，避免整表"一片灰" */
#admin-bd .tbl tbody td:first-child { font-weight: 600; color: var(--c-ink-900); }

/* ═══════════════════════════════════════════════════════════
   用户反馈 v3（2026-10-17）
   ═══════════════════════════════════════════════════════════ */

/* ①「发布转单」改橙色 —— 与下方「转单」徽标（#E8943B 橙系）呼应，形成类型色彩语义 */
.btn.trans {
  background-image: linear-gradient(180deg, #F2A94F 0%, #E07E1E 100%) !important;
  border: 1px solid #C56C15 !important;
  color: #fff !important;
  font-weight: 600 !important;
  box-shadow: 0 1px 2px rgba(197, 108, 21, .30), inset 0 1px 0 rgba(255, 255, 255, .22) !important;
}
.btn.trans:hover {
  background-image: linear-gradient(180deg, #F7B863 0%, #E8892B 100%) !important;
  box-shadow: 0 3px 10px rgba(224, 126, 30, .32), inset 0 1px 0 rgba(255,255,255,.22) !important;
}
.btn.trans:active { transform: translateY(.5px); }

/* ② 信息网格（我的订阅等）：替代误用的 .kv 多组塞一容器 —— 每格「标签在上、值在下」，
   高度自适应、标签基线天然对齐，2 列排布不打架。 */
.info-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px 12px;
}
.info-item {
  display: flex; flex-direction: column; gap: 3px;
  min-width: 0;
  padding: 9px 11px;
  background: var(--c-surface-1);
  border: 1px solid var(--c-line-2);
  border-radius: var(--r-md);
}
/* 长文本项占满整行（如「额度口径」） */
.info-item.span2 { grid-column: span 2; }
.info-item .k {
  font-size: var(--fs-2xs) !important;
  font-weight: 650;
  letter-spacing: .3px;
  color: var(--c-ink-400) !important;
  line-height: 1.4;
}
.info-item .v {
  font-size: var(--fs-md) !important;
  font-weight: 650;
  color: var(--c-ink-900) !important;
  line-height: 1.45;
  word-break: break-word;
}
/* 窄屏（含鸿蒙阔直板 640px 逻辑宽）：单列更稳，避免长值换行后参差 */
@media (max-width: 359px) {
  .info-grid { grid-template-columns: 1fr; }
  .info-item.span2 { grid-column: auto; }
}
/* 页面里的 .kv 被误用时也不再错乱：多子元素时自动换行成网格 */
.card > .kv { flex-wrap: wrap; }
.card > .kv > div { flex: 1 1 calc(50% - 8px); min-width: 0; }

/* ① 修复：批次 E 的 `.stab{background:#fff !important}` 会把激活态渐变盖掉（简写重置 background-image），
   导致页签激活时白底白字。这里补回激活态背景（同样带 !important 且特异性更高）。 */
.stab.active,
.subtabs .stab.active,
.subtabs > button.active {
  background-image: linear-gradient(135deg, var(--c-brand-500) 0%, var(--c-brand-600) 100%) !important;
  background-color: transparent !important;
  color: #fff !important;
  border-color: transparent !important;
}
.stab.active *, .subtabs .stab.active * { color: #fff !important; }
/* 系统重置（危险）激活态保持红色 */
.stab.danger.active {
  background-image: linear-gradient(135deg, #E05A4E 0%, #C0392B 100%) !important;
}

/* ═══════════════════════════════════════════════════════════
   用户反馈 v4（2026-10-17）：「按我的订阅-订阅概览的效果，其他页面也统一」
   —— 把 `.kv-grid`（全局 18 处使用）统一升级为「信息卡网格」：
   每格 = 浅底圆角 + 标签小字在上 + 值加粗在下。零 DOM 改动，全站信息陈列同步升级。
   覆盖页面：个人中心 / 就诊人详情 / 病史健康 / 工单详情 / 转单详情 / 需求详情 / 注册合同信息 等
   ═══════════════════════════════════════════════════════════ */
.kv-grid {
  display: grid !important;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px 12px;
  border: 0 !important;
}
/* 桌面端：按内容宽度自适应列数，避免信息过挤 */
@media (min-width: 901px) {
  .kv-grid { grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); }
}

/* 网格内的每个 kv 变成一张「信息小卡」 */
.kv-grid > .kv {
  display: flex !important;
  flex-direction: column !important;
  gap: 3px !important;
  align-items: flex-start;
  min-width: 0;
  padding: 9px 11px !important;
  background: var(--c-surface-1) !important;
  border: 1px solid var(--c-line-2) !important;
  border-radius: var(--r-md) !important;
  /* 清掉原「行式 kv」的下虚线 */
  border-bottom: 1px solid var(--c-line-2) !important;
}
.kv-grid > .kv > span {
  flex: none !important;
  width: auto !important;
  font-size: var(--fs-2xs) !important;
  font-weight: 650 !important;
  letter-spacing: .3px;
  color: var(--c-ink-400) !important;
  line-height: 1.4;
}
.kv-grid > .kv > b {
  font-size: var(--fs-md) !important;
  font-weight: 650 !important;
  color: var(--c-ink-900) !important;
  line-height: 1.5;
  word-break: break-word;
  white-space: normal;
}
/* 值里嵌的胶囊（生效中 / 可以 / 已认证等）垂直居中更整齐 */
.kv-grid > .kv > b .pill, .kv-grid > .kv > b .tag { vertical-align: middle; }

/* 长文本项（备注 / 地址 / 说明）占满整行，避免挤在半格里换行难看。
   通过「值较长」自动判定，无需改 HTML。 */
.kv-grid > .kv:has(> b:nth-child(2)) { grid-column: auto; }

/* 窄屏（<360px）单列，绝不出现半格文字挤压 */
@media (max-width: 359px) {
  .kv-grid { grid-template-columns: 1fr; }
}

/* 信息块之间的卡片间距：与 .info-item 保持一致 */
.kv-grid + .kv-grid { margin-top: 10px; }

/* ═══════════════════════════════════════════════════════════
   用户反馈 v5：服务工单 / 客户管理 —— 订单列表改为「信息卡网格」
   实现：移动端 `.tbl.cards` 每行变成 2 列网格，每个 td 成为一张信息小格
   （标签小字在上、值在下），与「我的订阅」信息卡风格统一。零 DOM 改动。
   ═══════════════════════════════════════════════════════════ */
@media (max-width: 900px) {
  .tbl.cards { background: transparent !important; border: 0 !important; }
  .tbl.cards tbody { display: block; }
  .tbl.cards tr {
    display: grid !important;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 8px 10px;
    padding: 13px 14px !important;
    background: var(--c-surface-0) !important;
    border: 1px solid var(--c-line-1) !important;
    border-radius: var(--r-lg) !important;
    box-shadow: var(--e-1);
    margin-bottom: 10px;
  }
  /* 每个字段 → 信息小格 */
  .tbl.cards td {
    display: flex !important;
    flex-direction: column;
    gap: 2px;
    min-width: 0;
    padding: 8px 10px !important;
    background: var(--c-surface-1) !important;
    border: 1px solid var(--c-line-2) !important;
    border-radius: var(--r-sm) !important;
    font-size: var(--fs-sm) !important;
    color: var(--c-ink-900) !important;
    word-break: break-word;
  }
  .tbl.cards td::before {
    content: attr(data-label);
    font-size: 10.5px !important;
    font-weight: 650 !important;
    letter-spacing: .3px;
    color: var(--c-ink-400) !important;
    margin: 0 !important;
  }
  /* 首列（就诊人/客户名，通常是链接）→ 占满整行当作卡片标题，不加格子底 */
  .tbl.cards td:first-child {
    grid-column: span 2;
    background: transparent !important;
    border: 0 !important;
    padding: 0 0 2px !important;
    font-size: var(--fs-lg) !important;
    font-weight: 700 !important;
  }
  .tbl.cards td:first-child::before { display: none !important; }
  /* 操作列 → 占满整行，与字段区用细线分隔 */
  .tbl.cards td.ops {
    grid-column: span 2;
    background: transparent !important;
    border: 0 !important;
    border-top: 1px solid var(--c-line-2) !important;
    border-radius: 0 !important;
    padding: 10px 0 0 !important;
    flex-direction: row !important;
    flex-wrap: wrap;
    gap: 8px;
  }
  .tbl.cards td.ops::before { display: none !important; }
  /* 值里的状态胶囊垂直居中 */
  .tbl.cards td .pill, .tbl.cards td .tag { align-self: flex-start; }
}

/* ═══════════════════════════════════════════════════════════
   用户反馈 v5：资源与合作（需求卡 / 转单卡）—— 字段改「信息卡网格」
   DOM 已由 ri-meta 改为 ri-fields > ri-f，这里定义视觉。
   ═══════════════════════════════════════════════════════════ */
.ri-fields {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px 10px;
  margin: 10px 0 8px;
}
.ri-f {
  display: flex; flex-direction: column; gap: 2px;
  min-width: 0;
  padding: 8px 10px;
  background: var(--c-surface-1);
  border: 1px solid var(--c-line-2);
  border-radius: var(--r-sm);
}
.ri-f > span {
  font-size: 10.5px;
  font-weight: 650;
  letter-spacing: .3px;
  color: var(--c-ink-400);
  line-height: 1.4;
}
.ri-f > b {
  font-size: var(--fs-sm);
  font-weight: 650;
  color: var(--c-ink-900);
  line-height: 1.5;
  word-break: break-word;
}
/* 「需求」这类长文本占满整行 */
.ri-f.wide, .ri-fields > .ri-f:nth-child(2):last-child { grid-column: span 2; }
/* 窄屏单列 */
@media (max-width: 359px) {
  .ri-fields { grid-template-columns: 1fr; }
}
/* 旧的 ri-meta / ri-budget 若仍有页面使用，保持原样不受影响 */

/* ① 操作区里的说明文字（.hint）占满整行，避免被挤在按钮右侧变成窄条
   （资源与合作「发布资源需求 / 发布转单」旁的服务费说明就是这种情况）。 */
.ops { row-gap: 8px; }
.ops > .hint {
  flex: 1 1 100%;
  order: 99;
  margin-top: 2px;
  line-height: 1.6;
}

/* ① 修正工单/客户信息卡：值左对齐（原 td 可能继承右对齐，导致值挤在格子右缘） */
@media (max-width: 900px) {
  .tbl.cards td {
    align-items: flex-start !important;
    text-align: left !important;
  }
  .tbl.cards td > * { text-align: left; }
  .tbl.cards td.num, .tbl.cards td.mono { text-align: left !important; }
  /* 「完成度」格里的进度条要撑满可用宽度 */
  .tbl.cards td .bar { width: 100% !important; }
  /* 首列（工单号）也显示标签，不再当标题 —— 技术编号做标题信息量低；
     保留略强的字重以示层级。 */
  .tbl.cards td:first-child {
    grid-column: span 2;
    background: var(--c-surface-1) !important;
    border: 1px solid var(--c-line-2) !important;
    border-radius: var(--r-sm) !important;
    padding: 8px 10px !important;
    font-size: var(--fs-md) !important;
    font-weight: 700 !important;
  }
  .tbl.cards td:first-child::before {
    display: block !important;
    content: attr(data-label);
    font-size: 10.5px !important;
    font-weight: 650 !important;
    color: var(--c-ink-400) !important;
    margin-bottom: 2px;
  }
}

/* ═══════════════════════════════════════════════════════════
   用户反馈 v6：聊天增强（撤回 / 引用 / 平台提醒）
   ═══════════════════════════════════════════════════════════ */

/* ① 撤回态：弱化斜体，不做成气泡高亮 */
.wx-bub.recalled {
  background: transparent !important;
  border: 1px dashed var(--c-line-1) !important;
  box-shadow: none !important;
}
.wx-recalled {
  font-style: normal;
  font-size: var(--fs-xs);
  color: var(--c-ink-400);
}

/* ② 引用块：贴在气泡上方，左侧竖线标识 */
.wx-quote {
  display: block;
  margin: 0 0 4px;
  padding: 5px 9px;
  border-left: 3px solid var(--c-brand-300);
  background: rgba(47, 107, 216, .06);
  border-radius: 4px 8px 8px 4px;
  font-size: var(--fs-xs);
  color: var(--c-ink-500);
  line-height: 1.5;
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
/* 自己的气泡里引用块用半透明白，保证可读 */
.wx-row.me .wx-quote {
  border-left-color: rgba(255,255,255,.55);
  background: rgba(255,255,255,.16);
  color: rgba(255,255,255,.9);
}

/* ③ 输入区上方的「引用中」提示条 */
.wx-quote-bar {
  flex: none;
  display: flex; align-items: center; gap: 8px;
  padding: 7px 12px;
  background: var(--c-brand-50, #EEF4FF);
  border-top: 1px solid var(--c-brand-100, #DCE7FD);
  font-size: var(--fs-xs);
  color: var(--c-brand-600, #1E52B8);
}
.wx-quote-bar > span {
  flex: 1; min-width: 0;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.wx-quote-bar > button {
  flex: 0 0 auto;
  width: 22px; height: 22px; border-radius: 50%;
  border: 0; background: rgba(30,82,184,.12); color: var(--c-brand-600);
  font-size: 15px; line-height: 1; cursor: pointer;
}

/* ④ 「平台提醒」标记 */
.wx-flag {
  font-style: normal;
  font-size: 10px;
  font-weight: 650;
  color: var(--c-warn, #C97A16);
  background: var(--c-warn-bg, #FFF6E6);
  border-radius: 999px;
  padding: 1px 6px;
  margin-left: 4px;
}

/* ⑤ 底部操作菜单动画 */
@keyframes fadeIn { from { opacity: 0 } to { opacity: 1 } }
@keyframes sheetUp { from { transform: translateY(100%) } to { transform: translateY(0) } }
/* 消息行可点击的暗示：轻微按压反馈 */
.wx-row { cursor: pointer; }
.wx-row:active .wx-bub { filter: brightness(.97); }

/* ═══════════════════════════════════════════════════════════
   用户反馈 v7（2026-10-17）：指定陪诊师选择区太小，看不清也不方便选
   —— 大幅加大列表可视高度、卡片更舒展（发布转单 / 发布资源需求共用）
   ═══════════════════════════════════════════════════════════ */
.cp-box {
  padding: 14px 16px !important;
  border-radius: var(--r-lg) !important;
  background: var(--c-surface-1) !important;
  border-color: var(--c-line-1) !important;
}
.cp-hd {
  font-size: var(--fs-sm) !important;
  font-weight: 700 !important;
  color: var(--c-ink-700) !important;
  margin-bottom: 10px !important;
}
/* 关键：列表从 220px 放大到 min(52vh, 440px)，一次能看到 4-6 位陪诊师 */
.cp-list {
  max-height: min(52vh, 440px) !important;
  overflow-y: auto !important;
  -webkit-overflow-scrolling: touch;
  gap: 8px !important;
  padding-right: 2px;
}
.cp-row {
  padding: 12px 14px !important;
  border-radius: var(--r-md) !important;
  border-color: var(--c-line-1) !important;
  box-shadow: var(--e-1);
  gap: 10px !important;
  transition: box-shadow var(--t-fast), border-color var(--t-fast);
}
.cp-row:hover { box-shadow: var(--e-2); border-color: #DCE6F5 !important; }
.cp-row .cp-name { font-size: var(--fs-lg) !important; font-weight: 700 !important; }
.cp-stats { gap: 10px !important; }
.cp-stat i { font-size: 10.5px !important; color: var(--c-ink-400) !important; }
.cp-stat b { font-size: var(--fs-xs) !important; color: var(--c-ink-700) !important; }
.cp-picked { padding: 10px 12px !important; border-radius: var(--r-md) !important; }

/* 宽版弹窗：桌面端更宽，移动端占满可用宽度 */
.modal.wide { max-width: min(760px, 94vw) !important; width: min(760px, 94vw) !important; }
@media (max-width: 640px) {
  .cp-list { max-height: 60vh !important; }
  .modal.wide { max-width: 96vw !important; width: 96vw !important; }
  .modal.wide .modal-bd { max-height: 74vh; overflow-y: auto; }
}

/* ═══════════════════════════════════════════════════════════
   问题 3 修复（2026-10-17）：引用块背景过浅、文字对比度不足
   原：#EEF4FF 底 + #5B6B82 字（对比度约 4.0:1，且被半透明进一步削弱）
   新：#DFE9FA 底 + #1E3A66 字（对比度约 8.2:1，远超 WCAG AA 4.5:1），左侧竖线加粗
   ═══════════════════════════════════════════════════════════ */
.wx-quote {
  background: #DFE9FA !important;
  border-left: 3px solid #2F6BD8 !important;
  color: #1E3A66 !important;
  font-size: var(--fs-xs) !important;
  font-weight: 500;
  padding: 6px 10px !important;
  line-height: 1.55 !important;
}
/* 自己的蓝色气泡里，引用块用「更深的白底 + 深字」保证反白可读 */
.wx-row.me .wx-quote {
  background: rgba(255, 255, 255, .92) !important;
  border-left-color: rgba(255, 255, 255, .95) !important;
  color: #16305A !important;
  font-weight: 550;
}
/* 引用块前加一个小引号标记，语义更清楚 */
.wx-quote::before {
  content: "❝ ";
  color: #2F6BD8;
  font-weight: 700;
}
.wx-row.me .wx-quote::before { color: #1E52B8; }

/* 提醒时间展示（问题 2）：时间行显示「★ 提醒 22:30」 */
.wx-flag { white-space: nowrap; }

/* ═══════════════════════════════════════════════════════════
   用户反馈 v8（2026-10-17）：聊天窗口改为微信式「双向布局」
   · 我发的：整体靠右，[气泡][头像]，气泡蓝底白字，时间右对齐
   · 对方的：整体靠左，[头像][气泡]，气泡白底深字，时间左对齐
   根因：.wx-msgs 是 flex column 但子项未撑满宽度（align-items 非 stretch），
        row-reverse 后内容仍贴左侧，看起来"两个人都靠左"。
   ═══════════════════════════════════════════════════════════ */
.wx-msgs {
  display: flex !important;
  flex-direction: column !important;
  align-items: stretch !important;   /* 关键：让每一行撑满，方向才生效 */
}
/* 每一行都是一整行，默认靠左（对方） */
.wx-row {
  width: 100% !important;
  justify-content: flex-start !important;
  align-items: flex-start !important;
}
/* 自己的消息：主轴反转 → 视觉为 [气泡][头像]，flex-start 在反向下即靠右 */
.wx-row.me {
  flex-direction: row-reverse !important;
  justify-content: flex-start !important;
}
/* 气泡列宽度上限，避免长消息顶满整行 */
.wx-row .wx-col { max-width: 74%; min-width: 0; }
.wx-row.me .wx-col { align-items: flex-end !important; text-align: right; }
.wx-row:not(.me) .wx-col { align-items: flex-start !important; text-align: left; }

/* 气泡本身的圆角方向：指向说话人一侧（微信观感） */
.wx-row:not(.me) .wx-bub {
  border-top-left-radius: 4px !important;
  border-top-right-radius: 14px !important;
  border-bottom-left-radius: 14px !important;
  border-bottom-right-radius: 14px !important;
}
.wx-row.me .wx-bub, .wx-bub.me, .wx-bub.self {
  border-top-right-radius: 4px !important;
  border-top-left-radius: 14px !important;
  border-bottom-left-radius: 14px !important;
  border-bottom-right-radius: 14px !important;
}
/* 时间行跟随气泡方向对齐 */
.wx-row.me .wx-t { text-align: right; align-self: flex-end; }
.wx-row:not(.me) .wx-t { text-align: left; align-self: flex-start; }
/* 引用块内部文字保持左对齐（即使在自己气泡里也便于阅读） */
.wx-row.me .wx-quote { text-align: left; }

/* ═══════════════════════════════════════════════════════════
   用户反馈：详情字段格「最后单个格子」对齐
   场景：就诊人卡片里「病情」单独占半行、右侧留空。
   解决：数量为奇数时让最后一格跨满两列（配合 JS 见 fixCardGridBalance）。
   ═══════════════════════════════════════════════════════════ */
.tbl.cards td.span2 { grid-column: span 2 !important; }
@media (max-width: 359px) {
  .tbl.cards td.span2 { grid-column: auto !important; }
}

/* ═══════════════════════════════════════════════════════════
   用户反馈（2026-10-18）：详情页信息卡网格「落单格」补齐
   场景：就诊人详情「病情」单独占半格、右半留空（奇数个字段）
   实现：fixCardGridBalance 检测 .kv-grid 子项数为奇数时给最后一格加 .span2
   ═══════════════════════════════════════════════════════════ */
.kv-grid > .kv.span2 {
  grid-column: span 2 !important;
}
@media (max-width: 359px) {
  .kv-grid > .kv.span2 { grid-column: auto !important; }
}

/* ═══════════════════════════════════════════════════════════
   用户反馈（2026-10-18）：资源与合作「发布资源需求 / 发布转单」旁的
   服务费说明被挤在按钮右侧成一条窄栏（切片 8 红圈处）。
   根因：.ops 没有 flex-wrap，.hint 的 flex:1 1 100% 不会换行。
   ═══════════════════════════════════════════════════════════ */
.ops { display: flex; flex-wrap: wrap !important; align-items: center; gap: 8px; }
.ops > .hint {
  flex: 1 1 100% !important;   /* 强制独占一行，排到按钮下方 */
  margin: 2px 0 0 !important;  /* 覆盖内联 margin-left */
  font-size: var(--fs-xs) !important;
  line-height: 1.65 !important;
  color: var(--c-ink-500) !important;
}

/* ═══════════════════════════════════════════════════════════
   用户反馈（2026-10-18）：首页「当前在线」前加在线天线标识
   ═══════════════════════════════════════════════════════════ */
.online-signal {
  display: inline-flex; align-items: center; justify-content: center;
  width: 18px; height: 18px; border-radius: 50%;
  background: rgba(14, 139, 87, .14);
  color: #0E8B57;
  margin-right: 5px;
  vertical-align: middle;
  animation: signalPulse 2.2s ease-in-out infinite;
}
@keyframes signalPulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(14,139,87,.34); }
  50%      { box-shadow: 0 0 0 5px rgba(14,139,87,0); }
}

/* 落单格跨满（2026-10-18 修正）：`span 2` 在部分浏览器 / 布局下不撑满，
   改用 `1 / -1`（从第一列到最后一条列线），语义更明确、兼容性更好。 */
.tbl.cards td.span2 { grid-column: 1 / -1 !important; }
.kv-grid > .kv.span2 { grid-column: 1 / -1 !important; }
@media (max-width: 359px) {
  .tbl.cards td.span2, .kv-grid > .kv.span2 { grid-column: auto !important; }
}

/* ═══════════════════════════════════════════════════════════
   落单字段跨满（2026-10-18 终极方案）
   现象：`.tbl.cards tr{display:grid}` + `td.span2{grid-column:1/-1}` 声明生效但宽度不变
        （该结构下 grid 跨列异常，多种写法均无效）。
   改为 flex-wrap 布局：td 用 flex-basis 50% 实现两列，落单格 flex-basis 100% 跨满，
   不依赖 grid 轨道计算，兼容性更稳。
   ═══════════════════════════════════════════════════════════ */
@media (max-width: 900px) {
  .tbl.cards tr {
    display: flex !important;
    flex-wrap: wrap !important;
    align-items: stretch !important;
    gap: 8px 10px !important;
  }
  /* 所有字段：默认占一半宽（减掉 gap 的一半） */
  .tbl.cards td {
    flex: 1 1 calc(50% - 5px) !important;
    min-width: 0;
    max-width: calc(50% - 5px);
  }
  /* 首列标题、落单格、操作列：占满整行 */
  .tbl.cards td:first-child,
  .tbl.cards td.span2,
  .tbl.cards td.ops {
    flex: 1 1 100% !important;
    max-width: 100% !important;
  }
}

/* ═══════════════════════════════════════════════════════════
   骨架屏（2026-10-18）：首屏加载时先给出结构近似灰块，配合微光扫过动画，
   体感上比纯文字「加载中…」快得多（真实数据到了再替换）。
   ═══════════════════════════════════════════════════════════ */
.sk-wrap { padding: 12px 2px 20px; }
.sk-hero {
  height: 168px; border-radius: 18px;
  background: var(--c-surface-2, #E9EFF8);
  margin-bottom: 16px;
}
.sk-title { padding: 4px 4px 10px; }
.sk-grid {
  display: grid; grid-template-columns: repeat(2, 1fr);
  gap: 10px; margin-bottom: 16px;
}
.sk-card {
  background: #fff; border: 1px solid var(--c-line-1, #E7EDF6);
  border-radius: 14px; padding: 14px;
}
.sk-row {
  background: #fff; border: 1px solid var(--c-line-1, #E7EDF6);
  border-radius: 12px; padding: 14px; margin-bottom: 10px;
}
.sk-line {
  border-radius: 6px;
  background: linear-gradient(90deg, #EDF2FA 25%, #F7FAFF 37%, #EDF2FA 63%);
  background-size: 400% 100%;
  animation: skShimmer 1.3s ease-in-out infinite;
}
.sk-hero {
  background: linear-gradient(90deg, #DCE7FA 25%, #EDF3FE 37%, #DCE7FA 63%);
  background-size: 400% 100%;
  animation: skShimmer 1.4s ease-in-out infinite;
}
@keyframes skShimmer {
  0%   { background-position: 100% 50%; }
  100% { background-position: 0 50%; }
}
@media (max-width: 359px) { .sk-grid { grid-template-columns: 1fr; } }

/* ═══════════════════════════════════════════════════════════
   登录页页签排版（2026-10-18）：「账号密码登录」在窄屏被挤成两行（"录"单独一行）。
   处理：文案已缩短为「密码登录」，再加 nowrap + 均分宽度 + 适当缩小字号。
   ═══════════════════════════════════════════════════════════ */
#auth-tabs {
  display: flex !important;
  gap: 6px !important;
}
#auth-tabs .tab {
  flex: 1 1 0 !important;
  min-width: 0;
  white-space: nowrap !important;   /* 关键：禁止折行 */
  overflow: hidden;
  text-overflow: ellipsis;
  font-size: 14px !important;
  padding: 9px 4px !important;
  line-height: 1.3 !important;
}
@media (max-width: 380px) {
  #auth-tabs .tab { font-size: 13px !important; padding: 8px 2px !important; }
}

/* ═══════════════════════════════════════════════════════════
   后台管理页签分组（2026-10-18 优化）：
   原来四组「成员与审批 / 权限 / 数据 / 系统维护」把管人、管单、管权混在一起，
   按钮又平铺成一行，窄屏横向滚动、找不到功能。这里改成轻量分组卡片 + 紧凑按钮。
   ═══════════════════════════════════════════════════════════ */
.admin-groups {
  display: flex !important;
  flex-direction: column;
  gap: 8px;
  margin-bottom: 14px;
}
.admin-group {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 12px;
  background: #F7FAFF;
  border: 1px solid #E7EEF9;
  border-radius: 12px;
}
.admin-group .ag-t {
  flex: none;
  min-width: 38px;
  font-size: 12px;
  font-weight: 700;
  color: #6B7C93;
  letter-spacing: .5px;
  padding: 0;
  background: none;
  border: none;
}
.admin-group .ag-t::before { display: none !important; }
.admin-group .ag-items {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  flex: 1;
  min-width: 0;
}
.admin-group .stab {
  padding: 6px 12px;
  font-size: 13px;
  border-radius: 9px;
  background: #fff;
  border: 1px solid #DFE8F5;
  color: #3C4859;
  white-space: nowrap;
}
.admin-group .stab:hover { border-color: var(--brand, #1a54b7); color: var(--brand, #1a54b7); }
.admin-group .stab.active {
  background: var(--brand, #1a54b7);
  border-color: var(--brand, #1a54b7);
  color: #fff;
  font-weight: 600;
}
.admin-group .stab.danger { color: #c0392b; border-color: #F3C9C4; }
.admin-group .stab.danger.active { background: #c0392b; border-color: #c0392b; color: #fff; }
@media (max-width: 420px) {
  .admin-group { flex-direction: column; align-items: flex-start; gap: 6px; }
  .admin-group .ag-t { min-width: 0; }
}

/* ═══════════════════════════════════════════════════════════
   表格横向溢出修复（2026-10-19，需求6）
   现象：用户管理 / 客户管理列数多，在中等宽度下表格被容器裁切，
        右侧「渠道码 / 登录邮箱 / 删除」等列看不到，也没有可滚动的提示。
   做法：① 表格给 min-width，列不再被压扁；② 容器明确可横向滚动 + 右侧渐隐提示；
        ③ 滚动条做细，避免占位突兀；④ <760px 时退化为卡片堆叠（.tbl.cards 原有能力）。
   ═══════════════════════════════════════════════════════════ */
.tbl-wrap {
  position: relative;
  overflow-x: auto;
  overflow-y: visible;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: thin;
}
.tbl-wrap::-webkit-scrollbar { height: 8px; }
.tbl-wrap::-webkit-scrollbar-track { background: #F1F4F9; border-radius: 4px; }
.tbl-wrap::-webkit-scrollbar-thumb { background: #C9D4E4; border-radius: 4px; }
.tbl-wrap::-webkit-scrollbar-thumb:hover { background: #A9B8CE; }

/* 列多时不压缩：给一个下限宽度，配合容器横向滚动 */
.tbl-wrap > .tbl { min-width: 680px; }
.tbl-wrap > .tbl th,
.tbl-wrap > .tbl td { white-space: nowrap; }
/* 明细/备注类列允许换行，避免被 nowrap 撑爆 */
.tbl-wrap > .tbl td.ellip,
.tbl-wrap > .tbl td[data-label="明细"],
.tbl-wrap > .tbl td[data-label="备注"],
.tbl-wrap > .tbl td[data-label="服务说明"] {
  white-space: normal;
  min-width: 140px;
  max-width: 320px;
}
/* 操作列固定右侧，滚动时仍可点到 */
.tbl-wrap > .tbl td.ops,
.tbl-wrap > .tbl th:last-child { position: sticky; right: 0; background: inherit; }

/* 窄屏（手机）：退化成卡片堆叠，不再横向滚动 */
@media (max-width: 760px) {
  .tbl-wrap > .tbl.cards { min-width: 0; }
  .tbl-wrap > .tbl.cards th,
  .tbl-wrap > .tbl.cards td { white-space: normal; }
  .tbl-wrap > .tbl.cards td.ops,
  .tbl-wrap > .tbl.cards th:last-child { position: static; }
}

/* ═══════════════════════════════════════════════════════════
   D1 批次 UI 优化（2026-10-19）
   ═══════════════════════════════════════════════════════════ */

/* ---------- 陪诊师库：规则区折叠 ---------- */
.rank-rules { padding: 0; overflow: hidden; }
.rank-rules > summary.rank-rules-sum {
  display: flex;
  align-items: center;
  justify-content: flex-start;
  gap: 10px;
  padding: 13px 16px;
  font-weight: 700;
  font-size: 14px;
  color: var(--tx, #1f2d3d);
  cursor: pointer;
  list-style: none;
  background: linear-gradient(180deg, #F8FBFF, #F2F7FE);
  border-bottom: 1px solid transparent;
}
.rank-rules[open] > summary.rank-rules-sum { border-bottom-color: var(--line, #E6ECF5); }
.rank-rules > summary.rank-rules-sum::-webkit-details-marker { display: none; }
.rank-rules > summary.rank-rules-sum::before {
  content: '▸';
  margin-right: 6px;
  color: var(--brand, #1a54b7);
  transition: transform .18s ease;
  display: inline-block;
}
.rank-rules[open] > summary.rank-rules-sum::before { transform: rotate(90deg); }
.rank-rules > summary.rank-rules-sum > span:first-child { flex: 1; display: flex; align-items: center; }
/* 规则明细：两列栅格（左标题 / 右说明），彻底消除原来窄屏下的竖排断裂 */
.rank-rules .dims {
  display: grid;
  grid-template-columns: minmax(96px, 132px) 1fr;
  gap: 7px 14px;
  align-items: start;
}
.rank-rules .dims .dim {
  display: contents;
}
.rank-rules .dims .dim-n {
  font-weight: 600;
  font-size: 13px;
  color: #33415C;
  background: #F5F8FE;
  border-radius: 6px;
  padding: 4px 8px;
  text-align: center;
  white-space: nowrap;
}
.rank-rules .dims .dim-v {
  font-size: 13px;
  line-height: 1.7;
  color: #5B6B82;
  padding: 4px 0;
}

/* ---------- 注册审批：KPI 卡压缩 ---------- */
/* 原来 4 张卡 2×2 排布、数字巨大，把待审批区推到折叠线以下 */
.kpis.compact-kpis {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 8px;
}
.kpis.compact-kpis .kpi {
  padding: 9px 10px;
  border-radius: 12px;
  min-width: 0;
}
.kpis.compact-kpis .kpi .kpi-t { font-size: 11.5px; margin-bottom: 2px; white-space: nowrap; }
.kpis.compact-kpis .kpi .kpi-v { font-size: 19px; line-height: 1.2; }
.kpis.compact-kpis .kpi .kpi-v small { font-size: 11px; margin-left: 2px; }
@media (max-width: 560px) {
  .kpis.compact-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* ---------- 注册审批：说明条瘦身 ---------- */
.approve-tip { padding: 9px 12px; border-radius: 12px; font-size: 12.5px; line-height: 1.6; }
.approve-tip b { color: var(--brand, #1a54b7); }
/* 空态高度收敛（原来空态占大半屏） */
.approve-empty { padding: 22px 16px !important; }
.approve-empty .empty-ico { font-size: 26px !important; opacity: .5; }

/* ---------- 陪诊师库：排序分段按钮不再竖排 ---------- */
/* .hub-seg 原本 flex-direction:column（配合 .hub-seg-row 两行布局）；
   但陪诊师库把 .seg 直接塞进 .hub-seg（无 row 包裹）→ 变成一列竖排，占掉半屏。
   这里改成 row + wrap：有 .hub-seg-row 的仍是两行（子行 flex-basis 100%），
   没有 row 包裹的直接横向换行排列。 */
.hub-seg { flex-direction: row; flex-wrap: wrap; }
.hub-seg > .hub-seg-row { flex: 1 1 100%; min-width: 0; }
.hub-seg > .seg { flex: 0 1 auto; min-width: 92px; padding: 9px 12px; }
@media (max-width: 430px) {
  .hub-seg > .seg { min-width: calc(33.33% - 6px); font-size: 12.5px; padding: 8px 6px; }
}

/* ═══════════════════════════════════════════════════════════
   D2 批次：数据型页面统一规格（2026-10-19）
   适用：收费结算 / 代缴垫付 / 数据统计 / 佣金提成（都用 .kpis > .kpi）
   不含首页数据盘（它用 .db-card，不受影响）
   问题：① KPI 卡 padding 大、数值 28px+，6 张卡挤成两行还掉一张；
        ② 卡片留白多，一屏看不完；
        ③ 筛选栏控件高度不齐（input / select / button 混排）。
   ═══════════════════════════════════════════════════════════ */

/* ① KPI 栅格：更小的最小宽度 → 430px 能排 3 列，6 张卡正好两行 */
#content .kpis {
  /* 110px：430px 宽屏扣掉容器内边距与 gap 后刚好能排 3 列（3×110+18≈348<390） */
  grid-template-columns: repeat(auto-fit, minmax(110px, 1fr)) !important;
  gap: 9px !important;
  margin-bottom: 13px !important;
}
#content .kpis .kpi {
  padding: 10px 12px !important;
  border-radius: 12px !important;
  min-width: 0;
}
#content .kpis .kpi .kpi-t,
#content .kpis .kpi .k-label {
  font-size: 11.5px !important;
  line-height: 1.3;
  margin-bottom: 3px !important;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
#content .kpis .kpi .kpi-v,
#content .kpis .kpi .k-num {
  /* 3 列窄卡里大数字（如 811.00 / ¥2.7 万）会换行 → 不换行 + 字号随宽度自适应 */
  font-size: clamp(15px, 4.4vw, 20px) !important;
  line-height: 1.2 !important;
  font-weight: 700;
  letter-spacing: -.2px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
#content .kpis .kpi .kpi-v small,
#content .kpis .kpi .k-num small { white-space: nowrap; font-size: 11px !important; }
#content .kpis .kpi .kpi-v small { font-size: 11px !important; margin-left: 3px; opacity: .75; }

/* ② 筛选栏：控件高度统一 + 不换行挤压 */
#content .filters {
  gap: 8px;
  align-items: center;
  flex-wrap: wrap;
}
#content .filters .inp,
#content .filters select,
#content .filters .btn {
  height: 36px;
  box-sizing: border-box;
  font-size: 13px;
}
#content .filters .inp { padding: 0 11px; }
#content .filters .btn { padding: 0 14px; display: inline-flex; align-items: center; justify-content: center; }

/* ③ 列表行高收敛（数据型页面行多，压缩后一屏能多看 2-3 行） */
#content .tbl td { padding: 9px 12px; }
#content .tbl th { padding: 9px 12px; }

@media (max-width: 380px) {
  #content .kpis { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
}

/* ═══════════════════════════════════════════════════════════
   首页数据盘：严格 2×2（2026-10-19 用户要求）
   历史遗留规则 `.db-mains > .db-card:nth-child(3) { grid-column: span 2 }`
   是「只有 3 个主卡时，第 3 张占整行填空」的补丁；后来主卡增加到 4 张
   （用户总数 / 本月金额 / 待办合计 / 即时消息），这条规则就把「待办合计」顶成整行、
   把「即时消息」挤成半行 + 右侧留白 —— 视觉很乱。
   这里统一覆盖为 2×2：第一排「用户总数 + 本月服务金额」，第二排「待办合计 + 即时消息」。
   ═══════════════════════════════════════════════════════════ */
.db-mains > .db-card:nth-child(3) {
  grid-column: auto !important;
  flex-direction: column !important;
  align-items: stretch !important;
  gap: 6px !important;
  min-height: 0 !important;
}
/* 四张主卡等宽等高：统一 padding 与内部节奏 */
.db-mains > .db-card {
  min-width: 0;
  display: flex;
  flex-direction: column;
  justify-content: center;
}
.db-mains > .db-card .db-v { font-size: 21px !important; letter-spacing: -.4px !important; }
.db-mains > .db-card .db-t { font-size: 12.5px !important; }

/* ═══════════════════════════════════════════════════════════
   D3 批次：健康商城 + 专属保险（2026-10-19）
   原状：整宽卡片、无图、文字+价格+整宽按钮，视觉平淡、留白多。
   改为「左图右文」：左侧 68×68 渐变图形块（按分类配图标），右侧标题/描述/价格行。
   ═══════════════════════════════════════════════════════════ */
.task-card.mall-card {
  display: flex !important;
  align-items: flex-start;
  gap: 12px;
  padding: 13px 14px !important;
  border-radius: 16px !important;
}
/* 图形块：渐变底 + 大图标，代替真实商品图（无图资源时的最佳降级） */
.mall-thumb {
  flex: none;
  width: 68px;
  height: 68px;
  border-radius: 14px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 30px;
  line-height: 1;
  background: linear-gradient(135deg, #EAF2FF 0%, #DCE9FF 100%);
  border: 1px solid #D6E4F8;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.8);
}
.mall-thumb.ins-thumb {
  background: linear-gradient(135deg, #E8F7F1 0%, #D5F0E4 100%);
  border-color: #CBE8DA;
}
.mall-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 5px; }
.mall-body .tc-top { display: flex; align-items: flex-start; gap: 8px; }
.mall-body .tc-top b { font-size: 14.5px; line-height: 1.35; flex: 1; min-width: 0; }
.mall-body .tc-top .pill { flex: none; font-size: 11px; padding: 2px 7px; border-radius: 6px; }
.mall-body .tc-mid {
  font-size: 12.5px;
  color: #6B7C93;
  line-height: 1.55;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.mall-buy-row {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-top: 3px;
  flex-wrap: wrap;
}
.mall-price {
  font-size: 17px;
  font-weight: 800;
  color: #D9480F;
  letter-spacing: -.3px;
  white-space: nowrap;
}
.mall-price small { font-size: 11px; font-weight: 600; opacity: .75; margin-left: 1px; }
.mall-sup { font-size: 11.5px; color: #93A1B5; flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mall-buy-row .btn { flex: none; margin-left: auto; }
/* 保险卡片：描述最多两行、价格绿色系 */
.mall-card .ins-thumb + .mall-body .mall-price { color: #0E8B57; }

@media (max-width: 360px) {
  .mall-thumb { width: 56px; height: 56px; font-size: 24px; border-radius: 12px; }
  .mall-price { font-size: 15.5px; }
}

/* ═══════════════════════════════════════════════════════════
   D3 批次：资源与合作卡片视觉（2026-10-19 / 需求 9）
   需求单本身没有图片字段（无上传图片），因此「图片位置与展示效果」改为：
   用**左侧类型色条 + 头部类型徽标**建立视觉锚点，让「资源协作 / 转单」一眼可分。
   ═══════════════════════════════════════════════════════════ */
/* 卡片左侧色条：资源协作=暖橙，转单=蓝（与 badge 配色一致） */
.card.trans-item {
  position: relative;
  overflow: hidden;
  border-radius: 16px !important;
  padding: 13px 14px 12px 17px !important;
}
.card.trans-item::before {
  content: '';
  position: absolute;
  left: 0; top: 0; bottom: 0;
  width: 4px;
  background: linear-gradient(180deg, #F5A623, #F7C46C);
  border-radius: 4px 0 0 4px;
}
.card.trans-item:has(.hub-type-badge.res)::before {
  background: linear-gradient(180deg, #2F6FE4, #6AA6F5);
}
.card.trans-item:has(.hub-type-badge.trans)::before {
  background: linear-gradient(180deg, #F5A623, #F7C46C);
}
/* 头部类型徽标：更醒目 */
.hub-type-badge {
  border-radius: 7px !important;
  font-size: 11.5px !important;
  font-weight: 700 !important;
  padding: 3px 9px !important;
  letter-spacing: .2px;
}
.hub-type-badge.res { background: #EAF2FF !important; color: #1A54B7 !important; border: 1px solid #CFE0FA !important; }
.hub-type-badge.trans { background: #FFF4E2 !important; color: #B26A00 !important; border: 1px solid #F7DFB4 !important; }
/* 服务工单（后台审核页用）：中性灰蓝，与蓝/橙形成第三档区分 */
.hub-type-badge.order { background: #EEF2F7 !important; color: #44546A !important; border: 1px solid #D8E0EB !important; }
/* 卡片标题：与徽标同排时用中等字重，避免和徽标抢视线 */
.card.trans-item .ri-hd b { font-size: 14.5px; line-height: 1.35; }
/* 字段区：两列更紧凑 */
.card.trans-item .ri-fields { gap: 6px 14px !important; margin-top: 8px !important; }
.card.trans-item .ri-f { font-size: 12.5px !important; }
.card.trans-item .ri-f b { font-weight: 600 !important; }
/* 底部发布人 + 操作 */
.card.trans-item .ri-foot { margin-top: 9px !important; padding-top: 8px !important; border-top: 1px solid #F0F4FA; }

/* ═══════════════════════════════════════════════════════════
   横向滚动条增强（2026-10-19 / 用户反馈「滑动条不明显，不知道能左右滑」）
   适用：报价表格、陪诊师库榜单等 .tbl-wrap 横向溢出场景。
   问题：8px 浅灰滚动条在手机上几乎看不见；iOS 又是 overlay 滚动条（滚动时才出现），
        用户完全不知道右侧还有内容。
   做法：
     ① 滚动条加粗到 10px、颜色加深到蓝灰、加白色描边（桌面/安卓可见）；
     ② 表格右侧加**渐隐遮罩**，暗示「右边还有」；
     ③ 表格下方追加一行「← 左右滑动查看更多 →」提示（由 JS 在可滚动时插入）。
   ═══════════════════════════════════════════════════════════ */
.tbl-wrap {
  scrollbar-width: auto;
  scrollbar-color: #9DB1CC #EEF3FA;
}
.tbl-wrap::-webkit-scrollbar {
  height: 10px !important;
  width: 10px !important;
}
.tbl-wrap::-webkit-scrollbar-track {
  background: #EEF3FA;
  border-radius: 5px;
}
.tbl-wrap::-webkit-scrollbar-thumb {
  background: #9DB1CC;
  border-radius: 5px;
  border: 2px solid #EAF1FA;
  background-clip: padding-box;
}
.tbl-wrap::-webkit-scrollbar-thumb:hover,
.tbl-wrap::-webkit-scrollbar-thumb:active {
  background: #6E88A9;
  background-clip: padding-box;
}
/* 右侧渐隐：可横向滚动时，右边缘出现淡出遮罩，暗示还有列 */
.tbl-wrap.is-hscroll {
  position: relative;
}
.tbl-wrap.is-hscroll::after {
  content: '';
  position: sticky;
  right: 0;
  top: 0;
  float: right;
  width: 28px;
  height: 100%;
  margin-left: -28px;
  pointer-events: none;
  background: linear-gradient(90deg, rgba(255,255,255,0), rgba(255,255,255,.92));
  z-index: 2;
}
/* 「左右滑动」提示条 */
.hscroll-tip {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  margin: 6px 0 2px;
  padding: 5px 10px;
  font-size: 11.5px;
  color: #6B7C93;
  background: #F4F8FE;
  border: 1px dashed #D5E2F3;
  border-radius: 9px;
  letter-spacing: .3px;
  animation: hscrollPulse 2.4s ease-in-out 3;
}
@keyframes hscrollPulse {
  0%, 100% { opacity: .75; }
  50% { opacity: 1; background: #EAF2FF; }
}
/* 规则区/榜单容器放宽，避免外层 padding 挤压表格可视宽度 */
.rank-rules + .card .tbl-wrap { margin-bottom: 4px; }

/* ═══════════════════════════════════════════════════════════
   2026-10-19 追加：提示条前置醒目化 + 弹窗 select 去灰色预览框
   ═══════════════════════════════════════════════════════════ */

/* ① 「左右滑动」提示条：从表格下方挪到上方，改成实底蓝条 + 双向箭头动效 */
.hscroll-tip {
  display: flex !important;
  align-items: center;
  justify-content: center;
  gap: 8px;
  margin: 0 0 8px !important;
  padding: 9px 12px !important;
  font-size: 12.5px !important;
  font-weight: 700;
  color: #1A54B7 !important;
  background: linear-gradient(90deg, #EAF2FF 0%, #DCE9FF 50%, #EAF2FF 100%) !important;
  border: 1px solid #C7DBF7 !important;
  border-radius: 11px !important;
  letter-spacing: .3px;
  box-shadow: 0 2px 8px rgba(26,84,183,.08);
  animation: none !important;
}
.hscroll-tip .hs-arrow {
  display: inline-block;
  font-size: 14px;
  line-height: 1;
  color: #2F6FE4;
}
.hscroll-tip .hs-arrow:first-child { animation: hsLeft 1.6s ease-in-out infinite; }
.hscroll-tip .hs-arrow:last-child  { animation: hsRight 1.6s ease-in-out infinite; }
@keyframes hsLeft  { 0%,100% { transform: translateX(0); opacity:.55 } 50% { transform: translateX(-4px); opacity:1 } }
@keyframes hsRight { 0%,100% { transform: translateX(0); opacity:.55 } 50% { transform: translateX(4px);  opacity:1 } }

/* ② 弹窗内 select：去掉系统外观（部分浏览器展开时会出现半透明灰色预览层） */
.modal select,
.modal-bd select {
  -webkit-appearance: none !important;
  -moz-appearance: none !important;
  appearance: none !important;
  background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%236B7C93' stroke-width='1.8' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") !important;
  background-repeat: no-repeat !important;
  background-position: right 13px center !important;
  background-color: #fff !important;
  padding-right: 34px !important;
  min-height: 42px;
  line-height: 1.4;
}
.modal select:focus,
.modal-bd select:focus {
  outline: none;
  border-color: #2F6FE4 !important;
  box-shadow: 0 0 0 3px rgba(47,111,228,.12);
}
/* 选项列表（支持的浏览器）：加内边距提升触控与可读性 */
.modal select option,
.modal-bd select option {
  padding: 10px 12px;
  font-size: 14px;
  line-height: 1.6;
}

/* ═══════════════════════════════════════════════════════════
   陪诊师库筛选区重设计（2026-10-19 / 用户反馈红框区域太乱）
   原状：3 个输入框各占一行、宽 160/200/220 三个不同宽度；排序按钮塞灰底块；计数挤角落。
   ═══════════════════════════════════════════════════════════ */
.rk-filter-card { padding: 0; overflow: hidden; }
.rk-filter-card .card-bd { padding: 12px 14px 14px !important; }

/* 输入行：等宽并排 */
.rk-f-row {
  display: flex;
  gap: 8px;
  margin-bottom: 8px;
}
.rk-sel {
  flex: 1 1 0;
  min-width: 0;
  height: 40px;
  font-size: 13.5px;
  border-radius: 11px !important;
}
/* select 统一外观（去掉系统灰色） */
select.rk-sel {
  -webkit-appearance: none;
  appearance: none;
  background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%236B7C93' stroke-width='1.8' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 12px center;
  padding-right: 32px;
}

/* 排序区标题行：左「排序方式」+ 右结果计数 */
.rk-sort-hd {
  display: flex;
  align-items: center;
  justify-content: flex-start;
  gap: 8px;
  margin: 12px 0 7px;
  padding-top: 11px;
  border-top: 1px dashed #E4EBF5;
}
.rk-sort-t { font-size: 12.5px; font-weight: 700; color: #3C4859; letter-spacing: .3px; }
.rk-count-badge {
  font-size: 11.5px;
  font-weight: 600;
  color: #1A54B7;
  background: #EAF2FF;
  border: 1px solid #D3E4FB;
  border-radius: 20px;
  padding: 3px 10px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 62%;
}

/* 排序按钮：2 行 3 列网格，白底描边，选中蓝底白字 */
.rk-sort-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 7px;
}
.rk-sort-btn {
  height: 38px;
  border-radius: 11px;
  border: 1px solid #DFE8F5;
  background: #fff;
  color: #4A5A70;
  font-size: 12.5px;
  font-weight: 600;
  font-family: inherit;
  cursor: pointer;
  padding: 0 4px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  transition: background .16s ease, color .16s ease, border-color .16s ease, box-shadow .16s ease;
}
.rk-sort-btn:hover { border-color: #B9D0F0; color: #1A54B7; }
.rk-sort-btn.on {
  background: var(--brand, #1a54b7);
  border-color: var(--brand, #1a54b7);
  color: #fff;
  box-shadow: 0 3px 10px rgba(26,84,183,.22);
}
@media (max-width: 360px) {
  .rk-sort-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .rk-sort-btn { font-size: 12px; }
}

/* ═══════════════════════════════════════════════════════════
   卡片头排版修复（2026-10-19 / 用户反馈「基本信息」被挤成两行）
   根因：.card-hd 是 display:flex + space-between，但 h3 没有 flex-shrink:0 / nowrap，
        当同一行放「标题 + 3 个按钮」时，浏览器把标题压到只能竖排断字（基/本/信/息）。
   修复：① 标题不允许被压缩、不允许断字；② 整行允许换行（按钮组自动掉到第二行）；
        ③ 按钮组整体靠右并允许自身换行。
   ═══════════════════════════════════════════════════════════ */
.card-hd {
  flex-wrap: wrap;
  row-gap: 8px;
}
.card-hd > h3 {
  flex: 0 0 auto;
  white-space: nowrap;
  min-width: 0;
  margin-right: auto;
}
/* 按钮组（连续多个按钮）整体不压缩，空间不足时整组换行 */
.card-hd > .btn,
.card-hd > button,
.card-hd > a.btn {
  flex: 0 0 auto;
}
/* 窄屏：按钮组独占一行、均匀分布，标题独占第一行 */
@media (max-width: 480px) {
  .card-hd { align-items: flex-start; }
  .card-hd > h3 { width: 100%; margin-right: 0; }
  .card-hd > .btn,
  .card-hd > button:not(.linkbtn) { font-size: 12.5px; padding: 7px 11px; }
}

/* ═══════════════════════════════════════════════════════════
   订单系统通知（资源与合作 · 需求1/4）2026-10-19
   聊天气泡里居中展示，可点击直接跳到订单详情
   ═══════════════════════════════════════════════════════════ */
.wx-sys-link {
  cursor: pointer;
  border: 1px solid #C7DBF7 !important;
  background: linear-gradient(90deg, #F2F8FF, #E8F1FF) !important;
  color: #1A54B7 !important;
  box-shadow: 0 1px 4px rgba(26,84,183,.10);
  transition: background .16s ease, box-shadow .16s ease, transform .16s ease;
}
.wx-sys-link:hover {
  background: linear-gradient(90deg, #E4EEFF, #D7E6FF) !important;
  box-shadow: 0 3px 10px rgba(26,84,183,.18);
  transform: translateY(-1px);
}
.wx-sys-go {
  display: inline-block;
  margin-left: 6px;
  padding: 1px 7px;
  font-size: 11px;
  font-weight: 700;
  color: #fff;
  background: #1A54B7;
  border-radius: 9px;
  vertical-align: middle;
}

/* 需求3（2026-10-20）：滑动引导强化 ——
   原提示容易被读成「滑动这条提示条」，改为指向下方表格 + 更强的视觉引导 */
.hscroll-tip {
  position: relative;
  font-size: 12.5px !important;
  padding: 10px 14px !important;
  background: linear-gradient(90deg, #E3EFFF 0%, #D3E5FF 50%, #E3EFFF 100%) !important;
  border: 1.5px solid #A9C8F2 !important;
  box-shadow: 0 3px 12px rgba(26,84,183,.14) !important;
}
.hscroll-tip b { color: #0F3F91; text-decoration: underline; text-underline-offset: 3px; }
/* 向下的引导箭头：明确「内容在下面」 */
.hscroll-tip::after {
  content: '▼';
  display: block;
  position: absolute;
  left: 50%;
  bottom: -13px;
  transform: translateX(-50%);
  font-size: 11px;
  color: #2F6FE4;
  opacity: .85;
  animation: hsDown 1.4s ease-in-out infinite;
}
@keyframes hsDown {
  0%, 100% { transform: translateX(-50%) translateY(0); opacity: .5; }
  50% { transform: translateX(-50%) translateY(3px); opacity: 1; }
}
/* 表格左右两侧各加一条「可滑动」纵向渐隐，强化内容区可拖动的感知 */
.tbl-wrap.is-hscroll { position: relative; }
.tbl-wrap.is-hscroll::before {
  content: '';
  position: sticky;
  left: 0;
  top: 0;
  float: left;
  width: 18px;
  height: 100%;
  margin-right: -18px;
  pointer-events: none;
  background: linear-gradient(270deg, rgba(255,255,255,0), rgba(255,255,255,.85));
  z-index: 2;
}

/* ═══════════════════════════════════════════════════════════
   需求10（2026-10-20）：工单 / 客户页筛选与搜索栏吸顶
   用户下拉浏览长列表时，筛选条件应始终可见，不用滚回顶部
   ═══════════════════════════════════════════════════════════ */
@media (max-width: 900px) {
  /* 页面内所有筛选条：滚动到顶部时吸附在顶栏下方 */
  .filters {
    position: sticky;
    top: 0;
    z-index: 30;
    background: #fff;
    padding: 8px 0;
    margin: 0 0 6px;
    box-shadow: 0 2px 8px rgba(20,40,80,.06);
    border-radius: 0 0 10px 10px;
  }
  /* 详情页/其它页面里的 filters 不吸顶（只列表页需要） */
  .card-hd .filters,
  .modal .filters { position: static; box-shadow: none; }
  /* 吸顶后下方内容的间距补偿 */
  .filters + .tbl-wrap,
  .filters + .card-list { margin-top: 8px; }
}

/* ═══════════════════════════════════════════════════════════
   需求5（2026-10-20）：首页主 CTA 拆成「今日工作」+「日程排班」
   设计要求：更好看、更高级 —— 双按钮并排，主次分明，图标 + 文案层次
   ═══════════════════════════════════════════════════════════ */
.fy-ctas2 {
  display: grid !important;
  grid-template-columns: 1.15fr 1fr;
  gap: 10px;
  width: 100%;
}
.fy-ctas2 .fy-cta-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 7px;
  height: 46px;
  border-radius: 13px;
  font-size: 14.5px;
  font-weight: 700;
  letter-spacing: .3px;
  text-decoration: none;
  transition: transform .16s ease, box-shadow .16s ease, background .16s ease;
}
/* 主按钮：实心渐变 + 柔光阴影 */
.fy-ctas2 .fy-cta-btn.primary {
  background: linear-gradient(135deg, #2F6FE4 0%, #1A54B7 100%);
  color: #fff;
  box-shadow: 0 6px 18px rgba(26,84,183,.32), inset 0 1px 0 rgba(255,255,255,.22);
}
.fy-ctas2 .fy-cta-btn.primary:hover {
  transform: translateY(-1.5px);
  box-shadow: 0 9px 24px rgba(26,84,183,.40), inset 0 1px 0 rgba(255,255,255,.28);
}
/* 次按钮：白底描边 + 品牌蓝字 */
.fy-ctas2 .fy-cta-btn.ghost {
  background: #fff;
  color: #1A54B7;
  border: 1.5px solid #C7DBF7;
  box-shadow: 0 3px 10px rgba(26,84,183,.10);
}
.fy-ctas2 .fy-cta-btn.ghost:hover {
  transform: translateY(-1.5px);
  border-color: #9EC1F0;
  box-shadow: 0 7px 18px rgba(26,84,183,.16);
}
.fy-cta-ico {
  font-size: 13px;
  line-height: 1;
  opacity: .92;
}
@media (max-width: 380px) {
  .fy-ctas2 { grid-template-columns: 1fr; }
  .fy-ctas2 .fy-cta-btn { height: 44px; }
}

/* ═══════════════════════════════════════════════════════════
   用户服务协议与平台规则页（2026-10-20 / 需求2）
   ═══════════════════════════════════════════════════════════ */
.terms-wrap { display: flex; flex-direction: column; gap: 9px; }
.terms-sec { padding: 0 !important; overflow: hidden; border-radius: 13px !important; }
.terms-sum {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 13px 15px;
  cursor: pointer;
  list-style: none;
  font-weight: 700;
  font-size: 13.5px;
  color: #2F4D7A;
  background: linear-gradient(180deg, #F8FBFF, #F2F7FE);
  transition: background .16s ease;
}
.terms-sum::-webkit-details-marker { display: none; }
.terms-sum:hover { background: #EDF4FE; }
.terms-sec[open] > .terms-sum { border-bottom: 1px solid #E4ECF7; }
.terms-sum.danger { color: #9A3412; background: linear-gradient(180deg, #FFF9F5, #FEF2E9); }
.terms-sum.danger:hover { background: #FDECE0; }
.terms-idx {
  flex: none;
  width: 22px; height: 22px; line-height: 22px;
  text-align: center;
  border-radius: 7px;
  background: #1A54B7; color: #fff;
  font-size: 11.5px; font-weight: 700;
}
.terms-sum.danger .terms-idx { background: #C2410C; }
.terms-title { flex: 1; min-width: 0; }
.terms-caret { flex: none; font-size: 12px; color: #93A1B5; transition: transform .18s ease; }
.terms-sec[open] > .terms-sum .terms-caret { transform: rotate(180deg); }
.terms-bd { padding: 12px 15px 14px !important; }
.terms-bd ol { margin: 0; padding-left: 20px; }
.terms-bd li {
  margin: 7px 0;
  font-size: 12.8px;
  line-height: 1.85;
  color: #3C4859;
}
.terms-bd li b { color: #1A54B7; }
.terms-sum.danger ~ .terms-bd li b { color: #C2410C; }

/* ═══════════════════════════════════════════════════════════
   客户需求填写页（免登录 / 2026-10-20 / 需求7）
   ═══════════════════════════════════════════════════════════ */
#content.creq-full { padding: 0 !important; max-width: 100% !important; }
.creq-page {
  min-height: 100vh;
  background: linear-gradient(180deg, #EEF5FF 0%, #F7FAFF 260px, #F7FAFF 100%);
  padding: 22px 16px 40px;
  font-family: "Microsoft YaHei", "PingFang SC", sans-serif;
}
.creq-hd {
  display: flex; align-items: center; gap: 12px;
  max-width: 480px; margin: 0 auto 14px;
}
.creq-logo {
  width: 44px; height: 44px; border-radius: 13px;
  background: linear-gradient(135deg, #2F6FE4, #1A54B7);
  color: #fff; font-size: 21px; font-weight: 800;
  display: flex; align-items: center; justify-content: center;
  box-shadow: 0 6px 18px rgba(26,84,183,.28);
}
.creq-title { font-size: 16.5px; font-weight: 800; color: #1F2D3D; letter-spacing: .5px; }
.creq-sub { font-size: 12px; color: #6B7C93; margin-top: 2px; }
.creq-owner {
  max-width: 480px; margin: 0 auto 12px;
  background: #EAF3FF; border: 1px solid #CFE0FA;
  border-radius: 11px; padding: 9px 13px;
  font-size: 13px; color: #1A54B7;
}
.creq-card {
  max-width: 480px; margin: 0 auto;
  background: #fff; border-radius: 18px;
  padding: 18px 16px;
  box-shadow: 0 8px 28px rgba(20,50,110,.08), 0 1px 0 rgba(255,255,255,.9) inset;
}
.creq-field { margin-bottom: 13px; }
.creq-field label {
  display: block; font-size: 12.5px; font-weight: 700;
  color: #3C4859; margin-bottom: 6px;
}
.creq-field label i { color: #E5484D; font-style: normal; }
.creq-field input,
.creq-field select,
.creq-field textarea {
  width: 100%; box-sizing: border-box;
  border: 1.5px solid #DFE8F5; border-radius: 11px;
  padding: 11px 13px; font-size: 14px; font-family: inherit;
  color: #1F2D3D; background: #FBFDFF;
  transition: border-color .16s ease, box-shadow .16s ease, background .16s ease;
}
.creq-field input:focus,
.creq-field select:focus,
.creq-field textarea:focus {
  outline: none; border-color: #2F6FE4; background: #fff;
  box-shadow: 0 0 0 3px rgba(47,111,228,.12);
}
.creq-field textarea { resize: vertical; line-height: 1.7; }
.creq-submit {
  width: 100%; height: 48px; margin-top: 6px;
  border: none; border-radius: 13px;
  background: linear-gradient(135deg, #2F6FE4, #1A54B7);
  color: #fff; font-size: 15.5px; font-weight: 800;
  letter-spacing: .5px; cursor: pointer;
  box-shadow: 0 7px 20px rgba(26,84,183,.30);
  transition: transform .16s ease, box-shadow .16s ease, opacity .16s ease;
}
.creq-submit:hover:not(:disabled) { transform: translateY(-1.5px); box-shadow: 0 10px 26px rgba(26,84,183,.38); }
.creq-submit:disabled { opacity: .65; cursor: default; box-shadow: none; }
.creq-tip {
  font-size: 12px; color: #93A1B5; text-align: center;
  margin-top: 10px; line-height: 1.8;
}
.creq-foot {
  max-width: 480px; margin: 20px auto 0;
  text-align: center; font-size: 11.5px; color: #A9B6C8;
}
@media (max-width: 400px) {
  .creq-page { padding: 16px 12px 32px; }
  .creq-card { padding: 15px 13px; border-radius: 15px; }
}

/* ═══════════════════════════════════════════════════════════
   员工操作记录重设计（2026-10-20 / 需求1）
   ═══════════════════════════════════════════════════════════ */
.ra-filter { padding: 0; }
.ra-filter .card-bd { padding: 12px 14px !important; }
.ra-views {
  display: inline-flex; gap: 4px; padding: 4px;
  background: #F1F5FB; border: 1px solid #E3EAF4; border-radius: 11px;
  margin-bottom: 10px;
}
.ra-view {
  border: 0; background: transparent; cursor: pointer;
  padding: 7px 14px; border-radius: 8px;
  font-size: 13px; font-weight: 700; color: #5C6B81;
  font-family: inherit; transition: background .16s ease, color .16s ease, box-shadow .16s ease;
}
.ra-view:hover { color: #1A54B7; }
.ra-view.on {
  background: #fff; color: #1A54B7;
  box-shadow: 0 2px 8px rgba(26,84,183,.14);
}
.ra-filters { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
.ra-filters .inp { flex: 1 1 150px; min-width: 0; height: 38px; font-size: 13px; }
.ra-filters select.inp { flex: 0 1 auto; min-width: 118px; }

/* 时间线 */
.ra-timeline { position: relative; padding-left: 20px; margin-top: 4px; }
.ra-timeline::before {
  content: ''; position: absolute; left: 6px; top: 8px; bottom: 8px;
  width: 2px; background: linear-gradient(180deg, #D8E6FA, #EDF3FC);
  border-radius: 2px;
}
.ra-item {
  position: relative; margin-bottom: 10px;
  background: #fff; border: 1px solid #E7EEF7; border-radius: 13px;
  padding: 11px 13px;
  box-shadow: 0 1px 3px rgba(20,40,80,.04);
  transition: box-shadow .16s ease, transform .16s ease;
}
.ra-item:hover { box-shadow: 0 4px 14px rgba(20,40,80,.09); transform: translateY(-1px); }
.ra-item.danger { border-color: #F6D9D4; background: #FFFCFB; }
.ra-item.ok { border-color: #D3EBE0; background: #FCFEFD; }
.ra-dot {
  position: absolute; left: -18px; top: 15px;
  width: 9px; height: 9px; border-radius: 50%;
  background: #2F6FE4; border: 2px solid #fff;
  box-shadow: 0 0 0 2px #D8E6FA;
}
.ra-item.danger .ra-dot { background: #E5484D; box-shadow: 0 0 0 2px #FBD9D7; }
.ra-item.ok .ra-dot { background: #0E8B57; box-shadow: 0 0 0 2px #D3EBE0; }
.ra-meta { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; font-size: 12px; color: #6B7C93; }
.ra-meta b { color: #2F4D7A; font-size: 13px; }
.ra-act-tag {
  font-size: 10.5px; font-weight: 700; padding: 1px 7px; border-radius: 6px;
  background: #EAF2FF; color: #1A54B7;
}
.ra-item.danger .ra-act-tag { background: #FDECEA; color: #C0392B; }
.ra-item.ok .ra-act-tag { background: #E8F7F1; color: #0E8B57; }
.ra-time { margin-left: auto; font-size: 11.5px; color: #A9B6C8; }
.ra-act { margin-top: 6px; font-size: 13.5px; color: #1F2D3D; }
.ra-target {
  display: inline-block; margin-left: 5px;
  font-size: 12px; color: #5C6B81;
  background: #F4F7FB; padding: 1px 7px; border-radius: 6px;
}
.ra-detail {
  margin-top: 5px; font-size: 12px; line-height: 1.7;
  color: #7A8A9E;
  background: #FAFCFF; border-left: 2px solid #E3EAF4;
  padding: 5px 9px; border-radius: 0 7px 7px 0;
}

/* 按员工汇总 */
.ra-staff-grid {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
  gap: 10px; margin-top: 4px;
}
.ra-staff-card {
  background: #fff; border: 1px solid #E7EEF7; border-radius: 14px;
  padding: 13px 13px 11px;
  box-shadow: 0 1px 3px rgba(20,40,80,.04);
  transition: box-shadow .16s ease, transform .16s ease;
}
.ra-staff-card:hover { box-shadow: 0 5px 16px rgba(20,40,80,.10); transform: translateY(-1.5px); }
.ra-staff-hd { display: flex; align-items: center; gap: 6px; justify-content: flex-start; }
.ra-staff-hd b { font-size: 13.5px; color: #2F4D7A; }
.ra-staff-num { font-size: 25px; font-weight: 800; color: #1A54B7; margin: 6px 0 2px; letter-spacing: -.5px; }
.ra-staff-num small { font-size: 11px; font-weight: 600; color: #93A1B5; margin-left: 3px; }
.ra-staff-chips { display: flex; flex-wrap: wrap; gap: 4px; margin: 5px 0 7px; }
.ra-chip {
  font-size: 10.5px; padding: 1px 7px; border-radius: 6px;
  background: #F1F5FB; color: #5C6B81;
}
.ra-staff-last { font-size: 11px; color: #A9B6C8; margin-bottom: 8px; }
@media (max-width: 480px) {
  .ra-staff-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .ra-timeline { padding-left: 16px; }
  .ra-dot { left: -14px; }
  .ra-filters .inp { flex: 1 1 100%; }
}

/* 数据盘底部「全部功能」入口（2026-10-20 / 替换原说明文字） */
.db-foot {
  display: flex;
  justify-content: flex-end;
  align-items: center;
  margin-top: 10px;
  padding-top: 9px;
  border-top: 1px dashed #E4ECF7;
}
.db-allfn {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 6px 14px;
  border-radius: 10px;
  font-size: 13px;
  font-weight: 700;
  color: #1A54B7;
  background: #EAF2FF;
  border: 1px solid #D3E4FB;
  text-decoration: none;
  transition: background .16s ease, box-shadow .16s ease, transform .16s ease;
}
.db-allfn:hover {
  background: #DCE9FF;
  box-shadow: 0 3px 10px rgba(26,84,183,.14);
  transform: translateY(-1px);
}
.db-allfn span { font-size: 14px; opacity: .7; }

/* ═══════════════════════════════════════════════════════════
   个人中心折叠卡片（2026-10-20 / 需求2）
   ═══════════════════════════════════════════════════════════ */
section.card.pf-fold { padding: 0; overflow: hidden; }
section.card.pf-fold > .card-hd {
  border-bottom: 1px solid transparent;
  transition: background .16s ease;
}
section.card.pf-fold > .card-hd:hover { background: #F8FBFF; }
section.card.pf-fold.pf-open > .card-hd { border-bottom-color: #E7EEF7; }
.pf-right {
  display: inline-flex; align-items: center; gap: 8px;
  margin-left: auto;
  flex: none;
}
.pf-sum {
  font-style: normal;
  font-size: 12px;
  font-weight: 600;
  color: #7A8A9E;
  max-width: 150px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.pf-caret {
  font-size: 12px;
  color: #93A1B5;
  transition: transform .18s ease;
  display: inline-block;
}
section.card.pf-fold.pf-open .pf-caret { transform: rotate(180deg); }
@media (max-width: 480px) {
  .pf-sum { max-width: 100px; font-size: 11.5px; }
}

/* ═══════════════════════════════════════════════════════════
   个人中心改版（2026-10-20）
   目标：折叠卡片不再「简陋」，视觉与首页卡片统一，提升高级感
   ═══════════════════════════════════════════════════════════ */

/* 折叠卡：去掉内边距、圆角加大、hover 微浮起 */
section.card.pf-fold {
  padding: 0 !important;
  overflow: hidden;
  border-radius: 16px !important;
  transition: box-shadow .18s ease, transform .18s ease;
}
section.card.pf-fold:hover {
  box-shadow: 0 6px 20px rgba(20, 45, 90, .09);
  transform: translateY(-1px);
}

/* 卡片头：统一渐变 + 高度 + 分隔线 */
section.card.pf-fold > .card-hd,
section.card.pf-fold.pf-open > .card-hd {
  padding: 14px 16px !important;
  background: linear-gradient(135deg, #FBFDFF 0%, #F4F9FF 100%);
  border-bottom: 1px solid transparent;
  transition: background .18s ease, border-color .18s ease;
  min-height: 52px;
  box-sizing: border-box;
}
section.card.pf-fold.pf-open > .card-hd {
  border-bottom-color: #E4ECF7;
  background: linear-gradient(135deg, #F5FAFF 0%, #EAF3FF 100%);
}
section.card.pf-fold > .card-hd:hover {
  background: linear-gradient(135deg, #F2F8FF 0%, #E8F2FF 100%);
}

/* 标题：加粗、字距微小收紧，与首页卡片一致 */
section.card.pf-fold > .card-hd h3 {
  font-size: 14.5px !important;
  font-weight: 700;
  color: #2F4D7A;
  letter-spacing: -.1px;
  margin: 0 !important;
}

/* 右侧摘要 + 箭头容器 */
.pf-right {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  margin-left: auto;
  flex: none;
  padding-left: 8px;
}
.pf-sum {
  font-style: normal;
  font-size: 12px;
  font-weight: 600;
  color: #8FA0B5;
  max-width: 148px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
/* 箭头：圆形淡底 + 旋转 */
.pf-caret {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background: #EAF2FF;
  color: #2F6FE4;
  font-size: 10px;
  line-height: 1;
  transition: transform .22s cubic-bezier(.4, 0, .2, 1), background .18s ease;
  flex: none;
}
section.card.pf-fold > .card-hd:hover .pf-caret { background: #DCE9FF; }
section.card.pf-fold.pf-open .pf-caret { transform: rotate(180deg); }

/* 展开后的内容区：淡入 + 稍大内边距 */
section.card.pf-fold > .card-bd {
  padding: 14px 16px !important;
  animation: pfFadeIn .18s ease;
}
@keyframes pfFadeIn {
  from { opacity: 0; transform: translateY(-4px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* 第一张卡（注册信息）：品牌色描边强调 */
section.card.pf-fold.pf-first,
section.card.pf-first {
  border: 1.5px solid #C7DBF7 !important;
  box-shadow: 0 4px 16px rgba(26, 84, 183, .07) !important;
}
section.card.pf-first > .card-hd {
  background: linear-gradient(135deg, #F2F8FF 0%, #E4EEFF 100%) !important;
}
section.card.pf-first > .card-hd h3 { color: #1A54B7 !important; }

/* 不折叠的卡（全部功能 / 管理后台）：保持简洁 */
section.card.pf-keep { padding: 0 !important; }
section.card.pf-keep > .card-hd {
  padding: 14px 16px !important;
  background: linear-gradient(135deg, #FBFDFF 0%, #F4F9FF 100%);
}

@media (max-width: 480px) {
  .pf-sum { max-width: 96px; font-size: 11.5px; }
  section.card.pf-fold > .card-hd h3 { font-size: 14px !important; }
}

/* 数据盘底部「全部功能」入口（2026-10-20） */
.db-foot {
  display: flex; justify-content: flex-end; align-items: center;
  margin-top: 10px; padding-top: 9px;
  border-top: 1px dashed #E4ECF7;
}
.db-allfn {
  display: inline-flex; align-items: center; gap: 5px;
  padding: 6px 14px; border-radius: 10px;
  font-size: 13px; font-weight: 700;
  color: #1A54B7; background: #EAF2FF;
  border: 1px solid #D3E4FB;
  text-decoration: none;
  transition: background .16s ease, box-shadow .16s ease, transform .16s ease;
}
.db-allfn:hover { background: #DCE9FF; box-shadow: 0 3px 10px rgba(26,84,183,.14); transform: translateY(-1px); }
.db-allfn span { font-size: 14px; opacity: .7; }

/* 首页双 CTA（今日工作 + 日程排班）2026-10-20 */
.fy-ctas2 {
  display: grid !important;
  grid-template-columns: 1.15fr 1fr;
  gap: 10px; width: 100%;
}
.fy-ctas2 .fy-cta-btn {
  display: flex; align-items: center; justify-content: center; gap: 7px;
  height: 46px; border-radius: 13px;
  font-size: 14.5px; font-weight: 700; letter-spacing: .3px;
  text-decoration: none;
  transition: transform .16s ease, box-shadow .16s ease, background .16s ease;
}
.fy-ctas2 .fy-cta-btn.primary {
  background: linear-gradient(135deg, #2F6FE4 0%, #1A54B7 100%);
  color: #fff;
  box-shadow: 0 6px 18px rgba(26,84,183,.32), inset 0 1px 0 rgba(255,255,255,.22);
}
.fy-ctas2 .fy-cta-btn.primary:hover {
  transform: translateY(-1.5px);
  box-shadow: 0 9px 24px rgba(26,84,183,.40), inset 0 1px 0 rgba(255,255,255,.28);
}
.fy-ctas2 .fy-cta-btn.ghost {
  background: #fff; color: #1A54B7;
  border: 1.5px solid #C7DBF7;
  box-shadow: 0 3px 10px rgba(26,84,183,.10);
}
.fy-ctas2 .fy-cta-btn.ghost:hover {
  transform: translateY(-1.5px);
  border-color: #9EC1F0;
  box-shadow: 0 7px 18px rgba(26,84,183,.16);
}
.fy-cta-ico { font-size: 13px; line-height: 1; opacity: .92; }
@media (max-width: 380px) {
  .fy-ctas2 { grid-template-columns: 1fr; }
  .fy-ctas2 .fy-cta-btn { height: 44px; }
}

/* 客户需求填写页（免登录）2026-10-20 */
#content.creq-full { padding: 0 !important; max-width: 100% !important; }
.creq-page {
  min-height: 100vh;
  background: linear-gradient(180deg, #EEF5FF 0%, #F7FAFF 260px, #F7FAFF 100%);
  padding: 22px 16px 40px;
  font-family: "Microsoft YaHei", "PingFang SC", sans-serif;
}
.creq-hd { display: flex; align-items: center; gap: 12px; max-width: 480px; margin: 0 auto 14px; }
.creq-logo {
  width: 44px; height: 44px; border-radius: 13px;
  background: linear-gradient(135deg, #2F6FE4, #1A54B7);
  color: #fff; font-size: 21px; font-weight: 800;
  display: flex; align-items: center; justify-content: center;
  box-shadow: 0 6px 18px rgba(26,84,183,.28);
}
.creq-title { font-size: 16.5px; font-weight: 800; color: #1F2D3D; letter-spacing: .5px; }
.creq-sub { font-size: 12px; color: #6B7C93; margin-top: 2px; }
.creq-owner {
  max-width: 480px; margin: 0 auto 12px;
  background: #EAF3FF; border: 1px solid #CFE0FA;
  border-radius: 11px; padding: 9px 13px;
  font-size: 13px; color: #1A54B7;
}
.creq-card {
  max-width: 480px; margin: 0 auto;
  background: #fff; border-radius: 18px; padding: 18px 16px;
  box-shadow: 0 8px 28px rgba(20,50,110,.08);
}
.creq-field { margin-bottom: 13px; }
.creq-field label { display: block; font-size: 12.5px; font-weight: 700; color: #3C4859; margin-bottom: 6px; }
.creq-field label i { color: #E5484D; font-style: normal; }
.creq-field input, .creq-field select, .creq-field textarea {
  width: 100%; box-sizing: border-box;
  border: 1.5px solid #DFE8F5; border-radius: 11px;
  padding: 11px 13px; font-size: 14px; font-family: inherit;
  color: #1F2D3D; background: #FBFDFF;
  transition: border-color .16s ease, box-shadow .16s ease, background .16s ease;
}
.creq-field input:focus, .creq-field select:focus, .creq-field textarea:focus {
  outline: none; border-color: #2F6FE4; background: #fff;
  box-shadow: 0 0 0 3px rgba(47,111,228,.12);
}
.creq-field textarea { resize: vertical; line-height: 1.7; }
.creq-submit {
  width: 100%; height: 48px; margin-top: 6px;
  border: none; border-radius: 13px;
  background: linear-gradient(135deg, #2F6FE4, #1A54B7);
  color: #fff; font-size: 15.5px; font-weight: 800;
  letter-spacing: .5px; cursor: pointer;
  box-shadow: 0 7px 20px rgba(26,84,183,.30);
  transition: transform .16s ease, box-shadow .16s ease, opacity .16s ease;
}
.creq-submit:hover:not(:disabled) { transform: translateY(-1.5px); box-shadow: 0 10px 26px rgba(26,84,183,.38); }
.creq-submit:disabled { opacity: .65; cursor: default; box-shadow: none; }
.creq-tip { font-size: 12px; color: #93A1B5; text-align: center; margin-top: 10px; line-height: 1.8; }
.creq-foot { max-width: 480px; margin: 20px auto 0; text-align: center; font-size: 11.5px; color: #A9B6C8; }
@media (max-width: 400px) {
  .creq-page { padding: 16px 12px 32px; }
  .creq-card { padding: 15px 13px; border-radius: 15px; }
}

/* ═══════════════════════════════════════════════════════════
   需求7（2026-10-20）：资源与合作卡片顶部「类型 + 需求 + 状态」醒目标记区
   截图反馈：三个信息分散在卡片顶部，颜色浅、不聚焦
   方案：包进一个浅底圆角「信息条」，类型徽标实色、需求标题加粗、状态右对齐
   ═══════════════════════════════════════════════════════════ */
.card.res-item .ri-hd,
.card.trans-item .ri-hd {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 8px 10px !important;
  margin: -2px -2px 8px;
  background: linear-gradient(135deg, #F7FAFF 0%, #EEF4FD 100%);
  border: 1px solid #DFE9F8;
  border-radius: 11px;
  flex-wrap: wrap;
}
/* 类型徽标：实色填充，提升辨识度 */
.hub-type-badge {
  flex: none;
  font-size: 11px !important;
  font-weight: 800 !important;
  padding: 3px 9px !important;
  border-radius: 7px !important;
  letter-spacing: .3px;
}
.hub-type-badge.res {
  background: #F5A623 !important;
  color: #fff !important;
  border: 0 !important;
  box-shadow: 0 2px 6px rgba(245,166,35,.28);
}
.hub-type-badge.trans {
  background: #2F6FE4 !important;
  color: #fff !important;
  border: 0 !important;
  box-shadow: 0 2px 6px rgba(47,111,228,.28);
}
/* 需求标题：加粗、深色 */
.card.res-item .ri-hd b,
.card.trans-item .ri-hd b {
  font-size: 14.5px !important;
  font-weight: 800 !important;
  color: #1F2D3D !important;
  line-height: 1.35;
  flex: 1 1 auto;
  min-width: 0;
}
/* 状态标签：右对齐、描边强化 */
.card.res-item .ri-hd .tag,
.card.trans-item .ri-hd .tag {
  flex: none;
  margin-left: auto;
  font-size: 11.5px !important;
  font-weight: 800 !important;
  padding: 3px 10px !important;
  border-radius: 7px !important;
  background: #fff !important;
  border: 1.5px solid #E3B341 !important;
  color: #8A5A00 !important;
  box-shadow: 0 1px 4px rgba(0,0,0,.05);
}
/* 加急标签不抢状态位 */
.card.trans-item .ri-hd .tag.warn {
  margin-left: 0;
  border-color: #F0B7B0 !important;
  color: #B3261E !important;
}

/* 需求10/11（2026-10-20）：曝光排行榜取消末列固定，让「被浏览」跟随表格横向滑动 */
.tbl-wrap > .tbl.tbl-nosticky th:last-child,
.tbl-wrap > .tbl.tbl-nosticky td:last-child {
  position: static !important;
  box-shadow: none !important;
}
/* 同时确保横向滚动容器能完整滚动（避免 sticky 造成的宽度截断） */
.tbl-wrap:has(> .tbl.tbl-nosticky) {
  overflow-x: auto !important;
  -webkit-overflow-scrolling: touch;
  scroll-behavior: auto;
}

/* 用户服务协议与平台规则页（2026-10-20 / 第3批） */
.terms-wrap { display: flex; flex-direction: column; gap: 9px; }
.terms-sec { padding: 0 !important; overflow: hidden; border-radius: 13px !important; }
.terms-sum {
  display: flex; align-items: center; gap: 10px;
  padding: 13px 15px; cursor: pointer; list-style: none;
  font-weight: 700; font-size: 13.5px; color: #2F4D7A;
  background: linear-gradient(180deg, #F8FBFF, #F2F7FE);
  transition: background .16s ease;
}
.terms-sum::-webkit-details-marker { display: none; }
.terms-sum:hover { background: #EDF4FE; }
.terms-sec[open] > .terms-sum { border-bottom: 1px solid #E4ECF7; }
.terms-sum.danger { color: #9A3412; background: linear-gradient(180deg, #FFF9F5, #FEF2E9); }
.terms-sum.danger:hover { background: #FDECE0; }
.terms-idx {
  flex: none; width: 22px; height: 22px; line-height: 22px; text-align: center;
  border-radius: 7px; background: #1A54B7; color: #fff;
  font-size: 11.5px; font-weight: 700;
}
.terms-sum.danger .terms-idx { background: #C2410C; }
.terms-title { flex: 1; min-width: 0; }
.terms-caret { flex: none; font-size: 12px; color: #93A1B5; transition: transform .18s ease; }
.terms-sec[open] > .terms-sum .terms-caret { transform: rotate(180deg); }
.terms-bd { padding: 12px 15px 14px !important; }
.terms-bd ol { margin: 0; padding-left: 20px; }
.terms-bd li { margin: 7px 0; font-size: 12.8px; line-height: 1.85; color: #3C4859; }
.terms-bd li b { color: #1A54B7; }
.terms-sum.danger ~ .terms-bd li b { color: #C2410C; }

/* 员工操作记录重设计（2026-10-20 / 第3批） */
.ra-filter { padding: 0; }
.ra-filter .card-bd { padding: 12px 14px !important; }
.ra-views {
  display: inline-flex; gap: 4px; padding: 4px;
  background: #F1F5FB; border: 1px solid #E3EAF4; border-radius: 11px;
  margin-bottom: 10px;
}
.ra-view {
  border: 0; background: transparent; cursor: pointer;
  padding: 7px 14px; border-radius: 8px;
  font-size: 13px; font-weight: 700; color: #5C6B81;
  font-family: inherit; transition: background .16s ease, color .16s ease, box-shadow .16s ease;
}
.ra-view:hover { color: #1A54B7; }
.ra-view.on { background: #fff; color: #1A54B7; box-shadow: 0 2px 8px rgba(26,84,183,.14); }
.ra-filters { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
.ra-filters .inp { flex: 1 1 150px; min-width: 0; height: 38px; font-size: 13px; }
.ra-filters select.inp { flex: 0 1 auto; min-width: 118px; }

.ra-timeline { position: relative; padding-left: 20px; margin-top: 4px; }
.ra-timeline::before {
  content: ''; position: absolute; left: 6px; top: 8px; bottom: 8px;
  width: 2px; background: linear-gradient(180deg, #D8E6FA, #EDF3FC); border-radius: 2px;
}
.ra-item {
  position: relative; margin-bottom: 10px;
  background: #fff; border: 1px solid #E7EEF7; border-radius: 13px;
  padding: 11px 13px; box-shadow: 0 1px 3px rgba(20,40,80,.04);
  transition: box-shadow .16s ease, transform .16s ease;
}
.ra-item:hover { box-shadow: 0 4px 14px rgba(20,40,80,.09); transform: translateY(-1px); }
.ra-item.danger { border-color: #F6D9D4; background: #FFFCFB; }
.ra-item.ok { border-color: #D3EBE0; background: #FCFEFD; }
.ra-dot {
  position: absolute; left: -18px; top: 15px;
  width: 9px; height: 9px; border-radius: 50%;
  background: #2F6FE4; border: 2px solid #fff; box-shadow: 0 0 0 2px #D8E6FA;
}
.ra-item.danger .ra-dot { background: #E5484D; box-shadow: 0 0 0 2px #FBD9D7; }
.ra-item.ok .ra-dot { background: #0E8B57; box-shadow: 0 0 0 2px #D3EBE0; }
.ra-meta { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; font-size: 12px; color: #6B7C93; }
.ra-meta b { color: #2F4D7A; font-size: 13px; }
.ra-act-tag { font-size: 10.5px; font-weight: 700; padding: 1px 7px; border-radius: 6px; background: #EAF2FF; color: #1A54B7; }
.ra-item.danger .ra-act-tag { background: #FDECEA; color: #C0392B; }
.ra-item.ok .ra-act-tag { background: #E8F7F1; color: #0E8B57; }
.ra-time { margin-left: auto; font-size: 11.5px; color: #A9B6C8; }
.ra-act { margin-top: 6px; font-size: 13.5px; color: #1F2D3D; }
.ra-target { display: inline-block; margin-left: 5px; font-size: 12px; color: #5C6B81; background: #F4F7FB; padding: 1px 7px; border-radius: 6px; }
.ra-detail { margin-top: 5px; font-size: 12px; line-height: 1.7; color: #7A8A9E; background: #FAFCFF; border-left: 2px solid #E3EAF4; padding: 5px 9px; border-radius: 0 7px 7px 0; }

.ra-staff-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 10px; margin-top: 4px; }
.ra-staff-card {
  background: #fff; border: 1px solid #E7EEF7; border-radius: 14px;
  padding: 13px 13px 11px; box-shadow: 0 1px 3px rgba(20,40,80,.04);
  transition: box-shadow .16s ease, transform .16s ease;
}
.ra-staff-card:hover { box-shadow: 0 5px 16px rgba(20,40,80,.10); transform: translateY(-1.5px); }
.ra-staff-hd { display: flex; align-items: center; gap: 6px; justify-content: flex-start; }
.ra-staff-hd b { font-size: 13.5px; color: #2F4D7A; }
.ra-staff-num { font-size: 25px; font-weight: 800; color: #1A54B7; margin: 6px 0 2px; letter-spacing: -.5px; }
.ra-staff-num small { font-size: 11px; font-weight: 600; color: #93A1B5; margin-left: 3px; }
.ra-staff-chips { display: flex; flex-wrap: wrap; gap: 4px; margin: 5px 0 7px; }
.ra-chip { font-size: 10.5px; padding: 1px 7px; border-radius: 6px; background: #F1F5FB; color: #5C6B81; }
.ra-staff-last { font-size: 11px; color: #A9B6C8; margin-bottom: 8px; }
@media (max-width: 480px) {
  .ra-staff-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .ra-timeline { padding-left: 16px; }
  .ra-dot { left: -14px; }
  .ra-filters .inp { flex: 1 1 100%; }
}

/* ═══════════════════════════════════════════════════════════
   第4批（2026-10-20）：数据型页面 KPI 统一紧凑规格
   适用：收费结算 / 代缴垫付 / 数据统计 / 佣金提成（都用 .kpis > .kpi）
   问题：KPI 卡 padding 大、数值 24px+，一屏看不完；6-7 张卡排两行还掉一张
   ═══════════════════════════════════════════════════════════ */
#content .kpis {
  grid-template-columns: repeat(auto-fit, minmax(110px, 1fr)) !important;
  gap: 9px !important;
  margin-bottom: 13px !important;
}
#content .kpis .kpi {
  padding: 10px 12px !important;
  border-radius: 12px !important;
  min-width: 0;
}
#content .kpis .kpi .k-label {
  font-size: 11.5px !important;
  line-height: 1.3;
  margin-bottom: 3px !important;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
#content .kpis .kpi .k-num {
  font-size: clamp(15px, 4.4vw, 20px) !important;
  line-height: 1.2 !important;
  font-weight: 700;
  letter-spacing: -.2px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
#content .kpis .kpi .k-num small { font-size: 11px !important; margin-left: 3px; opacity: .75; }

/* 筛选栏控件高度统一 */
#content .filters { gap: 8px; align-items: center; flex-wrap: wrap; }
#content .filters .inp,
#content .filters select,
#content .filters .btn {
  height: 36px;
  box-sizing: border-box;
  font-size: 13px;
}
#content .filters .inp { padding: 0 11px; }
#content .filters .btn { padding: 0 14px; display: inline-flex; align-items: center; justify-content: center; }

/* 列表行高收敛 */
#content .tbl td { padding: 9px 12px; }
#content .tbl th { padding: 9px 12px; }

@media (max-width: 380px) {
  #content .kpis { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
}

/* 第4项：可点击的提示弹窗（有 X 关闭，点主体进消息页） */
.modal.ivp-clickable { cursor: pointer; }
.modal.ivp-clickable .modal-bd { transition: background .16s ease; }
.modal.ivp-clickable .modal-bd:hover { background: #F8FBFF; }
.modal.ivp-clickable .x,
.modal.ivp-clickable .modal-ft { cursor: default; }

/* ==================== 游客模式（2026-10-20 / 第5项）====================
   入口 #/guest：免注册免登录，只读浏览平台介绍 + 陪诊师库公开预览。
   强制浅色，沿用 design-v3 变量；不写任何业务数据。 */
.guest-root {
  position: fixed;
  inset: 0;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  background: linear-gradient(180deg, #EEF4FF 0%, #F7F9FD 260px, #F7F9FD 100%);
  z-index: 50;
}
.guest-root.hidden { display: none !important; }

.guest-page {
  max-width: 480px;
  margin: 0 auto;
  padding: 22px 16px calc(28px + env(safe-area-inset-bottom, 0px));
  box-sizing: border-box;
  font-family: inherit;
  color: var(--c-ink-900);
}

/* 顶部品牌 */
.guest-hd { display: flex; align-items: center; gap: 12px; margin-bottom: 16px; }
.guest-logo {
  width: 46px; height: 46px; flex: none; border-radius: 14px;
  background: linear-gradient(145deg, #2F6BD8 0%, #163E92 100%);
  color: #fff; font-size: 22px; font-weight: 800;
  display: flex; align-items: center; justify-content: center;
  box-shadow: 0 6px 16px rgba(22, 62, 146, .28);
}
.guest-title { font-size: 17px; font-weight: 800; letter-spacing: .3px; line-height: 1.25; }
.guest-sub { font-size: 12px; color: var(--c-ink-500); margin-top: 3px; letter-spacing: .2px; }

/* 游客提示条 */
.guest-banner {
  display: flex; align-items: center; justify-content: flex-start; gap: 10px;
  padding: 10px 12px; border-radius: 12px;
  background: #FFF8E8; border: 1px solid #F3E2BC;
  font-size: 12px; color: #8A6216; line-height: 1.5;
}
.guest-banner b { color: #6E4B08; }
.guest-reg {
  flex: none; padding: 6px 12px; border-radius: 999px;
  background: #163E92; color: #fff !important;
  font-size: 12px; font-weight: 700; text-decoration: none;
  white-space: nowrap;
}
.guest-reg:active { opacity: .82; }

/* 分节标题 */
.guest-sec-t {
  margin: 22px 0 10px;
  font-size: 13px; font-weight: 800; color: var(--c-ink-700);
  letter-spacing: .3px;
  display: flex; align-items: center; gap: 7px;
}
.guest-sec-t::before {
  content: ''; width: 3px; height: 13px; border-radius: 2px;
  background: linear-gradient(180deg, #2F6BD8, #163E92);
  display: block;
}

/* 平台能力 2×3 卡片 */
.guest-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.guest-card {
  background: #fff; border: 1px solid var(--c-line-1);
  border-radius: 14px; padding: 13px 12px;
  box-shadow: 0 2px 8px rgba(22, 62, 146, .045);
}
.guest-ico { font-size: 20px; line-height: 1; margin-bottom: 7px; }
.guest-ct { font-size: 13.5px; font-weight: 800; color: var(--c-ink-900); }
.guest-cd { font-size: 11.5px; color: var(--c-ink-500); line-height: 1.55; margin-top: 4px; }

/* 陪诊师库预览 */
.guest-rank {
  background: #fff; border: 1px solid var(--c-line-1);
  border-radius: 14px; overflow: hidden;
  box-shadow: 0 2px 8px rgba(22, 62, 146, .045);
}
.guest-rank-row {
  display: flex; align-items: center; gap: 9px;
  padding: 11px 13px;
  border-bottom: 1px solid var(--c-line-2);
}
.guest-rank-row:last-child { border-bottom: 0; }
.guest-rank-no {
  flex: none; width: 20px; height: 20px; border-radius: 6px;
  background: var(--c-surface-2); color: var(--c-ink-500);
  font-size: 11px; font-weight: 800;
  display: flex; align-items: center; justify-content: center;
}
.guest-rank-no.top { background: #FFF1D6; color: #B27B12; }
.guest-rank-nm { flex: 1; min-width: 0; font-size: 13.5px; font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.guest-rank-city { flex: none; font-size: 11.5px; color: var(--c-ink-500); }
.guest-rank-w { flex: none; font-size: 11px; color: var(--c-ink-400); }

/* 底部引导 */
.guest-cta {
  margin-top: 22px; padding: 18px 16px;
  border-radius: 16px;
  background: linear-gradient(150deg, #1E52B8 0%, #163E92 55%, #0B2455 100%);
  box-shadow: 0 10px 26px rgba(22, 62, 146, .26);
  text-align: center;
}
.guest-cta-t { color: #fff; font-size: 15px; font-weight: 800; letter-spacing: .3px; }
.guest-cta-d { color: rgba(255, 255, 255, .82); font-size: 12px; line-height: 1.6; margin-top: 6px; }
.guest-btn {
  display: inline-flex; align-items: center; justify-content: center;
  padding: 10px 20px; border-radius: 999px;
  font-size: 13px; font-weight: 700; text-decoration: none;
  background: rgba(255, 255, 255, .16); color: #fff !important;
  border: 1px solid rgba(255, 255, 255, .34);
  min-width: 118px;
}
.guest-btn.primary { background: #fff; color: #163E92 !important; border-color: #fff; }
.guest-btn:active { opacity: .84; }

.guest-foot {
  margin-top: 18px; text-align: center;
  font-size: 11px; color: var(--c-ink-400); line-height: 1.6;
}

/* 登录卡底部「先看看平台能做什么」入口 */
.auth-guest-line {
  margin-top: 14px; padding-top: 13px;
  border-top: 1px dashed var(--c-line-1);
  text-align: center; font-size: 12.5px; color: var(--c-ink-500);
}
.auth-guest-line a {
  color: #1E52B8; font-weight: 700; text-decoration: none; margin-left: 4px;
}
.auth-guest-line a:active { opacity: .7; }

/* ═══════════════════════════════════════════════════════════
   聊天页沉浸模式（2026-10-20 五修）
   鸿蒙华为 / 三星 Fold8 真机反馈「输入条遮挡最后一条消息」的结构性修复：
     ① 底部 Tab 是 position:fixed，聊天页必须隐藏它，否则永远压住输入条；
     ② .wx-wrap 由 JS 改写成贴合 visualViewport 的固定面板（top/height 内联写入），
        面板底边 == 可视区底边，输入条与最后一条消息不可能越界。
   ═══════════════════════════════════════════════════════════ */
body.chat-mode .tabbar { display: none !important; }
/* 聊天页已有自己的返回箭头，全局返回浮钮会压住消息气泡 → 一并隐藏 */
body.chat-mode #global-back { display: none !important; }
body.chat-mode { overflow: hidden !important; }
body.chat-mode #content { padding-bottom: 0 !important; overflow: hidden !important; }
@media (max-width: 900px) {
  body.chat-mode .wx-wrap {
    height: auto;          /* 由 JS 写入精确 px */
    max-height: none;
    border-radius: 0;
    background: var(--c-surface-1, #F7F9FD);
  }
  body.chat-mode .wx-msgs { flex: 1 1 auto; min-height: 0; overscroll-behavior: contain; }
  body.chat-mode .wx-bar { flex: 0 0 auto; position: relative; }
}

/* 协议页 · 下载正式版 PDF 区块（2026-10-20） */
.terms-dl {
  margin: 16px 0 4px; padding: 16px 14px;
  text-align: center;
  background: linear-gradient(180deg, #F7FAFF, #F1F6FE);
  border: 1px solid #DCE7FD; border-radius: 14px;
}
.terms-dl .btn { min-width: 240px; }

/* ═══════════════════════════════════════════════════════════
   聊天页布局 v6（2026-10-20 六修）—— 不量高度，纯弹性链
   真机（鸿蒙华为 / 三星 Fold8）截图显示：
     · 底部 Tab 仍在 ⇒ 旧版把「隐藏 Tab」写在 JS 里，那一段没跑到；
     · 面板被压成一小条 ⇒ JS 量出来的高度比真实可见区小一大截。
   因此这里全部用 CSS 兜底，不依赖任何 JS 类名：
     ① :has(.wx-wrap) 直接按「页面里有聊天面板」隐藏 Tab / 返回浮钮；
     ② 把 #content 变成 flex 列、.wx-wrap 变成 flex:1，
        键盘弹出时布局视口收缩，整条链一起收缩。
   注意：body.chat-mode 与 :has() 分成两条独立规则，
   老浏览器不支持 :has() 时只会丢弃自己的那条，不会连累前者。
   ═══════════════════════════════════════════════════════════ */

/* ① JS 加的类（保险绳一） */
body.chat-mode { overflow: hidden !important; }
body.chat-mode .tabbar { display: none !important; }
body.chat-mode #global-back { display: none !important; }

/* ② 纯 CSS 兜底（保险绳二）：只要页面上有聊天面板，就进入沉浸布局 */
body:has(.wx-wrap) { overflow: hidden !important; }
body:has(.wx-wrap) .tabbar { display: none !important; }
body:has(.wx-wrap) #global-back { display: none !important; }

@media (max-width: 900px) {
  body.chat-mode #content {
    display: flex !important;
    flex-direction: column !important;
    min-height: 0 !important;
    padding: 0 !important;
    overflow: hidden !important;
  }
  body.chat-mode .wx-wrap {
    flex: 1 1 auto !important;
    min-height: 0 !important;
    height: auto !important;
    max-height: none !important;
    position: static !important;
    display: flex !important;
    flex-direction: column !important;
    border-radius: 0 !important;
  }
  body.chat-mode .wx-msgs {
    flex: 1 1 auto !important;
    min-height: 0 !important;
    overflow-y: auto !important;
    overscroll-behavior: contain;
  }
  body.chat-mode .wx-bar { flex: 0 0 auto !important; }

  body:has(.wx-wrap) #content {
    display: flex !important;
    flex-direction: column !important;
    min-height: 0 !important;
    padding: 0 !important;
    overflow: hidden !important;
  }
  body:has(.wx-wrap) .wx-wrap {
    flex: 1 1 auto !important;
    min-height: 0 !important;
    height: auto !important;
    max-height: none !important;
    position: static !important;
    display: flex !important;
    flex-direction: column !important;
    border-radius: 0 !important;
  }
  body:has(.wx-wrap) .wx-msgs {
    flex: 1 1 auto !important;
    min-height: 0 !important;
    overflow-y: auto !important;
    overscroll-behavior: contain;
  }
  body:has(.wx-wrap) .wx-bar { flex: 0 0 auto !important; }
}

/* ③ 布局视口兜底：个别浏览器不认 interactive-widget=resizes-content，
      键盘弹出时布局视口不缩 → 由 app.js 把可视高写进 --app-h，整壳跟着缩。
      （用 @supports 包一层：不认 dvh 的老浏览器保持 app.css 里的 100vh 方案） */
@supports (height: 100dvh) {
  .app-shell { height: var(--app-h, 100dvh); }
}

/* ═══════════════════════════════════════════════════════════
   即时消息角标 & 新消息浮层（2026-10-20 第2项）
   角标要求：更简洁、长度更短、与 Tab 图标视觉协调
     · 只显示 1~9 或「9+」，最长 2 字符
     · 16px 圆角小胶囊 / 单数字时正圆，贴图标右上角，白色描边保证在深色图标上也清晰
   ═══════════════════════════════════════════════════════════ */
.nav-item .badge.badge-msg {
  top: 4px;
  right: 50%;
  margin-right: -20px;
  min-width: 16px;
  height: 16px;
  padding: 0 4px;
  border-radius: 8px;
  font-size: 10px;
  font-weight: 700;
  line-height: 16px;
  letter-spacing: 0;
  background: #FA5151;
  color: #fff;
  box-shadow: 0 0 0 2px #fff;
}
.tabbar .nav-item .badge.badge-msg { margin-right: -18px; }
/* 单字符时收成正圆，避免 16×18 的扁胶囊 */
.nav-item .badge.badge-msg:not(:empty) { min-width: 16px; }

/* 浮层：右上角关闭叉
   ⚠️ 这里原来还有一条 `position: relative`，把 app.css 的 `position: fixed` 覆盖掉了 ——
   结果「新消息提示框」变成文档流里的普通块、掉到页面底部而不是浮在顶部。
   已删除：fixed 元素本身就是绝对定位子元素的包含块，不需要 relative。 */
.newmsg-toast { padding-right: 30px; }
.newmsg-toast .nt-x {
  position: absolute; top: 2px; right: 2px;
  width: 26px; height: 26px; border: 0; padding: 0;
  background: transparent; color: inherit; opacity: .55;
  font-size: 18px; line-height: 26px; text-align: center;
  cursor: pointer; border-radius: 50%;
}
.newmsg-toast .nt-x:active { opacity: .9; background: rgba(0,0,0,.06); }
.newmsg-toast .nt-main b { font-weight: 800; }

/* 乐观渲染的「发送中…」小标（第4项） */
.wx-row .wx-sending { font-style: normal; color: #93A1B5; font-size: 11px; margin-left: 4px; }

/* ═══════════════════════════════════════════════════════════
   资源与合作 · 页面精简（2026-10-20 第3项）
   动作行置顶（发布 + 筛选 + 我的订单），页签与筛选收进可折叠面板
   ═══════════════════════════════════════════════════════════ */
.hub-ops {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  margin: 0 0 10px;
}
.hub-ops .btn { white-space: nowrap; }
.hub-entry {
  background: #fff;
  border: 1px solid var(--c-line-1, #E7EDF6);
  color: var(--c-ink-700, #33445C);
  font-weight: 650;
}
.hub-entry.on {
  background: #EEF4FF;
  border-color: var(--c-brand-600, #1E52B8);
  color: var(--c-brand-700, #163E92);
}
@media (max-width: 430px) {
  .hub-ops { gap: 6px; }
  .hub-ops .btn { flex: 1 1 calc(50% - 6px); min-width: 0; }
}
@media (min-width: 431px) {
  .hub-ops .btn { flex: 0 0 auto; }
}

/* 折叠面板：默认收起，点「筛选」展开 */
.hub-panel { margin: 0 0 10px; }

/* 底部信息说明（原来挤在发布按钮旁） */
.hub-note {
  margin: 14px 0 4px;
  font-size: 12px;
  line-height: 1.75;
  color: #93A1B5;
}

/* ═══════════════════════════════════════════════════════════
   资源与合作 · 2026-10-22 改版（需求2/3）
   ① 顶部四键一行等宽；② 筛选改为弹窗；③ 订单中心三 Tab
   ═══════════════════════════════════════════════════════════ */
.hub-ops { display: flex; flex-wrap: nowrap; align-items: stretch; gap: 6px; margin: 0 0 10px; }
.hub-ops .btn {
  flex: 1 1 0; min-width: 0; padding: 8px 4px;
  font-size: 12.5px; font-weight: 650; text-align: center;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  border-radius: 10px;
}
.hub-ops .btn.primary, .hub-ops .btn.trans { flex: 1 1 0; }
@media (max-width: 360px) {
  .hub-ops .btn { font-size: 11.5px; padding: 7px 2px; }
}

/* 搜索筛选弹窗 */
.hub-filter-dlg { position: fixed; inset: 0; z-index: 9400; }
.hub-filter-dlg .hfd-mask {
  position: absolute; inset: 0; background: rgba(14,27,46,.38);
  animation: fadeIn .15s ease;
}
.hub-filter-dlg .hfd-card {
  position: absolute; left: 0; right: 0; bottom: 0;
  max-height: 82vh; overflow-y: auto;
  background: #fff; border-radius: 18px 18px 0 0;
  padding: 4px 14px calc(16px + env(safe-area-inset-bottom));
  box-shadow: 0 -10px 34px rgba(14,27,46,.22);
  animation: sheetUp .2s cubic-bezier(.4,0,.2,1);
}
.hfd-hd {
  display: flex; align-items: center; justify-content: flex-start;
  padding: 12px 2px 8px; position: sticky; top: 0; background: #fff; z-index: 1;
}
.hfd-hd b { font-size: 15px; color: var(--c-ink-900, #0E1B2E); }
.hfd-x {
  width: 30px; height: 30px; border: 0; border-radius: 50%;
  background: #F1F5FB; color: #5B6B82; font-size: 18px; line-height: 30px;
  cursor: pointer; padding: 0;
}
.hfd-bd .hub-filter { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.hfd-bd .hub-filter .inp { width: 100%; }
.hfd-bd .hub-filter > .inp:first-child { grid-column: 1 / -1; }
.hfd-bd .hub-filter > #hf-date-custom { grid-column: 1 / -1; }
.hfd-bd .hub-filter > .btn { grid-column: 1 / -1; }

/* 订单中心 */
.hub-oc-hd {
  display: flex; align-items: center; justify-content: flex-start;
  margin: 0 0 10px;
}
.hub-oc-hd b { font-size: 16px; color: var(--c-ink-900, #0E1B2E); }
.hub-oc-tabs {
  display: flex; gap: 6px; margin: 0 0 12px;
  background: #F1F5FB; padding: 4px; border-radius: 12px;
}
.hub-oc-tab {
  flex: 1 1 0; min-width: 0; padding: 9px 4px; border: 0; border-radius: 9px;
  background: transparent; color: #5B6B82; font-size: 13px; font-weight: 650;
  cursor: pointer; white-space: nowrap;
}
.hub-oc-tab.on { background: #fff; color: #163E92; box-shadow: 0 1px 3px rgba(14,27,46,.10); }

/* ═══════════════════════════════════════════════════════════
   2026-10-22 小改：顶部栏紧凑 / 搜索框圆角统一 / 聊天输入区加大
   ═══════════════════════════════════════════════════════════ */
/* 需求7：顶部栏紧凑（取消 logo 占位，标题单行） */
.topbar .tb-left { gap: 0; }
.topbar .tb-title { font-size: 15px; font-weight: 750; letter-spacing: .2px; white-space: nowrap; }
.topbar .tb-title em { display: none; }
.topbar .tb-search input { height: 32px; border-radius: 16px; }

/* 需求14：工单 / 客户页搜索筛选控件圆角统一（原来上下直角、下方圆角） */
.filters .inp, .filters input[type="search"], .filters input[type="text"], .filters select {
  border-radius: 10px !important;
}

/* 需求9：聊天输入区域加大，提升可点面积与观感 */
.wx-bar { padding: 9px 10px calc(9px + env(safe-area-inset-bottom)); }
.wx-inp { height: 40px; border-radius: 20px; font-size: 14.5px; padding: 0 14px; }
.wx-send { height: 40px; padding: 0 16px; border-radius: 20px; font-size: 14px; }
.wx-act { width: 40px; height: 40px; border-radius: 20px; }

/* 顶部栏：搜索框自适应，不被挤出屏幕 */
.topbar .tb-search { flex: 1 1 auto; min-width: 0; }
.topbar .tb-search input { width: 100%; min-width: 0; box-sizing: border-box; }
.topbar .tb-right { flex: none; }
.topbar .tb-left { flex: none; min-width: 0; overflow: hidden; }
@media (max-width: 430px) {
  .topbar .tb-title { font-size: 13.5px; }
  .topbar { padding-left: 10px; padding-right: 10px; gap: 6px; }
}

/* ═══════════════════════════════════════════════════════════
   2026-10-22 修正（用户反馈）
   ① 顶部栏回到「一行」紧凑布局（标题 + 搜索 + 角色 + 退出）
   ② 聊天页隐藏工作台顶部栏，真正沉浸
   ③ 服务工单 / 客户页筛选条四角统一圆角（原来上直下圆）
   ═══════════════════════════════════════════════════════════ */
@media (max-width: 640px) {
  .topbar {
    height: auto;
    min-height: calc(54px + env(safe-area-inset-top));
    flex-wrap: nowrap !important;
    row-gap: 0 !important;
    gap: 8px;
    padding: 0 10px;
    padding-top: env(safe-area-inset-top);
    padding-bottom: 0;
    align-items: center;
  }
  .tb-search {
    flex: 1 1 auto !important;
    order: 0 !important;
    min-width: 0 !important;
    max-width: none !important;
    margin: 0;
  }
  .tb-search input { height: 32px; font-size: 13px; }
  .tb-left { flex: 0 1 auto; min-width: 0; max-width: 46%; }
  .tb-title {
    font-size: 13.5px !important;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  }
  .tb-right { flex: none; gap: 6px; }
  .tb-right .who { display: none; }
  .tb-right .btn.sm { padding: 4px 9px; font-size: 12px; }
}
@media (max-width: 380px) {
  .tb-left { max-width: 40%; }
  .tb-title { font-size: 12.5px !important; }
}

/* ② 聊天页：连工作台顶部栏一起隐藏，整屏沉浸 */
body.chat-mode .topbar,
body:has(.wx-wrap) .topbar { display: none !important; }
body.chat-mode .body,
body:has(.wx-wrap) .body { padding-top: 0 !important; }

/* ③ 筛选条：四角同圆角 + 卡片化，不再出现「上直角、下圆角」 */
@media (max-width: 900px) {
  .filters {
    padding: 10px 12px !important;
    border-radius: 14px !important;
    border: 1px solid var(--c-line-1, #E7EDF6);
    margin: 0 0 10px !important;
  }
}
.filters .inp,
.filters input,
.filters select,
.filters .btn {
  border-radius: 10px !important;
  box-sizing: border-box;
}

/* ═══════════════════════════════════════════════════════════
   2026-10-22：宽屏（≥901px）聊天页铺满内容区，输入条贴底
   原来 .wx-wrap 固定 calc(100vh - 220px)，宽屏下底部空出一大截
   ═══════════════════════════════════════════════════════════ */
@media (min-width: 901px) {
  body.chat-mode #content,
  body:has(.wx-wrap) #content {
    display: flex !important;
    flex-direction: column !important;
    padding: 10px 16px 6px !important;
    overflow: hidden !important;
    min-height: 0 !important;
  }
  body.chat-mode .wx-wrap,
  body:has(.wx-wrap) .wx-wrap {
    flex: 1 1 auto !important;
    height: auto !important;
    max-height: none !important;
    min-height: 0 !important;
    display: flex !important;
    flex-direction: column !important;
  }
  body.chat-mode .wx-msgs,
  body:has(.wx-wrap) .wx-msgs {
    flex: 1 1 auto !important;
    min-height: 0 !important;
    overflow-y: auto !important;
  }
  body.chat-mode .wx-bar,
  body:has(.wx-wrap) .wx-bar { flex: 0 0 auto !important; }
}

/* ═══════════════════════════════════════════════════════════
   需求4（2026-10-22）：定向指派 —— 可搜索的用户选择器
   原下拉因选项字段名不匹配（{value,label} vs {v,t}）整片空白
   ═══════════════════════════════════════════════════════════ */
.asg-mask {
  position: fixed; inset: 0; z-index: 9500;
  background: rgba(14,27,46,.42);
  display: flex; align-items: center; justify-content: center;
  padding: 16px; animation: fadeIn .15s ease;
}
.asg-card {
  width: 100%; max-width: 520px; max-height: 86vh;
  background: #fff; border-radius: 16px;
  display: flex; flex-direction: column; overflow: hidden;
  box-shadow: 0 18px 48px rgba(14,27,46,.28);
}
.asg-hd {
  display: flex; align-items: center; justify-content: flex-start;
  padding: 14px 16px; border-bottom: 1px solid var(--c-line-1, #E7EDF6);
}
.asg-hd b { font-size: 15px; color: var(--c-ink-900, #0E1B2E); }
.asg-x {
  width: 30px; height: 30px; border: 0; border-radius: 50%;
  background: #F1F5FB; color: #5B6B82; font-size: 18px; line-height: 30px; cursor: pointer; padding: 0;
}
.asg-bd { padding: 12px 16px; overflow-y: auto; }
.asg-kw { width: 100%; height: 40px; border-radius: 10px; margin-bottom: 10px; }
.asg-list { max-height: 46vh; overflow-y: auto; margin-bottom: 10px; }
.asg-item {
  display: flex; align-items: center; gap: 10px; width: 100%;
  padding: 10px 10px; border: 1px solid transparent; border-radius: 12px;
  background: #fff; text-align: left; cursor: pointer;
}
.asg-item + .asg-item { margin-top: 4px; }
.asg-item:hover { background: #F7FAFF; }
.asg-item.on { background: #EEF4FF; border-color: #BCD0FA; }
.asg-av {
  width: 34px; height: 34px; flex: none; border-radius: 10px;
  background: linear-gradient(135deg, #5A8BEA, #2F6BD8);
  color: #fff; font-size: 14px; font-weight: 700;
  display: flex; align-items: center; justify-content: center;
}
.asg-main { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.asg-main b { font-size: 14px; color: var(--c-ink-900, #0E1B2E); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.asg-main small { font-size: 12px; color: #8493A8; margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.asg-tick { color: #1E52B8; font-weight: 800; flex: none; }
.asg-empty { padding: 24px 8px; text-align: center; color: #93A1B5; font-size: 13px; }
.asg-note { width: 100%; border-radius: 10px; padding: 10px 12px; resize: vertical; }
.asg-ft {
  display: flex; gap: 10px; padding: 12px 16px calc(12px + env(safe-area-inset-bottom));
  border-top: 1px solid var(--c-line-1, #E7EDF6);
}
.asg-ft .btn { flex: 1; height: 40px; border-radius: 10px; }

/* ═══════════════════════════════════════════════════════════
   需求5（2026-10-22）：站内推送弹窗 + 推送设置页
   ═══════════════════════════════════════════════════════════ */
/* 独立配色：琥珀金，与聊天的蓝白气泡明显区分 */
.push-toast {
  position: fixed; left: 50%; transform: translateX(-50%);
  top: calc(14px + env(safe-area-inset-top));
  z-index: 9800; width: min(92vw, 460px);
  display: flex; align-items: flex-start; gap: 10px;
  padding: 12px 14px; border-radius: 14px;
  background: linear-gradient(135deg, #FFF8E8, #FFF1D6);
  border: 1px solid #F0D9A8;
  box-shadow: 0 12px 30px rgba(120, 84, 10, .22);
  animation: pushIn .22s cubic-bezier(.2,.9,.3,1.2);
  cursor: pointer;
}
@keyframes pushIn {
  from { opacity: 0; transform: translate(-50%, -12px) scale(.96); }
  to   { opacity: 1; transform: translate(-50%, 0) scale(1); }
}
.push-toast .pt-ico { font-size: 18px; line-height: 22px; flex: none; }
.push-toast .pt-main { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.push-toast .pt-main b { font-size: 13.5px; color: #7A5410; line-height: 1.45; }
.push-toast .pt-main small { font-size: 12px; color: #A07C34; margin-top: 3px; line-height: 1.5; }
.push-toast .pt-x {
  flex: none; width: 22px; height: 22px; border: 0; padding: 0;
  background: transparent; color: #A07C34; opacity: .65;
  font-size: 17px; line-height: 22px; cursor: pointer; border-radius: 50%;
}
.push-toast .pt-x:active { opacity: 1; background: rgba(160,124,52,.12); }

/* 推送设置：开关行 */
.ps-row {
  display: flex; align-items: center; justify-content: flex-start; gap: 14px;
  padding: 12px 0; border-bottom: 1px solid var(--c-line-2, #EFF3F9);
}
.ps-row:last-child { border-bottom: 0; }
.ps-t { min-width: 0; display: flex; flex-direction: column; }
.ps-t b { font-size: 14px; color: var(--c-ink-900, #0E1B2E); }
.ps-t small { font-size: 12px; color: #8493A8; margin-top: 3px; line-height: 1.5; }
.ps-sw { flex: none; position: relative; width: 46px; height: 26px; cursor: pointer; }
.ps-sw input { position: absolute; opacity: 0; width: 0; height: 0; }
.ps-sw i {
  position: absolute; inset: 0; border-radius: 999px; background: #DCE3ED;
  transition: background .18s ease;
}
.ps-sw i::after {
  content: ''; position: absolute; top: 3px; left: 3px;
  width: 20px; height: 20px; border-radius: 50%; background: #fff;
  box-shadow: 0 1px 3px rgba(14,27,46,.22); transition: transform .18s ease;
}
.ps-sw input:checked + i { background: #1E52B8; }
.ps-sw input:checked + i::after { transform: translateX(20px); }

.ps-pre {
  display: flex; align-items: center; justify-content: flex-start; gap: 12px;
  padding: 10px 0; font-size: 13px; color: #33445C;
  border-bottom: 1px dashed var(--c-line-1, #E7EDF6);
}
.ps-pre:last-of-type { border-bottom: 0; }
.ps-pre b.ok { color: #0E8B57; font-weight: 700; }
.ps-pre b.warn { color: #B26B00; font-weight: 600; font-size: 12.5px; text-align: right; }

/* 需求12：蓝色按钮统一（高度 / 圆角 / 左右内边距 / 字重） */
.btn.primary, .btn.aux, .btn.ok, .btn.trans, .btn.danger {
  border-radius: 10px;
  font-weight: 650;
  letter-spacing: .2px;
}
.btn.sm { border-radius: 9px; }

/* ═══════════════════════════════════════════════════════════
   需求6（2026-10-22）：顶栏统一消息入口 + 消息中心
   ═══════════════════════════════════════════════════════════ */
.tb-msg {
  position: relative; flex: none;
  width: 32px; height: 32px; margin-right: 2px;
  border: 0; border-radius: 50%;
  background: rgba(255, 255, 255, .16); color: #fff;
  display: flex; align-items: center; justify-content: center;
  cursor: pointer; padding: 0;
  transition: background .15s ease;
}
.tb-msg:hover, .tb-msg:active { background: rgba(255, 255, 255, .3); }
.tb-msg svg { display: block; }
.tb-msg-b {
  position: absolute; top: -3px; right: -4px;
  min-width: 16px; height: 16px; padding: 0 4px;
  border-radius: 8px; background: #FA5151; color: #fff;
  font-size: 10px; font-weight: 700; line-height: 16px; font-style: normal;
  text-align: center; box-shadow: 0 0 0 2px rgba(255, 255, 255, .95);
}
@media (max-width: 430px) {
  .tb-msg { width: 30px; height: 30px; }
}

/* 消息中心列表 */
.mc-list { display: flex; flex-direction: column; }
.mc-row {
  display: flex; align-items: center; gap: 12px;
  padding: 14px 16px;
  border-bottom: 1px solid var(--c-line-2, #EFF3F9);
  text-decoration: none; color: inherit;
}
.mc-row:last-child { border-bottom: 0; }
.mc-row:active { background: #F7FAFF; }
.mc-ico {
  width: 38px; height: 38px; flex: none; border-radius: 12px;
  display: flex; align-items: center; justify-content: center;
  font-size: 18px; background: #EEF4FF;
}
.mc-ico.green { background: #E8F7EF; }
.mc-ico.amber { background: #FFF6E6; }
.mc-main { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.mc-main b { font-size: 14px; color: var(--c-ink-900, #0E1B2E); }
.mc-main small { font-size: 12px; color: #8493A8; margin-top: 3px; line-height: 1.5; }
.mc-n {
  flex: none; min-width: 18px; height: 18px; padding: 0 5px;
  border-radius: 9px; background: #FA5151; color: #fff;
  font-size: 11px; font-weight: 700; line-height: 18px; text-align: center;
}
.mc-go { flex: none; color: #B6C2D2; font-size: 18px; }

/* ═══════════════════════════════════════════════════════════
   2026-10-22 反馈修正（第 1/2/3/5 条）
   ═══════════════════════════════════════════════════════════ */

/* ① 蓝色主按钮统一靠卡片栏右侧 */
.card-hd > .btn.primary,
.card-hd > .btn.aux,
.card-hd > .btn.ok,
.card-hd > .btn.trans,
.card-hd > .primary { margin-left: auto; }
.card-hd > .btn.primary ~ .btn { margin-left: 8px; }
.listinfo .btn.primary,
.page-hd .btn.primary { margin-left: auto; }
.ops.ops-right { justify-content: flex-end; }

/* ③ hero：「开始今天的工作」单按钮（图标 + 主副标题） */
.fy-start {
  display: flex; align-items: center; gap: 12px;
  margin-top: 14px; padding: 13px 16px;
  border-radius: 14px;
  background: #fff; color: #163E92; text-decoration: none;
  box-shadow: 0 10px 24px rgba(4, 20, 60, .22);
  transition: transform .16s ease, box-shadow .16s ease;
}
.fy-start:active { transform: translateY(1px); box-shadow: 0 6px 16px rgba(4,20,60,.2); }
.fy-start-ico {
  width: 40px; height: 40px; flex: none; border-radius: 12px;
  background: linear-gradient(135deg, #EAF1FF, #D7E5FF);
  color: #1E52B8; display: flex; align-items: center; justify-content: center;
}
.fy-start-tx { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.fy-start-tx b { font-size: 16.5px; font-weight: 800; letter-spacing: .3px; line-height: 1.25; }
.fy-start-tx small { font-size: 11.5px; color: #7C8DA6; margin-top: 3px; }
.fy-start-go { flex: none; color: #B6C2D2; font-size: 20px; line-height: 1; }

/* 消息中心：客户需求配色 */
.mc-ico.purple { background: #F2EEFF; }

/* ⑤ 返回浮钮：贴底吸附 + 滚动隐藏（不再固定在中部压住按钮） */
#global-back {
  top: auto !important;
  bottom: calc(86px + env(safe-area-inset-bottom)) !important;
  left: 12px !important;
  transform: none !important;
  width: 40px; height: 40px; border-radius: 50%;
  opacity: .94;
  transition: opacity .22s ease, transform .22s ease;
}
#global-back.is-hidden { opacity: 0; transform: translateY(10px) scale(.9); pointer-events: none; }
@media (min-width: 901px) {
  #global-back { bottom: 26px !important; }
}

/* 筛选条里的蓝色主按钮（搜索 / 筛选）统一推到右侧 */
.filters .btn.primary,
.filters #f-go { margin-left: auto; }
@media (max-width: 640px) {
  /* 窄屏按钮会换行，右侧对齐会让第一行留白，改为整行占满 */
  .filters .btn.primary, .filters #f-go { margin-left: 0; }
}

/* ═══════════════════════════════════════════════════════════
   2026-10-22：个人中心蓝色按钮统一贴卡片右缘
   （结构改为 状态文字 → 蓝色按钮 → 折叠箭头，全部卡片右缘对齐）
   ═══════════════════════════════════════════════════════════ */
section.card.pf-fold > .card-hd .pf-right { min-width: 0; }
section.card.pf-fold > .card-hd .pf-right .btn.primary {
  margin-left: 8px !important;
  flex: none;
  white-space: nowrap;
}
section.card.pf-fold > .card-hd .pf-right .pf-sum { max-width: 120px; }
@media (max-width: 430px) {
  section.card.pf-fold > .card-hd .pf-right .pf-sum { max-width: 76px; font-size: 11px; }
  section.card.pf-fold > .card-hd .pf-right .btn.primary { padding: 5px 10px; font-size: 12px; }
}
/* 未折叠的卡片（无右侧组）同样让主按钮靠右 */
section.card:not(.pf-fold) > .card-hd > .btn.primary { margin-left: auto; }

/* ═══════════════════════════════════════════════════════════
   2026-10-22 下午批次
   ═══════════════════════════════════════════════════════════ */
/* 详情页顶部返回按钮 */
.detail-back { margin: 0 0 6px; }
.detail-back .btn { padding: 5px 12px; border-radius: 999px; font-size: 12.5px; }

/* 服务工单 / 客户页筛选条：窄屏压缩高度与宽度占比（原来占了近半屏） */
@media (max-width: 640px) {
  #content .filters { gap: 6px; padding: 8px 10px !important; }
  #content .filters .inp,
  #content .filters .btn { height: 34px !important; font-size: 12.5px; }
  #content .filters #f-kw { flex: 1 1 100%; min-width: 0; }
  #content .filters select.inp { flex: 1 1 calc(50% - 3px); min-width: 0; }
  #content .filters .btn { flex: 0 0 auto; padding: 0 12px; }
}

/* 2026-10-22：需求详情「发起聊天」行 */
.res-chat-row {
  display: flex; align-items: center; gap: 10px;
  margin: 12px 0; flex-wrap: wrap;
}
.res-chat-row .btn { min-width: 128px; }
.res-chat-row .hint { margin: 0; }

/* ═══════════════════════════════════════════════════════════
   2026-10-22：需求详情「报价列表」操作组 —— 聊天 / 修改 / 取消 统一设计
   ═══════════════════════════════════════════════════════════ */
.qt-ops {
  display: inline-flex; align-items: center; gap: 6px;
  flex-wrap: wrap; justify-content: flex-end; vertical-align: middle;
}
.qt-ops .btn {
  height: 28px; min-height: 28px; padding: 0 11px;
  border-radius: 8px; font-size: 12px; font-weight: 650;
  line-height: 26px;
}
.qt-ops .btn.qt-chat {
  background: #EEF4FF; border: 1px solid #C7DBF7; color: #1E52B8;
}
.qt-ops .btn.qt-chat:active { background: #DCE8FF; }
.qt-ops .btn.aux2 { color: #B3261E; border-color: #F0D2CE; background: #FFF7F6; }
.qt-ops .muted { font-size: 12px; }
/* 表格卡片化（手机）时，操作组靠左排满，避免挤在一角 */
@media (max-width: 640px) {
  .qt-ops { justify-content: flex-start; }
  .qt-ops .btn { flex: 0 0 auto; }
}

/* ═══════════════════════════════════════════════════════════
   2026-10-22 第四批
   ═══════════════════════════════════════════════════════════ */

/* ① 陪诊师库：横向滚动时固定「排名 + 陪诊师」两列 */
.tbl-stick2 { border-collapse: separate; }
.tbl-stick2 th:nth-child(1),
.tbl-stick2 td:nth-child(1) {
  position: sticky; left: 0; z-index: 3;
  background: #fff; min-width: 76px;
}
.tbl-stick2 th:nth-child(2),
.tbl-stick2 td:nth-child(2) {
  position: sticky; left: 76px; z-index: 3;
  background: #fff; box-shadow: 2px 0 6px -2px rgba(14,27,46,.10);
}
.tbl-stick2 thead th:nth-child(1),
.tbl-stick2 thead th:nth-child(2) { z-index: 4; background: #F7F9FD; }
.tbl-stick2 tbody tr.hl td:nth-child(1),
.tbl-stick2 tbody tr.hl td:nth-child(2) { background: #F5F9FF; }

/* ② 证书图片上传控件 */
.cert-up {
  grid-column: 1 / -1; margin: 4px 0 10px;
  padding: 12px; border: 1px dashed var(--c-line-1, #E7EDF6); border-radius: 12px;
  background: #FAFCFF;
}
.cert-up-t { font-size: 13px; font-weight: 700; color: #33445C; margin-bottom: 8px; }
.cert-up-t em { color: #B3261E; font-style: normal; font-size: 12px; }
.cert-up-list { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 8px; }
.cert-up-thumb {
  position: relative; width: 76px; height: 76px; border-radius: 10px;
  overflow: hidden; border: 1px solid var(--c-line-1, #E7EDF6); background: #fff;
}
.cert-up-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.cert-up-thumb button {
  position: absolute; top: 2px; right: 2px; width: 20px; height: 20px;
  border: 0; border-radius: 50%; background: rgba(14,27,46,.6); color: #fff;
  font-size: 13px; line-height: 20px; text-align: center; cursor: pointer; padding: 0;
}
.cert-up-btn {
  display: inline-flex; align-items: center; justify-content: center;
  height: 36px; padding: 0 16px; border-radius: 10px;
  background: #EEF4FF; border: 1px solid #C7DBF7; color: #1E52B8;
  font-size: 13px; font-weight: 650; cursor: pointer;
}
.cert-up-btn:active { background: #DCE8FF; }

/* ③ 聊天消息少时贴底显示（避免输入时上方出现一大片空白；魅族等机型观感问题） */
body.chat-mode .wx-msgs,
body:has(.wx-wrap) .wx-msgs {
  display: flex; flex-direction: column;
}
body.chat-mode .wx-msgs > :first-child,
body:has(.wx-wrap) .wx-msgs > :first-child { margin-top: auto; }

/* ═══════════════════════════════════════════════════════════
   2026-10-22：客户需求页（扫码填写）
   ═══════════════════════════════════════════════════════════ */
/* 「服务类型」下拉文字被裁：固定高度 + 上下内边距导致文字顶到边框 */
.creq-field select {
  height: 46px !important;
  line-height: 46px !important;
  padding: 0 36px 0 13px !important;
  box-sizing: border-box;
  color: #1F2D3D;
}
.creq-field input { height: 46px; }

/* 「我的需求进度」卡片 */
.creq-mine-card { margin-bottom: 14px; }
.cm-hd {
  font-size: 14px; font-weight: 800; color: #163E92;
  padding: 2px 2px 10px; border-bottom: 1px solid #E7EEF7; margin-bottom: 10px;
}
.cm-hd small { font-weight: 400; color: #8493A8; font-size: 11.5px; }
.cm-item + .cm-item { margin-top: 14px; padding-top: 12px; border-top: 1px dashed #E7EEF7; }
.cm-top { display: flex; align-items: center; justify-content: flex-start; margin-bottom: 8px; }
.cm-top b { font-size: 13.5px; color: #0E1B2E; }
.cm-top small { font-size: 11.5px; color: #93A1B5; }
.cm-steps { display: flex; flex-direction: column; gap: 6px; }
.cm-step { display: flex; align-items: center; gap: 8px; font-size: 12.5px; color: #93A1B5; }
.cm-step i {
  width: 8px; height: 8px; border-radius: 50%; flex: none;
  background: #D8E0EB; box-shadow: 0 0 0 3px #F1F5FB;
}
.cm-step.done { color: #0E8B57; }
.cm-step.done i { background: #0E8B57; box-shadow: 0 0 0 3px #E8F7EF; }
.cm-step.run { color: #1E52B8; font-weight: 650; }
.cm-step.run i { background: #1E52B8; box-shadow: 0 0 0 3px #EEF4FF; }

/* 2026-10-22：客户需求进度卡片 —— 工单号 / 就诊时间 元信息 + 取消态 */
.cm-meta {
  font-size: 11.5px; color: #7C8DA6; background: #F7FAFF;
  border-radius: 6px; padding: 5px 8px; margin-bottom: 8px;
  line-height: 1.5;
}
.cm-step.cm-cancel { color: #B3261E; font-weight: 650; }
.cm-step.cm-cancel i { background: #B3261E; box-shadow: 0 0 0 3px #FDECEA; }

/* 2026-10-22：客户需求页「二选一」提示行（与页面风格一致） */
.creq-hint {
  margin: -4px 0 12px;
  font-size: 12px;
  line-height: 1.6;
  color: #7C8DA6;
  padding-left: 2px;
}
.creq-hint b { color: #B3261E; font-weight: 700; }

/* ==================== 2026-10-22：客户需求页（消息中心 → 客户需求）==================== */
/* 顶部四格统计 */
.ld-kpi {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 8px;
  margin: 0 0 12px;
}
.ld-k {
  background: #fff;
  border: 1px solid #E7EEF7;
  border-radius: 12px;
  padding: 10px 6px;
  text-align: center;
}
.ld-k b {
  display: block;
  font-size: 19px;
  line-height: 1.2;
  font-weight: 780;
  color: #1A54B7;
  font-variant-numeric: tabular-nums;
}
.ld-k:nth-child(1) b { color: #C8801A; }
.ld-k:nth-child(3) b { color: #0E8B57; }
.ld-k:nth-child(4) b { color: #93A1B5; }
.ld-k span { display: block; margin-top: 2px; font-size: 11.5px; color: #7C8DA6; }

/* 需求卡片 */
.ld-list { display: flex; flex-direction: column; gap: 10px; }
.ld-card {
  border: 1px solid #E7EEF7;
  border-radius: 14px;
  padding: 12px 13px;
  background: #fff;
}
.ld-top {
  display: flex;
  align-items: center;
  justify-content: flex-start;
  gap: 8px;
  margin-bottom: 9px;
}
.ld-name {
  display: flex;
  align-items: center;
  gap: 8px;
  min-width: 0;
  font-size: 14.5px;
  font-weight: 750;
  color: #0E1B2E;
}
.ld-name .pill { flex: 0 0 auto; font-weight: 600; }
.ld-time { flex: 0 0 auto; font-size: 11.5px; color: #93A1B5; white-space: nowrap; }

.ld-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 7px 10px;
  padding: 9px 10px;
  border-radius: 10px;
  background: #F7FAFD;
}
.ld-cell { min-width: 0; }
.ld-cell i {
  display: block;
  font-style: normal;
  font-size: 11px;
  color: #93A1B5;
  line-height: 1.5;
}
.ld-cell span {
  display: block;
  font-size: 12.5px;
  color: #24384F;
  line-height: 1.6;
  word-break: break-all;
}
.ld-desc {
  margin-top: 8px;
  font-size: 12.5px;
  line-height: 1.7;
  color: #3B4F6B;
  background: #FBFDFF;
  border: 1px dashed #DCE8F6;
  border-radius: 9px;
  padding: 7px 9px;
  word-break: break-word;
}
.ld-ord {
  margin-top: 8px;
  font-size: 12px;
  color: #1A54B7;
  background: #EEF4FF;
  border-radius: 8px;
  padding: 6px 9px;
  line-height: 1.6;
}
.ld-cancel {
  margin-top: 8px;
  font-size: 12px;
  color: #8A5A16;
  background: #FDF4E6;
  border-radius: 8px;
  padding: 6px 9px;
  line-height: 1.6;
}
.ld-ops {
  display: flex;
  flex-wrap: wrap;
  gap: 7px;
  margin-top: 10px;
  justify-content: flex-end;
}
.ld-ops .btn { margin: 0; }

/* 扫码页「我的需求进度」：状态 pill 右侧一列 + 取消按钮 */
.cm-right { display: flex; align-items: center; gap: 7px; flex: 0 0 auto; }
.cm-right .pill { font-weight: 600; }
.cm-ops { margin-top: 9px; display: flex; justify-content: flex-end; }
.cm-ops .btn { margin: 0; }

@media (max-width: 420px) {
  .ld-grid { grid-template-columns: 1fr; }
  .ld-ops { justify-content: flex-start; }
}

/* ==================== 2026-10-22：详情页页签重做（客户 / 就诊人详情）====================
   原问题：沿用商城 `.tabs`（flex-wrap + 药丸），6 个四字页签在 390px 屏被压成两行
   （「基本 / 信息」），带数量的页签更宽、互相挤压后出现重叠与截断。
   新方案：单行分段控件 —— 不换行、宽度随内容自适应、超宽横向滚动（文字永不截断），
   当前项白底浮起 + 品牌蓝字，数量用轻量徽标，层级清晰。 */
.dtabs-wrap { position: relative; margin: 0 0 16px; }
/* 还能往右滑时，右侧渐隐提示「后面还有页签」 */
.dtabs-wrap.is-scroll::after {
  content: '';
  position: absolute;
  top: 1px;
  right: 1px;
  bottom: 1px;
  width: 40px;
  border-radius: 0 13px 13px 0;
  pointer-events: none;
  background: linear-gradient(to right, rgba(242, 245, 250, 0), #F2F5FA 78%);
}
.dtabs {
  display: flex;
  align-items: center;
  gap: 2px;
  background: #F2F5FA;
  border: 1px solid #E6EDF7;
  border-radius: 14px;
  padding: 4px;
  overflow-x: auto;
  overflow-y: hidden;
  scrollbar-width: none;
  -ms-overflow-style: none;
  -webkit-overflow-scrolling: touch;
  scroll-behavior: smooth;
}
.dtabs::-webkit-scrollbar { display: none; height: 0; }
.dtab {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 9px 13px;
  border: 0;
  background: transparent;
  border-radius: 10px;
  font-family: inherit;
  font-size: 12.5px;
  font-weight: 600;
  line-height: 1.25;
  color: #5A6B82;
  white-space: nowrap;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
  transition: background .18s ease, color .18s ease, box-shadow .18s ease;
}
.dtab:active { background: rgba(26, 84, 183, .08); }
.dtab.on {
  background: #fff;
  color: #1A54B7;
  font-weight: 750;
  box-shadow: 0 1px 3px rgba(16, 40, 80, .13), inset 0 0 0 1px rgba(26, 84, 183, .07);
}
.dtab .cnt {
  font-style: normal;
  font-size: 10.5px;
  font-weight: 700;
  line-height: 1;
  min-width: 16px;
  padding: 2.5px 4.5px;
  border-radius: 999px;
  background: #E3EAF4;
  color: #6B7C93;
  font-variant-numeric: tabular-nums;
}
.dtab.on .cnt { background: #E4EEFF; color: #1A54B7; }
@media (max-width: 360px) {
  .dtab { padding: 8px 10px; font-size: 12px; }
}

/* ==================== 2026-10-22：客户需求「定时提醒」==================== */
.ld-remind {
  margin-top: 8px;
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 12px;
  line-height: 1.6;
  color: #8A5A16;
  background: #FFF8EC;
  border: 1px solid #F6E4C4;
  border-radius: 9px;
  padding: 7px 10px;
}
.ld-remind span { flex: 1 1 auto; min-width: 0; word-break: break-word; }
.ld-remind-x {
  flex: 0 0 auto;
  border: 0;
  background: transparent;
  color: #B3261E;
  font-size: 12px;
  font-weight: 600;
  padding: 2px 2px;
  cursor: pointer;
}

/* 到点提醒对话框（优先级最高的浮层） */
.remind-dlg { position: fixed; inset: 0; z-index: 10020; }
.rd-mask { position: absolute; inset: 0; background: rgba(14, 27, 46, .38); animation: fadeIn .16s ease; }
.rd-card {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  width: min(360px, 90vw);
  max-height: 76vh;
  display: flex;
  flex-direction: column;
  background: #fff;
  border-radius: 18px;
  box-shadow: 0 20px 56px rgba(14, 27, 46, .30);
  overflow: hidden;
  animation: sheetUp .2s cubic-bezier(.4, 0, .2, 1);
}
.rd-hd {
  display: flex;
  align-items: center;
  gap: 7px;
  padding: 15px 18px 11px;
  font-size: 15px;
  font-weight: 750;
  color: #0E1B2E;
  border-bottom: 1px solid #EFF4FA;
}
.rd-ico { font-size: 16px; }
.rd-bd { padding: 12px 18px 4px; overflow-y: auto; }
.rd-item { padding: 10px 12px; border: 1px solid #EDF2F9; border-radius: 12px; background: #FBFDFF; }
.rd-item + .rd-item { margin-top: 9px; }
.rd-top { display: flex; align-items: center; gap: 8px; }
.rd-top b { font-size: 14px; color: #0E1B2E; }
.rd-txt { margin-top: 7px; font-size: 13.5px; line-height: 1.65; color: #1F3350; word-break: break-word; }
.rd-sub { margin-top: 6px; font-size: 11.5px; color: #8493A8; }
.rd-ops { display: flex; gap: 9px; justify-content: flex-end; padding: 14px 18px 16px; }
.rd-ops .btn { margin: 0; }

/* 2026-10-22：费用变更「浮层提示」——与即时消息提示框同款，只是不再占页面位置 */
.fee-toast { max-width: 88vw; }
.fee-toast .nt-main { font-size: 15px; font-weight: 600; padding-right: 6px; }
.fee-toast .nt-sub { font-size: 12.5px; opacity: .92; margin-top: 4px; line-height: 1.5; white-space: normal; }

/* ══════════════════════════════════════════════════════════════════════════
   2026-10-22 · 数据大盘视觉规范 v2（鸿蒙 / 安卓适配）
   ══════════════════════════════════════════════════════════════════════════
   【问题】鸿蒙（HarmonyOS Sans）上数字与标题「过黑过粗」：
     ① 原样式用了 750 / 650 / 550 这类**非整百字重**。HarmonyOS Sans 只有
        Thin/Light/Regular/Medium/Bold/Black 六档，750 会被就近匹配到 Bold(700)，
        甚至被浏览器**合成加粗**（synthetic bold）—— 笔画互相粘连，看起来又黑又糊。
     ② 数字颜色直接用 var(--tx) ≈ #0E1B2E（近黑），在鸿蒙的高对比渲染下观感更重。
     ③ 「新建 / 出示 / 二维码」这类文本值套用了数字字号（24~25px），
        在卡片里显得巨大且笨重。
   【规范 v2】（本文件末尾统一收口，优先级最高）
     · 字重：移动端一律 400 / 500；仅 ≥901px 桌面端允许 600。禁用 750/650/550。
     · 色彩：数字 #16273D（深墨蓝，非纯黑），标签 #7C8DA6，单位 #9AA9BC。
     · 字号：数字 24px / 主卡 28px / 文本值 17px / 标签 12px / 单位 11.5px。
     · 渲染：-webkit-font-smoothing:antialiased（避免安卓/鸿蒙的假粗）；
             font-synthesis:none（禁止浏览器合成字重）；等宽数字 tabular-nums。
     · 层次靠「字号 + 颜色」拉开，不再靠堆字重。 */
body, button, input, select, textarea, .db-card, .kpi {
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.db-t, .db-v, .db-main .db-t, .db-main .db-v,
.kpi .k-label, .kpi .k-num, .kpi-t, .kpi-v {
  font-synthesis: none;
  text-rendering: optimizeLegibility;
}
/* 标签：轻、灰、字距微开 */
.db-t {
  font-size: 12px !important;
  font-weight: 400 !important;
  color: #7C8DA6 !important;
  letter-spacing: .2px !important;
}
/* 数字：中灰偏深，不再近黑 */
.db-v {
  font-size: 24px !important;
  font-weight: 500 !important;
  color: #16273D !important;
  letter-spacing: -.2px !important;
  line-height: 1.2 !important;
  font-variant-numeric: tabular-nums;
}
.db-main .db-v { font-size: 28px !important; font-weight: 500 !important; }
/* 单位：比标签更淡，只做后缀 */
.db-v small {
  font-size: 11.5px !important;
  font-weight: 400 !important;
  color: #9AA9BC !important;
  margin-left: 2px !important;
  letter-spacing: 0 !important;
}
/* 文本型数值（新建 / 出示 / 二维码）：缩到与标签同一视觉重量 */
.db-v.db-v-text {
  font-size: 17px !important;
  font-weight: 500 !important;
  letter-spacing: 0 !important;
  color: #22364F !important;
}
/* 强调态（有待办）：用橙色 + 同字重，靠颜色不靠加粗 */
.db-main.db-hot .db-v, .db-card.db-hot .db-v { color: #C8801A !important; }
/* 桌面端才允许 600，且仍避免近黑 */
@media (min-width: 901px) {
  .db-v { font-weight: 600 !important; }
  .db-main .db-v { font-weight: 600 !important; }
}
/* 卡片内边距与图标统一（去掉各家字体造成的上下留白差） */
.db-card { padding: 14px 15px !important; gap: 6px !important; }
.db-ico { width: 32px !important; height: 32px !important; font-size: 16px !important; }
/* 极窄屏（320~360）再降一档，确保 ¥11,400.00 不换行不裁切 */
@media (max-width: 360px) {
  .db-v { font-size: 21px !important; }
  .db-main .db-v { font-size: 24px !important; }
  .db-v.db-v-text { font-size: 16px !important; }
  .db-t { font-size: 11.5px !important; }
}

/* ══════════════════════════════════════════════════════════════════════════
   2026-10-22（第4项）· 服务工单 / 订单管理：筛选区三行结构 + 操作行重设计
   ① 搜索框整行 ② 条件下拉等宽两列 ③ 操作行「搜索筛选 · 指派 · 新建工单」同一行
   【操作行设计】
     · 三等分（有指派权限）/ 两等分（无指派权限），「新建工单」永远是主按钮（实心蓝），
       并把剩余宽度吃满 —— 不再是一个 90px 的小方块孤零零吊在一行。
     · 「搜索 / 筛选」降为浅蓝底次级按钮；「指派」为白底描边三级按钮。
       三个按钮同高 40px，视线自然落在「新建工单」上。
     · 宽屏限制整行最大宽度，避免两个按钮各拉 440px 变成两条长条。
   ══════════════════════════════════════════════════════════════════════════ */
.filters.f-filters {
  display: flex;
  flex-direction: column;
  gap: 10px;
  flex-wrap: nowrap;
}
/* 条件下拉用 2 列网格（不用 flex 50% + gap，那会因 1~2px 的舍入差把第二列挤到下一行） */
.filters.f-filters .f-row {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
  width: 100%;
}
.filters.f-filters .f-row > .inp {
  min-width: 0;
  width: auto !important;
}
/* 关键字搜索框独占整行 */
.filters.f-filters .f-row > #f-kw {
  grid-column: 1 / -1;
  min-width: 0 !important;
}
/* —— 操作行 —— */
.filters.f-filters .f-ops {
  display: flex;
  gap: 8px;
  width: 100%;
  flex-wrap: nowrap;
  align-items: stretch;
}
#content .filters.f-filters .f-ops > .btn {
  flex: 1 1 0;
  min-width: 0;
  margin: 0 !important;
  height: 40px !important;
  padding: 0 10px !important;
  font-size: 13.5px !important;
  font-weight: 600 !important;
  letter-spacing: .2px;
  white-space: nowrap;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 10px;
}
/* 主按钮：新建工单（实心蓝，多占一点宽度，视觉上是这一行的主角） */
#content .filters.f-filters .f-ops > #btn-new { flex: 1.25 1 0; }
/* 次级：搜索 / 筛选（浅蓝底 + 品牌蓝字） */
#content .filters.f-filters .f-ops > #f-go {
  background: #E8F0FE !important;
  color: #1A54B7 !important;
  border: 1px solid #D2E2FA !important;
  box-shadow: none !important;
}
#content .filters.f-filters .f-ops > #f-go:active { background: #D8E6FC !important; }
/* 三级：指派（白底描边，独立按键） */
#content .filters.f-filters .f-ops > #btn-assign {
  background: #fff !important;
  color: #1A54B7 !important;
  border: 1px solid #C7DBF7 !important;
  box-shadow: none !important;
}
#content .filters.f-filters .f-ops > #btn-assign:active { background: #EEF4FF !important; }
/* 宽屏：整行收窄，避免按钮被拉成两条长条 */
@media (min-width: 641px) {
  .filters.f-filters .f-ops { max-width: 560px; }
}
/* 极窄屏：字号与内边距再收一档，保证三个按钮同行不换行、文字不截断 */
@media (max-width: 360px) {
  #content .filters.f-filters .f-ops > .btn { font-size: 12px !important; padding: 0 6px !important; }
}

/* 2026-10-22：发单方「待确认付款」浮层提示（与即时消息提示框同款） */
.pay-toast { max-width: 88vw; }
.pay-toast .nt-main { font-size: 15px; font-weight: 600; padding-right: 6px; }
.pay-toast .nt-sub { font-size: 12.5px; opacity: .92; margin-top: 4px; line-height: 1.5; white-space: normal; }

/* ─────────────────────────────────────────────────────────────
   2026-10-22 晚 · 弹窗紧凑排版 .modal.dense
   用于字段较多、竖向留白过大的表单（发布 / 修改医疗资源需求）。
   · 内边距 16→12、字段间距 14→10、标签与控件间距 6→5
   · 控件高度 38px（既不松散也保证触控尺寸）
   · 说明文字降一级字号与行高，避免长段 hint 把面板撑得很空
   ───────────────────────────────────────────────────────────── */
.modal.dense .modal-hd { padding: 12px 16px; }
.modal.dense .modal-hd h3 { font-size: 16px; }
.modal.dense .modal-bd { padding: 12px 16px; gap: 10px; }
.modal.dense .modal-bd > label { gap: 5px; font-size: 12.5px; color: #5A6C85; }
.modal.dense .modal-bd input,
.modal.dense .modal-bd select { height: 38px; border-radius: 10px; }
.modal.dense .modal-bd textarea { min-height: 76px; padding: 8px 10px; line-height: 1.6; }
.modal.dense .modal-bd p.hint,
.modal.dense .modal-bd .hint { font-size: 11.5px; line-height: 1.62; margin: 4px 0 0; }
.modal.dense .modal-ft { padding: 10px 16px; }
.modal.dense .field-label { font-size: 12.5px; color: #5A6C85; }

/* 2026-10-22 晚 · 工作记录分页（文档《软件bug》第 2 项：补上「上一页」翻页入口） */
.pager { flex-wrap: wrap; align-items: center; }
.pager .pg-info { font-size: 12.5px; color: #7C8DA6; }

/* ═══════════════════════════════════════════════════════════
   2026-10-23 · 导航角标统一「相对图标」定位（不遮挡图标）
   原实现：position:absolute; right:50%; margin-right:-20px —— 相对整行定位，
          侧栏 / 底部 Tab 图标宽度或字号一变，角标就压到图标上。
   现实现：角标挂在 .nav-item > i 内，以图标为基准贴右上角外沿，
          侧栏 18px、底部 Tab 20~22px 均不遮挡、不重叠。
   ═══════════════════════════════════════════════════════════ */
.nav-item > i { position: relative; }
.nav-item > i > .badge,
.nav-item > i > .badge.badge-msg {
  position: absolute !important;
  top: -7px !important;
  right: -12px !important;
  left: auto !important;
  margin: 0 !important;
  width: auto !important;
  min-width: 16px !important;
  height: 16px !important;
  padding: 0 4px !important;
  border-radius: 9px !important;
  font-size: 10px !important;
  line-height: 16px !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  opacity: 1 !important;            /* 覆盖 .nav-item i { opacity:.75 } 的继承 */
  background: #FA5151;
  color: #fff;
  box-shadow: 0 0 0 2px #fff;
  pointer-events: none;
}
.nav-item > i > .badge:not(.badge-msg) { background: var(--danger, #c0392b); }
/* 窄屏「个人中心」未读圆点：贴图标左上角外沿，与右上角「管理」标签分居两侧 */
.nav-item > i > .nav-unread-dot { opacity: 1 !important; }

/* 2026-10-23 · 底部 Tab：角标整体下移
   原因：底部 Tab 图标上方的留白只有 7~8px，角标 top:-7 会顶出 Tab 栏上沿被裁切（数字只剩一半）。
   处理：底部 Tab 单独改为 top:0（贴着图标上沿），高度收到 15px、右移量不变 ——
        数字完整显示、仍贴在图标右上角、不压住图标主体，也不改变图标布局与点击区域。
   侧栏（有足够留白）保持 top:-7px 不变。 */
.tabbar .nav-item > i > .badge,
.tabbar .nav-item > i > .badge.badge-msg {
  top: 0 !important;
  right: -12px !important;
  min-width: 15px !important;
  height: 15px !important;
  line-height: 15px !important;
  border-radius: 8px !important;
  font-size: 10px !important;
  box-shadow: 0 0 0 1.5px #fff;
}
.tabbar .nav-item > i > .nav-unread-dot { top: 0 !important; left: -5px !important; }



/* ==================== 资源与合作：视觉体系统一（2026-10-24）====================
   目标：一组按钮同高同圆角、卡片同内距同边框、字段区统一 2 列信息格、
        底部操作行统一分隔与按钮尺寸；配色只用「品牌蓝（主）＋ 橙（转单）＋ 灰（中性）」三档。 */
/* 下拉菜单：节点已被挂到 body，用自身 .open 控制显隐 */
.hub-oc-menu.open { display: block !important; }

/* 顶部 4 个入口：等宽等高 */
.hub-ops { display: grid !important; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; margin: 12px 0 14px; }
@media (max-width: 640px) { .hub-ops { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.hub-ops .btn, .hub-ops .hub-entry, .hub-ops #hub-center {
  width: 100%; height: 42px; display: inline-flex; align-items: center; justify-content: center;
  gap: 6px; border-radius: 12px; font-size: 14px; font-weight: 600; letter-spacing: .2px;
  box-shadow: none; padding: 0 10px;
}
.hub-ops .hub-entry { background: #fff; border: 1px solid #DFE6F1; color: #33415C; }
.hub-ops .hub-entry:hover { border-color: #B9CBE6; color: #1A54B7; }

/* 卡片：统一边框 / 圆角 / 内距 / 阴影 */
.card.res-item, .card.trans-item {
  border: 1px solid #E7EDF6 !important; border-radius: 16px !important;
  box-shadow: 0 2px 10px rgba(18, 40, 77, .05) !important;
  padding: 14px 14px 12px !important; background: #fff !important;
}
.res-item .ri-hd, .trans-item .ri-hd {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  padding-bottom: 10px; margin-bottom: 10px; border-bottom: 1px dashed #EDF1F7;
}
.res-item .ri-hd b, .trans-item .ri-hd b { font-size: 15px; font-weight: 700; color: #1B2433; }
.res-item .ri-hd .tag, .trans-item .ri-hd .tag { margin-left: auto; }

/* 字段区：统一两列信息格 */
.res-item .ri-fields, .trans-item .ri-fields {
  display: grid !important; grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
  gap: 8px !important; margin: 0 0 10px !important;
}
.res-item .ri-f, .trans-item .ri-f {
  background: #F7F9FC; border: 1px solid #EDF2F9; border-radius: 10px;
  padding: 8px 10px; display: flex; flex-direction: column; gap: 2px; min-width: 0;
}
.res-item .ri-f span, .trans-item .ri-f span { font-size: 11px; color: #8A97AB; line-height: 1.25; }
.res-item .ri-f b, .trans-item .ri-f b { font-size: 13.5px; color: #1F2A3A; font-weight: 600; line-height: 1.35;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* 底部操作行 */
.res-item .ri-foot, .trans-item .ri-foot {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  padding-top: 10px; border-top: 1px solid #F0F4FA; font-size: 12px; color: #6B7A90;
}
.res-item .ri-foot .btn, .trans-item .ri-foot .btn {
  height: 34px; padding: 0 14px; border-radius: 10px; font-size: 13px; font-weight: 600;
}
.res-item .ri-foot .link, .trans-item .ri-foot .link { font-weight: 600; }

/* 类型徽标与单号：统一尺寸节奏 */
.hub-type-badge { height: 22px; display: inline-flex; align-items: center; }
.hub-no { height: 20px; display: inline-flex; align-items: center; }

/* ==================== 2026-10-24 第三轮：会话右滑 + 顶部按钮单行 + 下拉与标签页美化 ==================== */
/* ① 会话列表右滑操作（微信式） */
.wx-swipe { position: relative; overflow: hidden; border-radius: 12px; }
.wx-swipe-ops { position: absolute; left: 0; top: 0; bottom: 0; width: 132px; display: flex; }
.wx-sw-btn { flex: 1; border: 0; font-size: 13px; font-weight: 600; color: #fff; font-family: inherit; cursor: pointer; }
.wx-sw-btn.read { background: #1A54B7; }
.wx-sw-btn.del { background: #E24A4A; }
.wx-swipe .wx-sess { position: relative; z-index: 1; background: #fff;
  transition: transform .22s cubic-bezier(.2,.7,.3,1); will-change: transform; }

/* ② 顶部四个按钮：**保持单行横向**，不再折成两行 */
.hub-ops { display: flex !important; flex-wrap: nowrap !important; gap: 8px !important; align-items: stretch; }
.hub-ops > * { flex: 1 1 0 !important; min-width: 0 !important; }
.hub-ops .btn, .hub-ops .hub-entry, .hub-ops #hub-center {
  width: 100%; height: 40px; padding: 0 6px; font-size: 13px; border-radius: 11px;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
@media (max-width: 390px) {
  .hub-ops { gap: 6px !important; }
  .hub-ops .btn, .hub-ops .hub-entry, .hub-ops #hub-center { font-size: 12px; padding: 0 3px; }
}

/* ③ 订单中心下拉：更精致的浮层 */
.hub-oc-menu { border-radius: 14px; padding: 8px; border: 1px solid #E6ECF5;
  box-shadow: 0 16px 40px rgba(14,27,46,.18), 0 2px 8px rgba(14,27,46,.06); }
.hub-oc-menu button { display: flex; align-items: center; gap: 9px; padding: 10px 12px;
  font-size: 13.5px; color: #2A3546; border-radius: 9px; }
.hub-oc-menu button::before { content: ''; width: 6px; height: 6px; border-radius: 50%;
  background: #C9D4E3; flex: none; transition: background .15s; }
.hub-oc-menu button:hover { background: #F3F7FD; color: #12408F; }
.hub-oc-menu button:hover::before { background: #1A54B7; }

/* ④ 订单中心标题与页签：改为分段控件，去掉大胶囊的笨重感 */
.hub-oc-hd { display: flex; align-items: center; justify-content: flex-start; gap: 10px; margin: 4px 0 10px; }
.hub-oc-hd b { font-size: 16px; color: #1B2433; }
.hub-oc-tabs { display: flex; gap: 4px; background: #F2F5FA; padding: 4px; border-radius: 12px; margin-bottom: 12px; }
.hub-oc-tab { flex: 1; height: 34px; border: 0; background: none; border-radius: 9px;
  font-size: 13.5px; font-weight: 600; color: #5C6B82; font-family: inherit; cursor: pointer; white-space: nowrap; }
.hub-oc-tab.on { background: #fff; color: #12408F; box-shadow: 0 1px 4px rgba(18,40,77,.12); }

/* ==================== 即时消息：微信式搜索 + 列表通栏（2026-10-24） ==================== */
/* 顶部搜索：居中、最大 520px、浅灰圆角，同微信 */
.wx-search-wrap { display: flex; justify-content: center; padding: 2px 0 10px; }
.wx-search { position: relative; width: 100%; max-width: 520px; }
.wx-search-ic { position: absolute; left: 12px; top: 50%; transform: translateY(-50%);
  font-size: 13px; opacity: .5; pointer-events: none; }
.wx-search-inp { width: 100%; height: 38px; border: 0; border-radius: 10px; background: #EDF1F7;
  padding: 0 14px 0 34px; font-size: 14px; color: #22303F; outline: none; font-family: inherit;
  -webkit-appearance: none; appearance: none; }
.wx-search-inp::placeholder { color: #8A97AB; }
.wx-search-inp:focus { background: #E6EDF8; }

/* 列表通栏：抵消内容区左右内边距（移动端 12px / 桌面 20px） */
.wx-list-card { border: 0 !important; border-radius: 0 !important; box-shadow: none !important;
  background: transparent !important; }
@media (max-width: 900px) {
  .wx-list-card { margin-left: -12px !important; margin-right: -12px !important; }
}
@media (min-width: 901px) {
  .wx-list-card { margin-left: -20px !important; margin-right: -20px !important; }
}
.wx-list-card .card-bd, .wx-list-card .wx-list-bd {
  padding: 0 !important; border-radius: 0 !important; background: transparent !important;
}
.wx-list-card .wx-swipe { border-radius: 0 !important; }
.wx-list-card .wx-sess { border-radius: 0 !important; padding-left: 16px !important; padding-right: 16px !important; }
/* 通栏后右侧预留一点呼吸，避免时间/未读点被裁切 */
.wx-list-card .wx-sess-top { padding-right: 2px; }

/* ==================== 2026-10-24 第四轮：左滑操作 + 鸿蒙阔直板适配 ==================== */
/* ① 左滑：操作区移到**右侧**（原在左侧，配合右滑） */
.wx-swipe-ops { left: auto !important; right: 0 !important; }

/* ② 卡片头部：标题单行省略、标签/徽标/单号不换行
      —— 修华为 Pura X（鸿蒙阔直板）下「标题被挤到第二行、与状态标签错位」 */
.res-item .ri-hd, .trans-item .ri-hd { flex-wrap: nowrap !important; }
.res-item .ri-hd b, .trans-item .ri-hd b {
  min-width: 0 !important; flex: 1 1 auto !important; overflow: hidden;
  text-overflow: ellipsis; white-space: nowrap;
}
.res-item .ri-hd .tag, .trans-item .ri-hd .tag {
  flex: 0 0 auto !important; margin-left: 8px !important; white-space: nowrap;
}
.res-item .ri-hd .hub-no, .trans-item .ri-hd .hub-no,
.res-item .ri-hd .hub-type-badge, .trans-item .ri-hd .hub-type-badge { flex: 0 0 auto !important; }

/* ③ 「订单中心」按钮：不再裁掉右侧下拉箭头 */
.hub-ops #hub-center { overflow: visible !important; text-overflow: clip !important; }
@media (max-width: 380px) {
  .hub-ops #hub-center { font-size: 11.5px !important; letter-spacing: -.2px; }
}

/* ==================== 2026-10-24 第五轮：订单中心按钮三段式（修鸿蒙窄屏裁切） ==================== */
#hub-center { display: inline-flex; align-items: center; justify-content: center; gap: 3px; min-width: 0; }
#hub-center .oc-i, #hub-center .oc-c { flex: 0 0 auto; }
#hub-center .oc-t { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
@media (max-width: 420px) {
  .hub-ops { gap: 6px !important; }
  .hub-ops .btn, .hub-ops .hub-entry { font-size: 12px !important; padding: 0 4px !important; }
}
@media (max-width: 360px) {
  .hub-ops .btn, .hub-ops .hub-entry { font-size: 11.5px !important; padding: 0 2px !important; }
  #hub-center .oc-i { display: none; }
}

/* ==================== 2026-10-24 全局视觉统一层：紧凑、留白最小、组件一致 ====================
   基准取自「即时消息」页：贴边内容、行内 16px 水平内距、细分隔线、无厚重阴影与圆角。
   本层只调间距/圆角/描边/字号，不动任何功能布局与内联样式。 */

/* ① 页面容器：留白整体收一档（保留底部 tabbar 空间） */
#content, main.content, .content { padding: 12px 10px 84px !important; }
@media (min-width: 901px) {
  #content, main.content, .content { padding: 14px 16px 20px !important; }
}

/* ② 卡片：更小圆角、更轻阴影、更紧外边距；去掉 hover 位移（与即时消息一致，避免跳动） */
.card {
  border-radius: 12px !important; margin-bottom: 10px !important;
  box-shadow: 0 1px 3px rgba(18, 40, 77, .05) !important;
}
.card:hover { transform: none !important; box-shadow: 0 1px 3px rgba(18, 40, 77, .05) !important; }
.card-hd { padding: 10px 12px !important; gap: 8px !important; }
.card-hd h3 { font-size: 14.5px !important; }
.card-bd { padding: 10px 12px !important; }

/* ③ 页头：更小字号、更紧下边距 */
.page-hd { margin: 0 0 10px !important; gap: 8px !important; }
.page-hd h2 { font-size: 17px !important; line-height: 1.35; }
.page-sub { font-size: 12.5px !important; }

/* ④ 通用操作行 / 列表 / 表格：统一间距 */
.ops { gap: 8px !important; margin: 8px 0 !important; }
.tbl th, .tbl td { padding: 8px 10px !important; }
.mini-row { padding: 8px 0 !important; gap: 6px !important; }
.empty { padding: 22px 12px !important; }
.hint { margin: 6px 0 0 !important; font-size: 12.5px; }

/* ⑤ 组件统一：按钮圆角、标签尺寸、分段控件高度 */
.btn { border-radius: 10px !important; }
.btn.sm { border-radius: 9px !important; }
.tag { font-size: 11.5px !important; padding: 2px 8px !important; border-radius: 6px !important; }
.seg, .hub-oc-tab, .stab { border-radius: 9px !important; }

/* ⑥ 区块标题统一 */
h3 { letter-spacing: -.1px; }

/* 统一层补充：① 沉浸聊天模式恢复底部 0；② 即时消息通栏的负边距随容器 10px 对齐 */
body.chat-mode #content { padding-bottom: 0 !important; }
@media (max-width: 900px) {
  .wx-list-card { margin-left: -10px !important; margin-right: -10px !important; }
}
@media (min-width: 901px) {
  .wx-list-card { margin-left: -16px !important; margin-right: -16px !important; }
}

/* ==================== 2026-10-24 第六轮：四按钮内容自适应（不截断文字） ==================== */
.hub-ops { display: flex !important; flex-wrap: nowrap !important; gap: 6px !important; }
/* 关键：不再等分宽度，让每个按钮按内容取宽 —— 「订单中心」就能完整显示 */
.hub-ops > * { flex: 0 1 auto !important; min-width: 0 !important; }
.hub-ops .btn, .hub-ops .hub-entry, .hub-ops #hub-center {
  height: 38px !important; padding: 0 8px !important; font-size: 12.5px !important;
  border-radius: 10px !important;
}
@media (max-width: 360px) {
  .hub-ops .btn, .hub-ops .hub-entry, .hub-ops #hub-center {
    font-size: 11.5px !important; padding: 0 6px !important; height: 36px !important;
  }
  #hub-center .oc-i { display: none !important; }
}

/* 时间段选择（就诊时间段：开始 ~ 截止） */
.tr-wrap { display: flex; align-items: center; gap: 6px; }
.tr-inp { flex: 1 1 0; min-width: 0; }
.tr-sep { flex: 0 0 auto; font-size: 12px; color: #8A97AB; }

/* ==================== 2026-10-24 第七轮：四按钮「单行不压缩」最终版 ====================
   问题：即使改成 flex:0 1 auto，四项总宽仍大于容器 → 第 4 个被 flex-shrink 压成只剩图标。
   方案：① 子项**禁止收缩**（flex:0 0 auto）；② 手机端降字号 + 收紧内边距 + 隐藏 📁 图标；
        ③ 文字段不再省略，保证「订单中心」四个字完整。 */
.hub-ops { display: flex !important; flex-wrap: nowrap !important; align-items: stretch; }
.hub-ops > * { flex: 0 0 auto !important; min-width: 0 !important; }
.hub-ops .btn, .hub-ops .hub-entry, .hub-ops #hub-center {
  height: 38px; padding: 0 10px; font-size: 13px; border-radius: 10px;
  white-space: nowrap; overflow: visible;
}
#hub-center .oc-t { overflow: visible !important; text-overflow: clip !important; }

@media (max-width: 520px) {
  .hub-ops { gap: 6px !important; }
  .hub-ops .btn, .hub-ops .hub-entry, .hub-ops #hub-center {
    height: 36px !important; padding: 0 8px !important; font-size: 12px !important;
  }
}
@media (max-width: 420px) {
  .hub-ops { gap: 5px !important; }
  .hub-ops .btn, .hub-ops .hub-entry, .hub-ops #hub-center {
    height: 34px !important; padding: 0 6px !important; font-size: 11px !important;
    letter-spacing: -.2px;
  }
  #hub-center .oc-i { display: none !important; }   /* 隐藏文件夹图标，把宽度全留给文字 */
}
@media (max-width: 350px) {
  .hub-ops .btn, .hub-ops .hub-entry, .hub-ops #hub-center {
    padding: 0 4px !important; font-size: 10.5px !important;
  }
}

/* ==================== 2026-10-24 第八轮：订单正文 / 报价说明统一排版 ==================== */
/* 订单正文类说明（原小字提示，现作为卡片内正常内容） */
.res-body-note {
  margin: 10px 0 0; padding: 9px 12px; font-size: 13.5px; line-height: 1.7; color: #33415C;
  background: #F7F9FC; border-left: 3px solid #CFE0FA; border-radius: 8px;
}
/* 报价弹窗底部说明（绿框文案） */
.quote-note {
  margin: 12px 0 0; padding: 10px 12px; background: #F7F9FC; border: 1px solid #E8EEF7;
  border-radius: 10px; font-size: 12px; line-height: 1.65; color: #6B7A90;
}
/* 全站小字说明统一：同一字号/行高/颜色，避免大小不一 */
.hint { font-size: 12px !important; line-height: 1.65 !important; color: #7A879B !important; }

/* ==================== 2026-10-24 第九轮：四入口「等宽四列 + 自适应字号」最终方案 ====================
   前几版问题的本质：
     · flex:1 1 0 → 等分但可收缩 → 长文案被省略号截断；
     · flex:0 0 auto → 不收缩但按内容取宽 → 总宽溢出，整页横向滑动。
   最终方案：CSS Grid 四等分（永不溢出、永不换行），用**字号随屏宽降档**保证文字完整。 */
.hub-ops {
  display: grid !important;
  grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
  gap: 6px !important;
  overflow: hidden !important;          /* 彻底杜绝横向溢出/滑动 */
  width: 100% !important;
}
.hub-ops > * { width: 100% !important; min-width: 0 !important; }
.hub-ops .btn, .hub-ops .hub-entry, .hub-ops #hub-center {
  width: 100% !important; height: 40px !important; padding: 0 4px !important;
  font-size: 11px !important; letter-spacing: -.2px; border-radius: 10px !important;
  display: inline-flex !important; align-items: center; justify-content: center;
  gap: 3px !important; white-space: nowrap !important; overflow: hidden;
}
/* 图标固定尺寸，不参与压缩 */
.hub-ops .btn i, .hub-ops .hub-entry i, .hub-ops #hub-center .oc-i, .hub-ops #hub-center .oc-c {
  flex: 0 0 auto !important; font-style: normal;
}
/* 文字段：优先完整显示，极端窄屏才省略 */
.hub-ops .btn > span, .hub-ops .hub-entry > span, .hub-ops #hub-center .oc-t {
  min-width: 0; overflow: hidden; text-overflow: ellipsis;
}
@media (max-width: 359px) {
  .hub-ops { gap: 4px !important; }
  .hub-ops .btn, .hub-ops .hub-entry, .hub-ops #hub-center {
    font-size: 10px !important; padding: 0 2px !important; height: 38px !important;
  }
}
@media (min-width: 600px) {
  .hub-ops { gap: 8px !important; }
  .hub-ops .btn, .hub-ops .hub-entry, .hub-ops #hub-center { font-size: 13px !important; height: 42px !important; }
}

/* ==================== 2026-10-24 第十轮：首屏骨架（感知提速） ==================== */
.sk-page { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; padding: 2px 0; }
.sk-card {
  height: 96px; border-radius: 12px;
  background: linear-gradient(90deg, #EEF2F8 25%, #F7F9FC 37%, #EEF2F8 63%);
  background-size: 400% 100%; animation: sk-shine 1.15s ease infinite;
}
@keyframes sk-shine { 0% { background-position: 100% 0; } 100% { background-position: 0 0; } }
@media (max-width: 900px) { .sk-card { height: 88px; } }

/* ==================== 2026-10-24 第十一轮：卡片头部/页脚字号统一 ====================
   原来同一张卡里有 4 种字号（徽标 11.5 / 单号 11 + 等宽 / 标题 15 / 状态 11.5；页脚 12 与按钮 13），
   视觉上"碎"。现统一为 **13px + 同一字体栈**，仅用字重区分层级。 */
.res-item .ri-hd .hub-type-badge,
.trans-item .ri-hd .hub-type-badge { font-size: 12.5px !important; height: 22px !important; }
.res-item .ri-hd .hub-no,
.trans-item .ri-hd .hub-no {
  font-size: 12.5px !important; font-family: inherit !important;   /* 取消等宽字体，与全卡统一 */
  letter-spacing: 0 !important; height: 20px !important; padding: 1px 6px !important;
}
.res-item .ri-hd b, .trans-item .ri-hd b { font-size: 13px !important; font-weight: 700 !important; }
.res-item .ri-hd .tag, .trans-item .ri-hd .tag { font-size: 12.5px !important; }

/* 页脚：统一 12.5px，右侧操作按钮同高同字号 */
.res-item .ri-foot, .trans-item .ri-foot { font-size: 12.5px !important; gap: 8px !important; }
.res-item .ri-foot .btn, .trans-item .ri-foot .btn {
  font-size: 12.5px !important; height: 32px !important; padding: 0 12px !important; border-radius: 9px !important;
}
.res-item .ri-foot .link, .trans-item .ri-foot .link { font-size: 12.5px !important; }

/* 排版协调：主操作靠右，「查看详情」紧随其左，分享与发单人同处左侧信息区 */
.res-item .ri-foot .btn.primary, .trans-item .ri-foot .btn.primary { margin-left: auto; }
.res-item .ri-foot .link, .trans-item .ri-foot .link { margin-left: 0; }

/* ==================== 2026-10-24 第十二轮：会话左滑「可关闭 + 一次只开一个」 ==================== */
/* 操作层默认透明，只有该行真正展开（.open）才显示 —— 彻底避免静止状态下操作层透出 */
.wx-swipe-ops { opacity: 0; transition: opacity .14s ease; }
.wx-swipe.open .wx-swipe-ops { opacity: 1; }
/* 内容层必须完整覆盖操作层 */
.wx-swipe { display: block !important; }
.wx-swipe > .wx-sess { width: 100% !important; background: #fff !important; position: relative; z-index: 1; }

/* ==================== 2026-10-24 第十三轮：角标配色纠正 + 去边框 + 订单号下移 ====================
   之前 2957 行的后置规则把 res 设成橙、trans 设成蓝，与需求相反；这里做最终覆盖（文件末尾，优先级最高）。 */
.hub-type-badge.res {
  background: #2F6FE4 !important; color: #fff !important; border: 0 !important;
  box-shadow: 0 2px 6px rgba(47,111,228,.28) !important;
}
.hub-type-badge.trans {
  background: #F5A623 !important; color: #fff !important; border: 0 !important;
  box-shadow: 0 2px 6px rgba(245,166,35,.28) !important;
}
/* 卡片头部的状态标签：去掉外框与底色，文字直接显示 */
.res-item .ri-hd .tag, .trans-item .ri-hd .tag {
  background: transparent !important; border: 0 !important; padding: 0 !important;
  box-shadow: none !important; font-weight: 600 !important;
}
/* 订单号（已移到发单人下方）：无边框，与页脚文字同字号 */
.res-item .ri-foot .ri-no, .trans-item .ri-foot .ri-no {
  background: transparent !important; border: 0 !important; padding: 0 !important;
  font-size: 12.5px !important; color: #7A879B !important; font-family: inherit !important;
  letter-spacing: 0 !important; white-space: nowrap;
}
/* 卡片标题：统一字号/颜色/字重（覆盖 2965 行的 14.5px） */
.card.res-item .ri-hd b, .card.trans-item .ri-hd b {
  font-size: 13px !important; font-weight: 700 !important; color: #1B2433 !important;
}

/* ==================== 2026-10-24 第十四轮：卡片页脚改「信息行 + 操作行」固定两行 ====================
   原问题（华为 Pura X 阔直板等）：页脚 6 个元素挤在同一 flex 行里自然换行，
   「我要接单」被挤到第三行，位置不可控。
   现在：第一行放信息（发单人 / 订单号 / 发布时间），第二行放操作（分享 / 查看详情 / 我要接单），
   行数固定，任何屏宽都不会把主按钮挤走。 */
.res-item .ri-foot, .trans-item .ri-foot {
  display: flex !important; flex-direction: column !important; align-items: stretch !important;
  gap: 8px !important;
}
.ri-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 12px;
  font-size: 12.5px; color: #6B7A90; line-height: 1.5; }
.ri-meta > span { white-space: nowrap; }
.ri-acts { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; justify-content: flex-end; }
.ri-acts .btn { flex: 0 0 auto; }
/* 主操作（我要接单 / 接受转单）始终在操作行最右 */
.ri-acts .btn.primary { margin-left: 0; }
@media (max-width: 380px) {
  .ri-acts { justify-content: flex-start; }
  .ri-acts .btn, .ri-acts .link { font-size: 12px !important; }
}

/* ==================== 2026-10-24 第十五轮：备注卡整行宽 ==================== */
/* 备注作为独立信息格，占满整行；样式继承 .kv，与科室名称/医生姓名完全一致 */
.kv-grid > .kv.kv-wide { grid-column: 1 / -1; }
.kv-grid > .kv.kv-wide b { white-space: normal; word-break: break-word; }

/* ==================== 2026-10-24 第十六轮：陪诊师库（规则区重叠修复 + 筛选行） ====================
   根因：规则区原来用 `.dim{display:contents}` 让子元素直接参与父网格，
   但**华为浏览器 / 部分安卓 WebView 不支持 display:contents** → 子元素失去定位，文字相互重叠。
   改为不依赖该特性的 flex 行式布局，任何浏览器都不会叠字。 */
.rank-rules .card-bd { padding: 10px 12px !important; overflow: hidden; }
.rank-rules .dims { display: block !important; }
.rank-rules .dims .dim {
  display: flex !important;
  gap: 10px;
  align-items: flex-start;
  padding: 7px 0;
  border-bottom: 1px dashed #EDF2F9;
}
.rank-rules .dims .dim:last-child { border-bottom: 0; padding-bottom: 0; }
.rank-rules .dims .dim-n {
  flex: 0 0 104px; min-width: 0; font-weight: 600; font-size: 12.5px; color: #33415C;
  background: #F5F8FE; border-radius: 6px; padding: 3px 8px; line-height: 1.5;
}
.rank-rules .dims .dim-v {
  flex: 1 1 auto; min-width: 0; font-size: 12.5px; line-height: 1.65; color: #5B6B82;
  padding: 3px 0; word-break: break-word;
}

/* 筛选行：筛选 / 重置 / 联动说明 */
.rk-f-apply { display: flex !important; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 8px; }
.rk-f-tip { flex: 1 1 200px; min-width: 0; font-size: 12px !important; line-height: 1.5; margin: 0 !important; }
@media (max-width: 420px) {
  .rank-rules .dims .dim { flex-direction: column; gap: 3px; }
  .rank-rules .dims .dim-n { flex: 0 0 auto; }
}

/* ==================== 2026-10-24 第十七轮：陪诊师库表格「前三列固定不滑动」 ====================
   需求：昵称 / 城市 / 今日位置 为固定字段，横向滚动时保持可见（排名列也一并固定，作为锚点）。
   做法：给这 4 列设定固定宽度（保证 left 偏移可计算）+ position:sticky + 白底 + 右侧分隔阴影。 */
.rk-table { border-collapse: separate; border-spacing: 0; }
.rk-table th:nth-child(1), .rk-table td:nth-child(1) { width: 52px; }
.rk-table th:nth-child(2), .rk-table td:nth-child(2) { width: 116px; }
.rk-table th:nth-child(3), .rk-table td:nth-child(3) { width: 76px; }
.rk-table th:nth-child(4), .rk-table td:nth-child(4) { width: 104px; }

.rk-table th:nth-child(1), .rk-table td:nth-child(1),
.rk-table th:nth-child(2), .rk-table td:nth-child(2),
.rk-table th:nth-child(3), .rk-table td:nth-child(3),
.rk-table th:nth-child(4), .rk-table td:nth-child(4) {
  position: sticky; z-index: 2; background: #fff;
}
.rk-table th:nth-child(1), .rk-table td:nth-child(1) { left: 0; }
.rk-table th:nth-child(2), .rk-table td:nth-child(2) { left: 52px; }
.rk-table th:nth-child(3), .rk-table td:nth-child(3) { left: 168px; }
.rk-table th:nth-child(4), .rk-table td:nth-child(4) { left: 244px; }
/* 固定区右边界加一条阴影，滚动时形成"分隔感" */
.rk-table th:nth-child(4), .rk-table td:nth-child(4) {
  box-shadow: 6px 0 8px -6px rgba(18, 40, 77, .18);
}
.rk-table thead th:nth-child(-n+4) { background: #F7F9FC; z-index: 3; }
.rk-table tbody tr.hl td:nth-child(-n+4) { background: #F2FAF7; }
.rk-table td:nth-child(n+5) { white-space: nowrap; }

/* ==================== 2026-10-24 第十八轮：固定列错位修复（灰缝 + 内容透出） ====================
   原因一（灰缝）：上一版用 `width:52px` 但没加 `box-sizing:border-box`，
     实际列宽 = 52 + 左右内距 20 + 边框 ≈ 72px，而 sticky 的 left 仍按 52 累加 →
     第 2/3/4 列起点比实际位置靠左，列与列之间露出背景 → 灰缝。
   原因二（内容透出）：固定列只写了 `background:#fff`，被行内浅色/高亮规则覆盖成透明 →
     横向滚动时右侧内容从固定列下方透出来（截图里「操作」的数字压在今日位置列上）。
   方案：`table-layout:fixed` + 全列显式宽度（列宽可预测）+ `box-sizing:border-box`
     + 固定列强制不透明底色，left 与列宽严格对应。 */
.rk-table {
  table-layout: fixed !important;
  width: 1336px !important;          /* 376（4 个固定列）+ 960（10 个滚动列） */
  min-width: 1336px !important;
  border-collapse: separate !important;
  border-spacing: 0 !important;
}
.rk-table th, .rk-table td { box-sizing: border-box !important; }
/* 4 个固定列：宽度写死，供 left 精确累加 */
.rk-table th:nth-child(1), .rk-table td:nth-child(1) { width: 56px  !important; }
.rk-table th:nth-child(2), .rk-table td:nth-child(2) { width: 120px !important; }
.rk-table th:nth-child(3), .rk-table td:nth-child(3) { width: 84px  !important; }
.rk-table th:nth-child(4), .rk-table td:nth-child(4) { width: 116px !important; }
/* 其余 10 列等宽 */
.rk-table th:nth-child(n+5), .rk-table td:nth-child(n+5) { width: 96px !important; }

/* 固定列：粘住 + 强制不透明（含表头 / 斑马纹 / 高亮行） */
.rk-table th:nth-child(-n+4),
.rk-table td:nth-child(-n+4) {
  position: sticky !important;
  z-index: 2;
  background: #fff !important;
  box-shadow: none;
}
.rk-table th:nth-child(1), .rk-table td:nth-child(1) { left: 0; }
.rk-table th:nth-child(2), .rk-table td:nth-child(2) { left: 56px; }
.rk-table th:nth-child(3), .rk-table td:nth-child(3) { left: 176px; }
.rk-table th:nth-child(4), .rk-table td:nth-child(4) { left: 260px; }
.rk-table thead th:nth-child(-n+4) { background: #F7F9FC !important; z-index: 3; }
.rk-table tbody tr.hl td:nth-child(-n+4) { background: #F2FAF7 !important; }
/* 固定区与滚动区的分界：只加右侧阴影，不占宽度，避免出现第 5 条缝 */
.rk-table th:nth-child(4), .rk-table td:nth-child(4) {
  box-shadow: inset -1px 0 0 #E8EEF7, 6px 0 8px -6px rgba(18,40,77,.16) !important;
}
/* 固定列文字溢出用省略号，保证列宽恒定（否则 auto 布局会把列撑开，left 又错位） */
.rk-table th:nth-child(-n+4), .rk-table td:nth-child(-n+4) {
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

/* ==================== 2026-10-24 第十九轮：固定列瘦身，给右侧滑动区让位 ====================
   问题：4 个固定列占 376px，在 390px 窄屏上几乎吃满，右侧可滑动区只剩一条缝（截图黄框）。
   方案：整体瘦身到 270px（38 / 94 / 58 / 80），并压缩固定列内距与字号、行高，
        让右侧滚动区至少保留 ~120px 可视宽度；left 同步改为 0 / 38 / 132 / 190。 */
.rk-table {
  width: 1150px !important;      /* 270（固定列）+ 880（10 列 × 88） */
  min-width: 1150px !important;
}
/* 固定列：宽度收紧 */
.rk-table th:nth-child(1), .rk-table td:nth-child(1) { width: 38px  !important; }
.rk-table th:nth-child(2), .rk-table td:nth-child(2) { width: 94px  !important; }
.rk-table th:nth-child(3), .rk-table td:nth-child(3) { width: 58px  !important; }
.rk-table th:nth-child(4), .rk-table td:nth-child(4) { width: 80px  !important; }
/* 滚动列也收一点，减少总宽 */
.rk-table th:nth-child(n+5), .rk-table td:nth-child(n+5) { width: 88px !important; }

/* left 与新宽度严格对应 */
.rk-table th:nth-child(1), .rk-table td:nth-child(1) { left: 0; }
.rk-table th:nth-child(2), .rk-table td:nth-child(2) { left: 38px; }
.rk-table th:nth-child(3), .rk-table td:nth-child(3) { left: 132px; }
.rk-table th:nth-child(4), .rk-table td:nth-child(4) { left: 190px; }

/* 固定列：内距/字号/行高一起压，减小整体占地 */
.rk-table th:nth-child(-n+4), .rk-table td:nth-child(-n+4) {
  padding: 6px 6px !important;
  font-size: 12px !important;
}
.rk-table tbody td:nth-child(-n+4) { height: 38px; line-height: 1.35; }
.rk-table thead th:nth-child(-n+4) { height: 34px; font-size: 11.5px !important; }
/* 排名列居中，数字更紧凑 */
.rk-table th:nth-child(1), .rk-table td:nth-child(1) { text-align: center; }

/* ==================== 2026-10-24 第二十轮：固定区再压缩 + 溢出重叠修复 + 操作列定宽 ====================
   三个现象同一个根因：滚动列只设了 `white-space:nowrap`，**没设 `overflow:hidden`** →
   文字（"57 分钟前活跃"、多个"…领先"标签）直接溢出到相邻单元格，压在「操作」列上（黄框）。
   同时：固定区仍偏宽；「操作」列被相邻内容挤压显得不稳。 */
.rk-table { width: 1188px !important; min-width: 1188px !important; }

/* ① 固定区再压：34 / 80 / 50 / 66 = 230px */
.rk-table th:nth-child(1), .rk-table td:nth-child(1) { width: 34px !important; }
.rk-table th:nth-child(2), .rk-table td:nth-child(2) { width: 80px !important; }
.rk-table th:nth-child(3), .rk-table td:nth-child(3) { width: 50px !important; }
.rk-table th:nth-child(4), .rk-table td:nth-child(4) { width: 66px !important; }
.rk-table th:nth-child(1), .rk-table td:nth-child(1) { left: 0; }
.rk-table th:nth-child(2), .rk-table td:nth-child(2) { left: 34px; }
.rk-table th:nth-child(3), .rk-table td:nth-child(3) { left: 114px; }
.rk-table th:nth-child(4), .rk-table td:nth-child(4) { left: 164px; }

/* ② 所有滚动列：超出即省略，绝不溢出压到别的列 */
.rk-table th:nth-child(n+5), .rk-table td:nth-child(n+5) {
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
/* 在线状态需要完整显示"57 分钟前活跃"，单独给足宽度 */
.rk-table th:nth-child(5), .rk-table td:nth-child(5) { width: 106px !important; }
/* 领先维度是多标签列，单独加宽（否则标签互相压） */
.rk-table th:nth-child(13), .rk-table td:nth-child(13) { width: 132px !important; }
.rk-table td:nth-child(13) .tag { font-size: 10.5px !important; padding: 1px 5px !important; margin-right: 3px !important; }

/* ③ 「操作」列：**宽度写死、不参与压缩**，内容不换行不省略 */
.rk-table th:nth-child(14), .rk-table td:nth-child(14) {
  width: 104px !important; min-width: 104px !important; max-width: 104px !important;
  overflow: visible !important; text-overflow: clip !important; white-space: nowrap !important;
  padding-left: 6px !important; padding-right: 6px !important;
}
.rk-table td:nth-child(14) .btn { font-size: 12px !important; padding: 0 8px !important; height: 30px !important; }

/* ④ 字号自适应：固定列按视口宽度在 10.5~12px 间平滑缩放 */
.rk-table th:nth-child(-n+4), .rk-table td:nth-child(-n+4) {
  font-size: clamp(10.5px, 3vw, 12px) !important;
}
.rk-table td:nth-child(14) .btn { font-size: clamp(11px, 3vw, 12px) !important; }

/* ==================== 2026-10-24 第二十一轮：操作列右侧固定 + 截断修复 ====================
   问题一（上红框）：操作列只是"宽 104px"，没有 sticky → 横向滚动时跟着走，右侧还露出白带。
   问题二（下红框）：「领先维度」列 132px + nowrap + ellipsis → 多个标签被切成"…"；
                      「排名」列 34px，表头两个字被截成"排…"。
   方案：① 操作列 position:sticky; right:0 + 不透明底 + 左侧阴影；
        ② 领先维度允许换行、取消省略；③ 排名列加宽到 42px，表头字号降到 11px。 */
.rk-table { width: 1214px !important; min-width: 1214px !important; }

/* ① 操作列：钉在右侧 */
.rk-table th:nth-child(14), .rk-table td:nth-child(14) {
  position: sticky !important;
  right: 0 !important;
  z-index: 3 !important;
  width: 104px !important; min-width: 104px !important; max-width: 104px !important;
  background: #fff !important;
  overflow: visible !important; text-overflow: clip !important; white-space: nowrap !important;
  box-shadow: inset 1px 0 0 #E8EEF7, -6px 0 8px -6px rgba(18, 40, 77, .16) !important;
}
.rk-table thead th:nth-child(14) { background: #F7F9FC !important; z-index: 4 !important; }
.rk-table tbody tr.hl td:nth-child(14) { background: #F2FAF7 !important; }

/* ② 领先维度：允许换行，完整显示所有标签（不再被省略号截断） */
.rk-table th:nth-child(13), .rk-table td:nth-child(13) { width: 150px !important; }
.rk-table td:nth-child(13) {
  white-space: normal !important;
  overflow: visible !important;
  text-overflow: clip !important;
  line-height: 1.5;
}
.rk-table td:nth-child(13) .tag {
  display: inline-block;
  margin: 1px 3px 1px 0 !important;
  font-size: 10.5px !important;
  padding: 1px 5px !important;
}

/* ③ 排名列加宽，表头不再被截成"排…" */
.rk-table th:nth-child(1), .rk-table td:nth-child(1) { width: 42px !important; }
.rk-table thead th:nth-child(1) { font-size: 11px !important; letter-spacing: -.2px; }
/* 固定列 left 偏移随排名列加宽同步 */
.rk-table th:nth-child(2), .rk-table td:nth-child(2) { left: 42px; }
.rk-table th:nth-child(3), .rk-table td:nth-child(3) { left: 122px; }
.rk-table th:nth-child(4), .rk-table td:nth-child(4) { left: 172px; }

/* ④ 表头整行字号压到 11px，避免各列标题被裁 */
.rk-table thead th:nth-child(n+5) { font-size: 11px !important; }

/* ==================== 2026-10-24 第二十二轮：操作列「表头固定 / 内容随表滚动」 ====================
   修正上一版的过度实现：v102 把 th 和 td 都设成 sticky，导致整列不随表格滚动。
   需求拆解：
     · th（第 14 列表头「操作」）→ 保持 sticky right，横向滚动时标题停在原位；
     · td（第 14 列内容 / 按钮）→ 取消 sticky，和其他列一样随表格整体滑动。
   两者宽度仍锁 104px，保证表头与内容对齐。 */
/* ① 表头「操作」：固定在右侧 */
.rk-table th:nth-child(14) {
  position: sticky !important;
  right: 0 !important;
  z-index: 4 !important;
  width: 104px !important; min-width: 104px !important; max-width: 104px !important;
  background: #F7F9FC !important;
  box-shadow: inset 1px 0 0 #E8EEF7, -6px 0 8px -6px rgba(18, 40, 77, .16) !important;
}

/* ② 内容单元格：取消固定，随表格滚动 */
.rk-table td:nth-child(14) {
  position: static !important;
  right: auto !important;
  left: auto !important;
  z-index: auto !important;
  background: transparent !important;
  box-shadow: none !important;
  width: 104px !important; min-width: 104px !important; max-width: 104px !important;
  overflow: visible !important; text-overflow: clip !important; white-space: nowrap !important;
}
/* 本人行的高亮沿用行底色，不再单独给操作列上色 */
.rk-table tbody tr.hl td:nth-child(14) { background: transparent !important; }

/* ==================== 2026-10-24 第二十三轮：操作列彻底回归普通列 ====================
   用户最终要求：操作列与「资料」「领先维度」等**完全一致**地滑动 ——
   包括表头在内，全部随表格横向滚动，不做任何钉住。因此这里清掉第 14 列的 sticky。 */
.rk-table th:nth-child(14) {
  position: static !important;
  right: auto !important;
  left: auto !important;
  z-index: auto !important;
  box-shadow: none !important;
  background: transparent !important;
  width: 104px !important; min-width: 104px !important; max-width: 104px !important;
}
/* 表头恢复与其他列一致的白/浅灰底（此前为固定列专门上过 #F7F9FC） */
.rk-table thead th:nth-child(14) { background: #F7F9FC !important; }
/* 内容列保持与滚动列完全相同的滚动行为 */
.rk-table td:nth-child(14) {
  position: static !important;
  right: auto !important; left: auto !important; z-index: auto !important;
  background: transparent !important; box-shadow: none !important;
  width: 104px !important; min-width: 104px !important; max-width: 104px !important;
  white-space: nowrap !important; overflow: visible !important; text-overflow: clip !important;
  -webkit-overflow-scrolling: touch;
}

/* ==================== 2026-10-24 第二十四轮：排名表表头纵向固定 ====================
   要点：`position: sticky; top:0` 只在**最近的滚动容器**内生效。
   `.tbl-wrap` 原本只有 `overflow-x:auto`（另一个轴会被计算成 auto），但它不纵向滚动，
   所以表头粘不住页面滚动。方案：给榜单外层加 `.rk-wrap`，让它自己纵向滚动 + 定高，
   表头在这个容器内 sticky，横竖两个方向都稳（左侧 4 列已 sticky left，与 top 并存）。 */
.rk-wrap {
  max-height: max(260px, calc(100vh - 258px));
  overflow: auto !important;                 /* 横 + 纵都交给同一个容器 */
  -webkit-overflow-scrolling: touch;
  overscroll-behavior: contain;              /* 滚到底不带着整页一起弹 */
}
/* 表头整行：粘在容器顶部 */
.rk-wrap .rk-table thead th {
  position: sticky !important;
  top: 0 !important;
  z-index: 5 !important;
  background: #F7F9FC !important;
  /* 滚动时给表头一条下边界线，视觉上"压住"内容 */
  box-shadow: 0 1px 0 #E3EAF4 !important;
}
/* 左侧固定列的表头（左上角四格）：横纵双向粘住，层级最高 */
.rk-wrap .rk-table thead th:nth-child(-n+4) {
  z-index: 7 !important;
  background: #F7F9FC !important;
}
/* 表体左侧固定列保持原有层级（低于表头） */
.rk-wrap .rk-table tbody td:nth-child(-n+4) { z-index: 2 !important; }
/* 表头下边界与第一行的分隔更清晰 */
.rk-wrap .rk-table tbody tr:first-child td { border-top: 0; }

/* ==================== 2026-10-24 第二十五轮：规则卡折叠提示去黑框 ====================
   原来用 `.tag` 渲染成带边框胶囊（截图红圈），显得重、像按钮。
   改为：浅灰文字「公开透明」+ 蓝色「展开 / 收起」+ 细箭头，展开时箭头旋转 90°。 */
.rank-rules .rank-rules-sum {
  display: flex;
  align-items: center;
  gap: 6px;
  cursor: pointer;
  list-style: none;
}
.rank-rules .rank-rules-sum::-webkit-details-marker { display: none; }
.rk-rules-hint {
  margin-left: auto;
  display: inline-flex;
  align-items: center;
  gap: 3px;
  font-size: 12px;
  line-height: 1;
  color: #8A97AB;
  background: none !important;
  border: 0 !important;
  padding: 0 !important;
  box-shadow: none !important;
  white-space: nowrap;
}
.rk-rules-t { color: #A3AFC0; }
.rk-hint-open,
.rk-hint-close { color: #2F6FE4; font-weight: 600; }
.rk-hint-close { display: none; }
.rk-rules-caret {
  font-style: normal;
  color: #2F6FE4;
  font-size: 14px;
  line-height: 1;
  display: inline-block;
  transform: rotate(0deg);
  transition: transform .18s ease;
}
/* 展开态：文案切换 + 箭头转 90° */
.rank-rules[open] .rk-hint-open { display: none; }
.rank-rules[open] .rk-hint-close { display: inline; }
.rank-rules[open] .rk-rules-caret { transform: rotate(90deg); }

/* ==================== 2026-10-24 第二十六轮：曝光排行榜沿用同一套滑动逻辑 ====================
   与陪诊师库完全一致的三件事：
     ① 外层自身滚动（横 + 纵同一容器）→ ② 表头 sticky top 常驻 → ③ 关键列 sticky left 固定。
   本例固定「排名 / 陪诊师」两列（共 170px），其余 8 列随表格滑动。 */
.fw-wrap {
  max-height: max(260px, calc(100vh - 300px));
  overflow: auto !important;
  -webkit-overflow-scrolling: touch;
  overscroll-behavior: contain;
}
.fw-table {
  table-layout: fixed !important;
  width: 874px !important;
  min-width: 874px !important;
  border-collapse: separate !important;
  border-spacing: 0 !important;
}
.fw-table th, .fw-table td { box-sizing: border-box !important; }
/* 列宽写死，保证 sticky left 偏移精确 */
.fw-table th:nth-child(1), .fw-table td:nth-child(1) { width: 60px  !important; }
.fw-table th:nth-child(2), .fw-table td:nth-child(2) { width: 110px !important; }
.fw-table th:nth-child(n+3), .fw-table td:nth-child(n+3) { width: 88px !important; }

/* ② 表头整行纵向固定 */
.fw-table thead th {
  position: sticky !important;
  top: 0 !important;
  z-index: 5 !important;
  background: #F7F9FC !important;
  box-shadow: 0 1px 0 #E3EAF4 !important;
}
/* ③ 前两列横向固定（左上角两格横竖双向） */
.fw-table th:nth-child(-n+2), .fw-table td:nth-child(-n+2) {
  position: sticky !important;
  background: #fff !important;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.fw-table th:nth-child(1), .fw-table td:nth-child(1) { left: 0; z-index: 3; }
.fw-table th:nth-child(2), .fw-table td:nth-child(2) {
  left: 60px; z-index: 3;
  box-shadow: inset -1px 0 0 #E8EEF7, 6px 0 8px -6px rgba(18, 40, 77, .16);
}
.fw-table thead th:nth-child(-n+2) { z-index: 7 !important; background: #F7F9FC !important; }
.fw-table tbody td:nth-child(-n+2) { z-index: 3 !important; }
/* 其余列内容不溢出压列 */
.fw-table td:nth-child(n+3) { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* ==================== 2026-10-24 第二十七轮：修复纵向滚动（表头粘不住） ====================
   根因：`.rk-wrap { max-height: max(260px, calc(100vh - 258px)) }` —— `max()` 里再套 `calc()`
   属于较新的语法，**部分安卓 WebView / 华为浏览器解析失败会把整条声明丢弃** →
   容器没有 max-height → 高度等于内容 → 容器不产生纵向滚动 → `sticky top:0` 失去参照系 →
   表头随页面一起滚走（表现就是"上下滑动没修好"，而左右滑动正常，因为左右不依赖高度）。
   修复：改用**普通 calc + min-height**（兼容性最好），并补一档极矮屏的 fallback。 */
.rk-wrap {
  max-height: calc(100vh - 258px) !important;
  min-height: 260px;
  height: auto;
  overflow: auto !important;
  -webkit-overflow-scrolling: touch;
}
/* 矮屏（横屏 / 分屏）单独收一档，避免 calc 结果为负数 */
@media (max-height: 560px) {
  .rk-wrap { max-height: 300px !important; min-height: 180px; }
}
/* 曝光榜同样处理，保持两表一致 */
.fw-wrap {
  max-height: calc(100vh - 300px) !important;
  min-height: 260px;
  height: auto;
  overflow: auto !important;
  -webkit-overflow-scrolling: touch;
}
@media (max-height: 560px) {
  .fw-wrap { max-height: 300px !important; min-height: 180px; }
}
/* 让纵向滚动条可见（部分安卓默认隐藏，用户以为"不能上下滑"） */
.rk-wrap, .fw-wrap { scrollbar-width: thin; }
.rk-wrap::-webkit-scrollbar, .fw-wrap::-webkit-scrollbar { width: 6px; height: 6px; }
.rk-wrap::-webkit-scrollbar-thumb, .fw-wrap::-webkit-scrollbar-thumb {
  background: #C9D4E3; border-radius: 999px;
}
.rk-wrap::-webkit-scrollbar-track, .fw-wrap::-webkit-scrollbar-track { background: transparent; }

/* ==================== 2026-10-25 第二十八轮：服务工单卡紧凑化 ====================
   原布局：单卡内 6 个字段各占一整格（2 列），字段块内距大、字号大 → 18 单要滚很久。
   新方案：字段网格改 3 列（窄屏 2 列）、压缩内距与字号、标签与数值同行更紧凑，
   信息一个不少，但单卡高度约降 35%~40%，一屏可见条数接近翻倍。 */
.kv-grid.ord-kv {
  grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
  gap: 6px !important;
}
.kv-grid.ord-kv > .kv {
  padding: 6px 8px !important;
  border-radius: 8px !important;
  min-height: 0 !important;
}
.kv-grid.ord-kv > .kv > span {
  font-size: 10.5px !important;
  line-height: 1.3 !important;
  margin-bottom: 2px !important;
  color: #8A97AB !important;
}
.kv-grid.ord-kv > .kv > b {
  font-size: 12.5px !important;
  line-height: 1.35 !important;
  font-weight: 600 !important;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
/* 备注类长字段（占整行）保持可换行 */
.kv-grid.ord-kv > .kv.kv-wide > b { white-space: normal; }
/* 窄屏回落到 2 列，避免"套餐/完成度"这类值被截太狠 */
@media (max-width: 420px) {
  .kv-grid.ord-kv { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
}
/* 即时消息搜索按钮 */
.wx-search-btn {
  flex: 0 0 auto;
  margin-left: 6px;
  height: 32px;
  padding: 0 12px;
  border: 0;
  border-radius: 8px;
  background: #2F6FE4;
  color: #fff;
  font-size: 12.5px;
  font-weight: 600;
  cursor: pointer;
}
.wx-search-btn:active { opacity: .85; }
.wx-search { display: flex; align-items: center; }
.wx-search-inp { flex: 1 1 auto; min-width: 0; }

/* ==================== 2026-10-25 第二十九轮：工单卡头部 + 随访页重排 ====================
   ① 工单卡：状态标签 + 金额 合并到右上角（移动端卡片视图生效，桌面表格仍用原列）；
   ② 随访页：按钮区加间距可换行；生成规则改可折叠结构化列表（原来是一大段挤在一起）。 */

/* ① 工单卡头部 */
@media (max-width: 900px) {
  .tbl.cards .oc-top {
    display: flex !important;
    align-items: center;
    justify-content: flex-end;
    gap: 8px;
    border: 0 !important;
    padding: 0 0 8px !important;
    margin: 0 !important;
    background: transparent !important;
  }
  .tbl.cards .oc-top::before { content: none !important; display: none !important; }
  .tbl.cards .oc-dup { display: none !important; }
}
@media (min-width: 901px) { .tbl.cards .oc-top { display: none !important; } }
.oc-amt {
  font-size: 15px; font-weight: 800; color: #C0392B;
  letter-spacing: -.2px; line-height: 1;
}

/* ② 随访：按钮区 */
.fu-acts { display: flex; flex-wrap: wrap; gap: 8px; margin: 2px 0 10px; }
.fu-acts .btn { flex: 0 0 auto; }

/* ② 随访：规则折叠卡 */
.fu-rules { margin-bottom: 10px; }
.fu-rules-sum {
  display: flex; align-items: center; gap: 6px;
  padding: 10px 12px; cursor: pointer; list-style: none;
}
.fu-rules-sum::-webkit-details-marker { display: none; }
.fu-rules-sum b { font-size: 13px; color: #1B2433; }
.fu-rules-hint {
  margin-left: auto; color: #2F6FE4; font-size: 12px;
  display: inline-flex; align-items: center; gap: 3px;
}
.fu-rules-hint i { font-style: normal; display: inline-block; transition: transform .18s ease; }
.fu-rules[open] .fu-rules-hint i { transform: rotate(90deg); }
.fu-rules-bd { padding: 0 12px 12px !important; }
.fu-note { margin: 0 0 8px; font-size: 12.5px; color: #5B6B82; line-height: 1.6; }
.fu-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.fu-list li { display: flex; gap: 8px; align-items: flex-start; }
.fu-k { flex: 0 0 18px; color: #2F6FE4; font-weight: 700; font-size: 12.5px; line-height: 1.65; }
.fu-v { flex: 1 1 auto; min-width: 0; font-size: 12.5px; line-height: 1.65; color: #33415C; }
.fu-v b { color: #12408F; }

/* ==================== 2026-10-25 第三十轮：头像多彩色（修正 !important 覆盖） ====================
   为什么上一版没生效：样式表里 `.wx-av { background-image: … !important }` ——
   **!important 的优先级高于行内样式**，所以行内写的 background-image 被整条忽略，头像仍是统一蓝。
   解法：行内只设置 CSS 变量 `--av-bg`（自定义属性不受该 !important 影响），
   由这里用 var() 消费；没有变量时回退到品牌蓝渐变，保证默认样式不变。 */
.wx-av {
  background-image: var(--av-bg, linear-gradient(135deg, var(--c-brand-400, #4A90E2), var(--c-brand-600, #1F6FC8))) !important;
}
/* 工作记录页：操作栏（返回 + 新增） */
.wl-ops { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 10px; }
.wl-ops .btn { flex: 0 0 auto; }

/* ==================== 2026-10-25 第三十一轮：渠道管理简化（绑定人数优先） ==================== */
.bind-hero { border: 1.5px solid #D7E4F8; background: linear-gradient(180deg,#FBFCFF,#F3F8FF); }
.bind-total { display: flex; align-items: baseline; justify-content: center; gap: 6px; padding: 6px 0 2px; }
.bind-num { font-size: 44px; font-weight: 800; color: #12408F; line-height: 1; letter-spacing: -1px; }
.bind-unit { font-size: 12.5px; color: #6B7A90; }
.bind-split { display: flex; gap: 10px; margin-top: 14px; }
.bind-item {
  flex: 1 1 0; text-align: center; padding: 10px 8px;
  background: #fff; border: 1px solid #E7EDF6; border-radius: 10px;
}
.bind-item b { display: block; font-size: 20px; color: #1B2433; line-height: 1.1; }
.bind-item span { display: block; margin-top: 4px; font-size: 11.5px; color: #7A879B; }

/* 管理设置折叠区：原多个二维码/域名/渠道列表全部收进来 */
.mgmt-fold { margin-top: 12px; }
.mgmt-fold-sum {
  display: flex; align-items: center; gap: 8px;
  padding: 12px; cursor: pointer; list-style: none;
}
.mgmt-fold-sum::-webkit-details-marker { display: none; }
.mgmt-fold-sum b { font-size: 13px; color: #33415C; }
.mgmt-fold-bd { padding: 0 12px 12px; }
.mgmt-fold-bd > .card { box-shadow: none; border: 1px solid #EEF2F8; margin-bottom: 10px; }

/* ==================== 2026-10-25 第三十二轮：我的合作邀请 / 套餐对比 ====================
   红框问题根因：邀请行原来是一个 flex 行里塞 6 个元素（姓名/时间/状态/金额/备注/操作），
   备注被挤成几十像素宽 → 每个字单独换行，竖排成一列（截图红框）。
   改为「两行卡片行」：第一行主信息（姓名 + 状态 + 金额 + 右对齐时间），第二行说明，第三行操作。 */
.iv-row {
  display: flex; flex-direction: column; gap: 6px;
  padding: 12px 0; border-bottom: 1px solid #EEF2F8;
}
.iv-row:last-child { border-bottom: 0; padding-bottom: 0; }
.iv-main { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.iv-name { font-size: 13.5px; font-weight: 700; color: #1B2433; }
.iv-time { margin-left: auto; font-size: 11.5px; color: #93A1B5; white-space: nowrap; font-variant-numeric: tabular-nums; }
.iv-sub {
  font-size: 12.5px; line-height: 1.6; color: #5B6B82;
  background: #F7F9FC; border-radius: 8px; padding: 7px 10px;
  word-break: break-word;
}
.iv-acts { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; justify-content: flex-end; }

/* 套餐对比 */
.plan-cmp .pc-k { font-weight: 600; color: #33415C; white-space: nowrap; }
.plan-cmp th:first-child, .plan-cmp td:first-child { width: 108px; }
.plan-cmp td { font-size: 12.5px; }

/* ==================== 2026-10-25 第三十三轮：等级阶梯质感 / 说明块修复 / 邀请并入渠道 ==================== */

/* ① 修复红框：说明块文字溢出到圆角框外（原 .listinfo 无内距/无换行约束，字号行高与外框不匹配） */
.listinfo.hint-inner {
  display: block !important;
  height: auto !important;
  max-height: none !important;
  overflow: visible !important;
  padding: 10px 12px !important;
  background: #F2F6FC;
  border-radius: 10px;
  line-height: 1.75 !important;
  word-break: break-word;
  font-size: 12.5px !important;
  color: #5B6B82 !important;
}

/* ② 等级阶梯：逐级递进的色阶 + 金属光泽（未达成的层级降饱和并压暗，形成"点亮"节奏） */
.task-grid .card.lvl {
  position: relative;
  overflow: hidden;
  border: 0 !important;
  border-radius: 14px !important;
  color: #fff !important;
  background: linear-gradient(150deg, var(--t-a, #8FA3BF) 0%, var(--t-b, #5C7291) 100%) !important;
  box-shadow: 0 8px 18px -10px var(--t-b, #5C7291), inset 0 1px 0 rgba(255,255,255,.35) !important;
  transition: transform .18s ease, filter .18s ease;
}
/* 斜向高光：模拟金属反光 */
.task-grid .card.lvl::after {
  content: '';
  position: absolute;
  top: -60%; right: -30%;
  width: 90%; height: 200%;
  background: linear-gradient(115deg, rgba(255,255,255,.42) 0%, rgba(255,255,255,0) 58%);
  transform: rotate(12deg);
  pointer-events: none;
}
.task-grid .card.lvl b { color: #fff !important; text-shadow: 0 1px 2px rgba(0,0,0,.18); }
.task-grid .card.lvl .hint, .task-grid .card.lvl span, .task-grid .card.lvl small { color: rgba(255,255,255,.88) !important; }
/* 五级色阶：灰蓝 → 青绿 → 宝蓝 → 紫 → 金 */
.task-grid .card.lvl:nth-child(1) { --t-a: #A8B6C9; --t-b: #6B7F99; }
.task-grid .card.lvl:nth-child(2) { --t-a: #6FD3A8; --t-b: #2E9A72; }
.task-grid .card.lvl:nth-child(3) { --t-a: #6FA8F5; --t-b: #2F6FE4; }
.task-grid .card.lvl:nth-child(4) { --t-a: #B98CF0; --t-b: #7B4FD1; }
.task-grid .card.lvl:nth-child(5) { --t-a: #F6C566; --t-b: #D08A1E; }
/* 未达成：降饱和 + 收一点，达成后"点亮" */
.task-grid .card.lvl:not(.on) { filter: saturate(.35) brightness(.98); opacity: .9; }
.task-grid .card.lvl.on { filter: none; opacity: 1; }
.task-grid .card.lvl.on::after { background: linear-gradient(115deg, rgba(255,255,255,.55) 0%, rgba(255,255,255,0) 55%); }

/* ③ 合作邀请入口卡（已并入渠道管理） */
.invite-entry .ie-row { display: flex; align-items: center; gap: 12px; }
.invite-entry .ie-row > div { flex: 1 1 auto; min-width: 0; }
.invite-entry .ie-row b { font-size: 13.5px; color: #1B2433; }
.invite-entry .btn { flex: 0 0 auto; }

/* ==================== 2026-10-25 第三十四轮：勋章汇总卡 / 保险类型标签 ==================== */
/* 勋章：与「我的收益」同一套版式（汇总卡 + 渐变卡墙） */
.medal-sum { border: 1.5px solid #E4DCF7; background: linear-gradient(180deg,#FCFBFF,#F6F2FF); margin-bottom: 12px; }
.medal-sum .ms-top { display: flex; align-items: center; gap: 8px; }
.medal-sum .ms-top b { font-size: 14px; color: #2A2140; }
.medal-sum .ms-top .pill { margin-left: auto; }
.medal-sum .ms-bar {
  height: 8px; border-radius: 999px; background: #EDE7FA; overflow: hidden; margin: 10px 0 6px;
}
.medal-sum .ms-bar > i {
  display: block; height: 100%; border-radius: 999px;
  background: linear-gradient(90deg, #9B7BE0, #6F52B8);
  transition: width .4s ease;
}
.medal-sum .ms-ft { font-size: 12px; color: #7A6A99; }

/* 勋章卡：图标放大、名称与说明层级拉开（沿用 lvl 渐变） */
.task-grid .card.lvl .bd-icon { font-size: 26px; line-height: 1; margin-bottom: 6px; }
.task-grid .card.lvl b { font-size: 13px; display: block; margin-bottom: 4px; }
.task-grid .card.lvl .muted { font-size: 11.5px; line-height: 1.5; }
.task-grid .card.lvl small { display: block; margin-top: 6px; font-size: 11px; }

/* 保险：类型标签与卡内间距 */
.ins-tag { font-size: 10.5px !important; padding: 1px 6px !important; margin-left: 6px; vertical-align: 1px; }
.ins-card .tc-top { display: flex; align-items: center; flex-wrap: wrap; gap: 4px; }
.ins-thumb { font-size: 26px; }

/* ==================== 2026-10-25 第三十五轮：反馈页高级感 / 陪诊师库顶部 / 保险修正 ==================== */
/* 问题反馈：去掉密集边框，改为"分区卡 + 大留白"的简洁版式 */
.fb-page .card { border: 1px solid #EDF1F7 !important; box-shadow: 0 1px 2px rgba(18,40,77,.04) !important; }
.fb-page .card-hd h3 { font-size: 13px; letter-spacing: .2px; color: #33415C; }
.fb-page .card-bd { padding: 14px 14px 6px; }
.fb-page .kv-grid { gap: 10px !important; }
.fb-page .listinfo, .fb-page .hint { font-size: 12px !important; color: #7A879B !important; line-height: 1.7; }
.fb-page .tbl th { font-size: 11.5px; color: #93A1B5; font-weight: 600; background: transparent; border-bottom: 1px solid #EDF1F7; }
.fb-page .tbl td { font-size: 12.5px; padding: 11px 10px; }

/* 陪诊师库：排序方式以上部分（标题 / 入口 / 规则卡 / 筛选区）统一收紧与对齐 */
.rank-top-tight .ops { margin-bottom: 8px !important; gap: 8px !important; }
.rank-top-tight .rank-rules { margin-bottom: 10px; }
.rank-top-tight .rank-rules-sum { padding: 10px 12px !important; }
.rank-top-tight .rk-filter-card { margin-bottom: 10px; }
.rank-top-tight .rk-f-row { gap: 8px !important; }
.rank-top-tight .rk-sel { height: 38px !important; }

/* 保险卡：类型标签与图片块对齐修正 */
.ins-card .mall-thumb { align-self: flex-start; }
.ins-card .tc-top b { font-size: 13px; }
.ins-tag { white-space: nowrap; }

/* ==================== 2026-10-25 第三十六轮：保险险种徽标（确保肉眼可见） ==================== */
.ins-badge {
  display: inline-block; margin-left: 6px; padding: 2px 8px;
  font-size: 10.5px; font-weight: 700; line-height: 1.5;
  color: #1F6FC8; background: #EAF3FF; border: 1px solid #CFE3FA; border-radius: 999px;
  white-space: nowrap; vertical-align: 1px;
}

/* ==================== 2026-10-25 第三十七轮：个人中心「全部功能」重排 + 去重 ====================
   做法：不改模块数组，用 CSS `order` 对网格子项排序（网格容器支持 order，零风险、可回滚）。
   顺序依据：资料优先 → 安全其次 → 设置随后 → 其他最后。 */

/* ① 去重：隐藏与「渠道管理 / 客户需求码」重复的独立入口 */
.allfn-item[data-key="invite"],
.allfn-item[data-key="myqr"],
.allfn-item[data-key="share"],
.allfn-item[data-key="closeacct"] { display: none !important; }

/* ② 第 1 组｜资料优先 */
.allfn-item[data-key="profileauth"]   { order: 10; }
.allfn-item[data-key="mysub"]         { order: 11; }
.allfn-item[data-key="loginqr"]       { order: 12; }
.allfn-item[data-key="inviteqr"]      { order: 13; }

/* ③ 第 2 组｜安全其次 */
.allfn-item[data-key="profilesettings"]{ order: 20; }
.allfn-item[data-key="partners"]       { order: 21; }
.allfn-item[data-key="invites"]        { order: 22; }

/* ④ 第 3 组｜设置与消费 */
.allfn-item[data-key="insurance"]     { order: 30; }
.allfn-item[data-key="mall"]          { order: 31; }
.allfn-item[data-key="points"]        { order: 32; }
.allfn-item[data-key="income"]        { order: 33; }
.allfn-item[data-key="badges"]        { order: 34; }

/* ⑤ 第 4 组｜其他最后 */
.allfn-item[data-key="tasks"]         { order: 40; }
.allfn-item[data-key="followups"]     { order: 41; }
.allfn-item[data-key="clients"]       { order: 42; }
.allfn-item[data-key="worklogs"]      { order: 43; }
.allfn-item[data-key="guide"]         { order: 50; }
.allfn-item[data-key="terms"]         { order: 51; }
.allfn-item[data-key="feedback"]      { order: 52; }
/* 未显式指定的条目统一排在最后，避免插到核心组前面 */
.allfn-item { order: 60; }

/* ⑥ 分组标题（用伪元素在网格里做视觉分段） */
.allfn-grid::before,
.allfn-grid::after { display: none; }

/* 聚合板块：卡片列表行 */
.agg-list { padding: 4px 12px !important; }
.agg-row {
  display: flex; align-items: center; gap: 10px;
  padding: 14px 0; border-bottom: 1px solid #EEF2F8;
  text-decoration: none; color: inherit;
}
.agg-row:last-child { border-bottom: 0; }
.agg-ico { flex: 0 0 26px; font-size: 18px; text-align: center; }
.agg-main { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.agg-main b { font-size: 13.5px; color: #1B2433; font-weight: 600; }
.agg-main small { font-size: 11.5px; color: #93A1B5; line-height: 1.4; }
.agg-arrow { flex: 0 0 auto; color: #C2CDDE; font-size: 18px; }

/* ==================== 2026-10-25 第三十八轮：绑定明细搜索 / 陪诊师库顶部顺序 ==================== */
.bind-search { margin-bottom: 10px; }
.bind-search .card-bd { padding: 10px 12px !important; }
.bind-kw { width: 100%; height: 38px; border-radius: 10px; }
/* 陪诊师库：筛选区在前、规则说明在后，间距收紧 */
.rank-top-tight .rk-filter-card { margin-bottom: 12px !important; }
.rank-top-tight .rank-rules { margin-top: 2px; }

/* v477：推送设置「指定业务类型」两列 chip（静态兜底，不依赖 JS/内联） */
#psv-kinds{display:grid!important;grid-template-columns:1fr 1fr!important;gap:8px!important;padding:0!important}
#psv-kinds>label{display:flex!important;flex-direction:row!important;align-items:center!important;justify-content:flex-start!important;gap:8px!important;width:auto!important;min-width:0!important;height:42px!important;min-height:0!important;padding:0 11px!important;margin:0!important;box-sizing:border-box!important;border:1px solid #E4EBF6!important;border-radius:11px!important;background:#fff!important;font-size:12.5px!important;line-height:1.2!important;color:#27364E!important;white-space:nowrap!important;overflow:hidden!important;text-align:left!important}
#psv-kinds>label>span{overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important;min-width:0!important;font-size:12.5px!important}
#psv-kinds input[type=checkbox]{width:16px!important;height:16px!important;min-width:16px!important;margin:0!important;flex:0 0 auto!important}
@media (max-width:339px){#psv-kinds{grid-template-columns:1fr!important}}
