@pikoloo/codex-proxy 1.0.6

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 (53) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +199 -0
  3. package/bin/cli.js +118 -0
  4. package/docs/ACCOUNTS.md +202 -0
  5. package/docs/API.md +289 -0
  6. package/docs/ARCHITECTURE.md +129 -0
  7. package/docs/CLAUDE_INTEGRATION.md +163 -0
  8. package/docs/OAUTH.md +85 -0
  9. package/docs/OPENCLAW.md +34 -0
  10. package/docs/legal.md +11 -0
  11. package/images/dashboard-screenshot.png +0 -0
  12. package/images/demo-screenshot.png +0 -0
  13. package/images/f757093f-507b-4453-994e-f8275f8b07a9.png +0 -0
  14. package/package.json +61 -0
  15. package/public/css/style.css +1502 -0
  16. package/public/index.html +827 -0
  17. package/public/js/app.js +601 -0
  18. package/src/account-manager.js +528 -0
  19. package/src/account-rotation/index.js +93 -0
  20. package/src/account-rotation/rate-limits.js +293 -0
  21. package/src/account-rotation/strategies/base-strategy.js +48 -0
  22. package/src/account-rotation/strategies/index.js +31 -0
  23. package/src/account-rotation/strategies/round-robin-strategy.js +42 -0
  24. package/src/account-rotation/strategies/sticky-strategy.js +97 -0
  25. package/src/claude-config.js +153 -0
  26. package/src/cli/accounts.js +557 -0
  27. package/src/direct-api.js +164 -0
  28. package/src/format-converter.js +420 -0
  29. package/src/index.js +46 -0
  30. package/src/kilo-api.js +68 -0
  31. package/src/kilo-format-converter.js +285 -0
  32. package/src/kilo-models.js +103 -0
  33. package/src/kilo-streamer.js +243 -0
  34. package/src/middleware/credentials.js +116 -0
  35. package/src/middleware/sse.js +96 -0
  36. package/src/model-api.js +189 -0
  37. package/src/model-mapper.js +157 -0
  38. package/src/oauth.js +666 -0
  39. package/src/response-streamer.js +409 -0
  40. package/src/routes/accounts-route.js +332 -0
  41. package/src/routes/api-routes.js +98 -0
  42. package/src/routes/chat-route.js +229 -0
  43. package/src/routes/claude-config-route.js +121 -0
  44. package/src/routes/logs-route.js +43 -0
  45. package/src/routes/messages-route.js +203 -0
  46. package/src/routes/models-route.js +119 -0
  47. package/src/routes/settings-route.js +143 -0
  48. package/src/security.js +142 -0
  49. package/src/server-settings.js +56 -0
  50. package/src/server.js +58 -0
  51. package/src/signature-cache.js +106 -0
  52. package/src/thinking-utils.js +312 -0
  53. package/src/utils/logger.js +156 -0
@@ -0,0 +1,1502 @@
1
+ [x-cloak] { display: none !important; }
2
+
3
+ :root {
4
+ --color-space-950: #0a0a0f;
5
+ --color-space-900: #0f0f1a;
6
+ --color-space-850: #151522;
7
+ --color-space-800: #1a1a28;
8
+ --color-space-700: #252538;
9
+ --color-space-border: #2a2a3e;
10
+ --color-neon-purple: #a855f7;
11
+ --color-neon-cyan: #22d3ee;
12
+ --color-neon-green: #22c55e;
13
+ --color-neon-yellow: #eab308;
14
+ --color-text-dim: #9ca3af;
15
+ --color-surface-glow: rgba(34, 211, 238, 0.06);
16
+ }
17
+
18
+ * { margin: 0; padding: 0; box-sizing: border-box; }
19
+
20
+ button {
21
+ font: inherit;
22
+ color: inherit;
23
+ background: transparent;
24
+ border: 0;
25
+ }
26
+
27
+ body {
28
+ font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
29
+ background: var(--color-space-950);
30
+ color: #e5e7eb;
31
+ min-height: 100vh;
32
+ -webkit-font-smoothing: antialiased;
33
+ }
34
+
35
+ body::before {
36
+ content: "";
37
+ position: fixed;
38
+ inset: 0;
39
+ pointer-events: none;
40
+ background: none;
41
+ }
42
+
43
+ .font-mono { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace; }
44
+
45
+ .bg-space-950 { background-color: var(--color-space-950); }
46
+ .bg-space-900 { background-color: var(--color-space-900); }
47
+ .bg-space-850 { background-color: var(--color-space-850); }
48
+ .bg-space-800 { background-color: var(--color-space-800); }
49
+ .bg-space-700 { background-color: var(--color-space-700); }
50
+ .bg-space-border { background-color: var(--color-space-border); }
51
+
52
+ .border-space-border { border-color: var(--color-space-border); }
53
+
54
+ .text-neon-purple { color: var(--color-neon-purple); }
55
+ .text-neon-cyan { color: var(--color-neon-cyan); }
56
+ .text-neon-green { color: var(--color-neon-green); }
57
+ .text-neon-yellow { color: var(--color-neon-yellow); }
58
+
59
+ .bg-neon-purple { background-color: var(--color-neon-purple); }
60
+ .bg-neon-cyan { background-color: var(--color-neon-cyan); }
61
+ .bg-neon-green { background-color: var(--color-neon-green); }
62
+
63
+ .border-neon-purple { border-color: var(--color-neon-purple); }
64
+ .border-neon-cyan { border-color: var(--color-neon-cyan); }
65
+ .border-neon-green { border-color: var(--color-neon-green); }
66
+
67
+ .shadow-neon-purple { box-shadow: none; }
68
+
69
+ .nav-item {
70
+ background: transparent;
71
+ color: #9ca3af;
72
+ border-right: 2px solid transparent;
73
+ }
74
+
75
+ .nav-item.active {
76
+ background: rgba(168, 85, 247, 0.1);
77
+ color: white;
78
+ border-right: 2px solid var(--color-neon-purple);
79
+ }
80
+
81
+ .nav-item:hover {
82
+ background: rgba(255, 255, 255, 0.05);
83
+ color: white;
84
+ }
85
+
86
+ .view-container {
87
+ padding: 1.5rem;
88
+ max-width: 1400px;
89
+ margin: 0 auto;
90
+ }
91
+
92
+ @media (min-width: 1024px) {
93
+ .view-container { padding: 2rem; }
94
+ }
95
+
96
+ .view-card {
97
+ background: var(--color-space-900);
98
+ border: 1px solid rgba(42, 42, 62, 0.5);
99
+ border-radius: 0.75rem;
100
+ padding: 1.5rem;
101
+ backdrop-filter: blur(12px);
102
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04), 0 14px 36px rgba(0, 0, 0, 0.36);
103
+ }
104
+
105
+ .stat {
106
+ position: relative;
107
+ }
108
+
109
+ .stat-value {
110
+ line-height: 1.2;
111
+ }
112
+
113
+ .stat-title {
114
+ letter-spacing: 0.05em;
115
+ }
116
+
117
+ .stat-desc {
118
+ letter-spacing: 0.02em;
119
+ }
120
+
121
+ .alert {
122
+ display: flex;
123
+ align-items: center;
124
+ gap: 0.75rem;
125
+ padding: 1rem;
126
+ border-radius: 0.5rem;
127
+ }
128
+
129
+ .alert-info { background: rgba(34, 211, 238, 0.1); border: 1px solid rgba(34, 211, 238, 0.2); }
130
+ .alert-success { background: rgba(34, 197, 94, 0.1); border: 1px solid rgba(34, 197, 94, 0.2); }
131
+ .alert-error { background: rgba(239, 68, 68, 0.1); border: 1px solid rgba(239, 68, 68, 0.2); }
132
+ .alert-warning { background: rgba(234, 179, 8, 0.1); border: 1px solid rgba(234, 179, 8, 0.2); }
133
+
134
+ .btn {
135
+ display: inline-flex;
136
+ align-items: center;
137
+ justify-content: center;
138
+ gap: 0.5rem;
139
+ font-weight: 500;
140
+ border-radius: 0.375rem;
141
+ transition: all 0.15s ease;
142
+ cursor: pointer;
143
+ border: 1px solid transparent;
144
+ background-color: transparent;
145
+ color: #9ca3af;
146
+ }
147
+
148
+ .btn-xs { padding: 0.375rem 0.75rem; font-size: 0.75rem; }
149
+ .btn-sm { padding: 0.5rem 1rem; font-size: 0.875rem; }
150
+ .btn-md { padding: 0.625rem 1.25rem; font-size: 0.875rem; }
151
+
152
+ .btn-ghost {
153
+ background: transparent;
154
+ color: #9ca3af;
155
+ border-color: transparent;
156
+ }
157
+ .btn-ghost:hover { background: rgba(255, 255, 255, 0.05); color: white; }
158
+
159
+ .btn-outline {
160
+ background: transparent;
161
+ color: #9ca3af;
162
+ border-color: rgba(42, 42, 62, 0.8);
163
+ }
164
+ .btn-outline:hover { background: rgba(255, 255, 255, 0.05); color: white; border-color: rgba(42, 42, 62, 1); }
165
+
166
+ .btn-primary {
167
+ background: var(--color-neon-purple);
168
+ color: white;
169
+ border-color: var(--color-neon-purple);
170
+ }
171
+ .btn-primary:hover { background: #9333ea; border-color: #9333ea; }
172
+
173
+ .btn-success {
174
+ background: var(--color-neon-green);
175
+ color: white;
176
+ border-color: var(--color-neon-green);
177
+ }
178
+ .btn-success:hover { background: #16a34a; border-color: #16a34a; }
179
+
180
+ .btn-warning {
181
+ background: var(--color-neon-yellow);
182
+ color: black;
183
+ border-color: var(--color-neon-yellow);
184
+ }
185
+ .btn-warning:hover { background: #ca8a04; border-color: #ca8a04; }
186
+
187
+ .btn-danger {
188
+ background: #ef4444;
189
+ color: white;
190
+ border-color: #ef4444;
191
+ }
192
+ .btn-danger:hover { background: #dc2626; border-color: #dc2626; }
193
+
194
+ .btn-square { padding: 0.5rem; }
195
+
196
+ .btn:disabled {
197
+ opacity: 0.5;
198
+ cursor: not-allowed;
199
+ }
200
+
201
+ .btn.loading {
202
+ pointer-events: none;
203
+ opacity: 0.7;
204
+ }
205
+
206
+ .input {
207
+ width: 100%;
208
+ padding: 0.5rem 0.75rem;
209
+ background: var(--color-space-800);
210
+ border: 1px solid var(--color-space-border);
211
+ border-radius: 0.375rem;
212
+ color: white;
213
+ font-size: 0.875rem;
214
+ transition: border-color 0.15s ease;
215
+ }
216
+
217
+ .input:focus {
218
+ outline: none;
219
+ border-color: var(--color-neon-purple);
220
+ }
221
+
222
+ .input-search-sm {
223
+ padding: 0.375rem 0.75rem 0.375rem 2.25rem;
224
+ background: var(--color-space-800);
225
+ border: 1px solid var(--color-space-border);
226
+ border-radius: 0.375rem;
227
+ color: white;
228
+ font-size: 0.75rem;
229
+ }
230
+
231
+ .input-search-sm:focus {
232
+ outline: none;
233
+ border-color: var(--color-neon-purple);
234
+ }
235
+
236
+ .input-search-sm::placeholder {
237
+ color: #6b7280;
238
+ }
239
+
240
+ select {
241
+ background: var(--color-space-800);
242
+ border: 1px solid var(--color-space-border);
243
+ border-radius: 0.375rem;
244
+ color: white;
245
+ padding: 0.375rem 0.75rem;
246
+ font-size: 0.75rem;
247
+ }
248
+
249
+ select:focus {
250
+ outline: none;
251
+ border-color: var(--color-neon-purple);
252
+ }
253
+
254
+ dialog {
255
+ background: transparent;
256
+ color: #e5e7eb;
257
+ }
258
+
259
+ dialog::backdrop {
260
+ background: rgba(0, 0, 0, 0.7);
261
+ backdrop-filter: blur(4px);
262
+ }
263
+
264
+ .modal-box {
265
+ background: var(--color-space-900);
266
+ border: 1px solid var(--color-space-border);
267
+ border-radius: 0.75rem;
268
+ color: #e5e7eb;
269
+ }
270
+
271
+ .modal-backdrop {
272
+ background: transparent;
273
+ }
274
+
275
+ .custom-scrollbar::-webkit-scrollbar {
276
+ width: 6px;
277
+ height: 6px;
278
+ }
279
+
280
+ .custom-scrollbar::-webkit-scrollbar-track {
281
+ background: transparent;
282
+ }
283
+
284
+ .custom-scrollbar::-webkit-scrollbar-thumb {
285
+ background: rgba(42, 42, 62, 0.6);
286
+ border-radius: 3px;
287
+ }
288
+
289
+ .custom-scrollbar::-webkit-scrollbar-thumb:hover {
290
+ background: rgba(42, 42, 62, 0.9);
291
+ }
292
+
293
+ table { width: 100%; border-collapse: collapse; }
294
+
295
+ th { text-align: left; }
296
+
297
+ table tr {
298
+ background: transparent;
299
+ }
300
+
301
+ table tr:hover {
302
+ background: rgba(34, 211, 238, 0.04);
303
+ }
304
+
305
+ table td {
306
+ background: transparent;
307
+ }
308
+
309
+ table button {
310
+ background: transparent;
311
+ }
312
+
313
+ table .btn-outline {
314
+ background: transparent;
315
+ border-color: rgba(42, 42, 62, 0.8);
316
+ color: #9ca3af;
317
+ }
318
+
319
+ table .btn-outline:hover {
320
+ background: rgba(255, 255, 255, 0.05);
321
+ color: white;
322
+ }
323
+
324
+ .animate-spin {
325
+ animation: spin 1s linear infinite;
326
+ }
327
+
328
+ @keyframes spin {
329
+ from { transform: rotate(0deg); }
330
+ to { transform: rotate(360deg); }
331
+ }
332
+
333
+ .animate-pulse {
334
+ animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
335
+ }
336
+
337
+ @keyframes pulse {
338
+ 0%, 100% { opacity: 1; }
339
+ 50% { opacity: 0.5; }
340
+ }
341
+
342
+ .animate-fade-in {
343
+ animation: fadeIn 0.3s ease;
344
+ }
345
+
346
+ @keyframes fadeIn {
347
+ from { opacity: 0; }
348
+ to { opacity: 1; }
349
+ }
350
+
351
+ .transition-all { transition: all 0.15s ease; }
352
+ .transition-colors { transition: color 0.15s ease, background-color 0.15s ease, border-color 0.15s ease; }
353
+ .transition-transform { transition: transform 0.15s ease; }
354
+
355
+ .duration-300 { transition-duration: 300ms; }
356
+ .duration-200 { transition-duration: 200ms; }
357
+
358
+ .truncate {
359
+ overflow: hidden;
360
+ text-overflow: ellipsis;
361
+ white-space: nowrap;
362
+ }
363
+
364
+ .flex { display: flex; }
365
+ .inline-flex { display: inline-flex; }
366
+ .inline-block { display: inline-block; }
367
+ .block { display: block; }
368
+ .hidden { display: none; }
369
+ .flex-col { flex-direction: column; }
370
+ .flex-wrap { flex-wrap: wrap; }
371
+ .flex-1 { flex: 1 1 0%; }
372
+ .flex-shrink-0 { flex-shrink: 0; }
373
+ .items-center { align-items: center; }
374
+ .items-start { align-items: flex-start; }
375
+ .justify-center { justify-content: center; }
376
+ .justify-between { justify-content: space-between; }
377
+ .justify-end { justify-content: flex-end; }
378
+ .gap-1 { gap: 0.25rem; }
379
+ .gap-1\.5 { gap: 0.375rem; }
380
+ .gap-2 { gap: 0.5rem; }
381
+ .gap-3 { gap: 0.75rem; }
382
+ .gap-4 { gap: 1rem; }
383
+ .gap-6 { gap: 1.5rem; }
384
+
385
+ .relative { position: relative; }
386
+ .absolute { position: absolute; }
387
+ .fixed { position: fixed; }
388
+ .inset-0 { top: 0; right: 0; bottom: 0; left: 0; }
389
+
390
+ .top-3 { top: 0.75rem; }
391
+ .top-2 { top: 0.5rem; }
392
+ .top-4 { top: 1rem; }
393
+ .top-14 { top: 3.5rem; }
394
+ .right-3 { right: 0.75rem; }
395
+ .right-4 { right: 1rem; }
396
+ .right-0 { right: 0; }
397
+ .left-0 { left: 0; }
398
+ .left-3 { left: 0.75rem; }
399
+ .bottom-0 { bottom: 0; }
400
+
401
+ .z-40 { z-index: 40; }
402
+ .z-50 { z-index: 50; }
403
+ .z-\[100\] { z-index: 100; }
404
+
405
+ .w-1 { width: 0.25rem; }
406
+ .w-1\.5 { width: 0.375rem; }
407
+ .w-2 { width: 0.5rem; }
408
+ .w-3 { width: 0.75rem; }
409
+ .w-3\.5 { width: 0.875rem; }
410
+ .w-4 { width: 1rem; }
411
+ .w-5 { width: 1.25rem; }
412
+ .w-6 { width: 1.5rem; }
413
+ .w-8 { width: 2rem; }
414
+ .w-12 { width: 3rem; }
415
+ .w-14 { width: 3.5rem; }
416
+ .w-16 { width: 4rem; }
417
+ .w-20 { width: 5rem; }
418
+ .w-24 { width: 6rem; }
419
+ .w-32 { width: 8rem; }
420
+ .w-40 { width: 10rem; }
421
+ .w-48 { width: 12rem; }
422
+ .w-64 { width: 16rem; }
423
+ .w-full { width: 100%; }
424
+ .w-px { width: 1px; }
425
+
426
+ .h-1 { height: 0.25rem; }
427
+ .h-1\.5 { height: 0.375rem; }
428
+ .h-2 { height: 0.5rem; }
429
+ .h-2\.5 { height: 0.625rem; }
430
+ .h-3 { height: 0.75rem; }
431
+ .h-4 { height: 1rem; }
432
+ .h-5 { height: 1.25rem; }
433
+ .h-6 { height: 1.5rem; }
434
+ .h-8 { height: 2rem; }
435
+ .h-12 { height: 3rem; }
436
+ .h-11 { height: 2.75rem; }
437
+ .h-14 { height: 3.5rem; }
438
+ .h-full { height: 100%; }
439
+ .h-auto { height: auto; }
440
+ .h-\[calc\(100vh-56px\)\] { height: calc(100vh - 56px); }
441
+
442
+ .min-w-0 { min-width: 0; }
443
+ .min-w-\[860px\] { min-width: 860px; }
444
+ .min-w-\[200px\] { min-width: 200px; }
445
+ .min-h-screen { min-height: 100vh; }
446
+
447
+ .max-w-lg { max-width: 32rem; }
448
+ .max-w-md { max-width: 28rem; }
449
+ .max-w-sm { max-width: 24rem; }
450
+ .max-w-xl { max-width: 36rem; }
451
+ .max-w-2xl { max-width: 42rem; }
452
+ .max-w-\[320px\] { max-width: 320px; }
453
+ .max-w-\[60vh\] { max-height: 60vh; }
454
+
455
+ .p-1 { padding: 0.25rem; }
456
+ .p-2 { padding: 0.5rem; }
457
+ .p-3 { padding: 0.75rem; }
458
+ .p-4 { padding: 1rem; }
459
+ .p-6 { padding: 1.5rem; }
460
+ .pt-3 { padding-top: 0.75rem; }
461
+ .pt-6 { padding-top: 1.5rem; }
462
+ .pb-4 { padding-bottom: 1rem; }
463
+ .px-2 { padding-left: 0.5rem; padding-right: 0.5rem; }
464
+ .px-1\.5 { padding-left: 0.375rem; padding-right: 0.375rem; }
465
+ .px-2\.5 { padding-left: 0.625rem; padding-right: 0.625rem; }
466
+ .px-3 { padding-left: 0.75rem; padding-right: 0.75rem; }
467
+ .px-4 { padding-left: 1rem; padding-right: 1rem; }
468
+ .px-6 { padding-left: 1.5rem; padding-right: 1.5rem; }
469
+ .py-1 { padding-top: 0.25rem; padding-bottom: 0.25rem; }
470
+ .py-0\.5 { padding-top: 0.125rem; padding-bottom: 0.125rem; }
471
+ .py-1\.5 { padding-top: 0.375rem; padding-bottom: 0.375rem; }
472
+ .py-2 { padding-top: 0.5rem; padding-bottom: 0.5rem; }
473
+ .py-3 { padding-top: 0.75rem; padding-bottom: 0.75rem; }
474
+ .py-4 { padding-top: 1rem; padding-bottom: 1rem; }
475
+ .py-16 { padding-top: 4rem; padding-bottom: 4rem; }
476
+ .py-12 { padding-top: 3rem; padding-bottom: 3rem; }
477
+ .pl-6 { padding-left: 1.5rem; }
478
+ .pl-9 { padding-left: 2.25rem; }
479
+ .pr-6 { padding-right: 1.5rem; }
480
+
481
+ .mt-1 { margin-top: 0.25rem; }
482
+ .mt-2 { margin-top: 0.5rem; }
483
+ .mt-3 { margin-top: 0.75rem; }
484
+ .mt-4 { margin-top: 1rem; }
485
+ .mt-6 { margin-top: 1.5rem; }
486
+ .mt-8 { margin-top: 2rem; }
487
+ .mt-auto { margin-top: auto; }
488
+ .mb-1 { margin-bottom: 0.25rem; }
489
+ .mb-2 { margin-bottom: 0.5rem; }
490
+ .mb-4 { margin-bottom: 1rem; }
491
+ .mb-6 { margin-bottom: 1.5rem; }
492
+ .mb-8 { margin-bottom: 2rem; }
493
+ .ml-1 { margin-left: 0.25rem; }
494
+ .ml-auto { margin-left: auto; }
495
+ .mr-2 { margin-right: 0.5rem; }
496
+
497
+ .text-\[10px\] { font-size: 0.625rem; }
498
+ .text-xs { font-size: 0.75rem; }
499
+ .text-sm { font-size: 0.875rem; }
500
+ .text-lg { font-size: 1.125rem; }
501
+ .text-xl { font-size: 1.25rem; }
502
+ .text-2xl { font-size: 1.5rem; }
503
+ .text-center { text-align: center; }
504
+ .text-left { text-align: left; }
505
+ .text-right { text-align: right; }
506
+
507
+ .font-medium { font-weight: 500; }
508
+ .font-semibold { font-weight: 600; }
509
+ .font-bold { font-weight: 700; }
510
+
511
+ .uppercase { text-transform: uppercase; }
512
+ .capitalize { text-transform: capitalize; }
513
+
514
+ .tracking-tight { letter-spacing: -0.025em; }
515
+ .tracking-wider { letter-spacing: 0.05em; }
516
+ .tracking-widest { letter-spacing: 0.1em; }
517
+ .leading-relaxed { line-height: 1.625; }
518
+ .leading-tight { line-height: 1.25; }
519
+ .whitespace-nowrap { white-space: nowrap; }
520
+ .whitespace-pre-wrap { white-space: pre-wrap; }
521
+
522
+ .text-white { color: white; }
523
+ .text-gray-200 { color: #e5e7eb; }
524
+ .text-gray-300 { color: #d1d5db; }
525
+ .text-gray-400 { color: #9ca3af; }
526
+ .text-gray-500 { color: #6b7280; }
527
+ .text-gray-600 { color: #4b5563; }
528
+ .text-gray-700 { color: #374151; }
529
+ .text-gray-700\/40 { color: rgba(55, 65, 81, 0.4); }
530
+
531
+ .text-red-400 { color: #f87171; }
532
+ .text-red-300 { color: #fca5a5; }
533
+ .text-red-500 { color: #ef4444; }
534
+ .text-yellow-400 { color: #facc15; }
535
+ .text-yellow-500 { color: #eab308; }
536
+ .text-blue-400 { color: #60a5fa; }
537
+ .text-blue-500 { color: #3b82f6; }
538
+
539
+ .bg-white\/5 { background-color: rgba(255, 255, 255, 0.05); }
540
+ .bg-white\/10 { background-color: rgba(255, 255, 255, 0.1); }
541
+ .bg-black\/50 { background-color: rgba(0, 0, 0, 0.5); }
542
+ .bg-black\/70 { background-color: rgba(0, 0, 0, 0.7); }
543
+ .bg-space-900\/90 { background-color: rgba(15, 15, 26, 0.9); }
544
+ .bg-gray-500 { background-color: #6b7280; }
545
+ .bg-neon-green\/10 { background-color: rgba(34, 197, 94, 0.1); }
546
+ .bg-red-600 { background-color: #dc2626; }
547
+
548
+ .bg-gradient-to-br { background-image: none; }
549
+ .from-neon-purple { --tw-gradient-from: var(--color-neon-purple); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to, transparent); }
550
+ .to-blue-600 { --tw-gradient-to: #2563eb; }
551
+
552
+ .border { border-width: 1px; }
553
+ .border-t { border-top-width: 1px; }
554
+ .border-b { border-bottom-width: 1px; }
555
+ .border-r { border-right-width: 1px; }
556
+ .border-2 { border-width: 2px; }
557
+ .border-0 { border-width: 0; }
558
+ .border-none { border: none; }
559
+ .border-space-border\/20 { border-color: rgba(42, 42, 62, 0.2); }
560
+ .border-space-border\/30 { border-color: rgba(42, 42, 62, 0.3); }
561
+ .border-space-border\/40 { border-color: rgba(42, 42, 62, 0.4); }
562
+ .border-space-border\/50 { border-color: rgba(42, 42, 62, 0.5); }
563
+ .border-space-border\/60 { border-color: rgba(42, 42, 62, 0.6); }
564
+ .border-space-border\/80 { border-color: rgba(42, 42, 62, 0.8); }
565
+ .border-red-500\/20 { border-color: rgba(239, 68, 68, 0.2); }
566
+ .border-red-500\/30 { border-color: rgba(239, 68, 68, 0.3); }
567
+ .border-red-500\/50 { border-color: rgba(239, 68, 68, 0.5); }
568
+ .border-yellow-500\/20 { border-color: rgba(234, 179, 8, 0.2); }
569
+ .border-yellow-500\/30 { border-color: rgba(234, 179, 8, 0.3); }
570
+ .border-yellow-500\/50 { border-color: rgba(234, 179, 8, 0.5); }
571
+ .border-blue-500\/30 { border-color: rgba(59, 130, 246, 0.3); }
572
+ .border-neon-purple\/20 { border-color: rgba(168, 85, 247, 0.2); }
573
+ .border-neon-purple\/30 { border-color: rgba(168, 85, 247, 0.3); }
574
+ .border-neon-purple\/50 { border-color: rgba(168, 85, 247, 0.5); }
575
+ .border-neon-cyan\/20 { border-color: rgba(34, 211, 238, 0.2); }
576
+ .border-neon-green\/20 { border-color: rgba(34, 197, 94, 0.2); }
577
+
578
+ .rounded { border-radius: 0.25rem; }
579
+ .rounded-full { border-radius: 9999px; }
580
+ .rounded-lg { border-radius: 0.5rem; }
581
+ .rounded-xl { border-radius: 0.75rem; }
582
+
583
+ .shadow-lg { box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); }
584
+ .shadow-sm { box-shadow: 0 1px 2px rgba(0, 0, 0, 0.18); }
585
+ .shadow-xl { box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); }
586
+ .shadow-2xl { box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); }
587
+ .shadow-none { box-shadow: none; }
588
+
589
+ .backdrop-blur-sm { backdrop-filter: blur(4px); }
590
+ .backdrop-blur-md { backdrop-filter: blur(12px); }
591
+
592
+ .overflow-hidden { overflow: hidden; }
593
+ .overflow-auto { overflow: auto; }
594
+ .overflow-x-auto { overflow-x: auto; }
595
+ .overflow-y-auto { overflow-y: auto; }
596
+
597
+ .transform {
598
+ transform:
599
+ translateX(var(--tw-translate-x, 0))
600
+ translateY(var(--tw-translate-y, 0))
601
+ rotate(var(--tw-rotate, 0))
602
+ skewX(var(--tw-skew-x, 0))
603
+ skewY(var(--tw-skew-y, 0))
604
+ scaleX(var(--tw-scale-x, 1))
605
+ scaleY(var(--tw-scale-y, 1));
606
+ }
607
+ .-translate-x-full { --tw-translate-x: -100%; }
608
+ .translate-x-0 { --tw-translate-x: 0; }
609
+ .translate-x-4 { --tw-translate-x: 1rem; }
610
+ .translate-x-8 { --tw-translate-x: 2rem; }
611
+ .scale-95 { --tw-scale-x: 0.95; --tw-scale-y: 0.95; }
612
+ .scale-100 { --tw-scale-x: 1; --tw-scale-y: 1; }
613
+ .rotate-180 { --tw-rotate: 180deg; }
614
+
615
+ .cursor-pointer { cursor: pointer; }
616
+ .cursor-help { cursor: help; }
617
+ .pointer-events-none { pointer-events: none; }
618
+ .pointer-events-auto { pointer-events: auto; }
619
+
620
+ .opacity-0 { opacity: 0; }
621
+ .opacity-50 { opacity: 0.5; }
622
+ .opacity-60 { opacity: 0.6; }
623
+ .opacity-75 { opacity: 0.75; }
624
+ .opacity-100 { opacity: 1; }
625
+
626
+ .group:hover .group-hover\:text-white { color: white; }
627
+ .group:hover .group-hover\:text-cyan-400 { color: #22d3ee; }
628
+ .group:hover .group-hover\:text-cyan-400\/70 { color: rgba(34, 211, 238, 0.7); }
629
+ .group:hover .group-hover\:text-green-400 { color: #4ade80; }
630
+ .group:hover .group-hover\:text-green-400\/70 { color: rgba(74, 222, 128, 0.7); }
631
+ .group:hover .group-hover\:text-red-400 { color: #f87171; }
632
+ .group:hover .group-hover\:text-yellow-400 { color: #facc15; }
633
+ .group:hover .group-hover\:text-yellow-400\/70 { color: rgba(250, 204, 21, 0.7); }
634
+ .group:hover .group-hover\:text-purple-400 { color: #c084fc; }
635
+ .group:hover .group-hover\:text-purple-400\/70 { color: rgba(192, 132, 252, 0.7); }
636
+ .group:hover .group-hover\:opacity-100 { opacity: 1; }
637
+
638
+ .hover\:bg-white\/5:hover { background-color: rgba(255, 255, 255, 0.05); }
639
+ .hover\:bg-white\/10:hover { background-color: rgba(255, 255, 255, 0.1); }
640
+ .hover\:bg-red-500\/10:hover { background-color: rgba(239, 68, 68, 0.1); }
641
+ .hover\:bg-red-500\/20:hover { background-color: rgba(239, 68, 68, 0.2); }
642
+ .hover\:bg-purple-600:hover { background-color: #9333ea; }
643
+ .hover\:text-white:hover { color: white; }
644
+ .hover\:text-red-400:hover { color: #f87171; }
645
+ .hover\:border-cyan-500\/30:hover { border-color: rgba(34, 211, 238, 0.3); }
646
+ .hover\:border-green-500\/30:hover { border-color: rgba(34, 197, 94, 0.3); }
647
+ .hover\:border-yellow-500\/30:hover { border-color: rgba(234, 179, 8, 0.3); }
648
+ .hover\:border-red-500\/30:hover { border-color: rgba(239, 68, 68, 0.3); }
649
+ .hover\:border-purple-500\/30:hover { border-color: rgba(168, 85, 247, 0.3); }
650
+ .hover\:bg-cyan-500\/5:hover { background-color: rgba(34, 211, 238, 0.05); }
651
+ .hover\:bg-green-500\/5:hover { background-color: rgba(34, 197, 94, 0.05); }
652
+ .hover\:bg-yellow-500\/5:hover { background-color: rgba(234, 179, 8, 0.05); }
653
+ .hover\:bg-red-500\/5:hover { background-color: rgba(239, 68, 68, 0.05); }
654
+ .hover\:bg-purple-500\/5:hover { background-color: rgba(168, 85, 247, 0.05); }
655
+
656
+ .grid { display: grid; }
657
+ .grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
658
+
659
+ .space-y-1 > * + * { margin-top: 0.25rem; }
660
+ .space-y-2 > * + * { margin-top: 0.5rem; }
661
+ .space-y-3 > * + * { margin-top: 0.75rem; }
662
+ .space-y-4 > * + * { margin-top: 1rem; }
663
+ .space-y-6 > * + * { margin-top: 1.5rem; }
664
+
665
+ @media (min-width: 640px) {
666
+ .sm\:grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
667
+ .sm\:grid-cols-5 { grid-template-columns: repeat(5, minmax(0, 1fr)); }
668
+ .sm\:col-span-1 { grid-column: span 1 / span 1; }
669
+ .sm\:w-auto { width: auto; }
670
+ .sm\:text-center { text-align: center; }
671
+ .sm\:justify-center { justify-content: center; }
672
+ .sm\:gap-2 { gap: 0.5rem; }
673
+ .sm\:gap-3 { gap: 0.75rem; }
674
+ .sm\:flex-none { flex: none; }
675
+ .sm\:flex-nowrap { flex-wrap: nowrap; }
676
+ .sm\:ml-1 { margin-left: 0.25rem; }
677
+ }
678
+
679
+ @media (min-width: 1024px) {
680
+ .lg\:static { position: static; }
681
+ .lg\:flex-shrink-0 { flex-shrink: 0; }
682
+ .lg\:h-auto { height: auto; }
683
+ .lg\:shadow-none { box-shadow: none; }
684
+ .lg\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
685
+ .lg\:col-span-1 { grid-column: span 1 / span 1; }
686
+ .lg\:gap-3 { gap: 0.75rem; }
687
+ .lg\:gap-4 { gap: 1rem; }
688
+ .lg\:p-4 { padding: 1rem; }
689
+ .lg\:px-4 { padding-left: 1rem; padding-right: 1rem; }
690
+ .lg\:px-6 { padding-left: 1.5rem; padding-right: 1.5rem; }
691
+ .lg\:py-2 { padding-top: 0.5rem; padding-bottom: 0.5rem; }
692
+ .lg\:text-3xl { font-size: 1.875rem; }
693
+ .lg\:text-xs { font-size: 0.75rem; }
694
+ .lg\:block { display: block; }
695
+ .lg\:hidden { display: none; }
696
+ .lg\:flex-nowrap { flex-wrap: nowrap; }
697
+ .lg\:border { border-width: 1px; }
698
+ .lg\:rounded-md { border-radius: 0.375rem; }
699
+ .lg\:bg-transparent { background-color: transparent; }
700
+ .lg\:border-transparent { border-color: transparent; }
701
+ .lg\:w-64 { width: 16rem; }
702
+ .lg\:w-auto { width: auto; }
703
+ .lg\:justify-end { justify-content: flex-end; }
704
+ .lg\:bg-space-800 { background-color: var(--color-space-800); }
705
+ .lg\:border-neon-purple\/30 { border-color: rgba(168, 85, 247, 0.3); }
706
+ .lg\:border-space-border\/60 { border-color: rgba(42, 42, 62, 0.6); }
707
+ .lg\:border-space-border\/30 { border-color: rgba(42, 42, 62, 0.3); }
708
+ .lg\:whitespace-nowrap { white-space: nowrap; }
709
+ .lg\:flex-shrink-0 { flex-shrink: 0; }
710
+ .lg\:hover\:bg-space-800:hover { background-color: var(--color-space-800); }
711
+ .lg\:hover\:border-neon-purple\/30:hover { border-color: rgba(168, 85, 247, 0.3); }
712
+ .lg\:hover\:shadow-lg:hover { box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); }
713
+ .lg\:hover\:shadow-neon-purple\/10:hover { box-shadow: 0 0 15px rgba(168, 85, 247, 0.1); }
714
+ }
715
+
716
+ @media (min-width: 1280px) {
717
+ .xl\:p-4 { padding: 1rem; }
718
+ .xl\:h-16 { height: 4rem; }
719
+ .xl\:w-16 { width: 4rem; }
720
+ }
721
+
722
+ [x-transition] { transition: opacity 0.2s ease, transform 0.2s ease; }
723
+
724
+ .fade-enter-active { transition: opacity 0.3s ease; }
725
+ .fade-enter-from { opacity: 0; }
726
+
727
+ .bg-space-800\/50 { background-color: rgba(26, 26, 40, 0.5); }
728
+ .bg-space-800\/80 { background-color: rgba(26, 26, 40, 0.8); }
729
+ .bg-space-900\/40 { background-color: rgba(15, 15, 26, 0.4); }
730
+ .bg-space-900\/50 { background-color: rgba(15, 15, 26, 0.5); }
731
+ .bg-space-900\/60 { background-color: rgba(15, 15, 26, 0.6); }
732
+
733
+ .bg-space-900\/20 { background-color: rgba(15, 15, 26, 0.2); }
734
+ .bg-neon-purple\/10 { background-color: rgba(168, 85, 247, 0.1); }
735
+ .bg-neon-purple\/20 { background-color: rgba(168, 85, 247, 0.2); }
736
+
737
+ .bg-yellow-500\/10 { background-color: rgba(234, 179, 8, 0.1); }
738
+ .bg-blue-500\/10 { background-color: rgba(59, 130, 246, 0.1); }
739
+ .bg-gray-500\/10 { background-color: rgba(107, 114, 128, 0.1); }
740
+ .bg-red-500\/10 { background-color: rgba(239, 68, 68, 0.1); }
741
+
742
+ .border-gray-500\/30 { border-color: rgba(107, 114, 128, 0.3); }
743
+
744
+ .text-cyan-400 { color: #22d3ee; }
745
+ .text-green-400 { color: #4ade80; }
746
+ .text-purple-400 { color: #c084fc; }
747
+ .text-cyan-400\/60 { color: rgba(34, 211, 238, 0.6); }
748
+ .text-green-400\/60 { color: rgba(74, 222, 128, 0.6); }
749
+ .text-yellow-400\/60 { color: rgba(250, 204, 21, 0.6); }
750
+ .text-purple-400\/60 { color: rgba(192, 132, 252, 0.6); }
751
+
752
+ .hover\:text-cyan-400:hover { color: #22d3ee; }
753
+ .hover\:text-green-400:hover { color: #4ade80; }
754
+ .hover\:text-purple-400:hover { color: #c084fc; }
755
+
756
+ .hover\:underline:hover { text-decoration: underline; }
757
+
758
+ .\!p-0 { padding: 0 !important; }
759
+
760
+ .shadow-neon-purple\/20 {
761
+ box-shadow: none;
762
+ }
763
+
764
+ .shadow-\[0_0_15px_rgba\(168\,85\,247\,0\.4\)\] {
765
+ box-shadow: 0 0 15px rgba(168, 85, 247, 0.4);
766
+ }
767
+
768
+ .shadow-\[0_0_8px_rgba\(34\,197\,94\,0\.6\)\] {
769
+ box-shadow: 0 0 8px rgba(34, 197, 94, 0.6);
770
+ }
771
+
772
+ .bg-gray-700 {
773
+ background-color: rgba(55, 65, 81, 0.9);
774
+ }
775
+
776
+ .h-0 {
777
+ height: 0;
778
+ }
779
+
780
+ .w-0 {
781
+ width: 0;
782
+ }
783
+
784
+ .animate-ping {
785
+ animation: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;
786
+ }
787
+
788
+ @keyframes ping {
789
+ 75%, 100% {
790
+ transform: scale(2);
791
+ opacity: 0;
792
+ }
793
+ }
794
+
795
+ /* Native macOS glass treatment */
796
+ :root {
797
+ --color-space-950: #eceef1;
798
+ --color-space-900: rgba(248, 249, 251, 0.72);
799
+ --color-space-850: rgba(244, 246, 248, 0.68);
800
+ --color-space-800: rgba(255, 255, 255, 0.72);
801
+ --color-space-700: rgba(232, 236, 240, 0.72);
802
+ --color-space-border: rgba(36, 41, 47, 0.12);
803
+ --color-neon-purple: #0a84ff;
804
+ --color-neon-cyan: #007aff;
805
+ --color-neon-green: #1f8f4d;
806
+ --color-neon-yellow: #a56800;
807
+ --color-text-dim: #6a717c;
808
+ --glass-surface: rgba(255, 255, 255, 0.72);
809
+ --glass-sidebar: rgba(246, 247, 249, 0.68);
810
+ --glass-toolbar: rgba(249, 250, 252, 0.82);
811
+ --glass-line: rgba(36, 41, 47, 0.12);
812
+ --glass-line-strong: rgba(36, 41, 47, 0.18);
813
+ --glass-shadow: 0 18px 42px rgba(31, 35, 40, 0.1);
814
+ --glass-radius: 14px;
815
+ --text-strong: #171a20;
816
+ --text-body: #303641;
817
+ --text-muted: #68707d;
818
+ --text-faint: #8b929c;
819
+ --accent: #0a84ff;
820
+ --accent-pressed: #006fd6;
821
+ --success: #1f8f4d;
822
+ --warning: #a56800;
823
+ --danger: #d70015;
824
+ }
825
+
826
+ body {
827
+ background-color: #eceef1;
828
+ background-image: none;
829
+ color: var(--text-body);
830
+ }
831
+
832
+ body::before,
833
+ body::after {
834
+ content: none;
835
+ }
836
+
837
+ .tracking-tight,
838
+ .tracking-wider,
839
+ .tracking-widest {
840
+ letter-spacing: 0;
841
+ }
842
+
843
+ .bg-gradient-to-br {
844
+ background-image: none;
845
+ }
846
+
847
+ .bg-space-950 { background-color: #eceef1; }
848
+ .bg-space-900 { background-color: var(--glass-sidebar); }
849
+ .bg-space-850 { background-color: rgba(244, 246, 248, 0.72); }
850
+ .bg-space-800 { background-color: rgba(255, 255, 255, 0.78); }
851
+ .bg-space-700 { background-color: rgba(232, 236, 240, 0.78); }
852
+ .bg-space-900\/20,
853
+ .bg-space-900\/40,
854
+ .bg-space-900\/50,
855
+ .bg-space-900\/60,
856
+ .bg-space-900\/90,
857
+ .bg-space-800\/50,
858
+ .bg-space-800\/80 {
859
+ background-color: rgba(255, 255, 255, 0.58);
860
+ }
861
+
862
+ .border-space-border,
863
+ .border-space-border\/20,
864
+ .border-space-border\/30,
865
+ .border-space-border\/40,
866
+ .border-space-border\/50,
867
+ .border-space-border\/60,
868
+ .border-space-border\/80 {
869
+ border-color: var(--glass-line);
870
+ }
871
+
872
+ .text-white,
873
+ .text-gray-200 {
874
+ color: var(--text-strong);
875
+ }
876
+
877
+ .text-gray-300 { color: var(--text-body); }
878
+ .text-gray-400 { color: var(--text-muted); }
879
+ .text-gray-500 { color: var(--text-faint); }
880
+ .text-gray-600 { color: #a4aab3; }
881
+ .text-gray-700,
882
+ .text-gray-700\/40 { color: #b5bbc3; }
883
+
884
+ .text-neon-purple,
885
+ .text-neon-cyan,
886
+ .text-blue-400,
887
+ .text-blue-500,
888
+ .text-cyan-400,
889
+ .text-cyan-400\/60,
890
+ .text-purple-400,
891
+ .text-purple-400\/60 {
892
+ color: var(--accent);
893
+ }
894
+
895
+ .text-neon-green,
896
+ .text-green-400,
897
+ .text-green-400\/60 {
898
+ color: var(--success);
899
+ }
900
+
901
+ .text-neon-yellow,
902
+ .text-yellow-400,
903
+ .text-yellow-400\/60,
904
+ .text-yellow-500 {
905
+ color: var(--warning);
906
+ }
907
+
908
+ .text-red-300,
909
+ .text-red-400,
910
+ .text-red-500 {
911
+ color: var(--danger);
912
+ }
913
+
914
+ .h-14.border-b {
915
+ height: 60px;
916
+ margin: 0;
917
+ border: 0;
918
+ border-bottom: 1px solid var(--glass-line);
919
+ border-radius: 0;
920
+ background-color: var(--glass-toolbar);
921
+ box-shadow: 0 1px 0 rgba(255, 255, 255, 0.72);
922
+ backdrop-filter: blur(24px) saturate(160%);
923
+ -webkit-backdrop-filter: blur(24px) saturate(160%);
924
+ }
925
+
926
+ .h-14.border-b .w-8.h-8 {
927
+ background-color: #1f2328;
928
+ background-image: none;
929
+ border-radius: 8px;
930
+ box-shadow: none;
931
+ color: white;
932
+ }
933
+
934
+ .app-brand {
935
+ min-width: 0;
936
+ }
937
+
938
+ .app-brand-copy {
939
+ min-width: 0;
940
+ line-height: 1;
941
+ }
942
+
943
+ .app-brand-title {
944
+ white-space: nowrap;
945
+ }
946
+
947
+ .app-brand-meta {
948
+ display: inline-flex;
949
+ align-items: center;
950
+ height: 22px;
951
+ padding: 0 0.55rem;
952
+ border: 1px solid var(--glass-line);
953
+ border-radius: 999px;
954
+ background-color: rgba(255, 255, 255, 0.64);
955
+ color: var(--text-muted);
956
+ }
957
+
958
+ .app-toolbar {
959
+ gap: 0.7rem;
960
+ }
961
+
962
+ .app-toolbar .btn-square {
963
+ width: 32px;
964
+ min-height: 32px;
965
+ padding: 0;
966
+ }
967
+
968
+ .h-14.border-b a {
969
+ color: var(--text-muted);
970
+ }
971
+
972
+ .h-14.border-b a:hover {
973
+ color: var(--accent);
974
+ }
975
+
976
+ .h-\[calc\(100vh-56px\)\] {
977
+ height: calc(100vh - 60px);
978
+ }
979
+
980
+ .fixed.top-14.bottom-0.left-0 {
981
+ top: 60px;
982
+ bottom: 0;
983
+ left: 0;
984
+ width: 268px;
985
+ border: 0;
986
+ border-right: 1px solid var(--glass-line);
987
+ border-radius: 0;
988
+ background-color: var(--glass-sidebar);
989
+ box-shadow: inset -1px 0 0 rgba(255, 255, 255, 0.58);
990
+ backdrop-filter: blur(28px) saturate(150%);
991
+ -webkit-backdrop-filter: blur(28px) saturate(150%);
992
+ }
993
+
994
+ .fixed.top-14.bottom-0.left-0 .w-64 {
995
+ width: 100%;
996
+ }
997
+
998
+ .fixed.top-14.bottom-0.left-0 .pt-6 {
999
+ padding-top: 1.15rem;
1000
+ }
1001
+
1002
+ .flex-1.overflow-auto {
1003
+ margin: 0;
1004
+ border: 0;
1005
+ border-radius: 0;
1006
+ background-color: transparent;
1007
+ box-shadow: none;
1008
+ }
1009
+
1010
+ .view-container {
1011
+ max-width: 1240px;
1012
+ padding: 1.75rem 2.25rem 2.75rem;
1013
+ }
1014
+
1015
+ .view-container > .flex.items-center.justify-between.gap-4.mb-6 {
1016
+ align-items: flex-start;
1017
+ margin-bottom: 1.4rem;
1018
+ }
1019
+
1020
+ .view-container h1 {
1021
+ font-size: 1.65rem;
1022
+ line-height: 1.15;
1023
+ font-weight: 650;
1024
+ }
1025
+
1026
+ .view-container > .flex .rounded-full,
1027
+ .view-container > .flex .rounded.bg-space-800\/80 {
1028
+ background-color: rgba(255, 255, 255, 0.68);
1029
+ border: 1px solid var(--glass-line);
1030
+ box-shadow: none;
1031
+ }
1032
+
1033
+ .nav-item {
1034
+ margin: 0 0.7rem;
1035
+ border: 1px solid transparent;
1036
+ border-radius: 9px;
1037
+ color: var(--text-muted);
1038
+ min-height: 40px;
1039
+ }
1040
+
1041
+ .nav-item svg {
1042
+ color: #69707a;
1043
+ }
1044
+
1045
+ .nav-item.active {
1046
+ background-color: rgba(255, 255, 255, 0.74);
1047
+ border: 1px solid rgba(255, 255, 255, 0.86);
1048
+ color: var(--text-strong);
1049
+ box-shadow: 0 1px 2px rgba(31, 35, 40, 0.06);
1050
+ }
1051
+
1052
+ .nav-item.active svg {
1053
+ color: var(--accent);
1054
+ }
1055
+
1056
+ .nav-item:hover {
1057
+ background-color: rgba(255, 255, 255, 0.5);
1058
+ color: var(--text-strong);
1059
+ }
1060
+
1061
+ .nav-item:focus,
1062
+ .btn:focus {
1063
+ outline: none;
1064
+ }
1065
+
1066
+ .nav-item:focus-visible,
1067
+ .btn:focus-visible,
1068
+ .input:focus,
1069
+ .input-search-sm:focus,
1070
+ select:focus {
1071
+ outline: none;
1072
+ box-shadow: 0 0 0 3px rgba(10, 132, 255, 0.2);
1073
+ }
1074
+
1075
+ .grid.grid-cols-2.sm\:grid-cols-4 {
1076
+ gap: 1.2rem;
1077
+ margin-bottom: 1.35rem;
1078
+ }
1079
+
1080
+ .dashboard-test-grid {
1081
+ display: grid;
1082
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1083
+ gap: 1.3rem;
1084
+ margin-bottom: 1.3rem;
1085
+ }
1086
+
1087
+ .dashboard-test-grid + .view-card {
1088
+ margin-top: 0;
1089
+ }
1090
+
1091
+ .view-card,
1092
+ .stat,
1093
+ .modal-box,
1094
+ .relative.bg-space-900 {
1095
+ background-color: var(--glass-surface);
1096
+ background-image: none;
1097
+ border: 1px solid rgba(255, 255, 255, 0.78);
1098
+ border-radius: var(--glass-radius);
1099
+ box-shadow: var(--glass-shadow);
1100
+ backdrop-filter: blur(24px) saturate(145%);
1101
+ -webkit-backdrop-filter: blur(24px) saturate(145%);
1102
+ }
1103
+
1104
+ .view-card {
1105
+ position: relative;
1106
+ overflow: hidden;
1107
+ padding: 1.4rem;
1108
+ }
1109
+
1110
+ .stat {
1111
+ min-height: 118px;
1112
+ overflow: hidden;
1113
+ padding: 1.25rem;
1114
+ }
1115
+
1116
+ .stat::before,
1117
+ .view-card::before {
1118
+ content: none;
1119
+ }
1120
+
1121
+ .stat:hover,
1122
+ .view-card:hover {
1123
+ border-color: rgba(255, 255, 255, 0.92);
1124
+ box-shadow: 0 20px 46px rgba(31, 35, 40, 0.13);
1125
+ }
1126
+
1127
+ .stat .absolute {
1128
+ color: #9ca3ad;
1129
+ }
1130
+
1131
+ .stat-value {
1132
+ color: var(--text-strong);
1133
+ font-size: 1.85rem;
1134
+ line-height: 1.05;
1135
+ }
1136
+
1137
+ .stat-title {
1138
+ color: var(--text-muted);
1139
+ font-size: 0.72rem;
1140
+ font-weight: 650;
1141
+ }
1142
+
1143
+ .stat-desc {
1144
+ color: var(--text-faint);
1145
+ font-size: 0.72rem;
1146
+ }
1147
+
1148
+ .input,
1149
+ .input-search-sm,
1150
+ select {
1151
+ background-color: rgba(255, 255, 255, 0.78);
1152
+ border: 1px solid var(--glass-line);
1153
+ border-radius: 8px;
1154
+ color: var(--text-strong);
1155
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.78);
1156
+ }
1157
+
1158
+ .view-card .flex.gap-3 {
1159
+ gap: 0.95rem;
1160
+ }
1161
+
1162
+ .input::placeholder,
1163
+ .input-search-sm::placeholder {
1164
+ color: #9299a3;
1165
+ }
1166
+
1167
+ .input:focus,
1168
+ .input-search-sm:focus,
1169
+ select:focus {
1170
+ border-color: rgba(10, 132, 255, 0.48);
1171
+ }
1172
+
1173
+ .btn {
1174
+ min-height: 32px;
1175
+ border-radius: 8px;
1176
+ border-color: var(--glass-line);
1177
+ background-color: rgba(255, 255, 255, 0.7);
1178
+ background-image: none;
1179
+ color: var(--text-body);
1180
+ box-shadow: 0 1px 1px rgba(31, 35, 40, 0.05);
1181
+ backdrop-filter: blur(16px) saturate(140%);
1182
+ -webkit-backdrop-filter: blur(16px) saturate(140%);
1183
+ }
1184
+
1185
+ .btn:hover {
1186
+ color: var(--text-strong);
1187
+ border-color: var(--glass-line-strong);
1188
+ background-color: rgba(255, 255, 255, 0.9);
1189
+ transform: none;
1190
+ }
1191
+
1192
+ .btn-outline,
1193
+ table .btn-outline {
1194
+ background-color: rgba(255, 255, 255, 0.58);
1195
+ border-color: var(--glass-line);
1196
+ color: var(--text-body);
1197
+ }
1198
+
1199
+ .btn-ghost,
1200
+ table .btn-ghost {
1201
+ background-color: transparent;
1202
+ border-color: transparent;
1203
+ color: var(--text-muted);
1204
+ box-shadow: none;
1205
+ }
1206
+
1207
+ .btn-ghost:hover,
1208
+ table .btn-ghost:hover {
1209
+ background-color: rgba(36, 41, 47, 0.06);
1210
+ color: var(--text-strong);
1211
+ }
1212
+
1213
+ .btn-primary,
1214
+ .bg-neon-purple,
1215
+ .bg-neon-cyan,
1216
+ .hover\:bg-purple-600:hover,
1217
+ .hover\:bg-cyan-600:hover {
1218
+ background-color: var(--accent);
1219
+ background-image: none;
1220
+ color: white;
1221
+ border-color: rgba(0, 0, 0, 0.04);
1222
+ box-shadow: 0 1px 1px rgba(31, 35, 40, 0.08);
1223
+ }
1224
+
1225
+ .bg-neon-purple:hover,
1226
+ .bg-neon-cyan:hover,
1227
+ .btn-primary:hover {
1228
+ background-color: var(--accent-pressed);
1229
+ color: white;
1230
+ }
1231
+
1232
+ .btn-success,
1233
+ .bg-neon-green {
1234
+ background-color: var(--success);
1235
+ color: white;
1236
+ border-color: rgba(0, 0, 0, 0.04);
1237
+ }
1238
+
1239
+ .btn-warning {
1240
+ background-color: #f4c469;
1241
+ color: #372500;
1242
+ border-color: rgba(0, 0, 0, 0.05);
1243
+ }
1244
+
1245
+ .btn-danger,
1246
+ .bg-red-500,
1247
+ .bg-red-600 {
1248
+ background-color: var(--danger);
1249
+ color: white;
1250
+ border-color: rgba(0, 0, 0, 0.04);
1251
+ }
1252
+
1253
+ .bg-neon-green\/10 {
1254
+ background-color: rgba(31, 143, 77, 0.1);
1255
+ }
1256
+
1257
+ .bg-neon-purple\/10,
1258
+ .bg-neon-purple\/20 {
1259
+ background-color: rgba(10, 132, 255, 0.1);
1260
+ }
1261
+
1262
+ .bg-yellow-500\/10 {
1263
+ background-color: rgba(165, 104, 0, 0.12);
1264
+ }
1265
+
1266
+ .bg-blue-500\/10 {
1267
+ background-color: rgba(10, 132, 255, 0.1);
1268
+ }
1269
+
1270
+ .bg-red-500\/10 {
1271
+ background-color: rgba(215, 0, 21, 0.1);
1272
+ }
1273
+
1274
+ .border-neon-purple\/20,
1275
+ .border-neon-purple\/30,
1276
+ .border-neon-purple\/50,
1277
+ .border-neon-cyan\/20,
1278
+ .border-blue-500\/30 {
1279
+ border-color: rgba(10, 132, 255, 0.24);
1280
+ }
1281
+
1282
+ .border-neon-green\/20 {
1283
+ border-color: rgba(31, 143, 77, 0.24);
1284
+ }
1285
+
1286
+ .border-yellow-500\/20,
1287
+ .border-yellow-500\/30,
1288
+ .border-yellow-500\/50 {
1289
+ border-color: rgba(165, 104, 0, 0.22);
1290
+ }
1291
+
1292
+ .border-red-500\/20,
1293
+ .border-red-500\/30,
1294
+ .border-red-500\/50 {
1295
+ border-color: rgba(215, 0, 21, 0.24);
1296
+ }
1297
+
1298
+ table {
1299
+ border-collapse: collapse;
1300
+ border-spacing: 0;
1301
+ }
1302
+
1303
+ .view-card.\!p-0 {
1304
+ padding: 0.85rem !important;
1305
+ }
1306
+
1307
+ thead tr,
1308
+ table tr {
1309
+ background-color: transparent;
1310
+ }
1311
+
1312
+ table tr:hover {
1313
+ background-color: rgba(36, 41, 47, 0.04);
1314
+ }
1315
+
1316
+ table th {
1317
+ color: var(--text-faint);
1318
+ font-weight: 650;
1319
+ padding-top: 0.9rem;
1320
+ padding-bottom: 0.9rem;
1321
+ }
1322
+
1323
+ table td,
1324
+ table th {
1325
+ border-color: var(--glass-line);
1326
+ padding-left: 1.05rem;
1327
+ padding-right: 1.05rem;
1328
+ }
1329
+
1330
+ table th:first-child,
1331
+ table td:first-child {
1332
+ width: 124px;
1333
+ min-width: 124px;
1334
+ }
1335
+
1336
+ table .bg-gray-700,
1337
+ .bg-gray-700 {
1338
+ background-color: rgba(36, 41, 47, 0.16);
1339
+ }
1340
+
1341
+ #logs-container {
1342
+ background-color: rgba(255, 255, 255, 0.58);
1343
+ color: var(--text-body);
1344
+ border-radius: 10px;
1345
+ border: 1px solid var(--glass-line);
1346
+ }
1347
+
1348
+ .view-card .bg-space-800\/50.border {
1349
+ background-color: rgba(248, 249, 251, 0.78);
1350
+ }
1351
+
1352
+ .view-card .font-mono.text-sm.text-gray-300.bg-space-800\/50 {
1353
+ background-color: rgba(255, 255, 255, 0.64);
1354
+ color: var(--text-body);
1355
+ border-color: var(--glass-line);
1356
+ }
1357
+
1358
+ .view-card .font-mono.text-sm.text-gray-300.bg-space-800\/50 .text-gray-500 {
1359
+ color: var(--text-faint);
1360
+ }
1361
+
1362
+ .view-card .font-mono.text-sm.text-gray-300.bg-space-800\/50 .text-neon-cyan {
1363
+ color: var(--accent);
1364
+ }
1365
+
1366
+ .view-card .font-mono.text-sm.text-gray-300.bg-space-800\/50 .text-neon-green {
1367
+ color: var(--success);
1368
+ }
1369
+
1370
+ .alert {
1371
+ background-color: rgba(255, 255, 255, 0.86);
1372
+ border-color: var(--glass-line);
1373
+ color: var(--text-body);
1374
+ box-shadow: var(--glass-shadow);
1375
+ }
1376
+
1377
+ .custom-scrollbar::-webkit-scrollbar-thumb {
1378
+ background-color: rgba(104, 112, 125, 0.36);
1379
+ border-radius: 999px;
1380
+ }
1381
+
1382
+ .custom-scrollbar::-webkit-scrollbar-thumb:hover {
1383
+ background-color: rgba(104, 112, 125, 0.52);
1384
+ }
1385
+
1386
+ dialog::backdrop,
1387
+ .absolute.inset-0.bg-black\/70,
1388
+ .bg-black\/50,
1389
+ .bg-black\/70 {
1390
+ background-color: rgba(31, 35, 40, 0.26);
1391
+ backdrop-filter: blur(18px);
1392
+ -webkit-backdrop-filter: blur(18px);
1393
+ }
1394
+
1395
+ @media (min-width: 1024px) {
1396
+ .fixed.top-14.bottom-0.left-0 {
1397
+ position: static;
1398
+ flex-shrink: 0;
1399
+ height: auto;
1400
+ }
1401
+
1402
+ .view-container {
1403
+ padding: 2rem 2.5rem 3rem;
1404
+ }
1405
+ }
1406
+
1407
+ @media (max-width: 1023px) {
1408
+ .fixed.top-14.bottom-0.left-0 {
1409
+ top: 60px;
1410
+ width: min(18rem, 86vw);
1411
+ box-shadow: 18px 0 36px rgba(31, 35, 40, 0.14);
1412
+ }
1413
+
1414
+ .fixed.top-14.bottom-0.left-0.-translate-x-full {
1415
+ --tw-translate-x: calc(-100% - 18px);
1416
+ }
1417
+
1418
+ .view-container {
1419
+ padding: 1.25rem;
1420
+ }
1421
+ }
1422
+
1423
+ @media (max-width: 900px) {
1424
+ .dashboard-test-grid {
1425
+ grid-template-columns: 1fr;
1426
+ }
1427
+ }
1428
+
1429
+ @media (max-width: 640px) {
1430
+ .h-14.border-b {
1431
+ height: 58px;
1432
+ padding-left: 0.75rem;
1433
+ padding-right: 0.75rem;
1434
+ }
1435
+
1436
+ .h-14.border-b > .flex:first-child {
1437
+ min-width: 0;
1438
+ gap: 0.55rem;
1439
+ }
1440
+
1441
+ .h-14.border-b .w-8.h-8 {
1442
+ width: 1.75rem;
1443
+ height: 1.75rem;
1444
+ flex-shrink: 0;
1445
+ }
1446
+
1447
+ .h-14.border-b .flex-col > .flex.flex-col {
1448
+ display: none;
1449
+ }
1450
+
1451
+ .app-brand-meta,
1452
+ .app-toolbar-github {
1453
+ display: none;
1454
+ }
1455
+
1456
+ .h-14.border-b .text-sm {
1457
+ font-size: 0.8rem;
1458
+ white-space: nowrap;
1459
+ }
1460
+
1461
+ .h-14.border-b > .flex:last-child {
1462
+ gap: 0.45rem;
1463
+ flex-shrink: 0;
1464
+ }
1465
+
1466
+ .h-14.border-b .h-4.w-px,
1467
+ .h-14.border-b button[title="Refresh data"] {
1468
+ display: none;
1469
+ }
1470
+
1471
+ .h-14.border-b .rounded-full.text-xs {
1472
+ padding: 0.3rem 0.55rem;
1473
+ font-size: 0.68rem;
1474
+ }
1475
+
1476
+ .view-container {
1477
+ padding: 1rem;
1478
+ }
1479
+
1480
+ .view-container > .flex.items-center.justify-between.gap-4.mb-6 {
1481
+ flex-direction: column;
1482
+ }
1483
+
1484
+ .dashboard-test-grid .flex.gap-3,
1485
+ .view-card > .flex.gap-3 {
1486
+ flex-direction: column;
1487
+ }
1488
+
1489
+ .dashboard-test-grid .btn,
1490
+ .view-card > .flex.gap-3 .btn {
1491
+ width: 100%;
1492
+ }
1493
+ }
1494
+
1495
+ @media (prefers-reduced-motion: reduce) {
1496
+ *,
1497
+ *::before,
1498
+ *::after {
1499
+ animation-duration: 0.001ms !important;
1500
+ transition-duration: 0.001ms !important;
1501
+ }
1502
+ }