vibesurf 0.1.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.

Potentially problematic release.


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

Files changed (70) hide show
  1. vibe_surf/__init__.py +12 -0
  2. vibe_surf/_version.py +34 -0
  3. vibe_surf/agents/__init__.py +0 -0
  4. vibe_surf/agents/browser_use_agent.py +1106 -0
  5. vibe_surf/agents/prompts/__init__.py +1 -0
  6. vibe_surf/agents/prompts/vibe_surf_prompt.py +176 -0
  7. vibe_surf/agents/report_writer_agent.py +360 -0
  8. vibe_surf/agents/vibe_surf_agent.py +1632 -0
  9. vibe_surf/backend/__init__.py +0 -0
  10. vibe_surf/backend/api/__init__.py +3 -0
  11. vibe_surf/backend/api/activity.py +243 -0
  12. vibe_surf/backend/api/config.py +740 -0
  13. vibe_surf/backend/api/files.py +322 -0
  14. vibe_surf/backend/api/models.py +257 -0
  15. vibe_surf/backend/api/task.py +300 -0
  16. vibe_surf/backend/database/__init__.py +13 -0
  17. vibe_surf/backend/database/manager.py +129 -0
  18. vibe_surf/backend/database/models.py +164 -0
  19. vibe_surf/backend/database/queries.py +922 -0
  20. vibe_surf/backend/database/schemas.py +100 -0
  21. vibe_surf/backend/llm_config.py +182 -0
  22. vibe_surf/backend/main.py +137 -0
  23. vibe_surf/backend/migrations/__init__.py +16 -0
  24. vibe_surf/backend/migrations/init_db.py +303 -0
  25. vibe_surf/backend/migrations/seed_data.py +236 -0
  26. vibe_surf/backend/shared_state.py +601 -0
  27. vibe_surf/backend/utils/__init__.py +7 -0
  28. vibe_surf/backend/utils/encryption.py +164 -0
  29. vibe_surf/backend/utils/llm_factory.py +225 -0
  30. vibe_surf/browser/__init__.py +8 -0
  31. vibe_surf/browser/agen_browser_profile.py +130 -0
  32. vibe_surf/browser/agent_browser_session.py +416 -0
  33. vibe_surf/browser/browser_manager.py +296 -0
  34. vibe_surf/browser/utils.py +790 -0
  35. vibe_surf/browser/watchdogs/__init__.py +0 -0
  36. vibe_surf/browser/watchdogs/action_watchdog.py +291 -0
  37. vibe_surf/browser/watchdogs/dom_watchdog.py +954 -0
  38. vibe_surf/chrome_extension/background.js +558 -0
  39. vibe_surf/chrome_extension/config.js +48 -0
  40. vibe_surf/chrome_extension/content.js +284 -0
  41. vibe_surf/chrome_extension/dev-reload.js +47 -0
  42. vibe_surf/chrome_extension/icons/convert-svg.js +33 -0
  43. vibe_surf/chrome_extension/icons/logo-preview.html +187 -0
  44. vibe_surf/chrome_extension/icons/logo.png +0 -0
  45. vibe_surf/chrome_extension/manifest.json +53 -0
  46. vibe_surf/chrome_extension/popup.html +134 -0
  47. vibe_surf/chrome_extension/scripts/api-client.js +473 -0
  48. vibe_surf/chrome_extension/scripts/main.js +491 -0
  49. vibe_surf/chrome_extension/scripts/markdown-it.min.js +3 -0
  50. vibe_surf/chrome_extension/scripts/session-manager.js +599 -0
  51. vibe_surf/chrome_extension/scripts/ui-manager.js +3687 -0
  52. vibe_surf/chrome_extension/sidepanel.html +347 -0
  53. vibe_surf/chrome_extension/styles/animations.css +471 -0
  54. vibe_surf/chrome_extension/styles/components.css +670 -0
  55. vibe_surf/chrome_extension/styles/main.css +2307 -0
  56. vibe_surf/chrome_extension/styles/settings.css +1100 -0
  57. vibe_surf/cli.py +357 -0
  58. vibe_surf/controller/__init__.py +0 -0
  59. vibe_surf/controller/file_system.py +53 -0
  60. vibe_surf/controller/mcp_client.py +68 -0
  61. vibe_surf/controller/vibesurf_controller.py +616 -0
  62. vibe_surf/controller/views.py +37 -0
  63. vibe_surf/llm/__init__.py +21 -0
  64. vibe_surf/llm/openai_compatible.py +237 -0
  65. vibesurf-0.1.0.dist-info/METADATA +97 -0
  66. vibesurf-0.1.0.dist-info/RECORD +70 -0
  67. vibesurf-0.1.0.dist-info/WHEEL +5 -0
  68. vibesurf-0.1.0.dist-info/entry_points.txt +2 -0
  69. vibesurf-0.1.0.dist-info/licenses/LICENSE +201 -0
  70. vibesurf-0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,670 @@
1
+ /* Components CSS - Modals, Forms, and Complex Components */
2
+
3
+ /* Modal Styles */
4
+ .modal {
5
+ position: fixed;
6
+ top: 0;
7
+ left: 0;
8
+ right: 0;
9
+ bottom: 0;
10
+ z-index: 1000;
11
+ display: flex;
12
+ align-items: center;
13
+ justify-content: center;
14
+ padding: var(--spacing-lg);
15
+ }
16
+
17
+ .modal-overlay {
18
+ position: absolute;
19
+ top: 0;
20
+ left: 0;
21
+ right: 0;
22
+ bottom: 0;
23
+ background-color: rgba(0, 0, 0, 0.5);
24
+ backdrop-filter: blur(4px);
25
+ }
26
+
27
+ .modal-content {
28
+ position: relative;
29
+ width: 100%;
30
+ max-width: 500px;
31
+ max-height: 90vh;
32
+ background-color: var(--bg-primary);
33
+ border-radius: var(--radius-xl);
34
+ box-shadow: var(--shadow-lg);
35
+ display: flex;
36
+ flex-direction: column;
37
+ overflow: hidden;
38
+ }
39
+
40
+ .modal-header {
41
+ display: flex;
42
+ align-items: center;
43
+ justify-content: space-between;
44
+ padding: var(--spacing-xl) var(--spacing-xl) var(--spacing-lg);
45
+ border-bottom: 1px solid var(--border-color);
46
+ }
47
+
48
+ .modal-header h3 {
49
+ font-size: var(--font-size-xl);
50
+ font-weight: var(--font-weight-semibold);
51
+ color: var(--text-primary);
52
+ }
53
+
54
+ .modal-close {
55
+ display: flex;
56
+ align-items: center;
57
+ justify-content: center;
58
+ width: 32px;
59
+ height: 32px;
60
+ border: none;
61
+ border-radius: var(--radius-md);
62
+ background-color: transparent;
63
+ color: var(--text-secondary);
64
+ cursor: pointer;
65
+ transition: all var(--transition-fast);
66
+ }
67
+
68
+ .modal-close:hover {
69
+ background-color: var(--bg-hover);
70
+ color: var(--text-primary);
71
+ }
72
+
73
+ /* History Modal */
74
+ .history-list {
75
+ flex: 1;
76
+ overflow-y: auto;
77
+ padding: var(--spacing-lg) var(--spacing-xl);
78
+ max-height: 60vh;
79
+ }
80
+
81
+ .history-item {
82
+ padding: var(--spacing-lg);
83
+ border: 1px solid var(--border-color);
84
+ border-radius: var(--radius-lg);
85
+ margin-bottom: var(--spacing-md);
86
+ cursor: pointer;
87
+ transition: all var(--transition-fast);
88
+ }
89
+
90
+ .history-item:hover {
91
+ border-color: var(--primary-color);
92
+ background-color: var(--bg-active);
93
+ }
94
+
95
+ .history-item:last-child {
96
+ margin-bottom: 0;
97
+ }
98
+
99
+ .history-item-header {
100
+ display: flex;
101
+ align-items: center;
102
+ justify-content: between;
103
+ margin-bottom: var(--spacing-sm);
104
+ }
105
+
106
+ .history-session-id {
107
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
108
+ font-size: var(--font-size-xs);
109
+ background-color: var(--bg-tertiary);
110
+ padding: 2px 6px;
111
+ border-radius: var(--radius-sm);
112
+ color: var(--text-secondary);
113
+ }
114
+
115
+ .history-timestamp {
116
+ font-size: var(--font-size-xs);
117
+ color: var(--text-muted);
118
+ margin-left: auto;
119
+ }
120
+
121
+ .history-task {
122
+ font-size: var(--font-size-sm);
123
+ color: var(--text-primary);
124
+ line-height: 1.5;
125
+ margin-bottom: var(--spacing-sm);
126
+ display: -webkit-box;
127
+ -webkit-line-clamp: 2;
128
+ -webkit-box-orient: vertical;
129
+ overflow: hidden;
130
+ }
131
+
132
+ .history-status {
133
+ display: flex;
134
+ align-items: center;
135
+ gap: var(--spacing-xs);
136
+ font-size: var(--font-size-xs);
137
+ font-weight: var(--font-weight-medium);
138
+ }
139
+
140
+ /* Settings Modal */
141
+ .settings-content {
142
+ flex: 1;
143
+ overflow-y: auto;
144
+ padding: var(--spacing-lg) var(--spacing-xl);
145
+ max-height: 70vh;
146
+ }
147
+
148
+ .settings-section {
149
+ margin-bottom: var(--spacing-2xl);
150
+ }
151
+
152
+ .settings-section:last-child {
153
+ margin-bottom: 0;
154
+ }
155
+
156
+ .settings-section h4 {
157
+ font-size: var(--font-size-lg);
158
+ font-weight: var(--font-weight-semibold);
159
+ color: var(--text-primary);
160
+ margin-bottom: var(--spacing-lg);
161
+ }
162
+
163
+ .profiles-list {
164
+ space-y: var(--spacing-md);
165
+ margin-bottom: var(--spacing-lg);
166
+ }
167
+
168
+ .profile-item {
169
+ padding: var(--spacing-md);
170
+ border: 1px solid var(--border-color);
171
+ border-radius: var(--radius-lg);
172
+ background-color: var(--bg-secondary);
173
+ margin-bottom: var(--spacing-md);
174
+ }
175
+
176
+ .profile-item:last-child {
177
+ margin-bottom: 0;
178
+ }
179
+
180
+ .profile-header {
181
+ display: flex;
182
+ align-items: center;
183
+ justify-content: space-between;
184
+ margin-bottom: var(--spacing-sm);
185
+ }
186
+
187
+ .profile-name {
188
+ font-weight: var(--font-weight-medium);
189
+ color: var(--text-primary);
190
+ flex: 1;
191
+ }
192
+
193
+ .profile-badges {
194
+ display: flex;
195
+ align-items: center;
196
+ gap: var(--spacing-xs);
197
+ margin-right: var(--spacing-sm);
198
+ }
199
+
200
+ .profile-status {
201
+ font-size: var(--font-size-xs);
202
+ padding: 2px 6px;
203
+ border-radius: var(--radius-sm);
204
+ font-weight: var(--font-weight-medium);
205
+ }
206
+
207
+ .profile-status.active {
208
+ background-color: rgba(40, 167, 69, 0.1);
209
+ color: var(--accent-color);
210
+ }
211
+
212
+ .profile-status.inactive {
213
+ background-color: rgba(108, 117, 125, 0.1);
214
+ color: var(--text-secondary);
215
+ }
216
+
217
+ .profile-actions {
218
+ display: flex;
219
+ gap: var(--spacing-xs);
220
+ }
221
+
222
+ .profile-btn {
223
+ padding: var(--spacing-xs) var(--spacing-sm);
224
+ border: 1px solid var(--border-color);
225
+ border-radius: var(--radius-sm);
226
+ background-color: var(--bg-primary);
227
+ color: var(--text-secondary);
228
+ font-size: var(--font-size-xs);
229
+ cursor: pointer;
230
+ transition: all var(--transition-fast);
231
+ }
232
+
233
+ .profile-btn:hover {
234
+ border-color: var(--border-hover);
235
+ color: var(--text-primary);
236
+ }
237
+
238
+ .profile-btn.danger {
239
+ color: var(--danger-color);
240
+ border-color: var(--danger-color);
241
+ }
242
+
243
+ .profile-btn.danger:hover {
244
+ background-color: rgba(220, 53, 69, 0.1);
245
+ }
246
+
247
+ .profile-details {
248
+ font-size: var(--font-size-sm);
249
+ color: var(--text-secondary);
250
+ line-height: 1.5;
251
+ }
252
+
253
+ .profile-details .detail-item {
254
+ margin-bottom: var(--spacing-xs);
255
+ }
256
+
257
+ .profile-details .detail-label {
258
+ font-weight: var(--font-weight-medium);
259
+ color: var(--text-primary);
260
+ }
261
+
262
+ .add-btn {
263
+ display: flex;
264
+ align-items: center;
265
+ justify-content: center;
266
+ width: 100%;
267
+ padding: var(--spacing-md);
268
+ border: 2px dashed var(--border-color);
269
+ border-radius: var(--radius-lg);
270
+ background-color: transparent;
271
+ color: var(--text-secondary);
272
+ font-size: var(--font-size-sm);
273
+ font-weight: var(--font-weight-medium);
274
+ cursor: pointer;
275
+ transition: all var(--transition-fast);
276
+ }
277
+
278
+ .add-btn:hover {
279
+ border-color: var(--primary-color);
280
+ color: var(--primary-color);
281
+ background-color: rgba(0, 122, 204, 0.05);
282
+ }
283
+
284
+ .config-item {
285
+ margin-bottom: var(--spacing-lg);
286
+ }
287
+
288
+ .config-item:last-child {
289
+ margin-bottom: 0;
290
+ }
291
+
292
+ .config-item label {
293
+ display: block;
294
+ font-size: var(--font-size-sm);
295
+ font-weight: var(--font-weight-medium);
296
+ color: var(--text-primary);
297
+ margin-bottom: var(--spacing-sm);
298
+ }
299
+
300
+ .config-item input {
301
+ width: 100%;
302
+ padding: var(--spacing-md);
303
+ border: 1px solid var(--border-color);
304
+ border-radius: var(--radius-md);
305
+ background-color: var(--bg-primary);
306
+ font-size: var(--font-size-sm);
307
+ color: var(--text-primary);
308
+ transition: border-color var(--transition-fast);
309
+ }
310
+
311
+ .config-item input:focus {
312
+ outline: none;
313
+ border-color: var(--primary-color);
314
+ box-shadow: 0 0 0 3px rgba(0, 122, 204, 0.1);
315
+ }
316
+
317
+ .config-item input::placeholder {
318
+ color: var(--text-muted);
319
+ }
320
+
321
+ /* Form Components */
322
+ .form-group {
323
+ margin-bottom: var(--spacing-lg);
324
+ }
325
+
326
+ .form-label {
327
+ display: block;
328
+ font-size: var(--font-size-sm);
329
+ font-weight: var(--font-weight-medium);
330
+ color: var(--text-primary);
331
+ margin-bottom: var(--spacing-sm);
332
+ }
333
+
334
+ .form-input {
335
+ width: 100%;
336
+ padding: var(--spacing-md);
337
+ border: 1px solid var(--border-color);
338
+ border-radius: var(--radius-md);
339
+ background-color: var(--bg-primary);
340
+ font-size: var(--font-size-sm);
341
+ color: var(--text-primary);
342
+ transition: all var(--transition-fast);
343
+ }
344
+
345
+ .form-input:focus {
346
+ outline: none;
347
+ border-color: var(--primary-color);
348
+ box-shadow: 0 0 0 3px rgba(0, 122, 204, 0.1);
349
+ }
350
+
351
+ .form-input::placeholder {
352
+ color: var(--text-muted);
353
+ }
354
+
355
+ .form-textarea {
356
+ resize: vertical;
357
+ min-height: 100px;
358
+ }
359
+
360
+ .form-select {
361
+ appearance: none;
362
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e");
363
+ background-position: right 8px center;
364
+ background-repeat: no-repeat;
365
+ background-size: 16px;
366
+ padding-right: 32px;
367
+ }
368
+
369
+ .form-error {
370
+ font-size: var(--font-size-xs);
371
+ color: var(--danger-color);
372
+ margin-top: var(--spacing-xs);
373
+ }
374
+
375
+ .form-help {
376
+ font-size: var(--font-size-xs);
377
+ color: var(--text-muted);
378
+ margin-top: var(--spacing-xs);
379
+ }
380
+
381
+ /* Loading Overlay */
382
+ .loading-overlay {
383
+ position: fixed;
384
+ top: 0;
385
+ left: 0;
386
+ right: 0;
387
+ bottom: 0;
388
+ background-color: rgba(255, 255, 255, 0.9);
389
+ backdrop-filter: blur(4px);
390
+ display: flex;
391
+ flex-direction: column;
392
+ align-items: center;
393
+ justify-content: center;
394
+ z-index: 2000;
395
+ }
396
+
397
+ .loading-spinner {
398
+ width: 40px;
399
+ height: 40px;
400
+ border: 3px solid var(--border-color);
401
+ border-top: 3px solid var(--primary-color);
402
+ border-radius: 50%;
403
+ animation: spin 1s linear infinite;
404
+ margin-bottom: var(--spacing-lg);
405
+ }
406
+
407
+ .loading-text {
408
+ font-size: var(--font-size-sm);
409
+ color: var(--text-secondary);
410
+ font-weight: var(--font-weight-medium);
411
+ }
412
+
413
+ @keyframes spin {
414
+ 0% { transform: rotate(0deg); }
415
+ 100% { transform: rotate(360deg); }
416
+ }
417
+
418
+ /* Button Groups */
419
+ .btn-group {
420
+ display: flex;
421
+ gap: var(--spacing-sm);
422
+ }
423
+
424
+ .btn-group.full-width {
425
+ width: 100%;
426
+ }
427
+
428
+ .btn-group.full-width > * {
429
+ flex: 1;
430
+ }
431
+
432
+ /* Badge Components */
433
+ .badge {
434
+ display: inline-flex;
435
+ align-items: center;
436
+ padding: 2px 8px;
437
+ border-radius: var(--radius-sm);
438
+ font-size: var(--font-size-xs);
439
+ font-weight: var(--font-weight-medium);
440
+ line-height: 1;
441
+ }
442
+
443
+ .badge.primary {
444
+ background-color: rgba(0, 122, 204, 0.1);
445
+ color: var(--primary-color);
446
+ }
447
+
448
+ .badge.success {
449
+ background-color: rgba(40, 167, 69, 0.1);
450
+ color: var(--accent-color);
451
+ }
452
+
453
+ .badge.danger {
454
+ background-color: rgba(220, 53, 69, 0.1);
455
+ color: var(--danger-color);
456
+ }
457
+
458
+ .badge.warning {
459
+ background-color: rgba(255, 193, 7, 0.1);
460
+ color: var(--warning-color);
461
+ }
462
+
463
+ .badge.neutral {
464
+ background-color: var(--bg-tertiary);
465
+ color: var(--text-secondary);
466
+ }
467
+
468
+ /* Tooltip */
469
+ .tooltip {
470
+ position: relative;
471
+ }
472
+
473
+ .tooltip::before {
474
+ content: attr(data-tooltip);
475
+ position: absolute;
476
+ bottom: 100%;
477
+ left: 50%;
478
+ transform: translateX(-50%);
479
+ background-color: var(--text-primary);
480
+ color: var(--bg-primary);
481
+ padding: var(--spacing-xs) var(--spacing-sm);
482
+ border-radius: var(--radius-sm);
483
+ font-size: var(--font-size-xs);
484
+ white-space: nowrap;
485
+ opacity: 0;
486
+ pointer-events: none;
487
+ transition: opacity var(--transition-fast);
488
+ margin-bottom: 4px;
489
+ z-index: 1000;
490
+ }
491
+
492
+ .tooltip::after {
493
+ content: '';
494
+ position: absolute;
495
+ bottom: 100%;
496
+ left: 50%;
497
+ transform: translateX(-50%);
498
+ border: 4px solid transparent;
499
+ border-top-color: var(--text-primary);
500
+ opacity: 0;
501
+ pointer-events: none;
502
+ transition: opacity var(--transition-fast);
503
+ z-index: 1000;
504
+ }
505
+
506
+ .tooltip:hover::before,
507
+ .tooltip:hover::after {
508
+ opacity: 1;
509
+ }
510
+
511
+ /* Empty State */
512
+ .empty-state {
513
+ display: flex;
514
+ flex-direction: column;
515
+ align-items: center;
516
+ justify-content: center;
517
+ padding: var(--spacing-2xl);
518
+ text-align: center;
519
+ color: var(--text-muted);
520
+ }
521
+
522
+ .empty-state-icon {
523
+ font-size: 3rem;
524
+ margin-bottom: var(--spacing-lg);
525
+ opacity: 0.5;
526
+ }
527
+
528
+ .empty-state-title {
529
+ font-size: var(--font-size-lg);
530
+ font-weight: var(--font-weight-medium);
531
+ color: var(--text-primary);
532
+ margin-bottom: var(--spacing-sm);
533
+ }
534
+
535
+ .empty-state-description {
536
+ font-size: var(--font-size-sm);
537
+ line-height: 1.6;
538
+ max-width: 300px;
539
+ }
540
+
541
+ /* Warning Modal */
542
+ .warning-modal {
543
+ position: fixed;
544
+ top: 0;
545
+ left: 0;
546
+ right: 0;
547
+ bottom: 0;
548
+ background-color: rgba(0, 0, 0, 0.6);
549
+ backdrop-filter: blur(6px);
550
+ display: flex;
551
+ align-items: center;
552
+ justify-content: center;
553
+ z-index: 2100;
554
+ padding: var(--spacing-lg);
555
+ }
556
+
557
+ .warning-content {
558
+ background-color: var(--bg-primary);
559
+ border-radius: var(--radius-xl);
560
+ box-shadow: var(--shadow-lg);
561
+ max-width: 480px;
562
+ width: 100%;
563
+ max-height: 90vh;
564
+ overflow: hidden;
565
+ border: 2px solid var(--warning-color);
566
+ }
567
+
568
+ .warning-header {
569
+ display: flex;
570
+ align-items: center;
571
+ gap: var(--spacing-md);
572
+ padding: var(--spacing-xl);
573
+ background-color: rgba(255, 193, 7, 0.1);
574
+ border-bottom: 1px solid rgba(255, 193, 7, 0.2);
575
+ }
576
+
577
+ .warning-icon {
578
+ font-size: 1.5rem;
579
+ color: var(--warning-color);
580
+ }
581
+
582
+ .warning-header h3 {
583
+ font-size: var(--font-size-lg);
584
+ font-weight: var(--font-weight-semibold);
585
+ color: var(--text-primary);
586
+ margin: 0;
587
+ }
588
+
589
+ .warning-body {
590
+ padding: var(--spacing-xl);
591
+ }
592
+
593
+ .warning-body p {
594
+ font-size: var(--font-size-sm);
595
+ color: var(--text-primary);
596
+ line-height: 1.6;
597
+ margin: 0 0 var(--spacing-md) 0;
598
+ }
599
+
600
+ .warning-details {
601
+ background-color: var(--bg-tertiary);
602
+ border: 1px solid var(--border-color);
603
+ border-radius: var(--radius-md);
604
+ padding: var(--spacing-md);
605
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
606
+ font-size: var(--font-size-xs);
607
+ color: var(--text-secondary);
608
+ white-space: pre-wrap;
609
+ margin: 0;
610
+ overflow-x: auto;
611
+ }
612
+
613
+ .warning-actions {
614
+ display: flex;
615
+ gap: var(--spacing-sm);
616
+ padding: var(--spacing-lg) var(--spacing-xl) var(--spacing-xl);
617
+ border-top: 1px solid var(--border-color);
618
+ justify-content: flex-end;
619
+ }
620
+
621
+ .warning-actions .btn {
622
+ min-width: 100px;
623
+ }
624
+
625
+ .warning-actions .btn-secondary {
626
+ background-color: var(--bg-secondary);
627
+ color: var(--text-secondary);
628
+ border: 1px solid var(--border-color);
629
+ }
630
+
631
+ .warning-actions .btn-secondary:hover {
632
+ background-color: var(--bg-hover);
633
+ color: var(--text-primary);
634
+ border-color: var(--border-hover);
635
+ }
636
+
637
+ .warning-actions .btn-danger {
638
+ background-color: var(--danger-color);
639
+ color: white;
640
+ border: 1px solid var(--danger-color);
641
+ }
642
+
643
+ .warning-actions .btn-danger:hover {
644
+ background-color: #c82333;
645
+ border-color: #bd2130;
646
+ }
647
+
648
+ /* Disabled state styles */
649
+ .form-input:disabled,
650
+ .form-select:disabled,
651
+ .form-textarea:disabled {
652
+ background-color: var(--bg-tertiary);
653
+ color: var(--text-muted);
654
+ cursor: not-allowed;
655
+ opacity: 0.6;
656
+ }
657
+
658
+ .btn:disabled {
659
+ background-color: var(--bg-tertiary);
660
+ color: var(--text-muted);
661
+ border-color: var(--border-color);
662
+ cursor: not-allowed;
663
+ opacity: 0.6;
664
+ }
665
+
666
+ .btn:disabled:hover {
667
+ background-color: var(--bg-tertiary);
668
+ color: var(--text-muted);
669
+ border-color: var(--border-color);
670
+ }