node-red-contrib-knx-ultimate 6.3.25 → 6.3.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -1
- package/examples/KNX AI - Conversational Control with Confirmation.json +4 -2
- package/examples/KNX AI - Summary Anomalies and Ask.json +4 -0
- package/examples/KNX AI - Telegrambot Direct Chat.json +7 -5
- package/nodes/knxUltimateAI.html +310 -124
- package/nodes/knxUltimateAI.js +1742 -264
- package/nodes/locales/de/knxUltimateAI.html +33 -7
- package/nodes/locales/de/knxUltimateAI.json +34 -15
- package/nodes/locales/en/knxUltimateAI.html +33 -7
- package/nodes/locales/en/knxUltimateAI.json +34 -15
- package/nodes/locales/es/knxUltimateAI.html +33 -7
- package/nodes/locales/es/knxUltimateAI.json +34 -15
- package/nodes/locales/fr/knxUltimateAI.html +33 -7
- package/nodes/locales/fr/knxUltimateAI.json +34 -15
- package/nodes/locales/it/knxUltimateAI.html +33 -7
- package/nodes/locales/it/knxUltimateAI.json +34 -15
- package/nodes/locales/zh-CN/knxUltimateAI.html +33 -7
- package/nodes/locales/zh-CN/knxUltimateAI.json +34 -15
- package/nodes/plugins/knxUltimateAI-vue/assets/app.css +1 -1
- package/nodes/plugins/knxUltimateAI-vue/assets/app.js +4 -4
- package/nodes/utils/knxAiTelegramVoice.js +475 -0
- package/nodes/utils/knxAiWebAccess.js +631 -0
- package/package.json +1 -1
- package/resources/KNXAIChatAdapterMappings.js +96 -2
|
@@ -1,16 +1,33 @@
|
|
|
1
1
|
<script type="text/markdown" data-help-name="knxUltimateAI">
|
|
2
2
|
此节点会监听所选 KNX Ultimate 网关上的**所有 KNX 电报**,生成流量统计、检测异常,并可选调用 LLM。
|
|
3
3
|
|
|
4
|
-
编辑器使用两个水平标签页:**AI
|
|
4
|
+
编辑器使用两个水平标签页:**AI 助手**包含配置、知识/上下文以及提供商限制;**对话与家庭**包含聊天输入/输出端口、主动家庭和受限记忆。
|
|
5
5
|
|
|
6
6
|
## 输出
|
|
7
7
|
1. **摘要/统计**(`msg.payload` 为 JSON)
|
|
8
8
|
2. **异常**(`msg.payload` 为 JSON)
|
|
9
9
|
3. **AI 助手**(`msg.payload` 为文本,包含 `msg.summary`)
|
|
10
10
|
4. **KNX 操作**(每个通过验证的读取或写入输出一条 Universal Mode 消息)
|
|
11
|
+
5. **TTS Ultimate**(模型每选择一段语音播报,就输出一条播报消息)
|
|
11
12
|
|
|
12
13
|
输出 3 和输出 4 发出的每条消息还会在 `msg.inputMessage` 中包含原始输入消息的副本。因此,原始 payload、topic、聊天元数据及其他输入属性都可供后续节点使用。克隆或输出错误会被捕获并报告,不会传播到 Node-RED 运行时。
|
|
13
14
|
|
|
15
|
+
### Setup Doctor 与安全首次使用
|
|
16
|
+
自动 **Setup Doctor** 会检查所选网关和 ETS 导入、AI 是否启用、提供商、模型和 API 密钥、提供商连通性、Flow 连线、已检测摄像头以及可选的 TTS Ultimate 连接。它的免费提供商预检仅调用模型列表端点:绝不发送聊天请求,也不消耗推理 token。摄像头和 TTS 均为可选项,不使用它们不会降低核心就绪度。
|
|
17
|
+
|
|
18
|
+
设备清单会显示唯一 KNX 组地址信号的精确数量、ETS 区域/组以及逻辑功能的估算数量。它不会声称物理设备数量,因为无法从 ETS CSV 中可靠推导该数量。Setup Doctor 读取最近一次已部署的 Flow;因此,更改提供商、模型、预设、网关或连线后,必须先部署,再点击**刷新**重新检查。
|
|
19
|
+
|
|
20
|
+
从聊天发送 `/start` 或 `/help`,即可在聊天输出(输出 3)收到确定性且已本地化的欢迎消息,其中包含个性化的安装统计和最多三条安全建议。此引导过程不调用 LLM,不读写 KNX,也不生成 TTS。使用 Telegram 预设时,建议会显示为回复键盘按钮,仅在用户明确选择或发送其中一条后才会执行。在用户明确选择后,初始建议可在需要时执行精确的 KNX 读取;KNX 写入和例程、摄像头操作、TTS、持久记忆更改以及 GA 角色学习仍会被禁止。
|
|
21
|
+
|
|
22
|
+
### Web 智能
|
|
23
|
+
Web 访问默认关闭。启用**允许 AI 使用 Web**后,对话模型可直接根据当前请求选择结构化 Web 工具;不使用关键词、特定主题逻辑或意图分类器。每个用户回合或主动检查周期最多执行三次 Web 操作。所有真实外部 Web 操作共享已配置的滚动小时预算。
|
|
24
|
+
|
|
25
|
+
**允许主动 Web 检查**是独立授权。它还要求用户在 **AI 教育**中编写明确指令,遵守已配置的最短间隔,并且只有在 KNX AI 从至少一次普通聊天请求中记住接收方后才会启动。缺少任一授权时,都不会在后台执行 Web 操作。
|
|
26
|
+
|
|
27
|
+
每条基于 Web 的回答都包含由运行时验证的引用,其中包括已清理的来源 URL 和检索时间,并在可用时提供发布时间。外部内容是不受信任的数据,绝不是指令,也不能取代助手规则或权限。仅接受大小受限的公开 HTTPS 资源;私有、本地、链路本地及云元数据目标、不安全重定向、已认证浏览和 Cookie 都会被阻止。如果无法验证任何来源,KNX AI 会说明此限制,而不会生成无来源的回答。
|
|
28
|
+
|
|
29
|
+
获得已验证的 Web 结果后,如果当前聊天或 AI 教育已授权,模型可组合其他已启用工具。Web 访问绝不会扩大权限:摄像头、TTS 和记忆的可用性,以及 KNX 读写、本地 ETS/DPT 验证和已配置的 KNX 写入确认机制都保持不变。Web 请求会向外部网站或搜索服务公开查询内容及本服务器的公网 IP;KNX/ETS 数据、摄像头内容、聊天标识符、已学习记忆和凭据绝不会被自动加入。
|
|
30
|
+
|
|
14
31
|
## 命令(输入)
|
|
15
32
|
发送 `msg.topic`:
|
|
16
33
|
- `summary`(或空):立即输出摘要
|
|
@@ -43,11 +60,15 @@ Canvas 上的节点状态专门用于显示最近收到的请求,以及 LLM
|
|
|
43
60
|
### 用于聊天按钮的确认请求
|
|
44
61
|
计划等待确认时,输出 3 包含 `msg.knxAi.confirmationRequest`。该对象包括 `required`、`status`、`sessionId`、`expiresAt`、`commandCount`,以及 `actions` 中的两个项目。使用 `action.label` 作为 Telegram 按钮文本,使用 `action.callbackData` 作为回调,并将 `action.message` 发送回 KNX AI,即可在无需输入文本的情况下确认或取消。
|
|
45
62
|
|
|
46
|
-
###
|
|
47
|
-
|
|
63
|
+
### 输入/输出消息适配器
|
|
64
|
+
**聊天输入/输出端口**部分从 `resources/KNXAIChatAdapterMappings.js` 加载可选映射。选择适配器会在内部安装两段预定义的同步 JavaScript 映射:一段在 KNX AI 处理输入前运行,另一段在输出 3 发出消息前运行。这些映射在编辑器中始终保持隐藏。语法和执行错误会被捕获并报告,不会停止 Node-RED。
|
|
48
65
|
|
|
49
66
|
随附的 **windkh/node-red-contrib-telegrambot** 预设遵循该包的 receiver/sender 消息约定。把 `telegram receiver` 直接连接到 KNX AI,并把输出 3 直接连接到 `telegram sender`。确认操作使用一次性 Telegram 回复键盘:点击**确认**或**取消**后,会通过同一个 receiver 返回普通的本地化消息,因此不需要 `telegram event` 或 callback 连线。旧的 `callback_query` 消息仍可接受。输入映射会提取 `msg.payload.content`、`msg.payload.chatId` 和 Telegram 语言;输出映射会创建所需的 `msg.payload.chatId`、`type` 和 `content`,并在写入等待确认时从 `msg.knxAi.confirmationRequest` 添加 `options.reply_markup`。Telegram 包仍是独立的可选依赖项。
|
|
50
67
|
|
|
68
|
+
使用此预设时,只有将 **Provider** 设置为 **OpenAI-compatible**,Telegram 语音消息(`msg.payload.type = "voice"`)才会被自动处理。KNX AI 会在下载任何内容前验证提供商,直接复用其 **Endpoint URL** 和 **API key**,并从同一连接派生 `/audio/transcriptions` 与 `/audio/speech`。包含令牌的 `msg.payload.weblink` 仅用于受限下载,并会在消息到达输出或 LLM 之前删除。OGG/Opus 输入使用内置默认值 `gpt-4o-mini-transcribe` 转录;成功请求会收到由 `gpt-4o-mini-tts` 和 `alloy` 生成的原生 Telegram OGG/Opus 回复,同时保留文字说明和确认键盘。如果选择了其他提供商,用户会收到本地化提示,要求改选 OpenAI-compatible 或发送文字。如果语音合成不可用、失败或超过语音限制,则发送完整文字回复。下载的音频和生成的回复文本都会发送到同一个所选提供商。文字消息、照片以及较早保存的 Telegram 映射仍保持兼容。
|
|
69
|
+
|
|
70
|
+
每条原生语音回复的文字说明都会以本地化的 **AI 生成的语音** 提示开头,Telegram 收件人可以看到该提示。
|
|
71
|
+
|
|
51
72
|
随附的 **RedBot / node-red-contrib-chatbot (Telegram)** 预设遵循 RedBot 的通用消息格式。将 `chatbot-telegram-receive` 直接连接到 KNX AI,并将输出 3 直接连接到 `chatbot-telegram-send`;无需单独的 callback 节点,因为 RedBot 会把内联按钮的 postback 转换成普通入站消息。输入映射读取 `transport`、`chatId`、`type`、`content` 和 Telegram 语言。输出映射保留 RedBot 的 `originalMessage`、`chat`、`api` 和 `client` 跟踪数据,然后发送 `message` payload,或发送带有确认 `postback` 操作的 `inline-buttons` payload。RedBot 仍是独立的可选依赖项。
|
|
52
73
|
|
|
53
74
|
### 自动检测的摄像机适配器
|
|
@@ -58,14 +79,14 @@ Canvas 上的节点状态专门用于显示最近收到的请求,以及 LLM
|
|
|
58
79
|
自动检测到的适配器发布的每个事件都会被标准化,并以 KNX AI 原生紧凑行格式直接追加到 `knxultimatestorage/knxai/adapter-history/<节点ID>/` 下的每日 `YYYY-MM-DD.knxctx` 文件。KNX 报文存档使用相同的紧凑格式,不经过中间 JSON 序列化。存档保留 10 天,保证超过 24 小时的历史,只保存事件元数据,不保存图像。现有 JSONL 存档不会被读取或迁移。总数涵盖所请求区间内的全部存档行;选出的详情仅是相关样本。
|
|
59
80
|
|
|
60
81
|
### 使用 TTS Ultimate 播报
|
|
61
|
-
|
|
82
|
+
将输出 5 连接到可选软件包 `node-red-contrib-tts-ultimate` 中的一个或多个 `ttsultimate` 节点。目标和分发由普通 Node-RED 连线决定;如果 TTS 节点位于另一个 Flow 标签页,请使用 Link Out/Link In。原有的 TTS 节点选择器和内部注入已被移除。输出 1–4 的位置保持不变,但升级后的 Flow 必须实际连接输出 5,语音播报才能到达 TTS Ultimate。
|
|
62
83
|
|
|
63
|
-
模型会根据当前请求、持久聊天指令和用户管理的 AI
|
|
84
|
+
模型会根据当前请求、持久聊天指令和用户管理的 AI 教育自行判断是否准备播报;系统没有播报 intent,也没有触发短语列表。KNX 数值、适配器事件、图像和存档始终是数据而不是指令,但可信的用户指导可以教会模型如何处理这些数据。输出 5 在 `msg.payload` 中发送需要朗读的准确文本,设置 `msg.topic = "knx_ai_announcement"`,并添加 `msg.knxAi.type = "tts_announcement"`、`msg.knxAi.sourceNodeId`、`msg.knxAi.sessionId` 和 `msg.knxAi.reason`。之后由 TTS Ultimate 处理播放器、语音、音量、提示音和队列。
|
|
64
85
|
|
|
65
86
|
### 聊天上下文概览
|
|
66
87
|
节点编辑器会显示一张紧凑卡片,汇总聊天可用的来源:当前 KNX 流量、ETS 语义与 Node-RED 项目、会话和家庭记忆、AI 教育及检测到的摄像机。卡片还会显示用户选择的最大运行上下文和上次聊天提示词的实际 UTF-8 大小;提供商返回输入令牌数时使用精确值,否则明确标为估算值。卡片还会列出 `knxai-chat-context.knxctx`、`knxai-home-memory.md` 和 `knxai-config-<节点-id>.json`,以及 KNX 报文归档的绝对根目录、该节点专用目录和每日文件模式 `YYYY-MM-DD.knxctx`。这些路径会在运行时根据已配置网关实际使用的数据目录解析。
|
|
67
88
|
|
|
68
|
-
模型会把 KNX 读写、摄像机适配器、TTS 播报和持久记忆作为结构化工具。它可以依据当前请求和可信的已学习指导进行语义选择与组合,而不经过语言 intent
|
|
89
|
+
模型会把 KNX 读写、摄像机适配器、TTS 播报和持久记忆作为结构化工具。它可以依据当前请求和可信的已学习指导进行语义选择与组合,而不经过语言 intent 路由。运行时只验证工具参数、摄像机适配器可用性和安全边界;KNX 写入仍保留本地 ETS/DPT 校验和已配置的确认步骤。
|
|
69
90
|
|
|
70
91
|
### 编辑和备份聊天学习
|
|
71
92
|
Node-RED 的 KNX AI 配置中,**对话与家庭**选项卡包含**打开 AI 聊天学习**按钮;它会为当前节点直接打开 Vue Web UI 中的此编辑器。
|
|
@@ -127,10 +148,15 @@ Node-RED 的 KNX AI 配置中,**对话与家庭**选项卡包含**打开 AI
|
|
|
127
148
|
- **Endpoint URL**:chat/completions 接口 URL。
|
|
128
149
|
- **API key**:API Key(本地 Ollama 可不填;Bionic LM Studio 在未启用服务器身份验证时也可不填)。
|
|
129
150
|
- **Model**:模型 ID/名称。
|
|
151
|
+
- **允许 AI 使用 Web**:默认关闭。允许模型按语义选择通用 Web 工具,并返回已验证、已引用的来源。
|
|
152
|
+
- **允许主动 Web 检查**:用于后台检查的独立授权;还需要用户在 **AI 教育**中编写明确指令。
|
|
153
|
+
- **主动检查的最短间隔**:主动检查周期之间的最短时间;不会延迟用户活动回合中请求的 Web 操作。
|
|
154
|
+
- **每小时最多 Web 调用次数**:互动和主动 Web 操作共享的滚动预算。每个回合或周期最多使用三次操作。
|
|
155
|
+
- **Telegram 语音**:仅在选择 **OpenAI-compatible** 提供商时可用。它会自动复用该提供商的端点和 API 密钥,并使用内置默认值 `gpt-4o-mini-transcribe`、`gpt-4o-mini-tts` 和 `alloy`;不再提供单独的语音设置。
|
|
130
156
|
- **聊天模型兼容性**:所选模型必须支持已配置的 Chat Completions 端点。刷新模型列表时,会排除仅支持旧版 completions 的模型,例如 `gpt-3.5-turbo-instruct`。如果提供商拒绝自定义 temperature 值或令牌限制参数,KNX AI 会仅移除或替换不兼容字段后重试。
|
|
131
157
|
- **允许 AI 读取 KNX 状态并控制执行器**:启用输出 4,默认关闭。可以读取 ETS 目录中的精确对象;仅接受写入明确标记为 `command` 的对象。未知、DPT 不匹配、无效或数量过多的操作,以及向状态或中性对象的写入,都会在本地被拒绝。
|
|
132
158
|
- **发送 KNX 命令前请求确认**:默认启用。先显示已验证的修改,在同一聊天会话确认前不会发送任何 KNX 命令。有命令等待确认时,回复始终会使用当前请求的语言附加准确的确认或取消说明。命令会在输出前再次验证。
|
|
133
|
-
-
|
|
159
|
+
- **输入/输出消息适配器**:默认为**无适配器**。选择后会加载预定义的输入和输出映射;两者在编辑器中始终保持隐藏。
|
|
134
160
|
- **AI 教育**:仅由用户管理的权威指导,AI 可以读取但永远不能修改。主动通知及其条件、持续时间、静默时段和重复频率只能在这里定义。
|
|
135
161
|
- 软件包附带的帮助、README、更新日志、Wiki 和示例片段不会加入 Telegram、RedBot 或自定义 CHAT 的提示词;仅网页助手在回答软件包技术问题时仍可使用这些内容。
|
|
136
162
|
- **Refresh** 按钮:请求 provider 并加载可用模型 ID。加载期间图标会旋转;成功完成时不会显示额外消息。
|
|
@@ -4,12 +4,14 @@
|
|
|
4
4
|
"sections": {
|
|
5
5
|
"groupAssistant": "AI 助手",
|
|
6
6
|
"groupChatHome": "对话与家庭",
|
|
7
|
-
"
|
|
7
|
+
"setupDoctor": "Setup Doctor",
|
|
8
|
+
"webIntelligence": "Web 智能",
|
|
9
|
+
"detectedAdapters": "已检测并用于聊天的兼容节点",
|
|
8
10
|
"chatContextOverview": "聊天上下文概览",
|
|
9
11
|
"chatLearning": "AI 聊天学习",
|
|
10
12
|
"quickSetup": "助手配置",
|
|
11
13
|
"llmConnection": "AI 助手连接",
|
|
12
|
-
"chatAdapter": "
|
|
14
|
+
"chatAdapter": "聊天输入/输出端口",
|
|
13
15
|
"homeIntelligence": "AI 教育与记忆",
|
|
14
16
|
"advanced": "提供商与限制"
|
|
15
17
|
},
|
|
@@ -27,10 +29,13 @@
|
|
|
27
29
|
"llmIncludeRaw": "Include raw payload hex",
|
|
28
30
|
"llmAllowKnxCommands": "允许 AI 读取 KNX 状态并控制执行器",
|
|
29
31
|
"llmRequireCommandConfirmation": "发送 KNX 命令前请求确认",
|
|
30
|
-
"
|
|
32
|
+
"webAccessEnabled": "允许 AI 使用 Web",
|
|
33
|
+
"webProactiveEnabled": "允许主动 Web 检查",
|
|
34
|
+
"webProactiveIntervalMinutes": "主动检查的最短间隔",
|
|
35
|
+
"webMaxCallsPerHour": "每小时最多 Web 调用次数",
|
|
36
|
+
"chatAdapterPreset": "输入/输出消息适配器",
|
|
31
37
|
"chatInputCode": "输入映射(聊天 → KNX AI)",
|
|
32
38
|
"chatOutputCode": "输出映射(KNX AI → 聊天)",
|
|
33
|
-
"ttsUltimateNodeId": "用于播报的 TTS Ultimate 节点",
|
|
34
39
|
"aiEducation": "AI 教育(由用户管理)",
|
|
35
40
|
"llmIncludeDocsSnippets": "Include documentation snippets (help/README/examples)"
|
|
36
41
|
},
|
|
@@ -38,7 +43,8 @@
|
|
|
38
43
|
"summary": "摘要/统计",
|
|
39
44
|
"anomalies": "异常",
|
|
40
45
|
"assistant": "AI 助手",
|
|
41
|
-
"knxCommands": "KNX 操作"
|
|
46
|
+
"knxCommands": "KNX 操作",
|
|
47
|
+
"ttsUltimate": "TTS Ultimate 播报"
|
|
42
48
|
},
|
|
43
49
|
"selectlists": {
|
|
44
50
|
"llmProvider": {
|
|
@@ -55,12 +61,28 @@
|
|
|
55
61
|
"chatAdapter": {
|
|
56
62
|
"none": "无适配器"
|
|
57
63
|
},
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"
|
|
64
|
+
"webProactiveInterval": {
|
|
65
|
+
"5": "5 分钟",
|
|
66
|
+
"10": "10 分钟",
|
|
67
|
+
"15": "15 分钟",
|
|
68
|
+
"30": "30 分钟",
|
|
69
|
+
"60": "1 小时",
|
|
70
|
+
"180": "3 小时"
|
|
61
71
|
}
|
|
62
72
|
},
|
|
63
73
|
"messages": {
|
|
74
|
+
"setupDoctorLoading": "正在分析此安装…",
|
|
75
|
+
"setupDoctorUnavailable": "Setup Doctor 暂时不可用。",
|
|
76
|
+
"setupDoctorPromptsTitle": "试用你的安装",
|
|
77
|
+
"setupDoctorPromptsHint": "每条建议都会使用个性化且安全的问题打开 Web 助手。不会自动执行任何操作。",
|
|
78
|
+
"setupDoctorDeployHint": "Setup Doctor 读取最近一次部署的流程。请先部署编辑器更改,再重新检查。",
|
|
79
|
+
"setupDoctorPass": "正常",
|
|
80
|
+
"setupDoctorWarn": "检查",
|
|
81
|
+
"setupDoctorFail": "修复",
|
|
82
|
+
"setupDoctorInfo": "可选",
|
|
83
|
+
"webAccessHint": "模型按语义选择这个通用 Web 工具;不使用关键词或意图分类器。外部网站和搜索服务会收到查询及本服务器的公网 IP;私有 KNX、摄像头、聊天、记忆和凭据数据绝不会被自动加入。",
|
|
84
|
+
"webProactiveHint": "此独立授权还需要 AI 教育中的明确指令,以及从一次普通聊天请求中记住的接收方。模型决定检查什么;其他工具权限和 KNX 确认规则仍然适用。",
|
|
85
|
+
"webBudgetHint": "滚动预算统计聊天和主动检查产生的真实外部调用。",
|
|
64
86
|
"lmStudioContextAvailable": "模型最大上下文",
|
|
65
87
|
"lmStudioContextLoading": "正在检查模型的当前上下文",
|
|
66
88
|
"lmStudioContextInactive": "模型未运行;首次请求时将使用 Bionic 默认值",
|
|
@@ -76,16 +98,13 @@
|
|
|
76
98
|
"installOllamaModelFailed": "Failed to install Ollama model",
|
|
77
99
|
"ollamaInstallSteps": "1) Open the model library and copy the model name (for example llama3.1). 2) Put the name in the Model field and click Install it.",
|
|
78
100
|
"ollamaStartedAuto": "Ollama server started automatically.",
|
|
79
|
-
"detectedAdaptersLoading": "
|
|
80
|
-
"detectedAdaptersNone": "
|
|
81
|
-
"detectedAdaptersUnavailable": "
|
|
101
|
+
"detectedAdaptersLoading": "正在检测已安装的兼容节点…",
|
|
102
|
+
"detectedAdaptersNone": "未检测到兼容节点。",
|
|
103
|
+
"detectedAdaptersUnavailable": "兼容节点检测暂时不可用。",
|
|
82
104
|
"detectedAdapterDetected": "已检测",
|
|
83
105
|
"detectedAdapterControllers": "控制器",
|
|
84
106
|
"detectedAdapterCameras": "摄像机",
|
|
85
107
|
"detectedAdapterNodes": "节点",
|
|
86
|
-
"ttsUltimateUnknownFlow": "未命名 Flow",
|
|
87
|
-
"ttsUltimateUnavailable": "TTS Ultimate 节点不可用",
|
|
88
|
-
"ttsUltimateHint": "聊天中的明确播报请求会直接发送到所选节点,无需在 Flow 中额外连线。",
|
|
89
108
|
"chatContextLoading": "正在加载聊天上下文摘要…",
|
|
90
109
|
"chatContextUnavailable": "聊天上下文摘要暂时不可用。",
|
|
91
110
|
"chatLearningOpenHint": "直接在 Web UI 中打开共享 CHAT 学习编辑器,以查看、编辑、复制或备份其持久文件。",
|
|
@@ -106,7 +125,6 @@
|
|
|
106
125
|
"chatContextSourceEtsProject": "ETS 语义和完整的 Node-RED 项目清单。",
|
|
107
126
|
"chatContextSourceMemoryEducation": "会话上下文、AI 教育和有界家庭记忆。",
|
|
108
127
|
"chatContextSourceCameras": "检测到的摄像机及其可用功能。",
|
|
109
|
-
"chatContextSourceTtsUltimate": "已选择用于播报的 TTS Ultimate 节点。",
|
|
110
128
|
"chatContextSourceBadge": "来源",
|
|
111
129
|
"chatContextFileChatContext": "持久化对话轮次、指令和摄像机通知规则。",
|
|
112
130
|
"chatContextFileHomeMemory": "AI 教育和有界的家庭学习记忆。",
|
|
@@ -179,6 +197,7 @@
|
|
|
179
197
|
}
|
|
180
198
|
},
|
|
181
199
|
"buttons": {
|
|
200
|
+
"refreshSetupDoctor": "重新检查",
|
|
182
201
|
"installOllamaModel": "2) Install it",
|
|
183
202
|
"ollamaLibrary": "Model library",
|
|
184
203
|
"downloadOllamaModel": "1) Download model",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.page-shell[data-v-4f1ccfd9]{--sidebar-expanded-width: 240px;--sidebar-collapsed-width: 60px;--sidebar-current-width: var(--sidebar-expanded-width);width:min(1600px,calc(100% - 24px));min-height:calc(100vh - 24px);margin:12px auto;display:grid;grid-template-columns:var(--sidebar-current-width) minmax(0,1fr);gap:16px;align-items:stretch;transition:grid-template-columns .26s ease}.page-shell.sidebar-collapsed[data-v-4f1ccfd9]{--sidebar-current-width: var(--sidebar-collapsed-width)}.m-header[data-v-4f1ccfd9]{position:fixed;top:0;left:0;right:0;z-index:210;display:none;align-items:center;justify-content:space-between;gap:12px;height:62px;padding:0 12px 0 14px;background:var(--hb-primary-dark);color:#fff;border-bottom:1px solid rgba(255,255,255,.12)}.m-header-brand[data-v-4f1ccfd9]{display:inline-flex;align-items:center;gap:10px}.m-logo-mark[data-v-4f1ccfd9]{width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;border:1px solid rgba(255,255,255,.4);border-radius:var(--soft-radius);font-size:14px;font-weight:800;color:#fff}.hb-logo-text-mobile[data-v-4f1ccfd9]{font-size:21px;font-weight:700;letter-spacing:.02em}.hamburger-icon[data-v-4f1ccfd9]{position:relative;width:30px;height:22px;border:0;background:transparent;color:inherit;cursor:pointer}.hamburger-icon span[data-v-4f1ccfd9]{display:block;position:absolute;left:0;width:100%;height:2px;border-radius:2px;background:#fff;transition:.24s ease}.hamburger-icon span[data-v-4f1ccfd9]:nth-child(1){top:0}.hamburger-icon span[data-v-4f1ccfd9]:nth-child(2),.hamburger-icon span[data-v-4f1ccfd9]:nth-child(3){top:9px}.hamburger-icon span[data-v-4f1ccfd9]:nth-child(4){top:18px}.hamburger-icon-cross span[data-v-4f1ccfd9]:nth-child(1),.hamburger-icon-cross span[data-v-4f1ccfd9]:nth-child(4){left:50%;width:0}.hamburger-icon-cross span[data-v-4f1ccfd9]:nth-child(2){transform:rotate(45deg)}.hamburger-icon-cross span[data-v-4f1ccfd9]:nth-child(3){transform:rotate(-45deg)}.sidebar-overlay[data-v-4f1ccfd9]{position:fixed;inset:0;z-index:180;border:0;background:#090c137a}[data-v-4f1ccfd9] *{--soft-radius: 4px;--hb-primary: #ff9800;--hb-primary-dark: #ef6c00}.app-sidebar[data-v-4f1ccfd9]{display:flex;flex-direction:column;gap:14px;padding:18px 16px 16px;border-radius:var(--soft-radius);background:var(--hb-primary-dark);box-shadow:0 26px 60px #080a1057;color:#f6f8fb;overflow:hidden}.sidebar-brand-wrap[data-v-4f1ccfd9]{display:grid;grid-template-columns:34px minmax(0,1fr) 28px;align-items:start;gap:10px}.sidebar-brand-mark[data-v-4f1ccfd9]{width:34px;height:34px;display:inline-flex;align-items:center;justify-content:center;border:1px solid rgba(255,255,255,.35);border-radius:var(--soft-radius);font-weight:800;font-size:15px;color:#fff}.sidebar-collapse-toggle[data-v-4f1ccfd9]{width:28px;min-width:28px;height:28px;padding:0;border:1px solid rgba(255,255,255,.24);border-radius:var(--soft-radius);background:#ffffff14;color:#f4f8ff;cursor:pointer}.sidebar-collapse-icon[data-v-4f1ccfd9]{display:inline-flex;align-items:center;justify-content:center;width:100%;font-size:18px;line-height:1;font-weight:700}.sidebar-collapse-toggle[data-v-4f1ccfd9]:hover{background:#ffffff29}.workspace-shell[data-v-4f1ccfd9]{min-width:0;padding:10px;border-radius:var(--soft-radius);background:#f4f4f4;box-shadow:0 24px 60px #19203024;transition:padding .2s ease}.topbar[data-v-4f1ccfd9]{padding:20px 22px 14px;border:1px solid rgba(160,170,186,.22);border-radius:var(--soft-radius);background:linear-gradient(180deg,#fffffffa,#f5f7fbf0);box-shadow:0 12px 30px #1a202c14}.workspace-header[data-v-4f1ccfd9]{margin-bottom:16px}.brand[data-v-4f1ccfd9],.sidebar-brand[data-v-4f1ccfd9]{margin-bottom:6px;min-width:0}.eyebrow[data-v-4f1ccfd9]{margin:0 0 6px;color:inherit;font-size:12px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;opacity:.75}.brand h1[data-v-4f1ccfd9],.sidebar-brand h1[data-v-4f1ccfd9]{margin:0;font-size:clamp(24px,3.4vw,34px);line-height:1}.workspace-brand h2[data-v-4f1ccfd9]{margin:0;font-size:clamp(24px,3vw,32px);line-height:1.02;color:#111723}.subhead[data-v-4f1ccfd9]{max-width:860px;margin:8px 0 0;color:inherit;font-size:12px;line-height:1.4;opacity:.78}.toolbar[data-v-4f1ccfd9],.statusbar[data-v-4f1ccfd9],.tab-strip[data-v-4f1ccfd9],.checkbox[data-v-4f1ccfd9],.pill-row[data-v-4f1ccfd9],.preset-row[data-v-4f1ccfd9],.ask-row[data-v-4f1ccfd9]{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.toolbar[data-v-4f1ccfd9]{justify-content:space-between}.toolbar-cluster[data-v-4f1ccfd9],.action-cluster[data-v-4f1ccfd9]{display:inline-flex;flex-wrap:wrap;gap:8px;align-items:center;padding:0;border:0;border-radius:0;background:transparent;box-shadow:none}.workspace-toolbar[data-v-4f1ccfd9]{margin-top:16px}.primary-button[data-v-4f1ccfd9],.preset-button[data-v-4f1ccfd9],.danger-button[data-v-4f1ccfd9],.primary-link[data-v-4f1ccfd9],.secondary-button[data-v-4f1ccfd9],.tab-button[data-v-4f1ccfd9]{border:1px solid var(--line);border-radius:var(--soft-radius);background:#607d8b;color:#fff;text-decoration:none;font-size:12px;font-weight:700;padding:8px 12px;transition:.18s ease}.primary-button[data-v-4f1ccfd9],.primary-link[data-v-4f1ccfd9],.tab-button.active[data-v-4f1ccfd9]{border-color:transparent;background:var(--hb-primary);color:#fff}.secondary-button[data-v-4f1ccfd9],.preset-button[data-v-4f1ccfd9],.tab-button[data-v-4f1ccfd9]{border-color:transparent;background:#607d8b;color:#fff}.danger-button[data-v-4f1ccfd9]{border-color:transparent;background:#d32f2f;color:#fff}.preset-button[data-v-4f1ccfd9]:hover,.danger-button[data-v-4f1ccfd9]:hover,.secondary-button[data-v-4f1ccfd9]:hover,.tab-button[data-v-4f1ccfd9]:hover{background:#546e7a;border-color:transparent}.danger-button[data-v-4f1ccfd9]:hover{background:#c62828;border-color:transparent}.new-button[data-v-4f1ccfd9]{background:linear-gradient(180deg,#62c27a,#43a85f);border-color:transparent;color:#fff}.new-button[data-v-4f1ccfd9]:hover{background:linear-gradient(180deg,#74cf8b,#4fb46b);border-color:transparent}.primary-button[data-v-4f1ccfd9]:hover,.primary-link[data-v-4f1ccfd9]:hover,.tab-button.active[data-v-4f1ccfd9]:hover{background:#e68900;border-color:transparent}.primary-button[data-v-4f1ccfd9]:disabled,.preset-button[data-v-4f1ccfd9]:disabled,.danger-button[data-v-4f1ccfd9]:disabled,.secondary-button[data-v-4f1ccfd9]:disabled{opacity:.6;cursor:not-allowed}.hidden-file-input[data-v-4f1ccfd9]{display:none}.node-select[data-v-4f1ccfd9]{min-width:min(360px,100%)}.sidebar-select[data-v-4f1ccfd9]{min-width:0;width:100%;border-color:#ffffff14;background:#ffffff0f;color:#f6f8fb}.sidebar-select option[data-v-4f1ccfd9]{color:#0f1520}.node-select[data-v-4f1ccfd9],.checkbox[data-v-4f1ccfd9],.summary-pre[data-v-4f1ccfd9],.chat-log[data-v-4f1ccfd9],.anomaly-card pre[data-v-4f1ccfd9]{border:1px solid var(--line);border-radius:var(--soft-radius);background:#ffffffe0}.node-select[data-v-4f1ccfd9]{padding:8px 10px;color:var(--text);font-size:12px}.checkbox[data-v-4f1ccfd9]{padding:8px 10px;gap:8px;font-size:12px}.sidebar-checkbox[data-v-4f1ccfd9]{border-color:#ffffff14;background:#ffffff0f;color:#eef3f9}.sidebar-panel[data-v-4f1ccfd9]{padding:12px;border:1px solid rgba(255,255,255,.14);border-radius:var(--soft-radius);background:#ffffff0d}.sidebar-field[data-v-4f1ccfd9]{display:flex;flex-direction:column;gap:6px;font-size:11px;font-weight:800;color:#f6f8fce0}.sidebar-nav[data-v-4f1ccfd9]{display:flex;flex-direction:column;gap:0}.sidebar-nav .tab-button[data-v-4f1ccfd9]{width:100%;display:flex;align-items:center;justify-content:flex-start;text-align:left;padding:15px 10px;border-radius:0;border-color:transparent;background:transparent;color:#edf1f8;font-size:17px;font-weight:400;line-height:1.2;transition:.2s}.sidebar-nav-icon[data-v-4f1ccfd9]{flex:0 0 38px;width:38px;min-width:38px;display:flex;align-items:center;justify-content:center}.sidebar-nav-svg[data-v-4f1ccfd9]{width:17px;height:17px;fill:currentColor}.sidebar-nav-copy[data-v-4f1ccfd9]{flex:1;min-width:0;overflow:hidden;white-space:normal;line-height:1.15;padding-left:10px}.sidebar-nav .sidebar-nav-child[data-v-4f1ccfd9]{width:100%;margin-left:0}.sidebar-nav .tab-button.active[data-v-4f1ccfd9]{background:transparent;color:#fff}.sidebar-nav .tab-button[data-v-4f1ccfd9]:hover{background:var(--hb-primary)}.sidebar-nav .tab-button[data-v-4f1ccfd9]:disabled{opacity:.42;cursor:not-allowed;background:#ffffff0d;color:#edf1f89e}.sidebar-nav .tab-button[data-v-4f1ccfd9]:disabled:hover{background:#ffffff0d}.sidebar-nav .tab-button:disabled .sidebar-nav-icon[data-v-4f1ccfd9]{color:#edf1f89e}.sidebar-nav .tab-button.active .sidebar-nav-icon[data-v-4f1ccfd9]{color:var(--hb-primary)}.sidebar-nav .tab-button.active:hover .sidebar-nav-icon[data-v-4f1ccfd9]{color:#fff}.sidebar-nav-title[data-v-4f1ccfd9]{display:block;font-size:17px;font-weight:400}.sidebar-nav-meta[data-v-4f1ccfd9]{display:block;margin-top:3px;font-size:11px;opacity:.72;font-weight:600}.page-shell.sidebar-collapsed .sidebar-panel[data-v-4f1ccfd9],.page-shell.sidebar-collapsed .sidebar-footer[data-v-4f1ccfd9],.page-shell.sidebar-collapsed .sidebar-brand .eyebrow[data-v-4f1ccfd9],.page-shell.sidebar-collapsed .sidebar-brand h1[data-v-4f1ccfd9],.page-shell.sidebar-collapsed .sidebar-brand .subhead[data-v-4f1ccfd9]{display:none}.page-shell.sidebar-collapsed .sidebar-brand-wrap[data-v-4f1ccfd9]{grid-template-columns:1fr;justify-items:center}.page-shell.sidebar-collapsed .app-sidebar[data-v-4f1ccfd9]{align-items:center;padding:14px 10px}.page-shell.sidebar-collapsed .sidebar-collapse-toggle[data-v-4f1ccfd9]{margin-top:4px}.page-shell.sidebar-collapsed .sidebar-nav .tab-button[data-v-4f1ccfd9]{justify-content:center;padding:15px 10px}.page-shell.sidebar-collapsed .sidebar-nav .sidebar-nav-child[data-v-4f1ccfd9]{width:100%;margin-left:0}.page-shell.sidebar-collapsed .sidebar-nav-copy[data-v-4f1ccfd9]{display:none}.sidebar-actions[data-v-4f1ccfd9]{display:flex;flex-direction:column;gap:14px}.sidebar-section-toggle[data-v-4f1ccfd9]{width:100%;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:0;border:0;background:transparent;color:#f6f8fb;text-align:left;font:inherit}.sidebar-section-toggle strong[data-v-4f1ccfd9]{display:block;font-size:13px;font-weight:800}.sidebar-section-toggle small[data-v-4f1ccfd9]{display:block;margin-top:3px;font-size:11px;opacity:.72}.sidebar-test-results[data-v-4f1ccfd9]{display:flex;flex-direction:column;gap:10px}.sidebar-results-list[data-v-4f1ccfd9]{display:flex;flex-direction:column;gap:8px;max-height:320px;overflow:auto;padding-right:2px}.sidebar-result-row[data-v-4f1ccfd9]{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:stretch}.sidebar-result-delete-button[data-v-4f1ccfd9]{width:74px;min-width:74px;padding:10px 8px;border:1px solid rgba(136,18,26,.88);background:linear-gradient(180deg,#b72b2bfa,#941717fa);color:#fff;font:inherit;font-size:11px;font-weight:800;letter-spacing:.01em}.sidebar-result-delete-button[data-v-4f1ccfd9]:hover:not(:disabled){background:linear-gradient(180deg,#c73030,#a01b1b)}.sidebar-result-delete-button[data-v-4f1ccfd9]:disabled{opacity:.72;cursor:wait}.sidebar-result-item[data-v-4f1ccfd9]{display:flex;flex-direction:column;justify-content:center;width:100%;min-height:78px;text-align:left;border-color:#ffffff1f;background:#ffffff14;color:#edf1f8;transition:border-color .18s ease,background .18s ease,box-shadow .18s ease}.sidebar-result-item.active[data-v-4f1ccfd9]{border-color:#ffffff57;background:linear-gradient(180deg,#6877b3a3,#45517cb8);box-shadow:inset 0 0 0 1px #ffffff14}.sidebar-result-item.running[data-v-4f1ccfd9]{box-shadow:inset 0 0 0 1px #f0b3228c}.sidebar-result-head[data-v-4f1ccfd9]{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%}.sidebar-result-head strong[data-v-4f1ccfd9]{font-size:12px;font-weight:800}.sidebar-result-title[data-v-4f1ccfd9]{display:inline-flex;align-items:center;gap:8px;min-width:0}.sidebar-result-item .area-list-meta[data-v-4f1ccfd9],.sidebar-result-item .area-list-tags[data-v-4f1ccfd9]{color:#edf1f8c7}.sidebar-result-status[data-v-4f1ccfd9]{display:inline-flex;align-items:center;justify-content:flex-start;min-width:0;padding:0;border:0;background:transparent;color:#fff;font-size:11px;font-weight:800;text-transform:none}.sidebar-result-status.status-pass[data-v-4f1ccfd9]{color:#8fe0a8}.sidebar-result-status.status-warn[data-v-4f1ccfd9]{color:#ffd17a}.sidebar-result-status.status-fail[data-v-4f1ccfd9]{color:#ffb9c3}.sidebar-empty-state[data-v-4f1ccfd9]{margin:0;color:#f6f8fcc2}.results-page-layout[data-v-4f1ccfd9]{grid-template-columns:minmax(320px,420px) minmax(0,1fr)}.results-page-list[data-v-4f1ccfd9]{max-height:min(68vh,760px);padding-right:4px}.results-page-list .sidebar-result-item[data-v-4f1ccfd9]{border-color:#7e889a4d;background:linear-gradient(180deg,#fdfeff,#f2f7fd);color:#243042}.results-page-list .sidebar-result-item.active[data-v-4f1ccfd9]{border-color:#ef6c005c;background:linear-gradient(180deg,#fff7e9,#ffeccf);box-shadow:inset 0 0 0 1px #ef6c001f}.results-page-list .sidebar-result-item.running[data-v-4f1ccfd9]{box-shadow:inset 0 0 0 1px #ff980080}.results-page-list .sidebar-result-item .area-list-meta[data-v-4f1ccfd9],.results-page-list .sidebar-result-item .area-list-tags[data-v-4f1ccfd9]{color:#556071}.results-page-list .sidebar-result-status[data-v-4f1ccfd9]{color:#374151}.results-page-list .sidebar-result-status.status-pass[data-v-4f1ccfd9]{color:#2f8d53}.results-page-list .sidebar-result-status.status-warn[data-v-4f1ccfd9]{color:#ad730b}.results-page-list .sidebar-result-status.status-fail[data-v-4f1ccfd9]{color:#b73845}.sidebar-action-button[data-v-4f1ccfd9]{width:100%;justify-content:center}.sidebar-footer[data-v-4f1ccfd9]{margin-top:auto;display:flex;flex-direction:column;gap:8px;padding-top:8px}.sidebar-doc-link[data-v-4f1ccfd9]{display:inline-flex;align-items:center;width:fit-content;color:var(--hb-primary-dark);text-decoration:none;font-size:12px;font-weight:700}.sidebar-doc-link[data-v-4f1ccfd9]:hover{text-decoration:underline}.support-link-row[data-v-4f1ccfd9]{display:flex;flex-direction:column;gap:8px}.support-link-button[data-v-4f1ccfd9]{display:flex;width:100%;justify-content:center;white-space:nowrap}.support-link-button-youtube[data-v-4f1ccfd9]{background:#cc2f2f}.support-link-button-youtube[data-v-4f1ccfd9]:hover{background:#b72727}.statusbar[data-v-4f1ccfd9]{justify-content:space-between}.status-pill[data-v-4f1ccfd9],.meta-chip[data-v-4f1ccfd9],.pill[data-v-4f1ccfd9]{display:inline-flex;align-items:center;gap:6px;border-radius:0;padding:0;border:0;background:transparent;font-size:12px;font-weight:700}.status-pill[data-v-4f1ccfd9],.meta-chip[data-v-4f1ccfd9],.pill.neutral[data-v-4f1ccfd9]{color:var(--text)}.status-pill.error[data-v-4f1ccfd9],.pill.danger[data-v-4f1ccfd9]{color:#a4333a}.status-pill-spinner[data-v-4f1ccfd9]{width:11px;height:11px;border-width:2px;border-color:#5a667a3d;border-top-color:currentColor}.pill.success[data-v-4f1ccfd9]{color:#1b7d36}.status-detail[data-v-4f1ccfd9]{color:inherit;font-size:12px;font-weight:700;opacity:.7}.content-grid[data-v-4f1ccfd9]{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:16px}.workspace-main[data-v-4f1ccfd9]{padding:0 2px 6px}.card[data-v-4f1ccfd9]{grid-column:span 6;min-height:240px;padding:15px;border:1px solid var(--line);border-radius:var(--soft-radius);background:#fffffff0;box-shadow:0 16px 34px #121c2d14}.card-summary[data-v-4f1ccfd9],.card-bus[data-v-4f1ccfd9],.card-chat[data-v-4f1ccfd9],.card-flow[data-v-4f1ccfd9],.card-areas[data-v-4f1ccfd9],.card-profiles[data-v-4f1ccfd9],.card-anomalies[data-v-4f1ccfd9]{grid-column:span 6}.card-flow[data-v-4f1ccfd9],.card-areas[data-v-4f1ccfd9],.card-profiles[data-v-4f1ccfd9],.card-settings[data-v-4f1ccfd9],.card-flow-builder[data-v-4f1ccfd9]{grid-column:span 12}.card-chat[data-v-4f1ccfd9]{grid-column:1 / -1;max-width:100%}.card-profiles[data-v-4f1ccfd9]{border-color:#54607461;background:linear-gradient(180deg,#f4f7fbfa,#e9eef4fa);box-shadow:0 18px 36px #1118271f}.card-head[data-v-4f1ccfd9]{display:flex;justify-content:space-between;gap:12px;align-items:center;margin-bottom:14px}.card-head-actions[data-v-4f1ccfd9]{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.settings-tab-strip[data-v-4f1ccfd9]{display:inline-flex;align-items:center;flex-wrap:wrap;gap:8px;margin-bottom:14px;padding:4px;border:1px solid rgba(123,133,151,.26);border-radius:var(--soft-radius);background:linear-gradient(180deg,#f4f7fbf2,#e9eef5f2)}.settings-tab-button[data-v-4f1ccfd9]{border:1px solid transparent;border-radius:var(--soft-radius);background:transparent;color:#4a5565;font:inherit;font-size:12px;font-weight:800;padding:8px 12px;transition:.16s ease}.settings-tab-button[data-v-4f1ccfd9]:hover{background:#66769424;color:#243042}.settings-tab-button.active[data-v-4f1ccfd9]{border-color:#ef6c0057;background:linear-gradient(180deg,#fff7e9,#ffeccf);color:#8e4f00}.settings-panel[data-v-4f1ccfd9]{border-color:#616c8057;background:linear-gradient(180deg,#fff,#f7fafd);box-shadow:0 2px #79839629}.settings-panel-head[data-v-4f1ccfd9]{padding-bottom:10px;border-bottom:1px solid rgba(148,158,176,.32);margin-bottom:12px}.settings-node-grid[data-v-4f1ccfd9]{display:grid;grid-template-columns:minmax(240px,420px) auto;gap:12px;align-items:end;margin-top:12px}.settings-node-checkbox[data-v-4f1ccfd9]{width:fit-content;min-height:36px}.settings-config-actions[data-v-4f1ccfd9]{margin-top:12px}.chat-learning-panel[data-v-4f1ccfd9]{min-height:520px}.chat-learning-meta[data-v-4f1ccfd9]{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}.chat-learning-dirty[data-v-4f1ccfd9]{border-color:#ef6c005c;background:#ffefd5eb;color:#8e4f00}.chat-learning-size-over[data-v-4f1ccfd9]{border-color:#c439396b!important;background:#ffe3e3f0!important;color:#a42828!important}.chat-learning-note[data-v-4f1ccfd9]{margin:6px 0;color:#566174;font-size:12px;line-height:1.5}.chat-learning-path-field[data-v-4f1ccfd9]{margin-top:14px}.chat-learning-path-field code[data-v-4f1ccfd9]{display:block;padding:9px 11px;overflow-wrap:anywhere;border:1px solid rgba(116,128,149,.3);border-radius:var(--soft-radius);background:#ecf1f7db;color:#344054;font-family:JetBrains Mono,SFMono-Regular,monospace;font-size:11px}.chat-learning-editor[data-v-4f1ccfd9]{width:100%;min-height:430px;margin-top:12px;padding:14px;resize:vertical;border:1px solid rgba(95,108,130,.44);border-radius:var(--soft-radius);background:#fbfcfe;color:#273142;font-family:JetBrains Mono,SFMono-Regular,Consolas,monospace;font-size:12px;line-height:1.55;tab-size:2;box-sizing:border-box}.chat-learning-editor[data-v-4f1ccfd9]:focus{outline:2px solid rgba(239,108,0,.23);border-color:#ef6c00a3}.chat-learning-editor[data-v-4f1ccfd9]:disabled{opacity:.68;cursor:wait}.chat-learning-error[data-v-4f1ccfd9]{margin-top:10px}.chat-learning-actions[data-v-4f1ccfd9]{margin-top:12px}.chat-learning-modified[data-v-4f1ccfd9]{margin:12px 0 0}@media(max-width:900px){.settings-node-grid[data-v-4f1ccfd9]{grid-template-columns:minmax(0,1fr);align-items:start}.settings-node-checkbox[data-v-4f1ccfd9]{width:100%}.chat-learning-meta[data-v-4f1ccfd9]{justify-content:flex-start}.chat-learning-editor[data-v-4f1ccfd9]{min-height:360px}}.plan-run-actions[data-v-4f1ccfd9]{display:inline-flex;align-items:center;gap:8px;flex-wrap:wrap;padding:6px;border:1px solid rgba(255,152,0,.42);border-radius:var(--soft-radius);background:linear-gradient(180deg,#fff1daf5,#ffe5b7eb)}.card-head h2[data-v-4f1ccfd9]{margin:0;font-size:16px}.summary-pre[data-v-4f1ccfd9],.chat-log[data-v-4f1ccfd9]{margin:0;padding:14px;white-space:pre-wrap;word-break:break-word;font-family:JetBrains Mono,SFMono-Regular,monospace;font-size:12px;line-height:1.5}.metric-grid[data-v-4f1ccfd9]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:14px}.metric[data-v-4f1ccfd9]{display:flex;flex-direction:column;gap:6px;padding:0;border:0;border-radius:0;background:transparent;box-shadow:none}.metric span[data-v-4f1ccfd9]{display:block;margin-bottom:0;color:var(--muted);font-size:12px;font-weight:700}.metric strong[data-v-4f1ccfd9]{font-size:17px}.rank-list[data-v-4f1ccfd9],.event-list[data-v-4f1ccfd9],.anomaly-list[data-v-4f1ccfd9]{margin:0;padding:0;list-style:none}.rank-row[data-v-4f1ccfd9],.event-row[data-v-4f1ccfd9]{display:grid;gap:8px;align-items:center;padding:10px 0;border-bottom:1px solid rgba(120,120,120,.14)}.rank-row[data-v-4f1ccfd9]{grid-template-columns:minmax(86px,120px) minmax(0,1fr) auto}.event-row[data-v-4f1ccfd9]{grid-template-columns:minmax(0,1fr) minmax(0,1.6fr) auto}.rank-title[data-v-4f1ccfd9],.event-name[data-v-4f1ccfd9]{font-weight:800}.rank-label[data-v-4f1ccfd9]{color:var(--muted);font-size:12px}.event-bar[data-v-4f1ccfd9]{height:10px;overflow:hidden;border-radius:var(--soft-radius);background:#ff98001f}.event-bar-fill[data-v-4f1ccfd9]{display:block;height:100%;border-radius:var(--soft-radius);background:linear-gradient(90deg,var(--accent),#4bbf77)}.areas-toolbar[data-v-4f1ccfd9]{display:flex;flex-wrap:wrap;gap:12px;align-items:end;margin-bottom:16px}.areas-layout[data-v-4f1ccfd9]{display:flex;flex-direction:column;gap:16px}.area-list-item[data-v-4f1ccfd9]{display:flex;flex-direction:column;gap:6px;align-items:flex-start;padding:11px 12px;border:1px solid var(--line);border-radius:var(--soft-radius);background:#ffffffe6;color:var(--text);text-align:left;transition:.18s ease}.area-list-item[data-v-4f1ccfd9]:hover,.area-list-item.active[data-v-4f1ccfd9]{border-color:#ff980057;background:var(--accent-soft)}.area-list-title[data-v-4f1ccfd9]{font-weight:800}.area-listbox-shell[data-v-4f1ccfd9]{width:100%}.area-search-select[data-v-4f1ccfd9]{position:relative}.area-search-select-input[data-v-4f1ccfd9]{width:100%;border:1px solid var(--line);background:#ffffffeb;color:var(--text);padding:8px 10px;font-size:12px;line-height:1.35;border-radius:var(--soft-radius)}.area-search-select-menu[data-v-4f1ccfd9]{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:8;max-height:280px;overflow:auto;border:1px solid var(--line);background:#fffffffa;border-radius:var(--soft-radius)}.area-search-select-option[data-v-4f1ccfd9]{display:block;width:100%;padding:8px 10px;border:0;border-bottom:1px solid rgba(120,120,120,.1);background:transparent;color:var(--text);text-align:left;font-size:12px;line-height:1.35}.area-search-select-option[data-v-4f1ccfd9]:hover,.area-search-select-option.active[data-v-4f1ccfd9]{background:var(--accent-soft)}.area-list-meta[data-v-4f1ccfd9],.area-list-tags[data-v-4f1ccfd9],.area-detail-subhead[data-v-4f1ccfd9]{color:var(--muted);font-size:12px}.area-detail[data-v-4f1ccfd9]{min-width:0;width:100%;padding:14px;border:1px solid var(--line);border-radius:var(--soft-radius);background:linear-gradient(180deg,#fffffff5,#f8f5ffeb)}.profiles-layout[data-v-4f1ccfd9]{display:grid;grid-template-columns:minmax(260px,340px) minmax(0,1fr);gap:16px}.test-planner-layout[data-v-4f1ccfd9]{display:flex;flex-direction:column;gap:16px;align-items:stretch}.result-only-layout[data-v-4f1ccfd9]{grid-template-columns:minmax(0,1fr)}.card-results-focus[data-v-4f1ccfd9]{grid-column:span 12}.profile-list[data-v-4f1ccfd9],.profile-editor-stack[data-v-4f1ccfd9]{display:flex;flex-direction:column;gap:12px}.planner-sidecard[data-v-4f1ccfd9]{gap:12px}.card-profiles .area-detail[data-v-4f1ccfd9]{border-color:#616c8057;background:linear-gradient(180deg,#fff,#f7fafd);box-shadow:0 2px #79839629}.card-profiles .card-head[data-v-4f1ccfd9]{padding-bottom:10px;border-bottom:1px solid rgba(148,158,176,.32)}.card-profiles .area-detail-subhead[data-v-4f1ccfd9]{color:#4b5565}.card-profiles .meta-chip[data-v-4f1ccfd9],.card-profiles .pill.neutral[data-v-4f1ccfd9]{border:0;background:transparent;color:#1c2430}.card-profiles .planner-list .area-list-item[data-v-4f1ccfd9]{border-color:#8892a559;background:linear-gradient(180deg,#fffffffa,#f4f7fbfa);box-shadow:0 1px #99a3b524}.card-profiles .planner-list .area-list-item[data-v-4f1ccfd9]:hover,.card-profiles .planner-list .area-list-item.active[data-v-4f1ccfd9]{border-color:#4a5a909e;background:linear-gradient(180deg,#e0e6f3f5,#d6deeef5)}.card-profiles .metric[data-v-4f1ccfd9]{padding:0;border:0;border-radius:0;background:transparent;box-shadow:none}.card-profiles .metric span[data-v-4f1ccfd9]{color:#475163}.card-profiles .metric strong[data-v-4f1ccfd9]{color:#161d29;font-size:20px}.ai-planner-shell[data-v-4f1ccfd9]{margin-top:12px;padding:12px;border:1px solid rgba(120,120,120,.24);background:#f4f7fcf5;border-radius:var(--soft-radius)}.ai-planner-shell-head[data-v-4f1ccfd9]{margin-bottom:12px}.ai-planner-shell-head.template-builder-focus-head[data-v-4f1ccfd9]{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;flex-wrap:wrap}.ai-planner-shell-head h4[data-v-4f1ccfd9]{margin:0}.planner-pairs[data-v-4f1ccfd9]{margin-top:12px}.planner-generation[data-v-4f1ccfd9]{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-top:14px;padding:10px 12px;border:1px solid rgba(126,136,154,.24);background:linear-gradient(180deg,#f0f4f9fa,#e7edf4fa)}.planner-error-banner[data-v-4f1ccfd9]{margin:14px 0 0;padding:10px 12px;border:1px solid #b42318;background:#fef3f2;color:#b42318;font-weight:700;white-space:pre-wrap;word-break:break-word}.planner-step-card[data-v-4f1ccfd9]{border:1px solid rgba(132,143,160,.28);border-left:5px solid rgba(112,122,141,.66);background:linear-gradient(180deg,#fff,#f4f8fc);box-shadow:0 2px #7b859724;cursor:default}.planner-step-running[data-v-4f1ccfd9]{border-left-color:#3d5ca8;background:linear-gradient(180deg,#f5f9ff,#e9f0fb);box-shadow:0 0 0 2px #3d5ca829}.planner-step-dragging[data-v-4f1ccfd9]{opacity:.56;cursor:grabbing}.planner-step-drop-target[data-v-4f1ccfd9]{box-shadow:0 0 0 2px #46b86d2e;border-left-color:#46b86d}.planner-step-title[data-v-4f1ccfd9]{display:flex;align-items:center;gap:10px}.planner-step-summary[data-v-4f1ccfd9]{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px 14px;margin-top:10px;padding:10px 12px;border:1px solid rgba(155,165,183,.24);background:#f1f5f9f0;color:#4c5566;font-size:12px}.drag-handle[data-v-4f1ccfd9]{display:inline-flex;align-items:center;justify-content:center;min-width:26px;height:24px;border:1px solid rgba(120,120,120,.18);border-radius:var(--soft-radius);background:#ffffffd6;color:var(--muted);font-size:12px;font-weight:800;cursor:grab;-webkit-user-select:none;user-select:none}.collapse-toggle[data-v-4f1ccfd9]{display:inline-flex;align-items:center;justify-content:center;min-width:28px;height:28px;border:1px solid rgba(120,120,120,.18);border-radius:var(--soft-radius);background:#ffffffd6;color:var(--text);cursor:pointer}.collapse-icon[data-v-4f1ccfd9]{display:inline-block;font-size:12px;line-height:1;transition:transform .16s ease}.collapse-icon.collapsed[data-v-4f1ccfd9]{transform:rotate(-90deg)}.planner-step-editor[data-v-4f1ccfd9]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 12px;margin-top:10px;padding:12px;border:1px solid rgba(155,165,183,.24);background:#f7fafdf5}.planner-field-group[data-v-4f1ccfd9]{padding:10px 12px 12px;border:1px solid rgba(155,165,183,.28);background:#ffffffe6}.planner-field-group h4[data-v-4f1ccfd9]{margin:0 0 10px;font-size:12px;letter-spacing:.04em;text-transform:uppercase;color:#1d2433}.planner-field-group-grid[data-v-4f1ccfd9]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 12px}.planner-field-group-grid .group-span[data-v-4f1ccfd9]{grid-column:1 / -1}.planner-check-sections[data-v-4f1ccfd9]{display:grid;gap:10px;margin-top:10px}.planner-check-section[data-v-4f1ccfd9]{padding:10px 12px;border:1px solid rgba(155,165,183,.28);background:#ffffffdb}.planner-check-section h4[data-v-4f1ccfd9]{margin:0 0 8px;font-size:12px;letter-spacing:.04em;text-transform:uppercase;color:#1d2433}.planner-check-section .area-detail-subhead[data-v-4f1ccfd9]{margin:0 0 8px}.running-headline[data-v-4f1ccfd9]{display:inline-flex;align-items:center;gap:10px;margin:0}.running-spinner[data-v-4f1ccfd9]{width:14px;height:14px;display:inline-block;border-radius:50%;border:2px solid rgba(90,102,122,.28);border-top-color:#5a667a;animation:running-spin-4f1ccfd9 .85s linear infinite}.run-button-spinner[data-v-4f1ccfd9]{margin-right:6px;vertical-align:-2px}.run-chip-spinner[data-v-4f1ccfd9]{width:12px;height:12px;margin-right:6px}@keyframes running-spin-4f1ccfd9{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.editor-check-sections[data-v-4f1ccfd9]{grid-column:1 / -1}.compact-grid[data-v-4f1ccfd9]{grid-template-columns:repeat(2,minmax(0,1fr));margin-top:0}.result-check-sections .planner-check-section[data-v-4f1ccfd9]{background:#fafcfffa}.planner-step-grid[data-v-4f1ccfd9]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 14px;margin-top:10px;color:#4c5566;font-size:12px}.area-detail h3[data-v-4f1ccfd9],.area-detail h4[data-v-4f1ccfd9]{margin:0}.area-detail-subhead[data-v-4f1ccfd9]{margin:6px 0 0}.area-metrics[data-v-4f1ccfd9]{margin-top:4px}.area-chips[data-v-4f1ccfd9]{display:flex;flex-wrap:wrap;gap:8px;margin:14px 0}.area-editor[data-v-4f1ccfd9]{margin:14px 0 18px;padding:12px;border:1px solid rgba(120,120,120,.16);border-radius:var(--soft-radius);background:#ffffffb8}.area-editor-grid[data-v-4f1ccfd9]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.area-editor-span[data-v-4f1ccfd9]{grid-column:1 / -1}.area-editor-note[data-v-4f1ccfd9]{margin:12px 0 0;color:var(--muted);font-size:12px}.compact-preset-row[data-v-4f1ccfd9]{margin-top:10px}.compact-preset-row .preset-button[data-v-4f1ccfd9]{text-align:left;font-size:11px;padding:7px 10px}.area-ga-editor[data-v-4f1ccfd9]{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;margin-top:16px}.area-ga-list[data-v-4f1ccfd9],.area-ga-catalog[data-v-4f1ccfd9]{max-height:320px;overflow:auto}.area-ga-item[data-v-4f1ccfd9]{display:flex;justify-content:space-between;gap:12px;align-items:center;padding:10px 0;border-bottom:1px solid rgba(120,120,120,.12)}.area-ga-main[data-v-4f1ccfd9]{min-width:0;flex:1}.area-ga-actions[data-v-4f1ccfd9]{display:flex;align-items:end;gap:10px;flex-wrap:wrap}.area-ga-role-field[data-v-4f1ccfd9]{min-width:148px}.area-ga-item strong[data-v-4f1ccfd9],.planner-step-grid strong[data-v-4f1ccfd9]{color:var(--text)}.area-ga-item span[data-v-4f1ccfd9]{display:block;color:var(--muted);font-size:12px}.profile-runbar[data-v-4f1ccfd9]{display:flex;flex-wrap:wrap;gap:12px;justify-content:space-between;align-items:center;margin-top:16px;padding:10px 12px;border:1px solid rgba(118,129,147,.22);background:linear-gradient(180deg,#eff4fafa,#e6ecf4fa)}.area-columns[data-v-4f1ccfd9]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin:16px 0}.simple-list[data-v-4f1ccfd9]{margin:10px 0 0;padding-left:18px}.simple-list li[data-v-4f1ccfd9]{margin-bottom:6px}.simple-list-mono[data-v-4f1ccfd9]{font-family:JetBrains Mono,SFMono-Regular,monospace;font-size:11px}.report-checks[data-v-4f1ccfd9]{display:grid;gap:10px;margin:16px 0}.plan-steps-stack[data-v-4f1ccfd9]{margin-left:12px;padding-left:12px}.plan-draft-shell[data-v-4f1ccfd9]{margin-left:12px;width:calc(100% - 12px)}.report-check[data-v-4f1ccfd9]{padding:12px;border:1px solid rgba(139,149,167,.28);border-radius:var(--soft-radius);border-left:4px solid var(--line);background:#fffffff5;box-shadow:0 1px #8c96a824}.report-pass[data-v-4f1ccfd9]{border-left-color:#46b86d;background:linear-gradient(180deg,#f7fcf8,#eef7f0)}.report-warn[data-v-4f1ccfd9]{border-left-color:#d99a34;background:linear-gradient(180deg,#fffaf2,#fcf4e5)}.report-fail[data-v-4f1ccfd9]{border-left-color:#d94b55;background:linear-gradient(180deg,#fff6f6,#fceced)}.bus-track[data-v-4f1ccfd9]{position:relative;height:18px;margin-top:16px;overflow:hidden;border:1px solid rgba(120,120,120,.2);border-radius:var(--soft-radius);background:linear-gradient(180deg,#fff8ea,#fff2dc)}.bus-segment[data-v-4f1ccfd9]{position:absolute;top:0;bottom:0}.segment-connected[data-v-4f1ccfd9]{background:linear-gradient(90deg,#4ad06d,#38c45f)}.segment-disconnected[data-v-4f1ccfd9]{background:linear-gradient(90deg,#eb6a74,#d94b55)}.bus-scale[data-v-4f1ccfd9]{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:10px;color:var(--muted);font-size:12px;font-weight:700}.bus-scale span[data-v-4f1ccfd9]:nth-child(2){text-align:center}.bus-scale span[data-v-4f1ccfd9]:nth-child(3){text-align:right}.bus-note[data-v-4f1ccfd9],.flow-note[data-v-4f1ccfd9],.empty-state[data-v-4f1ccfd9]{color:var(--muted);line-height:1.5}.flow-toolbar[data-v-4f1ccfd9]{display:grid;grid-template-columns:120px minmax(180px,1fr) minmax(220px,1.2fr) auto;gap:12px;align-items:start}.flow-field[data-v-4f1ccfd9]{display:flex;flex-direction:column;gap:6px;color:var(--muted);font-size:11px;font-weight:700}.flow-field input[data-v-4f1ccfd9],.flow-field select[data-v-4f1ccfd9],.flow-field textarea[data-v-4f1ccfd9]{border:1px solid var(--line);border-radius:var(--soft-radius);background:#ffffffe0;color:var(--text);padding:7px 10px;min-height:36px;box-sizing:border-box;line-height:1.25;font-size:12px}.flow-field select[data-v-4f1ccfd9]{padding-right:28px}.flow-field textarea[data-v-4f1ccfd9]{resize:vertical;min-height:62px;font:inherit}.flow-field select[multiple][data-v-4f1ccfd9],.flow-field-select select[data-v-4f1ccfd9]{min-height:108px;padding-right:10px}.compact-actions[data-v-4f1ccfd9]{justify-content:flex-end}.compact-toggle[data-v-4f1ccfd9]{min-height:40px}.modal-backdrop[data-v-4f1ccfd9]{position:fixed;inset:0;z-index:80;display:flex;align-items:center;justify-content:center;padding:20px;background:#221d3057;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.global-wait-overlay[data-v-4f1ccfd9]{position:fixed;inset:0;z-index:260;display:flex;align-items:center;justify-content:center;padding:20px;background:#10141c6b;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.global-wait-card[data-v-4f1ccfd9]{width:min(420px,100%);display:flex;flex-direction:column;align-items:center;gap:10px;padding:18px 20px;border:1px solid rgba(118,128,145,.38);background:#fffffff5;color:#1d2433;text-align:center;box-shadow:0 14px 38px #080c1333}.global-wait-card strong[data-v-4f1ccfd9]{font-size:15px}.global-wait-card span[data-v-4f1ccfd9]{font-size:13px;color:#4d5a6e}.global-wait-spinner[data-v-4f1ccfd9]{width:20px;height:20px;border-width:2px}.modal-card[data-v-4f1ccfd9]{width:min(420px,100%);padding:18px;border:1px solid var(--line);border-radius:var(--soft-radius);background:#fffffffa;box-shadow:var(--shadow)}.modal-card h3[data-v-4f1ccfd9]{margin:0 0 8px;font-size:18px}.modal-actions[data-v-4f1ccfd9]{display:flex;justify-content:flex-end;gap:10px;margin-top:16px}.flow-legend[data-v-4f1ccfd9]{grid-column:1 / -1;display:flex;flex-wrap:nowrap;gap:10px 14px;align-items:center;padding:10px 0 0;color:var(--muted);font-size:12px;font-weight:700;white-space:nowrap;overflow-x:auto;overflow-y:hidden;scrollbar-width:thin}.flow-legend span[data-v-4f1ccfd9]{display:inline-flex;align-items:center;white-space:nowrap;flex:0 0 auto}.flow-toggle[data-v-4f1ccfd9]{align-self:end;min-height:44px;white-space:nowrap}.flow-toggle-inline[data-v-4f1ccfd9]{align-self:flex-start;min-height:auto;margin-top:6px}.legend-line[data-v-4f1ccfd9],.legend-dot[data-v-4f1ccfd9]{display:inline-block;vertical-align:middle;margin-right:6px}.legend-line[data-v-4f1ccfd9]{width:18px;border-top:3px solid currentColor}.legend-write[data-v-4f1ccfd9]{color:#ff9800}.legend-response[data-v-4f1ccfd9]{color:#46b86d}.legend-read[data-v-4f1ccfd9]{color:#d99a34}.legend-repeat[data-v-4f1ccfd9]{color:#c34747}.legend-dot[data-v-4f1ccfd9]{width:10px;height:10px;border-radius:var(--soft-radius)}.legend-anomaly[data-v-4f1ccfd9]{background:#f08f92}.legend-external[data-v-4f1ccfd9]{background:#f5d9a2}.flow-frame[data-v-4f1ccfd9]{margin-top:16px;overflow:auto;border:1px solid var(--line);border-radius:var(--soft-radius);background:linear-gradient(180deg,#fffffffa,#f8f5fff5)}.card-flow.is-fullscreen[data-v-4f1ccfd9]{width:100%;height:100%;margin:0;padding:18px;border-radius:var(--soft-radius);background:#fffffffa;overflow:auto}.card-flow.is-fullscreen .flow-frame[data-v-4f1ccfd9]{height:calc(100vh - 260px)}.card-flow.is-fullscreen .flow-svg[data-v-4f1ccfd9]{min-height:calc(100vh - 260px)}.flow-svg[data-v-4f1ccfd9]{width:100%;min-width:1180px;min-height:420px;display:block}.flow-empty[data-v-4f1ccfd9]{padding:24px}.flow-edge[data-v-4f1ccfd9]{fill:none;stroke-linecap:round;vector-effect:non-scaling-stroke}.flow-edge-active[data-v-4f1ccfd9]{stroke-dasharray:10 7;animation:graph-flow-4f1ccfd9 1.25s linear infinite}.flow-edge-idle[data-v-4f1ccfd9]{stroke-dasharray:8 8;animation:none}@keyframes graph-flow-4f1ccfd9{0%{stroke-dashoffset:0}to{stroke-dashoffset:-34}}.flow-node circle[data-v-4f1ccfd9]{fill:#edf9ef;stroke:#4caf66;stroke-width:2}.flow-node.is-anomaly circle[data-v-4f1ccfd9]{fill:#fff1f1;stroke:#e53935}.flow-node.is-external circle[data-v-4f1ccfd9]{fill:#fff8ea;stroke:#c98a1a;stroke-dasharray:4 3}.flow-node.is-idle circle[data-v-4f1ccfd9]{opacity:.7}.node-label[data-v-4f1ccfd9],.node-subtitle[data-v-4f1ccfd9],.node-payload[data-v-4f1ccfd9],.node-badge[data-v-4f1ccfd9]{text-anchor:middle;dominant-baseline:middle}.node-label[data-v-4f1ccfd9]{fill:#2f7f48;font-size:12px;font-weight:800}.flow-node.is-external .node-label[data-v-4f1ccfd9]{fill:#9a6b24}.node-subtitle[data-v-4f1ccfd9]{fill:#7a7368;font-size:10px}.node-payload[data-v-4f1ccfd9]{fill:#746d62;font-size:9px;font-family:JetBrains Mono,SFMono-Regular,monospace}.node-badge[data-v-4f1ccfd9]{fill:#b3261e;font-size:9px;font-weight:800}.anomaly-list[data-v-4f1ccfd9]{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px}.anomaly-card[data-v-4f1ccfd9]{padding:14px;border-left:4px solid var(--warn-border);border-radius:var(--soft-radius);background:var(--warn-bg)}.anomaly-head[data-v-4f1ccfd9]{display:flex;justify-content:space-between;gap:10px;align-items:baseline}.anomaly-time[data-v-4f1ccfd9]{margin:8px 0 10px;color:var(--muted);font-size:12px}.anomaly-card pre[data-v-4f1ccfd9]{margin:0;padding:12px;white-space:pre-wrap;word-break:break-word;font-size:12px}.chat-log[data-v-4f1ccfd9]{min-height:280px}.ask-row[data-v-4f1ccfd9]{margin-top:12px;margin-bottom:0;padding:10px;border:1px solid rgba(255,152,0,.34);border-radius:var(--soft-radius);background:linear-gradient(180deg,#fff8e8db,#fff3d6cc)}.ask-input[data-v-4f1ccfd9]{flex:1 1 260px;min-width:0;border:2px solid var(--hb-primary);border-radius:var(--soft-radius);background:#fff;color:var(--text);padding:11px 14px;box-shadow:0 0 0 2px #ff980024}.ask-input[data-v-4f1ccfd9]:focus{outline:none;border-color:#ef6c00;box-shadow:0 0 0 3px #ef6c0038}.chat-message[data-v-4f1ccfd9]{margin-bottom:12px;padding:12px;border-radius:var(--soft-radius)}.chat-message pre[data-v-4f1ccfd9]{margin:0;white-space:pre-wrap;word-break:break-word;font-family:inherit}.chat-user[data-v-4f1ccfd9]{background:#ff98001f}.chat-assistant[data-v-4f1ccfd9]{background:#5bbf731f}.chat-error[data-v-4f1ccfd9]{background:var(--err-bg)}.chat-pending[data-v-4f1ccfd9]{display:inline-flex;align-items:center;gap:8px;background:#78787814;color:var(--muted)}.chat-pending-spinner[data-v-4f1ccfd9]{width:14px;height:14px;border-radius:50%;border:2px solid rgba(90,102,122,.28);border-top-color:#5a667a;animation:chat-pending-spin-4f1ccfd9 .75s linear infinite}@keyframes chat-pending-spin-4f1ccfd9{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.card-flow-builder[data-v-4f1ccfd9]{display:flex;flex-direction:column;gap:12px}.beta-badge[data-v-4f1ccfd9]{display:inline-block;margin-left:8px;padding:2px 7px;border-radius:999px;background:#ff9800;color:#fff;font-size:10px;font-weight:700;letter-spacing:.06em;vertical-align:middle;text-transform:uppercase}.flow-builder-split[data-v-4f1ccfd9]{display:flex;flex-wrap:wrap;gap:16px;align-items:stretch}.flow-builder-pane[data-v-4f1ccfd9]{flex:1 1 300px;min-width:0;display:flex;flex-direction:column;gap:12px}.flow-builder-input[data-v-4f1ccfd9]{flex:1 1 300px;max-width:520px}.flow-builder-output[data-v-4f1ccfd9]{flex:1.6 1 340px;min-height:120px}.flow-builder-placeholder[data-v-4f1ccfd9]{margin:0;display:flex;align-items:center;justify-content:center;flex:1;min-height:120px;padding:16px;border:1px dashed rgba(90,102,122,.3);border-radius:var(--soft-radius, 10px);color:var(--muted-text, #5a667a);font-size:13px;text-align:center}.flow-builder-hint[data-v-4f1ccfd9]{margin:0;color:var(--muted-text, #5a667a);font-size:13px;line-height:1.5}.flow-builder-compose[data-v-4f1ccfd9]{display:flex;flex-direction:column;gap:10px}.flow-builder-textarea[data-v-4f1ccfd9]{width:100%;resize:vertical;min-height:90px;padding:10px 12px;border:1px solid rgba(90,102,122,.28);border-radius:var(--soft-radius, 10px);font:inherit;line-height:1.5;box-sizing:border-box}.flow-builder-actions[data-v-4f1ccfd9]{display:flex;justify-content:flex-end}.flow-builder-pending[data-v-4f1ccfd9]{display:flex;align-items:center;gap:10px;color:var(--muted-text, #5a667a);font-size:13px}.flow-builder-error[data-v-4f1ccfd9]{border:1px solid rgba(214,69,69,.4);background:#d6454514;border-radius:var(--soft-radius, 10px);padding:8px 12px}.flow-builder-error pre[data-v-4f1ccfd9]{margin:0;white-space:pre-wrap;word-break:break-word;color:#b3261e;font-size:13px}.flow-builder-result[data-v-4f1ccfd9]{display:flex;flex-direction:column;gap:10px}.flow-builder-notes[data-v-4f1ccfd9]{margin:0;font-size:13px;line-height:1.5}.flow-builder-warnings[data-v-4f1ccfd9]{margin:0;padding-left:18px;color:#8a6d00;font-size:12px;line-height:1.5}.flow-builder-result-head[data-v-4f1ccfd9]{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.flow-builder-result-head .secondary-button[data-v-4f1ccfd9]{margin-left:auto}.flow-builder-json[data-v-4f1ccfd9]{margin:0;max-height:420px;overflow:auto;padding:12px;border:1px solid rgba(90,102,122,.22);border-radius:var(--soft-radius, 10px);background:#1e2330;color:#e6e9f0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;line-height:1.5;white-space:pre}[data-v-4f1ccfd9] .chat-svg-wrap{margin-top:10px;overflow:auto;border:1px solid rgba(255,152,0,.25);border-radius:var(--soft-radius);background:#fff;padding:8px}[data-v-4f1ccfd9] .chat-svg-wrap svg{width:100%;height:auto;display:block}[data-v-4f1ccfd9] .chat-table-wrap{overflow:auto}[data-v-4f1ccfd9] .chat-table-wrap table,[data-v-4f1ccfd9] table{width:100%;border-collapse:collapse;margin-top:8px}[data-v-4f1ccfd9] th,[data-v-4f1ccfd9] td{padding:6px 8px;border:1px solid rgba(120,120,120,.16)}@media(max-width:1100px){.page-shell[data-v-4f1ccfd9]{width:min(100% - 12px,1600px);min-height:100vh;margin-top:6px;grid-template-columns:1fr;gap:10px}.m-header[data-v-4f1ccfd9]{display:flex}.app-sidebar[data-v-4f1ccfd9]{position:fixed;top:0;left:0;z-index:200;width:210px;height:100vh;margin:0;border-radius:0;transform:translate(-104%);transition:transform .24s ease;overflow-y:auto}.page-shell.sidebar-mobile-open .app-sidebar[data-v-4f1ccfd9]{transform:translate(0)}.workspace-shell[data-v-4f1ccfd9]{padding-top:70px}.app-sidebar[data-v-4f1ccfd9],.workspace-shell[data-v-4f1ccfd9]{border-radius:var(--soft-radius)}.sidebar-nav[data-v-4f1ccfd9]{display:flex;grid-template-columns:none}.card[data-v-4f1ccfd9],.card-summary[data-v-4f1ccfd9],.card-bus[data-v-4f1ccfd9],.card-chat[data-v-4f1ccfd9],.card-flow[data-v-4f1ccfd9],.card-anomalies[data-v-4f1ccfd9],.card-areas[data-v-4f1ccfd9],.card-profiles[data-v-4f1ccfd9]{grid-column:span 12}.card-chat[data-v-4f1ccfd9]{max-width:100%}}@media(max-width:720px){.page-shell[data-v-4f1ccfd9]{width:min(100% - 8px,1440px);gap:8px}.workspace-shell[data-v-4f1ccfd9]{padding:12px}.topbar[data-v-4f1ccfd9],.card[data-v-4f1ccfd9]{padding:14px;border-radius:var(--soft-radius)}.sidebar-nav[data-v-4f1ccfd9]{grid-template-columns:none}.rank-row[data-v-4f1ccfd9],.event-row[data-v-4f1ccfd9],.metric-grid[data-v-4f1ccfd9],.flow-toolbar[data-v-4f1ccfd9],.areas-layout[data-v-4f1ccfd9],.area-columns[data-v-4f1ccfd9],.profiles-layout[data-v-4f1ccfd9],.area-ga-editor[data-v-4f1ccfd9],.area-editor-grid[data-v-4f1ccfd9],.planner-step-editor[data-v-4f1ccfd9],.planner-step-grid[data-v-4f1ccfd9]{grid-template-columns:1fr}.statusbar[data-v-4f1ccfd9]{align-items:flex-start}.plan-steps-stack[data-v-4f1ccfd9]{margin-left:6px;padding-left:8px}.plan-draft-shell[data-v-4f1ccfd9]{margin-left:6px;width:calc(100% - 6px)}}:root{color-scheme:light;--bg: #f4f4f4;--panel: #ffffff;--panel-soft: #efefef;--text: #333333;--muted: #666666;--line: rgba(0, 0, 0, .125);--accent: #ff9800;--accent-soft: #fff3e0;--ok-bg: #edf9ef;--ok-border: #5bbf73;--err-bg: #ffe9ea;--err-border: #d95b63;--warn-bg: #fff5e3;--warn-border: #d99a34;--card-radius: 4px;--shadow: 0 12px 32px rgba(0, 0, 0, .12);font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}*{box-sizing:border-box}html,body,#app{min-height:100%;margin:0}body{background:#f4f4f4;color:var(--text)}button,input,select,textarea{font:inherit}a{color:inherit}
|
|
1
|
+
.page-shell[data-v-5372e93d]{--sidebar-expanded-width: 240px;--sidebar-collapsed-width: 60px;--sidebar-current-width: var(--sidebar-expanded-width);width:min(1600px,calc(100% - 24px));min-height:calc(100vh - 24px);margin:12px auto;display:grid;grid-template-columns:var(--sidebar-current-width) minmax(0,1fr);gap:16px;align-items:stretch;transition:grid-template-columns .26s ease}.page-shell.sidebar-collapsed[data-v-5372e93d]{--sidebar-current-width: var(--sidebar-collapsed-width)}.m-header[data-v-5372e93d]{position:fixed;top:0;left:0;right:0;z-index:210;display:none;align-items:center;justify-content:space-between;gap:12px;height:62px;padding:0 12px 0 14px;background:var(--hb-primary-dark);color:#fff;border-bottom:1px solid rgba(255,255,255,.12)}.m-header-brand[data-v-5372e93d]{display:inline-flex;align-items:center;gap:10px}.m-logo-mark[data-v-5372e93d]{width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;border:1px solid rgba(255,255,255,.4);border-radius:var(--soft-radius);font-size:14px;font-weight:800;color:#fff}.hb-logo-text-mobile[data-v-5372e93d]{font-size:21px;font-weight:700;letter-spacing:.02em}.hamburger-icon[data-v-5372e93d]{position:relative;width:30px;height:22px;border:0;background:transparent;color:inherit;cursor:pointer}.hamburger-icon span[data-v-5372e93d]{display:block;position:absolute;left:0;width:100%;height:2px;border-radius:2px;background:#fff;transition:.24s ease}.hamburger-icon span[data-v-5372e93d]:nth-child(1){top:0}.hamburger-icon span[data-v-5372e93d]:nth-child(2),.hamburger-icon span[data-v-5372e93d]:nth-child(3){top:9px}.hamburger-icon span[data-v-5372e93d]:nth-child(4){top:18px}.hamburger-icon-cross span[data-v-5372e93d]:nth-child(1),.hamburger-icon-cross span[data-v-5372e93d]:nth-child(4){left:50%;width:0}.hamburger-icon-cross span[data-v-5372e93d]:nth-child(2){transform:rotate(45deg)}.hamburger-icon-cross span[data-v-5372e93d]:nth-child(3){transform:rotate(-45deg)}.sidebar-overlay[data-v-5372e93d]{position:fixed;inset:0;z-index:180;border:0;background:#090c137a}[data-v-5372e93d] *{--soft-radius: 4px;--hb-primary: #ff9800;--hb-primary-dark: #ef6c00}.app-sidebar[data-v-5372e93d]{display:flex;flex-direction:column;gap:14px;padding:18px 16px 16px;border-radius:var(--soft-radius);background:var(--hb-primary-dark);box-shadow:0 26px 60px #080a1057;color:#f6f8fb;overflow:hidden}.sidebar-brand-wrap[data-v-5372e93d]{display:grid;grid-template-columns:34px minmax(0,1fr) 28px;align-items:start;gap:10px}.sidebar-brand-mark[data-v-5372e93d]{width:34px;height:34px;display:inline-flex;align-items:center;justify-content:center;border:1px solid rgba(255,255,255,.35);border-radius:var(--soft-radius);font-weight:800;font-size:15px;color:#fff}.sidebar-collapse-toggle[data-v-5372e93d]{width:28px;min-width:28px;height:28px;padding:0;border:1px solid rgba(255,255,255,.24);border-radius:var(--soft-radius);background:#ffffff14;color:#f4f8ff;cursor:pointer}.sidebar-collapse-icon[data-v-5372e93d]{display:inline-flex;align-items:center;justify-content:center;width:100%;font-size:18px;line-height:1;font-weight:700}.sidebar-collapse-toggle[data-v-5372e93d]:hover{background:#ffffff29}.workspace-shell[data-v-5372e93d]{min-width:0;padding:10px;border-radius:var(--soft-radius);background:#f4f4f4;box-shadow:0 24px 60px #19203024;transition:padding .2s ease}.topbar[data-v-5372e93d]{padding:20px 22px 14px;border:1px solid rgba(160,170,186,.22);border-radius:var(--soft-radius);background:linear-gradient(180deg,#fffffffa,#f5f7fbf0);box-shadow:0 12px 30px #1a202c14}.workspace-header[data-v-5372e93d]{margin-bottom:16px}.brand[data-v-5372e93d],.sidebar-brand[data-v-5372e93d]{margin-bottom:6px;min-width:0}.eyebrow[data-v-5372e93d]{margin:0 0 6px;color:inherit;font-size:12px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;opacity:.75}.brand h1[data-v-5372e93d],.sidebar-brand h1[data-v-5372e93d]{margin:0;font-size:clamp(24px,3.4vw,34px);line-height:1}.workspace-brand h2[data-v-5372e93d]{margin:0;font-size:clamp(24px,3vw,32px);line-height:1.02;color:#111723}.subhead[data-v-5372e93d]{max-width:860px;margin:8px 0 0;color:inherit;font-size:12px;line-height:1.4;opacity:.78}.toolbar[data-v-5372e93d],.statusbar[data-v-5372e93d],.tab-strip[data-v-5372e93d],.checkbox[data-v-5372e93d],.pill-row[data-v-5372e93d],.preset-row[data-v-5372e93d],.ask-row[data-v-5372e93d]{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.toolbar[data-v-5372e93d]{justify-content:space-between}.toolbar-cluster[data-v-5372e93d],.action-cluster[data-v-5372e93d]{display:inline-flex;flex-wrap:wrap;gap:8px;align-items:center;padding:0;border:0;border-radius:0;background:transparent;box-shadow:none}.workspace-toolbar[data-v-5372e93d]{margin-top:16px}.primary-button[data-v-5372e93d],.preset-button[data-v-5372e93d],.danger-button[data-v-5372e93d],.primary-link[data-v-5372e93d],.secondary-button[data-v-5372e93d],.tab-button[data-v-5372e93d]{border:1px solid var(--line);border-radius:var(--soft-radius);background:#607d8b;color:#fff;text-decoration:none;font-size:12px;font-weight:700;padding:8px 12px;transition:.18s ease}.primary-button[data-v-5372e93d],.primary-link[data-v-5372e93d],.tab-button.active[data-v-5372e93d]{border-color:transparent;background:var(--hb-primary);color:#fff}.secondary-button[data-v-5372e93d],.preset-button[data-v-5372e93d],.tab-button[data-v-5372e93d]{border-color:transparent;background:#607d8b;color:#fff}.danger-button[data-v-5372e93d]{border-color:transparent;background:#d32f2f;color:#fff}.preset-button[data-v-5372e93d]:hover,.danger-button[data-v-5372e93d]:hover,.secondary-button[data-v-5372e93d]:hover,.tab-button[data-v-5372e93d]:hover{background:#546e7a;border-color:transparent}.danger-button[data-v-5372e93d]:hover{background:#c62828;border-color:transparent}.new-button[data-v-5372e93d]{background:linear-gradient(180deg,#62c27a,#43a85f);border-color:transparent;color:#fff}.new-button[data-v-5372e93d]:hover{background:linear-gradient(180deg,#74cf8b,#4fb46b);border-color:transparent}.primary-button[data-v-5372e93d]:hover,.primary-link[data-v-5372e93d]:hover,.tab-button.active[data-v-5372e93d]:hover{background:#e68900;border-color:transparent}.primary-button[data-v-5372e93d]:disabled,.preset-button[data-v-5372e93d]:disabled,.danger-button[data-v-5372e93d]:disabled,.secondary-button[data-v-5372e93d]:disabled{opacity:.6;cursor:not-allowed}.hidden-file-input[data-v-5372e93d]{display:none}.node-select[data-v-5372e93d]{min-width:min(360px,100%)}.sidebar-select[data-v-5372e93d]{min-width:0;width:100%;border-color:#ffffff14;background:#ffffff0f;color:#f6f8fb}.sidebar-select option[data-v-5372e93d]{color:#0f1520}.node-select[data-v-5372e93d],.checkbox[data-v-5372e93d],.summary-pre[data-v-5372e93d],.chat-log[data-v-5372e93d],.anomaly-card pre[data-v-5372e93d]{border:1px solid var(--line);border-radius:var(--soft-radius);background:#ffffffe0}.node-select[data-v-5372e93d]{padding:8px 10px;color:var(--text);font-size:12px}.checkbox[data-v-5372e93d]{padding:8px 10px;gap:8px;font-size:12px}.sidebar-checkbox[data-v-5372e93d]{border-color:#ffffff14;background:#ffffff0f;color:#eef3f9}.sidebar-panel[data-v-5372e93d]{padding:12px;border:1px solid rgba(255,255,255,.14);border-radius:var(--soft-radius);background:#ffffff0d}.sidebar-field[data-v-5372e93d]{display:flex;flex-direction:column;gap:6px;font-size:11px;font-weight:800;color:#f6f8fce0}.sidebar-nav[data-v-5372e93d]{display:flex;flex-direction:column;gap:0}.sidebar-nav .tab-button[data-v-5372e93d]{width:100%;display:flex;align-items:center;justify-content:flex-start;text-align:left;padding:15px 10px;border-radius:0;border-color:transparent;background:transparent;color:#edf1f8;font-size:17px;font-weight:400;line-height:1.2;transition:.2s}.sidebar-nav-icon[data-v-5372e93d]{flex:0 0 38px;width:38px;min-width:38px;display:flex;align-items:center;justify-content:center}.sidebar-nav-svg[data-v-5372e93d]{width:17px;height:17px;fill:currentColor}.sidebar-nav-copy[data-v-5372e93d]{flex:1;min-width:0;overflow:hidden;white-space:normal;line-height:1.15;padding-left:10px}.sidebar-nav .sidebar-nav-child[data-v-5372e93d]{width:100%;margin-left:0}.sidebar-nav .tab-button.active[data-v-5372e93d]{background:transparent;color:#fff}.sidebar-nav .tab-button[data-v-5372e93d]:hover{background:var(--hb-primary)}.sidebar-nav .tab-button[data-v-5372e93d]:disabled{opacity:.42;cursor:not-allowed;background:#ffffff0d;color:#edf1f89e}.sidebar-nav .tab-button[data-v-5372e93d]:disabled:hover{background:#ffffff0d}.sidebar-nav .tab-button:disabled .sidebar-nav-icon[data-v-5372e93d]{color:#edf1f89e}.sidebar-nav .tab-button.active .sidebar-nav-icon[data-v-5372e93d]{color:var(--hb-primary)}.sidebar-nav .tab-button.active:hover .sidebar-nav-icon[data-v-5372e93d]{color:#fff}.sidebar-nav-title[data-v-5372e93d]{display:block;font-size:17px;font-weight:400}.sidebar-nav-meta[data-v-5372e93d]{display:block;margin-top:3px;font-size:11px;opacity:.72;font-weight:600}.page-shell.sidebar-collapsed .sidebar-panel[data-v-5372e93d],.page-shell.sidebar-collapsed .sidebar-footer[data-v-5372e93d],.page-shell.sidebar-collapsed .sidebar-brand .eyebrow[data-v-5372e93d],.page-shell.sidebar-collapsed .sidebar-brand h1[data-v-5372e93d],.page-shell.sidebar-collapsed .sidebar-brand .subhead[data-v-5372e93d]{display:none}.page-shell.sidebar-collapsed .sidebar-brand-wrap[data-v-5372e93d]{grid-template-columns:1fr;justify-items:center}.page-shell.sidebar-collapsed .app-sidebar[data-v-5372e93d]{align-items:center;padding:14px 10px}.page-shell.sidebar-collapsed .sidebar-collapse-toggle[data-v-5372e93d]{margin-top:4px}.page-shell.sidebar-collapsed .sidebar-nav .tab-button[data-v-5372e93d]{justify-content:center;padding:15px 10px}.page-shell.sidebar-collapsed .sidebar-nav .sidebar-nav-child[data-v-5372e93d]{width:100%;margin-left:0}.page-shell.sidebar-collapsed .sidebar-nav-copy[data-v-5372e93d]{display:none}.sidebar-actions[data-v-5372e93d]{display:flex;flex-direction:column;gap:14px}.sidebar-section-toggle[data-v-5372e93d]{width:100%;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:0;border:0;background:transparent;color:#f6f8fb;text-align:left;font:inherit}.sidebar-section-toggle strong[data-v-5372e93d]{display:block;font-size:13px;font-weight:800}.sidebar-section-toggle small[data-v-5372e93d]{display:block;margin-top:3px;font-size:11px;opacity:.72}.sidebar-test-results[data-v-5372e93d]{display:flex;flex-direction:column;gap:10px}.sidebar-results-list[data-v-5372e93d]{display:flex;flex-direction:column;gap:8px;max-height:320px;overflow:auto;padding-right:2px}.sidebar-result-row[data-v-5372e93d]{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:stretch}.sidebar-result-delete-button[data-v-5372e93d]{width:74px;min-width:74px;padding:10px 8px;border:1px solid rgba(136,18,26,.88);background:linear-gradient(180deg,#b72b2bfa,#941717fa);color:#fff;font:inherit;font-size:11px;font-weight:800;letter-spacing:.01em}.sidebar-result-delete-button[data-v-5372e93d]:hover:not(:disabled){background:linear-gradient(180deg,#c73030,#a01b1b)}.sidebar-result-delete-button[data-v-5372e93d]:disabled{opacity:.72;cursor:wait}.sidebar-result-item[data-v-5372e93d]{display:flex;flex-direction:column;justify-content:center;width:100%;min-height:78px;text-align:left;border-color:#ffffff1f;background:#ffffff14;color:#edf1f8;transition:border-color .18s ease,background .18s ease,box-shadow .18s ease}.sidebar-result-item.active[data-v-5372e93d]{border-color:#ffffff57;background:linear-gradient(180deg,#6877b3a3,#45517cb8);box-shadow:inset 0 0 0 1px #ffffff14}.sidebar-result-item.running[data-v-5372e93d]{box-shadow:inset 0 0 0 1px #f0b3228c}.sidebar-result-head[data-v-5372e93d]{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%}.sidebar-result-head strong[data-v-5372e93d]{font-size:12px;font-weight:800}.sidebar-result-title[data-v-5372e93d]{display:inline-flex;align-items:center;gap:8px;min-width:0}.sidebar-result-item .area-list-meta[data-v-5372e93d],.sidebar-result-item .area-list-tags[data-v-5372e93d]{color:#edf1f8c7}.sidebar-result-status[data-v-5372e93d]{display:inline-flex;align-items:center;justify-content:flex-start;min-width:0;padding:0;border:0;background:transparent;color:#fff;font-size:11px;font-weight:800;text-transform:none}.sidebar-result-status.status-pass[data-v-5372e93d]{color:#8fe0a8}.sidebar-result-status.status-warn[data-v-5372e93d]{color:#ffd17a}.sidebar-result-status.status-fail[data-v-5372e93d]{color:#ffb9c3}.sidebar-empty-state[data-v-5372e93d]{margin:0;color:#f6f8fcc2}.results-page-layout[data-v-5372e93d]{grid-template-columns:minmax(320px,420px) minmax(0,1fr)}.results-page-list[data-v-5372e93d]{max-height:min(68vh,760px);padding-right:4px}.results-page-list .sidebar-result-item[data-v-5372e93d]{border-color:#7e889a4d;background:linear-gradient(180deg,#fdfeff,#f2f7fd);color:#243042}.results-page-list .sidebar-result-item.active[data-v-5372e93d]{border-color:#ef6c005c;background:linear-gradient(180deg,#fff7e9,#ffeccf);box-shadow:inset 0 0 0 1px #ef6c001f}.results-page-list .sidebar-result-item.running[data-v-5372e93d]{box-shadow:inset 0 0 0 1px #ff980080}.results-page-list .sidebar-result-item .area-list-meta[data-v-5372e93d],.results-page-list .sidebar-result-item .area-list-tags[data-v-5372e93d]{color:#556071}.results-page-list .sidebar-result-status[data-v-5372e93d]{color:#374151}.results-page-list .sidebar-result-status.status-pass[data-v-5372e93d]{color:#2f8d53}.results-page-list .sidebar-result-status.status-warn[data-v-5372e93d]{color:#ad730b}.results-page-list .sidebar-result-status.status-fail[data-v-5372e93d]{color:#b73845}.sidebar-action-button[data-v-5372e93d]{width:100%;justify-content:center}.sidebar-footer[data-v-5372e93d]{margin-top:auto;display:flex;flex-direction:column;gap:8px;padding-top:8px}.sidebar-doc-link[data-v-5372e93d]{display:inline-flex;align-items:center;width:fit-content;color:var(--hb-primary-dark);text-decoration:none;font-size:12px;font-weight:700}.sidebar-doc-link[data-v-5372e93d]:hover{text-decoration:underline}.support-link-row[data-v-5372e93d]{display:flex;flex-direction:column;gap:8px}.support-link-button[data-v-5372e93d]{display:flex;width:100%;justify-content:center;white-space:nowrap}.support-link-button-youtube[data-v-5372e93d]{background:#cc2f2f}.support-link-button-youtube[data-v-5372e93d]:hover{background:#b72727}.statusbar[data-v-5372e93d]{justify-content:space-between}.status-pill[data-v-5372e93d],.meta-chip[data-v-5372e93d],.pill[data-v-5372e93d]{display:inline-flex;align-items:center;gap:6px;border-radius:0;padding:0;border:0;background:transparent;font-size:12px;font-weight:700}.status-pill[data-v-5372e93d],.meta-chip[data-v-5372e93d],.pill.neutral[data-v-5372e93d]{color:var(--text)}.status-pill.error[data-v-5372e93d],.pill.danger[data-v-5372e93d]{color:#a4333a}.status-pill-spinner[data-v-5372e93d]{width:11px;height:11px;border-width:2px;border-color:#5a667a3d;border-top-color:currentColor}.pill.success[data-v-5372e93d]{color:#1b7d36}.status-detail[data-v-5372e93d]{color:inherit;font-size:12px;font-weight:700;opacity:.7}.content-grid[data-v-5372e93d]{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:16px}.workspace-main[data-v-5372e93d]{padding:0 2px 6px}.card[data-v-5372e93d]{grid-column:span 6;min-height:240px;padding:15px;border:1px solid var(--line);border-radius:var(--soft-radius);background:#fffffff0;box-shadow:0 16px 34px #121c2d14}.card-summary[data-v-5372e93d],.card-setup-doctor[data-v-5372e93d],.card-bus[data-v-5372e93d],.card-chat[data-v-5372e93d],.card-flow[data-v-5372e93d],.card-areas[data-v-5372e93d],.card-profiles[data-v-5372e93d]{grid-column:span 6}.card-setup-doctor[data-v-5372e93d]{border-color:#ef6c0066;background:linear-gradient(145deg,#fff8edfa,#fffffffa 72%)}.card-setup-doctor.setup-doctor-ready[data-v-5372e93d]{border-color:#2e7d326b;background:linear-gradient(145deg,#effaf0fa,#fffffffa 72%)}.card-setup-doctor.setup-doctor-blocked[data-v-5372e93d]{border-color:#c628286b;background:linear-gradient(145deg,#fff0f0fa,#fffffffa 72%)}.setup-doctor-score[data-v-5372e93d]{font-weight:800}.setup-doctor-summary[data-v-5372e93d]{margin:0 0 12px;color:#374151;line-height:1.5}.setup-doctor-check-list[data-v-5372e93d]{display:grid;gap:0}.setup-doctor-check[data-v-5372e93d]{display:flex;align-items:flex-start;gap:10px;padding:8px 0;border-top:1px solid rgba(120,120,120,.14)}.setup-doctor-check>div[data-v-5372e93d]{flex:1 1 auto;min-width:0}.setup-doctor-check p[data-v-5372e93d]{margin:3px 0 0;color:var(--muted);font-size:12px;line-height:1.4}.setup-doctor-check-badge[data-v-5372e93d]{display:inline-flex;align-items:center;justify-content:center;flex:0 0 24px;width:24px;height:24px;border-radius:50%;background:#e7edf4;color:#496174;font-size:13px;font-weight:900}.setup-doctor-check-badge.check-pass[data-v-5372e93d]{background:#dff0d8;color:#256029}.setup-doctor-check-badge.check-warn[data-v-5372e93d]{background:#fff3cd;color:#7a5200}.setup-doctor-check-badge.check-fail[data-v-5372e93d]{background:#f8d7da;color:#842029}.setup-doctor-demo[data-v-5372e93d]{margin-top:12px;padding-top:12px;border-top:1px dashed rgba(120,120,120,.24)}.setup-doctor-demo .preset-row[data-v-5372e93d]{align-items:stretch;margin-top:9px}.setup-doctor-demo-button[data-v-5372e93d]{flex:1 1 180px;white-space:normal;text-align:left}.card-flow[data-v-5372e93d],.card-anomalies[data-v-5372e93d]{grid-column:span 6}.card-flow[data-v-5372e93d],.card-areas[data-v-5372e93d],.card-profiles[data-v-5372e93d],.card-settings[data-v-5372e93d],.card-flow-builder[data-v-5372e93d]{grid-column:span 12}.card-chat[data-v-5372e93d]{grid-column:1 / -1;max-width:100%}.card-profiles[data-v-5372e93d]{border-color:#54607461;background:linear-gradient(180deg,#f4f7fbfa,#e9eef4fa);box-shadow:0 18px 36px #1118271f}.card-head[data-v-5372e93d]{display:flex;justify-content:space-between;gap:12px;align-items:center;margin-bottom:14px}.card-head-actions[data-v-5372e93d]{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.settings-tab-strip[data-v-5372e93d]{display:inline-flex;align-items:center;flex-wrap:wrap;gap:8px;margin-bottom:14px;padding:4px;border:1px solid rgba(123,133,151,.26);border-radius:var(--soft-radius);background:linear-gradient(180deg,#f4f7fbf2,#e9eef5f2)}.settings-tab-button[data-v-5372e93d]{border:1px solid transparent;border-radius:var(--soft-radius);background:transparent;color:#4a5565;font:inherit;font-size:12px;font-weight:800;padding:8px 12px;transition:.16s ease}.settings-tab-button[data-v-5372e93d]:hover{background:#66769424;color:#243042}.settings-tab-button.active[data-v-5372e93d]{border-color:#ef6c0057;background:linear-gradient(180deg,#fff7e9,#ffeccf);color:#8e4f00}.settings-panel[data-v-5372e93d]{border-color:#616c8057;background:linear-gradient(180deg,#fff,#f7fafd);box-shadow:0 2px #79839629}.settings-panel-head[data-v-5372e93d]{padding-bottom:10px;border-bottom:1px solid rgba(148,158,176,.32);margin-bottom:12px}.settings-node-grid[data-v-5372e93d]{display:grid;grid-template-columns:minmax(240px,420px) auto;gap:12px;align-items:end;margin-top:12px}.settings-node-checkbox[data-v-5372e93d]{width:fit-content;min-height:36px}.settings-config-actions[data-v-5372e93d]{margin-top:12px}.chat-learning-panel[data-v-5372e93d]{min-height:520px}.chat-learning-meta[data-v-5372e93d]{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}.chat-learning-dirty[data-v-5372e93d]{border-color:#ef6c005c;background:#ffefd5eb;color:#8e4f00}.chat-learning-size-over[data-v-5372e93d]{border-color:#c439396b!important;background:#ffe3e3f0!important;color:#a42828!important}.chat-learning-note[data-v-5372e93d]{margin:6px 0;color:#566174;font-size:12px;line-height:1.5}.chat-learning-path-field[data-v-5372e93d]{margin-top:14px}.chat-learning-path-field code[data-v-5372e93d]{display:block;padding:9px 11px;overflow-wrap:anywhere;border:1px solid rgba(116,128,149,.3);border-radius:var(--soft-radius);background:#ecf1f7db;color:#344054;font-family:JetBrains Mono,SFMono-Regular,monospace;font-size:11px}.chat-learning-editor[data-v-5372e93d]{width:100%;min-height:430px;margin-top:12px;padding:14px;resize:vertical;border:1px solid rgba(95,108,130,.44);border-radius:var(--soft-radius);background:#fbfcfe;color:#273142;font-family:JetBrains Mono,SFMono-Regular,Consolas,monospace;font-size:12px;line-height:1.55;tab-size:2;box-sizing:border-box}.chat-learning-editor[data-v-5372e93d]:focus{outline:2px solid rgba(239,108,0,.23);border-color:#ef6c00a3}.chat-learning-editor[data-v-5372e93d]:disabled{opacity:.68;cursor:wait}.chat-learning-error[data-v-5372e93d]{margin-top:10px}.chat-learning-actions[data-v-5372e93d]{margin-top:12px}.chat-learning-modified[data-v-5372e93d]{margin:12px 0 0}@media(max-width:900px){.settings-node-grid[data-v-5372e93d]{grid-template-columns:minmax(0,1fr);align-items:start}.settings-node-checkbox[data-v-5372e93d]{width:100%}.chat-learning-meta[data-v-5372e93d]{justify-content:flex-start}.chat-learning-editor[data-v-5372e93d]{min-height:360px}}.plan-run-actions[data-v-5372e93d]{display:inline-flex;align-items:center;gap:8px;flex-wrap:wrap;padding:6px;border:1px solid rgba(255,152,0,.42);border-radius:var(--soft-radius);background:linear-gradient(180deg,#fff1daf5,#ffe5b7eb)}.card-head h2[data-v-5372e93d]{margin:0;font-size:16px}.summary-pre[data-v-5372e93d],.chat-log[data-v-5372e93d]{margin:0;padding:14px;white-space:pre-wrap;word-break:break-word;font-family:JetBrains Mono,SFMono-Regular,monospace;font-size:12px;line-height:1.5}.metric-grid[data-v-5372e93d]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:14px}.metric[data-v-5372e93d]{display:flex;flex-direction:column;gap:6px;padding:0;border:0;border-radius:0;background:transparent;box-shadow:none}.metric span[data-v-5372e93d]{display:block;margin-bottom:0;color:var(--muted);font-size:12px;font-weight:700}.metric strong[data-v-5372e93d]{font-size:17px}.rank-list[data-v-5372e93d],.event-list[data-v-5372e93d],.anomaly-list[data-v-5372e93d]{margin:0;padding:0;list-style:none}.rank-row[data-v-5372e93d],.event-row[data-v-5372e93d]{display:grid;gap:8px;align-items:center;padding:10px 0;border-bottom:1px solid rgba(120,120,120,.14)}.rank-row[data-v-5372e93d]{grid-template-columns:minmax(86px,120px) minmax(0,1fr) auto}.event-row[data-v-5372e93d]{grid-template-columns:minmax(0,1fr) minmax(0,1.6fr) auto}.rank-title[data-v-5372e93d],.event-name[data-v-5372e93d]{font-weight:800}.rank-label[data-v-5372e93d]{color:var(--muted);font-size:12px}.event-bar[data-v-5372e93d]{height:10px;overflow:hidden;border-radius:var(--soft-radius);background:#ff98001f}.event-bar-fill[data-v-5372e93d]{display:block;height:100%;border-radius:var(--soft-radius);background:linear-gradient(90deg,var(--accent),#4bbf77)}.areas-toolbar[data-v-5372e93d]{display:flex;flex-wrap:wrap;gap:12px;align-items:end;margin-bottom:16px}.areas-layout[data-v-5372e93d]{display:flex;flex-direction:column;gap:16px}.area-list-item[data-v-5372e93d]{display:flex;flex-direction:column;gap:6px;align-items:flex-start;padding:11px 12px;border:1px solid var(--line);border-radius:var(--soft-radius);background:#ffffffe6;color:var(--text);text-align:left;transition:.18s ease}.area-list-item[data-v-5372e93d]:hover,.area-list-item.active[data-v-5372e93d]{border-color:#ff980057;background:var(--accent-soft)}.area-list-title[data-v-5372e93d]{font-weight:800}.area-listbox-shell[data-v-5372e93d]{width:100%}.area-search-select[data-v-5372e93d]{position:relative}.area-search-select-input[data-v-5372e93d]{width:100%;border:1px solid var(--line);background:#ffffffeb;color:var(--text);padding:8px 10px;font-size:12px;line-height:1.35;border-radius:var(--soft-radius)}.area-search-select-menu[data-v-5372e93d]{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:8;max-height:280px;overflow:auto;border:1px solid var(--line);background:#fffffffa;border-radius:var(--soft-radius)}.area-search-select-option[data-v-5372e93d]{display:block;width:100%;padding:8px 10px;border:0;border-bottom:1px solid rgba(120,120,120,.1);background:transparent;color:var(--text);text-align:left;font-size:12px;line-height:1.35}.area-search-select-option[data-v-5372e93d]:hover,.area-search-select-option.active[data-v-5372e93d]{background:var(--accent-soft)}.area-list-meta[data-v-5372e93d],.area-list-tags[data-v-5372e93d],.area-detail-subhead[data-v-5372e93d]{color:var(--muted);font-size:12px}.area-detail[data-v-5372e93d]{min-width:0;width:100%;padding:14px;border:1px solid var(--line);border-radius:var(--soft-radius);background:linear-gradient(180deg,#fffffff5,#f8f5ffeb)}.profiles-layout[data-v-5372e93d]{display:grid;grid-template-columns:minmax(260px,340px) minmax(0,1fr);gap:16px}.test-planner-layout[data-v-5372e93d]{display:flex;flex-direction:column;gap:16px;align-items:stretch}.result-only-layout[data-v-5372e93d]{grid-template-columns:minmax(0,1fr)}.card-results-focus[data-v-5372e93d]{grid-column:span 12}.profile-list[data-v-5372e93d],.profile-editor-stack[data-v-5372e93d]{display:flex;flex-direction:column;gap:12px}.planner-sidecard[data-v-5372e93d]{gap:12px}.card-profiles .area-detail[data-v-5372e93d]{border-color:#616c8057;background:linear-gradient(180deg,#fff,#f7fafd);box-shadow:0 2px #79839629}.card-profiles .card-head[data-v-5372e93d]{padding-bottom:10px;border-bottom:1px solid rgba(148,158,176,.32)}.card-profiles .area-detail-subhead[data-v-5372e93d]{color:#4b5565}.card-profiles .meta-chip[data-v-5372e93d],.card-profiles .pill.neutral[data-v-5372e93d]{border:0;background:transparent;color:#1c2430}.card-profiles .planner-list .area-list-item[data-v-5372e93d]{border-color:#8892a559;background:linear-gradient(180deg,#fffffffa,#f4f7fbfa);box-shadow:0 1px #99a3b524}.card-profiles .planner-list .area-list-item[data-v-5372e93d]:hover,.card-profiles .planner-list .area-list-item.active[data-v-5372e93d]{border-color:#4a5a909e;background:linear-gradient(180deg,#e0e6f3f5,#d6deeef5)}.card-profiles .metric[data-v-5372e93d]{padding:0;border:0;border-radius:0;background:transparent;box-shadow:none}.card-profiles .metric span[data-v-5372e93d]{color:#475163}.card-profiles .metric strong[data-v-5372e93d]{color:#161d29;font-size:20px}.ai-planner-shell[data-v-5372e93d]{margin-top:12px;padding:12px;border:1px solid rgba(120,120,120,.24);background:#f4f7fcf5;border-radius:var(--soft-radius)}.ai-planner-shell-head[data-v-5372e93d]{margin-bottom:12px}.ai-planner-shell-head.template-builder-focus-head[data-v-5372e93d]{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;flex-wrap:wrap}.ai-planner-shell-head h4[data-v-5372e93d]{margin:0}.planner-pairs[data-v-5372e93d]{margin-top:12px}.planner-generation[data-v-5372e93d]{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-top:14px;padding:10px 12px;border:1px solid rgba(126,136,154,.24);background:linear-gradient(180deg,#f0f4f9fa,#e7edf4fa)}.planner-error-banner[data-v-5372e93d]{margin:14px 0 0;padding:10px 12px;border:1px solid #b42318;background:#fef3f2;color:#b42318;font-weight:700;white-space:pre-wrap;word-break:break-word}.planner-step-card[data-v-5372e93d]{border:1px solid rgba(132,143,160,.28);border-left:5px solid rgba(112,122,141,.66);background:linear-gradient(180deg,#fff,#f4f8fc);box-shadow:0 2px #7b859724;cursor:default}.planner-step-running[data-v-5372e93d]{border-left-color:#3d5ca8;background:linear-gradient(180deg,#f5f9ff,#e9f0fb);box-shadow:0 0 0 2px #3d5ca829}.planner-step-dragging[data-v-5372e93d]{opacity:.56;cursor:grabbing}.planner-step-drop-target[data-v-5372e93d]{box-shadow:0 0 0 2px #46b86d2e;border-left-color:#46b86d}.planner-step-title[data-v-5372e93d]{display:flex;align-items:center;gap:10px}.planner-step-summary[data-v-5372e93d]{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px 14px;margin-top:10px;padding:10px 12px;border:1px solid rgba(155,165,183,.24);background:#f1f5f9f0;color:#4c5566;font-size:12px}.drag-handle[data-v-5372e93d]{display:inline-flex;align-items:center;justify-content:center;min-width:26px;height:24px;border:1px solid rgba(120,120,120,.18);border-radius:var(--soft-radius);background:#ffffffd6;color:var(--muted);font-size:12px;font-weight:800;cursor:grab;-webkit-user-select:none;user-select:none}.collapse-toggle[data-v-5372e93d]{display:inline-flex;align-items:center;justify-content:center;min-width:28px;height:28px;border:1px solid rgba(120,120,120,.18);border-radius:var(--soft-radius);background:#ffffffd6;color:var(--text);cursor:pointer}.collapse-icon[data-v-5372e93d]{display:inline-block;font-size:12px;line-height:1;transition:transform .16s ease}.collapse-icon.collapsed[data-v-5372e93d]{transform:rotate(-90deg)}.planner-step-editor[data-v-5372e93d]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 12px;margin-top:10px;padding:12px;border:1px solid rgba(155,165,183,.24);background:#f7fafdf5}.planner-field-group[data-v-5372e93d]{padding:10px 12px 12px;border:1px solid rgba(155,165,183,.28);background:#ffffffe6}.planner-field-group h4[data-v-5372e93d]{margin:0 0 10px;font-size:12px;letter-spacing:.04em;text-transform:uppercase;color:#1d2433}.planner-field-group-grid[data-v-5372e93d]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 12px}.planner-field-group-grid .group-span[data-v-5372e93d]{grid-column:1 / -1}.planner-check-sections[data-v-5372e93d]{display:grid;gap:10px;margin-top:10px}.planner-check-section[data-v-5372e93d]{padding:10px 12px;border:1px solid rgba(155,165,183,.28);background:#ffffffdb}.planner-check-section h4[data-v-5372e93d]{margin:0 0 8px;font-size:12px;letter-spacing:.04em;text-transform:uppercase;color:#1d2433}.planner-check-section .area-detail-subhead[data-v-5372e93d]{margin:0 0 8px}.running-headline[data-v-5372e93d]{display:inline-flex;align-items:center;gap:10px;margin:0}.running-spinner[data-v-5372e93d]{width:14px;height:14px;display:inline-block;border-radius:50%;border:2px solid rgba(90,102,122,.28);border-top-color:#5a667a;animation:running-spin-5372e93d .85s linear infinite}.run-button-spinner[data-v-5372e93d]{margin-right:6px;vertical-align:-2px}.run-chip-spinner[data-v-5372e93d]{width:12px;height:12px;margin-right:6px}@keyframes running-spin-5372e93d{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.editor-check-sections[data-v-5372e93d]{grid-column:1 / -1}.compact-grid[data-v-5372e93d]{grid-template-columns:repeat(2,minmax(0,1fr));margin-top:0}.result-check-sections .planner-check-section[data-v-5372e93d]{background:#fafcfffa}.planner-step-grid[data-v-5372e93d]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 14px;margin-top:10px;color:#4c5566;font-size:12px}.area-detail h3[data-v-5372e93d],.area-detail h4[data-v-5372e93d]{margin:0}.area-detail-subhead[data-v-5372e93d]{margin:6px 0 0}.area-metrics[data-v-5372e93d]{margin-top:4px}.area-chips[data-v-5372e93d]{display:flex;flex-wrap:wrap;gap:8px;margin:14px 0}.area-editor[data-v-5372e93d]{margin:14px 0 18px;padding:12px;border:1px solid rgba(120,120,120,.16);border-radius:var(--soft-radius);background:#ffffffb8}.area-editor-grid[data-v-5372e93d]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.area-editor-span[data-v-5372e93d]{grid-column:1 / -1}.area-editor-note[data-v-5372e93d]{margin:12px 0 0;color:var(--muted);font-size:12px}.compact-preset-row[data-v-5372e93d]{margin-top:10px}.compact-preset-row .preset-button[data-v-5372e93d]{text-align:left;font-size:11px;padding:7px 10px}.area-ga-editor[data-v-5372e93d]{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;margin-top:16px}.area-ga-list[data-v-5372e93d],.area-ga-catalog[data-v-5372e93d]{max-height:320px;overflow:auto}.area-ga-item[data-v-5372e93d]{display:flex;justify-content:space-between;gap:12px;align-items:center;padding:10px 0;border-bottom:1px solid rgba(120,120,120,.12)}.area-ga-main[data-v-5372e93d]{min-width:0;flex:1}.area-ga-actions[data-v-5372e93d]{display:flex;align-items:end;gap:10px;flex-wrap:wrap}.area-ga-role-field[data-v-5372e93d]{min-width:148px}.area-ga-item strong[data-v-5372e93d],.planner-step-grid strong[data-v-5372e93d]{color:var(--text)}.area-ga-item span[data-v-5372e93d]{display:block;color:var(--muted);font-size:12px}.profile-runbar[data-v-5372e93d]{display:flex;flex-wrap:wrap;gap:12px;justify-content:space-between;align-items:center;margin-top:16px;padding:10px 12px;border:1px solid rgba(118,129,147,.22);background:linear-gradient(180deg,#eff4fafa,#e6ecf4fa)}.area-columns[data-v-5372e93d]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin:16px 0}.simple-list[data-v-5372e93d]{margin:10px 0 0;padding-left:18px}.simple-list li[data-v-5372e93d]{margin-bottom:6px}.simple-list-mono[data-v-5372e93d]{font-family:JetBrains Mono,SFMono-Regular,monospace;font-size:11px}.report-checks[data-v-5372e93d]{display:grid;gap:10px;margin:16px 0}.plan-steps-stack[data-v-5372e93d]{margin-left:12px;padding-left:12px}.plan-draft-shell[data-v-5372e93d]{margin-left:12px;width:calc(100% - 12px)}.report-check[data-v-5372e93d]{padding:12px;border:1px solid rgba(139,149,167,.28);border-radius:var(--soft-radius);border-left:4px solid var(--line);background:#fffffff5;box-shadow:0 1px #8c96a824}.report-pass[data-v-5372e93d]{border-left-color:#46b86d;background:linear-gradient(180deg,#f7fcf8,#eef7f0)}.report-warn[data-v-5372e93d]{border-left-color:#d99a34;background:linear-gradient(180deg,#fffaf2,#fcf4e5)}.report-fail[data-v-5372e93d]{border-left-color:#d94b55;background:linear-gradient(180deg,#fff6f6,#fceced)}.bus-track[data-v-5372e93d]{position:relative;height:18px;margin-top:16px;overflow:hidden;border:1px solid rgba(120,120,120,.2);border-radius:var(--soft-radius);background:linear-gradient(180deg,#fff8ea,#fff2dc)}.bus-segment[data-v-5372e93d]{position:absolute;top:0;bottom:0}.segment-connected[data-v-5372e93d]{background:linear-gradient(90deg,#4ad06d,#38c45f)}.segment-disconnected[data-v-5372e93d]{background:linear-gradient(90deg,#eb6a74,#d94b55)}.bus-scale[data-v-5372e93d]{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:10px;color:var(--muted);font-size:12px;font-weight:700}.bus-scale span[data-v-5372e93d]:nth-child(2){text-align:center}.bus-scale span[data-v-5372e93d]:nth-child(3){text-align:right}.bus-note[data-v-5372e93d],.flow-note[data-v-5372e93d],.empty-state[data-v-5372e93d]{color:var(--muted);line-height:1.5}.flow-toolbar[data-v-5372e93d]{display:grid;grid-template-columns:120px minmax(180px,1fr) minmax(220px,1.2fr) auto;gap:12px;align-items:start}.flow-field[data-v-5372e93d]{display:flex;flex-direction:column;gap:6px;color:var(--muted);font-size:11px;font-weight:700}.flow-field input[data-v-5372e93d],.flow-field select[data-v-5372e93d],.flow-field textarea[data-v-5372e93d]{border:1px solid var(--line);border-radius:var(--soft-radius);background:#ffffffe0;color:var(--text);padding:7px 10px;min-height:36px;box-sizing:border-box;line-height:1.25;font-size:12px}.flow-field select[data-v-5372e93d]{padding-right:28px}.flow-field textarea[data-v-5372e93d]{resize:vertical;min-height:62px;font:inherit}.flow-field select[multiple][data-v-5372e93d],.flow-field-select select[data-v-5372e93d]{min-height:108px;padding-right:10px}.compact-actions[data-v-5372e93d]{justify-content:flex-end}.compact-toggle[data-v-5372e93d]{min-height:40px}.modal-backdrop[data-v-5372e93d]{position:fixed;inset:0;z-index:80;display:flex;align-items:center;justify-content:center;padding:20px;background:#221d3057;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.global-wait-overlay[data-v-5372e93d]{position:fixed;inset:0;z-index:260;display:flex;align-items:center;justify-content:center;padding:20px;background:#10141c6b;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.global-wait-card[data-v-5372e93d]{width:min(420px,100%);display:flex;flex-direction:column;align-items:center;gap:10px;padding:18px 20px;border:1px solid rgba(118,128,145,.38);background:#fffffff5;color:#1d2433;text-align:center;box-shadow:0 14px 38px #080c1333}.global-wait-card strong[data-v-5372e93d]{font-size:15px}.global-wait-card span[data-v-5372e93d]{font-size:13px;color:#4d5a6e}.global-wait-spinner[data-v-5372e93d]{width:20px;height:20px;border-width:2px}.modal-card[data-v-5372e93d]{width:min(420px,100%);padding:18px;border:1px solid var(--line);border-radius:var(--soft-radius);background:#fffffffa;box-shadow:var(--shadow)}.modal-card h3[data-v-5372e93d]{margin:0 0 8px;font-size:18px}.modal-actions[data-v-5372e93d]{display:flex;justify-content:flex-end;gap:10px;margin-top:16px}.flow-legend[data-v-5372e93d]{grid-column:1 / -1;display:flex;flex-wrap:nowrap;gap:10px 14px;align-items:center;padding:10px 0 0;color:var(--muted);font-size:12px;font-weight:700;white-space:nowrap;overflow-x:auto;overflow-y:hidden;scrollbar-width:thin}.flow-legend span[data-v-5372e93d]{display:inline-flex;align-items:center;white-space:nowrap;flex:0 0 auto}.flow-toggle[data-v-5372e93d]{align-self:end;min-height:44px;white-space:nowrap}.flow-toggle-inline[data-v-5372e93d]{align-self:flex-start;min-height:auto;margin-top:6px}.legend-line[data-v-5372e93d],.legend-dot[data-v-5372e93d]{display:inline-block;vertical-align:middle;margin-right:6px}.legend-line[data-v-5372e93d]{width:18px;border-top:3px solid currentColor}.legend-write[data-v-5372e93d]{color:#ff9800}.legend-response[data-v-5372e93d]{color:#46b86d}.legend-read[data-v-5372e93d]{color:#d99a34}.legend-repeat[data-v-5372e93d]{color:#c34747}.legend-dot[data-v-5372e93d]{width:10px;height:10px;border-radius:var(--soft-radius)}.legend-anomaly[data-v-5372e93d]{background:#f08f92}.legend-external[data-v-5372e93d]{background:#f5d9a2}.flow-frame[data-v-5372e93d]{margin-top:16px;overflow:auto;border:1px solid var(--line);border-radius:var(--soft-radius);background:linear-gradient(180deg,#fffffffa,#f8f5fff5)}.card-flow.is-fullscreen[data-v-5372e93d]{width:100%;height:100%;margin:0;padding:18px;border-radius:var(--soft-radius);background:#fffffffa;overflow:auto}.card-flow.is-fullscreen .flow-frame[data-v-5372e93d]{height:calc(100vh - 260px)}.card-flow.is-fullscreen .flow-svg[data-v-5372e93d]{min-height:calc(100vh - 260px)}.flow-svg[data-v-5372e93d]{width:100%;min-width:1180px;min-height:420px;display:block}.flow-empty[data-v-5372e93d]{padding:24px}.flow-edge[data-v-5372e93d]{fill:none;stroke-linecap:round;vector-effect:non-scaling-stroke}.flow-edge-active[data-v-5372e93d]{stroke-dasharray:10 7;animation:graph-flow-5372e93d 1.25s linear infinite}.flow-edge-idle[data-v-5372e93d]{stroke-dasharray:8 8;animation:none}@keyframes graph-flow-5372e93d{0%{stroke-dashoffset:0}to{stroke-dashoffset:-34}}.flow-node circle[data-v-5372e93d]{fill:#edf9ef;stroke:#4caf66;stroke-width:2}.flow-node.is-anomaly circle[data-v-5372e93d]{fill:#fff1f1;stroke:#e53935}.flow-node.is-external circle[data-v-5372e93d]{fill:#fff8ea;stroke:#c98a1a;stroke-dasharray:4 3}.flow-node.is-idle circle[data-v-5372e93d]{opacity:.7}.node-label[data-v-5372e93d],.node-subtitle[data-v-5372e93d],.node-payload[data-v-5372e93d],.node-badge[data-v-5372e93d]{text-anchor:middle;dominant-baseline:middle}.node-label[data-v-5372e93d]{fill:#2f7f48;font-size:12px;font-weight:800}.flow-node.is-external .node-label[data-v-5372e93d]{fill:#9a6b24}.node-subtitle[data-v-5372e93d]{fill:#7a7368;font-size:10px}.node-payload[data-v-5372e93d]{fill:#746d62;font-size:9px;font-family:JetBrains Mono,SFMono-Regular,monospace}.node-badge[data-v-5372e93d]{fill:#b3261e;font-size:9px;font-weight:800}.anomaly-list[data-v-5372e93d]{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px}.anomaly-card[data-v-5372e93d]{padding:14px;border-left:4px solid var(--warn-border);border-radius:var(--soft-radius);background:var(--warn-bg)}.anomaly-head[data-v-5372e93d]{display:flex;justify-content:space-between;gap:10px;align-items:baseline}.anomaly-time[data-v-5372e93d]{margin:8px 0 10px;color:var(--muted);font-size:12px}.anomaly-card pre[data-v-5372e93d]{margin:0;padding:12px;white-space:pre-wrap;word-break:break-word;font-size:12px}.chat-log[data-v-5372e93d]{min-height:280px}.ask-row[data-v-5372e93d]{margin-top:12px;margin-bottom:0;padding:10px;border:1px solid rgba(255,152,0,.34);border-radius:var(--soft-radius);background:linear-gradient(180deg,#fff8e8db,#fff3d6cc)}.ask-input[data-v-5372e93d]{flex:1 1 260px;min-width:0;border:2px solid var(--hb-primary);border-radius:var(--soft-radius);background:#fff;color:var(--text);padding:11px 14px;box-shadow:0 0 0 2px #ff980024}.ask-input[data-v-5372e93d]:focus{outline:none;border-color:#ef6c00;box-shadow:0 0 0 3px #ef6c0038}.chat-message[data-v-5372e93d]{margin-bottom:12px;padding:12px;border-radius:var(--soft-radius)}.chat-message pre[data-v-5372e93d]{margin:0;white-space:pre-wrap;word-break:break-word;font-family:inherit}.chat-user[data-v-5372e93d]{background:#ff98001f}.chat-assistant[data-v-5372e93d]{background:#5bbf731f}.chat-error[data-v-5372e93d]{background:var(--err-bg)}.chat-pending[data-v-5372e93d]{display:inline-flex;align-items:center;gap:8px;background:#78787814;color:var(--muted)}.chat-pending-spinner[data-v-5372e93d]{width:14px;height:14px;border-radius:50%;border:2px solid rgba(90,102,122,.28);border-top-color:#5a667a;animation:chat-pending-spin-5372e93d .75s linear infinite}@keyframes chat-pending-spin-5372e93d{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.card-flow-builder[data-v-5372e93d]{display:flex;flex-direction:column;gap:12px}.beta-badge[data-v-5372e93d]{display:inline-block;margin-left:8px;padding:2px 7px;border-radius:999px;background:#ff9800;color:#fff;font-size:10px;font-weight:700;letter-spacing:.06em;vertical-align:middle;text-transform:uppercase}.flow-builder-split[data-v-5372e93d]{display:flex;flex-wrap:wrap;gap:16px;align-items:stretch}.flow-builder-pane[data-v-5372e93d]{flex:1 1 300px;min-width:0;display:flex;flex-direction:column;gap:12px}.flow-builder-input[data-v-5372e93d]{flex:1 1 300px;max-width:520px}.flow-builder-output[data-v-5372e93d]{flex:1.6 1 340px;min-height:120px}.flow-builder-placeholder[data-v-5372e93d]{margin:0;display:flex;align-items:center;justify-content:center;flex:1;min-height:120px;padding:16px;border:1px dashed rgba(90,102,122,.3);border-radius:var(--soft-radius, 10px);color:var(--muted-text, #5a667a);font-size:13px;text-align:center}.flow-builder-hint[data-v-5372e93d]{margin:0;color:var(--muted-text, #5a667a);font-size:13px;line-height:1.5}.flow-builder-compose[data-v-5372e93d]{display:flex;flex-direction:column;gap:10px}.flow-builder-textarea[data-v-5372e93d]{width:100%;resize:vertical;min-height:90px;padding:10px 12px;border:1px solid rgba(90,102,122,.28);border-radius:var(--soft-radius, 10px);font:inherit;line-height:1.5;box-sizing:border-box}.flow-builder-actions[data-v-5372e93d]{display:flex;justify-content:flex-end}.flow-builder-pending[data-v-5372e93d]{display:flex;align-items:center;gap:10px;color:var(--muted-text, #5a667a);font-size:13px}.flow-builder-error[data-v-5372e93d]{border:1px solid rgba(214,69,69,.4);background:#d6454514;border-radius:var(--soft-radius, 10px);padding:8px 12px}.flow-builder-error pre[data-v-5372e93d]{margin:0;white-space:pre-wrap;word-break:break-word;color:#b3261e;font-size:13px}.flow-builder-result[data-v-5372e93d]{display:flex;flex-direction:column;gap:10px}.flow-builder-notes[data-v-5372e93d]{margin:0;font-size:13px;line-height:1.5}.flow-builder-warnings[data-v-5372e93d]{margin:0;padding-left:18px;color:#8a6d00;font-size:12px;line-height:1.5}.flow-builder-result-head[data-v-5372e93d]{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.flow-builder-result-head .secondary-button[data-v-5372e93d]{margin-left:auto}.flow-builder-json[data-v-5372e93d]{margin:0;max-height:420px;overflow:auto;padding:12px;border:1px solid rgba(90,102,122,.22);border-radius:var(--soft-radius, 10px);background:#1e2330;color:#e6e9f0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;line-height:1.5;white-space:pre}[data-v-5372e93d] .chat-svg-wrap{margin-top:10px;overflow:auto;border:1px solid rgba(255,152,0,.25);border-radius:var(--soft-radius);background:#fff;padding:8px}[data-v-5372e93d] .chat-svg-wrap svg{width:100%;height:auto;display:block}[data-v-5372e93d] .chat-table-wrap{overflow:auto}[data-v-5372e93d] .chat-table-wrap table,[data-v-5372e93d] table{width:100%;border-collapse:collapse;margin-top:8px}[data-v-5372e93d] th,[data-v-5372e93d] td{padding:6px 8px;border:1px solid rgba(120,120,120,.16)}@media(max-width:1100px){.page-shell[data-v-5372e93d]{width:min(100% - 12px,1600px);min-height:100vh;margin-top:6px;grid-template-columns:1fr;gap:10px}.m-header[data-v-5372e93d]{display:flex}.app-sidebar[data-v-5372e93d]{position:fixed;top:0;left:0;z-index:200;width:210px;height:100vh;margin:0;border-radius:0;transform:translate(-104%);transition:transform .24s ease;overflow-y:auto}.page-shell.sidebar-mobile-open .app-sidebar[data-v-5372e93d]{transform:translate(0)}.workspace-shell[data-v-5372e93d]{padding-top:70px}.app-sidebar[data-v-5372e93d],.workspace-shell[data-v-5372e93d]{border-radius:var(--soft-radius)}.sidebar-nav[data-v-5372e93d]{display:flex;grid-template-columns:none}.card[data-v-5372e93d],.card-summary[data-v-5372e93d],.card-bus[data-v-5372e93d],.card-chat[data-v-5372e93d],.card-flow[data-v-5372e93d],.card-anomalies[data-v-5372e93d],.card-areas[data-v-5372e93d],.card-profiles[data-v-5372e93d]{grid-column:span 12}.card-chat[data-v-5372e93d]{max-width:100%}}@media(max-width:720px){.page-shell[data-v-5372e93d]{width:min(100% - 8px,1440px);gap:8px}.workspace-shell[data-v-5372e93d]{padding:12px}.topbar[data-v-5372e93d],.card[data-v-5372e93d]{padding:14px;border-radius:var(--soft-radius)}.sidebar-nav[data-v-5372e93d]{grid-template-columns:none}.rank-row[data-v-5372e93d],.event-row[data-v-5372e93d],.metric-grid[data-v-5372e93d],.flow-toolbar[data-v-5372e93d],.areas-layout[data-v-5372e93d],.area-columns[data-v-5372e93d],.profiles-layout[data-v-5372e93d],.area-ga-editor[data-v-5372e93d],.area-editor-grid[data-v-5372e93d],.planner-step-editor[data-v-5372e93d],.planner-step-grid[data-v-5372e93d]{grid-template-columns:1fr}.statusbar[data-v-5372e93d]{align-items:flex-start}.plan-steps-stack[data-v-5372e93d]{margin-left:6px;padding-left:8px}.plan-draft-shell[data-v-5372e93d]{margin-left:6px;width:calc(100% - 6px)}}:root{color-scheme:light;--bg: #f4f4f4;--panel: #ffffff;--panel-soft: #efefef;--text: #333333;--muted: #666666;--line: rgba(0, 0, 0, .125);--accent: #ff9800;--accent-soft: #fff3e0;--ok-bg: #edf9ef;--ok-border: #5bbf73;--err-bg: #ffe9ea;--err-border: #d95b63;--warn-bg: #fff5e3;--warn-border: #d99a34;--card-radius: 4px;--shadow: 0 12px 32px rgba(0, 0, 0, .12);font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}*{box-sizing:border-box}html,body,#app{min-height:100%;margin:0}body{background:#f4f4f4;color:var(--text)}button,input,select,textarea{font:inherit}a{color:inherit}
|