*{margin:0;padding:0;box-sizing:border-box;}
:root{
  --bg:#eef1f5;--card:#fff;--border:#dce0e6;
  --text:#1a2332;--text2:#5a6877;--text3:#9aa7b5;
  --accent:#1e4d8c;--accent2:#163a6e;--accent-light:#e8f0fc;
  --danger:#d64545;--success:#2e8b57;--warning:#e8923c;
  --purple:#7b3fb5;--teal:#00897b;
  --navy:#1a2332;--slate:#475569;
  --radius:5px;--radius-sm:4px;--radius-lg:8px;
  --shadow:0 1px 3px rgba(0,0,0,0.06);--shadow-lg:0 4px 12px rgba(0,0,0,0.1);
  --ring:0 0 0 3px rgba(30,77,140,0.18);
  --sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:16px;
  --fs-xs:11px;--fs-sm:12px;--fs:13px;--fs-md:14px;--fs-lg:16px;
}
body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;background:var(--bg);color:var(--text);line-height:1.5;min-height:100vh;font-size:13px;}
/* v2.23.4：首页左右两栏各自独立滚动（鼠标在哪边滚动就滚哪边），整页不再整体滚动 */
/* v2.25.5：首页与二级页面一样左右铺满整个可视空间（原来是 max-width:1280px 居中，两侧留白） */
.app{width:100%;max-width:100%;margin:0;padding:10px 14px;height:100vh;display:flex;flex-direction:column;overflow:hidden;}
.two-col{display:flex;gap:10px;align-items:stretch;flex:1;min-height:0;overflow:hidden;}
/* 左栏随屏宽自适应：窄屏不挤、宽屏不吃掉右栏 */
.col-left{width:clamp(290px,21vw,380px);flex-shrink:0;overflow-y:auto;height:100%;padding-right:2px;}
.col-right{flex:1;min-width:0;overflow-y:auto;height:100%;padding-right:2px;}
/* 移动端：恢复自然文档流，整页滚动 */
@media(max-width:768px){
  .app{height:auto;display:block;overflow:visible;}
  .two-col{flex-direction:column;flex:initial;min-height:0;overflow:visible;}
  .col-left{width:100%;overflow:visible;height:auto;}
  .col-right{overflow:visible;height:auto;}
}

/* Header */
.header{display:flex;align-items:center;justify-content:space-between;padding:8px 0;border-bottom:2px solid var(--accent);margin-bottom:10px;}
.header h1{font-size:17px;font-weight:700;color:var(--navy);letter-spacing:.5px;}
.header-right{display:flex;gap:8px;align-items:center;}
.date-info{color:var(--text2);font-size:12px;font-weight:500;}
.btn-icon{width:28px;height:28px;border-radius:4px;border:1px solid var(--border);background:var(--card);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:14px;transition:all .2s;}
.btn-icon:hover{background:var(--accent);color:#fff;border-color:var(--accent);}
.btn-icon{position:relative;font-size:16px;line-height:1;}
.icon-badge{position:absolute;top:-6px;right:-6px;min-width:15px;height:15px;padding:0 3px;border-radius:8px;background:var(--accent);color:#fff;font-size:9px;font-weight:700;line-height:15px;text-align:center;box-shadow:0 0 0 1px var(--card);}
.icon-badge:empty{display:none;}
/* 顶部导航文字按钮（客户/联系人/会议/备忘录/AI雷达）；设置保留图标 */
.btn-nav{
  display:inline-flex;align-items:center;gap:3px;
  padding:4px 9px;border-radius:6px;border:1px solid var(--border);
  background:var(--card);color:var(--text);font-size:12.5px;line-height:1;cursor:pointer;
  font-family:inherit;white-space:nowrap;transition:all .2s;
}
.btn-nav:hover{background:var(--accent);color:#fff;border-color:var(--accent);}
/* AI 排程按钮：低调处理，不喧宾夺主 */
.btn-ai-lowkey{
  display:inline-flex;align-items:center;gap:3px;
  padding:4px 10px;border-radius:6px;border:1px solid var(--border);
  background:var(--card);color:var(--text2);font-size:12px;line-height:1;cursor:pointer;
  font-family:inherit;white-space:nowrap;transition:all .2s;
}
.btn-ai-lowkey:hover{background:var(--accent);color:#fff;border-color:var(--accent);}

/* Cards */
.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:10px;margin-bottom:8px;box-shadow:var(--shadow);}
.card-title{font-size:13px;font-weight:600;margin-bottom:8px;color:var(--slate);display:flex;align-items:center;justify-content:space-between;}

/* Schedule Hero */
.schedule-hero{background:linear-gradient(135deg,#fff 0%,#f8fafc 100%);border:1px solid var(--border);border-top:3px solid var(--accent);border-radius:var(--radius);padding:10px;margin-bottom:8px;box-shadow:var(--shadow-lg);}
.schedule-hero-title{font-size:15px;font-weight:700;color:var(--navy);margin-bottom:10px;display:flex;align-items:center;justify-content:space-between;}
.schedule-stats{display:flex;gap:12px;margin-bottom:8px;font-size:11px;color:var(--text2);}
.schedule-stats span{display:flex;align-items:center;gap:3px;}
.stat-num{font-weight:600;color:var(--text);}
/* Highlight today's pending count */
.today-pending-highlight{display:inline-flex;align-items:center;gap:4px;background:var(--accent);color:#fff;padding:3px 10px;border-radius:4px;font-size:12px;font-weight:700;margin-left:8px;}
.today-pending-highlight .highlight-num{font-size:16px;font-weight:800;}

/* Progress */
.progress-bar{height:4px;background:var(--border);border-radius:2px;margin-bottom:8px;overflow:hidden;}
.progress-fill{height:100%;background:var(--accent);border-radius:2px;transition:width .3s;}
.progress-text{font-size:10px;color:var(--text3);margin-bottom:8px;}

/* Schedule Groups */
.schedule-groups{display:flex;flex-direction:column;gap:6px;}
.schedule-group{display:flex;gap:6px;border:1px solid var(--border);border-radius:6px;overflow:hidden;background:var(--card);}
.group-header{width:72px;flex-shrink:0;padding:6px 3px;display:flex;flex-direction:column;justify-content:flex-start;align-items:center;font-weight:600;font-size:12px;text-align:center;border-right:1px solid var(--border);}
.group-header.p0{background:#ffebee;color:#c62828;}
.group-header.p1{background:var(--card)3e0;color:#e65100;}
.group-header.p2{background:var(--card)de7;color:#f9a825;}
.group-header.p3{background:#e3f2fd;color:#1565c0;}
.group-header.overflow{background:#f5f5f5;color:#666;}
.group-label{font-size:12px;line-height:1.2;}
.group-time{font-size:9px;font-weight:400;margin-top:2px;opacity:.8;line-height:1.2;}
.group-tasks{flex:1;padding:4px;display:flex;flex-direction:column;gap:3px;}
/* Today task cards - more prominent */
.group-task{padding:5px 7px;border:1px solid #eee;border-radius:4px;background:#fafafa;display:flex;align-items:flex-start;gap:5px;font-size:12.5px;}
.group-task:hover{background:#f5f5f5;border-color:#ddd;}
.group-task-name{font-size:13px;font-weight:600;line-height:1.3;}
/* Urgent tasks get red highlight */
.group-task.task-urgent{border-left:3px solid var(--danger);background:linear-gradient(90deg,rgba(214,69,69,.06),transparent 40%);}
.group-task.task-urgent .group-task-name{color:var(--danger);font-weight:700;}
/* Today tasks in work time get accent highlight */
.group-task.task-today{border-left:3px solid var(--accent);background:linear-gradient(90deg,rgba(30,77,140,.05),transparent 30%);}
.group-task.completed{opacity:.55;background:#f0f0f0;}
.group-task.completed .group-task-name{text-decoration:line-through;color:var(--text3);}
/* Completed-in-place: task stays in schedule but grayed out */
.group-task.completed-in-place{opacity:.6;background:linear-gradient(90deg,#f0f0f0,#f8f8f8);border-left:3px solid var(--success);}
.group-task.completed-in-place .group-task-name{text-decoration:line-through;color:var(--text3);}
.group-task.completed-in-place .group-task-tags{opacity:.7;}
.group-task.completed-in-place .group-task-time{opacity:.7;}
/* Segment tag for merged display */
.seg-tag{font-size:9px;padding:1px 4px;border-radius:2px;background:#e8eaf6;color:#3949ab;margin-left:4px;}
.group-task-left{flex:1;display:flex;flex-direction:column;gap:1px;min-width:0;}
/* v2.17：拖动手柄与任务名同行，不再单独占一行 */
.group-task-title-row{display:flex;align-items:baseline;gap:4px;min-width:0;}
.group-task-title-row .group-task-name{flex:1;min-width:0;word-break:break-word;}
.group-task-title-row .drag-handle{align-self:baseline;margin-top:0;padding:0 2px 0 0;font-size:13px;flex-shrink:0;}
.group-task-right{display:flex;flex-direction:column;gap:2px;align-items:flex-end;flex-shrink:0;padding-left:8px;border-left:1px solid #f0f0f0;}
.group-task-name{line-height:1.35;}
.group-task-note{font-size:10px;color:var(--text2);line-height:1.3;cursor:pointer;border-bottom:1px dashed transparent;}
.group-task-note:hover{border-bottom-color:var(--text3);}
.group-task-note.editing{border-bottom:none;}
.note-edit-input{font-size:10px;border:1px solid var(--accent);border-radius:2px;padding:1px 4px;width:100%;outline:none;background:var(--card);}
.group-task-tags{display:flex;gap:2px;flex-wrap:wrap;}
.group-tag{font-size:9px;padding:1px 4px;border-radius:2px;font-weight:500;}
.group-task-time{font-size:9px;color:var(--text3);white-space:nowrap;}
.group-task-created{font-size:8px;color:var(--text3);opacity:.6;}
.group-task-actions{display:flex;gap:2px;align-items:center;justify-content:flex-end;}
.group-check{width:14px;height:14px;cursor:pointer;accent-color:var(--success);}
@media(max-width:640px){
  .group-task{flex-direction:column;gap:1px;}
  .group-task-right{flex-direction:row;flex-wrap:wrap;border-left:none;padding-left:0;align-items:flex-start;}
}
.mini-btn{font-size:10px;padding:2px 6px;border:1px solid var(--border);border-radius:3px;cursor:pointer;background:var(--card);transition:all .15s;}
.mini-btn:hover{background:var(--accent);color:#fff;border-color:var(--accent);}
.mini-btn.danger:hover{background:var(--danger);color:#fff;}
.mini-btn.success:hover{background:var(--success);color:#fff;}
/* 图标按钮（悬停提示由 title 属性提供） */
.icon-btn{width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--border);border-radius:4px;background:var(--card);cursor:pointer;font-size:12px;line-height:1;padding:0;transition:all .15s;flex:none;}
.icon-btn:hover{background:var(--accent);color:#fff;border-color:var(--accent);}
.icon-btn.danger:hover{background:var(--danger);color:#fff;border-color:var(--danger);}
/* v2.27：已收款项编辑按钮置灰——浏览器原生 disabled 太浅、容易被忽略，显式加深置灰视觉 */
.icon-btn:disabled,.icon-btn[disabled]{opacity:.4;cursor:not-allowed;background:var(--card);color:var(--text3);filter:grayscale(.6);}
.icon-btn:disabled:hover,.icon-btn[disabled]:hover{background:var(--card);color:var(--text3);border-color:var(--border);}

/* Inline edit */
.inline-edit{display:none;margin-top:6px;padding:8px;background:#f8f8f8;border-radius:4px;border:1px solid var(--border);}
.inline-edit.show{display:block;}
.inline-edit label{font-size:12px;color:var(--text3);display:block;margin-bottom:4px;}
.inline-chips{display:flex;gap:4px;margin-bottom:6px;}
.inline-chip{font-size:11px;padding:3px 8px;border-radius:3px;border:1px solid var(--border);cursor:pointer;transition:all .15s;background:var(--card);}
.inline-chip:hover,.inline-chip.sel{background:var(--accent);color:#fff;border-color:var(--accent);}
.inline-row{display:flex;gap:8px;align-items:center;margin-bottom:6px;}
.inline-row label{margin-bottom:0;flex-shrink:0;width:60px;}
.inline-row input[type="time"],.inline-row input[type="date"]{width:0;min-width:60px;flex:1 1 0;font-size:11px;padding:1px 4px;height:24px;box-sizing:border-box;}
.inline-row input[type="time"]{-webkit-appearance:none;appearance:none;max-width:95px;}
.inline-row input[type="text"]{flex:1;font-size:12px;padding:3px 6px;}

/* Input Panels */
.input-toggle{display:flex;align-items:center;gap:6px;padding:9px 12px;border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:var(--radius);cursor:pointer;background:var(--card);font-size:13px;font-weight:600;color:var(--navy);transition:all .2s;margin-bottom:3px;}
.input-toggle:hover{border-color:var(--accent);background:var(--accent-light);}
.input-toggle .icon{font-size:16px;color:var(--accent);}
.collapsible{display:none;padding:10px 12px;border:1px solid var(--border);border-radius:var(--radius);background:var(--card);margin-bottom:8px;}
.collapsible.open{display:block;}
textarea,input[type="text"],input[type="date"],input[type="time"],select{border:1px solid var(--border);border-radius:var(--radius);padding:6px 10px;font-size:13px;font-family:inherit;outline:none;transition:border .2s;width:100%;}
input[type="time"]{-webkit-appearance:none;appearance:none;background:var(--card);}
textarea{min-height:100px;resize:vertical;}
textarea:focus,input:focus{border-color:var(--accent);}
.btn{padding:6px 14px;border:none;border-radius:var(--radius);font-size:12px;font-weight:600;cursor:pointer;transition:all .2s;}
.btn-primary{background:var(--accent);color:#fff;}
.btn-primary:hover{background:var(--accent2);}
.btn-outline{background:var(--card);border:1px solid var(--border);color:var(--slate);}
.btn-outline:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-light);}
.btn-danger{background:var(--danger);color:#fff;}
.btn-success{background:var(--success);color:#fff;}
.btn-group{display:flex;gap:4px;margin-top:6px;flex-wrap:wrap;}
.btn-sm{padding:3px 10px;font-size:11px;}

/* Backlog / Completed / History sections */
.section-toggle{display:flex;align-items:center;justify-content:space-between;padding:7px 10px;border:1px solid var(--border);border-left:3px solid var(--slate);border-radius:var(--radius);cursor:pointer;background:var(--card);font-size:12.5px;font-weight:600;color:var(--navy);transition:all .2s;margin-bottom:2px;}
.section-toggle:hover{border-color:var(--accent);background:var(--accent-light);}
.section-toggle .count{font-size:11px;color:var(--text3);font-weight:400;}
.section-desc{font-size:11px;font-weight:400;color:var(--text3);margin-left:6px;}
.section-content{display:none;border:1px solid var(--border);border-radius:var(--radius);background:var(--card);padding:8px;margin-bottom:8px;}
.section-content.open{display:block;}

/* Backlog item - two-row layout: name on top, dates below */
.backlog-item{display:flex;flex-direction:column;gap:4px;padding:7px 8px;border-bottom:1px solid var(--border);font-size:11.5px;border-left:3px solid transparent;}
.backlog-item:last-child{border-bottom:none;}
/* v2.24.8：统一为「该办了」一种提示色——处理日期 ≤ 今天（今天到期或已逾期）都用它。
   此前「已纳入今日的影子」另有一套绿色置灰+「今日安排中」字样，与这套橙色叠加后
   同一批任务出现多种颜色，已移除；影子现在与普通条目外观完全一致。 */
.backlog-item.due-today{border-left-color:#e65100;background:linear-gradient(90deg,rgba(255,138,0,.08),transparent);}
.backlog-item.due-soon{border-left-color:#f9a825;background:linear-gradient(90deg,rgba(255,193,7,.08),transparent);}
.backlog-item-head{display:flex;align-items:center;gap:6px;}
.backlog-name{flex:1;font-weight:600;font-size:13.5px;line-height:1.35;color:var(--text);word-break:break-word;}
.backlog-imp{font-size:10px;font-weight:700;color:#c62828;background:#ffeaea;padding:1px 6px;border-radius:3px;white-space:nowrap;flex-shrink:0;}
.backlog-item-meta{display:flex;gap:4px;flex-wrap:wrap;align-items:center;font-size:10px;}
/* v2.17：操作图标移到条目右侧，与内容同行，纵向更紧凑 */
.backlog-item-row{display:flex;align-items:flex-start;gap:6px;}
.backlog-item-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;}
.backlog-item-actions{display:flex;gap:2px;align-items:center;flex-shrink:0;margin-top:0;}
.backlog-date-tag{font-size:9px;padding:1px 4px;border-radius:2px;display:inline-block;}
.backlog-created{font-size:9px;color:var(--text3);opacity:.6;line-height:1.2;}
/* v2.22.23：子任务缩进展示，左侧竖线区分主/子任务；v2.22.24：三级（孙任务）再缩进一级 */
.backlog-item-child{margin-left:22px;border-left:3px solid #cfd8dc;background:rgba(207,216,220,.12);}
.backlog-item-child .backlog-name{font-size:12.5px;}
.backlog-item-child.backlog-item-lv3{margin-left:44px;border-left:3px solid #e0e0e0;background:rgba(207,216,220,.06);}
.backlog-item-child.backlog-item-lv3 .backlog-name{font-size:12px;color:var(--text2);}
.backlog-child-source{font-size:9px;color:var(--text3);opacity:.75;padding:1px 0 0 2px;}
.inline-meta-row{opacity:.75;}
.btn.btn-danger-outline{border:1px solid var(--danger);color:var(--danger);background:var(--card);}
.btn.btn-danger-outline:hover{background:var(--danger);color:#fff;}

/* 待办池按钮：重点突出『纳入今日』与『修改』 */
.backlog-btn{font-size:10px;padding:2px 7px;border:1px solid var(--border);border-radius:3px;cursor:pointer;background:var(--card);color:var(--text2);transition:all .15s;white-space:nowrap;}
.backlog-btn:hover{background:var(--accent);color:#fff;border-color:var(--accent);}
.backlog-btn.danger:hover{background:var(--danger);color:#fff;border-color:var(--danger);}

/* Completed item with restore checkbox */
.done-item{display:flex;align-items:center;gap:6px;padding:6px;border-bottom:1px solid var(--border);font-size:12px;}
.done-item:last-child{border-bottom:none;}
.done-item.restorable{background:#fafbfc;}
.done-item.restorable:hover{background:var(--accent-light);}
.done-check{width:14px;height:14px;cursor:pointer;accent-color:var(--success);flex-shrink:0;}
.done-name{flex:1;font-weight:600;font-size:13px;}
.done-main{display:flex;flex-direction:column;flex:1;min-width:0;}
.done-main .done-name{flex:none;}
.done-note{font-size:11px;color:var(--text3);margin-top:2px;line-height:1.3;word-break:break-word;}
.done-item.completed .done-name{text-decoration:line-through;color:var(--text3);}
.done-date-tag{font-size:9px;padding:1px 5px;border-radius:2px;background:var(--accent-light);color:var(--accent);white-space:nowrap;}
.done-date-tag.recv{background:#e8f5e9;color:#2e7d32;}
.done-del{flex:none;width:18px;height:18px;line-height:16px;text-align:center;border:1px solid var(--border);border-radius:4px;background:var(--card);color:var(--text3);cursor:pointer;font-size:11px;padding:0;transition:all .15s;}
.done-del:hover{background:rgba(214,69,69,.10);border-color:var(--danger);color:var(--danger);}
.done-date-group{margin-bottom:8px;}
.done-date-group:last-child{margin-bottom:0;}
.done-date-header{font-size:11px;font-weight:700;color:var(--accent);padding:4px 6px;background:var(--accent-light);border-radius:3px;margin-bottom:4px;}
.done-meta{font-size:10px;color:var(--text3);white-space:nowrap;}

/* Weekly summary card */
.weekly-summary{background:linear-gradient(135deg,#f0f4f8 0%,#e8f0fc 100%);border:1px solid var(--border);border-radius:var(--radius);padding:10px;margin-top:8px;margin-bottom:6px;}
.weekly-summary-title{font-size:12px;font-weight:600;color:var(--accent);margin-bottom:6px;display:flex;align-items:center;gap:4px;}
.more-records-inline{font-size:11px;padding:2px 8px;border:1px solid var(--border);border-radius:10px;cursor:pointer;color:var(--text2);background:transparent;margin-left:auto;transition:all .15s;white-space:nowrap;font-weight:normal;}
.more-records-inline:hover{background:var(--accent-light);color:var(--accent);border-color:var(--accent);}
.weekly-summary-stats{display:flex;gap:12px;font-size:11px;color:var(--text2);flex-wrap:wrap;}
.weekly-summary-stats b{color:var(--navy);font-size:13px;}

/* More records button */
.more-records-btn{display:flex;align-items:center;justify-content:center;gap:6px;padding:8px;border:1px dashed var(--border);border-radius:var(--radius);cursor:pointer;font-size:12px;color:var(--accent);background:transparent;transition:all .2s;margin-top:6px;width:100%;}
.more-records-btn:hover{background:var(--accent-light);border-color:var(--accent);}

/* ===== History Page Overlay (OneNote style) ===== */
.history-overlay{display:none;position:fixed;top:0;left:0;right:0;bottom:0;background:var(--bg);z-index:3000;flex-direction:column;}
.history-overlay.show{display:flex;}
.history-header{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;background:var(--navy);color:#fff;flex-shrink:0;}
.history-header h2{font-size:16px;font-weight:700;}
/* v2.24.7：历史页头部的周报/月报入口。margin-left:auto 让按钮组紧贴右侧关闭按钮，
   标题保持在最左，不会因多了按钮而被挤成三等分。窄屏时允许换行，避免按钮被压扁。 */
.history-header-actions{display:flex;align-items:center;gap:8px;margin-left:auto;flex-wrap:wrap;justify-content:flex-end;}
.history-header-actions .btn{white-space:nowrap;}
@media (max-width:640px){
  .history-header{flex-wrap:wrap;gap:8px;}
  .history-header h2{width:100%;}
}
.history-close{width:32px;height:32px;border:none;background:rgba(255,255,255,0.15);color:#fff;border-radius:4px;cursor:pointer;font-size:18px;transition:background .2s;}
.history-close:hover{background:rgba(255,255,255,0.3);}
/* v2.25.5 客户进展：客户边栏在左、任务列表在右 —— 必须 row。
   ⚠️ 这里曾是 column（v2.25.1 顶部标签条时代的写法），v2.25.4 改成左侧边栏后没跟着改，
   结果边栏与列表上下堆叠、边栏撑满高度把列表挤到视口外，表现为「点客户右侧没反应」。 */
#custProgressOverlay .history-body{flex-direction:row;}
.history-body{display:flex;flex:1;overflow:hidden;}
.history-sidebar{width:265px;flex-shrink:0;background:var(--card);border-right:1px solid var(--border);display:flex;flex-direction:column;overflow:hidden;}
.history-sidebar-tabs{display:flex;border-bottom:1px solid var(--border);flex-shrink:0;}
.history-tab{flex:1;padding:10px;text-align:center;font-size:12px;font-weight:600;color:var(--text2);cursor:pointer;border-bottom:2px solid transparent;transition:all .2s;}
.history-tab.active{color:var(--accent);border-bottom-color:var(--accent);background:var(--accent-light);}
.history-tab:hover:not(.active){background:#f5f7fa;}
.history-sidebar-list{flex:1;overflow-y:auto;padding:4px;}
.history-sidebar-item{padding:8px 12px;border-radius:4px;cursor:pointer;font-size:12px;transition:all .15s;margin-bottom:2px;border:1px solid transparent;}
.history-sidebar-item:hover{background:#f5f7fa;}
.history-sidebar-item.active{background:var(--accent-light);border-color:var(--accent);color:var(--accent);font-weight:600;}
.history-sidebar-item .item-label{font-weight:600;display:block;}
.history-sidebar-item .item-sub{font-size:10px;color:var(--text3);margin-top:2px;}
.history-content{flex:1;overflow-y:auto;padding:16px;}
.history-day-group{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:8px 10px;margin-bottom:8px;box-shadow:var(--shadow);}
.history-day-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:5px;padding-bottom:4px;border-bottom:1px solid var(--border);}
.history-day-date{font-size:14px;font-weight:700;color:var(--navy);}
.history-day-stats{font-size:11px;color:var(--text2);}
/* v2.23.1：紧凑布局，名称列不换行、合理分配列宽 */
.history-day-tasks{display:flex;flex-direction:column;gap:2px;}
.history-day-task{display:flex;align-items:center;gap:8px;padding:4px 8px;font-size:12px;border-radius:3px;background:#f8fafc;flex-wrap:nowrap;}
.history-day-task-name{flex:1 1 0%;font-weight:500;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.history-day-task-note{flex:0 1 auto;max-width:32%;font-size:11px;color:var(--text2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.history-day-task-cust{flex:0 0 auto;max-width:130px;font-size:11px;color:var(--accent);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.history-day-task-fixed{margin-left:auto;display:flex;gap:8px;align-items:center;flex:0 0 auto;}
.hd-imp{padding:1px 7px;border-radius:10px;font-size:10px;white-space:nowrap;}
.hd-imp-hi{background:#fdecea;color:#c62828;}
.hd-imp-urg{background:#fff3e0;color:#e65100;}
.hd-imp-norm{background:#e8f5e9;color:#2e7d32;}
.hd-task-time{font-size:10px;color:var(--text3);white-space:nowrap;}
.history-detail-export{margin:4px 0 10px;}
/* v2.23.3：雷达结果来源操作 + 网页快照 */
.market-result-acts{display:flex;gap:8px;flex-wrap:wrap;margin-top:6px;}
.market-result-act{font-size:11px;color:var(--accent);cursor:pointer;text-decoration:none;padding:2px 9px;border:1px solid var(--border);border-radius:12px;background:#fff;}
.market-result-act:hover{background:var(--accent-light);}
.radar-snap-source{font-size:12px;color:var(--text2);margin:6px 0;word-break:break-all;}
.radar-snap-body{white-space:pre-wrap;line-height:1.7;font-size:13px;max-height:60vh;overflow:auto;background:#f8fafc;padding:12px;border-radius:6px;}
.history-report{background:var(--card);border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:var(--radius);padding:14px;margin-bottom:10px;box-shadow:var(--shadow);}
.history-report-title{font-size:13px;font-weight:700;color:var(--accent);margin-bottom:8px;}
.history-report-content{font-size:12px;line-height:1.8;white-space:pre-wrap;color:var(--text);}
.client-report-content{white-space:normal;}
.client-report-content h3{font-size:14px;font-weight:700;margin:14px 0 6px;color:var(--accent);}
.client-report-content ul{margin:4px 0 8px;padding-left:20px;}
.client-report-content li{margin:3px 0;}
.client-report-content span[style*="color"]{font-weight:600;}
.history-empty-state{text-align:center;padding:48px;color:var(--text3);font-size:13px;}
.history-report-btn{margin-top:8px;}

/* Receivable */
.recv-item{display:flex;align-items:center;gap:6px;padding:6px;border-bottom:1px solid var(--border);font-size:12px;}
.recv-item:last-child{border-bottom:none;}
.recv-name{flex:1;font-weight:500;}
.recv-amount{font-weight:600;color:var(--warning);white-space:nowrap;}
.recv-created{font-size:9px;color:var(--text3);opacity:.6;}
.recv-item.completed .recv-name{text-decoration:line-through;color:var(--text3);}
.recv-item.completed .recv-amount{color:var(--text3);}
.recv-item.completed{background:#edf0f4;}
.recv-item.completed .recv-created,.recv-item.completed .recv-invoice{opacity:.45;}
.recv-item.completed .recv-inv-star{filter:grayscale(1);opacity:.55;}
.recv-item.completed .group-check{opacity:.6;}
.recv-item.overdue{background:rgba(214,69,69,.06);border-left:3px solid var(--danger);}
.recv-item.overdue .recv-name{color:var(--danger);font-weight:600;}
.recv-invoice{font-size:10px;color:var(--text2);white-space:nowrap;}
/* v2.26.24：超期>30天未收款 → 仅显示一个红色感叹号（圆形红底白字"!"），不再展示「超期N天未收款」文字 */
.recv-overdue-tag{display:inline-flex;align-items:center;justify-content:center;width:15px;height:15px;background:var(--danger);color:#fff;border-radius:50%;font-size:11px;font-weight:800;line-height:1;cursor:help;flex-shrink:0;}
/* v2.26.8：是否开票 星标图标 —— 彩色实心★=已开票 / 空心☆=未开票（不再展示文字） */
.recv-inv-star{font-size:15px;line-height:1;cursor:pointer;user-select:none;flex-shrink:0;
  color:var(--text4, #bbb);text-shadow:none;transition:transform .1s;padding:0 2px;}
.recv-inv-star.on{color:#f5a623;text-shadow:0 0 1px rgba(245,166,35,.6);} /* 已开票=金色实心 */
.recv-inv-star:hover{transform:scale(1.15);}
.recv-add-row{display:flex;gap:6px;padding:6px;border-bottom:1px solid var(--border);}
.recv-add-row input{font-size:12px;padding:4px 8px;}

/* Manual add */
.manual-add-row{display:flex;gap:4px;padding:8px 0;border-top:1px solid var(--border);margin-top:4px;flex-wrap:wrap;align-items:center;}
.manual-add-row input{font-size:12px;padding:4px 8px;}
.manual-add-row input[type="date"]{width:110px;font-size:11px;}
.manual-add-row .add-label{font-size:10px;color:var(--text3);flex-shrink:0;}

/* History */
.history-item{padding:4px 0;border-bottom:1px solid var(--border);font-size:12px;}
.history-date{font-weight:600;color:var(--text2);margin-bottom:2px;}
.history-stats{font-size:11px;color:var(--text3);}

/* Empty state */
.empty{text-align:center;padding:24px;color:var(--text3);font-size:13px;}
.empty-icon{font-size:40px;margin-bottom:8px;}

/* Config Modal */
.modal-overlay{display:none;position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.4);z-index:4001;justify-content:center;align-items:center;}
.modal-overlay.show{display:flex;}
.modal{background:var(--card);border-radius:8px;padding:24px;width:480px;max-width:90vw;max-height:80vh;overflow-y:auto;box-shadow:0 4px 20px rgba(0,0,0,0.15);}
/* v2.28.0 登录页 */
.login-modal{max-width:380px;width:380px;}
/* v2.28.5：登录页须全屏不透明覆盖，防止弹窗外透出任务/界面数据（不同于普通弹窗，登录态应完全挡住底层） */
#loginOverlay{top:0;background:var(--bg);z-index:5000;}
/* v2.28.5：未登录前彻底隐藏主应用与标签栏，杜绝任务数据/界面在登录框出现前透出（登录成功/已登录才加 .authed 揭示） */
body:not(.authed) #pageTabBar,
body:not(.authed) .app{display:none !important;}
.login-err{color:var(--danger);font-size:13px;min-height:18px;margin-bottom:6px;}
.login-modal label{display:block;margin-top:10px;font-size:13px;color:var(--text2);}
.login-modal input[type=text],.login-modal input[type=password]{width:100%;margin-top:4px;}
.modal h2{font-size:18px;font-weight:600;margin-bottom:16px;}
.modal label{font-size:13px;color:var(--text2);display:block;margin-bottom:4px;margin-top:12px;}

/* 客户周报/月报生成器 */
.client-report-modal{max-width:680px;width:90vw;}
.client-report-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px;}
.client-report-head h2{margin-bottom:0;}
.client-report-prompt{font-size:11px;color:var(--text3);background:var(--bg);border-radius:6px;padding:8px 10px;margin-bottom:10px;line-height:1.6;}
.client-report-fields label{font-size:12px;color:var(--text2);display:block;margin:10px 0 4px;font-weight:600;}
.client-report-ta{width:100%;min-height:120px;resize:vertical;border:1px solid var(--border);border-radius:6px;padding:8px;font-size:12.5px;font-family:inherit;background:var(--card);color:var(--text);box-sizing:border-box;}
.client-report-actions{display:flex;gap:8px;margin-top:12px;}
.client-report-result{margin-top:14px;border-top:1px dashed var(--border);padding-top:12px;}
.client-report-result-head{display:flex;justify-content:space-between;align-items:center;font-size:12px;color:var(--text2);margin-bottom:8px;gap:8px;flex-wrap:wrap;}
.client-report-result-head > div{display:flex;gap:6px;}
.client-report-preview{max-height:42vh;overflow-y:auto;background:var(--bg);border:1px solid var(--border);border-radius:6px;padding:12px;font-size:12.5px;line-height:1.8;color:var(--text);}
.client-report-preview h3{font-size:14px;font-weight:700;margin:14px 0 6px;color:var(--accent);}
.client-report-preview ul{margin:4px 0 8px;padding-left:20px;}
.client-report-preview li{margin:3px 0;}
.client-report-preview span[style*="color"]{font-weight:600;}
.modal input,.modal select{width:100%;}
.period-list{margin-top:8px;}
.period-row{display:flex;gap:8px;align-items:center;margin-bottom:6px;}
.period-row input{width:80px;}
.period-row .del-btn{cursor:pointer;color:var(--danger);font-size:16px;border:none;background:none;}

/* AI Loading */
.ai-loading{text-align:center;padding:24px;}
.spinner{width:36px;height:36px;border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite;margin:0 auto 12px;}
@keyframes spin{to{transform:rotate(360deg);}}

/* AI 助手卡片 */
.ai-assist-head{border-left:3px solid var(--warning);}
.ai-assist-head:hover{background:var(--accent-light);}

/* 客户信息模块 */
.customer-modal{max-width:560px;width:560px;}
.customer-modal-head{display:flex;align-items:center;justify-content:space-between;}
.customer-modal-head h2{margin-bottom:0;}
.customer-modal-field{margin-top:14px;}
.customer-modal-field label{font-size:13px;color:var(--text2);display:block;margin-bottom:4px;}
.customer-content-ta{width:100%;min-height:300px;font-size:13px;line-height:1.7;padding:10px 12px;border:1px solid var(--border);border-radius:var(--radius);resize:vertical;font-family:inherit;color:var(--text);}
.customer-content-ta:focus{outline:none;border-color:var(--accent);}
.customer-modal-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:14px;}
.customer-list-empty{font-size:12px;color:var(--text3);padding:8px 0;}
.customer-item{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 10px;border:1px solid var(--border);border-radius:var(--radius);background:var(--card);margin-top:4px;}
.customer-item-main{flex:1;min-width:0;cursor:pointer;}
.customer-name{font-size:13px;font-weight:600;color:var(--navy);display:block;}
.customer-preview{font-size:11px;color:var(--text3);display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px;}
.customer-item-actions{display:flex;align-items:center;gap:6px;flex-shrink:0;}
.customer-updated{font-size:10px;color:var(--text3);}

/* ===== v2.22.15 子任务查看弹窗 ===== */
.subtask-modal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;}
.subtask-modal-head h2{margin-bottom:0;font-size:16px;}
.subtask-modal-body{max-height:60vh;overflow-y:auto;}
.subtask-empty{font-size:12px;color:var(--text3);padding:16px 0;text-align:center;}
.subtask-row{border:1px solid var(--border);border-radius:8px;padding:10px 12px;margin-bottom:8px;background:var(--bg);}
.subtask-row.done{opacity:.72;}
.subtask-row-head{display:flex;align-items:center;gap:8px;}
.subtask-name{font-size:13px;font-weight:600;color:var(--text);flex:1;min-width:0;}
.subtask-badge{font-size:10px;padding:1px 7px;border-radius:10px;font-weight:600;white-space:nowrap;}
.subtask-badge.badge-done{background:var(--success);color:#fff;}
.subtask-badge.badge-pending{background:#fff3e0;color:#e65100;}
.subtask-src{font-size:10px;color:var(--text3);background:var(--card);border:1px solid var(--border);border-radius:4px;padding:1px 6px;}
/* v2.22.24：弹窗内三级（孙任务）缩进 + 层级标识 */
.subtask-row.subtask-row-lv2{margin-left:20px;border-left:3px solid #cfd8dc;}
.subtask-row.subtask-row-lv2 .subtask-name{font-size:12.5px;color:var(--text2);}
.subtask-lv{font-size:10px;color:#5e35b1;background:#ede7f6;border-radius:4px;padding:1px 6px;white-space:nowrap;}
.subtask-meta{display:flex;flex-direction:column;gap:3px;margin-top:6px;font-size:11.5px;color:var(--text2);}
.subtask-meta span{line-height:1.5;word-break:break-all;}

/* 客户三级树（侧栏） */
.ctree-group{margin-top:6px;}
.ctree-group-head{display:flex;align-items:center;gap:4px;cursor:pointer;padding:6px 8px;border-radius:6px;font-weight:600;color:var(--navy);font-size:13px;}
.ctree-group-head:hover{background:var(--accent-light);}
.ctree-toggle{width:14px;display:inline-block;color:var(--text3);}
.ctree-group-name{flex:1;}
.ctree-del{margin-left:2px;background:transparent;border:none;color:var(--text3);cursor:pointer;font-size:11px;line-height:1;padding:2px 4px;border-radius:4px;}
.ctree-del:hover{background:#ffebee;color:#c62828;}
.ctree-empty{padding:2px 8px 6px 22px;font-size:11px;color:var(--text3);font-style:italic;}
.ctree-count{font-size:11px;color:var(--text3);font-weight:400;}
.ctree-item{display:flex;align-items:center;justify-content:space-between;gap:6px;padding:6px 8px;border-radius:6px;cursor:pointer;font-size:13px;color:var(--text);}
.ctree-item:hover{background:var(--accent-light);}
.ctree-item.sel{background:var(--accent);color:#fff;}
.ctree-item.sel .ctree-name{color:#fff;}
.ctree-l2{margin-left:14px;}
.ctree-l3{margin-left:30px;}
.ctree-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.ctree-coop{font-size:10px;padding:1px 5px;border-radius:8px;background:#e8f5e9;color:#2e7d32;}
/* v2.22.3 合作状态配色（v2.22.5 起：仅「是否合作」标记框保留配色，客户名称不再着色） */
.ctree-coop.ct-coop-合作中{background:#e8f5e9;color:#2e7d32;}
.ctree-coop.ct-coop-曾合作{background:var(--card)4e0;color:#b07d12;}
.ctree-coop.ct-coop-未合作{background:#fdeaea;color:#b23b3b;}
.ctree-item.sel .ctree-coop{background:rgba(255,255,255,.25);color:#fff;}
.ctree-branch-toggle{margin-left:14px;font-size:11px;color:var(--text3);cursor:pointer;padding:3px 8px;}
.ctree-branch-toggle:hover{color:var(--accent);}
.ctree-branch-of{font-size:10px;color:var(--text3);margin-left:6px;}

/* ===== 市场消息模块 ===== */
.market-prompt-ta{min-height:90px;width:100%;font-size:12px;padding:8px;border:1px solid var(--border);border-radius:var(--radius);box-sizing:border-box;resize:vertical;font-family:inherit;}
.market-results-head{margin:14px 0 8px;font-size:12px;font-weight:600;color:var(--navy);border-bottom:1px solid var(--border);padding-bottom:6px;}
.market-result{border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px;margin-bottom:10px;background:var(--card);}
.market-result-head{display:flex;justify-content:space-between;align-items:baseline;gap:8px;}
.market-result-title{font-weight:600;color:var(--navy);font-size:13px;}
.market-result-time{font-size:11px;color:var(--text3);white-space:nowrap;}
.market-result-content{font-size:12px;color:var(--text);margin:6px 0;line-height:1.6;}
.market-result-foot{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:11px;}
.market-result-source{color:var(--text2);}
.market-result-url{color:var(--accent);text-decoration:none;}
.market-result-url:hover{text-decoration:underline;}

/* v2.22.12 AI 雷达：运行中提示 + 运行记录 */
.radar-running{margin:10px 0;padding:8px 12px;background:#e3f2fd;color:#1565c0;border:1px solid #90caf9;border-radius:var(--radius);font-size:12px;display:flex;align-items:center;gap:8px;font-weight:600;}
.radar-running::before{content:'';width:14px;height:14px;border:2px solid #1565c0;border-top-color:transparent;border-radius:50%;animation:radar-spin 0.8s linear infinite;display:inline-block;}
@keyframes radar-spin{to{transform:rotate(360deg);}}
.radar-spin-mini{display:inline-block;animation:radar-spin 0.8s linear infinite;}
.radar-run{border:1px solid var(--border);border-radius:var(--radius);padding:6px 10px;margin-bottom:8px;background:var(--card);}
.radar-run summary{cursor:pointer;font-size:12px;font-weight:600;color:var(--navy);display:flex;align-items:center;gap:8px;list-style:none;}
.radar-run summary::-webkit-details-marker{display:none;}
.radar-run-time{font-weight:600;}
.radar-run-cnt{color:var(--text3);font-weight:400;}
.radar-run-body{padding:8px 4px 2px;}

/* ===== v2.22.26 AI 雷达：视图切换标签 + 历史汇总 + 真实性标记 ===== */
.radar-view-tabs{display:inline-flex;border:1px solid var(--border);border-radius:8px;overflow:hidden;background:var(--card);}
.radar-view-tab{border:none;background:transparent;padding:7px 14px;font-size:13px;font-weight:600;color:var(--text2);cursor:pointer;transition:all .15s;}
.radar-view-tab:hover{background:#f5f7fa;}
.radar-view-tab.active{background:var(--accent);color:#fff;}
.radar-conn{display:inline-block;padding:2px 9px;border-radius:10px;font-size:11px;font-weight:600;white-space:nowrap;}
.radar-conn.conn-ok{background:#e8f5e9;color:#2e7d32;}
.radar-conn.conn-warn{background:#fff3e0;color:#e65100;}
.radar-conn.conn-err{background:#ffebee;color:#c62828;}
.radar-toggle{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:#fff;cursor:pointer;user-select:none;margin-left:2px;}
.radar-toggle input{transform:translateY(1px);accent-color:var(--accent);}
.radar-toggle-inline{color:var(--text);margin-left:0;}
.radar-sidebar-actions{padding:8px 10px 4px;display:flex;flex-direction:column;}
.radar-history-back{padding:8px 12px 0;}
.radar-auto-note{background:#ede7f6;color:#5e35b1;font-size:12px;padding:6px 10px;border-radius:6px;margin:8px 0;}
.market-result-verified{margin-top:6px;font-size:11px;color:#2e7d32;font-weight:600;background:#e8f5e9;display:inline-block;padding:2px 8px;border-radius:10px;}
.market-result.expired{opacity:.62;background:#fafafa;}
.radar-expired-tag{color:#b26a00;background:#fff3e0;font-size:10px;font-weight:700;padding:1px 7px;border-radius:9px;margin-left:6px;}
.market-result-tag{font-size:11px;color:var(--accent2);font-weight:600;margin-right:10px;}
/* v2.23.17 雷达结果精简展示：一条一行（标题 | 日期 | 来源），替代原先 4~5 行的冗长卡片 */
.radar-brief{padding:7px 10px;margin-bottom:6px;}
.radar-brief-line{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;}
.radar-brief-title{font-weight:600;color:var(--navy);font-size:13px;flex:1 1 auto;min-width:0;}
.radar-brief-meta{font-size:11px;color:var(--text3);white-space:nowrap;}
.radar-brief-meta+.radar-brief-meta::before{content:'| ';color:var(--border);}
.radar-brief-sum{font-size:12px;color:var(--text2);margin-top:3px;line-height:1.5;}
.radar-hist-sample-head{margin:12px 0 8px;font-size:12px;font-weight:700;color:var(--accent2);}
.radar-history-summary{background:#f3f8ff;border:1px solid #d6e6ff;border-radius:10px;padding:12px 16px;margin-bottom:14px;}
.radar-history-summary-head{font-size:15px;font-weight:700;color:var(--accent);margin-bottom:6px;}
.radar-history-summary-stats{font-size:12px;color:var(--text);line-height:1.7;}
.radar-history-summary-stats b{color:var(--accent);}
.radar-history-note{display:block;font-size:11px;color:var(--text3);margin-top:4px;}
.radar-history-group{margin-bottom:18px;}
.radar-history-group-head{font-size:13px;font-weight:700;color:var(--navy);padding:6px 0;border-bottom:2px solid var(--accent-light);margin-bottom:8px;display:flex;align-items:center;gap:8px;}
.radar-history-group-head .item-sub{font-size:10px;color:var(--text3);font-weight:400;}

/* 客户右侧详情面板 */
.cust-detail{margin-top:12px;}
.cust-detail-head-row{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:10px;border-bottom:1px solid var(--border);padding-bottom:10px;}
.cust-detail-head-row h3{margin:0;font-size:16px;color:var(--navy);}
.cust-detail-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px 14px;}
.cust-field{display:flex;flex-direction:column;gap:3px;}
.cust-field label{font-size:12px;color:var(--text2);}
.cust-field input,.cust-field select{padding:6px 8px;border:1px solid var(--border);border-radius:6px;font-size:13px;font-family:inherit;color:var(--text);background:var(--card);box-sizing:border-box;width:100%;}
.cust-detail-section{margin-top:16px;border-top:1px dashed var(--border);padding-top:12px;}
.cust-detail-head{font-size:13px;font-weight:600;color:var(--accent2);margin-bottom:8px;}
.cust-empty{font-size:12px;color:var(--text3);padding:8px 0;}
.cust-contacts{display:flex;flex-direction:column;gap:8px;}
.cust-contact-card{border:1px solid var(--border);border-radius:8px;padding:8px 10px;background:var(--card);}
/* 客户信息页关键联系人：单行紧凑展示 */
.cust-contact-line{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:6px 10px;border:1px solid var(--border);border-radius:8px;background:var(--card);font-size:12.5px;}
.cctl-name{font-weight:600;color:var(--text);}
.cctl-duty{color:#1565c0;background:#e3f2fd;padding:1px 7px;border-radius:8px;font-size:11px;}
.cctl-phone,.cctl-email{color:var(--text2);font-size:11.5px;}
.cust-contact-line .mini-btn{margin-left:auto;}
.cust-contact-head{display:flex;align-items:center;justify-content:space-between;gap:8px;}
.cust-contact-meta{font-size:11px;color:var(--text2);margin-top:3px;}
.cust-contact-hist{margin-top:6px;font-size:11px;color:var(--text2);}
.ct-hist-item{padding:2px 0;border-top:1px dashed var(--border);}
.ct-hist-date{color:var(--text3);margin-right:6px;}
.ct-hist-empty{color:var(--text3);}
.cust-add-row{display:flex;gap:4px;margin-top:8px;align-items:center;flex-wrap:nowrap;}
.cust-add-row input,.cust-add-row select{padding:5px 7px;border:1px solid var(--border);border-radius:6px;font-size:12px;font-family:inherit;box-sizing:border-box;}
.cust-add-row input[type=text]{flex:1;min-width:50px;}
/* v2.22.3 待办添加行：任务名放大、描述最大、日期缩小 */
.cust-add-row .td-name{flex:1;min-width:80px;font-size:14px;font-weight:700;}
.cust-add-row .td-desc{flex:3;min-width:150px;font-size:13px;}
.cust-add-row .td-date{flex:0 0 132px;width:132px;font-size:12px;padding:5px 6px;}
.cust-big-note{width:100%;min-height:160px;border:1px solid var(--border);border-radius:8px;padding:10px 12px;font-size:13px;line-height:1.7;font-family:inherit;color:var(--text);box-sizing:border-box;resize:vertical;}
.cust-big-note:focus{outline:none;border-color:var(--accent);}
.cust-todos{display:flex;flex-direction:column;gap:6px;}
.cust-todo-item{display:flex;flex-direction:column;gap:2px;border:1px solid var(--border);border-radius:8px;padding:7px 10px;background:var(--card);}
.cust-todo-main{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:13px;}
.cust-todo-follow{font-size:11px;color:var(--warning);}
.cust-todo-desc{font-size:12px;color:var(--text2);}
.cust-feed{display:flex;flex-direction:column;gap:6px;max-height:360px;overflow-y:auto;}
.feed-item{display:flex;gap:8px;align-items:flex-start;border:1px solid var(--border);border-radius:8px;padding:7px 10px;background:var(--card);}
.feed-icon{font-size:14px;flex-shrink:0;}
.feed-body{flex:1;min-width:0;}
.feed-title{font-size:13px;color:var(--text);}
.feed-sub{font-size:11px;color:var(--text3);margin-top:2px;}
.feed-date{font-size:11px;color:var(--text3);flex-shrink:0;}

/* ===== v2.17 客户信息页：三级树 / 自动保存 / 业务联系人多选 / 客户待办 / 纪要 ===== */
.ctree-caret{width:14px;display:inline-block;color:var(--text3);text-align:center;flex-shrink:0;cursor:pointer;}
.ctree-item.sel .ctree-caret{color:#fff;}
.ctree-branch-line{width:12px;display:inline-block;color:var(--text3);flex-shrink:0;font-family:monospace;}
.ctree-item.sel .ctree-branch-line{color:#fff;}
.ctree-l3-tag{font-size:9px;padding:1px 5px;border-radius:8px;background:#eef2f7;color:#607d8b;flex-shrink:0;}
.ctree-item.sel .ctree-l3-tag{background:rgba(255,255,255,.25);color:#fff;}
.ctree-l3{margin-left:26px;font-size:12.5px;}
.cust-autosave-hint{font-size:11px;color:var(--text3);transition:color .2s;}
.cust-autosave-hint.saved{color:var(--success);font-weight:600;}
.cust-contact-pool{border:1px dashed var(--border);border-radius:8px;padding:8px 10px;margin-bottom:8px;background:#fafbfc;}
.cust-pool-title{font-size:11px;color:var(--text3);margin-bottom:6px;}
.cust-pool-item{display:flex;align-items:center;gap:6px;font-size:12.5px;padding:3px 0;cursor:pointer;}
.cust-pool-item input[type=checkbox]{width:14px;height:14px;accent-color:var(--accent);cursor:pointer;}
.cust-pool-name{font-weight:600;color:var(--text);}
.cust-pool-duty{font-size:10px;padding:1px 5px;border-radius:8px;background:#e3f2fd;color:#1565c0;}
.cust-pool-src{font-size:10px;color:var(--text3);margin-left:auto;}
.ct-duty-tag{font-size:10px;padding:1px 6px;border-radius:8px;background:#e3f2fd;color:#1565c0;}
.ct-src-tag{font-size:10px;padding:1px 6px;border-radius:8px;background:#f1f3f5;color:var(--text3);}
.cust-contact-head{flex-wrap:wrap;}
.cust-contact-head b{margin-right:2px;}
.cust-contact-head .icon-btn{margin-left:auto;}
.cust-contact-note{font-size:11.5px;color:var(--text2);margin-top:3px;}
.cust-contact-edit{margin-top:6px;padding:6px 8px;border:1px solid var(--accent);border-radius:6px;background:#f7fbff;}
.ct-block-title{font-size:10.5px;color:var(--text3);margin-top:8px;font-weight:600;letter-spacing:.3px;}
.cust-contact-taskhist{font-size:11px;color:var(--text2);}
.ct-task-item{padding:2px 0;border-top:1px dashed var(--border);}
.ct-task-src{font-size:9px;padding:0 4px;border-radius:6px;background:#eceff1;color:#607d8b;margin-left:4px;}
.cust-todo-pool{font-size:10px;padding:1px 6px;border-radius:8px;background:#ede7f6;color:#5e35b1;}
.cust-todo-main{flex-wrap:wrap;justify-content:flex-start;}
.cust-todo-main b{flex:1;min-width:0;word-break:break-word;}
.cust-todo-edit{margin-top:6px;padding:6px 8px;border:1px solid var(--accent);border-radius:6px;background:#f7fbff;}
.cust-more-row{margin-top:6px;text-align:center;}
.cust-hint{font-size:10.5px;color:var(--text3);margin-top:5px;}
.cust-notes{display:flex;flex-direction:column;gap:5px;}
.cust-note-item{border:1px solid var(--border);border-radius:8px;padding:6px 10px;background:var(--card);cursor:pointer;font-size:12.5px;}
.cust-note-item:hover{border-color:var(--accent);background:var(--accent-light);}
.cust-note-date{font-size:11px;color:var(--text3);margin-right:8px;}
.cust-note-title{font-weight:600;color:var(--text);}
.cust-note-att{font-size:10px;color:var(--text3);margin-left:6px;}
.cust-note-sum{font-size:11px;color:var(--text2);margin-top:3px;}
.cust-danger-zone{margin-top:22px;padding-top:12px;border-top:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;}
.cust-danger-tip{font-size:11px;color:var(--text3);}
.ai-chat-result{white-space:pre-wrap;word-break:break-word;background:var(--accent-light);border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px;font-size:13px;line-height:1.6;color:var(--text);max-height:320px;overflow-y:auto;margin-bottom:6px;}
@keyframes spin{to{transform:rotate(360deg);}}

/* Toast */
.toast{position:fixed;top:52px;right:20px;padding:12px 20px;border-radius:var(--radius);font-size:14px;z-index:4200;transform:translateX(120%);transition:transform .3s;box-shadow:0 2px 8px rgba(0,0,0,0.15);}
.toast.show{transform:translateX(0);}
.toast.success{background:var(--success);color:#fff;}
.toast.warning{background:var(--warning);color:#fff;}
.toast.danger{background:var(--danger);color:#fff;}

/* Report result */
.report-result{background:#f8f9fa;border-radius:var(--radius);padding:16px;margin-top:12px;font-size:13px;line-height:1.8;white-space:pre-wrap;border:1px solid var(--border);}

/* Task note panel (new notes module) */
.task-note-panel{display:none;margin-top:4px;padding:8px;background:#f8f9fa;border:1px solid var(--border);border-radius:4px;}
.task-note-panel.show{display:block;}
.task-note-panel textarea{width:100%;min-height:50px;font-size:12px;padding:6px 8px;resize:vertical;border-radius:3px;border:1px solid var(--border);}
.task-note-panel .note-options{display:flex;gap:8px;align-items:center;margin-top:6px;font-size:11px;color:var(--text2);}
.task-note-panel .note-options label{display:flex;align-items:center;gap:3px;cursor:pointer;}
.task-note-panel .btn-group{margin-top:6px;}

/* Backlog edit panel */
.backlog-edit{display:none;margin-top:4px;padding:8px;background:#f8f9fa;border:1px solid var(--border);border-radius:4px;font-size:11px;}
.backlog-edit.show{display:block;}
.backlog-edit .inline-row{display:flex;gap:6px;align-items:center;margin-bottom:4px;}
.backlog-edit .inline-row label{flex-shrink:0;width:70px;font-size:11px;color:var(--text3);}
.backlog-edit .inline-row input{font-size:11px;padding:3px 6px;}
.backlog-edit .btn-group{margin-top:4px;}

/* Report collapse/edit */
.history-report{position:relative;}
.history-report-header{display:flex;align-items:center;justify-content:space-between;cursor:pointer;}
.history-report-toggle{font-size:14px;transition:transform .2s;display:inline-block;margin-left:4px;}
.history-report-toggle.collapsed{transform:rotate(-90deg);}
.history-report-body{margin-top:8px;}
.history-report-body.collapsed{display:none;}
.history-report-actions{display:flex;gap:6px;margin-top:8px;flex-wrap:wrap;}
.history-report-edit{width:100%;min-height:280px;font-size:12.5px;padding:10px;border:1px solid var(--border);border-radius:4px;resize:vertical;line-height:1.8;font-family:inherit;white-space:pre-wrap;box-sizing:border-box;}
.history-report-manual-tag{font-size:9px;padding:1px 5px;border-radius:2px;background:var(--warning);color:#fff;margin-left:6px;}

/* Version info */
.version-info{font-size:11px;color:var(--text3);text-align:center;padding:8px 0;border-top:1px solid var(--border);margin-top:16px;}
.version-link{color:var(--accent);cursor:pointer;text-decoration:underline;}
.version-link:hover{color:var(--accent2);}

/* Version history modal */
.version-modal{max-width:600px;max-height:70vh;}
/* ===== v2.28.13 设置弹窗改版：480px 小窗 → 大底窗 + 分区折叠 + 吸顶标题/吸底按钮 =====
   起因：设置项越加越多（AI 接口 / 云同步 / 加密 / 账号管理 / 服务器备份回滚 / 工作时间 / 配色 / 数据管理），
   旧样式只有 480px 宽且要滚到底才能点到「保存」，用户反馈「设置页内容过多、看不全」。 */
.config-modal{width:880px;max-width:94vw;height:86vh;max-height:86vh;padding:0;display:flex;flex-direction:column;overflow:hidden;}
.config-modal-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 22px;border-bottom:1px solid var(--border);flex-shrink:0;}
.config-modal-head h2{margin:0;font-size:18px;}
.config-modal-x{border:none;background:transparent;font-size:18px;line-height:1;color:var(--text3);cursor:pointer;padding:2px 8px;border-radius:6px;}
.config-modal-x:hover{background:var(--bg);color:var(--text);}
.config-modal-body{flex:1;overflow-y:auto;padding:14px 22px 10px;}
.config-modal-foot{display:flex;align-items:center;gap:8px;justify-content:flex-end;padding:12px 22px;border-top:1px solid var(--border);background:var(--card);flex-shrink:0;}
.cfg-group{border:1px solid var(--border);border-radius:10px;margin-bottom:12px;background:var(--bg);}
.cfg-group>summary{cursor:pointer;padding:11px 14px;font-size:14px;font-weight:600;color:var(--navy);list-style:none;display:flex;align-items:center;gap:6px;}
.cfg-group>summary::-webkit-details-marker{display:none;}
.cfg-group>summary::before{content:'▸';color:var(--text3);font-size:12px;display:inline-block;transition:transform .15s;}
.cfg-group[open]>summary::before{transform:rotate(90deg);}
.cfg-group-body{padding:0 14px 14px;border-top:1px dashed var(--border);}
@media (max-width:760px){ .config-modal{width:96vw;height:92vh;} }
.version-entry{padding:10px 0;border-bottom:1px solid var(--border);}
.version-entry:last-child{border-bottom:none;}
.version-entry-header{display:flex;align-items:center;gap:8px;margin-bottom:4px;}
.version-entry-num{font-size:14px;font-weight:700;color:var(--accent);}
.version-entry-date{font-size:11px;color:var(--text3);}
.version-entry-content{font-size:12px;line-height:1.6;color:var(--text);padding-left:4px;}
.version-entry-content ul{margin:4px 0 0 16px;padding:0;}
.version-entry-content li{margin-bottom:2px;}

/* Avatar / fixed icon */
.app-logo{display:flex;align-items:center;gap:8px;}
.app-logo img{width:32px;height:32px;border-radius:50%;object-fit:cover;border:2px solid var(--accent);background:var(--card);}
.app-logo-text{font-size:17px;font-weight:700;color:var(--navy);letter-spacing:.5px;}

/* Fixed time task indicator */
.group-task.fixed-time{border-left:3px solid var(--warning);background:linear-gradient(90deg,rgba(232,146,60,.08),transparent 30%);}
.fixed-time-badge{font-size:9px;padding:1px 4px;border-radius:2px;background:var(--warning);color:#fff;font-weight:500;}
.fixed-time-lock{font-size:10px;color:var(--warning);}

/* Upcoming tasks section */
.upcoming-section{margin-top:8px;}
.upcoming-item{display:flex;align-items:center;gap:6px;padding:6px;border-bottom:1px solid var(--border);font-size:12px;}
.upcoming-item:last-child{border-bottom:none;}
.upcoming-date{width:42px;flex-shrink:0;text-align:center;padding:3px 0;border-radius:3px;background:var(--accent-light);color:var(--accent);font-weight:600;font-size:10px;}
.upcoming-name{flex:1;font-weight:500;}
.upcoming-nextweek{display:inline-block;margin-left:4px;font-size:9px;font-weight:400;color:#8d6e63;background:#efebe9;border:1px solid #d7ccc8;border-radius:2px;padding:0 4px;vertical-align:middle;}
.upcoming-recur{font-size:9px;padding:1px 4px;border-radius:2px;background:#f3e5f5;color:#7b1fa2;}
.upcoming-actions{display:flex;gap:4px;}

/* Recurring selector */
.recur-row{display:flex;gap:6px;align-items:center;margin-top:4px;flex-wrap:wrap;}
.recur-type{font-size:11px;padding:4px 8px;border:1px solid var(--border);border-radius:3px;cursor:pointer;background:var(--card);transition:all .15s;}
.recur-type:hover,.recur-type.sel{background:var(--accent);color:#fff;border-color:var(--accent);}
.recur-config{margin-top:4px;display:flex;gap:6px;align-items:center;}

/* Theme selector */
.theme-options{display:flex;gap:8px;flex-wrap:wrap;margin-top:6px;}
.theme-option{cursor:pointer;border:2px solid var(--border);border-radius:6px;padding:8px 12px;font-size:12px;transition:all .2s;display:flex;align-items:center;gap:8px;}
.theme-option:hover{border-color:var(--accent);}
.theme-option.sel{border-color:var(--accent);background:var(--accent-light);}
.theme-dot{width:14px;height:14px;border-radius:50%;display:inline-block;}

/* Reminder modal */
.reminder-modal{display:none;position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.5);z-index:4000;justify-content:center;align-items:center;}
.reminder-modal.show{display:flex;}
.reminder-box{background:var(--card);border-radius:8px;padding:24px;width:420px;max-width:90vw;box-shadow:0 8px 24px rgba(0,0,0,0.2);border-top:4px solid var(--warning);}
.reminder-title{font-size:16px;font-weight:700;color:var(--navy);margin-bottom:8px;display:flex;align-items:center;gap:8px;}
.reminder-task{font-size:14px;font-weight:600;color:var(--accent);margin:12px 0;padding:10px;background:var(--accent-light);border-radius:4px;}
.reminder-time{font-size:12px;color:var(--text2);margin-bottom:16px;}

/* Time-based schedule */
.timeline-slot{padding:6px 8px;border:1px solid var(--border);border-radius:4px;background:var(--card);margin-bottom:6px;}
.timeline-slot-header{display:flex;align-items:center;gap:8px;margin-bottom:4px;font-size:11px;color:var(--text2);}
.timeline-time{font-weight:700;color:var(--accent);font-size:12px;}
.timeline-connector{flex:1;height:1px;background:var(--border);}
.timeline-items{display:flex;flex-direction:column;gap:3px;}

/* Timeline fixed-time bar */
.fixed-time-bar{display:flex;align-items:center;gap:6px;padding:8px;border:1px solid var(--warning);border-radius:6px;background:linear-gradient(90deg,rgba(232,146,60,.1),transparent);margin-bottom:8px;}
.fixed-time-bar img{width:24px;height:24px;border-radius:50%;}
.fixed-time-bar-title{font-weight:700;color:var(--warning);font-size:13px;}
.fixed-time-bar-text{font-size:11px;color:var(--text2);}

/* 需求1: 周报/月报编辑框放大(5倍以上) */
/* v2.23.17：取消 max-height:70vh 上限——此前长报告被强制压在 70vh 内、只能内部滚动，表现为"内容过多展示不全"。
   现改为高度按内容自适应（见 history.js initReportEditArea），内容再多也完整展开；
   外层 .history-content 本身 overflow-y:auto，长报告随页面滚动查看即可。 */
.history-report-edit{
  width:100%;
  min-height:480px;
  font-size:13px;
  line-height:1.7;
  padding:12px;
  border:1px solid var(--border);
  border-radius:6px;
  font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  resize:vertical;
  box-sizing:border-box;
}

/* 需求12: 拖动排程 */
.group-task[draggable="true"]{cursor:grab;}
.group-task[draggable="true"]:active{cursor:grabbing;}
.timeline-slot.drop-hover{outline:2px dashed var(--accent);background:var(--accent-light);}
.schedule-group.drop-hover{outline:2px dashed var(--accent);}

/* 需求10: 自定义时间选择器 */
.time-pick{
  display:inline-block;
  min-width:54px;
  padding:3px 8px;
  border:1px solid var(--border);
  border-radius:4px;
  background:var(--card);
  font-size:13px;
  font-weight:600;
  color:var(--text);
  text-align:center;
  cursor:pointer;
  user-select:none;
}
.time-pick:hover{border-color:var(--accent);background:var(--accent-light);}
.time-picker-overlay{
  display:none;
  position:fixed;top:0;left:0;right:0;bottom:0;
  background:rgba(0,0,0,0.45);
  z-index:5000;
  justify-content:center;
  align-items:center;
}
.time-picker{
  background:var(--card);
  border-radius:10px;
  padding:16px;
  width:240px;
  box-shadow:0 12px 32px rgba(0,0,0,0.3);
}
.time-picker-title{font-size:13px;font-weight:700;color:var(--navy);margin-bottom:10px;text-align:center;}
.time-picker-cols{display:flex;align-items:stretch;justify-content:center;gap:6px;height:200px;}
.time-col{
  width:64px;
  overflow-y:auto;
  border:1px solid var(--border);
  border-radius:6px;
  background:#fafafa;
  scroll-behavior:smooth;
}
.time-col-sep{display:flex;align-items:center;font-size:20px;font-weight:700;color:var(--text2);}
.time-opt{
  padding:8px 0;
  text-align:center;
  font-size:15px;
  font-weight:600;
  color:var(--text2);
  cursor:pointer;
  border-bottom:1px solid #f0f0f0;
}
.time-opt:hover{background:#f0f0f0;}
.time-opt.sel{background:var(--accent);color:#fff;}
.time-picker-preview{margin-top:12px;text-align:center;font-size:14px;font-weight:700;color:var(--accent);}

/* Print adjustments */
/* 打印区：屏幕隐藏，仅在打印时显示，避免打印残留显示在首页底部 */
#printArea{display:none;}
@media print{
  body *{visibility:hidden;}
  #printArea, #printArea *{visibility:visible;}
  #printArea{display:block !important;position:absolute;left:0;top:0;width:100%;background:var(--card);}
  .app-logo img{width:24px;height:24px;}
}
/* ===== v2.7.9 联系人信息表 ===== */
.contact-table{width:100%;min-width:920px;border-collapse:collapse;font-size:12px;margin-top:6px;table-layout:fixed;}
.contact-table th{
  text-align:left;padding:5px 7px;font-size:11px;color:var(--text2);
  background:var(--accent-light);border-bottom:1px solid var(--border);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.contact-table td{padding:5px 7px;border-bottom:1px solid var(--border);vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.contact-table tr:hover td{background:#fafbfc;}
/* v2.27.8：联系人列表列宽自适应——fixed 布局 + 各列限速，电话列收窄，窗口内尽量多展示列；窄屏整体横向滚动 */
.contact-table th:nth-child(1),.contact-table td:nth-child(1){width:13%;} /* 公司 */
.contact-table th:nth-child(2),.contact-table td:nth-child(2){width:9%;}  /* 姓名 */
.contact-table th:nth-child(3),.contact-table td:nth-child(3){width:10%;} /* 联系电话（收窄） */
.contact-table th:nth-child(4),.contact-table td:nth-child(4){width:8%;}  /* 重要程度 */
.contact-table th:nth-child(5),.contact-table td:nth-child(5){width:10%;} /* 熟悉度 */
.contact-table th:nth-child(6),.contact-table td:nth-child(6){width:8%;}  /* 部门 */
.contact-table th:nth-child(7),.contact-table td:nth-child(7){width:14%;} /* 工作职责 */
.contact-table th:nth-child(8),.contact-table td:nth-child(8){width:8%;}  /* 上级 */
.contact-table th:nth-child(9),.contact-table td:nth-child(9){width:14%;} /* 地址 */
.contact-table th:nth-child(10),.contact-table td:nth-child(10){width:7%;} /* 记录 */
.contact-table th:nth-child(11),.contact-table td:nth-child(11){width:9%;} /* 操作 */
#contactPageList{overflow-x:auto;}
.contact-name-cell{font-weight:600;color:var(--accent);cursor:pointer;}
.contact-name-cell:hover{text-decoration:underline;}
.contact-imp{display:inline-block;padding:1px 6px;border-radius:3px;font-size:10px;}
.contact-log-count{
  display:inline-block;padding:1px 6px;border-radius:8px;font-size:10px;
  background:var(--accent-light);color:var(--accent);cursor:pointer;font-weight:600;
}
.contact-ops{display:flex;gap:4px;}

/* 联系人编辑弹窗 */
.contact-modal{max-width:640px;width:94vw;max-height:88vh;overflow-y:auto;}
.contact-field-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;}
.contact-field-grid .customer-modal-field{margin-bottom:0;}
.contact-note-ta{width:100%;min-height:64px;resize:vertical;font-size:12px;}
.contact-chip-preview-box{display:flex;flex-wrap:wrap;gap:4px;margin:2px 0 6px;}
.contact-chip-preview{display:inline-block;background:#ede7f6;color:#4527a0;font-size:11px;padding:1px 7px;border-radius:10px;font-weight:500;}
.contact-chip-preview .chip-x{margin-left:4px;cursor:pointer;opacity:.55;font-weight:700;}
.contact-chip-preview .chip-x:hover{opacity:1;color:#b23b3b;}

/* ===== 公司内部通讯录（v2.23.5：卡片网格 → 紧凑表格） ===== */
.internal-add-title{font-size:12px;color:var(--text2);white-space:nowrap;}
.internal-table{width:100%;border-collapse:collapse;font-size:12px;color:var(--text);}
.internal-table thead th{position:sticky;top:0;background:var(--card);text-align:left;padding:5px 8px;font-size:11px;color:var(--text3);font-weight:700;border-bottom:2px solid var(--border);z-index:1;white-space:nowrap;}
.internal-table tbody td{padding:4px 8px;border-bottom:1px solid var(--border);vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px;}
.internal-table tbody tr:hover td{background:var(--accent-light);}
.internal-table .int-name{font-weight:600;}
.internal-table .int-note{white-space:normal;max-width:220px;}
.internal-table .internal-act-col{width:58px;text-align:center;white-space:nowrap;}
.internal-table .internal-act-col .icon-btn{margin:0 1px;}
.internal-table .internal-dept-row td{background:var(--accent-light);border-left:3px solid var(--accent);font-weight:700;color:var(--navy);padding:5px 10px;font-size:13px;}
.internal-dept-count{font-weight:400;color:var(--text3);font-size:11px;}
.int-save-hint{font-size:11px;color:#2e7d32;margin-right:4px;}
/* 编辑态：2 列网格表单，紧凑内嵌在行内 */
.internal-edit{display:grid;grid-template-columns:1fr 1fr;gap:5px 16px;padding:8px;border:1px dashed var(--border);border-radius:6px;background:#fafbfc;margin:2px 0;}
.internal-edit .inline-row{display:flex;gap:6px;align-items:center;margin:0;}
.internal-edit .inline-row label{width:56px;font-size:11px;color:var(--text2);flex:none;}
.internal-edit .inline-row input{flex:1;font-size:11px;padding:3px 5px;min-width:0;}
.internal-edit .btn-group{grid-column:1/-1;display:flex;gap:8px;align-items:center;margin-top:2px;}

/* ===== 协助人点选弹窗 ===== */
.collab-picker-list{display:flex;flex-direction:column;gap:2px;padding:6px 0;}
.collab-dept{grid-column:1/-1;font-size:12px;font-weight:700;color:var(--navy);margin:6px 0 2px;padding:3px 6px;background:var(--accent-light);border-radius:6px;}
.collab-item{display:flex;align-items:center;gap:6px;padding:5px 8px;border-radius:6px;font-size:13px;cursor:pointer;}
.collab-item:hover{background:var(--accent-light);}
.collab-item input{margin:0;}
.collab-name{font-weight:500;}
.collab-role{font-size:11px;color:#1565c0;background:#e3f2fd;padding:0 6px;border-radius:8px;}
.contact-log-add{display:flex;gap:6px;align-items:center;margin-bottom:6px;}
.contact-log-list{max-height:180px;overflow-y:auto;border:1px solid var(--border);border-radius:6px;padding:4px;}
.contact-log-item{
  display:flex;gap:6px;align-items:center;padding:4px 6px;
  border-bottom:1px solid #f0f0f0;font-size:11px;
}
.contact-log-item:last-child{border-bottom:none;}
.contact-log-date{color:var(--text3);white-space:nowrap;font-weight:600;}
.contact-log-src{
  padding:0 5px;border-radius:3px;background:#f5f5f5;color:#666;
  font-size:10px;white-space:nowrap;
}
.contact-log-src.auto{background:#e3f2fd;color:#1565c0;}
.contact-log-content{flex:1;color:var(--text);word-break:break-all;white-space:normal;}

/* 待办池备注行（浅色，不抢任务名称的视觉权重） */
.backlog-note{
  font-size:11px;color:var(--text3);margin:2px 0;
  background:transparent;border-left:2px solid var(--border);
  padding:1px 6px;border-radius:0 3px 3px 0;font-style:italic;
}
.backlog-note::before{ content:'📝 '; opacity:.6; }

/* ===== v2.24.3 备注展示：默认 2 行截断；展开后最多 10 行，超出滚动；内容少时高度自适应 ===== */
/* 折叠态：line-clamp 只在超过 2 行时才生效，短备注天然只占 1 行，不会撑出空白 */
.group-task-note,.backlog-note{
  display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;
  overflow:hidden;
}
.group-task-note{line-height:1.35;}
.backlog-note{line-height:1.5;}
/* 展开态：最多 10 行，再多就内部滚动（不再无限撑高卡片） */
.group-task-note.note-expanded{-webkit-line-clamp:10;line-clamp:10;max-height:13.5em;overflow-y:auto;}
.backlog-note.note-expanded{-webkit-line-clamp:10;line-clamp:10;max-height:15em;overflow-y:auto;}
/* 展开/收起小按钮：只有可能超过两行的备注才渲染，短备注不占位 */
.note-toggle{
  cursor:pointer;opacity:.5;font-style:normal;margin-right:4px;
  font-size:var(--fs-xs);user-select:none;
}
.note-toggle:hover{opacity:1;}

/* ===== 客户/联系人 管理页面 ===== */
.mgr-group-head{padding:10px 12px 4px;font-size:11px;font-weight:700;color:var(--text3);letter-spacing:.5px;}
.mgr-group-add{padding:0 8px 6px;}
.customer-group-badge{display:inline-block;font-size:10px;padding:1px 6px;border-radius:10px;background:var(--accent-light);color:var(--accent);margin-left:6px;vertical-align:middle;}
.customer-item-main{display:flex;align-items:center;flex-wrap:wrap;gap:0 4px;cursor:pointer;}
.customer-item-main .customer-preview{width:100%;font-size:11px;color:var(--text3);margin-top:2px;}

/* 工具栏（联系人页面搜索/排序） */
.mgr-toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:10px;}
.mgr-toolbar input[type=search]{flex:1;min-width:160px;padding:7px 10px;border:1px solid var(--border);border-radius:var(--radius);font-size:13px;}
.mgr-toolbar select{padding:7px 8px;border:1px solid var(--border);border-radius:var(--radius);font-size:13px;background:var(--card);}
/* 公司分组表头：强视觉，🏢 + 色条 + 底色，明确区分于人员行 */
.mgr-company-head-row td{border:none !important;padding:0 !important;background:transparent !important;}
.mgr-company-head{display:flex;align-items:center;gap:6px;font-size:13px;font-weight:700;color:var(--navy);background:var(--accent-light) !important;border-left:4px solid var(--accent) !important;padding:8px 12px !important;margin:10px 0 2px;border-radius:4px;}
.mgr-company-icon{font-size:14px;}
.mgr-company-count{font-weight:400;color:var(--text3);font-size:11px;}
/* 人员行：左侧细色条 + 姓名缩进，与分组表头层级拉开 */
.contact-table tbody tr:not(.mgr-company-head-row){border-left:3px solid transparent;transition:background .12s;}
.contact-table tbody tr:not(.mgr-company-head-row):hover{background:var(--accent-light);}
.contact-table .contact-name-cell{font-weight:600;}
.contact-table .ct-company-cell{padding-left:16px;}

/* 左栏快捷入口卡片 */
/* 下拉菜单（数据 导入/导出） */
.dropdown-menu{position:absolute;top:100%;right:0;margin-top:4px;background:var(--card);border:1px solid var(--border);border-radius:8px;box-shadow:0 6px 20px rgba(0,0,0,.15);z-index:50;min-width:140px;overflow:hidden;}
.dropdown-menu button{display:block;width:100%;text-align:left;background:var(--card);border:none;padding:9px 14px;font-size:13px;color:var(--text);cursor:pointer;white-space:nowrap;}
.dropdown-menu button:hover{background:var(--accent-light);}
/* 列表顶部筛选框（待办池等） */
.list-filter-row{margin:0 0 8px;}
.list-filter-row input{background:var(--card);border:1px solid var(--border);border-radius:6px;padding:6px 10px;font-size:12px;color:var(--text);}
.list-filter-row input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px var(--ring);}

/* 管理页面内联编辑面板（替代弹窗） */
.mgr-edit-panel{margin-top:14px;border:1px solid var(--accent);border-radius:8px;background:#fbfcfe;padding:14px 16px;box-shadow:0 2px 10px rgba(0,0,0,0.05);}
.mgr-edit-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;}
.mgr-edit-head h3{font-size:15px;font-weight:700;margin:0;}
.mgr-edit-head .history-close{background:var(--border);color:var(--text2);}

/* v2.23.8 云同步状态徽标 */
.sync-status{font-size:12px;padding:2px 8px;border-radius:10px;background:var(--bg);color:var(--text2);}
.sync-status.sync-success{background:#e6f4ea;color:#1e7a3c;}
.sync-status.sync-warning{background:#fdf0e0;color:#b9690f;}
.sync-status.sync-danger{background:#fdeaea;color:#c0392b;}
.mgr-edit-head .upd-stamp{margin-right:auto;margin-left:6px;}
.mgr-edit-panel input,.mgr-edit-panel select,.mgr-edit-panel textarea{width:100%;box-sizing:border-box;}
.mgr-edit-panel .contact-field-grid input,.mgr-edit-panel .contact-field-grid select,.mgr-edit-panel .contact-field-grid textarea{width:100%;}

/* AI 助手多轮对话 */
.ai-chat-thread{display:flex;flex-direction:column;gap:10px;margin-top:10px;max-height:420px;overflow-y:auto;}
.ai-msg{border-radius:10px;padding:10px 12px;font-size:13px;line-height:1.65;white-space:pre-wrap;word-break:break-word;max-width:92%;}
.ai-msg.user{align-self:flex-end;background:var(--accent);color:#fff;border-bottom-right-radius:2px;}
.ai-msg.assistant{align-self:flex-start;background:var(--accent-light);border:1px solid var(--border);color:var(--text);border-bottom-left-radius:2px;}
.ai-msg .ai-msg-head{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:4px;font-size:10px;opacity:.7;}
.ai-msg .ai-msg-acts{display:flex;gap:6px;}
.ai-msg .ai-msg-acts button{font-size:10px;padding:1px 7px;}

@media (max-width:768px){
  .contact-field-grid{grid-template-columns:1fr 1fr;}
}

/* ===== 会议纪要模块 ===== */
.meeting-customer-group{margin-bottom:18px;}
.meeting-customer-head{font-size:13px;font-weight:700;color:var(--accent);padding:6px 0;border-bottom:2px solid var(--accent-light);margin-bottom:8px;display:flex;align-items:center;gap:8px;}
.meeting-customer-head .item-sub{font-size:10px;color:var(--text3);font-weight:400;}
.meeting-note-card{border:1px solid var(--border);border-radius:8px;background:var(--card);padding:12px 14px;margin-bottom:10px;box-shadow:0 1px 3px rgba(0,0,0,0.04);}
.meeting-note-head{display:flex;align-items:center;justify-content:space-between;gap:8px;}
.meeting-note-title{font-size:14px;font-weight:700;color:var(--text);}
.meeting-customer-badge{font-size:10px;padding:2px 8px;border-radius:10px;background:var(--accent-light);color:var(--accent);font-weight:600;white-space:nowrap;cursor:pointer;}
.meeting-customer-badge:hover{text-decoration:underline;}
/* v2.22.22：会议纪要按日期分组 */
.meeting-date-group{margin-bottom:14px;}
.meeting-date-head{position:sticky;top:0;z-index:2;font-size:13px;font-weight:700;color:var(--accent);background:var(--bg);padding:6px 4px;border-bottom:2px solid var(--accent-light);margin-bottom:8px;display:flex;align-items:center;gap:8px;}
.meeting-date-head .item-sub{font-size:10px;color:var(--text3);font-weight:400;}
/* 关联客户模糊搜索输入 */
.mt-cust-wrap{position:relative;}
.mt-cust-input{width:100%;box-sizing:border-box;}
.mt-cust-suggest{position:absolute;left:0;right:0;top:100%;z-index:50;background:#fff;border:1px solid var(--border);border-radius:6px;box-shadow:0 6px 18px rgba(0,0,0,.12);max-height:220px;overflow:auto;margin-top:2px;}
.mt-cust-opt{padding:7px 10px;cursor:pointer;font-size:13px;color:var(--text);}
.mt-cust-opt:hover{background:var(--accent-light);}
.meeting-meta{display:flex;flex-wrap:wrap;gap:10px;margin-top:6px;font-size:11px;color:var(--text2);}
.meeting-meta-item{display:inline-flex;align-items:center;gap:3px;}
.meeting-label{font-size:11px;font-weight:700;color:var(--accent2);display:block;margin-bottom:3px;}
.meeting-raw,.meeting-summary,.meeting-keyinfo{margin-top:8px;border-radius:6px;padding:8px 10px;}
.meeting-raw{background:#f7f8fa;border:1px dashed var(--border);}
.meeting-raw-text{font-size:12px;color:var(--text2);white-space:pre-wrap;word-break:break-word;max-height:160px;overflow-y:auto;}
.meeting-summary{background:#f3f8ff;border:1px solid #d6e6ff;}
.meeting-summary-text{font-size:13px;color:var(--text);white-space:pre-wrap;word-break:break-word;line-height:1.6;}
.meeting-keyinfo{background:var(--card)8ec;border:1px solid #ffe2b0;}
.meeting-keyinfo-text{font-size:13px;color:var(--text);white-space:pre-wrap;word-break:break-word;line-height:1.6;margin-bottom:6px;}
.meeting-keyinfo .mini-btn{font-size:11px;}
.meeting-note-actions{display:flex;gap:6px;margin-top:10px;justify-content:flex-end;}
.meeting-raw-ta{min-height:120px;}
.meeting-summary-ta{min-height:120px;background:#f3f8ff;}
.meeting-keyinfo-ta{min-height:90px;background:var(--card)8ec;}
/* v2.22.25 会议筛选栏（月份 + 客户 + 关键词），取代左侧客户列表，节约纵向空间 */
.meeting-filter-bar{display:flex;gap:8px;align-items:center;padding:10px 12px;flex-wrap:wrap;border-bottom:1px solid var(--border);background:var(--card);}
.meeting-filter-bar select{min-width:120px;padding:6px 8px;border:1px solid var(--border);border-radius:6px;font-size:13px;background:#fff;color:var(--text);}
.meeting-search{flex:1;min-width:170px;padding:6px 10px;border:1px solid var(--border);border-radius:6px;font-size:13px;box-sizing:border-box;}
/* v2.22.25 会议纪要跳转页面内容区（全屏输入/查看/修改 + AI 梳理） */
.meeting-detail-content{max-width:840px;margin:0 auto;padding:18px 22px;overflow-y:auto;height:100%;box-sizing:border-box;}

/* ===== v2.22.26 会议纪要跳转页重设计：内容优先、大编辑区 ===== */
.meeting-editor{display:flex;flex-direction:column;height:100%;max-width:1280px;margin:0 auto;padding:14px 18px;gap:12px;box-sizing:border-box;}
.meeting-editor-meta{display:flex;flex-wrap:wrap;gap:10px 14px;flex-shrink:0;}
.me-meta-field{display:flex;flex-direction:column;gap:4px;flex:1;min-width:150px;}
.me-meta-field.me-meta-cust{flex:1.4;min-width:200px;}
.me-meta-field.me-meta-wide{flex:2;min-width:240px;}
.me-meta-field label{font-size:12px;font-weight:600;color:var(--text2);}
.me-meta-field input{border:1px solid var(--border);border-radius:6px;padding:8px 10px;font-size:14px;background:#fff;color:var(--text);box-sizing:border-box;}
.meeting-editor-panes{display:flex;gap:14px;flex:1;min-height:0;}
.meeting-editor-pane{flex:1;display:flex;flex-direction:column;min-width:0;background:var(--card);border:1px solid var(--border);border-radius:10px;padding:12px 14px;box-shadow:0 1px 3px rgba(0,0,0,0.04);}
.me-pane-head{font-size:13px;font-weight:700;color:var(--accent);display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px;}
.me-pane-sub{font-size:11px;font-weight:400;color:var(--text3);}
.me-pane-key-label{font-size:12px;font-weight:700;color:var(--accent2);margin:10px 0 6px;}
.meeting-editor-ta{flex:1;width:100%;resize:none;font-size:14px;line-height:1.75;padding:12px;border:1px solid var(--border);border-radius:8px;box-sizing:border-box;color:var(--text);background:#fff;min-height:220px;}
.me-ta-summary{background:#f3f8ff;flex:1.4;}
.me-ta-key{background:#fffaf0;flex:0.9;min-height:120px;}
.me-key-fill{align-self:flex-start;margin-top:8px;}
.meeting-editor-actions{display:flex;align-items:center;gap:10px;flex-shrink:0;padding-top:4px;border-top:1px solid var(--border);}
.ai-loading-inline{font-size:13px;color:var(--accent);font-weight:600;display:inline-flex;align-items:center;gap:6px;}
@media (max-width: 820px){
  .meeting-editor-panes{flex-direction:column;}
  .meeting-editor-ta{min-height:200px;}
  .me-ta-summary,.me-ta-key{flex:1;}
}

/* ===== 备忘录模块 ===== */
.memo-group-block{margin-bottom:16px;}
.memo-group-head-line{font-size:13px;font-weight:700;color:var(--accent);padding:6px 0;border-bottom:2px solid var(--accent-light);margin-bottom:8px;display:flex;align-items:center;gap:8px;}
.memo-group-head-line .item-sub{font-size:10px;color:var(--text3);font-weight:400;}
.memo-card{border:1px solid var(--border);border-radius:8px;background:var(--card);padding:12px 14px;margin-bottom:10px;box-shadow:0 1px 3px rgba(0,0,0,0.04);}
.memo-card-head{display:flex;align-items:center;justify-content:space-between;gap:8px;}
.memo-title{font-size:14px;font-weight:700;color:var(--text);}
.memo-group-badge{font-size:10px;padding:2px 8px;border-radius:10px;background:var(--teal);color:#fff;font-weight:600;white-space:nowrap;}
.memo-content-preview{margin-top:6px;font-size:12px;color:var(--text2);line-height:1.55;white-space:pre-wrap;word-break:break-word;}
.memo-card-actions{display:flex;gap:6px;margin-top:10px;align-items:center;justify-content:flex-end;}
.memo-updated{font-size:10px;color:var(--text3);margin-right:auto;}
.memo-content-ta{min-height:140px;}

/* ===== 行业信息模块（需求4）===== */
.industry-company{display:flex;flex-direction:column;gap:2px;padding:10px 12px;border:1px solid var(--border);border-radius:8px;background:var(--card);cursor:pointer;margin-bottom:8px;transition:all .15s;box-shadow:var(--shadow);}
.industry-company:hover{border-color:var(--accent);background:var(--accent-light);}
.industry-company-name{font-size:14px;font-weight:700;color:var(--text);}
.industry-company-meta{font-size:11px;color:var(--text3);}
.ind-editor{margin-top:14px;border:1px solid var(--accent);border-radius:8px;background:#fbfcfe;padding:14px 16px;box-shadow:0 2px 10px rgba(0,0,0,0.05);}
.ind-editor-head{display:flex;align-items:center;gap:8px;margin-bottom:12px;flex-wrap:wrap;}
.ind-company-input{flex:1;min-width:160px;padding:7px 10px;border:1px solid var(--border);border-radius:var(--radius);font-size:14px;font-weight:600;}
.ind-section{margin-bottom:16px;padding-bottom:14px;border-bottom:1px dashed var(--border);}
.ind-section:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0;}
.ind-section-title{font-size:13px;font-weight:700;color:var(--accent2);margin-bottom:8px;}
.ind-chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px;}
.ind-chip{display:inline-flex;align-items:center;gap:5px;background:var(--accent-light);border:1px solid #cfe0fb;color:var(--accent2);border-radius:14px;padding:3px 8px;font-size:12px;}
.ind-chip .ind-x{border:none;background:transparent;color:var(--danger);cursor:pointer;font-size:14px;line-height:1;padding:0 2px;}
.ind-chip .ind-x:hover{font-weight:700;}
.ind-empty{font-size:12px;color:var(--text3);font-style:italic;}
.ind-add-row{display:flex;gap:6px;align-items:center;}
.ind-add-row input{flex:1;min-width:120px;padding:6px 9px;border:1px solid var(--border);border-radius:var(--radius);font-size:12px;}
.ind-competitor{border:1px solid var(--border);border-radius:8px;padding:10px 12px;margin-bottom:10px;background:var(--card);}
.ind-competitor.ai{border-color:#e0c3fb;background:#faf5ff;}
.ind-competitor-head{display:flex;align-items:center;flex-wrap:wrap;gap:6px;font-size:13px;font-weight:700;color:var(--text);}
.ind-competitor-head .ind-x{border:none;background:transparent;color:var(--danger);cursor:pointer;font-size:13px;margin-left:auto;padding:0 4px;}
.ind-competitor-head .ind-x:hover{font-weight:700;}
.ind-competitor-info{font-size:12px;color:var(--text2);margin:4px 0 6px;line-height:1.5;}
.ind-sub-label{font-size:11px;font-weight:700;color:var(--text2);margin:8px 0 3px;}
.ind-list{margin:0;padding-left:18px;}
.ind-list li{font-size:12px;color:var(--text);margin-bottom:4px;line-height:1.5;display:flex;align-items:flex-start;gap:6px;flex-wrap:wrap;}
.ind-list li .ind-x{border:none;background:transparent;color:var(--danger);cursor:pointer;font-size:12px;padding:0 2px;}
.src-badge{display:inline-block;font-size:9px;font-weight:700;padding:1px 6px;border-radius:8px;line-height:1.4;white-space:nowrap;vertical-align:middle;}
.src-ai{background:#fde8ff;color:#a8328f;border:1px solid #f3c0ec;}
.src-user{background:#e6f4ea;color:#2e8b57;border:1px solid #b7e0c4;}

/* ===== 拖动手柄(仅手柄可发起排程拖动，卡片本身不可拖，文本可框选) ===== */
.drag-handle{
  cursor:grab;
  color:var(--text3);
  font-size:15px;
  line-height:1;
  padding:0 6px 0 0;
  user-select:none;
  align-self:flex-start;
  margin-top:2px;
  transition:color .15s;
}
.drag-handle:hover{color:var(--accent);}
.drag-handle:active{cursor:grabbing;}

/* ===== 子任务清单 ===== */
.subtask-wrap{margin-top:8px;border-top:1px dashed var(--border);padding-top:7px;}
.subtask-list{display:flex;flex-direction:column;gap:3px;}
.subtask-item{display:flex;align-items:center;gap:6px;font-size:12px;line-height:1.5;}
.subtask-item input[type="checkbox"]{width:14px;height:14px;flex:none;accent-color:var(--success);cursor:pointer;}
.subtask-name{flex:1;color:var(--text);word-break:break-word;cursor:text;}
.subtask-item.done .subtask-name{text-decoration:line-through;color:var(--text3);}
.subtask-del{border:none;background:transparent;color:var(--text3);cursor:pointer;font-size:11px;padding:0 4px;line-height:1;}
.subtask-del:hover{color:var(--danger);}
.subtask-add{display:flex;gap:4px;margin-top:6px;align-items:center;}
.subtask-add input[type="text"]{flex:1;font-size:11px;padding:3px 6px;border:1px solid var(--border);border-radius:5px;min-width:0;}
.subtask-add input[type="text"]:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px var(--ring);}
.subtask-add .mini-btn{padding:2px 8px;font-size:11px;flex:none;}

/* 需求2.11：子任务作为独立日程条目（带主任务关联标签） */
.subtask-block{margin:4px 0 4px 18px;border-left:3px solid #7e57c2;background:#faf7ff;}
.subtask-block .group-task-name{font-size:13px;font-weight:500;}
.subtask-parent-tag{display:inline-block;font-size:10px;color:#5e35b1;background:#ede7f6;padding:1px 6px;border-radius:3px;margin-left:6px;vertical-align:middle;white-space:nowrap;}
.subtask-progress{display:flex;align-items:center;gap:8px;margin-top:6px;padding-top:6px;border-top:1px dashed var(--border);}
.subtask-add-inline{display:flex;gap:4px;align-items:center;}
.subtask-add-inline input[type="text"]{font-size:11px;padding:2px 6px;border:1px solid var(--border);border-radius:5px;width:140px;}
.subtask-add-inline input[type="text"]:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px var(--ring);}

/* ===== 统一添加任务模块（v2.16） ===== */
.add-task-card{border:1px solid var(--border);border-radius:var(--radius);background:var(--card);margin-bottom:8px;box-shadow:0 1px 2px rgba(0,0,0,.06);overflow:hidden;}
.add-task-head{display:flex;align-items:center;justify-content:space-between;padding:7px 10px;font-size:12.5px;font-weight:600;color:var(--navy);background:linear-gradient(90deg,var(--accent-light),#fff);cursor:pointer;user-select:none;}
.add-task-toggle{font-size:12px;color:var(--text3);}
.add-task-body{padding:8px;}
.add-task-body.collapsed{display:none;}
.add-task-main{display:flex;gap:6px;align-items:center;}
.add-task-main input[type="text"]{flex:1;min-width:0;font-size:12px;padding:5px 8px;border:1px solid var(--border);border-radius:5px;}
.add-task-main input[type="text"]:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px var(--ring);}
.seg{display:inline-flex;border:1px solid var(--border);border-radius:5px;overflow:hidden;flex:none;}
.seg-btn{border:none;background:var(--card);color:var(--text2);font-size:11px;padding:5px 8px;cursor:pointer;transition:all .15s;line-height:1;}
.seg-btn+.seg-btn{border-left:1px solid var(--border);}
.seg-btn.active{background:var(--accent);color:#fff;font-weight:600;}
.seg-btn:hover:not(.active){background:var(--accent-light);}
.add-task-adv{margin-top:8px;border-top:1px dashed var(--border);padding-top:8px;}
.adv-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:6px 10px;}
.adv-cell{display:flex;flex-direction:column;gap:2px;font-size:10px;color:var(--text3);min-width:0;position:relative;}
.adv-cell.wide{grid-column:1 / -1;}
.adv-cell select,.adv-cell input[type="text"],.adv-cell input[type="date"]{font-size:11px;padding:3px 5px;border:1px solid var(--border);border-radius:4px;width:100%;box-sizing:border-box;color:var(--text);}
.adv-cell select:focus,.adv-cell input:focus{outline:none;border-color:var(--accent);}
.time-pick.sm{font-size:10px;padding:2px 6px;margin-top:2px;align-self:flex-start;}
.adv-chip{grid-column:1 / -1;margin-top:-2px;}
.add-task-advtoggle{border:none;background:transparent;color:var(--accent);font-size:11px;cursor:pointer;padding:6px 0 0;margin-top:4px;}
.add-task-advtoggle:hover{text-decoration:underline;}
/* v2.22：次要选项（重要程度 / 再次跟进）低频折叠 */
.add-task-advtoggle.minor{color:var(--text3);display:block;text-align:left;}
.adv-grid-minor{margin-top:4px;padding-top:6px;border-top:1px dashed var(--border);}
.inline-minor-toggle{border:none;background:transparent;color:var(--text3);font-size:11px;cursor:pointer;padding:4px 0;display:block;text-align:left;}
.inline-minor-toggle:hover{text-decoration:underline;color:var(--accent);}
.inline-minor{border-top:1px dashed var(--border);padding-top:4px;margin-bottom:4px;}
/* 时间选择器与日期同排时不再占整行 */
.inline-row .time-pick{flex:0 0 auto;}
/* 关联主任务自定义模糊下拉 */
.ac-box{display:none;position:absolute;top:100%;left:0;right:0;z-index:60;margin-top:2px;background:var(--card);border:1px solid var(--border);border-radius:6px;box-shadow:0 6px 18px rgba(0,0,0,.14);max-height:220px;overflow:auto;pointer-events:none;}
.ac-item{padding:5px 8px;font-size:12px;color:var(--text);cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;pointer-events:auto;}
.ac-item:hover{background:var(--accent-light);}
/* v2.22.24：主任务下拉中的「子任务」层级标识 */
.ac-lv{font-size:10px;color:#607d8b;background:#eceff1;border-radius:3px;padding:0 4px;}
/* 紧凑：今日任务完成时间印章 */
.done-stamp{font-size:10px;color:var(--success);white-space:nowrap;}

/* ===== v2.18 客户/联系人页联动与 UI 优化 ===== */
/* 关键联系人标记 */
.ct-key-tag{font-size:10px;padding:1px 6px;border-radius:8px;background:var(--card)3e0;color:#e65100;font-weight:600;flex-shrink:0;}
.cust-contact-head b{margin-right:4px;}
.cust-contact-head .icon-btn{margin-left:4px;}
/* 客户页「更多」联系人项 */
.cust-pool-item{justify-content:space-between;}
.cust-pool-item .cust-pool-name{flex:1;}
.cust-pool-item .mini-btn{margin-left:8px;flex-shrink:0;}
/* 联系人编辑：关键联系人开关（紧凑） */
.ct-key-field{flex-direction:row;align-items:center;gap:8px;grid-column:1 / -1;}
.ct-key-toggle{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--text);cursor:pointer;}
.ct-key-toggle input[type=checkbox]{width:15px;height:15px;accent-color:var(--accent);cursor:pointer;}
/* 联系人表单更紧凑 */
.contact-field-grid{gap:8px 12px;}
.contact-field-grid .customer-modal-field label{font-size:12px;color:var(--text2);margin-bottom:2px;}
.contact-field-grid input,.contact-field-grid select{padding:6px 8px;font-size:13px;}
.customer-modal-field textarea{min-height:54px;font-size:12.5px;}
/* 客户详情输入可清晰编辑 */
.cust-field input:hover,.cust-field select:hover{border-color:var(--accent);}
.cust-field input:focus,.cust-field select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px var(--ring);}
/* 关系管理中心头部按钮（.header 已有通用 btn 样式，这里仅确保不被覆盖） */
#relMgrOverlay .history-header .btn{white-space:nowrap;}
/* 客户页头按钮在深色 header 上更协调 */
.cust-detail-head-row{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;}
.cust-detail-head-row h3{margin:0;}
.cust-add-row button{white-space:nowrap;}


/* ===== v2.20 关系管理中心（客户信息 / 联系人 / 内部通讯录 三合一单层页面）===== */
.relmgr-header{gap:12px;}
.relmgr-tabs{display:flex;gap:6px;align-items:center;}
.relmgr-tab{background:rgba(255,255,255,.12);color:#dbe4f0;border:1px solid rgba(255,255,255,.2);border-radius:6px;padding:6px 14px;font-size:13px;font-weight:600;cursor:pointer;transition:all .15s;white-space:nowrap;}
.relmgr-tab:hover{background:rgba(255,255,255,.24);color:#fff;}
.relmgr-tab.active{background:var(--card);color:var(--navy);border-color:#fff;box-shadow:0 2px 6px rgba(0,0,0,.2);}
.relmgr-tab-minor{opacity:.7;font-weight:500;font-size:12px;padding:5px 10px;}
.relmgr-tab-minor.active{opacity:1;}
.relmgr-actions{display:flex;gap:8px;align-items:center;}
.relmgr-act{display:flex;gap:8px;align-items:center;}
.relmgr-hint-inline{font-size:11px;color:rgba(255,255,255,.72);white-space:nowrap;}
.relmgr-pane{min-height:0;}
.relmgr-tip{font-size:11.5px;color:var(--text2);background:#f4f8fd;border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:4px;padding:6px 10px;margin-bottom:10px;line-height:1.7;}
.relmgr-tip b{color:var(--accent);}
.hdr-ghost-btn{background:rgba(255,255,255,.15)!important;color:#fff!important;border-color:rgba(255,255,255,.4)!important;}
/* 协助人选择弹窗需浮在关系管理中心之上 */
#collabPickerOverlay{z-index:4200;}
/* 只读字段（公司地址等由客户信息统一维护） */
.readonly-field{background:#f2f4f7!important;color:var(--text2)!important;cursor:not-allowed;}
.ct-company-link{color:var(--accent);cursor:pointer;text-decoration:underline dotted;}
.ct-company-link:hover{color:var(--navy);}
.ct-nocompany{color:var(--text3);font-size:11px;}
.ct-manager-link{color:var(--accent);cursor:pointer;text-decoration:underline dotted;}
.ct-manager-link:hover{color:var(--navy);}
.ct-nomanager{color:var(--text3);font-size:11px;}
.ct-addr-cell{max-width:220px;font-size:11.5px;color:var(--text2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.mgr-company-addr{margin-left:10px;font-size:11px;color:var(--text3);font-weight:400;}
.cust-contact-addr{font-size:11.5px;color:var(--text2);margin-top:2px;display:flex;align-items:center;gap:6px;}
.ro-tag{font-size:10px;color:var(--text3);background:#f0f2f5;border-radius:3px;padding:1px 5px;}
.cust-field-wide{grid-column:span 2;}
/* v2.22.2 开票信息（多行，抬头/税号/地址电话/开户行） */
.cust-invoice-box{width:100%;border:1px solid var(--border);border-radius:6px;padding:5px 8px;font-size:12px;line-height:1.6;font-family:inherit;color:var(--text);box-sizing:border-box;resize:vertical;min-height:46px;background:var(--card);}
.cust-invoice-box:focus{outline:none;border-color:var(--accent);}
/* v2.22.2 更新时间小图标（低调，悬停出 title） */
.upd-stamp{font-size:11px;color:var(--text3);cursor:help;opacity:.55;margin-left:6px;user-select:none;}
.upd-stamp:hover{opacity:1;color:var(--text2);}
/* v2.22.2 联系人下级列表 */
.ct-sub-box{display:flex;flex-wrap:wrap;gap:4px;align-items:center;min-height:26px;padding:3px 0;}
.ct-sub-chip{font-size:11.5px;background:#ede7f6;color:#4527a0;border-radius:10px;padding:2px 8px;cursor:pointer;}
.ct-sub-chip:hover{background:#d7c9f0;}
.ct-sub-rm{margin-left:5px;border:none;background:transparent;color:#7a4ec0;cursor:pointer;font-size:11px;padding:0 2px;line-height:1;}
.ct-sub-rm:hover{color:#c62828;}
#ctSubInput{width:100%;margin-bottom:4px;padding:5px 7px;font-size:12px;border:1px solid var(--border);border-radius:4px;box-sizing:border-box;}
.ct-sub-empty{font-size:11px;color:var(--text3);}
/* v2.26.15 熟悉度 */
.ct-fam-cell{white-space:nowrap;}
.ct-fam-bar{display:inline-block;width:60px;height:7px;border-radius:4px;background:#ececec;vertical-align:middle;overflow:hidden;}
.ct-fam-fill{height:100%;background:linear-gradient(90deg,#42a5f5,#1e88e5);border-radius:4px;}
.ct-fam-num{display:inline-block;min-width:22px;text-align:right;margin-left:5px;font-size:11px;color:var(--text2);}
.ct-fam-badge{display:inline-block;margin-left:8px;padding:2px 8px;border-radius:10px;font-size:12px;font-weight:600;background:#e3f2fd;color:#1565c0;}
/* v2.23.9 联系人「个人特征」+ AI 性格分析 */
.ct-traits-actions{display:flex;align-items:center;gap:10px;margin-top:6px;}
.ct-analysis-status{font-size:11.5px;color:var(--accent);}
.ct-analysis-box{margin-top:8px;display:none;}
.ct-analysis-box.show{display:block;}
.ct-analysis-title{font-size:12px;font-weight:600;color:#4527a0;margin-bottom:4px;}
.ct-analysis-text{font-size:12.5px;line-height:1.7;color:var(--text);white-space:normal;background:#faf7ff;border:1px solid #e6dcfa;border-radius:8px;padding:10px 12px;}
/* v2.22.2 公司组织结构图 */
.cust-org-wrap{overflow:auto;max-height:380px;padding:6px 2px;}
.org-tree{display:flex;flex-direction:row;align-items:flex-start;gap:24px;font-size:11.5px;padding:2px;}
.org-tree > .org-node{flex:0 0 auto;}
.org-node{display:flex;flex-direction:column;align-items:center;}
.org-self{display:inline-flex;align-items:center;gap:6px;background:var(--card);border:1px solid var(--border);border-radius:8px;padding:4px 10px;cursor:pointer;align-self:center;box-shadow:0 1px 2px rgba(0,0,0,.04);}
.org-self:hover{border-color:var(--accent);}
.org-self.is-top{background:var(--accent-light);border-color:var(--accent);font-weight:600;}
.org-name{color:var(--text);}
.org-duty{color:var(--text3);font-size:10.5px;}
/* v2.22.3 横向组织架构：每级并排成一行（最高职位在最上），连接线串联 */
.org-children{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center;gap:12px;padding-top:16px;margin-top:0;position:relative;}
.org-children::before{content:'';position:absolute;top:0;left:50%;width:2px;height:16px;background:var(--border);transform:translateX(-50%);}
.org-children::after{content:'';position:absolute;top:0;left:8px;right:8px;height:2px;background:var(--border);}
.org-children > .org-node{position:relative;}
.org-children > .org-node::before{content:'';position:absolute;top:-16px;left:50%;width:2px;height:16px;background:var(--border);transform:translateX(-50%);}
/* v2.22.5 组织架构图：多组上下级各自渲染为独立架构图（孤立联系人不再展示） */
.cust-org-charts{display:flex;flex-direction:column;gap:14px;}
.cust-org-chart{padding:6px 0;border-top:1px dashed var(--border);}
.cust-org-chart:first-child{border-top:none;padding-top:0;}
.org-chart-title{font-size:11px;color:var(--text2);font-weight:600;margin-bottom:6px;}
.org-empty{font-size:12px;color:var(--text3);padding:6px 2px;}
/* 工具条内的文本输入框按内容自适应（全局 input[type=text]{width:100%} 会把它撑满整行导致换行错位） */
.mgr-toolbar input[type=text]{width:auto;min-width:90px;}
.internal-add-title{font-size:12px;font-weight:700;color:var(--text2);white-space:nowrap;}

/* ===== 备忘录 OneNote 式（v2.21）===== */
.memo-layout{display:flex;flex:1;min-height:0;}
.memo-tree-wrap{flex:0 0 240px;max-width:240px;border-right:1px solid var(--border);overflow-y:auto;padding:8px;background:var(--bg);}
.memo-tree{font-size:12px;}
.memo-tree-row{display:flex;align-items:center;gap:4px;padding:3px 4px;border-radius:5px;cursor:pointer;line-height:1.5;}
.memo-tree-row:hover{background:var(--accent-light);}
.memo-tree-page.active{background:var(--accent-light);font-weight:700;color:var(--accent);}
.memo-tw{width:14px;text-align:center;color:var(--text3);cursor:pointer;user-select:none;flex:0 0 auto;}
.memo-ico{flex:0 0 auto;}
.memo-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.memo-rename-input{width:100%;font-size:12px;padding:1px 3px;border:1px solid var(--accent);border-radius:3px;}
.memo-acts{flex:0 0 auto;display:none;gap:2px;}
.memo-tree-row:hover .memo-acts{display:flex;}
.mini-btn{border:1px solid var(--border);background:var(--card);border-radius:4px;font-size:11px;padding:0 5px;line-height:18px;cursor:pointer;color:var(--text2);}
.mini-btn:hover{border-color:var(--accent);color:var(--accent);}
.memo-tree-children{margin-left:14px;border-left:1px dashed var(--border);padding-left:4px;}

.memo-canvas{position:relative;flex:1;min-height:560px;overflow:auto;background-color:#fcfcfd;background-image:radial-gradient(var(--border) 1px, transparent 1px);background-size:22px 22px;padding:0;}
.memo-canvas-hint{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:var(--text3);font-size:13px;pointer-events:none;text-align:center;}
.memo-note{position:absolute;background:var(--card);border:1px solid var(--border);border-radius:8px;box-shadow:0 2px 8px rgba(0,0,0,0.08);overflow:hidden;display:flex;flex-direction:column;}
.memo-note-bar{display:flex;align-items:center;justify-content:space-between;padding:2px 6px;background:var(--accent-light);cursor:move;user-select:none;}
.memo-note-grip{color:var(--text3);font-size:12px;}
.memo-note-del{cursor:pointer;color:var(--text3);font-size:11px;padding:0 2px;}
.memo-note-del:hover{color:var(--danger);}
.memo-note-text{width:100%;border:none;outline:none;resize:none;padding:6px 8px;font-size:13px;line-height:1.5;color:var(--text);background:transparent;min-height:46px;font-family:inherit;}

/* ===== 设计系统增强 / 交互打磨（持续优化） ===== */
/* 键盘可达性：所有可聚焦元素使用主题 accent 描边 */
:focus-visible{outline:2px solid var(--accent);outline-offset:1px;}
input:focus-visible,textarea:focus-visible,select:focus-visible{outline:none;}
/* 输入框聚焦统一使用 --ring（替代散落写死的蓝色阴影），与主题联动 */
input:focus,textarea:focus,select:focus{box-shadow:var(--ring);}
/* 选中文本配色 */
::selection{background:var(--accent-light);color:var(--accent2);}
/* 自定义滚动条 */
::-webkit-scrollbar{width:10px;height:10px;}
::-webkit-scrollbar-thumb{background:var(--border);border-radius:6px;border:2px solid var(--bg);}
::-webkit-scrollbar-thumb:hover{background:var(--text3);}
::-webkit-scrollbar-track{background:transparent;}
*{scrollbar-width:thin;scrollbar-color:var(--border) transparent;}
html{scroll-behavior:smooth;}
/* 统一禁用态 */
.btn:disabled,.btn-primary:disabled,.btn-outline:disabled,.btn-danger:disabled,.btn-success:disabled,
button:disabled,input:disabled,textarea:disabled,select:disabled{cursor:not-allowed;opacity:.55;filter:grayscale(.2);}
/* 尊重用户的减少动效偏好 */
@media (prefers-reduced-motion: reduce){
  *{transition:none !important;animation:none !important;scroll-behavior:auto !important;}
}

/* ===== 保险产品技能树（v2.23） ===== */
.pt-list-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px;flex-wrap:wrap;}
.pt-list-title{font-size:15px;font-weight:600;color:var(--text);}
.pt-search{padding:6px 10px;border:1px solid var(--border);border-radius:8px;font-size:13px;min-width:220px;background:var(--card);color:var(--text);}
.pt-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px;}
.pt-card{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:12px;cursor:pointer;transition:box-shadow .15s,transform .15s;}
.pt-card:hover{box-shadow:0 4px 14px rgba(0,0,0,.08);transform:translateY(-1px);}
.pt-card-top{display:flex;justify-content:space-between;align-items:flex-start;gap:8px;}
.pt-card-name{font-weight:600;color:var(--text);font-size:14px;}
.pt-card-cat{font-size:11px;padding:2px 7px;border-radius:999px;white-space:nowrap;flex-shrink:0;}
.ct-cat-软件{background:#e8f0fc;color:#1e4d8c;}
.ct-cat-硬件{background:#ede7f6;color:#5e35b1;}
.ct-cat-服务{background:#e0f2f1;color:#00695c;}
.ct-cat-数据{background:#fff3e0;color:#e65100;}
.ct-cat-咨询{background:#fce4ec;color:#ad1457;}
.pt-card-meta{font-size:12px;color:var(--text2);margin-top:6px;}
.pt-card-tags{margin-top:8px;display:flex;flex-wrap:wrap;gap:4px;}
.pt-tag{font-size:11px;background:var(--accent-light);color:var(--accent2);padding:2px 7px;border-radius:6px;}
.pt-card-foot{margin-top:8px;font-size:11px;color:var(--text3);border-top:1px dashed var(--border);padding-top:6px;}

.pt-detail{max-width:880px;}
.pt-detail-head{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:12px;gap:10px;}
.pt-detail-name{font-size:18px;font-weight:700;color:var(--text);}
.pt-detail-sub{font-size:12px;color:var(--text3);margin-top:2px;}
.pt-detail-row{display:flex;gap:12px;padding:7px 0;border-bottom:1px solid var(--border);font-size:13px;}
.pt-k{width:80px;color:var(--text3);flex-shrink:0;}
.pt-v{color:var(--text2);flex:1;}
.pt-link{color:var(--accent);cursor:pointer;text-decoration:underline;}
.pt-detail-block{margin-top:14px;}
.pt-block-title{font-size:13px;font-weight:600;color:var(--text);margin-bottom:6px;}
.pt-block-body{font-size:13px;color:var(--text2);line-height:1.6;white-space:pre-wrap;background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:10px;}
.pt-detail-actions{margin-top:14px;display:flex;gap:8px;flex-wrap:wrap;}
.pt-contract-mini{display:flex;flex-direction:column;gap:6px;}
.pt-cm{font-size:12px;color:var(--text2);background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:7px 10px;cursor:pointer;}
.pt-cm:hover{border-color:var(--accent);}

.pt-ins-head{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:12px;gap:10px;}
.pt-ctable{display:grid;grid-template-columns:1.4fr 1.2fr 1fr .9fr 1.5fr 1fr .8fr;gap:0;border:1px solid var(--border);border-radius:10px;overflow:hidden;font-size:12px;}
.pt-cth{background:var(--accent-light);color:var(--accent2);font-weight:600;padding:8px 10px;}
.pt-crow{display:contents;}
.pt-cc{padding:8px 10px;border-top:1px solid var(--border);background:var(--card);color:var(--text2);align-self:stretch;}
.pt-days{font-size:11px;color:var(--warning);}
.pt-expiring{background:#fff3e0 !important;}
.pt-expiring .pt-cc{color:#b35900;}
.pt-expired{background:#f3e5e5 !important;}

.pt-kanban-item{font-size:12px;background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:8px 10px;margin-bottom:6px;}
.pt-fee-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;}
.pt-fee-cell{background:var(--bg);border:1px solid var(--border);border-radius:10px;padding:10px;}
.pt-fee-fn{font-size:12px;color:var(--text3);}
.pt-fee-val{font-size:15px;font-weight:700;color:var(--accent);margin:4px 0 2px;}
.pt-fee-n{font-size:11px;color:var(--text3);}
.pt-map{display:flex;flex-wrap:wrap;gap:8px;}
.pt-map-node{font-size:12px;padding:5px 10px;border-radius:999px;border:1px solid var(--border);}
.pt-map-node.on{background:#e8f5e9;color:#2e7d32;border-color:#a5d6a7;}
.pt-map-node.off{background:#fff;color:var(--text3);border-style:dashed;}

.radar-to-contract-list{display:flex;flex-direction:column;gap:8px;margin-top:10px;}
.rc-item{background:var(--bg);border:1px solid var(--border);border-radius:10px;padding:10px 12px;cursor:pointer;}
.rc-item:hover{border-color:var(--accent);}
.rc-title{font-weight:600;color:var(--text);font-size:13px;}
.rc-meta{font-size:11px;color:var(--text3);margin:3px 0;}
.rc-content{font-size:12px;color:var(--text2);}
.rc-url{font-size:11px;color:var(--accent);margin-top:3px;word-break:break-all;}
.modal-sub{font-size:12px;color:var(--text3);margin:4px 0 0;}

/* 产品树 ctree 操作按钮 */
.ctree-actions{margin-left:auto;display:flex;gap:2px;opacity:0;transition:opacity .12s;}
.ctree-item:hover .ctree-actions{opacity:1;}

/* ===== v2.24.0 任务跟进记录 ===== */
.followup-quick{margin-bottom:12px;}
.followup-quick textarea{
  width:100%;min-height:78px;resize:vertical;
  font-size:var(--fs);line-height:1.6;padding:8px 10px;
  border:1px solid var(--border);border-radius:var(--radius);
  background:var(--card);color:var(--text);box-sizing:border-box;
  font-family:inherit;
}
.followup-quick textarea:focus{outline:none;border-color:var(--accent);box-shadow:var(--ring);}

.followup-next-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:8px;}
.followup-next-row label{font-size:var(--fs-sm);color:var(--text2);font-weight:600;flex-shrink:0;}
.followup-next-row input[type="date"]{
  font-size:var(--fs-sm);padding:4px 6px;
  border:1px solid var(--border);border-radius:var(--radius-sm);
  background:var(--card);color:var(--text);
}
.followup-next-row input[type="date"]:focus{outline:none;border-color:var(--accent);box-shadow:var(--ring);}
.followup-quick-btns{display:flex;gap:4px;flex-wrap:wrap;}
.followup-quick-btns .inline-chip{font-size:var(--fs-xs);padding:3px 7px;}
.followup-quick .btn-group{margin-top:10px;}
/* v2.24.1：跟进弹窗内的提示文案 + 处理时长标签 */
.followup-hint{font-size:var(--fs-xs);color:var(--text3);}
.followup-est-tag{
  font-size:var(--fs-xs);color:#00695c;background:#e0f2f1;
  padding:1px 6px;border-radius:999px;font-weight:600;
}
/* v2.26.17：跟进列表内的「对接联系人」可点击 chip */
.followup-contact-chip{
  font-size:var(--fs-xs);color:#1565c0;background:#e3f2fd;
  padding:1px 8px;border-radius:999px;font-weight:600;cursor:pointer;
  border:1px solid #bbdefb;
}
.followup-contact-chip:hover{background:#bbdefb;}

.followup-list-head{
  font-size:var(--fs-sm);color:var(--text3);font-weight:600;
  padding:6px 0;border-top:1px solid var(--border);margin-top:4px;
}
/* 历史列表限高但可滚动：内容再多也能滚到，不做内容裁切 */
.followup-list{max-height:46vh;overflow-y:auto;padding-right:2px;}
.followup-item{
  background:var(--bg);border:1px solid var(--border);
  border-radius:var(--radius);padding:8px 10px;margin-bottom:6px;
}
.followup-item-head{display:flex;align-items:center;gap:8px;margin-bottom:4px;}
.followup-at{font-size:var(--fs-xs);color:var(--text3);font-weight:600;flex-shrink:0;}
.followup-next-tag{
  font-size:var(--fs-xs);color:#e65100;background:#fff3e0;
  padding:1px 6px;border-radius:999px;font-weight:600;
}
.followup-item-head .icon-btn{margin-left:auto;}
.followup-text{
  font-size:var(--fs-sm);color:var(--text2);line-height:1.6;
  white-space:pre-wrap;word-break:break-word;
}
/* 任务行上的跟进条数徽标：可点开跟进记录 */
.followup-count-tag{cursor:pointer;}
.followup-count-tag:hover{filter:brightness(0.94);}
/* v2.24.2：主任务归属标签可点击解除归属（任务保留，只解除关系） */
.main-task-tag{cursor:pointer;}
.main-task-tag:hover{filter:brightness(0.92);text-decoration:line-through;}


/* ===================== v2.25.0 月度行事历 ===================== */
.cal-nav{display:flex;align-items:center;gap:8px;margin-bottom:12px;flex-wrap:wrap;}
.cal-title{font-size:16px;font-weight:700;color:var(--text);min-width:110px;text-align:center;}
.cal-legend{display:flex;align-items:center;gap:3px;font-size:11px;color:var(--text2);margin-left:10px;}
.cal-lg{width:11px;height:11px;border-radius:3px;display:inline-block;}
/* 待办量（未来/今天）——主色渐进 */
.cal-lg.f1{background:var(--accent);opacity:.18;} .cal-lg.f2{background:var(--accent);opacity:.35;}
.cal-lg.f3{background:var(--accent);opacity:.55;} .cal-lg.f4{background:var(--accent);opacity:.8;}
/* 完成量（历史）——绿色渐进 */
.cal-lg.d1{background:var(--success);opacity:.2;} .cal-lg.d2{background:var(--success);opacity:.38;}
.cal-lg.d3{background:var(--success);opacity:.58;} .cal-lg.d4{background:var(--success);opacity:.8;}
.cal-week{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;margin-bottom:6px;}
.cal-week span{text-align:center;font-size:11.5px;color:var(--text2);font-weight:700;}
.cal-week .cal-wkend{color:var(--accent);}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;}
.cal-cell{min-height:96px;border:1px solid var(--border);border-radius:8px;background:var(--card);padding:5px 6px;display:flex;flex-direction:column;gap:2px;cursor:pointer;transition:all .15s;position:relative;overflow:hidden;}
/* v2.25.2：格内任务名（最多 3 条，每条 10 字截断） */
.cal-items{display:flex;flex-direction:column;gap:1px;min-width:0;margin-top:1px;}
.cal-item{
  display:block;font-size:11px;line-height:1.4;color:var(--text);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;
}
.cal-more{color:var(--text2);font-weight:700;}
/* 浅色格（f1/f2/d1/d2）保持深色文字——色膜很淡，深色字才清楚 */
.cal-cell:hover{border-color:var(--accent);box-shadow:var(--shadow-lg);transform:translateY(-1px);}
.cal-blank{border:none;background:transparent;cursor:default;min-height:74px;}
.cal-blank:hover{border:none;box-shadow:none;transform:none;}
/* v2.25.3① 日期 + 数量同一行，数量贴在格子右上角 */
.cal-top{display:flex;align-items:center;justify-content:space-between;gap:4px;position:relative;z-index:1;}
.cal-day{font-size:13px;font-weight:700;color:var(--text);}
.cal-items{position:relative;z-index:1;}
/* v2.26.13 当天格子：清晰橙边(1px橙线+2px橙环) + 橙底铺色，醒目且不刺眼，区别于蓝(未来)/绿(历史) */
.cal-cell.cal-now{
  background:rgba(232,146,60,.18);
  border-color:var(--warning);
  box-shadow:0 0 0 2px var(--warning);
  outline:none;
}
.cal-cell.cal-now::before{background:transparent !important;opacity:0 !important;}
.cal-cell.cal-now .cal-day{background:var(--warning);color:#fff !important;font-weight:700;padding:0 7px;border-radius:8px;line-height:18px;display:inline-block;font-size:13px;}
.cal-cell.cal-now:hover{box-shadow:0 0 0 2px var(--warning),0 2px 10px rgba(232,146,60,.35);transform:translateY(-1px);}
/* v2.25.3③ 色阶：统一用一层半透明"色膜"(::before)，深浅只由当天任务总数决定。
   不再用 opacity 作用于整格（那会把文字一起变淡，也造出白底白字）。未来=蓝、历史=绿。 */
.cal-cell::before{content:'';position:absolute;inset:0;border-radius:inherit;background:transparent;opacity:0;pointer-events:none;z-index:0;}
.cal-blank::before{display:none;}
.cal-cell.cal-f1::before,.cal-cell.cal-f2::before,
.cal-cell.cal-f3::before,.cal-cell.cal-f4::before{background:var(--accent);}
.cal-cell.cal-f1::before{opacity:.10;} .cal-cell.cal-f2::before{opacity:.22;}
.cal-cell.cal-f3::before{opacity:.38;} .cal-cell.cal-f4::before{opacity:.55;}
.cal-cell.cal-d1::before,.cal-cell.cal-d2::before,
.cal-cell.cal-d3::before,.cal-cell.cal-d4::before{background:var(--success);}
.cal-cell.cal-d1::before{opacity:.10;} .cal-cell.cal-d2::before{opacity:.24;}
.cal-cell.cal-d3::before{opacity:.40;} .cal-cell.cal-d4::before{opacity:.58;}
/* 最深两档反白，保证日期/任务名可读 */
.cal-cell.cal-f3 .cal-day,.cal-cell.cal-f4 .cal-day,
.cal-cell.cal-d3 .cal-day,.cal-cell.cal-d4 .cal-day{color:#fff;}
.cal-cell.cal-f3 .cal-item,.cal-cell.cal-f4 .cal-item,
.cal-cell.cal-d3 .cal-item,.cal-cell.cal-d4 .cal-item{color:rgba(255,255,255,.94);}
.cal-cell.cal-f3 .cal-more,.cal-cell.cal-f4 .cal-more,
.cal-cell.cal-d3 .cal-more,.cal-cell.cal-d4 .cal-more{color:rgba(255,255,255,.75);}
/* v2.25.3② 数量徽标：白底 + 彩色字 + 浅描边 —— 任何底色下都清晰（修复历史白底白字） */
.cal-badge{
  margin-left:auto;flex:none;font-size:10px;font-weight:700;
  border-radius:7px;padding:0 5px;line-height:15px;
  background:#fff;color:var(--accent);border:1px solid rgba(0,0,0,.14);
}
.cal-badge-todo{color:var(--accent);}
.cal-badge-done{color:var(--success);}
.cal-tip{margin-top:12px;font-size:11.5px;color:var(--text2);}

/* v2.25.3④ 月历「当天任务」弹窗 */
.calday-modal{width:560px;max-width:94vw;padding:18px 20px 16px;}
.calday-head{display:flex;align-items:center;gap:8px;margin-bottom:12px;}
.calday-title{flex:1;text-align:center;font-size:16px;font-weight:700;color:var(--text);}
.calday-close{margin-left:auto;border:none;background:transparent;font-size:18px;color:var(--text3);cursor:pointer;line-height:1;padding:2px 4px;}
.calday-close:hover{color:var(--danger);}
.calday-body{max-height:52vh;overflow-y:auto;border:1px solid var(--border);border-radius:8px;background:var(--bg);}
.calday-row{display:flex;align-items:flex-start;gap:8px;padding:8px 10px;border-bottom:1px dashed var(--border);font-size:13px;}
.calday-row:last-child{border-bottom:none;}
.calday-dot{width:7px;height:7px;border-radius:50%;background:var(--accent);flex:none;margin-top:6px;}
.calday-row.is-done .calday-dot{background:var(--success);}
.calday-row.is-late .calday-dot{background:var(--danger);}
.calday-main{flex:1;min-width:0;}
.calday-name{color:var(--text);font-weight:500;word-break:break-all;}
.calday-row.is-done .calday-name{text-decoration:line-through;color:var(--text3);font-weight:400;}
.calday-row.is-late .calday-name{color:var(--danger);}
.calday-meta{font-size:11.5px;color:var(--text3);margin-top:2px;}
.calday-tag{flex:none;font-size:10.5px;border-radius:6px;padding:1px 7px;background:var(--accent-light);color:var(--accent);white-space:nowrap;}
.calday-row.is-done .calday-tag{background:rgba(46,139,87,.12);color:var(--success);}
.calday-row.is-late .calday-tag{background:rgba(214,69,69,.12);color:var(--danger);}
.calday-foot{display:flex;justify-content:flex-end;gap:8px;margin-top:12px;}
/* v2.26.9：行事历弹窗任务「改期」控件 */
.calday-date{flex:none;display:flex;align-items:center;gap:2px;}
.calday-redate{background:none;border:none;cursor:pointer;font-size:13px;padding:0 2px;opacity:.75;line-height:1;}
.calday-redate:hover{opacity:1;}
.calday-date-inp{font-size:11px;border:1px solid var(--accent);border-radius:4px;padding:1px 3px;width:122px;background:var(--card);color:var(--text);height:22px;box-sizing:border-box;-webkit-appearance:none;appearance:none;}

/* ===================== v2.25.1 客户进展：横向标签 + 下方列表 ===================== */
/* 顶部客户标签条：横向滚动，客户数再多也不挤。cp-tabs 在 history-body 内、可随滚动粘住 */
.cp-tabs{
  display:flex; gap:6px; overflow-x:auto;
  padding:8px 16px 10px;
  background:var(--card);
  border-bottom:1px solid var(--border);
  position:sticky; top:0; z-index:5;
  scrollbar-width:thin;
  flex-shrink:0;
}
.cp-tabs::-webkit-scrollbar{height:5px;}
.cp-tabs::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px;}
.cp-tab{
  flex:0 0 auto;
  display:inline-flex; align-items:center; gap:6px;
  padding:6px 12px;
  border:1px solid var(--border);
  border-radius:999px;
  background:var(--bg);
  color:var(--text2);
  font-size:12.5px;
  font-weight:500;
  cursor:pointer;
  transition:all .15s;
  white-space:nowrap;
}
.cp-tab:hover{border-color:var(--accent);color:var(--accent);}
.cp-tab.on{
  background:var(--accent);
  color:#fff;
  border-color:var(--accent);
  box-shadow:0 2px 6px rgba(0,0,0,.08);
}
.cp-tab.on .cp-tab-count{background:rgba(255,255,255,.22);color:#fff;}
.cp-tab-name{max-width:160px;overflow:hidden;text-overflow:ellipsis;}
.cp-tab-count{
  display:inline-block; min-width:18px; height:18px; line-height:18px;
  padding:0 6px;
  background:var(--accent-light); color:var(--accent);
  border-radius:999px; font-size:10.5px; font-weight:700;
  text-align:center;
}
.cp-tab-count.cp-cnt-ok{background:rgba(46,139,87,.12);color:var(--success);}

/* 当前客户摘要 + 进度条 */
.cp-summary{padding:14px 18px 4px;}
.cp-sum-name{font-size:15px;font-weight:700;color:var(--text);}
.cp-sum-meta{font-size:11.5px;color:var(--text3);margin-left:10px;}
.cp-bar{height:5px;border-radius:3px;background:var(--border);overflow:hidden;margin:8px 0 6px;}
.cp-bar i{display:block;height:100%;background:var(--accent);border-radius:3px;transition:width .25s;}

.cp-tag-head{display:flex;align-items:center;gap:8px;margin:14px 16px 6px;padding:0 2px;}
.cp-tag{font-size:11.5px;font-weight:700;color:var(--accent);background:var(--accent-light);border-radius:6px;padding:2px 9px;}
.cp-tag-meta{font-size:10.5px;color:var(--text3);}
.cp-row{display:flex;align-items:center;gap:8px;padding:7px 18px 7px 16px;border-bottom:1px dashed var(--border);font-size:12.5px;transition:background .15s;}
.cp-row:last-child{border-bottom:none;}
.cp-row:hover{background:var(--accent-light);}
.cp-dot{width:7px;height:7px;border-radius:50%;flex:none;}
.cp-nm{font-weight:500;color:var(--text);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.cp-row.cp-done .cp-nm{text-decoration:line-through;color:var(--text3);font-weight:400;}
.cp-row.cp-late .cp-nm{color:var(--danger);}
.cp-badges{margin-left:auto;display:flex;gap:5px;flex:none;align-items:center;flex-wrap:wrap;justify-content:flex-end;}
.cp-badge{font-size:10px;border-radius:5px;padding:1px 6px;white-space:nowrap;}
.cp-b-imp{background:rgba(214,69,69,.12);color:var(--danger);font-weight:700;}
.cp-b-late{background:var(--danger);color:#fff;font-weight:700;}
.cp-b-done{background:rgba(46,139,87,.12);color:var(--success);}
.cp-b-slat{background:var(--bg);color:var(--text3);border:1px solid var(--border);}
.cp-b-tag{background:var(--accent-light);color:var(--accent);}
/* v2.25.7：进展页三池任务可点击弹窗编辑；归档历史行维持默认箭头光标（只读） */
.cp-row.cp-editable{cursor:pointer;}
.cp-row.cp-editable:hover .cp-nm{color:var(--accent);}

/* ===================== v2.25.1 月历折叠区（首页内嵌） ===================== */
.inline-cal-section{margin-top:14px;}
.inline-cal-section .section-toggle{padding:10px 14px;}
.inline-cal-section .section-content{padding:12px 14px 16px;}
.inline-cal-grid{
  display:grid; grid-template-columns:repeat(7,1fr); gap:5px;
}
.inline-cal-grid .cal-cell{
  min-height:70px; padding:4px 5px; border-radius:7px;
  font-size:11.5px;
}
/* 折叠区格子更窄，任务名再收一档 */
.inline-cal-grid .cal-item{font-size:9px;line-height:1.25;}
.inline-cal-grid .cal-day{font-size:11.5px;}
.inline-cal-grid .cal-badge{font-size:9px;line-height:14px;padding:0 4px;border-radius:6px;}

/* ===================== v2.25.3 全局二级页面标签栏 ===================== */
/* 任意二级页面打开时置顶常驻：客户/联系人/会议/备忘录…一键互跳，不用先关当前页 */
.page-tabbar{
  display:flex;
  position:fixed; top:0; left:0; right:0; height:40px; z-index:3100;
  align-items:center; gap:4px; padding:0 10px; overflow-x:auto;
  background:var(--navy); border-bottom:1px solid rgba(255,255,255,.14);
  box-shadow:0 2px 8px rgba(0,0,0,.18);
  scrollbar-width:none;
}
.page-tabbar::-webkit-scrollbar{display:none;}
.page-tabbar .ptab{
  flex:none; border:1px solid rgba(255,255,255,.18); background:transparent; color:rgba(255,255,255,.82);
  font-size:12px; padding:4px 11px; border-radius:6px; cursor:pointer; white-space:nowrap;
  transition:background .15s,color .15s,border-color .15s;
}
.page-tabbar .ptab:hover{background:rgba(255,255,255,.14);color:#fff;}
.page-tabbar .ptab.on{background:#fff;color:var(--navy);border-color:#fff;font-weight:700;}
.page-tabbar .ptab-spacer{flex:1 1 auto;}
.page-tabbar .ptab-icon{margin-left:2px;}
/* v2.25.4：标签栏常驻 —— 主视图整体上移避让，二级页面也统一从 40px 开始，全页面铺满 */
body{padding-top:40px;box-sizing:border-box;}
.app{height:calc(100vh - 40px);}
.history-overlay{top:40px;}
.modal-overlay{top:40px;}

/* ===================== v2.25.3 周报 / 月报独立页面 ===================== */
.report-page-body{flex:1;min-width:0;padding:16px 20px;overflow-y:auto;}
.report-page-body .report-result{border:1px solid var(--border);border-radius:var(--radius);background:var(--card);padding:14px 16px;}
.report-page-body .report-result #reportTextBody{font-size:13px;line-height:1.75;color:var(--text);font-family:inherit;}

/* ===================== v2.25.4 周报侧边栏 + 选中周期内容 ===================== */
.report-period-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:10px 12px;border:1px solid var(--border);border-radius:var(--radius);background:var(--card);margin-bottom:12px;}
.report-period-head strong{font-size:15px;color:var(--text);}
.rp-sub{font-size:11.5px;color:var(--text3);}
.rp-actions{margin-left:auto;display:flex;gap:6px;}
.report-day{margin-bottom:12px;border:1px solid var(--border);border-radius:var(--radius);background:var(--card);overflow:hidden;}
.report-day-h{padding:6px 12px;background:var(--bg);font-size:12px;font-weight:700;color:var(--text2);border-bottom:1px solid var(--border);}
.report-task{display:flex;align-items:center;gap:8px;padding:6px 12px;border-bottom:1px dashed var(--border);font-size:12.5px;}
.report-task:last-child{border-bottom:none;}
.rt-dot{width:6px;height:6px;border-radius:50%;background:var(--success);flex:none;}
.rt-name{flex:1;min-width:0;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.rt-cust{flex:none;font-size:10.5px;border-radius:6px;padding:1px 7px;background:var(--accent-light);color:var(--accent);}
.rt-tag{flex:none;font-size:10.5px;border-radius:6px;padding:1px 7px;background:var(--bg);color:var(--text3);}
.rp-hint{color:var(--accent);}

/* ===================== v2.25.5 报告正文：高亮 + 可编辑 ===================== */
.rp-head{align-items:flex-end;padding-bottom:8px;border-bottom:1px solid var(--border);margin-bottom:10px;}
.rp-title-wrap{display:flex;flex-direction:column;gap:3px;min-width:0;}
.rp-title{font-size:15.5px;font-weight:800;color:var(--accent);letter-spacing:.6px;line-height:1.3;}
.rp-edit-info{font-size:11px;color:var(--text3);}
.rp-edit-info.dirty{color:var(--warning);font-weight:700;}
.rp-draft-tip{display:flex;align-items:center;gap:8px;padding:7px 12px;margin-bottom:10px;border:1px dashed var(--accent);border-radius:var(--radius);background:var(--accent-light);font-size:12px;color:var(--accent);}
#reportTextBody.rp-editable{
  outline:none;padding:10px 12px;border:1px dashed transparent;border-radius:var(--radius);
  font-size:13px;line-height:1.85;color:var(--text);font-family:inherit;
  white-space:pre-wrap;word-break:break-word;min-height:120px;
}
#reportTextBody.rp-editable:hover{border-color:var(--border);}
#reportTextBody.rp-editable:focus{border-color:var(--accent);background:#fcfdff;}
.rp-blank{height:8px;}
/* 板块标题：左侧色条 + 加粗 + 字距 + 上下留白（用"空格感"把层次拉开） */
.rp-sec{margin:16px 0 8px;padding:3px 0 3px 9px;border-left:4px solid var(--accent);font-size:14.5px;font-weight:800;color:var(--navy);letter-spacing:1px;}
.rp-sec:first-child{margin-top:2px;}
.rp-sec-tag{color:var(--accent);}
/* 客户行 / 标签行 / 事项行 / 普通行 */
.rp-cust{margin-top:10px;font-weight:700;color:var(--accent);font-size:13px;}
.rp-tagline{margin-top:6px;font-weight:600;color:var(--text2);font-size:12.5px;}
.rp-item{color:var(--text);font-size:13px;}
.rp-line{color:var(--text2);font-size:12.5px;}
/* 三种状态标记：已完成=绿 / 跟进=橙 / 新增待办=红 */
.rp-k{font-weight:800;letter-spacing:.5px;}
.rp-k-done{color:var(--success);}
.rp-k-follow{color:var(--warning);}
.rp-k-new{color:var(--danger);}
/* 客户档位小标 */
.rp-prio{font-weight:600;font-size:11.5px;border-radius:6px;padding:0 6px;margin-left:2px;}
.rp-prio.rp-p1{background:rgba(214,69,69,.12);color:var(--danger);}
.rp-prio.rp-p2{background:var(--accent-light);color:var(--accent);}
.rp-prio.rp-p3{background:var(--bg);color:var(--text3);}

/* ===================== v2.25.4 客户进展：客户移入左侧边栏（按重要程度排序） ===================== */
.cp-sidebar{width:265px;flex:none;border-right:1px solid var(--border);overflow-y:auto;background:var(--card);padding:6px 0;}
.cp-sb-group{font-size:10.5px;color:var(--text3);padding:10px 12px 4px;font-weight:700;letter-spacing:.4px;}
.cp-sb-item{display:flex;align-items:center;gap:6px;padding:7px 12px;cursor:pointer;font-size:12.5px;color:var(--text2);border-left:3px solid transparent;}
.cp-sb-item:hover{background:var(--bg);}
.cp-sb-item.on{background:var(--accent-light);color:var(--accent);border-left-color:var(--accent);font-weight:700;}
.cp-sb-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.cp-sb-count{flex:none;font-size:10px;font-weight:700;border-radius:7px;padding:0 5px;line-height:15px;background:var(--accent);color:#fff;}
.cp-sb-count.cp-cnt-ok{background:rgba(46,139,87,.14);color:var(--success);}
.cp-list-wrap{flex:1;min-width:0;overflow-y:auto;padding:6px 0;}

/* ===================== v2.25.6 标签栏右侧「动作区」 =====================
   各二级页原来顶部那条标题栏（📊 周报 / 🗒️ 会议纪要 …）与标签栏重复，已整条删除，
   只把真正有用的操作搬到这里，和标签同一行、位于 ⚙ 设置左侧。 */
.page-tabbar .ptab-actions{
  display:flex; align-items:center; gap:6px; flex:none; margin-left:2px;
  padding-left:8px; border-left:1px solid rgba(255,255,255,.16);
}
.page-tabbar .ptab-actions .btn{white-space:nowrap;padding:3px 9px;font-size:11.5px;line-height:1.5;}
.page-tabbar .ptab-actions .seg-btn{background:transparent;color:rgba(255,255,255,.8);border-color:rgba(255,255,255,.22);}
.page-tabbar .ptab-actions .seg-btn:hover:not(.active){background:rgba(255,255,255,.14);}
.page-tabbar .ptab-actions .seg-btn.active{background:#fff;color:var(--navy);border-color:#fff;}
.page-tabbar .ptab-actions .seg{border-color:rgba(255,255,255,.22);}
/* 关闭：与原来各页右上角的 ✕ 同义 */
.page-tabbar .ptab-x{
  flex:none; width:24px; height:24px; line-height:1; border:1px solid rgba(255,255,255,.22);
  background:transparent; color:rgba(255,255,255,.82); border-radius:5px; cursor:pointer; font-size:13px;
}
.page-tabbar .ptab-x:hover{background:rgba(214,69,69,.85);border-color:transparent;color:#fff;}
/* 「显示已完成」这类开关 */
.page-tabbar .ptab-chk{
  display:flex; align-items:center; gap:4px; white-space:nowrap; cursor:pointer;
  color:rgba(255,255,255,.85); font-size:11.5px;
}
.page-tabbar .ptab-chk input{width:13px;height:13px;margin:0;cursor:pointer;}
/* 客户页子导航（客户信息 / 联系人 / 内部通讯录）搬上来后压扁一点，别把标签栏顶高 */
.page-tabbar .ptab-sub{gap:3px;}
.page-tabbar .relmgr-tab{padding:3px 9px;font-size:11.5px;}
.page-tabbar .relmgr-tab-minor{padding:3px 7px;font-size:11px;}
.page-tabbar .relmgr-act{gap:5px;}
.page-tabbar .dropdown-menu{top:28px;}

/* ===================== v2.25.6 图片上传（联系人 / 客户共用） ===================== */
.img-block{margin-top:4px;}
.img-main{
  position:relative; width:100%; min-height:96px; border:1px dashed var(--border);
  border-radius:8px; overflow:hidden; background:var(--bg); display:flex;
  align-items:center; justify-content:center; cursor:pointer;
}
.img-main-pic{width:100%;max-height:190px;object-fit:contain;display:block;background:#fff;}
.img-main-empty{color:var(--text3);font-size:12px;padding:18px 10px;text-align:center;line-height:1.7;display:flex;flex-direction:column;align-items:center;gap:3px;}
.img-main-meta{position:absolute;left:0;right:0;bottom:0;padding:3px 6px;font-size:10.5px;color:#fff;background:rgba(0,0,0,.45);text-align:center;pointer-events:none;}
.ime-ico{font-size:22px;line-height:1;}
.ime-t{font-size:12.5px;color:var(--text2);font-weight:600;}
.ime-s{font-size:11px;color:var(--text3);}
.img-thumbs{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px;align-items:center;}
.img-thumb{
  position:relative; width:52px; height:52px; border-radius:6px; overflow:hidden;
  border:2px solid transparent; cursor:pointer; background:var(--card); flex:none;
}
.img-thumb img{width:100%;height:100%;object-fit:cover;display:block;}
.img-thumb.on{border-color:var(--accent);}
.img-thumb .img-del{
  position:absolute; top:-1px; right:-1px; width:16px; height:16px; line-height:14px;
  text-align:center; font-size:11px; border:none; border-radius:0 0 0 6px; cursor:pointer;
  background:rgba(0,0,0,.55); color:#fff; padding:0;
}
.img-thumb .img-del:hover{background:var(--danger);}
.img-add{
  width:52px; height:52px; flex:none; border:1px dashed var(--border); border-radius:6px;
  background:var(--card); color:var(--text3); font-size:18px; cursor:pointer; line-height:1;
}
.img-add:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-light);}
.img-hint{font-size:11px;color:var(--text3);margin-top:4px;line-height:1.6;}
/* v2.25.9 联系人页左侧客户栏：与客户信息页同一套三级树（分组 → 客户 → 分公司） */
.ct-sidebar{width:265px;}
/* 「全部联系人」置顶：与下方客户树用一条分隔线隔开，表示它不属于任何分组 */
.ctree-all{font-weight:700;margin-bottom:4px;padding-bottom:7px;border-bottom:1px solid var(--border);border-radius:6px 6px 0 0;}
/* 联系人数为 0 的客户：仍占位（保持与客户页同样的顺序），但弱化，别抢视线 */
.ctree-count-zero{opacity:.35;}
/* v2.25.8 紧凑模式（客户信息页）：只要缩略图行，别把下方内容挤出视口 */
.img-block.img-compact .img-thumbs{margin-top:0;}
.img-block.img-compact .img-hint{margin-top:5px;}
.img-star{
  position:absolute; left:-1px; bottom:-1px; min-width:15px; height:14px; line-height:14px;
  padding:0 2px; text-align:center; font-size:9.5px; font-weight:700; border:none; cursor:pointer;
  border-radius:0 5px 0 6px; background:rgba(0,0,0,.42); color:rgba(255,255,255,.75);
}
.img-star:hover{background:rgba(0,0,0,.68);color:#fff;}
.img-star.on{background:var(--accent);color:#fff;}
/* v2.26.0 文件附件卡片：文件名摘要（图标 + 名称 + 大小），点 ⤓ 打开/下载 */
.img-thumb.img-file{
  width:auto; min-width:104px; height:52px; flex:none; overflow:hidden;
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:1px;
  padding:3px 8px; border:2px solid transparent; background:#f3f5f8; cursor:default;
}
.img-thumb.img-file:hover{border-color:var(--accent);}
.img-file .file-ico{font-size:15px;line-height:1;}
.img-file .file-name{
  font-size:10.5px; line-height:1.2; color:var(--text); max-width:96px;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; text-align:center;
}
.img-file .file-size{font-size:9px; color:var(--text3); line-height:1;}
.img-thumb .img-open{
  position:absolute; left:-1px; bottom:-1px; width:16px; height:16px; line-height:14px;
  text-align:center; font-size:11px; border:none; border-radius:0 5px 0 6px; cursor:pointer;
  background:rgba(0,0,0,.42); color:#fff; padding:0;
}
.img-thumb .img-open:hover{background:var(--accent);}

/* ============ 手机端适配（v2.27.0）============ */
/* 仅在窄屏生效，绝不改动桌面布局 */
@media (max-width:768px){
  /* 防横向溢出 */
  html,body{overflow-x:hidden;}
  .app{padding:8px 10px;}

  /* 输入框字号≥16px：避免 iOS 聚焦自动放大页面 */
  input,textarea,select,button{font-size:16px;}
  .inline-row input[type="time"],.inline-row input[type="date"]{font-size:16px;max-width:none;min-width:0;}
  .inline-row input[type="text"]{font-size:16px;}
  .adv-cell input{font-size:16px;}
  .mgr-toolbar input[type=text]{font-size:16px;min-width:0;}

  /* 固定宽度侧栏 → 顶部全宽、限高可滚动 */
  .memo-layout{flex-direction:column;}
  .memo-tree-wrap{flex:0 0 auto;max-width:none;width:100%;max-height:34vh;border-right:none;border-bottom:1px solid var(--border);}
  .history-body{flex-direction:column;}
  /* 窄屏下联系人/客户进展页左右分栏改为上下堆叠（与桌面 row 并存，仅窄屏生效） */
  #custProgressOverlay .history-body { flex-direction: column; }
  .history-sidebar,.ct-sidebar{width:100%;max-width:none;flex:0 0 auto;max-height:36vh;border-right:none;border-bottom:1px solid var(--border);overflow-y:auto;}
  /* v2.27.3：点击客户后右侧项目列表需可滚动，避免被裁切看不到项目 */
  .cp-list-wrap{min-height:0;}
  .report-page-body{padding:12px 10px;}

  /* 多栏布局转单列 */
  .two-col{flex-direction:column;}
  .contact-field-grid{grid-template-columns:1fr;}
  /* v2.27.3：手机端工作日程页重排——先「今日工作安排」再「待办池」等
     用 display:contents 把两栏子块提升为 .two-col 的 flex 子项，再用 order 排序 */
  .col-left,.col-right{display:contents;}
  #scheduleHero{order:1;}
  #unifiedAddCard{order:2;}
  #backlogSection{order:3;}
  #longTermSection{order:4;}
  #receivableSection{order:5;}
  #completedSection{order:6;}
  #inlineCalendarSection{order:7;}

  /* 弹窗在小屏尽量占满且可滚动 */
  .modal-card{width:calc(100% - 20px);max-width:100%;max-height:92vh;overflow:auto;}

  /* 增大点按区域 */
  .btn-icon{width:36px;height:36px;}
  .icon-btn{min-width:34px;min-height:34px;font-size:18px;}
  .inline-chip{padding:6px 12px;font-size:13px;}
  .history-tab{padding:12px 6px;}

  /* 标签栏按钮不收缩、字号略增（标签栏本身已 overflow-x:auto 横向滚动） */
  .page-tabbar .ptab{flex:0 0 auto;}
  .page-tabbar .ptab-actions .btn{padding:6px 12px;font-size:13px;}

  /* 列表项间距稍增，便于触摸 */
  .group-task{padding:10px 8px;}
  .task-item,.backlog-item{padding:10px 8px;}
}

/* ===================================================================
   v2.29.0 新增基础能力样式（B2 遮罩栈 / B4 加载期骨架屏）
   —— 全程使用 :root 变量，因此六套配色（商务蓝/马卡龙/森系绿/紫罗兰/青绿/深蓝橙）自动跟随，
      不需要为每套主题各写一份。
   =================================================================== */

/* ---------- B2 遮罩栈：背景滚动锁 ---------- */
/* 有弹窗时锁住背景滚动。手机上尤其明显：以前弹窗开着、手指一划背景跟着跑。
   「锁」由 overlay.js 的 syncBody() 按【当前栈是否非空】实时重算，
   而不是在开关处各写一次，因此不可能出现「弹窗关了、页面却还锁着」的残留。
   登录门禁 #loginOverlay 不算弹窗、不触发加锁。 */
body.overlay-open{overflow:hidden;}

/* ---------- B4 加载期骨架屏 ---------- */
/* 默认不显示；is-armed 由 index.html 内联脚本在 250ms 后才添加，
   因此本地数据（同步读取）的正常启动根本看不到它，不会「闪一下」。
   已弹登录页或已 authed 时也不显示。 */
#bootSkeleton{display:none;}
body:not(.authed) #bootSkeleton.is-armed{
  display:flex;position:fixed;top:0;left:0;right:0;bottom:0;z-index:3000;
  /* z-index 3000：低于登录遮罩(#loginOverlay 4001)，未登录时绝不会盖住登录框挡住登录 */
  align-items:center;justify-content:center;background:var(--bg);
}
.boot-shell{width:min(320px,78vw);display:flex;flex-direction:column;gap:10px;}
.boot-brand{font-size:16px;font-weight:700;color:var(--accent);letter-spacing:.5px;text-align:center;}
.boot-tip{font-size:12px;color:var(--text2);text-align:center;line-height:1.6;}
.boot-tip b{color:var(--accent);}
/* 进度条：一条来回滑动的色块（比转圈更轻，不抢注意力） */
.boot-bar{height:3px;border-radius:2px;background:var(--border);overflow:hidden;}
.boot-bar i{display:block;height:100%;width:40%;border-radius:2px;background:var(--accent);
  animation:bootSlide 1.1s ease-in-out infinite;}
@keyframes bootSlide{0%{transform:translateX(-110%);}100%{transform:translateX(260%);}}
/* 三根占位横线：示意「内容即将出现」 */
.boot-line{display:block;height:11px;border-radius:3px;background:var(--card);
  border:1px solid var(--border);animation:bootPulse 1.4s ease-in-out infinite;}
.boot-line.w70{width:70%;}
.boot-line.w92{width:92%;animation-delay:.15s;}
.boot-line.w48{width:48%;animation-delay:.3s;}
@keyframes bootPulse{0%,100%{opacity:.45;}50%{opacity:1;}}
/* 尊重系统「减少动态效果」设置 */
@media(prefers-reduced-motion:reduce){
  .boot-bar i{animation:none;width:100%;}
  .boot-line{animation:none;opacity:.7;}
}

/* ===== v2.29.0（B1）设置页：左侧二级导航 + 右侧内容 ===== */
/* 动机：三个纵向堆叠的折叠块全部展开后要一直往下滚才能找到某一项设置。
   改为左右分栏后，左边一眼看全有哪几类设置、点哪去哪。 */
.cfg-layout{display:flex;gap:14px;align-items:flex-start;}
.cfg-nav{flex:0 0 186px;display:flex;flex-direction:column;gap:4px;position:sticky;top:0;}
.cfg-nav button{
  display:block;width:100%;text-align:left;padding:8px 10px;
  border:1px solid var(--border);border-radius:var(--radius);background:var(--card);color:var(--text);
  cursor:pointer;font-family:inherit;font-size:13px;line-height:1.35;transition:all .15s;
}
.cfg-nav button:hover{background:var(--accent-light);border-color:var(--accent);}
.cfg-nav button.on{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600;}
.cfg-nav button .cfg-nav-hint{display:block;font-size:11px;opacity:.72;font-weight:400;margin-top:2px;}
.cfg-panes{flex:1;min-width:0;}
/* ★渐进增强★：只有 JS 真正建好导航（加了 .has-nav）才隐藏非当前面板。
   万一脚本没跑起来（极老缓存 / 手工裁剪包），.has-nav 不存在 →
   三个面板照常全部显示 = 自动退回旧形态，绝不会出现"设置页空白、什么也点不了"。 */
.cfg-layout.has-nav .cfg-panes > .cfg-group{display:none;}
.cfg-layout.has-nav .cfg-panes > .cfg-group.on{display:block;}
/* 有了左侧导航，summary 就不再承担"点开收起"的职责，它只是一块标题 */
.cfg-layout.has-nav .cfg-panes > .cfg-group > summary{list-style:none;pointer-events:none;cursor:default;}
.cfg-layout.has-nav .cfg-panes > .cfg-group > summary::-webkit-details-marker{display:none;}
/* 窄屏（手机）：导航变横向滚动条排到内容上方 */
@media(max-width:768px){
  .cfg-layout{flex-direction:column;gap:8px;}
  .cfg-nav{flex:0 0 auto;width:100%;flex-direction:row;overflow-x:auto;position:static;padding-bottom:2px;}
  .cfg-nav button{width:auto;white-space:nowrap;flex:0 0 auto;}
  .cfg-nav button .cfg-nav-hint{display:none;}
  .cfg-panes{width:100%;}
}
