/* WMS 站内聊天（2026-09-22）：微信式面板 + 消息翻译 + 未读闪烁/跑马灯。
   2026-09-23 峰哥定：取消 QQ 式贴顶吸附与悬浮球，入口=功能搜索框左边的聊天按钮，点击弹出。
   独立文件，index.html 只注入一行引入。
   表情只用 Unicode 标准字符（系统字体渲染），零版权。配色跟随 WMS 浅色主题。 */

/* 入口按钮（2026-09-23 峰哥定）：集成在功能搜索框左边（PC，随搜索框进各页标题行）/
   手机顶栏 header。position:relative 承载未读角标；点击弹出聊天窗口。 */
#chat-nav-btn{position:relative;display:none;align-items:center;justify-content:center;flex-shrink:0;
  border:1px solid #dbe3ef;background:#fff;border-radius:8px;cursor:pointer;padding:6px 10px;
  line-height:1;font-family:inherit;font-size:13px;color:#07c160;
  user-select:none;-webkit-user-select:none;margin-left:4px}
#chat-nav-btn.on{display:inline-flex}
#chat-nav-btn:hover{border-color:#07c160;background:#f4fdf8}
#chat-nav-btn svg{width:20px;height:20px;display:block;pointer-events:none}
/* 台账页标题行的搜索框压矮过，按钮跟着压矮保持同排（同 index.html 口径） */
#v-ledger h2 #chat-nav-btn{padding:3px 8px}
/* 手机端（m.html 顶栏是深色）：半透明白底白描边 */
header #chat-nav-btn{background:rgba(255,255,255,.14);border-color:rgba(255,255,255,.42);color:#eafff3}
header #chat-nav-btn:hover{background:rgba(255,255,255,.26);box-shadow:none}
/* 未读闪烁：绿光呼吸脉冲（box-shadow 通道，不占 transform） */
@keyframes chatNavPulse{
  0%,100%{box-shadow:0 0 0 0 rgba(7,193,96,0)}
  50%{box-shadow:0 0 0 8px rgba(7,193,96,.24)}
}
#chat-nav-btn.chat-blink{animation:chatNavPulse 1.5s ease-in-out infinite;border-color:#07c160}
/* 新消息到达：入口按钮抖一下 */
@keyframes chatShake{
  0%,100%{transform:translateX(0) rotate(0)}
  15%{transform:translateX(-4px) rotate(-8deg)}
  35%{transform:translateX(4px) rotate(8deg)}
  55%{transform:translateX(-3px) rotate(-6deg)}
  75%{transform:translateX(3px) rotate(4deg)}
}
#chat-nav-btn.chat-shake{animation:chatShake .5s ease-in-out}

/* 未读角标（挂在入口按钮上）：有未读才显示 */
#chat-badge{position:absolute;top:-6px;right:-6px;min-width:18px;height:18px;padding:0 5px;border-radius:9px;
  background:#e5484d;color:#fff;font-size:11px;font-weight:600;line-height:18px;text-align:center;
  box-shadow:0 2px 6px rgba(0,0,0,.25);display:block;pointer-events:none}
#chat-badge[hidden]{display:none}

/* 新消息到达：右下角提示卡片（悬浮球上方堆叠，最多 3 条，点击直达房间） */
#chat-toasts{position:fixed;right:18px;bottom:32px;z-index:9991;display:flex;flex-direction:column;gap:8px;
  align-items:flex-end;pointer-events:none;max-width:min(340px,calc(100vw - 36px))}
.chat-toast{pointer-events:auto;width:100%;background:#fff;border:1px solid #dbe3ef;border-left:3px solid #07c160;
  border-radius:10px;box-shadow:0 8px 24px rgba(15,23,42,.18);padding:9px 12px;cursor:pointer;
  animation:chatToastIn .22s ease-out;max-width:340px}
.chat-toast:hover{background:#f6fef9}
@keyframes chatToastIn{from{opacity:0;transform:translateX(24px)}to{opacity:1;transform:translateX(0)}}
.chat-toast.out{opacity:0;transform:translateX(24px);transition:opacity .2s ease,transform .2s ease}
.chat-toast .tt-head{display:flex;align-items:center;gap:6px;font-size:12.5px;font-weight:600;color:#0f172a;
  margin-bottom:3px}
.chat-toast .tt-room{flex:none;padding:1px 6px;border-radius:99px;background:#e8f8ef;color:#059048;font-size:11px;
  font-weight:600;max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chat-toast .tt-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chat-toast .tt-body{font-size:12.5px;color:#475569;line-height:1.4;max-height:36px;overflow:hidden;
  word-break:break-word}
.chat-toast .tt-n{flex:none;color:#e5484d;font-size:11px;font-weight:600}

/* 未读跑马灯：贴屏幕最底边，z-index 低于球和面板（从它们底下穿过，不抢点击） */
#chat-ticker{position:fixed;left:0;right:0;bottom:0;height:24px;z-index:9980;display:none;
  background:rgba(15,23,42,.88);color:#f1f5f9;font-size:12px;align-items:stretch;overflow:hidden;
  box-shadow:0 -2px 10px rgba(15,23,42,.22)}
#chat-ticker.on{display:flex}
#chat-ticker .tk-label{flex:none;padding:0 12px;background:linear-gradient(135deg,#07c160,#059048);
  color:#fff;font-weight:600;line-height:24px;cursor:pointer}
#chat-ticker .tk-track{flex:1;position:relative;overflow:hidden}
#chat-ticker .tk-inner{position:absolute;left:0;top:0;white-space:nowrap;line-height:24px;
  will-change:transform;display:inline-block}
#chat-ticker .tk-item{display:inline-block;padding:0 18px;cursor:pointer}
#chat-ticker .tk-item b{font-weight:600;color:#a7f3c9}
#chat-ticker .tk-item:hover{color:#7ee2a8;text-decoration:underline}

#chat-panel{position:fixed;right:18px;bottom:80px;z-index:9992;width:720px;height:480px;max-width:calc(100vw - 24px);
  max-height:calc(100vh - 40px);background:#fff;border:1px solid #dbe3ef;border-radius:14px;
  box-shadow:0 16px 48px rgba(15,23,42,.22);display:none;flex-direction:column;overflow:hidden;
  font-size:13px;color:#1f2937}
#chat-panel.open{display:flex}

/* 八向缩放手柄（2026-09-23 峰哥要：边框可拖动改尺寸，大小按用户记忆）
   边条一半压在面板外 —— 不挡滚动条、不抢内容点击；右下角保留原来的斜纹把手。 */
.chat-rs{position:absolute;z-index:8;touch-action:none}
.chat-rs-n{top:-5px;left:14px;right:14px;height:10px;cursor:ns-resize}
.chat-rs-s{bottom:-5px;left:14px;right:14px;height:10px;cursor:ns-resize}
.chat-rs-w{left:-5px;top:14px;bottom:14px;width:10px;cursor:ew-resize}
.chat-rs-e{right:-5px;top:14px;bottom:14px;width:10px;cursor:ew-resize}
/* 角手柄要往里挪：面板有 14px 圆角，圆角外的区域既画不出来也不接收点击，
   贴着 -2px 放会让手柄一半落在圆角外「点不到」（2026-09-23 无头实测：右下角 -3px 处命中的是页面）。 */
.chat-rs-nw{left:0;top:0;width:20px;height:20px;cursor:nwse-resize}
.chat-rs-ne{right:0;top:0;width:20px;height:20px;cursor:nesw-resize}
.chat-rs-sw{left:0;bottom:0;width:20px;height:20px;cursor:nesw-resize}
.chat-rs-se{right:0;bottom:0;width:20px;height:20px;cursor:nwse-resize;border-radius:0 0 12px 0;
  background:linear-gradient(135deg,transparent 0 52%,rgba(31,41,55,.42) 52% 60%,transparent 60% 70%,
    rgba(31,41,55,.42) 70% 78%,transparent 78%)}
/* 截图遮罩：抓帧铺满全屏，拖拽框选（选区回亮 + 虚线框 + 尺寸标签） */
#chat-shot{position:fixed;inset:0;z-index:10000;cursor:crosshair;background:#0b1220}
#chat-shot canvas{position:absolute;inset:0;width:100%;height:100%;touch-action:none}
#chat-shot .shot-hint{position:absolute;top:14px;left:50%;transform:translateX(-50%);
  background:rgba(7,193,96,.95);color:#fff;font-size:13px;padding:6px 16px;border-radius:20px;
  pointer-events:none;box-shadow:0 4px 14px rgba(0,0,0,.3)}
.chat-tip{position:fixed;top:16px;left:50%;transform:translateX(-50%);z-index:10001;
  background:rgba(15,23,42,.92);color:#fff;font-size:13px;padding:8px 18px;border-radius:8px;
  box-shadow:0 6px 18px rgba(0,0,0,.25);pointer-events:none}
/* 截本页时藏起聊天自身 UI，截图里不留自己 */
body.chat-shot-hide #chat-panel,body.chat-shot-hide #chat-nav-btn,body.chat-shot-hide #chat-ticker{display:none!important}

.chat-head{display:flex;align-items:center;gap:8px;padding:10px 12px;
  background:linear-gradient(135deg,#07c160,#059048);color:#fff;flex:none;
  cursor:move;user-select:none;-webkit-user-select:none;touch-action:none}
.chat-head b{font-size:14px;font-weight:600}
.chat-head .chat-sub{font-size:11.5px;opacity:.85}
/* 标题栏右侧按钮组：钉住 / 贴顶切换 / 收起 */
.chat-head .chat-head-acts{margin-left:auto;display:flex;align-items:center;gap:6px;flex:none}
.chat-head button{background:rgba(255,255,255,.18);border:none;color:#fff;border-radius:8px;
  padding:3px 10px;cursor:pointer;font-size:12px;margin-left:0}
.chat-head button:hover{background:rgba(255,255,255,.32)}
.chat-head button.pin-on{background:rgba(255,255,255,.46);font-weight:600}
.chat-head button.dock-on{background:rgba(255,255,255,.38)}

.chat-tools{display:flex;align-items:center;gap:10px;padding:7px 12px;border-bottom:1px solid #e5eaf2;
  background:#f8fafc;font-size:12px;color:#64748b;flex:none;flex-wrap:wrap}
.chat-tools select{border:1px solid #dbe3ef;border-radius:7px;padding:2px 6px;font-size:12px;background:#fff}
.chat-tools label{display:flex;align-items:center;gap:4px;cursor:pointer}
/* index.html 全局表单样式（input/select 宽 100%、label 块级）会打进面板：
   下拉框被拉满整行 → 工具条竖排，复选框 100% 宽 → 「自动翻译收到的消息」被挤成竖排。这里收回（2026-09-22 实测修复） */
#chat-panel select,#chat-panel input{width:auto}
#chat-panel label{margin-bottom:0}
.chat-body{flex:1;display:flex;min-height:0}

.chat-side{width:142px;flex:none;border-right:1px solid #e5eaf2;background:#fbfcfe;
  overflow-y:auto;padding:4px 0}
.chat-side-item{display:flex;align-items:center;gap:7px;padding:8px 9px;cursor:pointer;
  border-left:3px solid transparent;position:relative}
.chat-side-item:hover{background:#f1f5f9}
.chat-side-item.act{background:#e7f7ef;border-left-color:#07c160}
.chat-side-item .cname{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12.5px}
.chat-side-item .dot{width:7px;height:7px;border-radius:50%;background:#cbd5e1;flex:none}
.chat-side-item .dot.on{background:#22c55e}
.chat-side-item .n-read{background:#e5484d;color:#fff;border-radius:9px;min-width:17px;height:17px;
  font-size:10.5px;line-height:17px;text-align:center;padding:0 4px;flex:none}
.chat-side-item .n-read[hidden]{display:none}
.chat-side-item .cprev{display:block;font-size:10.5px;color:#94a3b8;overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap;margin-top:1px}
.chat-side-item .cwrap{flex:1;min-width:0}
.chat-sec-title{font-size:10.5px;color:#94a3b8;padding:7px 9px 2px}

.chat-main{flex:1;display:flex;flex-direction:column;min-width:0}
.chat-msgs{flex:1;overflow-y:auto;padding:12px;background:#f4f6f9;display:flex;flex-direction:column;gap:9px}
.chat-empty{margin:auto;color:#94a3b8;font-size:12.5px;text-align:center;line-height:1.8}

.chat-row{display:flex;gap:8px;align-items:flex-start}
.chat-row.me{flex-direction:row-reverse}
.chat-meta{font-size:11px;color:#8a94a6;margin-bottom:3px;display:flex;gap:6px;align-items:baseline}
.chat-row.me .chat-meta{justify-content:flex-end}
.chat-meta .m-name{font-weight:600;color:#475569}
.chat-meta .m-role{font-size:10px;color:#a3aec1}
.chat-bubble{max-width:76%;padding:7px 11px;border-radius:12px;font-size:13px;line-height:1.6;
  white-space:pre-wrap;word-break:break-word;background:#fff;border:1px solid #e5eaf2;
  border-bottom-left-radius:4px}
.chat-row.me .chat-bubble{background:#dcf8cc;border-color:#c8ecb6;border-bottom-left-radius:12px;
  border-bottom-right-radius:4px}
.chat-tr{margin-top:5px;padding-top:5px;border-top:1px dashed #dbe3ef;font-size:12px;color:#0f766e;
  white-space:pre-wrap;word-break:break-word}
.chat-tr .tr-tag{font-size:10px;color:#94a3b8;margin-right:4px}
.chat-tr-btn{display:inline-block;margin-top:4px;font-size:11px;color:#2563eb;background:none;border:none;
  cursor:pointer;padding:0}
.chat-tr-btn:hover{text-decoration:underline}

/* —— 语音转写（2026-09-22）：普通话语音自动出文字，可再翻译 —— */
.chat-asr{margin-top:5px;padding-top:5px;border-top:1px dashed #dbe3ef;font-size:12px;color:#334155;
  white-space:pre-wrap;word-break:break-word}
.chat-asr .asr-tag{font-size:10px;color:#94a3b8;margin-right:4px}
.chat-asr.asr-pend{color:#94a3b8}
.chat-asr.asr-fail{color:#b91c1c}

.chat-inputbar{flex:none;display:flex;gap:7px;padding:9px 10px;border-top:1px solid #e5eaf2;
  background:#fff;align-items:flex-end}
#chat-input{flex:1;border:1px solid #dbe3ef;border-radius:9px;padding:7px 9px;font-size:13px;
  resize:none;max-height:96px;font-family:inherit;line-height:1.5}
#chat-input:focus{outline:none;border-color:#07c160}
.chat-emoji-btn,.chat-send{border:none;border-radius:9px;cursor:pointer;flex:none}
.chat-emoji-btn{background:#f1f5f9;font-size:19px;width:38px;height:34px;line-height:1;padding:0}
.chat-emoji-btn:hover{background:#e2e8f0}
.chat-send{background:#07c160;color:#fff;padding:7px 16px;font-size:13px}
.chat-send:hover{background:#06ad56}
.chat-send:disabled{opacity:.5;cursor:default}

#chat-emoji{position:absolute;bottom:58px;right:10px;width:300px;max-height:200px;overflow-y:auto;
  background:#fff;border:1px solid #dbe3ef;border-radius:12px;box-shadow:0 12px 32px rgba(15,23,42,.18);
  padding:8px;display:none;grid-template-columns:repeat(10,1fr);gap:2px;z-index:10}
#chat-emoji.open{display:grid}
#chat-emoji button{border:none;background:none;font-size:17px;cursor:pointer;padding:3px;border-radius:6px;line-height:1.2}
#chat-emoji button:hover{background:#f1f5f9}

.chat-typing{font-size:11px;color:#94a3b8;padding:2px 12px 4px;background:#fff;flex:none;display:none}

/* —— 文件 / 图片 / 语音消息（2026-09-22）—— */
.chat-k-image{padding:4px !important;background:#fff}
.chat-img{max-width:230px;max-height:230px;border-radius:8px;display:block;cursor:zoom-in}
.chat-cap{font-size:12.5px;margin-top:4px;white-space:pre-wrap;word-break:break-word}
.chat-audio{width:min(230px,52vw);display:block;margin-top:4px;height:36px}
.chat-filecard{display:flex;align-items:center;gap:8px;text-decoration:none;color:inherit;min-width:170px}
.chat-filecard:hover .chat-file-name{color:#059048;text-decoration:underline}
.chat-file-ic{font-size:26px;line-height:1}
.chat-file-w{display:flex;flex-direction:column;min-width:0}
.chat-file-name{font-size:12.5px;font-weight:600;color:#1f2937;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:190px}
.chat-file-size{font-size:10.5px;color:#8a94a6;margin-top:2px}
.chat-tool-btn{background:#f1f5f9;border:none;border-radius:9px;width:34px;height:34px;padding:0;cursor:pointer;
  color:#475569;display:flex;align-items:center;justify-content:center;flex:none}
.chat-tool-btn:hover{background:#e2e8f0}
/* 2026-09-23 提示音开关是带文字的长按钮，收回 icon 按钮的 34px 方框，防文本竖排 */
.chat-tool-btn.snd-off{color:#94a3b8;background:#f1f5f9;border-color:#e2e8f0}
#chat-sound-btn{width:auto;height:auto;padding:6px 12px;white-space:nowrap;font-size:12px;flex:none}
.chat-tool-btn.rec-on{background:#fee2e2;color:#dc2626;animation:chatPulse 1s infinite}
@keyframes chatPulse{0%,100%{opacity:1}50%{opacity:.55}}
.chat-recbar{display:flex;align-items:center;gap:8px;padding:6px 12px;background:#fef2f2;
  border-top:1px solid #fecaca;font-size:12px;color:#b91c1c;flex:none}
.chat-rec-dot{width:9px;height:9px;border-radius:50%;background:#dc2626;animation:chatPulse 1s infinite}
.chat-drop{position:absolute;inset:0;background:rgba(7,193,96,.12);border:2px dashed #07c160;border-radius:14px;
  display:none;align-items:center;justify-content:center;z-index:20;pointer-events:none}
.chat-drop.on{display:flex}
.chat-drop-tip{background:#07c160;color:#fff;font-size:14px;padding:8px 18px;border-radius:99px;font-weight:600}
@media (max-width:520px){
  #chat-panel{left:8px;right:8px;width:auto;bottom:76px;height:min(560px,70vh)}
  .chat-side{width:110px}
}

/* —— 车间需求到货提醒（2026-09-22）：系统消息气泡 + 顶部重点横幅 —— */
.chat-row.sys .chat-bubble{background:#fff7e6;border-color:#f5c26b;color:#7c4a03;
  border-bottom-left-radius:4px}
#dm-alert{position:fixed;top:16px;left:50%;transform:translateX(-50%);z-index:10002;
  width:min(440px,92vw);max-height:min(70vh,560px);display:flex;flex-direction:column;
  background:#fff;border:2px solid #f59e0b;border-radius:14px;overflow:hidden;
  box-shadow:0 12px 40px rgba(245,158,11,.38);animation:dmPop .22s ease-out}
@keyframes dmPop{from{opacity:0;transform:translateX(-50%) translateY(-14px)}
                 to{opacity:1;transform:translateX(-50%) translateY(0)}}
.dm-alert-head{display:flex;align-items:center;gap:8px;padding:10px 12px;
  background:linear-gradient(90deg,#fef3c7,#fff7e6);border-bottom:1px solid #fde68a;flex:none}
.dm-alert-head b{font-size:14px;color:#92400e}
.dm-alert-ico{font-size:19px;line-height:1}
.dm-alert-time{font-size:11px;color:#b45309;margin-left:auto}
.dm-alert-x{border:none;background:none;font-size:14px;color:#92400e;cursor:pointer;
  width:26px;height:26px;border-radius:7px;flex:none}
.dm-alert-x:hover{background:#fde68a}
.dm-alert-body{flex:1;min-height:0;overflow-y:auto;padding:11px 14px;font-size:12.8px;
  line-height:1.7;color:#1f2937;white-space:pre-wrap;word-break:break-word}
.dm-alert-foot{display:flex;gap:9px;justify-content:flex-end;padding:9px 12px;
  border-top:1px solid #fde68a;background:#fffdf5;flex:none}
.dm-alert-go,.dm-alert-ok{border-radius:9px;padding:6px 15px;font-size:12.5px;cursor:pointer}
.dm-alert-go{border:1px solid #f59e0b;background:#f59e0b;color:#fff;font-weight:600}
.dm-alert-go:hover{background:#d97706}
.dm-alert-ok{border:1px solid #d6d3d1;background:#fff;color:#57534e}
.dm-alert-ok:hover{background:#f5f5f4}

/* ===== AI 助手 · 文件导入（对比分析 / 识别记账）2026-09-23 峰哥需求 ===== */
.chat-aiacts{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
.chat-aiact{border:1px solid #c7d2fe;background:#eef2ff;color:#3730a3;border-radius:9px;
  padding:4px 10px;font-size:12px;cursor:pointer;line-height:1.5}
.chat-aiact:hover{background:#e0e7ff}
.chat-aiact:disabled{opacity:.6;cursor:default}
.chat-aiout{margin-top:6px;font-size:12.5px;line-height:1.65;color:#1f2937}
.chat-aiload{color:#78716c}
.chat-aierr{color:#b91c1c;background:#fef2f2;border:1px solid #fecaca;
  border-radius:9px;padding:6px 9px;word-break:break-word}
.chat-airep{display:inline-block;margin-top:6px;color:#1d4ed8;text-decoration:none;
  border:1px solid #bfdbfe;background:#eff6ff;border-radius:9px;padding:5px 10px}
.chat-airep:hover{background:#dbeafe}
.chat-md{max-width:100%;overflow-x:auto}
.chat-mdp{margin:2px 0}
.chat-md table.chat-mdt{border-collapse:collapse;margin:5px 0;font-size:12.3px;min-width:180px}
.chat-mdt td{border:1px solid #e5e7eb;padding:3px 8px;white-space:nowrap}
.chat-mdt tr:first-child td{background:#f3f4f6;font-weight:600}
.chat-impcard{margin-top:6px;border:1px solid #d6d3d1;border-radius:11px;padding:9px 11px;background:#fafaf9}
.chat-imptitle{font-weight:600;font-size:13px;color:#1f2937}
.chat-impinfo{font-size:12px;color:#57534e;margin-top:3px}
.chat-impwarn{margin-top:5px;font-size:11.8px;color:#92400e;background:#fffbeb;
  border:1px solid #fde68a;border-radius:8px;padding:5px 8px}
.chat-improw{display:flex;align-items:center;gap:7px;margin-top:7px;flex-wrap:wrap}
.chat-implab{font-size:12px;color:#57534e;min-width:56px}
.chat-impsel{border:1px solid #d6d3d1;border-radius:8px;padding:4px 7px;font-size:12.3px;
  background:#fff;max-width:190px}
.chat-impok{border:1px solid #16a34a;background:#16a34a;color:#fff;border-radius:9px;
  padding:5px 14px;font-size:12.5px;cursor:pointer}
.chat-impok:hover{background:#15803d}
.chat-impcancel{border:1px solid #d6d3d1;background:#fff;color:#57534e;border-radius:9px;
  padding:5px 12px;font-size:12.5px;cursor:pointer}
.chat-impcancel:hover{background:#f5f5f4}
.chat-impnote{margin-top:6px;font-size:11.5px;color:#78716c}
.chat-impdone{color:#166534;background:#f0fdf4;border:1px solid #bbf7d0;
  border-radius:9px;padding:7px 10px}
/* 撤回提示行（2026-09-23 峰哥需求，微信同款）：居中灰条，自己带「重新编辑」 */
.chat-recall-row{display:flex;justify-content:center;margin:2px 0}
.chat-recall{display:flex;align-items:center;gap:8px;max-width:86%;padding:3px 10px;border-radius:10px;
  background:#f1f3f5;color:#98a2b3;font-size:12px;line-height:1.5;text-align:center}
.chat-recall .rc-txt{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chat-recall-edit{background:none;border:none;padding:0;font-size:12px;color:#2563eb;cursor:pointer;
  white-space:nowrap;font-family:inherit}
.chat-recall-edit:hover{text-decoration:underline}
/* 气泡右键 / 长按菜单：撤回、复制 */
.chat-ctxmenu{position:fixed;z-index:10002;min-width:88px;padding:4px;background:#fff;
  border:1px solid #e3e8ef;border-radius:8px;box-shadow:0 6px 20px rgba(15,23,42,.16);
  display:flex;flex-direction:column}
.chat-ctxmenu-i{background:none;border:none;text-align:left;padding:7px 12px;font-size:13px;
  color:#334155;border-radius:6px;cursor:pointer;white-space:nowrap;font-family:inherit}
.chat-ctxmenu-i:hover{background:#f1f5f9}
.chat-ctxmenu-i.danger{color:#e0245e}
.chat-ctxmenu-i.danger:hover{background:#fff1f2}
/* 语音识别按钮样式（2026-09-27） */
.chat-tool-btn.voice-active{background:#fee2e2;color:#dc2626;animation:chatPulse 1s infinite}
.chat-tool-btn:disabled{opacity:.4;cursor:not-allowed}
.chat-recbar#chat-voice-bar{background:#f0f9ff;border-color:#bae6fd}
.chat-recbar#chat-voice-bar .chat-rec-dot{background:#0ea5e9}
