vibesurf 0.1.9a6__py3-none-any.whl → 0.1.11__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.

Potentially problematic release.


This version of vibesurf might be problematic. Click here for more details.

Files changed (69) hide show
  1. vibe_surf/_version.py +2 -2
  2. vibe_surf/agents/browser_use_agent.py +68 -45
  3. vibe_surf/agents/prompts/report_writer_prompt.py +73 -0
  4. vibe_surf/agents/prompts/vibe_surf_prompt.py +85 -172
  5. vibe_surf/agents/report_writer_agent.py +380 -226
  6. vibe_surf/agents/vibe_surf_agent.py +878 -814
  7. vibe_surf/agents/views.py +130 -0
  8. vibe_surf/backend/api/activity.py +3 -1
  9. vibe_surf/backend/api/browser.py +70 -0
  10. vibe_surf/backend/api/config.py +8 -5
  11. vibe_surf/backend/api/files.py +59 -50
  12. vibe_surf/backend/api/models.py +2 -2
  13. vibe_surf/backend/api/task.py +47 -13
  14. vibe_surf/backend/database/manager.py +24 -18
  15. vibe_surf/backend/database/queries.py +199 -192
  16. vibe_surf/backend/database/schemas.py +1 -1
  17. vibe_surf/backend/main.py +80 -3
  18. vibe_surf/backend/shared_state.py +30 -35
  19. vibe_surf/backend/utils/encryption.py +3 -1
  20. vibe_surf/backend/utils/llm_factory.py +41 -36
  21. vibe_surf/browser/agent_browser_session.py +308 -62
  22. vibe_surf/browser/browser_manager.py +71 -100
  23. vibe_surf/browser/utils.py +5 -3
  24. vibe_surf/browser/watchdogs/dom_watchdog.py +0 -45
  25. vibe_surf/chrome_extension/background.js +88 -0
  26. vibe_surf/chrome_extension/manifest.json +3 -1
  27. vibe_surf/chrome_extension/scripts/api-client.js +13 -0
  28. vibe_surf/chrome_extension/scripts/file-manager.js +482 -0
  29. vibe_surf/chrome_extension/scripts/history-manager.js +658 -0
  30. vibe_surf/chrome_extension/scripts/modal-manager.js +487 -0
  31. vibe_surf/chrome_extension/scripts/session-manager.js +52 -11
  32. vibe_surf/chrome_extension/scripts/settings-manager.js +1214 -0
  33. vibe_surf/chrome_extension/scripts/ui-manager.js +1530 -3163
  34. vibe_surf/chrome_extension/sidepanel.html +47 -7
  35. vibe_surf/chrome_extension/styles/activity.css +934 -0
  36. vibe_surf/chrome_extension/styles/base.css +76 -0
  37. vibe_surf/chrome_extension/styles/history-modal.css +791 -0
  38. vibe_surf/chrome_extension/styles/input.css +568 -0
  39. vibe_surf/chrome_extension/styles/layout.css +186 -0
  40. vibe_surf/chrome_extension/styles/responsive.css +454 -0
  41. vibe_surf/chrome_extension/styles/settings-environment.css +165 -0
  42. vibe_surf/chrome_extension/styles/settings-forms.css +389 -0
  43. vibe_surf/chrome_extension/styles/settings-modal.css +141 -0
  44. vibe_surf/chrome_extension/styles/settings-profiles.css +244 -0
  45. vibe_surf/chrome_extension/styles/settings-responsive.css +144 -0
  46. vibe_surf/chrome_extension/styles/settings-utilities.css +25 -0
  47. vibe_surf/chrome_extension/styles/variables.css +54 -0
  48. vibe_surf/cli.py +5 -22
  49. vibe_surf/common.py +35 -0
  50. vibe_surf/llm/openai_compatible.py +148 -93
  51. vibe_surf/logger.py +99 -0
  52. vibe_surf/{controller/vibesurf_tools.py → tools/browser_use_tools.py} +233 -221
  53. vibe_surf/tools/file_system.py +415 -0
  54. vibe_surf/{controller → tools}/mcp_client.py +4 -3
  55. vibe_surf/tools/report_writer_tools.py +21 -0
  56. vibe_surf/tools/vibesurf_tools.py +657 -0
  57. vibe_surf/tools/views.py +120 -0
  58. {vibesurf-0.1.9a6.dist-info → vibesurf-0.1.11.dist-info}/METADATA +23 -3
  59. vibesurf-0.1.11.dist-info/RECORD +93 -0
  60. vibe_surf/chrome_extension/styles/main.css +0 -2338
  61. vibe_surf/chrome_extension/styles/settings.css +0 -1100
  62. vibe_surf/controller/file_system.py +0 -53
  63. vibe_surf/controller/views.py +0 -37
  64. vibesurf-0.1.9a6.dist-info/RECORD +0 -71
  65. /vibe_surf/{controller → tools}/__init__.py +0 -0
  66. {vibesurf-0.1.9a6.dist-info → vibesurf-0.1.11.dist-info}/WHEEL +0 -0
  67. {vibesurf-0.1.9a6.dist-info → vibesurf-0.1.11.dist-info}/entry_points.txt +0 -0
  68. {vibesurf-0.1.9a6.dist-info → vibesurf-0.1.11.dist-info}/licenses/LICENSE +0 -0
  69. {vibesurf-0.1.9a6.dist-info → vibesurf-0.1.11.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,934 @@
1
+ /* Activity Log Styles - VibeSurf Extension */
2
+
3
+ /* Activity Section */
4
+ .activity-section {
5
+ flex: 1;
6
+ display: flex;
7
+ flex-direction: column;
8
+ overflow: hidden;
9
+ }
10
+
11
+ .activity-log {
12
+ flex: 1;
13
+ overflow-y: auto;
14
+ padding: var(--spacing-lg);
15
+ background-color: var(--bg-primary);
16
+ min-height: 0; /* Allow proper flexbox sizing */
17
+ display: flex;
18
+ flex-direction: column;
19
+ }
20
+
21
+ .activity-log::-webkit-scrollbar {
22
+ width: 6px;
23
+ }
24
+
25
+ .activity-log::-webkit-scrollbar-track {
26
+ background: var(--bg-secondary);
27
+ }
28
+
29
+ .activity-log::-webkit-scrollbar-thumb {
30
+ background: var(--border-color);
31
+ border-radius: 3px;
32
+ }
33
+
34
+ .activity-log::-webkit-scrollbar-thumb:hover {
35
+ background: var(--border-hover);
36
+ }
37
+
38
+ /* Welcome Message */
39
+ .welcome-message {
40
+ display: flex;
41
+ flex-direction: column;
42
+ align-items: center;
43
+ justify-content: flex-start;
44
+ text-align: center;
45
+ padding: var(--spacing-lg) var(--spacing-2xl);
46
+ color: var(--text-muted);
47
+ min-height: 0; /* Allow shrinking */
48
+ max-height: none; /* Remove any height constraints */
49
+ overflow: visible; /* Ensure content is not clipped */
50
+ }
51
+
52
+ .welcome-text h4 {
53
+ font-size: var(--font-size-lg);
54
+ font-weight: var(--font-weight-medium);
55
+ color: var(--text-primary);
56
+ margin-bottom: var(--spacing-sm);
57
+ }
58
+
59
+ .welcome-text p {
60
+ font-size: var(--font-size-sm);
61
+ line-height: 1.6;
62
+ margin-bottom: var(--spacing-xl);
63
+ }
64
+
65
+ /* Quick Tasks */
66
+ .quick-tasks {
67
+ display: grid;
68
+ grid-template-columns: 1fr;
69
+ gap: var(--spacing-md);
70
+ width: 100%;
71
+ max-width: 400px;
72
+ min-height: 0; /* Ensure all items are visible */
73
+ overflow: visible; /* Ensure content is not clipped */
74
+ grid-auto-rows: auto; /* Let rows size automatically */
75
+ }
76
+
77
+ .task-suggestion {
78
+ display: flex;
79
+ align-items: flex-start;
80
+ gap: var(--spacing-md);
81
+ padding: var(--spacing-lg);
82
+ background: var(--bg-secondary);
83
+ border: 1px solid var(--border-color);
84
+ border-radius: var(--radius-lg);
85
+ cursor: pointer;
86
+ transition: all var(--transition-fast);
87
+ text-align: left;
88
+ }
89
+
90
+ .task-suggestion:hover {
91
+ border-color: var(--primary-color);
92
+ background: var(--bg-hover);
93
+ transform: translateY(-2px);
94
+ box-shadow: var(--shadow-md);
95
+ }
96
+
97
+ .task-icon {
98
+ font-size: 24px;
99
+ flex-shrink: 0;
100
+ width: 40px;
101
+ height: 40px;
102
+ display: flex;
103
+ align-items: center;
104
+ justify-content: center;
105
+ background: var(--primary-color);
106
+ border-radius: var(--radius-md);
107
+ color: white;
108
+ }
109
+
110
+ .task-content {
111
+ flex: 1;
112
+ }
113
+
114
+ .task-title {
115
+ font-weight: var(--font-weight-semibold);
116
+ color: var(--text-primary);
117
+ margin-bottom: var(--spacing-xs);
118
+ font-size: var(--font-size-base);
119
+ }
120
+
121
+ .task-description {
122
+ font-size: var(--font-size-sm);
123
+ color: var(--text-secondary);
124
+ line-height: 1.4;
125
+ }
126
+
127
+ /* Activity Log Items - Chat Style */
128
+ .activity-item {
129
+ margin-bottom: var(--spacing-lg);
130
+ width: 100%;
131
+ display: flex;
132
+ flex-direction: column;
133
+ }
134
+
135
+ .message-container {
136
+ display: flex;
137
+ flex-direction: column;
138
+ max-width: 85%;
139
+ min-width: 0; /* Allow shrinking */
140
+ animation: fadeIn 0.3s ease-out;
141
+ }
142
+
143
+ .user-container {
144
+ align-self: flex-end;
145
+ align-items: flex-end;
146
+ }
147
+
148
+ .agent-container {
149
+ align-self: flex-start;
150
+ align-items: flex-start;
151
+ }
152
+
153
+ .message-header {
154
+ display: flex;
155
+ align-items: center;
156
+ justify-content: space-between;
157
+ margin-bottom: var(--spacing-xs);
158
+ font-size: var(--font-size-xs);
159
+ color: var(--text-muted);
160
+ }
161
+
162
+ .user-container .message-header {
163
+ flex-direction: row-reverse;
164
+ gap: var(--spacing-md);
165
+ }
166
+
167
+ .agent-container .message-header {
168
+ flex-direction: row;
169
+ gap: var(--spacing-md);
170
+ }
171
+
172
+ .agent-name {
173
+ font-weight: var(--font-weight-medium);
174
+ color: var(--text-secondary);
175
+ flex-shrink: 0;
176
+ }
177
+
178
+ .user-container .agent-name {
179
+ color: var(--primary-color);
180
+ }
181
+
182
+ .message-metadata {
183
+ display: flex;
184
+ align-items: center;
185
+ gap: var(--spacing-sm);
186
+ font-size: 10px;
187
+ flex-shrink: 0;
188
+ }
189
+
190
+ .message-time {
191
+ font-size: 10px;
192
+ color: var(--text-muted);
193
+ }
194
+
195
+ .message-metrics {
196
+ display: flex;
197
+ align-items: center;
198
+ gap: var(--spacing-xs);
199
+ }
200
+
201
+ .metric-item {
202
+ font-size: 10px;
203
+ color: var(--text-muted);
204
+ background-color: var(--bg-tertiary);
205
+ padding: 1px 4px;
206
+ border-radius: var(--radius-sm);
207
+ font-weight: var(--font-weight-normal);
208
+ }
209
+
210
+ .user-container .metric-item {
211
+ background-color: rgba(255, 255, 255, 0.2);
212
+ color: rgba(255, 255, 255, 0.9);
213
+ }
214
+
215
+ /* Message Bubbles */
216
+ .message-bubble {
217
+ padding: var(--spacing-md);
218
+ border-radius: var(--radius-lg);
219
+ position: relative;
220
+ word-wrap: break-word;
221
+ box-shadow: var(--shadow-sm);
222
+ min-width: 0; /* Allow shrinking */
223
+ max-width: 100%;
224
+ overflow-wrap: break-word;
225
+ }
226
+
227
+ /* Copy Message Button */
228
+ .copy-message-btn {
229
+ position: absolute;
230
+ bottom: 8px;
231
+ right: 8px;
232
+ background: rgba(0, 0, 0, 0.7);
233
+ border: none;
234
+ border-radius: var(--radius-sm);
235
+ padding: 6px;
236
+ cursor: pointer;
237
+ opacity: 0;
238
+ visibility: hidden;
239
+ transition: all var(--transition-fast);
240
+ display: flex;
241
+ align-items: center;
242
+ justify-content: center;
243
+ color: white;
244
+ font-size: 12px;
245
+ z-index: 10;
246
+ backdrop-filter: blur(4px);
247
+ }
248
+
249
+ .copy-message-btn:hover {
250
+ background: rgba(0, 0, 0, 0.8);
251
+ transform: scale(1.05);
252
+ }
253
+
254
+ .copy-message-btn:active {
255
+ transform: scale(0.95);
256
+ }
257
+
258
+ .copy-message-btn svg {
259
+ width: 12px;
260
+ height: 12px;
261
+ }
262
+
263
+ /* Show copy button on message bubble hover */
264
+ .message-bubble:hover .copy-message-btn {
265
+ opacity: 1;
266
+ visibility: visible;
267
+ }
268
+
269
+ /* User bubble copy button styling */
270
+ .user-bubble .copy-message-btn {
271
+ background: rgba(255, 255, 255, 0.2);
272
+ color: white;
273
+ }
274
+
275
+ .user-bubble .copy-message-btn:hover {
276
+ background: rgba(255, 255, 255, 0.3);
277
+ }
278
+
279
+ .user-bubble {
280
+ background-color: var(--primary-color);
281
+ color: white;
282
+ border-bottom-right-radius: var(--radius-sm);
283
+ }
284
+
285
+ .agent-bubble {
286
+ background-color: var(--bg-secondary);
287
+ color: var(--text-primary);
288
+ border: 1px solid var(--border-color);
289
+ border-bottom-left-radius: var(--radius-sm);
290
+ }
291
+
292
+ .message-bubble.working {
293
+ border-left: 3px solid var(--warning-color);
294
+ background-color: rgba(255, 193, 7, 0.05);
295
+ }
296
+
297
+ .message-bubble.result,
298
+ .message-bubble.done {
299
+ border-left: 3px solid var(--accent-color);
300
+ background-color: rgba(40, 167, 69, 0.05);
301
+ }
302
+
303
+ .message-bubble.error {
304
+ border-left: 3px solid var(--danger-color);
305
+ background-color: rgba(220, 53, 69, 0.05);
306
+ }
307
+
308
+ /* Message Status */
309
+ .message-status {
310
+ display: flex;
311
+ align-items: center;
312
+ gap: var(--spacing-xs);
313
+ margin-bottom: var(--spacing-sm);
314
+ font-size: var(--font-size-xs);
315
+ font-weight: var(--font-weight-medium);
316
+ }
317
+
318
+ .user-bubble .message-status {
319
+ color: rgba(255, 255, 255, 0.9);
320
+ }
321
+
322
+ .agent-bubble .message-status {
323
+ color: var(--text-secondary);
324
+ }
325
+
326
+ .status-indicator {
327
+ font-size: 12px;
328
+ }
329
+
330
+ .status-text {
331
+ text-transform: capitalize;
332
+ }
333
+
334
+ /* Message Content */
335
+ .message-content {
336
+ line-height: 1.6;
337
+ font-size: var(--font-size-sm);
338
+ min-width: 0; /* Allow shrinking */
339
+ overflow-wrap: break-word;
340
+ }
341
+
342
+ .user-bubble .message-content {
343
+ color: white;
344
+ }
345
+
346
+ .agent-bubble .message-content {
347
+ color: var(--text-primary);
348
+ }
349
+
350
+ /* Content formatting */
351
+ .message-content h1,
352
+ .message-content h2,
353
+ .message-content h3 {
354
+ margin: var(--spacing-sm) 0;
355
+ font-weight: var(--font-weight-semibold);
356
+ }
357
+
358
+ .message-content h1 {
359
+ font-size: var(--font-size-lg);
360
+ }
361
+
362
+ .message-content h2 {
363
+ font-size: var(--font-size-base);
364
+ }
365
+
366
+ .message-content h3 {
367
+ font-size: var(--font-size-sm);
368
+ }
369
+
370
+ .message-content ul {
371
+ margin: var(--spacing-sm) 0;
372
+ padding-left: var(--spacing-lg);
373
+ }
374
+
375
+ .message-content li {
376
+ margin-bottom: var(--spacing-xs);
377
+ }
378
+
379
+ .message-content .code-block {
380
+ background-color: var(--bg-tertiary);
381
+ padding: var(--spacing-sm);
382
+ border-radius: var(--radius-sm);
383
+ overflow-x: auto;
384
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
385
+ font-size: var(--font-size-xs);
386
+ margin: var(--spacing-sm) 0;
387
+ border: 1px solid var(--border-color);
388
+ max-width: 100%;
389
+ white-space: pre-wrap;
390
+ word-break: break-all;
391
+ }
392
+
393
+ /* Custom scrollbar for code blocks */
394
+ .message-content .code-block::-webkit-scrollbar {
395
+ height: 6px;
396
+ }
397
+
398
+ .message-content .code-block::-webkit-scrollbar-track {
399
+ background: var(--bg-secondary);
400
+ border-radius: 3px;
401
+ }
402
+
403
+ .message-content .code-block::-webkit-scrollbar-thumb {
404
+ background: var(--border-color);
405
+ border-radius: 3px;
406
+ }
407
+
408
+ .message-content .code-block::-webkit-scrollbar-thumb:hover {
409
+ background: var(--border-hover);
410
+ }
411
+
412
+ .user-bubble .code-block {
413
+ background-color: rgba(255, 255, 255, 0.1);
414
+ border-color: rgba(255, 255, 255, 0.2);
415
+ }
416
+
417
+ .message-content .inline-code {
418
+ background-color: var(--bg-tertiary);
419
+ padding: 2px 4px;
420
+ border-radius: var(--radius-sm);
421
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
422
+ font-size: var(--font-size-xs);
423
+ word-break: break-all;
424
+ overflow-wrap: break-word;
425
+ }
426
+
427
+ .user-bubble .inline-code {
428
+ background-color: rgba(255, 255, 255, 0.2);
429
+ }
430
+
431
+ .message-content .json-content {
432
+ background-color: var(--bg-tertiary);
433
+ padding: var(--spacing-sm);
434
+ border-radius: var(--radius-sm);
435
+ overflow-x: auto;
436
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
437
+ font-size: var(--font-size-xs);
438
+ margin: var(--spacing-sm) 0;
439
+ border: 1px solid var(--border-color);
440
+ max-width: 100%;
441
+ white-space: pre-wrap;
442
+ word-break: break-all;
443
+ }
444
+
445
+ /* Custom scrollbar for JSON content */
446
+ .message-content .json-content::-webkit-scrollbar {
447
+ height: 6px;
448
+ }
449
+
450
+ .message-content .json-content::-webkit-scrollbar-track {
451
+ background: var(--bg-secondary);
452
+ border-radius: 3px;
453
+ }
454
+
455
+ .message-content .json-content::-webkit-scrollbar-thumb {
456
+ background: var(--border-color);
457
+ border-radius: 3px;
458
+ }
459
+
460
+ .message-content .json-content::-webkit-scrollbar-thumb:hover {
461
+ background: var(--border-hover);
462
+ }
463
+
464
+ .user-bubble .json-content {
465
+ background-color: rgba(255, 255, 255, 0.1);
466
+ border-color: rgba(255, 255, 255, 0.2);
467
+ }
468
+
469
+ .message-content a {
470
+ color: inherit;
471
+ text-decoration: underline;
472
+ }
473
+
474
+ .user-bubble .message-content a {
475
+ color: rgba(255, 255, 255, 0.9);
476
+ }
477
+
478
+ .agent-bubble .message-content a {
479
+ color: var(--primary-color);
480
+ }
481
+
482
+ .message-content a:hover {
483
+ opacity: 0.8;
484
+ }
485
+
486
+ /* Status indicators */
487
+ .status-indicator {
488
+ display: inline-flex;
489
+ align-items: center;
490
+ gap: var(--spacing-xs);
491
+ font-size: var(--font-size-xs);
492
+ font-weight: var(--font-weight-medium);
493
+ }
494
+
495
+ .status-dot {
496
+ width: 6px;
497
+ height: 6px;
498
+ border-radius: 50%;
499
+ background-color: var(--border-color);
500
+ }
501
+
502
+ .status-dot.active {
503
+ background-color: var(--accent-color);
504
+ animation: pulse 2s infinite;
505
+ }
506
+
507
+ .status-dot.error {
508
+ background-color: var(--danger-color);
509
+ }
510
+
511
+ /* Enhanced Markdown Styles */
512
+ .message-content .task-item {
513
+ display: flex;
514
+ align-items: center;
515
+ gap: var(--spacing-sm);
516
+ margin: var(--spacing-xs) 0;
517
+ padding: var(--spacing-xs) 0;
518
+ line-height: 1.4;
519
+ }
520
+
521
+ .message-content .task-item input[type="checkbox"] {
522
+ margin: 0;
523
+ cursor: default;
524
+ accent-color: var(--primary-color);
525
+ }
526
+
527
+ .message-content .markdown-table {
528
+ border-collapse: collapse;
529
+ width: 100%;
530
+ margin: var(--spacing-md) 0;
531
+ border: 1px solid var(--border-color);
532
+ border-radius: var(--radius-md);
533
+ overflow: hidden;
534
+ font-size: var(--font-size-sm);
535
+ }
536
+
537
+ .message-content .markdown-table th,
538
+ .message-content .markdown-table td {
539
+ padding: var(--spacing-sm) var(--spacing-md);
540
+ text-align: left;
541
+ border-bottom: 1px solid var(--border-color);
542
+ }
543
+
544
+ .message-content .markdown-table th {
545
+ background-color: var(--bg-tertiary);
546
+ font-weight: var(--font-weight-semibold);
547
+ color: var(--text-primary);
548
+ }
549
+
550
+ .user-bubble .markdown-table th {
551
+ background-color: rgba(255, 255, 255, 0.1);
552
+ color: white;
553
+ }
554
+
555
+ .message-content .markdown-table tr:hover {
556
+ background-color: var(--bg-hover);
557
+ }
558
+
559
+ .user-bubble .markdown-table tr:hover {
560
+ background-color: rgba(255, 255, 255, 0.05);
561
+ }
562
+
563
+ .message-content .markdown-quote {
564
+ border-left: 4px solid var(--primary-color);
565
+ padding-left: var(--spacing-md);
566
+ margin: var(--spacing-md) 0;
567
+ color: var(--text-secondary);
568
+ font-style: italic;
569
+ background-color: var(--bg-secondary);
570
+ padding: var(--spacing-md);
571
+ border-radius: var(--radius-md);
572
+ }
573
+
574
+ .user-bubble .markdown-quote {
575
+ border-left-color: rgba(255, 255, 255, 0.8);
576
+ background-color: rgba(255, 255, 255, 0.1);
577
+ color: rgba(255, 255, 255, 0.9);
578
+ }
579
+
580
+ .message-content h1,
581
+ .message-content h2,
582
+ .message-content h3,
583
+ .message-content h4,
584
+ .message-content h5,
585
+ .message-content h6 {
586
+ margin: var(--spacing-md) 0 var(--spacing-sm) 0;
587
+ color: var(--text-primary);
588
+ line-height: 1.3;
589
+ }
590
+
591
+ .user-bubble .message-content h1,
592
+ .user-bubble .message-content h2,
593
+ .user-bubble .message-content h3,
594
+ .user-bubble .message-content h4,
595
+ .user-bubble .message-content h5,
596
+ .user-bubble .message-content h6 {
597
+ color: white;
598
+ }
599
+
600
+ .message-content h1 { font-size: var(--font-size-xl); font-weight: var(--font-weight-bold); }
601
+ .message-content h2 { font-size: var(--font-size-lg); font-weight: var(--font-weight-semibold); }
602
+ .message-content h3 { font-size: var(--font-size-base); font-weight: var(--font-weight-semibold); }
603
+ .message-content h4 { font-size: var(--font-size-sm); font-weight: var(--font-weight-medium); }
604
+
605
+ .message-content ul,
606
+ .message-content ol {
607
+ margin: var(--spacing-sm) 0;
608
+ padding-left: var(--spacing-xl);
609
+ }
610
+
611
+ .message-content li {
612
+ margin: var(--spacing-xs) 0;
613
+ line-height: 1.5;
614
+ }
615
+
616
+ .message-content p {
617
+ margin: var(--spacing-sm) 0;
618
+ line-height: 1.6;
619
+ }
620
+
621
+ .message-content a {
622
+ color: var(--primary-color);
623
+ text-decoration: none;
624
+ border-bottom: 1px solid transparent;
625
+ transition: border-color var(--transition-fast);
626
+ }
627
+
628
+ .message-content a:hover {
629
+ border-bottom-color: var(--primary-color);
630
+ }
631
+
632
+ .user-bubble .message-content a {
633
+ color: rgba(255, 255, 255, 0.9);
634
+ border-bottom-color: transparent;
635
+ }
636
+
637
+ .user-bubble .message-content a:hover {
638
+ border-bottom-color: rgba(255, 255, 255, 0.9);
639
+ }
640
+
641
+ .message-content hr {
642
+ border: none;
643
+ border-top: 1px solid var(--border-color);
644
+ margin: var(--spacing-lg) 0;
645
+ }
646
+
647
+ .user-bubble .message-content hr {
648
+ border-top-color: rgba(255, 255, 255, 0.3);
649
+ }
650
+
651
+ .message-content strong {
652
+ font-weight: var(--font-weight-semibold);
653
+ }
654
+
655
+ .message-content em {
656
+ font-style: italic;
657
+ }
658
+
659
+ /* Suggestion Tasks Styles */
660
+ .suggestion-tasks-container {
661
+ margin: var(--spacing-lg) 0;
662
+ padding: var(--spacing-md);
663
+ background: linear-gradient(135deg, rgba(0, 122, 204, 0.02), rgba(0, 122, 204, 0.05));
664
+ border: 1px solid rgba(0, 122, 204, 0.1);
665
+ border-radius: var(--radius-xl);
666
+ position: relative;
667
+ overflow: visible;
668
+ display: block;
669
+ width: 100%;
670
+ box-sizing: border-box;
671
+ min-height: auto;
672
+ }
673
+
674
+ .suggestion-tasks-container::before {
675
+ content: '';
676
+ position: absolute;
677
+ top: 0;
678
+ left: 0;
679
+ right: 0;
680
+ height: 3px;
681
+ background: linear-gradient(90deg, var(--primary-color), var(--accent-color));
682
+ border-radius: var(--radius-xl) var(--radius-xl) 0 0;
683
+ }
684
+
685
+ .suggestion-tasks-header {
686
+ text-align: center;
687
+ margin-bottom: var(--spacing-md);
688
+ padding: 0;
689
+ display: block;
690
+ width: 100%;
691
+ }
692
+
693
+ .suggestion-tasks-header h4 {
694
+ font-size: var(--font-size-xl);
695
+ font-weight: var(--font-weight-bold);
696
+ color: var(--text-primary);
697
+ margin: 0;
698
+ display: block;
699
+ text-align: center;
700
+ line-height: 1.3;
701
+ white-space: normal;
702
+ overflow: visible;
703
+ word-wrap: break-word;
704
+ }
705
+
706
+ .suggestion-tasks-header p {
707
+ font-size: var(--font-size-sm);
708
+ color: var(--text-secondary);
709
+ margin: 0;
710
+ opacity: 0.8;
711
+ line-height: 1.4;
712
+ display: block;
713
+ }
714
+
715
+ .suggestion-cards {
716
+ display: flex;
717
+ flex-direction: column;
718
+ gap: var(--spacing-sm);
719
+ width: 100%;
720
+ min-height: auto;
721
+ }
722
+
723
+ .suggestion-task-card {
724
+ display: flex;
725
+ align-items: center;
726
+ gap: var(--spacing-md);
727
+ padding: var(--spacing-md);
728
+ background: var(--bg-primary);
729
+ border: 2px solid var(--border-color);
730
+ border-radius: var(--radius-lg);
731
+ cursor: pointer;
732
+ transition: all var(--transition-fast);
733
+ position: relative;
734
+ overflow: visible;
735
+ width: 100%;
736
+ min-height: 50px;
737
+ box-sizing: border-box;
738
+ margin-bottom: 0;
739
+ }
740
+
741
+ .suggestion-task-card:last-child {
742
+ margin-bottom: 0;
743
+ }
744
+
745
+ .suggestion-task-card::before {
746
+ content: '';
747
+ position: absolute;
748
+ top: 0;
749
+ left: 0;
750
+ bottom: 0;
751
+ width: 4px;
752
+ background: var(--primary-color);
753
+ transform: scaleX(0);
754
+ transform-origin: left;
755
+ transition: transform var(--transition-fast);
756
+ }
757
+
758
+ .suggestion-task-card:hover {
759
+ border-color: var(--primary-color);
760
+ background: var(--bg-hover);
761
+ transform: translateY(-2px);
762
+ box-shadow: var(--shadow-lg);
763
+ }
764
+
765
+ .suggestion-task-card:hover::before {
766
+ transform: scaleX(1);
767
+ }
768
+
769
+ .suggestion-task-card:active {
770
+ transform: translateY(-1px);
771
+ box-shadow: var(--shadow-md);
772
+ }
773
+
774
+ .suggestion-card-icon {
775
+ flex-shrink: 0;
776
+ width: 40px;
777
+ height: 40px;
778
+ display: flex;
779
+ align-items: center;
780
+ justify-content: center;
781
+ background: linear-gradient(135deg, var(--primary-color), var(--accent-color));
782
+ border-radius: var(--radius-md);
783
+ color: white;
784
+ transition: transform var(--transition-fast);
785
+ }
786
+
787
+ .suggestion-task-card:hover .suggestion-card-icon {
788
+ transform: scale(1.1);
789
+ }
790
+
791
+ .suggestion-card-content {
792
+ flex: 1;
793
+ min-width: 0;
794
+ display: flex;
795
+ flex-direction: column;
796
+ justify-content: center;
797
+ }
798
+
799
+ .suggestion-task-text {
800
+ font-size: var(--font-size-sm);
801
+ color: var(--text-primary);
802
+ line-height: 1.5;
803
+ font-weight: var(--font-weight-medium);
804
+ word-wrap: break-word;
805
+ overflow-wrap: break-word;
806
+ white-space: normal;
807
+ text-overflow: clip;
808
+ }
809
+
810
+ .suggestion-tasks-section {
811
+ margin: var(--spacing-lg) 0;
812
+ width: 100%;
813
+ }
814
+
815
+ .suggestion-tasks-header {
816
+ display: flex;
817
+ align-items: center;
818
+ gap: var(--spacing-sm);
819
+ margin-bottom: var(--spacing-md);
820
+ padding: 0 var(--spacing-sm);
821
+ min-height: 24px;
822
+ width: 100%;
823
+ overflow: visible;
824
+ }
825
+
826
+ .suggestion-tasks-header h4 {
827
+ font-size: var(--font-size-base);
828
+ font-weight: var(--font-weight-bold);
829
+ color: var(--text-primary);
830
+ margin: 0;
831
+ white-space: nowrap;
832
+ overflow: visible;
833
+ text-overflow: clip;
834
+ }
835
+
836
+ .suggestion-cards-container {
837
+ display: flex;
838
+ flex-direction: column;
839
+ gap: var(--spacing-md);
840
+ width: 100%;
841
+ padding: 0 var(--spacing-sm);
842
+ }
843
+
844
+ .suggestion-card-arrow {
845
+ flex-shrink: 0;
846
+ width: 24px;
847
+ height: 24px;
848
+ display: flex;
849
+ align-items: center;
850
+ justify-content: center;
851
+ color: var(--text-muted);
852
+ transition: all var(--transition-fast);
853
+ }
854
+
855
+ .suggestion-task-card:hover .suggestion-card-arrow {
856
+ color: var(--primary-color);
857
+ transform: translateX(4px);
858
+ }
859
+
860
+ /* Animation for suggestion cards */
861
+ .suggestion-tasks-container.fade-in {
862
+ animation: suggestionFadeIn 0.5s ease-out;
863
+ }
864
+
865
+ @keyframes suggestionFadeIn {
866
+ from {
867
+ opacity: 0;
868
+ transform: translateY(20px);
869
+ }
870
+ to {
871
+ opacity: 1;
872
+ transform: translateY(0);
873
+ }
874
+ }
875
+
876
+ /* Responsive design for suggestion cards */
877
+ @media (max-width: 480px) {
878
+ .suggestion-tasks-container {
879
+ margin: var(--spacing-lg) 0;
880
+ padding: var(--spacing-md);
881
+ }
882
+
883
+ .suggestion-task-card {
884
+ padding: var(--spacing-md);
885
+ gap: var(--spacing-sm);
886
+ }
887
+
888
+ .suggestion-card-icon {
889
+ width: 32px;
890
+ height: 32px;
891
+ }
892
+
893
+ .suggestion-card-icon svg {
894
+ width: 14px;
895
+ height: 14px;
896
+ }
897
+
898
+ .suggestion-task-text {
899
+ font-size: var(--font-size-xs);
900
+ }
901
+
902
+ .suggestion-tasks-header h4 {
903
+ font-size: var(--font-size-base);
904
+ }
905
+ }
906
+
907
+ /* Loading state for suggestion cards */
908
+ .suggestion-task-card.loading {
909
+ pointer-events: none;
910
+ opacity: 0.6;
911
+ }
912
+
913
+ .suggestion-task-card.loading .suggestion-card-icon {
914
+ animation: pulse 1.5s ease-in-out infinite;
915
+ }
916
+
917
+ @keyframes pulse {
918
+ 0%, 100% {
919
+ opacity: 1;
920
+ }
921
+ 50% {
922
+ opacity: 0.7;
923
+ }
924
+ }
925
+
926
+ /* Success state when card is clicked */
927
+ .suggestion-task-card.success {
928
+ border-color: var(--accent-color);
929
+ background: rgba(40, 167, 69, 0.05);
930
+ }
931
+
932
+ .suggestion-task-card.success .suggestion-card-icon {
933
+ background: var(--accent-color);
934
+ }