*{box-sizing:border-box;margin:0;padding:0}
body{background:#f5f6f8;color:#1f2329;font:14px/1.6 "Microsoft YaHei","PingFang SC",system-ui,sans-serif}
button,input,select,textarea{font-family:inherit;font-size:inherit}

/* 顶栏（勇哥 09-08 晚：深墨导航条，与白底内容区拉开主次——品牌白字、选中金底、未选中灰白、角标亮红） */
.topbar{position:sticky;top:0;z-index:50;display:flex;align-items:center;gap:18px;
  padding:11px 20px;background:linear-gradient(180deg,#1c2534,#151c29);border-bottom:3px solid #d9a94e;
  box-shadow:0 3px 14px rgba(9,14,24,.35)}
.brand{display:flex;align-items:center;gap:9px;white-space:nowrap}
.logo{background:linear-gradient(135deg,#d9a94e,#f0d090);color:#2a1d04;font-weight:800;
  padding:4px 11px;border-radius:7px;font-size:14px;letter-spacing:1px;box-shadow:0 1px 5px rgba(217,169,78,.55)}
.brand b{font-size:15.5px;color:#ffffff;letter-spacing:.5px}
.tabs{display:flex;gap:6px;flex:1}
.tab{background:transparent;border:1px solid transparent;color:#aab4c6;padding:8px 17px;border-radius:9px;
  cursor:pointer;font-size:14px;font-weight:600}
.tab:hover{background:rgba(255,255,255,.09);color:#ffffff;border-color:transparent}
.tab.active{background:linear-gradient(135deg,#e8bd5e,#f3d491);color:#241a03;font-weight:800;
  border-color:#c99b3f;box-shadow:0 2px 10px rgba(232,189,94,.45)}
.tab.active:hover{background:linear-gradient(135deg,#e8bd5e,#f3d491);color:#241a03}
.badge{background:#ef4444;color:#fff;border-radius:10px;padding:1px 7px;font-size:11px;font-weight:700;
  font-style:normal;margin-left:4px;box-shadow:0 1px 4px rgba(239,68,68,.55)}
.tab.active .badge{background:#dc2626;color:#fff;box-shadow:0 0 0 2px rgba(255,255,255,.85)}
.badge:empty{display:none}
.who{margin-left:auto;display:flex;align-items:center;gap:6px;color:#c3ccd9;font-size:13px}
.who select{background:#243044;color:#e8edf5;border:1px solid #3a4a63;border-radius:6px;padding:5px 8px}

/* 视图 */
.view{display:none;padding:18px 20px 60px}
.view.active{display:block}

/* KPI */
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(168px,1fr));gap:12px;margin-bottom:16px}
.kpi{background:#ffffff;border:1px solid #e3e6eb;border-radius:12px;padding:14px 16px}
.kpi .k{color:#646a73;font-size:12px}
.kpi .v{font-size:24px;font-weight:700;margin-top:4px;letter-spacing:-.5px}
.kpi .s{color:#8f959e;font-size:11px;margin-top:2px}
.kpi.gold .v{color:#b07b1a}.kpi.red .v{color:#d93025}.kpi.green .v{color:#16a34a}.kpi.blue .v{color:#1f6feb}

/* 卡片 */
.card{background:#ffffff;border:1px solid #e3e6eb;border-radius:12px;padding:15px 17px;margin-bottom:14px}
.card h3{font-size:14px;margin-bottom:11px;color:#1f2329;display:flex;align-items:baseline;gap:8px}
.card h3 small{color:#8f959e;font-size:11px;font-weight:400}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
@media(max-width:1000px){.grid2{grid-template-columns:1fr}}
.sec{margin:22px 0 10px;font-size:15px;color:#1f2329}

/* 时间筛选栏 */
.filterbar{display:flex;align-items:center;gap:10px;background:#ffffff;border:1px solid #e3e6eb;
  border-radius:12px;padding:11px 15px;margin-bottom:18px;flex-wrap:wrap}
.filterbar .flabel{color:#646a73;font-size:13px}
.filterbar .fsel{background:#fff;color:#1f2329;border:1px solid #d0d5dd;border-radius:8px;padding:7px 12px}
.filterbar .fnow{color:#b07b1a;font-size:12px;margin-left:6px}

/* 渠道条 */
.ch{display:flex;align-items:center;gap:10px;padding:6px 0;border-bottom:1px dashed #e8eaee}
.ch .nm{width:88px;color:#1f2329;font-size:13px;flex:none}
.ch .bar{flex:1;height:16px;background:#eef0f3;border-radius:4px;overflow:hidden}
.ch .bar i{display:block;height:100%;background:linear-gradient(90deg,#d9a94e,#f0d090)}
.ch .amt{width:96px;text-align:right;color:#b07b1a;font-size:12px;flex:none}
.ch .rt{width:74px;text-align:right;color:#8f959e;font-size:11px;flex:none}

/* 漏斗 */
.fn{display:flex;align-items:center;gap:9px;padding:5px 0}
.fn .k{width:110px;color:#1f2329;font-size:13px}
.fn .bar{flex:1;height:14px;background:#eef0f3;border-radius:4px;overflow:hidden}
.fn .bar i{display:block;height:100%;background:linear-gradient(90deg,#1f6feb,#6cb6ff)}
.fn .v{width:52px;text-align:right;color:#8f959e;font-size:12px}
.fn .cv{width:54px;text-align:right;color:#16a34a;font-size:12px;flex:none}
.fn.lost .k{color:#d93025}.fn.lost .v{color:#d93025}
.dq{margin-top:12px;padding-top:11px;border-top:1px solid #e3e6eb;color:#7a6a45;font-size:12px;line-height:1.9}
.dq b{color:#9a6b0f}

/* 提醒 */
.alertwrap{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:14px}
.ahead{display:flex;align-items:center;gap:8px;margin-bottom:9px;font-weight:600;font-size:13px}
.ahead .n{background:#eef0f3;color:#4b5563;border-radius:10px;padding:1px 8px;font-size:11px;font-weight:500}
.arow{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:7px;cursor:pointer;font-size:13px}
.arow:hover{background:#f5f8ff}
.arow .d{color:#b07b1a;font-size:12px;width:52px;flex:none}
.arow .nm{color:#1f2329;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.arow .ow{color:#d93025;font-size:12px;flex:none}
.arow .gp{color:#8f959e;font-size:11px;flex:none}
.empty{color:#8f959e;font-size:12px;padding:8px}

/* 表格 */
.toolbar{display:flex;gap:9px;align-items:center;margin-bottom:12px;flex-wrap:wrap}
.search{background:#fff;border:1px solid #d0d5dd;color:#1f2329;border-radius:8px;padding:8px 12px;min-width:260px;flex:1;max-width:380px}
.toolbar .search{flex:0 0 260px;max-width:260px}   /* 勇哥 09-08：工具栏搜索框定宽，间距节奏与下拉一致（弹窗内的 .search 不受影响） */
.toolbar select{background:#fff;color:#1f2329;border:1px solid #d0d5dd;border-radius:8px;padding:8px 10px}
button{background:#ffffff;color:#1f2329;border:1px solid #d0d5dd;border-radius:8px;padding:8px 14px;cursor:pointer}
button:hover{background:#f0f2f5}
button.primary{background:linear-gradient(135deg,#d9a94e,#e8c477);color:#3b2a05;border:0;font-weight:600}
button.primary:hover{filter:brightness(1.05)}
button.mini{padding:4px 10px;font-size:12px}
button.danger{background:#fdeceb;color:#d93025;border-color:#f5c6c0}
button.danger:hover{background:#fadcd9}
.count{color:#8f959e;font-size:12px}
/* 客资「全部 N 条」可点入口（勇哥 09-11）：链接色，一眼看出能点 */
.arch-all{color:#1f6feb;cursor:pointer}
.arch-all:hover{text-decoration:underline}
/* 列表加载失败横幅（勇哥 09-11）：红色警示，留在页面上不自动消失；按钮复用 .mini */
.loadwarn{color:#d93025;font-size:12px}
.loadwarn button{margin-left:6px}
.tablewrap{overflow:auto;border:1px solid #c9cfd8;border-radius:10px;max-height:70vh;box-shadow:0 1px 4px rgba(0,0,0,.06)}
table.tbl{width:100%;border-collapse:collapse;font-size:13px}
table.tbl th{position:sticky;top:0;background:#e9edf3;color:#111;font-weight:700;
  text-align:left;padding:9px 10px;border-bottom:2px solid #c9cfd8;white-space:nowrap;z-index:2}
table.tbl td{padding:8px 10px;border-bottom:1px solid #d8dce2;color:#000;white-space:nowrap;max-width:230px;overflow:hidden;text-overflow:ellipsis}
table.tbl tr{cursor:pointer}
table.tbl tbody tr:hover{background:#eef4ff}
table.tbl td.num,table.tbl th.num{text-align:right;font-variant-numeric:tabular-nums}
table.tbl td.num{font-weight:600;color:#111}
/* 勇哥 09-08 晚：订单列宽按比例定死（colgroup），多余空隙摊到每一列，不再全堆在酒店列后面 */
#prjTbl{table-layout:fixed}
#prjTbl th{overflow:hidden;text-overflow:ellipsis}
/* 勇哥 09-12：客资(客户资料)列表表头字号加大、加粗、深金底线，更醒目 */
#leadTbl th{font-size:14px;font-weight:800;color:#1f2329;background:#eef1f6;border-bottom:2px solid #9a6b0f;letter-spacing:.3px}
#prjTbl td{max-width:none}
table.tbl td.owe{color:#d93025;font-weight:600}
table.tbl td.ok{color:#16a34a}
/* 陈年沉淀客资：淡显，不抢真该跟进的行的注意力 */
table.tbl tr.stale-row{opacity:.5}
table.tbl tr.stale-row:hover{opacity:1}
/* 订单列表表尾合计行（合同/已收/欠款），随筛选联动 */
table.tbl tfoot tr.sumrow{background:#fdf6e7;cursor:default;font-weight:700;color:#7a5a0d}
table.tbl tfoot tr.sumrow td{border-top:2px solid #d9a94e;padding:9px 8px;font-size:13px}
table.tbl tfoot tr.sumrow td.num{font-variant-numeric:tabular-nums}
table.tbl tfoot tr.sumrow td.owe{color:#d93025}
table.tbl tfoot tr.sumrow td.ok{color:#16a34a}
/* 工具栏合计条 */
.sums{font-size:12px;color:#646a73;white-space:nowrap}
.sums b{color:#1f2329;font-weight:700;font-variant-numeric:tabular-nums;margin-left:2px}
.sums b.ok{color:#16a34a}
.sums b.owe{color:#d93025}
/* 查不到数据时的说明条（告诉勇哥是筛选造成的，不是数据丢了） */
.empty-hint{margin:-4px 0 10px;padding:9px 12px;border-radius:8px;font-size:13px;
  background:#fff8e6;border:1px solid #eadfb0;color:#7a5a0d;
  display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.empty-hint button{padding:5px 10px}
.pager{display:flex;gap:8px;align-items:center;justify-content:center;margin-top:12px;color:#646a73;font-size:13px}

/* 抽屉 */
.mask{position:fixed;inset:0;background:rgba(0,0,0,.4);display:none;z-index:90}
.mask.on{display:block}
.drawer{position:fixed;top:0;right:0;bottom:0;width:min(700px,94vw);background:#ffffff;
  border-left:1px solid #e3e6eb;z-index:100;transform:translateX(102%);transition:transform .22s;display:flex;flex-direction:column}
.drawer.on{transform:none}
.drawer-head{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid #e3e6eb}
.drawer-head b{font-size:16px}
.drawer-body{flex:1;overflow:auto;padding:16px 18px 60px}
/* ===== 抽屉排版统一规范（勇哥 09-09：客户资料/合同收款再紧凑，整体一致）
   组间距 12 / 组标题下 6 / 行左右内边距 8 / 行上下内边距 6 / 网格间距 6×12
   字段标签一律 11px 放在框上方；输入框内边距一律 7px 9px，字号 13px ===== */
.grp{margin-bottom:12px}
.grp h4{font-size:12px;color:#9a6b0f;letter-spacing:1px;margin-bottom:6px;padding-bottom:4px;border-bottom:1px solid #e3e6eb}
.fld{display:flex;align-items:center;gap:10px;padding:4px 0}
.fld label{width:104px;color:#646a73;font-size:12px;flex:none;text-align:right}
.fld input,.fld select,.fld textarea{flex:1;background:#ffffff;border:1px solid #d0d5dd;color:#1f2329;
  border-radius:6px;padding:7px 9px;font-size:13px;min-width:0}
.fld textarea{resize:vertical;min-height:56px;line-height:1.6}
.fld input:focus,.fld select:focus,.fld textarea:focus{outline:0;border-color:#d9a94e;background:#fffdf5}
.fld input.dirty{border-color:#d9a94e;background:#f2fbf5}
.fld .saved{color:#16a34a;font-size:11px;width:34px;flex:none}
.fld.cost{background:rgba(224,87,77,.05);border-radius:6px;padding:4px 6px;margin:0 -6px}
/* 抽屉字段网格：一行 3 个，紧凑排版（勇哥 09-09 定稿；标签挪到输入框上方） */
.fgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:6px 12px;align-items:start}
.fgrid .fld{flex-direction:column;align-items:stretch;gap:3px;padding:0;position:relative}
.fgrid .fld label{width:auto;text-align:left;font-size:11px;flex:none;line-height:1.2}
.fgrid .fld.wide{grid-column:1/-1}
.fgrid.f4{grid-template-columns:repeat(4,1fr)}
.fgrid .fld .saved{position:absolute;right:0;top:0;width:auto;line-height:1.2}
.fgrid .fld input,.fgrid .fld select,.fgrid .fld textarea{width:100%}
/* 供应链与成本：整块一个卡片，所有行共用同一套列模板 → 列对齐、间距一致
   列：角色 56 | 人选 1fr | 报价/金额 ≥120px | 已付 ≥90px | 未付 ≥90px | 备注 1.05fr
   （勇哥 09-08 加：报价后面接「已付(绿)/未付(红)」两列，可查供应商未付总成本） */
.roleblk{border:1px solid #d0d5dd;border-radius:8px;overflow:hidden;margin-top:8px}
/* 勇哥 09-11：已付/报价 要能显示 5-6 位数。原来金额列 minmax(90px,.8fr) 太窄，
   输入框只剩 35px 文本宽（≈4 位数）→「12000」被裁。现把宽度从富余的「人选/备注」列匀给金额列。 */
.rbrow{display:grid;grid-template-columns:56px minmax(104px,1fr) minmax(104px,1fr) minmax(112px,1.1fr) minmax(100px,1fr) minmax(112px,1.1fr);
  gap:10px;padding:8px 10px;align-items:center;border-top:1px solid #eef0f3}
.rbrow>*{min-width:0}
.rbrole{font-weight:700;color:#8a6410;font-size:13px}
.rbrow .fld.rp{grid-column:2}
.rbrow .fld.rc{grid-column:3}
.rbrow .fld.rpay{grid-column:4}
.rbrow .fld.runpaid{grid-column:5}
.rbrow .fld.rn{grid-column:6}
.rbrow.nocost{grid-template-columns:56px minmax(0,1fr) minmax(0,1.25fr)}  /* 员工看不到成本：无金额列 */
.rbrow.nocost .fld.rp{grid-column:2}
.rbrow.nocost .fld.rn{grid-column:3}
.rbsub{padding:8px 10px;font-size:11px;color:#646a73;background:#fafbfc;font-weight:600;border-top:1px solid #eef0f3;letter-spacing:1px}
.rbrow .fld{margin:0;display:flex;flex-direction:row;align-items:center;gap:6px;min-width:0;padding:0}
/* 行内标签：必须覆盖全局 .fld label 的 width:104px（否则金额框被压到 105px 显示不全） */
.rbrow .fld label{width:auto;flex:none;font-size:11px;color:#646a73;margin:0;white-space:nowrap;
  min-width:27px;text-align:right}
.rbrow .fld input,.rbrow .fld select,.rbrow .fld textarea{width:100%}
/* 报价/金额：数字等宽 + 去掉右侧上下箭头（省出约 16px 让数字显示完整） */
.rbrow .fld.rc input{font-variant-numeric:tabular-nums;letter-spacing:.2px}
.rbrow .fld.rc input::-webkit-outer-spin-button,
.rbrow .fld.rc input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.rbrow .fld.rc input[type=number]{-moz-appearance:textfield}
/* 已付(绿)/未付(红)：勇哥 09-08 要求，一眼看出供应商欠款 */
.rbrow .fld.rpay input.pay-paid{color:#16a34a;font-variant-numeric:tabular-nums;font-weight:600}
.rbrow .fld.rpay input.pay-paid::-webkit-outer-spin-button,
.rbrow .fld.rpay input.pay-paid::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.rbrow .fld.rpay input.pay-paid[type=number]{-moz-appearance:textfield}
.pay-unpaid{color:#d93025;font-weight:600;font-variant-numeric:tabular-nums}
/* 合计与利润：整行四等分，标签在框上方，与其它行同一内边距 */
.rbtotal{display:grid;grid-template-columns:repeat(3,1fr);gap:8px 10px;padding:8px 10px;
  border-top:1px solid #eef0f3;background:#fafbfc;align-items:end}
.rbtotal .fld{flex-direction:column;align-items:stretch;gap:3px;padding:0;min-width:0}
.rbtotal .fld label{width:auto;text-align:left;font-size:11px;min-width:0}
/* 内部人员（统筹 / 销售）：整行两等分 */
.staffrow{display:grid;grid-template-columns:repeat(2,1fr);gap:8px 10px;padding:8px 10px;
  border-top:1px solid #eef0f3;align-items:end}
.staffrow .fld{flex-direction:column;align-items:stretch;gap:3px;padding:0;min-width:0}
.staffrow .fld label{width:auto;text-align:left;font-size:11px}
/* 合同与收款：三笔收款行（角色名 | 金额 | 状态 | 到账日期）
   标签放框上方 → 框不用撑宽也能显示全「已付」「2026/09/06」，整行四列对齐更紧凑 */
.payrow{display:grid;grid-template-columns:72px 140px 120px 140px;gap:6px 12px;
  align-items:end;padding:6px 8px;border-top:1px solid #eef0f3}
.payrow .pl{font-size:12px;color:#8a6410;font-weight:700;padding-bottom:4px;white-space:nowrap}
.payrow .fld{flex-direction:column;align-items:stretch;gap:3px;padding:0;position:relative}
.payrow .fld label{width:auto;font-size:11px;color:#646a73;text-align:left;line-height:1.2}
.payrow .fld input,.payrow .fld select{width:100%;padding:7px 9px}
.payrow .fld .saved{position:absolute;right:0;top:0;width:auto}
.rbrow .fld.computed label{color:#8a6410}
.rbnote{font-size:11px;color:#7a6a45;padding:6px 8px;background:#fbf7ec;
  border:1px solid #eadfb0;border-top:none;border-radius:0 0 8px 8px;line-height:1.5}
/* ===== 新增项目明细（合同与收款）：可多次新增，每项含名称/金额/备注 ===== */
.extlist{border:1px solid #e3e6eb;border-radius:8px;padding:8px 10px;margin:6px 0 2px;background:#fafbfc}
.exthead{font-size:12px;color:#9a6b0f;font-weight:700;margin-bottom:6px;display:flex;align-items:baseline;gap:6px}
.exthead small{font-weight:400;color:#8f959e;font-size:11px}
.extip{color:#8f959e;font-size:12px;padding:2px 0 4px}
.extrow{display:flex;gap:6px;margin-bottom:6px;align-items:center}
.extrow .ex-name{flex:1 1 40%;min-width:0;background:#fff;border:1px solid #d0d5dd;border-radius:6px;padding:7px 9px;font-size:13px}
.extrow .ex-amt{flex:0 0 96px;min-width:0;background:#fff;border:1px solid #d0d5dd;border-radius:6px;padding:7px 9px;font-size:13px}
.extrow .ex-status{flex:0 0 84px;min-width:0;background:#fff;border:1px solid #d0d5dd;border-radius:6px;padding:7px 6px;font-size:13px}
.extrow .ex-recvamt{flex:0 0 96px;min-width:0;background:#fff;border:1px solid #16a34a;border-radius:6px;padding:7px 9px;font-size:13px;color:#16a34a}
.extrow .ex-date{flex:0 0 118px;min-width:0;background:#fff;border:1px solid #d0d5dd;border-radius:6px;padding:7px 9px;font-size:13px}
.extrow .ex-note{flex:1 1 50%;min-width:0;background:#fff;border:1px solid #d0d5dd;border-radius:6px;padding:7px 9px;font-size:13px}
.ext-del{flex:0 0 auto;width:30px;height:30px;border:1px solid #e3e6eb;background:#fff;border-radius:6px;color:#d93025;cursor:pointer;font-size:13px;line-height:1}
.ext-del:hover{background:#fdeceb}
.ext-add{margin-top:2px}
.extotal{margin-top:6px;padding-top:6px;border-top:1px dashed #e3e6eb;font-size:13px;color:#646a73}
.extotal b{color:#1f2329;font-size:15px}
/* ===== 婚礼当天流程表：新人信息头 + 时间轴 + 导出卡片 ===== */
.tlcard{border:1px solid #d0d5dd;border-radius:10px;overflow:hidden;margin-top:10px}
.tlhead2{padding:12px 14px;background:linear-gradient(180deg,#f3f6fb,#eef2f8);border-bottom:1px solid #d0d5dd}
.tlnames{font-size:17px;font-weight:700;color:#8a6410;letter-spacing:.5px}
.tlnames i{font-style:normal;color:#b08a4a;margin:0 4px;font-weight:400}
.tlmeta{font-size:12px;color:#646a73;margin-top:4px}
.tlsum{font-size:12px;color:#9a6b0f;margin:0;padding:7px 14px;background:#fdf6e7}
.tlbar{display:flex;gap:8px;align-items:center;padding:8px 12px;flex-wrap:wrap;border-bottom:1px solid #e3e6eb}
/* 时间表保存状态（勇哥 09-08：时间老变，得看得见存没存） */
.tlsaved{font-size:11px;color:#16a34a;min-width:64px}
.tlsaved.unsaved{color:#d97706;font-weight:600}
.tlsaved.saving{color:#646a73}
.tlsaved.failed{color:#d93025;font-weight:600}
/* 单表全宽：人物/时间/具体内容/所需物品/随行人员 + 删除（参考勇哥 Excel 时间表） */
.tltable{width:100%;border:1px solid #e3e6eb;border-radius:9px;overflow:hidden;background:#fff;margin:0 0 10px;overflow-x:auto}
.tlthead,.tlrow{display:grid;grid-template-columns:120px 78px minmax(180px,2.2fr) 230px 160px 30px;
  gap:8px;align-items:center;min-width:700px;padding:7px 12px}
.tlthead{background:#eef2f8;font-size:12px;font-weight:700;color:#5a6b7b;border-bottom:1px solid #d0d5dd}
.tlthead span:last-child{text-align:center}
.tlrow{border-top:1px solid #eef0f3}
.tlrow input{background:#fff;border:1px solid #d0d5dd;border-radius:5px;padding:6px 8px;font-size:13px;width:100%;min-width:0;color:#1f2329}
.tlrow input:focus{outline:none;border-color:#d9a94e}
.tlrow .tt{text-align:center;font-weight:700;color:#8a6410;background:#f2f4f7}
.tlrow .tp{font-weight:600}
.tlx{background:none;border:none;color:#98a1ab;cursor:pointer;font-size:14px;padding:0;line-height:1}
.tlx:hover{color:#d93025}
.tl0{background:rgba(31,111,235,.05)}   /* 新郎 蓝 */
.tl1{background:rgba(224,87,122,.05)}   /* 新娘 粉 */
.tl2{background:rgba(224,160,74,.06)}   /* 其他 橙 */
.tlempty{padding:14px 10px;font-size:12px;color:#8f959e;text-align:center}
.tlempty2{padding:18px 10px;font-size:12px;color:#8f959e;text-align:center}
/* 卡片预览弹窗 */
.modal{display:none}
.modal.on{display:block}
/* 婚礼流程卡片弹窗是唯一 .mbox 结构，需 flex 居中其 .mbox；其余 .modal-head/.modal-body 弹窗用 block 竖向铺满 */
#tlCardModal.on{display:flex;align-items:center;justify-content:center}
.modal .mbox{background:#ffffff;border:1px solid #e3e6eb;border-radius:12px;max-width:520px;width:100%;
  max-height:92vh;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 20px 50px rgba(0,0,0,.18)}
.modal .mhead{padding:11px 14px;font-weight:700;color:#8a6410;border-bottom:1px solid #e3e6eb;
  display:flex;justify-content:space-between;align-items:center}
.modal .mclose{background:none;border:none;color:#646a73;font-size:16px;cursor:pointer}
.modal .mbody{overflow:auto;padding:12px 14px;text-align:center}
.modal .mbody img{width:100%;border-radius:8px;border:1px solid #e3e6eb;display:block}
.modal .mtip{font-size:12px;color:#646a73;margin-top:10px;line-height:1.6}
.modal .mfoot{padding:10px 14px;border-top:1px solid #e3e6eb;display:flex;gap:8px;justify-content:flex-end}
.modal .mfoot .primary{background:#d9a94e;color:#3b2a05;font-weight:700;text-decoration:none;
  border-radius:6px;padding:7px 13px;line-height:1.4}
/* 统筹 / 销售：样式已在上面 .staffrow 统一（整行两等分，标签在框上方） */
/* 订单「关联客资」 */
.leadlink{display:flex;gap:10px;align-items:center;margin-bottom:6px;padding:6px 10px;background:#f7f8fa;border:1px solid #d0d5dd;border-radius:8px}
.leadlink label{flex:0 0 auto;font-weight:700;color:#8a6410;font-size:13px}
.leadlink select{flex:1 1 0;min-width:0;padding:7px 9px;border:1px solid #d0d5dd;border-radius:6px;background:#ffffff;color:#1f2329;font-size:13px}
.leadinfo{font-size:13px;color:#1f2329;padding:8px 10px;background:#f7f8fa;border:1px solid #d0d5dd;border-radius:8px;margin-bottom:8px;line-height:1.7}
.leadinfo b{color:#8a6410}
.leadinfo.sug{border-color:#bcd3f5;background:#f3f8ff}
.leadinfo .mini{float:right}
/* 供应商库管理弹窗 */
.vmadd{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px;padding-bottom:12px;border-bottom:1px solid #e3e6eb}
.vmadd select,.vmadd input{padding:6px 8px;border:1px solid #d0d5dd;border-radius:6px;background:#ffffff;color:#1f2329;font-size:13px}
.vmadd input{flex:1 1 90px;min-width:70px}
.vmlist{display:flex;flex-direction:column;gap:4px;max-height:54vh;overflow:auto}
.vmrole{font-size:12px;color:#8a6410;font-weight:700;margin:8px 0 2px}
.vmrow{display:flex;gap:6px;align-items:center}
.vmrow .vmn{flex:0 0 92px;font-size:13px;color:#1f2329;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vmrow input{padding:5px 7px;border:1px solid #d0d5dd;border-radius:6px;background:#ffffff;color:#1f2329;font-size:12px}
.vmrow .vmc{flex:0 0 84px}
.vmrow .vmct{flex:1 1 90px;min-width:64px}
.vmrow .vmnt{flex:1 1 90px;min-width:64px}
.fld.computed input[readonly]{background:#f7f8fa;border-style:dashed;color:#646a73}
.hint-box{margin:0 0 16px;padding:9px 12px;border-radius:8px;background:#fdf6e7;
  border:1px solid #eadfb0;color:#7a5a0d;font-size:13px;line-height:1.6}

/* 跟进 */
.fu{background:#f7f8fa;border:1px solid #e3e6eb;border-radius:8px;padding:8px 10px;margin-bottom:8px}
.fu .m{display:flex;gap:9px;color:#8f959e;font-size:11px;margin-bottom:4px}
.fu .c{color:#1f2329;font-size:13px;line-height:1.7;white-space:pre-wrap}
.fuadd{display:flex;gap:8px;margin-top:8px;flex-wrap:wrap}
.fuadd input[type=date]{background:#fff;border:1px solid #d0d5dd;color:#1f2329;border-radius:6px;padding:7px 9px;font-size:13px}
.fuadd textarea{flex:1;min-width:200px;background:#fff;border:1px solid #d0d5dd;color:#1f2329;border-radius:6px;padding:7px 9px;font-size:13px;min-height:44px}

/* toast（深底白字，两种主题下都醒目） */
.toast{position:fixed;left:50%;bottom:38px;transform:translateX(-50%) translateY(20px);
  background:#2b2f36;border:1px solid #444a54;color:#f5f6f8;padding:10px 20px;border-radius:9px;
  opacity:0;pointer-events:none;transition:.22s;z-index:200;font-size:13px}
.toast.on{opacity:1;transform:translateX(-50%)}
.toast.err{background:#b3261e;border-color:#8c1d18;color:#ffe3e0}

.hint{color:#8f959e;font-size:12px;padding:8px 0}
.tag{display:inline-block;background:#f0f2f5;color:#4b5563;border-radius:5px;padding:1px 7px;font-size:11px;margin-right:5px}
.tag.risk{background:#fff1e6;color:#e8833a;border:1px solid #f3c9a3}

/* ============ 登录遮罩 ============ */
.login-overlay{position:fixed;inset:0;z-index:200;display:flex;align-items:center;justify-content:center;
  background:radial-gradient(circle at 50% 30%,#ffffff,#e6e9ef)}
/* 本地存有登录凭据 → 刷新时直接放行，登录框一帧都不闪。
   真正过期时前端会摘掉 html.has-token，登录框正常弹出。 */
html.has-token #loginOverlay{display:none !important}
.login-card{width:340px;max-width:90vw;background:#ffffff;border:1px solid #e3e6eb;border-radius:16px;
  padding:30px 26px;text-align:center;box-shadow:0 20px 60px rgba(0,0,0,.12)}
.login-card h2{font-size:19px;color:#1f2329;margin-bottom:6px}
.login-sub{color:#8f959e;font-size:12px;margin-bottom:20px}
.login-logo{width:54px;height:54px;margin:0 auto 14px;border-radius:14px;display:flex;align-items:center;
  justify-content:center;font-weight:800;font-size:20px;letter-spacing:1px;
  background:linear-gradient(135deg,#e0b25c,#f0d090);color:#3b2a05}
.login-card input{width:100%;padding:11px 13px;margin-bottom:11px;border-radius:9px;border:1px solid #d0d5dd;
  background:#ffffff;color:#1f2329;font-size:14px;outline:none}
.login-card input:focus{border-color:#d9a94e}
.login-card .primary{width:100%;padding:11px;border:0;border-radius:9px;cursor:pointer;font-weight:600;font-size:14px;
  background:linear-gradient(135deg,#e0b25c,#f0d090);color:#3b2a05;margin-top:4px}
.login-card .primary:hover{filter:brightness(1.04)}
.login-err{color:#d93025;font-size:12px;min-height:16px;margin-top:8px}

/* 顶栏用户区（深底配套） */
.u-avatar{width:26px;height:26px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,#e0b25c,#f0d090);color:#3b2a05;font-weight:700;font-size:13px}
.role-tag{background:rgba(255,255,255,.14);color:#e3e9f2;border-radius:5px;padding:1px 7px;font-size:11px;margin-left:3px}
.who .mini{background:#ffffff;color:#1f2329;border:1px solid #ffffff;border-radius:6px;padding:5px 10px;cursor:pointer;
  font-weight:600;box-shadow:0 1px 5px rgba(0,0,0,.35)}
.who .mini:hover{background:#f0f2f5}

/* 批量导入结果弹窗 */
.modal{position:fixed;z-index:300;left:50%;top:50%;transform:translate(-50%,-50%);
  width:min(720px,92vw);max-height:84vh;overflow:auto;background:#ffffff;border:1px solid #d0d5dd;
  border-radius:14px;box-shadow:0 24px 70px rgba(0,0,0,.22);padding:18px 22px}
.modal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;
  border-bottom:1px solid #e3e6eb;padding-bottom:10px}
.modal-head b{font-size:16px;color:#8a6410}
.modal-body{font-size:13px}
.modal-body .ok{color:#16a34a;font-weight:600;margin:6px 0}
.modal-body .bad{color:#d93025;font-weight:600;margin:6px 0}
.modal-body table.tbl{width:100%;border-collapse:collapse;margin-top:8px}
.modal-body table.tbl th,.modal-body table.tbl td{border:1px solid #e3e6eb;padding:6px 8px;text-align:left}
.modal-body table.tbl th{background:#f7f8fa;color:#4b5563;position:sticky;top:0}
.modal-body .errtip{color:#646a73;margin:8px 0 4px}
.formgrid{display:grid;grid-template-columns:96px 1fr;gap:8px 10px;align-items:center;margin-bottom:10px}
.formgrid label{color:#646a73;font-size:13px;text-align:right}
.formgrid input,.formgrid select{width:100%;padding:6px 8px;background:#ffffff;color:#1f2329;border:1px solid #d0d5dd;border-radius:6px;font-size:13px}
.modal-foot{display:flex;justify-content:flex-end;gap:8px;margin-top:14px;padding-top:12px;border-top:1px solid #e3e6eb}

/* 可排序表头 */
.tbl th.sortable{cursor:pointer;user-select:none;white-space:nowrap}
.tbl th.sortable:hover{color:#8a6410;background:#f0f2f5}
.tbl th.sortable.on{color:#b07b1a}

/* 客资转订单弹窗 */
.conv-tip{color:#646a73;font-size:12px;background:#f7f8fa;border:1px solid #e3e6eb;
  border-radius:8px;padding:7px 10px;margin-bottom:10px}
.conv-list{max-height:230px;overflow:auto;border:1px solid #e3e6eb;border-radius:8px}
.conv-row{display:flex;align-items:center;gap:9px;padding:7px 10px;border-bottom:1px solid #eef0f3;
  cursor:pointer;font-size:12px;color:#1f2329}
.conv-row:last-child{border-bottom:none}
.conv-row:hover{background:#f5f8ff}
.conv-row.on{background:#e8f0fe;box-shadow:inset 3px 0 0 #1f6feb}
.conv-row b{min-width:96px;color:#8a6410}
.conv-row span{color:#8f959e;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:130px}
.conv-empty{padding:22px;text-align:center;color:#8f959e;font-size:12px}
.conv-preview{margin-top:10px;border-top:1px dashed #d0d5dd;padding-top:10px}
.conv-hd{color:#646a73;font-size:12px;margin-bottom:8px}
.conv-f{display:inline-flex;align-items:center;gap:6px;margin:0 12px 8px 0}
.conv-f span{color:#646a73;font-size:12px;min-width:56px}
.conv-f input{background:#ffffff;border:1px solid #d0d5dd;border-radius:6px;color:#1f2329;
  padding:5px 8px;font-size:12px;width:150px}
.conv-f input:focus{outline:none;border-color:#d9a94e}

/* 数据补录 */
.sub{color:#8f959e;font-size:11px;margin-top:3px;line-height:1.5}
button.mini.ok{color:#16a34a;border-color:#9ed8b8}
button.mini.ok:hover{background:rgba(22,163,74,.08)}

/* 统计页 */
.note-sm{color:#646a73;font-size:11.5px;line-height:1.7;margin:-6px 0 14px;
  background:#f7f8fa;border:1px solid #e3e6eb;border-radius:8px;padding:8px 11px}
.note-sm b{color:#1f2329}
.trend{display:flex;flex-direction:column;gap:5px;max-height:300px;overflow:auto}
.trend .tr{display:flex;align-items:center;gap:10px}
.trend .tl{width:46px;color:#8f959e;font-size:11.5px;flex:none;text-align:right}
.trend .tb{flex:1;height:14px;background:#eef0f3;border-radius:4px;overflow:hidden}
.trend .tb i{display:block;height:100%;background:linear-gradient(90deg,#1f6feb,#6cb6ff)}
.trend .tv{width:88px;text-align:right;color:#b07b1a;font-size:11.5px;flex:none}
.g{font-size:11px;margin-left:5px;padding:1px 5px;border-radius:4px}
.g.up{color:#16a34a;background:rgba(22,163,74,.10)}
.g.down{color:#d93025;background:rgba(217,48,37,.08)}
.g.flat{color:#646a73;background:rgba(100,106,115,.10)}

/* ---- 经营罗盘 · 对比分析（月/季/年 同比+环比，纯 CSS 自绘）---- */
.cmp-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:2px 0 12px}
.cmp-bar .seg{display:inline-flex;border:1px solid #d0d5dd;border-radius:8px;overflow:hidden}
.cmp-bar .seg button{border:0;background:#fff;color:#646a73;font-size:13px;
  padding:6px 16px;cursor:pointer;border-left:1px solid #e3e6eb}
.cmp-bar .seg button:first-child{border-left:0}
.cmp-bar .seg button.on{background:#1f6feb;color:#fff}
.cmp-bar select{padding:6px 8px;font-size:13px;border:1px solid #d0d5dd;border-radius:8px;background:#fff;color:#1f2329}
.cd{font-size:11px;padding:1px 5px;border-radius:4px;white-space:nowrap}
.cd.up{color:#d93025;background:rgba(217,48,37,.08)}      /* 中国习惯：红=涨 */
.cd.down{color:#16a34a;background:rgba(22,163,74,.10)}    /* 绿=跌 */
.cd.new{color:#16a34a;background:rgba(22,163,74,.10)}
.cd.na{color:#8f959e;background:rgba(100,106,115,.08)}
/* PC：分组柱状，每期两根（本期实色 / 同比虚线） */
.cmp-chart{display:flex;align-items:flex-end;gap:6px;overflow-x:auto;padding-bottom:2px}
.cmp-chart .cg{flex:1 1 0;min-width:52px;display:flex;flex-direction:column;align-items:center}
.cmp-chart .cb{width:100%;height:150px;display:flex;align-items:flex-end;justify-content:center;gap:4px}
.cmp-chart .col{position:relative;flex:1;height:100%;display:flex;align-items:flex-end;justify-content:center}
.cmp-chart .col i{display:block;width:100%;border-radius:3px 3px 0 0}
.cmp-chart .bcur{background:linear-gradient(180deg,#1f6feb,#6cb6ff)}
.cmp-chart .bref{background:#c8d6ea;border:1px dashed #9db4d0}
.cmp-chart .col i.z{min-height:2px;background:#c2c8d0;border:0}
.cmp-chart .bv{position:absolute;left:-6px;right:-6px;text-align:center;font-size:10px;
  color:#1f2329;line-height:1.2;white-space:nowrap;pointer-events:none}
.cmp-chart .bv.ref{color:#8f959e}
.cmp-chart .bv.na{color:#c0c4cc}
.cmp-chart .cl{margin-top:5px;font-size:11px;color:#8f959e;text-align:center;line-height:1.3}
.cmp-chart .cp{margin-top:3px}
.cmp-chart .st,.cmp-rows .st{display:inline-block;margin-left:3px;padding:0 4px;border-radius:3px;
  font-size:9.5px;font-style:normal;background:#eef0f3;color:#8f959e}
.cmp-chart .st.future,.cmp-rows .st.future{background:rgba(31,111,235,.10);color:#1f6feb}
.cmp-chart .st.running,.cmp-rows .st.running{background:rgba(224,168,0,.12);color:#b07b1a}
.trend.cmp-rows{display:none;max-height:none;gap:3px}
.trend.cmp-rows .tr{gap:8px}
.trend.cmp-rows .tb{height:10px}
.trend.cmp-rows .tb i{height:100%;border-radius:3px}
.trend.cmp-rows .bcur{background:linear-gradient(90deg,#1f6feb,#6cb6ff)}
.trend.cmp-rows .bref{background:#c8d6ea;border-top:1px dashed #9db4d0;border-bottom:1px dashed #9db4d0}
.trend.cmp-rows .tb i.z{min-width:2px;background:#c2c8d0;border:0}
.trend.cmp-rows .tv.dim{color:#8f959e}
.trend.cmp-rows .cp2{width:64px;flex:none;text-align:right}
.cmp-note{margin-top:10px;color:#646a73;font-size:11px;line-height:1.7}
.cmp-note b{color:#1f2329}

/* 客资卡片预览弹窗（转发微信） */
.cardmodal{position:fixed;z-index:120;top:50%;left:50%;transform:translate(-50%,-50%);
  width:560px;max-width:94vw;max-height:92vh;display:none;flex-direction:column;
  background:#ffffff;border:1px solid #d0d5dd;border-radius:14px;
  box-shadow:0 24px 60px rgba(0,0,0,.2);overflow:hidden}
.cardmodal.on{display:flex}
.cm-head{display:flex;align-items:center;justify-content:space-between;
  padding:14px 18px;border-bottom:1px solid #e3e6eb}
.cm-head b{color:#1f2329;font-size:15px}
.cm-body{flex:1;overflow:auto;padding:18px;display:flex;justify-content:center;
  background:#f2f4f7}
.cm-body img{width:100%;max-width:420px;height:auto;border-radius:10px;
  box-shadow:0 8px 24px rgba(0,0,0,.15)}
.cm-foot{display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:13px 18px;border-top:1px solid #e3e6eb;flex-wrap:wrap}
.cm-ck{display:inline-flex;align-items:center;gap:7px;color:#646a73;font-size:12.5px;
  cursor:pointer;user-select:none}
.cm-ck input{accent-color:#d9a94e;cursor:pointer}
.cm-foot>div{display:flex;gap:8px}

/* 数据治理 */
.gov-score{text-align:center}
.gov-ring{width:128px;height:128px;border-radius:50%;margin:14px auto;display:flex;align-items:center;justify-content:center;
  background:conic-gradient(var(--c,#16a34a) calc(var(--p,0)*1%), #e9ecef 0);position:relative}
.gov-ring::before{content:"";position:absolute;inset:13px;border-radius:50%;background:#ffffff}
.gov-ring span{position:relative;font-size:26px;font-weight:700;color:var(--c,#16a34a)}
.gov-field{padding:11px 2px;border-bottom:1px solid rgba(0,0,0,.06)}
.gov-field:last-child{border-bottom:none}
.gov-field-top{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.gov-field-name{font-weight:600;min-width:74px;color:#1f2329}
.gov-field-num{color:#646a73;font-size:13px}
.gov-field-num b{color:#d93025;font-size:15px}
.gov-bar{height:8px;background:#eef0f3;border-radius:5px;overflow:hidden;margin-top:7px}
.gov-bar i{display:block;height:100%;border-radius:5px;transition:width .3s}
.gov-samples{margin-top:8px}
.gov-row-item:hover{background:#fff8e6}
.gov-expand{margin-left:auto}

/* 预警台（统一待办） */
.al-chip{display:inline-flex;align-items:center;gap:5px;background:#f4f6f9;color:#333;
  border:1px solid #d0d5dd;border-radius:13px;padding:3px 9px;font-size:12px;margin:0 6px 6px 0}
.al-chip b{color:#b07b1a;font-size:13px}
.al-chip[data-type="b_risk"] b,.al-chip[data-type="pay_overdue"] b,.al-chip[data-type="pay_urgent"] b{color:#d93025}
/* 预警台：统计数+说明(左) 与 3下拉+2按钮+7胶囊(右) 同处一行；空间不足时胶囊在 #alTypes 内自身换行，绝不掉到下一行（偏差≤6px 即「同一行」） */
#view-alerts .toolbar{gap:7px;align-items:flex-start}
.al-head{flex:0 0 auto;display:flex;align-items:baseline;gap:8px;min-width:0;margin:0;white-space:nowrap;font-size:12.5px;padding-top:6px}
/* 控件永不被挤压换行；#alTypes 以 flex-basis:0 抢占剩余空间并内部换行，保证胶囊始终与筛选控件同处一行 */
#view-alerts .toolbar select,#view-alerts .toolbar button.primary{flex:0 0 auto;white-space:nowrap}
#view-alerts .toolbar select{max-width:96px;padding:3px 5px;font-size:12px;height:32px;line-height:1.2}
#view-alerts .toolbar button.primary{padding:4px 7px;font-size:12px;height:32px;line-height:1.2}
#alTypes{display:flex;align-items:center;gap:4px;margin-left:auto;flex:1 1 0;min-width:0;flex-wrap:wrap;justify-content:flex-end;max-width:100%}
#alTypes .al-chip{margin:0;padding:2px 7px;font-size:12px}
.al-lv{display:inline-block;color:#fff;font-size:11px;font-weight:700;border-radius:5px;
  padding:2px 7px;min-width:30px;text-align:center}
.al-row td.al-idx{color:#8f959e;font-variant-numeric:tabular-nums;width:34px}
.al-row[data-lv="strong"]{box-shadow:inset 3px 0 0 #d93025}
.al-row[data-lv="stale"]{box-shadow:inset 3px 0 0 #9aa0a6;opacity:.72}
.al-row[data-lv="normal"]{box-shadow:inset 3px 0 0 #e0a800}
.al-row:hover{background:#f5f8ff}
.al-idx{color:#8f959e}
.al-type{color:#646a73;flex:none}
.al-name{color:#1f2329;font-weight:600}
.al-hotel{color:#1f2329}
.al-meta{color:#646a73;white-space:normal;max-width:440px}
.al-amt{color:#b07b1a;text-align:right;font-variant-numeric:tabular-nums}

/* 首页待办总览条（连接预警台） */
.dash-alerts{cursor:pointer;background:linear-gradient(120deg,#ffffff,#fffdf5);
  border:1px solid #e3e6eb;border-radius:12px;padding:13px 16px;margin-bottom:16px;transition:.15s}
.dash-alerts:hover{border-color:#d9a94e;box-shadow:0 4px 16px rgba(0,0,0,.08)}
.da-main{display:flex;align-items:center;gap:10px;font-size:14px;color:#1f2329;flex-wrap:wrap}
.da-main b{color:#b07b1a;font-size:18px}
.da-strong{color:#d93025;font-weight:700;background:rgba(217,48,37,.08);
  border-radius:6px;padding:1px 8px;font-size:12px}
.da-go{margin-left:auto;color:#9a6b0f;font-size:13px;font-weight:600}
.da-chips{display:flex;gap:7px;flex-wrap:wrap;flex:0 1 auto;min-width:0;margin:0}
.da-chip{background:#f4f6f9;color:#4b5563;border:1px solid #d0d5dd;
  border-radius:14px;padding:2px 11px;font-size:12px}
.da-chip b{color:#b07b1a;font-size:13px}

/* ============ 附件（效果图 / 合同 / 方案）============ */
.att-box{display:flex;flex-direction:column;gap:8px}
/* 勇哥 09-12：新人档案按分类像文件夹一样分组，每组一个小标题 */
.att-grp{display:flex;align-items:center;gap:8px;margin:12px 0 5px;padding:0 2px;border-bottom:1px solid #e7e9ee}
.att-grp-t{font-size:13px;font-weight:800;color:#1f2329;letter-spacing:.3px}
.att-grp-n{font-size:11px;color:#8a8f99;background:#f0f2f5;border-radius:10px;padding:1px 9px}
.att-add{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:2px}
.att-add select{background:#fff;color:#1f2329;border:1px solid #d0d5dd;border-radius:8px;padding:7px 10px}
.att-add .sub{color:#8f959e;font-size:12px}
.att-row{display:flex;align-items:center;gap:9px;padding:8px 10px;background:#f7f8fa;
  border:1px solid #e3e6eb;border-radius:8px}
.att-kind{flex:none;background:#eef0f3;color:#4b5563;border-radius:5px;padding:2px 8px;font-size:11px}
.att-kind.secret{background:#fdeceb;color:#d93025;border-color:#f5c6c0}
.att-thumb{width:40px;height:40px;object-fit:cover;border-radius:6px;cursor:pointer;flex:none;
  border:1px solid #d0d5dd;background:#ffffff}
.att-ico{flex:none;width:40px;text-align:center;font-size:19px}
.att-name{flex:1;min-width:0;color:#1f2329;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.att-meta{flex:none;color:#8f959e;font-size:11px}
.att-dl{flex:none;color:#9a6b0f;font-size:12px;text-decoration:none;border:1px solid #dcc98f;
  border-radius:6px;padding:3px 9px}
.att-dl:hover{background:#fdf6e7}

/* ============ 手机适配（≤768px）============
   目标：员工在候机室用手机能顺畅录客资 / 看预警台
   原则：能横滑的不挤压、触摸目标≥38px、输入框16px防iOS自动放大 */
@media (max-width:768px){
  /* ---- 顶栏：品牌+用户一行，标签单独一行横滑 ---- */
  .topbar{flex-wrap:wrap;gap:8px;padding:8px 10px}
  .brand{font-size:13px;gap:6px}
  .brand #companyName{display:none}
  .tabs{order:3;flex:1 0 100%;overflow-x:auto;-webkit-overflow-scrolling:touch;
        gap:6px;padding-bottom:3px;scrollbar-width:none}
  .tabs::-webkit-scrollbar{display:none}
  .tab{padding:9px 12px;font-size:13px;white-space:nowrap;flex:none}
  .who{margin-left:auto;gap:5px;font-size:12px}
  .role-tag{display:none}
  .who #whoSelect{max-width:110px}

  /* ---- 视图留白收窄 ---- */
  .view{padding:12px 10px 76px}

  /* ---- 触摸目标加大 ---- */
  button,.toolbar select,.filterbar .fsel,.search,.pager button{min-height:38px}
  /* 婚礼流程表：手机上保持单表，列宽不够时整表横向滑动（触摸友好，不挤压内容） */
  .tltable{overflow-x:auto}
  .tlthead,.tlrow{min-width:700px}
  .tlrow input{font-size:14px;padding:8px 8px}
  .tlx{min-height:34px}
  .tlnames{font-size:15px}
  button{padding:9px 13px}
  .toolbar{gap:7px}
  /* 输入框 16px：低于此值 iOS 会自动放大页面 */
  .search{min-width:0;max-width:none;flex:1 1 100%;font-size:16px}
  .count{margin-left:0;flex:1 1 100%}
  .filterbar{gap:8px;padding:10px 12px}
  .filterbar .fsel{flex:1 1 40%;min-width:0}
  .filterbar .fnow{font-size:11px}

  /* ---- KPI 两列 ---- */
  .kpis{grid-template-columns:repeat(2,1fr);gap:9px}
  .kpi{padding:11px 12px}
  .kpi .v{font-size:20px}
  .kpi .k{font-size:11px}

  /* ---- 卡片 / 网格 ---- */
  .card{padding:12px 13px}
  .grid2{grid-template-columns:1fr;gap:10px}
  .alertwrap{grid-template-columns:1fr}
  .formgrid{grid-template-columns:78px 1fr}

  /* ---- 表格：横滑 + 降低行高 ---- */
  .tablewrap{max-height:62vh;-webkit-overflow-scrolling:touch}
  table.tbl{font-size:12.5px}
  table.tbl th,table.tbl td{padding:8px 9px;max-width:190px}

  /* ---- 渠道条 / 漏斗：固定列收窄给内容让路 ---- */
  .ch .nm{width:64px;font-size:12px}
  .ch .amt{width:74px;font-size:11px}
  .ch .rt{width:56px}
  .fn .k{width:84px;font-size:12px}
  .trend .tv{width:74px}
  .trend .tl{width:38px}

  /* ---- 对比分析：手机改横向双条行（每行一期上下两根，12 期纵向铺完不横滑）---- */
  .cmp-chart{display:none}
  .trend.cmp-rows{display:flex}
  .trend.cmp-rows .tv{width:66px;font-size:11px}
  .trend.cmp-rows .cp2{width:58px}
  .cmp-bar .seg button{padding:7px 18px}   /* 手机上点起来别太小 */
  .cmp-bar #cmpExport{display:none}        /* 导出只在 PC，与现有导出按钮一致 */

  /* ---- 抽屉：手机上全屏 ---- */
  .drawer{width:100vw;border-left:0}
  .drawer-head{padding:12px 14px}
  .drawer-body{padding:10px 10px 90px}
  .fld label{width:86px;font-size:12px}
  .fld input,.fld select,.fld textarea{font-size:16px;padding:6px 9px}
  .fld textarea{min-height:56px}
  /* 抽屉/弹窗内所有输入控件统一 16px：低于 16px iOS 聚焦会自动放大整页 */
  .drawer input,.drawer select,.drawer textarea,
  .modal input,.modal select,.modal textarea,
  #loginOverlay input,#pwdOverlay input{font-size:16px}
  .vmrow input,.vmadd input,.vmadd select,.leadlink select{font-size:16px}

  /* ---- 供应链与成本：手机改成卡片式 —— 角色标题一行，人选通栏，报价/已付/未付三栏并排，备注通栏 ---- */
  .rbrow,.rbrow.nocost{
    display:flex; flex-wrap:wrap; align-items:flex-start; gap:7px 9px;
    padding:7px 9px; border-bottom:1px solid #eef0f3;
  }
  .rbrole{ flex:0 0 100%; font-size:14px; margin-bottom:1px; }
  .rbrow .fld{ margin:0; flex-direction:column; align-items:stretch; gap:3px; }
  .rbrow .fld label{ width:auto; }
  .rbrow .fld.rp{ flex:0 0 100%; }
  .rbrow .fld.rc,
  .rbrow .fld.rpay,
  .rbrow .fld.runpaid{ flex:1 1 28%; min-width:0; }
  .rbrow .fld.rn{ flex:0 0 100%; }
  .rbrow .fld.rc input,
  .rbrow .fld.rpay input.pay-paid{ text-align:right; }
  .rbrow .fld.runpaid{ align-items:flex-end; }
  .payrow{grid-template-columns:1fr 1fr;gap:5px 9px;padding:5px 9px}
  .payrow .pl{grid-column:1/-1;padding-bottom:0}
  .payrow .fld input,.payrow .fld select{font-size:16px}
  .fgrid.f4{grid-template-columns:repeat(2,1fr)}
  .rbtotal{grid-template-columns:repeat(2,1fr)}
  .staffrow{grid-template-columns:repeat(2,1fr)}
  /* 抽屉字段网格：手机窄屏退回一行 1 个（textarea 仍通栏） */
  .fgrid{grid-template-columns:repeat(2,1fr);gap:7px 8px}
  .grp{margin-bottom:9px}
  .grp h4{margin-bottom:3px;padding-bottom:3px}
  .rbsub{padding:6px 9px}
  .roleblk{margin-top:6px}
  /* 新增项目明细：手机上每行改 项目名称通栏 + 金额/备注/删除一行 */
  .extlist{padding:7px 9px}
  .extrow{flex-wrap:wrap;gap:6px}
  .extrow .ex-name{flex:1 1 100%;font-size:16px;padding:8px 9px}
  .extrow .ex-amt{flex:1 1 90px;min-width:0;font-size:16px;padding:8px 9px}
  .extrow .ex-note{flex:2 1 120px;min-width:0;font-size:16px;padding:8px 9px}
  .ext-del{flex:0 0 38px;width:38px;height:38px;font-size:15px}
  .extotal b{font-size:16px}
  /* 手机：已收/到账日期随行换行，min-width:0 保证 390px 视口无横向溢出 */
  .extrow .ex-status{flex:1 1 84px;min-width:0;font-size:16px;padding:8px 6px}
  .extrow .ex-recvamt{flex:1 1 96px;min-width:0;font-size:16px;padding:8px 9px}
  .extrow .ex-date{flex:1 1 120px;min-width:0;font-size:16px;padding:8px 9px}

  /* ---- 供应商库行 ---- */
  .vmrow{flex-wrap:wrap}
  .vmrow .vmn{flex:0 0 100%}
  .vmrow .vmc,.vmrow .vmct,.vmrow .vmnt{flex:1 1 30%}
  .vmadd input{flex:1 1 100%}

  /* ---- 客资关联 / 转订单 ---- */
  .leadlink{flex-wrap:wrap}
  .leadlink select{flex:1 1 100%}
  .conv-f{margin-right:8px}
  .conv-f input{width:118px;font-size:16px}
  .conv-row b{min-width:76px}

  /* ---- 跟进输入 ---- */
  .fuadd textarea{min-width:0;flex:1 1 100%;font-size:16px}

  /* ---- 弹窗 ---- */
  .modal{width:94vw;max-height:88vh;padding:14px 15px}
  .modal-foot{flex-wrap:wrap}
  .modal-foot button{flex:1 1 40%}
  .cardmodal{width:94vw;max-height:90vh}
  .cm-foot{flex-direction:column;align-items:stretch;gap:9px}
  .cm-foot>div{justify-content:space-between}

  /* ---- 预警台 ---- */
  .al-meta{max-width:none;white-space:normal;font-size:12px}
  .al-chip{font-size:12px;padding:4px 10px}
  .da-main{font-size:13px;gap:8px}
  /* 手机：查看预警台回到首行右侧(order:1)，胶囊独占第二行且保持单行(超出横向滚动) */
  .da-go{order:1;margin-left:auto;flex:0 0 auto}
  .da-chips{order:2;flex:1 1 100%;flex-wrap:nowrap;overflow-x:auto;gap:6px;
    scrollbar-width:none;-webkit-overflow-scrolling:touch;padding-bottom:2px}
  .da-chips::-webkit-scrollbar{display:none}

  /* ---- 数据治理 ---- */
  .gov-field-name{min-width:58px;font-size:13px}
  .gov-expand{margin-left:0}

  /* ---- toast 两端对齐，别被刘海挡 ---- */
  .toast{left:10px;right:10px;bottom:22px;text-align:center;
         transform:translateY(20px);font-size:13px}
  .toast.on{transform:none}

  /* ---- 登录卡 ---- */
  .login-card{padding:24px 20px}
  .login-card input{font-size:16px}

  /* ---- 附件区：手机上换行，别把文件名挤没了 ---- */
  .att-row{flex-wrap:wrap;gap:7px}
  .att-name{flex:1 1 55%}
  .att-meta{flex:1 1 100%;order:5}
  .att-add .sub{flex:1 1 100%}
  .att-add select,.att-add button{flex:1 1 40%;justify-content:center}

  /* 勇哥 09-11：手机端工具栏统一网格，控件等宽、间距对等、紧凑整齐 */
  .toolbar,.filterbar{
    display:grid;
    grid-template-columns:repeat(2,minmax(0,1fr));
    gap:8px;
    align-items:stretch;
  }
  .toolbar>*,.filterbar>*{min-width:0}
  /* 搜索框 / 计数 / 说明 / 自定义行 一律通栏 */
  .toolbar>.search,.filterbar>.search,
  .toolbar>.count,.toolbar>.sums,.toolbar>.sub,
  .toolbar>.loadwarn,.filterbar>.loadwarn,
  .filterbar>.flabel,.filterbar>.fnow,
  .toolbar>div,.filterbar>div{grid-column:1/-1}
  /* 下拉 / 按钮 / 输入框 填满格子、等高，保证等宽 */
  .toolbar>select,.toolbar>button,.toolbar>input,
  .filterbar>select,.filterbar>button{width:100%;box-sizing:border-box}
  /* 操作留痕的原生 file input 通栏（管理员可见） */
  #view-audit #fileImport{grid-column:1/-1}
  /* 预警台表头与胶囊行通栏（清掉桌面 margin-left:auto 泄漏，确保铺满） */
  #view-alerts .al-head{grid-column:1/-1;margin:0}
  /* 共享空间 / 预警台 胶囊：两列等宽、等距、整齐 */
  #sharedCates{
    display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;
  }
  #sharedCates .scate,#alTypes .al-chip{
    width:100%;margin:0;justify-content:center;min-height:34px;box-sizing:border-box;
  }

  /* 勇哥 09-11：各页手机端工具栏精排，消除孤项/不对齐/搜索框被 max-width:260 卡住 */
  /* 客资：姓名搜索(缩进一格) 与 新增客资 同一行 */
  #view-leads #leadQ{grid-column:1 / 2;grid-row:1;max-width:100%}
  #view-leads #btnNewLead{grid-column:2 / 3;grid-row:1}
  #view-leads #leadCount,#view-leads #leadBatchBar{grid-column:1 / -1}
  /* 订单：姓名搜索拉满整行 */
  #view-projects #prjQ{grid-column:1 / -1;max-width:100%}
  #view-projects #prjCount{grid-column:1 / -1}
  /* 预警台：复制待办 + 导出Excel 钉死第一排；3 下拉 + 5 胶囊并入同一 2 列网格，全部等宽整齐 */
  #view-alerts #btnAlertsCopy{grid-column:1 / 2;grid-row:1}
  #view-alerts #btnAlertsExport{grid-column:2 / 3;grid-row:1}
  /* 胶囊容器不单独成行：display:contents 让它成为工具栏网格的直接子项，与下拉同列等宽 */
  #view-alerts #alTypes{display:contents;grid-column:auto;margin:0}
  /* 下拉去掉桌面 96px 上限，在手机端填满格子、与胶囊等宽等高 */
  #view-alerts .toolbar select{width:100%;max-width:none;height:34px}
  /* 共享空间：类型/搜索/计数均占满，避免孤项 */
  #view-shared #sharedKind{grid-column:1 / -1;max-width:100%}
  #view-shared #sharedQ{grid-column:1 / -1;max-width:100%}
  #view-shared #sharedCount{grid-column:1 / -1}
}

/* 超窄屏（≤400px，如 iPhone SE）*/
@media (max-width:400px){
  .kpis{gap:8px}
  .kpi .v{font-size:18px}
  .fld label{width:74px}
  .tab{padding:8px 10px;font-size:12.5px}
  .ch .nm{width:56px}
  .ch .amt{width:66px}
  .ch .rt{display:none}
}
/* 极小屏（≤374px，如 iPhone SE 初代）：字段双列太挤，退回单列 */
@media (max-width:374px){
  .fgrid{grid-template-columns:repeat(1,1fr)}
}

/* ============ 日程（员工内部排程） ============ */
.sch-layout{display:flex;gap:16px;align-items:flex-start;margin-top:14px}
.sch-cal{flex:0 0 384px}
.sch-list{flex:1 1 auto;min-width:0}
.cal-head{display:flex;align-items:center;gap:8px;margin-bottom:10px}
.cal-head b{flex:1;font-size:14px;color:#1f2329}
.cal-head .mini{padding:3px 9px}
.cal-week{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-bottom:4px}
.cal-week span{text-align:center;font-size:11px;color:#8f959e;padding:2px 0}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}
.cal-cell{position:relative;aspect-ratio:1/1;display:flex;align-items:center;justify-content:center;
  font-size:13px;color:#1f2329;border-radius:8px;background:#fafbfc;border:1px solid #e3e6eb;cursor:pointer}
.cal-cell.empty{background:transparent;border:none;cursor:default}
.cal-cell:hover{border-color:#c0c7d0}
.cal-cell.today{background:#1f6feb;border-color:#1f6feb;color:#fff;font-weight:700}
.cal-cell.sel{outline:2px solid #1f6feb;outline-offset:-2px}
.cal-dot{position:absolute;bottom:6px;width:5px;height:5px;border-radius:50%;background:#e0a93b}
.cal-add{position:absolute;top:2px;right:3px;width:15px;height:15px;line-height:13px;text-align:center;
  font-size:13px;color:#fff;background:#1f6feb;border-radius:50%;opacity:0;transition:.12s;cursor:pointer}
.cal-cell:hover .cal-add{opacity:1}
.cal-add:hover{background:#1558c0}
.cal-time{position:absolute;top:3px;left:4px;font-size:9px;color:#1f6feb;line-height:1}
.sch-list-body{max-height:62vh;overflow:auto;padding-right:4px}
.sch-card{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border-radius:10px;
  background:#ffffff;border:1px solid #e3e6eb;margin-bottom:8px;cursor:pointer}
.sch-card.done{opacity:.55}
.sch-time{flex:0 0 48px;font-size:13px;color:#646a73;padding-top:1px;font-variant-numeric:tabular-nums}
.sch-main{flex:1;min-width:0}
.sch-title{font-size:14px;color:#1f2329;display:flex;align-items:center;gap:6px}
.sch-undone{color:#b07b1a;font-size:10px}
.sch-meta{font-size:12px;color:#8f959e;margin-top:3px;display:flex;gap:8px;flex-wrap:wrap}
.sch-cust{color:#646a73}
.sch-parts{color:#1f6feb}
.sch-content{font-size:12px;color:#646a73;margin-top:4px;white-space:pre-wrap;word-break:break-word}
.sch-me{font-size:11px;background:#e8f0fe;color:#1a56db;padding:1px 6px;border-radius:8px}
.sch-act{flex:0 0 auto;display:flex;gap:4px;align-items:center}
.sch-empty{color:#8f959e;font-size:13px;padding:24px;text-align:center}
.al-act{padding:0 4px}
.al-act .mini{padding:3px 7px;font-size:12px}
.parts-box{display:flex;flex-wrap:wrap;gap:6px 14px;padding:4px 0}
.part{display:inline-flex;align-items:center;gap:4px;font-size:13px;color:#1f2329;cursor:pointer}
.mention-box{margin-top:6px;display:flex;flex-wrap:wrap;gap:6px;background:#fafbfc;
  border:1px solid #e3e6eb;border-radius:8px;padding:8px}
.mention-item{font-size:13px;color:#1a56db;background:#eef3fe;border:1px solid #c6dbff;
  padding:3px 10px;border-radius:14px;cursor:pointer}
.mention-item:hover{background:#dbe7fd}
.ck{display:inline-flex;align-items:center;gap:5px;font-size:13px;color:#1f2329;cursor:pointer}

/* 日程：平板/手机堆叠 */
@media (max-width:760px){
  .sch-layout{flex-direction:column}
  .sch-cal{flex:1 1 auto;width:100%}
  .sch-list-body{max-height:none}
}

/* 通用隐藏（统计等模块下线用，保留 DOM 可逆） */
.x-hide{display:none !important}

/* ============ 派单（场布派单 / 花艺派单） 勇哥 2026-09-08 ============ */
.grp-btns{margin-left:auto;display:inline-flex;gap:6px}
.disp-saved{margin-left:8px;font-size:11px;color:#8f959e;min-width:64px}
.disp-saved.unsaved{color:#d97706;font-weight:600}
.disp-saved.saving{color:#646a73}
.disp-saved.saved{color:#16a34a}
.disp-saved.failed{color:#d93025;font-weight:600}
.disp-tabs{display:flex;gap:8px;align-items:center;margin-bottom:10px;flex-wrap:wrap}
.dtab{background:#f4f6f9;color:#1f2329;border:1px solid #d0d5dd;border-radius:8px;padding:6px 14px;cursor:pointer;font-size:13px}
.dtab.on{background:#e8f0fe;color:#1a56db;border-color:#1f6feb}
.disp-head{display:flex;flex-direction:column;gap:6px;margin-bottom:10px;
  background:#fafbfc;border:1px solid #e3e6eb;border-radius:8px;padding:8px 10px}
.disp-hrow{display:flex;gap:10px;flex-wrap:wrap}
.dfld{flex:1 1 200px;display:flex;flex-direction:column;gap:2px;font-size:12px;color:#646a73}
.dfld input{background:#ffffff;border:1px solid #d0d5dd;color:#1f2329;border-radius:6px;padding:6px 8px;font-size:13px}
.disp-sec{margin-top:10px;border-top:1px dashed #d9dfe6;padding-top:8px}
.disp-sectitle{font-size:13px;color:#9a6b0f;letter-spacing:1px;margin-bottom:6px}
.disp-tbl{width:100%;border-collapse:collapse;font-size:12px}
.disp-tbl th{background:#f4f6f9;color:#646a73;font-weight:600;padding:5px 6px;border:1px solid #d0d5dd;text-align:center}
.disp-tbl td{padding:3px 4px;border:1px solid #e3e6eb}
.disp-tbl .dn{width:100%;background:#ffffff;border:1px solid #d0d5dd;color:#1f2329;border-radius:5px;padding:5px 6px;font-size:12px;box-sizing:border-box}
.disp-tbl .dn.num{text-align:right}
.disp-tbl .damt{text-align:right;color:#16a34a;font-variant-numeric:tabular-nums;white-space:nowrap}
.disp-sub{margin-top:5px;text-align:right;font-size:12px;color:#1f2329}
.disp-sub .dsub{color:#b07b1a}
.disp-total{margin-top:8px;text-align:right;font-size:15px;color:#1f2329}
.disp-total #dispTotal{color:#b07b1a;font-variant-numeric:tabular-nums}
.disp-link{margin-top:8px;display:flex;align-items:center;gap:8px;font-size:12px;color:#646a73;background:#f3f6fb;border:1px dashed #c4d2e6;border-radius:6px;padding:6px 10px}
.disp-link b{color:#9a6b0f;font-variant-numeric:tabular-nums}
.disp-link .mini{margin-left:auto;padding:3px 10px;font-size:12px}
.disp-note{margin-top:10px;display:flex;flex-direction:column;gap:4px}
.disp-note label{font-size:12px;color:#646a73}
.disp-note textarea{background:#ffffff;border:1px solid #d0d5dd;color:#1f2329;border-radius:6px;padding:7px 9px;font-size:13px;min-height:54px;resize:vertical}

/* 导出 PDF：打印时只显示派单，其余全部隐藏 */
#dispatchPrint{display:none}
@media print{
  body.printing > *:not(#dispatchPrint){display:none !important}
  #dispatchPrint{display:block !important;padding:0;color:#000;background:#fff}
  .dp{max-width:760px;margin:0 auto;font-family:"Microsoft YaHei",sans-serif;color:#000}
  .dp h1{text-align:center;font-size:22px;margin:6px 0 14px}
  .dp .dph{margin-bottom:12px;font-size:13px}
  .dp .dphr{display:flex;gap:18px;margin:3px 0;flex-wrap:wrap}
  .dp h2{font-size:15px;margin:14px 0 6px;border-left:4px solid #333;padding-left:8px}
  .dp table.dpt{width:100%;border-collapse:collapse;font-size:12px}
  .dp table.dpt th,.dp table.dpt td{border:1px solid #555;padding:4px 6px;text-align:center}
  .dp table.dpt td:nth-child(2){text-align:left}
  .dp .dpsub{text-align:right;margin:4px 0;font-size:13px}
  .dp .dptot{text-align:right;font-size:16px;font-weight:700;margin:10px 0}
  .dp .dpnote{margin-top:12px;font-size:12px;line-height:1.6}
  .dp .dpcust{display:flex;flex-wrap:wrap;gap:4px 18px;margin:4px 0 10px;font-size:13px}
  .dp .dpcust b{color:#333;margin-right:4px}
  .dp .dpimgs{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px;margin-top:6px}
  .dp .dpimg{border:1px solid #999;border-radius:4px;overflow:hidden;background:#fff}
  .dp .dpimg img{width:100%;height:160px;object-fit:cover;display:block}
  .dp .dpimgcap{font-size:11px;color:#333;padding:4px 6px;text-align:center}
}

/* 派单效果插图 + 客户信息横幅（勇哥 2026-09-08） */
.disp-cust{display:flex;flex-wrap:wrap;gap:6px 14px;background:#f7f8fa;border:1px solid #d0d5dd;border-radius:8px;padding:8px 12px;margin-bottom:10px;font-size:12.5px;color:#1f2329}
.disp-cust .dc-i b{color:#9a6b0f;font-weight:600;margin-right:5px}
.disp-imgblk{margin-top:10px;border-top:1px dashed #d9dfe6;padding-top:8px}
.disp-imgblk h5{font-size:13px;color:#9a6b0f;letter-spacing:1px;margin:0 0 8px}
.disp-imglist{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;margin-bottom:10px}
.disp-imgcard{position:relative;background:#ffffff;border:1px solid #d0d5dd;border-radius:8px;padding:6px;display:flex;flex-direction:column;gap:6px}
.disp-imgcard .disp-thumb{width:100%;height:130px;object-fit:cover;border-radius:6px;background:#f2f4f7;cursor:pointer;display:block}
.disp-imgcard .dn{width:100%;background:#ffffff;border:1px solid #d0d5dd;color:#1f2329;border-radius:5px;padding:5px 6px;font-size:12px;box-sizing:border-box}
.disp-imgcard .mini.danger{position:absolute;top:10px;right:10px;width:22px;height:22px;line-height:1;padding:0;border-radius:50%;opacity:.85}
.disp-picker{margin-top:8px;border:1px dashed #c0c7d0;border-radius:8px;padding:8px;background:#fafbfc}
.disp-picker .dpick-title{font-size:12px;color:#646a73;margin-bottom:6px}
.dpick-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:8px}
.dpick-item{display:flex;flex-direction:column;gap:4px;background:#ffffff;border:1px solid #e3e6eb;border-radius:8px;padding:6px;align-items:center}
.dpick-item img{width:100%;height:84px;object-fit:cover;border-radius:6px;background:#f2f4f7;display:block}
.dpick-item .dpick-ico{font-size:34px;text-align:center;padding:18px 0}
.dpick-item .dpick-name{font-size:11px;color:#646a73;text-align:center;word-break:break-all;max-height:30px;overflow:hidden}
.dpick-item .mini{width:100%}


/* 客资婚期双模式（勇哥 09-08）：手写文本 + 📅 选日期自动填入 */
.weddual{display:flex;gap:6px;align-items:center;width:100%}
.weddual input[data-f]{flex:1;min-width:0}
.weddual .wedpick{position:absolute;width:1px;height:1px;opacity:0;border:0;padding:0;flex:none;pointer-events:none}
.weddual .mini{flex:none;padding:7px 8px;line-height:1}


/* 共享空间归类标签条（勇哥 09-08）：文件夹式分类，自由命名 */
.scate{background:#ffffff;border:1px solid #d0d5dd;color:#1f2329;border-radius:18px;padding:6px 14px;font-size:12.5px;cursor:pointer;display:inline-flex;align-items:center;gap:5px}
.scate b{font-weight:600;color:#8f959e}
.scate:hover{border-color:#9aa7bd;color:#1f2329}
.scate.on{background:#e8f0fe;border-color:#1f6feb;color:#1a56db}
.scate.on b{color:#1a56db}
.scate.add{border-style:dashed;color:#8f959e}


/* 在线预览弹窗（勇哥 09-08 下午）：Word/Excel 解析后的简版排版 */
.pv-body{color:#1f2329;font-size:13.5px;line-height:1.7}
.pv-body h2{font-size:17px;margin:14px 0 6px;color:#111}
.pv-body h3{font-size:15px;margin:12px 0 5px;color:#222}
.pv-body h4{font-size:13.5px;margin:10px 0 4px;color:#333}
.pv-body p{margin:4px 0;word-break:break-all}
.pv-body .pv-tbl{border-collapse:collapse;margin:8px 0;width:100%}
.pv-body .pv-tbl td{border:1px solid #d0d5dd;padding:5px 8px;font-size:12.5px;word-break:break-all}
.pv-body .pv-tbl tr:first-child td{background:#f7f8fa;color:#1f2329}

/* 表格在线查看/编辑（xlsx/xlsm，勇哥 09-12；09-12 修：后端带真实列宽还原、不变形） */
.xls-sheetbar{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-bottom:8px}
.xls-view-tip{font-size:12px;color:#646a73;margin-right:2px}
.xls-tab{padding:3px 10px;border:1px solid #d6dbe3;border-radius:6px;font-size:12px;cursor:pointer;background:#fff;color:#1f2329}
.xls-tab.on{background:#9a6b0f;color:#fff;border-color:#9a6b0f}
/* 查看：后端已带真实列宽（<col width>），fixed 布局让列宽精确还原，横向可滚动，文字可换行不截断 */
.xls-view{overflow:auto;max-height:66vh;padding:2px;text-align:left}
.xls-view-table{border-collapse:collapse;table-layout:fixed;width:auto;background:#fff;font-size:13px;color:#1f2329;font-family:inherit}
.xls-view-table td{border:1px solid #e3e7ee;padding:5px 7px;vertical-align:top;white-space:normal;word-break:break-word;line-height:1.5;text-align:left}
/* 编辑：前端 SheetJS 渲染，按内容自适应列宽（不变形、不压扁、可横向滚动） */
.xls-edit{overflow:auto;max-height:66vh;text-align:left}
.xls-edit-table{border-collapse:collapse;table-layout:fixed;width:auto;background:#fff;font-size:13px;color:#1f2329;font-family:inherit}
.xls-edit-cell{border:1px solid #e3e7ee;padding:5px 7px;vertical-align:top;white-space:normal;word-break:break-word;line-height:1.5;text-align:left;outline:none}
.xls-edit-cell:focus{outline:2px solid #1f6feb;background:#f3f8ff}


/* 订单列表「服务进」进度胶囊（勇哥 09-08）：勘察/档案/方案/效果图，等宽等距，填了绿、没填灰 */
.svcell{text-align:center;white-space:nowrap}
.sv-chips{display:inline-flex;gap:4px;justify-content:center}
.svchip{display:inline-block;min-width:36px;text-align:center;font-size:11px;line-height:1;padding:4px 0;border-radius:9px;box-sizing:border-box}
.svchip.on{background:#e6f7ef;color:#16a34a;border:1px solid #a7dcbf}
.svchip.off{background:transparent;color:#98a1ab;border:1px dashed #d0d5dd}


/* 共享空间文件名链接化（勇哥 09-08 晚：点文件名直接在线看）+ 预览段落保留缩进 */
.lnk{color:#1f6feb;cursor:pointer}
.lnk:hover{text-decoration:underline}
.pv-body p{white-space:pre-wrap}


/* 客资「意向」三档按钮（勇哥 09-08 晚：点一下就存，再点清除）+ 列表意向标签 */
.intbtns{display:inline-flex;gap:6px}
.intbtn{border:1.5px solid #c9cfd8;background:#fff;color:#3a4150;border-radius:16px;
  padding:6px 16px;font-size:13px;font-weight:600;cursor:pointer}
.intbtn:hover{border-color:#8a6410;color:#8a6410}
.intbtn.on.lvh{background:#d93025;border-color:#d93025;color:#fff}
.intbtn.on.lvm{background:#d97706;border-color:#d97706;color:#fff}
.intbtn.on.lvl{background:#5f5e5a;border-color:#5f5e5a;color:#fff}
.itag{display:inline-block;padding:2px 10px;border-radius:10px;font-size:12px;font-weight:700}
.itag.ih{background:#fcebeb;color:#a32d2d;border:1px solid #f0a5a5}
.itag.im{background:#faeeda;color:#854f0b;border:1px solid #efc98a}
.itag.il{background:#f1efe8;color:#5f5e5a;border:1px solid #d3d1c7}

/* ================= 手机端：列表卡片化（勇哥 09-09） =================
   员工多数不在电脑前，外出用手机看单：宽表在手机上列列截断看不清，
   ≤768px 时 客资/订单 列表自动变成卡片——字段名+完整数值逐行排，金额加粗放大。 */
@media (max-width:768px){
  #prjTbl,#leadTbl{display:block;table-layout:auto;width:100%}
  #prjTbl thead,#leadTbl thead,#prjTbl colgroup{display:none}
  #prjTbl tbody,#leadTbl tbody,#prjTbl tfoot{display:block}
  #prjTbl tr,#leadTbl tr{display:flex;flex-direction:column;background:#fff;
    border:1px solid #e2e5ea;border-radius:14px;padding:11px 13px;margin:0 0 11px;
    box-shadow:0 1px 5px rgba(31,35,41,.07)}
  #prjTbl td,#leadTbl td{display:flex;justify-content:space-between;align-items:center;gap:12px;
    border:0;padding:5px 0;max-width:none;font-size:14px}
  #prjTbl td[data-l]::before,#leadTbl td[data-l]::before{content:attr(data-l);
    color:#8a8f99;font-size:12px;flex:none}
  /* 客资卡片标签同步加大加粗，和 PC 表头一致醒目 */
  #leadTbl td[data-l]::before{color:#5a6069;font-size:13px;font-weight:700}
  /* 新人行 = 卡片标题（大字加粗，下加虚线分隔） */
  #prjTbl td.hl,#leadTbl td.hl{order:-2;justify-content:flex-start;
    font-size:17px;font-weight:700;color:#111;padding:2px 0 7px;
    border-bottom:1px dashed #eceff3;margin-bottom:4px}
  #prjTbl td.hl::before,#leadTbl td.hl::before{display:none}
  /* 婚期紧跟标题，小字即可 */
  #prjTbl td[data-l="婚期"],#leadTbl td[data-l="婚期"]{order:-1;color:#5a6069;font-size:13px}
  #prjTbl td[data-l="婚期"],#leadTbl td[data-l="婚期"]{color:#5a6069;font-size:13px}
  /* 金额行：数字放大加粗，收欠款红、已收绿（醒目一目了然） */
  #prjTbl td.num{font-size:15px;font-weight:700}
  #prjTbl td.num.ok{color:#16a34a}
  #prjTbl td.num.owe{color:#d93025;font-size:16px}
  /* 客资勾选框收到卡片右上角，不占行 */
  #leadTbl tr{position:relative}
  #leadTbl td.ck{position:absolute;top:9px;right:11px;display:block;padding:0}
  #leadTbl td.ck input{width:19px;height:19px}
  /* 服务进胶囊右对齐可换行 */
  .svcell{justify-content:space-between}
  .sv-chips{flex-wrap:wrap;gap:5px}
  /* 客资操作按钮一行放下 */
  #leadTbl td[data-l="操作"]{flex-wrap:wrap;justify-content:flex-start;gap:7px;
    padding-top:8px;border-top:1px dashed #eceff3;margin-top:4px}
  #leadTbl td[data-l="操作"]::before{display:none}
  #leadTbl td[data-l="操作"] .mini{min-height:36px}
  /* 合计卡淡金色底，区分普通单卡 */
  #prjTbl tfoot tr{background:#faf6e8;border-color:#e4d9b8}
  #prjTbl tfoot td{font-weight:700}
  /* 放开列表高度限制，卡片自然滚动；但保留横向滚动，
     否则罗盘里恢复显示的宽表（待跟进 tblNew 等）会把手机页面撑爆 */
  .tablewrap{max-height:none;overflow-x:auto}
  table.tbl{font-size:14px}
}

/* ================= 对比分析：图例 + 一句话结论（勇哥 09-09：要一目了然） ================= */
.cmp-legend{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin:2px 0 10px;
  font-size:12px;color:#4a5058}
.cmp-legend span{display:inline-flex;align-items:center;gap:5px}
.cmp-legend .lg{width:16px;height:10px;border-radius:3px;display:inline-block;flex:none}
.cmp-legend .lg.cur{background:linear-gradient(180deg,#1f6feb,#6cb6ff)}
.cmp-legend .lg.yoy{background:#c8d6ea;border:1px dashed #9db4d0}
.cmp-legend .lg.mom{background:#f3e2c0;border:1px dashed #cfae72}
.cmp-legend .lgtip{margin-left:auto;color:#8f959e;font-size:11px}
.cmp-summary{background:#f7f9fc;border:1px solid #e3e9f2;border-radius:9px;
  padding:9px 12px;margin-bottom:12px;font-size:13px;color:#1f2329;line-height:1.8}
.cmp-summary b{color:#111;font-weight:700}
.cmp-summary .st{margin-left:3px}
/* 环比柱：浅金虚线，和同比（浅蓝灰虚线）一眼区分 */
.cmp-chart .bmom{background:#f3e2c0;border:1px dashed #cfae72}
.trend.cmp-rows .bmom{background:#f3e2c0;border-top:1px dashed #cfae72;border-bottom:1px dashed #cfae72}
.cmp-chart .cp .dl{display:inline-block;min-width:24px;color:#8f959e;font-size:10px;margin-right:3px}
@media (max-width:768px){
  .cmp-legend{gap:9px;font-size:11px}
  .cmp-legend .lgtip{margin-left:0;flex:1 1 100%}
  .cmp-summary{font-size:13px;line-height:1.9;padding:10px 12px}
}

/* 工信部备案号页脚（上线强制显示） */
.icp-footer{margin-top:24px;padding:14px 16px;border-top:1px solid #e9edf3;
  text-align:center;font-size:12px;color:#8f959e;line-height:1.7}
.icp-footer a{color:#8f959e;text-decoration:none}
.icp-footer a:hover{color:#9a6b0f;text-decoration:underline}
.icp-footer .sep{margin:0 8px;color:#d0d5db}
