vibesurf 0.1.9a5__py3-none-any.whl → 0.1.10__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 (41) hide show
  1. vibe_surf/_version.py +2 -2
  2. vibe_surf/agents/vibe_surf_agent.py +25 -15
  3. vibe_surf/backend/api/browser.py +66 -0
  4. vibe_surf/backend/api/task.py +2 -1
  5. vibe_surf/backend/main.py +76 -1
  6. vibe_surf/backend/shared_state.py +2 -0
  7. vibe_surf/browser/agent_browser_session.py +312 -62
  8. vibe_surf/browser/browser_manager.py +57 -92
  9. vibe_surf/browser/watchdogs/dom_watchdog.py +43 -43
  10. vibe_surf/chrome_extension/background.js +84 -0
  11. vibe_surf/chrome_extension/manifest.json +3 -1
  12. vibe_surf/chrome_extension/scripts/file-manager.js +526 -0
  13. vibe_surf/chrome_extension/scripts/history-manager.js +658 -0
  14. vibe_surf/chrome_extension/scripts/modal-manager.js +487 -0
  15. vibe_surf/chrome_extension/scripts/session-manager.js +31 -8
  16. vibe_surf/chrome_extension/scripts/settings-manager.js +1214 -0
  17. vibe_surf/chrome_extension/scripts/ui-manager.js +770 -3186
  18. vibe_surf/chrome_extension/sidepanel.html +27 -4
  19. vibe_surf/chrome_extension/styles/activity.css +574 -0
  20. vibe_surf/chrome_extension/styles/base.css +76 -0
  21. vibe_surf/chrome_extension/styles/history-modal.css +791 -0
  22. vibe_surf/chrome_extension/styles/input.css +429 -0
  23. vibe_surf/chrome_extension/styles/layout.css +186 -0
  24. vibe_surf/chrome_extension/styles/responsive.css +454 -0
  25. vibe_surf/chrome_extension/styles/settings-environment.css +165 -0
  26. vibe_surf/chrome_extension/styles/settings-forms.css +389 -0
  27. vibe_surf/chrome_extension/styles/settings-modal.css +141 -0
  28. vibe_surf/chrome_extension/styles/settings-profiles.css +244 -0
  29. vibe_surf/chrome_extension/styles/settings-responsive.css +144 -0
  30. vibe_surf/chrome_extension/styles/settings-utilities.css +25 -0
  31. vibe_surf/chrome_extension/styles/variables.css +54 -0
  32. vibe_surf/cli.py +1 -0
  33. vibe_surf/controller/vibesurf_tools.py +0 -2
  34. {vibesurf-0.1.9a5.dist-info → vibesurf-0.1.10.dist-info}/METADATA +18 -2
  35. {vibesurf-0.1.9a5.dist-info → vibesurf-0.1.10.dist-info}/RECORD +39 -23
  36. vibe_surf/chrome_extension/styles/main.css +0 -2338
  37. vibe_surf/chrome_extension/styles/settings.css +0 -1100
  38. {vibesurf-0.1.9a5.dist-info → vibesurf-0.1.10.dist-info}/WHEEL +0 -0
  39. {vibesurf-0.1.9a5.dist-info → vibesurf-0.1.10.dist-info}/entry_points.txt +0 -0
  40. {vibesurf-0.1.9a5.dist-info → vibesurf-0.1.10.dist-info}/licenses/LICENSE +0 -0
  41. {vibesurf-0.1.9a5.dist-info → vibesurf-0.1.10.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,791 @@
1
+ /* History Modal Styles - VibeSurf Extension */
2
+
3
+ /* History Modal - Modern Design */
4
+ .history-modal-content {
5
+ width: 92vw;
6
+ max-width: 900px;
7
+ min-height: 70vh;
8
+ max-height: 85vh;
9
+ display: flex;
10
+ flex-direction: column;
11
+ border-radius: 16px;
12
+ box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15);
13
+ background: var(--bg-primary);
14
+ border: 1px solid var(--border-color);
15
+ overflow: hidden;
16
+ }
17
+
18
+ .history-content {
19
+ flex: 1;
20
+ overflow: auto;
21
+ display: flex;
22
+ flex-direction: column;
23
+ padding: 32px;
24
+ padding-top: 24px;
25
+ }
26
+
27
+ .history-section {
28
+ flex: 1;
29
+ display: flex;
30
+ flex-direction: column;
31
+ overflow: visible;
32
+ min-height: 0;
33
+ }
34
+
35
+ .section-header {
36
+ display: flex;
37
+ align-items: center;
38
+ justify-content: space-between;
39
+ padding: 0 0 24px 0;
40
+ border-bottom: 2px solid var(--border-color);
41
+ margin-bottom: 28px;
42
+ }
43
+
44
+ .section-header h4 {
45
+ font-size: 24px;
46
+ font-weight: 700;
47
+ color: var(--text-primary);
48
+ margin: 0;
49
+ letter-spacing: -0.5px;
50
+ }
51
+
52
+ .section-subtitle {
53
+ font-size: var(--font-size-sm);
54
+ color: var(--text-muted);
55
+ margin-top: 4px;
56
+ font-weight: 500;
57
+ }
58
+
59
+ .back-btn {
60
+ display: flex;
61
+ align-items: center;
62
+ gap: 8px;
63
+ padding: 10px 20px;
64
+ border: 2px solid var(--primary-color);
65
+ border-radius: 12px;
66
+ background-color: transparent;
67
+ color: var(--primary-color);
68
+ font-size: var(--font-size-sm);
69
+ font-weight: 600;
70
+ cursor: pointer;
71
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
72
+ }
73
+
74
+ .back-btn:hover {
75
+ background-color: var(--primary-color);
76
+ color: white;
77
+ transform: translateY(-1px);
78
+ box-shadow: 0 4px 16px rgba(0, 122, 204, 0.2);
79
+ }
80
+
81
+ /* Recent Tasks List */
82
+ .recent-tasks-list {
83
+ flex: 1;
84
+ overflow-y: auto;
85
+ margin-bottom: 28px;
86
+ padding-right: 8px;
87
+ }
88
+
89
+ .recent-tasks-list::-webkit-scrollbar {
90
+ width: 6px;
91
+ }
92
+
93
+ .recent-tasks-list::-webkit-scrollbar-track {
94
+ background: var(--bg-tertiary);
95
+ border-radius: 3px;
96
+ }
97
+
98
+ .recent-tasks-list::-webkit-scrollbar-thumb {
99
+ background: var(--border-color);
100
+ border-radius: 3px;
101
+ }
102
+
103
+ .recent-tasks-list::-webkit-scrollbar-thumb:hover {
104
+ background: var(--text-secondary);
105
+ }
106
+
107
+ .recent-task-item {
108
+ display: flex;
109
+ align-items: flex-start;
110
+ gap: 20px;
111
+ padding: 24px;
112
+ border: 1px solid var(--border-color);
113
+ border-radius: 16px;
114
+ background-color: var(--bg-secondary);
115
+ margin-bottom: 20px;
116
+ cursor: pointer;
117
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
118
+ position: relative;
119
+ overflow: hidden;
120
+ }
121
+
122
+ .recent-task-item::before {
123
+ content: '';
124
+ position: absolute;
125
+ top: 0;
126
+ left: 0;
127
+ right: 0;
128
+ height: 4px;
129
+ background: linear-gradient(90deg, var(--primary-color), var(--accent-color));
130
+ transform: scaleX(0);
131
+ transition: transform 0.3s ease;
132
+ }
133
+
134
+ .recent-task-item:hover {
135
+ border-color: var(--primary-color);
136
+ background-color: var(--bg-hover);
137
+ transform: translateY(-3px);
138
+ box-shadow: 0 12px 32px rgba(0, 122, 204, 0.15);
139
+ }
140
+
141
+ .recent-task-item:hover::before {
142
+ transform: scaleX(1);
143
+ }
144
+
145
+ .task-status-icon {
146
+ width: 48px;
147
+ height: 48px;
148
+ border-radius: 12px;
149
+ display: flex;
150
+ align-items: center;
151
+ justify-content: center;
152
+ font-size: 20px;
153
+ flex-shrink: 0;
154
+ position: relative;
155
+ }
156
+
157
+ .task-status-icon::before {
158
+ content: '';
159
+ position: absolute;
160
+ inset: -2px;
161
+ border-radius: 14px;
162
+ padding: 2px;
163
+ background: linear-gradient(45deg, transparent 30%, rgba(255, 255, 255, 0.3) 50%, transparent 70%);
164
+ mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
165
+ mask-composite: exclude;
166
+ opacity: 0;
167
+ transition: opacity 0.3s ease;
168
+ }
169
+
170
+ .task-status-icon:hover::before {
171
+ opacity: 1;
172
+ }
173
+
174
+ .task-status-icon.completed {
175
+ background: linear-gradient(135deg, rgba(40, 167, 69, 0.1), rgba(40, 167, 69, 0.2));
176
+ color: var(--accent-color);
177
+ border: 1px solid rgba(40, 167, 69, 0.3);
178
+ }
179
+
180
+ .task-status-icon.running {
181
+ background: linear-gradient(135deg, rgba(255, 193, 7, 0.1), rgba(255, 193, 7, 0.2));
182
+ color: var(--warning-color);
183
+ border: 1px solid rgba(255, 193, 7, 0.3);
184
+ }
185
+
186
+ .task-status-icon.error {
187
+ background: linear-gradient(135deg, rgba(220, 53, 69, 0.1), rgba(220, 53, 69, 0.2));
188
+ color: var(--danger-color);
189
+ border: 1px solid rgba(220, 53, 69, 0.3);
190
+ }
191
+
192
+ .task-status-icon.pending {
193
+ background: linear-gradient(135deg, rgba(108, 117, 125, 0.1), rgba(108, 117, 125, 0.2));
194
+ color: var(--text-muted);
195
+ border: 1px solid rgba(108, 117, 125, 0.3);
196
+ }
197
+
198
+ .task-item-content {
199
+ flex: 1;
200
+ min-width: 0;
201
+ }
202
+
203
+ .task-header {
204
+ display: flex;
205
+ align-items: center;
206
+ justify-content: space-between;
207
+ margin-bottom: 12px;
208
+ }
209
+
210
+ .session-id-badge {
211
+ font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;
212
+ font-size: 11px;
213
+ background: var(--bg-tertiary);
214
+ color: var(--text-secondary);
215
+ padding: 6px 12px;
216
+ border-radius: 8px;
217
+ border: 1px solid var(--border-color);
218
+ font-weight: 600;
219
+ letter-spacing: 0.5px;
220
+ }
221
+
222
+ .task-timestamp {
223
+ font-size: 12px;
224
+ color: var(--text-muted);
225
+ font-weight: 500;
226
+ }
227
+
228
+ .task-description {
229
+ font-size: 15px;
230
+ color: var(--text-primary);
231
+ margin-bottom: 16px;
232
+ line-height: 1.5;
233
+ overflow: hidden;
234
+ display: -webkit-box;
235
+ -webkit-line-clamp: 2;
236
+ -webkit-box-orient: vertical;
237
+ font-weight: 400;
238
+ }
239
+
240
+ .task-meta {
241
+ display: flex;
242
+ align-items: center;
243
+ gap: 12px;
244
+ font-size: 13px;
245
+ color: var(--text-muted);
246
+ }
247
+
248
+ .task-status-text {
249
+ display: flex;
250
+ align-items: center;
251
+ gap: 8px;
252
+ padding: 4px 10px;
253
+ border-radius: 8px;
254
+ font-weight: 600;
255
+ font-size: 12px;
256
+ }
257
+
258
+ .task-status-text.completed {
259
+ background: linear-gradient(135deg, rgba(40, 167, 69, 0.1), rgba(40, 167, 69, 0.15));
260
+ color: var(--accent-color);
261
+ border: 1px solid rgba(40, 167, 69, 0.2);
262
+ }
263
+
264
+ .task-status-text.running {
265
+ background: linear-gradient(135deg, rgba(255, 193, 7, 0.1), rgba(255, 193, 7, 0.15));
266
+ color: var(--warning-color);
267
+ border: 1px solid rgba(255, 193, 7, 0.2);
268
+ }
269
+
270
+ .task-status-text.error {
271
+ background: linear-gradient(135deg, rgba(220, 53, 69, 0.1), rgba(220, 53, 69, 0.15));
272
+ color: var(--danger-color);
273
+ border: 1px solid rgba(220, 53, 69, 0.2);
274
+ }
275
+
276
+ .task-status-text.pending {
277
+ background: linear-gradient(135deg, rgba(108, 117, 125, 0.1), rgba(108, 117, 125, 0.15));
278
+ color: var(--text-muted);
279
+ border: 1px solid rgba(108, 117, 125, 0.2);
280
+ }
281
+
282
+ .view-more-btn {
283
+ display: flex;
284
+ align-items: center;
285
+ justify-content: center;
286
+ gap: 12px;
287
+ width: 100%;
288
+ padding: 20px;
289
+ border: 2px dashed var(--border-color);
290
+ border-radius: 16px;
291
+ background: linear-gradient(135deg, var(--bg-secondary), var(--bg-tertiary));
292
+ color: var(--text-secondary);
293
+ font-size: 15px;
294
+ font-weight: 600;
295
+ cursor: pointer;
296
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
297
+ position: relative;
298
+ overflow: hidden;
299
+ }
300
+
301
+ .view-more-btn::before {
302
+ content: '';
303
+ position: absolute;
304
+ top: 0;
305
+ left: -100%;
306
+ width: 100%;
307
+ height: 100%;
308
+ background: linear-gradient(90deg, transparent, rgba(0, 122, 204, 0.1), transparent);
309
+ transition: left 0.5s;
310
+ }
311
+
312
+ .view-more-btn:hover {
313
+ border-color: var(--primary-color);
314
+ background: linear-gradient(135deg, var(--bg-hover), var(--bg-secondary));
315
+ color: var(--primary-color);
316
+ transform: translateY(-2px);
317
+ box-shadow: 0 8px 24px rgba(0, 122, 204, 0.15);
318
+ }
319
+
320
+ .view-more-btn:hover::before {
321
+ left: 100%;
322
+ }
323
+
324
+ /* Search and Filter Bar */
325
+ .search-filter-bar {
326
+ display: flex;
327
+ gap: 20px;
328
+ margin-bottom: 28px;
329
+ }
330
+
331
+ .search-input {
332
+ flex: 1;
333
+ padding: 14px 20px;
334
+ border: 2px solid var(--border-color);
335
+ border-radius: 12px;
336
+ background-color: var(--bg-primary);
337
+ font-size: 15px;
338
+ color: var(--text-primary);
339
+ font-weight: 500;
340
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
341
+ }
342
+
343
+ .search-input::placeholder {
344
+ color: var(--text-muted);
345
+ font-weight: 400;
346
+ }
347
+
348
+ .search-input:focus {
349
+ outline: none;
350
+ border-color: var(--primary-color);
351
+ box-shadow: 0 0 0 4px rgba(0, 122, 204, 0.1);
352
+ transform: translateY(-1px);
353
+ }
354
+
355
+ .filter-select {
356
+ padding: 14px 18px;
357
+ border: 2px solid var(--border-color);
358
+ border-radius: 12px;
359
+ background-color: var(--bg-primary);
360
+ font-size: 15px;
361
+ color: var(--text-primary);
362
+ font-weight: 500;
363
+ cursor: pointer;
364
+ min-width: 140px;
365
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
366
+ }
367
+
368
+ .filter-select:focus {
369
+ outline: none;
370
+ border-color: var(--primary-color);
371
+ box-shadow: 0 0 0 4px rgba(0, 122, 204, 0.1);
372
+ transform: translateY(-1px);
373
+ }
374
+
375
+ /* All Sessions List */
376
+ .sessions-list {
377
+ flex: 1;
378
+ overflow-y: auto;
379
+ margin-bottom: 28px;
380
+ padding-right: 8px;
381
+ }
382
+
383
+ .sessions-list::-webkit-scrollbar {
384
+ width: 6px;
385
+ }
386
+
387
+ .sessions-list::-webkit-scrollbar-track {
388
+ background: var(--bg-tertiary);
389
+ border-radius: 3px;
390
+ }
391
+
392
+ .sessions-list::-webkit-scrollbar-thumb {
393
+ background: var(--border-color);
394
+ border-radius: 3px;
395
+ }
396
+
397
+ .sessions-list::-webkit-scrollbar-thumb:hover {
398
+ background: var(--text-secondary);
399
+ }
400
+
401
+ .session-item {
402
+ display: flex;
403
+ align-items: center;
404
+ gap: 20px;
405
+ padding: 20px;
406
+ border: 1px solid var(--border-color);
407
+ border-radius: 12px;
408
+ background-color: var(--bg-primary);
409
+ margin-bottom: 16px;
410
+ cursor: pointer;
411
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
412
+ position: relative;
413
+ overflow: hidden;
414
+ }
415
+
416
+ .session-item::before {
417
+ content: '';
418
+ position: absolute;
419
+ top: 0;
420
+ left: 0;
421
+ right: 0;
422
+ height: 3px;
423
+ background: linear-gradient(90deg, var(--primary-color), var(--accent-color));
424
+ transform: scaleX(0);
425
+ transition: transform 0.3s ease;
426
+ }
427
+
428
+ .session-item:hover {
429
+ border-color: var(--primary-color);
430
+ background-color: var(--bg-hover);
431
+ transform: translateY(-2px);
432
+ box-shadow: 0 8px 24px rgba(0, 122, 204, 0.15);
433
+ }
434
+
435
+ .session-item:hover::before {
436
+ transform: scaleX(1);
437
+ }
438
+
439
+ .session-info {
440
+ flex: 1;
441
+ min-width: 0;
442
+ }
443
+
444
+ .session-header {
445
+ display: flex;
446
+ align-items: center;
447
+ justify-content: space-between;
448
+ margin-bottom: 8px;
449
+ }
450
+
451
+ .session-id {
452
+ font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;
453
+ font-size: 14px;
454
+ font-weight: 600;
455
+ color: var(--text-primary);
456
+ letter-spacing: 0.3px;
457
+ }
458
+
459
+ .session-time {
460
+ font-size: 12px;
461
+ color: var(--text-muted);
462
+ font-weight: 500;
463
+ }
464
+
465
+ .session-details {
466
+ display: flex;
467
+ align-items: center;
468
+ gap: 16px;
469
+ font-size: 13px;
470
+ color: var(--text-secondary);
471
+ }
472
+
473
+ .task-count {
474
+ display: flex;
475
+ align-items: center;
476
+ gap: 6px;
477
+ font-weight: 600;
478
+ }
479
+
480
+ .session-status {
481
+ display: flex;
482
+ align-items: center;
483
+ gap: 8px;
484
+ font-weight: 500;
485
+ }
486
+
487
+ /* Pagination Controls */
488
+ .pagination-controls {
489
+ display: flex;
490
+ align-items: center;
491
+ justify-content: center;
492
+ gap: 16px;
493
+ padding: 24px 0;
494
+ border-top: 2px solid var(--border-color);
495
+ margin-top: auto;
496
+ }
497
+
498
+ .page-btn {
499
+ padding: 12px 20px;
500
+ border: 2px solid var(--border-color);
501
+ border-radius: 10px;
502
+ background-color: var(--bg-primary);
503
+ color: var(--text-primary);
504
+ font-size: 14px;
505
+ font-weight: 600;
506
+ cursor: pointer;
507
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
508
+ }
509
+
510
+ .page-btn:hover:not(:disabled) {
511
+ border-color: var(--primary-color);
512
+ background-color: var(--primary-color);
513
+ color: white;
514
+ transform: translateY(-1px);
515
+ box-shadow: 0 4px 16px rgba(0, 122, 204, 0.2);
516
+ }
517
+
518
+ .page-btn:disabled {
519
+ background-color: var(--bg-tertiary);
520
+ color: var(--text-muted);
521
+ cursor: not-allowed;
522
+ opacity: 0.4;
523
+ }
524
+
525
+ .page-btn:disabled:hover {
526
+ transform: none;
527
+ box-shadow: none;
528
+ }
529
+
530
+ .page-info {
531
+ font-size: 14px;
532
+ color: var(--text-secondary);
533
+ font-weight: 600;
534
+ }
535
+
536
+ /* Empty State - Enhanced */
537
+ .empty-state {
538
+ display: flex;
539
+ flex-direction: column;
540
+ align-items: center;
541
+ justify-content: center;
542
+ padding: 60px 40px;
543
+ text-align: center;
544
+ color: var(--text-muted);
545
+ min-height: 300px;
546
+ background: linear-gradient(135deg, var(--bg-secondary), var(--bg-tertiary));
547
+ border-radius: 16px;
548
+ border: 2px dashed var(--border-color);
549
+ margin: 20px 0;
550
+ }
551
+
552
+ .empty-state-icon {
553
+ font-size: 72px;
554
+ margin-bottom: 24px;
555
+ opacity: 0.6;
556
+ filter: grayscale(0.3);
557
+ }
558
+
559
+ .empty-state-title {
560
+ font-size: 20px;
561
+ font-weight: 600;
562
+ color: var(--text-secondary);
563
+ margin-bottom: 16px;
564
+ letter-spacing: -0.3px;
565
+ }
566
+
567
+ .empty-state-description {
568
+ font-size: 15px;
569
+ line-height: 1.6;
570
+ opacity: 0.8;
571
+ max-width: 320px;
572
+ }
573
+
574
+ /* Loading States */
575
+ .loading-skeleton {
576
+ background: linear-gradient(90deg,
577
+ var(--bg-tertiary) 25%,
578
+ rgba(0, 122, 204, 0.1) 50%,
579
+ var(--bg-tertiary) 75%);
580
+ background-size: 200% 100%;
581
+ animation: shimmer 2s infinite ease-in-out;
582
+ border-radius: 12px;
583
+ }
584
+
585
+ @keyframes shimmer {
586
+ 0% {
587
+ background-position: 200% 0;
588
+ }
589
+ 100% {
590
+ background-position: -200% 0;
591
+ }
592
+ }
593
+
594
+ .skeleton-task-item {
595
+ height: 96px;
596
+ border-radius: 16px;
597
+ margin-bottom: 20px;
598
+ position: relative;
599
+ overflow: hidden;
600
+ }
601
+
602
+ .skeleton-task-item::before {
603
+ content: '';
604
+ position: absolute;
605
+ top: 0;
606
+ left: 0;
607
+ right: 0;
608
+ height: 4px;
609
+ background: linear-gradient(90deg, var(--primary-color), var(--accent-color));
610
+ opacity: 0.3;
611
+ }
612
+
613
+ .skeleton-session-item {
614
+ height: 76px;
615
+ border-radius: 12px;
616
+ margin-bottom: 16px;
617
+ position: relative;
618
+ overflow: hidden;
619
+ }
620
+
621
+ .skeleton-session-item::before {
622
+ content: '';
623
+ position: absolute;
624
+ top: 0;
625
+ left: 0;
626
+ right: 0;
627
+ height: 3px;
628
+ background: linear-gradient(90deg, var(--primary-color), var(--accent-color));
629
+ opacity: 0.3;
630
+ }
631
+
632
+ /* Enhanced Status Dots */
633
+ .history-modal .status-dot {
634
+ width: 10px;
635
+ height: 10px;
636
+ border-radius: 50%;
637
+ display: inline-block;
638
+ position: relative;
639
+ margin-right: 4px;
640
+ }
641
+
642
+ .history-modal .status-dot::before {
643
+ content: '';
644
+ position: absolute;
645
+ top: -3px;
646
+ left: -3px;
647
+ right: -3px;
648
+ bottom: -3px;
649
+ border-radius: 50%;
650
+ opacity: 0.3;
651
+ }
652
+
653
+ .history-modal .status-dot.completed,
654
+ .history-modal .status-dot.done {
655
+ background: var(--accent-color);
656
+ }
657
+
658
+ .history-modal .status-dot.completed::before,
659
+ .history-modal .status-dot.done::before {
660
+ background: var(--accent-color);
661
+ }
662
+
663
+ .history-modal .status-dot.running {
664
+ background: var(--warning-color);
665
+ animation: pulse-dot 2s infinite;
666
+ }
667
+
668
+ .history-modal .status-dot.running::before {
669
+ background: var(--warning-color);
670
+ animation: pulse-ring 2s infinite;
671
+ }
672
+
673
+ .history-modal .status-dot.failed,
674
+ .history-modal .status-dot.error {
675
+ background: var(--danger-color);
676
+ }
677
+
678
+ .history-modal .status-dot.failed::before,
679
+ .history-modal .status-dot.error::before {
680
+ background: var(--danger-color);
681
+ }
682
+
683
+ .history-modal .status-dot.paused {
684
+ background: var(--text-muted);
685
+ }
686
+
687
+ .history-modal .status-dot.paused::before {
688
+ background: var(--text-muted);
689
+ }
690
+
691
+ .history-modal .status-dot.active {
692
+ background: var(--accent-color);
693
+ animation: pulse-dot 2s infinite;
694
+ }
695
+
696
+ .history-modal .status-dot.active::before {
697
+ background: var(--accent-color);
698
+ animation: pulse-ring 2s infinite;
699
+ }
700
+
701
+ @keyframes pulse-dot {
702
+ 0%, 100% {
703
+ opacity: 1;
704
+ transform: scale(1);
705
+ }
706
+ 50% {
707
+ opacity: 0.7;
708
+ transform: scale(0.9);
709
+ }
710
+ }
711
+
712
+ @keyframes pulse-ring {
713
+ 0% {
714
+ transform: scale(0.8);
715
+ opacity: 0.8;
716
+ }
717
+ 50% {
718
+ transform: scale(1.2);
719
+ opacity: 0.3;
720
+ }
721
+ 100% {
722
+ transform: scale(1.6);
723
+ opacity: 0;
724
+ }
725
+ }
726
+
727
+ /* Enhanced Scrollbar Styles for History Modal */
728
+ .recent-tasks-list::-webkit-scrollbar,
729
+ .sessions-list::-webkit-scrollbar {
730
+ width: 8px;
731
+ }
732
+
733
+ .recent-tasks-list::-webkit-scrollbar-track,
734
+ .sessions-list::-webkit-scrollbar-track {
735
+ background: var(--bg-tertiary);
736
+ border-radius: 4px;
737
+ margin: 8px 0;
738
+ }
739
+
740
+ .recent-tasks-list::-webkit-scrollbar-thumb,
741
+ .sessions-list::-webkit-scrollbar-thumb {
742
+ background: linear-gradient(135deg, var(--border-color), var(--text-muted));
743
+ border-radius: 4px;
744
+ border: 1px solid var(--bg-tertiary);
745
+ }
746
+
747
+ .recent-tasks-list::-webkit-scrollbar-thumb:hover,
748
+ .sessions-list::-webkit-scrollbar-thumb:hover {
749
+ background: linear-gradient(135deg, var(--text-secondary), var(--primary-color));
750
+ }
751
+
752
+ /* Focus Styles for Keyboard Navigation */
753
+ .recent-task-item:focus,
754
+ .session-item:focus,
755
+ .view-more-btn:focus,
756
+ .back-btn:focus {
757
+ outline: 3px solid var(--primary-color) !important;
758
+ outline-offset: 2px !important;
759
+ }
760
+
761
+ /* High Contrast Mode Support */
762
+ @media (prefers-contrast: high) {
763
+ .recent-task-item,
764
+ .session-item {
765
+ border-width: 2px !important;
766
+ }
767
+
768
+ .task-status-icon,
769
+ .task-status-text {
770
+ border-width: 2px !important;
771
+ }
772
+
773
+ .history-modal .status-dot {
774
+ border: 2px solid currentColor !important;
775
+ }
776
+ }
777
+
778
+ /* Dark Mode Support (Future Enhancement) */
779
+ @media (prefers-color-scheme: dark) {
780
+ .loading-skeleton {
781
+ background: linear-gradient(90deg,
782
+ rgba(255, 255, 255, 0.1) 25%,
783
+ rgba(0, 122, 204, 0.2) 50%,
784
+ rgba(255, 255, 255, 0.1) 75%) !important;
785
+ }
786
+
787
+ .recent-tasks-list::-webkit-scrollbar-thumb,
788
+ .sessions-list::-webkit-scrollbar-thumb {
789
+ background: linear-gradient(135deg, rgba(255, 255, 255, 0.2), rgba(0, 122, 204, 0.4)) !important;
790
+ }
791
+ }