
/* 2026-09-25 老板当面定：照微信电脑版改 —— 左边一条图标栏、中间会话列表（名字 · 最后一条 · 时间 · 未读）、右边聊天窗；暗 / 亮两套。
   颜色全走下面这组变量，两套主题只换变量不换规则。手机上列表和聊天两屏切换。 */
:root{--bg:#FAFAFA;--rail:#F6F6F6;--ric:#7A7A7A;--rib:#4A4A4A;--list:#FFFFFF;--hover:#F4F4F4;--on:#E9E9E9;--ontx:#191919;--chat:#F5F5F5;
 --bubble:#FFFFFF;--mine:#F3E6C4;--minetx:#191919;--text:#191919;--sub:#8C8C8C;--line:#ECECEC;--field:#F7F7F8;--fline:#C9C9C9;--ph:#6E6E6E;--accent:#B8872B;
 --sbar:rgba(0,0,0,.18);--sbarh:rgba(0,0,0,.32);--red:var(--u-red);--link:#8F6A1F;--glass:rgba(255,255,255,.62);--glass0:#FFFFFF;--chip:#F0F0F0;--pop:#FFFFFF;--shadow:rgba(0,0,0,.14);--quote:rgba(0,0,0,.05);--flash:#FFF1B8;--press:rgba(184,135,43,.22);--send:#1E2A44;--sendtx:#E9C979}
:root[data-theme="dark"]{--bg:#1E1E1E;--rail:#2A2A2A;--ric:#8A8A8A;--rib:#B8B8B8;--list:#262626;--hover:#303030;--on:#3A3322;--ontx:#F3E7C8;--chat:#1E1E1E;
 --bubble:#2C2C2C;--mine:#4A3B1E;--minetx:#F3EAD6;--text:#E5E5E5;--sub:#7D7D7D;--line:#303030;--field:#1C1C1C;--fline:#4D4D4D;--ph:#A0A0A0;--accent:#D8B45A;
 --sbar:rgba(255,255,255,.16);--sbarh:rgba(255,255,255,.3);--red:var(--u-red);--link:#D8B45A;--glass:rgba(36,36,38,.62);--glass0:#242426;--chip:#333333;--pop:#2C2C2C;--shadow:rgba(0,0,0,.5);--quote:rgba(255,255,255,.07);--flash:#4D4420;--press:rgba(216,180,90,.22);--send:#2A3654;--sendtx:#E9C979}
*{box-sizing:border-box}
/* 滚动条（老板 2026-09-25：「移动的时候显示这样的滚动条不专业」）：像微信 —— 细、没底槽，鼠标移上去 / 滚动时才浮出来 */
*{scrollbar-width:thin;scrollbar-color:transparent transparent}
*:hover{scrollbar-color:var(--sbar) transparent}
::-webkit-scrollbar{width:6px;height:6px;background:transparent}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:transparent;border-radius:3px}
:hover::-webkit-scrollbar-thumb{background:var(--sbar)}
::-webkit-scrollbar-thumb:hover{background:var(--sbarh)}
::-webkit-scrollbar-corner{background:transparent}
html,body{height:100%}
body{margin:0;overflow:hidden;background:var(--bg);color:var(--text);font:15px/1.6 -apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei',sans-serif}
button{font-family:inherit}
svg{display:block}
/* ---- 登录 ---- */
.wsu .opsic,.wsu #projrail,.wsu #pcol,.wsu #gtbar{display:none!important}
/* 「客户」页没接网站时的说明（老板 b:10 #26821） */.inbx{color:var(--text);text-align:left;margin:16px;padding:18px;border:1px solid var(--line);border-radius:14px;background:var(--card,var(--bubble))}.inbxh{display:flex;gap:10px;align-items:center;margin-bottom:8px}.inbxh svg{width:22px;height:22px;flex:0 0 auto;color:var(--accent)}.inbxh b{font-size:16px;line-height:1.4;color:var(--text)}.inbxtag{display:inline-block;margin:4px 0 8px;padding:2px 10px;border-radius:999px;background:var(--accent);color:#1a1a1a;font-size:12px;font-weight:600}.inbxs ol{margin:6px 0 0 20px;padding:0;line-height:1.8;font-size:14px}.inbx .dact{margin-top:12px}
/* 客户工作台的动态也有「AI 广场」（老板 b:10 #27060 付费客户要有；#27062 免费档入口照常、只显示「年费版可用」—— #1882 pzLocked）。原来整个藏掉（测试2 #26770 ②），测试2 #27440 复验发现付费客户也看不到 */
/* #1314 老板：登录框要在窗口正中（原来 margin:18vh 往下推，卡片一长就贴到底）。fixed + inset:0 + margin:auto 上下左右都居中，太高就自己滚 */
.gate{position:fixed;inset:0;margin:auto;height:fit-content;max-height:calc(100% - 32px);overflow-y:auto;box-sizing:border-box;width:min(380px,calc(100% - 24px));padding:24px 20px;background:var(--bubble);border:1px solid var(--line);border-radius:14px;box-shadow:0 6px 24px var(--shadow)}
/* 输入框看得见（老板 b:10 #35949 安卓深色截图）：边框比卡片亮一档、底色和卡片拉开、提示字对比度 ≥ 4.5:1、点进去金色边框；浅色同一套 */
.gate input:focus,.panel input[type=text]:focus,.panel textarea:focus,.panel select:focus,.dbox input:focus,.dbox textarea:focus,.dbox select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 25%,transparent)}
input::placeholder,textarea::placeholder{color:var(--ph);opacity:1}
.gate input{width:100%;margin:12px 0 10px;padding:10px;border-radius:10px;border:1px solid var(--fline);background:var(--field);color:var(--text);font-family:inherit;font-size:16px}
.gate button{width:100%;padding:10px;border-radius:10px;border:0;background:var(--accent);color:var(--u-on-color);cursor:pointer;font-size:15px}
.err{color:var(--red);font-size:12px}
/* #2921 登录页（老板 b:10 #37505 #37515）：手机上邮箱密码框在最上面，「用 DlxAi 账号登录」「用 Google 登录」并排在下面；电脑上授权按钮在最前 */
.ssobox{display:flex;flex-direction:column}#acbox{order:1}#ssobtns{order:2;display:flex;gap:8px;margin-top:12px}#ssobtns button{flex:1;min-width:0}#ssohint{order:3}#invbox{order:4}
@media (min-width:700px){#ssobtns{order:0;margin:0 0 6px}}
/* ---- 三栏 ---- */
#app{display:flex;height:100vh;height:100dvh}
/* iPad App 横屏两栏（秘书 #25195）：电脑布局本来不留状态栏，App 里顶上让出状态栏那一截 */
@media (min-width:1101px),(min-width:760px) and (orientation:landscape),(min-width:760px) and (pointer:fine){html.iosapp #app{box-sizing:border-box;padding-top:env(safe-area-inset-top,0px);background:var(--rail)}}
.rail{flex:0 0 60px;background:var(--rail);display:flex;flex-direction:column;align-items:center;gap:6px;padding:16px 0 14px}
.rsp{flex:1}
.ri{position:relative;width:40px;height:40px;border:0;border-radius:8px;background:transparent;color:var(--rib);cursor:pointer;display:flex;align-items:center;justify-content:center}
.ri:hover{background:var(--hover)}.ri.on{color:var(--accent)}.ri svg{width:24px;height:24px}
.rb-n{position:absolute;top:0;right:-2px;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:var(--red);color:var(--u-on-color);font-size:11px;font-weight:600;line-height:18px;text-align:center}
/* 「客户消息」收件箱（秘书 #25680）：三栏切换 + 每行多一行「邮箱 · 在看哪页」；等人回复的那行左边一道主色 */
.inbt{display:flex;gap:6px;padding:8px 10px 6px;position:sticky;top:0;z-index:2;background:var(--list)}
.inbt button{flex:1;min-width:0;white-space:nowrap;border:1px solid var(--line);background:transparent;color:var(--sub);border-radius:8px;padding:6px 2px;font-size:12.5px;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:4px}
.inbt button.on{color:var(--text);border-color:var(--accent);background:var(--hover)}
.inbt .inbc{min-width:18px;height:18px;border-radius:9px;padding:0 5px;font-size:11px;line-height:18px;background:var(--line);color:var(--text)}
.inbt button.hot .inbc{background:var(--red);color:var(--u-on-color)}
.ss.inbr.w{box-shadow:inset 3px 0 0 var(--accent)}
.sndrow input[type=range]{flex:1;min-width:80px;accent-color:var(--accent)}.sndrow .sndv{width:30px;text-align:right;font-variant-numeric:tabular-nums}.sndrow .btn{padding:4px 10px}
.inbs{display:flex;gap:0;margin:8px 10px 0;border:1px solid var(--line);border-radius:8px;overflow:hidden}.inbs button{flex:1;border:0;background:transparent;color:var(--sub);padding:5px 4px;font-size:12.5px;cursor:pointer}.inbs button.on{background:var(--hover);color:var(--text);font-weight:600}
.inba{display:flex;width:100%;height:100%;align-items:center;justify-content:center;font-weight:600;font-size:17px}
.inbm{font-size:12px;opacity:.8}
.inbw{font-size:12px;color:var(--red);white-space:nowrap;flex:none}
.inbx{font-size:11px;padding:0 5px;border-radius:4px;border:1px solid var(--line);color:var(--sub);font-weight:400}
.inbf{padding:10px;text-align:center}.inbf button{border:0;background:transparent;color:var(--sub);font-size:13px;cursor:pointer;text-decoration:underline}
/* 其它项目组的新消息：左上角蓝色（老板 b:10 #16142），右上角红色只算当前项目组 */
.rb-n.rb-o{right:auto;left:-2px;background:var(--accent)}
.fucats{display:flex;flex-wrap:wrap;align-items:center;gap:6px;width:100%;margin-top:8px;font-size:12px;color:var(--sub)}.fucats>span{margin-right:2px}.fuc{border:1px solid var(--line);background:transparent;color:var(--text);border-radius:12px;padding:2px 10px;font-size:12px;cursor:pointer}.fuc.on{background:var(--accent);border-color:var(--accent);color:var(--u-on-color)}.fuc small{opacity:.7}.fuc.sm{margin-left:8px;padding:0 8px;font-size:11px;color:var(--sub)}
.mpset{display:inline-block;margin-left:10px;padding:0 6px;font-size:15px;color:var(--sub);cursor:pointer}
.ss.jflash{animation:jfl 1.2s ease-out}@keyframes jfl{0%,40%{background:var(--flash)}}
.pstg{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;vertical-align:1px;flex:0 0 auto}
.pgbar{display:flex;align-items:center;gap:4px;padding:6px 12px;font-size:12px;color:var(--sub)}.pgbar span{margin-right:2px}.pgbar button{border:1px solid var(--line);background:transparent;color:var(--text);border-radius:12px;padding:2px 9px;font-size:12px;cursor:pointer}.pgbar button.on{background:var(--accent);border-color:var(--accent);color:var(--u-on-color)}
.pgh{display:flex;align-items:center;font-size:12px;color:var(--sub);padding:10px 14px 4px;font-weight:600}
.meav{margin-bottom:12px}
/* 左栏不再照微信（老板 2026-09-26 #10211 #10218 #10232「最左边那些按钮跟微信太像，不能让人误以为是微信」，选第一版）：
   顶上是我们的 D 标、头像挪到最底；图标是自己的一套实心图形，每个按钮下有字；选中的是圆角底 + 左边一条品牌色 */
.brandD{display:none}
@media (min-width:1101px),(min-width:760px) and (orientation:landscape),(min-width:760px) and (pointer:fine){
 .rail{flex:0 0 76px;gap:4px;padding:14px 0 12px}
 .brandD{display:block;margin-bottom:14px}.brandD svg{width:40px;height:40px;display:block}
 .rail .ri{width:62px;height:54px;flex-direction:column;gap:3px;border-radius:12px}
 .rail .ri svg{width:22px;height:22px}
 .rail .ri .tl{display:block;font-size:11px;line-height:1.1;white-space:nowrap}
 .rail .ri.on{background:var(--on);color:var(--accent);box-shadow:inset 3px 0 0 var(--accent)}
 #meav{order:99;margin:6px 0 0}
}
/* 项目组栏（老板 2026-09-25「这里可能要分二栏了，一栏是项目组，另一栏是组下面的群及个人」）：只给老板和项目经理 */
.pcol{flex:0 0 var(--pcolw,220px);background:var(--rail);border-right:1px solid var(--line);display:none;flex-direction:column;min-width:0;position:relative}
body.coldrag{cursor:ew-resize;user-select:none;-webkit-user-select:none}body.coldrag iframe{pointer-events:none}
body.haspcol:not(.pcol-off) .pcol{display:flex}
body.haspcol:not(.pcol-off) #projrail{display:none}
.pcol .ph{display:flex;align-items:center;gap:4px;padding:16px 8px 8px 14px}
.pcol .ph b{flex:1;font-size:13px;font-weight:600;color:var(--sub)}
.pcol .ph button{width:26px;height:26px;border:0;background:transparent;color:var(--sub);border-radius:6px;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0}
.pcol .ph button:hover{background:var(--hover);color:var(--text)}.pcol .ph svg{width:16px;height:16px}
.pcol .pcs{flex:0 0 30px;margin:0 10px 8px}
.plist2{flex:1;overflow-y:auto;padding:0 6px 10px;scrollbar-width:thin}
.psec{font-size:11px;color:var(--sub);padding:10px 8px 4px;cursor:default;user-select:none}
.psec.fold{cursor:pointer}.psec.fold:hover{color:var(--text)}
.prj{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:6px;cursor:pointer;position:relative}
.prj:hover{background:var(--hover)}.prj.on{background:var(--on);color:var(--ontx)}.prj.on small{color:var(--ontx);opacity:.75}
.prj.arch{opacity:.55}
.prj .pa{flex:0 0 32px;width:32px;height:32px;border-radius:7px;background:var(--chip);display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:600;overflow:hidden}
.prj .pa img{width:100%;height:100%;object-fit:cover}
.prj .pt{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.prj .pt b{font-size:13.5px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.prj .pt small{font-size:11px;color:var(--sub);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.prj.on .pt small{color:var(--ontx);opacity:.8}.prj.on .pa{background:rgba(255,255,255,.22);color:var(--ontx)}
.prj .bd{min-width:16px;height:16px;padding:0 4px;border-radius:8px;background:var(--red);color:var(--u-on-color);font-size:10px;line-height:16px;text-align:center}
.prj .pinm{display:none}.prj.pin{background:var(--hover)}.prj.pin.on{background:var(--on)}.pjline{height:1px;background:var(--line);margin:4px 8px}   /* 项目组置顶和聊天置顶一个样（老板 b:10 #15789）：灰底 + 一条线分开 */
/* #3038 总部老板进他当共同主人的工作台：项目组栏 / 切换项目组里那一项的小标，和工作台里顶上的「回总部」 */
.xws3038t{display:inline-block;margin-left:6px;padding:0 6px;border-radius:var(--u-r-tag);border:1px solid var(--accent);color:var(--accent);font-size:10.5px;font-weight:500;line-height:16px;vertical-align:middle}
.xws3038b{display:flex;align-items:center;gap:4px;margin:6px 12px 0;padding:0 12px;height:var(--u-h-sm);border-radius:var(--u-r-btn-sm);border:1px solid var(--line);background:var(--card);color:var(--accent);font-size:14px;font-weight:500;cursor:pointer;font-family:inherit}
.xws3038b:hover{background:var(--hover)}
.xg3111h{padding:10px 14px 4px;font-size:12px;color:var(--sub);font-weight:500}
.xg3111a{font-size:14px;font-weight:600;color:var(--u-on-color)}
.xg3111p{position:fixed;inset:0;z-index:10000;display:flex;flex-direction:column;background:var(--chat);color:var(--text);padding:env(safe-area-inset-top,0px) 0 env(safe-area-inset-bottom,0px)}
.xg3111hd{display:flex;align-items:center;gap:8px;padding:8px 12px;border-bottom:1px solid var(--line);background:var(--list)}
.xg3111bk{border:0;background:transparent;color:var(--accent);font-size:26px;line-height:1;width:var(--u-h-sm);height:var(--u-h-sm);border-radius:var(--u-r-btn-sm);cursor:pointer;font-family:inherit}
.xg3111tt{display:flex;flex-direction:column;min-width:0}.xg3111tt b{font-size:16px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.xg3111tt small{font-size:12px;color:var(--sub)}
.xg3111ls{flex:1;overflow-y:auto;padding:12px 16px;-webkit-overflow-scrolling:touch}
.xg3111m{display:flex;flex-direction:column;align-items:flex-start;margin:0 0 12px}.xg3111m.me{align-items:flex-end}
.xg3111au{font-size:12px;color:var(--sub);margin:0 0 3px}
.xg3111bb{max-width:min(80%,560px);background:var(--bubble);border-radius:12px;padding:8px 11px;word-break:break-word}.xg3111m.me .xg3111bb{background:var(--accent);color:var(--u-on-color)}
.xg3111tx{white-space:pre-wrap;font-size:15px;line-height:1.45}
.xg3111im{display:block;max-width:100%;max-height:320px;border-radius:8px;margin-top:4px}
.xg3111fa{display:block;color:inherit;text-decoration:underline;margin-top:4px}
.xg3111tm{font-size:11px;color:var(--sub);margin-top:3px}
.xg3111sys{text-align:center;font-size:12px;color:var(--sub);margin:0 0 12px}
.xg3111mo{display:block;margin:0 auto 12px;border:1px solid var(--line);background:var(--card);color:var(--sub);height:var(--u-h-sm);border-radius:var(--u-r-btn-sm);padding:0 12px;cursor:pointer;font-family:inherit}
.xg3111me{font-size:12px;color:var(--sub);padding:6px 16px 0}
.xg3111in{display:flex;align-items:flex-end;gap:8px;padding:6px 12px 10px}
.xg3111in textarea{flex:1;resize:none;min-height:var(--u-h-input);max-height:140px;border:1px solid var(--line);border-radius:var(--u-r-input);background:var(--field);color:var(--text);padding:9px 12px;font-size:16px;font-family:inherit;box-sizing:border-box}
.xg3111ib{display:flex;align-items:center;justify-content:center;width:var(--u-h-input);height:var(--u-h-input);color:var(--sub);cursor:pointer}.xg3111ib svg{width:24px;height:24px}
.xg3111sd{border:0;background:var(--accent);color:var(--u-on-color);height:var(--u-h-input);border-radius:var(--u-r-btn);padding:0 16px;font-size:15px;cursor:pointer;font-family:inherit}
.pchip{display:inline-block;margin-left:6px;padding:0 5px;border-radius:4px;background:var(--chip);color:var(--sub);font-size:10.5px;font-weight:500;line-height:16px;vertical-align:1px;font-family:ui-monospace,Menlo,monospace}
.askw{position:fixed;inset:0;z-index:10000;background:var(--bubble);display:flex;flex-direction:column;align-items:center;overflow-y:auto;padding:0}
.askb{width:min(720px,100%);box-sizing:border-box;background:var(--bubble);color:var(--text);padding:0 16px 14px}.askb h3{display:flex;align-items:center;margin:0 -16px 14px!important;padding:calc(8px + env(safe-area-inset-top,0px)) 16px 8px;border-bottom:1px solid var(--line);min-height:44px;box-sizing:border-box;font-size:17px!important}.askq{font-size:16px;line-height:1.5;margin:6px 0 8px;word-break:break-word}.askm{white-space:pre-wrap;margin:0 0 6px}
.askb h3{margin:0 0 12px;font-size:15px}.askb .askta{display:block;width:100%;box-sizing:border-box;min-height:150px;margin:6px 0 4px;padding:14px;border:1px solid var(--line);border-radius:14px;background:var(--field);color:var(--text);font:inherit;font-size:16px;line-height:1.6;resize:vertical;outline:none}.askb .askta:focus{border-color:var(--accent,#D9B45A)}
.askb input{width:100%;box-sizing:border-box;height:36px;border:1px solid var(--line);border-radius:6px;background:var(--field);color:var(--text);padding:0 10px;font-size:14px;outline:none}
.pj.exp{background:var(--rail);border:1.5px solid var(--line);color:var(--sub);position:sticky;top:0;z-index:2;flex:0 0 auto;box-shadow:0 6px 6px -4px var(--rail)}
.side{flex:0 0 var(--sidew,280px);background:var(--list);border-right:1px solid var(--line);display:flex;flex-direction:column;min-width:0;position:relative}
/* 列表和聊天窗之间那条竖线可以左右拖（老板 2026-09-25），宽度记进个人设置 */
.sdrag{position:absolute;top:0;bottom:0;right:-4px;width:8px;cursor:ew-resize;z-index:8;touch-action:none}
.sdrag:hover,.sdrag.on{background:linear-gradient(to right,transparent 3px,var(--accent) 3px,var(--accent) 5px,transparent 5px)}
.sbar{padding:14px 12px 10px;display:flex;gap:8px;align-items:center}
.srch{flex:1;min-width:0;display:flex;align-items:center;gap:6px;background:var(--chip);border-radius:6px;padding:0 8px;height:30px;color:var(--sub)}
.srch svg{width:14px;height:14px;flex:0 0 auto}
.srch input{flex:1;min-width:0;border:0;background:transparent;color:var(--text);font-family:inherit;font-size:13px;outline:none}@media (max-width:759px),(orientation:portrait) and (pointer:coarse) and (max-width:1100px){.srch{height:36px;border-radius:8px;justify-content:center}.srch svg{width:16px;height:16px}.srch input{font-size:16px;flex:0 1 auto;width:4.5em;text-align:left}.srch:focus-within input{flex:1;width:auto}.srch:focus-within{justify-content:flex-start}}
.sess{flex:1;overflow-y:auto;display:flex;flex-direction:column}.sess>*{flex-shrink:0}
.ss{display:flex;gap:10px;align-items:center;width:100%;padding:11px 12px;border:0;background:transparent;color:var(--text);text-align:left;cursor:pointer}
.ss:hover{background:var(--hover)}.ss.on{background:var(--on);color:var(--ontx)}
.ss.on .sm,.ss.on .st2{color:var(--ontx);opacity:.75}
.sb{flex:1;min-width:0}
.sr{display:flex;align-items:baseline;gap:8px}
.sn{flex:1;min-width:0;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.st2{flex:0 0 auto;font-size:11px;color:var(--sub)}
.sm{font-size:12px;color:var(--sub);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px}
.sm .at{color:var(--red)}
.ss.on .sm .at{color:var(--ontx);font-weight:600}
.sh{font-size:11px;color:var(--sub);padding:12px 14px 4px}
.empty{padding:30px 14px;text-align:center;color:var(--sub);font-size:13px}
.wsmade{display:block;text-align:center;padding:14px 0 18px;font-size:11px;color:var(--sub);opacity:.75;text-decoration:none}   /* 免费版工作台「DlxAi.Ai 出品」小标（#1632，总研发 #24848） */
/* 头像：没有照片，用名字的一两个字 + 身份色（老板黄 / 研发蓝 / 测试红 / 测试员绿）；群用一个人群图标 */
.av{position:relative;flex:0 0 auto;width:40px;height:40px;border-radius:6px;display:flex;align-items:center;justify-content:center;color:var(--u-on-color);font-size:13px;font-weight:600;letter-spacing:-.5px;user-select:none}
.av svg{width:24px;height:24px}
.av.sm2{width:36px;height:36px;font-size:12px}
.av .bd{position:absolute;top:-7px;right:-8px;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:var(--red);color:var(--u-on-color);font-size:11px;font-weight:600;line-height:18px;text-align:center;letter-spacing:0}
.av .gini{width:100%;height:100%;display:flex;align-items:center;justify-content:center;border-radius:inherit;color:var(--u-on-color);font-size:1.45em;font-weight:700;letter-spacing:0}.gini.gn2{font-size:1.2em;letter-spacing:-.02em}.gini.gn3{font-size:.95em;letter-spacing:-.04em}
.coll{display:grid;width:100%;height:100%;gap:1px;padding:2px;background:var(--chip);border-radius:inherit;overflow:hidden}
.av .coll.g2{grid-template-columns:1fr 1fr;grid-auto-rows:1fr}.av .coll.duo{grid-template-rows:1fr}.av .coll.g3{grid-template-columns:1fr 1fr 1fr;grid-auto-rows:1fr}
.av .coll>*{width:100%;height:100%;min-height:0;object-fit:cover;border-radius:2px;display:flex;align-items:center;justify-content:center;font-size:8px;color:var(--u-on-color)}
/* 不在线 / 休眠：只把右下角小点变灰，头像保持彩色（老板 #13028：整张灰白照在中国是遗照的意思） */
.av .od.off{background:#A0A4AB}
.av .aib{position:absolute;left:-3px;top:-3px;font-size:8px;line-height:1;padding:1px 2px;border-radius:3px;background:var(--accent);color:var(--u-on-color);font-style:normal;font-weight:700;letter-spacing:.2px;border:1px solid var(--list)}
.hk{display:inline-block;font-size:10px;line-height:14px;padding:0 4px;border-radius:3px;margin-left:4px;vertical-align:1px;font-weight:500;font-style:normal}.hk.ai{background:var(--u-gold-bg);color:var(--u-gold-tx)}.hk.hu{background:var(--chip);color:var(--sub)}
.av .zm{position:absolute;right:-4px;bottom:-4px;width:15px;height:15px;border-radius:50%;background:#5B6B82;color:var(--u-on-color);font-size:10px;line-height:15px;text-align:center;font-style:normal;border:2px solid var(--list)}
.av .od{position:absolute;right:-3px;bottom:-3px;width:11px;height:11px;border-radius:50%;background:#FF7A00;border:2px solid var(--list)}
.av .dt{position:absolute;top:-4px;right:-4px;width:10px;height:10px;border-radius:50%;background:var(--red)}
.k-boss{background:#E0A100}.k-dev{background:#3B7BE8}.k-test{background:#E0463F}.k-tester{background:#1FA35A}.k-grp{background:#5B6B82}.k-other{background:#8A8F98}.k-client{background:#8E44AD}
.pinin{-webkit-text-security:disc;letter-spacing:10px;text-align:center;font-size:22px!important}
.chat{flex:1;min-width:0;display:flex;flex-direction:column;background:var(--chat);position:relative}
/* 顶上的滚动提醒（老板 2026-09-25「不用弹出来，在上面这个地方滚动这个帐号权限可以看到的信息提醒」） */
.tick{flex:0 0 28px;overflow:hidden;background:var(--chip);border-bottom:1px solid var(--line);display:flex;align-items:center;font-size:12.5px;color:var(--text);position:relative}
.tk-in{white-space:nowrap;display:inline-block;padding-left:100%;animation:tkmove 30s linear infinite}
.tick:hover .tk-in{animation-play-state:paused}
.tk-it{cursor:pointer;margin-right:48px}.tk-it:hover{text-decoration:underline}
.tk-it b{color:var(--accent);font-weight:600;margin-right:4px}.tk-it i{font-style:normal;color:var(--sub);margin-right:4px}
.tk-it .n{display:inline-block;min-width:16px;height:16px;padding:0 4px;border-radius:8px;background:var(--red);color:var(--u-on-color);font-size:10px;line-height:16px;text-align:center;margin-left:4px}
@keyframes tkmove{from{transform:translateX(0)}to{transform:translateX(-100%)}}
html.solo .tick{display:none!important}
.newver{position:fixed;left:50%;top:calc(env(safe-area-inset-top,0px) + 58px);transform:translateX(-50%);z-index:900;background:var(--pop);color:var(--text);border:1px solid var(--accent);padding:7px 14px;border-radius:999px;font-size:13px;box-shadow:0 4px 14px var(--shadow);cursor:pointer;white-space:nowrap}
.offh{flex:0 0 auto;text-align:center;font-size:12px;padding:5px 10px;color:var(--sub);background:var(--quote);border-bottom:1px solid var(--line)}
.pvbar{position:fixed;top:0;left:50%;transform:translateX(-50%);z-index:9000;background:var(--accent);color:var(--u-on-color);font-size:13px;padding:6px 14px;border-radius:0 0 8px 8px;cursor:pointer;box-shadow:0 4px 14px var(--shadow)}
.mpostb{margin-left:auto;position:relative;z-index:1;flex:0 0 auto;height:34px;padding:0 14px;border-radius:999px;border:0;background:var(--accent,#D9B45A);color:var(--u-on-color);font-size:14px;font-weight:600;cursor:pointer;white-space:nowrap}
.hbtn{flex:0 0 auto;width:34px;height:34px;border:0;border-radius:6px;background:transparent;color:var(--ric);cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0}
.hbtn:hover,.hbtn.on{color:var(--text);background:var(--hover)}.hbtn svg{width:22px;height:22px}
/* 右侧「⋯」聊天信息面板（老板 2026-09-25 照微信：对这个群 / 这个人的设置都在这里） */
.panel{position:absolute;top:60px;right:0;bottom:0;width:320px;max-width:100%;background:var(--list);border-left:1px solid var(--line);overflow-y:auto;z-index:25;box-shadow:-10px 0 28px var(--shadow);padding:14px 16px 24px}
.pgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px 4px;padding-bottom:12px}
.pm{display:flex;flex-direction:column;align-items:center;gap:5px;cursor:pointer;font-size:11px;color:var(--sub);position:relative;border:0;background:none;padding:0;font-family:inherit}
.pm .av{width:46px;height:46px;font-size:13px}
.pm>span{max-width:64px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pm>span.orig{margin-top:-4px;font-size:10px;opacity:.75}
.pm.sel .av{outline:2px solid var(--accent);outline-offset:2px}
.pm.rm .av{outline:2px dashed var(--red);outline-offset:2px}
.pm .mtag{position:absolute;top:32px;right:6px;background:var(--red);color:var(--u-on-color);border-radius:3px;font-size:9px;padding:0 3px;line-height:14px}
.pm .box{width:46px;height:46px;border:1.5px dashed var(--sub);border-radius:6px;display:flex;align-items:center;justify-content:center;font-size:24px;line-height:1;color:var(--sub)}
.pact{display:flex;gap:6px;flex-wrap:wrap;align-items:center;padding:8px 10px;margin:0 0 10px;border-radius:6px;background:var(--chip);font-size:12px}
.pact b{flex:1 1 100%;font-weight:500;font-size:13px}
.pact button,.psave{height:28px;padding:0 10px;border-radius:5px;border:1px solid var(--line);background:var(--bubble);color:var(--text);font-size:12px;cursor:pointer}
.pact button.dan{color:var(--red)}
.psec{border-top:1px solid var(--line);padding:12px 0}.psec input[type=text],.psec select{font-size:16px}.psec .hint,.pgroup+.hint{font-size:14px}
.psec h4{margin:0 0 6px;font-size:16px;font-weight:500;color:var(--text)}
.ss.top .sn::before{content:"★ ";color:var(--accent)}.revhist{margin:6px 0;font-size:14px}.revhist summary{cursor:pointer;color:var(--sub)}.revhv{padding:6px 8px;border-left:3px solid var(--line);margin:6px 0}.revhv.on{border-left-color:var(--link)}.revhv small{color:var(--sub)}.revhd{color:var(--sub);font-size:13px;margin-top:2px}.psec h4{margin:0 0 6px;font-size:14px;font-weight:500;color:var(--text)}
.psec .v{font-size:13px;color:var(--sub);white-space:pre-wrap;overflow-wrap:anywhere}
.panel input[type=text],.panel textarea,.panel select{width:100%;border:1px solid var(--fline);border-radius:6px;background:var(--field);color:var(--text);font-family:inherit;font-size:13px;padding:7px 9px}
.panel textarea{height:90px;resize:vertical;line-height:1.5}
.psave{margin-top:6px}
.prow2{display:flex;align-items:center;justify-content:space-between;padding:12px 0;border-top:1px solid var(--line);font-size:16px;color:var(--text)}
.sw{flex:0 0 auto;width:var(--u-sw-w);height:var(--u-sw-h);border-radius:var(--u-r-sw);background:var(--chip);position:relative;border:1px solid var(--line);cursor:pointer;padding:0}
.sw.on{background:var(--accent);border-color:var(--accent)}
.sw:after{content:"";position:absolute;top:2px;left:2px;width:var(--u-sw-knob);height:var(--u-sw-knob);border-radius:50%;background:var(--u-on-color);box-shadow:0 1px 2px rgba(0,0,0,.25);transition:left .15s}
.sw.on:after{left:20px}
/* #2884 设置页（老板 b:10 #37054）：浅灰底 + 白卡片分组；组名小灰字在卡片上面；行内分隔线从文字开始（不在图标下面）；颜色都走自己的 token */
:root{--stgbg:#F2F2F2;--stgcard:#FFFFFF;--stgsep:#E8E8E8;--stg-lt-bg:#F5F5F5;--stg-lt-card:#FFFFFF;--stg-lt-line:#D9D9D9;--stg-dk-bg:#1E1E1E;--stg-dk-card:#2E2E2E;--stg-dk-line:#4A4A4A}
:root[data-theme="dark"]{--stgbg:#151515;--stgcard:#262626;--stgsep:#343434}
.stg{background:var(--stgbg);color:var(--text);padding:0 16px 20px;box-sizing:border-box;min-height:100%}
.stghd{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;min-height:50px;margin:0 -16px;padding:0 10px;background:var(--stgbg)}
.stghd>b,.stgdh>b{font-size:17px;font-weight:600;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.stgbk{justify-self:start;display:inline-flex;align-items:center;gap:2px;border:0;background:none;color:var(--text);font-family:inherit;font-size:17px;line-height:1;padding:8px 8px 8px 4px;cursor:pointer;border-radius:8px}
.stgbk i{font-style:normal;font-size:28px;line-height:20px;margin-top:-4px}.stgbk:hover{background:var(--hover)}
.dlg.pg .dbox>h3.stgdh:first-child{display:grid;grid-template-columns:1fr auto 1fr}
.dlg.pg .dbox>h3.stgdh .stgbk{font-size:16px;font-weight:400;padding-right:12px}
.dlg.pg .dbox:has(>.stg),.dlg.pg .dbox:has(>.stg)>h3:first-child{background:var(--stgbg)}
.dlg.pg .dbox>.stg{max-width:640px;padding:0 0 24px;flex:0 0 auto}
.msheet.full:has(.stg),.msbox:has(>.stg){background:var(--stgbg)}
.msbox>.stg>.stghd{position:sticky;top:0;z-index:2}
.stgme{display:flex;align-items:center;gap:14px;width:100%;box-sizing:border-box;margin:8px 0 2px;padding:16px;border:0;border-radius:14px;background:var(--stgcard);color:var(--text);text-align:left;cursor:pointer;font-family:inherit}
.stgav{width:60px;height:60px;flex:none;border-radius:50%;background:var(--chip);display:flex;align-items:center;justify-content:center;overflow:hidden;font-size:22px;font-weight:600;color:var(--text)}.stgav img{width:100%;height:100%;object-fit:cover}
.stgnm{flex:1;min-width:0;display:flex;flex-direction:column;gap:5px}.stgnm b{font-size:20px;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.stgnm small{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:14px;color:var(--sub)}
.stgpl{color:var(--accent);border:1px solid var(--accent);border-radius:999px;padding:1px 9px;font-size:13px;line-height:18px}
.stgh{font-size:13px;color:var(--sub);padding:20px 16px 7px;font-weight:500}
.stgc{background:var(--stgcard);border-radius:14px;overflow:hidden}
.stgr{display:flex;align-items:center;gap:14px;width:100%;box-sizing:border-box;min-height:52px;padding:0 0 0 16px;border:0;background:transparent;color:var(--text);font-size:15px;text-align:left;cursor:pointer;font-family:inherit}
.stgr:hover{background:var(--hover)}.stgr:active{background:var(--hover)}
.stgi{width:24px;height:24px;flex:none;display:flex;align-items:center;justify-content:center;color:var(--text)}.stgi svg{width:22px;height:22px}
.stgx{flex:1;min-width:0;align-self:stretch;display:flex;align-items:center;gap:8px;min-height:52px;padding-right:14px;box-sizing:border-box}
.stgr+.stgr .stgx,.stgth+.stgr .stgx{border-top:1px solid var(--stgsep)}
.stgt{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.stgv{flex:0 1 auto;max-width:48%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--sub);font-size:14px}
.stgch{flex:none;color:var(--sub);font-size:22px;line-height:1;margin-top:-2px}
.stgme .stgch{margin-left:auto}
.stgr.dan,.stgr.dan .stgi{color:var(--red)}
.stgsw{display:block;pointer-events:none}
.stgth{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;padding:16px 16px 14px}
.stgtb{display:flex;flex-direction:column;align-items:center;gap:8px;border:0;background:none;padding:0;color:var(--text);font-family:inherit;font-size:14px;cursor:pointer;min-width:0}
.stgtb>span:last-child{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.stgpv{display:flex;width:100%;height:72px;box-sizing:border-box;border:2px solid var(--stgsep);border-radius:12px;overflow:hidden}
.stgtb.on{color:var(--accent);font-weight:600}.stgtb.on .stgpv{border-color:var(--accent)}
.stgpv>span{flex:1;min-width:0;display:flex;flex-direction:column;gap:5px;padding:9px 8px}
.stgpv i{display:block;height:6px;border-radius:3px}.stgpv i.b{height:16px;border-radius:5px}.stgpv i.a{width:58%;align-self:flex-end;height:10px;background:var(--accent)}
.stgpv .pl{background:var(--stg-lt-bg)}.stgpv .pl i{background:var(--stg-lt-line)}.stgpv .pl i.b{background:var(--stg-lt-card);border:1px solid var(--stg-lt-line)}
.stgpv .pd{background:var(--stg-dk-bg)}.stgpv .pd i{background:var(--stg-dk-line)}.stgpv .pd i.b{background:var(--stg-dk-card)}
.stgpv .pl i.a,.stgpv .pd i.a{background:var(--accent)}
.stgft{font-size:13px;color:var(--sub);padding:8px 16px 0;line-height:1.5}
.stgout{margin-top:28px}.stgsw1{margin-top:14px}.stghubs{margin-top:20px}   /* #2891 首页：头像卡 → 切换账号 → 六项，各隔一截 */.stgend{text-align:center;padding-top:18px}
.stg .msver{padding:6px 0 4px}
.stgol{margin:4px 0 12px;padding-left:22px;line-height:1.7}.stgol li{margin:2px 0}   /* #2890 通知权限说明页的分步 */
.stgver a{color:inherit;text-decoration:underline;text-underline-offset:2px}.stgver small{display:block;margin-top:4px;font-size:.85em;opacity:.85}   /* #2888 底部两行：第二行「技术支持」小一号 */
.stgsep2{height:1px;background:var(--line);margin:18px 0}
@media (max-width:759px),(orientation:portrait) and (pointer:coarse) and (max-width:1100px){
 .stgr{font-size:17px;min-height:54px}.stgx{min-height:54px}.stgv{font-size:16px}.stgh{font-size:14px}.stgft{font-size:14px}.stgtb{font-size:16px}
 .stghd>b{font-size:18px}.stgbk{font-size:17px}.stgnm b{font-size:21px}.stgnm small{font-size:15px}.stgpl{font-size:14px}
}
.pcard{display:flex;flex-direction:column;align-items:center;gap:6px;padding:8px 0 14px;text-align:center}
.pcard .av{width:72px;height:72px;font-size:20px;border-radius:10px}
.pcard b{font-size:16px;font-weight:600}.pcard small{font-size:12px;color:var(--sub)}
.plink{background:none;border:0;padding:0;color:var(--link);font-size:12px;cursor:pointer}
.pquick{display:flex;gap:10px;margin:2px 0 12px}.pquick button{flex:1 1 0;min-width:0;display:flex;flex-direction:column;align-items:center;gap:6px;padding:12px 6px;border:1px solid var(--line);border-radius:12px;background:var(--bubble);color:var(--text);font:inherit;font-size:13px;cursor:pointer}.pquick i{font-style:normal;font-size:20px;line-height:22px;height:22px;display:flex;align-items:center}.pquick svg{width:20px;height:20px}.pgroup{margin:4px 0 6px;padding:0 12px;border:1px solid var(--line);border-radius:12px;background:var(--bubble)}.pgroup .prow2:first-child{border-top:0}details.pbg>summary{cursor:pointer;font-size:14px;color:var(--text);list-style:none;display:flex;justify-content:space-between}details.pbg>summary::after{content:'›';color:var(--sub)}details.pbg[open]>summary::after{transform:rotate(90deg)}details.pbg>summary+div{margin-top:10px}
.ppwx{display:flex;flex-direction:column;width:100%;min-width:0}.ppwx>.pph{width:100%}.ppfeedl{font-size:12px;color:var(--sub);margin:8px 2px 6px}.ppfeed{position:relative;border-radius:10px;overflow:hidden;background:var(--u-media);margin-bottom:6px}.ppfeed img{display:block;width:100%;aspect-ratio:2.35/1;object-fit:cover;cursor:zoom-in}.ppfeed .ppfeedt{position:absolute;left:0;right:0;bottom:0;padding:22px 12px 10px;background:linear-gradient(transparent,rgba(0,0,0,.75));color:var(--u-on-color);font-size:15px;font-weight:600;line-height:1.35}.ppfeed.none{background:none;border:1px dashed var(--u-red);color:var(--u-red);padding:14px;font-size:13px}
details.revnote{margin:6px 0 4px}details.revnote>summary{cursor:pointer;font-size:13px;color:var(--sub);list-style:none}details.revnote>summary::after{content:' ›'}details.revnote[open]>summary::after{content:' ⌄'}details.revnote>div{margin-top:6px;white-space:pre-wrap}.revbtns{margin:10px 0 6px}
.av.k-sys{background:#5B6B86;color:var(--u-on-color);display:flex;align-items:center;justify-content:center}.av.k-sys svg{width:58%;height:58%}
.pdanger{width:100%;margin-top:16px;height:38px;border:0;border-radius:6px;background:var(--chip);color:var(--red);font-size:14px;cursor:pointer}
.ss.pin{background:var(--pinbg,var(--hover))}
/* 会话列表每行之间一道虚线（老板 b:10 #24383 / 秘书 #24385，和微信不一样）：细、低对比，亮暗各一档；从头像下面那条边开始到右边、左右都留一点空；
   画在「下一行的顶上」，所以最后一行下面没有；置顶那块和普通会话交界处不画（照旧靠置顶底色分开） */
:root{--sepd:rgba(0,0,0,.09);--pinbg:#FBFBFB}:root[data-theme="dark"]{--sepd:rgba(255,255,255,.12);--pinbg:var(--hover)}
#tabs .ss{position:relative}
#tabs .ss+.ss::before{content:"";position:absolute;top:0;left:14px;right:14px;border-top:1px dashed var(--sepd);pointer-events:none}
#tabs .ss.pin+.ss:not(.pin)::before{display:none}
/* ---- 顶部图标栏 + 学习（#2513，老板 b:10 #33945 #33948）---- */
.mhd .mhic.mhl{display:flex;justify-content:flex-start;grid-column:1}   /* 老板 b:10 #37696：左边「+」「搜索」，右边「⋯ 更多」；电脑上这一格藏起来，用下面搜索栏里的「+」（排到搜索框左边）和右边的「⋯」 */
#appmore.on{color:var(--accent)}
@media (min-width:1101px),(min-width:760px) and (orientation:landscape),(min-width:760px) and (pointer:fine){.mhd .mhic.mhl{margin:8px 8px 0 10px}#appmore{width:34px;height:30px;border:0;background:none;color:var(--sub);display:flex;align-items:center;justify-content:center;border-radius:8px;cursor:pointer;padding:0}#appmore:hover{background:var(--hover);color:var(--text)}#appmore.on{color:var(--accent)}#appmore svg{width:20px;height:20px}.mhd .mhic.mhl{display:none}.mhd .mhic:not(.mhl){display:flex;justify-content:flex-end;grid-column:3;margin:8px 10px 0 8px}.sbar #newg{order:-1;margin:0 6px 0 0}}
.appbar{display:flex;gap:6px;overflow-x:auto;padding:4px 12px 8px;scrollbar-width:none;-webkit-overflow-scrolling:touch}.appbar::-webkit-scrollbar{display:none}
.appi{flex:0 0 auto;width:60px;display:flex;flex-direction:column;align-items:center;gap:4px;border:0;background:transparent;color:var(--text);cursor:pointer;padding:2px 0;font-family:inherit}
.appi .apic{width:44px;height:44px;border-radius:12px;background:var(--chip);display:flex;align-items:center;justify-content:center}.appi .apic .lu{width:23px;height:23px}
.appi .apl{font-size:11.5px;line-height:1.2;color:var(--sub);max-width:60px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.appi.on .apic,.appi:active .apic{color:var(--accent)}
body.m-learn .side,body.m-learn .chat{display:none!important}
body.m-learn #learnv{display:flex;flex:1;min-height:0}
body.m-kb .side,body.m-kb .chat{display:none!important}
body.m-kb #kbv{display:flex;flex:1;min-height:0}
body.m-html .side,body.m-html .chat{display:none!important}
body.m-html #hvv{display:flex;flex:1;min-height:0}
body.m-plg .side,body.m-plg .chat{display:none!important}
body.m-plg #plgv{display:flex;flex:1;min-height:0}
/* 控制台 / 应用中心（#2668，老板 #35651 #35661 #35676 #35678）：底栏原「客户」那一格；卡片四块，每张标类型 */
body.m-ctc .side,body.m-ctc .chat{display:none!important}
body.m-ctc #ctcv{display:flex;flex:1;min-height:0}
.noaibar{background:var(--field);border-left:3px solid var(--accent,#a8791f);border-radius:8px;padding:9px 12px;margin:4px 0 6px;font-size:13.5px;line-height:1.6;color:var(--text)}
.ctcg{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;margin-top:6px}
.ctcc{display:flex;flex-direction:column;align-items:flex-start;gap:4px;text-align:left;padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--field);color:var(--text);font:inherit;cursor:pointer;min-width:0}
.ctcc:hover{border-color:var(--accent)}.ctcc.off{opacity:.55;cursor:default}.ctcc.off:hover{border-color:var(--line)}
.ctcc .ctci{width:34px;height:34px;border-radius:9px;display:flex;align-items:center;justify-content:center;background:var(--hover);color:var(--accent)}.ctcc .ctci svg{width:20px;height:20px}
.ctcc b{font-size:14px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ctcc small{font-size:12px;color:var(--sub);line-height:1.4;max-width:100%;overflow-wrap:anywhere}
.ctct{font-size:11px;line-height:1;padding:3px 6px;border-radius:5px;border:1px solid currentColor;white-space:nowrap}.ctct.app{color:var(--accent)}.ctct.mcp{color:var(--sub)}.ctct.conn{color:var(--text)}
.ctcst{font-size:11.5px;color:var(--accent)}
.ctcleg{font-size:12px;color:var(--sub);line-height:1.7;margin-top:18px}
/* 控制台 2.0（#2762）→ #2862 改版：横幅 / 常用（56px 实色圆角图标，一行 4 个）/ 全部应用（分类横滑 + 同样的图标格）/ 更多（档位用量 · 我的 MCP 连接 · 设置行）/ 编辑底栏 / 添加常用
   颜色全是自己的：横幅 = 深蓝（--send）→ 金（--accent）渐变；图标底色 --cw0…7（金 / 深蓝 / 青 / 石板蓝 / 陶土 / 橄榄 / 梅紫 / 石墨），亮暗两套 */
:root{--cw0:#B8872B;--cw1:#1E2A44;--cw2:#2F7D6D;--cw3:#55668F;--cw4:#B4583C;--cw5:#6B7C38;--cw6:#7A4E7E;--cw7:#4A5560;--cwbtn:#FFFFFF;--cwbtx:#1E2A44}
:root[data-theme="dark"]{--cw0:#C49A45;--cw1:#3A4A72;--cw2:#3B8A7A;--cw3:#6676A2;--cw4:#B5674D;--cw5:#7A8B46;--cw6:#8A5E8E;--cw7:#5D6874;--cwbtn:#F3EAD6;--cwbtx:#1E2A44}
.cwwrap{width:100%;max-width:760px;margin:0 auto}
#ctcv .cwhd h1{font-size:20px}
.cwsrch{display:flex;align-items:center;gap:8px;margin:0 0 10px}.cwsrch input{flex:1;min-width:0;height:40px;box-sizing:border-box;border:1px solid var(--line);border-radius:10px;background:var(--field);color:var(--text);font:inherit;font-size:15px;padding:0 12px;outline:none}.cwsrch input:focus{border-color:var(--accent)}
.cwbn{position:relative;display:flex;flex-direction:column;justify-content:space-between;align-items:flex-start;gap:14px;min-height:140px;box-sizing:border-box;padding:20px 18px 18px;border-radius:18px;background:linear-gradient(135deg,var(--send) 0%,var(--cw3) 58%,var(--accent) 100%);color:var(--u-on-color);margin:2px 0 4px;overflow:hidden}
.cwbt{font-size:18px;font-weight:600;line-height:1.45;max-width:440px}
.cwbb{border:0;border-radius:18px;padding:8px 18px;background:var(--cwbtn);color:var(--cwbtx);font:inherit;font-size:14px;font-weight:600;cursor:pointer}.cwbb:hover{opacity:.9}
.cwdots{position:absolute;right:16px;bottom:14px;display:flex;gap:5px}.cwdots i{display:block;width:6px;height:6px;border-radius:3px;background:rgba(255,255,255,.45)}.cwdots i.on{width:14px;background:#fff}
.cwsec{font-size:16px;font-weight:600;color:var(--text);margin:20px 2px 10px}
.cwtip{position:relative;display:flex;align-items:flex-start;gap:8px;background:var(--send);color:var(--u-on-color);border-radius:12px;padding:10px 8px 10px 12px;font-size:13px;line-height:1.5;margin:-2px 0 12px}
.cwtip::after{content:"";position:absolute;left:28px;bottom:-6px;width:12px;height:12px;background:var(--send);transform:rotate(45deg)}
.cwtip span{flex:1;min-width:0}.cwtipx{flex:none;width:24px;height:24px;border:0;border-radius:12px;background:transparent;color:var(--u-on-color);display:flex;align-items:center;justify-content:center;cursor:pointer;padding:0;opacity:.8}.cwtipx svg{width:16px;height:16px}
.c2sh{display:flex;align-items:center;justify-content:space-between;gap:8px}
.c2lk{border:0;background:transparent;color:var(--accent);font:inherit;font-size:13px;font-weight:500;cursor:pointer;padding:4px 2px}
.c2ag{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:12px 4px}
.c2a{position:relative;min-width:0;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
.c2ab{width:100%;display:flex;flex-direction:column;align-items:center;gap:7px;border:0;background:transparent;color:var(--text);font:inherit;cursor:pointer;padding:6px 2px 4px;border-radius:12px}
.c2ab:hover{background:var(--hover)}.c2ab.off .c2ai{opacity:.45}
.c2ai{position:relative;flex:none;width:56px;height:56px;border-radius:16px;display:flex;align-items:center;justify-content:center;color:var(--u-on-color);background:var(--cw7)}.c2ai svg{width:28px;height:28px}
.cwc0{background:var(--cw0)}.cwc1{background:var(--cw1)}.cwc2{background:var(--cw2)}.cwc3{background:var(--cw3)}.cwc4{background:var(--cw4)}.cwc5{background:var(--cw5)}.cwc6{background:var(--cw6)}.cwc7{background:var(--cw7)}
.c2ai.cwcx{background:transparent;border:1.5px dashed var(--fline);color:var(--sub);box-sizing:border-box}
.c2dot{display:block;width:11px;height:11px;border-radius:50%;border:2px solid var(--bg)}.c2ai .c2dot{position:absolute;top:-3px;right:-3px}
.c2cb{position:absolute;top:0;left:calc(50% + 17px);width:18px;height:18px;border-radius:9px;background:var(--accent);color:var(--u-on-color);display:flex;align-items:center;justify-content:center;box-shadow:0 0 0 2px var(--chat);pointer-events:none;font-style:normal}.c2cb svg{width:10px;height:10px}   /* #2891 客户工作台才能用的格子：右上角小金角标 */
.c2dot.g{background:#22C55E}.c2dot.y{background:#EAB308}.c2dot.r{background:var(--red)}
.cwplus{position:absolute;right:-5px;bottom:-5px;width:20px;height:20px;box-sizing:border-box;border-radius:10px;background:var(--pop);border:1px solid var(--line);color:var(--accent);font-style:normal;font-size:16px;font-weight:700;line-height:17px;text-align:center}
.c2al{font-size:13px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.c2ab .c2st{max-width:100%;text-align:center;line-height:1.3;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;margin-top:-4px}
.c2hd{padding:10px 12px;border:1px solid var(--line);border-radius:12px;background:var(--field);margin:0 0 4px}
.c2hd b{font-size:15px;color:var(--text);overflow-wrap:anywhere}.c2hd .c2pl{font-size:13px;color:var(--accent);margin-left:8px}.c2hd .c2us{font-size:13px;color:var(--sub);margin-top:4px;line-height:1.6}
.cwdt>summary{list-style:none}.cwdt>summary::-webkit-details-marker{display:none}.cwdt[open]>summary .c2go{transform:rotate(90deg)}.cwdb{padding:0 0 6px 44px}
.cwmi{flex:none;width:30px;height:30px;border-radius:9px;display:flex;align-items:center;justify-content:center;color:var(--u-on-color)}.cwmi svg{width:17px;height:17px}
#ctcb>*{flex-shrink:0}
.c2chips{display:flex;gap:8px;overflow-x:auto;padding:2px 0 10px;scrollbar-width:none;-webkit-overflow-scrolling:touch}.c2chips::-webkit-scrollbar{display:none}
.c2chip{flex:none;border:1px solid var(--line);background:transparent;color:var(--text);border-radius:16px;padding:5px 12px;font:inherit;font-size:13px;cursor:pointer;white-space:nowrap}.c2chip.on{background:var(--accent);border-color:var(--accent);color:var(--u-on-color)}
.c2st{font-size:12px;color:var(--sub)}
.c2m{display:flex;align-items:center;gap:10px;width:100%;padding:10px 4px;border:0;border-bottom:1px solid var(--line);background:transparent;color:var(--text);font:inherit;text-align:left;cursor:pointer}
.c2m:hover{background:var(--hover)}.c2m .c2dot{flex:none;border:0}
.c2m .c2mn{flex:1;min-width:0}.c2m b{display:block;font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.c2m small{display:block;font-size:12px;color:var(--sub);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.c2m small.c2st{color:var(--accent)}
.c2go{flex:none;margin-left:auto;color:var(--sub);font-size:18px}
.c2row{display:flex;align-items:center;gap:12px;width:100%;padding:10px 4px;border:0;border-bottom:1px solid var(--line);background:transparent;color:var(--text);font:inherit;font-size:14px;text-align:left;cursor:pointer}
.c2row:hover{background:var(--hover)}.c2row .c2rt{flex:1;min-width:0}
.c2ri{flex:none;width:32px;height:32px;border-radius:8px;background:var(--chip);display:flex;align-items:center;justify-content:center;color:var(--text)}.c2ri svg{width:18px;height:18px}
.c2re{max-width:440px;width:100%}.askb.c2re{background:var(--pop);-webkit-backdrop-filter:none;backdrop-filter:none}.c2rel{max-height:56vh;overflow-y:auto;margin-top:8px}
.c2rer{display:flex;align-items:center;gap:8px;padding:8px 2px;border-bottom:1px solid var(--line);font-size:14px}.c2rer .c2rn{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.c2rer.fix{color:var(--sub)}.c2rer small{color:var(--sub)}
.c2rer input{width:20px;height:20px;flex:none}
.c2ra{display:none}
/* 「对话」列表顶上的「全部 / 客户」（#2668：客户消息并进对话） */
.custav{display:flex;align-items:center;justify-content:center;background:var(--accent);color:var(--u-on-color)}.custav svg{width:22px;height:22px}
.sbxh{padding:0 14px 6px;font-size:13px}.custcap{padding:0 14px 6px;font-size:13px;color:var(--sub);line-height:1.4}.custbk{display:flex;align-items:center;padding:6px 6px 2px}.custbk button{border:0;background:transparent;color:var(--accent);font:inherit;font-size:15px;padding:4px 6px;cursor:pointer}
.ctcvt{font-size:10.5px;color:var(--accent);border:1px solid var(--accent);border-radius:4px;padding:0 4px;margin-left:5px;font-weight:400;vertical-align:1px}
.plgb{flex:1;min-height:0;overflow:auto;padding:12px 14px 24px;display:flex;flex-direction:column}.plgb.run{padding:0;overflow:hidden}
.plgf{flex:1;width:100%;min-height:0;border:0;display:block;background:var(--bg)}
/* #3113 逐字稿提词全屏：插件页铺满整屏（盖住顶栏和底栏），刘海 / 底部横条那两条留出来 */
body.ts3113full .plgf{position:fixed;left:0;right:0;top:env(safe-area-inset-top,0px);width:100%;height:calc(100% - env(safe-area-inset-top,0px) - env(safe-area-inset-bottom,0px));z-index:9990}
body.ts3113full #plgv>header,body.ts3113full .rail{visibility:hidden}
/* #3113 逐字稿「同步」：传视频的整页（父页面里，插件沙盒连不了网）。颜色 / 尺寸只用设计规范变量 */
#ts3113u{position:fixed;inset:0;z-index:9995;background:var(--bg);display:flex;flex-direction:column;padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px)}
#ts3113u .tsuh{flex:none;min-height:var(--u-bar,44px);display:flex;align-items:center;gap:8px;padding:0 12px;background:var(--list);border-bottom:1px solid var(--line)}
#ts3113u .tsuh b{flex:1;text-align:center;font-size:17px;margin-right:44px}
#ts3113u .tsuh button{background:transparent;border:0;font-size:22px;color:var(--text);width:44px;min-height:var(--u-h-sm);cursor:pointer}
#ts3113u .tsus{flex:1;min-height:0;overflow:auto;padding-bottom:12px}
#ts3113u .tsuhint{margin:12px 16px;padding:10px 12px;border-radius:var(--u-r-input);background:var(--u-gold-bg);color:var(--u-gold-tx);font-size:13px;line-height:1.5}
#ts3113u .tsur{background:var(--list);margin:0 16px 10px;border-radius:var(--u-r-card);padding:12px;display:flex;gap:12px;border:1px solid var(--line)}
#ts3113u .tsuth{width:56px;height:56px;border-radius:var(--u-r-btn-sm);background:var(--u-media);color:var(--u-on-color);flex:none;display:flex;align-items:center;justify-content:center;opacity:.85}
#ts3113u .tsuth svg{width:22px;height:22px}
#ts3113u .tsub{flex:1;min-width:0}
#ts3113u .tsut{font-size:15px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#ts3113u .tsusub{font-size:12px;color:var(--u-sub2);margin:3px 0 8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#ts3113u .tsup{height:5px;border-radius:3px;background:var(--line);position:relative;overflow:hidden}
#ts3113u .tsup i{position:absolute;left:0;top:0;bottom:0;border-radius:3px;background:var(--u-gold)}
#ts3113u .tsuf{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-top:6px}
#ts3113u .tsuc{font-size:12px;font-weight:600;padding:2px 8px;border-radius:var(--u-r-tag);background:var(--chip);color:var(--sub)}
#ts3113u .tsuc.ing,#ts3113u .tsuc.done{background:var(--u-gold-bg);color:var(--u-gold-tx)}
#ts3113u .tsuc.fail{background:var(--u-red-bg);color:var(--u-red)}
#ts3113u .tsusz{font-size:12px;color:var(--u-time)}
#ts3113u .tsul{font-size:12px;color:var(--u-gold-tx);margin-top:6px;background:transparent;border:0;padding:0;cursor:pointer;text-align:left}
#ts3113u .tsuft{flex:none;padding:12px 16px}
#ts3113u .tsuft .ubtn{width:100%}
/* #3113 选视频（老板 b:10 #39704）：input 视觉隐藏但留在页面里（不用 display:none），选完 / 取消前不移除 */
.ts3113pick{position:fixed;left:0;top:0;width:1px;height:1px;opacity:0;pointer-events:none;overflow:hidden}
#ts3113u .tsuerr{margin:12px 16px;padding:10px 12px;border-radius:var(--u-r-input);background:var(--u-red-bg);color:var(--u-red);font-size:13px;line-height:1.5;word-break:break-word}
#ts3113u .tsusc{display:block;margin-top:8px}
#ts3113u .tsuerr .tsul{color:var(--u-red);margin-left:6px;text-decoration:underline}
#ts3113u .sy3124m{display:flex;align-items:center;gap:8px;width:calc(100% - 32px);margin:12px 16px 0;padding:12px;background:var(--list);border:1px solid var(--line);border-radius:var(--u-r-card);color:var(--text);font-size:15px;text-align:left;cursor:pointer}
#ts3113u .sy3124m span{flex:1}
#ts3113u .sy3124m b{font-weight:600;color:var(--u-gold-tx)}
#ts3113u .sy3124m i{font-style:normal;color:var(--sub)}
#ts3113u .sy3124s{margin:6px 16px 0;font-size:12px;line-height:1.5;color:var(--u-sub2)}
.plgs{font-size:12.5px;color:var(--sub);margin:18px 2px 4px;font-weight:600}
.plgr{display:flex;align-items:center;gap:8px;padding:10px 2px;border-bottom:1px solid var(--line)}.plgr .plgn{flex:1;min-width:0}
.plgr b{display:block;font-size:14.5px;font-weight:600;line-height:1.4}.plgr small{display:block;color:var(--sub);font-size:12px;margin-top:2px;line-height:1.45}
.plgr .lrbtn{flex:none}.plgr .plgic{flex:none;width:22px;height:22px;color:var(--sub)}.plgr .plgic svg{width:22px;height:22px}
.plgw{background:var(--hover);border-radius:10px;padding:10px 12px;margin:8px 0 2px;font-size:13px;line-height:1.55}.plgw.warn{color:var(--accent)}
.plgk{border:1px solid var(--line);border-radius:12px;padding:12px 14px;margin:10px 0}.plgk b{font-size:15px}
.agsk{width:100%;max-width:680px;margin:0 auto;box-sizing:border-box;padding:4px 16px 28px}.agsr{align-items:flex-start;padding:6px 0}.agsr input{margin-top:3px}.agsr span{display:flex;flex-direction:column;gap:2px}.agsr small{color:var(--sub);font-size:12.5px;line-height:1.45}.agssub{margin:0 0 6px 24px}.agsta{min-height:120px;resize:vertical;line-height:1.5}.agsform{margin-top:8px}.agsmiss{margin-bottom:6px}.agsk .hint{font-size:12.5px;color:var(--sub);line-height:1.5;margin:6px 0;padding:0;text-align:left}
.cnfi{display:block;width:100%;box-sizing:border-box;margin-top:8px;padding:9px 10px;border:1px solid var(--line);border-radius:10px;background:var(--card,var(--bg));color:var(--fg);font:inherit;font-size:16px}.cnfack{display:flex;gap:6px;align-items:center;margin-top:10px;font-size:13px}
.cnfred{color:var(--u-red);font-weight:600}.cnft{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid var(--line)}.cnft:last-of-type{border-bottom:0}.cnftn{flex:1;min-width:0}.cnftn small{color:var(--sub)}.cnftd{display:block;font-size:12px;line-height:1.45;word-break:break-word}.cnft label{flex:none;display:flex;gap:4px;align-items:center;font-size:13px}.cnfm{flex:none;display:flex;flex-wrap:wrap;gap:4px 10px;justify-content:flex-end;max-width:58%}.cfmm.cnfsum{text-align:left;font-size:14px}
.plgk label{display:flex;gap:8px;align-items:flex-start;padding:7px 0;font-size:13.5px;line-height:1.45;cursor:pointer}.plgk label input{margin-top:3px}
.plgk .plgbt{display:flex;gap:8px;justify-content:flex-end;margin-top:10px}
.plgrgb .plgbt{display:flex;justify-content:flex-end;margin-top:6px}
.plstp{display:inline-block;margin-left:6px;padding:0 6px;border:1px solid var(--line);border-radius:6px;font-size:11px;font-weight:500;line-height:1.6;color:var(--sub);vertical-align:1px}
.plsbar{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 2px}.plsprc{display:flex;flex-wrap:wrap;align-items:center;gap:4px 14px;margin:8px 0}.plsprc label{display:flex;gap:6px;align-items:center;padding:4px 0;font-size:13.5px}.plsprc .cnfi{margin-top:0}
.plssh .plgr:last-of-type{border-bottom:0}.plsrvb{max-width:860px;width:94vw}.plsrvpre{max-height:60vh;overflow:auto;white-space:pre-wrap;word-break:break-all;font-size:12px;line-height:1.5;text-align:left;background:var(--hover);padding:10px;border-radius:8px;margin:8px 0}
.hvi{display:block;width:100%;text-align:left;border:0;border-bottom:1px solid var(--line);background:transparent;color:var(--text);padding:10px 10px;font:inherit;cursor:pointer}.hvi:hover{background:var(--hover)}.hvi.on{background:var(--hover);color:var(--accent)}
.hvi b{display:block;font-size:14.5px;font-weight:600;line-height:1.4}.hvi small{display:block;color:var(--sub);font-size:12px;margin-top:2px}
.hvtabs{display:flex;gap:6px;overflow-x:auto;padding:8px 10px;position:sticky;top:0;z-index:2;background:var(--list,var(--bg));border-bottom:1px solid var(--line);scrollbar-width:none}.hvtabs::-webkit-scrollbar{display:none}.hvtab{flex:0 0 auto;border:1px solid var(--line);background:transparent;color:var(--text);border-radius:14px;padding:4px 11px;font-size:13px}.hvtab small{color:var(--sub);font-size:11px;margin-left:2px}.hvtab.on{background:var(--accent);border-color:var(--accent);color:var(--u-on-color)}.hvtab.on small{color:var(--u-on-color);opacity:.85}
.hvc{padding:12px 10px 4px;font-size:12.5px;color:var(--sub)}
.dpc{border-style:dashed}.cyc{display:flex;gap:10px;align-items:flex-start;min-width:220px;max-width:340px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:var(--bubble);cursor:pointer;text-align:left}.cyc:hover{border-color:var(--accent)}
.cyc>.lu{width:22px;height:22px;flex:0 0 auto;color:var(--accent);margin-top:2px}.cyx{min-width:0}.cyx b{display:block;font-size:14.5px;line-height:1.35;color:var(--text)}.cyx small{display:block;color:var(--text);opacity:.72;font-size:12px;margin-top:2px}
.cyx p{margin:6px 0 0;font-size:13px;line-height:1.5;color:var(--sub);display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.kbdh .lrbtn{flex:0 0 auto}
.kbs{padding:8px 12px;border-bottom:1px solid var(--line);flex:0 0 auto}.kbs input{width:100%;box-sizing:border-box;border:1px solid var(--line);background:var(--bubble);color:var(--text);border-radius:10px;padding:8px 12px;font:inherit;font-size:14px;outline:none}.kbs input:focus{border-color:var(--accent)}
.kbb{flex:1;min-height:0;display:grid;grid-template-columns:320px minmax(0,1fr)}
.kbn{min-height:0;overflow-y:auto;padding:8px 6px;border-right:1px solid var(--line)}.kbd{min-height:0;display:flex;flex-direction:column}
.kbi{display:flex;align-items:center;gap:7px;width:100%;text-align:left;border:0;background:transparent;color:var(--text);border-radius:8px;padding:7px 8px;font:inherit;font-size:13.5px;line-height:1.35;cursor:pointer}.kbi:hover{background:var(--hover)}.kbi.on{background:var(--hover);color:var(--accent)}
.kbi .lu{width:16px;height:16px;flex:0 0 auto;color:var(--sub)}.kbi.dir .lu{color:var(--accent)}.kbi span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kbi small{flex:0 0 auto;color:var(--sub);font-size:11.5px}
.kbcr{display:flex;flex-wrap:wrap;gap:2px;align-items:center;padding:2px 6px 8px;font-size:12.5px;color:var(--sub)}.kbcr button{border:0;background:transparent;color:var(--accent);font:inherit;padding:2px 4px;cursor:pointer}
.kbr{display:block;width:100%;text-align:left;border:0;border-bottom:1px solid var(--line);background:transparent;color:var(--text);padding:9px 8px;font:inherit;cursor:pointer}.kbr:hover{background:var(--hover)}.kbr b{display:block;font-size:14px;font-weight:600}.kbr small{display:block;color:var(--sub);font-size:11.5px;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kbr p{margin:4px 0 0;font-size:12.5px;color:var(--sub);line-height:1.5}
.kbdh{display:flex;align-items:center;gap:10px;padding:8px 12px;border-bottom:1px solid var(--line);flex:0 0 auto}.kbdh b{flex:1;min-width:0;font-size:14.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kbdh small{color:var(--sub);font-size:11.5px;white-space:nowrap}
.kbfr{flex:1;width:100%;min-height:0;border:0;display:block;background:#fff}
@media (max-width:760px){.kbb{display:block;overflow:hidden}.kbb>div{display:none;height:100%;border-right:0}.kbb[data-v="tree"]>.kbn{display:block}.kbb[data-v="doc"]>.kbd{display:flex}.kbi{padding:11px 10px;font-size:15px}.kbdh .kbbk{display:none}}
.lrb{flex:1;min-height:0;display:grid;grid-template-columns:240px minmax(0,1fr) minmax(0,1fr)}
.lrb>div{min-height:0;overflow-y:auto;padding:12px;border-right:1px solid var(--line)}.lrb>div:last-child{border-right:0}
.lrcat{display:block;width:100%;text-align:left;border:1px solid var(--line);background:var(--bubble);color:var(--text);border-radius:12px;padding:12px 14px;margin-bottom:8px;cursor:pointer;font-family:inherit}
.lrcat b{display:block;font-size:15px;font-weight:600}.lrcat small{display:block;margin-top:4px;color:var(--sub);font-size:12px}.lrcat.on{border-color:var(--accent)}
.lrh{font-size:13px;color:var(--sub);font-weight:600;margin:0 2px 8px}
.lri{display:flex;align-items:stretch;gap:6px;border-radius:10px;margin-bottom:4px}.lri.sel,.lri:hover{background:var(--hover)}
.lrplay{flex:1;min-width:0;display:flex;gap:10px;align-items:flex-start;text-align:left;border:0;background:transparent;color:var(--text);padding:10px 8px;cursor:pointer;font-family:inherit}
.lrn{flex:0 0 26px;height:26px;border-radius:50%;background:var(--chip);color:var(--sub);font-size:12px;display:flex;align-items:center;justify-content:center}.lrn .lu{width:15px;height:15px;color:var(--accent)}
.lri.cur .lrn{background:var(--accent);color:var(--u-on-color)}.lri.cur .lrn .lu{color:var(--u-on-color)}
.lrtt{flex:1;min-width:0}.lrtt b{display:block;font-size:14.5px;font-weight:500;line-height:1.4}.lrtt small{display:flex;align-items:center;gap:3px;flex-wrap:wrap;margin-top:3px;color:var(--sub);font-size:12px}.lrtt small .lu{width:12px;height:12px}
.lrbar{display:block;height:3px;border-radius:2px;background:var(--line);margin-top:6px;overflow:hidden}.lrbar i{display:block;height:100%;background:var(--accent)}
.lrtx{flex:0 0 auto;align-self:center;border:1px solid var(--line);background:transparent;color:var(--text);border-radius:8px;padding:5px 9px;font-size:12.5px;cursor:pointer;font-family:inherit;margin-right:6px}
.lrtxt{font-size:15px;line-height:1.85;white-space:pre-wrap;word-break:break-word;color:var(--text)}.lrtxt b{font-size:15.5px}
.lrtt2{font-size:16px;font-weight:600;margin:2px 0 10px}
.lplayer{display:none;flex:0 0 auto;background:var(--card,var(--list));border-top:1px solid var(--line);padding:8px 14px;z-index:60}
body.lpon .lplayer{display:block}body.lpon.lpmini .lplayer{display:none!important}
.lpfab{display:none;position:fixed;right:16px;bottom:calc(env(safe-area-inset-bottom,0px) + 76px);z-index:70;width:54px;height:54px;border-radius:50%;border:0;padding:0;cursor:pointer;color:var(--u-on-color);align-items:center;justify-content:center;
 background:radial-gradient(circle,var(--accent) 0 21px,transparent 22px),conic-gradient(var(--accent) var(--lpp,0deg),rgba(127,127,127,.35) 0);box-shadow:0 4px 14px rgba(0,0,0,.25)}
body.lpon.lpmini .lpfab{display:flex}.lpfab{touch-action:none;-webkit-user-select:none;user-select:none;transition:left .18s,right .18s,top .18s}.lpfab.drag{transition:none;opacity:.85}.lpfab .lu{width:22px;height:22px}body.inchat .lpfab{bottom:calc(env(safe-area-inset-bottom,0px) + 132px)}body.kb .lpfab{display:none!important}
.lpx2 .lu{width:19px;height:19px}
.lrtool{display:flex;align-items:center;gap:8px;margin:0 2px 8px}.lrtool .lrh{flex:1;margin:0;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lrbtn{flex:0 0 auto;display:flex;align-items:center;gap:4px;border:1px solid var(--line);background:transparent;color:var(--text);border-radius:8px;padding:5px 10px;font-size:12.5px;cursor:pointer;font-family:inherit}.lrbtn .lu{width:15px;height:15px}.lrbtn:disabled{opacity:.5}
.lrup{font-size:12.5px;color:var(--accent);margin:0 2px 8px}
.lrib{flex:0 0 auto;align-self:center;width:32px;height:32px;border:0;background:transparent;color:var(--sub);border-radius:8px;display:flex;align-items:center;justify-content:center;cursor:pointer;padding:0}.lrib .lu{width:18px;height:18px}.lrib:hover{background:var(--hover);color:var(--text)}.lrib.on{color:var(--accent)}.lrib:disabled{opacity:.3;cursor:default}
.lrmv{display:flex;align-items:center;margin-right:4px}
.lrdg{cursor:grab;touch-action:none;user-select:none;-webkit-user-select:none}.lri.drag{position:relative;z-index:5;background:var(--bubble);box-shadow:0 6px 18px rgba(0,0,0,.18);border-radius:10px;transition:none}
.plpk{max-height:46vh;overflow-y:auto;margin:10px 0 8px;text-align:left}.plpk .plck{width:100%;box-sizing:border-box;display:flex!important;align-items:center;gap:10px;padding:9px 4px;border-bottom:1px solid var(--line);cursor:pointer}.plck span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.plck small{color:var(--sub)}.plck input{width:18px;height:18px;accent-color:var(--accent)}
.lrrd{display:flex;flex-direction:column;height:100%;min-height:0}.lrrdh{display:flex;align-items:center;gap:10px;padding:8px 10px;border-bottom:1px solid var(--line);flex:0 0 auto}.lrrdh b{flex:1;min-width:0;font-size:14.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lrfr{flex:1;width:100%;min-height:0;border:0;display:block;background:var(--bg)}
.lrvw{flex:1;min-height:0;display:flex;align-items:center;justify-content:center;background:var(--u-media)}.lrvw video{width:100%;height:100%;max-height:100%;object-fit:contain;background:var(--u-media)}
.lrvb{display:flex;gap:8px;justify-content:center;padding:10px;flex:0 0 auto}
.lrb[data-v="read"],.lrb[data-v="video"]{display:flex!important}.lrb[data-v="read"]>.lrc,.lrb[data-v="read"]>.lrl,.lrb[data-v="video"]>.lrc,.lrb[data-v="video"]>.lrl{display:none!important}
.lrb[data-v="read"]>.lrt,.lrb[data-v="video"]>.lrt{display:block!important;flex:1;padding:0;overflow:hidden;height:100%}.lrmy b{display:flex;align-items:center;gap:6px}.lrmy b .lu{width:17px;height:17px;color:var(--accent)}
.lp1{display:flex;align-items:center;gap:8px}.lp1 .lpt{flex:1;min-width:0;font-size:13.5px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer}
.lp2{display:flex;align-items:center;gap:6px;margin-top:4px}.lp2 input{flex:1;min-width:0;accent-color:var(--accent);height:24px}
.lpb{flex:0 0 auto;width:38px;height:38px;border:0;background:transparent;color:var(--text);border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;padding:0;position:relative}.lpb .lu{width:22px;height:22px}
.lpb.big{width:44px;height:44px;background:var(--accent);color:var(--u-on-color)}.lpb.big .lu{width:22px;height:22px}
.lpb small{position:absolute;font-size:8.5px;font-weight:700;top:50%;left:50%;transform:translate(-50%,-38%)}
.lprate{flex:0 0 auto;border:1px solid var(--line);background:transparent;color:var(--text);border-radius:8px;height:28px;min-width:48px;font-size:12.5px;cursor:pointer;font-family:inherit}
.lptm{font-size:11.5px;color:var(--sub);font-variant-numeric:tabular-nums;min-width:38px;text-align:center}
.lpx{width:30px;height:30px}.lpx .lu{width:17px;height:17px;color:var(--sub)}
@media (min-width:1101px),(min-width:760px) and (orientation:landscape),(min-width:760px) and (pointer:fine){
 .lplayer{position:fixed;left:0;right:0;bottom:0;height:96px;box-sizing:border-box;padding:10px 24px}
 .lplayer>div{max-width:900px;margin-left:auto;margin-right:auto}
 body.lpon:not(.lpmini) #app{box-sizing:border-box;padding-bottom:96px}
 .lpfab{right:28px;bottom:120px}body.inchat .lpfab{bottom:120px}
}
@media (max-width:759px),(orientation:portrait) and (pointer:coarse) and (max-width:1100px){
 .lplayer{order:8}body.kb .lplayer{display:none!important}
 .lrb{display:block;overflow-y:auto}.lrb>div{border-right:0;overflow:visible;display:none}
 .lrb[data-v="cats"]>.lrc,.lrb[data-v="list"]>.lrl,.lrb[data-v="text"]>.lrt{display:block}
 .lrcat{padding:14px 16px}.lrcat b{font-size:16px}.lrl .lrh{visibility:hidden}
}
/* ---- 全员待办 ---- */
body.m-todo .side,body.m-todo .chat{display:none!important}
body.m-todo #todov{display:flex;flex:1;min-height:0}
.tdgrp{font-size:12px;color:var(--sub);font-weight:600;margin:16px 0 6px}.tdgrp:first-child{margin-top:0}
.tdp{background:var(--bubble);border-radius:10px;padding:10px 12px;margin-bottom:8px}
.tdp .pn{display:flex;align-items:center;gap:8px;cursor:pointer}
.tdp .pn b{font-size:14px;font-weight:600;color:var(--text)}.tdp .pn small{color:var(--sub);font-size:12px}.tdp .pn small em{font-style:normal;color:var(--red)}
.tdp .pn i{margin-left:auto;font-style:normal;font-size:12px;color:var(--link)}
.tdav{width:28px;height:28px;font-size:11px}
.tdp .cur{font-size:13px;color:var(--text);margin:6px 0 0 36px}.tdp .cur span{color:var(--sub)}
.tdbody{margin-top:8px}
.tdh{display:flex;gap:8px;margin-bottom:6px}
.tdh input{flex:1;min-width:0;height:34px;border:1px solid var(--line);border-radius:8px;background:var(--field);color:var(--text);padding:0 10px;font-family:inherit;font-size:14px}
.tdh button{height:34px;padding:0 14px;border:0;border-radius:8px;background:var(--accent);color:var(--u-on-color);font-size:13px;cursor:pointer}
.tdi{display:flex;align-items:flex-start;gap:8px;padding:8px 0;border-top:1px solid var(--line);font-size:14px;color:var(--text)}
.tdi .ck{flex:0 0 18px;height:18px;border:1.5px solid var(--sub);border-radius:5px;background:transparent;cursor:pointer;margin-top:2px;padding:0}
.tdi .ck:hover{border-color:var(--accent);background:var(--hover)}.tdi .ck0{flex:0 0 18px}
.tdi .tx{flex:1;min-width:0;overflow-wrap:anywhere}.tdi .tx small{display:block;color:var(--sub);font-size:12px;margin-top:2px}
.tdi.done .tx{color:var(--sub);text-decoration:line-through}
.tdi .st{flex:0 0 auto;font-size:11px;line-height:18px;padding:0 7px;border-radius:9px;background:var(--chip);color:var(--sub)}
.tdi .st.doing{background:var(--accent);color:var(--u-on-color)}.tdi .st.blocked{background:var(--red);color:var(--u-on-color)}
.tdi .ac{flex:0 0 auto;display:flex;flex-wrap:wrap;gap:2px}
.tdi .ac button{border:0;background:transparent;color:var(--sub);font-size:12px;cursor:pointer;padding:2px 5px;border-radius:4px;min-height:24px}
.tdi .ac button:hover{background:var(--hover);color:var(--text)}
.tdsec{font-size:11px;color:var(--sub);margin:12px 0 2px}.tdnone{font-size:13px;color:var(--sub);padding:6px 0}
@media (max-width:759px),(orientation:portrait) and (pointer:coarse) and (max-width:1100px){.tdi{flex-wrap:wrap}.tdi .ac{width:100%;padding-left:26px}.tdp .cur{margin-left:0}}
/* ---- 收藏 / 发现（朋友圈）：左边图标栏切换模式，中间和右边两栏换内容 ---- */
.fside,.favv{display:none}
body.m-fav .side,body.m-fav .chat,body.m-mom .side,body.m-mom .chat{display:none!important}
body.m-fav #fside,body.m-mom #dside{display:flex}
body.m-fav #favv,body.m-mom #momv,body.m-ops #opsv{display:flex}
body.m-ops .side,body.m-ops .chat{display:none!important}
.opsum{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:14px}
.opcard{flex:1 1 200px;background:var(--bubble);border-radius:8px;padding:12px 14px;display:flex;flex-direction:column}.opcard .opwho{white-space:nowrap!important;overflow:hidden;text-overflow:ellipsis}.opnum{display:flex;gap:18px;margin-top:auto;padding-top:6px}
.opcard b{font-size:22px;font-weight:600}.opcard small{display:block;color:var(--sub);font-size:12px;margin-top:2px}
.opbar{height:6px;border-radius:3px;background:var(--chip);margin-top:8px;overflow:hidden}.opbar i{display:block;height:100%;background:var(--accent)}
.opbar i.w{background:#E0A100}.opbar i.r{background:var(--red)}
.optab{width:100%;border-collapse:collapse;background:var(--bubble);border-radius:8px;overflow:hidden;font-size:13px}
.optab th{font-weight:500;color:var(--sub);font-size:12px;text-align:left;padding:8px 10px;border-bottom:1px solid var(--line)}
.optab td{padding:8px 10px;border-bottom:1px solid var(--line);vertical-align:middle}
.optab tr.bad td{background:var(--u-red-bg)}
.optab .who{display:flex;align-items:center;gap:8px}.optab .who .av{width:30px;height:30px;font-size:10px}
.ok{color:#1FA35A}.no{color:var(--red)}.zz2{color:#5B6B82}.dim{color:var(--sub)}
.optab .btn{height:26px;padding:0 8px;font-size:12px}
.fside{flex:0 0 var(--sidew,280px);flex-direction:column;background:var(--list);border-right:1px solid var(--line);min-width:0;position:relative}
.favv{flex:1;min-width:0;flex-direction:column;background:var(--chat)}
.fscroll{flex:1;overflow-y:auto;padding:16px 24px 30px;zoom:var(--fz)}
.fnote{margin:0 12px 8px;height:36px;border:0;border-radius:6px;background:var(--chip);color:var(--text);font-size:14px;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:6px}
.fnote svg{width:18px;height:18px}
.fcats{display:flex;flex-direction:column;padding-top:4px}
.fcat{display:flex;align-items:center;gap:10px;width:100%;padding:11px 16px;border:0;background:transparent;color:var(--text);font-size:14px;cursor:pointer;text-align:left}
.fcat:hover{background:var(--hover)}.fcat.on{background:var(--on);color:var(--ontx)}
.fcat svg{width:20px;height:20px;flex:0 0 auto}
.dh{font-size:16px;font-weight:600;padding:18px 16px 10px}
.fcard{position:relative;max-width:760px;margin:0 auto 12px;background:var(--bubble);border-radius:8px;padding:14px 16px 10px}
.fcard .fc{font-size:14.5px;line-height:1.65;white-space:pre-wrap;overflow-wrap:anywhere;max-height:13.2em;overflow:hidden}
.fcard .fc.open{max-height:none}
.fcard .fimgs{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.fcard .fimgs img{width:110px;height:110px;object-fit:cover;border-radius:4px;cursor:zoom-in}
.fcard .ff{display:flex;align-items:center;gap:10px;margin-top:10px;font-size:12px;color:var(--sub)}
/* 保存卡片底部（老板 b:10 #23596）：「来源 · 日期」一行；分类 / 标签 / 加标签 + 一排小图标一行，别再挤成一字一行 */
.fcard .ftt{font-weight:600;font-size:15px;margin-bottom:6px}
.fcard .fmeta{margin-top:10px;font-size:12px;color:var(--sub);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fcard .fbar{display:flex;align-items:center;flex-wrap:wrap;gap:6px;margin-top:8px}.fcard .fbar .sp{flex:1}
.fcard .ftag{font-size:12px;color:var(--link)}
.fuc.ghost,.fuc.add{display:inline-flex;align-items:center;gap:3px;border-style:dashed;color:var(--sub)}.fuc .lu{display:inline-block;flex:0 0 auto;width:13px;height:13px;margin:0}
.fcard .fic{display:inline-flex;gap:2px;flex:0 0 auto;white-space:nowrap}.fcard .fic button{width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;background:none;border:0;border-radius:8px;color:var(--sub);cursor:pointer;padding:0}
.fcard .fic button:hover{background:var(--hover);color:var(--text)}.fcard .fic button.dan{color:var(--red)}.fcard .fic .lu{width:17px;height:17px}
.fclist .fcl{display:flex;align-items:center;gap:8px;padding:8px 0;border-bottom:1px solid var(--line)}.fclist .fcl .sp{flex:1}
.fcard .ff .sp{flex:1}
.fcard .fa{display:none;gap:12px}.fcard:hover .fa{display:inline-flex}
@media (hover:none){.fcard .fa{display:inline-flex}}
.fa button{background:none;border:0;padding:0;color:var(--link);font-size:12px;cursor:pointer}
.fa button.dan{color:var(--red)}
.fempty{text-align:center;color:var(--sub);font-size:13px;padding:60px 0}
.psig{color:var(--sub);font-style:italic;max-width:260px;text-align:center}
/* 毛玻璃弹层（老板 b:10 #23520，照 iPhone 通知横幅）：确认弹窗、顶部提示横幅、新消息横幅共用；不支持 backdrop-filter 的退回不透明 */
.glass{background:var(--glass);-webkit-backdrop-filter:blur(24px) saturate(180%);backdrop-filter:blur(24px) saturate(180%);border:1px solid rgba(255,255,255,.35);border-radius:22px;box-shadow:0 10px 36px rgba(0,0,0,.16),0 1px 3px rgba(0,0,0,.06)}
:root[data-theme="dark"] .glass{border-color:rgba(255,255,255,.12);box-shadow:0 10px 36px rgba(0,0,0,.45)}
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){.glass{background:var(--glass0)}}
/* 控制台顶上的「账号」（研发4 ac863286）：行样式原来只写在手机那段 @media 里，电脑上没样式 → 一个占半屏的大勾、文字挤一行（秘书 #24173 截图连带发现）。电脑宽度给 .cacct 补一份同样的 */
/* #39717：桌面「设置 → 账号」(#3110 改成复用手机那套 acctRows(true)，渲染进 .stgsub) + 工作台「切换账号」(openAcctSheet 走 sheet()，渲染进 #msheet，桌面宽度打开时同样会撞上) 踩了同一个坑——
   行样式原来只给 .cacct 补过桌面版，没给 .stgsub / #msheet 补，所以这两处的账号列表在桌面宽度下没有任何行样式：
   头像 <img> 没有宽高限制按原图尺寸铺满、按钮没有 flex/padding 叠在一起。这里把 .cacct 的那套同时套到 .stgsub 上；#msheet 是很多不同列表共用的壳（项目切换 / 语言 / 设置首页…），
   只挑 .acr（账号行专用，全仓只有 acctRows 用这个类）和账号专属的 .msh.acchd / .accadd 补齐，别把 #msheet 下所有 .msr 都改了影响到其它列表 */
@media (min-width:1101px),(min-width:760px) and (orientation:landscape),(min-width:760px) and (pointer:fine){
 .cacct .msh,.stgsub .msh{font-size:12.5px;color:var(--sub);padding:8px 4px 4px}.cacct .msh.acchd,.stgsub .msh.acchd,#msheet .msh.acchd{display:flex;align-items:center;justify-content:space-between}
 .cacct .accadd,.stgsub .accadd,#msheet .accadd{border:0;background:none;color:var(--accent);width:34px;height:30px;display:flex;align-items:center;justify-content:center;cursor:pointer}.cacct .accadd svg,.cacct .accadd .lu,.stgsub .accadd svg,.stgsub .accadd .lu,#msheet .accadd svg,#msheet .accadd .lu{width:20px;height:20px}
 .cacct .msr,.stgsub .msr,#msheet .msr.acr{display:flex;align-items:center;gap:12px;width:100%;padding:10px 4px;border:0;border-radius:8px;background:transparent;color:var(--text);font-size:15px;text-align:left;cursor:pointer;font-family:inherit}.cacct .msr:hover,.stgsub .msr:hover,#msheet .msr.acr:hover{background:var(--hover)}
 .cacct .msr .ic,.stgsub .msr .ic,#msheet .msr.acr .ic{width:34px;height:34px;flex:0 0 auto;border-radius:8px;background:var(--chip);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;overflow:hidden;color:var(--text)}.cacct .msr .ic img,.stgsub .msr .ic img,#msheet .msr.acr .ic img{width:100%;height:100%;object-fit:cover}
 .cacct .msr .sp,.stgsub .msr .sp,#msheet .msr.acr .sp{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}.cacct .msr .sp b,.cacct .msr .sp small,.stgsub .msr .sp b,.stgsub .msr .sp small,#msheet .msr.acr .sp b,#msheet .msr.acr .sp small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cacct .msr small,.stgsub .msr small,#msheet .msr.acr small{color:var(--sub);font-size:12px}
 .cacct .msr .mok,.stgsub .msr .mok,#msheet .msr.acr .mok{color:var(--accent);display:flex;flex:none}.cacct .msr .mok svg,.cacct .msr .mok .lu,.stgsub .msr .mok svg,.stgsub .msr .mok .lu,#msheet .msr.acr .mok svg,#msheet .msr.acr .mok .lu{width:20px;height:20px}
 .cacct .msr.dead small,.stgsub .msr.dead small,#msheet .msr.acr.dead small{color:var(--red)}.cacct .msr.dead b,.stgsub .msr.dead b,#msheet .msr.acr.dead b{opacity:.6}.cacct .msep,.stgsub .msep,#msheet .msep{height:8px;background:var(--bg);margin:6px 0}
}
/* 控制台「单独订阅」：套餐名 + 价格不许被两个按钮挤成一字一行（秘书 #24173）—— 放不下时两个按钮一起换到下一行 */
.dbox .crow.subrow{flex-wrap:wrap;row-gap:8px}.dbox .crow.subrow .sp{flex:1 0 auto;min-width:auto;white-space:nowrap}.dbox .crow.subrow .subbtns{display:flex;gap:8px;flex-wrap:wrap}
/* 顶部滑下的横幅：提示（toast）和新消息都用它 */
.tban{position:fixed;left:50%;top:calc(env(safe-area-inset-top,0px) + 10px);z-index:10001;width:min(440px,calc(100vw - 20px));display:flex;align-items:center;gap:12px;padding:14px 16px;min-height:76px;box-sizing:border-box;color:var(--text);transform:translate(-50%,calc(-100% - 160px));visibility:hidden;transition:transform .32s cubic-bezier(.2,.9,.3,1.1),visibility 0s linear .32s;cursor:pointer;touch-action:none}
/* 收起：起点下移到安全区 / 54px 之后，只上移「自身高度 + 30」会在右上角露一截「现在」（老板 b:10 #23964，董秘 #23966）→ 多推 160 并在滑完后 visibility:hidden */
/* 横幅照 iPhone 通知的尺寸（老板 b:10 #23536）：圆角 24、左边 38 的头像 / 图标、第一行名字 + 右边「现在」、第二行内容最多两行；暗色更透 */
.tban.glass{border-radius:24px;background:rgba(255,255,255,.6);-webkit-backdrop-filter:blur(28px) saturate(180%);backdrop-filter:blur(28px) saturate(180%)}
:root[data-theme="dark"] .tban.glass{background:rgba(40,40,42,.55)}
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){.tban.glass,:root[data-theme="dark"] .tban.glass{background:var(--glass0)}}
.tban .ti{width:38px;height:38px;flex:0 0 auto;align-self:center;border-radius:10px;display:flex;align-items:center;justify-content:center;color:var(--text);background:var(--chip);overflow:hidden;font-size:14px;font-weight:600}
.tban .ti svg{width:22px;height:22px}.tban .ti img{width:100%;height:100%;object-fit:cover}.tban .ti .gini,.tban .ti .coll{font-size:13px}
.tban .tt{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.tban .tr1{display:flex;align-items:baseline;gap:8px;min-width:0}
.tban .tr1 b{flex:1;min-width:0;font-size:16px;font-weight:600;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#toast .tr1 b{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.tban .tn{flex:0 0 auto;font-size:13px;color:var(--sub)}
.tban .tl2{font-size:15px;line-height:1.35;color:var(--text);opacity:.8;white-space:pre-wrap;word-break:break-word;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.tban.on{transform:translate(-50%,0);visibility:visible;transition:transform .32s cubic-bezier(.2,.9,.3,1.1),visibility 0s}
.tban .ti.ok{background:var(--accent);color:var(--u-on-color)}.tban .ti.warn{background:#FF9F0A;color:var(--u-on-color)}.tban .ti.info{background:var(--accent,#D9B45A);color:var(--u-on-color)}
/* 右键菜单：借了发送菜单的外观，但位置要自己定 —— 发送菜单那套 right:0 / bottom:100% 会把它扯成一条横线（老板 2026-09-25 截图） */
.smenu.cmenu{position:fixed;bottom:auto;right:auto;min-width:190px}
/* 帮助页：整页盖在工作台上，顶上一条「‹ 返回 + 标题」，下面是帮助中心 / 联系我们 */
.webov{position:fixed;inset:0;z-index:9997;background:var(--bg);display:flex;flex-direction:column}
/* 访客对话顶上的状态条（老板 b:10 #26098 ②）：AI 接待中灰点 / 人工接待中绿点，右边一个按钮 */
.vsbar{display:flex;align-items:center;gap:8px;padding:6px 12px;border-bottom:1px solid var(--line);background:var(--bg);font-size:14px;min-height:44px;box-sizing:border-box;flex:none}
.vsbar .vsd{width:8px;height:8px;border-radius:4px;background:#A0A4AB;flex:none}.vsbar.hu .vsd{background:#16a34a}.vsbar .vst{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vsbar .vsb{flex:none;min-height:34px;padding:0 14px;border-radius:17px;border:1px solid var(--accent,#B8862F);background:transparent;color:var(--accent,#B8862F);font-size:14px;font-weight:600}.vsbar.hu .vsb{border-color:var(--line);color:var(--fg)}
/* 使用说明原生列表 / 文章页（老板 b:10 #26084） */
.hlq{width:100%;box-sizing:border-box;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:var(--card,var(--bg));color:var(--fg);font:inherit;font-size:16px}
.hlr .sp{display:flex;flex-direction:column;gap:2px;text-align:left}.hlr .sp .hint{font-size:13px}.hlart h2{font-size:20px;margin:0 0 10px}.hlmd h3{font-size:17px;margin:18px 0 6px}.hlmd h4{font-size:15px;margin:14px 0 4px}.hlmd p{margin:0 0 10px}.hlmd ul,.hlmd ol{margin:0 0 10px;padding-left:22px}.hlmd li{margin:3px 0}.hlmd img{display:block;max-width:100%;height:auto;border-radius:8px;border:1px solid var(--line);margin:8px 0}.hlmd pre{white-space:pre-wrap;word-break:break-all}.hlmd a{color:var(--link)}.hloff{padding:6px 16px 0}.hlcat{margin-top:12px}.hlpq svg{width:20px;height:20px}.hlart .hlb{white-space:pre-wrap}.hlart{line-height:1.7;word-break:break-word}
/* 问题反馈一屏（老板 b:10 #26084：App 里不嵌官网网页） */
.fblb{display:block;margin-top:12px;font-size:13px;color:var(--sub)}.fbx .fbtt{width:100%;box-sizing:border-box;margin-top:6px;padding:10px;border:1px solid var(--line);border-radius:10px;background:var(--card,var(--bg));color:var(--fg);font:inherit;font-size:16px}.fbti{margin-top:6px;font-weight:600;word-break:break-word}
.fbx textarea{width:100%;box-sizing:border-box;margin-top:8px;padding:10px;border:1px solid var(--line);border-radius:10px;background:var(--card,var(--bg));color:var(--fg);font:inherit;font-size:16px;resize:vertical;min-height:110px}
.fbf{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}.fbth{position:relative;width:72px;height:72px;border-radius:8px;overflow:hidden;border:1px solid var(--line)}.fbth img{width:100%;height:100%;object-fit:cover;display:block}.fbth.up{opacity:.5}
.fbth button{position:absolute;top:2px;right:2px;width:22px;height:22px;border-radius:11px;border:0;background:rgba(0,0,0,.55);color:var(--u-on-color);font-size:14px;line-height:22px;padding:0}
.fbbar{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:10px}.fbpick{cursor:pointer;padding:10px 14px;border:1px solid var(--line);border-radius:10px;min-height:44px;box-sizing:border-box;display:inline-flex;align-items:center}
.fbgo{min-height:44px;padding:0 22px;border:0;border-radius:10px;background:var(--accent,#B8862F);color:var(--u-on-color);font-size:16px;font-weight:600}.fbgo:disabled{opacity:.5}.fbenv{margin-top:8px}
.fbi{padding:10px 0;border-top:1px solid var(--line)}.fbi:first-child{border-top:0}.fbh{display:flex;justify-content:space-between;align-items:center;gap:8px}.fbq{margin-top:6px;white-space:pre-wrap;word-break:break-word}
.fbs{font-size:12px;padding:2px 8px;border-radius:10px;background:var(--line)}.fbs.s-done{background:var(--chip);color:var(--sub)}.fbr{margin-top:8px;padding:8px 10px;border-radius:8px;background:var(--line)}.fbr div{white-space:pre-wrap;word-break:break-word;margin-top:2px}
.webovb{flex:none;display:flex;align-items:center;gap:8px;padding:calc(8px + env(safe-area-inset-top,0px)) 12px 8px;background:var(--rail);border-bottom:1px solid var(--line);font-size:17px}
.webovb .hbk{display:block;border:0;background:none;color:var(--text);font-size:26px;line-height:1;padding:0 8px 2px 0;cursor:pointer}
.webovc{flex:1;min-height:0;display:flex;flex-direction:column;overflow-y:auto;-webkit-overflow-scrolling:touch;padding-bottom:env(safe-area-inset-bottom,0px)}
.webovf{flex:1;width:100%;border:0;display:block;background:#fff}
.hlps{padding:14px 16px 6px;font-size:16px}.hlps .hint{margin-top:4px}
.sdiv{height:0;border-top:1px solid var(--line);margin:4px 12px}
/* 项目组切换（老板 2026-09-25）：图标栏里「主线」+ 每个项目一个图标，点了中间只显示这个项目的群和私聊 */
/* 未读红点被裁一半（老板 2026-09-25 截图）：这一栏要滚动，overflow 一设，右上角伸出去的红点就被裁掉；
   原来它在图标栏里缩成图标那么宽（38px），红点伸出去 7px 全在外面。撑满整栏宽 + 顶上留够位置 */
/* 项目多了要看得出能滚（老板 #9166：33 个项目时后面的看不到、以为展开不了）：留一条细滚动条，不再藏起来 */
.projrail{display:flex;flex-direction:column;align-items:center;align-self:stretch;gap:8px;margin-top:8px;padding-top:10px;border-top:1px solid var(--line);max-height:50vh;overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--line) transparent}
.projrail::-webkit-scrollbar{width:4px}.projrail::-webkit-scrollbar-thumb{background:var(--line);border-radius:2px}
.pj{position:relative;width:38px;height:38px;border-radius:8px;border:2px solid transparent;background:var(--chip);color:var(--text);font-size:11px;font-weight:600;cursor:pointer;display:flex;align-items:center;justify-content:center;overflow:visible;padding:0}
.pj img{width:100%;height:100%;object-fit:cover;border-radius:6px}.pj.on{border-color:var(--accent)}
.pj .bd{position:absolute;top:-6px;right:-7px;min-width:16px;height:16px;padding:0 4px;border-radius:8px;background:var(--red);color:var(--u-on-color);font-size:10px;line-height:16px;text-align:center}
.bno{font-family:ui-monospace,Menlo,monospace;letter-spacing:.3px}.bno2{font-family:ui-monospace,Menlo,monospace;font-size:11px;color:var(--sub)}
.pj.add{background:transparent;border:1.5px dashed var(--sub);color:var(--sub);font-size:18px;font-weight:400}
.gfl{display:flex;flex-direction:column;gap:4px;margin-top:6px}
.gfr{display:flex;align-items:center;gap:8px;font-size:12.5px;padding:5px 6px;border-radius:5px}.gfr:hover{background:var(--hover)}
.gfr a{flex:1;min-width:0;color:var(--link);text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gfr small{color:var(--sub);font-size:10.5px;white-space:nowrap}
.gfcs{display:flex;flex-wrap:wrap;gap:8px;margin:6px 0 10px}
.gfentry{display:flex;align-items:center;gap:10px;width:100%;padding:12px 4px;border:0;background:none;color:var(--text);font-size:16px;cursor:pointer;text-align:left}.gfentry small{flex:1;color:var(--sub);font-size:12px}.gfentry b{color:var(--sub);font-size:20px;font-weight:400}
.gfbar{display:flex;gap:10px;margin:4px 0 8px}.gfbar .btn{flex:1;display:flex;align-items:center;justify-content:center;font-size:15px;padding:10px;margin:0}
.gfp{font-size:14px;color:var(--accent);min-height:0}
.gfl2{display:flex;flex-direction:column;gap:12px;padding-bottom:20px}
.gftool{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:4px 0 12px}.gfcrumb{font-size:14px}.gfcrumb .plink{padding:0}
.gfseg{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden}.gfseg button{border:0;background:transparent;color:var(--text);padding:4px 10px;font-size:13px;cursor:pointer}.gfseg button.on{background:var(--accent);color:var(--u-on-color)}
.gfq{flex:1 1 120px;min-width:90px;max-width:220px;width:auto!important;border:1px solid var(--line);border-radius:8px;background:var(--field);color:var(--text);padding:4px 8px;font-size:13px}
.gfsort{width:auto!important;flex:0 0 auto;border:1px solid var(--line);border-radius:8px;background:var(--field);color:var(--text);padding:4px 6px;font-size:13px}.gfdir{border:1px solid var(--line);border-radius:8px;background:transparent;color:var(--text);padding:3px 9px;cursor:pointer}
.gfgrid{display:grid;gap:12px;padding-bottom:20px}.gf-s{grid-template-columns:repeat(auto-fill,minmax(84px,1fr))}.gf-m{grid-template-columns:repeat(auto-fill,minmax(120px,1fr))}.gf-l{grid-template-columns:repeat(auto-fill,minmax(180px,1fr))}
[data-gfi]{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}
.gft{position:relative;border:1px solid var(--line);border-radius:10px;background:var(--bubble);padding:8px;cursor:pointer;min-width:0}.gft:hover{border-color:var(--accent)}
.gfth2{position:relative;aspect-ratio:1/1;border-radius:8px;overflow:hidden;background:var(--chip);display:flex;align-items:center;justify-content:center}.gfth2 img,.gfth2 video{width:100%;height:100%;object-fit:cover;display:block}
.gfico{font-size:40px;line-height:1}.gf-s .gfico{font-size:28px}.gf-l .gfico{font-size:60px}
.gfnm{margin-top:6px;font-size:12.5px;line-height:1.35;word-break:break-all;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.gfsm{font-size:11px;color:var(--sub)}
.gfmore{position:absolute;top:10px;right:10px;border:0;border-radius:6px;background:var(--u-scrim);color:var(--u-on-color);font-size:14px;line-height:1;padding:3px 6px;cursor:pointer}
.gflist{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:10px;overflow:hidden;margin-bottom:20px}
.gfr2{display:flex;align-items:center;gap:10px;padding:8px 10px;border-top:1px solid var(--line);cursor:pointer;font-size:13px;min-width:0}.gfr2:first-child{border-top:0}.gfr2:hover{background:var(--hover)}
.gfhd{cursor:default;color:var(--sub);font-size:12px;background:var(--chip)}.gfhd:hover{background:var(--chip)}
.gfli{width:22px;text-align:center;flex:0 0 auto}.gfln{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gflz{width:70px;text-align:right;color:var(--sub);flex:0 0 auto}.gflt{width:90px;color:var(--sub);flex:0 0 auto}.gflb{width:90px;color:var(--sub);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:0 0 auto}
.gfr2 .gfmore{position:static;background:transparent;color:var(--sub)}.gflm{width:28px;flex:0 0 auto}
@media (max-width:640px){.gflt,.gflb{display:none}}
.gfmenu{position:fixed;z-index:10001;display:none;background:var(--pop);border:1px solid var(--line);border-radius:10px;box-shadow:0 8px 24px var(--shadow);padding:6px;max-width:calc(100vw - 16px)}
.gfmenu button,.gfmenu a{display:block;width:100%;text-align:left;border:0;background:transparent;color:var(--text);padding:9px 10px;border-radius:6px;font-size:14px;text-decoration:none;cursor:pointer}.gfmenu button:hover,.gfmenu a:hover{background:var(--hover)}.gfmenu .dan{color:var(--red)}
.gfmh{padding:6px 10px 8px;font-size:13px;font-weight:600;word-break:break-all;border-bottom:1px solid var(--line);margin-bottom:4px}.gfmh small{display:block;font-weight:400;color:var(--sub);margin-top:2px}
.gfmn{padding:6px 10px 4px;margin-top:4px;border-top:1px solid var(--line);font-size:12px;line-height:1.4;color:var(--sub)}
.gfsharebar{position:fixed;left:0;right:0;bottom:calc(20px + env(safe-area-inset-bottom,0px));z-index:10002;display:flex;justify-content:center}
.gfv,.gfo{display:flex;gap:12px;padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--bubble)}
.gfv{flex-direction:column}
.gfth{position:relative;border-radius:8px;overflow:hidden;background:var(--u-media);cursor:pointer;aspect-ratio:16/9}.gfth video{width:100%;height:100%;object-fit:contain;display:block;pointer-events:none}
.gfm{flex:1;min-width:0}.gfn{display:block;font-size:16px;font-weight:600;color:var(--text);text-decoration:none;word-break:break-all;line-height:1.4}
.gfs{font-size:13px;color:var(--sub);margin:4px 0 10px}
.gfsave{display:block;width:100%;padding:12px;border:0;border-radius:14px;background:var(--accent);color:var(--u-on-color);font-size:17px;font-weight:600;cursor:pointer}.gfsave.ready{background:#E67E22;animation:gfpulse 1s ease-in-out infinite alternate}@keyframes gfpulse{from{transform:scale(1)}to{transform:scale(1.03)}}
.gfa{display:flex;gap:18px;margin-top:10px;font-size:14px}.gfa a{color:var(--link);text-decoration:none}.gfdel{border:0;background:none;color:var(--red);font-size:14px;padding:0;cursor:pointer}.gfsub{border:0;background:none;color:var(--accent);font-size:14px;padding:0;cursor:pointer;font-weight:600}
.revbtns{display:flex;gap:10px}.revbtns .gfsave{flex:1}.gfsave.rej{background:var(--u-red)}
/* 按钮里的线条图标（#2784：emoji 不当图标）：跟字一样大、和字对齐 */
svg.bti{width:1.1em;height:1.1em;vertical-align:-.18em;margin-right:5px;flex:0 0 auto}
.revnote{font-size:14px;line-height:1.5;margin:0 0 10px;white-space:pre-wrap;color:var(--text)}
.revdl{margin:8px 0 4px;display:flex;gap:8px}.revdl .gfsave{text-decoration:none;display:block;width:auto;flex:1 1 0;min-width:0;padding:9px 6px;font-size:14px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.revdl.del .gfsave{padding:7px 6px;font-size:13px;font-weight:500}
.revst{font-size:14px;padding:10px 12px;border-radius:8px;background:var(--quote);color:var(--sub)}.revst.ok b{color:var(--accent)}.revst.no b{color:var(--u-red)}.revdn{margin-top:6px;color:var(--text);white-space:pre-wrap}.rvgone{display:flex;align-items:center;justify-content:center;width:100%;height:100%;min-height:60px;font-size:12px;color:var(--sub);background:var(--quote)}.rvgone2{margin:8px 0}
.pzlock{max-width:520px;margin:40px auto;padding:22px 20px;border:1px solid var(--line,rgba(127,127,127,.25));border-radius:14px;background:var(--card,transparent)}.pzlock h4{margin:0 0 8px;font-size:17px}.pzlock .dact{margin-top:14px}
.yrlock{padding:6px 0}.yrtip{font-weight:600;margin:8px 0}.yrlock .dact{margin:10px 0 14px}.yrmock{opacity:.55;pointer-events:none;border:1px dashed var(--line,rgba(127,127,127,.3));border-radius:12px;padding:10px}.yrmrow{display:flex;align-items:center;gap:10px;padding:8px 0}.yrmthumb{width:56px;height:40px;border-radius:8px;background:rgba(127,127,127,.25);flex:none}.yrmmid{flex:1;min-width:0}
.favfull{max-height:62vh;overflow:auto;-webkit-overflow-scrolling:touch;margin:10px 0}.favfull .fc{white-space:pre-line;max-height:none!important;overflow:visible!important;-webkit-line-clamp:unset!important;display:block!important}.favfull .fimgs img{max-width:100%;height:auto}.fcard .fc,.fcard .ftt{cursor:pointer}
/* 预发布（老板 b:10 #16573）：审片 / 预发布 切换 + 各平台手机样子预览 */
.revseg{display:flex;flex:none;gap:0;margin:0 0 10px;border:1px solid var(--line);border-radius:10px;overflow:hidden}.revseg button{flex:1;padding:10px;border:0;background:var(--bubble);color:var(--text);font-size:16px;font-weight:600;cursor:pointer;position:relative}.revseg button.on{background:rgba(184,135,43,.12);color:var(--accent);box-shadow:inset 0 0 0 1.5px var(--accent);border-radius:9px}:root[data-theme="dark"] .revseg button.on{background:rgba(216,180,90,.14)}.mcards{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:4px 0 6px}.mcard{border:1px solid var(--line);border-radius:12px;padding:10px;display:flex;flex-direction:column;gap:8px;min-width:0}.mcard.cur{border-color:var(--accent)}.mch{font-size:13px;color:var(--sub)}.mch small{color:var(--accent)}.mcb{border-radius:12px;padding:9px 12px;font-size:15px;border:1px solid rgba(0,0,0,.06);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mca{display:flex;gap:6px;flex-wrap:wrap}.mca .btn{flex:1;min-width:0;text-align:center;padding:6px 4px;font-size:13px;white-space:nowrap;cursor:pointer}
.spdl{display:flex;flex-direction:column;gap:6px}.spdo{display:flex;align-items:center;gap:10px;width:100%;text-align:left;padding:9px 10px;border:1px solid var(--line);border-radius:10px;background:var(--bubble);color:var(--text);cursor:pointer}.spdo.on{border-color:var(--accent);background:rgba(184,135,43,.08)}.spdr{width:16px;height:16px;border-radius:50%;border:2px solid var(--sub);flex:0 0 auto;box-sizing:border-box}.spdo.on .spdr{border:5px solid var(--accent)}.spdt{display:flex;flex-direction:column;gap:1px;min-width:0}.spdt b{font-weight:600;font-size:15px}.spdt small{color:var(--sub);font-size:12px}
.revseg .rb-n{position:static;margin-left:6px;display:inline-block}
.agta{min-height:84px;resize:vertical;line-height:1.5;font-size:16px;padding:10px 12px;font-family:inherit}.agdet h3{font-size:20px;line-height:1.4;margin:10px 0 4px}.agdet .agpt,.agdet .agol,.agdet .agck{font-size:16px;line-height:1.75}.agdet .agpg{padding:14px}.rvback{border:0;background:none;color:var(--link);font-size:15px;padding:6px 0;cursor:pointer}.agf{display:flex;flex-direction:column;gap:6px;padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--bubble);margin-bottom:12px}.agl{font-size:13px;color:var(--sub);margin-top:6px}.agcs{display:flex;flex-wrap:wrap;gap:6px}.agcs .gfc{padding:5px 11px;font-size:14px}.agcs .gfc.on{background:var(--accent);border-color:var(--accent);color:var(--u-on-color)}.dbox .agin,.agin{width:100%;box-sizing:border-box;height:38px;border:1px solid var(--line);border-radius:8px;background:var(--field);color:var(--text);font-size:16px;padding:0 10px}.agrow{display:flex;gap:10px;margin-top:4px}.agsel{flex:1;display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--sub);min-width:0}.agsel.agdur{flex:0 0 100px}.dbox .agsel select{height:38px;font-size:15px;padding:0 8px}.agbtn{height:42px;font-size:16px;margin-top:10px}.agbtn:disabled{opacity:.6}.agh{font-size:13px;color:var(--sub);margin:4px 2px 6px}
.agj{border:1px solid var(--line);border-radius:10px;margin-bottom:8px;background:var(--bubble);overflow:hidden}.agj.on{border-color:var(--accent)}.agj0{padding:10px 12px 0;cursor:pointer}.agj1{display:flex;align-items:center;gap:6px}.agj1 b{flex:1;min-width:0;font-weight:600;font-size:15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.agj .gfs{margin:3px 0 10px;font-size:12px}.agst{flex:none;font-size:12px;padding:1px 8px;border-radius:10px;background:var(--chip);color:var(--sub)}.agst.s-running,.agst.s-queued{background:var(--u-gold-bg);color:var(--u-gold-tx)}.agst.s-done{background:var(--chip);color:var(--sub)}.agst.s-failed{background:var(--u-red-bg);color:var(--u-red)}.agst.s-saved{background:rgba(184,135,43,.16);color:var(--accent)}
.agr{padding:0 12px 12px;border-top:1px solid var(--line)}.agr>.gfs{margin:8px 0 0}.agsec{font-size:13px;font-weight:600;color:var(--sub);margin:14px 0 6px}.agrec{padding:10px 12px;border-radius:8px;background:var(--u-gold-bg);border:1px solid rgba(184,135,43,.35);font-size:15px;line-height:1.55}.agrec b{color:var(--accent);margin-right:4px}.agrec .gfs{margin:4px 0 0}.agdt{margin-top:6px}.agdt>summary{cursor:pointer;font-size:13px;color:var(--link);padding:4px 0}.agg{font-size:12px;color:var(--sub);margin:8px 0 2px}.aghk{font-size:14px;line-height:1.5;padding:3px 0}.aghk.rec{color:var(--accent);font-weight:600}
.agtb{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:8px;overflow:hidden}.agtr{display:grid;grid-template-columns:64px 1fr 1.5fr 1fr;gap:8px;padding:8px 10px;border-top:1px solid var(--line);font-size:14px;line-height:1.5}.agtr:first-child{border-top:0}.agth{background:var(--quote);font-size:12px;color:var(--sub);font-weight:600}.agt{color:var(--sub);font-size:12px;font-variant-numeric:tabular-nums}.agv{color:var(--sub);font-size:13px}.agbig{font-weight:700}
@media (max-width:640px){.agth{display:none}.agtr{grid-template-columns:1fr;gap:2px}.agv::before,.agbig:not(:empty)::before{content:attr(data-l) "：";color:var(--sub);font-weight:400;font-size:12px}}
.agpg{padding:10px 12px;border:1px solid var(--line);border-radius:8px;margin-bottom:6px}.agpt{white-space:pre-wrap;font-size:14px;line-height:1.6;margin-top:4px}.agol{margin:0;padding-left:22px;font-size:14px;line-height:1.6}.agtp{display:flex;flex-wrap:wrap;gap:6px}.agtp span{font-size:13px;color:var(--link)}.agck{font-size:14px;line-height:1.8}.agred{color:var(--red);font-weight:600}.agok{color:var(--accent)}.agbad{color:var(--red);font-size:14px;padding:10px 0}.agacts{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}.agacts .btn{flex:1 1 auto;white-space:nowrap}.agacts .btn:disabled{opacity:.55;cursor:default}
@media (max-width:420px){.revseg button{padding:10px 2px;font-size:15px}}
.ppplat{display:flex;align-items:center;gap:8px;margin:10px 0 4px 2px}.ppday{flex:none;display:flex;align-items:center;gap:8px;margin:14px 0 6px;font-size:15px}.ppday .ppall{margin-left:auto;padding:6px 12px;font-size:13px}
.ppc{flex:none;display:flex;gap:10px;padding:8px;border:1px solid var(--line);border-radius:10px;margin-bottom:8px;cursor:pointer;background:var(--bubble)}
.ppth{position:relative;width:72px;height:96px;flex:none;border-radius:6px;overflow:hidden;background:var(--u-media)}.ppth img,.ppth video{width:100%;height:100%;object-fit:cover}.ppth.wx{width:120px;background:#eee}.ppth.wx img{object-fit:contain}.ppth.rvth{width:128px;height:72px}.ppc.msel{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent);background:var(--quote)}.dlg.pg .dbox>.msplit{width:auto;max-width:none;flex:1 1 auto;min-height:0;display:flex;margin:0 -16px -8px;border-top:1px solid var(--line)}.dlg.pg .dbox:has(>.msplit)>.revseg{max-width:none}.msl{width:400px;flex:none;overflow-y:auto;padding:10px 12px 20px 16px;box-sizing:border-box;border-right:1px solid var(--line)}.msl .gfl2{gap:0}.msd{flex:1;min-width:0;overflow-y:auto;padding:10px 20px 24px;box-sizing:border-box}.msd0{color:var(--sub);text-align:center;margin-top:30vh;font-size:14px}.msd>*{max-width:820px}.ppi .revstage{margin-right:6px;font-size:11px;padding:2px 7px}.cgp{position:fixed;inset:0;z-index:95;background:var(--bubble);color:var(--text);display:flex;flex-direction:column;align-items:center;justify-content:center;padding:24px 16px;box-sizing:border-box;overflow-y:auto}.cgp h2{font-size:22px;margin:0 0 20px}.cgpl{display:flex;flex-direction:column;gap:12px;width:min(420px,100%)}.cgb{display:flex;align-items:center;gap:14px;width:100%;padding:14px 16px;border:1px solid var(--line);border-radius:12px;background:var(--list);color:var(--text);font-size:18px;font-weight:500;cursor:pointer;text-align:left;font-family:inherit}.cgb:hover{border-color:var(--accent)}.cgb .av{width:48px;height:48px}.cgb span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cgsw{flex:0 0 auto;border:1px solid var(--line);background:none;color:var(--text);border-radius:14px;font-size:12px;padding:3px 10px;margin-right:6px;cursor:pointer;white-space:nowrap}.ppth .vplay{font-size:18px}.ppimg{position:absolute;left:4px;bottom:4px;font-size:11px;color:var(--u-on-color);background:rgba(0,0,0,.55);padding:1px 5px;border-radius:4px}
.ppi{flex:1;min-width:0}.ppn{font-size:15px;font-weight:600;margin:4px 0;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.ppb{display:inline-block;color:var(--u-on-color);font-size:12px;padding:1px 7px;border-radius:4px;margin-right:6px}.ppt{font-size:12px;color:var(--sub);margin-right:6px}.ppok{color:var(--accent)}
.ppwrap{flex:none;display:flex;justify-content:center;margin:10px 0}
@media (min-width:900px){.pph{width:430px!important}.pph.dark{height:764px!important}}
.pph{width:300px;max-width:100%;border-radius:22px;border:6px solid #222;background:#fff;color:#111;overflow:hidden;position:relative;font-size:13px;line-height:1.45}.pph.dark{background:var(--u-media);color:var(--u-on-color);height:533px}
.ppswrap{position:relative}.ppnav{position:absolute;top:50%;transform:translateY(-50%);width:34px;height:34px;border-radius:50%;border:0;background:var(--u-scrim);color:var(--u-on-color);font-size:22px;line-height:32px;cursor:pointer;z-index:2;padding:0}.ppnav.l{left:8px}.ppnav.r{right:8px}.ppnav:hover{background:rgba(0,0,0,.65)}
.ppsw{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;background:var(--u-media)}.ppsl{flex:0 0 100%;scroll-snap-align:start;display:flex;align-items:center;justify-content:center}.ppsl img,.ppsl video{width:100%;height:100%;object-fit:contain;display:block}
.ppsw.tall{height:100%}.ppsw.tall .ppsl{height:100%}.ppsw.xhs .ppsl{aspect-ratio:3/4}.ppsw.wide .ppsl{aspect-ratio:16/9}.ppsw.sq .ppsl{aspect-ratio:1/1}.ppsw.rnd{margin:0 10px;border-radius:12px}
.ppdots{text-align:center;font-size:11px;color:#999;padding:3px 0}.pph.dark .ppdots{position:absolute;top:6px;left:0;right:0;color:#ddd}
.ppov{position:absolute;left:10px;right:54px;bottom:64px;text-shadow:0 1px 2px rgba(0,0,0,.8);pointer-events:none}.ppov1{font-weight:600;margin-top:3px}.ppov2{max-height:5.8em;overflow:hidden;white-space:pre-wrap;font-size:12px;opacity:.95}.pptg{font-weight:600;margin-top:3px}.pptg.blue,.blue{color:var(--link)}
.ppside{position:absolute;right:8px;bottom:120px;text-align:center;font-size:22px;line-height:1.9;pointer-events:none}
.ppai{margin-top:4px;font-size:11px;opacity:.8}.ppai.lt{color:#888}
.ppbody{padding:8px 12px}.ppacct{display:flex;align-items:center;gap:6px;color:#555;margin:2px 0 4px}.ppacct i{width:22px;height:22px;border-radius:50%;background:linear-gradient(135deg,#F6D77E,#B8860B);flex:none}
.pptitle{font-weight:700;font-size:15px;margin:2px 0 4px}.pptitle.big{font-size:18px}.blog{margin-top:8px}.blog>summary{cursor:pointer;color:var(--sub);font-size:13px;padding:6px 0;user-select:none}.pptext{white-space:pre-wrap}.ppart .pptext{margin:0 0 10px;line-height:1.75}.ppaimg{margin:4px 0 12px}.ppaimg img,.ppaimg video{width:100%;display:block;border-radius:4px}.pptext.clamp{max-height:7.3em;overflow:hidden;color:#555}
.ppbar{display:flex;justify-content:space-between;padding:8px 12px;border-top:1px solid #eee;color:#999}.ppbar0{font-size:18px;margin-bottom:4px}
.ppmeta{font-size:14px;margin:6px 0 10px}.ppmeta div{padding:3px 0}.ppmeta span{display:inline-block;width:64px;color:var(--sub)}
.gfsave.ppchg{background:#E67E22}
/* 排片（老板 b:10 #16737） */
.plr{flex:none;display:block;padding:12px 14px;border:1px solid var(--line);border-radius:12px;margin-bottom:10px;cursor:pointer;background:var(--bubble)}.plh{display:flex;align-items:center;gap:8px;margin-bottom:4px}.plh .sp{flex:1}.plt{font-weight:700;font-size:14px;color:var(--sub)}.plst{font-style:normal;font-size:12px;font-weight:600;padding:1px 8px;border:1px solid;border-radius:10px}.pln{font-size:16px;font-weight:600;line-height:1.4;margin-bottom:6px}.plp{display:flex;flex-wrap:wrap;gap:4px 10px;font-size:12px;color:var(--sub);margin-bottom:4px}.plp span{display:inline-flex;align-items:center;gap:4px}.plp span i{width:7px;height:7px;border-radius:50%;display:inline-block}.plp .plfm{color:var(--sub);opacity:.8}.plw{font-size:13px;color:var(--sub);line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;margin-bottom:2px}.plo{font-size:12px;color:var(--sub);opacity:.8}
.plc{display:inline-block;margin-right:6px;padding:0 6px;border-radius:4px;background:var(--quote);color:var(--sub);font-size:12px;font-weight:700;vertical-align:1px}
#medch{width:100%;margin:0 0 8px;padding:8px;border-radius:8px;border:1px solid var(--line);background:var(--bubble);color:var(--text);font-size:15px}
.gfvr{display:flex;align-items:center;gap:12px;padding:10px 0;border-top:1px solid var(--line)}.gfvr .gfvi{flex:1;min-width:0}.gfvr .gfvi b{display:block;font-size:15px}.gfvr .gfs{margin:2px 0 0}.gfvr a{color:var(--link);text-decoration:none;font-size:14px}.gfvcur{display:inline-block;margin-left:6px;padding:1px 6px;border-radius:6px;font-size:11px;font-weight:600;color:var(--accent);border:1px solid var(--accent)}.gfvh{margin:4px 0 8px;word-break:break-all}.gfvh small{display:block;color:var(--sub);font-size:12px;margin-top:2px}
.rmcall{display:flex;align-items:center;gap:6px;margin-top:10px;font-size:15px}.rmh{margin:18px 0 6px;font-weight:700}.rmr{display:flex;justify-content:space-between;gap:10px;padding:10px 0;border-top:1px solid var(--line)}
.revol{position:absolute;left:8px;bottom:8px;font-size:12px;color:var(--u-on-color);background:rgba(0,0,0,.6);padding:1px 7px;border-radius:4px}.revfs .gfc{padding:4px 12px;font-size:13px}
.plpk{display:flex;flex-wrap:wrap;gap:6px 14px;font-size:14px}.plpk label{display:flex;align-items:center;gap:4px}
#ptr{position:fixed;left:50%;top:var(--ptrtop,calc(env(safe-area-inset-top,0px) + 8px));width:34px;height:34px;margin-left:-17px;display:flex;align-items:center;justify-content:center;color:var(--sub);background:var(--glass);-webkit-backdrop-filter:blur(20px) saturate(180%);backdrop-filter:blur(20px) saturate(180%);border-radius:50%;box-shadow:0 2px 10px rgba(0,0,0,.14);z-index:99990;opacity:0;pointer-events:none;transition:opacity .2s}
#ptr svg{width:20px;height:20px}#ptr.spin{opacity:1!important;transform:translateY(8px)!important;transition:opacity .2s,transform .2s}#ptr.spin svg{animation:ptrspin .8s steps(8) infinite}
@keyframes ptrspin{to{transform:rotate(360deg)}}
.revver{position:absolute;right:8px;top:8px;padding:3px 9px;border-radius:10px;font-size:12px;font-weight:600;color:var(--u-on-color);background:rgba(0,0,0,.6)}
.revopen{display:block;width:100%;margin:0 0 10px;padding:9px;border:1px solid var(--line);border-radius:8px;background:none;color:var(--accent);font-size:14px;cursor:pointer;text-align:left}
.revback{border:0;background:none;color:var(--accent);font-size:15px;padding:4px 0 8px;cursor:pointer}
.rvtop{display:flex;align-items:flex-start;gap:6px;margin:0 0 10px}.rvtmid{flex:1 1 auto;min-width:0;line-height:1.5;padding-top:3px}.rvtitle{font-size:17px;word-break:break-word;overflow-wrap:anywhere}.rvtmid .revstage{margin-right:2px;vertical-align:1px}.rvvn{font-size:13px;color:var(--sub);white-space:nowrap;margin-left:2px}
.revpub{margin:10px 0 4px;min-width:0}.rvcov{display:block;width:100%;height:auto;border-radius:10px;cursor:zoom-in;background:var(--field)}.rvpt{font-size:16px;font-weight:600;margin:8px 0 4px;word-break:break-word;overflow-wrap:anywhere}.rvpc{font-size:14px;line-height:1.6;white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;margin:0 0 6px}.rvcp{width:auto;padding:6px 12px;font-size:13px}
.askb label.f{display:block;font-size:12px;color:var(--sub);margin:12px 0 5px}.rscov{display:flex;flex-wrap:wrap;gap:8px;margin:4px 0 6px}.rscov button{width:84px;height:84px;padding:0;border:2px solid var(--line);border-radius:8px;overflow:hidden;background:var(--field);cursor:pointer}.rscov button.on{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent)}.rscov img{width:100%;height:100%;object-fit:cover;display:block}.rsup{width:84px;height:84px;display:flex;align-items:center;justify-content:center;border:2px dashed var(--line);border-radius:8px;font-size:13px;color:var(--sub);cursor:pointer;box-sizing:border-box}.rserr{color:var(--u-red);font-size:13px;min-height:18px;margin:6px 0 0}.askb .rsta{min-height:80px}
.revstage.big{position:static;font-size:14px;padding:5px 12px}
.rvcpg:empty{display:none}.rvcpg{margin:0 0 6px}
.rvv{display:block;width:100%;max-height:52vh;background:var(--u-media);border-radius:10px;margin:0 0 8px}
/* #2999 封面审片：4 个比例并排（手机两列、电脑四列），图按原比例缩，点开看大图 */
.rv2999g{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:0 0 10px;align-items:start}@media(min-width:760px){.rv2999g{grid-template-columns:repeat(4,minmax(0,1fr))}}
.rv2999f{margin:0;display:flex;flex-direction:column;gap:4px}.rv2999f img{width:100%;height:auto;display:block;border-radius:8px;border:1px solid var(--line);background:var(--bubble);cursor:zoom-in}.rv2999f figcaption{font-size:12px;color:var(--sub);text-align:center}
.gfth img.rv2999th,.rvth img.rv2999th{width:100%;height:100%;object-fit:cover;display:block}
/* #2889 看片 / 审片详情页改版（老板 b:10 #37076，秘书 #37078）：顶上只一个「‹ 审片」、标题两边小箭头、播放器下一排小按钮、通过 / 打回固定在最下面 */
.dlg.pg .dbox>h3.rvhd:first-child{padding-left:8px}.rvbk.pgbk{display:inline-flex;align-items:center;gap:2px;font-size:17px;font-weight:500;color:var(--accent);padding:4px 10px 4px 2px}.rvbki{font-size:28px;line-height:1;margin-top:-3px;font-weight:300}
.rvarr{flex:0 0 auto;width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--line);border-radius:16px;background:var(--bubble);color:var(--text);cursor:pointer;padding:0}.rvarr svg{width:18px;height:18px}.rvarr:disabled{opacity:.35;cursor:default}svg.rvflip{transform:scaleX(-1)}
.rvsec{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 8px}.rvsb{display:inline-flex;align-items:center;gap:0;min-height:34px;padding:6px 12px;border:1px solid var(--line);border-radius:17px;background:var(--bubble);color:var(--text);font-size:14px;line-height:1.2;cursor:pointer;text-decoration:none;white-space:nowrap;list-style:none;font-family:inherit}.rvsb::-webkit-details-marker{display:none}.rvsb svg.bti{width:16px;height:16px;margin-right:5px;vertical-align:0;color:var(--sub)}.rvsb:hover{border-color:var(--fline)}.rvsb.ready{border-color:#E67E22;color:#E67E22;animation:gfpulse 1s ease-in-out infinite alternate}.rvsb:disabled{opacity:.6}
.rvdanger{color:var(--u-red);border-color:color-mix(in srgb,var(--u-red) 45%,transparent)}.rvdanger svg.bti{color:var(--u-red)}.rvdel{margin:10px 0 6px}.revpub .rvcp{margin-top:2px}
.rvmore{position:relative}.rvmore[open]>summary{border-color:var(--accent);color:var(--accent)}.rvmenu{position:absolute;right:0;top:calc(100% + 6px);z-index:5;width:min(260px,calc(100vw - 32px));background:var(--pop);border:1px solid var(--line);border-radius:12px;box-shadow:0 8px 28px var(--shadow);padding:6px}.rvmi{display:block;width:100%;text-align:left;border:0;background:none;color:var(--text);font-size:15px;font-weight:600;padding:10px 10px 2px;cursor:pointer;font-family:inherit}.rvmi:disabled{color:var(--sub)}.rvmd{font-size:13px;color:var(--sub);padding:0 10px 10px;line-height:1.45}
.revpub .rvcov{width:auto;max-width:100%;max-height:56vh;margin:0 auto}.revseg button{white-space:nowrap;min-width:0}.rvtools{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:4px 0 8px}.rvtools.mini{margin:6px 0 0}.rvtl{display:inline-flex;align-items:center;font-size:12px;color:var(--sub)}.rvtl svg.bti{width:14px;height:14px;margin-right:3px}.rvtc{font-size:12px;line-height:1.3;padding:3px 8px;border-radius:10px;background:var(--quote);color:var(--text);overflow-wrap:anywhere}.rvtcat{margin:6px 0 16px}.rvtch{display:flex;align-items:center;gap:6px;font-size:13px;font-weight:600;color:var(--sub);margin:0 2px 8px}.rvtch span{font-weight:400;font-size:12px}.rvtit{background:var(--bubble);border:1px solid var(--line);border-radius:12px;padding:10px 12px;margin:0 0 8px}.rvtn{font-size:16px;font-weight:600;margin:0 0 4px;overflow-wrap:anywhere}.rvtrow{display:flex;gap:8px;font-size:14px;line-height:1.5;margin:2px 0}.rvtk{flex:0 0 4.5em;color:var(--sub)}.rvtv{flex:1;min-width:0;overflow-wrap:anywhere}.rstl{max-height:260px;overflow-y:auto;border:1px solid var(--line);border-radius:10px;padding:8px}.rstg{margin:0 0 8px}.rstgh{font-size:12px;color:var(--sub);margin:0 0 4px}.rstc{display:inline-flex;align-items:center;margin:0 6px 6px 0;padding:5px 10px;border:1px solid var(--line);border-radius:14px;background:var(--bubble);color:var(--text);font-size:13px;cursor:pointer;font-family:inherit}.rstc.on{border-color:var(--accent);color:var(--accent);background:var(--quote)}.rstc svg.bti{width:13px;height:13px;margin-right:3px}.rvcovl{font-size:12px;color:var(--sub);text-align:center;margin:4px 0 2px}
.rvact{position:sticky;bottom:-8px;z-index:4;display:flex;gap:10px;margin:auto -16px -8px;padding:10px 16px calc(10px + env(safe-area-inset-bottom,0px));background:var(--bubble);border-top:1px solid var(--line);flex:0 0 auto}.dlg.pg .dbox>.rvact{width:auto;max-width:none;margin:auto -16px -8px;padding-left:max(16px,calc(50% + 16px - 360px));padding-right:max(16px,calc(50% + 16px - 360px))}.dlg.pg[style*="bottom"] .rvact{padding-bottom:10px}.msd:has(>.rvact){display:flex;flex-direction:column}.msd>.rvact{bottom:-24px;max-width:none;margin:auto -20px -24px;padding:10px max(20px,calc(100% + 20px - 820px)) 12px 20px}.rvv::-webkit-media-controls-fullscreen-button{display:none}
.rvact button{flex:1 1 0;min-width:0;height:52px;border-radius:12px;display:inline-flex;align-items:center;justify-content:center;gap:8px;font-size:17px;font-weight:600;cursor:pointer;font-family:inherit;padding:0 12px}.rvact svg.bti{width:20px;height:20px;margin:0}.rvpass{border:1px solid var(--accent);background:var(--accent);color:var(--u-on-color)}.rvrej{border:1.5px solid var(--u-red);background:transparent;color:var(--u-red)}
:root[data-theme="dark"] .rvsb,:root[data-theme="dark"] .rvarr{border-color:var(--fline)}:root[data-theme="dark"] .rvpass{color:#1E1E1E}
.rvadd{display:flex;flex-direction:column;gap:10px;margin:12px 6px 14px;padding:14px;border:1px solid var(--line);border-radius:14px;background:var(--bubble)}.rvadd textarea{width:100%;box-sizing:border-box;min-height:110px;padding:12px;border:1px solid var(--line);border-radius:10px;background:var(--field);color:var(--text);font-size:16px;line-height:1.5;resize:vertical}.rvadd .btn{align-self:flex-end;white-space:nowrap;font-size:15px;padding:9px 18px}
.rvcl{margin:0 0 12px}.rvch{font-size:13px;color:var(--sub);margin:4px 0 6px}
.rvc{display:flex;align-items:flex-start;gap:8px;padding:9px 0;border-bottom:1px solid var(--line);font-size:15px;line-height:1.45}.rvc.done .rvcb{color:var(--sub);text-decoration:line-through}
.rvts{flex:0 0 auto;border:0;border-radius:6px;background:var(--quote);color:var(--accent);font-weight:600;font-size:13px;padding:3px 7px;cursor:pointer}
.rvcb{flex:1;min-width:0;white-space:pre-wrap;word-break:break-word}.rvok{flex:0 0 auto;font-size:13px;color:var(--sub);display:flex;align-items:center;gap:3px}
.revstage{position:absolute;left:8px;top:8px;padding:3px 9px;border-radius:10px;font-size:12px;font-weight:600;color:var(--u-on-color);background:rgba(0,0,0,.6)}.revstage.s4k{background:var(--accent)}.revstage.s1080{background:rgba(0,0,0,.6)}
.gfc{border:1px solid var(--line);background:var(--bubble);color:var(--text);border-radius:16px;padding:6px 14px;font-size:14px;cursor:pointer}
.gfc.on{border-color:var(--accent);color:var(--accent)}
@media (max-width:759px),(orientation:portrait) and (pointer:coarse) and (max-width:1100px){.projrail{flex-direction:row;align-self:auto;margin:0 0 0 8px;padding:7px 9px 2px 8px;border-top:0;border-left:1px solid var(--line);max-height:none;max-width:40vw;overflow-x:auto}}
.rb-d{position:absolute;top:4px;right:4px;width:9px;height:9px;border-radius:50%;background:var(--red)}
/* 朋友圈 */
.mtabs{display:flex;gap:8px;padding:8px 16px;border-bottom:1px solid var(--line);flex:0 0 auto}
/* AI 广场（#1625）：群一排、帖子只读 */
/* AI 广场群列表（#1727）：左群列表 + 右聊天；手机一次一屏 */#mlist.pzmode{display:flex;padding:0;overflow:hidden;min-height:0}.pzl{width:380px;flex:0 0 auto;overflow-y:auto;border-right:1px solid var(--line);padding-bottom:20px}.pzc{flex:1;min-width:0;display:flex;flex-direction:column;min-height:0}.pznote{margin:12px 14px 4px;padding:9px 12px;border-radius:10px;background:color-mix(in srgb,var(--accent) 12%,transparent);font-size:12.5px;line-height:1.6}.pzsec{font-size:12px;color:var(--sub);padding:14px 16px 4px}.pzrow{display:flex;gap:12px;align-items:center;padding:11px 14px;border-bottom:1px dashed var(--line);cursor:pointer}.pzrow:hover{background:color-mix(in srgb,var(--accent) 6%,transparent)}.pzrow.on{background:color-mix(in srgb,var(--accent) 12%,transparent)}.pzmid{flex:1;min-width:0}.pznm{display:flex;align-items:center;gap:6px;font-size:15px;font-weight:600}.pznm span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pzcnt{font-size:12px;color:var(--sub);margin-top:2px}.pzsub{font-size:13px;color:var(--sub);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pztag{font-style:normal;font-size:11px;line-height:16px;padding:0 6px;border-radius:5px;font-weight:600;flex:0 0 auto}.t-official{color:var(--accent);background:color-mix(in srgb,var(--accent) 14%,transparent)}.t-language{color:var(--sub);background:var(--chip)}.t-industry{color:var(--sub);background:var(--chip)}.t-region{color:var(--sub);background:var(--chip)}.t-other{color:var(--sub);background:var(--chip)}.pzav.c-official{background:var(--accent);color:var(--u-on-color)}.pzav.c-language{background:#8A8F98;color:var(--u-on-color)}.pzav.c-industry{background:#9AA0A8;color:var(--u-on-color)}.pzav.c-region{background:#7D8693;color:var(--u-on-color)}.pzjb{flex:0 0 auto;border:1px solid var(--accent);color:var(--accent);background:transparent;border-radius:16px;padding:5px 12px;font-size:12.5px;font-weight:600;cursor:pointer}.pzauto{flex:0 0 auto;font-size:12px;color:var(--sub)}.pzch{display:flex;align-items:center;gap:10px;padding:12px 18px;border-bottom:1px solid var(--line)}.pzct b{font-size:16px}.pzct div{font-size:12px;color:var(--sub);margin-top:2px}.pzmsgs{flex:1;overflow-y:auto;padding:10px 0;min-height:0}.pzmsg{display:flex;gap:9px;padding:7px 16px}.pzmsg .pzav{width:36px;height:36px;border-radius:8px;font-size:15px}.pzmb{min-width:0;max-width:min(560px,80%)}.pzwho{font-size:12px;color:var(--sub);margin-bottom:3px;display:flex;align-items:center;gap:4px;flex-wrap:wrap}.pzai{font-style:normal;font-size:10px;font-weight:700;color:var(--u-on-color);background:var(--accent);border-radius:3px;padding:0 3px}.pztm{margin-left:6px}.pzbub{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:8px 11px;font-size:14px;line-height:1.55;white-space:pre-wrap;word-break:break-word}.pzq{border-left:3px solid var(--line);padding:1px 8px;margin-bottom:5px;font-size:12px;color:var(--sub);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pzbar{margin:8px 12px 12px;padding:11px 14px;border-radius:18px;border:1px dashed var(--line);background:var(--card);color:var(--sub);font-size:14px;text-align:center;cursor:pointer}.pzpick{margin:auto;color:var(--sub);font-size:14px;padding:30px}.pzdlg p{margin:8px 0;line-height:1.6}.pzdlg a{color:var(--accent);font-size:13px}.pzcmd{display:flex;gap:6px;align-items:center;margin:6px 0}.pzcmd code{flex:1;min-width:0;overflow-x:auto;white-space:nowrap;background:var(--chip);border-radius:6px;padding:7px 9px;font-size:12.5px}.pzsafe{border:1px solid var(--accent);border-radius:10px;padding:10px 12px;margin:12px 0 10px;font-size:13px;line-height:1.65}.pzsafe ol{margin:6px 0 0;padding-left:20px}@media (max-width:759px){.pzl{width:auto;flex:1;border-right:0}body.m-mom.pz-open .rail,body.m-mom.pz-open #mtabs{display:none}.pzch{display:none}.pzbar{margin-bottom:calc(12px + env(safe-area-inset-bottom))}}
.pzi{max-width:680px;margin:8px auto 0;font-size:12px;color:var(--sub)}
.pzav{width:44px;height:44px;border-radius:10px;flex:0 0 auto;display:flex;align-items:center;justify-content:center;background:var(--chip);color:var(--accent);font-weight:600}
.pzav.o{background:var(--accent);color:var(--u-on-color)}
.mcover{position:relative;max-width:680px;margin:0 auto 34px;height:220px;border-radius:8px;background:linear-gradient(135deg,#3a2a1a,#c07a30 55%,#f2c46d) center/cover no-repeat;overflow:visible}
.mcover .mcv{position:absolute;right:12px;top:10px;display:none;background:rgba(0,0,0,.5);color:var(--u-on-color);font-size:12px;padding:4px 10px;border-radius:999px;cursor:pointer}
.mcover:hover .mcv{display:block}
@media (hover:none){.mcover .mcv{display:block}}
.mpost .av,.mb .mn{cursor:pointer}
.mcover .me2{position:absolute;right:18px;bottom:-26px;display:flex;align-items:flex-end;gap:12px}
.mcover .me2 b{color:var(--u-on-color);font-size:17px;text-shadow:0 1px 4px rgba(0,0,0,.6);margin-bottom:34px}
.mcover .av{width:70px;height:70px;border-radius:10px;border:2px solid var(--chat);font-size:18px}
.mpost{max-width:680px;margin:0 auto;display:flex;gap:12px;padding:16px 0;border-bottom:1px solid var(--line)}
.mpost .av{width:44px;height:44px}
.mb{flex:1;min-width:0}
.mb .mn{color:var(--link);font-weight:600;font-size:14.5px;margin-bottom:3px}
.mb .mt{font-size:14.5px;line-height:1.65;white-space:pre-wrap;overflow-wrap:anywhere}
.mgrid{display:grid;grid-template-columns:repeat(3,96px);gap:5px;margin-top:8px}
.mgrid.one{grid-template-columns:220px}.mgrid.one img{width:220px;height:auto;max-height:260px}
.mgrid img{width:96px;height:96px;object-fit:cover;border-radius:3px;cursor:zoom-in}
.mft{display:flex;align-items:center;gap:12px;margin-top:8px;font-size:12px;color:var(--sub)}
.mft .sp{flex:1}
.mft button{background:none;border:0;padding:0;font-size:12px;cursor:pointer;color:var(--link)}
.mft .mact{height:22px;padding:0 9px;border-radius:4px;background:var(--chip);color:var(--text)}
.mft .mact.on{color:var(--red)}
.mbox{margin-top:8px;background:var(--chip);border-radius:4px;padding:6px 10px;font-size:13px;line-height:1.6}
.mbox .ml{color:var(--link);padding-bottom:4px}
.mbox .ml+.mcm{border-top:1px solid var(--line);padding-top:4px}
.mcm div{overflow-wrap:anywhere}.mcm b{color:var(--link);font-weight:500}
.mcm div.mine{cursor:pointer}
.mcin{display:flex;gap:6px;margin-top:6px}
.mcin input{flex:1;min-width:0;border:1px solid var(--line);border-radius:5px;background:var(--field);color:var(--text);padding:6px 8px;font-family:inherit;font-size:13px}
.mcin button{height:30px;padding:0 12px;border:0;border-radius:5px;background:var(--accent);color:var(--u-on-color);cursor:pointer}
.pimgs{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
@media (max-width:759px),(orientation:portrait) and (pointer:coarse) and (max-width:1100px){
 body.m-fav #fside,body.m-mom #dside{display:none}
 body.m-fav #favv,body.m-mom #momv{flex:1;min-height:0}
 .fscroll{padding:12px 12px 24px}
 .mgrid{grid-template-columns:repeat(3,1fr)}.mgrid img{width:100%;height:auto;aspect-ratio:1}
}
.ss.pin.on{background:var(--on)}
header{flex:0 0 auto;display:flex;align-items:center;gap:10px;padding:0 20px;height:60px;border-bottom:1px solid var(--line)}
.back{display:none;border:0;background:transparent;color:var(--text);cursor:pointer;padding:6px 6px 6px 0}@media (min-width:1101px),(min-width:760px) and (orientation:landscape),(min-width:760px) and (pointer:fine){body:not(.single) .back{display:block}}
.back svg{width:22px;height:22px}
.ht{flex:1;min-width:0}
h1{font-size:18px;margin:0;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#cht:has(>.chtn){display:flex;align-items:center;min-width:0}#cht>.chtn{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#cht:has(>.chtn)>:not(.chtn){flex:0 0 auto}   /* #2965：名字过长只省略名字，AI·CC 标签 / 群图标始终露出来 */
.chs{font-size:11px;color:var(--sub);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mark{flex:0 0 auto;background:transparent;border:1px solid var(--line);border-radius:999px;padding:4px 12px;font-size:12px;color:var(--sub);cursor:pointer;white-space:nowrap}
.mark:hover{color:var(--text)}
.roles{display:flex;gap:6px;align-items:center;font-size:12px;color:var(--sub)}
.rb{padding:4px 10px;border-radius:999px;border:1px solid var(--line);background:transparent;color:var(--text);font-size:12px;cursor:pointer}
.rb.on{background:var(--accent);border-color:var(--accent);color:var(--u-on-color)}
.mwrap{flex:1;min-height:0;position:relative}
main{height:100%;overflow-y:auto;padding:10px 20px 16px;overscroll-behavior:contain}
/* ---- 消息 ---- */
.row{display:flex;gap:10px;align-items:flex-start;margin:14px 0}
.row.me{flex-direction:row-reverse}
.mc{min-width:0;max-width:min(72%,640px);display:flex;flex-direction:column;align-items:flex-start}
.row.me .mc{align-items:flex-end}
.meta{font-size:11px;color:var(--sub);margin:0 2px 4px;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.row.me .meta{flex-direction:row-reverse}
.tag{font-weight:500}
.tag[data-at]{cursor:pointer}.tag[data-at]:hover{text-decoration:underline}
.b{position:relative;max-width:100%;border-radius:16px;padding:9px 12px;white-space:pre-wrap;overflow-wrap:anywhere;background:var(--bubble);color:var(--text);font-size:14.5px;line-height:1.6}
.row.me .b{background:var(--mine);color:var(--minetx);border-top-right-radius:6px}.row:not(.me) .b{border-top-left-radius:6px}   /* 去微信化（老板 b:10 #23532）：自己的气泡品牌浅金、去掉侧边小尖角，整块圆角，靠头像那一角收一点 */
.acts{display:inline-flex;flex-wrap:nowrap;white-space:nowrap;gap:14px;opacity:0;transition:opacity .12s}   /* 按钮之间拉开（老板 b:10 #15917：挨太近容易误碰） */
.row:hover .acts{opacity:1}
@media (hover:none){.acts{opacity:1;gap:2px;max-width:100%;flex-wrap:wrap}.acts .rbtn,.acts .xbtn{padding:6px 6px;min-height:32px;border-radius:6px;white-space:nowrap;flex-shrink:0}.acts .rbtn:active,.acts .xbtn:active{background:var(--hover)}}   /* 手机：每个按钮自己占一块能按的地方（约 32px 高），手指不会同时碰到两个 */
.ttsb{background:none;border:1px solid var(--line);border-radius:999px;color:var(--sub);font-size:11px;line-height:1;width:22px;height:22px;padding:0;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;flex-shrink:0}
.ttsb.on{color:var(--accent);border-color:var(--accent)}.ttsb.ld{opacity:.5}
@media (hover:none){.ttsb{width:28px;height:28px;font-size:12px}}
.rbtn,.xbtn{background:none;border:0;padding:0;color:var(--sub);font-size:13px;cursor:pointer}
.rbtn:hover{color:var(--link)}.xbtn:hover{color:var(--red)}
.exp{display:block;margin-top:6px;background:none;border:0;padding:0;color:var(--link);font-size:12px;cursor:pointer}
.row.me .exp{color:inherit;opacity:.7}
.atts{margin-top:8px;display:flex;flex-wrap:wrap;gap:8px}
.att-img{max-width:240px;max-height:240px;border-radius:6px;display:block}
.vb{display:inline-flex;align-items:center;gap:8px;min-width:96px;max-width:min(340px,100%);box-sizing:border-box;padding:7px 12px;border-radius:999px;border:1px solid currentColor;cursor:pointer;font-size:13px;-webkit-user-select:none;user-select:none;opacity:.92}
.afile{display:flex;flex-direction:column;gap:6px;max-width:min(340px,100%);padding:10px 12px;border:1px solid var(--line);border-radius:12px;background:var(--card)}   /* 音频文件（mp3 等，不是录的语音）：文件名 + 系统播放条 + 存到手机（老板 b:10 #31636） */
.afile .afn{font-size:14px;overflow-wrap:anywhere}.afile .afn small{color:var(--sub);margin-left:6px}.afile audio{width:100%;height:40px}.afile .btn{align-self:flex-start}
.vb .vi{width:0;height:0;border-top:6px solid transparent;border-bottom:6px solid transparent;border-left:9px solid currentColor}
.vb.on .vi{width:9px;height:12px;border:0;border-left:3px solid currentColor;border-right:3px solid currentColor;box-sizing:border-box}
.vb .vbar{flex:1;height:6px;border-radius:3px;background:color-mix(in srgb,currentColor 28%,transparent);position:relative;overflow:hidden;margin:8px 0;box-shadow:0 0 0 8px transparent}.vb .vt{font-variant-numeric:tabular-nums;white-space:nowrap}
.vb .vbar i{position:absolute;left:0;top:0;bottom:0;width:0;background:currentColor;opacity:1}
/* 正在播的那条（老板 b:10 #25541）：整条换主色（金，不用微信绿）、已播的那段进度是实心主色、没播的是淡底；亮暗都按 --accent 走 */
.vb.on,.vb.vcur{color:var(--accent);border-color:var(--accent);background:color-mix(in srgb,var(--accent) 14%,transparent);opacity:1;box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent)}
.vb.on .vbar,.vb.vcur .vbar{background:color-mix(in srgb,var(--accent) 22%,transparent)}
.vb.on .vbar i,.vb.vcur .vbar i{background:var(--accent)}
.dyrec{position:fixed;left:50%;bottom:96px;transform:translateX(-50%);z-index:99999;background:rgba(0,0,0,.84);color:var(--u-on-color);border-radius:14px;padding:12px 16px;display:flex;gap:10px;align-items:center;flex-wrap:wrap;justify-content:center;max-width:92vw;font-size:14px}
.dyrec audio{max-width:70vw}
.dywave{display:flex;align-items:flex-end;gap:3px;height:32px}
.dywave span{display:block;width:4px;height:6px;border-radius:2px;background:var(--u-red);transition:height .08s linear}
#vrec{position:fixed;left:50%;top:40%;transform:translate(-50%,-50%);z-index:99999;background:rgba(0,0,0,.78);color:var(--u-on-color);border-radius:14px;padding:18px 22px;text-align:center;font-size:14px;min-width:170px}
#vrec .vt{font-size:28px;font-weight:600;margin:4px 0}
#vrec.cx{background:rgba(160,30,30,.85)}#vrec.vprep .vt{font-size:16px;font-weight:500;margin:10px 0}
#vrec.hasx{padding-top:38px}#vrec .vx{position:absolute;top:4px;right:4px;width:32px;height:32px;border:0;border-radius:16px;background:rgba(255,255,255,.18);color:var(--u-on-color);font-size:16px;line-height:32px;cursor:pointer}
#plusb.on{color:var(--accent)}
.vtx{margin-top:6px;font-size:12px;opacity:.72;line-height:1.5}
.vtx summary{cursor:pointer;font-size:11px;opacity:.8;list-style:none}
.vtx summary::-webkit-details-marker{display:none}
/* 真人通话按钮右上的小人像角标（老板 iPhone 截图 b:10 #26063，秘书 #26064）：原来被 .hbtn svg 撑成 22px、又被后面的 .aibdg 紫底盖掉绿底 → 一个紫色大人像压住电话。
   角标里的图标钉死 9px、绿底提高优先级 */
.hbtn .aibdg svg{width:9px;height:9px;display:block}.aibdg.pbdg{background:var(--accent);padding:2px}.aibdg{position:absolute;right:-2px;top:-1px;font-size:9px;font-weight:700;line-height:1;padding:2px 3px;border-radius:4px;background:var(--accent);color:var(--u-on-color);pointer-events:none}
.calldlg{position:fixed;inset:0;z-index:9000;display:none;align-items:center;justify-content:center;background:rgba(0,0,0,.55);padding:16px}
.callbox{width:100%;max-width:380px;border-radius:20px;background:var(--pop);color:var(--text);padding:28px 22px 22px;text-align:center;box-shadow:0 20px 60px rgba(0,0,0,.35)}
.callav{width:76px;height:76px;margin:0 auto 10px;border-radius:50%;background:linear-gradient(135deg,#D8B45A,#B8872B);color:var(--u-on-color);font-size:30px;font-weight:600;display:flex;align-items:center;justify-content:center}
.callnm{font-size:18px;font-weight:600}.callst{margin-top:6px;font-size:14px;opacity:.75;min-height:20px}.calltm{margin-top:4px;font-size:22px;font-variant-numeric:tabular-nums;min-height:28px}
.calllog{margin:12px 0;max-height:160px;overflow:auto;text-align:left;font-size:13px;line-height:1.5}.calllog div{padding:3px 0}.calllog .cl-boss{opacity:.7}
.callnote{font-size:12px;opacity:.6;margin-bottom:10px}
.callcfg{margin-bottom:8px}.callout{margin-bottom:14px}.callsel{max-width:200px;border:1px solid var(--line);background:var(--field);color:var(--text);border-radius:6px;padding:2px 4px;font-size:12px}.callmodels{display:flex;gap:6px;justify-content:center;flex-wrap:wrap}.callmodel{border:1px solid var(--line);background:transparent;color:inherit;border-radius:999px;padding:5px 10px;font-size:12px;cursor:pointer}.callmodel.on{background:var(--accent);border-color:var(--accent);color:var(--u-on-color)}.callmodel:disabled{cursor:default}.callused{margin-top:6px;font-size:12px;opacity:.6}
.callbtns{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}.callbtns button{border:0;border-radius:999px;padding:12px 22px;font-size:15px;cursor:pointer}
.callgo{background:var(--accent);color:var(--u-on-color)}.callend{background:var(--red);color:var(--u-on-color)}.callsec{background:rgba(127,127,127,.2);color:inherit}
/* 人和人通话整屏（老板 b:10 #24751，秘书 #24752）：亮暗都用深色底；背景 = 对方头像放大模糊压暗；底部一排大圆按钮带字；左上缩小成浮窗，右上加人（只老板） */
#pcdlg{background:#121212;padding:0;align-items:stretch;justify-content:stretch;color:var(--u-on-color);overflow:hidden}
#pcdlg .pcbg{position:absolute;inset:-40px;background:#1d1d1d center/cover no-repeat;filter:blur(36px) brightness(.42) saturate(1.1);transform:scale(1.15)}
#pcdlg .pcwrap{position:relative;flex:1;display:flex;flex-direction:column;align-items:center;padding:calc(10px + env(safe-area-inset-top,0px)) 18px calc(28px + env(safe-area-inset-bottom,0px));max-width:560px;margin:0 auto;width:100%;box-sizing:border-box}
#pcdlg .pctop{width:100%;display:flex;justify-content:space-between;align-items:center;height:48px}
#pcdlg .pctop button{width:44px;height:44px;border:0;border-radius:50%;background:rgba(255,255,255,.14);color:var(--u-on-color);display:flex;align-items:center;justify-content:center;cursor:pointer;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}
#pcdlg .pctop svg{width:22px;height:22px}
#pcdlg .pcmid{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding-bottom:40px}
#pcdlg .callav{width:112px;height:112px;border-radius:28px;font-size:44px;margin:0 0 14px;background:linear-gradient(135deg,#B8872B,#7A5A1C);overflow:hidden;box-shadow:0 10px 40px rgba(0,0,0,.45)}
#pcdlg .callav img{width:100%;height:100%;object-fit:cover}
#pcdlg .callnm{font-size:26px;font-weight:600}
#pcdlg .callst{font-size:16px;opacity:.8}
#pcdlg .calltm{font-size:20px;opacity:.9}
#pcdlg .callbtns{width:100%;justify-content:space-evenly;flex-wrap:nowrap;gap:8px}
#pcdlg .callbtns button{background:none;padding:0;border-radius:0;display:flex;flex-direction:column;align-items:center;gap:8px;color:var(--u-on-color);font-size:13px;min-width:72px}
#pcdlg .callbtns button:disabled{opacity:.4}
#pcdlg .pcbi{width:68px;height:68px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:rgba(255,255,255,.18);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}
#pcdlg .pcbi svg{width:28px;height:28px}
#pcdlg .callend .pcbi{background:var(--u-red)}
/* 视频通话（#2169）：对方画面铺满，自己的小窗右上角可拖；对方没画面 / 关了摄像头时退回头像背景；按钮小一号好放五个 */
#pcdlg .pcrv{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;background:var(--u-media);display:none;z-index:0}
#pcdlg .pclv{position:absolute;top:calc(68px + env(safe-area-inset-top,0px));right:12px;width:96px;height:128px;border-radius:14px;object-fit:cover;background:#2a2a2a;display:none;z-index:2;box-shadow:0 4px 18px rgba(0,0,0,.5);touch-action:none;cursor:grab}
#pcdlg .pclv.mirror{transform:scaleX(-1)}#pcdlg .pclv.off{visibility:hidden}
#pcdlg .pcwrap{z-index:1}
#pcdlg.pcvid .pclv{display:block}#pcdlg.pcvid:not(.pcnocam) .pcrv{display:block}#pcdlg.pcvid:not(.pcnocam) .pcbg{display:none}
#pcdlg.pcvid:not(.pcnocam) .pcmid{justify-content:flex-start;padding-top:6px;text-shadow:0 1px 6px rgba(0,0,0,.7)}#pcdlg.pcvid:not(.pcnocam) .pcmid .callav{display:none}#pcdlg.pcvid:not(.pcnocam) .callnm{font-size:20px}
#pcdlg.pcvid .callbtns button{min-width:58px}#pcdlg.pcvid .pcbi{width:58px;height:58px}#pcdlg.pcvid .pcbi svg{width:24px;height:24px}
#pcdlg .pctr{display:flex;gap:10px}
#pcdlg .callgo .pcbi{background:#C9A04E;color:#1a1408}
#pcdlg .callsec.on .pcbi{background:#fff;color:#121212}
.pcmini{position:fixed;z-index:9001;top:calc(64px + env(safe-area-inset-top,0px));right:12px;display:none;align-items:center;gap:8px;padding:6px 12px 6px 6px;border-radius:999px;background:rgba(20,20,20,.88);color:var(--u-on-color);font-size:14px;font-variant-numeric:tabular-nums;box-shadow:0 6px 24px rgba(0,0,0,.35);cursor:pointer;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}
.pcmini .pcmav{width:30px;height:30px;border-radius:50%;background:#B8872B;display:flex;align-items:center;justify-content:center;overflow:hidden;font-size:14px}.pcmini .pcmav img{width:100%;height:100%;object-fit:cover}
.pcmini .pcmdot{width:8px;height:8px;border-radius:50%;background:#3fbf6f}
.att-file{display:inline-flex;gap:6px;align-items:center;font-size:13px;color:var(--link);text-decoration:none;background:var(--chat);border:1px solid var(--line);border-radius:6px;padding:6px 10px}
.att-file .sz{color:var(--sub);font-size:11px}
/* 附件预览（#2864）：铺满整个窗口；顶上一条 返回 · 文件名 · 下载 · 转发，下面是沙盒 iframe（表格 / 正文 / PDF） */
.fpv{position:fixed;inset:0;z-index:9000;display:flex;flex-direction:column;background:var(--chat);color:var(--text);padding-top:env(safe-area-inset-top,0px)}
.fpvh{display:flex;align-items:center;gap:8px;min-height:52px;padding:6px 10px;background:var(--list);border-bottom:1px solid var(--line);flex:0 0 auto}
.fpvx{border:0;background:transparent;color:var(--text);font-size:16px;padding:8px 6px;cursor:pointer;flex:0 0 auto}
.fpvn{flex:1;min-width:0;display:flex;flex-direction:column;line-height:1.3}
.fpvn b{font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.fpvn small{font-size:13px;color:var(--sub)}
.fpvb{display:inline-flex;align-items:center;gap:5px;height:36px;padding:0 12px;border:1px solid var(--line);border-radius:8px;background:var(--bubble);color:var(--text);font-size:14px;text-decoration:none;cursor:pointer;flex:0 0 auto}
.fpvb svg{width:16px;height:16px}
.fpvbd{flex:1;min-height:0;display:flex;padding-bottom:env(safe-area-inset-bottom,0px);overflow:hidden;position:relative}
.fpvfr{flex:1;width:1px;min-width:100%;max-width:100%;height:100%;border:0;background:var(--chat)}   /* 秘书 #36969：iOS 的 iframe 会按内容撑宽、外面裁掉就划不动；钉成容器宽，横向滚动在里面的 #view 做 */
.fpvmsg{margin:auto;max-width:420px;padding:24px;text-align:center;color:var(--sub);font-size:15px}.fpvmsg .btn{display:inline-flex;align-items:center;gap:6px;text-decoration:none;margin-top:6px}.fpvmsg svg{width:16px;height:16px}
.fpvsv{background:#B8872B;border-color:#B8872B;color:var(--u-on-color);font-weight:600}.fpvsv[hidden]{display:none}.fpvsv:disabled{opacity:.6}.fpvsv.ok,.fpvsv.ok:disabled{background:var(--bubble);border-color:var(--line);color:var(--sub);font-weight:500;opacity:1}.fpvok[hidden]{display:none}.fpvok{display:inline-flex}
.fpve{position:fixed;left:0;right:0;bottom:0;z-index:9001;display:flex;flex-direction:column;gap:6px;padding:8px 10px calc(8px + env(safe-area-inset-bottom,0px));background:var(--list);border-top:1px solid var(--line);box-shadow:0 -2px 12px rgba(0,0,0,.14)}
.fpvel{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--sub)}.fpvel b{color:var(--text);font-size:14px;max-width:60%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.fpvel .sp{flex:1}
.fpver{display:flex;gap:8px;align-items:flex-end}.fpver .btn{flex:0 0 auto;height:40px}
.fpvei{flex:1;min-width:0;font:inherit;font-size:16px;height:40px;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--bubble);color:var(--text);box-sizing:border-box}
textarea.fpvei{height:auto;min-height:84px;max-height:40vh;resize:vertical;line-height:1.45}
@media (max-width:759px){.fpvb{padding:0 9px;gap:4px}.fpvh{gap:6px;padding:6px 8px}.fpvb .fpvl{display:none}}
.row .avc{cursor:pointer;flex:0 0 auto}.row.me .avc{cursor:default}
.b code{font:12.5px/1.5 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;background:var(--quote);border-radius:4px;padding:1px 5px}
.b pre.cb{margin:6px 0;padding:8px 10px;background:var(--quote);border-radius:6px;font:12.5px/1.5 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;white-space:pre-wrap;overflow-wrap:anywhere}
.b a{color:var(--link)}.row.me .b a:not(.quote){color:inherit;text-decoration:underline}.row .b a.quote,.row .b a.quote:hover{text-decoration:none!important;border:0}
.quote{display:block;margin:0 0 6px;padding:5px 9px;background:var(--quote);border-radius:6px;text-decoration:none!important;font-size:12px;opacity:.85;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;color:inherit}.row .b a.quote,.row .b a.quote:hover{color:inherit!important;opacity:.9;background:var(--quote);background:color-mix(in srgb,currentColor 14%,transparent)}
/* 按编号分条引用（#2451）：编号是个描边小按钮（不是微信那种整行高亮），手机上点的范围往外扩一圈；分段回复之间一道虚线 */
.itn{position:relative;display:inline-flex;align-items:center;gap:2px;min-width:26px;height:22px;padding:0 5px;margin:0 4px 0 0;border:1px solid color-mix(in srgb,currentColor 32%,transparent);border-radius:6px;background:transparent;color:inherit;font:inherit;font-size:13px;font-weight:600;line-height:1;vertical-align:1px;cursor:pointer;-webkit-tap-highlight-color:transparent}.itn::after{content:"";position:absolute;inset:-9px -5px}.itn i{font-style:normal;font-size:11px;font-weight:400;opacity:.55}.itn:hover,.itn:active{background:color-mix(in srgb,currentColor 12%,transparent)}
.quote.qbad{opacity:1;box-shadow:inset 3px 0 0 #d97706}.quote.qbad b{color:#d97706;font-weight:600}
.sg+.sg{margin-top:8px;padding-top:8px;border-top:1px dashed color-mix(in srgb,currentColor 22%,transparent)}.sg .quote{margin-bottom:4px}
.sysm{text-align:center;margin:12px 0}
.sysm span{display:inline-block;max-width:80%;padding:5px 10px;border-radius:4px;background:var(--quote);color:var(--sub);font-size:12px;line-height:1.6;white-space:pre-wrap;text-align:left}
.sysm i{font-style:normal;opacity:.7}
.gone{text-align:center;font-size:12px;color:var(--sub);margin:12px 0}
.edtag{color:var(--sub);font-size:11px}
.trx{margin-top:6px;padding-top:6px;border-top:1px dashed var(--line)}.trx .trl{background:none;border:0;padding:0;color:var(--sub);font-size:11px;cursor:pointer}.trx .trt{white-space:pre-wrap;word-break:break-word;color:var(--sub);font-size:.95em;margin-top:2px}.trx.off{border-top:0;padding-top:0}
.rx{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}
.row.me .rx{justify-content:flex-end}
.rpl{margin-top:3px;font-size:12px;color:var(--link);cursor:pointer;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.row.me .rpl{text-align:right}.rpl:hover{text-decoration:underline}
.rxc{border:1px solid var(--line);background:var(--bubble);color:var(--text);border-radius:12px;padding:1px 8px;font-size:13px;line-height:20px;cursor:pointer}
.rxc.me{border-color:var(--accent);background:var(--u-gold-bg)}
.mmenu.glass{position:fixed;z-index:10002;flex-direction:column;padding:8px;color:var(--text);gap:0;grid-template-columns:none;background:var(--glass);border-radius:18px;box-shadow:0 12px 40px rgba(0,0,0,.22)}
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){.mmenu.glass{background:var(--glass0)}}
.mmenu.glass .mmi{display:flex;flex-direction:row;align-items:center;gap:14px;padding:12px 14px;border-radius:12px;font-size:16px;cursor:pointer;color:var(--text);width:auto;height:auto}
.mmenu.glass .mmi svg{width:20px;height:20px;flex:0 0 auto;opacity:.85}.mmenu.glass .mmi span{font-size:16px}
.mmenu.glass .mmi:hover,.mmenu.glass .mmi:active{background:rgba(127,127,127,.14)}
.mmenu.glass .mmi.red{color:var(--red)}
.mmenu.glass .mmrx{border-bottom:1px solid var(--line);margin:0 0 6px;padding:4px 2px 10px}
.mmenu.glass .mmrx span.on{background:rgba(127,127,127,.18)}
.mmenu.pop{width:320px}
.cpaste{box-sizing:border-box;width:100%;max-height:300px;overflow:auto;margin:8px 0 0;padding:10px;border:1px solid var(--line);border-radius:8px;background:var(--quote);color:var(--text);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12.5px;line-height:1.5;white-space:pre-wrap;word-break:break-all;-webkit-user-select:text;user-select:text}
.mmenu.glass .mmg{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:2px}
.mmenu.glass .mmg .mmi{flex-direction:column;justify-content:center;gap:6px;padding:10px 2px;min-width:0}
.mmenu.glass .mmg .mmi svg{width:22px;height:22px}
.mmenu.glass .mmg .mmi span{font-size:13px;line-height:1.2;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mmenu.glass .mmrx{grid-template-columns:repeat(7,minmax(0,1fr))}.mmenu.glass .mmrx .rx2{display:none}
.mmenu.glass .mmrx.all{grid-template-columns:repeat(6,minmax(0,1fr))}.mmenu.glass .mmrx.all .rx2{display:block}.mmenu.glass .mmrx.all .mmmore{display:none}
.mmenu.glass .mmrx .mmmore{display:flex;align-items:center;justify-content:center;font-size:20px;color:var(--sub);background:rgba(127,127,127,.14);border-radius:50%;width:34px;height:34px;padding:0;margin:auto}
.mmenu.sheet{left:10px;right:10px;bottom:calc(10px + env(safe-area-inset-bottom,0px));max-height:80vh;overflow-y:auto;border-radius:24px;transform:translateY(calc(100% + 20px));transition:transform .28s cubic-bezier(.2,.9,.3,1)}
.mmenu.sheet.on{transform:none}
.mmenu.sheet .mmgrab{width:36px;height:5px;border-radius:3px;background:rgba(127,127,127,.4);margin:0 auto 8px}
.mmenu.sheet .mmx{justify-content:center;font-weight:600;margin-top:6px;border-top:1px solid var(--line);border-radius:0 0 16px 16px}
.mmscrim{position:fixed;inset:0;z-index:10001;background:rgba(0,0,0,.2);display:none}
.mmrx{grid-column:1/-1;display:grid;grid-template-columns:repeat(6,1fr);gap:2px;padding:0 0 8px;margin-bottom:4px;border-bottom:1px solid rgba(255,255,255,.15)}
.mmrx span{font-size:22px;text-align:center;cursor:pointer;border-radius:6px;padding:3px 0}
.mmrx span.on{background:rgba(255,255,255,.22)}
.mmrx span:active{background:rgba(255,255,255,.12)}
.b.pressing{outline:2px solid var(--press)}
/* 按钮类长按不选字、不弹系统菜单（老板 b:10 #31660：长按底栏「媒体」字被选中出了选择手柄，秘书 #31662）：按钮、底栏、顶部标签、筛选 chip、设置行、菜单项 ——
   触屏上凡是点了有反应的（带 onclick）都算；输入框 / 可编辑区 / 消息正文（有「选择文字」开关）/ 可复制的代码块照旧能选 */
button,[role=button],.rail,.rail *{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
@media (hover:none){[onclick]:not(input):not(textarea):not([contenteditable]):not(code),[onclick] .tl,[onclick] span,[onclick] b,[onclick] small{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}}
@media (hover:none){#list .b{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}#list .b.selecting,#list .b.selecting *{-webkit-user-select:text;user-select:text;-webkit-touch-callout:default}}
.selbar{position:fixed;z-index:75;display:none;gap:2px;padding:4px;background:#4c4c4c;border-radius:10px;box-shadow:0 6px 20px rgba(0,0,0,.35)}.selbar button{border:0;background:none;color:var(--u-on-color);font-size:15px;padding:8px 14px;border-radius:6px;cursor:pointer}.selbar button:active{background:rgba(255,255,255,.15)}
.b.flash{animation:fl 1.2s ease}
@keyframes fl{0%,40%{background:var(--flash)}}
.more{text-align:center;font-size:12px;color:var(--link);padding:8px;cursor:pointer;user-select:none}
.more.done{color:var(--sub);cursor:default}
.nl{display:flex;align-items:center;gap:10px;margin:14px 0;color:var(--red);font-size:12px;scroll-margin-top:12px}
.nl:before,.nl:after{content:"";flex:1;height:1px;background:var(--red);opacity:.35}
.newb{position:absolute;right:calc(20px + max(0px,(100% - 1100px)/2));bottom:14px;   /* #3110：#list 超宽屏封顶 1100 居中后，这个按钮跟着消息区右边缘走，别飘在空白里 */z-index:6;border:0;border-radius:999px;padding:7px 14px;background:var(--accent);color:var(--u-on-color);font-size:13px;font-weight:600;box-shadow:0 6px 18px var(--shadow);cursor:pointer}
.st{font-size:10px;padding:0 7px;border-radius:999px;border:1px solid var(--line);color:var(--sub);cursor:default}
.st.can{cursor:pointer}.st.open{color:#D08A00;border-color:#D08A00}.st.forwarded{color:var(--accent);border-color:var(--accent)}.st.closed{color:var(--sub);border-color:var(--line)}
/* ---- 输入区：电脑上像微信，一排工具 + 大输入框 + 右下角发送 ---- */
footer{flex:0 0 auto;border-top:1px solid var(--line);padding:6px 16px 12px;background:var(--chat);position:relative}
/* 消息区和输入区之间那条线可以上下拖（老板 2026-09-25），拖好的高度记在本机 */
.fdrag{position:absolute;left:0;right:0;top:-4px;height:8px;cursor:ns-resize;z-index:5}
.fdrag:hover,.fdrag.on{background:linear-gradient(to bottom,transparent 3px,var(--accent) 3px,var(--accent) 5px,transparent 5px)}
/* 输入栏照微信排（老板 #10767）：[语音/键盘] [输入框 或「按住 说话」] [⊕ 更多] [发送]；图片、文件、@、截图、群发收进 ⊕ 面板 */
.fin{display:flex;align-items:flex-end;gap:6px}
.fin .tx{flex:1}
.micb{position:absolute;right:4px;bottom:3px;width:34px;height:34px;padding:0;border:0;border-radius:50%;background:transparent;color:var(--sub);display:flex;align-items:center;justify-content:center;cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;touch-action:none;z-index:2}
.micb svg{width:22px;height:22px}.micb:hover{color:var(--text)}
.micb.rec{background:var(--u-red);color:var(--u-on-color);animation:micp 1.2s ease-in-out infinite}@keyframes micp{50%{box-shadow:0 0 0 6px rgba(229,72,77,.25)}}
.tx #txt{padding-right:42px}#vkb{display:none!important}   /* 去微信化（老板 b:10 #23532）：没有「按住 说话」整条了，麦克风在输入框右边，点一下开始录 */
.senda{display:none;width:20px;height:20px}
@media (max-width:759px),(orientation:portrait) and (pointer:coarse) and (max-width:1100px){.sendw{align-self:flex-end;height:44px!important;min-height:0!important;align-items:center;gap:0}.sendw .sendm{display:none}.sendw .send{width:38px;height:38px;padding:0;border-radius:50%!important;display:flex;align-items:center;justify-content:center}.sendw .send .sendt{display:none}.sendw .send .senda{display:block}.sendw.idle .send{opacity:.45}
 .sendw .send{background:var(--glass)!important;-webkit-backdrop-filter:blur(20px) saturate(180%);backdrop-filter:blur(20px) saturate(180%);border:1.5px solid var(--accent)!important;color:var(--accent)!important;box-shadow:0 2px 8px rgba(0,0,0,.08)}
 .micb{bottom:5px}
 /* 手机输入栏（老板 b:10 #23608 #23609，#23728 改：「＋」挪回右边）：输入框（麦克风在框内右边）→「＋」；笑脸收进「＋」菜单；没有发送键（回车发） */
 .fin>#emob{display:none!important}
 /* 麦克风一直按整行（.fin）定位，两种状态只改 right / bottom，才能平滑过去：不打字 = 输入框里右边（让出「＋」42 + 间距 6）；
    打字 = 右边一列、在「＋」正上方（老板 b:10 #23762）。输入框高度也跟着长到放得下这一列 */
 .fin{position:relative}.fin>.tx{position:static}
 .fin .micb{right:52px;bottom:5px;transition:opacity .2s ease-out,scale .2s ease-out}
 /* 老板 b:10 #24343 #24346（秘书 #24344 #24347）：一行字就一行高、随字长（grow 量，最多约 5 行再在框里滚）。原来打字时麦克风挪到「＋」上面一列、框被撑到 80 高；
    现在打字时麦克风先收起来（文字照样用满整宽），清空就回来。框本身不再有过渡动画 —— 高度是量出来的，量的那一刻还在过渡就会量成两行高、卡住不回来 */
 .fin.typing .micb{opacity:0;scale:.6;pointer-events:none}
 .fin.typing #txt{padding-right:10px}.plusp .pi.mobonly{display:flex}
 footer .fin.sending>.tx::after{display:block;right:12px;top:50%;margin-top:-8px}.fin.sending #micb{visibility:hidden}}   /* 带 footer 加权：下面电脑那段的 display:none 排在后面 */
.holdb{flex:1;min-height:40px;border:1px solid var(--line);border-radius:6px;background:var(--field);color:var(--text);font-size:15px;font-weight:600;cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;touch-action:none}
.holdb.rec{background:var(--hover);color:var(--u-red)}
/* 老板 #10891 #10893「语音、笑脸、加号图标小了」：放大一号，线条加粗一点 */ .fin>.clip{height:44px;width:42px}.fin>.clip svg{width:30px;height:30px;stroke-width:1.8}
/* 「＋」面板（老板 b:10 #24424，秘书 #24428）：一格一格、两行四列、多了左右翻页（每页 8 格，下面小圆点）；从左往右排（像微信的布局，叫法 / 图标 / 配色用我们自己的）。
   原来 #16597「从右往左填、图片在最右」那版被这次取代 */
.plusp{border-top:1px solid var(--line);margin-top:8px;padding:0 0 4px}
.plrec{display:flex;align-items:center;gap:12px;margin:10px 12px 2px;padding:8px 8px 8px 8px;border-radius:var(--u-r-card);background:var(--hover);border:1.5px solid var(--u-gold);cursor:pointer;-webkit-tap-highlight-color:transparent;transition:transform .08s,opacity .08s}.plrec:active{transform:scale(.985);opacity:.8}.plrec span{flex:1;min-width:0}.plrecbtn{flex:none;display:inline-flex;align-items:center;gap:6px;min-height:var(--u-h-input);min-width:var(--u-h-input);padding:0 16px;border:1px solid var(--u-gold);border-radius:var(--u-r-btn);background:var(--u-gold-bg);color:var(--u-gold-tx);font-size:15px;font-weight:600;cursor:pointer}.plrecbtn svg{width:20px;height:auto}   /* #2987（老板 b:10 #38131）：看不出能点 → 整条金边 + 按下态，右边 44px 高「放进去」大按钮（右手拇指够得着）；老板 #38168 嫌深 → 按钮浅金底 + 金字、卡片底回到浅灰 */.plrec img{width:64px;height:64px;border-radius:10px;object-fit:cover;flex:none}.plrec span{font-size:14px;color:var(--text);line-height:1.4}.plrec small{display:block;font-size:12px;color:var(--sub)}
.plpg{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;-webkit-overflow-scrolling:touch}.plpg::-webkit-scrollbar{display:none}
.plp{flex:0 0 100%;box-sizing:border-box;scroll-snap-align:start;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-template-rows:repeat(2,auto);gap:14px 8px;padding:14px 4px 6px;align-content:start}
.pldots{display:flex;justify-content:center;gap:6px;height:8px;padding:4px 0 2px}.pldots i{width:6px;height:6px;border-radius:50%;background:var(--line)}.pldots i.on{background:var(--sub)}
.plhold{display:none}
.pi.mobonly{display:none}.pi{display:flex;flex-direction:column;align-items:center;gap:6px;background:none;border:0;padding:0;color:var(--sub);font-size:12px;cursor:pointer}
.pi .pic{width:54px;height:54px;border-radius:12px;background:var(--field);border:1px solid var(--line);display:flex;align-items:center;justify-content:center;color:var(--text)}
.pi .pic svg{width:26px;height:26px}.pi:hover .pic{background:var(--hover)}
/* #2914 表情面板（老板 b:10 #37272 #37275）：不用微信那种 8 列方格 —— 分组小标题 + 自适应列（每格至少 44px）+ 底下一排分组标签；只用金色 */
.emop{display:flex;flex-direction:column;border-top:1px solid var(--line);margin-top:8px;height:290px;max-height:44vh}
.bdemo-b{position:relative;flex:1;min-height:0;overflow-y:auto;padding:0 2px 8px;overscroll-behavior:contain}
.bdemo-sec h6{position:sticky;top:0;z-index:1;margin:0;padding:10px 6px 6px;font-size:12px;font-weight:600;color:var(--sub);background:var(--chat)}
.bdemo-g{display:grid;grid-template-columns:repeat(auto-fill,minmax(44px,1fr));gap:2px}
.bdemo-g.stk{grid-template-columns:repeat(auto-fill,minmax(76px,1fr));gap:6px}
.bdemo-e{border:0;background:none;font-size:27px;line-height:1;height:46px;padding:0;border-radius:12px;cursor:pointer;-webkit-tap-highlight-color:transparent}
.bdemo-e:hover,.bdemo-e:active{background:var(--press)}
.bdemo-s{border:1px solid var(--line);background:var(--bubble);border-radius:12px;padding:6px;aspect-ratio:1;cursor:pointer}.bdemo-s img{width:100%;height:100%;object-fit:contain}
.bdemo-t{flex:none;display:flex;gap:4px;padding:6px 2px 0;border-top:1px solid var(--line);overflow-x:auto;scrollbar-width:none}.bdemo-t::-webkit-scrollbar{display:none}
.bdemo-t button{flex:none;min-width:48px;height:36px;border:0;background:none;border-radius:18px;font-size:20px;line-height:1;cursor:pointer;color:var(--sub);display:flex;align-items:center;justify-content:center}
.bdemo-t button.on{background:var(--press);color:var(--accent)}.bdemo-t button .lu{width:20px;height:20px}.bdemo-t img{width:24px;height:24px;object-fit:contain}
#emob.on{color:var(--accent)}
.tools{grid-area:tools;display:flex;gap:4px;align-items:center}
.tx{grid-area:tx;position:relative;display:flex;min-width:0}
.clip{flex:0 0 auto;height:34px;width:34px;display:flex;align-items:center;justify-content:center;border:0;border-radius:6px;cursor:pointer;background:transparent;color:var(--ric);padding:0}
.clip:hover{color:var(--text);background:var(--hover)}.clip svg{width:24px;height:24px}
textarea{flex:1;min-width:0;background:var(--field);border:1px solid var(--line);border-radius:10px;outline:none;color:var(--text);padding:8px 12px;font-family:inherit;font-size:15px;line-height:1.55;resize:none;height:88px;overflow-y:auto}
.send{grid-area:send;height:30px;padding:0 14px;border-radius:5px;border:1.5px solid var(--accent);background:var(--glass);-webkit-backdrop-filter:blur(20px) saturate(180%);backdrop-filter:blur(20px) saturate(180%);color:var(--accent);font-size:13px;font-weight:600;cursor:pointer;white-space:nowrap}
.send:hover{filter:brightness(.96)}.sendw.idle .send{border-color:var(--line);color:var(--sub)}
.sendm{border:1.5px solid var(--accent)!important;border-left:0!important;background:var(--glass)!important;color:var(--accent)!important}.sendw.idle .sendm{border-color:var(--line)!important;color:var(--sub)!important}
/* 发送中：按钮字隐去、中间转一个小圈；手机没有发送按钮 → 输入框右边（麦克风那个位置）转（老板 b:10 #23592） */
@keyframes sndspin{to{transform:rotate(360deg)}}
.fin.sending .send{position:relative;color:transparent!important}.fin.sending .send>*{visibility:hidden}
.fin.sending .send::after,.fin.sending .tx::after{content:"";position:absolute;box-sizing:border-box;width:18px;height:18px;border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:sndspin .7s linear infinite}
.fin.sending .send::after{inset:0;margin:auto;box-sizing:border-box;transform-origin:50% 50%}
.fin.sending .tx::after{display:none}
/* 右下角「发送 ▾」（老板 2026-09-25）：像微信，选 Enter 发送还是 ⌘/Ctrl+Enter 发送，最下面一项进设置 */
.sendw{grid-area:send;position:relative;display:flex}
.sendw .send{border-radius:5px 0 0 5px}
.sendm{height:32px;width:26px;border:0;border-left:1px solid var(--line);border-radius:0 5px 5px 0;background:var(--send);color:var(--sendtx);cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0}
.sendm svg{width:14px;height:14px}
.smenu{position:absolute;right:0;bottom:calc(100% + 6px);min-width:200px;background:var(--pop);border:1px solid var(--line);border-radius:8px;box-shadow:0 8px 28px var(--shadow);padding:4px;z-index:30}
.smenu div{padding:8px 10px 8px 28px;border-radius:6px;font-size:13px;cursor:pointer;position:relative;color:var(--text);white-space:nowrap}
.smenu div:hover{background:var(--hover)}
.smenu div.on:before{content:"✓";position:absolute;left:10px;color:var(--accent)}
.smenu hr{border:0;border-top:1px solid var(--line);margin:4px 2px}
.bcb{flex:0 0 auto;height:30px;padding:0 10px;border-radius:6px;border:1px solid var(--line);background:transparent;color:var(--text);font-size:12px;cursor:pointer;display:none}
.pend{display:none;flex-wrap:wrap;gap:6px;padding:4px 0}
.chip{background:var(--chip);border-radius:999px;padding:3px 10px;font-size:12px;color:var(--text)}
.chip b{margin-left:6px;cursor:pointer;color:var(--sub)}
.chip.up{color:var(--sub)}
/* #2888 手机整页弹层（设置 / 语言 / 账号…）：状态栏那一截由外层 .msheet.full 实色垫着（padding-top），滚动的 .msbox 从状态栏下面开始 —— 原来 padding 在滚动框里，往上滚时「设备与登录记录」这些行从状态栏后面透出来 */
.dlg.pg{background:var(--bubble);padding:0;align-items:stretch;justify-content:stretch}.dlg.pg .dbox{width:100%;max-width:none;max-height:none;height:100%;border-radius:0;box-shadow:none;display:flex;flex-direction:column;padding:calc(12px + env(safe-area-inset-top,0px)) 16px 8px}.dlg.pg .cwrap{flex:1;min-height:0}.dlg.pg .clist{max-height:none;height:100%}.chd{display:flex;align-items:baseline;gap:8px}.chd small{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cx{border:0;background:none;color:var(--sub);font-size:24px;line-height:1;cursor:pointer;padding:0 4px}.cops{display:flex;gap:8px;margin-bottom:6px}.cops .btn{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cwrap{position:relative}details.sec{border-bottom:1px solid var(--line);padding:2px 0}details.sec>summary{cursor:pointer;list-style:none;padding:12px 2px;font-weight:600;font-size:15px;display:flex;align-items:center}details.sec>summary::-webkit-details-marker{display:none}details.sec>summary::after{content:"›";margin-left:auto;color:var(--sub);font-size:18px;transition:transform .15s}details.sec[open]>summary::after{transform:rotate(90deg)}.secb{padding:0 2px 12px}#lk0,#lk1,#lk2{display:block;width:100%;box-sizing:border-box;padding:9px;border:1px solid var(--line);border-radius:6px;background:var(--bubble);color:var(--text);font-size:15px}.gtbar{display:flex;align-items:center;gap:6px;padding:7px 14px;font-size:13px;background:var(--list);border-bottom:1px solid var(--line);cursor:pointer;color:var(--text)}.gtbar b{font-weight:600}.gtb{color:var(--red)}.gtgo{margin-left:auto;color:var(--sub);font-size:16px}.gtadd{display:flex;flex-direction:column;gap:6px;margin:4px 0 10px}.gtadd input,.gtadd select{padding:8px;border:1px solid var(--line);border-radius:6px;background:var(--bubble);color:var(--text);font-size:14px;min-width:0}.gtaddr{display:flex;gap:6px}.gtaddr select{flex:1}.gtaddr input{flex:1}.gtl{flex:1;min-height:0;overflow-y:auto}.gtr{display:flex;gap:10px;padding:10px 2px;border-bottom:1px solid var(--line)}.gtr input[type=checkbox]{width:20px;height:20px;margin-top:2px;flex:0 0 auto}.gtr.dn .gtt{text-decoration:line-through;color:var(--sub)}.gtm{flex:1;min-width:0}.gtt{font-size:15px;line-height:1.4}.gts{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px;font-size:12px;color:var(--sub)}.gtp{color:var(--text)}.gtst.s-doing{color:var(--accent)}.gtst.s-blocked{color:var(--red)}.gtst.s-done{color:var(--sub)}.gtn{font-size:12px;color:var(--sub);margin-top:3px}.gta{display:flex;gap:12px;margin-top:4px}.gtov{margin:0 0 14px}.gtovh{font-size:12px;color:var(--sub);padding:8px 2px 4px}.gtovr{display:flex;align-items:center;gap:8px;padding:9px 10px;background:var(--bubble);border-radius:8px;margin-bottom:6px;cursor:pointer}.gtovr b{font-weight:500;flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gtovr span{font-size:12px;color:var(--sub)}.gtovr.gtovb{flex-direction:column;align-items:stretch;gap:4px}.gtovr.gtovb b{white-space:normal;line-height:1.4;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.gtovr.gtovb span{line-height:1.5;display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}.hk.sys{background:rgba(120,120,120,.15);color:#777}.pj.exp.big{height:auto;padding:10px 0;display:flex;flex-direction:column;align-items:center;gap:2px;color:var(--accent);border:1px solid var(--accent);font-size:11px}.msheet.full{align-items:stretch;background:var(--card,var(--list));box-sizing:border-box;padding-top:env(safe-area-inset-top,0px)}.msheet.full .msbox{max-height:none;height:100%;border-radius:0;padding-top:0}.mehd{display:flex;align-items:center;gap:4px;padding:10px 8px 6px;font-size:17px}.msr .mgo{margin-left:auto;color:var(--sub);font-size:18px}.pinbox.pscroll{overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}.pinbox{border-bottom:1px solid var(--line)}.sess>.pinbar{position:sticky;top:0;bottom:0;z-index:3;background:var(--list);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.pfold.pfbar,.pfold.pfhead{position:sticky;background:var(--list);z-index:2}.pfold.pfhead{top:0}.dmbig{display:block;width:100%;height:46px;font-size:16px;margin:6px 0 12px}.dmbig.off{opacity:.55}.pinwrap{position:sticky;top:0;z-index:3;background:var(--list);border-bottom:1px solid var(--line);box-shadow:0 4px 10px rgba(0,0,0,.06)}.pinwrap .pfold.pfbar{position:static;border-top:0}.pfold.pfbar{bottom:0;height:34px;padding:0 16px 0 14px;gap:0;border-top:1px solid var(--line);font-size:14px}.pfold.pfbar .pfi{width:18px;height:18px;margin-right:12px}.pfold.pfbar .pfa svg{width:16px;height:16px}.pfold .pfi{width:24px;height:24px;margin-right:18px;opacity:.75}.pfold.pfbar .pfa svg{width:20px;height:20px;display:block;opacity:.6}.att-vid{display:block;width:100%;max-width:min(280px,100%);height:auto;max-height:360px;border-radius:8px;background:var(--u-media);margin:4px 0}/* 老板 b:10 #18346：手机上视频封面比气泡宽、右边伸出去 → 封面宽度跟着气泡走，不超过 280 */.vwrap{display:block;position:relative;cursor:pointer;width:min(280px,100%);max-width:100%}.vwrap .att-vid{pointer-events:none}.vplay{position:absolute;left:50%;top:50%;width:56px;height:56px;margin:-28px 0 0 -28px;border-radius:50%;background:rgba(0,0,0,.55);color:var(--u-on-color);font-size:24px;line-height:56px;text-align:center;padding-left:4px;box-sizing:border-box;pointer-events:none}body.hascbg #list{background:transparent}.vfs{display:block;margin:2px 0 4px;padding:4px 10px;border:1px solid var(--line);border-radius:6px;background:var(--bubble);color:var(--text);font-size:13px;cursor:pointer}.pgbk{border:0;background:none;color:var(--text);font-size:30px;line-height:1;font-weight:400;padding:0 12px 2px 0;cursor:pointer;flex:0 0 auto}.dlg.pg .dbox{padding-top:0}.dlg.pg .dbox>h3:first-child{display:flex;align-items:center;flex-wrap:nowrap;position:sticky;top:0;z-index:3;background:var(--bubble);margin:0 -16px 10px;padding:calc(6px + env(safe-area-inset-top,0px)) 16px 6px;border-bottom:1px solid var(--line);min-height:44px;box-sizing:border-box;font-size:17px;flex:0 0 auto}.dlg.pg .dbox>h3 .cx{display:none}.dlg.pg .dbox>:not(h3){width:100%;max-width:720px;margin-left:auto;margin-right:auto;box-sizing:border-box}body.blank .chat>*{display:none!important}.hbk{display:none;border:0;background:none;color:var(--text);font-size:30px;line-height:1;padding:0 10px 0 2px;cursor:pointer}@media (max-width:759px),(orientation:portrait) and (pointer:coarse) and (max-width:1100px){.hbk{display:block}}.swacts{position:fixed;right:0;z-index:40;display:flex}.swacts b{flex:1 1 0;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;color:var(--u-on-color);font-weight:500;font-size:13px;line-height:1.1;cursor:pointer;padding:0 2px}.swacts b svg{width:21px;height:21px;flex:0 0 auto}.swacts b span{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sw-u{background:#8A8F98}.sw-p{background:#7D8693}.sw-t{background:#A0844F}.sw-h{background:#B26A4C}.sw-m{background:#9AA0A8}.sw-d{background:var(--u-red)}.pfold{display:flex;align-items:center;gap:8px;padding:10px 16px;font-size:13px;color:var(--sub);cursor:pointer}.pfold .pfa{margin-left:auto}.pfold .pfn{background:var(--red);color:var(--u-on-color);border-radius:9px;font-size:11px;padding:0 6px;line-height:16px}.mmenu{position:fixed;z-index:70;display:none;grid-template-columns:repeat(5,58px);gap:6px 4px;padding:12px 10px;background:#4c4c4c;border-radius:10px;box-shadow:0 8px 30px rgba(0,0,0,.35)}.mmi{display:flex;flex-direction:column;align-items:center;gap:5px;color:var(--u-on-color);font-size:12px;cursor:pointer;padding:4px 0;border-radius:6px}.mmi:active{background:rgba(255,255,255,.12)}.mmi svg{width:22px;height:22px}.mmi.red{color:#ff8a80}.b.mmsel{filter:brightness(.85)}.b a:has(>.att-img){-webkit-touch-callout:none}.clist{max-height:64vh;overflow-y:auto;margin:0 -6px;padding-right:22px}.cgh{font-size:13px;color:var(--sub);padding:10px 8px 4px;background:var(--bubble)}.crow{display:flex;align-items:center;gap:12px;padding:7px 8px;border-radius:8px;cursor:pointer}.crow.off{opacity:.55}.crow:active,.crow:hover{background:var(--quote)}.crow .cn{flex:1;min-width:0;font-size:17px}.crow .cn b{font-weight:500}.cav{position:relative;display:inline-flex}.cdot{position:absolute;right:-1px;bottom:-1px;width:10px;height:10px;border-radius:50%;background:#FF7A00;border:2px solid var(--bubble)}.cidx{position:absolute;right:0;top:0;bottom:0;display:flex;flex-direction:column;justify-content:center;gap:2px;font-size:12px;color:var(--sub)}.cidx b{font-weight:500;cursor:pointer;padding:0 4px;text-align:center}.pctd{margin-top:12px}.pctdh{margin:8px 0 4px;font-size:13px;color:var(--sub)}.pctdh b{color:var(--text)}.pctdr{padding:6px 0;border-bottom:1px solid var(--line);font-size:14px;line-height:1.45}.ccard{display:flex;align-items:center;gap:14px;margin:6px 0 14px}.ccn{font-size:18px;font-weight:600}.cbtns{display:flex;flex-wrap:wrap;gap:8px}
.rq{display:none;align-items:center;gap:8px;margin:4px 0;padding:6px 10px;background:var(--quote);border-radius:6px;font-size:12px;color:var(--text)}
.rq span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rq b{cursor:pointer;color:var(--sub);font-size:14px;padding:0 4px}
.bc{display:none;flex-wrap:wrap;gap:8px;padding:4px 0;font-size:12px;color:var(--text)}
.bc label{display:inline-flex;gap:4px;align-items:center;background:var(--chip);border-radius:999px;padding:3px 10px}
.atpop{display:none;position:absolute;left:0;bottom:calc(100% + 6px);min-width:180px;max-width:280px;max-height:min(420px,60vh);overflow-y:auto;background:var(--pop);border:1px solid var(--line);border-radius:8px;box-shadow:0 8px 28px var(--shadow);padding:4px;z-index:20}
.atpop div{padding:8px 10px;border-radius:6px;font-size:14px;cursor:pointer;display:flex;align-items:center;gap:8px;color:var(--text)}
.atpop div.on,.atpop div:hover{background:var(--hover)}
.atpop div.all{font-weight:600;border-bottom:1px solid var(--line);border-radius:6px 6px 0 0;margin-bottom:2px}
.atpop div.zz{opacity:.45}
.atpop i{width:7px;height:7px;border-radius:50%;background:var(--sub);flex:0 0 auto}.atpop i.ol{background:#FF7A00}
.atpop small{margin-left:auto;color:var(--sub);font-size:11px}
.who{display:none}
/* 字体大小（老板 2026-09-25：「界面的字体大小，可以在设置里面去设置」）：消息区、会话列表、输入框、群要求一起缩放 */
:root{--fz:1}
main,.sess,.gnote,textarea,.rq,.pend{zoom:var(--fz)}
.fzs{display:flex;gap:8px;flex-wrap:wrap}
.fzs button{flex:1;min-width:64px;height:36px;border:1px solid var(--line);border-radius:6px;background:transparent;color:var(--text);cursor:pointer}
.fzs button.on{border-color:var(--accent);color:var(--accent);font-weight:600}
.fzprev{margin-top:10px;padding:10px 12px;border-radius:6px;background:var(--chat);border:1px solid var(--line)}
.fzprev .b{display:inline-block;zoom:var(--fz)}
.plus{flex:0 0 auto;width:30px;height:30px;border:0;border-radius:6px;background:var(--chip);color:var(--ric);cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0}
.plus:hover{color:var(--text)}.plus svg{width:20px;height:20px}
/* 自建群的群要求：钉在聊天窗顶上，谁进来都先看到这个群干什么、做完要不要去哪儿汇报 */
.gnote{cursor:pointer;position:relative}
.gnote .gtog{float:right;margin-left:10px;color:var(--sub);font-size:12px}
.gnote.fold{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-height:none}
.gnote.fold .rp,.gnote.fold .gin{display:none}.gnote .gin{display:inline-block;margin-top:4px;padding:2px 6px;border-radius:6px;background:rgba(255,160,0,.12)}
.gnote{flex:0 0 auto;padding:8px 20px;border-bottom:1px solid var(--line);background:var(--list);font-size:12.5px;line-height:1.55;color:var(--text);max-height:30vh;overflow-y:auto;white-space:pre-wrap;overflow-wrap:anywhere}
.gnote b{font-weight:600}.gnote .rp{display:inline-block;margin-top:4px;color:var(--sub)}
.gnote.fold{max-height:3.2em;overflow:hidden;cursor:pointer}
.dlg{position:fixed;inset:0;background:var(--u-scrim);z-index:50;display:flex;align-items:center;justify-content:center;padding:16px}
.psrch{display:flex;align-items:center;gap:8px;width:calc(100% - 24px);margin:12px 12px 4px;padding:9px 12px;border:1px solid var(--line);border-radius:8px;background:var(--field);color:var(--sub);font:inherit;font-size:13px;cursor:pointer;text-align:left}.psrch svg{width:16px;height:16px}
.msr2{margin-top:10px;max-height:60vh;overflow-y:auto}.msi{display:block;width:100%;text-align:left;border:0;border-bottom:1px solid var(--line);background:transparent;color:var(--text);font:inherit;padding:9px 4px;cursor:pointer}.msi:hover{background:var(--hover)}
.msh2{display:flex;justify-content:space-between;gap:8px;font-size:12px;color:var(--sub)}.msh2 b{color:var(--text);font-weight:600}.msb{font-size:13px;line-height:1.5;margin-top:2px;word-break:break-all}.msb mark{background:rgba(255,160,0,.35);color:inherit;border-radius:2px}
.dbox{width:min(460px,100%);max-height:calc(100vh - 32px);overflow-y:auto;background:var(--bubble);color:var(--text);border-radius:10px;box-shadow:0 12px 40px var(--shadow);padding:18px 18px 14px}
.dbox h3{margin:0 0 12px;font-size:16px}
.dbox label.f{display:block;font-size:12px;color:var(--sub);margin:12px 0 5px}
.dbox input[type=text],.dbox .crow input[type=password],.dbox textarea,.dbox select{width:100%;border:1px solid var(--fline);border-radius:6px;background:var(--field);color:var(--text);font-family:inherit;font-size:14px;padding:8px 10px}
.dbox textarea{height:96px;resize:vertical;line-height:1.5}
.dbox .hint{font-size:11px;color:var(--sub);margin-top:4px}
.onecmd{margin:8px 0 10px;padding:10px 12px;border:1px solid var(--line);border-radius:10px}.onecmd>b{font-size:15px}
/* 工作台控制台（#698 第 2 笔） */
.dbox .csec{margin-top:14px;padding:12px;border:1px solid var(--line);border-radius:10px}.dbox .csec>b{display:block;font-size:14px}.dbox .csec>small{display:block;color:var(--sub);font-size:12px;margin-top:2px}
/* 设置最上面的控制台块（#2610 老板 b:10 #35021 #35027 #35031）：手机「我」和电脑设置页共用 */
.wscons{margin:0 0 14px;padding:12px;border:1px solid var(--line);border-radius:10px;background:var(--field)}.wscons>b{display:block;font-size:15px;color:var(--text)}.wscons>small{display:block;color:var(--sub);font-size:12px;margin-top:2px}
.wscons .wscrow{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap}.wscons .wscrow .btn{flex:1 1 120px;height:42px;font-size:14px}
.wscons .wscfull{display:block;width:100%;margin-top:8px;text-align:center}
.clist .crow .cn{flex:1;min-width:0}.clist .cst{flex:0 0 auto;color:var(--sub);font-size:12.5px;white-space:nowrap;margin-left:6px}
.dbox .crow{display:flex;gap:8px;align-items:center;margin-top:8px}.dbox .crow input{flex:1;min-width:0}.dbox .crow .sp{flex:1;min-width:0;overflow-wrap:anywhere}.dbox .crow a{color:var(--sub);white-space:nowrap}.dbox .crow.cmemw{flex-wrap:wrap;justify-content:flex-end;column-gap:14px;row-gap:2px}.dbox .crow.cmemw .sp{flex-basis:100%}
.mlist{display:grid;grid-template-columns:1fr 1fr;gap:4px;max-height:220px;overflow-y:auto;border:1px solid var(--line);border-radius:6px;padding:6px}
.mlist label{display:flex;align-items:center;gap:8px;padding:5px 6px;border-radius:5px;cursor:pointer;font-size:13px}
.mlist label:hover{background:var(--hover)}.mlist .av{width:26px;height:26px;font-size:10px;border-radius:4px}
.mlist small{color:var(--sub);font-size:10px;margin-left:auto}
.mlist{grid-template-columns:1fr}
.mlist .mu{margin-left:10px;display:inline-flex;align-items:center;gap:3px;font-size:11px;color:var(--sub);padding:2px 6px;border-radius:4px}
.mlist .mu.on{color:var(--red)}.mlist .mu input{margin:0}
.gav{display:flex;align-items:center;gap:12px}.gav .av{width:52px;height:52px}.gav .av svg{width:30px;height:30px}
.av img{width:100%;height:100%;object-fit:cover;border-radius:inherit}.av img.avi{position:absolute;inset:0}.avok>span.notranslate,.avok>.gini,.avok>.coll,.avok>svg{display:none!important}.av:has(>img.avi)>span.notranslate,.av:has(>img.avi)>.gini,.av:has(>img.avi)>.coll{display:none!important}   /* #2866：图片加载好了，垫底的首字 / 群首字 / 拼图层不再露边。#2917：只点名藏这四种垫底层 —— 原来写成「除了图片全藏」，把同一格里的未读红数 .bd、红点 .dt、AI 小标、在线绿点、休眠月亮一起藏了（老板 b:10 #37325：行上看不到红数，置顶那条和底栏却有 6） */
.mutebar{padding:10px 12px;text-align:center;font-size:13px;color:var(--sub);background:var(--chip);border-radius:6px}
.dact{display:flex;gap:8px;margin-top:16px;align-items:center}
.dact .sp{flex:1}
.btn{height:34px;padding:0 16px;border-radius:6px;border:1px solid var(--line);background:transparent;color:var(--text);font-size:14px;cursor:pointer}
.btn.pri{background:var(--accent);border-color:var(--accent);color:var(--u-on-color)}
.btn.dan{color:var(--red);border-color:transparent;padding:0 6px}
/* 确认框（pgConfirm / askText）底下那排「取消 / 确定」（老板 b:10 #23469）：居中、等宽并排、大字、高 ≥ 48；确定用主色，危险操作（撤回 / 删除…）用红底 */
.askb .dact{justify-content:center;gap:14px;margin-top:28px}.askb .dact .sp{display:none}
.askb .dact .btn{flex:0 1 220px;height:56px;padding:0 18px;border-radius:12px;font-size:24px;font-weight:600}
.askb .dact .btn.dan{background:var(--red);border-color:var(--red);color:var(--u-on-color);padding:0 18px}
.askb .dact .btn:focus{outline:2px solid var(--line);outline-offset:3px}   /* 确定默认带焦点（回车就是确定）：用淡色外圈，不用浏览器那圈蓝 */
.askw.cfm{background:rgba(0,0,0,.25);justify-content:center;padding:24px}
.askw.cfm .askb{width:min(420px,100%);flex:none;padding:26px 22px 22px}
.cfmt{font-size:19px;font-weight:600;line-height:1.45;text-align:center;word-break:break-word}
.cfmm{font-size:15px;line-height:1.6;color:var(--sub);text-align:center;margin-top:8px;white-space:pre-wrap;word-break:break-word}
.askw.cfm .dact .btn:not(.ok){background:rgba(255,255,255,.6);border-color:rgba(0,0,0,.08)}:root[data-theme="dark"] .askw.cfm .dact .btn:not(.ok){background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.12)}
.askw.cfm .dact{margin-top:24px}.askw.cfm .dact .btn{flex:1 1 0;min-width:0}
@media (max-width:640px){.askb .dact{gap:10px}.askb .dact .btn{flex:1 1 0;height:52px;font-size:20px}}
.derr{color:var(--red);font-size:12px;margin-top:8px}
.pthumb{position:relative;display:inline-block}
.pthumb img{height:84px;max-width:160px;object-fit:cover;border-radius:6px;border:1px solid var(--line);display:block;cursor:zoom-in}
.pthumb b{position:absolute;top:-6px;right:-6px;width:20px;height:20px;border-radius:50%;background:rgba(0,0,0,.65);color:var(--u-on-color);font-size:13px;line-height:20px;text-align:center;cursor:pointer}
.att-img{cursor:zoom-in}
/* #3119 看图页（老板 b:10 #39815，秘书 #39816；参照 ChatGPT 的看图页，不像微信）：黑底铺满；顶上左「×」、右「⋯ / 保存 / 分享」；底下一排圆按钮「编辑 / 转发 / 收藏 /（自己发的）删除」；手机单击图片 = 收起 / 露出上下两排，双击 / 双指放大，左右滑换图 */
.lbox{position:fixed;inset:0;z-index:60;background:var(--u-media);color:var(--u-on-color);display:flex;align-items:center;justify-content:center;box-sizing:border-box;padding:calc(env(safe-area-inset-top,0px) + var(--u-bar) + 20px) 0 calc(env(safe-area-inset-bottom,0px) + var(--u-h-lg) + 56px);transition:padding .2s}
.lbox.iv3119bare{padding:0}
.b{touch-action:manipulation}
/* 三击留言 → 全屏看（老板 #10494） */
.fsv{position:fixed;inset:0;z-index:65;background:rgba(0,0,0,.55);display:flex;justify-content:center;padding:max(16px,env(safe-area-inset-top)) 16px max(16px,env(safe-area-inset-bottom))}
.fsv .fsb{width:100%;max-width:900px;background:var(--pop);color:var(--text);border-radius:10px;overflow:auto;padding:22px 22px 28px;font-size:calc(19px*var(--fz,1));line-height:1.75;white-space:pre-wrap;overflow-wrap:anywhere;-webkit-overflow-scrolling:touch;box-shadow:0 8px 30px var(--shadow)}
.fsv .fsh{color:var(--sub);font-size:13px;margin:0 40px 12px 0}
.fsv .fsx{position:absolute;top:calc(max(16px,env(safe-area-inset-top)) + 10px);right:max(26px,calc(50% - 440px));width:36px;height:36px;border:0;border-radius:18px;background:var(--chip);color:var(--text);font-size:18px;cursor:pointer}
#lboximg{max-width:100%;max-height:100%;object-fit:contain;cursor:zoom-in}
#lboximg{transition:transform .15s;touch-action:none;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}
.iv3119top{position:absolute;left:0;right:0;top:0;display:flex;align-items:center;gap:8px;padding:calc(env(safe-area-inset-top,0px) + 8px) 12px 8px;transition:opacity .2s}
.iv3119bot{position:absolute;left:0;right:0;bottom:0;display:flex;justify-content:center;gap:24px;padding:12px 16px calc(env(safe-area-inset-bottom,0px) + 16px);transition:opacity .2s}
.lbox.iv3119bare .iv3119top,.lbox.iv3119bare .iv3119bot,.lbox.iv3119bare .lbnav{opacity:0;pointer-events:none}
.lbcnt{flex:1 1 auto;min-width:0;text-align:center;font-size:14px;opacity:.85;white-space:nowrap}
.iv3119ic{flex:0 0 auto;width:var(--u-h-sm);height:var(--u-h-sm);border-radius:50%;border:0;padding:0;background:var(--u-media-btn);color:var(--u-on-color);display:inline-flex;align-items:center;justify-content:center;cursor:pointer}
.iv3119ic svg{width:20px;height:20px}
.iv3119pill{flex:0 0 auto;height:var(--u-h-sm);border-radius:var(--u-r-btn-sm);border:0;padding:0 14px;background:var(--u-media-btn);color:var(--u-on-color);display:inline-flex;align-items:center;gap:6px;font-size:15px;font-weight:600;cursor:pointer;white-space:nowrap}
.iv3119pill.pri{background:var(--u-gold);color:var(--u-on-gold)}.iv3119pill svg{width:18px;height:18px}
.iv3119rb{display:flex;flex-direction:column;align-items:center;gap:6px;min-width:56px;border:0;padding:0;background:none;color:var(--u-on-color);font-size:13px;cursor:pointer}
.iv3119rb i{width:var(--u-h-lg);height:var(--u-h-lg);border-radius:50%;background:var(--u-media-btn);display:flex;align-items:center;justify-content:center}.iv3119rb i svg{width:22px;height:22px}
.iv3119rb.red i{color:var(--u-red)}
.iv3119ic:active,.iv3119pill:active,.iv3119rb:active i{opacity:.7}
.lbnav{position:absolute;top:50%;margin-top:calc(var(--u-h-lg) / -2);width:var(--u-h-lg);height:var(--u-h-lg);border:0;border-radius:50%;background:var(--u-media-btn);color:var(--u-on-color);font-size:30px;line-height:1;cursor:pointer;transition:opacity .2s}.lbnav.l{left:16px}.lbnav.r{right:16px}
@media (max-width:759px),(orientation:portrait) and (pointer:coarse) and (max-width:1100px){.lbnav{display:none!important}.iv3119bot{gap:20px}}
@media (max-width:380px){.iv3119pill{padding:0 10px}.iv3119bot{gap:12px}}
body.mmopen #lbox .iv3119bot{display:none!important}
/* 已读回执（老板 2026-09-25：像电报）：✓ 发出去了、✓✓ 灰 = 有人读了、✓✓ 绿 = 都读了；「已读未回」红字 */
.rd{font-size:14px;font-weight:700;letter-spacing:-5px;padding-right:5px;line-height:1;color:var(--sub);cursor:default}
.rd.all{color:var(--accent)}
.rdn{font-size:11px;color:var(--sub)}.rdu{font-size:11px;color:var(--red)}
.rd,.rdn,.rdu{cursor:pointer}.rdn:hover,.rdu:hover{text-decoration:underline}
.rpop{position:fixed;z-index:40;width:260px;max-height:70vh;overflow-y:auto;background:var(--pop);border:1px solid var(--line);border-radius:8px;box-shadow:0 10px 30px var(--shadow);padding:6px 4px 8px}
.rpop .rh{font-size:12px;color:var(--sub);padding:4px 10px 6px;border-bottom:1px solid var(--line);margin-bottom:4px}
.rpop .rg{font-size:11px;color:var(--sub);padding:6px 10px 2px}.rpop .rg.u{color:var(--red)}
.rpop .rrow{display:flex;align-items:center;gap:8px;padding:5px 10px;font-size:13px;color:var(--text);cursor:pointer;border-radius:5px}.rpop .rrow:hover{background:var(--hover)}
.rpop .rrow .av{width:26px;height:26px;font-size:10px;border-radius:4px}.rpop .rrow span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rpop .rrow small{color:var(--sub);font-size:11px}
.gd{display:inline-flex;margin-left:4px;vertical-align:-0.12em}.gd svg{width:.9em;height:.9em}
.gd.m{color:#3B8BEB}.gd.f{color:#E8588C}
/* 锁屏（老板 2026-09-25）：整个界面盖住，只留头像、名字和密码框 */
.lockv{position:fixed;inset:0;z-index:90;background:var(--bg);display:flex;align-items:center;justify-content:center;padding:16px}
.lockv .lbox2{width:min(300px,100%);display:flex;flex-direction:column;align-items:center;gap:12px}
.lockv #lockav .av{width:80px;height:80px;border-radius:12px;font-size:22px}
.lockv .lname{font-size:16px;font-weight:600;color:var(--text)}
.lockv input{width:100%;border:1px solid var(--line);border-radius:8px;background:var(--field);color:var(--text);font-size:16px;padding:10px 12px;text-align:center;letter-spacing:.2em}
.lockv .btn{width:100%;height:40px}
body.locked #app>*:not(#lockv){visibility:hidden}
.devl{display:flex;flex-direction:column;gap:6px}
.devr{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid var(--line);border-radius:6px}
.devr>div{flex:1;min-width:0}.devr b{font-weight:500;font-size:13px}.devr small{display:block;color:var(--sub);font-size:11px}
.devr .cur{font-size:11px;color:var(--accent);margin-left:6px}
.plist{display:flex;flex-direction:column;gap:2px;max-height:60vh;overflow-y:auto}
.prow{display:flex;align-items:center;gap:10px;padding:8px 6px;border-radius:6px}.prow:hover{background:var(--hover)}
.prow .pn b{white-space:nowrap}.prow .btn{height:28px;padding:0 9px;font-size:12px;flex:0 0 auto}
.pchat{font-size:11px;color:var(--link);font-weight:400;margin-left:4px}
.pn{flex:1;min-width:0}.pn b{font-weight:500}.pn small{margin-left:6px;color:var(--sub);font-size:11px}.ps{font-size:11px;color:var(--sub)}
/* 只有一个窗口的人（子测试）：不要会话列表，直接进聊天 */
body.single .side{display:none}
html.solo .rail,html.solo .side,html.solo .sdrag,html.solo .pcol{display:none!important}
@media (max-width:759px),(orientation:portrait) and (pointer:coarse) and (max-width:1100px){.pcol{display:none!important}body.haspcol #projrail{display:flex!important}}
/* ---- 手机 / 窄屏：列表、聊天两屏切换；图标栏变成列表顶上的一条 ---- */
@media (max-width:759px),(orientation:portrait) and (pointer:coarse) and (max-width:1100px){
 #app{flex-direction:column}
 .rail{flex:0 0 auto;flex-direction:row;padding:calc(8px + env(safe-area-inset-top,0px)) 12px 8px;gap:4px;border-bottom:1px solid var(--line)}
 .meav{margin:0 6px 0 0}.ri.chatic{display:none}
 .side{flex:1;border-right:0}.sdrag{display:none}
 .chat{display:none;flex:1;min-height:0}
 body.inchat .rail,body.inchat .side{display:none}
 body.inchat .chat{display:flex}
 body.single .rail{display:none}body.single .chat{display:flex}
 body.inchat:not(.single) .back{display:block}
 /* 底栏下面空一截深色（老板 b:10 #24068 截图，#12867 记过）：主屏 App 刷新后苹果把窗口高度少算一个状态栏（screen 956 · inner 894），
    894 以下网页排不了版、只画整页底色（截图取色 = --bg #1E1E1E，底栏是 --rail）。拉长页面行不通（第五版撤了）→ 让那截底色和最底下那条同色：
    列表页跟底栏（--rail），聊天页跟输入栏（--chat），看上去就是底栏一直到屏幕底 */
 html{background:var(--rail)}html:has(body.inchat),html:has(body.single){background:var(--chat)}
 body.vshort .rail{padding-bottom:10px}body.vshort footer{padding-bottom:8px}
 header{padding:calc(env(safe-area-inset-top,0px)) 12px 0;height:calc(52px + env(safe-area-inset-top,0px));gap:6px}
 .panel{top:calc(52px + env(safe-area-inset-top,0px));width:100%;box-shadow:none}
 main{padding:8px 10px 12px}
 .mc{max-width:78%}
 .av.sm2{width:34px;height:34px}
 footer{padding:8px 10px calc(8px + env(safe-area-inset-bottom,0px))}
 .fin{display:flex;align-items:flex-end;gap:6px}.fin .tx{flex:1}
 .fdrag{display:none}
 .tools{gap:0}
 textarea{height:44px;max-height:140px;font-size:16px;line-height:22px;box-sizing:border-box;background:var(--field);border-radius:6px;padding:10px 10px}
 .send{height:44px;padding:0 16px;font-size:16px;background:var(--accent);color:var(--u-on-color)}
 .sendw .send{border-radius:6px}.sendm{display:none}
 .mark .lo-f{display:none}
 .ss.on{background:transparent;color:var(--text)}.ss.on .sm,.ss.on .st2{color:var(--sub);opacity:1}
}
/* ---- 手机顶部照微信（老板 b:10 #14561）：团队名 / 群名 / 私聊对方名字都在正中；状态栏那一条和下面同一个颜色（syncTop() 跟着换 theme-color），不再断开一截 ---- */
@media (max-width:759px),(orientation:portrait) and (pointer:coarse) and (max-width:1100px){
 .mproj{align-self:center;justify-content:center;margin:10px auto 0;max-width:calc(100% - 96px)}
 header{position:relative;z-index:3;background:var(--chat)}   /* #2888（老板 b:10 #37069 #37073）：顶栏实色（同页面底色）+ 压在列表上面；padding-top 留给状态栏，列表从它下面开始，滚动时字不会从状态栏后面透出来 */
 header .back{margin-right:auto}   /* 标题拿出去居中后，右边的按钮靠 back 的 auto 顶到最右 */
 header .ht{position:absolute;left:64px;right:64px;bottom:0;height:52px;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;min-width:0}
 header .ht h1,header .ht .chs{max-width:100%}
 header .ht #cht:has(>.chtn){justify-content:center}
 /* 标题是盖在整条上的：左边「控制台」「换群」这类按钮要在它上面才点得到（测试2 B5：390 / 375 宽点「控制台」全落在标题上）；工作台标题左右多让一点，字不压按钮 */
 header>button,header>.cgsw,header>.mark{position:relative;z-index:2}
 .wsu header .ht{left:128px;right:128px}
 #plgv header .ht{left:100px;right:100px}#agsgen{margin-left:auto;min-height:36px;padding:0 8px}#agsgen span{display:none}   /* #2910：应用顶栏「AI 生成」+ 齿轮靠右，手机上只留图标，标题两边多让一点 */
}
/* ---- 手机：底部标签栏（老板 2026-09-25「手机浏览器根本没办法用」「手机可能要有新的解决方案」）----
   原来把电脑左边那一竖排图标横过来放在顶上，老板账号有十几个（项目、运维、收藏、锁屏…），挤成一团点不到。
   底部 对话 / 成员 / 动态 / 我的（2026-09-26 起图标和叫法都是我们自己的，不再照微信）；收藏、运维、设置、主题、锁屏、退出收进「我」；项目切换在列表顶上「主线 ▾」 */
.tl{display:none}.meb{display:none}.mproj{display:none}.msheet{display:none}.mhic{display:none}
.b a{-webkit-touch-callout:none}
@media (max-width:759px),(orientation:portrait) and (pointer:coarse) and (max-width:1100px){
 /* 底栏（老板 #12879 往下挪 · #12883 太高）：格子 48、上 5、下面只留苹果小横条要的最少 */
 .rail{order:9;flex:0 0 auto;flex-direction:row;justify-content:space-around;align-items:stretch;padding:7px 0 max(10px,env(safe-area-inset-bottom,0px));gap:0;border-top:1px solid var(--line);border-bottom:0}
 .rail>*:not(.chatic):not(#members):not(.momic):not(.revic):not(.meb):not(.ctcic):not(.c2ra){display:none!important}
 .rail .ri{flex:1;width:auto;height:60px;flex-direction:column;justify-content:flex-start;padding-top:3px;gap:4px;border-radius:0}
 /* 老板 b:10 #24522（秘书 #24528）：底栏和微信一样高 —— iPhone 标准底栏 49pt（不含下面 home 条那截）；图标、字不缩，收掉的是上下留白 */
 .rail{padding-top:0}.rail .ri{height:49px;justify-content:center;padding-top:0;gap:2px}
 /* 老板 b:10 #24654 #24659（秘书 #24656）：尺寸照微信（样子不学）—— 图标 25、字 10、图标上面留 7，图标和字贴着往上排 */
 .rail .ri{justify-content:flex-start;padding-top:7px;gap:3px}.rail .ri svg{width:25px;height:25px}.rail .ri .tl{font-size:12px;line-height:14px}   /* 底栏字 10 → 12（#2753，秘书 #36116 量的）*/
 .rail .ri svg{width:25px;height:25px}   /* 原 31：老板 b:10 #14564「4 个按钮稍微大一点点」：28→31、字 11.5→12.5 */   /* 老板 #12881「比例不对」：图标太小、底栏空 → 图标 24→28、字 10.5→11.5 */
 .rail .ri.chatic,.rail .meb{display:flex}
 .rail .meb{order:0}#members{order:2}.rail .momic{order:3}.rail .revic{order:4}.rail .ctcic{order:5}.rail .chatic{order:9}   /* 老板 b:10 #36910（秘书 #36914）：设置最左、对话最右，中间 成员 / 动态 / 媒体 / 控制台 不变；取代 #36680 那次反过来的 */   /* 「控制台」（#2668）占原来「客户」那一格；客户消息并进「对话」 */   /* 顺序：我的 / 成员 / 动态 / 媒体 / 对话（老板 b:10 #23103「对话和我的对换位置」；c:44 #15456 审片放动态右边） */
 .prow{flex-wrap:wrap;row-gap:6px}.prow .pn{flex-basis:calc(100% - 60px)}.prow .pn b{white-space:normal}.prow>.btn:nth-child(3){margin-left:50px}   /* 成员名单：按钮换到名字下面一行，不再压字 */
 .rail .ri:hover{background:transparent}
 .rail .ri.on{color:var(--accent)}.rail .ri.on svg[fill="none"]{fill:currentColor;fill-opacity:.18}
 .rail .tl{display:block;font-size:12.5px;line-height:1.2}
 .rail .rb-n{top:2px;right:calc(50% - 22px)}.rail .rb-n.rb-o{right:auto;left:calc(50% - 22px)}.rail .rb-d{top:5px;right:calc(50% - 14px)}
 .side{padding-top:env(safe-area-inset-top,0px);min-height:0}
 #app>*:not(.rail){min-height:0}
 /* 手机会话列表顶上（老板 b:10 #24463 #24464）：不再常驻一整条搜索框 —— 标题一行，右边放大镜（点开才出搜索框）和「＋」（建群 / 工作组设置）。电脑上照旧 */
 .mhd{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:4px;margin:0 8px 6px}
 .tbar{min-height:50px;box-sizing:border-box}   /* #2894（老板 b:10 #37112）：手机顶栏一个高度 —— 设置页 .stghd 和对话列表 .mhd 共用：50 高、贴着状态栏下沿，列表顶栏下面再留 6，标题和第一行不再挤 */.mhd .mproj{margin:0;max-width:none;min-width:0}
 .mhic{display:flex;justify-content:flex-end;gap:2px;grid-column:3}.mhb{width:40px;height:40px;border:0;background:none;color:var(--text);display:flex;align-items:center;justify-content:center;border-radius:10px;cursor:pointer;padding:0}.mhb svg{width:23px;height:23px}
 .side>.sbar{display:none}body.qopen .side>.sbar{display:flex}.side>.sbar #newg{display:none!important}
 .mproj{display:flex;align-items:center;gap:6px;margin:10px 12px 0;padding:0;border:0;background:transparent;color:var(--text);font-size:19px;font-weight:600;cursor:pointer;font-family:inherit}
 .mproj small{font-size:12px;color:var(--sub);font-weight:400}
 .mproj .dot{width:8px;height:8px;border-radius:50%;background:var(--red)}
 .msheet{position:fixed;inset:0;z-index:7000;background:var(--u-scrim);align-items:flex-end}
 .msbox{width:100%;max-height:80vh;overflow-y:auto;background:var(--card, var(--list));border-radius:14px 14px 0 0;padding:8px 0 calc(10px + env(safe-area-inset-bottom,0px))}
 .msh{font-size:12.5px;color:var(--sub);padding:8px 18px 4px}
 .mss{padding:4px 14px 6px}.mss input{width:100%;box-sizing:border-box;height:38px;border:0;border-radius:8px;background:var(--chip);color:var(--text);padding:0 12px;font-size:16px;font-family:inherit;outline:none}
 .lgs{padding:6px 18px 4px}.lgs input{width:100%;box-sizing:border-box;font-size:16px;padding:9px 12px;border:1px solid var(--line);border-radius:8px;background:var(--field);color:var(--text)}
 .lgh{padding:12px 18px 2px;font-size:12px;color:var(--sub)}
 .msr{display:flex;align-items:center;gap:12px;width:100%;padding:13px 18px;border:0;background:transparent;color:var(--text);font-size:16px;text-align:left;cursor:pointer;font-family:inherit}
 .msr:active{background:var(--hover)}.msr.on{color:var(--accent);font-weight:600}
 .msr .ic{width:34px;height:34px;flex:0 0 auto;border-radius:8px;background:var(--chip);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;overflow:hidden;color:var(--text)}
 .msr .mlang{color:var(--sub);font-size:14px;margin-left:8px} .msr>small{max-width:40%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}   /* 右边小字太长（日文「このパソコンは…」）时截掉，别把左边名字挤成一个字 */.msr .mok{color:var(--accent);display:flex}
 .msr .ic img{width:100%;height:100%;object-fit:cover}.msr .ic svg{width:20px;height:20px}
 .msr .sp{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
 .msr .n{min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:var(--red);color:var(--u-on-color);font-size:11px;line-height:18px;text-align:center}
 .msr small{color:var(--sub);font-size:12px}
 .msver{text-align:center;color:var(--sub);font-size:12px;padding:14px 0 18px;opacity:.8}
.pkdone{position:fixed;inset:0;z-index:100000;background:var(--bg);display:flex;align-items:center;justify-content:center;padding:24px}.pkdone .pkbox{max-width:360px;text-align:center}.pkdone h2{font-size:22px;margin:0 0 12px}.pkdone p{color:var(--sub);line-height:1.7;margin:0}
 .msh.acchd{display:flex;align-items:center;justify-content:space-between;padding-right:10px}.accadd{border:0;background:none;color:var(--accent);width:34px;height:30px;display:flex;align-items:center;justify-content:center;cursor:pointer;border-radius:8px}.accadd .lu{width:20px;height:20px}
 .msr.acr.dead small{color:var(--red)}.msr.acr.dead b{opacity:.6}
 .msr.acr .sp{display:flex;flex-direction:column;gap:1px}.msr.acr .sp b,.msr.acr .sp small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.msr.acr .mok{color:var(--accent);display:flex}.msr.acr .mok .lu{width:20px;height:20px}
 .msr small.pint{color:var(--accent);border:1px solid var(--accent);border-radius:4px;padding:0 4px;font-size:11px}
 [data-pjpin]{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}
 /* 苹果上长按按钮常被系统手势取消（老板 #10716「试了不行」）：每行尾巴上放一个点一下就能置顶的小钮，长按留着当快捷方式 */
 /* 手机「设置」页放大（老板 b:10 #24521，比例照微信、样子是我们自己的）：顶上个人卡头像 64 / 名字 20 粗 / 编号 14 灰、上下留白大；每项字 17、行高 56、左图标 24、右箭头靠右 */
 .mepg .msr{min-height:56px;padding:0 18px;font-size:17px;gap:14px}
 .mepg .msr .ic{width:28px;height:28px;background:transparent;border-radius:0}.mepg .msr .ic svg{width:24px;height:24px}
 .mepg .msr .mgo{margin-left:auto;color:var(--sub);font-size:20px;line-height:1}
 .mepg .msr.mecard{padding:22px 18px 24px;gap:16px}
 .mepg .msr.mecard .ic{width:64px;height:64px;border-radius:14px;background:var(--chip);font-size:22px}
 .mepg .msr.mecard .sp{line-height:1.5}.mepg .msr.mecard .sp b{font-size:20px;font-weight:700}.mepg .msr.mecard .sp small{font-size:14px;color:var(--sub)}.mepg .msr.mecard>small{font-size:14px}
 .mepg .msr.acr .ic{width:40px;height:40px;border-radius:10px;background:var(--chip)}
 .msr .pinb{margin-left:auto;flex:none;font-size:12px;color:var(--sub);border:1px solid var(--line);border-radius:999px;padding:3px 10px}
 .msr .pinb.on{color:var(--accent);border-color:var(--accent)}
 .msep{height:8px;background:var(--bg)}.msr.pin{background:var(--hover)}
 .msr.dan{color:var(--red)}
 /* 键盘弹起时（老板 2026-09-25「中间这个怎么有个空档」）：底部给 iPhone 小横条留的安全边距还在，输入框和键盘之间空出一截 */
 body.kb footer{padding-bottom:8px}
/* 老板 #18197（iPhone 截图）：新系统键盘上面那条「∧ ∨ ✓」浮条盖在网页上、不算进可见高度，打字多了最后几行被它挡住 → 苹果手机打字时底部多留一截 */
/* 老板 b:10 #23767（董秘 #23773，第二次提）：不再按 Safari / 主屏 App 猜留白（原来主屏 App 多留 52 → 输入栏和键盘浮条之间空一大截）。
   两种都走同一套：键盘弹起时整页底边 = 键盘顶（含浮条）= innerHeight −（vv.offsetTop + vv.height），脚本实时量（--kbb），底部安全区归零 */
 /* 整页高度用脚本量出来的可见高度（老板 2026-09-25「底部有个空间」）：苹果「添加到主屏幕」全屏时 100dvh 少算状态栏那一截，底下露白 */
 /* 第二版（老板 2026-09-25「往下收的时候收不回去」）：量出来的高度在「添加到主屏幕」全屏模式下也不准。
    改成平时整页钉满屏幕（上下左右贴边，不靠量）；只有键盘弹起时才按可见区域的高度和位置排 */
 #app{position:fixed;left:0;right:0;top:0;bottom:0;height:auto}
 body.kb #app{top:var(--appt,0px);bottom:var(--kbb,0px);height:auto}
 /* 键盘弹起、正在输的不是聊天输入栏（#23891）：页面和所有浮在上面的卡片 / 弹窗都只占键盘上面那块（--appt / --apph = 可见区的顶和高），能滚 */
 body.kbo #app{top:var(--appt,0px);bottom:auto;height:var(--apph,100%)}
 body.kbo .gate{top:calc(var(--appt,0px) + 8px)!important;bottom:auto!important;margin:0 auto!important;max-height:calc(var(--apph,100%) - 16px)!important;overflow-y:auto!important}
 body.kbo .askw,body.kbo .dlg,body.kbo .msheet{top:var(--appt,0px)!important;bottom:auto!important;height:var(--apph,100%)!important}
 body.kbo .dlg{align-items:flex-start;overflow-y:auto}
 /* 顶部状态栏改成透明（老板 #12874）后，苹果的时间 / 电量一律是白字：亮色主题下在状态栏那一条垫一道深色，不然白字看不见 */
 /* 苹果 App（html.iosapp）里状态栏字的深浅由 App 按页面顶色定，不用垫（秘书 #24235：亮色时状态栏一条深灰） */
 html[data-theme="light"]:not(.iosapp) body::before{content:"";position:fixed;left:0;right:0;top:0;height:env(safe-area-inset-top,0px);background:#1E1E1E;z-index:80;pointer-events:none}
 /* 顶上的滚动提醒在聊天页最上面：给状态栏让位，下面的标题栏就不用再让一次 */
 .tick{flex-basis:auto;min-height:28px;padding-top:env(safe-area-inset-top,0px);box-sizing:content-box}
 body.hastk header{padding-top:0;height:52px}
 /* 运维页（老板 2026-09-25「手机的这个界面不太好看」）：电脑那张 9 列的大表格挤在手机上一列一个字 → 一人一张卡片 */
 /* 用量块比屏幕宽、整页能横滑（老板 b:10 #35397）：卡片里那行人名是 nowrap，flex 子项默认 min-width:auto 不肯缩 → 撑宽。都允许缩到屏宽 */
 .opsum{flex-direction:column}
 .opcard{flex:none;min-width:0;max-width:100%}
 .opnum>div{min-width:0}
 .optab tr{min-width:0;max-width:100%;box-sizing:border-box}
 .optab td:first-child .who{min-width:0}
 .optab td:first-child .who span{overflow:hidden;text-overflow:ellipsis}
 .optab,.optab tbody{display:block;width:100%}
 .optab tr:first-child{display:none}
 .optab tr{display:flex;flex-wrap:wrap;gap:8px 16px;padding:12px;margin-bottom:10px;border-radius:10px;background:var(--card,var(--list));border:1px solid var(--line)}
 .optab td{display:block;padding:0;border:0;white-space:nowrap;font-size:13px}
 .optab td[data-l]::before{content:attr(data-l);display:block;font-size:11px;color:var(--sub);margin-bottom:1px}
 .optab td:first-child,.optab td.opbtn{flex-basis:100%}
 .optab td.ophost{display:none}
 .optab td.opbtn:empty{display:none}
 .optab td.opbtn .btn{height:32px;padding:0 16px}
 .opsum .opcard small{white-space:normal}
 .optab{background:transparent;overflow:visible}
 .optab tr.bad{background:var(--u-red-bg)}.optab tr.bad td{background:transparent}
}
#wintb{display:none}
html.wintb .gate{top:32px}
/* #1314：要填邀请码时只留标题、报错和邀请码那一段（登录那些已经登完了，留着只会把卡片撑长） */
#gate.invmode>:not(#gtitle):not(#gerr):not(#ssobox),#gate.invmode #ssobox>:not(#invbox){display:none!important}
#gate.invmode #ssobox{border-top:0;margin-top:6px;padding-top:0}#gate.invmode #invbox{margin-top:0!important}
html.wintb #wintb{display:flex;position:fixed;top:0;left:0;right:0;height:32px;align-items:center;padding-left:14px;background:var(--rail);color:var(--sub);font-size:12px;z-index:8000;-webkit-app-region:drag;user-select:none;white-space:nowrap;overflow:hidden}
html.wintb body{padding-top:32px;box-sizing:border-box}
html.wintb #app{height:calc(100vh - 32px);height:calc(100dvh - 32px)}
html.wintb .pvbar{top:32px}
/* 动态效果（老板 b:10 #24333 / 秘书 #24335）：0.2–0.3 秒、先快后慢；系统开了「减弱动态效果」一律不动（整段包在 no-preference 里） */
@media (prefers-reduced-motion:no-preference){
@keyframes pgin{from{transform:translateX(100%)}to{transform:none}}
@keyframes pgout{from{transform:none}to{transform:translateX(100%)}}
@keyframes pgback{from{transform:translateX(-25%);opacity:.7}to{transform:none;opacity:1}}
@keyframes popin{from{opacity:0;transform:scale(.95)}to{opacity:1;transform:none}}
@keyframes popout{from{opacity:1;transform:none}to{opacity:0;transform:scale(.95)}}
@keyframes fadein{from{opacity:0}to{opacity:1}}
@keyframes fadeout{from{opacity:1}to{opacity:0}}
@keyframes msgin{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
/* ① 手机：进聊天从右滑入；返回时聊天页往右滑走、列表从左边推回来 */
@media (max-width:759px),(orientation:portrait) and (pointer:coarse) and (max-width:1100px){
 body.pgbk .side,body.pgbk .rail{animation:pgback .3s cubic-bezier(.33,1,.68,1)}
 /* 滑进来那 0.3 秒列表还留在底下（像 iPhone 自带的推入），聊天页浮在上面 */
 body.inchat.pgfwd .side,body.inchat.pgfwd .rail{display:flex!important}
 body.inchat.pgfwd .chat{position:fixed;top:0;left:0;right:0;bottom:0;z-index:60;box-shadow:-8px 0 24px rgba(0,0,0,.12)}
 body:not(.inchat) .chat.pgout{display:flex;position:fixed;top:0;left:0;right:0;bottom:0;z-index:60;pointer-events:none;animation:pgout .28s cubic-bezier(.33,1,.68,1) forwards}
}
/* 整页（设置、名片、「我的」…）同样右进右出；居中弹窗 / 菜单淡入 + 0.95→1 放大，关时反过来 */
.askw:not(.cfm){animation:pgin .3s cubic-bezier(.33,1,.68,1)}
/* 聊天 / 整页的「右边滑进来」由 slideIn() 做：页面头一帧要画很多消息，CSS 动画会在那一帧里白白放完（模拟器录屏里看着是直接跳出来）。先停在右边外，等画好下一帧再滑 */
.pgpre{transform:translateX(100%)!important}
.dlg.pgout,.msheet.pgout{display:flex!important;pointer-events:none;animation:pgout .26s cubic-bezier(.33,1,.68,1) forwards}
.dlg:not(.pg){animation:fadein .2s ease-out}.dlg:not(.pg) .dbox{animation:popin .22s ease-out}
.askw.cfm{animation:fadein .2s ease-out}.askw.cfm .askb{animation:popin .22s ease-out}
.askw.out{pointer-events:none;animation:fadeout .18s ease-out forwards}.askw.cfm.out .askb{animation:popout .18s ease-out forwards}
.askw.out:not(.cfm){animation:pgout .24s cubic-bezier(.33,1,.68,1) forwards}
.mmenu.pop,#cmenu,.mmscrim{animation:popin .18s ease-out}.mmscrim{animation-name:fadein}
/* ④ 新消息：从下面轻轻滑上来 */
.msgin{animation:msgin .26s ease-out}
/* ② 按压：按钮按下缩到 0.96、松手回弹（用 scale 属性，不和按钮自己的 transform 打架）；会话行 / 菜单项整行变暗 */
button,.btn,.ri{transition:scale .16s ease-out,box-shadow .16s ease-out}
button:not(.ss):active,.btn:active,.ri:active{scale:.96}
.ss:active,.mmi:active{box-shadow:inset 0 0 0 100vmax rgba(127,127,127,.14)}
}
/* 手机字号（#2743，老板 b:10 #36032–#36034 iPhone 截图「字整体太小」）：只在手机排版里放大，电脑上的字号一个不动。
   底线：正文 16 · 次要 / 提示 14 · 按钮 15 · 列表标题 16 · 时间 13 · 能点的 ≥44 高。
   故意不动的：未读数 / 红点、「客户」「AI」这类小标、头像里的字、底栏图标下的字（老板 #24654 定的 10）、图片上的角标、消息下面那排「引用 / 保存 / 翻译…」（13，放大会折成两行）。
   这块必须放在样式最后：同样的选择器靠「后写的赢」压住前面的小字号 */
@media (max-width:759px),(orientation:portrait) and (pointer:coarse) and (max-width:1100px){
 /* ① 群设置（「⋯」面板，手机上整屏） */
 .panel .psec{font-size:15px}
 .panel .psec h4{font-size:16px;font-weight:600;margin-bottom:8px}
 .panel .psec .v{font-size:16px}
 .panel input[type=text],.panel textarea,.panel select{font-size:16px;padding:10px 12px}
 .panel select{height:44px}
 .pgrid{grid-template-columns:repeat(4,minmax(0,1fr));gap:14px 4px}
 .pm{font-size:16px}
 .pm>span{max-width:100%}
 .pm>span.orig{font-size:13px}
 .pm .av,.pm .box{width:52px;height:52px}.pm .av{font-size:15px}
 .pact{font-size:15px}.pact b{font-size:16px}
 .pact button,.psave{height:44px;padding:0 16px;font-size:15px;border-radius:8px}
 .psave{min-width:88px}
 .pcard b{font-size:18px}.pcard small{font-size:14px}
 .plink{display:inline-flex;align-items:center;min-height:44px;font-size:15px}
 .pquick button{font-size:14px}
 .panel .hint{font-size:14px}
 .pdanger{height:46px;font-size:16px}
 /* ② 群管理 / 发起群聊（整页弹窗）和其它弹窗 */
 .dbox h3{font-size:18px}
 .dbox label.f,.askb label.f{font-size:16px;font-weight:600;color:var(--text);margin:16px 0 8px}
 .dbox input[type=text],.dbox .crow input[type=password],.dbox textarea,.dbox select{font-size:16px;padding:10px 12px}
 .dbox select{height:44px}
 /* 整页弹窗是竖排 flex：字放大后内容比屏幕高，输入框 / 下拉会被压扁（全局 textarea{flex:1} 让它的起始高度是 0，群管理里「群要求」只剩一条缝；成员名单是能滚的盒子，会被压到 0）→ 按自己的高度排、整页滚 */
 .dlg.pg .dbox>textarea,.dlg.pg .dbox>select,.dlg.pg .dbox>input,.dlg.pg .dbox>.mlist{flex-basis:auto;flex-shrink:0}
 .dbox .hint{font-size:14px}
 .dbox .csec>b{font-size:16px}.dbox .csec>small{font-size:14px}
 .mlist{max-height:min(55vh,460px);padding:4px}
 .mlist label{font-size:16px;min-height:44px;padding:6px 8px;gap:10px;box-sizing:border-box}
 .mlist label>span[data-ni]{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
 .mlist .av{width:32px;height:32px;font-size:13px}
 .mlist small{font-size:14px;flex:0 0 auto}
 .mlist .mu{font-size:14px;padding:8px;margin-left:4px}
 .mlist input[type=checkbox]{width:20px;height:20px;flex:0 0 auto;margin:0}
 .btn{font-size:15px}
 .dact .btn,.dbox .btn{min-height:44px}
 .dact .btn.pri{font-size:16px;min-width:96px}
 .derr,.err{font-size:14px}
 /* ③ 插件页 */
 .plgb{padding:12px 16px 28px}
 .plgs{font-size:15px;margin:22px 2px 6px}
 .plgr{padding:12px 2px;gap:10px}
 .plgr b{font-size:16px}
 .plgr small{font-size:14px}
 .plgw{font-size:15px}
 .plgk b{font-size:17px}.plgk label{font-size:15px}
 .lrbtn{font-size:15px;min-height:44px;padding:0 12px;justify-content:center}
 .cnft label{font-size:15px}.cnftd{font-size:14px}.cnfack{font-size:15px}
 /* ④ 其它页面：正文 / 列表标题 → 16 */
 .sn,.b{font-size:16px}
 .mcin input{font-size:16px}
 /* ⑤ 其它页面：次要文字、提示、小按钮 → 14 */
 .sm,.inbm,.inbw,.fucats,.fuc,.pgbar,.pgbar button,.pgh,.offh,.ctcc small,.ctcleg,.hvi small,.cyx small,.lrcat small,.lrtt small,.tdgrp,.tdp .pn small,.tdp .pn i,.tdi .tx small,.tdi .ac button,.opcard small,.optab .btn,.fcard .ff,.fcard .fmeta,.fa button,.cacct .msr small,.gfentry small,.gfhd,.spdt small,.agj .gfs,.agg,.ppt,.ppov2,.plp,.plo,.plrec small,.pzsec,.pzcnt,.pzauto,.pzct div,.pzq,.pzi,.mft,.mft button,.roles,.callnote,.callused,.callsel,.callmodel,.quote,.sysm span,.gone,.rpl,.more,.exp,.vtx,.pi,.chip,.gts,.gtn,.gtovh,.gtovr span,.rq,.bc,.gnote .gtog,.msh2,.lbhint,.rpop .rh,.msr small,.lgh,.msh,.cacct .msh,.inbt button,.inbs button,.hvc,.kbcr,.kbr p,.lrtx,.lrup,.lprate,.gfr,.gfnm,.pznote,.pzjb,.gnote,.clist .cst,.cpaste,.pzcmd code,.mark,.rb,.bcb,.cgsw,.mcover .mcv,.sh,.pn small,.tick{font-size:14px}
 .inbf button,.empty,.newver,.revhd,.hvtab,.cyx p,.tdp .cur,.tdnone,.fempty,.tban .tn,.hlr .sp .hint,.fblb,.gfseg button,.gfq,.gfsort,.gfr2,.gfmh,.gfs,.mch,.mca .btn,.agl,.agsel,.agh,.agsec,.agdt>summary,.agv,.agtp span,.ppday .ppall,.blog>summary,.plw,.revfs .gfc,.rvcp,.rserr,.rvch,.rvts,.rvok,.pzsub,.pzdlg a,.pzsafe,.mbox,.smenu div,.gtbar,.vfs,.pctdh,.psrch,.msb,.mutebar,.fsv .fsh,.lbox a,.rpop .rrow,.devr b,.lp1 .lpt,.vb,.calllog,.att-file,.rxc,.mmenu.glass .mmg .mmi span,.newb,.swacts b,.pfold,.cgh,.optab td,.agv::before,.agbig:not(:empty)::before{font-size:14px}
 .tdh button{font-size:15px}
 .prow .btn{height:40px;padding:0 12px;font-size:15px}
 /* ⑥ 时间 / 编号 / 极短的旁注 → 13 */
 .meta,.st2,.chs,.edtag,.lptm,.agt,.rdn,.rdu,.nl,.gfr small,.att-file .sz,.vtx summary,.trx .trl,.ps,.devr small,.devr .cur,.rpop .rg,.rpop .rrow small,.gfsm,.wsmade,.hvtab small,.kbi small,.kbr small,.kbdh small,.ppai,.mproj small,.msver,.bno2,.pchat,.ctcst,.tdsec,.optab td[data-l]::before{font-size:13px}
 .appi .apl{font-size:14px;max-width:68px}   /* 快捷图标下的字 13 → 14（#2753）*/
}
/* 手机字号补齐（#2778，老板 b:10 #36263 / 秘书 #36266）：手机上看得见的字一律不小于 14（底栏图标下的字、头像上的「AI」角标除外）。
   设置页每一行 17、行高不少于 52；「进入 DlxAi.Ai 后台」下面那句 14。只在手机排版里生效，电脑不动；放在样式最后靠「后写的赢」压住上面那块的 13。
   测量表：docs/截图/字号/2778-测量.md */
@media (max-width:759px),(orientation:portrait) and (pointer:coarse) and (max-width:1100px){
 /* ① 设置（通知与偏好）：每一行 17 / 不少于 52 高；行里的按钮、小字 */
 details.sec>summary{font-size:17px;min-height:52px;box-sizing:border-box;padding:12px 2px}
 .dbox .admgo+.hint{font-size:14px}
 .fzs button{font-size:15px;min-height:40px;height:auto;padding:6px 8px}
 .prow2 small,.mch small,.devr b,.devr small,.devr span{font-size:14px}
 .msver{font-size:14px}
 .secb [style*="font-size:12px"],.secb [style*="font-size:13px"],.secb [style*="font-size: 12px"],.secb [style*="font-size: 13px"]{font-size:14px!important}
 /* ② 登录 / 注册 / 找回密码 / 设备密码页（这些字写在标签上，要 !important 才压得住） */
 /* 脚本改过 style 的元素，属性会被重写成「font-size: 12px」（冒号后带空格），两种写法都要认 */
 .gate [style*="font-size:11px"],.gate [style*="font-size:12px"],.gate [style*="font-size:13px"],.gate [style*="font-size: 11px"],.gate [style*="font-size: 12px"],.gate [style*="font-size: 13px"]{font-size:14px!important}
 .gate select{font-size:14px!important}
 /* ③ 时间 / 编号 / 已读 / 页面副标题：上面那块定的 13 → 14 */
 .meta,.st2,.chs,.edtag,.lptm,.agt,.rdn,.rdu,.nl,.gfr small,.att-file .sz,.vtx summary,.trx .trl,.ps,.devr .cur,.rpop .rg,.rpop .rrow small,.gfsm,.wsmade,.hvtab small,.kbi small,.kbr small,.kbdh small,.ppai,.mproj small,.msver,.bno2,.pchat,.ctcst,.tdsec,.optab td[data-l]::before{font-size:14px}
 .rbtn,.xbtn{font-size:14px}
 .pm>span.orig,.mlist .av{font-size:14px}
 .cav .av span{font-size:14px}
 /* ④ 名字旁的小标（AI·CC / Mix / 人 / 系统）、状态签、类型签 */
 .hk{font-size:14px;line-height:20px;padding:0 5px}
 .tdi .st{font-size:14px;line-height:22px;padding:0 8px;border-radius:11px}
 .ctct{font-size:14px;padding:4px 7px}
 .gfdir{font-size:14px;min-height:32px}
 .lrh{font-size:14px}
 .b code{font-size:14px}
}
/* 控制台 2.0 + 底栏自定义（#2762）手机：底栏只排自己挑的那几格（c2off 藏、c2o1–4 定顺序，!important 压住 #members 的 order），字一律不小于 14 */
@media (max-width:759px),(orientation:portrait) and (pointer:coarse) and (max-width:1100px){
 .rail .c2ra{display:flex}
 .rail .c2off{display:none!important}
 .rail .c2o1{order:1!important}.rail .c2o2{order:2!important}.rail .c2o3{order:3!important}.rail .c2o4{order:4!important}
 .rail .c2first{order:0!important}   /* 没自己排过底栏的：设置排最左（老板 #36910）；自己排过的照他排的 */
 .c2ag{grid-template-columns:repeat(4,minmax(0,1fr));gap:14px 2px}
 #ctcv header.cwhd .ht{position:static;height:auto;align-items:flex-start;text-align:left}
 #ctcv header.cwhd{padding:env(safe-area-inset-top,0px) 8px 0 16px}#ctcv header.cwhd .hbtn{width:44px;height:44px}
 .cwbt{font-size:18px}.cwbb{font-size:15px;min-height:40px}.cwsec{font-size:17px}.cwtip{font-size:14px}.cwsrch input{font-size:16px;height:44px}
 .c2hd b{font-size:16px}.c2hd .c2pl,.c2hd .c2us{font-size:14px}
 .c2lk{font-size:15px;min-height:44px;padding:0 4px}
 .c2al{font-size:14px}
 .c2st,.c2hubtip,.noaibar{font-size:14px}
 .c2chip{font-size:15px;min-height:40px;padding:6px 14px}
 .tabwrap{flex-wrap:wrap;overflow-x:visible}   /* #2888 #2891（老板 b:10 #37073 #37099）：手机上的分类页签（控制台「全部应用」.c2chips、HTML 页 .hvtabs 都带 tabwrap）不横滑了，排不下就换行，一眼看全；电脑宽屏照旧一行 */
 .c2m{min-height:56px}.c2m b{font-size:16px}.c2m small{font-size:14px}
 .c2row{font-size:17px;min-height:52px}
 .c2rer{font-size:16px;min-height:48px}.c2rer small{font-size:14px}
}
/* ==== #2809 对话输入栏改胶囊（老板 b:10 #36520，秘书 #36522）—— 开始 ====
   整条输入栏 = 一个浮在底部的圆角胶囊：［＋］［笑脸（只电脑）］［输入框］［麦克风］［圆形发送］。
   一行高约 52、圆角 = 高的一半；多行往上长、圆角留 25 不变方。浅色白底 + 软阴影无硬边框；深色 #2A2A2A + 细边。
   底部不再有整条色带（footer 去掉上边线、底色同聊天区），左右各留 12，下面让出 home 条。放在样式最后，压过前面各版输入栏的规则 */
:root{--ibcap:#FFFFFF;--ibcapb:transparent;--ibcaps:0 2px 12px rgba(0,0,0,.08);--ibidle:#E7E7E9;--ibsendtx:#FFFFFF}
:root[data-theme="dark"]{--ibcap:#2A2A2A;--ibcapb:rgba(255,255,255,.13);--ibcaps:none;--ibidle:#3A3A3A;--ibsendtx:#1E1E1E}
footer{border-top:0;background:var(--chat);padding:8px 20px 16px}
/* #3110 老板 b:10 #39508：输入胶囊原来固定卡在 860 一小块、电脑宽窗口看着像没跟上；消息区（main#list）本来不设上限、贴着窗口两边。
   改成两边用同一条边线：都留 20px（main 本来就是）、都在超宽屏封顶 1100（这个数和 isMob() 的断点同一个值，纯粹数字凑巧，和断点逻辑无关），
   窗口没到 1100 时 max-width 不生效，两边照旧贴边——电脑 / 平板 / 手机都是这一条规则，不用再分断点 */
#list,footer>.rq,footer>.pend,footer>.bc,footer>.fin,footer>.emop,footer>.plusp,footer>.mutebar{max-width:1100px;margin-left:auto;margin-right:auto}
footer .fin{position:relative;display:flex;align-items:flex-end;gap:2px;min-height:52px;box-sizing:border-box;padding:5px 6px;border-radius:26px;background:var(--ibcap);border:1px solid var(--ibcapb);box-shadow:var(--ibcaps)}
footer .fin>.tx{flex:1;min-width:0;position:relative;display:flex}
footer .fin .tx #txt{flex:1;box-sizing:border-box;min-height:40px;height:40px;max-height:none;margin:0;padding:9px 6px;border:0;border-radius:0;background:transparent;box-shadow:none;font-size:15px;line-height:22px;overflow-y:auto}
footer .fin .tx #txt::placeholder{color:var(--ph)}
footer .fin>.clip{flex:0 0 auto;width:40px;height:40px;border-radius:50%;color:var(--ric)}
footer .fin>.clip svg{width:24px;height:24px;stroke-width:2}
footer .fin>.clip:hover,footer .fin>.micb:hover{background:var(--hover);color:var(--text)}
footer .fin>#plusb.on,footer .fin>#emob.on{color:var(--accent)}
footer .fin>.micb{position:static;flex:0 0 auto;width:40px;height:40px;margin:0;color:var(--ric);opacity:1;scale:1;pointer-events:auto;transition:none}
footer .fin>.micb{order:-2}footer .fin>#emob{order:-1}footer .fin>.tx{order:0}footer .fin>#plusb{order:1}footer .fin>.sendw{order:2}   /* 老板 b:10 #36723（秘书 #36726）：话筒放胶囊最左，「＋」挪到右边紧挨发送键（右边顺序：＋、发送） */
footer .fin>.micb svg{width:22px;height:22px}
footer .fin>.micb.rec{background:var(--u-red);color:var(--u-on-color)}
footer .fin .sendw{display:flex;align-items:center;flex:0 0 auto;height:40px!important;min-height:0!important;gap:2px;margin-left:2px}
footer .fin .sendw .send{order:2;width:36px;height:36px;min-width:36px;padding:0;margin:0;border:0!important;border-radius:50%!important;background:var(--accent)!important;color:var(--ibsendtx)!important;box-shadow:none;-webkit-backdrop-filter:none;backdrop-filter:none;display:flex;align-items:center;justify-content:center;opacity:1;transition:background .15s,color .15s}
footer .fin .sendw .send .sendt{display:none}
footer .fin .sendw .send .senda{display:block;width:20px;height:20px;stroke-width:2.4}
footer .fin .sendw.idle .send{background:var(--ibidle)!important;color:var(--sub)!important;opacity:1;cursor:default}
footer .fin .sendw .sendm{order:1;width:22px;height:36px;border:0!important;border-radius:11px!important;background:transparent!important;color:var(--sub)!important}
footer .fin .sendw .sendm:hover{background:var(--hover)!important}
footer .fin .sendw .smenu{bottom:calc(100% + 14px)}
footer .fin.sending .sendw .send::after{border-color:rgba(255,255,255,.45);border-top-color:var(--ibsendtx)}
footer .fin.sending>.tx::after{display:none}
footer .rq,footer .pend,footer .bc{margin-bottom:6px}
footer .emop,footer .plusp{border-top:0}
@media (max-width:759px),(orientation:portrait) and (pointer:coarse) and (max-width:1100px){
 footer{padding:6px 12px calc(10px + env(safe-area-inset-bottom,0px))}
 body.kb footer,body.vshort footer{padding-bottom:8px}
 footer .fin{min-height:52px}
 footer .fin .tx #txt{font-size:16px}
 footer .fin .sendw .sendm{display:none}
 footer .fin.typing .tx #txt{padding-right:6px}
 footer .fin.typing>.micb{opacity:1;scale:1;pointer-events:auto}
}
/* ==== #2809 对话输入栏改胶囊 —— 结束 ==== */
/* ==== #2937 联系人分「人 / AI」（老板 b:10 #37612，秘书 x:2:10 #37615）—— 开始 ====
   成员页顶上一排筛选「全部 / 人 / AI」：复用媒体页顶上那种标签 .gfc（选中 = 金色描边）；大类标题 .ps2937k 比身份小组标题 .cgh 大一档。
   选人处 .ps2937c 两栏：电脑够宽就左「人」右「AI」（每栏至少 240，放不下自动上下排），手机一律上下两段。颜色只用变量 */
.ps2937f{display:flex;gap:8px;flex-wrap:wrap;margin:2px 0 8px;flex:0 0 auto}
.ps2937k{font-size:15px;font-weight:600;color:var(--text);padding:14px 8px 2px}
.clist .ps2937k:first-child{padding-top:4px}
.ps2937c{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:4px 16px;align-items:start}
.ps2937s{min-width:0;display:flex;flex-direction:column;gap:2px}
.ps2937h{font-size:13px;font-weight:600;color:var(--sub);padding:8px 6px 4px}
.ps2937e{font-size:13px;color:var(--sub);padding:6px 6px 10px}
.atpop p.ps2937a{margin:0;padding:8px 10px 2px;font-size:12px;font-weight:600;color:var(--sub);cursor:default}
@media (max-width:759px),(orientation:portrait) and (pointer:coarse) and (max-width:1100px){
 .ps2937c{grid-template-columns:1fr}
 .ps2937h,.ps2937e,.atpop p.ps2937a{font-size:14px}
 .ps2937k{font-size:16px}
}
/* ==== #2937 联系人分「人 / AI」—— 结束 ==== */
/* ==== #2946 选人处搜索（老板 b:10 #37739，秘书 x:2:10 #37740）—— 开始 ====
   搜索框走 #2922 的 .fm-field / .fm-input（44 高、圆角 12）；手机上贴在弹窗最上面（sticky），键盘弹起时整页缩到键盘上面（10-04 规则，body.kbo 那套），框不会被盖住。颜色只用变量 */
.fm-field.ps2946b{margin:0 0 8px;max-width:none}
.ps2946x{display:none!important}
.ps2946e{font-size:13px;color:var(--sub);padding:6px 6px 10px}
.ps2946z{font-size:14px;color:var(--sub);text-align:center;padding:18px 12px}
.gtadd input.ps2946i{height:var(--u-h-input);min-height:var(--u-h-input);border-radius:var(--u-r-input);font-size:16px;padding:0 12px}
@media (max-width:759px),(orientation:portrait) and (pointer:coarse) and (max-width:1100px){
 .fm-field.ps2946b{position:sticky;top:0;z-index:3;background:var(--bubble);margin:0;padding:4px 0 8px}
 .ps2946e{font-size:14px}
}
/* ==== #2946 选人处搜索 —— 结束 ==== */
/* ==== 快捷栏全部列出、左右滑（老板 b:10 #37758，秘书 #37759）：两头有没露出来的图标时淡出一点；拖动时不选字 ==== */
.appbar.fr{-webkit-mask-image:linear-gradient(to right,black calc(100% - 28px),transparent);mask-image:linear-gradient(to right,black calc(100% - 28px),transparent)}
.appbar.fl{-webkit-mask-image:linear-gradient(to right,transparent,black 28px);mask-image:linear-gradient(to right,transparent,black 28px)}
.appbar.fl.fr{-webkit-mask-image:linear-gradient(to right,transparent,black 28px,black calc(100% - 28px),transparent);mask-image:linear-gradient(to right,transparent,black 28px,black calc(100% - 28px),transparent)}
.appbar.drag,.appbar.drag .appi{cursor:grabbing;-webkit-user-select:none;user-select:none}
/* ==== #2922 表单统一排法（老板 b:10 #37364，秘书 x:2:10 #37366）—— 《App 设计规范》的表单就指这一段 ====
   「连接 / 添加 / 填钥匙」这类表单一律：标签在上 → 输入框整行宽（电脑最宽 560）、44 高（--u-h-input）、圆角 12 → 提示小字在框下 → 主按钮单独一行（52 高、整行宽）→ 次要说明小字在按钮下。
   生成：fmField(标签, 输入框 HTML, 提示, 外层属性) / fmActions(按钮 HTML, 说明)；输入框 class="fm-input"，主按钮 class="btn pri fm-btn"。
   放在 #2867 块前面（#2867 结束后只许跟 #2895、#2895 要排在样式最后）；选择器都比 #2895 的 .btn / .dbox :is(input…) 具体，不靠先后。
   用在：设置「站点通知」、控制台 ① 添加我的 AI / 自带钥匙 / ③ 邀请同事 / ⑤ 连接 DlxAi 平台 / ⑥ 我的 AI 钥匙、总部「添加我的 AI」「邀请同事」、甲方「添加甲方」、连接自定义 MCP、连接飞书。
   输入框在键盘上面：弹窗 / 设置页里的框走 1.1.137 那套（键盘弹起时页面缩到键盘上面、正在输的框滚到中间），这里不另写 */
.fm-field{display:flex;flex-direction:column;align-items:stretch;gap:6px;margin-top:14px;min-width:0}
.fm-label{display:block;margin:0;font-size:14px;font-weight:600;line-height:1.4;color:var(--text)}
.fm-sec{margin-top:12px}
.dbox .hint.fm-intro,.fm-intro{margin:4px 0 0;font-size:14px;line-height:1.55;color:var(--text)}
.fm-field .fm-input,.dbox .fm-field input.fm-input,.dbox .fm-field select.fm-input{display:block;width:100%;max-width:none;box-sizing:border-box;height:var(--u-h-input);min-height:var(--u-h-input);margin:0;padding:0 14px;border:1px solid var(--fline);border-radius:var(--u-r-input);background:var(--field);color:var(--text);font-family:inherit;font-size:16px;line-height:normal;flex:none}
.fm-field input.fm-input{-webkit-appearance:none;appearance:none}
.fm-field .fm-input::placeholder{color:var(--sub);opacity:.75}
.fm-field .fm-input:focus{outline:none;border-color:var(--u-gold);box-shadow:0 0 0 3px var(--u-gold-bg)}
.fm-hint{margin:0;font-size:13px;line-height:1.5;color:var(--sub)}
.fm-hint:empty{display:none}
.fm-actions{display:flex;flex-direction:column;align-items:stretch;gap:10px;margin-top:18px}
.fm-actions .fm-btn,.dbox .fm-actions .btn.fm-btn{display:flex;align-items:center;justify-content:center;width:100%;height:auto;min-height:var(--u-h-lg);margin:0;padding:0 20px;border-radius:var(--u-r-btn);font-size:17px;font-weight:600}
.fm-note{font-size:13px;line-height:1.5;color:var(--sub);text-align:center}
.fm-note:empty{display:none}
.fm-note a,.fm-alt a{color:var(--link);text-underline-offset:2px}
.fm-alt{margin-top:14px;font-size:14px}
.fm-list{margin:6px 0 2px}
.fm-actions+.hint{margin-top:14px}
/* 电脑上表单最宽 560（《App 设计规范》：电脑上按钮不拉满整页），手机整行 */
@media (min-width:760px){.fm-field,.fm-actions{max-width:560px}}
/* 整页弹窗里直接放在 .dbox 下的（总部加人、添加甲方）：那里 .dlg.pg .dbox>:not(h3) 把每块定成居中的 720 栏；表单收到 560、左边和 720 栏（上下的说明）对齐，不居中（margin 的百分比按 .dbox 宽算） */
@media (min-width:760px){.dlg.pg .dbox>.fm-field,.dlg.pg .dbox>.fm-actions{max-width:560px;margin-left:max(0px,calc((100% - 720px) / 2));margin-right:auto}}
/* ==== #2922 表单统一排法 —— 结束 ==== */
/* ==== #2867 对话列表间距改宽松（老板 b:10 #36922「参考微信的间距，我们的太密集了」，秘书 x:2:10 #36925）—— 开始 ====
   只改间距和大小，颜色 / 图标 / 名字 / 虚线分隔照旧（不照抄微信的样子）。电脑、手机共用：
   一行 72 高（上下各 12 + 头像 48，头像上下居中）· 头像 40 → 48、圆角照旧 · 名字常规粗细 · 名字和摘要之间 4 · 摘要一行、超出省略号；
   分隔虚线从文字左边开始（不压在头像下面）、颜色比原来浅一档（--sepl，亮 / 暗各一档）。
   置顶、选中、「客户」「客服」两行、客服 / 客户收件箱里的群列表都是同一个 .ss，成员名单（.clist .crow）同样 72 / 48。
   手机字号：名字 16 → 17、摘要 14（灰）、时间 14 和名字同一条基线；名字后的小标（AI·CC / Mix）保持 14 —— 比名字小一档，也守住 #2778「手机字不小于 14」。电脑字号不动（#2743）。
   放在样式最后，靠「后写的赢」压住前面 .ss / .av / 手机字号那几块 */
:root{--sepl:rgba(0,0,0,.06)}:root[data-theme="dark"]{--sepl:rgba(255,255,255,.08)}
#tabs .ss{gap:12px;padding:12px 12px;min-height:72px;box-sizing:border-box;align-items:center}
#tabs .ss .av{width:48px;height:48px;font-size:16px}
#tabs .ss .av svg{width:29px;height:29px}
#tabs .ss .custav svg{width:26px;height:26px}
#tabs .ss .av .coll>*{font-size:10px}
#tabs .ss .inba{font-size:20px}
#tabs .ss .sn{font-weight:400}
#tabs .ss .sm{margin-top:4px}
#tabs .ss+.ss::before{left:72px;right:12px;border-top-color:var(--sepl)}
.clist .crow{padding:12px 8px;min-height:72px;box-sizing:border-box}
.clist .crow .cav .av{width:48px;height:48px;font-size:16px}
.clist .crow .cn b{font-weight:400}
@media (max-width:759px),(orientation:portrait) and (pointer:coarse) and (max-width:1100px){
 #tabs .ss .sn{font-size:17px}
 #tabs .ss .sm{font-size:14px}
 #tabs .ss .st2{font-size:14px}
 #tabs .ss .hk{font-size:14px}
 .clist .crow .cn{font-size:17px}
 .clist .crow .cav .av span{font-size:16px}
}
/* ==== #2867 对话列表间距 —— 结束 ==== */
/* ==== #2895 公共样式（老板 b:10 #37099 #37118 #37127，秘书 x:2:10 #37101 #37120 #37128）—— 开始 ====
   全 App 一套：颜色只有「金（主色）+ 红（危险）」，不再有绿按钮、蓝按钮、蓝链接（链接 = 金字）；
   按钮两种尺寸：大（整行 / 主操作）52 高、圆角 14；小（行内）36 高、圆角 10。主 = 实心金，次 = 浅底 + 细边，危险 = 红；图标在字左边、上下居中。
   圆角：头像 50%（正圆 —— 老板 b:10 #37439 改回正圆，取代 #37242 的 30% 圆角方；全 App 只认 --u-r-av 这一个变量）、应用图标 22%、卡片 16、输入框 12。标签一种：浅底同色小标（.utag；名字旁的 .hk 也是它）。
   空状态一种：图标 + 一句话 + 一个主按钮（.uempty，ux2895Empty() 生成）。顶栏：内容 44 高（--u-bar），手机 .tbar 50 = 44 + 下面留 6（#2894 那条，不重做）。
   保留的「别的颜色」只在有意义的地方：在线小点、连接器红黄绿灯、运维健康、项目 / 发布阶段图例、各平台品牌色、头像身份色 —— 清单见 docs/平台/AI工作台/功能/工作台-导航.md 改动记录。
   放在样式最后，靠「后写的赢」压住前面各处 */
:root{--u-gold:#B8872B;--u-gold-tx:#8F6A1F;--u-gold-bg:rgba(184,135,43,.12);--u-on-gold:#FFFFFF;--u-red:#E5484D;--u-red-bg:rgba(229,72,77,.10);
 --u-btn2:#F5F5F5;--u-btn2-line:#DCDCDC;--u-h-lg:52px;--u-h-sm:36px;--u-h-input:44px;--u-r-btn:14px;--u-r-btn-sm:10px;--u-r-card:16px;--u-r-input:12px;--u-r-app:22%;--u-r-av:50%;--u-r-tag:6px;--u-bar:44px;
 --u-sub2:#9A9A9A;--u-time:#B0B0B0;--u-on-color:#FFFFFF;--u-media:#000000;--u-scrim:rgba(0,0,0,.45);--u-media-btn:rgba(255,255,255,.16);
 --u-sw-w:46px;--u-sw-h:28px;--u-sw-knob:22px;--u-r-sw:14px}
:root[data-theme="dark"]{--u-gold:#D8B45A;--u-gold-tx:#D8B45A;--u-gold-bg:rgba(216,180,90,.15);--u-on-gold:#1E1E1E;--u-red:#FF6B66;--u-red-bg:rgba(255,107,102,.12);
 --u-btn2:#2C2C2C;--u-btn2-line:#444444;--u-sub2:#8A8A8A;--u-time:#6E6E6E}
/* 链接：金字 + 下划线 */
.b a:not(.btn),.dbox a:not(.btn):not(.plink),.hint a,.uempty a{color:var(--link);text-underline-offset:2px}
/* 按钮 */
.btn{border-radius:var(--u-r-btn-sm);background:var(--u-btn2);border-color:var(--u-btn2-line);color:var(--text)}
.btn:has(svg){display:inline-flex;align-items:center;justify-content:center;gap:6px}.btn svg{flex:0 0 auto;width:18px;height:18px}
.btn.pri{background:var(--u-gold);border-color:var(--u-gold);color:var(--u-on-gold)}
.btn.dan{background:var(--u-red-bg);border-color:transparent;color:var(--u-red)}
.ubtn,.btn.lg,.askb .dact .btn,.lockv .btn,.gfsave{min-height:var(--u-h-lg);height:auto;border-radius:var(--u-r-btn);font-size:17px;font-weight:600;padding:0 20px}
.ubtn{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:1px solid var(--u-btn2-line);background:var(--u-btn2);color:var(--text);cursor:pointer;font-family:inherit}
.ubtn.pri{background:var(--u-gold);border-color:var(--u-gold);color:var(--u-on-gold)}.ubtn.dan{background:var(--u-red);border-color:var(--u-red);color:var(--u-on-color)}
.ubtn svg{width:20px;height:20px;flex:0 0 auto}
.askb .dact .btn.dan{background:var(--u-red);border-color:var(--u-red);color:var(--u-on-color)}
.lockv .btn,.gfsave{width:100%}
/* 圆角：头像 50%（正圆，老板 b:10 #37439）· 应用图标 22% · 卡片 16 · 输入框 12 */
.av,#lockav .av,.pzav,.callav,.pcmav,.stgav,.mlist .av,.rpop .rrow .av,.pcard .av,.mcover .av{border-radius:var(--u-r-av)!important}
.appi .apic,.c2ai,.ctcc .ctci{border-radius:var(--u-r-app)}
.stgc,.pgroup,.mcard,.fcard,.opcard,.rvadd,.agj,.c2re,.lrcat,.ctcc{border-radius:var(--u-r-card)}
.dbox :is(input:not([type=checkbox],[type=radio],[type=range],[type=color],[type=file]),textarea,select),.lockv input,.gate input{border-radius:var(--u-r-input)}
/* 标签：浅底同色小标（名字旁的 AI·CC / AI / 人 / 系统 都是这一种） */
.utag,.hk{display:inline-flex;align-items:center;height:20px;padding:0 6px;border-radius:var(--u-r-tag);font-size:12px;line-height:20px;font-weight:500;font-style:normal;vertical-align:2px;white-space:nowrap;background:var(--u-gold-bg);color:var(--u-gold-tx)}
.utag.mute,.hk.hu,.hk.sys{background:var(--chip);color:var(--sub)}.utag.red{background:var(--u-red-bg);color:var(--u-red)}
.hk{margin-left:6px}
/* 空状态：图标 + 一句话 + 一个主按钮 */
.uempty{display:flex;flex-direction:column;align-items:center;gap:14px;padding:48px 24px;text-align:center;color:var(--sub)}
.uempty .uempty-ic{width:64px;height:64px;border-radius:50%;background:var(--u-gold-bg);color:var(--u-gold);display:flex;align-items:center;justify-content:center}
.uempty .uempty-ic svg{width:30px;height:30px}
.uempty p{margin:0;max-width:320px;font-size:15px;line-height:1.55;color:var(--sub)}
.uempty .ubtn{min-width:160px}
/* 对话列表疏密（#37118）：一行 76 高、头像和字间距统一 14；摘要和时间淡一档，摘要右边留 48 再省略（老板 #37194「右边太密」：比要求的 40 多给 8）；时间 13；名字保持深色 */
#tabs .ss{gap:14px;padding:14px 12px;min-height:76px}
#tabs .ss+.ss::before{left:74px}
#tabs .ss .sn{color:var(--text)}
#tabs .ss .sm{color:var(--u-sub2);padding-right:48px}
#tabs .ss .st2{color:var(--u-time);font-size:13px}
#tabs .ss .sm .at{color:var(--red)}
#tabs .ss.on .sm,#tabs .ss.on .st2{opacity:1}
/* 顶栏：内容 44 高；手机 .tbar（设置页 / 对话列表共用）= 44 + 下面留 6 */
@media (max-width:759px),(orientation:portrait) and (pointer:coarse) and (max-width:1100px){
 .tbar{min-height:calc(var(--u-bar) + 6px)}
 #tabs .ss .st2{font-size:13px}
 .utag,.hk,#tabs .ss .hk{font-size:14px;height:22px;line-height:22px}
 .btn.lg,.ubtn{font-size:17px}
}
/* 手机输入栏（老板 b:10 #37196 #37197，秘书 x:2:10 #37202）：空着 = ［话筒］［输入框］［＋］，没有发送键；一有字 / 有待发附件（.fin.typing，syncSendBtn 里切）
   发送键从右边展开、「＋」顺着滑到发送键左边 —— 只动宽度和缩放，150ms，不跳；不换 DOM、不动焦点，拼音输入法打到一半也不会掉键盘。电脑输入栏不变 */
@media (max-width:759px),(orientation:portrait) and (pointer:coarse) and (max-width:1100px){
 footer .fin .sendw{width:0;margin-left:0;opacity:0;overflow:hidden;pointer-events:none;transition:width .15s ease,margin-left .15s ease,opacity .15s ease}
 footer .fin .sendw .send{flex:0 0 36px;transform:scale(.6);transition:transform .15s ease,background .15s,color .15s}
 footer .fin.typing .sendw{width:36px;margin-left:4px;opacity:1;pointer-events:auto}
 footer .fin.typing .sendw .send{transform:none}
}
@media (prefers-reduced-motion:reduce){footer .fin .sendw,footer .fin .sendw .send{transition:none}}
:root{--u-other:#2F80ED}:root[data-theme="dark"]{--u-other:#4C8DF6}
/* #2917（老板 b:10 #37352，秘书 x:2:10 #37354）金 + 红之外唯一留下的蓝：「别的项目组 / 工作台有新消息」。
   1.1.402 把底栏「对话」左上那个数换成金色后，和本组的红数（右上）分不出来；蓝 = 「在别处」，有意义，所以留。
   用在：底栏「对话」左上 #tot2（.rb-o）、切换项目组列表里不是当前组的未读数（.msr:not(.on) .n）、项目组栏 / 左栏不是当前组的未读数（.pj:not(.on) .bd、.prj:not(.on) .bd）；当前组照旧红 */
.rb-n.rb-o,.msr:not(.on) .n,.pj:not(.on) .bd,.prj:not(.on) .bd{background:var(--u-other)}
/* ==== #2895 公共样式 —— 结束 ==== */
