node-red-contrib-knx-ultimate 6.3.28 → 6.3.30
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 +5 -1
- package/nodes/knxUltimateAI.js +6 -3
- package/nodes/locales/de/knxUltimateAI.html +1 -1
- package/nodes/locales/en/knxUltimateAI.html +1 -1
- package/nodes/locales/es/knxUltimateAI.html +1 -1
- package/nodes/locales/fr/knxUltimateAI.html +1 -1
- package/nodes/locales/it/knxUltimateAI.html +1 -1
- package/nodes/locales/zh-CN/knxUltimateAI.html +1 -1
- 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 +74 -4
- package/package.json +1 -1
- package/resources/KNXAIChatAdapterMappings.js +60 -5
package/CHANGELOG.md
CHANGED
|
@@ -6,7 +6,11 @@
|
|
|
6
6
|
|
|
7
7
|
# CHANGELOG
|
|
8
8
|
|
|
9
|
-
**Version 6.3.
|
|
9
|
+
**Version 6.3.30** - August 2026<br/>
|
|
10
|
+
|
|
11
|
+
- **KNX AI — two-way RedBot Telegram voice chat**: the `RedBot / node-red-contrib-chatbot (Telegram)` preset now accepts RedBot's native inbound `audio` payload and its already-downloaded OGG/Opus `Buffer`, applies the same 20 MB and five-minute safeguards without downloading the file a second time, and transcribes it through the selected OpenAI-compatible provider. Successful requests receive a native RedBot `audio` reply with the localized AI-generated-voice disclosure and text caption; KNX confirmations deliberately remain RedBot `inline-buttons` text messages because its Telegram voice sender cannot attach that keyboard to `sendVoice`. Existing saved RedBot input/output mappings are upgraded at runtime. The separate `windkh/node-red-contrib-telegrambot` voice contract and its tests remain unchanged.<br/>
|
|
12
|
+
|
|
13
|
+
**Version 6.3.29** - August 2026<br/>
|
|
10
14
|
|
|
11
15
|
- **KNX AI — patient provider-neutral model requests**: every LLM chat request now receives the same 30-minute minimum deadline, regardless of provider, model or model manager, while longer legacy configured values remain honored. The model transport carries that deadline through both streaming and non-streaming responses instead of inheriting a shorter HTTP-library header timeout; fast responses are returned immediately, model-response timeouts remain distinct from unreachable-server errors, and Telegram audio operations retain their separate two-minute safeguard.<br/>
|
|
12
16
|
- **KNX AI — provider-neutral reasoning control and responsive chat**: added a localized **Reasoning effort** selector with provider/model default, `none`, `minimal`, `low`, `medium`, `high`, `xhigh` and `max` choices. The default sends no preference; explicit supported values are mapped by request protocol to Chat Completions `reasoning_effort`, Anthropic `output_config.effort` or Ollama `think`, without model-name allowlists, and a rejected preference is removed while preserving the rest of the request. OpenAI-compatible and Ollama chats now stream responses for every configured endpoint, keep reasoning traces separate from the structured user reply and retry without streaming when an endpoint rejects it. Abort and HTTP transport timeouts are reported as model-response timeouts instead of as false connection failures; genuine unreachable-server errors retain their provider-specific setup guidance. Context-error compaction remains in force. Editor help and wiki documentation were aligned in EN, IT, DE, FR, ES and zh-CN.<br/>
|
package/nodes/knxUltimateAI.js
CHANGED
|
@@ -834,6 +834,7 @@ const buildKnxAiSetupDoctorSnapshot = ({
|
|
|
834
834
|
if (apiKeyRequired && llm.apiKeyConfigured !== true) missing.push('API key')
|
|
835
835
|
const providerReady = missing.length === 0
|
|
836
836
|
const chatPreset = String(llm.chatAdapterPreset || 'none').trim() || 'none'
|
|
837
|
+
const telegramVoiceApplicable = ['windkh-telegrambot', 'redbot-telegram'].includes(chatPreset)
|
|
837
838
|
const chatPresetLabels = {
|
|
838
839
|
'windkh-telegrambot': 'Telegram Bot',
|
|
839
840
|
'redbot-telegram': 'RedBot Telegram'
|
|
@@ -903,7 +904,7 @@ const buildKnxAiSetupDoctorSnapshot = ({
|
|
|
903
904
|
{ id: 'chat', status: chatStatus, blocking: chatPreset !== 'none', weight: chatPreset !== 'none' ? 10 : 0, details: { preset: chatPreset, presetLabel: chatPresetLabels[chatPreset] || chatPreset, ready: chatVerified, wired: chatWired, upstreamCount, outputConnected: assistantOutput.connected === true } },
|
|
904
905
|
{ id: 'commands', status: commandStatus, blocking: llm.allowKnxCommands === true, weight: llm.allowKnxCommands === true ? 10 : 0, details: { enabled: llm.allowKnxCommands === true, connected: commandOutput.connected === true, verified: commandTargetVerified } },
|
|
905
906
|
{ id: 'tts', status: ttsOutput.connected === true ? 'pass' : 'info', blocking: false, weight: 0, details: { connected: ttsOutput.connected === true, connectionCount: Math.max(0, Number(ttsOutput.connectionCount) || 0) } },
|
|
906
|
-
{ id: 'voice', status:
|
|
907
|
+
{ id: 'voice', status: !telegramVoiceApplicable ? 'info' : provider === 'openai_compat' && providerReady ? 'pass' : 'warn', blocking: false, weight: 0, details: { applicable: telegramVoiceApplicable, ready: telegramVoiceApplicable && provider === 'openai_compat' && providerReady } },
|
|
907
908
|
{ id: 'cameras', status: Number(integrations.cameraCount) > 0 ? 'pass' : 'info', blocking: false, weight: 0, details: { cameraCount: Math.max(0, Number(integrations.cameraCount) || 0), adapterCount: Math.max(0, Number(integrations.cameraAdapterCount) || 0) } },
|
|
908
909
|
{ id: 'webAccess', status: webDetails.enabled ? 'pass' : 'info', blocking: false, weight: 0, details: webDetails },
|
|
909
910
|
{ id: 'proactiveWeb', status: proactiveWebStatus, blocking: false, weight: 0, details: proactiveWebDetails }
|
|
@@ -12741,7 +12742,7 @@ module.exports = function (RED) {
|
|
|
12741
12742
|
|
|
12742
12743
|
const prepareKnxAiTelegramVoiceInput = async (message) => {
|
|
12743
12744
|
if (!isKnxAiTelegramVoiceInput(message)) return message
|
|
12744
|
-
if (
|
|
12745
|
+
if (!['windkh-telegrambot', 'redbot-telegram'].includes(node.chatAdapterPreset)) return message
|
|
12745
12746
|
const voiceInput = Object.assign({}, message.knxAi.voiceInput)
|
|
12746
12747
|
redactKnxAiTelegramVoiceLocations(message)
|
|
12747
12748
|
if (!node.llmEnabled) {
|
|
@@ -12775,14 +12776,16 @@ module.exports = function (RED) {
|
|
|
12775
12776
|
})
|
|
12776
12777
|
delete safeVoiceInput.weblink
|
|
12777
12778
|
delete safeVoiceInput.path
|
|
12779
|
+
delete safeVoiceInput.data
|
|
12778
12780
|
message.knxAi = Object.assign({}, message.knxAi, { voiceInput: safeVoiceInput })
|
|
12779
12781
|
return message
|
|
12780
12782
|
}
|
|
12781
12783
|
|
|
12782
12784
|
const enrichKnxAiTelegramVoiceReplyMetadata = async ({ inputMessage, content, speechContent, metadata = {} } = {}) => {
|
|
12783
12785
|
const enriched = Object.assign({}, metadata)
|
|
12784
|
-
if (!isKnxAiTelegramVoiceInput(inputMessage) ||
|
|
12786
|
+
if (!isKnxAiTelegramVoiceInput(inputMessage) || !['windkh-telegrambot', 'redbot-telegram'].includes(node.chatAdapterPreset)) return enriched
|
|
12785
12787
|
if (enriched.image && enriched.image.data) return enriched
|
|
12788
|
+
if (node.chatAdapterPreset === 'redbot-telegram' && enriched.confirmationRequest && enriched.confirmationRequest.required === true) return enriched
|
|
12786
12789
|
let speechText = speechContent === undefined ? content : speechContent
|
|
12787
12790
|
if (speechText && typeof speechText === 'object') {
|
|
12788
12791
|
speechText = speechText.error || speechText.message || safeStringify(speechText)
|
|
@@ -78,7 +78,7 @@ Mit dieser Vorlage wird eine Telegram-Sprachnachricht (`msg.payload.type = "voic
|
|
|
78
78
|
|
|
79
79
|
Jede native Sprachantwort beginnt in der Bildunterschrift mit dem lokalisierten Hinweis **KI-generierte Stimme**, der für den Telegram-Empfänger sichtbar ist.
|
|
80
80
|
|
|
81
|
-
Die enthaltene Vorlage **RedBot / node-red-contrib-chatbot (Telegram)** folgt dem gemeinsamen RedBot-Nachrichtenformat. Verbinden Sie `chatbot-telegram-receive` direkt mit KNX AI und Ausgang 3 direkt mit `chatbot-telegram-send`; ein separater Callback-Node ist nicht erforderlich, da RedBot Postbacks von Inline-Schaltflächen in normale Eingangsnachrichten umwandelt.
|
|
81
|
+
Die enthaltene Vorlage **RedBot / node-red-contrib-chatbot (Telegram)** folgt dem gemeinsamen RedBot-Nachrichtenformat. Verbinden Sie `chatbot-telegram-receive` direkt mit KNX AI und Ausgang 3 direkt mit `chatbot-telegram-send`; ein separater Callback-Node ist nicht erforderlich, da RedBot Postbacks von Inline-Schaltflächen in normale Eingangsnachrichten umwandelt. Text und Postbacks verwenden RedBots `message`-Payload. Eine native Telegram-Sprachnachricht kommt als `type = "audio"` mit dem bereits von RedBot heruntergeladenen OGG/Opus-`Buffer` an: KNX AI wendet Größen- und Dauergrenzen ohne zweiten Download an, transkribiert sie mit demselben oben beschriebenen OpenAI-kompatiblen Provider und antwortet mit einem nativen RedBot-`audio`-Payload samt Textunterschrift und lokalisiertem Hinweis auf die KI-generierte Stimme. Wenn eine KNX-Schreibbestätigung erforderlich ist, bleibt die Antwort bewusst ein textbasierter `inline-buttons`-Payload, da RedBot diese Schaltflächen nicht an dieselbe Sprachnachricht anhängen kann. Die Ausgangszuordnung bewahrt die RedBot-Trackingdaten `originalMessage`, `chat`, `api` und `client`; ältere gespeicherte RedBot-Zuordnungen werden zur Laufzeit aktualisiert. RedBot bleibt eine separate optionale Abhängigkeit.
|
|
82
82
|
|
|
83
83
|
### Automatisch erkannte Kamera-Adapter
|
|
84
84
|
Installierte Kamerapakete können KNX AI zur Laufzeit einen Kamera-Adapter bereitstellen. Es gibt weder eine Auswahl noch einen Kamera-Node, der mit KNX AI verbunden werden muss: verfügbare Adapter, Controller und Kameras werden automatisch erkannt und in den Chat-Kontext aufgenommen. `node-red-contrib-unifi-ultimate` ist der erste unterstützte Anbieter; weitere Pakete wie `hikvision-ultimate` können sich über denselben herstellerneutralen Vertrag registrieren.
|
|
@@ -78,7 +78,7 @@ With this preset, a Telegram voice message (`msg.payload.type = "voice"`) is han
|
|
|
78
78
|
|
|
79
79
|
Every native voice caption begins with a localized **AI-generated voice** disclosure for the Telegram recipient.
|
|
80
80
|
|
|
81
|
-
The included **RedBot / node-red-contrib-chatbot (Telegram)** preset follows RedBot's common message contract. Connect `chatbot-telegram-receive` directly to KNX AI and output 3 directly to `chatbot-telegram-send`; no separate callback node is needed because RedBot converts inline-button postbacks into normal inbound messages.
|
|
81
|
+
The included **RedBot / node-red-contrib-chatbot (Telegram)** preset follows RedBot's common message contract. Connect `chatbot-telegram-receive` directly to KNX AI and output 3 directly to `chatbot-telegram-send`; no separate callback node is needed because RedBot converts inline-button postbacks into normal inbound messages. Text and postbacks use RedBot's `message` payload. A native Telegram voice arrives as `type = "audio"` with an OGG/Opus `Buffer` already downloaded by RedBot; KNX AI applies its size and duration limits without downloading it again, transcribes it with the same OpenAI-compatible provider described above, and returns a native RedBot `audio` reply with the localized AI-generated-voice disclosure and text caption. When a KNX write needs confirmation, the reply deliberately remains a text `inline-buttons` payload because RedBot cannot attach those buttons to the same voice message. The output mapping preserves RedBot's `originalMessage`, `chat`, `api`, and `client` tracking data, and older saved RedBot mappings are upgraded at runtime. RedBot remains a separate optional dependency.
|
|
82
82
|
|
|
83
83
|
### Automatically detected camera adapters
|
|
84
84
|
Installed camera packages can publish a camera adapter to KNX AI at runtime. There is no selector and no camera node to wire to KNX AI: available adapters, controllers and cameras are detected automatically and included in the chat context. `node-red-contrib-unifi-ultimate` is the first supported provider; other packages, such as `hikvision-ultimate`, can register through the same vendor-neutral contract.
|
|
@@ -78,7 +78,7 @@ Con este preajuste, los mensajes de voz de Telegram (`msg.payload.type = "voice"
|
|
|
78
78
|
|
|
79
79
|
La leyenda de cada respuesta de voz nativa comienza con el aviso localizado **Voz generada por IA**, visible para el destinatario de Telegram.
|
|
80
80
|
|
|
81
|
-
El preajuste incluido **RedBot / node-red-contrib-chatbot (Telegram)** sigue el formato común de mensajes de RedBot. Conecta directamente `chatbot-telegram-receive` a KNX AI y la salida 3 a `chatbot-telegram-send`; no hace falta un nodo callback separado porque RedBot convierte los postbacks de los botones inline en mensajes de entrada normales. El
|
|
81
|
+
El preajuste incluido **RedBot / node-red-contrib-chatbot (Telegram)** sigue el formato común de mensajes de RedBot. Conecta directamente `chatbot-telegram-receive` a KNX AI y la salida 3 a `chatbot-telegram-send`; no hace falta un nodo callback separado porque RedBot convierte los postbacks de los botones inline en mensajes de entrada normales. El texto y los postbacks usan el payload RedBot `message`. Un mensaje de voz nativo de Telegram llega como `type = "audio"` con el `Buffer` OGG/Opus ya descargado por RedBot: KNX AI aplica los límites de tamaño y duración sin volver a descargarlo, lo transcribe con el mismo proveedor OpenAI-compatible descrito arriba y responde con un payload RedBot `audio` nativo, el texto y el aviso localizado de voz generada por IA. Cuando una escritura KNX necesita confirmación, la respuesta se mantiene deliberadamente como payload de texto `inline-buttons`, porque RedBot no puede adjuntar esos botones al mismo mensaje de voz. El mapeo de salida conserva los datos de seguimiento RedBot `originalMessage`, `chat`, `api` y `client`; los mapeos RedBot antiguos guardados también se actualizan en tiempo de ejecución. RedBot sigue siendo una dependencia opcional separada.
|
|
82
82
|
|
|
83
83
|
### Adaptadores de cámara detectados automáticamente
|
|
84
84
|
Los paquetes de cámaras instalados pueden publicar en tiempo de ejecución un adaptador para KNX AI. No hay selector ni nodo de cámara que conectar a KNX AI: los adaptadores, controladores y cámaras disponibles se detectan automáticamente y se incorporan al contexto del chat. `node-red-contrib-unifi-ultimate` es el primer proveedor compatible; otros paquetes, como `hikvision-ultimate`, pueden registrarse mediante el mismo contrato independiente del fabricante.
|
|
@@ -78,7 +78,7 @@ Avec ce préréglage, un message vocal Telegram (`msg.payload.type = "voice"`) n
|
|
|
78
78
|
|
|
79
79
|
La légende de chaque réponse vocale native commence par la mention localisée **Voix générée par l’IA**, visible par le destinataire Telegram.
|
|
80
80
|
|
|
81
|
-
Le préréglage inclus **RedBot / node-red-contrib-chatbot (Telegram)** suit le format de message commun de RedBot. Connectez directement `chatbot-telegram-receive` à KNX AI et la sortie 3 à `chatbot-telegram-send` ; aucun nœud de callback séparé n’est nécessaire, car RedBot convertit les postbacks des boutons inline en messages entrants ordinaires. Le
|
|
81
|
+
Le préréglage inclus **RedBot / node-red-contrib-chatbot (Telegram)** suit le format de message commun de RedBot. Connectez directement `chatbot-telegram-receive` à KNX AI et la sortie 3 à `chatbot-telegram-send` ; aucun nœud de callback séparé n’est nécessaire, car RedBot convertit les postbacks des boutons inline en messages entrants ordinaires. Le texte et les postbacks utilisent le payload RedBot `message`. Un message vocal Telegram natif arrive avec `type = "audio"` et le `Buffer` OGG/Opus déjà téléchargé par RedBot : KNX AI applique les limites de taille et de durée sans second téléchargement, le transcrit avec le même fournisseur OpenAI-compatible décrit ci-dessus et répond avec un payload RedBot `audio` natif, sa légende textuelle et la mention localisée de voix générée par l’IA. Lorsqu’une écriture KNX exige une confirmation, la réponse reste volontairement un payload texte `inline-buttons`, car RedBot ne peut pas joindre ces boutons au même message vocal. Le mappage de sortie conserve les données de suivi RedBot `originalMessage`, `chat`, `api` et `client` ; les anciens mappages RedBot enregistrés sont également mis à niveau à l’exécution. RedBot reste une dépendance optionnelle distincte.
|
|
82
82
|
|
|
83
83
|
### Adaptateurs de caméra détectés automatiquement
|
|
84
84
|
Les paquets de caméra installés peuvent publier à l’exécution un adaptateur pour KNX AI. Il n’existe aucun sélecteur ni nœud caméra à relier à KNX AI : les adaptateurs, contrôleurs et caméras disponibles sont détectés automatiquement et ajoutés au contexte du chat. `node-red-contrib-unifi-ultimate` est le premier fournisseur pris en charge ; d’autres paquets, tels que `hikvision-ultimate`, peuvent s’enregistrer avec le même contrat indépendant du fabricant.
|
|
@@ -78,7 +78,7 @@ Con questo preset, un messaggio vocale Telegram (`msg.payload.type = "voice"`) v
|
|
|
78
78
|
|
|
79
79
|
La didascalia di ogni vocale nativo inizia con l'indicazione localizzata **Voce generata dall’IA**, visibile al destinatario Telegram.
|
|
80
80
|
|
|
81
|
-
Il preset incluso **RedBot / node-red-contrib-chatbot (Telegram)** segue il formato comune dei messaggi RedBot. Collega direttamente `chatbot-telegram-receive` a KNX AI e l'uscita 3 direttamente a `chatbot-telegram-send`; non serve un nodo callback separato perché RedBot converte i postback dei pulsanti inline in normali messaggi in ingresso.
|
|
81
|
+
Il preset incluso **RedBot / node-red-contrib-chatbot (Telegram)** segue il formato comune dei messaggi RedBot. Collega direttamente `chatbot-telegram-receive` a KNX AI e l'uscita 3 direttamente a `chatbot-telegram-send`; non serve un nodo callback separato perché RedBot converte i postback dei pulsanti inline in normali messaggi in ingresso. Testo e postback usano il payload RedBot `message`. Un vocale Telegram nativo arriva come `type = "audio"` con il `Buffer` OGG/Opus già scaricato da RedBot: KNX AI applica i limiti di dimensione e durata senza scaricarlo una seconda volta, lo trascrive con lo stesso provider OpenAI-compatible descritto sopra e risponde con un payload RedBot `audio` nativo, didascalia testuale e indicazione localizzata della voce generata dall'IA. Quando una scrittura KNX richiede conferma, la risposta resta intenzionalmente un payload testuale `inline-buttons`, perché RedBot non può allegare quei pulsanti allo stesso messaggio vocale. La mappatura d'uscita conserva i dati di tracciamento RedBot `originalMessage`, `chat`, `api` e `client`; anche le vecchie mappature RedBot salvate vengono aggiornate a runtime. RedBot resta una dipendenza opzionale separata.
|
|
82
82
|
|
|
83
83
|
### Adapter telecamera rilevati automaticamente
|
|
84
84
|
I pacchetti di telecamere installati possono pubblicare a runtime un adapter per KNX AI. Non esistono selettori né nodi telecamera da collegare a KNX AI: adapter, controller e telecamere disponibili vengono rilevati automaticamente e inseriti nel contesto della chat. `node-red-contrib-unifi-ultimate` è il primo provider supportato; altri pacchetti, come `hikvision-ultimate`, possono registrarsi tramite lo stesso contratto indipendente dal produttore.
|
|
@@ -78,7 +78,7 @@ Canvas 上的节点状态专门用于显示最近收到的请求,以及 LLM
|
|
|
78
78
|
|
|
79
79
|
每条原生语音回复的文字说明都会以本地化的 **AI 生成的语音** 提示开头,Telegram 收件人可以看到该提示。
|
|
80
80
|
|
|
81
|
-
随附的 **RedBot / node-red-contrib-chatbot (Telegram)** 预设遵循 RedBot 的通用消息格式。将 `chatbot-telegram-receive` 直接连接到 KNX AI,并将输出 3 直接连接到 `chatbot-telegram-send`;无需单独的 callback 节点,因为 RedBot 会把内联按钮的 postback
|
|
81
|
+
随附的 **RedBot / node-red-contrib-chatbot (Telegram)** 预设遵循 RedBot 的通用消息格式。将 `chatbot-telegram-receive` 直接连接到 KNX AI,并将输出 3 直接连接到 `chatbot-telegram-send`;无需单独的 callback 节点,因为 RedBot 会把内联按钮的 postback 转换成普通入站消息。文本和 postback 使用 RedBot 的 `message` payload。Telegram 原生语音以 `type = "audio"` 到达,其中包含已由 RedBot 下载的 OGG/Opus `Buffer`;KNX AI 无需再次下载即可执行大小和时长限制,使用上文所述的同一个 OpenAI-compatible 提供商进行转录,并返回带文字说明和本地化 AI 生成语音提示的原生 RedBot `audio` payload。当 KNX 写入需要确认时,回复会有意保留为文本 `inline-buttons` payload,因为 RedBot 无法把这些按钮附加到同一条语音消息。输出映射会保留 RedBot 的 `originalMessage`、`chat`、`api` 和 `client` 跟踪数据;旧的已保存 RedBot 映射也会在运行时升级。RedBot 仍是独立的可选依赖项。
|
|
82
82
|
|
|
83
83
|
### 自动检测的摄像机适配器
|
|
84
84
|
已安装的摄像机软件包可以在运行时向 KNX AI 发布适配器。无需选择器,也无需将摄像机节点连接到 KNX AI:可用的适配器、控制器和摄像机会被自动检测并加入聊天上下文。`node-red-contrib-unifi-ultimate` 是首个受支持的提供方;`hikvision-ultimate` 等其他软件包可通过同一套厂商无关协议注册。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.page-shell[data-v-4523727e]{--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-4523727e]{--sidebar-current-width: var(--sidebar-collapsed-width)}.m-header[data-v-4523727e]{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-4523727e]{display:inline-flex;align-items:center;gap:10px}.m-logo-mark[data-v-4523727e]{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-4523727e]{font-size:21px;font-weight:700;letter-spacing:.02em}.hamburger-icon[data-v-4523727e]{position:relative;width:30px;height:22px;border:0;background:transparent;color:inherit;cursor:pointer}.hamburger-icon span[data-v-4523727e]{display:block;position:absolute;left:0;width:100%;height:2px;border-radius:2px;background:#fff;transition:.24s ease}.hamburger-icon span[data-v-4523727e]:nth-child(1){top:0}.hamburger-icon span[data-v-4523727e]:nth-child(2),.hamburger-icon span[data-v-4523727e]:nth-child(3){top:9px}.hamburger-icon span[data-v-4523727e]:nth-child(4){top:18px}.hamburger-icon-cross span[data-v-4523727e]:nth-child(1),.hamburger-icon-cross span[data-v-4523727e]:nth-child(4){left:50%;width:0}.hamburger-icon-cross span[data-v-4523727e]:nth-child(2){transform:rotate(45deg)}.hamburger-icon-cross span[data-v-4523727e]:nth-child(3){transform:rotate(-45deg)}.sidebar-overlay[data-v-4523727e]{position:fixed;inset:0;z-index:180;border:0;background:#090c137a}[data-v-4523727e] *{--soft-radius: 4px;--hb-primary: #ff9800;--hb-primary-dark: #ef6c00}.app-sidebar[data-v-4523727e]{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-4523727e]{display:grid;grid-template-columns:34px minmax(0,1fr) 28px;align-items:start;gap:10px}.sidebar-brand-mark[data-v-4523727e]{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-4523727e]{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-4523727e]{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-4523727e]:hover{background:#ffffff29}.workspace-shell[data-v-4523727e]{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-4523727e]{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-4523727e]{margin-bottom:16px}.brand[data-v-4523727e],.sidebar-brand[data-v-4523727e]{margin-bottom:6px;min-width:0}.eyebrow[data-v-4523727e]{margin:0 0 6px;color:inherit;font-size:12px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;opacity:.75}.brand h1[data-v-4523727e],.sidebar-brand h1[data-v-4523727e]{margin:0;font-size:clamp(24px,3.4vw,34px);line-height:1}.workspace-brand h2[data-v-4523727e]{margin:0;font-size:clamp(24px,3vw,32px);line-height:1.02;color:#111723}.subhead[data-v-4523727e]{max-width:860px;margin:8px 0 0;color:inherit;font-size:12px;line-height:1.4;opacity:.78}.toolbar[data-v-4523727e],.statusbar[data-v-4523727e],.tab-strip[data-v-4523727e],.checkbox[data-v-4523727e],.pill-row[data-v-4523727e],.preset-row[data-v-4523727e],.ask-row[data-v-4523727e]{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.toolbar[data-v-4523727e]{justify-content:space-between}.toolbar-cluster[data-v-4523727e],.action-cluster[data-v-4523727e]{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-4523727e]{margin-top:16px}.primary-button[data-v-4523727e],.preset-button[data-v-4523727e],.danger-button[data-v-4523727e],.primary-link[data-v-4523727e],.secondary-button[data-v-4523727e],.tab-button[data-v-4523727e]{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-4523727e],.primary-link[data-v-4523727e],.tab-button.active[data-v-4523727e]{border-color:transparent;background:var(--hb-primary);color:#fff}.secondary-button[data-v-4523727e],.preset-button[data-v-4523727e],.tab-button[data-v-4523727e]{border-color:transparent;background:#607d8b;color:#fff}.danger-button[data-v-4523727e]{border-color:transparent;background:#d32f2f;color:#fff}.preset-button[data-v-4523727e]:hover,.danger-button[data-v-4523727e]:hover,.secondary-button[data-v-4523727e]:hover,.tab-button[data-v-4523727e]:hover{background:#546e7a;border-color:transparent}.danger-button[data-v-4523727e]:hover{background:#c62828;border-color:transparent}.new-button[data-v-4523727e]{background:linear-gradient(180deg,#62c27a,#43a85f);border-color:transparent;color:#fff}.new-button[data-v-4523727e]:hover{background:linear-gradient(180deg,#74cf8b,#4fb46b);border-color:transparent}.primary-button[data-v-4523727e]:hover,.primary-link[data-v-4523727e]:hover,.tab-button.active[data-v-4523727e]:hover{background:#e68900;border-color:transparent}.primary-button[data-v-4523727e]:disabled,.preset-button[data-v-4523727e]:disabled,.danger-button[data-v-4523727e]:disabled,.secondary-button[data-v-4523727e]:disabled{opacity:.6;cursor:not-allowed}.hidden-file-input[data-v-4523727e]{display:none}.node-select[data-v-4523727e]{min-width:min(360px,100%)}.sidebar-select[data-v-4523727e]{min-width:0;width:100%;border-color:#ffffff14;background:#ffffff0f;color:#f6f8fb}.sidebar-select option[data-v-4523727e]{color:#0f1520}.node-select[data-v-4523727e],.checkbox[data-v-4523727e],.summary-pre[data-v-4523727e],.chat-log[data-v-4523727e],.anomaly-card pre[data-v-4523727e]{border:1px solid var(--line);border-radius:var(--soft-radius);background:#ffffffe0}.node-select[data-v-4523727e]{padding:8px 10px;color:var(--text);font-size:12px}.checkbox[data-v-4523727e]{padding:8px 10px;gap:8px;font-size:12px}.sidebar-checkbox[data-v-4523727e]{border-color:#ffffff14;background:#ffffff0f;color:#eef3f9}.sidebar-panel[data-v-4523727e]{padding:12px;border:1px solid rgba(255,255,255,.14);border-radius:var(--soft-radius);background:#ffffff0d}.sidebar-field[data-v-4523727e]{display:flex;flex-direction:column;gap:6px;font-size:11px;font-weight:800;color:#f6f8fce0}.sidebar-nav[data-v-4523727e]{display:flex;flex-direction:column;gap:0}.sidebar-nav .tab-button[data-v-4523727e]{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-4523727e]{flex:0 0 38px;width:38px;min-width:38px;display:flex;align-items:center;justify-content:center}.sidebar-nav-svg[data-v-4523727e]{width:17px;height:17px;fill:currentColor}.sidebar-nav-copy[data-v-4523727e]{flex:1;min-width:0;overflow:hidden;white-space:normal;line-height:1.15;padding-left:10px}.sidebar-nav .sidebar-nav-child[data-v-4523727e]{width:100%;margin-left:0}.sidebar-nav .tab-button.active[data-v-4523727e]{background:transparent;color:#fff}.sidebar-nav .tab-button[data-v-4523727e]:hover{background:var(--hb-primary)}.sidebar-nav .tab-button[data-v-4523727e]:disabled{opacity:.42;cursor:not-allowed;background:#ffffff0d;color:#edf1f89e}.sidebar-nav .tab-button[data-v-4523727e]:disabled:hover{background:#ffffff0d}.sidebar-nav .tab-button:disabled .sidebar-nav-icon[data-v-4523727e]{color:#edf1f89e}.sidebar-nav .tab-button.active .sidebar-nav-icon[data-v-4523727e]{color:var(--hb-primary)}.sidebar-nav .tab-button.active:hover .sidebar-nav-icon[data-v-4523727e]{color:#fff}.sidebar-nav-title[data-v-4523727e]{display:block;font-size:17px;font-weight:400}.sidebar-nav-meta[data-v-4523727e]{display:block;margin-top:3px;font-size:11px;opacity:.72;font-weight:600}.page-shell.sidebar-collapsed .sidebar-panel[data-v-4523727e],.page-shell.sidebar-collapsed .sidebar-footer[data-v-4523727e],.page-shell.sidebar-collapsed .sidebar-brand .eyebrow[data-v-4523727e],.page-shell.sidebar-collapsed .sidebar-brand h1[data-v-4523727e],.page-shell.sidebar-collapsed .sidebar-brand .subhead[data-v-4523727e]{display:none}.page-shell.sidebar-collapsed .sidebar-brand-wrap[data-v-4523727e]{grid-template-columns:1fr;justify-items:center}.page-shell.sidebar-collapsed .app-sidebar[data-v-4523727e]{align-items:center;padding:14px 10px}.page-shell.sidebar-collapsed .sidebar-collapse-toggle[data-v-4523727e]{margin-top:4px}.page-shell.sidebar-collapsed .sidebar-nav .tab-button[data-v-4523727e]{justify-content:center;padding:15px 10px}.page-shell.sidebar-collapsed .sidebar-nav .sidebar-nav-child[data-v-4523727e]{width:100%;margin-left:0}.page-shell.sidebar-collapsed .sidebar-nav-copy[data-v-4523727e]{display:none}.sidebar-actions[data-v-4523727e]{display:flex;flex-direction:column;gap:14px}.sidebar-section-toggle[data-v-4523727e]{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-4523727e]{display:block;font-size:13px;font-weight:800}.sidebar-section-toggle small[data-v-4523727e]{display:block;margin-top:3px;font-size:11px;opacity:.72}.sidebar-test-results[data-v-4523727e]{display:flex;flex-direction:column;gap:10px}.sidebar-results-list[data-v-4523727e]{display:flex;flex-direction:column;gap:8px;max-height:320px;overflow:auto;padding-right:2px}.sidebar-result-row[data-v-4523727e]{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:stretch}.sidebar-result-delete-button[data-v-4523727e]{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-4523727e]:hover:not(:disabled){background:linear-gradient(180deg,#c73030,#a01b1b)}.sidebar-result-delete-button[data-v-4523727e]:disabled{opacity:.72;cursor:wait}.sidebar-result-item[data-v-4523727e]{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-4523727e]{border-color:#ffffff57;background:linear-gradient(180deg,#6877b3a3,#45517cb8);box-shadow:inset 0 0 0 1px #ffffff14}.sidebar-result-item.running[data-v-4523727e]{box-shadow:inset 0 0 0 1px #f0b3228c}.sidebar-result-head[data-v-4523727e]{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%}.sidebar-result-head strong[data-v-4523727e]{font-size:12px;font-weight:800}.sidebar-result-title[data-v-4523727e]{display:inline-flex;align-items:center;gap:8px;min-width:0}.sidebar-result-item .area-list-meta[data-v-4523727e],.sidebar-result-item .area-list-tags[data-v-4523727e]{color:#edf1f8c7}.sidebar-result-status[data-v-4523727e]{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-4523727e]{color:#8fe0a8}.sidebar-result-status.status-warn[data-v-4523727e]{color:#ffd17a}.sidebar-result-status.status-fail[data-v-4523727e]{color:#ffb9c3}.sidebar-empty-state[data-v-4523727e]{margin:0;color:#f6f8fcc2}.results-page-layout[data-v-4523727e]{grid-template-columns:minmax(320px,420px) minmax(0,1fr)}.results-page-list[data-v-4523727e]{max-height:min(68vh,760px);padding-right:4px}.results-page-list .sidebar-result-item[data-v-4523727e]{border-color:#7e889a4d;background:linear-gradient(180deg,#fdfeff,#f2f7fd);color:#243042}.results-page-list .sidebar-result-item.active[data-v-4523727e]{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-4523727e]{box-shadow:inset 0 0 0 1px #ff980080}.results-page-list .sidebar-result-item .area-list-meta[data-v-4523727e],.results-page-list .sidebar-result-item .area-list-tags[data-v-4523727e]{color:#556071}.results-page-list .sidebar-result-status[data-v-4523727e]{color:#374151}.results-page-list .sidebar-result-status.status-pass[data-v-4523727e]{color:#2f8d53}.results-page-list .sidebar-result-status.status-warn[data-v-4523727e]{color:#ad730b}.results-page-list .sidebar-result-status.status-fail[data-v-4523727e]{color:#b73845}.sidebar-action-button[data-v-4523727e]{width:100%;justify-content:center}.sidebar-footer[data-v-4523727e]{margin-top:auto;display:flex;flex-direction:column;gap:8px;padding-top:8px}.sidebar-doc-link[data-v-4523727e]{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-4523727e]:hover{text-decoration:underline}.support-link-row[data-v-4523727e]{display:flex;flex-direction:column;gap:8px}.support-link-button[data-v-4523727e]{display:flex;width:100%;justify-content:center;white-space:nowrap}.support-link-button-youtube[data-v-4523727e]{background:#cc2f2f}.support-link-button-youtube[data-v-4523727e]:hover{background:#b72727}.statusbar[data-v-4523727e]{justify-content:space-between}.status-pill[data-v-4523727e],.meta-chip[data-v-4523727e],.pill[data-v-4523727e]{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-4523727e],.meta-chip[data-v-4523727e],.pill.neutral[data-v-4523727e]{color:var(--text)}.status-pill.error[data-v-4523727e],.pill.danger[data-v-4523727e]{color:#a4333a}.status-pill-spinner[data-v-4523727e]{width:11px;height:11px;border-width:2px;border-color:#5a667a3d;border-top-color:currentColor}.pill.success[data-v-4523727e]{color:#1b7d36}.status-detail[data-v-4523727e]{color:inherit;font-size:12px;font-weight:700;opacity:.7}.content-grid[data-v-4523727e]{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:16px}.workspace-main[data-v-4523727e]{padding:0 2px 6px}.card[data-v-4523727e]{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-4523727e],.card-setup-doctor[data-v-4523727e],.card-bus[data-v-4523727e],.card-chat[data-v-4523727e],.card-flow[data-v-4523727e],.card-areas[data-v-4523727e],.card-profiles[data-v-4523727e]{grid-column:span 6}.card-setup-doctor[data-v-4523727e]{border-color:#ef6c0066;background:linear-gradient(145deg,#fff8edfa,#fffffffa 72%)}.card-setup-doctor.setup-doctor-ready[data-v-4523727e]{border-color:#2e7d326b;background:linear-gradient(145deg,#effaf0fa,#fffffffa 72%)}.card-setup-doctor.setup-doctor-blocked[data-v-4523727e]{border-color:#c628286b;background:linear-gradient(145deg,#fff0f0fa,#fffffffa 72%)}.setup-doctor-score[data-v-4523727e]{font-weight:800}.setup-doctor-summary[data-v-4523727e]{margin:0 0 12px;color:#374151;line-height:1.5}.setup-doctor-check-list[data-v-4523727e]{display:grid;gap:0}.setup-doctor-check[data-v-4523727e]{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-4523727e]{flex:1 1 auto;min-width:0}.setup-doctor-check p[data-v-4523727e]{margin:3px 0 0;color:var(--muted);font-size:12px;line-height:1.4}.setup-doctor-check-badge[data-v-4523727e]{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-4523727e]{background:#dff0d8;color:#256029}.setup-doctor-check-badge.check-warn[data-v-4523727e]{background:#fff3cd;color:#7a5200}.setup-doctor-check-badge.check-fail[data-v-4523727e]{background:#f8d7da;color:#842029}.setup-doctor-demo[data-v-4523727e]{margin-top:12px;padding-top:12px;border-top:1px dashed rgba(120,120,120,.24)}.setup-doctor-demo .preset-row[data-v-4523727e]{align-items:stretch;margin-top:9px}.setup-doctor-demo-button[data-v-4523727e]{flex:1 1 180px;white-space:normal;text-align:left}.card-flow[data-v-4523727e],.card-anomalies[data-v-4523727e]{grid-column:span 6}.card-flow[data-v-4523727e],.card-areas[data-v-4523727e],.card-profiles[data-v-4523727e],.card-settings[data-v-4523727e],.card-flow-builder[data-v-4523727e]{grid-column:span 12}.card-chat[data-v-4523727e]{grid-column:1 / -1;max-width:100%}.card-profiles[data-v-4523727e]{border-color:#54607461;background:linear-gradient(180deg,#f4f7fbfa,#e9eef4fa);box-shadow:0 18px 36px #1118271f}.card-head[data-v-4523727e]{display:flex;justify-content:space-between;gap:12px;align-items:center;margin-bottom:14px}.card-head-actions[data-v-4523727e]{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.settings-tab-strip[data-v-4523727e]{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-4523727e]{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-4523727e]:hover{background:#66769424;color:#243042}.settings-tab-button.active[data-v-4523727e]{border-color:#ef6c0057;background:linear-gradient(180deg,#fff7e9,#ffeccf);color:#8e4f00}.settings-panel[data-v-4523727e]{border-color:#616c8057;background:linear-gradient(180deg,#fff,#f7fafd);box-shadow:0 2px #79839629}.settings-panel-head[data-v-4523727e]{padding-bottom:10px;border-bottom:1px solid rgba(148,158,176,.32);margin-bottom:12px}.settings-node-grid[data-v-4523727e]{display:grid;grid-template-columns:minmax(240px,420px) auto;gap:12px;align-items:end;margin-top:12px}.settings-node-checkbox[data-v-4523727e]{width:fit-content;min-height:36px}.settings-config-actions[data-v-4523727e]{margin-top:12px}.chat-learning-panel[data-v-4523727e]{min-height:520px}.chat-learning-meta[data-v-4523727e]{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}.chat-learning-dirty[data-v-4523727e]{border-color:#ef6c005c;background:#ffefd5eb;color:#8e4f00}.chat-learning-size-over[data-v-4523727e]{border-color:#c439396b!important;background:#ffe3e3f0!important;color:#a42828!important}.chat-learning-note[data-v-4523727e]{margin:6px 0;color:#566174;font-size:12px;line-height:1.5}.chat-learning-path-field[data-v-4523727e]{margin-top:14px}.chat-learning-path-field code[data-v-4523727e]{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-4523727e]{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-4523727e]:focus{outline:2px solid rgba(239,108,0,.23);border-color:#ef6c00a3}.chat-learning-editor[data-v-4523727e]:disabled{opacity:.68;cursor:wait}.chat-learning-error[data-v-4523727e]{margin-top:10px}.chat-learning-actions[data-v-4523727e]{margin-top:12px}.chat-learning-modified[data-v-4523727e]{margin:12px 0 0}@media(max-width:900px){.settings-node-grid[data-v-4523727e]{grid-template-columns:minmax(0,1fr);align-items:start}.settings-node-checkbox[data-v-4523727e]{width:100%}.chat-learning-meta[data-v-4523727e]{justify-content:flex-start}.chat-learning-editor[data-v-4523727e]{min-height:360px}}.plan-run-actions[data-v-4523727e]{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-4523727e]{margin:0;font-size:16px}.summary-pre[data-v-4523727e],.chat-log[data-v-4523727e]{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-4523727e]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:14px}.metric[data-v-4523727e]{display:flex;flex-direction:column;gap:6px;padding:0;border:0;border-radius:0;background:transparent;box-shadow:none}.metric span[data-v-4523727e]{display:block;margin-bottom:0;color:var(--muted);font-size:12px;font-weight:700}.metric strong[data-v-4523727e]{font-size:17px}.rank-list[data-v-4523727e],.event-list[data-v-4523727e],.anomaly-list[data-v-4523727e]{margin:0;padding:0;list-style:none}.rank-row[data-v-4523727e],.event-row[data-v-4523727e]{display:grid;gap:8px;align-items:center;padding:10px 0;border-bottom:1px solid rgba(120,120,120,.14)}.rank-row[data-v-4523727e]{grid-template-columns:minmax(86px,120px) minmax(0,1fr) auto}.event-row[data-v-4523727e]{grid-template-columns:minmax(0,1fr) minmax(0,1.6fr) auto}.rank-title[data-v-4523727e],.event-name[data-v-4523727e]{font-weight:800}.rank-label[data-v-4523727e]{color:var(--muted);font-size:12px}.event-bar[data-v-4523727e]{height:10px;overflow:hidden;border-radius:var(--soft-radius);background:#ff98001f}.event-bar-fill[data-v-4523727e]{display:block;height:100%;border-radius:var(--soft-radius);background:linear-gradient(90deg,var(--accent),#4bbf77)}.areas-toolbar[data-v-4523727e]{display:flex;flex-wrap:wrap;gap:12px;align-items:end;margin-bottom:16px}.areas-layout[data-v-4523727e]{display:flex;flex-direction:column;gap:16px}.area-list-item[data-v-4523727e]{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-4523727e]:hover,.area-list-item.active[data-v-4523727e]{border-color:#ff980057;background:var(--accent-soft)}.area-list-title[data-v-4523727e]{font-weight:800}.area-listbox-shell[data-v-4523727e]{width:100%}.area-search-select[data-v-4523727e]{position:relative}.area-search-select-input[data-v-4523727e]{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-4523727e]{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-4523727e]{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-4523727e]:hover,.area-search-select-option.active[data-v-4523727e]{background:var(--accent-soft)}.area-list-meta[data-v-4523727e],.area-list-tags[data-v-4523727e],.area-detail-subhead[data-v-4523727e]{color:var(--muted);font-size:12px}.area-detail[data-v-4523727e]{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-4523727e]{display:grid;grid-template-columns:minmax(260px,340px) minmax(0,1fr);gap:16px}.test-planner-layout[data-v-4523727e]{display:flex;flex-direction:column;gap:16px;align-items:stretch}.result-only-layout[data-v-4523727e]{grid-template-columns:minmax(0,1fr)}.card-results-focus[data-v-4523727e]{grid-column:span 12}.profile-list[data-v-4523727e],.profile-editor-stack[data-v-4523727e]{display:flex;flex-direction:column;gap:12px}.planner-sidecard[data-v-4523727e]{gap:12px}.card-profiles .area-detail[data-v-4523727e]{border-color:#616c8057;background:linear-gradient(180deg,#fff,#f7fafd);box-shadow:0 2px #79839629}.card-profiles .card-head[data-v-4523727e]{padding-bottom:10px;border-bottom:1px solid rgba(148,158,176,.32)}.card-profiles .area-detail-subhead[data-v-4523727e]{color:#4b5565}.card-profiles .meta-chip[data-v-4523727e],.card-profiles .pill.neutral[data-v-4523727e]{border:0;background:transparent;color:#1c2430}.card-profiles .planner-list .area-list-item[data-v-4523727e]{border-color:#8892a559;background:linear-gradient(180deg,#fffffffa,#f4f7fbfa);box-shadow:0 1px #99a3b524}.card-profiles .planner-list .area-list-item[data-v-4523727e]:hover,.card-profiles .planner-list .area-list-item.active[data-v-4523727e]{border-color:#4a5a909e;background:linear-gradient(180deg,#e0e6f3f5,#d6deeef5)}.card-profiles .metric[data-v-4523727e]{padding:0;border:0;border-radius:0;background:transparent;box-shadow:none}.card-profiles .metric span[data-v-4523727e]{color:#475163}.card-profiles .metric strong[data-v-4523727e]{color:#161d29;font-size:20px}.ai-planner-shell[data-v-4523727e]{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-4523727e]{margin-bottom:12px}.ai-planner-shell-head.template-builder-focus-head[data-v-4523727e]{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;flex-wrap:wrap}.ai-planner-shell-head h4[data-v-4523727e]{margin:0}.planner-pairs[data-v-4523727e]{margin-top:12px}.planner-generation[data-v-4523727e]{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-4523727e]{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-4523727e]{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-4523727e]{border-left-color:#3d5ca8;background:linear-gradient(180deg,#f5f9ff,#e9f0fb);box-shadow:0 0 0 2px #3d5ca829}.planner-step-dragging[data-v-4523727e]{opacity:.56;cursor:grabbing}.planner-step-drop-target[data-v-4523727e]{box-shadow:0 0 0 2px #46b86d2e;border-left-color:#46b86d}.planner-step-title[data-v-4523727e]{display:flex;align-items:center;gap:10px}.planner-step-summary[data-v-4523727e]{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-4523727e]{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-4523727e]{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-4523727e]{display:inline-block;font-size:12px;line-height:1;transition:transform .16s ease}.collapse-icon.collapsed[data-v-4523727e]{transform:rotate(-90deg)}.planner-step-editor[data-v-4523727e]{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-4523727e]{padding:10px 12px 12px;border:1px solid rgba(155,165,183,.28);background:#ffffffe6}.planner-field-group h4[data-v-4523727e]{margin:0 0 10px;font-size:12px;letter-spacing:.04em;text-transform:uppercase;color:#1d2433}.planner-field-group-grid[data-v-4523727e]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 12px}.planner-field-group-grid .group-span[data-v-4523727e]{grid-column:1 / -1}.planner-check-sections[data-v-4523727e]{display:grid;gap:10px;margin-top:10px}.planner-check-section[data-v-4523727e]{padding:10px 12px;border:1px solid rgba(155,165,183,.28);background:#ffffffdb}.planner-check-section h4[data-v-4523727e]{margin:0 0 8px;font-size:12px;letter-spacing:.04em;text-transform:uppercase;color:#1d2433}.planner-check-section .area-detail-subhead[data-v-4523727e]{margin:0 0 8px}.running-headline[data-v-4523727e]{display:inline-flex;align-items:center;gap:10px;margin:0}.running-spinner[data-v-4523727e]{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-4523727e .85s linear infinite}.run-button-spinner[data-v-4523727e]{margin-right:6px;vertical-align:-2px}.run-chip-spinner[data-v-4523727e]{width:12px;height:12px;margin-right:6px}@keyframes running-spin-4523727e{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.editor-check-sections[data-v-4523727e]{grid-column:1 / -1}.compact-grid[data-v-4523727e]{grid-template-columns:repeat(2,minmax(0,1fr));margin-top:0}.result-check-sections .planner-check-section[data-v-4523727e]{background:#fafcfffa}.planner-step-grid[data-v-4523727e]{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-4523727e],.area-detail h4[data-v-4523727e]{margin:0}.area-detail-subhead[data-v-4523727e]{margin:6px 0 0}.area-metrics[data-v-4523727e]{margin-top:4px}.area-chips[data-v-4523727e]{display:flex;flex-wrap:wrap;gap:8px;margin:14px 0}.area-editor[data-v-4523727e]{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-4523727e]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.area-editor-span[data-v-4523727e]{grid-column:1 / -1}.area-editor-note[data-v-4523727e]{margin:12px 0 0;color:var(--muted);font-size:12px}.compact-preset-row[data-v-4523727e]{margin-top:10px}.compact-preset-row .preset-button[data-v-4523727e]{text-align:left;font-size:11px;padding:7px 10px}.area-ga-editor[data-v-4523727e]{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;margin-top:16px}.area-ga-list[data-v-4523727e],.area-ga-catalog[data-v-4523727e]{max-height:320px;overflow:auto}.area-ga-item[data-v-4523727e]{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-4523727e]{min-width:0;flex:1}.area-ga-actions[data-v-4523727e]{display:flex;align-items:end;gap:10px;flex-wrap:wrap}.area-ga-role-field[data-v-4523727e]{min-width:148px}.area-ga-item strong[data-v-4523727e],.planner-step-grid strong[data-v-4523727e]{color:var(--text)}.area-ga-item span[data-v-4523727e]{display:block;color:var(--muted);font-size:12px}.profile-runbar[data-v-4523727e]{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-4523727e]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin:16px 0}.simple-list[data-v-4523727e]{margin:10px 0 0;padding-left:18px}.simple-list li[data-v-4523727e]{margin-bottom:6px}.simple-list-mono[data-v-4523727e]{font-family:JetBrains Mono,SFMono-Regular,monospace;font-size:11px}.report-checks[data-v-4523727e]{display:grid;gap:10px;margin:16px 0}.plan-steps-stack[data-v-4523727e]{margin-left:12px;padding-left:12px}.plan-draft-shell[data-v-4523727e]{margin-left:12px;width:calc(100% - 12px)}.report-check[data-v-4523727e]{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-4523727e]{border-left-color:#46b86d;background:linear-gradient(180deg,#f7fcf8,#eef7f0)}.report-warn[data-v-4523727e]{border-left-color:#d99a34;background:linear-gradient(180deg,#fffaf2,#fcf4e5)}.report-fail[data-v-4523727e]{border-left-color:#d94b55;background:linear-gradient(180deg,#fff6f6,#fceced)}.bus-track[data-v-4523727e]{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-4523727e]{position:absolute;top:0;bottom:0}.segment-connected[data-v-4523727e]{background:linear-gradient(90deg,#4ad06d,#38c45f)}.segment-disconnected[data-v-4523727e]{background:linear-gradient(90deg,#eb6a74,#d94b55)}.bus-scale[data-v-4523727e]{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-4523727e]:nth-child(2){text-align:center}.bus-scale span[data-v-4523727e]:nth-child(3){text-align:right}.bus-note[data-v-4523727e],.flow-note[data-v-4523727e],.empty-state[data-v-4523727e]{color:var(--muted);line-height:1.5}.flow-toolbar[data-v-4523727e]{display:grid;grid-template-columns:120px minmax(180px,1fr) minmax(220px,1.2fr) auto;gap:12px;align-items:start}.flow-field[data-v-4523727e]{display:flex;flex-direction:column;gap:6px;color:var(--muted);font-size:11px;font-weight:700}.flow-field input[data-v-4523727e],.flow-field select[data-v-4523727e],.flow-field textarea[data-v-4523727e]{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-4523727e]{padding-right:28px}.flow-field textarea[data-v-4523727e]{resize:vertical;min-height:62px;font:inherit}.flow-field select[multiple][data-v-4523727e],.flow-field-select select[data-v-4523727e]{min-height:108px;padding-right:10px}.compact-actions[data-v-4523727e]{justify-content:flex-end}.compact-toggle[data-v-4523727e]{min-height:40px}.modal-backdrop[data-v-4523727e]{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-4523727e]{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-4523727e]{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-4523727e]{font-size:15px}.global-wait-card span[data-v-4523727e]{font-size:13px;color:#4d5a6e}.global-wait-spinner[data-v-4523727e]{width:20px;height:20px;border-width:2px}.modal-card[data-v-4523727e]{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-4523727e]{margin:0 0 8px;font-size:18px}.modal-actions[data-v-4523727e]{display:flex;justify-content:flex-end;gap:10px;margin-top:16px}.flow-legend[data-v-4523727e]{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-4523727e]{display:inline-flex;align-items:center;white-space:nowrap;flex:0 0 auto}.flow-toggle[data-v-4523727e]{align-self:end;min-height:44px;white-space:nowrap}.flow-toggle-inline[data-v-4523727e]{align-self:flex-start;min-height:auto;margin-top:6px}.legend-line[data-v-4523727e],.legend-dot[data-v-4523727e]{display:inline-block;vertical-align:middle;margin-right:6px}.legend-line[data-v-4523727e]{width:18px;border-top:3px solid currentColor}.legend-write[data-v-4523727e]{color:#ff9800}.legend-response[data-v-4523727e]{color:#46b86d}.legend-read[data-v-4523727e]{color:#d99a34}.legend-repeat[data-v-4523727e]{color:#c34747}.legend-dot[data-v-4523727e]{width:10px;height:10px;border-radius:var(--soft-radius)}.legend-anomaly[data-v-4523727e]{background:#f08f92}.legend-external[data-v-4523727e]{background:#f5d9a2}.flow-frame[data-v-4523727e]{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-4523727e]{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-4523727e]{height:calc(100vh - 260px)}.card-flow.is-fullscreen .flow-svg[data-v-4523727e]{min-height:calc(100vh - 260px)}.flow-svg[data-v-4523727e]{width:100%;min-width:1180px;min-height:420px;display:block}.flow-empty[data-v-4523727e]{padding:24px}.flow-edge[data-v-4523727e]{fill:none;stroke-linecap:round;vector-effect:non-scaling-stroke}.flow-edge-active[data-v-4523727e]{stroke-dasharray:10 7;animation:graph-flow-4523727e 1.25s linear infinite}.flow-edge-idle[data-v-4523727e]{stroke-dasharray:8 8;animation:none}@keyframes graph-flow-4523727e{0%{stroke-dashoffset:0}to{stroke-dashoffset:-34}}.flow-node circle[data-v-4523727e]{fill:#edf9ef;stroke:#4caf66;stroke-width:2}.flow-node.is-anomaly circle[data-v-4523727e]{fill:#fff1f1;stroke:#e53935}.flow-node.is-external circle[data-v-4523727e]{fill:#fff8ea;stroke:#c98a1a;stroke-dasharray:4 3}.flow-node.is-idle circle[data-v-4523727e]{opacity:.7}.node-label[data-v-4523727e],.node-subtitle[data-v-4523727e],.node-payload[data-v-4523727e],.node-badge[data-v-4523727e]{text-anchor:middle;dominant-baseline:middle}.node-label[data-v-4523727e]{fill:#2f7f48;font-size:12px;font-weight:800}.flow-node.is-external .node-label[data-v-4523727e]{fill:#9a6b24}.node-subtitle[data-v-4523727e]{fill:#7a7368;font-size:10px}.node-payload[data-v-4523727e]{fill:#746d62;font-size:9px;font-family:JetBrains Mono,SFMono-Regular,monospace}.node-badge[data-v-4523727e]{fill:#b3261e;font-size:9px;font-weight:800}.anomaly-list[data-v-4523727e]{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px}.anomaly-card[data-v-4523727e]{padding:14px;border-left:4px solid var(--warn-border);border-radius:var(--soft-radius);background:var(--warn-bg)}.anomaly-head[data-v-4523727e]{display:flex;justify-content:space-between;gap:10px;align-items:baseline}.anomaly-time[data-v-4523727e]{margin:8px 0 10px;color:var(--muted);font-size:12px}.anomaly-card pre[data-v-4523727e]{margin:0;padding:12px;white-space:pre-wrap;word-break:break-word;font-size:12px}.chat-log[data-v-4523727e]{min-height:280px}.ask-row[data-v-4523727e]{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-4523727e]{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-4523727e]:focus{outline:none;border-color:#ef6c00;box-shadow:0 0 0 3px #ef6c0038}.chat-message[data-v-4523727e]{margin-bottom:12px;padding:12px;border-radius:var(--soft-radius)}.chat-message pre[data-v-4523727e]{margin:0;white-space:pre-wrap;word-break:break-word;font-family:inherit}.chat-user[data-v-4523727e]{background:#ff98001f}.chat-assistant[data-v-4523727e]{background:#5bbf731f}.chat-error[data-v-4523727e]{background:var(--err-bg)}.chat-pending[data-v-4523727e]{display:inline-flex;align-items:center;gap:8px;background:#78787814;color:var(--muted)}.chat-pending-spinner[data-v-4523727e]{width:14px;height:14px;border-radius:50%;border:2px solid rgba(90,102,122,.28);border-top-color:#5a667a;animation:chat-pending-spin-4523727e .75s linear infinite}@keyframes chat-pending-spin-4523727e{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.card-flow-builder[data-v-4523727e]{display:flex;flex-direction:column;gap:12px}.beta-badge[data-v-4523727e]{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-4523727e]{display:flex;flex-wrap:wrap;gap:16px;align-items:stretch}.flow-builder-pane[data-v-4523727e]{flex:1 1 300px;min-width:0;display:flex;flex-direction:column;gap:12px}.flow-builder-input[data-v-4523727e]{flex:1 1 300px;max-width:520px}.flow-builder-output[data-v-4523727e]{flex:1.6 1 340px;min-height:120px}.flow-builder-placeholder[data-v-4523727e]{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-4523727e]{margin:0;color:var(--muted-text, #5a667a);font-size:13px;line-height:1.5}.flow-builder-compose[data-v-4523727e]{display:flex;flex-direction:column;gap:10px}.flow-builder-textarea[data-v-4523727e]{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-4523727e]{display:flex;justify-content:flex-end}.flow-builder-pending[data-v-4523727e]{display:flex;align-items:center;gap:10px;color:var(--muted-text, #5a667a);font-size:13px}.flow-builder-error[data-v-4523727e]{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-4523727e]{margin:0;white-space:pre-wrap;word-break:break-word;color:#b3261e;font-size:13px}.flow-builder-result[data-v-4523727e]{display:flex;flex-direction:column;gap:10px}.flow-builder-notes[data-v-4523727e]{margin:0;font-size:13px;line-height:1.5}.flow-builder-warnings[data-v-4523727e]{margin:0;padding-left:18px;color:#8a6d00;font-size:12px;line-height:1.5}.flow-builder-result-head[data-v-4523727e]{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.flow-builder-result-head .secondary-button[data-v-4523727e]{margin-left:auto}.flow-builder-json[data-v-4523727e]{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-4523727e] .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-4523727e] .chat-svg-wrap svg{width:100%;height:auto;display:block}[data-v-4523727e] .chat-table-wrap{overflow:auto}[data-v-4523727e] .chat-table-wrap table,[data-v-4523727e] table{width:100%;border-collapse:collapse;margin-top:8px}[data-v-4523727e] th,[data-v-4523727e] td{padding:6px 8px;border:1px solid rgba(120,120,120,.16)}@media(max-width:1100px){.page-shell[data-v-4523727e]{width:min(100% - 12px,1600px);min-height:100vh;margin-top:6px;grid-template-columns:1fr;gap:10px}.m-header[data-v-4523727e]{display:flex}.app-sidebar[data-v-4523727e]{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-4523727e]{transform:translate(0)}.workspace-shell[data-v-4523727e]{padding-top:70px}.app-sidebar[data-v-4523727e],.workspace-shell[data-v-4523727e]{border-radius:var(--soft-radius)}.sidebar-nav[data-v-4523727e]{display:flex;grid-template-columns:none}.card[data-v-4523727e],.card-summary[data-v-4523727e],.card-bus[data-v-4523727e],.card-chat[data-v-4523727e],.card-flow[data-v-4523727e],.card-anomalies[data-v-4523727e],.card-areas[data-v-4523727e],.card-profiles[data-v-4523727e]{grid-column:span 12}.card-chat[data-v-4523727e]{max-width:100%}}@media(max-width:720px){.page-shell[data-v-4523727e]{width:min(100% - 8px,1440px);gap:8px}.workspace-shell[data-v-4523727e]{padding:12px}.topbar[data-v-4523727e],.card[data-v-4523727e]{padding:14px;border-radius:var(--soft-radius)}.sidebar-nav[data-v-4523727e]{grid-template-columns:none}.rank-row[data-v-4523727e],.event-row[data-v-4523727e],.metric-grid[data-v-4523727e],.flow-toolbar[data-v-4523727e],.areas-layout[data-v-4523727e],.area-columns[data-v-4523727e],.profiles-layout[data-v-4523727e],.area-ga-editor[data-v-4523727e],.area-editor-grid[data-v-4523727e],.planner-step-editor[data-v-4523727e],.planner-step-grid[data-v-4523727e]{grid-template-columns:1fr}.statusbar[data-v-4523727e]{align-items:flex-start}.plan-steps-stack[data-v-4523727e]{margin-left:6px;padding-left:8px}.plan-draft-shell[data-v-4523727e]{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-fb9bab60]{--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-fb9bab60]{--sidebar-current-width: var(--sidebar-collapsed-width)}.m-header[data-v-fb9bab60]{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-fb9bab60]{display:inline-flex;align-items:center;gap:10px}.m-logo-mark[data-v-fb9bab60]{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-fb9bab60]{font-size:21px;font-weight:700;letter-spacing:.02em}.hamburger-icon[data-v-fb9bab60]{position:relative;width:30px;height:22px;border:0;background:transparent;color:inherit;cursor:pointer}.hamburger-icon span[data-v-fb9bab60]{display:block;position:absolute;left:0;width:100%;height:2px;border-radius:2px;background:#fff;transition:.24s ease}.hamburger-icon span[data-v-fb9bab60]:nth-child(1){top:0}.hamburger-icon span[data-v-fb9bab60]:nth-child(2),.hamburger-icon span[data-v-fb9bab60]:nth-child(3){top:9px}.hamburger-icon span[data-v-fb9bab60]:nth-child(4){top:18px}.hamburger-icon-cross span[data-v-fb9bab60]:nth-child(1),.hamburger-icon-cross span[data-v-fb9bab60]:nth-child(4){left:50%;width:0}.hamburger-icon-cross span[data-v-fb9bab60]:nth-child(2){transform:rotate(45deg)}.hamburger-icon-cross span[data-v-fb9bab60]:nth-child(3){transform:rotate(-45deg)}.sidebar-overlay[data-v-fb9bab60]{position:fixed;inset:0;z-index:180;border:0;background:#090c137a}[data-v-fb9bab60] *{--soft-radius: 4px;--hb-primary: #ff9800;--hb-primary-dark: #ef6c00}.app-sidebar[data-v-fb9bab60]{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-fb9bab60]{display:grid;grid-template-columns:34px minmax(0,1fr) 28px;align-items:start;gap:10px}.sidebar-brand-mark[data-v-fb9bab60]{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-fb9bab60]{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-fb9bab60]{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-fb9bab60]:hover{background:#ffffff29}.workspace-shell[data-v-fb9bab60]{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-fb9bab60]{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-fb9bab60]{margin-bottom:16px}.brand[data-v-fb9bab60],.sidebar-brand[data-v-fb9bab60]{margin-bottom:6px;min-width:0}.eyebrow[data-v-fb9bab60]{margin:0 0 6px;color:inherit;font-size:12px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;opacity:.75}.brand h1[data-v-fb9bab60],.sidebar-brand h1[data-v-fb9bab60]{margin:0;font-size:clamp(24px,3.4vw,34px);line-height:1}.workspace-brand h2[data-v-fb9bab60]{margin:0;font-size:clamp(24px,3vw,32px);line-height:1.02;color:#111723}.subhead[data-v-fb9bab60]{max-width:860px;margin:8px 0 0;color:inherit;font-size:12px;line-height:1.4;opacity:.78}.toolbar[data-v-fb9bab60],.statusbar[data-v-fb9bab60],.tab-strip[data-v-fb9bab60],.checkbox[data-v-fb9bab60],.pill-row[data-v-fb9bab60],.preset-row[data-v-fb9bab60],.ask-row[data-v-fb9bab60]{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.toolbar[data-v-fb9bab60]{justify-content:space-between}.toolbar-cluster[data-v-fb9bab60],.action-cluster[data-v-fb9bab60]{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-fb9bab60]{margin-top:16px}.primary-button[data-v-fb9bab60],.preset-button[data-v-fb9bab60],.danger-button[data-v-fb9bab60],.primary-link[data-v-fb9bab60],.secondary-button[data-v-fb9bab60],.tab-button[data-v-fb9bab60]{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-fb9bab60],.primary-link[data-v-fb9bab60],.tab-button.active[data-v-fb9bab60]{border-color:transparent;background:var(--hb-primary);color:#fff}.secondary-button[data-v-fb9bab60],.preset-button[data-v-fb9bab60],.tab-button[data-v-fb9bab60]{border-color:transparent;background:#607d8b;color:#fff}.danger-button[data-v-fb9bab60]{border-color:transparent;background:#d32f2f;color:#fff}.preset-button[data-v-fb9bab60]:hover,.danger-button[data-v-fb9bab60]:hover,.secondary-button[data-v-fb9bab60]:hover,.tab-button[data-v-fb9bab60]:hover{background:#546e7a;border-color:transparent}.danger-button[data-v-fb9bab60]:hover{background:#c62828;border-color:transparent}.new-button[data-v-fb9bab60]{background:linear-gradient(180deg,#62c27a,#43a85f);border-color:transparent;color:#fff}.new-button[data-v-fb9bab60]:hover{background:linear-gradient(180deg,#74cf8b,#4fb46b);border-color:transparent}.primary-button[data-v-fb9bab60]:hover,.primary-link[data-v-fb9bab60]:hover,.tab-button.active[data-v-fb9bab60]:hover{background:#e68900;border-color:transparent}.primary-button[data-v-fb9bab60]:disabled,.preset-button[data-v-fb9bab60]:disabled,.danger-button[data-v-fb9bab60]:disabled,.secondary-button[data-v-fb9bab60]:disabled{opacity:.6;cursor:not-allowed}.hidden-file-input[data-v-fb9bab60]{display:none}.node-select[data-v-fb9bab60]{min-width:min(360px,100%)}.sidebar-select[data-v-fb9bab60]{min-width:0;width:100%;border-color:#ffffff14;background:#ffffff0f;color:#f6f8fb}.sidebar-select option[data-v-fb9bab60]{color:#0f1520}.node-select[data-v-fb9bab60],.checkbox[data-v-fb9bab60],.summary-pre[data-v-fb9bab60],.chat-log[data-v-fb9bab60],.anomaly-card pre[data-v-fb9bab60]{border:1px solid var(--line);border-radius:var(--soft-radius);background:#ffffffe0}.node-select[data-v-fb9bab60]{padding:8px 10px;color:var(--text);font-size:12px}.checkbox[data-v-fb9bab60]{padding:8px 10px;gap:8px;font-size:12px}.sidebar-checkbox[data-v-fb9bab60]{border-color:#ffffff14;background:#ffffff0f;color:#eef3f9}.sidebar-panel[data-v-fb9bab60]{padding:12px;border:1px solid rgba(255,255,255,.14);border-radius:var(--soft-radius);background:#ffffff0d}.sidebar-field[data-v-fb9bab60]{display:flex;flex-direction:column;gap:6px;font-size:11px;font-weight:800;color:#f6f8fce0}.sidebar-nav[data-v-fb9bab60]{display:flex;flex-direction:column;gap:0}.sidebar-nav .tab-button[data-v-fb9bab60]{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-fb9bab60]{flex:0 0 38px;width:38px;min-width:38px;display:flex;align-items:center;justify-content:center}.sidebar-nav-svg[data-v-fb9bab60]{width:17px;height:17px;fill:currentColor}.sidebar-nav-copy[data-v-fb9bab60]{flex:1;min-width:0;overflow:hidden;white-space:normal;line-height:1.15;padding-left:10px}.sidebar-nav .sidebar-nav-child[data-v-fb9bab60]{width:100%;margin-left:0}.sidebar-nav .tab-button.active[data-v-fb9bab60]{background:transparent;color:#fff}.sidebar-nav .tab-button[data-v-fb9bab60]:hover{background:var(--hb-primary)}.sidebar-nav .tab-button[data-v-fb9bab60]:disabled{opacity:.42;cursor:not-allowed;background:#ffffff0d;color:#edf1f89e}.sidebar-nav .tab-button[data-v-fb9bab60]:disabled:hover{background:#ffffff0d}.sidebar-nav .tab-button:disabled .sidebar-nav-icon[data-v-fb9bab60]{color:#edf1f89e}.sidebar-nav .tab-button.active .sidebar-nav-icon[data-v-fb9bab60]{color:var(--hb-primary)}.sidebar-nav .tab-button.active:hover .sidebar-nav-icon[data-v-fb9bab60]{color:#fff}.sidebar-nav-title[data-v-fb9bab60]{display:block;font-size:17px;font-weight:400}.sidebar-nav-meta[data-v-fb9bab60]{display:block;margin-top:3px;font-size:11px;opacity:.72;font-weight:600}.page-shell.sidebar-collapsed .sidebar-panel[data-v-fb9bab60],.page-shell.sidebar-collapsed .sidebar-footer[data-v-fb9bab60],.page-shell.sidebar-collapsed .sidebar-brand .eyebrow[data-v-fb9bab60],.page-shell.sidebar-collapsed .sidebar-brand h1[data-v-fb9bab60],.page-shell.sidebar-collapsed .sidebar-brand .subhead[data-v-fb9bab60]{display:none}.page-shell.sidebar-collapsed .sidebar-brand-wrap[data-v-fb9bab60]{grid-template-columns:1fr;justify-items:center}.page-shell.sidebar-collapsed .app-sidebar[data-v-fb9bab60]{align-items:center;padding:14px 10px}.page-shell.sidebar-collapsed .sidebar-collapse-toggle[data-v-fb9bab60]{margin-top:4px}.page-shell.sidebar-collapsed .sidebar-nav .tab-button[data-v-fb9bab60]{justify-content:center;padding:15px 10px}.page-shell.sidebar-collapsed .sidebar-nav .sidebar-nav-child[data-v-fb9bab60]{width:100%;margin-left:0}.page-shell.sidebar-collapsed .sidebar-nav-copy[data-v-fb9bab60]{display:none}.sidebar-actions[data-v-fb9bab60]{display:flex;flex-direction:column;gap:14px}.sidebar-section-toggle[data-v-fb9bab60]{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-fb9bab60]{display:block;font-size:13px;font-weight:800}.sidebar-section-toggle small[data-v-fb9bab60]{display:block;margin-top:3px;font-size:11px;opacity:.72}.sidebar-test-results[data-v-fb9bab60]{display:flex;flex-direction:column;gap:10px}.sidebar-results-list[data-v-fb9bab60]{display:flex;flex-direction:column;gap:8px;max-height:320px;overflow:auto;padding-right:2px}.sidebar-result-row[data-v-fb9bab60]{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:stretch}.sidebar-result-delete-button[data-v-fb9bab60]{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-fb9bab60]:hover:not(:disabled){background:linear-gradient(180deg,#c73030,#a01b1b)}.sidebar-result-delete-button[data-v-fb9bab60]:disabled{opacity:.72;cursor:wait}.sidebar-result-item[data-v-fb9bab60]{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-fb9bab60]{border-color:#ffffff57;background:linear-gradient(180deg,#6877b3a3,#45517cb8);box-shadow:inset 0 0 0 1px #ffffff14}.sidebar-result-item.running[data-v-fb9bab60]{box-shadow:inset 0 0 0 1px #f0b3228c}.sidebar-result-head[data-v-fb9bab60]{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%}.sidebar-result-head strong[data-v-fb9bab60]{font-size:12px;font-weight:800}.sidebar-result-title[data-v-fb9bab60]{display:inline-flex;align-items:center;gap:8px;min-width:0}.sidebar-result-item .area-list-meta[data-v-fb9bab60],.sidebar-result-item .area-list-tags[data-v-fb9bab60]{color:#edf1f8c7}.sidebar-result-status[data-v-fb9bab60]{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-fb9bab60]{color:#8fe0a8}.sidebar-result-status.status-warn[data-v-fb9bab60]{color:#ffd17a}.sidebar-result-status.status-fail[data-v-fb9bab60]{color:#ffb9c3}.sidebar-empty-state[data-v-fb9bab60]{margin:0;color:#f6f8fcc2}.results-page-layout[data-v-fb9bab60]{grid-template-columns:minmax(320px,420px) minmax(0,1fr)}.results-page-list[data-v-fb9bab60]{max-height:min(68vh,760px);padding-right:4px}.results-page-list .sidebar-result-item[data-v-fb9bab60]{border-color:#7e889a4d;background:linear-gradient(180deg,#fdfeff,#f2f7fd);color:#243042}.results-page-list .sidebar-result-item.active[data-v-fb9bab60]{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-fb9bab60]{box-shadow:inset 0 0 0 1px #ff980080}.results-page-list .sidebar-result-item .area-list-meta[data-v-fb9bab60],.results-page-list .sidebar-result-item .area-list-tags[data-v-fb9bab60]{color:#556071}.results-page-list .sidebar-result-status[data-v-fb9bab60]{color:#374151}.results-page-list .sidebar-result-status.status-pass[data-v-fb9bab60]{color:#2f8d53}.results-page-list .sidebar-result-status.status-warn[data-v-fb9bab60]{color:#ad730b}.results-page-list .sidebar-result-status.status-fail[data-v-fb9bab60]{color:#b73845}.sidebar-action-button[data-v-fb9bab60]{width:100%;justify-content:center}.sidebar-footer[data-v-fb9bab60]{margin-top:auto;display:flex;flex-direction:column;gap:8px;padding-top:8px}.sidebar-doc-link[data-v-fb9bab60]{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-fb9bab60]:hover{text-decoration:underline}.support-link-row[data-v-fb9bab60]{display:flex;flex-direction:column;gap:8px}.support-link-button[data-v-fb9bab60]{display:flex;width:100%;justify-content:center;white-space:nowrap}.support-link-button-youtube[data-v-fb9bab60]{background:#cc2f2f}.support-link-button-youtube[data-v-fb9bab60]:hover{background:#b72727}.statusbar[data-v-fb9bab60]{justify-content:space-between}.status-pill[data-v-fb9bab60],.meta-chip[data-v-fb9bab60],.pill[data-v-fb9bab60]{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-fb9bab60],.meta-chip[data-v-fb9bab60],.pill.neutral[data-v-fb9bab60]{color:var(--text)}.status-pill.error[data-v-fb9bab60],.pill.danger[data-v-fb9bab60]{color:#a4333a}.status-pill-spinner[data-v-fb9bab60]{width:11px;height:11px;border-width:2px;border-color:#5a667a3d;border-top-color:currentColor}.pill.success[data-v-fb9bab60]{color:#1b7d36}.status-detail[data-v-fb9bab60]{color:inherit;font-size:12px;font-weight:700;opacity:.7}.content-grid[data-v-fb9bab60]{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:16px}.workspace-main[data-v-fb9bab60]{padding:0 2px 6px}.card[data-v-fb9bab60]{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-fb9bab60],.card-setup-doctor[data-v-fb9bab60],.card-bus[data-v-fb9bab60],.card-chat[data-v-fb9bab60],.card-flow[data-v-fb9bab60],.card-areas[data-v-fb9bab60],.card-profiles[data-v-fb9bab60]{grid-column:span 6}.card-setup-doctor[data-v-fb9bab60]{border-color:#ef6c0066;background:linear-gradient(145deg,#fff8edfa,#fffffffa 72%)}.card-setup-doctor.setup-doctor-ready[data-v-fb9bab60]{border-color:#2e7d326b;background:linear-gradient(145deg,#effaf0fa,#fffffffa 72%)}.card-setup-doctor.setup-doctor-blocked[data-v-fb9bab60]{border-color:#c628286b;background:linear-gradient(145deg,#fff0f0fa,#fffffffa 72%)}.setup-doctor-score[data-v-fb9bab60]{font-weight:800}.setup-doctor-summary[data-v-fb9bab60]{margin:0 0 12px;color:#374151;line-height:1.5}.setup-doctor-check-list[data-v-fb9bab60]{display:grid;gap:0}.setup-doctor-check[data-v-fb9bab60]{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-fb9bab60]{flex:1 1 auto;min-width:0}.setup-doctor-check p[data-v-fb9bab60]{margin:3px 0 0;color:var(--muted);font-size:12px;line-height:1.4}.setup-doctor-check-badge[data-v-fb9bab60]{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-fb9bab60]{background:#dff0d8;color:#256029}.setup-doctor-check-badge.check-warn[data-v-fb9bab60]{background:#fff3cd;color:#7a5200}.setup-doctor-check-badge.check-fail[data-v-fb9bab60]{background:#f8d7da;color:#842029}.setup-doctor-demo[data-v-fb9bab60]{margin-top:12px;padding-top:12px;border-top:1px dashed rgba(120,120,120,.24)}.setup-doctor-demo .preset-row[data-v-fb9bab60]{align-items:stretch;margin-top:9px}.setup-doctor-demo-button[data-v-fb9bab60]{flex:1 1 180px;white-space:normal;text-align:left}.card-flow[data-v-fb9bab60],.card-anomalies[data-v-fb9bab60]{grid-column:span 6}.card-flow[data-v-fb9bab60],.card-areas[data-v-fb9bab60],.card-profiles[data-v-fb9bab60],.card-settings[data-v-fb9bab60],.card-flow-builder[data-v-fb9bab60]{grid-column:span 12}.card-chat[data-v-fb9bab60]{grid-column:1 / -1;max-width:100%}.card-profiles[data-v-fb9bab60]{border-color:#54607461;background:linear-gradient(180deg,#f4f7fbfa,#e9eef4fa);box-shadow:0 18px 36px #1118271f}.card-head[data-v-fb9bab60]{display:flex;justify-content:space-between;gap:12px;align-items:center;margin-bottom:14px}.card-head-actions[data-v-fb9bab60]{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.settings-tab-strip[data-v-fb9bab60]{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-fb9bab60]{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-fb9bab60]:hover{background:#66769424;color:#243042}.settings-tab-button.active[data-v-fb9bab60]{border-color:#ef6c0057;background:linear-gradient(180deg,#fff7e9,#ffeccf);color:#8e4f00}.settings-panel[data-v-fb9bab60]{border-color:#616c8057;background:linear-gradient(180deg,#fff,#f7fafd);box-shadow:0 2px #79839629}.settings-panel-head[data-v-fb9bab60]{padding-bottom:10px;border-bottom:1px solid rgba(148,158,176,.32);margin-bottom:12px}.settings-node-grid[data-v-fb9bab60]{display:grid;grid-template-columns:minmax(240px,420px) auto;gap:12px;align-items:end;margin-top:12px}.settings-node-checkbox[data-v-fb9bab60]{width:fit-content;min-height:36px}.settings-config-actions[data-v-fb9bab60]{margin-top:12px}.chat-learning-panel[data-v-fb9bab60]{min-height:520px}.chat-learning-meta[data-v-fb9bab60]{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}.chat-learning-dirty[data-v-fb9bab60]{border-color:#ef6c005c;background:#ffefd5eb;color:#8e4f00}.chat-learning-size-over[data-v-fb9bab60]{border-color:#c439396b!important;background:#ffe3e3f0!important;color:#a42828!important}.chat-learning-path-field[data-v-fb9bab60]{margin-top:14px}.chat-learning-path-field code[data-v-fb9bab60]{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-fb9bab60]{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-fb9bab60]:focus{outline:2px solid rgba(239,108,0,.23);border-color:#ef6c00a3}.chat-learning-editor[data-v-fb9bab60]:disabled{opacity:.68;cursor:wait}.chat-learning-error[data-v-fb9bab60]{margin-top:10px}.chat-learning-actions[data-v-fb9bab60]{margin-top:12px}.chat-learning-modified[data-v-fb9bab60]{margin:12px 0 0}@media(max-width:900px){.settings-node-grid[data-v-fb9bab60]{grid-template-columns:minmax(0,1fr);align-items:start}.settings-node-checkbox[data-v-fb9bab60]{width:100%}.chat-learning-meta[data-v-fb9bab60]{justify-content:flex-start}.chat-learning-editor[data-v-fb9bab60]{min-height:360px}}.plan-run-actions[data-v-fb9bab60]{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-fb9bab60]{margin:0;font-size:16px}.summary-pre[data-v-fb9bab60],.chat-log[data-v-fb9bab60]{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-fb9bab60]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:14px}.metric[data-v-fb9bab60]{display:flex;flex-direction:column;gap:6px;padding:0;border:0;border-radius:0;background:transparent;box-shadow:none}.metric span[data-v-fb9bab60]{display:block;margin-bottom:0;color:var(--muted);font-size:12px;font-weight:700}.metric strong[data-v-fb9bab60]{font-size:17px}.rank-list[data-v-fb9bab60],.event-list[data-v-fb9bab60],.anomaly-list[data-v-fb9bab60]{margin:0;padding:0;list-style:none}.rank-row[data-v-fb9bab60],.event-row[data-v-fb9bab60]{display:grid;gap:8px;align-items:center;padding:10px 0;border-bottom:1px solid rgba(120,120,120,.14)}.rank-row[data-v-fb9bab60]{grid-template-columns:minmax(86px,120px) minmax(0,1fr) auto}.event-row[data-v-fb9bab60]{grid-template-columns:minmax(0,1fr) minmax(0,1.6fr) auto}.rank-title[data-v-fb9bab60],.event-name[data-v-fb9bab60]{font-weight:800}.rank-label[data-v-fb9bab60]{color:var(--muted);font-size:12px}.event-bar[data-v-fb9bab60]{height:10px;overflow:hidden;border-radius:var(--soft-radius);background:#ff98001f}.event-bar-fill[data-v-fb9bab60]{display:block;height:100%;border-radius:var(--soft-radius);background:linear-gradient(90deg,var(--accent),#4bbf77)}.areas-toolbar[data-v-fb9bab60]{display:flex;flex-wrap:wrap;gap:12px;align-items:end;margin-bottom:16px}.areas-layout[data-v-fb9bab60]{display:flex;flex-direction:column;gap:16px}.area-list-item[data-v-fb9bab60]{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-fb9bab60]:hover,.area-list-item.active[data-v-fb9bab60]{border-color:#ff980057;background:var(--accent-soft)}.area-list-title[data-v-fb9bab60]{font-weight:800}.area-listbox-shell[data-v-fb9bab60]{width:100%}.area-search-select[data-v-fb9bab60]{position:relative}.area-search-select-input[data-v-fb9bab60]{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-fb9bab60]{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-fb9bab60]{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-fb9bab60]:hover,.area-search-select-option.active[data-v-fb9bab60]{background:var(--accent-soft)}.area-list-meta[data-v-fb9bab60],.area-list-tags[data-v-fb9bab60],.area-detail-subhead[data-v-fb9bab60]{color:var(--muted);font-size:12px}.area-detail[data-v-fb9bab60]{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-fb9bab60]{display:grid;grid-template-columns:minmax(260px,340px) minmax(0,1fr);gap:16px}.test-planner-layout[data-v-fb9bab60]{display:flex;flex-direction:column;gap:16px;align-items:stretch}.result-only-layout[data-v-fb9bab60]{grid-template-columns:minmax(0,1fr)}.card-results-focus[data-v-fb9bab60]{grid-column:span 12}.profile-list[data-v-fb9bab60],.profile-editor-stack[data-v-fb9bab60]{display:flex;flex-direction:column;gap:12px}.planner-sidecard[data-v-fb9bab60]{gap:12px}.card-profiles .area-detail[data-v-fb9bab60]{border-color:#616c8057;background:linear-gradient(180deg,#fff,#f7fafd);box-shadow:0 2px #79839629}.card-profiles .card-head[data-v-fb9bab60]{padding-bottom:10px;border-bottom:1px solid rgba(148,158,176,.32)}.card-profiles .area-detail-subhead[data-v-fb9bab60]{color:#4b5565}.card-profiles .meta-chip[data-v-fb9bab60],.card-profiles .pill.neutral[data-v-fb9bab60]{border:0;background:transparent;color:#1c2430}.card-profiles .planner-list .area-list-item[data-v-fb9bab60]{border-color:#8892a559;background:linear-gradient(180deg,#fffffffa,#f4f7fbfa);box-shadow:0 1px #99a3b524}.card-profiles .planner-list .area-list-item[data-v-fb9bab60]:hover,.card-profiles .planner-list .area-list-item.active[data-v-fb9bab60]{border-color:#4a5a909e;background:linear-gradient(180deg,#e0e6f3f5,#d6deeef5)}.card-profiles .metric[data-v-fb9bab60]{padding:0;border:0;border-radius:0;background:transparent;box-shadow:none}.card-profiles .metric span[data-v-fb9bab60]{color:#475163}.card-profiles .metric strong[data-v-fb9bab60]{color:#161d29;font-size:20px}.ai-planner-shell[data-v-fb9bab60]{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-fb9bab60]{margin-bottom:12px}.ai-planner-shell-head.template-builder-focus-head[data-v-fb9bab60]{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;flex-wrap:wrap}.ai-planner-shell-head h4[data-v-fb9bab60]{margin:0}.planner-pairs[data-v-fb9bab60]{margin-top:12px}.planner-generation[data-v-fb9bab60]{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-fb9bab60]{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-fb9bab60]{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-fb9bab60]{border-left-color:#3d5ca8;background:linear-gradient(180deg,#f5f9ff,#e9f0fb);box-shadow:0 0 0 2px #3d5ca829}.planner-step-dragging[data-v-fb9bab60]{opacity:.56;cursor:grabbing}.planner-step-drop-target[data-v-fb9bab60]{box-shadow:0 0 0 2px #46b86d2e;border-left-color:#46b86d}.planner-step-title[data-v-fb9bab60]{display:flex;align-items:center;gap:10px}.planner-step-summary[data-v-fb9bab60]{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-fb9bab60]{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-fb9bab60]{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-fb9bab60]{display:inline-block;font-size:12px;line-height:1;transition:transform .16s ease}.collapse-icon.collapsed[data-v-fb9bab60]{transform:rotate(-90deg)}.planner-step-editor[data-v-fb9bab60]{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-fb9bab60]{padding:10px 12px 12px;border:1px solid rgba(155,165,183,.28);background:#ffffffe6}.planner-field-group h4[data-v-fb9bab60]{margin:0 0 10px;font-size:12px;letter-spacing:.04em;text-transform:uppercase;color:#1d2433}.planner-field-group-grid[data-v-fb9bab60]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 12px}.planner-field-group-grid .group-span[data-v-fb9bab60]{grid-column:1 / -1}.planner-check-sections[data-v-fb9bab60]{display:grid;gap:10px;margin-top:10px}.planner-check-section[data-v-fb9bab60]{padding:10px 12px;border:1px solid rgba(155,165,183,.28);background:#ffffffdb}.planner-check-section h4[data-v-fb9bab60]{margin:0 0 8px;font-size:12px;letter-spacing:.04em;text-transform:uppercase;color:#1d2433}.planner-check-section .area-detail-subhead[data-v-fb9bab60]{margin:0 0 8px}.running-headline[data-v-fb9bab60]{display:inline-flex;align-items:center;gap:10px;margin:0}.running-spinner[data-v-fb9bab60]{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-fb9bab60 .85s linear infinite}.run-button-spinner[data-v-fb9bab60]{margin-right:6px;vertical-align:-2px}.run-chip-spinner[data-v-fb9bab60]{width:12px;height:12px;margin-right:6px}@keyframes running-spin-fb9bab60{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.editor-check-sections[data-v-fb9bab60]{grid-column:1 / -1}.compact-grid[data-v-fb9bab60]{grid-template-columns:repeat(2,minmax(0,1fr));margin-top:0}.result-check-sections .planner-check-section[data-v-fb9bab60]{background:#fafcfffa}.planner-step-grid[data-v-fb9bab60]{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-fb9bab60],.area-detail h4[data-v-fb9bab60]{margin:0}.area-detail-subhead[data-v-fb9bab60]{margin:6px 0 0}.area-metrics[data-v-fb9bab60]{margin-top:4px}.area-chips[data-v-fb9bab60]{display:flex;flex-wrap:wrap;gap:8px;margin:14px 0}.area-editor[data-v-fb9bab60]{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-fb9bab60]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.area-editor-span[data-v-fb9bab60]{grid-column:1 / -1}.area-editor-note[data-v-fb9bab60]{margin:12px 0 0;color:var(--muted);font-size:12px}.compact-preset-row[data-v-fb9bab60]{margin-top:10px}.compact-preset-row .preset-button[data-v-fb9bab60]{text-align:left;font-size:11px;padding:7px 10px}.area-ga-editor[data-v-fb9bab60]{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;margin-top:16px}.area-ga-list[data-v-fb9bab60],.area-ga-catalog[data-v-fb9bab60]{max-height:320px;overflow:auto}.area-ga-item[data-v-fb9bab60]{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-fb9bab60]{min-width:0;flex:1}.area-ga-actions[data-v-fb9bab60]{display:flex;align-items:end;gap:10px;flex-wrap:wrap}.area-ga-role-field[data-v-fb9bab60]{min-width:148px}.area-ga-item strong[data-v-fb9bab60],.planner-step-grid strong[data-v-fb9bab60]{color:var(--text)}.area-ga-item span[data-v-fb9bab60]{display:block;color:var(--muted);font-size:12px}.profile-runbar[data-v-fb9bab60]{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-fb9bab60]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin:16px 0}.simple-list[data-v-fb9bab60]{margin:10px 0 0;padding-left:18px}.simple-list li[data-v-fb9bab60]{margin-bottom:6px}.simple-list-mono[data-v-fb9bab60]{font-family:JetBrains Mono,SFMono-Regular,monospace;font-size:11px}.report-checks[data-v-fb9bab60]{display:grid;gap:10px;margin:16px 0}.plan-steps-stack[data-v-fb9bab60]{margin-left:12px;padding-left:12px}.plan-draft-shell[data-v-fb9bab60]{margin-left:12px;width:calc(100% - 12px)}.report-check[data-v-fb9bab60]{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-fb9bab60]{border-left-color:#46b86d;background:linear-gradient(180deg,#f7fcf8,#eef7f0)}.report-warn[data-v-fb9bab60]{border-left-color:#d99a34;background:linear-gradient(180deg,#fffaf2,#fcf4e5)}.report-fail[data-v-fb9bab60]{border-left-color:#d94b55;background:linear-gradient(180deg,#fff6f6,#fceced)}.bus-track[data-v-fb9bab60]{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-fb9bab60]{position:absolute;top:0;bottom:0}.segment-connected[data-v-fb9bab60]{background:linear-gradient(90deg,#4ad06d,#38c45f)}.segment-disconnected[data-v-fb9bab60]{background:linear-gradient(90deg,#eb6a74,#d94b55)}.bus-scale[data-v-fb9bab60]{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-fb9bab60]:nth-child(2){text-align:center}.bus-scale span[data-v-fb9bab60]:nth-child(3){text-align:right}.bus-note[data-v-fb9bab60],.flow-note[data-v-fb9bab60],.empty-state[data-v-fb9bab60]{color:var(--muted);line-height:1.5}.flow-toolbar[data-v-fb9bab60]{display:grid;grid-template-columns:120px minmax(180px,1fr) minmax(220px,1.2fr) auto;gap:12px;align-items:start}.flow-field[data-v-fb9bab60]{display:flex;flex-direction:column;gap:6px;color:var(--muted);font-size:11px;font-weight:700}.flow-field input[data-v-fb9bab60],.flow-field select[data-v-fb9bab60],.flow-field textarea[data-v-fb9bab60]{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-fb9bab60]{padding-right:28px}.flow-field textarea[data-v-fb9bab60]{resize:vertical;min-height:62px;font:inherit}.flow-field select[multiple][data-v-fb9bab60],.flow-field-select select[data-v-fb9bab60]{min-height:108px;padding-right:10px}.compact-actions[data-v-fb9bab60]{justify-content:flex-end}.compact-toggle[data-v-fb9bab60]{min-height:40px}.modal-backdrop[data-v-fb9bab60]{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-fb9bab60]{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-fb9bab60]{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-fb9bab60]{font-size:15px}.global-wait-card span[data-v-fb9bab60]{font-size:13px;color:#4d5a6e}.global-wait-spinner[data-v-fb9bab60]{width:20px;height:20px;border-width:2px}.modal-card[data-v-fb9bab60]{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-fb9bab60]{margin:0 0 8px;font-size:18px}.modal-actions[data-v-fb9bab60]{display:flex;justify-content:flex-end;gap:10px;margin-top:16px}.flow-legend[data-v-fb9bab60]{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-fb9bab60]{display:inline-flex;align-items:center;white-space:nowrap;flex:0 0 auto}.flow-toggle[data-v-fb9bab60]{align-self:end;min-height:44px;white-space:nowrap}.flow-toggle-inline[data-v-fb9bab60]{align-self:flex-start;min-height:auto;margin-top:6px}.legend-line[data-v-fb9bab60],.legend-dot[data-v-fb9bab60]{display:inline-block;vertical-align:middle;margin-right:6px}.legend-line[data-v-fb9bab60]{width:18px;border-top:3px solid currentColor}.legend-write[data-v-fb9bab60]{color:#ff9800}.legend-response[data-v-fb9bab60]{color:#46b86d}.legend-read[data-v-fb9bab60]{color:#d99a34}.legend-repeat[data-v-fb9bab60]{color:#c34747}.legend-dot[data-v-fb9bab60]{width:10px;height:10px;border-radius:var(--soft-radius)}.legend-anomaly[data-v-fb9bab60]{background:#f08f92}.legend-external[data-v-fb9bab60]{background:#f5d9a2}.flow-frame[data-v-fb9bab60]{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-fb9bab60]{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-fb9bab60]{height:calc(100vh - 260px)}.card-flow.is-fullscreen .flow-svg[data-v-fb9bab60]{min-height:calc(100vh - 260px)}.flow-svg[data-v-fb9bab60]{width:100%;min-width:1180px;min-height:420px;display:block}.flow-empty[data-v-fb9bab60]{padding:24px}.flow-edge[data-v-fb9bab60]{fill:none;stroke-linecap:round;vector-effect:non-scaling-stroke}.flow-edge-active[data-v-fb9bab60]{stroke-dasharray:10 7;animation:graph-flow-fb9bab60 1.25s linear infinite}.flow-edge-idle[data-v-fb9bab60]{stroke-dasharray:8 8;animation:none}@keyframes graph-flow-fb9bab60{0%{stroke-dashoffset:0}to{stroke-dashoffset:-34}}.flow-node circle[data-v-fb9bab60]{fill:#edf9ef;stroke:#4caf66;stroke-width:2}.flow-node.is-anomaly circle[data-v-fb9bab60]{fill:#fff1f1;stroke:#e53935}.flow-node.is-external circle[data-v-fb9bab60]{fill:#fff8ea;stroke:#c98a1a;stroke-dasharray:4 3}.flow-node.is-idle circle[data-v-fb9bab60]{opacity:.7}.node-label[data-v-fb9bab60],.node-subtitle[data-v-fb9bab60],.node-payload[data-v-fb9bab60],.node-badge[data-v-fb9bab60]{text-anchor:middle;dominant-baseline:middle}.node-label[data-v-fb9bab60]{fill:#2f7f48;font-size:12px;font-weight:800}.flow-node.is-external .node-label[data-v-fb9bab60]{fill:#9a6b24}.node-subtitle[data-v-fb9bab60]{fill:#7a7368;font-size:10px}.node-payload[data-v-fb9bab60]{fill:#746d62;font-size:9px;font-family:JetBrains Mono,SFMono-Regular,monospace}.node-badge[data-v-fb9bab60]{fill:#b3261e;font-size:9px;font-weight:800}.anomaly-list[data-v-fb9bab60]{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px}.anomaly-card[data-v-fb9bab60]{padding:14px;border-left:4px solid var(--warn-border);border-radius:var(--soft-radius);background:var(--warn-bg)}.anomaly-head[data-v-fb9bab60]{display:flex;justify-content:space-between;gap:10px;align-items:baseline}.anomaly-time[data-v-fb9bab60]{margin:8px 0 10px;color:var(--muted);font-size:12px}.anomaly-card pre[data-v-fb9bab60]{margin:0;padding:12px;white-space:pre-wrap;word-break:break-word;font-size:12px}.chat-log[data-v-fb9bab60]{min-height:280px}.ask-row[data-v-fb9bab60]{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-fb9bab60]{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-fb9bab60]:focus{outline:none;border-color:#ef6c00;box-shadow:0 0 0 3px #ef6c0038}.chat-message[data-v-fb9bab60]{margin-bottom:12px;padding:12px;border-radius:var(--soft-radius)}.chat-message pre[data-v-fb9bab60]{margin:0;white-space:pre-wrap;word-break:break-word;font-family:inherit}.chat-user[data-v-fb9bab60]{background:#ff98001f}.chat-assistant[data-v-fb9bab60]{background:#5bbf731f}.chat-error[data-v-fb9bab60]{background:var(--err-bg)}.chat-pending[data-v-fb9bab60]{display:inline-flex;align-items:center;gap:8px;background:#78787814;color:var(--muted)}.chat-pending-spinner[data-v-fb9bab60]{width:14px;height:14px;border-radius:50%;border:2px solid rgba(90,102,122,.28);border-top-color:#5a667a;animation:chat-pending-spin-fb9bab60 .75s linear infinite}@keyframes chat-pending-spin-fb9bab60{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.card-flow-builder[data-v-fb9bab60]{display:flex;flex-direction:column;gap:12px}.beta-badge[data-v-fb9bab60]{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-fb9bab60]{display:flex;flex-wrap:wrap;gap:16px;align-items:stretch}.flow-builder-pane[data-v-fb9bab60]{flex:1 1 300px;min-width:0;display:flex;flex-direction:column;gap:12px}.flow-builder-input[data-v-fb9bab60]{flex:1 1 300px;max-width:520px}.flow-builder-output[data-v-fb9bab60]{flex:1.6 1 340px;min-height:120px}.flow-builder-placeholder[data-v-fb9bab60]{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-fb9bab60]{margin:0;color:var(--muted-text, #5a667a);font-size:13px;line-height:1.5}.flow-builder-compose[data-v-fb9bab60]{display:flex;flex-direction:column;gap:10px}.flow-builder-textarea[data-v-fb9bab60]{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-fb9bab60]{display:flex;justify-content:flex-end}.flow-builder-pending[data-v-fb9bab60]{display:flex;align-items:center;gap:10px;color:var(--muted-text, #5a667a);font-size:13px}.flow-builder-error[data-v-fb9bab60]{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-fb9bab60]{margin:0;white-space:pre-wrap;word-break:break-word;color:#b3261e;font-size:13px}.flow-builder-result[data-v-fb9bab60]{display:flex;flex-direction:column;gap:10px}.flow-builder-notes[data-v-fb9bab60]{margin:0;font-size:13px;line-height:1.5}.flow-builder-warnings[data-v-fb9bab60]{margin:0;padding-left:18px;color:#8a6d00;font-size:12px;line-height:1.5}.flow-builder-result-head[data-v-fb9bab60]{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.flow-builder-result-head .secondary-button[data-v-fb9bab60]{margin-left:auto}.flow-builder-json[data-v-fb9bab60]{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-fb9bab60] .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-fb9bab60] .chat-svg-wrap svg{width:100%;height:auto;display:block}[data-v-fb9bab60] .chat-table-wrap{overflow:auto}[data-v-fb9bab60] .chat-table-wrap table,[data-v-fb9bab60] table{width:100%;border-collapse:collapse;margin-top:8px}[data-v-fb9bab60] th,[data-v-fb9bab60] td{padding:6px 8px;border:1px solid rgba(120,120,120,.16)}@media(max-width:1100px){.page-shell[data-v-fb9bab60]{width:min(100% - 12px,1600px);min-height:100vh;margin-top:6px;grid-template-columns:1fr;gap:10px}.m-header[data-v-fb9bab60]{display:flex}.app-sidebar[data-v-fb9bab60]{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-fb9bab60]{transform:translate(0)}.workspace-shell[data-v-fb9bab60]{padding-top:70px}.app-sidebar[data-v-fb9bab60],.workspace-shell[data-v-fb9bab60]{border-radius:var(--soft-radius)}.sidebar-nav[data-v-fb9bab60]{display:flex;grid-template-columns:none}.card[data-v-fb9bab60],.card-summary[data-v-fb9bab60],.card-bus[data-v-fb9bab60],.card-chat[data-v-fb9bab60],.card-flow[data-v-fb9bab60],.card-anomalies[data-v-fb9bab60],.card-areas[data-v-fb9bab60],.card-profiles[data-v-fb9bab60]{grid-column:span 12}.card-chat[data-v-fb9bab60]{max-width:100%}}@media(max-width:720px){.page-shell[data-v-fb9bab60]{width:min(100% - 8px,1440px);gap:8px}.workspace-shell[data-v-fb9bab60]{padding:12px}.topbar[data-v-fb9bab60],.card[data-v-fb9bab60]{padding:14px;border-radius:var(--soft-radius)}.sidebar-nav[data-v-fb9bab60]{grid-template-columns:none}.rank-row[data-v-fb9bab60],.event-row[data-v-fb9bab60],.metric-grid[data-v-fb9bab60],.flow-toolbar[data-v-fb9bab60],.areas-layout[data-v-fb9bab60],.area-columns[data-v-fb9bab60],.profiles-layout[data-v-fb9bab60],.area-ga-editor[data-v-fb9bab60],.area-editor-grid[data-v-fb9bab60],.planner-step-editor[data-v-fb9bab60],.planner-step-grid[data-v-fb9bab60]{grid-template-columns:1fr}.statusbar[data-v-fb9bab60]{align-items:flex-start}.plan-steps-stack[data-v-fb9bab60]{margin-left:6px;padding-left:8px}.plan-draft-shell[data-v-fb9bab60]{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}
|