/**
 * ===== 第三部分：AI 助手（还原参考页，主色 #da2634 为真实系统实测值） ===== */
body.drawer-card-open, body.drawer-text-open { overflow: hidden; }
/* v18：AI 悬浮按钮放大 50%（60×60） */
.ai-float-btn { position: fixed; right: 24px; bottom: 48px; z-index: 1000; width: 60px; height: 60px; border-radius: 50%; border: none; background: #da2634; cursor: pointer; box-shadow: 0 6px 18px rgba(218, 38, 52, .45); display: flex; align-items: center; justify-content: center; overflow: hidden; transition: background .2s, transform .2s; }
.ai-float-btn:hover { background: #e64c53; transform: scale(1.06); }
.ai-float-btn img { width: 60px; height: 60px; border-radius: 50%; object-fit: cover; display: block; }

.ai-drawer-mask { position: fixed; inset: 0; background: rgba(0, 0, 0, .45); z-index: 1001; opacity: 0; pointer-events: none; transition: opacity .3s; }
.ai-drawer { position: fixed; top: 0; right: 0; bottom: 0; width: 800px; max-width: 100vw; background: #fff; z-index: 1002; transform: translateX(100%); transition: transform .3s; display: flex; flex-direction: column; box-shadow: -6px 0 16px rgba(0, 0, 0, .08); }
body.drawer-card-open .ai-drawer-mask-card,
body.drawer-text-open .ai-drawer-mask-text,
body.drawer-real-open .ai-drawer-mask-real { opacity: 1; pointer-events: auto; }
body.drawer-card-open #aiDrawerCard,
body.drawer-text-open #aiDrawerText,
body.drawer-real-open #aiDrawerReal { transform: translateX(0); }
.ai-drawer-header { padding: 16px 24px 8px; text-align: center; flex: 0 0 auto; position: relative; }
.ai-drawer-header-inner { display: flex; align-items: center; justify-content: center; gap: 10px; }
.ai-drawer-header-inner img { width: 50px; height: 50px; border-radius: 50%; object-fit: cover; }
.ai-drawer-header-inner h3 { font-size: 20px; font-weight: 600; margin: 0; }
/* 历史按钮 + 下拉面板 */
.ai-history-btn { position: absolute; right: 20px; top: 20px; display: inline-flex; align-items: center; gap: 5px; height: 30px; padding: 0 12px; border: 1px solid #e5e7eb; border-radius: 15px; background: #fff; color: #666; font-size: 12px; cursor: pointer; transition: all .15s; }
.ai-history-btn:hover { border-color: #da2634; color: #da2634; background: #fff1f1; }
.ai-history-panel { position: absolute; right: 16px; top: 56px; width: 300px; background: #fff; border: 1px solid #ebebeb; border-radius: 10px; box-shadow: 0 8px 28px rgba(0,0,0,.12); z-index: 20; padding: 10px; animation: editIn .16s ease; }
.ai-history-panel.hidden { display: none; }
.ah-new { display: flex; align-items: center; justify-content: center; gap: 6px; width: 100%; height: 32px; border: none; border-radius: 6px; background: #da2634; color: #fff; font-size: 13px; cursor: pointer; margin-bottom: 8px; }
.ah-new:hover { background: #e64c53; }
.ah-list { max-height: 260px; overflow-y: auto; }
.ah-item { display: block; width: 100%; text-align: left; border: none; background: #fff; border-radius: 8px; padding: 8px 10px; cursor: pointer; transition: background .12s; }
.ah-item:hover { background: #fafafa; }
.ah-item.cur { background: #fff1f1; }
.ah-item .t { display: block; font-size: 13px; font-weight: 500; color: #1f2937; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ah-item.cur .t { color: #da2634; }
.ah-item .s { display: block; font-size: 11px; color: #999; margin-top: 2px; }
.ah-empty { font-size: 12px; color: #bbb; text-align: center; padding: 12px 0; }
.ai-chat-body { flex: 1; overflow-y: auto; padding: 24px; }
.chat-aigc { display: flex; flex-direction: column; gap: 12px; }

.msg { display: flex; gap: 12px; align-items: flex-start; }
.msg.user { flex-direction: row-reverse; }
.msg-avatar { width: 32px; height: 32px; border-radius: 50%; flex: 0 0 32px; overflow: hidden; display: flex; align-items: center; justify-content: center; border: none; }
.msg-avatar.ai-av { background: transparent; }
.msg-avatar.ai-av img { width: 100%; height: 100%; }
.msg-avatar.user-av { background: #fdf0f0; color: #da2634; border: 1px solid #f5c6c6; }
.msg-main { max-width: 78%; display: flex; flex-direction: column; }
.msg.user .msg-main { align-items: flex-end; }
.msg-time { font-size: 11px; color: #98a2b3; margin-top: 3px; opacity: 0; transition: opacity .18s ease; }
.msg:hover .msg-time { opacity: 1; }
.msg.user .msg-time { text-align: right; }
/* 单选卡片自定义输入区 */
.si-custom { padding: 0 8px 4px; }
.si-custom.hidden { display: none; }
.si-custom-input { width: 100%; height: 30px; border: 1px solid #e5e7eb; border-radius: 6px; padding: 0 10px; font-size: 13px; color: #1f2937; outline: none; transition: border-color .15s; }
.si-custom-input:focus { border-color: #da2634; }
.msg-content { padding: 12px 16px; border-radius: 8px; font-size: 14px; line-height: 1.57; min-height: 46px; word-break: break-word; }
.msg.ai .msg-content { background: rgba(0, 0, 0, .06); border-start-start-radius: 2px; }
.msg.user .msg-content { background: #fff1f4; border-start-end-radius: 2px; }
/* 建议胶囊已并入气泡内 mini 单选胶囊组（.icard.mini） */

.loading-dots { display: flex; gap: 5px; align-items: center; height: 22px; }
.loading-dots i { width: 4px; height: 4px; border-radius: 50%; background: #da2634; animation: dotBounce 2s infinite ease-in-out; }
.loading-dots i:nth-child(2) { animation-delay: .2s; }
.loading-dots i:nth-child(3) { animation-delay: .4s; }
@keyframes dotBounce { 0%, 80%, 100% { transform: translateY(0); opacity: .5; } 40% { transform: translateY(-5px); opacity: 1; } }

.quick-card-block { margin: 4px 0 8px 44px; background: #fff; border: 1px solid #f0f0f0; border-radius: 8px; padding: 5px; }
/* ===== v27 浮层卡片面板（absolute 覆盖输入框+草稿卡，收起模式） ===== */
.floating-card-panel { position: absolute; left: 16px; right: 16px; bottom: 0; background: #fff; border-top: 2px solid #da2634; box-shadow: 0 -4px 16px rgba(0, 0, 0, .08); z-index: 60; max-height: 60%; overflow: hidden; transform: translateY(100%); transition: transform .25s ease; padding: 16px 20px 20px; border-radius: 12px 12px 0 0; display: flex; flex-direction: column; }
.floating-card-panel.on { transform: translateY(0); }
.floating-card-panel.collapsed { max-height: 80px; overflow: hidden; padding: 10px 20px; }
.floating-card-panel.collapsed .fcp-title { margin-bottom: 0; }
.floating-card-panel.collapsed > *:not(.fcp-title):not(.fcp-collapse-btn) { display: none; }
/* 选择卡显示或收起时隐藏草稿卡和输入框 */
.floating-card-panel.on ~ .ai-drawer-footer .task-card,
.floating-card-panel.on ~ .ai-drawer-footer .ad-sender { display: none; }
.floating-card-panel .fcp-collapse-btn { position: absolute; top: 8px; right: 12px; border: 1px solid #e5e7eb; background: #fff; cursor: pointer; color: #666; font-size: 12px; border-radius: 4px; padding: 2px 10px; transition: all .15s; z-index: 2; flex-shrink: 0; }
.floating-card-panel .fcp-collapse-btn:hover { border-color: #da2634; color: #da2634; }
.floating-card-panel .fcp-title { font-size: 14px; color: #1f2937; font-weight: 600; margin-bottom: 10px; padding-right: 70px; line-height: 1.5; flex-shrink: 0; }
.floating-card-panel .icard { display: flex; flex-direction: column; flex: 1; min-height: 0; overflow: hidden; }
.floating-card-panel .si-list { overflow-y: auto; flex: 1; min-height: 0; }
.floating-card-panel .si-foot { justify-content: flex-end; gap: 8px; flex-shrink: 0; }
.floating-card-panel > .op-log { overflow-y: auto; flex: 1; min-height: 0; }
.cf-btn.ignore { background: #fff; border: 1px solid #d9d9d9; color: #666; }
.cf-btn.ignore:hover { border-color: #da2634; color: #da2634; }
.ai-drawer-footer { flex: 0 0 auto; padding: 8px 16px 14px; display: flex; flex-direction: column; gap: 8px; position: relative; z-index: 1; }
.ad-sender { border: 1px solid #eee; border-radius: 12px; background: #fff; box-shadow: 0 1px 2px rgba(0, 0, 0, .03), 0 2px 6px rgba(0, 0, 0, .02); transition: border-color .2s, box-shadow .2s; }
.ad-sender.focus { border-color: #da2634; box-shadow: 0 6px 16px rgba(0, 0, 0, .08); }
.ad-sender-content { display: flex; align-items: flex-end; padding: 12px 16px 12px 12px; gap: 8px; }
.ad-sender textarea { flex: 1; border: none; outline: none; resize: none; font-size: 14px; font-family: inherit; line-height: 22px; height: 22px; max-height: 200px; overflow-y: auto; background: transparent; color: #1f2937; }
.sender-actions { display: flex; align-items: center; gap: 6px; }
.sender-clear { border: none; background: none; cursor: pointer; color: #667085; width: 32px; height: 32px; border-radius: 6px; display: flex; align-items: center; justify-content: center; font-size: 15px; }
.sender-clear:hover { background: #f5f5f5; color: #1f2937; }
.sender-clear.disabled { opacity: .45; pointer-events: none; }
.sender-send { width: 32px; height: 32px; border-radius: 50%; border: none; background: #da2634; color: #fff; cursor: pointer; display: flex; align-items: center; justify-content: center; font-size: 14px; transition: background .2s, opacity .2s; }
.sender-send:hover { background: #e64c53; }
.sender-send.disabled { opacity: .45; pointer-events: none; }
.sender-send svg { width: 15px; height: 15px; }

/**
 * ===== 第四部分：v6 模板搭建引擎组件（任务卡片 / 组件属性卡区 / 建议胶囊 / diff 回执 / 执行进度 / 预览遮罩） =====
 */

/* 任务卡片（输入框上方独立卡片，清单+状态式进度记录） */
.task-card { flex: 0 0 auto; border: 1px solid #ebebeb; border-radius: 10px; background: #fff; box-shadow: 0 1px 2px rgba(0, 0, 0, .03); overflow: hidden; }
.task-card.hidden { display: none; }
.tc-head { display: flex; align-items: center; gap: 8px; padding: 9px 14px 7px; }
.tc-title { flex: 0 1 auto; min-width: 0; font-size: 13px; font-weight: 600; color: #1f2937; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: flex; align-items: center; gap: 6px; }
.tc-title .ic { color: #da2634; flex-shrink: 0; }
.tc-count { font-size: 12px; color: #da2634; flex-shrink: 0; display: none; }
.tc-collapse { font-size: 12px; color: #da2634; border: 0; background: none; cursor: pointer; padding: 2px 4px; flex-shrink: 0; display: flex; align-items: center; gap: 2px; }
.tc-collapse .caret { transition: transform .2s; }
.task-card.collapsed .tc-collapse .caret { transform: rotate(180deg); }
.tc-body { padding: 2px 14px 8px; overflow-y: auto; max-height: 60vh; } /* 实际上限由 JS 按对话区 80% 动态设置 */
.task-card.collapsed .tc-body { display: none; }
.tc-row { display: grid; grid-template-columns: 1fr 110px 80px 52px 48px; align-items: center; gap: 7px; padding: 3px 6px; font-size: 12px; border-radius: 5px; cursor: pointer; color: #666; }
.tc-row:hover { background: #fafafa; color: #da2634; }
.tc-row .st { flex: 0 0 14px; display: flex; align-items: center; justify-content: center; }
.st.st-check { width: 9px; height: 5px; border-left: 2px solid #047857; border-bottom: 2px solid #047857; transform: rotate(-45deg); }
.st.st-dot { width: 8px; height: 8px; border-radius: 50%; background: #da2634; }
.st.st-circle { width: 7px; height: 7px; border-radius: 50%; border: 1.5px solid #d9d9d9; box-sizing: border-box; }
.ic { display: inline-block; width: 1em; height: 1em; vertical-align: -0.125em; fill: currentColor; flex-shrink: 0; }
.tc-row .nm { font-weight: 500; color: #1f2937; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tc-row.doing .nm { color: #da2634; }
.tc-row .ky { color: #999; font-family: Menlo, Consolas, monospace; font-size: 11px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tc-row .tp { color: #999; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tc-zone-card { border: 1px solid #f0f0f0; border-radius: 8px; padding: 2px 8px 6px; margin: 6px 0; background: #fff; }
.tc-row .ops { color: #b45309; }
.tc-row.cur { background: #fff1f1; }
/* 组合子组件行：水平缩进 */
.tc-row.sub { padding-left: 26px; cursor: pointer; }
.tc-row.sub .nm { font-weight: 500; color: #1f2937; }
.tc-row.sub:hover { background: #fafafa; color: #da2634; }
/* 区域分组：红条标题（对齐预览页样式） */
.tc-zone { display: flex; align-items: center; gap: 6px; font-size: 15px; font-weight: 700; color: #1f2937; padding: 8px 6px 4px; }
.tc-zone .redbar { width: 3px; height: 14px; background: #da2634; border-radius: 2px; flex-shrink: 0; }
.tc-zone i { font-style: normal; font-weight: 400; background: #fff1f1; color: #da2634; border-radius: 8px; padding: 0 7px; font-size: 11px; }
.tc-zone + .tc-row { border-top: 1px dashed #f0f0f0; }
.tc-modify { flex: 0 0 auto; height: 20px; line-height: 18px; padding: 0 9px; border: 1px solid #ffd6d9; border-radius: 999px; background: #fff; color: #da2634; font-size: 11px; cursor: pointer; user-select: none; transition: all .15s; justify-self: end; white-space: nowrap; }
.tc-modify:hover { background: #da2634; color: #fff; border-color: #da2634; }
/* 模版设置区（参考真实创建页基础信息，多行展示） */
.tc-settings { margin: 6px 0; border: 1px solid #f0f0f0; border-radius: 8px; overflow: hidden; background: #fff; }
.tc-set-head { display: flex; align-items: center; gap: 6px; padding: 7px 10px; font-size: 12px; font-weight: 600; color: #374151; cursor: pointer; user-select: none; background: #fafafa; }
.tc-set-head svg { width: 13px; height: 13px; color: #999; }
.tc-set-head i { font-style: normal; font-weight: 400; color: #bbb; font-size: 11px; flex: 1; }
.tc-set-head .caret { display: inline-flex; transition: transform .2s; }
.tc-set-head .caret svg { color: #bbb; }
.tc-settings.open .tc-set-head .caret { transform: rotate(180deg); }
.tc-set-body { display: none; padding: 8px 10px 10px; border-top: 1px solid #f5f5f5; }
.tc-settings.open .tc-set-body { display: block; }
/* 设置行：每行一项（标签左 / 控件右），布尔为开关行 */
.tc-set-line { display: flex; align-items: center; gap: 10px; padding: 4px 0; }
.tc-set-line + .tc-set-line { border-top: 1px dashed #f5f5f5; }
.tc-set-line label { flex: 0 0 118px; font-size: 12px; color: #666; }
.tc-set-line .tc-set-ctrl { flex: 1; min-width: 0; display: flex; align-items: center; gap: 8px; }
.tc-set-line .op-input { height: 26px; font-size: 12px; padding: 0 8px; width: 100%; }
.tc-sw { flex: 0 0 32px; height: 17px; border-radius: 999px; background: #d9d9d9; position: relative; cursor: pointer; transition: background .15s; }
.tc-sw .knob { position: absolute; left: 2px; top: 2px; width: 13px; height: 13px; border-radius: 50%; background: #fff; transition: left .15s; box-shadow: 0 1px 2px rgba(0,0,0,.2); }
.tc-sw.on { background: #da2634; }
.tc-sw.on .knob { left: 17px; }
.tc-sw-txt { font-size: 12px; color: #999; }
.tc-actions { display: flex; gap: 8px; padding: 8px 6px 4px; }
.tc-actions.top { padding: 6px 6px 8px; border-bottom: 1px solid #f5f5f5; margin-bottom: 4px; }
/* v16：标题旁「预览」按钮 + 右上操作区只留「完成配置」 */
.tc-head-acts { display: flex; gap: 6px; flex-shrink: 0; margin-left: auto; }
.tc-mini-btn { height: 24px; line-height: 22px; padding: 0 10px; border-radius: 4px; border: 1px solid #d9d9d9; background: #fff; color: #374151; font-size: 12px; cursor: pointer; white-space: nowrap; transition: all .15s; }
.tc-mini-btn:hover { border-color: #da2634; color: #da2634; }
.tc-mini-btn.primary { background: #da2634; border-color: #da2634; color: #fff; }
.tc-mini-btn.primary:hover { background: #e64c53; }
.tc-title-btn { flex-shrink: 0; height: 20px; line-height: 18px; padding: 0 8px; font-size: 11px; border-radius: 999px; border-color: #ffd6d9; color: #da2634; }
.tc-title-btn:hover { background: #fff1f1; }
/* v17：草稿修改标识 */
.tc-dirty-badge { display: none; margin-left: 6px; padding: 0 6px; height: 18px; line-height: 16px; border-radius: 9px; background: #fff7e6; color: #d46b08; border: 1px solid #ffd591; font-size: 11px; font-weight: 500; vertical-align: middle; }
.tc-dirty-badge.on { display: inline-block; animation: dirtyPop .3s ease; }
@keyframes dirtyPop { 0% { transform: scale(0.7); opacity: 0; } 100% { transform: scale(1); opacity: 1; } }
.tc-row .rq { font-size: 11px; color: #da2634; white-space: nowrap; }
.tc-row .rq.no { color: #bbb; }
.tc-btn { flex: 1; height: 28px; border-radius: 6px; border: 1px solid #d9d9d9; background: #fff; color: #374151; font-size: 12px; cursor: pointer; }
.tc-btn:hover { border-color: #da2634; color: #da2634; }
.tc-btn.primary { background: #da2634; border-color: #da2634; color: #fff; }
.tc-btn.primary:hover { background: #e64c53; }

/* 建议胶囊（AI 消息下方，可点击发送，方便演示） */
.suggest-row { margin-top: 8px; display: flex; flex-wrap: wrap; gap: 6px; }
/* suggest-pill 已由气泡内 .icard.mini 替代 */

/* 实体回显列表（组件识别清单，按区域分组） */
.entity-list { background: #fafafa; border: 1px solid #f0f0f0; border-radius: 8px; padding: 6px 10px; margin: 8px 0; }
/* 区域小卡片：三区域各自独立边框卡片，卡内红条标题 */
.zone-card { border: 1px solid #ebebeb; border-radius: 8px; padding: 2px 12px 5px; margin: 7px 0; background: #fff; }
.zc-head { display: flex; align-items: center; gap: 6px; font-size: 14px; font-weight: 700; color: #1f2937; padding: 7px 0 3px; }
.zc-head .redbar { width: 3px; height: 14px; background: #da2634; border-radius: 2px; flex-shrink: 0; }
.zc-head i { font-style: normal; font-weight: 400; background: #fff1f1; color: #da2634; border-radius: 8px; padding: 0 7px; font-size: 11px; }
.entity-row { display: grid; grid-template-columns: 1fr 150px 110px; align-items: center; padding: 4px 0; font-size: 13px; gap: 10px; border-bottom: 1px dashed #f0f0f0; }
.entity-row:last-child { border-bottom: 0; }
.req { color: #f5222d; font-weight: 600; margin-left: 1px; }
.entity-row .nm { font-weight: 600; color: #1f2937; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.entity-row .ky { font-family: Menlo, Consolas, monospace; font-size: 12px; color: #0891b2; background: #ecfeff; border: 1px solid #cffafe; border-radius: 4px; padding: 0 6px; justify-self: start; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%; }
.entity-row .tp { color: #666; background: #f5f5f5; border-radius: 4px; padding: 0 7px; justify-self: start; font-size: 12px; }
.entity-row .tp.t { color: #1f2937; }
/* 组合子组件行：水平缩进 */
.entity-row.sub { padding-left: 28px; position: relative; }
.entity-row.sub .nm { font-weight: 400; color: #374151; }
.entity-row.sub::before { content: "└"; position: absolute; left: 9px; top: 4px; color: #c0c4cc; font-size: 12px; }

/* 模版类型选项卡（询问卡片） */
.tpl-opts { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; margin: 6px 0; }
/* 模版类型卡：与标准单选卡片统一样式 */
.tpl-opt { border: 1px solid #ebebeb; border-radius: 8px; padding: 9px 12px; cursor: pointer; background: #fff; transition: all .15s; text-align: left; font: inherit; }
.tpl-opt:hover { border-color: #da2634; box-shadow: 0 2px 8px rgba(218, 38, 52, .1); }
.tpl-opt .t { font-size: 13px; font-weight: 600; color: #1f2937; }
.tpl-opt:hover .t { color: #da2634; }
.tpl-opt .d { font-size: 11px; color: #999; margin-top: 2px; }

/* 保存确认卡（对话内） */
.save-confirm { background: #fafafa; border: 1px solid #f0f0f0; border-radius: 8px; padding: 10px 14px; margin: 6px 0; }
.save-confirm .sc-row { margin: 8px 0; }
.save-confirm .sc-row > label { display: block; font-size: 12px; color: #999; margin-bottom: 5px; }
.save-confirm .sc-meta { font-size: 12px; color: #999; margin-top: 6px; }
.save-confirm .sc-meta2 { font-size: 12px; color: #666; line-height: 1.7; background: #fafafa; border: 1px solid #f0f0f0; border-radius: 6px; padding: 6px 10px; }
.save-confirm .sc-meta2 b { color: #374151; font-weight: 600; }
.save-confirm .sc-meta2 .mono { font-family: Menlo, Consolas, monospace; color: #0891b2; }
.sum-row { display: grid; grid-template-columns: 18px 1fr 150px 110px 44px; align-items: center; gap: 8px; padding: 3px 0; font-size: 12px; cursor: pointer; border-radius: 4px; }
.sum-row:hover { background: #f5f5f5; }
.sum-row .idx { color: #bbb; font-family: Menlo, Consolas, monospace; }
.sum-row .nm { min-width: 0; font-weight: 500; color: #1f2937; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sum-row .ky { color: #0891b2; font-family: Menlo, Consolas, monospace; font-size: 11px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sum-row .tp { color: #999; }
/* 保存卡汇总子组件行：缩进 */
.sum-row.sub { padding-left: 24px; cursor: default; }
.sum-row.sub .nm { font-weight: 400; color: #374151; }
.sum-row.sub:hover { background: none; }
.sum-row .go { color: #da2634; font-size: 11px; flex: 0 0 auto; opacity: 0; }
.sum-row:hover .go { opacity: 1; }

/* ===== 组件编辑弹层（抽屉内居中模态框） ===== */
.edit-mask { position: absolute; inset: 0; background: rgba(0, 0, 0, .45); display: flex; align-items: center; justify-content: center; z-index: 60; }
.edit-mask.hidden { display: none; }
.edit-modal { width: 560px; max-width: 92%; max-height: 86%; display: flex; flex-direction: column; background: #fff; border-radius: 10px; box-shadow: 0 16px 48px rgba(0, 0, 0, .2); overflow: hidden; animation: editIn .18s ease; }
@keyframes editIn { from { transform: translateY(14px); opacity: 0; } to { transform: translateY(0); opacity: 1; } }
.edit-head { display: flex; align-items: center; gap: 10px; padding: 13px 20px; border-bottom: 1px solid #f0f0f0; flex-shrink: 0; }
.edit-title { flex: 1; min-width: 0; font-size: 14px; font-weight: 600; color: #1f2937; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.edit-title .sub { font-weight: 400; color: #999; font-size: 12px; }
.edit-close { width: 26px; height: 26px; border-radius: 6px; border: none; background: none; color: #999; font-size: 14px; cursor: pointer; flex-shrink: 0; display: flex; align-items: center; justify-content: center; }
/* 组合组件：子组件管理 */
.child-list { display: flex; flex-direction: column; gap: 6px; }
.child-item { border: 1px solid #eee; border-radius: 8px; background: #fff; }
.child-item.open { border-color: #ffd6d9; }
.child-row { display: flex; align-items: center; gap: 6px; padding: 6px 8px; cursor: pointer; border-radius: 8px; }
.child-row:hover { background: #fafafa; }
.child-caret { flex: 0 0 14px; display: inline-flex; color: #bbb; transition: transform .2s; }
.child-caret svg { width: 14px; height: 14px; display: block; }
.child-caret.open { transform: rotate(180deg); color: #da2634; }
.child-params { border-top: 1px dashed #f0f0f0; padding: 8px 10px 10px; background: #fdfbfb; border-radius: 0 0 8px 8px; }
.child-params .op-row2 { margin-top: 0; }
.child-row .op-input { flex: 1; min-width: 0; }
.child-key { font-family: Menlo, Consolas, monospace; font-size: 11px; color: #999; flex: 0 0 auto; max-width: 72px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.op-sel { flex: 0 0 96px; height: 28px; border: 1px solid #e5e7eb; border-radius: 6px; padding: 0 6px; font-size: 12px; color: #374151; background: #fff; outline: none; cursor: pointer; }
.op-sel:focus { border-color: #da2634; }
.child-x { flex: 0 0 22px; height: 22px; display: flex; align-items: center; justify-content: center; border-radius: 4px; color: #bbb; cursor: pointer; font-size: 13px; }
.child-x:hover { color: #f5222d; background: #fff1f1; }
.child-empty { font-size: 12px; color: #bbb; padding: 4px 0; }
.opt-add { margin-top: 2px; }
/* 组合组件：预览（参考页卡片式表单列表） */
.pv-group { border: 1px solid #eee; border-radius: 8px; padding: 14px 16px 12px; background: #fff; width: 100%; }
/* v15：参考页多组字段直接排列（组间分隔线） */
.pv-group-fields + .pv-group-fields { border-top: 1px dashed #f0f0f0; padding-top: 4px; }
.pv-sub-collapse .pv-collapse-body-inner .pv-group-add { margin-top: 8px; }
.pv-group-add { display: flex; align-items: center; justify-content: center; gap: 4px; height: 32px; border: 1px dashed #ffb3b8; border-radius: 6px; color: #da2634; font-size: 13px; cursor: pointer; user-select: none; background: #fff; }
.pv-group-add:hover { background: #fff1f1; }
.pv-group-add.disabled { opacity: .45; pointer-events: none; }
.edit-close:hover { background: #f5f5f5; color: #333; }
.edit-body { overflow-y: auto; padding: 16px 20px 10px; min-height: 0; }
.edit-foot { display: flex; justify-content: space-between; align-items: center; gap: 10px; padding: 12px 20px; border-top: 1px solid #f0f0f0; flex-shrink: 0; }

/* 卡内表单 */
.op-field { margin-bottom: 12px; }
.op-field > label { display: block; font-size: 13px; color: #333; margin-bottom: 6px; }
.op-field > label .req { color: #da2634; margin-right: 2px; }
.op-input { width: 100%; height: 32px; border: 1px solid #d9d9d9; border-radius: 6px; padding: 4px 10px; font-size: 13px; outline: none; color: #1f2937; box-sizing: border-box; }
.op-input.mono { font-family: Menlo, Consolas, monospace; color: #0891b2; }
.op-input:focus { border-color: #da2634; box-shadow: 0 0 0 2px rgba(218, 38, 52, .1); }
.op-row2 { display: flex; gap: 12px; }
.op-row2 .op-field { flex: 1; }
.op-check-group { display: flex; gap: 8px; flex-wrap: wrap; }
.op-check { padding: 4px 14px; border: 1px solid #d9d9d9; border-radius: 999px; font-size: 13px; cursor: pointer; user-select: none; background: #fff; color: #333; transition: all .15s; }
.op-check:hover { border-color: #da2634; color: #da2634; }
.op-check.on { background: #da2634; color: #fff; border-color: #da2634; }
.op-switch { position: relative; width: 36px; height: 20px; border-radius: 999px; background: #d0d5dd; cursor: pointer; border: none; padding: 0; display: inline-block; vertical-align: middle; }
.op-switch.on { background: #da2634; }
.op-switch::after { content: ""; position: absolute; width: 16px; height: 16px; left: 2px; top: 2px; background: #fff; border-radius: 50%; transition: transform .2s; box-shadow: 0 1px 3px rgba(0,0,0,.2); }
.op-switch.on::after { transform: translateX(16px); }
.op-actions { display: flex; justify-content: space-between; align-items: center; padding-top: 10px; margin-top: 4px; border-top: 1px dashed #eee; }
.op-actions.right { justify-content: flex-end; }
.op-btn { height: 30px; padding: 0 16px; border-radius: 6px; border: 1px solid #d9d9d9; background: #fff; color: #374151; font-size: 13px; cursor: pointer; }
.op-btn:hover { border-color: #da2634; color: #da2634; }
.op-btn.primary { background: #da2634; border-color: #da2634; color: #fff; }
.op-btn.primary:hover { background: #e64c53; }
.op-btn.danger { color: #f5222d; border-color: #ffa39e; }
.op-btn.danger:hover { background: #fff1f0; }
.op-btn.disabled { opacity: .5; pointer-events: none; }

/* 组件类型选择（卡内下拉） */
.op-typesel { position: relative; }
.op-typesel-head { display: flex; align-items: center; justify-content: space-between; height: 32px; border: 1px solid #d9d9d9; border-radius: 6px; padding: 0 10px; font-size: 13px; cursor: pointer; background: #fff; color: #1f2937; }
.op-typesel-head:hover { border-color: #da2634; }
.op-typesel-head .caret { color: #999; }
.op-typesel.open .op-typesel-head { border-color: #da2634; box-shadow: 0 0 0 2px rgba(218, 38, 52, .1); }
.op-typesel-menu { position: absolute; top: 34px; left: 0; right: 0; background: #fff; border: 1px solid #e5e5e5; border-radius: 6px; box-shadow: 0 6px 16px rgba(0,0,0,.12); z-index: 30; max-height: 210px; overflow-y: auto; display: none; }
.op-typesel.open .op-typesel-menu { display: block; }
.op-typesel-item { padding: 6px 12px; font-size: 13px; color: #333; cursor: pointer; }
.op-typesel-item:hover { background: #fff1f1; color: #da2634; }
.op-typesel-item.on { color: #da2634; font-weight: 600; background: #fff7f7; }

/* 参数分组标题 */
.params-title { display: flex; align-items: center; gap: 8px; margin: 4px 0 12px; color: #999; font-size: 12px; }
.params-title::before, .params-title::after { content: ""; flex: 1; height: 1px; background: #f0f0f0; }

/* 选项管理（下拉/单选/复选） */
.opt-list { display: flex; flex-wrap: wrap; gap: 6px; }
.opt-chip { display: inline-flex; align-items: center; gap: 5px; padding: 3px 6px 3px 11px; border: 1px solid #d9d9d9; border-radius: 999px; font-size: 13px; background: #fff; color: #333; }
.opt-chip .x { width: 15px; height: 15px; border-radius: 50%; background: #f0f0f0; color: #999; display: inline-flex; align-items: center; justify-content: center; font-size: 11px; cursor: pointer; }
.opt-chip .x:hover { background: #f5222d; color: #fff; }
.opt-add { display: inline-flex; align-items: center; gap: 4px; padding: 3px 12px; border: 1px dashed #d9d9d9; border-radius: 999px; font-size: 13px; color: #999; cursor: pointer; background: #fafafa; }
.opt-add:hover { color: #da2634; border-color: #da2634; }
.opt-edit-input { height: 28px; border: 1px solid #da2634; border-radius: 6px; padding: 0 9px; font-size: 13px; outline: none; width: 140px; }

/* 保存卡（组件汇总清单）：与 entity-list 同列对齐 */
.sum-row { display: grid; grid-template-columns: 18px 1fr 150px 110px 44px; align-items: center; gap: 8px; padding: 6px 4px; border-bottom: 1px dashed #f0f0f0; font-size: 13px; cursor: pointer; }
.sum-row:hover { background: #fafafa; }
.sum-row .idx { color: #bbb; font-size: 12px; }
.sum-row .nm { font-weight: 500; color: #1f2937; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sum-row .ky { font-family: Menlo, Consolas, monospace; font-size: 12px; color: #0891b2; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sum-row .tp { color: #999; }
.sum-row.sub { padding-left: 24px; cursor: default; }
.sum-row.sub .nm { font-weight: 400; color: #374151; }
.sum-row.sub:hover { background: none; }
.sum-empty { padding: 14px 0; text-align: center; color: #bbb; font-size: 13px; }

/* ===== 预览遮罩（v15：100% 还原参考页 antd 布局） ===== */
.preview-mask { position: fixed; inset: 0; z-index: 1100; background: #f0f2f5; display: flex; flex-direction: column; }
.preview-mask.hidden { display: none; }
.preview-shell { flex: 1; display: flex; flex-direction: column; min-height: 0; }
/* 顶部：仅面包屑（参考页 ant-page-header） */
.preview-header { flex: 0 0 auto; background: #fff; display: flex; align-items: center; gap: 12px; padding: 16px 24px 12px; }
.pv-meta { flex: 1; font-size: 12px; color: #999; }
.pv-exit { height: 32px; padding: 4px 15px; border-radius: 6px; border: 1px solid #d9d9d9; background: #fff; color: rgba(0,0,0,.88); font-size: 14px; cursor: pointer; margin-left: auto; }
.pv-exit:hover { border-color: #da2634; color: #da2634; }
/* 主体：白底表单卡片，随滚动 */
.preview-body { flex: 1; overflow-y: auto; background: #f0f2f5; }
.pv-card { max-width: 1400px; margin: 0 auto; background: #fff; box-shadow: 0 1px 2px rgba(0,0,0,.03); padding: 8px 16px 24px; min-height: calc(100% - 8px); }
/* 折叠面板（参考页 ant-collapse-borderless） */
.pv-collapse { margin-bottom: 0; }
.pv-collapse-body { display: none; }
.pv-collapse.open .pv-collapse-body { display: block; }
.pv-collapse-head { display: flex; align-items: center; gap: 8px; cursor: pointer; user-select: none; height: 46px; padding: 12px 16px; box-sizing: border-box; }
.pv-collapse-head .pvtoggle { order: -1; font-size: 14px; color: #da2634; display: inline-flex; align-items: center; gap: 4px; flex-shrink: 0; }
.pv-collapse-head .pvtoggle svg { width: 1em; height: 1em; font-size: 14px; color: #da2634; transition: transform .2s; }
.pv-collapse.open .pvtoggle svg { transform: rotate(180deg); }
.pv-collapse-head .redbar { width: 3px; height: 16px; background: #db2a2d; border-radius: 2px; margin-right: 8px; flex-shrink: 0; }
.pv-collapse-head .zt { font-size: 14px; font-weight: 500; color: rgba(0,0,0,.88); }
.pv-collapse-body-inner { padding: 4px 16px 16px; }
/* 面包屑 */
.pv-breadcrumb { font-size: 14px; color: rgba(0,0,0,.45); display: flex; align-items: center; gap: 4px; }
.pv-breadcrumb b { font-weight: 500; color: rgba(0,0,0,.88); }
/* 两列字段（参考页 ant-row：col-12 各 50%，padding 0 4px） */
.pv-fields { display: flex; flex-wrap: wrap; margin-left: -4px; margin-right: -4px; }
.pv-item { width: 50%; padding: 0 4px; box-sizing: border-box; margin-bottom: 24px; }
.pv-item.half { width: 50%; }
.pv-item-label { display: block; height: 22px; line-height: 22px; font-size: 14px; color: rgba(0,0,0,.88); margin-bottom: 0; }
.pv-item-label .req { color: #db2a2d; margin-right: 3px; }
.pv-item .pv-ctrl { width: 80%; }
.pv-ctrl { min-width: 0; }
.pv-input { width: 100%; height: 32px; border: 1px solid #d9d9d9; border-radius: 0; padding: 4px 11px; font-size: 14px; outline: none; color: rgba(0,0,0,.88); box-sizing: border-box; background: transparent; }
.pv-input:focus { border-color: #da2634; box-shadow: 0 0 0 2px rgba(218,38,52,.1); }
.pv-input::placeholder { color: #bfbfbf; }
textarea.pv-input { height: 66px; resize: none; padding: 6px 11px; line-height: 1.5; }
.pv-select { position: relative; }
.pv-select-head { display: flex; align-items: center; justify-content: space-between; height: 32px; border: 1px solid #d9d9d9; border-radius: 0; padding: 0 11px; font-size: 14px; cursor: pointer; color: rgba(0,0,0,.88); background: transparent; }
.pv-select-head .ph { color: #bfbfbf; }
.pv-select-head .caret { color: rgba(0,0,0,.25); font-size: 12px; }
.pv-select.open .pv-select-head { border-color: #da2634; }
.pv-select-menu { position: absolute; top: 34px; left: 0; right: 0; background: #fff; border-radius: 8px; box-shadow: 0 6px 16px rgba(0,0,0,.12); z-index: 40; max-height: 200px; overflow-y: auto; display: none; }
.pv-select.open .pv-select-menu { display: block; }
.pv-option { padding: 5px 12px; font-size: 14px; color: rgba(0,0,0,.88); cursor: pointer; }
.pv-option:hover { background: rgba(0,0,0,.04); }
.pv-radio-group, .pv-check-group { display: flex; flex-wrap: wrap; gap: 8px 20px; line-height: 32px; font-size: 14px; color: rgba(0,0,0,.88); }
.pv-radio, .pv-check { display: inline-flex; align-items: center; gap: 6px; cursor: pointer; }
.pv-radio i, .pv-check i { width: 16px; height: 16px; border-radius: 50%; border: 1px solid #d9d9d9; display: inline-block; background: #fff; position: relative; flex-shrink: 0; }
.pv-check i { border-radius: 3px; }
.pv-radio.on i { border-color: #da2634; }
.pv-radio.on i::after { content: ""; position: absolute; inset: 3px; border-radius: 50%; background: #da2634; }
.pv-check.on i { border-color: #da2634; background: #da2634; }
.pv-check.on i::after { content: ""; position: absolute; left: 3px; top: 4px; width: 8px; height: 4px; border-left: 2px solid #fff; border-bottom: 2px solid #fff; transform: rotate(-45deg); }
.pv-switch { display: inline-flex; align-items: center; gap: 8px; height: 32px; cursor: pointer; font-size: 13px; color: #666; }
.pv-switch .bar { position: relative; width: 40px; height: 22px; border-radius: 999px; background: rgba(0,0,0,.25); transition: background .2s; }
.pv-switch .bar::after { content: ""; position: absolute; width: 18px; height: 18px; left: 2px; top: 2px; background: #fff; border-radius: 50%; transition: transform .2s; box-shadow: 0 1px 3px rgba(0,0,0,.2); }
.pv-switch.on .bar { background: #da2634; }
.pv-switch.on .bar::after { transform: translateX(18px); }
.pv-date { display: flex; align-items: center; gap: 8px; }
.pv-date .pv-input { text-align: center; color: rgba(0,0,0,.88); }
.pv-date .sep { color: #999; }
.pv-upload { border: 1px dashed #d9d9d9; border-radius: 0; height: 76px; width: 80%; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; color: #999; font-size: 13px; cursor: pointer; background: #fafafa; }
.pv-upload:hover { border-color: #da2634; color: #da2634; }
.pv-upload .plus { font-size: 20px; line-height: 1; }
.pv-unit { display: inline-flex; align-items: center; gap: 8px; }
.pv-unit .u { color: #999; font-size: 13px; }
/* 组合组件：嵌套折叠（参考页 教程指引） */
.pv-sub-collapse { margin-bottom: 0; }
/* 添加一组数据：全宽 dashed 按钮（参考页） */
.pv-group-add { width: 100%; height: 32px; border: 1px dashed #d9d9d9; border-radius: 0; background: #fff; color: rgba(0,0,0,.88); font-size: 14px; cursor: pointer; display: flex; align-items: center; justify-content: center; gap: 6px; margin-top: 4px; }
.pv-group-add:hover { border-color: #da2634; color: #da2634; }
.pv-group-add.disabled { opacity: .5; cursor: not-allowed; }
.pv-group-add svg { width: 1em; height: 1em; font-size: 12px; }
/* 底部按钮：flex gap 8，返 回 / 提 交（参考页） */
.pv-actions { display: flex; gap: 8px; align-items: center; padding: 8px 16px 16px; }
.pv-btn { height: 32px; padding: 4px 15px; border-radius: 6px; border: 1px solid #d9d9d9; background: #fff; color: rgba(0,0,0,.88); font-size: 14px; cursor: pointer; }
.pv-btn:hover { border-color: #da2634; color: #da2634; }
.pv-btn.primary { background: #da2634; border-color: #da2634; color: #fff; }
.pv-btn.primary:hover { background: #e64c53; }

/* v24：列表「状态」列标签（草稿灰 / 待审核橙 / 已驳回红 / 未关联灰蓝 / 已关联绿） */
.st-tag { display: inline-block; padding: 1px 8px; border-radius: 4px; font-size: 12px; line-height: 18px; white-space: nowrap; }
.st-tag.st-draft { color: #8c8c8c; background: #fafafa; border: 1px solid #d9d9d9; }
.st-tag.st-pend { color: #d46b08; background: #fff7e6; border: 1px solid #ffd591; }
.st-tag.st-reject { color: #cf1322; background: #fff1f0; border: 1px solid #ffa39e; }
.st-tag.st-unlinked { color: #595959; background: #f0f5ff; border: 1px solid #adc6ff; }
.st-tag.st-linked { color: #389e0d; background: #f6ffed; border: 1px solid #b7eb8f; }
/* v16：审核态预览底部「驳回」按钮 */
.pv-btn.danger { color: #cf1322; border-color: #ffa39e; }
.pv-btn.danger:hover { background: #fff1f0; color: #cf1322; border-color: #cf1322; }

/* AI 新增列表行（高亮） */
#tblBody tr.ai-new-row td { background: #fffbe6; border-top: 2px solid #faad14; border-bottom: 2px solid #faad14; }
#tblBody tr.ai-new-row td:first-child { border-left: 2px solid #faad14; }
#tblBody tr.ai-new-row td:last-child { border-right: 2px solid #faad14; }
#tblBody tr.ai-new-row:hover td { background: #fff6cc; }

/**
 * ===== 第五部分：v7 演示控制器（左下入口 + 左侧浮动面板 + 高亮脉冲） =====
 */

/* 演示入口按钮（与右下 AI 按钮对称） */
.demo-btn { position: fixed; left: 24px; bottom: 48px; z-index: 1200; height: 40px; padding: 0 18px; border-radius: 999px; border: none; background: #da2634; color: #fff; font-size: 14px; cursor: pointer; box-shadow: 0 4px 12px rgba(218, 38, 52, .4); transition: background .2s, transform .2s; display: flex; align-items: center; gap: 6px; }
.demo-btn .ic { font-size: 16px; }
.demo-btn:hover { background: #e64c53; transform: translateY(-1px); }
body.demo-open .demo-btn { display: none; }

/* 演示控制器面板 */
.demo-panel { position: fixed; left: 20px; top: 64px; z-index: 1200; width: 330px; max-height: calc(100vh - 128px); background: #fff; border-radius: 10px; box-shadow: 0 12px 40px rgba(15, 23, 42, .22); display: flex; flex-direction: column; overflow: hidden; border: 1px solid #f0f0f0; }
.demo-panel.hidden { display: none; }
.demo-head { flex: 0 0 auto; display: flex; align-items: center; justify-content: space-between; padding: 10px 14px; background: linear-gradient(135deg, #da2634, #e64c53); color: #fff; }
.dh-title { font-size: 14px; font-weight: 600; display: flex; align-items: center; gap: 6px; }
.dh-close { border: none; background: rgba(255,255,255,.2); color: #fff; width: 22px; height: 22px; border-radius: 50%; cursor: pointer; font-size: 12px; line-height: 1; display: flex; align-items: center; justify-content: center; }
.dh-close:hover { background: rgba(255,255,255,.35); }

/* 进度 */
.demo-progress { flex: 0 0 auto; padding: 8px 14px 6px; }
.dp-line { display: flex; align-items: center; gap: 8px; }
.dp-cur { font-size: 12px; color: #374151; font-weight: 600; white-space: nowrap; }
.dp-bar { flex: 1; height: 4px; border-radius: 999px; background: #f0f0f0; overflow: hidden; }
.dp-bar i { display: block; height: 100%; width: 0; background: #da2634; border-radius: 999px; transition: width .3s; }

/* 讲解词 */
.demo-desc { flex: 0 0 auto; margin: 0 14px; padding: 8px 12px; background: #fafafa; border-left: 3px solid #da2634; border-radius: 6px; font-size: 12px; line-height: 1.7; color: #374151; max-height: 118px; overflow-y: auto; }

/* 步骤清单 */
.demo-steps { flex: 1; min-height: 60px; overflow-y: auto; padding: 8px 14px; }
.ds-phase { font-size: 11px; color: #999; padding: 6px 0 3px; font-weight: 600; letter-spacing: 1px; }
.ds-step { display: flex; align-items: center; gap: 7px; padding: 4px 8px; font-size: 12px; color: #555; border-radius: 5px; cursor: pointer; transition: all .12s; }
.ds-step:hover { background: #fff1f1; color: #da2634; }
.ds-step .no { flex: 0 0 18px; text-align: center; color: #bbb; font-size: 11px; font-family: Menlo, Consolas, monospace; display: flex; align-items: center; justify-content: center; }
.ds-step .no.ck { width: 8px; height: 9px; margin: 0 5px; border-left: 2px solid #047857; border-bottom: 2px solid #047857; transform: rotate(-45deg); }
.ds-step.done { color: #999; }
.ds-step.done .no { color: #047857; }
.ds-step.cur { background: #fff1f1; color: #da2634; font-weight: 600; }
.ds-step.cur .no { color: #da2634; }

/* 底部按钮 */
.demo-foot { flex: 0 0 auto; display: flex; gap: 6px; padding: 10px 14px; border-top: 1px solid #f0f0f0; }
.dbtn { flex: 1; height: 30px; border-radius: 6px; border: 1px solid #d9d9d9; background: #fff; color: #374151; font-size: 12px; cursor: pointer; padding: 0 6px; display: flex; align-items: center; justify-content: center; gap: 4px; white-space: nowrap; }
.dbtn .ic { font-size: 14px; }
.dbtn:hover { border-color: #da2634; color: #da2634; }
.dbtn.primary { background: #da2634; border-color: #da2634; color: #fff; flex: 1.4; }
.dbtn.primary:hover { background: #e64c53; }
.dbtn.icon { flex: 0 0 36px; }
.dbtn.on { background: #fff1f1; border-color: #da2634; color: #da2634; }
#demoPlayBtn .ic-pause { display: none; }
#demoPlayBtn.on .ic-play { display: none; }
#demoPlayBtn.on .ic-pause { display: block; }
.dbtn:disabled { opacity: .45; pointer-events: none; }

/* 快进状态 */
.demo-status { flex: 0 0 auto; padding: 6px 14px; background: #fffbeb; color: #b45309; font-size: 12px; text-align: center; }
.demo-status.hidden { display: none; }

/* 高亮脉冲 */
.demo-hl { outline: 2px solid #faad14 !important; outline-offset: 2px; box-shadow: 0 0 0 6px rgba(250, 173, 20, .28) !important; border-radius: 4px; animation: demoPulse 1.1s ease-in-out 3; }
@keyframes demoPulse { 50% { box-shadow: 0 0 0 12px rgba(250, 173, 20, .1) !important; } }

/* ================= v33 后台服务管理面板 ================= */
.svc-body { flex: 1; padding: 16px 18px; overflow-y: auto; }
.svc-step { display: flex; align-items: flex-start; gap: 10px; margin-bottom: 14px; }
.svc-step-no { flex: 0 0 22px; height: 22px; border-radius: 50%; background: #da2634; color: #fff; font-size: 12px; font-weight: 600; display: flex; align-items: center; justify-content: center; }
.svc-step-txt { font-size: 13px; color: #374151; line-height: 1.6; padding-top: 1px; }
.svc-inline-cmd { background: #f3f4f6; color: #da2634; font-family: Menlo, Consolas, monospace; font-size: 12px; padding: 1px 5px; border-radius: 3px; }
.svc-status-row { display: flex; align-items: center; gap: 6px; padding: 12px 0; margin: 4px 0 14px; border-top: 1px solid #f0f0f0; }
.svc-status-label { font-size: 13px; color: #6b7280; }
.svc-status { font-size: 13px; font-weight: 600; }
.svc-status.on { color: #047857; }
.svc-status.off { color: #9ca3af; }
.svc-status.checking { color: #b45309; }
.svc-actions { display: flex; gap: 8px; padding-top: 4px; }
.svc-actions .dbtn { flex: 1; height: 34px; }
.svc-actions .dbtn.on { background: #ecfdf5; border-color: #047857; color: #047857; }

/* ================= 真实AI版样式（完全隔离） ================= */

/* 模型选择器 */
.llm-model-sel { height: 28px; border-radius: 6px; border: 1px solid #d9d9d9; background: #fff; font-size: 12px; color: #374151; padding: 0 8px; cursor: pointer; outline: none; margin-left: 8px; }
.llm-model-sel:hover { border-color: #da2634; }
.llm-model-sel:focus { border-color: #da2634; box-shadow: 0 0 0 2px rgba(218,38,52,.1); }

/* 连接状态 */
.llm-status { font-size: 11px; padding: 2px 8px; border-radius: 10px; margin-left: 8px; white-space: nowrap; }
.llm-status.on { color: #16a34a; background: #f0fdf4; }
.llm-status.off { color: #98a2b3; background: #f9fafb; }

/* 配置按钮 */
.llm-config-btn { width: 28px; height: 28px; border-radius: 6px; border: 1px solid #d9d9d9; background: #fff; cursor: pointer; font-size: 14px; color: #666; display: flex; align-items: center; justify-content: center; margin-left: 6px; }
.llm-config-btn:hover { border-color: #da2634; color: #da2634; }

/* 配置面板 */
.llm-config-panel { position: absolute; top: 100%; right: 0; width: 320px; background: #fff; border: 1px solid #e5e7eb; border-radius: 8px; box-shadow: 0 8px 24px rgba(0,0,0,.12); padding: 16px; z-index: 100; margin-top: 4px; }
.llm-config-panel.hidden { display: none; }
.llm-config-row { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; }
.llm-config-row label { flex: 0 0 70px; font-size: 13px; color: #666; }
.llm-api-input { flex: 1; height: 32px; border-radius: 6px; border: 1px solid #d9d9d9; padding: 0 10px; font-size: 13px; outline: none; }
.llm-api-input:focus { border-color: #da2634; box-shadow: 0 0 0 2px rgba(218,38,52,.1); }
.llm-proxy-addr { font-size: 13px; color: #0891b2; font-family: Menlo, Consolas, monospace; }
.llm-save-btn { width: 100%; height: 34px; border-radius: 6px; border: none; background: #da2634; color: #fff; font-size: 13px; cursor: pointer; }
.llm-save-btn:hover { background: #e64c53; }

/* 已连接工具栏 */
.llm-connected-bar { display: flex; align-items: center; gap: 8px; }
.llm-connected-bar.hidden { display: none; }
.llm-reconnect-btn { height: 26px; border-radius: 6px; border: 1px solid #d9d9d9; background: #fff; font-size: 12px; color: #666; cursor: pointer; padding: 0 10px; }
.llm-reconnect-btn:hover { border-color: #da2634; color: #da2634; }

/* 思考动画 */
.llm-thinking { display: flex; align-items: center; gap: 4px; min-height: 24px; }
.llm-thinking .dot { width: 6px; height: 6px; border-radius: 50%; background: #98a2b3; animation: llmBounce 1.2s infinite ease-in-out; }
.llm-thinking .dot:nth-child(2) { animation-delay: .15s; }
.llm-thinking .dot:nth-child(3) { animation-delay: .3s; }
@keyframes llmBounce { 0%, 60%, 100% { transform: translateY(0); opacity: .4; } 30% { transform: translateY(-6px); opacity: 1; } }

/* 打字机光标 */
.llm-cursor { display: inline-block; width: 2px; height: 14px; background: #da2634; margin-left: 1px; vertical-align: text-bottom; animation: llmBlink .8s infinite; }
@keyframes llmBlink { 50% { opacity: 0; } }

/* real 抽屉头部布局调整 */
#aiDrawerReal .ai-drawer-header-inner { gap: 4px; flex-wrap: nowrap; }
#aiDrawerReal .ai-drawer-header-inner h3 { white-space: nowrap; }

