averecion-lite 1.3.0

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 (50) hide show
  1. package/README.md +161 -0
  2. package/dashboard/dash.css +1085 -0
  3. package/dashboard/dash.js +898 -0
  4. package/dashboard/index.html +312 -0
  5. package/dashboard/landing.html +360 -0
  6. package/dist/cli.d.ts +3 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +409 -0
  9. package/dist/hooks.d.ts +25 -0
  10. package/dist/hooks.d.ts.map +1 -0
  11. package/dist/hooks.js +68 -0
  12. package/dist/index.d.ts +34 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +64 -0
  15. package/dist/injectionGuard.d.ts +9 -0
  16. package/dist/injectionGuard.d.ts.map +1 -0
  17. package/dist/injectionGuard.js +16 -0
  18. package/dist/log-watcher.d.ts +26 -0
  19. package/dist/log-watcher.d.ts.map +1 -0
  20. package/dist/log-watcher.js +397 -0
  21. package/dist/metrics.d.ts +53 -0
  22. package/dist/metrics.d.ts.map +1 -0
  23. package/dist/metrics.js +58 -0
  24. package/dist/policy.d.ts +11 -0
  25. package/dist/policy.d.ts.map +1 -0
  26. package/dist/policy.js +60 -0
  27. package/dist/server.d.ts +3 -0
  28. package/dist/server.d.ts.map +1 -0
  29. package/dist/server.js +226 -0
  30. package/dist/src/capability-manifest.d.ts +16 -0
  31. package/dist/src/capability-manifest.d.ts.map +1 -0
  32. package/dist/src/capability-manifest.js +228 -0
  33. package/dist/src/http-proxy.d.ts +4 -0
  34. package/dist/src/http-proxy.d.ts.map +1 -0
  35. package/dist/src/http-proxy.js +266 -0
  36. package/dist/src/risk-engine.d.ts +43 -0
  37. package/dist/src/risk-engine.d.ts.map +1 -0
  38. package/dist/src/risk-engine.js +258 -0
  39. package/dist/src/shell-wrapper.d.ts +3 -0
  40. package/dist/src/shell-wrapper.d.ts.map +1 -0
  41. package/dist/src/shell-wrapper.js +264 -0
  42. package/dist/storage.d.ts +28 -0
  43. package/dist/storage.d.ts.map +1 -0
  44. package/dist/storage.js +144 -0
  45. package/examples/INTEGRATION.md +162 -0
  46. package/examples/claude-desktop-agent.json +32 -0
  47. package/examples/clawdbot-agent.json +44 -0
  48. package/examples/custom-agent.json +20 -0
  49. package/lite-policy.json +5 -0
  50. package/package.json +56 -0
@@ -0,0 +1,1085 @@
1
+ :root {
2
+ --bg-dark: #0a0a12;
3
+ --bg-card: #12121f;
4
+ --bg-card-hover: #1a1a2f;
5
+ --text-primary: #ffffff;
6
+ --text-secondary: #a0a0b0;
7
+ --text-muted: #606070;
8
+ --accent: #ff4444;
9
+ --accent-glow: rgba(255, 68, 68, 0.3);
10
+ --success: #22c55e;
11
+ --warning: #f59e0b;
12
+ --danger: #ef4444;
13
+ --border: rgba(255, 255, 255, 0.08);
14
+ }
15
+
16
+ * {
17
+ box-sizing: border-box;
18
+ margin: 0;
19
+ padding: 0;
20
+ }
21
+
22
+ body {
23
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
24
+ background: var(--bg-dark);
25
+ color: var(--text-primary);
26
+ min-height: 100vh;
27
+ line-height: 1.6;
28
+ }
29
+
30
+ .stars {
31
+ position: fixed;
32
+ top: 0;
33
+ left: 0;
34
+ width: 100%;
35
+ height: 100%;
36
+ pointer-events: none;
37
+ background:
38
+ radial-gradient(1px 1px at 20% 30%, rgba(255,255,255,0.3) 0%, transparent 100%),
39
+ radial-gradient(1px 1px at 40% 70%, rgba(255,255,255,0.2) 0%, transparent 100%),
40
+ radial-gradient(1px 1px at 50% 160%, rgba(255,255,255,0.3) 0%, transparent 100%),
41
+ radial-gradient(2px 2px at 90% 40%, rgba(255,255,255,0.4) 0%, transparent 100%),
42
+ radial-gradient(1px 1px at 70% 90%, rgba(255,255,255,0.2) 0%, transparent 100%),
43
+ radial-gradient(1px 1px at 80% 10%, rgba(255,255,255,0.3) 0%, transparent 100%);
44
+ background-size: 200px 200px;
45
+ animation: stars 20s linear infinite;
46
+ z-index: 0;
47
+ }
48
+
49
+ @keyframes stars {
50
+ from { transform: translateY(0); }
51
+ to { transform: translateY(-200px); }
52
+ }
53
+
54
+ #app {
55
+ position: relative;
56
+ z-index: 1;
57
+ }
58
+
59
+ .screen {
60
+ min-height: 100vh;
61
+ padding: 2rem;
62
+ }
63
+
64
+ .screen.hidden {
65
+ display: none;
66
+ }
67
+
68
+ .hero {
69
+ text-align: center;
70
+ padding: 3rem 1rem;
71
+ }
72
+
73
+ .mascot {
74
+ font-size: 4rem;
75
+ margin-bottom: 1rem;
76
+ animation: bounce 2s ease-in-out infinite;
77
+ }
78
+
79
+ @keyframes bounce {
80
+ 0%, 100% { transform: translateY(0); }
81
+ 50% { transform: translateY(-10px); }
82
+ }
83
+
84
+ .hero h1 {
85
+ font-size: 2.5rem;
86
+ font-weight: 700;
87
+ margin-bottom: 0.5rem;
88
+ }
89
+
90
+ .highlight {
91
+ color: var(--accent);
92
+ }
93
+
94
+ .tagline {
95
+ color: var(--text-secondary);
96
+ font-size: 1.1rem;
97
+ }
98
+
99
+ .wizard {
100
+ max-width: 500px;
101
+ margin: 2rem auto;
102
+ }
103
+
104
+ .steps {
105
+ display: flex;
106
+ align-items: center;
107
+ justify-content: center;
108
+ gap: 0.5rem;
109
+ margin-bottom: 2rem;
110
+ }
111
+
112
+ .step {
113
+ display: flex;
114
+ align-items: center;
115
+ gap: 0.5rem;
116
+ color: var(--text-muted);
117
+ }
118
+
119
+ .step.active {
120
+ color: var(--accent);
121
+ }
122
+
123
+ .step.done {
124
+ color: var(--success);
125
+ }
126
+
127
+ .step-num {
128
+ width: 28px;
129
+ height: 28px;
130
+ border-radius: 50%;
131
+ background: var(--bg-card);
132
+ border: 2px solid currentColor;
133
+ display: flex;
134
+ align-items: center;
135
+ justify-content: center;
136
+ font-size: 0.85rem;
137
+ font-weight: 600;
138
+ }
139
+
140
+ .step.active .step-num {
141
+ background: var(--accent);
142
+ border-color: var(--accent);
143
+ color: white;
144
+ }
145
+
146
+ .step.done .step-num {
147
+ background: var(--success);
148
+ border-color: var(--success);
149
+ color: white;
150
+ }
151
+
152
+ .step-line {
153
+ width: 40px;
154
+ height: 2px;
155
+ background: var(--border);
156
+ }
157
+
158
+ .wizard-panel {
159
+ display: none;
160
+ background: var(--bg-card);
161
+ border-radius: 16px;
162
+ padding: 2rem;
163
+ border: 1px solid var(--border);
164
+ }
165
+
166
+ .wizard-panel.active {
167
+ display: block;
168
+ animation: fadeIn 0.3s ease;
169
+ }
170
+
171
+ @keyframes fadeIn {
172
+ from { opacity: 0; transform: translateY(10px); }
173
+ to { opacity: 1; transform: translateY(0); }
174
+ }
175
+
176
+ .wizard-panel h2 {
177
+ font-size: 1.5rem;
178
+ margin-bottom: 0.5rem;
179
+ }
180
+
181
+ .wizard-panel p {
182
+ color: var(--text-secondary);
183
+ margin-bottom: 1.5rem;
184
+ }
185
+
186
+ .input-group {
187
+ display: flex;
188
+ gap: 0.5rem;
189
+ }
190
+
191
+ .input-group input {
192
+ flex: 1;
193
+ padding: 0.75rem 1rem;
194
+ border-radius: 8px;
195
+ border: 1px solid var(--border);
196
+ background: var(--bg-dark);
197
+ color: var(--text-primary);
198
+ font-size: 1rem;
199
+ }
200
+
201
+ .input-group input:focus {
202
+ outline: none;
203
+ border-color: var(--accent);
204
+ box-shadow: 0 0 0 3px var(--accent-glow);
205
+ }
206
+
207
+ .btn-primary {
208
+ padding: 0.75rem 1.5rem;
209
+ border-radius: 8px;
210
+ border: none;
211
+ background: var(--accent);
212
+ color: white;
213
+ font-size: 1rem;
214
+ font-weight: 600;
215
+ cursor: pointer;
216
+ transition: transform 0.2s, box-shadow 0.2s;
217
+ }
218
+
219
+ .btn-primary:hover {
220
+ transform: translateY(-2px);
221
+ box-shadow: 0 4px 20px var(--accent-glow);
222
+ }
223
+
224
+ .hint {
225
+ margin-top: 1rem;
226
+ font-size: 0.85rem;
227
+ color: var(--text-muted);
228
+ }
229
+
230
+ .protection-levels {
231
+ display: grid;
232
+ gap: 1rem;
233
+ margin-bottom: 1.5rem;
234
+ }
235
+
236
+ .level-card {
237
+ display: block;
238
+ cursor: pointer;
239
+ }
240
+
241
+ .level-card input {
242
+ display: none;
243
+ }
244
+
245
+ .level-content {
246
+ display: flex;
247
+ align-items: center;
248
+ gap: 1rem;
249
+ padding: 1rem;
250
+ border-radius: 12px;
251
+ border: 2px solid var(--border);
252
+ background: var(--bg-dark);
253
+ transition: border-color 0.2s, background 0.2s;
254
+ }
255
+
256
+ .level-card:hover .level-content {
257
+ background: var(--bg-card-hover);
258
+ }
259
+
260
+ .level-card input:checked + .level-content {
261
+ border-color: var(--accent);
262
+ background: rgba(255, 68, 68, 0.1);
263
+ }
264
+
265
+ .level-emoji {
266
+ font-size: 2rem;
267
+ }
268
+
269
+ .level-name {
270
+ font-weight: 600;
271
+ font-size: 1.1rem;
272
+ }
273
+
274
+ .level-desc {
275
+ color: var(--text-secondary);
276
+ font-size: 0.9rem;
277
+ }
278
+
279
+ .summary-card {
280
+ background: var(--bg-dark);
281
+ border-radius: 12px;
282
+ padding: 1.5rem;
283
+ margin-bottom: 1.5rem;
284
+ }
285
+
286
+ .summary-item {
287
+ padding: 0.5rem 0;
288
+ color: var(--success);
289
+ display: flex;
290
+ align-items: center;
291
+ gap: 0.5rem;
292
+ }
293
+
294
+ .dash-header {
295
+ display: flex;
296
+ justify-content: space-between;
297
+ align-items: center;
298
+ padding: 1rem 2rem;
299
+ background: var(--bg-card);
300
+ border-bottom: 1px solid var(--border);
301
+ }
302
+
303
+ .logo {
304
+ display: flex;
305
+ align-items: center;
306
+ gap: 0.75rem;
307
+ }
308
+
309
+ .logo-text {
310
+ display: flex;
311
+ flex-direction: column;
312
+ line-height: 1.2;
313
+ }
314
+
315
+ .logo-name {
316
+ font-weight: 700;
317
+ font-size: 1.25rem;
318
+ color: var(--accent);
319
+ }
320
+
321
+ .logo-tagline {
322
+ font-size: 0.7rem;
323
+ color: var(--text-muted);
324
+ }
325
+
326
+ .mascot-small {
327
+ font-size: 1.5rem;
328
+ }
329
+
330
+ .status-badge {
331
+ padding: 0.5rem 1rem;
332
+ border-radius: 20px;
333
+ font-size: 0.9rem;
334
+ font-weight: 600;
335
+ }
336
+
337
+ .status-badge.protected {
338
+ background: rgba(34, 197, 94, 0.2);
339
+ color: var(--success);
340
+ }
341
+
342
+ .status-badge.warning {
343
+ background: rgba(245, 158, 11, 0.2);
344
+ color: var(--warning);
345
+ }
346
+
347
+ .dash-main {
348
+ max-width: 800px;
349
+ margin: 0 auto;
350
+ padding: 2rem;
351
+ }
352
+
353
+ .dash-main section {
354
+ margin-bottom: 2rem;
355
+ }
356
+
357
+ .dash-main h2 {
358
+ font-size: 1.25rem;
359
+ margin-bottom: 1rem;
360
+ color: var(--text-secondary);
361
+ }
362
+
363
+ .bot-card {
364
+ display: flex;
365
+ align-items: center;
366
+ gap: 1.5rem;
367
+ background: var(--bg-card);
368
+ border-radius: 16px;
369
+ padding: 1.5rem;
370
+ border: 1px solid var(--border);
371
+ }
372
+
373
+ .bot-avatar {
374
+ font-size: 3rem;
375
+ }
376
+
377
+ .bot-info {
378
+ flex: 1;
379
+ }
380
+
381
+ .bot-name {
382
+ font-size: 1.5rem;
383
+ font-weight: 700;
384
+ }
385
+
386
+ .bot-status {
387
+ font-size: 0.9rem;
388
+ color: var(--text-secondary);
389
+ }
390
+
391
+ .bot-status.online {
392
+ color: var(--success);
393
+ }
394
+
395
+ .bot-stats {
396
+ display: flex;
397
+ gap: 2rem;
398
+ }
399
+
400
+ .stat {
401
+ text-align: center;
402
+ }
403
+
404
+ .stat-value {
405
+ font-size: 1.75rem;
406
+ font-weight: 700;
407
+ display: block;
408
+ }
409
+
410
+ .stat-value.warning {
411
+ color: var(--warning);
412
+ }
413
+
414
+ .stat-label {
415
+ font-size: 0.8rem;
416
+ color: var(--text-muted);
417
+ }
418
+
419
+ .safety-grid {
420
+ display: grid;
421
+ gap: 0.75rem;
422
+ }
423
+
424
+ .safety-item {
425
+ display: flex;
426
+ align-items: center;
427
+ gap: 0.75rem;
428
+ padding: 1rem;
429
+ background: var(--bg-card);
430
+ border-radius: 12px;
431
+ border: 1px solid var(--border);
432
+ }
433
+
434
+ .safety-item.pass {
435
+ border-color: rgba(34, 197, 94, 0.3);
436
+ }
437
+
438
+ .safety-item.fail {
439
+ border-color: rgba(239, 68, 68, 0.3);
440
+ }
441
+
442
+ .check-icon {
443
+ width: 24px;
444
+ height: 24px;
445
+ border-radius: 50%;
446
+ display: flex;
447
+ align-items: center;
448
+ justify-content: center;
449
+ font-size: 0.8rem;
450
+ }
451
+
452
+ .safety-item.pass .check-icon {
453
+ background: var(--success);
454
+ }
455
+
456
+ .safety-item.fail .check-icon {
457
+ background: var(--danger);
458
+ }
459
+
460
+ .activity-list {
461
+ background: var(--bg-card);
462
+ border-radius: 16px;
463
+ border: 1px solid var(--border);
464
+ overflow: hidden;
465
+ }
466
+
467
+ .activity-empty {
468
+ padding: 2rem;
469
+ text-align: center;
470
+ color: var(--text-muted);
471
+ }
472
+
473
+ .activity-item {
474
+ display: flex;
475
+ align-items: center;
476
+ gap: 1rem;
477
+ padding: 1rem 1.5rem;
478
+ border-bottom: 1px solid var(--border);
479
+ }
480
+
481
+ .activity-item:last-child {
482
+ border-bottom: none;
483
+ }
484
+
485
+ .activity-icon {
486
+ width: 32px;
487
+ height: 32px;
488
+ border-radius: 8px;
489
+ display: flex;
490
+ align-items: center;
491
+ justify-content: center;
492
+ font-size: 1rem;
493
+ }
494
+
495
+ .activity-icon.approved {
496
+ background: rgba(34, 197, 94, 0.2);
497
+ }
498
+
499
+ .activity-icon.blocked {
500
+ background: rgba(239, 68, 68, 0.2);
501
+ }
502
+
503
+ .activity-icon.manual {
504
+ background: rgba(245, 158, 11, 0.2);
505
+ }
506
+
507
+ .activity-content {
508
+ flex: 1;
509
+ }
510
+
511
+ .activity-text {
512
+ font-weight: 500;
513
+ }
514
+
515
+ .activity-time {
516
+ font-size: 0.8rem;
517
+ color: var(--text-muted);
518
+ }
519
+
520
+ .chart-container {
521
+ background: var(--bg-card);
522
+ border-radius: 16px;
523
+ padding: 1.5rem;
524
+ border: 1px solid var(--border);
525
+ }
526
+
527
+ .legend-section {
528
+ margin-bottom: 1.5rem;
529
+ }
530
+
531
+ .legend {
532
+ display: flex;
533
+ flex-wrap: wrap;
534
+ gap: 1.5rem;
535
+ justify-content: center;
536
+ padding: 1rem;
537
+ background: var(--bg-card);
538
+ border-radius: 12px;
539
+ border: 1px solid var(--border);
540
+ }
541
+
542
+ .legend-item {
543
+ display: flex;
544
+ align-items: center;
545
+ gap: 0.5rem;
546
+ font-size: 0.85rem;
547
+ color: var(--text-secondary);
548
+ }
549
+
550
+ .legend-dot {
551
+ width: 12px;
552
+ height: 12px;
553
+ border-radius: 50%;
554
+ }
555
+
556
+ .legend-dot.safe { background: var(--success); }
557
+ .legend-dot.manual { background: var(--warning); }
558
+ .legend-dot.blocked { background: var(--danger); }
559
+ .legend-dot.attack { background: #9333ea; }
560
+
561
+ .legend-help {
562
+ width: 16px;
563
+ height: 16px;
564
+ border-radius: 50%;
565
+ background: var(--text-muted);
566
+ color: var(--bg-dark);
567
+ font-size: 0.7rem;
568
+ display: flex;
569
+ align-items: center;
570
+ justify-content: center;
571
+ cursor: help;
572
+ }
573
+
574
+ .protection-section {
575
+ margin-bottom: 1.5rem;
576
+ }
577
+
578
+ .protection-score {
579
+ background: var(--bg-card);
580
+ border-radius: 16px;
581
+ padding: 1.5rem;
582
+ border: 1px solid var(--border);
583
+ }
584
+
585
+ .score-header {
586
+ display: flex;
587
+ align-items: center;
588
+ gap: 1rem;
589
+ margin-bottom: 1rem;
590
+ }
591
+
592
+ .score-value {
593
+ font-size: 2rem;
594
+ font-weight: 700;
595
+ color: var(--success);
596
+ }
597
+
598
+ .score-label {
599
+ color: var(--text-secondary);
600
+ font-size: 1rem;
601
+ }
602
+
603
+ .score-bars {
604
+ display: grid;
605
+ grid-template-columns: repeat(4, 1fr);
606
+ gap: 0.75rem;
607
+ }
608
+
609
+ .score-bar {
610
+ display: flex;
611
+ flex-direction: column;
612
+ align-items: center;
613
+ gap: 0.5rem;
614
+ padding: 1rem 0.5rem;
615
+ background: var(--bg-dark);
616
+ border-radius: 12px;
617
+ border: 2px solid var(--border);
618
+ cursor: help;
619
+ transition: border-color 0.2s, transform 0.2s;
620
+ }
621
+
622
+ .score-bar.active {
623
+ border-color: var(--success);
624
+ }
625
+
626
+ .score-bar.inactive {
627
+ border-color: var(--danger);
628
+ opacity: 0.6;
629
+ }
630
+
631
+ .score-bar:hover {
632
+ transform: translateY(-2px);
633
+ }
634
+
635
+ .bar-icon {
636
+ font-size: 1.5rem;
637
+ }
638
+
639
+ .bar-label {
640
+ font-size: 0.75rem;
641
+ color: var(--text-secondary);
642
+ text-align: center;
643
+ }
644
+
645
+ .activity-item.has-context {
646
+ flex-direction: column;
647
+ align-items: flex-start;
648
+ }
649
+
650
+ .activity-header {
651
+ display: flex;
652
+ align-items: center;
653
+ gap: 1rem;
654
+ width: 100%;
655
+ }
656
+
657
+ .activity-context {
658
+ margin-top: 0.75rem;
659
+ padding: 0.75rem 1rem;
660
+ background: var(--bg-dark);
661
+ border-radius: 8px;
662
+ border-left: 3px solid var(--danger);
663
+ width: 100%;
664
+ }
665
+
666
+ .activity-context.attack {
667
+ border-left-color: #9333ea;
668
+ }
669
+
670
+ .activity-context-title {
671
+ font-weight: 600;
672
+ font-size: 0.85rem;
673
+ margin-bottom: 0.25rem;
674
+ }
675
+
676
+ .activity-context-desc {
677
+ font-size: 0.8rem;
678
+ color: var(--text-secondary);
679
+ }
680
+
681
+ .tooltip {
682
+ position: fixed;
683
+ background: var(--bg-card);
684
+ border: 1px solid var(--border);
685
+ border-radius: 8px;
686
+ padding: 0.75rem 1rem;
687
+ font-size: 0.85rem;
688
+ color: var(--text-primary);
689
+ max-width: 250px;
690
+ pointer-events: none;
691
+ opacity: 0;
692
+ transition: opacity 0.2s;
693
+ z-index: 1000;
694
+ box-shadow: 0 4px 20px rgba(0,0,0,0.3);
695
+ }
696
+
697
+ .tooltip.visible {
698
+ opacity: 1;
699
+ }
700
+
701
+ .dash-footer {
702
+ text-align: center;
703
+ padding: 2rem;
704
+ color: var(--text-muted);
705
+ }
706
+
707
+ .footer-links {
708
+ display: flex;
709
+ flex-wrap: wrap;
710
+ justify-content: center;
711
+ gap: 0.5rem;
712
+ margin-bottom: 1rem;
713
+ }
714
+
715
+ .footer-divider {
716
+ color: var(--text-muted);
717
+ }
718
+
719
+ .dash-footer a {
720
+ color: var(--accent);
721
+ text-decoration: none;
722
+ }
723
+
724
+ .dash-footer a:hover {
725
+ text-decoration: underline;
726
+ }
727
+
728
+ .footer-note {
729
+ font-size: 0.8rem;
730
+ max-width: 500px;
731
+ margin: 0 auto;
732
+ }
733
+
734
+ .control-section {
735
+ margin-bottom: 2rem;
736
+ }
737
+
738
+ .protection-toggle {
739
+ display: flex;
740
+ gap: 0.5rem;
741
+ background: var(--bg-card);
742
+ padding: 0.5rem;
743
+ border-radius: 12px;
744
+ border: 1px solid var(--border);
745
+ }
746
+
747
+ .toggle-btn {
748
+ flex: 1;
749
+ display: flex;
750
+ flex-direction: column;
751
+ align-items: center;
752
+ gap: 0.25rem;
753
+ padding: 0.75rem 1rem;
754
+ background: transparent;
755
+ border: 2px solid transparent;
756
+ border-radius: 8px;
757
+ cursor: pointer;
758
+ transition: all 0.2s;
759
+ color: var(--text-secondary);
760
+ }
761
+
762
+ .toggle-btn:hover {
763
+ background: var(--bg-card-hover);
764
+ }
765
+
766
+ .toggle-btn.active {
767
+ background: rgba(255, 68, 68, 0.1);
768
+ border-color: var(--accent);
769
+ color: var(--text-primary);
770
+ }
771
+
772
+ .toggle-emoji {
773
+ font-size: 1.5rem;
774
+ }
775
+
776
+ .toggle-name {
777
+ font-size: 0.85rem;
778
+ font-weight: 600;
779
+ }
780
+
781
+ .control-hint {
782
+ margin-top: 0.75rem;
783
+ text-align: center;
784
+ color: var(--text-muted);
785
+ font-size: 0.85rem;
786
+ }
787
+
788
+ .approvals-section {
789
+ margin-bottom: 2rem;
790
+ }
791
+
792
+ .approvals-section h2 {
793
+ display: flex;
794
+ align-items: center;
795
+ gap: 0.75rem;
796
+ }
797
+
798
+ .approval-count {
799
+ background: var(--warning);
800
+ color: var(--bg-dark);
801
+ font-size: 0.75rem;
802
+ padding: 0.25rem 0.5rem;
803
+ border-radius: 10px;
804
+ font-weight: 700;
805
+ }
806
+
807
+ .approvals-list {
808
+ display: flex;
809
+ flex-direction: column;
810
+ gap: 0.75rem;
811
+ }
812
+
813
+ .approval-card {
814
+ background: var(--bg-card);
815
+ border-radius: 12px;
816
+ padding: 1rem;
817
+ border: 1px solid var(--warning);
818
+ border-left: 4px solid var(--warning);
819
+ }
820
+
821
+ .approval-header {
822
+ display: flex;
823
+ align-items: center;
824
+ gap: 0.75rem;
825
+ margin-bottom: 0.5rem;
826
+ }
827
+
828
+ .approval-icon {
829
+ font-size: 1.5rem;
830
+ }
831
+
832
+ .approval-tool {
833
+ font-weight: 600;
834
+ font-size: 1rem;
835
+ }
836
+
837
+ .approval-time {
838
+ margin-left: auto;
839
+ font-size: 0.8rem;
840
+ color: var(--text-muted);
841
+ }
842
+
843
+ .approval-plan {
844
+ font-size: 0.9rem;
845
+ color: var(--text-secondary);
846
+ margin-bottom: 0.75rem;
847
+ padding: 0.5rem;
848
+ background: var(--bg-dark);
849
+ border-radius: 6px;
850
+ }
851
+
852
+ .approval-actions {
853
+ display: flex;
854
+ gap: 0.5rem;
855
+ }
856
+
857
+ .btn-approve, .btn-deny {
858
+ flex: 1;
859
+ padding: 0.5rem 1rem;
860
+ border: none;
861
+ border-radius: 6px;
862
+ font-weight: 600;
863
+ cursor: pointer;
864
+ transition: transform 0.2s;
865
+ }
866
+
867
+ .btn-approve {
868
+ background: var(--success);
869
+ color: white;
870
+ }
871
+
872
+ .btn-deny {
873
+ background: var(--danger);
874
+ color: white;
875
+ }
876
+
877
+ .btn-approve:hover, .btn-deny:hover {
878
+ transform: translateY(-2px);
879
+ }
880
+
881
+ @media (max-width: 600px) {
882
+ .dash-header {
883
+ flex-direction: column;
884
+ gap: 0.75rem;
885
+ padding: 1rem;
886
+ text-align: center;
887
+ }
888
+
889
+ .logo {
890
+ justify-content: center;
891
+ }
892
+
893
+ .status-badge {
894
+ font-size: 0.8rem;
895
+ padding: 0.4rem 0.75rem;
896
+ }
897
+
898
+ .legend {
899
+ flex-direction: column;
900
+ gap: 0.75rem;
901
+ align-items: flex-start;
902
+ }
903
+
904
+ .score-bars {
905
+ grid-template-columns: repeat(2, 1fr);
906
+ }
907
+
908
+ .hero h1 {
909
+ font-size: 1.75rem;
910
+ }
911
+
912
+ .bot-card {
913
+ flex-direction: column;
914
+ text-align: center;
915
+ }
916
+
917
+ .bot-stats {
918
+ width: 100%;
919
+ justify-content: space-around;
920
+ }
921
+
922
+ .input-group {
923
+ flex-direction: column;
924
+ }
925
+
926
+ .footer-links {
927
+ flex-direction: column;
928
+ gap: 0.5rem;
929
+ }
930
+
931
+ .footer-divider {
932
+ display: none;
933
+ }
934
+
935
+ .protection-toggle {
936
+ flex-direction: column;
937
+ }
938
+
939
+ .toggle-btn {
940
+ flex-direction: row;
941
+ justify-content: flex-start;
942
+ gap: 0.75rem;
943
+ padding: 0.75rem 1rem;
944
+ }
945
+
946
+ .approval-actions {
947
+ flex-direction: column;
948
+ }
949
+ }
950
+
951
+ /* Extensions Section */
952
+ .extensions-section {
953
+ margin-bottom: 1.5rem;
954
+ }
955
+
956
+ .extension-count {
957
+ font-size: 0.85rem;
958
+ background: var(--primary);
959
+ color: white;
960
+ padding: 0.15rem 0.5rem;
961
+ border-radius: 999px;
962
+ margin-left: 0.5rem;
963
+ }
964
+
965
+ .extensions-grid {
966
+ display: grid;
967
+ gap: 1rem;
968
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
969
+ }
970
+
971
+ .extension-card {
972
+ background: var(--bg-card);
973
+ border-radius: 16px;
974
+ border: 1px solid var(--border);
975
+ padding: 1.25rem;
976
+ display: flex;
977
+ align-items: center;
978
+ gap: 1rem;
979
+ transition: all 0.2s;
980
+ cursor: pointer;
981
+ }
982
+
983
+ .extension-card:hover {
984
+ border-color: var(--primary);
985
+ transform: translateY(-2px);
986
+ }
987
+
988
+ .ext-icon {
989
+ font-size: 1.75rem;
990
+ }
991
+
992
+ .ext-info {
993
+ flex: 1;
994
+ }
995
+
996
+ .ext-name {
997
+ font-weight: 600;
998
+ font-size: 1rem;
999
+ }
1000
+
1001
+ .ext-status {
1002
+ font-size: 0.75rem;
1003
+ color: var(--text-muted);
1004
+ }
1005
+
1006
+ .ext-count {
1007
+ font-size: 1.25rem;
1008
+ font-weight: 700;
1009
+ color: var(--primary);
1010
+ }
1011
+
1012
+ /* Header Actions */
1013
+ .header-actions {
1014
+ display: flex;
1015
+ align-items: center;
1016
+ gap: 1rem;
1017
+ }
1018
+
1019
+ .notification-toggle {
1020
+ background: var(--bg-card);
1021
+ border: 1px solid var(--border);
1022
+ color: var(--text-secondary);
1023
+ padding: 0.5rem 1rem;
1024
+ border-radius: 8px;
1025
+ font-size: 0.85rem;
1026
+ cursor: pointer;
1027
+ transition: all 0.2s;
1028
+ }
1029
+
1030
+ .notification-toggle:hover {
1031
+ border-color: var(--success);
1032
+ color: var(--text-primary);
1033
+ }
1034
+
1035
+ .notification-toggle.enabled {
1036
+ background: rgba(34, 197, 94, 0.15);
1037
+ border-color: var(--success);
1038
+ color: var(--success);
1039
+ }
1040
+
1041
+ /* Feedback Buttons */
1042
+ .activity-feedback {
1043
+ display: flex;
1044
+ align-items: center;
1045
+ gap: 0.5rem;
1046
+ margin-top: 0.75rem;
1047
+ padding-top: 0.75rem;
1048
+ border-top: 1px solid var(--border);
1049
+ }
1050
+
1051
+ .feedback-label {
1052
+ font-size: 0.75rem;
1053
+ color: var(--text-muted);
1054
+ }
1055
+
1056
+ .feedback-btn {
1057
+ background: var(--bg-card-hover);
1058
+ border: 1px solid var(--border);
1059
+ color: var(--text-secondary);
1060
+ padding: 0.25rem 0.5rem;
1061
+ border-radius: 4px;
1062
+ font-size: 0.85rem;
1063
+ cursor: pointer;
1064
+ transition: all 0.2s;
1065
+ }
1066
+
1067
+ .feedback-btn:hover {
1068
+ transform: scale(1.1);
1069
+ }
1070
+
1071
+ .feedback-btn.helpful:hover {
1072
+ background: rgba(34, 197, 94, 0.2);
1073
+ border-color: var(--success);
1074
+ }
1075
+
1076
+ .feedback-btn.not-helpful:hover {
1077
+ background: rgba(239, 68, 68, 0.2);
1078
+ border-color: var(--danger);
1079
+ }
1080
+
1081
+ .feedback-thanks {
1082
+ font-size: 0.75rem;
1083
+ color: var(--success);
1084
+ font-style: italic;
1085
+ }