@elia-assistant/chatui 1.0.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.
Files changed (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +348 -0
  3. package/dist/App.d.ts +3 -0
  4. package/dist/assets/avatars/index.d.ts +4 -0
  5. package/dist/chat-store.js +96 -0
  6. package/dist/chatui.css +3 -0
  7. package/dist/chatui.css.d.ts +1 -0
  8. package/dist/chatui.iife.css +3 -0
  9. package/dist/chatui.iife.js +66 -0
  10. package/dist/chunks/i18n-BySVyBiz.js +2 -0
  11. package/dist/chunks/i18n-oL80Kbbg.js +1304 -0
  12. package/dist/chunks/middleware-DgE1WAsA.js +137 -0
  13. package/dist/chunks/settingsStore-BqlYxczg.js +254 -0
  14. package/dist/chunks/translation-B1sKHGC8.js +81 -0
  15. package/dist/chunks/translation-DYf8xjwU.js +81 -0
  16. package/dist/components/ChatView.d.ts +5 -0
  17. package/dist/components/CtaPopup.d.ts +6 -0
  18. package/dist/components/FaqTab.d.ts +7 -0
  19. package/dist/components/InputArea.d.ts +8 -0
  20. package/dist/components/MessageBubble.d.ts +7 -0
  21. package/dist/components/NotificationsTab.d.ts +7 -0
  22. package/dist/components/SettingsModal.d.ts +5 -0
  23. package/dist/components/Sidebar.d.ts +5 -0
  24. package/dist/components/Tabs.d.ts +12 -0
  25. package/dist/components/ThemePicker.d.ts +1 -0
  26. package/dist/createChat.d.ts +23 -0
  27. package/dist/hooks/useChat.d.ts +4 -0
  28. package/dist/hooks/useCta.d.ts +6 -0
  29. package/dist/hooks/useFeedJson.d.ts +11 -0
  30. package/dist/hooks/useTheme.d.ts +4 -0
  31. package/dist/i18n.d.ts +2 -0
  32. package/dist/index.d.ts +4 -0
  33. package/dist/index.js +10012 -0
  34. package/dist/lib/n8nClient.d.ts +18 -0
  35. package/dist/lib/storage.d.ts +3 -0
  36. package/dist/shims/use-sync-external-store-shim.d.ts +1 -0
  37. package/dist/store/chatStore.d.ts +37 -0
  38. package/dist/store/settingsStore.d.ts +23 -0
  39. package/dist/store.js +2 -0
  40. package/dist/themes.d.ts +4 -0
  41. package/dist/types/index.d.ts +138 -0
  42. package/dist/types.js +0 -0
  43. package/package.json +79 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Igor Demovic
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,348 @@
1
+ # @elia-assistant/chatui
2
+
3
+ A polished, self-contained chat widget built for [Elia Assistant](https://elia-asistent.com), compatible with [n8n](https://n8n.io)'s Chat Trigger.
4
+ Drop it in front of any n8n AI Agent workflow — no backend code needed.
5
+
6
+ Ships as a pre-built ESM bundle and a CDN-ready IIFE bundle. Config-compatible with [@n8n/chat](https://www.npmjs.com/package/@n8n/chat).
7
+
8
+ ---
9
+
10
+ ## Install
11
+
12
+ ### React app (bundler)
13
+
14
+ ```bash
15
+ npm install @elia-assistant/chatui
16
+ ```
17
+
18
+ ```ts
19
+ // src/main.tsx
20
+ import { App as ChatWidget } from '@elia-assistant/chatui'
21
+ import { useSettingsStore } from '@elia-assistant/chatui/store'
22
+ import '@elia-assistant/chatui/css'
23
+
24
+ useSettingsStore.getState().setConfig({
25
+ webhookUrl: 'https://your-n8n.example.com/webhook/abc',
26
+ mode: 'window',
27
+ })
28
+
29
+ // then render <ChatWidget /> inside a full-height container
30
+ ```
31
+
32
+ The host's `vite.config.ts` needs `optimizeDeps.exclude: ['@elia-assistant/chatui']` so Vite doesn't re-bundle the already-bundled package. See [example.html](./example.html) for the full integration guide.
33
+
34
+ ### Plain HTML (CDN, no bundler)
35
+
36
+ ```html
37
+ <link rel="stylesheet"
38
+ href="https://cdn.jsdelivr.net/npm/@elia-assistant/chatui/dist/chatui.iife.css">
39
+ <script src="https://cdn.jsdelivr.net/npm/@elia-assistant/chatui/dist/chatui.iife.js"></script>
40
+ <div id="chat"></div>
41
+ <script>
42
+ Chatui.createChat({
43
+ target: '#chat',
44
+ webhookUrl: 'https://your-n8n.example.com/webhook/abc',
45
+ mode: 'window',
46
+ })
47
+ </script>
48
+ ```
49
+
50
+ `unpkg.com` works too: `https://unpkg.com/@elia-assistant/chatui/dist/chatui.iife.js`.
51
+
52
+ ### Vanilla JS (bundler, no React)
53
+
54
+ ```ts
55
+ import { createChat } from '@elia-assistant/chatui'
56
+ import '@elia-assistant/chatui/css'
57
+
58
+ const instance = createChat({
59
+ target: '#chat',
60
+ webhookUrl: '...',
61
+ mode: 'window',
62
+ })
63
+ // instance.unmount() to remove
64
+ ```
65
+
66
+ ---
67
+
68
+ ## Features
69
+
70
+ - **n8n webhook compatible** — same parameters as `@n8n/chat`; works with any Chat Trigger out of the box
71
+ - **Three display modes** — `fullscreen`, `window` (floating button + popup), or `mixed` (window on desktop, fullscreen on mobile)
72
+ - **Bottom-sheet style** — opt-in `fullscreenSheet` mode covers ~3/4 of the screen with a rounded top instead of going edge-to-edge
73
+ - **Optional tabs** — surface a Notifications feed (URL or inline JSON) and a searchable FAQ alongside the chat
74
+ - **SSE streaming** — optional word-by-word bot responses
75
+ - **10 built-in themes** — Midnight, Ivory, Sunrise, Cosmos, Forest, Ocean, Cherry, Navy, Lavender, Amber; switch at runtime
76
+ - **12 built-in avatars** + file upload (max 500 KB) or URL — same picker for the floating button icon
77
+ - **CTA popup** — timed speech-bubble with optional Web Audio notification, window mode only
78
+ - **Conversation history** — optional sidebar with persistent multi-session history
79
+ - **Per-language content** — initial messages, bot name, CTA text, welcome subtitle, tab titles, all configurable per language
80
+ - **Multilingual UI** — English and Slovak bundled; extend via `i18next.addResourceBundle` at runtime
81
+ - **Markdown rendering** — bot messages render full GFM via `react-markdown`
82
+ - **Configurable "Powered by" footer** — change the link text/URL or hide it entirely
83
+ - **Persistent settings** — config + theme + language survive page reloads (`localStorage`)
84
+ - **Lockable UI** — `hideSettings: true` removes the gear, theme picker, and settings modal (default for npm consumers)
85
+ - **Export config** — generate ready-to-paste host code from the settings modal
86
+
87
+ ---
88
+
89
+ ## Configuration
90
+
91
+ All options live on `ChatConfig`. Set them once at boot via `setConfig()` (or pass to `createChat()`).
92
+
93
+ ### Required
94
+
95
+ | Parameter | Type | Description |
96
+ |---|---|---|
97
+ | `webhookUrl` | `string` | n8n Chat Trigger production URL |
98
+
99
+ ### Webhook transport
100
+
101
+ | Parameter | Type | Default | Description |
102
+ |---|---|---|---|
103
+ | `webhookConfig.method` | `'POST' \| 'GET'` | `'POST'` | HTTP method |
104
+ | `webhookConfig.headers` | `Record<string,string>` | — | Extra request headers |
105
+ | `chatInputKey` | `string` | `'chatInput'` | Body key for the user message |
106
+ | `chatSessionKey` | `string` | `'sessionId'` | Body key for the session ID |
107
+ | `metadata` | `object` | — | Extra fields merged into every request body |
108
+ | `streaming` | `boolean` | `false` | Parse the response as Server-Sent Events |
109
+
110
+ ### Layout
111
+
112
+ | Parameter | Type | Default | Description |
113
+ |---|---|---|---|
114
+ | `mode` | `'fullscreen' \| 'window' \| 'mixed'` | `'fullscreen'` | Display mode |
115
+ | `showSidebar` | `boolean` | `false` | Conversation history sidebar (fullscreen only) |
116
+ | `fullscreenSheet` | `boolean` | `false` | Render fullscreen as a bottom sheet (rounded top, dimmed backdrop) |
117
+ | `fullscreenSheetHeight` | `string` | `'75vh'` | Sheet height as any CSS length |
118
+ | `showWelcomeScreen` | `boolean` | `true` | Show welcome screen when no messages |
119
+ | `allowFileUploads` | `boolean` | `false` | Show file attachment button |
120
+
121
+ ### Appearance
122
+
123
+ | Parameter | Type | Default | Description |
124
+ |---|---|---|---|
125
+ | `theme` | `string` | `'midnight'` | Initial theme ID |
126
+ | `botName` | `string` | `'Assistant'` | Global bot display name |
127
+ | `botAvatar` | `string` | — | Built-in avatar id, URL, or data URL |
128
+ | `toggleButtonIcon` | `string` | — | Image inside the floating button (window mode) |
129
+
130
+ ### CTA popup (window mode only)
131
+
132
+ | Parameter | Type | Default | Description |
133
+ |---|---|---|---|
134
+ | `showCta` | `boolean` | `true` | Show CTA speech-bubble after delay |
135
+ | `ctaText` | `string` | `'Hi! How can I help you today?'` | Global fallback CTA text |
136
+ | `ctaDelay` | `number` | `5000` | Milliseconds before CTA appears |
137
+ | `ctaSound` | `boolean` | `true` | Play a Web Audio chime when CTA shows |
138
+
139
+ ### "Powered by" footer
140
+
141
+ | Parameter | Type | Default | Description |
142
+ |---|---|---|---|
143
+ | `poweredByLabel` | `string` | `'ELIA AI Assistant'` | Link text |
144
+ | `poweredByUrl` | `string` | `'https://www.elia-asistent.com'` | Link URL |
145
+ | `poweredByHide` | `boolean` | `false` | Hide the entire footer line |
146
+
147
+ ### Tabs (optional, opt-in)
148
+
149
+ | Parameter | Type | Description |
150
+ |---|---|---|
151
+ | `tabs.notifications.feedUrl` | `string` | JSON URL returning `{ items: NotificationItem[] }` |
152
+ | `tabs.notifications.items` | `NotificationItem[]` | Inline items (used when `feedUrl` unset) |
153
+ | `tabs.notifications.title` | `string` | Tab label override |
154
+ | `tabs.help.feedUrl` | `string` | JSON URL returning `{ items: FaqItem[] }` |
155
+ | `tabs.help.items` | `FaqItem[]` | Inline FAQ items |
156
+ | `tabs.help.title` | `string` | Tab label override |
157
+ | `tabs.chat.title` | `string` | Chat tab label override |
158
+
159
+ A tab is shown only if its block has `feedUrl` or `items`. If neither tab is configured, no tab bar renders.
160
+
161
+ ### UI lock
162
+
163
+ | Parameter | Type | Default | Description |
164
+ |---|---|---|---|
165
+ | `hideSettings` | `boolean` | `true` | Hide the gear, theme picker, and settings modal |
166
+
167
+ ### i18n
168
+
169
+ | Parameter | Type | Description |
170
+ |---|---|---|
171
+ | `defaultLanguage` | `string` | Initial UI language code (`'en'`, `'sk'`, …) |
172
+ | `initialMessages` | `string[]` | Global fallback initial bot messages |
173
+ | `i18n[lang]` | `LangOverride` | Per-language content overrides |
174
+
175
+ `LangOverride` fields: `initialMessages`, `ctaText`, `botName`, `welcomeSubtitle`, `tabs.{notifications,help,chat}.title`.
176
+
177
+ Resolution chain: `i18n[activeLang].X` -> `i18n['en'].X` -> global `config.X`.
178
+
179
+ ---
180
+
181
+ ## Themes
182
+
183
+ | ID | Name | Style | Accent |
184
+ |---|---|---|---|
185
+ | `midnight` | Midnight | Dark | Indigo `#6366f1` |
186
+ | `ivory` | Ivory | Light | Indigo `#4338ca` |
187
+ | `sunrise` | Sunrise | Light | Orange `#f97316` |
188
+ | `cosmos` | Cosmos | Dark | Purple `#a855f7` |
189
+ | `forest` | Forest | Dark | Green `#22c55e` |
190
+ | `ocean` | Ocean | Dark | Cyan `#06b6d4` |
191
+ | `cherry` | Cherry | Dark | Red `#ef4444` |
192
+ | `navy` | Navy | Dark | Blue `#3b82f6` |
193
+ | `lavender` | Lavender | Light | Violet `#8b5cf6` |
194
+ | `amber` | Amber | Dark | Amber `#f59e0b` |
195
+
196
+ Defined in `src/themes.ts` — add your own by appending to the array.
197
+
198
+ ---
199
+
200
+ ## n8n setup
201
+
202
+ 1. Add a **Chat Trigger** node to your workflow.
203
+ 2. Copy the **Production URL**.
204
+ 3. Set it as `config.webhookUrl`.
205
+ 4. Make sure the workflow is **Active**.
206
+
207
+ Request body sent by chatui:
208
+
209
+ ```json
210
+ {
211
+ "chatInput": "user message text",
212
+ "sessionId": "abc123",
213
+ "language": "en",
214
+ "...": "anything in config.metadata"
215
+ }
216
+ ```
217
+
218
+ Expected non-streaming response:
219
+
220
+ ```json
221
+ { "output": "bot reply text" }
222
+ ```
223
+
224
+ For SSE streaming, set `config.streaming: true` and have your workflow emit `text/event-stream`:
225
+
226
+ ```
227
+ data: {"text": "chunk"}
228
+ ```
229
+
230
+ ---
231
+
232
+ ## Tabs (Notifications + FAQ)
233
+
234
+ Two extra panes alongside chat — fully optional. Each accepts a `feedUrl` (JSON over HTTP) or `items` (inline array; useful for development).
235
+
236
+ **Notifications JSON:**
237
+ ```json
238
+ {
239
+ "items": [
240
+ {
241
+ "title": "Lehota na podanie DPH",
242
+ "message": "Tvoje daňové priznanie...",
243
+ "tags": [{ "label": "High", "variant": "danger" }],
244
+ "date": "2025-07-11",
245
+ "cta": { "url": "https://example.com", "title": "Read more" }
246
+ }
247
+ ]
248
+ }
249
+ ```
250
+
251
+ **FAQ JSON:**
252
+ ```json
253
+ {
254
+ "items": [
255
+ { "question": "How do I X?", "answer": "You do Y.", "category": "Setup" }
256
+ ]
257
+ }
258
+ ```
259
+
260
+ The FAQ tab includes a search box that filters by case-insensitive substring across `question + answer + category`.
261
+
262
+ ---
263
+
264
+ ## Adding a language at runtime
265
+
266
+ Bundled languages: `en`, `sk` (split into `dist/chunks/translation-*.js`, lazy-loaded).
267
+ To add another without rebuilding chatui, register the bundle yourself:
268
+
269
+ ```ts
270
+ import i18n from 'i18next'
271
+ import { useSettingsStore } from '@elia-assistant/chatui/store'
272
+
273
+ i18n.addResourceBundle('fr', 'translation', {
274
+ welcome: { subtitle: 'Commencez une conversation.' },
275
+ input: { placeholder: 'Tapez un message...' },
276
+ // ...full keys: see node_modules/@elia-assistant/chatui/dist/chunks/translation-*.js
277
+ })
278
+
279
+ useSettingsStore.getState().setLanguage('fr')
280
+ ```
281
+
282
+ Then any per-language overrides live under `config.i18n.fr`.
283
+
284
+ ---
285
+
286
+ ## Settings UI
287
+
288
+ Hidden by default for npm consumers — configuration is expected to live in code. Flip `hideSettings: false` to expose the gear, theme picker, and settings modal (handy for admin dashboards, internal tools, live demos):
289
+
290
+ ```ts
291
+ useSettingsStore.getState().setConfig({
292
+ webhookUrl: '...',
293
+ hideSettings: false,
294
+ })
295
+ ```
296
+
297
+ The settings modal includes an **Export config** button that generates the exact `setConfig()` call for pasting into a host project.
298
+
299
+ The chatui repo's own `npm run dev` unlocks the UI automatically.
300
+
301
+ ---
302
+
303
+ ## Local development
304
+
305
+ ```bash
306
+ npm install
307
+ npm run dev # http://localhost:5173
308
+ npm run build # ESM bundle + IIFE bundle + .d.ts files into dist/
309
+ npm run pack:dry # preview the npm tarball contents
310
+ ```
311
+
312
+ Build output:
313
+ - `dist/index.js` — ESM, React externalized as peer dep (~325 kB / 75 kB gzipped)
314
+ - `dist/chatui.iife.js` — single-file IIFE for `<script>` tags, React + ReactDOM bundled in (~485 kB / 144 kB gzipped, production-mode)
315
+ - `dist/chatui.css` — pre-compiled stylesheet for ESM consumers
316
+ - `dist/chatui.iife.css` — same styles, paired naming for CDN consumers
317
+ - `dist/**/*.d.ts` — TypeScript declarations
318
+ - `dist/chunks/translation-*.js` — code-split locale bundles
319
+
320
+ To smoke-test the IIFE locally without publishing:
321
+ ```bash
322
+ npm run build
323
+ npx serve . -l 5173
324
+ # open http://localhost:5173/vanilla-test.html
325
+ ```
326
+
327
+ See [example.html](./example.html) for the full integration guide and [vanilla-test.html](./vanilla-test.html) for a CDN-style smoke test.
328
+
329
+ ---
330
+
331
+ ## Tech stack
332
+
333
+ | Concern | Library |
334
+ |---|---|
335
+ | Build | Vite 8 + Rolldown + `@vitejs/plugin-react` |
336
+ | Styling (internal) | Tailwind CSS v4 — pre-compiled into `dist/chatui.css`; consumers don't need it |
337
+ | State | Zustand 5 with `persist` middleware |
338
+ | Markdown | `react-markdown` + `remark-gfm` |
339
+ | i18n | `react-i18next` + `i18next-resources-to-backend` (locales code-split, no HTTP fetch) |
340
+ | HTTP / SSE | Native `fetch` |
341
+
342
+ React 19 is a peer dependency for the ESM bundle. The IIFE bundle includes React + ReactDOM.
343
+
344
+ ---
345
+
346
+ ## License
347
+
348
+ MIT - see [LICENSE](./LICENSE). Built by [Igor Demovic](https://github.com/idemovic).
package/dist/App.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ import './i18n.ts';
2
+ import './index.css';
3
+ export declare function App(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,4 @@
1
+ export declare const builtInAvatars: Record<string, string>;
2
+ export declare const builtInAvatarIds: string[];
3
+ /** Resolve a user-supplied value to a URL suitable for <img src>. */
4
+ export declare function resolveAvatarUrl(value: string | undefined): string | undefined;
@@ -0,0 +1,96 @@
1
+ import { n as e, t } from "./chunks/middleware-DgE1WAsA.js";
2
+ //#region src/store/chatStore.ts
3
+ function n() {
4
+ return Math.random().toString(36).slice(2) + Date.now().toString(36);
5
+ }
6
+ var r = e()(t((e, t) => ({
7
+ sessions: [],
8
+ activeSessionId: null,
9
+ messages: {},
10
+ isStreaming: !1,
11
+ createSession() {
12
+ let t = n(), r = {
13
+ id: t,
14
+ title: "New conversation",
15
+ createdAt: Date.now()
16
+ };
17
+ return e((e) => ({
18
+ sessions: [r, ...e.sessions],
19
+ activeSessionId: t,
20
+ messages: {
21
+ ...e.messages,
22
+ [t]: []
23
+ }
24
+ })), t;
25
+ },
26
+ setActiveSession(t) {
27
+ e({ activeSessionId: t });
28
+ },
29
+ addMessage(t, n) {
30
+ e((e) => {
31
+ let r = [...e.messages[t] ?? [], n];
32
+ return {
33
+ sessions: e.sessions.map((e) => e.id !== t || e.title !== "New conversation" || n.role !== "user" ? e : {
34
+ ...e,
35
+ title: n.content.slice(0, 50)
36
+ }),
37
+ messages: {
38
+ ...e.messages,
39
+ [t]: r
40
+ }
41
+ };
42
+ });
43
+ },
44
+ appendToLastBot(t, n) {
45
+ e((e) => {
46
+ let r = e.messages[t] ?? [];
47
+ if (r.length === 0) return {};
48
+ let i = r[r.length - 1];
49
+ if (i.role !== "bot") return {};
50
+ let a = [...r.slice(0, -1), {
51
+ ...i,
52
+ content: i.content + n
53
+ }];
54
+ return { messages: {
55
+ ...e.messages,
56
+ [t]: a
57
+ } };
58
+ });
59
+ },
60
+ setStreaming(t) {
61
+ e({ isStreaming: t });
62
+ },
63
+ deleteSession(t) {
64
+ e((e) => {
65
+ let n = e.sessions.filter((e) => e.id !== t), r = { ...e.messages };
66
+ return delete r[t], {
67
+ sessions: n,
68
+ messages: r,
69
+ activeSessionId: e.activeSessionId === t ? n[0]?.id ?? null : e.activeSessionId
70
+ };
71
+ });
72
+ },
73
+ renameSession(t, n) {
74
+ e((e) => ({ sessions: e.sessions.map((e) => e.id === t ? {
75
+ ...e,
76
+ title: n
77
+ } : e) }));
78
+ },
79
+ clearMessages(n) {
80
+ e((e) => ({ messages: {
81
+ ...e.messages,
82
+ [n]: []
83
+ } })), t().renameSession(n, "New conversation");
84
+ }
85
+ }), {
86
+ name: "chatui-chat",
87
+ partialize: (e) => ({
88
+ sessions: e.sessions,
89
+ activeSessionId: e.activeSessionId,
90
+ messages: e.messages
91
+ })
92
+ }));
93
+ //#endregion
94
+ export { r as useChatStore };
95
+
96
+ //# sourceMappingURL=chat-store.js.map
@@ -0,0 +1,3 @@
1
+ /*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-400:#ff6568;--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xl:36rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wider:.05em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-bg-base:var(--t-bg-base);--color-bg-surface:var(--t-bg-surface);--color-bg-surface2:var(--t-bg-surface2);--color-accent:var(--t-accent);--color-fg-primary:var(--t-fg-primary);--color-fg-secondary:var(--t-fg-secondary);--color-fg-muted:var(--t-fg-muted)}@supports (color:lab(0% 0 0)){:root,:host{--color-red-400:lab(63.7053% 60.7449 31.3109)}}}@layer base{*,:after,:before{box-sizing:border-box;border:0 solid;margin:0;padding:0}::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}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}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing) * 0)}.inset-x-0{inset-inline:calc(var(--spacing) * 0)}.inset-y-0{inset-block:calc(var(--spacing) * 0)}.end{inset-inline-end:var(--spacing)}.top-0\.5{top:calc(var(--spacing) * .5)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing) * 2)}.top-3{top:calc(var(--spacing) * 3)}.right-0{right:calc(var(--spacing) * 0)}.right-2{right:calc(var(--spacing) * 2)}.right-4{right:calc(var(--spacing) * 4)}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-2{bottom:calc(var(--spacing) * 2)}.bottom-4{bottom:calc(var(--spacing) * 4)}.bottom-20{bottom:calc(var(--spacing) * 20)}.left-0{left:calc(var(--spacing) * 0)}.left-3{left:calc(var(--spacing) * 3)}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mx-2{margin-inline:calc(var(--spacing) * 2)}.my-2{margin-block:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.table{display:table}.aspect-square{aspect-ratio:1}.h-1{height:calc(var(--spacing) * 1)}.h-2{height:calc(var(--spacing) * 2)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-14{height:calc(var(--spacing) * 14)}.h-16{height:calc(var(--spacing) * 16)}.h-\[560px\]{height:560px}.h-full{height:100%}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-\[42px\]{min-height:42px}.w-2{width:calc(var(--spacing) * 2)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-14{width:calc(var(--spacing) * 14)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-64{width:calc(var(--spacing) * 64)}.w-\[380px\]{width:380px}.w-full{width:100%}.max-w-\[75\%\]{max-width:75%}.max-w-xl{max-width:var(--container-xl)}.min-w-0{min-width:calc(var(--spacing) * 0)}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.bg-bg-base{background-color:var(--color-bg-base)}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.bg-white{background-color:var(--color-white)}.object-cover{object-fit:cover}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-12{padding-block:calc(var(--spacing) * 12)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-5{padding-right:calc(var(--spacing) * 5)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-5{padding-left:calc(var(--spacing) * 5)}.pl-9{padding-left:calc(var(--spacing) * 9)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[11px\]{font-size:11px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.whitespace-pre-line{white-space:pre-line}.text-accent{color:var(--color-accent)}.text-fg-muted{color:var(--color-fg-muted)}.text-fg-primary{color:var(--color-fg-primary)}.text-fg-secondary{color:var(--color-fg-secondary)}.text-red-400{color:var(--color-red-400)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.underline{text-decoration-line:underline}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.select-none{-webkit-user-select:none;user-select:none}.last\:mb-0:last-child{margin-bottom:calc(var(--spacing) * 0)}@media (hover:hover){.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:bg-bg-surface:hover{background-color:var(--color-bg-surface)}.hover\:bg-bg-surface2:hover{background-color:var(--color-bg-surface2)}.hover\:text-fg-primary:hover{color:var(--color-fg-primary)}.hover\:underline:hover{text-decoration-line:underline}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}@media (min-width:48rem){.md\:relative{position:relative}.md\:hidden{display:none}.md\:translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}}}:root,[data-theme=midnight]{--t-bg-base:#0f1117;--t-bg-surface:#1a1d27;--t-bg-surface2:#22263a;--t-bg-border:#2d3142;--t-accent:#6366f1;--t-accent-fg:#fff;--t-fg-primary:#fff;--t-fg-secondary:#94a3b8;--t-fg-muted:#64748b;--t-user-bubble:#6366f1;--t-user-fg:#fff;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}[data-theme=ivory]{--t-bg-base:#fff;--t-bg-surface:#f1f5f9;--t-bg-surface2:#e2e8f0;--t-bg-border:#cbd5e1;--t-accent:#4338ca;--t-accent-fg:#fff;--t-fg-primary:#0f172a;--t-fg-secondary:#334155;--t-fg-muted:#64748b;--t-user-bubble:#4338ca;--t-user-fg:#fff;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}[data-theme=sunrise]{--t-bg-base:#fff;--t-bg-surface:#fff7ed;--t-bg-surface2:#ffedd5;--t-bg-border:#fed7aa;--t-accent:#f97316;--t-accent-fg:#fff;--t-fg-primary:#1c0a00;--t-fg-secondary:#431407;--t-fg-muted:#9a3412;--t-user-bubble:#f97316;--t-user-fg:#fff;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}[data-theme=cosmos]{--t-bg-base:#0d0a1a;--t-bg-surface:#15102b;--t-bg-surface2:#1e1840;--t-bg-border:#2e2555;--t-accent:#a855f7;--t-accent-fg:#fff;--t-fg-primary:#f3e8ff;--t-fg-secondary:#c4b5fd;--t-fg-muted:#7c3aed;--t-user-bubble:#a855f7;--t-user-fg:#fff;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}[data-theme=forest]{--t-bg-base:#0a1410;--t-bg-surface:#111f18;--t-bg-surface2:#162b1f;--t-bg-border:#1e3a2a;--t-accent:#22c55e;--t-accent-fg:#fff;--t-fg-primary:#dcfce7;--t-fg-secondary:#86efac;--t-fg-muted:#4ade80;--t-user-bubble:#16a34a;--t-user-fg:#fff;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}[data-theme=ocean]{--t-bg-base:#060f1a;--t-bg-surface:#0c1b2e;--t-bg-surface2:#112440;--t-bg-border:#163354;--t-accent:#06b6d4;--t-accent-fg:#fff;--t-fg-primary:#e0f7fa;--t-fg-secondary:#67e8f9;--t-fg-muted:#0891b2;--t-user-bubble:#0891b2;--t-user-fg:#fff;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}[data-theme=cherry]{--t-bg-base:#120608;--t-bg-surface:#1e0c10;--t-bg-surface2:#2a1016;--t-bg-border:#3d1520;--t-accent:#ef4444;--t-accent-fg:#fff;--t-fg-primary:#ffe4e6;--t-fg-secondary:#fca5a5;--t-fg-muted:#f87171;--t-user-bubble:#dc2626;--t-user-fg:#fff;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}[data-theme=navy]{--t-bg-base:#080f1e;--t-bg-surface:#0f1a33;--t-bg-surface2:#162348;--t-bg-border:#1e3060;--t-accent:#3b82f6;--t-accent-fg:#fff;--t-fg-primary:#dbeafe;--t-fg-secondary:#93c5fd;--t-fg-muted:#60a5fa;--t-user-bubble:#2563eb;--t-user-fg:#fff;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}[data-theme=lavender]{--t-bg-base:#faf5ff;--t-bg-surface:#f3e8ff;--t-bg-surface2:#e9d5ff;--t-bg-border:#d8b4fe;--t-accent:#8b5cf6;--t-accent-fg:#fff;--t-fg-primary:#2e1065;--t-fg-secondary:#4c1d95;--t-fg-muted:#7c3aed;--t-user-bubble:#7c3aed;--t-user-fg:#fff;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}[data-theme=amber]{--t-bg-base:#0f0a00;--t-bg-surface:#1c1400;--t-bg-surface2:#2a1d00;--t-bg-border:#3d2c00;--t-accent:#f59e0b;--t-accent-fg:#000;--t-fg-primary:#fef3c7;--t-fg-secondary:#fcd34d;--t-fg-muted:#d97706;--t-user-bubble:#d97706;--t-user-fg:#000;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*,:before,:after{box-sizing:border-box}html,body,#root{height:100%;margin:0;padding:0}body{background-color:var(--t-bg-base);color:var(--t-fg-primary);-webkit-font-smoothing:antialiased;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--t-bg-border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--t-fg-muted)}@keyframes typing-dot{0%,60%,to{opacity:.4;transform:translateY(0)}30%{opacity:1;transform:translateY(-4px)}}.typing-dot{background:var(--t-fg-muted);border-radius:50%;width:6px;height:6px;animation:1.2s infinite typing-dot;display:inline-block}.typing-dot:nth-child(2){animation-delay:.2s}.typing-dot:nth-child(3){animation-delay:.4s}.cta-bubble:after{content:"";border-left:8px solid #0000;border-right:8px solid #0000;border-top:8px solid var(--t-bg-surface);width:0;height:0;position:absolute;bottom:-8px;right:20px}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}
3
+ /*$vite$:1*/
@@ -0,0 +1 @@
1
+ export {}
@@ -0,0 +1,3 @@
1
+ /*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-400:#ff6568;--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xl:36rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wider:.05em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-bg-base:var(--t-bg-base);--color-bg-surface:var(--t-bg-surface);--color-bg-surface2:var(--t-bg-surface2);--color-accent:var(--t-accent);--color-fg-primary:var(--t-fg-primary);--color-fg-secondary:var(--t-fg-secondary);--color-fg-muted:var(--t-fg-muted)}@supports (color:lab(0% 0 0)){:root,:host{--color-red-400:lab(63.7053% 60.7449 31.3109)}}}@layer base{*,:after,:before{box-sizing:border-box;border:0 solid;margin:0;padding:0}::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}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}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing) * 0)}.inset-x-0{inset-inline:calc(var(--spacing) * 0)}.inset-y-0{inset-block:calc(var(--spacing) * 0)}.end{inset-inline-end:var(--spacing)}.top-0\.5{top:calc(var(--spacing) * .5)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing) * 2)}.top-3{top:calc(var(--spacing) * 3)}.right-0{right:calc(var(--spacing) * 0)}.right-2{right:calc(var(--spacing) * 2)}.right-4{right:calc(var(--spacing) * 4)}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-2{bottom:calc(var(--spacing) * 2)}.bottom-4{bottom:calc(var(--spacing) * 4)}.bottom-20{bottom:calc(var(--spacing) * 20)}.left-0{left:calc(var(--spacing) * 0)}.left-3{left:calc(var(--spacing) * 3)}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mx-2{margin-inline:calc(var(--spacing) * 2)}.my-2{margin-block:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.table{display:table}.aspect-square{aspect-ratio:1}.h-1{height:calc(var(--spacing) * 1)}.h-2{height:calc(var(--spacing) * 2)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-14{height:calc(var(--spacing) * 14)}.h-16{height:calc(var(--spacing) * 16)}.h-\[560px\]{height:560px}.h-full{height:100%}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-\[42px\]{min-height:42px}.w-2{width:calc(var(--spacing) * 2)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-14{width:calc(var(--spacing) * 14)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-64{width:calc(var(--spacing) * 64)}.w-\[380px\]{width:380px}.w-full{width:100%}.max-w-\[75\%\]{max-width:75%}.max-w-xl{max-width:var(--container-xl)}.min-w-0{min-width:calc(var(--spacing) * 0)}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.bg-bg-base{background-color:var(--color-bg-base)}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.bg-white{background-color:var(--color-white)}.object-cover{object-fit:cover}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-12{padding-block:calc(var(--spacing) * 12)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-5{padding-right:calc(var(--spacing) * 5)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-5{padding-left:calc(var(--spacing) * 5)}.pl-9{padding-left:calc(var(--spacing) * 9)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[11px\]{font-size:11px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.whitespace-pre-line{white-space:pre-line}.text-accent{color:var(--color-accent)}.text-fg-muted{color:var(--color-fg-muted)}.text-fg-primary{color:var(--color-fg-primary)}.text-fg-secondary{color:var(--color-fg-secondary)}.text-red-400{color:var(--color-red-400)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.underline{text-decoration-line:underline}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.select-none{-webkit-user-select:none;user-select:none}.last\:mb-0:last-child{margin-bottom:calc(var(--spacing) * 0)}@media (hover:hover){.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:bg-bg-surface:hover{background-color:var(--color-bg-surface)}.hover\:bg-bg-surface2:hover{background-color:var(--color-bg-surface2)}.hover\:text-fg-primary:hover{color:var(--color-fg-primary)}.hover\:underline:hover{text-decoration-line:underline}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}@media (min-width:48rem){.md\:relative{position:relative}.md\:hidden{display:none}.md\:translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}}}:root,[data-theme=midnight]{--t-bg-base:#0f1117;--t-bg-surface:#1a1d27;--t-bg-surface2:#22263a;--t-bg-border:#2d3142;--t-accent:#6366f1;--t-accent-fg:#fff;--t-fg-primary:#fff;--t-fg-secondary:#94a3b8;--t-fg-muted:#64748b;--t-user-bubble:#6366f1;--t-user-fg:#fff;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}[data-theme=ivory]{--t-bg-base:#fff;--t-bg-surface:#f1f5f9;--t-bg-surface2:#e2e8f0;--t-bg-border:#cbd5e1;--t-accent:#4338ca;--t-accent-fg:#fff;--t-fg-primary:#0f172a;--t-fg-secondary:#334155;--t-fg-muted:#64748b;--t-user-bubble:#4338ca;--t-user-fg:#fff;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}[data-theme=sunrise]{--t-bg-base:#fff;--t-bg-surface:#fff7ed;--t-bg-surface2:#ffedd5;--t-bg-border:#fed7aa;--t-accent:#f97316;--t-accent-fg:#fff;--t-fg-primary:#1c0a00;--t-fg-secondary:#431407;--t-fg-muted:#9a3412;--t-user-bubble:#f97316;--t-user-fg:#fff;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}[data-theme=cosmos]{--t-bg-base:#0d0a1a;--t-bg-surface:#15102b;--t-bg-surface2:#1e1840;--t-bg-border:#2e2555;--t-accent:#a855f7;--t-accent-fg:#fff;--t-fg-primary:#f3e8ff;--t-fg-secondary:#c4b5fd;--t-fg-muted:#7c3aed;--t-user-bubble:#a855f7;--t-user-fg:#fff;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}[data-theme=forest]{--t-bg-base:#0a1410;--t-bg-surface:#111f18;--t-bg-surface2:#162b1f;--t-bg-border:#1e3a2a;--t-accent:#22c55e;--t-accent-fg:#fff;--t-fg-primary:#dcfce7;--t-fg-secondary:#86efac;--t-fg-muted:#4ade80;--t-user-bubble:#16a34a;--t-user-fg:#fff;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}[data-theme=ocean]{--t-bg-base:#060f1a;--t-bg-surface:#0c1b2e;--t-bg-surface2:#112440;--t-bg-border:#163354;--t-accent:#06b6d4;--t-accent-fg:#fff;--t-fg-primary:#e0f7fa;--t-fg-secondary:#67e8f9;--t-fg-muted:#0891b2;--t-user-bubble:#0891b2;--t-user-fg:#fff;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}[data-theme=cherry]{--t-bg-base:#120608;--t-bg-surface:#1e0c10;--t-bg-surface2:#2a1016;--t-bg-border:#3d1520;--t-accent:#ef4444;--t-accent-fg:#fff;--t-fg-primary:#ffe4e6;--t-fg-secondary:#fca5a5;--t-fg-muted:#f87171;--t-user-bubble:#dc2626;--t-user-fg:#fff;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}[data-theme=navy]{--t-bg-base:#080f1e;--t-bg-surface:#0f1a33;--t-bg-surface2:#162348;--t-bg-border:#1e3060;--t-accent:#3b82f6;--t-accent-fg:#fff;--t-fg-primary:#dbeafe;--t-fg-secondary:#93c5fd;--t-fg-muted:#60a5fa;--t-user-bubble:#2563eb;--t-user-fg:#fff;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}[data-theme=lavender]{--t-bg-base:#faf5ff;--t-bg-surface:#f3e8ff;--t-bg-surface2:#e9d5ff;--t-bg-border:#d8b4fe;--t-accent:#8b5cf6;--t-accent-fg:#fff;--t-fg-primary:#2e1065;--t-fg-secondary:#4c1d95;--t-fg-muted:#7c3aed;--t-user-bubble:#7c3aed;--t-user-fg:#fff;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}[data-theme=amber]{--t-bg-base:#0f0a00;--t-bg-surface:#1c1400;--t-bg-surface2:#2a1d00;--t-bg-border:#3d2c00;--t-accent:#f59e0b;--t-accent-fg:#000;--t-fg-primary:#fef3c7;--t-fg-secondary:#fcd34d;--t-fg-muted:#d97706;--t-user-bubble:#d97706;--t-user-fg:#000;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*,:before,:after{box-sizing:border-box}html,body,#root{height:100%;margin:0;padding:0}body{background-color:var(--t-bg-base);color:var(--t-fg-primary);-webkit-font-smoothing:antialiased;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--t-bg-border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--t-fg-muted)}@keyframes typing-dot{0%,60%,to{opacity:.4;transform:translateY(0)}30%{opacity:1;transform:translateY(-4px)}}.typing-dot{background:var(--t-fg-muted);border-radius:50%;width:6px;height:6px;animation:1.2s infinite typing-dot;display:inline-block}.typing-dot:nth-child(2){animation-delay:.2s}.typing-dot:nth-child(3){animation-delay:.4s}.cta-bubble:after{content:"";border-left:8px solid #0000;border-right:8px solid #0000;border-top:8px solid var(--t-bg-surface);width:0;height:0;position:absolute;bottom:-8px;right:20px}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}
3
+ /*$vite$:1*/