@zeyos/zx 4.1.0 → 4.1.1
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/CHANGELOG.md +17 -0
- package/dist/types/zeyos/icons.d.ts +2 -2
- package/dist/zx-zeyos.esm.js +7 -6
- package/dist/zx-zeyos.esm.min.js +1 -1
- package/dist/zx.css +162 -18
- package/dist/zx.esm.js +5 -4
- package/dist/zx.esm.min.js +1 -1
- package/dist/zx.global.js +5 -4
- package/dist/zx.global.min.js +1 -1
- package/dist/zx.min.css +1 -1
- package/docs/llms.md +5 -3
- package/package.json +1 -1
- package/src/components/app-icon/app-icon.css +92 -8
- package/src/components/app-icon/app-icon.js +7 -4
- package/src/components/button/button.css +34 -2
- package/src/components/card/card.css +25 -3
- package/src/components/message/message.css +7 -3
- package/src/zeyos/icons.js +5 -5
- package/styles/tokens/semantic.css +10 -2
package/docs/llms.md
CHANGED
|
@@ -194,8 +194,8 @@ registerModules({ tickets: '#f04639', 'my-fork': { label: 'My Fork', icon: 'zeyo
|
|
|
194
194
|
- `moduleIcon(name, {size, label, standard})` → the bare glyph; `standard: true` uses the stock
|
|
195
195
|
Font Awesome fallback, for pages on a kit without the ZeyOS uploads.
|
|
196
196
|
- `moduleChip(name, {size, iconSize, label, title, standard})` → `<span class="zx-module-icon">`
|
|
197
|
-
with
|
|
198
|
-
|
|
197
|
+
with a centred white glyph on the module colour. `moduleGlyphColor(hex)` remains available as a
|
|
198
|
+
separate contrast helper for non-AppIcon integrations that deliberately choose their foreground.
|
|
199
199
|
- `moduleInfo`/`moduleColor`/`moduleIconName`/`moduleKeys`/`normalizeModuleName` read the config.
|
|
200
200
|
Module, entity, and API resource names are all accepted, case-insensitively, with dots and
|
|
201
201
|
underscores normalized: `'transactions.billing'`, `'invoices'`, and `'Transactions Billing'` all
|
|
@@ -469,7 +469,9 @@ options rather than application globals.
|
|
|
469
469
|
offline `icon` override; Zx never loads a network asset automatically.
|
|
470
470
|
- **Material** — subtle glass is a CSS border/highlight treatment; strong glass progressively adds
|
|
471
471
|
`backdrop-filter`. `prefers-reduced-transparency` and browsers without support receive a solid
|
|
472
|
-
tile.
|
|
472
|
+
tile. Glyphs remain white and geometrically centred in either built-in SVG or Font Awesome form;
|
|
473
|
+
hover and focus feedback use the same semantic material tokens. The glyph and label semantics do
|
|
474
|
+
not depend on the visual treatment.
|
|
473
475
|
- **Accessibility** — a non-empty `label` gives the root `role="img"`; otherwise it is decorative.
|
|
474
476
|
The badge is visual supplementary status, so include its meaning in `label` when it matters.
|
|
475
477
|
<!-- /doc -->
|
package/package.json
CHANGED
|
@@ -11,22 +11,27 @@
|
|
|
11
11
|
block-size: var(--zx-app-icon-size);
|
|
12
12
|
overflow: hidden;
|
|
13
13
|
border: 1px solid var(--zx-color-glass-border);
|
|
14
|
-
border-radius: max(var(--zx-radius-
|
|
14
|
+
border-radius: max(var(--zx-radius-sm), calc(var(--zx-app-icon-size) * .12));
|
|
15
15
|
background: var(--zx-app-icon-color);
|
|
16
16
|
box-shadow: var(--zx-app-icon-shadow);
|
|
17
|
-
color: var(--zx-app-icon-glyph, var(--zx-color-
|
|
17
|
+
color: var(--zx-app-icon-glyph, var(--zx-color-app-icon-glyph));
|
|
18
18
|
font-size: var(--zx-app-icon-size);
|
|
19
19
|
vertical-align: middle;
|
|
20
|
+
transform: translateZ(0);
|
|
20
21
|
}
|
|
21
22
|
|
|
22
23
|
.zx-app-icon[data-glass="subtle"],
|
|
23
24
|
.zx-app-icon[data-glass="strong"] {
|
|
24
25
|
background:
|
|
25
|
-
linear-gradient(145deg, var(--zx-color-glass-highlight), transparent
|
|
26
|
+
linear-gradient(145deg, var(--zx-color-glass-highlight-strong), transparent 38%),
|
|
27
|
+
linear-gradient(to bottom right, transparent 42%, var(--zx-color-app-icon-depth)),
|
|
26
28
|
color-mix(in srgb, var(--zx-app-icon-color) var(--zx-glass-color-strength), transparent);
|
|
29
|
+
-webkit-backdrop-filter: blur(calc(var(--zx-glass-blur) * .55)) saturate(var(--zx-glass-saturation));
|
|
30
|
+
backdrop-filter: blur(calc(var(--zx-glass-blur) * .55)) saturate(var(--zx-glass-saturation));
|
|
27
31
|
}
|
|
28
32
|
|
|
29
33
|
.zx-app-icon[data-glass="strong"] {
|
|
34
|
+
-webkit-backdrop-filter: blur(var(--zx-glass-blur)) saturate(var(--zx-glass-saturation));
|
|
30
35
|
backdrop-filter: blur(var(--zx-glass-blur)) saturate(var(--zx-glass-saturation));
|
|
31
36
|
}
|
|
32
37
|
|
|
@@ -36,6 +41,7 @@
|
|
|
36
41
|
}
|
|
37
42
|
|
|
38
43
|
.zx-app-icon[data-glass="none"] .zx-app-icon__shine { display: none; }
|
|
44
|
+
.zx-app-icon[data-glass="none"]::after { display: none; }
|
|
39
45
|
|
|
40
46
|
.zx-app-icon[data-selected] {
|
|
41
47
|
outline: 2px solid var(--zx-color-bg-page);
|
|
@@ -44,34 +50,73 @@
|
|
|
44
50
|
|
|
45
51
|
.zx-app-icon__shine {
|
|
46
52
|
position: absolute;
|
|
47
|
-
z-index:
|
|
48
|
-
inset: 1px
|
|
49
|
-
block-size:
|
|
53
|
+
z-index: 1;
|
|
54
|
+
inset: 1px 13% auto;
|
|
55
|
+
block-size: 38%;
|
|
50
56
|
border-radius: 999px;
|
|
51
57
|
background: linear-gradient(to bottom, var(--zx-color-glass-highlight-strong), transparent);
|
|
52
|
-
filter: blur(
|
|
58
|
+
filter: blur(1px);
|
|
59
|
+
pointer-events: none;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.zx-app-icon::after {
|
|
63
|
+
content: "";
|
|
64
|
+
position: absolute;
|
|
65
|
+
z-index: 1;
|
|
66
|
+
inset: 0;
|
|
67
|
+
border-radius: inherit;
|
|
68
|
+
box-shadow: inset 0 0 0 1px var(--zx-color-glass-highlight);
|
|
53
69
|
pointer-events: none;
|
|
54
70
|
}
|
|
55
71
|
|
|
56
72
|
.zx-app-icon__glyph {
|
|
57
|
-
|
|
73
|
+
position: absolute;
|
|
74
|
+
z-index: 2;
|
|
75
|
+
inset-block-start: 50%;
|
|
76
|
+
inset-inline-start: 50%;
|
|
77
|
+
display: grid;
|
|
58
78
|
place-items: center;
|
|
59
79
|
inline-size: var(--zx-app-icon-glyph-size);
|
|
60
80
|
block-size: var(--zx-app-icon-glyph-size);
|
|
81
|
+
margin: 0;
|
|
82
|
+
padding: 0;
|
|
61
83
|
font-size: var(--zx-app-icon-glyph-size);
|
|
62
84
|
line-height: 1;
|
|
63
85
|
filter: drop-shadow(var(--zx-glass-glyph-shadow));
|
|
86
|
+
transform: translate(-50%, -50%);
|
|
64
87
|
}
|
|
65
88
|
|
|
66
89
|
.zx-app-icon__glyph > .zx-icon,
|
|
67
90
|
.zx-app-icon__glyph > svg,
|
|
68
91
|
.zx-app-icon__glyph > i {
|
|
92
|
+
display: grid;
|
|
93
|
+
place-items: center;
|
|
69
94
|
inline-size: 1em;
|
|
70
95
|
block-size: 1em;
|
|
96
|
+
margin: 0;
|
|
97
|
+
color: inherit;
|
|
98
|
+
font-size: 1em;
|
|
99
|
+
line-height: 1;
|
|
100
|
+
text-align: center;
|
|
101
|
+
vertical-align: middle;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.zx-app-icon__glyph > i::before {
|
|
105
|
+
display: block;
|
|
106
|
+
line-height: 1;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.zx-app-icon__glyph svg [fill]:not([fill="none"]) {
|
|
110
|
+
fill: currentColor;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.zx-app-icon__glyph svg [stroke]:not([stroke="none"]) {
|
|
114
|
+
stroke: currentColor;
|
|
71
115
|
}
|
|
72
116
|
|
|
73
117
|
.zx-app-icon__badge {
|
|
74
118
|
position: absolute;
|
|
119
|
+
z-index: 3;
|
|
75
120
|
inset-block-end: 1px;
|
|
76
121
|
inset-inline-end: 1px;
|
|
77
122
|
display: grid;
|
|
@@ -88,9 +133,41 @@
|
|
|
88
133
|
line-height: 1;
|
|
89
134
|
}
|
|
90
135
|
|
|
136
|
+
.zx-app-icon:hover {
|
|
137
|
+
border-color: var(--zx-color-glass-highlight-strong);
|
|
138
|
+
box-shadow: var(--zx-app-icon-shadow-hover);
|
|
139
|
+
filter: brightness(1.06) saturate(1.08);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.zx-app-icon:focus-visible,
|
|
143
|
+
:is(a, button, [role="button"]):focus-visible > .zx-app-icon {
|
|
144
|
+
outline: none;
|
|
145
|
+
box-shadow: var(--zx-focus-ring), var(--zx-app-icon-shadow-hover);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
149
|
+
.zx-app-icon {
|
|
150
|
+
transition: border-color var(--zx-dur-fast) var(--zx-ease),
|
|
151
|
+
box-shadow var(--zx-dur-fast) var(--zx-ease),
|
|
152
|
+
filter var(--zx-dur-fast) var(--zx-ease),
|
|
153
|
+
transform var(--zx-dur-fast) var(--zx-ease);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.zx-app-icon:hover {
|
|
157
|
+
transform: translateY(-2px) scale(1.035);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
91
161
|
@media (prefers-reduced-transparency: reduce) {
|
|
92
162
|
.zx-app-icon[data-glass="strong"] {
|
|
93
163
|
background: var(--zx-app-icon-color);
|
|
164
|
+
-webkit-backdrop-filter: none;
|
|
165
|
+
backdrop-filter: none;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
.zx-app-icon[data-glass="subtle"] {
|
|
169
|
+
background: var(--zx-app-icon-color);
|
|
170
|
+
-webkit-backdrop-filter: none;
|
|
94
171
|
backdrop-filter: none;
|
|
95
172
|
}
|
|
96
173
|
}
|
|
@@ -101,5 +178,12 @@
|
|
|
101
178
|
background: ButtonFace;
|
|
102
179
|
color: ButtonText;
|
|
103
180
|
box-shadow: none;
|
|
181
|
+
filter: none;
|
|
182
|
+
transform: none;
|
|
183
|
+
-webkit-backdrop-filter: none;
|
|
184
|
+
backdrop-filter: none;
|
|
104
185
|
}
|
|
186
|
+
|
|
187
|
+
.zx-app-icon::after,
|
|
188
|
+
.zx-app-icon__shine { display: none; }
|
|
105
189
|
}
|
|
@@ -95,11 +95,14 @@ export class AppIcon extends Component {
|
|
|
95
95
|
const badge = state.badge == null || state.badge === '' ? null : h('span', {
|
|
96
96
|
class: 'zx-app-icon__badge', ariaHidden: 'true'
|
|
97
97
|
}, String(state.badge));
|
|
98
|
-
|
|
98
|
+
const children = [
|
|
99
99
|
h('span', { class: 'zx-app-icon__shine', ariaHidden: 'true' }),
|
|
100
|
-
h('span', { class: 'zx-app-icon__glyph', ariaHidden: 'true' }, visual)
|
|
101
|
-
|
|
102
|
-
)
|
|
100
|
+
h('span', { class: 'zx-app-icon__glyph', ariaHidden: 'true' }, visual)
|
|
101
|
+
];
|
|
102
|
+
// Native replaceChildren() stringifies nullish arguments. Only append a badge when it exists,
|
|
103
|
+
// otherwise the icon gets a visible "null" text node that can also disturb optical centring.
|
|
104
|
+
if (badge) children.push(badge);
|
|
105
|
+
this.el.replaceChildren(...children);
|
|
103
106
|
}
|
|
104
107
|
}
|
|
105
108
|
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
min-block-size: var(--zx-control-height);
|
|
7
7
|
border: 1px solid var(--zx-color-border-control);
|
|
8
8
|
border-radius: var(--zx-button-radius, var(--zx-control-radius));
|
|
9
|
-
background: var(--zx-color-
|
|
9
|
+
background: var(--zx-color-glass-control);
|
|
10
10
|
color: var(--zx-color-text);
|
|
11
11
|
padding-inline: var(--zx-control-pad-x);
|
|
12
12
|
font: inherit;
|
|
@@ -14,6 +14,9 @@
|
|
|
14
14
|
font-weight: var(--zx-control-font-weight);
|
|
15
15
|
line-height: 1;
|
|
16
16
|
cursor: pointer;
|
|
17
|
+
-webkit-backdrop-filter: blur(var(--zx-glass-blur)) saturate(var(--zx-glass-saturation));
|
|
18
|
+
backdrop-filter: blur(var(--zx-glass-blur)) saturate(var(--zx-glass-saturation));
|
|
19
|
+
box-shadow: var(--zx-glass-control-shadow);
|
|
17
20
|
transition: color var(--zx-dur-fast) var(--zx-ease),
|
|
18
21
|
background-color var(--zx-dur-fast) var(--zx-ease),
|
|
19
22
|
border-color var(--zx-dur-fast) var(--zx-ease),
|
|
@@ -21,7 +24,7 @@
|
|
|
21
24
|
}
|
|
22
25
|
|
|
23
26
|
.zx-btn:hover:not(:disabled) {
|
|
24
|
-
background: var(--zx-color-
|
|
27
|
+
background: var(--zx-color-glass-control-hover);
|
|
25
28
|
}
|
|
26
29
|
|
|
27
30
|
.zx-btn:active:not(:disabled) {
|
|
@@ -66,6 +69,9 @@
|
|
|
66
69
|
.zx-btn[data-kind="ghost"] {
|
|
67
70
|
border-color: transparent;
|
|
68
71
|
background: none;
|
|
72
|
+
-webkit-backdrop-filter: none;
|
|
73
|
+
backdrop-filter: none;
|
|
74
|
+
box-shadow: none;
|
|
69
75
|
}
|
|
70
76
|
|
|
71
77
|
.zx-btn[data-kind="ghost"]:hover:not(:disabled) {
|
|
@@ -101,3 +107,29 @@
|
|
|
101
107
|
.zx-btn-group > .zx-btn:focus-visible {
|
|
102
108
|
z-index: 1;
|
|
103
109
|
}
|
|
110
|
+
|
|
111
|
+
@media (prefers-reduced-transparency: reduce) {
|
|
112
|
+
.zx-btn {
|
|
113
|
+
background: var(--zx-color-bg-control);
|
|
114
|
+
-webkit-backdrop-filter: none;
|
|
115
|
+
backdrop-filter: none;
|
|
116
|
+
box-shadow: none;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
@media (forced-colors: active) {
|
|
121
|
+
.zx-btn {
|
|
122
|
+
border-color: ButtonText;
|
|
123
|
+
background: ButtonFace;
|
|
124
|
+
color: ButtonText;
|
|
125
|
+
box-shadow: none;
|
|
126
|
+
-webkit-backdrop-filter: none;
|
|
127
|
+
backdrop-filter: none;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
.zx-btn[data-kind="primary"] {
|
|
131
|
+
border-color: Highlight;
|
|
132
|
+
background: Highlight;
|
|
133
|
+
color: HighlightText;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
@@ -14,9 +14,11 @@
|
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
.zx-card[data-variant="raised"] {
|
|
17
|
-
border: 1px solid
|
|
18
|
-
background: var(--zx-color-
|
|
19
|
-
|
|
17
|
+
border: 1px solid var(--zx-color-glass-border);
|
|
18
|
+
background: var(--zx-color-glass-surface);
|
|
19
|
+
-webkit-backdrop-filter: blur(var(--zx-glass-blur)) saturate(var(--zx-glass-saturation));
|
|
20
|
+
backdrop-filter: blur(var(--zx-glass-blur)) saturate(var(--zx-glass-saturation));
|
|
21
|
+
box-shadow: var(--zx-glass-raised-shadow);
|
|
20
22
|
}
|
|
21
23
|
|
|
22
24
|
.zx-card[data-variant="filled"] {
|
|
@@ -24,6 +26,26 @@
|
|
|
24
26
|
background: var(--zx-color-bg-muted);
|
|
25
27
|
}
|
|
26
28
|
|
|
29
|
+
@media (prefers-reduced-transparency: reduce) {
|
|
30
|
+
.zx-card[data-variant="raised"] {
|
|
31
|
+
border-color: var(--zx-color-border);
|
|
32
|
+
background: var(--zx-color-bg-surface);
|
|
33
|
+
-webkit-backdrop-filter: none;
|
|
34
|
+
backdrop-filter: none;
|
|
35
|
+
box-shadow: var(--zx-overlay-shadow);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
@media (forced-colors: active) {
|
|
40
|
+
.zx-card[data-variant="raised"] {
|
|
41
|
+
border-color: ButtonText;
|
|
42
|
+
background: Canvas;
|
|
43
|
+
box-shadow: none;
|
|
44
|
+
-webkit-backdrop-filter: none;
|
|
45
|
+
backdrop-filter: none;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
27
49
|
.zx-card[data-linked="true"]:hover {
|
|
28
50
|
background: var(--zx-color-bg-hover);
|
|
29
51
|
}
|
|
@@ -59,8 +59,9 @@
|
|
|
59
59
|
@supports (backdrop-filter: blur(1px)) {
|
|
60
60
|
.zx-message__toast {
|
|
61
61
|
background: color-mix(in srgb, var(--zx-color-info-bg) 38%, var(--zx-color-glass-surface));
|
|
62
|
-
backdrop-filter: blur(var(--zx-
|
|
63
|
-
|
|
62
|
+
-webkit-backdrop-filter: blur(var(--zx-glass-blur)) saturate(var(--zx-glass-saturation));
|
|
63
|
+
backdrop-filter: blur(var(--zx-glass-blur)) saturate(var(--zx-glass-saturation));
|
|
64
|
+
box-shadow: var(--zx-glass-raised-shadow);
|
|
64
65
|
}
|
|
65
66
|
|
|
66
67
|
.zx-message__toast[data-kind="success"] {
|
|
@@ -77,7 +78,10 @@
|
|
|
77
78
|
}
|
|
78
79
|
|
|
79
80
|
@media (prefers-reduced-transparency: reduce) {
|
|
80
|
-
.zx-message__toast {
|
|
81
|
+
.zx-message__toast {
|
|
82
|
+
-webkit-backdrop-filter: none;
|
|
83
|
+
backdrop-filter: none;
|
|
84
|
+
}
|
|
81
85
|
.zx-message__toast[data-kind="info"] { background: var(--zx-color-info-bg); }
|
|
82
86
|
.zx-message__toast[data-kind="success"] { background: var(--zx-color-success-bg); }
|
|
83
87
|
.zx-message__toast[data-kind="warning"] { background: var(--zx-color-warning-bg); }
|
package/src/zeyos/icons.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
import { icon, loadFontAwesome } from '../index.js';
|
|
8
8
|
import { appIcon } from '../components/app-icon/app-icon.js';
|
|
9
9
|
import { isCssColor } from '../core/util.js';
|
|
10
|
-
import {
|
|
10
|
+
import { moduleInfo, normalizeModuleName } from './modules.js';
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* The ZeyOS Font Awesome kit. It carries the licensed Font Awesome styles plus the custom
|
|
@@ -65,8 +65,8 @@ export function moduleIcon(name, options = {}) {
|
|
|
65
65
|
|
|
66
66
|
/**
|
|
67
67
|
* Creates a module's icon chip: the glyph on the module's identity colour, the way ZeyOS draws
|
|
68
|
-
* module icons in navigation and record headers.
|
|
69
|
-
*
|
|
68
|
+
* module icons in navigation and record headers. AppIcon identity glyphs stay white across every
|
|
69
|
+
* module colour; material shading and the glyph shadow preserve their silhouette on light colours.
|
|
70
70
|
* @param {string} name Module, entity, or resource name.
|
|
71
71
|
* @param {ModuleChipOptions} [options={}] Display and accessibility options.
|
|
72
72
|
* @returns {HTMLElement} A `<span class="zx-module-icon">` wrapping the glyph.
|
|
@@ -93,8 +93,8 @@ export function moduleChip(name, options = {}) {
|
|
|
93
93
|
});
|
|
94
94
|
chip.dataset.module = key;
|
|
95
95
|
chip.style.setProperty('--zx-module-color', background);
|
|
96
|
-
chip.style.setProperty('--zx-module-glyph',
|
|
97
|
-
chip.style.setProperty('--zx-app-icon-glyph',
|
|
96
|
+
chip.style.setProperty('--zx-module-glyph', 'var(--zx-color-app-icon-glyph)');
|
|
97
|
+
chip.style.setProperty('--zx-app-icon-glyph', 'var(--zx-color-app-icon-glyph)');
|
|
98
98
|
if (title) chip.title = info.label;
|
|
99
99
|
return chip;
|
|
100
100
|
}
|
|
@@ -27,6 +27,8 @@
|
|
|
27
27
|
--zx-color-text-muted: var(--zx-gray-500);
|
|
28
28
|
--zx-color-text-placeholder: var(--zx-gray-400);
|
|
29
29
|
--zx-color-text-invert: var(--zx-gray-50);
|
|
30
|
+
--zx-color-app-icon-glyph: var(--zx-gray-0);
|
|
31
|
+
--zx-color-app-icon-shade: var(--zx-gray-950);
|
|
30
32
|
--zx-color-accent: var(--zx-accent-600);
|
|
31
33
|
--zx-color-accent-hover: var(--zx-accent-700);
|
|
32
34
|
--zx-color-accent-active: var(--zx-accent-700);
|
|
@@ -53,12 +55,18 @@
|
|
|
53
55
|
--zx-color-glass-border: color-mix(in srgb, var(--zx-gray-0) 24%, transparent);
|
|
54
56
|
--zx-color-glass-highlight: color-mix(in srgb, var(--zx-gray-0) 24%, transparent);
|
|
55
57
|
--zx-color-glass-highlight-strong: color-mix(in srgb, var(--zx-gray-0) 38%, transparent);
|
|
58
|
+
--zx-color-app-icon-depth: color-mix(in srgb, var(--zx-color-app-icon-shade) 26%, transparent);
|
|
56
59
|
--zx-color-glass-surface: color-mix(in srgb, var(--zx-color-bg-raised) 78%, transparent);
|
|
60
|
+
--zx-color-glass-control: color-mix(in srgb, var(--zx-color-bg-control) 88%, transparent);
|
|
61
|
+
--zx-color-glass-control-hover: color-mix(in srgb, var(--zx-color-bg-hover) 76%, var(--zx-color-glass-surface));
|
|
57
62
|
--zx-glass-blur: 8px;
|
|
58
63
|
--zx-glass-saturation: 130%;
|
|
59
64
|
--zx-glass-color-strength: 82%;
|
|
60
|
-
--zx-app-icon-shadow: inset 0 1px 0 color-mix(in srgb, var(--zx-gray-0) 28%, transparent), inset 0 -1px 0 color-mix(in srgb, var(--zx-gray-950) 16%, transparent), 0 5px 14px color-mix(in srgb, var(--zx-app-icon-
|
|
61
|
-
--zx-
|
|
65
|
+
--zx-app-icon-shadow: inset 0 1px 0 color-mix(in srgb, var(--zx-gray-0) 28%, transparent), inset 0 -1px 0 color-mix(in srgb, var(--zx-gray-950) 16%, transparent), 0 5px 14px color-mix(in srgb, var(--zx-color-app-icon-shade) 28%, transparent);
|
|
66
|
+
--zx-app-icon-shadow-hover: inset 0 1px 0 color-mix(in srgb, var(--zx-gray-0) 40%, transparent), inset 0 -1px 0 color-mix(in srgb, var(--zx-gray-950) 20%, transparent), 0 9px 22px color-mix(in srgb, var(--zx-color-app-icon-shade) 36%, transparent);
|
|
67
|
+
--zx-glass-control-shadow: inset 0 1px 0 color-mix(in srgb, var(--zx-gray-0) 18%, transparent), var(--zx-shadow-1);
|
|
68
|
+
--zx-glass-raised-shadow: inset 0 1px 0 color-mix(in srgb, var(--zx-gray-0) 18%, transparent), var(--zx-overlay-shadow);
|
|
69
|
+
--zx-glass-glyph-shadow: 0 1px 2px color-mix(in srgb, var(--zx-gray-950) 58%, transparent);
|
|
62
70
|
--zx-header-bg: var(--zx-gray-900);
|
|
63
71
|
--zx-header-text: var(--zx-gray-50);
|
|
64
72
|
}
|