@gyyxds/zy-ui 0.0.1 → 0.0.3

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 (42) hide show
  1. package/CHANGELOG.md +34 -19
  2. package/CONTRIBUTING.md +109 -99
  3. package/LICENSE +21 -0
  4. package/README.md +397 -162
  5. package/dist/zy-ui/badge/ZyBadge.vue.d.ts +4 -4
  6. package/dist/zy-ui/badge/index.d.ts +6 -6
  7. package/dist/zy-ui/button/ZyButton.vue.d.ts +3 -3
  8. package/dist/zy-ui/button/index.d.ts +9 -9
  9. package/dist/zy-ui/card/ZyCard.vue.d.ts +1 -1
  10. package/dist/zy-ui/card/index.d.ts +3 -3
  11. package/dist/zy-ui/checkbox/ZyCheckboxGroup.vue.d.ts +1 -1
  12. package/dist/zy-ui/checkbox/index.d.ts +3 -3
  13. package/dist/zy-ui/code-input/ZyCodeInput.vue.d.ts +2 -2
  14. package/dist/zy-ui/code-input/index.d.ts +2 -2
  15. package/dist/zy-ui/divider/ZyDivider.vue.d.ts +1 -1
  16. package/dist/zy-ui/divider/index.d.ts +3 -3
  17. package/dist/zy-ui/icon/ZyIcon.vue.d.ts +1 -1
  18. package/dist/zy-ui/icon/index.d.ts +1 -1
  19. package/dist/zy-ui/index.d.ts +62 -46
  20. package/dist/zy-ui/input/ZyInput.vue.d.ts +3 -3
  21. package/dist/zy-ui/input/index.d.ts +3 -3
  22. package/dist/zy-ui/loading/ZyLoading.vue.d.ts +1 -1
  23. package/dist/zy-ui/loading/index.d.ts +1 -1
  24. package/dist/zy-ui/mega-menu/ZyMegaMenu.vue.d.ts +12 -4
  25. package/dist/zy-ui/mega-menu/index.d.ts +16 -0
  26. package/dist/zy-ui/progress/ZyProgress.vue.d.ts +1 -1
  27. package/dist/zy-ui/progress/index.d.ts +3 -3
  28. package/dist/zy-ui/radio/ZyRadioGroup.vue.d.ts +3 -3
  29. package/dist/zy-ui/select/ZySelect.vue.d.ts +1 -1
  30. package/dist/zy-ui/select/index.d.ts +3 -3
  31. package/dist/zy-ui/space/ZySpace.vue.d.ts +1 -1
  32. package/dist/zy-ui/space/index.d.ts +3 -3
  33. package/dist/zy-ui/table/ZyTable.vue.d.ts +3 -3
  34. package/dist/zy-ui/tag/ZyTag.vue.d.ts +2 -2
  35. package/dist/zy-ui/tag/index.d.ts +6 -6
  36. package/dist/zy-ui/themes/basic.css +837 -832
  37. package/dist/zy-ui/themes/material.css +41 -37
  38. package/dist/zy-ui/themes/solid.css +665 -664
  39. package/dist/zy-ui/tree/ZyTree.vue.d.ts +2 -2
  40. package/dist/zy-ui/zy-ui.css +1 -1
  41. package/dist/zy-ui/zy-ui.js +299 -247
  42. package/package.json +82 -82
@@ -18,7 +18,7 @@
18
18
  * 与组件内 scoped 样式抢属性时,靠前缀 `html[data-zy-theme='solid']` 多出来的那一分
19
19
  * (属性选择器 + 类型选择器)取胜;少数被组件动效底图占住的属性用 !important 并注明。
20
20
  *
21
- * 深色**只换光,不换形**:材质这一层逐条复用,夜里靠 §0.1 的一组令牌把「四级阶梯」压暗、
21
+ * 深色**只换光,不换形**:材质这一层逐条复用,夜里靠 §0.1 的一组令牌把「四级阶梯」压暗、
22
22
  * 顶光收薄(95% → 16%)、落影加重。厚度 / 白弧 / 按下下沉全部保留。
23
23
  */
24
24
  @import './material.css';
@@ -128,96 +128,96 @@ html[data-zy-theme='solid'] {
128
128
 
129
129
  }
130
130
 
131
- /*
132
- * =====================================================================
133
- * 0.1 · 夜色令牌(键帽 · 夜)
134
- * ---------------------------------------------------------------------
135
- * 同一张桌,关了顶灯:槽最暗、桌面次之、键面亮起、浮板最亮。
136
- * 这一节只改**值**,不改任何结构与材质规则 —— 上面那层(凸 / 凹 / 白弧 / 厚度)
137
- * 一条都不用重写,深色档自动成立。
138
- * =====================================================================
139
- */
140
- html.dark[data-zy-theme='solid'] {
141
- /* ---------- 四级阶梯 ---------- */
142
- --zy-slot-face: #070b12; /* ① 槽:输入 / 托盘 / 轨道 */
143
- --zy-desk: #080d14; /* ② 桌面:页面底 */
144
- --zy-key-face: #2a3444; /* ③ 键面:按钮 / 卡片 / 标签 */
145
- --zy-key-face-float: #303c4c; /* ④ 浮板:对话框 / 弹层 / 面板 */
146
-
147
- --zy-key-base: #1e2734; /* 键面深一档 = 挤出底座 */
148
- --zy-key-base-strong: #131a24; /* 浮板 / 深槽里的底座 */
149
- /* 顶光:浅色档是 95% 白,夜里只剩一道薄光 */
150
- --zy-key-edge: rgba(255, 255, 255, 0.16);
151
- --zy-key-soft: 0 10px 18px rgba(0, 0, 0, 0.55);
152
- --zy-key-down: 0 2px 6px rgba(0, 0, 0, 0.6);
153
-
154
- /* 语义键面(--zy-*-key)与警示墨字在共用深色板 tokens/dark.css,这里不再重复 */
155
-
156
- /* ---------- 槽:内阴影加深、下沿高光收薄(95% → 6%) ---------- */
157
- --zy-slot-line: rgba(255, 255, 255, 0.06);
158
- --zy-slot-shadow:
159
- inset 0 2px 5px rgba(0, 0, 0, 0.62),
160
- inset 0 -1px 0 rgba(255, 255, 255, 0.07);
161
- --zy-slot-shadow-sm:
162
- inset 0 1.5px 4px rgba(0, 0, 0, 0.66),
163
- inset 0 -1px 0 rgba(255, 255, 255, 0.06);
164
-
165
- /* ---------- 覆盖组件层令牌 ---------- */
166
- --zy-surface: var(--zy-key-face);
167
- --zy-surface-sunken: var(--zy-slot-face);
168
- --zy-paper: var(--zy-desk);
169
- --zy-hairline: rgba(255, 255, 255, 0.1);
170
- --zy-hairline-strong: rgba(255, 255, 255, 0.18);
171
- --zy-shadow-card: 0 var(--zy-key-lift) 0 var(--zy-key-base), var(--zy-key-soft);
172
- --zy-shadow-float:
173
- 0 var(--zy-key-lift-lg) 0 var(--zy-key-base-strong),
174
- 0 28px 48px rgba(0, 0, 0, 0.6);
175
- --zy-shadow-deep: rgba(0, 0, 0, 0.55);
176
- --zy-shadow-press:
177
- 0 var(--zy-key-lift) 0 color-mix(in srgb, var(--zy-brand) 74%, #000),
178
- var(--zy-key-soft);
179
- --zy-focus-ring:
180
- 0 0 0 2px var(--zy-key-face),
181
- 0 0 0 4px color-mix(in srgb, var(--zy-brand) 45%, transparent);
182
- --zy-panel-body-bg: #1d2632;
183
-
184
- /* 表格:托盘更暗、表头是抬起的键条、斑马行在槽里分层 */
185
- --zy-table-header-bg: var(--zy-key-face);
186
- --zy-table-header-fg: #cfe1f2;
187
- --zy-table-row-stripe: color-mix(in srgb, var(--zy-key-face) 48%, var(--zy-slot-face));
188
- --zy-table-row-hover: transparent;
189
-
190
- /* 实心按钮:本主题不用渐变,这里只是把渐变令牌清空 */
191
- --zy-btn-grad-primary: none;
192
- --zy-btn-grad-primary-hover: none;
193
- --zy-btn-grad-success: none;
194
- --zy-btn-grad-success-hover: none;
195
- --zy-btn-grad-warning: none;
196
- --zy-btn-grad-warning-hover: none;
197
- --zy-btn-grad-info: none;
198
- --zy-btn-grad-info-hover: none;
199
-
200
- /*
201
- * 彩色键的 1px 顶亮边:浅色档是纯白(透明),夜里收薄到 34%,
202
- * 否则一颗深蓝键上会顶着一条纯白发丝 —— 那是全场最亮的一条线。
203
- */
204
- --zy-btn-edge-primary: rgba(255, 255, 255, 0.34);
205
- --zy-btn-edge-success: rgba(255, 255, 255, 0.34);
206
- --zy-btn-edge-warning: rgba(255, 255, 255, 0.34);
207
- --zy-btn-edge-info: rgba(255, 255, 255, 0.34);
208
- --zy-btn-fill-shade: rgba(255, 255, 255, 0.22);
209
-
210
- /* Element 映射 */
211
- --el-fill-color-light: var(--zy-slot-face);
212
- --el-fill-color-lighter: var(--zy-slot-face);
213
- --el-bg-color-overlay: var(--zy-key-face-float);
214
- --el-mask-color: rgba(0, 0, 0, 0.66);
215
- --el-border-color: var(--zy-hairline);
216
- --el-border-color-light: var(--zy-hairline);
217
- --el-border-color-lighter: var(--zy-hairline);
218
- --el-border-color-extra-light: var(--zy-hairline);
219
- }
220
-
131
+ /*
132
+ * =====================================================================
133
+ * 0.1 · 夜色令牌(键帽 · 夜)
134
+ * ---------------------------------------------------------------------
135
+ * 同一张桌,关了顶灯:槽最暗、桌面次之、键面亮起、浮板最亮。
136
+ * 这一节只改**值**,不改任何结构与材质规则 —— 上面那层(凸 / 凹 / 白弧 / 厚度)
137
+ * 一条都不用重写,深色档自动成立。
138
+ * =====================================================================
139
+ */
140
+ html.dark[data-zy-theme='solid'] {
141
+ /* ---------- 四级阶梯 ---------- */
142
+ --zy-slot-face: #070b12; /* ① 槽:输入 / 托盘 / 轨道 */
143
+ --zy-desk: #080d14; /* ② 桌面:页面底 */
144
+ --zy-key-face: #2a3444; /* ③ 键面:按钮 / 卡片 / 标签 */
145
+ --zy-key-face-float: #303c4c; /* ④ 浮板:对话框 / 弹层 / 面板 */
146
+
147
+ --zy-key-base: #1e2734; /* 键面深一档 = 挤出底座 */
148
+ --zy-key-base-strong: #131a24; /* 浮板 / 深槽里的底座 */
149
+ /* 顶光:浅色档是 95% 白,夜里只剩一道薄光 */
150
+ --zy-key-edge: rgba(255, 255, 255, 0.16);
151
+ --zy-key-soft: 0 10px 18px rgba(0, 0, 0, 0.55);
152
+ --zy-key-down: 0 2px 6px rgba(0, 0, 0, 0.6);
153
+
154
+ /* 语义键面(--zy-*-key)与警示墨字在共用深色板 tokens/dark.css,这里不再重复 */
155
+
156
+ /* ---------- 槽:内阴影加深、下沿高光收薄(95% → 6%) ---------- */
157
+ --zy-slot-line: rgba(255, 255, 255, 0.06);
158
+ --zy-slot-shadow:
159
+ inset 0 2px 5px rgba(0, 0, 0, 0.62),
160
+ inset 0 -1px 0 rgba(255, 255, 255, 0.07);
161
+ --zy-slot-shadow-sm:
162
+ inset 0 1.5px 4px rgba(0, 0, 0, 0.66),
163
+ inset 0 -1px 0 rgba(255, 255, 255, 0.06);
164
+
165
+ /* ---------- 覆盖组件层令牌 ---------- */
166
+ --zy-surface: var(--zy-key-face);
167
+ --zy-surface-sunken: var(--zy-slot-face);
168
+ --zy-paper: var(--zy-desk);
169
+ --zy-hairline: rgba(255, 255, 255, 0.1);
170
+ --zy-hairline-strong: rgba(255, 255, 255, 0.18);
171
+ --zy-shadow-card: 0 var(--zy-key-lift) 0 var(--zy-key-base), var(--zy-key-soft);
172
+ --zy-shadow-float:
173
+ 0 var(--zy-key-lift-lg) 0 var(--zy-key-base-strong),
174
+ 0 28px 48px rgba(0, 0, 0, 0.6);
175
+ --zy-shadow-deep: rgba(0, 0, 0, 0.55);
176
+ --zy-shadow-press:
177
+ 0 var(--zy-key-lift) 0 color-mix(in srgb, var(--zy-brand) 74%, #000),
178
+ var(--zy-key-soft);
179
+ --zy-focus-ring:
180
+ 0 0 0 2px var(--zy-key-face),
181
+ 0 0 0 4px color-mix(in srgb, var(--zy-brand) 45%, transparent);
182
+ --zy-panel-body-bg: #1d2632;
183
+
184
+ /* 表格:托盘更暗、表头是抬起的键条、斑马行在槽里分层 */
185
+ --zy-table-header-bg: var(--zy-key-face);
186
+ --zy-table-header-fg: #cfe1f2;
187
+ --zy-table-row-stripe: color-mix(in srgb, var(--zy-key-face) 48%, var(--zy-slot-face));
188
+ --zy-table-row-hover: transparent;
189
+
190
+ /* 实心按钮:本主题不用渐变,这里只是把渐变令牌清空 */
191
+ --zy-btn-grad-primary: none;
192
+ --zy-btn-grad-primary-hover: none;
193
+ --zy-btn-grad-success: none;
194
+ --zy-btn-grad-success-hover: none;
195
+ --zy-btn-grad-warning: none;
196
+ --zy-btn-grad-warning-hover: none;
197
+ --zy-btn-grad-info: none;
198
+ --zy-btn-grad-info-hover: none;
199
+
200
+ /*
201
+ * 彩色键的 1px 顶亮边:浅色档是纯白(透明),夜里收薄到 34%,
202
+ * 否则一颗深蓝键上会顶着一条纯白发丝 —— 那是全场最亮的一条线。
203
+ */
204
+ --zy-btn-edge-primary: rgba(255, 255, 255, 0.34);
205
+ --zy-btn-edge-success: rgba(255, 255, 255, 0.34);
206
+ --zy-btn-edge-warning: rgba(255, 255, 255, 0.34);
207
+ --zy-btn-edge-info: rgba(255, 255, 255, 0.34);
208
+ --zy-btn-fill-shade: rgba(255, 255, 255, 0.22);
209
+
210
+ /* Element 映射 */
211
+ --el-fill-color-light: var(--zy-slot-face);
212
+ --el-fill-color-lighter: var(--zy-slot-face);
213
+ --el-bg-color-overlay: var(--zy-key-face-float);
214
+ --el-mask-color: rgba(0, 0, 0, 0.66);
215
+ --el-border-color: var(--zy-hairline);
216
+ --el-border-color-light: var(--zy-hairline);
217
+ --el-border-color-lighter: var(--zy-hairline);
218
+ --el-border-color-extra-light: var(--zy-hairline);
219
+ }
220
+
221
221
  html[data-zy-theme='solid'] .zy-btn.el-button {
222
222
  font-weight: var(--zy-weight-control);
223
223
  /*
@@ -1749,397 +1749,397 @@ html[data-zy-theme='solid'] .zy-panel:has(.zy-panel__head) > .zy-panel__body {
1749
1749
  * 无障碍:实色主题的按压、回弹、滑行和辉光都必须尊重 reduced-motion。
1750
1750
  * 组件自身的 reduced-motion 规则保留;这里兜住主题层新增的过渡与动画。
1751
1751
  * ============================================================ */
1752
- /*
1753
- * =====================================================================
1754
- * 0.2 · 逐组件的「光」
1755
- * ---------------------------------------------------------------------
1756
- * 前面那些写死的浅色(rgba(15,23,42) 的落影、纯白的顶边、白面键)在夜里等于没有,
1757
- * 这一节按**同一组数值**把它们换成夜色:厚度、位移、圆角一个都不改,只换光。
1758
- * 写法与提案稿逐条对齐;配色仍从 §0.1 的令牌里取。
1759
- * =====================================================================
1760
- */
1761
-
1762
- /* 2.1 键帽几何:solid.css 里那些写死的浅色落影(rgba(15,23,42))在深色下等于没有,
1763
- * 这里按同一组数值把「影」换成黑,厚度与位移一个都不改。 */
1764
- html.dark[data-zy-theme='solid'] .zy-btn.is-press:not(.is-fill):not(.is-text):not(.is-link),
1765
- html.dark[data-zy-theme='solid'] .zy-btn.is-plain,
1766
- html.dark[data-zy-theme='solid'] .zy-btn.is-dashed,
1767
- html.dark[data-zy-theme='solid'] .zy-btn.is-sweep {
1768
- box-shadow:
1769
- 0 var(--zy-key-lift-btn) 0 var(--zy-key-base-btn),
1770
- 0 6px 14px rgba(0, 0, 0, 0.55) !important;
1771
- }
1772
-
1773
- html.dark[data-zy-theme='solid'] .zy-btn.el-button.is-press:not(.is-fill):not(.is-text):not(.is-link):not(.is-disabled):active,
1774
- html.dark[data-zy-theme='solid'] .zy-btn.el-button.is-plain:not(.is-disabled):active,
1775
- html.dark[data-zy-theme='solid'] .zy-btn.el-button.is-dashed:not(.is-disabled):active,
1776
- html.dark[data-zy-theme='solid'] .zy-btn.el-button.is-sweep:not(.is-disabled):active {
1777
- box-shadow:
1778
- 0 0 0 var(--zy-key-base-btn),
1779
- 0 2px 6px rgba(0, 0, 0, 0.6) !important;
1780
- }
1781
-
1782
- html.dark[data-zy-theme='solid'] .zy-btn:focus-visible {
1783
- box-shadow:
1784
- 0 var(--zy-key-lift-btn) 0 var(--zy-key-base-btn),
1785
- 0 6px 14px rgba(0, 0, 0, 0.55) !important;
1786
- }
1787
-
1788
- /* 2.2 彩色键面:键面用深档,字仍用白(这一条是「字色跟面走」的正面用法) */
1789
- html.dark[data-zy-theme='solid'] .zy-btn.el-button--primary {
1790
- --zy-key-face-btn: var(--zy-brand-key);
1791
- --zy-key-ink-btn: #fff;
1792
- }
1793
-
1794
- html.dark[data-zy-theme='solid'] .zy-btn.el-button--success {
1795
- --zy-key-face-btn: var(--zy-green-key);
1796
- --zy-key-ink-btn: #fff;
1797
- }
1798
-
1799
- html.dark[data-zy-theme='solid'] .zy-btn.el-button--warning {
1800
- --zy-key-face-btn: var(--zy-warning-key);
1801
- --zy-key-ink-btn: var(--zy-warning-ink);
1802
- }
1803
-
1804
- html.dark[data-zy-theme='solid'] .zy-btn.el-button--danger {
1805
- --zy-key-face-btn: var(--zy-danger-key);
1806
- --zy-key-ink-btn: #fff;
1807
- }
1808
-
1809
- html.dark[data-zy-theme='solid'] .zy-btn.el-button--info {
1810
- --zy-key-face-btn: var(--zy-info-key);
1811
- --zy-key-ink-btn: #fff;
1812
- }
1813
-
1814
- /* fill(键帽本体)用的是组件自己的 --zy-btn-fill-* 一组:
1815
- * 面色跟着深档、底座跟着面色深一档、影换成黑 —— 数值还是组件那几条公式,只换输入。 */
1816
- html.dark[data-zy-theme='solid'] .zy-btn.is-fill {
1817
- --zy-btn-fill-clr: var(--zy-brand-key);
1818
- --zy-btn-fill-hover-clr: #121a24;
1819
- --zy-btn-fill-shadow:
1820
- 0 var(--zy-btn-fill-lift) 0 var(--zy-btn-fill-base),
1821
- 0 6px 14px rgba(0, 0, 0, 0.55);
1822
- --zy-btn-fill-shadow-on:
1823
- 0 var(--zy-btn-fill-lift) 0 var(--zy-btn-fill-base-on),
1824
- 0 6px 14px rgba(0, 0, 0, 0.55);
1825
- --zy-btn-fill-shadow-down:
1826
- 0 0 0 var(--zy-btn-fill-base),
1827
- 0 2px 6px rgba(0, 0, 0, 0.6);
1828
- }
1829
-
1830
- html.dark[data-zy-theme='solid'] .zy-btn.is-fill.el-button--success {
1831
- --zy-btn-fill-clr: var(--zy-green-key);
1832
- }
1833
-
1834
- html.dark[data-zy-theme='solid'] .zy-btn.is-fill.el-button--warning {
1835
- --zy-btn-fill-clr: var(--zy-warning-key);
1836
- --zy-btn-fill-ink: var(--zy-warning-ink);
1837
- /* 悬停铺开的是深色键帽,铺开之后字必须回到白 —— 不能让墨字落在深色上 */
1838
- --zy-btn-fill-ink-on: #fff;
1839
- }
1840
-
1841
- html.dark[data-zy-theme='solid'] .zy-btn.is-fill.el-button--danger {
1842
- --zy-btn-fill-clr: var(--zy-danger-key);
1843
- }
1844
-
1845
- html.dark[data-zy-theme='solid'] .zy-btn.is-fill.el-button--info {
1846
- --zy-btn-fill-clr: var(--zy-info-key);
1847
- }
1848
-
1849
- /* 中性键(无 type):面用键面档,底座仍是「面色深一档」那条公式 */
1850
- html.dark[data-zy-theme='solid'] .zy-btn.is-fill:not(.el-button--primary):not(.el-button--success):not(.el-button--warning):not(.el-button--danger):not(.el-button--info) {
1851
- --zy-btn-fill-clr: var(--zy-key-face);
1852
- --zy-btn-fill-base: var(--zy-key-base);
1853
- --zy-btn-fill-ink: var(--zy-ink);
1854
- --zy-btn-fill-ink-on: #fff;
1855
- }
1856
-
1857
- /* 2.3 控件:槽不变形,只把「凹」加深;聚焦仍是槽外 2px 品牌环 */
1858
- html.dark[data-zy-theme='solid'] .zy-input.is-raised .el-input__wrapper,
1859
- html.dark[data-zy-theme='solid'] .zy-select.is-raised .el-select__wrapper {
1860
- box-shadow:
1861
- 0 var(--zy-key-lift) 0 var(--zy-key-base),
1862
- 0 6px 14px rgba(0, 0, 0, 0.55);
1863
- }
1864
-
1865
- @media (hover: hover) and (pointer: fine) {
1866
- html.dark[data-zy-theme='solid'] .zy-select.is-raised .el-select__wrapper:hover {
1867
- box-shadow:
1868
- 0 var(--zy-key-lift) 0 var(--zy-key-base),
1869
- 0 6px 14px rgba(0, 0, 0, 0.55);
1870
- }
1871
- }
1872
-
1873
- html.dark[data-zy-theme='solid'] .zy-input.is-raised .el-input__wrapper.is-focus,
1874
- html.dark[data-zy-theme='solid'] .zy-input.is-raised .el-input__wrapper.is-focus:hover,
1875
- html.dark[data-zy-theme='solid'] .zy-select.is-raised .el-select__wrapper.is-focused,
1876
- html.dark[data-zy-theme='solid'] .zy-select.is-raised .el-select__wrapper.is-focus,
1877
- html.dark[data-zy-theme='solid'] .zy-select.is-raised .el-select__wrapper:focus-visible {
1878
- box-shadow:
1879
- 0 0 0 var(--zy-key-base),
1880
- 0 2px 6px rgba(0, 0, 0, 0.6);
1881
- }
1882
-
1883
- /* 2.4 浮板:对话框 / 下拉 / 日期 / 时间 / 面板都抬到第四级,底座取更深的 --zy-key-base-strong */
1884
- html.dark[data-zy-theme='solid'] .zy-select-popper,
1885
- html.dark[data-zy-theme='solid'] .el-picker-panel,
1886
- html.dark[data-zy-theme='solid'] .el-time-panel,
1887
- html.dark[data-zy-theme='solid'] .el-time-range-picker {
1888
- background: var(--zy-key-face-float);
1889
- box-shadow:
1890
- inset 0 1px 0 var(--zy-key-edge),
1891
- 0 var(--zy-key-lift-sm) 0 var(--zy-key-base-strong),
1892
- 0 20px 36px rgba(0, 0, 0, 0.62) !important;
1893
- }
1894
-
1895
- html.dark[data-zy-theme='solid'] .zy-select-popper .zy-select-glide-pill {
1896
- background: var(--zy-slot-face);
1897
- box-shadow: var(--zy-slot-shadow-sm);
1898
- }
1899
-
1900
- html.dark[data-zy-theme='solid'] .zy-dialog {
1901
- background: var(--zy-key-face-float);
1902
- box-shadow:
1903
- inset 0 1px 0 var(--zy-key-edge),
1904
- 0 var(--zy-key-lift) 0 var(--zy-key-base-strong),
1905
- 0 32px 56px rgba(0, 0, 0, 0.7);
1906
- }
1907
-
1908
- html.dark[data-zy-theme='solid'] .zy-dialog .el-dialog__header,
1909
- html.dark[data-zy-theme='solid'] .zy-dialog .el-dialog__footer,
1910
- html.dark[data-zy-theme='solid'] .el-time-panel__footer {
1911
- background: var(--zy-slot-face);
1912
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06);
1913
- }
1914
-
1915
- html.dark[data-zy-theme='solid'] .zy-dialog .zy-dialog-mark {
1916
- background: var(--zy-brand-key);
1917
- box-shadow:
1918
- inset 0 1px 0 rgba(255, 255, 255, 0.24),
1919
- 0 var(--zy-key-lift-sm) 0 var(--zy-brand-key-hover);
1920
- }
1921
-
1922
- html.dark[data-zy-theme='solid'] .zy-panel {
1923
- background: var(--zy-key-face);
1924
- box-shadow:
1925
- inset 0 1px 0 var(--zy-key-edge),
1926
- 0 var(--zy-key-lift) 0 var(--zy-key-base),
1927
- 0 16px 30px rgba(0, 0, 0, 0.5);
1928
- }
1929
-
1930
- html.dark[data-zy-theme='solid'] .zy-panel__head {
1931
- background: var(--zy-key-face);
1932
- box-shadow: inset 0 -2px 0 var(--zy-slot-line);
1933
- }
1934
-
1935
- /* 2.5 选中的那几处:solid.css 里它们都直接铺 `--zy-brand`(亮档),
1936
- * 深色下必须换成键面档,否则白字落在亮蓝上只有 2.4:1。 */
1937
- html.dark[data-zy-theme='solid'] .zy-pagination .el-pager li.is-active,
1938
- html.dark[data-zy-theme='solid'] .el-picker-panel .el-date-table td.current:not(.disabled) .el-date-table-cell__text,
1939
- html.dark[data-zy-theme='solid'] .el-picker-panel .el-date-table td.start-date .el-date-table-cell__text,
1940
- html.dark[data-zy-theme='solid'] .el-picker-panel .el-date-table td.end-date .el-date-table-cell__text,
1941
- html.dark[data-zy-theme='solid'] .el-time-panel .el-time-spinner__item.is-active,
1942
- html.dark[data-zy-theme='solid'] .el-time-range-picker .el-time-spinner__item.is-active,
1943
- html.dark[data-zy-theme='solid'] .zy-tree .el-tree-node.is-current > .el-tree-node__content,
1944
- html.dark[data-zy-theme='solid'] .zy-verify__piece {
1945
- background-color: var(--zy-brand-key);
1946
- }
1947
-
1948
- html.dark[data-zy-theme='solid'] .zy-pagination .el-pager li.is-active,
1949
- html.dark[data-zy-theme='solid'] .el-picker-panel .el-date-table td.current:not(.disabled) .el-date-table-cell__text,
1950
- html.dark[data-zy-theme='solid'] .el-picker-panel .el-date-table td.start-date .el-date-table-cell__text,
1951
- html.dark[data-zy-theme='solid'] .el-picker-panel .el-date-table td.end-date .el-date-table-cell__text,
1952
- html.dark[data-zy-theme='solid'] .el-time-panel .el-time-spinner__item.is-active,
1953
- html.dark[data-zy-theme='solid'] .el-time-range-picker .el-time-spinner__item.is-active,
1954
- html.dark[data-zy-theme='solid'] .zy-tree .el-tree-node.is-current > .el-tree-node__content,
1955
- html.dark[data-zy-theme='solid'] .zy-verify__piece {
1956
- box-shadow:
1957
- inset 0 1px 0 rgba(255, 255, 255, 0.22),
1958
- 0 var(--zy-key-lift-sm) 0 var(--zy-brand-key-hover);
1959
- }
1960
-
1961
- html.dark[data-zy-theme='solid'] .zy-tree .el-tree-node.is-current > .el-tree-node__content {
1962
- box-shadow:
1963
- inset 0 1px 0 rgba(255, 255, 255, 0.22),
1964
- 0 var(--zy-key-lift-sm) 0 var(--zy-brand-key-hover);
1965
- }
1966
-
1967
- html.dark[data-zy-theme='solid'] .zy-verify__piece::after {
1968
- background-color: var(--zy-brand-key);
1969
- }
1970
-
1971
- /* 2.6 其余小件:把浅色档写死的落影 / 高光换成深色下的对应物 */
1972
- html.dark[data-zy-theme='solid'] .zy-pagination .el-pager li,
1973
- html.dark[data-zy-theme='solid'] .zy-pagination button.btn-prev,
1974
- html.dark[data-zy-theme='solid'] .zy-pagination button.btn-next {
1975
- box-shadow:
1976
- inset 0 1px 0 var(--zy-key-edge),
1977
- 0 var(--zy-key-lift-sm) 0 var(--zy-key-base),
1978
- 0 4px 8px rgba(0, 0, 0, 0.45);
1979
- }
1980
-
1981
- html.dark[data-zy-theme='solid'] .zy-pagination .el-pager li:active,
1982
- html.dark[data-zy-theme='solid'] .zy-pagination button.btn-prev:not(:disabled):active,
1983
- html.dark[data-zy-theme='solid'] .zy-pagination button.btn-next:not(:disabled):active {
1984
- box-shadow: 0 0 0 var(--zy-key-base);
1985
- }
1986
-
1987
- html.dark[data-zy-theme='solid'] .zy-pagination .btn-prev:disabled,
1988
- html.dark[data-zy-theme='solid'] .zy-pagination .btn-next:disabled {
1989
- box-shadow:
1990
- inset 0 1px 0 var(--zy-key-edge),
1991
- 0 var(--zy-key-lift-sm) 0 var(--zy-key-base);
1992
- }
1993
-
1994
- /* 复选框:面色取键面档(白勾 4.88:1),底座仍按「面色深一档」 */
1995
- html.dark[data-zy-theme='solid'] .zy-check:not(.is-checkmark):not(.is-tick) .el-checkbox__input:not(.is-disabled).is-checked .el-checkbox__inner,
1996
- html.dark[data-zy-theme='solid'] .zy-check:not(.is-checkmark):not(.is-tick) .el-checkbox__input:not(.is-disabled).is-indeterminate .el-checkbox__inner,
1997
- html.dark[data-zy-theme='solid'] .zy-tree .el-checkbox__input:not(.is-disabled).is-checked .el-checkbox__inner,
1998
- html.dark[data-zy-theme='solid'] .zy-tree .el-checkbox__input:not(.is-disabled).is-indeterminate .el-checkbox__inner {
1999
- background-color: var(--zy-brand-key);
2000
- box-shadow:
2001
- inset 0 1px 0 rgba(255, 255, 255, 0.22),
2002
- 0 var(--zy-key-lift-sm) 0 var(--zy-brand-key-hover);
2003
- }
2004
-
2005
- /* 分段组滑行块 / 树里的滑行键:面与底座走键面档 */
2006
- html.dark[data-zy-theme='solid'] .zy-radio-group:has(.el-radio-button) .zy-radio-button-slider {
2007
- box-shadow:
2008
- inset 0 1px 0 var(--zy-key-edge),
2009
- 0 var(--zy-key-lift-sm) 0 var(--zy-key-base),
2010
- 0 6px 12px rgba(0, 0, 0, 0.5);
2011
- }
2012
-
2013
- html.dark[data-zy-theme='solid'] .zy-radio .el-radio__inner {
2014
- background: var(--zy-slot-face);
2015
- }
2016
-
2017
- /* 开关:全息轨道保留,只把「按在桌上」的那 2px 底座换成更深的档 */
2018
- html.dark[data-zy-theme='solid'] .zy-switch-track {
2019
- box-shadow:
2020
- 0 var(--zy-key-lift-sm) 0 #04070b,
2021
- 0 10px 18px rgba(0, 0, 0, 0.55);
2022
- }
2023
-
2024
- /* 标签:浅色档的底座是「面色 26% 混 #c8d2de」(浅灰),深色下混到键面上;顶亮边从 85% 收薄 */
2025
- html.dark[data-zy-theme='solid'] .zy-tag {
2026
- box-shadow:
2027
- inset 0 1px 0 rgba(255, 255, 255, 0.14),
2028
- 0 var(--zy-key-lift-sm) 0 color-mix(in srgb, var(--el-tag-text-color) 24%, var(--zy-key-base)),
2029
- 0 4px 8px rgba(0, 0, 0, 0.35);
2030
- }
2031
-
2032
- html.dark[data-zy-theme='solid'] .zy-tag.is-fill {
2033
- --zy-tag-fill-clr: var(--zy-brand-key);
2034
- }
2035
-
2036
- html.dark[data-zy-theme='solid'] .zy-tag.is-fill.el-tag--success {
2037
- --zy-tag-fill-clr: var(--zy-green-key);
2038
- }
2039
-
2040
- html.dark[data-zy-theme='solid'] .zy-tag.is-fill.el-tag--warning {
2041
- --zy-tag-fill-clr: var(--zy-warning-key);
2042
- /* 琥珀面上白字只有 2.19:1;同 «实心按钮» 的做法,字换深墨(9.19:1) */
2043
- color: var(--zy-warning-ink);
2044
- --el-tag-text-color: var(--zy-warning-ink);
2045
- --el-tag-hover-color: var(--zy-warning-ink);
2046
- }
2047
-
2048
- html.dark[data-zy-theme='solid'] .zy-tag.is-fill.el-tag--danger {
2049
- --zy-tag-fill-clr: var(--zy-danger-key);
2050
- }
2051
-
2052
- html.dark[data-zy-theme='solid'] .zy-tag.is-fill.el-tag--info {
2053
- --zy-tag-fill-clr: var(--zy-info-key);
2054
- }
2055
-
2056
- /* 2.7 卡片:ZyCard 自己会把「面色 82% + 黑」推成底座、再配一层写死的浅色落影
2057
- * (rgba(15,23,42,.24))—— 深色下这层影等于没有,而且推出来的底座比 --zy-key-base 更亮一档。
2058
- * 卡片与按钮必须共用同一个底座,否则同一张桌上会出现两种厚度的键。 */
2059
- html.dark[data-zy-theme='solid'] .zy-card {
2060
- --zy-card-fill-base: var(--zy-key-base);
2061
- --zy-card-fill-base-on: #0f151d;
2062
- --zy-card-fill-hover-clr: #121a24;
2063
- /* 页眉分割线在键面上是一道「刻痕」,不是一道亮线 */
2064
- --zy-card-fill-line: rgba(0, 0, 0, 0.45);
2065
- --zy-card-fill-shadow:
2066
- 0 var(--zy-card-fill-lift) 0 var(--zy-key-base),
2067
- 0 14px 26px rgba(0, 0, 0, 0.5);
2068
- --zy-card-fill-shadow-press: 0 0 0 var(--zy-key-base);
2069
- }
2070
-
2071
- /* 2.8 舞台:同 A 的 1.9 —— 半透明叠色在深色下会把「台面」压到比桌面更暗,层级就反了 */
2072
-
2073
- /* 角标:一圈暗底 + 落地影,深色下影要更实 */
2074
- html.dark[data-zy-theme='solid'] .zy-badge .el-badge__content {
2075
- box-shadow:
2076
- inset 0 1px 0 rgba(255, 255, 255, 0.22),
2077
- 0 2px 0 rgba(0, 0, 0, 0.5),
2078
- 0 5px 10px rgba(0, 0, 0, 0.45);
2079
- }
2080
-
2081
- /* 进度条:轨道是槽;填充是一条键条,亮端提亮、暗端落深 */
2082
- html.dark[data-zy-theme='solid'] .zy-progress .el-progress-bar__inner {
2083
- background: linear-gradient(90deg, #5aa6e4 0%, #2876af 100%);
2084
- box-shadow:
2085
- inset 0 1px 0 rgba(255, 255, 255, 0.28),
2086
- inset 0 -1px 0 rgba(0, 0, 0, 0.3),
2087
- 0 2px 0 rgba(0, 0, 0, 0.45);
2088
- }
2089
-
2090
- /* 表格:托盘(槽)比桌面再暗一档;表头的下沿刻痕改成暗线;斑马行的条纹从键面混出来 */
2091
- html.dark[data-zy-theme='solid'] .zy-table-tray {
2092
- background-color: #0e1622;
2093
- box-shadow: var(--zy-slot-shadow);
2094
- }
2095
-
2096
- html.dark[data-zy-theme='solid'] .zy-table th.el-table__cell {
2097
- background-color: var(--zy-key-face);
2098
- box-shadow:
2099
- inset 0 1px 0 var(--zy-key-edge),
2100
- inset 0 -1px 0 rgba(0, 0, 0, 0.4),
2101
- 0 var(--zy-key-lift-sm) 0 var(--zy-key-base);
2102
- }
2103
-
2104
- html.dark[data-zy-theme='solid'] .zy-table .el-table__body tr.el-table__row--striped > td.el-table__cell {
2105
- background-color: color-mix(in srgb, var(--zy-key-face) 42%, var(--zy-slot-face));
2106
- }
2107
-
2108
- /* 树:整棵是托盘;悬停滑行的是一枚小键(面 + 顶光 + 小档底座) */
2109
- html.dark[data-zy-theme='solid'] .zy-tree {
2110
- background-color: #0e1622;
2111
- box-shadow: var(--zy-slot-shadow);
2112
- }
2113
-
2114
- html.dark[data-zy-theme='solid'] .zy-tree-shell .zy-tree-glide {
2115
- background: var(--zy-key-face);
2116
- box-shadow:
2117
- inset 0 1px 0 var(--zy-key-edge),
2118
- 0 var(--zy-key-lift-sm) 0 var(--zy-key-base);
2119
- }
2120
-
2121
- /* 提示:键帽条 + 左侧 6px 语义键块;底座 / 落影 / 亮边都换成深色档 */
2122
- html.dark[data-zy-theme='solid'] .zy-alert {
2123
- background: var(--zy-key-face);
2124
- box-shadow:
2125
- inset 0 1px 0 var(--zy-key-edge),
2126
- 0 var(--zy-key-lift) 0 var(--zy-key-base),
2127
- 0 6px 14px rgba(0, 0, 0, 0.55);
2128
- }
2129
-
2130
- /* 分割线:仍是一道刻痕(上暗下亮),深色下「暗」是纯黑、「亮」是 10% 白 —— 不能再用纯白 */
2131
- html.dark[data-zy-theme='solid'] .zy-divider.el-divider--horizontal {
2132
- background: linear-gradient(180deg, #000 0%, rgba(255, 255, 255, 0.1) 100%);
2133
- }
2134
-
2135
- /* 加载:落在桌面上的底影换成黑 */
2136
- html.dark[data-zy-theme='solid'] .zy-loading-dot::before,
2137
- html.dark[data-zy-theme='solid'] .zy-loading-ball {
2138
- box-shadow: 0 1px 0 rgba(0, 0, 0, 0.55);
2139
- }
2140
-
2141
- /* 滑块拼图验证:槽里的缺口要更暗(浅色档是墨色 60%,深色下直接用黑) */
2142
-
1752
+ /*
1753
+ * =====================================================================
1754
+ * 0.2 · 逐组件的「光」
1755
+ * ---------------------------------------------------------------------
1756
+ * 前面那些写死的浅色(rgba(15,23,42) 的落影、纯白的顶边、白面键)在夜里等于没有,
1757
+ * 这一节按**同一组数值**把它们换成夜色:厚度、位移、圆角一个都不改,只换光。
1758
+ * 写法与提案稿逐条对齐;配色仍从 §0.1 的令牌里取。
1759
+ * =====================================================================
1760
+ */
1761
+
1762
+ /* 2.1 键帽几何:solid.css 里那些写死的浅色落影(rgba(15,23,42))在深色下等于没有,
1763
+ * 这里按同一组数值把「影」换成黑,厚度与位移一个都不改。 */
1764
+ html.dark[data-zy-theme='solid'] .zy-btn.is-press:not(.is-fill):not(.is-text):not(.is-link),
1765
+ html.dark[data-zy-theme='solid'] .zy-btn.is-plain,
1766
+ html.dark[data-zy-theme='solid'] .zy-btn.is-dashed,
1767
+ html.dark[data-zy-theme='solid'] .zy-btn.is-sweep {
1768
+ box-shadow:
1769
+ 0 var(--zy-key-lift-btn) 0 var(--zy-key-base-btn),
1770
+ 0 6px 14px rgba(0, 0, 0, 0.55) !important;
1771
+ }
1772
+
1773
+ html.dark[data-zy-theme='solid'] .zy-btn.el-button.is-press:not(.is-fill):not(.is-text):not(.is-link):not(.is-disabled):active,
1774
+ html.dark[data-zy-theme='solid'] .zy-btn.el-button.is-plain:not(.is-disabled):active,
1775
+ html.dark[data-zy-theme='solid'] .zy-btn.el-button.is-dashed:not(.is-disabled):active,
1776
+ html.dark[data-zy-theme='solid'] .zy-btn.el-button.is-sweep:not(.is-disabled):active {
1777
+ box-shadow:
1778
+ 0 0 0 var(--zy-key-base-btn),
1779
+ 0 2px 6px rgba(0, 0, 0, 0.6) !important;
1780
+ }
1781
+
1782
+ html.dark[data-zy-theme='solid'] .zy-btn:focus-visible {
1783
+ box-shadow:
1784
+ 0 var(--zy-key-lift-btn) 0 var(--zy-key-base-btn),
1785
+ 0 6px 14px rgba(0, 0, 0, 0.55) !important;
1786
+ }
1787
+
1788
+ /* 2.2 彩色键面:键面用深档,字仍用白(这一条是「字色跟面走」的正面用法) */
1789
+ html.dark[data-zy-theme='solid'] .zy-btn.el-button--primary {
1790
+ --zy-key-face-btn: var(--zy-brand-key);
1791
+ --zy-key-ink-btn: #fff;
1792
+ }
1793
+
1794
+ html.dark[data-zy-theme='solid'] .zy-btn.el-button--success {
1795
+ --zy-key-face-btn: var(--zy-green-key);
1796
+ --zy-key-ink-btn: #fff;
1797
+ }
1798
+
1799
+ html.dark[data-zy-theme='solid'] .zy-btn.el-button--warning {
1800
+ --zy-key-face-btn: var(--zy-warning-key);
1801
+ --zy-key-ink-btn: var(--zy-warning-ink);
1802
+ }
1803
+
1804
+ html.dark[data-zy-theme='solid'] .zy-btn.el-button--danger {
1805
+ --zy-key-face-btn: var(--zy-danger-key);
1806
+ --zy-key-ink-btn: #fff;
1807
+ }
1808
+
1809
+ html.dark[data-zy-theme='solid'] .zy-btn.el-button--info {
1810
+ --zy-key-face-btn: var(--zy-info-key);
1811
+ --zy-key-ink-btn: #fff;
1812
+ }
1813
+
1814
+ /* fill(键帽本体)用的是组件自己的 --zy-btn-fill-* 一组:
1815
+ * 面色跟着深档、底座跟着面色深一档、影换成黑 —— 数值还是组件那几条公式,只换输入。 */
1816
+ html.dark[data-zy-theme='solid'] .zy-btn.is-fill {
1817
+ --zy-btn-fill-clr: var(--zy-brand-key);
1818
+ --zy-btn-fill-hover-clr: #121a24;
1819
+ --zy-btn-fill-shadow:
1820
+ 0 var(--zy-btn-fill-lift) 0 var(--zy-btn-fill-base),
1821
+ 0 6px 14px rgba(0, 0, 0, 0.55);
1822
+ --zy-btn-fill-shadow-on:
1823
+ 0 var(--zy-btn-fill-lift) 0 var(--zy-btn-fill-base-on),
1824
+ 0 6px 14px rgba(0, 0, 0, 0.55);
1825
+ --zy-btn-fill-shadow-down:
1826
+ 0 0 0 var(--zy-btn-fill-base),
1827
+ 0 2px 6px rgba(0, 0, 0, 0.6);
1828
+ }
1829
+
1830
+ html.dark[data-zy-theme='solid'] .zy-btn.is-fill.el-button--success {
1831
+ --zy-btn-fill-clr: var(--zy-green-key);
1832
+ }
1833
+
1834
+ html.dark[data-zy-theme='solid'] .zy-btn.is-fill.el-button--warning {
1835
+ --zy-btn-fill-clr: var(--zy-warning-key);
1836
+ --zy-btn-fill-ink: var(--zy-warning-ink);
1837
+ /* 悬停铺开的是深色键帽,铺开之后字必须回到白 —— 不能让墨字落在深色上 */
1838
+ --zy-btn-fill-ink-on: #fff;
1839
+ }
1840
+
1841
+ html.dark[data-zy-theme='solid'] .zy-btn.is-fill.el-button--danger {
1842
+ --zy-btn-fill-clr: var(--zy-danger-key);
1843
+ }
1844
+
1845
+ html.dark[data-zy-theme='solid'] .zy-btn.is-fill.el-button--info {
1846
+ --zy-btn-fill-clr: var(--zy-info-key);
1847
+ }
1848
+
1849
+ /* 中性键(无 type):面用键面档,底座仍是「面色深一档」那条公式 */
1850
+ html.dark[data-zy-theme='solid'] .zy-btn.is-fill:not(.el-button--primary):not(.el-button--success):not(.el-button--warning):not(.el-button--danger):not(.el-button--info) {
1851
+ --zy-btn-fill-clr: var(--zy-key-face);
1852
+ --zy-btn-fill-base: var(--zy-key-base);
1853
+ --zy-btn-fill-ink: var(--zy-ink);
1854
+ --zy-btn-fill-ink-on: #fff;
1855
+ }
1856
+
1857
+ /* 2.3 控件:槽不变形,只把「凹」加深;聚焦仍是槽外 2px 品牌环 */
1858
+ html.dark[data-zy-theme='solid'] .zy-input.is-raised .el-input__wrapper,
1859
+ html.dark[data-zy-theme='solid'] .zy-select.is-raised .el-select__wrapper {
1860
+ box-shadow:
1861
+ 0 var(--zy-key-lift) 0 var(--zy-key-base),
1862
+ 0 6px 14px rgba(0, 0, 0, 0.55);
1863
+ }
1864
+
1865
+ @media (hover: hover) and (pointer: fine) {
1866
+ html.dark[data-zy-theme='solid'] .zy-select.is-raised .el-select__wrapper:hover {
1867
+ box-shadow:
1868
+ 0 var(--zy-key-lift) 0 var(--zy-key-base),
1869
+ 0 6px 14px rgba(0, 0, 0, 0.55);
1870
+ }
1871
+ }
1872
+
1873
+ html.dark[data-zy-theme='solid'] .zy-input.is-raised .el-input__wrapper.is-focus,
1874
+ html.dark[data-zy-theme='solid'] .zy-input.is-raised .el-input__wrapper.is-focus:hover,
1875
+ html.dark[data-zy-theme='solid'] .zy-select.is-raised .el-select__wrapper.is-focused,
1876
+ html.dark[data-zy-theme='solid'] .zy-select.is-raised .el-select__wrapper.is-focus,
1877
+ html.dark[data-zy-theme='solid'] .zy-select.is-raised .el-select__wrapper:focus-visible {
1878
+ box-shadow:
1879
+ 0 0 0 var(--zy-key-base),
1880
+ 0 2px 6px rgba(0, 0, 0, 0.6);
1881
+ }
1882
+
1883
+ /* 2.4 浮板:对话框 / 下拉 / 日期 / 时间 / 面板都抬到第四级,底座取更深的 --zy-key-base-strong */
1884
+ html.dark[data-zy-theme='solid'] .zy-select-popper,
1885
+ html.dark[data-zy-theme='solid'] .el-picker-panel,
1886
+ html.dark[data-zy-theme='solid'] .el-time-panel,
1887
+ html.dark[data-zy-theme='solid'] .el-time-range-picker {
1888
+ background: var(--zy-key-face-float);
1889
+ box-shadow:
1890
+ inset 0 1px 0 var(--zy-key-edge),
1891
+ 0 var(--zy-key-lift-sm) 0 var(--zy-key-base-strong),
1892
+ 0 20px 36px rgba(0, 0, 0, 0.62) !important;
1893
+ }
1894
+
1895
+ html.dark[data-zy-theme='solid'] .zy-select-popper .zy-select-glide-pill {
1896
+ background: var(--zy-slot-face);
1897
+ box-shadow: var(--zy-slot-shadow-sm);
1898
+ }
1899
+
1900
+ html.dark[data-zy-theme='solid'] .zy-dialog {
1901
+ background: var(--zy-key-face-float);
1902
+ box-shadow:
1903
+ inset 0 1px 0 var(--zy-key-edge),
1904
+ 0 var(--zy-key-lift) 0 var(--zy-key-base-strong),
1905
+ 0 32px 56px rgba(0, 0, 0, 0.7);
1906
+ }
1907
+
1908
+ html.dark[data-zy-theme='solid'] .zy-dialog .el-dialog__header,
1909
+ html.dark[data-zy-theme='solid'] .zy-dialog .el-dialog__footer,
1910
+ html.dark[data-zy-theme='solid'] .el-time-panel__footer {
1911
+ background: var(--zy-slot-face);
1912
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06);
1913
+ }
1914
+
1915
+ html.dark[data-zy-theme='solid'] .zy-dialog .zy-dialog-mark {
1916
+ background: var(--zy-brand-key);
1917
+ box-shadow:
1918
+ inset 0 1px 0 rgba(255, 255, 255, 0.24),
1919
+ 0 var(--zy-key-lift-sm) 0 var(--zy-brand-key-hover);
1920
+ }
1921
+
1922
+ html.dark[data-zy-theme='solid'] .zy-panel {
1923
+ background: var(--zy-key-face);
1924
+ box-shadow:
1925
+ inset 0 1px 0 var(--zy-key-edge),
1926
+ 0 var(--zy-key-lift) 0 var(--zy-key-base),
1927
+ 0 16px 30px rgba(0, 0, 0, 0.5);
1928
+ }
1929
+
1930
+ html.dark[data-zy-theme='solid'] .zy-panel__head {
1931
+ background: var(--zy-key-face);
1932
+ box-shadow: inset 0 -2px 0 var(--zy-slot-line);
1933
+ }
1934
+
1935
+ /* 2.5 选中的那几处:solid.css 里它们都直接铺 `--zy-brand`(亮档),
1936
+ * 深色下必须换成键面档,否则白字落在亮蓝上只有 2.4:1。 */
1937
+ html.dark[data-zy-theme='solid'] .zy-pagination .el-pager li.is-active,
1938
+ html.dark[data-zy-theme='solid'] .el-picker-panel .el-date-table td.current:not(.disabled) .el-date-table-cell__text,
1939
+ html.dark[data-zy-theme='solid'] .el-picker-panel .el-date-table td.start-date .el-date-table-cell__text,
1940
+ html.dark[data-zy-theme='solid'] .el-picker-panel .el-date-table td.end-date .el-date-table-cell__text,
1941
+ html.dark[data-zy-theme='solid'] .el-time-panel .el-time-spinner__item.is-active,
1942
+ html.dark[data-zy-theme='solid'] .el-time-range-picker .el-time-spinner__item.is-active,
1943
+ html.dark[data-zy-theme='solid'] .zy-tree .el-tree-node.is-current > .el-tree-node__content,
1944
+ html.dark[data-zy-theme='solid'] .zy-verify__piece {
1945
+ background-color: var(--zy-brand-key);
1946
+ }
1947
+
1948
+ html.dark[data-zy-theme='solid'] .zy-pagination .el-pager li.is-active,
1949
+ html.dark[data-zy-theme='solid'] .el-picker-panel .el-date-table td.current:not(.disabled) .el-date-table-cell__text,
1950
+ html.dark[data-zy-theme='solid'] .el-picker-panel .el-date-table td.start-date .el-date-table-cell__text,
1951
+ html.dark[data-zy-theme='solid'] .el-picker-panel .el-date-table td.end-date .el-date-table-cell__text,
1952
+ html.dark[data-zy-theme='solid'] .el-time-panel .el-time-spinner__item.is-active,
1953
+ html.dark[data-zy-theme='solid'] .el-time-range-picker .el-time-spinner__item.is-active,
1954
+ html.dark[data-zy-theme='solid'] .zy-tree .el-tree-node.is-current > .el-tree-node__content,
1955
+ html.dark[data-zy-theme='solid'] .zy-verify__piece {
1956
+ box-shadow:
1957
+ inset 0 1px 0 rgba(255, 255, 255, 0.22),
1958
+ 0 var(--zy-key-lift-sm) 0 var(--zy-brand-key-hover);
1959
+ }
1960
+
1961
+ html.dark[data-zy-theme='solid'] .zy-tree .el-tree-node.is-current > .el-tree-node__content {
1962
+ box-shadow:
1963
+ inset 0 1px 0 rgba(255, 255, 255, 0.22),
1964
+ 0 var(--zy-key-lift-sm) 0 var(--zy-brand-key-hover);
1965
+ }
1966
+
1967
+ html.dark[data-zy-theme='solid'] .zy-verify__piece::after {
1968
+ background-color: var(--zy-brand-key);
1969
+ }
1970
+
1971
+ /* 2.6 其余小件:把浅色档写死的落影 / 高光换成深色下的对应物 */
1972
+ html.dark[data-zy-theme='solid'] .zy-pagination .el-pager li,
1973
+ html.dark[data-zy-theme='solid'] .zy-pagination button.btn-prev,
1974
+ html.dark[data-zy-theme='solid'] .zy-pagination button.btn-next {
1975
+ box-shadow:
1976
+ inset 0 1px 0 var(--zy-key-edge),
1977
+ 0 var(--zy-key-lift-sm) 0 var(--zy-key-base),
1978
+ 0 4px 8px rgba(0, 0, 0, 0.45);
1979
+ }
1980
+
1981
+ html.dark[data-zy-theme='solid'] .zy-pagination .el-pager li:active,
1982
+ html.dark[data-zy-theme='solid'] .zy-pagination button.btn-prev:not(:disabled):active,
1983
+ html.dark[data-zy-theme='solid'] .zy-pagination button.btn-next:not(:disabled):active {
1984
+ box-shadow: 0 0 0 var(--zy-key-base);
1985
+ }
1986
+
1987
+ html.dark[data-zy-theme='solid'] .zy-pagination .btn-prev:disabled,
1988
+ html.dark[data-zy-theme='solid'] .zy-pagination .btn-next:disabled {
1989
+ box-shadow:
1990
+ inset 0 1px 0 var(--zy-key-edge),
1991
+ 0 var(--zy-key-lift-sm) 0 var(--zy-key-base);
1992
+ }
1993
+
1994
+ /* 复选框:面色取键面档(白勾 4.88:1),底座仍按「面色深一档」 */
1995
+ html.dark[data-zy-theme='solid'] .zy-check:not(.is-checkmark):not(.is-tick) .el-checkbox__input:not(.is-disabled).is-checked .el-checkbox__inner,
1996
+ html.dark[data-zy-theme='solid'] .zy-check:not(.is-checkmark):not(.is-tick) .el-checkbox__input:not(.is-disabled).is-indeterminate .el-checkbox__inner,
1997
+ html.dark[data-zy-theme='solid'] .zy-tree .el-checkbox__input:not(.is-disabled).is-checked .el-checkbox__inner,
1998
+ html.dark[data-zy-theme='solid'] .zy-tree .el-checkbox__input:not(.is-disabled).is-indeterminate .el-checkbox__inner {
1999
+ background-color: var(--zy-brand-key);
2000
+ box-shadow:
2001
+ inset 0 1px 0 rgba(255, 255, 255, 0.22),
2002
+ 0 var(--zy-key-lift-sm) 0 var(--zy-brand-key-hover);
2003
+ }
2004
+
2005
+ /* 分段组滑行块 / 树里的滑行键:面与底座走键面档 */
2006
+ html.dark[data-zy-theme='solid'] .zy-radio-group:has(.el-radio-button) .zy-radio-button-slider {
2007
+ box-shadow:
2008
+ inset 0 1px 0 var(--zy-key-edge),
2009
+ 0 var(--zy-key-lift-sm) 0 var(--zy-key-base),
2010
+ 0 6px 12px rgba(0, 0, 0, 0.5);
2011
+ }
2012
+
2013
+ html.dark[data-zy-theme='solid'] .zy-radio .el-radio__inner {
2014
+ background: var(--zy-slot-face);
2015
+ }
2016
+
2017
+ /* 开关:全息轨道保留,只把「按在桌上」的那 2px 底座换成更深的档 */
2018
+ html.dark[data-zy-theme='solid'] .zy-switch-track {
2019
+ box-shadow:
2020
+ 0 var(--zy-key-lift-sm) 0 #04070b,
2021
+ 0 10px 18px rgba(0, 0, 0, 0.55);
2022
+ }
2023
+
2024
+ /* 标签:浅色档的底座是「面色 26% 混 #c8d2de」(浅灰),深色下混到键面上;顶亮边从 85% 收薄 */
2025
+ html.dark[data-zy-theme='solid'] .zy-tag {
2026
+ box-shadow:
2027
+ inset 0 1px 0 rgba(255, 255, 255, 0.14),
2028
+ 0 var(--zy-key-lift-sm) 0 color-mix(in srgb, var(--el-tag-text-color) 24%, var(--zy-key-base)),
2029
+ 0 4px 8px rgba(0, 0, 0, 0.35);
2030
+ }
2031
+
2032
+ html.dark[data-zy-theme='solid'] .zy-tag.is-fill {
2033
+ --zy-tag-fill-clr: var(--zy-brand-key);
2034
+ }
2035
+
2036
+ html.dark[data-zy-theme='solid'] .zy-tag.is-fill.el-tag--success {
2037
+ --zy-tag-fill-clr: var(--zy-green-key);
2038
+ }
2039
+
2040
+ html.dark[data-zy-theme='solid'] .zy-tag.is-fill.el-tag--warning {
2041
+ --zy-tag-fill-clr: var(--zy-warning-key);
2042
+ /* 琥珀面上白字只有 2.19:1;同 «实心按钮» 的做法,字换深墨(9.19:1) */
2043
+ color: var(--zy-warning-ink);
2044
+ --el-tag-text-color: var(--zy-warning-ink);
2045
+ --el-tag-hover-color: var(--zy-warning-ink);
2046
+ }
2047
+
2048
+ html.dark[data-zy-theme='solid'] .zy-tag.is-fill.el-tag--danger {
2049
+ --zy-tag-fill-clr: var(--zy-danger-key);
2050
+ }
2051
+
2052
+ html.dark[data-zy-theme='solid'] .zy-tag.is-fill.el-tag--info {
2053
+ --zy-tag-fill-clr: var(--zy-info-key);
2054
+ }
2055
+
2056
+ /* 2.7 卡片:ZyCard 自己会把「面色 82% + 黑」推成底座、再配一层写死的浅色落影
2057
+ * (rgba(15,23,42,.24))—— 深色下这层影等于没有,而且推出来的底座比 --zy-key-base 更亮一档。
2058
+ * 卡片与按钮必须共用同一个底座,否则同一张桌上会出现两种厚度的键。 */
2059
+ html.dark[data-zy-theme='solid'] .zy-card {
2060
+ --zy-card-fill-base: var(--zy-key-base);
2061
+ --zy-card-fill-base-on: #0f151d;
2062
+ --zy-card-fill-hover-clr: #121a24;
2063
+ /* 页眉分割线在键面上是一道「刻痕」,不是一道亮线 */
2064
+ --zy-card-fill-line: rgba(0, 0, 0, 0.45);
2065
+ --zy-card-fill-shadow:
2066
+ 0 var(--zy-card-fill-lift) 0 var(--zy-key-base),
2067
+ 0 14px 26px rgba(0, 0, 0, 0.5);
2068
+ --zy-card-fill-shadow-press: 0 0 0 var(--zy-key-base);
2069
+ }
2070
+
2071
+ /* 2.8 舞台:同 A 的 1.9 —— 半透明叠色在深色下会把「台面」压到比桌面更暗,层级就反了 */
2072
+
2073
+ /* 角标:一圈暗底 + 落地影,深色下影要更实 */
2074
+ html.dark[data-zy-theme='solid'] .zy-badge .el-badge__content {
2075
+ box-shadow:
2076
+ inset 0 1px 0 rgba(255, 255, 255, 0.22),
2077
+ 0 2px 0 rgba(0, 0, 0, 0.5),
2078
+ 0 5px 10px rgba(0, 0, 0, 0.45);
2079
+ }
2080
+
2081
+ /* 进度条:轨道是槽;填充是一条键条,亮端提亮、暗端落深 */
2082
+ html.dark[data-zy-theme='solid'] .zy-progress .el-progress-bar__inner {
2083
+ background: linear-gradient(90deg, #5aa6e4 0%, #2876af 100%);
2084
+ box-shadow:
2085
+ inset 0 1px 0 rgba(255, 255, 255, 0.28),
2086
+ inset 0 -1px 0 rgba(0, 0, 0, 0.3),
2087
+ 0 2px 0 rgba(0, 0, 0, 0.45);
2088
+ }
2089
+
2090
+ /* 表格:托盘(槽)比桌面再暗一档;表头的下沿刻痕改成暗线;斑马行的条纹从键面混出来 */
2091
+ html.dark[data-zy-theme='solid'] .zy-table-tray {
2092
+ background-color: #0e1622;
2093
+ box-shadow: var(--zy-slot-shadow);
2094
+ }
2095
+
2096
+ html.dark[data-zy-theme='solid'] .zy-table th.el-table__cell {
2097
+ background-color: var(--zy-key-face);
2098
+ box-shadow:
2099
+ inset 0 1px 0 var(--zy-key-edge),
2100
+ inset 0 -1px 0 rgba(0, 0, 0, 0.4),
2101
+ 0 var(--zy-key-lift-sm) 0 var(--zy-key-base);
2102
+ }
2103
+
2104
+ html.dark[data-zy-theme='solid'] .zy-table .el-table__body tr.el-table__row--striped > td.el-table__cell {
2105
+ background-color: color-mix(in srgb, var(--zy-key-face) 42%, var(--zy-slot-face));
2106
+ }
2107
+
2108
+ /* 树:整棵是托盘;悬停滑行的是一枚小键(面 + 顶光 + 小档底座) */
2109
+ html.dark[data-zy-theme='solid'] .zy-tree {
2110
+ background-color: #0e1622;
2111
+ box-shadow: var(--zy-slot-shadow);
2112
+ }
2113
+
2114
+ html.dark[data-zy-theme='solid'] .zy-tree-shell .zy-tree-glide {
2115
+ background: var(--zy-key-face);
2116
+ box-shadow:
2117
+ inset 0 1px 0 var(--zy-key-edge),
2118
+ 0 var(--zy-key-lift-sm) 0 var(--zy-key-base);
2119
+ }
2120
+
2121
+ /* 提示:键帽条 + 左侧 6px 语义键块;底座 / 落影 / 亮边都换成深色档 */
2122
+ html.dark[data-zy-theme='solid'] .zy-alert {
2123
+ background: var(--zy-key-face);
2124
+ box-shadow:
2125
+ inset 0 1px 0 var(--zy-key-edge),
2126
+ 0 var(--zy-key-lift) 0 var(--zy-key-base),
2127
+ 0 6px 14px rgba(0, 0, 0, 0.55);
2128
+ }
2129
+
2130
+ /* 分割线:仍是一道刻痕(上暗下亮),深色下「暗」是纯黑、「亮」是 10% 白 —— 不能再用纯白 */
2131
+ html.dark[data-zy-theme='solid'] .zy-divider.el-divider--horizontal {
2132
+ background: linear-gradient(180deg, #000 0%, rgba(255, 255, 255, 0.1) 100%);
2133
+ }
2134
+
2135
+ /* 加载:落在桌面上的底影换成黑 */
2136
+ html.dark[data-zy-theme='solid'] .zy-loading-dot::before,
2137
+ html.dark[data-zy-theme='solid'] .zy-loading-ball {
2138
+ box-shadow: 0 1px 0 rgba(0, 0, 0, 0.55);
2139
+ }
2140
+
2141
+ /* 滑块拼图验证:槽里的缺口要更暗(浅色档是墨色 60%,深色下直接用黑) */
2142
+
2143
2143
  @media (prefers-reduced-motion: reduce) {
2144
2144
  html[data-zy-theme='solid']
2145
2145
  :is(
@@ -2166,185 +2166,186 @@ html.dark[data-zy-theme='solid'] .zy-loading-ball {
2166
2166
  animation: none !important;
2167
2167
  transition: none !important;
2168
2168
  }
2169
- }
2170
-
2171
- /* ============================================================
2172
- * 24 · 菜单导航(Mega Menu)—— 实色键帽
2173
- *
2174
- * 条 = **无标题容器那张面**(白面 + 1px 顶光 + 4px 底座 + 落影),
2175
- * 入口是面上的字(悬停按出一个小坑),展开那颗**点亮并按下**(品牌面 + 两侧白弧 + 底部高光),
2176
- * 面板 = 第四级浮板,面板里的悬停反过来凹下去(槽)—— 一凸一凹才分得清层级。
2177
- *
2178
- * 深色:夜色令牌在 §0.1(键面 / 浮板 / 槽 / 语义键面),菜单只在自己的根上把它们
2179
- * 映成一组 --zy-mm-* —— 条、面板、槽、点亮键各自取对应那一级,不再写死数值。
2180
- * ============================================================ */
2181
-
2182
- html[data-zy-theme='solid'] .zy-mega-menu {
2183
- --zy-mm-bar: var(--zy-key-face);
2184
- --zy-mm-bar-base: var(--zy-key-base);
2185
- --zy-mm-bar-edge: var(--zy-key-edge);
2186
- --zy-mm-bar-shadow: 0 12px 26px rgba(15, 23, 42, 0.12);
2187
- --zy-mm-panel: var(--zy-key-face);
2188
- --zy-mm-panel-shadow:
2189
- 0 var(--zy-key-lift-lg) 0 var(--zy-key-base-strong),
2190
- 0 22px 40px rgba(15, 23, 42, 0.2);
2191
- --zy-mm-slot: var(--zy-slot-face);
2192
- --zy-mm-slot-line: var(--zy-slot-line);
2193
- --zy-mm-slot-shadow: var(--zy-slot-shadow-sm);
2194
- --zy-mm-key: var(--zy-brand);
2195
- --zy-mm-key-base: color-mix(in srgb, var(--zy-brand) 78%, #000);
2196
- --zy-mm-brand: var(--zy-brand);
2197
- --zy-mm-key-edge: rgba(255, 255, 255, 0.3);
2198
- --zy-mm-more: var(--zy-brand);
2199
- --zy-mm-ink: var(--zy-ink);
2200
- --zy-mm-muted: var(--zy-muted);
2201
- }
2202
-
2203
- html.dark[data-zy-theme='solid'] .zy-mega-menu {
2204
- /* 夜里的四级阶梯全部取 §0.1 的令牌:条回到键面、面板上浮一档、面板里的悬停沉进槽 */
2205
- --zy-mm-bar: var(--zy-key-face);
2206
- --zy-mm-bar-base: var(--zy-key-base);
2207
- --zy-mm-bar-edge: var(--zy-key-edge);
2208
- --zy-mm-bar-shadow: 0 16px 30px rgba(0, 0, 0, 0.5);
2209
- --zy-mm-panel: var(--zy-key-face-float);
2210
- --zy-mm-panel-shadow: var(--zy-shadow-float);
2211
- --zy-mm-slot: var(--zy-slot-face);
2212
- --zy-mm-slot-line: var(--zy-slot-line);
2213
- --zy-mm-slot-shadow: var(--zy-slot-shadow-sm);
2214
- --zy-mm-key: var(--zy-brand-key);
2215
- --zy-mm-key-base: var(--zy-brand-key-hover);
2216
- /* 文字品牌取共用板的 --zy-brand(#5aa6e4,与方案稿同值) */
2217
- --zy-mm-brand: var(--zy-brand);
2218
- --zy-mm-key-edge: rgba(255, 255, 255, 0.22);
2219
- --zy-mm-more: color-mix(in srgb, var(--zy-brand) 74%, #fff);
2220
- --zy-mm-ink: var(--zy-ink);
2221
- --zy-mm-muted: var(--zy-muted);
2222
- }
2223
-
2224
- html[data-zy-theme='solid'] .zy-mega-menu__bar {
2225
- padding: 0 10px;
2226
- border-radius: var(--zy-radius);
2227
- background: var(--zy-mm-bar);
2228
- box-shadow:
2229
- inset 0 1px 0 var(--zy-mm-bar-edge),
2230
- 0 var(--zy-key-lift) 0 var(--zy-mm-bar-base),
2231
- var(--zy-mm-bar-shadow);
2232
- }
2233
-
2234
- html[data-zy-theme='solid'] .zy-mega-menu__mark {
2235
- border-radius: var(--zy-radius-sm);
2236
- background: var(--zy-mm-slot);
2237
- color: var(--zy-mm-brand);
2238
- box-shadow: var(--zy-mm-slot-shadow);
2239
- }
2240
-
2241
- html[data-zy-theme='solid'] .zy-mega-menu__sub {
2242
- color: var(--zy-mm-muted);
2243
- }
2244
-
2245
- /* 条已经是一张「面」,入口就不再是浮在槽上的键,而是面上的字:
2246
- * 悬停把它按出一个小坑(槽);展开那颗才升级成「点亮并按下」的品牌键。 */
2247
- html[data-zy-theme='solid'] .zy-mega-menu__trigger,
2248
- html[data-zy-theme='solid'] .zy-mega-menu__plain {
2249
- color: var(--zy-mm-ink);
2250
- border-radius: var(--zy-radius-sm);
2251
- background: transparent;
2252
- box-shadow: none;
2253
- transition:
2254
- background-color 120ms var(--zy-ease-soft),
2255
- box-shadow 120ms var(--zy-ease-soft),
2256
- color 120ms var(--zy-ease-soft);
2257
- }
2258
-
2259
- html[data-zy-theme='solid'] .zy-mega-menu__trigger:hover,
2260
- html[data-zy-theme='solid'] .zy-mega-menu__plain:hover {
2261
- background: var(--zy-mm-slot);
2262
- box-shadow: var(--zy-mm-slot-shadow);
2263
- }
2264
-
2265
- /* 展开 = 点亮并按下:与 primary / 树当前行同一套键帽图层(白弧与高光由 material.css 给),底座收平 */
2266
- html[data-zy-theme='solid'] .zy-mega-menu__trigger.is-open {
2267
- --zy-key-h: 32px;
2268
- --zy-key-lift-now: var(--zy-key-lift-sm);
2269
- color: #fff;
2270
- background-color: var(--zy-mm-key);
2271
- background-image: var(--zy-key-stack);
2272
- background-repeat: no-repeat;
2273
- background-position: var(--zy-key-stack-pos);
2274
- background-size: var(--zy-key-stack-size);
2275
- box-shadow:
2276
- inset 0 1px 0 var(--zy-mm-key-edge),
2277
- 0 0 0 var(--zy-mm-key-base);
2278
- transform: translateY(2px);
2279
- }
2280
-
2281
- html[data-zy-theme='solid'] .zy-mega-menu__panel {
2282
- top: calc(100% + 12px);
2283
- background: var(--zy-mm-panel);
2284
- border-radius: 8px;
2285
- box-shadow:
2286
- inset 0 1px 0 var(--zy-mm-bar-edge),
2287
- var(--zy-mm-panel-shadow);
2288
- }
2289
-
2290
- html[data-zy-theme='solid'] .zy-mega-menu__glide {
2291
- border-radius: var(--zy-radius-sm);
2292
- background: var(--zy-mm-slot);
2293
- box-shadow: var(--zy-mm-slot-shadow);
2294
- }
2295
-
2296
- /* 浮板上的图标:刻一个小坑 —— 白面浮板上,白面键自己是看不见的 */
2297
- html[data-zy-theme='solid'] .zy-mega-menu__ico {
2298
- border-radius: var(--zy-radius-sm);
2299
- background: var(--zy-mm-slot);
2300
- color: var(--zy-mm-ink);
2301
- box-shadow: var(--zy-mm-slot-shadow);
2302
- }
2303
-
2304
- html[data-zy-theme='solid'] .zy-mega-menu__title,
2305
- html[data-zy-theme='solid'] .zy-mega-menu__group-link {
2306
- color: var(--zy-mm-ink);
2307
- }
2308
-
2309
- html[data-zy-theme='solid'] .zy-mega-menu__desc,
2310
- html[data-zy-theme='solid'] .zy-mega-menu__note {
2311
- color: var(--zy-mm-muted);
2312
- }
2313
-
2314
- html[data-zy-theme='solid'] .zy-mega-menu__badge {
2315
- color: var(--zy-mm-brand);
2316
- background: var(--zy-brand-soft);
2317
- }
2318
-
2319
- html[data-zy-theme='solid'] .zy-mega-menu__foot {
2320
- box-shadow: inset 0 1px 0 var(--zy-mm-slot-line);
2321
- }
2322
-
2323
- html[data-zy-theme='solid'] .zy-mega-menu__more {
2324
- color: var(--zy-mm-more);
2325
- }
2326
-
2327
- html[data-zy-theme='solid'] .zy-mega-menu__card {
2328
- border-radius: var(--zy-radius);
2329
- background: var(--zy-mm-slot);
2330
- box-shadow: var(--zy-mm-slot-shadow);
2331
- }
2332
-
2333
- html[data-zy-theme='solid'] .zy-mega-menu__group-title {
2334
- color: var(--zy-mm-muted);
2335
- box-shadow: inset 0 -1px 0 var(--zy-mm-slot-line);
2336
- }
2337
-
2338
- /* 浅底槽里的说明字:muted 在 #e9eef4 上只有 3.9:1,换成 78% 的墨(≈8.4:1) */
2339
- html[data-zy-theme='solid'] .zy-mega-menu__kicker,
2340
- html[data-zy-theme='solid'] .zy-mega-menu__card-desc {
2341
- color: color-mix(in srgb, var(--zy-mm-ink) 78%, transparent);
2342
- }
2343
-
2344
- html[data-zy-theme='solid'] .zy-mega-menu__card-title {
2345
- color: var(--zy-mm-ink);
2346
- }
2347
-
2348
- html[data-zy-theme='solid'] .zy-mega-menu__group-ico {
2349
- color: var(--zy-mm-muted);
2350
- }
2169
+ }
2170
+
2171
+ /* ============================================================
2172
+ * 24 · 菜单导航(Mega Menu)—— 实色键帽
2173
+ *
2174
+ * 条 = **无标题容器那张面**(白面 + 1px 顶光 + 4px 底座 + 落影),
2175
+ * 入口是面上的字(悬停按出一个小坑),展开那颗**点亮并按下**(品牌面 + 两侧白弧 + 底部高光),
2176
+ * 面板 = 第四级浮板,面板里的悬停反过来凹下去(槽)—— 一凸一凹才分得清层级。
2177
+ *
2178
+ * 深色:夜色令牌在 §0.1(键面 / 浮板 / 槽 / 语义键面),菜单只在自己的根上把它们
2179
+ * 映成一组 --zy-mm-* —— 条、面板、槽、点亮键各自取对应那一级,不再写死数值。
2180
+ * ============================================================ */
2181
+
2182
+ html[data-zy-theme='solid'] .zy-mega-menu {
2183
+ --zy-mm-bar: var(--zy-key-face);
2184
+ --zy-mm-bar-base: var(--zy-key-base);
2185
+ --zy-mm-bar-edge: var(--zy-key-edge);
2186
+ --zy-mm-bar-shadow: 0 12px 26px rgba(15, 23, 42, 0.12);
2187
+ --zy-mm-panel: var(--zy-key-face);
2188
+ --zy-mm-panel-shadow:
2189
+ 0 var(--zy-key-lift-lg) 0 var(--zy-key-base-strong),
2190
+ 0 22px 40px rgba(15, 23, 42, 0.2);
2191
+ --zy-mm-slot: var(--zy-slot-face);
2192
+ --zy-mm-slot-line: var(--zy-slot-line);
2193
+ --zy-mm-slot-shadow: var(--zy-slot-shadow-sm);
2194
+ --zy-mm-key: var(--zy-brand);
2195
+ --zy-mm-key-base: color-mix(in srgb, var(--zy-brand) 78%, #000);
2196
+ --zy-mm-brand: var(--zy-brand);
2197
+ --zy-mm-key-edge: rgba(255, 255, 255, 0.3);
2198
+ --zy-mm-more: var(--zy-brand);
2199
+ --zy-mm-ink: var(--zy-ink);
2200
+ --zy-mm-muted: var(--zy-muted);
2201
+ }
2202
+
2203
+ html.dark[data-zy-theme='solid'] .zy-mega-menu {
2204
+ /* 夜里的四级阶梯全部取 §0.1 的令牌:条回到键面、面板上浮一档、面板里的悬停沉进槽 */
2205
+ --zy-mm-bar: var(--zy-key-face);
2206
+ --zy-mm-bar-base: var(--zy-key-base);
2207
+ --zy-mm-bar-edge: var(--zy-key-edge);
2208
+ --zy-mm-bar-shadow: 0 16px 30px rgba(0, 0, 0, 0.5);
2209
+ --zy-mm-panel: var(--zy-key-face-float);
2210
+ --zy-mm-panel-shadow: var(--zy-shadow-float);
2211
+ --zy-mm-slot: var(--zy-slot-face);
2212
+ --zy-mm-slot-line: var(--zy-slot-line);
2213
+ --zy-mm-slot-shadow: var(--zy-slot-shadow-sm);
2214
+ --zy-mm-key: var(--zy-brand-key);
2215
+ --zy-mm-key-base: var(--zy-brand-key-hover);
2216
+ /* 文字品牌取共用板的 --zy-brand(#5aa6e4,与方案稿同值) */
2217
+ --zy-mm-brand: var(--zy-brand);
2218
+ --zy-mm-key-edge: rgba(255, 255, 255, 0.22);
2219
+ --zy-mm-more: color-mix(in srgb, var(--zy-brand) 74%, #fff);
2220
+ --zy-mm-ink: var(--zy-ink);
2221
+ --zy-mm-muted: var(--zy-muted);
2222
+ }
2223
+
2224
+ html[data-zy-theme='solid'] .zy-mega-menu__bar {
2225
+ padding: 0 10px;
2226
+ border-radius: var(--zy-radius);
2227
+ background: var(--zy-mm-bar);
2228
+ box-shadow:
2229
+ inset 0 1px 0 var(--zy-mm-bar-edge),
2230
+ 0 var(--zy-key-lift) 0 var(--zy-mm-bar-base),
2231
+ var(--zy-mm-bar-shadow);
2232
+ }
2233
+
2234
+ html[data-zy-theme='solid'] .zy-mega-menu__mark {
2235
+ border-radius: var(--zy-radius-sm);
2236
+ background: var(--zy-mm-slot);
2237
+ color: var(--zy-mm-brand);
2238
+ box-shadow: var(--zy-mm-slot-shadow);
2239
+ }
2240
+
2241
+ html[data-zy-theme='solid'] .zy-mega-menu__sub {
2242
+ color: var(--zy-mm-muted);
2243
+ }
2244
+
2245
+ /* 条已经是一张「面」,入口就是面上的字;悬停 / 选中 / 展开共用同一枚品牌键,
2246
+ * 只用箭头方向区分面板开合,不再另做一层按压或内凹。 */
2247
+ html[data-zy-theme='solid'] .zy-mega-menu__trigger,
2248
+ html[data-zy-theme='solid'] .zy-mega-menu__plain {
2249
+ color: var(--zy-mm-ink);
2250
+ border-radius: var(--zy-radius-sm);
2251
+ background: transparent;
2252
+ box-shadow: none;
2253
+ transition:
2254
+ background-color 120ms var(--zy-ease-soft),
2255
+ box-shadow 120ms var(--zy-ease-soft),
2256
+ color 120ms var(--zy-ease-soft);
2257
+ }
2258
+
2259
+ /* 悬停、一级选中、展开项:同一枚凸起的品牌键(不是内凹槽),
2260
+ * 选中态常亮,展开时也保持同一面,不再下沉。 */
2261
+ html[data-zy-theme='solid'] .zy-mega-menu__trigger:hover,
2262
+ html[data-zy-theme='solid'] .zy-mega-menu__plain:hover,
2263
+ html[data-zy-theme='solid'] .zy-mega-menu__trigger.is-current,
2264
+ html[data-zy-theme='solid'] .zy-mega-menu__plain.is-current,
2265
+ html[data-zy-theme='solid'] .zy-mega-menu__trigger.is-open {
2266
+ --zy-key-h: 32px;
2267
+ --zy-key-lift-now: var(--zy-key-lift-sm);
2268
+ color: #fff;
2269
+ background-color: var(--zy-mm-key);
2270
+ background-image: var(--zy-key-stack);
2271
+ background-repeat: no-repeat;
2272
+ background-position: var(--zy-key-stack-pos);
2273
+ background-size: var(--zy-key-stack-size);
2274
+ box-shadow:
2275
+ inset 0 1px 0 var(--zy-mm-key-edge),
2276
+ 0 var(--zy-key-lift-sm) 0 var(--zy-mm-key-base);
2277
+ }
2278
+
2279
+ html[data-zy-theme='solid'] .zy-mega-menu__panel {
2280
+ top: calc(100% + 12px);
2281
+ background: var(--zy-mm-panel);
2282
+ border-radius: 8px;
2283
+ box-shadow:
2284
+ inset 0 1px 0 var(--zy-mm-bar-edge),
2285
+ var(--zy-mm-panel-shadow);
2286
+ }
2287
+
2288
+ /* 滑行高亮与二级选中态共用一层皮:选中的那条一直亮着 */
2289
+ html[data-zy-theme='solid'] .zy-mega-menu__glide,
2290
+ html[data-zy-theme='solid'] .zy-mega-menu__link.is-current,
2291
+ html[data-zy-theme='solid'] .zy-mega-menu__group-link.is-current {
2292
+ border-radius: var(--zy-radius-sm);
2293
+ background: var(--zy-mm-slot);
2294
+ box-shadow: var(--zy-mm-slot-shadow);
2295
+ }
2296
+
2297
+ /* 浮板上的图标:刻一个小坑 —— 白面浮板上,白面键自己是看不见的 */
2298
+ html[data-zy-theme='solid'] .zy-mega-menu__ico {
2299
+ border-radius: var(--zy-radius-sm);
2300
+ background: var(--zy-mm-slot);
2301
+ color: var(--zy-mm-ink);
2302
+ box-shadow: var(--zy-mm-slot-shadow);
2303
+ }
2304
+
2305
+ html[data-zy-theme='solid'] .zy-mega-menu__title,
2306
+ html[data-zy-theme='solid'] .zy-mega-menu__group-link {
2307
+ color: var(--zy-mm-ink);
2308
+ }
2309
+
2310
+ html[data-zy-theme='solid'] .zy-mega-menu__desc,
2311
+ html[data-zy-theme='solid'] .zy-mega-menu__note {
2312
+ color: var(--zy-mm-muted);
2313
+ }
2314
+
2315
+ html[data-zy-theme='solid'] .zy-mega-menu__badge {
2316
+ color: var(--zy-mm-brand);
2317
+ background: var(--zy-brand-soft);
2318
+ }
2319
+
2320
+ html[data-zy-theme='solid'] .zy-mega-menu__foot {
2321
+ box-shadow: inset 0 1px 0 var(--zy-mm-slot-line);
2322
+ }
2323
+
2324
+ html[data-zy-theme='solid'] .zy-mega-menu__more {
2325
+ color: var(--zy-mm-more);
2326
+ }
2327
+
2328
+ html[data-zy-theme='solid'] .zy-mega-menu__card {
2329
+ border-radius: var(--zy-radius);
2330
+ background: var(--zy-mm-slot);
2331
+ box-shadow: var(--zy-mm-slot-shadow);
2332
+ }
2333
+
2334
+ html[data-zy-theme='solid'] .zy-mega-menu__group-title {
2335
+ color: var(--zy-mm-muted);
2336
+ box-shadow: inset 0 -1px 0 var(--zy-mm-slot-line);
2337
+ }
2338
+
2339
+ /* 浅底槽里的说明字:muted 在 #e9eef4 上只有 3.9:1,换成 78% 的墨(≈8.4:1) */
2340
+ html[data-zy-theme='solid'] .zy-mega-menu__kicker,
2341
+ html[data-zy-theme='solid'] .zy-mega-menu__card-desc {
2342
+ color: color-mix(in srgb, var(--zy-mm-ink) 78%, transparent);
2343
+ }
2344
+
2345
+ html[data-zy-theme='solid'] .zy-mega-menu__card-title {
2346
+ color: var(--zy-mm-ink);
2347
+ }
2348
+
2349
+ html[data-zy-theme='solid'] .zy-mega-menu__group-ico {
2350
+ color: var(--zy-mm-muted);
2351
+ }