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,1258 @@
1
+ /* ==========================================================================
2
+ ZeroChat Composer Omnibox - Entrada Flotante estilo ChatGPT & Gemini
3
+ ========================================================================== */
4
+
5
+ .chat-input-wrapper {
6
+ flex-shrink: 0;
7
+ width: 100%;
8
+ padding: 0.75rem 1rem max(1rem, env(safe-area-inset-bottom));
9
+ padding-left: max(1rem, env(safe-area-inset-left));
10
+ padding-right: max(1rem, env(safe-area-inset-right));
11
+ background: linear-gradient(180deg, rgba(var(--primary-rgb), 0) 0%, var(--bg-app) 28px);
12
+ position: relative;
13
+ z-index: 10;
14
+ }
15
+
16
+ /* Contenedor de chips de archivos adjuntos */
17
+ .attachments-container {
18
+ display: flex;
19
+ flex-wrap: wrap;
20
+ gap: 0.5rem;
21
+ margin-bottom: 0.5rem;
22
+ max-width: var(--max-content-width, 68rem);
23
+ width: 100%;
24
+ margin-left: auto;
25
+ margin-right: auto;
26
+ }
27
+
28
+ .file-chip {
29
+ display: inline-flex;
30
+ align-items: center;
31
+ gap: 0.45rem;
32
+ background-color: var(--bg-surface);
33
+ border: 1px solid var(--border-color);
34
+ padding: 0.35rem 0.65rem;
35
+ border-radius: var(--radius-full);
36
+ font-size: 0.8rem;
37
+ box-shadow: var(--shadow-xs);
38
+ animation: fadeIn 0.15s ease-out;
39
+ }
40
+
41
+ .file-chip-icon {
42
+ color: var(--primary);
43
+ display: flex;
44
+ align-items: center;
45
+ }
46
+
47
+ .file-chip-name {
48
+ font-weight: 500;
49
+ max-width: 180px;
50
+ overflow: hidden;
51
+ text-overflow: ellipsis;
52
+ white-space: nowrap;
53
+ }
54
+
55
+ .file-chip-size {
56
+ color: var(--text-muted);
57
+ font-size: 0.725rem;
58
+ }
59
+
60
+ .file-chip-remove {
61
+ background: transparent;
62
+ border: none;
63
+ color: var(--text-muted);
64
+ cursor: pointer;
65
+ padding: 0;
66
+ display: flex;
67
+ align-items: center;
68
+ justify-content: center;
69
+ border-radius: var(--radius-full);
70
+ width: 16px;
71
+ height: 16px;
72
+ transition: all 0.15s ease;
73
+ }
74
+
75
+ .file-chip-remove:hover {
76
+ background-color: var(--danger);
77
+ color: white;
78
+ }
79
+
80
+ /* Formulario Omnibox Flotante */
81
+ .chat-input-container {
82
+ position: relative;
83
+ display: flex;
84
+ flex-direction: column;
85
+ gap: 0.35rem;
86
+ background-color: var(--bg-surface);
87
+ border: 1px solid var(--border-color);
88
+ border-radius: 1.25rem;
89
+ padding: 0.6rem 0.75rem 0.55rem 0.75rem;
90
+ box-shadow: var(--shadow-composer);
91
+ transition: border-color 0.2s, box-shadow 0.2s, background-color 0.2s;
92
+ max-width: var(--max-content-width, 68rem);
93
+ width: 100%;
94
+ margin-left: auto;
95
+ margin-right: auto;
96
+ }
97
+
98
+ .chat-input-container:focus-within {
99
+ border-color: var(--input-border-focus);
100
+ box-shadow: var(--shadow-composer), 0 0 0 1px var(--input-border-focus);
101
+ }
102
+
103
+ .chat-input-container.drag-over {
104
+ border-color: var(--primary);
105
+ background-color: var(--primary-light);
106
+ box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.25);
107
+ }
108
+
109
+ /* Fila Superior: Área de Prompt a ancho completo */
110
+ .composer-top-row {
111
+ width: 100%;
112
+ display: flex;
113
+ align-items: flex-start;
114
+ position: relative;
115
+ }
116
+
117
+ /* Fila Inferior: Barra de herramientas, estado y acciones */
118
+ .composer-bottom-row {
119
+ display: flex;
120
+ align-items: center;
121
+ justify-content: space-between;
122
+ gap: 0.5rem;
123
+ width: 100%;
124
+ }
125
+
126
+ .composer-controls-left {
127
+ display: flex;
128
+ align-items: center;
129
+ gap: 0.35rem;
130
+ flex-wrap: nowrap;
131
+ flex-shrink: 0;
132
+ }
133
+
134
+ .composer-actions-right {
135
+ display: flex;
136
+ align-items: center;
137
+ gap: 0.35rem;
138
+ flex-shrink: 0;
139
+ }
140
+
141
+ /* Controles compactos del composer */
142
+ .btn-composer-chip {
143
+ display: inline-flex;
144
+ align-items: center;
145
+ justify-content: center;
146
+ background-color: var(--bg-surface-subtle);
147
+ border: 1px solid var(--border-color);
148
+ width: 44px;
149
+ min-width: 44px;
150
+ padding: 0;
151
+ border-radius: 9px;
152
+ color: var(--text-secondary);
153
+ cursor: pointer;
154
+ transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, transform 0.15s ease;
155
+ height: 44px;
156
+ user-select: none;
157
+ }
158
+
159
+ .btn-composer-chip > .ui-icon,
160
+ .btn-composer-icon-btn > .ui-icon {
161
+ width: 20px;
162
+ height: 20px;
163
+ }
164
+
165
+ .btn-composer-chip:hover {
166
+ background-color: var(--bg-hover);
167
+ color: var(--text-main);
168
+ border-color: var(--border-hover, var(--primary));
169
+ }
170
+
171
+ .btn-composer-chip:active {
172
+ transform: scale(0.97);
173
+ }
174
+
175
+ .btn-composer-chip.active,
176
+ .btn-composer-chip.btn-rag-mini.active {
177
+ background-color: var(--primary-light);
178
+ color: var(--primary);
179
+ border-color: var(--primary);
180
+ font-weight: 600;
181
+ }
182
+
183
+ .composer-visually-hidden,
184
+ .btn-reasoning .reasoning-label {
185
+ position: absolute;
186
+ width: 1px;
187
+ height: 1px;
188
+ padding: 0;
189
+ overflow: hidden;
190
+ clip-path: inset(50%);
191
+ white-space: nowrap;
192
+ }
193
+
194
+ .btn-composer-chip:focus-visible,
195
+ .btn-composer-icon-btn:focus-visible {
196
+ outline: 2px solid var(--primary);
197
+ outline-offset: 2px;
198
+ }
199
+
200
+ /* Botón de icono circular compacto (ej. adjuntar) */
201
+ .btn-composer-icon-btn {
202
+ width: 44px;
203
+ height: 44px;
204
+ min-width: 44px;
205
+ padding: 0;
206
+ display: inline-flex;
207
+ align-items: center;
208
+ justify-content: center;
209
+ background: var(--bg-surface-subtle);
210
+ border: 1px solid var(--border-color);
211
+ border-radius: 9px;
212
+ color: var(--text-secondary);
213
+ cursor: pointer;
214
+ transition: all 0.15s ease;
215
+ }
216
+
217
+ .btn-composer-icon-btn:hover {
218
+ background-color: var(--bg-hover);
219
+ color: var(--primary);
220
+ }
221
+
222
+ .btn-composer-icon-btn:active {
223
+ transform: scale(0.95);
224
+ }
225
+
226
+ /* Botón para Adjuntar Archivos */
227
+ .btn-attach {
228
+ margin-bottom: 0;
229
+ }
230
+
231
+ /* Control de Nivel de Razonamiento */
232
+ .reasoning-control-wrapper {
233
+ position: relative;
234
+ display: inline-flex;
235
+ align-items: center;
236
+ flex-shrink: 0;
237
+ margin-bottom: 0;
238
+ }
239
+
240
+ .btn-reasoning {
241
+ display: inline-flex;
242
+ align-items: center;
243
+ background-color: var(--bg-surface-subtle);
244
+ border: 1px solid var(--border-color);
245
+ padding: 0;
246
+ border-radius: 9px;
247
+ color: var(--text-secondary);
248
+ cursor: pointer;
249
+ transition: all 0.15s ease;
250
+ height: 44px;
251
+ width: 44px;
252
+ justify-content: center;
253
+ }
254
+
255
+ .reasoning-gauge {
256
+ overflow: visible;
257
+ }
258
+
259
+ .reasoning-gauge path:first-child {
260
+ opacity: 0.5;
261
+ }
262
+
263
+ .btn-reasoning:hover {
264
+ background-color: var(--bg-hover);
265
+ color: var(--text-main);
266
+ border-color: var(--primary);
267
+ }
268
+
269
+ .btn-reasoning.active-on {
270
+ border-color: #818cf8;
271
+ background-color: #eef2ff;
272
+ color: #4338ca;
273
+ }
274
+
275
+ .btn-reasoning.active-low {
276
+ border-color: #86efac;
277
+ background-color: #f0fdf4;
278
+ color: #166534;
279
+ }
280
+
281
+ .btn-reasoning.active-medium {
282
+ border-color: #86efac;
283
+ background-color: #f0fdf4;
284
+ color: #166534;
285
+ }
286
+
287
+ .btn-reasoning.active-high {
288
+ border-color: #fde047;
289
+ background-color: #fefce8;
290
+ color: #854d0e;
291
+ }
292
+
293
+ .btn-reasoning.active-xhigh {
294
+ border-color: #c084fc;
295
+ background-color: #faf5ff;
296
+ color: #6b21a8;
297
+ }
298
+
299
+ /* Menú desplegable de niveles de razonamiento */
300
+ .reasoning-menu {
301
+ position: absolute;
302
+ bottom: calc(100% + 8px);
303
+ left: 0;
304
+ z-index: var(--z-modal, 210);
305
+ background-color: var(--bg-surface);
306
+ border: 1px solid var(--border-color);
307
+ border-radius: var(--radius-lg);
308
+ box-shadow: var(--shadow-lg);
309
+ min-width: 250px;
310
+ max-width: 320px;
311
+ overflow: hidden;
312
+ /* Se abre con display:flex desde ui-reasoning.js. */
313
+ flex-direction: column;
314
+ }
315
+
316
+ .reasoning-menu-header {
317
+ display: flex;
318
+ align-items: center;
319
+ justify-content: space-between;
320
+ padding: 0.65rem 0.7rem 0.65rem 0.85rem;
321
+ border-bottom: 1px solid var(--border-color);
322
+ background-color: var(--bg-surface-subtle);
323
+ font-size: 0.775rem;
324
+ font-weight: 600;
325
+ color: var(--text-main);
326
+ }
327
+
328
+ .btn-reasoning-close {
329
+ display: inline-flex;
330
+ align-items: center;
331
+ justify-content: center;
332
+ width: 44px;
333
+ height: 44px;
334
+ padding: 0;
335
+ border: 1px solid transparent;
336
+ border-radius: var(--radius-sm);
337
+ background: transparent;
338
+ color: var(--text-secondary);
339
+ cursor: pointer;
340
+ }
341
+
342
+ .btn-reasoning-close:hover {
343
+ color: var(--text-main);
344
+ background: var(--bg-hover);
345
+ border-color: var(--border-color);
346
+ }
347
+
348
+ .btn-reasoning-close:focus-visible,
349
+ .reasoning-intensity-slider:focus-visible {
350
+ outline: 2px solid var(--primary);
351
+ outline-offset: 2px;
352
+ }
353
+
354
+ .reasoning-menu-title-wrapper {
355
+ display: inline-flex;
356
+ align-items: center;
357
+ gap: 0.35rem;
358
+ min-width: 0;
359
+ }
360
+
361
+ .reasoning-model-badge {
362
+ flex: 0 1 auto;
363
+ max-width: 112px;
364
+ font-size: 0.7rem;
365
+ font-weight: 500;
366
+ padding: 0.15rem 0.45rem;
367
+ border-radius: var(--radius-sm);
368
+ background-color: var(--bg-surface);
369
+ border: 1px solid var(--border-color);
370
+ color: var(--text-muted);
371
+ overflow: hidden;
372
+ text-overflow: ellipsis;
373
+ white-space: nowrap;
374
+ }
375
+
376
+ .reasoning-options {
377
+ padding: 0.35rem;
378
+ display: flex;
379
+ flex-direction: column;
380
+ gap: 2px;
381
+ }
382
+
383
+ .reasoning-intensity-control {
384
+ padding: 1rem 1rem 0.85rem;
385
+ }
386
+
387
+ .reasoning-intensity-heading,
388
+ .reasoning-intensity-scale {
389
+ display: flex;
390
+ align-items: center;
391
+ justify-content: space-between;
392
+ gap: 1rem;
393
+ }
394
+
395
+ .reasoning-intensity-heading {
396
+ margin-bottom: 0.85rem;
397
+ color: var(--text-secondary);
398
+ font-size: 0.8rem;
399
+ font-weight: 600;
400
+ }
401
+
402
+ .reasoning-intensity-heading output {
403
+ color: var(--primary);
404
+ font-size: 0.78rem;
405
+ font-weight: 700;
406
+ }
407
+
408
+ .reasoning-intensity-slider {
409
+ --reasoning-intensity: 0%;
410
+ width: 100%;
411
+ height: 8px;
412
+ margin: 0;
413
+ appearance: none;
414
+ border-radius: var(--radius-full);
415
+ background: linear-gradient(to right, var(--primary) 0 var(--reasoning-intensity), var(--border-color) var(--reasoning-intensity) 100%);
416
+ cursor: pointer;
417
+ }
418
+
419
+ .reasoning-intensity-slider::-webkit-slider-thumb {
420
+ width: 20px;
421
+ height: 20px;
422
+ appearance: none;
423
+ border: 3px solid var(--bg-surface);
424
+ border-radius: 50%;
425
+ background: var(--primary);
426
+ box-shadow: 0 1px 5px rgba(var(--primary-rgb), 0.4);
427
+ }
428
+
429
+ .reasoning-intensity-slider::-moz-range-thumb {
430
+ width: 15px;
431
+ height: 15px;
432
+ border: 3px solid var(--bg-surface);
433
+ border-radius: 50%;
434
+ background: var(--primary);
435
+ box-shadow: 0 1px 5px rgba(var(--primary-rgb), 0.4);
436
+ }
437
+
438
+ .reasoning-intensity-scale {
439
+ margin-top: 0.5rem;
440
+ color: var(--text-muted);
441
+ font-size: 0.68rem;
442
+ }
443
+
444
+ .reasoning-transport-heading {
445
+ margin: 0.5rem 0 0.15rem;
446
+ padding-top: 0.5rem;
447
+ border-top: 1px solid var(--border-color);
448
+ color: var(--text-muted);
449
+ font-size: 0.7rem;
450
+ font-weight: 600;
451
+ text-transform: uppercase;
452
+ }
453
+
454
+ .reasoning-option {
455
+ display: flex;
456
+ align-items: center;
457
+ justify-content: space-between;
458
+ gap: 0.45rem;
459
+ padding: 0.45rem 0.65rem;
460
+ border-radius: var(--radius-sm);
461
+ border: none;
462
+ background: transparent;
463
+ cursor: pointer;
464
+ font-size: 0.825rem;
465
+ color: var(--text-main);
466
+ transition: background-color 0.12s ease, color 0.12s ease;
467
+ width: 100%;
468
+ text-align: left;
469
+ outline: none;
470
+ box-sizing: border-box;
471
+ }
472
+
473
+ .reasoning-option:hover {
474
+ background-color: var(--bg-hover);
475
+ color: var(--text-main);
476
+ }
477
+
478
+ .reasoning-option:focus-visible {
479
+ outline: 2px solid var(--primary);
480
+ outline-offset: -2px;
481
+ }
482
+
483
+ .reasoning-option.active {
484
+ background-color: var(--bg-surface-subtle);
485
+ color: var(--text-main);
486
+ border: none;
487
+ }
488
+
489
+ .reasoning-option .option-icon {
490
+ display: flex;
491
+ align-items: center;
492
+ justify-content: center;
493
+ font-size: 0.85rem;
494
+ width: 1.25rem;
495
+ flex-shrink: 0;
496
+ line-height: 1;
497
+ }
498
+
499
+ .reasoning-option .option-text {
500
+ display: flex;
501
+ flex-direction: column;
502
+ min-width: 0;
503
+ flex: 1;
504
+ gap: 1px;
505
+ }
506
+
507
+ .reasoning-option .option-text strong,
508
+ .reasoning-option .option-text .option-title {
509
+ font-size: 0.8125rem;
510
+ font-weight: 500;
511
+ color: var(--text-main);
512
+ line-height: 1.25;
513
+ }
514
+
515
+ .reasoning-option.active .option-text strong,
516
+ .reasoning-option.active .option-text .option-title {
517
+ font-weight: 600;
518
+ color: var(--primary);
519
+ }
520
+
521
+ .reasoning-option .option-text small,
522
+ .reasoning-option .option-text .option-desc {
523
+ font-size: 0.7rem;
524
+ color: var(--text-muted);
525
+ line-height: 1.25;
526
+ }
527
+
528
+ .reasoning-option .option-check {
529
+ display: flex;
530
+ align-items: center;
531
+ justify-content: center;
532
+ width: 1rem;
533
+ height: 1rem;
534
+ flex-shrink: 0;
535
+ color: var(--primary);
536
+ opacity: 0;
537
+ visibility: hidden;
538
+ transition: opacity 0.12s ease;
539
+ }
540
+
541
+ .reasoning-option.active .option-check {
542
+ opacity: 1;
543
+ visibility: visible;
544
+ }
545
+
546
+ .reasoning-option.disabled {
547
+ opacity: 0.45;
548
+ cursor: not-allowed;
549
+ }
550
+
551
+ .reasoning-option.recommended::after {
552
+ content: "★";
553
+ font-size: 0.75rem;
554
+ color: #f59e0b;
555
+ }
556
+
557
+ .reasoning-menu-footer {
558
+ padding: 0.5rem 0.85rem;
559
+ border-top: 1px solid var(--border-color);
560
+ background-color: var(--bg-surface-subtle);
561
+ font-size: 0.7rem;
562
+ color: var(--text-muted);
563
+ line-height: 1.4;
564
+ }
565
+
566
+ .reasoning-agent-toggle-wrapper {
567
+ display: flex;
568
+ align-items: center;
569
+ justify-content: space-between;
570
+ gap: 0.65rem;
571
+ }
572
+
573
+ .reasoning-agent-toggle-info {
574
+ display: flex;
575
+ flex-direction: column;
576
+ gap: 0.15rem;
577
+ min-width: 0;
578
+ flex: 1 1 auto;
579
+ }
580
+
581
+ .reasoning-agent-toggle-title {
582
+ display: inline-flex;
583
+ align-items: center;
584
+ gap: 0.35rem;
585
+ font-size: 0.75rem;
586
+ font-weight: 600;
587
+ color: var(--text-main);
588
+ }
589
+
590
+ .reasoning-agent-toggle-title svg {
591
+ color: var(--primary);
592
+ flex-shrink: 0;
593
+ }
594
+
595
+ .reasoning-agent-toggle-desc {
596
+ font-size: 0.675rem;
597
+ color: var(--text-muted);
598
+ line-height: 1.25;
599
+ }
600
+
601
+ @media (max-width: 640px) {
602
+ .reasoning-menu {
603
+ min-width: min(290px, calc(100vw - 16px));
604
+ }
605
+
606
+ .reasoning-intensity-control {
607
+ padding: 1rem;
608
+ }
609
+ }
610
+
611
+ .chat-textarea,
612
+ .chat-textarea:focus,
613
+ .chat-textarea:focus-visible {
614
+ width: 100%;
615
+ flex: 1 1 100%;
616
+ box-sizing: border-box;
617
+ border: none !important;
618
+ outline: none !important;
619
+ box-shadow: none !important;
620
+ background: transparent;
621
+ font-family: inherit;
622
+ font-size: 0.975rem;
623
+ color: var(--text-main);
624
+ resize: none;
625
+ /* field-sizing: content — CSS nativo auto-height sin JS (Baseline 2024) */
626
+ field-sizing: content;
627
+ max-height: 180px;
628
+ min-height: 28px;
629
+ line-height: 1.5;
630
+ padding: 0.2rem 0.25rem;
631
+ align-self: stretch;
632
+ }
633
+
634
+ @media (max-width: 640px) {
635
+ .chat-textarea {
636
+ max-height: 30dvh; /* Evita colapso en pantallas pequeñas */
637
+ }
638
+ }
639
+
640
+ .chat-textarea::placeholder {
641
+ color: var(--text-muted);
642
+ opacity: 0.8;
643
+ }
644
+
645
+ /* Acciones del Composer (Send / Stop) */
646
+ .input-actions {
647
+ display: flex;
648
+ align-items: center;
649
+ gap: 0.35rem;
650
+ flex-shrink: 0;
651
+ margin-bottom: 0;
652
+ }
653
+
654
+ .generation-status {
655
+ position: absolute;
656
+ right: 0.2rem;
657
+ bottom: 0.15rem;
658
+ display: inline-flex;
659
+ align-items: center;
660
+ gap: 0.35rem;
661
+ min-width: 0;
662
+ max-width: min(220px, calc(100% - 0.4rem));
663
+ padding: 0.2rem 0.35rem;
664
+ border-radius: var(--radius-full);
665
+ background: color-mix(in srgb, var(--bg-surface) 88%, transparent);
666
+ color: var(--text-muted);
667
+ font-size: 0.72rem;
668
+ white-space: nowrap;
669
+ pointer-events: none;
670
+ }
671
+
672
+ .generation-status[hidden] { display: none; }
673
+
674
+ .generation-status-icon { flex: 0 0 auto; animation: generationStatusSpin 1s linear infinite; }
675
+ .generation-status-text { overflow: hidden; text-overflow: ellipsis; }
676
+ .generation-status-progress { width: 46px; height: 3px; accent-color: var(--primary); }
677
+ @keyframes generationStatusSpin { to { transform: rotate(360deg); } }
678
+
679
+ @media (max-width: 640px) {
680
+ .generation-status { max-width: 108px; }
681
+ .generation-status-progress { display: none; }
682
+ }
683
+
684
+ /* Botones Circulares de Acción del Composer */
685
+ .btn-send,
686
+ .btn-stop-stream {
687
+ width: 44px;
688
+ height: 44px;
689
+ min-width: 44px;
690
+ border-radius: var(--radius-full);
691
+ display: inline-flex;
692
+ align-items: center;
693
+ justify-content: center;
694
+ flex-shrink: 0;
695
+ }
696
+
697
+ .btn-send .ui-icon,
698
+ .btn-stop-stream .ui-icon {
699
+ width: 20px;
700
+ height: 20px;
701
+ }
702
+
703
+ /* Botón Circular de Envío */
704
+ .btn-send {
705
+ background-color: var(--primary);
706
+ color: #ffffff;
707
+ border: none;
708
+ transition: all 0.15s cubic-bezier(0.4, 0, 0.2, 1);
709
+ box-shadow: var(--shadow-xs);
710
+ }
711
+
712
+ .btn-send:hover:not(:disabled) {
713
+ background-color: var(--primary-hover);
714
+ transform: scale(1.05);
715
+ box-shadow: var(--shadow-sm);
716
+ }
717
+
718
+ .btn-send:active:not(:disabled) {
719
+ transform: scale(0.96);
720
+ }
721
+
722
+ .btn-send:disabled {
723
+ background-color: var(--bg-surface-subtle);
724
+ color: var(--text-muted);
725
+ border: 1px solid var(--border-color);
726
+ opacity: 0.6;
727
+ cursor: not-allowed;
728
+ box-shadow: none;
729
+ }
730
+
731
+ /* Botón Circular de Detención de Streaming */
732
+ .btn-stop-stream {
733
+ gap: 0.35rem;
734
+ background-color: var(--danger);
735
+ color: #ffffff;
736
+ border: none;
737
+ padding: 0;
738
+ transition: all 0.15s ease;
739
+ animation: pulseStop 1.5s infinite;
740
+ box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.2);
741
+ }
742
+
743
+ .btn-stop-stream:hover {
744
+ background-color: var(--danger-hover);
745
+ transform: scale(1.05);
746
+ }
747
+
748
+ @keyframes pulseStop {
749
+ 0%, 100% { box-shadow: 0 0 0 2px rgba(239, 68, 68, 0.2); }
750
+ 50% { box-shadow: 0 0 0 5px rgba(239, 68, 68, 0.4); }
751
+ }
752
+
753
+ /* Metamorfosis: cuando stop está activo, oculta el botón de send */
754
+ .btn-stop-stream:not([style*="none"]) ~ .btn-send {
755
+ display: none !important;
756
+ }
757
+
758
+ /* ==========================================================================
759
+ Telemetría de Contexto en el Composer (Texto sutil, pequeño y sin remarcar)
760
+ ========================================================================== */
761
+ .input-actions .context-hub-wrapper {
762
+ position: relative;
763
+ display: inline-flex;
764
+ align-items: center;
765
+ }
766
+
767
+ .composer-telemetry-btn {
768
+ background: transparent;
769
+ border: none;
770
+ padding: 0.2rem 0.35rem;
771
+ margin: 0;
772
+ font-size: 0.72rem;
773
+ color: var(--text-muted);
774
+ font-family: inherit;
775
+ font-variant-numeric: tabular-nums;
776
+ cursor: pointer;
777
+ display: inline-flex;
778
+ align-items: center;
779
+ gap: 0.25rem;
780
+ border-radius: var(--radius-sm);
781
+ transition: color 0.15s ease;
782
+ line-height: 1.2;
783
+ user-select: none;
784
+ box-shadow: none;
785
+ outline: none;
786
+ flex-wrap: nowrap;
787
+ white-space: nowrap;
788
+ }
789
+
790
+ .composer-telemetry-btn:hover {
791
+ color: var(--text-main);
792
+ }
793
+
794
+ .composer-telemetry-btn:focus-visible {
795
+ outline: 1px solid var(--primary);
796
+ outline-offset: 1px;
797
+ }
798
+
799
+ .composer-tokens-text {
800
+ font-weight: 500;
801
+ letter-spacing: -0.01em;
802
+ white-space: nowrap;
803
+ }
804
+
805
+ .composer-tokens-cache {
806
+ display: inline-flex;
807
+ align-items: center;
808
+ gap: 0.15rem;
809
+ color: #0284c7;
810
+ font-size: 0.65rem;
811
+ }
812
+
813
+ [data-theme="dark"] .composer-tokens-cache {
814
+ color: #38bdf8;
815
+ }
816
+
817
+ /* Indicadores de advertencia o crítico (sutil cambio de tono sin remarcar ni alterar fondo) */
818
+ .composer-telemetry-btn.status-warning .composer-tokens-text {
819
+ color: #d97706;
820
+ }
821
+
822
+ .composer-telemetry-btn.status-critical .composer-tokens-text {
823
+ color: #dc2626;
824
+ font-weight: 600;
825
+ }
826
+
827
+ /* Popover Flotante desplegado hacia arriba desde el Composer */
828
+ .input-actions .context-hub-popover {
829
+ position: absolute;
830
+ bottom: calc(100% + 10px);
831
+ right: 0;
832
+ left: auto;
833
+ top: auto;
834
+ width: 310px;
835
+ max-width: min(320px, calc(100vw - 32px));
836
+ background-color: var(--bg-surface);
837
+ border: 1px solid var(--border-color);
838
+ border-radius: var(--radius-md);
839
+ box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.2), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
840
+ z-index: var(--z-modal, 1000);
841
+ padding: 0.85rem;
842
+ display: flex;
843
+ flex-direction: column;
844
+ gap: 0.75rem;
845
+ animation: contextPopoverFadeUp 0.15s ease-out;
846
+ text-align: left;
847
+ }
848
+
849
+ @keyframes contextPopoverFadeUp {
850
+ from { opacity: 0; transform: translateY(6px); }
851
+ to { opacity: 1; transform: translateY(0); }
852
+ }
853
+
854
+ .context-popover-header {
855
+ display: flex;
856
+ align-items: center;
857
+ justify-content: space-between;
858
+ border-bottom: 1px solid var(--border-subtle);
859
+ padding-bottom: 0.5rem;
860
+ }
861
+
862
+ .context-popover-title {
863
+ display: flex;
864
+ align-items: center;
865
+ gap: 0.45rem;
866
+ font-size: 0.775rem;
867
+ font-weight: 700;
868
+ color: var(--text-main);
869
+ }
870
+
871
+ .btn-close-popover {
872
+ background: transparent;
873
+ border: none;
874
+ color: var(--text-muted);
875
+ cursor: pointer;
876
+ padding: 0.2rem;
877
+ border-radius: var(--radius-sm);
878
+ display: flex;
879
+ align-items: center;
880
+ justify-content: center;
881
+ transition: color var(--transition-fast);
882
+ }
883
+
884
+ .btn-close-popover:hover {
885
+ color: var(--text-main);
886
+ }
887
+
888
+ .context-popover-section {
889
+ display: flex;
890
+ flex-direction: column;
891
+ gap: 0.4rem;
892
+ }
893
+
894
+ .context-limit-control {
895
+ display: grid;
896
+ gap: 0.35rem;
897
+ margin-top: 0.65rem;
898
+ font-size: 0.7rem;
899
+ color: var(--text-muted);
900
+ }
901
+
902
+ .context-limit-source {
903
+ font-size: 0.68rem;
904
+ }
905
+
906
+ .context-limit-control-row {
907
+ display: flex;
908
+ gap: 0.35rem;
909
+ }
910
+
911
+ .context-limit-control input {
912
+ min-width: 0;
913
+ flex: 1;
914
+ padding: 0.35rem 0.5rem;
915
+ border: 1px solid var(--input-border);
916
+ border-radius: var(--radius-sm);
917
+ background: var(--input-bg);
918
+ color: var(--text-main);
919
+ font-family: inherit;
920
+ font-size: 0.8rem;
921
+ outline: none;
922
+ transition: border-color var(--transition-fast), box-shadow var(--transition-fast);
923
+ }
924
+
925
+ .context-limit-control input:hover {
926
+ border-color: var(--input-border-hover);
927
+ }
928
+
929
+ .context-limit-control input:focus,
930
+ .context-limit-control input:focus-visible {
931
+ border-color: var(--input-border-focus);
932
+ box-shadow: var(--input-focus-ring);
933
+ outline: none;
934
+ }
935
+
936
+ .context-section-title {
937
+ font-size: 0.68rem;
938
+ font-weight: 700;
939
+ text-transform: uppercase;
940
+ letter-spacing: 0.04em;
941
+ color: var(--text-muted);
942
+ }
943
+
944
+ .context-progress-bar-container {
945
+ width: 100%;
946
+ height: 6px;
947
+ background-color: var(--bg-surface-subtle);
948
+ border-radius: var(--radius-full);
949
+ overflow: hidden;
950
+ border: 1px solid var(--border-subtle);
951
+ }
952
+
953
+ .context-progress-bar {
954
+ height: 100%;
955
+ background-color: var(--primary);
956
+ border-radius: var(--radius-full);
957
+ transition: width 0.3s ease, background-color 0.3s ease;
958
+ }
959
+
960
+ .context-progress-bar.warning {
961
+ background-color: #f59e0b;
962
+ }
963
+
964
+ .context-progress-bar.critical {
965
+ background-color: #ef4444;
966
+ }
967
+
968
+ .context-metrics-grid {
969
+ display: grid;
970
+ grid-template-columns: repeat(2, minmax(0, 1fr));
971
+ gap: 0.45rem;
972
+ background-color: var(--bg-surface-subtle);
973
+ border: 1px solid var(--border-subtle);
974
+ border-radius: var(--radius-sm);
975
+ padding: 0.5rem;
976
+ }
977
+
978
+ .context-metric-item {
979
+ display: flex;
980
+ flex-direction: column;
981
+ gap: 0.15rem;
982
+ min-width: 0;
983
+ }
984
+
985
+ .context-metric-label {
986
+ font-size: 0.65rem;
987
+ color: var(--text-muted);
988
+ }
989
+
990
+ .context-metric-val {
991
+ font-size: 0.75rem;
992
+ font-weight: 600;
993
+ color: var(--text-main);
994
+ font-variant-numeric: tabular-nums;
995
+ font-family: var(--font-mono);
996
+ white-space: nowrap;
997
+ }
998
+
999
+ .context-metric-val.accent {
1000
+ color: #0284c7;
1001
+ }
1002
+
1003
+ [data-theme="dark"] .context-metric-val.accent {
1004
+ color: #38bdf8;
1005
+ }
1006
+
1007
+ .context-metric-val.status-ok {
1008
+ color: #10b981;
1009
+ }
1010
+
1011
+ .context-metric-val.status-warning {
1012
+ color: #f59e0b;
1013
+ }
1014
+
1015
+ .context-metric-val.status-critical {
1016
+ color: #ef4444;
1017
+ }
1018
+
1019
+ /* ==========================================================================
1020
+ Selector de Perfiles en Header Superior
1021
+ ========================================================================== */
1022
+ .header-profile-menu {
1023
+ position: relative;
1024
+ width: clamp(8.5rem, 18vw, 13.75rem);
1025
+ min-width: 8.5rem;
1026
+ }
1027
+
1028
+ .header-profile-trigger {
1029
+ display: inline-flex;
1030
+ align-items: center;
1031
+ width: 100%;
1032
+ height: 30px;
1033
+ min-width: 0;
1034
+ box-sizing: border-box;
1035
+ padding: 0 0.55rem;
1036
+ border: 1px solid transparent;
1037
+ border-radius: var(--radius-full);
1038
+ background-color: var(--bg-hover);
1039
+ color: var(--text-secondary);
1040
+ font: inherit;
1041
+ font-size: 0.75rem;
1042
+ font-weight: 600;
1043
+ cursor: pointer;
1044
+ transition: background-color var(--transition-fast), border-color var(--transition-fast), color var(--transition-fast);
1045
+ }
1046
+
1047
+ .header-profile-trigger:hover,
1048
+ .header-profile-trigger:focus-visible,
1049
+ .header-profile-trigger[aria-expanded="true"] {
1050
+ background-color: var(--bg-surface);
1051
+ border-color: var(--border-color);
1052
+ color: var(--text-main);
1053
+ outline: none;
1054
+ }
1055
+
1056
+ .header-profile-trigger .profile-icon {
1057
+ display: inline-flex;
1058
+ align-items: center;
1059
+ justify-content: center;
1060
+ color: var(--primary);
1061
+ flex-shrink: 0;
1062
+ }
1063
+
1064
+ .header-profile-name {
1065
+ flex: 1 1 auto;
1066
+ min-width: 0;
1067
+ margin: 0 0.45rem;
1068
+ overflow: hidden;
1069
+ text-align: left;
1070
+ text-overflow: ellipsis;
1071
+ white-space: nowrap;
1072
+ }
1073
+
1074
+ .header-profile-trigger .profile-chevron {
1075
+ display: inline-flex;
1076
+ align-items: center;
1077
+ justify-content: center;
1078
+ color: var(--text-muted);
1079
+ flex-shrink: 0;
1080
+ transition: color var(--transition-fast);
1081
+ }
1082
+
1083
+ .header-profile-trigger:hover .profile-chevron,
1084
+ .header-profile-trigger:focus-visible .profile-chevron,
1085
+ .header-profile-trigger[aria-expanded="true"] .profile-chevron {
1086
+ color: var(--text-main);
1087
+ }
1088
+
1089
+ .header-profile-popover {
1090
+ position: absolute;
1091
+ z-index: 30;
1092
+ top: calc(100% + 0.5rem);
1093
+ left: 50%;
1094
+ transform: translateX(-50%);
1095
+ width: min(340px, calc(100vw - 2rem));
1096
+ padding: 0.45rem;
1097
+ border: 1px solid var(--border-color);
1098
+ border-radius: var(--radius-lg);
1099
+ background: var(--bg-surface);
1100
+ box-shadow: 0 14px 35px rgba(0, 0, 0, 0.18);
1101
+ }
1102
+
1103
+ .header-profile-popover[hidden] {
1104
+ display: none;
1105
+ }
1106
+
1107
+ .header-profile-popover-header {
1108
+ display: flex;
1109
+ align-items: center;
1110
+ justify-content: space-between;
1111
+ padding: 0.3rem 0.45rem 0.45rem;
1112
+ color: var(--text-muted);
1113
+ }
1114
+
1115
+ .header-profile-popover-title {
1116
+ font-size: 0.7rem;
1117
+ font-weight: 700;
1118
+ letter-spacing: 0.04em;
1119
+ text-transform: uppercase;
1120
+ }
1121
+
1122
+ .header-profile-header-actions {
1123
+ display: flex;
1124
+ align-items: center;
1125
+ gap: 0.2rem;
1126
+ }
1127
+
1128
+ .btn-profile-header-icon {
1129
+ display: inline-flex;
1130
+ align-items: center;
1131
+ justify-content: center;
1132
+ width: 26px;
1133
+ height: 26px;
1134
+ padding: 0;
1135
+ border: 1px solid transparent;
1136
+ border-radius: var(--radius-sm);
1137
+ background: transparent;
1138
+ color: var(--text-secondary);
1139
+ cursor: pointer;
1140
+ transition: background-color var(--transition-fast), border-color var(--transition-fast), color var(--transition-fast);
1141
+ }
1142
+
1143
+ .btn-profile-header-icon:hover,
1144
+ .btn-profile-header-icon:focus-visible {
1145
+ background: var(--bg-hover);
1146
+ border-color: var(--border-color);
1147
+ color: var(--text-main);
1148
+ outline: none;
1149
+ }
1150
+
1151
+ .header-profile-list {
1152
+ display: grid;
1153
+ gap: 0.2rem;
1154
+ max-height: 240px;
1155
+ overflow-y: auto;
1156
+ }
1157
+
1158
+ .header-profile-item {
1159
+ display: flex;
1160
+ align-items: center;
1161
+ justify-content: space-between;
1162
+ gap: 0.25rem;
1163
+ width: 100%;
1164
+ border: 1px solid transparent;
1165
+ border-radius: var(--radius-md);
1166
+ background: transparent;
1167
+ transition: background-color var(--transition-fast), border-color var(--transition-fast);
1168
+ }
1169
+
1170
+ .header-profile-item:hover {
1171
+ background: var(--bg-hover);
1172
+ }
1173
+
1174
+ .header-profile-item.active {
1175
+ border-color: color-mix(in srgb, var(--primary) 45%, transparent);
1176
+ background: color-mix(in srgb, var(--primary) 12%, var(--bg-surface));
1177
+ }
1178
+
1179
+ .header-profile-option {
1180
+ display: grid;
1181
+ gap: 0.12rem;
1182
+ flex: 1;
1183
+ min-width: 0;
1184
+ padding: 0.4rem 0.45rem;
1185
+ border: 0;
1186
+ border-radius: var(--radius-md);
1187
+ background: transparent;
1188
+ color: var(--text-main);
1189
+ font: inherit;
1190
+ text-align: left;
1191
+ cursor: pointer;
1192
+ }
1193
+
1194
+ .header-profile-option:hover,
1195
+ .header-profile-option:focus-visible {
1196
+ outline: none;
1197
+ }
1198
+
1199
+ .header-profile-option-name {
1200
+ overflow: hidden;
1201
+ font-size: 0.8rem;
1202
+ font-weight: 650;
1203
+ text-overflow: ellipsis;
1204
+ white-space: nowrap;
1205
+ }
1206
+
1207
+ .header-profile-option-description {
1208
+ overflow: hidden;
1209
+ color: var(--text-muted);
1210
+ font-size: 0.72rem;
1211
+ text-overflow: ellipsis;
1212
+ white-space: nowrap;
1213
+ }
1214
+
1215
+ .header-profile-item-actions {
1216
+ display: flex;
1217
+ align-items: center;
1218
+ gap: 0.15rem;
1219
+ padding-right: 0.25rem;
1220
+ flex-shrink: 0;
1221
+ }
1222
+
1223
+ .btn-profile-item-action {
1224
+ display: inline-flex;
1225
+ align-items: center;
1226
+ justify-content: center;
1227
+ width: 26px;
1228
+ height: 26px;
1229
+ padding: 0;
1230
+ border: 1px solid transparent;
1231
+ border-radius: var(--radius-sm);
1232
+ background: transparent;
1233
+ color: var(--text-muted);
1234
+ cursor: pointer;
1235
+ transition: background-color var(--transition-fast), border-color var(--transition-fast), color var(--transition-fast);
1236
+ }
1237
+
1238
+ .btn-profile-item-action:hover,
1239
+ .btn-profile-item-action:focus-visible {
1240
+ background: var(--bg-surface);
1241
+ border-color: var(--border-color);
1242
+ color: var(--text-main);
1243
+ outline: none;
1244
+ }
1245
+
1246
+ .btn-profile-item-action.btn-profile-item-delete:hover,
1247
+ .btn-profile-item-action.btn-profile-item-delete:focus-visible {
1248
+ background: color-mix(in srgb, var(--danger, #ef4444) 15%, transparent);
1249
+ border-color: color-mix(in srgb, var(--danger, #ef4444) 30%, transparent);
1250
+ color: var(--danger, #ef4444);
1251
+ }
1252
+ }
1253
+
1254
+ @media (max-width: 640px) {
1255
+ .header-profile-popover {
1256
+ width: min(300px, calc(100vw - 1.5rem));
1257
+ }
1258
+ }