zerochat 7.3.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. zerochat-7.3.0.dist-info/METADATA +70 -0
  2. zerochat-7.3.0.dist-info/RECORD +130 -0
  3. zerochat-7.3.0.dist-info/WHEEL +5 -0
  4. zerochat-7.3.0.dist-info/entry_points.txt +2 -0
  5. zerochat-7.3.0.dist-info/licenses/LICENSE +34 -0
  6. zerochat-7.3.0.dist-info/top_level.txt +2 -0
  7. zerochat.py +2004 -0
  8. zerochat_runtime/__init__.py +1 -0
  9. zerochat_runtime/assets/css/base.css +199 -0
  10. zerochat_runtime/assets/css/components/composer.css +1258 -0
  11. zerochat_runtime/assets/css/components/debug.css +777 -0
  12. zerochat_runtime/assets/css/components/header.css +97 -0
  13. zerochat_runtime/assets/css/components/icons.css +39 -0
  14. zerochat_runtime/assets/css/components/markdown.css +685 -0
  15. zerochat_runtime/assets/css/components/messages.css +473 -0
  16. zerochat_runtime/assets/css/components/modals.css +1319 -0
  17. zerochat_runtime/assets/css/components/sidebar.css +622 -0
  18. zerochat_runtime/assets/css/components/tools.css +1223 -0
  19. zerochat_runtime/assets/css/layout.css +171 -0
  20. zerochat_runtime/assets/css/print.css +120 -0
  21. zerochat_runtime/assets/css/styles.css +18 -0
  22. zerochat_runtime/assets/css/theme-overrides.css +555 -0
  23. zerochat_runtime/assets/css/tokens.css +165 -0
  24. zerochat_runtime/assets/help/architecture.html +247 -0
  25. zerochat_runtime/assets/help/composer.html +134 -0
  26. zerochat_runtime/assets/help/conversations.html +105 -0
  27. zerochat_runtime/assets/help/debug.html +108 -0
  28. zerochat_runtime/assets/help/en/architecture.html +247 -0
  29. zerochat_runtime/assets/help/en/composer.html +134 -0
  30. zerochat_runtime/assets/help/en/conversations.html +104 -0
  31. zerochat_runtime/assets/help/en/debug.html +105 -0
  32. zerochat_runtime/assets/help/en/gemini-free.html +39 -0
  33. zerochat_runtime/assets/help/en/index.html +191 -0
  34. zerochat_runtime/assets/help/en/learning.html +71 -0
  35. zerochat_runtime/assets/help/en/mcp.html +143 -0
  36. zerochat_runtime/assets/help/en/openrouter-free.html +39 -0
  37. zerochat_runtime/assets/help/en/profiles.html +173 -0
  38. zerochat_runtime/assets/help/en/rag.html +130 -0
  39. zerochat_runtime/assets/help/en/reasoning-telemetry.html +108 -0
  40. zerochat_runtime/assets/help/en/tools-agent.html +133 -0
  41. zerochat_runtime/assets/help/en/webllm.html +355 -0
  42. zerochat_runtime/assets/help/gemini-free.html +39 -0
  43. zerochat_runtime/assets/help/help.css +604 -0
  44. zerochat_runtime/assets/help/help.js +51 -0
  45. zerochat_runtime/assets/help/index.html +194 -0
  46. zerochat_runtime/assets/help/learning.html +71 -0
  47. zerochat_runtime/assets/help/mcp.html +143 -0
  48. zerochat_runtime/assets/help/openrouter-free.html +39 -0
  49. zerochat_runtime/assets/help/profiles.html +174 -0
  50. zerochat_runtime/assets/help/rag.html +130 -0
  51. zerochat_runtime/assets/help/reasoning-telemetry.html +111 -0
  52. zerochat_runtime/assets/help/tools-agent.html +133 -0
  53. zerochat_runtime/assets/help/webllm.html +359 -0
  54. zerochat_runtime/assets/js/agent-core.js +1553 -0
  55. zerochat_runtime/assets/js/api.js +844 -0
  56. zerochat_runtime/assets/js/app.js +2558 -0
  57. zerochat_runtime/assets/js/attachments.js +220 -0
  58. zerochat_runtime/assets/js/charts.js +338 -0
  59. zerochat_runtime/assets/js/chat-engine.js +566 -0
  60. zerochat_runtime/assets/js/config-store.js +207 -0
  61. zerochat_runtime/assets/js/context-manager.js +584 -0
  62. zerochat_runtime/assets/js/conversation-service.js +484 -0
  63. zerochat_runtime/assets/js/cookies.js +688 -0
  64. zerochat_runtime/assets/js/data-reset-service.js +136 -0
  65. zerochat_runtime/assets/js/debug.js +508 -0
  66. zerochat_runtime/assets/js/defaults.js +16 -0
  67. zerochat_runtime/assets/js/export.js +179 -0
  68. zerochat_runtime/assets/js/file-parser.js +2088 -0
  69. zerochat_runtime/assets/js/generation-controller.js +417 -0
  70. zerochat_runtime/assets/js/i18n.js +1483 -0
  71. zerochat_runtime/assets/js/icons.js +156 -0
  72. zerochat_runtime/assets/js/ingestionEngine.js +436 -0
  73. zerochat_runtime/assets/js/markdown.js +588 -0
  74. zerochat_runtime/assets/js/mcp.js +1271 -0
  75. zerochat_runtime/assets/js/message-turns.js +62 -0
  76. zerochat_runtime/assets/js/profile-backup.js +118 -0
  77. zerochat_runtime/assets/js/profile-export-bundle.js +481 -0
  78. zerochat_runtime/assets/js/profile-repository.js +213 -0
  79. zerochat_runtime/assets/js/providers-webllm.js +486 -0
  80. zerochat_runtime/assets/js/providers.js +1560 -0
  81. zerochat_runtime/assets/js/rag-index.js +295 -0
  82. zerochat_runtime/assets/js/rag-service.js +530 -0
  83. zerochat_runtime/assets/js/rag-ui.js +997 -0
  84. zerochat_runtime/assets/js/ragStorage.js +676 -0
  85. zerochat_runtime/assets/js/sandbox.js +449 -0
  86. zerochat_runtime/assets/js/state.js +704 -0
  87. zerochat_runtime/assets/js/storage-db.js +144 -0
  88. zerochat_runtime/assets/js/tool-cards.js +330 -0
  89. zerochat_runtime/assets/js/tool-security.js +653 -0
  90. zerochat_runtime/assets/js/tools/README.md +50 -0
  91. zerochat_runtime/assets/js/tools/builtin/agent-checkpoint.tool.js +212 -0
  92. zerochat_runtime/assets/js/tools/builtin/download-pdf.tool.js +111 -0
  93. zerochat_runtime/assets/js/tools/builtin/execute-javascript.tool.js +219 -0
  94. zerochat_runtime/assets/js/tools/builtin/fetch-web-page.tool.js +112 -0
  95. zerochat_runtime/assets/js/tools/builtin/list-documents.tool.js +117 -0
  96. zerochat_runtime/assets/js/tools/builtin/read-knowledge-chunk.tool.js +129 -0
  97. zerochat_runtime/assets/js/tools/builtin/read-knowledge-image.tool.js +95 -0
  98. zerochat_runtime/assets/js/tools/builtin/render-chart.tool.js +90 -0
  99. zerochat_runtime/assets/js/tools/builtin/search-knowledge-base.tool.js +124 -0
  100. zerochat_runtime/assets/js/tools/builtin/search-web.tool.js +125 -0
  101. zerochat_runtime/assets/js/tools/tool-manifest.js +53 -0
  102. zerochat_runtime/assets/js/tools/tool-runtime.js +77 -0
  103. zerochat_runtime/assets/js/ui-composer.js +319 -0
  104. zerochat_runtime/assets/js/ui-conversation.js +655 -0
  105. zerochat_runtime/assets/js/ui-dialogs.js +132 -0
  106. zerochat_runtime/assets/js/ui-generation-status.js +119 -0
  107. zerochat_runtime/assets/js/ui-inspector.js +804 -0
  108. zerochat_runtime/assets/js/ui-mcp.js +604 -0
  109. zerochat_runtime/assets/js/ui-profiles.js +824 -0
  110. zerochat_runtime/assets/js/ui-reasoning.js +146 -0
  111. zerochat_runtime/assets/js/ui-settings.js +825 -0
  112. zerochat_runtime/assets/js/ui-shell.js +215 -0
  113. zerochat_runtime/assets/js/ui-sidebar.js +429 -0
  114. zerochat_runtime/assets/js/ui-telemetry.js +404 -0
  115. zerochat_runtime/assets/js/ui-transfer.js +262 -0
  116. zerochat_runtime/assets/js/utils.js +216 -0
  117. zerochat_runtime/assets/js/vendor/orama.browser.js +11 -0
  118. zerochat_runtime/assets/js/web-browser.js +569 -0
  119. zerochat_runtime/assets/js/web-search.js +519 -0
  120. zerochat_runtime/assets/manifest.webmanifest +20 -0
  121. zerochat_runtime/assets/services/dummy_mcp/dummy_mcp_server.py +47 -0
  122. zerochat_runtime/assets/services/dummy_mcp/service.json +22 -0
  123. zerochat_runtime/assets/services/lsp/installer.json +9 -0
  124. zerochat_runtime/assets/services/lsp/service.json +22 -0
  125. zerochat_runtime/assets/services/memory/installer.json +9 -0
  126. zerochat_runtime/assets/services/memory/service.json +24 -0
  127. zerochat_runtime/assets/services/playwright/installer.json +10 -0
  128. zerochat_runtime/assets/services/playwright/service.json +39 -0
  129. zerochat_runtime/assets/sw.js +164 -0
  130. zerochat_runtime/assets/zerochat.html +671 -0
@@ -0,0 +1,622 @@
1
+ /* ==========================================================================
2
+ ZeroChat Sidebar - Historial de Conversaciones estilo ChatGPT & Claude
3
+ ========================================================================== */
4
+
5
+ .chat-sidebar {
6
+ width: 280px;
7
+ min-width: 280px;
8
+ max-width: 320px;
9
+ height: 100%;
10
+ height: 100dvh;
11
+ height: var(--app-height, 100dvh);
12
+ max-height: 100%;
13
+ background-color: var(--bg-surface);
14
+ border-right: 1px solid var(--border-color);
15
+ display: flex;
16
+ flex-direction: column;
17
+ z-index: var(--z-sidebar, 110);
18
+ box-shadow: var(--shadow-sm);
19
+ user-select: none;
20
+ /* Transición bidireccional CSS — controlada por .sidebar-hidden */
21
+ transition: translate 0.22s cubic-bezier(0.16, 1, 0.3, 1),
22
+ opacity 0.2s ease,
23
+ visibility 0.22s ease;
24
+ translate: 0 0;
25
+ opacity: 1;
26
+ visibility: visible;
27
+ }
28
+
29
+ /* Estado cerrado: translate fuera de pantalla sin display:none para mantener transición de salida */
30
+ .chat-sidebar.sidebar-hidden {
31
+ translate: -100% 0;
32
+ opacity: 0;
33
+ visibility: hidden;
34
+ pointer-events: none;
35
+ }
36
+
37
+ /* Vistas del Sidebar (Chat e Historial / Configuración) */
38
+ .sidebar-view {
39
+ display: flex;
40
+ flex-direction: column;
41
+ height: 100%;
42
+ min-height: 0;
43
+ flex: 1 1 auto;
44
+ }
45
+
46
+ .sidebar-view[hidden] {
47
+ display: none !important;
48
+ }
49
+
50
+ /* Cabecera en modo Configuración */
51
+ .sidebar-settings-header .sidebar-settings-header-actions {
52
+ display: flex;
53
+ align-items: center;
54
+ justify-content: space-between;
55
+ width: 100%;
56
+ }
57
+
58
+ .btn-sidebar-back {
59
+ display: inline-flex;
60
+ align-items: center;
61
+ gap: 0.5rem;
62
+ background: transparent;
63
+ border: 1px solid transparent;
64
+ color: var(--text-main);
65
+ font-size: 0.9rem;
66
+ font-weight: 600;
67
+ cursor: pointer;
68
+ padding: 0.35rem 0.6rem;
69
+ border-radius: var(--radius-sm, 6px);
70
+ min-height: 38px;
71
+ user-select: none;
72
+ transition: background-color 0.15s ease, color 0.15s ease;
73
+ }
74
+
75
+ .btn-sidebar-back:hover {
76
+ background-color: var(--bg-hover);
77
+ color: var(--primary);
78
+ }
79
+
80
+ /* Navegador de Configuración en el Sidebar */
81
+ .sidebar-settings-nav {
82
+ display: flex;
83
+ flex-direction: column;
84
+ gap: 0.25rem;
85
+ padding: 0.75rem 0.6rem;
86
+ overflow-y: auto;
87
+ flex: 1 1 auto;
88
+ min-height: 0;
89
+ }
90
+
91
+ .sidebar-settings-item {
92
+ display: flex;
93
+ align-items: center;
94
+ gap: 0.75rem;
95
+ width: 100%;
96
+ min-height: 44px;
97
+ padding: 0.6rem 0.85rem;
98
+ background: transparent;
99
+ border: 1px solid transparent;
100
+ border-radius: var(--radius-md, 8px);
101
+ color: var(--text-main);
102
+ font-size: 0.875rem;
103
+ font-weight: 500;
104
+ text-align: left;
105
+ cursor: pointer;
106
+ user-select: none;
107
+ white-space: nowrap;
108
+ box-sizing: border-box;
109
+ transition: background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease;
110
+ text-decoration: none;
111
+ }
112
+
113
+ .sidebar-settings-item:hover {
114
+ background-color: var(--bg-hover);
115
+ color: var(--primary);
116
+ }
117
+
118
+ .sidebar-settings-item:active {
119
+ background-color: var(--bg-active, rgba(0, 0, 0, 0.08));
120
+ transform: scale(0.99);
121
+ }
122
+
123
+ .sidebar-settings-item .settings-item-icon {
124
+ display: inline-flex;
125
+ align-items: center;
126
+ justify-content: center;
127
+ width: 28px;
128
+ height: 28px;
129
+ color: var(--text-muted);
130
+ flex-shrink: 0;
131
+ }
132
+
133
+ .sidebar-settings-item .settings-item-icon .ui-icon,
134
+ .sidebar-settings-choice .settings-item-icon .ui-icon {
135
+ width: 20px;
136
+ height: 20px;
137
+ }
138
+
139
+ .sidebar-settings-item:hover .settings-item-icon {
140
+ color: var(--primary);
141
+ }
142
+
143
+ .sidebar-settings-item .settings-item-label {
144
+ flex: 1;
145
+ overflow: hidden;
146
+ text-overflow: ellipsis;
147
+ }
148
+
149
+ .sidebar-settings-item .settings-item-chevron {
150
+ display: inline-flex;
151
+ align-items: center;
152
+ color: var(--text-muted);
153
+ opacity: 0.7;
154
+ flex-shrink: 0;
155
+ margin-left: auto;
156
+ }
157
+
158
+ .sidebar-settings-choice {
159
+ display: flex;
160
+ align-items: center;
161
+ gap: 0.75rem;
162
+ width: 100%;
163
+ min-height: 44px;
164
+ padding: 0.5rem 0.85rem;
165
+ background: transparent;
166
+ border-radius: var(--radius-md, 8px);
167
+ color: var(--text-main);
168
+ font-size: 0.875rem;
169
+ font-weight: 500;
170
+ box-sizing: border-box;
171
+ }
172
+
173
+ .sidebar-settings-choice .settings-item-icon {
174
+ display: inline-flex;
175
+ align-items: center;
176
+ justify-content: center;
177
+ width: 28px;
178
+ height: 28px;
179
+ color: var(--text-muted);
180
+ flex-shrink: 0;
181
+ }
182
+
183
+ .sidebar-settings-choice .settings-item-label {
184
+ flex: 1;
185
+ overflow: hidden;
186
+ text-overflow: ellipsis;
187
+ white-space: nowrap;
188
+ }
189
+
190
+ .sidebar-choice-toggle-group {
191
+ display: inline-flex;
192
+ align-items: center;
193
+ gap: 2px;
194
+ background: var(--bg-surface-soft, rgba(0, 0, 0, 0.05));
195
+ border: 1px solid var(--border-color, rgba(0, 0, 0, 0.1));
196
+ border-radius: var(--radius-md, 8px);
197
+ padding: 2px;
198
+ flex-shrink: 0;
199
+ }
200
+
201
+ .sidebar-choice-toggle-group .btn-lang-toggle,
202
+ .sidebar-choice-toggle-group .btn-theme-toggle {
203
+ display: inline-flex;
204
+ align-items: center;
205
+ justify-content: center;
206
+ min-width: 32px;
207
+ height: 28px;
208
+ padding: 0 0.45rem;
209
+ border-radius: 6px;
210
+ border: none;
211
+ background: transparent;
212
+ color: var(--text-muted);
213
+ font-size: 0.75rem;
214
+ font-weight: 600;
215
+ cursor: pointer;
216
+ user-select: none;
217
+ transition: background-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease;
218
+ }
219
+
220
+ .sidebar-choice-toggle-group .btn-lang-toggle:hover,
221
+ .sidebar-choice-toggle-group .btn-theme-toggle:hover {
222
+ color: var(--text-main);
223
+ }
224
+
225
+ .sidebar-choice-toggle-group .btn-lang-toggle.active,
226
+ .sidebar-choice-toggle-group .btn-theme-toggle.active {
227
+ background: var(--bg-surface, #ffffff);
228
+ color: var(--primary, #2563eb);
229
+ box-shadow: var(--shadow-sm, 0 1px 2px rgba(0, 0, 0, 0.08));
230
+ }
231
+
232
+ [data-theme="dark"] .sidebar-choice-toggle-group {
233
+ background: rgba(255, 255, 255, 0.06);
234
+ border-color: rgba(255, 255, 255, 0.12);
235
+ }
236
+
237
+ [data-theme="dark"] .sidebar-choice-toggle-group .btn-lang-toggle.active,
238
+ [data-theme="dark"] .sidebar-choice-toggle-group .btn-theme-toggle.active {
239
+ background: var(--bg-surface-elevated, #1e293b);
240
+ color: var(--primary-light, #60a5fa);
241
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
242
+ }
243
+
244
+
245
+ /* Cabecera de Barra Lateral */
246
+ .sidebar-header {
247
+ padding: 0.65rem 0.85rem;
248
+ border-bottom: 1px solid var(--border-color);
249
+ display: flex;
250
+ flex-direction: column;
251
+ justify-content: center;
252
+ min-height: 48px;
253
+ box-sizing: border-box;
254
+ }
255
+
256
+ .sidebar-header-top {
257
+ display: flex;
258
+ align-items: center;
259
+ justify-content: space-between;
260
+ gap: 0.4rem;
261
+ width: 100%;
262
+ }
263
+
264
+ .sidebar-header-actions {
265
+ display: flex;
266
+ align-items: center;
267
+ gap: 0.35rem;
268
+ width: 100%;
269
+ }
270
+
271
+ .sidebar-header-actions .btn-sidebar-icon {
272
+ flex: 1;
273
+ width: auto;
274
+ min-width: 0;
275
+ }
276
+
277
+ /* Botón Destacado "+ Nueva conversación" */
278
+ .btn-sidebar-new-chat {
279
+ width: 100%;
280
+ display: inline-flex;
281
+ align-items: center;
282
+ justify-content: center;
283
+ gap: 0.45rem;
284
+ padding: 0.55rem 0.85rem;
285
+ background-color: var(--primary);
286
+ color: #ffffff;
287
+ border: 1px solid transparent;
288
+ border-radius: var(--radius-full);
289
+ font-size: 0.825rem;
290
+ font-weight: 600;
291
+ cursor: pointer;
292
+ transition: all 0.15s ease;
293
+ box-shadow: var(--shadow-xs);
294
+ user-select: none;
295
+ }
296
+
297
+ .btn-sidebar-new-chat:hover {
298
+ background-color: var(--primary-hover);
299
+ transform: scale(1.02);
300
+ box-shadow: var(--shadow-sm);
301
+ }
302
+
303
+ .btn-sidebar-new-chat:active {
304
+ transform: scale(0.98);
305
+ }
306
+
307
+ /* Botones de acción en cabecera de barra lateral (sin enmarcado) */
308
+ .btn-sidebar-icon,
309
+ .btn-sidebar-close {
310
+ background: transparent;
311
+ border: none;
312
+ color: var(--text-muted);
313
+ width: 44px;
314
+ height: 44px;
315
+ min-width: 44px;
316
+ border-radius: var(--radius-md);
317
+ display: inline-flex;
318
+ align-items: center;
319
+ justify-content: center;
320
+ cursor: pointer;
321
+ font-size: 0.85rem;
322
+ text-decoration: none;
323
+ transition: all 0.15s ease;
324
+ }
325
+
326
+ .btn-sidebar-icon .ui-icon,
327
+ .btn-sidebar-close .ui-icon,
328
+ .btn-sidebar-footer .ui-icon {
329
+ width: 20px;
330
+ height: 20px;
331
+ }
332
+
333
+ .btn-sidebar-icon:hover,
334
+ .btn-sidebar-close:hover {
335
+ background-color: var(--bg-hover);
336
+ color: var(--text-main);
337
+ }
338
+
339
+ /* Buscador de conversaciones */
340
+ .sidebar-search-box {
341
+ padding: 0.5rem 0.85rem;
342
+ border-bottom: 1px solid var(--border-subtle);
343
+ position: relative;
344
+ display: flex;
345
+ align-items: center;
346
+ }
347
+
348
+ .sidebar-search-icon {
349
+ position: absolute;
350
+ left: 1.45rem;
351
+ font-size: 0.8rem;
352
+ color: var(--text-muted);
353
+ pointer-events: none;
354
+ }
355
+
356
+ .sidebar-search-input {
357
+ width: 100%;
358
+ padding: 0.45rem 0.65rem 0.45rem 2rem;
359
+ border-radius: var(--radius-full);
360
+ border: 1px solid var(--input-border);
361
+ background-color: var(--input-bg-subtle);
362
+ color: var(--text-main);
363
+ font-family: inherit;
364
+ font-size: 0.8rem;
365
+ outline: none;
366
+ transition: border-color var(--transition-fast), box-shadow var(--transition-fast), background-color var(--transition-fast);
367
+ }
368
+
369
+ .sidebar-search-input:hover {
370
+ border-color: var(--input-border-hover);
371
+ }
372
+
373
+ .sidebar-search-input:focus,
374
+ .sidebar-search-input:focus-visible {
375
+ border-color: var(--input-border-focus);
376
+ background-color: var(--input-bg);
377
+ box-shadow: var(--input-focus-ring);
378
+ outline: none;
379
+ }
380
+
381
+ /* Encabezados de Agrupación Cronológica (Hoy, Ayer, Últimos 7 días, etc.) */
382
+ .sidebar-group-header {
383
+ padding: 0.65rem 0.75rem 0.25rem 0.75rem;
384
+ font-size: 0.7rem;
385
+ font-weight: 700;
386
+ text-transform: uppercase;
387
+ letter-spacing: 0.05em;
388
+ color: var(--text-muted);
389
+ user-select: none;
390
+ }
391
+
392
+ /* Lista de conversaciones */
393
+ .sidebar-chats-list {
394
+ flex: 1;
395
+ overflow-y: auto;
396
+ padding: 0.5rem;
397
+ display: flex;
398
+ flex-direction: column;
399
+ gap: 0.2rem;
400
+ }
401
+
402
+ .sidebar-chat-item {
403
+ display: flex;
404
+ align-items: center;
405
+ justify-content: space-between;
406
+ padding: 0.55rem 0.75rem;
407
+ border-radius: var(--radius-md);
408
+ cursor: pointer;
409
+ transition: all 0.15s;
410
+ border: 1px solid transparent;
411
+ color: var(--text-main);
412
+ position: relative;
413
+ }
414
+
415
+ .sidebar-chat-item:hover {
416
+ background-color: var(--bg-hover);
417
+ }
418
+
419
+ .sidebar-chat-item.active {
420
+ background-color: var(--primary-light);
421
+ border-color: rgba(var(--primary-rgb), 0.25);
422
+ color: var(--primary);
423
+ font-weight: 600;
424
+ }
425
+
426
+ .sidebar-chat-info {
427
+ flex: 1;
428
+ min-width: 0;
429
+ display: flex;
430
+ flex-direction: column;
431
+ gap: 0.15rem;
432
+ }
433
+
434
+ .sidebar-chat-title {
435
+ font-size: 0.835rem;
436
+ font-weight: 500;
437
+ white-space: nowrap;
438
+ overflow: hidden;
439
+ text-overflow: ellipsis;
440
+ line-height: 1.35;
441
+ }
442
+
443
+ .sidebar-chat-time {
444
+ font-size: 0.685rem;
445
+ color: var(--text-muted);
446
+ }
447
+
448
+ .sidebar-chat-actions {
449
+ display: none;
450
+ align-items: center;
451
+ gap: 0.2rem;
452
+ opacity: 0.8;
453
+ }
454
+
455
+ .sidebar-chat-item:hover .sidebar-chat-actions,
456
+ .sidebar-chat-item:focus-within .sidebar-chat-actions {
457
+ display: flex;
458
+ }
459
+
460
+ .btn-chat-action {
461
+ background: transparent;
462
+ border: none;
463
+ color: var(--text-muted);
464
+ cursor: pointer;
465
+ padding: 0.2rem 0.35rem;
466
+ font-size: 0.75rem;
467
+ border-radius: var(--radius-sm);
468
+ transition: all 0.15s ease;
469
+ }
470
+
471
+ .btn-chat-action:hover {
472
+ color: var(--text-main);
473
+ background-color: var(--bg-hover);
474
+ }
475
+
476
+ .btn-chat-action.btn-delete:hover {
477
+ color: var(--danger);
478
+ background-color: #fee2e2;
479
+ }
480
+
481
+ [data-theme="dark"] .btn-chat-action.btn-delete:hover {
482
+ background-color: rgba(239, 68, 68, 0.2);
483
+ }
484
+
485
+ /* Pie de Barra Lateral (sin enmarcado) */
486
+ .sidebar-footer {
487
+ padding: 0.65rem 0.85rem;
488
+ border-top: 1px solid var(--border-color);
489
+ display: flex;
490
+ align-items: center;
491
+ gap: 0.4rem;
492
+ background-color: var(--bg-surface);
493
+ }
494
+
495
+ .btn-sidebar-footer {
496
+ flex: 0 0 44px;
497
+ width: 44px;
498
+ height: 44px;
499
+ display: inline-flex;
500
+ align-items: center;
501
+ justify-content: center;
502
+ font-size: 0.75rem;
503
+ border-radius: var(--radius-md);
504
+ border: none;
505
+ background-color: transparent;
506
+ color: var(--text-secondary);
507
+ cursor: pointer;
508
+ transition: all 0.15s ease;
509
+ }
510
+
511
+ .btn-sidebar-footer:hover {
512
+ background-color: var(--bg-hover);
513
+ color: var(--text-main);
514
+ }
515
+
516
+ .btn-sidebar-danger {
517
+ margin-left: auto;
518
+ color: var(--danger);
519
+ }
520
+
521
+ .btn-sidebar-danger:hover {
522
+ background-color: #fee2e2;
523
+ color: var(--danger);
524
+ }
525
+
526
+ [data-theme="dark"] .btn-sidebar-danger:hover {
527
+ background-color: rgba(239, 68, 68, 0.2);
528
+ }
529
+
530
+ /* Pie de Barra Lateral en Modo Configuración */
531
+ .sidebar-settings-footer {
532
+ padding: 0.65rem 0.85rem;
533
+ border-top: 1px solid var(--border-color);
534
+ display: flex;
535
+ align-items: center;
536
+ background-color: var(--bg-surface);
537
+ flex-shrink: 0;
538
+ }
539
+
540
+ .btn-sidebar-settings-clear {
541
+ display: inline-flex;
542
+ align-items: center;
543
+ gap: 0.5rem;
544
+ width: 100%;
545
+ min-height: 38px;
546
+ padding: 0.45rem 0.75rem;
547
+ border-radius: var(--radius-md, 8px);
548
+ border: 1px solid rgba(239, 68, 68, 0.35);
549
+ background-color: transparent;
550
+ color: #ef4444;
551
+ font-size: 0.8125rem;
552
+ font-weight: 500;
553
+ cursor: pointer;
554
+ transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease;
555
+ user-select: none;
556
+ box-sizing: border-box;
557
+ }
558
+
559
+ .btn-sidebar-settings-clear:hover {
560
+ background-color: #fee2e2;
561
+ border-color: #ef4444;
562
+ color: #dc2626;
563
+ }
564
+
565
+ [data-theme="dark"] .btn-sidebar-settings-clear {
566
+ color: #f87171;
567
+ border-color: rgba(239, 68, 68, 0.35);
568
+ background-color: rgba(239, 68, 68, 0.08);
569
+ }
570
+
571
+ [data-theme="dark"] .btn-sidebar-settings-clear:hover {
572
+ background-color: rgba(239, 68, 68, 0.2);
573
+ border-color: #ef4444;
574
+ color: #fca5a5;
575
+ }
576
+
577
+ /* Adaptación Responsive para Móviles (Drawer Drawer Mode) */
578
+ @media (max-width: 768px) {
579
+ .chat-sidebar {
580
+ position: fixed;
581
+ top: 0;
582
+ left: 0;
583
+ bottom: 0;
584
+ z-index: var(--z-sidebar, 110);
585
+ box-shadow: var(--shadow-lg);
586
+ width: 82vw;
587
+ max-width: 320px;
588
+ padding-top: env(safe-area-inset-top, 0px);
589
+ }
590
+
591
+ /* El drawer móvil se mantiene cerrado hasta que el usuario lo solicite. */
592
+ .chat-sidebar:not(.sidebar-visible) {
593
+ translate: -100% 0;
594
+ opacity: 0;
595
+ visibility: hidden;
596
+ pointer-events: none;
597
+ }
598
+ }
599
+
600
+ /* Backdrop oscuro detrás del sidebar en móvil */
601
+ .sidebar-backdrop {
602
+ display: none;
603
+ position: fixed;
604
+ inset: 0;
605
+ z-index: calc(var(--z-sidebar, 110) - 1);
606
+ background-color: rgba(15, 23, 42, 0.45);
607
+ backdrop-filter: blur(2px);
608
+ -webkit-backdrop-filter: blur(2px);
609
+ transition: opacity 0.22s ease;
610
+ }
611
+
612
+ @media (max-width: 768px) {
613
+ .sidebar-backdrop.visible {
614
+ display: block;
615
+ animation: fadeInBackdrop 0.22s ease both;
616
+ }
617
+ }
618
+
619
+ @keyframes fadeInBackdrop {
620
+ from { opacity: 0; }
621
+ to { opacity: 1; }
622
+ }