@m6d/cortex-angular 0.11.1 → 0.13.0
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/README.md +85 -79
- package/fesm2022/m6d-cortex-angular.mjs +892 -368
- package/package.json +6 -3
- package/theme.css +1 -1
- package/types/m6d-cortex-angular.d.ts +84 -33
|
@@ -24,7 +24,7 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
|
|
|
24
24
|
|
|
25
25
|
// dist/fesm2022/m6d-cortex-angular.mjs
|
|
26
26
|
import * as i0 from "@angular/core";
|
|
27
|
-
import { ChangeDetectionStrategy as ChangeDetectionStrategy2, Component, DestroyRef, Directive, ElementRef, EnvironmentInjector, Injectable, InjectionToken, Injector, NgZone, Pipe, TemplateRef, ViewEncapsulation as ViewEncapsulation2, afterNextRender, afterRenderEffect, computed, contentChildren, createEnvironmentInjector, effect, inject, input, output, runInInjectionContext, signal, untracked, viewChild } from "@angular/core";
|
|
27
|
+
import { ChangeDetectionStrategy as ChangeDetectionStrategy2, Component, DestroyRef, Directive, ElementRef, EnvironmentInjector, Injectable, InjectionToken, Injector, NgZone, Pipe, TemplateRef, ViewEncapsulation as ViewEncapsulation2, afterNextRender, afterRenderEffect, computed, contentChildren, createEnvironmentInjector, effect, inject, input, linkedSignal, output, runInInjectionContext, signal, untracked, viewChild } from "@angular/core";
|
|
28
28
|
import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
|
|
29
29
|
|
|
30
30
|
// src/internal/wire/index.ts
|
|
@@ -36,15 +36,23 @@ var ATTACHMENT_MIME_TYPES = [
|
|
|
36
36
|
"application/pdf"
|
|
37
37
|
];
|
|
38
38
|
var ATTACHMENT_MAX_BYTES = 10 * 1024 * 1024;
|
|
39
|
+
var ATTACHMENT_FILENAME_MAX_LENGTH = 255;
|
|
39
40
|
var MAX_ATTACHMENTS_PER_MESSAGE = 5;
|
|
40
|
-
function checkAttachmentPolicy(
|
|
41
|
-
if (!ATTACHMENT_MIME_TYPES.some((type) => type ===
|
|
41
|
+
function checkAttachmentPolicy(file) {
|
|
42
|
+
if (!ATTACHMENT_MIME_TYPES.some((type) => type === file.type))
|
|
42
43
|
return "type";
|
|
43
|
-
if (
|
|
44
|
+
if (file.size > ATTACHMENT_MAX_BYTES)
|
|
44
45
|
return "size";
|
|
46
|
+
if (file.name.length > ATTACHMENT_FILENAME_MAX_LENGTH)
|
|
47
|
+
return "name";
|
|
45
48
|
return "ok";
|
|
46
49
|
}
|
|
47
50
|
var STATEMENT_TOOLS = ["executeCode", "queryDataset", "describeDataset"];
|
|
51
|
+
var APPROVAL_TITLE_FIELD = "approvalTitle";
|
|
52
|
+
function toolCallMetadataOf(part) {
|
|
53
|
+
const metadata = part.metadata;
|
|
54
|
+
return metadata?.cortex ?? undefined;
|
|
55
|
+
}
|
|
48
56
|
function toUiMessage(message) {
|
|
49
57
|
return { ...message, role: message.role === "trigger" ? "user" : message.role };
|
|
50
58
|
}
|
|
@@ -123,7 +131,11 @@ function createCortexApiClient(getTransport) {
|
|
|
123
131
|
return send("/threads");
|
|
124
132
|
},
|
|
125
133
|
createThread() {
|
|
126
|
-
|
|
134
|
+
const body = getTransport().threadBody;
|
|
135
|
+
return send("/threads", {
|
|
136
|
+
method: "POST",
|
|
137
|
+
...body && { body: JSON.stringify(body) }
|
|
138
|
+
});
|
|
127
139
|
},
|
|
128
140
|
deleteThread(threadId) {
|
|
129
141
|
return send(`/threads/${threadId}`, { method: "DELETE" });
|
|
@@ -131,8 +143,8 @@ function createCortexApiClient(getTransport) {
|
|
|
131
143
|
listMessages(threadId) {
|
|
132
144
|
return send(`/threads/${threadId}/messages`);
|
|
133
145
|
},
|
|
134
|
-
listLlmRequests(messageId) {
|
|
135
|
-
return send(`/messages/${messageId}/llm-requests`);
|
|
146
|
+
listLlmRequests(threadId, messageId) {
|
|
147
|
+
return send(`/threads/${threadId}/messages/${messageId}/llm-requests`);
|
|
136
148
|
},
|
|
137
149
|
abortStream(threadId) {
|
|
138
150
|
return send(`/chat/${threadId}/abort`, { method: "POST" });
|
|
@@ -182,8 +194,14 @@ var ar_default = {
|
|
|
182
194
|
translate_history: "السجل",
|
|
183
195
|
translate_back: "رجوع",
|
|
184
196
|
translate_greeting: "بماذا يمكنني مساعدتك اليوم؟",
|
|
185
|
-
|
|
186
|
-
|
|
197
|
+
translate_conversations: {
|
|
198
|
+
zero: "لا محادثات",
|
|
199
|
+
one: "محادثة واحدة",
|
|
200
|
+
two: "محادثتان",
|
|
201
|
+
few: "{{count}} محادثات",
|
|
202
|
+
many: "{{count}} محادثة",
|
|
203
|
+
other: "{{count}} محادثة"
|
|
204
|
+
},
|
|
187
205
|
translate_no_threads_yet: "لا توجد محادثات بعد",
|
|
188
206
|
translate_start_a_new_conversation: "ابدأ محادثة جديدة",
|
|
189
207
|
translate_untitled: "بدون عنوان",
|
|
@@ -196,44 +214,41 @@ var ar_default = {
|
|
|
196
214
|
translate_drop_files_here: "أفلت ملفاتك هنا...",
|
|
197
215
|
translate_remove_attachment: "إزالة المرفق",
|
|
198
216
|
translate_attachment_rejected: "لا يمكن إرفاق هذا الملف",
|
|
217
|
+
translate_attachment_rejected_type: "يمكن إرفاق ملفات {{types}} فقط",
|
|
218
|
+
translate_attachment_rejected_size: "الحد الأقصى لحجم الملف {{size}} ميغابايت",
|
|
219
|
+
translate_attachment_rejected_name: "اسم الملف طويل جدًا",
|
|
220
|
+
translate_attachment_rejected_count: {
|
|
221
|
+
zero: "لا يمكن إرفاق ملفات بالرسالة",
|
|
222
|
+
one: "يمكن إرفاق ملف واحد كحد أقصى لكل رسالة",
|
|
223
|
+
two: "يمكن إرفاق ملفين كحد أقصى لكل رسالة",
|
|
224
|
+
few: "يمكن إرفاق {{count}} ملفات كحد أقصى لكل رسالة",
|
|
225
|
+
many: "يمكن إرفاق {{count}} ملفًا كحد أقصى لكل رسالة",
|
|
226
|
+
other: "يمكن إرفاق {{count}} ملف كحد أقصى لكل رسالة"
|
|
227
|
+
},
|
|
199
228
|
translate_attachment_caption: "من فضلك اطّلع على الملفات المرفقة.",
|
|
200
229
|
translate_download: "تنزيل",
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
translate_tool_done_9: "تم استرجاع المعلومات بنجاح",
|
|
221
|
-
translate_rows_read: "{{count}} صفوف",
|
|
222
|
-
translate_one_more_step: "وخطوة أخرى",
|
|
223
|
-
translate_n_more_steps: "و{{count}} خطوات أخرى",
|
|
230
|
+
translate_tool_status: "جارٍ تنفيذ خطوة…",
|
|
231
|
+
translate_tool_done: "اكتملت الخطوة",
|
|
232
|
+
translate_tool_cancelled: "أُلغيت الخطوة",
|
|
233
|
+
translate_rows: {
|
|
234
|
+
zero: "لا صفوف",
|
|
235
|
+
one: "صف واحد",
|
|
236
|
+
two: "صفان",
|
|
237
|
+
few: "{{count}} صفوف",
|
|
238
|
+
many: "{{count}} صفًا",
|
|
239
|
+
other: "{{count}} صف"
|
|
240
|
+
},
|
|
241
|
+
translate_more_steps: {
|
|
242
|
+
zero: "ولا خطوات أخرى",
|
|
243
|
+
one: "وخطوة أخرى",
|
|
244
|
+
two: "وخطوتان أخريان",
|
|
245
|
+
few: "و{{count}} خطوات أخرى",
|
|
246
|
+
many: "و{{count}} خطوة أخرى",
|
|
247
|
+
other: "و{{count}} خطوة أخرى"
|
|
248
|
+
},
|
|
224
249
|
translate_tool_error: "حدث خطأ",
|
|
225
250
|
translate_attachment_status: "جارٍ قراءة الملف المرفق…",
|
|
226
251
|
translate_attachment_done: "تمت قراءة الملف المرفق",
|
|
227
|
-
translate_graph_0: "جارٍ استكشاف الروابط...",
|
|
228
|
-
translate_graph_1: "جارٍ رسم الخريطة...",
|
|
229
|
-
translate_graph_2: "جارٍ اكتشاف العلاقات...",
|
|
230
|
-
translate_graph_3: "جارٍ تتبع الروابط...",
|
|
231
|
-
translate_graph_4: "جارٍ التنقل في المعرفة...",
|
|
232
|
-
translate_graph_5: "جارٍ كشف الرؤى...",
|
|
233
|
-
translate_graph_6: "جارٍ ربط النقاط...",
|
|
234
|
-
translate_graph_7: "جارٍ تتبع المسار...",
|
|
235
|
-
translate_graph_8: "جارٍ تجميع الأجزاء...",
|
|
236
|
-
translate_graph_9: "جارٍ بناء الصورة...",
|
|
237
252
|
translate_code_0: "جارٍ حساب الأرقام...",
|
|
238
253
|
translate_code_1: "جارٍ معالجة البيانات...",
|
|
239
254
|
translate_code_2: "جارٍ تنفيذ طلبك...",
|
|
@@ -267,6 +282,7 @@ var ar_default = {
|
|
|
267
282
|
translate_approve: "موافقة",
|
|
268
283
|
translate_deny: "رفض",
|
|
269
284
|
translate_error: "خطأ",
|
|
285
|
+
translate_approval_pending: "وافق على الطلب أعلاه أو ارفضه أولًا.",
|
|
270
286
|
translate_approval_requested: "طلب موافقة",
|
|
271
287
|
translate_approval_response: "رد الموافقة",
|
|
272
288
|
translate_waiting_for_approval: "في انتظار الموافقة لتنفيذ هذه الأداة.",
|
|
@@ -307,6 +323,9 @@ var ar_default = {
|
|
|
307
323
|
translate_trigger_fired: "تم التشغيل بواسطة",
|
|
308
324
|
translate_trigger_payload: "الحمولة",
|
|
309
325
|
translate_messages_disabled: "يعمل هذا الوكيل من مشغّلاته فقط.",
|
|
326
|
+
translate_access_refused: "لم يقبل هذا الوكيل تسجيل دخولك.",
|
|
327
|
+
translate_agent_unreachable: "تعذّر الوصول إلى هذا الوكيل الآن. نعيد المحاولة...",
|
|
328
|
+
translate_agent_missing: "هذا الوكيل غير متاح.",
|
|
310
329
|
translate_streaming: "جارٍ البث",
|
|
311
330
|
translate_done: "تم",
|
|
312
331
|
translate_no_reasoning: "لا يوجد تفكير مسجّل.",
|
|
@@ -329,6 +348,8 @@ var ar_default = {
|
|
|
329
348
|
translate_image_unavailable_alt: "الصورة غير متاحة: {{alt}}",
|
|
330
349
|
translate_image: "صورة",
|
|
331
350
|
translate_send: "إرسال",
|
|
351
|
+
translate_stop: "إيقاف",
|
|
352
|
+
translate_delete_conversation: "حذف المحادثة",
|
|
332
353
|
translate_table: "جدول",
|
|
333
354
|
translate_expand: "توسيع {{name}}",
|
|
334
355
|
translate_table_export: "تصدير إلى Excel",
|
|
@@ -343,8 +364,10 @@ var en_default = {
|
|
|
343
364
|
translate_history: "History",
|
|
344
365
|
translate_back: "Back",
|
|
345
366
|
translate_greeting: "What can I help you with today?",
|
|
346
|
-
|
|
347
|
-
|
|
367
|
+
translate_conversations: {
|
|
368
|
+
one: "1 conversation",
|
|
369
|
+
other: "{{count}} conversations"
|
|
370
|
+
},
|
|
348
371
|
translate_no_threads_yet: "No threads yet",
|
|
349
372
|
translate_start_a_new_conversation: "Start a new conversation",
|
|
350
373
|
translate_untitled: "Untitled",
|
|
@@ -357,44 +380,29 @@ var en_default = {
|
|
|
357
380
|
translate_drop_files_here: "Drop your files here...",
|
|
358
381
|
translate_remove_attachment: "Remove attachment",
|
|
359
382
|
translate_attachment_rejected: "This file cannot be attached",
|
|
383
|
+
translate_attachment_rejected_type: "Only {{types}} files can be attached",
|
|
384
|
+
translate_attachment_rejected_size: "Files can be up to {{size}} MB",
|
|
385
|
+
translate_attachment_rejected_name: "The file name is too long",
|
|
386
|
+
translate_attachment_rejected_count: {
|
|
387
|
+
one: "Up to 1 file per message",
|
|
388
|
+
other: "Up to {{count}} files per message"
|
|
389
|
+
},
|
|
360
390
|
translate_attachment_caption: "Please take a look at the attached files.",
|
|
361
391
|
translate_download: "Download",
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
translate_tool_done_1: "Analysis completed successfully",
|
|
374
|
-
translate_tool_done_2: "Request processed successfully",
|
|
375
|
-
translate_tool_done_3: "Results gathered successfully",
|
|
376
|
-
translate_tool_done_4: "Response prepared successfully",
|
|
377
|
-
translate_tool_done_5: "Lookup completed successfully",
|
|
378
|
-
translate_tool_done_6: "Records checked successfully",
|
|
379
|
-
translate_tool_done_7: "Review completed successfully",
|
|
380
|
-
translate_tool_done_8: "Calculations completed successfully",
|
|
381
|
-
translate_tool_done_9: "Information retrieved successfully",
|
|
382
|
-
translate_rows_read: "{{count}} rows",
|
|
383
|
-
translate_one_more_step: "and 1 more step",
|
|
384
|
-
translate_n_more_steps: "and {{count}} more steps",
|
|
392
|
+
translate_tool_status: "Running a step...",
|
|
393
|
+
translate_tool_done: "Step completed",
|
|
394
|
+
translate_tool_cancelled: "Step cancelled",
|
|
395
|
+
translate_rows: {
|
|
396
|
+
one: "1 row",
|
|
397
|
+
other: "{{count}} rows"
|
|
398
|
+
},
|
|
399
|
+
translate_more_steps: {
|
|
400
|
+
one: "and 1 more step",
|
|
401
|
+
other: "and {{count}} more steps"
|
|
402
|
+
},
|
|
385
403
|
translate_tool_error: "Something went wrong",
|
|
386
404
|
translate_attachment_status: "Reading the attached file...",
|
|
387
405
|
translate_attachment_done: "Finished reading the file",
|
|
388
|
-
translate_graph_0: "Exploring connections...",
|
|
389
|
-
translate_graph_1: "Mapping out the links...",
|
|
390
|
-
translate_graph_2: "Discovering relationships...",
|
|
391
|
-
translate_graph_3: "Tracing the connections...",
|
|
392
|
-
translate_graph_4: "Navigating the knowledge...",
|
|
393
|
-
translate_graph_5: "Uncovering insights...",
|
|
394
|
-
translate_graph_6: "Connecting the dots...",
|
|
395
|
-
translate_graph_7: "Following the trail...",
|
|
396
|
-
translate_graph_8: "Piecing things together...",
|
|
397
|
-
translate_graph_9: "Building the picture...",
|
|
398
406
|
translate_code_0: "Running the numbers...",
|
|
399
407
|
translate_code_1: "Working through the data...",
|
|
400
408
|
translate_code_2: "Processing your request...",
|
|
@@ -428,6 +436,7 @@ var en_default = {
|
|
|
428
436
|
translate_approve: "Approve",
|
|
429
437
|
translate_deny: "Deny",
|
|
430
438
|
translate_error: "Error",
|
|
439
|
+
translate_approval_pending: "Approve or deny the request above first.",
|
|
431
440
|
translate_approval_requested: "Approval requested",
|
|
432
441
|
translate_approval_response: "Approval response",
|
|
433
442
|
translate_waiting_for_approval: "Waiting for approval to execute this tool.",
|
|
@@ -468,6 +477,9 @@ var en_default = {
|
|
|
468
477
|
translate_trigger_fired: "Triggered by",
|
|
469
478
|
translate_trigger_payload: "Payload",
|
|
470
479
|
translate_messages_disabled: "This agent only runs from its triggers.",
|
|
480
|
+
translate_access_refused: "This agent did not accept your sign-in.",
|
|
481
|
+
translate_agent_unreachable: "This agent cannot be reached right now. Trying again...",
|
|
482
|
+
translate_agent_missing: "This agent is not available.",
|
|
471
483
|
translate_streaming: "Streaming",
|
|
472
484
|
translate_done: "Done",
|
|
473
485
|
translate_no_reasoning: "No reasoning provided.",
|
|
@@ -490,6 +502,8 @@ var en_default = {
|
|
|
490
502
|
translate_image_unavailable_alt: "Image unavailable: {{alt}}",
|
|
491
503
|
translate_image: "Image",
|
|
492
504
|
translate_send: "Send",
|
|
505
|
+
translate_stop: "Stop",
|
|
506
|
+
translate_delete_conversation: "Delete conversation",
|
|
493
507
|
translate_table: "Table",
|
|
494
508
|
translate_expand: "Expand {{name}}",
|
|
495
509
|
translate_table_export: "Export to Excel",
|
|
@@ -506,20 +520,18 @@ function resolveLocale(locale) {
|
|
|
506
520
|
return locale && LOCALES.includes(locale) ? locale : LOCALES[0];
|
|
507
521
|
}
|
|
508
522
|
function translate(locale, key, params) {
|
|
509
|
-
const
|
|
523
|
+
const entry = translations[locale][key];
|
|
524
|
+
const value = typeof entry === "string" ? entry : entry[new Intl.PluralRules(locale).select(Number(params?.["count"]))] ?? entry.other;
|
|
510
525
|
if (!params)
|
|
511
526
|
return value;
|
|
512
527
|
return value.replace(/\{\{\s*(\w+)\s*\}\}/g, (match, name) => (name in params) ? String(params[name]) : match);
|
|
513
528
|
}
|
|
514
|
-
function pluralKey(count, one, other) {
|
|
515
|
-
return count === 1 ? one : other;
|
|
516
|
-
}
|
|
517
529
|
|
|
518
530
|
// src/internal/client/src/slots.ts
|
|
519
531
|
function landingFromHandshake(capabilities, locale, send) {
|
|
520
532
|
const takesMessages = capabilities !== undefined && capabilities.messages !== false;
|
|
521
533
|
return {
|
|
522
|
-
greeting: localized(capabilities
|
|
534
|
+
greeting: capabilities === undefined ? "" : localized(capabilities.greeting, locale) || translate(locale, "translate_greeting"),
|
|
523
535
|
suggestions: takesMessages && localized(capabilities.suggestions, locale) || [],
|
|
524
536
|
send: (prompt) => {
|
|
525
537
|
if (takesMessages)
|
|
@@ -560,6 +572,17 @@ function unansweredToolCalls(messages) {
|
|
|
560
572
|
const parts = newestAssistantMessage(messages)?.parts ?? [];
|
|
561
573
|
return parts.filter((part) => part.type === "tool-call" && !isSettledToolState(part.state));
|
|
562
574
|
}
|
|
575
|
+
function awaitsApproval(messages) {
|
|
576
|
+
for (let index = messages.length - 1;index >= 0; index -= 1) {
|
|
577
|
+
const message = messages[index];
|
|
578
|
+
const waiting = message?.parts.some((part) => part.type === "tool-call" && part.state === "approval-requested");
|
|
579
|
+
if (waiting)
|
|
580
|
+
return true;
|
|
581
|
+
if (message?.role === "user")
|
|
582
|
+
return false;
|
|
583
|
+
}
|
|
584
|
+
return false;
|
|
585
|
+
}
|
|
563
586
|
function streamingMessage(messages) {
|
|
564
587
|
const tail = messages.at(-1);
|
|
565
588
|
if (tail?.role !== "assistant")
|
|
@@ -614,8 +637,7 @@ function toolCallOutputText(part) {
|
|
|
614
637
|
return JSON.stringify(output, null, 2);
|
|
615
638
|
}
|
|
616
639
|
var CODE_FIELDS = {
|
|
617
|
-
code: "javascript"
|
|
618
|
-
query: "cypher"
|
|
640
|
+
code: "javascript"
|
|
619
641
|
};
|
|
620
642
|
function splitToolCallInput(input) {
|
|
621
643
|
const record = input && typeof input === "object" ? input : null;
|
|
@@ -645,13 +667,6 @@ var ANIM_STATES = {
|
|
|
645
667
|
complete: "complete",
|
|
646
668
|
error: "error"
|
|
647
669
|
};
|
|
648
|
-
function stableIndex(id) {
|
|
649
|
-
let hash = 0;
|
|
650
|
-
for (let i = 0;i < id.length; i++) {
|
|
651
|
-
hash = hash * 31 + id.charCodeAt(i) | 0;
|
|
652
|
-
}
|
|
653
|
-
return Math.abs(hash) % STATUS_COUNT;
|
|
654
|
-
}
|
|
655
670
|
function toolCallStatement(part) {
|
|
656
671
|
if (!STATEMENT_TOOLS.some((name) => name === part.name))
|
|
657
672
|
return;
|
|
@@ -661,60 +676,68 @@ function toolCallStatement(part) {
|
|
|
661
676
|
const status = input.status;
|
|
662
677
|
return typeof status === "string" && status.trim() ? status.trim() : undefined;
|
|
663
678
|
}
|
|
664
|
-
function
|
|
679
|
+
function reportedEnding(part) {
|
|
665
680
|
let output = part.output;
|
|
666
681
|
if (typeof output === "string") {
|
|
667
682
|
try {
|
|
668
683
|
output = JSON.parse(output);
|
|
669
684
|
} catch {
|
|
670
|
-
return
|
|
685
|
+
return;
|
|
671
686
|
}
|
|
672
687
|
}
|
|
673
|
-
|
|
688
|
+
if (!output || typeof output !== "object")
|
|
689
|
+
return;
|
|
690
|
+
if ("error" in output && output.error === true)
|
|
691
|
+
return "failed";
|
|
692
|
+
if (!toolCallMetadataOf(part)?.embed || !("status" in output))
|
|
693
|
+
return;
|
|
694
|
+
const status = output.status;
|
|
695
|
+
return status === "failed" || status === "cancelled" ? status : undefined;
|
|
674
696
|
}
|
|
675
|
-
function
|
|
697
|
+
function toolCallRows(part) {
|
|
676
698
|
const output = part.output;
|
|
677
699
|
if (!output || typeof output !== "object" || !("rowCount" in output))
|
|
678
700
|
return;
|
|
679
|
-
|
|
701
|
+
const count = output.rowCount;
|
|
702
|
+
return typeof count === "number" ? count : undefined;
|
|
680
703
|
}
|
|
681
|
-
function
|
|
682
|
-
if (declined)
|
|
704
|
+
function toolLineKey(part, state, ending) {
|
|
705
|
+
if (ending === "declined")
|
|
683
706
|
return "translate_declined";
|
|
707
|
+
if (ending === "cancelled")
|
|
708
|
+
return "translate_tool_cancelled";
|
|
684
709
|
if (state === "error")
|
|
685
710
|
return "translate_tool_error";
|
|
686
711
|
if (state === "approval")
|
|
687
712
|
return "translate_needs_approval";
|
|
688
713
|
const family = part.name === "readAttachment" ? "attachment" : "tool";
|
|
689
|
-
|
|
690
|
-
return `translate_${family}_${state === "complete" ? "done" : "status"}${variant}`;
|
|
714
|
+
return `translate_${family}_${state === "complete" ? "done" : "status"}`;
|
|
691
715
|
}
|
|
692
716
|
function toolCallAnimation(part) {
|
|
693
|
-
const
|
|
694
|
-
const
|
|
695
|
-
const state = failed ? "error" : ANIM_STATES[part.state] ?? "processing";
|
|
717
|
+
const ending = part.approval?.approved === false ? "declined" : part.state === "complete" ? reportedEnding(part) : undefined;
|
|
718
|
+
const state = ending ? "error" : ANIM_STATES[part.state] ?? "processing";
|
|
696
719
|
return {
|
|
697
720
|
state,
|
|
698
721
|
active: state === "starting" || state === "processing",
|
|
699
722
|
gated: part.approval !== undefined || part.state === "approval-requested",
|
|
700
|
-
titleKey:
|
|
723
|
+
titleKey: toolLineKey(part, state, ending),
|
|
701
724
|
statement: toolCallStatement(part),
|
|
702
|
-
|
|
725
|
+
rows: state === "complete" ? toolCallRows(part) : undefined
|
|
703
726
|
};
|
|
704
727
|
}
|
|
705
|
-
function
|
|
706
|
-
const
|
|
707
|
-
if (!
|
|
728
|
+
function approvalTitle(part) {
|
|
729
|
+
const input = part.input;
|
|
730
|
+
if (!input || typeof input !== "object" || !(APPROVAL_TITLE_FIELD in input))
|
|
708
731
|
return;
|
|
709
|
-
const
|
|
710
|
-
return
|
|
732
|
+
const title = input[APPROVAL_TITLE_FIELD];
|
|
733
|
+
return typeof title === "string" && title.trim() ? title.trim() : undefined;
|
|
711
734
|
}
|
|
712
735
|
function approvalCard(part, locale) {
|
|
713
736
|
const approved = part.approval?.approved;
|
|
714
737
|
const { state } = toolCallAnimation(part);
|
|
715
738
|
const decision = approved === undefined ? part.state === "approval-requested" ? "pending" : "cancelled" : !approved ? "declined" : state === "error" ? "failed" : "approved";
|
|
716
739
|
return {
|
|
717
|
-
sentence:
|
|
740
|
+
sentence: approvalTitle(part) ?? translate(locale, "translate_approval_action", { tool: wordsOf(part.name) }),
|
|
718
741
|
decision,
|
|
719
742
|
decisionKey: DECISION_KEYS[decision]
|
|
720
743
|
};
|
|
@@ -745,13 +768,16 @@ function visibleMessageParts(parts, options) {
|
|
|
745
768
|
return part.type !== "thinking" || options.isStreaming && isLast;
|
|
746
769
|
});
|
|
747
770
|
}
|
|
771
|
+
function drawsMessageBody(visibleParts, metadata) {
|
|
772
|
+
return visibleParts.length > 0 || Boolean(metadata?.attachments?.length || metadata?.isAborted);
|
|
773
|
+
}
|
|
748
774
|
function messageCopyText(parts) {
|
|
749
775
|
return parts.filter((part) => part.type === "text").map((part) => part.content).join(`
|
|
750
776
|
|
|
751
777
|
`);
|
|
752
778
|
}
|
|
753
|
-
function drawsAsLine(part,
|
|
754
|
-
if (
|
|
779
|
+
function drawsAsLine(part, consumerTools) {
|
|
780
|
+
if (consumerTools && part.name in consumerTools)
|
|
755
781
|
return false;
|
|
756
782
|
return part.name !== REQUEST_LOCATION_TOOL || !isSettledToolState(part.state);
|
|
757
783
|
}
|
|
@@ -880,6 +906,15 @@ function clientToolAnswers(tail) {
|
|
|
880
906
|
});
|
|
881
907
|
return answers.length > 0 ? answers : null;
|
|
882
908
|
}
|
|
909
|
+
async function refusalOf(response) {
|
|
910
|
+
if (response.status !== 409)
|
|
911
|
+
return;
|
|
912
|
+
const body = await response.clone().json().catch(() => {
|
|
913
|
+
return;
|
|
914
|
+
});
|
|
915
|
+
const dropped = body !== null && typeof body === "object" && "outcome" in body && body.outcome === "dropped" && "reason" in body && body.reason === "approval_pending";
|
|
916
|
+
return dropped ? "approval_pending" : undefined;
|
|
917
|
+
}
|
|
883
918
|
async function* withCommittedTranscript(stream, options, lastSent) {
|
|
884
919
|
for await (const chunk of stream) {
|
|
885
920
|
if (chunk.type !== EventType.MESSAGES_SNAPSHOT) {
|
|
@@ -895,26 +930,45 @@ async function* withCommittedTranscript(stream, options, lastSent) {
|
|
|
895
930
|
}
|
|
896
931
|
function createCortexConnection(options) {
|
|
897
932
|
const { api, thread } = options;
|
|
898
|
-
const
|
|
933
|
+
const fetchClient = Object.assign(async (input, init) => {
|
|
934
|
+
const response = await fetch(input, init);
|
|
935
|
+
const refusal = await refusalOf(response);
|
|
936
|
+
if (refusal)
|
|
937
|
+
options.onRefused?.(refusal);
|
|
938
|
+
return response;
|
|
939
|
+
}, fetch);
|
|
940
|
+
const requestOptions = async () => ({ headers: await api.resolveHeaders(), fetchClient });
|
|
941
|
+
let open = 0;
|
|
942
|
+
async function* counted(stream) {
|
|
943
|
+
open += 1;
|
|
944
|
+
options.onStreamStarted?.();
|
|
945
|
+
try {
|
|
946
|
+
yield* stream;
|
|
947
|
+
} finally {
|
|
948
|
+
open -= 1;
|
|
949
|
+
}
|
|
950
|
+
}
|
|
899
951
|
const turn = fetchServerSentEvents(() => api.resolveUrl("/chat"), requestOptions);
|
|
900
952
|
const connect = function(messages, data, abortSignal, runContext) {
|
|
901
953
|
const tail = newestUnsent(messages);
|
|
902
954
|
const answers = clientToolAnswers(tail);
|
|
903
955
|
const stream = answers ? turn.connect([], { ...data, [CLIENT_TOOL_ANSWERS_KEY]: answers }, abortSignal, runContext) : turn.connect(tail, data, abortSignal, runContext);
|
|
904
|
-
return withCommittedTranscript(stream, options, messages.at(-1)?.id);
|
|
956
|
+
return counted(withCommittedTranscript(stream, options, messages.at(-1)?.id));
|
|
905
957
|
};
|
|
906
958
|
const join = fetchServerSentEvents(() => api.resolveUrl(`/chat/${thread.id}/stream`), requestOptions);
|
|
907
959
|
let replayBase = [];
|
|
960
|
+
async function* replay(runId, abortSignal) {
|
|
961
|
+
yield {
|
|
962
|
+
type: EventType.MESSAGES_SNAPSHOT,
|
|
963
|
+
timestamp: Date.now(),
|
|
964
|
+
messages: replayBase
|
|
965
|
+
};
|
|
966
|
+
yield* withCommittedTranscript(join.joinRun(runId, abortSignal), options, replayBase.at(-1)?.id);
|
|
967
|
+
}
|
|
908
968
|
return {
|
|
909
969
|
connect,
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
type: EventType.MESSAGES_SNAPSHOT,
|
|
913
|
-
timestamp: Date.now(),
|
|
914
|
-
messages: replayBase
|
|
915
|
-
};
|
|
916
|
-
yield* withCommittedTranscript(join.joinRun(runId, abortSignal), options, replayBase.at(-1)?.id);
|
|
917
|
-
},
|
|
970
|
+
joinRun: (runId, abortSignal) => counted(replay(runId, abortSignal)),
|
|
971
|
+
streaming: () => open > 0,
|
|
918
972
|
hydrate: async () => {
|
|
919
973
|
const hydration = await hydrateThread(options);
|
|
920
974
|
replayBase = hydration.messages;
|
|
@@ -964,12 +1018,28 @@ function randomId() {
|
|
|
964
1018
|
}
|
|
965
1019
|
|
|
966
1020
|
// src/internal/client/src/chat/attachment-queue.ts
|
|
1021
|
+
var REFUSAL_KEYS = {
|
|
1022
|
+
type: "translate_attachment_rejected_type",
|
|
1023
|
+
size: "translate_attachment_rejected_size",
|
|
1024
|
+
name: "translate_attachment_rejected_name",
|
|
1025
|
+
count: "translate_attachment_rejected_count"
|
|
1026
|
+
};
|
|
1027
|
+
function attachmentErrorText(item, locale) {
|
|
1028
|
+
if (!item.refusal)
|
|
1029
|
+
return translate(locale, "translate_attachment_rejected");
|
|
1030
|
+
return translate(locale, REFUSAL_KEYS[item.refusal], {
|
|
1031
|
+
types: new Intl.ListFormat(locale).format(ATTACHMENT_MIME_TYPES.map((type) => type.slice(type.indexOf("/") + 1).toUpperCase())),
|
|
1032
|
+
size: ATTACHMENT_MAX_BYTES / 1024 / 1024,
|
|
1033
|
+
count: MAX_ATTACHMENTS_PER_MESSAGE
|
|
1034
|
+
});
|
|
1035
|
+
}
|
|
967
1036
|
function createAttachmentQueue(options) {
|
|
968
1037
|
const { api } = options;
|
|
969
1038
|
const listeners = new Set;
|
|
970
1039
|
const cancelled = new Set;
|
|
971
1040
|
let items = [];
|
|
972
1041
|
let consumed = [];
|
|
1042
|
+
let uploads = Promise.resolve();
|
|
973
1043
|
function getState() {
|
|
974
1044
|
return items;
|
|
975
1045
|
}
|
|
@@ -992,16 +1062,38 @@ function createAttachmentQueue(options) {
|
|
|
992
1062
|
return;
|
|
993
1063
|
patch(localId, { status: "error" });
|
|
994
1064
|
}
|
|
1065
|
+
async function upload(localId, threadId, file) {
|
|
1066
|
+
if (cancelled.delete(localId))
|
|
1067
|
+
return;
|
|
1068
|
+
let attachment;
|
|
1069
|
+
try {
|
|
1070
|
+
attachment = await api.uploadAttachment(threadId, file);
|
|
1071
|
+
} catch {
|
|
1072
|
+
fail(localId);
|
|
1073
|
+
return;
|
|
1074
|
+
}
|
|
1075
|
+
if (cancelled.delete(localId)) {
|
|
1076
|
+
api.deleteAttachment(attachment.id).catch(() => {});
|
|
1077
|
+
return;
|
|
1078
|
+
}
|
|
1079
|
+
patch(localId, {
|
|
1080
|
+
status: "ready",
|
|
1081
|
+
attachmentId: attachment.id,
|
|
1082
|
+
summary: attachment
|
|
1083
|
+
});
|
|
1084
|
+
}
|
|
995
1085
|
function accept(files) {
|
|
996
1086
|
const accepted = [];
|
|
997
1087
|
for (const file of files) {
|
|
998
|
-
const
|
|
1088
|
+
const policy = checkAttachmentPolicy(file);
|
|
1089
|
+
const full = items.filter((item) => item.status !== "error").length >= MAX_ATTACHMENTS_PER_MESSAGE;
|
|
1090
|
+
const refusal = policy !== "ok" ? policy : full ? "count" : undefined;
|
|
999
1091
|
const localId = randomId();
|
|
1000
1092
|
setItems([
|
|
1001
1093
|
...items,
|
|
1002
|
-
{ localId, filename: file.name, status:
|
|
1094
|
+
refusal ? { localId, filename: file.name, status: "error", refusal } : { localId, filename: file.name, status: "uploading" }
|
|
1003
1095
|
]);
|
|
1004
|
-
if (!
|
|
1096
|
+
if (!refusal)
|
|
1005
1097
|
accepted.push({ localId, file });
|
|
1006
1098
|
}
|
|
1007
1099
|
if (!accepted.length)
|
|
@@ -1011,17 +1103,7 @@ function createAttachmentQueue(options) {
|
|
|
1011
1103
|
if (cancelled.delete(localId))
|
|
1012
1104
|
continue;
|
|
1013
1105
|
patch(localId, { threadId });
|
|
1014
|
-
|
|
1015
|
-
if (cancelled.delete(localId)) {
|
|
1016
|
-
api.deleteAttachment(attachment.id).catch(() => {});
|
|
1017
|
-
return;
|
|
1018
|
-
}
|
|
1019
|
-
patch(localId, {
|
|
1020
|
-
status: "ready",
|
|
1021
|
-
attachmentId: attachment.id,
|
|
1022
|
-
summary: attachment
|
|
1023
|
-
});
|
|
1024
|
-
}, () => fail(localId));
|
|
1106
|
+
uploads = uploads.then(() => upload(localId, threadId, file)).catch(() => {});
|
|
1025
1107
|
}
|
|
1026
1108
|
}, () => {
|
|
1027
1109
|
for (const { localId } of accepted) {
|
|
@@ -1154,10 +1236,6 @@ function createClientToolEmbed(options) {
|
|
|
1154
1236
|
setState({ phase: "initiating" });
|
|
1155
1237
|
try {
|
|
1156
1238
|
const result = await options.initiate();
|
|
1157
|
-
if (!result.embed) {
|
|
1158
|
-
setState({ phase: "unavailable" });
|
|
1159
|
-
return;
|
|
1160
|
-
}
|
|
1161
1239
|
if (!/^https?:$/.test(new URL(result.embedUrl).protocol)) {
|
|
1162
1240
|
setState({ phase: "error" });
|
|
1163
1241
|
return;
|
|
@@ -1432,8 +1510,9 @@ function locationPickerHint(state) {
|
|
|
1432
1510
|
return { key: "translate_location_hint", failed: false };
|
|
1433
1511
|
}
|
|
1434
1512
|
// src/internal/client/src/chat/websocket.ts
|
|
1513
|
+
var BACKOFF_CEILING_MS = 30000;
|
|
1435
1514
|
function wsBackoffDelay(attempt) {
|
|
1436
|
-
return Math.min(1000 * 2 ** (attempt - 1),
|
|
1515
|
+
return Math.min(1000 * 2 ** (attempt - 1), BACKOFF_CEILING_MS);
|
|
1437
1516
|
}
|
|
1438
1517
|
var STABLE_CONNECTION_MS = 1e4;
|
|
1439
1518
|
function createCortexSocket(options) {
|
|
@@ -1441,6 +1520,7 @@ function createCortexSocket(options) {
|
|
|
1441
1520
|
let reconnectTimer;
|
|
1442
1521
|
let attempt = 0;
|
|
1443
1522
|
let closed = false;
|
|
1523
|
+
let open = false;
|
|
1444
1524
|
function connect() {
|
|
1445
1525
|
const { wsUrl: wsUrlOption, transport } = options.getConfig();
|
|
1446
1526
|
if (wsUrlOption === false)
|
|
@@ -1451,6 +1531,7 @@ function createCortexSocket(options) {
|
|
|
1451
1531
|
return;
|
|
1452
1532
|
ws = new WebSocket(appendTokenToUrl(wsUrl, headers));
|
|
1453
1533
|
ws.addEventListener("open", () => {
|
|
1534
|
+
open = true;
|
|
1454
1535
|
const opened = ws;
|
|
1455
1536
|
setTimeout(() => {
|
|
1456
1537
|
if (ws === opened && !closed)
|
|
@@ -1470,7 +1551,10 @@ function createCortexSocket(options) {
|
|
|
1470
1551
|
}
|
|
1471
1552
|
options.onEvent(parsed);
|
|
1472
1553
|
});
|
|
1473
|
-
ws.addEventListener("close",
|
|
1554
|
+
ws.addEventListener("close", () => {
|
|
1555
|
+
open = false;
|
|
1556
|
+
scheduleReconnect();
|
|
1557
|
+
});
|
|
1474
1558
|
}).catch(scheduleReconnect);
|
|
1475
1559
|
}
|
|
1476
1560
|
function scheduleReconnect() {
|
|
@@ -1486,8 +1570,12 @@ function createCortexSocket(options) {
|
|
|
1486
1570
|
return {
|
|
1487
1571
|
close() {
|
|
1488
1572
|
closed = true;
|
|
1573
|
+
open = false;
|
|
1489
1574
|
clearTimeout(reconnectTimer);
|
|
1490
1575
|
ws?.close();
|
|
1576
|
+
},
|
|
1577
|
+
isOpen() {
|
|
1578
|
+
return open;
|
|
1491
1579
|
}
|
|
1492
1580
|
};
|
|
1493
1581
|
}
|
|
@@ -1510,23 +1598,40 @@ function appendTokenToUrl(wsUrl, headers) {
|
|
|
1510
1598
|
parsed.searchParams.set("token", authHeader.slice(7));
|
|
1511
1599
|
return parsed.toString();
|
|
1512
1600
|
}
|
|
1513
|
-
// src/internal/client/src/chat/
|
|
1514
|
-
|
|
1601
|
+
// src/internal/client/src/chat/ask-until-answered.ts
|
|
1602
|
+
var UNANSWERED_NOTICES = {
|
|
1603
|
+
unreachable: "translate_agent_unreachable",
|
|
1604
|
+
refused: "translate_access_refused",
|
|
1605
|
+
missing: "translate_agent_missing"
|
|
1606
|
+
};
|
|
1607
|
+
function unansweredBy(error) {
|
|
1608
|
+
const status = error instanceof Error ? /^HTTP (\d+)\b/.exec(error.message)?.[1] : undefined;
|
|
1609
|
+
if (status === "401")
|
|
1610
|
+
return "refused";
|
|
1611
|
+
if (status === "404")
|
|
1612
|
+
return "missing";
|
|
1613
|
+
return "unreachable";
|
|
1614
|
+
}
|
|
1615
|
+
function askUntilAnswered(ask, handlers, delay = wsBackoffDelay) {
|
|
1515
1616
|
let stopped = false;
|
|
1516
1617
|
let timer;
|
|
1517
1618
|
let attempt = 0;
|
|
1518
|
-
function
|
|
1519
|
-
|
|
1619
|
+
function next() {
|
|
1620
|
+
ask().then((answer) => {
|
|
1520
1621
|
if (!stopped)
|
|
1521
|
-
|
|
1522
|
-
}, () => {
|
|
1622
|
+
handlers.onAnswered(answer);
|
|
1623
|
+
}, (error) => {
|
|
1523
1624
|
if (stopped)
|
|
1524
1625
|
return;
|
|
1626
|
+
const why = unansweredBy(error);
|
|
1627
|
+
handlers.onMissed?.(why);
|
|
1628
|
+
if (why === "missing")
|
|
1629
|
+
return;
|
|
1525
1630
|
attempt += 1;
|
|
1526
|
-
timer = setTimeout(
|
|
1631
|
+
timer = setTimeout(next, why === "refused" ? BACKOFF_CEILING_MS : delay(attempt));
|
|
1527
1632
|
});
|
|
1528
1633
|
}
|
|
1529
|
-
|
|
1634
|
+
next();
|
|
1530
1635
|
return function stop() {
|
|
1531
1636
|
stopped = true;
|
|
1532
1637
|
clearTimeout(timer);
|
|
@@ -1554,6 +1659,43 @@ function upsertThread(threads, thread) {
|
|
|
1554
1659
|
function removeThread(threads, threadId) {
|
|
1555
1660
|
return threads.filter((thread) => thread.id !== threadId);
|
|
1556
1661
|
}
|
|
1662
|
+
function retitleThread(threads, threadId, title) {
|
|
1663
|
+
return threads.map((thread) => thread.id === threadId ? { ...thread, title } : thread);
|
|
1664
|
+
}
|
|
1665
|
+
var TITLE_READ_DELAYS = [0, 1000, 2000, 3000, 4000];
|
|
1666
|
+
function followThreadTitle(options) {
|
|
1667
|
+
const delays = options.delays ?? TITLE_READ_DELAYS;
|
|
1668
|
+
let stopped = false;
|
|
1669
|
+
let timer;
|
|
1670
|
+
function owed() {
|
|
1671
|
+
const shown = options.selected();
|
|
1672
|
+
return !stopped && !options.socketOpen() && shown?.id === options.threadId && !shown.title;
|
|
1673
|
+
}
|
|
1674
|
+
async function read(attempt) {
|
|
1675
|
+
if (!owed())
|
|
1676
|
+
return;
|
|
1677
|
+
const listed = await options.listThreads().catch(() => {
|
|
1678
|
+
return;
|
|
1679
|
+
});
|
|
1680
|
+
const title = listed?.find((thread) => thread.id === options.threadId)?.title;
|
|
1681
|
+
if (!owed())
|
|
1682
|
+
return;
|
|
1683
|
+
if (title)
|
|
1684
|
+
options.setTitle(title);
|
|
1685
|
+
else
|
|
1686
|
+
readAfter(attempt + 1);
|
|
1687
|
+
}
|
|
1688
|
+
function readAfter(attempt) {
|
|
1689
|
+
const wait = delays[attempt];
|
|
1690
|
+
if (wait !== undefined)
|
|
1691
|
+
timer = setTimeout(() => void read(attempt), wait);
|
|
1692
|
+
}
|
|
1693
|
+
readAfter(0);
|
|
1694
|
+
return function stop() {
|
|
1695
|
+
stopped = true;
|
|
1696
|
+
clearTimeout(timer);
|
|
1697
|
+
};
|
|
1698
|
+
}
|
|
1557
1699
|
function applyWsEvent(threads, event) {
|
|
1558
1700
|
switch (event.type) {
|
|
1559
1701
|
case "thread:deleted":
|
|
@@ -1568,6 +1710,51 @@ function applyWsEvent(threads, event) {
|
|
|
1568
1710
|
return threads;
|
|
1569
1711
|
}
|
|
1570
1712
|
}
|
|
1713
|
+
function createRunTracker() {
|
|
1714
|
+
const live = new Map;
|
|
1715
|
+
const changed = new Map;
|
|
1716
|
+
let clock = 0;
|
|
1717
|
+
function admitsRun(event) {
|
|
1718
|
+
if (event.type === "thread:run-started") {
|
|
1719
|
+
live.set(event.payload.thread.id, event.payload.runId);
|
|
1720
|
+
return true;
|
|
1721
|
+
}
|
|
1722
|
+
if (event.type !== "thread:run-finished")
|
|
1723
|
+
return true;
|
|
1724
|
+
const runId = live.get(event.payload.thread.id);
|
|
1725
|
+
return runId === undefined || runId === event.payload.runId;
|
|
1726
|
+
}
|
|
1727
|
+
return {
|
|
1728
|
+
admits(event) {
|
|
1729
|
+
const admitted = admitsRun(event);
|
|
1730
|
+
if (admitted && "thread" in event.payload)
|
|
1731
|
+
changed.set(event.payload.thread.id, ++clock);
|
|
1732
|
+
return admitted;
|
|
1733
|
+
},
|
|
1734
|
+
running(threadId, isRunning) {
|
|
1735
|
+
changed.set(threadId, ++clock);
|
|
1736
|
+
return (threads) => {
|
|
1737
|
+
const thread = threads?.find((candidate) => candidate.id === threadId);
|
|
1738
|
+
return threads && thread ? upsertThread(threads, { ...thread, isRunning }) : threads;
|
|
1739
|
+
};
|
|
1740
|
+
},
|
|
1741
|
+
async read(listThreads) {
|
|
1742
|
+
live.clear();
|
|
1743
|
+
const begun = ++clock;
|
|
1744
|
+
const listed = sortThreads(await listThreads());
|
|
1745
|
+
function show(shown) {
|
|
1746
|
+
return listed.map((thread) => {
|
|
1747
|
+
const since = changed.get(thread.id) ?? 0;
|
|
1748
|
+
const newer = since > begun ? shown?.find((row) => row.id === thread.id) : undefined;
|
|
1749
|
+
if (since < begun)
|
|
1750
|
+
changed.set(thread.id, begun);
|
|
1751
|
+
return newer ? { ...thread, isRunning: newer.isRunning } : thread;
|
|
1752
|
+
});
|
|
1753
|
+
}
|
|
1754
|
+
return { listed, show };
|
|
1755
|
+
}
|
|
1756
|
+
};
|
|
1757
|
+
}
|
|
1571
1758
|
// src/internal/client/src/content/markdown.ts
|
|
1572
1759
|
import { marked } from "marked";
|
|
1573
1760
|
import DOMPurify from "dompurify";
|
|
@@ -1575,25 +1762,41 @@ function renderMarkdown(value, fading = []) {
|
|
|
1575
1762
|
if (!value) {
|
|
1576
1763
|
return "";
|
|
1577
1764
|
}
|
|
1578
|
-
|
|
1579
|
-
|
|
1765
|
+
const template = document.createElement("template");
|
|
1766
|
+
template.innerHTML = marked.parse(value, { async: false }).replace(/<table>/g, '<div style="overflow-x:auto"><table style="width:max-content">').replace(/<\/table>/g, "</table></div>").replace(/<(t[hd])([\s>])/g, '<$1 style="padding:0.5rem 1rem"$2');
|
|
1767
|
+
orient(template.content);
|
|
1580
1768
|
if (fading.length)
|
|
1581
|
-
|
|
1582
|
-
return DOMPurify.sanitize(
|
|
1769
|
+
wrapFadingTail(template.content, fading);
|
|
1770
|
+
return DOMPurify.sanitize(template.innerHTML, { FORBID_TAGS: ["img", "picture", "source"] });
|
|
1771
|
+
}
|
|
1772
|
+
var RTL_LETTER = /[\p{Script=Arabic}\p{Script=Hebrew}]/u;
|
|
1773
|
+
function orient(root) {
|
|
1774
|
+
for (const block of Array.from(root.children)) {
|
|
1775
|
+
if (block.localName !== "div")
|
|
1776
|
+
block.setAttribute("dir", "auto");
|
|
1777
|
+
}
|
|
1778
|
+
root.querySelectorAll("table").forEach((table) => {
|
|
1779
|
+
const letter = /\p{L}/u.exec(table.textContent ?? "")?.[0];
|
|
1780
|
+
if (!letter)
|
|
1781
|
+
return;
|
|
1782
|
+
const dir = RTL_LETTER.test(letter) ? "rtl" : "ltr";
|
|
1783
|
+
table.setAttribute("dir", dir);
|
|
1784
|
+
if (table.parentElement?.childElementCount === 1)
|
|
1785
|
+
table.parentElement.setAttribute("dir", dir);
|
|
1786
|
+
});
|
|
1787
|
+
root.querySelectorAll("th, td").forEach((cell) => cell.setAttribute("dir", "auto"));
|
|
1788
|
+
root.querySelectorAll("pre").forEach((code) => code.setAttribute("dir", "ltr"));
|
|
1583
1789
|
}
|
|
1584
|
-
function wrapFadingTail(
|
|
1585
|
-
const template = document.createElement("template");
|
|
1586
|
-
template.innerHTML = html;
|
|
1790
|
+
function wrapFadingTail(root, fading) {
|
|
1587
1791
|
const runs = [...fading].sort((a, b) => a.length - b.length);
|
|
1588
1792
|
const furthest = runs[runs.length - 1]?.length ?? 0;
|
|
1589
1793
|
let consumed = 0;
|
|
1590
|
-
for (const node of textNodesFromEnd(
|
|
1794
|
+
for (const node of textNodesFromEnd(root)) {
|
|
1591
1795
|
if (consumed >= furthest)
|
|
1592
1796
|
break;
|
|
1593
1797
|
node.replaceWith(...splitTail(node.data, consumed, runs));
|
|
1594
1798
|
consumed += node.data.length;
|
|
1595
1799
|
}
|
|
1596
|
-
return template.innerHTML;
|
|
1597
1800
|
}
|
|
1598
1801
|
function textNodesFromEnd(root) {
|
|
1599
1802
|
const walker = document.createTreeWalker(root, 4);
|
|
@@ -2581,7 +2784,6 @@ function watchColorScheme(theme, onChange) {
|
|
|
2581
2784
|
import hljs from "highlight.js/lib/core";
|
|
2582
2785
|
import javascript from "highlight.js/lib/languages/javascript";
|
|
2583
2786
|
import json from "highlight.js/lib/languages/json";
|
|
2584
|
-
import sql from "highlight.js/lib/languages/sql";
|
|
2585
2787
|
var registered = false;
|
|
2586
2788
|
function ensureLanguages() {
|
|
2587
2789
|
if (registered)
|
|
@@ -2589,7 +2791,6 @@ function ensureLanguages() {
|
|
|
2589
2791
|
registered = true;
|
|
2590
2792
|
hljs.registerLanguage("javascript", javascript);
|
|
2591
2793
|
hljs.registerLanguage("json", json);
|
|
2592
|
-
hljs.registerLanguage("cypher", sql);
|
|
2593
2794
|
}
|
|
2594
2795
|
function highlightCode(code, lang) {
|
|
2595
2796
|
if (!code)
|
|
@@ -2884,7 +3085,10 @@ function endScrollTop(list) {
|
|
|
2884
3085
|
function createWorkingAvatar(avatar) {
|
|
2885
3086
|
let shown = false;
|
|
2886
3087
|
const content = avatar.parentElement;
|
|
2887
|
-
const observer = typeof ResizeObserver === "undefined" ? undefined : new ResizeObserver(
|
|
3088
|
+
const observer = typeof ResizeObserver === "undefined" ? undefined : new ResizeObserver(() => {
|
|
3089
|
+
if (shown)
|
|
3090
|
+
place();
|
|
3091
|
+
});
|
|
2888
3092
|
observer?.observe(content);
|
|
2889
3093
|
function place() {
|
|
2890
3094
|
const target = content.querySelector(FRONTIER);
|
|
@@ -2910,6 +3114,8 @@ function createWorkingAvatar(avatar) {
|
|
|
2910
3114
|
return;
|
|
2911
3115
|
}
|
|
2912
3116
|
shown = false;
|
|
3117
|
+
const [, drawnY = "0px"] = getComputedStyle(avatar).translate.split(" ");
|
|
3118
|
+
avatar.style.setProperty("--cortex-avatar-y", drawnY);
|
|
2913
3119
|
avatar.classList.add("cortex-working-avatar--leaving");
|
|
2914
3120
|
settled(avatar, true).then(() => {
|
|
2915
3121
|
if (shown)
|
|
@@ -2941,18 +3147,48 @@ function settled(element, subtree = false) {
|
|
|
2941
3147
|
return Promise.allSettled(element.getAnimations({ subtree }).map((animation) => animation.finished));
|
|
2942
3148
|
}
|
|
2943
3149
|
// src/internal/client/src/chat/turn-lifecycle.ts
|
|
3150
|
+
import { EventType as EventType2 } from "@tanstack/ai";
|
|
3151
|
+
function failureLabel(failure) {
|
|
3152
|
+
const key = failure.refusal === "approval_pending" ? "translate_approval_pending" : "translate_error";
|
|
3153
|
+
return key;
|
|
3154
|
+
}
|
|
2944
3155
|
var MAX_REDELIVERIES = 2;
|
|
2945
3156
|
function createTurnLifecycle(options) {
|
|
2946
3157
|
let ownsRun = false;
|
|
2947
|
-
let
|
|
3158
|
+
let cortexAnswered = false;
|
|
2948
3159
|
let streamDropped = false;
|
|
3160
|
+
let runFailure;
|
|
3161
|
+
let refusal;
|
|
3162
|
+
let sentPrompt;
|
|
3163
|
+
let streamPrompt;
|
|
2949
3164
|
let wasAborted = false;
|
|
2950
3165
|
let wasWorking = false;
|
|
2951
|
-
let
|
|
3166
|
+
let carriedAt;
|
|
2952
3167
|
let owedSince;
|
|
2953
3168
|
const dispatched = new Set;
|
|
2954
3169
|
let adoptedInFlight = 0;
|
|
2955
3170
|
let adoptedDelivered = false;
|
|
3171
|
+
const awaitingCortex = new Set;
|
|
3172
|
+
const lostDeliveries = new Set;
|
|
3173
|
+
let submission;
|
|
3174
|
+
const outstanding = new Map;
|
|
3175
|
+
let epoch = 0;
|
|
3176
|
+
let readBacks = 0;
|
|
3177
|
+
let appliedReadBack = 0;
|
|
3178
|
+
async function delivered(deliver) {
|
|
3179
|
+
const delivery = Symbol("delivery");
|
|
3180
|
+
awaitingCortex.add(delivery);
|
|
3181
|
+
try {
|
|
3182
|
+
await deliver();
|
|
3183
|
+
if (submission && await submission.over)
|
|
3184
|
+
lostDeliveries.add(delivery);
|
|
3185
|
+
if (lostDeliveries.has(delivery))
|
|
3186
|
+
throw new Error("The answer did not reach Cortex");
|
|
3187
|
+
} finally {
|
|
3188
|
+
awaitingCortex.delete(delivery);
|
|
3189
|
+
lostDeliveries.delete(delivery);
|
|
3190
|
+
}
|
|
3191
|
+
}
|
|
2956
3192
|
function adopt() {
|
|
2957
3193
|
if (ownsRun && adoptedInFlight === 0)
|
|
2958
3194
|
return false;
|
|
@@ -2963,31 +3199,43 @@ function createTurnLifecycle(options) {
|
|
|
2963
3199
|
}
|
|
2964
3200
|
return true;
|
|
2965
3201
|
}
|
|
2966
|
-
function adoptionSettled(
|
|
3202
|
+
function adoptionSettled(through) {
|
|
2967
3203
|
adoptedInFlight -= 1;
|
|
2968
|
-
if (
|
|
3204
|
+
if (through)
|
|
2969
3205
|
adoptedDelivered = true;
|
|
2970
3206
|
else if (adoptedInFlight === 0 && !adoptedDelivered) {
|
|
2971
3207
|
ownsRun = false;
|
|
2972
3208
|
options.setRunning(false);
|
|
2973
3209
|
}
|
|
2974
3210
|
}
|
|
2975
|
-
async function
|
|
2976
|
-
|
|
2977
|
-
|
|
2978
|
-
|
|
2979
|
-
|
|
2980
|
-
|
|
2981
|
-
|
|
2982
|
-
|
|
2983
|
-
|
|
2984
|
-
|
|
2985
|
-
|
|
2986
|
-
|
|
2987
|
-
if (
|
|
2988
|
-
|
|
3211
|
+
async function readBack() {
|
|
3212
|
+
const begun = epoch;
|
|
3213
|
+
const own = ++readBacks;
|
|
3214
|
+
const stale = () => epoch !== begun || appliedReadBack > own || !options.isAlive();
|
|
3215
|
+
const transcript = await options.refreshMessages(stale).catch(() => {
|
|
3216
|
+
return;
|
|
3217
|
+
});
|
|
3218
|
+
if (!transcript || stale())
|
|
3219
|
+
return false;
|
|
3220
|
+
appliedReadBack = own;
|
|
3221
|
+
const open = new Set(unansweredToolCalls(transcript).map((call) => call.id));
|
|
3222
|
+
for (const callId of outstanding.keys()) {
|
|
3223
|
+
if (!open.has(callId))
|
|
3224
|
+
outstanding.delete(callId);
|
|
2989
3225
|
}
|
|
2990
|
-
|
|
3226
|
+
if (ownsRun)
|
|
3227
|
+
dispatchToolCalls(transcript);
|
|
3228
|
+
const owed = [...outstanding.values()];
|
|
3229
|
+
if (owed.some((held) => held.failedResends >= MAX_REDELIVERIES))
|
|
3230
|
+
return false;
|
|
3231
|
+
for (const held of owed) {
|
|
3232
|
+
const through = await delivered(() => options.deliver(held.answer)).then(() => true, () => false);
|
|
3233
|
+
if (!through) {
|
|
3234
|
+
held.failedResends += 1;
|
|
3235
|
+
return readBack();
|
|
3236
|
+
}
|
|
3237
|
+
}
|
|
3238
|
+
return true;
|
|
2991
3239
|
}
|
|
2992
3240
|
async function resolve(call, onToolCall) {
|
|
2993
3241
|
let output;
|
|
@@ -3006,11 +3254,10 @@ function createTurnLifecycle(options) {
|
|
|
3006
3254
|
return;
|
|
3007
3255
|
const adopted = adopt();
|
|
3008
3256
|
const answer = { toolCallId: call.id, tool: call.name, output };
|
|
3009
|
-
|
|
3257
|
+
outstanding.set(call.id, { answer, failedResends: 0 });
|
|
3258
|
+
const through = await delivered(() => options.deliver(answer)).then(() => true, readBack);
|
|
3010
3259
|
if (adopted)
|
|
3011
|
-
adoptionSettled(
|
|
3012
|
-
if (!delivered)
|
|
3013
|
-
dispatched.delete(call.id);
|
|
3260
|
+
adoptionSettled(through);
|
|
3014
3261
|
}
|
|
3015
3262
|
function dispatchToolCalls(messages) {
|
|
3016
3263
|
const pending = unansweredToolCalls(messages);
|
|
@@ -3026,51 +3273,66 @@ function createTurnLifecycle(options) {
|
|
|
3026
3273
|
return pending.length > 0;
|
|
3027
3274
|
}
|
|
3028
3275
|
async function settle(messages) {
|
|
3029
|
-
|
|
3030
|
-
|
|
3031
|
-
|
|
3032
|
-
|
|
3033
|
-
|
|
3034
|
-
|
|
3035
|
-
|
|
3036
|
-
else
|
|
3037
|
-
options.setRunning(false);
|
|
3038
|
-
}
|
|
3039
|
-
if (owedSince === undefined && (carriedTranscript || aborted))
|
|
3276
|
+
if (streamDropped)
|
|
3277
|
+
options.reloadThreads().catch(() => {});
|
|
3278
|
+
else
|
|
3279
|
+
options.setRunning(false);
|
|
3280
|
+
if (ownsRun && !wasAborted && dispatchToolCalls(messages()))
|
|
3281
|
+
return;
|
|
3282
|
+
if (owedSince === undefined && carriedAt !== undefined)
|
|
3040
3283
|
return;
|
|
3041
3284
|
owedSince = undefined;
|
|
3042
|
-
|
|
3043
|
-
if (!aborted && ownsRun && transcript)
|
|
3044
|
-
dispatchToolCalls(transcript);
|
|
3285
|
+
await readBack();
|
|
3045
3286
|
}
|
|
3046
3287
|
return {
|
|
3047
|
-
chunkArrived() {
|
|
3048
|
-
|
|
3288
|
+
chunkArrived(chunk) {
|
|
3289
|
+
cortexAnswered = true;
|
|
3290
|
+
awaitingCortex.clear();
|
|
3291
|
+
if (chunk.type === EventType2.RUN_ERROR && chunk.code !== "aborted") {
|
|
3292
|
+
runFailure = { reason: chunk.message || undefined };
|
|
3293
|
+
}
|
|
3049
3294
|
},
|
|
3050
3295
|
transcriptCarried(at) {
|
|
3051
|
-
|
|
3296
|
+
carriedAt = at;
|
|
3052
3297
|
if (owedSince !== undefined && owedSince <= at)
|
|
3053
3298
|
owedSince = undefined;
|
|
3054
3299
|
},
|
|
3055
3300
|
transcriptUpdated(updatedAt) {
|
|
3301
|
+
const changedAt = Date.parse(updatedAt);
|
|
3302
|
+
if (carriedAt !== undefined && changedAt <= carriedAt)
|
|
3303
|
+
return;
|
|
3056
3304
|
if (!wasWorking) {
|
|
3057
|
-
|
|
3305
|
+
readBack();
|
|
3058
3306
|
return;
|
|
3059
3307
|
}
|
|
3060
|
-
owedSince = Math.max(owedSince ?? 0,
|
|
3308
|
+
owedSince = Math.max(owedSince ?? 0, changedAt);
|
|
3061
3309
|
},
|
|
3062
3310
|
streamFailed() {
|
|
3063
3311
|
streamDropped = true;
|
|
3064
|
-
|
|
3312
|
+
const delivering = awaitingCortex.size > 0;
|
|
3313
|
+
for (const delivery of awaitingCortex)
|
|
3314
|
+
lostDeliveries.add(delivery);
|
|
3315
|
+
awaitingCortex.clear();
|
|
3316
|
+
if (wasAborted)
|
|
3317
|
+
return;
|
|
3318
|
+
if (cortexAnswered)
|
|
3065
3319
|
options.onTurnFinished();
|
|
3066
3320
|
else
|
|
3067
3321
|
options.onSendFailed();
|
|
3322
|
+
if (refusal) {
|
|
3323
|
+
options.setTurnFailed({ reason: undefined, refusal });
|
|
3324
|
+
if (streamPrompt !== undefined)
|
|
3325
|
+
options.returnDraft(streamPrompt);
|
|
3326
|
+
return;
|
|
3327
|
+
}
|
|
3328
|
+
const messageLost = ownsRun && !delivering && !cortexAnswered;
|
|
3329
|
+
const failure = runFailure ?? (messageLost ? { reason: undefined } : undefined);
|
|
3330
|
+
if (failure)
|
|
3331
|
+
options.setTurnFailed(failure);
|
|
3068
3332
|
},
|
|
3069
3333
|
loadingChanged(isLoading, messages) {
|
|
3070
3334
|
if (isLoading) {
|
|
3071
3335
|
wasWorking = true;
|
|
3072
|
-
streamDropped = false;
|
|
3073
|
-
carriedTranscript = false;
|
|
3074
3336
|
return;
|
|
3075
3337
|
}
|
|
3076
3338
|
if (!wasWorking)
|
|
@@ -3087,14 +3349,61 @@ function createTurnLifecycle(options) {
|
|
|
3087
3349
|
dispatchToolCalls(messages);
|
|
3088
3350
|
}, 0);
|
|
3089
3351
|
},
|
|
3090
|
-
|
|
3091
|
-
|
|
3352
|
+
deliverAnswer(deliver) {
|
|
3353
|
+
const adopted = adopt();
|
|
3354
|
+
const delivery = delivered(deliver).catch(async (error) => {
|
|
3355
|
+
await readBack();
|
|
3356
|
+
throw error;
|
|
3357
|
+
});
|
|
3358
|
+
delivery.then(() => {
|
|
3359
|
+
if (adopted)
|
|
3360
|
+
adoptionSettled(true);
|
|
3361
|
+
}, () => {
|
|
3362
|
+
if (adopted)
|
|
3363
|
+
adoptionSettled(false);
|
|
3364
|
+
});
|
|
3365
|
+
return delivery;
|
|
3366
|
+
},
|
|
3367
|
+
interruptStateChanged(state) {
|
|
3368
|
+
if (state.resuming) {
|
|
3369
|
+
if (submission)
|
|
3370
|
+
return;
|
|
3371
|
+
let end = () => {};
|
|
3372
|
+
const over = new Promise((resolve2) => {
|
|
3373
|
+
end = resolve2;
|
|
3374
|
+
});
|
|
3375
|
+
submission = { errorsAtStart: state.interruptErrors.length, over, end };
|
|
3376
|
+
return;
|
|
3377
|
+
}
|
|
3378
|
+
submission?.end(state.interruptErrors.length > submission.errorsAtStart);
|
|
3379
|
+
submission = undefined;
|
|
3380
|
+
},
|
|
3381
|
+
readBack,
|
|
3382
|
+
streamStarted() {
|
|
3383
|
+
if (ownsRun)
|
|
3384
|
+
options.setRunning(true);
|
|
3385
|
+
epoch += 1;
|
|
3386
|
+
streamDropped = false;
|
|
3387
|
+
runFailure = undefined;
|
|
3388
|
+
refusal = undefined;
|
|
3389
|
+
streamPrompt = sentPrompt;
|
|
3390
|
+
sentPrompt = undefined;
|
|
3391
|
+
carriedAt = undefined;
|
|
3392
|
+
wasAborted = false;
|
|
3393
|
+
options.setTurnFailed(undefined);
|
|
3394
|
+
},
|
|
3395
|
+
sendStarted(prompt) {
|
|
3396
|
+
epoch += 1;
|
|
3397
|
+
sentPrompt = prompt;
|
|
3398
|
+
options.returnDraft(undefined);
|
|
3092
3399
|
ownsRun = true;
|
|
3093
|
-
|
|
3400
|
+
cortexAnswered = false;
|
|
3401
|
+
},
|
|
3402
|
+
sendRefused(reason) {
|
|
3403
|
+
refusal = reason;
|
|
3094
3404
|
},
|
|
3095
3405
|
abortConfirmed() {
|
|
3096
3406
|
wasAborted = true;
|
|
3097
|
-
options.setRunning(false);
|
|
3098
3407
|
}
|
|
3099
3408
|
};
|
|
3100
3409
|
}
|
|
@@ -3193,6 +3502,9 @@ var CortexWebSocketService = class CortexWebSocketService2 {
|
|
|
3193
3502
|
get opened() {
|
|
3194
3503
|
return this.openedSubject.asObservable();
|
|
3195
3504
|
}
|
|
3505
|
+
isOpen() {
|
|
3506
|
+
return this.socket?.isOpen() ?? false;
|
|
3507
|
+
}
|
|
3196
3508
|
ensureSocket() {
|
|
3197
3509
|
if (this.socket)
|
|
3198
3510
|
return;
|
|
@@ -3230,14 +3542,34 @@ var CortexThreadService = class CortexThreadService2 {
|
|
|
3230
3542
|
api = inject(CORTEX_API);
|
|
3231
3543
|
wsService = inject(CortexWebSocketService);
|
|
3232
3544
|
destroyRef = inject(DestroyRef);
|
|
3545
|
+
runs = createRunTracker();
|
|
3546
|
+
stopTitleFollow = undefined;
|
|
3547
|
+
stopFirstRead = undefined;
|
|
3548
|
+
constructor() {
|
|
3549
|
+
this.destroyRef.onDestroy(() => {
|
|
3550
|
+
this.stopTitleFollow?.();
|
|
3551
|
+
this.stopFirstRead?.();
|
|
3552
|
+
});
|
|
3553
|
+
}
|
|
3233
3554
|
start() {
|
|
3234
|
-
this.
|
|
3555
|
+
this.stopFirstRead = askUntilAnswered(() => this.runs.read(() => this.api.listThreads()), {
|
|
3556
|
+
onAnswered: ({ show }) => this.threads.update(show),
|
|
3557
|
+
onMissed: (why) => {
|
|
3558
|
+
if (why !== "unreachable")
|
|
3559
|
+
this.threads.set(this.threads() ?? []);
|
|
3560
|
+
}
|
|
3561
|
+
});
|
|
3235
3562
|
this.wsService.events.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {
|
|
3236
3563
|
this.onWsEvent(event);
|
|
3237
3564
|
});
|
|
3238
3565
|
}
|
|
3239
3566
|
reload() {
|
|
3240
|
-
return from(this.
|
|
3567
|
+
return from(this.runs.read(() => this.api.listThreads()).catch(() => {
|
|
3568
|
+
return;
|
|
3569
|
+
})).pipe(tap((read) => {
|
|
3570
|
+
if (read)
|
|
3571
|
+
this.threads.update(read.show);
|
|
3572
|
+
}), map((read) => read?.listed));
|
|
3241
3573
|
}
|
|
3242
3574
|
create() {
|
|
3243
3575
|
return from(this.api.createThread()).pipe(tap((thread) => this.upsert(thread)));
|
|
@@ -3249,12 +3581,24 @@ var CortexThreadService = class CortexThreadService2 {
|
|
|
3249
3581
|
this.threads.set(upsertThread(this.threads() ?? [], thread));
|
|
3250
3582
|
}
|
|
3251
3583
|
setRunning(threadId, isRunning) {
|
|
3252
|
-
|
|
3253
|
-
|
|
3254
|
-
|
|
3255
|
-
|
|
3256
|
-
|
|
3257
|
-
|
|
3584
|
+
this.threads.update(this.runs.running(threadId, isRunning));
|
|
3585
|
+
}
|
|
3586
|
+
followTitle(selected) {
|
|
3587
|
+
this.stopTitleFollow?.();
|
|
3588
|
+
const threadId = selected()?.id;
|
|
3589
|
+
if (!threadId)
|
|
3590
|
+
return;
|
|
3591
|
+
this.stopTitleFollow = followThreadTitle({
|
|
3592
|
+
threadId,
|
|
3593
|
+
listThreads: () => this.api.listThreads(),
|
|
3594
|
+
selected,
|
|
3595
|
+
socketOpen: () => this.wsService.isOpen(),
|
|
3596
|
+
setTitle: (title) => {
|
|
3597
|
+
const current = this.threads();
|
|
3598
|
+
if (current)
|
|
3599
|
+
this.threads.set(retitleThread(current, threadId, title));
|
|
3600
|
+
}
|
|
3601
|
+
});
|
|
3258
3602
|
}
|
|
3259
3603
|
remove(threadId) {
|
|
3260
3604
|
const current = this.threads();
|
|
@@ -3263,6 +3607,8 @@ var CortexThreadService = class CortexThreadService2 {
|
|
|
3263
3607
|
this.threads.set(removeThread(current, threadId));
|
|
3264
3608
|
}
|
|
3265
3609
|
onWsEvent(event) {
|
|
3610
|
+
if (!this.runs.admits(event))
|
|
3611
|
+
return;
|
|
3266
3612
|
const current = this.threads();
|
|
3267
3613
|
const next = applyWsEvent(current ?? [], event);
|
|
3268
3614
|
if (current || next.length)
|
|
@@ -3288,7 +3634,8 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
3288
3634
|
version: "22.2.0",
|
|
3289
3635
|
ngImport: i0,
|
|
3290
3636
|
type: CortexThreadService,
|
|
3291
|
-
decorators: [{ type: Injectable }]
|
|
3637
|
+
decorators: [{ type: Injectable }],
|
|
3638
|
+
ctorParameters: () => []
|
|
3292
3639
|
});
|
|
3293
3640
|
var CortexChatService = class CortexChatService2 {
|
|
3294
3641
|
selectedThread = computed(() => {
|
|
@@ -3307,7 +3654,11 @@ var CortexChatService = class CortexChatService2 {
|
|
|
3307
3654
|
return false;
|
|
3308
3655
|
return unansweredToolCalls(chat.messages()).length > 0;
|
|
3309
3656
|
}, ...ngDevMode ? [{ debugName: "hasPendingToolCalls" }] : []);
|
|
3657
|
+
awaitsApproval = computed(() => awaitsApproval(this.messages()), ...ngDevMode ? [{ debugName: "awaitsApproval" }] : []);
|
|
3658
|
+
turnFailure = signal(undefined, ...ngDevMode ? [{ debugName: "turnFailure" }] : []);
|
|
3659
|
+
returnedDraft = signal(undefined, ...ngDevMode ? [{ debugName: "returnedDraft" }] : []);
|
|
3310
3660
|
capabilities = signal(undefined, ...ngDevMode ? [{ debugName: "capabilities" }] : []);
|
|
3661
|
+
unanswered = signal(undefined, ...ngDevMode ? [{ debugName: "unanswered" }] : []);
|
|
3311
3662
|
events = new Subject;
|
|
3312
3663
|
selectedThreadSnapshot = signal(undefined, ...ngDevMode ? [{ debugName: "selectedThreadSnapshot" }] : []);
|
|
3313
3664
|
config = inject(CORTEX_CONFIG);
|
|
@@ -3336,7 +3687,14 @@ var CortexChatService = class CortexChatService2 {
|
|
|
3336
3687
|
loadCapabilities() {
|
|
3337
3688
|
this.stopCapabilities?.();
|
|
3338
3689
|
this.capabilities.set(undefined);
|
|
3339
|
-
this.
|
|
3690
|
+
this.unanswered.set(undefined);
|
|
3691
|
+
this.stopCapabilities = askUntilAnswered(() => this.api.getCapabilities(), {
|
|
3692
|
+
onAnswered: (capabilities) => {
|
|
3693
|
+
this.capabilities.set(capabilities);
|
|
3694
|
+
this.unanswered.set(undefined);
|
|
3695
|
+
},
|
|
3696
|
+
onMissed: (why) => this.unanswered.set(why)
|
|
3697
|
+
});
|
|
3340
3698
|
}
|
|
3341
3699
|
get events$() {
|
|
3342
3700
|
return this.events.asObservable();
|
|
@@ -3357,6 +3715,8 @@ var CortexChatService = class CortexChatService2 {
|
|
|
3357
3715
|
this.chatInjector = undefined;
|
|
3358
3716
|
this.lifecycle = undefined;
|
|
3359
3717
|
this.isLoadingMessages.set(false);
|
|
3718
|
+
this.turnFailure.set(undefined);
|
|
3719
|
+
this.returnedDraft.set(undefined);
|
|
3360
3720
|
const previousThread = this.selectedThread();
|
|
3361
3721
|
if (!previousThread && !this.chat())
|
|
3362
3722
|
return;
|
|
@@ -3380,11 +3740,11 @@ var CortexChatService = class CortexChatService2 {
|
|
|
3380
3740
|
return this.pendingThreadCreation;
|
|
3381
3741
|
}
|
|
3382
3742
|
send(prompt, attachments = []) {
|
|
3383
|
-
if (this.isAgentWorking() || this.
|
|
3743
|
+
if (this.isAgentWorking() || this.awaitsApproval())
|
|
3384
3744
|
return of();
|
|
3385
3745
|
return this.ensureThread().pipe(tap(() => {
|
|
3386
3746
|
this.events.next("onSend");
|
|
3387
|
-
this.lifecycle?.sendStarted();
|
|
3747
|
+
this.lifecycle?.sendStarted(prompt);
|
|
3388
3748
|
}), switchMap(() => {
|
|
3389
3749
|
const message = {
|
|
3390
3750
|
id: randomId(),
|
|
@@ -3403,27 +3763,24 @@ var CortexChatService = class CortexChatService2 {
|
|
|
3403
3763
|
}
|
|
3404
3764
|
addToolResult(toolCallId, toolName, output2) {
|
|
3405
3765
|
const chat = this.chat();
|
|
3406
|
-
|
|
3766
|
+
const lifecycle = this.lifecycle;
|
|
3767
|
+
if (!chat || !lifecycle)
|
|
3407
3768
|
return Promise.resolve();
|
|
3408
|
-
return chat.addToolResult({
|
|
3769
|
+
return lifecycle.deliverAnswer(() => chat.addToolResult({
|
|
3409
3770
|
toolCallId,
|
|
3410
3771
|
tool: toolName,
|
|
3411
3772
|
output: output2
|
|
3412
|
-
})
|
|
3413
|
-
const threadId = this.selectedThread()?.id;
|
|
3414
|
-
if (threadId)
|
|
3415
|
-
this.refreshMessages(threadId);
|
|
3416
|
-
throw error;
|
|
3417
|
-
});
|
|
3773
|
+
}));
|
|
3418
3774
|
}
|
|
3419
3775
|
respondToApproval(approvalId, approved) {
|
|
3420
3776
|
const chat = this.chat();
|
|
3421
|
-
|
|
3777
|
+
const lifecycle = this.lifecycle;
|
|
3778
|
+
if (!chat || !lifecycle)
|
|
3422
3779
|
return Promise.resolve();
|
|
3423
|
-
return respondToApproval({
|
|
3780
|
+
return lifecycle.deliverAnswer(() => respondToApproval({
|
|
3424
3781
|
interrupts: chat.interrupts(),
|
|
3425
3782
|
addToolApprovalResponse: chat.addToolApprovalResponse
|
|
3426
|
-
}, approvalId, approved);
|
|
3783
|
+
}, approvalId, approved));
|
|
3427
3784
|
}
|
|
3428
3785
|
async abort() {
|
|
3429
3786
|
const chat = this.chat();
|
|
@@ -3434,8 +3791,10 @@ var CortexChatService = class CortexChatService2 {
|
|
|
3434
3791
|
const { aborted } = await this.api.abortStream(threadId).catch(() => ({ aborted: false }));
|
|
3435
3792
|
if (this.chat() !== chat)
|
|
3436
3793
|
return;
|
|
3437
|
-
if (aborted)
|
|
3794
|
+
if (aborted) {
|
|
3438
3795
|
this.lifecycle?.abortConfirmed();
|
|
3796
|
+
return;
|
|
3797
|
+
}
|
|
3439
3798
|
}
|
|
3440
3799
|
chat.stop();
|
|
3441
3800
|
}
|
|
@@ -3450,6 +3809,8 @@ var CortexChatService = class CortexChatService2 {
|
|
|
3450
3809
|
const injector = createEnvironmentInjector([], this.environmentInjector, "cortex-chat");
|
|
3451
3810
|
this.chatInjector = injector;
|
|
3452
3811
|
this.selectedThreadSnapshot.set(thread);
|
|
3812
|
+
this.turnFailure.set(undefined);
|
|
3813
|
+
this.returnedDraft.set(undefined);
|
|
3453
3814
|
const lifecycle = createTurnLifecycle({
|
|
3454
3815
|
threadId: thread.id,
|
|
3455
3816
|
isAlive: () => this.chatInjector === injector,
|
|
@@ -3462,9 +3823,20 @@ var CortexChatService = class CortexChatService2 {
|
|
|
3462
3823
|
error: reject
|
|
3463
3824
|
});
|
|
3464
3825
|
}),
|
|
3465
|
-
refreshMessages: () => this.refreshMessages(thread.id),
|
|
3466
|
-
onTurnFinished: () =>
|
|
3467
|
-
|
|
3826
|
+
refreshMessages: (stale) => this.refreshMessages(thread.id, stale),
|
|
3827
|
+
onTurnFinished: () => {
|
|
3828
|
+
this.events.next("onFinish");
|
|
3829
|
+
this.threadService.followTitle(() => this.selectedThread());
|
|
3830
|
+
},
|
|
3831
|
+
onSendFailed: () => this.events.next("onError"),
|
|
3832
|
+
setTurnFailed: (failure) => {
|
|
3833
|
+
if (this.chatInjector === injector)
|
|
3834
|
+
this.turnFailure.set(failure);
|
|
3835
|
+
},
|
|
3836
|
+
returnDraft: (prompt) => {
|
|
3837
|
+
if (this.chatInjector === injector)
|
|
3838
|
+
this.returnedDraft.set(prompt);
|
|
3839
|
+
}
|
|
3468
3840
|
});
|
|
3469
3841
|
this.lifecycle = lifecycle;
|
|
3470
3842
|
this.chat.set(runInInjectionContext(injector, () => {
|
|
@@ -3473,8 +3845,9 @@ var CortexChatService = class CortexChatService2 {
|
|
|
3473
3845
|
persistence: true,
|
|
3474
3846
|
initialMessages,
|
|
3475
3847
|
connection: this.createConnection(thread, mode, injector),
|
|
3476
|
-
onChunk: () => lifecycle.chunkArrived(),
|
|
3477
|
-
onError: () => lifecycle.streamFailed()
|
|
3848
|
+
onChunk: (chunk) => lifecycle.chunkArrived(chunk),
|
|
3849
|
+
onError: () => lifecycle.streamFailed(),
|
|
3850
|
+
onInterruptStateChange: (state) => lifecycle.interruptStateChanged(state)
|
|
3478
3851
|
});
|
|
3479
3852
|
effect(() => {
|
|
3480
3853
|
const isLoading = chat.isLoading();
|
|
@@ -3490,7 +3863,7 @@ var CortexChatService = class CortexChatService2 {
|
|
|
3490
3863
|
this.mountChat(thread, "reload");
|
|
3491
3864
|
return;
|
|
3492
3865
|
}
|
|
3493
|
-
this.
|
|
3866
|
+
this.lifecycle?.readBack();
|
|
3494
3867
|
}
|
|
3495
3868
|
createConnection(thread, mode, injector) {
|
|
3496
3869
|
return createCortexConnection({
|
|
@@ -3506,24 +3879,32 @@ var CortexChatService = class CortexChatService2 {
|
|
|
3506
3879
|
if (this.chatInjector === injector)
|
|
3507
3880
|
this.lifecycle?.transcriptCarried(at);
|
|
3508
3881
|
},
|
|
3882
|
+
onStreamStarted: () => {
|
|
3883
|
+
if (this.chatInjector === injector)
|
|
3884
|
+
this.lifecycle?.streamStarted();
|
|
3885
|
+
},
|
|
3886
|
+
onRefused: (refusal) => {
|
|
3887
|
+
if (this.chatInjector === injector)
|
|
3888
|
+
this.lifecycle?.sendRefused(refusal);
|
|
3889
|
+
},
|
|
3509
3890
|
setLoadingMessages: (loading) => {
|
|
3510
3891
|
if (this.chatInjector === injector)
|
|
3511
3892
|
this.isLoadingMessages.set(loading);
|
|
3512
3893
|
}
|
|
3513
3894
|
});
|
|
3514
3895
|
}
|
|
3515
|
-
refreshMessages(threadId) {
|
|
3516
|
-
this.refreshing = this.refreshing.then(() => this.readBackMessages(threadId));
|
|
3896
|
+
refreshMessages(threadId, stale) {
|
|
3897
|
+
this.refreshing = this.refreshing.then(() => this.readBackMessages(threadId, stale));
|
|
3517
3898
|
return this.refreshing;
|
|
3518
3899
|
}
|
|
3519
|
-
async readBackMessages(threadId) {
|
|
3900
|
+
async readBackMessages(threadId, stale) {
|
|
3520
3901
|
const chat = this.chat();
|
|
3521
3902
|
if (!chat || this.selectedThread()?.id !== threadId)
|
|
3522
3903
|
return;
|
|
3523
3904
|
return settleTurn({
|
|
3524
3905
|
api: this.api,
|
|
3525
3906
|
threadId,
|
|
3526
|
-
isStale: () => this.chat() !== chat,
|
|
3907
|
+
isStale: () => this.chat() !== chat || stale(),
|
|
3527
3908
|
isStreaming: () => this.isAgentWorking(),
|
|
3528
3909
|
setMessages: (messages) => {
|
|
3529
3910
|
chat.setMessages(messages);
|
|
@@ -3546,6 +3927,7 @@ var CortexChatService = class CortexChatService2 {
|
|
|
3546
3927
|
this.reattach(event.payload.thread);
|
|
3547
3928
|
break;
|
|
3548
3929
|
case "thread:messages-updated":
|
|
3930
|
+
case "thread:run-finished":
|
|
3549
3931
|
if (this.selectedThread()?.id === event.payload.thread.id)
|
|
3550
3932
|
this.lifecycle?.transcriptUpdated(event.payload.thread.updatedAt);
|
|
3551
3933
|
}
|
|
@@ -3553,7 +3935,10 @@ var CortexChatService = class CortexChatService2 {
|
|
|
3553
3935
|
subscribeToWsConnections() {
|
|
3554
3936
|
this.wsService.opened.pipe(skip(1), takeUntilDestroyed(this.destroyRef)).subscribe(() => {
|
|
3555
3937
|
this.loadCapabilities();
|
|
3556
|
-
this.threadService.reload().subscribe(() =>
|
|
3938
|
+
this.threadService.reload().subscribe((listed) => {
|
|
3939
|
+
if (listed)
|
|
3940
|
+
this.reattach();
|
|
3941
|
+
});
|
|
3557
3942
|
});
|
|
3558
3943
|
}
|
|
3559
3944
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
@@ -3618,6 +4003,10 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
3618
4003
|
});
|
|
3619
4004
|
var AttachmentQueueComponent = class AttachmentQueueComponent2 {
|
|
3620
4005
|
queue = inject(AttachmentQueueService);
|
|
4006
|
+
locale = inject(CORTEX_LOCALE);
|
|
4007
|
+
errorText(item) {
|
|
4008
|
+
return attachmentErrorText(item, this.locale());
|
|
4009
|
+
}
|
|
3621
4010
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
3622
4011
|
minVersion: "12.0.0",
|
|
3623
4012
|
version: "22.2.0",
|
|
@@ -3639,7 +4028,6 @@ var AttachmentQueueComponent = class AttachmentQueueComponent2 {
|
|
|
3639
4028
|
<div
|
|
3640
4029
|
class="cortex-attachment-chip"
|
|
3641
4030
|
[class.cortex-attachment-chip--error]="item.status === 'error'"
|
|
3642
|
-
[title]="item.status === 'error' ? ('translate_attachment_rejected' | translate) : ''"
|
|
3643
4031
|
>
|
|
3644
4032
|
@if (item.status === 'uploading' || item.status === 'deleting') {
|
|
3645
4033
|
<svg class="cortex-attachment-chip__spinner" viewBox="0 0 16 16" fill="none">
|
|
@@ -3658,6 +4046,16 @@ var AttachmentQueueComponent = class AttachmentQueueComponent2 {
|
|
|
3658
4046
|
stroke-linecap="round"
|
|
3659
4047
|
/>
|
|
3660
4048
|
</svg>
|
|
4049
|
+
} @else if (item.status === 'error') {
|
|
4050
|
+
<svg viewBox="0 0 16 16" class="cortex-attachment-chip__icon" fill="none">
|
|
4051
|
+
<circle cx="8" cy="8" r="6" stroke="currentColor" stroke-width="1.25" />
|
|
4052
|
+
<path
|
|
4053
|
+
d="M8 4.75v4M8 10.75v.5"
|
|
4054
|
+
stroke="currentColor"
|
|
4055
|
+
stroke-width="1.4"
|
|
4056
|
+
stroke-linecap="round"
|
|
4057
|
+
/>
|
|
4058
|
+
</svg>
|
|
3661
4059
|
} @else {
|
|
3662
4060
|
<svg viewBox="0 0 16 16" class="cortex-attachment-chip__icon" fill="none">
|
|
3663
4061
|
<path
|
|
@@ -3674,7 +4072,16 @@ var AttachmentQueueComponent = class AttachmentQueueComponent2 {
|
|
|
3674
4072
|
</svg>
|
|
3675
4073
|
}
|
|
3676
4074
|
|
|
3677
|
-
|
|
4075
|
+
<!-- A refused file says why on a second line, readable without hovering. -->
|
|
4076
|
+
<span class="cortex-attachment-chip__text">
|
|
4077
|
+
<!-- <bdi> orders a Latin name in Arabic without moving its line off the chip's edge. -->
|
|
4078
|
+
<span class="cortex-attachment-chip__name"
|
|
4079
|
+
><bdi>{{ item.filename }}</bdi></span
|
|
4080
|
+
>
|
|
4081
|
+
@if (item.status === 'error') {
|
|
4082
|
+
<span class="cortex-attachment-chip__reason">{{ errorText(item) }}</span>
|
|
4083
|
+
}
|
|
4084
|
+
</span>
|
|
3678
4085
|
|
|
3679
4086
|
<button
|
|
3680
4087
|
type="button"
|
|
@@ -3724,7 +4131,6 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
3724
4131
|
<div
|
|
3725
4132
|
class="cortex-attachment-chip"
|
|
3726
4133
|
[class.cortex-attachment-chip--error]="item.status === 'error'"
|
|
3727
|
-
[title]="item.status === 'error' ? ('translate_attachment_rejected' | translate) : ''"
|
|
3728
4134
|
>
|
|
3729
4135
|
@if (item.status === 'uploading' || item.status === 'deleting') {
|
|
3730
4136
|
<svg class="cortex-attachment-chip__spinner" viewBox="0 0 16 16" fill="none">
|
|
@@ -3743,6 +4149,16 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
3743
4149
|
stroke-linecap="round"
|
|
3744
4150
|
/>
|
|
3745
4151
|
</svg>
|
|
4152
|
+
} @else if (item.status === 'error') {
|
|
4153
|
+
<svg viewBox="0 0 16 16" class="cortex-attachment-chip__icon" fill="none">
|
|
4154
|
+
<circle cx="8" cy="8" r="6" stroke="currentColor" stroke-width="1.25" />
|
|
4155
|
+
<path
|
|
4156
|
+
d="M8 4.75v4M8 10.75v.5"
|
|
4157
|
+
stroke="currentColor"
|
|
4158
|
+
stroke-width="1.4"
|
|
4159
|
+
stroke-linecap="round"
|
|
4160
|
+
/>
|
|
4161
|
+
</svg>
|
|
3746
4162
|
} @else {
|
|
3747
4163
|
<svg viewBox="0 0 16 16" class="cortex-attachment-chip__icon" fill="none">
|
|
3748
4164
|
<path
|
|
@@ -3759,7 +4175,16 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
3759
4175
|
</svg>
|
|
3760
4176
|
}
|
|
3761
4177
|
|
|
3762
|
-
|
|
4178
|
+
<!-- A refused file says why on a second line, readable without hovering. -->
|
|
4179
|
+
<span class="cortex-attachment-chip__text">
|
|
4180
|
+
<!-- <bdi> orders a Latin name in Arabic without moving its line off the chip's edge. -->
|
|
4181
|
+
<span class="cortex-attachment-chip__name"
|
|
4182
|
+
><bdi>{{ item.filename }}</bdi></span
|
|
4183
|
+
>
|
|
4184
|
+
@if (item.status === 'error') {
|
|
4185
|
+
<span class="cortex-attachment-chip__reason">{{ errorText(item) }}</span>
|
|
4186
|
+
}
|
|
4187
|
+
</span>
|
|
3763
4188
|
|
|
3764
4189
|
<button
|
|
3765
4190
|
type="button"
|
|
@@ -3789,11 +4214,15 @@ var ChatComposerComponent = class ChatComposerComponent2 {
|
|
|
3789
4214
|
chatService = inject(CortexChatService);
|
|
3790
4215
|
queue = inject(AttachmentQueueService);
|
|
3791
4216
|
locale = inject(CORTEX_LOCALE);
|
|
3792
|
-
text =
|
|
4217
|
+
text = linkedSignal({
|
|
4218
|
+
...ngDevMode ? { debugName: "text" } : {},
|
|
4219
|
+
source: this.chatService.returnedDraft,
|
|
4220
|
+
computation: (draft, previous) => previous?.value || draft || ""
|
|
4221
|
+
});
|
|
3793
4222
|
dragging = signal(false, ...ngDevMode ? [{ debugName: "dragging" }] : []);
|
|
3794
4223
|
attachmentsEnabled = computed(() => this.chatService.capabilities()?.attachments ?? false, ...ngDevMode ? [{ debugName: "attachmentsEnabled" }] : []);
|
|
3795
4224
|
acceptedTypes = ATTACHMENT_MIME_TYPES.join(",");
|
|
3796
|
-
canSend = computed(() => !this.queue.busy() && (Boolean(this.text().trim()) || this.queue.hasReady()), ...ngDevMode ? [{ debugName: "canSend" }] : []);
|
|
4225
|
+
canSend = computed(() => !this.chatService.awaitsApproval() && !this.queue.busy() && (Boolean(this.text().trim()) || this.queue.hasReady()), ...ngDevMode ? [{ debugName: "canSend" }] : []);
|
|
3797
4226
|
messageInput = viewChild("messageInput", ...ngDevMode ? [{ debugName: "messageInput" }] : []);
|
|
3798
4227
|
focusInput() {
|
|
3799
4228
|
this.messageInput()?.nativeElement.focus();
|
|
@@ -3897,7 +4326,12 @@ var ChatComposerComponent = class ChatComposerComponent2 {
|
|
|
3897
4326
|
[class.cortex-widget__textarea--disabled]="chatService.isAgentWorking()"
|
|
3898
4327
|
></textarea>
|
|
3899
4328
|
@if (chatService.isAgentWorking()) {
|
|
3900
|
-
<button
|
|
4329
|
+
<button
|
|
4330
|
+
type="button"
|
|
4331
|
+
[attr.aria-label]="'translate_stop' | translate"
|
|
4332
|
+
(click)="chatService.abort()"
|
|
4333
|
+
class="cortex-stop-btn"
|
|
4334
|
+
>
|
|
3901
4335
|
<span class="cortex-stop-btn__ring"></span>
|
|
3902
4336
|
<svg width="12" height="12" viewBox="0 0 12 12" fill="none" class="cortex-stop-btn__icon">
|
|
3903
4337
|
<rect x="1" y="1" width="10" height="10" rx="2.5" fill="currentColor" />
|
|
@@ -3933,6 +4367,8 @@ var ChatComposerComponent = class ChatComposerComponent2 {
|
|
|
3933
4367
|
}
|
|
3934
4368
|
|
|
3935
4369
|
<button
|
|
4370
|
+
type="button"
|
|
4371
|
+
[attr.aria-label]="'translate_send' | translate"
|
|
3936
4372
|
(click)="send()"
|
|
3937
4373
|
class="cortex-widget__send-btn"
|
|
3938
4374
|
[disabled]="!canSend()"
|
|
@@ -4018,7 +4454,12 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
4018
4454
|
[class.cortex-widget__textarea--disabled]="chatService.isAgentWorking()"
|
|
4019
4455
|
></textarea>
|
|
4020
4456
|
@if (chatService.isAgentWorking()) {
|
|
4021
|
-
<button
|
|
4457
|
+
<button
|
|
4458
|
+
type="button"
|
|
4459
|
+
[attr.aria-label]="'translate_stop' | translate"
|
|
4460
|
+
(click)="chatService.abort()"
|
|
4461
|
+
class="cortex-stop-btn"
|
|
4462
|
+
>
|
|
4022
4463
|
<span class="cortex-stop-btn__ring"></span>
|
|
4023
4464
|
<svg width="12" height="12" viewBox="0 0 12 12" fill="none" class="cortex-stop-btn__icon">
|
|
4024
4465
|
<rect x="1" y="1" width="10" height="10" rx="2.5" fill="currentColor" />
|
|
@@ -4054,6 +4495,8 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
4054
4495
|
}
|
|
4055
4496
|
|
|
4056
4497
|
<button
|
|
4498
|
+
type="button"
|
|
4499
|
+
[attr.aria-label]="'translate_send' | translate"
|
|
4057
4500
|
(click)="send()"
|
|
4058
4501
|
class="cortex-widget__send-btn"
|
|
4059
4502
|
[disabled]="!canSend()"
|
|
@@ -4090,9 +4533,6 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
4090
4533
|
});
|
|
4091
4534
|
var ChatHeaderComponent = class ChatHeaderComponent2 {
|
|
4092
4535
|
context = input.required(...ngDevMode ? [{ debugName: "context" }] : []);
|
|
4093
|
-
countKey(count2) {
|
|
4094
|
-
return pluralKey(count2, "translate_one_conversation", "translate_n_conversations");
|
|
4095
|
-
}
|
|
4096
4536
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
4097
4537
|
minVersion: "12.0.0",
|
|
4098
4538
|
version: "22.2.0",
|
|
@@ -4165,9 +4605,11 @@ var ChatHeaderComponent = class ChatHeaderComponent2 {
|
|
|
4165
4605
|
<h2 class="cortex-widget__threads-title">
|
|
4166
4606
|
{{ 'translate_history' | translate }}
|
|
4167
4607
|
</h2>
|
|
4168
|
-
|
|
4169
|
-
|
|
4170
|
-
|
|
4608
|
+
@if (header.threadCount !== undefined) {
|
|
4609
|
+
<p class="cortex-widget__threads-count">
|
|
4610
|
+
{{ 'translate_conversations' | translate: { count: header.threadCount } }}
|
|
4611
|
+
</p>
|
|
4612
|
+
}
|
|
4171
4613
|
</div>
|
|
4172
4614
|
<ng-container *ngTemplateOutlet="newChatButton" />
|
|
4173
4615
|
} @else {
|
|
@@ -4302,9 +4744,11 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
4302
4744
|
<h2 class="cortex-widget__threads-title">
|
|
4303
4745
|
{{ 'translate_history' | translate }}
|
|
4304
4746
|
</h2>
|
|
4305
|
-
|
|
4306
|
-
|
|
4307
|
-
|
|
4747
|
+
@if (header.threadCount !== undefined) {
|
|
4748
|
+
<p class="cortex-widget__threads-count">
|
|
4749
|
+
{{ 'translate_conversations' | translate: { count: header.threadCount } }}
|
|
4750
|
+
</p>
|
|
4751
|
+
}
|
|
4308
4752
|
</div>
|
|
4309
4753
|
<ng-container *ngTemplateOutlet="newChatButton" />
|
|
4310
4754
|
} @else {
|
|
@@ -4693,6 +5137,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
4693
5137
|
}] }
|
|
4694
5138
|
});
|
|
4695
5139
|
var MessageAbortedFlagComponent = class MessageAbortedFlagComponent2 {
|
|
5140
|
+
label = input.required(...ngDevMode ? [{ debugName: "label" }] : []);
|
|
4696
5141
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
4697
5142
|
minVersion: "12.0.0",
|
|
4698
5143
|
version: "22.2.0",
|
|
@@ -4702,11 +5147,18 @@ var MessageAbortedFlagComponent = class MessageAbortedFlagComponent2 {
|
|
|
4702
5147
|
target: i0.ɵɵFactoryTarget.Component
|
|
4703
5148
|
});
|
|
4704
5149
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
4705
|
-
minVersion: "
|
|
5150
|
+
minVersion: "17.1.0",
|
|
4706
5151
|
version: "22.2.0",
|
|
4707
5152
|
type: MessageAbortedFlagComponent2,
|
|
4708
5153
|
isStandalone: true,
|
|
4709
5154
|
selector: "cortex-message-aborted-flag",
|
|
5155
|
+
inputs: { label: {
|
|
5156
|
+
classPropertyName: "label",
|
|
5157
|
+
publicName: "label",
|
|
5158
|
+
isSignal: true,
|
|
5159
|
+
isRequired: true,
|
|
5160
|
+
transformFunction: null
|
|
5161
|
+
} },
|
|
4710
5162
|
host: { classAttribute: "cortex-aborted-flag" },
|
|
4711
5163
|
ngImport: i0,
|
|
4712
5164
|
template: `<span class="cortex-aborted-flag__line"></span>
|
|
@@ -4714,7 +5166,7 @@ var MessageAbortedFlagComponent = class MessageAbortedFlagComponent2 {
|
|
|
4714
5166
|
<svg class="cortex-aborted-flag__icon" width="12" height="12" viewBox="0 0 12 12" fill="none">
|
|
4715
5167
|
<path d="M6 1.5v5M6 8.75v.5" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" />
|
|
4716
5168
|
</svg>
|
|
4717
|
-
{{
|
|
5169
|
+
{{ label() | translate }}
|
|
4718
5170
|
</span>
|
|
4719
5171
|
<span class="cortex-aborted-flag__line"></span>
|
|
4720
5172
|
`,
|
|
@@ -4745,12 +5197,20 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
4745
5197
|
<svg class="cortex-aborted-flag__icon" width="12" height="12" viewBox="0 0 12 12" fill="none">
|
|
4746
5198
|
<path d="M6 1.5v5M6 8.75v.5" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" />
|
|
4747
5199
|
</svg>
|
|
4748
|
-
{{
|
|
5200
|
+
{{ label() | translate }}
|
|
4749
5201
|
</span>
|
|
4750
5202
|
<span class="cortex-aborted-flag__line"></span>
|
|
4751
5203
|
`
|
|
4752
5204
|
}]
|
|
4753
|
-
}]
|
|
5205
|
+
}],
|
|
5206
|
+
propDecorators: { label: [{
|
|
5207
|
+
type: i0.Input,
|
|
5208
|
+
args: [{
|
|
5209
|
+
isSignal: true,
|
|
5210
|
+
alias: "label",
|
|
5211
|
+
required: true
|
|
5212
|
+
}]
|
|
5213
|
+
}] }
|
|
4754
5214
|
});
|
|
4755
5215
|
var MessageAttachmentsComponent = class MessageAttachmentsComponent2 {
|
|
4756
5216
|
attachments = input.required(...ngDevMode ? [{ debugName: "attachments" }] : []);
|
|
@@ -5355,11 +5815,13 @@ var MessageLlmInspectorComponent = class MessageLlmInspectorComponent2 {
|
|
|
5355
5815
|
activeTab = signal({}, ...ngDevMode ? [{ debugName: "activeTab" }] : []);
|
|
5356
5816
|
loaded = false;
|
|
5357
5817
|
api = inject(CORTEX_API);
|
|
5818
|
+
chatService = inject(CortexChatService);
|
|
5358
5819
|
async toggle() {
|
|
5359
|
-
|
|
5820
|
+
const threadId = this.chatService.selectedThread()?.id;
|
|
5821
|
+
if (!this.loaded && threadId) {
|
|
5360
5822
|
this.loading.set(true);
|
|
5361
5823
|
try {
|
|
5362
|
-
this.requests.set(await this.api.listLlmRequests(this.messageId()));
|
|
5824
|
+
this.requests.set(await this.api.listLlmRequests(threadId, this.messageId()));
|
|
5363
5825
|
} finally {
|
|
5364
5826
|
this.loading.set(false);
|
|
5365
5827
|
this.loaded = true;
|
|
@@ -6648,7 +7110,7 @@ var MediaBlockComponent = class MediaBlockComponent2 {
|
|
|
6648
7110
|
/>
|
|
6649
7111
|
</ng-template>
|
|
6650
7112
|
@if (debugMode() && (failure() || showSource())) {
|
|
6651
|
-
<pre class="cortex-media-block__source">{{ source() }}</pre>
|
|
7113
|
+
<pre dir="ltr" class="cortex-media-block__source">{{ source() }}</pre>
|
|
6652
7114
|
}
|
|
6653
7115
|
`,
|
|
6654
7116
|
dependencies: [
|
|
@@ -6779,7 +7241,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
6779
7241
|
/>
|
|
6780
7242
|
</ng-template>
|
|
6781
7243
|
@if (debugMode() && (failure() || showSource())) {
|
|
6782
|
-
<pre class="cortex-media-block__source">{{ source() }}</pre>
|
|
7244
|
+
<pre dir="ltr" class="cortex-media-block__source">{{ source() }}</pre>
|
|
6783
7245
|
}
|
|
6784
7246
|
`
|
|
6785
7247
|
}]
|
|
@@ -7386,7 +7848,7 @@ var MessageReasoningPartComponent = class MessageReasoningPartComponent2 {
|
|
|
7386
7848
|
|
|
7387
7849
|
<div class="cortex-reasoning-details__body">
|
|
7388
7850
|
<div class="cortex-reasoning-details__content">
|
|
7389
|
-
<pre class="cortex-reasoning-details__pre">{{
|
|
7851
|
+
<pre dir="auto" class="cortex-reasoning-details__pre">{{
|
|
7390
7852
|
p.content.trim() ? p.content : ('translate_no_reasoning' | translate)
|
|
7391
7853
|
}}</pre>
|
|
7392
7854
|
</div>
|
|
@@ -7468,7 +7930,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
7468
7930
|
|
|
7469
7931
|
<div class="cortex-reasoning-details__body">
|
|
7470
7932
|
<div class="cortex-reasoning-details__content">
|
|
7471
|
-
<pre class="cortex-reasoning-details__pre">{{
|
|
7933
|
+
<pre dir="auto" class="cortex-reasoning-details__pre">{{
|
|
7472
7934
|
p.content.trim() ? p.content : ('translate_no_reasoning' | translate)
|
|
7473
7935
|
}}</pre>
|
|
7474
7936
|
</div>
|
|
@@ -8200,7 +8662,7 @@ var ApprovalCardComponent = class ApprovalCardComponent2 {
|
|
|
8200
8662
|
outcome = computed(() => toolCallAnimation(this.toolCallPart()), ...ngDevMode ? [{ debugName: "outcome" }] : []);
|
|
8201
8663
|
sentenceId = computed(() => `cortex-approval-${this.toolCallPart().id}`, ...ngDevMode ? [{ debugName: "sentenceId" }] : []);
|
|
8202
8664
|
respond(approved) {
|
|
8203
|
-
this.chatService.respondToApproval(approvalIdOf(this.toolCallPart()), approved);
|
|
8665
|
+
this.chatService.respondToApproval(approvalIdOf(this.toolCallPart()), approved).catch(() => {});
|
|
8204
8666
|
}
|
|
8205
8667
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
8206
8668
|
minVersion: "12.0.0",
|
|
@@ -8447,10 +8909,10 @@ var ClientToolEmbedComponent = class ClientToolEmbedComponent2 {
|
|
|
8447
8909
|
const state = this.state();
|
|
8448
8910
|
return state.phase === "embedded" && state.surface === "modal";
|
|
8449
8911
|
}, ...ngDevMode ? [{ debugName: "isModal" }] : []);
|
|
8450
|
-
|
|
8912
|
+
keepsOwnOrigin = computed(() => {
|
|
8451
8913
|
const state = this.state();
|
|
8452
|
-
return state.phase === "embedded"
|
|
8453
|
-
}, ...ngDevMode ? [{ debugName: "
|
|
8914
|
+
return state.phase === "embedded" && embedSandbox(state.embedUrl, window.location.origin, this.trustSameOriginEmbeds).includes("allow-same-origin");
|
|
8915
|
+
}, ...ngDevMode ? [{ debugName: "keepsOwnOrigin" }] : []);
|
|
8454
8916
|
config = inject(CORTEX_CONFIG);
|
|
8455
8917
|
trustSameOriginEmbeds;
|
|
8456
8918
|
api = inject(CORTEX_API);
|
|
@@ -8581,15 +9043,28 @@ var ClientToolEmbedComponent = class ClientToolEmbedComponent2 {
|
|
|
8581
9043
|
{{ 'translate_client_tool_cancel' | translate }}
|
|
8582
9044
|
</button>
|
|
8583
9045
|
</div>
|
|
9046
|
+
<!-- Angular takes an iframe's sandbox only as a static attribute, so each
|
|
9047
|
+
grant set embedSandbox yields is its own frame. -->
|
|
8584
9048
|
@if (embedUrl(); as url) {
|
|
8585
|
-
|
|
8586
|
-
|
|
8587
|
-
|
|
8588
|
-
|
|
8589
|
-
|
|
8590
|
-
|
|
8591
|
-
|
|
8592
|
-
|
|
9049
|
+
@if (keepsOwnOrigin()) {
|
|
9050
|
+
<iframe
|
|
9051
|
+
#embedFrame
|
|
9052
|
+
class="cortex-client-tool-embed__frame"
|
|
9053
|
+
[src]="url"
|
|
9054
|
+
sandbox="allow-scripts allow-forms allow-popups allow-same-origin"
|
|
9055
|
+
[title]="'translate_client_tool_title' | translate"
|
|
9056
|
+
(load)="checkFrameOrigin($event)"
|
|
9057
|
+
></iframe>
|
|
9058
|
+
} @else {
|
|
9059
|
+
<iframe
|
|
9060
|
+
#embedFrame
|
|
9061
|
+
class="cortex-client-tool-embed__frame"
|
|
9062
|
+
[src]="url"
|
|
9063
|
+
sandbox="allow-scripts allow-forms allow-popups"
|
|
9064
|
+
[title]="'translate_client_tool_title' | translate"
|
|
9065
|
+
(load)="checkFrameOrigin($event)"
|
|
9066
|
+
></iframe>
|
|
9067
|
+
}
|
|
8593
9068
|
} @else if (s.phase === 'error') {
|
|
8594
9069
|
<div class="cortex-client-tool-embed__status">
|
|
8595
9070
|
<span>{{ 'translate_client_tool_failed' | translate }}</span>
|
|
@@ -8664,15 +9139,28 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
8664
9139
|
{{ 'translate_client_tool_cancel' | translate }}
|
|
8665
9140
|
</button>
|
|
8666
9141
|
</div>
|
|
9142
|
+
<!-- Angular takes an iframe's sandbox only as a static attribute, so each
|
|
9143
|
+
grant set embedSandbox yields is its own frame. -->
|
|
8667
9144
|
@if (embedUrl(); as url) {
|
|
8668
|
-
|
|
8669
|
-
|
|
8670
|
-
|
|
8671
|
-
|
|
8672
|
-
|
|
8673
|
-
|
|
8674
|
-
|
|
8675
|
-
|
|
9145
|
+
@if (keepsOwnOrigin()) {
|
|
9146
|
+
<iframe
|
|
9147
|
+
#embedFrame
|
|
9148
|
+
class="cortex-client-tool-embed__frame"
|
|
9149
|
+
[src]="url"
|
|
9150
|
+
sandbox="allow-scripts allow-forms allow-popups allow-same-origin"
|
|
9151
|
+
[title]="'translate_client_tool_title' | translate"
|
|
9152
|
+
(load)="checkFrameOrigin($event)"
|
|
9153
|
+
></iframe>
|
|
9154
|
+
} @else {
|
|
9155
|
+
<iframe
|
|
9156
|
+
#embedFrame
|
|
9157
|
+
class="cortex-client-tool-embed__frame"
|
|
9158
|
+
[src]="url"
|
|
9159
|
+
sandbox="allow-scripts allow-forms allow-popups"
|
|
9160
|
+
[title]="'translate_client_tool_title' | translate"
|
|
9161
|
+
(load)="checkFrameOrigin($event)"
|
|
9162
|
+
></iframe>
|
|
9163
|
+
}
|
|
8676
9164
|
} @else if (s.phase === 'error') {
|
|
8677
9165
|
<div class="cortex-client-tool-embed__status">
|
|
8678
9166
|
<span>{{ 'translate_client_tool_failed' | translate }}</span>
|
|
@@ -9207,7 +9695,7 @@ var MessageToolCallAnimatedComponent = class MessageToolCallAnimatedComponent2 {
|
|
|
9207
9695
|
}, ...ngDevMode ? [{ debugName: "mountedComponent" }] : []);
|
|
9208
9696
|
clientToolFallback = signal(false, ...ngDevMode ? [{ debugName: "clientToolFallback" }] : []);
|
|
9209
9697
|
owed = computed(() => this.toolCallPart().state === "input-complete" && !this.chatService.isAgentWorking(), ...ngDevMode ? [{ debugName: "owed" }] : []);
|
|
9210
|
-
showClientTool = computed(() => !this.clientToolFallback() && this.owed(), ...ngDevMode ? [{ debugName: "showClientTool" }] : []);
|
|
9698
|
+
showClientTool = computed(() => !this.clientToolFallback() && this.owed() && toolCallMetadataOf(this.toolCallPart())?.embed !== undefined, ...ngDevMode ? [{ debugName: "showClientTool" }] : []);
|
|
9211
9699
|
approvalRequested = computed(() => this.toolCallPart().state === "approval-requested" && !this.chatService.isAgentWorking(), ...ngDevMode ? [{ debugName: "approvalRequested" }] : []);
|
|
9212
9700
|
animation = computed(() => toolCallAnimation(this.toolCallPart()), ...ngDevMode ? [{ debugName: "animation" }] : []);
|
|
9213
9701
|
animState = computed(() => this.animation().state, ...ngDevMode ? [{ debugName: "animState" }] : []);
|
|
@@ -9216,8 +9704,8 @@ var MessageToolCallAnimatedComponent = class MessageToolCallAnimatedComponent2 {
|
|
|
9216
9704
|
displayTitleKey = computed(() => this.animation().titleKey, ...ngDevMode ? [{ debugName: "displayTitleKey" }] : []);
|
|
9217
9705
|
statement = computed(() => this.animation().statement, ...ngDevMode ? [{ debugName: "statement" }] : []);
|
|
9218
9706
|
rowsLabel = computed(() => {
|
|
9219
|
-
const
|
|
9220
|
-
return
|
|
9707
|
+
const rows = this.animation().rows;
|
|
9708
|
+
return rows === undefined ? undefined : translate(this.locale(), "translate_rows", { count: rows });
|
|
9221
9709
|
}, ...ngDevMode ? [{ debugName: "rowsLabel" }] : []);
|
|
9222
9710
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
9223
9711
|
minVersion: "12.0.0",
|
|
@@ -9502,9 +9990,6 @@ var ToolAnimationComponent = class ToolAnimationComponent2 {
|
|
|
9502
9990
|
template: `@let toolPart = toolCallPart();
|
|
9503
9991
|
|
|
9504
9992
|
@switch (settled() ? '' : toolPart.name) {
|
|
9505
|
-
@case ('queryGraph') {
|
|
9506
|
-
<cortex-subtle-activity activity="graph" />
|
|
9507
|
-
}
|
|
9508
9993
|
@case ('executeCode') {
|
|
9509
9994
|
<cortex-subtle-activity activity="code" />
|
|
9510
9995
|
}
|
|
@@ -9543,9 +10028,6 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
9543
10028
|
template: `@let toolPart = toolCallPart();
|
|
9544
10029
|
|
|
9545
10030
|
@switch (settled() ? '' : toolPart.name) {
|
|
9546
|
-
@case ('queryGraph') {
|
|
9547
|
-
<cortex-subtle-activity activity="graph" />
|
|
9548
|
-
}
|
|
9549
10031
|
@case ('executeCode') {
|
|
9550
10032
|
<cortex-subtle-activity activity="code" />
|
|
9551
10033
|
}
|
|
@@ -10242,11 +10724,9 @@ var MessageBodyComponent = class MessageBodyComponent2 {
|
|
|
10242
10724
|
const mark = this.fold()?.get(part);
|
|
10243
10725
|
if (mark?.kind !== "more")
|
|
10244
10726
|
return;
|
|
10245
|
-
const key = pluralKey(mark.count, "translate_one_more_step", "translate_n_more_steps");
|
|
10246
10727
|
return {
|
|
10247
10728
|
runId: mark.runId,
|
|
10248
|
-
count: mark.count
|
|
10249
|
-
key
|
|
10729
|
+
count: mark.count
|
|
10250
10730
|
};
|
|
10251
10731
|
}
|
|
10252
10732
|
tokenUsage = computed(() => this.metadata()?.tokenUsage, ...ngDevMode ? [{ debugName: "tokenUsage" }] : []);
|
|
@@ -10345,7 +10825,7 @@ var MessageBodyComponent = class MessageBodyComponent2 {
|
|
|
10345
10825
|
[class.cortex-message-part--animated]="animate()"
|
|
10346
10826
|
(click)="openRun.emit(folded.runId)"
|
|
10347
10827
|
>
|
|
10348
|
-
{{
|
|
10828
|
+
{{ 'translate_more_steps' | translate: { count: folded.count } }}
|
|
10349
10829
|
</button>
|
|
10350
10830
|
}
|
|
10351
10831
|
@if ($index === actionsAfterPart()) {
|
|
@@ -10358,7 +10838,7 @@ var MessageBodyComponent = class MessageBodyComponent2 {
|
|
|
10358
10838
|
}
|
|
10359
10839
|
|
|
10360
10840
|
@if (metadata()?.isAborted) {
|
|
10361
|
-
<cortex-message-aborted-flag />
|
|
10841
|
+
<cortex-message-aborted-flag label="translate_aborted" />
|
|
10362
10842
|
}
|
|
10363
10843
|
|
|
10364
10844
|
@if (actionsAfterPart() === -1) {
|
|
@@ -10398,7 +10878,8 @@ var MessageBodyComponent = class MessageBodyComponent2 {
|
|
|
10398
10878
|
{
|
|
10399
10879
|
kind: "component",
|
|
10400
10880
|
type: MessageAbortedFlagComponent,
|
|
10401
|
-
selector: "cortex-message-aborted-flag"
|
|
10881
|
+
selector: "cortex-message-aborted-flag",
|
|
10882
|
+
inputs: ["label"]
|
|
10402
10883
|
},
|
|
10403
10884
|
{
|
|
10404
10885
|
kind: "component",
|
|
@@ -10494,7 +10975,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
10494
10975
|
[class.cortex-message-part--animated]="animate()"
|
|
10495
10976
|
(click)="openRun.emit(folded.runId)"
|
|
10496
10977
|
>
|
|
10497
|
-
{{
|
|
10978
|
+
{{ 'translate_more_steps' | translate: { count: folded.count } }}
|
|
10498
10979
|
</button>
|
|
10499
10980
|
}
|
|
10500
10981
|
@if ($index === actionsAfterPart()) {
|
|
@@ -10507,7 +10988,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
10507
10988
|
}
|
|
10508
10989
|
|
|
10509
10990
|
@if (metadata()?.isAborted) {
|
|
10510
|
-
<cortex-message-aborted-flag />
|
|
10991
|
+
<cortex-message-aborted-flag label="translate_aborted" />
|
|
10511
10992
|
}
|
|
10512
10993
|
|
|
10513
10994
|
@if (actionsAfterPart() === -1) {
|
|
@@ -10758,6 +11239,7 @@ var MessageComponent = class MessageComponent2 {
|
|
|
10758
11239
|
debugMode: this.debugMode(),
|
|
10759
11240
|
isStreaming: this.isStreaming()
|
|
10760
11241
|
}), ...ngDevMode ? [{ debugName: "visibleParts" }] : []);
|
|
11242
|
+
drawsBody = computed(() => drawsMessageBody(this.visibleParts(), this.metadata()), ...ngDevMode ? [{ debugName: "drawsBody" }] : []);
|
|
10761
11243
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
10762
11244
|
minVersion: "12.0.0",
|
|
10763
11245
|
version: "22.2.0",
|
|
@@ -10825,7 +11307,7 @@ var MessageComponent = class MessageComponent2 {
|
|
|
10825
11307
|
template: `<!-- A firing's message reaches the SDK as a user turn; the envelope says what it really was. -->
|
|
10826
11308
|
@if (metadata()?.trigger; as firing) {
|
|
10827
11309
|
<cortex-trigger-block [firing]="firing" [debugMode]="debugMode()" />
|
|
10828
|
-
} @else if (
|
|
11310
|
+
} @else if (drawsBody()) {
|
|
10829
11311
|
<cortex-message-body
|
|
10830
11312
|
[message]="message()"
|
|
10831
11313
|
[parts]="visibleParts()"
|
|
@@ -10883,7 +11365,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
10883
11365
|
template: `<!-- A firing's message reaches the SDK as a user turn; the envelope says what it really was. -->
|
|
10884
11366
|
@if (metadata()?.trigger; as firing) {
|
|
10885
11367
|
<cortex-trigger-block [firing]="firing" [debugMode]="debugMode()" />
|
|
10886
|
-
} @else if (
|
|
11368
|
+
} @else if (drawsBody()) {
|
|
10887
11369
|
<cortex-message-body
|
|
10888
11370
|
[message]="message()"
|
|
10889
11371
|
[parts]="visibleParts()"
|
|
@@ -10969,6 +11451,7 @@ var MessageListComponent = class MessageListComponent2 {
|
|
|
10969
11451
|
animateNewParts = signal(false, ...ngDevMode ? [{ debugName: "animateNewParts" }] : []);
|
|
10970
11452
|
chatService = inject(CortexChatService);
|
|
10971
11453
|
config = inject(CORTEX_CONFIG);
|
|
11454
|
+
failureLabel = failureLabel;
|
|
10972
11455
|
openedRuns = signal(/* @__PURE__ */ new Set, ...ngDevMode ? [{ debugName: "openedRuns" }] : []);
|
|
10973
11456
|
fold = toolCallFolder();
|
|
10974
11457
|
foldable = computed(() => {
|
|
@@ -11139,6 +11622,14 @@ var MessageListComponent = class MessageListComponent2 {
|
|
|
11139
11622
|
(openRun)="openRun($event)"
|
|
11140
11623
|
/>
|
|
11141
11624
|
}
|
|
11625
|
+
@if (chatService.turnFailure(); as failure) {
|
|
11626
|
+
<cortex-message-aborted-flag [label]="failureLabel(failure)" />
|
|
11627
|
+
<!-- The reason may name the model provider's answer: shown only where
|
|
11628
|
+
the debug view is offered. -->
|
|
11629
|
+
@if (config().showDebugButton && failure.reason) {
|
|
11630
|
+
<p class="cortex-aborted-flag__reason">{{ failure.reason }}</p>
|
|
11631
|
+
}
|
|
11632
|
+
}
|
|
11142
11633
|
@if (chatService.isAgentWorking() && !frontier()) {
|
|
11143
11634
|
<div class="cortex-working-thinking" data-cortex-frontier>
|
|
11144
11635
|
<cortex-subtle-activity activity="reasoning" />
|
|
@@ -11165,25 +11656,34 @@ var MessageListComponent = class MessageListComponent2 {
|
|
|
11165
11656
|
</div>
|
|
11166
11657
|
</div>
|
|
11167
11658
|
`,
|
|
11168
|
-
dependencies: [
|
|
11169
|
-
|
|
11170
|
-
|
|
11171
|
-
|
|
11172
|
-
|
|
11173
|
-
"
|
|
11174
|
-
|
|
11175
|
-
|
|
11176
|
-
"
|
|
11177
|
-
|
|
11178
|
-
"
|
|
11179
|
-
|
|
11180
|
-
|
|
11181
|
-
|
|
11182
|
-
|
|
11183
|
-
|
|
11184
|
-
|
|
11185
|
-
|
|
11186
|
-
|
|
11659
|
+
dependencies: [
|
|
11660
|
+
{
|
|
11661
|
+
kind: "component",
|
|
11662
|
+
type: MessageAbortedFlagComponent,
|
|
11663
|
+
selector: "cortex-message-aborted-flag",
|
|
11664
|
+
inputs: ["label"]
|
|
11665
|
+
},
|
|
11666
|
+
{
|
|
11667
|
+
kind: "component",
|
|
11668
|
+
type: MessageComponent,
|
|
11669
|
+
selector: "cortex-message",
|
|
11670
|
+
inputs: [
|
|
11671
|
+
"message",
|
|
11672
|
+
"debugMode",
|
|
11673
|
+
"animate",
|
|
11674
|
+
"fold",
|
|
11675
|
+
"workingTurn",
|
|
11676
|
+
"frontier"
|
|
11677
|
+
],
|
|
11678
|
+
outputs: ["openRun"]
|
|
11679
|
+
},
|
|
11680
|
+
{
|
|
11681
|
+
kind: "component",
|
|
11682
|
+
type: SubtleActivityComponent,
|
|
11683
|
+
selector: "cortex-subtle-activity",
|
|
11684
|
+
inputs: ["activity"]
|
|
11685
|
+
}
|
|
11686
|
+
],
|
|
11187
11687
|
changeDetection: i0.ChangeDetectionStrategy.OnPush,
|
|
11188
11688
|
encapsulation: i0.ViewEncapsulation.None
|
|
11189
11689
|
});
|
|
@@ -11199,7 +11699,11 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
11199
11699
|
selector: "cortex-message-list",
|
|
11200
11700
|
changeDetection: ChangeDetectionStrategy2.OnPush,
|
|
11201
11701
|
encapsulation: ViewEncapsulation2.None,
|
|
11202
|
-
imports: [
|
|
11702
|
+
imports: [
|
|
11703
|
+
MessageAbortedFlagComponent,
|
|
11704
|
+
MessageComponent,
|
|
11705
|
+
SubtleActivityComponent
|
|
11706
|
+
],
|
|
11203
11707
|
template: `<div class="cortex-message-list" #messagesContainer (scroll)="onScroll()">
|
|
11204
11708
|
<!-- The observed element: its height is the content's, free of the scroller's padding. -->
|
|
11205
11709
|
<div class="cortex-message-list__content" #messagesContent>
|
|
@@ -11214,6 +11718,14 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
11214
11718
|
(openRun)="openRun($event)"
|
|
11215
11719
|
/>
|
|
11216
11720
|
}
|
|
11721
|
+
@if (chatService.turnFailure(); as failure) {
|
|
11722
|
+
<cortex-message-aborted-flag [label]="failureLabel(failure)" />
|
|
11723
|
+
<!-- The reason may name the model provider's answer: shown only where
|
|
11724
|
+
the debug view is offered. -->
|
|
11725
|
+
@if (config().showDebugButton && failure.reason) {
|
|
11726
|
+
<p class="cortex-aborted-flag__reason">{{ failure.reason }}</p>
|
|
11727
|
+
}
|
|
11728
|
+
}
|
|
11217
11729
|
@if (chatService.isAgentWorking() && !frontier()) {
|
|
11218
11730
|
<div class="cortex-working-thinking" data-cortex-frontier>
|
|
11219
11731
|
<cortex-subtle-activity activity="reasoning" />
|
|
@@ -11347,10 +11859,6 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
11347
11859
|
var ThreadListComponent = class ThreadListComponent2 {
|
|
11348
11860
|
context = input.required(...ngDevMode ? [{ debugName: "context" }] : []);
|
|
11349
11861
|
locale = inject(CORTEX_LOCALE);
|
|
11350
|
-
deleteThread(event, threadId) {
|
|
11351
|
-
event.stopPropagation();
|
|
11352
|
-
this.context().deleteThread(threadId);
|
|
11353
|
-
}
|
|
11354
11862
|
relativeTime(iso) {
|
|
11355
11863
|
return timeLabel(iso, this.locale());
|
|
11356
11864
|
}
|
|
@@ -11396,13 +11904,11 @@ var ThreadListComponent = class ThreadListComponent2 {
|
|
|
11396
11904
|
}
|
|
11397
11905
|
}
|
|
11398
11906
|
|
|
11907
|
+
<!-- Each row is a card holding two buttons side by side: opening the thread,
|
|
11908
|
+
stretched over the whole card, and deleting it. -->
|
|
11399
11909
|
@for (thread of threads ?? []; track thread.id) {
|
|
11400
11910
|
@let isActive = thread.id === list.selectedThreadId;
|
|
11401
|
-
<
|
|
11402
|
-
(click)="list.openThread(thread)"
|
|
11403
|
-
class="cortex-widget__thread-item"
|
|
11404
|
-
[class.cortex-widget__thread-item--active]="isActive"
|
|
11405
|
-
>
|
|
11911
|
+
<div class="cortex-widget__thread-item" [class.cortex-widget__thread-item--active]="isActive">
|
|
11406
11912
|
<div class="cortex-widget__thread-icon" [class.cortex-widget__thread-icon--active]="isActive">
|
|
11407
11913
|
<svg width="14" height="14" viewBox="0 0 16 16" fill="none">
|
|
11408
11914
|
<!-- Rounded speech bubble with a tail, on the shared 16x16 icon grid. -->
|
|
@@ -11416,9 +11922,10 @@ var ThreadListComponent = class ThreadListComponent2 {
|
|
|
11416
11922
|
</svg>
|
|
11417
11923
|
</div>
|
|
11418
11924
|
|
|
11419
|
-
<
|
|
11925
|
+
<button type="button" (click)="list.openThread(thread)" class="cortex-widget__thread-info">
|
|
11420
11926
|
<div class="cortex-widget__thread-title-row">
|
|
11421
11927
|
<p
|
|
11928
|
+
dir="auto"
|
|
11422
11929
|
class="cortex-widget__thread-title"
|
|
11423
11930
|
[class.cortex-widget__thread-title--active]="isActive"
|
|
11424
11931
|
>
|
|
@@ -11440,10 +11947,12 @@ var ThreadListComponent = class ThreadListComponent2 {
|
|
|
11440
11947
|
@if (time) {
|
|
11441
11948
|
<p class="cortex-widget__thread-time">{{ time }}</p>
|
|
11442
11949
|
}
|
|
11443
|
-
</
|
|
11950
|
+
</button>
|
|
11444
11951
|
|
|
11445
11952
|
<button
|
|
11446
|
-
|
|
11953
|
+
type="button"
|
|
11954
|
+
[attr.aria-label]="'translate_delete_conversation' | translate"
|
|
11955
|
+
(click)="list.deleteThread(thread.id)"
|
|
11447
11956
|
class="cortex-widget__thread-delete"
|
|
11448
11957
|
[class.cortex-widget__thread-delete--active]="isActive"
|
|
11449
11958
|
>
|
|
@@ -11473,7 +11982,7 @@ var ThreadListComponent = class ThreadListComponent2 {
|
|
|
11473
11982
|
stroke-linejoin="round"
|
|
11474
11983
|
/>
|
|
11475
11984
|
</svg>
|
|
11476
|
-
</
|
|
11985
|
+
</div>
|
|
11477
11986
|
}
|
|
11478
11987
|
|
|
11479
11988
|
@if (threads?.length === 0) {
|
|
@@ -11551,13 +12060,11 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
11551
12060
|
}
|
|
11552
12061
|
}
|
|
11553
12062
|
|
|
12063
|
+
<!-- Each row is a card holding two buttons side by side: opening the thread,
|
|
12064
|
+
stretched over the whole card, and deleting it. -->
|
|
11554
12065
|
@for (thread of threads ?? []; track thread.id) {
|
|
11555
12066
|
@let isActive = thread.id === list.selectedThreadId;
|
|
11556
|
-
<
|
|
11557
|
-
(click)="list.openThread(thread)"
|
|
11558
|
-
class="cortex-widget__thread-item"
|
|
11559
|
-
[class.cortex-widget__thread-item--active]="isActive"
|
|
11560
|
-
>
|
|
12067
|
+
<div class="cortex-widget__thread-item" [class.cortex-widget__thread-item--active]="isActive">
|
|
11561
12068
|
<div class="cortex-widget__thread-icon" [class.cortex-widget__thread-icon--active]="isActive">
|
|
11562
12069
|
<svg width="14" height="14" viewBox="0 0 16 16" fill="none">
|
|
11563
12070
|
<!-- Rounded speech bubble with a tail, on the shared 16x16 icon grid. -->
|
|
@@ -11571,9 +12078,10 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
11571
12078
|
</svg>
|
|
11572
12079
|
</div>
|
|
11573
12080
|
|
|
11574
|
-
<
|
|
12081
|
+
<button type="button" (click)="list.openThread(thread)" class="cortex-widget__thread-info">
|
|
11575
12082
|
<div class="cortex-widget__thread-title-row">
|
|
11576
12083
|
<p
|
|
12084
|
+
dir="auto"
|
|
11577
12085
|
class="cortex-widget__thread-title"
|
|
11578
12086
|
[class.cortex-widget__thread-title--active]="isActive"
|
|
11579
12087
|
>
|
|
@@ -11595,10 +12103,12 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
11595
12103
|
@if (time) {
|
|
11596
12104
|
<p class="cortex-widget__thread-time">{{ time }}</p>
|
|
11597
12105
|
}
|
|
11598
|
-
</
|
|
12106
|
+
</button>
|
|
11599
12107
|
|
|
11600
12108
|
<button
|
|
11601
|
-
|
|
12109
|
+
type="button"
|
|
12110
|
+
[attr.aria-label]="'translate_delete_conversation' | translate"
|
|
12111
|
+
(click)="list.deleteThread(thread.id)"
|
|
11602
12112
|
class="cortex-widget__thread-delete"
|
|
11603
12113
|
[class.cortex-widget__thread-delete--active]="isActive"
|
|
11604
12114
|
>
|
|
@@ -11628,7 +12138,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
11628
12138
|
stroke-linejoin="round"
|
|
11629
12139
|
/>
|
|
11630
12140
|
</svg>
|
|
11631
|
-
</
|
|
12141
|
+
</div>
|
|
11632
12142
|
}
|
|
11633
12143
|
|
|
11634
12144
|
@if (threads?.length === 0) {
|
|
@@ -11743,6 +12253,10 @@ var CortexChatWidgetComponent = class CortexChatWidgetComponent2 {
|
|
|
11743
12253
|
descendants: true
|
|
11744
12254
|
});
|
|
11745
12255
|
slots = computed(() => new Map(this.slotDirectives().map((directive) => directive.entry())), ...ngDevMode ? [{ debugName: "slots" }] : []);
|
|
12256
|
+
unansweredNotice = computed(() => {
|
|
12257
|
+
const why = this.chatService.unanswered();
|
|
12258
|
+
return why && UNANSWERED_NOTICES[why];
|
|
12259
|
+
}, ...ngDevMode ? [{ debugName: "unansweredNotice" }] : []);
|
|
11746
12260
|
chatHeader = computed(() => this.headerContext("chat"), ...ngDevMode ? [{ debugName: "chatHeader" }] : []);
|
|
11747
12261
|
threadsHeader = computed(() => this.headerContext("threads"), ...ngDevMode ? [{ debugName: "threadsHeader" }] : []);
|
|
11748
12262
|
landing = computed(() => ({
|
|
@@ -11796,7 +12310,7 @@ var CortexChatWidgetComponent = class CortexChatWidgetComponent2 {
|
|
|
11796
12310
|
viewMode: this.viewMode(),
|
|
11797
12311
|
title: this.chatService.selectedThread()?.title ?? null,
|
|
11798
12312
|
agentName: localized(this.config().agentName, this.injector.get(CORTEX_LOCALE)()),
|
|
11799
|
-
threadCount: this.threadService.threads()?.length
|
|
12313
|
+
threadCount: this.threadService.threads()?.length,
|
|
11800
12314
|
isWorking: this.chatService.isAgentWorking(),
|
|
11801
12315
|
debug: {
|
|
11802
12316
|
shown: Boolean(this.config().showDebugButton),
|
|
@@ -11963,8 +12477,8 @@ var CortexChatWidgetComponent = class CortexChatWidgetComponent2 {
|
|
|
11963
12477
|
<div class="cortex-widget__sidebar-backdrop" (click)="closeSidebar()"></div>
|
|
11964
12478
|
</div>
|
|
11965
12479
|
|
|
11966
|
-
<!-- The widget's own parts, each standing in for a slot the
|
|
11967
|
-
Marked like a
|
|
12480
|
+
<!-- The widget's own parts, each standing in for a slot the consumer left empty.
|
|
12481
|
+
Marked like a consumer's slot so each default's context is typed the same way. -->
|
|
11968
12482
|
<ng-template cortexSlot="header" #defaultHeader let-header>
|
|
11969
12483
|
<cortex-chat-header [context]="header" />
|
|
11970
12484
|
</ng-template>
|
|
@@ -11983,10 +12497,15 @@ var CortexChatWidgetComponent = class CortexChatWidgetComponent2 {
|
|
|
11983
12497
|
</ng-template>
|
|
11984
12498
|
|
|
11985
12499
|
<!-- The composer, or the notice an agent that takes no messages shows instead.
|
|
11986
|
-
|
|
11987
|
-
thread /chat refuses.
|
|
12500
|
+
No composer until the handshake answers: a first send before it could open
|
|
12501
|
+
a thread /chat refuses. Nothing while the first answer is out, then why
|
|
12502
|
+
Cortex has not answered. -->
|
|
11988
12503
|
<ng-template #composer>
|
|
11989
|
-
@if (
|
|
12504
|
+
@if (unansweredNotice(); as notice) {
|
|
12505
|
+
<p class="cortex-widget__messages-disabled">
|
|
12506
|
+
{{ notice | translate }}
|
|
12507
|
+
</p>
|
|
12508
|
+
} @else if (chatService.capabilities()?.messages === false) {
|
|
11990
12509
|
<p class="cortex-widget__messages-disabled">
|
|
11991
12510
|
{{ 'translate_messages_disabled' | translate }}
|
|
11992
12511
|
</p>
|
|
@@ -11995,7 +12514,7 @@ var CortexChatWidgetComponent = class CortexChatWidgetComponent2 {
|
|
|
11995
12514
|
}
|
|
11996
12515
|
</ng-template>
|
|
11997
12516
|
`,
|
|
11998
|
-
styles: ['@charset "UTF-8";:root{--cortex-color-surface: light-dark(#ffffff, #0a0a0a);--cortex-color-surface-subtle: light-dark(#f8fafc, #141414);--cortex-color-surface-muted: light-dark(#f1f5f9, #1f1f1f);--cortex-color-border: light-dark(#e2e8f0, #2e2e2e);--cortex-color-border-strong: light-dark(#cbd5e1, #444444);--cortex-color-text-heading: light-dark(#1e293b, #fafafa);--cortex-color-text-strong: light-dark(#334155, #e5e5e5);--cortex-color-text: light-dark(#475569, #d4d4d4);--cortex-color-text-secondary: light-dark(#64748b, #a3a3a3);--cortex-color-text-muted: light-dark(#94a3b8, #737373);--cortex-color-primary: light-dark(#1e293b, #fafafa);--cortex-color-primary-foreground: light-dark(#ffffff, #0a0a0a);--cortex-color-accent: light-dark(#4f46e5, #818cf8);--cortex-color-accent-surface: light-dark(#e0e7ff, #312e81);--cortex-color-link: light-dark(#2563eb, #60a5fa);--cortex-color-hover: light-dark(rgba(0, 0, 0, .05), rgba(255, 255, 255, .06));--cortex-color-user-surface: var(--cortex-color-surface-subtle);--cortex-color-user-border: var(--cortex-color-border);--cortex-color-code-text: light-dark(#334155, #e5e5e5);--cortex-color-success: light-dark(#059669, #34d399);--cortex-color-success-surface: light-dark(#ecfdf5, #064e3b);--cortex-color-success-border: light-dark(#d1fae5, #065f46);--cortex-color-danger: light-dark(#dc2626, #f87171);--cortex-color-danger-surface: light-dark(#fef2f2, #450a0a);--cortex-color-danger-border: light-dark(#fecaca, #7f1d1d);--cortex-radius: .5rem;--cortex-font-mono: var( --default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace );--cortex-font-size: .8125rem}.cortex-widget{color-scheme:light}.cortex-widget[data-cortex-theme=dark]{color-scheme:dark}.cortex-widget[data-cortex-theme=system]{color-scheme:light dark}@layer base.cortex{:where(.cortex-widget),:where(.cortex-widget) *,:where(.cortex-widget) :before,:where(.cortex-widget) :after{box-sizing:border-box;margin:0;padding:0;border:0 solid}:where(.cortex-widget){tab-size:4}:where(.cortex-widget) hr{height:0;color:inherit;border-top-width:1px}:where(.cortex-widget) :is(h1,h2,h3,h4,h5,h6){font-size:inherit;font-weight:inherit}:where(.cortex-widget) a{color:inherit;text-decoration:inherit}:where(.cortex-widget) :is(b,strong){font-weight:bolder}:where(.cortex-widget) :is(code,kbd,samp,pre){font-family:var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings, normal);font-variation-settings:var(--default-mono-font-variation-settings, normal);font-size:1em}:where(.cortex-widget) small{font-size:80%}:where(.cortex-widget) :is(sub,sup){font-size:75%;line-height:0;position:relative;vertical-align:baseline}:where(.cortex-widget) sub{bottom:-.25em}:where(.cortex-widget) sup{top:-.5em}:where(.cortex-widget) table{text-indent:0;border-color:inherit;border-collapse:collapse}:where(.cortex-widget) :is(ol,ul,menu){list-style:none}:where(.cortex-widget) :is(img,svg,video,canvas,audio,iframe,embed,object){display:block;vertical-align:middle}:where(.cortex-widget) :is(img,video){max-width:100%;height:auto}:where(.cortex-widget) :is(button,input,select,optgroup,textarea){font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;border-radius:0;background-color:transparent;opacity:1}:where(.cortex-widget) ::placeholder{opacity:1;color:color-mix(in oklab,currentcolor 50%,transparent)}:where(.cortex-widget) textarea{resize:vertical}}.cortex-widget .hljs{color:light-dark(#24292e,#c9d1d9);background:transparent}.cortex-widget .hljs-doctag,.cortex-widget .hljs-keyword,.cortex-widget .hljs-meta .hljs-keyword,.cortex-widget .hljs-template-tag,.cortex-widget .hljs-template-variable,.cortex-widget .hljs-type,.cortex-widget .hljs-variable.language_{color:light-dark(#d73a49,#ff7b72)}.cortex-widget .hljs-title,.cortex-widget .hljs-title.class_,.cortex-widget .hljs-title.class_.inherited__,.cortex-widget .hljs-title.function_{color:light-dark(#6f42c1,#d2a8ff)}.cortex-widget .hljs-attr,.cortex-widget .hljs-attribute,.cortex-widget .hljs-literal,.cortex-widget .hljs-meta,.cortex-widget .hljs-number,.cortex-widget .hljs-operator,.cortex-widget .hljs-selector-attr,.cortex-widget .hljs-selector-class,.cortex-widget .hljs-selector-id,.cortex-widget .hljs-variable{color:light-dark(#005cc5,#79c0ff)}.cortex-widget .hljs-meta .hljs-string,.cortex-widget .hljs-regexp,.cortex-widget .hljs-string{color:light-dark(#032f62,#a5d6ff)}.cortex-widget .hljs-built_in,.cortex-widget .hljs-symbol{color:light-dark(#e36209,#ffa657)}.cortex-widget .hljs-code,.cortex-widget .hljs-comment,.cortex-widget .hljs-formula{color:light-dark(#6a737d,#8b949e)}.cortex-widget .hljs-name,.cortex-widget .hljs-quote,.cortex-widget .hljs-selector-pseudo,.cortex-widget .hljs-selector-tag{color:light-dark(#22863a,#7ee787)}.cortex-widget .hljs-subst{color:light-dark(#24292e,#c9d1d9)}.cortex-widget .hljs-section{color:light-dark(#005cc5,#1f6feb);font-weight:700}.cortex-widget .hljs-bullet{color:light-dark(#735c0f,#f2cc60)}.cortex-widget .hljs-emphasis{font-style:italic}.cortex-widget .hljs-strong{font-weight:700}.cortex-widget .hljs-addition{color:light-dark(#22863a,#aff5b4);background-color:light-dark(#f0fff4,#033a16)}.cortex-widget .hljs-deletion{color:light-dark(#b31d28,#ffdcd7);background-color:light-dark(#ffeef0,#67060c)}.cortex-widget{display:block}.cortex-widget__container{width:100%;height:100%;position:relative;overflow:hidden}.cortex-widget__screen{position:absolute;inset:0;display:flex;flex-direction:column;transition:transform .3s ease-out}.cortex-widget__screen--active{transform:translate(0)}.cortex-widget__screen--left{transform:translate(-100%)}[dir=rtl] .cortex-widget__screen--left,.cortex-widget__screen--right{transform:translate(100%)}[dir=rtl] .cortex-widget__screen--right{transform:translate(-100%)}@keyframes cortex-skeleton-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.cortex-skeleton{background:linear-gradient(90deg,var(--cortex-color-border) 0%,var(--cortex-color-surface-muted) 40%,var(--cortex-color-border) 80%);background-size:200% 100%;animation:cortex-skeleton-shimmer 1.8s ease-in-out infinite;border-radius:6px}.cortex-widget__messages-skeleton{flex:1;overflow:hidden;padding:1rem;display:flex;flex-direction:column;gap:.5rem}.cortex-widget__msg-skel{width:100%;display:flex;flex-direction:column}.cortex-widget__msg-skel--user{align-items:flex-end}.cortex-widget__msg-skel--assistant{align-items:flex-start}.cortex-widget__msg-skel-bubble{max-width:80%;display:flex;flex-direction:column;gap:.5rem}.cortex-widget__msg-skel-bubble--user{padding:.75rem 1rem;border-radius:calc(var(--cortex-radius) * 2);border-end-end-radius:0;border:1px solid var(--cortex-color-border);background:var(--cortex-color-surface-subtle)}.cortex-widget__msg-skel-line{height:.75rem;max-width:100%}.cortex-widget__messages{flex:1;overflow:hidden}.cortex-widget__container--full{display:flex;flex-direction:row}.cortex-widget__container--full>.cortex-widget__screen{position:relative;inset:auto;transition:none}.cortex-widget__container--full>.cortex-widget__screen.cortex-widget__screen--active,.cortex-widget__container--full>.cortex-widget__screen.cortex-widget__screen--left,.cortex-widget__container--full>.cortex-widget__screen.cortex-widget__screen--right{transform:none}.cortex-widget__container--full>.cortex-widget__screen:first-child{width:280px;min-width:280px;flex-shrink:0;border-right:1px solid var(--cortex-color-border);background:var(--cortex-color-surface-subtle)}[dir=rtl] .cortex-widget__container--full>.cortex-widget__screen:first-child{border-right:0;border-left:1px solid var(--cortex-color-border)}.cortex-widget__container--full>.cortex-widget__screen:nth-child(2){flex:1;min-width:0}.cortex-widget__container--full .cortex-widget__back-btn,.cortex-widget__container--full .cortex-widget__history-btn{display:none}@media(min-width:769px){.cortex-widget__container--full>.cortex-widget__screen:nth-child(2) .cortex-widget__new-btn{display:none}}.cortex-widget__container--full .cortex-widget__chat-title{font-size:var(--cortex-font-size-header, .875rem)}.cortex-widget__container--full .cortex-widget__chat-header{background:var(--cortex-color-surface)}.cortex-widget__container--full .cortex-message-list,.cortex-widget__container--full .cortex-widget__messages-skeleton{padding:1.5rem max(2rem,(100% - 48rem) / 2)}.cortex-widget__container--full .cortex-widget__input-area{padding:.75rem max(2rem,(100% - 48rem) / 2) 1.25rem}@media(max-width:768px){.cortex-widget__container--full>.cortex-widget__screen:first-child{position:fixed;inset:0;width:280px;min-width:280px;z-index:110;transform:translate(-100%);transition:transform .28s cubic-bezier(.4,0,.2,1)}[dir=rtl] .cortex-widget__container--full>.cortex-widget__screen:first-child{transform:translate(100%);border-left:1px solid var(--cortex-color-border);border-right:0}.cortex-widget__container--full>.cortex-widget__screen:nth-child(2){flex:1;min-width:0}.cortex-widget__container--full .cortex-widget__sidebar-toggle-btn{flex-shrink:0;width:2rem;height:2rem;border-radius:calc(var(--cortex-radius) * .75);display:flex;align-items:center;justify-content:center;background:transparent;border:0;cursor:pointer;transition:color .15s,background-color .15s;color:var(--cortex-color-text-secondary)}.cortex-widget__container--full .cortex-widget__sidebar-toggle-btn:hover{color:var(--cortex-color-text-strong);background:var(--cortex-color-surface-muted)}.cortex-widget__container--full .cortex-widget__sidebar-toggle-btn:active{background:var(--cortex-color-border)}.cortex-widget__container--full .cortex-message-list,.cortex-widget__container--full .cortex-widget__messages-skeleton{padding:1rem}.cortex-widget__container--full .cortex-widget__input-area{padding:.75rem}}@media(max-width:768px){.cortex-widget__container--full.cortex-widget__container--sidebar-open>.cortex-widget__screen:first-child{transform:translate(0)}.cortex-widget__container--full.cortex-widget__container--sidebar-open .cortex-widget__sidebar-backdrop{display:block;position:fixed;inset:0;z-index:100;background:#0f172a59;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);animation:cortex-sidebar-backdrop-in .2s ease-out both}}@keyframes cortex-sidebar-backdrop-in{0%{opacity:0}to{opacity:1}}.cortex-widget__chat-header{flex-shrink:0;height:3rem;padding:0 1rem;display:flex;align-items:center;gap:.75rem;border-bottom:1px solid var(--cortex-color-border);background:var(--cortex-color-surface)}.cortex-widget__header-btn{flex-shrink:0;width:2rem;height:2rem;border-radius:calc(var(--cortex-radius) * .75);display:flex;align-items:center;justify-content:center;background:transparent;border:0;cursor:pointer;transition:color .15s,background-color .15s;color:var(--cortex-color-text-muted)}.cortex-widget__header-btn:hover{color:var(--cortex-color-text);background:var(--cortex-color-surface-muted)}[dir=rtl] .cortex-widget__back-icon{transform:rotate(180deg)}.cortex-widget__chat-title-wrap{min-width:0;flex:1}.cortex-widget__chat-title{font-family:var(--cortex-font-display, inherit);font-size:var(--cortex-font-size-header, var(--cortex-font-size));font-weight:500;color:var(--cortex-color-text-strong);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin:0}.cortex-widget__debug-btn{flex-shrink:0;font-size:.6875rem;font-weight:500;padding:.25rem .625rem;border-radius:calc(var(--cortex-radius) * .75);border:0;cursor:pointer;transition:background-color .15s}.cortex-widget__debug-btn--on{background:light-dark(#fef3c7,#78350f);color:light-dark(#d97706,#fbbf24)}.cortex-widget__debug-btn--on:hover{background:light-dark(#fde68a,#92400e)}.cortex-widget__debug-btn--off{background:var(--cortex-color-surface-muted);color:var(--cortex-color-text-muted)}.cortex-widget__debug-btn--off:hover{background:var(--cortex-color-border)}.cortex-widget__landing{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:1.25rem;text-align:center}.cortex-widget__landing .cortex-widget__landing-composer{max-width:26rem}.cortex-widget__landing-composer{width:100%}.cortex-widget__landing-composer .cortex-widget__input-area{padding:1rem 0 0;border-top:0;background:transparent}.cortex-widget__landing-icon{width:2.5rem;height:2.5rem;border-radius:var(--cortex-radius);background:var(--cortex-color-accent-surface);color:var(--cortex-color-accent);display:flex;align-items:center;justify-content:center;margin-bottom:.875rem}[dir=rtl] .cortex-widget__landing-icon{transform:scaleX(-1)}.cortex-widget__landing-greeting{font-family:var(--cortex-font-display, inherit);font-size:1.0625rem;font-weight:600;line-height:1.3;color:var(--cortex-color-text-heading);margin:0}.cortex-widget__landing-chips{display:flex;flex-wrap:wrap;justify-content:center;gap:.5rem;margin-top:.875rem}.cortex-widget__landing-chip{border:1px solid var(--cortex-color-border);border-radius:999px;background:var(--cortex-color-surface);color:var(--cortex-color-text-strong);font-size:.75rem;font-weight:500;padding:.375rem .75rem;cursor:pointer;transition:border-color .15s,color .15s}.cortex-widget__landing-chip:hover{border-color:var(--cortex-color-accent);color:var(--cortex-color-accent)}.cortex-widget__landing-recent{width:100%;max-width:26rem;margin-top:1rem;display:flex;flex-direction:column}.cortex-widget__landing-recent-item{display:flex;align-items:center;gap:.75rem;padding:.4375rem .625rem;border:0;border-radius:calc(var(--cortex-radius) * .75);background:transparent;cursor:pointer;transition:background-color .15s}.cortex-widget__landing-recent-item:hover{background:var(--cortex-color-hover)}.cortex-widget__landing-recent-title{flex:1;min-width:0;text-align:start;font-size:var(--cortex-font-size);font-weight:500;color:var(--cortex-color-text-strong);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin:0}.cortex-widget__landing-recent-time{flex-shrink:0;font-size:.6875rem;color:var(--cortex-color-text-muted);margin:0}cortex-chat-composer,cortex-message-tool-call-outcome,cortex-llm-usage-chips{display:contents}.cortex-widget__input-area{flex-shrink:0;padding:.75rem;background:var(--cortex-color-surface);border-top:1px solid var(--cortex-color-border)}.cortex-widget__input-box{display:flex;align-items:flex-end;gap:.5rem;border-radius:calc(var(--cortex-radius) * 1.5);border:1px solid var(--cortex-color-border);padding:.375rem;background:color-mix(in oklab,var(--cortex-color-surface-subtle) 45%,var(--cortex-color-surface));transition:border-color .15s,background-color .15s}.cortex-widget__input-box--enabled:focus-within{border-color:var(--cortex-color-border-strong);background:var(--cortex-color-surface)}.cortex-widget__input-box--dragging{border-color:var(--cortex-color-text-heading);border-style:dashed;background:var(--cortex-color-surface-muted)}.cortex-widget__textarea,.cortex-widget__textarea:focus,.cortex-widget__textarea:focus-visible,.cortex-widget__textarea:disabled{background:transparent;border:0;outline:none;box-shadow:none}.cortex-widget__textarea{flex:1;resize:none;font-size:var(--cortex-font-size-message, var(--cortex-font-size));padding:.375rem .5rem;min-height:28px;max-height:calc(5.5 * var(--cortex-font-size-message, var(--cortex-font-size)) + .75rem);overflow-y:auto;line-height:1.375;color:var(--cortex-color-text-strong)}.cortex-widget__textarea::placeholder{color:var(--cortex-color-text-muted)}.cortex-widget__textarea--disabled{color:var(--cortex-color-text-muted);cursor:not-allowed}.cortex-widget__textarea:disabled{cursor:not-allowed}.cortex-widget__input-actions{flex-shrink:0;display:flex;align-items:center;gap:.375rem}@keyframes cortex-stop-pulse-ring{0%{opacity:.45;transform:scale(1)}50%{opacity:.15;transform:scale(1.12)}to{opacity:.45;transform:scale(1)}}@keyframes cortex-stop-fade-in{0%{opacity:0;transform:scale(.7)}to{opacity:1;transform:scale(1)}}.cortex-stop-btn{flex-shrink:0;width:2rem;height:2rem;border-radius:var(--cortex-radius);display:flex;align-items:center;justify-content:center;cursor:pointer;position:relative;background:var(--cortex-color-danger);color:#fff;border:0;animation:cortex-stop-fade-in .2s ease-out both;transition:background .15s ease}.cortex-stop-btn:hover{background:color-mix(in oklab,var(--cortex-color-danger) 85%,black)}.cortex-stop-btn:active{transform:scale(.92)}.cortex-stop-btn__ring{position:absolute;inset:0;border-radius:var(--cortex-radius);background:var(--cortex-color-danger);animation:cortex-stop-pulse-ring 2s ease-in-out infinite;pointer-events:none}.cortex-stop-btn__icon{position:relative;z-index:1}.cortex-widget__attach-btn{flex-shrink:0;width:2rem;height:2rem;border-radius:var(--cortex-radius);display:flex;align-items:center;justify-content:center;background:transparent;border:0;cursor:pointer;transition:color .15s,background-color .15s;color:var(--cortex-color-text-muted)}.cortex-widget__attach-btn:hover{color:var(--cortex-color-text);background:var(--cortex-color-hover)}.cortex-widget__file-input{display:none}.cortex-widget__send-btn{flex-shrink:0;width:2rem;height:2rem;border-radius:var(--cortex-radius);display:flex;align-items:center;justify-content:center;border:0;transition:background-color .15s;cursor:default}.cortex-widget__send-btn--empty{background:var(--cortex-color-send-empty, transparent);color:var(--cortex-color-send-empty-text, var(--cortex-color-text-muted))}.cortex-widget__send-btn--ready{background:var(--cortex-color-primary);color:var(--cortex-color-primary-foreground);cursor:pointer}.cortex-widget__send-btn--ready:hover{background:color-mix(in oklab,var(--cortex-color-primary) 85%,var(--cortex-color-primary-foreground))}[dir=rtl] .cortex-widget__send-icon{transform:rotate(180deg)}.cortex-widget__threads-header{flex-shrink:0;padding:1.25rem 1.25rem 1rem;display:flex;align-items:center;gap:.75rem}.cortex-widget__threads-header .cortex-widget__new-btn{margin-inline-start:auto}.cortex-widget__threads-title{font-family:var(--cortex-font-display, inherit);font-size:var(--cortex-font-size-header, .9375rem);font-weight:600;color:var(--cortex-color-text-heading);letter-spacing:-.01em;margin:0}.cortex-widget__threads-count{font-size:.6875rem;color:var(--cortex-color-text-muted);margin-top:.125rem;margin-bottom:0}.cortex-widget__new-chat-btn{display:inline-flex;align-items:center;gap:.375rem;font-size:.75rem;font-weight:500;color:var(--cortex-color-primary-foreground);background:var(--cortex-color-primary);padding:.375rem .75rem;border-radius:calc(var(--cortex-radius) * .75);border:0;cursor:pointer;transition:background-color .15s}.cortex-widget__new-chat-btn:hover{background:color-mix(in oklab,var(--cortex-color-primary) 85%,var(--cortex-color-primary-foreground))}.cortex-widget__new-chat-btn:active{background:var(--cortex-color-primary)}.cortex-widget__new-chat-btn--empty-state{margin-top:.75rem}.cortex-widget__threads-list{flex:1;overflow-y:auto;padding:0 .75rem .75rem}.cortex-widget__thread-skeleton{display:flex;align-items:center;gap:.75rem;padding:.75rem;margin-bottom:.375rem;border-radius:var(--cortex-radius);border:1px solid var(--cortex-color-border);background:var(--cortex-color-surface)}.cortex-widget__thread-skeleton-icon{flex-shrink:0;width:2rem;height:2rem}.cortex-widget__thread-skeleton-lines{flex:1;display:flex;flex-direction:column;gap:.375rem}.cortex-widget__thread-skeleton-line{height:.875rem}.cortex-widget__thread-item{width:100%;text-align:start;padding:.75rem;border-radius:var(--cortex-radius);display:flex;align-items:center;gap:.75rem;transition:background-color .15s,border-color .15s;cursor:pointer;margin-bottom:.375rem;border:1px solid var(--cortex-color-border);background:var(--cortex-color-surface);color:var(--cortex-color-text)}.cortex-widget__thread-item:hover{background:var(--cortex-color-surface-muted);border-color:var(--cortex-color-border-strong)}.cortex-widget__thread-item:active{background:color-mix(in oklab,var(--cortex-color-surface-muted) 50%,var(--cortex-color-border))}.cortex-widget__thread-item--active{background:color-mix(in oklab,var(--cortex-color-surface-muted) 50%,var(--cortex-color-border));border-color:var(--cortex-color-border-strong);color:var(--cortex-color-text-heading)}.cortex-widget__thread-item--active:hover{background:var(--cortex-color-border)}.cortex-widget__thread-item--active:active{background:color-mix(in oklab,var(--cortex-color-border) 50%,var(--cortex-color-border-strong))}.cortex-widget__thread-icon{flex-shrink:0;width:2rem;height:2rem;border-radius:calc(var(--cortex-radius) * .75);display:flex;align-items:center;justify-content:center;font-size:.6875rem;font-weight:600;background:var(--cortex-color-accent-surface);color:var(--cortex-color-accent)}[dir=rtl] .cortex-widget__thread-icon{transform:scaleX(-1)}.cortex-widget__thread-icon--active{background:color-mix(in oklab,var(--cortex-color-accent-surface) 85%,var(--cortex-color-accent))}.cortex-widget__thread-info{min-width:0;flex:1}.cortex-widget__thread-title-row{display:flex;align-items:center;gap:.5rem;min-width:0}.cortex-widget__thread-title{font-size:var(--cortex-font-size);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.25;margin:0;color:var(--cortex-color-text-strong)}.cortex-widget__thread-title--active{color:var(--cortex-color-text-heading);font-weight:600}.cortex-widget__thread-time{font-size:.6875rem;color:var(--cortex-color-text-muted);margin-top:.125rem;margin-bottom:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cortex-widget__thread-running{flex-shrink:0;display:inline-flex;align-items:center;gap:.3125rem;padding:.2rem .45rem;border-radius:999px;background:var(--cortex-color-success-surface);color:var(--cortex-color-success);font-size:.625rem;font-weight:700;letter-spacing:.02em;text-transform:uppercase}.cortex-widget__thread-running-dot{width:.375rem;height:.375rem;border-radius:999px;background:currentColor;box-shadow:0 0 .45rem currentColor;animation:cortex-thread-running-pulse 1.4s ease-in-out infinite}@keyframes cortex-thread-running-pulse{0%,to{opacity:.45;transform:scale(.9)}50%{opacity:1;transform:scale(1)}}.cortex-widget__thread-delete{flex-shrink:0;opacity:0;width:1.75rem;height:1.75rem;border-radius:calc(var(--cortex-radius) * .75);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:opacity .15s;background:transparent;border:0;color:var(--cortex-color-text-muted)}.cortex-widget__thread-item:hover>.cortex-widget__thread-delete{opacity:1}.cortex-widget__thread-delete:hover{background:var(--cortex-color-border)}.cortex-widget__thread-delete--active{color:var(--cortex-color-text-secondary)}.cortex-widget__thread-delete--active:hover{color:var(--cortex-color-text)}.cortex-widget__thread-arrow{flex-shrink:0;transition:color .15s;color:var(--cortex-color-border-strong)}[dir=rtl] .cortex-widget__thread-arrow{transform:rotate(180deg)}.cortex-widget__thread-item:hover>.cortex-widget__thread-arrow{color:var(--cortex-color-text-muted)}.cortex-widget__thread-arrow--active{color:var(--cortex-color-text-muted)}.cortex-widget__thread-item:hover>.cortex-widget__thread-arrow--active{color:var(--cortex-color-text-secondary)}.cortex-widget__threads-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:4rem 0;text-align:center}.cortex-widget__threads-empty-icon{width:2.5rem;height:2.5rem;border-radius:var(--cortex-radius);background:var(--cortex-color-accent-surface);display:flex;align-items:center;justify-content:center;margin-bottom:.75rem}.cortex-widget__threads-empty-svg{color:var(--cortex-color-accent)}.cortex-widget__threads-empty-title{font-family:var(--cortex-font-display, inherit);font-size:var(--cortex-font-size);color:var(--cortex-color-text-muted);font-weight:500;margin:0}.cortex-widget__threads-empty-subtitle{font-size:.6875rem;color:var(--cortex-color-text-muted);margin-top:.25rem;margin-bottom:0}.cortex-widget__sidebar-toggle-btn,.cortex-widget__sidebar-backdrop{display:none}.cortex-message-list{height:100%;overflow-y:auto;overflow-x:hidden;width:100%;padding:1rem}.cortex-message-list__content{position:relative;display:flex;flex-direction:column;gap:.5rem}.cortex-message-list__content--settling{animation:cortex-content-settle .42s cubic-bezier(.76,0,.24,1) both}@keyframes cortex-content-settle{0%{translate:0 var(--cortex-slide)}}.cortex-widget__screen>.cortex-send-flight{position:absolute;z-index:2;margin:0;max-width:none;pointer-events:none;animation:cortex-send-fade 80ms linear both,cortex-send-fly .42s cubic-bezier(.76,0,.24,1) both}@keyframes cortex-send-fade{0%{opacity:0}}@keyframes cortex-send-fly{0%{translate:var(--cortex-fly-x) var(--cortex-fly-y)}}.cortex-working-thinking{padding-inline-start:2rem;--cortex-reveal-from: -1rem;--cortex-reveal-mask: linear-gradient(to right, #000 40%, rgb(0 0 0 / .35) 60%);--cortex-reveal-start: 100%;--cortex-reveal-end: 0%;animation:cortex-part-reveal .7s cubic-bezier(.22,1,.36,1) backwards}[dir=rtl] .cortex-working-thinking{--cortex-reveal-from: 1rem;--cortex-reveal-mask: linear-gradient(to left, #000 40%, rgb(0 0 0 / .35) 60%);--cortex-reveal-start: 0%;--cortex-reveal-end: 100%}.cortex-working-avatar{position:absolute;top:0;inset-inline-start:0;z-index:1;width:1.5rem;height:1.5rem;display:flex;align-items:center;justify-content:center;border-radius:9999px;background:var(--cortex-color-accent);color:var(--cortex-color-primary-foreground);translate:0 var(--cortex-avatar-y, 0);visibility:hidden;pointer-events:none}.cortex-working-avatar svg{width:.875rem;height:.875rem}.cortex-working-avatar--shown{visibility:visible;transition:translate .42s cubic-bezier(.76,0,.24,1);animation:cortex-avatar-in .7s cubic-bezier(.16,1,.3,1) both}.cortex-working-avatar--leaving{animation:cortex-avatar-out .36s cubic-bezier(.5,0,.75,0) .12s both}.cortex-working-avatar__ring{position:absolute;inset:-.25rem;border-radius:9999px;border:1.5px solid color-mix(in oklab,var(--cortex-color-accent) 18%,transparent);border-top-color:var(--cortex-color-accent);border-right-color:color-mix(in oklab,var(--cortex-color-accent) 45%,transparent)}.cortex-working-avatar--shown .cortex-working-avatar__ring{animation:cortex-tool-spin 1s linear infinite}.cortex-working-avatar--leaving .cortex-working-avatar__ring{animation:cortex-avatar-ring-out .22s ease-out both}@keyframes cortex-avatar-in{0%{opacity:0;transform:translateY(2.5rem) scale(.7)}}@keyframes cortex-avatar-out{to{opacity:0;transform:scale(.4)}}@keyframes cortex-avatar-ring-out{to{opacity:0}}.cortex-message{min-width:0;transition:margin-block-start .42s cubic-bezier(.76,0,.24,1)}.cortex-message:empty{display:none}.cortex-message:has(.cortex-message-part--folded):not(:has(.cortex-message-part:not(.cortex-message-part--folded))){margin-block-start:-.5rem;transition-delay:.6s}.cortex-text-bubble--assistant,.cortex-subtle-activity,.cortex-tool-pill,.cortex-tool-pill .cortex-tool-pill__icon{transition:translate .42s cubic-bezier(.76,0,.24,1) .16s}.cortex-message--working-turn .cortex-text-bubble--assistant,.cortex-message--working-turn .cortex-subtle-activity,.cortex-message--working-turn .cortex-tool-pill,.cortex-message--working-turn .cortex-tool-pill .cortex-tool-pill__icon{transition-delay:0s}.cortex-message--working-turn .cortex-text-bubble--assistant,.cortex-message--working-turn .cortex-subtle-activity{translate:2rem}[dir=rtl] .cortex-message--working-turn .cortex-text-bubble--assistant,[dir=rtl] .cortex-message--working-turn .cortex-subtle-activity{translate:-2rem}.cortex-message--working-turn .cortex-tool-pill{translate:.875rem}[dir=rtl] .cortex-message--working-turn .cortex-tool-pill{translate:-.875rem}.cortex-message--working-turn .cortex-tool-pill .cortex-tool-pill__icon{translate:-.5rem}[dir=rtl] .cortex-message--working-turn .cortex-tool-pill .cortex-tool-pill__icon{translate:.5rem}.cortex-message-parts{width:100%;display:flex;flex-direction:column;gap:.5rem}.cortex-message-actions{display:flex;align-items:center;gap:.375rem;margin-top:-.25rem}.cortex-message-actions--user{justify-content:flex-end}.cortex-message-actions__time{font-size:.6875rem;color:var(--cortex-color-text-muted);opacity:0;transition:opacity .15s ease}.cortex-message-actions:not(:has(.cortex-copy-btn)) .cortex-message-actions__time{opacity:1}.cortex-message:hover .cortex-message-actions .cortex-copy-btn__button,.cortex-message:hover .cortex-message-actions .cortex-message-actions__time,.cortex-message-actions:focus-within .cortex-copy-btn__button,.cortex-message-actions:focus-within .cortex-message-actions__time{opacity:1}.cortex-message-debug-zone{display:flex;flex-direction:column;gap:.25rem;padding-top:.375rem;margin-top:.125rem;border-top:1px dashed var(--cortex-color-border)}.cortex-message-part{display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:1fr;min-width:0;transition:grid-template-rows .42s cubic-bezier(.76,0,.24,1),margin-block-end .42s cubic-bezier(.76,0,.24,1),opacity .3s ease,visibility 0s,overflow 0s .42s allow-discrete}.cortex-message-part>*{min-height:0}.cortex-message-part:empty{display:none}.cortex-message-part--folded{grid-template-rows:0fr;margin-block-end:-.5rem;opacity:0;overflow:clip;visibility:hidden;transition-delay:.6s,.6s,.6s,1.02s,0s}[data-cortex-frontier] .cortex-tool-pill__spinner{visibility:hidden}[data-cortex-frontier] .cortex-subtle-activity__dots{display:none}.cortex-message-part--animated{--cortex-reveal-from: -1rem;--cortex-reveal-mask: linear-gradient(to right, #000 40%, rgb(0 0 0 / .35) 60%);--cortex-reveal-start: 100%;--cortex-reveal-end: 0%;animation:cortex-part-reveal .7s cubic-bezier(.22,1,.36,1) backwards}[dir=rtl] .cortex-message-part--animated{--cortex-reveal-from: 1rem;--cortex-reveal-mask: linear-gradient(to left, #000 40%, rgb(0 0 0 / .35) 60%);--cortex-reveal-start: 0%;--cortex-reveal-end: 100%}@keyframes cortex-part-reveal{0%{opacity:0;transform:translate(var(--cortex-reveal-from));filter:blur(5px);-webkit-mask-image:var(--cortex-reveal-mask);mask-image:var(--cortex-reveal-mask);-webkit-mask-size:300% 100%;mask-size:300% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:var(--cortex-reveal-start) 0;mask-position:var(--cortex-reveal-start) 0}40%{opacity:1}to{transform:none;filter:none;-webkit-mask-image:var(--cortex-reveal-mask);mask-image:var(--cortex-reveal-mask);-webkit-mask-size:300% 100%;mask-size:300% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:var(--cortex-reveal-end) 0;mask-position:var(--cortex-reveal-end) 0}}.cortex-unhandled-type{text-align:center;font-size:.75rem;color:var(--cortex-color-text-muted)}.cortex-text-part{width:100%;display:flex;flex-direction:column}.cortex-text-part--user{align-items:flex-end}.cortex-text-bubble{min-width:0;overflow-wrap:anywhere;font-size:var(--cortex-font-size-message, var(--cortex-font-size));line-height:1.625;color:var(--cortex-color-text-strong)}.cortex-text-bubble--assistant{width:calc(100% - 2rem)}.cortex-text-bubble--user{max-width:80%;padding:.75rem 1rem;border-radius:calc(var(--cortex-radius) * 2);border-end-end-radius:0;border:1px solid var(--cortex-color-user-border);background:var(--cortex-color-user-surface)}.cortex-text-bubble h1,.cortex-text-bubble h2,.cortex-text-bubble h3,.cortex-text-bubble h4,.cortex-text-bubble h5,.cortex-text-bubble h6{margin-top:1.25em;margin-bottom:.5em;font-weight:600;line-height:1.3;color:var(--cortex-color-text-heading)}.cortex-text-bubble h1:first-child,.cortex-text-bubble h2:first-child,.cortex-text-bubble h3:first-child,.cortex-text-bubble h4:first-child,.cortex-text-bubble h5:first-child,.cortex-text-bubble h6:first-child{margin-top:0}.cortex-text-bubble h1{font-size:1.25em}.cortex-text-bubble h2{font-size:1.125em}.cortex-text-bubble h3{font-size:1em}.cortex-text-bubble p{margin-top:.75em;margin-bottom:.75em}.cortex-text-bubble p:first-child{margin-top:0}.cortex-text-bubble p:last-child{margin-bottom:0}.cortex-text-bubble ul,.cortex-text-bubble ol{margin-top:.75em;margin-bottom:.75em;padding-inline-start:1.5em}.cortex-text-bubble ul{list-style-type:disc}.cortex-text-bubble ol{list-style-type:decimal}.cortex-text-bubble li{margin-top:.25em;margin-bottom:.25em}.cortex-text-bubble code{font-family:var(--cortex-font-mono);font-size:.875em;background:var(--cortex-color-border);padding:.125em .375em;border-radius:calc(var(--cortex-radius) * .5)}.cortex-text-bubble pre{margin-top:.75em;margin-bottom:.75em;padding:.75em 1em;background:var(--cortex-color-code-surface, color-mix(in oklab, var(--cortex-color-text-heading) 8%, transparent));border-radius:var(--cortex-radius);max-width:100%;overflow-x:auto;font-size:.8125em;line-height:1.6}.cortex-text-bubble pre code{background:transparent;padding:0;color:var(--cortex-color-code-text)}.cortex-text-bubble blockquote{margin-top:.75em;margin-bottom:.75em;padding-inline-start:1em;border-inline-start:3px solid var(--cortex-color-border-strong);color:var(--cortex-color-text-secondary);font-style:italic}.cortex-text-bubble a{color:var(--cortex-color-link);text-decoration:underline}.cortex-text-bubble a:hover{color:color-mix(in oklab,var(--cortex-color-link) 80%,var(--cortex-color-text-heading))}.cortex-text-bubble table{width:100%;border-collapse:collapse;margin-top:.75em;margin-bottom:.75em;font-size:.875em}.cortex-text-bubble th,.cortex-text-bubble td{border:1px solid var(--cortex-color-border);padding:.375em .75em;text-align:start}.cortex-text-bubble th{background:var(--cortex-color-surface-subtle);font-weight:600}.cortex-text-bubble hr{margin-top:1.5em;margin-bottom:1.5em;border:none;border-top:1px solid var(--cortex-color-border)}.cortex-text-bubble img{max-width:100%;height:auto;border-radius:calc(var(--cortex-radius) * .75)}.cortex-stream-fade{animation:cortex-stream-fade .3s ease-out}@keyframes cortex-stream-fade{0%{opacity:0}}.cortex-expandable{display:block;position:relative}.cortex-expandable__content{isolation:isolate}.cortex-expandable__toolbar{position:absolute;top:.375rem;inset-inline-end:.375rem;z-index:1;display:flex;gap:.125rem;padding:.125rem;border:1px solid var(--cortex-color-border);border-radius:var(--cortex-radius);background:var(--cortex-color-surface);box-shadow:0 1px 3px #00000014;opacity:0;transition:opacity .15s}.cortex-expandable:hover>.cortex-expandable__toolbar,.cortex-expandable__toolbar:has(:focus-visible){opacity:1}@media(hover:none){.cortex-expandable__toolbar{position:static;width:fit-content;margin:0 0 .25rem;margin-inline-start:auto;opacity:1}}.cortex-expandable__action{flex-shrink:0;width:2rem;height:2rem;border-radius:calc(var(--cortex-radius) * .75);display:flex;align-items:center;justify-content:center;background:transparent;border:0;cursor:pointer;transition:color .15s,background-color .15s;width:1.75rem;height:1.75rem;color:var(--cortex-color-text-muted)}.cortex-expandable__action:hover{color:var(--cortex-color-text);background:var(--cortex-color-hover)}.cortex-expandable__dialog{width:fit-content;min-width:min(24rem,100vw - 2rem);max-width:calc(100vw - 2rem);max-height:calc(100dvh - 2rem);margin:auto;padding:0;overflow:hidden;border:1px solid var(--cortex-color-border);border-radius:calc(var(--cortex-radius) * 1.5);background:var(--cortex-color-surface);color:var(--cortex-color-text-strong);box-shadow:0 24px 64px #0000003d}.cortex-expandable__dialog[open]{display:flex;flex-direction:column;animation:cortex-expandable-in .18s ease-out}.cortex-expandable__dialog::backdrop{background:#00000073;animation:cortex-expandable-backdrop-in .18s ease-out}.cortex-expandable__head{display:flex;align-items:center;gap:.125rem;padding-block:.375rem;padding-inline:1rem .375rem;border-bottom:1px solid var(--cortex-color-border)}.cortex-expandable__title{flex:1;min-width:0;margin-inline-end:.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.875rem;font-weight:600;color:var(--cortex-color-text-heading)}.cortex-expandable__body{min-height:0;overflow:auto;overscroll-behavior:contain}@keyframes cortex-expandable-in{0%{opacity:0;transform:translateY(.5rem) scale(.98)}}@keyframes cortex-expandable-backdrop-in{0%{opacity:0}}.cortex-media-block{display:block;width:40rem;max-width:100%;margin:.75em 0;border:1px solid var(--cortex-color-border);border-radius:var(--cortex-radius);background:var(--cortex-color-surface);overflow:hidden}.cortex-media-block__head{display:flex}.cortex-media-block__head[hidden]{display:none}.cortex-media-block__head{align-items:center;justify-content:space-between;gap:.5rem;padding:.25rem .5rem .25rem .75rem;background:var(--cortex-color-surface-subtle);border-bottom:1px solid var(--cortex-color-border);font-size:.75rem;color:var(--cortex-color-text-muted)}.cortex-media-block__lang{font-family:var(--cortex-font-mono)}.cortex-media-block__pending{display:inline-flex;align-items:center;gap:.375rem}.cortex-media-block__pending:before{content:"";width:.625rem;height:.625rem;border:1.5px solid var(--cortex-color-border-strong);border-top-color:var(--cortex-color-text-muted);border-radius:9999px;animation:cortex-tool-spin .8s linear infinite}.cortex-media-block__actions{display:inline-flex;align-items:center;gap:.125rem}.cortex-media-block__action{background:transparent;border:0;padding:.125rem .375rem;border-radius:calc(var(--cortex-radius) * .5);font:inherit;color:inherit;cursor:pointer}.cortex-media-block__action:hover,.cortex-media-block__action[aria-pressed=true]{background:var(--cortex-color-hover);color:var(--cortex-color-text-strong)}.cortex-media-block__body{display:block;padding:.75rem}.cortex-media-block__body[hidden]{display:none}.cortex-media-block__body{min-height:6rem;overflow-x:auto}.cortex-media-block__body svg{display:block;max-width:100%;height:auto;direction:ltr}.cortex-media-block__body svg text{unicode-bidi:plaintext}.cortex-media-block__body>div>svg{margin-inline:auto}.cortex-media-block__body--map{padding:0;height:18rem}.cortex-media-block__body--map>div{height:100%}.cortex-media-block__body--report{padding:1rem}.cortex-expandable__body .cortex-media-block__body{width:min(72rem,100vw - 2rem - 2px)}.cortex-expandable__body .cortex-media-block__body:not(.cortex-media-block__body--map,.cortex-media-block__body--report)>div{display:grid}.cortex-expandable__body .cortex-media-block__body:not(.cortex-media-block__body--map,.cortex-media-block__body--report) svg{width:100%;max-width:none!important;max-height:calc(100dvh - 6.5rem)}.cortex-expandable__body .cortex-media-block__body--map{height:min(48rem,100dvh - 5rem)}.cortex-expandable:has(>.cortex-expandable__content>.cortex-media-block__body--map)>.cortex-expandable__toolbar{right:.375rem;left:auto}.cortex-media-block__error{margin:0;font-size:.8125rem;color:var(--cortex-color-danger)}.cortex-media-block .cortex-media-block__source{margin:0;padding:.75rem;border-top:1px solid var(--cortex-color-border);background:var(--cortex-color-surface-subtle);font-family:var(--cortex-font-mono);font-size:.75rem;line-height:1.5;white-space:pre;overflow-x:auto;color:var(--cortex-color-text)}.cortex-attachment-image{margin:.75em 0}.cortex-attachment-image .cortex-expandable{width:fit-content;max-width:100%}.cortex-attachment-image .cortex-expandable__content img{display:block;max-width:100%;border-radius:var(--cortex-radius);border:1px solid var(--cortex-color-border)}.cortex-expandable__body .cortex-attachment-image__expanded{display:block;max-width:calc(100vw - 2rem - 2px);max-height:calc(100dvh - 5rem);margin:auto;border-radius:0}.cortex-attachment-image__caption{margin:.25rem 0 0;font-size:.75rem;color:var(--cortex-color-text-muted)}.cortex-table-block{display:block;margin:.75em 0}.cortex-table-block th{white-space:nowrap}.cortex-table-block td{max-width:20rem}.cortex-table-block table{margin:0}.cortex-table-block .cortex-expandable{width:fit-content;max-width:100%}.cortex-table-block__expanded{padding:1rem}.cortex-table-block__expanded td{max-width:40rem}.cortex-reasoning-details{width:100%;border-radius:var(--cortex-radius);border:1px solid var(--cortex-color-border);background:var(--cortex-color-surface-subtle);overflow:hidden}.cortex-reasoning-details__summary{list-style:none;cursor:pointer;-webkit-user-select:none;user-select:none;padding:.75rem 1rem;display:flex;align-items:center;gap:.75rem}.cortex-reasoning-details__summary::-webkit-details-marker{display:none}.cortex-reasoning-details__header{display:flex;align-items:center;gap:.5rem;min-width:0;flex:1}.cortex-reasoning-details__icon{display:inline-flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;border-radius:calc(var(--cortex-radius) * .5);background:var(--cortex-color-accent-surface);color:var(--cortex-color-accent)}.cortex-reasoning-details__title-group{min-width:0}.cortex-reasoning-details__title-row{display:flex;align-items:center;gap:.5rem}.cortex-reasoning-details__title{font-weight:500;color:var(--cortex-color-text-strong);font-size:.875rem}.cortex-reasoning-details__badge{display:inline-flex;align-items:center;border-radius:calc(var(--cortex-radius) * .5);padding:.125rem .375rem;font-size:.6875rem;font-weight:500}.cortex-reasoning-details__badge--streaming{background:light-dark(#fef3c7,#78350f);color:light-dark(#b45309,#fcd34d)}.cortex-reasoning-details__badge--done{background:var(--cortex-color-success-border);color:var(--cortex-color-success)}.cortex-reasoning-details__chevron{margin-inline-start:auto;display:inline-flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;border-radius:calc(var(--cortex-radius) * .5);color:var(--cortex-color-text-muted);transition:transform .2s}details[open]>summary>.cortex-reasoning-details__chevron{transform:rotate(180deg)}.cortex-reasoning-details__body{padding:0 1rem 1rem}.cortex-reasoning-details__content{margin-top:.25rem;border-radius:calc(var(--cortex-radius) * .5);background:var(--cortex-color-surface);border:1px solid var(--cortex-color-border);padding:.75rem}.cortex-reasoning-details__pre{margin:0;white-space:pre-wrap;overflow-wrap:break-word;font-family:var(--cortex-font-mono);font-size:.75rem;line-height:1.625;color:var(--cortex-color-text-strong)}@keyframes cortex-aborted-fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.cortex-aborted-flag{display:flex;align-items:center;gap:.625rem;padding:.25rem 0;animation:cortex-aborted-fade-in .3s ease-out both;-webkit-user-select:none;user-select:none}.cortex-aborted-flag__line{flex:1;height:1px;background:repeating-linear-gradient(90deg,#e2a36f 0px,#e2a36f 4px,transparent 4px,transparent 8px);opacity:.5}.cortex-aborted-flag__label{display:inline-flex;align-items:center;gap:.3125rem;font-family:var(--cortex-font-mono);font-size:.625rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:light-dark(#c2824a,#e2a36f)}.cortex-aborted-flag__icon{color:light-dark(#c2824a,#e2a36f);flex-shrink:0}.cortex-trigger-block{display:inline-flex;width:fit-content;padding:.375rem .75rem;border-radius:999px;background:var(--cortex-color-accent-surface);color:var(--cortex-color-text-strong);font-size:.75rem}.cortex-trigger-block__head{display:flex;align-items:center;gap:.5rem}.cortex-trigger-block__icon{flex-shrink:0;color:var(--cortex-color-accent)}.cortex-trigger-block__name{font-family:var(--cortex-font-mono);font-weight:600}.cortex-trigger-block__time{color:var(--cortex-color-text-secondary);font-size:.6875rem}.cortex-trigger-block--debug{display:flex;flex-direction:column;width:auto;gap:.375rem;padding:.5rem .75rem;border:1px dashed var(--cortex-color-border-strong);border-radius:var(--cortex-radius);background:var(--cortex-color-surface-subtle);font-size:.6875rem}.cortex-trigger-block--debug .cortex-trigger-block__head{font-family:var(--cortex-font-mono);letter-spacing:.04em;text-transform:uppercase;color:var(--cortex-color-text-secondary)}.cortex-trigger-block--debug .cortex-trigger-block__name{color:var(--cortex-color-text-strong)}.cortex-trigger-block--debug .cortex-trigger-block__time{margin-inline-start:auto;font-size:inherit;text-transform:none;letter-spacing:0}.cortex-trigger-block__payload{font-size:.75rem}.cortex-trigger-block__payload>summary{cursor:pointer;color:var(--cortex-color-text-secondary);-webkit-user-select:none;user-select:none}.cortex-trigger-block__payload[open]>summary{margin-bottom:.25rem}.cortex-widget__messages-disabled{padding:.75rem 1rem;text-align:center;font-size:.75rem;color:var(--cortex-color-text-muted)}.cortex-message-attachments{display:flex;flex-wrap:wrap;gap:.375rem}.cortex-message-attachments--user{justify-content:flex-end}.cortex-message-attachment{display:inline-flex;align-items:center;gap:.375rem;max-width:14rem;padding:.25rem .5rem;border:1px solid var(--cortex-color-border);border-radius:var(--cortex-radius);background:var(--cortex-color-surface-subtle);font-size:.75rem;color:var(--cortex-color-text-strong);cursor:pointer;transition:background .15s}.cortex-message-attachment:hover{background:var(--cortex-color-surface-muted)}.cortex-message-attachment__name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cortex-message-attachment__icon,.cortex-message-attachment__dl-icon{flex-shrink:0;width:.875rem;height:.875rem;color:var(--cortex-color-text-muted)}.cortex-debug-tool{--_accent: var(--cortex-color-border-strong);position:relative;width:100%;border-radius:10px;background:var(--cortex-color-surface-subtle);overflow:hidden}.cortex-debug-tool:before{content:"";position:absolute;inset-block:0;inset-inline-start:0;width:3px;background:var(--_accent);z-index:1;transition:background .2s}.cortex-debug-tool[data-state=complete]{--_accent: var(--cortex-color-success)}.cortex-debug-tool[data-state=error]{--_accent: var(--cortex-color-danger)}.cortex-debug-tool[data-state=awaiting-input],.cortex-debug-tool[data-state=input-streaming],.cortex-debug-tool[data-state=input-complete]{--_accent: light-dark(#d97706, #fbbf24)}.cortex-debug-tool[data-state=approval-requested],.cortex-debug-tool[data-state=approval-responded]{--_accent: light-dark(#7c3aed, #a78bfa)}.cortex-debug-tool__summary{list-style:none;cursor:pointer;-webkit-user-select:none;user-select:none;padding:.625rem .875rem .625rem 1.125rem}.cortex-debug-tool__summary::-webkit-details-marker{display:none}.cortex-debug-tool__header{display:flex;align-items:flex-start;gap:.75rem}.cortex-debug-tool__meta{flex:1;min-width:0}.cortex-debug-tool__title-row{display:flex;align-items:center;gap:.5rem;min-width:0}.cortex-debug-tool__name{font-weight:600;font-size:.8125rem;color:var(--cortex-color-text-heading);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;letter-spacing:-.01em}.cortex-debug-tool__id-row{margin-top:2px;font-size:.625rem;color:var(--cortex-color-text-muted);font-family:ui-monospace,SF Mono,Cascadia Code,monospace;word-break:break-all}.cortex-debug-tool__actions{display:flex;align-items:center;gap:.375rem;flex-shrink:0}.cortex-debug-tool__state{display:inline-flex;align-items:center;gap:5px;font-size:.6875rem;font-weight:500;padding:2px 8px;border-radius:4px;white-space:nowrap;font-family:system-ui,-apple-system,sans-serif}.cortex-debug-tool__state--success{color:var(--cortex-color-success);background:var(--cortex-color-success-surface)}.cortex-debug-tool__state--error{color:var(--cortex-color-danger);background:light-dark(#fef2f2,#450a0a)}.cortex-debug-tool__state--approval{color:light-dark(#7c3aed,#a78bfa);background:light-dark(#f5f3ff,#2e1065)}.cortex-debug-tool__state--pending{color:light-dark(#b45309,#fcd34d);background:light-dark(#fffbeb,#451a03)}.cortex-debug-tool__pulse{width:6px;height:6px;border-radius:50%;background:light-dark(#d97706,#fbbf24);animation:dbg-pulse 2s ease-in-out infinite}.cortex-debug-tool__pulse--violet{background:#8b5cf6}@keyframes dbg-pulse{0%,to{opacity:1}50%{opacity:.3}}.cortex-debug-tool__chevron{display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;border-radius:4px;color:var(--cortex-color-text-muted);transition:transform .2s}details[open]>summary .cortex-debug-tool__chevron{transform:rotate(180deg)}.cortex-debug-tool__body{padding:0 .875rem .75rem 1.125rem}.cortex-debug-tool__section:not(:first-child){border-top:1px solid var(--cortex-color-border);padding-top:.625rem;margin-top:.625rem}.cortex-debug-tool__section-bar{display:flex;align-items:center;gap:.375rem;margin-bottom:.375rem}.cortex-debug-tool__section-label{font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--cortex-color-text-muted);font-family:system-ui,-apple-system,sans-serif}.cortex-debug-tool__section-label--success{color:var(--cortex-color-success)}.cortex-debug-tool__section-label--error{color:var(--cortex-color-danger)}.cortex-debug-tool__section-label--approval{color:light-dark(#7c3aed,#a78bfa)}.cortex-debug-tool__section-lang{font-size:.5625rem;color:var(--cortex-color-border-strong);font-family:ui-monospace,SF Mono,monospace;text-transform:lowercase}.cortex-debug-tool__pre{margin:0;max-height:20rem;overflow:auto;padding:.625rem .75rem;border-radius:6px;background:var(--cortex-color-surface);font-size:.75rem;line-height:1.3rem;font-family:ui-monospace,SF Mono,Cascadia Code,monospace;white-space:pre;overflow-wrap:break-word}.cortex-debug-tool__tree{max-height:16rem;overflow:auto;padding:.625rem .75rem;border-radius:6px;background:var(--cortex-color-surface)}.cortex-debug-tool__error-pre{margin:0;max-height:16rem;overflow:auto;padding:.625rem .75rem;border-radius:6px;background:light-dark(#fef2f2,#450a0a);color:light-dark(#991b1b,#fca5a5);font-size:.75rem;line-height:1.3rem;font-family:ui-monospace,SF Mono,Cascadia Code,monospace;white-space:pre-wrap;word-break:break-word}.cortex-debug-tool__message{padding:.5rem .75rem;font-size:.75rem;color:var(--cortex-color-text-secondary);border-radius:6px;background:var(--cortex-color-surface)}.cortex-debug-tool__message--approval{color:light-dark(#5b21b6,#c4b5fd);background:light-dark(#faf5ff,#3b0764)}.cortex-debug-tool__section--success .cortex-debug-tool__tree{background:light-dark(#f0fdf4,#052e16)}.cortex-debug-tool__section--error .cortex-debug-tool__tree{background:light-dark(#fef2f2,#450a0a)}.cortex-tool-call-animated{display:block}.cortex-tool-pill{display:inline-flex;align-items:center;gap:.375rem;padding:.25rem 0;max-width:100%}.cortex-tool-pill__icon{position:relative;width:.75rem;height:.75rem;display:flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--cortex-color-text-muted)}.cortex-tool-pill__spinner{position:absolute;width:.625rem;height:.625rem;border:1.5px solid var(--cortex-color-border-strong);border-top-color:var(--cortex-color-text-muted);border-radius:9999px;opacity:0;transition:opacity .2s}.cortex-tool-pill__spinner--visible{opacity:1;animation:cortex-tool-spin .8s linear infinite}@keyframes cortex-tool-spin{to{transform:rotate(360deg)}}.cortex-tool-pill__svg{position:absolute;width:.75rem;height:.75rem;opacity:0;transform:scale(.6);transition:opacity .2s,transform .2s}.cortex-tool-pill__svg--visible{opacity:1;transform:scale(1)}.cortex-tool-pill__svg--check{color:var(--cortex-color-success)}.cortex-tool-pill__svg--error{color:var(--cortex-color-danger)}.cortex-tool-pill__title{font-size:.75rem;color:var(--cortex-color-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .3s}.cortex-tool-pill__title--error{color:var(--cortex-color-danger)}.cortex-tool-pill__title--pending{color:var(--cortex-color-text-muted);opacity:.6}.cortex-tool-pill__meta{font-size:.6875rem;color:var(--cortex-color-text-muted);opacity:.8;white-space:nowrap;font-variant-numeric:tabular-nums}.cortex-approval-card{display:block;max-width:min(100%,28rem);margin:.25rem 0;border:1px solid var(--cortex-color-border);border-radius:var(--cortex-radius);background:var(--cortex-color-surface);overflow:hidden}.cortex-approval-card--asking{border-color:color-mix(in oklab,var(--cortex-color-accent) 45%,var(--cortex-color-border));box-shadow:0 0 0 3px color-mix(in oklab,var(--cortex-color-accent) 10%,transparent)}.cortex-approval-card__head{display:flex;align-items:center;gap:.5rem;padding:.625rem .75rem 0;font-size:.75rem;font-weight:600;color:var(--cortex-color-accent)}.cortex-approval-card__sentence{margin:0;padding:.375rem .75rem .5rem;font-weight:600;color:var(--cortex-color-text-heading)}.cortex-approval-card__foot{display:flex;gap:.5rem;padding:.625rem .75rem;border-top:1px solid var(--cortex-color-border);background:var(--cortex-color-surface-subtle)}.cortex-approval-card__button{border:1px solid var(--cortex-color-border-strong);border-radius:calc(var(--cortex-radius) * .75);background:var(--cortex-color-surface);padding:.375rem .875rem;font:inherit;font-size:.8125rem;font-weight:500;color:var(--cortex-color-text-strong);cursor:pointer}.cortex-approval-card__button--approve{border-color:var(--cortex-color-accent);background:var(--cortex-color-accent);color:var(--cortex-color-primary-foreground)}.cortex-approval-card__line{display:flex;align-items:baseline;gap:.5rem;padding:.5rem .75rem;font-size:.8125rem;color:var(--cortex-color-text-secondary)}.cortex-approval-card__line .cortex-tool-pill__icon{flex-shrink:0}.cortex-approval-card__decision{font-weight:600;color:var(--cortex-color-text-strong)}.cortex-approval-card__summary{min-width:0;flex:1}.cortex-tool-fold{display:block;align-self:flex-start;text-align:start;border:0;background:none;padding:0 0 .25rem;margin-block-start:-.625rem;margin-inline-start:1.125rem;font:inherit;font-size:.75rem;color:var(--cortex-color-text-muted);cursor:pointer}.cortex-tool-fold:hover,.cortex-tool-fold:focus-visible{color:var(--cortex-color-text-secondary)}.cortex-client-tool-embed{border:1px solid var(--cortex-color-border-strong);border-radius:12px;background:var(--cortex-color-surface);overflow:hidden;max-inline-size:480px}.cortex-client-tool-embed__bar{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 12px;border-block-end:1px solid var(--cortex-color-border-strong);font-size:12px;color:var(--cortex-color-text-muted)}.cortex-client-tool-embed__cancel{border:0;background:none;padding:2px 4px;font:inherit;color:var(--cortex-color-text-muted);cursor:pointer}.cortex-client-tool-embed__cancel:hover{color:var(--cortex-color-danger)}.cortex-client-tool-embed__frame{display:block;inline-size:100%;block-size:420px;border:0;background:var(--cortex-color-surface)}.cortex-client-tool-embed__status{display:flex;align-items:center;gap:8px;padding:20px 16px;font-size:13px;color:var(--cortex-color-text-muted)}.cortex-client-tool-embed__retry{border:1px solid var(--cortex-color-border-strong);border-radius:8px;background:none;padding:4px 10px;font:inherit;font-size:12px;color:inherit;cursor:pointer}.cortex-client-tool-embed-dialog{border:0;padding:0;background:none;inline-size:min(560px,100vw - 48px);max-inline-size:none}.cortex-client-tool-embed-dialog::backdrop{background:#00000073}.cortex-client-tool-embed-dialog .cortex-client-tool-embed{inline-size:100%;max-inline-size:none;box-shadow:0 24px 64px #0000004d}.cortex-client-tool-embed-dialog .cortex-client-tool-embed__frame{block-size:min(70dvh,560px)}.cortex-location-input{border:1px solid var(--cortex-color-border-strong);border-radius:12px;background:var(--cortex-color-surface);overflow:hidden;max-inline-size:480px}.cortex-location-input--settled{display:flex;gap:10px;border-color:var(--cortex-color-border);background:var(--cortex-color-surface-subtle)}.cortex-location-input__map{position:relative;block-size:11rem;background:var(--cortex-color-surface-muted)}.cortex-location-input__map--still{flex:none;inline-size:120px;block-size:84px}.cortex-location-input__canvas{block-size:100%}.cortex-location-input__still-failed{display:flex;align-items:center;justify-content:center;block-size:100%;padding:0 8px;font-size:11px;text-align:center;color:var(--cortex-color-text-muted)}.cortex-location-input__locate{position:absolute;inset-inline-end:10px;inset-block-start:10px;z-index:1001;display:inline-flex;align-items:center;justify-content:center;inline-size:30px;block-size:30px;border:1px solid var(--cortex-color-border-strong);border-radius:8px;background:var(--cortex-color-surface);color:var(--cortex-color-text-strong);box-shadow:0 1px 3px #0003;cursor:pointer}.cortex-location-input__locate svg{inline-size:15px;block-size:15px}.cortex-location-input__locate:disabled{opacity:.45;cursor:default}.cortex-location-input__foot{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 12px;border-block-start:1px solid var(--cortex-color-border-strong);font-size:12px}.cortex-location-input__hint{display:inline-flex;align-items:center;gap:6px;min-inline-size:0;color:var(--cortex-color-text-muted)}.cortex-location-input__hint--failed{color:var(--cortex-color-danger)}.cortex-location-input__spinner{inline-size:.625rem;block-size:.625rem;border:1.5px solid var(--cortex-color-border-strong);border-top-color:var(--cortex-color-text-muted);border-radius:9999px;animation:cortex-tool-spin .8s linear infinite}.cortex-location-input__coords{font-family:var(--cortex-font-mono);font-size:.75rem;color:var(--cortex-color-text-secondary);direction:ltr;unicode-bidi:isolate}.cortex-location-input__actions{display:flex;align-items:center;gap:8px}.cortex-location-input__skip{border:0;background:none;padding:2px 4px;font:inherit;color:var(--cortex-color-text-muted);cursor:pointer}.cortex-location-input__skip:hover{color:var(--cortex-color-danger)}.cortex-location-input__skip:disabled{opacity:.45;cursor:default}.cortex-location-input__send{border:1px solid var(--cortex-color-primary);border-radius:8px;background:var(--cortex-color-primary);padding:4px 10px;font:inherit;font-size:12px;color:var(--cortex-color-primary-foreground);cursor:pointer}.cortex-location-input__send:disabled{opacity:.45;cursor:default}.cortex-location-input__body{display:flex;flex-direction:column;justify-content:center;gap:2px;min-inline-size:0;padding-block:8px;padding-inline-end:12px}.cortex-location-input__title{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--cortex-color-text-strong)}.cortex-location-input__title svg{inline-size:13px;block-size:13px;color:var(--cortex-color-success)}.cortex-reasoning-animated{display:block}.cortex-subtle-activity{display:flex;align-items:center;gap:.375rem;padding:.25rem 0;width:fit-content}.cortex-subtle-activity__dots{display:flex;align-items:center;gap:3px}.cortex-subtle-activity__dot{width:3px;height:3px;border-radius:9999px;background:var(--cortex-color-accent);animation:cortex-subtle-dot-pulse 1.4s ease-in-out infinite}.cortex-subtle-activity__dot--d1{animation-delay:.2s}.cortex-subtle-activity__dot--d2{animation-delay:.4s}@keyframes cortex-subtle-dot-pulse{0%,to{opacity:.3;transform:scale(.8)}40%{opacity:1;transform:scale(1.3)}}.cortex-subtle-activity__label-mask{overflow:hidden;position:relative;height:1.1em}.cortex-subtle-activity__label{display:block;font-size:.75rem;color:var(--cortex-color-text-muted);white-space:nowrap;line-height:1.1em}.cortex-subtle-activity__label--idle,.cortex-subtle-activity__label--entering{opacity:1;transform:translateY(0);transition:opacity .3s ease,transform .3s ease}.cortex-subtle-activity__label--exiting{opacity:0;transform:translateY(-6px);transition:opacity .3s ease,transform .3s ease}.cortex-subtle-activity__label--enter-start{opacity:0;transform:translateY(6px);transition:none}.cortex-attachment-queue{display:flex;flex-wrap:wrap;gap:.375rem;margin-bottom:.5rem}.cortex-attachment-chip{display:inline-flex;align-items:center;gap:.375rem;max-width:14rem;padding-block:.25rem;padding-inline:.5rem .375rem;border:1px solid var(--cortex-color-border);border-radius:var(--cortex-radius);background:var(--cortex-color-surface-subtle);font-size:.75rem;color:var(--cortex-color-text-strong)}.cortex-attachment-chip--error{border-color:var(--cortex-color-danger-border);background:var(--cortex-color-danger-surface);color:var(--cortex-color-danger)}.cortex-attachment-chip__icon,.cortex-attachment-chip__spinner{flex-shrink:0;width:.875rem;height:.875rem;color:var(--cortex-color-text-muted)}.cortex-attachment-chip__spinner{animation:cortex-attachment-spin .8s linear infinite}.cortex-attachment-chip__spinner-track{opacity:.25}@keyframes cortex-attachment-spin{to{transform:rotate(360deg)}}.cortex-attachment-chip__name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cortex-attachment-chip__remove{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:1rem;height:1rem;padding:0;border:0;border-radius:3px;background:transparent;color:currentColor;opacity:.6;cursor:pointer}.cortex-attachment-chip__remove:hover{opacity:1;background:var(--cortex-color-hover)}.cortex-attachment-chip__remove svg{width:.75rem;height:.75rem}.cortex-token-usage{direction:ltr;display:flex;flex-direction:column;margin-top:.375rem;font-family:var(--cortex-font-mono);font-size:.6875rem;line-height:1.4;color:var(--cortex-color-text-muted);-webkit-user-select:none;user-select:none}html[dir=rtl] .cortex-token-usage__summary{align-self:end}html[dir=ltr] .cortex-token-usage__summary{align-self:start}.cortex-token-usage__summary{display:inline-flex;align-items:center;gap:.625rem;padding:.3125rem .625rem;border:1px solid transparent;border-radius:6px;background:transparent;cursor:pointer;transition:background .15s ease,border-color .15s ease;font:inherit;color:inherit;letter-spacing:.01em}.cortex-token-usage__summary:hover{background:var(--cortex-color-surface-subtle);border-color:var(--cortex-color-border)}.cortex-token-usage__summary{flex-wrap:wrap;max-width:100%;text-align:start}.cortex-token-usage__total-number{font-weight:600;font-variant-numeric:tabular-nums;color:var(--cortex-color-text-secondary)}.cortex-token-usage__total-label{margin-inline-start:3px;color:var(--cortex-color-text-muted);font-weight:400;letter-spacing:.03em}.cortex-token-usage__model{color:var(--cortex-color-border-strong);font-weight:400;font-size:.5625rem;letter-spacing:.02em;min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cortex-token-usage__pills{display:inline-flex;align-items:center;gap:.5rem}.cortex-token-usage__pill{display:inline-flex;align-items:center;gap:4px;font-variant-numeric:tabular-nums;color:var(--cortex-color-text-muted)}.cortex-token-usage__dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}.cortex-token-usage__dot--input{background:light-dark(#ea580c,#fb923c);box-shadow:0 0 0 2px #ea580c1a}.cortex-token-usage__dot--output{background:light-dark(#4f46e5,#818cf8);box-shadow:0 0 0 2px #4f46e51a}.cortex-token-usage__cache-badge{font-size:.5625rem;font-weight:600;color:var(--cortex-color-success);background:var(--cortex-color-success-surface);padding:1px 6px;border-radius:3px;font-family:system-ui,-apple-system,sans-serif}.cortex-token-usage__chevron{color:var(--cortex-color-border-strong);transition:transform .25s cubic-bezier(.4,0,.2,1);flex-shrink:0}.cortex-token-usage--expanded .cortex-token-usage__chevron{transform:rotate(180deg)}.cortex-token-usage__details{display:grid;grid-template-rows:0fr;transition:grid-template-rows .25s cubic-bezier(.4,0,.2,1),opacity .2s ease,margin .2s ease;opacity:0;margin-top:0}.cortex-token-usage__details-inner{overflow:hidden}.cortex-token-usage--expanded .cortex-token-usage__details{grid-template-rows:1fr;opacity:1;margin-top:.375rem}.cortex-token-usage__columns{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--cortex-color-border);border-radius:8px;overflow:hidden}.cortex-token-usage__col{background:var(--cortex-color-surface-subtle);padding:.5rem .625rem}.cortex-token-usage__col-header{display:flex;align-items:center;gap:.375rem;margin-bottom:.375rem}.cortex-token-usage__col-label{font-weight:600;font-size:.5625rem;text-transform:uppercase;letter-spacing:.06em;color:var(--cortex-color-text-secondary);font-family:system-ui,-apple-system,sans-serif}.cortex-token-usage__col-total{margin-inline-start:auto;font-weight:700;font-variant-numeric:tabular-nums;color:var(--cortex-color-text-secondary)}.cortex-token-usage__rows{display:flex;flex-direction:column;gap:1px}.cortex-token-usage__row{display:flex;align-items:baseline;justify-content:space-between;padding:2px 0;padding-inline-start:calc(6px + .375rem)}.cortex-token-usage__row-label{color:var(--cortex-color-text-muted);font-size:.625rem}.cortex-token-usage__row-value{font-variant-numeric:tabular-nums;color:var(--cortex-color-text-secondary);font-weight:500}.cortex-token-usage__cache-bar-row{display:flex;align-items:center;gap:.5rem;margin-top:.5rem;padding-inline-start:calc(6px + .375rem)}.cortex-token-usage__cache-bar{flex:1;height:3px;border-radius:2px;background:var(--cortex-color-border);overflow:hidden}.cortex-token-usage__cache-fill{height:100%;border-radius:2px;background:linear-gradient(90deg,#10b981,var(--cortex-color-success));transition:width .4s cubic-bezier(.4,0,.2,1)}.cortex-token-usage__cache-label{font-size:.5625rem;font-weight:600;color:var(--cortex-color-success);white-space:nowrap;font-family:system-ui,-apple-system,sans-serif}.cortex-llm-inspector{direction:ltr;display:flex;flex-direction:column;margin-top:.375rem;font-family:var(--cortex-font-mono);font-size:.6875rem;line-height:1.4;color:var(--cortex-color-text-muted);-webkit-user-select:none;user-select:none}html[dir=rtl] .cortex-llm-inspector__trigger{align-self:end}html[dir=ltr] .cortex-llm-inspector__trigger{align-self:start}.cortex-llm-inspector__trigger{display:inline-flex;align-items:center;gap:.5rem;padding:.3125rem .625rem;border:1px solid transparent;border-radius:6px;background:transparent;cursor:pointer;transition:background .15s ease,border-color .15s ease;font:inherit;color:inherit;letter-spacing:.01em}.cortex-llm-inspector__trigger:hover{background:var(--cortex-color-surface-subtle);border-color:var(--cortex-color-border)}.cortex-llm-inspector__icon{color:var(--cortex-color-text-muted);flex-shrink:0}.cortex-llm-inspector__loading{color:var(--cortex-color-border-strong);font-style:italic}.cortex-llm-inspector__badge{display:inline-flex;align-items:center;justify-content:center;min-width:1.25rem;height:1.25rem;padding:0 .35rem;border-radius:9999px;background:var(--cortex-color-border);color:var(--cortex-color-text-secondary);font-size:.5625rem;font-weight:700}.cortex-llm-inspector__chevron{color:var(--cortex-color-border-strong);transition:transform .25s cubic-bezier(.4,0,.2,1);flex-shrink:0}.cortex-llm-inspector--open .cortex-llm-inspector__chevron{transform:rotate(180deg)}.cortex-llm-inspector__panel-wrapper{display:grid;grid-template-rows:0fr;transition:grid-template-rows .25s cubic-bezier(.4,0,.2,1),opacity .2s ease,margin .2s ease;opacity:0;margin-top:0}.cortex-llm-inspector__panel-inner{overflow:hidden}.cortex-llm-inspector--open .cortex-llm-inspector__panel-wrapper{grid-template-rows:1fr;opacity:1;margin-top:.375rem}.cortex-llm-inspector__panel{display:flex;flex-direction:column;gap:.375rem}.cortex-llm-inspector__empty{padding:.625rem;color:var(--cortex-color-text-muted);font-style:italic}.cortex-llm-inspector__step{border-radius:8px;background:var(--cortex-color-surface-subtle);overflow:hidden;transition:box-shadow .2s ease}.cortex-llm-inspector__step--expanded{box-shadow:0 0 0 1px var(--cortex-color-border)}.cortex-llm-inspector__step-header{display:flex;align-items:center;gap:.5rem;width:100%;padding:.5rem .625rem;border:none;background:transparent;cursor:pointer;font:inherit;color:inherit;text-align:start;transition:background .15s ease}.cortex-llm-inspector__step-header:hover{background:#00000005}.cortex-llm-inspector__step-label{font-weight:600;color:var(--cortex-color-text-secondary);white-space:nowrap;font-family:system-ui,-apple-system,sans-serif}.cortex-llm-inspector__step-metrics{display:inline-flex;align-items:center;gap:.625rem;margin-inline-start:auto;font-variant-numeric:tabular-nums}.cortex-llm-inspector__metric{display:inline-flex;align-items:center;gap:3px}.cortex-llm-inspector__dot{width:5px;height:5px;border-radius:50%;flex-shrink:0}.cortex-llm-inspector__dot--input{background:light-dark(#ea580c,#fb923c);box-shadow:0 0 0 1.5px #ea580c1f}.cortex-llm-inspector__dot--output{background:light-dark(#4f46e5,#818cf8);box-shadow:0 0 0 1.5px #4f46e51f}.cortex-llm-inspector__cache-pct{font-size:.5625rem;font-weight:600;color:var(--cortex-color-success);background:var(--cortex-color-success-surface);padding:1px 5px;border-radius:3px;font-family:system-ui,-apple-system,sans-serif}.cortex-llm-inspector__step-chevron{color:var(--cortex-color-border-strong);transition:transform .2s ease;flex-shrink:0}.cortex-llm-inspector__step--expanded .cortex-llm-inspector__step-chevron{transform:rotate(180deg)}.cortex-llm-inspector__step-body-wrapper{display:grid;grid-template-rows:0fr;transition:grid-template-rows .25s cubic-bezier(.4,0,.2,1),opacity .2s ease;opacity:0}.cortex-llm-inspector__step-body-inner{overflow:hidden}.cortex-llm-inspector__step--expanded .cortex-llm-inspector__step-body-wrapper{grid-template-rows:1fr;opacity:1}.cortex-llm-inspector__step-body{padding:0 .625rem .625rem;display:flex;flex-direction:column;gap:.5rem}.cortex-llm-inspector__usage-rows{display:flex;flex-direction:column;border-radius:6px;overflow:hidden;background:var(--cortex-color-border);gap:1px}.cortex-llm-inspector__usage-row{display:flex;align-items:baseline;gap:.5rem;padding:.375rem .625rem;background:var(--cortex-color-surface);flex-wrap:wrap}.cortex-llm-inspector__usage-row--total{background:light-dark(#fafbfc,#141414)}.cortex-llm-inspector__usage-lbl{font-size:.5625rem;text-transform:uppercase;letter-spacing:.05em;color:var(--cortex-color-text-muted);font-weight:600;width:3.25rem;flex-shrink:0;font-family:system-ui,-apple-system,sans-serif}.cortex-llm-inspector__usage-val{font-variant-numeric:tabular-nums;font-weight:600;color:var(--cortex-color-text-secondary);min-width:3rem}.cortex-llm-inspector__usage-row--total .cortex-llm-inspector__usage-val{font-weight:700;color:var(--cortex-color-text-heading)}.cortex-llm-inspector__usage-detail{color:var(--cortex-color-border-strong);font-size:.5625rem;margin-inline-start:auto}.cortex-llm-inspector__tabs{display:flex;gap:0;border-bottom:1px solid var(--cortex-color-border)}.cortex-llm-inspector__tab{padding:.375rem .75rem;border:none;background:transparent;cursor:pointer;font:inherit;color:var(--cortex-color-text-muted);font-weight:500;position:relative;transition:color .15s ease;font-family:system-ui,-apple-system,sans-serif}.cortex-llm-inspector__tab:hover{color:var(--cortex-color-text-secondary)}.cortex-llm-inspector__tab--active{color:var(--cortex-color-text-heading);font-weight:600}.cortex-llm-inspector__tab--active:after{content:"";position:absolute;inset-inline:0;bottom:-1px;height:2px;background:var(--cortex-color-text-heading);border-radius:1px 1px 0 0}.cortex-llm-inspector__json-pane{position:relative;max-height:24rem;overflow:auto;padding:.625rem;background:var(--cortex-color-surface);border-radius:6px}.cortex-llm-inspector__json-copy{position:sticky;top:0;float:inline-end;z-index:1}.cortex-json-tree{display:block;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.75rem;line-height:1.25rem;-webkit-user-select:text;user-select:text;white-space:pre-wrap;word-break:break-word}.cortex-json-tree__indent{padding-inline-start:1.25em;border-inline-start:1px solid var(--cortex-color-border);margin-inline-start:.3em}.cortex-json-tree__line{position:relative}.cortex-json-tree__toggle{cursor:pointer;-webkit-user-select:none;user-select:none}.cortex-json-tree__toggle:hover .cortex-json-tree__arrow{color:var(--cortex-color-text)}.cortex-json-tree__arrow{display:inline-block;width:1em;text-align:center;color:var(--cortex-color-text-muted);font-size:.525rem;transition:transform .15s ease;vertical-align:middle}.cortex-json-tree__arrow--collapsed{transform:rotate(-90deg)}.cortex-json-tree__bracket{color:var(--cortex-color-text-secondary)}.cortex-json-tree__key{color:light-dark(#6366f1,#818cf8)}.cortex-json-tree__colon{color:var(--cortex-color-text-secondary)}.cortex-json-tree__comma{color:var(--cortex-color-text-muted)}.cortex-json-tree__string{color:var(--cortex-color-success)}.cortex-json-tree__number{color:light-dark(#2563eb,#60a5fa)}.cortex-json-tree__boolean{color:light-dark(#d97706,#fbbf24)}.cortex-json-tree__null{color:var(--cortex-color-text-muted);font-style:italic}.cortex-json-tree__collapsed-hint{display:inline-block;padding:0 .4em;margin:0 .15em;font-size:.625rem;line-height:1.5;color:var(--cortex-color-text-muted);background:var(--cortex-color-surface-subtle);border:1px solid var(--cortex-color-border);border-radius:3px;font-style:italic;cursor:pointer;-webkit-user-select:none;user-select:none;vertical-align:middle}.cortex-json-tree__collapsed-hint:hover{color:var(--cortex-color-text-secondary);border-color:var(--cortex-color-border-strong);background:var(--cortex-color-surface-muted)}.cortex-copy-btn{display:inline-flex;align-items:center}.cortex-copy-btn__button{display:inline-flex;align-items:center;justify-content:center;width:1.375rem;height:1.375rem;padding:0;border:none;border-radius:3px;background:transparent;color:var(--cortex-color-text-muted);cursor:pointer;opacity:0;transition:opacity .15s ease,color .15s ease,background .15s ease}:hover>cortex-copy-button .cortex-copy-btn__button,:hover>.cortex-copy-btn .cortex-copy-btn__button,.cortex-copy-btn__button:hover,.cortex-copy-btn__button:focus-visible{opacity:1}.cortex-copy-btn__button:hover{background:var(--cortex-color-hover);color:var(--cortex-color-text)}.cortex-copy-btn__button--copied{opacity:1;color:var(--cortex-color-success);pointer-events:none}.cortex-copy-btn__button--copied:hover{color:var(--cortex-color-success);background:transparent}.cortex-copy-btn__icon{flex-shrink:0}.cortex-copy-btn__icon--check{animation:cortex-copy-pop .25s cubic-bezier(.34,1.56,.64,1) forwards}@keyframes cortex-copy-pop{0%{transform:scale(.6);opacity:0}to{transform:scale(1);opacity:1}}@media(prefers-reduced-motion:reduce){.cortex-widget *,.cortex-widget *:before,.cortex-widget *:after,.cortex-widget *::backdrop{animation-duration:.01ms!important;animation-delay:0s!important;animation-iteration-count:1!important;transition-duration:.01ms!important;transition-delay:0s!important}}\n'],
|
|
12517
|
+
styles: ['@charset "UTF-8";:root{--cortex-color-surface: light-dark(#ffffff, #0a0a0a);--cortex-color-surface-subtle: light-dark(#f8fafc, #141414);--cortex-color-surface-muted: light-dark(#f1f5f9, #1f1f1f);--cortex-color-border: light-dark(#e2e8f0, #2e2e2e);--cortex-color-border-strong: light-dark(#cbd5e1, #444444);--cortex-color-text-heading: light-dark(#1e293b, #fafafa);--cortex-color-text-strong: light-dark(#334155, #e5e5e5);--cortex-color-text: light-dark(#475569, #d4d4d4);--cortex-color-text-secondary: light-dark(#64748b, #a3a3a3);--cortex-color-text-muted: light-dark(#94a3b8, #737373);--cortex-color-primary: light-dark(#1e293b, #fafafa);--cortex-color-primary-foreground: light-dark(#ffffff, #0a0a0a);--cortex-color-accent: light-dark(#4f46e5, #818cf8);--cortex-color-accent-surface: light-dark(#e0e7ff, #312e81);--cortex-color-link: light-dark(#2563eb, #60a5fa);--cortex-color-hover: light-dark(rgba(0, 0, 0, .05), rgba(255, 255, 255, .06));--cortex-color-user-surface: var(--cortex-color-surface-subtle);--cortex-color-user-border: var(--cortex-color-border);--cortex-color-code-text: light-dark(#334155, #e5e5e5);--cortex-color-success: light-dark(#059669, #34d399);--cortex-color-success-surface: light-dark(#ecfdf5, #064e3b);--cortex-color-success-border: light-dark(#d1fae5, #065f46);--cortex-color-danger: light-dark(#dc2626, #f87171);--cortex-color-danger-surface: light-dark(#fef2f2, #450a0a);--cortex-color-danger-border: light-dark(#fecaca, #7f1d1d);--cortex-radius: .5rem;--cortex-font-mono: var( --default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace );--cortex-font-size: .8125rem}.cortex-widget{color-scheme:light}.cortex-widget[data-cortex-theme=dark]{color-scheme:dark}.cortex-widget[data-cortex-theme=system]{color-scheme:light dark}@layer base.cortex{:where(.cortex-widget),:where(.cortex-widget) *,:where(.cortex-widget) :before,:where(.cortex-widget) :after{box-sizing:border-box;margin:0;padding:0;border:0 solid}:where(.cortex-widget){tab-size:4}:where(.cortex-widget) hr{height:0;color:inherit;border-top-width:1px}:where(.cortex-widget) :is(h1,h2,h3,h4,h5,h6){font-size:inherit;font-weight:inherit}:where(.cortex-widget) a{color:inherit;text-decoration:inherit}:where(.cortex-widget) :is(b,strong){font-weight:bolder}:where(.cortex-widget) :is(code,kbd,samp,pre){font-family:var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings, normal);font-variation-settings:var(--default-mono-font-variation-settings, normal);font-size:1em}:where(.cortex-widget) small{font-size:80%}:where(.cortex-widget) :is(sub,sup){font-size:75%;line-height:0;position:relative;vertical-align:baseline}:where(.cortex-widget) sub{bottom:-.25em}:where(.cortex-widget) sup{top:-.5em}:where(.cortex-widget) table{text-indent:0;border-color:inherit;border-collapse:collapse}:where(.cortex-widget) :is(ol,ul,menu){list-style:none}:where(.cortex-widget) :is(img,svg,video,canvas,audio,iframe,embed,object){display:block;vertical-align:middle}:where(.cortex-widget) :is(img,video){max-width:100%;height:auto}:where(.cortex-widget) :is(button,input,select,optgroup,textarea){font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;border-radius:0;background-color:transparent;opacity:1}:where(.cortex-widget) ::placeholder{opacity:1;color:color-mix(in oklab,currentcolor 50%,transparent)}:where(.cortex-widget) textarea{resize:vertical}}.cortex-widget .hljs{color:light-dark(#24292e,#c9d1d9);background:transparent}.cortex-widget .hljs-doctag,.cortex-widget .hljs-keyword,.cortex-widget .hljs-meta .hljs-keyword,.cortex-widget .hljs-template-tag,.cortex-widget .hljs-template-variable,.cortex-widget .hljs-type,.cortex-widget .hljs-variable.language_{color:light-dark(#d73a49,#ff7b72)}.cortex-widget .hljs-title,.cortex-widget .hljs-title.class_,.cortex-widget .hljs-title.class_.inherited__,.cortex-widget .hljs-title.function_{color:light-dark(#6f42c1,#d2a8ff)}.cortex-widget .hljs-attr,.cortex-widget .hljs-attribute,.cortex-widget .hljs-literal,.cortex-widget .hljs-meta,.cortex-widget .hljs-number,.cortex-widget .hljs-operator,.cortex-widget .hljs-selector-attr,.cortex-widget .hljs-selector-class,.cortex-widget .hljs-selector-id,.cortex-widget .hljs-variable{color:light-dark(#005cc5,#79c0ff)}.cortex-widget .hljs-meta .hljs-string,.cortex-widget .hljs-regexp,.cortex-widget .hljs-string{color:light-dark(#032f62,#a5d6ff)}.cortex-widget .hljs-built_in,.cortex-widget .hljs-symbol{color:light-dark(#e36209,#ffa657)}.cortex-widget .hljs-code,.cortex-widget .hljs-comment,.cortex-widget .hljs-formula{color:light-dark(#6a737d,#8b949e)}.cortex-widget .hljs-name,.cortex-widget .hljs-quote,.cortex-widget .hljs-selector-pseudo,.cortex-widget .hljs-selector-tag{color:light-dark(#22863a,#7ee787)}.cortex-widget .hljs-subst{color:light-dark(#24292e,#c9d1d9)}.cortex-widget .hljs-section{color:light-dark(#005cc5,#1f6feb);font-weight:700}.cortex-widget .hljs-bullet{color:light-dark(#735c0f,#f2cc60)}.cortex-widget .hljs-emphasis{font-style:italic}.cortex-widget .hljs-strong{font-weight:700}.cortex-widget .hljs-addition{color:light-dark(#22863a,#aff5b4);background-color:light-dark(#f0fff4,#033a16)}.cortex-widget .hljs-deletion{color:light-dark(#b31d28,#ffdcd7);background-color:light-dark(#ffeef0,#67060c)}.cortex-widget{display:block}.cortex-widget__container{width:100%;height:100%;position:relative;overflow:hidden}.cortex-widget__screen{position:absolute;inset:0;display:flex;flex-direction:column;transition:transform .3s ease-out}.cortex-widget__screen--active{transform:translate(0)}.cortex-widget__screen--left{transform:translate(-100%)}[dir=rtl] .cortex-widget__screen--left,.cortex-widget__screen--right{transform:translate(100%)}[dir=rtl] .cortex-widget__screen--right{transform:translate(-100%)}@keyframes cortex-skeleton-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.cortex-skeleton{background:linear-gradient(90deg,var(--cortex-color-border) 0%,var(--cortex-color-surface-muted) 40%,var(--cortex-color-border) 80%);background-size:200% 100%;animation:cortex-skeleton-shimmer 1.8s ease-in-out infinite;border-radius:6px}.cortex-widget__messages-skeleton{flex:1;overflow:hidden;padding:1rem;display:flex;flex-direction:column;gap:.5rem}.cortex-widget__msg-skel{width:100%;display:flex;flex-direction:column}.cortex-widget__msg-skel--user{align-items:flex-end}.cortex-widget__msg-skel--assistant{align-items:flex-start}.cortex-widget__msg-skel-bubble{max-width:80%;display:flex;flex-direction:column;gap:.5rem}.cortex-widget__msg-skel-bubble--user{padding:.75rem 1rem;border-radius:calc(var(--cortex-radius) * 2);border-end-end-radius:0;border:1px solid var(--cortex-color-border);background:var(--cortex-color-surface-subtle)}.cortex-widget__msg-skel-line{height:.75rem;max-width:100%}.cortex-widget__messages{flex:1;overflow:hidden}.cortex-widget__container--full{display:flex;flex-direction:row}.cortex-widget__container--full>.cortex-widget__screen{position:relative;inset:auto;transition:none}.cortex-widget__container--full>.cortex-widget__screen.cortex-widget__screen--active,.cortex-widget__container--full>.cortex-widget__screen.cortex-widget__screen--left,.cortex-widget__container--full>.cortex-widget__screen.cortex-widget__screen--right{transform:none}.cortex-widget__container--full>.cortex-widget__screen:first-child{width:280px;min-width:280px;flex-shrink:0;border-right:1px solid var(--cortex-color-border);background:var(--cortex-color-surface-subtle)}[dir=rtl] .cortex-widget__container--full>.cortex-widget__screen:first-child{border-right:0;border-left:1px solid var(--cortex-color-border)}.cortex-widget__container--full>.cortex-widget__screen:nth-child(2){flex:1;min-width:0}.cortex-widget__container--full .cortex-widget__back-btn,.cortex-widget__container--full .cortex-widget__history-btn{display:none}@media(min-width:769px){.cortex-widget__container--full>.cortex-widget__screen:nth-child(2) .cortex-widget__new-btn{display:none}}.cortex-widget__container--full .cortex-widget__chat-title{font-size:var(--cortex-font-size-header, .875rem)}.cortex-widget__container--full .cortex-widget__chat-header{background:var(--cortex-color-surface)}.cortex-widget__container--full .cortex-message-list,.cortex-widget__container--full .cortex-widget__messages-skeleton{padding:1.5rem max(2rem,(100% - 48rem) / 2)}.cortex-widget__container--full .cortex-widget__input-area{padding:.75rem max(2rem,(100% - 48rem) / 2) 1.25rem}@media(max-width:768px){.cortex-widget__container--full>.cortex-widget__screen:first-child{position:fixed;inset:0;width:280px;min-width:280px;z-index:110;transform:translate(-100%);transition:transform .28s cubic-bezier(.4,0,.2,1)}[dir=rtl] .cortex-widget__container--full>.cortex-widget__screen:first-child{transform:translate(100%);border-left:1px solid var(--cortex-color-border);border-right:0}.cortex-widget__container--full>.cortex-widget__screen:nth-child(2){flex:1;min-width:0}.cortex-widget__container--full .cortex-widget__sidebar-toggle-btn{flex-shrink:0;width:2rem;height:2rem;border-radius:calc(var(--cortex-radius) * .75);display:flex;align-items:center;justify-content:center;background:transparent;border:0;cursor:pointer;transition:color .15s,background-color .15s;color:var(--cortex-color-text-secondary)}.cortex-widget__container--full .cortex-widget__sidebar-toggle-btn:hover{color:var(--cortex-color-text-strong);background:var(--cortex-color-surface-muted)}.cortex-widget__container--full .cortex-widget__sidebar-toggle-btn:active{background:var(--cortex-color-border)}.cortex-widget__container--full .cortex-message-list,.cortex-widget__container--full .cortex-widget__messages-skeleton{padding:1rem}.cortex-widget__container--full .cortex-widget__input-area{padding:.75rem}}@media(max-width:768px){.cortex-widget__container--full.cortex-widget__container--sidebar-open>.cortex-widget__screen:first-child{transform:translate(0)}.cortex-widget__container--full.cortex-widget__container--sidebar-open .cortex-widget__sidebar-backdrop{display:block;position:fixed;inset:0;z-index:100;background:#0f172a59;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);animation:cortex-sidebar-backdrop-in .2s ease-out both}}@keyframes cortex-sidebar-backdrop-in{0%{opacity:0}to{opacity:1}}.cortex-widget__chat-header{flex-shrink:0;height:3rem;padding:0 1rem;display:flex;align-items:center;gap:.75rem;border-bottom:1px solid var(--cortex-color-border);background:var(--cortex-color-surface)}.cortex-widget__header-btn{flex-shrink:0;width:2rem;height:2rem;border-radius:calc(var(--cortex-radius) * .75);display:flex;align-items:center;justify-content:center;background:transparent;border:0;cursor:pointer;transition:color .15s,background-color .15s;color:var(--cortex-color-text-muted)}.cortex-widget__header-btn:hover{color:var(--cortex-color-text);background:var(--cortex-color-surface-muted)}[dir=rtl] .cortex-widget__back-icon{transform:rotate(180deg)}.cortex-widget__chat-title-wrap{min-width:0;flex:1}.cortex-widget__chat-title{font-family:var(--cortex-font-display, inherit);font-size:var(--cortex-font-size-header, var(--cortex-font-size));font-weight:500;color:var(--cortex-color-text-strong);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin:0}.cortex-widget__debug-btn{flex-shrink:0;font-size:.6875rem;font-weight:500;padding:.25rem .625rem;border-radius:calc(var(--cortex-radius) * .75);border:0;cursor:pointer;transition:background-color .15s}.cortex-widget__debug-btn--on{background:light-dark(#fef3c7,#78350f);color:light-dark(#d97706,#fbbf24)}.cortex-widget__debug-btn--on:hover{background:light-dark(#fde68a,#92400e)}.cortex-widget__debug-btn--off{background:var(--cortex-color-surface-muted);color:var(--cortex-color-text-muted)}.cortex-widget__debug-btn--off:hover{background:var(--cortex-color-border)}.cortex-widget__landing{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:1.25rem;text-align:center}.cortex-widget__landing .cortex-widget__landing-composer{max-width:26rem}.cortex-widget__landing-composer{width:100%}.cortex-widget__landing-composer .cortex-widget__input-area{padding:1rem 0 0;border-top:0;background:transparent}.cortex-widget__landing-icon{width:2.5rem;height:2.5rem;border-radius:var(--cortex-radius);background:var(--cortex-color-accent-surface);color:var(--cortex-color-accent);display:flex;align-items:center;justify-content:center;margin-bottom:.875rem}[dir=rtl] .cortex-widget__landing-icon{transform:scaleX(-1)}.cortex-widget__landing-greeting{font-family:var(--cortex-font-display, inherit);font-size:1.0625rem;font-weight:600;line-height:1.3;color:var(--cortex-color-text-heading);margin:0}.cortex-widget__landing-chips{display:flex;flex-wrap:wrap;justify-content:center;gap:.5rem;margin-top:.875rem}.cortex-widget__landing-chip{border:1px solid var(--cortex-color-border);border-radius:999px;background:var(--cortex-color-surface);color:var(--cortex-color-text-strong);font-size:.75rem;font-weight:500;padding:.375rem .75rem;cursor:pointer;transition:border-color .15s,color .15s}.cortex-widget__landing-chip:hover{border-color:var(--cortex-color-accent);color:var(--cortex-color-accent)}.cortex-widget__landing-recent{width:100%;max-width:26rem;margin-top:1rem;display:flex;flex-direction:column}.cortex-widget__landing-recent-item{display:flex;align-items:center;gap:.75rem;padding:.4375rem .625rem;border:0;border-radius:calc(var(--cortex-radius) * .75);background:transparent;cursor:pointer;transition:background-color .15s}.cortex-widget__landing-recent-item:hover{background:var(--cortex-color-hover)}.cortex-widget__landing-recent-title{flex:1;min-width:0;text-align:start;font-size:var(--cortex-font-size);font-weight:500;color:var(--cortex-color-text-strong);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin:0}.cortex-widget__landing-recent-time{flex-shrink:0;font-size:.6875rem;color:var(--cortex-color-text-muted);margin:0}cortex-chat-composer,cortex-message-tool-call-outcome,cortex-llm-usage-chips{display:contents}.cortex-widget__input-area{flex-shrink:0;padding:.75rem;background:var(--cortex-color-surface);border-top:1px solid var(--cortex-color-border)}.cortex-widget__input-box{display:flex;align-items:flex-end;gap:.5rem;border-radius:calc(var(--cortex-radius) * 1.5);border:1px solid var(--cortex-color-border);padding:.375rem;background:color-mix(in oklab,var(--cortex-color-surface-subtle) 45%,var(--cortex-color-surface));transition:border-color .15s,background-color .15s}.cortex-widget__input-box--enabled:focus-within{border-color:var(--cortex-color-border-strong);background:var(--cortex-color-surface)}.cortex-widget__input-box--dragging{border-color:var(--cortex-color-text-heading);border-style:dashed;background:var(--cortex-color-surface-muted)}.cortex-widget__textarea,.cortex-widget__textarea:focus,.cortex-widget__textarea:focus-visible,.cortex-widget__textarea:disabled{background:transparent;border:0;outline:none;box-shadow:none}.cortex-widget__textarea{flex:1;resize:none;font-size:var(--cortex-font-size-message, var(--cortex-font-size));padding:.375rem .5rem;min-height:28px;max-height:calc(5.5 * var(--cortex-font-size-message, var(--cortex-font-size)) + .75rem);overflow-y:auto;line-height:1.375;color:var(--cortex-color-text-strong)}.cortex-widget__textarea::placeholder{color:var(--cortex-color-text-muted)}.cortex-widget__textarea--disabled{color:var(--cortex-color-text-muted);cursor:not-allowed}.cortex-widget__textarea:disabled{cursor:not-allowed}.cortex-widget__input-actions{flex-shrink:0;display:flex;align-items:center;gap:.375rem}@keyframes cortex-stop-pulse-ring{0%{opacity:.45;transform:scale(1)}50%{opacity:.15;transform:scale(1.12)}to{opacity:.45;transform:scale(1)}}@keyframes cortex-stop-fade-in{0%{opacity:0;transform:scale(.7)}to{opacity:1;transform:scale(1)}}.cortex-stop-btn{flex-shrink:0;width:2rem;height:2rem;border-radius:var(--cortex-radius);display:flex;align-items:center;justify-content:center;cursor:pointer;position:relative;background:var(--cortex-color-danger);color:#fff;border:0;animation:cortex-stop-fade-in .2s ease-out both;transition:background .15s ease}.cortex-stop-btn:hover{background:color-mix(in oklab,var(--cortex-color-danger) 85%,black)}.cortex-stop-btn:active{transform:scale(.92)}.cortex-stop-btn__ring{position:absolute;inset:0;border-radius:var(--cortex-radius);background:var(--cortex-color-danger);animation:cortex-stop-pulse-ring 2s ease-in-out infinite;pointer-events:none}.cortex-stop-btn__icon{position:relative;z-index:1}.cortex-widget__attach-btn{flex-shrink:0;width:2rem;height:2rem;border-radius:var(--cortex-radius);display:flex;align-items:center;justify-content:center;background:transparent;border:0;cursor:pointer;transition:color .15s,background-color .15s;color:var(--cortex-color-text-muted)}.cortex-widget__attach-btn:hover{color:var(--cortex-color-text);background:var(--cortex-color-hover)}.cortex-widget__file-input{display:none}.cortex-widget__send-btn{flex-shrink:0;width:2rem;height:2rem;border-radius:var(--cortex-radius);display:flex;align-items:center;justify-content:center;border:0;transition:background-color .15s;cursor:default}.cortex-widget__send-btn--empty{background:var(--cortex-color-send-empty, transparent);color:var(--cortex-color-send-empty-text, var(--cortex-color-text-muted))}.cortex-widget__send-btn--ready{background:var(--cortex-color-primary);color:var(--cortex-color-primary-foreground);cursor:pointer}.cortex-widget__send-btn--ready:hover{background:color-mix(in oklab,var(--cortex-color-primary) 85%,var(--cortex-color-primary-foreground))}[dir=rtl] .cortex-widget__send-icon{transform:rotate(180deg)}.cortex-widget__threads-header{flex-shrink:0;padding:1.25rem 1.25rem 1rem;display:flex;align-items:center;gap:.75rem}.cortex-widget__threads-header .cortex-widget__new-btn{margin-inline-start:auto}.cortex-widget__threads-title{font-family:var(--cortex-font-display, inherit);font-size:var(--cortex-font-size-header, .9375rem);font-weight:600;color:var(--cortex-color-text-heading);letter-spacing:-.01em;margin:0}.cortex-widget__threads-count{font-size:.6875rem;color:var(--cortex-color-text-muted);margin-top:.125rem;margin-bottom:0}.cortex-widget__new-chat-btn{display:inline-flex;align-items:center;gap:.375rem;font-size:.75rem;font-weight:500;color:var(--cortex-color-primary-foreground);background:var(--cortex-color-primary);padding:.375rem .75rem;border-radius:calc(var(--cortex-radius) * .75);border:0;cursor:pointer;transition:background-color .15s}.cortex-widget__new-chat-btn:hover{background:color-mix(in oklab,var(--cortex-color-primary) 85%,var(--cortex-color-primary-foreground))}.cortex-widget__new-chat-btn:active{background:var(--cortex-color-primary)}.cortex-widget__new-chat-btn--empty-state{margin-top:.75rem}.cortex-widget__threads-list{flex:1;overflow-y:auto;padding:0 .75rem .75rem}.cortex-widget__thread-skeleton{display:flex;align-items:center;gap:.75rem;padding:.75rem;margin-bottom:.375rem;border-radius:var(--cortex-radius);border:1px solid var(--cortex-color-border);background:var(--cortex-color-surface)}.cortex-widget__thread-skeleton-icon{flex-shrink:0;width:2rem;height:2rem}.cortex-widget__thread-skeleton-lines{flex:1;display:flex;flex-direction:column;gap:.375rem}.cortex-widget__thread-skeleton-line{height:.875rem}.cortex-widget__thread-item{position:relative;width:100%;padding:.75rem;border-radius:var(--cortex-radius);display:flex;align-items:center;gap:.75rem;transition:background-color .15s,border-color .15s;cursor:pointer;margin-bottom:.375rem;border:1px solid var(--cortex-color-border);background:var(--cortex-color-surface);color:var(--cortex-color-text)}.cortex-widget__thread-item:hover{background:var(--cortex-color-surface-muted);border-color:var(--cortex-color-border-strong)}.cortex-widget__thread-item:active{background:color-mix(in oklab,var(--cortex-color-surface-muted) 50%,var(--cortex-color-border))}.cortex-widget__thread-item--active{background:color-mix(in oklab,var(--cortex-color-surface-muted) 50%,var(--cortex-color-border));border-color:var(--cortex-color-border-strong);color:var(--cortex-color-text-heading)}.cortex-widget__thread-item--active:hover{background:var(--cortex-color-border)}.cortex-widget__thread-item--active:active{background:color-mix(in oklab,var(--cortex-color-border) 50%,var(--cortex-color-border-strong))}.cortex-widget__thread-icon{flex-shrink:0;width:2rem;height:2rem;border-radius:calc(var(--cortex-radius) * .75);display:flex;align-items:center;justify-content:center;font-size:.6875rem;font-weight:600;background:var(--cortex-color-accent-surface);color:var(--cortex-color-accent)}[dir=rtl] .cortex-widget__thread-icon{transform:scaleX(-1)}.cortex-widget__thread-icon--active{background:color-mix(in oklab,var(--cortex-color-accent-surface) 85%,var(--cortex-color-accent))}.cortex-widget__thread-info{min-width:0;flex:1;text-align:start;cursor:pointer}.cortex-widget__thread-info:after{content:"";position:absolute;inset:0}.cortex-widget__thread-title-row{display:flex;align-items:center;gap:.5rem;min-width:0}.cortex-widget__thread-title{font-size:var(--cortex-font-size);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.25;margin:0;color:var(--cortex-color-text-strong)}.cortex-widget__thread-title--active{color:var(--cortex-color-text-heading);font-weight:600}.cortex-widget__thread-time{font-size:.6875rem;color:var(--cortex-color-text-muted);margin-top:.125rem;margin-bottom:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cortex-widget__thread-running{flex-shrink:0;display:inline-flex;align-items:center;gap:.3125rem;padding:.2rem .45rem;border-radius:999px;background:var(--cortex-color-success-surface);color:var(--cortex-color-success);font-size:.625rem;font-weight:700;letter-spacing:.02em;text-transform:uppercase}.cortex-widget__thread-running-dot{width:.375rem;height:.375rem;border-radius:999px;background:currentColor;box-shadow:0 0 .45rem currentColor;animation:cortex-thread-running-pulse 1.4s ease-in-out infinite}@keyframes cortex-thread-running-pulse{0%,to{opacity:.45;transform:scale(.9)}50%{opacity:1;transform:scale(1)}}.cortex-widget__thread-delete{position:relative;flex-shrink:0;opacity:0;width:1.75rem;height:1.75rem;border-radius:calc(var(--cortex-radius) * .75);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:opacity .15s;background:transparent;border:0;color:var(--cortex-color-text-muted)}.cortex-widget__thread-item:hover>.cortex-widget__thread-delete,.cortex-widget__thread-delete:focus-visible{opacity:1}.cortex-widget__thread-delete:hover{background:var(--cortex-color-border)}.cortex-widget__thread-delete--active{color:var(--cortex-color-text-secondary)}.cortex-widget__thread-delete--active:hover{color:var(--cortex-color-text)}.cortex-widget__thread-arrow{flex-shrink:0;transition:color .15s;color:var(--cortex-color-border-strong);pointer-events:none}[dir=rtl] .cortex-widget__thread-arrow{transform:rotate(180deg)}.cortex-widget__thread-item:hover>.cortex-widget__thread-arrow{color:var(--cortex-color-text-muted)}.cortex-widget__thread-arrow--active{color:var(--cortex-color-text-muted)}.cortex-widget__thread-item:hover>.cortex-widget__thread-arrow--active{color:var(--cortex-color-text-secondary)}.cortex-widget__threads-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:4rem 0;text-align:center}.cortex-widget__threads-empty-icon{width:2.5rem;height:2.5rem;border-radius:var(--cortex-radius);background:var(--cortex-color-accent-surface);display:flex;align-items:center;justify-content:center;margin-bottom:.75rem}.cortex-widget__threads-empty-svg{color:var(--cortex-color-accent)}.cortex-widget__threads-empty-title{font-family:var(--cortex-font-display, inherit);font-size:var(--cortex-font-size);color:var(--cortex-color-text-muted);font-weight:500;margin:0}.cortex-widget__threads-empty-subtitle{font-size:.6875rem;color:var(--cortex-color-text-muted);margin-top:.25rem;margin-bottom:0}.cortex-widget__sidebar-toggle-btn,.cortex-widget__sidebar-backdrop{display:none}.cortex-message-list{height:100%;overflow-y:auto;overflow-x:hidden;width:100%;padding:1rem}.cortex-message-list__content{position:relative;display:flex;flex-direction:column;gap:.5rem}.cortex-message-list__content--settling{animation:cortex-content-settle .42s cubic-bezier(.76,0,.24,1) both}@keyframes cortex-content-settle{0%{translate:0 var(--cortex-slide)}}.cortex-widget__screen>.cortex-send-flight{position:absolute;z-index:2;margin:0;max-width:none;pointer-events:none;animation:cortex-send-fade 80ms linear both,cortex-send-fly .42s cubic-bezier(.76,0,.24,1) both}@keyframes cortex-send-fade{0%{opacity:0}}@keyframes cortex-send-fly{0%{translate:var(--cortex-fly-x) var(--cortex-fly-y)}}.cortex-working-thinking{padding-inline-start:2rem;--cortex-reveal-from: -1rem;--cortex-reveal-mask: linear-gradient(to right, #000 40%, rgb(0 0 0 / .35) 60%);--cortex-reveal-start: 100%;--cortex-reveal-end: 0%;animation:cortex-part-reveal .7s cubic-bezier(.22,1,.36,1) backwards}[dir=rtl] .cortex-working-thinking{--cortex-reveal-from: 1rem;--cortex-reveal-mask: linear-gradient(to left, #000 40%, rgb(0 0 0 / .35) 60%);--cortex-reveal-start: 0%;--cortex-reveal-end: 100%}.cortex-working-avatar{position:absolute;top:0;inset-inline-start:0;z-index:1;width:1.5rem;height:1.5rem;display:flex;align-items:center;justify-content:center;border-radius:9999px;background:var(--cortex-color-accent);color:var(--cortex-color-primary-foreground);translate:0 var(--cortex-avatar-y, 0);visibility:hidden;pointer-events:none}.cortex-working-avatar svg{width:.875rem;height:.875rem}.cortex-working-avatar--shown{visibility:visible;transition:translate .42s cubic-bezier(.76,0,.24,1);animation:cortex-avatar-in .7s cubic-bezier(.16,1,.3,1) both}.cortex-working-avatar--leaving{animation:cortex-avatar-out .36s cubic-bezier(.5,0,.75,0) .12s both}.cortex-working-avatar__ring{position:absolute;inset:-.25rem;border-radius:9999px;border:1.5px solid color-mix(in oklab,var(--cortex-color-accent) 18%,transparent);border-top-color:var(--cortex-color-accent);border-right-color:color-mix(in oklab,var(--cortex-color-accent) 45%,transparent)}.cortex-working-avatar--shown .cortex-working-avatar__ring{animation:cortex-tool-spin 1s linear infinite}.cortex-working-avatar--leaving .cortex-working-avatar__ring{animation:cortex-avatar-ring-out .22s ease-out both}@keyframes cortex-avatar-in{0%{opacity:0;transform:translateY(2.5rem) scale(.7)}}@keyframes cortex-avatar-out{to{opacity:0;transform:scale(.4)}}@keyframes cortex-avatar-ring-out{to{opacity:0}}.cortex-message{min-width:0;transition:margin-block-start .42s cubic-bezier(.76,0,.24,1)}.cortex-message:empty{display:none}.cortex-message:has(.cortex-message-part--folded):not(:has(.cortex-message-part:not(.cortex-message-part--folded))){margin-block-start:-.5rem;transition-delay:.6s}.cortex-text-bubble--assistant,.cortex-subtle-activity,.cortex-tool-pill,.cortex-tool-pill .cortex-tool-pill__icon{transition:translate .42s cubic-bezier(.76,0,.24,1) .16s}.cortex-message--working-turn .cortex-text-bubble--assistant,.cortex-message--working-turn .cortex-subtle-activity,.cortex-message--working-turn .cortex-tool-pill,.cortex-message--working-turn .cortex-tool-pill .cortex-tool-pill__icon{transition-delay:0s}.cortex-message--working-turn .cortex-text-bubble--assistant,.cortex-message--working-turn .cortex-subtle-activity{translate:2rem}[dir=rtl] .cortex-message--working-turn .cortex-text-bubble--assistant,[dir=rtl] .cortex-message--working-turn .cortex-subtle-activity{translate:-2rem}.cortex-message--working-turn .cortex-tool-pill{translate:.875rem}[dir=rtl] .cortex-message--working-turn .cortex-tool-pill{translate:-.875rem}.cortex-message--working-turn .cortex-tool-pill .cortex-tool-pill__icon{translate:-.5rem}[dir=rtl] .cortex-message--working-turn .cortex-tool-pill .cortex-tool-pill__icon{translate:.5rem}.cortex-message-parts{width:100%;display:flex;flex-direction:column;gap:.5rem}.cortex-message-actions{display:flex;align-items:center;gap:.375rem;margin-top:-.25rem}.cortex-message-actions--user{justify-content:flex-end}.cortex-message-actions__time{font-size:.6875rem;color:var(--cortex-color-text-muted);opacity:0;transition:opacity .15s ease}.cortex-message-actions:not(:has(.cortex-copy-btn)) .cortex-message-actions__time{opacity:1}.cortex-message:hover .cortex-message-actions .cortex-copy-btn__button,.cortex-message:hover .cortex-message-actions .cortex-message-actions__time,.cortex-message-actions:focus-within .cortex-copy-btn__button,.cortex-message-actions:focus-within .cortex-message-actions__time{opacity:1}.cortex-message-debug-zone{display:flex;flex-direction:column;gap:.25rem;padding-top:.375rem;margin-top:.125rem;border-top:1px dashed var(--cortex-color-border)}.cortex-message-part{display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:1fr;min-width:0;transition:grid-template-rows .42s cubic-bezier(.76,0,.24,1),margin-block-end .42s cubic-bezier(.76,0,.24,1),opacity .3s ease,visibility 0s,overflow 0s .42s allow-discrete}.cortex-message-part>*{min-height:0}.cortex-message-part:empty{display:none}.cortex-message-part--folded{grid-template-rows:0fr;margin-block-end:-.5rem;opacity:0;overflow:clip;visibility:hidden;transition-delay:.6s,.6s,.6s,1.02s,0s}[data-cortex-frontier] .cortex-tool-pill__spinner{visibility:hidden}[data-cortex-frontier] .cortex-subtle-activity__dots{display:none}.cortex-message-part--animated{--cortex-reveal-from: -1rem;--cortex-reveal-mask: linear-gradient(to right, #000 40%, rgb(0 0 0 / .35) 60%);--cortex-reveal-start: 100%;--cortex-reveal-end: 0%;animation:cortex-part-reveal .7s cubic-bezier(.22,1,.36,1) backwards}[dir=rtl] .cortex-message-part--animated{--cortex-reveal-from: 1rem;--cortex-reveal-mask: linear-gradient(to left, #000 40%, rgb(0 0 0 / .35) 60%);--cortex-reveal-start: 0%;--cortex-reveal-end: 100%}@keyframes cortex-part-reveal{0%{opacity:0;transform:translate(var(--cortex-reveal-from));filter:blur(5px);-webkit-mask-image:var(--cortex-reveal-mask);mask-image:var(--cortex-reveal-mask);-webkit-mask-size:300% 100%;mask-size:300% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:var(--cortex-reveal-start) 0;mask-position:var(--cortex-reveal-start) 0}40%{opacity:1}to{transform:none;filter:none;-webkit-mask-image:var(--cortex-reveal-mask);mask-image:var(--cortex-reveal-mask);-webkit-mask-size:300% 100%;mask-size:300% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:var(--cortex-reveal-end) 0;mask-position:var(--cortex-reveal-end) 0}}.cortex-unhandled-type{text-align:center;font-size:.75rem;color:var(--cortex-color-text-muted)}.cortex-text-part{width:100%;display:flex;flex-direction:column}.cortex-text-part--user{align-items:flex-end}.cortex-text-bubble{min-width:0;overflow-wrap:anywhere;font-size:var(--cortex-font-size-message, var(--cortex-font-size));line-height:1.625;color:var(--cortex-color-text-strong)}.cortex-text-bubble--assistant{width:calc(100% - 2rem)}.cortex-text-bubble--user{max-width:80%;padding:.75rem 1rem;border-radius:calc(var(--cortex-radius) * 2);border-end-end-radius:0;border:1px solid var(--cortex-color-user-border);background:var(--cortex-color-user-surface)}.cortex-text-bubble h1,.cortex-text-bubble h2,.cortex-text-bubble h3,.cortex-text-bubble h4,.cortex-text-bubble h5,.cortex-text-bubble h6{margin-top:1.25em;margin-bottom:.5em;font-weight:600;line-height:1.3;color:var(--cortex-color-text-heading)}.cortex-text-bubble h1:first-child,.cortex-text-bubble h2:first-child,.cortex-text-bubble h3:first-child,.cortex-text-bubble h4:first-child,.cortex-text-bubble h5:first-child,.cortex-text-bubble h6:first-child{margin-top:0}.cortex-text-bubble h1{font-size:1.25em}.cortex-text-bubble h2{font-size:1.125em}.cortex-text-bubble h3{font-size:1em}.cortex-text-bubble p{margin-top:.75em;margin-bottom:.75em}.cortex-text-bubble p:first-child{margin-top:0}.cortex-text-bubble p:last-child{margin-bottom:0}.cortex-text-bubble ul,.cortex-text-bubble ol{margin-top:.75em;margin-bottom:.75em;padding-inline-start:1.5em}.cortex-text-bubble ul{list-style-type:disc}.cortex-text-bubble ol{list-style-type:decimal}.cortex-text-bubble li{margin-top:.25em;margin-bottom:.25em}.cortex-text-bubble code{font-family:var(--cortex-font-mono);font-size:.875em;background:var(--cortex-color-border);padding:.125em .375em;border-radius:calc(var(--cortex-radius) * .5)}.cortex-text-bubble pre{margin-top:.75em;margin-bottom:.75em;padding:.75em 1em;background:var(--cortex-color-code-surface, color-mix(in oklab, var(--cortex-color-text-heading) 8%, transparent));border-radius:var(--cortex-radius);max-width:100%;overflow-x:auto;font-size:.8125em;line-height:1.6}.cortex-text-bubble pre code{background:transparent;padding:0;color:var(--cortex-color-code-text)}.cortex-text-bubble blockquote{margin-top:.75em;margin-bottom:.75em;padding-inline-start:1em;border-inline-start:3px solid var(--cortex-color-border-strong);color:var(--cortex-color-text-secondary);font-style:italic}.cortex-text-bubble a{color:var(--cortex-color-link);text-decoration:underline}.cortex-text-bubble a:hover{color:color-mix(in oklab,var(--cortex-color-link) 80%,var(--cortex-color-text-heading))}.cortex-text-bubble table{width:100%;border-collapse:collapse;margin-top:.75em;margin-bottom:.75em;font-size:.875em}.cortex-text-bubble th,.cortex-text-bubble td{border:1px solid var(--cortex-color-border);padding:.375em .75em;text-align:start}.cortex-text-bubble th{background:var(--cortex-color-surface-subtle);font-weight:600}.cortex-text-bubble hr{margin-top:1.5em;margin-bottom:1.5em;border:none;border-top:1px solid var(--cortex-color-border)}.cortex-text-bubble img{max-width:100%;height:auto;border-radius:calc(var(--cortex-radius) * .75)}.cortex-stream-fade{animation:cortex-stream-fade .3s ease-out}@keyframes cortex-stream-fade{0%{opacity:0}}.cortex-expandable{display:block;position:relative}.cortex-expandable__content{isolation:isolate}.cortex-expandable__toolbar{position:absolute;top:.375rem;inset-inline-end:.375rem;z-index:1;display:flex;gap:.125rem;padding:.125rem;border:1px solid var(--cortex-color-border);border-radius:var(--cortex-radius);background:var(--cortex-color-surface);box-shadow:0 1px 3px #00000014;opacity:0;transition:opacity .15s}.cortex-expandable:hover>.cortex-expandable__toolbar,.cortex-expandable__toolbar:has(:focus-visible){opacity:1}@media(hover:none){.cortex-expandable__toolbar{position:static;width:fit-content;margin:0 0 .25rem;margin-inline-start:auto;opacity:1}}.cortex-expandable__action{flex-shrink:0;width:2rem;height:2rem;border-radius:calc(var(--cortex-radius) * .75);display:flex;align-items:center;justify-content:center;background:transparent;border:0;cursor:pointer;transition:color .15s,background-color .15s;width:1.75rem;height:1.75rem;color:var(--cortex-color-text-muted)}.cortex-expandable__action:hover{color:var(--cortex-color-text);background:var(--cortex-color-hover)}.cortex-expandable__dialog{width:fit-content;min-width:min(24rem,100vw - 2rem);max-width:calc(100vw - 2rem);max-height:calc(100dvh - 2rem);margin:auto;padding:0;overflow:hidden;border:1px solid var(--cortex-color-border);border-radius:calc(var(--cortex-radius) * 1.5);background:var(--cortex-color-surface);color:var(--cortex-color-text-strong);box-shadow:0 24px 64px #0000003d}.cortex-expandable__dialog[open]{display:flex;flex-direction:column;animation:cortex-expandable-in .18s ease-out}.cortex-expandable__dialog::backdrop{background:#00000073;animation:cortex-expandable-backdrop-in .18s ease-out}.cortex-expandable__head{display:flex;align-items:center;gap:.125rem;padding-block:.375rem;padding-inline:1rem .375rem;border-bottom:1px solid var(--cortex-color-border)}.cortex-expandable__title{flex:1;min-width:0;margin-inline-end:.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.875rem;font-weight:600;color:var(--cortex-color-text-heading)}.cortex-expandable__body{min-height:0;overflow:auto;overscroll-behavior:contain}@keyframes cortex-expandable-in{0%{opacity:0;transform:translateY(.5rem) scale(.98)}}@keyframes cortex-expandable-backdrop-in{0%{opacity:0}}.cortex-media-block{display:block;width:40rem;max-width:100%;margin:.75em 0;border:1px solid var(--cortex-color-border);border-radius:var(--cortex-radius);background:var(--cortex-color-surface);overflow:hidden}.cortex-media-block__head{display:flex}.cortex-media-block__head[hidden]{display:none}.cortex-media-block__head{align-items:center;justify-content:space-between;gap:.5rem;padding:.25rem .5rem .25rem .75rem;background:var(--cortex-color-surface-subtle);border-bottom:1px solid var(--cortex-color-border);font-size:.75rem;color:var(--cortex-color-text-muted)}.cortex-media-block__lang{font-family:var(--cortex-font-mono)}.cortex-media-block__pending{display:inline-flex;align-items:center;gap:.375rem}.cortex-media-block__pending:before{content:"";width:.625rem;height:.625rem;border:1.5px solid var(--cortex-color-border-strong);border-top-color:var(--cortex-color-text-muted);border-radius:9999px;animation:cortex-tool-spin .8s linear infinite}.cortex-media-block__actions{display:inline-flex;align-items:center;gap:.125rem}.cortex-media-block__action{background:transparent;border:0;padding:.125rem .375rem;border-radius:calc(var(--cortex-radius) * .5);font:inherit;color:inherit;cursor:pointer}.cortex-media-block__action:hover,.cortex-media-block__action[aria-pressed=true]{background:var(--cortex-color-hover);color:var(--cortex-color-text-strong)}.cortex-media-block__body{display:block;padding:.75rem}.cortex-media-block__body[hidden]{display:none}.cortex-media-block__body{min-height:6rem;overflow-x:auto}.cortex-media-block__body svg{display:block;max-width:100%;height:auto;direction:ltr}.cortex-media-block__body svg text{unicode-bidi:plaintext}.cortex-media-block__body>div>svg{margin-inline:auto}.cortex-media-block__body--map{padding:0;height:18rem}.cortex-media-block__body--map>div{height:100%}.cortex-media-block__body--report{padding:1rem}.cortex-expandable__body .cortex-media-block__body{width:min(72rem,100vw - 2rem - 2px)}.cortex-expandable__body .cortex-media-block__body:not(.cortex-media-block__body--map,.cortex-media-block__body--report)>div{display:grid}.cortex-expandable__body .cortex-media-block__body:not(.cortex-media-block__body--map,.cortex-media-block__body--report) svg{width:100%;max-width:none!important;max-height:calc(100dvh - 6.5rem)}.cortex-expandable__body .cortex-media-block__body--map{height:min(48rem,100dvh - 5rem)}.cortex-expandable:has(>.cortex-expandable__content>.cortex-media-block__body--map)>.cortex-expandable__toolbar{right:.375rem;left:auto}.cortex-media-block__error{margin:0;font-size:.8125rem;color:var(--cortex-color-danger)}.cortex-media-block .cortex-media-block__source{margin:0;padding:.75rem;border-top:1px solid var(--cortex-color-border);background:var(--cortex-color-surface-subtle);font-family:var(--cortex-font-mono);font-size:.75rem;line-height:1.5;white-space:pre;overflow-x:auto;color:var(--cortex-color-text)}.cortex-attachment-image{margin:.75em 0}.cortex-attachment-image .cortex-expandable{width:fit-content;max-width:100%}.cortex-attachment-image .cortex-expandable__content img{display:block;max-width:100%;border-radius:var(--cortex-radius);border:1px solid var(--cortex-color-border)}.cortex-expandable__body .cortex-attachment-image__expanded{display:block;max-width:calc(100vw - 2rem - 2px);max-height:calc(100dvh - 5rem);margin:auto;border-radius:0}.cortex-attachment-image__caption{margin:.25rem 0 0;font-size:.75rem;color:var(--cortex-color-text-muted)}.cortex-table-block{display:block;margin:.75em 0}.cortex-table-block th{white-space:nowrap}.cortex-table-block td{max-width:20rem}.cortex-table-block table{margin:0}.cortex-table-block .cortex-expandable{width:fit-content;max-width:100%}.cortex-table-block:has(table[dir=ltr])>.cortex-expandable{margin-right:auto}.cortex-table-block:has(table[dir=rtl])>.cortex-expandable{margin-left:auto}.cortex-table-block__expanded{padding:1rem}.cortex-table-block__expanded td{max-width:40rem}.cortex-reasoning-details{width:100%;border-radius:var(--cortex-radius);border:1px solid var(--cortex-color-border);background:var(--cortex-color-surface-subtle);overflow:hidden}.cortex-reasoning-details__summary{list-style:none;cursor:pointer;-webkit-user-select:none;user-select:none;padding:.75rem 1rem;display:flex;align-items:center;gap:.75rem}.cortex-reasoning-details__summary::-webkit-details-marker{display:none}.cortex-reasoning-details__header{display:flex;align-items:center;gap:.5rem;min-width:0;flex:1}.cortex-reasoning-details__icon{display:inline-flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;border-radius:calc(var(--cortex-radius) * .5);background:var(--cortex-color-accent-surface);color:var(--cortex-color-accent)}.cortex-reasoning-details__title-group{min-width:0}.cortex-reasoning-details__title-row{display:flex;align-items:center;gap:.5rem}.cortex-reasoning-details__title{font-weight:500;color:var(--cortex-color-text-strong);font-size:.875rem}.cortex-reasoning-details__badge{display:inline-flex;align-items:center;border-radius:calc(var(--cortex-radius) * .5);padding:.125rem .375rem;font-size:.6875rem;font-weight:500}.cortex-reasoning-details__badge--streaming{background:light-dark(#fef3c7,#78350f);color:light-dark(#b45309,#fcd34d)}.cortex-reasoning-details__badge--done{background:var(--cortex-color-success-border);color:var(--cortex-color-success)}.cortex-reasoning-details__chevron{margin-inline-start:auto;display:inline-flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;border-radius:calc(var(--cortex-radius) * .5);color:var(--cortex-color-text-muted);transition:transform .2s}details[open]>summary>.cortex-reasoning-details__chevron{transform:rotate(180deg)}.cortex-reasoning-details__body{padding:0 1rem 1rem}.cortex-reasoning-details__content{margin-top:.25rem;border-radius:calc(var(--cortex-radius) * .5);background:var(--cortex-color-surface);border:1px solid var(--cortex-color-border);padding:.75rem}.cortex-reasoning-details__pre{margin:0;white-space:pre-wrap;overflow-wrap:break-word;font-family:var(--cortex-font-mono);font-size:.75rem;line-height:1.625;color:var(--cortex-color-text-strong)}@keyframes cortex-aborted-fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.cortex-aborted-flag{display:flex;align-items:center;gap:.625rem;padding:.25rem 0;animation:cortex-aborted-fade-in .3s ease-out both;-webkit-user-select:none;user-select:none}.cortex-aborted-flag__line{flex:1;height:1px;background:repeating-linear-gradient(90deg,#e2a36f 0px,#e2a36f 4px,transparent 4px,transparent 8px);opacity:.5}.cortex-aborted-flag__label{display:inline-flex;align-items:center;gap:.3125rem;font-family:var(--cortex-font-mono);font-size:.625rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:light-dark(#c2824a,#e2a36f)}.cortex-aborted-flag__icon{color:light-dark(#c2824a,#e2a36f);flex-shrink:0}.cortex-aborted-flag__reason{margin:.125rem 0 0;font-size:.75rem;line-height:1.4;text-align:center;overflow-wrap:anywhere;color:light-dark(#c2824a,#e2a36f)}.cortex-trigger-block{display:inline-flex;width:fit-content;padding:.375rem .75rem;border-radius:999px;background:var(--cortex-color-accent-surface);color:var(--cortex-color-text-strong);font-size:.75rem}.cortex-trigger-block__head{display:flex;align-items:center;gap:.5rem}.cortex-trigger-block__icon{flex-shrink:0;color:var(--cortex-color-accent)}.cortex-trigger-block__name{font-family:var(--cortex-font-mono);font-weight:600}.cortex-trigger-block__time{color:var(--cortex-color-text-secondary);font-size:.6875rem}.cortex-trigger-block--debug{display:flex;flex-direction:column;width:auto;gap:.375rem;padding:.5rem .75rem;border:1px dashed var(--cortex-color-border-strong);border-radius:var(--cortex-radius);background:var(--cortex-color-surface-subtle);font-size:.6875rem}.cortex-trigger-block--debug .cortex-trigger-block__head{font-family:var(--cortex-font-mono);letter-spacing:.04em;text-transform:uppercase;color:var(--cortex-color-text-secondary)}.cortex-trigger-block--debug .cortex-trigger-block__name{color:var(--cortex-color-text-strong)}.cortex-trigger-block--debug .cortex-trigger-block__time{margin-inline-start:auto;font-size:inherit;text-transform:none;letter-spacing:0}.cortex-trigger-block__payload{font-size:.75rem}.cortex-trigger-block__payload>summary{cursor:pointer;color:var(--cortex-color-text-secondary);-webkit-user-select:none;user-select:none}.cortex-trigger-block__payload[open]>summary{margin-bottom:.25rem}.cortex-widget__messages-disabled{padding:.75rem 1rem;text-align:center;font-size:.75rem;color:var(--cortex-color-text-muted)}.cortex-message-attachments{display:flex;flex-wrap:wrap;gap:.375rem}.cortex-message-attachments--user{justify-content:flex-end}.cortex-message-attachment{display:inline-flex;align-items:center;gap:.375rem;max-width:14rem;padding:.25rem .5rem;border:1px solid var(--cortex-color-border);border-radius:var(--cortex-radius);background:var(--cortex-color-surface-subtle);font-size:.75rem;color:var(--cortex-color-text-strong);cursor:pointer;transition:background .15s}.cortex-message-attachment:hover{background:var(--cortex-color-surface-muted)}.cortex-message-attachment__name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cortex-message-attachment__icon,.cortex-message-attachment__dl-icon{flex-shrink:0;width:.875rem;height:.875rem;color:var(--cortex-color-text-muted)}.cortex-debug-tool{--_accent: var(--cortex-color-border-strong);position:relative;width:100%;border-radius:10px;background:var(--cortex-color-surface-subtle);overflow:hidden}.cortex-debug-tool:before{content:"";position:absolute;inset-block:0;inset-inline-start:0;width:3px;background:var(--_accent);z-index:1;transition:background .2s}.cortex-debug-tool[data-state=complete]{--_accent: var(--cortex-color-success)}.cortex-debug-tool[data-state=error]{--_accent: var(--cortex-color-danger)}.cortex-debug-tool[data-state=awaiting-input],.cortex-debug-tool[data-state=input-streaming],.cortex-debug-tool[data-state=input-complete]{--_accent: light-dark(#d97706, #fbbf24)}.cortex-debug-tool[data-state=approval-requested],.cortex-debug-tool[data-state=approval-responded]{--_accent: light-dark(#7c3aed, #a78bfa)}.cortex-debug-tool__summary{list-style:none;cursor:pointer;-webkit-user-select:none;user-select:none;padding:.625rem .875rem .625rem 1.125rem}.cortex-debug-tool__summary::-webkit-details-marker{display:none}.cortex-debug-tool__header{display:flex;align-items:flex-start;gap:.75rem}.cortex-debug-tool__meta{flex:1;min-width:0}.cortex-debug-tool__title-row{display:flex;align-items:center;gap:.5rem;min-width:0}.cortex-debug-tool__name{font-weight:600;font-size:.8125rem;color:var(--cortex-color-text-heading);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;letter-spacing:-.01em}.cortex-debug-tool__id-row{margin-top:2px;font-size:.625rem;color:var(--cortex-color-text-muted);font-family:ui-monospace,SF Mono,Cascadia Code,monospace;word-break:break-all}.cortex-debug-tool__actions{display:flex;align-items:center;gap:.375rem;flex-shrink:0}.cortex-debug-tool__state{display:inline-flex;align-items:center;gap:5px;font-size:.6875rem;font-weight:500;padding:2px 8px;border-radius:4px;white-space:nowrap;font-family:system-ui,-apple-system,sans-serif}.cortex-debug-tool__state--success{color:var(--cortex-color-success);background:var(--cortex-color-success-surface)}.cortex-debug-tool__state--error{color:var(--cortex-color-danger);background:light-dark(#fef2f2,#450a0a)}.cortex-debug-tool__state--approval{color:light-dark(#7c3aed,#a78bfa);background:light-dark(#f5f3ff,#2e1065)}.cortex-debug-tool__state--pending{color:light-dark(#b45309,#fcd34d);background:light-dark(#fffbeb,#451a03)}.cortex-debug-tool__pulse{width:6px;height:6px;border-radius:50%;background:light-dark(#d97706,#fbbf24);animation:dbg-pulse 2s ease-in-out infinite}.cortex-debug-tool__pulse--violet{background:#8b5cf6}@keyframes dbg-pulse{0%,to{opacity:1}50%{opacity:.3}}.cortex-debug-tool__chevron{display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;border-radius:4px;color:var(--cortex-color-text-muted);transition:transform .2s}details[open]>summary .cortex-debug-tool__chevron{transform:rotate(180deg)}.cortex-debug-tool__body{padding:0 .875rem .75rem 1.125rem}.cortex-debug-tool__section:not(:first-child){border-top:1px solid var(--cortex-color-border);padding-top:.625rem;margin-top:.625rem}.cortex-debug-tool__section-bar{display:flex;align-items:center;gap:.375rem;margin-bottom:.375rem}.cortex-debug-tool__section-label{font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--cortex-color-text-muted);font-family:system-ui,-apple-system,sans-serif}.cortex-debug-tool__section-label--success{color:var(--cortex-color-success)}.cortex-debug-tool__section-label--error{color:var(--cortex-color-danger)}.cortex-debug-tool__section-label--approval{color:light-dark(#7c3aed,#a78bfa)}.cortex-debug-tool__section-lang{font-size:.5625rem;color:var(--cortex-color-border-strong);font-family:ui-monospace,SF Mono,monospace;text-transform:lowercase}.cortex-debug-tool__pre{margin:0;max-height:20rem;overflow:auto;padding:.625rem .75rem;border-radius:6px;background:var(--cortex-color-surface);font-size:.75rem;line-height:1.3rem;font-family:ui-monospace,SF Mono,Cascadia Code,monospace;white-space:pre;overflow-wrap:break-word}.cortex-debug-tool__tree{max-height:16rem;overflow:auto;padding:.625rem .75rem;border-radius:6px;background:var(--cortex-color-surface)}.cortex-debug-tool__error-pre{margin:0;max-height:16rem;overflow:auto;padding:.625rem .75rem;border-radius:6px;background:light-dark(#fef2f2,#450a0a);color:light-dark(#991b1b,#fca5a5);font-size:.75rem;line-height:1.3rem;font-family:ui-monospace,SF Mono,Cascadia Code,monospace;white-space:pre-wrap;word-break:break-word}.cortex-debug-tool__message{padding:.5rem .75rem;font-size:.75rem;color:var(--cortex-color-text-secondary);border-radius:6px;background:var(--cortex-color-surface)}.cortex-debug-tool__message--approval{color:light-dark(#5b21b6,#c4b5fd);background:light-dark(#faf5ff,#3b0764)}.cortex-debug-tool__section--success .cortex-debug-tool__tree{background:light-dark(#f0fdf4,#052e16)}.cortex-debug-tool__section--error .cortex-debug-tool__tree{background:light-dark(#fef2f2,#450a0a)}.cortex-tool-call-animated{display:block}.cortex-tool-pill{display:inline-flex;align-items:center;gap:.375rem;padding:.25rem 0;max-width:100%}.cortex-tool-pill__icon{position:relative;width:.75rem;height:.75rem;display:flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--cortex-color-text-muted)}.cortex-tool-pill__spinner{position:absolute;width:.625rem;height:.625rem;border:1.5px solid var(--cortex-color-border-strong);border-top-color:var(--cortex-color-text-muted);border-radius:9999px;opacity:0;transition:opacity .2s}.cortex-tool-pill__spinner--visible{opacity:1;animation:cortex-tool-spin .8s linear infinite}@keyframes cortex-tool-spin{to{transform:rotate(360deg)}}.cortex-tool-pill__svg{position:absolute;width:.75rem;height:.75rem;opacity:0;transform:scale(.6);transition:opacity .2s,transform .2s}.cortex-tool-pill__svg--visible{opacity:1;transform:scale(1)}.cortex-tool-pill__svg--check{color:var(--cortex-color-success)}.cortex-tool-pill__svg--error{color:var(--cortex-color-danger)}.cortex-tool-pill__title{font-size:.75rem;color:var(--cortex-color-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .3s}.cortex-tool-pill__title--error{color:var(--cortex-color-danger)}.cortex-tool-pill__title--pending{color:var(--cortex-color-text-muted);opacity:.6}.cortex-tool-pill__meta{font-size:.6875rem;color:var(--cortex-color-text-muted);opacity:.8;white-space:nowrap;font-variant-numeric:tabular-nums}.cortex-approval-card{display:block;max-width:min(100%,28rem);margin:.25rem 0;border:1px solid var(--cortex-color-border);border-radius:var(--cortex-radius);background:var(--cortex-color-surface);overflow:hidden}.cortex-approval-card--asking{border-color:color-mix(in oklab,var(--cortex-color-accent) 45%,var(--cortex-color-border));box-shadow:0 0 0 3px color-mix(in oklab,var(--cortex-color-accent) 10%,transparent)}.cortex-approval-card__head{display:flex;align-items:center;gap:.5rem;padding:.625rem .75rem 0;font-size:.75rem;font-weight:600;color:var(--cortex-color-accent)}.cortex-approval-card__sentence{margin:0;padding:.375rem .75rem .5rem;font-weight:600;color:var(--cortex-color-text-heading)}.cortex-approval-card__foot{display:flex;gap:.5rem;padding:.625rem .75rem;border-top:1px solid var(--cortex-color-border);background:var(--cortex-color-surface-subtle)}.cortex-approval-card__button{border:1px solid var(--cortex-color-border-strong);border-radius:calc(var(--cortex-radius) * .75);background:var(--cortex-color-surface);padding:.375rem .875rem;font:inherit;font-size:.8125rem;font-weight:500;color:var(--cortex-color-text-strong);cursor:pointer}.cortex-approval-card__button--approve{border-color:var(--cortex-color-accent);background:var(--cortex-color-accent);color:var(--cortex-color-primary-foreground)}.cortex-approval-card__line{display:flex;align-items:baseline;gap:.5rem;padding:.5rem .75rem;font-size:.8125rem;color:var(--cortex-color-text-secondary)}.cortex-approval-card__line .cortex-tool-pill__icon{flex-shrink:0}.cortex-approval-card__decision{font-weight:600;color:var(--cortex-color-text-strong)}.cortex-approval-card__summary{min-width:0;flex:1}.cortex-tool-fold{display:block;align-self:flex-start;text-align:start;border:0;background:none;padding:0 0 .25rem;margin-block-start:-.625rem;margin-inline-start:1.125rem;font:inherit;font-size:.75rem;color:var(--cortex-color-text-muted);cursor:pointer}.cortex-tool-fold:hover,.cortex-tool-fold:focus-visible{color:var(--cortex-color-text-secondary)}.cortex-client-tool-embed{border:1px solid var(--cortex-color-border-strong);border-radius:12px;background:var(--cortex-color-surface);overflow:hidden;max-inline-size:480px}.cortex-client-tool-embed__bar{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 12px;border-block-end:1px solid var(--cortex-color-border-strong);font-size:12px;color:var(--cortex-color-text-muted)}.cortex-client-tool-embed__cancel{border:0;background:none;padding:2px 4px;font:inherit;color:var(--cortex-color-text-muted);cursor:pointer}.cortex-client-tool-embed__cancel:hover{color:var(--cortex-color-danger)}.cortex-client-tool-embed__frame{display:block;inline-size:100%;block-size:420px;border:0;background:var(--cortex-color-surface)}.cortex-client-tool-embed__status{display:flex;align-items:center;gap:8px;padding:20px 16px;font-size:13px;color:var(--cortex-color-text-muted)}.cortex-client-tool-embed__retry{border:1px solid var(--cortex-color-border-strong);border-radius:8px;background:none;padding:4px 10px;font:inherit;font-size:12px;color:inherit;cursor:pointer}.cortex-client-tool-embed-dialog{border:0;padding:0;background:none;inline-size:min(560px,100vw - 48px);max-inline-size:none}.cortex-client-tool-embed-dialog::backdrop{background:#00000073}.cortex-client-tool-embed-dialog .cortex-client-tool-embed{inline-size:100%;max-inline-size:none;box-shadow:0 24px 64px #0000004d}.cortex-client-tool-embed-dialog .cortex-client-tool-embed__frame{block-size:min(70dvh,560px)}.cortex-location-input{border:1px solid var(--cortex-color-border-strong);border-radius:12px;background:var(--cortex-color-surface);overflow:hidden;max-inline-size:480px}.cortex-location-input--settled{display:flex;gap:10px;border-color:var(--cortex-color-border);background:var(--cortex-color-surface-subtle)}.cortex-location-input__map{position:relative;block-size:11rem;background:var(--cortex-color-surface-muted)}.cortex-location-input__map--still{flex:none;inline-size:120px;block-size:84px}.cortex-location-input__canvas{block-size:100%}.cortex-location-input__still-failed{display:flex;align-items:center;justify-content:center;block-size:100%;padding:0 8px;font-size:11px;text-align:center;color:var(--cortex-color-text-muted)}.cortex-location-input__locate{position:absolute;inset-inline-end:10px;inset-block-start:10px;z-index:1001;display:inline-flex;align-items:center;justify-content:center;inline-size:30px;block-size:30px;border:1px solid var(--cortex-color-border-strong);border-radius:8px;background:var(--cortex-color-surface);color:var(--cortex-color-text-strong);box-shadow:0 1px 3px #0003;cursor:pointer}.cortex-location-input__locate svg{inline-size:15px;block-size:15px}.cortex-location-input__locate:disabled{opacity:.45;cursor:default}.cortex-location-input__foot{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 12px;border-block-start:1px solid var(--cortex-color-border-strong);font-size:12px}.cortex-location-input__hint{display:inline-flex;align-items:center;gap:6px;min-inline-size:0;color:var(--cortex-color-text-muted)}.cortex-location-input__hint--failed{color:var(--cortex-color-danger)}.cortex-location-input__spinner{inline-size:.625rem;block-size:.625rem;border:1.5px solid var(--cortex-color-border-strong);border-top-color:var(--cortex-color-text-muted);border-radius:9999px;animation:cortex-tool-spin .8s linear infinite}.cortex-location-input__coords{font-family:var(--cortex-font-mono);font-size:.75rem;color:var(--cortex-color-text-secondary);direction:ltr;unicode-bidi:isolate}.cortex-location-input__actions{display:flex;align-items:center;gap:8px}.cortex-location-input__skip{border:0;background:none;padding:2px 4px;font:inherit;color:var(--cortex-color-text-muted);cursor:pointer}.cortex-location-input__skip:hover{color:var(--cortex-color-danger)}.cortex-location-input__skip:disabled{opacity:.45;cursor:default}.cortex-location-input__send{border:1px solid var(--cortex-color-primary);border-radius:8px;background:var(--cortex-color-primary);padding:4px 10px;font:inherit;font-size:12px;color:var(--cortex-color-primary-foreground);cursor:pointer}.cortex-location-input__send:disabled{opacity:.45;cursor:default}.cortex-location-input__body{display:flex;flex-direction:column;justify-content:center;gap:2px;min-inline-size:0;padding-block:8px;padding-inline-end:12px}.cortex-location-input__title{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--cortex-color-text-strong)}.cortex-location-input__title svg{inline-size:13px;block-size:13px;color:var(--cortex-color-success)}.cortex-reasoning-animated{display:block}.cortex-subtle-activity{display:flex;align-items:center;gap:.375rem;padding:.25rem 0;width:fit-content}.cortex-subtle-activity__dots{display:flex;align-items:center;gap:3px}.cortex-subtle-activity__dot{width:3px;height:3px;border-radius:9999px;background:var(--cortex-color-accent);animation:cortex-subtle-dot-pulse 1.4s ease-in-out infinite}.cortex-subtle-activity__dot--d1{animation-delay:.2s}.cortex-subtle-activity__dot--d2{animation-delay:.4s}@keyframes cortex-subtle-dot-pulse{0%,to{opacity:.3;transform:scale(.8)}40%{opacity:1;transform:scale(1.3)}}.cortex-subtle-activity__label-mask{overflow:hidden;position:relative;height:1.1em}.cortex-subtle-activity__label{display:block;font-size:.75rem;color:var(--cortex-color-text-muted);white-space:nowrap;line-height:1.1em}.cortex-subtle-activity__label--idle,.cortex-subtle-activity__label--entering{opacity:1;transform:translateY(0);transition:opacity .3s ease,transform .3s ease}.cortex-subtle-activity__label--exiting{opacity:0;transform:translateY(-6px);transition:opacity .3s ease,transform .3s ease}.cortex-subtle-activity__label--enter-start{opacity:0;transform:translateY(6px);transition:none}.cortex-attachment-queue{display:flex;flex-wrap:wrap;gap:.375rem;margin-bottom:.5rem}.cortex-attachment-chip{display:inline-flex;align-items:center;gap:.375rem;max-width:14rem;padding-block:.25rem;padding-inline:.5rem .375rem;border:1px solid var(--cortex-color-border);border-radius:var(--cortex-radius);background:var(--cortex-color-surface-subtle);font-size:.75rem;color:var(--cortex-color-text-strong)}.cortex-attachment-chip--error{align-items:flex-start;max-width:100%;border-color:var(--cortex-color-danger-border);background:var(--cortex-color-danger-surface);color:var(--cortex-color-danger)}.cortex-attachment-chip__icon,.cortex-attachment-chip__spinner{flex-shrink:0;width:.875rem;height:.875rem;color:var(--cortex-color-text-muted)}.cortex-attachment-chip__spinner{animation:cortex-attachment-spin .8s linear infinite}.cortex-attachment-chip__spinner-track{opacity:.25}@keyframes cortex-attachment-spin{to{transform:rotate(360deg)}}.cortex-attachment-chip__text{display:grid;min-width:0;text-align:start}.cortex-attachment-chip__reason{font-size:.71875rem;opacity:.9}.cortex-attachment-chip--error .cortex-attachment-chip__icon{color:currentColor}.cortex-attachment-chip__name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cortex-attachment-chip__remove{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:1rem;height:1rem;padding:0;border:0;border-radius:3px;background:transparent;color:currentColor;opacity:.6;cursor:pointer}.cortex-attachment-chip__remove:hover{opacity:1;background:var(--cortex-color-hover)}.cortex-attachment-chip__remove svg{width:.75rem;height:.75rem}.cortex-token-usage{direction:ltr;display:flex;flex-direction:column;margin-top:.375rem;font-family:var(--cortex-font-mono);font-size:.6875rem;line-height:1.4;color:var(--cortex-color-text-muted);-webkit-user-select:none;user-select:none}html[dir=rtl] .cortex-token-usage__summary{align-self:end}html[dir=ltr] .cortex-token-usage__summary{align-self:start}.cortex-token-usage__summary{display:inline-flex;align-items:center;gap:.625rem;padding:.3125rem .625rem;border:1px solid transparent;border-radius:6px;background:transparent;cursor:pointer;transition:background .15s ease,border-color .15s ease;font:inherit;color:inherit;letter-spacing:.01em}.cortex-token-usage__summary:hover{background:var(--cortex-color-surface-subtle);border-color:var(--cortex-color-border)}.cortex-token-usage__summary{flex-wrap:wrap;max-width:100%;text-align:start}.cortex-token-usage__total-number{font-weight:600;font-variant-numeric:tabular-nums;color:var(--cortex-color-text-secondary)}.cortex-token-usage__total-label{margin-inline-start:3px;color:var(--cortex-color-text-muted);font-weight:400;letter-spacing:.03em}.cortex-token-usage__model{color:var(--cortex-color-border-strong);font-weight:400;font-size:.5625rem;letter-spacing:.02em;min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cortex-token-usage__pills{display:inline-flex;align-items:center;gap:.5rem}.cortex-token-usage__pill{display:inline-flex;align-items:center;gap:4px;font-variant-numeric:tabular-nums;color:var(--cortex-color-text-muted)}.cortex-token-usage__dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}.cortex-token-usage__dot--input{background:light-dark(#ea580c,#fb923c);box-shadow:0 0 0 2px #ea580c1a}.cortex-token-usage__dot--output{background:light-dark(#4f46e5,#818cf8);box-shadow:0 0 0 2px #4f46e51a}.cortex-token-usage__cache-badge{font-size:.5625rem;font-weight:600;color:var(--cortex-color-success);background:var(--cortex-color-success-surface);padding:1px 6px;border-radius:3px;font-family:system-ui,-apple-system,sans-serif}.cortex-token-usage__chevron{color:var(--cortex-color-border-strong);transition:transform .25s cubic-bezier(.4,0,.2,1);flex-shrink:0}.cortex-token-usage--expanded .cortex-token-usage__chevron{transform:rotate(180deg)}.cortex-token-usage__details{display:grid;grid-template-rows:0fr;transition:grid-template-rows .25s cubic-bezier(.4,0,.2,1),opacity .2s ease,margin .2s ease;opacity:0;margin-top:0}.cortex-token-usage__details-inner{overflow:hidden}.cortex-token-usage--expanded .cortex-token-usage__details{grid-template-rows:1fr;opacity:1;margin-top:.375rem}.cortex-token-usage__columns{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--cortex-color-border);border-radius:8px;overflow:hidden}.cortex-token-usage__col{background:var(--cortex-color-surface-subtle);padding:.5rem .625rem}.cortex-token-usage__col-header{display:flex;align-items:center;gap:.375rem;margin-bottom:.375rem}.cortex-token-usage__col-label{font-weight:600;font-size:.5625rem;text-transform:uppercase;letter-spacing:.06em;color:var(--cortex-color-text-secondary);font-family:system-ui,-apple-system,sans-serif}.cortex-token-usage__col-total{margin-inline-start:auto;font-weight:700;font-variant-numeric:tabular-nums;color:var(--cortex-color-text-secondary)}.cortex-token-usage__rows{display:flex;flex-direction:column;gap:1px}.cortex-token-usage__row{display:flex;align-items:baseline;justify-content:space-between;padding:2px 0;padding-inline-start:calc(6px + .375rem)}.cortex-token-usage__row-label{color:var(--cortex-color-text-muted);font-size:.625rem}.cortex-token-usage__row-value{font-variant-numeric:tabular-nums;color:var(--cortex-color-text-secondary);font-weight:500}.cortex-token-usage__cache-bar-row{display:flex;align-items:center;gap:.5rem;margin-top:.5rem;padding-inline-start:calc(6px + .375rem)}.cortex-token-usage__cache-bar{flex:1;height:3px;border-radius:2px;background:var(--cortex-color-border);overflow:hidden}.cortex-token-usage__cache-fill{height:100%;border-radius:2px;background:linear-gradient(90deg,#10b981,var(--cortex-color-success));transition:width .4s cubic-bezier(.4,0,.2,1)}.cortex-token-usage__cache-label{font-size:.5625rem;font-weight:600;color:var(--cortex-color-success);white-space:nowrap;font-family:system-ui,-apple-system,sans-serif}.cortex-llm-inspector{direction:ltr;display:flex;flex-direction:column;margin-top:.375rem;font-family:var(--cortex-font-mono);font-size:.6875rem;line-height:1.4;color:var(--cortex-color-text-muted);-webkit-user-select:none;user-select:none}html[dir=rtl] .cortex-llm-inspector__trigger{align-self:end}html[dir=ltr] .cortex-llm-inspector__trigger{align-self:start}.cortex-llm-inspector__trigger{display:inline-flex;align-items:center;gap:.5rem;padding:.3125rem .625rem;border:1px solid transparent;border-radius:6px;background:transparent;cursor:pointer;transition:background .15s ease,border-color .15s ease;font:inherit;color:inherit;letter-spacing:.01em}.cortex-llm-inspector__trigger:hover{background:var(--cortex-color-surface-subtle);border-color:var(--cortex-color-border)}.cortex-llm-inspector__icon{color:var(--cortex-color-text-muted);flex-shrink:0}.cortex-llm-inspector__loading{color:var(--cortex-color-border-strong);font-style:italic}.cortex-llm-inspector__badge{display:inline-flex;align-items:center;justify-content:center;min-width:1.25rem;height:1.25rem;padding:0 .35rem;border-radius:9999px;background:var(--cortex-color-border);color:var(--cortex-color-text-secondary);font-size:.5625rem;font-weight:700}.cortex-llm-inspector__chevron{color:var(--cortex-color-border-strong);transition:transform .25s cubic-bezier(.4,0,.2,1);flex-shrink:0}.cortex-llm-inspector--open .cortex-llm-inspector__chevron{transform:rotate(180deg)}.cortex-llm-inspector__panel-wrapper{display:grid;grid-template-rows:0fr;transition:grid-template-rows .25s cubic-bezier(.4,0,.2,1),opacity .2s ease,margin .2s ease;opacity:0;margin-top:0}.cortex-llm-inspector__panel-inner{overflow:hidden}.cortex-llm-inspector--open .cortex-llm-inspector__panel-wrapper{grid-template-rows:1fr;opacity:1;margin-top:.375rem}.cortex-llm-inspector__panel{display:flex;flex-direction:column;gap:.375rem}.cortex-llm-inspector__empty{padding:.625rem;color:var(--cortex-color-text-muted);font-style:italic}.cortex-llm-inspector__step{border-radius:8px;background:var(--cortex-color-surface-subtle);overflow:hidden;transition:box-shadow .2s ease}.cortex-llm-inspector__step--expanded{box-shadow:0 0 0 1px var(--cortex-color-border)}.cortex-llm-inspector__step-header{display:flex;align-items:center;gap:.5rem;width:100%;padding:.5rem .625rem;border:none;background:transparent;cursor:pointer;font:inherit;color:inherit;text-align:start;transition:background .15s ease}.cortex-llm-inspector__step-header:hover{background:#00000005}.cortex-llm-inspector__step-label{font-weight:600;color:var(--cortex-color-text-secondary);white-space:nowrap;font-family:system-ui,-apple-system,sans-serif}.cortex-llm-inspector__step-metrics{display:inline-flex;align-items:center;gap:.625rem;margin-inline-start:auto;font-variant-numeric:tabular-nums}.cortex-llm-inspector__metric{display:inline-flex;align-items:center;gap:3px}.cortex-llm-inspector__dot{width:5px;height:5px;border-radius:50%;flex-shrink:0}.cortex-llm-inspector__dot--input{background:light-dark(#ea580c,#fb923c);box-shadow:0 0 0 1.5px #ea580c1f}.cortex-llm-inspector__dot--output{background:light-dark(#4f46e5,#818cf8);box-shadow:0 0 0 1.5px #4f46e51f}.cortex-llm-inspector__cache-pct{font-size:.5625rem;font-weight:600;color:var(--cortex-color-success);background:var(--cortex-color-success-surface);padding:1px 5px;border-radius:3px;font-family:system-ui,-apple-system,sans-serif}.cortex-llm-inspector__step-chevron{color:var(--cortex-color-border-strong);transition:transform .2s ease;flex-shrink:0}.cortex-llm-inspector__step--expanded .cortex-llm-inspector__step-chevron{transform:rotate(180deg)}.cortex-llm-inspector__step-body-wrapper{display:grid;grid-template-rows:0fr;transition:grid-template-rows .25s cubic-bezier(.4,0,.2,1),opacity .2s ease;opacity:0}.cortex-llm-inspector__step-body-inner{overflow:hidden}.cortex-llm-inspector__step--expanded .cortex-llm-inspector__step-body-wrapper{grid-template-rows:1fr;opacity:1}.cortex-llm-inspector__step-body{padding:0 .625rem .625rem;display:flex;flex-direction:column;gap:.5rem}.cortex-llm-inspector__usage-rows{display:flex;flex-direction:column;border-radius:6px;overflow:hidden;background:var(--cortex-color-border);gap:1px}.cortex-llm-inspector__usage-row{display:flex;align-items:baseline;gap:.5rem;padding:.375rem .625rem;background:var(--cortex-color-surface);flex-wrap:wrap}.cortex-llm-inspector__usage-row--total{background:light-dark(#fafbfc,#141414)}.cortex-llm-inspector__usage-lbl{font-size:.5625rem;text-transform:uppercase;letter-spacing:.05em;color:var(--cortex-color-text-muted);font-weight:600;width:3.25rem;flex-shrink:0;font-family:system-ui,-apple-system,sans-serif}.cortex-llm-inspector__usage-val{font-variant-numeric:tabular-nums;font-weight:600;color:var(--cortex-color-text-secondary);min-width:3rem}.cortex-llm-inspector__usage-row--total .cortex-llm-inspector__usage-val{font-weight:700;color:var(--cortex-color-text-heading)}.cortex-llm-inspector__usage-detail{color:var(--cortex-color-border-strong);font-size:.5625rem;margin-inline-start:auto}.cortex-llm-inspector__tabs{display:flex;gap:0;border-bottom:1px solid var(--cortex-color-border)}.cortex-llm-inspector__tab{padding:.375rem .75rem;border:none;background:transparent;cursor:pointer;font:inherit;color:var(--cortex-color-text-muted);font-weight:500;position:relative;transition:color .15s ease;font-family:system-ui,-apple-system,sans-serif}.cortex-llm-inspector__tab:hover{color:var(--cortex-color-text-secondary)}.cortex-llm-inspector__tab--active{color:var(--cortex-color-text-heading);font-weight:600}.cortex-llm-inspector__tab--active:after{content:"";position:absolute;inset-inline:0;bottom:-1px;height:2px;background:var(--cortex-color-text-heading);border-radius:1px 1px 0 0}.cortex-llm-inspector__json-pane{position:relative;max-height:24rem;overflow:auto;padding:.625rem;background:var(--cortex-color-surface);border-radius:6px}.cortex-llm-inspector__json-copy{position:sticky;top:0;float:inline-end;z-index:1}.cortex-json-tree{display:block;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.75rem;line-height:1.25rem;-webkit-user-select:text;user-select:text;white-space:pre-wrap;word-break:break-word}.cortex-json-tree__indent{padding-inline-start:1.25em;border-inline-start:1px solid var(--cortex-color-border);margin-inline-start:.3em}.cortex-json-tree__line{position:relative}.cortex-json-tree__toggle{cursor:pointer;-webkit-user-select:none;user-select:none}.cortex-json-tree__toggle:hover .cortex-json-tree__arrow{color:var(--cortex-color-text)}.cortex-json-tree__arrow{display:inline-block;width:1em;text-align:center;color:var(--cortex-color-text-muted);font-size:.525rem;transition:transform .15s ease;vertical-align:middle}.cortex-json-tree__arrow--collapsed{transform:rotate(-90deg)}.cortex-json-tree__bracket{color:var(--cortex-color-text-secondary)}.cortex-json-tree__key{color:light-dark(#6366f1,#818cf8)}.cortex-json-tree__colon{color:var(--cortex-color-text-secondary)}.cortex-json-tree__comma{color:var(--cortex-color-text-muted)}.cortex-json-tree__string{color:var(--cortex-color-success)}.cortex-json-tree__number{color:light-dark(#2563eb,#60a5fa)}.cortex-json-tree__boolean{color:light-dark(#d97706,#fbbf24)}.cortex-json-tree__null{color:var(--cortex-color-text-muted);font-style:italic}.cortex-json-tree__collapsed-hint{display:inline-block;padding:0 .4em;margin:0 .15em;font-size:.625rem;line-height:1.5;color:var(--cortex-color-text-muted);background:var(--cortex-color-surface-subtle);border:1px solid var(--cortex-color-border);border-radius:3px;font-style:italic;cursor:pointer;-webkit-user-select:none;user-select:none;vertical-align:middle}.cortex-json-tree__collapsed-hint:hover{color:var(--cortex-color-text-secondary);border-color:var(--cortex-color-border-strong);background:var(--cortex-color-surface-muted)}.cortex-copy-btn{display:inline-flex;align-items:center}.cortex-copy-btn__button{display:inline-flex;align-items:center;justify-content:center;width:1.375rem;height:1.375rem;padding:0;border:none;border-radius:3px;background:transparent;color:var(--cortex-color-text-muted);cursor:pointer;opacity:0;transition:opacity .15s ease,color .15s ease,background .15s ease}:hover>cortex-copy-button .cortex-copy-btn__button,:hover>.cortex-copy-btn .cortex-copy-btn__button,.cortex-copy-btn__button:hover,.cortex-copy-btn__button:focus-visible{opacity:1}.cortex-copy-btn__button:hover{background:var(--cortex-color-hover);color:var(--cortex-color-text)}.cortex-copy-btn__button--copied{opacity:1;color:var(--cortex-color-success);pointer-events:none}.cortex-copy-btn__button--copied:hover{color:var(--cortex-color-success);background:transparent}.cortex-copy-btn__icon{flex-shrink:0}.cortex-copy-btn__icon--check{animation:cortex-copy-pop .25s cubic-bezier(.34,1.56,.64,1) forwards}@keyframes cortex-copy-pop{0%{transform:scale(.6);opacity:0}to{transform:scale(1);opacity:1}}@media(prefers-reduced-motion:reduce){.cortex-widget *,.cortex-widget *:before,.cortex-widget *:after,.cortex-widget *::backdrop{animation-duration:.01ms!important;animation-delay:0s!important;animation-iteration-count:1!important;transition-duration:.01ms!important;transition-delay:0s!important}}\n'],
|
|
11999
12518
|
dependencies: [
|
|
12000
12519
|
{
|
|
12001
12520
|
kind: "component",
|
|
@@ -12159,8 +12678,8 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
12159
12678
|
<div class="cortex-widget__sidebar-backdrop" (click)="closeSidebar()"></div>
|
|
12160
12679
|
</div>
|
|
12161
12680
|
|
|
12162
|
-
<!-- The widget's own parts, each standing in for a slot the
|
|
12163
|
-
Marked like a
|
|
12681
|
+
<!-- The widget's own parts, each standing in for a slot the consumer left empty.
|
|
12682
|
+
Marked like a consumer's slot so each default's context is typed the same way. -->
|
|
12164
12683
|
<ng-template cortexSlot="header" #defaultHeader let-header>
|
|
12165
12684
|
<cortex-chat-header [context]="header" />
|
|
12166
12685
|
</ng-template>
|
|
@@ -12179,10 +12698,15 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
12179
12698
|
</ng-template>
|
|
12180
12699
|
|
|
12181
12700
|
<!-- The composer, or the notice an agent that takes no messages shows instead.
|
|
12182
|
-
|
|
12183
|
-
thread /chat refuses.
|
|
12701
|
+
No composer until the handshake answers: a first send before it could open
|
|
12702
|
+
a thread /chat refuses. Nothing while the first answer is out, then why
|
|
12703
|
+
Cortex has not answered. -->
|
|
12184
12704
|
<ng-template #composer>
|
|
12185
|
-
@if (
|
|
12705
|
+
@if (unansweredNotice(); as notice) {
|
|
12706
|
+
<p class="cortex-widget__messages-disabled">
|
|
12707
|
+
{{ notice | translate }}
|
|
12708
|
+
</p>
|
|
12709
|
+
} @else if (chatService.capabilities()?.messages === false) {
|
|
12186
12710
|
<p class="cortex-widget__messages-disabled">
|
|
12187
12711
|
{{ 'translate_messages_disabled' | translate }}
|
|
12188
12712
|
</p>
|
|
@@ -12191,7 +12715,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
12191
12715
|
}
|
|
12192
12716
|
</ng-template>
|
|
12193
12717
|
`,
|
|
12194
|
-
styles: ['@charset "UTF-8";:root{--cortex-color-surface: light-dark(#ffffff, #0a0a0a);--cortex-color-surface-subtle: light-dark(#f8fafc, #141414);--cortex-color-surface-muted: light-dark(#f1f5f9, #1f1f1f);--cortex-color-border: light-dark(#e2e8f0, #2e2e2e);--cortex-color-border-strong: light-dark(#cbd5e1, #444444);--cortex-color-text-heading: light-dark(#1e293b, #fafafa);--cortex-color-text-strong: light-dark(#334155, #e5e5e5);--cortex-color-text: light-dark(#475569, #d4d4d4);--cortex-color-text-secondary: light-dark(#64748b, #a3a3a3);--cortex-color-text-muted: light-dark(#94a3b8, #737373);--cortex-color-primary: light-dark(#1e293b, #fafafa);--cortex-color-primary-foreground: light-dark(#ffffff, #0a0a0a);--cortex-color-accent: light-dark(#4f46e5, #818cf8);--cortex-color-accent-surface: light-dark(#e0e7ff, #312e81);--cortex-color-link: light-dark(#2563eb, #60a5fa);--cortex-color-hover: light-dark(rgba(0, 0, 0, .05), rgba(255, 255, 255, .06));--cortex-color-user-surface: var(--cortex-color-surface-subtle);--cortex-color-user-border: var(--cortex-color-border);--cortex-color-code-text: light-dark(#334155, #e5e5e5);--cortex-color-success: light-dark(#059669, #34d399);--cortex-color-success-surface: light-dark(#ecfdf5, #064e3b);--cortex-color-success-border: light-dark(#d1fae5, #065f46);--cortex-color-danger: light-dark(#dc2626, #f87171);--cortex-color-danger-surface: light-dark(#fef2f2, #450a0a);--cortex-color-danger-border: light-dark(#fecaca, #7f1d1d);--cortex-radius: .5rem;--cortex-font-mono: var( --default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace );--cortex-font-size: .8125rem}.cortex-widget{color-scheme:light}.cortex-widget[data-cortex-theme=dark]{color-scheme:dark}.cortex-widget[data-cortex-theme=system]{color-scheme:light dark}@layer base.cortex{:where(.cortex-widget),:where(.cortex-widget) *,:where(.cortex-widget) :before,:where(.cortex-widget) :after{box-sizing:border-box;margin:0;padding:0;border:0 solid}:where(.cortex-widget){tab-size:4}:where(.cortex-widget) hr{height:0;color:inherit;border-top-width:1px}:where(.cortex-widget) :is(h1,h2,h3,h4,h5,h6){font-size:inherit;font-weight:inherit}:where(.cortex-widget) a{color:inherit;text-decoration:inherit}:where(.cortex-widget) :is(b,strong){font-weight:bolder}:where(.cortex-widget) :is(code,kbd,samp,pre){font-family:var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings, normal);font-variation-settings:var(--default-mono-font-variation-settings, normal);font-size:1em}:where(.cortex-widget) small{font-size:80%}:where(.cortex-widget) :is(sub,sup){font-size:75%;line-height:0;position:relative;vertical-align:baseline}:where(.cortex-widget) sub{bottom:-.25em}:where(.cortex-widget) sup{top:-.5em}:where(.cortex-widget) table{text-indent:0;border-color:inherit;border-collapse:collapse}:where(.cortex-widget) :is(ol,ul,menu){list-style:none}:where(.cortex-widget) :is(img,svg,video,canvas,audio,iframe,embed,object){display:block;vertical-align:middle}:where(.cortex-widget) :is(img,video){max-width:100%;height:auto}:where(.cortex-widget) :is(button,input,select,optgroup,textarea){font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;border-radius:0;background-color:transparent;opacity:1}:where(.cortex-widget) ::placeholder{opacity:1;color:color-mix(in oklab,currentcolor 50%,transparent)}:where(.cortex-widget) textarea{resize:vertical}}.cortex-widget .hljs{color:light-dark(#24292e,#c9d1d9);background:transparent}.cortex-widget .hljs-doctag,.cortex-widget .hljs-keyword,.cortex-widget .hljs-meta .hljs-keyword,.cortex-widget .hljs-template-tag,.cortex-widget .hljs-template-variable,.cortex-widget .hljs-type,.cortex-widget .hljs-variable.language_{color:light-dark(#d73a49,#ff7b72)}.cortex-widget .hljs-title,.cortex-widget .hljs-title.class_,.cortex-widget .hljs-title.class_.inherited__,.cortex-widget .hljs-title.function_{color:light-dark(#6f42c1,#d2a8ff)}.cortex-widget .hljs-attr,.cortex-widget .hljs-attribute,.cortex-widget .hljs-literal,.cortex-widget .hljs-meta,.cortex-widget .hljs-number,.cortex-widget .hljs-operator,.cortex-widget .hljs-selector-attr,.cortex-widget .hljs-selector-class,.cortex-widget .hljs-selector-id,.cortex-widget .hljs-variable{color:light-dark(#005cc5,#79c0ff)}.cortex-widget .hljs-meta .hljs-string,.cortex-widget .hljs-regexp,.cortex-widget .hljs-string{color:light-dark(#032f62,#a5d6ff)}.cortex-widget .hljs-built_in,.cortex-widget .hljs-symbol{color:light-dark(#e36209,#ffa657)}.cortex-widget .hljs-code,.cortex-widget .hljs-comment,.cortex-widget .hljs-formula{color:light-dark(#6a737d,#8b949e)}.cortex-widget .hljs-name,.cortex-widget .hljs-quote,.cortex-widget .hljs-selector-pseudo,.cortex-widget .hljs-selector-tag{color:light-dark(#22863a,#7ee787)}.cortex-widget .hljs-subst{color:light-dark(#24292e,#c9d1d9)}.cortex-widget .hljs-section{color:light-dark(#005cc5,#1f6feb);font-weight:700}.cortex-widget .hljs-bullet{color:light-dark(#735c0f,#f2cc60)}.cortex-widget .hljs-emphasis{font-style:italic}.cortex-widget .hljs-strong{font-weight:700}.cortex-widget .hljs-addition{color:light-dark(#22863a,#aff5b4);background-color:light-dark(#f0fff4,#033a16)}.cortex-widget .hljs-deletion{color:light-dark(#b31d28,#ffdcd7);background-color:light-dark(#ffeef0,#67060c)}.cortex-widget{display:block}.cortex-widget__container{width:100%;height:100%;position:relative;overflow:hidden}.cortex-widget__screen{position:absolute;inset:0;display:flex;flex-direction:column;transition:transform .3s ease-out}.cortex-widget__screen--active{transform:translate(0)}.cortex-widget__screen--left{transform:translate(-100%)}[dir=rtl] .cortex-widget__screen--left,.cortex-widget__screen--right{transform:translate(100%)}[dir=rtl] .cortex-widget__screen--right{transform:translate(-100%)}@keyframes cortex-skeleton-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.cortex-skeleton{background:linear-gradient(90deg,var(--cortex-color-border) 0%,var(--cortex-color-surface-muted) 40%,var(--cortex-color-border) 80%);background-size:200% 100%;animation:cortex-skeleton-shimmer 1.8s ease-in-out infinite;border-radius:6px}.cortex-widget__messages-skeleton{flex:1;overflow:hidden;padding:1rem;display:flex;flex-direction:column;gap:.5rem}.cortex-widget__msg-skel{width:100%;display:flex;flex-direction:column}.cortex-widget__msg-skel--user{align-items:flex-end}.cortex-widget__msg-skel--assistant{align-items:flex-start}.cortex-widget__msg-skel-bubble{max-width:80%;display:flex;flex-direction:column;gap:.5rem}.cortex-widget__msg-skel-bubble--user{padding:.75rem 1rem;border-radius:calc(var(--cortex-radius) * 2);border-end-end-radius:0;border:1px solid var(--cortex-color-border);background:var(--cortex-color-surface-subtle)}.cortex-widget__msg-skel-line{height:.75rem;max-width:100%}.cortex-widget__messages{flex:1;overflow:hidden}.cortex-widget__container--full{display:flex;flex-direction:row}.cortex-widget__container--full>.cortex-widget__screen{position:relative;inset:auto;transition:none}.cortex-widget__container--full>.cortex-widget__screen.cortex-widget__screen--active,.cortex-widget__container--full>.cortex-widget__screen.cortex-widget__screen--left,.cortex-widget__container--full>.cortex-widget__screen.cortex-widget__screen--right{transform:none}.cortex-widget__container--full>.cortex-widget__screen:first-child{width:280px;min-width:280px;flex-shrink:0;border-right:1px solid var(--cortex-color-border);background:var(--cortex-color-surface-subtle)}[dir=rtl] .cortex-widget__container--full>.cortex-widget__screen:first-child{border-right:0;border-left:1px solid var(--cortex-color-border)}.cortex-widget__container--full>.cortex-widget__screen:nth-child(2){flex:1;min-width:0}.cortex-widget__container--full .cortex-widget__back-btn,.cortex-widget__container--full .cortex-widget__history-btn{display:none}@media(min-width:769px){.cortex-widget__container--full>.cortex-widget__screen:nth-child(2) .cortex-widget__new-btn{display:none}}.cortex-widget__container--full .cortex-widget__chat-title{font-size:var(--cortex-font-size-header, .875rem)}.cortex-widget__container--full .cortex-widget__chat-header{background:var(--cortex-color-surface)}.cortex-widget__container--full .cortex-message-list,.cortex-widget__container--full .cortex-widget__messages-skeleton{padding:1.5rem max(2rem,(100% - 48rem) / 2)}.cortex-widget__container--full .cortex-widget__input-area{padding:.75rem max(2rem,(100% - 48rem) / 2) 1.25rem}@media(max-width:768px){.cortex-widget__container--full>.cortex-widget__screen:first-child{position:fixed;inset:0;width:280px;min-width:280px;z-index:110;transform:translate(-100%);transition:transform .28s cubic-bezier(.4,0,.2,1)}[dir=rtl] .cortex-widget__container--full>.cortex-widget__screen:first-child{transform:translate(100%);border-left:1px solid var(--cortex-color-border);border-right:0}.cortex-widget__container--full>.cortex-widget__screen:nth-child(2){flex:1;min-width:0}.cortex-widget__container--full .cortex-widget__sidebar-toggle-btn{flex-shrink:0;width:2rem;height:2rem;border-radius:calc(var(--cortex-radius) * .75);display:flex;align-items:center;justify-content:center;background:transparent;border:0;cursor:pointer;transition:color .15s,background-color .15s;color:var(--cortex-color-text-secondary)}.cortex-widget__container--full .cortex-widget__sidebar-toggle-btn:hover{color:var(--cortex-color-text-strong);background:var(--cortex-color-surface-muted)}.cortex-widget__container--full .cortex-widget__sidebar-toggle-btn:active{background:var(--cortex-color-border)}.cortex-widget__container--full .cortex-message-list,.cortex-widget__container--full .cortex-widget__messages-skeleton{padding:1rem}.cortex-widget__container--full .cortex-widget__input-area{padding:.75rem}}@media(max-width:768px){.cortex-widget__container--full.cortex-widget__container--sidebar-open>.cortex-widget__screen:first-child{transform:translate(0)}.cortex-widget__container--full.cortex-widget__container--sidebar-open .cortex-widget__sidebar-backdrop{display:block;position:fixed;inset:0;z-index:100;background:#0f172a59;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);animation:cortex-sidebar-backdrop-in .2s ease-out both}}@keyframes cortex-sidebar-backdrop-in{0%{opacity:0}to{opacity:1}}.cortex-widget__chat-header{flex-shrink:0;height:3rem;padding:0 1rem;display:flex;align-items:center;gap:.75rem;border-bottom:1px solid var(--cortex-color-border);background:var(--cortex-color-surface)}.cortex-widget__header-btn{flex-shrink:0;width:2rem;height:2rem;border-radius:calc(var(--cortex-radius) * .75);display:flex;align-items:center;justify-content:center;background:transparent;border:0;cursor:pointer;transition:color .15s,background-color .15s;color:var(--cortex-color-text-muted)}.cortex-widget__header-btn:hover{color:var(--cortex-color-text);background:var(--cortex-color-surface-muted)}[dir=rtl] .cortex-widget__back-icon{transform:rotate(180deg)}.cortex-widget__chat-title-wrap{min-width:0;flex:1}.cortex-widget__chat-title{font-family:var(--cortex-font-display, inherit);font-size:var(--cortex-font-size-header, var(--cortex-font-size));font-weight:500;color:var(--cortex-color-text-strong);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin:0}.cortex-widget__debug-btn{flex-shrink:0;font-size:.6875rem;font-weight:500;padding:.25rem .625rem;border-radius:calc(var(--cortex-radius) * .75);border:0;cursor:pointer;transition:background-color .15s}.cortex-widget__debug-btn--on{background:light-dark(#fef3c7,#78350f);color:light-dark(#d97706,#fbbf24)}.cortex-widget__debug-btn--on:hover{background:light-dark(#fde68a,#92400e)}.cortex-widget__debug-btn--off{background:var(--cortex-color-surface-muted);color:var(--cortex-color-text-muted)}.cortex-widget__debug-btn--off:hover{background:var(--cortex-color-border)}.cortex-widget__landing{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:1.25rem;text-align:center}.cortex-widget__landing .cortex-widget__landing-composer{max-width:26rem}.cortex-widget__landing-composer{width:100%}.cortex-widget__landing-composer .cortex-widget__input-area{padding:1rem 0 0;border-top:0;background:transparent}.cortex-widget__landing-icon{width:2.5rem;height:2.5rem;border-radius:var(--cortex-radius);background:var(--cortex-color-accent-surface);color:var(--cortex-color-accent);display:flex;align-items:center;justify-content:center;margin-bottom:.875rem}[dir=rtl] .cortex-widget__landing-icon{transform:scaleX(-1)}.cortex-widget__landing-greeting{font-family:var(--cortex-font-display, inherit);font-size:1.0625rem;font-weight:600;line-height:1.3;color:var(--cortex-color-text-heading);margin:0}.cortex-widget__landing-chips{display:flex;flex-wrap:wrap;justify-content:center;gap:.5rem;margin-top:.875rem}.cortex-widget__landing-chip{border:1px solid var(--cortex-color-border);border-radius:999px;background:var(--cortex-color-surface);color:var(--cortex-color-text-strong);font-size:.75rem;font-weight:500;padding:.375rem .75rem;cursor:pointer;transition:border-color .15s,color .15s}.cortex-widget__landing-chip:hover{border-color:var(--cortex-color-accent);color:var(--cortex-color-accent)}.cortex-widget__landing-recent{width:100%;max-width:26rem;margin-top:1rem;display:flex;flex-direction:column}.cortex-widget__landing-recent-item{display:flex;align-items:center;gap:.75rem;padding:.4375rem .625rem;border:0;border-radius:calc(var(--cortex-radius) * .75);background:transparent;cursor:pointer;transition:background-color .15s}.cortex-widget__landing-recent-item:hover{background:var(--cortex-color-hover)}.cortex-widget__landing-recent-title{flex:1;min-width:0;text-align:start;font-size:var(--cortex-font-size);font-weight:500;color:var(--cortex-color-text-strong);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin:0}.cortex-widget__landing-recent-time{flex-shrink:0;font-size:.6875rem;color:var(--cortex-color-text-muted);margin:0}cortex-chat-composer,cortex-message-tool-call-outcome,cortex-llm-usage-chips{display:contents}.cortex-widget__input-area{flex-shrink:0;padding:.75rem;background:var(--cortex-color-surface);border-top:1px solid var(--cortex-color-border)}.cortex-widget__input-box{display:flex;align-items:flex-end;gap:.5rem;border-radius:calc(var(--cortex-radius) * 1.5);border:1px solid var(--cortex-color-border);padding:.375rem;background:color-mix(in oklab,var(--cortex-color-surface-subtle) 45%,var(--cortex-color-surface));transition:border-color .15s,background-color .15s}.cortex-widget__input-box--enabled:focus-within{border-color:var(--cortex-color-border-strong);background:var(--cortex-color-surface)}.cortex-widget__input-box--dragging{border-color:var(--cortex-color-text-heading);border-style:dashed;background:var(--cortex-color-surface-muted)}.cortex-widget__textarea,.cortex-widget__textarea:focus,.cortex-widget__textarea:focus-visible,.cortex-widget__textarea:disabled{background:transparent;border:0;outline:none;box-shadow:none}.cortex-widget__textarea{flex:1;resize:none;font-size:var(--cortex-font-size-message, var(--cortex-font-size));padding:.375rem .5rem;min-height:28px;max-height:calc(5.5 * var(--cortex-font-size-message, var(--cortex-font-size)) + .75rem);overflow-y:auto;line-height:1.375;color:var(--cortex-color-text-strong)}.cortex-widget__textarea::placeholder{color:var(--cortex-color-text-muted)}.cortex-widget__textarea--disabled{color:var(--cortex-color-text-muted);cursor:not-allowed}.cortex-widget__textarea:disabled{cursor:not-allowed}.cortex-widget__input-actions{flex-shrink:0;display:flex;align-items:center;gap:.375rem}@keyframes cortex-stop-pulse-ring{0%{opacity:.45;transform:scale(1)}50%{opacity:.15;transform:scale(1.12)}to{opacity:.45;transform:scale(1)}}@keyframes cortex-stop-fade-in{0%{opacity:0;transform:scale(.7)}to{opacity:1;transform:scale(1)}}.cortex-stop-btn{flex-shrink:0;width:2rem;height:2rem;border-radius:var(--cortex-radius);display:flex;align-items:center;justify-content:center;cursor:pointer;position:relative;background:var(--cortex-color-danger);color:#fff;border:0;animation:cortex-stop-fade-in .2s ease-out both;transition:background .15s ease}.cortex-stop-btn:hover{background:color-mix(in oklab,var(--cortex-color-danger) 85%,black)}.cortex-stop-btn:active{transform:scale(.92)}.cortex-stop-btn__ring{position:absolute;inset:0;border-radius:var(--cortex-radius);background:var(--cortex-color-danger);animation:cortex-stop-pulse-ring 2s ease-in-out infinite;pointer-events:none}.cortex-stop-btn__icon{position:relative;z-index:1}.cortex-widget__attach-btn{flex-shrink:0;width:2rem;height:2rem;border-radius:var(--cortex-radius);display:flex;align-items:center;justify-content:center;background:transparent;border:0;cursor:pointer;transition:color .15s,background-color .15s;color:var(--cortex-color-text-muted)}.cortex-widget__attach-btn:hover{color:var(--cortex-color-text);background:var(--cortex-color-hover)}.cortex-widget__file-input{display:none}.cortex-widget__send-btn{flex-shrink:0;width:2rem;height:2rem;border-radius:var(--cortex-radius);display:flex;align-items:center;justify-content:center;border:0;transition:background-color .15s;cursor:default}.cortex-widget__send-btn--empty{background:var(--cortex-color-send-empty, transparent);color:var(--cortex-color-send-empty-text, var(--cortex-color-text-muted))}.cortex-widget__send-btn--ready{background:var(--cortex-color-primary);color:var(--cortex-color-primary-foreground);cursor:pointer}.cortex-widget__send-btn--ready:hover{background:color-mix(in oklab,var(--cortex-color-primary) 85%,var(--cortex-color-primary-foreground))}[dir=rtl] .cortex-widget__send-icon{transform:rotate(180deg)}.cortex-widget__threads-header{flex-shrink:0;padding:1.25rem 1.25rem 1rem;display:flex;align-items:center;gap:.75rem}.cortex-widget__threads-header .cortex-widget__new-btn{margin-inline-start:auto}.cortex-widget__threads-title{font-family:var(--cortex-font-display, inherit);font-size:var(--cortex-font-size-header, .9375rem);font-weight:600;color:var(--cortex-color-text-heading);letter-spacing:-.01em;margin:0}.cortex-widget__threads-count{font-size:.6875rem;color:var(--cortex-color-text-muted);margin-top:.125rem;margin-bottom:0}.cortex-widget__new-chat-btn{display:inline-flex;align-items:center;gap:.375rem;font-size:.75rem;font-weight:500;color:var(--cortex-color-primary-foreground);background:var(--cortex-color-primary);padding:.375rem .75rem;border-radius:calc(var(--cortex-radius) * .75);border:0;cursor:pointer;transition:background-color .15s}.cortex-widget__new-chat-btn:hover{background:color-mix(in oklab,var(--cortex-color-primary) 85%,var(--cortex-color-primary-foreground))}.cortex-widget__new-chat-btn:active{background:var(--cortex-color-primary)}.cortex-widget__new-chat-btn--empty-state{margin-top:.75rem}.cortex-widget__threads-list{flex:1;overflow-y:auto;padding:0 .75rem .75rem}.cortex-widget__thread-skeleton{display:flex;align-items:center;gap:.75rem;padding:.75rem;margin-bottom:.375rem;border-radius:var(--cortex-radius);border:1px solid var(--cortex-color-border);background:var(--cortex-color-surface)}.cortex-widget__thread-skeleton-icon{flex-shrink:0;width:2rem;height:2rem}.cortex-widget__thread-skeleton-lines{flex:1;display:flex;flex-direction:column;gap:.375rem}.cortex-widget__thread-skeleton-line{height:.875rem}.cortex-widget__thread-item{width:100%;text-align:start;padding:.75rem;border-radius:var(--cortex-radius);display:flex;align-items:center;gap:.75rem;transition:background-color .15s,border-color .15s;cursor:pointer;margin-bottom:.375rem;border:1px solid var(--cortex-color-border);background:var(--cortex-color-surface);color:var(--cortex-color-text)}.cortex-widget__thread-item:hover{background:var(--cortex-color-surface-muted);border-color:var(--cortex-color-border-strong)}.cortex-widget__thread-item:active{background:color-mix(in oklab,var(--cortex-color-surface-muted) 50%,var(--cortex-color-border))}.cortex-widget__thread-item--active{background:color-mix(in oklab,var(--cortex-color-surface-muted) 50%,var(--cortex-color-border));border-color:var(--cortex-color-border-strong);color:var(--cortex-color-text-heading)}.cortex-widget__thread-item--active:hover{background:var(--cortex-color-border)}.cortex-widget__thread-item--active:active{background:color-mix(in oklab,var(--cortex-color-border) 50%,var(--cortex-color-border-strong))}.cortex-widget__thread-icon{flex-shrink:0;width:2rem;height:2rem;border-radius:calc(var(--cortex-radius) * .75);display:flex;align-items:center;justify-content:center;font-size:.6875rem;font-weight:600;background:var(--cortex-color-accent-surface);color:var(--cortex-color-accent)}[dir=rtl] .cortex-widget__thread-icon{transform:scaleX(-1)}.cortex-widget__thread-icon--active{background:color-mix(in oklab,var(--cortex-color-accent-surface) 85%,var(--cortex-color-accent))}.cortex-widget__thread-info{min-width:0;flex:1}.cortex-widget__thread-title-row{display:flex;align-items:center;gap:.5rem;min-width:0}.cortex-widget__thread-title{font-size:var(--cortex-font-size);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.25;margin:0;color:var(--cortex-color-text-strong)}.cortex-widget__thread-title--active{color:var(--cortex-color-text-heading);font-weight:600}.cortex-widget__thread-time{font-size:.6875rem;color:var(--cortex-color-text-muted);margin-top:.125rem;margin-bottom:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cortex-widget__thread-running{flex-shrink:0;display:inline-flex;align-items:center;gap:.3125rem;padding:.2rem .45rem;border-radius:999px;background:var(--cortex-color-success-surface);color:var(--cortex-color-success);font-size:.625rem;font-weight:700;letter-spacing:.02em;text-transform:uppercase}.cortex-widget__thread-running-dot{width:.375rem;height:.375rem;border-radius:999px;background:currentColor;box-shadow:0 0 .45rem currentColor;animation:cortex-thread-running-pulse 1.4s ease-in-out infinite}@keyframes cortex-thread-running-pulse{0%,to{opacity:.45;transform:scale(.9)}50%{opacity:1;transform:scale(1)}}.cortex-widget__thread-delete{flex-shrink:0;opacity:0;width:1.75rem;height:1.75rem;border-radius:calc(var(--cortex-radius) * .75);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:opacity .15s;background:transparent;border:0;color:var(--cortex-color-text-muted)}.cortex-widget__thread-item:hover>.cortex-widget__thread-delete{opacity:1}.cortex-widget__thread-delete:hover{background:var(--cortex-color-border)}.cortex-widget__thread-delete--active{color:var(--cortex-color-text-secondary)}.cortex-widget__thread-delete--active:hover{color:var(--cortex-color-text)}.cortex-widget__thread-arrow{flex-shrink:0;transition:color .15s;color:var(--cortex-color-border-strong)}[dir=rtl] .cortex-widget__thread-arrow{transform:rotate(180deg)}.cortex-widget__thread-item:hover>.cortex-widget__thread-arrow{color:var(--cortex-color-text-muted)}.cortex-widget__thread-arrow--active{color:var(--cortex-color-text-muted)}.cortex-widget__thread-item:hover>.cortex-widget__thread-arrow--active{color:var(--cortex-color-text-secondary)}.cortex-widget__threads-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:4rem 0;text-align:center}.cortex-widget__threads-empty-icon{width:2.5rem;height:2.5rem;border-radius:var(--cortex-radius);background:var(--cortex-color-accent-surface);display:flex;align-items:center;justify-content:center;margin-bottom:.75rem}.cortex-widget__threads-empty-svg{color:var(--cortex-color-accent)}.cortex-widget__threads-empty-title{font-family:var(--cortex-font-display, inherit);font-size:var(--cortex-font-size);color:var(--cortex-color-text-muted);font-weight:500;margin:0}.cortex-widget__threads-empty-subtitle{font-size:.6875rem;color:var(--cortex-color-text-muted);margin-top:.25rem;margin-bottom:0}.cortex-widget__sidebar-toggle-btn,.cortex-widget__sidebar-backdrop{display:none}.cortex-message-list{height:100%;overflow-y:auto;overflow-x:hidden;width:100%;padding:1rem}.cortex-message-list__content{position:relative;display:flex;flex-direction:column;gap:.5rem}.cortex-message-list__content--settling{animation:cortex-content-settle .42s cubic-bezier(.76,0,.24,1) both}@keyframes cortex-content-settle{0%{translate:0 var(--cortex-slide)}}.cortex-widget__screen>.cortex-send-flight{position:absolute;z-index:2;margin:0;max-width:none;pointer-events:none;animation:cortex-send-fade 80ms linear both,cortex-send-fly .42s cubic-bezier(.76,0,.24,1) both}@keyframes cortex-send-fade{0%{opacity:0}}@keyframes cortex-send-fly{0%{translate:var(--cortex-fly-x) var(--cortex-fly-y)}}.cortex-working-thinking{padding-inline-start:2rem;--cortex-reveal-from: -1rem;--cortex-reveal-mask: linear-gradient(to right, #000 40%, rgb(0 0 0 / .35) 60%);--cortex-reveal-start: 100%;--cortex-reveal-end: 0%;animation:cortex-part-reveal .7s cubic-bezier(.22,1,.36,1) backwards}[dir=rtl] .cortex-working-thinking{--cortex-reveal-from: 1rem;--cortex-reveal-mask: linear-gradient(to left, #000 40%, rgb(0 0 0 / .35) 60%);--cortex-reveal-start: 0%;--cortex-reveal-end: 100%}.cortex-working-avatar{position:absolute;top:0;inset-inline-start:0;z-index:1;width:1.5rem;height:1.5rem;display:flex;align-items:center;justify-content:center;border-radius:9999px;background:var(--cortex-color-accent);color:var(--cortex-color-primary-foreground);translate:0 var(--cortex-avatar-y, 0);visibility:hidden;pointer-events:none}.cortex-working-avatar svg{width:.875rem;height:.875rem}.cortex-working-avatar--shown{visibility:visible;transition:translate .42s cubic-bezier(.76,0,.24,1);animation:cortex-avatar-in .7s cubic-bezier(.16,1,.3,1) both}.cortex-working-avatar--leaving{animation:cortex-avatar-out .36s cubic-bezier(.5,0,.75,0) .12s both}.cortex-working-avatar__ring{position:absolute;inset:-.25rem;border-radius:9999px;border:1.5px solid color-mix(in oklab,var(--cortex-color-accent) 18%,transparent);border-top-color:var(--cortex-color-accent);border-right-color:color-mix(in oklab,var(--cortex-color-accent) 45%,transparent)}.cortex-working-avatar--shown .cortex-working-avatar__ring{animation:cortex-tool-spin 1s linear infinite}.cortex-working-avatar--leaving .cortex-working-avatar__ring{animation:cortex-avatar-ring-out .22s ease-out both}@keyframes cortex-avatar-in{0%{opacity:0;transform:translateY(2.5rem) scale(.7)}}@keyframes cortex-avatar-out{to{opacity:0;transform:scale(.4)}}@keyframes cortex-avatar-ring-out{to{opacity:0}}.cortex-message{min-width:0;transition:margin-block-start .42s cubic-bezier(.76,0,.24,1)}.cortex-message:empty{display:none}.cortex-message:has(.cortex-message-part--folded):not(:has(.cortex-message-part:not(.cortex-message-part--folded))){margin-block-start:-.5rem;transition-delay:.6s}.cortex-text-bubble--assistant,.cortex-subtle-activity,.cortex-tool-pill,.cortex-tool-pill .cortex-tool-pill__icon{transition:translate .42s cubic-bezier(.76,0,.24,1) .16s}.cortex-message--working-turn .cortex-text-bubble--assistant,.cortex-message--working-turn .cortex-subtle-activity,.cortex-message--working-turn .cortex-tool-pill,.cortex-message--working-turn .cortex-tool-pill .cortex-tool-pill__icon{transition-delay:0s}.cortex-message--working-turn .cortex-text-bubble--assistant,.cortex-message--working-turn .cortex-subtle-activity{translate:2rem}[dir=rtl] .cortex-message--working-turn .cortex-text-bubble--assistant,[dir=rtl] .cortex-message--working-turn .cortex-subtle-activity{translate:-2rem}.cortex-message--working-turn .cortex-tool-pill{translate:.875rem}[dir=rtl] .cortex-message--working-turn .cortex-tool-pill{translate:-.875rem}.cortex-message--working-turn .cortex-tool-pill .cortex-tool-pill__icon{translate:-.5rem}[dir=rtl] .cortex-message--working-turn .cortex-tool-pill .cortex-tool-pill__icon{translate:.5rem}.cortex-message-parts{width:100%;display:flex;flex-direction:column;gap:.5rem}.cortex-message-actions{display:flex;align-items:center;gap:.375rem;margin-top:-.25rem}.cortex-message-actions--user{justify-content:flex-end}.cortex-message-actions__time{font-size:.6875rem;color:var(--cortex-color-text-muted);opacity:0;transition:opacity .15s ease}.cortex-message-actions:not(:has(.cortex-copy-btn)) .cortex-message-actions__time{opacity:1}.cortex-message:hover .cortex-message-actions .cortex-copy-btn__button,.cortex-message:hover .cortex-message-actions .cortex-message-actions__time,.cortex-message-actions:focus-within .cortex-copy-btn__button,.cortex-message-actions:focus-within .cortex-message-actions__time{opacity:1}.cortex-message-debug-zone{display:flex;flex-direction:column;gap:.25rem;padding-top:.375rem;margin-top:.125rem;border-top:1px dashed var(--cortex-color-border)}.cortex-message-part{display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:1fr;min-width:0;transition:grid-template-rows .42s cubic-bezier(.76,0,.24,1),margin-block-end .42s cubic-bezier(.76,0,.24,1),opacity .3s ease,visibility 0s,overflow 0s .42s allow-discrete}.cortex-message-part>*{min-height:0}.cortex-message-part:empty{display:none}.cortex-message-part--folded{grid-template-rows:0fr;margin-block-end:-.5rem;opacity:0;overflow:clip;visibility:hidden;transition-delay:.6s,.6s,.6s,1.02s,0s}[data-cortex-frontier] .cortex-tool-pill__spinner{visibility:hidden}[data-cortex-frontier] .cortex-subtle-activity__dots{display:none}.cortex-message-part--animated{--cortex-reveal-from: -1rem;--cortex-reveal-mask: linear-gradient(to right, #000 40%, rgb(0 0 0 / .35) 60%);--cortex-reveal-start: 100%;--cortex-reveal-end: 0%;animation:cortex-part-reveal .7s cubic-bezier(.22,1,.36,1) backwards}[dir=rtl] .cortex-message-part--animated{--cortex-reveal-from: 1rem;--cortex-reveal-mask: linear-gradient(to left, #000 40%, rgb(0 0 0 / .35) 60%);--cortex-reveal-start: 0%;--cortex-reveal-end: 100%}@keyframes cortex-part-reveal{0%{opacity:0;transform:translate(var(--cortex-reveal-from));filter:blur(5px);-webkit-mask-image:var(--cortex-reveal-mask);mask-image:var(--cortex-reveal-mask);-webkit-mask-size:300% 100%;mask-size:300% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:var(--cortex-reveal-start) 0;mask-position:var(--cortex-reveal-start) 0}40%{opacity:1}to{transform:none;filter:none;-webkit-mask-image:var(--cortex-reveal-mask);mask-image:var(--cortex-reveal-mask);-webkit-mask-size:300% 100%;mask-size:300% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:var(--cortex-reveal-end) 0;mask-position:var(--cortex-reveal-end) 0}}.cortex-unhandled-type{text-align:center;font-size:.75rem;color:var(--cortex-color-text-muted)}.cortex-text-part{width:100%;display:flex;flex-direction:column}.cortex-text-part--user{align-items:flex-end}.cortex-text-bubble{min-width:0;overflow-wrap:anywhere;font-size:var(--cortex-font-size-message, var(--cortex-font-size));line-height:1.625;color:var(--cortex-color-text-strong)}.cortex-text-bubble--assistant{width:calc(100% - 2rem)}.cortex-text-bubble--user{max-width:80%;padding:.75rem 1rem;border-radius:calc(var(--cortex-radius) * 2);border-end-end-radius:0;border:1px solid var(--cortex-color-user-border);background:var(--cortex-color-user-surface)}.cortex-text-bubble h1,.cortex-text-bubble h2,.cortex-text-bubble h3,.cortex-text-bubble h4,.cortex-text-bubble h5,.cortex-text-bubble h6{margin-top:1.25em;margin-bottom:.5em;font-weight:600;line-height:1.3;color:var(--cortex-color-text-heading)}.cortex-text-bubble h1:first-child,.cortex-text-bubble h2:first-child,.cortex-text-bubble h3:first-child,.cortex-text-bubble h4:first-child,.cortex-text-bubble h5:first-child,.cortex-text-bubble h6:first-child{margin-top:0}.cortex-text-bubble h1{font-size:1.25em}.cortex-text-bubble h2{font-size:1.125em}.cortex-text-bubble h3{font-size:1em}.cortex-text-bubble p{margin-top:.75em;margin-bottom:.75em}.cortex-text-bubble p:first-child{margin-top:0}.cortex-text-bubble p:last-child{margin-bottom:0}.cortex-text-bubble ul,.cortex-text-bubble ol{margin-top:.75em;margin-bottom:.75em;padding-inline-start:1.5em}.cortex-text-bubble ul{list-style-type:disc}.cortex-text-bubble ol{list-style-type:decimal}.cortex-text-bubble li{margin-top:.25em;margin-bottom:.25em}.cortex-text-bubble code{font-family:var(--cortex-font-mono);font-size:.875em;background:var(--cortex-color-border);padding:.125em .375em;border-radius:calc(var(--cortex-radius) * .5)}.cortex-text-bubble pre{margin-top:.75em;margin-bottom:.75em;padding:.75em 1em;background:var(--cortex-color-code-surface, color-mix(in oklab, var(--cortex-color-text-heading) 8%, transparent));border-radius:var(--cortex-radius);max-width:100%;overflow-x:auto;font-size:.8125em;line-height:1.6}.cortex-text-bubble pre code{background:transparent;padding:0;color:var(--cortex-color-code-text)}.cortex-text-bubble blockquote{margin-top:.75em;margin-bottom:.75em;padding-inline-start:1em;border-inline-start:3px solid var(--cortex-color-border-strong);color:var(--cortex-color-text-secondary);font-style:italic}.cortex-text-bubble a{color:var(--cortex-color-link);text-decoration:underline}.cortex-text-bubble a:hover{color:color-mix(in oklab,var(--cortex-color-link) 80%,var(--cortex-color-text-heading))}.cortex-text-bubble table{width:100%;border-collapse:collapse;margin-top:.75em;margin-bottom:.75em;font-size:.875em}.cortex-text-bubble th,.cortex-text-bubble td{border:1px solid var(--cortex-color-border);padding:.375em .75em;text-align:start}.cortex-text-bubble th{background:var(--cortex-color-surface-subtle);font-weight:600}.cortex-text-bubble hr{margin-top:1.5em;margin-bottom:1.5em;border:none;border-top:1px solid var(--cortex-color-border)}.cortex-text-bubble img{max-width:100%;height:auto;border-radius:calc(var(--cortex-radius) * .75)}.cortex-stream-fade{animation:cortex-stream-fade .3s ease-out}@keyframes cortex-stream-fade{0%{opacity:0}}.cortex-expandable{display:block;position:relative}.cortex-expandable__content{isolation:isolate}.cortex-expandable__toolbar{position:absolute;top:.375rem;inset-inline-end:.375rem;z-index:1;display:flex;gap:.125rem;padding:.125rem;border:1px solid var(--cortex-color-border);border-radius:var(--cortex-radius);background:var(--cortex-color-surface);box-shadow:0 1px 3px #00000014;opacity:0;transition:opacity .15s}.cortex-expandable:hover>.cortex-expandable__toolbar,.cortex-expandable__toolbar:has(:focus-visible){opacity:1}@media(hover:none){.cortex-expandable__toolbar{position:static;width:fit-content;margin:0 0 .25rem;margin-inline-start:auto;opacity:1}}.cortex-expandable__action{flex-shrink:0;width:2rem;height:2rem;border-radius:calc(var(--cortex-radius) * .75);display:flex;align-items:center;justify-content:center;background:transparent;border:0;cursor:pointer;transition:color .15s,background-color .15s;width:1.75rem;height:1.75rem;color:var(--cortex-color-text-muted)}.cortex-expandable__action:hover{color:var(--cortex-color-text);background:var(--cortex-color-hover)}.cortex-expandable__dialog{width:fit-content;min-width:min(24rem,100vw - 2rem);max-width:calc(100vw - 2rem);max-height:calc(100dvh - 2rem);margin:auto;padding:0;overflow:hidden;border:1px solid var(--cortex-color-border);border-radius:calc(var(--cortex-radius) * 1.5);background:var(--cortex-color-surface);color:var(--cortex-color-text-strong);box-shadow:0 24px 64px #0000003d}.cortex-expandable__dialog[open]{display:flex;flex-direction:column;animation:cortex-expandable-in .18s ease-out}.cortex-expandable__dialog::backdrop{background:#00000073;animation:cortex-expandable-backdrop-in .18s ease-out}.cortex-expandable__head{display:flex;align-items:center;gap:.125rem;padding-block:.375rem;padding-inline:1rem .375rem;border-bottom:1px solid var(--cortex-color-border)}.cortex-expandable__title{flex:1;min-width:0;margin-inline-end:.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.875rem;font-weight:600;color:var(--cortex-color-text-heading)}.cortex-expandable__body{min-height:0;overflow:auto;overscroll-behavior:contain}@keyframes cortex-expandable-in{0%{opacity:0;transform:translateY(.5rem) scale(.98)}}@keyframes cortex-expandable-backdrop-in{0%{opacity:0}}.cortex-media-block{display:block;width:40rem;max-width:100%;margin:.75em 0;border:1px solid var(--cortex-color-border);border-radius:var(--cortex-radius);background:var(--cortex-color-surface);overflow:hidden}.cortex-media-block__head{display:flex}.cortex-media-block__head[hidden]{display:none}.cortex-media-block__head{align-items:center;justify-content:space-between;gap:.5rem;padding:.25rem .5rem .25rem .75rem;background:var(--cortex-color-surface-subtle);border-bottom:1px solid var(--cortex-color-border);font-size:.75rem;color:var(--cortex-color-text-muted)}.cortex-media-block__lang{font-family:var(--cortex-font-mono)}.cortex-media-block__pending{display:inline-flex;align-items:center;gap:.375rem}.cortex-media-block__pending:before{content:"";width:.625rem;height:.625rem;border:1.5px solid var(--cortex-color-border-strong);border-top-color:var(--cortex-color-text-muted);border-radius:9999px;animation:cortex-tool-spin .8s linear infinite}.cortex-media-block__actions{display:inline-flex;align-items:center;gap:.125rem}.cortex-media-block__action{background:transparent;border:0;padding:.125rem .375rem;border-radius:calc(var(--cortex-radius) * .5);font:inherit;color:inherit;cursor:pointer}.cortex-media-block__action:hover,.cortex-media-block__action[aria-pressed=true]{background:var(--cortex-color-hover);color:var(--cortex-color-text-strong)}.cortex-media-block__body{display:block;padding:.75rem}.cortex-media-block__body[hidden]{display:none}.cortex-media-block__body{min-height:6rem;overflow-x:auto}.cortex-media-block__body svg{display:block;max-width:100%;height:auto;direction:ltr}.cortex-media-block__body svg text{unicode-bidi:plaintext}.cortex-media-block__body>div>svg{margin-inline:auto}.cortex-media-block__body--map{padding:0;height:18rem}.cortex-media-block__body--map>div{height:100%}.cortex-media-block__body--report{padding:1rem}.cortex-expandable__body .cortex-media-block__body{width:min(72rem,100vw - 2rem - 2px)}.cortex-expandable__body .cortex-media-block__body:not(.cortex-media-block__body--map,.cortex-media-block__body--report)>div{display:grid}.cortex-expandable__body .cortex-media-block__body:not(.cortex-media-block__body--map,.cortex-media-block__body--report) svg{width:100%;max-width:none!important;max-height:calc(100dvh - 6.5rem)}.cortex-expandable__body .cortex-media-block__body--map{height:min(48rem,100dvh - 5rem)}.cortex-expandable:has(>.cortex-expandable__content>.cortex-media-block__body--map)>.cortex-expandable__toolbar{right:.375rem;left:auto}.cortex-media-block__error{margin:0;font-size:.8125rem;color:var(--cortex-color-danger)}.cortex-media-block .cortex-media-block__source{margin:0;padding:.75rem;border-top:1px solid var(--cortex-color-border);background:var(--cortex-color-surface-subtle);font-family:var(--cortex-font-mono);font-size:.75rem;line-height:1.5;white-space:pre;overflow-x:auto;color:var(--cortex-color-text)}.cortex-attachment-image{margin:.75em 0}.cortex-attachment-image .cortex-expandable{width:fit-content;max-width:100%}.cortex-attachment-image .cortex-expandable__content img{display:block;max-width:100%;border-radius:var(--cortex-radius);border:1px solid var(--cortex-color-border)}.cortex-expandable__body .cortex-attachment-image__expanded{display:block;max-width:calc(100vw - 2rem - 2px);max-height:calc(100dvh - 5rem);margin:auto;border-radius:0}.cortex-attachment-image__caption{margin:.25rem 0 0;font-size:.75rem;color:var(--cortex-color-text-muted)}.cortex-table-block{display:block;margin:.75em 0}.cortex-table-block th{white-space:nowrap}.cortex-table-block td{max-width:20rem}.cortex-table-block table{margin:0}.cortex-table-block .cortex-expandable{width:fit-content;max-width:100%}.cortex-table-block__expanded{padding:1rem}.cortex-table-block__expanded td{max-width:40rem}.cortex-reasoning-details{width:100%;border-radius:var(--cortex-radius);border:1px solid var(--cortex-color-border);background:var(--cortex-color-surface-subtle);overflow:hidden}.cortex-reasoning-details__summary{list-style:none;cursor:pointer;-webkit-user-select:none;user-select:none;padding:.75rem 1rem;display:flex;align-items:center;gap:.75rem}.cortex-reasoning-details__summary::-webkit-details-marker{display:none}.cortex-reasoning-details__header{display:flex;align-items:center;gap:.5rem;min-width:0;flex:1}.cortex-reasoning-details__icon{display:inline-flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;border-radius:calc(var(--cortex-radius) * .5);background:var(--cortex-color-accent-surface);color:var(--cortex-color-accent)}.cortex-reasoning-details__title-group{min-width:0}.cortex-reasoning-details__title-row{display:flex;align-items:center;gap:.5rem}.cortex-reasoning-details__title{font-weight:500;color:var(--cortex-color-text-strong);font-size:.875rem}.cortex-reasoning-details__badge{display:inline-flex;align-items:center;border-radius:calc(var(--cortex-radius) * .5);padding:.125rem .375rem;font-size:.6875rem;font-weight:500}.cortex-reasoning-details__badge--streaming{background:light-dark(#fef3c7,#78350f);color:light-dark(#b45309,#fcd34d)}.cortex-reasoning-details__badge--done{background:var(--cortex-color-success-border);color:var(--cortex-color-success)}.cortex-reasoning-details__chevron{margin-inline-start:auto;display:inline-flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;border-radius:calc(var(--cortex-radius) * .5);color:var(--cortex-color-text-muted);transition:transform .2s}details[open]>summary>.cortex-reasoning-details__chevron{transform:rotate(180deg)}.cortex-reasoning-details__body{padding:0 1rem 1rem}.cortex-reasoning-details__content{margin-top:.25rem;border-radius:calc(var(--cortex-radius) * .5);background:var(--cortex-color-surface);border:1px solid var(--cortex-color-border);padding:.75rem}.cortex-reasoning-details__pre{margin:0;white-space:pre-wrap;overflow-wrap:break-word;font-family:var(--cortex-font-mono);font-size:.75rem;line-height:1.625;color:var(--cortex-color-text-strong)}@keyframes cortex-aborted-fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.cortex-aborted-flag{display:flex;align-items:center;gap:.625rem;padding:.25rem 0;animation:cortex-aborted-fade-in .3s ease-out both;-webkit-user-select:none;user-select:none}.cortex-aborted-flag__line{flex:1;height:1px;background:repeating-linear-gradient(90deg,#e2a36f 0px,#e2a36f 4px,transparent 4px,transparent 8px);opacity:.5}.cortex-aborted-flag__label{display:inline-flex;align-items:center;gap:.3125rem;font-family:var(--cortex-font-mono);font-size:.625rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:light-dark(#c2824a,#e2a36f)}.cortex-aborted-flag__icon{color:light-dark(#c2824a,#e2a36f);flex-shrink:0}.cortex-trigger-block{display:inline-flex;width:fit-content;padding:.375rem .75rem;border-radius:999px;background:var(--cortex-color-accent-surface);color:var(--cortex-color-text-strong);font-size:.75rem}.cortex-trigger-block__head{display:flex;align-items:center;gap:.5rem}.cortex-trigger-block__icon{flex-shrink:0;color:var(--cortex-color-accent)}.cortex-trigger-block__name{font-family:var(--cortex-font-mono);font-weight:600}.cortex-trigger-block__time{color:var(--cortex-color-text-secondary);font-size:.6875rem}.cortex-trigger-block--debug{display:flex;flex-direction:column;width:auto;gap:.375rem;padding:.5rem .75rem;border:1px dashed var(--cortex-color-border-strong);border-radius:var(--cortex-radius);background:var(--cortex-color-surface-subtle);font-size:.6875rem}.cortex-trigger-block--debug .cortex-trigger-block__head{font-family:var(--cortex-font-mono);letter-spacing:.04em;text-transform:uppercase;color:var(--cortex-color-text-secondary)}.cortex-trigger-block--debug .cortex-trigger-block__name{color:var(--cortex-color-text-strong)}.cortex-trigger-block--debug .cortex-trigger-block__time{margin-inline-start:auto;font-size:inherit;text-transform:none;letter-spacing:0}.cortex-trigger-block__payload{font-size:.75rem}.cortex-trigger-block__payload>summary{cursor:pointer;color:var(--cortex-color-text-secondary);-webkit-user-select:none;user-select:none}.cortex-trigger-block__payload[open]>summary{margin-bottom:.25rem}.cortex-widget__messages-disabled{padding:.75rem 1rem;text-align:center;font-size:.75rem;color:var(--cortex-color-text-muted)}.cortex-message-attachments{display:flex;flex-wrap:wrap;gap:.375rem}.cortex-message-attachments--user{justify-content:flex-end}.cortex-message-attachment{display:inline-flex;align-items:center;gap:.375rem;max-width:14rem;padding:.25rem .5rem;border:1px solid var(--cortex-color-border);border-radius:var(--cortex-radius);background:var(--cortex-color-surface-subtle);font-size:.75rem;color:var(--cortex-color-text-strong);cursor:pointer;transition:background .15s}.cortex-message-attachment:hover{background:var(--cortex-color-surface-muted)}.cortex-message-attachment__name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cortex-message-attachment__icon,.cortex-message-attachment__dl-icon{flex-shrink:0;width:.875rem;height:.875rem;color:var(--cortex-color-text-muted)}.cortex-debug-tool{--_accent: var(--cortex-color-border-strong);position:relative;width:100%;border-radius:10px;background:var(--cortex-color-surface-subtle);overflow:hidden}.cortex-debug-tool:before{content:"";position:absolute;inset-block:0;inset-inline-start:0;width:3px;background:var(--_accent);z-index:1;transition:background .2s}.cortex-debug-tool[data-state=complete]{--_accent: var(--cortex-color-success)}.cortex-debug-tool[data-state=error]{--_accent: var(--cortex-color-danger)}.cortex-debug-tool[data-state=awaiting-input],.cortex-debug-tool[data-state=input-streaming],.cortex-debug-tool[data-state=input-complete]{--_accent: light-dark(#d97706, #fbbf24)}.cortex-debug-tool[data-state=approval-requested],.cortex-debug-tool[data-state=approval-responded]{--_accent: light-dark(#7c3aed, #a78bfa)}.cortex-debug-tool__summary{list-style:none;cursor:pointer;-webkit-user-select:none;user-select:none;padding:.625rem .875rem .625rem 1.125rem}.cortex-debug-tool__summary::-webkit-details-marker{display:none}.cortex-debug-tool__header{display:flex;align-items:flex-start;gap:.75rem}.cortex-debug-tool__meta{flex:1;min-width:0}.cortex-debug-tool__title-row{display:flex;align-items:center;gap:.5rem;min-width:0}.cortex-debug-tool__name{font-weight:600;font-size:.8125rem;color:var(--cortex-color-text-heading);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;letter-spacing:-.01em}.cortex-debug-tool__id-row{margin-top:2px;font-size:.625rem;color:var(--cortex-color-text-muted);font-family:ui-monospace,SF Mono,Cascadia Code,monospace;word-break:break-all}.cortex-debug-tool__actions{display:flex;align-items:center;gap:.375rem;flex-shrink:0}.cortex-debug-tool__state{display:inline-flex;align-items:center;gap:5px;font-size:.6875rem;font-weight:500;padding:2px 8px;border-radius:4px;white-space:nowrap;font-family:system-ui,-apple-system,sans-serif}.cortex-debug-tool__state--success{color:var(--cortex-color-success);background:var(--cortex-color-success-surface)}.cortex-debug-tool__state--error{color:var(--cortex-color-danger);background:light-dark(#fef2f2,#450a0a)}.cortex-debug-tool__state--approval{color:light-dark(#7c3aed,#a78bfa);background:light-dark(#f5f3ff,#2e1065)}.cortex-debug-tool__state--pending{color:light-dark(#b45309,#fcd34d);background:light-dark(#fffbeb,#451a03)}.cortex-debug-tool__pulse{width:6px;height:6px;border-radius:50%;background:light-dark(#d97706,#fbbf24);animation:dbg-pulse 2s ease-in-out infinite}.cortex-debug-tool__pulse--violet{background:#8b5cf6}@keyframes dbg-pulse{0%,to{opacity:1}50%{opacity:.3}}.cortex-debug-tool__chevron{display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;border-radius:4px;color:var(--cortex-color-text-muted);transition:transform .2s}details[open]>summary .cortex-debug-tool__chevron{transform:rotate(180deg)}.cortex-debug-tool__body{padding:0 .875rem .75rem 1.125rem}.cortex-debug-tool__section:not(:first-child){border-top:1px solid var(--cortex-color-border);padding-top:.625rem;margin-top:.625rem}.cortex-debug-tool__section-bar{display:flex;align-items:center;gap:.375rem;margin-bottom:.375rem}.cortex-debug-tool__section-label{font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--cortex-color-text-muted);font-family:system-ui,-apple-system,sans-serif}.cortex-debug-tool__section-label--success{color:var(--cortex-color-success)}.cortex-debug-tool__section-label--error{color:var(--cortex-color-danger)}.cortex-debug-tool__section-label--approval{color:light-dark(#7c3aed,#a78bfa)}.cortex-debug-tool__section-lang{font-size:.5625rem;color:var(--cortex-color-border-strong);font-family:ui-monospace,SF Mono,monospace;text-transform:lowercase}.cortex-debug-tool__pre{margin:0;max-height:20rem;overflow:auto;padding:.625rem .75rem;border-radius:6px;background:var(--cortex-color-surface);font-size:.75rem;line-height:1.3rem;font-family:ui-monospace,SF Mono,Cascadia Code,monospace;white-space:pre;overflow-wrap:break-word}.cortex-debug-tool__tree{max-height:16rem;overflow:auto;padding:.625rem .75rem;border-radius:6px;background:var(--cortex-color-surface)}.cortex-debug-tool__error-pre{margin:0;max-height:16rem;overflow:auto;padding:.625rem .75rem;border-radius:6px;background:light-dark(#fef2f2,#450a0a);color:light-dark(#991b1b,#fca5a5);font-size:.75rem;line-height:1.3rem;font-family:ui-monospace,SF Mono,Cascadia Code,monospace;white-space:pre-wrap;word-break:break-word}.cortex-debug-tool__message{padding:.5rem .75rem;font-size:.75rem;color:var(--cortex-color-text-secondary);border-radius:6px;background:var(--cortex-color-surface)}.cortex-debug-tool__message--approval{color:light-dark(#5b21b6,#c4b5fd);background:light-dark(#faf5ff,#3b0764)}.cortex-debug-tool__section--success .cortex-debug-tool__tree{background:light-dark(#f0fdf4,#052e16)}.cortex-debug-tool__section--error .cortex-debug-tool__tree{background:light-dark(#fef2f2,#450a0a)}.cortex-tool-call-animated{display:block}.cortex-tool-pill{display:inline-flex;align-items:center;gap:.375rem;padding:.25rem 0;max-width:100%}.cortex-tool-pill__icon{position:relative;width:.75rem;height:.75rem;display:flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--cortex-color-text-muted)}.cortex-tool-pill__spinner{position:absolute;width:.625rem;height:.625rem;border:1.5px solid var(--cortex-color-border-strong);border-top-color:var(--cortex-color-text-muted);border-radius:9999px;opacity:0;transition:opacity .2s}.cortex-tool-pill__spinner--visible{opacity:1;animation:cortex-tool-spin .8s linear infinite}@keyframes cortex-tool-spin{to{transform:rotate(360deg)}}.cortex-tool-pill__svg{position:absolute;width:.75rem;height:.75rem;opacity:0;transform:scale(.6);transition:opacity .2s,transform .2s}.cortex-tool-pill__svg--visible{opacity:1;transform:scale(1)}.cortex-tool-pill__svg--check{color:var(--cortex-color-success)}.cortex-tool-pill__svg--error{color:var(--cortex-color-danger)}.cortex-tool-pill__title{font-size:.75rem;color:var(--cortex-color-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .3s}.cortex-tool-pill__title--error{color:var(--cortex-color-danger)}.cortex-tool-pill__title--pending{color:var(--cortex-color-text-muted);opacity:.6}.cortex-tool-pill__meta{font-size:.6875rem;color:var(--cortex-color-text-muted);opacity:.8;white-space:nowrap;font-variant-numeric:tabular-nums}.cortex-approval-card{display:block;max-width:min(100%,28rem);margin:.25rem 0;border:1px solid var(--cortex-color-border);border-radius:var(--cortex-radius);background:var(--cortex-color-surface);overflow:hidden}.cortex-approval-card--asking{border-color:color-mix(in oklab,var(--cortex-color-accent) 45%,var(--cortex-color-border));box-shadow:0 0 0 3px color-mix(in oklab,var(--cortex-color-accent) 10%,transparent)}.cortex-approval-card__head{display:flex;align-items:center;gap:.5rem;padding:.625rem .75rem 0;font-size:.75rem;font-weight:600;color:var(--cortex-color-accent)}.cortex-approval-card__sentence{margin:0;padding:.375rem .75rem .5rem;font-weight:600;color:var(--cortex-color-text-heading)}.cortex-approval-card__foot{display:flex;gap:.5rem;padding:.625rem .75rem;border-top:1px solid var(--cortex-color-border);background:var(--cortex-color-surface-subtle)}.cortex-approval-card__button{border:1px solid var(--cortex-color-border-strong);border-radius:calc(var(--cortex-radius) * .75);background:var(--cortex-color-surface);padding:.375rem .875rem;font:inherit;font-size:.8125rem;font-weight:500;color:var(--cortex-color-text-strong);cursor:pointer}.cortex-approval-card__button--approve{border-color:var(--cortex-color-accent);background:var(--cortex-color-accent);color:var(--cortex-color-primary-foreground)}.cortex-approval-card__line{display:flex;align-items:baseline;gap:.5rem;padding:.5rem .75rem;font-size:.8125rem;color:var(--cortex-color-text-secondary)}.cortex-approval-card__line .cortex-tool-pill__icon{flex-shrink:0}.cortex-approval-card__decision{font-weight:600;color:var(--cortex-color-text-strong)}.cortex-approval-card__summary{min-width:0;flex:1}.cortex-tool-fold{display:block;align-self:flex-start;text-align:start;border:0;background:none;padding:0 0 .25rem;margin-block-start:-.625rem;margin-inline-start:1.125rem;font:inherit;font-size:.75rem;color:var(--cortex-color-text-muted);cursor:pointer}.cortex-tool-fold:hover,.cortex-tool-fold:focus-visible{color:var(--cortex-color-text-secondary)}.cortex-client-tool-embed{border:1px solid var(--cortex-color-border-strong);border-radius:12px;background:var(--cortex-color-surface);overflow:hidden;max-inline-size:480px}.cortex-client-tool-embed__bar{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 12px;border-block-end:1px solid var(--cortex-color-border-strong);font-size:12px;color:var(--cortex-color-text-muted)}.cortex-client-tool-embed__cancel{border:0;background:none;padding:2px 4px;font:inherit;color:var(--cortex-color-text-muted);cursor:pointer}.cortex-client-tool-embed__cancel:hover{color:var(--cortex-color-danger)}.cortex-client-tool-embed__frame{display:block;inline-size:100%;block-size:420px;border:0;background:var(--cortex-color-surface)}.cortex-client-tool-embed__status{display:flex;align-items:center;gap:8px;padding:20px 16px;font-size:13px;color:var(--cortex-color-text-muted)}.cortex-client-tool-embed__retry{border:1px solid var(--cortex-color-border-strong);border-radius:8px;background:none;padding:4px 10px;font:inherit;font-size:12px;color:inherit;cursor:pointer}.cortex-client-tool-embed-dialog{border:0;padding:0;background:none;inline-size:min(560px,100vw - 48px);max-inline-size:none}.cortex-client-tool-embed-dialog::backdrop{background:#00000073}.cortex-client-tool-embed-dialog .cortex-client-tool-embed{inline-size:100%;max-inline-size:none;box-shadow:0 24px 64px #0000004d}.cortex-client-tool-embed-dialog .cortex-client-tool-embed__frame{block-size:min(70dvh,560px)}.cortex-location-input{border:1px solid var(--cortex-color-border-strong);border-radius:12px;background:var(--cortex-color-surface);overflow:hidden;max-inline-size:480px}.cortex-location-input--settled{display:flex;gap:10px;border-color:var(--cortex-color-border);background:var(--cortex-color-surface-subtle)}.cortex-location-input__map{position:relative;block-size:11rem;background:var(--cortex-color-surface-muted)}.cortex-location-input__map--still{flex:none;inline-size:120px;block-size:84px}.cortex-location-input__canvas{block-size:100%}.cortex-location-input__still-failed{display:flex;align-items:center;justify-content:center;block-size:100%;padding:0 8px;font-size:11px;text-align:center;color:var(--cortex-color-text-muted)}.cortex-location-input__locate{position:absolute;inset-inline-end:10px;inset-block-start:10px;z-index:1001;display:inline-flex;align-items:center;justify-content:center;inline-size:30px;block-size:30px;border:1px solid var(--cortex-color-border-strong);border-radius:8px;background:var(--cortex-color-surface);color:var(--cortex-color-text-strong);box-shadow:0 1px 3px #0003;cursor:pointer}.cortex-location-input__locate svg{inline-size:15px;block-size:15px}.cortex-location-input__locate:disabled{opacity:.45;cursor:default}.cortex-location-input__foot{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 12px;border-block-start:1px solid var(--cortex-color-border-strong);font-size:12px}.cortex-location-input__hint{display:inline-flex;align-items:center;gap:6px;min-inline-size:0;color:var(--cortex-color-text-muted)}.cortex-location-input__hint--failed{color:var(--cortex-color-danger)}.cortex-location-input__spinner{inline-size:.625rem;block-size:.625rem;border:1.5px solid var(--cortex-color-border-strong);border-top-color:var(--cortex-color-text-muted);border-radius:9999px;animation:cortex-tool-spin .8s linear infinite}.cortex-location-input__coords{font-family:var(--cortex-font-mono);font-size:.75rem;color:var(--cortex-color-text-secondary);direction:ltr;unicode-bidi:isolate}.cortex-location-input__actions{display:flex;align-items:center;gap:8px}.cortex-location-input__skip{border:0;background:none;padding:2px 4px;font:inherit;color:var(--cortex-color-text-muted);cursor:pointer}.cortex-location-input__skip:hover{color:var(--cortex-color-danger)}.cortex-location-input__skip:disabled{opacity:.45;cursor:default}.cortex-location-input__send{border:1px solid var(--cortex-color-primary);border-radius:8px;background:var(--cortex-color-primary);padding:4px 10px;font:inherit;font-size:12px;color:var(--cortex-color-primary-foreground);cursor:pointer}.cortex-location-input__send:disabled{opacity:.45;cursor:default}.cortex-location-input__body{display:flex;flex-direction:column;justify-content:center;gap:2px;min-inline-size:0;padding-block:8px;padding-inline-end:12px}.cortex-location-input__title{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--cortex-color-text-strong)}.cortex-location-input__title svg{inline-size:13px;block-size:13px;color:var(--cortex-color-success)}.cortex-reasoning-animated{display:block}.cortex-subtle-activity{display:flex;align-items:center;gap:.375rem;padding:.25rem 0;width:fit-content}.cortex-subtle-activity__dots{display:flex;align-items:center;gap:3px}.cortex-subtle-activity__dot{width:3px;height:3px;border-radius:9999px;background:var(--cortex-color-accent);animation:cortex-subtle-dot-pulse 1.4s ease-in-out infinite}.cortex-subtle-activity__dot--d1{animation-delay:.2s}.cortex-subtle-activity__dot--d2{animation-delay:.4s}@keyframes cortex-subtle-dot-pulse{0%,to{opacity:.3;transform:scale(.8)}40%{opacity:1;transform:scale(1.3)}}.cortex-subtle-activity__label-mask{overflow:hidden;position:relative;height:1.1em}.cortex-subtle-activity__label{display:block;font-size:.75rem;color:var(--cortex-color-text-muted);white-space:nowrap;line-height:1.1em}.cortex-subtle-activity__label--idle,.cortex-subtle-activity__label--entering{opacity:1;transform:translateY(0);transition:opacity .3s ease,transform .3s ease}.cortex-subtle-activity__label--exiting{opacity:0;transform:translateY(-6px);transition:opacity .3s ease,transform .3s ease}.cortex-subtle-activity__label--enter-start{opacity:0;transform:translateY(6px);transition:none}.cortex-attachment-queue{display:flex;flex-wrap:wrap;gap:.375rem;margin-bottom:.5rem}.cortex-attachment-chip{display:inline-flex;align-items:center;gap:.375rem;max-width:14rem;padding-block:.25rem;padding-inline:.5rem .375rem;border:1px solid var(--cortex-color-border);border-radius:var(--cortex-radius);background:var(--cortex-color-surface-subtle);font-size:.75rem;color:var(--cortex-color-text-strong)}.cortex-attachment-chip--error{border-color:var(--cortex-color-danger-border);background:var(--cortex-color-danger-surface);color:var(--cortex-color-danger)}.cortex-attachment-chip__icon,.cortex-attachment-chip__spinner{flex-shrink:0;width:.875rem;height:.875rem;color:var(--cortex-color-text-muted)}.cortex-attachment-chip__spinner{animation:cortex-attachment-spin .8s linear infinite}.cortex-attachment-chip__spinner-track{opacity:.25}@keyframes cortex-attachment-spin{to{transform:rotate(360deg)}}.cortex-attachment-chip__name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cortex-attachment-chip__remove{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:1rem;height:1rem;padding:0;border:0;border-radius:3px;background:transparent;color:currentColor;opacity:.6;cursor:pointer}.cortex-attachment-chip__remove:hover{opacity:1;background:var(--cortex-color-hover)}.cortex-attachment-chip__remove svg{width:.75rem;height:.75rem}.cortex-token-usage{direction:ltr;display:flex;flex-direction:column;margin-top:.375rem;font-family:var(--cortex-font-mono);font-size:.6875rem;line-height:1.4;color:var(--cortex-color-text-muted);-webkit-user-select:none;user-select:none}html[dir=rtl] .cortex-token-usage__summary{align-self:end}html[dir=ltr] .cortex-token-usage__summary{align-self:start}.cortex-token-usage__summary{display:inline-flex;align-items:center;gap:.625rem;padding:.3125rem .625rem;border:1px solid transparent;border-radius:6px;background:transparent;cursor:pointer;transition:background .15s ease,border-color .15s ease;font:inherit;color:inherit;letter-spacing:.01em}.cortex-token-usage__summary:hover{background:var(--cortex-color-surface-subtle);border-color:var(--cortex-color-border)}.cortex-token-usage__summary{flex-wrap:wrap;max-width:100%;text-align:start}.cortex-token-usage__total-number{font-weight:600;font-variant-numeric:tabular-nums;color:var(--cortex-color-text-secondary)}.cortex-token-usage__total-label{margin-inline-start:3px;color:var(--cortex-color-text-muted);font-weight:400;letter-spacing:.03em}.cortex-token-usage__model{color:var(--cortex-color-border-strong);font-weight:400;font-size:.5625rem;letter-spacing:.02em;min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cortex-token-usage__pills{display:inline-flex;align-items:center;gap:.5rem}.cortex-token-usage__pill{display:inline-flex;align-items:center;gap:4px;font-variant-numeric:tabular-nums;color:var(--cortex-color-text-muted)}.cortex-token-usage__dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}.cortex-token-usage__dot--input{background:light-dark(#ea580c,#fb923c);box-shadow:0 0 0 2px #ea580c1a}.cortex-token-usage__dot--output{background:light-dark(#4f46e5,#818cf8);box-shadow:0 0 0 2px #4f46e51a}.cortex-token-usage__cache-badge{font-size:.5625rem;font-weight:600;color:var(--cortex-color-success);background:var(--cortex-color-success-surface);padding:1px 6px;border-radius:3px;font-family:system-ui,-apple-system,sans-serif}.cortex-token-usage__chevron{color:var(--cortex-color-border-strong);transition:transform .25s cubic-bezier(.4,0,.2,1);flex-shrink:0}.cortex-token-usage--expanded .cortex-token-usage__chevron{transform:rotate(180deg)}.cortex-token-usage__details{display:grid;grid-template-rows:0fr;transition:grid-template-rows .25s cubic-bezier(.4,0,.2,1),opacity .2s ease,margin .2s ease;opacity:0;margin-top:0}.cortex-token-usage__details-inner{overflow:hidden}.cortex-token-usage--expanded .cortex-token-usage__details{grid-template-rows:1fr;opacity:1;margin-top:.375rem}.cortex-token-usage__columns{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--cortex-color-border);border-radius:8px;overflow:hidden}.cortex-token-usage__col{background:var(--cortex-color-surface-subtle);padding:.5rem .625rem}.cortex-token-usage__col-header{display:flex;align-items:center;gap:.375rem;margin-bottom:.375rem}.cortex-token-usage__col-label{font-weight:600;font-size:.5625rem;text-transform:uppercase;letter-spacing:.06em;color:var(--cortex-color-text-secondary);font-family:system-ui,-apple-system,sans-serif}.cortex-token-usage__col-total{margin-inline-start:auto;font-weight:700;font-variant-numeric:tabular-nums;color:var(--cortex-color-text-secondary)}.cortex-token-usage__rows{display:flex;flex-direction:column;gap:1px}.cortex-token-usage__row{display:flex;align-items:baseline;justify-content:space-between;padding:2px 0;padding-inline-start:calc(6px + .375rem)}.cortex-token-usage__row-label{color:var(--cortex-color-text-muted);font-size:.625rem}.cortex-token-usage__row-value{font-variant-numeric:tabular-nums;color:var(--cortex-color-text-secondary);font-weight:500}.cortex-token-usage__cache-bar-row{display:flex;align-items:center;gap:.5rem;margin-top:.5rem;padding-inline-start:calc(6px + .375rem)}.cortex-token-usage__cache-bar{flex:1;height:3px;border-radius:2px;background:var(--cortex-color-border);overflow:hidden}.cortex-token-usage__cache-fill{height:100%;border-radius:2px;background:linear-gradient(90deg,#10b981,var(--cortex-color-success));transition:width .4s cubic-bezier(.4,0,.2,1)}.cortex-token-usage__cache-label{font-size:.5625rem;font-weight:600;color:var(--cortex-color-success);white-space:nowrap;font-family:system-ui,-apple-system,sans-serif}.cortex-llm-inspector{direction:ltr;display:flex;flex-direction:column;margin-top:.375rem;font-family:var(--cortex-font-mono);font-size:.6875rem;line-height:1.4;color:var(--cortex-color-text-muted);-webkit-user-select:none;user-select:none}html[dir=rtl] .cortex-llm-inspector__trigger{align-self:end}html[dir=ltr] .cortex-llm-inspector__trigger{align-self:start}.cortex-llm-inspector__trigger{display:inline-flex;align-items:center;gap:.5rem;padding:.3125rem .625rem;border:1px solid transparent;border-radius:6px;background:transparent;cursor:pointer;transition:background .15s ease,border-color .15s ease;font:inherit;color:inherit;letter-spacing:.01em}.cortex-llm-inspector__trigger:hover{background:var(--cortex-color-surface-subtle);border-color:var(--cortex-color-border)}.cortex-llm-inspector__icon{color:var(--cortex-color-text-muted);flex-shrink:0}.cortex-llm-inspector__loading{color:var(--cortex-color-border-strong);font-style:italic}.cortex-llm-inspector__badge{display:inline-flex;align-items:center;justify-content:center;min-width:1.25rem;height:1.25rem;padding:0 .35rem;border-radius:9999px;background:var(--cortex-color-border);color:var(--cortex-color-text-secondary);font-size:.5625rem;font-weight:700}.cortex-llm-inspector__chevron{color:var(--cortex-color-border-strong);transition:transform .25s cubic-bezier(.4,0,.2,1);flex-shrink:0}.cortex-llm-inspector--open .cortex-llm-inspector__chevron{transform:rotate(180deg)}.cortex-llm-inspector__panel-wrapper{display:grid;grid-template-rows:0fr;transition:grid-template-rows .25s cubic-bezier(.4,0,.2,1),opacity .2s ease,margin .2s ease;opacity:0;margin-top:0}.cortex-llm-inspector__panel-inner{overflow:hidden}.cortex-llm-inspector--open .cortex-llm-inspector__panel-wrapper{grid-template-rows:1fr;opacity:1;margin-top:.375rem}.cortex-llm-inspector__panel{display:flex;flex-direction:column;gap:.375rem}.cortex-llm-inspector__empty{padding:.625rem;color:var(--cortex-color-text-muted);font-style:italic}.cortex-llm-inspector__step{border-radius:8px;background:var(--cortex-color-surface-subtle);overflow:hidden;transition:box-shadow .2s ease}.cortex-llm-inspector__step--expanded{box-shadow:0 0 0 1px var(--cortex-color-border)}.cortex-llm-inspector__step-header{display:flex;align-items:center;gap:.5rem;width:100%;padding:.5rem .625rem;border:none;background:transparent;cursor:pointer;font:inherit;color:inherit;text-align:start;transition:background .15s ease}.cortex-llm-inspector__step-header:hover{background:#00000005}.cortex-llm-inspector__step-label{font-weight:600;color:var(--cortex-color-text-secondary);white-space:nowrap;font-family:system-ui,-apple-system,sans-serif}.cortex-llm-inspector__step-metrics{display:inline-flex;align-items:center;gap:.625rem;margin-inline-start:auto;font-variant-numeric:tabular-nums}.cortex-llm-inspector__metric{display:inline-flex;align-items:center;gap:3px}.cortex-llm-inspector__dot{width:5px;height:5px;border-radius:50%;flex-shrink:0}.cortex-llm-inspector__dot--input{background:light-dark(#ea580c,#fb923c);box-shadow:0 0 0 1.5px #ea580c1f}.cortex-llm-inspector__dot--output{background:light-dark(#4f46e5,#818cf8);box-shadow:0 0 0 1.5px #4f46e51f}.cortex-llm-inspector__cache-pct{font-size:.5625rem;font-weight:600;color:var(--cortex-color-success);background:var(--cortex-color-success-surface);padding:1px 5px;border-radius:3px;font-family:system-ui,-apple-system,sans-serif}.cortex-llm-inspector__step-chevron{color:var(--cortex-color-border-strong);transition:transform .2s ease;flex-shrink:0}.cortex-llm-inspector__step--expanded .cortex-llm-inspector__step-chevron{transform:rotate(180deg)}.cortex-llm-inspector__step-body-wrapper{display:grid;grid-template-rows:0fr;transition:grid-template-rows .25s cubic-bezier(.4,0,.2,1),opacity .2s ease;opacity:0}.cortex-llm-inspector__step-body-inner{overflow:hidden}.cortex-llm-inspector__step--expanded .cortex-llm-inspector__step-body-wrapper{grid-template-rows:1fr;opacity:1}.cortex-llm-inspector__step-body{padding:0 .625rem .625rem;display:flex;flex-direction:column;gap:.5rem}.cortex-llm-inspector__usage-rows{display:flex;flex-direction:column;border-radius:6px;overflow:hidden;background:var(--cortex-color-border);gap:1px}.cortex-llm-inspector__usage-row{display:flex;align-items:baseline;gap:.5rem;padding:.375rem .625rem;background:var(--cortex-color-surface);flex-wrap:wrap}.cortex-llm-inspector__usage-row--total{background:light-dark(#fafbfc,#141414)}.cortex-llm-inspector__usage-lbl{font-size:.5625rem;text-transform:uppercase;letter-spacing:.05em;color:var(--cortex-color-text-muted);font-weight:600;width:3.25rem;flex-shrink:0;font-family:system-ui,-apple-system,sans-serif}.cortex-llm-inspector__usage-val{font-variant-numeric:tabular-nums;font-weight:600;color:var(--cortex-color-text-secondary);min-width:3rem}.cortex-llm-inspector__usage-row--total .cortex-llm-inspector__usage-val{font-weight:700;color:var(--cortex-color-text-heading)}.cortex-llm-inspector__usage-detail{color:var(--cortex-color-border-strong);font-size:.5625rem;margin-inline-start:auto}.cortex-llm-inspector__tabs{display:flex;gap:0;border-bottom:1px solid var(--cortex-color-border)}.cortex-llm-inspector__tab{padding:.375rem .75rem;border:none;background:transparent;cursor:pointer;font:inherit;color:var(--cortex-color-text-muted);font-weight:500;position:relative;transition:color .15s ease;font-family:system-ui,-apple-system,sans-serif}.cortex-llm-inspector__tab:hover{color:var(--cortex-color-text-secondary)}.cortex-llm-inspector__tab--active{color:var(--cortex-color-text-heading);font-weight:600}.cortex-llm-inspector__tab--active:after{content:"";position:absolute;inset-inline:0;bottom:-1px;height:2px;background:var(--cortex-color-text-heading);border-radius:1px 1px 0 0}.cortex-llm-inspector__json-pane{position:relative;max-height:24rem;overflow:auto;padding:.625rem;background:var(--cortex-color-surface);border-radius:6px}.cortex-llm-inspector__json-copy{position:sticky;top:0;float:inline-end;z-index:1}.cortex-json-tree{display:block;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.75rem;line-height:1.25rem;-webkit-user-select:text;user-select:text;white-space:pre-wrap;word-break:break-word}.cortex-json-tree__indent{padding-inline-start:1.25em;border-inline-start:1px solid var(--cortex-color-border);margin-inline-start:.3em}.cortex-json-tree__line{position:relative}.cortex-json-tree__toggle{cursor:pointer;-webkit-user-select:none;user-select:none}.cortex-json-tree__toggle:hover .cortex-json-tree__arrow{color:var(--cortex-color-text)}.cortex-json-tree__arrow{display:inline-block;width:1em;text-align:center;color:var(--cortex-color-text-muted);font-size:.525rem;transition:transform .15s ease;vertical-align:middle}.cortex-json-tree__arrow--collapsed{transform:rotate(-90deg)}.cortex-json-tree__bracket{color:var(--cortex-color-text-secondary)}.cortex-json-tree__key{color:light-dark(#6366f1,#818cf8)}.cortex-json-tree__colon{color:var(--cortex-color-text-secondary)}.cortex-json-tree__comma{color:var(--cortex-color-text-muted)}.cortex-json-tree__string{color:var(--cortex-color-success)}.cortex-json-tree__number{color:light-dark(#2563eb,#60a5fa)}.cortex-json-tree__boolean{color:light-dark(#d97706,#fbbf24)}.cortex-json-tree__null{color:var(--cortex-color-text-muted);font-style:italic}.cortex-json-tree__collapsed-hint{display:inline-block;padding:0 .4em;margin:0 .15em;font-size:.625rem;line-height:1.5;color:var(--cortex-color-text-muted);background:var(--cortex-color-surface-subtle);border:1px solid var(--cortex-color-border);border-radius:3px;font-style:italic;cursor:pointer;-webkit-user-select:none;user-select:none;vertical-align:middle}.cortex-json-tree__collapsed-hint:hover{color:var(--cortex-color-text-secondary);border-color:var(--cortex-color-border-strong);background:var(--cortex-color-surface-muted)}.cortex-copy-btn{display:inline-flex;align-items:center}.cortex-copy-btn__button{display:inline-flex;align-items:center;justify-content:center;width:1.375rem;height:1.375rem;padding:0;border:none;border-radius:3px;background:transparent;color:var(--cortex-color-text-muted);cursor:pointer;opacity:0;transition:opacity .15s ease,color .15s ease,background .15s ease}:hover>cortex-copy-button .cortex-copy-btn__button,:hover>.cortex-copy-btn .cortex-copy-btn__button,.cortex-copy-btn__button:hover,.cortex-copy-btn__button:focus-visible{opacity:1}.cortex-copy-btn__button:hover{background:var(--cortex-color-hover);color:var(--cortex-color-text)}.cortex-copy-btn__button--copied{opacity:1;color:var(--cortex-color-success);pointer-events:none}.cortex-copy-btn__button--copied:hover{color:var(--cortex-color-success);background:transparent}.cortex-copy-btn__icon{flex-shrink:0}.cortex-copy-btn__icon--check{animation:cortex-copy-pop .25s cubic-bezier(.34,1.56,.64,1) forwards}@keyframes cortex-copy-pop{0%{transform:scale(.6);opacity:0}to{transform:scale(1);opacity:1}}@media(prefers-reduced-motion:reduce){.cortex-widget *,.cortex-widget *:before,.cortex-widget *:after,.cortex-widget *::backdrop{animation-duration:.01ms!important;animation-delay:0s!important;animation-iteration-count:1!important;transition-duration:.01ms!important;transition-delay:0s!important}}\n']
|
|
12718
|
+
styles: ['@charset "UTF-8";:root{--cortex-color-surface: light-dark(#ffffff, #0a0a0a);--cortex-color-surface-subtle: light-dark(#f8fafc, #141414);--cortex-color-surface-muted: light-dark(#f1f5f9, #1f1f1f);--cortex-color-border: light-dark(#e2e8f0, #2e2e2e);--cortex-color-border-strong: light-dark(#cbd5e1, #444444);--cortex-color-text-heading: light-dark(#1e293b, #fafafa);--cortex-color-text-strong: light-dark(#334155, #e5e5e5);--cortex-color-text: light-dark(#475569, #d4d4d4);--cortex-color-text-secondary: light-dark(#64748b, #a3a3a3);--cortex-color-text-muted: light-dark(#94a3b8, #737373);--cortex-color-primary: light-dark(#1e293b, #fafafa);--cortex-color-primary-foreground: light-dark(#ffffff, #0a0a0a);--cortex-color-accent: light-dark(#4f46e5, #818cf8);--cortex-color-accent-surface: light-dark(#e0e7ff, #312e81);--cortex-color-link: light-dark(#2563eb, #60a5fa);--cortex-color-hover: light-dark(rgba(0, 0, 0, .05), rgba(255, 255, 255, .06));--cortex-color-user-surface: var(--cortex-color-surface-subtle);--cortex-color-user-border: var(--cortex-color-border);--cortex-color-code-text: light-dark(#334155, #e5e5e5);--cortex-color-success: light-dark(#059669, #34d399);--cortex-color-success-surface: light-dark(#ecfdf5, #064e3b);--cortex-color-success-border: light-dark(#d1fae5, #065f46);--cortex-color-danger: light-dark(#dc2626, #f87171);--cortex-color-danger-surface: light-dark(#fef2f2, #450a0a);--cortex-color-danger-border: light-dark(#fecaca, #7f1d1d);--cortex-radius: .5rem;--cortex-font-mono: var( --default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace );--cortex-font-size: .8125rem}.cortex-widget{color-scheme:light}.cortex-widget[data-cortex-theme=dark]{color-scheme:dark}.cortex-widget[data-cortex-theme=system]{color-scheme:light dark}@layer base.cortex{:where(.cortex-widget),:where(.cortex-widget) *,:where(.cortex-widget) :before,:where(.cortex-widget) :after{box-sizing:border-box;margin:0;padding:0;border:0 solid}:where(.cortex-widget){tab-size:4}:where(.cortex-widget) hr{height:0;color:inherit;border-top-width:1px}:where(.cortex-widget) :is(h1,h2,h3,h4,h5,h6){font-size:inherit;font-weight:inherit}:where(.cortex-widget) a{color:inherit;text-decoration:inherit}:where(.cortex-widget) :is(b,strong){font-weight:bolder}:where(.cortex-widget) :is(code,kbd,samp,pre){font-family:var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings, normal);font-variation-settings:var(--default-mono-font-variation-settings, normal);font-size:1em}:where(.cortex-widget) small{font-size:80%}:where(.cortex-widget) :is(sub,sup){font-size:75%;line-height:0;position:relative;vertical-align:baseline}:where(.cortex-widget) sub{bottom:-.25em}:where(.cortex-widget) sup{top:-.5em}:where(.cortex-widget) table{text-indent:0;border-color:inherit;border-collapse:collapse}:where(.cortex-widget) :is(ol,ul,menu){list-style:none}:where(.cortex-widget) :is(img,svg,video,canvas,audio,iframe,embed,object){display:block;vertical-align:middle}:where(.cortex-widget) :is(img,video){max-width:100%;height:auto}:where(.cortex-widget) :is(button,input,select,optgroup,textarea){font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;border-radius:0;background-color:transparent;opacity:1}:where(.cortex-widget) ::placeholder{opacity:1;color:color-mix(in oklab,currentcolor 50%,transparent)}:where(.cortex-widget) textarea{resize:vertical}}.cortex-widget .hljs{color:light-dark(#24292e,#c9d1d9);background:transparent}.cortex-widget .hljs-doctag,.cortex-widget .hljs-keyword,.cortex-widget .hljs-meta .hljs-keyword,.cortex-widget .hljs-template-tag,.cortex-widget .hljs-template-variable,.cortex-widget .hljs-type,.cortex-widget .hljs-variable.language_{color:light-dark(#d73a49,#ff7b72)}.cortex-widget .hljs-title,.cortex-widget .hljs-title.class_,.cortex-widget .hljs-title.class_.inherited__,.cortex-widget .hljs-title.function_{color:light-dark(#6f42c1,#d2a8ff)}.cortex-widget .hljs-attr,.cortex-widget .hljs-attribute,.cortex-widget .hljs-literal,.cortex-widget .hljs-meta,.cortex-widget .hljs-number,.cortex-widget .hljs-operator,.cortex-widget .hljs-selector-attr,.cortex-widget .hljs-selector-class,.cortex-widget .hljs-selector-id,.cortex-widget .hljs-variable{color:light-dark(#005cc5,#79c0ff)}.cortex-widget .hljs-meta .hljs-string,.cortex-widget .hljs-regexp,.cortex-widget .hljs-string{color:light-dark(#032f62,#a5d6ff)}.cortex-widget .hljs-built_in,.cortex-widget .hljs-symbol{color:light-dark(#e36209,#ffa657)}.cortex-widget .hljs-code,.cortex-widget .hljs-comment,.cortex-widget .hljs-formula{color:light-dark(#6a737d,#8b949e)}.cortex-widget .hljs-name,.cortex-widget .hljs-quote,.cortex-widget .hljs-selector-pseudo,.cortex-widget .hljs-selector-tag{color:light-dark(#22863a,#7ee787)}.cortex-widget .hljs-subst{color:light-dark(#24292e,#c9d1d9)}.cortex-widget .hljs-section{color:light-dark(#005cc5,#1f6feb);font-weight:700}.cortex-widget .hljs-bullet{color:light-dark(#735c0f,#f2cc60)}.cortex-widget .hljs-emphasis{font-style:italic}.cortex-widget .hljs-strong{font-weight:700}.cortex-widget .hljs-addition{color:light-dark(#22863a,#aff5b4);background-color:light-dark(#f0fff4,#033a16)}.cortex-widget .hljs-deletion{color:light-dark(#b31d28,#ffdcd7);background-color:light-dark(#ffeef0,#67060c)}.cortex-widget{display:block}.cortex-widget__container{width:100%;height:100%;position:relative;overflow:hidden}.cortex-widget__screen{position:absolute;inset:0;display:flex;flex-direction:column;transition:transform .3s ease-out}.cortex-widget__screen--active{transform:translate(0)}.cortex-widget__screen--left{transform:translate(-100%)}[dir=rtl] .cortex-widget__screen--left,.cortex-widget__screen--right{transform:translate(100%)}[dir=rtl] .cortex-widget__screen--right{transform:translate(-100%)}@keyframes cortex-skeleton-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.cortex-skeleton{background:linear-gradient(90deg,var(--cortex-color-border) 0%,var(--cortex-color-surface-muted) 40%,var(--cortex-color-border) 80%);background-size:200% 100%;animation:cortex-skeleton-shimmer 1.8s ease-in-out infinite;border-radius:6px}.cortex-widget__messages-skeleton{flex:1;overflow:hidden;padding:1rem;display:flex;flex-direction:column;gap:.5rem}.cortex-widget__msg-skel{width:100%;display:flex;flex-direction:column}.cortex-widget__msg-skel--user{align-items:flex-end}.cortex-widget__msg-skel--assistant{align-items:flex-start}.cortex-widget__msg-skel-bubble{max-width:80%;display:flex;flex-direction:column;gap:.5rem}.cortex-widget__msg-skel-bubble--user{padding:.75rem 1rem;border-radius:calc(var(--cortex-radius) * 2);border-end-end-radius:0;border:1px solid var(--cortex-color-border);background:var(--cortex-color-surface-subtle)}.cortex-widget__msg-skel-line{height:.75rem;max-width:100%}.cortex-widget__messages{flex:1;overflow:hidden}.cortex-widget__container--full{display:flex;flex-direction:row}.cortex-widget__container--full>.cortex-widget__screen{position:relative;inset:auto;transition:none}.cortex-widget__container--full>.cortex-widget__screen.cortex-widget__screen--active,.cortex-widget__container--full>.cortex-widget__screen.cortex-widget__screen--left,.cortex-widget__container--full>.cortex-widget__screen.cortex-widget__screen--right{transform:none}.cortex-widget__container--full>.cortex-widget__screen:first-child{width:280px;min-width:280px;flex-shrink:0;border-right:1px solid var(--cortex-color-border);background:var(--cortex-color-surface-subtle)}[dir=rtl] .cortex-widget__container--full>.cortex-widget__screen:first-child{border-right:0;border-left:1px solid var(--cortex-color-border)}.cortex-widget__container--full>.cortex-widget__screen:nth-child(2){flex:1;min-width:0}.cortex-widget__container--full .cortex-widget__back-btn,.cortex-widget__container--full .cortex-widget__history-btn{display:none}@media(min-width:769px){.cortex-widget__container--full>.cortex-widget__screen:nth-child(2) .cortex-widget__new-btn{display:none}}.cortex-widget__container--full .cortex-widget__chat-title{font-size:var(--cortex-font-size-header, .875rem)}.cortex-widget__container--full .cortex-widget__chat-header{background:var(--cortex-color-surface)}.cortex-widget__container--full .cortex-message-list,.cortex-widget__container--full .cortex-widget__messages-skeleton{padding:1.5rem max(2rem,(100% - 48rem) / 2)}.cortex-widget__container--full .cortex-widget__input-area{padding:.75rem max(2rem,(100% - 48rem) / 2) 1.25rem}@media(max-width:768px){.cortex-widget__container--full>.cortex-widget__screen:first-child{position:fixed;inset:0;width:280px;min-width:280px;z-index:110;transform:translate(-100%);transition:transform .28s cubic-bezier(.4,0,.2,1)}[dir=rtl] .cortex-widget__container--full>.cortex-widget__screen:first-child{transform:translate(100%);border-left:1px solid var(--cortex-color-border);border-right:0}.cortex-widget__container--full>.cortex-widget__screen:nth-child(2){flex:1;min-width:0}.cortex-widget__container--full .cortex-widget__sidebar-toggle-btn{flex-shrink:0;width:2rem;height:2rem;border-radius:calc(var(--cortex-radius) * .75);display:flex;align-items:center;justify-content:center;background:transparent;border:0;cursor:pointer;transition:color .15s,background-color .15s;color:var(--cortex-color-text-secondary)}.cortex-widget__container--full .cortex-widget__sidebar-toggle-btn:hover{color:var(--cortex-color-text-strong);background:var(--cortex-color-surface-muted)}.cortex-widget__container--full .cortex-widget__sidebar-toggle-btn:active{background:var(--cortex-color-border)}.cortex-widget__container--full .cortex-message-list,.cortex-widget__container--full .cortex-widget__messages-skeleton{padding:1rem}.cortex-widget__container--full .cortex-widget__input-area{padding:.75rem}}@media(max-width:768px){.cortex-widget__container--full.cortex-widget__container--sidebar-open>.cortex-widget__screen:first-child{transform:translate(0)}.cortex-widget__container--full.cortex-widget__container--sidebar-open .cortex-widget__sidebar-backdrop{display:block;position:fixed;inset:0;z-index:100;background:#0f172a59;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);animation:cortex-sidebar-backdrop-in .2s ease-out both}}@keyframes cortex-sidebar-backdrop-in{0%{opacity:0}to{opacity:1}}.cortex-widget__chat-header{flex-shrink:0;height:3rem;padding:0 1rem;display:flex;align-items:center;gap:.75rem;border-bottom:1px solid var(--cortex-color-border);background:var(--cortex-color-surface)}.cortex-widget__header-btn{flex-shrink:0;width:2rem;height:2rem;border-radius:calc(var(--cortex-radius) * .75);display:flex;align-items:center;justify-content:center;background:transparent;border:0;cursor:pointer;transition:color .15s,background-color .15s;color:var(--cortex-color-text-muted)}.cortex-widget__header-btn:hover{color:var(--cortex-color-text);background:var(--cortex-color-surface-muted)}[dir=rtl] .cortex-widget__back-icon{transform:rotate(180deg)}.cortex-widget__chat-title-wrap{min-width:0;flex:1}.cortex-widget__chat-title{font-family:var(--cortex-font-display, inherit);font-size:var(--cortex-font-size-header, var(--cortex-font-size));font-weight:500;color:var(--cortex-color-text-strong);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin:0}.cortex-widget__debug-btn{flex-shrink:0;font-size:.6875rem;font-weight:500;padding:.25rem .625rem;border-radius:calc(var(--cortex-radius) * .75);border:0;cursor:pointer;transition:background-color .15s}.cortex-widget__debug-btn--on{background:light-dark(#fef3c7,#78350f);color:light-dark(#d97706,#fbbf24)}.cortex-widget__debug-btn--on:hover{background:light-dark(#fde68a,#92400e)}.cortex-widget__debug-btn--off{background:var(--cortex-color-surface-muted);color:var(--cortex-color-text-muted)}.cortex-widget__debug-btn--off:hover{background:var(--cortex-color-border)}.cortex-widget__landing{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:1.25rem;text-align:center}.cortex-widget__landing .cortex-widget__landing-composer{max-width:26rem}.cortex-widget__landing-composer{width:100%}.cortex-widget__landing-composer .cortex-widget__input-area{padding:1rem 0 0;border-top:0;background:transparent}.cortex-widget__landing-icon{width:2.5rem;height:2.5rem;border-radius:var(--cortex-radius);background:var(--cortex-color-accent-surface);color:var(--cortex-color-accent);display:flex;align-items:center;justify-content:center;margin-bottom:.875rem}[dir=rtl] .cortex-widget__landing-icon{transform:scaleX(-1)}.cortex-widget__landing-greeting{font-family:var(--cortex-font-display, inherit);font-size:1.0625rem;font-weight:600;line-height:1.3;color:var(--cortex-color-text-heading);margin:0}.cortex-widget__landing-chips{display:flex;flex-wrap:wrap;justify-content:center;gap:.5rem;margin-top:.875rem}.cortex-widget__landing-chip{border:1px solid var(--cortex-color-border);border-radius:999px;background:var(--cortex-color-surface);color:var(--cortex-color-text-strong);font-size:.75rem;font-weight:500;padding:.375rem .75rem;cursor:pointer;transition:border-color .15s,color .15s}.cortex-widget__landing-chip:hover{border-color:var(--cortex-color-accent);color:var(--cortex-color-accent)}.cortex-widget__landing-recent{width:100%;max-width:26rem;margin-top:1rem;display:flex;flex-direction:column}.cortex-widget__landing-recent-item{display:flex;align-items:center;gap:.75rem;padding:.4375rem .625rem;border:0;border-radius:calc(var(--cortex-radius) * .75);background:transparent;cursor:pointer;transition:background-color .15s}.cortex-widget__landing-recent-item:hover{background:var(--cortex-color-hover)}.cortex-widget__landing-recent-title{flex:1;min-width:0;text-align:start;font-size:var(--cortex-font-size);font-weight:500;color:var(--cortex-color-text-strong);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin:0}.cortex-widget__landing-recent-time{flex-shrink:0;font-size:.6875rem;color:var(--cortex-color-text-muted);margin:0}cortex-chat-composer,cortex-message-tool-call-outcome,cortex-llm-usage-chips{display:contents}.cortex-widget__input-area{flex-shrink:0;padding:.75rem;background:var(--cortex-color-surface);border-top:1px solid var(--cortex-color-border)}.cortex-widget__input-box{display:flex;align-items:flex-end;gap:.5rem;border-radius:calc(var(--cortex-radius) * 1.5);border:1px solid var(--cortex-color-border);padding:.375rem;background:color-mix(in oklab,var(--cortex-color-surface-subtle) 45%,var(--cortex-color-surface));transition:border-color .15s,background-color .15s}.cortex-widget__input-box--enabled:focus-within{border-color:var(--cortex-color-border-strong);background:var(--cortex-color-surface)}.cortex-widget__input-box--dragging{border-color:var(--cortex-color-text-heading);border-style:dashed;background:var(--cortex-color-surface-muted)}.cortex-widget__textarea,.cortex-widget__textarea:focus,.cortex-widget__textarea:focus-visible,.cortex-widget__textarea:disabled{background:transparent;border:0;outline:none;box-shadow:none}.cortex-widget__textarea{flex:1;resize:none;font-size:var(--cortex-font-size-message, var(--cortex-font-size));padding:.375rem .5rem;min-height:28px;max-height:calc(5.5 * var(--cortex-font-size-message, var(--cortex-font-size)) + .75rem);overflow-y:auto;line-height:1.375;color:var(--cortex-color-text-strong)}.cortex-widget__textarea::placeholder{color:var(--cortex-color-text-muted)}.cortex-widget__textarea--disabled{color:var(--cortex-color-text-muted);cursor:not-allowed}.cortex-widget__textarea:disabled{cursor:not-allowed}.cortex-widget__input-actions{flex-shrink:0;display:flex;align-items:center;gap:.375rem}@keyframes cortex-stop-pulse-ring{0%{opacity:.45;transform:scale(1)}50%{opacity:.15;transform:scale(1.12)}to{opacity:.45;transform:scale(1)}}@keyframes cortex-stop-fade-in{0%{opacity:0;transform:scale(.7)}to{opacity:1;transform:scale(1)}}.cortex-stop-btn{flex-shrink:0;width:2rem;height:2rem;border-radius:var(--cortex-radius);display:flex;align-items:center;justify-content:center;cursor:pointer;position:relative;background:var(--cortex-color-danger);color:#fff;border:0;animation:cortex-stop-fade-in .2s ease-out both;transition:background .15s ease}.cortex-stop-btn:hover{background:color-mix(in oklab,var(--cortex-color-danger) 85%,black)}.cortex-stop-btn:active{transform:scale(.92)}.cortex-stop-btn__ring{position:absolute;inset:0;border-radius:var(--cortex-radius);background:var(--cortex-color-danger);animation:cortex-stop-pulse-ring 2s ease-in-out infinite;pointer-events:none}.cortex-stop-btn__icon{position:relative;z-index:1}.cortex-widget__attach-btn{flex-shrink:0;width:2rem;height:2rem;border-radius:var(--cortex-radius);display:flex;align-items:center;justify-content:center;background:transparent;border:0;cursor:pointer;transition:color .15s,background-color .15s;color:var(--cortex-color-text-muted)}.cortex-widget__attach-btn:hover{color:var(--cortex-color-text);background:var(--cortex-color-hover)}.cortex-widget__file-input{display:none}.cortex-widget__send-btn{flex-shrink:0;width:2rem;height:2rem;border-radius:var(--cortex-radius);display:flex;align-items:center;justify-content:center;border:0;transition:background-color .15s;cursor:default}.cortex-widget__send-btn--empty{background:var(--cortex-color-send-empty, transparent);color:var(--cortex-color-send-empty-text, var(--cortex-color-text-muted))}.cortex-widget__send-btn--ready{background:var(--cortex-color-primary);color:var(--cortex-color-primary-foreground);cursor:pointer}.cortex-widget__send-btn--ready:hover{background:color-mix(in oklab,var(--cortex-color-primary) 85%,var(--cortex-color-primary-foreground))}[dir=rtl] .cortex-widget__send-icon{transform:rotate(180deg)}.cortex-widget__threads-header{flex-shrink:0;padding:1.25rem 1.25rem 1rem;display:flex;align-items:center;gap:.75rem}.cortex-widget__threads-header .cortex-widget__new-btn{margin-inline-start:auto}.cortex-widget__threads-title{font-family:var(--cortex-font-display, inherit);font-size:var(--cortex-font-size-header, .9375rem);font-weight:600;color:var(--cortex-color-text-heading);letter-spacing:-.01em;margin:0}.cortex-widget__threads-count{font-size:.6875rem;color:var(--cortex-color-text-muted);margin-top:.125rem;margin-bottom:0}.cortex-widget__new-chat-btn{display:inline-flex;align-items:center;gap:.375rem;font-size:.75rem;font-weight:500;color:var(--cortex-color-primary-foreground);background:var(--cortex-color-primary);padding:.375rem .75rem;border-radius:calc(var(--cortex-radius) * .75);border:0;cursor:pointer;transition:background-color .15s}.cortex-widget__new-chat-btn:hover{background:color-mix(in oklab,var(--cortex-color-primary) 85%,var(--cortex-color-primary-foreground))}.cortex-widget__new-chat-btn:active{background:var(--cortex-color-primary)}.cortex-widget__new-chat-btn--empty-state{margin-top:.75rem}.cortex-widget__threads-list{flex:1;overflow-y:auto;padding:0 .75rem .75rem}.cortex-widget__thread-skeleton{display:flex;align-items:center;gap:.75rem;padding:.75rem;margin-bottom:.375rem;border-radius:var(--cortex-radius);border:1px solid var(--cortex-color-border);background:var(--cortex-color-surface)}.cortex-widget__thread-skeleton-icon{flex-shrink:0;width:2rem;height:2rem}.cortex-widget__thread-skeleton-lines{flex:1;display:flex;flex-direction:column;gap:.375rem}.cortex-widget__thread-skeleton-line{height:.875rem}.cortex-widget__thread-item{position:relative;width:100%;padding:.75rem;border-radius:var(--cortex-radius);display:flex;align-items:center;gap:.75rem;transition:background-color .15s,border-color .15s;cursor:pointer;margin-bottom:.375rem;border:1px solid var(--cortex-color-border);background:var(--cortex-color-surface);color:var(--cortex-color-text)}.cortex-widget__thread-item:hover{background:var(--cortex-color-surface-muted);border-color:var(--cortex-color-border-strong)}.cortex-widget__thread-item:active{background:color-mix(in oklab,var(--cortex-color-surface-muted) 50%,var(--cortex-color-border))}.cortex-widget__thread-item--active{background:color-mix(in oklab,var(--cortex-color-surface-muted) 50%,var(--cortex-color-border));border-color:var(--cortex-color-border-strong);color:var(--cortex-color-text-heading)}.cortex-widget__thread-item--active:hover{background:var(--cortex-color-border)}.cortex-widget__thread-item--active:active{background:color-mix(in oklab,var(--cortex-color-border) 50%,var(--cortex-color-border-strong))}.cortex-widget__thread-icon{flex-shrink:0;width:2rem;height:2rem;border-radius:calc(var(--cortex-radius) * .75);display:flex;align-items:center;justify-content:center;font-size:.6875rem;font-weight:600;background:var(--cortex-color-accent-surface);color:var(--cortex-color-accent)}[dir=rtl] .cortex-widget__thread-icon{transform:scaleX(-1)}.cortex-widget__thread-icon--active{background:color-mix(in oklab,var(--cortex-color-accent-surface) 85%,var(--cortex-color-accent))}.cortex-widget__thread-info{min-width:0;flex:1;text-align:start;cursor:pointer}.cortex-widget__thread-info:after{content:"";position:absolute;inset:0}.cortex-widget__thread-title-row{display:flex;align-items:center;gap:.5rem;min-width:0}.cortex-widget__thread-title{font-size:var(--cortex-font-size);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.25;margin:0;color:var(--cortex-color-text-strong)}.cortex-widget__thread-title--active{color:var(--cortex-color-text-heading);font-weight:600}.cortex-widget__thread-time{font-size:.6875rem;color:var(--cortex-color-text-muted);margin-top:.125rem;margin-bottom:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cortex-widget__thread-running{flex-shrink:0;display:inline-flex;align-items:center;gap:.3125rem;padding:.2rem .45rem;border-radius:999px;background:var(--cortex-color-success-surface);color:var(--cortex-color-success);font-size:.625rem;font-weight:700;letter-spacing:.02em;text-transform:uppercase}.cortex-widget__thread-running-dot{width:.375rem;height:.375rem;border-radius:999px;background:currentColor;box-shadow:0 0 .45rem currentColor;animation:cortex-thread-running-pulse 1.4s ease-in-out infinite}@keyframes cortex-thread-running-pulse{0%,to{opacity:.45;transform:scale(.9)}50%{opacity:1;transform:scale(1)}}.cortex-widget__thread-delete{position:relative;flex-shrink:0;opacity:0;width:1.75rem;height:1.75rem;border-radius:calc(var(--cortex-radius) * .75);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:opacity .15s;background:transparent;border:0;color:var(--cortex-color-text-muted)}.cortex-widget__thread-item:hover>.cortex-widget__thread-delete,.cortex-widget__thread-delete:focus-visible{opacity:1}.cortex-widget__thread-delete:hover{background:var(--cortex-color-border)}.cortex-widget__thread-delete--active{color:var(--cortex-color-text-secondary)}.cortex-widget__thread-delete--active:hover{color:var(--cortex-color-text)}.cortex-widget__thread-arrow{flex-shrink:0;transition:color .15s;color:var(--cortex-color-border-strong);pointer-events:none}[dir=rtl] .cortex-widget__thread-arrow{transform:rotate(180deg)}.cortex-widget__thread-item:hover>.cortex-widget__thread-arrow{color:var(--cortex-color-text-muted)}.cortex-widget__thread-arrow--active{color:var(--cortex-color-text-muted)}.cortex-widget__thread-item:hover>.cortex-widget__thread-arrow--active{color:var(--cortex-color-text-secondary)}.cortex-widget__threads-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:4rem 0;text-align:center}.cortex-widget__threads-empty-icon{width:2.5rem;height:2.5rem;border-radius:var(--cortex-radius);background:var(--cortex-color-accent-surface);display:flex;align-items:center;justify-content:center;margin-bottom:.75rem}.cortex-widget__threads-empty-svg{color:var(--cortex-color-accent)}.cortex-widget__threads-empty-title{font-family:var(--cortex-font-display, inherit);font-size:var(--cortex-font-size);color:var(--cortex-color-text-muted);font-weight:500;margin:0}.cortex-widget__threads-empty-subtitle{font-size:.6875rem;color:var(--cortex-color-text-muted);margin-top:.25rem;margin-bottom:0}.cortex-widget__sidebar-toggle-btn,.cortex-widget__sidebar-backdrop{display:none}.cortex-message-list{height:100%;overflow-y:auto;overflow-x:hidden;width:100%;padding:1rem}.cortex-message-list__content{position:relative;display:flex;flex-direction:column;gap:.5rem}.cortex-message-list__content--settling{animation:cortex-content-settle .42s cubic-bezier(.76,0,.24,1) both}@keyframes cortex-content-settle{0%{translate:0 var(--cortex-slide)}}.cortex-widget__screen>.cortex-send-flight{position:absolute;z-index:2;margin:0;max-width:none;pointer-events:none;animation:cortex-send-fade 80ms linear both,cortex-send-fly .42s cubic-bezier(.76,0,.24,1) both}@keyframes cortex-send-fade{0%{opacity:0}}@keyframes cortex-send-fly{0%{translate:var(--cortex-fly-x) var(--cortex-fly-y)}}.cortex-working-thinking{padding-inline-start:2rem;--cortex-reveal-from: -1rem;--cortex-reveal-mask: linear-gradient(to right, #000 40%, rgb(0 0 0 / .35) 60%);--cortex-reveal-start: 100%;--cortex-reveal-end: 0%;animation:cortex-part-reveal .7s cubic-bezier(.22,1,.36,1) backwards}[dir=rtl] .cortex-working-thinking{--cortex-reveal-from: 1rem;--cortex-reveal-mask: linear-gradient(to left, #000 40%, rgb(0 0 0 / .35) 60%);--cortex-reveal-start: 0%;--cortex-reveal-end: 100%}.cortex-working-avatar{position:absolute;top:0;inset-inline-start:0;z-index:1;width:1.5rem;height:1.5rem;display:flex;align-items:center;justify-content:center;border-radius:9999px;background:var(--cortex-color-accent);color:var(--cortex-color-primary-foreground);translate:0 var(--cortex-avatar-y, 0);visibility:hidden;pointer-events:none}.cortex-working-avatar svg{width:.875rem;height:.875rem}.cortex-working-avatar--shown{visibility:visible;transition:translate .42s cubic-bezier(.76,0,.24,1);animation:cortex-avatar-in .7s cubic-bezier(.16,1,.3,1) both}.cortex-working-avatar--leaving{animation:cortex-avatar-out .36s cubic-bezier(.5,0,.75,0) .12s both}.cortex-working-avatar__ring{position:absolute;inset:-.25rem;border-radius:9999px;border:1.5px solid color-mix(in oklab,var(--cortex-color-accent) 18%,transparent);border-top-color:var(--cortex-color-accent);border-right-color:color-mix(in oklab,var(--cortex-color-accent) 45%,transparent)}.cortex-working-avatar--shown .cortex-working-avatar__ring{animation:cortex-tool-spin 1s linear infinite}.cortex-working-avatar--leaving .cortex-working-avatar__ring{animation:cortex-avatar-ring-out .22s ease-out both}@keyframes cortex-avatar-in{0%{opacity:0;transform:translateY(2.5rem) scale(.7)}}@keyframes cortex-avatar-out{to{opacity:0;transform:scale(.4)}}@keyframes cortex-avatar-ring-out{to{opacity:0}}.cortex-message{min-width:0;transition:margin-block-start .42s cubic-bezier(.76,0,.24,1)}.cortex-message:empty{display:none}.cortex-message:has(.cortex-message-part--folded):not(:has(.cortex-message-part:not(.cortex-message-part--folded))){margin-block-start:-.5rem;transition-delay:.6s}.cortex-text-bubble--assistant,.cortex-subtle-activity,.cortex-tool-pill,.cortex-tool-pill .cortex-tool-pill__icon{transition:translate .42s cubic-bezier(.76,0,.24,1) .16s}.cortex-message--working-turn .cortex-text-bubble--assistant,.cortex-message--working-turn .cortex-subtle-activity,.cortex-message--working-turn .cortex-tool-pill,.cortex-message--working-turn .cortex-tool-pill .cortex-tool-pill__icon{transition-delay:0s}.cortex-message--working-turn .cortex-text-bubble--assistant,.cortex-message--working-turn .cortex-subtle-activity{translate:2rem}[dir=rtl] .cortex-message--working-turn .cortex-text-bubble--assistant,[dir=rtl] .cortex-message--working-turn .cortex-subtle-activity{translate:-2rem}.cortex-message--working-turn .cortex-tool-pill{translate:.875rem}[dir=rtl] .cortex-message--working-turn .cortex-tool-pill{translate:-.875rem}.cortex-message--working-turn .cortex-tool-pill .cortex-tool-pill__icon{translate:-.5rem}[dir=rtl] .cortex-message--working-turn .cortex-tool-pill .cortex-tool-pill__icon{translate:.5rem}.cortex-message-parts{width:100%;display:flex;flex-direction:column;gap:.5rem}.cortex-message-actions{display:flex;align-items:center;gap:.375rem;margin-top:-.25rem}.cortex-message-actions--user{justify-content:flex-end}.cortex-message-actions__time{font-size:.6875rem;color:var(--cortex-color-text-muted);opacity:0;transition:opacity .15s ease}.cortex-message-actions:not(:has(.cortex-copy-btn)) .cortex-message-actions__time{opacity:1}.cortex-message:hover .cortex-message-actions .cortex-copy-btn__button,.cortex-message:hover .cortex-message-actions .cortex-message-actions__time,.cortex-message-actions:focus-within .cortex-copy-btn__button,.cortex-message-actions:focus-within .cortex-message-actions__time{opacity:1}.cortex-message-debug-zone{display:flex;flex-direction:column;gap:.25rem;padding-top:.375rem;margin-top:.125rem;border-top:1px dashed var(--cortex-color-border)}.cortex-message-part{display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:1fr;min-width:0;transition:grid-template-rows .42s cubic-bezier(.76,0,.24,1),margin-block-end .42s cubic-bezier(.76,0,.24,1),opacity .3s ease,visibility 0s,overflow 0s .42s allow-discrete}.cortex-message-part>*{min-height:0}.cortex-message-part:empty{display:none}.cortex-message-part--folded{grid-template-rows:0fr;margin-block-end:-.5rem;opacity:0;overflow:clip;visibility:hidden;transition-delay:.6s,.6s,.6s,1.02s,0s}[data-cortex-frontier] .cortex-tool-pill__spinner{visibility:hidden}[data-cortex-frontier] .cortex-subtle-activity__dots{display:none}.cortex-message-part--animated{--cortex-reveal-from: -1rem;--cortex-reveal-mask: linear-gradient(to right, #000 40%, rgb(0 0 0 / .35) 60%);--cortex-reveal-start: 100%;--cortex-reveal-end: 0%;animation:cortex-part-reveal .7s cubic-bezier(.22,1,.36,1) backwards}[dir=rtl] .cortex-message-part--animated{--cortex-reveal-from: 1rem;--cortex-reveal-mask: linear-gradient(to left, #000 40%, rgb(0 0 0 / .35) 60%);--cortex-reveal-start: 0%;--cortex-reveal-end: 100%}@keyframes cortex-part-reveal{0%{opacity:0;transform:translate(var(--cortex-reveal-from));filter:blur(5px);-webkit-mask-image:var(--cortex-reveal-mask);mask-image:var(--cortex-reveal-mask);-webkit-mask-size:300% 100%;mask-size:300% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:var(--cortex-reveal-start) 0;mask-position:var(--cortex-reveal-start) 0}40%{opacity:1}to{transform:none;filter:none;-webkit-mask-image:var(--cortex-reveal-mask);mask-image:var(--cortex-reveal-mask);-webkit-mask-size:300% 100%;mask-size:300% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:var(--cortex-reveal-end) 0;mask-position:var(--cortex-reveal-end) 0}}.cortex-unhandled-type{text-align:center;font-size:.75rem;color:var(--cortex-color-text-muted)}.cortex-text-part{width:100%;display:flex;flex-direction:column}.cortex-text-part--user{align-items:flex-end}.cortex-text-bubble{min-width:0;overflow-wrap:anywhere;font-size:var(--cortex-font-size-message, var(--cortex-font-size));line-height:1.625;color:var(--cortex-color-text-strong)}.cortex-text-bubble--assistant{width:calc(100% - 2rem)}.cortex-text-bubble--user{max-width:80%;padding:.75rem 1rem;border-radius:calc(var(--cortex-radius) * 2);border-end-end-radius:0;border:1px solid var(--cortex-color-user-border);background:var(--cortex-color-user-surface)}.cortex-text-bubble h1,.cortex-text-bubble h2,.cortex-text-bubble h3,.cortex-text-bubble h4,.cortex-text-bubble h5,.cortex-text-bubble h6{margin-top:1.25em;margin-bottom:.5em;font-weight:600;line-height:1.3;color:var(--cortex-color-text-heading)}.cortex-text-bubble h1:first-child,.cortex-text-bubble h2:first-child,.cortex-text-bubble h3:first-child,.cortex-text-bubble h4:first-child,.cortex-text-bubble h5:first-child,.cortex-text-bubble h6:first-child{margin-top:0}.cortex-text-bubble h1{font-size:1.25em}.cortex-text-bubble h2{font-size:1.125em}.cortex-text-bubble h3{font-size:1em}.cortex-text-bubble p{margin-top:.75em;margin-bottom:.75em}.cortex-text-bubble p:first-child{margin-top:0}.cortex-text-bubble p:last-child{margin-bottom:0}.cortex-text-bubble ul,.cortex-text-bubble ol{margin-top:.75em;margin-bottom:.75em;padding-inline-start:1.5em}.cortex-text-bubble ul{list-style-type:disc}.cortex-text-bubble ol{list-style-type:decimal}.cortex-text-bubble li{margin-top:.25em;margin-bottom:.25em}.cortex-text-bubble code{font-family:var(--cortex-font-mono);font-size:.875em;background:var(--cortex-color-border);padding:.125em .375em;border-radius:calc(var(--cortex-radius) * .5)}.cortex-text-bubble pre{margin-top:.75em;margin-bottom:.75em;padding:.75em 1em;background:var(--cortex-color-code-surface, color-mix(in oklab, var(--cortex-color-text-heading) 8%, transparent));border-radius:var(--cortex-radius);max-width:100%;overflow-x:auto;font-size:.8125em;line-height:1.6}.cortex-text-bubble pre code{background:transparent;padding:0;color:var(--cortex-color-code-text)}.cortex-text-bubble blockquote{margin-top:.75em;margin-bottom:.75em;padding-inline-start:1em;border-inline-start:3px solid var(--cortex-color-border-strong);color:var(--cortex-color-text-secondary);font-style:italic}.cortex-text-bubble a{color:var(--cortex-color-link);text-decoration:underline}.cortex-text-bubble a:hover{color:color-mix(in oklab,var(--cortex-color-link) 80%,var(--cortex-color-text-heading))}.cortex-text-bubble table{width:100%;border-collapse:collapse;margin-top:.75em;margin-bottom:.75em;font-size:.875em}.cortex-text-bubble th,.cortex-text-bubble td{border:1px solid var(--cortex-color-border);padding:.375em .75em;text-align:start}.cortex-text-bubble th{background:var(--cortex-color-surface-subtle);font-weight:600}.cortex-text-bubble hr{margin-top:1.5em;margin-bottom:1.5em;border:none;border-top:1px solid var(--cortex-color-border)}.cortex-text-bubble img{max-width:100%;height:auto;border-radius:calc(var(--cortex-radius) * .75)}.cortex-stream-fade{animation:cortex-stream-fade .3s ease-out}@keyframes cortex-stream-fade{0%{opacity:0}}.cortex-expandable{display:block;position:relative}.cortex-expandable__content{isolation:isolate}.cortex-expandable__toolbar{position:absolute;top:.375rem;inset-inline-end:.375rem;z-index:1;display:flex;gap:.125rem;padding:.125rem;border:1px solid var(--cortex-color-border);border-radius:var(--cortex-radius);background:var(--cortex-color-surface);box-shadow:0 1px 3px #00000014;opacity:0;transition:opacity .15s}.cortex-expandable:hover>.cortex-expandable__toolbar,.cortex-expandable__toolbar:has(:focus-visible){opacity:1}@media(hover:none){.cortex-expandable__toolbar{position:static;width:fit-content;margin:0 0 .25rem;margin-inline-start:auto;opacity:1}}.cortex-expandable__action{flex-shrink:0;width:2rem;height:2rem;border-radius:calc(var(--cortex-radius) * .75);display:flex;align-items:center;justify-content:center;background:transparent;border:0;cursor:pointer;transition:color .15s,background-color .15s;width:1.75rem;height:1.75rem;color:var(--cortex-color-text-muted)}.cortex-expandable__action:hover{color:var(--cortex-color-text);background:var(--cortex-color-hover)}.cortex-expandable__dialog{width:fit-content;min-width:min(24rem,100vw - 2rem);max-width:calc(100vw - 2rem);max-height:calc(100dvh - 2rem);margin:auto;padding:0;overflow:hidden;border:1px solid var(--cortex-color-border);border-radius:calc(var(--cortex-radius) * 1.5);background:var(--cortex-color-surface);color:var(--cortex-color-text-strong);box-shadow:0 24px 64px #0000003d}.cortex-expandable__dialog[open]{display:flex;flex-direction:column;animation:cortex-expandable-in .18s ease-out}.cortex-expandable__dialog::backdrop{background:#00000073;animation:cortex-expandable-backdrop-in .18s ease-out}.cortex-expandable__head{display:flex;align-items:center;gap:.125rem;padding-block:.375rem;padding-inline:1rem .375rem;border-bottom:1px solid var(--cortex-color-border)}.cortex-expandable__title{flex:1;min-width:0;margin-inline-end:.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.875rem;font-weight:600;color:var(--cortex-color-text-heading)}.cortex-expandable__body{min-height:0;overflow:auto;overscroll-behavior:contain}@keyframes cortex-expandable-in{0%{opacity:0;transform:translateY(.5rem) scale(.98)}}@keyframes cortex-expandable-backdrop-in{0%{opacity:0}}.cortex-media-block{display:block;width:40rem;max-width:100%;margin:.75em 0;border:1px solid var(--cortex-color-border);border-radius:var(--cortex-radius);background:var(--cortex-color-surface);overflow:hidden}.cortex-media-block__head{display:flex}.cortex-media-block__head[hidden]{display:none}.cortex-media-block__head{align-items:center;justify-content:space-between;gap:.5rem;padding:.25rem .5rem .25rem .75rem;background:var(--cortex-color-surface-subtle);border-bottom:1px solid var(--cortex-color-border);font-size:.75rem;color:var(--cortex-color-text-muted)}.cortex-media-block__lang{font-family:var(--cortex-font-mono)}.cortex-media-block__pending{display:inline-flex;align-items:center;gap:.375rem}.cortex-media-block__pending:before{content:"";width:.625rem;height:.625rem;border:1.5px solid var(--cortex-color-border-strong);border-top-color:var(--cortex-color-text-muted);border-radius:9999px;animation:cortex-tool-spin .8s linear infinite}.cortex-media-block__actions{display:inline-flex;align-items:center;gap:.125rem}.cortex-media-block__action{background:transparent;border:0;padding:.125rem .375rem;border-radius:calc(var(--cortex-radius) * .5);font:inherit;color:inherit;cursor:pointer}.cortex-media-block__action:hover,.cortex-media-block__action[aria-pressed=true]{background:var(--cortex-color-hover);color:var(--cortex-color-text-strong)}.cortex-media-block__body{display:block;padding:.75rem}.cortex-media-block__body[hidden]{display:none}.cortex-media-block__body{min-height:6rem;overflow-x:auto}.cortex-media-block__body svg{display:block;max-width:100%;height:auto;direction:ltr}.cortex-media-block__body svg text{unicode-bidi:plaintext}.cortex-media-block__body>div>svg{margin-inline:auto}.cortex-media-block__body--map{padding:0;height:18rem}.cortex-media-block__body--map>div{height:100%}.cortex-media-block__body--report{padding:1rem}.cortex-expandable__body .cortex-media-block__body{width:min(72rem,100vw - 2rem - 2px)}.cortex-expandable__body .cortex-media-block__body:not(.cortex-media-block__body--map,.cortex-media-block__body--report)>div{display:grid}.cortex-expandable__body .cortex-media-block__body:not(.cortex-media-block__body--map,.cortex-media-block__body--report) svg{width:100%;max-width:none!important;max-height:calc(100dvh - 6.5rem)}.cortex-expandable__body .cortex-media-block__body--map{height:min(48rem,100dvh - 5rem)}.cortex-expandable:has(>.cortex-expandable__content>.cortex-media-block__body--map)>.cortex-expandable__toolbar{right:.375rem;left:auto}.cortex-media-block__error{margin:0;font-size:.8125rem;color:var(--cortex-color-danger)}.cortex-media-block .cortex-media-block__source{margin:0;padding:.75rem;border-top:1px solid var(--cortex-color-border);background:var(--cortex-color-surface-subtle);font-family:var(--cortex-font-mono);font-size:.75rem;line-height:1.5;white-space:pre;overflow-x:auto;color:var(--cortex-color-text)}.cortex-attachment-image{margin:.75em 0}.cortex-attachment-image .cortex-expandable{width:fit-content;max-width:100%}.cortex-attachment-image .cortex-expandable__content img{display:block;max-width:100%;border-radius:var(--cortex-radius);border:1px solid var(--cortex-color-border)}.cortex-expandable__body .cortex-attachment-image__expanded{display:block;max-width:calc(100vw - 2rem - 2px);max-height:calc(100dvh - 5rem);margin:auto;border-radius:0}.cortex-attachment-image__caption{margin:.25rem 0 0;font-size:.75rem;color:var(--cortex-color-text-muted)}.cortex-table-block{display:block;margin:.75em 0}.cortex-table-block th{white-space:nowrap}.cortex-table-block td{max-width:20rem}.cortex-table-block table{margin:0}.cortex-table-block .cortex-expandable{width:fit-content;max-width:100%}.cortex-table-block:has(table[dir=ltr])>.cortex-expandable{margin-right:auto}.cortex-table-block:has(table[dir=rtl])>.cortex-expandable{margin-left:auto}.cortex-table-block__expanded{padding:1rem}.cortex-table-block__expanded td{max-width:40rem}.cortex-reasoning-details{width:100%;border-radius:var(--cortex-radius);border:1px solid var(--cortex-color-border);background:var(--cortex-color-surface-subtle);overflow:hidden}.cortex-reasoning-details__summary{list-style:none;cursor:pointer;-webkit-user-select:none;user-select:none;padding:.75rem 1rem;display:flex;align-items:center;gap:.75rem}.cortex-reasoning-details__summary::-webkit-details-marker{display:none}.cortex-reasoning-details__header{display:flex;align-items:center;gap:.5rem;min-width:0;flex:1}.cortex-reasoning-details__icon{display:inline-flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;border-radius:calc(var(--cortex-radius) * .5);background:var(--cortex-color-accent-surface);color:var(--cortex-color-accent)}.cortex-reasoning-details__title-group{min-width:0}.cortex-reasoning-details__title-row{display:flex;align-items:center;gap:.5rem}.cortex-reasoning-details__title{font-weight:500;color:var(--cortex-color-text-strong);font-size:.875rem}.cortex-reasoning-details__badge{display:inline-flex;align-items:center;border-radius:calc(var(--cortex-radius) * .5);padding:.125rem .375rem;font-size:.6875rem;font-weight:500}.cortex-reasoning-details__badge--streaming{background:light-dark(#fef3c7,#78350f);color:light-dark(#b45309,#fcd34d)}.cortex-reasoning-details__badge--done{background:var(--cortex-color-success-border);color:var(--cortex-color-success)}.cortex-reasoning-details__chevron{margin-inline-start:auto;display:inline-flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;border-radius:calc(var(--cortex-radius) * .5);color:var(--cortex-color-text-muted);transition:transform .2s}details[open]>summary>.cortex-reasoning-details__chevron{transform:rotate(180deg)}.cortex-reasoning-details__body{padding:0 1rem 1rem}.cortex-reasoning-details__content{margin-top:.25rem;border-radius:calc(var(--cortex-radius) * .5);background:var(--cortex-color-surface);border:1px solid var(--cortex-color-border);padding:.75rem}.cortex-reasoning-details__pre{margin:0;white-space:pre-wrap;overflow-wrap:break-word;font-family:var(--cortex-font-mono);font-size:.75rem;line-height:1.625;color:var(--cortex-color-text-strong)}@keyframes cortex-aborted-fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.cortex-aborted-flag{display:flex;align-items:center;gap:.625rem;padding:.25rem 0;animation:cortex-aborted-fade-in .3s ease-out both;-webkit-user-select:none;user-select:none}.cortex-aborted-flag__line{flex:1;height:1px;background:repeating-linear-gradient(90deg,#e2a36f 0px,#e2a36f 4px,transparent 4px,transparent 8px);opacity:.5}.cortex-aborted-flag__label{display:inline-flex;align-items:center;gap:.3125rem;font-family:var(--cortex-font-mono);font-size:.625rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:light-dark(#c2824a,#e2a36f)}.cortex-aborted-flag__icon{color:light-dark(#c2824a,#e2a36f);flex-shrink:0}.cortex-aborted-flag__reason{margin:.125rem 0 0;font-size:.75rem;line-height:1.4;text-align:center;overflow-wrap:anywhere;color:light-dark(#c2824a,#e2a36f)}.cortex-trigger-block{display:inline-flex;width:fit-content;padding:.375rem .75rem;border-radius:999px;background:var(--cortex-color-accent-surface);color:var(--cortex-color-text-strong);font-size:.75rem}.cortex-trigger-block__head{display:flex;align-items:center;gap:.5rem}.cortex-trigger-block__icon{flex-shrink:0;color:var(--cortex-color-accent)}.cortex-trigger-block__name{font-family:var(--cortex-font-mono);font-weight:600}.cortex-trigger-block__time{color:var(--cortex-color-text-secondary);font-size:.6875rem}.cortex-trigger-block--debug{display:flex;flex-direction:column;width:auto;gap:.375rem;padding:.5rem .75rem;border:1px dashed var(--cortex-color-border-strong);border-radius:var(--cortex-radius);background:var(--cortex-color-surface-subtle);font-size:.6875rem}.cortex-trigger-block--debug .cortex-trigger-block__head{font-family:var(--cortex-font-mono);letter-spacing:.04em;text-transform:uppercase;color:var(--cortex-color-text-secondary)}.cortex-trigger-block--debug .cortex-trigger-block__name{color:var(--cortex-color-text-strong)}.cortex-trigger-block--debug .cortex-trigger-block__time{margin-inline-start:auto;font-size:inherit;text-transform:none;letter-spacing:0}.cortex-trigger-block__payload{font-size:.75rem}.cortex-trigger-block__payload>summary{cursor:pointer;color:var(--cortex-color-text-secondary);-webkit-user-select:none;user-select:none}.cortex-trigger-block__payload[open]>summary{margin-bottom:.25rem}.cortex-widget__messages-disabled{padding:.75rem 1rem;text-align:center;font-size:.75rem;color:var(--cortex-color-text-muted)}.cortex-message-attachments{display:flex;flex-wrap:wrap;gap:.375rem}.cortex-message-attachments--user{justify-content:flex-end}.cortex-message-attachment{display:inline-flex;align-items:center;gap:.375rem;max-width:14rem;padding:.25rem .5rem;border:1px solid var(--cortex-color-border);border-radius:var(--cortex-radius);background:var(--cortex-color-surface-subtle);font-size:.75rem;color:var(--cortex-color-text-strong);cursor:pointer;transition:background .15s}.cortex-message-attachment:hover{background:var(--cortex-color-surface-muted)}.cortex-message-attachment__name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cortex-message-attachment__icon,.cortex-message-attachment__dl-icon{flex-shrink:0;width:.875rem;height:.875rem;color:var(--cortex-color-text-muted)}.cortex-debug-tool{--_accent: var(--cortex-color-border-strong);position:relative;width:100%;border-radius:10px;background:var(--cortex-color-surface-subtle);overflow:hidden}.cortex-debug-tool:before{content:"";position:absolute;inset-block:0;inset-inline-start:0;width:3px;background:var(--_accent);z-index:1;transition:background .2s}.cortex-debug-tool[data-state=complete]{--_accent: var(--cortex-color-success)}.cortex-debug-tool[data-state=error]{--_accent: var(--cortex-color-danger)}.cortex-debug-tool[data-state=awaiting-input],.cortex-debug-tool[data-state=input-streaming],.cortex-debug-tool[data-state=input-complete]{--_accent: light-dark(#d97706, #fbbf24)}.cortex-debug-tool[data-state=approval-requested],.cortex-debug-tool[data-state=approval-responded]{--_accent: light-dark(#7c3aed, #a78bfa)}.cortex-debug-tool__summary{list-style:none;cursor:pointer;-webkit-user-select:none;user-select:none;padding:.625rem .875rem .625rem 1.125rem}.cortex-debug-tool__summary::-webkit-details-marker{display:none}.cortex-debug-tool__header{display:flex;align-items:flex-start;gap:.75rem}.cortex-debug-tool__meta{flex:1;min-width:0}.cortex-debug-tool__title-row{display:flex;align-items:center;gap:.5rem;min-width:0}.cortex-debug-tool__name{font-weight:600;font-size:.8125rem;color:var(--cortex-color-text-heading);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;letter-spacing:-.01em}.cortex-debug-tool__id-row{margin-top:2px;font-size:.625rem;color:var(--cortex-color-text-muted);font-family:ui-monospace,SF Mono,Cascadia Code,monospace;word-break:break-all}.cortex-debug-tool__actions{display:flex;align-items:center;gap:.375rem;flex-shrink:0}.cortex-debug-tool__state{display:inline-flex;align-items:center;gap:5px;font-size:.6875rem;font-weight:500;padding:2px 8px;border-radius:4px;white-space:nowrap;font-family:system-ui,-apple-system,sans-serif}.cortex-debug-tool__state--success{color:var(--cortex-color-success);background:var(--cortex-color-success-surface)}.cortex-debug-tool__state--error{color:var(--cortex-color-danger);background:light-dark(#fef2f2,#450a0a)}.cortex-debug-tool__state--approval{color:light-dark(#7c3aed,#a78bfa);background:light-dark(#f5f3ff,#2e1065)}.cortex-debug-tool__state--pending{color:light-dark(#b45309,#fcd34d);background:light-dark(#fffbeb,#451a03)}.cortex-debug-tool__pulse{width:6px;height:6px;border-radius:50%;background:light-dark(#d97706,#fbbf24);animation:dbg-pulse 2s ease-in-out infinite}.cortex-debug-tool__pulse--violet{background:#8b5cf6}@keyframes dbg-pulse{0%,to{opacity:1}50%{opacity:.3}}.cortex-debug-tool__chevron{display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;border-radius:4px;color:var(--cortex-color-text-muted);transition:transform .2s}details[open]>summary .cortex-debug-tool__chevron{transform:rotate(180deg)}.cortex-debug-tool__body{padding:0 .875rem .75rem 1.125rem}.cortex-debug-tool__section:not(:first-child){border-top:1px solid var(--cortex-color-border);padding-top:.625rem;margin-top:.625rem}.cortex-debug-tool__section-bar{display:flex;align-items:center;gap:.375rem;margin-bottom:.375rem}.cortex-debug-tool__section-label{font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--cortex-color-text-muted);font-family:system-ui,-apple-system,sans-serif}.cortex-debug-tool__section-label--success{color:var(--cortex-color-success)}.cortex-debug-tool__section-label--error{color:var(--cortex-color-danger)}.cortex-debug-tool__section-label--approval{color:light-dark(#7c3aed,#a78bfa)}.cortex-debug-tool__section-lang{font-size:.5625rem;color:var(--cortex-color-border-strong);font-family:ui-monospace,SF Mono,monospace;text-transform:lowercase}.cortex-debug-tool__pre{margin:0;max-height:20rem;overflow:auto;padding:.625rem .75rem;border-radius:6px;background:var(--cortex-color-surface);font-size:.75rem;line-height:1.3rem;font-family:ui-monospace,SF Mono,Cascadia Code,monospace;white-space:pre;overflow-wrap:break-word}.cortex-debug-tool__tree{max-height:16rem;overflow:auto;padding:.625rem .75rem;border-radius:6px;background:var(--cortex-color-surface)}.cortex-debug-tool__error-pre{margin:0;max-height:16rem;overflow:auto;padding:.625rem .75rem;border-radius:6px;background:light-dark(#fef2f2,#450a0a);color:light-dark(#991b1b,#fca5a5);font-size:.75rem;line-height:1.3rem;font-family:ui-monospace,SF Mono,Cascadia Code,monospace;white-space:pre-wrap;word-break:break-word}.cortex-debug-tool__message{padding:.5rem .75rem;font-size:.75rem;color:var(--cortex-color-text-secondary);border-radius:6px;background:var(--cortex-color-surface)}.cortex-debug-tool__message--approval{color:light-dark(#5b21b6,#c4b5fd);background:light-dark(#faf5ff,#3b0764)}.cortex-debug-tool__section--success .cortex-debug-tool__tree{background:light-dark(#f0fdf4,#052e16)}.cortex-debug-tool__section--error .cortex-debug-tool__tree{background:light-dark(#fef2f2,#450a0a)}.cortex-tool-call-animated{display:block}.cortex-tool-pill{display:inline-flex;align-items:center;gap:.375rem;padding:.25rem 0;max-width:100%}.cortex-tool-pill__icon{position:relative;width:.75rem;height:.75rem;display:flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--cortex-color-text-muted)}.cortex-tool-pill__spinner{position:absolute;width:.625rem;height:.625rem;border:1.5px solid var(--cortex-color-border-strong);border-top-color:var(--cortex-color-text-muted);border-radius:9999px;opacity:0;transition:opacity .2s}.cortex-tool-pill__spinner--visible{opacity:1;animation:cortex-tool-spin .8s linear infinite}@keyframes cortex-tool-spin{to{transform:rotate(360deg)}}.cortex-tool-pill__svg{position:absolute;width:.75rem;height:.75rem;opacity:0;transform:scale(.6);transition:opacity .2s,transform .2s}.cortex-tool-pill__svg--visible{opacity:1;transform:scale(1)}.cortex-tool-pill__svg--check{color:var(--cortex-color-success)}.cortex-tool-pill__svg--error{color:var(--cortex-color-danger)}.cortex-tool-pill__title{font-size:.75rem;color:var(--cortex-color-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .3s}.cortex-tool-pill__title--error{color:var(--cortex-color-danger)}.cortex-tool-pill__title--pending{color:var(--cortex-color-text-muted);opacity:.6}.cortex-tool-pill__meta{font-size:.6875rem;color:var(--cortex-color-text-muted);opacity:.8;white-space:nowrap;font-variant-numeric:tabular-nums}.cortex-approval-card{display:block;max-width:min(100%,28rem);margin:.25rem 0;border:1px solid var(--cortex-color-border);border-radius:var(--cortex-radius);background:var(--cortex-color-surface);overflow:hidden}.cortex-approval-card--asking{border-color:color-mix(in oklab,var(--cortex-color-accent) 45%,var(--cortex-color-border));box-shadow:0 0 0 3px color-mix(in oklab,var(--cortex-color-accent) 10%,transparent)}.cortex-approval-card__head{display:flex;align-items:center;gap:.5rem;padding:.625rem .75rem 0;font-size:.75rem;font-weight:600;color:var(--cortex-color-accent)}.cortex-approval-card__sentence{margin:0;padding:.375rem .75rem .5rem;font-weight:600;color:var(--cortex-color-text-heading)}.cortex-approval-card__foot{display:flex;gap:.5rem;padding:.625rem .75rem;border-top:1px solid var(--cortex-color-border);background:var(--cortex-color-surface-subtle)}.cortex-approval-card__button{border:1px solid var(--cortex-color-border-strong);border-radius:calc(var(--cortex-radius) * .75);background:var(--cortex-color-surface);padding:.375rem .875rem;font:inherit;font-size:.8125rem;font-weight:500;color:var(--cortex-color-text-strong);cursor:pointer}.cortex-approval-card__button--approve{border-color:var(--cortex-color-accent);background:var(--cortex-color-accent);color:var(--cortex-color-primary-foreground)}.cortex-approval-card__line{display:flex;align-items:baseline;gap:.5rem;padding:.5rem .75rem;font-size:.8125rem;color:var(--cortex-color-text-secondary)}.cortex-approval-card__line .cortex-tool-pill__icon{flex-shrink:0}.cortex-approval-card__decision{font-weight:600;color:var(--cortex-color-text-strong)}.cortex-approval-card__summary{min-width:0;flex:1}.cortex-tool-fold{display:block;align-self:flex-start;text-align:start;border:0;background:none;padding:0 0 .25rem;margin-block-start:-.625rem;margin-inline-start:1.125rem;font:inherit;font-size:.75rem;color:var(--cortex-color-text-muted);cursor:pointer}.cortex-tool-fold:hover,.cortex-tool-fold:focus-visible{color:var(--cortex-color-text-secondary)}.cortex-client-tool-embed{border:1px solid var(--cortex-color-border-strong);border-radius:12px;background:var(--cortex-color-surface);overflow:hidden;max-inline-size:480px}.cortex-client-tool-embed__bar{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 12px;border-block-end:1px solid var(--cortex-color-border-strong);font-size:12px;color:var(--cortex-color-text-muted)}.cortex-client-tool-embed__cancel{border:0;background:none;padding:2px 4px;font:inherit;color:var(--cortex-color-text-muted);cursor:pointer}.cortex-client-tool-embed__cancel:hover{color:var(--cortex-color-danger)}.cortex-client-tool-embed__frame{display:block;inline-size:100%;block-size:420px;border:0;background:var(--cortex-color-surface)}.cortex-client-tool-embed__status{display:flex;align-items:center;gap:8px;padding:20px 16px;font-size:13px;color:var(--cortex-color-text-muted)}.cortex-client-tool-embed__retry{border:1px solid var(--cortex-color-border-strong);border-radius:8px;background:none;padding:4px 10px;font:inherit;font-size:12px;color:inherit;cursor:pointer}.cortex-client-tool-embed-dialog{border:0;padding:0;background:none;inline-size:min(560px,100vw - 48px);max-inline-size:none}.cortex-client-tool-embed-dialog::backdrop{background:#00000073}.cortex-client-tool-embed-dialog .cortex-client-tool-embed{inline-size:100%;max-inline-size:none;box-shadow:0 24px 64px #0000004d}.cortex-client-tool-embed-dialog .cortex-client-tool-embed__frame{block-size:min(70dvh,560px)}.cortex-location-input{border:1px solid var(--cortex-color-border-strong);border-radius:12px;background:var(--cortex-color-surface);overflow:hidden;max-inline-size:480px}.cortex-location-input--settled{display:flex;gap:10px;border-color:var(--cortex-color-border);background:var(--cortex-color-surface-subtle)}.cortex-location-input__map{position:relative;block-size:11rem;background:var(--cortex-color-surface-muted)}.cortex-location-input__map--still{flex:none;inline-size:120px;block-size:84px}.cortex-location-input__canvas{block-size:100%}.cortex-location-input__still-failed{display:flex;align-items:center;justify-content:center;block-size:100%;padding:0 8px;font-size:11px;text-align:center;color:var(--cortex-color-text-muted)}.cortex-location-input__locate{position:absolute;inset-inline-end:10px;inset-block-start:10px;z-index:1001;display:inline-flex;align-items:center;justify-content:center;inline-size:30px;block-size:30px;border:1px solid var(--cortex-color-border-strong);border-radius:8px;background:var(--cortex-color-surface);color:var(--cortex-color-text-strong);box-shadow:0 1px 3px #0003;cursor:pointer}.cortex-location-input__locate svg{inline-size:15px;block-size:15px}.cortex-location-input__locate:disabled{opacity:.45;cursor:default}.cortex-location-input__foot{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 12px;border-block-start:1px solid var(--cortex-color-border-strong);font-size:12px}.cortex-location-input__hint{display:inline-flex;align-items:center;gap:6px;min-inline-size:0;color:var(--cortex-color-text-muted)}.cortex-location-input__hint--failed{color:var(--cortex-color-danger)}.cortex-location-input__spinner{inline-size:.625rem;block-size:.625rem;border:1.5px solid var(--cortex-color-border-strong);border-top-color:var(--cortex-color-text-muted);border-radius:9999px;animation:cortex-tool-spin .8s linear infinite}.cortex-location-input__coords{font-family:var(--cortex-font-mono);font-size:.75rem;color:var(--cortex-color-text-secondary);direction:ltr;unicode-bidi:isolate}.cortex-location-input__actions{display:flex;align-items:center;gap:8px}.cortex-location-input__skip{border:0;background:none;padding:2px 4px;font:inherit;color:var(--cortex-color-text-muted);cursor:pointer}.cortex-location-input__skip:hover{color:var(--cortex-color-danger)}.cortex-location-input__skip:disabled{opacity:.45;cursor:default}.cortex-location-input__send{border:1px solid var(--cortex-color-primary);border-radius:8px;background:var(--cortex-color-primary);padding:4px 10px;font:inherit;font-size:12px;color:var(--cortex-color-primary-foreground);cursor:pointer}.cortex-location-input__send:disabled{opacity:.45;cursor:default}.cortex-location-input__body{display:flex;flex-direction:column;justify-content:center;gap:2px;min-inline-size:0;padding-block:8px;padding-inline-end:12px}.cortex-location-input__title{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--cortex-color-text-strong)}.cortex-location-input__title svg{inline-size:13px;block-size:13px;color:var(--cortex-color-success)}.cortex-reasoning-animated{display:block}.cortex-subtle-activity{display:flex;align-items:center;gap:.375rem;padding:.25rem 0;width:fit-content}.cortex-subtle-activity__dots{display:flex;align-items:center;gap:3px}.cortex-subtle-activity__dot{width:3px;height:3px;border-radius:9999px;background:var(--cortex-color-accent);animation:cortex-subtle-dot-pulse 1.4s ease-in-out infinite}.cortex-subtle-activity__dot--d1{animation-delay:.2s}.cortex-subtle-activity__dot--d2{animation-delay:.4s}@keyframes cortex-subtle-dot-pulse{0%,to{opacity:.3;transform:scale(.8)}40%{opacity:1;transform:scale(1.3)}}.cortex-subtle-activity__label-mask{overflow:hidden;position:relative;height:1.1em}.cortex-subtle-activity__label{display:block;font-size:.75rem;color:var(--cortex-color-text-muted);white-space:nowrap;line-height:1.1em}.cortex-subtle-activity__label--idle,.cortex-subtle-activity__label--entering{opacity:1;transform:translateY(0);transition:opacity .3s ease,transform .3s ease}.cortex-subtle-activity__label--exiting{opacity:0;transform:translateY(-6px);transition:opacity .3s ease,transform .3s ease}.cortex-subtle-activity__label--enter-start{opacity:0;transform:translateY(6px);transition:none}.cortex-attachment-queue{display:flex;flex-wrap:wrap;gap:.375rem;margin-bottom:.5rem}.cortex-attachment-chip{display:inline-flex;align-items:center;gap:.375rem;max-width:14rem;padding-block:.25rem;padding-inline:.5rem .375rem;border:1px solid var(--cortex-color-border);border-radius:var(--cortex-radius);background:var(--cortex-color-surface-subtle);font-size:.75rem;color:var(--cortex-color-text-strong)}.cortex-attachment-chip--error{align-items:flex-start;max-width:100%;border-color:var(--cortex-color-danger-border);background:var(--cortex-color-danger-surface);color:var(--cortex-color-danger)}.cortex-attachment-chip__icon,.cortex-attachment-chip__spinner{flex-shrink:0;width:.875rem;height:.875rem;color:var(--cortex-color-text-muted)}.cortex-attachment-chip__spinner{animation:cortex-attachment-spin .8s linear infinite}.cortex-attachment-chip__spinner-track{opacity:.25}@keyframes cortex-attachment-spin{to{transform:rotate(360deg)}}.cortex-attachment-chip__text{display:grid;min-width:0;text-align:start}.cortex-attachment-chip__reason{font-size:.71875rem;opacity:.9}.cortex-attachment-chip--error .cortex-attachment-chip__icon{color:currentColor}.cortex-attachment-chip__name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cortex-attachment-chip__remove{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:1rem;height:1rem;padding:0;border:0;border-radius:3px;background:transparent;color:currentColor;opacity:.6;cursor:pointer}.cortex-attachment-chip__remove:hover{opacity:1;background:var(--cortex-color-hover)}.cortex-attachment-chip__remove svg{width:.75rem;height:.75rem}.cortex-token-usage{direction:ltr;display:flex;flex-direction:column;margin-top:.375rem;font-family:var(--cortex-font-mono);font-size:.6875rem;line-height:1.4;color:var(--cortex-color-text-muted);-webkit-user-select:none;user-select:none}html[dir=rtl] .cortex-token-usage__summary{align-self:end}html[dir=ltr] .cortex-token-usage__summary{align-self:start}.cortex-token-usage__summary{display:inline-flex;align-items:center;gap:.625rem;padding:.3125rem .625rem;border:1px solid transparent;border-radius:6px;background:transparent;cursor:pointer;transition:background .15s ease,border-color .15s ease;font:inherit;color:inherit;letter-spacing:.01em}.cortex-token-usage__summary:hover{background:var(--cortex-color-surface-subtle);border-color:var(--cortex-color-border)}.cortex-token-usage__summary{flex-wrap:wrap;max-width:100%;text-align:start}.cortex-token-usage__total-number{font-weight:600;font-variant-numeric:tabular-nums;color:var(--cortex-color-text-secondary)}.cortex-token-usage__total-label{margin-inline-start:3px;color:var(--cortex-color-text-muted);font-weight:400;letter-spacing:.03em}.cortex-token-usage__model{color:var(--cortex-color-border-strong);font-weight:400;font-size:.5625rem;letter-spacing:.02em;min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cortex-token-usage__pills{display:inline-flex;align-items:center;gap:.5rem}.cortex-token-usage__pill{display:inline-flex;align-items:center;gap:4px;font-variant-numeric:tabular-nums;color:var(--cortex-color-text-muted)}.cortex-token-usage__dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}.cortex-token-usage__dot--input{background:light-dark(#ea580c,#fb923c);box-shadow:0 0 0 2px #ea580c1a}.cortex-token-usage__dot--output{background:light-dark(#4f46e5,#818cf8);box-shadow:0 0 0 2px #4f46e51a}.cortex-token-usage__cache-badge{font-size:.5625rem;font-weight:600;color:var(--cortex-color-success);background:var(--cortex-color-success-surface);padding:1px 6px;border-radius:3px;font-family:system-ui,-apple-system,sans-serif}.cortex-token-usage__chevron{color:var(--cortex-color-border-strong);transition:transform .25s cubic-bezier(.4,0,.2,1);flex-shrink:0}.cortex-token-usage--expanded .cortex-token-usage__chevron{transform:rotate(180deg)}.cortex-token-usage__details{display:grid;grid-template-rows:0fr;transition:grid-template-rows .25s cubic-bezier(.4,0,.2,1),opacity .2s ease,margin .2s ease;opacity:0;margin-top:0}.cortex-token-usage__details-inner{overflow:hidden}.cortex-token-usage--expanded .cortex-token-usage__details{grid-template-rows:1fr;opacity:1;margin-top:.375rem}.cortex-token-usage__columns{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--cortex-color-border);border-radius:8px;overflow:hidden}.cortex-token-usage__col{background:var(--cortex-color-surface-subtle);padding:.5rem .625rem}.cortex-token-usage__col-header{display:flex;align-items:center;gap:.375rem;margin-bottom:.375rem}.cortex-token-usage__col-label{font-weight:600;font-size:.5625rem;text-transform:uppercase;letter-spacing:.06em;color:var(--cortex-color-text-secondary);font-family:system-ui,-apple-system,sans-serif}.cortex-token-usage__col-total{margin-inline-start:auto;font-weight:700;font-variant-numeric:tabular-nums;color:var(--cortex-color-text-secondary)}.cortex-token-usage__rows{display:flex;flex-direction:column;gap:1px}.cortex-token-usage__row{display:flex;align-items:baseline;justify-content:space-between;padding:2px 0;padding-inline-start:calc(6px + .375rem)}.cortex-token-usage__row-label{color:var(--cortex-color-text-muted);font-size:.625rem}.cortex-token-usage__row-value{font-variant-numeric:tabular-nums;color:var(--cortex-color-text-secondary);font-weight:500}.cortex-token-usage__cache-bar-row{display:flex;align-items:center;gap:.5rem;margin-top:.5rem;padding-inline-start:calc(6px + .375rem)}.cortex-token-usage__cache-bar{flex:1;height:3px;border-radius:2px;background:var(--cortex-color-border);overflow:hidden}.cortex-token-usage__cache-fill{height:100%;border-radius:2px;background:linear-gradient(90deg,#10b981,var(--cortex-color-success));transition:width .4s cubic-bezier(.4,0,.2,1)}.cortex-token-usage__cache-label{font-size:.5625rem;font-weight:600;color:var(--cortex-color-success);white-space:nowrap;font-family:system-ui,-apple-system,sans-serif}.cortex-llm-inspector{direction:ltr;display:flex;flex-direction:column;margin-top:.375rem;font-family:var(--cortex-font-mono);font-size:.6875rem;line-height:1.4;color:var(--cortex-color-text-muted);-webkit-user-select:none;user-select:none}html[dir=rtl] .cortex-llm-inspector__trigger{align-self:end}html[dir=ltr] .cortex-llm-inspector__trigger{align-self:start}.cortex-llm-inspector__trigger{display:inline-flex;align-items:center;gap:.5rem;padding:.3125rem .625rem;border:1px solid transparent;border-radius:6px;background:transparent;cursor:pointer;transition:background .15s ease,border-color .15s ease;font:inherit;color:inherit;letter-spacing:.01em}.cortex-llm-inspector__trigger:hover{background:var(--cortex-color-surface-subtle);border-color:var(--cortex-color-border)}.cortex-llm-inspector__icon{color:var(--cortex-color-text-muted);flex-shrink:0}.cortex-llm-inspector__loading{color:var(--cortex-color-border-strong);font-style:italic}.cortex-llm-inspector__badge{display:inline-flex;align-items:center;justify-content:center;min-width:1.25rem;height:1.25rem;padding:0 .35rem;border-radius:9999px;background:var(--cortex-color-border);color:var(--cortex-color-text-secondary);font-size:.5625rem;font-weight:700}.cortex-llm-inspector__chevron{color:var(--cortex-color-border-strong);transition:transform .25s cubic-bezier(.4,0,.2,1);flex-shrink:0}.cortex-llm-inspector--open .cortex-llm-inspector__chevron{transform:rotate(180deg)}.cortex-llm-inspector__panel-wrapper{display:grid;grid-template-rows:0fr;transition:grid-template-rows .25s cubic-bezier(.4,0,.2,1),opacity .2s ease,margin .2s ease;opacity:0;margin-top:0}.cortex-llm-inspector__panel-inner{overflow:hidden}.cortex-llm-inspector--open .cortex-llm-inspector__panel-wrapper{grid-template-rows:1fr;opacity:1;margin-top:.375rem}.cortex-llm-inspector__panel{display:flex;flex-direction:column;gap:.375rem}.cortex-llm-inspector__empty{padding:.625rem;color:var(--cortex-color-text-muted);font-style:italic}.cortex-llm-inspector__step{border-radius:8px;background:var(--cortex-color-surface-subtle);overflow:hidden;transition:box-shadow .2s ease}.cortex-llm-inspector__step--expanded{box-shadow:0 0 0 1px var(--cortex-color-border)}.cortex-llm-inspector__step-header{display:flex;align-items:center;gap:.5rem;width:100%;padding:.5rem .625rem;border:none;background:transparent;cursor:pointer;font:inherit;color:inherit;text-align:start;transition:background .15s ease}.cortex-llm-inspector__step-header:hover{background:#00000005}.cortex-llm-inspector__step-label{font-weight:600;color:var(--cortex-color-text-secondary);white-space:nowrap;font-family:system-ui,-apple-system,sans-serif}.cortex-llm-inspector__step-metrics{display:inline-flex;align-items:center;gap:.625rem;margin-inline-start:auto;font-variant-numeric:tabular-nums}.cortex-llm-inspector__metric{display:inline-flex;align-items:center;gap:3px}.cortex-llm-inspector__dot{width:5px;height:5px;border-radius:50%;flex-shrink:0}.cortex-llm-inspector__dot--input{background:light-dark(#ea580c,#fb923c);box-shadow:0 0 0 1.5px #ea580c1f}.cortex-llm-inspector__dot--output{background:light-dark(#4f46e5,#818cf8);box-shadow:0 0 0 1.5px #4f46e51f}.cortex-llm-inspector__cache-pct{font-size:.5625rem;font-weight:600;color:var(--cortex-color-success);background:var(--cortex-color-success-surface);padding:1px 5px;border-radius:3px;font-family:system-ui,-apple-system,sans-serif}.cortex-llm-inspector__step-chevron{color:var(--cortex-color-border-strong);transition:transform .2s ease;flex-shrink:0}.cortex-llm-inspector__step--expanded .cortex-llm-inspector__step-chevron{transform:rotate(180deg)}.cortex-llm-inspector__step-body-wrapper{display:grid;grid-template-rows:0fr;transition:grid-template-rows .25s cubic-bezier(.4,0,.2,1),opacity .2s ease;opacity:0}.cortex-llm-inspector__step-body-inner{overflow:hidden}.cortex-llm-inspector__step--expanded .cortex-llm-inspector__step-body-wrapper{grid-template-rows:1fr;opacity:1}.cortex-llm-inspector__step-body{padding:0 .625rem .625rem;display:flex;flex-direction:column;gap:.5rem}.cortex-llm-inspector__usage-rows{display:flex;flex-direction:column;border-radius:6px;overflow:hidden;background:var(--cortex-color-border);gap:1px}.cortex-llm-inspector__usage-row{display:flex;align-items:baseline;gap:.5rem;padding:.375rem .625rem;background:var(--cortex-color-surface);flex-wrap:wrap}.cortex-llm-inspector__usage-row--total{background:light-dark(#fafbfc,#141414)}.cortex-llm-inspector__usage-lbl{font-size:.5625rem;text-transform:uppercase;letter-spacing:.05em;color:var(--cortex-color-text-muted);font-weight:600;width:3.25rem;flex-shrink:0;font-family:system-ui,-apple-system,sans-serif}.cortex-llm-inspector__usage-val{font-variant-numeric:tabular-nums;font-weight:600;color:var(--cortex-color-text-secondary);min-width:3rem}.cortex-llm-inspector__usage-row--total .cortex-llm-inspector__usage-val{font-weight:700;color:var(--cortex-color-text-heading)}.cortex-llm-inspector__usage-detail{color:var(--cortex-color-border-strong);font-size:.5625rem;margin-inline-start:auto}.cortex-llm-inspector__tabs{display:flex;gap:0;border-bottom:1px solid var(--cortex-color-border)}.cortex-llm-inspector__tab{padding:.375rem .75rem;border:none;background:transparent;cursor:pointer;font:inherit;color:var(--cortex-color-text-muted);font-weight:500;position:relative;transition:color .15s ease;font-family:system-ui,-apple-system,sans-serif}.cortex-llm-inspector__tab:hover{color:var(--cortex-color-text-secondary)}.cortex-llm-inspector__tab--active{color:var(--cortex-color-text-heading);font-weight:600}.cortex-llm-inspector__tab--active:after{content:"";position:absolute;inset-inline:0;bottom:-1px;height:2px;background:var(--cortex-color-text-heading);border-radius:1px 1px 0 0}.cortex-llm-inspector__json-pane{position:relative;max-height:24rem;overflow:auto;padding:.625rem;background:var(--cortex-color-surface);border-radius:6px}.cortex-llm-inspector__json-copy{position:sticky;top:0;float:inline-end;z-index:1}.cortex-json-tree{display:block;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.75rem;line-height:1.25rem;-webkit-user-select:text;user-select:text;white-space:pre-wrap;word-break:break-word}.cortex-json-tree__indent{padding-inline-start:1.25em;border-inline-start:1px solid var(--cortex-color-border);margin-inline-start:.3em}.cortex-json-tree__line{position:relative}.cortex-json-tree__toggle{cursor:pointer;-webkit-user-select:none;user-select:none}.cortex-json-tree__toggle:hover .cortex-json-tree__arrow{color:var(--cortex-color-text)}.cortex-json-tree__arrow{display:inline-block;width:1em;text-align:center;color:var(--cortex-color-text-muted);font-size:.525rem;transition:transform .15s ease;vertical-align:middle}.cortex-json-tree__arrow--collapsed{transform:rotate(-90deg)}.cortex-json-tree__bracket{color:var(--cortex-color-text-secondary)}.cortex-json-tree__key{color:light-dark(#6366f1,#818cf8)}.cortex-json-tree__colon{color:var(--cortex-color-text-secondary)}.cortex-json-tree__comma{color:var(--cortex-color-text-muted)}.cortex-json-tree__string{color:var(--cortex-color-success)}.cortex-json-tree__number{color:light-dark(#2563eb,#60a5fa)}.cortex-json-tree__boolean{color:light-dark(#d97706,#fbbf24)}.cortex-json-tree__null{color:var(--cortex-color-text-muted);font-style:italic}.cortex-json-tree__collapsed-hint{display:inline-block;padding:0 .4em;margin:0 .15em;font-size:.625rem;line-height:1.5;color:var(--cortex-color-text-muted);background:var(--cortex-color-surface-subtle);border:1px solid var(--cortex-color-border);border-radius:3px;font-style:italic;cursor:pointer;-webkit-user-select:none;user-select:none;vertical-align:middle}.cortex-json-tree__collapsed-hint:hover{color:var(--cortex-color-text-secondary);border-color:var(--cortex-color-border-strong);background:var(--cortex-color-surface-muted)}.cortex-copy-btn{display:inline-flex;align-items:center}.cortex-copy-btn__button{display:inline-flex;align-items:center;justify-content:center;width:1.375rem;height:1.375rem;padding:0;border:none;border-radius:3px;background:transparent;color:var(--cortex-color-text-muted);cursor:pointer;opacity:0;transition:opacity .15s ease,color .15s ease,background .15s ease}:hover>cortex-copy-button .cortex-copy-btn__button,:hover>.cortex-copy-btn .cortex-copy-btn__button,.cortex-copy-btn__button:hover,.cortex-copy-btn__button:focus-visible{opacity:1}.cortex-copy-btn__button:hover{background:var(--cortex-color-hover);color:var(--cortex-color-text)}.cortex-copy-btn__button--copied{opacity:1;color:var(--cortex-color-success);pointer-events:none}.cortex-copy-btn__button--copied:hover{color:var(--cortex-color-success);background:transparent}.cortex-copy-btn__icon{flex-shrink:0}.cortex-copy-btn__icon--check{animation:cortex-copy-pop .25s cubic-bezier(.34,1.56,.64,1) forwards}@keyframes cortex-copy-pop{0%{transform:scale(.6);opacity:0}to{transform:scale(1);opacity:1}}@media(prefers-reduced-motion:reduce){.cortex-widget *,.cortex-widget *:before,.cortex-widget *:after,.cortex-widget *::backdrop{animation-duration:.01ms!important;animation-delay:0s!important;animation-iteration-count:1!important;transition-duration:.01ms!important;transition-delay:0s!important}}\n']
|
|
12195
12719
|
}]
|
|
12196
12720
|
}],
|
|
12197
12721
|
propDecorators: {
|