@memberjunction/ng-conversations 6.2.0-edge.5 → 6.2.0-edge.7
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/dist/lib/components/attachment/image-viewer.component.d.ts +3 -1
- package/dist/lib/components/attachment/image-viewer.component.d.ts.map +1 -1
- package/dist/lib/components/attachment/image-viewer.component.js +5 -1
- package/dist/lib/components/attachment/image-viewer.component.js.map +1 -1
- package/dist/lib/components/collection/collection-view.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collection-view.component.js +1 -0
- package/dist/lib/components/collection/collection-view.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +188 -9
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.js +1333 -464
- package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-mode-picker.component.js +2 -2
- package/dist/lib/components/conversation/conversation-mode-picker.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-remote-browser-controller.d.ts +109 -0
- package/dist/lib/components/conversation/conversation-remote-browser-controller.d.ts.map +1 -0
- package/dist/lib/components/conversation/conversation-remote-browser-controller.js +298 -0
- package/dist/lib/components/conversation/conversation-remote-browser-controller.js.map +1 -0
- package/dist/lib/components/message/agent-handoff-card.component.d.ts +102 -0
- package/dist/lib/components/message/agent-handoff-card.component.d.ts.map +1 -0
- package/dist/lib/components/message/agent-handoff-card.component.js +439 -0
- package/dist/lib/components/message/agent-handoff-card.component.js.map +1 -0
- package/dist/lib/components/message/message-input.component.d.ts +126 -59
- package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-input.component.js +559 -554
- package/dist/lib/components/message/message-input.component.js.map +1 -1
- package/dist/lib/components/message/message-item.component.d.ts +34 -2
- package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-item.component.js +678 -520
- package/dist/lib/components/message/message-item.component.js.map +1 -1
- package/dist/lib/components/message/message-list.component.d.ts +13 -1
- package/dist/lib/components/message/message-list.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-list.component.js +92 -39
- package/dist/lib/components/message/message-list.component.js.map +1 -1
- package/dist/lib/components/overlay/chat-overlay.component.d.ts +19 -0
- package/dist/lib/components/overlay/chat-overlay.component.d.ts.map +1 -1
- package/dist/lib/components/overlay/chat-overlay.component.js +125 -13
- package/dist/lib/components/overlay/chat-overlay.component.js.map +1 -1
- package/dist/lib/components/project/project-form-modal.component.js +2 -2
- package/dist/lib/components/project/project-form-modal.component.js.map +1 -1
- package/dist/lib/components/realtime/interactive-component/run-view-component-artifact-source.js +1 -1
- package/dist/lib/components/realtime/interactive-component/run-view-component-artifact-source.js.map +1 -1
- package/dist/lib/components/realtime/media/media-channel-state.d.ts +5 -0
- package/dist/lib/components/realtime/media/media-channel-state.d.ts.map +1 -1
- package/dist/lib/components/realtime/media/media-channel-state.js +27 -1
- package/dist/lib/components/realtime/media/media-channel-state.js.map +1 -1
- package/dist/lib/components/realtime/media/media-channel.d.ts.map +1 -1
- package/dist/lib/components/realtime/media/media-channel.js +7 -2
- package/dist/lib/components/realtime/media/media-channel.js.map +1 -1
- package/dist/lib/components/realtime/media/realtime-media-surface.component.d.ts +19 -2
- package/dist/lib/components/realtime/media/realtime-media-surface.component.d.ts.map +1 -1
- package/dist/lib/components/realtime/media/realtime-media-surface.component.js +59 -10
- package/dist/lib/components/realtime/media/realtime-media-surface.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts +22 -6
- package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-agent-banner.component.js +160 -98
- package/dist/lib/components/realtime/realtime-agent-banner.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-call-failure-notice.d.ts +13 -0
- package/dist/lib/components/realtime/realtime-call-failure-notice.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-call-failure-notice.js +21 -0
- package/dist/lib/components/realtime/realtime-call-failure-notice.js.map +1 -0
- package/dist/lib/components/realtime/realtime-composer.component.d.ts +26 -3
- package/dist/lib/components/realtime/realtime-composer.component.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-composer.component.js +226 -120
- package/dist/lib/components/realtime/realtime-composer.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts +73 -16
- package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-session-overlay.component.js +219 -108
- package/dist/lib/components/realtime/realtime-session-overlay.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-ui-config.d.ts +9 -12
- package/dist/lib/components/realtime/realtime-ui-config.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-ui-config.js +38 -18
- package/dist/lib/components/realtime/realtime-ui-config.js.map +1 -1
- package/dist/lib/components/realtime/remote-browser/remote-browser-channel.d.ts.map +1 -1
- package/dist/lib/components/realtime/remote-browser/remote-browser-channel.js +34 -5
- package/dist/lib/components/realtime/remote-browser/remote-browser-channel.js.map +1 -1
- package/dist/lib/components/realtime/remote-browser/remote-browser-tools.d.ts +8 -2
- package/dist/lib/components/realtime/remote-browser/remote-browser-tools.d.ts.map +1 -1
- package/dist/lib/components/realtime/remote-browser/remote-browser-tools.js +51 -10
- package/dist/lib/components/realtime/remote-browser/remote-browser-tools.js.map +1 -1
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel-config.d.ts +46 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel-config.d.ts.map +1 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel-config.js +64 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel-config.js.map +1 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts +131 -9
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts.map +1 -1
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js +347 -38
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js.map +1 -1
- package/dist/lib/conversations.module.d.ts +2 -1
- package/dist/lib/conversations.module.d.ts.map +1 -1
- package/dist/lib/conversations.module.js +9 -4
- package/dist/lib/conversations.module.js.map +1 -1
- package/dist/lib/events/chat-events.d.ts +5 -4
- package/dist/lib/events/chat-events.d.ts.map +1 -1
- package/dist/lib/events/chat-events.js +2 -2
- package/dist/lib/events/chat-events.js.map +1 -1
- package/dist/lib/models/agent-turn.model.d.ts +11 -7
- package/dist/lib/models/agent-turn.model.d.ts.map +1 -1
- package/dist/lib/models/agent-turn.model.js.map +1 -1
- package/dist/lib/services/active-tasks.service.d.ts +5 -0
- package/dist/lib/services/active-tasks.service.d.ts.map +1 -1
- package/dist/lib/services/active-tasks.service.js +16 -0
- package/dist/lib/services/active-tasks.service.js.map +1 -1
- package/dist/lib/services/agent-state.service.d.ts.map +1 -1
- package/dist/lib/services/agent-state.service.js +7 -1
- package/dist/lib/services/agent-state.service.js.map +1 -1
- package/dist/lib/services/artifact-permission.service.d.ts.map +1 -1
- package/dist/lib/services/artifact-permission.service.js +2 -0
- package/dist/lib/services/artifact-permission.service.js.map +1 -1
- package/dist/lib/services/artifact-state.service.d.ts.map +1 -1
- package/dist/lib/services/artifact-state.service.js +1 -0
- package/dist/lib/services/artifact-state.service.js.map +1 -1
- package/dist/lib/services/collection-permission.service.d.ts.map +1 -1
- package/dist/lib/services/collection-permission.service.js +1 -0
- package/dist/lib/services/collection-permission.service.js.map +1 -1
- package/dist/lib/services/conversation-agent.service.d.ts +38 -16
- package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-agent.service.js +57 -71
- package/dist/lib/services/conversation-agent.service.js.map +1 -1
- package/dist/lib/services/conversation-detail-window.store.d.ts +5 -0
- package/dist/lib/services/conversation-detail-window.store.d.ts.map +1 -1
- package/dist/lib/services/conversation-detail-window.store.js +52 -5
- package/dist/lib/services/conversation-detail-window.store.js.map +1 -1
- package/dist/lib/services/realtime-session-review.service.d.ts +2 -1
- package/dist/lib/services/realtime-session-review.service.d.ts.map +1 -1
- package/dist/lib/services/realtime-session-review.service.js.map +1 -1
- package/dist/lib/services/realtime-session.service.d.ts.map +1 -1
- package/dist/lib/services/realtime-session.service.js +2 -1
- package/dist/lib/services/realtime-session.service.js.map +1 -1
- package/dist/lib/services/search.service.d.ts.map +1 -1
- package/dist/lib/services/search.service.js +1 -0
- package/dist/lib/services/search.service.js.map +1 -1
- package/dist/lib/utils/agent-failure-display.d.ts +14 -0
- package/dist/lib/utils/agent-failure-display.d.ts.map +1 -0
- package/dist/lib/utils/agent-failure-display.js +26 -0
- package/dist/lib/utils/agent-failure-display.js.map +1 -0
- package/dist/lib/utils/agent-handoff-map.d.ts +52 -0
- package/dist/lib/utils/agent-handoff-map.d.ts.map +1 -0
- package/dist/lib/utils/agent-handoff-map.js +270 -0
- package/dist/lib/utils/agent-handoff-map.js.map +1 -0
- package/dist/lib/utils/agent-turn-routing.d.ts +62 -7
- package/dist/lib/utils/agent-turn-routing.d.ts.map +1 -1
- package/dist/lib/utils/agent-turn-routing.js +147 -6
- package/dist/lib/utils/agent-turn-routing.js.map +1 -1
- package/dist/lib/utils/decision-routing.d.ts +17 -9
- package/dist/lib/utils/decision-routing.d.ts.map +1 -1
- package/dist/lib/utils/decision-routing.js +23 -14
- package/dist/lib/utils/decision-routing.js.map +1 -1
- package/dist/lib/utils/message-list-order.d.ts +13 -0
- package/dist/lib/utils/message-list-order.d.ts.map +1 -0
- package/dist/lib/utils/message-list-order.js +31 -0
- package/dist/lib/utils/message-list-order.js.map +1 -0
- package/dist/lib/utils/pin-state.d.ts +11 -0
- package/dist/lib/utils/pin-state.d.ts.map +1 -0
- package/dist/lib/utils/pin-state.js +9 -0
- package/dist/lib/utils/pin-state.js.map +1 -0
- package/dist/lib/utils/thread-replies.d.ts +34 -0
- package/dist/lib/utils/thread-replies.d.ts.map +1 -0
- package/dist/lib/utils/thread-replies.js +49 -0
- package/dist/lib/utils/thread-replies.js.map +1 -0
- package/dist/public-api.d.ts +6 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +6 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +36 -36
|
@@ -5,6 +5,8 @@ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
|
5
5
|
import { AIEngineBase } from '@memberjunction/ai-engine-base';
|
|
6
6
|
import { ConversationUtility, MJAIAgentRunEntityExtended } from '@memberjunction/ai-core-plus';
|
|
7
7
|
import { FormResponseUtils } from '@memberjunction/ng-forms';
|
|
8
|
+
import { FormatAgentFailureForDisplay } from '../../utils/agent-failure-display';
|
|
9
|
+
import { SavePinState } from '../../utils/pin-state';
|
|
8
10
|
import { PlanModePreference } from '../../utils/plan-mode-preference';
|
|
9
11
|
import { MentionAutocompleteService } from '../../services/mention-autocomplete.service';
|
|
10
12
|
import { BeforeResponseFormSubmittedEventArgs, AfterResponseFormSubmittedEventArgs, BeforeStopClickedEventArgs, } from '../../events/chat-events';
|
|
@@ -13,6 +15,7 @@ import { ConversationsRuntime } from '@memberjunction/conversations-runtime';
|
|
|
13
15
|
import { BadgeTextForAttachment } from '../../util/attachment-badge';
|
|
14
16
|
import { EMPTY_FORK_CHIPS, ForkChipAriaLabel, ForkChipIcon, ForkChipOpenRequestOf } from '../../utils/conversation-forks';
|
|
15
17
|
import { MJNotificationService } from '@memberjunction/ng-notifications';
|
|
18
|
+
import { AgentAccentVar, } from './agent-handoff-card.component';
|
|
16
19
|
import * as i0 from "@angular/core";
|
|
17
20
|
import * as i1 from "../../services/mention-parser.service";
|
|
18
21
|
import * as i2 from "../../services/ui-command-handler.service";
|
|
@@ -24,9 +27,10 @@ import * as i7 from "@memberjunction/ng-ui-components";
|
|
|
24
27
|
import * as i8 from "@memberjunction/ng-artifacts";
|
|
25
28
|
import * as i9 from "@memberjunction/ng-shared-generic";
|
|
26
29
|
import * as i10 from "@memberjunction/ng-forms";
|
|
27
|
-
import * as i11 from "./
|
|
28
|
-
import * as i12 from "./
|
|
29
|
-
import * as i13 from "
|
|
30
|
+
import * as i11 from "./agent-handoff-card.component";
|
|
31
|
+
import * as i12 from "./actionable-commands.component";
|
|
32
|
+
import * as i13 from "./conversation-message-rating.component";
|
|
33
|
+
import * as i14 from "../tasks/task-widget.component";
|
|
30
34
|
const _c0 = (a0, a1) => ({ $implicit: a0, message: a1 });
|
|
31
35
|
const _forTrack0 = ($index, $item) => $item.artifactId;
|
|
32
36
|
const _forTrack1 = ($index, $item) => $item.id;
|
|
@@ -76,10 +80,53 @@ function MessageItemComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
|
76
80
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
77
81
|
i0.ɵɵconditional(ctx_r0.effectiveAssistantAvatarUrl ? 0 : 1);
|
|
78
82
|
} }
|
|
79
|
-
function
|
|
80
|
-
i0.ɵɵ
|
|
83
|
+
function MessageItemComponent_Conditional_9_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
84
|
+
i0.ɵɵelement(0, "img", 29);
|
|
85
|
+
} if (rf & 2) {
|
|
86
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
87
|
+
i0.ɵɵproperty("src", ctx_r0.HandedOffFrom.SourceAgent.AvatarUrl, i0.ɵɵsanitizeUrl);
|
|
88
|
+
} }
|
|
89
|
+
function MessageItemComponent_Conditional_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
90
|
+
i0.ɵɵelement(0, "i");
|
|
91
|
+
} if (rf & 2) {
|
|
92
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
93
|
+
i0.ɵɵclassMap(ctx_r0.HandedOffFrom.SourceAgent.IconClass);
|
|
94
|
+
} }
|
|
95
|
+
function MessageItemComponent_Conditional_9_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
96
|
+
i0.ɵɵtext(0);
|
|
97
|
+
} if (rf & 2) {
|
|
98
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
99
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.HandedOffFrom.SourceAgent.Name.charAt(0), " ");
|
|
100
|
+
} }
|
|
101
|
+
function MessageItemComponent_Conditional_9_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
102
|
+
i0.ɵɵelementStart(0, "span", 30);
|
|
103
|
+
i0.ɵɵtext(1);
|
|
104
|
+
i0.ɵɵelementEnd();
|
|
105
|
+
} if (rf & 2) {
|
|
106
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
107
|
+
i0.ɵɵadvance();
|
|
108
|
+
i0.ɵɵtextInterpolate(ctx_r0.HandedOffFrom.PresetName);
|
|
109
|
+
} }
|
|
110
|
+
function MessageItemComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
111
|
+
i0.ɵɵelementStart(0, "span", 27)(1, "span", 28);
|
|
112
|
+
i0.ɵɵconditionalCreate(2, MessageItemComponent_Conditional_9_Conditional_2_Template, 1, 1, "img", 29)(3, MessageItemComponent_Conditional_9_Conditional_3_Template, 1, 2, "i", 22)(4, MessageItemComponent_Conditional_9_Conditional_4_Template, 1, 1);
|
|
113
|
+
i0.ɵɵelementEnd();
|
|
114
|
+
i0.ɵɵtext(5);
|
|
115
|
+
i0.ɵɵelementEnd();
|
|
116
|
+
i0.ɵɵconditionalCreate(6, MessageItemComponent_Conditional_9_Conditional_6_Template, 2, 1, "span", 30);
|
|
117
|
+
} if (rf & 2) {
|
|
118
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
119
|
+
i0.ɵɵadvance(2);
|
|
120
|
+
i0.ɵɵconditional(ctx_r0.HandedOffFrom.SourceAgent.AvatarUrl ? 2 : ctx_r0.HandedOffFrom.SourceAgent.IconClass ? 3 : 4);
|
|
121
|
+
i0.ɵɵadvance(3);
|
|
122
|
+
i0.ɵɵtextInterpolate1(" via ", ctx_r0.HandedOffFrom.SourceAgent.Name, " ");
|
|
123
|
+
i0.ɵɵadvance();
|
|
124
|
+
i0.ɵɵconditional(ctx_r0.HandedOffFrom.PresetName ? 6 : -1);
|
|
125
|
+
} }
|
|
126
|
+
function MessageItemComponent_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
127
|
+
i0.ɵɵelementStart(0, "span", 31);
|
|
81
128
|
i0.ɵɵelement(1, "i", 25);
|
|
82
|
-
i0.ɵɵelementStart(2, "span",
|
|
129
|
+
i0.ɵɵelementStart(2, "span", 32);
|
|
83
130
|
i0.ɵɵtext(3);
|
|
84
131
|
i0.ɵɵelementEnd()();
|
|
85
132
|
} if (rf & 2) {
|
|
@@ -90,21 +137,21 @@ function MessageItemComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
|
90
137
|
i0.ɵɵadvance(2);
|
|
91
138
|
i0.ɵɵtextInterpolate(ctx_r0.getStatusText());
|
|
92
139
|
} }
|
|
93
|
-
function
|
|
94
|
-
i0.ɵɵelementStart(0, "span",
|
|
140
|
+
function MessageItemComponent_Conditional_14_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
141
|
+
i0.ɵɵelementStart(0, "span", 34);
|
|
95
142
|
i0.ɵɵtext(1, "checking\u2026");
|
|
96
143
|
i0.ɵɵelementEnd();
|
|
97
144
|
} }
|
|
98
|
-
function
|
|
99
|
-
i0.ɵɵelementStart(0, "span",
|
|
145
|
+
function MessageItemComponent_Conditional_14_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
146
|
+
i0.ɵɵelementStart(0, "span", 34);
|
|
100
147
|
i0.ɵɵtext(1, "no response");
|
|
101
148
|
i0.ɵɵelementEnd();
|
|
102
149
|
} }
|
|
103
|
-
function
|
|
104
|
-
i0.ɵɵelementStart(0, "span",
|
|
150
|
+
function MessageItemComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
151
|
+
i0.ɵɵelementStart(0, "span", 33);
|
|
105
152
|
i0.ɵɵelement(1, "i", 25);
|
|
106
153
|
i0.ɵɵtext(2);
|
|
107
|
-
i0.ɵɵconditionalCreate(3,
|
|
154
|
+
i0.ɵɵconditionalCreate(3, MessageItemComponent_Conditional_14_Conditional_3_Template, 2, 0, "span", 34)(4, MessageItemComponent_Conditional_14_Conditional_4_Template, 2, 0, "span", 34);
|
|
108
155
|
i0.ɵɵelementEnd();
|
|
109
156
|
} if (rf & 2) {
|
|
110
157
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
@@ -117,10 +164,10 @@ function MessageItemComponent_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
|
117
164
|
i0.ɵɵadvance();
|
|
118
165
|
i0.ɵɵconditional(ctx_r0.LivenessState === "checking" ? 3 : ctx_r0.LivenessState === "stalled" ? 4 : -1);
|
|
119
166
|
} }
|
|
120
|
-
function
|
|
167
|
+
function MessageItemComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
121
168
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
122
|
-
i0.ɵɵelementStart(0, "button",
|
|
123
|
-
i0.ɵɵlistener("click", function
|
|
169
|
+
i0.ɵɵelementStart(0, "button", 35);
|
|
170
|
+
i0.ɵɵlistener("click", function MessageItemComponent_Conditional_15_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnStopClick()); });
|
|
124
171
|
i0.ɵɵelement(1, "i", 25);
|
|
125
172
|
i0.ɵɵtext(2);
|
|
126
173
|
i0.ɵɵelementEnd();
|
|
@@ -132,66 +179,66 @@ function MessageItemComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
|
132
179
|
i0.ɵɵadvance();
|
|
133
180
|
i0.ɵɵtextInterpolate1(" ", ctx_r0.IsStopping ? "Stopping\u2026" : "Stop", " ");
|
|
134
181
|
} }
|
|
135
|
-
function
|
|
182
|
+
function MessageItemComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
136
183
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
137
|
-
i0.ɵɵelementStart(0, "span",
|
|
138
|
-
i0.ɵɵlistener("click", function
|
|
139
|
-
i0.ɵɵelement(1, "i",
|
|
184
|
+
i0.ɵɵelementStart(0, "span", 36);
|
|
185
|
+
i0.ɵɵlistener("click", function MessageItemComponent_Conditional_16_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onTestFeedbackClick()); });
|
|
186
|
+
i0.ɵɵelement(1, "i", 37);
|
|
140
187
|
i0.ɵɵelementEnd();
|
|
141
188
|
} }
|
|
142
|
-
function
|
|
189
|
+
function MessageItemComponent_Conditional_17_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
143
190
|
i0.ɵɵelementStart(0, "span");
|
|
144
191
|
i0.ɵɵtext(1, "Edit");
|
|
145
192
|
i0.ɵɵelementEnd();
|
|
146
193
|
} }
|
|
147
|
-
function
|
|
194
|
+
function MessageItemComponent_Conditional_17_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
148
195
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
149
|
-
i0.ɵɵelementStart(0, "button",
|
|
150
|
-
i0.ɵɵlistener("click", function
|
|
151
|
-
i0.ɵɵelement(1, "i",
|
|
152
|
-
i0.ɵɵconditionalCreate(2,
|
|
196
|
+
i0.ɵɵelementStart(0, "button", 42);
|
|
197
|
+
i0.ɵɵlistener("click", function MessageItemComponent_Conditional_17_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OnEditClick()); });
|
|
198
|
+
i0.ɵɵelement(1, "i", 43);
|
|
199
|
+
i0.ɵɵconditionalCreate(2, MessageItemComponent_Conditional_17_Conditional_1_Conditional_2_Template, 2, 0, "span");
|
|
153
200
|
i0.ɵɵelementEnd();
|
|
154
201
|
} if (rf & 2) {
|
|
155
202
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
156
203
|
i0.ɵɵadvance(2);
|
|
157
204
|
i0.ɵɵconditional(ctx_r0.IsLatestTurn ? 2 : -1);
|
|
158
205
|
} }
|
|
159
|
-
function
|
|
160
|
-
i0.ɵɵelementStart(0, "span",
|
|
206
|
+
function MessageItemComponent_Conditional_17_Conditional_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
207
|
+
i0.ɵɵelementStart(0, "span", 46);
|
|
161
208
|
i0.ɵɵtext(1, "Fork from here");
|
|
162
209
|
i0.ɵɵelementEnd();
|
|
163
|
-
i0.ɵɵelementStart(2, "span",
|
|
210
|
+
i0.ɵɵelementStart(2, "span", 47);
|
|
164
211
|
i0.ɵɵtext(3, "Fork");
|
|
165
212
|
i0.ɵɵelementEnd();
|
|
166
213
|
} }
|
|
167
|
-
function
|
|
214
|
+
function MessageItemComponent_Conditional_17_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
168
215
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
169
|
-
i0.ɵɵelementStart(0, "button",
|
|
170
|
-
i0.ɵɵlistener("click", function
|
|
171
|
-
i0.ɵɵelement(1, "i",
|
|
172
|
-
i0.ɵɵconditionalCreate(2,
|
|
216
|
+
i0.ɵɵelementStart(0, "button", 44);
|
|
217
|
+
i0.ɵɵlistener("click", function MessageItemComponent_Conditional_17_Conditional_2_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OnForkClick($event)); });
|
|
218
|
+
i0.ɵɵelement(1, "i", 45);
|
|
219
|
+
i0.ɵɵconditionalCreate(2, MessageItemComponent_Conditional_17_Conditional_2_Conditional_2_Template, 4, 0);
|
|
173
220
|
i0.ɵɵelementEnd();
|
|
174
221
|
} if (rf & 2) {
|
|
175
222
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
176
223
|
i0.ɵɵadvance(2);
|
|
177
224
|
i0.ɵɵconditional(ctx_r0.IsLatestTurn ? 2 : -1);
|
|
178
225
|
} }
|
|
179
|
-
function
|
|
226
|
+
function MessageItemComponent_Conditional_17_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
180
227
|
const _r7 = i0.ɵɵgetCurrentView();
|
|
181
|
-
i0.ɵɵelementStart(0, "button",
|
|
182
|
-
i0.ɵɵlistener("click", function
|
|
183
|
-
i0.ɵɵelement(1, "i",
|
|
228
|
+
i0.ɵɵelementStart(0, "button", 48);
|
|
229
|
+
i0.ɵɵlistener("click", function MessageItemComponent_Conditional_17_Conditional_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OnRegenerateClick()); });
|
|
230
|
+
i0.ɵɵelement(1, "i", 49);
|
|
184
231
|
i0.ɵɵelementEnd();
|
|
185
232
|
} if (rf & 2) {
|
|
186
233
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
187
234
|
i0.ɵɵproperty("title", ctx_r0.RegenerateTitle);
|
|
188
235
|
i0.ɵɵattribute("aria-label", ctx_r0.RegenerateTitle);
|
|
189
236
|
} }
|
|
190
|
-
function
|
|
191
|
-
i0.ɵɵelementStart(0, "span",
|
|
192
|
-
i0.ɵɵconditionalCreate(1,
|
|
193
|
-
i0.ɵɵconditionalCreate(2,
|
|
194
|
-
i0.ɵɵconditionalCreate(3,
|
|
237
|
+
function MessageItemComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
238
|
+
i0.ɵɵelementStart(0, "span", 38);
|
|
239
|
+
i0.ɵɵconditionalCreate(1, MessageItemComponent_Conditional_17_Conditional_1_Template, 3, 1, "button", 39);
|
|
240
|
+
i0.ɵɵconditionalCreate(2, MessageItemComponent_Conditional_17_Conditional_2_Template, 3, 1, "button", 40);
|
|
241
|
+
i0.ɵɵconditionalCreate(3, MessageItemComponent_Conditional_17_Conditional_3_Template, 2, 2, "button", 41);
|
|
195
242
|
i0.ɵɵelementEnd();
|
|
196
243
|
} if (rf & 2) {
|
|
197
244
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
@@ -203,8 +250,8 @@ function MessageItemComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
|
203
250
|
i0.ɵɵadvance();
|
|
204
251
|
i0.ɵɵconditional(ctx_r0.ShowsHeaderRegenerate ? 3 : -1);
|
|
205
252
|
} }
|
|
206
|
-
function
|
|
207
|
-
i0.ɵɵelementStart(0, "span",
|
|
253
|
+
function MessageItemComponent_Conditional_18_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
254
|
+
i0.ɵɵelementStart(0, "span", 52);
|
|
208
255
|
i0.ɵɵtext(1);
|
|
209
256
|
i0.ɵɵelementEnd();
|
|
210
257
|
} if (rf & 2) {
|
|
@@ -212,12 +259,12 @@ function MessageItemComponent_Conditional_17_Conditional_2_Template(rf, ctx) { i
|
|
|
212
259
|
i0.ɵɵadvance();
|
|
213
260
|
i0.ɵɵtextInterpolate(ctx_r0.getRatingCount());
|
|
214
261
|
} }
|
|
215
|
-
function
|
|
262
|
+
function MessageItemComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
216
263
|
const _r8 = i0.ɵɵgetCurrentView();
|
|
217
|
-
i0.ɵɵelementStart(0, "span",
|
|
218
|
-
i0.ɵɵlistener("click", function
|
|
219
|
-
i0.ɵɵelement(1, "i",
|
|
220
|
-
i0.ɵɵconditionalCreate(2,
|
|
264
|
+
i0.ɵɵelementStart(0, "span", 50);
|
|
265
|
+
i0.ɵɵlistener("click", function MessageItemComponent_Conditional_18_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.toggleAgentDetails()); });
|
|
266
|
+
i0.ɵɵelement(1, "i", 51);
|
|
267
|
+
i0.ɵɵconditionalCreate(2, MessageItemComponent_Conditional_18_Conditional_2_Template, 2, 1, "span", 52);
|
|
221
268
|
i0.ɵɵelementEnd();
|
|
222
269
|
} if (rf & 2) {
|
|
223
270
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
@@ -226,39 +273,67 @@ function MessageItemComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
|
226
273
|
i0.ɵɵadvance(2);
|
|
227
274
|
i0.ɵɵconditional(ctx_r0.hasRatings() ? 2 : -1);
|
|
228
275
|
} }
|
|
229
|
-
function
|
|
276
|
+
function MessageItemComponent_Conditional_20_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
230
277
|
const _r9 = i0.ɵɵgetCurrentView();
|
|
231
|
-
i0.ɵɵelementStart(0, "button",
|
|
232
|
-
i0.ɵɵlistener("click", function
|
|
233
|
-
i0.ɵɵelementStart(1, "span",
|
|
234
|
-
i0.ɵɵelement(2, "i",
|
|
235
|
-
i0.ɵɵelementStart(3, "span",
|
|
278
|
+
i0.ɵɵelementStart(0, "button", 64);
|
|
279
|
+
i0.ɵɵlistener("click", function MessageItemComponent_Conditional_20_Conditional_0_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.ScrollToOriginatingWorkflow($event)); });
|
|
280
|
+
i0.ɵɵelementStart(1, "span", 65);
|
|
281
|
+
i0.ɵɵelement(2, "i", 66);
|
|
282
|
+
i0.ɵɵelementStart(3, "span", 67);
|
|
236
283
|
i0.ɵɵtext(4, "Completed workflow");
|
|
237
284
|
i0.ɵɵelementEnd();
|
|
238
|
-
i0.ɵɵelementStart(5, "span",
|
|
285
|
+
i0.ɵɵelementStart(5, "span", 68);
|
|
239
286
|
i0.ɵɵtext(6, "\u00B7");
|
|
240
287
|
i0.ɵɵelementEnd();
|
|
241
|
-
i0.ɵɵelementStart(7, "span",
|
|
288
|
+
i0.ɵɵelementStart(7, "span", 69);
|
|
242
289
|
i0.ɵɵtext(8);
|
|
243
290
|
i0.ɵɵelementEnd()();
|
|
244
|
-
i0.ɵɵelementStart(9, "span",
|
|
291
|
+
i0.ɵɵelementStart(9, "span", 70)(10, "span");
|
|
245
292
|
i0.ɵɵtext(11, "View workflow");
|
|
246
293
|
i0.ɵɵelementEnd();
|
|
247
|
-
i0.ɵɵelement(12, "i",
|
|
294
|
+
i0.ɵɵelement(12, "i", 71);
|
|
248
295
|
i0.ɵɵelementEnd()();
|
|
249
296
|
} if (rf & 2) {
|
|
250
297
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
251
298
|
i0.ɵɵadvance(8);
|
|
252
299
|
i0.ɵɵtextInterpolate(ctx_r0.OriginatingWorkflowTask.Name);
|
|
253
300
|
} }
|
|
254
|
-
function
|
|
255
|
-
i0.ɵɵelementStart(0, "
|
|
301
|
+
function MessageItemComponent_Conditional_20_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
302
|
+
i0.ɵɵelementStart(0, "div", 72)(1, "span");
|
|
303
|
+
i0.ɵɵtext(2, "Joining the conversation\u2026");
|
|
304
|
+
i0.ɵɵelementEnd()();
|
|
305
|
+
i0.ɵɵelementStart(3, "div", 73);
|
|
306
|
+
i0.ɵɵelement(4, "div", 74)(5, "div", 75);
|
|
307
|
+
i0.ɵɵelementEnd();
|
|
308
|
+
} }
|
|
309
|
+
function MessageItemComponent_Conditional_20_Conditional_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
310
|
+
i0.ɵɵelementStart(0, "span", 77);
|
|
256
311
|
i0.ɵɵtext(1, "(edited)");
|
|
257
312
|
i0.ɵɵelementEnd();
|
|
258
313
|
} }
|
|
259
|
-
function
|
|
260
|
-
i0.ɵɵ
|
|
261
|
-
i0.ɵɵ
|
|
314
|
+
function MessageItemComponent_Conditional_20_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
315
|
+
const _r10 = i0.ɵɵgetCurrentView();
|
|
316
|
+
i0.ɵɵelementStart(0, "div", 54)(1, "mj-markdown", 76);
|
|
317
|
+
i0.ɵɵlistener("ImageClicked", function MessageItemComponent_Conditional_20_Conditional_2_Template_mj_markdown_ImageClicked_1_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OnMarkdownImageClicked($event)); });
|
|
318
|
+
i0.ɵɵelementEnd();
|
|
319
|
+
i0.ɵɵconditionalCreate(2, MessageItemComponent_Conditional_20_Conditional_2_Conditional_2_Template, 2, 0, "span", 77);
|
|
320
|
+
i0.ɵɵelementEnd();
|
|
321
|
+
} if (rf & 2) {
|
|
322
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
323
|
+
i0.ɵɵadvance();
|
|
324
|
+
i0.ɵɵproperty("data", ctx_r0.displayMessage)("enableCollapsibleHeadings", true);
|
|
325
|
+
i0.ɵɵadvance();
|
|
326
|
+
i0.ɵɵconditional(ctx_r0.isMessageEdited ? 2 : -1);
|
|
327
|
+
} }
|
|
328
|
+
function MessageItemComponent_Conditional_20_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
329
|
+
i0.ɵɵelement(0, "mj-agent-handoff-card", 55);
|
|
330
|
+
} if (rf & 2) {
|
|
331
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
332
|
+
i0.ɵɵproperty("Handoff", ctx_r0.Handoff);
|
|
333
|
+
} }
|
|
334
|
+
function MessageItemComponent_Conditional_20_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
335
|
+
i0.ɵɵelementStart(0, "div", 56);
|
|
336
|
+
i0.ɵɵelement(1, "i", 78);
|
|
262
337
|
i0.ɵɵtext(2);
|
|
263
338
|
i0.ɵɵelementEnd();
|
|
264
339
|
} if (rf & 2) {
|
|
@@ -266,106 +341,106 @@ function MessageItemComponent_Conditional_19_Conditional_4_Template(rf, ctx) { i
|
|
|
266
341
|
i0.ɵɵadvance(2);
|
|
267
342
|
i0.ɵɵtextInterpolate(ctx_r0.StoppedLineText);
|
|
268
343
|
} }
|
|
269
|
-
function
|
|
270
|
-
const
|
|
271
|
-
i0.ɵɵelementStart(0, "div",
|
|
272
|
-
i0.ɵɵlistener("click", function
|
|
273
|
-
i0.ɵɵelement(2, "i",
|
|
344
|
+
function MessageItemComponent_Conditional_20_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
345
|
+
const _r11 = i0.ɵɵgetCurrentView();
|
|
346
|
+
i0.ɵɵelementStart(0, "div", 57)(1, "button", 79);
|
|
347
|
+
i0.ɵɵlistener("click", function MessageItemComponent_Conditional_20_Conditional_5_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r11); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OnContinueClick()); });
|
|
348
|
+
i0.ɵɵelement(2, "i", 80);
|
|
274
349
|
i0.ɵɵtext(3, " Continue ");
|
|
275
350
|
i0.ɵɵelementEnd()();
|
|
276
351
|
} }
|
|
277
|
-
function
|
|
352
|
+
function MessageItemComponent_Conditional_20_Conditional_6_ng_container_0_Template(rf, ctx) { if (rf & 1) {
|
|
278
353
|
i0.ɵɵelementContainer(0);
|
|
279
354
|
} }
|
|
280
|
-
function
|
|
281
|
-
i0.ɵɵtemplate(0,
|
|
355
|
+
function MessageItemComponent_Conditional_20_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
356
|
+
i0.ɵɵtemplate(0, MessageItemComponent_Conditional_20_Conditional_6_ng_container_0_Template, 1, 0, "ng-container", 81);
|
|
282
357
|
} if (rf & 2) {
|
|
283
358
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
284
359
|
i0.ɵɵproperty("ngTemplateOutlet", ctx_r0.messageExtraTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction2(2, _c0, ctx_r0.message, ctx_r0.message));
|
|
285
360
|
} }
|
|
286
|
-
function
|
|
287
|
-
const
|
|
288
|
-
i0.ɵɵelementStart(0, "div",
|
|
289
|
-
i0.ɵɵlistener("click", function
|
|
290
|
-
i0.ɵɵelement(1, "img",
|
|
291
|
-
i0.ɵɵelementStart(2, "div",
|
|
292
|
-
i0.ɵɵelement(3, "i",
|
|
361
|
+
function MessageItemComponent_Conditional_20_Conditional_7_For_2_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
362
|
+
const _r12 = i0.ɵɵgetCurrentView();
|
|
363
|
+
i0.ɵɵelementStart(0, "div", 84);
|
|
364
|
+
i0.ɵɵlistener("click", function MessageItemComponent_Conditional_20_Conditional_7_For_2_Conditional_0_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r12); const attachment_r13 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.onAttachmentClick(attachment_r13)); });
|
|
365
|
+
i0.ɵɵelement(1, "img", 85);
|
|
366
|
+
i0.ɵɵelementStart(2, "div", 86);
|
|
367
|
+
i0.ɵɵelement(3, "i", 87);
|
|
293
368
|
i0.ɵɵelementEnd()();
|
|
294
369
|
} if (rf & 2) {
|
|
295
|
-
const
|
|
296
|
-
i0.ɵɵproperty("title",
|
|
370
|
+
const attachment_r13 = i0.ɵɵnextContext().$implicit;
|
|
371
|
+
i0.ɵɵproperty("title", attachment_r13.fileName || "Image attachment");
|
|
297
372
|
i0.ɵɵadvance();
|
|
298
|
-
i0.ɵɵproperty("src",
|
|
373
|
+
i0.ɵɵproperty("src", attachment_r13.thumbnailUrl || attachment_r13.contentUrl, i0.ɵɵsanitizeUrl)("alt", attachment_r13.fileName || "Image attachment");
|
|
299
374
|
} }
|
|
300
|
-
function
|
|
301
|
-
const
|
|
302
|
-
i0.ɵɵelementStart(0, "div",
|
|
303
|
-
i0.ɵɵlistener("click", function
|
|
304
|
-
i0.ɵɵelementStart(1, "div",
|
|
375
|
+
function MessageItemComponent_Conditional_20_Conditional_7_For_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
376
|
+
const _r14 = i0.ɵɵgetCurrentView();
|
|
377
|
+
i0.ɵɵelementStart(0, "div", 88);
|
|
378
|
+
i0.ɵɵlistener("click", function MessageItemComponent_Conditional_20_Conditional_7_For_2_Conditional_1_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r14); const attachment_r13 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.onAttachmentClick(attachment_r13)); });
|
|
379
|
+
i0.ɵɵelementStart(1, "div", 89);
|
|
305
380
|
i0.ɵɵtext(2);
|
|
306
381
|
i0.ɵɵelementEnd();
|
|
307
|
-
i0.ɵɵelementStart(3, "div",
|
|
382
|
+
i0.ɵɵelementStart(3, "div", 90)(4, "span", 91);
|
|
308
383
|
i0.ɵɵtext(5);
|
|
309
384
|
i0.ɵɵelementEnd();
|
|
310
|
-
i0.ɵɵelementStart(6, "span",
|
|
385
|
+
i0.ɵɵelementStart(6, "span", 92);
|
|
311
386
|
i0.ɵɵtext(7);
|
|
312
387
|
i0.ɵɵelementEnd()()();
|
|
313
388
|
} if (rf & 2) {
|
|
314
|
-
const
|
|
389
|
+
const attachment_r13 = i0.ɵɵnextContext().$implicit;
|
|
315
390
|
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
316
|
-
i0.ɵɵclassProp("is-artifact", !!
|
|
317
|
-
i0.ɵɵproperty("title",
|
|
391
|
+
i0.ɵɵclassProp("is-artifact", !!attachment_r13.artifactTypeName);
|
|
392
|
+
i0.ɵɵproperty("title", attachment_r13.fileName || "File");
|
|
318
393
|
i0.ɵɵadvance(2);
|
|
319
|
-
i0.ɵɵtextInterpolate(ctx_r0.badgeTextFor(
|
|
394
|
+
i0.ɵɵtextInterpolate(ctx_r0.badgeTextFor(attachment_r13));
|
|
320
395
|
i0.ɵɵadvance(3);
|
|
321
|
-
i0.ɵɵtextInterpolate(
|
|
396
|
+
i0.ɵɵtextInterpolate(attachment_r13.fileName || "File");
|
|
322
397
|
i0.ɵɵadvance(2);
|
|
323
|
-
i0.ɵɵtextInterpolate(ctx_r0.formatFileSize(
|
|
398
|
+
i0.ɵɵtextInterpolate(ctx_r0.formatFileSize(attachment_r13.sizeBytes));
|
|
324
399
|
} }
|
|
325
|
-
function
|
|
326
|
-
i0.ɵɵconditionalCreate(0,
|
|
400
|
+
function MessageItemComponent_Conditional_20_Conditional_7_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
401
|
+
i0.ɵɵconditionalCreate(0, MessageItemComponent_Conditional_20_Conditional_7_For_2_Conditional_0_Template, 4, 3, "div", 82)(1, MessageItemComponent_Conditional_20_Conditional_7_For_2_Conditional_1_Template, 8, 6, "div", 83);
|
|
327
402
|
} if (rf & 2) {
|
|
328
|
-
const
|
|
329
|
-
i0.ɵɵconditional(
|
|
403
|
+
const attachment_r13 = ctx.$implicit;
|
|
404
|
+
i0.ɵɵconditional(attachment_r13.type === "Image" ? 0 : 1);
|
|
330
405
|
} }
|
|
331
|
-
function
|
|
332
|
-
i0.ɵɵelementStart(0, "div",
|
|
333
|
-
i0.ɵɵrepeaterCreate(1,
|
|
406
|
+
function MessageItemComponent_Conditional_20_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
407
|
+
i0.ɵɵelementStart(0, "div", 58);
|
|
408
|
+
i0.ɵɵrepeaterCreate(1, MessageItemComponent_Conditional_20_Conditional_7_For_2_Template, 2, 1, null, null, _forTrack1);
|
|
334
409
|
i0.ɵɵelementEnd();
|
|
335
410
|
} if (rf & 2) {
|
|
336
411
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
337
412
|
i0.ɵɵadvance();
|
|
338
413
|
i0.ɵɵrepeater(ctx_r0.attachments);
|
|
339
414
|
} }
|
|
340
|
-
function
|
|
341
|
-
i0.ɵɵelement(0, "i",
|
|
415
|
+
function MessageItemComponent_Conditional_20_Conditional_8_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
416
|
+
i0.ɵɵelement(0, "i", 97);
|
|
342
417
|
} }
|
|
343
|
-
function
|
|
344
|
-
i0.ɵɵelement(0, "i",
|
|
418
|
+
function MessageItemComponent_Conditional_20_Conditional_8_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
419
|
+
i0.ɵɵelement(0, "i", 98);
|
|
345
420
|
} }
|
|
346
|
-
function
|
|
347
|
-
i0.ɵɵelement(0, "i",
|
|
421
|
+
function MessageItemComponent_Conditional_20_Conditional_8_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
422
|
+
i0.ɵɵelement(0, "i", 99);
|
|
348
423
|
} }
|
|
349
|
-
function
|
|
350
|
-
i0.ɵɵelement(0, "i",
|
|
424
|
+
function MessageItemComponent_Conditional_20_Conditional_8_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
425
|
+
i0.ɵɵelement(0, "i", 100);
|
|
351
426
|
} }
|
|
352
|
-
function
|
|
427
|
+
function MessageItemComponent_Conditional_20_Conditional_8_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
353
428
|
i0.ɵɵtext(0, " Running ");
|
|
354
429
|
} }
|
|
355
|
-
function
|
|
430
|
+
function MessageItemComponent_Conditional_20_Conditional_8_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
356
431
|
i0.ɵɵtext(0, " Completed ");
|
|
357
432
|
} }
|
|
358
|
-
function
|
|
433
|
+
function MessageItemComponent_Conditional_20_Conditional_8_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
359
434
|
i0.ɵɵtext(0);
|
|
360
435
|
} if (rf & 2) {
|
|
361
436
|
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
362
437
|
i0.ɵɵtextInterpolate1(" ", ctx_r0.WorkflowStatus, " ");
|
|
363
438
|
} }
|
|
364
|
-
function
|
|
365
|
-
i0.ɵɵelementStart(0, "span",
|
|
439
|
+
function MessageItemComponent_Conditional_20_Conditional_8_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
440
|
+
i0.ɵɵelementStart(0, "span", 106);
|
|
366
441
|
i0.ɵɵtext(1, "\u00B7");
|
|
367
442
|
i0.ɵɵelementEnd();
|
|
368
|
-
i0.ɵɵelementStart(2, "span",
|
|
443
|
+
i0.ɵɵelementStart(2, "span", 115);
|
|
369
444
|
i0.ɵɵtext(3);
|
|
370
445
|
i0.ɵɵelementEnd();
|
|
371
446
|
} if (rf & 2) {
|
|
@@ -373,23 +448,23 @@ function MessageItemComponent_Conditional_19_Conditional_8_Conditional_19_Templa
|
|
|
373
448
|
i0.ɵɵadvance(3);
|
|
374
449
|
i0.ɵɵtextInterpolate1("", ctx_r0.WorkflowSkippedStepCount, " skipped (conditional)");
|
|
375
450
|
} }
|
|
376
|
-
function
|
|
377
|
-
const
|
|
378
|
-
i0.ɵɵelementStart(0, "button",
|
|
379
|
-
i0.ɵɵlistener("click", function
|
|
380
|
-
i0.ɵɵelement(1, "i",
|
|
451
|
+
function MessageItemComponent_Conditional_20_Conditional_8_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
452
|
+
const _r16 = i0.ɵɵgetCurrentView();
|
|
453
|
+
i0.ɵɵelementStart(0, "button", 116);
|
|
454
|
+
i0.ɵɵlistener("click", function MessageItemComponent_Conditional_20_Conditional_8_Conditional_25_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.OpenTaskGraphPanel($event)); });
|
|
455
|
+
i0.ɵɵelement(1, "i", 117);
|
|
381
456
|
i0.ɵɵelementStart(2, "span");
|
|
382
457
|
i0.ɵɵtext(3, "Task Graph");
|
|
383
458
|
i0.ɵɵelementEnd()();
|
|
384
459
|
} }
|
|
385
|
-
function
|
|
386
|
-
const
|
|
387
|
-
i0.ɵɵelementStart(0, "button",
|
|
388
|
-
i0.ɵɵlistener("click", function
|
|
389
|
-
i0.ɵɵelementStart(1, "span",
|
|
460
|
+
function MessageItemComponent_Conditional_20_Conditional_8_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
461
|
+
const _r17 = i0.ɵɵgetCurrentView();
|
|
462
|
+
i0.ɵɵelementStart(0, "button", 118);
|
|
463
|
+
i0.ɵɵlistener("click", function MessageItemComponent_Conditional_20_Conditional_8_Conditional_30_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.ToggleWorkflowStepsExpanded($event)); });
|
|
464
|
+
i0.ɵɵelementStart(1, "span", 119);
|
|
390
465
|
i0.ɵɵtext(2);
|
|
391
466
|
i0.ɵɵelementEnd();
|
|
392
|
-
i0.ɵɵelement(3, "i",
|
|
467
|
+
i0.ɵɵelement(3, "i", 120);
|
|
393
468
|
i0.ɵɵelementEnd();
|
|
394
469
|
} if (rf & 2) {
|
|
395
470
|
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
@@ -400,171 +475,171 @@ function MessageItemComponent_Conditional_19_Conditional_8_Conditional_30_Templa
|
|
|
400
475
|
i0.ɵɵadvance();
|
|
401
476
|
i0.ɵɵclassProp("rotated", ctx_r0.IsWorkflowStepsExpanded);
|
|
402
477
|
} }
|
|
403
|
-
function
|
|
404
|
-
i0.ɵɵelement(0, "i",
|
|
478
|
+
function MessageItemComponent_Conditional_20_Conditional_8_Conditional_33_For_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
479
|
+
i0.ɵɵelement(0, "i", 125);
|
|
405
480
|
} }
|
|
406
|
-
function
|
|
407
|
-
i0.ɵɵelement(0, "i",
|
|
481
|
+
function MessageItemComponent_Conditional_20_Conditional_8_Conditional_33_For_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
482
|
+
i0.ɵɵelement(0, "i", 126);
|
|
408
483
|
} }
|
|
409
|
-
function
|
|
410
|
-
i0.ɵɵelement(0, "i",
|
|
484
|
+
function MessageItemComponent_Conditional_20_Conditional_8_Conditional_33_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
485
|
+
i0.ɵɵelement(0, "i", 127);
|
|
411
486
|
} }
|
|
412
|
-
function
|
|
413
|
-
i0.ɵɵelement(0, "i",
|
|
487
|
+
function MessageItemComponent_Conditional_20_Conditional_8_Conditional_33_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
488
|
+
i0.ɵɵelement(0, "i", 128);
|
|
414
489
|
} }
|
|
415
|
-
function
|
|
416
|
-
i0.ɵɵelement(0, "i",
|
|
490
|
+
function MessageItemComponent_Conditional_20_Conditional_8_Conditional_33_For_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
491
|
+
i0.ɵɵelement(0, "i", 100);
|
|
417
492
|
} }
|
|
418
|
-
function
|
|
419
|
-
i0.ɵɵelementStart(0, "span",
|
|
493
|
+
function MessageItemComponent_Conditional_20_Conditional_8_Conditional_33_For_2_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
494
|
+
i0.ɵɵelementStart(0, "span", 129);
|
|
420
495
|
i0.ɵɵtext(1);
|
|
421
496
|
i0.ɵɵelementEnd();
|
|
422
497
|
} if (rf & 2) {
|
|
423
|
-
const ɵ$
|
|
498
|
+
const ɵ$index_306_r19 = i0.ɵɵnextContext().$index;
|
|
424
499
|
i0.ɵɵadvance();
|
|
425
|
-
i0.ɵɵtextInterpolate(ɵ$
|
|
500
|
+
i0.ɵɵtextInterpolate(ɵ$index_306_r19 + 1);
|
|
426
501
|
} }
|
|
427
|
-
function
|
|
428
|
-
i0.ɵɵelement(0, "div",
|
|
502
|
+
function MessageItemComponent_Conditional_20_Conditional_8_Conditional_33_For_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
503
|
+
i0.ɵɵelement(0, "div", 141);
|
|
429
504
|
} if (rf & 2) {
|
|
430
|
-
const
|
|
431
|
-
i0.ɵɵclassProp("is-complete",
|
|
505
|
+
const step_r20 = i0.ɵɵnextContext().$implicit;
|
|
506
|
+
i0.ɵɵclassProp("is-complete", step_r20.Status === "Complete");
|
|
432
507
|
} }
|
|
433
|
-
function
|
|
434
|
-
i0.ɵɵelementStart(0, "span",
|
|
435
|
-
i0.ɵɵelement(1, "i",
|
|
508
|
+
function MessageItemComponent_Conditional_20_Conditional_8_Conditional_33_For_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
509
|
+
i0.ɵɵelementStart(0, "span", 135);
|
|
510
|
+
i0.ɵɵelement(1, "i", 142);
|
|
436
511
|
i0.ɵɵelementStart(2, "span");
|
|
437
512
|
i0.ɵɵtext(3);
|
|
438
513
|
i0.ɵɵelementEnd()();
|
|
439
514
|
} if (rf & 2) {
|
|
440
|
-
const
|
|
515
|
+
const step_r20 = i0.ɵɵnextContext().$implicit;
|
|
441
516
|
i0.ɵɵadvance(3);
|
|
442
|
-
i0.ɵɵtextInterpolate(
|
|
517
|
+
i0.ɵɵtextInterpolate(step_r20.Agent);
|
|
443
518
|
} }
|
|
444
|
-
function
|
|
445
|
-
i0.ɵɵelementStart(0, "span",
|
|
519
|
+
function MessageItemComponent_Conditional_20_Conditional_8_Conditional_33_For_2_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
520
|
+
i0.ɵɵelementStart(0, "span", 143);
|
|
446
521
|
i0.ɵɵtext(1);
|
|
447
522
|
i0.ɵɵelementEnd();
|
|
448
523
|
} if (rf & 2) {
|
|
449
|
-
const
|
|
450
|
-
i0.ɵɵclassProp("is-skipped",
|
|
524
|
+
const step_r20 = i0.ɵɵnextContext().$implicit;
|
|
525
|
+
i0.ɵɵclassProp("is-skipped", step_r20.Status === "Skipped");
|
|
451
526
|
i0.ɵɵadvance();
|
|
452
527
|
i0.ɵɵtextInterpolate(ctx);
|
|
453
528
|
} }
|
|
454
|
-
function
|
|
455
|
-
const
|
|
456
|
-
i0.ɵɵelementStart(0, "button",
|
|
457
|
-
i0.ɵɵlistener("click", function
|
|
458
|
-
i0.ɵɵelement(1, "i",
|
|
529
|
+
function MessageItemComponent_Conditional_20_Conditional_8_Conditional_33_For_2_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
530
|
+
const _r21 = i0.ɵɵgetCurrentView();
|
|
531
|
+
i0.ɵɵelementStart(0, "button", 144);
|
|
532
|
+
i0.ɵɵlistener("click", function MessageItemComponent_Conditional_20_Conditional_8_Conditional_33_For_2_Conditional_18_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r21); const step_r20 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.OpenWorkflowStepAgentRun(step_r20, $event)); });
|
|
533
|
+
i0.ɵɵelement(1, "i", 145);
|
|
459
534
|
i0.ɵɵelementEnd();
|
|
460
535
|
} }
|
|
461
|
-
function
|
|
462
|
-
i0.ɵɵelement(0, "i",
|
|
536
|
+
function MessageItemComponent_Conditional_20_Conditional_8_Conditional_33_For_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
537
|
+
i0.ɵɵelement(0, "i", 146);
|
|
463
538
|
} if (rf & 2) {
|
|
464
|
-
const
|
|
539
|
+
const step_r20 = i0.ɵɵnextContext().$implicit;
|
|
465
540
|
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
466
|
-
i0.ɵɵclassProp("rotated", ctx_r0.IsWorkflowStepExpanded(
|
|
541
|
+
i0.ɵɵclassProp("rotated", ctx_r0.IsWorkflowStepExpanded(step_r20.ID));
|
|
467
542
|
} }
|
|
468
|
-
function
|
|
469
|
-
i0.ɵɵelementStart(0, "div",
|
|
543
|
+
function MessageItemComponent_Conditional_20_Conditional_8_Conditional_33_For_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
544
|
+
i0.ɵɵelementStart(0, "div", 140);
|
|
470
545
|
i0.ɵɵtext(1);
|
|
471
546
|
i0.ɵɵelementEnd();
|
|
472
547
|
} if (rf & 2) {
|
|
473
548
|
i0.ɵɵadvance();
|
|
474
549
|
i0.ɵɵtextInterpolate1(" ", ctx, " ");
|
|
475
550
|
} }
|
|
476
|
-
function
|
|
477
|
-
const
|
|
478
|
-
i0.ɵɵelementStart(0, "div",
|
|
479
|
-
i0.ɵɵconditionalCreate(3,
|
|
551
|
+
function MessageItemComponent_Conditional_20_Conditional_8_Conditional_33_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
552
|
+
const _r18 = i0.ɵɵgetCurrentView();
|
|
553
|
+
i0.ɵɵelementStart(0, "div", 122)(1, "div", 123)(2, "div", 124);
|
|
554
|
+
i0.ɵɵconditionalCreate(3, MessageItemComponent_Conditional_20_Conditional_8_Conditional_33_For_2_Conditional_3_Template, 1, 0, "i", 125)(4, MessageItemComponent_Conditional_20_Conditional_8_Conditional_33_For_2_Conditional_4_Template, 1, 0, "i", 126)(5, MessageItemComponent_Conditional_20_Conditional_8_Conditional_33_For_2_Conditional_5_Template, 1, 0, "i", 127)(6, MessageItemComponent_Conditional_20_Conditional_8_Conditional_33_For_2_Conditional_6_Template, 1, 0, "i", 128)(7, MessageItemComponent_Conditional_20_Conditional_8_Conditional_33_For_2_Conditional_7_Template, 1, 0, "i", 100)(8, MessageItemComponent_Conditional_20_Conditional_8_Conditional_33_For_2_Conditional_8_Template, 2, 1, "span", 129);
|
|
480
555
|
i0.ɵɵelementEnd();
|
|
481
|
-
i0.ɵɵconditionalCreate(9,
|
|
556
|
+
i0.ɵɵconditionalCreate(9, MessageItemComponent_Conditional_20_Conditional_8_Conditional_33_For_2_Conditional_9_Template, 1, 2, "div", 130);
|
|
482
557
|
i0.ɵɵelementEnd();
|
|
483
|
-
i0.ɵɵelementStart(10, "div",
|
|
484
|
-
i0.ɵɵlistener("click", function
|
|
485
|
-
i0.ɵɵelementStart(11, "div",
|
|
558
|
+
i0.ɵɵelementStart(10, "div", 131);
|
|
559
|
+
i0.ɵɵlistener("click", function MessageItemComponent_Conditional_20_Conditional_8_Conditional_33_For_2_Template_div_click_10_listener() { const step_r20 = i0.ɵɵrestoreView(_r18).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.ToggleWorkflowStepExpand(step_r20.ID)); });
|
|
560
|
+
i0.ɵɵelementStart(11, "div", 132)(12, "div", 133)(13, "span", 134);
|
|
486
561
|
i0.ɵɵtext(14);
|
|
487
562
|
i0.ɵɵelementEnd();
|
|
488
|
-
i0.ɵɵconditionalCreate(15,
|
|
563
|
+
i0.ɵɵconditionalCreate(15, MessageItemComponent_Conditional_20_Conditional_8_Conditional_33_For_2_Conditional_15_Template, 4, 1, "span", 135);
|
|
489
564
|
i0.ɵɵelementEnd();
|
|
490
|
-
i0.ɵɵelementStart(16, "div",
|
|
491
|
-
i0.ɵɵconditionalCreate(17,
|
|
492
|
-
i0.ɵɵconditionalCreate(18,
|
|
493
|
-
i0.ɵɵconditionalCreate(19,
|
|
565
|
+
i0.ɵɵelementStart(16, "div", 136);
|
|
566
|
+
i0.ɵɵconditionalCreate(17, MessageItemComponent_Conditional_20_Conditional_8_Conditional_33_For_2_Conditional_17_Template, 2, 3, "span", 137);
|
|
567
|
+
i0.ɵɵconditionalCreate(18, MessageItemComponent_Conditional_20_Conditional_8_Conditional_33_For_2_Conditional_18_Template, 2, 0, "button", 138);
|
|
568
|
+
i0.ɵɵconditionalCreate(19, MessageItemComponent_Conditional_20_Conditional_8_Conditional_33_For_2_Conditional_19_Template, 1, 2, "i", 139);
|
|
494
569
|
i0.ɵɵelementEnd()();
|
|
495
|
-
i0.ɵɵconditionalCreate(20,
|
|
570
|
+
i0.ɵɵconditionalCreate(20, MessageItemComponent_Conditional_20_Conditional_8_Conditional_33_For_2_Conditional_20_Template, 2, 1, "div", 140);
|
|
496
571
|
i0.ɵɵelementEnd()();
|
|
497
572
|
} if (rf & 2) {
|
|
498
573
|
let tmp_21_0;
|
|
499
574
|
let tmp_24_0;
|
|
500
|
-
const
|
|
501
|
-
const ɵ$
|
|
502
|
-
const ɵ$
|
|
575
|
+
const step_r20 = ctx.$implicit;
|
|
576
|
+
const ɵ$index_306_r19 = ctx.$index;
|
|
577
|
+
const ɵ$count_306_r22 = ctx.$count;
|
|
503
578
|
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
504
|
-
i0.ɵɵclassMap("step-status-" + (
|
|
505
|
-
i0.ɵɵclassProp("is-expanded", ctx_r0.IsWorkflowStepExpanded(
|
|
579
|
+
i0.ɵɵclassMap("step-status-" + (step_r20.Status || "Pending").toLowerCase().replace(" ", "-"));
|
|
580
|
+
i0.ɵɵclassProp("is-expanded", ctx_r0.IsWorkflowStepExpanded(step_r20.ID));
|
|
506
581
|
i0.ɵɵadvance(3);
|
|
507
|
-
i0.ɵɵconditional(
|
|
582
|
+
i0.ɵɵconditional(step_r20.Status === "In Progress" ? 3 : step_r20.Status === "Complete" ? 4 : step_r20.Status === "Failed" ? 5 : step_r20.Status === "Skipped" ? 6 : step_r20.Status === "Cancelled" ? 7 : 8);
|
|
508
583
|
i0.ɵɵadvance(6);
|
|
509
|
-
i0.ɵɵconditional(!(ɵ$
|
|
584
|
+
i0.ɵɵconditional(!(ɵ$index_306_r19 === ɵ$count_306_r22 - 1) ? 9 : -1);
|
|
510
585
|
i0.ɵɵadvance(5);
|
|
511
|
-
i0.ɵɵtextInterpolate(
|
|
586
|
+
i0.ɵɵtextInterpolate(step_r20.Name);
|
|
512
587
|
i0.ɵɵadvance();
|
|
513
|
-
i0.ɵɵconditional(
|
|
588
|
+
i0.ɵɵconditional(step_r20.Agent ? 15 : -1);
|
|
514
589
|
i0.ɵɵadvance(2);
|
|
515
|
-
i0.ɵɵconditional((tmp_21_0 = ctx_r0.FormatWorkflowStepDuration(
|
|
590
|
+
i0.ɵɵconditional((tmp_21_0 = ctx_r0.FormatWorkflowStepDuration(step_r20)) ? 17 : -1, tmp_21_0);
|
|
516
591
|
i0.ɵɵadvance();
|
|
517
|
-
i0.ɵɵconditional(
|
|
592
|
+
i0.ɵɵconditional(step_r20.AgentRunID ? 18 : -1);
|
|
518
593
|
i0.ɵɵadvance();
|
|
519
|
-
i0.ɵɵconditional(ctx_r0.GetWorkflowStepSummary(
|
|
594
|
+
i0.ɵɵconditional(ctx_r0.GetWorkflowStepSummary(step_r20) ? 19 : -1);
|
|
520
595
|
i0.ɵɵadvance();
|
|
521
|
-
i0.ɵɵconditional((tmp_24_0 = ctx_r0.IsWorkflowStepExpanded(
|
|
596
|
+
i0.ɵɵconditional((tmp_24_0 = ctx_r0.IsWorkflowStepExpanded(step_r20.ID) && ctx_r0.GetWorkflowStepSummary(step_r20)) ? 20 : -1, tmp_24_0);
|
|
522
597
|
} }
|
|
523
|
-
function
|
|
524
|
-
i0.ɵɵelementStart(0, "div",
|
|
525
|
-
i0.ɵɵrepeaterCreate(1,
|
|
598
|
+
function MessageItemComponent_Conditional_20_Conditional_8_Conditional_33_Template(rf, ctx) { if (rf & 1) {
|
|
599
|
+
i0.ɵɵelementStart(0, "div", 114);
|
|
600
|
+
i0.ɵɵrepeaterCreate(1, MessageItemComponent_Conditional_20_Conditional_8_Conditional_33_For_2_Template, 21, 12, "div", 121, _forTrack2);
|
|
526
601
|
i0.ɵɵelementEnd();
|
|
527
602
|
} if (rf & 2) {
|
|
528
603
|
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
529
604
|
i0.ɵɵadvance();
|
|
530
605
|
i0.ɵɵrepeater(ctx_r0.WorkflowSteps);
|
|
531
606
|
} }
|
|
532
|
-
function
|
|
533
|
-
const
|
|
534
|
-
i0.ɵɵelementStart(0, "div",
|
|
535
|
-
i0.ɵɵlistener("click", function
|
|
536
|
-
i0.ɵɵelementStart(2, "div",
|
|
537
|
-
i0.ɵɵconditionalCreate(4,
|
|
607
|
+
function MessageItemComponent_Conditional_20_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
608
|
+
const _r15 = i0.ɵɵgetCurrentView();
|
|
609
|
+
i0.ɵɵelementStart(0, "div", 93)(1, "div", 94);
|
|
610
|
+
i0.ɵɵlistener("click", function MessageItemComponent_Conditional_20_Conditional_8_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.ToggleWorkflowStepsExpanded($event)); });
|
|
611
|
+
i0.ɵɵelementStart(2, "div", 95)(3, "div", 96);
|
|
612
|
+
i0.ɵɵconditionalCreate(4, MessageItemComponent_Conditional_20_Conditional_8_Conditional_4_Template, 1, 0, "i", 97)(5, MessageItemComponent_Conditional_20_Conditional_8_Conditional_5_Template, 1, 0, "i", 98)(6, MessageItemComponent_Conditional_20_Conditional_8_Conditional_6_Template, 1, 0, "i", 99)(7, MessageItemComponent_Conditional_20_Conditional_8_Conditional_7_Template, 1, 0, "i", 100);
|
|
538
613
|
i0.ɵɵelementEnd();
|
|
539
|
-
i0.ɵɵelementStart(8, "div",
|
|
614
|
+
i0.ɵɵelementStart(8, "div", 101)(9, "div", 102)(10, "span", 103);
|
|
540
615
|
i0.ɵɵtext(11);
|
|
541
616
|
i0.ɵɵelementEnd();
|
|
542
|
-
i0.ɵɵelementStart(12, "span",
|
|
543
|
-
i0.ɵɵconditionalCreate(13,
|
|
617
|
+
i0.ɵɵelementStart(12, "span", 104);
|
|
618
|
+
i0.ɵɵconditionalCreate(13, MessageItemComponent_Conditional_20_Conditional_8_Conditional_13_Template, 1, 0)(14, MessageItemComponent_Conditional_20_Conditional_8_Conditional_14_Template, 1, 0)(15, MessageItemComponent_Conditional_20_Conditional_8_Conditional_15_Template, 1, 1);
|
|
544
619
|
i0.ɵɵelementEnd()();
|
|
545
|
-
i0.ɵɵelementStart(16, "div",
|
|
620
|
+
i0.ɵɵelementStart(16, "div", 105)(17, "span");
|
|
546
621
|
i0.ɵɵtext(18);
|
|
547
622
|
i0.ɵɵelementEnd();
|
|
548
|
-
i0.ɵɵconditionalCreate(19,
|
|
549
|
-
i0.ɵɵelementStart(20, "span",
|
|
623
|
+
i0.ɵɵconditionalCreate(19, MessageItemComponent_Conditional_20_Conditional_8_Conditional_19_Template, 4, 1);
|
|
624
|
+
i0.ɵɵelementStart(20, "span", 106);
|
|
550
625
|
i0.ɵɵtext(21, "\u00B7");
|
|
551
626
|
i0.ɵɵelementEnd();
|
|
552
627
|
i0.ɵɵelementStart(22, "span");
|
|
553
628
|
i0.ɵɵtext(23);
|
|
554
629
|
i0.ɵɵelementEnd()()()();
|
|
555
|
-
i0.ɵɵelementStart(24, "div",
|
|
556
|
-
i0.ɵɵconditionalCreate(25,
|
|
557
|
-
i0.ɵɵelementStart(26, "span",
|
|
558
|
-
i0.ɵɵelement(27, "i",
|
|
630
|
+
i0.ɵɵelementStart(24, "div", 107);
|
|
631
|
+
i0.ɵɵconditionalCreate(25, MessageItemComponent_Conditional_20_Conditional_8_Conditional_25_Template, 4, 0, "button", 108);
|
|
632
|
+
i0.ɵɵelementStart(26, "span", 109);
|
|
633
|
+
i0.ɵɵelement(27, "i", 110);
|
|
559
634
|
i0.ɵɵelementStart(28, "span");
|
|
560
635
|
i0.ɵɵtext(29);
|
|
561
636
|
i0.ɵɵelementEnd()();
|
|
562
|
-
i0.ɵɵconditionalCreate(30,
|
|
637
|
+
i0.ɵɵconditionalCreate(30, MessageItemComponent_Conditional_20_Conditional_8_Conditional_30_Template, 4, 5, "button", 111);
|
|
563
638
|
i0.ɵɵelementEnd()();
|
|
564
|
-
i0.ɵɵelementStart(31, "div",
|
|
565
|
-
i0.ɵɵelement(32, "div",
|
|
639
|
+
i0.ɵɵelementStart(31, "div", 112);
|
|
640
|
+
i0.ɵɵelement(32, "div", 113);
|
|
566
641
|
i0.ɵɵelementEnd();
|
|
567
|
-
i0.ɵɵconditionalCreate(33,
|
|
642
|
+
i0.ɵɵconditionalCreate(33, MessageItemComponent_Conditional_20_Conditional_8_Conditional_33_Template, 3, 0, "div", 114);
|
|
568
643
|
i0.ɵɵelementEnd();
|
|
569
644
|
} if (rf & 2) {
|
|
570
645
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
@@ -599,117 +674,117 @@ function MessageItemComponent_Conditional_19_Conditional_8_Template(rf, ctx) { i
|
|
|
599
674
|
i0.ɵɵadvance();
|
|
600
675
|
i0.ɵɵconditional(ctx_r0.WorkflowStatus === "Running" || ctx_r0.IsWorkflowStepsExpanded ? 33 : -1);
|
|
601
676
|
} }
|
|
602
|
-
function
|
|
603
|
-
const
|
|
604
|
-
i0.ɵɵelementStart(0, "div",
|
|
605
|
-
i0.ɵɵlistener("actionPerformed", function
|
|
677
|
+
function MessageItemComponent_Conditional_20_Conditional_9_For_1_Template(rf, ctx) { if (rf & 1) {
|
|
678
|
+
const _r23 = i0.ɵɵgetCurrentView();
|
|
679
|
+
i0.ɵɵelementStart(0, "div", 147)(1, "mj-artifact-message-card", 148);
|
|
680
|
+
i0.ɵɵlistener("actionPerformed", function MessageItemComponent_Conditional_20_Conditional_9_For_1_Template_mj_artifact_message_card_actionPerformed_1_listener($event) { i0.ɵɵrestoreView(_r23); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.onArtifactActionPerformed($event)); });
|
|
606
681
|
i0.ɵɵelementEnd()();
|
|
607
682
|
} if (rf & 2) {
|
|
608
|
-
const
|
|
683
|
+
const a_r24 = ctx.$implicit;
|
|
609
684
|
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
610
|
-
i0.ɵɵclassProp("system-artifact",
|
|
685
|
+
i0.ɵɵclassProp("system-artifact", a_r24.artifact.Visibility === "System Only");
|
|
611
686
|
i0.ɵɵadvance();
|
|
612
|
-
i0.ɵɵproperty("artifactId",
|
|
687
|
+
i0.ɵɵproperty("artifactId", a_r24.artifact.ID)("artifact", a_r24.artifact)("artifactVersion", a_r24.version)("currentUser", ctx_r0.currentUser);
|
|
613
688
|
} }
|
|
614
|
-
function
|
|
615
|
-
i0.ɵɵrepeaterCreate(0,
|
|
689
|
+
function MessageItemComponent_Conditional_20_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
690
|
+
i0.ɵɵrepeaterCreate(0, MessageItemComponent_Conditional_20_Conditional_9_For_1_Template, 2, 6, "div", 61, _forTrack3);
|
|
616
691
|
} if (rf & 2) {
|
|
617
692
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
618
693
|
i0.ɵɵrepeater(ctx_r0.displayArtifacts);
|
|
619
694
|
} }
|
|
620
|
-
function
|
|
621
|
-
i0.ɵɵelementStart(0, "span",
|
|
695
|
+
function MessageItemComponent_Conditional_20_Conditional_10_Conditional_9_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
696
|
+
i0.ɵɵelementStart(0, "span", 161);
|
|
622
697
|
i0.ɵɵtext(1);
|
|
623
698
|
i0.ɵɵelementEnd();
|
|
624
699
|
} if (rf & 2) {
|
|
625
|
-
const
|
|
626
|
-
const ɵ$
|
|
700
|
+
const a_r26 = ctx.$implicit;
|
|
701
|
+
const ɵ$index_396_r27 = ctx.$index;
|
|
627
702
|
i0.ɵɵadvance();
|
|
628
|
-
i0.ɵɵtextInterpolate2("#", ɵ$
|
|
703
|
+
i0.ɵɵtextInterpolate2("#", ɵ$index_396_r27 + 1, " ", (a_r26.version == null ? null : a_r26.version.Name) || a_r26.artifact.Name);
|
|
629
704
|
} }
|
|
630
|
-
function
|
|
631
|
-
i0.ɵɵelementStart(0, "span",
|
|
632
|
-
i0.ɵɵrepeaterCreate(1,
|
|
705
|
+
function MessageItemComponent_Conditional_20_Conditional_10_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
706
|
+
i0.ɵɵelementStart(0, "span", 155);
|
|
707
|
+
i0.ɵɵrepeaterCreate(1, MessageItemComponent_Conditional_20_Conditional_10_Conditional_9_For_2_Template, 2, 2, "span", 161, _forTrack3);
|
|
633
708
|
i0.ɵɵelementEnd();
|
|
634
709
|
} if (rf & 2) {
|
|
635
710
|
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
636
711
|
i0.ɵɵadvance();
|
|
637
712
|
i0.ɵɵrepeater(ctx_r0.SupportingArtifacts);
|
|
638
713
|
} }
|
|
639
|
-
function
|
|
640
|
-
const
|
|
641
|
-
i0.ɵɵelementStart(0, "div",
|
|
714
|
+
function MessageItemComponent_Conditional_20_Conditional_10_Conditional_14_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
715
|
+
const _r28 = i0.ɵɵgetCurrentView();
|
|
716
|
+
i0.ɵɵelementStart(0, "div", 163)(1, "span", 164);
|
|
642
717
|
i0.ɵɵtext(2);
|
|
643
718
|
i0.ɵɵelementEnd();
|
|
644
|
-
i0.ɵɵelementStart(3, "mj-artifact-message-card",
|
|
645
|
-
i0.ɵɵlistener("actionPerformed", function
|
|
719
|
+
i0.ɵɵelementStart(3, "mj-artifact-message-card", 148);
|
|
720
|
+
i0.ɵɵlistener("actionPerformed", function MessageItemComponent_Conditional_20_Conditional_10_Conditional_14_For_2_Template_mj_artifact_message_card_actionPerformed_3_listener($event) { i0.ɵɵrestoreView(_r28); const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.onArtifactActionPerformed($event)); });
|
|
646
721
|
i0.ɵɵelementEnd()();
|
|
647
722
|
} if (rf & 2) {
|
|
648
|
-
const
|
|
649
|
-
const ɵ$
|
|
723
|
+
const a_r29 = ctx.$implicit;
|
|
724
|
+
const ɵ$index_410_r30 = ctx.$index;
|
|
650
725
|
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
651
|
-
i0.ɵɵclassProp("system-artifact",
|
|
726
|
+
i0.ɵɵclassProp("system-artifact", a_r29.artifact.Visibility === "System Only");
|
|
652
727
|
i0.ɵɵadvance();
|
|
653
|
-
i0.ɵɵproperty("title", "Supporting artifact #" + (ɵ$
|
|
728
|
+
i0.ɵɵproperty("title", "Supporting artifact #" + (ɵ$index_410_r30 + 1));
|
|
654
729
|
i0.ɵɵadvance();
|
|
655
|
-
i0.ɵɵtextInterpolate1("#", ɵ$
|
|
730
|
+
i0.ɵɵtextInterpolate1("#", ɵ$index_410_r30 + 1);
|
|
656
731
|
i0.ɵɵadvance();
|
|
657
|
-
i0.ɵɵproperty("artifactId",
|
|
732
|
+
i0.ɵɵproperty("artifactId", a_r29.artifact.ID)("artifact", a_r29.artifact)("artifactVersion", a_r29.version)("currentUser", ctx_r0.currentUser);
|
|
658
733
|
} }
|
|
659
|
-
function
|
|
660
|
-
i0.ɵɵelementStart(0, "div",
|
|
661
|
-
i0.ɵɵrepeaterCreate(1,
|
|
734
|
+
function MessageItemComponent_Conditional_20_Conditional_10_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
735
|
+
i0.ɵɵelementStart(0, "div", 159);
|
|
736
|
+
i0.ɵɵrepeaterCreate(1, MessageItemComponent_Conditional_20_Conditional_10_Conditional_14_For_2_Template, 4, 8, "div", 162, _forTrack3);
|
|
662
737
|
i0.ɵɵelementEnd();
|
|
663
738
|
} if (rf & 2) {
|
|
664
739
|
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
665
740
|
i0.ɵɵadvance();
|
|
666
741
|
i0.ɵɵrepeater(ctx_r0.SupportingArtifacts);
|
|
667
742
|
} }
|
|
668
|
-
function
|
|
669
|
-
const
|
|
670
|
-
i0.ɵɵelementStart(0, "div",
|
|
671
|
-
i0.ɵɵelement(2, "i",
|
|
672
|
-
i0.ɵɵelementStart(3, "span",
|
|
743
|
+
function MessageItemComponent_Conditional_20_Conditional_10_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
744
|
+
const _r31 = i0.ɵɵgetCurrentView();
|
|
745
|
+
i0.ɵɵelementStart(0, "div", 160)(1, "div", 165);
|
|
746
|
+
i0.ɵɵelement(2, "i", 166);
|
|
747
|
+
i0.ɵɵelementStart(3, "span", 167);
|
|
673
748
|
i0.ɵɵtext(4, "Final Artifact");
|
|
674
749
|
i0.ɵɵelementEnd();
|
|
675
|
-
i0.ɵɵelementStart(5, "span",
|
|
750
|
+
i0.ɵɵelementStart(5, "span", 168);
|
|
676
751
|
i0.ɵɵtext(6);
|
|
677
752
|
i0.ɵɵelementEnd()();
|
|
678
|
-
i0.ɵɵelementStart(7, "div",
|
|
679
|
-
i0.ɵɵlistener("actionPerformed", function
|
|
753
|
+
i0.ɵɵelementStart(7, "div", 169)(8, "mj-artifact-message-card", 148);
|
|
754
|
+
i0.ɵɵlistener("actionPerformed", function MessageItemComponent_Conditional_20_Conditional_10_Conditional_15_Template_mj_artifact_message_card_actionPerformed_8_listener($event) { i0.ɵɵrestoreView(_r31); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.onArtifactActionPerformed($event)); });
|
|
680
755
|
i0.ɵɵelementEnd()()();
|
|
681
756
|
} if (rf & 2) {
|
|
682
|
-
const
|
|
757
|
+
const primary_r32 = ctx;
|
|
683
758
|
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
684
759
|
i0.ɵɵadvance(6);
|
|
685
760
|
i0.ɵɵtextInterpolate1("#", ctx_r0.displayArtifacts.length);
|
|
686
761
|
i0.ɵɵadvance();
|
|
687
|
-
i0.ɵɵclassProp("system-artifact",
|
|
762
|
+
i0.ɵɵclassProp("system-artifact", primary_r32.artifact.Visibility === "System Only");
|
|
688
763
|
i0.ɵɵadvance();
|
|
689
|
-
i0.ɵɵproperty("artifactId",
|
|
764
|
+
i0.ɵɵproperty("artifactId", primary_r32.artifact.ID)("artifact", primary_r32.artifact)("artifactVersion", primary_r32.version)("currentUser", ctx_r0.currentUser);
|
|
690
765
|
} }
|
|
691
|
-
function
|
|
692
|
-
const
|
|
693
|
-
i0.ɵɵelementStart(0, "div",
|
|
694
|
-
i0.ɵɵlistener("click", function
|
|
695
|
-
i0.ɵɵelementStart(3, "span",
|
|
696
|
-
i0.ɵɵelement(4, "i",
|
|
697
|
-
i0.ɵɵelementStart(5, "span",
|
|
766
|
+
function MessageItemComponent_Conditional_20_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
767
|
+
const _r25 = i0.ɵɵgetCurrentView();
|
|
768
|
+
i0.ɵɵelementStart(0, "div", 60)(1, "div", 149)(2, "button", 150);
|
|
769
|
+
i0.ɵɵlistener("click", function MessageItemComponent_Conditional_20_Conditional_10_Template_button_click_2_listener($event) { i0.ɵɵrestoreView(_r25); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.ToggleSupportingArtifacts($event)); });
|
|
770
|
+
i0.ɵɵelementStart(3, "span", 151);
|
|
771
|
+
i0.ɵɵelement(4, "i", 152);
|
|
772
|
+
i0.ɵɵelementStart(5, "span", 153);
|
|
698
773
|
i0.ɵɵtext(6, "Supporting Artifacts");
|
|
699
774
|
i0.ɵɵelementEnd();
|
|
700
|
-
i0.ɵɵelementStart(7, "span",
|
|
775
|
+
i0.ɵɵelementStart(7, "span", 154);
|
|
701
776
|
i0.ɵɵtext(8);
|
|
702
777
|
i0.ɵɵelementEnd();
|
|
703
|
-
i0.ɵɵconditionalCreate(9,
|
|
778
|
+
i0.ɵɵconditionalCreate(9, MessageItemComponent_Conditional_20_Conditional_10_Conditional_9_Template, 3, 0, "span", 155);
|
|
704
779
|
i0.ɵɵelementEnd();
|
|
705
|
-
i0.ɵɵelementStart(10, "span",
|
|
780
|
+
i0.ɵɵelementStart(10, "span", 156)(11, "span", 157);
|
|
706
781
|
i0.ɵɵtext(12);
|
|
707
782
|
i0.ɵɵelementEnd();
|
|
708
|
-
i0.ɵɵelement(13, "i",
|
|
783
|
+
i0.ɵɵelement(13, "i", 158);
|
|
709
784
|
i0.ɵɵelementEnd()();
|
|
710
|
-
i0.ɵɵconditionalCreate(14,
|
|
785
|
+
i0.ɵɵconditionalCreate(14, MessageItemComponent_Conditional_20_Conditional_10_Conditional_14_Template, 3, 0, "div", 159);
|
|
711
786
|
i0.ɵɵelementEnd();
|
|
712
|
-
i0.ɵɵconditionalCreate(15,
|
|
787
|
+
i0.ɵɵconditionalCreate(15, MessageItemComponent_Conditional_20_Conditional_10_Conditional_15_Template, 9, 7, "div", 160);
|
|
713
788
|
i0.ɵɵelementEnd();
|
|
714
789
|
} if (rf & 2) {
|
|
715
790
|
let tmp_9_0;
|
|
@@ -731,57 +806,55 @@ function MessageItemComponent_Conditional_19_Conditional_10_Template(rf, ctx) {
|
|
|
731
806
|
i0.ɵɵadvance();
|
|
732
807
|
i0.ɵɵconditional((tmp_9_0 = ctx_r0.PrimaryArtifact) ? 15 : -1, tmp_9_0);
|
|
733
808
|
} }
|
|
734
|
-
function
|
|
735
|
-
i0.ɵɵelementStart(0, "div",
|
|
736
|
-
i0.ɵɵelement(2, "mj-loading",
|
|
809
|
+
function MessageItemComponent_Conditional_20_For_12_Template(rf, ctx) { if (rf & 1) {
|
|
810
|
+
i0.ɵɵelementStart(0, "div", 147)(1, "div", 170);
|
|
811
|
+
i0.ɵɵelement(2, "mj-loading", 171);
|
|
737
812
|
i0.ɵɵelementEnd()();
|
|
738
813
|
} if (rf & 2) {
|
|
739
|
-
const
|
|
814
|
+
const pending_r33 = ctx.$implicit;
|
|
740
815
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
741
|
-
i0.ɵɵclassProp("system-artifact",
|
|
816
|
+
i0.ɵɵclassProp("system-artifact", pending_r33.visibility === "System Only");
|
|
742
817
|
i0.ɵɵadvance(2);
|
|
743
|
-
i0.ɵɵproperty("text", ctx_r0.pendingLabel(
|
|
818
|
+
i0.ɵɵproperty("text", ctx_r0.pendingLabel(pending_r33));
|
|
744
819
|
} }
|
|
745
|
-
function
|
|
746
|
-
const
|
|
747
|
-
i0.ɵɵelementStart(0, "mj-dynamic-form",
|
|
748
|
-
i0.ɵɵlistener("FormSubmitted", function
|
|
820
|
+
function MessageItemComponent_Conditional_20_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
821
|
+
const _r34 = i0.ɵɵgetCurrentView();
|
|
822
|
+
i0.ɵɵelementStart(0, "mj-dynamic-form", 172);
|
|
823
|
+
i0.ɵɵlistener("FormSubmitted", function MessageItemComponent_Conditional_20_Conditional_13_Template_mj_dynamic_form_FormSubmitted_0_listener($event) { i0.ɵɵrestoreView(_r34); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onFormSubmitted($event)); });
|
|
749
824
|
i0.ɵɵelementEnd();
|
|
750
825
|
} if (rf & 2) {
|
|
751
826
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
752
827
|
i0.ɵɵproperty("FormDefinition", ctx_r0.responseForm)("Disabled", ctx_r0.isProcessing);
|
|
753
828
|
} }
|
|
754
|
-
function
|
|
755
|
-
const
|
|
756
|
-
i0.ɵɵelementStart(0, "mj-actionable-commands",
|
|
757
|
-
i0.ɵɵlistener("commandExecuted", function
|
|
829
|
+
function MessageItemComponent_Conditional_20_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
830
|
+
const _r35 = i0.ɵɵgetCurrentView();
|
|
831
|
+
i0.ɵɵelementStart(0, "mj-actionable-commands", 173);
|
|
832
|
+
i0.ɵɵlistener("commandExecuted", function MessageItemComponent_Conditional_20_Conditional_14_Template_mj_actionable_commands_commandExecuted_0_listener($event) { i0.ɵɵrestoreView(_r35); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onCommandExecuted($event)); });
|
|
758
833
|
i0.ɵɵelementEnd();
|
|
759
834
|
} if (rf & 2) {
|
|
760
835
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
761
836
|
i0.ɵɵproperty("commands", ctx_r0.actionableCommands)("disabled", ctx_r0.isProcessing)("isLastMessage", ctx_r0.isLastMessageInConversation)("isConversationOwner", ctx_r0.isConversationOwner);
|
|
762
837
|
} }
|
|
763
|
-
function
|
|
764
|
-
i0.ɵɵconditionalCreate(0,
|
|
765
|
-
i0.ɵɵ
|
|
766
|
-
i0.ɵɵ
|
|
767
|
-
i0.ɵɵconditionalCreate(
|
|
768
|
-
i0.ɵɵ
|
|
769
|
-
i0.ɵɵconditionalCreate(
|
|
770
|
-
i0.ɵɵconditionalCreate(
|
|
771
|
-
i0.ɵɵconditionalCreate(
|
|
772
|
-
i0.ɵɵconditionalCreate(
|
|
773
|
-
i0.ɵɵ
|
|
774
|
-
i0.ɵɵconditionalCreate(
|
|
775
|
-
i0.ɵɵ
|
|
776
|
-
i0.ɵɵconditionalCreate(13, MessageItemComponent_Conditional_19_Conditional_13_Template, 1, 2, "mj-dynamic-form", 59);
|
|
777
|
-
i0.ɵɵconditionalCreate(14, MessageItemComponent_Conditional_19_Conditional_14_Template, 1, 4, "mj-actionable-commands", 60);
|
|
838
|
+
function MessageItemComponent_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
839
|
+
i0.ɵɵconditionalCreate(0, MessageItemComponent_Conditional_20_Conditional_0_Template, 13, 1, "button", 53);
|
|
840
|
+
i0.ɵɵconditionalCreate(1, MessageItemComponent_Conditional_20_Conditional_1_Template, 6, 0)(2, MessageItemComponent_Conditional_20_Conditional_2_Template, 3, 3, "div", 54);
|
|
841
|
+
i0.ɵɵconditionalCreate(3, MessageItemComponent_Conditional_20_Conditional_3_Template, 1, 1, "mj-agent-handoff-card", 55);
|
|
842
|
+
i0.ɵɵconditionalCreate(4, MessageItemComponent_Conditional_20_Conditional_4_Template, 3, 1, "div", 56);
|
|
843
|
+
i0.ɵɵconditionalCreate(5, MessageItemComponent_Conditional_20_Conditional_5_Template, 4, 0, "div", 57);
|
|
844
|
+
i0.ɵɵconditionalCreate(6, MessageItemComponent_Conditional_20_Conditional_6_Template, 1, 5, "ng-container");
|
|
845
|
+
i0.ɵɵconditionalCreate(7, MessageItemComponent_Conditional_20_Conditional_7_Template, 3, 0, "div", 58);
|
|
846
|
+
i0.ɵɵconditionalCreate(8, MessageItemComponent_Conditional_20_Conditional_8_Template, 34, 23, "div", 59);
|
|
847
|
+
i0.ɵɵconditionalCreate(9, MessageItemComponent_Conditional_20_Conditional_9_Template, 2, 0)(10, MessageItemComponent_Conditional_20_Conditional_10_Template, 16, 10, "div", 60);
|
|
848
|
+
i0.ɵɵrepeaterCreate(11, MessageItemComponent_Conditional_20_For_12_Template, 3, 3, "div", 61, _forTrack0);
|
|
849
|
+
i0.ɵɵconditionalCreate(13, MessageItemComponent_Conditional_20_Conditional_13_Template, 1, 2, "mj-dynamic-form", 62);
|
|
850
|
+
i0.ɵɵconditionalCreate(14, MessageItemComponent_Conditional_20_Conditional_14_Template, 1, 4, "mj-actionable-commands", 63);
|
|
778
851
|
} if (rf & 2) {
|
|
779
852
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
780
853
|
i0.ɵɵconditional(ctx_r0.OriginatingWorkflowTask ? 0 : -1);
|
|
781
|
-
i0.ɵɵadvance(2);
|
|
782
|
-
i0.ɵɵproperty("data", ctx_r0.displayMessage)("enableCollapsibleHeadings", true);
|
|
783
854
|
i0.ɵɵadvance();
|
|
784
|
-
i0.ɵɵconditional(ctx_r0.
|
|
855
|
+
i0.ɵɵconditional(ctx_r0.IsHandedOffTargetJoining ? 1 : 2);
|
|
856
|
+
i0.ɵɵadvance(2);
|
|
857
|
+
i0.ɵɵconditional(ctx_r0.Handoff ? 3 : -1);
|
|
785
858
|
i0.ɵɵadvance();
|
|
786
859
|
i0.ɵɵconditional(ctx_r0.StoppedLineText ? 4 : -1);
|
|
787
860
|
i0.ɵɵadvance();
|
|
@@ -801,8 +874,8 @@ function MessageItemComponent_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
|
801
874
|
i0.ɵɵadvance();
|
|
802
875
|
i0.ɵɵconditional(!ctx_r0.ReadOnly && ctx_r0.isLastMessageInConversation && ctx_r0.isConversationOwner && ctx_r0.actionableCommands.length > 0 ? 14 : -1);
|
|
803
876
|
} }
|
|
804
|
-
function
|
|
805
|
-
i0.ɵɵelementStart(0, "span",
|
|
877
|
+
function MessageItemComponent_Conditional_21_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
878
|
+
i0.ɵɵelementStart(0, "span", 180);
|
|
806
879
|
i0.ɵɵtext(1);
|
|
807
880
|
i0.ɵɵelementEnd();
|
|
808
881
|
} if (rf & 2) {
|
|
@@ -810,25 +883,25 @@ function MessageItemComponent_Conditional_20_Conditional_9_Template(rf, ctx) { i
|
|
|
810
883
|
i0.ɵɵadvance();
|
|
811
884
|
i0.ɵɵtextInterpolate(ctx_r0.EditNote);
|
|
812
885
|
} }
|
|
813
|
-
function
|
|
814
|
-
const
|
|
815
|
-
i0.ɵɵelementStart(0, "div", 14)(1, "textarea",
|
|
816
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
817
|
-
i0.ɵɵlistener("keydown", function
|
|
886
|
+
function MessageItemComponent_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
887
|
+
const _r36 = i0.ɵɵgetCurrentView();
|
|
888
|
+
i0.ɵɵelementStart(0, "div", 14)(1, "textarea", 174);
|
|
889
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MessageItemComponent_Conditional_21_Template_textarea_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r36); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.editedText, $event) || (ctx_r0.editedText = $event); return i0.ɵɵresetView($event); });
|
|
890
|
+
i0.ɵɵlistener("keydown", function MessageItemComponent_Conditional_21_Template_textarea_keydown_1_listener($event) { i0.ɵɵrestoreView(_r36); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onEditKeydown($event)); });
|
|
818
891
|
i0.ɵɵelementEnd();
|
|
819
|
-
i0.ɵɵelementStart(2, "div",
|
|
820
|
-
i0.ɵɵlistener("click", function
|
|
821
|
-
i0.ɵɵelement(4, "i",
|
|
892
|
+
i0.ɵɵelementStart(2, "div", 175)(3, "button", 176);
|
|
893
|
+
i0.ɵɵlistener("click", function MessageItemComponent_Conditional_21_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r36); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.SaveEdit()); });
|
|
894
|
+
i0.ɵɵelement(4, "i", 177);
|
|
822
895
|
i0.ɵɵtext(5);
|
|
823
896
|
i0.ɵɵelementEnd();
|
|
824
|
-
i0.ɵɵelementStart(6, "button",
|
|
825
|
-
i0.ɵɵlistener("click", function
|
|
826
|
-
i0.ɵɵelement(7, "i",
|
|
897
|
+
i0.ɵɵelementStart(6, "button", 178);
|
|
898
|
+
i0.ɵɵlistener("click", function MessageItemComponent_Conditional_21_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r36); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.CancelEditing()); });
|
|
899
|
+
i0.ɵɵelement(7, "i", 179);
|
|
827
900
|
i0.ɵɵtext(8, " Cancel ");
|
|
828
901
|
i0.ɵɵelementEnd();
|
|
829
|
-
i0.ɵɵconditionalCreate(9,
|
|
902
|
+
i0.ɵɵconditionalCreate(9, MessageItemComponent_Conditional_21_Conditional_9_Template, 2, 1, "span", 180);
|
|
830
903
|
i0.ɵɵelementEnd();
|
|
831
|
-
i0.ɵɵelementStart(10, "div",
|
|
904
|
+
i0.ɵɵelementStart(10, "div", 181);
|
|
832
905
|
i0.ɵɵtext(11);
|
|
833
906
|
i0.ɵɵelementEnd()();
|
|
834
907
|
} if (rf & 2) {
|
|
@@ -844,120 +917,120 @@ function MessageItemComponent_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
|
844
917
|
i0.ɵɵadvance(2);
|
|
845
918
|
i0.ɵɵtextInterpolate(ctx_r0.EditHint);
|
|
846
919
|
} }
|
|
847
|
-
function
|
|
848
|
-
const
|
|
849
|
-
i0.ɵɵelementStart(0, "button",
|
|
850
|
-
i0.ɵɵlistener("click", function
|
|
851
|
-
i0.ɵɵelement(1, "i",
|
|
852
|
-
i0.ɵɵelementStart(2, "span",
|
|
920
|
+
function MessageItemComponent_Conditional_22_For_2_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
921
|
+
const _r37 = i0.ɵɵgetCurrentView();
|
|
922
|
+
i0.ɵɵelementStart(0, "button", 184);
|
|
923
|
+
i0.ɵɵlistener("click", function MessageItemComponent_Conditional_22_For_2_Conditional_0_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r37); const chip_r38 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OnForkChipClick(chip_r38, $event)); });
|
|
924
|
+
i0.ɵɵelement(1, "i", 177);
|
|
925
|
+
i0.ɵɵelementStart(2, "span", 185);
|
|
853
926
|
i0.ɵɵtext(3);
|
|
854
927
|
i0.ɵɵelementEnd();
|
|
855
|
-
i0.ɵɵelementStart(4, "span",
|
|
928
|
+
i0.ɵɵelementStart(4, "span", 186);
|
|
856
929
|
i0.ɵɵtext(5, "\u00B7 original");
|
|
857
930
|
i0.ɵɵelementEnd()();
|
|
858
931
|
} if (rf & 2) {
|
|
859
|
-
const
|
|
932
|
+
const chip_r38 = i0.ɵɵnextContext().$implicit;
|
|
860
933
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
861
|
-
i0.ɵɵattribute("aria-label", ctx_r0.ChipAriaLabel(
|
|
934
|
+
i0.ɵɵattribute("aria-label", ctx_r0.ChipAriaLabel(chip_r38));
|
|
862
935
|
i0.ɵɵadvance();
|
|
863
|
-
i0.ɵɵclassMap("fork-chip-icon " + ctx_r0.ChipIcon(
|
|
936
|
+
i0.ɵɵclassMap("fork-chip-icon " + ctx_r0.ChipIcon(chip_r38));
|
|
864
937
|
i0.ɵɵadvance(2);
|
|
865
|
-
i0.ɵɵtextInterpolate(
|
|
938
|
+
i0.ɵɵtextInterpolate(chip_r38.DisplayName);
|
|
866
939
|
} }
|
|
867
|
-
function
|
|
868
|
-
i0.ɵɵelement(0, "img",
|
|
940
|
+
function MessageItemComponent_Conditional_22_For_2_Conditional_1_Conditional_2_For_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
941
|
+
i0.ɵɵelement(0, "img", 29);
|
|
869
942
|
} if (rf & 2) {
|
|
870
|
-
const
|
|
871
|
-
i0.ɵɵproperty("src",
|
|
943
|
+
const avatar_r40 = i0.ɵɵnextContext().$implicit;
|
|
944
|
+
i0.ɵɵproperty("src", avatar_r40.ImageURL, i0.ɵɵsanitizeUrl);
|
|
872
945
|
} }
|
|
873
|
-
function
|
|
946
|
+
function MessageItemComponent_Conditional_22_For_2_Conditional_1_Conditional_2_For_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
874
947
|
i0.ɵɵelement(0, "i");
|
|
875
948
|
} if (rf & 2) {
|
|
876
|
-
const
|
|
877
|
-
i0.ɵɵclassMap(
|
|
949
|
+
const avatar_r40 = i0.ɵɵnextContext().$implicit;
|
|
950
|
+
i0.ɵɵclassMap(avatar_r40.IconClass);
|
|
878
951
|
} }
|
|
879
|
-
function
|
|
952
|
+
function MessageItemComponent_Conditional_22_For_2_Conditional_1_Conditional_2_For_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
880
953
|
i0.ɵɵtext(0);
|
|
881
954
|
} if (rf & 2) {
|
|
882
|
-
const
|
|
883
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
955
|
+
const avatar_r40 = i0.ɵɵnextContext().$implicit;
|
|
956
|
+
i0.ɵɵtextInterpolate1(" ", avatar_r40.Initials, " ");
|
|
884
957
|
} }
|
|
885
|
-
function
|
|
886
|
-
i0.ɵɵelementStart(0, "span",
|
|
887
|
-
i0.ɵɵconditionalCreate(1,
|
|
958
|
+
function MessageItemComponent_Conditional_22_For_2_Conditional_1_Conditional_2_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
959
|
+
i0.ɵɵelementStart(0, "span", 190);
|
|
960
|
+
i0.ɵɵconditionalCreate(1, MessageItemComponent_Conditional_22_For_2_Conditional_1_Conditional_2_For_2_Conditional_1_Template, 1, 1, "img", 29)(2, MessageItemComponent_Conditional_22_For_2_Conditional_1_Conditional_2_For_2_Conditional_2_Template, 1, 2, "i", 22)(3, MessageItemComponent_Conditional_22_For_2_Conditional_1_Conditional_2_For_2_Conditional_3_Template, 1, 1);
|
|
888
961
|
i0.ɵɵelementEnd();
|
|
889
962
|
} if (rf & 2) {
|
|
890
|
-
const
|
|
891
|
-
i0.ɵɵproperty("title",
|
|
963
|
+
const avatar_r40 = ctx.$implicit;
|
|
964
|
+
i0.ɵɵproperty("title", avatar_r40.Label);
|
|
892
965
|
i0.ɵɵadvance();
|
|
893
|
-
i0.ɵɵconditional(
|
|
966
|
+
i0.ɵɵconditional(avatar_r40.ImageURL ? 1 : avatar_r40.IconClass ? 2 : 3);
|
|
894
967
|
} }
|
|
895
|
-
function
|
|
896
|
-
i0.ɵɵelementStart(0, "span",
|
|
897
|
-
i0.ɵɵrepeaterCreate(1,
|
|
968
|
+
function MessageItemComponent_Conditional_22_For_2_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
969
|
+
i0.ɵɵelementStart(0, "span", 188);
|
|
970
|
+
i0.ɵɵrepeaterCreate(1, MessageItemComponent_Conditional_22_For_2_Conditional_1_Conditional_2_For_2_Template, 4, 2, "span", 190, _forTrack5);
|
|
898
971
|
i0.ɵɵelementEnd();
|
|
899
972
|
} if (rf & 2) {
|
|
900
|
-
const
|
|
973
|
+
const chip_r38 = i0.ɵɵnextContext(2).$implicit;
|
|
901
974
|
i0.ɵɵadvance();
|
|
902
|
-
i0.ɵɵrepeater(
|
|
975
|
+
i0.ɵɵrepeater(chip_r38.Avatars);
|
|
903
976
|
} }
|
|
904
|
-
function
|
|
905
|
-
const
|
|
906
|
-
i0.ɵɵelementStart(0, "button",
|
|
907
|
-
i0.ɵɵlistener("click", function
|
|
908
|
-
i0.ɵɵelement(1, "i",
|
|
909
|
-
i0.ɵɵconditionalCreate(2,
|
|
910
|
-
i0.ɵɵelementStart(3, "span",
|
|
977
|
+
function MessageItemComponent_Conditional_22_For_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
978
|
+
const _r39 = i0.ɵɵgetCurrentView();
|
|
979
|
+
i0.ɵɵelementStart(0, "button", 187);
|
|
980
|
+
i0.ɵɵlistener("click", function MessageItemComponent_Conditional_22_For_2_Conditional_1_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r39); const chip_r38 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OnForkChipClick(chip_r38, $event)); });
|
|
981
|
+
i0.ɵɵelement(1, "i", 177);
|
|
982
|
+
i0.ɵɵconditionalCreate(2, MessageItemComponent_Conditional_22_For_2_Conditional_1_Conditional_2_Template, 3, 0, "span", 188);
|
|
983
|
+
i0.ɵɵelementStart(3, "span", 189);
|
|
911
984
|
i0.ɵɵtext(4);
|
|
912
985
|
i0.ɵɵelementEnd();
|
|
913
|
-
i0.ɵɵelementStart(5, "span",
|
|
986
|
+
i0.ɵɵelementStart(5, "span", 185);
|
|
914
987
|
i0.ɵɵtext(6);
|
|
915
988
|
i0.ɵɵelementEnd();
|
|
916
|
-
i0.ɵɵelementStart(7, "span",
|
|
989
|
+
i0.ɵɵelementStart(7, "span", 186);
|
|
917
990
|
i0.ɵɵtext(8);
|
|
918
991
|
i0.ɵɵelementEnd()();
|
|
919
992
|
} if (rf & 2) {
|
|
920
|
-
const
|
|
993
|
+
const chip_r38 = i0.ɵɵnextContext().$implicit;
|
|
921
994
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
922
|
-
i0.ɵɵattribute("data-kind",
|
|
995
|
+
i0.ɵɵattribute("data-kind", chip_r38.Kind)("aria-label", ctx_r0.ChipAriaLabel(chip_r38));
|
|
923
996
|
i0.ɵɵadvance();
|
|
924
|
-
i0.ɵɵclassMap("fork-chip-icon " + ctx_r0.ChipIcon(
|
|
997
|
+
i0.ɵɵclassMap("fork-chip-icon " + ctx_r0.ChipIcon(chip_r38));
|
|
925
998
|
i0.ɵɵadvance();
|
|
926
|
-
i0.ɵɵconditional(
|
|
999
|
+
i0.ɵɵconditional(chip_r38.Avatars.length > 0 ? 2 : -1);
|
|
927
1000
|
i0.ɵɵadvance(2);
|
|
928
|
-
i0.ɵɵtextInterpolate(
|
|
1001
|
+
i0.ɵɵtextInterpolate(chip_r38.MessageLabel);
|
|
929
1002
|
i0.ɵɵadvance(2);
|
|
930
|
-
i0.ɵɵtextInterpolate(
|
|
1003
|
+
i0.ɵɵtextInterpolate(chip_r38.DisplayName);
|
|
931
1004
|
i0.ɵɵadvance(2);
|
|
932
|
-
i0.ɵɵtextInterpolate1("\u00B7 ",
|
|
1005
|
+
i0.ɵɵtextInterpolate1("\u00B7 ", chip_r38.ActivityLabel);
|
|
933
1006
|
} }
|
|
934
|
-
function
|
|
935
|
-
i0.ɵɵconditionalCreate(0,
|
|
1007
|
+
function MessageItemComponent_Conditional_22_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
1008
|
+
i0.ɵɵconditionalCreate(0, MessageItemComponent_Conditional_22_For_2_Conditional_0_Template, 6, 4, "button", 182)(1, MessageItemComponent_Conditional_22_For_2_Conditional_1_Template, 9, 8, "button", 183);
|
|
936
1009
|
} if (rf & 2) {
|
|
937
|
-
const
|
|
938
|
-
i0.ɵɵconditional(
|
|
1010
|
+
const chip_r38 = ctx.$implicit;
|
|
1011
|
+
i0.ɵɵconditional(chip_r38.Kind === "Original" ? 0 : 1);
|
|
939
1012
|
} }
|
|
940
|
-
function
|
|
1013
|
+
function MessageItemComponent_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
941
1014
|
i0.ɵɵelementStart(0, "div", 15);
|
|
942
|
-
i0.ɵɵrepeaterCreate(1,
|
|
1015
|
+
i0.ɵɵrepeaterCreate(1, MessageItemComponent_Conditional_22_For_2_Template, 2, 1, null, null, _forTrack4);
|
|
943
1016
|
i0.ɵɵelementEnd();
|
|
944
1017
|
} if (rf & 2) {
|
|
945
1018
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
946
1019
|
i0.ɵɵadvance();
|
|
947
1020
|
i0.ɵɵrepeater(ctx_r0.ForkChips);
|
|
948
1021
|
} }
|
|
949
|
-
function
|
|
950
|
-
const
|
|
951
|
-
i0.ɵɵelementStart(0, "button",
|
|
952
|
-
i0.ɵɵlistener("click", function
|
|
953
|
-
i0.ɵɵelement(1, "i",
|
|
1022
|
+
function MessageItemComponent_Conditional_23_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
1023
|
+
const _r41 = i0.ɵɵgetCurrentView();
|
|
1024
|
+
i0.ɵɵelementStart(0, "button", 193);
|
|
1025
|
+
i0.ɵɵlistener("click", function MessageItemComponent_Conditional_23_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r41); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onDeleteClick()); });
|
|
1026
|
+
i0.ɵɵelement(1, "i", 194);
|
|
954
1027
|
i0.ɵɵelementEnd();
|
|
955
1028
|
} }
|
|
956
|
-
function
|
|
957
|
-
const
|
|
958
|
-
i0.ɵɵelementStart(0, "button",
|
|
959
|
-
i0.ɵɵlistener("click", function
|
|
960
|
-
i0.ɵɵelement(1, "i",
|
|
1029
|
+
function MessageItemComponent_Conditional_23_Conditional_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
1030
|
+
const _r42 = i0.ɵɵgetCurrentView();
|
|
1031
|
+
i0.ɵɵelementStart(0, "button", 196);
|
|
1032
|
+
i0.ɵɵlistener("click", function MessageItemComponent_Conditional_23_Conditional_2_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r42); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.OnRegenerateClick()); });
|
|
1033
|
+
i0.ɵɵelement(1, "i", 49);
|
|
961
1034
|
i0.ɵɵelementStart(2, "span");
|
|
962
1035
|
i0.ɵɵtext(3, "Regenerate");
|
|
963
1036
|
i0.ɵɵelementEnd()();
|
|
@@ -965,36 +1038,36 @@ function MessageItemComponent_Conditional_22_Conditional_2_Conditional_1_Templat
|
|
|
965
1038
|
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
966
1039
|
i0.ɵɵproperty("title", ctx_r0.RegenerateTitle);
|
|
967
1040
|
} }
|
|
968
|
-
function
|
|
969
|
-
i0.ɵɵelement(0, "mj-conversation-message-rating",
|
|
1041
|
+
function MessageItemComponent_Conditional_23_Conditional_2_Conditional_2_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
1042
|
+
i0.ɵɵelement(0, "mj-conversation-message-rating", 197);
|
|
970
1043
|
} if (rf & 2) {
|
|
971
1044
|
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
972
1045
|
i0.ɵɵproperty("conversationDetailId", ctx_r0.message.ID)("currentUser", ctx_r0.currentUser)("ratingEntityName", ctx_r0.message.EntityInfo.Name || "MJ: Conversation Details")("ratingsData", ctx_r0.ratings)("canEdit", ctx_r0.isConversationOwner && !ctx_r0.ReadOnly);
|
|
973
1046
|
} }
|
|
974
|
-
function
|
|
975
|
-
const
|
|
976
|
-
i0.ɵɵelementStart(0, "button",
|
|
977
|
-
i0.ɵɵlistener("click", function
|
|
978
|
-
i0.ɵɵelement(1, "i",
|
|
1047
|
+
function MessageItemComponent_Conditional_23_Conditional_2_Conditional_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
1048
|
+
const _r43 = i0.ɵɵgetCurrentView();
|
|
1049
|
+
i0.ɵɵelementStart(0, "button", 199);
|
|
1050
|
+
i0.ɵɵlistener("click", function MessageItemComponent_Conditional_23_Conditional_2_Conditional_2_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r43); const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.PinMessage()); });
|
|
1051
|
+
i0.ɵɵelement(1, "i", 200);
|
|
979
1052
|
i0.ɵɵelementEnd();
|
|
980
1053
|
} if (rf & 2) {
|
|
981
1054
|
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
982
1055
|
i0.ɵɵclassProp("pinned", ctx_r0.message.IsPinned);
|
|
983
1056
|
i0.ɵɵproperty("title", ctx_r0.message.IsPinned ? "Unpin message" : "Pin message");
|
|
984
1057
|
} }
|
|
985
|
-
function
|
|
986
|
-
i0.ɵɵconditionalCreate(0,
|
|
987
|
-
i0.ɵɵconditionalCreate(1,
|
|
1058
|
+
function MessageItemComponent_Conditional_23_Conditional_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1059
|
+
i0.ɵɵconditionalCreate(0, MessageItemComponent_Conditional_23_Conditional_2_Conditional_2_Conditional_0_Template, 1, 5, "mj-conversation-message-rating", 197);
|
|
1060
|
+
i0.ɵɵconditionalCreate(1, MessageItemComponent_Conditional_23_Conditional_2_Conditional_2_Conditional_1_Template, 2, 3, "button", 198);
|
|
988
1061
|
} if (rf & 2) {
|
|
989
1062
|
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
990
1063
|
i0.ɵɵconditional(ctx_r0.showMessageRating ? 0 : -1);
|
|
991
1064
|
i0.ɵɵadvance();
|
|
992
1065
|
i0.ɵɵconditional(ctx_r0.allowPinning ? 1 : -1);
|
|
993
1066
|
} }
|
|
994
|
-
function
|
|
995
|
-
i0.ɵɵelementStart(0, "div",
|
|
996
|
-
i0.ɵɵconditionalCreate(1,
|
|
997
|
-
i0.ɵɵconditionalCreate(2,
|
|
1067
|
+
function MessageItemComponent_Conditional_23_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1068
|
+
i0.ɵɵelementStart(0, "div", 192);
|
|
1069
|
+
i0.ɵɵconditionalCreate(1, MessageItemComponent_Conditional_23_Conditional_2_Conditional_1_Template, 4, 1, "button", 195);
|
|
1070
|
+
i0.ɵɵconditionalCreate(2, MessageItemComponent_Conditional_23_Conditional_2_Conditional_2_Template, 2, 2);
|
|
998
1071
|
i0.ɵɵelementEnd();
|
|
999
1072
|
} if (rf & 2) {
|
|
1000
1073
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
@@ -1003,10 +1076,10 @@ function MessageItemComponent_Conditional_22_Conditional_2_Template(rf, ctx) { i
|
|
|
1003
1076
|
i0.ɵɵadvance();
|
|
1004
1077
|
i0.ɵɵconditional(ctx_r0.messageStatus === "Complete" ? 2 : -1);
|
|
1005
1078
|
} }
|
|
1006
|
-
function
|
|
1079
|
+
function MessageItemComponent_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
1007
1080
|
i0.ɵɵelementStart(0, "div", 16);
|
|
1008
|
-
i0.ɵɵconditionalCreate(1,
|
|
1009
|
-
i0.ɵɵconditionalCreate(2,
|
|
1081
|
+
i0.ɵɵconditionalCreate(1, MessageItemComponent_Conditional_23_Conditional_1_Template, 2, 0, "button", 191);
|
|
1082
|
+
i0.ɵɵconditionalCreate(2, MessageItemComponent_Conditional_23_Conditional_2_Template, 3, 2, "div", 192);
|
|
1010
1083
|
i0.ɵɵelementEnd();
|
|
1011
1084
|
} if (rf & 2) {
|
|
1012
1085
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
@@ -1015,11 +1088,11 @@ function MessageItemComponent_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
|
1015
1088
|
i0.ɵɵadvance();
|
|
1016
1089
|
i0.ɵɵconditional(ctx_r0.isAIMessage && (ctx_r0.messageStatus === "Complete" || ctx_r0.ShowsFooterRegenerate) ? 2 : -1);
|
|
1017
1090
|
} }
|
|
1018
|
-
function
|
|
1019
|
-
i0.ɵɵelementStart(0, "div",
|
|
1091
|
+
function MessageItemComponent_Conditional_25_Conditional_1_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
1092
|
+
i0.ɵɵelementStart(0, "div", 208)(1, "span", 209);
|
|
1020
1093
|
i0.ɵɵtext(2, "Steps:");
|
|
1021
1094
|
i0.ɵɵelementEnd();
|
|
1022
|
-
i0.ɵɵelementStart(3, "span",
|
|
1095
|
+
i0.ɵɵelementStart(3, "span", 210);
|
|
1023
1096
|
i0.ɵɵtext(4);
|
|
1024
1097
|
i0.ɵɵelementEnd()();
|
|
1025
1098
|
} if (rf & 2) {
|
|
@@ -1027,11 +1100,11 @@ function MessageItemComponent_Conditional_24_Conditional_1_Conditional_15_Templa
|
|
|
1027
1100
|
i0.ɵɵadvance(4);
|
|
1028
1101
|
i0.ɵɵtextInterpolate(ctx_r0.agentRunStepCount);
|
|
1029
1102
|
} }
|
|
1030
|
-
function
|
|
1031
|
-
i0.ɵɵelementStart(0, "div",
|
|
1103
|
+
function MessageItemComponent_Conditional_25_Conditional_1_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
1104
|
+
i0.ɵɵelementStart(0, "div", 208)(1, "span", 209);
|
|
1032
1105
|
i0.ɵɵtext(2, "Tokens:");
|
|
1033
1106
|
i0.ɵɵelementEnd();
|
|
1034
|
-
i0.ɵɵelementStart(3, "span",
|
|
1107
|
+
i0.ɵɵelementStart(3, "span", 210);
|
|
1035
1108
|
i0.ɵɵtext(4);
|
|
1036
1109
|
i0.ɵɵelementEnd()();
|
|
1037
1110
|
} if (rf & 2) {
|
|
@@ -1039,11 +1112,11 @@ function MessageItemComponent_Conditional_24_Conditional_1_Conditional_16_Templa
|
|
|
1039
1112
|
i0.ɵɵadvance(4);
|
|
1040
1113
|
i0.ɵɵtextInterpolate(ctx_r0.formatNumber(ctx_r0.agentRunTotalTokens));
|
|
1041
1114
|
} }
|
|
1042
|
-
function
|
|
1043
|
-
i0.ɵɵelementStart(0, "div",
|
|
1115
|
+
function MessageItemComponent_Conditional_25_Conditional_1_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
1116
|
+
i0.ɵɵelementStart(0, "div", 208)(1, "span", 209);
|
|
1044
1117
|
i0.ɵɵtext(2, "Cost:");
|
|
1045
1118
|
i0.ɵɵelementEnd();
|
|
1046
|
-
i0.ɵɵelementStart(3, "span",
|
|
1119
|
+
i0.ɵɵelementStart(3, "span", 210);
|
|
1047
1120
|
i0.ɵɵtext(4);
|
|
1048
1121
|
i0.ɵɵelementEnd()();
|
|
1049
1122
|
} if (rf & 2) {
|
|
@@ -1051,11 +1124,11 @@ function MessageItemComponent_Conditional_24_Conditional_1_Conditional_17_Templa
|
|
|
1051
1124
|
i0.ɵɵadvance(4);
|
|
1052
1125
|
i0.ɵɵtextInterpolate1("\\$", ctx_r0.agentRunTotalCost.toFixed(4));
|
|
1053
1126
|
} }
|
|
1054
|
-
function
|
|
1055
|
-
i0.ɵɵelementStart(0, "div",
|
|
1127
|
+
function MessageItemComponent_Conditional_25_Conditional_1_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
1128
|
+
i0.ɵɵelementStart(0, "div", 208)(1, "span", 209);
|
|
1056
1129
|
i0.ɵɵtext(2, "Status:");
|
|
1057
1130
|
i0.ɵɵelementEnd();
|
|
1058
|
-
i0.ɵɵelementStart(3, "span",
|
|
1131
|
+
i0.ɵɵelementStart(3, "span", 213);
|
|
1059
1132
|
i0.ɵɵtext(4);
|
|
1060
1133
|
i0.ɵɵelementEnd()();
|
|
1061
1134
|
} if (rf & 2) {
|
|
@@ -1065,28 +1138,28 @@ function MessageItemComponent_Conditional_24_Conditional_1_Conditional_18_Templa
|
|
|
1065
1138
|
i0.ɵɵadvance();
|
|
1066
1139
|
i0.ɵɵtextInterpolate1(" ", ctx_r0.agentRun.Status, " ");
|
|
1067
1140
|
} }
|
|
1068
|
-
function
|
|
1069
|
-
const
|
|
1070
|
-
i0.ɵɵelementStart(0, "div",
|
|
1071
|
-
i0.ɵɵelement(2, "i",
|
|
1072
|
-
i0.ɵɵelementStart(3, "span")(4, "a",
|
|
1073
|
-
i0.ɵɵlistener("click", function
|
|
1141
|
+
function MessageItemComponent_Conditional_25_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
1142
|
+
const _r44 = i0.ɵɵgetCurrentView();
|
|
1143
|
+
i0.ɵɵelementStart(0, "div", 201)(1, "div", 204);
|
|
1144
|
+
i0.ɵɵelement(2, "i", 205);
|
|
1145
|
+
i0.ɵɵelementStart(3, "span")(4, "a", 206);
|
|
1146
|
+
i0.ɵɵlistener("click", function MessageItemComponent_Conditional_25_Conditional_1_Template_a_click_4_listener() { i0.ɵɵrestoreView(_r44); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.openAgentRecord()); });
|
|
1074
1147
|
i0.ɵɵtext(5);
|
|
1075
1148
|
i0.ɵɵelementEnd();
|
|
1076
1149
|
i0.ɵɵtext(6, " Run Details ");
|
|
1077
1150
|
i0.ɵɵelementEnd()();
|
|
1078
|
-
i0.ɵɵelementStart(7, "div",
|
|
1151
|
+
i0.ɵɵelementStart(7, "div", 207)(8, "div", 208)(9, "span", 209);
|
|
1079
1152
|
i0.ɵɵtext(10, "Run ID:");
|
|
1080
1153
|
i0.ɵɵelementEnd();
|
|
1081
|
-
i0.ɵɵelementStart(11, "span",
|
|
1082
|
-
i0.ɵɵlistener("click", function
|
|
1154
|
+
i0.ɵɵelementStart(11, "span", 210)(12, "a", 211);
|
|
1155
|
+
i0.ɵɵlistener("click", function MessageItemComponent_Conditional_25_Conditional_1_Template_a_click_12_listener() { i0.ɵɵrestoreView(_r44); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.openAgentRunRecord()); });
|
|
1083
1156
|
i0.ɵɵtext(13);
|
|
1084
|
-
i0.ɵɵelement(14, "i",
|
|
1157
|
+
i0.ɵɵelement(14, "i", 212);
|
|
1085
1158
|
i0.ɵɵelementEnd()()();
|
|
1086
|
-
i0.ɵɵconditionalCreate(15,
|
|
1087
|
-
i0.ɵɵconditionalCreate(16,
|
|
1088
|
-
i0.ɵɵconditionalCreate(17,
|
|
1089
|
-
i0.ɵɵconditionalCreate(18,
|
|
1159
|
+
i0.ɵɵconditionalCreate(15, MessageItemComponent_Conditional_25_Conditional_1_Conditional_15_Template, 5, 1, "div", 208);
|
|
1160
|
+
i0.ɵɵconditionalCreate(16, MessageItemComponent_Conditional_25_Conditional_1_Conditional_16_Template, 5, 1, "div", 208);
|
|
1161
|
+
i0.ɵɵconditionalCreate(17, MessageItemComponent_Conditional_25_Conditional_1_Conditional_17_Template, 5, 1, "div", 208);
|
|
1162
|
+
i0.ɵɵconditionalCreate(18, MessageItemComponent_Conditional_25_Conditional_1_Conditional_18_Template, 5, 3, "div", 208);
|
|
1090
1163
|
i0.ɵɵelementEnd()();
|
|
1091
1164
|
} if (rf & 2) {
|
|
1092
1165
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
@@ -1103,34 +1176,34 @@ function MessageItemComponent_Conditional_24_Conditional_1_Template(rf, ctx) { i
|
|
|
1103
1176
|
i0.ɵɵadvance();
|
|
1104
1177
|
i0.ɵɵconditional(ctx_r0.agentRun.Status ? 18 : -1);
|
|
1105
1178
|
} }
|
|
1106
|
-
function
|
|
1107
|
-
const
|
|
1108
|
-
i0.ɵɵelementStart(0, "button",
|
|
1109
|
-
i0.ɵɵlistener("click", function
|
|
1110
|
-
i0.ɵɵelement(1, "i",
|
|
1179
|
+
function MessageItemComponent_Conditional_25_Conditional_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
1180
|
+
const _r45 = i0.ɵɵgetCurrentView();
|
|
1181
|
+
i0.ɵɵelementStart(0, "button", 215);
|
|
1182
|
+
i0.ɵɵlistener("click", function MessageItemComponent_Conditional_25_Conditional_2_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r45); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.onDeleteClick()); });
|
|
1183
|
+
i0.ɵɵelement(1, "i", 194);
|
|
1111
1184
|
i0.ɵɵelementEnd();
|
|
1112
1185
|
} }
|
|
1113
|
-
function
|
|
1114
|
-
i0.ɵɵelement(0, "mj-conversation-message-rating",
|
|
1186
|
+
function MessageItemComponent_Conditional_25_Conditional_2_Conditional_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
1187
|
+
i0.ɵɵelement(0, "mj-conversation-message-rating", 216);
|
|
1115
1188
|
} if (rf & 2) {
|
|
1116
1189
|
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
1117
1190
|
i0.ɵɵproperty("conversationDetailId", ctx_r0.message.ID)("currentUser", ctx_r0.currentUser)("ratingsData", ctx_r0.ratings)("canEdit", ctx_r0.isConversationOwner && !ctx_r0.ReadOnly);
|
|
1118
1191
|
} }
|
|
1119
|
-
function
|
|
1120
|
-
const
|
|
1121
|
-
i0.ɵɵelementStart(0, "button",
|
|
1122
|
-
i0.ɵɵlistener("click", function
|
|
1123
|
-
i0.ɵɵelement(1, "i",
|
|
1192
|
+
function MessageItemComponent_Conditional_25_Conditional_2_Conditional_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1193
|
+
const _r46 = i0.ɵɵgetCurrentView();
|
|
1194
|
+
i0.ɵɵelementStart(0, "button", 199);
|
|
1195
|
+
i0.ɵɵlistener("click", function MessageItemComponent_Conditional_25_Conditional_2_Conditional_2_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r46); const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.PinMessage()); });
|
|
1196
|
+
i0.ɵɵelement(1, "i", 200);
|
|
1124
1197
|
i0.ɵɵelementEnd();
|
|
1125
1198
|
} if (rf & 2) {
|
|
1126
1199
|
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
1127
1200
|
i0.ɵɵclassProp("pinned", ctx_r0.message.IsPinned);
|
|
1128
1201
|
i0.ɵɵproperty("title", ctx_r0.message.IsPinned ? "Unpin message" : "Pin message");
|
|
1129
1202
|
} }
|
|
1130
|
-
function
|
|
1131
|
-
i0.ɵɵelementStart(0, "div",
|
|
1132
|
-
i0.ɵɵconditionalCreate(1,
|
|
1133
|
-
i0.ɵɵconditionalCreate(2,
|
|
1203
|
+
function MessageItemComponent_Conditional_25_Conditional_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1204
|
+
i0.ɵɵelementStart(0, "div", 192);
|
|
1205
|
+
i0.ɵɵconditionalCreate(1, MessageItemComponent_Conditional_25_Conditional_2_Conditional_2_Conditional_1_Template, 1, 4, "mj-conversation-message-rating", 216);
|
|
1206
|
+
i0.ɵɵconditionalCreate(2, MessageItemComponent_Conditional_25_Conditional_2_Conditional_2_Conditional_2_Template, 2, 3, "button", 198);
|
|
1134
1207
|
i0.ɵɵelementEnd();
|
|
1135
1208
|
} if (rf & 2) {
|
|
1136
1209
|
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
@@ -1139,21 +1212,21 @@ function MessageItemComponent_Conditional_24_Conditional_2_Conditional_2_Templat
|
|
|
1139
1212
|
i0.ɵɵadvance();
|
|
1140
1213
|
i0.ɵɵconditional(ctx_r0.allowPinning ? 2 : -1);
|
|
1141
1214
|
} }
|
|
1142
|
-
function
|
|
1143
|
-
const
|
|
1144
|
-
i0.ɵɵelementStart(0, "button",
|
|
1145
|
-
i0.ɵɵlistener("click", function
|
|
1146
|
-
i0.ɵɵelement(1, "i",
|
|
1215
|
+
function MessageItemComponent_Conditional_25_Conditional_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1216
|
+
const _r47 = i0.ɵɵgetCurrentView();
|
|
1217
|
+
i0.ɵɵelementStart(0, "button", 199);
|
|
1218
|
+
i0.ɵɵlistener("click", function MessageItemComponent_Conditional_25_Conditional_2_Conditional_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r47); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.PinMessage()); });
|
|
1219
|
+
i0.ɵɵelement(1, "i", 200);
|
|
1147
1220
|
i0.ɵɵelementEnd();
|
|
1148
1221
|
} if (rf & 2) {
|
|
1149
1222
|
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
1150
1223
|
i0.ɵɵclassProp("pinned", ctx_r0.message.IsPinned);
|
|
1151
1224
|
i0.ɵɵproperty("title", ctx_r0.message.IsPinned ? "Unpin message" : "Pin message");
|
|
1152
1225
|
} }
|
|
1153
|
-
function
|
|
1154
|
-
i0.ɵɵelementStart(0, "div",
|
|
1155
|
-
i0.ɵɵconditionalCreate(1,
|
|
1156
|
-
i0.ɵɵconditionalCreate(2,
|
|
1226
|
+
function MessageItemComponent_Conditional_25_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1227
|
+
i0.ɵɵelementStart(0, "div", 202);
|
|
1228
|
+
i0.ɵɵconditionalCreate(1, MessageItemComponent_Conditional_25_Conditional_2_Conditional_1_Template, 2, 0, "button", 214);
|
|
1229
|
+
i0.ɵɵconditionalCreate(2, MessageItemComponent_Conditional_25_Conditional_2_Conditional_2_Template, 3, 2, "div", 192)(3, MessageItemComponent_Conditional_25_Conditional_2_Conditional_3_Template, 2, 3, "button", 198);
|
|
1157
1230
|
i0.ɵɵelementEnd();
|
|
1158
1231
|
} if (rf & 2) {
|
|
1159
1232
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
@@ -1162,20 +1235,20 @@ function MessageItemComponent_Conditional_24_Conditional_2_Template(rf, ctx) { i
|
|
|
1162
1235
|
i0.ɵɵadvance();
|
|
1163
1236
|
i0.ɵɵconditional(ctx_r0.messageStatus === "Complete" ? 2 : ctx_r0.allowPinning ? 3 : -1);
|
|
1164
1237
|
} }
|
|
1165
|
-
function
|
|
1166
|
-
i0.ɵɵelement(0, "mj-task-widget",
|
|
1238
|
+
function MessageItemComponent_Conditional_25_Conditional_3_For_7_Template(rf, ctx) { if (rf & 1) {
|
|
1239
|
+
i0.ɵɵelement(0, "mj-task-widget", 220);
|
|
1167
1240
|
} if (rf & 2) {
|
|
1168
|
-
const
|
|
1169
|
-
i0.ɵɵproperty("task",
|
|
1241
|
+
const task_r48 = ctx.$implicit;
|
|
1242
|
+
i0.ɵɵproperty("task", task_r48)("compact", false)("clickable", false)("showProgress", true)("showDuration", true);
|
|
1170
1243
|
} }
|
|
1171
|
-
function
|
|
1172
|
-
i0.ɵɵelementStart(0, "div",
|
|
1173
|
-
i0.ɵɵelement(2, "i",
|
|
1244
|
+
function MessageItemComponent_Conditional_25_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1245
|
+
i0.ɵɵelementStart(0, "div", 203)(1, "div", 217);
|
|
1246
|
+
i0.ɵɵelement(2, "i", 218);
|
|
1174
1247
|
i0.ɵɵelementStart(3, "span");
|
|
1175
1248
|
i0.ɵɵtext(4);
|
|
1176
1249
|
i0.ɵɵelementEnd()();
|
|
1177
|
-
i0.ɵɵelementStart(5, "div",
|
|
1178
|
-
i0.ɵɵrepeaterCreate(6,
|
|
1250
|
+
i0.ɵɵelementStart(5, "div", 219);
|
|
1251
|
+
i0.ɵɵrepeaterCreate(6, MessageItemComponent_Conditional_25_Conditional_3_For_7_Template, 1, 5, "mj-task-widget", 220, _forTrack2);
|
|
1179
1252
|
i0.ɵɵelementEnd()();
|
|
1180
1253
|
} if (rf & 2) {
|
|
1181
1254
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
@@ -1184,11 +1257,11 @@ function MessageItemComponent_Conditional_24_Conditional_3_Template(rf, ctx) { i
|
|
|
1184
1257
|
i0.ɵɵadvance(2);
|
|
1185
1258
|
i0.ɵɵrepeater(ctx_r0.WorkflowSteps);
|
|
1186
1259
|
} }
|
|
1187
|
-
function
|
|
1260
|
+
function MessageItemComponent_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
1188
1261
|
i0.ɵɵelementStart(0, "div", 18);
|
|
1189
|
-
i0.ɵɵconditionalCreate(1,
|
|
1190
|
-
i0.ɵɵconditionalCreate(2,
|
|
1191
|
-
i0.ɵɵconditionalCreate(3,
|
|
1262
|
+
i0.ɵɵconditionalCreate(1, MessageItemComponent_Conditional_25_Conditional_1_Template, 19, 6, "div", 201);
|
|
1263
|
+
i0.ɵɵconditionalCreate(2, MessageItemComponent_Conditional_25_Conditional_2_Template, 4, 2, "div", 202);
|
|
1264
|
+
i0.ɵɵconditionalCreate(3, MessageItemComponent_Conditional_25_Conditional_3_Template, 8, 1, "div", 203);
|
|
1192
1265
|
i0.ɵɵelementEnd();
|
|
1193
1266
|
} if (rf & 2) {
|
|
1194
1267
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
@@ -1199,28 +1272,28 @@ function MessageItemComponent_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
|
1199
1272
|
i0.ɵɵadvance();
|
|
1200
1273
|
i0.ɵɵconditional(ctx_r0.WorkflowSteps.length > 0 ? 3 : -1);
|
|
1201
1274
|
} }
|
|
1202
|
-
function
|
|
1203
|
-
const
|
|
1204
|
-
i0.ɵɵelementStart(0, "div", 19)(1, "button",
|
|
1205
|
-
i0.ɵɵlistener("click", function
|
|
1206
|
-
i0.ɵɵelement(2, "i",
|
|
1207
|
-
i0.ɵɵelementStart(3, "span",
|
|
1275
|
+
function MessageItemComponent_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
1276
|
+
const _r49 = i0.ɵɵgetCurrentView();
|
|
1277
|
+
i0.ɵɵelementStart(0, "div", 19)(1, "button", 221);
|
|
1278
|
+
i0.ɵɵlistener("click", function MessageItemComponent_Conditional_26_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r49); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.toggleReaction("like")); });
|
|
1279
|
+
i0.ɵɵelement(2, "i", 222);
|
|
1280
|
+
i0.ɵɵelementStart(3, "span", 223);
|
|
1208
1281
|
i0.ɵɵtext(4, "0");
|
|
1209
1282
|
i0.ɵɵelementEnd()();
|
|
1210
|
-
i0.ɵɵelementStart(5, "button",
|
|
1211
|
-
i0.ɵɵlistener("click", function
|
|
1212
|
-
i0.ɵɵelement(6, "i",
|
|
1213
|
-
i0.ɵɵelementStart(7, "span",
|
|
1283
|
+
i0.ɵɵelementStart(5, "button", 221);
|
|
1284
|
+
i0.ɵɵlistener("click", function MessageItemComponent_Conditional_26_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r49); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.toggleReaction("comment")); });
|
|
1285
|
+
i0.ɵɵelement(6, "i", 224);
|
|
1286
|
+
i0.ɵɵelementStart(7, "span", 223);
|
|
1214
1287
|
i0.ɵɵtext(8, "0");
|
|
1215
1288
|
i0.ɵɵelementEnd()()();
|
|
1216
1289
|
} }
|
|
1217
|
-
function
|
|
1290
|
+
function MessageItemComponent_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
1218
1291
|
i0.ɵɵelementStart(0, "div", 20);
|
|
1219
|
-
i0.ɵɵelement(1, "i",
|
|
1220
|
-
i0.ɵɵelementStart(2, "span",
|
|
1292
|
+
i0.ɵɵelement(1, "i", 45);
|
|
1293
|
+
i0.ɵɵelementStart(2, "span", 225);
|
|
1221
1294
|
i0.ɵɵtext(3);
|
|
1222
1295
|
i0.ɵɵelementEnd();
|
|
1223
|
-
i0.ɵɵelement(4, "span",
|
|
1296
|
+
i0.ɵɵelement(4, "span", 226);
|
|
1224
1297
|
i0.ɵɵelementEnd();
|
|
1225
1298
|
} if (rf & 2) {
|
|
1226
1299
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
@@ -1312,6 +1385,39 @@ export class MessageItemComponent extends BaseAngularComponent {
|
|
|
1312
1385
|
PendingReplace = false;
|
|
1313
1386
|
/** Emits true when this row's inline editor opens and false when it closes. */
|
|
1314
1387
|
EditingChanged = new EventEmitter();
|
|
1388
|
+
/** Outgoing agent handoff card metadata attached to this source AI message. */
|
|
1389
|
+
Handoff = null;
|
|
1390
|
+
/** Incoming agent handoff provenance attached to this target AI message. */
|
|
1391
|
+
HandedOffFrom = null;
|
|
1392
|
+
/** CSS custom property reference for the target agent's accent color on a handed-off target message. */
|
|
1393
|
+
get TargetAccentVar() {
|
|
1394
|
+
if (!this.HandedOffFrom) {
|
|
1395
|
+
return 'var(--mj-brand-primary)';
|
|
1396
|
+
}
|
|
1397
|
+
return AgentAccentVar(this.message?.AgentID ?? this.HandedOffFrom.TargetAgent.ID);
|
|
1398
|
+
}
|
|
1399
|
+
/** CSS custom property reference for the source agent's accent color on a handed-off target message. */
|
|
1400
|
+
get HandedOffFromAccentVar() {
|
|
1401
|
+
if (!this.HandedOffFrom) {
|
|
1402
|
+
return 'var(--mj-brand-primary)';
|
|
1403
|
+
}
|
|
1404
|
+
return AgentAccentVar(this.HandedOffFrom.SourceAgent.ID);
|
|
1405
|
+
}
|
|
1406
|
+
/**
|
|
1407
|
+
* True when this message is a handed-off target AI message that has not yet produced
|
|
1408
|
+
* its first streamed token (still in its initial placeholder state).
|
|
1409
|
+
*/
|
|
1410
|
+
get IsHandedOffTargetJoining() {
|
|
1411
|
+
if (!this.HandedOffFrom || !this.IsInProgressAIMessage) {
|
|
1412
|
+
return false;
|
|
1413
|
+
}
|
|
1414
|
+
const raw = (this.message?.Message ?? '').trim();
|
|
1415
|
+
return raw.length === 0 || raw === '⏳ Starting...';
|
|
1416
|
+
}
|
|
1417
|
+
/** True when this source message handed off to a target agent (and did not fail). */
|
|
1418
|
+
get IsSourceTransferred() {
|
|
1419
|
+
return Boolean(this.Handoff) && this.Handoff?.Status !== 'Failed';
|
|
1420
|
+
}
|
|
1315
1421
|
/**
|
|
1316
1422
|
* How a saved edit is applied: 'Fork' while the person may fork; with forking off, 'Resend' on the
|
|
1317
1423
|
* latest user message and 'Save' on an earlier one; null on an inherited row of a fork view (the row
|
|
@@ -1922,6 +2028,7 @@ export class MessageItemComponent extends BaseAngularComponent {
|
|
|
1922
2028
|
_cachedDisplayMessage = '';
|
|
1923
2029
|
/** The raw Message the cached display text was computed from. */
|
|
1924
2030
|
_cachedRawText = '';
|
|
2031
|
+
_cachedHadHandoff = false;
|
|
1925
2032
|
// Shared AI mention/suggestion engine (BaseSingleton — same instance the composer plugins use)
|
|
1926
2033
|
mentionAutocomplete = MentionAutocompleteService.Instance;
|
|
1927
2034
|
constructor(cdRef, mentionParser, uiCommandHandler, agentService, markdownService) {
|
|
@@ -2310,8 +2417,15 @@ export class MessageItemComponent extends BaseAngularComponent {
|
|
|
2310
2417
|
(seconds < 10 ? '0' : '') + seconds;
|
|
2311
2418
|
return formattedTime;
|
|
2312
2419
|
}
|
|
2420
|
+
/**
|
|
2421
|
+
* Time since the message was created: its server creation time once it has one, else when it was first shown. An
|
|
2422
|
+
* agent's reply first renders as a local placeholder, before the server acknowledges the run; it takes the reply
|
|
2423
|
+
* row's creation time when the acknowledgement arrives, so the timer counts from when the server's row began.
|
|
2424
|
+
*/
|
|
2313
2425
|
get ElapsedTimeSinceLoad() {
|
|
2314
|
-
|
|
2426
|
+
const createdAt = this.message?.__mj_CreatedAt;
|
|
2427
|
+
// Never negative: the server's clock can run ahead of this browser's.
|
|
2428
|
+
return Math.max(0, Date.now() - (createdAt ? new Date(createdAt).getTime() : this._loadTime));
|
|
2315
2429
|
}
|
|
2316
2430
|
/** @deprecated Use {@link ElapsedTimeSinceLoad}. */
|
|
2317
2431
|
get elapsedTimeSinceLoad() {
|
|
@@ -2460,15 +2574,16 @@ export class MessageItemComponent extends BaseAngularComponent {
|
|
|
2460
2574
|
* ngDoCheck to snapshot the value; templates read _stableDisplayMessage.
|
|
2461
2575
|
*/
|
|
2462
2576
|
computeDisplayMessage() {
|
|
2463
|
-
const raw = this.
|
|
2577
|
+
const raw = this.displaySourceText();
|
|
2578
|
+
const hadHandoff = Boolean(this.Handoff);
|
|
2464
2579
|
// ngDoCheck calls this every pass; an unchanged Message is the same string object, so this
|
|
2465
2580
|
// compare is a pointer check and nothing below runs until the text changes.
|
|
2466
|
-
if (raw === this._cachedRawText && this._cachedDisplayMessage) {
|
|
2581
|
+
if (raw === this._cachedRawText && hadHandoff === this._cachedHadHandoff && this._cachedDisplayMessage) {
|
|
2467
2582
|
return this._cachedDisplayMessage;
|
|
2468
2583
|
}
|
|
2469
2584
|
let text = raw;
|
|
2470
|
-
// For Sage, only show the delegation line (starts with emoji)
|
|
2471
|
-
if (this.IsConversationManager && text) {
|
|
2585
|
+
// For legacy Sage delegation (when no Handoff card is rendered), only show the delegation line (starts with emoji)
|
|
2586
|
+
if (this.IsConversationManager && text && !this.Handoff) {
|
|
2472
2587
|
const delegationMatch = text.match(/🤖.*Delegating to.*Agent.*/);
|
|
2473
2588
|
if (delegationMatch) {
|
|
2474
2589
|
text = delegationMatch[0];
|
|
@@ -2477,9 +2592,21 @@ export class MessageItemComponent extends BaseAngularComponent {
|
|
|
2477
2592
|
// Transform @mentions to HTML pills
|
|
2478
2593
|
const transformed = this.transformMentionsToHTML(text);
|
|
2479
2594
|
this._cachedRawText = raw;
|
|
2595
|
+
this._cachedHadHandoff = hadHandoff;
|
|
2480
2596
|
this._cachedDisplayMessage = transformed;
|
|
2481
2597
|
return transformed;
|
|
2482
2598
|
}
|
|
2599
|
+
/**
|
|
2600
|
+
* The text the bubble renders from: the stored message, with a failed agent reply formatted as the chat has always
|
|
2601
|
+
* shown one (see {@link FormatAgentFailureForDisplay}). Display only: the entity's text is never changed.
|
|
2602
|
+
*/
|
|
2603
|
+
displaySourceText() {
|
|
2604
|
+
const raw = this.message.Message || '';
|
|
2605
|
+
if (this.IsAIMessage && this.message.Status === 'Error') {
|
|
2606
|
+
return FormatAgentFailureForDisplay(raw, this.AiAgentInfo?.name ?? 'Agent');
|
|
2607
|
+
}
|
|
2608
|
+
return raw;
|
|
2609
|
+
}
|
|
2483
2610
|
/**
|
|
2484
2611
|
* Transform @mentions in text to HTML badge elements
|
|
2485
2612
|
* Supports both JSON format (@{type:"agent",id:"uuid",...}) and legacy text format (@AgentName)
|
|
@@ -2589,7 +2716,7 @@ export class MessageItemComponent extends BaseAngularComponent {
|
|
|
2589
2716
|
: '';
|
|
2590
2717
|
// Generate HTML based on whether we have an icon
|
|
2591
2718
|
if (logoURL) {
|
|
2592
|
-
return `<span class="mention-badge ${typeClass}"${inlineStyle}${recordAttrs}><img src="${this.escapeHtml(logoURL)}" alt="" />${escapedName}${presetIndicator}</span>`;
|
|
2719
|
+
return `<span class="mention-badge ${typeClass}"${inlineStyle}${recordAttrs}><img src="${this.escapeHtml(logoURL)}" alt="" role="presentation" />${escapedName}${presetIndicator}</span>`;
|
|
2593
2720
|
}
|
|
2594
2721
|
else if (iconClass) {
|
|
2595
2722
|
return `<span class="mention-badge ${typeClass}"${inlineStyle}${recordAttrs}><i class="${this.escapeHtml(iconClass)}" aria-hidden="true"></i>${escapedName}${presetIndicator}</span>`;
|
|
@@ -3167,6 +3294,15 @@ export class MessageItemComponent extends BaseAngularComponent {
|
|
|
3167
3294
|
else if (this.ForkRail === 'Own') {
|
|
3168
3295
|
classes.push('fork-rail-own');
|
|
3169
3296
|
}
|
|
3297
|
+
if (this.Handoff) {
|
|
3298
|
+
classes.push('handoff-source');
|
|
3299
|
+
if (this.Handoff.Status !== 'Failed') {
|
|
3300
|
+
classes.push('msg--handed', 'handoff-source-transferred');
|
|
3301
|
+
}
|
|
3302
|
+
}
|
|
3303
|
+
if (this.HandedOffFrom) {
|
|
3304
|
+
classes.push('target-block', 'handoff-target');
|
|
3305
|
+
}
|
|
3170
3306
|
return classes.join(' ');
|
|
3171
3307
|
}
|
|
3172
3308
|
get IsMessageEdited() {
|
|
@@ -3291,7 +3427,7 @@ export class MessageItemComponent extends BaseAngularComponent {
|
|
|
3291
3427
|
const previousValue = this.message.IsPinned;
|
|
3292
3428
|
this.message.IsPinned = !previousValue;
|
|
3293
3429
|
this.cdRef.detectChanges();
|
|
3294
|
-
const saved = await this.message.
|
|
3430
|
+
const saved = await SavePinState(this.ProviderToUse, this.message.ID, !previousValue);
|
|
3295
3431
|
if (!saved) {
|
|
3296
3432
|
// Revert on failure
|
|
3297
3433
|
this.message.IsPinned = previousValue;
|
|
@@ -3457,6 +3593,20 @@ export class MessageItemComponent extends BaseAngularComponent {
|
|
|
3457
3593
|
onAttachmentClick(attachment) {
|
|
3458
3594
|
return this.OnAttachmentClick(attachment);
|
|
3459
3595
|
}
|
|
3596
|
+
/**
|
|
3597
|
+
* An image in the message text was clicked: open it in the chat's image viewer, the way an
|
|
3598
|
+
* attachment thumbnail opens there.
|
|
3599
|
+
*/
|
|
3600
|
+
OnMarkdownImageClicked(image) {
|
|
3601
|
+
this.AttachmentClicked.emit({
|
|
3602
|
+
id: image.Src,
|
|
3603
|
+
type: 'Image',
|
|
3604
|
+
mimeType: '',
|
|
3605
|
+
fileName: image.Alt || null,
|
|
3606
|
+
sizeBytes: 0,
|
|
3607
|
+
contentUrl: image.Src,
|
|
3608
|
+
});
|
|
3609
|
+
}
|
|
3460
3610
|
/**
|
|
3461
3611
|
* Check if message has any attachments
|
|
3462
3612
|
*/
|
|
@@ -4392,7 +4542,7 @@ export class MessageItemComponent extends BaseAngularComponent {
|
|
|
4392
4542
|
return option?.label;
|
|
4393
4543
|
}
|
|
4394
4544
|
static ɵfac = function MessageItemComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || MessageItemComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.MentionParserService), i0.ɵɵdirectiveInject(i2.UICommandHandlerService), i0.ɵɵdirectiveInject(i3.ConversationAgentService), i0.ɵɵdirectiveInject(i4.MarkdownService)); };
|
|
4395
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MessageItemComponent, selectors: [["mj-conversation-message-item"]], inputs: { message: "message", Conversation: "Conversation", conversation: "conversation", CurrentUser: "CurrentUser", currentUser: "currentUser", AllMessages: "AllMessages", allMessages: "allMessages", ForkChips: "ForkChips", ForkRail: "ForkRail", ForkMarkerText: "ForkMarkerText", CanFork: "CanFork", InPlaceRole: "InPlaceRole", IsLatestTurn: "IsLatestTurn", EditOpenElsewhere: "EditOpenElsewhere", PendingReplace: "PendingReplace", IsProcessing: "IsProcessing", IsStreaming: "IsStreaming", isProcessing: "isProcessing", Artifact: "Artifact", artifact: "artifact", artifactVersion: "artifactVersion", Artifacts: "Artifacts", artifacts: "artifacts", AgentRun: "AgentRun", agentRun: "agentRun", UserAvatarMap: "UserAvatarMap", userAvatarMap: "userAvatarMap", Ratings: "Ratings", ratings: "ratings", IsLastMessage: "IsLastMessage", isLastMessage: "isLastMessage", Attachments: "Attachments", attachments: "attachments", PendingArtifacts: "PendingArtifacts", pendingArtifacts: "pendingArtifacts", MessageExtraTemplate: "MessageExtraTemplate", messageExtraTemplate: "messageExtraTemplate", ShowAgentRunDetails: "ShowAgentRunDetails", showAgentRunDetails: "showAgentRunDetails", ShowReactions: "ShowReactions", showReactions: "showReactions", ShowMessageRating: "ShowMessageRating", showMessageRating: "showMessageRating", AllowPinning: "AllowPinning", allowPinning: "allowPinning", AllowMessageEdit: "AllowMessageEdit", allowMessageEdit: "allowMessageEdit", AllowMessageDelete: "AllowMessageDelete", allowMessageDelete: "allowMessageDelete", ReadOnly: "ReadOnly", AllowStopRun: "AllowStopRun", InFlightCount: "InFlightCount", AssistantDisplayName: "AssistantDisplayName", assistantDisplayName: "assistantDisplayName", AssistantAvatarUrl: "AssistantAvatarUrl", assistantAvatarUrl: "assistantAvatarUrl" }, outputs: { ForkOpenRequested: "ForkOpenRequested", ResendInPlaceRequested: "ResendInPlaceRequested", EditingChanged: "EditingChanged", EditClicked: "EditClicked", editClicked: "editClicked", DeleteClicked: "DeleteClicked", deleteClicked: "deleteClicked", RegenerateRequested: "RegenerateRequested", RetryClicked: "RetryClicked", retryClicked: "retryClicked", TestFeedbackClicked: "TestFeedbackClicked", testFeedbackClicked: "testFeedbackClicked", ArtifactClicked: "ArtifactClicked", artifactClicked: "artifactClicked", ArtifactActionPerformed: "ArtifactActionPerformed", artifactActionPerformed: "artifactActionPerformed", MessageEdited: "MessageEdited", messageEdited: "messageEdited", OpenEntityRecord: "OpenEntityRecord", openEntityRecord: "openEntityRecord", SuggestedResponseSelected: "SuggestedResponseSelected", suggestedResponseSelected: "suggestedResponseSelected", AttachmentClicked: "AttachmentClicked", attachmentClicked: "attachmentClicked", DiagnosticRequested: "DiagnosticRequested", diagnosticRequested: "diagnosticRequested", MessagePinToggled: "MessagePinToggled", messagePinToggled: "messagePinToggled", LivenessCheckRequested: "LivenessCheckRequested", BeforeResponseFormSubmitted: "BeforeResponseFormSubmitted", beforeResponseFormSubmitted: "beforeResponseFormSubmitted", AfterResponseFormSubmitted: "AfterResponseFormSubmitted", afterResponseFormSubmitted: "afterResponseFormSubmitted", EditResendRequested: "EditResendRequested", ForkRequested: "ForkRequested", BeforeStopClicked: "BeforeStopClicked", StopRequested: "StopRequested", TaskGraphPanelRequested: "TaskGraphPanelRequested", taskGraphPanelRequested: "taskGraphPanelRequested", ScrollToMessageRequested: "ScrollToMessageRequested", scrollToMessageRequested: "scrollToMessageRequested" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 27, vars: 29, consts: [[3, "click"], [1, "message-avatar"], [1, "avatar-circle"], [1, "message-content"], [1, "message-header"], [1, "message-sender", 3, "title"], [1, "message-time"], [1, "message-status", 3, "error"], [1, "time-pill", 3, "in-progress", "active", "complete", "stopped", "failed", "checking", "stalled", "title"], ["type", "button", 1, "stop-run-pill", 3, "disabled", "title"], ["title", "Provide Test Feedback", 1, "test-feedback-icon"], ["role", "group", "aria-label", "Message actions", 1, "message-action-group", 3, "labeled"], [1, "agent-run-icon", 3, "expanded", "title"], [1, "message-body"], [1, "message-edit-container"], [1, "message-fork-chips"], [1, "message-footer"], [1, "agent-details-section"], [1, "agent-details-panel"], [1, "message-reactions"], ["role", "note", 1, "fork-marker"], ["alt", "User avatar", 1, "avatar-image", 3, "src"], [3, "class"], [1, "fas", "fa-user"], ["alt", "Assistant avatar", 1, "avatar-image", 3, "src"], [1, "fas", 3, "ngClass"], ["alt", "Assistant avatar", 1, "avatar-image", 3, "error", "src"], [1, "message-status"], [1, "status-text"], [1, "time-pill", 3, "title"], [1, "liveness-label"], ["type", "button", 1, "stop-run-pill", 3, "click", "disabled", "title"], ["title", "Provide Test Feedback", 1, "test-feedback-icon", 3, "click"], [1, "fas", "fa-flask"], ["role", "group", "aria-label", "Message actions", 1, "message-action-group"], ["type", "button", "title", "Edit message", "aria-label", "Edit message", 1, "message-header-action", "message-action-edit"], ["type", "button", "title", "Fork from here", "aria-label", "Fork from here", 1, "message-header-action", "message-action-fork"], ["type", "button", 1, "message-header-action", "message-action-regenerate", 3, "title"], ["type", "button", "title", "Edit message", "aria-label", "Edit message", 1, "message-header-action", "message-action-edit", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-pen"], ["type", "button", "title", "Fork from here", "aria-label", "Fork from here", 1, "message-header-action", "message-action-fork", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-code-branch"], [1, "action-label-long"], [1, "action-label-short"], ["type", "button", 1, "message-header-action", "message-action-regenerate", 3, "click", "title"], ["aria-hidden", "true", 1, "fa-solid", "fa-rotate-left"], [1, "agent-run-icon", 3, "click", "title"], [1, "fas", "fa-cog"], [1, "rating-badge"], ["type", "button", "title", "Scroll to originating workflow card and step artifacts", 1, "workflow-continuation-banner"], [1, "message-text"], [3, "data", "enableCollapsibleHeadings"], [1, "edited-badge"], [1, "stopped-line"], [1, "stopped-actions"], [1, "message-attachments"], [1, "workflow-execution-card", 3, "class"], [1, "multi-artifact-showcase"], [1, "artifact-wrapper", 3, "system-artifact"], [3, "FormDefinition", "Disabled"], [3, "commands", "disabled", "isLastMessage", "isConversationOwner"], ["type", "button", "title", "Scroll to originating workflow card and step artifacts", 1, "workflow-continuation-banner", 3, "click"], [1, "continuation-banner-left"], ["aria-hidden", "true", 1, "fa-solid", "fa-diagram-project", "continuation-banner-icon"], [1, "continuation-banner-label"], [1, "continuation-banner-sep"], [1, "continuation-banner-name"], [1, "continuation-banner-jump"], ["aria-hidden", "true", 1, "fa-solid", "fa-arrow-up-long"], ["aria-hidden", "true", 1, "fa-solid", "fa-stop"], ["mjButton", "", "Variant", "outline", "Size", "sm", "type", "button", "title", "Continue where you left off", 1, "continue-run", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-play"], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], [1, "attachment-item", "image-attachment", 3, "title"], [1, "attachment-strip", 3, "is-artifact", "title"], [1, "attachment-item", "image-attachment", 3, "click", "title"], ["loading", "lazy", 1, "attachment-thumbnail", 3, "src", "alt"], [1, "attachment-overlay"], [1, "fas", "fa-expand"], [1, "attachment-strip", 3, "click", "title"], [1, "attachment-badge"], [1, "attachment-meta"], [1, "file-name"], [1, "file-size"], [1, "workflow-execution-card"], [1, "workflow-card-header", 3, "click"], [1, "workflow-header-left"], [1, "workflow-status-icon"], [1, "fa-solid", "fa-circle-notch", "fa-spin"], [1, "fa-solid", "fa-circle-check"], [1, "fa-solid", "fa-circle-exclamation"], [1, "fa-solid", "fa-ban"], [1, "workflow-title-group"], [1, "workflow-title-row"], [1, "workflow-title"], [1, "workflow-badge"], [1, "workflow-subtitle"], [1, "workflow-dot"], [1, "workflow-header-right"], ["type", "button", "title", "View visual task graph in side panel", 1, "workflow-graph-btn"], ["title", "Workflow execution time", 1, "workflow-duration-pill"], [1, "fa-regular", "fa-clock"], ["type", "button", 1, "workflow-collapse-btn", 3, "title"], ["role", "progressbar", "aria-valuemin", "0", "aria-valuemax", "100", 1, "workflow-progress-track"], [1, "workflow-progress-fill"], [1, "workflow-steps-pipeline"], [1, "workflow-skipped-count"], ["type", "button", "title", "View visual task graph in side panel", 1, "workflow-graph-btn", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-diagram-project"], ["type", "button", 1, "workflow-collapse-btn", 3, "click", "title"], [1, "workflow-collapse-label"], ["aria-hidden", "true", 1, "fa-solid", "fa-chevron-down", "workflow-collapse-chevron"], [1, "workflow-step-item", 3, "class", "is-expanded"], [1, "workflow-step-item"], [1, "workflow-step-rail"], [1, "workflow-step-node"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-check"], [1, "fa-solid", "fa-xmark"], ["title", "Skipped (conditional prerequisite not met)", 1, "fa-solid", "fa-forward-step"], [1, "step-index-num"], [1, "workflow-step-connector", 3, "is-complete"], [1, "workflow-step-content", 3, "click"], [1, "workflow-step-main-row"], [1, "workflow-step-identity"], [1, "workflow-step-name"], [1, "workflow-step-agent-chip"], [1, "workflow-step-meta"], [1, "workflow-step-duration", 3, "is-skipped"], ["type", "button", "title", "Open AI Agent Run record", 1, "workflow-step-run-btn"], [1, "fa-solid", "fa-chevron-down", "workflow-step-chevron", 3, "rotated"], [1, "workflow-step-details"], [1, "workflow-step-connector"], [1, "fa-solid", "fa-robot"], [1, "workflow-step-duration"], ["type", "button", "title", "Open AI Agent Run record", 1, "workflow-step-run-btn", 3, "click"], [1, "fa-solid", "fa-arrow-up-right-from-square"], [1, "fa-solid", "fa-chevron-down", "workflow-step-chevron"], [1, "artifact-wrapper"], [3, "actionPerformed", "artifactId", "artifact", "artifactVersion", "currentUser"], [1, "multi-artifact-supporting-section"], ["type", "button", 1, "supporting-artifacts-header", 3, "click"], [1, "supporting-header-left"], ["aria-hidden", "true", 1, "fa-solid", "fa-layer-group", "supporting-header-icon"], [1, "supporting-header-title"], [1, "supporting-header-count"], [1, "supporting-collapsed-preview"], [1, "supporting-header-right"], [1, "supporting-toggle-hint"], ["aria-hidden", "true", 1, "fa-solid", "fa-chevron-down", "supporting-chevron"], [1, "supporting-artifacts-grid"], [1, "multi-artifact-primary-section"], [1, "supporting-preview-pill"], [1, "artifact-wrapper", "supporting-artifact-cell", 3, "system-artifact"], [1, "artifact-wrapper", "supporting-artifact-cell"], [1, "supporting-step-badge", 3, "title"], [1, "primary-artifact-header"], ["aria-hidden", "true", 1, "fa-solid", "fa-star", "primary-header-icon"], [1, "primary-header-title"], [1, "primary-step-badge"], [1, "artifact-wrapper", "primary-artifact-card"], [1, "artifact-pending"], ["size", "small", 3, "text"], [3, "FormSubmitted", "FormDefinition", "Disabled"], [3, "commandExecuted", "commands", "disabled", "isLastMessage", "isConversationOwner"], ["rows", "4", "placeholder", "Edit your message...", 1, "message-edit-textarea", 3, "ngModelChange", "keydown", "ngModel"], [1, "edit-actions"], ["mjButton", "", "Variant", "primary", "Size", "sm", 3, "click"], ["aria-hidden", "true"], ["mjButton", "", "Variant", "secondary", "Size", "sm", 3, "click"], ["aria-hidden", "true", 1, "fas", "fa-times"], [1, "edit-note"], [1, "edit-hint"], ["mjButton", "", "Variant", "flat", "Size", "sm", "data-kind", "Original", 1, "fork-chip"], ["mjButton", "", "Variant", "flat", "Size", "sm", 1, "fork-chip"], ["mjButton", "", "Variant", "flat", "Size", "sm", "data-kind", "Original", 1, "fork-chip", 3, "click"], [1, "fork-chip-name"], [1, "fork-chip-time"], ["mjButton", "", "Variant", "flat", "Size", "sm", 1, "fork-chip", 3, "click"], ["aria-hidden", "true", 1, "fork-chip-avatars"], [1, "fork-chip-messages"], [1, "fork-chip-avatar", 3, "title"], ["alt", "", 3, "src"], ["title", "Delete this message and all messages below it", 1, "action-bar-btn", "danger", "inline-delete"], [1, "ai-message-actions"], ["title", "Delete this message and all messages below it", 1, "action-bar-btn", "danger", "inline-delete", 3, "click"], [1, "fas", "fa-trash"], ["type", "button", 1, "action-bar-btn", "labeled", "regenerate-btn", 3, "title"], ["type", "button", 1, "action-bar-btn", "labeled", "regenerate-btn", 3, "click", "title"], [3, "conversationDetailId", "currentUser", "ratingEntityName", "ratingsData", "canEdit"], ["type", "button", 1, "action-bar-btn", "pin-btn", 3, "pinned", "title"], ["type", "button", 1, "action-bar-btn", "pin-btn", 3, "click", "title"], [1, "fas", "fa-thumbtack"], [1, "agent-details-content"], [1, "agent-panel-actions"], [1, "agent-details-tasks"], [1, "agent-details-header"], [1, "fas", "fa-chart-line"], ["title", "Open agent details", 1, "agent-name-link", 3, "click"], [1, "agent-details-grid"], [1, "detail-row"], [1, "detail-label"], [1, "detail-value"], ["title", "Open agent run details", 1, "run-id-link", 3, "click"], [1, "fas", "fa-external-link-alt"], [1, "detail-value", "status-badge"], ["title", "Delete this message and all messages below it", 1, "action-bar-btn", "danger"], ["title", "Delete this message and all messages below it", 1, "action-bar-btn", "danger", 3, "click"], [3, "conversationDetailId", "currentUser", "ratingsData", "canEdit"], [1, "tasks-section-header"], [1, "fas", "fa-tasks"], [1, "tasks-list"], [3, "task", "compact", "clickable", "showProgress", "showDuration"], [1, "reaction-btn", 3, "click"], [1, "far", "fa-thumbs-up"], [1, "reaction-count"], [1, "far", "fa-comment"], [1, "fork-marker-text"], ["aria-hidden", "true", 1, "fork-marker-line"]], template: function MessageItemComponent_Template(rf, ctx) { if (rf & 1) {
|
|
4545
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MessageItemComponent, selectors: [["mj-conversation-message-item"]], inputs: { message: "message", Conversation: "Conversation", conversation: "conversation", CurrentUser: "CurrentUser", currentUser: "currentUser", AllMessages: "AllMessages", allMessages: "allMessages", ForkChips: "ForkChips", ForkRail: "ForkRail", ForkMarkerText: "ForkMarkerText", CanFork: "CanFork", InPlaceRole: "InPlaceRole", IsLatestTurn: "IsLatestTurn", EditOpenElsewhere: "EditOpenElsewhere", PendingReplace: "PendingReplace", Handoff: "Handoff", HandedOffFrom: "HandedOffFrom", IsProcessing: "IsProcessing", IsStreaming: "IsStreaming", isProcessing: "isProcessing", Artifact: "Artifact", artifact: "artifact", artifactVersion: "artifactVersion", Artifacts: "Artifacts", artifacts: "artifacts", AgentRun: "AgentRun", agentRun: "agentRun", UserAvatarMap: "UserAvatarMap", userAvatarMap: "userAvatarMap", Ratings: "Ratings", ratings: "ratings", IsLastMessage: "IsLastMessage", isLastMessage: "isLastMessage", Attachments: "Attachments", attachments: "attachments", PendingArtifacts: "PendingArtifacts", pendingArtifacts: "pendingArtifacts", MessageExtraTemplate: "MessageExtraTemplate", messageExtraTemplate: "messageExtraTemplate", ShowAgentRunDetails: "ShowAgentRunDetails", showAgentRunDetails: "showAgentRunDetails", ShowReactions: "ShowReactions", showReactions: "showReactions", ShowMessageRating: "ShowMessageRating", showMessageRating: "showMessageRating", AllowPinning: "AllowPinning", allowPinning: "allowPinning", AllowMessageEdit: "AllowMessageEdit", allowMessageEdit: "allowMessageEdit", AllowMessageDelete: "AllowMessageDelete", allowMessageDelete: "allowMessageDelete", ReadOnly: "ReadOnly", AllowStopRun: "AllowStopRun", InFlightCount: "InFlightCount", AssistantDisplayName: "AssistantDisplayName", assistantDisplayName: "assistantDisplayName", AssistantAvatarUrl: "AssistantAvatarUrl", assistantAvatarUrl: "assistantAvatarUrl" }, outputs: { ForkOpenRequested: "ForkOpenRequested", ResendInPlaceRequested: "ResendInPlaceRequested", EditingChanged: "EditingChanged", EditClicked: "EditClicked", editClicked: "editClicked", DeleteClicked: "DeleteClicked", deleteClicked: "deleteClicked", RegenerateRequested: "RegenerateRequested", RetryClicked: "RetryClicked", retryClicked: "retryClicked", TestFeedbackClicked: "TestFeedbackClicked", testFeedbackClicked: "testFeedbackClicked", ArtifactClicked: "ArtifactClicked", artifactClicked: "artifactClicked", ArtifactActionPerformed: "ArtifactActionPerformed", artifactActionPerformed: "artifactActionPerformed", MessageEdited: "MessageEdited", messageEdited: "messageEdited", OpenEntityRecord: "OpenEntityRecord", openEntityRecord: "openEntityRecord", SuggestedResponseSelected: "SuggestedResponseSelected", suggestedResponseSelected: "suggestedResponseSelected", AttachmentClicked: "AttachmentClicked", attachmentClicked: "attachmentClicked", DiagnosticRequested: "DiagnosticRequested", diagnosticRequested: "diagnosticRequested", MessagePinToggled: "MessagePinToggled", messagePinToggled: "messagePinToggled", LivenessCheckRequested: "LivenessCheckRequested", BeforeResponseFormSubmitted: "BeforeResponseFormSubmitted", beforeResponseFormSubmitted: "beforeResponseFormSubmitted", AfterResponseFormSubmitted: "AfterResponseFormSubmitted", afterResponseFormSubmitted: "afterResponseFormSubmitted", EditResendRequested: "EditResendRequested", ForkRequested: "ForkRequested", BeforeStopClicked: "BeforeStopClicked", StopRequested: "StopRequested", TaskGraphPanelRequested: "TaskGraphPanelRequested", taskGraphPanelRequested: "taskGraphPanelRequested", ScrollToMessageRequested: "ScrollToMessageRequested", scrollToMessageRequested: "scrollToMessageRequested" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 28, vars: 34, consts: [[3, "click"], [1, "message-avatar"], [1, "avatar-circle"], [1, "message-content"], [1, "message-header"], [1, "message-sender", 3, "title"], [1, "message-time"], [1, "message-status", 3, "error"], [1, "time-pill", 3, "in-progress", "active", "complete", "stopped", "failed", "checking", "stalled", "title"], ["type", "button", 1, "stop-run-pill", 3, "disabled", "title"], ["title", "Provide Test Feedback", 1, "test-feedback-icon"], ["role", "group", "aria-label", "Message actions", 1, "message-action-group", 3, "labeled"], [1, "agent-run-icon", 3, "expanded", "title"], [1, "message-body"], [1, "message-edit-container"], [1, "message-fork-chips"], [1, "message-footer"], [1, "agent-details-section"], [1, "agent-details-panel"], [1, "message-reactions"], ["role", "note", 1, "fork-marker"], ["alt", "User avatar", 1, "avatar-image", 3, "src"], [3, "class"], [1, "fas", "fa-user"], ["alt", "Assistant avatar", 1, "avatar-image", 3, "src"], [1, "fas", 3, "ngClass"], ["alt", "Assistant avatar", 1, "avatar-image", 3, "error", "src"], [1, "via"], ["aria-hidden", "true", 1, "mini"], ["alt", "", 3, "src"], [1, "pill", "pill--target"], [1, "message-status"], [1, "status-text"], [1, "time-pill", 3, "title"], [1, "liveness-label"], ["type", "button", 1, "stop-run-pill", 3, "click", "disabled", "title"], ["title", "Provide Test Feedback", 1, "test-feedback-icon", 3, "click"], [1, "fas", "fa-flask"], ["role", "group", "aria-label", "Message actions", 1, "message-action-group"], ["type", "button", "title", "Edit message", "aria-label", "Edit message", 1, "message-header-action", "message-action-edit"], ["type", "button", "title", "Fork from here", "aria-label", "Fork from here", 1, "message-header-action", "message-action-fork"], ["type", "button", 1, "message-header-action", "message-action-regenerate", 3, "title"], ["type", "button", "title", "Edit message", "aria-label", "Edit message", 1, "message-header-action", "message-action-edit", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-pen"], ["type", "button", "title", "Fork from here", "aria-label", "Fork from here", 1, "message-header-action", "message-action-fork", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-code-branch"], [1, "action-label-long"], [1, "action-label-short"], ["type", "button", 1, "message-header-action", "message-action-regenerate", 3, "click", "title"], ["aria-hidden", "true", 1, "fa-solid", "fa-rotate-left"], [1, "agent-run-icon", 3, "click", "title"], [1, "fas", "fa-cog"], [1, "rating-badge"], ["type", "button", "title", "Scroll to originating workflow card and step artifacts", 1, "workflow-continuation-banner"], [1, "message-text"], [3, "Handoff"], [1, "stopped-line"], [1, "stopped-actions"], [1, "message-attachments"], [1, "workflow-execution-card", 3, "class"], [1, "multi-artifact-showcase"], [1, "artifact-wrapper", 3, "system-artifact"], [3, "FormDefinition", "Disabled"], [3, "commands", "disabled", "isLastMessage", "isConversationOwner"], ["type", "button", "title", "Scroll to originating workflow card and step artifacts", 1, "workflow-continuation-banner", 3, "click"], [1, "continuation-banner-left"], ["aria-hidden", "true", 1, "fa-solid", "fa-diagram-project", "continuation-banner-icon"], [1, "continuation-banner-label"], [1, "continuation-banner-sep"], [1, "continuation-banner-name"], [1, "continuation-banner-jump"], ["aria-hidden", "true", 1, "fa-solid", "fa-arrow-up-long"], [1, "joining"], ["aria-hidden", "true", 1, "joining-skeletons"], [1, "skeleton", "skeleton--wide"], [1, "skeleton", "skeleton--narrow"], [3, "ImageClicked", "data", "enableCollapsibleHeadings"], [1, "edited-badge"], ["aria-hidden", "true", 1, "fa-solid", "fa-stop"], ["mjButton", "", "Variant", "outline", "Size", "sm", "type", "button", "title", "Continue where you left off", 1, "continue-run", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-play"], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], [1, "attachment-item", "image-attachment", 3, "title"], [1, "attachment-strip", 3, "is-artifact", "title"], [1, "attachment-item", "image-attachment", 3, "click", "title"], ["loading", "lazy", 1, "attachment-thumbnail", 3, "src", "alt"], [1, "attachment-overlay"], [1, "fas", "fa-expand"], [1, "attachment-strip", 3, "click", "title"], [1, "attachment-badge"], [1, "attachment-meta"], [1, "file-name"], [1, "file-size"], [1, "workflow-execution-card"], [1, "workflow-card-header", 3, "click"], [1, "workflow-header-left"], [1, "workflow-status-icon"], [1, "fa-solid", "fa-circle-notch", "fa-spin"], [1, "fa-solid", "fa-circle-check"], [1, "fa-solid", "fa-circle-exclamation"], [1, "fa-solid", "fa-ban"], [1, "workflow-title-group"], [1, "workflow-title-row"], [1, "workflow-title"], [1, "workflow-badge"], [1, "workflow-subtitle"], [1, "workflow-dot"], [1, "workflow-header-right"], ["type", "button", "title", "View visual task graph in side panel", 1, "workflow-graph-btn"], ["title", "Workflow execution time", 1, "workflow-duration-pill"], [1, "fa-regular", "fa-clock"], ["type", "button", 1, "workflow-collapse-btn", 3, "title"], ["role", "progressbar", "aria-valuemin", "0", "aria-valuemax", "100", 1, "workflow-progress-track"], [1, "workflow-progress-fill"], [1, "workflow-steps-pipeline"], [1, "workflow-skipped-count"], ["type", "button", "title", "View visual task graph in side panel", 1, "workflow-graph-btn", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-diagram-project"], ["type", "button", 1, "workflow-collapse-btn", 3, "click", "title"], [1, "workflow-collapse-label"], ["aria-hidden", "true", 1, "fa-solid", "fa-chevron-down", "workflow-collapse-chevron"], [1, "workflow-step-item", 3, "class", "is-expanded"], [1, "workflow-step-item"], [1, "workflow-step-rail"], [1, "workflow-step-node"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-check"], [1, "fa-solid", "fa-xmark"], ["title", "Skipped (conditional prerequisite not met)", 1, "fa-solid", "fa-forward-step"], [1, "step-index-num"], [1, "workflow-step-connector", 3, "is-complete"], [1, "workflow-step-content", 3, "click"], [1, "workflow-step-main-row"], [1, "workflow-step-identity"], [1, "workflow-step-name"], [1, "workflow-step-agent-chip"], [1, "workflow-step-meta"], [1, "workflow-step-duration", 3, "is-skipped"], ["type", "button", "title", "Open AI Agent Run record", 1, "workflow-step-run-btn"], [1, "fa-solid", "fa-chevron-down", "workflow-step-chevron", 3, "rotated"], [1, "workflow-step-details"], [1, "workflow-step-connector"], [1, "fa-solid", "fa-robot"], [1, "workflow-step-duration"], ["type", "button", "title", "Open AI Agent Run record", 1, "workflow-step-run-btn", 3, "click"], [1, "fa-solid", "fa-arrow-up-right-from-square"], [1, "fa-solid", "fa-chevron-down", "workflow-step-chevron"], [1, "artifact-wrapper"], [3, "actionPerformed", "artifactId", "artifact", "artifactVersion", "currentUser"], [1, "multi-artifact-supporting-section"], ["type", "button", 1, "supporting-artifacts-header", 3, "click"], [1, "supporting-header-left"], ["aria-hidden", "true", 1, "fa-solid", "fa-layer-group", "supporting-header-icon"], [1, "supporting-header-title"], [1, "supporting-header-count"], [1, "supporting-collapsed-preview"], [1, "supporting-header-right"], [1, "supporting-toggle-hint"], ["aria-hidden", "true", 1, "fa-solid", "fa-chevron-down", "supporting-chevron"], [1, "supporting-artifacts-grid"], [1, "multi-artifact-primary-section"], [1, "supporting-preview-pill"], [1, "artifact-wrapper", "supporting-artifact-cell", 3, "system-artifact"], [1, "artifact-wrapper", "supporting-artifact-cell"], [1, "supporting-step-badge", 3, "title"], [1, "primary-artifact-header"], ["aria-hidden", "true", 1, "fa-solid", "fa-star", "primary-header-icon"], [1, "primary-header-title"], [1, "primary-step-badge"], [1, "artifact-wrapper", "primary-artifact-card"], [1, "artifact-pending"], ["size", "small", 3, "text"], [3, "FormSubmitted", "FormDefinition", "Disabled"], [3, "commandExecuted", "commands", "disabled", "isLastMessage", "isConversationOwner"], ["rows", "4", "placeholder", "Edit your message...", 1, "message-edit-textarea", 3, "ngModelChange", "keydown", "ngModel"], [1, "edit-actions"], ["mjButton", "", "Variant", "primary", "Size", "sm", 3, "click"], ["aria-hidden", "true"], ["mjButton", "", "Variant", "secondary", "Size", "sm", 3, "click"], ["aria-hidden", "true", 1, "fas", "fa-times"], [1, "edit-note"], [1, "edit-hint"], ["mjButton", "", "Variant", "flat", "Size", "sm", "data-kind", "Original", 1, "fork-chip"], ["mjButton", "", "Variant", "flat", "Size", "sm", 1, "fork-chip"], ["mjButton", "", "Variant", "flat", "Size", "sm", "data-kind", "Original", 1, "fork-chip", 3, "click"], [1, "fork-chip-name"], [1, "fork-chip-time"], ["mjButton", "", "Variant", "flat", "Size", "sm", 1, "fork-chip", 3, "click"], ["aria-hidden", "true", 1, "fork-chip-avatars"], [1, "fork-chip-messages"], [1, "fork-chip-avatar", 3, "title"], ["title", "Delete this message and all messages below it", 1, "action-bar-btn", "danger", "inline-delete"], [1, "ai-message-actions"], ["title", "Delete this message and all messages below it", 1, "action-bar-btn", "danger", "inline-delete", 3, "click"], [1, "fas", "fa-trash"], ["type", "button", 1, "action-bar-btn", "labeled", "regenerate-btn", 3, "title"], ["type", "button", 1, "action-bar-btn", "labeled", "regenerate-btn", 3, "click", "title"], [3, "conversationDetailId", "currentUser", "ratingEntityName", "ratingsData", "canEdit"], ["type", "button", 1, "action-bar-btn", "pin-btn", 3, "pinned", "title"], ["type", "button", 1, "action-bar-btn", "pin-btn", 3, "click", "title"], [1, "fas", "fa-thumbtack"], [1, "agent-details-content"], [1, "agent-panel-actions"], [1, "agent-details-tasks"], [1, "agent-details-header"], [1, "fas", "fa-chart-line"], ["title", "Open agent details", 1, "agent-name-link", 3, "click"], [1, "agent-details-grid"], [1, "detail-row"], [1, "detail-label"], [1, "detail-value"], ["title", "Open agent run details", 1, "run-id-link", 3, "click"], [1, "fas", "fa-external-link-alt"], [1, "detail-value", "status-badge"], ["title", "Delete this message and all messages below it", 1, "action-bar-btn", "danger"], ["title", "Delete this message and all messages below it", 1, "action-bar-btn", "danger", 3, "click"], [3, "conversationDetailId", "currentUser", "ratingsData", "canEdit"], [1, "tasks-section-header"], [1, "fas", "fa-tasks"], [1, "tasks-list"], [3, "task", "compact", "clickable", "showProgress", "showDuration"], [1, "reaction-btn", 3, "click"], [1, "far", "fa-thumbs-up"], [1, "reaction-count"], [1, "far", "fa-comment"], [1, "fork-marker-text"], ["aria-hidden", "true", 1, "fork-marker-line"]], template: function MessageItemComponent_Template(rf, ctx) { if (rf & 1) {
|
|
4396
4546
|
i0.ɵɵelementStart(0, "div", 0);
|
|
4397
4547
|
i0.ɵɵlistener("click", function MessageItemComponent_Template_div_click_0_listener($event) { return ctx.onMessageBubbleClick($event); });
|
|
4398
4548
|
i0.ɵɵelementStart(1, "div", 1)(2, "div", 2);
|
|
@@ -4401,31 +4551,33 @@ export class MessageItemComponent extends BaseAngularComponent {
|
|
|
4401
4551
|
i0.ɵɵelementStart(5, "div", 3)(6, "div", 4)(7, "span", 5);
|
|
4402
4552
|
i0.ɵɵtext(8);
|
|
4403
4553
|
i0.ɵɵelementEnd();
|
|
4404
|
-
i0.ɵɵ
|
|
4405
|
-
i0.ɵɵ
|
|
4406
|
-
i0.ɵɵ
|
|
4554
|
+
i0.ɵɵconditionalCreate(9, MessageItemComponent_Conditional_9_Template, 7, 3);
|
|
4555
|
+
i0.ɵɵelementStart(10, "span", 6);
|
|
4556
|
+
i0.ɵɵtext(11);
|
|
4557
|
+
i0.ɵɵpipe(12, "date");
|
|
4407
4558
|
i0.ɵɵelementEnd();
|
|
4408
|
-
i0.ɵɵconditionalCreate(
|
|
4409
|
-
i0.ɵɵconditionalCreate(
|
|
4410
|
-
i0.ɵɵconditionalCreate(
|
|
4411
|
-
i0.ɵɵconditionalCreate(
|
|
4412
|
-
i0.ɵɵconditionalCreate(
|
|
4413
|
-
i0.ɵɵconditionalCreate(
|
|
4559
|
+
i0.ɵɵconditionalCreate(13, MessageItemComponent_Conditional_13_Template, 4, 4, "span", 7);
|
|
4560
|
+
i0.ɵɵconditionalCreate(14, MessageItemComponent_Conditional_14_Template, 5, 18, "span", 8);
|
|
4561
|
+
i0.ɵɵconditionalCreate(15, MessageItemComponent_Conditional_15_Template, 3, 4, "button", 9);
|
|
4562
|
+
i0.ɵɵconditionalCreate(16, MessageItemComponent_Conditional_16_Template, 2, 0, "span", 10);
|
|
4563
|
+
i0.ɵɵconditionalCreate(17, MessageItemComponent_Conditional_17_Template, 4, 5, "span", 11);
|
|
4564
|
+
i0.ɵɵconditionalCreate(18, MessageItemComponent_Conditional_18_Template, 3, 4, "span", 12);
|
|
4414
4565
|
i0.ɵɵelementEnd();
|
|
4415
|
-
i0.ɵɵelementStart(
|
|
4416
|
-
i0.ɵɵconditionalCreate(
|
|
4417
|
-
i0.ɵɵconditionalCreate(
|
|
4566
|
+
i0.ɵɵelementStart(19, "div", 13);
|
|
4567
|
+
i0.ɵɵconditionalCreate(20, MessageItemComponent_Conditional_20_Template, 15, 11);
|
|
4568
|
+
i0.ɵɵconditionalCreate(21, MessageItemComponent_Conditional_21_Template, 12, 6, "div", 14);
|
|
4418
4569
|
i0.ɵɵelementEnd();
|
|
4419
|
-
i0.ɵɵconditionalCreate(
|
|
4420
|
-
i0.ɵɵconditionalCreate(
|
|
4421
|
-
i0.ɵɵelementStart(
|
|
4422
|
-
i0.ɵɵconditionalCreate(
|
|
4570
|
+
i0.ɵɵconditionalCreate(22, MessageItemComponent_Conditional_22_Template, 3, 0, "div", 15);
|
|
4571
|
+
i0.ɵɵconditionalCreate(23, MessageItemComponent_Conditional_23_Template, 3, 2, "div", 16);
|
|
4572
|
+
i0.ɵɵelementStart(24, "div", 17);
|
|
4573
|
+
i0.ɵɵconditionalCreate(25, MessageItemComponent_Conditional_25_Template, 4, 3, "div", 18);
|
|
4423
4574
|
i0.ɵɵelementEnd();
|
|
4424
|
-
i0.ɵɵconditionalCreate(
|
|
4575
|
+
i0.ɵɵconditionalCreate(26, MessageItemComponent_Conditional_26_Template, 9, 0, "div", 19);
|
|
4425
4576
|
i0.ɵɵelementEnd()();
|
|
4426
|
-
i0.ɵɵconditionalCreate(
|
|
4577
|
+
i0.ɵɵconditionalCreate(27, MessageItemComponent_Conditional_27_Template, 5, 1, "div", 20);
|
|
4427
4578
|
} if (rf & 2) {
|
|
4428
4579
|
i0.ɵɵclassMap(ctx.messageClasses);
|
|
4580
|
+
i0.ɵɵstyleProp("--mj-handoff-target", ctx.HandedOffFrom ? ctx.TargetAccentVar : null)("--mj-handoff-source", ctx.HandedOffFrom ? ctx.HandedOffFromAccentVar : null);
|
|
4429
4581
|
i0.ɵɵattribute("data-message-id", ctx.message.ID);
|
|
4430
4582
|
i0.ɵɵadvance(2);
|
|
4431
4583
|
i0.ɵɵclassProp("ai-avatar", ctx.isAIMessage)("user-avatar", ctx.isUserMessage)("avatar-has-image", ctx.isAIMessage && ctx.effectiveAssistantAvatarUrl !== null);
|
|
@@ -4435,39 +4587,41 @@ export class MessageItemComponent extends BaseAngularComponent {
|
|
|
4435
4587
|
i0.ɵɵproperty("title", ctx.isAIMessage ? (ctx.aiAgentInfo == null ? null : ctx.aiAgentInfo.role) || "AI Assistant" : "");
|
|
4436
4588
|
i0.ɵɵadvance();
|
|
4437
4589
|
i0.ɵɵtextInterpolate1(" ", ctx.isAIMessage ? (ctx.aiAgentInfo == null ? null : ctx.aiAgentInfo.name) || "AI Assistant" : ctx.messageSenderName, " ");
|
|
4590
|
+
i0.ɵɵadvance();
|
|
4591
|
+
i0.ɵɵconditional(ctx.isAIMessage && ctx.HandedOffFrom ? 9 : -1);
|
|
4438
4592
|
i0.ɵɵadvance(2);
|
|
4439
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(
|
|
4593
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(12, 31, ctx.message.__mj_CreatedAt, "short"));
|
|
4440
4594
|
i0.ɵɵadvance(2);
|
|
4441
|
-
i0.ɵɵconditional(ctx.isUserMessage && ctx.messageStatus !== "Complete" ?
|
|
4595
|
+
i0.ɵɵconditional(ctx.isUserMessage && ctx.messageStatus !== "Complete" ? 13 : -1);
|
|
4442
4596
|
i0.ɵɵadvance();
|
|
4443
|
-
i0.ɵɵconditional(!ctx.isUserMessage && ctx.timePillText ?
|
|
4597
|
+
i0.ɵɵconditional(!ctx.isUserMessage && ctx.timePillText ? 14 : -1);
|
|
4444
4598
|
i0.ɵɵadvance();
|
|
4445
|
-
i0.ɵɵconditional(ctx.CanStopRun ?
|
|
4599
|
+
i0.ɵɵconditional(ctx.CanStopRun ? 15 : -1);
|
|
4446
4600
|
i0.ɵɵadvance();
|
|
4447
|
-
i0.ɵɵconditional(ctx.message.TestRunID ?
|
|
4601
|
+
i0.ɵɵconditional(ctx.message.TestRunID ? 16 : -1);
|
|
4448
4602
|
i0.ɵɵadvance();
|
|
4449
|
-
i0.ɵɵconditional(ctx.ShowsActionGroup ?
|
|
4603
|
+
i0.ɵɵconditional(ctx.ShowsActionGroup ? 17 : -1);
|
|
4450
4604
|
i0.ɵɵadvance();
|
|
4451
|
-
i0.ɵɵconditional(ctx.hasAgentRun && ctx.hasAgentDetailsPanelContent ?
|
|
4605
|
+
i0.ɵɵconditional(ctx.hasAgentRun && ctx.hasAgentDetailsPanelContent ? 18 : -1);
|
|
4452
4606
|
i0.ɵɵadvance(2);
|
|
4453
|
-
i0.ɵɵconditional(!ctx.isEditing ?
|
|
4607
|
+
i0.ɵɵconditional(!ctx.isEditing ? 20 : -1);
|
|
4454
4608
|
i0.ɵɵadvance();
|
|
4455
|
-
i0.ɵɵconditional(ctx.isEditing ?
|
|
4609
|
+
i0.ɵɵconditional(ctx.isEditing ? 21 : -1);
|
|
4456
4610
|
i0.ɵɵadvance();
|
|
4457
|
-
i0.ɵɵconditional(ctx.ForkChips.length > 0 && !ctx.isEditing ?
|
|
4611
|
+
i0.ɵɵconditional(ctx.ForkChips.length > 0 && !ctx.isEditing ? 22 : -1);
|
|
4458
4612
|
i0.ɵɵadvance();
|
|
4459
|
-
i0.ɵɵconditional(ctx.ShowsFooter ?
|
|
4613
|
+
i0.ɵɵconditional(ctx.ShowsFooter ? 23 : -1);
|
|
4460
4614
|
i0.ɵɵadvance(2);
|
|
4461
|
-
i0.ɵɵconditional(ctx.isAgentDetailsExpanded && ctx.hasAgentRun ?
|
|
4615
|
+
i0.ɵɵconditional(ctx.isAgentDetailsExpanded && ctx.hasAgentRun ? 25 : -1);
|
|
4462
4616
|
i0.ɵɵadvance();
|
|
4463
|
-
i0.ɵɵconditional(ctx.showReactions && !ctx.isProcessing && !ctx.isInProgressAIMessage && !ctx.isEditing ?
|
|
4617
|
+
i0.ɵɵconditional(ctx.showReactions && !ctx.isProcessing && !ctx.isInProgressAIMessage && !ctx.isEditing ? 26 : -1);
|
|
4464
4618
|
i0.ɵɵadvance();
|
|
4465
|
-
i0.ɵɵconditional(ctx.ForkMarkerText ?
|
|
4466
|
-
} }, dependencies: [i5.NgClass, i5.NgTemplateOutlet, i6.DefaultValueAccessor, i6.NgControlStatus, i6.NgModel, i7.MJButtonDirective, i8.ArtifactMessageCardComponent, i9.LoadingComponent, i4.MarkdownComponent, i10.DynamicFormComponent, i11.ActionableCommandsComponent, i12.ConversationMessageRatingComponent, i13.TaskWidgetComponent, i5.DatePipe], styles: [".message-item[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n padding: 8px 24px;\n transition: background-color 150ms ease;\n animation: _ngcontent-%COMP%_fadeIn 0.3s ease;\n position: relative;\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from {\n opacity: 0;\n transform: translateY(10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.message-item.ai-message[_ngcontent-%COMP%] {\n background-color: transparent;\n}\n\n.message-item.user-message[_ngcontent-%COMP%] {\n background-color: transparent;\n}\n\n\n.message-item.pin-beacon[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_pinBeacon 1.5s ease-out forwards;\n}\n\n@keyframes _ngcontent-%COMP%_pinBeacon {\n 0% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--mj-status-warning) 60%, transparent); }\n 20% { box-shadow: 0 0 0 8px color-mix(in srgb, var(--mj-status-warning) 35%, transparent); }\n 50% { box-shadow: 0 0 0 4px color-mix(in srgb, var(--mj-status-warning) 15%, transparent); }\n 70% { box-shadow: 0 0 0 6px color-mix(in srgb, var(--mj-status-warning) 20%, transparent); }\n 100% { box-shadow: none; }\n}\n\n\n.message-item.search-hit-highlight[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_searchHitHighlight 2s ease-out forwards;\n}\n\n@keyframes _ngcontent-%COMP%_searchHitHighlight {\n 0% { background-color: color-mix(in srgb, var(--mj-brand-primary) 18%, transparent); }\n 70% { background-color: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent); }\n 100% { background-color: transparent; }\n}\n\n.message-item.in-progress[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n border-left: 3px solid var(--mj-brand-primary);\n position: relative;\n}\n\n@keyframes _ngcontent-%COMP%_shimmer {\n 0% {\n background-position: -200% 0;\n }\n 100% {\n background-position: 200% 0;\n }\n}\n\n\n.message-item.in-progress[_ngcontent-%COMP%] .message-text[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n font-weight: 500;\n max-height: 150px;\n overflow-y: auto;\n display: block;\n}\n\n\n\n\n\n\n.message-item.in-progress.streaming[_ngcontent-%COMP%] .message-text[_ngcontent-%COMP%] {\n max-height: none;\n overflow-y: visible;\n font-weight: inherit;\n}\n\n\n\n.message-item.in-progress[_ngcontent-%COMP%] .avatar-circle[_ngcontent-%COMP%] {\n box-shadow: 0 0 0 0 color-mix(in srgb, var(--mj-brand-primary) 70%, transparent);\n animation: _ngcontent-%COMP%_pulse 2s ease-in-out infinite;\n}\n\n@keyframes _ngcontent-%COMP%_pulse {\n 0%, 100% {\n box-shadow: 0 0 0 0 color-mix(in srgb, var(--mj-brand-primary) 70%, transparent);\n }\n 50% {\n box-shadow: 0 0 0 8px color-mix(in srgb, var(--mj-brand-primary) 0%, transparent);\n }\n}\n\n.message-item[_ngcontent-%COMP%]:hover {\n background-color: color-mix(in srgb, var(--mj-text-primary) 2%, transparent);\n}\n\n\n[_nghost-%COMP%] .mention-badge {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 12px;\n margin: 0 3px;\n border-radius: 16px;\n font-weight: 600;\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n vertical-align: middle;\n white-space: nowrap;\n}\n\n[_nghost-%COMP%] .mention-badge.agent {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: 2px solid color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n box-shadow: var(--mj-shadow-md);\n}\n\n[_nghost-%COMP%] .mention-badge.user {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: 2px solid color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n box-shadow: var(--mj-shadow-md);\n}\n\n[_nghost-%COMP%] .mention-badge.entity {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n border: 2px solid color-mix(in srgb, var(--mj-status-success) 40%, transparent);\n box-shadow: var(--mj-shadow-md);\n}\n\n[_nghost-%COMP%] .mention-badge.query {\n background: var(--mj-status-warning);\n color: var(--mj-text-inverse);\n border: 2px solid color-mix(in srgb, var(--mj-status-warning) 40%, transparent);\n box-shadow: var(--mj-shadow-md);\n}\n\n[_nghost-%COMP%] .mention-badge.record {\n background: var(--mj-color-info, #2563eb);\n color: var(--mj-text-inverse, #fff);\n border: 2px solid color-mix(in srgb, var(--mj-color-info, #2563eb) 40%, transparent);\n box-shadow: var(--mj-shadow-md);\n text-decoration: none;\n}\n\n\n[_nghost-%COMP%] .mention-badge.record.icon-only {\n padding: 4px 7px;\n gap: 0;\n min-width: 1.65em;\n justify-content: center;\n}\n\n\n\n\n[_nghost-%COMP%] .mention-badge.skill {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n border: 2px solid color-mix(in srgb, var(--mj-text-inverse) 35%, transparent);\n border-radius: 4px;\n box-shadow: var(--mj-shadow-md);\n}\n\n[_nghost-%COMP%] .mention-badge i {\n font-size: 12px;\n opacity: 0.95;\n}\n\n\n[_nghost-%COMP%] .mention-badge i[class^=\"mj-icon-\"], \n[_nghost-%COMP%] .mention-badge i[class*=\" mj-icon-\"] {\n width: 16px;\n height: 16px;\n display: inline-block;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n vertical-align: middle;\n font-size: inherit;\n}\n\n\n[_nghost-%COMP%] .mention-badge i.mj-icon-skip {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 101.89918457031249 96.83947368421053'%3E%3Cg transform='translate(-0.1288232421875,-0.0)'%3E%3Cpath d='M93.85,41.56c-.84,0-1.62.2-2.37.55-3-4.35-7.49-8.12-13.04-11.04l.04-7.18v-14.44h-10.24v17.6c-1.52-.43-3.07-.8-4.67-1.11V0h-10.24v24.72s-.09,0-.14,0h-4.38s-.1,0-.14,0V7.3h-10.24v18.62c-1.6.32-3.15.69-4.67,1.11v-11.67h-10.24v6.09l.04,9.6c-5.55,2.92-10.04,6.7-13.04,11.04-.75-.35-1.53-.55-2.37-.55-4.5,0-8.14,5.61-8.14,12.51s3.64,12.53,8.14,12.53c.58,0,1.14-.12,1.67-.29,4.1,6.62,11.54,12.06,20.98,15.28l.79.13v7.05c0,2.97,1.45,5.58,3.87,6.99,1.18.69,2.5,1.04,3.85,1.03,1.4,0,2.83-.37,4.15-1.12l7.54-4.29,7.56,4.3c1.31.74,2.73,1.12,4.13,1.12s2.67-.35,3.85-1.04c2.42-1.41,3.86-4.02,3.86-6.98v-7.05l.79-.13c9.44-3.22,16.89-8.66,20.98-15.28.54.17,1.09.29,1.68.29,4.5,0,8.14-5.61,8.14-12.53s-3.63-12.51-8.14-12.51' fill='%23AAAAAA'/%3E%3Cpath d='M86.69,50.87c0-12.22-13.6-19.1-28.94-20.66-4.48-.47-9.19-.54-13.52,0-15.34,1.53-28.93,8.41-28.93,20.66,0,8.55,5.7,15.55,12.68,15.55h7.94c3.05,2.5,6.93,4.1,11.08,4.71,2.65.4,5.44.46,8.01,0,4.15-.6,8.05-2.2,11.1-4.71h7.92c6.97,0,12.68-7,12.68-15.55' fill='white' opacity='0.9'/%3E%3Cpath d='M57.83,55.82c-1.19,2.58-3.8,4.35-6.84,4.35s-5.65-1.77-6.84-4.35h13.68Z' fill='%23AAAAAA'/%3E%3Cpath d='M32.52,41.14c1.74,0,3.18,2.13,3.18,4.76s-1.44,4.74-3.18,4.74-3.16-2.13-3.16-4.74,1.41-4.76,3.16-4.76' fill='%23AAAAAA'/%3E%3Cpath d='M69.46,41.14c1.74,0,3.16,2.13,3.16,4.76s-1.41,4.74-3.16,4.74-3.18-2.13-3.18-4.74,1.41-4.76,3.18-4.76' fill='%23AAAAAA'/%3E%3Cpath d='M63.91,76.15c-.82-.48-1.84-.43-2.8.12l-10.13,5.75-10.11-5.75c-.96-.55-1.98-.59-2.8-.12-.82.47-1.29,1.38-1.29,2.49v10.12c0,1.11.47,2.02,1.28,2.49.38.22.8.33,1.24.33.51,0,1.05-.15,1.57-.44l10.12-5.75,10.11,5.75c.52.29,1.05.44,1.56.44.44,0,.86-.11,1.24-.33.81-.48,1.28-1.38,1.28-2.49v-10.12c0-1.11-.47-2.02-1.28-2.49' fill='white' opacity='0.9'/%3E%3C/g%3E%3C/svg%3E\");\n}\n\n\n[_nghost-%COMP%] .mention-badge i.mj-icon-betty {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Ccircle cx='50' cy='50' r='45' fill='%23FF6B6B'/%3E%3Ctext x='50' y='65' text-anchor='middle' font-size='40' fill='white' font-family='Arial, sans-serif' font-weight='bold'%3EB%3C/text%3E%3C/svg%3E\");\n}\n\n\n[_nghost-%COMP%] .mention-badge i.mj-icon-izzy {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 204 180'%3E%3Cpath d='M0 0 C3.61144774 3.08477828 4.84942137 4.90830493 5.5 9.625 C5 13 5 13 3.5 14.9375 C1.74432121 17.35155834 1.83578869 18.21944114 1.90625 21.12890625 C1.9371875 22.40636719 1.968125 23.68382813 2 25 C3.18335937 24.72285156 4.36671875 24.44570313 5.5859375 24.16015625 C22.44010416 20.26839867 22.44010416 20.26839867 30 20 C31.80210938 19.92265625 31.80210938 19.92265625 33.640625 19.84375 C47.49356199 19.44904163 61.73614427 20.86627802 75 25 C75.53596907 19.64244551 75.53596907 19.64244551 73.5 15 C71.5549761 12.4066348 71.45048389 10.16629658 71.59375 6.97265625 C72.33633815 3.36681955 74.01253991 1.99164006 77 0 C79.80907914 -0.63997166 82.18961327 -0.63020793 85 0 C87.8100346 1.79363911 89.50940468 3.01880935 91 6 C90.984375 8.05859375 90.984375 8.05859375 90.75 10.4375 C90.68296875 11.21996094 90.6159375 12.00242187 90.546875 12.80859375 C90 15 90 15 88.49609375 16.3984375 C86.25734576 18.79500846 86.4852344 20.97464008 86.3125 24.1875 C86.21388672 25.81751953 86.21388672 25.81751953 86.11328125 27.48046875 C86.07589844 28.31191406 86.03851563 29.14335937 86 30 C86.67675781 30.0825 87.35351562 30.165 88.05078125 30.25 C91.82333306 31.20937741 94.89353787 32.99425194 98.1875 35 C99.18052124 35.60448975 99.18052124 35.60448975 100.19360352 36.22119141 C111.98050012 43.58460075 121.17745776 53.2687532 127 66 C127 66.66 127 67.32 127 68 C127.721875 68.0825 128.44375 68.165 129.1875 68.25 C133.81406141 69.48374971 136.2179022 71.66516963 138.625 75.7734375 C140.97801199 81.55147269 140.43210927 87.87027126 140.375 94 C140.38660156 95.24523437 140.39820313 96.49046875 140.41015625 97.7734375 C140.3675701 111.08870765 140.3675701 111.08870765 135.5 116.7421875 C131.62323281 119.66995439 128.8523137 121.14337998 124 121.125 C122.9790625 121.12886719 122.9790625 121.12886719 121.9375 121.1328125 C120 121 120 121 117 120 C116.74347656 120.65226562 116.48695313 121.30453125 116.22265625 121.9765625 C115.83980469 122.85054688 115.45695313 123.72453125 115.0625 124.625 C114.70285156 125.48351562 114.34320313 126.34203125 113.97265625 127.2265625 C108.57908063 134.80960941 99.56813916 137.59212379 91.0625 140.375 C90.02287109 140.72949219 88.98324219 141.08398438 87.91210938 141.44921875 C80.34347852 144 80.34347852 144 78 144 C78.02094727 144.65484375 78.04189453 145.3096875 78.06347656 145.984375 C78.14730383 148.98942328 78.19886895 151.99422464 78.25 155 C78.28351563 156.02996094 78.31703125 157.05992187 78.3515625 158.12109375 C78.43361416 164.56214867 77.93369275 169.71304442 74 175 C68.75523423 179.17440541 64.68195675 180.53237245 58 180 C55.12653443 178.963898 52.49379495 177.58020045 49.8125 176.125 C49.11447266 175.76019531 48.41644531 175.39539063 47.69726562 175.01953125 C46.39868999 174.33997216 45.10309803 173.65465367 43.81176758 172.96142578 C43.21388428 172.64415527 42.61600098 172.32688477 42 172 C41.34290039 171.59402588 40.68580078 171.18805176 40.00878906 170.76977539 C38.03672401 169.77639533 38.03672401 169.77639533 36.12475586 170.58325195 C35.49448486 170.96441162 34.86421387 171.34557129 34.21484375 171.73828125 C33.17166992 172.35026367 33.17166992 172.35026367 32.10742188 172.97460938 C31.39134766 173.41611328 30.67527344 173.85761719 29.9375 174.3125 C28.51029236 175.1647359 27.08194984 176.01507485 25.65234375 176.86328125 C25.02320068 177.24782471 24.39405762 177.63236816 23.74584961 178.02856445 C19.79572932 180.2265128 16.44037501 180.296025 12 180 C6.82155197 178.33236419 3.95074467 176.59004726 1 172 C-0.72417326 168.34258111 -1.2403609 165.51230089 -1.1953125 161.48046875 C-1.18886719 160.45888672 -1.18242188 159.43730469 -1.17578125 158.38476562 C-1.15902344 157.32966797 -1.14226563 156.27457031 -1.125 155.1875 C-1.11597656 154.11306641 -1.10695312 153.03863281 -1.09765625 151.93164062 C-1.07415306 149.28753146 -1.04129575 146.64388128 -1 144 C-1.63196289 143.81171631 -2.26392578 143.62343262 -2.91503906 143.42944336 C-8.20708475 141.84808949 -13.49207901 140.2541307 -18.75 138.5625 C-19.98234375 138.17191406 -21.2146875 137.78132812 -22.484375 137.37890625 C-29.06200008 134.79901552 -34.12925122 130.90130551 -38 125 C-38.875 121.5625 -38.875 121.5625 -39 119 C-39.495 119.33 -39.99 119.66 -40.5 120 C-45.24354984 121.89741993 -49.49426304 121.53143657 -54.1875 119.875 C-58.42051121 117.05299253 -61.35909664 113.92271008 -63 109 C-63.22709306 104.92471184 -63.22828659 100.8492307 -63.24023438 96.76806641 C-63.2498982 94.77103695 -63.28108516 92.77414948 -63.3125 90.77734375 C-63.36188158 78.59243786 -63.36188158 78.59243786 -60 73 C-57.7509823 70.86631654 -55.88785241 69.35340008 -53.0078125 68.20703125 C-50.3010212 66.57979679 -49.65488803 64.83796148 -48.3125 62 C-45.06106922 55.7428385 -40.95735135 50.97447519 -36 46 C-35.40832031 45.38511719 -34.81664063 44.77023438 -34.20703125 44.13671875 C-28.97373562 39.11136864 -17.47215548 30 -10 30 C-10.08733973 27.91589342 -10.19552278 25.83265331 -10.3125 23.75 C-10.37050781 22.58984375 -10.42851563 21.4296875 -10.48828125 20.234375 C-11.02905532 16.81635262 -11.84853545 15.59874271 -14 13 C-14.54046356 8.75350057 -14.48376179 6.74176808 -12.125 3.125 C-8.57275398 -0.42724602 -4.8825369 -0.970906 0 0 Z M5 35 C4.30245605 35.21962402 3.60491211 35.43924805 2.88623047 35.66552734 C-14.1501062 41.15773444 -29.02751477 50.81254544 -39 66 C-39.33 66.99 -39.66 67.98 -40 69 C-37.525 70.98 -37.525 70.98 -35 73 C-34.52691406 72.29875 -34.05382812 71.5975 -33.56640625 70.875 C-21.08320269 52.96537462 -2.17172019 42.38052109 19.26171875 38.5078125 C46.97805996 34.9959591 75.10426623 38.71529466 97.73046875 56.09765625 C103.53827054 61.07953766 107.9264808 66.53902088 112 73 C113.32 72.01 114.64 71.02 116 70 C115.01713954 61.60788376 107.55262518 55.04847712 101.375 49.8125 C82.80696113 35.82916208 61.35998978 30.59265576 38.375 30.625 C37.71836365 30.62554382 37.06172729 30.62608765 36.38519287 30.62664795 C25.42439402 30.66823796 15.42390121 31.62072499 5 35 Z' fill='%234E3B78' transform='translate(63,0)'/%3E%3Cpath d='M0 0 C5.27957047 5.78547525 9.31612861 13.25448014 10 21.125 C9.69743213 24.83293961 8.77676366 26.8914086 6.1875 29.5625 C-2.04152489 35.76003038 -13.60917874 39.6270706 -23.875 38.8125 C-24.535 38.1525 -25.195 37.4925 -25.875 36.8125 C-28.97847254 36.48234335 -31.03281176 36.30718706 -33.75 37.9375 C-35.40354531 40.69340884 -35.26865568 42.66325452 -34.875 45.8125 C-33.95833333 47.89583333 -33.95833333 47.89583333 -31.875 48.8125 C-28.29166667 48.89583333 -28.29166667 48.89583333 -24.875 47.8125 C-24.57086182 47.16466553 -24.26672363 46.51683105 -23.95336914 45.84936523 C-22.875 43.8125 -22.875 43.8125 -20.77124023 42.88696289 C-19.91731689 42.6883667 -19.06339355 42.48977051 -18.18359375 42.28515625 C-17.23806641 42.04990234 -16.29253906 41.81464844 -15.31835938 41.57226562 C-14.32642578 41.34216797 -13.33449219 41.11207031 -12.3125 40.875 C-4.77934417 39.10870895 1.54823541 36.95205932 8.125 32.8125 C7.81647145 40.06292099 4.56245219 45.32546918 -0.5 50.4609375 C-5.29811284 54.61130511 -8.83216751 54.86916719 -15 55 C-21.13677833 55.26569953 -25.04589225 56.51893716 -29.890625 60.31640625 C-39.17633501 67.31724667 -52.82450605 66.52799961 -63.875 65.8125 C-71.37432145 64.60538489 -79.4496824 61.2378176 -84.875 55.8125 C-86.81199027 55.70419517 -88.75076074 55.60687514 -90.69067383 55.58691406 C-97.68300211 55.51299157 -103.12007731 55.4392364 -108.44140625 50.40234375 C-108.91449219 49.87769531 -109.38757813 49.35304688 -109.875 48.8125 C-110.6175 48.090625 -111.36 47.36875 -112.125 46.625 C-118.35765562 36.60823203 -119.69570866 25.34707186 -117.25 13.8828125 C-113.47065738 3.0509466 -104.76645407 -4.0120534 -94.875 -9.1875 C-91.26850975 -10.75400624 -87.62602625 -12.0153043 -83.875 -13.1875 C-83.029375 -13.47496094 -82.18375 -13.76242188 -81.3125 -14.05859375 C-56.0861494 -22.29657387 -20.04377266 -18.06142152 0 0 Z' fill='%23FDFDFD' transform='translate(155.875,64.1875)'/%3E%3Cpath d='M0 0 C5.24479788 1.58079188 9.51172656 4.60408712 14.06640625 7.58984375 C18.37837094 10.28462973 18.37837094 10.28462973 23.30859375 11.1328125 C28.49696048 9.20971132 33.08639658 6.29555589 37.79882812 3.42578125 C43.66838131 -0.00837477 43.66838131 -0.00837477 47.27734375 0.078125 C49.34375 1.0078125 49.34375 1.0078125 51.34375 3.0078125 C51.82984303 7.30136192 51.71414913 11.62739332 51.71875 15.9453125 C51.74324219 17.15123047 51.76773438 18.35714844 51.79296875 19.59960938 C51.79876953 21.33114258 51.79876953 21.33114258 51.8046875 23.09765625 C51.81290527 24.15847412 51.82112305 25.21929199 51.82958984 26.31225586 C51.34375 29.0078125 51.34375 29.0078125 49.48461914 30.87670898 C46.29658529 32.56106989 44.78123809 32.062357 41.34375 31.0078125 C37.60135447 29.03986817 34.07891261 26.72386924 30.53320312 24.42578125 C26.44214688 21.80182316 26.44214688 21.80182316 21.77734375 20.921875 C17.60401055 22.78413283 13.85973006 25.2663764 10.046875 27.76953125 C5.85335687 30.41401513 2.44659272 31.9581498 -2.65625 32.0078125 C-4.33203125 30.87695312 -4.33203125 30.87695312 -5.65625 29.0078125 C-6.04443359 26.328125 -6.04443359 26.328125 -6.0546875 23.1328125 C-6.05855469 21.98296875 -6.06242187 20.833125 -6.06640625 19.6484375 C-6.05480469 18.44703125 -6.04320313 17.245625 -6.03125 16.0078125 C-6.04285156 14.80640625 -6.05445312 13.605 -6.06640625 12.3671875 C-6.06253906 11.21734375 -6.05867188 10.0675 -6.0546875 8.8828125 C-6.05130371 7.82835937 -6.04791992 6.77390625 -6.04443359 5.6875 C-5.65625 3.0078125 -5.65625 3.0078125 -4.29736328 1.14111328 C-2.65625 0.0078125 -2.65625 0.0078125 0 0 Z' fill='%23FCFCFD' transform='translate(78.65625,136.9921875)'/%3E%3Cpath d='M0 0 C2.5 0.625 2.5 0.625 4.8125 2.625 C6.96830116 6.4575354 7.24792603 9.32007692 6.5 13.625 C5.34367254 15.98793002 4.35016245 17.77483755 2.5 19.625 C0.1875 20 0.1875 20 -2.5 19.625 C-5.06638215 17.47478793 -6.29103188 15.79226637 -6.88671875 12.46484375 C-7.08084032 8.45522921 -6.77549931 6.12498023 -4.8125 2.5625 C-2.5 0.625 -2.5 0.625 0 0 Z' fill='%2353417C' transform='translate(138.5,67.375)'/%3E%3Cpath d='M0 0 C2.5 0.6875 2.5 0.6875 4.8125 2.625 C7.08407605 6.74748987 7.32547179 10.07653131 6.5 14.6875 C4.8125 17.75 4.8125 17.75 2.5 19.6875 C-0.0625 20.25 -0.0625 20.25 -2.5 19.6875 C-5.30401904 17.38419865 -5.84979387 14.76309142 -6.4375 11.3125 C-6.72853275 7.71913649 -6.44645777 6.57011897 -4.875 3.125 C-2.5 0.6875 -2.5 0.6875 0 0 Z' fill='%23523F7B' transform='translate(64.5,67.3125)'/%3E%3Cpath d='M0 0 C8.91 0 17.82 0 27 0 C24.81183076 5.47042311 24.169236 6.55141452 19 9 C14.08609728 9.94526984 9.88605617 10.13992406 5.51171875 7.49609375 C3.4733513 5.76185217 1.65854906 4.10051199 0 2 C0 1.34 0 0.68 0 0 Z' fill='%23574680' transform='translate(88,95)'/%3E%3C/svg%3E\");\n}\n\n\n[_nghost-%COMP%] .mention-badge img {\n width: 16px;\n height: 16px;\n border-radius: 50%;\n object-fit: cover;\n vertical-align: middle;\n}\n\n[_nghost-%COMP%] .mention-badge:hover {\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-lg);\n}\n\n\n\n[_nghost-%COMP%] .mention-badge .preset-indicator {\n display: inline-block;\n font-size: 10px;\n font-weight: 600;\n font-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Roboto Mono', 'Courier New', monospace;\n background: rgba(255, 255, 255, 0.25);\n padding: 2px 6px;\n border-radius: 4px;\n margin-left: 4px;\n letter-spacing: 0.3px;\n text-transform: uppercase;\n border: 1px solid rgba(255, 255, 255, 0.15);\n}\n\n.message-avatar[_ngcontent-%COMP%] {\n flex-shrink: 0;\n}\n\n.avatar-circle[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 16px;\n color: var(--mj-text-inverse);\n}\n\n\n.avatar-circle.user-avatar[_ngcontent-%COMP%] {\n border-radius: 50%;\n background-color: var(--mj-text-primary);\n}\n\n\n.avatar-circle.ai-avatar[_ngcontent-%COMP%] {\n border-radius: 8px;\n background-color: var(--mj-brand-primary); \n}\n\n\n\n\n\n\n.avatar-circle.ai-avatar.avatar-has-image[_ngcontent-%COMP%] {\n background-color: transparent;\n overflow: hidden;\n}\n.avatar-circle.ai-avatar[_ngcontent-%COMP%] .avatar-image[_ngcontent-%COMP%] {\n border-radius: inherit;\n}\n\n.avatar-image[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 50%;\n}\n\n\n\n.artifact-pending[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 12px 16px;\n}\n\n\n.artifact-wrapper.system-artifact[_ngcontent-%COMP%] {\n opacity: 0.85;\n position: relative;\n}\n\n.artifact-wrapper.system-artifact[_ngcontent-%COMP%]::before {\n content: 'SYSTEM';\n position: absolute;\n top: 8px;\n right: 8px;\n font-size: 9px;\n font-weight: 600;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 2px 6px;\n border-radius: 3px;\n letter-spacing: 0.5px;\n z-index: 10;\n}\n\n\n.multi-artifact-showcase[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 10px;\n margin-top: 12px;\n}\n\n\n\n.multi-artifact-showcase[_ngcontent-%COMP%] .artifact-message-card {\n margin: 0;\n}\n\n.multi-artifact-supporting-section[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n background: var(--mj-bg-surface-sunken);\n overflow: hidden;\n}\n\n.supporting-artifacts-header[_ngcontent-%COMP%] {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n background: color-mix(in srgb, var(--mj-bg-surface-sunken) 65%, var(--mj-bg-surface-card));\n border: none;\n border-bottom: 1px solid var(--mj-border-subtle);\n cursor: pointer;\n color: var(--mj-text-secondary);\n font-size: 12px;\n font-weight: 600;\n text-align: left;\n transition: background-color 0.15s ease;\n}\n\n.multi-artifact-supporting-section.is-collapsed[_ngcontent-%COMP%] .supporting-artifacts-header[_ngcontent-%COMP%] {\n border-bottom: none;\n}\n\n.supporting-artifacts-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.supporting-header-left[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n flex-wrap: wrap;\n}\n\n.supporting-header-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 12px;\n}\n\n.supporting-header-title[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n letter-spacing: 0.01em;\n}\n\n.supporting-header-count[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 18px;\n height: 18px;\n padding: 0 6px;\n border-radius: 999px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n font-size: 11px;\n font-weight: 600;\n}\n\n.supporting-collapsed-preview[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n margin-left: 4px;\n flex-wrap: wrap;\n min-width: 0;\n}\n\n.supporting-preview-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n max-width: 220px;\n padding: 2px 8px;\n border-radius: 999px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n font-size: 11px;\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.supporting-preview-index[_ngcontent-%COMP%] {\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-text-muted);\n}\n\n.supporting-header-right[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-text-muted);\n font-size: 11px;\n font-weight: 500;\n flex-shrink: 0;\n}\n\n.supporting-chevron[_ngcontent-%COMP%] {\n font-size: 10px;\n transition: transform 0.18s ease;\n}\n\n.supporting-chevron.rotated[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n}\n\n.supporting-artifacts-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));\n gap: 10px;\n padding: 12px 14px;\n}\n\n.supporting-artifact-cell[_ngcontent-%COMP%] {\n position: relative;\n min-width: 0;\n}\n\n.supporting-artifact-cell[_ngcontent-%COMP%] .artifact-info-bar {\n padding: 10px 44px 10px 12px;\n border-radius: 8px;\n}\n\n.supporting-step-badge[_ngcontent-%COMP%] {\n position: absolute;\n top: 50%;\n right: 12px;\n transform: translateY(-50%);\n z-index: 5;\n display: inline-flex;\n align-items: center;\n padding: 2px 6px;\n border-radius: 999px;\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n pointer-events: none;\n}\n\n.multi-artifact-primary-section[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 10px 14px 12px 14px;\n border-radius: 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 7%, var(--mj-bg-surface-card));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 38%, var(--mj-border-default));\n box-shadow: 0 2px 10px color-mix(in srgb, var(--mj-brand-primary) 8%, transparent);\n}\n\n.primary-artifact-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 7px;\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-brand-primary);\n}\n\n.primary-header-icon[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n.primary-step-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 1px 7px;\n border-radius: 999px;\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 32%, var(--mj-border-subtle));\n}\n\n.primary-artifact-card[_ngcontent-%COMP%] {\n min-width: 0;\n}\n\n.primary-artifact-card[_ngcontent-%COMP%] .artifact-info-bar {\n background: color-mix(in srgb, var(--mj-brand-primary) 11%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 38%, var(--mj-border-default));\n border-radius: 8px;\n}\n\n.primary-artifact-card[_ngcontent-%COMP%] .artifact-info-bar:hover {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n}\n\n.primary-artifact-card[_ngcontent-%COMP%] .artifact-icon {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface-sunken));\n color: var(--mj-brand-primary);\n}\n\n.message-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n position: relative;\n}\n\n.message-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 4px;\n font-size: 13px;\n}\n\n.message-sender[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n\n.agent-badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 2px 8px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.message-time[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 12px;\n font-weight: 400;\n}\n\n\n\n\n\n\n\n.time-pill[_ngcontent-%COMP%], \n.test-feedback-icon[_ngcontent-%COMP%], \n.message-action-group[_ngcontent-%COMP%], \n.agent-run-icon[_ngcontent-%COMP%] {\n margin-left: auto;\n}\n.time-pill[_ngcontent-%COMP%] ~ .test-feedback-icon[_ngcontent-%COMP%], \n.time-pill[_ngcontent-%COMP%] ~ .message-action-group[_ngcontent-%COMP%], \n.time-pill[_ngcontent-%COMP%] ~ .agent-run-icon[_ngcontent-%COMP%], \n.test-feedback-icon[_ngcontent-%COMP%] ~ .message-action-group[_ngcontent-%COMP%], \n.test-feedback-icon[_ngcontent-%COMP%] ~ .agent-run-icon[_ngcontent-%COMP%], \n.message-action-group[_ngcontent-%COMP%] ~ .agent-run-icon[_ngcontent-%COMP%] {\n margin-left: 8px;\n}\n\n\n\n.message-action-group[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: var(--mj-space-2);\n}\n\n.message-action-group.labeled[_ngcontent-%COMP%] {\n gap: var(--mj-space-4);\n}\n.message-header-action[_ngcontent-%COMP%] {\n gap: var(--mj-space-2);\n min-width: 20px;\n padding: 0;\n border: none;\n background: transparent;\n font: inherit;\n font-size: 12px;\n}\n.message-header-action[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n.message-header-action[_ngcontent-%COMP%]:focus-visible {\n outline: none;\n border-radius: var(--mj-radius-sm);\n box-shadow: var(--mj-focus-ring);\n}\n\n.message-item.fork-rail-inherited[_ngcontent-%COMP%] .message-header-action[_ngcontent-%COMP%]:not(:hover), \n.message-item.fork-rail-inherited[_ngcontent-%COMP%] .agent-run-icon[_ngcontent-%COMP%]:not(:hover):not(.expanded) {\n color: var(--mj-text-secondary);\n}\n.message-action-group[_ngcontent-%COMP%] .action-label-short[_ngcontent-%COMP%] {\n display: none;\n}\n\n\n.time-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 500;\n transition: all 0.3s ease;\n}\n\n.time-pill[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n\n\n.stop-run-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 8px;\n border-radius: 10px;\n border: 1px solid transparent;\n font-size: 11px;\n font-weight: 500;\n line-height: inherit;\n cursor: pointer;\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n transition: all 0.2s ease;\n}\n\n.stop-run-pill[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.stop-run-pill[_ngcontent-%COMP%]:hover:not(:disabled) {\n border-color: var(--mj-status-error);\n}\n\n.stop-run-pill[_ngcontent-%COMP%]:disabled {\n cursor: default;\n opacity: 0.7;\n}\n\n\n.time-pill.complete[_ngcontent-%COMP%] {\n background: var(--mj-status-info-bg);\n color: var(--mj-status-info-text);\n}\n\n\n\n.time-pill.stopped[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n\n.time-pill.in-progress[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n\n.time-pill.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n\n\n\n.time-pill.checking[_ngcontent-%COMP%] {\n background: var(--mj-status-warning-bg);\n color: var(--mj-status-warning-text);\n}\n\n.time-pill.stalled[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n}\n\n.time-pill[_ngcontent-%COMP%] .liveness-label[_ngcontent-%COMP%] {\n font-weight: 400;\n opacity: 0.85;\n}\n\n\n.time-pill.failed[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n}\n\n@keyframes _ngcontent-%COMP%_pillPulse {\n 0%, 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.85;\n }\n}\n\n\n.stopped-line[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n margin-top: var(--mj-space-2);\n font-size: var(--mj-text-xs);\n color: var(--mj-text-secondary);\n}\n.stopped-line[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n.stopped-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: var(--mj-space-2);\n margin-top: var(--mj-space-2);\n}\n\n\n.generation-time[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 8px;\n background: var(--mj-status-info-bg);\n border-radius: 10px;\n font-size: 11px;\n color: var(--mj-status-info-text);\n font-weight: 500;\n margin-left: auto;\n}\n\n.generation-time[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n\n.message-elapsed[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 11px;\n font-style: italic;\n}\n\n.message-body[_ngcontent-%COMP%] {\n margin-bottom: 0;\n}\n\n.message-text[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n line-height: 1.5;\n word-wrap: break-word;\n}\n\n\n.message-text[_ngcontent-%COMP%] mj-markdown[_ngcontent-%COMP%] > [_ngcontent-%COMP%]:first-child, \n.message-text[_ngcontent-%COMP%] .mj-markdown-container > :first-child {\n margin-top: 0;\n}\n\n.message-text[_ngcontent-%COMP%] mj-markdown[_ngcontent-%COMP%] > [_ngcontent-%COMP%]:last-child, \n.message-text[_ngcontent-%COMP%] .mj-markdown-container > :last-child {\n margin-bottom: 0;\n}\n\n\n.message-item.user-message[_ngcontent-%COMP%] .message-content[_ngcontent-%COMP%] {\n border-radius: 12px 12px 12px 4px;\n}\n\n.message-item.ai-message[_ngcontent-%COMP%] .message-content[_ngcontent-%COMP%] {\n border-radius: 4px 12px 12px 12px;\n}\n\n\n.message-reactions[_ngcontent-%COMP%] {\n display: none; \n}\n\n\n.artifact-card[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n margin-top: 12px;\n padding: 16px;\n border: 1px solid color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n border-radius: 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, var(--mj-bg-surface));\n cursor: pointer;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n max-width: 500px;\n box-shadow: var(--mj-shadow-sm);\n position: relative;\n overflow: hidden;\n}\n\n.artifact-card[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 3px;\n background: var(--mj-brand-primary);\n opacity: 1;\n}\n\n.artifact-card[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n box-shadow: var(--mj-shadow-md);\n transform: translateY(-1px);\n}\n\n.artifact-card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n}\n\n.artifact-card-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-brand-primary);\n flex-shrink: 0;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n border-radius: 6px;\n transition: all 0.2s ease;\n}\n\n.artifact-card[_ngcontent-%COMP%]:hover .artifact-card-icon[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n transform: scale(1.05);\n}\n\n.artifact-card-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 18px;\n}\n\n.artifact-card-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.artifact-card-label[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n letter-spacing: -0.01em;\n margin-bottom: 4px;\n}\n\n.artifact-card-description[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n}\n\n\n.thread-indicator[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n margin-top: 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n border-radius: 16px;\n cursor: pointer;\n transition: all 150ms ease;\n font-size: 12px;\n color: var(--mj-brand-primary-hover);\n font-weight: 500;\n}\n\n.thread-indicator[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.thread-indicator[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.thread-count[_ngcontent-%COMP%] {\n font-weight: 600;\n}\n\n\n.message-item.editing[_ngcontent-%COMP%] {\n background-color: var(--mj-status-warning-bg);\n border-left: 3px solid var(--mj-status-warning);\n}\n\n.message-edit-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.message-edit-textarea[_ngcontent-%COMP%] {\n width: 100%;\n padding: 12px;\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n font-family: inherit;\n font-size: 14px;\n line-height: 1.6;\n resize: vertical;\n min-height: 80px;\n transition: border-color 150ms ease;\n}\n\n.message-edit-textarea[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.edit-actions[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px;\n}\n\n\n.edit-note[_ngcontent-%COMP%] {\n margin-left: auto;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-secondary);\n}\n\n\n.message-item.pending-replace[_ngcontent-%COMP%] .message-body[_ngcontent-%COMP%] {\n opacity: 0.6;\n}\n\n.edit-hint[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n.edited-badge[_ngcontent-%COMP%] {\n margin-left: 8px;\n font-size: 11px;\n color: var(--mj-text-muted);\n font-style: italic;\n font-weight: normal;\n}\n\n\n.message-action-bar[_ngcontent-%COMP%] {\n margin-top: 12px;\n margin-bottom: 8px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px;\n}\n\n.action-bar-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.action-buttons[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n margin-left: 16px;\n padding-left: 16px;\n border-left: 1px solid var(--mj-border-default);\n}\n\n.action-bar-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 6px 10px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-text-muted);\n border-radius: 6px;\n font-size: 16px;\n line-height: 1;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s;\n min-width: 36px;\n height: 32px;\n opacity: 0.6;\n}\n\n.action-bar-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n line-height: 1;\n}\n\n\n.action-bar-btn.labeled[_ngcontent-%COMP%] {\n gap: var(--mj-space-2);\n min-width: 0;\n padding: 6px 12px;\n font-size: 13px;\n}\n\n.action-bar-btn.labeled[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.action-bar-btn[_ngcontent-%COMP%]:hover {\n opacity: 1;\n border-color: var(--mj-text-secondary);\n}\n\n.action-bar-btn.danger[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.action-bar-btn.danger[_ngcontent-%COMP%]:hover {\n opacity: 1;\n background: var(--mj-status-error-bg);\n border-color: var(--mj-status-error);\n}\n\n.action-bar-btn[_ngcontent-%COMP%] i.pinned[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.action-bar-btn.test-feedback[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}\n\n.action-bar-btn.test-feedback[_ngcontent-%COMP%]:hover {\n opacity: 1;\n background: var(--mj-status-warning-bg);\n border-color: var(--mj-status-warning);\n}\n\n\n.message-status[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n padding: 2px 8px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 4px;\n margin-left: 8px;\n animation: _ngcontent-%COMP%_statusPulse 2s ease-in-out infinite;\n}\n\n.message-status[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 11px;\n}\n\n.message-status.error[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.message-status.error[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.status-text[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n@keyframes _ngcontent-%COMP%_statusPulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.7; }\n}\n\n\n\n\n\n\n\n\n\n.agent-run-icon[_ngcontent-%COMP%], \n.message-header-action[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: 20px;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.2s ease;\n user-select: none;\n}\n\n.agent-run-icon[_ngcontent-%COMP%] {\n width: 20px;\n}\n\n.agent-run-icon[_ngcontent-%COMP%] i.fa-cog[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n.agent-run-icon[_ngcontent-%COMP%]:hover, \n.message-header-action[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-secondary);\n}\n\n.agent-run-icon.expanded[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n transform: scale(1.1);\n}\n\n\n\n.test-feedback-icon[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.2s ease;\n user-select: none;\n}\n\n.test-feedback-icon[_ngcontent-%COMP%] i.fa-flask[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n.test-feedback-icon[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary); \n transform: scale(1.1);\n}\n\n@keyframes _ngcontent-%COMP%_rotate {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n\n.agent-details-panel[_ngcontent-%COMP%] {\n margin-top: 12px;\n padding: 16px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n animation: _ngcontent-%COMP%_slideDown 0.2s ease;\n}\n\n@keyframes _ngcontent-%COMP%_slideDown {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n\n.agent-details-loading[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-text-secondary);\n font-size: 13px;\n}\n\n.agent-details-loading[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n\n.agent-details-error[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-status-error);\n font-size: 13px;\n}\n\n.agent-details-error[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n\n.agent-details-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 12px;\n padding-bottom: 8px;\n border-bottom: 1px solid var(--mj-border-default);\n font-weight: 600;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.agent-details-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.agent-name-link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n cursor: pointer;\n text-decoration: none;\n font-weight: 600;\n transition: all 0.2s ease;\n}\n\n.agent-name-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n text-decoration: underline;\n}\n\n\n.agent-details-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.detail-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 6px;\n border: 1px solid var(--mj-border-default);\n}\n\n.detail-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-primary);\n font-weight: 600;\n font-family: 'Monaco', 'Menlo', 'Consolas', monospace;\n}\n\n\n.status-badge[_ngcontent-%COMP%] {\n padding: 3px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-badge.status-pending[_ngcontent-%COMP%] {\n background: var(--mj-status-warning-bg);\n color: var(--mj-status-warning-text);\n}\n\n.status-badge.status-running[_ngcontent-%COMP%] {\n background: var(--mj-status-info-bg);\n color: var(--mj-status-info-text);\n}\n\n.status-badge.status-complete[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n.status-badge.status-failed[_ngcontent-%COMP%], \n.status-badge.status-error[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n}\n\n.status-badge.status-cancelled[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n\n.run-id-link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n cursor: pointer;\n text-decoration: none;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n transition: all 0.2s ease;\n}\n\n.run-id-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n text-decoration: underline;\n}\n\n.run-id-link[_ngcontent-%COMP%] i.fa-external-link-alt[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0.7;\n}\n\n\n.agent-details-tasks[_ngcontent-%COMP%] {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.tasks-section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 12px;\n font-weight: 600;\n font-size: 12px;\n color: var(--mj-text-primary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.tasks-section-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 11px;\n}\n\n.tasks-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.tasks-list[_ngcontent-%COMP%] mj-task-widget[_ngcontent-%COMP%] {\n display: block;\n}\n\n\n.artifact-version-badge[_ngcontent-%COMP%] {\n display: inline-block;\n margin-left: 8px;\n padding: 2px 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 11px;\n font-weight: 600;\n font-family: monospace;\n border-radius: 4px;\n vertical-align: middle;\n}\n\n\n.message-footer[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.rating-counts[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.rating-count[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.rating-count.thumbs-up[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.rating-count.thumbs-down[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.rating-total[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n\n.inline-delete[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n}\n\n.message-item.pinned[_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-status-warning);\n background-color: color-mix(in srgb, var(--mj-status-warning) 8%, transparent);\n}\n\n\n.ai-message-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-left: auto;\n}\n\n.action-bar-btn.pin-btn[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.action-bar-btn.pin-btn[_ngcontent-%COMP%]:hover {\n color: var(--mj-status-warning);\n border-color: var(--mj-status-warning);\n}\n\n.action-bar-btn.pin-btn.pinned[_ngcontent-%COMP%] {\n opacity: 1;\n color: var(--mj-status-warning);\n border-color: var(--mj-status-warning-border);\n background: color-mix(in srgb, var(--mj-status-warning) 10%, var(--mj-bg-surface));\n}\n\n\n.agent-panel-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 0 0;\n margin-top: 8px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n\n.agent-details-section[_ngcontent-%COMP%] {\n margin-top: 8px;\n}\n\n\n@media (max-width: 768px) {\n .message-item[_ngcontent-%COMP%] {\n padding: 8px 12px;\n gap: 8px;\n }\n\n .avatar-circle[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n font-size: 14px;\n }\n\n .artifact-card[_ngcontent-%COMP%] {\n max-width: 90vw;\n padding: 12px;\n }\n\n .artifact-card-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n }\n\n .artifact-card-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n\n .message-header[_ngcontent-%COMP%] {\n font-size: 12px;\n }\n\n .message-sender[_ngcontent-%COMP%] {\n font-size: 12px;\n }\n\n .message-time[_ngcontent-%COMP%] {\n font-size: 11px;\n }\n\n .agent-badge[_ngcontent-%COMP%] {\n font-size: 10px;\n padding: 1px 6px;\n }\n\n .time-pill[_ngcontent-%COMP%] {\n font-size: 10px;\n padding: 2px 6px;\n }\n\n \n .message-action-group[_ngcontent-%COMP%] .action-label-long[_ngcontent-%COMP%] {\n display: none;\n }\n\n .message-action-group[_ngcontent-%COMP%] .action-label-short[_ngcontent-%COMP%] {\n display: inline;\n }\n}\n\n\n@media (max-width: 480px) {\n .message-item[_ngcontent-%COMP%] {\n padding: 6px 8px;\n gap: 6px;\n }\n\n .avatar-circle[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n font-size: 12px;\n }\n\n .avatar-circle.ai-avatar[_ngcontent-%COMP%] {\n border-radius: 6px;\n }\n\n .artifact-card[_ngcontent-%COMP%] {\n padding: 10px;\n margin-top: 8px;\n }\n\n .artifact-card-header[_ngcontent-%COMP%] {\n gap: 8px;\n }\n\n .artifact-card-icon[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n }\n\n .artifact-card-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n }\n\n .artifact-card-label[_ngcontent-%COMP%] {\n font-size: 13px;\n }\n\n .artifact-card-description[_ngcontent-%COMP%] {\n font-size: 12px;\n }\n\n .message-header[_ngcontent-%COMP%] {\n font-size: 11px;\n gap: 6px;\n }\n\n .message-sender[_ngcontent-%COMP%] {\n font-size: 11px;\n }\n\n .message-time[_ngcontent-%COMP%] {\n font-size: 10px;\n }\n\n .agent-badge[_ngcontent-%COMP%] {\n font-size: 9px;\n padding: 1px 5px;\n }\n\n .time-pill[_ngcontent-%COMP%] {\n font-size: 9px;\n padding: 1px 5px;\n }\n\n .thread-indicator[_ngcontent-%COMP%] {\n padding: 4px 8px;\n font-size: 11px;\n margin-top: 6px;\n }\n\n .agent-details-panel[_ngcontent-%COMP%] {\n padding: 12px;\n margin-top: 8px;\n }\n\n .agent-details-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n gap: 8px;\n }\n\n .detail-row[_ngcontent-%COMP%] {\n padding: 6px 8px;\n }\n\n .detail-label[_ngcontent-%COMP%], \n .detail-value[_ngcontent-%COMP%] {\n font-size: 11px;\n }\n}\n\n\n[_nghost-%COMP%] .form-response-pill {\n margin: 0 3px;\n transition: all 0.2s ease;\n}\n\n\n[_nghost-%COMP%] .form-response-pill.single-field {\n display: inline-flex;\n align-items: center;\n vertical-align: middle;\n gap: 6px;\n padding: 4px 12px;\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n border: 2px solid color-mix(in srgb, var(--mj-status-success) 40%, transparent);\n border-radius: 16px;\n font-size: 13px;\n font-weight: 600;\n box-shadow: var(--mj-shadow-md);\n cursor: default;\n white-space: nowrap;\n}\n\n\n[_nghost-%COMP%] .form-response-pill.multi-field {\n display: inline-block;\n max-width: min(800px, 100%);\n width: auto;\n min-width: 400px;\n margin: 8px 0;\n vertical-align: top;\n}\n\n[_nghost-%COMP%] .form-response-pill.single-field i {\n font-size: 11px;\n opacity: 0.95;\n}\n\n[_nghost-%COMP%] .form-response-pill.single-field strong {\n font-weight: 600;\n margin-right: 4px;\n}\n\n\n[_nghost-%COMP%] .form-response-pill .pill-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n font-weight: 600;\n font-size: 13px;\n border-radius: 12px 12px 0 0;\n border: 2px solid color-mix(in srgb, var(--mj-status-success) 40%, transparent);\n border-bottom: none;\n box-shadow: var(--mj-shadow-md);\n}\n\n[_nghost-%COMP%] .form-response-pill .pill-header i {\n font-size: 12px;\n opacity: 0.95;\n}\n\n[_nghost-%COMP%] .form-response-pill .pill-fields {\n padding: 10px 12px;\n background: color-mix(in srgb, var(--mj-status-success) 8%, transparent);\n border: 2px solid color-mix(in srgb, var(--mj-status-success) 40%, transparent);\n border-top: none;\n border-radius: 0 0 12px 12px;\n}\n\n[_nghost-%COMP%] .form-response-pill .pill-field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 12px 0;\n font-size: 13px;\n}\n\n[_nghost-%COMP%] .form-response-pill .pill-field:not(:last-child) {\n border-bottom: 1px solid color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n padding-bottom: 12px;\n margin-bottom: 0;\n}\n\n[_nghost-%COMP%] .form-response-pill .field-question {\n font-weight: 600;\n color: var(--mj-status-success);\n font-size: 12px;\n line-height: 1.4;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n opacity: 0.9;\n}\n\n[_nghost-%COMP%] .form-response-pill .field-answer {\n color: var(--mj-text-primary);\n font-weight: 400;\n font-size: 15px;\n line-height: 1.6;\n padding: 8px 0 8px 12px;\n background: transparent;\n border-left: 3px solid color-mix(in srgb, var(--mj-status-success) 40%, transparent);\n font-style: italic;\n}\n\n\n\n[_nghost-%COMP%] .form-response-pill.single-field:hover {\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-lg);\n}\n\n[_nghost-%COMP%] .form-response-pill.multi-field:hover {\n transform: translateY(-1px);\n}\n\n[_nghost-%COMP%] .form-response-pill.multi-field:hover .pill-header {\n box-shadow: var(--mj-shadow-lg);\n}\n\n\n@media (max-width: 600px) {\n [_nghost-%COMP%] .form-response-pill.multi-field {\n min-width: 300px;\n }\n}\n\n@media (max-width: 400px) {\n [_nghost-%COMP%] .form-response-pill.multi-field {\n min-width: 100%;\n }\n\n [_nghost-%COMP%] .form-response-pill .field-question {\n font-size: 11px;\n }\n\n [_nghost-%COMP%] .form-response-pill .field-answer {\n font-size: 14px;\n padding: 6px 0 6px 10px;\n }\n}\n\n\n\n.message-attachments[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n margin-top: 12px;\n margin-bottom: 8px;\n}\n\n.attachment-item[_ngcontent-%COMP%] {\n position: relative;\n border-radius: 8px;\n overflow: hidden;\n cursor: pointer;\n transition: transform 0.2s, box-shadow 0.2s;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid color-mix(in srgb, var(--mj-text-primary) 10%, transparent);\n}\n\n.attachment-item[_ngcontent-%COMP%]:hover {\n transform: scale(1.02);\n box-shadow: var(--mj-shadow-md);\n}\n\n.attachment-item.image-attachment[_ngcontent-%COMP%] {\n width: 200px;\n height: 150px;\n}\n\n.attachment-thumbnail[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n}\n\n.attachment-overlay[_ngcontent-%COMP%] {\n position: absolute;\n inset: 0;\n background: var(--mj-bg-overlay);\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0;\n transition: opacity 0.2s;\n}\n\n.attachment-item[_ngcontent-%COMP%]:hover .attachment-overlay[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.attachment-overlay[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-inverse);\n font-size: 24px;\n}\n\n\n\n\n.attachment-strip[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px 12px 8px 8px;\n width: 320px;\n max-width: 100%;\n min-height: 56px;\n cursor: pointer;\n border-radius: 8px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n transition: background 0.15s, border-color 0.15s;\n}\n\n.attachment-strip[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n}\n\n.attachment-badge[_ngcontent-%COMP%] {\n flex: 0 0 auto;\n min-width: 48px;\n height: 48px;\n padding: 0 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 11px;\n font-weight: 700;\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-subtle);\n user-select: none;\n text-align: center;\n line-height: 1;\n white-space: nowrap;\n}\n\n.attachment-strip.is-artifact[_ngcontent-%COMP%] .attachment-badge[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.attachment-meta[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n min-width: 0; \n gap: 2px;\n}\n\n.attachment-strip[_ngcontent-%COMP%] .file-name[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.attachment-strip[_ngcontent-%COMP%] .file-size[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n\n@media (max-width: 600px) {\n .attachment-item.image-attachment[_ngcontent-%COMP%] {\n width: 150px;\n height: 112px;\n }\n\n .attachment-strip[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n\n[_nghost-%COMP%] .form-response-pill .field-answer-markdown {\n font-style: normal; \n font-size: 13.5px;\n line-height: 1.6;\n color: var(--mj-text-primary);\n}\n[_nghost-%COMP%] .form-response-pill .field-answer-markdown h1, \n[_nghost-%COMP%] .form-response-pill .field-answer-markdown h2, \n[_nghost-%COMP%] .form-response-pill .field-answer-markdown h3, \n[_nghost-%COMP%] .form-response-pill .field-answer-markdown h4 {\n font-size: 13.5px;\n font-weight: 700;\n margin: 10px 0 4px;\n color: var(--mj-text-primary);\n}\n[_nghost-%COMP%] .form-response-pill .field-answer-markdown p {\n margin: 6px 0;\n}\n[_nghost-%COMP%] .form-response-pill .field-answer-markdown ul, \n[_nghost-%COMP%] .form-response-pill .field-answer-markdown ol {\n margin: 6px 0;\n padding-left: 22px;\n}\n[_nghost-%COMP%] .form-response-pill .field-answer-markdown li {\n margin: 3px 0;\n}\n[_nghost-%COMP%] .form-response-pill .field-answer-markdown code {\n font-size: 12px;\n padding: 1px 5px;\n border-radius: 4px;\n background: color-mix(in srgb, var(--mj-status-success) 12%, transparent);\n}\n[_nghost-%COMP%] .form-response-pill .field-answer-markdown table {\n border-collapse: collapse;\n margin: 8px 0;\n}\n[_nghost-%COMP%] .form-response-pill .field-answer-markdown th, \n[_nghost-%COMP%] .form-response-pill .field-answer-markdown td {\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 25%, transparent);\n padding: 4px 10px;\n font-size: 12.5px;\n}\n\n\n.message-fork-chips[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: var(--mj-space-2);\n margin-top: var(--mj-space-2);\n}\n.message-fork-chips[_ngcontent-%COMP%] > button[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: var(--mj-space-2);\n max-width: 100%;\n min-width: 0;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: var(--mj-text-xs);\n}\n.message-fork-chips[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n.message-fork-chips[_ngcontent-%COMP%] .fork-chip-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-info);\n}\n.message-fork-chips[_ngcontent-%COMP%] > button[data-kind='Edit'][_ngcontent-%COMP%] .fork-chip-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}\n.message-fork-chips[_ngcontent-%COMP%] > button[data-kind='Regenerate'][_ngcontent-%COMP%] .fork-chip-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-tertiary);\n}\n.fork-chip-avatars[_ngcontent-%COMP%] {\n display: inline-flex;\n}\n.fork-chip-avatar[_ngcontent-%COMP%] {\n width: 20px;\n height: 20px;\n margin-left: -6px;\n border: 2px solid var(--mj-bg-surface);\n border-radius: var(--mj-radius-full);\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 9px;\n font-weight: 600;\n overflow: hidden;\n}\n.fork-chip-avatar[_ngcontent-%COMP%]:first-child {\n margin-left: 0;\n}\n.fork-chip-avatar[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n.fork-chip-messages[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--mj-text-link);\n}\n\n.fork-chip-name[_ngcontent-%COMP%] {\n font-weight: 500;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.fork-chip-time[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n\n\n.message-item.fork-rail-inherited[_ngcontent-%COMP%] {\n border-left: 2px dashed var(--mj-border-strong);\n padding-left: var(--mj-space-4);\n}\n.message-item.fork-rail-inherited[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] {\n opacity: 0.7;\n}\n.message-item.fork-rail-own[_ngcontent-%COMP%] {\n border-left: 2px solid var(--mj-brand-primary);\n padding-left: var(--mj-space-4);\n}\n\n\n.fork-marker[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n padding: var(--mj-space-2) var(--mj-space-6);\n font-size: var(--mj-text-xs);\n color: var(--mj-text-secondary);\n}\n.fork-marker[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-info);\n}\n.fork-marker-line[_ngcontent-%COMP%] {\n flex: 1;\n height: 1px;\n background: var(--mj-border-default);\n}\n\n@media (max-width: 768px) {\n .fork-marker[_ngcontent-%COMP%] {\n padding: var(--mj-space-2) var(--mj-space-3);\n }\n}\n@media (max-width: 480px) {\n .fork-marker[_ngcontent-%COMP%] {\n padding: var(--mj-space-2);\n }\n\n \n .edit-note[_ngcontent-%COMP%] {\n flex-basis: 100%;\n margin-left: 0;\n }\n}\n\n\n.workflow-execution-card[_ngcontent-%COMP%] {\n margin-top: 14px;\n margin-bottom: 10px;\n border-radius: 12px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-sm);\n overflow: hidden;\n transition: border-color 0.2s ease, box-shadow 0.2s ease;\n}\n\n.workflow-execution-card.workflow-status-running[_ngcontent-%COMP%] {\n border-color: color-mix(in srgb, var(--mj-brand-primary) 45%, var(--mj-border-default));\n box-shadow: 0 2px 12px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.workflow-execution-card.workflow-status-complete[_ngcontent-%COMP%] {\n border-color: color-mix(in srgb, var(--mj-status-success) 35%, var(--mj-border-default));\n}\n\n.workflow-execution-card.workflow-status-failed[_ngcontent-%COMP%] {\n border-color: color-mix(in srgb, var(--mj-status-error) 45%, var(--mj-border-default));\n}\n\n.workflow-card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 12px 16px;\n background: color-mix(in srgb, var(--mj-bg-surface-sunken) 55%, var(--mj-bg-surface-card));\n}\n\n.workflow-card-header.is-collapsible[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: background-color 0.15s ease;\n}\n\n.workflow-card-header.is-collapsible[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.workflow-header-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n min-width: 0;\n}\n\n.workflow-status-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 15px;\n flex-shrink: 0;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.workflow-status-complete[_ngcontent-%COMP%] .workflow-status-icon[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 14%, transparent);\n color: var(--mj-status-success);\n}\n\n.workflow-status-failed[_ngcontent-%COMP%] .workflow-status-icon[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 14%, transparent);\n color: var(--mj-status-error);\n}\n\n.workflow-title-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.workflow-title-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.workflow-title[_ngcontent-%COMP%] {\n font-size: 13.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.workflow-badge[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 999px;\n letter-spacing: 0.2px;\n}\n\n.workflow-badge.badge-running[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.workflow-badge.badge-complete[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 14%, transparent);\n color: var(--mj-status-success);\n}\n\n.workflow-badge.badge-failed[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 14%, transparent);\n color: var(--mj-status-error);\n}\n\n.workflow-subtitle[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 11.5px;\n color: var(--mj-text-muted);\n}\n\n.workflow-dot[_ngcontent-%COMP%] {\n opacity: 0.6;\n}\n\n.workflow-header-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.workflow-duration-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 9px;\n border-radius: 999px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n font-size: 11.5px;\n font-weight: 600;\n font-variant-numeric: tabular-nums;\n color: var(--mj-text-secondary);\n}\n\n.workflow-graph-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 999px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-border-subtle));\n color: var(--mj-brand-primary);\n font-size: 11.5px;\n font-weight: 600;\n cursor: pointer;\n transition: background-color 0.15s ease, border-color 0.15s ease, transform 0.12s ease;\n}\n\n.workflow-graph-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 18%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n transform: translateY(-1px);\n}\n\n.workflow-collapse-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 9px;\n border-radius: 999px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-muted);\n font-size: 11px;\n font-weight: 500;\n cursor: pointer;\n transition: background-color 0.15s ease, color 0.15s ease;\n}\n\n.workflow-collapse-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.workflow-collapse-chevron[_ngcontent-%COMP%] {\n font-size: 10px;\n transition: transform 0.18s ease;\n}\n\n.workflow-collapse-chevron.rotated[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n}\n\n.workflow-progress-track[_ngcontent-%COMP%] {\n height: 3px;\n width: 100%;\n background: var(--mj-border-subtle);\n overflow: hidden;\n}\n\n.workflow-progress-fill[_ngcontent-%COMP%] {\n height: 100%;\n background: var(--mj-status-success);\n transition: width 0.35s ease;\n}\n\n.workflow-progress-fill.is-running[_ngcontent-%COMP%] {\n background: linear-gradient(90deg, var(--mj-brand-primary), var(--mj-status-info));\n}\n\n.workflow-status-failed[_ngcontent-%COMP%] .workflow-progress-fill[_ngcontent-%COMP%] {\n background: var(--mj-status-error);\n}\n\n.workflow-steps-pipeline[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n padding: 10px 14px;\n}\n\n.workflow-step-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: stretch;\n gap: 12px;\n}\n\n.workflow-step-rail[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 24px;\n flex-shrink: 0;\n}\n\n.workflow-step-node[_ngcontent-%COMP%] {\n width: 22px;\n height: 22px;\n border-radius: 999px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 10.5px;\n font-weight: 700;\n margin-top: 6px;\n background: var(--mj-bg-surface-sunken);\n border: 1.5px solid var(--mj-border-default);\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n\n.step-status-in-progress[_ngcontent-%COMP%] .workflow-step-node[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.step-status-complete[_ngcontent-%COMP%] .workflow-step-node[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 16%, var(--mj-bg-surface));\n border-color: var(--mj-status-success);\n color: var(--mj-status-success);\n}\n\n.step-status-failed[_ngcontent-%COMP%] .workflow-step-node[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 16%, var(--mj-bg-surface));\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n}\n\n.step-status-skipped[_ngcontent-%COMP%] .workflow-step-node[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n border-style: dashed;\n border-color: var(--mj-border-strong);\n color: var(--mj-text-muted);\n}\n\n.step-status-skipped[_ngcontent-%COMP%] .workflow-step-name[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.workflow-skipped-count[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.workflow-step-connector[_ngcontent-%COMP%] {\n flex: 1;\n width: 2px;\n min-height: 12px;\n background: var(--mj-border-default);\n margin: 2px 0;\n}\n\n.workflow-step-connector.is-complete[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 55%, var(--mj-border-default));\n}\n\n.workflow-step-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n padding: 6px 10px;\n border-radius: 8px;\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.workflow-step-content[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.workflow-step-main-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.workflow-step-identity[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n flex-wrap: wrap;\n}\n\n.workflow-step-name[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.workflow-step-agent-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 7px;\n border-radius: 999px;\n font-size: 11px;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 22%, transparent);\n}\n\n.workflow-step-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.workflow-step-duration[_ngcontent-%COMP%] {\n font-size: 11.5px;\n font-variant-numeric: tabular-nums;\n color: var(--mj-text-muted);\n}\n\n.workflow-step-duration.is-skipped[_ngcontent-%COMP%] {\n padding: 1px 7px;\n border-radius: 999px;\n font-size: 10.5px;\n font-weight: 600;\n background: var(--mj-bg-surface-sunken);\n border: 1px dashed var(--mj-border-strong);\n color: var(--mj-text-muted);\n}\n\n.workflow-step-run-btn[_ngcontent-%COMP%] {\n border: none;\n background: transparent;\n color: var(--mj-text-muted);\n padding: 2px 5px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 11px;\n transition: color 0.15s, background 0.15s;\n}\n\n.workflow-step-run-btn[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.workflow-step-chevron[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n transition: transform 0.2s ease;\n}\n\n.workflow-step-chevron.rotated[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n}\n\n.workflow-step-details[_ngcontent-%COMP%] {\n margin-top: 6px;\n padding: 8px 10px;\n border-radius: 6px;\n background: var(--mj-bg-surface-sunken);\n border-left: 2px solid var(--mj-brand-primary);\n font-size: 12px;\n line-height: 1.5;\n color: var(--mj-text-secondary);\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n\n\n.workflow-continuation-banner[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n width: 100%;\n max-width: 100%;\n margin-bottom: 10px;\n padding: 6px 12px;\n border-radius: 8px;\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 26%, var(--mj-border-default));\n background: color-mix(in srgb, var(--mj-brand-primary) 7%, var(--mj-bg-surface-sunken));\n color: var(--mj-text-secondary);\n font-size: 12px;\n line-height: 1.35;\n cursor: pointer;\n text-align: left;\n transition: background 0.16s ease, border-color 0.16s ease, transform 0.16s ease;\n}\n\n.workflow-continuation-banner[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 13%, var(--mj-bg-surface-sunken));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 45%, var(--mj-border-default));\n}\n\n.continuation-banner-left[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n overflow: hidden;\n}\n\n.continuation-banner-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 12px;\n flex-shrink: 0;\n}\n\n.continuation-banner-label[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n\n.continuation-banner-sep[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n\n.continuation-banner-name[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.continuation-banner-jump[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n font-size: 11.5px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n flex-shrink: 0;\n}\n\n.message-item.workflow-origin-highlight[_ngcontent-%COMP%] {\n outline: 2px solid var(--mj-brand-primary);\n outline-offset: 2px;\n border-radius: 12px;\n transition: outline-color 0.3s ease;\n}", "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[class^=\"mj-icon-\"][_ngcontent-%COMP%], \n[class*=\" mj-icon-\"][_ngcontent-%COMP%] {\n font-style: normal;\n font-variant: normal;\n text-rendering: auto;\n -webkit-font-smoothing: antialiased;\n display: inline-block;\n font-size: inherit;\n line-height: 1;\n}\n\n\n\n\n\n\n\n\n\n.mj-icon-skip[_ngcontent-%COMP%] {\n width: 1.4em;\n height: 1.4em;\n display: inline-block;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n \n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 101.89918457031249 96.83947368421053'%3E%3Cg transform='translate(-0.1288232421875,-0.0)'%3E%3Cpath d='M93.85,41.56c-.84,0-1.62.2-2.37.55-3-4.35-7.49-8.12-13.04-11.04l.04-7.18v-14.44h-10.24v17.6c-1.52-.43-3.07-.8-4.67-1.11V0h-10.24v24.72s-.09,0-.14,0h-4.38s-.1,0-.14,0V7.3h-10.24v18.62c-1.6.32-3.15.69-4.67,1.11v-11.67h-10.24v6.09l.04,9.6c-5.55,2.92-10.04,6.7-13.04,11.04-.75-.35-1.53-.55-2.37-.55-4.5,0-8.14,5.61-8.14,12.51s3.64,12.53,8.14,12.53c.58,0,1.14-.12,1.67-.29,4.1,6.62,11.54,12.06,20.98,15.28l.79.13v7.05c0,2.97,1.45,5.58,3.87,6.99,1.18.69,2.5,1.04,3.85,1.03,1.4,0,2.83-.37,4.15-1.12l7.54-4.29,7.56,4.3c1.31.74,2.73,1.12,4.13,1.12s2.67-.35,3.85-1.04c2.42-1.41,3.86-4.02,3.86-6.98v-7.05l.79-.13c9.44-3.22,16.89-8.66,20.98-15.28.54.17,1.09.29,1.68.29,4.5,0,8.14-5.61,8.14-12.53s-3.63-12.51-8.14-12.51' fill='%23AAAAAA'/%3E%3Cpath d='M86.69,50.87c0-12.22-13.6-19.1-28.94-20.66-4.48-.47-9.19-.54-13.52,0-15.34,1.53-28.93,8.41-28.93,20.66,0,8.55,5.7,15.55,12.68,15.55h7.94c3.05,2.5,6.93,4.1,11.08,4.71,2.65.4,5.44.46,8.01,0,4.15-.6,8.05-2.2,11.1-4.71h7.92c6.97,0,12.68-7,12.68-15.55' fill='white' opacity='0.9'/%3E%3Cpath d='M57.83,55.82c-1.19,2.58-3.8,4.35-6.84,4.35s-5.65-1.77-6.84-4.35h13.68Z' fill='%23AAAAAA'/%3E%3Cpath d='M32.52,41.14c1.74,0,3.18,2.13,3.18,4.76s-1.44,4.74-3.18,4.74-3.16-2.13-3.16-4.74,1.41-4.76,3.16-4.76' fill='%23AAAAAA'/%3E%3Cpath d='M69.46,41.14c1.74,0,3.16,2.13,3.16,4.76s-1.41,4.74-3.16,4.74-3.18-2.13-3.18-4.74,1.41-4.76,3.18-4.76' fill='%23AAAAAA'/%3E%3Cpath d='M63.91,76.15c-.82-.48-1.84-.43-2.8.12l-10.13,5.75-10.11-5.75c-.96-.55-1.98-.59-2.8-.12-.82.47-1.29,1.38-1.29,2.49v10.12c0,1.11.47,2.02,1.28,2.49.38.22.8.33,1.24.33.51,0,1.05-.15,1.57-.44l10.12-5.75,10.11,5.75c.52.29,1.05.44,1.56.44.44,0,.86-.11,1.24-.33.81-.48,1.28-1.38,1.28-2.49v-10.12c0-1.11-.47-2.02-1.28-2.49' fill='white' opacity='0.9'/%3E%3C/g%3E%3C/svg%3E\");\n vertical-align: middle;\n}\n\n\n\n\n\n.mj-icon-skip-lightning[_ngcontent-%COMP%]::before {\n content: \"\u26A1\";\n color: var(--mj-brand-primary);\n font-size: 1.1em;\n}\n\n\n\n\n\n.mj-icon-skip-brain[_ngcontent-%COMP%]::before {\n content: \"\uD83E\uDDE0\";\n font-size: 1.2em;\n}\n\n\n\n\n\n.mj-icon-betty[_ngcontent-%COMP%] {\n width: 1.4em;\n height: 1.4em;\n display: inline-block;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n \n background-image: url(\"data:image/svg+xml,%3Csvg id='a' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 150'%3E%3Cpath d='M64.96,60.23h75.12c10.58,0,20.24,4.31,27.2,11.32,7.01,6.95,11.32,16.61,11.32,27.19s-4.31,20.24-11.32,27.19c-6.95,7.02-16.61,11.32-27.2,11.32h-75.12c-10.58,0-20.24-4.31-27.19-11.32-2.65-2.64-4.92-5.6-6.71-8.92-.24,0-.49.06-.74.06-2.46,0-4.67-1.05-6.34-2.65-1.6-1.66-2.58-3.87-2.58-6.34v-18.7c0-2.46.98-4.74,2.58-6.34,1.66-1.66,3.87-2.65,6.34-2.65.25,0,.49,0,.74.06,1.79-3.32,4.06-6.34,6.71-8.92,6.95-7.01,16.61-11.32,27.19-11.32' fill='%233d1252'/%3E%3Cpath d='M132.33,68.36h0c0,1.72-.74,3.32-1.91,4.49-1.11,1.17-2.71,1.84-4.49,1.84h-13.29c-1.78,0-3.32-.68-4.49-1.84-1.17-1.17-1.91-2.77-1.91-4.49h-12.92c-8.37,0-15.94,3.44-21.47,8.92-5.47,5.54-8.92,13.1-8.92,21.47v1.17l.06.37v.37l.06.43v.37l.06.37v.37l.06.37.06.43.06.37.06.37.06.37.06.37c0,.12.06.25.06.37l.06.37.12.37.06.37.12.37.06.37.12.37.12.31.06.37.12.37.12.37.12.31.12.37.12.37.19.31.12.37.12.37.12.31.18.37.12.31.19.31.18.37.12.31.18.31.19.37.18.31.18.31.19.31.18.31c.12.24.25.43.37.68l.19.25.24.31.19.31c.43.62.86,1.23,1.35,1.79l.18.24c.49.62.99,1.17,1.48,1.66.19.19.31.37.49.56.19.12.37.31.56.49.49.49,1.04.98,1.6,1.47l.31.19c.56.49,1.17.92,1.79,1.35.18.12.37.25.55.37l.31.25.31.18.31.19.37.18.31.18.31.19.31.18.31.19.37.12.31.19.31.18c.12.06.24.12.37.12l.31.19.37.12.31.19.37.12.31.12.37.19.37.12.31.12.37.12.37.12.37.06c.24.12.43.18.68.25l.37.12.37.06.37.12c.12,0,.25.06.37.06l.37.06.37.12.37.06.37.06.37.06.37.06.37.06.37.06.43.06h.37l.37.06h.37l.37.06h.8l.37.06h47.56c8.37,0,15.94-3.44,21.47-8.92,5.48-5.54,8.92-13.1,8.92-21.47s-3.44-15.94-8.92-21.47c-5.54-5.48-13.1-8.92-21.47-8.92h-7.75Z' fill='%23fff'/%3E%3Cpolygon points='54.93 12.74 85.57 55.25 106.12 55.25 106.12 34.89 106.12 34.7 105.75 34.7 54.93 12.74' fill='%233aba91'/%3E%3Cpolygon points='111.1 55.25 124.76 55.25 145 27.07 111.35 41.59 111.1 41.59 111.1 41.72 111.1 55.25' fill='%233aba91'/%3E%3Cpath d='M94.55,82.81c3.75,0,6.83,3.81,7.57,8.92.06.74-.31,1.35-.98,1.66-.61.31-1.35.18-1.84-.37-1.29-1.48-2.96-2.34-4.74-2.34s-3.38.86-4.67,2.34c-.49.55-1.23.68-1.91.37-.68-.31-1.05-.92-.92-1.66.68-5.11,3.81-8.92,7.51-8.92' fill='%233d1252'/%3E%3Cpath d='M132.08,115.24c-.31,1.05-.86,2.03-1.66,2.77-1.11,1.17-2.71,1.84-4.49,1.84h-13.29c-1.79,0-3.32-.68-4.49-1.84-.8-.74-1.36-1.72-1.66-2.77-.19-.68.06-1.41.68-1.84.56-.43,1.35-.49,1.97-.06.98.68,2.21,1.05,3.51,1.05h13.29c1.29,0,2.52-.37,3.51-1.05.61-.43,1.41-.37,1.97.06.62.43.86,1.17.68,1.84' fill='%233d1252'/%3E%3Cpath d='M144.02,82.81c3.69,0,6.83,3.81,7.51,8.92.12.74-.24,1.35-.92,1.66-.68.31-1.41.18-1.91-.37-1.29-1.48-2.89-2.34-4.67-2.34s-3.44.86-4.74,2.34c-.49.55-1.23.68-1.84.37-.68-.31-1.05-.92-.98-1.66.74-5.11,3.81-8.92,7.57-8.92' fill='%233d1252'/%3E%3C/svg%3E\");\n vertical-align: middle;\n}\n\n\n\n\n\n.mj-icon-izzy[_ngcontent-%COMP%] {\n width: 1.4em;\n height: 1.4em;\n display: inline-block;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n \n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 204 180'%3E%3Cpath d='M0 0 C3.61144774 3.08477828 4.84942137 4.90830493 5.5 9.625 C5 13 5 13 3.5 14.9375 C1.74432121 17.35155834 1.83578869 18.21944114 1.90625 21.12890625 C1.9371875 22.40636719 1.968125 23.68382813 2 25 C3.18335937 24.72285156 4.36671875 24.44570313 5.5859375 24.16015625 C22.44010416 20.26839867 22.44010416 20.26839867 30 20 C31.80210938 19.92265625 31.80210938 19.92265625 33.640625 19.84375 C47.49356199 19.44904163 61.73614427 20.86627802 75 25 C75.53596907 19.64244551 75.53596907 19.64244551 73.5 15 C71.5549761 12.4066348 71.45048389 10.16629658 71.59375 6.97265625 C72.33633815 3.36681955 74.01253991 1.99164006 77 0 C79.80907914 -0.63997166 82.18961327 -0.63020793 85 0 C87.8100346 1.79363911 89.50940468 3.01880935 91 6 C90.984375 8.05859375 90.984375 8.05859375 90.75 10.4375 C90.68296875 11.21996094 90.6159375 12.00242187 90.546875 12.80859375 C90 15 90 15 88.49609375 16.3984375 C86.25734576 18.79500846 86.4852344 20.97464008 86.3125 24.1875 C86.21388672 25.81751953 86.21388672 25.81751953 86.11328125 27.48046875 C86.07589844 28.31191406 86.03851563 29.14335937 86 30 C86.67675781 30.0825 87.35351562 30.165 88.05078125 30.25 C91.82333306 31.20937741 94.89353787 32.99425194 98.1875 35 C99.18052124 35.60448975 99.18052124 35.60448975 100.19360352 36.22119141 C111.98050012 43.58460075 121.17745776 53.2687532 127 66 C127 66.66 127 67.32 127 68 C127.721875 68.0825 128.44375 68.165 129.1875 68.25 C133.81406141 69.48374971 136.2179022 71.66516963 138.625 75.7734375 C140.97801199 81.55147269 140.43210927 87.87027126 140.375 94 C140.38660156 95.24523437 140.39820313 96.49046875 140.41015625 97.7734375 C140.3675701 111.08870765 140.3675701 111.08870765 135.5 116.7421875 C131.62323281 119.66995439 128.8523137 121.14337998 124 121.125 C122.9790625 121.12886719 122.9790625 121.12886719 121.9375 121.1328125 C120 121 120 121 117 120 C116.74347656 120.65226562 116.48695313 121.30453125 116.22265625 121.9765625 C115.83980469 122.85054688 115.45695313 123.72453125 115.0625 124.625 C114.70285156 125.48351562 114.34320313 126.34203125 113.97265625 127.2265625 C108.57908063 134.80960941 99.56813916 137.59212379 91.0625 140.375 C90.02287109 140.72949219 88.98324219 141.08398438 87.91210938 141.44921875 C80.34347852 144 80.34347852 144 78 144 C78.02094727 144.65484375 78.04189453 145.3096875 78.06347656 145.984375 C78.14730383 148.98942328 78.19886895 151.99422464 78.25 155 C78.28351563 156.02996094 78.31703125 157.05992187 78.3515625 158.12109375 C78.43361416 164.56214867 77.93369275 169.71304442 74 175 C68.75523423 179.17440541 64.68195675 180.53237245 58 180 C55.12653443 178.963898 52.49379495 177.58020045 49.8125 176.125 C49.11447266 175.76019531 48.41644531 175.39539063 47.69726562 175.01953125 C46.39868999 174.33997216 45.10309803 173.65465367 43.81176758 172.96142578 C43.21388428 172.64415527 42.61600098 172.32688477 42 172 C41.34290039 171.59402588 40.68580078 171.18805176 40.00878906 170.76977539 C38.03672401 169.77639533 38.03672401 169.77639533 36.12475586 170.58325195 C35.49448486 170.96441162 34.86421387 171.34557129 34.21484375 171.73828125 C33.17166992 172.35026367 33.17166992 172.35026367 32.10742188 172.97460938 C31.39134766 173.41611328 30.67527344 173.85761719 29.9375 174.3125 C28.51029236 175.1647359 27.08194984 176.01507485 25.65234375 176.86328125 C25.02320068 177.24782471 24.39405762 177.63236816 23.74584961 178.02856445 C19.79572932 180.2265128 16.44037501 180.296025 12 180 C6.82155197 178.33236419 3.95074467 176.59004726 1 172 C-0.72417326 168.34258111 -1.2403609 165.51230089 -1.1953125 161.48046875 C-1.18886719 160.45888672 -1.18242188 159.43730469 -1.17578125 158.38476562 C-1.15902344 157.32966797 -1.14226563 156.27457031 -1.125 155.1875 C-1.11597656 154.11306641 -1.10695312 153.03863281 -1.09765625 151.93164062 C-1.07415306 149.28753146 -1.04129575 146.64388128 -1 144 C-1.63196289 143.81171631 -2.26392578 143.62343262 -2.91503906 143.42944336 C-8.20708475 141.84808949 -13.49207901 140.2541307 -18.75 138.5625 C-19.98234375 138.17191406 -21.2146875 137.78132812 -22.484375 137.37890625 C-29.06200008 134.79901552 -34.12925122 130.90130551 -38 125 C-38.875 121.5625 -38.875 121.5625 -39 119 C-39.495 119.33 -39.99 119.66 -40.5 120 C-45.24354984 121.89741993 -49.49426304 121.53143657 -54.1875 119.875 C-58.42051121 117.05299253 -61.35909664 113.92271008 -63 109 C-63.22709306 104.92471184 -63.22828659 100.8492307 -63.24023438 96.76806641 C-63.2498982 94.77103695 -63.28108516 92.77414948 -63.3125 90.77734375 C-63.36188158 78.59243786 -63.36188158 78.59243786 -60 73 C-57.7509823 70.86631654 -55.88785241 69.35340008 -53.0078125 68.20703125 C-50.3010212 66.57979679 -49.65488803 64.83796148 -48.3125 62 C-45.06106922 55.7428385 -40.95735135 50.97447519 -36 46 C-35.40832031 45.38511719 -34.81664063 44.77023438 -34.20703125 44.13671875 C-28.97373562 39.11136864 -17.47215548 30 -10 30 C-10.08733973 27.91589342 -10.19552278 25.83265331 -10.3125 23.75 C-10.37050781 22.58984375 -10.42851563 21.4296875 -10.48828125 20.234375 C-11.02905532 16.81635262 -11.84853545 15.59874271 -14 13 C-14.54046356 8.75350057 -14.48376179 6.74176808 -12.125 3.125 C-8.57275398 -0.42724602 -4.8825369 -0.970906 0 0 Z M5 35 C4.30245605 35.21962402 3.60491211 35.43924805 2.88623047 35.66552734 C-14.1501062 41.15773444 -29.02751477 50.81254544 -39 66 C-39.33 66.99 -39.66 67.98 -40 69 C-37.525 70.98 -37.525 70.98 -35 73 C-34.52691406 72.29875 -34.05382812 71.5975 -33.56640625 70.875 C-21.08320269 52.96537462 -2.17172019 42.38052109 19.26171875 38.5078125 C46.97805996 34.9959591 75.10426623 38.71529466 97.73046875 56.09765625 C103.53827054 61.07953766 107.9264808 66.53902088 112 73 C113.32 72.01 114.64 71.02 116 70 C115.01713954 61.60788376 107.55262518 55.04847712 101.375 49.8125 C82.80696113 35.82916208 61.35998978 30.59265576 38.375 30.625 C37.71836365 30.62554382 37.06172729 30.62608765 36.38519287 30.62664795 C25.42439402 30.66823796 15.42390121 31.62072499 5 35 Z' fill='%234E3B78' transform='translate(63,0)'/%3E%3Cpath d='M0 0 C5.27957047 5.78547525 9.31612861 13.25448014 10 21.125 C9.69743213 24.83293961 8.77676366 26.8914086 6.1875 29.5625 C-2.04152489 35.76003038 -13.60917874 39.6270706 -23.875 38.8125 C-24.535 38.1525 -25.195 37.4925 -25.875 36.8125 C-28.97847254 36.48234335 -31.03281176 36.30718706 -33.75 37.9375 C-35.40354531 40.69340884 -35.26865568 42.66325452 -34.875 45.8125 C-33.95833333 47.89583333 -33.95833333 47.89583333 -31.875 48.8125 C-28.29166667 48.89583333 -28.29166667 48.89583333 -24.875 47.8125 C-24.57086182 47.16466553 -24.26672363 46.51683105 -23.95336914 45.84936523 C-22.875 43.8125 -22.875 43.8125 -20.77124023 42.88696289 C-19.91731689 42.6883667 -19.06339355 42.48977051 -18.18359375 42.28515625 C-17.23806641 42.04990234 -16.29253906 41.81464844 -15.31835938 41.57226562 C-14.32642578 41.34216797 -13.33449219 41.11207031 -12.3125 40.875 C-4.77934417 39.10870895 1.54823541 36.95205932 8.125 32.8125 C7.81647145 40.06292099 4.56245219 45.32546918 -0.5 50.4609375 C-5.29811284 54.61130511 -8.83216751 54.86916719 -15 55 C-21.13677833 55.26569953 -25.04589225 56.51893716 -29.890625 60.31640625 C-39.17633501 67.31724667 -52.82450605 66.52799961 -63.875 65.8125 C-71.37432145 64.60538489 -79.4496824 61.2378176 -84.875 55.8125 C-86.81199027 55.70419517 -88.75076074 55.60687514 -90.69067383 55.58691406 C-97.68300211 55.51299157 -103.12007731 55.4392364 -108.44140625 50.40234375 C-108.91449219 49.87769531 -109.38757813 49.35304688 -109.875 48.8125 C-110.6175 48.090625 -111.36 47.36875 -112.125 46.625 C-118.35765562 36.60823203 -119.69570866 25.34707186 -117.25 13.8828125 C-113.47065738 3.0509466 -104.76645407 -4.0120534 -94.875 -9.1875 C-91.26850975 -10.75400624 -87.62602625 -12.0153043 -83.875 -13.1875 C-83.029375 -13.47496094 -82.18375 -13.76242188 -81.3125 -14.05859375 C-56.0861494 -22.29657387 -20.04377266 -18.06142152 0 0 Z' fill='%23FDFDFD' transform='translate(155.875,64.1875)'/%3E%3Cpath d='M0 0 C5.24479788 1.58079188 9.51172656 4.60408712 14.06640625 7.58984375 C18.37837094 10.28462973 18.37837094 10.28462973 23.30859375 11.1328125 C28.49696048 9.20971132 33.08639658 6.29555589 37.79882812 3.42578125 C43.66838131 -0.00837477 43.66838131 -0.00837477 47.27734375 0.078125 C49.34375 1.0078125 49.34375 1.0078125 51.34375 3.0078125 C51.82984303 7.30136192 51.71414913 11.62739332 51.71875 15.9453125 C51.74324219 17.15123047 51.76773438 18.35714844 51.79296875 19.59960938 C51.79876953 21.33114258 51.79876953 21.33114258 51.8046875 23.09765625 C51.81290527 24.15847412 51.82112305 25.21929199 51.82958984 26.31225586 C51.34375 29.0078125 51.34375 29.0078125 49.48461914 30.87670898 C46.29658529 32.56106989 44.78123809 32.062357 41.34375 31.0078125 C37.60135447 29.03986817 34.07891261 26.72386924 30.53320312 24.42578125 C26.44214688 21.80182316 26.44214688 21.80182316 21.77734375 20.921875 C17.60401055 22.78413283 13.85973006 25.2663764 10.046875 27.76953125 C5.85335687 30.41401513 2.44659272 31.9581498 -2.65625 32.0078125 C-4.33203125 30.87695312 -4.33203125 30.87695312 -5.65625 29.0078125 C-6.04443359 26.328125 -6.04443359 26.328125 -6.0546875 23.1328125 C-6.05855469 21.98296875 -6.06242187 20.833125 -6.06640625 19.6484375 C-6.05480469 18.44703125 -6.04320313 17.245625 -6.03125 16.0078125 C-6.04285156 14.80640625 -6.05445312 13.605 -6.06640625 12.3671875 C-6.06253906 11.21734375 -6.05867188 10.0675 -6.0546875 8.8828125 C-6.05130371 7.82835937 -6.04791992 6.77390625 -6.04443359 5.6875 C-5.65625 3.0078125 -5.65625 3.0078125 -4.29736328 1.14111328 C-2.65625 0.0078125 -2.65625 0.0078125 0 0 Z' fill='%23FCFCFD' transform='translate(78.65625,136.9921875)'/%3E%3Cpath d='M0 0 C2.5 0.625 2.5 0.625 4.8125 2.625 C6.96830116 6.4575354 7.24792603 9.32007692 6.5 13.625 C5.34367254 15.98793002 4.35016245 17.77483755 2.5 19.625 C0.1875 20 0.1875 20 -2.5 19.625 C-5.06638215 17.47478793 -6.29103188 15.79226637 -6.88671875 12.46484375 C-7.08084032 8.45522921 -6.77549931 6.12498023 -4.8125 2.5625 C-2.5 0.625 -2.5 0.625 0 0 Z' fill='%2353417C' transform='translate(138.5,67.375)'/%3E%3Cpath d='M0 0 C2.5 0.6875 2.5 0.6875 4.8125 2.625 C7.08407605 6.74748987 7.32547179 10.07653131 6.5 14.6875 C4.8125 17.75 4.8125 17.75 2.5 19.6875 C-0.0625 20.25 -0.0625 20.25 -2.5 19.6875 C-5.30401904 17.38419865 -5.84979387 14.76309142 -6.4375 11.3125 C-6.72853275 7.71913649 -6.44645777 6.57011897 -4.875 3.125 C-2.5 0.6875 -2.5 0.6875 0 0 Z' fill='%23523F7B' transform='translate(64.5,67.3125)'/%3E%3Cpath d='M0 0 C8.91 0 17.82 0 27 0 C24.81183076 5.47042311 24.169236 6.55141452 19 9 C14.08609728 9.94526984 9.88605617 10.13992406 5.51171875 7.49609375 C3.4733513 5.76185217 1.65854906 4.10051199 0 2 C0 1.34 0 0.68 0 0 Z' fill='%23574680' transform='translate(88,95)'/%3E%3C/svg%3E\");\n vertical-align: middle;\n}\n\n\n\n\n\n\n\n\n.mj-icon-data-analyst[_ngcontent-%COMP%]::before {\n content: \"\uD83D\uDCCA\";\n font-size: 1.1em;\n}\n\n\n\n\n.mj-icon-api[_ngcontent-%COMP%]::before {\n content: \"\uD83D\uDD0C\";\n font-size: 1.1em;\n}\n\n\n\n\n.mj-icon-processing[_ngcontent-%COMP%]::before {\n content: \"\u2699\uFE0F\";\n display: inline-block;\n animation: _ngcontent-%COMP%_rotate-icon 2s linear infinite;\n}\n\n@keyframes _ngcontent-%COMP%_rotate-icon {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n\n\n\n\n.mj-icon-monogram-s[_ngcontent-%COMP%]::before {\n content: \"S\";\n font-weight: 800;\n font-family: system-ui, -apple-system, sans-serif;\n font-size: 1.1em;\n color: var(--mj-brand-primary);\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"] });
|
|
4619
|
+
i0.ɵɵconditional(ctx.ForkMarkerText ? 27 : -1);
|
|
4620
|
+
} }, dependencies: [i5.NgClass, i5.NgTemplateOutlet, i6.DefaultValueAccessor, i6.NgControlStatus, i6.NgModel, i7.MJButtonDirective, i8.ArtifactMessageCardComponent, i9.LoadingComponent, i4.MarkdownComponent, i10.DynamicFormComponent, i11.AgentHandoffCardComponent, i12.ActionableCommandsComponent, i13.ConversationMessageRatingComponent, i14.TaskWidgetComponent, i5.DatePipe], styles: [".message-item[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n padding: 8px 24px;\n transition: background-color 150ms ease;\n animation: _ngcontent-%COMP%_fadeIn 0.3s ease;\n position: relative;\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from {\n opacity: 0;\n transform: translateY(10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.message-item.ai-message[_ngcontent-%COMP%] {\n background-color: transparent;\n}\n\n.message-item.user-message[_ngcontent-%COMP%] {\n background-color: transparent;\n}\n\n\n.message-item.pin-beacon[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_pinBeacon 1.5s ease-out forwards;\n}\n\n@keyframes _ngcontent-%COMP%_pinBeacon {\n 0% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--mj-status-warning) 60%, transparent); }\n 20% { box-shadow: 0 0 0 8px color-mix(in srgb, var(--mj-status-warning) 35%, transparent); }\n 50% { box-shadow: 0 0 0 4px color-mix(in srgb, var(--mj-status-warning) 15%, transparent); }\n 70% { box-shadow: 0 0 0 6px color-mix(in srgb, var(--mj-status-warning) 20%, transparent); }\n 100% { box-shadow: none; }\n}\n\n\n.message-item.search-hit-highlight[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_searchHitHighlight 2s ease-out forwards;\n}\n\n@keyframes _ngcontent-%COMP%_searchHitHighlight {\n 0% { background-color: color-mix(in srgb, var(--mj-brand-primary) 18%, transparent); }\n 70% { background-color: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent); }\n 100% { background-color: transparent; }\n}\n\n.message-item.in-progress[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n border-left: 3px solid var(--mj-brand-primary);\n position: relative;\n}\n\n@keyframes _ngcontent-%COMP%_shimmer {\n 0% {\n background-position: -200% 0;\n }\n 100% {\n background-position: 200% 0;\n }\n}\n\n\n.message-item.in-progress[_ngcontent-%COMP%] .message-text[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n font-weight: 500;\n max-height: 150px;\n overflow-y: auto;\n display: block;\n}\n\n\n\n\n\n\n.message-item.in-progress.streaming[_ngcontent-%COMP%] .message-text[_ngcontent-%COMP%] {\n max-height: none;\n overflow-y: visible;\n font-weight: inherit;\n}\n\n\n\n.message-item.in-progress[_ngcontent-%COMP%] .avatar-circle[_ngcontent-%COMP%] {\n box-shadow: 0 0 0 0 color-mix(in srgb, var(--mj-brand-primary) 70%, transparent);\n animation: _ngcontent-%COMP%_pulse 2s ease-in-out infinite;\n}\n\n@keyframes _ngcontent-%COMP%_pulse {\n 0%, 100% {\n box-shadow: 0 0 0 0 color-mix(in srgb, var(--mj-brand-primary) 70%, transparent);\n }\n 50% {\n box-shadow: 0 0 0 8px color-mix(in srgb, var(--mj-brand-primary) 0%, transparent);\n }\n}\n\n.message-item[_ngcontent-%COMP%]:hover {\n background-color: color-mix(in srgb, var(--mj-text-primary) 2%, transparent);\n}\n\n\n[_nghost-%COMP%] .mention-badge {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 12px;\n margin: 0 3px;\n border-radius: 16px;\n font-weight: 600;\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n vertical-align: middle;\n white-space: nowrap;\n}\n\n[_nghost-%COMP%] .mention-badge.agent {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: 2px solid color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n box-shadow: var(--mj-shadow-md);\n}\n\n[_nghost-%COMP%] .mention-badge.user {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: 2px solid color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n box-shadow: var(--mj-shadow-md);\n}\n\n[_nghost-%COMP%] .mention-badge.entity {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n border: 2px solid color-mix(in srgb, var(--mj-status-success) 40%, transparent);\n box-shadow: var(--mj-shadow-md);\n}\n\n[_nghost-%COMP%] .mention-badge.query {\n background: var(--mj-status-warning);\n color: var(--mj-text-inverse);\n border: 2px solid color-mix(in srgb, var(--mj-status-warning) 40%, transparent);\n box-shadow: var(--mj-shadow-md);\n}\n\n[_nghost-%COMP%] .mention-badge.record {\n background: var(--mj-color-info, #2563eb);\n color: var(--mj-text-inverse, #fff);\n border: 2px solid color-mix(in srgb, var(--mj-color-info, #2563eb) 40%, transparent);\n box-shadow: var(--mj-shadow-md);\n text-decoration: none;\n}\n\n\n[_nghost-%COMP%] .mention-badge.record.icon-only {\n padding: 4px 7px;\n gap: 0;\n min-width: 1.65em;\n justify-content: center;\n}\n\n\n\n\n[_nghost-%COMP%] .mention-badge.skill {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n border: 2px solid color-mix(in srgb, var(--mj-text-inverse) 35%, transparent);\n border-radius: 4px;\n box-shadow: var(--mj-shadow-md);\n}\n\n[_nghost-%COMP%] .mention-badge i {\n font-size: 12px;\n opacity: 0.95;\n}\n\n\n[_nghost-%COMP%] .mention-badge i[class^=\"mj-icon-\"], \n[_nghost-%COMP%] .mention-badge i[class*=\" mj-icon-\"] {\n width: 16px;\n height: 16px;\n display: inline-block;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n vertical-align: middle;\n font-size: inherit;\n}\n\n\n[_nghost-%COMP%] .mention-badge i.mj-icon-skip {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 101.89918457031249 96.83947368421053'%3E%3Cg transform='translate(-0.1288232421875,-0.0)'%3E%3Cpath d='M93.85,41.56c-.84,0-1.62.2-2.37.55-3-4.35-7.49-8.12-13.04-11.04l.04-7.18v-14.44h-10.24v17.6c-1.52-.43-3.07-.8-4.67-1.11V0h-10.24v24.72s-.09,0-.14,0h-4.38s-.1,0-.14,0V7.3h-10.24v18.62c-1.6.32-3.15.69-4.67,1.11v-11.67h-10.24v6.09l.04,9.6c-5.55,2.92-10.04,6.7-13.04,11.04-.75-.35-1.53-.55-2.37-.55-4.5,0-8.14,5.61-8.14,12.51s3.64,12.53,8.14,12.53c.58,0,1.14-.12,1.67-.29,4.1,6.62,11.54,12.06,20.98,15.28l.79.13v7.05c0,2.97,1.45,5.58,3.87,6.99,1.18.69,2.5,1.04,3.85,1.03,1.4,0,2.83-.37,4.15-1.12l7.54-4.29,7.56,4.3c1.31.74,2.73,1.12,4.13,1.12s2.67-.35,3.85-1.04c2.42-1.41,3.86-4.02,3.86-6.98v-7.05l.79-.13c9.44-3.22,16.89-8.66,20.98-15.28.54.17,1.09.29,1.68.29,4.5,0,8.14-5.61,8.14-12.53s-3.63-12.51-8.14-12.51' fill='%23AAAAAA'/%3E%3Cpath d='M86.69,50.87c0-12.22-13.6-19.1-28.94-20.66-4.48-.47-9.19-.54-13.52,0-15.34,1.53-28.93,8.41-28.93,20.66,0,8.55,5.7,15.55,12.68,15.55h7.94c3.05,2.5,6.93,4.1,11.08,4.71,2.65.4,5.44.46,8.01,0,4.15-.6,8.05-2.2,11.1-4.71h7.92c6.97,0,12.68-7,12.68-15.55' fill='white' opacity='0.9'/%3E%3Cpath d='M57.83,55.82c-1.19,2.58-3.8,4.35-6.84,4.35s-5.65-1.77-6.84-4.35h13.68Z' fill='%23AAAAAA'/%3E%3Cpath d='M32.52,41.14c1.74,0,3.18,2.13,3.18,4.76s-1.44,4.74-3.18,4.74-3.16-2.13-3.16-4.74,1.41-4.76,3.16-4.76' fill='%23AAAAAA'/%3E%3Cpath d='M69.46,41.14c1.74,0,3.16,2.13,3.16,4.76s-1.41,4.74-3.16,4.74-3.18-2.13-3.18-4.74,1.41-4.76,3.18-4.76' fill='%23AAAAAA'/%3E%3Cpath d='M63.91,76.15c-.82-.48-1.84-.43-2.8.12l-10.13,5.75-10.11-5.75c-.96-.55-1.98-.59-2.8-.12-.82.47-1.29,1.38-1.29,2.49v10.12c0,1.11.47,2.02,1.28,2.49.38.22.8.33,1.24.33.51,0,1.05-.15,1.57-.44l10.12-5.75,10.11,5.75c.52.29,1.05.44,1.56.44.44,0,.86-.11,1.24-.33.81-.48,1.28-1.38,1.28-2.49v-10.12c0-1.11-.47-2.02-1.28-2.49' fill='white' opacity='0.9'/%3E%3C/g%3E%3C/svg%3E\");\n}\n\n\n[_nghost-%COMP%] .mention-badge i.mj-icon-betty {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Ccircle cx='50' cy='50' r='45' fill='%23FF6B6B'/%3E%3Ctext x='50' y='65' text-anchor='middle' font-size='40' fill='white' font-family='Arial, sans-serif' font-weight='bold'%3EB%3C/text%3E%3C/svg%3E\");\n}\n\n\n[_nghost-%COMP%] .mention-badge i.mj-icon-izzy {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 204 180'%3E%3Cpath d='M0 0 C3.61144774 3.08477828 4.84942137 4.90830493 5.5 9.625 C5 13 5 13 3.5 14.9375 C1.74432121 17.35155834 1.83578869 18.21944114 1.90625 21.12890625 C1.9371875 22.40636719 1.968125 23.68382813 2 25 C3.18335937 24.72285156 4.36671875 24.44570313 5.5859375 24.16015625 C22.44010416 20.26839867 22.44010416 20.26839867 30 20 C31.80210938 19.92265625 31.80210938 19.92265625 33.640625 19.84375 C47.49356199 19.44904163 61.73614427 20.86627802 75 25 C75.53596907 19.64244551 75.53596907 19.64244551 73.5 15 C71.5549761 12.4066348 71.45048389 10.16629658 71.59375 6.97265625 C72.33633815 3.36681955 74.01253991 1.99164006 77 0 C79.80907914 -0.63997166 82.18961327 -0.63020793 85 0 C87.8100346 1.79363911 89.50940468 3.01880935 91 6 C90.984375 8.05859375 90.984375 8.05859375 90.75 10.4375 C90.68296875 11.21996094 90.6159375 12.00242187 90.546875 12.80859375 C90 15 90 15 88.49609375 16.3984375 C86.25734576 18.79500846 86.4852344 20.97464008 86.3125 24.1875 C86.21388672 25.81751953 86.21388672 25.81751953 86.11328125 27.48046875 C86.07589844 28.31191406 86.03851563 29.14335937 86 30 C86.67675781 30.0825 87.35351562 30.165 88.05078125 30.25 C91.82333306 31.20937741 94.89353787 32.99425194 98.1875 35 C99.18052124 35.60448975 99.18052124 35.60448975 100.19360352 36.22119141 C111.98050012 43.58460075 121.17745776 53.2687532 127 66 C127 66.66 127 67.32 127 68 C127.721875 68.0825 128.44375 68.165 129.1875 68.25 C133.81406141 69.48374971 136.2179022 71.66516963 138.625 75.7734375 C140.97801199 81.55147269 140.43210927 87.87027126 140.375 94 C140.38660156 95.24523437 140.39820313 96.49046875 140.41015625 97.7734375 C140.3675701 111.08870765 140.3675701 111.08870765 135.5 116.7421875 C131.62323281 119.66995439 128.8523137 121.14337998 124 121.125 C122.9790625 121.12886719 122.9790625 121.12886719 121.9375 121.1328125 C120 121 120 121 117 120 C116.74347656 120.65226562 116.48695313 121.30453125 116.22265625 121.9765625 C115.83980469 122.85054688 115.45695313 123.72453125 115.0625 124.625 C114.70285156 125.48351562 114.34320313 126.34203125 113.97265625 127.2265625 C108.57908063 134.80960941 99.56813916 137.59212379 91.0625 140.375 C90.02287109 140.72949219 88.98324219 141.08398438 87.91210938 141.44921875 C80.34347852 144 80.34347852 144 78 144 C78.02094727 144.65484375 78.04189453 145.3096875 78.06347656 145.984375 C78.14730383 148.98942328 78.19886895 151.99422464 78.25 155 C78.28351563 156.02996094 78.31703125 157.05992187 78.3515625 158.12109375 C78.43361416 164.56214867 77.93369275 169.71304442 74 175 C68.75523423 179.17440541 64.68195675 180.53237245 58 180 C55.12653443 178.963898 52.49379495 177.58020045 49.8125 176.125 C49.11447266 175.76019531 48.41644531 175.39539063 47.69726562 175.01953125 C46.39868999 174.33997216 45.10309803 173.65465367 43.81176758 172.96142578 C43.21388428 172.64415527 42.61600098 172.32688477 42 172 C41.34290039 171.59402588 40.68580078 171.18805176 40.00878906 170.76977539 C38.03672401 169.77639533 38.03672401 169.77639533 36.12475586 170.58325195 C35.49448486 170.96441162 34.86421387 171.34557129 34.21484375 171.73828125 C33.17166992 172.35026367 33.17166992 172.35026367 32.10742188 172.97460938 C31.39134766 173.41611328 30.67527344 173.85761719 29.9375 174.3125 C28.51029236 175.1647359 27.08194984 176.01507485 25.65234375 176.86328125 C25.02320068 177.24782471 24.39405762 177.63236816 23.74584961 178.02856445 C19.79572932 180.2265128 16.44037501 180.296025 12 180 C6.82155197 178.33236419 3.95074467 176.59004726 1 172 C-0.72417326 168.34258111 -1.2403609 165.51230089 -1.1953125 161.48046875 C-1.18886719 160.45888672 -1.18242188 159.43730469 -1.17578125 158.38476562 C-1.15902344 157.32966797 -1.14226563 156.27457031 -1.125 155.1875 C-1.11597656 154.11306641 -1.10695312 153.03863281 -1.09765625 151.93164062 C-1.07415306 149.28753146 -1.04129575 146.64388128 -1 144 C-1.63196289 143.81171631 -2.26392578 143.62343262 -2.91503906 143.42944336 C-8.20708475 141.84808949 -13.49207901 140.2541307 -18.75 138.5625 C-19.98234375 138.17191406 -21.2146875 137.78132812 -22.484375 137.37890625 C-29.06200008 134.79901552 -34.12925122 130.90130551 -38 125 C-38.875 121.5625 -38.875 121.5625 -39 119 C-39.495 119.33 -39.99 119.66 -40.5 120 C-45.24354984 121.89741993 -49.49426304 121.53143657 -54.1875 119.875 C-58.42051121 117.05299253 -61.35909664 113.92271008 -63 109 C-63.22709306 104.92471184 -63.22828659 100.8492307 -63.24023438 96.76806641 C-63.2498982 94.77103695 -63.28108516 92.77414948 -63.3125 90.77734375 C-63.36188158 78.59243786 -63.36188158 78.59243786 -60 73 C-57.7509823 70.86631654 -55.88785241 69.35340008 -53.0078125 68.20703125 C-50.3010212 66.57979679 -49.65488803 64.83796148 -48.3125 62 C-45.06106922 55.7428385 -40.95735135 50.97447519 -36 46 C-35.40832031 45.38511719 -34.81664063 44.77023438 -34.20703125 44.13671875 C-28.97373562 39.11136864 -17.47215548 30 -10 30 C-10.08733973 27.91589342 -10.19552278 25.83265331 -10.3125 23.75 C-10.37050781 22.58984375 -10.42851563 21.4296875 -10.48828125 20.234375 C-11.02905532 16.81635262 -11.84853545 15.59874271 -14 13 C-14.54046356 8.75350057 -14.48376179 6.74176808 -12.125 3.125 C-8.57275398 -0.42724602 -4.8825369 -0.970906 0 0 Z M5 35 C4.30245605 35.21962402 3.60491211 35.43924805 2.88623047 35.66552734 C-14.1501062 41.15773444 -29.02751477 50.81254544 -39 66 C-39.33 66.99 -39.66 67.98 -40 69 C-37.525 70.98 -37.525 70.98 -35 73 C-34.52691406 72.29875 -34.05382812 71.5975 -33.56640625 70.875 C-21.08320269 52.96537462 -2.17172019 42.38052109 19.26171875 38.5078125 C46.97805996 34.9959591 75.10426623 38.71529466 97.73046875 56.09765625 C103.53827054 61.07953766 107.9264808 66.53902088 112 73 C113.32 72.01 114.64 71.02 116 70 C115.01713954 61.60788376 107.55262518 55.04847712 101.375 49.8125 C82.80696113 35.82916208 61.35998978 30.59265576 38.375 30.625 C37.71836365 30.62554382 37.06172729 30.62608765 36.38519287 30.62664795 C25.42439402 30.66823796 15.42390121 31.62072499 5 35 Z' fill='%234E3B78' transform='translate(63,0)'/%3E%3Cpath d='M0 0 C5.27957047 5.78547525 9.31612861 13.25448014 10 21.125 C9.69743213 24.83293961 8.77676366 26.8914086 6.1875 29.5625 C-2.04152489 35.76003038 -13.60917874 39.6270706 -23.875 38.8125 C-24.535 38.1525 -25.195 37.4925 -25.875 36.8125 C-28.97847254 36.48234335 -31.03281176 36.30718706 -33.75 37.9375 C-35.40354531 40.69340884 -35.26865568 42.66325452 -34.875 45.8125 C-33.95833333 47.89583333 -33.95833333 47.89583333 -31.875 48.8125 C-28.29166667 48.89583333 -28.29166667 48.89583333 -24.875 47.8125 C-24.57086182 47.16466553 -24.26672363 46.51683105 -23.95336914 45.84936523 C-22.875 43.8125 -22.875 43.8125 -20.77124023 42.88696289 C-19.91731689 42.6883667 -19.06339355 42.48977051 -18.18359375 42.28515625 C-17.23806641 42.04990234 -16.29253906 41.81464844 -15.31835938 41.57226562 C-14.32642578 41.34216797 -13.33449219 41.11207031 -12.3125 40.875 C-4.77934417 39.10870895 1.54823541 36.95205932 8.125 32.8125 C7.81647145 40.06292099 4.56245219 45.32546918 -0.5 50.4609375 C-5.29811284 54.61130511 -8.83216751 54.86916719 -15 55 C-21.13677833 55.26569953 -25.04589225 56.51893716 -29.890625 60.31640625 C-39.17633501 67.31724667 -52.82450605 66.52799961 -63.875 65.8125 C-71.37432145 64.60538489 -79.4496824 61.2378176 -84.875 55.8125 C-86.81199027 55.70419517 -88.75076074 55.60687514 -90.69067383 55.58691406 C-97.68300211 55.51299157 -103.12007731 55.4392364 -108.44140625 50.40234375 C-108.91449219 49.87769531 -109.38757813 49.35304688 -109.875 48.8125 C-110.6175 48.090625 -111.36 47.36875 -112.125 46.625 C-118.35765562 36.60823203 -119.69570866 25.34707186 -117.25 13.8828125 C-113.47065738 3.0509466 -104.76645407 -4.0120534 -94.875 -9.1875 C-91.26850975 -10.75400624 -87.62602625 -12.0153043 -83.875 -13.1875 C-83.029375 -13.47496094 -82.18375 -13.76242188 -81.3125 -14.05859375 C-56.0861494 -22.29657387 -20.04377266 -18.06142152 0 0 Z' fill='%23FDFDFD' transform='translate(155.875,64.1875)'/%3E%3Cpath d='M0 0 C5.24479788 1.58079188 9.51172656 4.60408712 14.06640625 7.58984375 C18.37837094 10.28462973 18.37837094 10.28462973 23.30859375 11.1328125 C28.49696048 9.20971132 33.08639658 6.29555589 37.79882812 3.42578125 C43.66838131 -0.00837477 43.66838131 -0.00837477 47.27734375 0.078125 C49.34375 1.0078125 49.34375 1.0078125 51.34375 3.0078125 C51.82984303 7.30136192 51.71414913 11.62739332 51.71875 15.9453125 C51.74324219 17.15123047 51.76773438 18.35714844 51.79296875 19.59960938 C51.79876953 21.33114258 51.79876953 21.33114258 51.8046875 23.09765625 C51.81290527 24.15847412 51.82112305 25.21929199 51.82958984 26.31225586 C51.34375 29.0078125 51.34375 29.0078125 49.48461914 30.87670898 C46.29658529 32.56106989 44.78123809 32.062357 41.34375 31.0078125 C37.60135447 29.03986817 34.07891261 26.72386924 30.53320312 24.42578125 C26.44214688 21.80182316 26.44214688 21.80182316 21.77734375 20.921875 C17.60401055 22.78413283 13.85973006 25.2663764 10.046875 27.76953125 C5.85335687 30.41401513 2.44659272 31.9581498 -2.65625 32.0078125 C-4.33203125 30.87695312 -4.33203125 30.87695312 -5.65625 29.0078125 C-6.04443359 26.328125 -6.04443359 26.328125 -6.0546875 23.1328125 C-6.05855469 21.98296875 -6.06242187 20.833125 -6.06640625 19.6484375 C-6.05480469 18.44703125 -6.04320313 17.245625 -6.03125 16.0078125 C-6.04285156 14.80640625 -6.05445312 13.605 -6.06640625 12.3671875 C-6.06253906 11.21734375 -6.05867188 10.0675 -6.0546875 8.8828125 C-6.05130371 7.82835937 -6.04791992 6.77390625 -6.04443359 5.6875 C-5.65625 3.0078125 -5.65625 3.0078125 -4.29736328 1.14111328 C-2.65625 0.0078125 -2.65625 0.0078125 0 0 Z' fill='%23FCFCFD' transform='translate(78.65625,136.9921875)'/%3E%3Cpath d='M0 0 C2.5 0.625 2.5 0.625 4.8125 2.625 C6.96830116 6.4575354 7.24792603 9.32007692 6.5 13.625 C5.34367254 15.98793002 4.35016245 17.77483755 2.5 19.625 C0.1875 20 0.1875 20 -2.5 19.625 C-5.06638215 17.47478793 -6.29103188 15.79226637 -6.88671875 12.46484375 C-7.08084032 8.45522921 -6.77549931 6.12498023 -4.8125 2.5625 C-2.5 0.625 -2.5 0.625 0 0 Z' fill='%2353417C' transform='translate(138.5,67.375)'/%3E%3Cpath d='M0 0 C2.5 0.6875 2.5 0.6875 4.8125 2.625 C7.08407605 6.74748987 7.32547179 10.07653131 6.5 14.6875 C4.8125 17.75 4.8125 17.75 2.5 19.6875 C-0.0625 20.25 -0.0625 20.25 -2.5 19.6875 C-5.30401904 17.38419865 -5.84979387 14.76309142 -6.4375 11.3125 C-6.72853275 7.71913649 -6.44645777 6.57011897 -4.875 3.125 C-2.5 0.6875 -2.5 0.6875 0 0 Z' fill='%23523F7B' transform='translate(64.5,67.3125)'/%3E%3Cpath d='M0 0 C8.91 0 17.82 0 27 0 C24.81183076 5.47042311 24.169236 6.55141452 19 9 C14.08609728 9.94526984 9.88605617 10.13992406 5.51171875 7.49609375 C3.4733513 5.76185217 1.65854906 4.10051199 0 2 C0 1.34 0 0.68 0 0 Z' fill='%23574680' transform='translate(88,95)'/%3E%3C/svg%3E\");\n}\n\n\n[_nghost-%COMP%] .mention-badge img {\n width: 16px;\n height: 16px;\n border-radius: 50%;\n object-fit: cover;\n vertical-align: middle;\n}\n\n[_nghost-%COMP%] .mention-badge:hover {\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-lg);\n}\n\n\n\n[_nghost-%COMP%] .mention-badge .preset-indicator {\n display: inline-block;\n font-size: 10px;\n font-weight: 600;\n font-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Roboto Mono', 'Courier New', monospace;\n background: rgba(255, 255, 255, 0.25);\n padding: 2px 6px;\n border-radius: 4px;\n margin-left: 4px;\n letter-spacing: 0.3px;\n text-transform: uppercase;\n border: 1px solid rgba(255, 255, 255, 0.15);\n}\n\n.message-avatar[_ngcontent-%COMP%] {\n flex-shrink: 0;\n}\n\n.avatar-circle[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 16px;\n color: var(--mj-text-inverse);\n}\n\n\n.avatar-circle.user-avatar[_ngcontent-%COMP%] {\n border-radius: 50%;\n background-color: var(--mj-text-primary);\n}\n\n\n.avatar-circle.ai-avatar[_ngcontent-%COMP%] {\n border-radius: 8px;\n background-color: var(--mj-brand-primary); \n}\n\n\n\n\n\n\n.avatar-circle.ai-avatar.avatar-has-image[_ngcontent-%COMP%] {\n background-color: transparent;\n overflow: hidden;\n}\n.avatar-circle.ai-avatar[_ngcontent-%COMP%] .avatar-image[_ngcontent-%COMP%] {\n border-radius: inherit;\n}\n\n.avatar-image[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 50%;\n}\n\n\n\n.artifact-pending[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 12px 16px;\n}\n\n\n.artifact-wrapper.system-artifact[_ngcontent-%COMP%] {\n opacity: 0.85;\n position: relative;\n}\n\n.artifact-wrapper.system-artifact[_ngcontent-%COMP%]::before {\n content: 'SYSTEM';\n position: absolute;\n top: 8px;\n right: 8px;\n font-size: 9px;\n font-weight: 600;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 2px 6px;\n border-radius: 3px;\n letter-spacing: 0.5px;\n z-index: 10;\n}\n\n\n.multi-artifact-showcase[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 10px;\n margin-top: 12px;\n}\n\n\n\n.multi-artifact-showcase[_ngcontent-%COMP%] .artifact-message-card {\n margin: 0;\n}\n\n.multi-artifact-supporting-section[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n background: var(--mj-bg-surface-sunken);\n overflow: hidden;\n}\n\n.supporting-artifacts-header[_ngcontent-%COMP%] {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n background: color-mix(in srgb, var(--mj-bg-surface-sunken) 65%, var(--mj-bg-surface-card));\n border: none;\n border-bottom: 1px solid var(--mj-border-subtle);\n cursor: pointer;\n color: var(--mj-text-secondary);\n font-size: 12px;\n font-weight: 600;\n text-align: left;\n transition: background-color 0.15s ease;\n}\n\n.multi-artifact-supporting-section.is-collapsed[_ngcontent-%COMP%] .supporting-artifacts-header[_ngcontent-%COMP%] {\n border-bottom: none;\n}\n\n.supporting-artifacts-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.supporting-header-left[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n flex-wrap: wrap;\n}\n\n.supporting-header-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 12px;\n}\n\n.supporting-header-title[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n letter-spacing: 0.01em;\n}\n\n.supporting-header-count[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 18px;\n height: 18px;\n padding: 0 6px;\n border-radius: 999px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n font-size: 11px;\n font-weight: 600;\n}\n\n.supporting-collapsed-preview[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n margin-left: 4px;\n flex-wrap: wrap;\n min-width: 0;\n}\n\n.supporting-preview-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n max-width: 220px;\n padding: 2px 8px;\n border-radius: 999px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n font-size: 11px;\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.supporting-preview-index[_ngcontent-%COMP%] {\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-text-muted);\n}\n\n.supporting-header-right[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-text-muted);\n font-size: 11px;\n font-weight: 500;\n flex-shrink: 0;\n}\n\n.supporting-chevron[_ngcontent-%COMP%] {\n font-size: 10px;\n transition: transform 0.18s ease;\n}\n\n.supporting-chevron.rotated[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n}\n\n.supporting-artifacts-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));\n gap: 10px;\n padding: 12px 14px;\n}\n\n.supporting-artifact-cell[_ngcontent-%COMP%] {\n position: relative;\n min-width: 0;\n}\n\n.supporting-artifact-cell[_ngcontent-%COMP%] .artifact-info-bar {\n padding: 10px 44px 10px 12px;\n border-radius: 8px;\n}\n\n.supporting-step-badge[_ngcontent-%COMP%] {\n position: absolute;\n top: 50%;\n right: 12px;\n transform: translateY(-50%);\n z-index: 5;\n display: inline-flex;\n align-items: center;\n padding: 2px 6px;\n border-radius: 999px;\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n pointer-events: none;\n}\n\n.multi-artifact-primary-section[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 10px 14px 12px 14px;\n border-radius: 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 7%, var(--mj-bg-surface-card));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 38%, var(--mj-border-default));\n box-shadow: 0 2px 10px color-mix(in srgb, var(--mj-brand-primary) 8%, transparent);\n}\n\n.primary-artifact-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 7px;\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-brand-primary);\n}\n\n.primary-header-icon[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n.primary-step-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 1px 7px;\n border-radius: 999px;\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 32%, var(--mj-border-subtle));\n}\n\n.primary-artifact-card[_ngcontent-%COMP%] {\n min-width: 0;\n}\n\n.primary-artifact-card[_ngcontent-%COMP%] .artifact-info-bar {\n background: color-mix(in srgb, var(--mj-brand-primary) 11%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 38%, var(--mj-border-default));\n border-radius: 8px;\n}\n\n.primary-artifact-card[_ngcontent-%COMP%] .artifact-info-bar:hover {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n}\n\n.primary-artifact-card[_ngcontent-%COMP%] .artifact-icon {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface-sunken));\n color: var(--mj-brand-primary);\n}\n\n.message-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n position: relative;\n}\n\n.message-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 4px;\n font-size: 13px;\n}\n\n.message-sender[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n\n.agent-badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 2px 8px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.message-time[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 12px;\n font-weight: 400;\n}\n\n\n\n\n\n\n\n.time-pill[_ngcontent-%COMP%], \n.test-feedback-icon[_ngcontent-%COMP%], \n.message-action-group[_ngcontent-%COMP%], \n.agent-run-icon[_ngcontent-%COMP%] {\n margin-left: auto;\n}\n.time-pill[_ngcontent-%COMP%] ~ .test-feedback-icon[_ngcontent-%COMP%], \n.time-pill[_ngcontent-%COMP%] ~ .message-action-group[_ngcontent-%COMP%], \n.time-pill[_ngcontent-%COMP%] ~ .agent-run-icon[_ngcontent-%COMP%], \n.test-feedback-icon[_ngcontent-%COMP%] ~ .message-action-group[_ngcontent-%COMP%], \n.test-feedback-icon[_ngcontent-%COMP%] ~ .agent-run-icon[_ngcontent-%COMP%], \n.message-action-group[_ngcontent-%COMP%] ~ .agent-run-icon[_ngcontent-%COMP%] {\n margin-left: 8px;\n}\n\n\n\n.message-action-group[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: var(--mj-space-2);\n}\n\n.message-action-group.labeled[_ngcontent-%COMP%] {\n gap: var(--mj-space-4);\n}\n.message-header-action[_ngcontent-%COMP%] {\n gap: var(--mj-space-2);\n min-width: 20px;\n padding: 0;\n border: none;\n background: transparent;\n font: inherit;\n font-size: 12px;\n}\n.message-header-action[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n.message-header-action[_ngcontent-%COMP%]:focus-visible {\n outline: none;\n border-radius: var(--mj-radius-sm);\n box-shadow: var(--mj-focus-ring);\n}\n\n.message-item.fork-rail-inherited[_ngcontent-%COMP%] .message-header-action[_ngcontent-%COMP%]:not(:hover), \n.message-item.fork-rail-inherited[_ngcontent-%COMP%] .agent-run-icon[_ngcontent-%COMP%]:not(:hover):not(.expanded) {\n color: var(--mj-text-secondary);\n}\n.message-action-group[_ngcontent-%COMP%] .action-label-short[_ngcontent-%COMP%] {\n display: none;\n}\n\n\n.time-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 500;\n transition: all 0.3s ease;\n}\n\n.time-pill[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n\n\n.stop-run-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 8px;\n border-radius: 10px;\n border: 1px solid transparent;\n font-size: 11px;\n font-weight: 500;\n line-height: inherit;\n cursor: pointer;\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n transition: all 0.2s ease;\n}\n\n.stop-run-pill[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.stop-run-pill[_ngcontent-%COMP%]:hover:not(:disabled) {\n border-color: var(--mj-status-error);\n}\n\n.stop-run-pill[_ngcontent-%COMP%]:disabled {\n cursor: default;\n opacity: 0.7;\n}\n\n\n.time-pill.complete[_ngcontent-%COMP%] {\n background: var(--mj-status-info-bg);\n color: var(--mj-status-info-text);\n}\n\n\n\n.time-pill.stopped[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n\n.time-pill.in-progress[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n\n.time-pill.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n\n\n\n.time-pill.checking[_ngcontent-%COMP%] {\n background: var(--mj-status-warning-bg);\n color: var(--mj-status-warning-text);\n}\n\n.time-pill.stalled[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n}\n\n.time-pill[_ngcontent-%COMP%] .liveness-label[_ngcontent-%COMP%] {\n font-weight: 400;\n opacity: 0.85;\n}\n\n\n.time-pill.failed[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n}\n\n@keyframes _ngcontent-%COMP%_pillPulse {\n 0%, 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.85;\n }\n}\n\n\n.stopped-line[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n margin-top: var(--mj-space-2);\n font-size: var(--mj-text-xs);\n color: var(--mj-text-secondary);\n}\n.stopped-line[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n.stopped-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: var(--mj-space-2);\n margin-top: var(--mj-space-2);\n}\n\n\n.generation-time[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 8px;\n background: var(--mj-status-info-bg);\n border-radius: 10px;\n font-size: 11px;\n color: var(--mj-status-info-text);\n font-weight: 500;\n margin-left: auto;\n}\n\n.generation-time[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n\n.message-elapsed[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 11px;\n font-style: italic;\n}\n\n.message-body[_ngcontent-%COMP%] {\n margin-bottom: 0;\n}\n\n.message-text[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n line-height: 1.5;\n word-wrap: break-word;\n}\n\n\n.message-text[_ngcontent-%COMP%] mj-markdown[_ngcontent-%COMP%] > [_ngcontent-%COMP%]:first-child, \n.message-text[_ngcontent-%COMP%] .mj-markdown-container > :first-child {\n margin-top: 0;\n}\n\n.message-text[_ngcontent-%COMP%] mj-markdown[_ngcontent-%COMP%] > [_ngcontent-%COMP%]:last-child, \n.message-text[_ngcontent-%COMP%] .mj-markdown-container > :last-child {\n margin-bottom: 0;\n}\n\n\n.message-item.user-message[_ngcontent-%COMP%] .message-content[_ngcontent-%COMP%] {\n border-radius: 12px 12px 12px 4px;\n}\n\n.message-item.ai-message[_ngcontent-%COMP%] .message-content[_ngcontent-%COMP%] {\n border-radius: 4px 12px 12px 12px;\n}\n\n\n.message-reactions[_ngcontent-%COMP%] {\n display: none; \n}\n\n\n.artifact-card[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n margin-top: 12px;\n padding: 16px;\n border: 1px solid color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n border-radius: 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, var(--mj-bg-surface));\n cursor: pointer;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n max-width: 500px;\n box-shadow: var(--mj-shadow-sm);\n position: relative;\n overflow: hidden;\n}\n\n.artifact-card[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 3px;\n background: var(--mj-brand-primary);\n opacity: 1;\n}\n\n.artifact-card[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n box-shadow: var(--mj-shadow-md);\n transform: translateY(-1px);\n}\n\n.artifact-card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n}\n\n.artifact-card-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-brand-primary);\n flex-shrink: 0;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n border-radius: 6px;\n transition: all 0.2s ease;\n}\n\n.artifact-card[_ngcontent-%COMP%]:hover .artifact-card-icon[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n transform: scale(1.05);\n}\n\n.artifact-card-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 18px;\n}\n\n.artifact-card-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.artifact-card-label[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n letter-spacing: -0.01em;\n margin-bottom: 4px;\n}\n\n.artifact-card-description[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n}\n\n\n.thread-indicator[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n margin-top: 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n border-radius: 16px;\n cursor: pointer;\n transition: all 150ms ease;\n font-size: 12px;\n color: var(--mj-brand-primary-hover);\n font-weight: 500;\n}\n\n.thread-indicator[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.thread-indicator[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.thread-count[_ngcontent-%COMP%] {\n font-weight: 600;\n}\n\n\n.message-item.editing[_ngcontent-%COMP%] {\n background-color: var(--mj-status-warning-bg);\n border-left: 3px solid var(--mj-status-warning);\n}\n\n.message-edit-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.message-edit-textarea[_ngcontent-%COMP%] {\n width: 100%;\n padding: 12px;\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n font-family: inherit;\n font-size: 14px;\n line-height: 1.6;\n resize: vertical;\n min-height: 80px;\n transition: border-color 150ms ease;\n}\n\n.message-edit-textarea[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.edit-actions[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px;\n}\n\n\n.edit-note[_ngcontent-%COMP%] {\n margin-left: auto;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-secondary);\n}\n\n\n.message-item.pending-replace[_ngcontent-%COMP%] .message-body[_ngcontent-%COMP%] {\n opacity: 0.6;\n}\n\n.edit-hint[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n.edited-badge[_ngcontent-%COMP%] {\n margin-left: 8px;\n font-size: 11px;\n color: var(--mj-text-muted);\n font-style: italic;\n font-weight: normal;\n}\n\n\n.message-action-bar[_ngcontent-%COMP%] {\n margin-top: 12px;\n margin-bottom: 8px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px;\n}\n\n.action-bar-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.action-buttons[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n margin-left: 16px;\n padding-left: 16px;\n border-left: 1px solid var(--mj-border-default);\n}\n\n.action-bar-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 6px 10px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-text-muted);\n border-radius: 6px;\n font-size: 16px;\n line-height: 1;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s;\n min-width: 36px;\n height: 32px;\n opacity: 0.6;\n}\n\n.action-bar-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n line-height: 1;\n}\n\n\n.action-bar-btn.labeled[_ngcontent-%COMP%] {\n gap: var(--mj-space-2);\n min-width: 0;\n padding: 6px 12px;\n font-size: 13px;\n}\n\n.action-bar-btn.labeled[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.action-bar-btn[_ngcontent-%COMP%]:hover {\n opacity: 1;\n border-color: var(--mj-text-secondary);\n}\n\n.action-bar-btn.danger[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.action-bar-btn.danger[_ngcontent-%COMP%]:hover {\n opacity: 1;\n background: var(--mj-status-error-bg);\n border-color: var(--mj-status-error);\n}\n\n.action-bar-btn[_ngcontent-%COMP%] i.pinned[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.action-bar-btn.test-feedback[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}\n\n.action-bar-btn.test-feedback[_ngcontent-%COMP%]:hover {\n opacity: 1;\n background: var(--mj-status-warning-bg);\n border-color: var(--mj-status-warning);\n}\n\n\n.message-status[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n padding: 2px 8px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 4px;\n margin-left: 8px;\n animation: _ngcontent-%COMP%_statusPulse 2s ease-in-out infinite;\n}\n\n.message-status[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 11px;\n}\n\n.message-status.error[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.message-status.error[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.status-text[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n@keyframes _ngcontent-%COMP%_statusPulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.7; }\n}\n\n\n\n\n\n\n\n\n\n.agent-run-icon[_ngcontent-%COMP%], \n.message-header-action[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: 20px;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.2s ease;\n user-select: none;\n}\n\n.agent-run-icon[_ngcontent-%COMP%] {\n width: 20px;\n}\n\n.agent-run-icon[_ngcontent-%COMP%] i.fa-cog[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n.agent-run-icon[_ngcontent-%COMP%]:hover, \n.message-header-action[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-secondary);\n}\n\n.agent-run-icon.expanded[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n transform: scale(1.1);\n}\n\n\n\n.test-feedback-icon[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.2s ease;\n user-select: none;\n}\n\n.test-feedback-icon[_ngcontent-%COMP%] i.fa-flask[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n.test-feedback-icon[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary); \n transform: scale(1.1);\n}\n\n@keyframes _ngcontent-%COMP%_rotate {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n\n.agent-details-panel[_ngcontent-%COMP%] {\n margin-top: 12px;\n padding: 16px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n animation: _ngcontent-%COMP%_slideDown 0.2s ease;\n}\n\n@keyframes _ngcontent-%COMP%_slideDown {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n\n.agent-details-loading[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-text-secondary);\n font-size: 13px;\n}\n\n.agent-details-loading[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n\n.agent-details-error[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-status-error);\n font-size: 13px;\n}\n\n.agent-details-error[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n\n.agent-details-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 12px;\n padding-bottom: 8px;\n border-bottom: 1px solid var(--mj-border-default);\n font-weight: 600;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.agent-details-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.agent-name-link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n cursor: pointer;\n text-decoration: none;\n font-weight: 600;\n transition: all 0.2s ease;\n}\n\n.agent-name-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n text-decoration: underline;\n}\n\n\n.agent-details-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.detail-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 6px;\n border: 1px solid var(--mj-border-default);\n}\n\n.detail-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-primary);\n font-weight: 600;\n font-family: 'Monaco', 'Menlo', 'Consolas', monospace;\n}\n\n\n.status-badge[_ngcontent-%COMP%] {\n padding: 3px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-badge.status-pending[_ngcontent-%COMP%] {\n background: var(--mj-status-warning-bg);\n color: var(--mj-status-warning-text);\n}\n\n.status-badge.status-running[_ngcontent-%COMP%] {\n background: var(--mj-status-info-bg);\n color: var(--mj-status-info-text);\n}\n\n.status-badge.status-complete[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n.status-badge.status-failed[_ngcontent-%COMP%], \n.status-badge.status-error[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n}\n\n.status-badge.status-cancelled[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n\n.run-id-link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n cursor: pointer;\n text-decoration: none;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n transition: all 0.2s ease;\n}\n\n.run-id-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n text-decoration: underline;\n}\n\n.run-id-link[_ngcontent-%COMP%] i.fa-external-link-alt[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0.7;\n}\n\n\n.agent-details-tasks[_ngcontent-%COMP%] {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.tasks-section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 12px;\n font-weight: 600;\n font-size: 12px;\n color: var(--mj-text-primary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.tasks-section-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 11px;\n}\n\n.tasks-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.tasks-list[_ngcontent-%COMP%] mj-task-widget[_ngcontent-%COMP%] {\n display: block;\n}\n\n\n.artifact-version-badge[_ngcontent-%COMP%] {\n display: inline-block;\n margin-left: 8px;\n padding: 2px 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 11px;\n font-weight: 600;\n font-family: monospace;\n border-radius: 4px;\n vertical-align: middle;\n}\n\n\n.message-footer[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.rating-counts[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.rating-count[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.rating-count.thumbs-up[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.rating-count.thumbs-down[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.rating-total[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n\n.inline-delete[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n}\n\n.message-item.pinned[_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-status-warning);\n background-color: color-mix(in srgb, var(--mj-status-warning) 8%, transparent);\n}\n\n\n.ai-message-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-left: auto;\n}\n\n.action-bar-btn.pin-btn[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.action-bar-btn.pin-btn[_ngcontent-%COMP%]:hover {\n color: var(--mj-status-warning);\n border-color: var(--mj-status-warning);\n}\n\n.action-bar-btn.pin-btn.pinned[_ngcontent-%COMP%] {\n opacity: 1;\n color: var(--mj-status-warning);\n border-color: var(--mj-status-warning-border);\n background: color-mix(in srgb, var(--mj-status-warning) 10%, var(--mj-bg-surface));\n}\n\n\n.agent-panel-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 0 0;\n margin-top: 8px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n\n.agent-details-section[_ngcontent-%COMP%] {\n margin-top: 8px;\n}\n\n\n@media (max-width: 768px) {\n .message-item[_ngcontent-%COMP%] {\n padding: 8px 12px;\n gap: 8px;\n }\n\n .avatar-circle[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n font-size: 14px;\n }\n\n .artifact-card[_ngcontent-%COMP%] {\n max-width: 90vw;\n padding: 12px;\n }\n\n .artifact-card-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n }\n\n .artifact-card-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n\n .message-header[_ngcontent-%COMP%] {\n font-size: 12px;\n }\n\n .message-sender[_ngcontent-%COMP%] {\n font-size: 12px;\n }\n\n .message-time[_ngcontent-%COMP%] {\n font-size: 11px;\n }\n\n .agent-badge[_ngcontent-%COMP%] {\n font-size: 10px;\n padding: 1px 6px;\n }\n\n .time-pill[_ngcontent-%COMP%] {\n font-size: 10px;\n padding: 2px 6px;\n }\n\n \n .message-action-group[_ngcontent-%COMP%] .action-label-long[_ngcontent-%COMP%] {\n display: none;\n }\n\n .message-action-group[_ngcontent-%COMP%] .action-label-short[_ngcontent-%COMP%] {\n display: inline;\n }\n}\n\n\n@media (max-width: 480px) {\n .message-item[_ngcontent-%COMP%] {\n padding: 6px 8px;\n gap: 6px;\n }\n\n .avatar-circle[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n font-size: 12px;\n }\n\n .avatar-circle.ai-avatar[_ngcontent-%COMP%] {\n border-radius: 6px;\n }\n\n .artifact-card[_ngcontent-%COMP%] {\n padding: 10px;\n margin-top: 8px;\n }\n\n .artifact-card-header[_ngcontent-%COMP%] {\n gap: 8px;\n }\n\n .artifact-card-icon[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n }\n\n .artifact-card-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n }\n\n .artifact-card-label[_ngcontent-%COMP%] {\n font-size: 13px;\n }\n\n .artifact-card-description[_ngcontent-%COMP%] {\n font-size: 12px;\n }\n\n .message-header[_ngcontent-%COMP%] {\n font-size: 11px;\n gap: 6px;\n }\n\n .message-sender[_ngcontent-%COMP%] {\n font-size: 11px;\n }\n\n .message-time[_ngcontent-%COMP%] {\n font-size: 10px;\n }\n\n .agent-badge[_ngcontent-%COMP%] {\n font-size: 9px;\n padding: 1px 5px;\n }\n\n .time-pill[_ngcontent-%COMP%] {\n font-size: 9px;\n padding: 1px 5px;\n }\n\n .thread-indicator[_ngcontent-%COMP%] {\n padding: 4px 8px;\n font-size: 11px;\n margin-top: 6px;\n }\n\n .agent-details-panel[_ngcontent-%COMP%] {\n padding: 12px;\n margin-top: 8px;\n }\n\n .agent-details-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n gap: 8px;\n }\n\n .detail-row[_ngcontent-%COMP%] {\n padding: 6px 8px;\n }\n\n .detail-label[_ngcontent-%COMP%], \n .detail-value[_ngcontent-%COMP%] {\n font-size: 11px;\n }\n}\n\n\n[_nghost-%COMP%] .form-response-pill {\n margin: 0 3px;\n transition: all 0.2s ease;\n}\n\n\n[_nghost-%COMP%] .form-response-pill.single-field {\n display: inline-flex;\n align-items: center;\n vertical-align: middle;\n gap: 6px;\n padding: 4px 12px;\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n border: 2px solid color-mix(in srgb, var(--mj-status-success) 40%, transparent);\n border-radius: 16px;\n font-size: 13px;\n font-weight: 600;\n box-shadow: var(--mj-shadow-md);\n cursor: default;\n white-space: nowrap;\n}\n\n\n[_nghost-%COMP%] .form-response-pill.multi-field {\n display: inline-block;\n max-width: min(800px, 100%);\n width: auto;\n min-width: 400px;\n margin: 8px 0;\n vertical-align: top;\n}\n\n[_nghost-%COMP%] .form-response-pill.single-field i {\n font-size: 11px;\n opacity: 0.95;\n}\n\n[_nghost-%COMP%] .form-response-pill.single-field strong {\n font-weight: 600;\n margin-right: 4px;\n}\n\n\n[_nghost-%COMP%] .form-response-pill .pill-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n font-weight: 600;\n font-size: 13px;\n border-radius: 12px 12px 0 0;\n border: 2px solid color-mix(in srgb, var(--mj-status-success) 40%, transparent);\n border-bottom: none;\n box-shadow: var(--mj-shadow-md);\n}\n\n[_nghost-%COMP%] .form-response-pill .pill-header i {\n font-size: 12px;\n opacity: 0.95;\n}\n\n[_nghost-%COMP%] .form-response-pill .pill-fields {\n padding: 10px 12px;\n background: color-mix(in srgb, var(--mj-status-success) 8%, transparent);\n border: 2px solid color-mix(in srgb, var(--mj-status-success) 40%, transparent);\n border-top: none;\n border-radius: 0 0 12px 12px;\n}\n\n[_nghost-%COMP%] .form-response-pill .pill-field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 12px 0;\n font-size: 13px;\n}\n\n[_nghost-%COMP%] .form-response-pill .pill-field:not(:last-child) {\n border-bottom: 1px solid color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n padding-bottom: 12px;\n margin-bottom: 0;\n}\n\n[_nghost-%COMP%] .form-response-pill .field-question {\n font-weight: 600;\n color: var(--mj-status-success);\n font-size: 12px;\n line-height: 1.4;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n opacity: 0.9;\n}\n\n[_nghost-%COMP%] .form-response-pill .field-answer {\n color: var(--mj-text-primary);\n font-weight: 400;\n font-size: 15px;\n line-height: 1.6;\n padding: 8px 0 8px 12px;\n background: transparent;\n border-left: 3px solid color-mix(in srgb, var(--mj-status-success) 40%, transparent);\n font-style: italic;\n}\n\n\n\n[_nghost-%COMP%] .form-response-pill.single-field:hover {\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-lg);\n}\n\n[_nghost-%COMP%] .form-response-pill.multi-field:hover {\n transform: translateY(-1px);\n}\n\n[_nghost-%COMP%] .form-response-pill.multi-field:hover .pill-header {\n box-shadow: var(--mj-shadow-lg);\n}\n\n\n@media (max-width: 600px) {\n [_nghost-%COMP%] .form-response-pill.multi-field {\n min-width: 300px;\n }\n}\n\n@media (max-width: 400px) {\n [_nghost-%COMP%] .form-response-pill.multi-field {\n min-width: 100%;\n }\n\n [_nghost-%COMP%] .form-response-pill .field-question {\n font-size: 11px;\n }\n\n [_nghost-%COMP%] .form-response-pill .field-answer {\n font-size: 14px;\n padding: 6px 0 6px 10px;\n }\n}\n\n\n\n.message-attachments[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n margin-top: 12px;\n margin-bottom: 8px;\n}\n\n.attachment-item[_ngcontent-%COMP%] {\n position: relative;\n border-radius: 8px;\n overflow: hidden;\n cursor: pointer;\n transition: transform 0.2s, box-shadow 0.2s;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid color-mix(in srgb, var(--mj-text-primary) 10%, transparent);\n}\n\n.attachment-item[_ngcontent-%COMP%]:hover {\n transform: scale(1.02);\n box-shadow: var(--mj-shadow-md);\n}\n\n.attachment-item.image-attachment[_ngcontent-%COMP%] {\n width: 200px;\n height: 150px;\n}\n\n.attachment-thumbnail[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n}\n\n.attachment-overlay[_ngcontent-%COMP%] {\n position: absolute;\n inset: 0;\n background: var(--mj-bg-overlay);\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0;\n transition: opacity 0.2s;\n}\n\n.attachment-item[_ngcontent-%COMP%]:hover .attachment-overlay[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.attachment-overlay[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-inverse);\n font-size: 24px;\n}\n\n\n\n\n.attachment-strip[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px 12px 8px 8px;\n width: 320px;\n max-width: 100%;\n min-height: 56px;\n cursor: pointer;\n border-radius: 8px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n transition: background 0.15s, border-color 0.15s;\n}\n\n.attachment-strip[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n}\n\n.attachment-badge[_ngcontent-%COMP%] {\n flex: 0 0 auto;\n min-width: 48px;\n height: 48px;\n padding: 0 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 11px;\n font-weight: 700;\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-subtle);\n user-select: none;\n text-align: center;\n line-height: 1;\n white-space: nowrap;\n}\n\n.attachment-strip.is-artifact[_ngcontent-%COMP%] .attachment-badge[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.attachment-meta[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n min-width: 0; \n gap: 2px;\n}\n\n.attachment-strip[_ngcontent-%COMP%] .file-name[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.attachment-strip[_ngcontent-%COMP%] .file-size[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n\n@media (max-width: 600px) {\n .attachment-item.image-attachment[_ngcontent-%COMP%] {\n width: 150px;\n height: 112px;\n }\n\n .attachment-strip[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n\n[_nghost-%COMP%] .form-response-pill .field-answer-markdown {\n font-style: normal; \n font-size: 13.5px;\n line-height: 1.6;\n color: var(--mj-text-primary);\n}\n[_nghost-%COMP%] .form-response-pill .field-answer-markdown h1, \n[_nghost-%COMP%] .form-response-pill .field-answer-markdown h2, \n[_nghost-%COMP%] .form-response-pill .field-answer-markdown h3, \n[_nghost-%COMP%] .form-response-pill .field-answer-markdown h4 {\n font-size: 13.5px;\n font-weight: 700;\n margin: 10px 0 4px;\n color: var(--mj-text-primary);\n}\n[_nghost-%COMP%] .form-response-pill .field-answer-markdown p {\n margin: 6px 0;\n}\n[_nghost-%COMP%] .form-response-pill .field-answer-markdown ul, \n[_nghost-%COMP%] .form-response-pill .field-answer-markdown ol {\n margin: 6px 0;\n padding-left: 22px;\n}\n[_nghost-%COMP%] .form-response-pill .field-answer-markdown li {\n margin: 3px 0;\n}\n[_nghost-%COMP%] .form-response-pill .field-answer-markdown code {\n font-size: 12px;\n padding: 1px 5px;\n border-radius: 4px;\n background: color-mix(in srgb, var(--mj-status-success) 12%, transparent);\n}\n[_nghost-%COMP%] .form-response-pill .field-answer-markdown table {\n border-collapse: collapse;\n margin: 8px 0;\n}\n[_nghost-%COMP%] .form-response-pill .field-answer-markdown th, \n[_nghost-%COMP%] .form-response-pill .field-answer-markdown td {\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 25%, transparent);\n padding: 4px 10px;\n font-size: 12.5px;\n}\n\n\n.message-fork-chips[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: var(--mj-space-2);\n margin-top: var(--mj-space-2);\n}\n.message-fork-chips[_ngcontent-%COMP%] > button[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: var(--mj-space-2);\n max-width: 100%;\n min-width: 0;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: var(--mj-text-xs);\n}\n.message-fork-chips[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n.message-fork-chips[_ngcontent-%COMP%] .fork-chip-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-info);\n}\n.message-fork-chips[_ngcontent-%COMP%] > button[data-kind='Edit'][_ngcontent-%COMP%] .fork-chip-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}\n.message-fork-chips[_ngcontent-%COMP%] > button[data-kind='Regenerate'][_ngcontent-%COMP%] .fork-chip-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-tertiary);\n}\n.fork-chip-avatars[_ngcontent-%COMP%] {\n display: inline-flex;\n}\n.fork-chip-avatar[_ngcontent-%COMP%] {\n width: 20px;\n height: 20px;\n margin-left: -6px;\n border: 2px solid var(--mj-bg-surface);\n border-radius: var(--mj-radius-full);\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 9px;\n font-weight: 600;\n overflow: hidden;\n}\n.fork-chip-avatar[_ngcontent-%COMP%]:first-child {\n margin-left: 0;\n}\n.fork-chip-avatar[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n.fork-chip-messages[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--mj-text-link);\n}\n\n.fork-chip-name[_ngcontent-%COMP%] {\n font-weight: 500;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.fork-chip-time[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n\n\n.message-item.fork-rail-inherited[_ngcontent-%COMP%] {\n border-left: 2px dashed var(--mj-border-strong);\n padding-left: var(--mj-space-4);\n}\n.message-item.fork-rail-inherited[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] {\n opacity: 0.7;\n}\n.message-item.fork-rail-own[_ngcontent-%COMP%] {\n border-left: 2px solid var(--mj-brand-primary);\n padding-left: var(--mj-space-4);\n}\n\n\n.fork-marker[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n padding: var(--mj-space-2) var(--mj-space-6);\n font-size: var(--mj-text-xs);\n color: var(--mj-text-secondary);\n}\n.fork-marker[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-info);\n}\n.fork-marker-line[_ngcontent-%COMP%] {\n flex: 1;\n height: 1px;\n background: var(--mj-border-default);\n}\n\n@media (max-width: 768px) {\n .fork-marker[_ngcontent-%COMP%] {\n padding: var(--mj-space-2) var(--mj-space-3);\n }\n}\n@media (max-width: 480px) {\n .fork-marker[_ngcontent-%COMP%] {\n padding: var(--mj-space-2);\n }\n\n \n .edit-note[_ngcontent-%COMP%] {\n flex-basis: 100%;\n margin-left: 0;\n }\n}\n\n\n.message-item.handoff-source-transferred[_ngcontent-%COMP%] .message-text[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n}\n\n\n.message-item.target-block[_ngcontent-%COMP%] {\n position: relative;\n padding-left: var(--mj-space-6);\n}\n.message-item.target-block[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n left: 16px;\n top: 8px;\n bottom: 8px;\n width: 2px;\n border-radius: 2px;\n background: linear-gradient(\n 180deg,\n var(--mj-handoff-target, var(--mj-brand-primary)) 0%,\n color-mix(in srgb, var(--mj-handoff-target, var(--mj-brand-primary)) 22%, transparent) 100%\n );\n}\n\n\n.message-header[_ngcontent-%COMP%] .via[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n font-size: 11.5px;\n font-weight: 500;\n color: var(--mj-text-muted);\n padding: 2px 7px;\n border-radius: var(--mj-radius-full);\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n}\n.message-header[_ngcontent-%COMP%] .via[_ngcontent-%COMP%] .mini[_ngcontent-%COMP%] {\n width: 14px;\n height: 14px;\n border-radius: var(--mj-radius-full);\n background: var(--mj-handoff-source, var(--mj-brand-primary));\n color: var(--mj-text-inverse);\n font-size: 8.5px;\n font-weight: 700;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n flex-shrink: 0;\n}\n.message-header[_ngcontent-%COMP%] .via[_ngcontent-%COMP%] .mini[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n\n.message-header[_ngcontent-%COMP%] .pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 8px;\n border-radius: var(--mj-radius-full);\n font-size: 11px;\n font-weight: 600;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n}\n.message-header[_ngcontent-%COMP%] .pill--target[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-handoff-target, var(--mj-brand-primary)) 12%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-handoff-target, var(--mj-brand-primary)) 28%, var(--mj-border-default));\n color: var(--mj-handoff-target, var(--mj-brand-primary));\n}\n\n\n.message-body[_ngcontent-%COMP%] .joining[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n.message-body[_ngcontent-%COMP%] .joining-skeletons[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n margin-top: 8px;\n}\n.message-body[_ngcontent-%COMP%] .skeleton[_ngcontent-%COMP%] {\n height: 10px;\n border-radius: 5px;\n background: linear-gradient(\n 90deg,\n var(--mj-bg-surface-sunken) 0%,\n var(--mj-border-subtle) 50%,\n var(--mj-bg-surface-sunken) 100%\n );\n background-size: 200% 100%;\n animation: _ngcontent-%COMP%_shimmer 1.6s linear infinite;\n}\n.message-body[_ngcontent-%COMP%] .skeleton--wide[_ngcontent-%COMP%] {\n width: 72%;\n}\n.message-body[_ngcontent-%COMP%] .skeleton--narrow[_ngcontent-%COMP%] {\n width: 48%;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .message-body[_ngcontent-%COMP%] .skeleton[_ngcontent-%COMP%] {\n animation: none;\n }\n}\n\n\n.workflow-execution-card[_ngcontent-%COMP%] {\n margin-top: 14px;\n margin-bottom: 10px;\n border-radius: 12px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-sm);\n overflow: hidden;\n transition: border-color 0.2s ease, box-shadow 0.2s ease;\n}\n\n.workflow-execution-card.workflow-status-running[_ngcontent-%COMP%] {\n border-color: color-mix(in srgb, var(--mj-brand-primary) 45%, var(--mj-border-default));\n box-shadow: 0 2px 12px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.workflow-execution-card.workflow-status-complete[_ngcontent-%COMP%] {\n border-color: color-mix(in srgb, var(--mj-status-success) 35%, var(--mj-border-default));\n}\n\n.workflow-execution-card.workflow-status-failed[_ngcontent-%COMP%] {\n border-color: color-mix(in srgb, var(--mj-status-error) 45%, var(--mj-border-default));\n}\n\n.workflow-card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 12px 16px;\n background: color-mix(in srgb, var(--mj-bg-surface-sunken) 55%, var(--mj-bg-surface-card));\n}\n\n.workflow-card-header.is-collapsible[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: background-color 0.15s ease;\n}\n\n.workflow-card-header.is-collapsible[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.workflow-header-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n min-width: 0;\n}\n\n.workflow-status-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 15px;\n flex-shrink: 0;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.workflow-status-complete[_ngcontent-%COMP%] .workflow-status-icon[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 14%, transparent);\n color: var(--mj-status-success);\n}\n\n.workflow-status-failed[_ngcontent-%COMP%] .workflow-status-icon[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 14%, transparent);\n color: var(--mj-status-error);\n}\n\n.workflow-title-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.workflow-title-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.workflow-title[_ngcontent-%COMP%] {\n font-size: 13.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.workflow-badge[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 999px;\n letter-spacing: 0.2px;\n}\n\n.workflow-badge.badge-running[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.workflow-badge.badge-complete[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 14%, transparent);\n color: var(--mj-status-success);\n}\n\n.workflow-badge.badge-failed[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 14%, transparent);\n color: var(--mj-status-error);\n}\n\n.workflow-subtitle[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 11.5px;\n color: var(--mj-text-muted);\n}\n\n.workflow-dot[_ngcontent-%COMP%] {\n opacity: 0.6;\n}\n\n.workflow-header-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.workflow-duration-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 9px;\n border-radius: 999px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n font-size: 11.5px;\n font-weight: 600;\n font-variant-numeric: tabular-nums;\n color: var(--mj-text-secondary);\n}\n\n.workflow-graph-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 999px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-border-subtle));\n color: var(--mj-brand-primary);\n font-size: 11.5px;\n font-weight: 600;\n cursor: pointer;\n transition: background-color 0.15s ease, border-color 0.15s ease, transform 0.12s ease;\n}\n\n.workflow-graph-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 18%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n transform: translateY(-1px);\n}\n\n.workflow-collapse-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 9px;\n border-radius: 999px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-muted);\n font-size: 11px;\n font-weight: 500;\n cursor: pointer;\n transition: background-color 0.15s ease, color 0.15s ease;\n}\n\n.workflow-collapse-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.workflow-collapse-chevron[_ngcontent-%COMP%] {\n font-size: 10px;\n transition: transform 0.18s ease;\n}\n\n.workflow-collapse-chevron.rotated[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n}\n\n.workflow-progress-track[_ngcontent-%COMP%] {\n height: 3px;\n width: 100%;\n background: var(--mj-border-subtle);\n overflow: hidden;\n}\n\n.workflow-progress-fill[_ngcontent-%COMP%] {\n height: 100%;\n background: var(--mj-status-success);\n transition: width 0.35s ease;\n}\n\n.workflow-progress-fill.is-running[_ngcontent-%COMP%] {\n background: linear-gradient(90deg, var(--mj-brand-primary), var(--mj-status-info));\n}\n\n.workflow-status-failed[_ngcontent-%COMP%] .workflow-progress-fill[_ngcontent-%COMP%] {\n background: var(--mj-status-error);\n}\n\n.workflow-steps-pipeline[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n padding: 10px 14px;\n}\n\n.workflow-step-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: stretch;\n gap: 12px;\n}\n\n.workflow-step-rail[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 24px;\n flex-shrink: 0;\n}\n\n.workflow-step-node[_ngcontent-%COMP%] {\n width: 22px;\n height: 22px;\n border-radius: 999px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 10.5px;\n font-weight: 700;\n margin-top: 6px;\n background: var(--mj-bg-surface-sunken);\n border: 1.5px solid var(--mj-border-default);\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n\n.step-status-in-progress[_ngcontent-%COMP%] .workflow-step-node[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.step-status-complete[_ngcontent-%COMP%] .workflow-step-node[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 16%, var(--mj-bg-surface));\n border-color: var(--mj-status-success);\n color: var(--mj-status-success);\n}\n\n.step-status-failed[_ngcontent-%COMP%] .workflow-step-node[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 16%, var(--mj-bg-surface));\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n}\n\n.step-status-skipped[_ngcontent-%COMP%] .workflow-step-node[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n border-style: dashed;\n border-color: var(--mj-border-strong);\n color: var(--mj-text-muted);\n}\n\n.step-status-skipped[_ngcontent-%COMP%] .workflow-step-name[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.workflow-skipped-count[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.workflow-step-connector[_ngcontent-%COMP%] {\n flex: 1;\n width: 2px;\n min-height: 12px;\n background: var(--mj-border-default);\n margin: 2px 0;\n}\n\n.workflow-step-connector.is-complete[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 55%, var(--mj-border-default));\n}\n\n.workflow-step-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n padding: 6px 10px;\n border-radius: 8px;\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.workflow-step-content[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.workflow-step-main-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.workflow-step-identity[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n flex-wrap: wrap;\n}\n\n.workflow-step-name[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.workflow-step-agent-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 7px;\n border-radius: 999px;\n font-size: 11px;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 22%, transparent);\n}\n\n.workflow-step-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.workflow-step-duration[_ngcontent-%COMP%] {\n font-size: 11.5px;\n font-variant-numeric: tabular-nums;\n color: var(--mj-text-muted);\n}\n\n.workflow-step-duration.is-skipped[_ngcontent-%COMP%] {\n padding: 1px 7px;\n border-radius: 999px;\n font-size: 10.5px;\n font-weight: 600;\n background: var(--mj-bg-surface-sunken);\n border: 1px dashed var(--mj-border-strong);\n color: var(--mj-text-muted);\n}\n\n.workflow-step-run-btn[_ngcontent-%COMP%] {\n border: none;\n background: transparent;\n color: var(--mj-text-muted);\n padding: 2px 5px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 11px;\n transition: color 0.15s, background 0.15s;\n}\n\n.workflow-step-run-btn[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.workflow-step-chevron[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n transition: transform 0.2s ease;\n}\n\n.workflow-step-chevron.rotated[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n}\n\n.workflow-step-details[_ngcontent-%COMP%] {\n margin-top: 6px;\n padding: 8px 10px;\n border-radius: 6px;\n background: var(--mj-bg-surface-sunken);\n border-left: 2px solid var(--mj-brand-primary);\n font-size: 12px;\n line-height: 1.5;\n color: var(--mj-text-secondary);\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n\n\n.workflow-continuation-banner[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n width: 100%;\n max-width: 100%;\n margin-bottom: 10px;\n padding: 6px 12px;\n border-radius: 8px;\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 26%, var(--mj-border-default));\n background: color-mix(in srgb, var(--mj-brand-primary) 7%, var(--mj-bg-surface-sunken));\n color: var(--mj-text-secondary);\n font-size: 12px;\n line-height: 1.35;\n cursor: pointer;\n text-align: left;\n transition: background 0.16s ease, border-color 0.16s ease, transform 0.16s ease;\n}\n\n.workflow-continuation-banner[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 13%, var(--mj-bg-surface-sunken));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 45%, var(--mj-border-default));\n}\n\n.continuation-banner-left[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n overflow: hidden;\n}\n\n.continuation-banner-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 12px;\n flex-shrink: 0;\n}\n\n.continuation-banner-label[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n\n.continuation-banner-sep[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n\n.continuation-banner-name[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.continuation-banner-jump[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n font-size: 11.5px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n flex-shrink: 0;\n}\n\n.message-item.workflow-origin-highlight[_ngcontent-%COMP%] {\n outline: 2px solid var(--mj-brand-primary);\n outline-offset: 2px;\n border-radius: 12px;\n transition: outline-color 0.3s ease;\n}", "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[class^=\"mj-icon-\"][_ngcontent-%COMP%], \n[class*=\" mj-icon-\"][_ngcontent-%COMP%] {\n font-style: normal;\n font-variant: normal;\n text-rendering: auto;\n -webkit-font-smoothing: antialiased;\n display: inline-block;\n font-size: inherit;\n line-height: 1;\n}\n\n\n\n\n\n\n\n\n\n.mj-icon-skip[_ngcontent-%COMP%] {\n width: 1.4em;\n height: 1.4em;\n display: inline-block;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n \n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 101.89918457031249 96.83947368421053'%3E%3Cg transform='translate(-0.1288232421875,-0.0)'%3E%3Cpath d='M93.85,41.56c-.84,0-1.62.2-2.37.55-3-4.35-7.49-8.12-13.04-11.04l.04-7.18v-14.44h-10.24v17.6c-1.52-.43-3.07-.8-4.67-1.11V0h-10.24v24.72s-.09,0-.14,0h-4.38s-.1,0-.14,0V7.3h-10.24v18.62c-1.6.32-3.15.69-4.67,1.11v-11.67h-10.24v6.09l.04,9.6c-5.55,2.92-10.04,6.7-13.04,11.04-.75-.35-1.53-.55-2.37-.55-4.5,0-8.14,5.61-8.14,12.51s3.64,12.53,8.14,12.53c.58,0,1.14-.12,1.67-.29,4.1,6.62,11.54,12.06,20.98,15.28l.79.13v7.05c0,2.97,1.45,5.58,3.87,6.99,1.18.69,2.5,1.04,3.85,1.03,1.4,0,2.83-.37,4.15-1.12l7.54-4.29,7.56,4.3c1.31.74,2.73,1.12,4.13,1.12s2.67-.35,3.85-1.04c2.42-1.41,3.86-4.02,3.86-6.98v-7.05l.79-.13c9.44-3.22,16.89-8.66,20.98-15.28.54.17,1.09.29,1.68.29,4.5,0,8.14-5.61,8.14-12.53s-3.63-12.51-8.14-12.51' fill='%23AAAAAA'/%3E%3Cpath d='M86.69,50.87c0-12.22-13.6-19.1-28.94-20.66-4.48-.47-9.19-.54-13.52,0-15.34,1.53-28.93,8.41-28.93,20.66,0,8.55,5.7,15.55,12.68,15.55h7.94c3.05,2.5,6.93,4.1,11.08,4.71,2.65.4,5.44.46,8.01,0,4.15-.6,8.05-2.2,11.1-4.71h7.92c6.97,0,12.68-7,12.68-15.55' fill='white' opacity='0.9'/%3E%3Cpath d='M57.83,55.82c-1.19,2.58-3.8,4.35-6.84,4.35s-5.65-1.77-6.84-4.35h13.68Z' fill='%23AAAAAA'/%3E%3Cpath d='M32.52,41.14c1.74,0,3.18,2.13,3.18,4.76s-1.44,4.74-3.18,4.74-3.16-2.13-3.16-4.74,1.41-4.76,3.16-4.76' fill='%23AAAAAA'/%3E%3Cpath d='M69.46,41.14c1.74,0,3.16,2.13,3.16,4.76s-1.41,4.74-3.16,4.74-3.18-2.13-3.18-4.74,1.41-4.76,3.18-4.76' fill='%23AAAAAA'/%3E%3Cpath d='M63.91,76.15c-.82-.48-1.84-.43-2.8.12l-10.13,5.75-10.11-5.75c-.96-.55-1.98-.59-2.8-.12-.82.47-1.29,1.38-1.29,2.49v10.12c0,1.11.47,2.02,1.28,2.49.38.22.8.33,1.24.33.51,0,1.05-.15,1.57-.44l10.12-5.75,10.11,5.75c.52.29,1.05.44,1.56.44.44,0,.86-.11,1.24-.33.81-.48,1.28-1.38,1.28-2.49v-10.12c0-1.11-.47-2.02-1.28-2.49' fill='white' opacity='0.9'/%3E%3C/g%3E%3C/svg%3E\");\n vertical-align: middle;\n}\n\n\n\n\n\n.mj-icon-skip-lightning[_ngcontent-%COMP%]::before {\n content: \"\u26A1\";\n color: var(--mj-brand-primary);\n font-size: 1.1em;\n}\n\n\n\n\n\n.mj-icon-skip-brain[_ngcontent-%COMP%]::before {\n content: \"\uD83E\uDDE0\";\n font-size: 1.2em;\n}\n\n\n\n\n\n.mj-icon-betty[_ngcontent-%COMP%] {\n width: 1.4em;\n height: 1.4em;\n display: inline-block;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n \n background-image: url(\"data:image/svg+xml,%3Csvg id='a' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 150'%3E%3Cpath d='M64.96,60.23h75.12c10.58,0,20.24,4.31,27.2,11.32,7.01,6.95,11.32,16.61,11.32,27.19s-4.31,20.24-11.32,27.19c-6.95,7.02-16.61,11.32-27.2,11.32h-75.12c-10.58,0-20.24-4.31-27.19-11.32-2.65-2.64-4.92-5.6-6.71-8.92-.24,0-.49.06-.74.06-2.46,0-4.67-1.05-6.34-2.65-1.6-1.66-2.58-3.87-2.58-6.34v-18.7c0-2.46.98-4.74,2.58-6.34,1.66-1.66,3.87-2.65,6.34-2.65.25,0,.49,0,.74.06,1.79-3.32,4.06-6.34,6.71-8.92,6.95-7.01,16.61-11.32,27.19-11.32' fill='%233d1252'/%3E%3Cpath d='M132.33,68.36h0c0,1.72-.74,3.32-1.91,4.49-1.11,1.17-2.71,1.84-4.49,1.84h-13.29c-1.78,0-3.32-.68-4.49-1.84-1.17-1.17-1.91-2.77-1.91-4.49h-12.92c-8.37,0-15.94,3.44-21.47,8.92-5.47,5.54-8.92,13.1-8.92,21.47v1.17l.06.37v.37l.06.43v.37l.06.37v.37l.06.37.06.43.06.37.06.37.06.37.06.37c0,.12.06.25.06.37l.06.37.12.37.06.37.12.37.06.37.12.37.12.31.06.37.12.37.12.37.12.31.12.37.12.37.19.31.12.37.12.37.12.31.18.37.12.31.19.31.18.37.12.31.18.31.19.37.18.31.18.31.19.31.18.31c.12.24.25.43.37.68l.19.25.24.31.19.31c.43.62.86,1.23,1.35,1.79l.18.24c.49.62.99,1.17,1.48,1.66.19.19.31.37.49.56.19.12.37.31.56.49.49.49,1.04.98,1.6,1.47l.31.19c.56.49,1.17.92,1.79,1.35.18.12.37.25.55.37l.31.25.31.18.31.19.37.18.31.18.31.19.31.18.31.19.37.12.31.19.31.18c.12.06.24.12.37.12l.31.19.37.12.31.19.37.12.31.12.37.19.37.12.31.12.37.12.37.12.37.06c.24.12.43.18.68.25l.37.12.37.06.37.12c.12,0,.25.06.37.06l.37.06.37.12.37.06.37.06.37.06.37.06.37.06.37.06.43.06h.37l.37.06h.37l.37.06h.8l.37.06h47.56c8.37,0,15.94-3.44,21.47-8.92,5.48-5.54,8.92-13.1,8.92-21.47s-3.44-15.94-8.92-21.47c-5.54-5.48-13.1-8.92-21.47-8.92h-7.75Z' fill='%23fff'/%3E%3Cpolygon points='54.93 12.74 85.57 55.25 106.12 55.25 106.12 34.89 106.12 34.7 105.75 34.7 54.93 12.74' fill='%233aba91'/%3E%3Cpolygon points='111.1 55.25 124.76 55.25 145 27.07 111.35 41.59 111.1 41.59 111.1 41.72 111.1 55.25' fill='%233aba91'/%3E%3Cpath d='M94.55,82.81c3.75,0,6.83,3.81,7.57,8.92.06.74-.31,1.35-.98,1.66-.61.31-1.35.18-1.84-.37-1.29-1.48-2.96-2.34-4.74-2.34s-3.38.86-4.67,2.34c-.49.55-1.23.68-1.91.37-.68-.31-1.05-.92-.92-1.66.68-5.11,3.81-8.92,7.51-8.92' fill='%233d1252'/%3E%3Cpath d='M132.08,115.24c-.31,1.05-.86,2.03-1.66,2.77-1.11,1.17-2.71,1.84-4.49,1.84h-13.29c-1.79,0-3.32-.68-4.49-1.84-.8-.74-1.36-1.72-1.66-2.77-.19-.68.06-1.41.68-1.84.56-.43,1.35-.49,1.97-.06.98.68,2.21,1.05,3.51,1.05h13.29c1.29,0,2.52-.37,3.51-1.05.61-.43,1.41-.37,1.97.06.62.43.86,1.17.68,1.84' fill='%233d1252'/%3E%3Cpath d='M144.02,82.81c3.69,0,6.83,3.81,7.51,8.92.12.74-.24,1.35-.92,1.66-.68.31-1.41.18-1.91-.37-1.29-1.48-2.89-2.34-4.67-2.34s-3.44.86-4.74,2.34c-.49.55-1.23.68-1.84.37-.68-.31-1.05-.92-.98-1.66.74-5.11,3.81-8.92,7.57-8.92' fill='%233d1252'/%3E%3C/svg%3E\");\n vertical-align: middle;\n}\n\n\n\n\n\n.mj-icon-izzy[_ngcontent-%COMP%] {\n width: 1.4em;\n height: 1.4em;\n display: inline-block;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n \n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 204 180'%3E%3Cpath d='M0 0 C3.61144774 3.08477828 4.84942137 4.90830493 5.5 9.625 C5 13 5 13 3.5 14.9375 C1.74432121 17.35155834 1.83578869 18.21944114 1.90625 21.12890625 C1.9371875 22.40636719 1.968125 23.68382813 2 25 C3.18335937 24.72285156 4.36671875 24.44570313 5.5859375 24.16015625 C22.44010416 20.26839867 22.44010416 20.26839867 30 20 C31.80210938 19.92265625 31.80210938 19.92265625 33.640625 19.84375 C47.49356199 19.44904163 61.73614427 20.86627802 75 25 C75.53596907 19.64244551 75.53596907 19.64244551 73.5 15 C71.5549761 12.4066348 71.45048389 10.16629658 71.59375 6.97265625 C72.33633815 3.36681955 74.01253991 1.99164006 77 0 C79.80907914 -0.63997166 82.18961327 -0.63020793 85 0 C87.8100346 1.79363911 89.50940468 3.01880935 91 6 C90.984375 8.05859375 90.984375 8.05859375 90.75 10.4375 C90.68296875 11.21996094 90.6159375 12.00242187 90.546875 12.80859375 C90 15 90 15 88.49609375 16.3984375 C86.25734576 18.79500846 86.4852344 20.97464008 86.3125 24.1875 C86.21388672 25.81751953 86.21388672 25.81751953 86.11328125 27.48046875 C86.07589844 28.31191406 86.03851563 29.14335937 86 30 C86.67675781 30.0825 87.35351562 30.165 88.05078125 30.25 C91.82333306 31.20937741 94.89353787 32.99425194 98.1875 35 C99.18052124 35.60448975 99.18052124 35.60448975 100.19360352 36.22119141 C111.98050012 43.58460075 121.17745776 53.2687532 127 66 C127 66.66 127 67.32 127 68 C127.721875 68.0825 128.44375 68.165 129.1875 68.25 C133.81406141 69.48374971 136.2179022 71.66516963 138.625 75.7734375 C140.97801199 81.55147269 140.43210927 87.87027126 140.375 94 C140.38660156 95.24523437 140.39820313 96.49046875 140.41015625 97.7734375 C140.3675701 111.08870765 140.3675701 111.08870765 135.5 116.7421875 C131.62323281 119.66995439 128.8523137 121.14337998 124 121.125 C122.9790625 121.12886719 122.9790625 121.12886719 121.9375 121.1328125 C120 121 120 121 117 120 C116.74347656 120.65226562 116.48695313 121.30453125 116.22265625 121.9765625 C115.83980469 122.85054688 115.45695313 123.72453125 115.0625 124.625 C114.70285156 125.48351562 114.34320313 126.34203125 113.97265625 127.2265625 C108.57908063 134.80960941 99.56813916 137.59212379 91.0625 140.375 C90.02287109 140.72949219 88.98324219 141.08398438 87.91210938 141.44921875 C80.34347852 144 80.34347852 144 78 144 C78.02094727 144.65484375 78.04189453 145.3096875 78.06347656 145.984375 C78.14730383 148.98942328 78.19886895 151.99422464 78.25 155 C78.28351563 156.02996094 78.31703125 157.05992187 78.3515625 158.12109375 C78.43361416 164.56214867 77.93369275 169.71304442 74 175 C68.75523423 179.17440541 64.68195675 180.53237245 58 180 C55.12653443 178.963898 52.49379495 177.58020045 49.8125 176.125 C49.11447266 175.76019531 48.41644531 175.39539063 47.69726562 175.01953125 C46.39868999 174.33997216 45.10309803 173.65465367 43.81176758 172.96142578 C43.21388428 172.64415527 42.61600098 172.32688477 42 172 C41.34290039 171.59402588 40.68580078 171.18805176 40.00878906 170.76977539 C38.03672401 169.77639533 38.03672401 169.77639533 36.12475586 170.58325195 C35.49448486 170.96441162 34.86421387 171.34557129 34.21484375 171.73828125 C33.17166992 172.35026367 33.17166992 172.35026367 32.10742188 172.97460938 C31.39134766 173.41611328 30.67527344 173.85761719 29.9375 174.3125 C28.51029236 175.1647359 27.08194984 176.01507485 25.65234375 176.86328125 C25.02320068 177.24782471 24.39405762 177.63236816 23.74584961 178.02856445 C19.79572932 180.2265128 16.44037501 180.296025 12 180 C6.82155197 178.33236419 3.95074467 176.59004726 1 172 C-0.72417326 168.34258111 -1.2403609 165.51230089 -1.1953125 161.48046875 C-1.18886719 160.45888672 -1.18242188 159.43730469 -1.17578125 158.38476562 C-1.15902344 157.32966797 -1.14226563 156.27457031 -1.125 155.1875 C-1.11597656 154.11306641 -1.10695312 153.03863281 -1.09765625 151.93164062 C-1.07415306 149.28753146 -1.04129575 146.64388128 -1 144 C-1.63196289 143.81171631 -2.26392578 143.62343262 -2.91503906 143.42944336 C-8.20708475 141.84808949 -13.49207901 140.2541307 -18.75 138.5625 C-19.98234375 138.17191406 -21.2146875 137.78132812 -22.484375 137.37890625 C-29.06200008 134.79901552 -34.12925122 130.90130551 -38 125 C-38.875 121.5625 -38.875 121.5625 -39 119 C-39.495 119.33 -39.99 119.66 -40.5 120 C-45.24354984 121.89741993 -49.49426304 121.53143657 -54.1875 119.875 C-58.42051121 117.05299253 -61.35909664 113.92271008 -63 109 C-63.22709306 104.92471184 -63.22828659 100.8492307 -63.24023438 96.76806641 C-63.2498982 94.77103695 -63.28108516 92.77414948 -63.3125 90.77734375 C-63.36188158 78.59243786 -63.36188158 78.59243786 -60 73 C-57.7509823 70.86631654 -55.88785241 69.35340008 -53.0078125 68.20703125 C-50.3010212 66.57979679 -49.65488803 64.83796148 -48.3125 62 C-45.06106922 55.7428385 -40.95735135 50.97447519 -36 46 C-35.40832031 45.38511719 -34.81664063 44.77023438 -34.20703125 44.13671875 C-28.97373562 39.11136864 -17.47215548 30 -10 30 C-10.08733973 27.91589342 -10.19552278 25.83265331 -10.3125 23.75 C-10.37050781 22.58984375 -10.42851563 21.4296875 -10.48828125 20.234375 C-11.02905532 16.81635262 -11.84853545 15.59874271 -14 13 C-14.54046356 8.75350057 -14.48376179 6.74176808 -12.125 3.125 C-8.57275398 -0.42724602 -4.8825369 -0.970906 0 0 Z M5 35 C4.30245605 35.21962402 3.60491211 35.43924805 2.88623047 35.66552734 C-14.1501062 41.15773444 -29.02751477 50.81254544 -39 66 C-39.33 66.99 -39.66 67.98 -40 69 C-37.525 70.98 -37.525 70.98 -35 73 C-34.52691406 72.29875 -34.05382812 71.5975 -33.56640625 70.875 C-21.08320269 52.96537462 -2.17172019 42.38052109 19.26171875 38.5078125 C46.97805996 34.9959591 75.10426623 38.71529466 97.73046875 56.09765625 C103.53827054 61.07953766 107.9264808 66.53902088 112 73 C113.32 72.01 114.64 71.02 116 70 C115.01713954 61.60788376 107.55262518 55.04847712 101.375 49.8125 C82.80696113 35.82916208 61.35998978 30.59265576 38.375 30.625 C37.71836365 30.62554382 37.06172729 30.62608765 36.38519287 30.62664795 C25.42439402 30.66823796 15.42390121 31.62072499 5 35 Z' fill='%234E3B78' transform='translate(63,0)'/%3E%3Cpath d='M0 0 C5.27957047 5.78547525 9.31612861 13.25448014 10 21.125 C9.69743213 24.83293961 8.77676366 26.8914086 6.1875 29.5625 C-2.04152489 35.76003038 -13.60917874 39.6270706 -23.875 38.8125 C-24.535 38.1525 -25.195 37.4925 -25.875 36.8125 C-28.97847254 36.48234335 -31.03281176 36.30718706 -33.75 37.9375 C-35.40354531 40.69340884 -35.26865568 42.66325452 -34.875 45.8125 C-33.95833333 47.89583333 -33.95833333 47.89583333 -31.875 48.8125 C-28.29166667 48.89583333 -28.29166667 48.89583333 -24.875 47.8125 C-24.57086182 47.16466553 -24.26672363 46.51683105 -23.95336914 45.84936523 C-22.875 43.8125 -22.875 43.8125 -20.77124023 42.88696289 C-19.91731689 42.6883667 -19.06339355 42.48977051 -18.18359375 42.28515625 C-17.23806641 42.04990234 -16.29253906 41.81464844 -15.31835938 41.57226562 C-14.32642578 41.34216797 -13.33449219 41.11207031 -12.3125 40.875 C-4.77934417 39.10870895 1.54823541 36.95205932 8.125 32.8125 C7.81647145 40.06292099 4.56245219 45.32546918 -0.5 50.4609375 C-5.29811284 54.61130511 -8.83216751 54.86916719 -15 55 C-21.13677833 55.26569953 -25.04589225 56.51893716 -29.890625 60.31640625 C-39.17633501 67.31724667 -52.82450605 66.52799961 -63.875 65.8125 C-71.37432145 64.60538489 -79.4496824 61.2378176 -84.875 55.8125 C-86.81199027 55.70419517 -88.75076074 55.60687514 -90.69067383 55.58691406 C-97.68300211 55.51299157 -103.12007731 55.4392364 -108.44140625 50.40234375 C-108.91449219 49.87769531 -109.38757813 49.35304688 -109.875 48.8125 C-110.6175 48.090625 -111.36 47.36875 -112.125 46.625 C-118.35765562 36.60823203 -119.69570866 25.34707186 -117.25 13.8828125 C-113.47065738 3.0509466 -104.76645407 -4.0120534 -94.875 -9.1875 C-91.26850975 -10.75400624 -87.62602625 -12.0153043 -83.875 -13.1875 C-83.029375 -13.47496094 -82.18375 -13.76242188 -81.3125 -14.05859375 C-56.0861494 -22.29657387 -20.04377266 -18.06142152 0 0 Z' fill='%23FDFDFD' transform='translate(155.875,64.1875)'/%3E%3Cpath d='M0 0 C5.24479788 1.58079188 9.51172656 4.60408712 14.06640625 7.58984375 C18.37837094 10.28462973 18.37837094 10.28462973 23.30859375 11.1328125 C28.49696048 9.20971132 33.08639658 6.29555589 37.79882812 3.42578125 C43.66838131 -0.00837477 43.66838131 -0.00837477 47.27734375 0.078125 C49.34375 1.0078125 49.34375 1.0078125 51.34375 3.0078125 C51.82984303 7.30136192 51.71414913 11.62739332 51.71875 15.9453125 C51.74324219 17.15123047 51.76773438 18.35714844 51.79296875 19.59960938 C51.79876953 21.33114258 51.79876953 21.33114258 51.8046875 23.09765625 C51.81290527 24.15847412 51.82112305 25.21929199 51.82958984 26.31225586 C51.34375 29.0078125 51.34375 29.0078125 49.48461914 30.87670898 C46.29658529 32.56106989 44.78123809 32.062357 41.34375 31.0078125 C37.60135447 29.03986817 34.07891261 26.72386924 30.53320312 24.42578125 C26.44214688 21.80182316 26.44214688 21.80182316 21.77734375 20.921875 C17.60401055 22.78413283 13.85973006 25.2663764 10.046875 27.76953125 C5.85335687 30.41401513 2.44659272 31.9581498 -2.65625 32.0078125 C-4.33203125 30.87695312 -4.33203125 30.87695312 -5.65625 29.0078125 C-6.04443359 26.328125 -6.04443359 26.328125 -6.0546875 23.1328125 C-6.05855469 21.98296875 -6.06242187 20.833125 -6.06640625 19.6484375 C-6.05480469 18.44703125 -6.04320313 17.245625 -6.03125 16.0078125 C-6.04285156 14.80640625 -6.05445312 13.605 -6.06640625 12.3671875 C-6.06253906 11.21734375 -6.05867188 10.0675 -6.0546875 8.8828125 C-6.05130371 7.82835937 -6.04791992 6.77390625 -6.04443359 5.6875 C-5.65625 3.0078125 -5.65625 3.0078125 -4.29736328 1.14111328 C-2.65625 0.0078125 -2.65625 0.0078125 0 0 Z' fill='%23FCFCFD' transform='translate(78.65625,136.9921875)'/%3E%3Cpath d='M0 0 C2.5 0.625 2.5 0.625 4.8125 2.625 C6.96830116 6.4575354 7.24792603 9.32007692 6.5 13.625 C5.34367254 15.98793002 4.35016245 17.77483755 2.5 19.625 C0.1875 20 0.1875 20 -2.5 19.625 C-5.06638215 17.47478793 -6.29103188 15.79226637 -6.88671875 12.46484375 C-7.08084032 8.45522921 -6.77549931 6.12498023 -4.8125 2.5625 C-2.5 0.625 -2.5 0.625 0 0 Z' fill='%2353417C' transform='translate(138.5,67.375)'/%3E%3Cpath d='M0 0 C2.5 0.6875 2.5 0.6875 4.8125 2.625 C7.08407605 6.74748987 7.32547179 10.07653131 6.5 14.6875 C4.8125 17.75 4.8125 17.75 2.5 19.6875 C-0.0625 20.25 -0.0625 20.25 -2.5 19.6875 C-5.30401904 17.38419865 -5.84979387 14.76309142 -6.4375 11.3125 C-6.72853275 7.71913649 -6.44645777 6.57011897 -4.875 3.125 C-2.5 0.6875 -2.5 0.6875 0 0 Z' fill='%23523F7B' transform='translate(64.5,67.3125)'/%3E%3Cpath d='M0 0 C8.91 0 17.82 0 27 0 C24.81183076 5.47042311 24.169236 6.55141452 19 9 C14.08609728 9.94526984 9.88605617 10.13992406 5.51171875 7.49609375 C3.4733513 5.76185217 1.65854906 4.10051199 0 2 C0 1.34 0 0.68 0 0 Z' fill='%23574680' transform='translate(88,95)'/%3E%3C/svg%3E\");\n vertical-align: middle;\n}\n\n\n\n\n\n\n\n\n.mj-icon-data-analyst[_ngcontent-%COMP%]::before {\n content: \"\uD83D\uDCCA\";\n font-size: 1.1em;\n}\n\n\n\n\n.mj-icon-api[_ngcontent-%COMP%]::before {\n content: \"\uD83D\uDD0C\";\n font-size: 1.1em;\n}\n\n\n\n\n.mj-icon-processing[_ngcontent-%COMP%]::before {\n content: \"\u2699\uFE0F\";\n display: inline-block;\n animation: _ngcontent-%COMP%_rotate-icon 2s linear infinite;\n}\n\n@keyframes _ngcontent-%COMP%_rotate-icon {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n\n\n\n\n.mj-icon-monogram-s[_ngcontent-%COMP%]::before {\n content: \"S\";\n font-weight: 800;\n font-family: system-ui, -apple-system, sans-serif;\n font-size: 1.1em;\n color: var(--mj-brand-primary);\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"] });
|
|
4467
4621
|
}
|
|
4468
4622
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MessageItemComponent, [{
|
|
4469
4623
|
type: Component,
|
|
4470
|
-
args: [{ standalone: false, selector: 'mj-conversation-message-item', template: "<div [class]=\"messageClasses\" [attr.data-message-id]=\"message.ID\" (click)=\"onMessageBubbleClick($event)\">\n <div class=\"message-avatar\">\n <div class=\"avatar-circle\" [class.ai-avatar]=\"isAIMessage\" [class.user-avatar]=\"isUserMessage\"\n [class.avatar-has-image]=\"isAIMessage && effectiveAssistantAvatarUrl !== null\">\n @if (isUserMessage) {\n @if (userAvatarUrl) {\n <img [src]=\"userAvatarUrl\" alt=\"User avatar\" class=\"avatar-image\" />\n } @else if (userAvatarIconClass) {\n <i [class]=\"userAvatarIconClass\"></i>\n } @else {\n <i class=\"fas fa-user\"></i>\n }\n } @else if (isAIMessage) {\n @if (effectiveAssistantAvatarUrl) {\n <img [src]=\"effectiveAssistantAvatarUrl\" alt=\"Assistant avatar\" class=\"avatar-image\"\n (error)=\"assistantAvatarFailed = true\" />\n } @else {\n <i class=\"fas\" [ngClass]=\"aiAgentInfo?.iconClass || 'fa-robot'\"></i>\n }\n }\n </div>\n </div>\n\n <div class=\"message-content\">\n <div class=\"message-header\">\n <span class=\"message-sender\" [title]=\"isAIMessage ? (aiAgentInfo?.role || 'AI Assistant') : ''\">\n {{ isAIMessage ? (aiAgentInfo?.name || 'AI Assistant') : messageSenderName }}\n </span>\n <span class=\"message-time\">{{ message.__mj_CreatedAt | date:'short' }}</span>\n\n <!-- Status indicator for user messages -->\n @if (isUserMessage && messageStatus !== 'Complete') {\n <span class=\"message-status\" [class.error]=\"messageStatus === 'Error'\">\n <i class=\"fas\" [ngClass]=\"messageStatus === 'Error' ? 'fa-exclamation-triangle' : 'fa-circle-notch fa-spin'\"></i>\n <span class=\"status-text\">{{ getStatusText() }}</span>\n </span>\n }\n\n <!-- Time pill - shows for AI messages in all states (in-progress, active, complete, failed) -->\n @if (!isUserMessage && timePillText) {\n <span\n class=\"time-pill\"\n [class.in-progress]=\"isInProgressAIMessage\"\n [class.active]=\"!isInProgressAIMessage && (isAgentRunActive || HasActiveWorkflowTasks)\"\n [class.complete]=\"!isInProgressAIMessage && !isAgentRunActive && !HasActiveWorkflowTasks && messageStatus === 'Complete' && !IsStoppedRun\"\n [class.stopped]=\"IsStoppedRun && messageStatus !== 'Error'\"\n [class.failed]=\"messageStatus === 'Error'\"\n [class.checking]=\"LivenessState === 'checking'\"\n [class.stalled]=\"LivenessState === 'stalled'\"\n [title]=\"LivenessState === 'stalled' ? 'No progress reported for several minutes' : (LivenessState === 'checking' ? 'No recent progress \u2014 re-checking' : '')\">\n <i class=\"fas\" [ngClass]=\"LivenessState !== 'live' ? 'fa-exclamation-triangle' : (IsStoppedRun ? 'fa-stop' : 'fa-clock')\"></i>\n {{ timePillText }}\n @if (LivenessState === 'checking') {\n <span class=\"liveness-label\">checking\u2026</span>\n } @else if (LivenessState === 'stalled') {\n <span class=\"liveness-label\">no response</span>\n }\n </span>\n }\n\n <!-- Stop control for an in-flight agent reply. Marks the run Cancelled; the owning\n server process aborts the in-flight step and finalizes the run as stopped. -->\n @if (CanStopRun) {\n <button\n type=\"button\"\n class=\"stop-run-pill\"\n [disabled]=\"IsStopping\"\n (click)=\"OnStopClick()\"\n [title]=\"IsStopping ? 'Stopping the run\u2026' : 'Stop this run'\">\n <i class=\"fas\" [ngClass]=\"IsStopping ? 'fa-circle-notch fa-spin' : 'fa-stop'\"></i>\n {{ IsStopping ? 'Stopping\u2026' : 'Stop' }}\n </button>\n }\n\n <!-- Test feedback icon (appears for test runs only) -->\n @if (message.TestRunID) {\n <span\n class=\"test-feedback-icon\"\n (click)=\"onTestFeedbackClick()\"\n title=\"Provide Test Feedback\">\n <i class=\"fas fa-flask\"></i>\n </span>\n }\n\n <!-- Action group, always visible, styled like the gear: Edit and Fork from here on a user message,\n Regenerate on an older answer (the last answer carries it in its footer). Labeled on the latest\n turn, icons elsewhere. -->\n @if (ShowsActionGroup) {\n <span class=\"message-action-group\" [class.labeled]=\"IsLatestTurn\" role=\"group\" aria-label=\"Message actions\">\n @if (CanEdit) {\n <button type=\"button\" class=\"message-header-action message-action-edit\"\n (click)=\"OnEditClick()\" title=\"Edit message\" aria-label=\"Edit message\">\n <i class=\"fa-solid fa-pen\" aria-hidden=\"true\"></i>\n @if (IsLatestTurn) {\n <span>Edit</span>\n }\n </button>\n }\n @if (CanStartFork) {\n <button type=\"button\" class=\"message-header-action message-action-fork\"\n (click)=\"OnForkClick($event)\" title=\"Fork from here\" aria-label=\"Fork from here\">\n <i class=\"fa-solid fa-code-branch\" aria-hidden=\"true\"></i>\n @if (IsLatestTurn) {\n <span class=\"action-label-long\">Fork from here</span>\n <span class=\"action-label-short\">Fork</span>\n }\n </button>\n }\n @if (ShowsHeaderRegenerate) {\n <button type=\"button\" class=\"message-header-action message-action-regenerate\"\n (click)=\"OnRegenerateClick()\" [title]=\"RegenerateTitle\" [attr.aria-label]=\"RegenerateTitle\">\n <i class=\"fa-solid fa-rotate-left\" aria-hidden=\"true\"></i>\n </button>\n }\n </span>\n }\n\n <!-- Agent run icon (clickable to expand details) - always rightmost when present.\n Rendered only when its panel would actually have content, so it never\n appears as a dead control opening an empty popup (e.g. a white-label\n surface with showAgentRunDetails=false and no message actions). -->\n @if (hasAgentRun && hasAgentDetailsPanelContent) {\n <span\n class=\"agent-run-icon\"\n (click)=\"toggleAgentDetails()\"\n [class.expanded]=\"isAgentDetailsExpanded\"\n [title]=\"hasRatings() ? 'Agent details & ' + getRatingCount() + ' rating(s)' : 'Click to view agent execution details'\">\n <i class=\"fas fa-cog\"></i>\n @if (hasRatings()) {\n <span class=\"rating-badge\">{{ getRatingCount() }}</span>\n }\n </span>\n }\n </div>\n\n <div class=\"message-body\">\n @if (!isEditing) {\n @if (OriginatingWorkflowTask) {\n <button\n type=\"button\"\n class=\"workflow-continuation-banner\"\n (click)=\"ScrollToOriginatingWorkflow($event)\"\n title=\"Scroll to originating workflow card and step artifacts\">\n <span class=\"continuation-banner-left\">\n <i class=\"fa-solid fa-diagram-project continuation-banner-icon\" aria-hidden=\"true\"></i>\n <span class=\"continuation-banner-label\">Completed workflow</span>\n <span class=\"continuation-banner-sep\">\u00B7</span>\n <span class=\"continuation-banner-name\">{{ OriginatingWorkflowTask.Name }}</span>\n </span>\n <span class=\"continuation-banner-jump\">\n <span>View workflow</span>\n <i class=\"fa-solid fa-arrow-up-long\" aria-hidden=\"true\"></i>\n </span>\n </button>\n }\n <div class=\"message-text\">\n <mj-markdown [data]=\"displayMessage\" [enableCollapsibleHeadings]=\"true\"></mj-markdown>\n @if (isMessageEdited) {\n <span class=\"edited-badge\">(edited)</span>\n }\n </div>\n\n <!-- A stopped reply: what the run kept, and the way to pick it up again. Any message\n resumes the stopped run; the Continue control just sends one that says so. -->\n @if (StoppedLineText) {\n <div class=\"stopped-line\"><i class=\"fa-solid fa-stop\" aria-hidden=\"true\"></i>{{ StoppedLineText }}</div>\n }\n @if (CanContinueStoppedRun) {\n <div class=\"stopped-actions\">\n <button mjButton Variant=\"outline\" Size=\"sm\" type=\"button\" class=\"continue-run\" (click)=\"OnContinueClick()\" title=\"Continue where you left off\">\n <i class=\"fa-solid fa-play\" aria-hidden=\"true\"></i> Continue\n </button>\n </div>\n }\n\n <!-- messageExtra slot \u2014 per-message additive decoration projected by the\n consumer via `mjChatSlot=\"messageExtra\"`. Renders after the message\n content, before attachments. Receives the message as $implicit. -->\n @if (messageExtraTemplate) {\n <ng-container *ngTemplateOutlet=\"messageExtraTemplate; context: {\n $implicit: message,\n message: message\n }\"></ng-container>\n }\n\n <!-- Message Attachments -->\n @if (hasAttachments) {\n <div class=\"message-attachments\">\n @for (attachment of attachments; track attachment.id) {\n @if (attachment.type === 'Image') {\n <div class=\"attachment-item image-attachment\"\n (click)=\"onAttachmentClick(attachment)\"\n [title]=\"attachment.fileName || 'Image attachment'\">\n <img\n [src]=\"attachment.thumbnailUrl || attachment.contentUrl\"\n [alt]=\"attachment.fileName || 'Image attachment'\"\n class=\"attachment-thumbnail\"\n loading=\"lazy\">\n <div class=\"attachment-overlay\">\n <i class=\"fas fa-expand\"></i>\n </div>\n </div>\n } @else {\n <div class=\"attachment-strip\"\n [class.is-artifact]=\"!!attachment.artifactTypeName\"\n (click)=\"onAttachmentClick(attachment)\"\n [title]=\"attachment.fileName || 'File'\">\n <div class=\"attachment-badge\">{{ badgeTextFor(attachment) }}</div>\n <div class=\"attachment-meta\">\n <span class=\"file-name\">{{ attachment.fileName || 'File' }}</span>\n <span class=\"file-size\">{{ formatFileSize(attachment.sizeBytes) }}</span>\n </div>\n </div>\n }\n }\n </div>\n }\n\n <!-- Inline Workflow Execution Card \u2014 visible directly in the message body whenever workflow steps exist -->\n @if (WorkflowSteps.length > 0) {\n <div class=\"workflow-execution-card\" [class]=\"'workflow-status-' + WorkflowStatus.toLowerCase()\">\n <div class=\"workflow-card-header\"\n [class.is-collapsible]=\"WorkflowStatus !== 'Running'\"\n (click)=\"ToggleWorkflowStepsExpanded($event)\">\n <div class=\"workflow-header-left\">\n <div class=\"workflow-status-icon\">\n @if (WorkflowStatus === 'Running') {\n <i class=\"fa-solid fa-circle-notch fa-spin\"></i>\n } @else if (WorkflowStatus === 'Complete') {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else if (WorkflowStatus === 'Failed') {\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n } @else {\n <i class=\"fa-solid fa-ban\"></i>\n }\n </div>\n <div class=\"workflow-title-group\">\n <div class=\"workflow-title-row\">\n <span class=\"workflow-title\">{{ WorkflowTitle }}</span>\n <span class=\"workflow-badge\" [class]=\"'badge-' + WorkflowStatus.toLowerCase()\">\n @if (WorkflowStatus === 'Running') {\n Running\n } @else if (WorkflowStatus === 'Complete') {\n Completed\n } @else {\n {{ WorkflowStatus }}\n }\n </span>\n </div>\n <div class=\"workflow-subtitle\">\n <span>{{ WorkflowCompletedStepCount }} of {{ WorkflowSteps.length }} {{ WorkflowSteps.length === 1 ? 'step' : 'steps' }} complete</span>\n @if (WorkflowSkippedStepCount > 0) {\n <span class=\"workflow-dot\">\u00B7</span>\n <span class=\"workflow-skipped-count\">{{ WorkflowSkippedStepCount }} skipped (conditional)</span>\n }\n <span class=\"workflow-dot\">\u00B7</span>\n <span>{{ WorkflowProgressPercent }}%</span>\n </div>\n </div>\n </div>\n <div class=\"workflow-header-right\">\n @if (WorkflowParentTaskID) {\n <button type=\"button\"\n class=\"workflow-graph-btn\"\n (click)=\"OpenTaskGraphPanel($event)\"\n title=\"View visual task graph in side panel\">\n <i class=\"fa-solid fa-diagram-project\" aria-hidden=\"true\"></i>\n <span>Task Graph</span>\n </button>\n }\n <span class=\"workflow-duration-pill\" title=\"Workflow execution time\">\n <i class=\"fa-regular fa-clock\"></i>\n <span>{{ WorkflowDurationDisplay }}</span>\n </span>\n @if (WorkflowStatus !== 'Running') {\n <button type=\"button\"\n class=\"workflow-collapse-btn\"\n (click)=\"ToggleWorkflowStepsExpanded($event)\"\n [attr.aria-expanded]=\"IsWorkflowStepsExpanded\"\n [title]=\"IsWorkflowStepsExpanded ? 'Collapse workflow steps' : 'Expand workflow steps'\">\n <span class=\"workflow-collapse-label\">{{ IsWorkflowStepsExpanded ? 'Collapse' : 'Expand' }}</span>\n <i class=\"fa-solid fa-chevron-down workflow-collapse-chevron\" [class.rotated]=\"IsWorkflowStepsExpanded\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n </div>\n\n <div class=\"workflow-progress-track\" role=\"progressbar\"\n [attr.aria-valuenow]=\"WorkflowProgressPercent\" aria-valuemin=\"0\" aria-valuemax=\"100\">\n <div class=\"workflow-progress-fill\"\n [class.is-running]=\"WorkflowStatus === 'Running'\"\n [style.width.%]=\"WorkflowProgressPercent\"></div>\n </div>\n\n @if (WorkflowStatus === 'Running' || IsWorkflowStepsExpanded) {\n <div class=\"workflow-steps-pipeline\">\n @for (step of WorkflowSteps; track step.ID; let idx = $index; let isLast = $last) {\n <div class=\"workflow-step-item\"\n [class]=\"'step-status-' + (step.Status || 'Pending').toLowerCase().replace(' ', '-')\"\n [class.is-expanded]=\"IsWorkflowStepExpanded(step.ID)\">\n <div class=\"workflow-step-rail\">\n <div class=\"workflow-step-node\">\n @if (step.Status === 'In Progress') {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else if (step.Status === 'Complete') {\n <i class=\"fa-solid fa-check\"></i>\n } @else if (step.Status === 'Failed') {\n <i class=\"fa-solid fa-xmark\"></i>\n } @else if (step.Status === 'Skipped') {\n <i class=\"fa-solid fa-forward-step\" title=\"Skipped (conditional prerequisite not met)\"></i>\n } @else if (step.Status === 'Cancelled') {\n <i class=\"fa-solid fa-ban\"></i>\n } @else {\n <span class=\"step-index-num\">{{ idx + 1 }}</span>\n }\n </div>\n @if (!isLast) {\n <div class=\"workflow-step-connector\" [class.is-complete]=\"step.Status === 'Complete'\"></div>\n }\n </div>\n\n <div class=\"workflow-step-content\" (click)=\"ToggleWorkflowStepExpand(step.ID)\">\n <div class=\"workflow-step-main-row\">\n <div class=\"workflow-step-identity\">\n <span class=\"workflow-step-name\">{{ step.Name }}</span>\n @if (step.Agent) {\n <span class=\"workflow-step-agent-chip\">\n <i class=\"fa-solid fa-robot\"></i>\n <span>{{ step.Agent }}</span>\n </span>\n }\n </div>\n <div class=\"workflow-step-meta\">\n @if (FormatWorkflowStepDuration(step); as stepDur) {\n <span class=\"workflow-step-duration\" [class.is-skipped]=\"step.Status === 'Skipped'\">{{ stepDur }}</span>\n }\n @if (step.AgentRunID) {\n <button type=\"button\"\n class=\"workflow-step-run-btn\"\n (click)=\"OpenWorkflowStepAgentRun(step, $event)\"\n title=\"Open AI Agent Run record\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n </button>\n }\n @if (GetWorkflowStepSummary(step)) {\n <i class=\"fa-solid fa-chevron-down workflow-step-chevron\"\n [class.rotated]=\"IsWorkflowStepExpanded(step.ID)\"></i>\n }\n </div>\n </div>\n\n @if (IsWorkflowStepExpanded(step.ID) && GetWorkflowStepSummary(step); as summaryText) {\n <div class=\"workflow-step-details\">\n {{ summaryText }}\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Artifact Message Cards \u2014 single card when 1, or Supporting Artifacts grid + Final Artifact when > 1 -->\n @if (displayArtifacts.length === 1) {\n @for (a of displayArtifacts; track a.artifact.ID) {\n <div class=\"artifact-wrapper\" [class.system-artifact]=\"a.artifact.Visibility === 'System Only'\">\n <mj-artifact-message-card\n [artifactId]=\"a.artifact.ID\"\n [artifact]=\"a.artifact\"\n [artifactVersion]=\"a.version\"\n [currentUser]=\"currentUser\"\n (actionPerformed)=\"onArtifactActionPerformed($event)\">\n </mj-artifact-message-card>\n </div>\n }\n } @else if (displayArtifacts.length > 1) {\n <div class=\"multi-artifact-showcase\">\n <div class=\"multi-artifact-supporting-section\" [class.is-collapsed]=\"!IsSupportingArtifactsExpanded\">\n <button\n type=\"button\"\n class=\"supporting-artifacts-header\"\n (click)=\"ToggleSupportingArtifacts($event)\"\n [attr.aria-expanded]=\"IsSupportingArtifactsExpanded\">\n <span class=\"supporting-header-left\">\n <i class=\"fa-solid fa-layer-group supporting-header-icon\" aria-hidden=\"true\"></i>\n <span class=\"supporting-header-title\">Supporting Artifacts</span>\n <span class=\"supporting-header-count\">{{ SupportingArtifacts.length }}</span>\n @if (!IsSupportingArtifactsExpanded) {\n <span class=\"supporting-collapsed-preview\">\n @for (a of SupportingArtifacts; track a.artifact.ID; let stepIdx = $index) {\n <span class=\"supporting-preview-pill\">#{{ stepIdx + 1 }} {{ a.version?.Name || a.artifact.Name }}</span>\n }\n </span>\n }\n </span>\n <span class=\"supporting-header-right\">\n <span class=\"supporting-toggle-hint\">{{ IsSupportingArtifactsExpanded ? 'Collapse' : 'Expand' }}</span>\n <i class=\"fa-solid fa-chevron-down supporting-chevron\" [class.rotated]=\"IsSupportingArtifactsExpanded\" aria-hidden=\"true\"></i>\n </span>\n </button>\n\n @if (IsSupportingArtifactsExpanded) {\n <div class=\"supporting-artifacts-grid\">\n @for (a of SupportingArtifacts; track a.artifact.ID; let stepIdx = $index) {\n <div class=\"artifact-wrapper supporting-artifact-cell\" [class.system-artifact]=\"a.artifact.Visibility === 'System Only'\">\n <span class=\"supporting-step-badge\" [title]=\"'Supporting artifact #' + (stepIdx + 1)\">#{{ stepIdx + 1 }}</span>\n <mj-artifact-message-card\n [artifactId]=\"a.artifact.ID\"\n [artifact]=\"a.artifact\"\n [artifactVersion]=\"a.version\"\n [currentUser]=\"currentUser\"\n (actionPerformed)=\"onArtifactActionPerformed($event)\">\n </mj-artifact-message-card>\n </div>\n }\n </div>\n }\n </div>\n\n @if (PrimaryArtifact; as primary) {\n <div class=\"multi-artifact-primary-section\">\n <div class=\"primary-artifact-header\">\n <i class=\"fa-solid fa-star primary-header-icon\" aria-hidden=\"true\"></i>\n <span class=\"primary-header-title\">Final Artifact</span>\n <span class=\"primary-step-badge\">#{{ displayArtifacts.length }}</span>\n </div>\n <div class=\"artifact-wrapper primary-artifact-card\" [class.system-artifact]=\"primary.artifact.Visibility === 'System Only'\">\n <mj-artifact-message-card\n [artifactId]=\"primary.artifact.ID\"\n [artifact]=\"primary.artifact\"\n [artifactVersion]=\"primary.version\"\n [currentUser]=\"currentUser\"\n (actionPerformed)=\"onArtifactActionPerformed($event)\">\n </mj-artifact-message-card>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- One per attached artifact whose rows are still loading. Rendered AFTER the loaded\n cards, so an artifact arriving appends rather than reordering what is already on\n screen. Carries the same system-artifact de-emphasis as the card it becomes. -->\n @for (pending of pendingArtifactPlaceholders; track pending.artifactId) {\n <div class=\"artifact-wrapper\" [class.system-artifact]=\"pending.visibility === 'System Only'\">\n <div class=\"artifact-pending\">\n <mj-loading [text]=\"pendingLabel(pending)\" size=\"small\"></mj-loading>\n </div>\n </div>\n }\n\n <!-- Agent Response Form (shown only for last message by owner) -->\n @if (!ReadOnly && isLastMessageInConversation && isConversationOwner && responseForm) {\n <mj-dynamic-form\n [FormDefinition]=\"responseForm\"\n [Disabled]=\"isProcessing\"\n (FormSubmitted)=\"onFormSubmitted($event)\">\n </mj-dynamic-form>\n }\n\n <!-- Actionable Commands (shown only for last message by owner) -->\n @if (!ReadOnly && isLastMessageInConversation && isConversationOwner && actionableCommands.length > 0) {\n <mj-actionable-commands\n [commands]=\"actionableCommands\"\n [disabled]=\"isProcessing\"\n [isLastMessage]=\"isLastMessageInConversation\"\n [isConversationOwner]=\"isConversationOwner\"\n (commandExecuted)=\"onCommandExecuted($event)\">\n </mj-actionable-commands>\n }\n }\n\n @if (isEditing) {\n <div class=\"message-edit-container\">\n <textarea\n class=\"message-edit-textarea\"\n [(ngModel)]=\"editedText\"\n (keydown)=\"onEditKeydown($event)\"\n rows=\"4\"\n placeholder=\"Edit your message...\"></textarea>\n <div class=\"edit-actions\">\n <button mjButton Variant=\"primary\" Size=\"sm\" (click)=\"SaveEdit()\">\n <i [class]=\"EditSaveIcon\" aria-hidden=\"true\"></i>\n {{ EditSaveLabel }}\n </button>\n <button mjButton Variant=\"secondary\" Size=\"sm\" (click)=\"CancelEditing()\">\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n Cancel\n </button>\n @if (EditNote) {\n <span class=\"edit-note\">{{ EditNote }}</span>\n }\n </div>\n <div class=\"edit-hint\">{{ EditHint }}</div>\n </div>\n }\n </div>\n\n @if (ForkChips.length > 0 && !isEditing) {\n <div class=\"message-fork-chips\">\n @for (chip of ForkChips; track chip.Kind + (chip.BranchID ?? '')) {\n @if (chip.Kind === 'Original') {\n <button mjButton Variant=\"flat\" Size=\"sm\" class=\"fork-chip\" data-kind=\"Original\"\n (click)=\"OnForkChipClick(chip, $event)\"\n [attr.aria-label]=\"ChipAriaLabel(chip)\">\n <i [class]=\"'fork-chip-icon ' + ChipIcon(chip)\" aria-hidden=\"true\"></i>\n <span class=\"fork-chip-name\">{{ chip.DisplayName }}</span>\n <span class=\"fork-chip-time\">\u00B7 original</span>\n </button>\n } @else {\n <button mjButton Variant=\"flat\" Size=\"sm\" class=\"fork-chip\" [attr.data-kind]=\"chip.Kind\"\n (click)=\"OnForkChipClick(chip, $event)\"\n [attr.aria-label]=\"ChipAriaLabel(chip)\">\n <i [class]=\"'fork-chip-icon ' + ChipIcon(chip)\" aria-hidden=\"true\"></i>\n @if (chip.Avatars.length > 0) {\n <span class=\"fork-chip-avatars\" aria-hidden=\"true\">\n @for (avatar of chip.Avatars; track avatar.Kind + avatar.ID) {\n <span class=\"fork-chip-avatar\" [title]=\"avatar.Label\">\n @if (avatar.ImageURL) {\n <img [src]=\"avatar.ImageURL\" alt=\"\" />\n } @else if (avatar.IconClass) {\n <i [class]=\"avatar.IconClass\"></i>\n } @else {\n {{ avatar.Initials }}\n }\n </span>\n }\n </span>\n }\n <span class=\"fork-chip-messages\">{{ chip.MessageLabel }}</span>\n <span class=\"fork-chip-name\">{{ chip.DisplayName }}</span>\n <span class=\"fork-chip-time\">\u00B7 {{ chip.ActivityLabel }}</span>\n </button>\n }\n }\n </div>\n }\n\n <!-- Message Footer: only rendered on the last message, and hidden while any message of the view is edited.\n Non-last messages have no footer \u2014 pin/delete/rating live in the gear panel. -->\n @if (ShowsFooter) {\n <div class=\"message-footer\">\n @if (allowMessageDelete && isConversationOwner) {\n <button class=\"action-bar-btn danger inline-delete\" (click)=\"onDeleteClick()\" title=\"Delete this message and all messages below it\">\n <i class=\"fas fa-trash\"></i>\n </button>\n }\n @if (isAIMessage && (messageStatus === 'Complete' || ShowsFooterRegenerate)) {\n <div class=\"ai-message-actions\">\n @if (ShowsFooterRegenerate) {\n <button class=\"action-bar-btn labeled regenerate-btn\" type=\"button\" (click)=\"OnRegenerateClick()\" [title]=\"RegenerateTitle\">\n <i class=\"fa-solid fa-rotate-left\" aria-hidden=\"true\"></i>\n <span>Regenerate</span>\n </button>\n }\n @if (messageStatus === 'Complete') {\n <!-- Rating sits between Regenerate and Pin on the latest AI message -->\n @if (showMessageRating) {\n <mj-conversation-message-rating\n [conversationDetailId]=\"message.ID\"\n [currentUser]=\"currentUser\"\n [ratingEntityName]=\"message.EntityInfo.Name || 'MJ: Conversation Details'\"\n [ratingsData]=\"ratings\"\n [canEdit]=\"isConversationOwner && !ReadOnly\">\n </mj-conversation-message-rating>\n }\n @if (allowPinning) {\n <button\n class=\"action-bar-btn pin-btn\"\n [class.pinned]=\"message.IsPinned\"\n (click)=\"PinMessage()\"\n [title]=\"message.IsPinned ? 'Unpin message' : 'Pin message'\"\n type=\"button\">\n <i class=\"fas fa-thumbtack\"></i>\n </button>\n }\n }\n </div>\n }\n </div>\n }\n\n <!-- Agent details content section -->\n <div class=\"agent-details-section\">\n <!-- Agent Run Details Panel (expandable) -->\n @if (isAgentDetailsExpanded && hasAgentRun) {\n <!-- Agent Run Details Panel -->\n <div class=\"agent-details-panel\">\n @if (agentRun && showAgentRunDetails) {\n <div class=\"agent-details-content\">\n <div class=\"agent-details-header\">\n <i class=\"fas fa-chart-line\"></i>\n <span>\n <!-- Deliberately the ENGINE-resolved name: this header labels the real\n agent's diagnostics, and the link opens the real agent record \u2014 a\n host assistantDisplayName override must not relabel either. -->\n <a class=\"agent-name-link\" (click)=\"openAgentRecord()\" title=\"Open agent details\">\n {{ engineAgentInfo?.name || 'Agent' }}\n </a>\n Run Details\n </span>\n </div>\n\n <!-- Run-detail grid (run ID, step/token counts, $ cost, status) \u2014 developer/\n observability data. The whole run-details section (this grid AND its\n header above) is gated on showAgentRunDetails at the panel root, so a\n white-labeled surface hides all of it; the delete/pin/rating overflow\n below is a sibling block (outside this @if) and still renders. -->\n <div class=\"agent-details-grid\">\n <div class=\"detail-row\">\n <span class=\"detail-label\">Run ID:</span>\n <span class=\"detail-value\">\n <a class=\"run-id-link\" (click)=\"openAgentRunRecord()\" title=\"Open agent run details\">\n {{ agentRun.ID }}\n <i class=\"fas fa-external-link-alt\"></i>\n </a>\n </span>\n </div>\n\n @if (agentRunStepCount > 0) {\n <div class=\"detail-row\">\n <span class=\"detail-label\">Steps:</span>\n <span class=\"detail-value\">{{ agentRunStepCount }}</span>\n </div>\n }\n\n @if (agentRunTotalTokens > 0) {\n <div class=\"detail-row\">\n <span class=\"detail-label\">Tokens:</span>\n <span class=\"detail-value\">{{ formatNumber(agentRunTotalTokens) }}</span>\n </div>\n }\n\n @if (agentRunTotalCost > 0) {\n <div class=\"detail-row\">\n <span class=\"detail-label\">Cost:</span>\n <span class=\"detail-value\">\\${{ agentRunTotalCost.toFixed(4) }}</span>\n </div>\n }\n\n @if (agentRun.Status) {\n <div class=\"detail-row\">\n <span class=\"detail-label\">Status:</span>\n <span class=\"detail-value status-badge\" [class]=\"'status-' + agentRun.Status.toLowerCase()\">\n {{ agentRun.Status }}\n </span>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Delete + Rating + Pin in gear panel for non-last messages \u2014 mirrors last-message footer layout -->\n @if (!isLastMessage) {\n <div class=\"agent-panel-actions\">\n @if (allowMessageDelete && isConversationOwner) {\n <button class=\"action-bar-btn danger\" (click)=\"onDeleteClick()\" title=\"Delete this message and all messages below it\">\n <i class=\"fas fa-trash\"></i>\n </button>\n }\n @if (messageStatus === 'Complete') {\n <div class=\"ai-message-actions\">\n @if (showMessageRating) {\n <mj-conversation-message-rating\n [conversationDetailId]=\"message.ID\"\n [currentUser]=\"currentUser\"\n [ratingsData]=\"ratings\"\n [canEdit]=\"isConversationOwner && !ReadOnly\">\n </mj-conversation-message-rating>\n }\n @if (allowPinning) {\n <button\n class=\"action-bar-btn pin-btn\"\n [class.pinned]=\"message.IsPinned\"\n (click)=\"PinMessage()\"\n [title]=\"message.IsPinned ? 'Unpin message' : 'Pin message'\"\n type=\"button\">\n <i class=\"fas fa-thumbtack\"></i>\n </button>\n }\n </div>\n } @else if (allowPinning) {\n <button\n class=\"action-bar-btn pin-btn\"\n [class.pinned]=\"message.IsPinned\"\n (click)=\"PinMessage()\"\n [title]=\"message.IsPinned ? 'Unpin message' : 'Pin message'\"\n type=\"button\">\n <i class=\"fas fa-thumbtack\"></i>\n </button>\n }\n </div>\n }\n\n <!-- Tasks Section -->\n @if (WorkflowSteps.length > 0) {\n <div class=\"agent-details-tasks\">\n <div class=\"tasks-section-header\">\n <i class=\"fas fa-tasks\"></i>\n <span>Associated Tasks ({{ WorkflowSteps.length }})</span>\n </div>\n <div class=\"tasks-list\">\n @for (task of WorkflowSteps; track task.ID) {\n <mj-task-widget\n [task]=\"task\"\n [compact]=\"false\"\n [clickable]=\"false\"\n [showProgress]=\"true\"\n [showDuration]=\"true\">\n </mj-task-widget>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Reaction Buttons -->\n @if (showReactions && !isProcessing && !isInProgressAIMessage && !isEditing) {\n <div class=\"message-reactions\">\n <button class=\"reaction-btn\" (click)=\"toggleReaction('like')\">\n <i class=\"far fa-thumbs-up\"></i>\n <span class=\"reaction-count\">0</span>\n </button>\n <button class=\"reaction-btn\" (click)=\"toggleReaction('comment')\">\n <i class=\"far fa-comment\"></i>\n <span class=\"reaction-count\">0</span>\n </button>\n </div>\n }\n </div>\n</div>\n<!-- Fork marker: a separate element under the row, outside its rail and fade -->\n@if (ForkMarkerText) {\n <div class=\"fork-marker\" role=\"note\">\n <i class=\"fa-solid fa-code-branch\" aria-hidden=\"true\"></i>\n <span class=\"fork-marker-text\">{{ ForkMarkerText }}</span>\n <span class=\"fork-marker-line\" aria-hidden=\"true\"></span>\n </div>\n}\n", styles: [".message-item {\n display: flex;\n gap: 12px;\n padding: 8px 24px;\n transition: background-color 150ms ease;\n animation: fadeIn 0.3s ease;\n position: relative;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n transform: translateY(10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.message-item.ai-message {\n background-color: transparent;\n}\n\n.message-item.user-message {\n background-color: transparent;\n}\n\n/* Jump-to beacon: pulsed amber glow applied programmatically after scroll */\n.message-item.pin-beacon {\n animation: pinBeacon 1.5s ease-out forwards;\n}\n\n@keyframes pinBeacon {\n 0% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--mj-status-warning) 60%, transparent); }\n 20% { box-shadow: 0 0 0 8px color-mix(in srgb, var(--mj-status-warning) 35%, transparent); }\n 50% { box-shadow: 0 0 0 4px color-mix(in srgb, var(--mj-status-warning) 15%, transparent); }\n 70% { box-shadow: 0 0 0 6px color-mix(in srgb, var(--mj-status-warning) 20%, transparent); }\n 100% { box-shadow: none; }\n}\n\n/* Search hit: a highlight applied programmatically for 2 s after a search result opens */\n.message-item.search-hit-highlight {\n animation: searchHitHighlight 2s ease-out forwards;\n}\n\n@keyframes searchHitHighlight {\n 0% { background-color: color-mix(in srgb, var(--mj-brand-primary) 18%, transparent); }\n 70% { background-color: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent); }\n 100% { background-color: transparent; }\n}\n\n.message-item.in-progress {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n border-left: 3px solid var(--mj-brand-primary);\n position: relative;\n}\n\n@keyframes shimmer {\n 0% {\n background-position: -200% 0;\n }\n 100% {\n background-position: 200% 0;\n }\n}\n\n/* Progress message styling - make it visually distinct */\n.message-item.in-progress .message-text {\n color: var(--mj-text-primary);\n font-weight: 500;\n max-height: 150px;\n overflow-y: auto;\n display: block;\n}\n\n/* A streamed reply is not a status line. While the bubble shows streamed reply text the item\n adds `streaming` (IsStreaming, set by the list's in-place refresh): the cap above would box\n the growing reply into a 150px scroller of its own, and the status weight would re-wrap every\n line when the settled message drops it on completion, so the reply is set at its settled weight\n from the first frame. */\n.message-item.in-progress.streaming .message-text {\n max-height: none;\n overflow-y: visible;\n font-weight: inherit;\n}\n\n\n/* Pulse effect for avatar */\n.message-item.in-progress .avatar-circle {\n box-shadow: 0 0 0 0 color-mix(in srgb, var(--mj-brand-primary) 70%, transparent);\n animation: pulse 2s ease-in-out infinite;\n}\n\n@keyframes pulse {\n 0%, 100% {\n box-shadow: 0 0 0 0 color-mix(in srgb, var(--mj-brand-primary) 70%, transparent);\n }\n 50% {\n box-shadow: 0 0 0 8px color-mix(in srgb, var(--mj-brand-primary) 0%, transparent);\n }\n}\n\n.message-item:hover {\n background-color: color-mix(in srgb, var(--mj-text-primary) 2%, transparent);\n}\n\n/* Mention Pills - Match new editor chip style */\n:host ::ng-deep .mention-badge {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 12px;\n margin: 0 3px;\n border-radius: 16px;\n font-weight: 600;\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n vertical-align: middle;\n white-space: nowrap;\n}\n\n:host ::ng-deep .mention-badge.agent {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: 2px solid color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n box-shadow: var(--mj-shadow-md);\n}\n\n:host ::ng-deep .mention-badge.user {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: 2px solid color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n box-shadow: var(--mj-shadow-md);\n}\n\n:host ::ng-deep .mention-badge.entity {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n border: 2px solid color-mix(in srgb, var(--mj-status-success) 40%, transparent);\n box-shadow: var(--mj-shadow-md);\n}\n\n:host ::ng-deep .mention-badge.query {\n background: var(--mj-status-warning);\n color: var(--mj-text-inverse);\n border: 2px solid color-mix(in srgb, var(--mj-status-warning) 40%, transparent);\n box-shadow: var(--mj-shadow-md);\n}\n\n:host ::ng-deep .mention-badge.record {\n background: var(--mj-color-info, #2563eb);\n color: var(--mj-text-inverse, #fff);\n border: 2px solid color-mix(in srgb, var(--mj-color-info, #2563eb) 40%, transparent);\n box-shadow: var(--mj-shadow-md);\n text-decoration: none;\n}\n\n/* Icon-only record citation: surrounding prose already named the row. */\n:host ::ng-deep .mention-badge.record.icon-only {\n padding: 4px 7px;\n gap: 0;\n min-width: 1.65em;\n justify-content: center;\n}\n\n/* Skills: standard green fallback (AISkill.Color overrides via inline style) + sharp-cornered\n rectangle \u2014 the shape differentiates skills from the rounded agent/user/entity pills.\n Keep color + shape in sync with the composer chip (mention-editor's createMentionChip). */\n:host ::ng-deep .mention-badge.skill {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n border: 2px solid color-mix(in srgb, var(--mj-text-inverse) 35%, transparent);\n border-radius: 4px;\n box-shadow: var(--mj-shadow-md);\n}\n\n:host ::ng-deep .mention-badge i {\n font-size: 12px;\n opacity: 0.95;\n}\n\n/* Support for custom icon classes with background-image (like mj-icon-skip) */\n:host ::ng-deep .mention-badge i[class^=\"mj-icon-\"],\n:host ::ng-deep .mention-badge i[class*=\" mj-icon-\"] {\n width: 16px;\n height: 16px;\n display: inline-block;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n vertical-align: middle;\n font-size: inherit;\n}\n\n/* Skip icon - must use ::ng-deep for dynamically injected HTML */\n:host ::ng-deep .mention-badge i.mj-icon-skip {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 101.89918457031249 96.83947368421053'%3E%3Cg transform='translate(-0.1288232421875,-0.0)'%3E%3Cpath d='M93.85,41.56c-.84,0-1.62.2-2.37.55-3-4.35-7.49-8.12-13.04-11.04l.04-7.18v-14.44h-10.24v17.6c-1.52-.43-3.07-.8-4.67-1.11V0h-10.24v24.72s-.09,0-.14,0h-4.38s-.1,0-.14,0V7.3h-10.24v18.62c-1.6.32-3.15.69-4.67,1.11v-11.67h-10.24v6.09l.04,9.6c-5.55,2.92-10.04,6.7-13.04,11.04-.75-.35-1.53-.55-2.37-.55-4.5,0-8.14,5.61-8.14,12.51s3.64,12.53,8.14,12.53c.58,0,1.14-.12,1.67-.29,4.1,6.62,11.54,12.06,20.98,15.28l.79.13v7.05c0,2.97,1.45,5.58,3.87,6.99,1.18.69,2.5,1.04,3.85,1.03,1.4,0,2.83-.37,4.15-1.12l7.54-4.29,7.56,4.3c1.31.74,2.73,1.12,4.13,1.12s2.67-.35,3.85-1.04c2.42-1.41,3.86-4.02,3.86-6.98v-7.05l.79-.13c9.44-3.22,16.89-8.66,20.98-15.28.54.17,1.09.29,1.68.29,4.5,0,8.14-5.61,8.14-12.53s-3.63-12.51-8.14-12.51' fill='%23AAAAAA'/%3E%3Cpath d='M86.69,50.87c0-12.22-13.6-19.1-28.94-20.66-4.48-.47-9.19-.54-13.52,0-15.34,1.53-28.93,8.41-28.93,20.66,0,8.55,5.7,15.55,12.68,15.55h7.94c3.05,2.5,6.93,4.1,11.08,4.71,2.65.4,5.44.46,8.01,0,4.15-.6,8.05-2.2,11.1-4.71h7.92c6.97,0,12.68-7,12.68-15.55' fill='white' opacity='0.9'/%3E%3Cpath d='M57.83,55.82c-1.19,2.58-3.8,4.35-6.84,4.35s-5.65-1.77-6.84-4.35h13.68Z' fill='%23AAAAAA'/%3E%3Cpath d='M32.52,41.14c1.74,0,3.18,2.13,3.18,4.76s-1.44,4.74-3.18,4.74-3.16-2.13-3.16-4.74,1.41-4.76,3.16-4.76' fill='%23AAAAAA'/%3E%3Cpath d='M69.46,41.14c1.74,0,3.16,2.13,3.16,4.76s-1.41,4.74-3.16,4.74-3.18-2.13-3.18-4.74,1.41-4.76,3.18-4.76' fill='%23AAAAAA'/%3E%3Cpath d='M63.91,76.15c-.82-.48-1.84-.43-2.8.12l-10.13,5.75-10.11-5.75c-.96-.55-1.98-.59-2.8-.12-.82.47-1.29,1.38-1.29,2.49v10.12c0,1.11.47,2.02,1.28,2.49.38.22.8.33,1.24.33.51,0,1.05-.15,1.57-.44l10.12-5.75,10.11,5.75c.52.29,1.05.44,1.56.44.44,0,.86-.11,1.24-.33.81-.48,1.28-1.38,1.28-2.49v-10.12c0-1.11-.47-2.02-1.28-2.49' fill='white' opacity='0.9'/%3E%3C/g%3E%3C/svg%3E\");\n}\n\n/* Betty icon */\n:host ::ng-deep .mention-badge i.mj-icon-betty {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Ccircle cx='50' cy='50' r='45' fill='%23FF6B6B'/%3E%3Ctext x='50' y='65' text-anchor='middle' font-size='40' fill='white' font-family='Arial, sans-serif' font-weight='bold'%3EB%3C/text%3E%3C/svg%3E\");\n}\n\n/* Izzy icon */\n:host ::ng-deep .mention-badge i.mj-icon-izzy {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 204 180'%3E%3Cpath d='M0 0 C3.61144774 3.08477828 4.84942137 4.90830493 5.5 9.625 C5 13 5 13 3.5 14.9375 C1.74432121 17.35155834 1.83578869 18.21944114 1.90625 21.12890625 C1.9371875 22.40636719 1.968125 23.68382813 2 25 C3.18335937 24.72285156 4.36671875 24.44570313 5.5859375 24.16015625 C22.44010416 20.26839867 22.44010416 20.26839867 30 20 C31.80210938 19.92265625 31.80210938 19.92265625 33.640625 19.84375 C47.49356199 19.44904163 61.73614427 20.86627802 75 25 C75.53596907 19.64244551 75.53596907 19.64244551 73.5 15 C71.5549761 12.4066348 71.45048389 10.16629658 71.59375 6.97265625 C72.33633815 3.36681955 74.01253991 1.99164006 77 0 C79.80907914 -0.63997166 82.18961327 -0.63020793 85 0 C87.8100346 1.79363911 89.50940468 3.01880935 91 6 C90.984375 8.05859375 90.984375 8.05859375 90.75 10.4375 C90.68296875 11.21996094 90.6159375 12.00242187 90.546875 12.80859375 C90 15 90 15 88.49609375 16.3984375 C86.25734576 18.79500846 86.4852344 20.97464008 86.3125 24.1875 C86.21388672 25.81751953 86.21388672 25.81751953 86.11328125 27.48046875 C86.07589844 28.31191406 86.03851563 29.14335937 86 30 C86.67675781 30.0825 87.35351562 30.165 88.05078125 30.25 C91.82333306 31.20937741 94.89353787 32.99425194 98.1875 35 C99.18052124 35.60448975 99.18052124 35.60448975 100.19360352 36.22119141 C111.98050012 43.58460075 121.17745776 53.2687532 127 66 C127 66.66 127 67.32 127 68 C127.721875 68.0825 128.44375 68.165 129.1875 68.25 C133.81406141 69.48374971 136.2179022 71.66516963 138.625 75.7734375 C140.97801199 81.55147269 140.43210927 87.87027126 140.375 94 C140.38660156 95.24523437 140.39820313 96.49046875 140.41015625 97.7734375 C140.3675701 111.08870765 140.3675701 111.08870765 135.5 116.7421875 C131.62323281 119.66995439 128.8523137 121.14337998 124 121.125 C122.9790625 121.12886719 122.9790625 121.12886719 121.9375 121.1328125 C120 121 120 121 117 120 C116.74347656 120.65226562 116.48695313 121.30453125 116.22265625 121.9765625 C115.83980469 122.85054688 115.45695313 123.72453125 115.0625 124.625 C114.70285156 125.48351562 114.34320313 126.34203125 113.97265625 127.2265625 C108.57908063 134.80960941 99.56813916 137.59212379 91.0625 140.375 C90.02287109 140.72949219 88.98324219 141.08398438 87.91210938 141.44921875 C80.34347852 144 80.34347852 144 78 144 C78.02094727 144.65484375 78.04189453 145.3096875 78.06347656 145.984375 C78.14730383 148.98942328 78.19886895 151.99422464 78.25 155 C78.28351563 156.02996094 78.31703125 157.05992187 78.3515625 158.12109375 C78.43361416 164.56214867 77.93369275 169.71304442 74 175 C68.75523423 179.17440541 64.68195675 180.53237245 58 180 C55.12653443 178.963898 52.49379495 177.58020045 49.8125 176.125 C49.11447266 175.76019531 48.41644531 175.39539063 47.69726562 175.01953125 C46.39868999 174.33997216 45.10309803 173.65465367 43.81176758 172.96142578 C43.21388428 172.64415527 42.61600098 172.32688477 42 172 C41.34290039 171.59402588 40.68580078 171.18805176 40.00878906 170.76977539 C38.03672401 169.77639533 38.03672401 169.77639533 36.12475586 170.58325195 C35.49448486 170.96441162 34.86421387 171.34557129 34.21484375 171.73828125 C33.17166992 172.35026367 33.17166992 172.35026367 32.10742188 172.97460938 C31.39134766 173.41611328 30.67527344 173.85761719 29.9375 174.3125 C28.51029236 175.1647359 27.08194984 176.01507485 25.65234375 176.86328125 C25.02320068 177.24782471 24.39405762 177.63236816 23.74584961 178.02856445 C19.79572932 180.2265128 16.44037501 180.296025 12 180 C6.82155197 178.33236419 3.95074467 176.59004726 1 172 C-0.72417326 168.34258111 -1.2403609 165.51230089 -1.1953125 161.48046875 C-1.18886719 160.45888672 -1.18242188 159.43730469 -1.17578125 158.38476562 C-1.15902344 157.32966797 -1.14226563 156.27457031 -1.125 155.1875 C-1.11597656 154.11306641 -1.10695312 153.03863281 -1.09765625 151.93164062 C-1.07415306 149.28753146 -1.04129575 146.64388128 -1 144 C-1.63196289 143.81171631 -2.26392578 143.62343262 -2.91503906 143.42944336 C-8.20708475 141.84808949 -13.49207901 140.2541307 -18.75 138.5625 C-19.98234375 138.17191406 -21.2146875 137.78132812 -22.484375 137.37890625 C-29.06200008 134.79901552 -34.12925122 130.90130551 -38 125 C-38.875 121.5625 -38.875 121.5625 -39 119 C-39.495 119.33 -39.99 119.66 -40.5 120 C-45.24354984 121.89741993 -49.49426304 121.53143657 -54.1875 119.875 C-58.42051121 117.05299253 -61.35909664 113.92271008 -63 109 C-63.22709306 104.92471184 -63.22828659 100.8492307 -63.24023438 96.76806641 C-63.2498982 94.77103695 -63.28108516 92.77414948 -63.3125 90.77734375 C-63.36188158 78.59243786 -63.36188158 78.59243786 -60 73 C-57.7509823 70.86631654 -55.88785241 69.35340008 -53.0078125 68.20703125 C-50.3010212 66.57979679 -49.65488803 64.83796148 -48.3125 62 C-45.06106922 55.7428385 -40.95735135 50.97447519 -36 46 C-35.40832031 45.38511719 -34.81664063 44.77023438 -34.20703125 44.13671875 C-28.97373562 39.11136864 -17.47215548 30 -10 30 C-10.08733973 27.91589342 -10.19552278 25.83265331 -10.3125 23.75 C-10.37050781 22.58984375 -10.42851563 21.4296875 -10.48828125 20.234375 C-11.02905532 16.81635262 -11.84853545 15.59874271 -14 13 C-14.54046356 8.75350057 -14.48376179 6.74176808 -12.125 3.125 C-8.57275398 -0.42724602 -4.8825369 -0.970906 0 0 Z M5 35 C4.30245605 35.21962402 3.60491211 35.43924805 2.88623047 35.66552734 C-14.1501062 41.15773444 -29.02751477 50.81254544 -39 66 C-39.33 66.99 -39.66 67.98 -40 69 C-37.525 70.98 -37.525 70.98 -35 73 C-34.52691406 72.29875 -34.05382812 71.5975 -33.56640625 70.875 C-21.08320269 52.96537462 -2.17172019 42.38052109 19.26171875 38.5078125 C46.97805996 34.9959591 75.10426623 38.71529466 97.73046875 56.09765625 C103.53827054 61.07953766 107.9264808 66.53902088 112 73 C113.32 72.01 114.64 71.02 116 70 C115.01713954 61.60788376 107.55262518 55.04847712 101.375 49.8125 C82.80696113 35.82916208 61.35998978 30.59265576 38.375 30.625 C37.71836365 30.62554382 37.06172729 30.62608765 36.38519287 30.62664795 C25.42439402 30.66823796 15.42390121 31.62072499 5 35 Z' fill='%234E3B78' transform='translate(63,0)'/%3E%3Cpath d='M0 0 C5.27957047 5.78547525 9.31612861 13.25448014 10 21.125 C9.69743213 24.83293961 8.77676366 26.8914086 6.1875 29.5625 C-2.04152489 35.76003038 -13.60917874 39.6270706 -23.875 38.8125 C-24.535 38.1525 -25.195 37.4925 -25.875 36.8125 C-28.97847254 36.48234335 -31.03281176 36.30718706 -33.75 37.9375 C-35.40354531 40.69340884 -35.26865568 42.66325452 -34.875 45.8125 C-33.95833333 47.89583333 -33.95833333 47.89583333 -31.875 48.8125 C-28.29166667 48.89583333 -28.29166667 48.89583333 -24.875 47.8125 C-24.57086182 47.16466553 -24.26672363 46.51683105 -23.95336914 45.84936523 C-22.875 43.8125 -22.875 43.8125 -20.77124023 42.88696289 C-19.91731689 42.6883667 -19.06339355 42.48977051 -18.18359375 42.28515625 C-17.23806641 42.04990234 -16.29253906 41.81464844 -15.31835938 41.57226562 C-14.32642578 41.34216797 -13.33449219 41.11207031 -12.3125 40.875 C-4.77934417 39.10870895 1.54823541 36.95205932 8.125 32.8125 C7.81647145 40.06292099 4.56245219 45.32546918 -0.5 50.4609375 C-5.29811284 54.61130511 -8.83216751 54.86916719 -15 55 C-21.13677833 55.26569953 -25.04589225 56.51893716 -29.890625 60.31640625 C-39.17633501 67.31724667 -52.82450605 66.52799961 -63.875 65.8125 C-71.37432145 64.60538489 -79.4496824 61.2378176 -84.875 55.8125 C-86.81199027 55.70419517 -88.75076074 55.60687514 -90.69067383 55.58691406 C-97.68300211 55.51299157 -103.12007731 55.4392364 -108.44140625 50.40234375 C-108.91449219 49.87769531 -109.38757813 49.35304688 -109.875 48.8125 C-110.6175 48.090625 -111.36 47.36875 -112.125 46.625 C-118.35765562 36.60823203 -119.69570866 25.34707186 -117.25 13.8828125 C-113.47065738 3.0509466 -104.76645407 -4.0120534 -94.875 -9.1875 C-91.26850975 -10.75400624 -87.62602625 -12.0153043 -83.875 -13.1875 C-83.029375 -13.47496094 -82.18375 -13.76242188 -81.3125 -14.05859375 C-56.0861494 -22.29657387 -20.04377266 -18.06142152 0 0 Z' fill='%23FDFDFD' transform='translate(155.875,64.1875)'/%3E%3Cpath d='M0 0 C5.24479788 1.58079188 9.51172656 4.60408712 14.06640625 7.58984375 C18.37837094 10.28462973 18.37837094 10.28462973 23.30859375 11.1328125 C28.49696048 9.20971132 33.08639658 6.29555589 37.79882812 3.42578125 C43.66838131 -0.00837477 43.66838131 -0.00837477 47.27734375 0.078125 C49.34375 1.0078125 49.34375 1.0078125 51.34375 3.0078125 C51.82984303 7.30136192 51.71414913 11.62739332 51.71875 15.9453125 C51.74324219 17.15123047 51.76773438 18.35714844 51.79296875 19.59960938 C51.79876953 21.33114258 51.79876953 21.33114258 51.8046875 23.09765625 C51.81290527 24.15847412 51.82112305 25.21929199 51.82958984 26.31225586 C51.34375 29.0078125 51.34375 29.0078125 49.48461914 30.87670898 C46.29658529 32.56106989 44.78123809 32.062357 41.34375 31.0078125 C37.60135447 29.03986817 34.07891261 26.72386924 30.53320312 24.42578125 C26.44214688 21.80182316 26.44214688 21.80182316 21.77734375 20.921875 C17.60401055 22.78413283 13.85973006 25.2663764 10.046875 27.76953125 C5.85335687 30.41401513 2.44659272 31.9581498 -2.65625 32.0078125 C-4.33203125 30.87695312 -4.33203125 30.87695312 -5.65625 29.0078125 C-6.04443359 26.328125 -6.04443359 26.328125 -6.0546875 23.1328125 C-6.05855469 21.98296875 -6.06242187 20.833125 -6.06640625 19.6484375 C-6.05480469 18.44703125 -6.04320313 17.245625 -6.03125 16.0078125 C-6.04285156 14.80640625 -6.05445312 13.605 -6.06640625 12.3671875 C-6.06253906 11.21734375 -6.05867188 10.0675 -6.0546875 8.8828125 C-6.05130371 7.82835937 -6.04791992 6.77390625 -6.04443359 5.6875 C-5.65625 3.0078125 -5.65625 3.0078125 -4.29736328 1.14111328 C-2.65625 0.0078125 -2.65625 0.0078125 0 0 Z' fill='%23FCFCFD' transform='translate(78.65625,136.9921875)'/%3E%3Cpath d='M0 0 C2.5 0.625 2.5 0.625 4.8125 2.625 C6.96830116 6.4575354 7.24792603 9.32007692 6.5 13.625 C5.34367254 15.98793002 4.35016245 17.77483755 2.5 19.625 C0.1875 20 0.1875 20 -2.5 19.625 C-5.06638215 17.47478793 -6.29103188 15.79226637 -6.88671875 12.46484375 C-7.08084032 8.45522921 -6.77549931 6.12498023 -4.8125 2.5625 C-2.5 0.625 -2.5 0.625 0 0 Z' fill='%2353417C' transform='translate(138.5,67.375)'/%3E%3Cpath d='M0 0 C2.5 0.6875 2.5 0.6875 4.8125 2.625 C7.08407605 6.74748987 7.32547179 10.07653131 6.5 14.6875 C4.8125 17.75 4.8125 17.75 2.5 19.6875 C-0.0625 20.25 -0.0625 20.25 -2.5 19.6875 C-5.30401904 17.38419865 -5.84979387 14.76309142 -6.4375 11.3125 C-6.72853275 7.71913649 -6.44645777 6.57011897 -4.875 3.125 C-2.5 0.6875 -2.5 0.6875 0 0 Z' fill='%23523F7B' transform='translate(64.5,67.3125)'/%3E%3Cpath d='M0 0 C8.91 0 17.82 0 27 0 C24.81183076 5.47042311 24.169236 6.55141452 19 9 C14.08609728 9.94526984 9.88605617 10.13992406 5.51171875 7.49609375 C3.4733513 5.76185217 1.65854906 4.10051199 0 2 C0 1.34 0 0.68 0 0 Z' fill='%23574680' transform='translate(88,95)'/%3E%3C/svg%3E\");\n}\n\n/* Support for image tags in mention badges */\n:host ::ng-deep .mention-badge img {\n width: 16px;\n height: 16px;\n border-radius: 50%;\n object-fit: cover;\n vertical-align: middle;\n}\n\n:host ::ng-deep .mention-badge:hover {\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-lg);\n}\n\n/* Configuration preset indicator for agent mentions with non-default presets */\n/* Matches the styling from mention-editor.component.ts (lines 432-444) */\n:host ::ng-deep .mention-badge .preset-indicator {\n display: inline-block;\n font-size: 10px;\n font-weight: 600;\n font-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Roboto Mono', 'Courier New', monospace;\n background: rgba(255, 255, 255, 0.25);\n padding: 2px 6px;\n border-radius: 4px;\n margin-left: 4px;\n letter-spacing: 0.3px;\n text-transform: uppercase;\n border: 1px solid rgba(255, 255, 255, 0.15);\n}\n\n.message-avatar {\n flex-shrink: 0;\n}\n\n.avatar-circle {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 16px;\n color: var(--mj-text-inverse);\n}\n\n/* User avatars are circular */\n.avatar-circle.user-avatar {\n border-radius: 50%;\n background-color: var(--mj-text-primary);\n}\n\n/* Agent avatars are square with rounded corners */\n.avatar-circle.ai-avatar {\n border-radius: 8px;\n background-color: var(--mj-brand-primary); /* Brand color for agents */\n}\n\n/* Avatar images (for users with uploaded photos or URLs) */\n/* Host-supplied assistant avatar: the AI tile is a rounded SQUARE (8px, brand\n fill), so the image must clip to the tile's radius \u2014 not the user avatar's\n 50% circle \u2014 and the brand fill must drop so nothing peeks out at the\n corners or behind a transparent image. */\n.avatar-circle.ai-avatar.avatar-has-image {\n background-color: transparent;\n overflow: hidden;\n}\n.avatar-circle.ai-avatar .avatar-image {\n border-radius: inherit;\n}\n\n.avatar-image {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 50%;\n}\n\n/* Container for the standard mj-loading indicator while an artifact's rows load. Layout only \u2014\n the indicator owns its own animation, so there is no bespoke shimmer to keep re-themed. */\n.artifact-pending {\n display: flex;\n align-items: center;\n padding: 12px 16px;\n}\n\n/* System artifact styling - subtle visual distinction */\n.artifact-wrapper.system-artifact {\n opacity: 0.85;\n position: relative;\n}\n\n.artifact-wrapper.system-artifact::before {\n content: 'SYSTEM';\n position: absolute;\n top: 8px;\n right: 8px;\n font-size: 9px;\n font-weight: 600;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 2px 6px;\n border-radius: 3px;\n letter-spacing: 0.5px;\n z-index: 10;\n}\n\n/* Multi-artifact showcase: supporting step outputs in a collapsible grid + brand-tinted final deliverable */\n.multi-artifact-showcase {\n display: flex;\n flex-direction: column;\n gap: 10px;\n margin-top: 12px;\n}\n\n/* Strip the default 12px top/bottom margin from inner <mj-artifact-message-card> when inside the showcase\n so the grid and Final Deliverable containers control padding and vertical rhythm directly. */\n.multi-artifact-showcase ::ng-deep .artifact-message-card {\n margin: 0;\n}\n\n.multi-artifact-supporting-section {\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n background: var(--mj-bg-surface-sunken);\n overflow: hidden;\n}\n\n.supporting-artifacts-header {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n background: color-mix(in srgb, var(--mj-bg-surface-sunken) 65%, var(--mj-bg-surface-card));\n border: none;\n border-bottom: 1px solid var(--mj-border-subtle);\n cursor: pointer;\n color: var(--mj-text-secondary);\n font-size: 12px;\n font-weight: 600;\n text-align: left;\n transition: background-color 0.15s ease;\n}\n\n.multi-artifact-supporting-section.is-collapsed .supporting-artifacts-header {\n border-bottom: none;\n}\n\n.supporting-artifacts-header:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.supporting-header-left {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n flex-wrap: wrap;\n}\n\n.supporting-header-icon {\n color: var(--mj-brand-primary);\n font-size: 12px;\n}\n\n.supporting-header-title {\n color: var(--mj-text-primary);\n letter-spacing: 0.01em;\n}\n\n.supporting-header-count {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 18px;\n height: 18px;\n padding: 0 6px;\n border-radius: 999px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n font-size: 11px;\n font-weight: 600;\n}\n\n.supporting-collapsed-preview {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n margin-left: 4px;\n flex-wrap: wrap;\n min-width: 0;\n}\n\n.supporting-preview-pill {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n max-width: 220px;\n padding: 2px 8px;\n border-radius: 999px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n font-size: 11px;\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.supporting-preview-index {\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-text-muted);\n}\n\n.supporting-header-right {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-text-muted);\n font-size: 11px;\n font-weight: 500;\n flex-shrink: 0;\n}\n\n.supporting-chevron {\n font-size: 10px;\n transition: transform 0.18s ease;\n}\n\n.supporting-chevron.rotated {\n transform: rotate(180deg);\n}\n\n.supporting-artifacts-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));\n gap: 10px;\n padding: 12px 14px;\n}\n\n.supporting-artifact-cell {\n position: relative;\n min-width: 0;\n}\n\n.supporting-artifact-cell ::ng-deep .artifact-info-bar {\n padding: 10px 44px 10px 12px;\n border-radius: 8px;\n}\n\n.supporting-step-badge {\n position: absolute;\n top: 50%;\n right: 12px;\n transform: translateY(-50%);\n z-index: 5;\n display: inline-flex;\n align-items: center;\n padding: 2px 6px;\n border-radius: 999px;\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n pointer-events: none;\n}\n\n.multi-artifact-primary-section {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 10px 14px 12px 14px;\n border-radius: 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 7%, var(--mj-bg-surface-card));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 38%, var(--mj-border-default));\n box-shadow: 0 2px 10px color-mix(in srgb, var(--mj-brand-primary) 8%, transparent);\n}\n\n.primary-artifact-header {\n display: flex;\n align-items: center;\n gap: 7px;\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-brand-primary);\n}\n\n.primary-header-icon {\n font-size: 11px;\n}\n\n.primary-step-badge {\n display: inline-flex;\n align-items: center;\n padding: 1px 7px;\n border-radius: 999px;\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 32%, var(--mj-border-subtle));\n}\n\n.primary-artifact-card {\n min-width: 0;\n}\n\n.primary-artifact-card ::ng-deep .artifact-info-bar {\n background: color-mix(in srgb, var(--mj-brand-primary) 11%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 38%, var(--mj-border-default));\n border-radius: 8px;\n}\n\n.primary-artifact-card ::ng-deep .artifact-info-bar:hover {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n}\n\n.primary-artifact-card ::ng-deep .artifact-icon {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface-sunken));\n color: var(--mj-brand-primary);\n}\n\n.message-content {\n flex: 1;\n min-width: 0;\n position: relative;\n}\n\n.message-header {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 4px;\n font-size: 13px;\n}\n\n.message-sender {\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n/* Agent role badge */\n.agent-badge {\n display: inline-block;\n padding: 2px 8px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.message-time {\n color: var(--mj-text-muted);\n font-size: 12px;\n font-weight: 400;\n}\n\n/* Right-side cluster anchoring.\n The first of these siblings that actually renders absorbs the\n `margin-left: auto`, pushing the whole cluster right. Subsequent siblings\n then sit next to it (relying on the flex container's `gap`). This used to\n live only on .time-pill, which broke when timePillText returned null after\n agent completion \u2014 the gear icon would shift to the left. */\n.time-pill,\n.test-feedback-icon,\n.message-action-group,\n.agent-run-icon {\n margin-left: auto;\n}\n.time-pill ~ .test-feedback-icon,\n.time-pill ~ .message-action-group,\n.time-pill ~ .agent-run-icon,\n.test-feedback-icon ~ .message-action-group,\n.test-feedback-icon ~ .agent-run-icon,\n.message-action-group ~ .agent-run-icon {\n margin-left: 8px;\n}\n\n/* Message actions: always visible at the right end of the header, in DOM order (no overlay),\n with the same look as the gear (.agent-run-icon). */\n.message-action-group {\n display: inline-flex;\n align-items: center;\n gap: var(--mj-space-2);\n}\n/* Labeled actions on the latest turn need more room between them than icons do */\n.message-action-group.labeled {\n gap: var(--mj-space-4);\n}\n.message-header-action {\n gap: var(--mj-space-2);\n min-width: 20px;\n padding: 0;\n border: none;\n background: transparent;\n font: inherit;\n font-size: 12px;\n}\n.message-header-action i {\n font-size: 13px;\n}\n.message-header-action:focus-visible {\n outline: none;\n border-radius: var(--mj-radius-sm);\n box-shadow: var(--mj-focus-ring);\n}\n/* Inherited rows fade to 70%; the stronger color keeps the header icons at 3:1 against the surface */\n.message-item.fork-rail-inherited .message-header-action:not(:hover),\n.message-item.fork-rail-inherited .agent-run-icon:not(:hover):not(.expanded) {\n color: var(--mj-text-secondary);\n}\n.message-action-group .action-label-short {\n display: none;\n}\n\n/* Time pill - unified styling for all AI message states */\n.time-pill {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 500;\n transition: all 0.3s ease;\n}\n\n.time-pill i {\n font-size: 10px;\n}\n\n/* Stop control beside the in-progress time pill \u2014 same pill geometry, error palette so it\n reads as the one destructive control in the header. */\n.stop-run-pill {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 8px;\n border-radius: 10px;\n border: 1px solid transparent;\n font-size: 11px;\n font-weight: 500;\n line-height: inherit;\n cursor: pointer;\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n transition: all 0.2s ease;\n}\n\n.stop-run-pill i {\n font-size: 10px;\n}\n\n.stop-run-pill:hover:not(:disabled) {\n border-color: var(--mj-status-error);\n}\n\n.stop-run-pill:disabled {\n cursor: default;\n opacity: 0.7;\n}\n\n/* Complete state - light blue (default) */\n.time-pill.complete {\n background: var(--mj-status-info-bg);\n color: var(--mj-status-info-text);\n}\n\n/* Stopped state - neutral: a stopped run is neither a success nor an error, and the error\n palette belongs to the stalled state. Follows .complete so it wins on equal specificity. */\n.time-pill.stopped {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n/* In-progress state - brand color with subtle pulse */\n.time-pill.in-progress {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n/* Active agent run state - brand color with subtle pulse */\n.time-pill.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n/* Liveness states (MJ #4222) \u2014 the run may no longer be progressing, so the pill stops\n presenting the elapsed time as healthy progress. These follow .in-progress/.active in the\n stylesheet so they win on equal specificity. */\n.time-pill.checking {\n background: var(--mj-status-warning-bg);\n color: var(--mj-status-warning-text);\n}\n\n.time-pill.stalled {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n}\n\n.time-pill .liveness-label {\n font-weight: 400;\n opacity: 0.85;\n}\n\n/* Failed state - red */\n.time-pill.failed {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n}\n\n@keyframes pillPulse {\n 0%, 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.85;\n }\n}\n\n/* A stopped reply: the kept-step line and the Continue control under the reply text */\n.stopped-line {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n margin-top: var(--mj-space-2);\n font-size: var(--mj-text-xs);\n color: var(--mj-text-secondary);\n}\n.stopped-line i {\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n.stopped-actions {\n display: flex;\n gap: var(--mj-space-2);\n margin-top: var(--mj-space-2);\n}\n\n/* Deprecated - keeping for backward compatibility but no longer used */\n.generation-time {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 8px;\n background: var(--mj-status-info-bg);\n border-radius: 10px;\n font-size: 11px;\n color: var(--mj-status-info-text);\n font-weight: 500;\n margin-left: auto;\n}\n\n.generation-time i {\n font-size: 10px;\n}\n\n/* Deprecated - keeping for backward compatibility but no longer used */\n.message-elapsed {\n color: var(--mj-text-muted);\n font-size: 11px;\n font-style: italic;\n}\n\n.message-body {\n margin-bottom: 0;\n}\n\n.message-text {\n color: var(--mj-text-primary);\n line-height: 1.5;\n word-wrap: break-word;\n}\n\n/* Remove extra margin from markdown paragraphs */\n.message-text mj-markdown > :first-child,\n.message-text ::ng-deep .mj-markdown-container > :first-child {\n margin-top: 0;\n}\n\n.message-text mj-markdown > :last-child,\n.message-text ::ng-deep .mj-markdown-container > :last-child {\n margin-bottom: 0;\n}\n\n/* Asymmetric bubble shapes for message content */\n.message-item.user-message .message-content {\n border-radius: 12px 12px 12px 4px;\n}\n\n.message-item.ai-message .message-content {\n border-radius: 4px 12px 12px 12px;\n}\n\n/* Reaction Buttons */\n.message-reactions {\n display: none; /* Hide reactions for now - not implemented */\n}\n\n/* Artifact Card - Claude.ai Style */\n.artifact-card {\n display: flex;\n flex-direction: column;\n gap: 12px;\n margin-top: 12px;\n padding: 16px;\n border: 1px solid color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n border-radius: 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, var(--mj-bg-surface));\n cursor: pointer;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n max-width: 500px;\n box-shadow: var(--mj-shadow-sm);\n position: relative;\n overflow: hidden;\n}\n\n.artifact-card::before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 3px;\n background: var(--mj-brand-primary);\n opacity: 1;\n}\n\n.artifact-card:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n box-shadow: var(--mj-shadow-md);\n transform: translateY(-1px);\n}\n\n.artifact-card-header {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n}\n\n.artifact-card-icon {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-brand-primary);\n flex-shrink: 0;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n border-radius: 6px;\n transition: all 0.2s ease;\n}\n\n.artifact-card:hover .artifact-card-icon {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n transform: scale(1.05);\n}\n\n.artifact-card-icon i {\n font-size: 18px;\n}\n\n.artifact-card-content {\n flex: 1;\n min-width: 0;\n}\n\n.artifact-card-label {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n letter-spacing: -0.01em;\n margin-bottom: 4px;\n}\n\n.artifact-card-description {\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n}\n\n/* Thread indicator badge */\n.thread-indicator {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n margin-top: 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n border-radius: 16px;\n cursor: pointer;\n transition: all 150ms ease;\n font-size: 12px;\n color: var(--mj-brand-primary-hover);\n font-weight: 500;\n}\n\n.thread-indicator:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.thread-indicator i {\n font-size: 14px;\n}\n\n.thread-count {\n font-weight: 600;\n}\n\n/* Edit mode styles */\n.message-item.editing {\n background-color: var(--mj-status-warning-bg);\n border-left: 3px solid var(--mj-status-warning);\n}\n\n.message-edit-container {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.message-edit-textarea {\n width: 100%;\n padding: 12px;\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n font-family: inherit;\n font-size: 14px;\n line-height: 1.6;\n resize: vertical;\n min-height: 80px;\n transition: border-color 150ms ease;\n}\n\n.message-edit-textarea:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.edit-actions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px;\n}\n\n/* What the save does, at the right end of the button row */\n.edit-note {\n margin-left: auto;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-secondary);\n}\n\n/* The answer \"Save and resend\" will replace dims while that edit is open */\n.message-item.pending-replace .message-body {\n opacity: 0.6;\n}\n\n.edit-hint {\n font-size: 12px;\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n.edited-badge {\n margin-left: 8px;\n font-size: 11px;\n color: var(--mj-text-muted);\n font-style: italic;\n font-weight: normal;\n}\n\n/* Message Action Bar (separate panel above agent details) */\n.message-action-bar {\n margin-top: 12px;\n margin-bottom: 8px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px;\n}\n\n.action-bar-container {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.action-buttons {\n display: flex;\n gap: 4px;\n margin-left: 16px;\n padding-left: 16px;\n border-left: 1px solid var(--mj-border-default);\n}\n\n.action-bar-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 6px 10px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-text-muted);\n border-radius: 6px;\n font-size: 16px;\n line-height: 1;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s;\n min-width: 36px;\n height: 32px;\n opacity: 0.6;\n}\n\n.action-bar-btn i {\n font-size: 16px;\n line-height: 1;\n}\n\n/* A footer button with a text label (Regenerate) */\n.action-bar-btn.labeled {\n gap: var(--mj-space-2);\n min-width: 0;\n padding: 6px 12px;\n font-size: 13px;\n}\n\n.action-bar-btn.labeled i {\n font-size: 14px;\n}\n\n.action-bar-btn:hover {\n opacity: 1;\n border-color: var(--mj-text-secondary);\n}\n\n.action-bar-btn.danger {\n color: var(--mj-status-error);\n}\n\n.action-bar-btn.danger:hover {\n opacity: 1;\n background: var(--mj-status-error-bg);\n border-color: var(--mj-status-error);\n}\n\n.action-bar-btn i.pinned {\n color: var(--mj-brand-primary);\n}\n\n.action-bar-btn.test-feedback {\n color: var(--mj-status-warning);\n}\n\n.action-bar-btn.test-feedback:hover {\n opacity: 1;\n background: var(--mj-status-warning-bg);\n border-color: var(--mj-status-warning);\n}\n\n/* Message status indicator */\n.message-status {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n padding: 2px 8px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 4px;\n margin-left: 8px;\n animation: statusPulse 2s ease-in-out infinite;\n}\n\n.message-status i {\n color: var(--mj-brand-primary);\n font-size: 11px;\n}\n\n.message-status.error {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.message-status.error i {\n color: var(--mj-status-error);\n}\n\n.status-text {\n font-weight: 500;\n}\n\n@keyframes statusPulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.7; }\n}\n\n/* ============================================\n Agent Run Icon & Details Panel\n ============================================ */\n\n/* Agent run gear icon in header - muted style for power users.\n Left-margin is governed by the right-side cluster rules above so the gear\n stays right-anchored whether or not the time pill / test-feedback icon\n renders alongside it. */\n.agent-run-icon,\n.message-header-action {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: 20px;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.2s ease;\n user-select: none;\n}\n\n.agent-run-icon {\n width: 20px;\n}\n\n.agent-run-icon i.fa-cog {\n font-size: 13px;\n}\n\n.agent-run-icon:hover,\n.message-header-action:hover {\n color: var(--mj-text-secondary);\n}\n\n.agent-run-icon.expanded {\n color: var(--mj-brand-primary);\n transform: scale(1.1);\n}\n\n/* Test feedback icon in header - appears for test runs.\n Left-margin handled by the right-side cluster rules above. */\n.test-feedback-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.2s ease;\n user-select: none;\n}\n\n.test-feedback-icon i.fa-flask {\n font-size: 13px;\n}\n\n.test-feedback-icon:hover {\n color: var(--mj-brand-primary); /* Blue color for test feedback */\n transform: scale(1.1);\n}\n\n@keyframes rotate {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n/* Agent details panel */\n.agent-details-panel {\n margin-top: 12px;\n padding: 16px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n animation: slideDown 0.2s ease;\n}\n\n@keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n/* Loading state */\n.agent-details-loading {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-text-secondary);\n font-size: 13px;\n}\n\n.agent-details-loading i {\n color: var(--mj-brand-primary);\n}\n\n/* Error state */\n.agent-details-error {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-status-error);\n font-size: 13px;\n}\n\n.agent-details-error i {\n color: var(--mj-status-error);\n}\n\n/* Content header */\n.agent-details-header {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 12px;\n padding-bottom: 8px;\n border-bottom: 1px solid var(--mj-border-default);\n font-weight: 600;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.agent-details-header i {\n color: var(--mj-brand-primary);\n}\n\n.agent-name-link {\n color: var(--mj-brand-primary);\n cursor: pointer;\n text-decoration: none;\n font-weight: 600;\n transition: all 0.2s ease;\n}\n\n.agent-name-link:hover {\n color: var(--mj-brand-primary-hover);\n text-decoration: underline;\n}\n\n/* Details grid */\n.agent-details-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.detail-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 6px;\n border: 1px solid var(--mj-border-default);\n}\n\n.detail-label {\n font-size: 12px;\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.detail-value {\n font-size: 13px;\n color: var(--mj-text-primary);\n font-weight: 600;\n font-family: 'Monaco', 'Menlo', 'Consolas', monospace;\n}\n\n/* Status badge in details */\n.status-badge {\n padding: 3px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-badge.status-pending {\n background: var(--mj-status-warning-bg);\n color: var(--mj-status-warning-text);\n}\n\n.status-badge.status-running {\n background: var(--mj-status-info-bg);\n color: var(--mj-status-info-text);\n}\n\n.status-badge.status-complete {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n.status-badge.status-failed,\n.status-badge.status-error {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n}\n\n.status-badge.status-cancelled {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n/* Run ID link styling */\n.run-id-link {\n color: var(--mj-brand-primary);\n cursor: pointer;\n text-decoration: none;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n transition: all 0.2s ease;\n}\n\n.run-id-link:hover {\n color: var(--mj-brand-primary-hover);\n text-decoration: underline;\n}\n\n.run-id-link i.fa-external-link-alt {\n font-size: 10px;\n opacity: 0.7;\n}\n\n/* Tasks section in agent details */\n.agent-details-tasks {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.tasks-section-header {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 12px;\n font-weight: 600;\n font-size: 12px;\n color: var(--mj-text-primary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.tasks-section-header i {\n color: var(--mj-brand-primary);\n font-size: 11px;\n}\n\n.tasks-list {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.tasks-list mj-task-widget {\n display: block;\n}\n\n/* Artifact version badge */\n.artifact-version-badge {\n display: inline-block;\n margin-left: 8px;\n padding: 2px 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 11px;\n font-weight: 600;\n font-family: monospace;\n border-radius: 4px;\n vertical-align: middle;\n}\n\n/* Message Footer (rating counts and inline actions) */\n.message-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.rating-counts {\n display: flex;\n align-items: center;\n gap: 12px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.rating-count {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.rating-count.thumbs-up {\n color: var(--mj-status-success);\n}\n\n.rating-count.thumbs-down {\n color: var(--mj-status-error);\n}\n\n.rating-total {\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n/* Delete button \u2014 always visible on the last message, no hover required */\n.inline-delete {\n display: flex;\n align-items: center;\n}\n\n.message-item.pinned {\n border-left: 3px solid var(--mj-status-warning);\n background-color: color-mix(in srgb, var(--mj-status-warning) 8%, transparent);\n}\n\n/* Wraps pin button + rating component on the right side of the footer */\n.ai-message-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-left: auto;\n}\n\n.action-bar-btn.pin-btn {\n color: var(--mj-text-muted);\n}\n\n.action-bar-btn.pin-btn:hover {\n color: var(--mj-status-warning);\n border-color: var(--mj-status-warning);\n}\n\n.action-bar-btn.pin-btn.pinned {\n opacity: 1;\n color: var(--mj-status-warning);\n border-color: var(--mj-status-warning-border);\n background: color-mix(in srgb, var(--mj-status-warning) 10%, var(--mj-bg-surface));\n}\n\n/* Delete + Rating + Pin in gear panel for non-last messages \u2014 mirrors .message-footer layout */\n.agent-panel-actions {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 0 0;\n margin-top: 8px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n/* Agent details section wrapper */\n.agent-details-section {\n margin-top: 8px;\n}\n\n/* Mobile adjustments: 481px - 768px */\n@media (max-width: 768px) {\n .message-item {\n padding: 8px 12px;\n gap: 8px;\n }\n\n .avatar-circle {\n width: 32px;\n height: 32px;\n font-size: 14px;\n }\n\n .artifact-card {\n max-width: 90vw;\n padding: 12px;\n }\n\n .artifact-card-icon {\n width: 32px;\n height: 32px;\n }\n\n .artifact-card-icon i {\n font-size: 16px;\n }\n\n .message-header {\n font-size: 12px;\n }\n\n .message-sender {\n font-size: 12px;\n }\n\n .message-time {\n font-size: 11px;\n }\n\n .agent-badge {\n font-size: 10px;\n padding: 1px 6px;\n }\n\n .time-pill {\n font-size: 10px;\n padding: 2px 6px;\n }\n\n /* The latest turn's Fork from here shortens to \"Fork\" */\n .message-action-group .action-label-long {\n display: none;\n }\n\n .message-action-group .action-label-short {\n display: inline;\n }\n}\n\n/* Small Phone adjustments: <= 480px */\n@media (max-width: 480px) {\n .message-item {\n padding: 6px 8px;\n gap: 6px;\n }\n\n .avatar-circle {\n width: 28px;\n height: 28px;\n font-size: 12px;\n }\n\n .avatar-circle.ai-avatar {\n border-radius: 6px;\n }\n\n .artifact-card {\n padding: 10px;\n margin-top: 8px;\n }\n\n .artifact-card-header {\n gap: 8px;\n }\n\n .artifact-card-icon {\n width: 28px;\n height: 28px;\n }\n\n .artifact-card-icon i {\n font-size: 14px;\n }\n\n .artifact-card-label {\n font-size: 13px;\n }\n\n .artifact-card-description {\n font-size: 12px;\n }\n\n .message-header {\n font-size: 11px;\n gap: 6px;\n }\n\n .message-sender {\n font-size: 11px;\n }\n\n .message-time {\n font-size: 10px;\n }\n\n .agent-badge {\n font-size: 9px;\n padding: 1px 5px;\n }\n\n .time-pill {\n font-size: 9px;\n padding: 1px 5px;\n }\n\n .thread-indicator {\n padding: 4px 8px;\n font-size: 11px;\n margin-top: 6px;\n }\n\n .agent-details-panel {\n padding: 12px;\n margin-top: 8px;\n }\n\n .agent-details-grid {\n grid-template-columns: 1fr;\n gap: 8px;\n }\n\n .detail-row {\n padding: 6px 8px;\n }\n\n .detail-label,\n .detail-value {\n font-size: 11px;\n }\n}\n\n/* Form Response Pills */\n:host ::ng-deep .form-response-pill {\n margin: 0 3px;\n transition: all 0.2s ease;\n}\n\n/* Single field form - inline pill (similar to mention badges) */\n:host ::ng-deep .form-response-pill.single-field {\n display: inline-flex;\n align-items: center;\n vertical-align: middle;\n gap: 6px;\n padding: 4px 12px;\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n border: 2px solid color-mix(in srgb, var(--mj-status-success) 40%, transparent);\n border-radius: 16px;\n font-size: 13px;\n font-weight: 600;\n box-shadow: var(--mj-shadow-md);\n cursor: default;\n white-space: nowrap;\n}\n\n/* Multi-field form - card-style (block display) */\n:host ::ng-deep .form-response-pill.multi-field {\n display: inline-block;\n max-width: min(800px, 100%);\n width: auto;\n min-width: 400px;\n margin: 8px 0;\n vertical-align: top;\n}\n\n:host ::ng-deep .form-response-pill.single-field i {\n font-size: 11px;\n opacity: 0.95;\n}\n\n:host ::ng-deep .form-response-pill.single-field strong {\n font-weight: 600;\n margin-right: 4px;\n}\n\n/* Multi-field form - card-style pill */\n:host ::ng-deep .form-response-pill .pill-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n font-weight: 600;\n font-size: 13px;\n border-radius: 12px 12px 0 0;\n border: 2px solid color-mix(in srgb, var(--mj-status-success) 40%, transparent);\n border-bottom: none;\n box-shadow: var(--mj-shadow-md);\n}\n\n:host ::ng-deep .form-response-pill .pill-header i {\n font-size: 12px;\n opacity: 0.95;\n}\n\n:host ::ng-deep .form-response-pill .pill-fields {\n padding: 10px 12px;\n background: color-mix(in srgb, var(--mj-status-success) 8%, transparent);\n border: 2px solid color-mix(in srgb, var(--mj-status-success) 40%, transparent);\n border-top: none;\n border-radius: 0 0 12px 12px;\n}\n\n:host ::ng-deep .form-response-pill .pill-field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 12px 0;\n font-size: 13px;\n}\n\n:host ::ng-deep .form-response-pill .pill-field:not(:last-child) {\n border-bottom: 1px solid color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n padding-bottom: 12px;\n margin-bottom: 0;\n}\n\n:host ::ng-deep .form-response-pill .field-question {\n font-weight: 600;\n color: var(--mj-status-success);\n font-size: 12px;\n line-height: 1.4;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n opacity: 0.9;\n}\n\n:host ::ng-deep .form-response-pill .field-answer {\n color: var(--mj-text-primary);\n font-weight: 400;\n font-size: 15px;\n line-height: 1.6;\n padding: 8px 0 8px 12px;\n background: transparent;\n border-left: 3px solid color-mix(in srgb, var(--mj-status-success) 40%, transparent);\n font-style: italic;\n}\n\n\n/* Hover effect for form pills */\n:host ::ng-deep .form-response-pill.single-field:hover {\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-lg);\n}\n\n:host ::ng-deep .form-response-pill.multi-field:hover {\n transform: translateY(-1px);\n}\n\n:host ::ng-deep .form-response-pill.multi-field:hover .pill-header {\n box-shadow: var(--mj-shadow-lg);\n}\n\n/* Responsive adjustments for multi-field forms */\n@media (max-width: 600px) {\n :host ::ng-deep .form-response-pill.multi-field {\n min-width: 300px;\n }\n}\n\n@media (max-width: 400px) {\n :host ::ng-deep .form-response-pill.multi-field {\n min-width: 100%;\n }\n\n :host ::ng-deep .form-response-pill .field-question {\n font-size: 11px;\n }\n\n :host ::ng-deep .form-response-pill .field-answer {\n font-size: 14px;\n padding: 6px 0 6px 10px;\n }\n}\n\n/* ==================== Message Attachments ==================== */\n\n.message-attachments {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n margin-top: 12px;\n margin-bottom: 8px;\n}\n\n.attachment-item {\n position: relative;\n border-radius: 8px;\n overflow: hidden;\n cursor: pointer;\n transition: transform 0.2s, box-shadow 0.2s;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid color-mix(in srgb, var(--mj-text-primary) 10%, transparent);\n}\n\n.attachment-item:hover {\n transform: scale(1.02);\n box-shadow: var(--mj-shadow-md);\n}\n\n.attachment-item.image-attachment {\n width: 200px;\n height: 150px;\n}\n\n.attachment-thumbnail {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n}\n\n.attachment-overlay {\n position: absolute;\n inset: 0;\n background: var(--mj-bg-overlay);\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0;\n transition: opacity 0.2s;\n}\n\n.attachment-item:hover .attachment-overlay {\n opacity: 1;\n}\n\n.attachment-overlay i {\n color: var(--mj-text-inverse);\n font-size: 24px;\n}\n\n/* Non-image attachment tile: horizontal strip with UPPERCASE type badge,\n filename, and size. Artifact-typed attachments get a brand-primary tinted\n badge to distinguish them from plain uploads. */\n.attachment-strip {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px 12px 8px 8px;\n width: 320px;\n max-width: 100%;\n min-height: 56px;\n cursor: pointer;\n border-radius: 8px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n transition: background 0.15s, border-color 0.15s;\n}\n\n.attachment-strip:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n}\n\n.attachment-badge {\n flex: 0 0 auto;\n min-width: 48px;\n height: 48px;\n padding: 0 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 11px;\n font-weight: 700;\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-subtle);\n user-select: none;\n text-align: center;\n line-height: 1;\n white-space: nowrap;\n}\n\n.attachment-strip.is-artifact .attachment-badge {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.attachment-meta {\n display: flex;\n flex-direction: column;\n min-width: 0; /* allow ellipsis inside flex child */\n gap: 2px;\n}\n\n.attachment-strip .file-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.attachment-strip .file-size {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n/* Responsive attachments */\n@media (max-width: 600px) {\n .attachment-item.image-attachment {\n width: 150px;\n height: 112px;\n }\n\n .attachment-strip {\n width: 100%;\n }\n}\n/* \u2500\u2500 Markdown-rendered textarea values inside submitted form pills (e.g. the approved Plan) \u2500\u2500 */\n:host ::ng-deep .form-response-pill .field-answer-markdown {\n font-style: normal; /* the pill's default italic reads poorly on multi-line formatted content */\n font-size: 13.5px;\n line-height: 1.6;\n color: var(--mj-text-primary);\n}\n:host ::ng-deep .form-response-pill .field-answer-markdown h1,\n:host ::ng-deep .form-response-pill .field-answer-markdown h2,\n:host ::ng-deep .form-response-pill .field-answer-markdown h3,\n:host ::ng-deep .form-response-pill .field-answer-markdown h4 {\n font-size: 13.5px;\n font-weight: 700;\n margin: 10px 0 4px;\n color: var(--mj-text-primary);\n}\n:host ::ng-deep .form-response-pill .field-answer-markdown p {\n margin: 6px 0;\n}\n:host ::ng-deep .form-response-pill .field-answer-markdown ul,\n:host ::ng-deep .form-response-pill .field-answer-markdown ol {\n margin: 6px 0;\n padding-left: 22px;\n}\n:host ::ng-deep .form-response-pill .field-answer-markdown li {\n margin: 3px 0;\n}\n:host ::ng-deep .form-response-pill .field-answer-markdown code {\n font-size: 12px;\n padding: 1px 5px;\n border-radius: 4px;\n background: color-mix(in srgb, var(--mj-status-success) 12%, transparent);\n}\n:host ::ng-deep .form-response-pill .field-answer-markdown table {\n border-collapse: collapse;\n margin: 8px 0;\n}\n:host ::ng-deep .form-response-pill .field-answer-markdown th,\n:host ::ng-deep .form-response-pill .field-answer-markdown td {\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 25%, transparent);\n padding: 4px 10px;\n font-size: 12.5px;\n}\n\n/* Fork chips: one per fork placed under the message */\n.message-fork-chips {\n display: flex;\n flex-wrap: wrap;\n gap: var(--mj-space-2);\n margin-top: var(--mj-space-2);\n}\n.message-fork-chips > button {\n display: inline-flex;\n align-items: center;\n gap: var(--mj-space-2);\n max-width: 100%;\n min-width: 0;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: var(--mj-text-xs);\n}\n.message-fork-chips > button:hover {\n background: var(--mj-bg-surface-hover);\n}\n.message-fork-chips .fork-chip-icon {\n color: var(--mj-status-info);\n}\n.message-fork-chips > button[data-kind='Edit'] .fork-chip-icon {\n color: var(--mj-status-warning);\n}\n.message-fork-chips > button[data-kind='Regenerate'] .fork-chip-icon {\n color: var(--mj-brand-tertiary);\n}\n.fork-chip-avatars {\n display: inline-flex;\n}\n.fork-chip-avatar {\n width: 20px;\n height: 20px;\n margin-left: -6px;\n border: 2px solid var(--mj-bg-surface);\n border-radius: var(--mj-radius-full);\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 9px;\n font-weight: 600;\n overflow: hidden;\n}\n.fork-chip-avatar:first-child {\n margin-left: 0;\n}\n.fork-chip-avatar img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n.fork-chip-messages {\n font-weight: 600;\n color: var(--mj-text-link);\n}\n/* The name is the part of a chip that shrinks: a long name ends in an ellipsis inside a narrow column. */\n.fork-chip-name {\n font-weight: 500;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.fork-chip-time {\n color: var(--mj-text-muted);\n}\n\n/* Fork view rails: inherited rows faded on a dashed rail, the fork's own rows on a solid rail.\n The row's children fade, not the row, so the row's fade-in animation ends at the faded state. */\n.message-item.fork-rail-inherited {\n border-left: 2px dashed var(--mj-border-strong);\n padding-left: var(--mj-space-4);\n}\n.message-item.fork-rail-inherited > * {\n opacity: 0.7;\n}\n.message-item.fork-rail-own {\n border-left: 2px solid var(--mj-brand-primary);\n padding-left: var(--mj-space-4);\n}\n\n/* Fork marker: a full-opacity divider under the last inherited row of a fork view, outside both rails */\n.fork-marker {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n padding: var(--mj-space-2) var(--mj-space-6);\n font-size: var(--mj-text-xs);\n color: var(--mj-text-secondary);\n}\n.fork-marker i {\n color: var(--mj-status-info);\n}\n.fork-marker-line {\n flex: 1;\n height: 1px;\n background: var(--mj-border-default);\n}\n/* The marker lines up with the row padding of narrow screens */\n@media (max-width: 768px) {\n .fork-marker {\n padding: var(--mj-space-2) var(--mj-space-3);\n }\n}\n@media (max-width: 480px) {\n .fork-marker {\n padding: var(--mj-space-2);\n }\n\n /* The editor note wraps under the buttons */\n .edit-note {\n flex-basis: 100%;\n margin-left: 0;\n }\n}\n\n/* ==================== Inline Workflow Execution Card ==================== */\n.workflow-execution-card {\n margin-top: 14px;\n margin-bottom: 10px;\n border-radius: 12px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-sm);\n overflow: hidden;\n transition: border-color 0.2s ease, box-shadow 0.2s ease;\n}\n\n.workflow-execution-card.workflow-status-running {\n border-color: color-mix(in srgb, var(--mj-brand-primary) 45%, var(--mj-border-default));\n box-shadow: 0 2px 12px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.workflow-execution-card.workflow-status-complete {\n border-color: color-mix(in srgb, var(--mj-status-success) 35%, var(--mj-border-default));\n}\n\n.workflow-execution-card.workflow-status-failed {\n border-color: color-mix(in srgb, var(--mj-status-error) 45%, var(--mj-border-default));\n}\n\n.workflow-card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 12px 16px;\n background: color-mix(in srgb, var(--mj-bg-surface-sunken) 55%, var(--mj-bg-surface-card));\n}\n\n.workflow-card-header.is-collapsible {\n cursor: pointer;\n transition: background-color 0.15s ease;\n}\n\n.workflow-card-header.is-collapsible:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.workflow-header-left {\n display: flex;\n align-items: center;\n gap: 12px;\n min-width: 0;\n}\n\n.workflow-status-icon {\n width: 32px;\n height: 32px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 15px;\n flex-shrink: 0;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.workflow-status-complete .workflow-status-icon {\n background: color-mix(in srgb, var(--mj-status-success) 14%, transparent);\n color: var(--mj-status-success);\n}\n\n.workflow-status-failed .workflow-status-icon {\n background: color-mix(in srgb, var(--mj-status-error) 14%, transparent);\n color: var(--mj-status-error);\n}\n\n.workflow-title-group {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.workflow-title-row {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.workflow-title {\n font-size: 13.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.workflow-badge {\n font-size: 11px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 999px;\n letter-spacing: 0.2px;\n}\n\n.workflow-badge.badge-running {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.workflow-badge.badge-complete {\n background: color-mix(in srgb, var(--mj-status-success) 14%, transparent);\n color: var(--mj-status-success);\n}\n\n.workflow-badge.badge-failed {\n background: color-mix(in srgb, var(--mj-status-error) 14%, transparent);\n color: var(--mj-status-error);\n}\n\n.workflow-subtitle {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 11.5px;\n color: var(--mj-text-muted);\n}\n\n.workflow-dot {\n opacity: 0.6;\n}\n\n.workflow-header-right {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.workflow-duration-pill {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 9px;\n border-radius: 999px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n font-size: 11.5px;\n font-weight: 600;\n font-variant-numeric: tabular-nums;\n color: var(--mj-text-secondary);\n}\n\n.workflow-graph-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 999px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-border-subtle));\n color: var(--mj-brand-primary);\n font-size: 11.5px;\n font-weight: 600;\n cursor: pointer;\n transition: background-color 0.15s ease, border-color 0.15s ease, transform 0.12s ease;\n}\n\n.workflow-graph-btn:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 18%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n transform: translateY(-1px);\n}\n\n.workflow-collapse-btn {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 9px;\n border-radius: 999px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-muted);\n font-size: 11px;\n font-weight: 500;\n cursor: pointer;\n transition: background-color 0.15s ease, color 0.15s ease;\n}\n\n.workflow-collapse-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.workflow-collapse-chevron {\n font-size: 10px;\n transition: transform 0.18s ease;\n}\n\n.workflow-collapse-chevron.rotated {\n transform: rotate(180deg);\n}\n\n.workflow-progress-track {\n height: 3px;\n width: 100%;\n background: var(--mj-border-subtle);\n overflow: hidden;\n}\n\n.workflow-progress-fill {\n height: 100%;\n background: var(--mj-status-success);\n transition: width 0.35s ease;\n}\n\n.workflow-progress-fill.is-running {\n background: linear-gradient(90deg, var(--mj-brand-primary), var(--mj-status-info));\n}\n\n.workflow-status-failed .workflow-progress-fill {\n background: var(--mj-status-error);\n}\n\n.workflow-steps-pipeline {\n display: flex;\n flex-direction: column;\n padding: 10px 14px;\n}\n\n.workflow-step-item {\n display: flex;\n align-items: stretch;\n gap: 12px;\n}\n\n.workflow-step-rail {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 24px;\n flex-shrink: 0;\n}\n\n.workflow-step-node {\n width: 22px;\n height: 22px;\n border-radius: 999px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 10.5px;\n font-weight: 700;\n margin-top: 6px;\n background: var(--mj-bg-surface-sunken);\n border: 1.5px solid var(--mj-border-default);\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n\n.step-status-in-progress .workflow-step-node {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.step-status-complete .workflow-step-node {\n background: color-mix(in srgb, var(--mj-status-success) 16%, var(--mj-bg-surface));\n border-color: var(--mj-status-success);\n color: var(--mj-status-success);\n}\n\n.step-status-failed .workflow-step-node {\n background: color-mix(in srgb, var(--mj-status-error) 16%, var(--mj-bg-surface));\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n}\n\n.step-status-skipped .workflow-step-node {\n background: var(--mj-bg-surface-sunken);\n border-style: dashed;\n border-color: var(--mj-border-strong);\n color: var(--mj-text-muted);\n}\n\n.step-status-skipped .workflow-step-name {\n color: var(--mj-text-muted);\n}\n\n.workflow-skipped-count {\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.workflow-step-connector {\n flex: 1;\n width: 2px;\n min-height: 12px;\n background: var(--mj-border-default);\n margin: 2px 0;\n}\n\n.workflow-step-connector.is-complete {\n background: color-mix(in srgb, var(--mj-status-success) 55%, var(--mj-border-default));\n}\n\n.workflow-step-content {\n flex: 1;\n min-width: 0;\n padding: 6px 10px;\n border-radius: 8px;\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.workflow-step-content:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.workflow-step-main-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.workflow-step-identity {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n flex-wrap: wrap;\n}\n\n.workflow-step-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.workflow-step-agent-chip {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 7px;\n border-radius: 999px;\n font-size: 11px;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 22%, transparent);\n}\n\n.workflow-step-meta {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.workflow-step-duration {\n font-size: 11.5px;\n font-variant-numeric: tabular-nums;\n color: var(--mj-text-muted);\n}\n\n.workflow-step-duration.is-skipped {\n padding: 1px 7px;\n border-radius: 999px;\n font-size: 10.5px;\n font-weight: 600;\n background: var(--mj-bg-surface-sunken);\n border: 1px dashed var(--mj-border-strong);\n color: var(--mj-text-muted);\n}\n\n.workflow-step-run-btn {\n border: none;\n background: transparent;\n color: var(--mj-text-muted);\n padding: 2px 5px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 11px;\n transition: color 0.15s, background 0.15s;\n}\n\n.workflow-step-run-btn:hover {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.workflow-step-chevron {\n font-size: 11px;\n color: var(--mj-text-muted);\n transition: transform 0.2s ease;\n}\n\n.workflow-step-chevron.rotated {\n transform: rotate(180deg);\n}\n\n.workflow-step-details {\n margin-top: 6px;\n padding: 8px 10px;\n border-radius: 6px;\n background: var(--mj-bg-surface-sunken);\n border-left: 2px solid var(--mj-brand-primary);\n font-size: 12px;\n line-height: 1.5;\n color: var(--mj-text-secondary);\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n/* ==================== Workflow Continuation Context Banner ==================== */\n\n.workflow-continuation-banner {\n display: inline-flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n width: 100%;\n max-width: 100%;\n margin-bottom: 10px;\n padding: 6px 12px;\n border-radius: 8px;\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 26%, var(--mj-border-default));\n background: color-mix(in srgb, var(--mj-brand-primary) 7%, var(--mj-bg-surface-sunken));\n color: var(--mj-text-secondary);\n font-size: 12px;\n line-height: 1.35;\n cursor: pointer;\n text-align: left;\n transition: background 0.16s ease, border-color 0.16s ease, transform 0.16s ease;\n}\n\n.workflow-continuation-banner:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 13%, var(--mj-bg-surface-sunken));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 45%, var(--mj-border-default));\n}\n\n.continuation-banner-left {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n overflow: hidden;\n}\n\n.continuation-banner-icon {\n color: var(--mj-brand-primary);\n font-size: 12px;\n flex-shrink: 0;\n}\n\n.continuation-banner-label {\n font-weight: 500;\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n\n.continuation-banner-sep {\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n\n.continuation-banner-name {\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.continuation-banner-jump {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n font-size: 11.5px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n flex-shrink: 0;\n}\n\n.message-item.workflow-origin-highlight {\n outline: 2px solid var(--mj-brand-primary);\n outline-offset: 2px;\n border-radius: 12px;\n transition: outline-color 0.3s ease;\n}\n\n\n", "/**\n * Custom Agent Icons for MemberJunction\n *\n * This file contains custom icon definitions for agents that need unique branding\n * beyond Font Awesome icons. Icons can be CSS-based (emoji, Unicode, SVG data URIs)\n * or reference external image files.\n *\n * USAGE IN AGENT METADATA:\n * \"IconClass\": \"mj-icon-skip\" (references .mj-icon-skip class below)\n *\n * EXTENSIBILITY FOR 3RD PARTY DEVELOPERS:\n * Third-party developers have TWO options:\n *\n * 1. CSS CLASS APPROACH (Recommended for developers):\n * - Add your own global CSS with custom icon classes\n * - Reference your class in agent metadata: \"IconClass\": \"your-custom-class\"\n * - Works with any CSS available to the application\n * - Example: If you have a global stylesheet with .acme-icon-analyzer { ... }\n * then use \"IconClass\": \"acme-icon-analyzer\"\n *\n * 2. LOGO URL APPROACH (Recommended for end users):\n * - Use the LogoURL field in agent metadata\n * - Provide a URL or data URI: \"LogoURL\": \"https://example.com/logo.png\"\n * - Supports: HTTP URLs, data URIs (data:image/png;base64,...)\n * - LogoURL takes precedence over IconClass in the UI\n * - Perfect for non-technical users or external/uploaded images\n *\n * BEST PRACTICES:\n * - Use mj-icon-* prefix for MJ core icons\n * - Use your own prefix for 3rd party icons (e.g., acme-icon-*)\n * - Keep icons simple and recognizable at 16-36px sizes\n * - Test in both light and dark themes\n * - Prefer CSS classes over LogoURL for version-controlled icons\n */\n\n/* ============================================\n BASE STYLES FOR CUSTOM ICONS\n ============================================ */\n\n/* Base styling for all custom MJ icons */\n[class^=\"mj-icon-\"],\n[class*=\" mj-icon-\"] {\n font-style: normal;\n font-variant: normal;\n text-rendering: auto;\n -webkit-font-smoothing: antialiased;\n display: inline-block;\n font-size: inherit;\n line-height: 1;\n}\n\n/* ============================================\n MJ CORE ICONS\n ============================================ */\n\n/**\n * Skip Brain Icon - Analytics/Intelligence Agent\n * Official Skip logo from Skip SaaS branding\n */\n.mj-icon-skip {\n width: 1.4em;\n height: 1.4em;\n display: inline-block;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n /* Official Skip logo SVG */\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 101.89918457031249 96.83947368421053'%3E%3Cg transform='translate(-0.1288232421875,-0.0)'%3E%3Cpath d='M93.85,41.56c-.84,0-1.62.2-2.37.55-3-4.35-7.49-8.12-13.04-11.04l.04-7.18v-14.44h-10.24v17.6c-1.52-.43-3.07-.8-4.67-1.11V0h-10.24v24.72s-.09,0-.14,0h-4.38s-.1,0-.14,0V7.3h-10.24v18.62c-1.6.32-3.15.69-4.67,1.11v-11.67h-10.24v6.09l.04,9.6c-5.55,2.92-10.04,6.7-13.04,11.04-.75-.35-1.53-.55-2.37-.55-4.5,0-8.14,5.61-8.14,12.51s3.64,12.53,8.14,12.53c.58,0,1.14-.12,1.67-.29,4.1,6.62,11.54,12.06,20.98,15.28l.79.13v7.05c0,2.97,1.45,5.58,3.87,6.99,1.18.69,2.5,1.04,3.85,1.03,1.4,0,2.83-.37,4.15-1.12l7.54-4.29,7.56,4.3c1.31.74,2.73,1.12,4.13,1.12s2.67-.35,3.85-1.04c2.42-1.41,3.86-4.02,3.86-6.98v-7.05l.79-.13c9.44-3.22,16.89-8.66,20.98-15.28.54.17,1.09.29,1.68.29,4.5,0,8.14-5.61,8.14-12.53s-3.63-12.51-8.14-12.51' fill='%23AAAAAA'/%3E%3Cpath d='M86.69,50.87c0-12.22-13.6-19.1-28.94-20.66-4.48-.47-9.19-.54-13.52,0-15.34,1.53-28.93,8.41-28.93,20.66,0,8.55,5.7,15.55,12.68,15.55h7.94c3.05,2.5,6.93,4.1,11.08,4.71,2.65.4,5.44.46,8.01,0,4.15-.6,8.05-2.2,11.1-4.71h7.92c6.97,0,12.68-7,12.68-15.55' fill='white' opacity='0.9'/%3E%3Cpath d='M57.83,55.82c-1.19,2.58-3.8,4.35-6.84,4.35s-5.65-1.77-6.84-4.35h13.68Z' fill='%23AAAAAA'/%3E%3Cpath d='M32.52,41.14c1.74,0,3.18,2.13,3.18,4.76s-1.44,4.74-3.18,4.74-3.16-2.13-3.16-4.74,1.41-4.76,3.16-4.76' fill='%23AAAAAA'/%3E%3Cpath d='M69.46,41.14c1.74,0,3.16,2.13,3.16,4.76s-1.41,4.74-3.16,4.74-3.18-2.13-3.18-4.74,1.41-4.76,3.18-4.76' fill='%23AAAAAA'/%3E%3Cpath d='M63.91,76.15c-.82-.48-1.84-.43-2.8.12l-10.13,5.75-10.11-5.75c-.96-.55-1.98-.59-2.8-.12-.82.47-1.29,1.38-1.29,2.49v10.12c0,1.11.47,2.02,1.28,2.49.38.22.8.33,1.24.33.51,0,1.05-.15,1.57-.44l10.12-5.75,10.11,5.75c.52.29,1.05.44,1.56.44.44,0,.86-.11,1.24-.33.81-.48,1.28-1.38,1.28-2.49v-10.12c0-1.11-.47-2.02-1.28-2.49' fill='white' opacity='0.9'/%3E%3C/g%3E%3C/svg%3E\");\n vertical-align: middle;\n}\n\n/**\n * Alternative Skip Icon - Lightning Bolt\n * Simple emoji-based icon for quick setup\n */\n.mj-icon-skip-lightning::before {\n content: \"\u26A1\";\n color: var(--mj-brand-primary);\n font-size: 1.1em;\n}\n\n/**\n * Skip Icon - Brain Emoji\n * Fallback emoji option\n */\n.mj-icon-skip-brain::before {\n content: \"\uD83E\uDDE0\";\n font-size: 1.2em;\n}\n\n/**\n * Betty Icon - AI Assistant\n * Official Betty logo (face icon only)\n */\n.mj-icon-betty {\n width: 1.4em;\n height: 1.4em;\n display: inline-block;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n /* Official Betty face icon SVG */\n background-image: url(\"data:image/svg+xml,%3Csvg id='a' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 150'%3E%3Cpath d='M64.96,60.23h75.12c10.58,0,20.24,4.31,27.2,11.32,7.01,6.95,11.32,16.61,11.32,27.19s-4.31,20.24-11.32,27.19c-6.95,7.02-16.61,11.32-27.2,11.32h-75.12c-10.58,0-20.24-4.31-27.19-11.32-2.65-2.64-4.92-5.6-6.71-8.92-.24,0-.49.06-.74.06-2.46,0-4.67-1.05-6.34-2.65-1.6-1.66-2.58-3.87-2.58-6.34v-18.7c0-2.46.98-4.74,2.58-6.34,1.66-1.66,3.87-2.65,6.34-2.65.25,0,.49,0,.74.06,1.79-3.32,4.06-6.34,6.71-8.92,6.95-7.01,16.61-11.32,27.19-11.32' fill='%233d1252'/%3E%3Cpath d='M132.33,68.36h0c0,1.72-.74,3.32-1.91,4.49-1.11,1.17-2.71,1.84-4.49,1.84h-13.29c-1.78,0-3.32-.68-4.49-1.84-1.17-1.17-1.91-2.77-1.91-4.49h-12.92c-8.37,0-15.94,3.44-21.47,8.92-5.47,5.54-8.92,13.1-8.92,21.47v1.17l.06.37v.37l.06.43v.37l.06.37v.37l.06.37.06.43.06.37.06.37.06.37.06.37c0,.12.06.25.06.37l.06.37.12.37.06.37.12.37.06.37.12.37.12.31.06.37.12.37.12.37.12.31.12.37.12.37.19.31.12.37.12.37.12.31.18.37.12.31.19.31.18.37.12.31.18.31.19.37.18.31.18.31.19.31.18.31c.12.24.25.43.37.68l.19.25.24.31.19.31c.43.62.86,1.23,1.35,1.79l.18.24c.49.62.99,1.17,1.48,1.66.19.19.31.37.49.56.19.12.37.31.56.49.49.49,1.04.98,1.6,1.47l.31.19c.56.49,1.17.92,1.79,1.35.18.12.37.25.55.37l.31.25.31.18.31.19.37.18.31.18.31.19.31.18.31.19.37.12.31.19.31.18c.12.06.24.12.37.12l.31.19.37.12.31.19.37.12.31.12.37.19.37.12.31.12.37.12.37.12.37.06c.24.12.43.18.68.25l.37.12.37.06.37.12c.12,0,.25.06.37.06l.37.06.37.12.37.06.37.06.37.06.37.06.37.06.37.06.43.06h.37l.37.06h.37l.37.06h.8l.37.06h47.56c8.37,0,15.94-3.44,21.47-8.92,5.48-5.54,8.92-13.1,8.92-21.47s-3.44-15.94-8.92-21.47c-5.54-5.48-13.1-8.92-21.47-8.92h-7.75Z' fill='%23fff'/%3E%3Cpolygon points='54.93 12.74 85.57 55.25 106.12 55.25 106.12 34.89 106.12 34.7 105.75 34.7 54.93 12.74' fill='%233aba91'/%3E%3Cpolygon points='111.1 55.25 124.76 55.25 145 27.07 111.35 41.59 111.1 41.59 111.1 41.72 111.1 55.25' fill='%233aba91'/%3E%3Cpath d='M94.55,82.81c3.75,0,6.83,3.81,7.57,8.92.06.74-.31,1.35-.98,1.66-.61.31-1.35.18-1.84-.37-1.29-1.48-2.96-2.34-4.74-2.34s-3.38.86-4.67,2.34c-.49.55-1.23.68-1.91.37-.68-.31-1.05-.92-.92-1.66.68-5.11,3.81-8.92,7.51-8.92' fill='%233d1252'/%3E%3Cpath d='M132.08,115.24c-.31,1.05-.86,2.03-1.66,2.77-1.11,1.17-2.71,1.84-4.49,1.84h-13.29c-1.79,0-3.32-.68-4.49-1.84-.8-.74-1.36-1.72-1.66-2.77-.19-.68.06-1.41.68-1.84.56-.43,1.35-.49,1.97-.06.98.68,2.21,1.05,3.51,1.05h13.29c1.29,0,2.52-.37,3.51-1.05.61-.43,1.41-.37,1.97.06.62.43.86,1.17.68,1.84' fill='%233d1252'/%3E%3Cpath d='M144.02,82.81c3.69,0,6.83,3.81,7.51,8.92.12.74-.24,1.35-.92,1.66-.68.31-1.41.18-1.91-.37-1.29-1.48-2.89-2.34-4.67-2.34s-3.44.86-4.74,2.34c-.49.55-1.23.68-1.84.37-.68-.31-1.05-.92-.98-1.66.74-5.11,3.81-8.92,7.57-8.92' fill='%233d1252'/%3E%3C/svg%3E\");\n vertical-align: middle;\n}\n\n/**\n * Izzy Icon - AI Assistant\n * Official Izzy logo (mark only)\n */\n.mj-icon-izzy {\n width: 1.4em;\n height: 1.4em;\n display: inline-block;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n /* Official Izzy mark icon SVG */\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 204 180'%3E%3Cpath d='M0 0 C3.61144774 3.08477828 4.84942137 4.90830493 5.5 9.625 C5 13 5 13 3.5 14.9375 C1.74432121 17.35155834 1.83578869 18.21944114 1.90625 21.12890625 C1.9371875 22.40636719 1.968125 23.68382813 2 25 C3.18335937 24.72285156 4.36671875 24.44570313 5.5859375 24.16015625 C22.44010416 20.26839867 22.44010416 20.26839867 30 20 C31.80210938 19.92265625 31.80210938 19.92265625 33.640625 19.84375 C47.49356199 19.44904163 61.73614427 20.86627802 75 25 C75.53596907 19.64244551 75.53596907 19.64244551 73.5 15 C71.5549761 12.4066348 71.45048389 10.16629658 71.59375 6.97265625 C72.33633815 3.36681955 74.01253991 1.99164006 77 0 C79.80907914 -0.63997166 82.18961327 -0.63020793 85 0 C87.8100346 1.79363911 89.50940468 3.01880935 91 6 C90.984375 8.05859375 90.984375 8.05859375 90.75 10.4375 C90.68296875 11.21996094 90.6159375 12.00242187 90.546875 12.80859375 C90 15 90 15 88.49609375 16.3984375 C86.25734576 18.79500846 86.4852344 20.97464008 86.3125 24.1875 C86.21388672 25.81751953 86.21388672 25.81751953 86.11328125 27.48046875 C86.07589844 28.31191406 86.03851563 29.14335937 86 30 C86.67675781 30.0825 87.35351562 30.165 88.05078125 30.25 C91.82333306 31.20937741 94.89353787 32.99425194 98.1875 35 C99.18052124 35.60448975 99.18052124 35.60448975 100.19360352 36.22119141 C111.98050012 43.58460075 121.17745776 53.2687532 127 66 C127 66.66 127 67.32 127 68 C127.721875 68.0825 128.44375 68.165 129.1875 68.25 C133.81406141 69.48374971 136.2179022 71.66516963 138.625 75.7734375 C140.97801199 81.55147269 140.43210927 87.87027126 140.375 94 C140.38660156 95.24523437 140.39820313 96.49046875 140.41015625 97.7734375 C140.3675701 111.08870765 140.3675701 111.08870765 135.5 116.7421875 C131.62323281 119.66995439 128.8523137 121.14337998 124 121.125 C122.9790625 121.12886719 122.9790625 121.12886719 121.9375 121.1328125 C120 121 120 121 117 120 C116.74347656 120.65226562 116.48695313 121.30453125 116.22265625 121.9765625 C115.83980469 122.85054688 115.45695313 123.72453125 115.0625 124.625 C114.70285156 125.48351562 114.34320313 126.34203125 113.97265625 127.2265625 C108.57908063 134.80960941 99.56813916 137.59212379 91.0625 140.375 C90.02287109 140.72949219 88.98324219 141.08398438 87.91210938 141.44921875 C80.34347852 144 80.34347852 144 78 144 C78.02094727 144.65484375 78.04189453 145.3096875 78.06347656 145.984375 C78.14730383 148.98942328 78.19886895 151.99422464 78.25 155 C78.28351563 156.02996094 78.31703125 157.05992187 78.3515625 158.12109375 C78.43361416 164.56214867 77.93369275 169.71304442 74 175 C68.75523423 179.17440541 64.68195675 180.53237245 58 180 C55.12653443 178.963898 52.49379495 177.58020045 49.8125 176.125 C49.11447266 175.76019531 48.41644531 175.39539063 47.69726562 175.01953125 C46.39868999 174.33997216 45.10309803 173.65465367 43.81176758 172.96142578 C43.21388428 172.64415527 42.61600098 172.32688477 42 172 C41.34290039 171.59402588 40.68580078 171.18805176 40.00878906 170.76977539 C38.03672401 169.77639533 38.03672401 169.77639533 36.12475586 170.58325195 C35.49448486 170.96441162 34.86421387 171.34557129 34.21484375 171.73828125 C33.17166992 172.35026367 33.17166992 172.35026367 32.10742188 172.97460938 C31.39134766 173.41611328 30.67527344 173.85761719 29.9375 174.3125 C28.51029236 175.1647359 27.08194984 176.01507485 25.65234375 176.86328125 C25.02320068 177.24782471 24.39405762 177.63236816 23.74584961 178.02856445 C19.79572932 180.2265128 16.44037501 180.296025 12 180 C6.82155197 178.33236419 3.95074467 176.59004726 1 172 C-0.72417326 168.34258111 -1.2403609 165.51230089 -1.1953125 161.48046875 C-1.18886719 160.45888672 -1.18242188 159.43730469 -1.17578125 158.38476562 C-1.15902344 157.32966797 -1.14226563 156.27457031 -1.125 155.1875 C-1.11597656 154.11306641 -1.10695312 153.03863281 -1.09765625 151.93164062 C-1.07415306 149.28753146 -1.04129575 146.64388128 -1 144 C-1.63196289 143.81171631 -2.26392578 143.62343262 -2.91503906 143.42944336 C-8.20708475 141.84808949 -13.49207901 140.2541307 -18.75 138.5625 C-19.98234375 138.17191406 -21.2146875 137.78132812 -22.484375 137.37890625 C-29.06200008 134.79901552 -34.12925122 130.90130551 -38 125 C-38.875 121.5625 -38.875 121.5625 -39 119 C-39.495 119.33 -39.99 119.66 -40.5 120 C-45.24354984 121.89741993 -49.49426304 121.53143657 -54.1875 119.875 C-58.42051121 117.05299253 -61.35909664 113.92271008 -63 109 C-63.22709306 104.92471184 -63.22828659 100.8492307 -63.24023438 96.76806641 C-63.2498982 94.77103695 -63.28108516 92.77414948 -63.3125 90.77734375 C-63.36188158 78.59243786 -63.36188158 78.59243786 -60 73 C-57.7509823 70.86631654 -55.88785241 69.35340008 -53.0078125 68.20703125 C-50.3010212 66.57979679 -49.65488803 64.83796148 -48.3125 62 C-45.06106922 55.7428385 -40.95735135 50.97447519 -36 46 C-35.40832031 45.38511719 -34.81664063 44.77023438 -34.20703125 44.13671875 C-28.97373562 39.11136864 -17.47215548 30 -10 30 C-10.08733973 27.91589342 -10.19552278 25.83265331 -10.3125 23.75 C-10.37050781 22.58984375 -10.42851563 21.4296875 -10.48828125 20.234375 C-11.02905532 16.81635262 -11.84853545 15.59874271 -14 13 C-14.54046356 8.75350057 -14.48376179 6.74176808 -12.125 3.125 C-8.57275398 -0.42724602 -4.8825369 -0.970906 0 0 Z M5 35 C4.30245605 35.21962402 3.60491211 35.43924805 2.88623047 35.66552734 C-14.1501062 41.15773444 -29.02751477 50.81254544 -39 66 C-39.33 66.99 -39.66 67.98 -40 69 C-37.525 70.98 -37.525 70.98 -35 73 C-34.52691406 72.29875 -34.05382812 71.5975 -33.56640625 70.875 C-21.08320269 52.96537462 -2.17172019 42.38052109 19.26171875 38.5078125 C46.97805996 34.9959591 75.10426623 38.71529466 97.73046875 56.09765625 C103.53827054 61.07953766 107.9264808 66.53902088 112 73 C113.32 72.01 114.64 71.02 116 70 C115.01713954 61.60788376 107.55262518 55.04847712 101.375 49.8125 C82.80696113 35.82916208 61.35998978 30.59265576 38.375 30.625 C37.71836365 30.62554382 37.06172729 30.62608765 36.38519287 30.62664795 C25.42439402 30.66823796 15.42390121 31.62072499 5 35 Z' fill='%234E3B78' transform='translate(63,0)'/%3E%3Cpath d='M0 0 C5.27957047 5.78547525 9.31612861 13.25448014 10 21.125 C9.69743213 24.83293961 8.77676366 26.8914086 6.1875 29.5625 C-2.04152489 35.76003038 -13.60917874 39.6270706 -23.875 38.8125 C-24.535 38.1525 -25.195 37.4925 -25.875 36.8125 C-28.97847254 36.48234335 -31.03281176 36.30718706 -33.75 37.9375 C-35.40354531 40.69340884 -35.26865568 42.66325452 -34.875 45.8125 C-33.95833333 47.89583333 -33.95833333 47.89583333 -31.875 48.8125 C-28.29166667 48.89583333 -28.29166667 48.89583333 -24.875 47.8125 C-24.57086182 47.16466553 -24.26672363 46.51683105 -23.95336914 45.84936523 C-22.875 43.8125 -22.875 43.8125 -20.77124023 42.88696289 C-19.91731689 42.6883667 -19.06339355 42.48977051 -18.18359375 42.28515625 C-17.23806641 42.04990234 -16.29253906 41.81464844 -15.31835938 41.57226562 C-14.32642578 41.34216797 -13.33449219 41.11207031 -12.3125 40.875 C-4.77934417 39.10870895 1.54823541 36.95205932 8.125 32.8125 C7.81647145 40.06292099 4.56245219 45.32546918 -0.5 50.4609375 C-5.29811284 54.61130511 -8.83216751 54.86916719 -15 55 C-21.13677833 55.26569953 -25.04589225 56.51893716 -29.890625 60.31640625 C-39.17633501 67.31724667 -52.82450605 66.52799961 -63.875 65.8125 C-71.37432145 64.60538489 -79.4496824 61.2378176 -84.875 55.8125 C-86.81199027 55.70419517 -88.75076074 55.60687514 -90.69067383 55.58691406 C-97.68300211 55.51299157 -103.12007731 55.4392364 -108.44140625 50.40234375 C-108.91449219 49.87769531 -109.38757813 49.35304688 -109.875 48.8125 C-110.6175 48.090625 -111.36 47.36875 -112.125 46.625 C-118.35765562 36.60823203 -119.69570866 25.34707186 -117.25 13.8828125 C-113.47065738 3.0509466 -104.76645407 -4.0120534 -94.875 -9.1875 C-91.26850975 -10.75400624 -87.62602625 -12.0153043 -83.875 -13.1875 C-83.029375 -13.47496094 -82.18375 -13.76242188 -81.3125 -14.05859375 C-56.0861494 -22.29657387 -20.04377266 -18.06142152 0 0 Z' fill='%23FDFDFD' transform='translate(155.875,64.1875)'/%3E%3Cpath d='M0 0 C5.24479788 1.58079188 9.51172656 4.60408712 14.06640625 7.58984375 C18.37837094 10.28462973 18.37837094 10.28462973 23.30859375 11.1328125 C28.49696048 9.20971132 33.08639658 6.29555589 37.79882812 3.42578125 C43.66838131 -0.00837477 43.66838131 -0.00837477 47.27734375 0.078125 C49.34375 1.0078125 49.34375 1.0078125 51.34375 3.0078125 C51.82984303 7.30136192 51.71414913 11.62739332 51.71875 15.9453125 C51.74324219 17.15123047 51.76773438 18.35714844 51.79296875 19.59960938 C51.79876953 21.33114258 51.79876953 21.33114258 51.8046875 23.09765625 C51.81290527 24.15847412 51.82112305 25.21929199 51.82958984 26.31225586 C51.34375 29.0078125 51.34375 29.0078125 49.48461914 30.87670898 C46.29658529 32.56106989 44.78123809 32.062357 41.34375 31.0078125 C37.60135447 29.03986817 34.07891261 26.72386924 30.53320312 24.42578125 C26.44214688 21.80182316 26.44214688 21.80182316 21.77734375 20.921875 C17.60401055 22.78413283 13.85973006 25.2663764 10.046875 27.76953125 C5.85335687 30.41401513 2.44659272 31.9581498 -2.65625 32.0078125 C-4.33203125 30.87695312 -4.33203125 30.87695312 -5.65625 29.0078125 C-6.04443359 26.328125 -6.04443359 26.328125 -6.0546875 23.1328125 C-6.05855469 21.98296875 -6.06242187 20.833125 -6.06640625 19.6484375 C-6.05480469 18.44703125 -6.04320313 17.245625 -6.03125 16.0078125 C-6.04285156 14.80640625 -6.05445312 13.605 -6.06640625 12.3671875 C-6.06253906 11.21734375 -6.05867188 10.0675 -6.0546875 8.8828125 C-6.05130371 7.82835937 -6.04791992 6.77390625 -6.04443359 5.6875 C-5.65625 3.0078125 -5.65625 3.0078125 -4.29736328 1.14111328 C-2.65625 0.0078125 -2.65625 0.0078125 0 0 Z' fill='%23FCFCFD' transform='translate(78.65625,136.9921875)'/%3E%3Cpath d='M0 0 C2.5 0.625 2.5 0.625 4.8125 2.625 C6.96830116 6.4575354 7.24792603 9.32007692 6.5 13.625 C5.34367254 15.98793002 4.35016245 17.77483755 2.5 19.625 C0.1875 20 0.1875 20 -2.5 19.625 C-5.06638215 17.47478793 -6.29103188 15.79226637 -6.88671875 12.46484375 C-7.08084032 8.45522921 -6.77549931 6.12498023 -4.8125 2.5625 C-2.5 0.625 -2.5 0.625 0 0 Z' fill='%2353417C' transform='translate(138.5,67.375)'/%3E%3Cpath d='M0 0 C2.5 0.6875 2.5 0.6875 4.8125 2.625 C7.08407605 6.74748987 7.32547179 10.07653131 6.5 14.6875 C4.8125 17.75 4.8125 17.75 2.5 19.6875 C-0.0625 20.25 -0.0625 20.25 -2.5 19.6875 C-5.30401904 17.38419865 -5.84979387 14.76309142 -6.4375 11.3125 C-6.72853275 7.71913649 -6.44645777 6.57011897 -4.875 3.125 C-2.5 0.6875 -2.5 0.6875 0 0 Z' fill='%23523F7B' transform='translate(64.5,67.3125)'/%3E%3Cpath d='M0 0 C8.91 0 17.82 0 27 0 C24.81183076 5.47042311 24.169236 6.55141452 19 9 C14.08609728 9.94526984 9.88605617 10.13992406 5.51171875 7.49609375 C3.4733513 5.76185217 1.65854906 4.10051199 0 2 C0 1.34 0 0.68 0 0 Z' fill='%23574680' transform='translate(88,95)'/%3E%3C/svg%3E\");\n vertical-align: middle;\n}\n\n/* ============================================\n EXAMPLE CUSTOM ICONS FOR OTHER AGENTS\n ============================================ */\n\n/**\n * Data Analysis Icon - Chart emoji\n */\n.mj-icon-data-analyst::before {\n content: \"\uD83D\uDCCA\";\n font-size: 1.1em;\n}\n\n/**\n * API/Integration Icon - Plug emoji\n */\n.mj-icon-api::before {\n content: \"\uD83D\uDD0C\";\n font-size: 1.1em;\n}\n\n/**\n * Processing/Workflow Icon - Gear emoji with animation\n */\n.mj-icon-processing::before {\n content: \"\u2699\uFE0F\";\n display: inline-block;\n animation: rotate-icon 2s linear infinite;\n}\n\n@keyframes rotate-icon {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n/**\n * Text/Letter-based Icon\n * Simple monogram icon\n */\n.mj-icon-monogram-s::before {\n content: \"S\";\n font-weight: 800;\n font-family: system-ui, -apple-system, sans-serif;\n font-size: 1.1em;\n color: var(--mj-brand-primary);\n}\n\n/* ============================================\n TEMPLATE FOR NEW ICONS\n ============================================ */\n\n/*\n// EMOJI-BASED ICON (Simplest)\n.mj-icon-my-agent::before {\n content: \"\uD83C\uDFAF\"; // Use any emoji\n font-size: 1.2em;\n}\n\n// UNICODE SYMBOL ICON\n.mj-icon-my-agent::before {\n content: \"\\2022\"; // Unicode character\n font-size: 1.2em;\n color: #667eea;\n}\n\n// TEXT/LETTER ICON\n.mj-icon-my-agent::before {\n content: \"MA\"; // Initials/text\n font-weight: 800;\n font-size: 0.9em;\n color: #667eea;\n}\n\n// SVG DATA URI ICON (Most Control)\n.mj-icon-my-agent {\n width: 1em;\n height: 1em;\n display: inline-block;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n background-image: url('data:image/svg+xml;utf8,<svg>...</svg>');\n vertical-align: middle;\n}\n\n// EXTERNAL IMAGE FILE (For existing assets)\n.mj-icon-my-agent {\n width: 1em;\n height: 1em;\n display: inline-block;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n background-image: url('/assets/icons/my-agent.svg');\n vertical-align: middle;\n}\n\n// GRADIENT TEXT ICON\n.mj-icon-my-agent::before {\n content: \"\u26A1\";\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n}\n*/\n\n/* ============================================\n 3RD PARTY EXAMPLES\n These would typically be in EXTERNAL CSS files\n ============================================ */\n\n/*\n// Example: Acme Corp custom agent icons\n// This would be in acme-corp-styles.css loaded by the application\n\n.acme-icon-analyzer {\n width: 1em;\n height: 1em;\n display: inline-block;\n background-size: contain;\n background-image: url('https://acme.com/icons/analyzer.svg');\n}\n\n.acme-icon-reporter::before {\n content: \"A\";\n font-weight: 800;\n color: #FF6B35;\n}\n*/\n"] }]
|
|
4624
|
+
args: [{ standalone: false, selector: 'mj-conversation-message-item', template: "<div [class]=\"messageClasses\"\n [attr.data-message-id]=\"message.ID\"\n [style.--mj-handoff-target]=\"HandedOffFrom ? TargetAccentVar : null\"\n [style.--mj-handoff-source]=\"HandedOffFrom ? HandedOffFromAccentVar : null\"\n (click)=\"onMessageBubbleClick($event)\">\n <div class=\"message-avatar\">\n <div class=\"avatar-circle\" [class.ai-avatar]=\"isAIMessage\" [class.user-avatar]=\"isUserMessage\"\n [class.avatar-has-image]=\"isAIMessage && effectiveAssistantAvatarUrl !== null\">\n @if (isUserMessage) {\n @if (userAvatarUrl) {\n <img [src]=\"userAvatarUrl\" alt=\"User avatar\" class=\"avatar-image\" />\n } @else if (userAvatarIconClass) {\n <i [class]=\"userAvatarIconClass\"></i>\n } @else {\n <i class=\"fas fa-user\"></i>\n }\n } @else if (isAIMessage) {\n @if (effectiveAssistantAvatarUrl) {\n <img [src]=\"effectiveAssistantAvatarUrl\" alt=\"Assistant avatar\" class=\"avatar-image\"\n (error)=\"assistantAvatarFailed = true\" />\n } @else {\n <i class=\"fas\" [ngClass]=\"aiAgentInfo?.iconClass || 'fa-robot'\"></i>\n }\n }\n </div>\n </div>\n\n <div class=\"message-content\">\n <div class=\"message-header\">\n <span class=\"message-sender\" [title]=\"isAIMessage ? (aiAgentInfo?.role || 'AI Assistant') : ''\">\n {{ isAIMessage ? (aiAgentInfo?.name || 'AI Assistant') : messageSenderName }}\n </span>\n @if (isAIMessage && HandedOffFrom) {\n <span class=\"via\">\n <span class=\"mini\" aria-hidden=\"true\">\n @if (HandedOffFrom.SourceAgent.AvatarUrl) {\n <img [src]=\"HandedOffFrom.SourceAgent.AvatarUrl\" alt=\"\" />\n } @else if (HandedOffFrom.SourceAgent.IconClass) {\n <i [class]=\"HandedOffFrom.SourceAgent.IconClass\"></i>\n } @else {\n {{ HandedOffFrom.SourceAgent.Name.charAt(0) }}\n }\n </span>\n via {{ HandedOffFrom.SourceAgent.Name }}\n </span>\n @if (HandedOffFrom.PresetName) {\n <span class=\"pill pill--target\">{{ HandedOffFrom.PresetName }}</span>\n }\n }\n <span class=\"message-time\">{{ message.__mj_CreatedAt | date:'short' }}</span>\n\n <!-- Status indicator for user messages -->\n @if (isUserMessage && messageStatus !== 'Complete') {\n <span class=\"message-status\" [class.error]=\"messageStatus === 'Error'\">\n <i class=\"fas\" [ngClass]=\"messageStatus === 'Error' ? 'fa-exclamation-triangle' : 'fa-circle-notch fa-spin'\"></i>\n <span class=\"status-text\">{{ getStatusText() }}</span>\n </span>\n }\n\n <!-- Time pill - shows for AI messages in all states (in-progress, active, complete, failed) -->\n @if (!isUserMessage && timePillText) {\n <span\n class=\"time-pill\"\n [class.in-progress]=\"isInProgressAIMessage\"\n [class.active]=\"!isInProgressAIMessage && (isAgentRunActive || HasActiveWorkflowTasks)\"\n [class.complete]=\"!isInProgressAIMessage && !isAgentRunActive && !HasActiveWorkflowTasks && messageStatus === 'Complete' && !IsStoppedRun\"\n [class.stopped]=\"IsStoppedRun && messageStatus !== 'Error'\"\n [class.failed]=\"messageStatus === 'Error'\"\n [class.checking]=\"LivenessState === 'checking'\"\n [class.stalled]=\"LivenessState === 'stalled'\"\n [title]=\"LivenessState === 'stalled' ? 'No progress reported for several minutes' : (LivenessState === 'checking' ? 'No recent progress \u2014 re-checking' : '')\">\n <i class=\"fas\" [ngClass]=\"LivenessState !== 'live' ? 'fa-exclamation-triangle' : (IsStoppedRun ? 'fa-stop' : 'fa-clock')\"></i>\n {{ timePillText }}\n @if (LivenessState === 'checking') {\n <span class=\"liveness-label\">checking\u2026</span>\n } @else if (LivenessState === 'stalled') {\n <span class=\"liveness-label\">no response</span>\n }\n </span>\n }\n\n <!-- Stop control for an in-flight agent reply. Marks the run Cancelled; the owning\n server process aborts the in-flight step and finalizes the run as stopped. -->\n @if (CanStopRun) {\n <button\n type=\"button\"\n class=\"stop-run-pill\"\n [disabled]=\"IsStopping\"\n (click)=\"OnStopClick()\"\n [title]=\"IsStopping ? 'Stopping the run\u2026' : 'Stop this run'\">\n <i class=\"fas\" [ngClass]=\"IsStopping ? 'fa-circle-notch fa-spin' : 'fa-stop'\"></i>\n {{ IsStopping ? 'Stopping\u2026' : 'Stop' }}\n </button>\n }\n\n <!-- Test feedback icon (appears for test runs only) -->\n @if (message.TestRunID) {\n <span\n class=\"test-feedback-icon\"\n (click)=\"onTestFeedbackClick()\"\n title=\"Provide Test Feedback\">\n <i class=\"fas fa-flask\"></i>\n </span>\n }\n\n <!-- Action group, always visible, styled like the gear: Edit and Fork from here on a user message,\n Regenerate on an older answer (the last answer carries it in its footer). Labeled on the latest\n turn, icons elsewhere. -->\n @if (ShowsActionGroup) {\n <span class=\"message-action-group\" [class.labeled]=\"IsLatestTurn\" role=\"group\" aria-label=\"Message actions\">\n @if (CanEdit) {\n <button type=\"button\" class=\"message-header-action message-action-edit\"\n (click)=\"OnEditClick()\" title=\"Edit message\" aria-label=\"Edit message\">\n <i class=\"fa-solid fa-pen\" aria-hidden=\"true\"></i>\n @if (IsLatestTurn) {\n <span>Edit</span>\n }\n </button>\n }\n @if (CanStartFork) {\n <button type=\"button\" class=\"message-header-action message-action-fork\"\n (click)=\"OnForkClick($event)\" title=\"Fork from here\" aria-label=\"Fork from here\">\n <i class=\"fa-solid fa-code-branch\" aria-hidden=\"true\"></i>\n @if (IsLatestTurn) {\n <span class=\"action-label-long\">Fork from here</span>\n <span class=\"action-label-short\">Fork</span>\n }\n </button>\n }\n @if (ShowsHeaderRegenerate) {\n <button type=\"button\" class=\"message-header-action message-action-regenerate\"\n (click)=\"OnRegenerateClick()\" [title]=\"RegenerateTitle\" [attr.aria-label]=\"RegenerateTitle\">\n <i class=\"fa-solid fa-rotate-left\" aria-hidden=\"true\"></i>\n </button>\n }\n </span>\n }\n\n <!-- Agent run icon (clickable to expand details) - always rightmost when present.\n Rendered only when its panel would actually have content, so it never\n appears as a dead control opening an empty popup (e.g. a white-label\n surface with showAgentRunDetails=false and no message actions). -->\n @if (hasAgentRun && hasAgentDetailsPanelContent) {\n <span\n class=\"agent-run-icon\"\n (click)=\"toggleAgentDetails()\"\n [class.expanded]=\"isAgentDetailsExpanded\"\n [title]=\"hasRatings() ? 'Agent details & ' + getRatingCount() + ' rating(s)' : 'Click to view agent execution details'\">\n <i class=\"fas fa-cog\"></i>\n @if (hasRatings()) {\n <span class=\"rating-badge\">{{ getRatingCount() }}</span>\n }\n </span>\n }\n </div>\n\n <div class=\"message-body\">\n @if (!isEditing) {\n @if (OriginatingWorkflowTask) {\n <button\n type=\"button\"\n class=\"workflow-continuation-banner\"\n (click)=\"ScrollToOriginatingWorkflow($event)\"\n title=\"Scroll to originating workflow card and step artifacts\">\n <span class=\"continuation-banner-left\">\n <i class=\"fa-solid fa-diagram-project continuation-banner-icon\" aria-hidden=\"true\"></i>\n <span class=\"continuation-banner-label\">Completed workflow</span>\n <span class=\"continuation-banner-sep\">\u00B7</span>\n <span class=\"continuation-banner-name\">{{ OriginatingWorkflowTask.Name }}</span>\n </span>\n <span class=\"continuation-banner-jump\">\n <span>View workflow</span>\n <i class=\"fa-solid fa-arrow-up-long\" aria-hidden=\"true\"></i>\n </span>\n </button>\n }\n @if (IsHandedOffTargetJoining) {\n <div class=\"joining\">\n <span>Joining the conversation\u2026</span>\n </div>\n <div class=\"joining-skeletons\" aria-hidden=\"true\">\n <div class=\"skeleton skeleton--wide\"></div>\n <div class=\"skeleton skeleton--narrow\"></div>\n </div>\n } @else {\n <div class=\"message-text\">\n <mj-markdown [data]=\"displayMessage\" [enableCollapsibleHeadings]=\"true\" (ImageClicked)=\"OnMarkdownImageClicked($event)\"></mj-markdown>\n @if (isMessageEdited) {\n <span class=\"edited-badge\">(edited)</span>\n }\n </div>\n }\n\n @if (Handoff) {\n <mj-agent-handoff-card [Handoff]=\"Handoff\"></mj-agent-handoff-card>\n }\n\n <!-- A stopped reply: what the run kept, and the way to pick it up again. Any message\n resumes the stopped run; the Continue control just sends one that says so. -->\n @if (StoppedLineText) {\n <div class=\"stopped-line\"><i class=\"fa-solid fa-stop\" aria-hidden=\"true\"></i>{{ StoppedLineText }}</div>\n }\n @if (CanContinueStoppedRun) {\n <div class=\"stopped-actions\">\n <button mjButton Variant=\"outline\" Size=\"sm\" type=\"button\" class=\"continue-run\" (click)=\"OnContinueClick()\" title=\"Continue where you left off\">\n <i class=\"fa-solid fa-play\" aria-hidden=\"true\"></i> Continue\n </button>\n </div>\n }\n\n <!-- messageExtra slot \u2014 per-message additive decoration projected by the\n consumer via `mjChatSlot=\"messageExtra\"`. Renders after the message\n content, before attachments. Receives the message as $implicit. -->\n @if (messageExtraTemplate) {\n <ng-container *ngTemplateOutlet=\"messageExtraTemplate; context: {\n $implicit: message,\n message: message\n }\"></ng-container>\n }\n\n <!-- Message Attachments -->\n @if (hasAttachments) {\n <div class=\"message-attachments\">\n @for (attachment of attachments; track attachment.id) {\n @if (attachment.type === 'Image') {\n <div class=\"attachment-item image-attachment\"\n (click)=\"onAttachmentClick(attachment)\"\n [title]=\"attachment.fileName || 'Image attachment'\">\n <img\n [src]=\"attachment.thumbnailUrl || attachment.contentUrl\"\n [alt]=\"attachment.fileName || 'Image attachment'\"\n class=\"attachment-thumbnail\"\n loading=\"lazy\">\n <div class=\"attachment-overlay\">\n <i class=\"fas fa-expand\"></i>\n </div>\n </div>\n } @else {\n <div class=\"attachment-strip\"\n [class.is-artifact]=\"!!attachment.artifactTypeName\"\n (click)=\"onAttachmentClick(attachment)\"\n [title]=\"attachment.fileName || 'File'\">\n <div class=\"attachment-badge\">{{ badgeTextFor(attachment) }}</div>\n <div class=\"attachment-meta\">\n <span class=\"file-name\">{{ attachment.fileName || 'File' }}</span>\n <span class=\"file-size\">{{ formatFileSize(attachment.sizeBytes) }}</span>\n </div>\n </div>\n }\n }\n </div>\n }\n\n <!-- Inline Workflow Execution Card \u2014 visible directly in the message body whenever workflow steps exist -->\n @if (WorkflowSteps.length > 0) {\n <div class=\"workflow-execution-card\" [class]=\"'workflow-status-' + WorkflowStatus.toLowerCase()\">\n <div class=\"workflow-card-header\"\n [class.is-collapsible]=\"WorkflowStatus !== 'Running'\"\n (click)=\"ToggleWorkflowStepsExpanded($event)\">\n <div class=\"workflow-header-left\">\n <div class=\"workflow-status-icon\">\n @if (WorkflowStatus === 'Running') {\n <i class=\"fa-solid fa-circle-notch fa-spin\"></i>\n } @else if (WorkflowStatus === 'Complete') {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else if (WorkflowStatus === 'Failed') {\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n } @else {\n <i class=\"fa-solid fa-ban\"></i>\n }\n </div>\n <div class=\"workflow-title-group\">\n <div class=\"workflow-title-row\">\n <span class=\"workflow-title\">{{ WorkflowTitle }}</span>\n <span class=\"workflow-badge\" [class]=\"'badge-' + WorkflowStatus.toLowerCase()\">\n @if (WorkflowStatus === 'Running') {\n Running\n } @else if (WorkflowStatus === 'Complete') {\n Completed\n } @else {\n {{ WorkflowStatus }}\n }\n </span>\n </div>\n <div class=\"workflow-subtitle\">\n <span>{{ WorkflowCompletedStepCount }} of {{ WorkflowSteps.length }} {{ WorkflowSteps.length === 1 ? 'step' : 'steps' }} complete</span>\n @if (WorkflowSkippedStepCount > 0) {\n <span class=\"workflow-dot\">\u00B7</span>\n <span class=\"workflow-skipped-count\">{{ WorkflowSkippedStepCount }} skipped (conditional)</span>\n }\n <span class=\"workflow-dot\">\u00B7</span>\n <span>{{ WorkflowProgressPercent }}%</span>\n </div>\n </div>\n </div>\n <div class=\"workflow-header-right\">\n @if (WorkflowParentTaskID) {\n <button type=\"button\"\n class=\"workflow-graph-btn\"\n (click)=\"OpenTaskGraphPanel($event)\"\n title=\"View visual task graph in side panel\">\n <i class=\"fa-solid fa-diagram-project\" aria-hidden=\"true\"></i>\n <span>Task Graph</span>\n </button>\n }\n <span class=\"workflow-duration-pill\" title=\"Workflow execution time\">\n <i class=\"fa-regular fa-clock\"></i>\n <span>{{ WorkflowDurationDisplay }}</span>\n </span>\n @if (WorkflowStatus !== 'Running') {\n <button type=\"button\"\n class=\"workflow-collapse-btn\"\n (click)=\"ToggleWorkflowStepsExpanded($event)\"\n [attr.aria-expanded]=\"IsWorkflowStepsExpanded\"\n [title]=\"IsWorkflowStepsExpanded ? 'Collapse workflow steps' : 'Expand workflow steps'\">\n <span class=\"workflow-collapse-label\">{{ IsWorkflowStepsExpanded ? 'Collapse' : 'Expand' }}</span>\n <i class=\"fa-solid fa-chevron-down workflow-collapse-chevron\" [class.rotated]=\"IsWorkflowStepsExpanded\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n </div>\n\n <div class=\"workflow-progress-track\" role=\"progressbar\"\n [attr.aria-valuenow]=\"WorkflowProgressPercent\" aria-valuemin=\"0\" aria-valuemax=\"100\">\n <div class=\"workflow-progress-fill\"\n [class.is-running]=\"WorkflowStatus === 'Running'\"\n [style.width.%]=\"WorkflowProgressPercent\"></div>\n </div>\n\n @if (WorkflowStatus === 'Running' || IsWorkflowStepsExpanded) {\n <div class=\"workflow-steps-pipeline\">\n @for (step of WorkflowSteps; track step.ID; let idx = $index; let isLast = $last) {\n <div class=\"workflow-step-item\"\n [class]=\"'step-status-' + (step.Status || 'Pending').toLowerCase().replace(' ', '-')\"\n [class.is-expanded]=\"IsWorkflowStepExpanded(step.ID)\">\n <div class=\"workflow-step-rail\">\n <div class=\"workflow-step-node\">\n @if (step.Status === 'In Progress') {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else if (step.Status === 'Complete') {\n <i class=\"fa-solid fa-check\"></i>\n } @else if (step.Status === 'Failed') {\n <i class=\"fa-solid fa-xmark\"></i>\n } @else if (step.Status === 'Skipped') {\n <i class=\"fa-solid fa-forward-step\" title=\"Skipped (conditional prerequisite not met)\"></i>\n } @else if (step.Status === 'Cancelled') {\n <i class=\"fa-solid fa-ban\"></i>\n } @else {\n <span class=\"step-index-num\">{{ idx + 1 }}</span>\n }\n </div>\n @if (!isLast) {\n <div class=\"workflow-step-connector\" [class.is-complete]=\"step.Status === 'Complete'\"></div>\n }\n </div>\n\n <div class=\"workflow-step-content\" (click)=\"ToggleWorkflowStepExpand(step.ID)\">\n <div class=\"workflow-step-main-row\">\n <div class=\"workflow-step-identity\">\n <span class=\"workflow-step-name\">{{ step.Name }}</span>\n @if (step.Agent) {\n <span class=\"workflow-step-agent-chip\">\n <i class=\"fa-solid fa-robot\"></i>\n <span>{{ step.Agent }}</span>\n </span>\n }\n </div>\n <div class=\"workflow-step-meta\">\n @if (FormatWorkflowStepDuration(step); as stepDur) {\n <span class=\"workflow-step-duration\" [class.is-skipped]=\"step.Status === 'Skipped'\">{{ stepDur }}</span>\n }\n @if (step.AgentRunID) {\n <button type=\"button\"\n class=\"workflow-step-run-btn\"\n (click)=\"OpenWorkflowStepAgentRun(step, $event)\"\n title=\"Open AI Agent Run record\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n </button>\n }\n @if (GetWorkflowStepSummary(step)) {\n <i class=\"fa-solid fa-chevron-down workflow-step-chevron\"\n [class.rotated]=\"IsWorkflowStepExpanded(step.ID)\"></i>\n }\n </div>\n </div>\n\n @if (IsWorkflowStepExpanded(step.ID) && GetWorkflowStepSummary(step); as summaryText) {\n <div class=\"workflow-step-details\">\n {{ summaryText }}\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Artifact Message Cards \u2014 single card when 1, or Supporting Artifacts grid + Final Artifact when > 1 -->\n @if (displayArtifacts.length === 1) {\n @for (a of displayArtifacts; track a.artifact.ID) {\n <div class=\"artifact-wrapper\" [class.system-artifact]=\"a.artifact.Visibility === 'System Only'\">\n <mj-artifact-message-card\n [artifactId]=\"a.artifact.ID\"\n [artifact]=\"a.artifact\"\n [artifactVersion]=\"a.version\"\n [currentUser]=\"currentUser\"\n (actionPerformed)=\"onArtifactActionPerformed($event)\">\n </mj-artifact-message-card>\n </div>\n }\n } @else if (displayArtifacts.length > 1) {\n <div class=\"multi-artifact-showcase\">\n <div class=\"multi-artifact-supporting-section\" [class.is-collapsed]=\"!IsSupportingArtifactsExpanded\">\n <button\n type=\"button\"\n class=\"supporting-artifacts-header\"\n (click)=\"ToggleSupportingArtifacts($event)\"\n [attr.aria-expanded]=\"IsSupportingArtifactsExpanded\">\n <span class=\"supporting-header-left\">\n <i class=\"fa-solid fa-layer-group supporting-header-icon\" aria-hidden=\"true\"></i>\n <span class=\"supporting-header-title\">Supporting Artifacts</span>\n <span class=\"supporting-header-count\">{{ SupportingArtifacts.length }}</span>\n @if (!IsSupportingArtifactsExpanded) {\n <span class=\"supporting-collapsed-preview\">\n @for (a of SupportingArtifacts; track a.artifact.ID; let stepIdx = $index) {\n <span class=\"supporting-preview-pill\">#{{ stepIdx + 1 }} {{ a.version?.Name || a.artifact.Name }}</span>\n }\n </span>\n }\n </span>\n <span class=\"supporting-header-right\">\n <span class=\"supporting-toggle-hint\">{{ IsSupportingArtifactsExpanded ? 'Collapse' : 'Expand' }}</span>\n <i class=\"fa-solid fa-chevron-down supporting-chevron\" [class.rotated]=\"IsSupportingArtifactsExpanded\" aria-hidden=\"true\"></i>\n </span>\n </button>\n\n @if (IsSupportingArtifactsExpanded) {\n <div class=\"supporting-artifacts-grid\">\n @for (a of SupportingArtifacts; track a.artifact.ID; let stepIdx = $index) {\n <div class=\"artifact-wrapper supporting-artifact-cell\" [class.system-artifact]=\"a.artifact.Visibility === 'System Only'\">\n <span class=\"supporting-step-badge\" [title]=\"'Supporting artifact #' + (stepIdx + 1)\">#{{ stepIdx + 1 }}</span>\n <mj-artifact-message-card\n [artifactId]=\"a.artifact.ID\"\n [artifact]=\"a.artifact\"\n [artifactVersion]=\"a.version\"\n [currentUser]=\"currentUser\"\n (actionPerformed)=\"onArtifactActionPerformed($event)\">\n </mj-artifact-message-card>\n </div>\n }\n </div>\n }\n </div>\n\n @if (PrimaryArtifact; as primary) {\n <div class=\"multi-artifact-primary-section\">\n <div class=\"primary-artifact-header\">\n <i class=\"fa-solid fa-star primary-header-icon\" aria-hidden=\"true\"></i>\n <span class=\"primary-header-title\">Final Artifact</span>\n <span class=\"primary-step-badge\">#{{ displayArtifacts.length }}</span>\n </div>\n <div class=\"artifact-wrapper primary-artifact-card\" [class.system-artifact]=\"primary.artifact.Visibility === 'System Only'\">\n <mj-artifact-message-card\n [artifactId]=\"primary.artifact.ID\"\n [artifact]=\"primary.artifact\"\n [artifactVersion]=\"primary.version\"\n [currentUser]=\"currentUser\"\n (actionPerformed)=\"onArtifactActionPerformed($event)\">\n </mj-artifact-message-card>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- One per attached artifact whose rows are still loading. Rendered AFTER the loaded\n cards, so an artifact arriving appends rather than reordering what is already on\n screen. Carries the same system-artifact de-emphasis as the card it becomes. -->\n @for (pending of pendingArtifactPlaceholders; track pending.artifactId) {\n <div class=\"artifact-wrapper\" [class.system-artifact]=\"pending.visibility === 'System Only'\">\n <div class=\"artifact-pending\">\n <mj-loading [text]=\"pendingLabel(pending)\" size=\"small\"></mj-loading>\n </div>\n </div>\n }\n\n <!-- Agent Response Form (shown only for last message by owner) -->\n @if (!ReadOnly && isLastMessageInConversation && isConversationOwner && responseForm) {\n <mj-dynamic-form\n [FormDefinition]=\"responseForm\"\n [Disabled]=\"isProcessing\"\n (FormSubmitted)=\"onFormSubmitted($event)\">\n </mj-dynamic-form>\n }\n\n <!-- Actionable Commands (shown only for last message by owner) -->\n @if (!ReadOnly && isLastMessageInConversation && isConversationOwner && actionableCommands.length > 0) {\n <mj-actionable-commands\n [commands]=\"actionableCommands\"\n [disabled]=\"isProcessing\"\n [isLastMessage]=\"isLastMessageInConversation\"\n [isConversationOwner]=\"isConversationOwner\"\n (commandExecuted)=\"onCommandExecuted($event)\">\n </mj-actionable-commands>\n }\n }\n\n @if (isEditing) {\n <div class=\"message-edit-container\">\n <textarea\n class=\"message-edit-textarea\"\n [(ngModel)]=\"editedText\"\n (keydown)=\"onEditKeydown($event)\"\n rows=\"4\"\n placeholder=\"Edit your message...\"></textarea>\n <div class=\"edit-actions\">\n <button mjButton Variant=\"primary\" Size=\"sm\" (click)=\"SaveEdit()\">\n <i [class]=\"EditSaveIcon\" aria-hidden=\"true\"></i>\n {{ EditSaveLabel }}\n </button>\n <button mjButton Variant=\"secondary\" Size=\"sm\" (click)=\"CancelEditing()\">\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n Cancel\n </button>\n @if (EditNote) {\n <span class=\"edit-note\">{{ EditNote }}</span>\n }\n </div>\n <div class=\"edit-hint\">{{ EditHint }}</div>\n </div>\n }\n </div>\n\n @if (ForkChips.length > 0 && !isEditing) {\n <div class=\"message-fork-chips\">\n @for (chip of ForkChips; track chip.Kind + (chip.BranchID ?? '')) {\n @if (chip.Kind === 'Original') {\n <button mjButton Variant=\"flat\" Size=\"sm\" class=\"fork-chip\" data-kind=\"Original\"\n (click)=\"OnForkChipClick(chip, $event)\"\n [attr.aria-label]=\"ChipAriaLabel(chip)\">\n <i [class]=\"'fork-chip-icon ' + ChipIcon(chip)\" aria-hidden=\"true\"></i>\n <span class=\"fork-chip-name\">{{ chip.DisplayName }}</span>\n <span class=\"fork-chip-time\">\u00B7 original</span>\n </button>\n } @else {\n <button mjButton Variant=\"flat\" Size=\"sm\" class=\"fork-chip\" [attr.data-kind]=\"chip.Kind\"\n (click)=\"OnForkChipClick(chip, $event)\"\n [attr.aria-label]=\"ChipAriaLabel(chip)\">\n <i [class]=\"'fork-chip-icon ' + ChipIcon(chip)\" aria-hidden=\"true\"></i>\n @if (chip.Avatars.length > 0) {\n <span class=\"fork-chip-avatars\" aria-hidden=\"true\">\n @for (avatar of chip.Avatars; track avatar.Kind + avatar.ID) {\n <span class=\"fork-chip-avatar\" [title]=\"avatar.Label\">\n @if (avatar.ImageURL) {\n <img [src]=\"avatar.ImageURL\" alt=\"\" />\n } @else if (avatar.IconClass) {\n <i [class]=\"avatar.IconClass\"></i>\n } @else {\n {{ avatar.Initials }}\n }\n </span>\n }\n </span>\n }\n <span class=\"fork-chip-messages\">{{ chip.MessageLabel }}</span>\n <span class=\"fork-chip-name\">{{ chip.DisplayName }}</span>\n <span class=\"fork-chip-time\">\u00B7 {{ chip.ActivityLabel }}</span>\n </button>\n }\n }\n </div>\n }\n\n <!-- Message Footer: only rendered on the last message, and hidden while any message of the view is edited.\n Non-last messages have no footer \u2014 pin/delete/rating live in the gear panel. -->\n @if (ShowsFooter) {\n <div class=\"message-footer\">\n @if (allowMessageDelete && isConversationOwner) {\n <button class=\"action-bar-btn danger inline-delete\" (click)=\"onDeleteClick()\" title=\"Delete this message and all messages below it\">\n <i class=\"fas fa-trash\"></i>\n </button>\n }\n @if (isAIMessage && (messageStatus === 'Complete' || ShowsFooterRegenerate)) {\n <div class=\"ai-message-actions\">\n @if (ShowsFooterRegenerate) {\n <button class=\"action-bar-btn labeled regenerate-btn\" type=\"button\" (click)=\"OnRegenerateClick()\" [title]=\"RegenerateTitle\">\n <i class=\"fa-solid fa-rotate-left\" aria-hidden=\"true\"></i>\n <span>Regenerate</span>\n </button>\n }\n @if (messageStatus === 'Complete') {\n <!-- Rating sits between Regenerate and Pin on the latest AI message -->\n @if (showMessageRating) {\n <mj-conversation-message-rating\n [conversationDetailId]=\"message.ID\"\n [currentUser]=\"currentUser\"\n [ratingEntityName]=\"message.EntityInfo.Name || 'MJ: Conversation Details'\"\n [ratingsData]=\"ratings\"\n [canEdit]=\"isConversationOwner && !ReadOnly\">\n </mj-conversation-message-rating>\n }\n @if (allowPinning) {\n <button\n class=\"action-bar-btn pin-btn\"\n [class.pinned]=\"message.IsPinned\"\n (click)=\"PinMessage()\"\n [title]=\"message.IsPinned ? 'Unpin message' : 'Pin message'\"\n type=\"button\">\n <i class=\"fas fa-thumbtack\"></i>\n </button>\n }\n }\n </div>\n }\n </div>\n }\n\n <!-- Agent details content section -->\n <div class=\"agent-details-section\">\n <!-- Agent Run Details Panel (expandable) -->\n @if (isAgentDetailsExpanded && hasAgentRun) {\n <!-- Agent Run Details Panel -->\n <div class=\"agent-details-panel\">\n @if (agentRun && showAgentRunDetails) {\n <div class=\"agent-details-content\">\n <div class=\"agent-details-header\">\n <i class=\"fas fa-chart-line\"></i>\n <span>\n <!-- Deliberately the ENGINE-resolved name: this header labels the real\n agent's diagnostics, and the link opens the real agent record \u2014 a\n host assistantDisplayName override must not relabel either. -->\n <a class=\"agent-name-link\" (click)=\"openAgentRecord()\" title=\"Open agent details\">\n {{ engineAgentInfo?.name || 'Agent' }}\n </a>\n Run Details\n </span>\n </div>\n\n <!-- Run-detail grid (run ID, step/token counts, $ cost, status) \u2014 developer/\n observability data. The whole run-details section (this grid AND its\n header above) is gated on showAgentRunDetails at the panel root, so a\n white-labeled surface hides all of it; the delete/pin/rating overflow\n below is a sibling block (outside this @if) and still renders. -->\n <div class=\"agent-details-grid\">\n <div class=\"detail-row\">\n <span class=\"detail-label\">Run ID:</span>\n <span class=\"detail-value\">\n <a class=\"run-id-link\" (click)=\"openAgentRunRecord()\" title=\"Open agent run details\">\n {{ agentRun.ID }}\n <i class=\"fas fa-external-link-alt\"></i>\n </a>\n </span>\n </div>\n\n @if (agentRunStepCount > 0) {\n <div class=\"detail-row\">\n <span class=\"detail-label\">Steps:</span>\n <span class=\"detail-value\">{{ agentRunStepCount }}</span>\n </div>\n }\n\n @if (agentRunTotalTokens > 0) {\n <div class=\"detail-row\">\n <span class=\"detail-label\">Tokens:</span>\n <span class=\"detail-value\">{{ formatNumber(agentRunTotalTokens) }}</span>\n </div>\n }\n\n @if (agentRunTotalCost > 0) {\n <div class=\"detail-row\">\n <span class=\"detail-label\">Cost:</span>\n <span class=\"detail-value\">\\${{ agentRunTotalCost.toFixed(4) }}</span>\n </div>\n }\n\n @if (agentRun.Status) {\n <div class=\"detail-row\">\n <span class=\"detail-label\">Status:</span>\n <span class=\"detail-value status-badge\" [class]=\"'status-' + agentRun.Status.toLowerCase()\">\n {{ agentRun.Status }}\n </span>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Delete + Rating + Pin in gear panel for non-last messages \u2014 mirrors last-message footer layout -->\n @if (!isLastMessage) {\n <div class=\"agent-panel-actions\">\n @if (allowMessageDelete && isConversationOwner) {\n <button class=\"action-bar-btn danger\" (click)=\"onDeleteClick()\" title=\"Delete this message and all messages below it\">\n <i class=\"fas fa-trash\"></i>\n </button>\n }\n @if (messageStatus === 'Complete') {\n <div class=\"ai-message-actions\">\n @if (showMessageRating) {\n <mj-conversation-message-rating\n [conversationDetailId]=\"message.ID\"\n [currentUser]=\"currentUser\"\n [ratingsData]=\"ratings\"\n [canEdit]=\"isConversationOwner && !ReadOnly\">\n </mj-conversation-message-rating>\n }\n @if (allowPinning) {\n <button\n class=\"action-bar-btn pin-btn\"\n [class.pinned]=\"message.IsPinned\"\n (click)=\"PinMessage()\"\n [title]=\"message.IsPinned ? 'Unpin message' : 'Pin message'\"\n type=\"button\">\n <i class=\"fas fa-thumbtack\"></i>\n </button>\n }\n </div>\n } @else if (allowPinning) {\n <button\n class=\"action-bar-btn pin-btn\"\n [class.pinned]=\"message.IsPinned\"\n (click)=\"PinMessage()\"\n [title]=\"message.IsPinned ? 'Unpin message' : 'Pin message'\"\n type=\"button\">\n <i class=\"fas fa-thumbtack\"></i>\n </button>\n }\n </div>\n }\n\n <!-- Tasks Section -->\n @if (WorkflowSteps.length > 0) {\n <div class=\"agent-details-tasks\">\n <div class=\"tasks-section-header\">\n <i class=\"fas fa-tasks\"></i>\n <span>Associated Tasks ({{ WorkflowSteps.length }})</span>\n </div>\n <div class=\"tasks-list\">\n @for (task of WorkflowSteps; track task.ID) {\n <mj-task-widget\n [task]=\"task\"\n [compact]=\"false\"\n [clickable]=\"false\"\n [showProgress]=\"true\"\n [showDuration]=\"true\">\n </mj-task-widget>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Reaction Buttons -->\n @if (showReactions && !isProcessing && !isInProgressAIMessage && !isEditing) {\n <div class=\"message-reactions\">\n <button class=\"reaction-btn\" (click)=\"toggleReaction('like')\">\n <i class=\"far fa-thumbs-up\"></i>\n <span class=\"reaction-count\">0</span>\n </button>\n <button class=\"reaction-btn\" (click)=\"toggleReaction('comment')\">\n <i class=\"far fa-comment\"></i>\n <span class=\"reaction-count\">0</span>\n </button>\n </div>\n }\n </div>\n</div>\n<!-- Fork marker: a separate element under the row, outside its rail and fade -->\n@if (ForkMarkerText) {\n <div class=\"fork-marker\" role=\"note\">\n <i class=\"fa-solid fa-code-branch\" aria-hidden=\"true\"></i>\n <span class=\"fork-marker-text\">{{ ForkMarkerText }}</span>\n <span class=\"fork-marker-line\" aria-hidden=\"true\"></span>\n </div>\n}\n", styles: [".message-item {\n display: flex;\n gap: 12px;\n padding: 8px 24px;\n transition: background-color 150ms ease;\n animation: fadeIn 0.3s ease;\n position: relative;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n transform: translateY(10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.message-item.ai-message {\n background-color: transparent;\n}\n\n.message-item.user-message {\n background-color: transparent;\n}\n\n/* Jump-to beacon: pulsed amber glow applied programmatically after scroll */\n.message-item.pin-beacon {\n animation: pinBeacon 1.5s ease-out forwards;\n}\n\n@keyframes pinBeacon {\n 0% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--mj-status-warning) 60%, transparent); }\n 20% { box-shadow: 0 0 0 8px color-mix(in srgb, var(--mj-status-warning) 35%, transparent); }\n 50% { box-shadow: 0 0 0 4px color-mix(in srgb, var(--mj-status-warning) 15%, transparent); }\n 70% { box-shadow: 0 0 0 6px color-mix(in srgb, var(--mj-status-warning) 20%, transparent); }\n 100% { box-shadow: none; }\n}\n\n/* Search hit: a highlight applied programmatically for 2 s after a search result opens */\n.message-item.search-hit-highlight {\n animation: searchHitHighlight 2s ease-out forwards;\n}\n\n@keyframes searchHitHighlight {\n 0% { background-color: color-mix(in srgb, var(--mj-brand-primary) 18%, transparent); }\n 70% { background-color: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent); }\n 100% { background-color: transparent; }\n}\n\n.message-item.in-progress {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n border-left: 3px solid var(--mj-brand-primary);\n position: relative;\n}\n\n@keyframes shimmer {\n 0% {\n background-position: -200% 0;\n }\n 100% {\n background-position: 200% 0;\n }\n}\n\n/* Progress message styling - make it visually distinct */\n.message-item.in-progress .message-text {\n color: var(--mj-text-primary);\n font-weight: 500;\n max-height: 150px;\n overflow-y: auto;\n display: block;\n}\n\n/* A streamed reply is not a status line. While the bubble shows streamed reply text the item\n adds `streaming` (IsStreaming, set by the list's in-place refresh): the cap above would box\n the growing reply into a 150px scroller of its own, and the status weight would re-wrap every\n line when the settled message drops it on completion, so the reply is set at its settled weight\n from the first frame. */\n.message-item.in-progress.streaming .message-text {\n max-height: none;\n overflow-y: visible;\n font-weight: inherit;\n}\n\n\n/* Pulse effect for avatar */\n.message-item.in-progress .avatar-circle {\n box-shadow: 0 0 0 0 color-mix(in srgb, var(--mj-brand-primary) 70%, transparent);\n animation: pulse 2s ease-in-out infinite;\n}\n\n@keyframes pulse {\n 0%, 100% {\n box-shadow: 0 0 0 0 color-mix(in srgb, var(--mj-brand-primary) 70%, transparent);\n }\n 50% {\n box-shadow: 0 0 0 8px color-mix(in srgb, var(--mj-brand-primary) 0%, transparent);\n }\n}\n\n.message-item:hover {\n background-color: color-mix(in srgb, var(--mj-text-primary) 2%, transparent);\n}\n\n/* Mention Pills - Match new editor chip style */\n:host ::ng-deep .mention-badge {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 12px;\n margin: 0 3px;\n border-radius: 16px;\n font-weight: 600;\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n vertical-align: middle;\n white-space: nowrap;\n}\n\n:host ::ng-deep .mention-badge.agent {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: 2px solid color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n box-shadow: var(--mj-shadow-md);\n}\n\n:host ::ng-deep .mention-badge.user {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: 2px solid color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n box-shadow: var(--mj-shadow-md);\n}\n\n:host ::ng-deep .mention-badge.entity {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n border: 2px solid color-mix(in srgb, var(--mj-status-success) 40%, transparent);\n box-shadow: var(--mj-shadow-md);\n}\n\n:host ::ng-deep .mention-badge.query {\n background: var(--mj-status-warning);\n color: var(--mj-text-inverse);\n border: 2px solid color-mix(in srgb, var(--mj-status-warning) 40%, transparent);\n box-shadow: var(--mj-shadow-md);\n}\n\n:host ::ng-deep .mention-badge.record {\n background: var(--mj-color-info, #2563eb);\n color: var(--mj-text-inverse, #fff);\n border: 2px solid color-mix(in srgb, var(--mj-color-info, #2563eb) 40%, transparent);\n box-shadow: var(--mj-shadow-md);\n text-decoration: none;\n}\n\n/* Icon-only record citation: surrounding prose already named the row. */\n:host ::ng-deep .mention-badge.record.icon-only {\n padding: 4px 7px;\n gap: 0;\n min-width: 1.65em;\n justify-content: center;\n}\n\n/* Skills: standard green fallback (AISkill.Color overrides via inline style) + sharp-cornered\n rectangle \u2014 the shape differentiates skills from the rounded agent/user/entity pills.\n Keep color + shape in sync with the composer chip (mention-editor's createMentionChip). */\n:host ::ng-deep .mention-badge.skill {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n border: 2px solid color-mix(in srgb, var(--mj-text-inverse) 35%, transparent);\n border-radius: 4px;\n box-shadow: var(--mj-shadow-md);\n}\n\n:host ::ng-deep .mention-badge i {\n font-size: 12px;\n opacity: 0.95;\n}\n\n/* Support for custom icon classes with background-image (like mj-icon-skip) */\n:host ::ng-deep .mention-badge i[class^=\"mj-icon-\"],\n:host ::ng-deep .mention-badge i[class*=\" mj-icon-\"] {\n width: 16px;\n height: 16px;\n display: inline-block;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n vertical-align: middle;\n font-size: inherit;\n}\n\n/* Skip icon - must use ::ng-deep for dynamically injected HTML */\n:host ::ng-deep .mention-badge i.mj-icon-skip {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 101.89918457031249 96.83947368421053'%3E%3Cg transform='translate(-0.1288232421875,-0.0)'%3E%3Cpath d='M93.85,41.56c-.84,0-1.62.2-2.37.55-3-4.35-7.49-8.12-13.04-11.04l.04-7.18v-14.44h-10.24v17.6c-1.52-.43-3.07-.8-4.67-1.11V0h-10.24v24.72s-.09,0-.14,0h-4.38s-.1,0-.14,0V7.3h-10.24v18.62c-1.6.32-3.15.69-4.67,1.11v-11.67h-10.24v6.09l.04,9.6c-5.55,2.92-10.04,6.7-13.04,11.04-.75-.35-1.53-.55-2.37-.55-4.5,0-8.14,5.61-8.14,12.51s3.64,12.53,8.14,12.53c.58,0,1.14-.12,1.67-.29,4.1,6.62,11.54,12.06,20.98,15.28l.79.13v7.05c0,2.97,1.45,5.58,3.87,6.99,1.18.69,2.5,1.04,3.85,1.03,1.4,0,2.83-.37,4.15-1.12l7.54-4.29,7.56,4.3c1.31.74,2.73,1.12,4.13,1.12s2.67-.35,3.85-1.04c2.42-1.41,3.86-4.02,3.86-6.98v-7.05l.79-.13c9.44-3.22,16.89-8.66,20.98-15.28.54.17,1.09.29,1.68.29,4.5,0,8.14-5.61,8.14-12.53s-3.63-12.51-8.14-12.51' fill='%23AAAAAA'/%3E%3Cpath d='M86.69,50.87c0-12.22-13.6-19.1-28.94-20.66-4.48-.47-9.19-.54-13.52,0-15.34,1.53-28.93,8.41-28.93,20.66,0,8.55,5.7,15.55,12.68,15.55h7.94c3.05,2.5,6.93,4.1,11.08,4.71,2.65.4,5.44.46,8.01,0,4.15-.6,8.05-2.2,11.1-4.71h7.92c6.97,0,12.68-7,12.68-15.55' fill='white' opacity='0.9'/%3E%3Cpath d='M57.83,55.82c-1.19,2.58-3.8,4.35-6.84,4.35s-5.65-1.77-6.84-4.35h13.68Z' fill='%23AAAAAA'/%3E%3Cpath d='M32.52,41.14c1.74,0,3.18,2.13,3.18,4.76s-1.44,4.74-3.18,4.74-3.16-2.13-3.16-4.74,1.41-4.76,3.16-4.76' fill='%23AAAAAA'/%3E%3Cpath d='M69.46,41.14c1.74,0,3.16,2.13,3.16,4.76s-1.41,4.74-3.16,4.74-3.18-2.13-3.18-4.74,1.41-4.76,3.18-4.76' fill='%23AAAAAA'/%3E%3Cpath d='M63.91,76.15c-.82-.48-1.84-.43-2.8.12l-10.13,5.75-10.11-5.75c-.96-.55-1.98-.59-2.8-.12-.82.47-1.29,1.38-1.29,2.49v10.12c0,1.11.47,2.02,1.28,2.49.38.22.8.33,1.24.33.51,0,1.05-.15,1.57-.44l10.12-5.75,10.11,5.75c.52.29,1.05.44,1.56.44.44,0,.86-.11,1.24-.33.81-.48,1.28-1.38,1.28-2.49v-10.12c0-1.11-.47-2.02-1.28-2.49' fill='white' opacity='0.9'/%3E%3C/g%3E%3C/svg%3E\");\n}\n\n/* Betty icon */\n:host ::ng-deep .mention-badge i.mj-icon-betty {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Ccircle cx='50' cy='50' r='45' fill='%23FF6B6B'/%3E%3Ctext x='50' y='65' text-anchor='middle' font-size='40' fill='white' font-family='Arial, sans-serif' font-weight='bold'%3EB%3C/text%3E%3C/svg%3E\");\n}\n\n/* Izzy icon */\n:host ::ng-deep .mention-badge i.mj-icon-izzy {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 204 180'%3E%3Cpath d='M0 0 C3.61144774 3.08477828 4.84942137 4.90830493 5.5 9.625 C5 13 5 13 3.5 14.9375 C1.74432121 17.35155834 1.83578869 18.21944114 1.90625 21.12890625 C1.9371875 22.40636719 1.968125 23.68382813 2 25 C3.18335937 24.72285156 4.36671875 24.44570313 5.5859375 24.16015625 C22.44010416 20.26839867 22.44010416 20.26839867 30 20 C31.80210938 19.92265625 31.80210938 19.92265625 33.640625 19.84375 C47.49356199 19.44904163 61.73614427 20.86627802 75 25 C75.53596907 19.64244551 75.53596907 19.64244551 73.5 15 C71.5549761 12.4066348 71.45048389 10.16629658 71.59375 6.97265625 C72.33633815 3.36681955 74.01253991 1.99164006 77 0 C79.80907914 -0.63997166 82.18961327 -0.63020793 85 0 C87.8100346 1.79363911 89.50940468 3.01880935 91 6 C90.984375 8.05859375 90.984375 8.05859375 90.75 10.4375 C90.68296875 11.21996094 90.6159375 12.00242187 90.546875 12.80859375 C90 15 90 15 88.49609375 16.3984375 C86.25734576 18.79500846 86.4852344 20.97464008 86.3125 24.1875 C86.21388672 25.81751953 86.21388672 25.81751953 86.11328125 27.48046875 C86.07589844 28.31191406 86.03851563 29.14335937 86 30 C86.67675781 30.0825 87.35351562 30.165 88.05078125 30.25 C91.82333306 31.20937741 94.89353787 32.99425194 98.1875 35 C99.18052124 35.60448975 99.18052124 35.60448975 100.19360352 36.22119141 C111.98050012 43.58460075 121.17745776 53.2687532 127 66 C127 66.66 127 67.32 127 68 C127.721875 68.0825 128.44375 68.165 129.1875 68.25 C133.81406141 69.48374971 136.2179022 71.66516963 138.625 75.7734375 C140.97801199 81.55147269 140.43210927 87.87027126 140.375 94 C140.38660156 95.24523437 140.39820313 96.49046875 140.41015625 97.7734375 C140.3675701 111.08870765 140.3675701 111.08870765 135.5 116.7421875 C131.62323281 119.66995439 128.8523137 121.14337998 124 121.125 C122.9790625 121.12886719 122.9790625 121.12886719 121.9375 121.1328125 C120 121 120 121 117 120 C116.74347656 120.65226562 116.48695313 121.30453125 116.22265625 121.9765625 C115.83980469 122.85054688 115.45695313 123.72453125 115.0625 124.625 C114.70285156 125.48351562 114.34320313 126.34203125 113.97265625 127.2265625 C108.57908063 134.80960941 99.56813916 137.59212379 91.0625 140.375 C90.02287109 140.72949219 88.98324219 141.08398438 87.91210938 141.44921875 C80.34347852 144 80.34347852 144 78 144 C78.02094727 144.65484375 78.04189453 145.3096875 78.06347656 145.984375 C78.14730383 148.98942328 78.19886895 151.99422464 78.25 155 C78.28351563 156.02996094 78.31703125 157.05992187 78.3515625 158.12109375 C78.43361416 164.56214867 77.93369275 169.71304442 74 175 C68.75523423 179.17440541 64.68195675 180.53237245 58 180 C55.12653443 178.963898 52.49379495 177.58020045 49.8125 176.125 C49.11447266 175.76019531 48.41644531 175.39539063 47.69726562 175.01953125 C46.39868999 174.33997216 45.10309803 173.65465367 43.81176758 172.96142578 C43.21388428 172.64415527 42.61600098 172.32688477 42 172 C41.34290039 171.59402588 40.68580078 171.18805176 40.00878906 170.76977539 C38.03672401 169.77639533 38.03672401 169.77639533 36.12475586 170.58325195 C35.49448486 170.96441162 34.86421387 171.34557129 34.21484375 171.73828125 C33.17166992 172.35026367 33.17166992 172.35026367 32.10742188 172.97460938 C31.39134766 173.41611328 30.67527344 173.85761719 29.9375 174.3125 C28.51029236 175.1647359 27.08194984 176.01507485 25.65234375 176.86328125 C25.02320068 177.24782471 24.39405762 177.63236816 23.74584961 178.02856445 C19.79572932 180.2265128 16.44037501 180.296025 12 180 C6.82155197 178.33236419 3.95074467 176.59004726 1 172 C-0.72417326 168.34258111 -1.2403609 165.51230089 -1.1953125 161.48046875 C-1.18886719 160.45888672 -1.18242188 159.43730469 -1.17578125 158.38476562 C-1.15902344 157.32966797 -1.14226563 156.27457031 -1.125 155.1875 C-1.11597656 154.11306641 -1.10695312 153.03863281 -1.09765625 151.93164062 C-1.07415306 149.28753146 -1.04129575 146.64388128 -1 144 C-1.63196289 143.81171631 -2.26392578 143.62343262 -2.91503906 143.42944336 C-8.20708475 141.84808949 -13.49207901 140.2541307 -18.75 138.5625 C-19.98234375 138.17191406 -21.2146875 137.78132812 -22.484375 137.37890625 C-29.06200008 134.79901552 -34.12925122 130.90130551 -38 125 C-38.875 121.5625 -38.875 121.5625 -39 119 C-39.495 119.33 -39.99 119.66 -40.5 120 C-45.24354984 121.89741993 -49.49426304 121.53143657 -54.1875 119.875 C-58.42051121 117.05299253 -61.35909664 113.92271008 -63 109 C-63.22709306 104.92471184 -63.22828659 100.8492307 -63.24023438 96.76806641 C-63.2498982 94.77103695 -63.28108516 92.77414948 -63.3125 90.77734375 C-63.36188158 78.59243786 -63.36188158 78.59243786 -60 73 C-57.7509823 70.86631654 -55.88785241 69.35340008 -53.0078125 68.20703125 C-50.3010212 66.57979679 -49.65488803 64.83796148 -48.3125 62 C-45.06106922 55.7428385 -40.95735135 50.97447519 -36 46 C-35.40832031 45.38511719 -34.81664063 44.77023438 -34.20703125 44.13671875 C-28.97373562 39.11136864 -17.47215548 30 -10 30 C-10.08733973 27.91589342 -10.19552278 25.83265331 -10.3125 23.75 C-10.37050781 22.58984375 -10.42851563 21.4296875 -10.48828125 20.234375 C-11.02905532 16.81635262 -11.84853545 15.59874271 -14 13 C-14.54046356 8.75350057 -14.48376179 6.74176808 -12.125 3.125 C-8.57275398 -0.42724602 -4.8825369 -0.970906 0 0 Z M5 35 C4.30245605 35.21962402 3.60491211 35.43924805 2.88623047 35.66552734 C-14.1501062 41.15773444 -29.02751477 50.81254544 -39 66 C-39.33 66.99 -39.66 67.98 -40 69 C-37.525 70.98 -37.525 70.98 -35 73 C-34.52691406 72.29875 -34.05382812 71.5975 -33.56640625 70.875 C-21.08320269 52.96537462 -2.17172019 42.38052109 19.26171875 38.5078125 C46.97805996 34.9959591 75.10426623 38.71529466 97.73046875 56.09765625 C103.53827054 61.07953766 107.9264808 66.53902088 112 73 C113.32 72.01 114.64 71.02 116 70 C115.01713954 61.60788376 107.55262518 55.04847712 101.375 49.8125 C82.80696113 35.82916208 61.35998978 30.59265576 38.375 30.625 C37.71836365 30.62554382 37.06172729 30.62608765 36.38519287 30.62664795 C25.42439402 30.66823796 15.42390121 31.62072499 5 35 Z' fill='%234E3B78' transform='translate(63,0)'/%3E%3Cpath d='M0 0 C5.27957047 5.78547525 9.31612861 13.25448014 10 21.125 C9.69743213 24.83293961 8.77676366 26.8914086 6.1875 29.5625 C-2.04152489 35.76003038 -13.60917874 39.6270706 -23.875 38.8125 C-24.535 38.1525 -25.195 37.4925 -25.875 36.8125 C-28.97847254 36.48234335 -31.03281176 36.30718706 -33.75 37.9375 C-35.40354531 40.69340884 -35.26865568 42.66325452 -34.875 45.8125 C-33.95833333 47.89583333 -33.95833333 47.89583333 -31.875 48.8125 C-28.29166667 48.89583333 -28.29166667 48.89583333 -24.875 47.8125 C-24.57086182 47.16466553 -24.26672363 46.51683105 -23.95336914 45.84936523 C-22.875 43.8125 -22.875 43.8125 -20.77124023 42.88696289 C-19.91731689 42.6883667 -19.06339355 42.48977051 -18.18359375 42.28515625 C-17.23806641 42.04990234 -16.29253906 41.81464844 -15.31835938 41.57226562 C-14.32642578 41.34216797 -13.33449219 41.11207031 -12.3125 40.875 C-4.77934417 39.10870895 1.54823541 36.95205932 8.125 32.8125 C7.81647145 40.06292099 4.56245219 45.32546918 -0.5 50.4609375 C-5.29811284 54.61130511 -8.83216751 54.86916719 -15 55 C-21.13677833 55.26569953 -25.04589225 56.51893716 -29.890625 60.31640625 C-39.17633501 67.31724667 -52.82450605 66.52799961 -63.875 65.8125 C-71.37432145 64.60538489 -79.4496824 61.2378176 -84.875 55.8125 C-86.81199027 55.70419517 -88.75076074 55.60687514 -90.69067383 55.58691406 C-97.68300211 55.51299157 -103.12007731 55.4392364 -108.44140625 50.40234375 C-108.91449219 49.87769531 -109.38757813 49.35304688 -109.875 48.8125 C-110.6175 48.090625 -111.36 47.36875 -112.125 46.625 C-118.35765562 36.60823203 -119.69570866 25.34707186 -117.25 13.8828125 C-113.47065738 3.0509466 -104.76645407 -4.0120534 -94.875 -9.1875 C-91.26850975 -10.75400624 -87.62602625 -12.0153043 -83.875 -13.1875 C-83.029375 -13.47496094 -82.18375 -13.76242188 -81.3125 -14.05859375 C-56.0861494 -22.29657387 -20.04377266 -18.06142152 0 0 Z' fill='%23FDFDFD' transform='translate(155.875,64.1875)'/%3E%3Cpath d='M0 0 C5.24479788 1.58079188 9.51172656 4.60408712 14.06640625 7.58984375 C18.37837094 10.28462973 18.37837094 10.28462973 23.30859375 11.1328125 C28.49696048 9.20971132 33.08639658 6.29555589 37.79882812 3.42578125 C43.66838131 -0.00837477 43.66838131 -0.00837477 47.27734375 0.078125 C49.34375 1.0078125 49.34375 1.0078125 51.34375 3.0078125 C51.82984303 7.30136192 51.71414913 11.62739332 51.71875 15.9453125 C51.74324219 17.15123047 51.76773438 18.35714844 51.79296875 19.59960938 C51.79876953 21.33114258 51.79876953 21.33114258 51.8046875 23.09765625 C51.81290527 24.15847412 51.82112305 25.21929199 51.82958984 26.31225586 C51.34375 29.0078125 51.34375 29.0078125 49.48461914 30.87670898 C46.29658529 32.56106989 44.78123809 32.062357 41.34375 31.0078125 C37.60135447 29.03986817 34.07891261 26.72386924 30.53320312 24.42578125 C26.44214688 21.80182316 26.44214688 21.80182316 21.77734375 20.921875 C17.60401055 22.78413283 13.85973006 25.2663764 10.046875 27.76953125 C5.85335687 30.41401513 2.44659272 31.9581498 -2.65625 32.0078125 C-4.33203125 30.87695312 -4.33203125 30.87695312 -5.65625 29.0078125 C-6.04443359 26.328125 -6.04443359 26.328125 -6.0546875 23.1328125 C-6.05855469 21.98296875 -6.06242187 20.833125 -6.06640625 19.6484375 C-6.05480469 18.44703125 -6.04320313 17.245625 -6.03125 16.0078125 C-6.04285156 14.80640625 -6.05445312 13.605 -6.06640625 12.3671875 C-6.06253906 11.21734375 -6.05867188 10.0675 -6.0546875 8.8828125 C-6.05130371 7.82835937 -6.04791992 6.77390625 -6.04443359 5.6875 C-5.65625 3.0078125 -5.65625 3.0078125 -4.29736328 1.14111328 C-2.65625 0.0078125 -2.65625 0.0078125 0 0 Z' fill='%23FCFCFD' transform='translate(78.65625,136.9921875)'/%3E%3Cpath d='M0 0 C2.5 0.625 2.5 0.625 4.8125 2.625 C6.96830116 6.4575354 7.24792603 9.32007692 6.5 13.625 C5.34367254 15.98793002 4.35016245 17.77483755 2.5 19.625 C0.1875 20 0.1875 20 -2.5 19.625 C-5.06638215 17.47478793 -6.29103188 15.79226637 -6.88671875 12.46484375 C-7.08084032 8.45522921 -6.77549931 6.12498023 -4.8125 2.5625 C-2.5 0.625 -2.5 0.625 0 0 Z' fill='%2353417C' transform='translate(138.5,67.375)'/%3E%3Cpath d='M0 0 C2.5 0.6875 2.5 0.6875 4.8125 2.625 C7.08407605 6.74748987 7.32547179 10.07653131 6.5 14.6875 C4.8125 17.75 4.8125 17.75 2.5 19.6875 C-0.0625 20.25 -0.0625 20.25 -2.5 19.6875 C-5.30401904 17.38419865 -5.84979387 14.76309142 -6.4375 11.3125 C-6.72853275 7.71913649 -6.44645777 6.57011897 -4.875 3.125 C-2.5 0.6875 -2.5 0.6875 0 0 Z' fill='%23523F7B' transform='translate(64.5,67.3125)'/%3E%3Cpath d='M0 0 C8.91 0 17.82 0 27 0 C24.81183076 5.47042311 24.169236 6.55141452 19 9 C14.08609728 9.94526984 9.88605617 10.13992406 5.51171875 7.49609375 C3.4733513 5.76185217 1.65854906 4.10051199 0 2 C0 1.34 0 0.68 0 0 Z' fill='%23574680' transform='translate(88,95)'/%3E%3C/svg%3E\");\n}\n\n/* Support for image tags in mention badges */\n:host ::ng-deep .mention-badge img {\n width: 16px;\n height: 16px;\n border-radius: 50%;\n object-fit: cover;\n vertical-align: middle;\n}\n\n:host ::ng-deep .mention-badge:hover {\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-lg);\n}\n\n/* Configuration preset indicator for agent mentions with non-default presets */\n/* Matches the styling from mention-editor.component.ts (lines 432-444) */\n:host ::ng-deep .mention-badge .preset-indicator {\n display: inline-block;\n font-size: 10px;\n font-weight: 600;\n font-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Roboto Mono', 'Courier New', monospace;\n background: rgba(255, 255, 255, 0.25);\n padding: 2px 6px;\n border-radius: 4px;\n margin-left: 4px;\n letter-spacing: 0.3px;\n text-transform: uppercase;\n border: 1px solid rgba(255, 255, 255, 0.15);\n}\n\n.message-avatar {\n flex-shrink: 0;\n}\n\n.avatar-circle {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 16px;\n color: var(--mj-text-inverse);\n}\n\n/* User avatars are circular */\n.avatar-circle.user-avatar {\n border-radius: 50%;\n background-color: var(--mj-text-primary);\n}\n\n/* Agent avatars are square with rounded corners */\n.avatar-circle.ai-avatar {\n border-radius: 8px;\n background-color: var(--mj-brand-primary); /* Brand color for agents */\n}\n\n/* Avatar images (for users with uploaded photos or URLs) */\n/* Host-supplied assistant avatar: the AI tile is a rounded SQUARE (8px, brand\n fill), so the image must clip to the tile's radius \u2014 not the user avatar's\n 50% circle \u2014 and the brand fill must drop so nothing peeks out at the\n corners or behind a transparent image. */\n.avatar-circle.ai-avatar.avatar-has-image {\n background-color: transparent;\n overflow: hidden;\n}\n.avatar-circle.ai-avatar .avatar-image {\n border-radius: inherit;\n}\n\n.avatar-image {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 50%;\n}\n\n/* Container for the standard mj-loading indicator while an artifact's rows load. Layout only \u2014\n the indicator owns its own animation, so there is no bespoke shimmer to keep re-themed. */\n.artifact-pending {\n display: flex;\n align-items: center;\n padding: 12px 16px;\n}\n\n/* System artifact styling - subtle visual distinction */\n.artifact-wrapper.system-artifact {\n opacity: 0.85;\n position: relative;\n}\n\n.artifact-wrapper.system-artifact::before {\n content: 'SYSTEM';\n position: absolute;\n top: 8px;\n right: 8px;\n font-size: 9px;\n font-weight: 600;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 2px 6px;\n border-radius: 3px;\n letter-spacing: 0.5px;\n z-index: 10;\n}\n\n/* Multi-artifact showcase: supporting step outputs in a collapsible grid + brand-tinted final deliverable */\n.multi-artifact-showcase {\n display: flex;\n flex-direction: column;\n gap: 10px;\n margin-top: 12px;\n}\n\n/* Strip the default 12px top/bottom margin from inner <mj-artifact-message-card> when inside the showcase\n so the grid and Final Deliverable containers control padding and vertical rhythm directly. */\n.multi-artifact-showcase ::ng-deep .artifact-message-card {\n margin: 0;\n}\n\n.multi-artifact-supporting-section {\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n background: var(--mj-bg-surface-sunken);\n overflow: hidden;\n}\n\n.supporting-artifacts-header {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n background: color-mix(in srgb, var(--mj-bg-surface-sunken) 65%, var(--mj-bg-surface-card));\n border: none;\n border-bottom: 1px solid var(--mj-border-subtle);\n cursor: pointer;\n color: var(--mj-text-secondary);\n font-size: 12px;\n font-weight: 600;\n text-align: left;\n transition: background-color 0.15s ease;\n}\n\n.multi-artifact-supporting-section.is-collapsed .supporting-artifacts-header {\n border-bottom: none;\n}\n\n.supporting-artifacts-header:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.supporting-header-left {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n flex-wrap: wrap;\n}\n\n.supporting-header-icon {\n color: var(--mj-brand-primary);\n font-size: 12px;\n}\n\n.supporting-header-title {\n color: var(--mj-text-primary);\n letter-spacing: 0.01em;\n}\n\n.supporting-header-count {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 18px;\n height: 18px;\n padding: 0 6px;\n border-radius: 999px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n font-size: 11px;\n font-weight: 600;\n}\n\n.supporting-collapsed-preview {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n margin-left: 4px;\n flex-wrap: wrap;\n min-width: 0;\n}\n\n.supporting-preview-pill {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n max-width: 220px;\n padding: 2px 8px;\n border-radius: 999px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n font-size: 11px;\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.supporting-preview-index {\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-text-muted);\n}\n\n.supporting-header-right {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-text-muted);\n font-size: 11px;\n font-weight: 500;\n flex-shrink: 0;\n}\n\n.supporting-chevron {\n font-size: 10px;\n transition: transform 0.18s ease;\n}\n\n.supporting-chevron.rotated {\n transform: rotate(180deg);\n}\n\n.supporting-artifacts-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));\n gap: 10px;\n padding: 12px 14px;\n}\n\n.supporting-artifact-cell {\n position: relative;\n min-width: 0;\n}\n\n.supporting-artifact-cell ::ng-deep .artifact-info-bar {\n padding: 10px 44px 10px 12px;\n border-radius: 8px;\n}\n\n.supporting-step-badge {\n position: absolute;\n top: 50%;\n right: 12px;\n transform: translateY(-50%);\n z-index: 5;\n display: inline-flex;\n align-items: center;\n padding: 2px 6px;\n border-radius: 999px;\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n pointer-events: none;\n}\n\n.multi-artifact-primary-section {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 10px 14px 12px 14px;\n border-radius: 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 7%, var(--mj-bg-surface-card));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 38%, var(--mj-border-default));\n box-shadow: 0 2px 10px color-mix(in srgb, var(--mj-brand-primary) 8%, transparent);\n}\n\n.primary-artifact-header {\n display: flex;\n align-items: center;\n gap: 7px;\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-brand-primary);\n}\n\n.primary-header-icon {\n font-size: 11px;\n}\n\n.primary-step-badge {\n display: inline-flex;\n align-items: center;\n padding: 1px 7px;\n border-radius: 999px;\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 32%, var(--mj-border-subtle));\n}\n\n.primary-artifact-card {\n min-width: 0;\n}\n\n.primary-artifact-card ::ng-deep .artifact-info-bar {\n background: color-mix(in srgb, var(--mj-brand-primary) 11%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 38%, var(--mj-border-default));\n border-radius: 8px;\n}\n\n.primary-artifact-card ::ng-deep .artifact-info-bar:hover {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n}\n\n.primary-artifact-card ::ng-deep .artifact-icon {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface-sunken));\n color: var(--mj-brand-primary);\n}\n\n.message-content {\n flex: 1;\n min-width: 0;\n position: relative;\n}\n\n.message-header {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 4px;\n font-size: 13px;\n}\n\n.message-sender {\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n/* Agent role badge */\n.agent-badge {\n display: inline-block;\n padding: 2px 8px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.message-time {\n color: var(--mj-text-muted);\n font-size: 12px;\n font-weight: 400;\n}\n\n/* Right-side cluster anchoring.\n The first of these siblings that actually renders absorbs the\n `margin-left: auto`, pushing the whole cluster right. Subsequent siblings\n then sit next to it (relying on the flex container's `gap`). This used to\n live only on .time-pill, which broke when timePillText returned null after\n agent completion \u2014 the gear icon would shift to the left. */\n.time-pill,\n.test-feedback-icon,\n.message-action-group,\n.agent-run-icon {\n margin-left: auto;\n}\n.time-pill ~ .test-feedback-icon,\n.time-pill ~ .message-action-group,\n.time-pill ~ .agent-run-icon,\n.test-feedback-icon ~ .message-action-group,\n.test-feedback-icon ~ .agent-run-icon,\n.message-action-group ~ .agent-run-icon {\n margin-left: 8px;\n}\n\n/* Message actions: always visible at the right end of the header, in DOM order (no overlay),\n with the same look as the gear (.agent-run-icon). */\n.message-action-group {\n display: inline-flex;\n align-items: center;\n gap: var(--mj-space-2);\n}\n/* Labeled actions on the latest turn need more room between them than icons do */\n.message-action-group.labeled {\n gap: var(--mj-space-4);\n}\n.message-header-action {\n gap: var(--mj-space-2);\n min-width: 20px;\n padding: 0;\n border: none;\n background: transparent;\n font: inherit;\n font-size: 12px;\n}\n.message-header-action i {\n font-size: 13px;\n}\n.message-header-action:focus-visible {\n outline: none;\n border-radius: var(--mj-radius-sm);\n box-shadow: var(--mj-focus-ring);\n}\n/* Inherited rows fade to 70%; the stronger color keeps the header icons at 3:1 against the surface */\n.message-item.fork-rail-inherited .message-header-action:not(:hover),\n.message-item.fork-rail-inherited .agent-run-icon:not(:hover):not(.expanded) {\n color: var(--mj-text-secondary);\n}\n.message-action-group .action-label-short {\n display: none;\n}\n\n/* Time pill - unified styling for all AI message states */\n.time-pill {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 500;\n transition: all 0.3s ease;\n}\n\n.time-pill i {\n font-size: 10px;\n}\n\n/* Stop control beside the in-progress time pill \u2014 same pill geometry, error palette so it\n reads as the one destructive control in the header. */\n.stop-run-pill {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 8px;\n border-radius: 10px;\n border: 1px solid transparent;\n font-size: 11px;\n font-weight: 500;\n line-height: inherit;\n cursor: pointer;\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n transition: all 0.2s ease;\n}\n\n.stop-run-pill i {\n font-size: 10px;\n}\n\n.stop-run-pill:hover:not(:disabled) {\n border-color: var(--mj-status-error);\n}\n\n.stop-run-pill:disabled {\n cursor: default;\n opacity: 0.7;\n}\n\n/* Complete state - light blue (default) */\n.time-pill.complete {\n background: var(--mj-status-info-bg);\n color: var(--mj-status-info-text);\n}\n\n/* Stopped state - neutral: a stopped run is neither a success nor an error, and the error\n palette belongs to the stalled state. Follows .complete so it wins on equal specificity. */\n.time-pill.stopped {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n/* In-progress state - brand color with subtle pulse */\n.time-pill.in-progress {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n/* Active agent run state - brand color with subtle pulse */\n.time-pill.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n/* Liveness states (MJ #4222) \u2014 the run may no longer be progressing, so the pill stops\n presenting the elapsed time as healthy progress. These follow .in-progress/.active in the\n stylesheet so they win on equal specificity. */\n.time-pill.checking {\n background: var(--mj-status-warning-bg);\n color: var(--mj-status-warning-text);\n}\n\n.time-pill.stalled {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n}\n\n.time-pill .liveness-label {\n font-weight: 400;\n opacity: 0.85;\n}\n\n/* Failed state - red */\n.time-pill.failed {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n}\n\n@keyframes pillPulse {\n 0%, 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.85;\n }\n}\n\n/* A stopped reply: the kept-step line and the Continue control under the reply text */\n.stopped-line {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n margin-top: var(--mj-space-2);\n font-size: var(--mj-text-xs);\n color: var(--mj-text-secondary);\n}\n.stopped-line i {\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n.stopped-actions {\n display: flex;\n gap: var(--mj-space-2);\n margin-top: var(--mj-space-2);\n}\n\n/* Deprecated - keeping for backward compatibility but no longer used */\n.generation-time {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 8px;\n background: var(--mj-status-info-bg);\n border-radius: 10px;\n font-size: 11px;\n color: var(--mj-status-info-text);\n font-weight: 500;\n margin-left: auto;\n}\n\n.generation-time i {\n font-size: 10px;\n}\n\n/* Deprecated - keeping for backward compatibility but no longer used */\n.message-elapsed {\n color: var(--mj-text-muted);\n font-size: 11px;\n font-style: italic;\n}\n\n.message-body {\n margin-bottom: 0;\n}\n\n.message-text {\n color: var(--mj-text-primary);\n line-height: 1.5;\n word-wrap: break-word;\n}\n\n/* Remove extra margin from markdown paragraphs */\n.message-text mj-markdown > :first-child,\n.message-text ::ng-deep .mj-markdown-container > :first-child {\n margin-top: 0;\n}\n\n.message-text mj-markdown > :last-child,\n.message-text ::ng-deep .mj-markdown-container > :last-child {\n margin-bottom: 0;\n}\n\n/* Asymmetric bubble shapes for message content */\n.message-item.user-message .message-content {\n border-radius: 12px 12px 12px 4px;\n}\n\n.message-item.ai-message .message-content {\n border-radius: 4px 12px 12px 12px;\n}\n\n/* Reaction Buttons */\n.message-reactions {\n display: none; /* Hide reactions for now - not implemented */\n}\n\n/* Artifact Card - Claude.ai Style */\n.artifact-card {\n display: flex;\n flex-direction: column;\n gap: 12px;\n margin-top: 12px;\n padding: 16px;\n border: 1px solid color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n border-radius: 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, var(--mj-bg-surface));\n cursor: pointer;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n max-width: 500px;\n box-shadow: var(--mj-shadow-sm);\n position: relative;\n overflow: hidden;\n}\n\n.artifact-card::before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 3px;\n background: var(--mj-brand-primary);\n opacity: 1;\n}\n\n.artifact-card:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n box-shadow: var(--mj-shadow-md);\n transform: translateY(-1px);\n}\n\n.artifact-card-header {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n}\n\n.artifact-card-icon {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-brand-primary);\n flex-shrink: 0;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n border-radius: 6px;\n transition: all 0.2s ease;\n}\n\n.artifact-card:hover .artifact-card-icon {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n transform: scale(1.05);\n}\n\n.artifact-card-icon i {\n font-size: 18px;\n}\n\n.artifact-card-content {\n flex: 1;\n min-width: 0;\n}\n\n.artifact-card-label {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n letter-spacing: -0.01em;\n margin-bottom: 4px;\n}\n\n.artifact-card-description {\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n}\n\n/* Thread indicator badge */\n.thread-indicator {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n margin-top: 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n border-radius: 16px;\n cursor: pointer;\n transition: all 150ms ease;\n font-size: 12px;\n color: var(--mj-brand-primary-hover);\n font-weight: 500;\n}\n\n.thread-indicator:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.thread-indicator i {\n font-size: 14px;\n}\n\n.thread-count {\n font-weight: 600;\n}\n\n/* Edit mode styles */\n.message-item.editing {\n background-color: var(--mj-status-warning-bg);\n border-left: 3px solid var(--mj-status-warning);\n}\n\n.message-edit-container {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.message-edit-textarea {\n width: 100%;\n padding: 12px;\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n font-family: inherit;\n font-size: 14px;\n line-height: 1.6;\n resize: vertical;\n min-height: 80px;\n transition: border-color 150ms ease;\n}\n\n.message-edit-textarea:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.edit-actions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px;\n}\n\n/* What the save does, at the right end of the button row */\n.edit-note {\n margin-left: auto;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-secondary);\n}\n\n/* The answer \"Save and resend\" will replace dims while that edit is open */\n.message-item.pending-replace .message-body {\n opacity: 0.6;\n}\n\n.edit-hint {\n font-size: 12px;\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n.edited-badge {\n margin-left: 8px;\n font-size: 11px;\n color: var(--mj-text-muted);\n font-style: italic;\n font-weight: normal;\n}\n\n/* Message Action Bar (separate panel above agent details) */\n.message-action-bar {\n margin-top: 12px;\n margin-bottom: 8px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px;\n}\n\n.action-bar-container {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.action-buttons {\n display: flex;\n gap: 4px;\n margin-left: 16px;\n padding-left: 16px;\n border-left: 1px solid var(--mj-border-default);\n}\n\n.action-bar-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 6px 10px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-text-muted);\n border-radius: 6px;\n font-size: 16px;\n line-height: 1;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s;\n min-width: 36px;\n height: 32px;\n opacity: 0.6;\n}\n\n.action-bar-btn i {\n font-size: 16px;\n line-height: 1;\n}\n\n/* A footer button with a text label (Regenerate) */\n.action-bar-btn.labeled {\n gap: var(--mj-space-2);\n min-width: 0;\n padding: 6px 12px;\n font-size: 13px;\n}\n\n.action-bar-btn.labeled i {\n font-size: 14px;\n}\n\n.action-bar-btn:hover {\n opacity: 1;\n border-color: var(--mj-text-secondary);\n}\n\n.action-bar-btn.danger {\n color: var(--mj-status-error);\n}\n\n.action-bar-btn.danger:hover {\n opacity: 1;\n background: var(--mj-status-error-bg);\n border-color: var(--mj-status-error);\n}\n\n.action-bar-btn i.pinned {\n color: var(--mj-brand-primary);\n}\n\n.action-bar-btn.test-feedback {\n color: var(--mj-status-warning);\n}\n\n.action-bar-btn.test-feedback:hover {\n opacity: 1;\n background: var(--mj-status-warning-bg);\n border-color: var(--mj-status-warning);\n}\n\n/* Message status indicator */\n.message-status {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n padding: 2px 8px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 4px;\n margin-left: 8px;\n animation: statusPulse 2s ease-in-out infinite;\n}\n\n.message-status i {\n color: var(--mj-brand-primary);\n font-size: 11px;\n}\n\n.message-status.error {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.message-status.error i {\n color: var(--mj-status-error);\n}\n\n.status-text {\n font-weight: 500;\n}\n\n@keyframes statusPulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.7; }\n}\n\n/* ============================================\n Agent Run Icon & Details Panel\n ============================================ */\n\n/* Agent run gear icon in header - muted style for power users.\n Left-margin is governed by the right-side cluster rules above so the gear\n stays right-anchored whether or not the time pill / test-feedback icon\n renders alongside it. */\n.agent-run-icon,\n.message-header-action {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: 20px;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.2s ease;\n user-select: none;\n}\n\n.agent-run-icon {\n width: 20px;\n}\n\n.agent-run-icon i.fa-cog {\n font-size: 13px;\n}\n\n.agent-run-icon:hover,\n.message-header-action:hover {\n color: var(--mj-text-secondary);\n}\n\n.agent-run-icon.expanded {\n color: var(--mj-brand-primary);\n transform: scale(1.1);\n}\n\n/* Test feedback icon in header - appears for test runs.\n Left-margin handled by the right-side cluster rules above. */\n.test-feedback-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.2s ease;\n user-select: none;\n}\n\n.test-feedback-icon i.fa-flask {\n font-size: 13px;\n}\n\n.test-feedback-icon:hover {\n color: var(--mj-brand-primary); /* Blue color for test feedback */\n transform: scale(1.1);\n}\n\n@keyframes rotate {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n/* Agent details panel */\n.agent-details-panel {\n margin-top: 12px;\n padding: 16px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n animation: slideDown 0.2s ease;\n}\n\n@keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n/* Loading state */\n.agent-details-loading {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-text-secondary);\n font-size: 13px;\n}\n\n.agent-details-loading i {\n color: var(--mj-brand-primary);\n}\n\n/* Error state */\n.agent-details-error {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-status-error);\n font-size: 13px;\n}\n\n.agent-details-error i {\n color: var(--mj-status-error);\n}\n\n/* Content header */\n.agent-details-header {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 12px;\n padding-bottom: 8px;\n border-bottom: 1px solid var(--mj-border-default);\n font-weight: 600;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.agent-details-header i {\n color: var(--mj-brand-primary);\n}\n\n.agent-name-link {\n color: var(--mj-brand-primary);\n cursor: pointer;\n text-decoration: none;\n font-weight: 600;\n transition: all 0.2s ease;\n}\n\n.agent-name-link:hover {\n color: var(--mj-brand-primary-hover);\n text-decoration: underline;\n}\n\n/* Details grid */\n.agent-details-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.detail-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 6px;\n border: 1px solid var(--mj-border-default);\n}\n\n.detail-label {\n font-size: 12px;\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.detail-value {\n font-size: 13px;\n color: var(--mj-text-primary);\n font-weight: 600;\n font-family: 'Monaco', 'Menlo', 'Consolas', monospace;\n}\n\n/* Status badge in details */\n.status-badge {\n padding: 3px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-badge.status-pending {\n background: var(--mj-status-warning-bg);\n color: var(--mj-status-warning-text);\n}\n\n.status-badge.status-running {\n background: var(--mj-status-info-bg);\n color: var(--mj-status-info-text);\n}\n\n.status-badge.status-complete {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n.status-badge.status-failed,\n.status-badge.status-error {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n}\n\n.status-badge.status-cancelled {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n/* Run ID link styling */\n.run-id-link {\n color: var(--mj-brand-primary);\n cursor: pointer;\n text-decoration: none;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n transition: all 0.2s ease;\n}\n\n.run-id-link:hover {\n color: var(--mj-brand-primary-hover);\n text-decoration: underline;\n}\n\n.run-id-link i.fa-external-link-alt {\n font-size: 10px;\n opacity: 0.7;\n}\n\n/* Tasks section in agent details */\n.agent-details-tasks {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.tasks-section-header {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 12px;\n font-weight: 600;\n font-size: 12px;\n color: var(--mj-text-primary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.tasks-section-header i {\n color: var(--mj-brand-primary);\n font-size: 11px;\n}\n\n.tasks-list {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.tasks-list mj-task-widget {\n display: block;\n}\n\n/* Artifact version badge */\n.artifact-version-badge {\n display: inline-block;\n margin-left: 8px;\n padding: 2px 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 11px;\n font-weight: 600;\n font-family: monospace;\n border-radius: 4px;\n vertical-align: middle;\n}\n\n/* Message Footer (rating counts and inline actions) */\n.message-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.rating-counts {\n display: flex;\n align-items: center;\n gap: 12px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.rating-count {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.rating-count.thumbs-up {\n color: var(--mj-status-success);\n}\n\n.rating-count.thumbs-down {\n color: var(--mj-status-error);\n}\n\n.rating-total {\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n/* Delete button \u2014 always visible on the last message, no hover required */\n.inline-delete {\n display: flex;\n align-items: center;\n}\n\n.message-item.pinned {\n border-left: 3px solid var(--mj-status-warning);\n background-color: color-mix(in srgb, var(--mj-status-warning) 8%, transparent);\n}\n\n/* Wraps pin button + rating component on the right side of the footer */\n.ai-message-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-left: auto;\n}\n\n.action-bar-btn.pin-btn {\n color: var(--mj-text-muted);\n}\n\n.action-bar-btn.pin-btn:hover {\n color: var(--mj-status-warning);\n border-color: var(--mj-status-warning);\n}\n\n.action-bar-btn.pin-btn.pinned {\n opacity: 1;\n color: var(--mj-status-warning);\n border-color: var(--mj-status-warning-border);\n background: color-mix(in srgb, var(--mj-status-warning) 10%, var(--mj-bg-surface));\n}\n\n/* Delete + Rating + Pin in gear panel for non-last messages \u2014 mirrors .message-footer layout */\n.agent-panel-actions {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 0 0;\n margin-top: 8px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n/* Agent details section wrapper */\n.agent-details-section {\n margin-top: 8px;\n}\n\n/* Mobile adjustments: 481px - 768px */\n@media (max-width: 768px) {\n .message-item {\n padding: 8px 12px;\n gap: 8px;\n }\n\n .avatar-circle {\n width: 32px;\n height: 32px;\n font-size: 14px;\n }\n\n .artifact-card {\n max-width: 90vw;\n padding: 12px;\n }\n\n .artifact-card-icon {\n width: 32px;\n height: 32px;\n }\n\n .artifact-card-icon i {\n font-size: 16px;\n }\n\n .message-header {\n font-size: 12px;\n }\n\n .message-sender {\n font-size: 12px;\n }\n\n .message-time {\n font-size: 11px;\n }\n\n .agent-badge {\n font-size: 10px;\n padding: 1px 6px;\n }\n\n .time-pill {\n font-size: 10px;\n padding: 2px 6px;\n }\n\n /* The latest turn's Fork from here shortens to \"Fork\" */\n .message-action-group .action-label-long {\n display: none;\n }\n\n .message-action-group .action-label-short {\n display: inline;\n }\n}\n\n/* Small Phone adjustments: <= 480px */\n@media (max-width: 480px) {\n .message-item {\n padding: 6px 8px;\n gap: 6px;\n }\n\n .avatar-circle {\n width: 28px;\n height: 28px;\n font-size: 12px;\n }\n\n .avatar-circle.ai-avatar {\n border-radius: 6px;\n }\n\n .artifact-card {\n padding: 10px;\n margin-top: 8px;\n }\n\n .artifact-card-header {\n gap: 8px;\n }\n\n .artifact-card-icon {\n width: 28px;\n height: 28px;\n }\n\n .artifact-card-icon i {\n font-size: 14px;\n }\n\n .artifact-card-label {\n font-size: 13px;\n }\n\n .artifact-card-description {\n font-size: 12px;\n }\n\n .message-header {\n font-size: 11px;\n gap: 6px;\n }\n\n .message-sender {\n font-size: 11px;\n }\n\n .message-time {\n font-size: 10px;\n }\n\n .agent-badge {\n font-size: 9px;\n padding: 1px 5px;\n }\n\n .time-pill {\n font-size: 9px;\n padding: 1px 5px;\n }\n\n .thread-indicator {\n padding: 4px 8px;\n font-size: 11px;\n margin-top: 6px;\n }\n\n .agent-details-panel {\n padding: 12px;\n margin-top: 8px;\n }\n\n .agent-details-grid {\n grid-template-columns: 1fr;\n gap: 8px;\n }\n\n .detail-row {\n padding: 6px 8px;\n }\n\n .detail-label,\n .detail-value {\n font-size: 11px;\n }\n}\n\n/* Form Response Pills */\n:host ::ng-deep .form-response-pill {\n margin: 0 3px;\n transition: all 0.2s ease;\n}\n\n/* Single field form - inline pill (similar to mention badges) */\n:host ::ng-deep .form-response-pill.single-field {\n display: inline-flex;\n align-items: center;\n vertical-align: middle;\n gap: 6px;\n padding: 4px 12px;\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n border: 2px solid color-mix(in srgb, var(--mj-status-success) 40%, transparent);\n border-radius: 16px;\n font-size: 13px;\n font-weight: 600;\n box-shadow: var(--mj-shadow-md);\n cursor: default;\n white-space: nowrap;\n}\n\n/* Multi-field form - card-style (block display) */\n:host ::ng-deep .form-response-pill.multi-field {\n display: inline-block;\n max-width: min(800px, 100%);\n width: auto;\n min-width: 400px;\n margin: 8px 0;\n vertical-align: top;\n}\n\n:host ::ng-deep .form-response-pill.single-field i {\n font-size: 11px;\n opacity: 0.95;\n}\n\n:host ::ng-deep .form-response-pill.single-field strong {\n font-weight: 600;\n margin-right: 4px;\n}\n\n/* Multi-field form - card-style pill */\n:host ::ng-deep .form-response-pill .pill-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n font-weight: 600;\n font-size: 13px;\n border-radius: 12px 12px 0 0;\n border: 2px solid color-mix(in srgb, var(--mj-status-success) 40%, transparent);\n border-bottom: none;\n box-shadow: var(--mj-shadow-md);\n}\n\n:host ::ng-deep .form-response-pill .pill-header i {\n font-size: 12px;\n opacity: 0.95;\n}\n\n:host ::ng-deep .form-response-pill .pill-fields {\n padding: 10px 12px;\n background: color-mix(in srgb, var(--mj-status-success) 8%, transparent);\n border: 2px solid color-mix(in srgb, var(--mj-status-success) 40%, transparent);\n border-top: none;\n border-radius: 0 0 12px 12px;\n}\n\n:host ::ng-deep .form-response-pill .pill-field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 12px 0;\n font-size: 13px;\n}\n\n:host ::ng-deep .form-response-pill .pill-field:not(:last-child) {\n border-bottom: 1px solid color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n padding-bottom: 12px;\n margin-bottom: 0;\n}\n\n:host ::ng-deep .form-response-pill .field-question {\n font-weight: 600;\n color: var(--mj-status-success);\n font-size: 12px;\n line-height: 1.4;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n opacity: 0.9;\n}\n\n:host ::ng-deep .form-response-pill .field-answer {\n color: var(--mj-text-primary);\n font-weight: 400;\n font-size: 15px;\n line-height: 1.6;\n padding: 8px 0 8px 12px;\n background: transparent;\n border-left: 3px solid color-mix(in srgb, var(--mj-status-success) 40%, transparent);\n font-style: italic;\n}\n\n\n/* Hover effect for form pills */\n:host ::ng-deep .form-response-pill.single-field:hover {\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-lg);\n}\n\n:host ::ng-deep .form-response-pill.multi-field:hover {\n transform: translateY(-1px);\n}\n\n:host ::ng-deep .form-response-pill.multi-field:hover .pill-header {\n box-shadow: var(--mj-shadow-lg);\n}\n\n/* Responsive adjustments for multi-field forms */\n@media (max-width: 600px) {\n :host ::ng-deep .form-response-pill.multi-field {\n min-width: 300px;\n }\n}\n\n@media (max-width: 400px) {\n :host ::ng-deep .form-response-pill.multi-field {\n min-width: 100%;\n }\n\n :host ::ng-deep .form-response-pill .field-question {\n font-size: 11px;\n }\n\n :host ::ng-deep .form-response-pill .field-answer {\n font-size: 14px;\n padding: 6px 0 6px 10px;\n }\n}\n\n/* ==================== Message Attachments ==================== */\n\n.message-attachments {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n margin-top: 12px;\n margin-bottom: 8px;\n}\n\n.attachment-item {\n position: relative;\n border-radius: 8px;\n overflow: hidden;\n cursor: pointer;\n transition: transform 0.2s, box-shadow 0.2s;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid color-mix(in srgb, var(--mj-text-primary) 10%, transparent);\n}\n\n.attachment-item:hover {\n transform: scale(1.02);\n box-shadow: var(--mj-shadow-md);\n}\n\n.attachment-item.image-attachment {\n width: 200px;\n height: 150px;\n}\n\n.attachment-thumbnail {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n}\n\n.attachment-overlay {\n position: absolute;\n inset: 0;\n background: var(--mj-bg-overlay);\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0;\n transition: opacity 0.2s;\n}\n\n.attachment-item:hover .attachment-overlay {\n opacity: 1;\n}\n\n.attachment-overlay i {\n color: var(--mj-text-inverse);\n font-size: 24px;\n}\n\n/* Non-image attachment tile: horizontal strip with UPPERCASE type badge,\n filename, and size. Artifact-typed attachments get a brand-primary tinted\n badge to distinguish them from plain uploads. */\n.attachment-strip {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px 12px 8px 8px;\n width: 320px;\n max-width: 100%;\n min-height: 56px;\n cursor: pointer;\n border-radius: 8px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n transition: background 0.15s, border-color 0.15s;\n}\n\n.attachment-strip:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n}\n\n.attachment-badge {\n flex: 0 0 auto;\n min-width: 48px;\n height: 48px;\n padding: 0 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 11px;\n font-weight: 700;\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-subtle);\n user-select: none;\n text-align: center;\n line-height: 1;\n white-space: nowrap;\n}\n\n.attachment-strip.is-artifact .attachment-badge {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.attachment-meta {\n display: flex;\n flex-direction: column;\n min-width: 0; /* allow ellipsis inside flex child */\n gap: 2px;\n}\n\n.attachment-strip .file-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.attachment-strip .file-size {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n/* Responsive attachments */\n@media (max-width: 600px) {\n .attachment-item.image-attachment {\n width: 150px;\n height: 112px;\n }\n\n .attachment-strip {\n width: 100%;\n }\n}\n/* \u2500\u2500 Markdown-rendered textarea values inside submitted form pills (e.g. the approved Plan) \u2500\u2500 */\n:host ::ng-deep .form-response-pill .field-answer-markdown {\n font-style: normal; /* the pill's default italic reads poorly on multi-line formatted content */\n font-size: 13.5px;\n line-height: 1.6;\n color: var(--mj-text-primary);\n}\n:host ::ng-deep .form-response-pill .field-answer-markdown h1,\n:host ::ng-deep .form-response-pill .field-answer-markdown h2,\n:host ::ng-deep .form-response-pill .field-answer-markdown h3,\n:host ::ng-deep .form-response-pill .field-answer-markdown h4 {\n font-size: 13.5px;\n font-weight: 700;\n margin: 10px 0 4px;\n color: var(--mj-text-primary);\n}\n:host ::ng-deep .form-response-pill .field-answer-markdown p {\n margin: 6px 0;\n}\n:host ::ng-deep .form-response-pill .field-answer-markdown ul,\n:host ::ng-deep .form-response-pill .field-answer-markdown ol {\n margin: 6px 0;\n padding-left: 22px;\n}\n:host ::ng-deep .form-response-pill .field-answer-markdown li {\n margin: 3px 0;\n}\n:host ::ng-deep .form-response-pill .field-answer-markdown code {\n font-size: 12px;\n padding: 1px 5px;\n border-radius: 4px;\n background: color-mix(in srgb, var(--mj-status-success) 12%, transparent);\n}\n:host ::ng-deep .form-response-pill .field-answer-markdown table {\n border-collapse: collapse;\n margin: 8px 0;\n}\n:host ::ng-deep .form-response-pill .field-answer-markdown th,\n:host ::ng-deep .form-response-pill .field-answer-markdown td {\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 25%, transparent);\n padding: 4px 10px;\n font-size: 12.5px;\n}\n\n/* Fork chips: one per fork placed under the message */\n.message-fork-chips {\n display: flex;\n flex-wrap: wrap;\n gap: var(--mj-space-2);\n margin-top: var(--mj-space-2);\n}\n.message-fork-chips > button {\n display: inline-flex;\n align-items: center;\n gap: var(--mj-space-2);\n max-width: 100%;\n min-width: 0;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: var(--mj-text-xs);\n}\n.message-fork-chips > button:hover {\n background: var(--mj-bg-surface-hover);\n}\n.message-fork-chips .fork-chip-icon {\n color: var(--mj-status-info);\n}\n.message-fork-chips > button[data-kind='Edit'] .fork-chip-icon {\n color: var(--mj-status-warning);\n}\n.message-fork-chips > button[data-kind='Regenerate'] .fork-chip-icon {\n color: var(--mj-brand-tertiary);\n}\n.fork-chip-avatars {\n display: inline-flex;\n}\n.fork-chip-avatar {\n width: 20px;\n height: 20px;\n margin-left: -6px;\n border: 2px solid var(--mj-bg-surface);\n border-radius: var(--mj-radius-full);\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 9px;\n font-weight: 600;\n overflow: hidden;\n}\n.fork-chip-avatar:first-child {\n margin-left: 0;\n}\n.fork-chip-avatar img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n.fork-chip-messages {\n font-weight: 600;\n color: var(--mj-text-link);\n}\n/* The name is the part of a chip that shrinks: a long name ends in an ellipsis inside a narrow column. */\n.fork-chip-name {\n font-weight: 500;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.fork-chip-time {\n color: var(--mj-text-muted);\n}\n\n/* Fork view rails: inherited rows faded on a dashed rail, the fork's own rows on a solid rail.\n The row's children fade, not the row, so the row's fade-in animation ends at the faded state. */\n.message-item.fork-rail-inherited {\n border-left: 2px dashed var(--mj-border-strong);\n padding-left: var(--mj-space-4);\n}\n.message-item.fork-rail-inherited > * {\n opacity: 0.7;\n}\n.message-item.fork-rail-own {\n border-left: 2px solid var(--mj-brand-primary);\n padding-left: var(--mj-space-4);\n}\n\n/* Fork marker: a full-opacity divider under the last inherited row of a fork view, outside both rails */\n.fork-marker {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n padding: var(--mj-space-2) var(--mj-space-6);\n font-size: var(--mj-text-xs);\n color: var(--mj-text-secondary);\n}\n.fork-marker i {\n color: var(--mj-status-info);\n}\n.fork-marker-line {\n flex: 1;\n height: 1px;\n background: var(--mj-border-default);\n}\n/* The marker lines up with the row padding of narrow screens */\n@media (max-width: 768px) {\n .fork-marker {\n padding: var(--mj-space-2) var(--mj-space-3);\n }\n}\n@media (max-width: 480px) {\n .fork-marker {\n padding: var(--mj-space-2);\n }\n\n /* The editor note wraps under the buttons */\n .edit-note {\n flex-basis: 100%;\n margin-left: 0;\n }\n}\n\n/* Handoff source message: recede text to secondary once transferred */\n.message-item.handoff-source-transferred .message-text {\n color: var(--mj-text-secondary);\n}\n\n/* Handed-off target message: vertical gradient rail in the target agent's accent */\n.message-item.target-block {\n position: relative;\n padding-left: var(--mj-space-6);\n}\n.message-item.target-block::before {\n content: '';\n position: absolute;\n left: 16px;\n top: 8px;\n bottom: 8px;\n width: 2px;\n border-radius: 2px;\n background: linear-gradient(\n 180deg,\n var(--mj-handoff-target, var(--mj-brand-primary)) 0%,\n color-mix(in srgb, var(--mj-handoff-target, var(--mj-brand-primary)) 22%, transparent) 100%\n );\n}\n\n/* \"via <source agent>\" provenance pill in the target message header */\n.message-header .via {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n font-size: 11.5px;\n font-weight: 500;\n color: var(--mj-text-muted);\n padding: 2px 7px;\n border-radius: var(--mj-radius-full);\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n}\n.message-header .via .mini {\n width: 14px;\n height: 14px;\n border-radius: var(--mj-radius-full);\n background: var(--mj-handoff-source, var(--mj-brand-primary));\n color: var(--mj-text-inverse);\n font-size: 8.5px;\n font-weight: 700;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n flex-shrink: 0;\n}\n.message-header .via .mini img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n/* Preset pill in the target message header */\n.message-header .pill {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 8px;\n border-radius: var(--mj-radius-full);\n font-size: 11px;\n font-weight: 600;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n}\n.message-header .pill--target {\n background: color-mix(in srgb, var(--mj-handoff-target, var(--mj-brand-primary)) 12%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-handoff-target, var(--mj-brand-primary)) 28%, var(--mj-border-default));\n color: var(--mj-handoff-target, var(--mj-brand-primary));\n}\n\n/* \"Joining the conversation...\" pre-stream target state */\n.message-body .joining {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n.message-body .joining-skeletons {\n display: flex;\n flex-direction: column;\n gap: 6px;\n margin-top: 8px;\n}\n.message-body .skeleton {\n height: 10px;\n border-radius: 5px;\n background: linear-gradient(\n 90deg,\n var(--mj-bg-surface-sunken) 0%,\n var(--mj-border-subtle) 50%,\n var(--mj-bg-surface-sunken) 100%\n );\n background-size: 200% 100%;\n animation: shimmer 1.6s linear infinite;\n}\n.message-body .skeleton--wide {\n width: 72%;\n}\n.message-body .skeleton--narrow {\n width: 48%;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .message-body .skeleton {\n animation: none;\n }\n}\n\n/* ==================== Inline Workflow Execution Card ==================== */\n.workflow-execution-card {\n margin-top: 14px;\n margin-bottom: 10px;\n border-radius: 12px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-sm);\n overflow: hidden;\n transition: border-color 0.2s ease, box-shadow 0.2s ease;\n}\n\n.workflow-execution-card.workflow-status-running {\n border-color: color-mix(in srgb, var(--mj-brand-primary) 45%, var(--mj-border-default));\n box-shadow: 0 2px 12px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.workflow-execution-card.workflow-status-complete {\n border-color: color-mix(in srgb, var(--mj-status-success) 35%, var(--mj-border-default));\n}\n\n.workflow-execution-card.workflow-status-failed {\n border-color: color-mix(in srgb, var(--mj-status-error) 45%, var(--mj-border-default));\n}\n\n.workflow-card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 12px 16px;\n background: color-mix(in srgb, var(--mj-bg-surface-sunken) 55%, var(--mj-bg-surface-card));\n}\n\n.workflow-card-header.is-collapsible {\n cursor: pointer;\n transition: background-color 0.15s ease;\n}\n\n.workflow-card-header.is-collapsible:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.workflow-header-left {\n display: flex;\n align-items: center;\n gap: 12px;\n min-width: 0;\n}\n\n.workflow-status-icon {\n width: 32px;\n height: 32px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 15px;\n flex-shrink: 0;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.workflow-status-complete .workflow-status-icon {\n background: color-mix(in srgb, var(--mj-status-success) 14%, transparent);\n color: var(--mj-status-success);\n}\n\n.workflow-status-failed .workflow-status-icon {\n background: color-mix(in srgb, var(--mj-status-error) 14%, transparent);\n color: var(--mj-status-error);\n}\n\n.workflow-title-group {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.workflow-title-row {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.workflow-title {\n font-size: 13.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.workflow-badge {\n font-size: 11px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 999px;\n letter-spacing: 0.2px;\n}\n\n.workflow-badge.badge-running {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.workflow-badge.badge-complete {\n background: color-mix(in srgb, var(--mj-status-success) 14%, transparent);\n color: var(--mj-status-success);\n}\n\n.workflow-badge.badge-failed {\n background: color-mix(in srgb, var(--mj-status-error) 14%, transparent);\n color: var(--mj-status-error);\n}\n\n.workflow-subtitle {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 11.5px;\n color: var(--mj-text-muted);\n}\n\n.workflow-dot {\n opacity: 0.6;\n}\n\n.workflow-header-right {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.workflow-duration-pill {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 9px;\n border-radius: 999px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n font-size: 11.5px;\n font-weight: 600;\n font-variant-numeric: tabular-nums;\n color: var(--mj-text-secondary);\n}\n\n.workflow-graph-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 999px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-border-subtle));\n color: var(--mj-brand-primary);\n font-size: 11.5px;\n font-weight: 600;\n cursor: pointer;\n transition: background-color 0.15s ease, border-color 0.15s ease, transform 0.12s ease;\n}\n\n.workflow-graph-btn:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 18%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n transform: translateY(-1px);\n}\n\n.workflow-collapse-btn {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 9px;\n border-radius: 999px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-muted);\n font-size: 11px;\n font-weight: 500;\n cursor: pointer;\n transition: background-color 0.15s ease, color 0.15s ease;\n}\n\n.workflow-collapse-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.workflow-collapse-chevron {\n font-size: 10px;\n transition: transform 0.18s ease;\n}\n\n.workflow-collapse-chevron.rotated {\n transform: rotate(180deg);\n}\n\n.workflow-progress-track {\n height: 3px;\n width: 100%;\n background: var(--mj-border-subtle);\n overflow: hidden;\n}\n\n.workflow-progress-fill {\n height: 100%;\n background: var(--mj-status-success);\n transition: width 0.35s ease;\n}\n\n.workflow-progress-fill.is-running {\n background: linear-gradient(90deg, var(--mj-brand-primary), var(--mj-status-info));\n}\n\n.workflow-status-failed .workflow-progress-fill {\n background: var(--mj-status-error);\n}\n\n.workflow-steps-pipeline {\n display: flex;\n flex-direction: column;\n padding: 10px 14px;\n}\n\n.workflow-step-item {\n display: flex;\n align-items: stretch;\n gap: 12px;\n}\n\n.workflow-step-rail {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 24px;\n flex-shrink: 0;\n}\n\n.workflow-step-node {\n width: 22px;\n height: 22px;\n border-radius: 999px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 10.5px;\n font-weight: 700;\n margin-top: 6px;\n background: var(--mj-bg-surface-sunken);\n border: 1.5px solid var(--mj-border-default);\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n\n.step-status-in-progress .workflow-step-node {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.step-status-complete .workflow-step-node {\n background: color-mix(in srgb, var(--mj-status-success) 16%, var(--mj-bg-surface));\n border-color: var(--mj-status-success);\n color: var(--mj-status-success);\n}\n\n.step-status-failed .workflow-step-node {\n background: color-mix(in srgb, var(--mj-status-error) 16%, var(--mj-bg-surface));\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n}\n\n.step-status-skipped .workflow-step-node {\n background: var(--mj-bg-surface-sunken);\n border-style: dashed;\n border-color: var(--mj-border-strong);\n color: var(--mj-text-muted);\n}\n\n.step-status-skipped .workflow-step-name {\n color: var(--mj-text-muted);\n}\n\n.workflow-skipped-count {\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.workflow-step-connector {\n flex: 1;\n width: 2px;\n min-height: 12px;\n background: var(--mj-border-default);\n margin: 2px 0;\n}\n\n.workflow-step-connector.is-complete {\n background: color-mix(in srgb, var(--mj-status-success) 55%, var(--mj-border-default));\n}\n\n.workflow-step-content {\n flex: 1;\n min-width: 0;\n padding: 6px 10px;\n border-radius: 8px;\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.workflow-step-content:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.workflow-step-main-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.workflow-step-identity {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n flex-wrap: wrap;\n}\n\n.workflow-step-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.workflow-step-agent-chip {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 7px;\n border-radius: 999px;\n font-size: 11px;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 22%, transparent);\n}\n\n.workflow-step-meta {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.workflow-step-duration {\n font-size: 11.5px;\n font-variant-numeric: tabular-nums;\n color: var(--mj-text-muted);\n}\n\n.workflow-step-duration.is-skipped {\n padding: 1px 7px;\n border-radius: 999px;\n font-size: 10.5px;\n font-weight: 600;\n background: var(--mj-bg-surface-sunken);\n border: 1px dashed var(--mj-border-strong);\n color: var(--mj-text-muted);\n}\n\n.workflow-step-run-btn {\n border: none;\n background: transparent;\n color: var(--mj-text-muted);\n padding: 2px 5px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 11px;\n transition: color 0.15s, background 0.15s;\n}\n\n.workflow-step-run-btn:hover {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.workflow-step-chevron {\n font-size: 11px;\n color: var(--mj-text-muted);\n transition: transform 0.2s ease;\n}\n\n.workflow-step-chevron.rotated {\n transform: rotate(180deg);\n}\n\n.workflow-step-details {\n margin-top: 6px;\n padding: 8px 10px;\n border-radius: 6px;\n background: var(--mj-bg-surface-sunken);\n border-left: 2px solid var(--mj-brand-primary);\n font-size: 12px;\n line-height: 1.5;\n color: var(--mj-text-secondary);\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n/* ==================== Workflow Continuation Context Banner ==================== */\n\n.workflow-continuation-banner {\n display: inline-flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n width: 100%;\n max-width: 100%;\n margin-bottom: 10px;\n padding: 6px 12px;\n border-radius: 8px;\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 26%, var(--mj-border-default));\n background: color-mix(in srgb, var(--mj-brand-primary) 7%, var(--mj-bg-surface-sunken));\n color: var(--mj-text-secondary);\n font-size: 12px;\n line-height: 1.35;\n cursor: pointer;\n text-align: left;\n transition: background 0.16s ease, border-color 0.16s ease, transform 0.16s ease;\n}\n\n.workflow-continuation-banner:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 13%, var(--mj-bg-surface-sunken));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 45%, var(--mj-border-default));\n}\n\n.continuation-banner-left {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n overflow: hidden;\n}\n\n.continuation-banner-icon {\n color: var(--mj-brand-primary);\n font-size: 12px;\n flex-shrink: 0;\n}\n\n.continuation-banner-label {\n font-weight: 500;\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n\n.continuation-banner-sep {\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n\n.continuation-banner-name {\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.continuation-banner-jump {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n font-size: 11.5px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n flex-shrink: 0;\n}\n\n.message-item.workflow-origin-highlight {\n outline: 2px solid var(--mj-brand-primary);\n outline-offset: 2px;\n border-radius: 12px;\n transition: outline-color 0.3s ease;\n}\n\n", "/**\n * Custom Agent Icons for MemberJunction\n *\n * This file contains custom icon definitions for agents that need unique branding\n * beyond Font Awesome icons. Icons can be CSS-based (emoji, Unicode, SVG data URIs)\n * or reference external image files.\n *\n * USAGE IN AGENT METADATA:\n * \"IconClass\": \"mj-icon-skip\" (references .mj-icon-skip class below)\n *\n * EXTENSIBILITY FOR 3RD PARTY DEVELOPERS:\n * Third-party developers have TWO options:\n *\n * 1. CSS CLASS APPROACH (Recommended for developers):\n * - Add your own global CSS with custom icon classes\n * - Reference your class in agent metadata: \"IconClass\": \"your-custom-class\"\n * - Works with any CSS available to the application\n * - Example: If you have a global stylesheet with .acme-icon-analyzer { ... }\n * then use \"IconClass\": \"acme-icon-analyzer\"\n *\n * 2. LOGO URL APPROACH (Recommended for end users):\n * - Use the LogoURL field in agent metadata\n * - Provide a URL or data URI: \"LogoURL\": \"https://example.com/logo.png\"\n * - Supports: HTTP URLs, data URIs (data:image/png;base64,...)\n * - LogoURL takes precedence over IconClass in the UI\n * - Perfect for non-technical users or external/uploaded images\n *\n * BEST PRACTICES:\n * - Use mj-icon-* prefix for MJ core icons\n * - Use your own prefix for 3rd party icons (e.g., acme-icon-*)\n * - Keep icons simple and recognizable at 16-36px sizes\n * - Test in both light and dark themes\n * - Prefer CSS classes over LogoURL for version-controlled icons\n */\n\n/* ============================================\n BASE STYLES FOR CUSTOM ICONS\n ============================================ */\n\n/* Base styling for all custom MJ icons */\n[class^=\"mj-icon-\"],\n[class*=\" mj-icon-\"] {\n font-style: normal;\n font-variant: normal;\n text-rendering: auto;\n -webkit-font-smoothing: antialiased;\n display: inline-block;\n font-size: inherit;\n line-height: 1;\n}\n\n/* ============================================\n MJ CORE ICONS\n ============================================ */\n\n/**\n * Skip Brain Icon - Analytics/Intelligence Agent\n * Official Skip logo from Skip SaaS branding\n */\n.mj-icon-skip {\n width: 1.4em;\n height: 1.4em;\n display: inline-block;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n /* Official Skip logo SVG */\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 101.89918457031249 96.83947368421053'%3E%3Cg transform='translate(-0.1288232421875,-0.0)'%3E%3Cpath d='M93.85,41.56c-.84,0-1.62.2-2.37.55-3-4.35-7.49-8.12-13.04-11.04l.04-7.18v-14.44h-10.24v17.6c-1.52-.43-3.07-.8-4.67-1.11V0h-10.24v24.72s-.09,0-.14,0h-4.38s-.1,0-.14,0V7.3h-10.24v18.62c-1.6.32-3.15.69-4.67,1.11v-11.67h-10.24v6.09l.04,9.6c-5.55,2.92-10.04,6.7-13.04,11.04-.75-.35-1.53-.55-2.37-.55-4.5,0-8.14,5.61-8.14,12.51s3.64,12.53,8.14,12.53c.58,0,1.14-.12,1.67-.29,4.1,6.62,11.54,12.06,20.98,15.28l.79.13v7.05c0,2.97,1.45,5.58,3.87,6.99,1.18.69,2.5,1.04,3.85,1.03,1.4,0,2.83-.37,4.15-1.12l7.54-4.29,7.56,4.3c1.31.74,2.73,1.12,4.13,1.12s2.67-.35,3.85-1.04c2.42-1.41,3.86-4.02,3.86-6.98v-7.05l.79-.13c9.44-3.22,16.89-8.66,20.98-15.28.54.17,1.09.29,1.68.29,4.5,0,8.14-5.61,8.14-12.53s-3.63-12.51-8.14-12.51' fill='%23AAAAAA'/%3E%3Cpath d='M86.69,50.87c0-12.22-13.6-19.1-28.94-20.66-4.48-.47-9.19-.54-13.52,0-15.34,1.53-28.93,8.41-28.93,20.66,0,8.55,5.7,15.55,12.68,15.55h7.94c3.05,2.5,6.93,4.1,11.08,4.71,2.65.4,5.44.46,8.01,0,4.15-.6,8.05-2.2,11.1-4.71h7.92c6.97,0,12.68-7,12.68-15.55' fill='white' opacity='0.9'/%3E%3Cpath d='M57.83,55.82c-1.19,2.58-3.8,4.35-6.84,4.35s-5.65-1.77-6.84-4.35h13.68Z' fill='%23AAAAAA'/%3E%3Cpath d='M32.52,41.14c1.74,0,3.18,2.13,3.18,4.76s-1.44,4.74-3.18,4.74-3.16-2.13-3.16-4.74,1.41-4.76,3.16-4.76' fill='%23AAAAAA'/%3E%3Cpath d='M69.46,41.14c1.74,0,3.16,2.13,3.16,4.76s-1.41,4.74-3.16,4.74-3.18-2.13-3.18-4.74,1.41-4.76,3.18-4.76' fill='%23AAAAAA'/%3E%3Cpath d='M63.91,76.15c-.82-.48-1.84-.43-2.8.12l-10.13,5.75-10.11-5.75c-.96-.55-1.98-.59-2.8-.12-.82.47-1.29,1.38-1.29,2.49v10.12c0,1.11.47,2.02,1.28,2.49.38.22.8.33,1.24.33.51,0,1.05-.15,1.57-.44l10.12-5.75,10.11,5.75c.52.29,1.05.44,1.56.44.44,0,.86-.11,1.24-.33.81-.48,1.28-1.38,1.28-2.49v-10.12c0-1.11-.47-2.02-1.28-2.49' fill='white' opacity='0.9'/%3E%3C/g%3E%3C/svg%3E\");\n vertical-align: middle;\n}\n\n/**\n * Alternative Skip Icon - Lightning Bolt\n * Simple emoji-based icon for quick setup\n */\n.mj-icon-skip-lightning::before {\n content: \"\u26A1\";\n color: var(--mj-brand-primary);\n font-size: 1.1em;\n}\n\n/**\n * Skip Icon - Brain Emoji\n * Fallback emoji option\n */\n.mj-icon-skip-brain::before {\n content: \"\uD83E\uDDE0\";\n font-size: 1.2em;\n}\n\n/**\n * Betty Icon - AI Assistant\n * Official Betty logo (face icon only)\n */\n.mj-icon-betty {\n width: 1.4em;\n height: 1.4em;\n display: inline-block;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n /* Official Betty face icon SVG */\n background-image: url(\"data:image/svg+xml,%3Csvg id='a' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 150'%3E%3Cpath d='M64.96,60.23h75.12c10.58,0,20.24,4.31,27.2,11.32,7.01,6.95,11.32,16.61,11.32,27.19s-4.31,20.24-11.32,27.19c-6.95,7.02-16.61,11.32-27.2,11.32h-75.12c-10.58,0-20.24-4.31-27.19-11.32-2.65-2.64-4.92-5.6-6.71-8.92-.24,0-.49.06-.74.06-2.46,0-4.67-1.05-6.34-2.65-1.6-1.66-2.58-3.87-2.58-6.34v-18.7c0-2.46.98-4.74,2.58-6.34,1.66-1.66,3.87-2.65,6.34-2.65.25,0,.49,0,.74.06,1.79-3.32,4.06-6.34,6.71-8.92,6.95-7.01,16.61-11.32,27.19-11.32' fill='%233d1252'/%3E%3Cpath d='M132.33,68.36h0c0,1.72-.74,3.32-1.91,4.49-1.11,1.17-2.71,1.84-4.49,1.84h-13.29c-1.78,0-3.32-.68-4.49-1.84-1.17-1.17-1.91-2.77-1.91-4.49h-12.92c-8.37,0-15.94,3.44-21.47,8.92-5.47,5.54-8.92,13.1-8.92,21.47v1.17l.06.37v.37l.06.43v.37l.06.37v.37l.06.37.06.43.06.37.06.37.06.37.06.37c0,.12.06.25.06.37l.06.37.12.37.06.37.12.37.06.37.12.37.12.31.06.37.12.37.12.37.12.31.12.37.12.37.19.31.12.37.12.37.12.31.18.37.12.31.19.31.18.37.12.31.18.31.19.37.18.31.18.31.19.31.18.31c.12.24.25.43.37.68l.19.25.24.31.19.31c.43.62.86,1.23,1.35,1.79l.18.24c.49.62.99,1.17,1.48,1.66.19.19.31.37.49.56.19.12.37.31.56.49.49.49,1.04.98,1.6,1.47l.31.19c.56.49,1.17.92,1.79,1.35.18.12.37.25.55.37l.31.25.31.18.31.19.37.18.31.18.31.19.31.18.31.19.37.12.31.19.31.18c.12.06.24.12.37.12l.31.19.37.12.31.19.37.12.31.12.37.19.37.12.31.12.37.12.37.12.37.06c.24.12.43.18.68.25l.37.12.37.06.37.12c.12,0,.25.06.37.06l.37.06.37.12.37.06.37.06.37.06.37.06.37.06.37.06.43.06h.37l.37.06h.37l.37.06h.8l.37.06h47.56c8.37,0,15.94-3.44,21.47-8.92,5.48-5.54,8.92-13.1,8.92-21.47s-3.44-15.94-8.92-21.47c-5.54-5.48-13.1-8.92-21.47-8.92h-7.75Z' fill='%23fff'/%3E%3Cpolygon points='54.93 12.74 85.57 55.25 106.12 55.25 106.12 34.89 106.12 34.7 105.75 34.7 54.93 12.74' fill='%233aba91'/%3E%3Cpolygon points='111.1 55.25 124.76 55.25 145 27.07 111.35 41.59 111.1 41.59 111.1 41.72 111.1 55.25' fill='%233aba91'/%3E%3Cpath d='M94.55,82.81c3.75,0,6.83,3.81,7.57,8.92.06.74-.31,1.35-.98,1.66-.61.31-1.35.18-1.84-.37-1.29-1.48-2.96-2.34-4.74-2.34s-3.38.86-4.67,2.34c-.49.55-1.23.68-1.91.37-.68-.31-1.05-.92-.92-1.66.68-5.11,3.81-8.92,7.51-8.92' fill='%233d1252'/%3E%3Cpath d='M132.08,115.24c-.31,1.05-.86,2.03-1.66,2.77-1.11,1.17-2.71,1.84-4.49,1.84h-13.29c-1.79,0-3.32-.68-4.49-1.84-.8-.74-1.36-1.72-1.66-2.77-.19-.68.06-1.41.68-1.84.56-.43,1.35-.49,1.97-.06.98.68,2.21,1.05,3.51,1.05h13.29c1.29,0,2.52-.37,3.51-1.05.61-.43,1.41-.37,1.97.06.62.43.86,1.17.68,1.84' fill='%233d1252'/%3E%3Cpath d='M144.02,82.81c3.69,0,6.83,3.81,7.51,8.92.12.74-.24,1.35-.92,1.66-.68.31-1.41.18-1.91-.37-1.29-1.48-2.89-2.34-4.67-2.34s-3.44.86-4.74,2.34c-.49.55-1.23.68-1.84.37-.68-.31-1.05-.92-.98-1.66.74-5.11,3.81-8.92,7.57-8.92' fill='%233d1252'/%3E%3C/svg%3E\");\n vertical-align: middle;\n}\n\n/**\n * Izzy Icon - AI Assistant\n * Official Izzy logo (mark only)\n */\n.mj-icon-izzy {\n width: 1.4em;\n height: 1.4em;\n display: inline-block;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n /* Official Izzy mark icon SVG */\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 204 180'%3E%3Cpath d='M0 0 C3.61144774 3.08477828 4.84942137 4.90830493 5.5 9.625 C5 13 5 13 3.5 14.9375 C1.74432121 17.35155834 1.83578869 18.21944114 1.90625 21.12890625 C1.9371875 22.40636719 1.968125 23.68382813 2 25 C3.18335937 24.72285156 4.36671875 24.44570313 5.5859375 24.16015625 C22.44010416 20.26839867 22.44010416 20.26839867 30 20 C31.80210938 19.92265625 31.80210938 19.92265625 33.640625 19.84375 C47.49356199 19.44904163 61.73614427 20.86627802 75 25 C75.53596907 19.64244551 75.53596907 19.64244551 73.5 15 C71.5549761 12.4066348 71.45048389 10.16629658 71.59375 6.97265625 C72.33633815 3.36681955 74.01253991 1.99164006 77 0 C79.80907914 -0.63997166 82.18961327 -0.63020793 85 0 C87.8100346 1.79363911 89.50940468 3.01880935 91 6 C90.984375 8.05859375 90.984375 8.05859375 90.75 10.4375 C90.68296875 11.21996094 90.6159375 12.00242187 90.546875 12.80859375 C90 15 90 15 88.49609375 16.3984375 C86.25734576 18.79500846 86.4852344 20.97464008 86.3125 24.1875 C86.21388672 25.81751953 86.21388672 25.81751953 86.11328125 27.48046875 C86.07589844 28.31191406 86.03851563 29.14335937 86 30 C86.67675781 30.0825 87.35351562 30.165 88.05078125 30.25 C91.82333306 31.20937741 94.89353787 32.99425194 98.1875 35 C99.18052124 35.60448975 99.18052124 35.60448975 100.19360352 36.22119141 C111.98050012 43.58460075 121.17745776 53.2687532 127 66 C127 66.66 127 67.32 127 68 C127.721875 68.0825 128.44375 68.165 129.1875 68.25 C133.81406141 69.48374971 136.2179022 71.66516963 138.625 75.7734375 C140.97801199 81.55147269 140.43210927 87.87027126 140.375 94 C140.38660156 95.24523437 140.39820313 96.49046875 140.41015625 97.7734375 C140.3675701 111.08870765 140.3675701 111.08870765 135.5 116.7421875 C131.62323281 119.66995439 128.8523137 121.14337998 124 121.125 C122.9790625 121.12886719 122.9790625 121.12886719 121.9375 121.1328125 C120 121 120 121 117 120 C116.74347656 120.65226562 116.48695313 121.30453125 116.22265625 121.9765625 C115.83980469 122.85054688 115.45695313 123.72453125 115.0625 124.625 C114.70285156 125.48351562 114.34320313 126.34203125 113.97265625 127.2265625 C108.57908063 134.80960941 99.56813916 137.59212379 91.0625 140.375 C90.02287109 140.72949219 88.98324219 141.08398438 87.91210938 141.44921875 C80.34347852 144 80.34347852 144 78 144 C78.02094727 144.65484375 78.04189453 145.3096875 78.06347656 145.984375 C78.14730383 148.98942328 78.19886895 151.99422464 78.25 155 C78.28351563 156.02996094 78.31703125 157.05992187 78.3515625 158.12109375 C78.43361416 164.56214867 77.93369275 169.71304442 74 175 C68.75523423 179.17440541 64.68195675 180.53237245 58 180 C55.12653443 178.963898 52.49379495 177.58020045 49.8125 176.125 C49.11447266 175.76019531 48.41644531 175.39539063 47.69726562 175.01953125 C46.39868999 174.33997216 45.10309803 173.65465367 43.81176758 172.96142578 C43.21388428 172.64415527 42.61600098 172.32688477 42 172 C41.34290039 171.59402588 40.68580078 171.18805176 40.00878906 170.76977539 C38.03672401 169.77639533 38.03672401 169.77639533 36.12475586 170.58325195 C35.49448486 170.96441162 34.86421387 171.34557129 34.21484375 171.73828125 C33.17166992 172.35026367 33.17166992 172.35026367 32.10742188 172.97460938 C31.39134766 173.41611328 30.67527344 173.85761719 29.9375 174.3125 C28.51029236 175.1647359 27.08194984 176.01507485 25.65234375 176.86328125 C25.02320068 177.24782471 24.39405762 177.63236816 23.74584961 178.02856445 C19.79572932 180.2265128 16.44037501 180.296025 12 180 C6.82155197 178.33236419 3.95074467 176.59004726 1 172 C-0.72417326 168.34258111 -1.2403609 165.51230089 -1.1953125 161.48046875 C-1.18886719 160.45888672 -1.18242188 159.43730469 -1.17578125 158.38476562 C-1.15902344 157.32966797 -1.14226563 156.27457031 -1.125 155.1875 C-1.11597656 154.11306641 -1.10695312 153.03863281 -1.09765625 151.93164062 C-1.07415306 149.28753146 -1.04129575 146.64388128 -1 144 C-1.63196289 143.81171631 -2.26392578 143.62343262 -2.91503906 143.42944336 C-8.20708475 141.84808949 -13.49207901 140.2541307 -18.75 138.5625 C-19.98234375 138.17191406 -21.2146875 137.78132812 -22.484375 137.37890625 C-29.06200008 134.79901552 -34.12925122 130.90130551 -38 125 C-38.875 121.5625 -38.875 121.5625 -39 119 C-39.495 119.33 -39.99 119.66 -40.5 120 C-45.24354984 121.89741993 -49.49426304 121.53143657 -54.1875 119.875 C-58.42051121 117.05299253 -61.35909664 113.92271008 -63 109 C-63.22709306 104.92471184 -63.22828659 100.8492307 -63.24023438 96.76806641 C-63.2498982 94.77103695 -63.28108516 92.77414948 -63.3125 90.77734375 C-63.36188158 78.59243786 -63.36188158 78.59243786 -60 73 C-57.7509823 70.86631654 -55.88785241 69.35340008 -53.0078125 68.20703125 C-50.3010212 66.57979679 -49.65488803 64.83796148 -48.3125 62 C-45.06106922 55.7428385 -40.95735135 50.97447519 -36 46 C-35.40832031 45.38511719 -34.81664063 44.77023438 -34.20703125 44.13671875 C-28.97373562 39.11136864 -17.47215548 30 -10 30 C-10.08733973 27.91589342 -10.19552278 25.83265331 -10.3125 23.75 C-10.37050781 22.58984375 -10.42851563 21.4296875 -10.48828125 20.234375 C-11.02905532 16.81635262 -11.84853545 15.59874271 -14 13 C-14.54046356 8.75350057 -14.48376179 6.74176808 -12.125 3.125 C-8.57275398 -0.42724602 -4.8825369 -0.970906 0 0 Z M5 35 C4.30245605 35.21962402 3.60491211 35.43924805 2.88623047 35.66552734 C-14.1501062 41.15773444 -29.02751477 50.81254544 -39 66 C-39.33 66.99 -39.66 67.98 -40 69 C-37.525 70.98 -37.525 70.98 -35 73 C-34.52691406 72.29875 -34.05382812 71.5975 -33.56640625 70.875 C-21.08320269 52.96537462 -2.17172019 42.38052109 19.26171875 38.5078125 C46.97805996 34.9959591 75.10426623 38.71529466 97.73046875 56.09765625 C103.53827054 61.07953766 107.9264808 66.53902088 112 73 C113.32 72.01 114.64 71.02 116 70 C115.01713954 61.60788376 107.55262518 55.04847712 101.375 49.8125 C82.80696113 35.82916208 61.35998978 30.59265576 38.375 30.625 C37.71836365 30.62554382 37.06172729 30.62608765 36.38519287 30.62664795 C25.42439402 30.66823796 15.42390121 31.62072499 5 35 Z' fill='%234E3B78' transform='translate(63,0)'/%3E%3Cpath d='M0 0 C5.27957047 5.78547525 9.31612861 13.25448014 10 21.125 C9.69743213 24.83293961 8.77676366 26.8914086 6.1875 29.5625 C-2.04152489 35.76003038 -13.60917874 39.6270706 -23.875 38.8125 C-24.535 38.1525 -25.195 37.4925 -25.875 36.8125 C-28.97847254 36.48234335 -31.03281176 36.30718706 -33.75 37.9375 C-35.40354531 40.69340884 -35.26865568 42.66325452 -34.875 45.8125 C-33.95833333 47.89583333 -33.95833333 47.89583333 -31.875 48.8125 C-28.29166667 48.89583333 -28.29166667 48.89583333 -24.875 47.8125 C-24.57086182 47.16466553 -24.26672363 46.51683105 -23.95336914 45.84936523 C-22.875 43.8125 -22.875 43.8125 -20.77124023 42.88696289 C-19.91731689 42.6883667 -19.06339355 42.48977051 -18.18359375 42.28515625 C-17.23806641 42.04990234 -16.29253906 41.81464844 -15.31835938 41.57226562 C-14.32642578 41.34216797 -13.33449219 41.11207031 -12.3125 40.875 C-4.77934417 39.10870895 1.54823541 36.95205932 8.125 32.8125 C7.81647145 40.06292099 4.56245219 45.32546918 -0.5 50.4609375 C-5.29811284 54.61130511 -8.83216751 54.86916719 -15 55 C-21.13677833 55.26569953 -25.04589225 56.51893716 -29.890625 60.31640625 C-39.17633501 67.31724667 -52.82450605 66.52799961 -63.875 65.8125 C-71.37432145 64.60538489 -79.4496824 61.2378176 -84.875 55.8125 C-86.81199027 55.70419517 -88.75076074 55.60687514 -90.69067383 55.58691406 C-97.68300211 55.51299157 -103.12007731 55.4392364 -108.44140625 50.40234375 C-108.91449219 49.87769531 -109.38757813 49.35304688 -109.875 48.8125 C-110.6175 48.090625 -111.36 47.36875 -112.125 46.625 C-118.35765562 36.60823203 -119.69570866 25.34707186 -117.25 13.8828125 C-113.47065738 3.0509466 -104.76645407 -4.0120534 -94.875 -9.1875 C-91.26850975 -10.75400624 -87.62602625 -12.0153043 -83.875 -13.1875 C-83.029375 -13.47496094 -82.18375 -13.76242188 -81.3125 -14.05859375 C-56.0861494 -22.29657387 -20.04377266 -18.06142152 0 0 Z' fill='%23FDFDFD' transform='translate(155.875,64.1875)'/%3E%3Cpath d='M0 0 C5.24479788 1.58079188 9.51172656 4.60408712 14.06640625 7.58984375 C18.37837094 10.28462973 18.37837094 10.28462973 23.30859375 11.1328125 C28.49696048 9.20971132 33.08639658 6.29555589 37.79882812 3.42578125 C43.66838131 -0.00837477 43.66838131 -0.00837477 47.27734375 0.078125 C49.34375 1.0078125 49.34375 1.0078125 51.34375 3.0078125 C51.82984303 7.30136192 51.71414913 11.62739332 51.71875 15.9453125 C51.74324219 17.15123047 51.76773438 18.35714844 51.79296875 19.59960938 C51.79876953 21.33114258 51.79876953 21.33114258 51.8046875 23.09765625 C51.81290527 24.15847412 51.82112305 25.21929199 51.82958984 26.31225586 C51.34375 29.0078125 51.34375 29.0078125 49.48461914 30.87670898 C46.29658529 32.56106989 44.78123809 32.062357 41.34375 31.0078125 C37.60135447 29.03986817 34.07891261 26.72386924 30.53320312 24.42578125 C26.44214688 21.80182316 26.44214688 21.80182316 21.77734375 20.921875 C17.60401055 22.78413283 13.85973006 25.2663764 10.046875 27.76953125 C5.85335687 30.41401513 2.44659272 31.9581498 -2.65625 32.0078125 C-4.33203125 30.87695312 -4.33203125 30.87695312 -5.65625 29.0078125 C-6.04443359 26.328125 -6.04443359 26.328125 -6.0546875 23.1328125 C-6.05855469 21.98296875 -6.06242187 20.833125 -6.06640625 19.6484375 C-6.05480469 18.44703125 -6.04320313 17.245625 -6.03125 16.0078125 C-6.04285156 14.80640625 -6.05445312 13.605 -6.06640625 12.3671875 C-6.06253906 11.21734375 -6.05867188 10.0675 -6.0546875 8.8828125 C-6.05130371 7.82835937 -6.04791992 6.77390625 -6.04443359 5.6875 C-5.65625 3.0078125 -5.65625 3.0078125 -4.29736328 1.14111328 C-2.65625 0.0078125 -2.65625 0.0078125 0 0 Z' fill='%23FCFCFD' transform='translate(78.65625,136.9921875)'/%3E%3Cpath d='M0 0 C2.5 0.625 2.5 0.625 4.8125 2.625 C6.96830116 6.4575354 7.24792603 9.32007692 6.5 13.625 C5.34367254 15.98793002 4.35016245 17.77483755 2.5 19.625 C0.1875 20 0.1875 20 -2.5 19.625 C-5.06638215 17.47478793 -6.29103188 15.79226637 -6.88671875 12.46484375 C-7.08084032 8.45522921 -6.77549931 6.12498023 -4.8125 2.5625 C-2.5 0.625 -2.5 0.625 0 0 Z' fill='%2353417C' transform='translate(138.5,67.375)'/%3E%3Cpath d='M0 0 C2.5 0.6875 2.5 0.6875 4.8125 2.625 C7.08407605 6.74748987 7.32547179 10.07653131 6.5 14.6875 C4.8125 17.75 4.8125 17.75 2.5 19.6875 C-0.0625 20.25 -0.0625 20.25 -2.5 19.6875 C-5.30401904 17.38419865 -5.84979387 14.76309142 -6.4375 11.3125 C-6.72853275 7.71913649 -6.44645777 6.57011897 -4.875 3.125 C-2.5 0.6875 -2.5 0.6875 0 0 Z' fill='%23523F7B' transform='translate(64.5,67.3125)'/%3E%3Cpath d='M0 0 C8.91 0 17.82 0 27 0 C24.81183076 5.47042311 24.169236 6.55141452 19 9 C14.08609728 9.94526984 9.88605617 10.13992406 5.51171875 7.49609375 C3.4733513 5.76185217 1.65854906 4.10051199 0 2 C0 1.34 0 0.68 0 0 Z' fill='%23574680' transform='translate(88,95)'/%3E%3C/svg%3E\");\n vertical-align: middle;\n}\n\n/* ============================================\n EXAMPLE CUSTOM ICONS FOR OTHER AGENTS\n ============================================ */\n\n/**\n * Data Analysis Icon - Chart emoji\n */\n.mj-icon-data-analyst::before {\n content: \"\uD83D\uDCCA\";\n font-size: 1.1em;\n}\n\n/**\n * API/Integration Icon - Plug emoji\n */\n.mj-icon-api::before {\n content: \"\uD83D\uDD0C\";\n font-size: 1.1em;\n}\n\n/**\n * Processing/Workflow Icon - Gear emoji with animation\n */\n.mj-icon-processing::before {\n content: \"\u2699\uFE0F\";\n display: inline-block;\n animation: rotate-icon 2s linear infinite;\n}\n\n@keyframes rotate-icon {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n/**\n * Text/Letter-based Icon\n * Simple monogram icon\n */\n.mj-icon-monogram-s::before {\n content: \"S\";\n font-weight: 800;\n font-family: system-ui, -apple-system, sans-serif;\n font-size: 1.1em;\n color: var(--mj-brand-primary);\n}\n\n/* ============================================\n TEMPLATE FOR NEW ICONS\n ============================================ */\n\n/*\n// EMOJI-BASED ICON (Simplest)\n.mj-icon-my-agent::before {\n content: \"\uD83C\uDFAF\"; // Use any emoji\n font-size: 1.2em;\n}\n\n// UNICODE SYMBOL ICON\n.mj-icon-my-agent::before {\n content: \"\\2022\"; // Unicode character\n font-size: 1.2em;\n color: #667eea;\n}\n\n// TEXT/LETTER ICON\n.mj-icon-my-agent::before {\n content: \"MA\"; // Initials/text\n font-weight: 800;\n font-size: 0.9em;\n color: #667eea;\n}\n\n// SVG DATA URI ICON (Most Control)\n.mj-icon-my-agent {\n width: 1em;\n height: 1em;\n display: inline-block;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n background-image: url('data:image/svg+xml;utf8,<svg>...</svg>');\n vertical-align: middle;\n}\n\n// EXTERNAL IMAGE FILE (For existing assets)\n.mj-icon-my-agent {\n width: 1em;\n height: 1em;\n display: inline-block;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n background-image: url('/assets/icons/my-agent.svg');\n vertical-align: middle;\n}\n\n// GRADIENT TEXT ICON\n.mj-icon-my-agent::before {\n content: \"\u26A1\";\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n}\n*/\n\n/* ============================================\n 3RD PARTY EXAMPLES\n These would typically be in EXTERNAL CSS files\n ============================================ */\n\n/*\n// Example: Acme Corp custom agent icons\n// This would be in acme-corp-styles.css loaded by the application\n\n.acme-icon-analyzer {\n width: 1em;\n height: 1em;\n display: inline-block;\n background-size: contain;\n background-image: url('https://acme.com/icons/analyzer.svg');\n}\n\n.acme-icon-reporter::before {\n content: \"A\";\n font-weight: 800;\n color: #FF6B35;\n}\n*/\n"] }]
|
|
4471
4625
|
}], () => [{ type: i0.ChangeDetectorRef }, { type: i1.MentionParserService }, { type: i2.UICommandHandlerService }, { type: i3.ConversationAgentService }, { type: i4.MarkdownService }], { message: [{
|
|
4472
4626
|
type: Input
|
|
4473
4627
|
}], Conversation: [{
|
|
@@ -4504,6 +4658,10 @@ export class MessageItemComponent extends BaseAngularComponent {
|
|
|
4504
4658
|
type: Input
|
|
4505
4659
|
}], EditingChanged: [{
|
|
4506
4660
|
type: Output
|
|
4661
|
+
}], Handoff: [{
|
|
4662
|
+
type: Input
|
|
4663
|
+
}], HandedOffFrom: [{
|
|
4664
|
+
type: Input
|
|
4507
4665
|
}], IsProcessing: [{
|
|
4508
4666
|
type: Input
|
|
4509
4667
|
}], IsStreaming: [{
|
|
@@ -4663,5 +4821,5 @@ export class MessageItemComponent extends BaseAngularComponent {
|
|
|
4663
4821
|
}], scrollToMessageRequested: [{
|
|
4664
4822
|
type: Output
|
|
4665
4823
|
}] }); })();
|
|
4666
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MessageItemComponent, { className: "MessageItemComponent", filePath: "src/lib/components/message/message-item.component.ts", lineNumber:
|
|
4824
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MessageItemComponent, { className: "MessageItemComponent", filePath: "src/lib/components/message/message-item.component.ts", lineNumber: 146 }); })();
|
|
4667
4825
|
//# sourceMappingURL=message-item.component.js.map
|