@zolomedia/bifrost-client 1.7.79 → 1.7.81
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.
- package/package.json +1 -1
- package/zSys/theme/zbase.css +137 -111
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zolomedia/bifrost-client",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.81",
|
|
4
4
|
"description": "Browser client for zBifrost — the WebSocket bridge that turns JSON events from a zOS server into live DOM. Thin bootstrap + server-controlled core.",
|
|
5
5
|
"homepage": "https://github.com/ZoloAi/zbifrost-client#readme",
|
|
6
6
|
"repository": {
|
package/zSys/theme/zbase.css
CHANGED
|
@@ -32,6 +32,17 @@
|
|
|
32
32
|
--color-success: #52B788; /* Manifestation — organic & vibrant */
|
|
33
33
|
--color-warning: #FFB347; /* Caution — warm & approachable */
|
|
34
34
|
--color-error: #E63946; /* Decisive — clear & strong */
|
|
35
|
+
|
|
36
|
+
/* Neutral foundation — surfaces, ink & lines on the dark zOS canvas.
|
|
37
|
+
* SSOT for every NON-accent value so no component carries raw rgba/hex.
|
|
38
|
+
* Apps re-skin the whole chrome by redefining these once. */
|
|
39
|
+
--ink: #f9fafb; /* primary text on dark */
|
|
40
|
+
--ink-muted: rgba(255, 255, 255, 0.65); /* secondary / captions */
|
|
41
|
+
--surface-1: rgba(255, 255, 255, 0.04); /* raised panel */
|
|
42
|
+
--surface-2: rgba(255, 255, 255, 0.08); /* input / hover fill */
|
|
43
|
+
--border: rgba(255, 255, 255, 0.12); /* hairline divider */
|
|
44
|
+
--border-strong: rgba(255, 255, 255, 0.18); /* field / control outline*/
|
|
45
|
+
--shadow: rgba(0, 0, 0, 0.20); /* ambient drop shadow */
|
|
35
46
|
}
|
|
36
47
|
|
|
37
48
|
/* ─── 1. Reset ─────────────────────────────────────────────────────────────── */
|
|
@@ -148,8 +159,8 @@ code:not(pre code) {
|
|
|
148
159
|
font-size: 0.88em;
|
|
149
160
|
font-weight: 600;
|
|
150
161
|
color: var(--color-code, #5CA9FF);
|
|
151
|
-
background:
|
|
152
|
-
border: 1px solid
|
|
162
|
+
background: color-mix(in srgb, var(--color-info) 12%, transparent);
|
|
163
|
+
border: 1px solid color-mix(in srgb, var(--color-info) 25%, transparent);
|
|
153
164
|
border-radius: 5px;
|
|
154
165
|
padding: 0.1em 0.4em;
|
|
155
166
|
letter-spacing: -0.01em;
|
|
@@ -208,9 +219,9 @@ input.zInput, textarea.zInput, select.zInput {
|
|
|
208
219
|
font-family: inherit;
|
|
209
220
|
font-size: 0.95rem;
|
|
210
221
|
line-height: 1.5;
|
|
211
|
-
color: var(--zinput-color,
|
|
212
|
-
background: var(--zinput-bg,
|
|
213
|
-
border: 1.5px solid var(--zinput-border,
|
|
222
|
+
color: var(--zinput-color, var(--ink));
|
|
223
|
+
background: var(--zinput-bg, color-mix(in srgb, var(--ink) 14%, transparent));
|
|
224
|
+
border: 1.5px solid var(--zinput-border, var(--border-strong));
|
|
214
225
|
border-radius: var(--zinput-radius, 10px);
|
|
215
226
|
transition: border-color 0.18s, background 0.18s, box-shadow 0.18s;
|
|
216
227
|
}
|
|
@@ -221,9 +232,9 @@ input.zInput, textarea.zInput, select.zInput {
|
|
|
221
232
|
.zForm-control:focus,
|
|
222
233
|
input.zInput:focus, textarea.zInput:focus, select.zInput:focus {
|
|
223
234
|
outline: none;
|
|
224
|
-
border-color: var(--zinput-focus, var(--color-primary
|
|
225
|
-
background: var(--zinput-bg-focus,
|
|
226
|
-
box-shadow: 0 0 0 3px color-mix(in srgb, var(--zinput-focus, var(--color-primary
|
|
235
|
+
border-color: var(--zinput-focus, var(--color-primary));
|
|
236
|
+
background: var(--zinput-bg-focus, color-mix(in srgb, var(--ink) 17%, transparent));
|
|
237
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--zinput-focus, var(--color-primary)) 20%, transparent);
|
|
227
238
|
}
|
|
228
239
|
|
|
229
240
|
.zForm-control:disabled, .zForm-control[readonly],
|
|
@@ -274,7 +285,7 @@ input[type="file"].zInput::file-selector-button {
|
|
|
274
285
|
padding: 0.45rem 1rem;
|
|
275
286
|
border: 0;
|
|
276
287
|
border-radius: 8px;
|
|
277
|
-
background: var(--zinput-accent,
|
|
288
|
+
background: var(--zinput-accent, var(--color-secondary));
|
|
278
289
|
color: #fff;
|
|
279
290
|
font-family: inherit;
|
|
280
291
|
font-size: 0.85rem;
|
|
@@ -304,7 +315,7 @@ input[type="color"].zInput {
|
|
|
304
315
|
}
|
|
305
316
|
input[type="color"].zForm-control:hover,
|
|
306
317
|
input[type="color"].zInput:hover {
|
|
307
|
-
border-color: var(--zinput-border-hover,
|
|
318
|
+
border-color: var(--zinput-border-hover, color-mix(in srgb, var(--ink) 30%, transparent));
|
|
308
319
|
}
|
|
309
320
|
input[type="color"].zForm-control::-webkit-color-swatch-wrapper,
|
|
310
321
|
input[type="color"].zInput::-webkit-color-swatch-wrapper { padding: 0; }
|
|
@@ -345,9 +356,9 @@ input[type="datetime-local"].zForm-control::-webkit-calendar-picker-indicator:ho
|
|
|
345
356
|
align-items: center;
|
|
346
357
|
padding: 0.55rem 0.85rem;
|
|
347
358
|
font-size: 0.95rem;
|
|
348
|
-
color: var(--zinput-color,
|
|
349
|
-
background: var(--zinput-affix-bg,
|
|
350
|
-
border: 1.5px solid var(--zinput-border,
|
|
359
|
+
color: var(--zinput-color, var(--ink));
|
|
360
|
+
background: var(--zinput-affix-bg, color-mix(in srgb, var(--color-secondary) 14%, transparent));
|
|
361
|
+
border: 1.5px solid var(--zinput-border, color-mix(in srgb, var(--ink) 14%, transparent));
|
|
351
362
|
white-space: nowrap;
|
|
352
363
|
}
|
|
353
364
|
.zInputGroup > .zInputGroup-text:first-child { border-radius: 10px 0 0 10px; border-right: 0; }
|
|
@@ -380,8 +391,8 @@ input[type="datetime-local"].zForm-control::-webkit-calendar-picker-indicator:ho
|
|
|
380
391
|
margin: 0;
|
|
381
392
|
display: inline-grid;
|
|
382
393
|
place-content: center;
|
|
383
|
-
background: var(--zinput-bg,
|
|
384
|
-
border: 1.5px solid var(--zinput-border,
|
|
394
|
+
background: var(--zinput-bg, color-mix(in srgb, var(--ink) 14%, transparent));
|
|
395
|
+
border: 1.5px solid var(--zinput-border, color-mix(in srgb, var(--ink) 30%, transparent));
|
|
385
396
|
cursor: pointer;
|
|
386
397
|
transition: border-color 0.18s, background 0.18s, box-shadow 0.18s;
|
|
387
398
|
}
|
|
@@ -393,8 +404,8 @@ input[type="datetime-local"].zForm-control::-webkit-calendar-picker-indicator:ho
|
|
|
393
404
|
.zForm-check input[type="checkbox"]:checked,
|
|
394
405
|
.zForm-check input[type="radio"]:checked,
|
|
395
406
|
.zForm-check-input:checked {
|
|
396
|
-
background: var(--zinput-focus, var(--color-primary
|
|
397
|
-
border-color: var(--zinput-focus, var(--color-primary
|
|
407
|
+
background: var(--zinput-focus, var(--color-primary));
|
|
408
|
+
border-color: var(--zinput-focus, var(--color-primary));
|
|
398
409
|
}
|
|
399
410
|
/* checkmark glyph */
|
|
400
411
|
.zForm-check input[type="checkbox"]:checked::after,
|
|
@@ -423,7 +434,7 @@ input[type="datetime-local"].zForm-control::-webkit-calendar-picker-indicator:ho
|
|
|
423
434
|
.zForm-check input[type="radio"]:focus-visible,
|
|
424
435
|
.zForm-check-input:focus-visible {
|
|
425
436
|
outline: none;
|
|
426
|
-
box-shadow: 0 0 0 3px color-mix(in srgb, var(--zinput-focus, var(--color-primary
|
|
437
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--zinput-focus, var(--color-primary)) 30%, transparent);
|
|
427
438
|
}
|
|
428
439
|
|
|
429
440
|
.zForm-check-label {
|
|
@@ -442,7 +453,7 @@ input[type="datetime-local"].zForm-control::-webkit-calendar-picker-indicator:ho
|
|
|
442
453
|
|
|
443
454
|
/* native radios/checkboxes NOT given the custom .zForm-check treatment
|
|
444
455
|
* still pick up the theme color (belt-and-braces — groups now emit .zForm-check). */
|
|
445
|
-
input[type="radio"], input[type="checkbox"] { accent-color: var(--color-primary
|
|
456
|
+
input[type="radio"], input[type="checkbox"] { accent-color: var(--color-primary); }
|
|
446
457
|
|
|
447
458
|
/* radio / checkbox group (zSelect type:radio|checkbox) — legend + row rhythm */
|
|
448
459
|
.zForm-check-group .zLabel { margin-bottom: 0.45rem; }
|
|
@@ -464,9 +475,9 @@ select.zInput {
|
|
|
464
475
|
font-family: inherit;
|
|
465
476
|
font-size: 0.95rem;
|
|
466
477
|
line-height: 1.5;
|
|
467
|
-
color: var(--zinput-color,
|
|
468
|
-
background-color: var(--zinput-bg,
|
|
469
|
-
border: 1.5px solid var(--zinput-border,
|
|
478
|
+
color: var(--zinput-color, var(--ink));
|
|
479
|
+
background-color: var(--zinput-bg, color-mix(in srgb, var(--ink) 14%, transparent));
|
|
480
|
+
border: 1.5px solid var(--zinput-border, var(--border-strong));
|
|
470
481
|
border-radius: var(--zinput-radius, 10px);
|
|
471
482
|
cursor: pointer;
|
|
472
483
|
transition: border-color 0.18s, background 0.18s, box-shadow 0.18s;
|
|
@@ -481,9 +492,9 @@ select.zSelect:focus,
|
|
|
481
492
|
select.zForm-control:focus,
|
|
482
493
|
select.zInput:focus {
|
|
483
494
|
outline: none;
|
|
484
|
-
border-color: var(--zinput-focus, var(--color-primary
|
|
485
|
-
background-color: var(--zinput-bg-focus,
|
|
486
|
-
box-shadow: 0 0 0 3px color-mix(in srgb, var(--zinput-focus, var(--color-primary
|
|
495
|
+
border-color: var(--zinput-focus, var(--color-primary));
|
|
496
|
+
background-color: var(--zinput-bg-focus, color-mix(in srgb, var(--ink) 17%, transparent));
|
|
497
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--zinput-focus, var(--color-primary)) 20%, transparent);
|
|
487
498
|
}
|
|
488
499
|
|
|
489
500
|
select.zSelect:disabled,
|
|
@@ -495,7 +506,7 @@ select.zSelect option,
|
|
|
495
506
|
select.zForm-control option,
|
|
496
507
|
select.zInput option { color: #1f2937; background: #fff; }
|
|
497
508
|
select.zSelect option:disabled,
|
|
498
|
-
select.zForm-control option:disabled { color:
|
|
509
|
+
select.zForm-control option:disabled { color: var(--ink-muted); }
|
|
499
510
|
|
|
500
511
|
/* multi-select / sized list box — themed box, no caret, themed inline options */
|
|
501
512
|
select.zSelect[multiple],
|
|
@@ -509,7 +520,7 @@ select.zForm-control[multiple] {
|
|
|
509
520
|
select.zSelect[multiple] option,
|
|
510
521
|
select.zSelect[size] option,
|
|
511
522
|
select.zForm-control[multiple] option {
|
|
512
|
-
color: var(--zinput-color,
|
|
523
|
+
color: var(--zinput-color, var(--ink));
|
|
513
524
|
background: transparent;
|
|
514
525
|
padding: 0.35rem 0.55rem;
|
|
515
526
|
border-radius: 6px;
|
|
@@ -520,7 +531,7 @@ select.zSelect[multiple] option:checked,
|
|
|
520
531
|
select.zSelect[size] option:checked,
|
|
521
532
|
select.zForm-control[multiple] option:checked {
|
|
522
533
|
color: #fff;
|
|
523
|
-
background: linear-gradient(var(--color-primary
|
|
534
|
+
background: linear-gradient(var(--color-primary), var(--color-primary));
|
|
524
535
|
}
|
|
525
536
|
select.zSelect[multiple] option:disabled,
|
|
526
537
|
select.zForm-control[multiple] option:disabled { color: var(--zinput-placeholder, rgba(156, 163, 175, 0.55)); }
|
|
@@ -539,9 +550,9 @@ zBifrostBadge {
|
|
|
539
550
|
|
|
540
551
|
/* ─── zBifrostBadge states ─────────────────────────────────────────────────── */
|
|
541
552
|
|
|
542
|
-
.zBadge-pending { color:
|
|
543
|
-
.zBadge-success { color:
|
|
544
|
-
.zBadge-error { color:
|
|
553
|
+
.zBadge-pending { color: var(--color-warning); }
|
|
554
|
+
.zBadge-success { color: var(--color-success); }
|
|
555
|
+
.zBadge-error { color: var(--color-error); }
|
|
545
556
|
.zBadge-dot { border-radius: 50%; background: currentColor; }
|
|
546
557
|
.zIcon { display: inline-block; width: 0.75em; height: 0.75em; fill: currentColor; }
|
|
547
558
|
|
|
@@ -579,7 +590,7 @@ zNavBar .zNavbar {
|
|
|
579
590
|
flex-wrap: wrap;
|
|
580
591
|
padding: 0.75rem 1.5rem;
|
|
581
592
|
background: var(--znav-bg, rgba(10, 14, 39, 0.92));
|
|
582
|
-
border-bottom: 1px solid var(--znav-border,
|
|
593
|
+
border-bottom: 1px solid var(--znav-border, color-mix(in srgb, var(--color-secondary) 15%, transparent));
|
|
583
594
|
backdrop-filter: blur(12px);
|
|
584
595
|
font-family: var(--znav-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif);
|
|
585
596
|
}
|
|
@@ -589,7 +600,7 @@ zNavBar .zNavbar-brand {
|
|
|
589
600
|
font-weight: 800;
|
|
590
601
|
letter-spacing: -0.02em;
|
|
591
602
|
margin-right: 2rem;
|
|
592
|
-
color: var(--znav-brand-color,
|
|
603
|
+
color: var(--znav-brand-color, var(--ink));
|
|
593
604
|
}
|
|
594
605
|
|
|
595
606
|
zNavBar .zNavbar-toggler {
|
|
@@ -599,9 +610,9 @@ zNavBar .zNavbar-toggler {
|
|
|
599
610
|
font-size: 1.1rem;
|
|
600
611
|
line-height: 1;
|
|
601
612
|
cursor: pointer;
|
|
602
|
-
color: var(--znav-brand-color,
|
|
603
|
-
background: var(--znav-link-hover-bg,
|
|
604
|
-
border: 1px solid var(--znav-border,
|
|
613
|
+
color: var(--znav-brand-color, var(--ink));
|
|
614
|
+
background: var(--znav-link-hover-bg, color-mix(in srgb, var(--color-secondary) 15%, transparent));
|
|
615
|
+
border: 1px solid var(--znav-border, color-mix(in srgb, var(--color-secondary) 30%, transparent));
|
|
605
616
|
border-radius: 6px;
|
|
606
617
|
}
|
|
607
618
|
|
|
@@ -628,14 +639,14 @@ zNavBar .zNav-link {
|
|
|
628
639
|
font-size: 0.9rem;
|
|
629
640
|
font-weight: 500;
|
|
630
641
|
border-radius: 8px;
|
|
631
|
-
color: var(--znav-link-color,
|
|
642
|
+
color: var(--znav-link-color, var(--ink-muted));
|
|
632
643
|
transition: color 0.2s, background 0.2s;
|
|
633
644
|
}
|
|
634
645
|
|
|
635
646
|
zNavBar .zNav-link:hover,
|
|
636
647
|
zNavBar .zNav-link.active {
|
|
637
|
-
color: var(--znav-link-hover-color,
|
|
638
|
-
background: var(--znav-link-hover-bg,
|
|
648
|
+
color: var(--znav-link-hover-color, var(--ink));
|
|
649
|
+
background: var(--znav-link-hover-bg, color-mix(in srgb, var(--color-secondary) 15%, transparent));
|
|
639
650
|
}
|
|
640
651
|
|
|
641
652
|
/* ─── zDropdown (navbar menus) — JS toggles .zShow ─────────────────────────── */
|
|
@@ -649,7 +660,7 @@ zNavBar .zNav-link.active {
|
|
|
649
660
|
min-width: 11rem;
|
|
650
661
|
padding: 0.4rem 0;
|
|
651
662
|
background: var(--zdropdown-bg, rgba(20, 25, 45, 0.97));
|
|
652
|
-
border: 1px solid var(--znav-border,
|
|
663
|
+
border: 1px solid var(--znav-border, color-mix(in srgb, var(--color-secondary) 25%, transparent));
|
|
653
664
|
border-radius: 10px;
|
|
654
665
|
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
|
|
655
666
|
backdrop-filter: blur(12px);
|
|
@@ -660,12 +671,12 @@ zNavBar .zNav-link.active {
|
|
|
660
671
|
display: block;
|
|
661
672
|
padding: 0.5rem 1rem;
|
|
662
673
|
font-size: 0.875rem;
|
|
663
|
-
color: var(--znav-link-color,
|
|
674
|
+
color: var(--znav-link-color, var(--ink-muted));
|
|
664
675
|
transition: color 0.15s, background 0.15s;
|
|
665
676
|
}
|
|
666
677
|
.zDropdown-item:hover {
|
|
667
|
-
color: var(--znav-link-hover-color,
|
|
668
|
-
background: var(--znav-link-hover-bg,
|
|
678
|
+
color: var(--znav-link-hover-color, var(--ink));
|
|
679
|
+
background: var(--znav-link-hover-bg, color-mix(in srgb, var(--color-secondary) 15%, transparent));
|
|
669
680
|
}
|
|
670
681
|
|
|
671
682
|
/* ─── zNavbar-inblock — light, in-content navbar variant ────────────────────────
|
|
@@ -758,7 +769,7 @@ zNavBar .zNav-link.active {
|
|
|
758
769
|
border: none;
|
|
759
770
|
border-radius: 0;
|
|
760
771
|
padding-left: 0.75rem;
|
|
761
|
-
background: var(--znav-link-hover-bg,
|
|
772
|
+
background: var(--znav-link-hover-bg, color-mix(in srgb, var(--color-secondary) 8%, transparent));
|
|
762
773
|
}
|
|
763
774
|
}
|
|
764
775
|
|
|
@@ -1052,9 +1063,10 @@ zNavBar .zNav-link.active {
|
|
|
1052
1063
|
}
|
|
1053
1064
|
|
|
1054
1065
|
.zText-muted { opacity: 0.6; }
|
|
1055
|
-
.zText-dark { color:
|
|
1056
|
-
.zBorder { border: 1px solid
|
|
1057
|
-
.zShadow-sm { box-shadow: 0 1px 3px
|
|
1066
|
+
.zText-dark { color: var(--ink); }
|
|
1067
|
+
.zBorder { border: 1px solid var(--border); }
|
|
1068
|
+
.zShadow-sm { box-shadow: 0 1px 3px var(--shadow); }
|
|
1069
|
+
.zBg-white { background: var(--surface-1); }
|
|
1058
1070
|
.zText-center { text-align: center !important; }
|
|
1059
1071
|
.zText-start { text-align: left !important; }
|
|
1060
1072
|
.zText-end { text-align: right !important; }
|
|
@@ -1077,7 +1089,7 @@ zNavBar .zNav-link.active {
|
|
|
1077
1089
|
border: 1px solid transparent;
|
|
1078
1090
|
text-decoration: none;
|
|
1079
1091
|
}
|
|
1080
|
-
.zBtn:focus { outline: 2px solid
|
|
1092
|
+
.zBtn:focus { outline: 2px solid color-mix(in srgb, var(--color-primary) 55%, transparent); outline-offset: 2px; }
|
|
1081
1093
|
|
|
1082
1094
|
/* ─── Button color variants — canonical fills (theme tokens) ───────────────── */
|
|
1083
1095
|
/* The renderer maps a zBtn's `color:` (default primary) to .zBtn-{color}; these
|
|
@@ -1117,6 +1129,12 @@ zNavBar .zNav-link.active {
|
|
|
1117
1129
|
opacity: 0.5; cursor: not-allowed; transform: none; box-shadow: none; filter: none;
|
|
1118
1130
|
}
|
|
1119
1131
|
|
|
1132
|
+
/* Generic disabled — covers outline/plain buttons (e.g. paging First/Prev at edge)
|
|
1133
|
+
* so a disabled control always reads as muted and never out-ranks an active one. */
|
|
1134
|
+
.zBtn:disabled, .zBtn[disabled] {
|
|
1135
|
+
opacity: 0.45; cursor: not-allowed; transform: none; box-shadow: none;
|
|
1136
|
+
}
|
|
1137
|
+
|
|
1120
1138
|
/* SSOT fills — keyed to --color-* (same tokens/hexes as .zText-*), so a button
|
|
1121
1139
|
* matches a heading of the same color name. Dark text on the light hues
|
|
1122
1140
|
* (primary/success/warning/info), white on the deep ones (secondary/danger). */
|
|
@@ -1138,8 +1156,16 @@ zNavBar .zNav-link.active {
|
|
|
1138
1156
|
.zBtn-outline-success,
|
|
1139
1157
|
.zBtn-outline-warning,
|
|
1140
1158
|
.zBtn-outline-info {
|
|
1159
|
+
display: inline-flex;
|
|
1160
|
+
align-items: center;
|
|
1161
|
+
justify-content: center;
|
|
1162
|
+
gap: 0.35rem;
|
|
1163
|
+
font-family: inherit;
|
|
1164
|
+
font-weight: 600;
|
|
1165
|
+
line-height: 1.4;
|
|
1141
1166
|
background: transparent;
|
|
1142
1167
|
border-color: currentColor;
|
|
1168
|
+
transition: background 0.15s ease, transform 0.08s ease;
|
|
1143
1169
|
}
|
|
1144
1170
|
.zBtn-outline-primary { color: var(--color-primary, #A2D46E); }
|
|
1145
1171
|
.zBtn-outline-secondary { color: var(--color-secondary, #9370DB); }
|
|
@@ -1211,7 +1237,7 @@ zNavBar .zNav-link.active {
|
|
|
1211
1237
|
}
|
|
1212
1238
|
.zDash-format-sidebar > .zRow > .zCol-auto {
|
|
1213
1239
|
border-right: none !important;
|
|
1214
|
-
border-bottom: 1px solid
|
|
1240
|
+
border-bottom: 1px solid color-mix(in srgb, var(--color-secondary) 15%, transparent);
|
|
1215
1241
|
}
|
|
1216
1242
|
.zDash-format-sidebar .zDash-sidebar {
|
|
1217
1243
|
flex-direction: row !important;
|
|
@@ -1222,7 +1248,7 @@ zNavBar .zNav-link.active {
|
|
|
1222
1248
|
}
|
|
1223
1249
|
.zDash-format-sidebar .zDash-sidebar .zNav-link.zActive {
|
|
1224
1250
|
box-shadow: none !important;
|
|
1225
|
-
border-bottom: 2px solid
|
|
1251
|
+
border-bottom: 2px solid var(--color-secondary);
|
|
1226
1252
|
}
|
|
1227
1253
|
.zDash-panel { padding: 1.25rem 1rem; }
|
|
1228
1254
|
.zDash-container .zDialog-form { grid-template-columns: 1fr 1fr; }
|
|
@@ -1247,7 +1273,7 @@ zNavBar .zNav-link.active {
|
|
|
1247
1273
|
right: 0;
|
|
1248
1274
|
z-index: 50;
|
|
1249
1275
|
background: rgba(10, 14, 39, 0.98);
|
|
1250
|
-
border-bottom: 1px solid
|
|
1276
|
+
border-bottom: 1px solid color-mix(in srgb, var(--color-secondary) 20%, transparent);
|
|
1251
1277
|
backdrop-filter: blur(12px);
|
|
1252
1278
|
}
|
|
1253
1279
|
|
|
@@ -1273,18 +1299,18 @@ zNavBar .zNav-link.active {
|
|
|
1273
1299
|
gap: 0.4rem;
|
|
1274
1300
|
margin: 0.75rem 0.75rem 0;
|
|
1275
1301
|
padding: 0.45rem 0.85rem;
|
|
1276
|
-
background:
|
|
1277
|
-
border: 1px solid
|
|
1302
|
+
background: color-mix(in srgb, var(--color-secondary) 15%, transparent);
|
|
1303
|
+
border: 1px solid color-mix(in srgb, var(--color-secondary) 30%, transparent);
|
|
1278
1304
|
border-radius: 8px;
|
|
1279
|
-
color:
|
|
1305
|
+
color: var(--ink);
|
|
1280
1306
|
font-size: 0.875rem;
|
|
1281
1307
|
font-weight: 500;
|
|
1282
1308
|
cursor: pointer;
|
|
1283
1309
|
font-family: inherit;
|
|
1284
1310
|
}
|
|
1285
1311
|
.zDash-sidebar-toggle:hover {
|
|
1286
|
-
background:
|
|
1287
|
-
color:
|
|
1312
|
+
background: color-mix(in srgb, var(--color-secondary) 25%, transparent);
|
|
1313
|
+
color: var(--ink);
|
|
1288
1314
|
}
|
|
1289
1315
|
|
|
1290
1316
|
.zDash-panel { padding: 1rem 0.75rem; }
|
|
@@ -1297,7 +1323,7 @@ zNavBar .zNav-link.active {
|
|
|
1297
1323
|
.zDash-format-tabs .zDash-sidebar {
|
|
1298
1324
|
display: flex;
|
|
1299
1325
|
flex-direction: row;
|
|
1300
|
-
border-bottom: 1px solid
|
|
1326
|
+
border-bottom: 1px solid color-mix(in srgb, var(--color-secondary) 20%, transparent);
|
|
1301
1327
|
}
|
|
1302
1328
|
|
|
1303
1329
|
/* accordion format (future) */
|
|
@@ -1312,7 +1338,7 @@ zNavBar .zNav-link.active {
|
|
|
1312
1338
|
/* Sidebar column chrome */
|
|
1313
1339
|
.zDash-format-sidebar > .zRow > .zCol-auto {
|
|
1314
1340
|
background: rgba(10, 14, 39, 0.6);
|
|
1315
|
-
border-right: 1px solid
|
|
1341
|
+
border-right: 1px solid color-mix(in srgb, var(--color-secondary) 15%, transparent);
|
|
1316
1342
|
padding: 0;
|
|
1317
1343
|
}
|
|
1318
1344
|
|
|
@@ -1329,7 +1355,7 @@ zNavBar .zNav-link.active {
|
|
|
1329
1355
|
align-items: center;
|
|
1330
1356
|
padding: 0.55rem 0.85rem;
|
|
1331
1357
|
border-radius: 8px;
|
|
1332
|
-
color:
|
|
1358
|
+
color: var(--ink-muted);
|
|
1333
1359
|
font-size: 0.875rem;
|
|
1334
1360
|
font-weight: 500;
|
|
1335
1361
|
cursor: pointer;
|
|
@@ -1338,13 +1364,13 @@ zNavBar .zNav-link.active {
|
|
|
1338
1364
|
text-decoration: none;
|
|
1339
1365
|
}
|
|
1340
1366
|
.zDash-sidebar .zNav-link:hover {
|
|
1341
|
-
color:
|
|
1342
|
-
background:
|
|
1367
|
+
color: var(--ink);
|
|
1368
|
+
background: color-mix(in srgb, var(--color-secondary) 12%, transparent);
|
|
1343
1369
|
}
|
|
1344
1370
|
.zDash-sidebar .zNav-link.zActive {
|
|
1345
|
-
color:
|
|
1346
|
-
background:
|
|
1347
|
-
box-shadow: inset 3px 0 0
|
|
1371
|
+
color: var(--ink);
|
|
1372
|
+
background: color-mix(in srgb, var(--color-secondary) 22%, transparent);
|
|
1373
|
+
box-shadow: inset 3px 0 0 var(--color-secondary);
|
|
1348
1374
|
}
|
|
1349
1375
|
|
|
1350
1376
|
/* Panel area */
|
|
@@ -1358,7 +1384,7 @@ zNavBar .zNav-link.active {
|
|
|
1358
1384
|
box-sizing: border-box;
|
|
1359
1385
|
margin-bottom: 1.25rem;
|
|
1360
1386
|
background: rgba(15, 20, 48, 0.6);
|
|
1361
|
-
border: 1px solid
|
|
1387
|
+
border: 1px solid color-mix(in srgb, var(--color-secondary) 15%, transparent);
|
|
1362
1388
|
border-radius: 10px;
|
|
1363
1389
|
}
|
|
1364
1390
|
|
|
@@ -1366,10 +1392,10 @@ zNavBar .zNav-link.active {
|
|
|
1366
1392
|
.zDash-container .zDialog-title {
|
|
1367
1393
|
font-size: 1rem;
|
|
1368
1394
|
font-weight: 700;
|
|
1369
|
-
color:
|
|
1395
|
+
color: var(--ink);
|
|
1370
1396
|
margin-bottom: 1rem;
|
|
1371
1397
|
padding-bottom: 0.6rem;
|
|
1372
|
-
border-bottom: 1px solid
|
|
1398
|
+
border-bottom: 1px solid color-mix(in srgb, var(--color-secondary) 15%, transparent);
|
|
1373
1399
|
}
|
|
1374
1400
|
|
|
1375
1401
|
/* Multi-column form grid */
|
|
@@ -1388,7 +1414,7 @@ zNavBar .zNav-link.active {
|
|
|
1388
1414
|
font-size: 0.7rem;
|
|
1389
1415
|
text-transform: uppercase;
|
|
1390
1416
|
letter-spacing: 0.06em;
|
|
1391
|
-
color:
|
|
1417
|
+
color: var(--ink-muted);
|
|
1392
1418
|
font-weight: 600;
|
|
1393
1419
|
display: block;
|
|
1394
1420
|
margin-bottom: 0.3rem;
|
|
@@ -1397,10 +1423,10 @@ zNavBar .zNav-link.active {
|
|
|
1397
1423
|
/* Inputs & selects */
|
|
1398
1424
|
.zDash-container .zInput {
|
|
1399
1425
|
appearance: none;
|
|
1400
|
-
background:
|
|
1401
|
-
border: 1px solid
|
|
1426
|
+
background: var(--surface-1);
|
|
1427
|
+
border: 1px solid color-mix(in srgb, var(--color-secondary) 20%, transparent);
|
|
1402
1428
|
border-radius: 7px;
|
|
1403
|
-
color:
|
|
1429
|
+
color: var(--ink);
|
|
1404
1430
|
padding: 0.5rem 0.75rem;
|
|
1405
1431
|
font-size: 0.875rem;
|
|
1406
1432
|
width: 100%;
|
|
@@ -1410,13 +1436,13 @@ zNavBar .zNav-link.active {
|
|
|
1410
1436
|
}
|
|
1411
1437
|
.zDash-container .zInput:focus {
|
|
1412
1438
|
outline: none;
|
|
1413
|
-
border-color:
|
|
1414
|
-
background:
|
|
1439
|
+
border-color: color-mix(in srgb, var(--color-secondary) 60%, transparent);
|
|
1440
|
+
background: color-mix(in srgb, var(--ink) 7%, transparent);
|
|
1415
1441
|
}
|
|
1416
1442
|
|
|
1417
1443
|
/* Primary action button */
|
|
1418
1444
|
.zDash-container .zBtn-primary {
|
|
1419
|
-
background:
|
|
1445
|
+
background: var(--color-secondary);
|
|
1420
1446
|
border: none;
|
|
1421
1447
|
color: #fff;
|
|
1422
1448
|
padding: 0.55rem 1.25rem;
|
|
@@ -1428,7 +1454,7 @@ zNavBar .zNav-link.active {
|
|
|
1428
1454
|
transition: background 0.15s, transform 0.1s;
|
|
1429
1455
|
}
|
|
1430
1456
|
.zDash-container .zBtn-primary:hover {
|
|
1431
|
-
background:
|
|
1457
|
+
background: color-mix(in srgb, var(--color-secondary) 82%, black);
|
|
1432
1458
|
transform: translateY(-1px);
|
|
1433
1459
|
}
|
|
1434
1460
|
|
|
@@ -1439,10 +1465,10 @@ zNavBar .zNav-link.active {
|
|
|
1439
1465
|
gap: 0.4rem;
|
|
1440
1466
|
padding: 0.5rem 1rem;
|
|
1441
1467
|
margin: 0 0.4rem 0.4rem 0;
|
|
1442
|
-
background:
|
|
1443
|
-
border: 1px solid
|
|
1468
|
+
background: color-mix(in srgb, var(--color-secondary) 15%, transparent);
|
|
1469
|
+
border: 1px solid color-mix(in srgb, var(--color-secondary) 30%, transparent);
|
|
1444
1470
|
border-radius: 8px;
|
|
1445
|
-
color:
|
|
1471
|
+
color: var(--ink);
|
|
1446
1472
|
font-size: 0.875rem;
|
|
1447
1473
|
font-weight: 500;
|
|
1448
1474
|
font-family: inherit;
|
|
@@ -1450,9 +1476,9 @@ zNavBar .zNav-link.active {
|
|
|
1450
1476
|
transition: background 0.15s, border-color 0.15s, color 0.15s;
|
|
1451
1477
|
}
|
|
1452
1478
|
.zDash-container button[data-key]:hover {
|
|
1453
|
-
background:
|
|
1454
|
-
border-color:
|
|
1455
|
-
color:
|
|
1479
|
+
background: color-mix(in srgb, var(--color-secondary) 30%, transparent);
|
|
1480
|
+
border-color: color-mix(in srgb, var(--color-secondary) 50%, transparent);
|
|
1481
|
+
color: var(--ink);
|
|
1456
1482
|
}
|
|
1457
1483
|
|
|
1458
1484
|
/* Tables */
|
|
@@ -1460,32 +1486,32 @@ zNavBar .zNav-link.active {
|
|
|
1460
1486
|
width: 100%;
|
|
1461
1487
|
border-collapse: collapse;
|
|
1462
1488
|
font-size: 0.875rem;
|
|
1463
|
-
color:
|
|
1489
|
+
color: var(--ink);
|
|
1464
1490
|
}
|
|
1465
1491
|
.zDash-container th {
|
|
1466
1492
|
padding: 0.6rem 0.9rem;
|
|
1467
|
-
background:
|
|
1468
|
-
color:
|
|
1493
|
+
background: color-mix(in srgb, var(--color-secondary) 12%, transparent);
|
|
1494
|
+
color: var(--color-secondary);
|
|
1469
1495
|
font-weight: 600;
|
|
1470
1496
|
text-align: left;
|
|
1471
|
-
border-bottom: 1px solid
|
|
1497
|
+
border-bottom: 1px solid color-mix(in srgb, var(--color-secondary) 20%, transparent);
|
|
1472
1498
|
}
|
|
1473
1499
|
.zDash-container td {
|
|
1474
1500
|
padding: 0.55rem 0.9rem;
|
|
1475
|
-
border-bottom: 1px solid
|
|
1501
|
+
border-bottom: 1px solid color-mix(in srgb, var(--ink) 5%, transparent);
|
|
1476
1502
|
}
|
|
1477
|
-
.zDash-container tr:hover td { background:
|
|
1503
|
+
.zDash-container tr:hover td { background: color-mix(in srgb, var(--color-secondary) 7%, transparent); }
|
|
1478
1504
|
|
|
1479
1505
|
/* Section headings */
|
|
1480
1506
|
.zDash-container h2 {
|
|
1481
1507
|
font-size: 1.2rem;
|
|
1482
1508
|
font-weight: 700;
|
|
1483
|
-
color:
|
|
1509
|
+
color: var(--ink);
|
|
1484
1510
|
margin: 0 0 1rem;
|
|
1485
1511
|
}
|
|
1486
1512
|
|
|
1487
1513
|
/* Spinner */
|
|
1488
|
-
.zSpinner-border { color:
|
|
1514
|
+
.zSpinner-border { color: var(--color-primary); }
|
|
1489
1515
|
|
|
1490
1516
|
/* ============================================================================
|
|
1491
1517
|
Tables (zTable) — canonical dark-theme data tables
|
|
@@ -1496,7 +1522,7 @@ zNavBar .zNav-link.active {
|
|
|
1496
1522
|
.zTable-container { margin: 1.5rem 0; }
|
|
1497
1523
|
|
|
1498
1524
|
.zTable-container h4 {
|
|
1499
|
-
color:
|
|
1525
|
+
color: var(--ink);
|
|
1500
1526
|
font-size: 1.1rem;
|
|
1501
1527
|
font-weight: 700;
|
|
1502
1528
|
margin: 0 0 0.75rem;
|
|
@@ -1505,7 +1531,7 @@ zNavBar .zNav-link.active {
|
|
|
1505
1531
|
.zTable-responsive {
|
|
1506
1532
|
overflow-x: auto;
|
|
1507
1533
|
border-radius: 12px;
|
|
1508
|
-
border: 1px solid
|
|
1534
|
+
border: 1px solid color-mix(in srgb, var(--color-secondary) 20%, transparent);
|
|
1509
1535
|
}
|
|
1510
1536
|
|
|
1511
1537
|
.zTable {
|
|
@@ -1517,30 +1543,30 @@ zNavBar .zNav-link.active {
|
|
|
1517
1543
|
/* Default body text colour lives here so cells INHERIT it. Keeping it off the
|
|
1518
1544
|
td selector lets a per-cell utility (zText-success/-danger…) win — a bare
|
|
1519
1545
|
.zText-* class (0,1,0) would otherwise lose to `.zTable tbody td` (0,1,2). */
|
|
1520
|
-
color:
|
|
1546
|
+
color: var(--ink-muted);
|
|
1521
1547
|
}
|
|
1522
1548
|
|
|
1523
1549
|
.zTable thead th {
|
|
1524
|
-
background:
|
|
1525
|
-
color:
|
|
1550
|
+
background: color-mix(in srgb, var(--color-secondary) 18%, transparent);
|
|
1551
|
+
color: var(--ink);
|
|
1526
1552
|
font-weight: 700;
|
|
1527
1553
|
text-align: left;
|
|
1528
1554
|
padding: 0.85rem 1rem;
|
|
1529
1555
|
letter-spacing: 0.02em;
|
|
1530
|
-
border-bottom: 1px solid
|
|
1556
|
+
border-bottom: 1px solid color-mix(in srgb, var(--color-secondary) 30%, transparent);
|
|
1531
1557
|
white-space: nowrap;
|
|
1532
1558
|
}
|
|
1533
1559
|
|
|
1534
1560
|
.zTable tbody td {
|
|
1535
1561
|
padding: 0.8rem 1rem;
|
|
1536
|
-
border-bottom: 1px solid
|
|
1562
|
+
border-bottom: 1px solid color-mix(in srgb, var(--ink) 6%, transparent);
|
|
1537
1563
|
vertical-align: top;
|
|
1538
1564
|
}
|
|
1539
1565
|
|
|
1540
1566
|
.zTable tbody tr:last-child td { border-bottom: none; }
|
|
1541
|
-
.zTable tbody tr:nth-child(even) td { background:
|
|
1542
|
-
.zTable tbody tr:hover td { background:
|
|
1543
|
-
.zTable td strong { color:
|
|
1567
|
+
.zTable tbody tr:nth-child(even) td { background: color-mix(in srgb, var(--ink) 2%, transparent); }
|
|
1568
|
+
.zTable tbody tr:hover td { background: color-mix(in srgb, var(--color-secondary) 8%, transparent); }
|
|
1569
|
+
.zTable td strong { color: var(--ink); }
|
|
1544
1570
|
|
|
1545
1571
|
/* ════════════════════════════════════════════════════════════════════════════
|
|
1546
1572
|
Progress bar (zProgress) — canonical animated progress component
|
|
@@ -1561,14 +1587,14 @@ zNavBar .zNav-link.active {
|
|
|
1561
1587
|
align-items: baseline;
|
|
1562
1588
|
margin-bottom: 0.4rem;
|
|
1563
1589
|
}
|
|
1564
|
-
.zProgress-container .zFw-bold { font-weight: 600; color: var(--zprogress-label,
|
|
1590
|
+
.zProgress-container .zFw-bold { font-weight: 600; color: var(--zprogress-label, var(--ink)); }
|
|
1565
1591
|
.zProgress-container .zText-muted { color: var(--zprogress-info, rgba(229, 231, 235, 0.6)); }
|
|
1566
1592
|
|
|
1567
1593
|
/* Track — the rail behind the fill. Inset shadow gives the pill real depth. */
|
|
1568
1594
|
.zProgress {
|
|
1569
1595
|
width: 100%;
|
|
1570
1596
|
height: 1rem; /* default; renderer may override inline via height prop */
|
|
1571
|
-
background: var(--zprogress-track,
|
|
1597
|
+
background: var(--zprogress-track, color-mix(in srgb, var(--ink) 7%, transparent));
|
|
1572
1598
|
border-radius: 999px;
|
|
1573
1599
|
overflow: hidden;
|
|
1574
1600
|
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.35);
|
|
@@ -1584,11 +1610,11 @@ zNavBar .zNav-link.active {
|
|
|
1584
1610
|
background-color: var(--color-primary, #A2D46E); /* default; zBg-{color} overrides */
|
|
1585
1611
|
background-image:
|
|
1586
1612
|
linear-gradient(to bottom,
|
|
1587
|
-
|
|
1613
|
+
color-mix(in srgb, var(--ink) 28%, transparent), var(--surface-1) 48%, rgba(0, 0, 0, 0.10)),
|
|
1588
1614
|
linear-gradient(-45deg,
|
|
1589
|
-
|
|
1590
|
-
transparent 50%,
|
|
1591
|
-
|
|
1615
|
+
color-mix(in srgb, var(--ink) 16%, transparent) 25%, transparent 25%,
|
|
1616
|
+
transparent 50%, color-mix(in srgb, var(--ink) 16%, transparent) 50%,
|
|
1617
|
+
color-mix(in srgb, var(--ink) 16%, transparent) 75%, transparent 75%, transparent);
|
|
1592
1618
|
background-size: 100% 100%, 1.15rem 1.15rem;
|
|
1593
1619
|
background-repeat: no-repeat, repeat;
|
|
1594
1620
|
border-radius: inherit;
|
|
@@ -1622,11 +1648,11 @@ zNavBar .zNav-link.active {
|
|
|
1622
1648
|
.zProgress-bar-striped {
|
|
1623
1649
|
background-image:
|
|
1624
1650
|
linear-gradient(to bottom,
|
|
1625
|
-
|
|
1651
|
+
color-mix(in srgb, var(--ink) 28%, transparent), var(--surface-1) 48%, rgba(0, 0, 0, 0.10)),
|
|
1626
1652
|
linear-gradient(-45deg,
|
|
1627
|
-
|
|
1628
|
-
transparent 50%,
|
|
1629
|
-
|
|
1653
|
+
color-mix(in srgb, var(--ink) 28%, transparent) 25%, transparent 25%,
|
|
1654
|
+
transparent 50%, color-mix(in srgb, var(--ink) 28%, transparent) 50%,
|
|
1655
|
+
color-mix(in srgb, var(--ink) 28%, transparent) 75%, transparent 75%, transparent);
|
|
1630
1656
|
}
|
|
1631
1657
|
.zProgress-bar-animated { animation: zProgress-flow 0.9s linear infinite; }
|
|
1632
1658
|
|
|
@@ -1711,7 +1737,7 @@ zNavBar .zNav-link.active {
|
|
|
1711
1737
|
.zMenu-nav .zNav-link:focus-visible,
|
|
1712
1738
|
.zMenu-container .zMenu-option button:hover,
|
|
1713
1739
|
.zMenu-container .zMenu-option button:focus-visible {
|
|
1714
|
-
background:
|
|
1740
|
+
background: color-mix(in srgb, var(--color-primary) 12%, transparent);
|
|
1715
1741
|
border-color: var(--color-primary, #A2D46E);
|
|
1716
1742
|
transform: translateX(2px);
|
|
1717
1743
|
outline: none;
|
|
@@ -1753,7 +1779,7 @@ zNavBar .zNav-link.active {
|
|
|
1753
1779
|
font-weight: 600;
|
|
1754
1780
|
font-variant-numeric: tabular-nums;
|
|
1755
1781
|
color: var(--color-secondary, #9370DB);
|
|
1756
|
-
background:
|
|
1782
|
+
background: color-mix(in srgb, var(--color-secondary) 16%, transparent);
|
|
1757
1783
|
border-radius: 50%;
|
|
1758
1784
|
}
|
|
1759
1785
|
|