vibesurf 0.1.31__py3-none-any.whl → 0.1.33__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 (35) hide show
  1. vibe_surf/_version.py +2 -2
  2. vibe_surf/agents/browser_use_agent.py +1 -1
  3. vibe_surf/agents/prompts/vibe_surf_prompt.py +6 -0
  4. vibe_surf/agents/report_writer_agent.py +50 -0
  5. vibe_surf/agents/vibe_surf_agent.py +56 -1
  6. vibe_surf/backend/api/composio.py +952 -0
  7. vibe_surf/backend/database/migrations/v005_add_composio_integration.sql +33 -0
  8. vibe_surf/backend/database/migrations/v006_add_credentials_table.sql +26 -0
  9. vibe_surf/backend/database/models.py +53 -1
  10. vibe_surf/backend/database/queries.py +312 -2
  11. vibe_surf/backend/main.py +28 -0
  12. vibe_surf/backend/shared_state.py +123 -9
  13. vibe_surf/chrome_extension/scripts/api-client.js +32 -0
  14. vibe_surf/chrome_extension/scripts/settings-manager.js +954 -1
  15. vibe_surf/chrome_extension/sidepanel.html +190 -0
  16. vibe_surf/chrome_extension/styles/settings-integrations.css +927 -0
  17. vibe_surf/chrome_extension/styles/settings-modal.css +7 -3
  18. vibe_surf/chrome_extension/styles/settings-responsive.css +37 -5
  19. vibe_surf/cli.py +98 -3
  20. vibe_surf/telemetry/__init__.py +60 -0
  21. vibe_surf/telemetry/service.py +112 -0
  22. vibe_surf/telemetry/views.py +156 -0
  23. vibe_surf/tools/browser_use_tools.py +90 -90
  24. vibe_surf/tools/composio_client.py +456 -0
  25. vibe_surf/tools/mcp_client.py +21 -2
  26. vibe_surf/tools/vibesurf_tools.py +290 -87
  27. vibe_surf/tools/views.py +16 -0
  28. vibe_surf/tools/website_api/youtube/client.py +35 -13
  29. vibe_surf/utils.py +13 -0
  30. {vibesurf-0.1.31.dist-info → vibesurf-0.1.33.dist-info}/METADATA +11 -9
  31. {vibesurf-0.1.31.dist-info → vibesurf-0.1.33.dist-info}/RECORD +35 -26
  32. {vibesurf-0.1.31.dist-info → vibesurf-0.1.33.dist-info}/WHEEL +0 -0
  33. {vibesurf-0.1.31.dist-info → vibesurf-0.1.33.dist-info}/entry_points.txt +0 -0
  34. {vibesurf-0.1.31.dist-info → vibesurf-0.1.33.dist-info}/licenses/LICENSE +0 -0
  35. {vibesurf-0.1.31.dist-info → vibesurf-0.1.33.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,927 @@
1
+ /* Settings Integrations CSS - Composio toolkit management styling */
2
+
3
+ /* === INTEGRATION STATUS === */
4
+ .status-item {
5
+ display: flex;
6
+ align-items: center;
7
+ gap: var(--spacing-md);
8
+ padding: var(--spacing-lg);
9
+ border: 1px solid var(--border-color);
10
+ border-radius: var(--radius-lg);
11
+ background: var(--bg-secondary);
12
+ margin-bottom: var(--spacing-lg);
13
+ transition: all var(--transition-fast);
14
+ }
15
+
16
+ .status-item.success {
17
+ border-color: rgba(40, 167, 69, 0.3);
18
+ background: rgba(40, 167, 69, 0.05);
19
+ }
20
+
21
+ .status-item.warning {
22
+ border-color: rgba(255, 193, 7, 0.3);
23
+ background: rgba(255, 193, 7, 0.05);
24
+ }
25
+
26
+ .status-item.error {
27
+ border-color: rgba(220, 53, 69, 0.3);
28
+ background: rgba(220, 53, 69, 0.05);
29
+ }
30
+
31
+ .status-item.info {
32
+ border-color: rgba(0, 122, 204, 0.3);
33
+ background: rgba(0, 122, 204, 0.05);
34
+ }
35
+
36
+ .status-icon {
37
+ font-size: 1.5rem;
38
+ width: 32px;
39
+ height: 32px;
40
+ display: flex;
41
+ align-items: center;
42
+ justify-content: center;
43
+ border-radius: 50%;
44
+ flex-shrink: 0;
45
+ }
46
+
47
+ .status-item.success .status-icon {
48
+ background: rgba(40, 167, 69, 0.1);
49
+ color: var(--accent-color);
50
+ }
51
+
52
+ .status-item.warning .status-icon {
53
+ background: rgba(255, 193, 7, 0.1);
54
+ color: var(--warning-color);
55
+ }
56
+
57
+ .status-item.error .status-icon {
58
+ background: rgba(220, 53, 69, 0.1);
59
+ color: var(--danger-color);
60
+ }
61
+
62
+ .status-item.info .status-icon {
63
+ background: rgba(0, 122, 204, 0.1);
64
+ color: var(--primary-color);
65
+ }
66
+
67
+ .loading-spinner {
68
+ animation: spin 1s linear infinite;
69
+ display: inline-block;
70
+ }
71
+
72
+ .status-content {
73
+ flex: 1;
74
+ }
75
+
76
+ .status-title {
77
+ font-size: var(--font-size-md);
78
+ font-weight: var(--font-weight-semibold);
79
+ color: var(--text-primary);
80
+ margin-bottom: var(--spacing-xs);
81
+ }
82
+
83
+ .status-description {
84
+ font-size: var(--font-size-sm);
85
+ color: var(--text-secondary);
86
+ line-height: 1.4;
87
+ }
88
+
89
+ /* === COMPOSIO API KEY MODAL === */
90
+ .composio-api-key-modal .modal-content {
91
+ max-width: 600px;
92
+ }
93
+
94
+ .api-key-help {
95
+ background: var(--bg-tertiary);
96
+ border: 1px solid var(--border-color);
97
+ border-radius: var(--radius-md);
98
+ padding: var(--spacing-md);
99
+ margin-bottom: var(--spacing-lg);
100
+ }
101
+
102
+ .api-key-help h4 {
103
+ font-size: var(--font-size-sm);
104
+ font-weight: var(--font-weight-semibold);
105
+ color: var(--text-primary);
106
+ margin: 0 0 var(--spacing-sm) 0;
107
+ }
108
+
109
+ .api-key-help p {
110
+ font-size: var(--font-size-sm);
111
+ color: var(--text-secondary);
112
+ margin: 0 0 var(--spacing-sm) 0;
113
+ line-height: 1.4;
114
+ }
115
+
116
+ .api-key-help ol {
117
+ font-size: var(--font-size-sm);
118
+ color: var(--text-secondary);
119
+ margin: 0;
120
+ padding-left: var(--spacing-lg);
121
+ }
122
+
123
+ .api-key-help li {
124
+ margin-bottom: var(--spacing-xs);
125
+ line-height: 1.4;
126
+ }
127
+
128
+ .composio-link-btn {
129
+ display: inline-flex;
130
+ align-items: center;
131
+ gap: var(--spacing-xs);
132
+ padding: var(--spacing-sm) var(--spacing-md);
133
+ background: var(--primary-color);
134
+ color: white;
135
+ text-decoration: none;
136
+ border-radius: var(--radius-md);
137
+ font-size: var(--font-size-sm);
138
+ font-weight: var(--font-weight-medium);
139
+ transition: all var(--transition-fast);
140
+ border: none;
141
+ cursor: pointer;
142
+ }
143
+
144
+ .composio-link-btn:hover {
145
+ background: var(--primary-hover);
146
+ transform: translateY(-1px);
147
+ box-shadow: 0 4px 16px rgba(0, 122, 204, 0.3);
148
+ }
149
+
150
+ .validation-message {
151
+ padding: var(--spacing-sm) var(--spacing-md);
152
+ border-radius: var(--radius-md);
153
+ font-size: var(--font-size-sm);
154
+ font-weight: var(--font-weight-medium);
155
+ margin-top: var(--spacing-sm);
156
+ display: flex;
157
+ align-items: center;
158
+ gap: var(--spacing-xs);
159
+ }
160
+
161
+ .validation-message.success {
162
+ background: rgba(40, 167, 69, 0.1);
163
+ color: var(--accent-color);
164
+ border: 1px solid rgba(40, 167, 69, 0.3);
165
+ }
166
+
167
+ .validation-message.error {
168
+ background: rgba(220, 53, 69, 0.1);
169
+ color: var(--danger-color);
170
+ border: 1px solid rgba(220, 53, 69, 0.3);
171
+ }
172
+
173
+ .validation-message.info {
174
+ background: rgba(0, 122, 204, 0.1);
175
+ color: var(--primary-color);
176
+ border: 1px solid rgba(0, 122, 204, 0.3);
177
+ }
178
+
179
+ /* === TOOLKITS SECTION === */
180
+ .toolkits-controls {
181
+ display: flex;
182
+ gap: var(--spacing-md);
183
+ margin-bottom: var(--spacing-lg);
184
+ align-items: center;
185
+ flex-wrap: wrap;
186
+ }
187
+
188
+ .toolkit-search-wrapper {
189
+ flex: 1;
190
+ min-width: 250px;
191
+ position: relative;
192
+ }
193
+
194
+ .toolkit-search-wrapper::before {
195
+ content: '🔍';
196
+ position: absolute;
197
+ left: 12px;
198
+ top: 50%;
199
+ transform: translateY(-50%);
200
+ color: var(--text-muted);
201
+ font-size: var(--font-size-sm);
202
+ pointer-events: none;
203
+ }
204
+
205
+ .toolkit-search {
206
+ width: 100%;
207
+ padding: var(--spacing-sm) var(--spacing-md) var(--spacing-sm) 36px;
208
+ border: 1px solid var(--border-color);
209
+ border-radius: var(--radius-md);
210
+ background: var(--bg-primary);
211
+ font-size: var(--font-size-sm);
212
+ color: var(--text-primary);
213
+ transition: all var(--transition-fast);
214
+ }
215
+
216
+ .toolkit-search:focus {
217
+ outline: none;
218
+ border-color: var(--primary-color);
219
+ box-shadow: 0 0 0 3px rgba(0, 122, 204, 0.1);
220
+ }
221
+
222
+ .toolkit-filter {
223
+ min-width: 150px;
224
+ padding: var(--spacing-sm) var(--spacing-md);
225
+ border: 1px solid var(--border-color);
226
+ border-radius: var(--radius-md);
227
+ background: var(--bg-primary);
228
+ font-size: var(--font-size-sm);
229
+ color: var(--text-primary);
230
+ appearance: none;
231
+ 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");
232
+ background-position: right 8px center;
233
+ background-repeat: no-repeat;
234
+ background-size: 16px;
235
+ padding-right: 32px;
236
+ cursor: pointer;
237
+ }
238
+
239
+ .toolkit-filter:focus {
240
+ outline: none;
241
+ border-color: var(--primary-color);
242
+ box-shadow: 0 0 0 3px rgba(0, 122, 204, 0.1);
243
+ }
244
+
245
+ /* === TOOLKIT CARDS === */
246
+ .toolkits-list {
247
+ display: grid;
248
+ gap: var(--spacing-lg);
249
+ grid-template-columns: repeat(auto-fill, minmax(400px, 1fr));
250
+ }
251
+
252
+ .toolkit-card {
253
+ border: 1px solid var(--border-color);
254
+ border-radius: var(--radius-lg);
255
+ background: var(--bg-primary);
256
+ padding: var(--spacing-lg);
257
+ transition: all var(--transition-fast);
258
+ position: relative;
259
+ overflow: hidden;
260
+ }
261
+
262
+ .toolkit-card:hover {
263
+ border-color: var(--primary-color);
264
+ box-shadow: 0 4px 20px rgba(0, 122, 204, 0.1);
265
+ transform: translateY(-2px);
266
+ }
267
+
268
+ .toolkit-header {
269
+ display: flex;
270
+ align-items: flex-start;
271
+ gap: var(--spacing-md);
272
+ margin-bottom: var(--spacing-md);
273
+ }
274
+
275
+ .toolkit-logo {
276
+ width: 48px;
277
+ height: 48px;
278
+ border-radius: var(--radius-md);
279
+ border: 1px solid var(--border-color);
280
+ overflow: hidden;
281
+ flex-shrink: 0;
282
+ background: var(--bg-secondary);
283
+ display: flex;
284
+ align-items: center;
285
+ justify-content: center;
286
+ }
287
+
288
+ .toolkit-logo img {
289
+ width: 100%;
290
+ height: 100%;
291
+ object-fit: contain;
292
+ }
293
+
294
+ .toolkit-info {
295
+ flex: 1;
296
+ min-width: 0;
297
+ }
298
+
299
+ .toolkit-name {
300
+ font-size: var(--font-size-md);
301
+ font-weight: var(--font-weight-semibold);
302
+ color: var(--text-primary);
303
+ margin: 0 0 var(--spacing-xs) 0;
304
+ line-height: 1.3;
305
+ }
306
+
307
+ .toolkit-description {
308
+ font-size: var(--font-size-sm);
309
+ color: var(--text-secondary);
310
+ line-height: 1.4;
311
+ margin: 0;
312
+ display: -webkit-box;
313
+ -webkit-line-clamp: 2;
314
+ -webkit-box-orient: vertical;
315
+ overflow: hidden;
316
+ }
317
+
318
+ .toolkit-actions {
319
+ display: flex;
320
+ align-items: center;
321
+ margin-left: auto;
322
+ }
323
+
324
+ /* === TOOLKIT TOGGLE SWITCH === */
325
+ .toolkit-toggle {
326
+ position: relative;
327
+ display: inline-block;
328
+ width: 50px;
329
+ height: 28px;
330
+ }
331
+
332
+ .toolkit-toggle input[type="checkbox"] {
333
+ opacity: 0;
334
+ width: 0;
335
+ height: 0;
336
+ position: absolute;
337
+ }
338
+
339
+ .toggle-slider {
340
+ position: absolute;
341
+ cursor: pointer;
342
+ top: 0;
343
+ left: 0;
344
+ right: 0;
345
+ bottom: 0;
346
+ background-color: var(--border-color);
347
+ transition: all 0.3s ease;
348
+ border-radius: 28px;
349
+ border: 2px solid transparent;
350
+ }
351
+
352
+ .toggle-slider:before {
353
+ position: absolute;
354
+ content: "";
355
+ height: 20px;
356
+ width: 20px;
357
+ left: 2px;
358
+ bottom: 2px;
359
+ background-color: white;
360
+ transition: all 0.3s ease;
361
+ border-radius: 50%;
362
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
363
+ }
364
+
365
+ .toolkit-toggle input:checked + .toggle-slider {
366
+ background-color: var(--accent-color);
367
+ border-color: var(--accent-color);
368
+ }
369
+
370
+ .toolkit-toggle input:checked + .toggle-slider:before {
371
+ transform: translateX(22px);
372
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
373
+ }
374
+
375
+ .toolkit-toggle input:disabled + .toggle-slider {
376
+ opacity: 0.5;
377
+ cursor: not-allowed;
378
+ }
379
+
380
+ .toolkit-toggle:hover input:not(:disabled) + .toggle-slider {
381
+ border-color: var(--primary-color);
382
+ }
383
+
384
+ /* === TOOLKIT FOOTER === */
385
+ .toolkit-footer {
386
+ display: flex;
387
+ align-items: center;
388
+ justify-content: space-between;
389
+ gap: var(--spacing-md);
390
+ margin-top: var(--spacing-md);
391
+ padding-top: var(--spacing-md);
392
+ border-top: 1px solid var(--border-color);
393
+ }
394
+
395
+ .toolkit-tools-btn {
396
+ display: flex;
397
+ align-items: center;
398
+ gap: var(--spacing-xs);
399
+ padding: var(--spacing-sm) var(--spacing-md);
400
+ border: 1px solid var(--border-color);
401
+ border-radius: var(--radius-md);
402
+ background: var(--bg-primary);
403
+ color: var(--text-primary);
404
+ font-size: var(--font-size-sm);
405
+ font-weight: var(--font-weight-medium);
406
+ cursor: pointer;
407
+ transition: all var(--transition-fast);
408
+ text-decoration: none;
409
+ }
410
+
411
+ .toolkit-tools-btn:hover:not(:disabled) {
412
+ border-color: var(--primary-color);
413
+ color: var(--primary-color);
414
+ background: rgba(0, 122, 204, 0.05);
415
+ }
416
+
417
+ .toolkit-tools-btn:disabled {
418
+ opacity: 0.5;
419
+ cursor: not-allowed;
420
+ filter: grayscale(100%);
421
+ }
422
+
423
+ .toolkit-tools-btn svg {
424
+ width: 16px;
425
+ height: 16px;
426
+ }
427
+
428
+ .toolkit-status {
429
+ font-size: var(--font-size-xs);
430
+ font-weight: var(--font-weight-medium);
431
+ padding: 4px 8px;
432
+ border-radius: var(--radius-sm);
433
+ text-transform: uppercase;
434
+ letter-spacing: 0.5px;
435
+ }
436
+
437
+ .toolkit-status.connected {
438
+ background: rgba(40, 167, 69, 0.1);
439
+ color: var(--accent-color);
440
+ border: 1px solid rgba(40, 167, 69, 0.3);
441
+ }
442
+
443
+ .toolkit-status.disconnected {
444
+ background: rgba(108, 117, 125, 0.1);
445
+ color: var(--text-secondary);
446
+ border: 1px solid var(--border-color);
447
+ }
448
+
449
+ /* === LOADING STATES === */
450
+ .toolkits-loading,
451
+ .tools-loading {
452
+ display: flex;
453
+ flex-direction: column;
454
+ align-items: center;
455
+ justify-content: center;
456
+ padding: var(--spacing-2xl);
457
+ gap: var(--spacing-md);
458
+ }
459
+
460
+ .loading-spinner-small {
461
+ width: 24px;
462
+ height: 24px;
463
+ border: 2px solid var(--border-color);
464
+ border-top: 2px solid var(--primary-color);
465
+ border-radius: 50%;
466
+ animation: spin 1s linear infinite;
467
+ }
468
+
469
+ .loading-text-small {
470
+ font-size: var(--font-size-sm);
471
+ color: var(--text-secondary);
472
+ font-weight: var(--font-weight-medium);
473
+ }
474
+
475
+ /* === TOOLS MANAGEMENT MODAL === */
476
+ /* Use higher specificity to override base modal styles */
477
+ .modal#tools-management-modal .tools-modal-content {
478
+ width: 80%;
479
+ max-width: none;
480
+ min-width: 320px;
481
+ max-height: 90vh;
482
+ }
483
+
484
+ .tools-modal-header {
485
+ display: flex;
486
+ align-items: center;
487
+ gap: var(--spacing-md);
488
+ margin-bottom: var(--spacing-lg);
489
+ }
490
+
491
+ .tools-toolkit-info {
492
+ display: flex;
493
+ align-items: center;
494
+ gap: var(--spacing-md);
495
+ flex: 1;
496
+ }
497
+
498
+ .tools-toolkit-logo {
499
+ width: 40px;
500
+ height: 40px;
501
+ border-radius: var(--radius-md);
502
+ border: 1px solid var(--border-color);
503
+ overflow: hidden;
504
+ background: var(--bg-secondary);
505
+ display: flex;
506
+ align-items: center;
507
+ justify-content: center;
508
+ }
509
+
510
+ .tools-toolkit-logo img {
511
+ width: 100%;
512
+ height: 100%;
513
+ object-fit: contain;
514
+ }
515
+
516
+ .tools-toolkit-details h3 {
517
+ font-size: var(--font-size-lg);
518
+ font-weight: var(--font-weight-semibold);
519
+ color: var(--text-primary);
520
+ margin: 0 0 var(--spacing-xs) 0;
521
+ }
522
+
523
+ .tools-toolkit-details p {
524
+ font-size: var(--font-size-sm);
525
+ color: var(--text-secondary);
526
+ margin: 0;
527
+ line-height: 1.4;
528
+ }
529
+
530
+ /* === TOOLS HEADER === */
531
+ .tools-header {
532
+ display: flex;
533
+ flex-direction: column;
534
+ align-items: center;
535
+ text-align: center;
536
+ padding: var(--spacing-lg) 0;
537
+ border-bottom: 1px solid var(--border-color);
538
+ margin-bottom: var(--spacing-lg);
539
+ }
540
+
541
+ .toolkit-info {
542
+ display: flex;
543
+ flex-direction: column;
544
+ align-items: center;
545
+ gap: var(--spacing-md);
546
+ text-align: center;
547
+ margin: 0 auto;
548
+ }
549
+
550
+ .toolkit-details h4 {
551
+ margin: 0;
552
+ font-size: var(--font-size-lg);
553
+ font-weight: var(--font-weight-semibold);
554
+ color: var(--text-primary);
555
+ text-align: center;
556
+ }
557
+
558
+ /* Ensure logo and name are perfectly centered */
559
+ .tools-modal-content .tools-header .toolkit-info {
560
+ display: flex;
561
+ flex-direction: column;
562
+ align-items: center;
563
+ justify-content: center;
564
+ text-align: center;
565
+ width: 100%;
566
+ }
567
+
568
+ .tools-modal-content .tools-header .toolkit-logo {
569
+ margin: 0 auto;
570
+ }
571
+
572
+ .tools-modal-content .tools-header .toolkit-details {
573
+ text-align: center;
574
+ width: 100%;
575
+ }
576
+
577
+ /* === TOOLS SELECTION CONTROLS === */
578
+ .tools-selection-controls {
579
+ display: flex;
580
+ justify-content: center;
581
+ gap: var(--spacing-sm);
582
+ margin-bottom: var(--spacing-lg);
583
+ padding: var(--spacing-md) 0;
584
+ border-bottom: 1px solid var(--border-color);
585
+ }
586
+
587
+ /* === TOOLS TABLE === */
588
+ .tools-table {
589
+ border: 1px solid var(--border-color);
590
+ border-radius: var(--radius-lg);
591
+ overflow: hidden;
592
+ background: var(--bg-primary);
593
+ margin-bottom: var(--spacing-lg);
594
+ }
595
+
596
+ .tools-header {
597
+ display: grid;
598
+ grid-template-columns: 8% 35% 57%;
599
+ gap: var(--spacing-sm);
600
+ padding: var(--spacing-sm) var(--spacing-md);
601
+ background: var(--bg-secondary);
602
+ border-bottom: 1px solid var(--border-color);
603
+ font-weight: var(--font-weight-semibold);
604
+ font-size: var(--font-size-sm);
605
+ color: var(--text-primary);
606
+ min-width: 0; /* Allow grid items to shrink */
607
+ }
608
+
609
+ .tools-body {
610
+ max-height: 400px;
611
+ overflow-y: auto;
612
+ min-width: 0; /* Allow grid container to shrink */
613
+ }
614
+
615
+ .tool-row {
616
+ display: grid;
617
+ grid-template-columns: 8% 35% 57%;
618
+ gap: var(--spacing-sm);
619
+ padding: var(--spacing-sm) var(--spacing-md);
620
+ border-bottom: 1px solid var(--border-color);
621
+ transition: background-color var(--transition-fast);
622
+ min-width: 0; /* Allow grid items to shrink */
623
+ }
624
+
625
+ .tool-row:last-child {
626
+ border-bottom: none;
627
+ }
628
+
629
+ .tool-row:hover {
630
+ background: var(--bg-hover);
631
+ }
632
+
633
+ .tool-cell {
634
+ display: flex;
635
+ align-items: center;
636
+ font-size: var(--font-size-sm);
637
+ color: var(--text-primary);
638
+ line-height: 1.4;
639
+ min-width: 0; /* Allow content to wrap/overflow properly */
640
+ }
641
+
642
+ .tool-cell.tool-checkbox {
643
+ justify-content: center;
644
+ flex-shrink: 0;
645
+ }
646
+
647
+ .tool-cell.tool-name {
648
+ font-weight: var(--font-weight-medium);
649
+ font-size: var(--font-size-sm);
650
+ overflow: hidden;
651
+ text-overflow: ellipsis;
652
+ white-space: nowrap;
653
+ }
654
+
655
+ .tool-cell.tool-description {
656
+ color: var(--text-secondary);
657
+ font-size: var(--font-size-sm);
658
+ overflow: hidden;
659
+ text-overflow: ellipsis;
660
+ display: -webkit-box;
661
+ -webkit-line-clamp: 2;
662
+ -webkit-box-orient: vertical;
663
+ white-space: normal;
664
+ line-height: 1.4;
665
+ max-height: 2.8em;
666
+ }
667
+
668
+ .tool-checkbox-input {
669
+ width: 16px;
670
+ height: 16px;
671
+ border: 1px solid var(--border-color);
672
+ border-radius: var(--radius-sm);
673
+ cursor: pointer;
674
+ accent-color: var(--primary-color);
675
+ }
676
+
677
+ /* === TOOLS ACTIONS === */
678
+ .tools-selection-actions {
679
+ display: flex;
680
+ gap: var(--spacing-sm);
681
+ margin-bottom: var(--spacing-lg);
682
+ justify-content: flex-start;
683
+ }
684
+
685
+ .tools-selection-btn {
686
+ padding: var(--spacing-xs) var(--spacing-sm);
687
+ border: 1px solid var(--border-color);
688
+ border-radius: var(--radius-sm);
689
+ background: var(--bg-primary);
690
+ color: var(--text-secondary);
691
+ font-size: var(--font-size-xs);
692
+ font-weight: var(--font-weight-medium);
693
+ cursor: pointer;
694
+ transition: all var(--transition-fast);
695
+ }
696
+
697
+ .tools-selection-btn:hover {
698
+ border-color: var(--primary-color);
699
+ color: var(--primary-color);
700
+ background: rgba(0, 122, 204, 0.05);
701
+ }
702
+
703
+ /* === OAUTH CONFIRMATION MODAL === */
704
+ .oauth-confirmation-modal .modal-content {
705
+ max-width: 500px;
706
+ }
707
+
708
+ .oauth-instructions {
709
+ background: var(--bg-tertiary);
710
+ border: 1px solid var(--border-color);
711
+ border-radius: var(--radius-md);
712
+ padding: var(--spacing-lg);
713
+ margin-bottom: var(--spacing-lg);
714
+ text-align: center;
715
+ }
716
+
717
+ .oauth-instructions h4 {
718
+ font-size: var(--font-size-md);
719
+ font-weight: var(--font-weight-semibold);
720
+ color: var(--text-primary);
721
+ margin: 0 0 var(--spacing-sm) 0;
722
+ }
723
+
724
+ .oauth-instructions p {
725
+ font-size: var(--font-size-sm);
726
+ color: var(--text-secondary);
727
+ margin: 0;
728
+ line-height: 1.4;
729
+ }
730
+
731
+ .oauth-actions {
732
+ display: flex;
733
+ gap: var(--spacing-sm);
734
+ justify-content: center;
735
+ }
736
+
737
+ /* === RESPONSIVE DESIGN === */
738
+ @media (max-width: 768px) {
739
+ .toolkits-list {
740
+ grid-template-columns: 1fr;
741
+ }
742
+
743
+ .toolkits-controls {
744
+ flex-direction: column;
745
+ align-items: stretch;
746
+ }
747
+
748
+ .toolkit-search-wrapper {
749
+ min-width: auto;
750
+ }
751
+
752
+ .toolkit-header {
753
+ flex-direction: column;
754
+ align-items: flex-start;
755
+ gap: var(--spacing-sm);
756
+ }
757
+
758
+ .toolkit-actions {
759
+ margin-left: 0;
760
+ margin-top: var(--spacing-sm);
761
+ }
762
+
763
+ .toolkit-footer {
764
+ flex-direction: column;
765
+ align-items: stretch;
766
+ gap: var(--spacing-sm);
767
+ }
768
+
769
+ .tools-selection-controls {
770
+ flex-direction: column;
771
+ align-items: center;
772
+ gap: var(--spacing-xs);
773
+ }
774
+
775
+ .tools-selection-actions {
776
+ flex-wrap: wrap;
777
+ }
778
+ }
779
+
780
+ /* Side panel responsive design - optimized for narrow containers */
781
+ @media (max-width: 500px) {
782
+ .modal#tools-management-modal .tools-modal-content {
783
+ width: 98%;
784
+ min-width: 300px;
785
+ margin: var(--spacing-xs);
786
+ }
787
+
788
+ .tools-header,
789
+ .tool-row {
790
+ grid-template-columns: 10% 40% 50%;
791
+ gap: var(--spacing-xs);
792
+ padding: var(--spacing-xs) var(--spacing-sm);
793
+ }
794
+
795
+ .tool-cell {
796
+ font-size: var(--font-size-xs);
797
+ }
798
+
799
+ .tool-cell.tool-name,
800
+ .tool-cell.tool-description {
801
+ font-size: var(--font-size-xs);
802
+ line-height: 1.3;
803
+ max-height: 2.6em;
804
+ }
805
+ }
806
+
807
+ /* Very small screens and narrow side panels - hide description */
808
+ @media (max-width: 350px) {
809
+ .modal#tools-management-modal .tools-modal-content {
810
+ width: 100%;
811
+ min-width: 280px;
812
+ margin: 0;
813
+ border-radius: 0;
814
+ }
815
+
816
+ .tools-header,
817
+ .tool-row {
818
+ grid-template-columns: 12% 88%;
819
+ gap: var(--spacing-xs);
820
+ padding: var(--spacing-xs);
821
+ }
822
+
823
+ .tool-cell.tool-description {
824
+ display: none;
825
+ }
826
+
827
+ .tool-cell {
828
+ font-size: var(--font-size-xs);
829
+ }
830
+ }
831
+
832
+ /* Medium screens - keep original responsive design */
833
+ @media (max-width: 768px) {
834
+ .modal#tools-management-modal .tools-modal-content {
835
+ width: 95%;
836
+ min-width: 320px;
837
+ }
838
+ }
839
+
840
+ @media (max-width: 480px) {
841
+ .status-item {
842
+ flex-direction: column;
843
+ text-align: center;
844
+ gap: var(--spacing-sm);
845
+ }
846
+
847
+ .toolkit-card {
848
+ padding: var(--spacing-md);
849
+ }
850
+
851
+ .toolkit-logo {
852
+ width: 40px;
853
+ height: 40px;
854
+ }
855
+
856
+ .modal#tools-management-modal .tools-modal-content {
857
+ width: 95vw;
858
+ min-width: auto;
859
+ margin: var(--spacing-sm);
860
+ }
861
+ }
862
+
863
+ /* === ANIMATIONS === */
864
+ @keyframes fadeInUp {
865
+ from {
866
+ opacity: 0;
867
+ transform: translateY(20px);
868
+ }
869
+ to {
870
+ opacity: 1;
871
+ transform: translateY(0);
872
+ }
873
+ }
874
+
875
+ .toolkit-card {
876
+ animation: fadeInUp 0.3s ease-out;
877
+ }
878
+
879
+ .toolkit-card:nth-child(1) { animation-delay: 0ms; }
880
+ .toolkit-card:nth-child(2) { animation-delay: 50ms; }
881
+ .toolkit-card:nth-child(3) { animation-delay: 100ms; }
882
+ .toolkit-card:nth-child(4) { animation-delay: 150ms; }
883
+ .toolkit-card:nth-child(5) { animation-delay: 200ms; }
884
+ .toolkit-card:nth-child(6) { animation-delay: 250ms; }
885
+
886
+ /* === UTILITY CLASSES === */
887
+ .readonly-input {
888
+ background-color: var(--bg-tertiary) !important;
889
+ color: var(--text-muted) !important;
890
+ cursor: not-allowed !important;
891
+ opacity: 0.7;
892
+ }
893
+
894
+ .readonly-input:focus {
895
+ border-color: var(--border-color) !important;
896
+ box-shadow: none !important;
897
+ }
898
+
899
+ /* === HIGH CONTRAST MODE SUPPORT === */
900
+ @media (prefers-contrast: high) {
901
+ .toolkit-card {
902
+ border-width: 2px;
903
+ }
904
+
905
+ .toolkit-toggle input:checked + .toggle-slider {
906
+ background-color: var(--text-primary);
907
+ }
908
+
909
+ .validation-message {
910
+ border-width: 2px;
911
+ }
912
+ }
913
+
914
+ /* === REDUCED MOTION SUPPORT === */
915
+ @media (prefers-reduced-motion: reduce) {
916
+ .toolkit-card,
917
+ .toolkit-tools-btn,
918
+ .toggle-slider,
919
+ .toggle-slider:before {
920
+ transition: none;
921
+ animation: none;
922
+ }
923
+
924
+ .toolkit-card:hover {
925
+ transform: none;
926
+ }
927
+ }