@pikoloo/codex-proxy 1.0.6 → 1.1.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.
@@ -13,6 +13,12 @@
13
13
  --color-neon-yellow: #eab308;
14
14
  --color-text-dim: #9ca3af;
15
15
  --color-surface-glow: rgba(34, 211, 238, 0.06);
16
+ --app-header-height: 48px;
17
+ --surface-nav: rgba(15, 15, 26, 0.88);
18
+ --surface-nav-border: rgba(255, 255, 255, 0.12);
19
+ --surface-nav-active: rgba(255, 255, 255, 0.1);
20
+ --surface-nav-glow: 0 18px 38px rgba(0, 0, 0, 0.32);
21
+ --surface-nav-accent: var(--color-neon-cyan);
16
22
  }
17
23
 
18
24
  * { margin: 0; padding: 0; box-sizing: border-box; }
@@ -83,6 +89,503 @@ body::before {
83
89
  color: white;
84
90
  }
85
91
 
92
+ .app-header {
93
+ height: var(--app-header-height);
94
+ min-height: var(--app-header-height);
95
+ }
96
+
97
+ .app-brand {
98
+ min-width: 0;
99
+ }
100
+
101
+ .app-brand-mark {
102
+ width: 1.75rem;
103
+ height: 1.75rem;
104
+ border-radius: 8px;
105
+ font-size: 0.72rem;
106
+ letter-spacing: 0;
107
+ }
108
+
109
+ .app-brand-title {
110
+ white-space: nowrap;
111
+ font-size: 0.75rem;
112
+ letter-spacing: 0;
113
+ }
114
+
115
+ .app-brand-meta {
116
+ height: 1.15rem;
117
+ padding: 0 0.38rem;
118
+ font-size: 0.62rem;
119
+ }
120
+
121
+ .app-toolbar {
122
+ gap: 0.5rem;
123
+ }
124
+
125
+ .app-connection-status {
126
+ min-height: 1.55rem;
127
+ padding: 0.18rem 0.55rem;
128
+ font-size: 0.68rem;
129
+ }
130
+
131
+ .app-header-action {
132
+ width: 1.8rem;
133
+ min-height: 1.8rem;
134
+ padding: 0;
135
+ }
136
+
137
+ .app-toolbar-divider {
138
+ height: 1rem;
139
+ }
140
+
141
+ .section-header,
142
+ .section-heading,
143
+ .section-actions {
144
+ min-width: 0;
145
+ }
146
+
147
+ .section-heading {
148
+ flex: 1 1 auto;
149
+ }
150
+
151
+ .section-actions {
152
+ flex: 0 1 auto;
153
+ max-width: 100%;
154
+ }
155
+
156
+ .accounts-actions,
157
+ .logs-count-strip,
158
+ .metrics-range-controls {
159
+ flex-wrap: nowrap;
160
+ }
161
+
162
+ .account-search {
163
+ flex: 0 1 12rem;
164
+ min-width: 8rem;
165
+ }
166
+
167
+ .account-search .input-search-sm {
168
+ width: 100%;
169
+ }
170
+
171
+ .account-count-pill {
172
+ flex: 0 0 auto;
173
+ white-space: nowrap;
174
+ }
175
+
176
+ .quota-reset-summary {
177
+ display: inline-flex;
178
+ white-space: nowrap;
179
+ line-height: 1.2;
180
+ }
181
+
182
+ .action-label {
183
+ white-space: nowrap;
184
+ }
185
+
186
+ .app-shell {
187
+ height: calc(100vh - var(--app-header-height));
188
+ position: relative;
189
+ }
190
+
191
+ .app-main {
192
+ height: 100%;
193
+ padding-bottom: 5.8rem;
194
+ }
195
+
196
+ .bottom-nav {
197
+ position: fixed;
198
+ left: 50%;
199
+ bottom: max(0.85rem, env(safe-area-inset-bottom));
200
+ z-index: 45;
201
+ display: flex;
202
+ align-items: center;
203
+ justify-content: center;
204
+ gap: 0.18rem;
205
+ width: min(700px, calc(100vw - 1.5rem));
206
+ min-height: 52px;
207
+ padding: 0.28rem;
208
+ border: 1px solid var(--surface-nav-border);
209
+ border-radius: 16px;
210
+ background: var(--surface-nav);
211
+ box-shadow: var(--surface-nav-glow);
212
+ backdrop-filter: blur(22px) saturate(150%);
213
+ -webkit-backdrop-filter: blur(22px) saturate(150%);
214
+ transform: translateX(-50%);
215
+ }
216
+
217
+ .bottom-nav::before {
218
+ content: "";
219
+ position: absolute;
220
+ inset: 0;
221
+ z-index: -1;
222
+ border-radius: inherit;
223
+ background: rgba(255, 255, 255, 0.035);
224
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08);
225
+ }
226
+
227
+ .bottom-nav-item {
228
+ position: relative;
229
+ display: inline-flex;
230
+ align-items: center;
231
+ justify-content: center;
232
+ gap: 0.38rem;
233
+ min-width: 44px;
234
+ min-height: 42px;
235
+ padding: 0 0.68rem;
236
+ border: 1px solid transparent;
237
+ border-radius: 12px;
238
+ color: #9ca3af;
239
+ font-size: 0.78rem;
240
+ font-weight: 650;
241
+ transition: background 0.18s ease, color 0.18s ease, transform 0.18s ease, box-shadow 0.18s ease;
242
+ }
243
+
244
+ .bottom-nav-item::after {
245
+ content: "";
246
+ position: absolute;
247
+ left: 50%;
248
+ bottom: 0.32rem;
249
+ width: 1.15rem;
250
+ height: 2px;
251
+ border-radius: 999px;
252
+ background: var(--surface-nav-accent);
253
+ opacity: 0;
254
+ transform: translateX(-50%) scaleX(0.65);
255
+ transition: opacity 0.18s ease, transform 0.18s ease;
256
+ }
257
+
258
+ .bottom-nav-item:hover {
259
+ color: #f8fafc;
260
+ background: rgba(255, 255, 255, 0.07);
261
+ }
262
+
263
+ .bottom-nav-item.active {
264
+ color: white;
265
+ background: var(--surface-nav-active);
266
+ border-color: rgba(255, 255, 255, 0.12);
267
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.13), 0 8px 20px rgba(0, 0, 0, 0.14);
268
+ }
269
+
270
+ .bottom-nav-item.active::after {
271
+ opacity: 1;
272
+ transform: translateX(-50%) scaleX(1);
273
+ }
274
+
275
+ .bottom-nav-icon {
276
+ display: inline-flex;
277
+ align-items: center;
278
+ justify-content: center;
279
+ flex: 0 0 auto;
280
+ }
281
+
282
+ .bottom-nav-label {
283
+ display: none;
284
+ white-space: nowrap;
285
+ }
286
+
287
+ .bottom-nav-badge {
288
+ min-width: 1.4rem;
289
+ max-width: 3.4rem;
290
+ overflow: hidden;
291
+ text-overflow: ellipsis;
292
+ padding: 0.1rem 0.35rem;
293
+ border-radius: 999px;
294
+ border: 1px solid rgba(255, 255, 255, 0.08);
295
+ background: rgba(255, 255, 255, 0.08);
296
+ color: currentColor;
297
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
298
+ font-size: 0.65rem;
299
+ line-height: 1.1;
300
+ text-align: center;
301
+ }
302
+
303
+ .quick-test-meta {
304
+ display: flex;
305
+ flex-wrap: wrap;
306
+ align-items: center;
307
+ gap: 0.45rem;
308
+ min-height: 1.65rem;
309
+ margin-top: 0.75rem;
310
+ color: #9ca3af;
311
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
312
+ font-size: 0.72rem;
313
+ }
314
+
315
+ .quick-test-meta span:not(.quick-test-dot) {
316
+ display: inline-flex;
317
+ align-items: center;
318
+ min-height: 1.25rem;
319
+ padding: 0.12rem 0.45rem;
320
+ border-radius: 999px;
321
+ background: rgba(255, 255, 255, 0.04);
322
+ border: 1px solid rgba(255, 255, 255, 0.06);
323
+ }
324
+
325
+ .quick-test-dot {
326
+ width: 0.55rem;
327
+ height: 0.55rem;
328
+ border-radius: 999px;
329
+ background: #71717a;
330
+ }
331
+
332
+ .quick-test-dot.is-running {
333
+ background: var(--color-neon-cyan);
334
+ animation: pulse 1.15s ease-in-out infinite;
335
+ }
336
+
337
+ .quick-test-dot.is-success { background: var(--color-neon-green); }
338
+ .quick-test-dot.is-error { background: #ef4444; }
339
+
340
+ .logs-view {
341
+ height: 100%;
342
+ }
343
+
344
+ .logs-count-strip {
345
+ display: flex;
346
+ align-items: center;
347
+ gap: 0.5rem;
348
+ color: #9ca3af;
349
+ font-size: 0.72rem;
350
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
351
+ }
352
+
353
+ .logs-count-strip span,
354
+ .log-stream-status {
355
+ display: inline-flex;
356
+ align-items: center;
357
+ gap: 0.35rem;
358
+ min-height: 1.55rem;
359
+ padding: 0.15rem 0.55rem;
360
+ border: 1px solid rgba(255, 255, 255, 0.08);
361
+ border-radius: 999px;
362
+ background: rgba(255, 255, 255, 0.05);
363
+ }
364
+
365
+ .log-stream-status {
366
+ color: var(--color-neon-cyan);
367
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
368
+ font-size: 0.72rem;
369
+ font-weight: 650;
370
+ }
371
+
372
+ .log-stream-dot {
373
+ width: 0.45rem;
374
+ height: 0.45rem;
375
+ border-radius: 999px;
376
+ background: currentColor;
377
+ }
378
+
379
+ .log-stream-status.is-connected .log-stream-dot {
380
+ animation: pulse 1.4s ease-in-out infinite;
381
+ }
382
+
383
+ .log-stream-status.is-disconnected {
384
+ color: #eab308;
385
+ }
386
+
387
+ .logs-shell {
388
+ flex: 1 1 auto;
389
+ overflow: hidden;
390
+ }
391
+
392
+ .logs-toolbar {
393
+ display: grid;
394
+ grid-template-columns: minmax(220px, 1fr) auto auto;
395
+ align-items: center;
396
+ gap: 0.75rem;
397
+ padding: 0.85rem;
398
+ border-bottom: 1px solid rgba(42, 42, 62, 0.55);
399
+ background: rgba(15, 15, 26, 0.72);
400
+ }
401
+
402
+ .logs-search {
403
+ display: flex;
404
+ align-items: center;
405
+ gap: 0.45rem;
406
+ min-width: 0;
407
+ height: 34px;
408
+ padding: 0 0.65rem;
409
+ border: 1px solid var(--color-space-border);
410
+ border-radius: 8px;
411
+ color: #9ca3af;
412
+ background: rgba(10, 10, 15, 0.58);
413
+ }
414
+
415
+ .logs-search-input {
416
+ width: 100%;
417
+ min-width: 0;
418
+ border: 0;
419
+ outline: 0;
420
+ background: transparent;
421
+ color: #e5e7eb;
422
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
423
+ font-size: 0.76rem;
424
+ }
425
+
426
+ .logs-filter-row {
427
+ display: flex;
428
+ align-items: center;
429
+ gap: 0.35rem;
430
+ min-width: 0;
431
+ overflow-x: auto;
432
+ }
433
+
434
+ .logs-filter-chip {
435
+ display: inline-flex;
436
+ align-items: center;
437
+ gap: 0.35rem;
438
+ height: 30px;
439
+ padding: 0 0.55rem;
440
+ border: 1px solid rgba(255, 255, 255, 0.08);
441
+ border-radius: 999px;
442
+ color: #9ca3af;
443
+ cursor: pointer;
444
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
445
+ font-size: 0.68rem;
446
+ font-weight: 700;
447
+ opacity: 0.72;
448
+ user-select: none;
449
+ white-space: nowrap;
450
+ }
451
+
452
+ .logs-filter-chip input {
453
+ width: 0;
454
+ height: 0;
455
+ opacity: 0;
456
+ position: absolute;
457
+ }
458
+
459
+ .logs-filter-chip.active {
460
+ opacity: 1;
461
+ background: rgba(255, 255, 255, 0.07);
462
+ }
463
+
464
+ .logs-filter-chip.is-info.active { color: #60a5fa; border-color: rgba(96, 165, 250, 0.35); }
465
+ .logs-filter-chip.is-success.active { color: #34d399; border-color: rgba(52, 211, 153, 0.35); }
466
+ .logs-filter-chip.is-warn.active { color: #f59e0b; border-color: rgba(245, 158, 11, 0.35); }
467
+ .logs-filter-chip.is-error.active { color: #f87171; border-color: rgba(248, 113, 113, 0.35); }
468
+ .logs-filter-chip.is-debug.active { color: #c084fc; border-color: rgba(192, 132, 252, 0.35); }
469
+
470
+ .logs-filter-count {
471
+ min-width: 1.05rem;
472
+ text-align: center;
473
+ color: currentColor;
474
+ opacity: 0.72;
475
+ }
476
+
477
+ .logs-clear-button {
478
+ white-space: nowrap;
479
+ }
480
+
481
+ .logs-grid {
482
+ flex: 1 1 auto;
483
+ overflow: auto;
484
+ background: rgba(10, 10, 15, 0.9);
485
+ color: #d4d4d8;
486
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
487
+ font-size: 0.72rem;
488
+ }
489
+
490
+ .logs-grid-head,
491
+ .logs-row {
492
+ display: grid;
493
+ grid-template-columns: 6.5rem 5.6rem minmax(14rem, 1fr) minmax(13rem, 0.7fr);
494
+ gap: 0.75rem;
495
+ align-items: start;
496
+ }
497
+
498
+ .logs-grid-head {
499
+ position: sticky;
500
+ top: 0;
501
+ z-index: 1;
502
+ padding: 0.6rem 0.85rem;
503
+ border-bottom: 1px solid rgba(255, 255, 255, 0.08);
504
+ background: rgba(15, 15, 26, 0.96);
505
+ color: #71717a;
506
+ font-size: 0.65rem;
507
+ font-weight: 800;
508
+ text-transform: uppercase;
509
+ }
510
+
511
+ .logs-row {
512
+ min-height: 34px;
513
+ padding: 0.48rem 0.85rem;
514
+ border-bottom: 1px solid rgba(255, 255, 255, 0.055);
515
+ }
516
+
517
+ .logs-row:hover {
518
+ background: rgba(255, 255, 255, 0.04);
519
+ }
520
+
521
+ .logs-time {
522
+ color: #71717a;
523
+ white-space: nowrap;
524
+ }
525
+
526
+ .logs-level {
527
+ display: inline-flex;
528
+ align-items: center;
529
+ justify-content: center;
530
+ width: max-content;
531
+ min-width: 4.6rem;
532
+ height: 1.35rem;
533
+ padding: 0 0.4rem;
534
+ border-radius: 5px;
535
+ border: 1px solid currentColor;
536
+ font-size: 0.64rem;
537
+ font-weight: 800;
538
+ line-height: 1;
539
+ }
540
+
541
+ .logs-row.is-info .logs-level { color: #60a5fa; background: rgba(96, 165, 250, 0.1); }
542
+ .logs-row.is-success .logs-level { color: #34d399; background: rgba(52, 211, 153, 0.1); }
543
+ .logs-row.is-warn .logs-level { color: #f59e0b; background: rgba(245, 158, 11, 0.1); }
544
+ .logs-row.is-error .logs-level { color: #f87171; background: rgba(248, 113, 113, 0.1); }
545
+ .logs-row.is-debug .logs-level { color: #c084fc; background: rgba(192, 132, 252, 0.1); }
546
+
547
+ .logs-message {
548
+ min-width: 0;
549
+ overflow-wrap: anywhere;
550
+ color: #e5e7eb;
551
+ }
552
+
553
+ .logs-details {
554
+ min-width: 0;
555
+ }
556
+
557
+ .logs-detail-list {
558
+ display: flex;
559
+ flex-wrap: wrap;
560
+ gap: 0.3rem;
561
+ }
562
+
563
+ .logs-detail-pill {
564
+ display: inline-flex;
565
+ align-items: center;
566
+ gap: 0.2rem;
567
+ max-width: 100%;
568
+ overflow: hidden;
569
+ text-overflow: ellipsis;
570
+ padding: 0.1rem 0.38rem;
571
+ border: 1px solid rgba(255, 255, 255, 0.08);
572
+ border-radius: 5px;
573
+ color: #a1a1aa;
574
+ background: rgba(255, 255, 255, 0.045);
575
+ white-space: nowrap;
576
+ }
577
+
578
+ .logs-detail-pill strong {
579
+ color: #d4d4d8;
580
+ font-weight: 700;
581
+ }
582
+
583
+ .logs-empty {
584
+ padding: 2rem;
585
+ color: #71717a;
586
+ text-align: center;
587
+ }
588
+
86
589
  .view-container {
87
590
  padding: 1.5rem;
88
591
  max-width: 1400px;
@@ -251,6 +754,63 @@ select:focus {
251
754
  border-color: var(--color-neon-purple);
252
755
  }
253
756
 
757
+ .model-mapping-list {
758
+ display: grid;
759
+ gap: 0.75rem;
760
+ }
761
+
762
+ .model-mapping-row {
763
+ display: grid;
764
+ grid-template-columns: minmax(0, 1fr) minmax(22rem, 32rem);
765
+ align-items: center;
766
+ gap: 1rem;
767
+ padding: 1rem;
768
+ border: 1px solid rgba(36, 41, 47, 0.16);
769
+ border-radius: 0.625rem;
770
+ background: rgba(255, 255, 255, 0.42);
771
+ }
772
+
773
+ .model-mapping-copy {
774
+ min-width: 0;
775
+ }
776
+
777
+ .model-mapping-controls {
778
+ display: grid;
779
+ grid-template-columns: minmax(13rem, 1fr) minmax(9rem, 0.72fr);
780
+ gap: 0.75rem;
781
+ }
782
+
783
+ .model-mapping-field {
784
+ display: grid;
785
+ gap: 0.35rem;
786
+ min-width: 0;
787
+ }
788
+
789
+ .model-mapping-field > span {
790
+ color: var(--text-faint);
791
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
792
+ font-size: 0.68rem;
793
+ }
794
+
795
+ .model-mapping-select {
796
+ width: 100%;
797
+ min-height: 2.25rem;
798
+ background-color: rgba(255, 255, 255, 0.82);
799
+ color: var(--text-strong);
800
+ color-scheme: light;
801
+ }
802
+
803
+ @media (max-width: 700px) {
804
+ .model-mapping-row {
805
+ grid-template-columns: 1fr;
806
+ gap: 0.75rem;
807
+ }
808
+
809
+ .model-mapping-controls {
810
+ grid-template-columns: 1fr;
811
+ }
812
+ }
813
+
254
814
  dialog {
255
815
  background: transparent;
256
816
  color: #e5e7eb;
@@ -821,6 +1381,12 @@ table .btn-outline:hover {
821
1381
  --success: #1f8f4d;
822
1382
  --warning: #a56800;
823
1383
  --danger: #d70015;
1384
+ --app-header-height: 48px;
1385
+ --surface-nav: rgba(248, 249, 251, 0.86);
1386
+ --surface-nav-border: rgba(36, 41, 47, 0.12);
1387
+ --surface-nav-active: rgba(255, 255, 255, 0.9);
1388
+ --surface-nav-glow: 0 14px 32px rgba(31, 35, 40, 0.12);
1389
+ --surface-nav-accent: var(--accent);
824
1390
  }
825
1391
 
826
1392
  body {
@@ -912,69 +1478,142 @@ body::after {
912
1478
  }
913
1479
 
914
1480
  .h-14.border-b {
915
- height: 60px;
1481
+ height: var(--app-header-height);
1482
+ min-height: var(--app-header-height);
916
1483
  margin: 0;
917
1484
  border: 0;
918
1485
  border-bottom: 1px solid var(--glass-line);
919
1486
  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%);
1487
+ background-color: rgba(249, 250, 252, 0.9);
1488
+ box-shadow: 0 1px 0 rgba(255, 255, 255, 0.7), 0 8px 24px rgba(31, 35, 40, 0.035);
1489
+ backdrop-filter: blur(20px) saturate(155%);
1490
+ -webkit-backdrop-filter: blur(20px) saturate(155%);
924
1491
  }
925
1492
 
926
- .h-14.border-b .w-8.h-8 {
1493
+ .h-14.border-b .app-brand-mark {
1494
+ width: 1.65rem;
1495
+ height: 1.65rem;
927
1496
  background-color: #1f2328;
928
1497
  background-image: none;
929
- border-radius: 8px;
1498
+ border-radius: 7px;
930
1499
  box-shadow: none;
931
1500
  color: white;
932
1501
  }
933
1502
 
934
- .app-brand {
935
- min-width: 0;
1503
+ .app-brand {
1504
+ min-width: 0;
1505
+ }
1506
+
1507
+ .app-brand-copy {
1508
+ min-width: 0;
1509
+ line-height: 1;
1510
+ }
1511
+
1512
+ .app-brand-title {
1513
+ white-space: nowrap;
1514
+ font-size: 0.72rem;
1515
+ font-weight: 750;
1516
+ }
1517
+
1518
+ .app-brand-meta {
1519
+ display: inline-flex;
1520
+ align-items: center;
1521
+ height: 18px;
1522
+ padding: 0 0.42rem;
1523
+ border: 1px solid var(--glass-line);
1524
+ border-radius: 6px;
1525
+ background-color: rgba(255, 255, 255, 0.58);
1526
+ color: var(--text-muted);
1527
+ font-size: 0.62rem;
1528
+ }
1529
+
1530
+ .app-toolbar {
1531
+ gap: 0.5rem;
1532
+ }
1533
+
1534
+ .app-toolbar .btn-square {
1535
+ width: 28px;
1536
+ min-height: 28px;
1537
+ padding: 0;
1538
+ }
1539
+
1540
+ .app-connection-status {
1541
+ min-height: 26px;
1542
+ padding: 0.18rem 0.55rem;
1543
+ border-radius: 7px;
1544
+ font-size: 0.68rem;
1545
+ }
1546
+
1547
+ .app-toolbar-divider {
1548
+ height: 14px;
1549
+ opacity: 0.72;
1550
+ }
1551
+
1552
+ .h-14.border-b a {
1553
+ color: var(--text-muted);
1554
+ }
1555
+
1556
+ .h-14.border-b a:hover {
1557
+ color: var(--accent);
1558
+ }
1559
+
1560
+ .h-\[calc\(100vh-56px\)\] {
1561
+ height: calc(100vh - var(--app-header-height));
1562
+ }
1563
+
1564
+ .app-shell {
1565
+ height: calc(100vh - var(--app-header-height));
1566
+ }
1567
+
1568
+ .bottom-nav {
1569
+ color: var(--text-body);
1570
+ box-shadow: var(--surface-nav-glow), inset 0 1px 0 rgba(255, 255, 255, 0.75);
1571
+ }
1572
+
1573
+ .bottom-nav::before {
1574
+ background: rgba(255, 255, 255, 0.36);
1575
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.62);
936
1576
  }
937
1577
 
938
- .app-brand-copy {
939
- min-width: 0;
940
- line-height: 1;
1578
+ .bottom-nav-item {
1579
+ color: var(--text-muted);
941
1580
  }
942
1581
 
943
- .app-brand-title {
944
- white-space: nowrap;
1582
+ .bottom-nav-item:hover {
1583
+ color: var(--text-strong);
1584
+ background: rgba(36, 41, 47, 0.045);
945
1585
  }
946
1586
 
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);
1587
+ .bottom-nav-item.active {
1588
+ color: var(--text-strong);
1589
+ border-color: rgba(36, 41, 47, 0.1);
1590
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.96), 0 3px 10px rgba(31, 35, 40, 0.08);
956
1591
  }
957
1592
 
958
- .app-toolbar {
959
- gap: 0.7rem;
1593
+ .bottom-nav-item.active svg {
1594
+ color: var(--accent);
960
1595
  }
961
1596
 
962
- .app-toolbar .btn-square {
963
- width: 32px;
964
- min-height: 32px;
965
- padding: 0;
1597
+ .bottom-nav-badge,
1598
+ .quick-test-meta span:not(.quick-test-dot),
1599
+ .logs-count-strip span,
1600
+ .log-stream-status {
1601
+ border-color: var(--glass-line);
1602
+ background: rgba(255, 255, 255, 0.66);
966
1603
  }
967
1604
 
968
- .h-14.border-b a {
1605
+ .bottom-nav-badge {
969
1606
  color: var(--text-muted);
970
1607
  }
971
1608
 
972
- .h-14.border-b a:hover {
1609
+ .bottom-nav-item.active .bottom-nav-badge {
973
1610
  color: var(--accent);
1611
+ border-color: rgba(10, 132, 255, 0.14);
1612
+ background: rgba(10, 132, 255, 0.06);
974
1613
  }
975
1614
 
976
- .h-\[calc\(100vh-56px\)\] {
977
- height: calc(100vh - 60px);
1615
+ .quick-test-meta {
1616
+ color: var(--text-muted);
978
1617
  }
979
1618
 
980
1619
  .fixed.top-14.bottom-0.left-0 {
@@ -1189,6 +1828,11 @@ select:focus {
1189
1828
  transform: none;
1190
1829
  }
1191
1830
 
1831
+ .hover\:text-white:hover,
1832
+ .group:hover .group-hover\:text-white {
1833
+ color: var(--text-strong);
1834
+ }
1835
+
1192
1836
  .btn-outline,
1193
1837
  table .btn-outline {
1194
1838
  background-color: rgba(255, 255, 255, 0.58);
@@ -1345,6 +1989,72 @@ table .bg-gray-700,
1345
1989
  border: 1px solid var(--glass-line);
1346
1990
  }
1347
1991
 
1992
+ .logs-toolbar {
1993
+ background-color: rgba(255, 255, 255, 0.58);
1994
+ border-color: var(--glass-line);
1995
+ }
1996
+
1997
+ .logs-search {
1998
+ background-color: rgba(255, 255, 255, 0.78);
1999
+ border-color: var(--glass-line);
2000
+ color: var(--text-muted);
2001
+ }
2002
+
2003
+ .logs-search-input {
2004
+ color: var(--text-strong);
2005
+ }
2006
+
2007
+ .logs-filter-chip {
2008
+ border-color: var(--glass-line);
2009
+ color: var(--text-muted);
2010
+ background-color: rgba(255, 255, 255, 0.38);
2011
+ }
2012
+
2013
+ .logs-filter-chip.active {
2014
+ background-color: rgba(255, 255, 255, 0.72);
2015
+ }
2016
+
2017
+ .logs-grid {
2018
+ background-color: rgba(255, 255, 255, 0.5);
2019
+ color: var(--text-body);
2020
+ }
2021
+
2022
+ .logs-grid-head {
2023
+ background-color: rgba(248, 249, 251, 0.94);
2024
+ border-color: var(--glass-line);
2025
+ color: var(--text-faint);
2026
+ }
2027
+
2028
+ .logs-row {
2029
+ border-color: var(--glass-line);
2030
+ }
2031
+
2032
+ .logs-row:hover {
2033
+ background-color: rgba(36, 41, 47, 0.04);
2034
+ }
2035
+
2036
+ .logs-time {
2037
+ color: var(--text-faint);
2038
+ }
2039
+
2040
+ .logs-message {
2041
+ color: var(--text-body);
2042
+ }
2043
+
2044
+ .logs-detail-pill {
2045
+ background-color: rgba(255, 255, 255, 0.7);
2046
+ border-color: var(--glass-line);
2047
+ color: var(--text-muted);
2048
+ }
2049
+
2050
+ .logs-detail-pill strong {
2051
+ color: var(--text-strong);
2052
+ }
2053
+
2054
+ .logs-empty {
2055
+ color: var(--text-faint);
2056
+ }
2057
+
1348
2058
  .view-card .bg-space-800\/50.border {
1349
2059
  background-color: rgba(248, 249, 251, 0.78);
1350
2060
  }
@@ -1367,6 +2077,196 @@ table .bg-gray-700,
1367
2077
  color: var(--success);
1368
2078
  }
1369
2079
 
2080
+ .nav-count {
2081
+ min-width: 2rem;
2082
+ padding: 0.12rem 0.4rem;
2083
+ border-radius: 999px;
2084
+ background: rgba(255, 255, 255, 0.6);
2085
+ border: 1px solid var(--glass-line);
2086
+ color: var(--text-muted);
2087
+ font-size: 0.68rem;
2088
+ line-height: 1.1;
2089
+ text-align: center;
2090
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
2091
+ }
2092
+
2093
+ .metrics-range-controls {
2094
+ display: inline-flex;
2095
+ align-items: center;
2096
+ gap: 0.35rem;
2097
+ padding: 0.25rem;
2098
+ border: 1px solid var(--glass-line);
2099
+ border-radius: 10px;
2100
+ background: rgba(255, 255, 255, 0.56);
2101
+ }
2102
+
2103
+ .metrics-range-button {
2104
+ min-width: 2.6rem;
2105
+ padding: 0.38rem 0.65rem;
2106
+ border-radius: 7px;
2107
+ color: var(--text-muted);
2108
+ font-size: 0.76rem;
2109
+ font-weight: 600;
2110
+ }
2111
+
2112
+ .metrics-range-button.active {
2113
+ color: var(--text-strong);
2114
+ background: rgba(255, 255, 255, 0.9);
2115
+ box-shadow: 0 1px 2px rgba(31, 35, 40, 0.08);
2116
+ }
2117
+
2118
+ .metrics-grid {
2119
+ display: grid;
2120
+ grid-template-columns: minmax(0, 1fr);
2121
+ gap: 1.25rem;
2122
+ }
2123
+
2124
+ @media (min-width: 980px) {
2125
+ .metrics-grid {
2126
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2127
+ }
2128
+ }
2129
+
2130
+ .metrics-panel {
2131
+ min-width: 0;
2132
+ }
2133
+
2134
+ .metrics-panel-header,
2135
+ .metrics-table-toolbar {
2136
+ display: flex;
2137
+ align-items: center;
2138
+ justify-content: space-between;
2139
+ gap: 1rem;
2140
+ margin-bottom: 1rem;
2141
+ }
2142
+
2143
+ .metrics-table-toolbar {
2144
+ margin: 0;
2145
+ padding: 1rem 1.25rem;
2146
+ border-bottom: 1px solid var(--glass-line);
2147
+ }
2148
+
2149
+ .metrics-panel-header h3,
2150
+ .metrics-table-toolbar h3 {
2151
+ color: var(--text-strong);
2152
+ font-size: 0.78rem;
2153
+ font-weight: 700;
2154
+ letter-spacing: 0.06em;
2155
+ text-transform: uppercase;
2156
+ }
2157
+
2158
+ .metrics-muted {
2159
+ color: var(--text-faint);
2160
+ font-size: 0.72rem;
2161
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
2162
+ }
2163
+
2164
+ .metrics-timeline,
2165
+ .metrics-list {
2166
+ display: grid;
2167
+ gap: 0.65rem;
2168
+ }
2169
+
2170
+ .metrics-timeline-row,
2171
+ .metrics-breakdown-row {
2172
+ display: grid;
2173
+ grid-template-columns: minmax(8rem, 0.65fr) minmax(0, 1fr) auto;
2174
+ align-items: center;
2175
+ gap: 0.75rem;
2176
+ }
2177
+
2178
+ .metrics-breakdown-row {
2179
+ grid-template-columns: minmax(8rem, 0.9fr) minmax(12rem, 1fr);
2180
+ }
2181
+
2182
+ .metrics-breakdown-meter {
2183
+ display: grid;
2184
+ grid-template-columns: minmax(0, 1fr) auto;
2185
+ align-items: center;
2186
+ gap: 0.75rem;
2187
+ }
2188
+
2189
+ .metrics-timeline-label,
2190
+ .metrics-breakdown-title,
2191
+ .metrics-value {
2192
+ min-width: 0;
2193
+ color: var(--text-body);
2194
+ font-size: 0.75rem;
2195
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
2196
+ overflow: hidden;
2197
+ text-overflow: ellipsis;
2198
+ white-space: nowrap;
2199
+ }
2200
+
2201
+ .metrics-value {
2202
+ color: var(--text-muted);
2203
+ text-align: right;
2204
+ }
2205
+
2206
+ .metrics-bar-track {
2207
+ height: 0.48rem;
2208
+ overflow: hidden;
2209
+ border-radius: 999px;
2210
+ background: rgba(36, 41, 47, 0.12);
2211
+ border: 1px solid var(--glass-line);
2212
+ }
2213
+
2214
+ .metrics-bar-fill {
2215
+ height: 100%;
2216
+ min-width: 0.25rem;
2217
+ border-radius: inherit;
2218
+ background: linear-gradient(90deg, var(--accent), #22c55e);
2219
+ }
2220
+
2221
+ .metrics-storage-warning {
2222
+ display: flex;
2223
+ align-items: center;
2224
+ justify-content: space-between;
2225
+ gap: 1rem;
2226
+ padding: 1rem;
2227
+ border-radius: 10px;
2228
+ border: 1px solid rgba(239, 68, 68, 0.25);
2229
+ background: rgba(239, 68, 68, 0.1);
2230
+ }
2231
+
2232
+ .metrics-empty {
2233
+ padding: 1.25rem;
2234
+ border: 1px dashed var(--glass-line);
2235
+ border-radius: 10px;
2236
+ color: var(--text-faint);
2237
+ text-align: center;
2238
+ font-size: 0.82rem;
2239
+ }
2240
+
2241
+ .metrics-status {
2242
+ display: inline-flex;
2243
+ min-width: 3rem;
2244
+ justify-content: center;
2245
+ padding: 0.22rem 0.45rem;
2246
+ border-radius: 999px;
2247
+ font-size: 0.72rem;
2248
+ font-weight: 700;
2249
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
2250
+ }
2251
+
2252
+ .metrics-status-success {
2253
+ color: #047857;
2254
+ background: rgba(16, 185, 129, 0.12);
2255
+ border: 1px solid rgba(16, 185, 129, 0.2);
2256
+ }
2257
+
2258
+ .metrics-status-error {
2259
+ color: #b91c1c;
2260
+ background: rgba(239, 68, 68, 0.12);
2261
+ border: 1px solid rgba(239, 68, 68, 0.22);
2262
+ }
2263
+
2264
+ .metrics-status-muted {
2265
+ color: var(--text-muted);
2266
+ background: rgba(36, 41, 47, 0.08);
2267
+ border: 1px solid var(--glass-line);
2268
+ }
2269
+
1370
2270
  .alert {
1371
2271
  background-color: rgba(255, 255, 255, 0.86);
1372
2272
  border-color: var(--glass-line);
@@ -1392,6 +2292,16 @@ dialog::backdrop,
1392
2292
  -webkit-backdrop-filter: blur(18px);
1393
2293
  }
1394
2294
 
2295
+ @media (min-width: 768px) {
2296
+ .bottom-nav-label {
2297
+ display: inline;
2298
+ }
2299
+
2300
+ .bottom-nav-item {
2301
+ flex: 1 1 0;
2302
+ }
2303
+ }
2304
+
1395
2305
  @media (min-width: 1024px) {
1396
2306
  .fixed.top-14.bottom-0.left-0 {
1397
2307
  position: static;
@@ -1418,9 +2328,96 @@ dialog::backdrop,
1418
2328
  .view-container {
1419
2329
  padding: 1.25rem;
1420
2330
  }
2331
+
2332
+ .section-header {
2333
+ gap: 0.75rem;
2334
+ }
2335
+
2336
+ .logs-toolbar {
2337
+ grid-template-columns: 1fr;
2338
+ }
2339
+
2340
+ .logs-filter-row {
2341
+ width: 100%;
2342
+ }
2343
+
2344
+ .logs-clear-button {
2345
+ width: max-content;
2346
+ }
2347
+
2348
+ .logs-grid-head,
2349
+ .logs-row {
2350
+ grid-template-columns: 5.5rem 5.2rem minmax(13rem, 1fr);
2351
+ }
2352
+
2353
+ .logs-grid-head span:nth-child(4),
2354
+ .logs-details {
2355
+ grid-column: 3;
2356
+ }
2357
+
2358
+ .logs-grid-head span:nth-child(4) {
2359
+ display: none;
2360
+ }
1421
2361
  }
1422
2362
 
1423
2363
  @media (max-width: 900px) {
2364
+ .section-header {
2365
+ flex-direction: column;
2366
+ align-items: stretch;
2367
+ }
2368
+
2369
+ .section-heading {
2370
+ gap: 0.65rem;
2371
+ }
2372
+
2373
+ .section-actions {
2374
+ width: 100%;
2375
+ }
2376
+
2377
+ .accounts-actions {
2378
+ display: flex;
2379
+ flex-wrap: nowrap;
2380
+ justify-content: flex-start;
2381
+ gap: 0.45rem;
2382
+ overflow: hidden;
2383
+ }
2384
+
2385
+ .account-search {
2386
+ flex: 1 1 auto;
2387
+ min-width: 0;
2388
+ }
2389
+
2390
+ .account-search .input-search-sm {
2391
+ width: 100%;
2392
+ min-width: 0;
2393
+ height: 32px;
2394
+ padding-right: 0.5rem;
2395
+ }
2396
+
2397
+ .accounts-actions .btn {
2398
+ flex: 0 0 32px;
2399
+ width: 32px;
2400
+ min-width: 32px;
2401
+ height: 32px;
2402
+ min-height: 32px;
2403
+ padding: 0;
2404
+ gap: 0;
2405
+ }
2406
+
2407
+ .accounts-actions .action-label {
2408
+ display: none;
2409
+ }
2410
+
2411
+ .metrics-range-controls {
2412
+ justify-content: flex-start;
2413
+ overflow-x: auto;
2414
+ }
2415
+
2416
+ .logs-count-strip {
2417
+ flex-wrap: nowrap;
2418
+ overflow-x: auto;
2419
+ }
2420
+
1424
2421
  .dashboard-test-grid {
1425
2422
  grid-template-columns: 1fr;
1426
2423
  }
@@ -1428,7 +2425,8 @@ dialog::backdrop,
1428
2425
 
1429
2426
  @media (max-width: 640px) {
1430
2427
  .h-14.border-b {
1431
- height: 58px;
2428
+ height: var(--app-header-height);
2429
+ min-height: var(--app-header-height);
1432
2430
  padding-left: 0.75rem;
1433
2431
  padding-right: 0.75rem;
1434
2432
  }
@@ -1438,9 +2436,9 @@ dialog::backdrop,
1438
2436
  gap: 0.55rem;
1439
2437
  }
1440
2438
 
1441
- .h-14.border-b .w-8.h-8 {
1442
- width: 1.75rem;
1443
- height: 1.75rem;
2439
+ .h-14.border-b .app-brand-mark {
2440
+ width: 1.55rem;
2441
+ height: 1.55rem;
1444
2442
  flex-shrink: 0;
1445
2443
  }
1446
2444
 
@@ -1468,15 +2466,56 @@ dialog::backdrop,
1468
2466
  display: none;
1469
2467
  }
1470
2468
 
1471
- .h-14.border-b .rounded-full.text-xs {
1472
- padding: 0.3rem 0.55rem;
1473
- font-size: 0.68rem;
2469
+ .h-14.border-b .app-connection-status {
2470
+ min-height: 24px;
2471
+ padding: 0.14rem 0.48rem;
2472
+ font-size: 0.66rem;
1474
2473
  }
1475
2474
 
1476
2475
  .view-container {
1477
2476
  padding: 1rem;
1478
2477
  }
1479
2478
 
2479
+ .section-heading > .rounded-full {
2480
+ display: none;
2481
+ }
2482
+
2483
+ .account-count-word {
2484
+ display: none;
2485
+ }
2486
+
2487
+ .app-main {
2488
+ padding-bottom: 5.25rem;
2489
+ }
2490
+
2491
+ .bottom-nav {
2492
+ width: min(27rem, calc(100vw - 1rem));
2493
+ min-height: 52px;
2494
+ padding: 0.3rem;
2495
+ border-radius: 15px;
2496
+ }
2497
+
2498
+ .bottom-nav::before {
2499
+ border-radius: 16px;
2500
+ }
2501
+
2502
+ .bottom-nav-item {
2503
+ min-width: 0;
2504
+ flex: 1 1 0;
2505
+ padding: 0;
2506
+ border-radius: 10px;
2507
+ }
2508
+
2509
+ .bottom-nav-badge {
2510
+ position: absolute;
2511
+ top: 0.22rem;
2512
+ right: 0.18rem;
2513
+ min-width: 1rem;
2514
+ max-width: 1.55rem;
2515
+ padding: 0.05rem 0.18rem;
2516
+ font-size: 0.56rem;
2517
+ }
2518
+
1480
2519
  .view-container > .flex.items-center.justify-between.gap-4.mb-6 {
1481
2520
  flex-direction: column;
1482
2521
  }
@@ -1490,6 +2529,24 @@ dialog::backdrop,
1490
2529
  .view-card > .flex.gap-3 .btn {
1491
2530
  width: 100%;
1492
2531
  }
2532
+
2533
+ .logs-grid {
2534
+ font-size: 0.68rem;
2535
+ }
2536
+
2537
+ .logs-grid-head {
2538
+ display: none;
2539
+ }
2540
+
2541
+ .logs-row {
2542
+ grid-template-columns: 4.8rem 4.8rem minmax(0, 1fr);
2543
+ gap: 0.5rem;
2544
+ padding: 0.55rem 0.65rem;
2545
+ }
2546
+
2547
+ .logs-details {
2548
+ grid-column: 1 / -1;
2549
+ }
1493
2550
  }
1494
2551
 
1495
2552
  @media (prefers-reduced-motion: reduce) {