/* ===== 外勤助手 v1.x 老板端 · 统一浅色风格 ===== */
* { box-sizing: border-box; margin: 0; padding: 0; -webkit-tap-highlight-color: transparent; }
html, body { height: 100%; }
body {
  font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif;
  background: #e8ecf4;
  color: #111827;
  font-size: 14px;
  line-height: 1.5;
}
#app { max-width: 480px; margin: 0 auto; height: 100vh; background: #f5f6fa; position: relative; display: flex; flex-direction: column; overflow: hidden; box-shadow: 0 0 40px rgba(0,0,0,.08); }

/* 顶部标题 + 搜索 */
.topbar { padding: 16px 16px 10px; background: #f5f6fa; }
.topbar .title { font-size: 20px; font-weight: 800; }
.topbar .sub { font-size: 12px; color: #9aa1ad; margin-top: 2px; }
.search { margin-top: 12px; display: flex; align-items: center; background: #fff; border-radius: 12px; padding: 10px 12px; gap: 8px; box-shadow: 0 1px 3px rgba(0,0,0,.04); }
.search input { flex: 1; border: none; outline: none; font-size: 14px; background: transparent; }
.search .ic { color: #9aa1ad; font-size: 16px; }

/* 滚动内容区 */
.content { flex: 1; overflow-y: auto; -webkit-overflow-scrolling: touch; padding: 4px 14px 16px; }

/* 卡片 */
.card { background: #fff; border-radius: 16px; padding: 15px; margin-bottom: 12px; box-shadow: 0 2px 10px rgba(0,0,0,.04); }
.sec-title { font-size: 14px; font-weight: 700; color: #374151; margin-bottom: 12px; display: flex; justify-content: space-between; align-items: center; }
.sec-title .more { font-size: 12px; color: #3b82f6; font-weight: 500; }

/* 数据概览 2x2 */
.overview { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.ov { background: #f9fafb; border-radius: 14px; padding: 15px; }
.ov .n { font-size: 28px; font-weight: 800; line-height: 1.1; }
.ov .n.r { color: #ef4444; }
.ov .n.b { color: #3b82f6; }
.ov .l { font-size: 12px; color: #9aa1ad; margin-top: 6px; }
.ov.mark { background: #eef2ff; border: 1.5px dashed #c7d2fe; cursor: pointer; }
.ov.mark .n { font-size: 19px; font-weight: 700; color: #3b82f6; }
.ov.mark .l { color: #6b7280; }
.ov.feature { grid-column: 1 / -1; background: linear-gradient(135deg,#3b82f6,#2563eb); border: none; color: #fff; display: flex; align-items: center; justify-content: space-between; padding: 16px; }
.ov.feature .n { color: #fff; font-size: 18px; font-weight: 800; }
.ov.feature .l { color: rgba(255,255,255,.88); margin-top: 3px; }
.ov.feature .ar { font-size: 22px; }

/* 快捷入口 2x3 */
.quick { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 11px; }
.qe { background: #f9fafb; border-radius: 14px; padding: 16px 6px; text-align: center; cursor: pointer; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; min-height: 92px; transition: transform .08s; }
.qe:active { transform: scale(.96); }
.qe .ic { width: 40px; height: 40px; border-radius: 12px; display: flex; align-items: center; justify-content: center; font-size: 20px; }
.qe .lb { font-size: 12.5px; font-weight: 600; color: #374151; }
.qe.c1 { background: #eff6ff; } .qe.c1 .ic { background: #dbeafe; }
.qe.c2 { background: #f0fdf4; } .qe.c2 .ic { background: #dcfce7; }
.qe.c3 { background: #faf5ff; } .qe.c3 .ic { background: #f3e8ff; }
.qe.c4 { background: #fff7ed; } .qe.c4 .ic { background: #ffedd5; }
.qe.c5 { background: #f0f9ff; } .qe.c5 .ic { background: #e0f2fe; }
.qe.c6 { background: #fff1f2; } .qe.c6 .ic { background: #ffe4e6; }

/* 客户列表 */
.cust { display: flex; align-items: center; gap: 12px; padding: 13px 12px; background: #fff; border-radius: 12px; margin-bottom: 9px; box-shadow: 0 1px 4px rgba(0,0,0,.04); cursor: pointer; }
.cust .ph { width: 44px; height: 44px; border-radius: 11px; background: #eef2ff; display: flex; align-items: center; justify-content: center; font-size: 22px; flex-shrink: 0; }
.cust .info { flex: 1; min-width: 0; }
.cust .nm { font-size: 15px; font-weight: 700; }
.cust .meta { font-size: 12px; color: #9aa1ad; margin-top: 3px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cust .badge { font-size: 10px; padding: 2px 7px; border-radius: 20px; font-weight: 600; }
.b-id { background: #eff6ff; color: #3b82f6; }
.b-ag { background: #f0fdf4; color: #16a34a; }
.b-di { background: #fff7ed; color: #d97706; }
.b-lost { background: #f3f4f6; color: #9ca3af; }
.b-gA { background: #fef2f2; color: #dc2626; }
.b-gB { background: #eff6ff; color: #2563eb; }
.b-gC { background: #fffbeb; color: #d97706; }
.b-pending { background: #fff7ed; color: #d97706; }
.b-del { background: #fef2f2; color: #dc2626; }

/* 筛选 chip */
.chips { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 12px; }
.chip { padding: 6px 13px; border-radius: 20px; background: #f3f4f6; color: #6b7280; font-size: 12px; font-weight: 600; cursor: pointer; }
.chip.on { background: #3b82f6; color: #fff; }

/* 产品网格（类商城） */
.prod-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 11px; }
.prod { background: #fff; border-radius: 14px; overflow: hidden; box-shadow: 0 2px 8px rgba(0,0,0,.05); cursor: pointer; display: flex; flex-direction: column; }
.prod .img { height: 96px; display: flex; align-items: center; justify-content: center; font-size: 40px; color: #fff; }
.prod .body { padding: 10px 11px; }
.prod .nm { font-size: 13.5px; font-weight: 700; line-height: 1.3; }
.prod .md { font-size: 11px; color: #9aa1ad; margin-top: 2px; }
.prod .price { font-size: 17px; font-weight: 800; color: #ef4444; margin-top: 6px; display: flex; align-items: baseline; gap: 6px; flex-wrap: wrap; }
.prod .price .u { font-size: 11px; color: #9aa1ad; font-weight: 500; }
.prod .price .moq { font-size: 10px; color: #6b7280; background: #f3f4f6; padding: 1px 6px; border-radius: 6px; font-weight: 600; }
.prod .nm .pm { font-size: 11px; color: #9aa1ad; font-weight: 500; }
/* 产品列表：品牌分组 + 类别折叠树 + 排序 */
.brand-grp { margin-top: 14px; }
.brand-hd { font-size: 13px; font-weight: 700; color: #374151; padding: 6px 2px; border-bottom: 1px solid #eef0f4; margin-bottom: 6px; }
.cat-grp { margin-bottom: 4px; }
.cat-hd { display: flex; align-items: center; gap: 6px; font-size: 12.5px; font-weight: 600; color: #4b5563; padding: 8px 8px; background: #f7f8fa; border-radius: 10px; cursor: pointer; }
.cat-hd .ar { color: #9aa1ad; font-size: 11px; width: 12px; }
.cat-hd .cnt { margin-left: auto; font-size: 11px; color: #9aa1ad; background: #fff; border: 1px solid #e7eaf0; border-radius: 10px; padding: 1px 8px; }
.cat-grp .prod-grid { margin-top: 10px; }
.sort-sel { display: flex; align-items: center; gap: 8px; margin: 12px 0 2px; font-size: 12px; color: #6b7280; }
.sort-sel .sl { font-weight: 600; }
.sort-sel select { flex: 1; max-width: 180px; padding: 8px 10px; border: 1px solid #e7eaf0; border-radius: 10px; font-size: 13px; color: #374151; background: #fff; }
/* 导出：Word 表格预览 */
.xsel { padding: 9px 10px; border: 1px solid #e7eaf0; border-radius: 10px; font-size: 13px; color: #374151; background: #fff; }
.xtable-wrap { overflow-x: auto; border: 1px solid #e7eaf0; border-radius: 10px; }
table.xls { border-collapse: collapse; width: 100%; font-size: 12px; min-width: 560px; }
table.xls th, table.xls td { border: 1px solid #e2e5ec; padding: 7px 8px; text-align: left; white-space: nowrap; }
table.xls thead th { background: #1f3a8a; color: #fff; font-weight: 600; }
table.xls tbody tr:nth-child(even) { background: #f6f8fc; }
/* 客户详情：产品价格表 / 分享 */
.ptab-wrap { overflow-x: auto; border: 1px solid #e7eaf0; border-radius: 10px; margin-top: 6px; }
table.ptab { border-collapse: collapse; width: 100%; font-size: 11.5px; min-width: 480px; }
table.ptab th, table.ptab td { border: 1px solid #e2e5ec; padding: 6px 7px; text-align: left; white-space: nowrap; }
table.ptab thead th { background: #1f3a8a; color: #fff; font-weight: 600; }
table.ptab tbody tr:nth-child(even) { background: #f6f8fc; }
.prod .tags { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 7px; }
.tag { font-size: 10px; padding: 2px 6px; border-radius: 6px; font-weight: 600; }
.tag-onsale { background: #f0fdf4; color: #16a34a; }
.tag-offsale { background: #f3f4f6; color: #9ca3af; }
.tag-unreleased { background: #fff7ed; color: #d97706; }
.tag-spec { background: #fef2f2; color: #dc2626; }
.tag-feat { background: #eff6ff; color: #2563eb; }

/* 地图 */
.map-page { flex: 1; display: flex; flex-direction: column; position: relative; }
.map-area { flex: 1; position: relative; margin: 0 -14px; overflow: hidden;
  background: linear-gradient(160deg,#dbe7fb 0%,#e6f0ea 45%,#f1e9df 100%); }
.map-area.inline { flex: none; height: 420px; }
.map-area.selectable .mk { cursor: pointer; }
.map-area.selectable .mk.selected { box-shadow: 0 0 0 4px rgba(59,130,246,.55), 0 0 0 8px rgba(59,130,246,.2); }
.map-area.selectable .mk-lbl { pointer-events: none; }
.map-grid { position: absolute; inset: 0; opacity: .4; background-image: linear-gradient(#c7d2df 1px,transparent 1px), linear-gradient(90deg,#c7d2df 1px,transparent 1px); background-size: 40px 40px; }
/* 真实地图容器 + 可缩放包裹层（双指 / 滚轮 / 双击 缩放） */
.map-zoom { position: absolute; inset: 0; transform-origin: 50% 50%; will-change: transform; }
.map-real { position: absolute; inset: 0; width: 100%; height: 100%; }
.map-zoom-ctl { position: absolute; right: 12px; bottom: 56px; z-index: 4; display: flex; flex-direction: column; align-items: center; gap: 6px; }
.map-zoom-ctl .zb { width: 38px; height: 38px; border-radius: 50%; background: rgba(255,255,255,.92); box-shadow: 0 2px 8px rgba(0,0,0,.18); display: flex; align-items: center; justify-content: center; font-size: 17px; font-weight: 700; color: #374151; cursor: pointer; user-select: none; -webkit-user-select: none; }
.map-zoom-ctl .zb:active { background: #eef2ff; transform: scale(.94); }
.loc-pill { position: absolute; top: 12px; left: 14px; font-size: 11px; color: #374151; background: rgba(255,255,255,.85); padding: 5px 10px; border-radius: 20px; box-shadow: 0 1px 4px rgba(0,0,0,.1); z-index: 3; }
.route-pill { position: absolute; top: 12px; right: 14px; font-size: 12px; color: #fff; background: #3b82f6; padding: 6px 13px; border-radius: 20px; box-shadow: 0 2px 8px rgba(59,130,246,.4); z-index: 3; cursor: pointer; }
.mk { position: absolute; width: 14px; height: 14px; transform: translate(-50%,-50%); box-shadow: 0 0 0 3px rgba(255,255,255,.6); z-index: 2; cursor: pointer; }
.mk.m { background: #3b82f6; border-radius: 50%; }
.mk.a { background: #22c55e; border-radius: 3px; }
.mk.d { width: 0; height: 0; background: none; border-left: 8px solid transparent; border-right: 8px solid transparent; border-bottom: 14px solid #ef4444; box-shadow: none; }
.mk.l { background: #9ca3af; border-radius: 50%; }
.mk.k { background: #ef4444; transform: translate(-50%,-50%) rotate(45deg); border-radius: 3px; width: 12px; height: 12px; }
.mk-lbl { position: absolute; font-size: 9px; background: rgba(255,255,255,.92); padding: 1px 5px; border-radius: 6px; transform: translate(-50%,-160%); white-space: nowrap; color: #374151; box-shadow: 0 1px 3px rgba(0,0,0,.1); z-index: 2; pointer-events: none; }
.map-legend { position: absolute; left: 12px; bottom: 12px; background: rgba(255,255,255,.9); border-radius: 10px; padding: 7px 9px; font-size: 9.5px; line-height: 1.7; z-index: 2; }
.map-legend i { display: inline-block; width: 9px; height: 9px; border-radius: 50%; margin-right: 4px; vertical-align: middle; }
.map-legend .a { background: #22c55e; border-radius: 2px; } .map-legend .dd { background: #ef4444; } .map-legend .l { background: #9ca3af; }

/* 地图底部 6 按钮 */
.map-cats { background: #fff; padding: 11px 12px 13px; border-top: 1px solid #f0f1f4; position: relative; }
.map-cats .grid { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 9px; }
.mc { background: #f4f6f9; border: 1px solid #e7eaf0; border-radius: 12px; padding: 12px 4px; text-align: center; font-size: 12.5px; font-weight: 600; color: #374151; cursor: pointer; position: relative; }
.mc.on { background: #3b82f6; color: #fff; border-color: #3b82f6; }
.mc .em { font-size: 20px; display: block; margin-bottom: 3px; }
.mc .ca { font-size: 9px; color: #9aa1ad; position: absolute; right: 5px; top: 4px; }
.mc.on .ca { color: #dbe3ff; }
.dev-pop { position: absolute; left: 12px; right: 12px; bottom: 100%; margin-bottom: 7px; background: #fff; border: 1px solid #e7eaf0; border-radius: 12px; box-shadow: 0 8px 24px rgba(0,0,0,.14); overflow: hidden; z-index: 6; }
.dev-pop div { padding: 11px 14px; font-size: 13px; border-bottom: 1px solid #f3f4f6; cursor: pointer; }
.dev-pop div:last-child { border-bottom: none; }
.dev-pop div.sel { color: #3b82f6; font-weight: 700; background: #eff6ff; }

/* 底部标签 */
.tabbar { display: flex; background: #fff; border-top: 1px solid #f0f1f4; padding: 6px 0 10px; flex-shrink: 0; }
.tab { flex: 1; text-align: center; font-size: 11px; color: #9aa1ad; font-weight: 600; cursor: pointer; }
.tab .em { font-size: 20px; display: block; margin-bottom: 2px; }
.tab.on { color: #3b82f6; }

/* 弹层/整页 */
.page-overlay { position: absolute; inset: 0; background: #f5f6fa; z-index: 20; display: flex; flex-direction: column; }
.page-overlay.anim { animation: slideup .22s ease; }
@keyframes slideup { from { transform: translateY(20px); opacity: .4; } to { transform: translateY(0); opacity: 1; } }
.page-head { display: flex; align-items: center; padding: 14px 14px 10px; background: #f5f6fa; flex-shrink: 0; }
.page-head .back { font-size: 22px; cursor: pointer; color: #374151; width: 32px; }
.page-head .ttl { font-size: 17px; font-weight: 800; flex: 1; text-align: center; }
.page-head .right { font-size: 13px; color: #3b82f6; font-weight: 600; cursor: pointer; width: 56px; text-align: right; }

/* 整页详情内容（R19：原半屏 sheet 改为整页 .page-overlay） */
.content h3 { font-size: 17px; font-weight: 800; margin-bottom: 4px; }
.sub2 { font-size: 12px; color: #9aa1ad; margin-bottom: 12px; }
.kv { display: flex; justify-content: space-between; padding: 9px 0; border-bottom: 1px solid #f3f4f6; font-size: 13px; }
.kv .k { color: #9aa1ad; } .kv .v { color: #374151; font-weight: 600; text-align: right; }
.sheet-actions { display: flex; gap: 10px; margin-top: 16px; }
.btn { flex: 1; text-align: center; padding: 12px 0; border-radius: 12px; font-size: 14px; font-weight: 700; cursor: pointer; border: none; }
.btn.b { background: #3b82f6; color: #fff; } .btn.g { background: #22c55e; color: #fff; } .btn.r { background: #ef4444; color: #fff; }
.btn.line { background: #fff; color: #3b82f6; border: 1.5px solid #3b82f6; } .btn.gray { background: #f3f4f6; color: #6b7280; }

/* 设置行 */
.set-row { display: flex; align-items: center; justify-content: space-between; padding: 14px 0; border-bottom: 1px solid #f3f4f6; }
.set-row:last-child { border-bottom: none; }
.set-row .lt { font-size: 14px; color: #374151; font-weight: 500; }
.set-row .rt { font-size: 13px; color: #6b7280; display: flex; align-items: center; gap: 6px; }
.set-row input { width: 52px; border: 1px solid #e5e7eb; border-radius: 8px; padding: 6px 4px; text-align: center; font-size: 14px; }
.seg { display: flex; background: #f3f4f6; border-radius: 10px; padding: 3px; }
.seg div { flex: 1; text-align: center; font-size: 12px; padding: 7px 0; border-radius: 8px; color: #6b7280; cursor: pointer; }
.seg div.on { background: #fff; color: #111827; font-weight: 700; box-shadow: 0 1px 3px rgba(0,0,0,.08); }
.pill3 span { font-size: 12px; padding: 6px 14px; border-radius: 20px; border: 1px solid #e5e7eb; color: #6b7280; cursor: pointer; }
.pill3 span.on { background: #3b82f6; color: #fff; border-color: #3b82f6; }
.field { margin-top: 12px; }
.field .lab { font-size: 12px; color: #6b7280; margin-bottom: 4px; }
.field .box { background: #f9fafb; border: 1px solid #f3f4f6; border-radius: 8px; padding: 9px 11px; font-size: 12px; color: #4b5563; word-break: break-all; }
.field input { width: 100%; border: 1px solid #e5e7eb; border-radius: 8px; padding: 9px 11px; font-size: 13px; outline: none; }

/* 资料库文档 */
.doc { display: flex; align-items: center; gap: 12px; padding: 13px; background: #f9fafb; border-radius: 12px; margin-bottom: 9px; }
.doc .ic { width: 42px; height: 42px; border-radius: 11px; display: flex; align-items: center; justify-content: center; font-size: 19px; color: #fff; flex-shrink: 0; }
.doc .nm { font-size: 14px; font-weight: 700; color: #374151; }
.doc .meta { font-size: 11px; color: #9aa1ad; margin-top: 2px; }
.doc .del { margin-left: auto; font-size: 12px; color: #ef4444; cursor: pointer; padding: 4px 8px; border-radius: 8px; background: #fef2f2; }
.upload-btn { width: 100%; text-align: center; padding: 14px 0; border-radius: 12px; font-size: 14px; font-weight: 700; color: #3b82f6; border: 1.5px dashed #93c5fd; background: #f5f9ff; cursor: pointer; margin-bottom: 12px; }
.contact-card { background: linear-gradient(135deg,#eff6ff,#f0f9ff); border: 1.5px dashed #93c5fd; border-radius: 14px; padding: 15px; margin-top: 4px; }
.contact-card .t { font-size: 14px; font-weight: 700; color: #1d4ed8; margin-bottom: 5px; }
.contact-card .d { font-size: 12px; color: #3b82f6; margin-bottom: 11px; }

/* 快速标记相机风 */
.qm-capture { display: flex; gap: 10px; margin-bottom: 14px; }
.qm-cap { flex: 1; background: #111827; border-radius: 14px; height: 92px; display: flex; flex-direction: column; align-items: center; justify-content: center; color: #fff; font-size: 12px; gap: 4px; }
.qm-cap .em { font-size: 26px; }
.qm-cap.done { background: #22c55e; }
.qm-auto { background: #eef2ff; border: 1.5px dashed #c7d2fe; border-radius: 14px; padding: 11px; margin-bottom: 14px; }
.qm-auto .row { display: flex; justify-content: space-between; font-size: 12px; padding: 4px 0; color: #374151; }
.qm-auto .row .v { color: #3b82f6; font-weight: 600; }

/* 通用提示 */
.toast { position: absolute; left: 50%; top: 50%; transform: translate(-50%,-50%); background: rgba(17,24,39,.9); color: #fff; padding: 12px 20px; border-radius: 12px; font-size: 14px; z-index: 99; pointer-events: none; }
/* 删除客户二次确认弹窗 */
.confirm-mask { position: absolute; inset: 0; background: rgba(0,0,0,.45); z-index: 120; display: flex; align-items: center; justify-content: center; padding: 0 28px; }
.confirm-box { background: #fff; border-radius: 16px; width: 100%; max-width: 320px; padding: 18px 18px 14px; box-shadow: 0 12px 40px rgba(0,0,0,.25); }
.confirm-box .ct { font-size: 16px; font-weight: 700; color: #111827; }
.confirm-box .cm { font-size: 13px; color: #6b7280; line-height: 1.6; margin: 10px 0 16px; }
.confirm-box .cm b { color: #ef4444; }
.confirm-box .cbtns { display: flex; gap: 10px; }
.confirm-box .cb { flex: 1; text-align: center; padding: 11px 0; border-radius: 11px; font-size: 14px; font-weight: 600; cursor: pointer; }
.confirm-box .cb.gray { background: #f3f4f6; color: #374151; }
.confirm-box .cb.danger { background: #ef4444; color: #fff; }
.confirm-box .cb:active { opacity: .85; }
.empty { text-align: center; color: #9aa1ad; font-size: 13px; padding: 40px 0; }

/* ===== v1.x 新增：地图分类 / 查看半屏拖拽 / 我的设置 / 操作日志 ===== */

/* 地图分类按钮 2x3 */
.map-cats { padding: 10px 14px calc(10px + env(safe-area-inset-bottom)); background: #f5f6fa; }
.map-cats .grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
.mc { background: #fff; border-radius: 14px; padding: 14px 6px; display: flex; flex-direction: column; align-items: center; gap: 5px; font-size: 13px; font-weight: 700; color: #4b5563; box-shadow: 0 2px 8px rgba(0,0,0,.05); cursor: pointer; border: 2px solid transparent; position: relative; }
.mc .em { font-size: 22px; }
.mc.on { border-color: #3b82f6; background: #eff6ff; color: #1d4ed8; }
.dev-pop { background: #fff; border-radius: 12px; padding: 8px; margin-bottom: 10px; box-shadow: 0 4px 14px rgba(0,0,0,.1); display: flex; flex-direction: column; gap: 4px; }
.dev-pop div { padding: 10px 12px; border-radius: 9px; font-size: 13px; font-weight: 600; color: #374151; cursor: pointer; }
.dev-pop div.sel { background: #eff6ff; color: #1d4ed8; }

/* 地图数据来源说明 */
.map-src { position: absolute; right: 8px; bottom: 8px; font-size: 9px; color: #9aa1ad; background: rgba(255,255,255,.8); padding: 2px 6px; border-radius: 6px; }

/* （R19 已移除半屏 sheet / 上拉全屏 / 下拉收起 铁律，改为整页 .page-overlay） */

/* 客户列表：等级徽章（绿/蓝/橙） */
.b-gradeA { background: #dcfce7; color: #16a34a; }
.b-gradeB { background: #dbeafe; color: #2563eb; }
.b-gradeC { background: #ffedd5; color: #d97706; }
/* 整页浮层层级由内联 z-index（this._z）动态控制，最后打开者置顶（R19） */
/* 导航视图路线卡片 */
.nav-card { background: #f9fafb; border: 1px solid #f0f1f3; border-radius: 12px; padding: 12px 14px; margin-bottom: 10px; }
.nav-route-row { display: flex; justify-content: space-between; padding: 8px 0; border-bottom: 1px dashed #f0f1f3; font-size: 13px; }
.nav-route-row:last-child { border-bottom: none; }
.nav-route-row .v { font-weight: 600; color: #374151; text-align: right; }
.share-route-line { font-size: 13px; color: #374151; line-height: 1.7; white-space: pre-wrap; }
/* 价格表产品图（占位色块 / 真实图） */
.ptab .pimg { width: 38px; height: 38px; border-radius: 8px; object-fit: cover; display: inline-flex; align-items: center; justify-content: center; color: #fff; font-size: 18px; }
.vlist { overflow-y: auto; max-height: 70vh; padding: 0 4px; }

/* 标记符号（异色异符） */
.mk { position: absolute; width: 13px; height: 13px; transform: translate(-50%,-50%); border: 2px solid #fff; box-shadow: 0 1px 3px rgba(0,0,0,.25); }
.mk.m { background: #3b82f6; border-radius: 50%; }
.mk.a { background: #18a058; border-radius: 2px; }
.mk.d { background: #f59e0b; width: 0; height: 0; border: none; border-left: 7px solid transparent; border-right: 7px solid transparent; border-bottom: 13px solid #f59e0b; }
.mk.k { background: #ef4444; transform: translate(-50%,-50%) rotate(45deg); width: 11px; height: 11px; }
.mk.l { background: #9ca3af; border-radius: 50%; }

/* 我的：跟进预警作用范围 / 操作日志 */
.set-row { display: flex; justify-content: space-between; align-items: center; font-size: 13px; color: #374151; padding: 8px 0; }
.set-row.col { flex-direction: column; align-items: flex-start; gap: 8px; }
.set-row input { border: 1px solid #e5e7eb; border-radius: 8px; padding: 4px 8px; width: 60px; text-align: center; }
.wchips { display: flex; flex-wrap: wrap; gap: 8px; }
.wchip { font-size: 12px; padding: 6px 12px; border-radius: 20px; background: #f3f4f6; color: #6b7280; cursor: pointer; border: 1px solid #e5e7eb; }
.wchip.on { background: #eff6ff; color: #1d4ed8; border-color: #93c5fd; }
.hint { font-size: 11px; color: #9aa1ad; margin-top: 8px; }
.pill3 { display: flex; border-radius: 12px; overflow: hidden; border: 1px solid #e5e7eb; }
.pill3 span { flex: 1; text-align: center; padding: 11px 0; font-size: 13px; font-weight: 600; color: #6b7280; cursor: pointer; }
.pill3 span.on { background: #3b82f6; color: #fff; }
.sec-title.collap { cursor: pointer; }
.sec-title.collap .ar { font-size: 14px; color: #9aa1ad; }
.op { font-size: 12px; color: #6b7280; padding: 8px 0; border-bottom: 1px dashed #f3f4f6; }
.op .t { color: #9aa1ad; margin-right: 4px; }
.card.lock { background: #f9fafb; }

/* 地图接口配置 */
.mapcfg-providers { display: grid; grid-template-columns: repeat(3,1fr); gap: 10px; }
.field { margin-bottom: 12px; }
.field .lab { font-size: 12px; color: #9aa1ad; margin-bottom: 6px; }
.field .box { width: 100%; border: 1px solid #e5e7eb; border-radius: 10px; padding: 10px 12px; font-size: 13px; background: #f9fafb; color: #374151; }
.field input.box { background: #fff; outline: none; }

/* 产品管理授权开关 */
.perm-row { display: flex; justify-content: space-between; align-items: center; padding: 10px 0; border-bottom: 1px dashed #f3f4f6; }
.perm-row:last-child { border-bottom: none; }
.pr-l { display: flex; align-items: center; gap: 10px; }
.pr-l .av { font-size: 24px; }
.pr-n { font-size: 14px; font-weight: 600; color: #374151; }
.pr-id { font-size: 11px; color: #9aa1ad; }
.switch { width: 42px; height: 24px; border-radius: 12px; background: #e5e7eb; position: relative; transition: background .2s; cursor: pointer; flex: none; }
.switch.on { background: #3b82f6; }
.switch-dot { width: 20px; height: 20px; border-radius: 50%; background: #fff; position: absolute; top: 2px; left: 2px; transition: left .2s; box-shadow: 0 1px 3px rgba(0,0,0,.2); }
.switch.on .switch-dot { left: 20px; }
.link { color: #3b82f6; cursor: pointer; }

/* 业务员端：快捷入口 2x2（移除售后分析、团队管理后） */
.quick.sales { grid-template-columns: repeat(3, 1fr); }
.ov.clickable { cursor: pointer; }

/* 拜访签到 */
.visit-type { display: flex; gap: 10px; }
.visit-type-btn { flex: 1; text-align: center; padding: 10px 0; border-radius: 10px; background: #f3f4f6; color: #6b7280; font-size: 13px; font-weight: 600; cursor: pointer; }
.visit-type-btn.active { background: #3b82f6; color: #fff; }
.visit-photo { background: #f9fafb; border: 1.5px dashed #c7d2fe; border-radius: 14px; height: 180px; display: flex; flex-direction: column; align-items: center; justify-content: center; color: #6b7280; font-size: 12px; gap: 8px; cursor: pointer; margin-top: 10px; }
.visit-photo .cam { font-size: 48px; }
.visit-watermark { background: #111827; color: #fff; font-size: 10px; padding: 8px 10px; border-radius: 0 0 12px 12px; display: flex; flex-wrap: wrap; gap: 8px; margin-top: -14px; }
.visit-watermark span { opacity: .9; }
.gps-info { display: flex; align-items: center; gap: 6px; font-size: 12px; color: #374151; margin-top: 10px; }
.gps-info .dot { width: 8px; height: 8px; border-radius: 50%; background: #22c55e; animation: pulse 1.2s infinite; }
.visit-photo.has-photo { height: auto; border: none; background: none; padding: 0; justify-content: flex-start; }
.visit-photo.has-photo img { width: 100%; border-radius: 14px; display: block; }
.gps-info .dot.on { animation: none; background: #22c55e; }
.gps-info .dot:not(.on) { background: #9ca3af; animation: none; }
@keyframes pulse { 0% { opacity: 1; } 50% { opacity: .4; } 100% { opacity: 1; } }

/* AI 日报提取结果 */
.extracted-customer { background: #f9fafb; border-radius: 10px; padding: 10px 12px; margin-bottom: 10px; }
.extracted-customer .kv { padding: 5px 0; font-size: 12px; }
.extracted-customer .kv .k { color: #9aa1ad; }

/* 当前业务员选择器 */
select.box { width: 100%; border: 1px solid #e5e7eb; border-radius: 10px; padding: 10px 12px; font-size: 13px; background: #f9fafb; color: #374151; outline: none; }

/* ===== v0.9 客户详情合并：信用评分 / 画像 / 订单 / 建议 / 拜访 ===== */
.section-title { font-size: 14px; font-weight: 700; color: #374151; margin: 16px 0 8px; }
.credit-card .cs-head { display: flex; justify-content: space-between; align-items: center; }
.credit-card .cs-grade { display: flex; align-items: center; gap: 8px; }
.credit-card .cs-num { font-size: 22px; font-weight: 800; }
.credit-card .cs-badge { font-size: 12px; padding: 2px 10px; border-radius: 999px; color: #fff; }
.cg-A { background: #16a34a; } .cg-B { background: #2563eb; } .cg-C { background: #d97706; } .cg-D { background: #dc2626; }
.credit-card .cs-label { font-size: 12px; color: #9aa1ad; margin: 6px 0 8px; }
.cs-dim { margin-bottom: 8px; }
.cs-dim-top { display: flex; justify-content: space-between; font-size: 12px; margin-bottom: 3px; }
.cs-dim-top i { color: #9aa1ad; font-style: normal; font-weight: 400; }
.score-bar { height: 7px; border-radius: 999px; background: #eef0f3; overflow: hidden; }
.score-fill { height: 100%; border-radius: 999px; }
.ai-tag { font-size: 10px; color: #9aa1ad; font-weight: 400; background: #f1f5f9; padding: 1px 6px; border-radius: 999px; margin-left: 4px; }
.order-card { display: flex; justify-content: space-between; gap: 10px; background: #f9fafb; border: 1px solid #f0f1f3; border-radius: 10px; padding: 10px 12px; margin-bottom: 8px; }
.oc-name { font-size: 14px; font-weight: 600; color: #374151; }
.oc-amt { font-size: 15px; color: #dc2626; font-weight: 700; margin-top: 2px; }
.oc-meta { font-size: 11px; color: #9aa1ad; margin-top: 3px; }
.pay-tag { font-size: 11px; padding: 2px 8px; border-radius: 6px; }
.pay-paid { background: #dcfce7; color: #16a34a; }
.pay-pending { background: #fef9c3; color: #a16207; }
.pay-overdue { background: #fee2e2; color: #dc2626; }
.oc-empty, .ac-empty { font-size: 13px; color: #9aa1ad; text-align: center; padding: 12px; }
.advice-card { background: #f9fafb; border-left: 3px solid #3b82f6; border-radius: 8px; padding: 8px 10px; margin-bottom: 8px; }
.advice-head { font-size: 11px; color: #9aa1ad; margin-bottom: 3px; }
.advice-text { font-size: 13px; color: #374151; line-height: 1.5; }
.timeline { padding-left: 4px; }
.timeline-item { padding: 8px 0 8px 14px; border-left: 2px solid #e5e7eb; position: relative; margin-left: 4px; }
.timeline-item::before { content: ''; position: absolute; left: -5px; top: 12px; width: 8px; height: 8px; border-radius: 50%; background: #3b82f6; }
.ti-time { font-size: 12px; font-weight: 600; color: #374151; }
.ti-content { font-size: 13px; color: #4b5563; margin-top: 2px; }
.ti-loc { font-size: 11px; color: #9aa1ad; margin-top: 3px; }

/* ===== 售后分析三看板 ===== */
.ai-insight { background: #eef2ff; border: 1px solid #c7d2fe; }
.as-bar { margin-bottom: 10px; }
.as-bar-top { display: flex; justify-content: space-between; font-size: 13px; margin-bottom: 4px; }
.as-bar-top .lk { color: #2563eb; cursor: pointer; }
.as-bar-sub { font-size: 11px; color: #9aa1ad; margin-top: 3px; }
.month-chart { display: flex; align-items: flex-end; gap: 10px; height: 120px; padding: 0 4px; }
.mc-col { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: flex-end; height: 100%; }
.mc-num { font-size: 11px; color: #4b5563; margin-bottom: 3px; }
.mc-bar { width: 100%; max-width: 40px; border-radius: 6px 6px 0 0; background: linear-gradient(180deg, #f59e0b, #d97706); }
.mc-lab { font-size: 10px; color: #9aa1ad; margin-top: 5px; }

/* ===== 路书规划器 ===== */
.customer-item { display: flex; align-items: center; gap: 10px; background: #fff; border: 1px solid #f0f1f3; border-radius: 12px; padding: 10px 12px; margin-bottom: 8px; }
.customer-item.item-lost { opacity: .6; }
.customer-avatar { width: 40px; height: 40px; border-radius: 10px; background: #eef2ff; display: flex; align-items: center; justify-content: center; font-size: 22px; }
.customer-info { flex: 1; min-width: 0; }
.customer-info .name { font-size: 14px; font-weight: 600; color: #374151; }
.customer-info .meta { font-size: 11px; color: #9aa1ad; margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mini-btn { font-size: 12px; padding: 4px 10px; border-radius: 8px; background: #eef2ff; color: #3730a3; border: none; }
.mini-btn.danger { background: #fee2e2; color: #dc2626; }
.route-sum { display: flex; justify-content: space-around; text-align: center; margin-bottom: 10px; }
.route-sum div { display: flex; flex-direction: column; }
.route-sum b { font-size: 18px; color: #3b82f6; }
.route-sum span { font-size: 11px; color: #9aa1ad; }
.route-stop { display: flex; align-items: center; gap: 10px; padding: 10px 0; border-bottom: 1px dashed #f0f1f3; }
.rs-num { width: 24px; height: 24px; border-radius: 50%; background: #3b82f6; color: #fff; font-size: 12px; font-weight: 700; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.route-stop .nm { font-size: 14px; font-weight: 600; color: #374151; }
.route-stop .meta { font-size: 11px; color: #9aa1ad; margin-top: 2px; }
.item-actions { display: flex; gap: 6px; flex-shrink: 0; }

/* ===== 智能路书 / 路线规划新 UI ===== */
.map-cats-hint { font-size: 10.5px; color: #9aa1ad; line-height: 1.5; padding: 0 2px 8px; border-bottom: 1px dashed #eef0f4; margin-bottom: 10px; }
.route-entry { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 10px; }
.re { background: #fff; border: 2px solid #e7eaf0; border-radius: 14px; padding: 14px 6px; text-align: center; cursor: pointer; display: flex; flex-direction: column; align-items: center; gap: 6px; box-shadow: 0 2px 8px rgba(0,0,0,.05); }
.re:active { transform: scale(.96); }
.re .re-ic { width: 38px; height: 38px; border-radius: 12px; background: #eff6ff; display: flex; align-items: center; justify-content: center; font-size: 20px; }
.re.custom { border-style: dashed; }
.re.custom .re-ic { background: #f3f4f6; }
.re .re-lb { font-size: 12.5px; font-weight: 700; color: #4b5563; }
/* 路线规划页：途径点标记 + 实时路线 */
.mk.wp-sel { box-shadow: 0 0 0 3px rgba(255,255,255,.9), 0 0 0 6px #3b82f6; z-index: 3; }
.mk .wp-n { position: absolute; top: 50%; left: 50%; transform: translate(-50%,-50%); font-size: 8px; font-weight: 800; color: #fff; }
.mk.d.wp-sel { box-shadow: 0 0 0 3px rgba(255,255,255,.9), 0 0 0 6px #f59e0b; }
.route-svg { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; z-index: 1; }
.route-svg polyline { fill: none; stroke: #3b82f6; stroke-width: 3; stroke-dasharray: 6 5; stroke-linejoin: round; stroke-linecap: round; opacity: .85; }

/* ===== 产品列表：品牌横滑行（精致、一行、左右滑动） ===== */
.brand-row { display: flex; gap: 8px; overflow-x: auto; padding: 4px 2px 10px; -webkit-overflow-scrolling: touch; scrollbar-width: none; }
.brand-row::-webkit-scrollbar { display: none; }
.brand-row .chip { flex: none; padding: 9px 16px; font-size: 13.5px; border-radius: 22px; box-shadow: 0 1px 4px rgba(0,0,0,.05); }
.brand-row .brand-chip.on { background: #3b82f6; color: #fff; box-shadow: 0 2px 8px rgba(59,130,246,.35); }
.brand-add { flex: none; padding: 9px 15px; border-radius: 22px; background: #fff; color: #3b82f6; border: 1.5px dashed #93c5fd; font-size: 13px; font-weight: 700; cursor: pointer; display: inline-flex; align-items: center; gap: 3px; }

/* ===== 产品列表：分类图标网格（一行 3 个往下排） ===== */
.cat-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin: 4px 0 4px; }
.cat-icon { position: relative; background: #fff; border: 1.5px solid #eef0f3; border-radius: 14px; padding: 14px 6px 10px; text-align: center; cursor: pointer; display: flex; flex-direction: column; align-items: center; gap: 5px; box-shadow: 0 1px 6px rgba(0,0,0,.04); transition: border-color .15s, transform .1s; }
.cat-icon:active { transform: scale(.96); }
.cat-icon.on { border-color: #3b82f6; background: #eff6ff; box-shadow: 0 2px 10px rgba(59,130,246,.18); }
.cat-icon .ci-em { width: 40px; height: 40px; border-radius: 12px; background: #f3f4f6; display: flex; align-items: center; justify-content: center; font-size: 22px; }
.cat-icon.on .ci-em { background: #dbeafe; }
.cat-icon .ci-t { font-size: 12px; font-weight: 600; color: #4b5563; }
.cat-icon.on .ci-t { color: #1d4ed8; }
.cat-icon .ci-cnt { position: absolute; top: 6px; right: 8px; font-size: 10px; color: #9aa1ad; background: #f3f4f6; border-radius: 999px; padding: 1px 6px; }
.cat-icon.add { border-style: dashed; }
.cat-icon.add .ci-em { background: #f3f4f6; color: #9aa1ad; }
.cat-icon.add .ci-t { color: #9aa1ad; }

/* ===== 产品行（双端统一：名称/型号/品牌·类别·价/状态） ===== */
.prod-row { display: flex; align-items: center; gap: 12px; background: #fff; border: 1px solid #f0f1f3; border-radius: 14px; padding: 12px 14px; margin-bottom: 8px; cursor: pointer; }
.prod-row:active { background: #f9fafb; }
.pr-img { width: 46px; height: 46px; border-radius: 12px; flex: none; display: flex; align-items: center; justify-content: center; color: #fff; font-size: 22px; box-shadow: 0 2px 6px rgba(0,0,0,.12); object-fit: cover; }
.pr-body { flex: 1; min-width: 0; }
.pr-nm { font-size: 15px; font-weight: 700; color: #374151; display: flex; align-items: baseline; gap: 6px; }
.pr-m { font-size: 12px; font-weight: 500; color: #9aa1ad; }
.pr-meta { font-size: 12px; color: #6b7280; margin-top: 2px; }
.pr-body .tags { margin-top: 5px; }

/* R20 品牌/分类新 UI */
.brand-row { display: flex; gap: 8px; overflow-x: auto; padding: 4px 2px 10px; -webkit-overflow-scrolling: touch; scrollbar-width: none; }
.brand-row::-webkit-scrollbar { display: none; }
.brand-scroll { display: flex; gap: 8px; }
.brand-chip { flex: none; display: flex; align-items: center; gap: 6px; padding: 8px 14px; background: #fff; border: 1.5px solid #eef0f3; border-radius: 22px; font-size: 13px; font-weight: 600; color: #4b5563; cursor: pointer; box-shadow: 0 1px 4px rgba(0,0,0,.04); }
.brand-chip.on { background: #3b82f6; color: #fff; border-color: #3b82f6; box-shadow: 0 2px 8px rgba(59,130,246,.35); }
.brand-chip.add { border-style: dashed; color: #3b82f6; border-color: #93c5fd; }
.bimg { width: 24px; height: 24px; border-radius: 8px; display: flex; align-items: center; justify-content: center; color: #fff; font-size: 14px; flex: none; object-fit: cover; }
.bimg.big { width: 64px; height: 64px; border-radius: 16px; font-size: 28px; }
.cimg { width: 40px; height: 40px; border-radius: 12px; background: #f3f4f6; display: flex; align-items: center; justify-content: center; font-size: 22px; flex: none; object-fit: cover; }
.cimg.big { width: 64px; height: 64px; border-radius: 16px; font-size: 32px; }
.cat-icon .cimg { margin-bottom: 4px; }
.del-txt { text-align: center; font-size: 12px; color: #ef4444; margin: 14px 0 8px; cursor: pointer; text-decoration: underline; opacity: .85; }
.del-txt:active { opacity: 1; }
.emoji-grid { display: grid; grid-template-columns: repeat(6, 1fr); gap: 8px; }
.em-item { width: 40px; height: 40px; border-radius: 10px; background: #f3f4f6; display: flex; align-items: center; justify-content: center; font-size: 20px; cursor: pointer; border: 1.5px solid transparent; }
.em-item.on { border-color: #3b82f6; background: #eff6ff; }

/* ===== 待审核中心：审核项 ===== */
.rv-item { display: flex; align-items: center; gap: 10px; background: #fff; border: 1px solid #f0f1f3; border-radius: 12px; padding: 10px 12px; margin-bottom: 8px; }
.rvbox { width: 18px; height: 18px; flex: none; accent-color: #3b82f6; cursor: pointer; }
.rv-main { flex: 1; min-width: 0; }
.rv-t { font-size: 14px; font-weight: 600; color: #374151; display: flex; align-items: center; gap: 6px; }
.rv-tag { font-size: 10px; padding: 1px 7px; border-radius: 999px; background: #eff6ff; color: #2563eb; font-weight: 600; }
.rv-tag.del { background: #fee2e2; color: #dc2626; }
.rv-s { font-size: 11px; color: #9aa1ad; margin-top: 3px; }
.rv-btns { display: flex; flex-direction: column; gap: 6px; flex-shrink: 0; }
.mini-btn.ok { background: #e7f6ec; color: #16a34a; }
.mini-btn.no { background: #fde8e8; color: #dc2626; }
.rep-sub { font-size: 12px; padding: 6px 12px; border-radius: 20px; background: #1f8a70; color: #fff; font-weight: 600; white-space: nowrap; cursor: pointer; }
.rep-sub.done { background: #e7f6ec; color: #16a34a; cursor: default; }
.r-tag { font-size: 11px; padding: 1px 7px; border-radius: 10px; background: #fff4e5; color: #d97706; }
.upload-drop { display: block; text-align: center; padding: 26px 0; border-radius: 12px; border: 1.5px dashed #93c5fd; background: #f5f9ff; color: #3b82f6; font-size: 14px; font-weight: 700; cursor: pointer; }
.upload-drop:hover { background: #eef5ff; }
.doc-prev { display: flex; align-items: center; gap: 10px; margin-top: 12px; padding: 10px; background: #f9fafb; border-radius: 12px; }
.doc-prev .ic { width: 40px; height: 40px; border-radius: 10px; display: flex; align-items: center; justify-content: center; font-size: 18px; color: #3b82f6; }
.prev-img { max-width: 100%; border-radius: 12px; margin-top: 12px; max-height: 220px; object-fit: cover; display: block; }
.link-prev { display: block; margin-top: 10px; padding: 10px 12px; background: #f5f3ff; border-radius: 10px; color: #6366f1; font-size: 13px; word-break: break-all; text-decoration: none; }
.doc-body { flex: 1; min-width: 0; }
.ic-img { width: 42px; height: 42px; border-radius: 11px; object-fit: cover; flex-shrink: 0; }
.box { width: 100%; box-sizing: border-box; border: 1px solid #e5e7eb; border-radius: 10px; padding: 9px 11px; font-size: 14px; font-family: inherit; background: #fff; }
textarea.box { resize: vertical; }

