/* PCB 检测设备 · 客户管理系统  样式 */
:root{
  --bg:#f4f6f9;
  --bg-2:#eef1f6;
  --bg-3:#e6eaf1;
  --panel:#ffffff;
  --line:#e3e8ef;
  --line-soft:#eff2f6;
  --text:#1c2533;
  --text-2:#5b6779;
  --text-3:#8b96a8;
  --brand:#1e6fd9;
  --brand-dark:#1558ad;
  --brand-soft:#e8f1fd;
  --side:#1b2431;
  --side-2:#243044;
  --ok:#12805c;
  --ok-soft:#e3f5ee;
  --warn:#b7791f;
  --warn-soft:#fdf3e0;
  --danger:#c0392b;
  --danger-soft:#fdecea;
  --purple:#6b46c1;
  --purple-soft:#efe9fb;
  --radius:10px;
  --shadow:0 1px 2px rgba(16,24,40,.05),0 4px 12px rgba(16,24,40,.05);
}
*{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0;background:var(--bg);color:var(--text);
  font:14px/1.6 "Microsoft YaHei","PingFang SC","Helvetica Neue",Arial,sans-serif;
  -webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none}
button,input,select,textarea{font-family:inherit;font-size:14px}
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:#c8d0dc;border-radius:6px}
::-webkit-scrollbar-track{background:transparent}

#app{display:flex;height:100vh;overflow:hidden}

/* ---------------- 侧边栏 ---------------- */
.sidebar{width:212px;flex:0 0 212px;background:var(--side);color:#c7d1e0;display:flex;flex-direction:column}
.brand{display:flex;align-items:center;gap:10px;padding:18px 16px 16px}
.brand-mark{width:36px;height:36px;border-radius:9px;background:linear-gradient(135deg,#2f8cf0,#1a5fb4);color:#fff;
  display:flex;align-items:center;justify-content:center;font-weight:700;font-size:12px;letter-spacing:.5px}
img.brand-logo{background:none;border-radius:8px;object-fit:contain;padding:0;width:36px;height:36px;flex:0 0 auto}
.login-brand img.brand-logo{width:42px;height:42px}
.brand-text{min-width:0}
.brand-text strong{display:block;color:#fff;font-size:14px;line-height:1.3}
.brand-text span{font-size:11.5px;color:#9fb0c7;display:block;line-height:1.4;word-break:break-all}
.nav{flex:1;overflow-y:auto;padding:6px 10px 16px}
.nav-group{font-size:11px;color:#6c7a90;padding:14px 8px 6px;letter-spacing:.5px}
.nav-item{display:flex;align-items:center;gap:9px;padding:9px 10px;border-radius:8px;cursor:pointer;
  color:#c7d1e0;font-size:13.5px;transition:.15s;margin-bottom:2px}
.nav-item:hover{background:var(--side-2);color:#fff}
.nav-item.active{background:var(--brand);color:#fff;font-weight:600}
.nav-item i{font-style:normal;font-size:9px;opacity:.5}
.nav-item.active i{opacity:.9}
.nav-item em{margin-left:auto;font-style:normal;font-size:11px;background:rgba(255,255,255,.12);
  padding:1px 6px;border-radius:9px;color:#dbe3ee}
.nav-item.active em{background:rgba(255,255,255,.25);color:#fff}
.sidebar-foot{padding:12px 16px;border-top:1px solid rgba(255,255,255,.08);font-size:11.5px;color:#7e8b9f}
.week-badge{color:#9fb0c8;margin-bottom:3px}
.sync-state{display:flex;align-items:center;gap:5px}
.sync-state::before{content:"";width:6px;height:6px;border-radius:50%;background:#39c07c}
.sync-state.err::before{background:#e0574a}

/* ---------------- 主区域 ---------------- */
.main{flex:1;display:flex;flex-direction:column;min-width:0}
.topbar{background:#fff;border-bottom:1px solid var(--line);padding:12px 22px;display:flex;
  align-items:center;gap:18px;flex-wrap:wrap}
.page-title h1{margin:0;font-size:17px;font-weight:600}
.page-title p{margin:1px 0 0;font-size:12px;color:var(--text-3)}
.topbar-actions{margin-left:auto;display:flex;align-items:center;gap:10px}
.global-search{position:relative}
.global-search input{width:230px;padding:7px 11px;border:1px solid var(--line);border-radius:8px;background:#f8fafc;outline:none}
.global-search input:focus{border-color:var(--brand);background:#fff;box-shadow:0 0 0 3px var(--brand-soft)}
.search-results{position:absolute;top:110%;right:0;width:360px;max-height:400px;overflow-y:auto;background:#fff;
  border:1px solid var(--line);border-radius:10px;box-shadow:0 12px 30px rgba(16,24,40,.13);z-index:60;display:none}
.search-results.show{display:block}
.sr-item{padding:9px 12px;border-bottom:1px solid var(--line-soft);cursor:pointer}
.sr-item:last-child{border-bottom:0}
.sr-item:hover{background:#f6f9fd}
.sr-item b{font-weight:600}
.sr-item small{display:block;color:var(--text-3);font-size:11.5px}
.sr-empty{padding:14px;color:var(--text-3);text-align:center;font-size:12.5px}
.who{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--text-2)}
.who select{padding:6px 9px;border:1px solid var(--line);border-radius:8px;background:#fff;outline:none}

.view{flex:1;overflow-y:auto;padding:20px 22px 60px}

/* ---------------- 按钮 ---------------- */
.btn{border:1px solid var(--line);background:#fff;color:var(--text);padding:7px 14px;border-radius:8px;cursor:pointer;
  transition:.15s;white-space:nowrap;display:inline-flex;align-items:center;gap:5px}
.btn:hover{border-color:#c3cdda;background:#fafbfd}
.btn-primary{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:600}
.btn-primary:hover{background:var(--brand-dark);border-color:var(--brand-dark)}
.btn-danger{color:var(--danger);border-color:#f0c9c4;background:#fff}
.btn-danger:hover{background:var(--danger-soft)}
.btn-sm{padding:4px 9px;font-size:12.5px;border-radius:6px}
.btn-ghost{background:transparent}
.btn:disabled{opacity:.5;cursor:not-allowed}

/* ---------------- 卡片 ---------------- */
.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:16px}
.card-head{display:flex;align-items:center;gap:10px;padding:13px 16px;border-bottom:1px solid var(--line-soft)}
.card-head h3{margin:0;font-size:14.5px;font-weight:600}
.card-head .sub{font-size:12px;color:var(--text-3)}
.card-head .right{margin-left:auto;display:flex;gap:8px;align-items:center}
.card-body{padding:16px}
.card-body.tight{padding:10px 16px}

.grid{display:grid;gap:16px}
.g2{grid-template-columns:repeat(2,minmax(0,1fr))}
.g3{grid-template-columns:repeat(3,minmax(0,1fr))}
.g4{grid-template-columns:repeat(4,minmax(0,1fr))}
.g5{grid-template-columns:repeat(5,minmax(0,1fr))}
@media(max-width:1400px){.g5{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:1180px){.g4{grid-template-columns:repeat(2,minmax(0,1fr))}.g3{grid-template-columns:repeat(2,minmax(0,1fr))}.g5{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:860px){.g2,.g3,.g4,.g5{grid-template-columns:1fr}}

/* ---------------- KPI ---------------- */
.kpi{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px;box-shadow:var(--shadow)}
.kpi .label{font-size:12.5px;color:var(--text-2);display:flex;align-items:center;gap:5px}
.kpi .value{font-size:25px;font-weight:700;letter-spacing:-.5px;margin-top:5px;line-height:1.2}
.kpi .value small{font-size:13px;font-weight:500;color:var(--text-3);margin-left:3px}
.kpi .foot{font-size:11.5px;color:var(--text-3);margin-top:4px}
.kpi.accent{background:linear-gradient(135deg,#1e6fd9,#2f8cf0);border-color:transparent;color:#fff}
.kpi.accent .label,.kpi.accent .foot{color:rgba(255,255,255,.82)}
.kpi.accent .value small{color:rgba(255,255,255,.85)}

.up{color:#c0392b}
.down{color:#12805c}
.muted{color:var(--text-3)}

/* ---------------- 表格 ---------------- */
.table-wrap{overflow-x:auto}
table.tbl{width:100%;border-collapse:collapse;font-size:13px}
table.tbl th{text-align:left;font-weight:600;color:var(--text-2);font-size:12px;padding:9px 10px;
  border-bottom:1px solid var(--line);background:#fafbfc;white-space:nowrap;position:sticky;top:0}
table.tbl td{padding:10px;border-bottom:1px solid var(--line-soft);vertical-align:top}
table.tbl tr:hover td{background:#f9fbfe}
table.tbl tr.clickable{cursor:pointer}
table.tbl td.num,table.tbl th.num{text-align:right;font-variant-numeric:tabular-nums}
table.tbl .cell-main{font-weight:600}
table.tbl .cell-sub{font-size:11.5px;color:var(--text-3)}
.empty{padding:40px 20px;text-align:center;color:var(--text-3);font-size:13px}
.empty b{display:block;color:var(--text-2);font-size:14px;margin-bottom:5px}

/* ---------------- 标签 ---------------- */
.badge{display:inline-block;padding:1.5px 8px;border-radius:20px;font-size:11.5px;line-height:1.7;
  background:#eef1f5;color:var(--text-2);white-space:nowrap}
.badge.blue{background:var(--brand-soft);color:var(--brand-dark)}
.badge.green{background:var(--ok-soft);color:var(--ok)}
.badge.orange{background:var(--warn-soft);color:var(--warn)}
.badge.red{background:var(--danger-soft);color:var(--danger)}
.badge.purple{background:var(--purple-soft);color:var(--purple)}
.badge.gray{background:#eef1f5;color:#6b7688}
.tag{display:inline-block;padding:0 7px;border-radius:5px;background:#f0f3f7;color:var(--text-2);font-size:11px;margin-right:4px}
.lv{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:5px;
  font-size:11.5px;font-weight:700;color:#fff}
.lv.A{background:#c0392b}.lv.B{background:#e08a1e}.lv.C{background:#5b6779}.lv.D{background:#98a2b3}

/* ---------------- 筛选栏 ---------------- */
.toolbar{display:flex;gap:9px;align-items:center;flex-wrap:wrap;margin-bottom:14px}
.toolbar input,.toolbar select{padding:6.5px 10px;border:1px solid var(--line);border-radius:8px;background:#fff;outline:none;min-width:110px}
.toolbar input:focus,.toolbar select:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}
.toolbar .spacer{margin-left:auto}
.seg{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:#fff}
.seg button{border:0;background:#fff;padding:6.5px 12px;cursor:pointer;color:var(--text-2);border-right:1px solid var(--line)}
.seg button:last-child{border-right:0}
.seg button.active{background:var(--brand);color:#fff;font-weight:600}
.chips{display:flex;gap:6px;flex-wrap:wrap}
.chip{padding:3px 10px;border-radius:20px;border:1px solid var(--line);background:#fff;cursor:pointer;font-size:12.5px;color:var(--text-2)}
.chip.active{background:var(--brand-soft);border-color:#bcd8f8;color:var(--brand-dark);font-weight:600}

/* ---------------- 表单 ---------------- */
.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:13px 16px}
.form-grid .full{grid-column:1/-1}
@media(max-width:760px){.form-grid{grid-template-columns:1fr}}
.field{display:flex;flex-direction:column;gap:5px;min-width:0}
.field>label{font-size:12.5px;color:var(--text-2);font-weight:500}
.field>label .req{color:var(--danger);margin-left:2px}
.field input,.field select,.field textarea{padding:7.5px 10px;border:1px solid var(--line);border-radius:8px;outline:none;background:#fff;width:100%}
.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}
.field textarea{resize:vertical;min-height:76px;line-height:1.65}
.field .hint{font-size:11.5px;color:var(--text-3)}

/* ---------------- 回款计划编辑 ---------------- */
.rep-input{padding:6px 8px;border:1px solid var(--line);border-radius:7px;outline:none;background:#fff;width:100%;font-size:12.5px}
.rep-input:focus{border-color:var(--brand);box-shadow:0 0 0 2px var(--brand-soft)}
.cal-head{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;margin-bottom:6px}
.cal-head div{text-align:center;font-size:12px;color:var(--text-3);padding:4px 0}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}
.cal-day{min-height:104px;border:1px solid var(--line);border-radius:8px;padding:6px 6px 4px;background:var(--bg);overflow:hidden}
.cal-day.blank{background:transparent;border-color:transparent}
.cal-day.today{border-color:var(--brand);box-shadow:inset 0 0 0 1px var(--brand)}
.cal-h{display:flex;align-items:center;justify-content:space-between;margin-bottom:3px}
.cal-d{font-size:12.5px;font-weight:600;color:var(--text-2)}
.cal-add{border:none;background:none;cursor:pointer;color:var(--text-3);font-size:13px;line-height:1;padding:0 2px}
.cal-add:hover{color:var(--brand)}
.cal-item{display:flex;align-items:center;gap:5px;font-size:11.5px;line-height:1.5;padding:2px 4px;border-radius:5px;
  background:var(--bg-3);margin-bottom:3px;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cal-item:hover{background:var(--bg-2)}
.cal-item.done{opacity:.5;text-decoration:line-through}
.cal-item .dot{width:6px;height:6px;border-radius:50%;flex:0 0 auto}
.cal-more{font-size:11px;color:var(--text-3);padding-left:4px}
tr.plan-done td{opacity:.62}
.star-btn:hover{background:var(--bg-3);color:#e6a23c}
.star-btn.on{color:#f0a020}

/* 重点商机星标 */
.star{cursor:pointer;display:inline-block;font-size:15px;line-height:1;user-select:none;color:#c8cedb;transition:transform .12s,color .12s}
.star:hover{transform:scale(1.25);color:#e9b949}
.star.on{color:#f0b429}
tr.opp-starred{background:#fffdf5}
tr.opp-starred td.cell-main{border-left:3px solid #f0b429;padding-left:9px}
.card.starred{border-color:#f0b429;background:#fffdf5}
/* 客户标签 chips */
.tag-chips{display:flex;flex-wrap:wrap;gap:4px;margin-top:3px}
.tag-chip{font-size:11px;padding:1px 7px;border-radius:20px;background:var(--brand-soft);color:var(--brand);border:1px solid transparent;cursor:pointer;white-space:nowrap}
.tag-chip:hover{border-color:var(--brand)}
.tag-chip.active{background:var(--brand);color:#fff;font-weight:600}
#repTable th{white-space:nowrap;font-size:12px;padding:7px 8px}
#repTable td{padding:4px 6px;vertical-align:middle}
#repTable .btn-sm{padding:4px 8px;font-size:12px}

.inline-check{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--text-2)}

/* ---------------- 模态框 ---------------- */
.mask{position:fixed;inset:0;background:rgba(16,24,40,.42);display:flex;align-items:flex-start;
  justify-content:center;padding:40px 16px;z-index:200;overflow-y:auto;animation:fade .15s}
@keyframes fade{from{opacity:0}to{opacity:1}}
.modal{background:#fff;border-radius:12px;width:100%;max-width:760px;box-shadow:0 24px 60px rgba(16,24,40,.24);
  animation:pop .18s;margin-bottom:40px}
.modal.wide{max-width:1080px}
.modal.narrow{max-width:460px}
@keyframes pop{from{transform:translateY(-10px);opacity:.6}to{transform:none;opacity:1}}
.modal-head{display:flex;align-items:center;padding:15px 20px;border-bottom:1px solid var(--line-soft)}
.modal-head h3{margin:0;font-size:15.5px;font-weight:600}
.modal-head .x{margin-left:auto;border:0;background:transparent;font-size:20px;color:var(--text-3);cursor:pointer;line-height:1;padding:2px 6px;border-radius:6px}
.modal-head .x:hover{background:#f1f4f8;color:var(--text)}
.modal-body{padding:20px;max-height:calc(100vh - 200px);overflow-y:auto}
.modal-foot{display:flex;justify-content:flex-end;gap:9px;padding:13px 20px;border-top:1px solid var(--line-soft);background:#fcfdfe;border-radius:0 0 12px 12px}

/* ---------------- 详情 ---------------- */
.detail-head{display:flex;align-items:flex-start;gap:14px;flex-wrap:wrap}
.detail-head h2{margin:0;font-size:19px}
.detail-meta{display:flex;gap:16px;flex-wrap:wrap;font-size:12.5px;color:var(--text-2);margin-top:6px}
.detail-meta span b{color:var(--text);font-weight:600}
.info-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px 18px}
@media(max-width:860px){.info-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
.info-item .k{font-size:11.5px;color:var(--text-3)}
.info-item .v{font-size:13.5px;margin-top:1px;word-break:break-word}

/* ---------------- 时间轴 ---------------- */
.tl{position:relative;padding-left:24px}
.tl::before{content:"";position:absolute;left:6px;top:4px;bottom:4px;width:2px;background:var(--line)}
.tl-item{position:relative;padding-bottom:18px}
.tl-item::before{content:"";position:absolute;left:-22px;top:5px;width:10px;height:10px;border-radius:50%;
  background:#fff;border:2.5px solid var(--brand)}
.tl-item.done::before{border-color:var(--ok)}
.tl-item .tl-date{font-size:12px;color:var(--text-3)}
.tl-item .tl-title{font-weight:600;font-size:13.5px;margin:1px 0 3px}
.tl-item .tl-body{font-size:13px;color:var(--text-2);white-space:pre-wrap}
.tl-item .tl-next{font-size:12.5px;color:var(--brand-dark);background:var(--brand-soft);border-radius:7px;padding:6px 10px;margin-top:6px}

/* ---------------- 漏斗 ---------------- */
.funnel{display:flex;flex-direction:column;gap:7px}
.funnel-row{display:flex;align-items:center;gap:10px}
.funnel-name{width:88px;flex:0 0 88px;font-size:12.5px;color:var(--text-2);text-align:right}
.funnel-bar{height:30px;border-radius:6px;background:linear-gradient(90deg,#3b8bea,#6fb0f5);display:flex;
  align-items:center;padding:0 10px;color:#fff;font-size:12px;font-weight:600;min-width:44px;transition:width .4s;white-space:nowrap}
.funnel-val{font-size:12.5px;color:var(--text-2);white-space:nowrap;min-width:56px}
.funnel-who{flex:0 0 auto;font-size:11.5px;color:var(--text-3);white-space:nowrap;cursor:default}

/* ---------------- 负责人标签 ---------------- */
.who-tag{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;line-height:1.5;
  padding:1px 7px;border-radius:9px;border:1px solid transparent;white-space:nowrap;font-weight:500}
.who-tag::before{content:"";width:5px;height:5px;border-radius:50%;background:currentColor;opacity:.7;flex:0 0 5px}
.who-tag.who-none{background:#f0f2f5;color:#8b95a5;border-color:#e3e7ee}
.who-tag.who-none::before{display:none}
.who-tag.who-lg{font-size:12.5px;padding:2px 9px}

/* ---------------- 条形排行 ---------------- */
.rank-row{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid var(--line-soft)}
.rank-row:last-child{border-bottom:0}
.rank-no{width:20px;height:20px;border-radius:5px;background:#eef1f5;color:var(--text-2);display:flex;
  align-items:center;justify-content:center;font-size:11.5px;font-weight:700;flex:0 0 20px}
.rank-no.top{background:var(--brand);color:#fff}
.rank-name{flex:0 0 82px;font-size:13px;font-weight:500}
.rank-bar{flex:1;height:9px;background:#eef1f5;border-radius:6px;overflow:hidden}
.rank-bar i{display:block;height:100%;background:linear-gradient(90deg,#3b8bea,#6fb0f5);border-radius:6px}
.rank-val{font-size:12.5px;color:var(--text-2);white-space:nowrap;font-variant-numeric:tabular-nums}

/* ---------------- 导入区 ---------------- */
.dropzone{border:2px dashed #c8d4e3;border-radius:10px;padding:26px;text-align:center;color:var(--text-2);
  background:#fafcff;cursor:pointer;transition:.15s}
.dropzone:hover,.dropzone.over{border-color:var(--brand);background:var(--brand-soft)}
.dropzone b{display:block;font-size:14px;color:var(--text);margin-bottom:4px}
.paste-box{width:100%;min-height:220px;padding:12px;border:1px solid var(--line);border-radius:10px;
  font-family:Consolas,"Courier New",monospace;font-size:13px;line-height:1.7;outline:none;resize:vertical}
.paste-box:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}
.steps{display:flex;gap:8px;margin-bottom:16px;flex-wrap:wrap}
.step{flex:1;min-width:150px;border:1px solid var(--line);border-radius:9px;padding:10px 12px;background:#fff}
.step.active{border-color:var(--brand);background:var(--brand-soft)}
.step .n{font-size:11px;color:var(--text-3);letter-spacing:.6px}
.step .t{font-size:13px;font-weight:600;margin-top:2px}
.step.done{border-color:#bfe3d3;background:#f3fbf7}

.preview-tbl input,.preview-tbl select{padding:5px 7px;border:1px solid var(--line);border-radius:6px;width:100%;outline:none;font-size:12.5px}
.preview-tbl input:focus,.preview-tbl select:focus{border-color:var(--brand)}
.row-new{background:#f6fbf8 !important}
.row-warn{background:#fffbf2 !important}

/* ---------------- 提示 ---------------- */
#toastRoot{position:fixed;top:18px;right:18px;z-index:999;display:flex;flex-direction:column;gap:8px}
.toast{background:#1c2533;color:#fff;padding:10px 16px;border-radius:9px;font-size:13px;box-shadow:0 10px 26px rgba(0,0,0,.2);
  animation:slide .2s;max-width:380px}
.toast.ok{background:#12805c}
.toast.err{background:#c0392b}
@keyframes slide{from{transform:translateX(14px);opacity:0}to{transform:none;opacity:1}}
.tip{background:#f7fafd;border-left:3px solid var(--brand);padding:10px 13px;border-radius:0 8px 8px 0;
  font-size:12.5px;color:var(--text-2);line-height:1.75}
.tip b{color:var(--text)}
.tip.warn{background:#fff9ef;border-left-color:#e0a02e}

.split{display:flex;gap:16px;align-items:flex-start}
.split .col-main{flex:1;min-width:0}
.split .col-side{width:300px;flex:0 0 300px}
@media(max-width:1100px){.split{flex-direction:column}.split .col-side{width:100%;flex:auto}}

.stat-line{display:flex;gap:22px;flex-wrap:wrap}
.stat-line .s{font-size:12.5px;color:var(--text-2)}
.stat-line .s b{display:block;font-size:19px;color:var(--text);font-weight:700;letter-spacing:-.3px}
.print-only{display:none}
@media print{
  .sidebar,.topbar,.toolbar,.no-print{display:none !important}
  #app{display:block;height:auto}
  .view{overflow:visible;padding:0}
  .card{break-inside:avoid;box-shadow:none}
  .print-only{display:block}
}

/* ---------------- 登录页 ---------------- */
#loginRoot{position:fixed;inset:0;z-index:200;display:none;align-items:center;justify-content:center;
  background:linear-gradient(135deg,#1b2431 0%,#22304a 45%,#1a4d8f 100%)}
.login-card{width:382px;max-width:92vw;background:#fff;border-radius:14px;padding:30px 30px 20px;
  box-shadow:0 18px 50px rgba(10,20,40,.35)}
.login-brand{display:flex;align-items:center;gap:11px;margin-bottom:18px}
.login-brand strong{display:block;color:var(--text);font-size:15px;line-height:1.3}
.login-brand span{font-size:11.5px;color:var(--text-3)}
.login-card h2{margin:0 0 4px;font-size:19px;letter-spacing:-.3px;color:var(--text)}
.login-sub{margin:0 0 16px;color:var(--text-3);font-size:12.5px;min-height:18px}
.lg-field{display:block;margin-bottom:13px}
.lg-field span{display:block;font-size:12px;color:var(--text-2);margin-bottom:5px}
.lg-field input{width:100%;padding:10px 12px;border:1px solid var(--line);border-radius:8px;outline:none;
  transition:.15s;color:var(--text);background:#fff}
.lg-field input:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}
.login-err{min-height:18px;font-size:12.5px;color:var(--danger);margin-bottom:8px}
.btn-block{width:100%;padding:11px;font-size:14.5px;border-radius:8px}
.login-foot{margin-top:14px;padding-top:12px;border-top:1px solid var(--line-soft);
  font-size:11.5px;color:var(--text-3);line-height:1.7;text-align:center}

/* ---------------- 顶栏用户区 ---------------- */
.user-chip{display:flex;align-items:center;gap:7px;padding:4px 6px 4px 11px;border:1px solid var(--line);
  border-radius:20px;background:#fff}
.uc-name{font-size:13px;font-weight:600;color:var(--text)}
.uc-role{font-size:11px;padding:1px 7px;border-radius:9px;background:var(--brand-soft);color:var(--brand)}
.uc-role.admin{background:var(--purple-soft);color:var(--purple)}
.uc-btn{border:none;background:transparent;color:var(--text-3);cursor:pointer;font-size:12px;
  padding:3px 7px;border-radius:6px}
.uc-btn:hover{background:var(--bg);color:var(--text)}
.uc-btn.danger:hover{background:var(--danger-soft);color:var(--danger)}

/* ---------------- 初始密码提示条 ---------------- */
.pwd-tip{display:flex;align-items:center;gap:12px;padding:9px 22px;background:var(--warn-soft);
  border-bottom:1px solid #f0e0bd;color:#8a5d12;font-size:13px}
.pwd-tip .btn{margin-left:auto}

/* ---------------- 用户管理 ---------------- */
.role-tag{font-size:11px;padding:1px 7px;border-radius:9px;white-space:nowrap}
.role-tag.admin{background:var(--purple-soft);color:var(--purple)}
.role-tag.sales{background:var(--brand-soft);color:var(--brand)}
.state-dot{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:5px;vertical-align:middle}
.state-dot.on{background:var(--ok)}
.state-dot.off{background:#c2c9d4}
.form-grid.one{grid-template-columns:1fr}
.fld{display:block}
.fld>span{display:block;font-size:12px;color:var(--text-2);margin-bottom:5px}
.fld input,.fld select{width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:8px;
  outline:none;color:var(--text);background:#fff}
.fld input:focus,.fld select:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}
/* Excel 上传区 */
/* 撞单检测 */
.cf-card{margin-bottom:12px}
.cf-card.high{border-left:3px solid #d93025}
.cf-card.mid{border-left:3px solid #e08b00}
.cf-card.low{border-left:3px solid #9aa5b5}
.cf-badge{display:inline-block;font-size:11.5px;font-weight:600;padding:3px 9px;border-radius:20px;white-space:nowrap}
.cf-badge.high{background:#fdecea;color:#c5221f}
.cf-badge.mid{background:#fef3e2;color:#b06000}
.cf-badge.low{background:#eef1f5;color:#5f6b7a}
.who-tag{display:inline-block;font-size:12px;padding:2px 8px;border-radius:6px;background:var(--brand-soft);
  color:var(--brand);margin-left:5px}
.cf-act{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:12px;padding-top:11px;
  border-top:1px dashed var(--line);font-size:12.5px;color:var(--text-2)}
.cf-sep{width:1px;height:18px;background:var(--line);margin:0 4px}
.geo-flag{display:inline-block;margin-left:5px;font-size:12px;filter:saturate(.85);cursor:help}
.cf-flag{display:inline-block;font-size:11px;padding:1px 6px;border-radius:5px;background:#fdecea;
  color:#c5221f;margin-left:6px;vertical-align:middle}
.drop-zone{border:1.5px dashed var(--line);border-radius:12px;background:#fbfcfe;
  padding:22px 16px;text-align:center;cursor:pointer;transition:.15s;color:var(--text-2);font-size:13.5px}
.drop-zone:hover{border-color:var(--brand);background:var(--brand-soft)}
.drop-zone.drag-over{border-color:var(--brand);background:var(--brand-soft);box-shadow:0 0 0 3px rgba(37,99,235,.08)}
.sub-title{font-size:13px;font-weight:600;color:var(--text-2)}
.row-new td{background:#f2fbf6}
.hint-box{font-size:12px;color:var(--text-3);margin-top:10px;line-height:1.7}

/* ---------------- 跟进超时预警 / 客户公海 ---------------- */
.stale-row.st-warn>td{background:#fffaf0}
.stale-row.st-reclaim>td{background:#fdf1ef}
.stale-row>td{border-top:1px solid transparent}
.stale-row.st-warn>td:first-child{box-shadow:inset 3px 0 0 0 var(--warn)}
.stale-row.st-reclaim>td:first-child{box-shadow:inset 3px 0 0 0 var(--danger)}
.stale-flag{display:inline-block;font-size:11px;padding:1px 6px;border-radius:5px;margin-left:6px;vertical-align:middle}
.stale-flag.warn{background:var(--warn-soft);color:var(--warn)}
.stale-flag.reclaim{background:var(--danger-soft);color:var(--danger)}
.stale-days{font-size:12px;color:var(--warn);white-space:nowrap}
.stale-days.reclaim{color:var(--danger);font-weight:600}
.pool-bar{display:flex;align-items:center;gap:9px;flex-wrap:wrap;padding:9px 16px;background:#fbfcfe;
  border-bottom:1px solid var(--line-soft);font-size:12.5px;color:var(--text-2)}
.pool-bar .spacer{margin-left:auto}
.rule-strip{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:9px 14px;margin-bottom:14px;
  background:#f7f9fc;border:1px solid var(--line);border-radius:9px;font-size:12.5px;color:var(--text-2)}
.rule-strip b{color:var(--text)}
.rule-strip .spacer{margin-left:auto}

/* ============================================================================
 * 消息铃铛 / 通知面板 / 权限勾选 / 密码强度 / 金额打码
 * ========================================================================== */
.bell{position:relative;border:1px solid var(--line);background:#fff;border-radius:8px;width:34px;height:34px;
  font-size:15px;line-height:1;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;
  transition:.15s;flex:0 0 auto}
.bell:hover{background:#fafbfd;border-color:#c3cdda}
.bell.has{border-color:#f0c9c4;background:var(--danger-soft)}
.bell em{position:absolute;top:-5px;right:-5px;min-width:17px;height:17px;padding:0 4px;border-radius:9px;
  background:var(--danger);color:#fff;font-size:11px;font-style:normal;line-height:17px;text-align:center;display:none}
.bell.has em{display:block}
.notice-list{max-height:60vh;overflow-y:auto}
.notice-item{padding:10px 12px;border:1px solid var(--line);border-radius:9px;margin-bottom:9px;background:#fff}
.notice-item.unread{border-color:#f0d5d1;background:var(--danger-soft)}
.notice-item .n-title{font-weight:600;font-size:13.5px}
.notice-item .n-body{font-size:12.5px;color:var(--text-2);margin-top:4px;line-height:1.7}
.notice-item .n-foot{display:flex;align-items:center;gap:8px;margin-top:7px;font-size:11.5px}
.notice-item .n-foot .btn{margin-left:auto}

.perm-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:2px 14px}
.perm-row{display:flex;align-items:flex-start;gap:8px;padding:6px 0;cursor:pointer}
.perm-row input{margin-top:3px;flex:0 0 auto}
.perm-row b{display:block;font-size:13px;font-weight:600}
.perm-row i{display:block;font-style:normal;font-size:11.5px;color:var(--text-3);line-height:1.5}
/* 该账号的角色拿不到的权限：置灰锁上（例如销售主管没有后台管理权） */
.perm-row.locked{opacity:.55;cursor:not-allowed}
.perm-row.locked input{cursor:not-allowed}
.perm-row.locked i{color:var(--warn)}
@media(max-width:900px){.perm-grid{grid-template-columns:1fr}}

.pwd-meter{height:5px;background:var(--bg-3);border-radius:4px;overflow:hidden;margin-top:-6px}
.pwd-meter i{display:block;height:100%;width:0;border-radius:4px;transition:.25s;background:#c0392b}
.pwd-meter i.lv1{background:#c0392b}
.pwd-meter i.lv2{background:#e08b00}
.pwd-meter i.lv3{background:#3aa776}
.pwd-meter i.lv4{background:#12805c}
.masked{color:var(--text-3);letter-spacing:1px;font-size:12px;user-select:none}
.role-tag.off{background:var(--bg-3);color:var(--text-3)}
.role-tag.manager{background:var(--purple-soft);color:var(--purple)}
.role-tag.ok{background:var(--ok-soft);color:var(--ok)}
td.ok{color:var(--ok);font-weight:600}

/* ============================================================================
 * 手机 / 平板适配
 * ========================================================================== */
.btn-menu{display:none}
@media(max-width:1000px){
  .global-search input{width:150px}
  .view{padding:14px 14px 40px}
  .card-head{padding:11px 13px}
  .card-head .right{flex-wrap:wrap;gap:6px}
  .card-body{padding:13px}
}
@media(max-width:820px){
  /* 侧边栏变成抽屉：点左上角 ☰ 打开，点遮罩关闭 */
  .btn-menu{display:inline-flex}
  .sidebar{position:fixed;left:0;top:0;bottom:0;z-index:200;width:250px;flex:0 0 250px;
    transform:translateX(-100%);transition:transform .22s ease;box-shadow:6px 0 24px rgba(16,24,40,.18)}
  #app.nav-open .sidebar{transform:translateX(0)}
  #app.nav-open::after{content:"";position:fixed;inset:0;background:rgba(16,24,40,.35);z-index:199}
  .main{min-width:0}
  .topbar{padding:10px 13px;gap:10px}
  .page-title h1{font-size:15.5px}
  .page-title p{display:none}
  .global-search{display:none}
  .who{display:none !important}
  .topbar-actions{gap:7px;width:100%}
  #btnRefresh span{display:none}
  .view{padding:12px 11px 40px}

  /* 触控友好：按钮至少 38px 高 */
  .btn{min-height:38px;padding:8px 14px}
  .btn-sm{min-height:32px}
  input,select,textarea{font-size:16px !important}   /* iOS 上小于 16px 会自动放大页面 */
  .table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
  .tbl{min-width:640px}
  .card-head{flex-wrap:wrap}
  .card-head .right{width:100%;margin-left:0}
  .toolbar{flex-wrap:wrap}
  .toolbar .spacer{display:none}
  .modal{width:96% !important;max-width:96% !important;max-height:88vh}
  .modal-body{max-height:64vh;overflow-y:auto}
  .kpi .value{font-size:20px}
  .grid{gap:11px}
  .search-results{width:92vw;right:-10px}
  .notice-list{max-height:56vh}
  .perm-grid{grid-template-columns:1fr}
}
@media(max-width:520px){
  .g3,.g4,.g5{grid-template-columns:repeat(2,minmax(0,1fr))}
  .kpi .value{font-size:18px}
  .user-chip .uc-name{display:none}
  .btn{padding:8px 11px}
  .tbl{min-width:560px}
}

/* 手机端底部快捷导航：宽屏隐藏 */
.tabbar{display:none}
@media(max-width:820px){
  body.logged-in .tabbar{
    display:flex;position:fixed;left:0;right:0;bottom:0;z-index:210;
    background:var(--surface);border-top:1px solid var(--line);
    padding-bottom:env(safe-area-inset-bottom);
    box-shadow:0 -4px 16px rgba(16,24,40,.08)
  }
  body.logged-in .tabbar .tab-item{
    flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;
    gap:2px;padding:7px 2px 6px;color:var(--text-3);text-decoration:none;font-size:11px;min-height:52px
  }
  .tabbar .tab-item i{font-style:normal;font-size:17px;line-height:1}
  body.logged-in .tabbar .tab-item.active{color:var(--primary);font-weight:600}
  body.logged-in .tabbar .tab-item.active i{transform:scale(1.12)}
  /* 给底部导航留出空间，别挡住最后一屏内容 */
  .view{padding-bottom:calc(68px + env(safe-area-inset-bottom))}
  .modal{max-height:calc(92vh - 52px)}
}

/* 表格卡片化：窄屏下每行变成一张卡，前面显示字段名（由 decorateTables 写入 data-l） */
@media(max-width:820px){
  .tbl-cardable .table-wrap{overflow-x:visible}
  .tbl-cardable .tbl{min-width:0;width:100%}
  .tbl-cardable .tbl thead{display:none}
  .tbl-cardable .tbl,
  .tbl-cardable .tbl tbody,
  .tbl-cardable .tbl tr,
  .tbl-cardable .tbl td{display:block;width:100%}
  .tbl-cardable .tbl tr{
    border:1px solid var(--line);border-radius:10px;margin:0 0 10px;padding:10px 12px;
    background:var(--surface)
  }
  .tbl-cardable .tbl td{
    display:flex;align-items:flex-start;gap:10px;padding:5px 0;border:0;font-size:13.5px
  }
  .tbl-cardable .tbl td::before{
    content:attr(data-l);flex:0 0 88px;color:var(--text-3);font-size:12.5px;
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis
  }
  .tbl-cardable .tbl td:empty{display:none}
  .tbl-cardable .tbl td[data-l=""]::before{content:""}
}

/* PWA 风格的 meta 补充：手机浏览器里的安全区 */
@supports(padding:env(safe-area-inset-left)){
  @media(max-width:820px){
    .sidebar{padding-left:env(safe-area-inset-left)}
    .view{padding-left:calc(11px + env(safe-area-inset-left));padding-bottom:calc(40px + env(safe-area-inset-bottom))}
  }
}


/* ============================================================================
 * 地图 / 多地址 / 附近客户
 * ========================================================================== */

/* --- 客户表单里的地址行 --- */
#addressList{margin-top:6px}
.addr-row{
  border:1px solid var(--line);border-radius:9px;padding:9px 10px;margin-bottom:8px;background:var(--bg-2)
}
.addr-row:last-child{margin-bottom:0}
.addr-row .ar-line{display:flex;gap:7px;align-items:center;flex-wrap:wrap}
.addr-row .ar-sub{margin-top:7px}
.addr-row .ad-label{width:110px;flex:0 0 auto}
.addr-row .ad-addr{flex:1 1 240px;min-width:0}
.addr-row .ar-sub input{flex:1 1 150px;min-width:0}
.addr-row .ad-pri{
  display:flex;align-items:center;gap:5px;font-size:12.5px;color:var(--text-2);
  white-space:nowrap;cursor:pointer;user-select:none
}
.ad-flag{
  font-size:12px;padding:2px 8px;border-radius:20px;white-space:nowrap;flex:0 0 auto
}
.ad-flag.ok{background:var(--ok-soft);color:var(--ok)}
.ad-flag.warn{background:var(--warn-soft);color:var(--warn)}

/* --- 客户详情里的地址卡片 --- */
.addr-item{
  border:1px solid var(--line);border-radius:9px;padding:10px 12px;margin-bottom:9px;background:var(--bg-2)
}
.addr-item:last-child{margin-bottom:0}
.addr-item.nofix{border-color:#f0d9a8;background:#fffaf0}
.addr-item .ai-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.addr-item .ai-addr{margin-top:6px;font-size:13.5px;line-height:1.7;word-break:break-all}
.addr-item .ai-sub{margin-top:3px;font-size:12.5px;color:var(--text-2)}

/* --- 查地址弹窗 --- */
.mp-form{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.mp-form #mpKw{flex:1 1 220px}
.mp-form .mp-city{width:120px}
.mp-result{margin-top:12px;max-height:340px;overflow:auto}
.mp-item{
  display:flex;gap:10px;align-items:flex-start;padding:9px 10px;border:1px solid var(--line);
  border-radius:8px;margin-bottom:7px;background:var(--bg-2)
}
.mp-item.mp-nofix{opacity:.72}
.mp-item .mp-name{flex:1 1 auto;font-weight:600;font-size:13.5px;min-width:0}
.mp-item .mp-addr{flex:0 1 42%;font-size:12.5px;color:var(--text-2);min-width:0;word-break:break-all}
.mp-coord{font-family:Consolas,Monaco,monospace;font-size:11.5px;color:var(--text-3)}
.mp-coord.bad{color:var(--danger)}
.tip.warn{background:var(--warn-soft);border-color:#f0d9a8}
.tip.err{background:var(--danger-soft);border-color:#f5c6c2}

/* --- 附近客户：搜索栏 --- */
.nb-form{display:flex;gap:9px;align-items:center;flex-wrap:wrap}
.nb-field{position:relative;flex:1 1 260px;min-width:0}
.nb-field input{width:100%}
.nb-kw{flex:0 1 190px;min-width:0}
.nb-inline{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--text-2);white-space:nowrap}
.nb-inline select{padding:6px 8px}
.nb-sugg{
  display:none;position:absolute;left:0;right:0;top:100%;z-index:60;margin-top:3px;
  background:var(--panel);border:1px solid var(--line);border-radius:8px;box-shadow:var(--shadow);
  max-height:260px;overflow:auto
}
.nb-sugg.show{display:block}
.nb-sugg-item{
  padding:8px 10px;cursor:pointer;border-bottom:1px solid var(--line-soft);font-size:13px
}
.nb-sugg-item:last-child{border-bottom:0}
.nb-sugg-item:hover{background:var(--brand-soft)}
.nb-sugg-item span{display:block;font-size:12px;color:var(--text-3);margin-top:2px}
.warn-text{color:var(--warn)}

/* --- 附近客户：v1.4.0 无 GPS / 无密钥兜底 --- */
.nb-http-tip{line-height:1.9;font-size:13.5px}
.nb-http-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
.nb-saved{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin:10px 0 2px;font-size:12.5px}
.nb-chip{
  padding:4px 10px;border:1px solid var(--line);border-radius:14px;
  background:var(--panel);color:var(--text-2);cursor:pointer;font-size:12.5px;
  max-width:190px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap
}
.nb-chip:hover{border-color:var(--brand);color:var(--brand);background:var(--brand-soft)}
.nb-chip.ghost{border-style:dashed;background:transparent}
.btn-dim{opacity:.62}
.nb-sugg-item b{font-weight:600}
.nb-pick{display:flex;flex-direction:column;gap:2px}
.nb-pick input{width:100%}
.nb-pick-list{max-height:340px;overflow:auto;border:1px solid var(--line);border-radius:8px}
.nb-pick-item{padding:9px 11px;border-bottom:1px solid var(--line-soft);cursor:pointer}
.nb-pick-item:last-child{border-bottom:0}
.nb-pick-item:hover{background:var(--brand-soft)}
.nb-pick-item.nofix{opacity:.55;cursor:not-allowed}
.nb-pick-name{font-size:13.5px;font-weight:600}
.nb-pick-sub{font-size:12px;color:var(--text-3);margin-top:3px}
.nb-fix{color:var(--ok,#1a9d5a);font-weight:600;font-size:12px;margin-right:4px}
.nb-code{
  display:block;background:var(--bg-2);border:1px solid var(--line);border-radius:6px;
  padding:8px 10px;margin:6px 0;font-size:12px;word-break:break-all;line-height:1.7
}

/* --- 附近客户：结果卡片 --- */
.nb-list{display:flex;flex-direction:column;gap:8px}
.nb-item{
  display:flex;gap:12px;align-items:flex-start;padding:10px 12px;
  border:1px solid var(--line);border-radius:9px;background:var(--bg-2)
}
.nb-item.close{border-color:#bcd8c8;background:#f2fbf7}
.nb-dist{
  flex:0 0 84px;text-align:center;font-weight:700;font-size:15px;color:var(--brand);
  background:var(--brand-soft);border-radius:8px;padding:7px 4px;line-height:1.3
}
.nb-dist .alt{display:block;font-size:11.5px;font-weight:500;color:var(--text-2);margin-top:2px}
.nb-dist .alt{background:none}
.nb-main{flex:1 1 auto;min-width:0}
.nb-name{font-weight:600;font-size:14px}
.nb-addr{margin-top:3px;font-size:13px;color:var(--text-2);word-break:break-all}
.nb-sub{margin-top:2px;font-size:12.5px;color:var(--text-3)}
.nb-ops{
  flex:0 0 auto;display:flex;flex-direction:column;gap:5px
}
.map-frame{
  width:100%;height:320px;border:1px solid var(--line);border-radius:9px;background:var(--bg-3)
}

/* ================= 客户资料「联网补全」 ================= */
.btn-ai{background:linear-gradient(135deg,#f0e7ff,#e6efff);border-color:#d5c9f5;color:var(--purple);font-weight:600}
.btn-ai:hover{background:linear-gradient(135deg,#e6dbff,#dbe8ff)}
.act-wrap{display:flex;gap:6px;align-items:stretch}
.act-wrap input{flex:1;min-width:0}
.act-wrap .btn{flex:0 0 auto;white-space:nowrap}
.en-head{margin-bottom:12px}
.en-search{display:flex;gap:8px;flex-wrap:wrap}
.en-search input{flex:1 1 240px}
.en-search .en-city{flex:0 0 130px}
.en-src{font-size:12.5px;color:var(--text-2);margin-bottom:10px;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.src-tag{display:inline-block;padding:1px 7px;border-radius:20px;font-size:11.5px;line-height:1.7;border:1px solid transparent;white-space:nowrap}
.src-map{background:var(--ok-soft);color:var(--ok);border-color:#bfe6d8}
.src-ai{background:var(--purple-soft);color:var(--purple);border-color:#ddd2f7}
.src-api{background:var(--brand-soft);color:var(--brand);border-color:#cfe1fa}
.src-local{background:#eef3f8;color:#47617c;border-color:#d6e2ee}
/* 联网补全：数据源诊断卡（v1.5.0） */
.en-diag{border:1px solid var(--line-soft);border-radius:8px;padding:10px 12px;margin-bottom:12px;font-size:13px;line-height:1.75}
.en-diag.warn{background:#fffaef;border-color:#f0d7a4;color:#7a5b25}
.en-diag-t{font-size:14px;margin-bottom:2px}
.en-diag-s{display:flex;gap:8px;flex-wrap:wrap;margin:6px 0}
.en-ds{display:inline-block;padding:1px 9px;border-radius:20px;font-size:12px;border:1px solid transparent;white-space:nowrap}
.en-ds.ok{background:var(--ok-soft);color:var(--ok);border-color:#bfe6d8}
.en-ds.no{background:#fdeeee;color:#b3453f;border-color:#f2cccc}
.en-diag-a{display:flex;gap:9px;align-items:center;flex-wrap:wrap;font-size:12.5px}
.en-diag-a .muted{flex:1 1 260px;line-height:1.6}
.en-item.en-guess{background:#fffdf7;border-color:#eee1c4}
.en-list{display:flex;flex-direction:column;gap:8px;max-height:56vh;overflow:auto}
.en-item{display:flex;gap:10px;align-items:flex-start;padding:9px 10px;border:1px solid var(--line-soft);border-radius:8px;background:#fbfcfe}
.en-item:hover{background:#fff;border-color:var(--line)}
.en-pick{margin-top:2px;flex:0 0 auto}
.en-k{flex:0 0 150px;font-size:13px;color:var(--text-2);display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.en-conf{font-size:11px;color:var(--text-3)}
.en-conf.high{color:var(--ok)}
.en-conf.low{color:var(--danger)}
.en-v{flex:1;min-width:0;font-size:13.5px}
.en-input{width:100%;padding:6px 8px;border:1px solid var(--line);border-radius:6px}
.en-input:disabled{background:var(--bg-2);color:var(--text-3)}

/* ================= 登录 / 操作记录 ================= */
.au-filter{display:flex;gap:8px;flex-wrap:wrap;padding-bottom:12px;border-bottom:1px solid var(--line-soft);margin-bottom:4px}
.au-filter select,.au-filter input{padding:5px 8px;border:1px solid var(--line);border-radius:6px;background:#fff;max-width:200px}
.au-rank{display:flex;flex-direction:column;gap:7px}
.au-rank-row{display:flex;align-items:center;gap:9px;font-size:13px}
.au-rank-no{width:18px;height:18px;border-radius:50%;background:var(--bg-3);color:var(--text-2);font-size:11px;line-height:18px;text-align:center;flex:0 0 auto}
.au-rank-name{flex:0 0 76px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.au-rank-bar{flex:1;height:7px;border-radius:6px;background:var(--bg-2);overflow:hidden}
.au-rank-bar i{display:block;height:100%;background:linear-gradient(90deg,var(--brand),#5b9bf3);border-radius:6px}
.au-rank-n{flex:0 0 40px;text-align:right;color:var(--text-2)}

/* --- 手机：卡片纵向排，按钮横向铺开 --- */
@media(max-width:820px){
  .addr-row .ad-label{width:100%}
  .addr-row .ar-sub{flex-direction:column}
  .addr-row .ar-sub input{width:100%}
  .nb-form{gap:8px}
  .nb-field,.nb-kw{flex:1 1 100%}
  .nb-form .btn{flex:1 1 auto}
  .nb-inline{flex:1 1 46%}
  .nb-http-actions .btn{flex:1 1 100%}
  .nb-chip{max-width:150px}
  .nb-pick-list{max-height:280px}
  .nb-item{flex-wrap:wrap}
  .nb-dist{flex:0 0 auto;min-width:76px;padding:4px 8px;font-size:14px}
  .nb-main{flex:1 1 100%;order:3}
  .nb-ops{flex:1 1 100%;order:4;flex-direction:row;flex-wrap:wrap}
  .nb-ops .btn{flex:1 1 auto}
  .map-frame{height:240px}
  .mp-form #mpKw,.mp-form .mp-city{flex:1 1 100%}
  .mp-item{flex-wrap:wrap}
  .mp-item .mp-addr{flex:1 1 100%}
  /* 补全弹窗 & 操作记录 */
  .en-k{flex:1 1 100%}
  .en-list{max-height:none}
  .act-wrap{flex-wrap:wrap}
  .act-wrap .btn{flex:1 1 100%}
  .au-filter select,.au-filter input{max-width:none;flex:1 1 46%}
  .au-rank-name{flex:0 0 60px}
}

/* --- 密码框：右侧「显示 / 隐藏」小按钮 --- */
.pwd-wrap{position:relative;display:block;width:100%}
.pwd-wrap input{padding-right:54px !important}
/* .fld>span / .lg-field span 是标签样式，别套到包裹层上 */
.fld>span.pwd-wrap,.lg-field>span.pwd-wrap{margin-bottom:0;font-size:inherit;color:inherit}
.pwd-eye{position:absolute;right:4px;top:50%;transform:translateY(-50%);
  height:26px;padding:0 8px;border:1px solid var(--line);border-radius:6px;background:#fff;
  color:var(--text-2);font-size:12px;line-height:1;cursor:pointer;white-space:nowrap;
  -webkit-tap-highlight-color:transparent}
.pwd-eye:hover{color:var(--brand);border-color:var(--brand);background:var(--brand-soft)}
.pwd-eye.on{color:var(--brand);border-color:var(--brand);background:var(--brand-soft)}

/* ============================================================================
 * 可搜索客户选择器（客户台账几百家时不用再一条条翻下拉）
 * ========================================================================== */
.cs-wrap{position:relative;min-width:0}
.cs-control{position:relative}
.cs-control .cs-input{padding-right:30px !important;text-overflow:ellipsis}
.cs-clear{position:absolute;right:3px;top:50%;transform:translateY(-50%);
  width:24px;height:24px;line-height:22px;padding:0;border:0;border-radius:6px;
  background:transparent;color:var(--text-3);font-size:17px;cursor:pointer;
  -webkit-tap-highlight-color:transparent}
.cs-clear:hover{background:var(--bg-2);color:var(--danger)}
.cs-panel{position:fixed;z-index:500;display:flex;flex-direction:column;
  background:#fff;border:1px solid var(--line);border-radius:10px;
  box-shadow:0 16px 38px rgba(16,24,40,.22);overflow:hidden}
.cs-panel[hidden]{display:none !important}
.cs-list{flex:1 1 auto;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch}
.cs-item{display:flex;flex-direction:column;gap:2px;padding:8px 11px;cursor:pointer;
  border-bottom:1px solid var(--line-soft)}
.cs-item:last-child{border-bottom:0}
.cs-item:hover,.cs-item.on{background:var(--brand-soft)}
.cs-item.on{box-shadow:inset 3px 0 0 var(--brand)}
.cs-name{font-size:13.5px;font-weight:600;color:var(--text);word-break:break-word}
.cs-sub{font-size:11.5px;color:var(--text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cs-none{padding:18px 12px;text-align:center;color:var(--text-3);font-size:13px}
.cs-foot{flex:0 0 auto;padding:6px 10px;font-size:11px;color:var(--text-3);
  background:var(--bg-2);border-top:1px solid var(--line-soft)}
@media(max-width:820px){
  .cs-item{padding:11px}
  .cs-name{font-size:15px}
  .cs-sub{font-size:12px}
  .cs-clear{width:30px;height:30px}
}

/* ============================================================================
 * 销售周报：12 列宽表在手机上会挤压错位 → 窄屏自动换卡片版
 * ========================================================================== */
.sw-table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
.sw-preview .sw-cards{display:none}
.sw-preview .sw-table-wrap{display:block}
.sw-preview.sw-view-table .sw-cards{display:none !important}
.sw-preview.sw-view-table .sw-table-wrap{display:block !important}
.sw-preview.sw-view-table .sw-only-table{display:block !important}
.sw-preview.sw-view-cards .sw-table-wrap{display:none !important}
.sw-preview.sw-view-cards .sw-cards{display:block !important}
.sw-preview.sw-view-cards .sw-only-table{display:none !important}
.sw-view-seg button{padding:6.5px 9px;font-size:12px;white-space:nowrap}
.sw-cards{font-size:13.5px;color:var(--text)}
.swc-head{display:flex;align-items:center;gap:10px;padding:2px 0 9px;
  border-bottom:1px solid var(--line-soft);margin-bottom:9px}
.swc-head img{height:38px;width:auto;flex:0 0 auto}
.swc-tt{display:flex;flex-direction:column;gap:2px;min-width:0}
.swc-tt b{font-size:15px;color:#1F3864;word-break:break-word}
.swc-tt span{font-size:12px;color:var(--text-3)}
.swc-meta{font-size:12px;color:var(--text-2);line-height:1.75;margin-bottom:12px;word-break:break-word}
.swc-sec{display:flex;align-items:center;gap:8px;font-size:13.5px;font-weight:700;
  color:#1F3864;background:#EDEDED;border-left:3px solid #1F3864;
  padding:7px 10px;margin:14px 0 9px}
.swc-sec em{font-style:normal;font-weight:500;font-size:12px;color:var(--text-3)}
.swc-card{border:1px solid var(--line);border-radius:10px;padding:10px 12px;
  margin:0 0 9px;background:var(--surface)}
.swc-card-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:7px}
.swc-no{flex:0 0 auto;min-width:20px;height:20px;padding:0 5px;border-radius:10px;
  background:#D9E2F3;color:#1F3864;font-size:11.5px;font-weight:700;
  display:inline-flex;align-items:center;justify-content:center}
.swc-card-h b{font-size:14px;min-width:0;word-break:break-word}
.swc-date{margin-left:auto;font-size:11.5px;color:var(--text-3);white-space:nowrap}
.swc-row{display:flex;gap:8px;padding:3px 0;align-items:flex-start;
  font-size:13px;line-height:1.65}
.swc-k{flex:0 0 62px;color:var(--text-3);font-size:12px;padding-top:1px;white-space:nowrap}
.swc-v{flex:1 1 auto;min-width:0;word-break:break-word;white-space:pre-wrap}
.swc-row.main .swc-v{font-weight:500}
.swc-row.plain .swc-v{color:var(--text-2)}
.swc-empty,.swc-tip{font-size:12px;color:var(--text-3);line-height:1.7;padding:8px 2px}
.swc-tip{color:#7F6000;margin-top:8px}
/* 1000px 以下（含平板、小窗口、手机）自动换卡片版，12 列宽表只在真正放得下时出现 */
@media(max-width:1000px){
  .sw-preview.sw-view-auto .sw-table-wrap{display:none}
  .sw-preview.sw-view-auto .sw-cards{display:block}
  .sw-preview.sw-view-auto .sw-only-table{display:none}
  .sw-table{min-width:900px}   /* 手动切「表格」时横向滚动，不再把 12 列挤成一团 */
}
@media(max-width:520px){
  .swc-k{flex-basis:56px}
  .swc-card{padding:9px 10px}
}
@media print{
  .sw-preview .sw-cards{display:none !important}
  .sw-preview .sw-table-wrap{display:block !important}
  .sw-table{min-width:0 !important}
  .cs-panel{display:none !important}
}

/* ============================================================================
 * 跟进提醒弹窗（v1.7.0）
 * 登录后提醒本人名下超期未跟进的客户 + 逾期拜访计划，天数每人自己设
 * ========================================================================== */
.modal.rem-modal{max-width:640px}
.rem-hero{background:linear-gradient(135deg,#fff7e8,#fffdf8);border:1px solid #f3e2c4;border-radius:10px;
  padding:14px 16px;margin-bottom:14px}
.rem-hero-main{font-size:14px;line-height:1.8;color:#5a4620}
.rem-hero-main b{color:#a4580c}
.rem-n{font-size:18px;color:#c0392b;margin:0 2px;font-weight:700}
.rem-hero-sub{font-size:12.5px;color:#8a7a5c;margin-top:6px;line-height:1.7}
.rem-team{display:flex;flex-wrap:wrap;gap:6px;align-items:center;font-size:12px;margin:-4px 0 12px}
.rem-tag{background:#eef3fb;color:#2c4a70;border-radius:20px;padding:3px 10px}
.rem-sec{margin-bottom:14px}
.rem-sec-h{font-size:13px;font-weight:600;color:var(--text-2);padding:0 2px 8px}
.rem-item{display:flex;align-items:center;gap:12px;padding:10px 12px;border:1px solid var(--line);
  border-radius:9px;margin-bottom:7px;cursor:pointer;transition:.15s;background:#fff}
.rem-item:hover{border-color:#bcd3f2;background:#fafcff;box-shadow:0 2px 8px rgba(30,111,217,.08)}
.rem-main{flex:1 1 auto;min-width:0}
.rem-cust{font-size:13.5px;font-weight:600;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.rem-sub{font-size:12px;color:var(--text-3);margin-top:2px;line-height:1.5;word-break:break-word}
.rem-days{flex:0 0 auto;text-align:center;min-width:52px}
.rem-days b{display:block;font-size:17px;color:#c0392b;line-height:1.2}
.rem-days span{font-size:11px;color:var(--text-3)}
.rem-ops{flex:0 0 auto;display:flex;gap:6px}
.rem-plan{border-color:#f0e2c8;background:#fffdf7}
.rem-more{font-size:12px;color:var(--text-3);padding:6px 2px}
.rem-set{border-top:1px dashed var(--line);margin-top:6px;padding-top:12px;
  display:flex;flex-wrap:wrap;align-items:center;gap:12px;font-size:13px}
.rem-chk{display:flex;align-items:center;gap:6px;cursor:pointer}
.rem-dayset{display:flex;align-items:center;gap:6px}
.rem-dayset input{width:66px;padding:5px 8px;border:1px solid var(--line);border-radius:7px;
  text-align:center;font-weight:600}
.rem-hint{font-size:12px;color:var(--text-3)}
@media(max-width:640px){
  .rem-item{flex-wrap:wrap;gap:8px}
  .rem-days{order:2}
  .rem-ops{order:3;width:100%}
  .rem-ops .btn{flex:1}
  .modal.rem-modal .modal-foot{flex-wrap:wrap}
  .modal.rem-modal .modal-foot .btn{flex:1 1 auto}
}
/* 窄屏防御：提醒行允许收缩，天数徽章不把行撑爆 */
.rem-item{min-width:0}
@media(max-width:640px){
  .rem-days{flex:0 1 auto;min-width:44px}
  .rem-ops{flex-wrap:wrap}
}

/* ---------------- v1.7.3 重复客户检测 ---------------- */
.dup-list{display:grid;gap:10px;margin-top:12px}
.dup-item{display:flex;gap:10px;align-items:flex-start;padding:12px 14px;
  border:1px solid var(--line);border-radius:10px;cursor:pointer;background:#fff;min-width:0}
.dup-item:hover{border-color:var(--primary,#2f6fed)}
.dup-item.dup-keep{border-color:var(--primary,#2f6fed);background:rgba(47,111,237,.06);
  box-shadow:0 0 0 1px rgba(47,111,237,.18)}
.dup-item input[type="radio"]{margin-top:3px;flex:none;width:16px;height:16px;accent-color:var(--primary,#2f6fed)}
.dup-main{min-width:0;flex:1}
.dup-name{font-weight:600;font-size:14px;color:var(--text,#1f2937)}
.dup-sub{font-size:12px;color:var(--text-3,#8a94a6);margin-top:2px;word-break:break-all}
.dup-meta{font-size:12.5px;color:var(--text-3,#8a94a6);margin-top:7px;line-height:1.75}
@media(max-width:640px){
  .dup-item{padding:10px 12px}
  .dup-meta{font-size:12px}
}
