@microi.net/cli 4.9.5 → 4.9.7

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 (133) hide show
  1. package/.codebuddy-plugin/marketplace.json +2 -2
  2. package/.codebuddy-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +1 -1
  4. package/.workbuddy-plugin/marketplace.json +2 -2
  5. package/.workbuddy-plugin/plugin.json +1 -1
  6. package/README.md +7 -12
  7. package/assets/build-meta.json +6 -5
  8. package/package.json +1 -1
  9. package/scripts/mcp-server.js +83 -83
  10. package/scripts/microi-cli.js +80 -92
  11. package/scripts/microi-codex-broker.js +418 -0
  12. package/scripts/microi-codex-router.js +159 -65
  13. package/scripts/microi-skills.meta.json +349 -190
  14. package/skills/.microi-skills-version.json +2 -2
  15. package/skills/.progressive-disclosure-manifest.json +3566 -0
  16. package/skills/ai-engine/SKILL.md +1 -1
  17. package/skills/ai-platform-governance/SKILL.md +22 -167
  18. package/skills/ai-platform-governance/references/progressive-01-/345/212/237/350/203/275/345/274/200/345/205/263.md +190 -0
  19. package/skills/app-store/SKILL.md +1 -1
  20. package/skills/business-blueprint/SKILL.md +1 -1
  21. package/skills/datasource-engine/SKILL.md +1 -1
  22. package/skills/dos-orm/SKILL.md +1 -1
  23. package/skills/job-engine/SKILL.md +1 -1
  24. package/skills/message-notification/SKILL.md +1 -1
  25. package/skills/microi-ai-application/SKILL.md +1 -1
  26. package/skills/microi-client-frontend/SKILL.md +18 -435
  27. package/skills/microi-client-frontend/references/progressive-01-3-/345/212/250/346/200/201/346/214/211/351/222/256/347/263/273/347/273/237.md +144 -0
  28. package/skills/microi-client-frontend/references/progressive-02-8-/350/277/220/350/241/214/346/227/266/351/253/230/351/242/221/345/235/221/345/244/215/347/233/230.md +178 -0
  29. package/skills/microi-client-frontend/references/progressive-03-vue3-/345/211/215/347/253/257/345/276/256/346/234/215/345/212/241/345/256/277/344/270/273/350/247/204/345/210/231.md +144 -0
  30. package/skills/microi-codex/SKILL.md +4 -4
  31. package/skills/microi-codex-installer/SKILL.md +25 -36
  32. package/skills/microi-datasource-mapping/SKILL.md +1 -1
  33. package/skills/microi-db-schema/SKILL.md +4 -4
  34. package/skills/microi-db-schema/references/schema-overview.md +1 -1
  35. package/skills/microi-db-schema/references/schema.md +1 -1
  36. package/skills/microi-db-schema/references/table-catalog.md +1 -1
  37. package/skills/microi-deployment/SKILL.md +1 -1
  38. package/skills/microi-docs-coverage/SKILL.md +1 -1
  39. package/skills/microi-form-engine/SKILL.md +2 -2
  40. package/skills/microi-form-layout/SKILL.md +20 -226
  41. package/skills/microi-form-layout/references/progressive-01-3-/344/270/211/347/247/215/345/210/206/347/273/204/347/232/204/345/255/230/345/202/250/344/270/216/351/205/215/347/275/256.md +235 -0
  42. package/skills/microi-frontend-sdk/SKILL.md +18 -152
  43. package/skills/microi-frontend-sdk/references/progressive-01-token-/345/275/223/345/211/215/347/231/273/345/275/225/347/224/250/346/210/267/344/270/216/345/275/223/345/211/215/347/273/210/347/253/257/347/231/273/345/275/225/345/215/217/350/256/256.md +171 -0
  44. package/skills/microi-left-right-layout/SKILL.md +1 -1
  45. package/skills/microi-microservice/SKILL.md +8 -1
  46. package/skills/microi-microservice/references/runtime-delivery.md +4 -0
  47. package/skills/microi-mobile-app-quality/SKILL.md +23 -289
  48. package/skills/microi-mobile-app-quality/references/progressive-01-4-/351/207/215/350/246/201/346/214/211/351/222/256/345/277/205/351/241/273/345/270/246/345/233/276/346/240/207.md +209 -0
  49. package/skills/microi-mobile-app-quality/references/progressive-02-9-/344/270/273/351/242/230/345/210/207/346/215/242/345/277/205/351/241/273/347/234/237/345/256/236/344/270/224/345/205/250/345/261/200/347/224/237/346/225/210.md +117 -0
  50. package/skills/microi-solution-quotation/SKILL.md +1 -1
  51. package/skills/microi-system-delivery/SKILL.md +17 -381
  52. package/skills/microi-system-delivery/references/progressive-01-/346/240/207/345/207/206/345/267/245/344/275/234/346/265/201.md +186 -0
  53. package/skills/microi-system-delivery/references/progressive-02-/350/207/252/345/212/250/345/214/226/346/265/213/350/257/225/345/277/205/351/241/273/350/246/206/347/233/226/347/232/204/345/235/221.md +210 -0
  54. package/skills/microi-ui/SKILL.md +20 -170
  55. package/skills/microi-ui/references/progressive-01-/347/247/273/345/212/250/347/253/257/345/234/272/346/231/257/350/223/235/345/233/276.md +183 -0
  56. package/skills/microi-uniapp-frontend/SKILL.md +27 -336
  57. package/skills/microi-uniapp-frontend/references/progressive-01-/347/247/273/345/212/250/347/253/257/345/210/206/347/261/273-/345/217/214/346/240/217/345/210/227/350/241/250/347/213/254/347/253/213/346/273/232/345/212/250.md +225 -0
  58. package/skills/microi-uniapp-frontend/references/progressive-02-/345/205/263/351/224/256/344/270/232/345/212/241/350/265/204/344/272/247/344/270/215/345/276/227/351/273/230/350/256/244/351/200/211/344/270/255.md +154 -0
  59. package/skills/module-engine/SKILL.md +1 -1
  60. package/skills/ocr-engine/SKILL.md +1 -1
  61. package/skills/page-engine/SKILL.md +24 -272
  62. package/skills/page-engine/references/progressive-01-/346/211/200/346/234/211/347/273/204/344/273/266/347/261/273/345/236/213.md +234 -0
  63. package/skills/page-engine/references/progressive-02-/347/211/210/346/234/254/345/216/206/345/217/262-/345/271/266/345/217/221/344/277/235/345/255/230/344/270/216/345/233/236/346/273/232.md +60 -0
  64. package/skills/performance-testing/SKILL.md +1 -1
  65. package/skills/playwright-e2e/SKILL.md +25 -591
  66. package/skills/playwright-e2e/references/progressive-01-/345/205/250/350/207/252/345/212/250/347/231/273/345/275/225-/345/205/215/351/252/214/350/257/201/347/240/201-/344/275/206/344/270/215/345/205/215/345/257/206/347/240/201-/345/277/205/350/257/273.md +173 -0
  67. package/skills/playwright-e2e/references/progressive-02-/346/226/207/345/255/227/345/257/271/346/257/224/345/272/246/344/270/216/345/217/257/350/257/273/346/200/247/350/207/252/345/212/250/345/214/226/346/243/200/346/237/245-/345/277/205/345/201/232.md +183 -0
  68. package/skills/playwright-e2e/references/progressive-03-microi-helper-/346/250/241/346/235/277.md +221 -0
  69. package/skills/playwright-e2e/references/progressive-04-ci-/345/273/272/350/256/256.md +69 -0
  70. package/skills/print-engine/SKILL.md +1 -1
  71. package/skills/production-readonly-audit/SKILL.md +1 -1
  72. package/skills/report-engine/SKILL.md +1 -1
  73. package/skills/scripts/optimize-progressive-disclosure.mjs +204 -0
  74. package/skills/scripts/refresh-progressive-disclosure.mjs +64 -0
  75. package/skills/scripts/validate-progressive-disclosure.mjs +52 -0
  76. package/skills/search-engine/SKILL.md +1 -1
  77. package/skills/spider-engine/SKILL.md +1 -1
  78. package/skills/translate-engine/SKILL.md +1 -1
  79. package/skills/ui-design/SKILL.md +27 -1462
  80. package/skills/ui-design/references/progressive-01-/351/242/234/350/211/262/344/275/223/347/263/273-css-variables-/346/224/257/346/214/201/344/270/273/351/242/230/345/210/207/346/215/242.md +218 -0
  81. package/skills/ui-design/references/progressive-02-/345/255/227/344/275/223.md +155 -0
  82. package/skills/ui-design/references/progressive-03-/345/212/250/346/225/210/350/247/204/350/214/203-/344/270/260/345/257/214/344/275/206/344/270/215/345/215/241.md +235 -0
  83. package/skills/ui-design/references/progressive-04-/347/273/204/344/273/266/351/243/216/346/240/274/351/200/237/346/237/245.md +152 -0
  84. package/skills/ui-design/references/progressive-05-/347/247/273/345/212/250/347/253/257/344/270/223/347/224/250/350/247/204/350/214/203.md +238 -0
  85. package/skills/ui-design/references/progressive-06-/344/270/273/351/242/230/345/210/207/346/215/242/345/256/236/347/216/260.md +194 -0
  86. package/skills/ui-design/references/progressive-07-/351/200/237/346/237/245-/344/273/216/345/244/264/346/220/255/345/273/272/344/270/200/344/270/252/347/247/273/345/212/250/347/253/257/351/241/265/351/235/242.md +207 -0
  87. package/skills/ui-design/references/progressive-08-/350/241/250/345/215/225/345/210/206/347/273/204/350/247/204/350/214/203-tabs-vs-collapsegroup-/345/274/272/345/210/266.md +142 -0
  88. package/skills/uniapp-mall-assets/SKILL.md +1 -1
  89. package/skills/unity-integration/SKILL.md +1 -1
  90. package/skills/v8-api-config/SKILL.md +1 -1
  91. package/skills/v8-cache-pattern/SKILL.md +1 -1
  92. package/skills/v8-crud-api/SKILL.md +21 -246
  93. package/skills/v8-crud-api/references/progressive-01-/346/237/245/350/257/242/345/210/227/350/241/250-/345/210/206/351/241/265.md +226 -0
  94. package/skills/v8-crud-api/references/progressive-02-where-/346/235/241/344/273/266/350/257/255/346/263/225/351/200/237/346/237/245.md +49 -0
  95. package/skills/v8-debugging/SKILL.md +1 -1
  96. package/skills/v8-explorer-tree/SKILL.md +1 -1
  97. package/skills/v8-export-import/SKILL.md +16 -426
  98. package/skills/v8-export-import/references/progressive-01-excellayout-/351/253/230/347/272/247/350/207/252/347/224/261/345/270/203/345/261/200.md +211 -0
  99. package/skills/v8-export-import/references/progressive-02-powerpoint-/345/257/274/345/207/272.md +202 -0
  100. package/skills/v8-export-import/references/progressive-03-/345/256/211/345/205/250-/346/200/247/350/203/275/346/263/250/346/204/217.md +42 -0
  101. package/skills/v8-file-upload/SKILL.md +17 -355
  102. package/skills/v8-file-upload/references/progressive-01-/345/205/254/346/234/211/346/241/266-vs-/347/247/201/346/234/211/346/241/266.md +227 -0
  103. package/skills/v8-file-upload/references/progressive-02-office-/346/226/207/344/273/266/345/234/250/347/272/277/347/274/226/350/276/221/347/211/210/346/234/254/345/217/267/350/247/204/345/210/231.md +149 -0
  104. package/skills/v8-formengine-http/SKILL.md +1 -1
  105. package/skills/v8-frontend-events/SKILL.md +20 -206
  106. package/skills/v8-frontend-events/references/progressive-01-/345/210/227/350/241/250/344/272/213/344/273/266.md +219 -0
  107. package/skills/v8-http-integration/SKILL.md +15 -237
  108. package/skills/v8-http-integration/references/progressive-01-get-/350/257/267/346/261/202.md +220 -0
  109. package/skills/v8-http-integration/references/progressive-02-/351/224/231/350/257/257/345/244/204/347/220/206/346/250/241/345/274/217.md +44 -0
  110. package/skills/v8-image-processing/SKILL.md +1 -1
  111. package/skills/v8-menu-buttons/SKILL.md +16 -512
  112. package/skills/v8-menu-buttons/references/progressive-01-2-/346/214/211/351/222/256/345/257/271/350/261/241-schema.md +221 -0
  113. package/skills/v8-menu-buttons/references/progressive-02-8-/346/250/241/345/274/217-f-/345/220/216/345/217/260/344/273/273/345/212/241/346/214/211/351/222/256-/351/225/277/344/273/273/345/212/241.md +224 -0
  114. package/skills/v8-menu-buttons/references/progressive-03-10-/345/217/215/346/250/241/345/274/217-/351/201/277/345/205/215.md +104 -0
  115. package/skills/v8-mongodb/SKILL.md +1 -1
  116. package/skills/v8-mq-mqtt/SKILL.md +12 -176
  117. package/skills/v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-/347/211/251/350/201/224/347/275/221.md +181 -0
  118. package/skills/v8-saas-multi-tenant/SKILL.md +1 -1
  119. package/skills/v8-security/SKILL.md +17 -330
  120. package/skills/v8-security/references/progressive-01-2-/346/235/203/351/231/220/346/240/241/351/252/214.md +199 -0
  121. package/skills/v8-security/references/progressive-02-7-/346/227/245/345/277/227/350/256/260/345/275/225.md +158 -0
  122. package/skills/v8-sql-query/SKILL.md +1 -1
  123. package/skills/v8-table-event/SKILL.md +17 -237
  124. package/skills/v8-table-event/references/progressive-01-informv8-js-/350/241/250/345/215/225/346/211/223/345/274/200/344/272/213/344/273/266.md +216 -0
  125. package/skills/v8-table-event/references/progressive-02-/345/211/215/347/253/257/344/272/213/344/273/266/345/220/215-v8-eventname-/345/217/257/350/203/275/347/232/204/345/200/274.md +46 -0
  126. package/skills/v8-template-engine/SKILL.md +1 -1
  127. package/skills/v8-utilities/SKILL.md +1 -1
  128. package/skills/v8-workflow/SKILL.md +20 -161
  129. package/skills/v8-workflow/references/progressive-01-/350/212/202/347/202/271/345/274/200/345/247/213-v8-/344/272/213/344/273/266.md +180 -0
  130. package/skills/workspace-conventions/SKILL.md +36 -369
  131. package/skills/workspace-conventions/references/progressive-01-/347/211/210/346/234/254/346/233/264/346/226/260/346/227/245/345/277/227/344/277/235/346/212/244/350/247/204/345/210/231-/345/274/272/345/210/266.md +208 -0
  132. package/skills/workspace-conventions/references/progressive-02-microi-net-api-/346/234/254/345/234/260/345/220/257/345/212/250/347/272/246/345/256/232.md +196 -0
  133. package/skills/workspace-conventions/references/progressive-03-cli-/344/270/216-ide-/346/217/222/344/273/266/351/224/231/347/211/210/345/205/261/345/255/230/347/272/246/345/256/232.md +27 -0
@@ -0,0 +1,218 @@
1
+ # ui-design 详细参考 1
2
+
3
+ > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
+
5
+ <!-- microi-progressive:chunk id=ui-design-007 sha256=b32dac5c75835929c6c55607807cad0cd14a013ddc1a41e307263549f2047867 -->
6
+ ## 颜色体系(CSS Variables — 支持主题切换)
7
+
8
+ 所有颜色必须通过 CSS 变量引用,禁止硬编码色值。变量定义放在全局样式入口(PC 端 `src/styles/mci-design.scss`,移动端 `<style>` 内或独立 CSS 文件)。
9
+
10
+ ### 暗黑主题(可选切换 — `data-theme="dark"`)
11
+
12
+ ```css
13
+ :root[data-theme="dark"] {
14
+ /* 主色 — 科技紫蓝 */
15
+ --mci-color-primary: #722BFF;
16
+ --mci-color-primary-light: #9B5FFF;
17
+ --mci-color-primary-dark: #5A1FCC;
18
+ --mci-color-primary-glow: rgba(114, 43, 255, 0.35);
19
+
20
+ /* 辅助色 */
21
+ --mci-color-accent-red: #FF2E63;
22
+ --mci-color-accent-blue: #29B8FF;
23
+ --mci-color-accent-gold: #FFD100;
24
+ --mci-color-accent-cyan: #00F5D4;
25
+ --mci-color-accent-pink: #FF6EC7;
26
+
27
+ /* 语义色(成功/警告/错误/信息) */
28
+ --mci-color-success: #00F5D4;
29
+ --mci-color-warning: #FFD100;
30
+ --mci-color-danger: #FF2E63;
31
+ --mci-color-info: #29B8FF;
32
+
33
+ /* 背景 */
34
+ --mci-bg-base: #0A0A0F;
35
+ --mci-bg-elevated: #121218;
36
+ --mci-bg-surface: #1A1A24;
37
+ --mci-bg-card: rgba(255, 255, 255, 0.04);
38
+ --mci-bg-card-hover: rgba(255, 255, 255, 0.08);
39
+ --mci-bg-glass: rgba(255, 255, 255, 0.06);
40
+ --mci-bg-glass-border: rgba(255, 255, 255, 0.1);
41
+ --mci-bg-mask: rgba(0, 0, 0, 0.6);
42
+
43
+ /* 文字 */
44
+ --mci-text-primary: #FFFFFF;
45
+ --mci-text-secondary: #A0A0B8;
46
+ --mci-text-tertiary: #6B6B80;
47
+ --mci-text-disabled: #4A4A5A;
48
+ --mci-text-on-primary: #FFFFFF;
49
+
50
+ /* 边框 */
51
+ --mci-border-color: rgba(255, 255, 255, 0.08);
52
+ --mci-border-color-hover: rgba(255, 255, 255, 0.15);
53
+ --mci-border-glow: rgba(114, 43, 255, 0.3);
54
+
55
+ /* 渐变 */
56
+ --mci-gradient-primary: linear-gradient(135deg, #722BFF 0%, #29B8FF 100%);
57
+ --mci-gradient-hot: linear-gradient(135deg, #FF2E63 0%, #FF6EC7 100%);
58
+ --mci-gradient-gold: linear-gradient(135deg, #FFD100 0%, #FF8C00 100%);
59
+ --mci-gradient-cyber: linear-gradient(135deg, #00F5D4 0%, #722BFF 50%, #FF2E63 100%);
60
+ --mci-gradient-bg: radial-gradient(ellipse at 20% 50%, rgba(114, 43, 255, 0.08) 0%, transparent 60%);
61
+ }
62
+ ```
63
+
64
+ ### 亮色主题(默认)
65
+
66
+ ```css
67
+ :root[data-theme="light"], :root {
68
+ --mci-color-primary: #6C2BD9;
69
+ --mci-color-primary-light: #8B5CF6;
70
+ --mci-color-primary-dark: #5521B5;
71
+ --mci-color-primary-glow: rgba(108, 43, 217, 0.15);
72
+
73
+ --mci-color-accent-red: #E8294A;
74
+ --mci-color-accent-blue: #2196F3;
75
+ --mci-color-accent-gold: #F59E0B;
76
+ --mci-color-accent-cyan: #06B6D4;
77
+ --mci-color-accent-pink: #EC4899;
78
+
79
+ --mci-color-success: #06B6D4;
80
+ --mci-color-warning: #F59E0B;
81
+ --mci-color-danger: #E8294A;
82
+ --mci-color-info: #2196F3;
83
+
84
+ --mci-bg-base: #F5F5FA;
85
+ --mci-bg-elevated: #FFFFFF;
86
+ --mci-bg-surface: #F0F0F8;
87
+ --mci-bg-card: rgba(255, 255, 255, 0.9);
88
+ --mci-bg-card-hover: rgba(255, 255, 255, 1);
89
+ --mci-bg-glass: rgba(255, 255, 255, 0.7);
90
+ --mci-bg-glass-border: rgba(0, 0, 0, 0.08);
91
+ --mci-bg-mask: rgba(0, 0, 0, 0.4);
92
+
93
+ --mci-text-primary: #1A1A2E;
94
+ --mci-text-secondary: #64648C;
95
+ --mci-text-tertiary: #9898B0;
96
+ --mci-text-disabled: #C0C0D0;
97
+ --mci-text-on-primary: #FFFFFF;
98
+
99
+ --mci-border-color: rgba(0, 0, 0, 0.06);
100
+ --mci-border-color-hover: rgba(0, 0, 0, 0.12);
101
+ --mci-border-glow: rgba(108, 43, 217, 0.2);
102
+
103
+ --mci-gradient-primary: linear-gradient(135deg, #6C2BD9 0%, #2196F3 100%);
104
+ --mci-gradient-hot: linear-gradient(135deg, #E8294A 0%, #EC4899 100%);
105
+ --mci-gradient-gold: linear-gradient(135deg, #F59E0B 0%, #EA580C 100%);
106
+ --mci-gradient-cyber: linear-gradient(135deg, #06B6D4 0%, #6C2BD9 50%, #E8294A 100%);
107
+ --mci-gradient-bg: radial-gradient(ellipse at 20% 50%, rgba(108, 43, 217, 0.04) 0%, transparent 60%);
108
+ }
109
+ ```
110
+
111
+ ### 颜色使用规则
112
+
113
+ - **主题模型分两层**:`data-theme="light|dark"` 控制明暗底色,`data-mci-palette="black|white|red|orange|yellow|green|cyan|blue|purple"` 控制品牌主色。
114
+ - **所有移动端与 PC 网站项目必须支持主流主色切换**:黑、白、红、橙、黄、绿、青、蓝、紫至少 9 个 palette。后台管理系统可由 Element Plus 主题承载,但也必须映射到 `--mci-*` token。
115
+ - **palette 不得只换按钮底色**:必须同步覆盖 `--mci-color-primary`、`--mci-color-primary-strong`、`--mci-text-on-primary`、`--mci-border-glow`、`--mci-gradient-primary`、`--mci-shadow-button`、`--mci-shadow-button-hover`。
116
+ - **白色/黄色主题必须单独处理文字颜色**:主按钮文字使用 `--mci-text-on-primary`,白色主题用深色字,黄色主题用深棕/深灰字,禁止固定白字。
117
+ - **主色**用于核心交互元素(按钮、链接、选中态)
118
+ - **Accent Red / Danger** 用于危险操作、错误、热门标记
119
+ - **Accent Blue / Info** 用于信息提示、次要按钮
120
+ - **Accent Gold / Warning** 用于重要强调、VIP 标签、价格、警告
121
+ - **Accent Cyan / Success** 用于成功状态、在线标识
122
+ - 默认主题为亮色 + 红色 palette;暗黑主题和主色 palette 都作为用户可选项。
123
+ - 用户主题偏好持久化到 `mci-theme`、`mci-palette`、`mci-shape`,初次访问可跟随系统 `prefers-color-scheme`。
124
+
125
+ ### 主色 Palette 必备定义
126
+
127
+ ```css
128
+ :root[data-mci-palette="black"] { --mci-color-primary:#111827; --mci-text-on-primary:#fff; }
129
+ :root[data-mci-palette="white"] { --mci-color-primary:#F8FAFC; --mci-text-on-primary:#111827; }
130
+ :root[data-mci-palette="red"] { --mci-color-primary:#B51220; --mci-text-on-primary:#fff; }
131
+ :root[data-mci-palette="orange"] { --mci-color-primary:#EA580C; --mci-text-on-primary:#fff; }
132
+ :root[data-mci-palette="yellow"] { --mci-color-primary:#D9A23A; --mci-text-on-primary:#3A2500; }
133
+ :root[data-mci-palette="green"] { --mci-color-primary:#16A34A; --mci-text-on-primary:#fff; }
134
+ :root[data-mci-palette="cyan"] { --mci-color-primary:#0891B2; --mci-text-on-primary:#fff; }
135
+ :root[data-mci-palette="blue"] { --mci-color-primary:#2563EB; --mci-text-on-primary:#fff; }
136
+ :root[data-mci-palette="purple"] { --mci-color-primary:#7C3AED; --mci-text-on-primary:#fff; }
137
+ ```
138
+
139
+ 实际项目优先直接使用 `Microi.UI/src/theme/tokens.css`,不要复制这段最小示例;新增 palette 时必须补充悬浮阴影、边框高光和渐变。
140
+
141
+ ### 移动端可读性底线
142
+
143
+ - 移动端首页、商城、分享海报、资产页必须优先保证阅读清楚。浅色背景上的正文、占位文字、标签、金额、按钮文字不得使用低透明度浅灰或低对比金色。
144
+ - 移动端底部导航、首页快捷入口、个人中心快捷入口的图标对比度与文字同等重要。彩色圆底图标必须显式设定内部图标色,并在每个主题截图确认可见。
145
+ - 关键正文与背景对比度建议不低于 4.5:1;大标题、海报大字、促销卡标题不低于 3:1。金色渐变按钮默认使用深红/深棕文字,不使用白字。
146
+ - 在渐变、图片、红金背景上放文字时,文字必须是实色且有足够字重;不要依赖 `opacity: .6` 这类弱化文字承载业务信息。
147
+ - 完成移动端风格改造后,必须配合 Playwright、浏览器 DevTools、微信开发者工具自动化或项目已有 E2E 工具进行截图和关键文字对比度检查,复核首页第一屏、列表页、登录页、分享海报、空态/未登录态和关键按钮。
148
+ - 用户要求“全自动化测试”“自动化验收”“跑完整测试”等时,如果本次涉及 UI/前端改动,自动化链路必须包含截图验证或视觉断言;只运行构建、lint、静态检查不能宣称已完成全自动化 UI 验收。若当前环境无法启动浏览器/小程序开发者工具,必须明确说明未完成截图验证。
149
+
150
+ ---
151
+
152
+ <!-- /microi-progressive:chunk -->
153
+ <!-- microi-progressive:chunk id=ui-design-008 sha256=80df5bdb440dea278d96692425780d40232b8ab4bbb604ee1b3f9727679ea65a -->
154
+ ## 阴影体系(层次与质感)
155
+
156
+ 阴影是塑造层次感、可点击性和高级质感的关键。采用多层阴影叠加,但不要做脏、糊、重的阴影。
157
+
158
+ ```css
159
+ :root {
160
+ /* 基础层级阴影 */
161
+ --mci-shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.25);
162
+ --mci-shadow-md: 0 4px 16px rgba(0, 0, 0, 0.3),
163
+ 0 0 12px var(--mci-color-primary-glow);
164
+ --mci-shadow-lg: 0 8px 30px rgba(0, 0, 0, 0.35),
165
+ 0 0 20px var(--mci-color-primary-glow);
166
+ --mci-shadow-xl: 0 20px 60px rgba(0, 0, 0, 0.5),
167
+ 0 0 40px var(--mci-color-primary-glow);
168
+
169
+ /* 专用阴影 */
170
+ --mci-shadow-card: 0 4px 20px rgba(0, 0, 0, 0.3),
171
+ 0 0 15px rgba(114, 43, 255, 0.08);
172
+ --mci-shadow-card-hover: 0 8px 30px rgba(0, 0, 0, 0.4),
173
+ 0 0 25px rgba(114, 43, 255, 0.15),
174
+ 0 0 60px rgba(114, 43, 255, 0.05);
175
+ --mci-shadow-button: 0 4px 15px var(--mci-color-primary-glow);
176
+ --mci-shadow-button-hover: 0 8px 25px var(--mci-color-primary-glow);
177
+ --mci-shadow-dialog: 0 25px 80px rgba(0, 0, 0, 0.6),
178
+ 0 0 50px rgba(114, 43, 255, 0.1);
179
+ --mci-shadow-dropdown: 0 10px 40px rgba(0, 0, 0, 0.45),
180
+ 0 0 20px rgba(114, 43, 255, 0.08);
181
+
182
+ /* 强调发光 */
183
+ --mci-glow-primary: 0 0 15px var(--mci-color-primary-glow),
184
+ 0 0 45px rgba(114, 43, 255, 0.1);
185
+ --mci-glow-red: 0 0 15px rgba(255, 46, 99, 0.3),
186
+ 0 0 45px rgba(255, 46, 99, 0.1);
187
+ --mci-glow-cyan: 0 0 15px rgba(0, 245, 212, 0.3),
188
+ 0 0 45px rgba(0, 245, 212, 0.1);
189
+ }
190
+
191
+ /* 移动端阴影减半 — 移动端 GPU 较弱,且小屏幕不需要过强阴影 */
192
+ @media (max-width: 768px) {
193
+ :root {
194
+ --mci-shadow-card: 0 2px 12px rgba(0, 0, 0, 0.3),
195
+ 0 0 8px rgba(114, 43, 255, 0.06);
196
+ --mci-shadow-card-hover: 0 4px 18px rgba(0, 0, 0, 0.4),
197
+ 0 0 12px rgba(114, 43, 255, 0.1);
198
+ --mci-shadow-button: 0 2px 10px var(--mci-color-primary-glow);
199
+ --mci-shadow-dialog: 0 12px 40px rgba(0, 0, 0, 0.6);
200
+ }
201
+ }
202
+ ```
203
+
204
+ ### 阴影使用规则
205
+
206
+ | 场景 | 使用阴影 |
207
+ |------|---------|
208
+ | 卡片默认态 | `--mci-shadow-card` |
209
+ | 卡片悬浮态(PC) | `--mci-shadow-card-hover` |
210
+ | 按钮默认态 | `--mci-shadow-button` |
211
+ | 按钮按下态 | `--mci-shadow-button-hover`(移动端无 hover,只用按下/默认) |
212
+ | 弹窗/抽屉 | `--mci-shadow-dialog` |
213
+ | 下拉菜单 | `--mci-shadow-dropdown` |
214
+ | 强调元素 | `--mci-glow-*` |
215
+
216
+ ---
217
+
218
+ <!-- /microi-progressive:chunk -->
@@ -0,0 +1,155 @@
1
+ # ui-design 详细参考 2
2
+
3
+ > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
+
5
+ <!-- microi-progressive:chunk id=ui-design-009 sha256=3e553809ea501d359553ba0e78a1cf83c9fccc0cdc06a5d562d73af7ebc0c09d -->
6
+ ## 字体
7
+
8
+ ```css
9
+ :root {
10
+ --mci-font-family: 'Inter', -apple-system, 'PingFang SC', 'Microsoft YaHei', system-ui, sans-serif;
11
+ --mci-font-mono: 'JetBrains Mono', 'SF Mono', 'Consolas', monospace;
12
+
13
+ /* 字号 — PC */
14
+ --mci-text-xs: 12px;
15
+ --mci-text-sm: 13px;
16
+ --mci-text-base: 14px;
17
+ --mci-text-lg: 16px;
18
+ --mci-text-xl: 20px;
19
+ --mci-text-2xl: 24px;
20
+ --mci-text-3xl: 32px;
21
+ --mci-text-4xl: 40px;
22
+
23
+ /* 字重 */
24
+ --mci-font-normal: 400;
25
+ --mci-font-medium: 500;
26
+ --mci-font-semibold: 600;
27
+ --mci-font-bold: 700;
28
+ --mci-font-black: 900;
29
+ }
30
+
31
+ /* 移动端字号略大,更适合小屏阅读 */
32
+ @media (max-width: 768px) {
33
+ :root {
34
+ --mci-text-xs: 11px;
35
+ --mci-text-sm: 13px;
36
+ --mci-text-base: 15px;
37
+ --mci-text-lg: 17px;
38
+ --mci-text-xl: 20px;
39
+ --mci-text-2xl: 24px;
40
+ --mci-text-3xl: 28px;
41
+ --mci-text-4xl: 34px;
42
+ }
43
+ }
44
+ ```
45
+
46
+ ### 字体规则
47
+
48
+ - **大标题**:`--mci-text-3xl` + `--mci-font-black`,可配合渐变色文字
49
+ - **小标题**:`--mci-text-xl` + `--mci-font-semibold`
50
+ - **正文**:`--mci-text-base` + `--mci-font-normal`
51
+ - **辅助文字**:`--mci-text-sm` + `--mci-text-secondary`
52
+ - **数据/价格**:`--mci-text-2xl` + `--mci-font-bold` + 渐变色
53
+
54
+ 渐变文字写法:
55
+ ```css
56
+ .mci-text-gradient {
57
+ background: var(--mci-gradient-primary);
58
+ -webkit-background-clip: text;
59
+ -webkit-text-fill-color: transparent;
60
+ background-clip: text;
61
+ }
62
+ ```
63
+
64
+ > ⚠️ **渐变文字低对比陷阱(已反复踩坑)**:`background-clip:text + color/-webkit-text-fill-color:transparent` 在部分 H5 webview / 安卓内核下渲染会失败,导致文字**透明不可见**。
65
+ > 对**关键标题/品牌名/重要文案**优先使用实色高对比文字(如 `color:#8E0613`),或用 `@supports` 做降级:
66
+ > ```scss
67
+ > .mci-text-gradient { color: var(--mci-color-primary); -webkit-text-fill-color: var(--mci-color-primary); }
68
+ > @supports ((-webkit-background-clip:text) or (background-clip:text)) {
69
+ > .mci-text-gradient { background: var(--mci-gradient-primary); -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent; color:transparent; }
70
+ > }
71
+ > ```
72
+
73
+ ---
74
+
75
+ <!-- /microi-progressive:chunk -->
76
+ <!-- microi-progressive:chunk id=ui-design-010 sha256=06dccf8f187ce38d807057735f6b6acbf9a9037f37f64544fb933f16f28e58f0 -->
77
+ ## 间距与触摸目标
78
+
79
+ ### 界面引擎仪表盘密度与对齐
80
+
81
+ - 界面引擎首页和仪表盘默认采用单一外层滚动。单个卡片容器尽量完整展示内容,不设置独立纵向滚动条;固定高度不足时应压缩卡片、工具栏、表格行高与间距,或让容器自然增高。
82
+ - 同一层级的卡片必须统一外边距、内边距、圆角、标题高度和内容起始线;同排卡片应使用相同最小高度,左右边缘及底部视觉对齐。
83
+ - 表格容器以默认 15 条数据、表头、工具栏和分页全部可见为桌面端验收基准;日历与公告同样要完整显示头部操作、主体和底部区域。
84
+ - 页面编辑、快捷操作等悬浮按钮必须脱离文档流,不能通过额外空白行或页面顶部内边距占位;半透明悬浮元素需保证文字对比度和 hover 可识别性。
85
+ - 避免组件底部出现大片无信息空白。优先调整组件内部纵向分布、最小高度和网格密度;不得用内部滚动条或隐藏分页来伪装紧凑。
86
+ - 界面引擎移动端必须按真实视口自动改为单列容器;卡片内高频指标和短快捷入口可以采用两列紧凑网格,不能把桌面 4 列机械改成 4 个超高单列卡片。嵌入式列表的返回栏、全局 FAB、固定操作条必须降级为容器内操作,不能覆盖前后兄弟组件。
87
+ - 容器标题右侧存在“更多/进入/刷新/界面设计”等多个动作时,必须放入同一个 `display:flex; align-items:center` 操作区;窄屏允许整体换行并右对齐,禁止依赖 float 或绝对定位造成文字上下错位、互相遮挡。
88
+
89
+ ```css
90
+ :root {
91
+ --mci-space-1: 4px;
92
+ --mci-space-2: 8px;
93
+ --mci-space-3: 12px;
94
+ --mci-space-4: 16px;
95
+ --mci-space-5: 20px;
96
+ --mci-space-6: 24px;
97
+ --mci-space-8: 32px;
98
+ --mci-space-10: 40px;
99
+ --mci-space-12: 48px;
100
+
101
+ /* 移动端最小触摸目标 — Apple HIG 44pt / Material 48dp */
102
+ --mci-touch-target: 44px;
103
+
104
+ /* 安全区域(移动端刘海/底部 home indicator) */
105
+ --mci-safe-top: env(safe-area-inset-top, 0);
106
+ --mci-safe-bottom: env(safe-area-inset-bottom, 0);
107
+ --mci-safe-left: env(safe-area-inset-left, 0);
108
+ --mci-safe-right: env(safe-area-inset-right, 0);
109
+ }
110
+ ```
111
+
112
+ ### 移动端规则
113
+ - 所有可点击元素(按钮、tab、列表项)**最小尺寸 44×44px**
114
+ - 顶部导航栏、沉浸式 header、返回按钮区域必须包含 `var(--mci-safe-top)`,不能假设状态栏固定 20px 或 44px。
115
+ - 底部 tab bar、底部固定操作栏、悬浮购买按钮必须包含 `var(--mci-safe-bottom)`,不能贴住 iPhone home indicator 或 Android 手势条。
116
+ - 左右全屏容器、横屏弹窗、沉浸式背景必须兼容 `var(--mci-safe-left/right)`,避免刘海横屏遮挡。
117
+ - 列表项之间最小间距 8px,避免误触
118
+
119
+ ---
120
+
121
+ <!-- /microi-progressive:chunk -->
122
+ <!-- microi-progressive:chunk id=ui-design-011 sha256=1d31f1333c8853380d4e624d3798fddecf7bc26c861afc2dce9df82c566ffa25 -->
123
+ ## 骨架屏 Loading 设计规范
124
+
125
+ 所有依赖接口、数据库、远程资源或异步计算的数据区域,首屏加载态必须使用骨架屏(Skeleton Screen),不能只显示 spinner、进度圈、空图标或“数据加载中...”文案。骨架屏属于基础体验规范,适用于 PC、移动端 H5、uni-app、小程序和 WebView。
126
+
127
+ - 骨架屏形态必须接近最终内容版式:列表用行骨架,表格用表头+行骨架,卡片/商品用网格骨架,详情页用大图区+标题/段落骨架,仪表盘用指标卡骨架。
128
+ - 加载期间不能提前显示“暂无数据/暂无明细/空空如也”;空态只能在请求完成且确认无数据后出现。
129
+ - 骨架颜色使用主题变量或中性色阶,不要使用高饱和主色大面积闪烁;亮色主题推荐 `rgba(255,255,255,.72)` 与 `rgba(232,221,205,.9)`,暗色主题推荐低对比深灰阶。
130
+ - 动画只允许使用 `background-position`、`opacity` 或 `transform`,节奏控制在 1.0s 到 1.4s;必须支持 `prefers-reduced-motion` 关闭或弱化动画。
131
+ - 分页加载下一页时,只在列表底部追加紧凑骨架,不覆盖已有内容;切换筛选/分类重载第一页时才显示首屏骨架。
132
+ - 骨架块必须有稳定尺寸、圆角和间距,加载前后不能造成明显布局跳动。
133
+
134
+ 参考样式:
135
+
136
+ ```scss
137
+ .mci-skeleton {
138
+ position: relative;
139
+ overflow: hidden;
140
+ background: linear-gradient(90deg, rgba(255,255,255,.72), rgba(232,221,205,.9), rgba(255,255,255,.72));
141
+ background-size: 240% 100%;
142
+ animation: mciSkeleton 1.15s ease-in-out infinite;
143
+ }
144
+ @keyframes mciSkeleton {
145
+ 0% { background-position: 120% 0; }
146
+ 100% { background-position: -120% 0; }
147
+ }
148
+ @media (prefers-reduced-motion: reduce) {
149
+ .mci-skeleton { animation: none; }
150
+ }
151
+ ```
152
+
153
+ ---
154
+
155
+ <!-- /microi-progressive:chunk -->
@@ -0,0 +1,235 @@
1
+ # ui-design 详细参考 3
2
+
3
+ > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
+
5
+ <!-- microi-progressive:chunk id=ui-design-012 sha256=d59ae14c3991bb27949dcdcc0df3114ecbd1e627d6a69f5f78d1247ea2e02cd6 -->
6
+ ## 动效规范(丰富但不卡)
7
+
8
+ ### 性能铁律
9
+
10
+ 1. **只用 `transform` 和 `opacity` 做动画** — 走 GPU 合成层,不触发重排重绘
11
+ 2. **禁止动画 `width/height/top/left/margin/padding`** — 会触发 Layout,导致卡顿
12
+ 3. **禁止动画 `box-shadow`** — 改用伪元素 `::after` 的 `opacity` 切换预设阴影
13
+ 4. **`will-change` 不要滥用** — 只在动画激活时添加,静态元素禁止使用
14
+ 5. **动画时长控制**:微交互 150-250ms,转场 300-400ms,装饰动效 600ms-2s
15
+ 6. **使用 `prefers-reduced-motion` 媒体查询**提供无动画回退
16
+ 7. **移动端额外限制**:禁用 `backdrop-filter: blur()` 大面积使用(中低端机型严重掉帧),最多用于小型胶囊/标签
17
+ 8. **移动端装饰背景**:优先使用结构化渐变、网格、细线、扫光和内容图片;禁用 Canvas 装饰点、密集散点、离散光球、模糊色块堆叠。
18
+
19
+ ### Timing Functions
20
+
21
+ ```css
22
+ :root {
23
+ --mci-ease-out: cubic-bezier(0.25, 0.46, 0.45, 0.94);
24
+ --mci-ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
25
+ --mci-ease-smooth: cubic-bezier(0.4, 0, 0.2, 1);
26
+ --mci-ease-bounce: cubic-bezier(0.68, -0.55, 0.265, 1.55);
27
+
28
+ --mci-duration-fast: 150ms;
29
+ --mci-duration-base: 250ms;
30
+ --mci-duration-slow: 400ms;
31
+ --mci-duration-decorative: 800ms;
32
+ }
33
+ ```
34
+
35
+ ### 标准动效库
36
+
37
+ #### 1. 卡片悬浮 / 按下(高性能阴影切换)
38
+
39
+ ```scss
40
+ .mci-card {
41
+ position: relative;
42
+ border-radius: var(--mci-radius-xl);
43
+ background: var(--mci-bg-card);
44
+ box-shadow: var(--mci-shadow-card);
45
+ transition: transform var(--mci-duration-base) var(--mci-ease-out);
46
+
47
+ &::after {
48
+ content: '';
49
+ position: absolute;
50
+ inset: 0;
51
+ border-radius: inherit;
52
+ box-shadow: var(--mci-shadow-card-hover);
53
+ opacity: 0;
54
+ transition: opacity var(--mci-duration-base) var(--mci-ease-out);
55
+ pointer-events: none;
56
+ z-index: -1;
57
+ }
58
+
59
+ /* PC: hover */
60
+ @media (hover: hover) {
61
+ &:hover {
62
+ transform: translateY(-4px) scale(1.01);
63
+ &::after { opacity: 1; }
64
+ }
65
+ }
66
+
67
+ /* 移动端:active 按压反馈 */
68
+ &:active {
69
+ transform: scale(0.98);
70
+ transition-duration: var(--mci-duration-fast);
71
+ }
72
+ }
73
+ ```
74
+
75
+ #### 2. 淡入上浮(列表/卡片进入)
76
+
77
+ ```scss
78
+ .mci-fade-up-enter {
79
+ opacity: 0;
80
+ transform: translateY(20px);
81
+ }
82
+ .mci-fade-up-enter-active {
83
+ animation: mciFadeUp var(--mci-duration-slow) var(--mci-ease-out) forwards;
84
+ }
85
+
86
+ @keyframes mciFadeUp {
87
+ to {
88
+ opacity: 1;
89
+ transform: translateY(0);
90
+ }
91
+ }
92
+
93
+ /* 列表交错进入 */
94
+ .mci-stagger-item {
95
+ opacity: 0;
96
+ transform: translateY(16px);
97
+ animation: mciFadeUp var(--mci-duration-slow) var(--mci-ease-out) forwards;
98
+ animation-delay: calc(var(--mci-index, 0) * 60ms);
99
+ }
100
+ ```
101
+
102
+ #### 3. 按钮渐变扫光
103
+
104
+ ```scss
105
+ .mci-btn-glow {
106
+ position: relative;
107
+ overflow: hidden;
108
+ background: var(--mci-gradient-primary);
109
+ border: none;
110
+ border-radius: var(--mci-radius-md);
111
+ color: var(--mci-text-on-primary);
112
+ box-shadow: var(--mci-shadow-button);
113
+ transition: transform var(--mci-duration-fast) var(--mci-ease-out);
114
+
115
+ &::before {
116
+ content: '';
117
+ position: absolute;
118
+ top: 0;
119
+ left: -100%;
120
+ width: 100%;
121
+ height: 100%;
122
+ background: linear-gradient(
123
+ 90deg,
124
+ transparent,
125
+ rgba(255, 255, 255, 0.2),
126
+ transparent
127
+ );
128
+ }
129
+
130
+ @media (hover: hover) {
131
+ &:hover {
132
+ transform: translateY(-2px);
133
+ &::before {
134
+ left: 100%;
135
+ transition: left 0.5s var(--mci-ease-smooth);
136
+ }
137
+ }
138
+ }
139
+
140
+ &:active { transform: scale(0.97); }
141
+ }
142
+ ```
143
+
144
+ #### 4. 焦点边框扫光
145
+
146
+ ```scss
147
+ .mci-focus-border {
148
+ position: relative;
149
+ border: 1px solid var(--mci-border-glow);
150
+ border-radius: var(--mci-radius-lg);
151
+ overflow: hidden;
152
+
153
+ &::before {
154
+ content: '';
155
+ position: absolute;
156
+ inset: 0;
157
+ border-radius: inherit;
158
+ background: linear-gradient(90deg, transparent, rgba(255,255,255,.28), transparent);
159
+ transform: translateX(-110%) skewX(-18deg);
160
+ animation: mciFocusSweep 3.6s ease-in-out infinite;
161
+ pointer-events: none;
162
+ }
163
+ }
164
+
165
+ @keyframes mciFocusSweep {
166
+ 0%, 42% { transform: translateX(-110%) skewX(-18deg); opacity: 0; }
167
+ 58% { opacity: .85; }
168
+ 100% { transform: translateX(120%) skewX(-18deg); opacity: 0; }
169
+ }
170
+ ```
171
+
172
+ #### 5. 玻璃拟态容器(PC 用,移动端慎用)
173
+
174
+ ```scss
175
+ .mci-glass {
176
+ background: var(--mci-bg-glass);
177
+ backdrop-filter: blur(12px) saturate(1.5);
178
+ -webkit-backdrop-filter: blur(12px) saturate(1.5);
179
+ border: 1px solid var(--mci-bg-glass-border);
180
+ border-radius: var(--mci-radius-xl);
181
+ box-shadow: var(--mci-shadow-md);
182
+ }
183
+
184
+ /* 移动端降级:用半透明色块代替模糊 */
185
+ @media (max-width: 768px) {
186
+ .mci-glass {
187
+ background: var(--mci-bg-elevated);
188
+ backdrop-filter: none;
189
+ -webkit-backdrop-filter: none;
190
+ }
191
+ }
192
+ ```
193
+
194
+ #### 6. 无障碍动效回退
195
+
196
+ ```scss
197
+ @media (prefers-reduced-motion: reduce) {
198
+ *, *::before, *::after {
199
+ animation-duration: 0.01ms !important;
200
+ animation-iteration-count: 1 !important;
201
+ transition-duration: 0.01ms !important;
202
+ }
203
+ }
204
+ ```
205
+
206
+ ---
207
+
208
+ <!-- /microi-progressive:chunk -->
209
+ <!-- microi-progressive:chunk id=ui-design-013 sha256=385528713388a28e0182e2df9e2ed828ddb7cccaf7a3a5e78354f46a588f6f1c -->
210
+ ## Vue 3 过渡动画
211
+
212
+ ```scss
213
+ /* 淡入上浮 */
214
+ .mci-up-enter-active { transition: all var(--mci-duration-slow) var(--mci-ease-out); }
215
+ .mci-up-leave-active { transition: all var(--mci-duration-base) var(--mci-ease-smooth); }
216
+ .mci-up-enter-from { opacity: 0; transform: translateY(20px); }
217
+ .mci-up-leave-to { opacity: 0; transform: translateY(-10px); }
218
+
219
+ /* 缩放弹出 */
220
+ .mci-scale-enter-active { transition: all var(--mci-duration-base) var(--mci-ease-spring); }
221
+ .mci-scale-leave-active { transition: all var(--mci-duration-fast) var(--mci-ease-smooth); }
222
+ .mci-scale-enter-from { opacity: 0; transform: scale(0.92); }
223
+ .mci-scale-leave-to { opacity: 0; transform: scale(0.95); }
224
+
225
+ /* 列表交错 */
226
+ .mci-list-move,
227
+ .mci-list-enter-active { transition: all var(--mci-duration-slow) var(--mci-ease-out); }
228
+ .mci-list-leave-active { transition: all var(--mci-duration-base) var(--mci-ease-smooth); position: absolute; }
229
+ .mci-list-enter-from { opacity: 0; transform: translateX(-20px); }
230
+ .mci-list-leave-to { opacity: 0; transform: translateX(20px); }
231
+ ```
232
+
233
+ ---
234
+
235
+ <!-- /microi-progressive:chunk -->