@fusioni/client-sdk 1.1.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/LICENSE +21 -0
- package/README.md +389 -0
- package/dist/assets/logo-base64.d.ts +2 -0
- package/dist/assets/logo-base64.d.ts.map +1 -0
- package/dist/browser.d.ts +28 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/components/AudioRecorder.d.ts +9 -0
- package/dist/components/AudioRecorder.d.ts.map +1 -0
- package/dist/components/ChatInput.d.ts +6 -0
- package/dist/components/ChatInput.d.ts.map +1 -0
- package/dist/components/ChatLoader.d.ts +3 -0
- package/dist/components/ChatLoader.d.ts.map +1 -0
- package/dist/components/ChatPanel.d.ts +13 -0
- package/dist/components/ChatPanel.d.ts.map +1 -0
- package/dist/components/ChatWidget.d.ts +5 -0
- package/dist/components/ChatWidget.d.ts.map +1 -0
- package/dist/components/ConfirmationDialog.d.ts +14 -0
- package/dist/components/ConfirmationDialog.d.ts.map +1 -0
- package/dist/components/ConversationList.d.ts +4 -0
- package/dist/components/ConversationList.d.ts.map +1 -0
- package/dist/components/FileUpload.d.ts +11 -0
- package/dist/components/FileUpload.d.ts.map +1 -0
- package/dist/components/FloatingButton.d.ts +16 -0
- package/dist/components/FloatingButton.d.ts.map +1 -0
- package/dist/components/ImageGallery.d.ts +14 -0
- package/dist/components/ImageGallery.d.ts.map +1 -0
- package/dist/components/LanguageSwitcher.d.ts +10 -0
- package/dist/components/LanguageSwitcher.d.ts.map +1 -0
- package/dist/components/Map.d.ts +14 -0
- package/dist/components/Map.d.ts.map +1 -0
- package/dist/components/Map.example.d.ts +4 -0
- package/dist/components/Map.example.d.ts.map +1 -0
- package/dist/components/Message.d.ts +4 -0
- package/dist/components/Message.d.ts.map +1 -0
- package/dist/components/MessageList.d.ts +25 -0
- package/dist/components/MessageList.d.ts.map +1 -0
- package/dist/components/PaginatedGalleryStrip.d.ts +20 -0
- package/dist/components/PaginatedGalleryStrip.d.ts.map +1 -0
- package/dist/components/Spotlight.d.ts +7 -0
- package/dist/components/Spotlight.d.ts.map +1 -0
- package/dist/components/UrlPreview.d.ts +20 -0
- package/dist/components/UrlPreview.d.ts.map +1 -0
- package/dist/fusioni-sdk.umd.js +41642 -0
- package/dist/fusioni-sdk.umd.js.map +1 -0
- package/dist/hooks/useChatState.d.ts +26 -0
- package/dist/hooks/useChatState.d.ts.map +1 -0
- package/dist/hooks/useSSE.d.ts +2 -0
- package/dist/hooks/useSSE.d.ts.map +1 -0
- package/dist/hooks/useTheme.d.ts +8 -0
- package/dist/hooks/useTheme.d.ts.map +1 -0
- package/dist/hooks/useTranslation.d.ts +12 -0
- package/dist/hooks/useTranslation.d.ts.map +1 -0
- package/dist/i18n/el.d.ts +90 -0
- package/dist/i18n/el.d.ts.map +1 -0
- package/dist/i18n/en.d.ts +90 -0
- package/dist/i18n/en.d.ts.map +1 -0
- package/dist/i18n/index.d.ts +190 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/index.css +1 -0
- package/dist/index.d.ts +495 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.esm.css +1 -0
- package/dist/index.esm.js +6458 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +6492 -0
- package/dist/index.js.map +1 -0
- package/dist/services/ApiClient.d.ts +17 -0
- package/dist/services/ApiClient.d.ts.map +1 -0
- package/dist/services/ConversationService.d.ts +45 -0
- package/dist/services/ConversationService.d.ts.map +1 -0
- package/dist/services/MessageService.d.ts +18 -0
- package/dist/services/MessageService.d.ts.map +1 -0
- package/dist/services/PipelineService.d.ts +16 -0
- package/dist/services/PipelineService.d.ts.map +1 -0
- package/dist/services/SDKClientService.d.ts +31 -0
- package/dist/services/SDKClientService.d.ts.map +1 -0
- package/dist/test.d.ts +4 -0
- package/dist/test.d.ts.map +1 -0
- package/dist/types/index.d.ts +163 -0
- package/dist/types/index.d.ts.map +1 -0
- package/package.json +77 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,495 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import React__default from 'react';
|
|
3
|
+
|
|
4
|
+
interface Pagination {
|
|
5
|
+
page: number;
|
|
6
|
+
size: number;
|
|
7
|
+
total_items?: number;
|
|
8
|
+
total_pages?: number;
|
|
9
|
+
first?: boolean;
|
|
10
|
+
last?: boolean;
|
|
11
|
+
}
|
|
12
|
+
interface FusioniPayload<T> {
|
|
13
|
+
body?: T[];
|
|
14
|
+
pagination?: Pagination;
|
|
15
|
+
}
|
|
16
|
+
interface Conversation {
|
|
17
|
+
id?: string | null;
|
|
18
|
+
agency_id: string;
|
|
19
|
+
title: string;
|
|
20
|
+
created?: Date | null;
|
|
21
|
+
updated?: Date | null;
|
|
22
|
+
messages?: FusioniMemoryMessage[] | null;
|
|
23
|
+
}
|
|
24
|
+
interface FusioniMemoryMessage {
|
|
25
|
+
id?: string;
|
|
26
|
+
agency_id: string;
|
|
27
|
+
conversation_id?: string;
|
|
28
|
+
mem_type: string;
|
|
29
|
+
has_error?: boolean;
|
|
30
|
+
role: 'user' | 'assistant' | 'system';
|
|
31
|
+
keywords: string[] | null;
|
|
32
|
+
thoughts: string | null;
|
|
33
|
+
created: Date;
|
|
34
|
+
content: string;
|
|
35
|
+
loading: boolean;
|
|
36
|
+
shouldAnimate: boolean;
|
|
37
|
+
extra_data?: {
|
|
38
|
+
image?: string;
|
|
39
|
+
image_ref?: string;
|
|
40
|
+
image_base64?: boolean;
|
|
41
|
+
audio_ref?: string;
|
|
42
|
+
audio_base64?: boolean;
|
|
43
|
+
duration?: number;
|
|
44
|
+
coordinates?: {
|
|
45
|
+
lat: number;
|
|
46
|
+
lon: number;
|
|
47
|
+
zoom?: number;
|
|
48
|
+
};
|
|
49
|
+
map?: {
|
|
50
|
+
lat: string | number;
|
|
51
|
+
lng: string | number;
|
|
52
|
+
zoom?: string | number;
|
|
53
|
+
};
|
|
54
|
+
/** Assistant document page screenshots (opens shared image gallery) */
|
|
55
|
+
document_images?: string[];
|
|
56
|
+
[key: string]: any;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
interface PipelineStep {
|
|
60
|
+
name: string | null;
|
|
61
|
+
agent_id: string | null;
|
|
62
|
+
service_id: string | null;
|
|
63
|
+
step_type: string | null;
|
|
64
|
+
}
|
|
65
|
+
interface Pipeline {
|
|
66
|
+
id?: string;
|
|
67
|
+
name: string;
|
|
68
|
+
description: string;
|
|
69
|
+
code?: string;
|
|
70
|
+
agency_id?: string | null;
|
|
71
|
+
steps: PipelineStep[] | null;
|
|
72
|
+
capability_ids: string[];
|
|
73
|
+
active: boolean;
|
|
74
|
+
}
|
|
75
|
+
interface PipelineRequest {
|
|
76
|
+
conversation_id: string;
|
|
77
|
+
agency_id: string;
|
|
78
|
+
inp?: string | null;
|
|
79
|
+
image?: string | ArrayBuffer | null;
|
|
80
|
+
audio?: string | ArrayBuffer | null;
|
|
81
|
+
message_id?: string | null;
|
|
82
|
+
agent_id?: string | null;
|
|
83
|
+
context?: any | null;
|
|
84
|
+
}
|
|
85
|
+
interface PipelineResponse {
|
|
86
|
+
answer: string[];
|
|
87
|
+
context_data: any;
|
|
88
|
+
thoughts: string[];
|
|
89
|
+
messages: FusioniMemoryMessage[];
|
|
90
|
+
}
|
|
91
|
+
interface FusioniSDKConfig {
|
|
92
|
+
apiBaseUrl: string;
|
|
93
|
+
agencyId: string;
|
|
94
|
+
accessToken?: string;
|
|
95
|
+
theme?: 'light' | 'dark' | 'auto';
|
|
96
|
+
position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';
|
|
97
|
+
primaryColor?: string;
|
|
98
|
+
showConversationList?: boolean;
|
|
99
|
+
enableAudioRecording?: boolean;
|
|
100
|
+
enableFileUpload?: boolean;
|
|
101
|
+
maxFileSize?: number;
|
|
102
|
+
allowedFileTypes?: string[];
|
|
103
|
+
language?: 'en' | 'el';
|
|
104
|
+
buttonVariant?: 'minimal' | 'glass' | 'solid';
|
|
105
|
+
}
|
|
106
|
+
interface ChatWidgetProps {
|
|
107
|
+
config: FusioniSDKConfig;
|
|
108
|
+
onMessageSent?: (message: FusioniMemoryMessage) => void;
|
|
109
|
+
onMessageReceived?: (message: FusioniMemoryMessage) => void;
|
|
110
|
+
onConversationCreated?: (conversation: Conversation) => void;
|
|
111
|
+
onConversationDeleted?: (conversationId: string) => void;
|
|
112
|
+
onError?: (error: Error) => void;
|
|
113
|
+
}
|
|
114
|
+
interface ConfirmationResult {
|
|
115
|
+
confirmed: 'Confirmed' | 'NotConfirmed';
|
|
116
|
+
key?: string;
|
|
117
|
+
}
|
|
118
|
+
interface MessageProps {
|
|
119
|
+
message: FusioniMemoryMessage;
|
|
120
|
+
showThoughts?: boolean;
|
|
121
|
+
fontSize?: string;
|
|
122
|
+
onDelete?: (messageId: string) => void;
|
|
123
|
+
onConfirmation?: (result: ConfirmationResult) => void;
|
|
124
|
+
enableButtons?: boolean;
|
|
125
|
+
streamMessages?: string[];
|
|
126
|
+
apiBaseUrl?: string;
|
|
127
|
+
apiKey?: string;
|
|
128
|
+
agencyId: string;
|
|
129
|
+
currentLanguage?: 'en' | 'el';
|
|
130
|
+
/** Opens full-screen gallery (fusioni-web parity with `ImageGalleryComponent`) */
|
|
131
|
+
onOpenGallery?: (payload: {
|
|
132
|
+
images: string[];
|
|
133
|
+
index: number;
|
|
134
|
+
}) => void;
|
|
135
|
+
}
|
|
136
|
+
interface ConversationListProps {
|
|
137
|
+
conversations: Conversation[];
|
|
138
|
+
selectedConversationId?: string;
|
|
139
|
+
onSelectConversation: (conversation: Conversation) => void;
|
|
140
|
+
onDeleteConversation: (conversationId: string) => void;
|
|
141
|
+
onCreateConversation: () => void;
|
|
142
|
+
searchQuery?: string;
|
|
143
|
+
onSearchChange?: (query: string) => void;
|
|
144
|
+
isOpen?: boolean;
|
|
145
|
+
currentLanguage?: 'en' | 'el';
|
|
146
|
+
}
|
|
147
|
+
interface ChatInputProps {
|
|
148
|
+
onSendMessage: (content: string, image?: string, audio?: string) => void;
|
|
149
|
+
onFileUpload: (file: File) => Promise<string>;
|
|
150
|
+
disabled?: boolean;
|
|
151
|
+
placeholder?: string;
|
|
152
|
+
enableAudioRecording?: boolean;
|
|
153
|
+
enableFileUpload?: boolean;
|
|
154
|
+
maxFileSize?: number;
|
|
155
|
+
allowedFileTypes?: string[];
|
|
156
|
+
currentLanguage?: 'en' | 'el';
|
|
157
|
+
}
|
|
158
|
+
interface ChatEvent {
|
|
159
|
+
type: 'message_sent' | 'message_received' | 'conversation_created' | 'conversation_deleted' | 'error';
|
|
160
|
+
data: any;
|
|
161
|
+
timestamp: Date;
|
|
162
|
+
}
|
|
163
|
+
type MessageRole = 'user' | 'assistant' | 'system';
|
|
164
|
+
type Theme = 'light' | 'dark' | 'auto';
|
|
165
|
+
type Position = 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';
|
|
166
|
+
|
|
167
|
+
declare const ChatWidget: React__default.FC<ChatWidgetProps>;
|
|
168
|
+
|
|
169
|
+
interface FloatingButtonProps {
|
|
170
|
+
isOpen: boolean;
|
|
171
|
+
onClick: () => void;
|
|
172
|
+
position?: Position;
|
|
173
|
+
primaryColor?: string;
|
|
174
|
+
buttonRef?: React__default.RefObject<HTMLButtonElement>;
|
|
175
|
+
showNotification?: boolean;
|
|
176
|
+
notificationCount?: number;
|
|
177
|
+
variant?: 'minimal' | 'glass' | 'solid';
|
|
178
|
+
shouldDisplay?: boolean;
|
|
179
|
+
}
|
|
180
|
+
declare const FloatingButton: React__default.FC<FloatingButtonProps>;
|
|
181
|
+
|
|
182
|
+
interface ChatPanelProps {
|
|
183
|
+
isOpen: boolean;
|
|
184
|
+
onClose: () => void;
|
|
185
|
+
position?: Position;
|
|
186
|
+
isFullscreen?: boolean;
|
|
187
|
+
floatingButtonRef?: React__default.RefObject<HTMLButtonElement>;
|
|
188
|
+
children: React__default.ReactNode;
|
|
189
|
+
}
|
|
190
|
+
declare const ChatPanel: React__default.FC<ChatPanelProps>;
|
|
191
|
+
|
|
192
|
+
declare const ConversationList: React__default.FC<ConversationListProps>;
|
|
193
|
+
|
|
194
|
+
interface MessageListProps {
|
|
195
|
+
messages: FusioniMemoryMessage[];
|
|
196
|
+
streamMessages: string[];
|
|
197
|
+
showThoughts?: boolean;
|
|
198
|
+
onDeleteMessage?: (messageId: string) => void;
|
|
199
|
+
onEditMessage?: (payload: {
|
|
200
|
+
messageId: string;
|
|
201
|
+
content: string;
|
|
202
|
+
}) => void;
|
|
203
|
+
onConfirmation?: (result: {
|
|
204
|
+
confirmed: 'Confirmed' | 'NotConfirmed';
|
|
205
|
+
key?: string;
|
|
206
|
+
}) => void;
|
|
207
|
+
enableButtons?: boolean;
|
|
208
|
+
apiBaseUrl?: string;
|
|
209
|
+
apiKey?: string;
|
|
210
|
+
agencyId: string;
|
|
211
|
+
currentLanguage?: 'en' | 'el';
|
|
212
|
+
theme?: 'light' | 'dark';
|
|
213
|
+
}
|
|
214
|
+
declare const MessageList: React__default.FC<MessageListProps>;
|
|
215
|
+
|
|
216
|
+
declare const Message: React__default.FC<MessageProps>;
|
|
217
|
+
|
|
218
|
+
declare const ChatInput: React__default.FC<ChatInputProps>;
|
|
219
|
+
|
|
220
|
+
interface FileUploadProps {
|
|
221
|
+
onFileSelect: (file: File) => void;
|
|
222
|
+
accept?: string;
|
|
223
|
+
maxSize?: number;
|
|
224
|
+
disabled?: boolean;
|
|
225
|
+
className?: string;
|
|
226
|
+
}
|
|
227
|
+
declare const FileUpload: React__default.FC<FileUploadProps>;
|
|
228
|
+
|
|
229
|
+
interface AudioRecorderProps {
|
|
230
|
+
onRecordingComplete: (audioBlob: Blob, duration: number) => void;
|
|
231
|
+
disabled?: boolean;
|
|
232
|
+
className?: string;
|
|
233
|
+
}
|
|
234
|
+
declare const AudioRecorder: React__default.FC<AudioRecorderProps>;
|
|
235
|
+
|
|
236
|
+
declare const en: {
|
|
237
|
+
readonly chat: {
|
|
238
|
+
readonly title: "Fusioni AI";
|
|
239
|
+
readonly subtitle: "AI Assistant";
|
|
240
|
+
readonly welcome: {
|
|
241
|
+
readonly title: "Welcome to Fusioni";
|
|
242
|
+
readonly description: "Start a new conversation to begin chatting with AI";
|
|
243
|
+
readonly startButton: "Start New Conversation";
|
|
244
|
+
readonly creating: "Creating...";
|
|
245
|
+
};
|
|
246
|
+
readonly input: {
|
|
247
|
+
readonly placeholder: "Type your message...";
|
|
248
|
+
readonly send: "Send";
|
|
249
|
+
readonly upload: "Upload";
|
|
250
|
+
readonly record: "Record";
|
|
251
|
+
};
|
|
252
|
+
readonly conversations: {
|
|
253
|
+
readonly title: "Conversations";
|
|
254
|
+
readonly search: "Search conversations...";
|
|
255
|
+
readonly newConversation: "New Conversation";
|
|
256
|
+
readonly noConversations: "No conversations yet";
|
|
257
|
+
readonly delete: "Delete conversation";
|
|
258
|
+
readonly newIndicator: "New conversation - will be saved when you send a message";
|
|
259
|
+
readonly deleteConfirm: {
|
|
260
|
+
readonly title: "Delete Conversation";
|
|
261
|
+
readonly message: "Are you sure you want to delete this conversation? This action cannot be undone.";
|
|
262
|
+
readonly confirm: "Delete";
|
|
263
|
+
readonly cancel: "Cancel";
|
|
264
|
+
};
|
|
265
|
+
};
|
|
266
|
+
readonly attachedImages: "Images";
|
|
267
|
+
readonly messages: {
|
|
268
|
+
readonly loading: "Working on it...";
|
|
269
|
+
readonly error: "Oops! Something went wrong. Please try again later.";
|
|
270
|
+
readonly delete: "Delete message";
|
|
271
|
+
readonly deleteConfirm: {
|
|
272
|
+
readonly title: "Delete Message";
|
|
273
|
+
readonly message: "Are you sure you want to delete this message? This action cannot be undone.";
|
|
274
|
+
readonly confirm: "Delete";
|
|
275
|
+
readonly cancel: "Cancel";
|
|
276
|
+
};
|
|
277
|
+
};
|
|
278
|
+
readonly connection: {
|
|
279
|
+
readonly connected: "Real-time updates connected";
|
|
280
|
+
readonly disconnected: "Real-time updates disconnected";
|
|
281
|
+
};
|
|
282
|
+
readonly fullscreen: {
|
|
283
|
+
readonly enter: "Enter fullscreen";
|
|
284
|
+
readonly exit: "Exit fullscreen";
|
|
285
|
+
};
|
|
286
|
+
readonly theme: {
|
|
287
|
+
readonly light: "Switch to light theme";
|
|
288
|
+
readonly dark: "Switch to dark theme";
|
|
289
|
+
};
|
|
290
|
+
readonly errors: {
|
|
291
|
+
readonly failedToCreateConversation: "Failed to create conversation";
|
|
292
|
+
readonly failedToLoadConversation: "Failed to load conversation";
|
|
293
|
+
readonly failedToDeleteConversation: "Failed to delete conversation";
|
|
294
|
+
readonly failedToSendMessage: "Failed to send message";
|
|
295
|
+
readonly failedToDeleteMessage: "Failed to delete message";
|
|
296
|
+
readonly failedToUploadFile: "Failed to upload file";
|
|
297
|
+
readonly failedToInitialize: "Failed to initialize chat service";
|
|
298
|
+
readonly retry: "Retry";
|
|
299
|
+
};
|
|
300
|
+
};
|
|
301
|
+
readonly language: {
|
|
302
|
+
readonly english: "English";
|
|
303
|
+
readonly greek: "Ελληνικά";
|
|
304
|
+
readonly switchLanguage: "Switch Language";
|
|
305
|
+
};
|
|
306
|
+
readonly common: {
|
|
307
|
+
readonly close: "Close";
|
|
308
|
+
readonly open: "Open";
|
|
309
|
+
readonly cancel: "Cancel";
|
|
310
|
+
readonly confirm: "Confirm";
|
|
311
|
+
readonly save: "Save";
|
|
312
|
+
readonly delete: "Delete";
|
|
313
|
+
readonly edit: "Edit";
|
|
314
|
+
readonly search: "Search";
|
|
315
|
+
readonly clear: "Clear";
|
|
316
|
+
readonly loading: "Loading...";
|
|
317
|
+
readonly error: "Error";
|
|
318
|
+
readonly success: "Success";
|
|
319
|
+
readonly warning: "Warning";
|
|
320
|
+
readonly info: "Info";
|
|
321
|
+
readonly yes: "Yes";
|
|
322
|
+
readonly no: "No";
|
|
323
|
+
};
|
|
324
|
+
};
|
|
325
|
+
|
|
326
|
+
type Language = 'en' | 'el';
|
|
327
|
+
type TranslationKeys = typeof en;
|
|
328
|
+
declare const getTranslation: (language: Language, key: string) => string;
|
|
329
|
+
declare const getAvailableLanguages: () => Array<{
|
|
330
|
+
code: Language;
|
|
331
|
+
name: string;
|
|
332
|
+
}>;
|
|
333
|
+
declare const isValidLanguage: (language: string) => language is Language;
|
|
334
|
+
|
|
335
|
+
interface LanguageSwitcherProps {
|
|
336
|
+
currentLanguage: Language;
|
|
337
|
+
onLanguageChange: (language: Language) => void;
|
|
338
|
+
className?: string;
|
|
339
|
+
}
|
|
340
|
+
declare const LanguageSwitcher: React__default.FC<LanguageSwitcherProps>;
|
|
341
|
+
|
|
342
|
+
declare const ChatLoader: React__default.FC;
|
|
343
|
+
|
|
344
|
+
interface SpotlightProps {
|
|
345
|
+
text: string;
|
|
346
|
+
className?: string;
|
|
347
|
+
}
|
|
348
|
+
declare const Spotlight: React__default.FC<SpotlightProps>;
|
|
349
|
+
|
|
350
|
+
interface LinkPreviewData {
|
|
351
|
+
url: string;
|
|
352
|
+
title: string;
|
|
353
|
+
description: string;
|
|
354
|
+
image: string;
|
|
355
|
+
domain: string;
|
|
356
|
+
}
|
|
357
|
+
interface UrlPreviewProps {
|
|
358
|
+
url: string;
|
|
359
|
+
agencyId: string;
|
|
360
|
+
showCloseButton?: boolean;
|
|
361
|
+
compact?: boolean;
|
|
362
|
+
autoFetch?: boolean;
|
|
363
|
+
apiBaseUrl?: string;
|
|
364
|
+
apiKey?: string;
|
|
365
|
+
onClose?: () => void;
|
|
366
|
+
}
|
|
367
|
+
declare const UrlPreview: React__default.FC<UrlPreviewProps>;
|
|
368
|
+
|
|
369
|
+
interface MapProps {
|
|
370
|
+
lat: string | number;
|
|
371
|
+
lng: string | number;
|
|
372
|
+
zoom?: string | number;
|
|
373
|
+
staticMap?: boolean;
|
|
374
|
+
width?: number;
|
|
375
|
+
height?: number;
|
|
376
|
+
apiBaseUrl?: string;
|
|
377
|
+
apiKey?: string;
|
|
378
|
+
agencyId: string;
|
|
379
|
+
}
|
|
380
|
+
declare const Map: React__default.FC<MapProps>;
|
|
381
|
+
|
|
382
|
+
interface ImageGalleryProps {
|
|
383
|
+
images: string[];
|
|
384
|
+
initialIndex?: number;
|
|
385
|
+
onClose: () => void;
|
|
386
|
+
/** Used for overlay gradient when rendered outside `.fusioni-chat-widget` (e.g. portal). */
|
|
387
|
+
theme?: 'light' | 'dark';
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Full-screen image lightbox: main image + prev/next, keyboard nav,
|
|
391
|
+
* and a two-row thumbnail strip with horizontal pages and dot indicators (fusioni-web parity).
|
|
392
|
+
*/
|
|
393
|
+
declare const ImageGallery: React__default.FC<ImageGalleryProps>;
|
|
394
|
+
|
|
395
|
+
declare class ApiClient {
|
|
396
|
+
private client;
|
|
397
|
+
private baseUrl;
|
|
398
|
+
private accessToken?;
|
|
399
|
+
constructor(baseUrl: string, accessToken?: string);
|
|
400
|
+
setAccessToken(token: string): void;
|
|
401
|
+
get<T = any>(url: string, config?: any): Promise<T>;
|
|
402
|
+
post<T = any>(url: string, data?: any, config?: any): Promise<T>;
|
|
403
|
+
put<T = any>(url: string, data?: any, config?: any): Promise<T>;
|
|
404
|
+
delete<T = any>(url: string, config?: any): Promise<T>;
|
|
405
|
+
options<T = any>(url: string, config?: any): Promise<T>;
|
|
406
|
+
connectToSSE(agencyId: string, onMessage: (data: any) => void): EventSource;
|
|
407
|
+
healthCheck(): Promise<boolean>;
|
|
408
|
+
}
|
|
409
|
+
declare const getApiClient: (baseUrl?: string, accessToken?: string) => ApiClient;
|
|
410
|
+
declare const initializeApiClient: (baseUrl: string, accessToken?: string) => ApiClient;
|
|
411
|
+
|
|
412
|
+
interface IConversationService {
|
|
413
|
+
getConversation(conversationId: string): Promise<Conversation | undefined>;
|
|
414
|
+
getConversationsByAgency(agencyId: string, page: number, size: number): Promise<Conversation[]>;
|
|
415
|
+
getConversationsByIdsAndAgency(agencyId: string, ids: string[]): Promise<Conversation[]>;
|
|
416
|
+
deleteConversation(conversationId: string): Promise<void>;
|
|
417
|
+
createConversation(conversation: Omit<Conversation, 'id'>): Promise<string>;
|
|
418
|
+
}
|
|
419
|
+
declare const getConversationService: () => IConversationService;
|
|
420
|
+
|
|
421
|
+
declare class PipelineService {
|
|
422
|
+
private getApiClient;
|
|
423
|
+
/**
|
|
424
|
+
* Execute a pipeline request.
|
|
425
|
+
*
|
|
426
|
+
* The API typically returns `messages` with the full turn batch for the exchange,
|
|
427
|
+
* including the persisted **user** message that matches the request. Clients that
|
|
428
|
+
* optimistically append a local user bubble should remove that row from state when
|
|
429
|
+
* merging `response.messages` (ChatWidget tags it with `fusion_sdk_optimistic_user`
|
|
430
|
+
* in `extra_data` and strips it—same pattern as removing the loading message).
|
|
431
|
+
*/
|
|
432
|
+
executePipeline(request: PipelineRequest): Promise<PipelineResponse>;
|
|
433
|
+
}
|
|
434
|
+
declare const getPipelineService: () => PipelineService;
|
|
435
|
+
|
|
436
|
+
declare class MessageService {
|
|
437
|
+
private getApiClient;
|
|
438
|
+
/**
|
|
439
|
+
* Delete Message
|
|
440
|
+
* @param messageId
|
|
441
|
+
* @param agencyId
|
|
442
|
+
*/
|
|
443
|
+
deleteMessage(messageId: string, agencyId: string): Promise<void>;
|
|
444
|
+
/**
|
|
445
|
+
* Get Messages
|
|
446
|
+
* @param conversationId
|
|
447
|
+
* @param agencyId
|
|
448
|
+
*/
|
|
449
|
+
getMessages(conversationId: string, agencyId: string): Promise<FusioniMemoryMessage[]>;
|
|
450
|
+
}
|
|
451
|
+
declare const getMessageService: () => MessageService;
|
|
452
|
+
|
|
453
|
+
declare const useChatState: (agencyId: string) => {
|
|
454
|
+
conversations: Conversation[];
|
|
455
|
+
currentConversation: Conversation | null;
|
|
456
|
+
messages: FusioniMemoryMessage[];
|
|
457
|
+
streamMessages: string[];
|
|
458
|
+
isLoading: boolean;
|
|
459
|
+
setCurrentConversation: React.Dispatch<React.SetStateAction<Conversation | null>>;
|
|
460
|
+
setStreamMessages: React.Dispatch<React.SetStateAction<string[]>>;
|
|
461
|
+
addMessage: (message: FusioniMemoryMessage) => void;
|
|
462
|
+
updateMessage: (messageId: string, updates: Partial<FusioniMemoryMessage>) => void;
|
|
463
|
+
removeMessage: (messageId: string) => void;
|
|
464
|
+
removeOptimisticUserMessages: () => void;
|
|
465
|
+
truncateMessagesAt: (messageId: string) => void;
|
|
466
|
+
addConversation: (conversation: Conversation) => void;
|
|
467
|
+
updateConversation: (conversationId: string | null, updatedConversation: Conversation) => void;
|
|
468
|
+
removeConversation: (conversationId: string) => void;
|
|
469
|
+
loadConversations: (page?: number, size?: number) => Promise<void>;
|
|
470
|
+
loadMessages: (conversationId: string) => Promise<void>;
|
|
471
|
+
clearStreamMessages: () => void;
|
|
472
|
+
clearMessages: () => void;
|
|
473
|
+
};
|
|
474
|
+
|
|
475
|
+
declare const useSSE: (agencyId: string, onMessage: (data: any) => void, isConnected?: boolean, accessToken?: string) => EventSource | null;
|
|
476
|
+
|
|
477
|
+
declare const useTheme: (initialTheme?: Theme) => {
|
|
478
|
+
theme: "light" | "dark";
|
|
479
|
+
toggleTheme: () => void;
|
|
480
|
+
isManualOverride: boolean;
|
|
481
|
+
};
|
|
482
|
+
|
|
483
|
+
declare const useTranslation: (defaultLanguage?: Language) => {
|
|
484
|
+
t: (key: string) => string;
|
|
485
|
+
currentLanguage: Language;
|
|
486
|
+
changeLanguage: (language: Language) => void;
|
|
487
|
+
availableLanguages: {
|
|
488
|
+
code: Language;
|
|
489
|
+
name: string;
|
|
490
|
+
}[];
|
|
491
|
+
isValidLanguage: (lang: string) => lang is Language;
|
|
492
|
+
};
|
|
493
|
+
|
|
494
|
+
export { ApiClient, AudioRecorder, ChatInput, ChatLoader, ChatPanel, ChatWidget, ConversationList, FileUpload, FloatingButton, ImageGallery, LanguageSwitcher, Map, Message, MessageList, MessageService, PipelineService, Spotlight, UrlPreview, ChatWidget as default, getApiClient, getAvailableLanguages, getConversationService, getMessageService, getPipelineService, getTranslation, initializeApiClient, isValidLanguage, useChatState, useSSE, useTheme, useTranslation };
|
|
495
|
+
export type { ChatEvent, ChatInputProps, ChatWidgetProps, ConfirmationResult, Conversation, ConversationListProps, FusioniMemoryMessage, FusioniPayload, FusioniSDKConfig, ImageGalleryProps, Language, LinkPreviewData, MapProps, MessageProps, MessageRole, Pagination, Pipeline, PipelineRequest, PipelineResponse, Position, SpotlightProps, Theme, TranslationKeys, UrlPreviewProps };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGrD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAG9E,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAChF,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAGxD,YAAY,EAEV,YAAY,EACZ,oBAAoB,EACpB,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,cAAc,EAGd,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,qBAAqB,EACrB,cAAc,EACd,SAAS,EACT,kBAAkB,EAGlB,WAAW,EACX,KAAK,EACL,QAAQ,EACT,MAAM,SAAS,CAAC;AAGjB,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAGhF,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGjD,YAAY,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGnE,OAAO,EAAE,UAAU,IAAI,OAAO,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--fusioni-primary:#2563eb;--fusioni-primary-light:#3b82f6;--fusioni-primary-dark:#1d4ed8;--fusioni-secondary:#64748b;--fusioni-success:#059669;--fusioni-warning:#d97706;--fusioni-error:#dc2626;--fusioni-info:#0284c7;--fusioni-bg-primary:#fff;--fusioni-bg-secondary:#e7e7e7;--fusioni-bg-tertiary:#f1f5f9;--fusioni-bg-accent:#f0f9ff;--fusioni-bg-dark:#0f172a;--fusioni-bg-darker:#020617;--fusioni-text-primary:#0f172a;--fusioni-text-secondary:#475569;--fusioni-text-muted:#94a3b8;--fusioni-text-light:#fff;--fusioni-border:#e2e8f0;--fusioni-border-light:#f1f5f9;--fusioni-border-dark:#334155;--fusioni-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--fusioni-shadow-md:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--fusioni-shadow-lg:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--fusioni-shadow-xl:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--fusioni-shadow-2xl:0 25px 50px -12px rgba(0,0,0,.25);--fusioni-radius:0.375rem;--fusioni-radius-md:0.5rem;--fusioni-radius-lg:0.75rem;--fusioni-radius-xl:1rem;--fusioni-radius-2xl:1.5rem;--fusioni-transition:all 0.2s cubic-bezier(0.4,0,0.2,1);--fusioni-transition-fast:all 0.15s cubic-bezier(0.4,0,0.2,1)}.fusioni-chat-widget{--fusioni-primary:var(--primary-color,#2563eb);--fusioni-primary-light:var(--primary-color,#3b82f6);--fusioni-primary-dark:var(--primary-color,#1d4ed8)}.fusioni-chat-widget.dark{--fusioni-primary:var(--primary-color,#3b82f6);--fusioni-primary-light:var(--primary-color,#60a5fa);--fusioni-primary-dark:var(--primary-color,#2563eb);--fusioni-secondary:#64748b;--fusioni-success:#10b981;--fusioni-warning:#f59e0b;--fusioni-error:#ef4444;--fusioni-info:#06b6d4;--fusioni-bg-primary:#0f172a;--fusioni-bg-secondary:#1e293b;--fusioni-bg-tertiary:#334155;--fusioni-bg-accent:#1e293b;--fusioni-bg-dark:#020617;--fusioni-bg-darker:#000;--fusioni-text-primary:#f8fafc;--fusioni-text-secondary:#cbd5e1;--fusioni-text-muted:#64748b;--fusioni-text-light:#fff;--fusioni-border:#334155;--fusioni-border-light:#475569;--fusioni-border-dark:#1e293b}.fusioni-chat-widget{background-color:var(--fusioni-bg-primary);color:var(--fusioni-text-primary);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:14px;line-height:1.5}.fusioni-floating-button{align-items:center;backdrop-filter:blur(10px);background:linear-gradient(135deg,var(--fusioni-primary) 0,var(--fusioni-primary-light) 100%);border:none;border:2px solid hsla(0,0%,100%,.1);border-radius:50%;box-shadow:var(--fusioni-shadow-2xl);cursor:pointer;display:flex;height:64px;justify-content:center;overflow:visible;position:fixed;width:64px;z-index:1000}.fusioni-floating-button:hover{background:linear-gradient(135deg,var(--fusioni-primary-dark) 0,var(--fusioni-primary) 100%);box-shadow:0 25px 50px -12px rgba(37,99,235,.4);transform:translateY(-2px) scale(1.05)}.fusioni-floating-button:active{transform:translateY(0) scale(.98)}.fusioni-floating-button-glass{backdrop-filter:blur(20px);background:hsla(0,0%,100%,.2);border:1px solid hsla(0,0%,100%,.4);box-shadow:0 8px 32px rgba(0,0,0,.2),inset 0 1px 0 hsla(0,0%,100%,.4)}@supports not (backdrop-filter:blur(20px)){.fusioni-floating-button-glass{background:hsla(0,0%,100%,.9);border:1px solid rgba(0,0,0,.1)}}.fusioni-floating-button-minimal{background:var(--fusioni-bg-primary);border:1px solid var(--fusioni-border);box-shadow:0 4px 12px rgba(0,0,0,.05),0 1px 3px rgba(0,0,0,.1)}.fusioni-floating-button-solid{background:linear-gradient(135deg,var(--fusioni-primary) 0,var(--fusioni-primary-light) 100%);box-shadow:0 4px 12px rgba(37,99,235,.15),0 1px 3px rgba(37,99,235,.1)}.fusioni-floating-button-content{align-items:center;display:flex;justify-content:center}.fusioni-floating-button-icon{transition:all .3s cubic-bezier(.4,0,.2,1)}.fusioni-floating-button-glass .fusioni-floating-button-icon{color:var(--fusioni-text-primary);filter:drop-shadow(0 1px 2px rgba(0,0,0,.1))}.fusioni-floating-button-minimal .fusioni-floating-button-icon{color:var(--fusioni-text-primary)}.fusioni-floating-button-solid .fusioni-floating-button-icon{color:#fff}.fusioni-floating-button-attention-ring{animation:attentionRingPulse 3s ease-in-out infinite;border:2px solid var(--fusioni-primary);border-radius:50%;bottom:-8px;left:-8px;opacity:0;pointer-events:none;position:absolute;right:-8px;top:-8px}.fusioni-floating-button-attention-ring-2{animation:attentionRingPulse 3s ease-in-out .5s infinite;border:1px solid var(--fusioni-primary-light);border-radius:50%;bottom:-16px;left:-16px;opacity:0;pointer-events:none;position:absolute;right:-16px;top:-16px}.fusioni-floating-button-attention-ring-3{animation:attentionRingPulse 3s ease-in-out 1s infinite;border:1px solid rgba(99,102,241,.3);border-radius:50%;bottom:-24px;left:-24px;opacity:0;pointer-events:none;position:absolute;right:-24px;top:-24px}.fusioni-floating-button-neural-particles{bottom:0;left:0;overflow:visible;pointer-events:none;position:absolute;right:0;top:0}.fusioni-neural-particle{animation:neuralParticleFloat 4s ease-in-out infinite;background:var(--fusioni-primary-light);border-radius:50%;box-shadow:0 0 6px var(--fusioni-primary-light);height:3px;opacity:0;position:absolute;width:3px}.fusioni-neural-particle:first-child{animation-delay:0s;left:15%;top:20%}.fusioni-neural-particle:nth-child(2){animation-delay:.8s;right:20%;top:15%}.fusioni-neural-particle:nth-child(3){animation-delay:1.6s;bottom:25%;left:25%}.fusioni-neural-particle:nth-child(4){animation-delay:2.4s;bottom:20%;right:15%}.fusioni-neural-particle:nth-child(5){animation-delay:3.2s;left:5%;top:50%}.fusioni-neural-particle:nth-child(6){animation-delay:.4s;right:5%;top:50%}.fusioni-floating-button-brain-activity{animation:brainActivityPulse 2.5s ease-in-out infinite;background:linear-gradient(45deg,#10b981,#059669);border-radius:50%;box-shadow:0 0 8px rgba(16,185,129,.6);height:16px;opacity:0;pointer-events:none;position:absolute;right:-2px;top:-2px;width:16px}.fusioni-floating-button-brain-activity:before{animation:brainCorePulse 1s ease-in-out infinite;background:#fff;border-radius:50%;content:"";height:6px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:6px}.fusioni-floating-button-attention-sequence{height:100px;left:50%;opacity:0;pointer-events:none;position:absolute;top:50%;transform:translate(-50%,-50%);width:100px}.fusioni-attention-wave{animation:attentionWaveExpand 2s ease-out infinite;border:2px solid var(--fusioni-primary);border-radius:50%;bottom:0;left:0;opacity:0;position:absolute;right:0;top:0}.fusioni-attention-wave:nth-child(2){animation-delay:.3s}.fusioni-attention-wave:nth-child(3){animation-delay:.6s}.fusioni-floating-button-periodic-pulse{animation:periodicAttentionPulse 8s ease-in-out infinite;background:radial-gradient(circle,rgba(99,102,241,.1) 0,transparent 70%);border-radius:50%;bottom:0;left:0;opacity:0;pointer-events:none;position:absolute;right:0;top:0}.fusioni-floating-button-glow{animation:enhancedGlowPulse 3s ease-in-out infinite;background:radial-gradient(circle,rgba(99,102,241,.3) 0,transparent 70%);border-radius:50%;bottom:-4px;left:-4px;opacity:0;pointer-events:none;position:absolute;right:-4px;top:-4px}.fusioni-floating-button-magnetic-field{animation:magneticFieldRotate 6s linear infinite;border:1px solid rgba(99,102,241,.2);border-radius:50%;bottom:-12px;left:-12px;opacity:0;pointer-events:none;position:absolute;right:-12px;top:-12px}.fusioni-floating-button-magnetic-field:after,.fusioni-floating-button-magnetic-field:before{background:var(--fusioni-primary-light);border-radius:50%;box-shadow:0 0 4px var(--fusioni-primary-light);content:"";height:4px;position:absolute;width:4px}.fusioni-floating-button-magnetic-field:before{left:50%;top:0;transform:translateX(-50%)}.fusioni-floating-button-magnetic-field:after{bottom:0;left:50%;transform:translateX(-50%)}.fusioni-floating-button-bottom-right{bottom:1rem;right:1rem}.fusioni-floating-button-bottom-left{bottom:1rem;left:1rem}.fusioni-floating-button-top-right{right:1rem;top:1rem}.fusioni-floating-button-top-left{left:1rem;top:1rem}.fusioni-chat-panel{backdrop-filter:blur(20px);background:var(--fusioni-bg-primary);border:1px solid var(--fusioni-border-light);border-radius:var(--fusioni-radius-2xl);box-shadow:var(--fusioni-shadow-2xl);box-sizing:border-box;display:flex;flex-direction:column;height:640px;max-height:calc(100vh - 2rem);max-width:calc(100vw - 2rem);overflow:hidden;position:fixed;width:480px;z-index:50}.fusioni-chat-widget:not(.dark) .fusioni-chat-panel{background:hsla(0,0%,100%,.95)}.fusioni-chat-widget.dark .fusioni-chat-panel{background:rgba(15,23,42,.95)}.fusioni-chat-panel-content{box-sizing:border-box;display:flex;flex-direction:column;height:100%;overflow:hidden;width:100%}.fusioni-chat-panel-bottom-right{bottom:5rem;right:1rem}.fusioni-chat-panel-bottom-left{bottom:5rem;left:1rem}.fusioni-chat-panel-top-right{right:1rem;top:5rem}.fusioni-chat-panel-top-left{left:1rem;top:5rem}.fusioni-chat-panel-fullscreen{border-radius:0!important;bottom:0!important;height:100vh!important;left:0!important;max-height:none!important;max-width:none!important;position:fixed!important;right:0!important;top:0!important;width:100vw!important;z-index:9999!important}.fusioni-chat-backdrop{background:rgba(0,0,0,.5);bottom:0;left:0;position:fixed;right:0;top:0;z-index:40}.fusioni-chat-container{box-sizing:border-box}.fusioni-chat-container,.fusioni-chat-main{display:flex;height:100%;overflow:hidden;width:100%}.fusioni-chat-main{flex:1;flex-direction:column;min-width:0;position:relative;transition:width var(--fusioni-transition)}.fusioni-conversation-list{backdrop-filter:blur(10px);background:var(--fusioni-bg-secondary);border-right:1px solid var(--fusioni-border-light);bottom:0;box-shadow:var(--fusioni-shadow-lg);display:flex;flex-direction:column;left:0;opacity:0;overflow:hidden;position:absolute;top:0;transform:translateX(-100%) scale(.95);transition:transform .3s cubic-bezier(.4,0,.2,1),opacity .3s cubic-bezier(.4,0,.2,1);width:280px;z-index:10}.fusioni-chat-widget:not(.dark) .fusioni-conversation-list{background:linear-gradient(180deg,var(--fusioni-bg-accent) 0,var(--fusioni-bg-secondary) 100%)}.fusioni-conversation-list.open{opacity:1;transform:translateX(0) scale(1)}.fusioni-conversation-backdrop{backdrop-filter:blur(2px);background:rgba(0,0,0,.3);bottom:0;left:0;opacity:0;position:absolute;right:0;top:0;transition:opacity .3s cubic-bezier(.4,0,.2,1),visibility .3s cubic-bezier(.4,0,.2,1);visibility:hidden;z-index:5}.fusioni-conversation-backdrop.open{opacity:1;visibility:visible}.fusioni-conversation-header{align-items:center;backdrop-filter:blur(10px);background:var(--fusioni-bg-tertiary);border-bottom:1px solid var(--fusioni-border-light);display:flex;justify-content:space-between;padding:1.25rem 1rem}.fusioni-chat-widget:not(.dark) .fusioni-conversation-header{background:hsla(0,0%,100%,.8)}.fusioni-conversation-title{align-items:center;display:flex;gap:.75rem}.fusioni-conversation-logo{align-items:center;border:2px solid hsla(0,0%,100%,.2);border-radius:var(--fusioni-radius-lg);box-shadow:var(--fusioni-shadow-md);color:#fff;display:flex;height:44px;justify-content:center;width:44px}.fusioni-conversation-info h3{color:var(--fusioni-text-primary);font-size:1rem;font-weight:600;margin:0}.fusioni-conversation-info p{color:var(--fusioni-text-secondary);font-size:.75rem;margin:0}.fusioni-conversation-search{padding:1rem}.fusioni-search-input{position:relative}.fusioni-input{border:1px solid var(--fusioni-border-light);border-radius:var(--fusioni-radius-lg);box-shadow:var(--fusioni-shadow);color:var(--fusioni-text-primary);font-size:.875rem;padding:.75rem 2.5rem .75rem 1rem;transition:var(--fusioni-transition);width:100%}.fusioni-input,.fusioni-input:focus{background:var(--fusioni-bg-secondary)}.fusioni-input:focus{border-color:var(--fusioni-primary);box-shadow:0 0 0 3px rgba(59,130,246,.1),var(--fusioni-shadow-md);outline:none}.fusioni-chat-widget:not(.dark) .fusioni-input{background:var(--fusioni-bg-primary)}.fusioni-chat-widget:not(.dark) .fusioni-input:focus{background:var(--fusioni-bg-primary);box-shadow:0 0 0 3px rgba(37,99,235,.1),var(--fusioni-shadow-md)}.fusioni-search-icon{color:var(--fusioni-text-muted);pointer-events:none;position:absolute;right:.75rem;top:50%;transform:translateY(-50%)}.fusioni-divider{background:var(--fusioni-border);height:1px;margin:0 1rem}.fusioni-conversations{flex:1;overflow-y:auto;padding:.5rem}.fusioni-conversation-item{backdrop-filter:blur(10px);background:var(--fusioni-bg-primary);border:1px solid var(--fusioni-border-light);border-radius:var(--fusioni-radius-lg);box-shadow:var(--fusioni-shadow);cursor:pointer;margin-bottom:.5rem;overflow:hidden;padding:1rem .5rem 1rem 1rem;position:relative;transition:all .4s cubic-bezier(.4,0,.2,1)}.fusioni-conversation-item:before{background:linear-gradient(135deg,rgba(37,99,235,.02),rgba(59,130,246,.05) 50%,rgba(37,99,235,.02));bottom:0;content:"";left:0;opacity:0;position:absolute;right:0;top:0;transition:opacity .3s ease;z-index:1}.fusioni-conversation-item:hover{background:var(--fusioni-bg-secondary);border-color:var(--fusioni-primary);box-shadow:var(--fusioni-shadow-lg);transform:translateY(-2px) scale(1.02)}.fusioni-conversation-item:hover:before{opacity:1}.fusioni-conversation-item.active{background:linear-gradient(135deg,var(--fusioni-primary) 0,var(--fusioni-primary-light) 100%);border-color:var(--fusioni-primary);box-shadow:0 8px 32px rgba(37,99,235,.3);color:#fff;transform:translateY(-1px)}.fusioni-conversation-item.active:before{opacity:0}.fusioni-conversation-neural-bg{bottom:0;left:0;opacity:0;pointer-events:none;position:absolute;right:0;top:0;transition:opacity .4s ease;z-index:0}.fusioni-conversation-item:hover .fusioni-conversation-neural-bg{opacity:.6}.fusioni-conversation-item.active .fusioni-conversation-neural-bg{opacity:.8}.fusioni-neural-node{animation:neuralPulse 3s ease-in-out infinite;background:var(--fusioni-primary);border-radius:50%;box-shadow:0 0 8px var(--fusioni-primary);height:4px;position:absolute;width:4px}.fusioni-neural-node-1{animation-delay:0s;left:15%;top:20%}.fusioni-neural-node-2{animation-delay:1s;right:20%;top:60%}.fusioni-neural-node-3{animation-delay:2s;bottom:25%;left:40%}.fusioni-neural-connection{animation:neuralFlow 4s ease-in-out infinite;background:linear-gradient(90deg,transparent 0,var(--fusioni-primary) 50%,transparent 100%);height:1px;position:absolute}.fusioni-neural-connection-1{animation-delay:.5s;left:15%;top:30%;transform:rotate(15deg);width:60%}.fusioni-neural-connection-2{animation-delay:1.5s;bottom:40%;left:25%;transform:rotate(-20deg);width:45%}.fusioni-ai-pulse-ring{animation:aiPulse 2s ease-in-out infinite;border:2px solid var(--fusioni-primary);border-radius:50%;height:100%;opacity:.6;position:absolute;width:100%}.fusioni-ai-core{align-items:center;animation:aiRotate 4s linear infinite;color:var(--fusioni-primary);display:flex;justify-content:center;position:relative;z-index:1}.fusioni-conversation-item.active .fusioni-ai-core{color:#fff}.fusioni-conversation-item.active .fusioni-ai-pulse-ring{border-color:#fff}.fusioni-conversation-content{display:flex;flex-direction:column;gap:.5rem;position:relative;z-index:2}.fusioni-conversation-main{align-items:flex-start;display:flex;gap:1rem;justify-content:space-between}.fusioni-conversation-title-section{display:flex;flex:1;flex-direction:column;gap:.5rem;min-width:0}.fusioni-conversation-title-text{align-items:center;color:var(--fusioni-text-primary);display:flex;flex-wrap:wrap;font-size:.95rem;font-weight:600;gap:.5rem;line-height:1.3;margin:0;word-break:break-word}.fusioni-conversation-item.active .fusioni-conversation-title-text{color:#fff}.fusioni-conversation-meta{align-items:center;display:flex;gap:.75rem;justify-content:space-between;margin-top:.25rem}.fusioni-conversation-status{align-items:center;color:var(--fusioni-text-muted);display:flex;font-size:.75rem;font-weight:500;gap:.375rem}.fusioni-conversation-item.active .fusioni-conversation-status{color:hsla(0,0%,100%,.8)}.fusioni-status-dot{animation:statusPulse 2s ease-in-out infinite;background:var(--fusioni-success);border-radius:50%;box-shadow:0 0 4px var(--fusioni-success);height:6px;width:6px}.fusioni-conversation-temp-indicator{flex-shrink:0}.fusioni-new-badge{align-items:center;animation:newBadgePulse 2s ease-in-out infinite;background:linear-gradient(135deg,var(--fusioni-warning) 0,#f59e0b 100%);border-radius:var(--fusioni-radius);box-shadow:0 2px 8px rgba(217,119,6,.3);color:#fff;display:inline-flex;font-size:.625rem;font-weight:700;letter-spacing:.05em;padding:.25rem .5rem;position:relative;text-transform:uppercase}.fusioni-new-text{position:relative;z-index:2}.fusioni-new-pulse{animation:newPulseRing 2s ease-in-out infinite;background:linear-gradient(135deg,var(--fusioni-warning) 0,#f59e0b 100%);border-radius:var(--fusioni-radius);bottom:0;left:0;opacity:.6;position:absolute;right:0;top:0}.fusioni-conversation-actions{align-items:flex-start;display:flex;gap:.25rem;margin-top:.25rem}.fusioni-delete-btn{opacity:0;transform:scale(.8);transition:all .3s cubic-bezier(.4,0,.2,1)}.fusioni-conversation-item:hover .fusioni-delete-btn{opacity:1;transform:scale(1)}.fusioni-conversation-item.active .fusioni-delete-btn{background:hsla(0,0%,100%,.2);color:#fff;opacity:1;transform:scale(1)}.fusioni-conversation-item.active .fusioni-delete-btn:hover{background:hsla(0,0%,100%,.3);transform:scale(1.1)}.fusioni-conversation-date{color:var(--fusioni-text-muted);font-size:.75rem;font-weight:500;margin:0}.fusioni-conversation-item.active .fusioni-conversation-date{color:hsla(0,0%,100%,.8)}.fusioni-conversation-data-flow{bottom:0;height:2px;left:0;opacity:0;overflow:hidden;position:absolute;right:0;transition:opacity .3s ease}.fusioni-conversation-item.active .fusioni-conversation-data-flow,.fusioni-conversation-item:hover .fusioni-conversation-data-flow{opacity:1}.fusioni-data-stream{animation:dataFlow 3s ease-in-out infinite;background:linear-gradient(90deg,transparent 0,var(--fusioni-primary) 20%,var(--fusioni-primary-light) 50%,var(--fusioni-primary) 80%,transparent 100%);height:100%;left:-100%;position:absolute;top:0;width:100%}.fusioni-conversation-item.active .fusioni-data-stream{background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.3) 20%,hsla(0,0%,100%,.6) 50%,hsla(0,0%,100%,.3) 80%,transparent)}.fusioni-empty-state{color:var(--fusioni-text-muted);padding:2rem;text-align:center}.fusioni-message-list{background:var(--fusioni-bg-primary);display:flex;flex:1;flex-direction:column;overflow-y:auto;padding:1rem}.fusioni-messages-container{display:flex;flex-direction:column;gap:1rem;height:100%}.fusioni-empty-messages,.fusioni-empty-messages-content{align-items:center;display:flex;height:100%;justify-content:center}.fusioni-empty-messages-content{color:var(--fusioni-text-muted);flex-direction:column;text-align:center}.fusioni-empty-icon{color:var(--fusioni-text-muted);height:64px;margin:0 auto 1rem;width:64px}.fusioni-messages{gap:1rem}.fusioni-message-wrapper,.fusioni-messages{display:flex;flex-direction:column}.fusioni-message{align-items:flex-start;display:flex;gap:5px}.fusioni-message.user{flex-direction:row-reverse}.fusioni-message-avatar{align-items:center;background:var(--fusioni-bg-tertiary);border-radius:8px;color:var(--fusioni-text-secondary);display:flex;flex-shrink:0;height:32px;justify-content:center;width:32px}.fusioni-message.user .fusioni-message-avatar{background:var(--fusioni-primary);color:#fff}.fusioni-message-content{flex:1;min-width:0}.fusioni-message-header{align-items:center;display:flex;gap:.5rem;margin-bottom:.25rem}.fusioni-message-role{color:var(--fusioni-text-secondary);font-size:.75rem;font-weight:500;margin-left:5px}.fusioni-message-time{color:var(--fusioni-text-muted);font-size:.75rem}.fusioni-message-body{margin-bottom:0}.fusioni-message-bubble{word-wrap:break-word;border-radius:var(--fusioni-radius-lg);max-width:100%;padding:.75rem 1rem;position:relative;transition:var(--fusioni-transition)}.fusioni-message-bubble:hover{box-shadow:var(--fusioni-shadow)}.fusioni-message-user{background:var(--fusioni-primary);border-bottom-right-radius:.25rem;color:#fff}.fusioni-message-assistant{background:var(--fusioni-bg-secondary);border-bottom-left-radius:.25rem;color:var(--fusioni-text-primary)}.fusioni-message-error{background:var(--fusioni-error);color:#fff}.fusioni-message-text{line-height:1.5}.fusioni-message-text h1,.fusioni-message-text h2,.fusioni-message-text h3{line-height:1.25;margin:.5rem 0 .25rem}.fusioni-message-text p{margin:.5rem 0}.fusioni-message-text ol,.fusioni-message-text ul{margin:.5rem 0;padding-left:1.5rem}.fusioni-message-text code{background:var(--fusioni-bg-tertiary);border-radius:.25rem;font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:.875em;padding:.125rem .25rem}.fusioni-message-text pre{background:var(--fusioni-bg-dark);border-radius:var(--fusioni-radius);color:var(--fusioni-text-light);margin:.5rem 0;overflow-x:auto;padding:.75rem}.fusioni-message-text a{color:var(--fusioni-primary);text-decoration:underline}.fusioni-message-extra,.fusioni-message-image{margin-top:.5rem}.fusioni-image{border-radius:var(--fusioni-radius);box-shadow:var(--fusioni-shadow);height:auto;max-width:100%}.fusioni-message-audio{background:var(--fusioni-bg-tertiary);border-radius:var(--fusioni-radius);margin-top:.5rem;padding:.75rem}.fusioni-audio-header{align-items:center;color:var(--fusioni-text-secondary);display:flex;font-size:.875rem;gap:.5rem;margin-bottom:.5rem}.fusioni-audio-duration{color:var(--fusioni-text-muted);font-size:.75rem}.fusioni-audio-player{height:32px;width:100%}.fusioni-message-map{margin-top:.5rem}.fusioni-map-placeholder{background:var(--fusioni-bg-tertiary);border-radius:var(--fusioni-radius);color:var(--fusioni-text-secondary);padding:1rem;text-align:center}.fusioni-map-container{border:1px solid var(--fusioni-border);border-radius:var(--fusioni-radius);box-shadow:var(--fusioni-shadow);margin-top:.5rem;overflow:hidden}.fusioni-map-interactive,.fusioni-map-static{height:auto;position:relative;width:100%}.fusioni-map-image{border-radius:var(--fusioni-radius);display:block;height:auto;width:100%}.fusioni-map-iframe{border:none;border-radius:var(--fusioni-radius);height:400px;width:100%}.fusioni-map-loading{align-items:center;background:var(--fusioni-bg-tertiary);border:1px solid var(--fusioni-border);border-radius:var(--fusioni-radius);display:flex;justify-content:center;padding:2rem}.fusioni-map-loading-content{align-items:center;color:var(--fusioni-text-secondary);display:flex;flex-direction:column;gap:.75rem}.fusioni-map-loading-spinner{animation:spin 1s linear infinite;border-top:2px solid var(--fusioni-border);border:2px solid var(--fusioni-border);border-radius:50%;border-top-color:var(--fusioni-primary);height:24px;width:24px}.fusioni-map-error{align-items:center;background:rgba(220,38,38,.05);border:1px solid rgba(220,38,38,.2);border-radius:var(--fusioni-radius);color:var(--fusioni-error);display:flex;justify-content:center;padding:1rem}.fusioni-map-error-content{align-items:center;display:flex;font-size:.875rem;gap:.5rem}.fusioni-chat-widget.dark .fusioni-map-container{border-color:var(--fusioni-border-dark)}.fusioni-chat-widget.dark .fusioni-map-loading{background:var(--fusioni-bg-dark);border-color:var(--fusioni-border-dark)}.fusioni-chat-widget.dark .fusioni-map-error{background:rgba(220,38,38,.1);border-color:rgba(220,38,38,.3)}.fusioni-message-thoughts{color:var(--fusioni-text-muted);font-size:.75rem;margin-top:.5rem}.fusioni-message-thoughts details{cursor:pointer}.fusioni-message-thoughts summary{font-weight:500}.fusioni-message-actions{align-items:center;align-self:center;display:flex;flex-direction:column;gap:.25rem;opacity:0;transition:var(--fusioni-transition)}.fusioni-message:hover .fusioni-message-actions{opacity:1}.fusioni-message-error-indicator{align-items:center;color:var(--fusioni-error);display:flex;font-size:.75rem;gap:.25rem;margin-top:.25rem}.fusioni-stream-message{align-items:center;display:flex;gap:.75rem;margin-bottom:.5rem}.fusioni-stream-message:last-child{margin-bottom:0}.fusioni-stream-indicator{align-items:center;display:flex;justify-content:center}.fusioni-stream-dot{animation:dotPulse 1.5s infinite;background:var(--fusioni-primary);border-radius:50%;box-shadow:0 0 8px rgba(99,102,241,.4);height:6px;width:6px}.fusioni-stream-text{color:var(--fusioni-text-secondary);font-size:.875rem;line-height:1.4}.fusioni-chat-input{background:var(--fusioni-bg-primary);border-top:1px solid var(--fusioni-border);padding:1rem}.fusioni-image-preview{margin-bottom:.75rem}.fusioni-image-preview-content{display:inline-block;position:relative}.fusioni-preview-image{border-radius:var(--fusioni-radius);box-shadow:var(--fusioni-shadow);max-height:200px;max-width:200px}.fusioni-image-preview-content .fusioni-btn{position:absolute;right:.5rem;top:.5rem}.fusioni-audio-preview{background:var(--fusioni-bg-secondary);border:1px solid var(--fusioni-border);border-radius:var(--fusioni-radius);margin-bottom:.75rem;padding:.75rem}.fusioni-audio-preview-content{display:flex;flex-direction:column;gap:.5rem}.fusioni-audio-preview-header{align-items:center;color:var(--fusioni-text-secondary);display:flex;font-size:.875rem;justify-content:space-between}.fusioni-audio-preview-player{height:32px;width:100%}.fusioni-audio-preview-text{color:var(--fusioni-text-muted);font-size:.75rem;margin:0;text-align:center}.fusioni-input-container{width:100%}.fusioni-input-wrapper{align-items:flex-end;background:var(--fusioni-bg-secondary);border:2px solid var(--fusioni-border);border-radius:var(--fusioni-radius-xl);display:flex;gap:.5rem;padding:.5rem;transition:var(--fusioni-transition)}.fusioni-input-wrapper:focus-within{border-color:var(--fusioni-primary);box-shadow:0 0 0 3px rgba(99,102,241,.1)}.fusioni-textarea{background:transparent;border:none;color:var(--fusioni-text-primary);flex:1;font-family:inherit;font-size:.875rem;line-height:1.5;max-height:120px;min-height:20px;outline:none;padding:.5rem;resize:none}.fusioni-textarea::placeholder{color:var(--fusioni-text-muted)}.fusioni-input-actions{align-items:center;display:flex;gap:.25rem}.fusioni-btn{align-items:center;background:transparent;border:none;border-radius:var(--fusioni-radius);color:var(--fusioni-text-secondary);cursor:pointer;display:inline-flex;font-size:.875rem;font-weight:500;justify-content:center;padding:.5rem;text-decoration:none;transition:var(--fusioni-transition)}.fusioni-btn:hover{background:var(--fusioni-bg-tertiary);color:var(--fusioni-text-primary)}.fusioni-btn:disabled{cursor:not-allowed;opacity:.5}.fusioni-btn-icon-primary{background:var(--fusioni-bg-primary);border:1px solid var(--fusioni-border);box-shadow:var(--fusioni-shadow)}.fusioni-btn-icon-primary:hover{background:var(--fusioni-primary-dark);border-color:var(--fusioni-primary-dark);color:#fff}.fusioni-btn-icon{border-radius:50%;height:25px;padding:0;transition:var(--fusioni-transition-fast);width:28px}.fusioni-btn-icon:hover{background:var(--fusioni-primary);border-color:var(--fusioni-primary);color:#fff;transform:scale(1.05)}.fusioni-btn-primary{background:linear-gradient(135deg,var(--fusioni-primary) 0,var(--fusioni-primary-light) 100%);border:none;border-radius:var(--fusioni-radius-lg);box-shadow:var(--fusioni-shadow-md);color:#fff;font-weight:600;padding:.75rem 1.5rem;transition:var(--fusioni-transition)}.fusioni-btn-primary:hover{background:linear-gradient(135deg,var(--fusioni-primary-dark) 0,var(--fusioni-primary) 100%);box-shadow:var(--fusioni-shadow-lg);color:#fff;transform:translateY(-1px)}.fusioni-btn-danger{color:var(--fusioni-error)}.fusioni-btn-danger:hover{background:var(--fusioni-error);color:#fff}.fusioni-btn-text{background:transparent;color:var(--fusioni-primary);padding:.25rem .5rem}.fusioni-btn-text:hover{background:var(--fusioni-bg-tertiary);color:var(--fusioni-primary)}.fusioni-btn-send{background:var(--fusioni-primary);color:#fff}.fusioni-btn-send:hover{background:var(--fusioni-primary-dark);color:#fff}.fusioni-btn-send:disabled{background:var(--fusioni-text-muted);color:var(--fusioni-text-light)}.fusioni-btn-send-audio{background:var(--fusioni-success)}.fusioni-btn-send-audio:hover{background:#059669}.fusioni-btn-recording{animation:recordingPulse 2s ease-in-out infinite;background:var(--fusioni-error);color:#fff}.fusioni-btn-recording:hover{background:#dc2626;color:#fff}.fusioni-confirmation-widget{display:flex;gap:.75rem;padding-top:1.25rem}.fusioni-btn-confirm{background:linear-gradient(135deg,var(--fusioni-primary) 0,var(--fusioni-primary-light) 100%);border:none;border-radius:var(--fusioni-radius-lg);box-shadow:var(--fusioni-shadow-md);color:#fff;font-size:.875rem;font-weight:600;padding:.75rem 1.5rem;transition:var(--fusioni-transition)}.fusioni-btn-confirm:hover:not(:disabled){background:linear-gradient(135deg,var(--fusioni-primary-dark) 0,var(--fusioni-primary) 100%);box-shadow:var(--fusioni-shadow-lg);color:#fff;transform:translateY(-1px) scale(1.05)}.fusioni-btn-confirm:active:not(:disabled){transform:translateY(0) scale(1)}.fusioni-btn-confirm:disabled{background:var(--fusioni-primary);cursor:not-allowed;opacity:.5;transform:none}.fusioni-btn-cancel{background:var(--fusioni-secondary);border:none;border-radius:var(--fusioni-radius-lg);box-shadow:var(--fusioni-shadow-md);color:#fff;font-size:.875rem;font-weight:600;padding:.75rem 1.5rem;transition:var(--fusioni-transition)}.fusioni-btn-cancel:hover:not(:disabled){background:var(--fusioni-secondary);box-shadow:var(--fusioni-shadow-lg);color:#fff;transform:translateY(-1px) scale(1.05)}.fusioni-btn-cancel:active:not(:disabled){transform:translateY(0) scale(1)}.fusioni-btn-cancel:disabled{cursor:not-allowed;opacity:.5;transform:none}.dark .fusioni-btn-cancel,.dark .fusioni-btn-cancel:hover:not(:disabled),.fusioni-btn-cancel:disabled{background:var(--fusioni-secondary)}.fusioni-audio-recorder{align-items:center;display:flex;gap:.5rem}.fusioni-recording-indicator{align-items:center;display:flex;justify-content:center}.fusioni-recording-dot{animation:recordingPulse 1.5s ease-in-out infinite;background:#fff;border-radius:50%;height:8px;width:8px}.fusioni-recording-timer{color:var(--fusioni-error);font-size:.75rem;font-weight:500;min-width:3rem;text-align:center}.fusioni-audio-error{background:var(--fusioni-error);border-radius:var(--fusioni-radius);bottom:100%;color:#fff;font-size:.75rem;left:0;margin-bottom:.5rem;padding:.5rem;position:absolute;right:0}.fusioni-audio-error p{margin:0 0 .25rem}.fusioni-audio-error button{background:transparent;border:1px solid #fff;border-radius:var(--fusioni-radius);color:#fff;cursor:pointer;font-size:.75rem;padding:.25rem .5rem}.fusioni-chat-loader{padding:1rem;text-align:center}.fusioni-loader-content{align-items:center;display:flex;gap:.75rem;justify-content:center}.fusioni-loader-dots{display:flex;gap:.25rem}.fusioni-loader-dot{animation:dotPulse 1.5s ease-in-out infinite;background:var(--fusioni-primary);border-radius:50%;height:6px;width:6px}.fusioni-loader-dot:nth-child(2){animation-delay:.2s}.fusioni-loader-dot:nth-child(3){animation-delay:.4s}.fusioni-loader-text{color:var(--fusioni-text-secondary);font-size:.875rem}.fusioni-chat-main-header{align-items:center;backdrop-filter:blur(10px);background:var(--fusioni-bg-tertiary);border-bottom:1px solid var(--fusioni-border-light);display:flex;justify-content:space-between;padding:1rem;position:relative;z-index:5}.fusioni-chat-widget:not(.dark) .fusioni-chat-main-header{background:hsla(0,0%,100%,.8)}.fusioni-header-actions{align-items:center;display:flex;gap:.75rem}.fusioni-conversation-toggle{align-items:center;background:var(--fusioni-bg-primary);border:1px solid var(--fusioni-border);border-radius:var(--fusioni-radius-lg);color:var(--fusioni-text-secondary);cursor:pointer;display:flex;font-size:.875rem;gap:.5rem;padding:.5rem .75rem;transition:var(--fusioni-transition)}.fusioni-conversation-toggle:hover{background:var(--fusioni-primary);border-color:var(--fusioni-primary);color:#fff}.fusioni-conversation-toggle-icon{height:16px;transition:transform var(--fusioni-transition);width:16px}.fusioni-conversation-toggle.open .fusioni-conversation-toggle-icon{transform:rotate(180deg)}.fusioni-connection-indicator,.fusioni-connection-status{align-items:center;display:flex}.fusioni-connection-indicator{border-radius:var(--fusioni-radius);padding:.25rem;transition:var(--fusioni-transition)}.fusioni-connection-dot{border-radius:50%;height:8px;transition:var(--fusioni-transition);width:8px}.fusioni-connection-indicator.connected .fusioni-connection-dot{background:var(--fusioni-success);box-shadow:0 0 0 2px rgba(16,185,129,.2)}.fusioni-connection-indicator.disconnected .fusioni-connection-dot{background:var(--fusioni-text-muted);box-shadow:0 0 0 2px rgba(148,163,184,.2)}.fusioni-language-switcher{display:inline-block;position:relative}.fusioni-language-button{align-items:center;background:var(--fusioni-bg-primary);border:1px solid var(--fusioni-border);border-radius:var(--fusioni-radius-lg);color:var(--fusioni-text-primary);cursor:pointer;display:flex;font-size:.875rem;gap:.5rem;min-width:120px;padding:.5rem .75rem;transition:var(--fusioni-transition)}.fusioni-language-button:hover{background:var(--fusioni-bg-secondary);border-color:var(--fusioni-primary)}.fusioni-language-flag{font-size:1rem;line-height:1}.fusioni-language-name{flex:1;font-weight:500;text-align:left}.fusioni-language-arrow{transition:transform var(--fusioni-transition)}.fusioni-language-arrow.open{transform:rotate(180deg)}.fusioni-language-dropdown{background:var(--fusioni-bg-primary);border:1px solid var(--fusioni-border);border-radius:var(--fusioni-radius-lg);box-shadow:var(--fusioni-shadow-lg);left:0;margin-top:.25rem;overflow:hidden;position:absolute;right:0;top:100%;z-index:1000}.fusioni-language-option{align-items:center;background:transparent;border:none;color:var(--fusioni-text-primary);cursor:pointer;display:flex;font-size:.875rem;gap:.5rem;padding:.75rem;text-align:left;transition:var(--fusioni-transition);width:100%}.fusioni-language-option:hover{background:var(--fusioni-bg-secondary)}.fusioni-language-option.active{background:var(--fusioni-primary);color:#fff}.fusioni-language-check{margin-left:auto;opacity:.8}.fusioni-chat-welcome{align-items:center;background:var(--fusioni-bg-primary);bottom:0;box-sizing:border-box;display:flex;height:100%;justify-content:center;left:0;overflow:hidden;padding:3rem 2rem;position:absolute;right:0;top:0;width:100%}.fusioni-chat-widget:not(.dark) .fusioni-chat-welcome{background:linear-gradient(135deg,var(--fusioni-bg-accent) 0,var(--fusioni-bg-primary) 100%)}.fusioni-chat-welcome-content{box-sizing:border-box;margin:0 auto;max-width:320px;text-align:center;width:100%}.fusioni-chat-welcome-content h3{-webkit-text-fill-color:transparent;background:linear-gradient(135deg,var(--fusioni-primary) 0,var(--fusioni-primary-light) 100%);-webkit-background-clip:text;background-clip:text;color:var(--fusioni-text-primary);font-size:1.5rem;font-weight:700;margin:0 0 1rem}.fusioni-chat-welcome-content p{color:var(--fusioni-text-secondary);font-size:1rem;line-height:1.6;margin:0 0 2rem}.fusioni-chat-error{background:var(--fusioni-error);border-radius:var(--fusioni-radius);color:#fff;margin:1rem;padding:1rem}.fusioni-chat-error p{margin:0 0 .5rem}.fusioni-chat-error button{background:transparent;border:1px solid #fff;border-radius:var(--fusioni-radius);color:#fff;cursor:pointer;padding:.25rem .5rem}.fusioni-spinner{animation:spin 1s linear infinite;border-top:2px solid var(--fusioni-border);border:2px solid var(--fusioni-border);border-radius:50%;border-top-color:var(--fusioni-primary);height:16px;width:16px}@keyframes shimmer{0%{left:-100%}to{left:100%}}@keyframes pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.7;transform:scale(1.05)}}@keyframes dotPulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.2)}}@keyframes recordingPulse{0%,to{box-shadow:0 0 5px rgba(239,68,68,.5)}50%{box-shadow:0 0 20px rgba(239,68,68,.8),0 0 30px rgba(239,68,68,.6)}}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes neuralPulse{0%,to{box-shadow:0 0 8px var(--fusioni-primary);opacity:.6;transform:scale(1)}50%{box-shadow:0 0 16px var(--fusioni-primary);opacity:1;transform:scale(1.5)}}@keyframes neuralFlow{0%{opacity:0;transform:scaleX(0)}50%{opacity:1;transform:scaleX(1)}to{opacity:0;transform:scaleX(0)}}@keyframes aiPulse{0%,to{opacity:.6;transform:scale(1)}50%{opacity:1;transform:scale(1.2)}}@keyframes aiRotate{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes statusPulse{0%,to{box-shadow:0 0 4px var(--fusioni-success);opacity:1;transform:scale(1)}50%{box-shadow:0 0 8px var(--fusioni-success);opacity:.8;transform:scale(1.2)}}@keyframes newBadgePulse{0%,to{box-shadow:0 2px 8px rgba(217,119,6,.3);transform:scale(1)}50%{box-shadow:0 4px 16px rgba(217,119,6,.5);transform:scale(1.05)}}@keyframes newPulseRing{0%{opacity:.6;transform:scale(1)}50%{opacity:.2;transform:scale(1.3)}to{opacity:0;transform:scale(1.6)}}@keyframes dataFlow{0%{left:-100%;opacity:0}10%{opacity:1}90%{opacity:1}to{left:100%;opacity:0}}@keyframes magneticHover{0%{transform:translateY(0) scale(1)}50%{transform:translateY(-2px) scale(1.02)}to{transform:translateY(-1px) scale(1.01)}}@keyframes neuralGlow{0%,to{filter:brightness(1) saturate(1)}50%{filter:brightness(1.2) saturate(1.3)}}@media (max-width:768px){.fusioni-chat-panel{height:calc(100vh - 1rem);max-height:none;max-width:none;width:calc(100vw - 1rem)}.fusioni-chat-panel-bottom-left,.fusioni-chat-panel-bottom-right,.fusioni-chat-panel-top-left,.fusioni-chat-panel-top-right{bottom:.5rem;height:calc(100vh - 1rem);top:.5rem}.fusioni-conversation-list{border-bottom:1px solid var(--fusioni-border);border-right:none;width:100%}.fusioni-chat-container{flex-direction:column}.fusioni-message-bubble:hover{transform:scale(1.01)}}.fusioni-conversations::-webkit-scrollbar,.fusioni-message-list::-webkit-scrollbar{width:6px}.fusioni-conversations::-webkit-scrollbar-track,.fusioni-message-list::-webkit-scrollbar-track{background:var(--fusioni-bg-tertiary)}.fusioni-conversations::-webkit-scrollbar-thumb,.fusioni-message-list::-webkit-scrollbar-thumb{background:var(--fusioni-text-muted);border-radius:3px}.fusioni-conversations::-webkit-scrollbar-thumb:hover,.fusioni-message-list::-webkit-scrollbar-thumb:hover{background:var(--fusioni-text-secondary)}.fusioni-url-preview{background:var(--fusioni-bg-primary);border:1px solid var(--fusioni-border);border-radius:var(--fusioni-radius);box-shadow:var(--fusioni-shadow);margin:.5rem 0;overflow:hidden;transition:var(--fusioni-transition)}.fusioni-url-preview:hover{box-shadow:var(--fusioni-shadow-md);transform:translateY(-1px)}.fusioni-url-preview-compact{margin:.25rem 0}.fusioni-url-preview-loading{align-items:center;color:var(--fusioni-text-secondary);display:flex;font-size:.875rem;gap:.5rem;padding:.75rem}.fusioni-url-preview-spinner{animation:fusioni-spin 1s linear infinite;border-top:2px solid var(--fusioni-border);border:2px solid var(--fusioni-border);border-radius:50%;border-top-color:var(--fusioni-primary);height:16px;width:16px}@keyframes fusioni-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fusioni-url-preview-error{align-items:center;background:rgba(220,38,38,.05);color:var(--fusioni-error);display:flex;font-size:.875rem;justify-content:space-between;padding:.75rem}.fusioni-url-preview-content{position:relative}.fusioni-url-preview-close{align-items:center;background:rgba(0,0,0,.5);border:none;border-radius:50%;color:#fff;cursor:pointer;display:flex;font-size:16px;height:24px;justify-content:center;line-height:1;position:absolute;right:.5rem;top:.5rem;transition:var(--fusioni-transition);width:24px;z-index:10}.fusioni-url-preview-close:hover{background:rgba(0,0,0,.7)}.fusioni-url-preview-link{display:flex;transition:var(--fusioni-transition)}.fusioni-url-preview-link,.fusioni-url-preview-link:hover{color:inherit;text-decoration:none}.fusioni-url-preview-image{flex-shrink:0;height:80px;overflow:hidden;width:120px}.fusioni-url-preview-compact .fusioni-url-preview-image{height:60px;width:80px}.fusioni-url-preview-image img{height:100%;object-fit:cover;transition:var(--fusioni-transition);width:100%}.fusioni-url-preview-link:hover .fusioni-url-preview-image img{transform:scale(1.05)}.fusioni-url-preview-text{display:flex;flex:1;flex-direction:column;justify-content:space-between;min-width:0;padding:.75rem}.fusioni-url-preview-compact .fusioni-url-preview-text{padding:.5rem}.fusioni-url-preview-title{-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;color:var(--fusioni-text-primary);display:-webkit-box;font-size:.875rem;font-weight:600;line-height:1.25;margin-bottom:.25rem;overflow:hidden}.fusioni-url-preview-compact .fusioni-url-preview-title{-webkit-line-clamp:1;line-clamp:1;font-size:.8125rem}.fusioni-url-preview-description{-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;color:var(--fusioni-text-secondary);display:-webkit-box;font-size:.8125rem;line-height:1.4;margin-bottom:.25rem;overflow:hidden}.fusioni-url-preview-compact .fusioni-url-preview-description{-webkit-line-clamp:1;line-clamp:1;font-size:.75rem}.fusioni-url-preview-domain{color:var(--fusioni-text-muted);font-size:.75rem;letter-spacing:.025em;text-transform:uppercase}.fusioni-message-url-previews{margin-top:.5rem}.fusioni-chat-widget.dark .fusioni-url-preview{background:var(--fusioni-bg-dark);border-color:var(--fusioni-border-dark)}.fusioni-chat-widget.dark .fusioni-url-preview-title{color:var(--fusioni-text-light)}.fusioni-chat-widget.dark .fusioni-url-preview-description{color:var(--fusioni-text-secondary)}.fusioni-chat-widget.dark .fusioni-url-preview-error{background:rgba(220,38,38,.1)}.fusioni-stream-messages{display:flex;flex-direction:column;gap:8px;margin-top:8px}.fusioni-stream-message-item{align-items:flex-start;display:flex;gap:8px}.fusioni-stream-message-logo-wrap{flex-shrink:0}.fusioni-stream-message-logo-frame{align-items:center;background:linear-gradient(to bottom right,#f3f4f6,#e5e7eb);border-radius:12px;box-shadow:var(--fusioni-shadow-lg);display:flex;height:32px;justify-content:center;overflow:hidden;width:32px}.fusioni-chat-widget.dark .fusioni-stream-message-logo-frame{background:linear-gradient(to bottom right,#1f2937,#111827)}.fusioni-stream-message-logo-img{animation:fusioni-spin 1s linear infinite;height:32px;margin:0;object-fit:contain;padding:4px;width:32px}.fusioni-stream-message-spotlight{margin-top:4px;min-width:0}.fusioni-spotlight{--mask-x:0%;--mask-y:50%;--text-spotlight-size:100px;display:block}.fusioni-spotlight-title{color:inherit;display:inline-block;position:relative}.fusioni-spotlight-text-base,.fusioni-spotlight-text-overlay,.fusioni-spotlight-title{font-family:inherit;font-size:16px;font-weight:inherit;letter-spacing:inherit;line-height:1.2}.fusioni-spotlight-text-base,.fusioni-spotlight-text-overlay{white-space:nowrap}.fusioni-spotlight-text-base{opacity:.2}.fusioni-spotlight-text-base,.fusioni-spotlight-text-overlay{-webkit-text-fill-color:transparent;background:currentColor;-webkit-background-clip:text;background-clip:text}.fusioni-spotlight-text-overlay{left:0;mask:radial-gradient(circle var(--text-spotlight-size) at var(--mask-x) var(--mask-y),#000 0,transparent 70%);-webkit-mask:radial-gradient(circle var(--text-spotlight-size) at var(--mask-x) var(--mask-y),#000 0,transparent 70%);opacity:1;pointer-events:none;position:absolute;top:0}@keyframes fusioni-dotPulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.2)}}.fusioni-chat-widget.dark .fusioni-conversation-item{background:var(--fusioni-bg-dark);border-color:var(--fusioni-border-dark)}.fusioni-chat-widget.dark .fusioni-conversation-item:before{background:linear-gradient(135deg,rgba(59,130,246,.05),rgba(37,99,235,.1) 50%,rgba(59,130,246,.05))}.fusioni-chat-widget.dark .fusioni-conversation-item:hover{background:var(--fusioni-bg-secondary);border-color:var(--fusioni-primary-light)}.fusioni-chat-widget.dark .fusioni-neural-node{background:var(--fusioni-primary-light);box-shadow:0 0 8px var(--fusioni-primary-light)}.fusioni-chat-widget.dark .fusioni-neural-connection{background:linear-gradient(90deg,transparent 0,var(--fusioni-primary-light) 50%,transparent 100%)}.fusioni-chat-widget.dark .fusioni-ai-core{color:var(--fusioni-primary-light)}.fusioni-chat-widget.dark .fusioni-ai-pulse-ring{border-color:var(--fusioni-primary-light)}.fusioni-chat-widget.dark .fusioni-data-stream{background:linear-gradient(90deg,transparent 0,var(--fusioni-primary-light) 20%,var(--fusioni-primary) 50%,var(--fusioni-primary-light) 80%,transparent 100%)}.fusioni-chat-widget.dark .fusioni-conversation-title-text{color:var(--fusioni-text-light)}.fusioni-chat-widget.dark .fusioni-conversation-status{color:var(--fusioni-text-secondary)}.fusioni-chat-widget.dark .fusioni-conversation-date{color:var(--fusioni-text-muted)}@media (prefers-reduced-motion:reduce){.fusioni-ai-core,.fusioni-ai-pulse-ring,.fusioni-conversation-item,.fusioni-data-stream,.fusioni-neural-connection,.fusioni-neural-node,.fusioni-new-badge,.fusioni-new-pulse,.fusioni-status-dot{animation:none!important;transition:none!important}.fusioni-conversation-item:hover{transform:none!important}}@media (prefers-contrast:high){.fusioni-conversation-item{border-width:2px}.fusioni-conversation-item.active{border-width:3px}.fusioni-ai-pulse-ring,.fusioni-neural-node,.fusioni-status-dot{border:1px solid;box-shadow:none}}.fusioni-conversation-item:focus-visible{outline:2px solid var(--fusioni-primary);outline-offset:2px}.fusioni-conversation-item.active:focus-visible{outline-color:#fff}.fusioni-conversation-item{contain:layout style paint;will-change:transform,box-shadow}.fusioni-ai-pulse-ring,.fusioni-data-stream,.fusioni-neural-connection,.fusioni-neural-node{contain:layout style paint;will-change:transform,opacity}.fusioni-ai-core,.fusioni-conversation-item,.fusioni-data-stream,.fusioni-neural-node{backface-visibility:hidden;perspective:1000px;transform:translateZ(0)}@keyframes attentionRingPulse{0%,to{opacity:0;transform:scale(1)}50%{opacity:.8;transform:scale(1.1)}}@keyframes neuralParticleFloat{0%,to{opacity:0;transform:scale(.5) translateY(0)}25%{opacity:.6;transform:scale(1) translateY(-10px)}50%{opacity:1;transform:scale(1.2) translateY(-20px)}75%{opacity:.6;transform:scale(1) translateY(-10px)}}@keyframes brainActivityPulse{0%,to{opacity:0;transform:scale(.8)}50%{opacity:1;transform:scale(1.2)}}@keyframes brainCorePulse{0%,to{opacity:1;transform:translate(-50%,-50%) scale(1)}50%{opacity:.7;transform:translate(-50%,-50%) scale(1.3)}}@keyframes attentionWaveExpand{0%{opacity:.8;transform:scale(.5)}50%{opacity:.4;transform:scale(1.2)}to{opacity:0;transform:scale(2)}}@keyframes periodicAttentionPulse{0%,90%{opacity:0;transform:scale(1)}95%{opacity:.6;transform:scale(1.3)}to{opacity:0;transform:scale(1.5)}}@keyframes enhancedGlowPulse{0%,to{opacity:0;transform:scale(1)}50%{opacity:.4;transform:scale(1.1)}}@keyframes magneticFieldRotate{0%{opacity:.3;transform:rotate(0deg)}50%{opacity:.6}to{opacity:.3;transform:rotate(1turn)}}@keyframes floatingButtonEntrance{0%{transform:scale(1)}20%{transform:scale(6)}40%{transform:scale(1.1)}70%{transform:scale(.8)}to{transform:scale(1)}}@keyframes attentionSequenceTrigger{0%{opacity:0;transform:scale(.8)}20%{opacity:1;transform:scale(1.2)}40%{opacity:.8;transform:scale(1)}60%{opacity:1;transform:scale(1.1)}80%{opacity:.6;transform:scale(.9)}to{opacity:0;transform:scale(1)}}@keyframes floatingButtonHover{0%{transform:translateY(0) scale(1) rotate(0deg)}25%{transform:translateY(-3px) scale(1.05) rotate(1deg)}50%{transform:translateY(-5px) scale(1.08) rotate(0deg)}75%{transform:translateY(-2px) scale(1.03) rotate(-1deg)}to{transform:translateY(0) scale(1) rotate(0deg)}}@keyframes aiProcessingIndicator{0%,to{opacity:.6;transform:scale(1)}50%{opacity:1;transform:scale(1.3)}}@keyframes neuralConnectionFlow{0%{opacity:0;transform:scaleX(0)}20%{opacity:.8;transform:scaleX(.3)}50%{opacity:1;transform:scaleX(1)}80%{opacity:.8;transform:scaleX(.7)}to{opacity:0;transform:scaleX(0)}}.fusioni-floating-button-attention-active .fusioni-floating-button-attention-ring,.fusioni-floating-button-attention-active .fusioni-floating-button-attention-ring-2,.fusioni-floating-button-attention-active .fusioni-floating-button-attention-ring-3,.fusioni-floating-button-attention-active .fusioni-floating-button-attention-sequence,.fusioni-floating-button-attention-active .fusioni-floating-button-brain-activity,.fusioni-floating-button-attention-active .fusioni-floating-button-glow,.fusioni-floating-button-attention-active .fusioni-floating-button-magnetic-field,.fusioni-floating-button-attention-active .fusioni-floating-button-neural-particles,.fusioni-floating-button-attention-active .fusioni-floating-button-periodic-pulse{opacity:1}.fusioni-floating-button-entering{animation:floatingButtonEntrance 1.2s ease-in-out forwards}@media (prefers-reduced-motion:reduce){.fusioni-attention-wave,.fusioni-floating-button-attention-ring,.fusioni-floating-button-attention-ring-2,.fusioni-floating-button-attention-ring-3,.fusioni-floating-button-brain-activity,.fusioni-floating-button-glow,.fusioni-floating-button-magnetic-field,.fusioni-floating-button-periodic-pulse,.fusioni-floating-button:hover,.fusioni-neural-particle{animation:none!important}}.fusioni-dialog-backdrop{animation:fadeIn .2s ease-out;backdrop-filter:blur(4px);background-color:rgba(0,0,0,.5);z-index:9998}.fusioni-dialog-backdrop,.fusioni-dialog-container{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0}.fusioni-dialog-container{pointer-events:none;z-index:9999}.fusioni-dialog{animation:dialogSlideIn .3s cubic-bezier(.4,0,.2,1);background-color:var(--fusioni-bg-primary);border:1px solid var(--fusioni-border);border-radius:var(--fusioni-radius-lg);box-shadow:var(--fusioni-shadow-2xl);max-width:420px;overflow:hidden;pointer-events:auto;width:90%}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes dialogSlideIn{0%{opacity:0;transform:translateY(-20px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.fusioni-dialog-header{border-bottom:1px solid var(--fusioni-border);padding:1.5rem 1.5rem 1rem}.fusioni-dialog-title{color:var(--fusioni-text-primary);font-size:1.25rem;font-weight:600;line-height:1.5;margin:0}.fusioni-dialog-body{padding:1.5rem}.fusioni-dialog-message{color:var(--fusioni-text-secondary);font-size:.9375rem;line-height:1.6;margin:0}.fusioni-dialog-footer{border-top:1px solid var(--fusioni-border);display:flex;gap:.75rem;justify-content:flex-end;padding:1rem 1.5rem 1.5rem}.fusioni-dialog-cancel,.fusioni-dialog-confirm{min-width:80px}.fusioni-dialog-confirm-danger{background-color:var(--fusioni-error);border-color:var(--fusioni-error);color:var(--fusioni-text-light)}.fusioni-dialog-confirm-danger:hover:not(:disabled){background-color:#b91c1c;border-color:#b91c1c;box-shadow:var(--fusioni-shadow-md);transform:translateY(-1px)}.fusioni-dialog-confirm-danger:active:not(:disabled){box-shadow:var(--fusioni-shadow);transform:translateY(0)}.fusioni-dialog-confirm-warning{background-color:var(--fusioni-warning);border-color:var(--fusioni-warning);color:var(--fusioni-text-light)}.fusioni-dialog-confirm-warning:hover:not(:disabled){background-color:#b45309;border-color:#b45309;box-shadow:var(--fusioni-shadow-md);transform:translateY(-1px)}.fusioni-dialog-confirm-info{background-color:var(--fusioni-info);border-color:var(--fusioni-info);color:var(--fusioni-text-light)}.fusioni-dialog-confirm-info:hover:not(:disabled){background-color:#0369a1;border-color:#0369a1;box-shadow:var(--fusioni-shadow-md);transform:translateY(-1px)}.fusioni-chat-widget.dark .fusioni-dialog{background-color:var(--fusioni-bg-secondary);border-color:var(--fusioni-border)}.fusioni-chat-widget.dark .fusioni-dialog-header{border-bottom-color:var(--fusioni-border)}.fusioni-chat-widget.dark .fusioni-dialog-footer{border-top-color:var(--fusioni-border)}.fusioni-image-gallery-overlay{--fusioni-ig-img-offset:8rem;align-items:stretch;animation:fusionImageGalleryFadeIn .2s ease-out;box-sizing:border-box;display:flex;flex-direction:column;inset:0;justify-content:flex-start;overflow:hidden;position:fixed;z-index:100000}.fusioni-image-gallery-overlay.fusioni-image-gallery-has-thumbs{--fusioni-ig-img-offset:14rem}.fusioni-image-gallery-body{display:flex;flex:1;flex-direction:column;min-height:0;min-width:0;width:100%}.fusioni-image-gallery-stage{align-items:center;display:flex;flex:1 1 0;justify-content:center;min-height:0;min-width:0;position:relative;width:100%}.fusioni-image-gallery-overlay.fusioni-image-gallery-theme-light{background:linear-gradient(180deg,#374151 0,#9ca3af)}.fusioni-image-gallery-overlay.fusioni-image-gallery-theme-dark{background:linear-gradient(180deg,#111827 0,#1f2937)}@keyframes fusionImageGalleryFadeIn{0%{opacity:0}to{opacity:1}}.fusioni-image-gallery-topbar{align-items:center;background:linear-gradient(180deg,rgba(0,0,0,.7),transparent);display:flex;justify-content:space-between;left:0;padding:.75rem 1rem;pointer-events:none;position:absolute;right:0;top:0;z-index:20}.fusioni-image-gallery-topbar-spacer{width:2.5rem}.fusioni-image-gallery-counter{color:hsla(0,0%,100%,.9);font-size:.875rem;font-variant-numeric:tabular-nums;font-weight:500;letter-spacing:.025em}.fusioni-image-gallery-close{align-items:center;background-color:hsla(0,0%,100%,.1);border:none;border-radius:9999px;color:#fff;cursor:pointer;display:flex;height:2.5rem;justify-content:center;pointer-events:auto;transition:background-color .15s ease;width:2.5rem}.fusioni-image-gallery-close:hover{background-color:hsla(0,0%,100%,.2)}.fusioni-image-gallery-close:focus{outline:none}.fusioni-image-gallery-close:focus-visible{box-shadow:0 0 0 2px hsla(0,0%,100%,.5)}.fusioni-image-gallery-icon{height:1.25rem;width:1.25rem}.fusioni-image-gallery-icon-lg{height:2rem;width:2rem}.fusioni-image-gallery-content{align-items:center;box-sizing:border-box;display:flex;flex:1 1 0;justify-content:center;max-width:100%;min-height:0;min-width:0;padding:4rem 4.5rem;width:100%}.fusioni-image-gallery-img{animation:fusionImageGalleryZoomIn .25s ease-out;border-radius:.5rem;box-shadow:0 25px 50px -12px rgba(0,0,0,.5);display:block;height:auto;max-height:calc(100vh - var(--fusioni-ig-img-offset, 8rem));max-height:calc(100dvh - var(--fusioni-ig-img-offset, 8rem));max-width:100%;object-fit:contain;width:auto}.fusioni-image-gallery-thumbs-wrap{box-sizing:border-box;flex:0 0 auto;margin:0 auto;max-height:12.5rem;max-width:min(100vw - 2rem,42rem);overflow:hidden;padding:0 1rem .75rem;width:100%}.fusioni-image-gallery-thumbs-wrap .fusioni-gallery-strip--lightbox .fusioni-gallery-strip-grid{gap:.5rem}.fusioni-image-gallery-thumbs-wrap .fusioni-gallery-strip--lightbox .fusioni-gallery-strip-cell{align-items:center;display:flex;justify-content:center;max-height:3.75rem}.fusioni-image-gallery-thumb{background:rgba(0,0,0,.35);border:2px solid transparent;border-radius:var(--fusioni-radius-md);box-sizing:border-box;cursor:pointer;display:block;flex-shrink:0;height:3.5rem;margin:0 auto;max-width:5.5rem;overflow:hidden;padding:0;transition:border-color .15s ease,transform .15s ease;width:100%}.fusioni-image-gallery-thumb:hover{border-color:hsla(0,0%,100%,.45)}.fusioni-image-gallery-thumb:focus{outline:none}.fusioni-image-gallery-thumb:focus-visible{box-shadow:0 0 0 2px hsla(0,0%,100%,.55)}.fusioni-image-gallery-thumb-selected{border-color:hsla(0,0%,100%,.9)}.fusioni-image-gallery-thumb img{display:block;height:100%;object-fit:cover;width:100%}.fusioni-image-gallery-thumbs-wrap .fusioni-gallery-strip-dots{margin-top:.5rem}@keyframes fusionImageGalleryZoomIn{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}.fusioni-image-gallery-nav{align-items:center;background-color:hsla(0,0%,100%,.12);border:none;border-radius:50%;color:#fff;cursor:pointer;display:flex;flex-shrink:0;height:3rem;justify-content:center;position:absolute;top:50%;transform:translateY(-50%);transition:background-color .15s ease,transform .15s ease;width:3rem;z-index:10}.fusioni-image-gallery-nav:hover{background-color:hsla(0,0%,100%,.22);transform:translateY(-50%) scale(1.05)}.fusioni-image-gallery-nav:active{transform:translateY(-50%) scale(.98)}.fusioni-image-gallery-nav:focus{outline:none}.fusioni-image-gallery-nav:focus-visible{box-shadow:0 0 0 2px hsla(0,0%,100%,.5)}.fusioni-image-gallery-nav-prev{left:1rem}.fusioni-image-gallery-nav-next{right:1rem}@media (min-width:640px){.fusioni-image-gallery-nav{height:3.5rem;width:3.5rem}.fusioni-image-gallery-nav-prev{left:1.5rem}.fusioni-image-gallery-nav-next{right:1.5rem}}.fusioni-image.fusioni-image-clickable{cursor:pointer}.fusioni-image-clickable-wrap{background:none;border:none;border-radius:var(--fusioni-radius);cursor:pointer;display:block;margin:0;padding:0;text-align:left;width:100%}.fusioni-image-clickable-wrap:focus-visible{outline:2px solid var(--fusioni-primary);outline-offset:2px}.fusioni-gallery-strip{width:100%}.fusioni-gallery-strip-viewport{max-width:100%;overflow:hidden;width:100%}.fusioni-gallery-strip-track{display:flex;transition:margin-left .3s ease-in-out;width:100%}.fusioni-gallery-strip-page{box-sizing:border-box;flex:0 0 100%;max-width:100%;min-width:0}.fusioni-gallery-strip-grid{display:grid;gap:.75rem}.fusioni-gallery-strip-cell{min-width:0}.fusioni-gallery-strip-dots{align-items:center;display:flex;gap:.5rem;justify-content:center;margin-top:1rem}.fusioni-gallery-strip-dot{border:none;border-radius:9999px;cursor:pointer;height:.625rem;padding:0;transition:background-color .15s ease,transform .15s ease;width:.625rem}.fusioni-gallery-strip--document .fusioni-gallery-strip-dot{background-color:#d1d5db}.fusioni-chat-widget.dark .fusioni-gallery-strip--document .fusioni-gallery-strip-dot{background-color:#475569}.fusioni-gallery-strip--document .fusioni-gallery-strip-dot-active{background-color:var(--fusioni-primary)}.fusioni-chat-widget.dark .fusioni-gallery-strip--document .fusioni-gallery-strip-dot-active{background-color:var(--fusioni-primary-light)}.fusioni-gallery-strip--lightbox .fusioni-gallery-strip-dot{background-color:hsla(0,0%,100%,.35)}.fusioni-gallery-strip--lightbox .fusioni-gallery-strip-dot-active{background-color:hsla(0,0%,100%,.95);transform:scale(1.15)}.fusioni-gallery-strip-dot:focus-visible{outline:2px solid var(--fusioni-primary);outline-offset:2px}.fusioni-gallery-strip--lightbox .fusioni-gallery-strip-dot:focus-visible{outline-color:hsla(0,0%,100%,.85)}.fusioni-document-images{margin-top:.25rem;max-width:100%;min-width:0;position:relative;width:100%}.fusioni-document-images-header{align-items:center;display:flex;justify-content:center;margin-bottom:.75rem;min-height:1.25rem;position:relative}.fusioni-document-images-header:before{background:var(--fusioni-border);content:"";height:1px;left:0;position:absolute;right:0;top:50%;z-index:0}.fusioni-chat-widget.dark .fusioni-document-images-header:before{background:hsla(0,0%,100%,.12)}.fusioni-document-images-header-label{align-items:center;background:var(--fusioni-bg-secondary);color:var(--fusioni-text-secondary);display:inline-flex;font-size:.8125rem;font-weight:600;gap:.375rem;padding:0 .625rem;position:relative;z-index:1}.fusioni-document-images-header-icon{flex-shrink:0;height:1rem;opacity:.9;width:1rem}.fusioni-document-image-btn{background:hsla(0,0%,100%,.4);border:1px solid rgba(0,0,0,.1);border-radius:var(--fusioni-radius-xl);box-shadow:var(--fusioni-shadow);cursor:pointer;display:block;overflow:hidden;padding:0;position:relative;transition:transform .2s ease,box-shadow .2s ease;width:100%}.fusioni-chat-widget.dark .fusioni-document-image-btn{background:hsla(0,0%,100%,.05);border-color:hsla(0,0%,100%,.1)}.fusioni-document-image-btn:hover{box-shadow:var(--fusioni-shadow-md);transform:translateY(-2px)}.fusioni-document-image-btn:focus{outline:none}.fusioni-document-image-btn:focus-visible{box-shadow:0 0 0 2px rgba(37,99,235,.5)}.fusioni-document-image-aspect{aspect-ratio:4/3;width:100%}.fusioni-document-image-aspect img{display:block;height:100%;object-fit:cover;transition:transform .2s ease;width:100%}.fusioni-document-image-btn:hover .fusioni-document-image-aspect img{transform:scale(1.02)}
|