:root{--brand:#0B70D6;--side:#0a3d6b}
*{box-sizing:border-box;margin:0;padding:0}
body{font:14px/1.6 -apple-system,"PingFang SC",system-ui,sans-serif;color:#1f2937;background:#f7f8f7;height:100vh;overflow:hidden}
.app{display:grid;grid-template-columns:var(--sw,200px) 380px 1fr;height:100vh;position:relative;
  max-width:calc(var(--sw,200px) + 1400px);margin:0 auto}
.app.wide{grid-template-columns:var(--sw,200px) 1fr;max-width:calc(var(--sw,200px) + 1040px)}
.side{background:var(--side);color:#c9dff5;padding:16px 0;overflow-y:auto}
.side h1{font-size:14px;color:#fff;padding:0 16px 4px;font-weight:600}
.side .st{font-size:11px;color:#7aa8d4;padding:0 16px 14px}
.side a{display:flex;justify-content:space-between;padding:8px 16px;color:#c9dff5;text-decoration:none;font-size:13px}
.side a:hover{background:rgba(255,255,255,.08)}
/* 当前所在的菜单。原来只是一层很淡的白色叠加，扫一眼看不出自己在哪儿 —— 换成品牌蓝 */
.side a.on{background:var(--brand);color:#fff;font-weight:600;box-shadow:inset 4px 0 0 #fff}
.side a.on .n{opacity:1}
/* 分组标题里那几个内嵌链接（产品 / 管理 / 我的客户）不铺底色，只变白加粗 */
.side .grp a.on{background:none;color:#fff;font-weight:600;box-shadow:none;text-decoration:underline}
.side .grp{font-size:11px;color:#7aa8d4;padding:14px 16px 5px;letter-spacing:.05em}
.side .n{opacity:.72;font-variant-numeric:tabular-nums}
.gh{display:none}
/* 收起侧栏。留一条 34px 的窄轨放 ☰，正文不会被浮标盖住 */
.htog{float:right;margin-right:10px;color:#7aa8d4;cursor:pointer}
.mtog{display:none;position:absolute;left:5px;top:9px;z-index:21;cursor:pointer;
  color:var(--side);font-size:17px;line-height:1;padding:2px 5px}
/* 看不见但还在：hidden 会把它从 Tab 顺序里拿掉，键盘用户就没法收起/展开侧栏了 */
.vh{position:absolute;width:1px;height:1px;opacity:0;margin:0;pointer-events:none}
.vh:focus-visible+label{outline:2px solid var(--brand);outline-offset:2px}
.app:has(#nav:checked){--sw:34px}
.app:has(#nav:checked)>.side{visibility:hidden}
.app:has(#nav:checked)>.sdrag{display:none}
.side .subnav{margin:-2px 0 5px 12px;border-left:1px solid rgba(255,255,255,.15);padding-left:7px}
.side .subnav a{font-size:12px;padding:4px 7px;color:#9db5cc}
.side .folder-head{display:flex;align-items:center}
.side .folder-head>a:first-child{flex:1;min-width:0}
.side .folder-head>a.folder-add{display:block;padding:8px 16px;font-size:18px;line-height:21px}
.side .folder-list{margin:-2px 0 5px 12px;border-left:1px solid rgba(255,255,255,.15);padding-left:7px}
.side .folder-list a{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;padding:4px 7px;color:#9db5cc}
.app:has(#nav:checked)>.mtog{display:block}
/* 拖宽条。不进栅格（否则就成了第四列），绝对定位贴在侧栏右边缘上 */
.sdrag{position:absolute;top:0;bottom:0;left:var(--sw,200px);width:9px;margin-left:-4px;z-index:20;cursor:col-resize}
.sdrag::after{content:'';position:absolute;left:4px;top:0;bottom:0;width:1px;background:transparent}
.sdrag:hover::after,body.dragging .sdrag::after{background:#7ab8f5}
body.dragging{cursor:col-resize;user-select:none}
.side a.compose{display:block;margin:0 16px 14px;padding:9px;background:var(--brand);color:#fff;
  border-radius:7px;text-align:center;font-weight:600;font-size:13px;text-decoration:none}
.compose:hover{background:#0959ab}
.list{background:#fff;border-right:1px solid #e5e7eb;overflow-y:auto}
.list header{padding:12px 16px 9px;border-bottom:1px solid #e5e7eb;position:sticky;top:0;background:#fff;z-index:5}
.list h2{font-size:16px;font-weight:600}.list .sub{font-size:12px;color:#9ca3af}
.item{display:block;position:relative;padding:10px 16px;border-bottom:1px solid #f1f3f4;text-decoration:none;color:inherit}
.item:hover{background:#fafbfa}
.item.pf-loading{opacity:.72;cursor:progress}
.item.pf-loading::after{content:'加载中…';position:absolute;right:8px;top:7px;padding:1px 6px;border-radius:8px;background:#fff;color:#6b7280;font-size:11px}
.rbwrap>.rbedit{display:none}
.rbwrap:has(.rbtoggle input:checked)>.rbedit{display:block}
.rbwrap:has(.rbtoggle input:checked)>form.rbedit[style*="flex-wrap"]{display:flex}
/* 表格里展开的编辑行：display:block 会把 tr 拆掉，得给 table-row */
.rbwrap:has(.rbtoggle input:checked)>tr.rbedit{display:table-row}
.rbwrap:has(.rbtoggle input:checked)>.rbview{display:none}
.rbtoggle:has(input:checked){background:#e5e7eb}
.chev{border:0;background:none;cursor:pointer;color:#4b5563;font-size:15px;line-height:1;
  width:22px;height:22px;border-radius:5px;display:flex;align-items:center;justify-content:center}
.chev:hover{background:#e5e7eb;color:#111}
.chev.op{color:var(--brand)}
/* 会话逐封展开。下面这几条以前是写在每一个子行上的 style="" —— 收件箱一页 228 个子行，
   同一串样式重复 228 遍，实测光这 5 条就占整页 75KB（全页 283KB）。样式表带永久缓存，
   挪进来等于每次打开收件箱都省下这 75KB。行内 style 不是「小事」，乘以行数就是流量 */
.irow{position:relative}
.tsel{position:absolute;left:6px;top:13px;z-index:2;cursor:pointer}
.chev{position:absolute;right:6px;top:8px;z-index:2}
.msgs{border-top:1px solid #eef1f4;background:#fafbfc}
.msgs>a{display:block;padding:7px 12px 7px 34px;text-decoration:none;color:inherit;
  border-bottom:1px solid #f1f4f7}
.msgs .mh{display:flex;gap:8px;align-items:baseline;font-size:12.5px}
.msgs .mh .dirin{color:#0e7490}
.msgs .mh .dirout{color:#065f46}
.msgs .mh .tm{margin-left:auto;color:#9ca3af;white-space:nowrap}
.item.on{background:#e8f0fe;box-shadow:inset 3px 0 0 var(--brand)}
.item .r1{display:flex;justify-content:space-between;gap:8px;align-items:baseline}
.item .who{font-weight:600;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.item .tm{font-size:11px;color:#9ca3af;flex-shrink:0}
.item .sj{font-size:13px;color:#374151;margin:2px 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.item .sn,.msgs .sn{font-size:12px;color:#9ca3af;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.item .tags{margin-top:5px;display:flex;gap:5px;flex-wrap:wrap;align-items:center}
.tag{font-size:11px;padding:1px 7px;border-radius:9px;background:#eef2f0;color:#475569}
.tag.kg{background:#fef3c7;color:#92400e}.tag.stage{background:#dbeafe;color:#1e40af}
.dot{width:7px;height:7px;border-radius:50%;background:var(--brand);flex-shrink:0;display:inline-block}
.main{overflow-y:auto;background:#f6f8fc}
.topbar{position:sticky;top:0;background:#fff;border-bottom:1px solid #e5e7eb;padding:9px 20px;
  display:flex;align-items:center;gap:10px;z-index:3;flex-wrap:wrap}
.topbar .crumb{flex:1;font-size:13px;color:#6b7280;min-width:200px}
.btn{border:1px solid #d1d5db;background:#fff;padding:6px 13px;border-radius:7px;font-size:13px;
  cursor:pointer;font-family:inherit;color:#374151;text-decoration:none;display:inline-block}
.btn:hover{background:#f9fafb}
.btn.p{background:var(--brand);color:#fff;border-color:var(--brand)}.btn.p:hover{background:#0959ab}
.btn.on{background:#fef3c7;border-color:#fbbf24;color:#92400e}
.btn.danger{color:#b91c1c;border-color:#fca5a5}
.body{padding:16px 20px;max-width:1120px}
h2.subj{font-size:18px;font-weight:600;margin-bottom:3px}
.meta{font-size:12px;color:#6b7280;margin-bottom:12px}
.mail-participants{display:grid;gap:5px;margin:8px 0 14px;padding:9px 11px;border-left:3px solid #dbe7f4;background:#f8fafc;border-radius:0 7px 7px 0;font-size:12px;color:#475569}
.mail-participant-line{display:grid;grid-template-columns:44px minmax(0,1fr);gap:8px;align-items:start}
.mail-participant-line>b{color:#64748b;font-weight:600;line-height:24px}
.mail-participant-line>div{display:flex;flex-wrap:wrap;gap:5px 8px;min-width:0}
.mail-address{display:inline-flex;align-items:center;gap:4px;min-width:0;overflow-wrap:anywhere;line-height:24px}
.mail-address form{display:inline-flex;margin:0}
.mail-address-add{border:0;background:transparent;color:var(--brand);font:inherit;font-weight:600;padding:2px 4px;cursor:pointer;border-radius:4px;white-space:nowrap}
.mail-address-add:hover{background:#e8f1fb}
.cols{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:16px}
/* 日历的七列。minmax(0,1fr) 不能省：轨道默认 min-width:auto，一条长文就把整列撑开 */
.cal7{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:5px}
@media(max-width:1200px){.cols{grid-template-columns:1fr}}

/* ---- 窄屏 / 手机 ---- */
@media(max-width:900px){
  body{height:auto;overflow:auto}
  /* 栅格子项默认 min-width:auto，内容一宽整页就横着撑开，顶栏按钮也不肯换行 */
  .app,.app.wide{grid-template-columns:1fr;grid-template-rows:auto 1fr;height:auto;min-height:100vh}
  .app>*{min-width:0}
  /* 侧栏变成顶部横条，导航横向滚动 */
  .side{position:relative;padding:10px 0 6px;display:flex;flex-wrap:wrap;gap:4px;align-items:center;overflow-x:auto}
  .side h1{width:100%;padding:0 12px 6px}
  .side .st{width:100%;padding:0 12px 6px}
  .side>a,.side>button{display:inline-block;padding:6px 10px;white-space:nowrap}
  .side .grp{display:none}
  /* 四个大类各自折叠；管理后台手机上不给 */
  .sgrp{width:100%}
  .gh{display:block;padding:9px 14px;color:#fff;font-size:13.5px;font-weight:600;cursor:pointer;
    border-top:1px solid rgba(255,255,255,.12)}
  .gh::after{content:'▾';float:right;opacity:.6}
  .sgrp:has(input:checked) .gh::after{content:'▴'}
  .sgrp:not(:has(input:checked))>:not(.gh){display:none}
  .side .adm{display:none}
  /* 手机上反过来：默认只有标题和 ☰，点开才铺出四个大类 */
  .htog{display:none}
  .mtog{display:block;left:auto;right:12px;top:7px;color:#fff;font-size:20px}
  .app:has(#nav:checked)>.side{visibility:visible}
  .app:not(:has(#nav:checked))>.side>:not(h1):not(.st){display:none}
  .side .n{margin-left:5px}
  .sdrag{display:none}
  /* 中间列表和右侧详情改成上下 */
  .main{overflow:visible}
  .body{padding:14px 12px;max-width:100%;margin:0}
  .card{padding:12px}
  .list{max-height:none;border-right:0;border-bottom:1px solid #e5e7eb}
  .tbl{font-size:12px}
  /* 以前是「隐藏第 5 列起」，按位置砍：客户池的可替代空间（第 7 列，这张表的排序依据）、
     商机的金额和阶段在手机上直接消失。改成整表横向滑，列一个都不少 */
  .tbl{display:block;overflow-x:auto;white-space:nowrap}
  /* 手机上详情页保留当前会话这一行，其他行收起：能确认点开的是哪封，正文也不用越过整页列表找 */
  .app.opened>.list:has(.item.on){display:block;max-height:112px;overflow:hidden;border-right:0;border-bottom:1px solid #e5e7eb}
  .app.opened>.list:has(.item.on)>header{display:none}
  .app.opened>.list:has(.item.on) #mkf .irow:not(:has(>.item.on)){display:none}
  .app.opened>.list:has(.item.on) #mkf .irow:has(>.item.on)>.tsel,
  .app.opened>.list:has(.item.on) #mkf .irow:has(>.item.on)>.chev,
  .app.opened>.list:has(.item.on) #mkf .irow:has(>.item.on)>.msgs{display:none}
  .app.opened>.list:not(:has(.item.on)){display:none}
  .app .mback{display:inline-flex}
  /* 日历是首页，手机上七列硬挤每格只看得到半个字：换成按天竖排，星期表头就没意义了 */
  .cal7{grid-template-columns:1fr}
  .cal7.dow{display:none}
  .topbar{flex-wrap:wrap;gap:6px;padding:10px 12px;position:static}
  .subj{font-size:16px}
}
/* 「← 列表」只在窄屏出现，桌面三栏并排时用不上（窄屏那条用 .app .mback 提权盖过这行）*/
.mback{display:none;align-items:center;gap:4px}
/* 日历格子。这几条以前写在每个格子和每条事件上 —— 90 个格子 + 95 个日期标签，
   同一串重复上百遍，实测占整页 60KB 里的 16KB。只有事件左边那道色条是每条不同的，
   留成行内的 border-left-color */
.cal7 .cell{border:1px solid #eef1f4;border-radius:8px;padding:5px 6px;min-height:66px;
  overflow:hidden;background:#fff}
.cal7 .cell.past{background:#fafbfc;opacity:.5}
.cal7 .cell.today{border-color:var(--brand);background:#f2f8ff}
.cal7 .dn{font-size:11px;color:#9ca3af;font-weight:400;margin-bottom:3px}
.cal7 .today .dn{color:var(--brand);font-weight:700}
.cal7 .ev{display:block;font-size:11px;line-height:1.4;text-decoration:none;color:#374151;
  border-left:2.5px solid;padding-left:4px;margin-bottom:2px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cal7 .ev.od{color:#b91c1c}
.card{background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:13px}
.card h3{font-size:13.5px;font-weight:600;margin-bottom:11px;display:flex;justify-content:space-between;align-items:center}
.user-admin{display:flex;flex-direction:column;gap:12px}
.ua-head{order:0;display:flex;justify-content:space-between;align-items:flex-end;gap:18px;padding:4px 2px 8px}
.ua-head h2{font-size:20px;margin:0 0 3px;color:#1f2937}
.ua-stats{display:flex;gap:8px;flex-wrap:wrap}
.ua-stats span{font-size:12px;color:#475569;background:#f1f5f9;border-radius:18px;padding:5px 10px}
.ua-stats span.warn{background:#fff7ed;color:#9a3412}
.ua-stats b{font-size:14px;margin-right:3px}
.ua-section{margin:0}.ua-add{order:2}.ua-mail-add{order:3}.ua-password{order:4}.ua-limit{order:5}.ua-api{order:6}.ua-guide{order:7}
.ua-roster{order:1}
.ua-toolbar{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:9px}
.ua-toolbar>div:first-child{display:flex;align-items:baseline;gap:8px}
.ua-controls{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.ua-controls .in{width:210px}
.ua-filters{display:flex;padding:2px;background:#eef2f6;border-radius:8px}
.ua-filters button{border:0;background:transparent;color:#64748b;font:inherit;font-size:12px;padding:5px 10px;border-radius:6px;cursor:pointer}
.ua-filters button.on{background:#fff;color:var(--brand);font-weight:600;box-shadow:0 1px 2px #00000012}
.ua-empty{margin-top:8px;text-align:center}
.mail-context{margin-bottom:9px;border:1px solid #e5e7eb;border-radius:8px;background:#fff}
.mail-context>summary{list-style:none;cursor:pointer;padding:7px 11px;font-size:12px;color:#5f6368}
.mail-context>summary::-webkit-details-marker{display:none}
.mail-context>summary::after{content:'▾';float:right;color:#9ca3af}
.mail-context[open]>summary{border-bottom:1px solid #eef1f4}
.mail-context[open]>summary::after{content:'▴'}
.mail-context>.card,.mail-context>.cols{margin:9px}
.kv{display:flex;justify-content:space-between;gap:10px;font-size:13px;padding:4px 0;border-bottom:1px dashed #f0f1f0}
.kv:last-child{border:0}.kv b{font-weight:600;font-variant-numeric:tabular-nums;text-align:right}
/* 值比较长的那种格子（地址、行业列表）：不加粗、限宽、右对齐 */
.kv b.w{font-weight:500;max-width:62%}
/* 铅笔按钮。页面上只写 class，样式别再各写一份行内的 */
.rbtoggle{font-size:12px;padding:3px 10px;cursor:pointer}
/* pencil()：一个按钮在「展开／收起」之间切标签 */
.rbtoggle .l1{display:none}
.rbtoggle:has(input:checked) .l0{display:none}
.rbtoggle:has(input:checked) .l1{display:inline}
/* 「新增」卡片的标题行。收起时就是一行按钮的样子，别让人以为漏了什么 */
.addcard>summary{cursor:pointer;font-weight:600;font-size:14px;list-style:none;color:var(--brand)}
.addcard>summary::-webkit-details-marker{display:none}
.addcard>summary::marker{content:''}
.addcard[open]>summary{margin-bottom:12px;padding-bottom:9px;border-bottom:1px solid #eef1f4}
/* 一行排开的表单控件，页面里出现十几次 */
.row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
@media(max-width:640px){
  .cols{grid-template-columns:1fr}
  .kv{flex-direction:column;align-items:flex-start;gap:2px}
  .kv b,.kv b.w{text-align:left;max-width:100%}
  .ua-head,.ua-toolbar{align-items:flex-start;flex-direction:column}
  .ua-controls{width:100%;justify-content:flex-start}
  .ua-controls .in{width:100%}
}
.bar{height:6px;background:#e5e7eb;border-radius:3px;overflow:hidden;margin:4px 0 2px}
.bar>i{display:block;height:100%;background:var(--brand)}
.sup{font-size:12.5px;margin-bottom:9px}
.sup .n{display:flex;justify-content:space-between;color:#374151}
.sup .d{color:#9ca3af;font-size:11.5px}
.note{background:#fffbeb;border:1px solid #fde68a;color:#92400e;font-size:12.5px;padding:8px 11px;border-radius:6px;margin-top:8px}
.note.grey{background:#f3f4f6;border-color:#e5e7eb;color:#6b7280}
.tl{list-style:none}
.tl li{position:relative;padding:0 0 13px 18px;border-left:2px solid #e5e7eb;margin-left:4px}
.tl li:last-child{border-left-color:transparent;padding-bottom:0}
.tl li::before{content:'';position:absolute;left:-6px;top:5px;width:9px;height:9px;border-radius:50%;background:var(--brand)}
.tl .t{font-size:13px;font-weight:500}.tl .d{font-size:12px;color:#9ca3af}
.tl .x{font-size:12.5px;color:#6b7280;margin-top:2px;white-space:pre-wrap}
.msg{border:1px solid #e5e7eb;border-radius:10px;padding:13px 15px;margin-bottom:10px;background:#fff}
.msg.out{background:#f2f8fe;border-color:#bcdcfa}
.msg .h{display:flex;justify-content:space-between;font-size:12px;color:#6b7280;margin-bottom:7px}
details.msg>summary::-webkit-details-marker{display:none}
details.msg>summary::marker{content:''}
details.msg[open]>summary{border-bottom:1px solid #eef1f4}
details.msg{border:0;border-bottom:1px solid #e5e7eb;border-radius:0;background:#fff}
details.msg.out{background:#fff}
.msg-detail{padding:8px 12px 0;font-size:12px;color:#5f6368;line-height:1.6}
.msg-addresses{overflow-wrap:anywhere}.msg-addresses span{float:right;color:#9ca3af}
.msg .b{white-space:normal;font-size:13.5px;max-height:none;overflow:visible}
.msg .strip{font-size:11px;color:#9ca3af;margin-top:7px;font-style:italic}
.reply{background:#fff;border:1px solid #bcdcfa;border-radius:10px;padding:16px;margin-bottom:16px}
.reply label{display:block;font-size:12px;color:#6b7280;margin:9px 0 3px}
.reply input,.reply textarea{width:100%;border:1px solid #d1d5db;border-radius:7px;padding:8px 10px;
  font:13.5px/1.6 inherit;font-family:-apple-system,"PingFang SC",system-ui,sans-serif}
.reply textarea{min-height:180px;resize:vertical}
.hint{font-size:12px;color:#9ca3af}
.empty{color:#9ca3af;text-align:center;padding:70px 20px}
/* 产品目录：一个系列一块，默认收起来。牌号几十个，全平铺开一屏看不完 */
details.pline{background:#fff;border:1px solid #e5e7eb;border-radius:10px;margin-bottom:10px}
details.pline>summary{display:flex;align-items:center;gap:9px;padding:12px 16px;
  font-size:13.5px;color:#1f2937;list-style:none}
details.pline>summary::-webkit-details-marker{display:none}
details.pline>summary::marker{content:''}
details.pline>summary::before{content:'▸';color:#9ca3af;font-size:12px;transition:transform .12s}
details.pline[open]>summary::before{transform:rotate(90deg)}
details.pline[open]>summary{border-bottom:1px solid #eef1f4}
details.pline>summary:hover{background:#f9fafb;border-radius:10px 10px 0 0}
details.pline .tbl{border:0;border-radius:0}
/* 适用应用单独占一整行，给个底色 —— 选型时最先看的就是这一栏 */
.tbl td .appline{background:#eff6ff;border-left:3px solid var(--brand);border-radius:0 7px 7px 0;
  padding:7px 11px;color:#1f2937;font-size:12.5px;line-height:1.6}
.tbl td .appline b{color:var(--brand);font-weight:600;margin-right:6px}
/* 备注和测试报告也各占一整行。以前套的是 .s2，那个类带 max-width:320px，
   写长一点就在半行处折行、看着像被截断了 */
.tbl td .noteline{background:#f8fafc;border-left:3px solid #cbd5e1;border-radius:0 7px 7px 0;
  padding:7px 11px;color:#374151;font-size:12.5px;line-height:1.7;margin-top:5px;max-width:none}
.tbl td .noteline b{color:#475569;font-weight:600;margin-right:6px}
.tbl td .pnote{border-left:3px solid #86efac;background:#f0fdf4}
.tbl td .pnote.fb{border-left-color:#fdba74;background:#fff7ed}
.tbl td .pnote .who{color:#6b7280;font-size:11.5px;margin-left:6px}
.tbl td .pnote .txt{white-space:pre-wrap;margin-top:3px}
/* 输入框和下拉长一个样。以前这串在页面里裸写了三十多遍，各写各的 padding */
select.st,.in{border:1px solid #d1d5db;border-radius:7px;padding:6px 9px;font-size:13px;font-family:inherit;box-sizing:border-box}
textarea.in{padding:9px 11px;line-height:1.7;resize:vertical}
details>summary{cursor:pointer;font-size:13px;color:var(--brand);font-weight:600;padding:4px 0}
/* ---- AI 解读卡片 ---- */
.ai{background:linear-gradient(180deg,#f4f9ff 0%,#fff 60%);border:1px solid #cfe3f8;
  border-radius:11px;padding:17px;margin-bottom:16px}
.ai .hd{display:flex;align-items:center;gap:9px;margin-bottom:3px}
.ai .hd b{font-size:14.5px;color:var(--side)}
.ai .hd .sp{font-size:11.5px;color:#8aa4c0;font-weight:400}
.ai .sub{font-size:12px;color:#8aa4c0;margin-bottom:14px}
.ai .blk{background:#fff;border:1px solid #e3ecf7;border-radius:9px;padding:12px 14px;margin-bottom:10px}
.ai .blk h4{font-size:12.5px;font-weight:600;color:var(--side);margin-bottom:7px;display:flex;align-items:center;gap:6px}
.ai .blk p{font-size:13.5px;color:#1f2937;line-height:1.65}
.ai .blk ul,.ai .blk ol{margin:0;padding-left:19px}
.ai .blk li{font-size:13px;color:#374151;margin-bottom:4px;line-height:1.6}
.ai .two{display:grid;grid-template-columns:1fr 1fr;gap:10px}
@media(max-width:1100px){.ai .two{grid-template-columns:1fr}}
.ai .risk{background:#fffbf0;border-color:#f5dfae}
.ai .risk h4{color:#92400e}
.ai .risk p{color:#78350f}
.ai .foot{display:flex;gap:8px;align-items:center;margin-top:12px;flex-wrap:wrap}
.ai .meta{font-size:11.5px;color:#9ab0c8;margin-left:auto}
.ai .none{text-align:center;padding:26px 12px;color:#8aa4c0;font-size:13px}
.badge{display:inline-block;font-size:11px;padding:2px 9px;border-radius:9px;background:#e8f2fd;color:var(--side)}
.badge.warn{background:#fef3c7;color:#92400e}
/* ---- Gmail 风格编辑器 ---- */
.cmp{background:#fff;border:1px solid #d9dde3;border-radius:10px;margin-bottom:16px;
  box-shadow:0 2px 8px rgba(11,112,214,.07);overflow:hidden}
.cmp .hd{background:#f2f6fa;padding:9px 14px;font-size:13px;font-weight:600;color:var(--side);
  border-bottom:1px solid #e5e9ef;display:flex;justify-content:space-between;align-items:center}
.cmp .fld{display:flex;align-items:center;border-bottom:1px solid #f0f2f5;padding:0 14px}
.cmp .fld span{font-size:12.5px;color:#8a94a3;width:52px;flex-shrink:0}
.cmp .fld input{flex:1;border:0;outline:0;padding:9px 0;font:13.5px inherit;font-family:inherit;background:transparent}
.cmp .recipient{position:relative;flex:1;min-width:0}
.cmp .recipient>input{width:100%;box-sizing:border-box}
.recipient-menu{position:absolute;z-index:20;left:0;right:0;top:calc(100% + 1px);max-height:310px;overflow-y:auto;
  background:#fff;border:1px solid #d9dde3;border-radius:8px;box-shadow:0 8px 22px rgba(15,23,42,.16)}
.recipient-menu:empty{display:none}
.recipient-option{display:flex;align-items:center;gap:10px;padding:9px 12px;cursor:pointer}
.recipient-option:hover,.recipient-option.on{background:#f0f6fc}
.recipient-option i{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;flex:0 0 auto;
  background:var(--brand);color:#fff;font-style:normal;font-size:15px}
.recipient-option b{display:block;min-width:0;font-weight:400}
.recipient-option strong,.recipient-option small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.recipient-option strong{font-size:13.5px;color:#1f2937}
.recipient-option small{font-size:12px;color:#6b7280;margin-top:2px}
.cmp .ed{min-height:210px;max-height:460px;overflow-y:auto;padding:14px;font:14px/1.7 Arial,"PingFang SC",sans-serif;outline:0}
.cmp .ed:empty::before{content:attr(data-ph);color:#b6bcc6}
.cmp .ed blockquote{border-left:2px solid #dadce0;margin:8px 0;padding-left:12px;color:#5f6368}
.cmp .ed .sig{color:#5f6368;font-size:13px}
.cmp .ed.drop{outline:2px dashed var(--brand);outline-offset:-6px;background:#f8fbff}
.atts{padding:0 14px 8px;display:flex;flex-wrap:wrap;gap:7px}
.att{display:inline-flex;align-items:center;gap:7px;background:#f2f6fa;border:1px solid #dbe3ec;
  border-radius:6px;padding:5px 9px;font-size:12.5px;color:#374151}
.att b,.att a{font-weight:500;max-width:190px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.att a{color:var(--brand);text-decoration:none;cursor:pointer}
.att a:hover{text-decoration:underline}
.att i{color:#9ca3af;font-style:normal;font-size:11.5px}
.att u{cursor:pointer;text-decoration:none;color:#9ca3af;font-size:15px;line-height:1}
.att u:hover{color:#b91c1c}
.tb{border-top:1px solid #e9ecf1;padding:9px 12px;display:flex;align-items:center;gap:4px;flex-wrap:wrap;background:#fbfcfd}
.tb .sp{width:1px;height:20px;background:#e2e6eb;margin:0 5px}
.tb button.t{border:0;background:transparent;width:29px;height:29px;border-radius:5px;cursor:pointer;
  font-size:14px;color:#4b5563;font-family:inherit}
.tb button.t:hover{background:#e8f2fd;color:var(--brand)}
.tb select{border:1px solid #dde2e8;border-radius:5px;padding:4px 5px;font-size:12.5px;
  font-family:inherit;color:#4b5563;background:#fff;cursor:pointer}
.tb .send{background:var(--brand);color:#fff;border:0;border-radius:18px;padding:8px 22px;
  font-size:13.5px;font-weight:600;cursor:pointer;font-family:inherit}
.tb .send:hover{background:#0959ab}
.tb .send:disabled{background:#9fc5ea;cursor:not-allowed}
.tb .draft{background:#fff;border:1px solid #cbd5e1;border-radius:18px;padding:7px 16px;
  font-size:13px;cursor:pointer;font-family:inherit;color:#374151}
.tb .draft:hover{background:#f1f5f9}
.tb .grow{flex:1}
/* ---- 侧栏刷新 ---- */
/* 管理员的视角切换。一行小胶囊，挑谁就只看谁的邮件和商机 */
.vwbar{display:flex;gap:4px;flex-wrap:wrap;margin:0 16px 10px}
.side a.vw{display:inline-block;padding:2px 9px;border-radius:11px;font-size:11.5px;
  background:rgba(255,255,255,.1);color:#c9dff5}
.side a.vw.on{background:#fff;color:var(--side);font-weight:600}
.side .rf{display:block;width:calc(100% - 32px);margin:0 16px 6px;padding:7px;border-radius:7px;
  background:rgba(255,255,255,.12);color:#c9dff5;border:1px solid rgba(255,255,255,.2);
  font:12.5px inherit;font-family:inherit;cursor:pointer}
.side .rf:hover:not(:disabled){background:rgba(255,255,255,.22);color:#fff}
.side .rf:disabled{opacity:.65;cursor:default}
.side .sy{font-size:11px;color:#7aa8d4;padding:0 16px 12px;text-align:center}
/* ---- 客户池 ---- */
.tabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:14px}
.tabs a{border:1px solid #e5e7eb;background:#fff;border-radius:16px;padding:5px 13px;font-size:12.5px;
  color:#4b5563;text-decoration:none}
.tabs a:hover{background:#f3f6f9}
.tabs a.on{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:600}
.tabs a .n{opacity:.65;margin-left:5px;font-variant-numeric:tabular-nums}
.tbl{width:100%;border-collapse:collapse;background:#fff;font-size:13px;
  border:1px solid #e5e7eb;border-radius:10px;overflow:hidden}
.tbl th{text-align:left;font-size:11.5px;color:#6b7280;font-weight:600;padding:9px 11px;
  background:#f9fafb;border-bottom:1px solid #e5e7eb;white-space:nowrap}
.tbl td{padding:10px 11px;border-bottom:1px solid #f3f4f6;vertical-align:top}
.tbl tr:last-child td{border-bottom:0}
.tbl tr:hover td{background:#fafbfd}
.tbl .num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.tbl .nm{font-weight:600;color:#1f2937}
/* 表格里凡是 <a class="nm"> 都是这个样子。以前每一行都写一遍行内 style，还和上面那条
   .nm 的颜色对着打 —— 客户池一页 150 行，光这一条重复 5KB */
.tbl a.nm{color:var(--brand);text-decoration:none}
.tbl .code{color:var(--brand);font-weight:600}
.tbl .nw{white-space:nowrap}
/* 窄列：用途、最大对手这类，长了就截断。.s2 本身是 320px */
.tbl .s2.w150{color:#4b5563;max-width:150px}
.tbl .s2.w170{color:#6b7280;max-width:170px}
.tbl .s2{font-size:11.5px;color:#9ca3af;margin-top:2px;max-width:320px}
.tbl .act{white-space:nowrap;text-align:right}
.tbl .act .btn{padding:4px 9px;font-size:12px;margin-left:4px}
.pill{display:inline-block;font-size:11px;padding:1px 8px;border-radius:9px;white-space:nowrap;color:#fff}
.pill.a{background:#e0e7ff;color:#3730a3}
.pill.b{background:#fef3c7;color:#92400e}
.pill.c{background:#d1fae5;color:#065f46}
.pill.d{background:#f3f4f6;color:#9ca3af}
/* 商机流程：桌面横向进度线，窄屏改纵向，避免十多个阶段挤成一排。 */
.flow-rail{display:flex;overflow-x:auto;padding:14px 4px 18px;scrollbar-width:thin}
.flow-step{position:relative;flex:0 0 100px;min-width:0;text-align:center;color:#8b9590;padding:0 3px}
.flow-step:not(:last-child):after{content:"";position:absolute;top:15px;left:calc(50% + 18px);width:calc(100% - 36px);height:2px;background:#d8e0db}
.flow-hit{display:block;width:100%;padding:0;border:0;background:none;color:inherit;font:inherit;cursor:pointer}
.opp-end[open]>summary{display:none}
.flow-hit:hover b,.flow-hit:focus-visible b{color:var(--brand);text-decoration:underline}
.flow-hit:focus-visible{outline:2px solid var(--brand);outline-offset:4px;border-radius:6px}
.flow-hit:disabled{cursor:default;opacity:.65}
.flow-step.historic{opacity:.75}
.flow-dot{display:block;width:32px;height:32px;margin:0 auto 9px;border-radius:50%;border:2px solid #d8e0db;background:white;position:relative;z-index:1}
.flow-step.done .flow-dot{background:var(--brand);border-color:var(--brand)}
.flow-step.current .flow-dot{background:#d65d39;border-color:#d65d39;box-shadow:0 0 0 6px #fff2ed}
.flow-step.skipped .flow-dot{background:#e9eeeb;border-color:#c8d0cb}
.flow-step b{display:block;font-size:12px;line-height:1.4;color:#374151}
.flow-step small{display:block;font-size:11px;margin-top:5px}
@media(max-width:650px){
  .flow-rail{display:block;max-height:340px;overflow-y:auto;overflow-x:hidden;padding:4px 0}
  .flow-step{display:block;flex:none;text-align:left;min-height:54px;padding:3px 0 8px}
  .flow-hit{display:grid;grid-template-columns:34px minmax(0,1fr);grid-template-rows:auto auto;align-items:start}
  .flow-dot{grid-column:1;grid-row:1/3;margin:0;width:22px;height:22px}
  .flow-step:not(:last-child):after{left:10px;top:25px;width:2px;height:calc(100% - 25px)}
  .flow-step b,.flow-step small{grid-column:2;margin:0}
}