pixelon 0.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/README.md +54 -0
- package/dist/App.d.ts +3 -0
- package/dist/App.js +6 -0
- package/dist/assets/output-BpGRJPjR.css +1 -0
- package/dist/assets/output-DGLCW84k.css +1 -0
- package/dist/components/atoms/AttachmentPreview/AttachmentPreview.d.ts +8 -0
- package/dist/components/atoms/AttachmentPreview/AttachmentPreview.js +44 -0
- package/dist/components/atoms/Avatar/Avatar.d.ts +10 -0
- package/dist/components/atoms/Avatar/Avatar.js +28 -0
- package/dist/components/atoms/Button/Button.d.ts +10 -0
- package/dist/components/atoms/Button/Button.js +137 -0
- package/dist/components/atoms/DateDivider/DateDivider.d.ts +7 -0
- package/dist/components/atoms/DateDivider/DateDivider.js +40 -0
- package/dist/components/atoms/DateDivider/index.d.ts +2 -0
- package/dist/components/atoms/DateDivider/index.js +1 -0
- package/dist/components/atoms/Input/Input.d.ts +10 -0
- package/dist/components/atoms/Input/Input.js +111 -0
- package/dist/components/atoms/Link/Link.d.ts +14 -0
- package/dist/components/atoms/Link/Link.js +16 -0
- package/dist/components/atoms/SelectMenu/SelectMenu.d.ts +9 -0
- package/dist/components/atoms/SelectMenu/SelectMenu.js +23 -0
- package/dist/components/atoms/Text/Text.d.ts +11 -0
- package/dist/components/atoms/Text/Text.js +93 -0
- package/dist/components/atoms/Textarea/Textarea.d.ts +6 -0
- package/dist/components/atoms/Textarea/Textarea.js +5 -0
- package/dist/components/atoms/logo/Logo.d.ts +6 -0
- package/dist/components/atoms/logo/Logo.js +5 -0
- package/dist/components/molecules/chat/AssistantMessage/AssistantMessage.d.ts +7 -0
- package/dist/components/molecules/chat/AssistantMessage/AssistantMessage.js +10 -0
- package/dist/components/molecules/chat/AssistantThinkingIndicator/AssistantThinkingIndicator.d.ts +3 -0
- package/dist/components/molecules/chat/AssistantThinkingIndicator/AssistantThinkingIndicator.js +36 -0
- package/dist/components/molecules/chat/ChatHeader/ChatHeader.d.ts +6 -0
- package/dist/components/molecules/chat/ChatHeader/ChatHeader.js +6 -0
- package/dist/components/molecules/chat/ChatInput/ChatInput.d.ts +17 -0
- package/dist/components/molecules/chat/ChatInput/ChatInput.js +56 -0
- package/dist/components/molecules/chat/FileViewer/FileViewer.d.ts +7 -0
- package/dist/components/molecules/chat/FileViewer/FileViewer.js +41 -0
- package/dist/components/molecules/chat/FullscreenViewer/FullscreenViewer.d.ts +10 -0
- package/dist/components/molecules/chat/FullscreenViewer/FullscreenViewer.js +65 -0
- package/dist/components/molecules/chat/MessageStatus/MessageStatus.d.ts +9 -0
- package/dist/components/molecules/chat/MessageStatus/MessageStatus.js +14 -0
- package/dist/components/molecules/chat/Modal/Modal.d.ts +12 -0
- package/dist/components/molecules/chat/Modal/Modal.js +29 -0
- package/dist/components/molecules/chat/UserAttachments/UserAttachments.d.ts +6 -0
- package/dist/components/molecules/chat/UserAttachments/UserAttachments.js +8 -0
- package/dist/components/molecules/chat/UserMessage/UserMessage.d.ts +11 -0
- package/dist/components/molecules/chat/UserMessage/UserMessage.js +8 -0
- package/dist/components/organisms/chat/Chat.d.ts +21 -0
- package/dist/components/organisms/chat/Chat.js +278 -0
- package/dist/components/organisms/chat/index.d.ts +1 -0
- package/dist/components/organisms/chat/index.js +1 -0
- package/dist/index.d.ts +171 -0
- package/dist/index.esm.js +21664 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +21666 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +1 -0
- package/dist/main.js +6 -0
- package/dist/styles.css +1 -0
- package/dist/styles.css.map +1 -0
- package/dist/test/setup.d.ts +1 -0
- package/dist/test/setup.js +20 -0
- package/package.json +95 -0
- package/src/styles/_variables.scss +84 -0
- package/src/styles/global.scss +58 -0
- package/src/styles/index.scss +30 -0
package/README.md
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# React + TypeScript + Vite
|
|
2
|
+
|
|
3
|
+
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
|
|
4
|
+
|
|
5
|
+
Currently, two official plugins are available:
|
|
6
|
+
|
|
7
|
+
- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) for Fast Refresh
|
|
8
|
+
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
|
|
9
|
+
|
|
10
|
+
## Expanding the ESLint configuration
|
|
11
|
+
|
|
12
|
+
If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
|
|
13
|
+
|
|
14
|
+
```js
|
|
15
|
+
export default tseslint.config({
|
|
16
|
+
extends: [
|
|
17
|
+
// Remove ...tseslint.configs.recommended and replace with this
|
|
18
|
+
...tseslint.configs.recommendedTypeChecked,
|
|
19
|
+
// Alternatively, use this for stricter rules
|
|
20
|
+
...tseslint.configs.strictTypeChecked,
|
|
21
|
+
// Optionally, add this for stylistic rules
|
|
22
|
+
...tseslint.configs.stylisticTypeChecked,
|
|
23
|
+
],
|
|
24
|
+
languageOptions: {
|
|
25
|
+
// other options...
|
|
26
|
+
parserOptions: {
|
|
27
|
+
project: ['./tsconfig.node.json', './tsconfig.app.json'],
|
|
28
|
+
tsconfigRootDir: import.meta.dirname,
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
})
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules:
|
|
35
|
+
|
|
36
|
+
```js
|
|
37
|
+
// eslint.config.js
|
|
38
|
+
import reactX from 'eslint-plugin-react-x'
|
|
39
|
+
import reactDom from 'eslint-plugin-react-dom'
|
|
40
|
+
|
|
41
|
+
export default tseslint.config({
|
|
42
|
+
plugins: {
|
|
43
|
+
// Add the react-x and react-dom plugins
|
|
44
|
+
'react-x': reactX,
|
|
45
|
+
'react-dom': reactDom,
|
|
46
|
+
},
|
|
47
|
+
rules: {
|
|
48
|
+
// other rules...
|
|
49
|
+
// Enable its recommended typescript rules
|
|
50
|
+
...reactX.configs['recommended-typescript'].rules,
|
|
51
|
+
...reactDom.configs.recommended.rules,
|
|
52
|
+
},
|
|
53
|
+
})
|
|
54
|
+
```
|
package/dist/App.d.ts
ADDED
package/dist/App.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--color-black: #000000;--color-white: #FFFFFF;--color-primary: var(--color-black);--color-secondary: #343541;--color-background: #FFFFFF;--color-background-alt: #F7F7F8;--color-text: #2D2D2D;--color-text-secondary: #6B7280;--color-text-inverse: #FFFFFF;--color-border: #E5E7EB;--color-success: #10B981;--color-error: #EF4444;--color-warning: #F59E0B;--color-info: #3B82F6;--color-chat-user-bg: #F7F7F8;--color-chat-assistant-bg: #FFFFFF;--color-chat-border: #E5E7EB;--color-chat-input-bg: #FFFFFF;--color-chat-input-border: #E5E7EB;--color-chat-input-focus: #000000;--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);--spacing-xs: 0.25rem;--spacing-sm: 0.5rem;--spacing-md: 1rem;--spacing-lg: 1.5rem;--spacing-xl: 2rem;--border-radius-sm: 0.25rem;--border-radius-md: 0.375rem;--border-radius-lg: 0.5rem;--border-radius-full: 9999px;--font-family-base: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;--font-size-xs: 0.75rem;--font-size-sm: 0.875rem;--font-size-base: 1rem;--font-size-lg: 1.125rem;--font-size-xl: 1.25rem;--font-size-2xl: 1.5rem;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height-tight: 1.25;--line-height-normal: 1.5;--line-height-relaxed: 1.75}[data-theme=dark]{--color-background: #343541;--color-background-alt: #444654;--color-text: #FFFFFF;--color-text-secondary: #9CA3AF;--color-border: #4B5563;--color-chat-user-bg: #444654;--color-chat-assistant-bg: #343541;--color-chat-border: #4B5563;--color-chat-input-bg: #40414F;--color-chat-input-border: #4B5563;--color-chat-input-focus: #FFFFFF}@font-face{font-family:"Inter";font-style:normal;font-display:swap;font-weight:400;src:url(./files/inter-cyrillic-ext-400-normal.woff2) format("woff2"),url(./files/inter-cyrillic-ext-400-normal.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:"Inter";font-style:normal;font-display:swap;font-weight:400;src:url(./files/inter-cyrillic-400-normal.woff2) format("woff2"),url(./files/inter-cyrillic-400-normal.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:"Inter";font-style:normal;font-display:swap;font-weight:400;src:url(./files/inter-greek-ext-400-normal.woff2) format("woff2"),url(./files/inter-greek-ext-400-normal.woff) format("woff");unicode-range:U+1F00-1FFF}@font-face{font-family:"Inter";font-style:normal;font-display:swap;font-weight:400;src:url(./files/inter-greek-400-normal.woff2) format("woff2"),url(./files/inter-greek-400-normal.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:"Inter";font-style:normal;font-display:swap;font-weight:400;src:url(./files/inter-vietnamese-400-normal.woff2) format("woff2"),url(./files/inter-vietnamese-400-normal.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:"Inter";font-style:normal;font-display:swap;font-weight:400;src:url(./files/inter-latin-ext-400-normal.woff2) format("woff2"),url(./files/inter-latin-ext-400-normal.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:"Inter";font-style:normal;font-display:swap;font-weight:400;src:url(./files/inter-latin-400-normal.woff2) format("woff2"),url(./files/inter-latin-400-normal.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--color-black: #000000;--color-white: #FFFFFF;--color-primary: var(--color-black);--color-secondary: #343541;--color-background: #FFFFFF;--color-background-alt: #F7F7F8;--color-text: #2D2D2D;--color-text-secondary: #6B7280;--color-text-inverse: #FFFFFF;--color-border: #E5E7EB;--color-success: #10B981;--color-error: #EF4444;--color-warning: #F59E0B;--color-info: #3B82F6;--color-chat-user-bg: #F7F7F8;--color-chat-assistant-bg: #FFFFFF;--color-chat-border: #E5E7EB;--color-chat-input-bg: #FFFFFF;--color-chat-input-border: #E5E7EB;--color-chat-input-focus: #000000;--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);--spacing-xs: 0.25rem;--spacing-sm: 0.5rem;--spacing-md: 1rem;--spacing-lg: 1.5rem;--spacing-xl: 2rem;--border-radius-sm: 0.25rem;--border-radius-md: 0.375rem;--border-radius-lg: 0.5rem;--border-radius-full: 9999px;--font-family-base: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;--font-size-xs: 0.75rem;--font-size-sm: 0.875rem;--font-size-base: 1rem;--font-size-lg: 1.125rem;--font-size-xl: 1.25rem;--font-size-2xl: 1.5rem;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height-tight: 1.25;--line-height-normal: 1.5;--line-height-relaxed: 1.75}[data-theme=dark]{--color-background: #343541;--color-background-alt: #444654;--color-text: #FFFFFF;--color-text-secondary: #9CA3AF;--color-border: #4B5563;--color-chat-user-bg: #444654;--color-chat-assistant-bg: #343541;--color-chat-border: #4B5563;--color-chat-input-bg: #40414F;--color-chat-input-border: #4B5563;--color-chat-input-focus: #FFFFFF}*{margin:0;padding:0;box-sizing:border-box}body{font-family:var(--font-family-base);font-size:var(--font-size-base);line-height:var(--line-height-normal);color:var(--color-text);background-color:var(--color-background);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.text-primary{color:var(--color-primary)}.text-secondary{color:var(--color-text-secondary)}.bg-primary{background-color:var(--color-primary)}.bg-secondary{background-color:var(--color-background-alt)}.transition-all{transition:all .2s ease-in-out}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--color-background)}::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:var(--border-radius-full)}::-webkit-scrollbar-thumb:hover{background:var(--color-text-secondary)}.button{display:inline-flex;align-items:center;justify-content:center;gap:var(--spacing-sm);border:none;border-radius:var(--border-radius-md);font-family:var(--font-family-base);font-weight:var(--font-weight-medium);cursor:pointer;transition:all .2s ease-in-out;position:relative}.button--primary{background-color:var(--color-primary);color:var(--color-white)}.button--primary:hover:not(:disabled){opacity:.9}.button--primary:active:not(:disabled){opacity:.8}.button--secondary{background-color:var(--color-background-alt);color:var(--color-text)}.button--secondary:hover:not(:disabled){background-color:var(--color-border)}.button--ghost{background-color:rgba(0,0,0,0);color:var(--color-text)}.button--ghost:hover:not(:disabled){background-color:var(--color-background-alt)}.button--icon{padding:var(--spacing-sm);border-radius:var(--border-radius-full);background-color:rgba(0,0,0,0);color:var(--color-text)}.button--icon:hover:not(:disabled){background-color:var(--color-background-alt)}.button--small{padding:var(--spacing-xs) var(--spacing-sm);font-size:var(--font-size-sm)}.button--medium{padding:var(--spacing-sm) var(--spacing-md);font-size:var(--font-size-base)}.button--large{padding:var(--spacing-md) var(--spacing-lg);font-size:var(--font-size-lg)}.button:disabled{opacity:.5;cursor:not-allowed}.button--full-width{width:100%}.button--loading{cursor:wait}.button--loading .button__text{visibility:hidden}.button__loader{position:absolute;width:16px;height:16px;border:2px solid var(--color-white);border-radius:50%;border-top-color:rgba(0,0,0,0);animation:button-spin .8s linear infinite}.button__icon{display:flex;align-items:center;justify-content:center}@keyframes button-spin{to{transform:rotate(360deg)}}.button--circle{background:var(--color-black) !important;color:var(--color-white);border-radius:50% !important;width:32px !important;height:32px !important;min-width:32px !important;min-height:32px !important;padding:0 !important;display:flex;align-items:center;justify-content:center;box-shadow:none;border:none;transition:background .2s}.button--circle:hover,.button--circle:focus{background:#222 !important}.button--circle .button__icon{color:var(--color-white);display:flex;align-items:center;justify-content:center}.input-wrapper{display:flex;flex-direction:column;gap:var(--spacing-xs)}.input-wrapper--full-width{width:100%}.input-wrapper--error .input{border-color:var(--color-error)}.input-wrapper--error .input:focus{border-color:var(--color-error);box-shadow:0 0 0 2px rgba(239,68,68,.1)}.input-wrapper--chat .input{background-color:var(--color-chat-input-bg);border:1px solid var(--color-chat-input-border);border-radius:var(--border-radius-lg);padding:0 var(--spacing-lg);font-size:var(--font-size-base);line-height:var(--line-height-relaxed);height:40px;min-height:40px;box-sizing:border-box;display:flex;align-items:center}.input-wrapper--chat .input:focus{border-color:var(--color-chat-input-focus);box-shadow:0 0 0 2px rgba(0,0,0,.1)}.input-wrapper__label{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text)}.input-wrapper__container{position:relative;display:flex;align-items:center}.input-wrapper__icon{position:absolute;left:var(--spacing-md);display:flex;align-items:center;justify-content:center;color:var(--color-text-secondary)}.input-wrapper__error{font-size:var(--font-size-sm);color:var(--color-error)}.input{width:100%;padding:var(--spacing-sm) var(--spacing-md);font-family:var(--font-family-base);font-size:var(--font-size-base);line-height:var(--line-height-normal);color:var(--color-text);background-color:var(--color-background);border:1px solid var(--color-border);border-radius:var(--border-radius-md);transition:all .2s ease-in-out}.input--with-icon{padding-left:calc(var(--spacing-md)*2 + 16px)}.input::placeholder{color:var(--color-text-secondary)}.input:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 2px rgba(0,0,0,.1)}.input:disabled{background-color:var(--color-background-alt);cursor:not-allowed}.text{margin:0;font-family:var(--font-family-base)}.text--h1{font-size:var(--font-size-2xl);line-height:var(--line-height-tight);font-weight:var(--font-weight-bold)}.text--h2{font-size:var(--font-size-xl);line-height:var(--line-height-tight);font-weight:var(--font-weight-semibold)}.text--h3{font-size:var(--font-size-lg);line-height:var(--line-height-tight);font-weight:var(--font-weight-semibold)}.text--h4{font-size:var(--font-size-base);line-height:var(--line-height-normal);font-weight:var(--font-weight-semibold)}.text--body{font-size:var(--font-size-base);line-height:var(--line-height-normal)}.text--small{font-size:var(--font-size-sm);line-height:var(--line-height-normal)}.text--caption{font-size:var(--font-size-xs);line-height:var(--line-height-normal)}.text--normal{font-weight:var(--font-weight-normal)}.text--medium{font-weight:var(--font-weight-medium)}.text--semibold{font-weight:var(--font-weight-semibold)}.text--bold{font-weight:var(--font-weight-bold)}.text--primary{color:var(--color-text)}.text--secondary{color:var(--color-text-secondary)}.text--inherit{color:inherit}.text--left{text-align:left}.text--center{text-align:center}.text--right{text-align:right}.textarea{width:100%;border:none;outline:none;background:rgba(0,0,0,0);font-family:var(--font-family-base);font-size:var(--font-size-base);color:var(--color-text);resize:none;min-height:32px;max-height:120px;line-height:1.5;padding:0}:root{--color-black: #000000;--color-white: #FFFFFF;--color-primary: var(--color-black);--color-secondary: #343541;--color-background: #FFFFFF;--color-background-alt: #F7F7F8;--color-text: #2D2D2D;--color-text-secondary: #6B7280;--color-text-inverse: #FFFFFF;--color-border: #E5E7EB;--color-success: #10B981;--color-error: #EF4444;--color-warning: #F59E0B;--color-info: #3B82F6;--color-chat-user-bg: #F7F7F8;--color-chat-assistant-bg: #FFFFFF;--color-chat-border: #E5E7EB;--color-chat-input-bg: #FFFFFF;--color-chat-input-border: #E5E7EB;--color-chat-input-focus: #000000;--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);--spacing-xs: 0.25rem;--spacing-sm: 0.5rem;--spacing-md: 1rem;--spacing-lg: 1.5rem;--spacing-xl: 2rem;--border-radius-sm: 0.25rem;--border-radius-md: 0.375rem;--border-radius-lg: 0.5rem;--border-radius-full: 9999px;--font-family-base: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;--font-size-xs: 0.75rem;--font-size-sm: 0.875rem;--font-size-base: 1rem;--font-size-lg: 1.125rem;--font-size-xl: 1.25rem;--font-size-2xl: 1.5rem;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height-tight: 1.25;--line-height-normal: 1.5;--line-height-relaxed: 1.75}[data-theme=dark]{--color-background: #343541;--color-background-alt: #444654;--color-text: #FFFFFF;--color-text-secondary: #9CA3AF;--color-border: #4B5563;--color-chat-user-bg: #444654;--color-chat-assistant-bg: #343541;--color-chat-border: #4B5563;--color-chat-input-bg: #40414F;--color-chat-input-border: #4B5563;--color-chat-input-focus: #FFFFFF}.link{display:inline-flex;align-items:center;gap:.25rem;text-decoration:none;transition:all .2s ease-in-out;font-family:var(--font-family-base);cursor:pointer}.link--primary{color:var(--color-primary)}.link--primary:hover{color:var(--color-primary-dark)}.link--secondary{color:var(--color-secondary)}.link--secondary:hover{color:var(--color-secondary-dark)}.link--accent{color:var(--color-accent)}.link--accent:hover{color:var(--color-accent-dark)}.link--small{font-size:var(--font-size-sm);line-height:var(--line-height-normal)}.link--medium{font-size:var(--font-size-base);line-height:var(--line-height-normal)}.link--large{font-size:var(--font-size-lg);line-height:var(--line-height-normal)}.link--normal{font-weight:var(--font-weight-normal)}.link--medium{font-weight:var(--font-weight-medium)}.link--semibold{font-weight:var(--font-weight-semibold)}.link--bold{font-weight:var(--font-weight-bold)}.link--underline{text-decoration:underline;text-decoration-color:currentColor;text-decoration-thickness:1px;text-underline-offset:2px}.link--underline:hover{text-decoration-thickness:2px}.link--external .link__external-icon{opacity:.7;transition:opacity .2s ease-in-out}.link--external:hover .link__external-icon{opacity:1}.link:hover{transform:translateY(-1px)}.link:active{transform:translateY(0)}.link:focus{outline:2px solid var(--color-primary);outline-offset:2px;border-radius:4px}.link__external-icon{flex-shrink:0}.avatar{position:relative;display:flex;align-items:center;justify-content:center;border-radius:var(--border-radius-full);overflow:hidden;background-color:var(--color-background-alt)}.avatar--small{width:24px;height:24px;font-size:var(--font-size-xs)}.avatar--medium{width:32px;height:32px;font-size:var(--font-size-sm)}.avatar--large{width:40px;height:40px;font-size:var(--font-size-base)}.avatar--user{background-color:var(--color-primary);color:var(--color-white)}.avatar--assistant{background-color:var(--color-background-alt);color:var(--color-text)}.avatar__image{width:100%;height:100%;object-fit:cover}.avatar__fallback{width:100%;height:100%;display:flex;align-items:center;justify-content:center;font-weight:var(--font-weight-medium)}.avatar__assistant-icon{width:60%;height:60%}.avatar__assistant-icon svg{width:100%;height:100%}.avatar--fallback .avatar__fallback{display:flex}.attachment-preview{display:flex;align-items:center;gap:.75rem;padding:.75rem;border:1px solid var(--color-border);border-radius:var(--border-radius-md);background:var(--color-background-secondary);position:relative;transition:all .2s ease;font-family:var(--font-family-base)}.attachment-preview--clickable{cursor:pointer}.attachment-preview--clickable:hover,.attachment-preview--clickable:focus{border-color:#111;outline:none}.attachment-preview__thumb{width:48px;height:48px;object-fit:cover;border-radius:var(--border-radius-sm);flex-shrink:0}.attachment-preview__icon{width:48px;height:48px;display:flex;align-items:center;justify-content:center;background:var(--color-background);border-radius:var(--border-radius-sm);flex-shrink:0}.attachment-preview__pdf-icon{width:48px;height:48px;display:flex;align-items:center;justify-content:center;background:var(--color-error);color:#fff;border-radius:var(--border-radius-sm);font-size:var(--font-size-xs);font-weight:var(--font-weight-bold);flex-shrink:0}.attachment-preview__info{flex:1;min-width:0}.attachment-preview__name{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-primary);margin-bottom:.25rem;word-break:break-word;line-height:1.2}.attachment-preview__type{font-size:var(--font-size-xs);color:var(--color-text-secondary)}.attachment-preview__remove{position:absolute;top:-0.5rem;right:-0.5rem;width:24px;height:24px;min-width:24px;min-height:24px;border:2px solid rgba(0,0,0,0);background:#111;color:#fff;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:var(--font-size-xs);font-weight:var(--font-weight-bold);transition:all .2s ease;z-index:1;box-sizing:border-box;padding:0}.attachment-preview__remove svg{width:12px;height:12px;display:block}.attachment-preview__remove:hover,.attachment-preview__remove:focus{background:#111;border:2px solid #111;color:#fff;outline:none;transform:scale(1.1)}:root{--color-black: #000000;--color-white: #FFFFFF;--color-primary: var(--color-black);--color-secondary: #343541;--color-background: #FFFFFF;--color-background-alt: #F7F7F8;--color-text: #2D2D2D;--color-text-secondary: #6B7280;--color-text-inverse: #FFFFFF;--color-border: #E5E7EB;--color-success: #10B981;--color-error: #EF4444;--color-warning: #F59E0B;--color-info: #3B82F6;--color-chat-user-bg: #F7F7F8;--color-chat-assistant-bg: #FFFFFF;--color-chat-border: #E5E7EB;--color-chat-input-bg: #FFFFFF;--color-chat-input-border: #E5E7EB;--color-chat-input-focus: #000000;--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);--spacing-xs: 0.25rem;--spacing-sm: 0.5rem;--spacing-md: 1rem;--spacing-lg: 1.5rem;--spacing-xl: 2rem;--border-radius-sm: 0.25rem;--border-radius-md: 0.375rem;--border-radius-lg: 0.5rem;--border-radius-full: 9999px;--font-family-base: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;--font-size-xs: 0.75rem;--font-size-sm: 0.875rem;--font-size-base: 1rem;--font-size-lg: 1.125rem;--font-size-xl: 1.25rem;--font-size-2xl: 1.5rem;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height-tight: 1.25;--line-height-normal: 1.5;--line-height-relaxed: 1.75}[data-theme=dark]{--color-background: #343541;--color-background-alt: #444654;--color-text: #FFFFFF;--color-text-secondary: #9CA3AF;--color-border: #4B5563;--color-chat-user-bg: #444654;--color-chat-assistant-bg: #343541;--color-chat-border: #4B5563;--color-chat-input-bg: #40414F;--color-chat-input-border: #4B5563;--color-chat-input-focus: #FFFFFF}.select-menu__backdrop{position:fixed;inset:0;z-index:999;background:rgba(0,0,0,0)}.select-menu{background:var(--color-background, #fff);border-radius:.5rem;box-shadow:0 4px 24px rgba(0,0,0,.12);padding:.5rem 0;min-width:180px;display:flex;flex-direction:column;gap:.25rem}.select-menu__item{background:none;border:none;width:100%;text-align:left;padding:.75rem 1.25rem;font-size:var(--font-size-base);color:var(--color-primary);cursor:pointer;border-radius:.25rem;transition:background .15s;font-family:var(--font-family-base);font-weight:var(--font-weight-medium)}.select-menu__item:hover,.select-menu__item:focus{background:var(--color-background-secondary, #f5f5f5);outline:none}.date-divider{display:flex;align-items:center;justify-content:center;margin:1.5rem 0;padding:0;position:relative}.date-divider::before,.date-divider::after{content:"";flex:1;height:1px;background-color:var(--color-border);max-width:100px}.date-divider::before{margin-right:1rem}.date-divider::after{margin-left:1rem}.date-divider__text{font-family:var(--font-family-base);font-size:.75rem;font-weight:700;color:#6b7280;letter-spacing:.05em;white-space:nowrap}.logo{display:inline-flex;align-items:center;justify-content:center}.logo svg{display:block}:root{--color-black: #000000;--color-white: #FFFFFF;--color-primary: var(--color-black);--color-secondary: #343541;--color-background: #FFFFFF;--color-background-alt: #F7F7F8;--color-text: #2D2D2D;--color-text-secondary: #6B7280;--color-text-inverse: #FFFFFF;--color-border: #E5E7EB;--color-success: #10B981;--color-error: #EF4444;--color-warning: #F59E0B;--color-info: #3B82F6;--color-chat-user-bg: #F7F7F8;--color-chat-assistant-bg: #FFFFFF;--color-chat-border: #E5E7EB;--color-chat-input-bg: #FFFFFF;--color-chat-input-border: #E5E7EB;--color-chat-input-focus: #000000;--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);--spacing-xs: 0.25rem;--spacing-sm: 0.5rem;--spacing-md: 1rem;--spacing-lg: 1.5rem;--spacing-xl: 2rem;--border-radius-sm: 0.25rem;--border-radius-md: 0.375rem;--border-radius-lg: 0.5rem;--border-radius-full: 9999px;--font-family-base: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;--font-size-xs: 0.75rem;--font-size-sm: 0.875rem;--font-size-base: 1rem;--font-size-lg: 1.125rem;--font-size-xl: 1.25rem;--font-size-2xl: 1.5rem;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height-tight: 1.25;--line-height-normal: 1.5;--line-height-relaxed: 1.75}[data-theme=dark]{--color-background: #343541;--color-background-alt: #444654;--color-text: #FFFFFF;--color-text-secondary: #9CA3AF;--color-border: #4B5563;--color-chat-user-bg: #444654;--color-chat-assistant-bg: #343541;--color-chat-border: #4B5563;--color-chat-input-bg: #40414F;--color-chat-input-border: #4B5563;--color-chat-input-focus: #FFFFFF}.assistant-message{display:flex;gap:1rem;padding:1rem 0rem 1rem 0rem;width:100%;flex-direction:row;animation:fadeInAndSlideUp .4s cubic-bezier(0.25, 0.1, 0.25, 1) forwards}.assistant-message__content{display:flex;flex-direction:column;gap:.25rem;max-width:100%;min-width:0;box-sizing:border-box;align-items:flex-start}.assistant-message__bubble{padding:0;border-radius:1.25rem;background-color:rgba(0,0,0,0);display:flex;flex-direction:column;align-items:flex-start;gap:.25rem;max-width:420px;min-width:0;word-break:break-word;overflow-wrap:break-word;box-sizing:border-box}.assistant-message__role{font-weight:600;margin-bottom:.25rem;text-transform:capitalize;color:var(--color-secondary)}.assistant-message__markdown{color:var(--color-primary);line-height:var(--line-height-normal);font-family:var(--font-family-base);font-size:var(--font-size-base)}.assistant-message__markdown p{margin:0 0 1rem 0;font-size:var(--font-size-base);line-height:var(--line-height-normal);font-family:var(--font-family-base)}.assistant-message__markdown p:last-child{margin-bottom:0}.assistant-message__markdown h1,.assistant-message__markdown h2,.assistant-message__markdown h3,.assistant-message__markdown h4,.assistant-message__markdown h5,.assistant-message__markdown h6{margin:1.5rem 0 .5rem 0;font-weight:var(--font-weight-semibold);line-height:var(--line-height-tight);font-family:var(--font-family-base)}.assistant-message__markdown h1:first-child,.assistant-message__markdown h2:first-child,.assistant-message__markdown h3:first-child,.assistant-message__markdown h4:first-child,.assistant-message__markdown h5:first-child,.assistant-message__markdown h6:first-child{margin-top:0}.assistant-message__markdown h1{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold)}.assistant-message__markdown h2{font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold)}.assistant-message__markdown h3{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold)}.assistant-message__markdown ul,.assistant-message__markdown ol{margin:.5rem 0;padding-left:1.5rem;font-size:var(--font-size-base);line-height:var(--line-height-normal);font-family:var(--font-family-base)}.assistant-message__markdown li{margin:.25rem 0;font-size:var(--font-size-base);line-height:var(--line-height-normal);font-family:var(--font-family-base)}.assistant-message__markdown code{background-color:var(--color-background-secondary);padding:.125rem .25rem;border-radius:.25rem;font-family:"Monaco","Menlo","Ubuntu Mono",monospace;font-size:var(--font-size-sm)}.assistant-message__markdown pre{background-color:var(--color-background-secondary);padding:1rem;border-radius:.5rem;overflow-x:auto;margin:1rem 0}.assistant-message__markdown pre code{background:none;padding:0;border-radius:0;font-size:var(--font-size-sm)}.assistant-message__markdown strong{font-weight:var(--font-weight-semibold);font-family:var(--font-family-base)}.assistant-message__markdown em{font-style:italic;font-family:var(--font-family-base)}.assistant-message__markdown blockquote{border-left:3px solid var(--color-secondary);padding-left:1rem;margin:1rem 0;font-style:italic;color:var(--color-secondary);font-family:var(--font-family-base);font-size:var(--font-size-base);line-height:var(--line-height-normal)}.assistant-message__markdown table{border-collapse:collapse;width:100%;margin:1rem 0;font-family:var(--font-family-base);font-size:var(--font-size-base)}.assistant-message__markdown th,.assistant-message__markdown td{border:1px solid var(--color-border);padding:.5rem;text-align:left;font-family:var(--font-family-base);font-size:var(--font-size-base)}.assistant-message__markdown th{background-color:var(--color-background-secondary);font-weight:var(--font-weight-semibold)}.assistant-message__timestamp{opacity:.7;text-align:right}@keyframes fadeInAndSlideUp{from{opacity:0;transform:translateY(15px)}to{opacity:1;transform:translateY(0)}}@media(max-width: 700px){.assistant-message__content{max-width:100%}.assistant-message__bubble{max-width:95vw}}:root{--color-black: #000000;--color-white: #FFFFFF;--color-primary: var(--color-black);--color-secondary: #343541;--color-background: #FFFFFF;--color-background-alt: #F7F7F8;--color-text: #2D2D2D;--color-text-secondary: #6B7280;--color-text-inverse: #FFFFFF;--color-border: #E5E7EB;--color-success: #10B981;--color-error: #EF4444;--color-warning: #F59E0B;--color-info: #3B82F6;--color-chat-user-bg: #F7F7F8;--color-chat-assistant-bg: #FFFFFF;--color-chat-border: #E5E7EB;--color-chat-input-bg: #FFFFFF;--color-chat-input-border: #E5E7EB;--color-chat-input-focus: #000000;--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);--spacing-xs: 0.25rem;--spacing-sm: 0.5rem;--spacing-md: 1rem;--spacing-lg: 1.5rem;--spacing-xl: 2rem;--border-radius-sm: 0.25rem;--border-radius-md: 0.375rem;--border-radius-lg: 0.5rem;--border-radius-full: 9999px;--font-family-base: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;--font-size-xs: 0.75rem;--font-size-sm: 0.875rem;--font-size-base: 1rem;--font-size-lg: 1.125rem;--font-size-xl: 1.25rem;--font-size-2xl: 1.5rem;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height-tight: 1.25;--line-height-normal: 1.5;--line-height-relaxed: 1.75}[data-theme=dark]{--color-background: #343541;--color-background-alt: #444654;--color-text: #FFFFFF;--color-text-secondary: #9CA3AF;--color-border: #4B5563;--color-chat-user-bg: #444654;--color-chat-assistant-bg: #343541;--color-chat-border: #4B5563;--color-chat-input-bg: #40414F;--color-chat-input-border: #4B5563;--color-chat-input-focus: #FFFFFF}.assistant-thinking-indicator{display:flex;gap:1rem;padding:1rem 0rem 0rem 0rem;width:100%;flex-direction:row}.assistant-thinking-indicator__content{display:flex;flex-direction:column;gap:.25rem;max-width:100%;min-width:0;box-sizing:border-box;align-items:flex-start}.assistant-thinking-indicator__bubble{border-radius:1.25rem;background-color:var(--color-background-secondary);display:flex;flex-direction:column;align-items:flex-start;gap:.25rem;max-width:420px;min-width:0;overflow-wrap:break-word;box-sizing:border-box}.assistant-thinking-indicator__role{font-weight:600;margin-bottom:.25rem;text-transform:capitalize;color:var(--color-secondary)}.assistant-thinking-indicator__text-container{display:flex;align-items:center}.assistant-thinking-indicator__wave-text span{display:inline-block;animation:pulse-animation 1.8s ease-in-out infinite}@keyframes pulse-animation{0%,100%{opacity:1}50%{opacity:.4}}@media(max-width: 700px){.assistant-thinking-indicator__bubble{max-width:95vw}}:root{--color-black: #000000;--color-white: #FFFFFF;--color-primary: var(--color-black);--color-secondary: #343541;--color-background: #FFFFFF;--color-background-alt: #F7F7F8;--color-text: #2D2D2D;--color-text-secondary: #6B7280;--color-text-inverse: #FFFFFF;--color-border: #E5E7EB;--color-success: #10B981;--color-error: #EF4444;--color-warning: #F59E0B;--color-info: #3B82F6;--color-chat-user-bg: #F7F7F8;--color-chat-assistant-bg: #FFFFFF;--color-chat-border: #E5E7EB;--color-chat-input-bg: #FFFFFF;--color-chat-input-border: #E5E7EB;--color-chat-input-focus: #000000;--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);--spacing-xs: 0.25rem;--spacing-sm: 0.5rem;--spacing-md: 1rem;--spacing-lg: 1.5rem;--spacing-xl: 2rem;--border-radius-sm: 0.25rem;--border-radius-md: 0.375rem;--border-radius-lg: 0.5rem;--border-radius-full: 9999px;--font-family-base: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;--font-size-xs: 0.75rem;--font-size-sm: 0.875rem;--font-size-base: 1rem;--font-size-lg: 1.125rem;--font-size-xl: 1.25rem;--font-size-2xl: 1.5rem;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height-tight: 1.25;--line-height-normal: 1.5;--line-height-relaxed: 1.75}[data-theme=dark]{--color-background: #343541;--color-background-alt: #444654;--color-text: #FFFFFF;--color-text-secondary: #9CA3AF;--color-border: #4B5563;--color-chat-user-bg: #444654;--color-chat-assistant-bg: #343541;--color-chat-border: #4B5563;--color-chat-input-bg: #40414F;--color-chat-input-border: #4B5563;--color-chat-input-focus: #FFFFFF}.chat-header{display:flex;align-items:center;justify-content:center;padding:.75rem;background-color:var(--color-background)}.chat-header__content{display:flex;align-items:center;gap:.3rem}.chat-header__logo{flex-shrink:0}.chat-header__title{margin:0;font-family:var(--font-family-base);font-size:1.125rem;font-weight:600;color:var(--color-text)}.chat__input{padding:1rem 1.5rem;background:none;border-top:none;box-shadow:none;width:100vw;max-width:100vw;box-sizing:border-box}.chat__input-stack{display:flex;flex-direction:column;gap:.5rem;background:var(--color-chat-input-bg);border:1px solid var(--color-chat-input-border);border-radius:var(--border-radius-lg);padding:.5rem 1rem .5rem 1rem}.chat__textarea{width:100%;border:none;outline:none;background:rgba(0,0,0,0);font-family:var(--font-family-base);font-size:var(--font-size-base);color:var(--color-text);resize:none;min-height:32px;max-height:120px;line-height:1.5;padding:0}.chat__actions{display:flex;justify-content:space-between;align-items:center;gap:.5rem}.chat__actions-left{display:flex;align-items:center;gap:.5rem}.chat__actions-right{display:flex;align-items:center;gap:.5rem}.chat__icon-btn{background:none;border:none;padding:0;margin:0 .25rem 0 0;border-radius:0;display:flex;align-items:center;justify-content:center;color:var(--color-text-secondary);cursor:pointer;transition:color .2s}.chat__icon-btn:last-child{margin-right:0}.chat__icon-btn:hover,.chat__icon-btn:focus{background:none;color:var(--color-primary)}.chat__attachments{display:flex;flex-direction:row;gap:12px;overflow-x:auto;padding:8px 0 4px 0;margin-bottom:0;scrollbar-width:none;scrollbar-color:var(--color-border) var(--color-background-secondary);width:100%;max-width:100%;white-space:nowrap}.chat__attachments::-webkit-scrollbar{display:none}.chat__attachments::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:4px}.chat__attachments::-webkit-scrollbar-track{background:var(--color-background-secondary);border-radius:4px}.chat__attachments>*{flex-shrink:0}.chat__attachments-wrapper{position:relative;padding-bottom:22px}.chat__attachments-count{position:absolute;right:0;bottom:0;color:var(--color-text-secondary, #888);font-size:var(--font-size-xs);padding:0;background:none;border-radius:0;box-shadow:none;pointer-events:none;z-index:3;font-family:var(--font-family-base);font-weight:var(--font-weight-medium)}.file-viewer__grid{display:grid;grid-template-columns:repeat(auto-fill, minmax(120px, 1fr));gap:.75rem;margin-bottom:1rem}.file-viewer__item{cursor:pointer;border-radius:var(--border-radius-md);overflow:hidden;transition:all .2s ease;border:1px solid var(--color-border)}.file-viewer__item:hover{transform:translateY(-2px);box-shadow:var(--shadow-md);border-color:var(--color-primary)}.file-viewer__item:focus{outline:2px solid var(--color-primary);outline-offset:2px}.file-viewer__image-container{position:relative;aspect-ratio:1;overflow:hidden}.file-viewer__image-container:hover .file-viewer__overlay{opacity:1}.file-viewer__image{width:100%;height:100%;object-fit:cover;transition:transform .2s ease}.file-viewer__item:hover .file-viewer__image{transform:scale(1.05)}.file-viewer__overlay{position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.6);display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .2s ease;color:#fff}.file-viewer__file-container{padding:1rem;text-align:center;background:var(--color-background-secondary);min-height:120px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem}.file-viewer__file-icon{color:var(--color-text-secondary);display:flex;flex-direction:column;align-items:center;gap:.25rem}.file-viewer__pdf-icon{display:flex;flex-direction:column;align-items:center;gap:.25rem}.file-viewer__pdf-icon span{font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);color:var(--color-error)}.file-viewer__file-info{text-align:center}.file-viewer__file-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-primary);margin-bottom:.25rem;word-break:break-word;line-height:1.2}.file-viewer__file-type{font-size:var(--font-size-xs);color:var(--color-text-secondary)}.file-viewer__navigation{position:fixed;bottom:2rem;left:50%;transform:translateX(-50%);display:flex;align-items:center;gap:1rem;background:rgba(0,0,0,.8);padding:.75rem 1.5rem;border-radius:var(--border-radius-lg);z-index:1001}.file-viewer__nav-btn{background:rgba(0,0,0,0);border:none;color:#fff;padding:.5rem;border-radius:var(--border-radius-sm);cursor:pointer;transition:all .2s ease;display:flex;align-items:center;justify-content:center}.file-viewer__nav-btn:hover{background:hsla(0,0%,100%,.1)}.file-viewer__nav-btn:focus{outline:2px solid #fff;outline-offset:2px}.file-viewer__counter{color:#fff;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);min-width:60px;text-align:center}.fullscreen-viewer{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:0;width:100vw;height:100vh;background:var(--color-background);position:relative;font-family:var(--font-family-base)}.fullscreen-viewer__image-container{position:absolute;top:0;left:0;width:100vw;height:100vh;display:flex;align-items:center;justify-content:center;background:var(--color-background);z-index:1}.fullscreen-viewer__image{max-width:100vw;max-height:100vh;width:100vw;height:100vh;object-fit:contain;border-radius:0;opacity:0;transition:opacity .3s ease;background:var(--color-background)}.fullscreen-viewer__image--loaded{opacity:1}.fullscreen-viewer__loading,.fullscreen-viewer__error{position:absolute;left:0;right:0;top:0;bottom:0;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--color-text-secondary);gap:1rem;background:var(--color-background);z-index:2}.fullscreen-viewer__video-container{width:100%;height:100%;min-height:0;display:flex;align-items:center;justify-content:center;background:var(--color-background)}.fullscreen-viewer__video{max-width:100vw;max-height:100%;border-radius:0;background:var(--color-background)}.fullscreen-viewer__file-container{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:2rem;padding:2rem;width:100vw;height:100vh;background:var(--color-background)}.fullscreen-viewer__file-icon{color:var(--color-text-secondary);display:flex;flex-direction:column;align-items:center;gap:.5rem}.fullscreen-viewer__pdf-icon{display:flex;flex-direction:column;align-items:center;gap:.5rem}.fullscreen-viewer__pdf-icon span{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-error)}.fullscreen-viewer__file-info{display:flex;flex-direction:column;align-items:center;gap:1rem}.fullscreen-viewer__file-name{margin:0;font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);word-break:break-word;max-width:400px}.fullscreen-viewer__file-details{margin:0;font-size:var(--font-size-sm);color:var(--color-text-secondary)}.fullscreen-viewer__download-btn{margin-top:1rem}.fullscreen-viewer__arrow{position:absolute;top:50%;transform:translateY(-50%);z-index:10;background:var(--color-background);box-shadow:0 2px 8px rgba(0,0,0,.1);opacity:.95;transition:background .2s,box-shadow .2s;border:none;outline:none}.fullscreen-viewer__arrow:hover,.fullscreen-viewer__arrow:focus{background:var(--color-background-hover, #f0f0f0);box-shadow:0 4px 12px rgba(0,0,0,.15)}.fullscreen-viewer__arrow--left{left:2rem}.fullscreen-viewer__arrow--right{right:2rem}.fullscreen-viewer__counter{position:absolute;bottom:3.5rem;left:50%;transform:translateX(-50%);background:rgba(0,0,0,.7);color:#fff;padding:.5rem 1rem;border-radius:1rem;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);z-index:10;pointer-events:none}.fullscreen-viewer__floating-header{position:absolute;top:0;left:0;width:100vw;display:flex;align-items:flex-start;justify-content:flex-start;padding:1.2rem 0 0 1.5rem;background:rgba(0,0,0,0);z-index:20;box-shadow:none;backdrop-filter:none}.fullscreen-viewer__floating-title{color:#fff;font-size:1.15rem;font-weight:600;text-shadow:0 1px 4px rgba(0,0,0,.25);max-width:80vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-right:3.5rem}.fullscreen-viewer__floating-close{position:absolute;top:1.2rem;right:2.5rem;background:#111;border:none;border-radius:50%;padding:.12rem;width:32px;height:32px;min-width:32px;min-height:32px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .2s,border .2s;box-shadow:0 2px 8px rgba(0,0,0,.1);border:2px solid rgba(0,0,0,0);z-index:30}.fullscreen-viewer__floating-close:hover,.fullscreen-viewer__floating-close:focus{background:#fff;border:2px solid #111}.fullscreen-viewer__floating-close svg{width:18px;height:18px;stroke:#fff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;display:block}.fullscreen-viewer__floating-close:hover svg,.fullscreen-viewer__floating-close:focus svg{stroke:#111}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.message-status{display:inline-block}.message-status--failed{color:#ff3b30 !important}.message-status__retry{text-decoration:underline;cursor:pointer;color:#ff3b30;font-weight:600}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,.8);display:flex;align-items:center;justify-content:center;z-index:1000;padding:0;width:100vw;height:100vh}.modal{background:var(--color-background);border-radius:0;box-shadow:var(--shadow-xl);max-width:100vw;max-height:100vh;width:100vw;height:100vh;display:flex;flex-direction:column;overflow:hidden;animation:modalFadeIn .2s ease-out;font-family:var(--font-family-base)}.modal__header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.5rem;background:var(--color-background-secondary);flex-shrink:0}.modal__title{margin:0;font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text-primary)}.modal__close-btn{background:rgba(0,0,0,0);border:none;color:var(--color-text-secondary);padding:.5rem;border-radius:var(--border-radius-sm);cursor:pointer;transition:all .2s ease}.modal__close-btn:hover{background:var(--color-background-hover);color:var(--color-text-primary)}.modal__content{flex:1;min-height:0;overflow:hidden;padding:0;display:flex;align-items:center;justify-content:center;height:100%;width:100%}@keyframes modalFadeIn{from{opacity:0;transform:scale(0.95)}to{opacity:1;transform:scale(1)}}.user-attachments{display:flex;flex-direction:row;gap:12px;overflow-x:auto;padding:0 0 4px 0;margin-bottom:.5rem;scrollbar-width:none;width:100%;max-width:100%;white-space:nowrap}.user-attachments::-webkit-scrollbar{display:none}.user-attachments>*{flex-shrink:0}:root{--color-black: #000000;--color-white: #FFFFFF;--color-primary: var(--color-black);--color-secondary: #343541;--color-background: #FFFFFF;--color-background-alt: #F7F7F8;--color-text: #2D2D2D;--color-text-secondary: #6B7280;--color-text-inverse: #FFFFFF;--color-border: #E5E7EB;--color-success: #10B981;--color-error: #EF4444;--color-warning: #F59E0B;--color-info: #3B82F6;--color-chat-user-bg: #F7F7F8;--color-chat-assistant-bg: #FFFFFF;--color-chat-border: #E5E7EB;--color-chat-input-bg: #FFFFFF;--color-chat-input-border: #E5E7EB;--color-chat-input-focus: #000000;--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);--spacing-xs: 0.25rem;--spacing-sm: 0.5rem;--spacing-md: 1rem;--spacing-lg: 1.5rem;--spacing-xl: 2rem;--border-radius-sm: 0.25rem;--border-radius-md: 0.375rem;--border-radius-lg: 0.5rem;--border-radius-full: 9999px;--font-family-base: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;--font-size-xs: 0.75rem;--font-size-sm: 0.875rem;--font-size-base: 1rem;--font-size-lg: 1.125rem;--font-size-xl: 1.25rem;--font-size-2xl: 1.5rem;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height-tight: 1.25;--line-height-normal: 1.5;--line-height-relaxed: 1.75}[data-theme=dark]{--color-background: #343541;--color-background-alt: #444654;--color-text: #FFFFFF;--color-text-secondary: #9CA3AF;--color-border: #4B5563;--color-chat-user-bg: #444654;--color-chat-assistant-bg: #343541;--color-chat-border: #4B5563;--color-chat-input-bg: #40414F;--color-chat-input-border: #4B5563;--color-chat-input-focus: #FFFFFF}.user-message{display:flex;gap:1rem;padding:1rem 0rem 1rem 0rem;width:100%;flex-direction:row-reverse;font-family:var(--font-family-base)}.user-message__content{display:flex;flex-direction:column;gap:.25rem;max-width:100%;min-width:0;box-sizing:border-box;align-items:flex-end}.user-message__bubble{padding:1rem 1.5rem;border-radius:1.5rem 1.5rem .5rem 1.5rem;background:#f5f6fa;display:flex;flex-direction:column;align-items:flex-start;gap:.25rem;max-width:420px;min-width:0;word-break:break-word;overflow-wrap:break-word;box-sizing:border-box;color:#23272f;font-family:var(--font-family-base)}.user-message__role{font-weight:600;margin-bottom:.25rem;text-transform:capitalize}.user-message__meta{display:flex;align-items:center;justify-content:flex-end;gap:.5rem}.user-message__timestamp{opacity:.7;text-align:right}@media(max-width: 700px){.user-message__content{max-width:100%}.user-message__bubble{max-width:95vw}}.chat-layout{display:grid;grid-template-rows:auto 1fr auto;grid-template-areas:"header" "main" "footer";height:var(--app-height, 100vh);width:100vw;box-sizing:border-box;background-color:var(--color-background);overflow:hidden;margin:0;max-width:none;max-height:none}.chat-header{grid-area:header;height:25px}.chat-main{grid-area:main;flex-grow:1;overflow-y:auto;padding:0 2rem;display:flex;flex-direction:column;gap:.5rem;width:100%;box-sizing:border-box;position:relative;background-color:var(--color-background);-ms-overflow-style:none;scrollbar-width:none}.chat-main::-webkit-scrollbar{display:none}.chat-footer{grid-area:footer;position:relative}.chat__input{padding:1rem 1.5rem;background:none;border-top:none;box-shadow:none}.chat__input-wrapper{position:relative;width:100%;display:flex;align-items:center}.chat__input-wrapper input,.chat__input-wrapper .input{padding-right:4.5rem !important}.chat__send-btn{position:absolute !important;right:8px;top:50%;transform:translateY(-50%);height:40px;min-width:80px;border-radius:var(--border-radius-lg);z-index:2;margin:0}.chat__input-stack{display:flex;flex-direction:column;gap:.5rem;background:var(--color-chat-input-bg);border:1px solid var(--color-chat-input-border);border-radius:var(--border-radius-lg);padding:.5rem 1rem .5rem 1rem}.chat__textarea{width:100%;border:none;outline:none;background:rgba(0,0,0,0);font-family:var(--font-family-base);font-size:var(--font-size-base);color:var(--color-text);resize:none;min-height:32px;max-height:120px;line-height:1.5;padding:0}.chat__actions{display:flex;justify-content:space-between;align-items:center;gap:.5rem}.chat__actions-left{display:flex;align-items:center;gap:.5rem}.chat__actions-right{display:flex;align-items:center;gap:.5rem}.chat__icon-btn{background:none;border:none;padding:0;margin:0 .25rem 0 0;border-radius:0;display:flex;align-items:center;justify-content:center;color:var(--color-text-secondary);cursor:pointer;transition:color .2s}.chat__icon-btn:last-child{margin-right:0}.chat__icon-btn:hover,.chat__icon-btn:focus{background:none;color:var(--color-primary)}.chat__attachments{display:flex;flex-direction:row;gap:12px;overflow-x:auto;padding:8px 0 4px 0;margin-bottom:0;scrollbar-width:none;scrollbar-color:var(--color-border) var(--color-background-alt);width:100%;max-width:100%;white-space:nowrap}.chat__attachments::-webkit-scrollbar{display:none}.chat__attachments::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:4px}.chat__attachments::-webkit-scrollbar-track{background:var(--color-background-alt);border-radius:4px}.chat__attachments>*{flex-shrink:0}.chat__attachments-wrapper{position:relative;padding-bottom:22px}.chat__attachments-count{position:absolute;right:0;bottom:0;color:var(--color-text-secondary, #888);font-size:var(--font-size-xs);padding:0;background:none;border-radius:0;box-shadow:none;pointer-events:none;z-index:3;font-family:var(--font-family-base);font-weight:var(--font-weight-medium)}.chat__scroll-to-bottom{position:absolute;left:50%;transform:translateX(-50%);top:-3rem;z-index:10;box-shadow:0 2px 8px rgba(0,0,0,.1);background:var(--color-background);transition:opacity .2s,transform .2s;opacity:.95}@media(max-width: 700px){.chat-layout{max-width:100vw;width:100vw;border-radius:0}.chat-main,.chat__input{padding-left:1rem;padding-right:1rem}.chat__scroll-to-bottom{left:50%;transform:translateX(-50%);top:-2.5rem}}.chat__scroll-to-bottom .button__icon{display:flex;align-items:center;justify-content:center;transform:rotate(180deg)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--color-black: #000000;--color-white: #FFFFFF;--color-primary: var(--color-black);--color-secondary: #343541;--color-background: #FFFFFF;--color-background-alt: #F7F7F8;--color-text: #2D2D2D;--color-text-secondary: #6B7280;--color-text-inverse: #FFFFFF;--color-border: #E5E7EB;--color-success: #10B981;--color-error: #EF4444;--color-warning: #F59E0B;--color-info: #3B82F6;--color-chat-user-bg: #F7F7F8;--color-chat-assistant-bg: #FFFFFF;--color-chat-border: #E5E7EB;--color-chat-input-bg: #FFFFFF;--color-chat-input-border: #E5E7EB;--color-chat-input-focus: #000000;--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);--spacing-xs: 0.25rem;--spacing-sm: 0.5rem;--spacing-md: 1rem;--spacing-lg: 1.5rem;--spacing-xl: 2rem;--border-radius-sm: 0.25rem;--border-radius-md: 0.375rem;--border-radius-lg: 0.5rem;--border-radius-full: 9999px;--font-family-base: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;--font-size-xs: 0.75rem;--font-size-sm: 0.875rem;--font-size-base: 1rem;--font-size-lg: 1.125rem;--font-size-xl: 1.25rem;--font-size-2xl: 1.5rem;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height-tight: 1.25;--line-height-normal: 1.5;--line-height-relaxed: 1.75}[data-theme=dark]{--color-background: #343541;--color-background-alt: #444654;--color-text: #FFFFFF;--color-text-secondary: #9CA3AF;--color-border: #4B5563;--color-chat-user-bg: #444654;--color-chat-assistant-bg: #343541;--color-chat-border: #4B5563;--color-chat-input-bg: #40414F;--color-chat-input-border: #4B5563;--color-chat-input-focus: #FFFFFF}:root{--color-black: #000000;--color-white: #FFFFFF;--color-primary: var(--color-black);--color-secondary: #343541;--color-background: #FFFFFF;--color-background-alt: #F7F7F8;--color-text: #2D2D2D;--color-text-secondary: #6B7280;--color-text-inverse: #FFFFFF;--color-border: #E5E7EB;--color-success: #10B981;--color-error: #EF4444;--color-warning: #F59E0B;--color-info: #3B82F6;--color-chat-user-bg: #F7F7F8;--color-chat-assistant-bg: #FFFFFF;--color-chat-border: #E5E7EB;--color-chat-input-bg: #FFFFFF;--color-chat-input-border: #E5E7EB;--color-chat-input-focus: #000000;--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);--spacing-xs: 0.25rem;--spacing-sm: 0.5rem;--spacing-md: 1rem;--spacing-lg: 1.5rem;--spacing-xl: 2rem;--border-radius-sm: 0.25rem;--border-radius-md: 0.375rem;--border-radius-lg: 0.5rem;--border-radius-full: 9999px;--font-family-base: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;--font-size-xs: 0.75rem;--font-size-sm: 0.875rem;--font-size-base: 1rem;--font-size-lg: 1.125rem;--font-size-xl: 1.25rem;--font-size-2xl: 1.5rem;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height-tight: 1.25;--line-height-normal: 1.5;--line-height-relaxed: 1.75}[data-theme=dark]{--color-background: #343541;--color-background-alt: #444654;--color-text: #FFFFFF;--color-text-secondary: #9CA3AF;--color-border: #4B5563;--color-chat-user-bg: #444654;--color-chat-assistant-bg: #343541;--color-chat-border: #4B5563;--color-chat-input-bg: #40414F;--color-chat-input-border: #4B5563;--color-chat-input-focus: #FFFFFF}*{margin:0;padding:0;box-sizing:border-box}body{font-family:var(--font-family-base);font-size:var(--font-size-base);line-height:var(--line-height-normal);color:var(--color-text);background-color:var(--color-background);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.text-primary{color:var(--color-primary)}.text-secondary{color:var(--color-text-secondary)}.bg-primary{background-color:var(--color-primary)}.bg-secondary{background-color:var(--color-background-alt)}.transition-all{transition:all .2s ease-in-out}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--color-background)}::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:var(--border-radius-full)}::-webkit-scrollbar-thumb:hover{background:var(--color-text-secondary)}.button{display:inline-flex;align-items:center;justify-content:center;gap:var(--spacing-sm);border:none;border-radius:var(--border-radius-md);font-family:var(--font-family-base);font-weight:var(--font-weight-medium);cursor:pointer;transition:all .2s ease-in-out;position:relative}.button--primary{background-color:var(--color-primary);color:var(--color-white)}.button--primary:hover:not(:disabled){opacity:.9}.button--primary:active:not(:disabled){opacity:.8}.button--secondary{background-color:var(--color-background-alt);color:var(--color-text)}.button--secondary:hover:not(:disabled){background-color:var(--color-border)}.button--ghost{background-color:rgba(0,0,0,0);color:var(--color-text)}.button--ghost:hover:not(:disabled){background-color:var(--color-background-alt)}.button--icon{padding:var(--spacing-sm);border-radius:var(--border-radius-full);background-color:rgba(0,0,0,0);color:var(--color-text)}.button--icon:hover:not(:disabled){background-color:var(--color-background-alt)}.button--small{padding:var(--spacing-xs) var(--spacing-sm);font-size:var(--font-size-sm)}.button--medium{padding:var(--spacing-sm) var(--spacing-md);font-size:var(--font-size-base)}.button--large{padding:var(--spacing-md) var(--spacing-lg);font-size:var(--font-size-lg)}.button:disabled{opacity:.5;cursor:not-allowed}.button--full-width{width:100%}.button--loading{cursor:wait}.button--loading .button__text{visibility:hidden}.button__loader{position:absolute;width:16px;height:16px;border:2px solid var(--color-white);border-radius:50%;border-top-color:rgba(0,0,0,0);animation:button-spin .8s linear infinite}.button__icon{display:flex;align-items:center;justify-content:center}@keyframes button-spin{to{transform:rotate(360deg)}}.button--circle{background:var(--color-black) !important;color:var(--color-white);border-radius:50% !important;width:32px !important;height:32px !important;min-width:32px !important;min-height:32px !important;padding:0 !important;display:flex;align-items:center;justify-content:center;box-shadow:none;border:none;transition:background .2s}.button--circle:hover,.button--circle:focus{background:#222 !important}.button--circle .button__icon{color:var(--color-white);display:flex;align-items:center;justify-content:center}.input-wrapper{display:flex;flex-direction:column;gap:var(--spacing-xs)}.input-wrapper--full-width{width:100%}.input-wrapper--error .input{border-color:var(--color-error)}.input-wrapper--error .input:focus{border-color:var(--color-error);box-shadow:0 0 0 2px rgba(239,68,68,.1)}.input-wrapper--chat .input{background-color:var(--color-chat-input-bg);border:1px solid var(--color-chat-input-border);border-radius:var(--border-radius-lg);padding:0 var(--spacing-lg);font-size:var(--font-size-base);line-height:var(--line-height-relaxed);height:40px;min-height:40px;box-sizing:border-box;display:flex;align-items:center}.input-wrapper--chat .input:focus{border-color:var(--color-chat-input-focus);box-shadow:0 0 0 2px rgba(0,0,0,.1)}.input-wrapper__label{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text)}.input-wrapper__container{position:relative;display:flex;align-items:center}.input-wrapper__icon{position:absolute;left:var(--spacing-md);display:flex;align-items:center;justify-content:center;color:var(--color-text-secondary)}.input-wrapper__error{font-size:var(--font-size-sm);color:var(--color-error)}.input{width:100%;padding:var(--spacing-sm) var(--spacing-md);font-family:var(--font-family-base);font-size:var(--font-size-base);line-height:var(--line-height-normal);color:var(--color-text);background-color:var(--color-background);border:1px solid var(--color-border);border-radius:var(--border-radius-md);transition:all .2s ease-in-out}.input--with-icon{padding-left:calc(var(--spacing-md)*2 + 16px)}.input::placeholder{color:var(--color-text-secondary)}.input:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 2px rgba(0,0,0,.1)}.input:disabled{background-color:var(--color-background-alt);cursor:not-allowed}.text{margin:0;font-family:var(--font-family-base)}.text--h1{font-size:var(--font-size-2xl);line-height:var(--line-height-tight);font-weight:var(--font-weight-bold)}.text--h2{font-size:var(--font-size-xl);line-height:var(--line-height-tight);font-weight:var(--font-weight-semibold)}.text--h3{font-size:var(--font-size-lg);line-height:var(--line-height-tight);font-weight:var(--font-weight-semibold)}.text--h4{font-size:var(--font-size-base);line-height:var(--line-height-normal);font-weight:var(--font-weight-semibold)}.text--body{font-size:var(--font-size-base);line-height:var(--line-height-normal)}.text--small{font-size:var(--font-size-sm);line-height:var(--line-height-normal)}.text--caption{font-size:var(--font-size-xs);line-height:var(--line-height-normal)}.text--normal{font-weight:var(--font-weight-normal)}.text--medium{font-weight:var(--font-weight-medium)}.text--semibold{font-weight:var(--font-weight-semibold)}.text--bold{font-weight:var(--font-weight-bold)}.text--primary{color:var(--color-text)}.text--secondary{color:var(--color-text-secondary)}.text--inherit{color:inherit}.text--left{text-align:left}.text--center{text-align:center}.text--right{text-align:right}.textarea{width:100%;border:none;outline:none;background:rgba(0,0,0,0);font-family:var(--font-family-base);font-size:var(--font-size-base);color:var(--color-text);resize:none;min-height:32px;max-height:120px;line-height:1.5;padding:0}:root{--color-black: #000000;--color-white: #FFFFFF;--color-primary: var(--color-black);--color-secondary: #343541;--color-background: #FFFFFF;--color-background-alt: #F7F7F8;--color-text: #2D2D2D;--color-text-secondary: #6B7280;--color-text-inverse: #FFFFFF;--color-border: #E5E7EB;--color-success: #10B981;--color-error: #EF4444;--color-warning: #F59E0B;--color-info: #3B82F6;--color-chat-user-bg: #F7F7F8;--color-chat-assistant-bg: #FFFFFF;--color-chat-border: #E5E7EB;--color-chat-input-bg: #FFFFFF;--color-chat-input-border: #E5E7EB;--color-chat-input-focus: #000000;--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);--spacing-xs: 0.25rem;--spacing-sm: 0.5rem;--spacing-md: 1rem;--spacing-lg: 1.5rem;--spacing-xl: 2rem;--border-radius-sm: 0.25rem;--border-radius-md: 0.375rem;--border-radius-lg: 0.5rem;--border-radius-full: 9999px;--font-family-base: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;--font-size-xs: 0.75rem;--font-size-sm: 0.875rem;--font-size-base: 1rem;--font-size-lg: 1.125rem;--font-size-xl: 1.25rem;--font-size-2xl: 1.5rem;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height-tight: 1.25;--line-height-normal: 1.5;--line-height-relaxed: 1.75}[data-theme=dark]{--color-background: #343541;--color-background-alt: #444654;--color-text: #FFFFFF;--color-text-secondary: #9CA3AF;--color-border: #4B5563;--color-chat-user-bg: #444654;--color-chat-assistant-bg: #343541;--color-chat-border: #4B5563;--color-chat-input-bg: #40414F;--color-chat-input-border: #4B5563;--color-chat-input-focus: #FFFFFF}.link{display:inline-flex;align-items:center;gap:.25rem;text-decoration:none;transition:all .2s ease-in-out;font-family:var(--font-family-base);cursor:pointer}.link--primary{color:var(--color-primary)}.link--primary:hover{color:var(--color-primary-dark)}.link--secondary{color:var(--color-secondary)}.link--secondary:hover{color:var(--color-secondary-dark)}.link--accent{color:var(--color-accent)}.link--accent:hover{color:var(--color-accent-dark)}.link--small{font-size:var(--font-size-sm);line-height:var(--line-height-normal)}.link--medium{font-size:var(--font-size-base);line-height:var(--line-height-normal)}.link--large{font-size:var(--font-size-lg);line-height:var(--line-height-normal)}.link--normal{font-weight:var(--font-weight-normal)}.link--medium{font-weight:var(--font-weight-medium)}.link--semibold{font-weight:var(--font-weight-semibold)}.link--bold{font-weight:var(--font-weight-bold)}.link--underline{text-decoration:underline;text-decoration-color:currentColor;text-decoration-thickness:1px;text-underline-offset:2px}.link--underline:hover{text-decoration-thickness:2px}.link--external .link__external-icon{opacity:.7;transition:opacity .2s ease-in-out}.link--external:hover .link__external-icon{opacity:1}.link:hover{transform:translateY(-1px)}.link:active{transform:translateY(0)}.link:focus{outline:2px solid var(--color-primary);outline-offset:2px;border-radius:4px}.link__external-icon{flex-shrink:0}.avatar{position:relative;display:flex;align-items:center;justify-content:center;border-radius:var(--border-radius-full);overflow:hidden;background-color:var(--color-background-alt)}.avatar--small{width:24px;height:24px;font-size:var(--font-size-xs)}.avatar--medium{width:32px;height:32px;font-size:var(--font-size-sm)}.avatar--large{width:40px;height:40px;font-size:var(--font-size-base)}.avatar--user{background-color:var(--color-primary);color:var(--color-white)}.avatar--assistant{background-color:var(--color-background-alt);color:var(--color-text)}.avatar__image{width:100%;height:100%;object-fit:cover}.avatar__fallback{width:100%;height:100%;display:flex;align-items:center;justify-content:center;font-weight:var(--font-weight-medium)}.avatar__assistant-icon{width:60%;height:60%}.avatar__assistant-icon svg{width:100%;height:100%}.avatar--fallback .avatar__fallback{display:flex}.attachment-preview{display:flex;align-items:center;gap:.75rem;padding:.75rem;border:1px solid var(--color-border);border-radius:var(--border-radius-md);background:var(--color-background-secondary);position:relative;transition:all .2s ease;font-family:var(--font-family-base)}.attachment-preview--clickable{cursor:pointer}.attachment-preview--clickable:hover,.attachment-preview--clickable:focus{border-color:#111;outline:none}.attachment-preview__thumb{width:48px;height:48px;object-fit:cover;border-radius:var(--border-radius-sm);flex-shrink:0}.attachment-preview__icon{width:48px;height:48px;display:flex;align-items:center;justify-content:center;background:var(--color-background);border-radius:var(--border-radius-sm);flex-shrink:0}.attachment-preview__pdf-icon{width:48px;height:48px;display:flex;align-items:center;justify-content:center;background:var(--color-error);color:#fff;border-radius:var(--border-radius-sm);font-size:var(--font-size-xs);font-weight:var(--font-weight-bold);flex-shrink:0}.attachment-preview__info{flex:1;min-width:0}.attachment-preview__name{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-primary);margin-bottom:.25rem;word-break:break-word;line-height:1.2}.attachment-preview__type{font-size:var(--font-size-xs);color:var(--color-text-secondary)}.attachment-preview__remove{position:absolute;top:-0.5rem;right:-0.5rem;width:24px;height:24px;min-width:24px;min-height:24px;border:2px solid rgba(0,0,0,0);background:#111;color:#fff;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:var(--font-size-xs);font-weight:var(--font-weight-bold);transition:all .2s ease;z-index:1;box-sizing:border-box;padding:0}.attachment-preview__remove svg{width:12px;height:12px;display:block}.attachment-preview__remove:hover,.attachment-preview__remove:focus{background:#111;border:2px solid #111;color:#fff;outline:none;transform:scale(1.1)}:root{--color-black: #000000;--color-white: #FFFFFF;--color-primary: var(--color-black);--color-secondary: #343541;--color-background: #FFFFFF;--color-background-alt: #F7F7F8;--color-text: #2D2D2D;--color-text-secondary: #6B7280;--color-text-inverse: #FFFFFF;--color-border: #E5E7EB;--color-success: #10B981;--color-error: #EF4444;--color-warning: #F59E0B;--color-info: #3B82F6;--color-chat-user-bg: #F7F7F8;--color-chat-assistant-bg: #FFFFFF;--color-chat-border: #E5E7EB;--color-chat-input-bg: #FFFFFF;--color-chat-input-border: #E5E7EB;--color-chat-input-focus: #000000;--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);--spacing-xs: 0.25rem;--spacing-sm: 0.5rem;--spacing-md: 1rem;--spacing-lg: 1.5rem;--spacing-xl: 2rem;--border-radius-sm: 0.25rem;--border-radius-md: 0.375rem;--border-radius-lg: 0.5rem;--border-radius-full: 9999px;--font-family-base: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;--font-size-xs: 0.75rem;--font-size-sm: 0.875rem;--font-size-base: 1rem;--font-size-lg: 1.125rem;--font-size-xl: 1.25rem;--font-size-2xl: 1.5rem;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height-tight: 1.25;--line-height-normal: 1.5;--line-height-relaxed: 1.75}[data-theme=dark]{--color-background: #343541;--color-background-alt: #444654;--color-text: #FFFFFF;--color-text-secondary: #9CA3AF;--color-border: #4B5563;--color-chat-user-bg: #444654;--color-chat-assistant-bg: #343541;--color-chat-border: #4B5563;--color-chat-input-bg: #40414F;--color-chat-input-border: #4B5563;--color-chat-input-focus: #FFFFFF}.select-menu__backdrop{position:fixed;inset:0;z-index:999;background:rgba(0,0,0,0)}.select-menu{background:var(--color-background, #fff);border-radius:.5rem;box-shadow:0 4px 24px rgba(0,0,0,.12);padding:.5rem 0;min-width:180px;display:flex;flex-direction:column;gap:.25rem}.select-menu__item{background:none;border:none;width:100%;text-align:left;padding:.75rem 1.25rem;font-size:var(--font-size-base);color:var(--color-primary);cursor:pointer;border-radius:.25rem;transition:background .15s;font-family:var(--font-family-base);font-weight:var(--font-weight-medium)}.select-menu__item:hover,.select-menu__item:focus{background:var(--color-background-secondary, #f5f5f5);outline:none}.date-divider{display:flex;align-items:center;justify-content:center;margin:1.5rem 0;padding:0;position:relative}.date-divider::before,.date-divider::after{content:"";flex:1;height:1px;background-color:var(--color-border);max-width:100px}.date-divider::before{margin-right:1rem}.date-divider::after{margin-left:1rem}.date-divider__text{font-family:var(--font-family-base);font-size:.75rem;font-weight:700;color:#6b7280;letter-spacing:.05em;white-space:nowrap}.logo{display:inline-flex;align-items:center;justify-content:center}.logo svg{display:block}:root{--color-black: #000000;--color-white: #FFFFFF;--color-primary: var(--color-black);--color-secondary: #343541;--color-background: #FFFFFF;--color-background-alt: #F7F7F8;--color-text: #2D2D2D;--color-text-secondary: #6B7280;--color-text-inverse: #FFFFFF;--color-border: #E5E7EB;--color-success: #10B981;--color-error: #EF4444;--color-warning: #F59E0B;--color-info: #3B82F6;--color-chat-user-bg: #F7F7F8;--color-chat-assistant-bg: #FFFFFF;--color-chat-border: #E5E7EB;--color-chat-input-bg: #FFFFFF;--color-chat-input-border: #E5E7EB;--color-chat-input-focus: #000000;--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);--spacing-xs: 0.25rem;--spacing-sm: 0.5rem;--spacing-md: 1rem;--spacing-lg: 1.5rem;--spacing-xl: 2rem;--border-radius-sm: 0.25rem;--border-radius-md: 0.375rem;--border-radius-lg: 0.5rem;--border-radius-full: 9999px;--font-family-base: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;--font-size-xs: 0.75rem;--font-size-sm: 0.875rem;--font-size-base: 1rem;--font-size-lg: 1.125rem;--font-size-xl: 1.25rem;--font-size-2xl: 1.5rem;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height-tight: 1.25;--line-height-normal: 1.5;--line-height-relaxed: 1.75}[data-theme=dark]{--color-background: #343541;--color-background-alt: #444654;--color-text: #FFFFFF;--color-text-secondary: #9CA3AF;--color-border: #4B5563;--color-chat-user-bg: #444654;--color-chat-assistant-bg: #343541;--color-chat-border: #4B5563;--color-chat-input-bg: #40414F;--color-chat-input-border: #4B5563;--color-chat-input-focus: #FFFFFF}.assistant-message{display:flex;gap:1rem;padding:1rem 0rem 1rem 0rem;width:100%;flex-direction:row;animation:fadeInAndSlideUp .4s cubic-bezier(0.25, 0.1, 0.25, 1) forwards}.assistant-message__content{display:flex;flex-direction:column;gap:.25rem;max-width:100%;min-width:0;box-sizing:border-box;align-items:flex-start}.assistant-message__bubble{padding:0;border-radius:1.25rem;background-color:rgba(0,0,0,0);display:flex;flex-direction:column;align-items:flex-start;gap:.25rem;max-width:420px;min-width:0;word-break:break-word;overflow-wrap:break-word;box-sizing:border-box}.assistant-message__role{font-weight:600;margin-bottom:.25rem;text-transform:capitalize;color:var(--color-secondary)}.assistant-message__markdown{color:var(--color-primary);line-height:var(--line-height-normal);font-family:var(--font-family-base);font-size:var(--font-size-base)}.assistant-message__markdown p{margin:0 0 1rem 0;font-size:var(--font-size-base);line-height:var(--line-height-normal);font-family:var(--font-family-base)}.assistant-message__markdown p:last-child{margin-bottom:0}.assistant-message__markdown h1,.assistant-message__markdown h2,.assistant-message__markdown h3,.assistant-message__markdown h4,.assistant-message__markdown h5,.assistant-message__markdown h6{margin:1.5rem 0 .5rem 0;font-weight:var(--font-weight-semibold);line-height:var(--line-height-tight);font-family:var(--font-family-base)}.assistant-message__markdown h1:first-child,.assistant-message__markdown h2:first-child,.assistant-message__markdown h3:first-child,.assistant-message__markdown h4:first-child,.assistant-message__markdown h5:first-child,.assistant-message__markdown h6:first-child{margin-top:0}.assistant-message__markdown h1{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold)}.assistant-message__markdown h2{font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold)}.assistant-message__markdown h3{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold)}.assistant-message__markdown ul,.assistant-message__markdown ol{margin:.5rem 0;padding-left:1.5rem;font-size:var(--font-size-base);line-height:var(--line-height-normal);font-family:var(--font-family-base)}.assistant-message__markdown li{margin:.25rem 0;font-size:var(--font-size-base);line-height:var(--line-height-normal);font-family:var(--font-family-base)}.assistant-message__markdown code{background-color:var(--color-background-secondary);padding:.125rem .25rem;border-radius:.25rem;font-family:"Monaco","Menlo","Ubuntu Mono",monospace;font-size:var(--font-size-sm)}.assistant-message__markdown pre{background-color:var(--color-background-secondary);padding:1rem;border-radius:.5rem;overflow-x:auto;margin:1rem 0}.assistant-message__markdown pre code{background:none;padding:0;border-radius:0;font-size:var(--font-size-sm)}.assistant-message__markdown strong{font-weight:var(--font-weight-semibold);font-family:var(--font-family-base)}.assistant-message__markdown em{font-style:italic;font-family:var(--font-family-base)}.assistant-message__markdown blockquote{border-left:3px solid var(--color-secondary);padding-left:1rem;margin:1rem 0;font-style:italic;color:var(--color-secondary);font-family:var(--font-family-base);font-size:var(--font-size-base);line-height:var(--line-height-normal)}.assistant-message__markdown table{border-collapse:collapse;width:100%;margin:1rem 0;font-family:var(--font-family-base);font-size:var(--font-size-base)}.assistant-message__markdown th,.assistant-message__markdown td{border:1px solid var(--color-border);padding:.5rem;text-align:left;font-family:var(--font-family-base);font-size:var(--font-size-base)}.assistant-message__markdown th{background-color:var(--color-background-secondary);font-weight:var(--font-weight-semibold)}.assistant-message__timestamp{opacity:.7;text-align:right}@keyframes fadeInAndSlideUp{from{opacity:0;transform:translateY(15px)}to{opacity:1;transform:translateY(0)}}@media(max-width: 700px){.assistant-message__content{max-width:100%}.assistant-message__bubble{max-width:95vw}}:root{--color-black: #000000;--color-white: #FFFFFF;--color-primary: var(--color-black);--color-secondary: #343541;--color-background: #FFFFFF;--color-background-alt: #F7F7F8;--color-text: #2D2D2D;--color-text-secondary: #6B7280;--color-text-inverse: #FFFFFF;--color-border: #E5E7EB;--color-success: #10B981;--color-error: #EF4444;--color-warning: #F59E0B;--color-info: #3B82F6;--color-chat-user-bg: #F7F7F8;--color-chat-assistant-bg: #FFFFFF;--color-chat-border: #E5E7EB;--color-chat-input-bg: #FFFFFF;--color-chat-input-border: #E5E7EB;--color-chat-input-focus: #000000;--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);--spacing-xs: 0.25rem;--spacing-sm: 0.5rem;--spacing-md: 1rem;--spacing-lg: 1.5rem;--spacing-xl: 2rem;--border-radius-sm: 0.25rem;--border-radius-md: 0.375rem;--border-radius-lg: 0.5rem;--border-radius-full: 9999px;--font-family-base: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;--font-size-xs: 0.75rem;--font-size-sm: 0.875rem;--font-size-base: 1rem;--font-size-lg: 1.125rem;--font-size-xl: 1.25rem;--font-size-2xl: 1.5rem;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height-tight: 1.25;--line-height-normal: 1.5;--line-height-relaxed: 1.75}[data-theme=dark]{--color-background: #343541;--color-background-alt: #444654;--color-text: #FFFFFF;--color-text-secondary: #9CA3AF;--color-border: #4B5563;--color-chat-user-bg: #444654;--color-chat-assistant-bg: #343541;--color-chat-border: #4B5563;--color-chat-input-bg: #40414F;--color-chat-input-border: #4B5563;--color-chat-input-focus: #FFFFFF}.assistant-thinking-indicator{display:flex;gap:1rem;padding:1rem 0rem 0rem 0rem;width:100%;flex-direction:row}.assistant-thinking-indicator__content{display:flex;flex-direction:column;gap:.25rem;max-width:100%;min-width:0;box-sizing:border-box;align-items:flex-start}.assistant-thinking-indicator__bubble{border-radius:1.25rem;background-color:var(--color-background-secondary);display:flex;flex-direction:column;align-items:flex-start;gap:.25rem;max-width:420px;min-width:0;overflow-wrap:break-word;box-sizing:border-box}.assistant-thinking-indicator__role{font-weight:600;margin-bottom:.25rem;text-transform:capitalize;color:var(--color-secondary)}.assistant-thinking-indicator__text-container{display:flex;align-items:center}.assistant-thinking-indicator__wave-text span{display:inline-block;animation:pulse-animation 1.8s ease-in-out infinite}@keyframes pulse-animation{0%,100%{opacity:1}50%{opacity:.4}}@media(max-width: 700px){.assistant-thinking-indicator__bubble{max-width:95vw}}:root{--color-black: #000000;--color-white: #FFFFFF;--color-primary: var(--color-black);--color-secondary: #343541;--color-background: #FFFFFF;--color-background-alt: #F7F7F8;--color-text: #2D2D2D;--color-text-secondary: #6B7280;--color-text-inverse: #FFFFFF;--color-border: #E5E7EB;--color-success: #10B981;--color-error: #EF4444;--color-warning: #F59E0B;--color-info: #3B82F6;--color-chat-user-bg: #F7F7F8;--color-chat-assistant-bg: #FFFFFF;--color-chat-border: #E5E7EB;--color-chat-input-bg: #FFFFFF;--color-chat-input-border: #E5E7EB;--color-chat-input-focus: #000000;--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);--spacing-xs: 0.25rem;--spacing-sm: 0.5rem;--spacing-md: 1rem;--spacing-lg: 1.5rem;--spacing-xl: 2rem;--border-radius-sm: 0.25rem;--border-radius-md: 0.375rem;--border-radius-lg: 0.5rem;--border-radius-full: 9999px;--font-family-base: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;--font-size-xs: 0.75rem;--font-size-sm: 0.875rem;--font-size-base: 1rem;--font-size-lg: 1.125rem;--font-size-xl: 1.25rem;--font-size-2xl: 1.5rem;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height-tight: 1.25;--line-height-normal: 1.5;--line-height-relaxed: 1.75}[data-theme=dark]{--color-background: #343541;--color-background-alt: #444654;--color-text: #FFFFFF;--color-text-secondary: #9CA3AF;--color-border: #4B5563;--color-chat-user-bg: #444654;--color-chat-assistant-bg: #343541;--color-chat-border: #4B5563;--color-chat-input-bg: #40414F;--color-chat-input-border: #4B5563;--color-chat-input-focus: #FFFFFF}.chat-header{display:flex;align-items:center;justify-content:center;padding:.75rem;background-color:var(--color-background)}.chat-header__content{display:flex;align-items:center;gap:.3rem}.chat-header__logo{flex-shrink:0}.chat-header__title{margin:0;font-family:var(--font-family-base);font-size:1.125rem;font-weight:600;color:var(--color-text)}.chat__input{padding:1rem 1.5rem;background:none;border-top:none;box-shadow:none;width:100vw;max-width:100vw;box-sizing:border-box}.chat__input-stack{display:flex;flex-direction:column;gap:.5rem;background:var(--color-chat-input-bg);border:1px solid var(--color-chat-input-border);border-radius:var(--border-radius-lg);padding:.5rem 1rem .5rem 1rem}.chat__textarea{width:100%;border:none;outline:none;background:rgba(0,0,0,0);font-family:var(--font-family-base);font-size:var(--font-size-base);color:var(--color-text);resize:none;min-height:32px;max-height:120px;line-height:1.5;padding:0}.chat__actions{display:flex;justify-content:space-between;align-items:center;gap:.5rem}.chat__actions-left{display:flex;align-items:center;gap:.5rem}.chat__actions-right{display:flex;align-items:center;gap:.5rem}.chat__icon-btn{background:none;border:none;padding:0;margin:0 .25rem 0 0;border-radius:0;display:flex;align-items:center;justify-content:center;color:var(--color-text-secondary);cursor:pointer;transition:color .2s}.chat__icon-btn:last-child{margin-right:0}.chat__icon-btn:hover,.chat__icon-btn:focus{background:none;color:var(--color-primary)}.chat__attachments{display:flex;flex-direction:row;gap:12px;overflow-x:auto;padding:8px 0 4px 0;margin-bottom:0;scrollbar-width:none;scrollbar-color:var(--color-border) var(--color-background-secondary);width:100%;max-width:100%;white-space:nowrap}.chat__attachments::-webkit-scrollbar{display:none}.chat__attachments::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:4px}.chat__attachments::-webkit-scrollbar-track{background:var(--color-background-secondary);border-radius:4px}.chat__attachments>*{flex-shrink:0}.chat__attachments-wrapper{position:relative;padding-bottom:22px}.chat__attachments-count{position:absolute;right:0;bottom:0;color:var(--color-text-secondary, #888);font-size:var(--font-size-xs);padding:0;background:none;border-radius:0;box-shadow:none;pointer-events:none;z-index:3;font-family:var(--font-family-base);font-weight:var(--font-weight-medium)}.file-viewer__grid{display:grid;grid-template-columns:repeat(auto-fill, minmax(120px, 1fr));gap:.75rem;margin-bottom:1rem}.file-viewer__item{cursor:pointer;border-radius:var(--border-radius-md);overflow:hidden;transition:all .2s ease;border:1px solid var(--color-border)}.file-viewer__item:hover{transform:translateY(-2px);box-shadow:var(--shadow-md);border-color:var(--color-primary)}.file-viewer__item:focus{outline:2px solid var(--color-primary);outline-offset:2px}.file-viewer__image-container{position:relative;aspect-ratio:1;overflow:hidden}.file-viewer__image-container:hover .file-viewer__overlay{opacity:1}.file-viewer__image{width:100%;height:100%;object-fit:cover;transition:transform .2s ease}.file-viewer__item:hover .file-viewer__image{transform:scale(1.05)}.file-viewer__overlay{position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.6);display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .2s ease;color:#fff}.file-viewer__file-container{padding:1rem;text-align:center;background:var(--color-background-secondary);min-height:120px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem}.file-viewer__file-icon{color:var(--color-text-secondary);display:flex;flex-direction:column;align-items:center;gap:.25rem}.file-viewer__pdf-icon{display:flex;flex-direction:column;align-items:center;gap:.25rem}.file-viewer__pdf-icon span{font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);color:var(--color-error)}.file-viewer__file-info{text-align:center}.file-viewer__file-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-primary);margin-bottom:.25rem;word-break:break-word;line-height:1.2}.file-viewer__file-type{font-size:var(--font-size-xs);color:var(--color-text-secondary)}.file-viewer__navigation{position:fixed;bottom:2rem;left:50%;transform:translateX(-50%);display:flex;align-items:center;gap:1rem;background:rgba(0,0,0,.8);padding:.75rem 1.5rem;border-radius:var(--border-radius-lg);z-index:1001}.file-viewer__nav-btn{background:rgba(0,0,0,0);border:none;color:#fff;padding:.5rem;border-radius:var(--border-radius-sm);cursor:pointer;transition:all .2s ease;display:flex;align-items:center;justify-content:center}.file-viewer__nav-btn:hover{background:hsla(0,0%,100%,.1)}.file-viewer__nav-btn:focus{outline:2px solid #fff;outline-offset:2px}.file-viewer__counter{color:#fff;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);min-width:60px;text-align:center}.fullscreen-viewer{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:0;width:100vw;height:100vh;background:var(--color-background);position:relative;font-family:var(--font-family-base)}.fullscreen-viewer__image-container{position:absolute;top:0;left:0;width:100vw;height:100vh;display:flex;align-items:center;justify-content:center;background:var(--color-background);z-index:1}.fullscreen-viewer__image{max-width:100vw;max-height:100vh;width:100vw;height:100vh;object-fit:contain;border-radius:0;opacity:0;transition:opacity .3s ease;background:var(--color-background)}.fullscreen-viewer__image--loaded{opacity:1}.fullscreen-viewer__loading,.fullscreen-viewer__error{position:absolute;left:0;right:0;top:0;bottom:0;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--color-text-secondary);gap:1rem;background:var(--color-background);z-index:2}.fullscreen-viewer__video-container{width:100%;height:100%;min-height:0;display:flex;align-items:center;justify-content:center;background:var(--color-background)}.fullscreen-viewer__video{max-width:100vw;max-height:100%;border-radius:0;background:var(--color-background)}.fullscreen-viewer__file-container{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:2rem;padding:2rem;width:100vw;height:100vh;background:var(--color-background)}.fullscreen-viewer__file-icon{color:var(--color-text-secondary);display:flex;flex-direction:column;align-items:center;gap:.5rem}.fullscreen-viewer__pdf-icon{display:flex;flex-direction:column;align-items:center;gap:.5rem}.fullscreen-viewer__pdf-icon span{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-error)}.fullscreen-viewer__file-info{display:flex;flex-direction:column;align-items:center;gap:1rem}.fullscreen-viewer__file-name{margin:0;font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);word-break:break-word;max-width:400px}.fullscreen-viewer__file-details{margin:0;font-size:var(--font-size-sm);color:var(--color-text-secondary)}.fullscreen-viewer__download-btn{margin-top:1rem}.fullscreen-viewer__arrow{position:absolute;top:50%;transform:translateY(-50%);z-index:10;background:var(--color-background);box-shadow:0 2px 8px rgba(0,0,0,.1);opacity:.95;transition:background .2s,box-shadow .2s;border:none;outline:none}.fullscreen-viewer__arrow:hover,.fullscreen-viewer__arrow:focus{background:var(--color-background-hover, #f0f0f0);box-shadow:0 4px 12px rgba(0,0,0,.15)}.fullscreen-viewer__arrow--left{left:2rem}.fullscreen-viewer__arrow--right{right:2rem}.fullscreen-viewer__counter{position:absolute;bottom:3.5rem;left:50%;transform:translateX(-50%);background:rgba(0,0,0,.7);color:#fff;padding:.5rem 1rem;border-radius:1rem;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);z-index:10;pointer-events:none}.fullscreen-viewer__floating-header{position:absolute;top:0;left:0;width:100vw;display:flex;align-items:flex-start;justify-content:flex-start;padding:1.2rem 0 0 1.5rem;background:rgba(0,0,0,0);z-index:20;box-shadow:none;backdrop-filter:none}.fullscreen-viewer__floating-title{color:#fff;font-size:1.15rem;font-weight:600;text-shadow:0 1px 4px rgba(0,0,0,.25);max-width:80vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-right:3.5rem}.fullscreen-viewer__floating-close{position:absolute;top:1.2rem;right:2.5rem;background:#111;border:none;border-radius:50%;padding:.12rem;width:32px;height:32px;min-width:32px;min-height:32px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .2s,border .2s;box-shadow:0 2px 8px rgba(0,0,0,.1);border:2px solid rgba(0,0,0,0);z-index:30}.fullscreen-viewer__floating-close:hover,.fullscreen-viewer__floating-close:focus{background:#fff;border:2px solid #111}.fullscreen-viewer__floating-close svg{width:18px;height:18px;stroke:#fff;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;display:block}.fullscreen-viewer__floating-close:hover svg,.fullscreen-viewer__floating-close:focus svg{stroke:#111}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.message-status{display:inline-block}.message-status--failed{color:#ff3b30 !important}.message-status__retry{text-decoration:underline;cursor:pointer;color:#ff3b30;font-weight:600}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,.8);display:flex;align-items:center;justify-content:center;z-index:1000;padding:0;width:100vw;height:100vh}.modal{background:var(--color-background);border-radius:0;box-shadow:var(--shadow-xl);max-width:100vw;max-height:100vh;width:100vw;height:100vh;display:flex;flex-direction:column;overflow:hidden;animation:modalFadeIn .2s ease-out;font-family:var(--font-family-base)}.modal__header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.5rem;background:var(--color-background-secondary);flex-shrink:0}.modal__title{margin:0;font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text-primary)}.modal__close-btn{background:rgba(0,0,0,0);border:none;color:var(--color-text-secondary);padding:.5rem;border-radius:var(--border-radius-sm);cursor:pointer;transition:all .2s ease}.modal__close-btn:hover{background:var(--color-background-hover);color:var(--color-text-primary)}.modal__content{flex:1;min-height:0;overflow:hidden;padding:0;display:flex;align-items:center;justify-content:center;height:100%;width:100%}@keyframes modalFadeIn{from{opacity:0;transform:scale(0.95)}to{opacity:1;transform:scale(1)}}.user-attachments{display:flex;flex-direction:row;gap:12px;overflow-x:auto;padding:0 0 4px 0;margin-bottom:.5rem;scrollbar-width:none;width:100%;max-width:100%;white-space:nowrap}.user-attachments::-webkit-scrollbar{display:none}.user-attachments>*{flex-shrink:0}:root{--color-black: #000000;--color-white: #FFFFFF;--color-primary: var(--color-black);--color-secondary: #343541;--color-background: #FFFFFF;--color-background-alt: #F7F7F8;--color-text: #2D2D2D;--color-text-secondary: #6B7280;--color-text-inverse: #FFFFFF;--color-border: #E5E7EB;--color-success: #10B981;--color-error: #EF4444;--color-warning: #F59E0B;--color-info: #3B82F6;--color-chat-user-bg: #F7F7F8;--color-chat-assistant-bg: #FFFFFF;--color-chat-border: #E5E7EB;--color-chat-input-bg: #FFFFFF;--color-chat-input-border: #E5E7EB;--color-chat-input-focus: #000000;--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);--spacing-xs: 0.25rem;--spacing-sm: 0.5rem;--spacing-md: 1rem;--spacing-lg: 1.5rem;--spacing-xl: 2rem;--border-radius-sm: 0.25rem;--border-radius-md: 0.375rem;--border-radius-lg: 0.5rem;--border-radius-full: 9999px;--font-family-base: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;--font-size-xs: 0.75rem;--font-size-sm: 0.875rem;--font-size-base: 1rem;--font-size-lg: 1.125rem;--font-size-xl: 1.25rem;--font-size-2xl: 1.5rem;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height-tight: 1.25;--line-height-normal: 1.5;--line-height-relaxed: 1.75}[data-theme=dark]{--color-background: #343541;--color-background-alt: #444654;--color-text: #FFFFFF;--color-text-secondary: #9CA3AF;--color-border: #4B5563;--color-chat-user-bg: #444654;--color-chat-assistant-bg: #343541;--color-chat-border: #4B5563;--color-chat-input-bg: #40414F;--color-chat-input-border: #4B5563;--color-chat-input-focus: #FFFFFF}.user-message{display:flex;gap:1rem;padding:1rem 0rem 1rem 0rem;width:100%;flex-direction:row-reverse;font-family:var(--font-family-base)}.user-message__content{display:flex;flex-direction:column;gap:.25rem;max-width:100%;min-width:0;box-sizing:border-box;align-items:flex-end}.user-message__bubble{padding:1rem 1.5rem;border-radius:1.5rem 1.5rem .5rem 1.5rem;background:#f5f6fa;display:flex;flex-direction:column;align-items:flex-start;gap:.25rem;max-width:420px;min-width:0;word-break:break-word;overflow-wrap:break-word;box-sizing:border-box;color:#23272f;font-family:var(--font-family-base)}.user-message__role{font-weight:600;margin-bottom:.25rem;text-transform:capitalize}.user-message__meta{display:flex;align-items:center;justify-content:flex-end;gap:.5rem}.user-message__timestamp{opacity:.7;text-align:right}@media(max-width: 700px){.user-message__content{max-width:100%}.user-message__bubble{max-width:95vw}}.chat-layout{display:grid;grid-template-rows:auto 1fr auto;grid-template-areas:"header" "main" "footer";height:var(--app-height, 100vh);width:100vw;box-sizing:border-box;background-color:var(--color-background);overflow:hidden;margin:0;max-width:none;max-height:none}.chat-header{grid-area:header;height:25px}.chat-main{grid-area:main;flex-grow:1;overflow-y:auto;padding:0 2rem;display:flex;flex-direction:column;gap:.5rem;width:100%;box-sizing:border-box;position:relative;background-color:var(--color-background);-ms-overflow-style:none;scrollbar-width:none}.chat-main::-webkit-scrollbar{display:none}.chat-footer{grid-area:footer;position:relative}.chat__input{padding:1rem 1.5rem;background:none;border-top:none;box-shadow:none}.chat__input-wrapper{position:relative;width:100%;display:flex;align-items:center}.chat__input-wrapper input,.chat__input-wrapper .input{padding-right:4.5rem !important}.chat__send-btn{position:absolute !important;right:8px;top:50%;transform:translateY(-50%);height:40px;min-width:80px;border-radius:var(--border-radius-lg);z-index:2;margin:0}.chat__input-stack{display:flex;flex-direction:column;gap:.5rem;background:var(--color-chat-input-bg);border:1px solid var(--color-chat-input-border);border-radius:var(--border-radius-lg);padding:.5rem 1rem .5rem 1rem}.chat__textarea{width:100%;border:none;outline:none;background:rgba(0,0,0,0);font-family:var(--font-family-base);font-size:var(--font-size-base);color:var(--color-text);resize:none;min-height:32px;max-height:120px;line-height:1.5;padding:0}.chat__actions{display:flex;justify-content:space-between;align-items:center;gap:.5rem}.chat__actions-left{display:flex;align-items:center;gap:.5rem}.chat__actions-right{display:flex;align-items:center;gap:.5rem}.chat__icon-btn{background:none;border:none;padding:0;margin:0 .25rem 0 0;border-radius:0;display:flex;align-items:center;justify-content:center;color:var(--color-text-secondary);cursor:pointer;transition:color .2s}.chat__icon-btn:last-child{margin-right:0}.chat__icon-btn:hover,.chat__icon-btn:focus{background:none;color:var(--color-primary)}.chat__attachments{display:flex;flex-direction:row;gap:12px;overflow-x:auto;padding:8px 0 4px 0;margin-bottom:0;scrollbar-width:none;scrollbar-color:var(--color-border) var(--color-background-alt);width:100%;max-width:100%;white-space:nowrap}.chat__attachments::-webkit-scrollbar{display:none}.chat__attachments::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:4px}.chat__attachments::-webkit-scrollbar-track{background:var(--color-background-alt);border-radius:4px}.chat__attachments>*{flex-shrink:0}.chat__attachments-wrapper{position:relative;padding-bottom:22px}.chat__attachments-count{position:absolute;right:0;bottom:0;color:var(--color-text-secondary, #888);font-size:var(--font-size-xs);padding:0;background:none;border-radius:0;box-shadow:none;pointer-events:none;z-index:3;font-family:var(--font-family-base);font-weight:var(--font-weight-medium)}.chat__scroll-to-bottom{position:absolute;left:50%;transform:translateX(-50%);top:-3rem;z-index:10;box-shadow:0 2px 8px rgba(0,0,0,.1);background:var(--color-background);transition:opacity .2s,transform .2s;opacity:.95}@media(max-width: 700px){.chat-layout{max-width:100vw;width:100vw;border-radius:0}.chat-main,.chat__input{padding-left:1rem;padding-right:1rem}.chat__scroll-to-bottom{left:50%;transform:translateX(-50%);top:-2.5rem}}.chat__scroll-to-bottom .button__icon{display:flex;align-items:center;justify-content:center;transform:rotate(180deg)}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export const AttachmentPreview = ({ file, onRemove, onClick }) => {
|
|
3
|
+
const isImage = file.type.startsWith('image/');
|
|
4
|
+
const isVideo = file.type.startsWith('video/');
|
|
5
|
+
const isPdf = file.type === 'application/pdf';
|
|
6
|
+
const isDoc = file.type.includes('word') || file.type.includes('officedocument');
|
|
7
|
+
const getIcon = () => {
|
|
8
|
+
if (isImage) {
|
|
9
|
+
return (_jsxs("svg", { width: "32", height: "32", viewBox: "0 0 24 24", fill: "none", stroke: "#e57373", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2" }), _jsx("circle", { cx: "8.5", cy: "8.5", r: "1.5" }), _jsx("path", { d: "M21 15l-5-5L5 21" })] }));
|
|
10
|
+
}
|
|
11
|
+
if (isVideo) {
|
|
12
|
+
return (_jsxs("svg", { width: "32", height: "32", viewBox: "0 0 24 24", fill: "none", stroke: "#64b5f6", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("rect", { x: "2", y: "4", width: "20", height: "16", rx: "2" }), _jsx("polygon", { points: "10 9 15 12 10 15 10 9" })] }));
|
|
13
|
+
}
|
|
14
|
+
if (isPdf) {
|
|
15
|
+
return (_jsx("div", { className: "attachment-preview__pdf-icon", children: "PDF" }));
|
|
16
|
+
}
|
|
17
|
+
if (isDoc) {
|
|
18
|
+
return (_jsxs("svg", { width: "32", height: "32", viewBox: "0 0 24 24", fill: "none", stroke: "#9575cd", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2" }), _jsx("text", { x: "7", y: "17", fontSize: "8", fill: "#9575cd", children: "DOC" })] }));
|
|
19
|
+
}
|
|
20
|
+
return (_jsxs("svg", { width: "32", height: "32", viewBox: "0 0 24 24", fill: "none", stroke: "#90a4ae", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2" }), _jsx("path", { d: "M8 7h8M8 11h8M8 15h6" })] }));
|
|
21
|
+
};
|
|
22
|
+
const formatSize = (size) => {
|
|
23
|
+
if (size < 1024)
|
|
24
|
+
return `${size} B`;
|
|
25
|
+
if (size < 1024 * 1024)
|
|
26
|
+
return `${(size / 1024).toFixed(1)} KB`;
|
|
27
|
+
return `${(size / (1024 * 1024)).toFixed(1)} MB`;
|
|
28
|
+
};
|
|
29
|
+
const handleClick = (e) => {
|
|
30
|
+
e.stopPropagation();
|
|
31
|
+
onClick?.();
|
|
32
|
+
};
|
|
33
|
+
const handleKeyDown = (e) => {
|
|
34
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
35
|
+
e.preventDefault();
|
|
36
|
+
onClick?.();
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
return (_jsxs("div", { className: `attachment-preview ${onClick ? 'attachment-preview--clickable' : ''}`, onClick: onClick ? handleClick : undefined, onKeyDown: onClick ? handleKeyDown : undefined, tabIndex: onClick ? 0 : undefined, role: onClick ? 'button' : undefined, "aria-label": onClick ? `Ver ${file.name} en pantalla completa` : undefined, children: [isImage ? (_jsx("img", { src: URL.createObjectURL(file), alt: file.name, className: "attachment-preview__thumb" })) : (_jsx("div", { className: "attachment-preview__icon", children: getIcon() })), _jsxs("div", { className: "attachment-preview__info", children: [_jsx("div", { className: "attachment-preview__name", children: file.name }), _jsxs("div", { className: "attachment-preview__type", children: [file.type || 'Archivo', " \u00B7 ", formatSize(file.size)] })] }), onRemove && (_jsx("button", { className: "attachment-preview__remove", onClick: (e) => {
|
|
40
|
+
e.stopPropagation();
|
|
41
|
+
onRemove();
|
|
42
|
+
}, title: "Eliminar", type: "button", children: _jsxs("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("path", { d: "M3 6h18" }), _jsx("path", { d: "M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6" }), _jsx("path", { d: "M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2" })] }) }))] }));
|
|
43
|
+
};
|
|
44
|
+
export default AttachmentPreview;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface AvatarProps {
|
|
3
|
+
src?: string;
|
|
4
|
+
alt?: string;
|
|
5
|
+
size?: 'small' | 'medium' | 'large';
|
|
6
|
+
variant?: 'user' | 'assistant';
|
|
7
|
+
className?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare const Avatar: React.FC<AvatarProps>;
|
|
10
|
+
export default Avatar;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export const Avatar = ({ src, alt = '', size = 'medium', variant = 'user', className = '', }) => {
|
|
3
|
+
const getInitials = (name) => {
|
|
4
|
+
return name
|
|
5
|
+
.split(' ')
|
|
6
|
+
.map(word => word[0])
|
|
7
|
+
.join('')
|
|
8
|
+
.toUpperCase()
|
|
9
|
+
.slice(0, 2);
|
|
10
|
+
};
|
|
11
|
+
const getFallbackContent = () => {
|
|
12
|
+
if (variant === 'assistant') {
|
|
13
|
+
return (_jsx("div", { className: "avatar__assistant-icon", children: _jsxs("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [_jsx("path", { d: "M12 2C6.48 2 2 6.48 2 12C2 17.52 6.48 22 12 22C17.52 22 22 17.52 22 12C22 6.48 17.52 2 12 2ZM12 20C7.59 20 4 16.41 4 12C4 7.59 7.59 4 12 4C16.41 4 20 7.59 20 12C20 16.41 16.41 20 12 20Z", fill: "currentColor" }), _jsx("path", { d: "M12 6C8.69 6 6 8.69 6 12C6 15.31 8.69 18 12 18C15.31 18 18 15.31 18 12C18 8.69 15.31 6 12 6ZM12 16C9.79 16 8 14.21 8 12C8 9.79 9.79 8 12 8C14.21 8 16 9.79 16 12C16 14.21 14.21 16 12 16Z", fill: "currentColor" })] }) }));
|
|
14
|
+
}
|
|
15
|
+
return getInitials(alt || 'User');
|
|
16
|
+
};
|
|
17
|
+
return (_jsx("div", { className: `
|
|
18
|
+
avatar
|
|
19
|
+
avatar--${size}
|
|
20
|
+
avatar--${variant}
|
|
21
|
+
${className}
|
|
22
|
+
`, children: src ? (_jsx("img", { src: src, alt: alt, className: "avatar__image", onError: (e) => {
|
|
23
|
+
const target = e.target;
|
|
24
|
+
target.style.display = 'none';
|
|
25
|
+
target.parentElement?.classList.add('avatar--fallback');
|
|
26
|
+
} })) : (_jsx("div", { className: "avatar__fallback", children: getFallbackContent() })) }));
|
|
27
|
+
};
|
|
28
|
+
export default Avatar;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
3
|
+
variant?: 'primary' | 'secondary' | 'ghost' | 'icon' | 'circle';
|
|
4
|
+
size?: 'small' | 'medium' | 'large';
|
|
5
|
+
isLoading?: boolean;
|
|
6
|
+
fullWidth?: boolean;
|
|
7
|
+
icon?: React.ReactNode;
|
|
8
|
+
}
|
|
9
|
+
export declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
|
|
10
|
+
export default Button;
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
const buttonStyles = {
|
|
4
|
+
base: {
|
|
5
|
+
display: 'inline-flex',
|
|
6
|
+
alignItems: 'center',
|
|
7
|
+
justifyContent: 'center',
|
|
8
|
+
gap: 'var(--spacing-sm)',
|
|
9
|
+
border: 'none',
|
|
10
|
+
borderRadius: 'var(--border-radius-md)',
|
|
11
|
+
fontFamily: 'var(--font-family-base)',
|
|
12
|
+
fontWeight: 'var(--font-weight-medium)',
|
|
13
|
+
cursor: 'pointer',
|
|
14
|
+
transition: 'all 0.2s ease-in-out',
|
|
15
|
+
position: 'relative',
|
|
16
|
+
},
|
|
17
|
+
variants: {
|
|
18
|
+
primary: {
|
|
19
|
+
backgroundColor: 'var(--color-primary)',
|
|
20
|
+
color: 'var(--color-white)',
|
|
21
|
+
'&:hover:not(:disabled)': {
|
|
22
|
+
opacity: 0.9,
|
|
23
|
+
},
|
|
24
|
+
'&:active:not(:disabled)': {
|
|
25
|
+
opacity: 0.8,
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
secondary: {
|
|
29
|
+
backgroundColor: 'var(--color-background-alt)',
|
|
30
|
+
color: 'var(--color-text)',
|
|
31
|
+
'&:hover:not(:disabled)': {
|
|
32
|
+
backgroundColor: 'var(--color-border)',
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
ghost: {
|
|
36
|
+
backgroundColor: 'transparent',
|
|
37
|
+
color: 'var(--color-text)',
|
|
38
|
+
'&:hover:not(:disabled)': {
|
|
39
|
+
backgroundColor: 'var(--color-background-alt)',
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
icon: {
|
|
43
|
+
padding: 'var(--spacing-sm)',
|
|
44
|
+
borderRadius: 'var(--border-radius-full)',
|
|
45
|
+
backgroundColor: 'transparent',
|
|
46
|
+
color: 'var(--color-text)',
|
|
47
|
+
'&:hover:not(:disabled)': {
|
|
48
|
+
backgroundColor: 'var(--color-background-alt)',
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
circle: {
|
|
52
|
+
background: 'var(--color-black)',
|
|
53
|
+
color: 'var(--color-white)',
|
|
54
|
+
borderRadius: '50%',
|
|
55
|
+
width: '32px',
|
|
56
|
+
height: '32px',
|
|
57
|
+
minWidth: '32px',
|
|
58
|
+
minHeight: '32px',
|
|
59
|
+
padding: '0',
|
|
60
|
+
display: 'flex',
|
|
61
|
+
alignItems: 'center',
|
|
62
|
+
justifyContent: 'center',
|
|
63
|
+
boxShadow: 'none',
|
|
64
|
+
border: 'none',
|
|
65
|
+
transition: 'background 0.2s',
|
|
66
|
+
'&:hover': {
|
|
67
|
+
background: '#222',
|
|
68
|
+
},
|
|
69
|
+
'&:focus': {
|
|
70
|
+
background: '#222',
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
sizes: {
|
|
75
|
+
small: {
|
|
76
|
+
padding: 'var(--spacing-xs) var(--spacing-sm)',
|
|
77
|
+
fontSize: 'var(--font-size-sm)',
|
|
78
|
+
},
|
|
79
|
+
medium: {
|
|
80
|
+
padding: 'var(--spacing-sm) var(--spacing-md)',
|
|
81
|
+
fontSize: 'var(--font-size-base)',
|
|
82
|
+
},
|
|
83
|
+
large: {
|
|
84
|
+
padding: 'var(--spacing-md) var(--spacing-lg)',
|
|
85
|
+
fontSize: 'var(--font-size-lg)',
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
states: {
|
|
89
|
+
disabled: {
|
|
90
|
+
opacity: 0.5,
|
|
91
|
+
cursor: 'not-allowed',
|
|
92
|
+
},
|
|
93
|
+
fullWidth: {
|
|
94
|
+
width: '100%',
|
|
95
|
+
},
|
|
96
|
+
loading: {
|
|
97
|
+
cursor: 'wait',
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
elements: {
|
|
101
|
+
loader: {
|
|
102
|
+
position: 'absolute',
|
|
103
|
+
width: '16px',
|
|
104
|
+
height: '16px',
|
|
105
|
+
border: '2px solid var(--color-white)',
|
|
106
|
+
borderRadius: '50%',
|
|
107
|
+
borderTopColor: 'transparent',
|
|
108
|
+
animation: 'button-spin 0.8s linear infinite',
|
|
109
|
+
},
|
|
110
|
+
icon: {
|
|
111
|
+
display: 'flex',
|
|
112
|
+
alignItems: 'center',
|
|
113
|
+
justifyContent: 'center',
|
|
114
|
+
color: 'var(--color-white)',
|
|
115
|
+
},
|
|
116
|
+
text: {
|
|
117
|
+
visibility: 'hidden',
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
const getButtonStyles = (props) => {
|
|
122
|
+
const { variant = 'primary', size = 'medium', isLoading = false, fullWidth = false, disabled } = props;
|
|
123
|
+
return {
|
|
124
|
+
...buttonStyles.base,
|
|
125
|
+
...buttonStyles.variants[variant],
|
|
126
|
+
...buttonStyles.sizes[size],
|
|
127
|
+
...(disabled && buttonStyles.states.disabled),
|
|
128
|
+
...(fullWidth && buttonStyles.states.fullWidth),
|
|
129
|
+
...(isLoading && buttonStyles.states.loading),
|
|
130
|
+
};
|
|
131
|
+
};
|
|
132
|
+
export const Button = React.forwardRef(({ children, variant = 'primary', size = 'medium', isLoading = false, fullWidth = false, icon, className = '', disabled, ...props }, ref) => {
|
|
133
|
+
const buttonStyle = getButtonStyles({ variant, size, isLoading, fullWidth, disabled });
|
|
134
|
+
return (_jsxs("button", { ref: ref, style: buttonStyle, className: className, disabled: disabled || isLoading, ...props, children: [isLoading && (_jsx("span", { style: buttonStyles.elements.loader })), icon && !isLoading && (_jsx("span", { style: buttonStyles.elements.icon, children: icon })), children && (_jsx("span", { style: isLoading ? buttonStyles.elements.text : undefined, children: children }))] }));
|
|
135
|
+
});
|
|
136
|
+
Button.displayName = 'Button';
|
|
137
|
+
export default Button;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
export const DateDivider = ({ date, className = '' }) => {
|
|
3
|
+
const formatDate = (date) => {
|
|
4
|
+
const now = new Date();
|
|
5
|
+
const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
|
|
6
|
+
const yesterday = new Date(today);
|
|
7
|
+
yesterday.setDate(yesterday.getDate() - 1);
|
|
8
|
+
const messageDate = new Date(date.getFullYear(), date.getMonth(), date.getDate());
|
|
9
|
+
const currentYear = now.getFullYear();
|
|
10
|
+
const messageYear = date.getFullYear();
|
|
11
|
+
// Comparar fechas
|
|
12
|
+
if (messageDate.getTime() === today.getTime()) {
|
|
13
|
+
return 'Hoy';
|
|
14
|
+
}
|
|
15
|
+
else if (messageDate.getTime() === yesterday.getTime()) {
|
|
16
|
+
return 'Ayer';
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
const dayOfWeek = date.getDay();
|
|
20
|
+
const dayNames = ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'];
|
|
21
|
+
const monthNames = [
|
|
22
|
+
'enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio',
|
|
23
|
+
'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'
|
|
24
|
+
];
|
|
25
|
+
const dayName = dayNames[dayOfWeek];
|
|
26
|
+
const day = date.getDate();
|
|
27
|
+
const month = monthNames[date.getMonth()];
|
|
28
|
+
// Si es del mismo año, mostrar solo día y mes listo
|
|
29
|
+
if (messageYear === currentYear) {
|
|
30
|
+
return `${dayName} ${day} ${month}`;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
// Si es de otro año, incluir el año
|
|
34
|
+
return `${dayName} ${day} ${month} ${messageYear}`;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
return (_jsx("div", { className: `date-divider ${className}`, children: _jsx("span", { className: "date-divider__text", children: formatDate(date) }) }));
|
|
39
|
+
};
|
|
40
|
+
export default DateDivider;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { DateDivider } from './DateDivider';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {
|
|
3
|
+
label?: string;
|
|
4
|
+
error?: string;
|
|
5
|
+
icon?: React.ReactNode;
|
|
6
|
+
fullWidth?: boolean;
|
|
7
|
+
variant?: 'default' | 'chat';
|
|
8
|
+
}
|
|
9
|
+
export declare const Input: React.FC<InputProps>;
|
|
10
|
+
export default Input;
|