/* 工单正文统一展示样式 - 前后台共用 */
.ticket-wangeditor-box {
  border: 1px solid #e2e8f0;
  border-radius: 10px;
  overflow: hidden;
  background: #fff;
}

.ticket-wangeditor-toolbar {
  border-bottom: 1px solid #eef2f7 !important;
}

.ticket-wangeditor-body {
  overflow-y: auto;
  min-height: 300px;
}

html.zjmf-ticket-route #zjmf-admin-we-reply .ticket-wangeditor-body,
html.zjmf-ticket-route #zjmf-admin-we-reply .w-e-text-container,
html.zjmf-ticket-route #zjmf-admin-we-add .ticket-wangeditor-body,
html.zjmf-ticket-route #zjmf-admin-we-add .w-e-text-container {
  min-height: 300px !important;
  height: 320px !important;
}

html.zjmf-ticket-route #pane-addReplyTab textarea:not(.el-textarea__inner),
html.zjmf-ticket-route #pane-addRemarksTab textarea:not(.el-textarea__inner),
html.zjmf-ticket-route .dialogue:not(.zjmf-inline-editing) textarea,
html.zjmf-ticket-route .workOrder textarea:not(.el-textarea__inner) {
  display: none !important;
  visibility: hidden !important;
  height: 0 !important;
  min-height: 0 !important;
  max-height: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
  border: 0 !important;
  opacity: 0 !important;
  pointer-events: none !important;
  overflow: hidden !important;
  resize: none !important;
}
html.zjmf-ticket-route #pane-addReplyTab tinymce-editor.zjmf-we-ready,
html.zjmf-ticket-route #pane-addReplyTab .tox-tinymce,
html.zjmf-ticket-route #pane-addReplyTab .mce-tinymce {
  display: none !important;
  visibility: hidden !important;
  height: 0 !important;
  min-height: 0 !important;
  max-height: 0 !important;
  overflow: hidden !important;
  margin: 0 !important;
  padding: 0 !important;
  border: 0 !important;
  opacity: 0 !important;
  pointer-events: none !important;
}

.ticket-paste-hint {
  display: none !important;
}

.ticket-typing-indicator {
  display: none;
  align-items: center;
  gap: 10px;
  font-size: 13px;
  font-weight: 500;
  color: #4338ca;
  margin: 0 0 12px;
  padding: 0 14px;
  height: 36px;
  min-height: 36px;
  max-height: 36px;
  flex: 0 0 auto;
  align-self: flex-start;
  width: fit-content;
  max-width: 100%;
  overflow: hidden;
  white-space: nowrap;
  background: linear-gradient(90deg, #eef2ff 0%, #ecfdf5 55%, #fdf4ff 100%);
  border-radius: 10px;
  border: 1px solid rgba(99, 102, 241, 0.28);
  box-shadow: 0 4px 14px rgba(79, 70, 229, 0.08);
  box-sizing: border-box;
}

.ticket-typing-indicator.is-live {
  animation: ticket-typing-enter 0.35s ease;
}

.ticket-typing-indicator__pulse {
  position: relative;
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: #22c55e;
  flex: 0 0 10px;
  box-shadow: 0 0 0 0 rgba(34, 197, 94, 0.45);
  animation: ticket-typing-pulse 1.4s ease-out infinite;
}

.ticket-typing-indicator__accent {
  width: 4px;
  height: 18px;
  align-self: center;
  border-radius: 4px;
  flex: 0 0 4px;
}

.ticket-typing-indicator__dots {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  flex: 0 0 auto;
}

.ticket-typing-indicator__dots span {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: currentColor;
  opacity: 0.45;
  animation: ticket-typing-dot 1.2s ease-in-out infinite;
}

.ticket-typing-indicator__dots span:nth-child(2) { animation-delay: 0.15s; }
.ticket-typing-indicator__dots span:nth-child(3) { animation-delay: 0.3s; }

.ticket-typing-indicator__text {
  line-height: 1.4;
  letter-spacing: 0.01em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  flex: 1 1 auto;
  min-width: 0;
}

/* ── 样式：微信 ── */
.ticket-typing--wechat {
  color: #009a29;
  background: linear-gradient(90deg, #e8ffea 0%, #f0fff4 100%);
  border-color: #aff0b5;
  border-radius: 999px;
  padding: 0 16px;
  height: 34px;
  min-height: 34px;
  max-height: 34px;
}
.ticket-typing--wechat .ticket-typing-indicator__pulse { background: #00b42a; }

/* ── 样式：QQ ── */
.ticket-typing--qq {
  color: #1677ff;
  background: linear-gradient(135deg, #e6f4ff 0%, #f0f5ff 100%);
  border-color: #91caff;
  border-radius: 12px;
}
.ticket-typing--qq .ticket-typing-indicator__pulse { background: #1677ff; box-shadow: 0 0 0 0 rgba(22, 119, 255, 0.35); }

/* ── 样式：Telegram ── */
.ticket-typing--telegram {
  color: #0088cc;
  background: #f0f9ff;
  border-color: #bae6fd;
  border-radius: 8px;
  padding: 0 12px;
  height: 34px;
  min-height: 34px;
  max-height: 34px;
}

/* ── 样式：Slack ── */
.ticket-typing--slack {
  color: #1d1c1d;
  background: #fff;
  border: 1px solid #e8e8e8;
  border-left: 4px solid #611f69;
  border-radius: 4px;
  box-shadow: 0 1px 3px rgba(0,0,0,0.06);
}
.ticket-typing--slack .ticket-typing-indicator__accent { background: #611f69; }

/* ── 样式：Discord ── */
.ticket-typing--discord {
  color: #dcddde;
  background: #36393f;
  border-color: #202225;
  border-radius: 8px;
}
.ticket-typing--discord .ticket-typing-indicator__accent { background: #5865f2; }

/* ── 样式：iOS 毛玻璃 ── */
.ticket-typing--ios {
  color: #1d1d1f;
  background: rgba(255, 255, 255, 0.72);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  border: 1px solid rgba(255, 255, 255, 0.8);
  border-radius: 14px;
  box-shadow: 0 4px 24px rgba(0, 0, 0, 0.08);
}
.ticket-typing--ios .ticket-typing-indicator__pulse { background: #34c759; }

/* ── 样式：飞书 ── */
.ticket-typing--feishu {
  color: #3370ff;
  background: #eef3ff;
  border-color: #c9d8ff;
  border-radius: 8px;
}
.ticket-typing--feishu .ticket-typing-indicator__pulse { background: #3370ff; }

/* ── 样式：钉钉 ── */
.ticket-typing--dingtalk {
  color: #007fff;
  background: #e8f3ff;
  border-color: #b3d8ff;
  border-radius: 8px;
}
.ticket-typing--dingtalk .ticket-typing-indicator__pulse { background: #007fff; }

/* ── 样式：Toast 浮层 ── */
.ticket-typing--toast {
  color: #1d2129;
  background: #fff;
  border: 1px solid #e5e6eb;
  border-radius: 10px;
  box-shadow: 0 8px 28px rgba(0, 0, 0, 0.12);
  padding: 0 16px;
  min-width: 200px;
  height: 40px;
  min-height: 40px;
  max-height: 40px;
}
.ticket-typing--toast .ticket-typing-indicator__pulse { background: #165dff; }

/* ── 位置 ── */
.ticket-typing-pos--fixed_top {
  position: fixed;
  top: 64px;
  left: 50%;
  transform: translateX(-50%);
  z-index: 10040;
  margin: 0;
  max-width: min(520px, calc(100vw - 32px));
}

.ticket-typing-pos--fixed_bottom {
  position: fixed;
  bottom: 24px;
  left: 50%;
  transform: translateX(-50%);
  z-index: 10040;
  margin: 0;
  max-width: min(520px, calc(100vw - 32px));
}

.ticket-typing-pos--toast_tr,
.ticket-typing-pos--toast_tr.ticket-typing-indicator {
  position: fixed !important;
  top: 72px;
  right: 24px;
  z-index: 100500 !important;
  margin: 0;
  max-width: 320px;
  pointer-events: none;
}

html.zjmf-ticket-route .ticket-typing-pos--fixed_top {
  top: 120px;
}

html.zjmf-ticket-route .ticket-typing-pos--toast_tr {
  top: 120px;
  right: 20px;
}

.ticket-typing-pos--toast_tr.ticket-typing-indicator {
  position: fixed !important;
  display: none;
}

.ticket-typing-pos--toast_tr.ticket-typing-indicator.is-live {
  display: inline-flex !important;
}

.ticket-typing-indicator-wrap {
  display: none;
  width: 100%;
  flex: 0 0 auto !important;
  align-self: stretch !important;
  clear: both;
  box-sizing: border-box;
  pointer-events: none;
  padding: 0;
  margin: 0;
  border: 0;
  background: transparent;
}

.ticket-typing-indicator-wrap.is-live {
  display: block !important;
  visibility: visible !important;
  opacity: 1 !important;
}

.ticket-typing-indicator-wrap.is-live + #ticketReplyContainer,
#ticketReplyList + .ticket-typing-indicator-wrap.is-live {
  margin-top: 6px;
  margin-bottom: 6px;
}

.ticket-typing-indicator-wrap .ticket-typing-indicator {
  pointer-events: auto;
}

#ticket-typing-bar-client[data-zjmf-visible="1"],
#ticket-typing-bar-admin[data-zjmf-visible="1"] {
  display: inline-flex !important;
  visibility: visible !important;
  opacity: 1 !important;
}

html.zjmf-ticket-page #ticket-typing-bar-client[data-zjmf-visible="1"],
html.zjmf-ticket-page #ticket-typing-bar-admin[data-zjmf-visible="1"],
.workviewticket #ticket-typing-bar-client[data-zjmf-visible="1"] {
  display: inline-flex !important;
  visibility: visible !important;
  opacity: 1 !important;
}

.ticket-detail-page .dialogue + .ticket-typing-indicator-wrap.is-live,
.zjmf-admin-chat-container + .ticket-typing-indicator-wrap.is-live,
.zjmf-admin-chat-container .ticket-typing-indicator-wrap.is-live {
  display: block !important;
  visibility: visible !important;
}

#ticketReplyList + .ticket-typing-indicator-wrap.is-live,
#ticketReplyContainer .ticket-typing-indicator-wrap.is-live {
  display: block !important;
  margin: 8px 0 12px;
}

.dialogue + .ticket-typing-indicator-wrap.is-live {
  width: 100%;
  padding: 6px 12px 10px;
  margin: 0;
  clear: both;
  box-sizing: border-box;
}

html.zjmf-ticket-route .dialogue + .ticket-typing-indicator-wrap.is-live {
  border-top: 0;
  border-bottom: 0;
  background: transparent;
  padding: 4px 12px 8px;
}

html.zjmf-ticket-route .dialogue + .ticket-typing-indicator-wrap.is-live .ticket-typing-indicator {
  margin: 0;
}

html.zjmf-ticket-route #pane-addReplyTab + .ticket-typing-indicator-wrap.is-live,
html.zjmf-ticket-route .el-tab-pane#pane-addReplyTab + .ticket-typing-indicator-wrap.is-live {
  display: block !important;
  visibility: visible !important;
  padding: 6px 12px 10px;
  width: 100%;
  box-sizing: border-box;
}

html.zjmf-ticket-route .ticket-typing-indicator-wrap.is-live + .dialogue {
  margin-top: 0;
}

html.zjmf-ticket-route .ticket-typing-indicator-wrap.is-live + .dialogue,
html.zjmf-ticket-route .workOrder > .ticket-typing-indicator-wrap.is-live {
  display: block !important;
  visibility: visible !important;
}

html.zjmf-ticket-route .ticket-typing-indicator-wrap.is-live .ticket-typing-indicator,
html.zjmf-ticket-route #ticket-typing-bar-admin[data-zjmf-visible="1"] {
  display: inline-flex !important;
  visibility: visible !important;
  opacity: 1 !important;
  width: auto !important;
  max-width: calc(100% - 24px);
}

#ticketReplyContainer > .ticket-typing-indicator-wrap.is-live,
#ticketReplyContainer + .ticket-typing-indicator-wrap.is-live,
.ticket-reply-form > .ticket-typing-indicator-wrap.is-live,
#ticketReplyContainer .ticket-typing-indicator-wrap.is-live,
.workviewticket #ticketReplyContainer .ticket-typing-indicator-wrap.is-live {
  margin: 0 0 12px;
  padding: 0;
  display: block !important;
  visibility: visible !important;
  position: relative;
  z-index: 8;
}

#ticketReplyContainer .ticket-typing-indicator-wrap.is-live .ticket-typing-indicator,
.workviewticket .ticket-typing-indicator-wrap.is-live .ticket-typing-indicator {
  display: inline-flex !important;
  visibility: visible !important;
  opacity: 1 !important;
}

.dialogue .ticket-typing-indicator,
.dialogue > .ticket-typing-indicator,
#ticketReplyList > .ticket-typing-indicator,
#ticketReplyList .ticket-typing-indicator {
  flex: 0 0 auto !important;
  align-self: flex-start !important;
  height: 36px !important;
  min-height: 36px !important;
  max-height: 36px !important;
  margin: 8px 0;
}

html.zjmf-ticket-route .dialogue .ticket-typing-indicator-wrap.is-live .ticket-typing-indicator,
html.zjmf-ticket-route #ticket-typing-bar-admin[data-zjmf-visible="1"] {
  display: inline-flex !important;
  width: auto !important;
  max-width: calc(100% - 24px);
}

html.zjmf-ticket-route .detail_second + .ticket-typing-indicator-wrap.is-live,
html.zjmf-ticket-route .detail_third > .ticket-typing-indicator-wrap.is-live {
  display: block !important;
  visibility: visible !important;
  padding: 8px 12px 10px;
  width: 100%;
  box-sizing: border-box;
}

#zjmf-admin-typing-slot,
.zjmf-admin-typing-slot,
#zjmf-client-typing-slot,
.zjmf-client-typing-slot {
  display: block;
  width: 100%;
  box-sizing: border-box;
  clear: both;
  min-height: 0;
  padding: 0;
  margin: 0;
  background: transparent;
}

#zjmf-client-typing-slot .ticket-typing-indicator-wrap.is-live,
.zjmf-client-typing-slot .ticket-typing-indicator-wrap.is-live {
  display: block !important;
  visibility: visible !important;
  padding: 10px 16px 8px !important;
  margin: 0 !important;
  border-top: 0;
  background: transparent;
}

.workviewticket .zjmf-client-typing-slot[data-zjmf-pos="above_editor"] .ticket-typing-indicator-wrap.is-live {
  border-top: 1px solid #eef2f7;
  background: #f8fafc;
  padding: 10px 16px 8px !important;
  margin: 0 !important;
}

.workviewticket .zjmf-client-typing-slot[data-zjmf-pos="messages_bottom"] .ticket-typing-indicator-wrap.is-live,
.workviewticket .zjmf-client-typing-slot[data-zjmf-pos="above_messages"] .ticket-typing-indicator-wrap.is-live,
.workviewticket #ticketReplyList + .zjmf-client-typing-slot .ticket-typing-indicator-wrap.is-live {
  padding: 0 18px 10px !important;
  margin: 0 80px 16px 0 !important;
  max-width: calc(100% - 80px);
}

.workviewticket .ticket-typing-pos--messages_bottom,
.workviewticket .ticket-typing-pos--above_messages {
  align-self: flex-start !important;
}

html.zjmf-ticket-route #pane-addReplyTab .ticket-typing-indicator-wrap.is-live {
  display: block !important;
  width: 100%;
  padding: 8px 0 4px;
  margin: 0;
  box-sizing: border-box;
}

html.zjmf-ticket-route #pane-addReplyTab .ticket-typing-indicator-wrap.is-live .ticket-typing-indicator {
  max-width: 100%;
  white-space: nowrap;
}

html.zjmf-ticket-route .dialogue + .ticket-typing-indicator-wrap.is-live {
  display: block !important;
  width: 100%;
  padding: 8px 12px 10px;
  margin: 0;
  box-sizing: border-box;
  border-top: 1px solid #eef2f7;
  background: #f8fafc;
}

html.zjmf-ticket-route .dialogue + .ticket-typing-indicator-wrap.is-live .ticket-typing-indicator {
  max-width: 100%;
}

#zjmf-admin-typing-slot .ticket-typing-indicator-wrap.is-live,
.zjmf-admin-typing-slot .ticket-typing-indicator-wrap.is-live {
  display: block !important;
  visibility: visible !important;
  padding: 10px 12px 8px !important;
  margin: 0 !important;
}

html.zjmf-ticket-route .detail_second + #zjmf-admin-typing-slot .ticket-typing-indicator-wrap.is-live,
html.zjmf-ticket-route #zjmf-admin-typing-slot .ticket-typing-indicator-wrap.is-live {
  border-top: 1px solid #eef2f7;
  background: #f8fafc;
}

#ticket-typing-bar-client,
#ticket-typing-bar-admin {
  z-index: 12;
}

@keyframes ticket-typing-dot {
  0%, 80%, 100% { opacity: 0.35; transform: translateY(0); }
  40% { opacity: 1; transform: translateY(-3px); }
}

@keyframes ticket-typing-pulse {
  0% { box-shadow: 0 0 0 0 rgba(34, 197, 94, 0.45); }
  70% { box-shadow: 0 0 0 10px rgba(34, 197, 94, 0); }
  100% { box-shadow: 0 0 0 0 rgba(34, 197, 94, 0); }
}

@keyframes ticket-typing-enter {
  from { opacity: 0; transform: translateY(-4px); }
  to { opacity: 1; transform: translateY(0); }
}

#ticketReplyList > .ticket-typing-indicator,
.dialogue > .ticket-typing-indicator,
#pane-addReplyTab > .ticket-typing-indicator {
  margin: 0 0 12px;
}

.ticket-typing-indicator::before {
  content: none;
}

.ticket-content,
.zjmf-ticket-content {
  line-height: 1.75;
  word-break: break-word;
  color: #334155;
  font-size: 14px;
}

.ticket-content p,
.zjmf-ticket-content p {
  margin: 0 0 8px;
}

.ticket-content img,
.zjmf-ticket-content img {
  max-width: 100%;
  width: auto;
  height: auto;
  border-radius: 8px;
  margin: 8px 0;
  display: block;
  object-fit: contain;
  cursor: zoom-in;
}

.ticket-content ul,
.ticket-content ol,
.zjmf-ticket-content ul,
.zjmf-ticket-content ol {
  padding-left: 1.5em;
  margin: 0 0 8px;
}

.ticket-content blockquote,
.zjmf-ticket-content blockquote {
  border-left: 3px solid #4f6ef7;
  padding-left: 12px;
  color: #64748b;
  margin: 8px 0;
}

.ticket-content pre,
.ticket-content code,
.zjmf-ticket-content pre,
.zjmf-ticket-content code {
  background: #f1f5f9;
  border-radius: 4px;
  padding: 2px 6px;
  font-size: 13px;
}

.ticket-content a,
.zjmf-ticket-content a {
  color: #4f6ef7;
  text-decoration: underline;
  word-break: break-all;
}

.ticket-content a:hover,
.zjmf-ticket-content a:hover {
  color: #3b5bdb;
}

/* 工单附件预览 — 前后台统一（与 default 卡片页一致） */
.ticket-attachment-label {
  margin-top: 12px;
  margin-bottom: 4px;
  font-size: 12px;
  color: #64748b;
  font-weight: 600;
}

.ticket-attachment-preview {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 4px;
}

.ticket-attachment-preview .att-item {
  display: inline-flex;
  flex-direction: column;
  align-items: center;
}

.ticket-attachment-preview .att-item--image {
  max-width: 88px;
}

.ticket-attachment-preview .att-item--image > a:first-child {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 64px;
  height: 64px;
  border-radius: 6px;
  border: 1px solid #e2e8f0;
  background: #f8fafc;
  overflow: hidden;
  text-decoration: none;
}

.ticket-attachment-preview .att-item--image img {
  width: 100%;
  height: 100%;
  max-width: 100%;
  margin: 0;
  border-radius: 0;
  object-fit: cover;
  cursor: pointer;
}

.ticket-attachment-preview .att-item--image > a:last-child {
  font-size: 11px;
  color: #4f6ef7;
  margin-top: 4px;
  word-break: break-all;
  text-align: center;
  line-height: 1.3;
  text-decoration: none;
  max-width: 88px;
}

.ticket-attachment-preview .att-item--image > a:last-child:hover {
  color: #3b5bdb;
  text-decoration: underline;
}

.ticket-attachment-preview .att-item--file {
  max-width: none;
}

.ticket-attachment-preview .att-item--file .att-file-link {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 6px 10px;
  border-radius: 6px;
  border: 1px solid #e2e8f0;
  background: #f8fafc;
  color: #334155;
  font-size: 12px;
  line-height: 1.35;
  text-decoration: none;
  max-width: 240px;
}

.ticket-attachment-preview .att-item--file .att-file-link:hover {
  border-color: #c7d2fe;
  background: #eef2ff;
  color: #4f6ef7;
}

.ticket-attachment-preview .att-item--file .att-file-icon {
  font-size: 18px;
  color: #94a3b8;
  flex-shrink: 0;
}

.ticket-attachment-preview .att-item--file .att-file-name {
  word-break: break-all;
}

/* userCenter 气泡页：尊重编辑器内联尺寸，仅限制不超出气泡 */
.workviewticket .chat-container .message-content.ticket-content img {
  max-width: min(480px, 100%);
  width: auto;
  height: auto;
  object-fit: contain;
}

.workviewticket .chat-container .message-content.ticket-content table {
  max-width: 100%;
  width: 100%;
}

.ticket-content strong,
.ticket-content b,
.zjmf-ticket-content strong,
.zjmf-ticket-content b {
  font-weight: 700;
}

.ticket-content em,
.ticket-content i,
.zjmf-ticket-content em,
.zjmf-ticket-content i {
  font-style: italic;
}

.ticket-content u,
.zjmf-ticket-content u {
  text-decoration: underline;
}

.ticket-content h1,
.ticket-content h2,
.ticket-content h3,
.ticket-content h4,
.ticket-content h5,
.ticket-content h6,
.zjmf-ticket-content h1,
.zjmf-ticket-content h2,
.zjmf-ticket-content h3,
.zjmf-ticket-content h4,
.zjmf-ticket-content h5,
.zjmf-ticket-content h6 {
  margin: 12px 0 8px;
  font-weight: 600;
  line-height: 1.4;
}

.ticket-content table,
.zjmf-ticket-content table {
  width: 100%;
  border-collapse: collapse;
  margin: 8px 0;
}

.ticket-content th,
.ticket-content td,
.zjmf-ticket-content th,
.zjmf-ticket-content td {
  border: 1px solid #e2e8f0;
  padding: 6px 8px;
  text-align: left;
}

.ticket-content hr,
.zjmf-ticket-content hr {
  border: 0;
  border-top: 1px solid #e2e8f0;
  margin: 12px 0;
}

.ticket-upload-progress {
  display: none;
  position: fixed;
  top: 72px;
  left: 50%;
  transform: translateX(-50%);
  z-index: 10050;
  min-width: 280px;
  max-width: 420px;
  padding: 12px 16px;
  background: #fff;
  border: 1px solid #e2e8f0;
  border-radius: 10px;
  box-shadow: 0 8px 24px rgba(15, 23, 42, 0.12);
  flex-direction: column;
  gap: 8px;
}

.ticket-upload-progress--anchored {
  position: relative;
  top: auto;
  left: auto;
  transform: none;
  width: 100%;
  max-width: none;
  min-width: 0;
  margin: 0 0 12px;
  z-index: 20;
  box-shadow: 0 2px 12px rgba(15, 23, 42, 0.1);
}

.ticket-detail-page .ticket-upload-progress:not(.ticket-upload-progress--anchored) {
  top: auto;
  bottom: 36px;
  z-index: 99999;
}

.ticket-upload-progress__row {
  display: flex;
  align-items: center;
  gap: 10px;
  width: 100%;
}

.ticket-upload-progress__label {
  font-size: 13px;
  color: #334155;
  white-space: nowrap;
}

.ticket-upload-progress__track {
  flex: 1;
  height: 6px;
  background: #e2e8f0;
  border-radius: 999px;
  overflow: hidden;
}

.ticket-upload-progress__bar {
  height: 100%;
  width: 0;
  background: linear-gradient(90deg, #4f6ef7, #6366f1);
  border-radius: 999px;
  transition: width 0.2s ease;
}

.ticket-upload-progress__pct {
  font-size: 12px;
  color: #64748b;
  min-width: 36px;
  text-align: right;
}

#toast-container > div.toast {
  max-width: 360px;
  word-break: break-word;
}

#toast-container > div.toast .toast-message {
  max-height: 120px;
  overflow: hidden;
}

/* 与前台 userCenter inherit.css 一致的 toastr 皮肤（后台工单页） */
html.zjmf-ticket-route #toast-container {
  z-index: 100001;
}

html.zjmf-ticket-route #toast-container > div {
  opacity: 0.99 !important;
  box-shadow: 0 2px 4px 0 rgba(54, 58, 80, 0.32) !important;
  -webkit-box-shadow: 0 2px 4px 0 rgba(54, 58, 80, 0.32) !important;
  color: #fff !important;
  font-size: 14px;
  line-height: 1.45;
}

html.zjmf-ticket-route #toast-container > div:hover {
  opacity: 0.99 !important;
  box-shadow: 0 2px 4px 0 rgba(54, 58, 80, 0.32) !important;
  -webkit-box-shadow: 0 2px 4px 0 rgba(54, 58, 80, 0.32) !important;
}

html.zjmf-ticket-route .toast-success {
  border: 1px solid #00a870 !important;
  background-color: rgba(0, 168, 112, 0.96) !important;
}

html.zjmf-ticket-route .toast-info {
  border: 1px solid #165dff !important;
  background-color: rgba(22, 93, 255, 0.96) !important;
}

html.zjmf-ticket-route .toast-warning {
  border: 1px solid #ffa940 !important;
  background-color: rgba(255, 169, 64, 0.96) !important;
}

html.zjmf-ticket-route .toast-error {
  border: 1px solid #ff4d4f !important;
  background-color: rgba(255, 77, 79, 0.96) !important;
}

html.zjmf-ticket-route #toast-container .toast-close-button {
  color: #fff !important;
  text-shadow: none !important;
  opacity: 0.85;
  font-weight: 700;
}

html.zjmf-ticket-route #toast-container .toast-close-button:hover,
html.zjmf-ticket-route #toast-container .toast-close-button:focus {
  color: #fff !important;
  opacity: 1;
}

html.zjmf-ticket-route #toast-container .toast-message {
  color: #fff !important;
}

.zjmf-ticket-we-wrap {
  width: 100%;
  margin-top: 4px;
}

/* 后台/前台 WangEditor 编辑区字号与消息气泡一致 */
.ticket-wangeditor-body .w-e-text-container,
.ticket-wangeditor-body .w-e-text-container [data-slate-editor],
.ticket-wangeditor-body .w-e-text-container p,
.ticket-wangeditor-body .w-e-text-container span,
.ticket-wangeditor-body .w-e-scroll,
.zjmf-ticket-we-wrap .w-e-text-container,
.zjmf-ticket-we-wrap .w-e-text-container [data-slate-editor],
.zjmf-ticket-we-wrap .w-e-text-container p,
.zjmf-ticket-we-wrap .w-e-text-container span,
.zjmf-ticket-we-wrap .ticket-wangeditor-body,
.zjmf-ticket-we-wrap .ticket-wangeditor-body *,
html.zjmf-ticket-route .zjmf-ticket-we-wrap .w-e-text-container,
html.zjmf-ticket-route .zjmf-ticket-we-wrap .w-e-text-container [data-slate-editor],
html.zjmf-ticket-route .zjmf-ticket-we-wrap .w-e-text-container p,
html.zjmf-ticket-route .zjmf-ticket-we-wrap .w-e-text-container span,
html.zjmf-ticket-route .zjmf-ticket-we-wrap .ticket-wangeditor-body,
html.zjmf-ticket-route .zjmf-ticket-we-wrap .ticket-wangeditor-body *,
html.zjmf-ticket-route #zjmf-admin-we-reply .w-e-text-container,
html.zjmf-ticket-route #zjmf-admin-we-reply .w-e-text-container *,
html.zjmf-ticket-route #zjmf-admin-we-inline .w-e-text-container,
html.zjmf-ticket-route #zjmf-admin-we-inline .w-e-text-container * {
  font-size: 14px !important;
  line-height: 1.75 !important;
}

html.zjmf-ticket-route .dialogue.zjmf-inline-editing .dialogue_info_second,
.ticket-detail-page .dialogue.zjmf-inline-editing .dialogue_info_second {
  display: none !important;
}

html.zjmf-ticket-route .dialogue .zjmf-inline-edit-slot,
.ticket-detail-page .dialogue .zjmf-inline-edit-slot {
  width: 100%;
  margin: 10px 0 0;
  clear: both;
  flex: 0 0 auto;
}

html.zjmf-ticket-route .dialogue .zjmf-inline-edit-wrap,
.ticket-detail-page .dialogue .zjmf-inline-edit-wrap {
  width: 100% !important;
  display: block !important;
  margin: 0 !important;
}

html.zjmf-ticket-route .dialogue .zjmf-inline-edit-wrap .ticket-wangeditor-box,
.ticket-detail-page .dialogue .zjmf-inline-edit-wrap .ticket-wangeditor-box {
  width: 100%;
  background: #fff;
  border: 1px solid #dcdfe6;
  border-radius: 4px;
  overflow: hidden;
}

html.zjmf-ticket-route .dialogue .zjmf-inline-edit-wrap .ticket-wangeditor-toolbar,
.ticket-detail-page .dialogue .zjmf-inline-edit-wrap .ticket-wangeditor-toolbar {
  border-bottom: 1px solid #ebeef5;
  background: #fafafa;
}

html.zjmf-ticket-route .dialogue .zjmf-inline-edit-wrap .ticket-wangeditor-body,
.ticket-detail-page .dialogue .zjmf-inline-edit-wrap .ticket-wangeditor-body {
  min-height: 200px !important;
  height: 200px !important;
}

html.zjmf-ticket-route .dialogue .zjmf-inline-edit-wrap .w-e-text-container,
.ticket-detail-page .dialogue .zjmf-inline-edit-wrap .w-e-text-container {
  min-height: 160px !important;
  height: auto !important;
}

html.zjmf-ticket-route #zjmf-admin-we-inline,
html.zjmf-ticket-route .dialogue #zjmf-admin-we-inline {
  display: block !important;
  visibility: visible !important;
  width: 100% !important;
  min-height: 200px !important;
  opacity: 1 !important;
  pointer-events: auto !important;
}

html.zjmf-ticket-route .dialogue .zjmf-ticket-we-wrap {
  margin: 10px 0 4px;
}

html.zjmf-ticket-route .dialogue .zjmf-ticket-we-wrap .ticket-wangeditor-box {
  border-radius: 6px;
  overflow: hidden;
}

.ticket-detail-page .dialogue tinymce-editor,
.ticket-detail-page .dialogue .tox-tinymce,
.ticket-detail-page .dialogue .mce-tinymce,
.ticket-detail-page .dialogue .mce-container,
.ticket-detail-page .dialogue .mce-panel,
.ticket-detail-page .dialogue .mce-toolbar-grp,
.ticket-detail-page .dialogue .mce-edit-area,
.ticket-detail-page .dialogue .mce-statusbar,
.ticket-detail-page .dialogue .mce-stack-layout-item,
.ticket-detail-page .dialogue .mce-menubar,
.ticket-detail-page .dialogue .mce-btn,
body.ticket-detail-page > .tox-tinymce,
body.ticket-detail-page > .mce-tinymce,
body.ticket-detail-page > .mce-panel {
  display: none !important;
  visibility: hidden !important;
  height: 0 !important;
  min-height: 0 !important;
  max-height: 0 !important;
  overflow: hidden !important;
  margin: 0 !important;
  padding: 0 !important;
  border: 0 !important;
  opacity: 0 !important;
  pointer-events: none !important;
}

.ticket-detail-page #zjmf-admin-we-inline,
.ticket-detail-page .dialogue #zjmf-admin-we-inline,
.ticket-detail-page .zjmf-inline-edit-wrap {
  display: block !important;
  visibility: visible !important;
  width: 100% !important;
  min-height: 220px !important;
  opacity: 1 !important;
  pointer-events: auto !important;
}

.ticket-detail-page #pane-addReplyTab tinymce-editor,
.ticket-detail-page #pane-addRemarksTab tinymce-editor,
.ticket-detail-page .topform_wrap tinymce-editor,
.ticket-detail-page .add-support-flex tinymce-editor,
.ticket-detail-page .dialogue tinymce-editor,
.ticket-detail-page .dialogue .tox-tinymce,
.ticket-detail-page .dialogue .mce-tinymce,
.ticket-detail-page .dialogue .mce-container,
.ticket-detail-page .dialogue .mce-panel,
.ticket-detail-page #pane-addReplyTab .tox-tinymce,
.ticket-detail-page #pane-addReplyTab .tox-editor-header,
.ticket-detail-page #pane-addReplyTab .tox-statusbar,
.ticket-detail-page #pane-addRemarksTab .tox-tinymce,
.ticket-detail-page #pane-addRemarksTab .tox-editor-header,
.ticket-detail-page #pane-addRemarksTab .tox-statusbar,
.ticket-detail-page .topform_wrap .tox-tinymce,
.ticket-detail-page .add-support-flex .tox-tinymce,
.ticket-detail-page .zjmf-we-ready,
.ticket-detail-page tinymce-editor.zjmf-we-ready,
.ticket-detail-page .tox-tinymce.zjmf-we-ready {
  display: none !important;
  visibility: hidden !important;
  height: 0 !important;
  min-height: 0 !important;
  max-height: 0 !important;
  overflow: hidden !important;
  margin: 0 !important;
  padding: 0 !important;
  border: 0 !important;
  opacity: 0 !important;
  pointer-events: none !important;
}

.ticket-detail-page .dialogue .zjmf-ticket-content,
.ticket-detail-page .dialogue [style*="word-break"] {
  line-height: 1.75;
  word-break: break-word;
}

/* 后台工单对话 — 复刻前台 userCenter 气泡样式 */
html.zjmf-ticket-route .zjmf-admin-chat-container {
  display: flex;
  flex-direction: column;
  padding: 0;
  background: transparent;
}

html.zjmf-ticket-route .dialogue.zjmf-chat-message {
  width: auto !important;
  max-width: none !important;
  display: flex !important;
  flex-direction: column !important;
  align-items: stretch !important;
  border-radius: 1px !important;
  padding: 18px !important;
  margin-bottom: 24px !important;
  box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.1) !important;
  border: none !important;
}

html.zjmf-ticket-route .dialogue.zjmf-chat-admin {
  background: #eff2f7 !important;
  margin-right: 80px !important;
  margin-left: 0 !important;
}

html.zjmf-ticket-route .dialogue.zjmf-chat-user {
  background: #fff !important;
  margin-left: 80px !important;
  margin-right: 0 !important;
}

html.zjmf-ticket-route .dialogue.zjmf-chat-message:not(:last-child) {
  margin-bottom: 24px !important;
}

html.zjmf-ticket-route .dialogue.zjmf-chat-message .dialogue_head {
  display: none !important;
}

html.zjmf-ticket-route .dialogue.zjmf-chat-message .dialogue_info {
  flex: 1 1 auto !important;
  width: 100% !important;
  min-width: 0 !important;
}

html.zjmf-ticket-route .dialogue.zjmf-chat-message .dialogue_info_first {
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  margin-bottom: 0 !important;
}

html.zjmf-ticket-route .dialogue.zjmf-chat-message .info_first_text {
  display: flex !important;
  align-items: center !important;
  flex-wrap: wrap !important;
  gap: 4px !important;
  flex: 1 1 auto !important;
  min-width: 0 !important;
}

html.zjmf-ticket-route .dialogue.zjmf-chat-user .info_first_text {
  flex-direction: row-reverse !important;
  justify-content: flex-start !important;
}

html.zjmf-ticket-route .dialogue.zjmf-chat-message .zjmf-chat-user-type,
html.zjmf-ticket-route .dialogue.zjmf-chat-message .dialogue_info_type.zjmf-chat-user-type {
  order: -1;
  margin-right: 8px !important;
  padding: 2px 8px !important;
  border-radius: 2px !important;
  background-color: #556ee6 !important;
  color: #fff !important;
  font-size: 12px !important;
  font-weight: 500 !important;
  line-height: 1.4 !important;
}

html.zjmf-ticket-route .dialogue.zjmf-chat-user .zjmf-chat-user-type,
html.zjmf-ticket-route .dialogue.zjmf-chat-user .dialogue_info_type.zjmf-chat-user-type {
  background-color: #f46a6a !important;
  margin-right: 0 !important;
  margin-left: 8px !important;
}

html.zjmf-ticket-route .dialogue.zjmf-chat-message .dialogue_info_name,
html.zjmf-ticket-route .dialogue.zjmf-chat-message .dialogue_info_name.el-link {
  font-size: 14px !important;
  font-weight: 500 !important;
  color: #333 !important;
  text-decoration: none !important;
  margin-right: 10px !important;
}

html.zjmf-ticket-route .dialogue.zjmf-chat-message .zjmf-chat-date,
html.zjmf-ticket-route .dialogue.zjmf-chat-message .info_first_text > span.fz-12.color-999.mr-20 {
  font-size: 12px !important;
  color: #999 !important;
  margin-right: 10px !important;
}

html.zjmf-ticket-route .dialogue.zjmf-chat-message .info_first_btn {
  flex: 0 0 auto !important;
  margin-left: 8px !important;
}

html.zjmf-ticket-route .dialogue.zjmf-chat-message .zjmf-chat-message-body,
html.zjmf-ticket-route .dialogue.zjmf-chat-message .dialogue_info_second,
html.zjmf-ticket-route .dialogue.zjmf-chat-message .dialogue_info_third {
  margin-top: 12px !important;
  margin-bottom: 0 !important;
  padding: 0 !important;
  background: transparent !important;
  font-size: 14px !important;
  line-height: 1.75 !important;
  color: #334155 !important;
}

html.zjmf-ticket-route .dialogue.zjmf-chat-message .message-content,
html.zjmf-ticket-route .dialogue.zjmf-chat-message .zjmf-ticket-content,
html.zjmf-ticket-route .dialogue.zjmf-chat-message .ticket-content {
  margin-top: 0 !important;
  font-size: 14px !important;
  line-height: 1.75 !important;
  color: #334155 !important;
}

html.zjmf-ticket-route .dialogue.zjmf-chat-message .message-content *,
html.zjmf-ticket-route .dialogue.zjmf-chat-message .zjmf-ticket-content *,
html.zjmf-ticket-route .dialogue.zjmf-chat-message .ticket-content * {
  font-size: inherit !important;
  line-height: inherit !important;
}

html.zjmf-ticket-route .dialogue.zjmf-chat-message .message-content p,
html.zjmf-ticket-route .dialogue.zjmf-chat-message .zjmf-ticket-content p,
html.zjmf-ticket-route .dialogue.zjmf-chat-message .ticket-content p {
  margin: 0 0 8px !important;
}

html.zjmf-ticket-route .dialogue.zjmf-chat-message .message-content img,
html.zjmf-ticket-route .dialogue.zjmf-chat-message .zjmf-ticket-content img,
html.zjmf-ticket-route .dialogue.zjmf-chat-message .ticket-content img {
  max-width: min(480px, 100%) !important;
  width: auto !important;
  height: auto !important;
  object-fit: contain !important;
  border-radius: 8px !important;
  margin: 8px 0 !important;
  display: block !important;
}

html.zjmf-ticket-route .dialogue.zjmf-chat-message .ticket-attachment-label {
  margin-top: 12px;
  font-size: 12px;
  color: #64748b;
  font-weight: 600;
}

html.zjmf-ticket-route .dialogue.zjmf-pending-reply.zjmf-chat-message {
  margin-right: 80px !important;
  margin-left: 0 !important;
}

.ticket-detail-page .dialogue img {
  max-width: 100%;
  height: auto;
  border-radius: 8px;
  margin: 8px 0;
  display: block;
}

.ticket-reply .ticket-rate-row {
  min-height: 28px;
}

.ticket-reply .ticket-rate-row .rating-container {
  display: inline-block;
}

/* 提交中占位（后台/前台共用） */
.zjmf-pending-reply,
.ticket-reply.pending-reply {
  opacity: 0.88;
  position: relative;
}

.zjmf-pending-reply::after,
.ticket-reply.pending-reply::after {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: inherit;
  pointer-events: none;
  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.35), transparent);
  background-size: 200% 100%;
  animation: zjmf-pending-shimmer 1.2s ease-in-out infinite;
}

@keyframes zjmf-pending-shimmer {
  0% { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}

#ticketReplyList.ticket-replies-syncing {
  opacity: 0.92;
  transition: opacity 0.12s ease;
}

.ticket-reply-enter,
.chat-message.ticket-reply-enter {
  animation: ticket-reply-enter 0.28s ease;
}

@keyframes ticket-reply-enter {
  from {
    opacity: 0;
    transform: translateY(8px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

.zjmf-pending-badge {
  display: inline-flex;
  align-items: center;
  margin-left: 8px;
  padding: 0 8px;
  height: 22px;
  font-size: 12px;
  line-height: 22px;
  color: #409eff;
  background: rgba(64, 158, 255, 0.12);
  border-radius: 11px;
}

.zjmf-pending-badge::before {
  content: '';
  width: 12px;
  height: 12px;
  margin-right: 5px;
  border: 2px solid rgba(64, 158, 255, 0.25);
  border-top-color: #409eff;
  border-radius: 50%;
  animation: zjmf-pending-spin 0.7s linear infinite;
}

@keyframes zjmf-pending-spin {
  to { transform: rotate(360deg); }
}

.zjmf-admin-rate-placeholder {
  display: inline-flex;
  align-items: center;
  margin-left: 4px;
  margin-right: 8px;
  vertical-align: middle;
  line-height: 1;
}

.zjmf-admin-rate-placeholder .zjmf-admin-star-empty {
  color: #e6e8f0;
  font-size: 14px;
  margin-right: 1px;
}

.info_first_text .zjmf-admin-rate-placeholder,
.info_first_text .el-rate {
  vertical-align: middle;
}

/* 后台「发送中」占位：复刻原生 .dialogue 布局（注入节点无 Vue scoped 属性） */
html.zjmf-ticket-route .dialogue.zjmf-pending-reply,
html.zjmf-ticket-route .zjmf-pending-reply.dialogue {
  width: 100%;
  box-sizing: border-box;
  background-color: #f3f6f9;
  border-radius: 4px;
  padding: 20px;
  display: flex;
  align-items: flex-start;
  margin-bottom: 10px;
  clear: both;
}

html.zjmf-ticket-route .zjmf-pending-reply .dialogue_head {
  width: 25px;
  min-height: 100%;
  display: flex;
  align-items: center;
  justify-content: flex-start;
  font-size: 23px;
  margin-right: 18px;
  flex-shrink: 0;
}

html.zjmf-ticket-route .zjmf-pending-reply .dialogue_info {
  flex: 1;
  min-width: 0;
}

html.zjmf-ticket-route .zjmf-pending-reply .dialogue_info_first {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 5px;
}

html.zjmf-ticket-route .zjmf-pending-reply .info_first_text {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 4px;
}

html.zjmf-ticket-route .zjmf-pending-reply .dialogue_info_second,
html.zjmf-ticket-route .zjmf-pending-reply .dialogue_info_third {
  margin-top: 8px;
}

/* 工单编辑器：不显示浅色占位说明 */
.w-e-text-container .w-e-text-placeholder,
#ticket-editor-wrap .w-e-text-placeholder,
#ticket-editor-wrap [data-slate-placeholder],
#ticket-editor-wrap [data-slate-placeholder="true"],
.ticket-wangeditor-box .w-e-text-placeholder,
.ticket-wangeditor-box [data-slate-placeholder],
.ticket-wangeditor-box [data-slate-placeholder="true"],
.zjmf-ticket-we-wrap .w-e-text-placeholder,
.zjmf-ticket-we-wrap [data-slate-placeholder],
.zjmf-ticket-we-wrap [data-slate-placeholder="true"] {
  display: none !important;
  visibility: hidden !important;
  opacity: 0 !important;
  height: 0 !important;
  max-height: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
  overflow: hidden !important;
  color: transparent !important;
  font-size: 0 !important;
  line-height: 0 !important;
  pointer-events: none !important;
}

/* 已弃用：后台改用右上角 toastr，与前台一致 */
.zjmf-ticket-toast {
  display: none !important;
}
