cc-devflow 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (277) hide show
  1. package/.claude/CLAUDE.md +83 -0
  2. package/.claude/agents/architecture-designer.md +443 -0
  3. package/.claude/agents/bug-analyzer.md +382 -0
  4. package/.claude/agents/checklist-agent.md +175 -0
  5. package/.claude/agents/clarify-analyst.md +50 -0
  6. package/.claude/agents/code-reviewer.md +71 -0
  7. package/.claude/agents/codex-analyzer.md +39 -0
  8. package/.claude/agents/compatibility-checker.md +580 -0
  9. package/.claude/agents/consistency-checker.md +532 -0
  10. package/.claude/agents/impact-analyzer.md +441 -0
  11. package/.claude/agents/planner.md +230 -0
  12. package/.claude/agents/prd-writer.md +320 -0
  13. package/.claude/agents/project-guidelines-generator.md +1329 -0
  14. package/.claude/agents/qa-tester.md +313 -0
  15. package/.claude/agents/release-manager.md +295 -0
  16. package/.claude/agents/security-reviewer.md +314 -0
  17. package/.claude/agents/style-guide-generator.md +458 -0
  18. package/.claude/agents/tech-architect.md +516 -0
  19. package/.claude/agents/ui-designer.md +485 -0
  20. package/.claude/commands/code-review-high.md +58 -0
  21. package/.claude/commands/core-architecture.md +429 -0
  22. package/.claude/commands/core-guidelines.md +486 -0
  23. package/.claude/commands/core-roadmap.md +439 -0
  24. package/.claude/commands/core-style.md +293 -0
  25. package/.claude/commands/flow-archive.md +245 -0
  26. package/.claude/commands/flow-checklist.md +260 -0
  27. package/.claude/commands/flow-clarify.md +136 -0
  28. package/.claude/commands/flow-constitution.md +82 -0
  29. package/.claude/commands/flow-dev.md +134 -0
  30. package/.claude/commands/flow-epic.md +150 -0
  31. package/.claude/commands/flow-fix.md +104 -0
  32. package/.claude/commands/flow-ideate.md +214 -0
  33. package/.claude/commands/flow-init.md +313 -0
  34. package/.claude/commands/flow-new.md +394 -0
  35. package/.claude/commands/flow-prd.md +131 -0
  36. package/.claude/commands/flow-qa.md +93 -0
  37. package/.claude/commands/flow-release.md +92 -0
  38. package/.claude/commands/flow-restart.md +98 -0
  39. package/.claude/commands/flow-status.md +64 -0
  40. package/.claude/commands/flow-tech.md +142 -0
  41. package/.claude/commands/flow-ui.md +189 -0
  42. package/.claude/commands/flow-update.md +111 -0
  43. package/.claude/commands/flow-upgrade.md +115 -0
  44. package/.claude/commands/flow-verify.md +96 -0
  45. package/.claude/commands/problem-analyzer.md +60 -0
  46. package/.claude/config/quality-rules.yml +161 -0
  47. package/.claude/docs/SPEC_KIT_CONSTITUTION_ANALYSIS.md +426 -0
  48. package/.claude/docs/design/consistency-conflict-detection-algorithms.md +658 -0
  49. package/.claude/docs/design/intent-driven-input-design.md +380 -0
  50. package/.claude/docs/design/prd-version-management-design.md +437 -0
  51. package/.claude/docs/guides/INIT_TROUBLESHOOTING.md +117 -0
  52. package/.claude/docs/guides/NEW_TROUBLESHOOTING.md +151 -0
  53. package/.claude/docs/guides/ROADMAP_TROUBLESHOOTING.md +188 -0
  54. package/.claude/docs/guides/TASK_COMPLETION_MARKING.md +338 -0
  55. package/.claude/docs/templates/ARCHITECTURE_TEMPLATE.md +633 -0
  56. package/.claude/docs/templates/BACKLOG_TEMPLATE.md +261 -0
  57. package/.claude/docs/templates/CHECKLIST_TEMPLATE.md +52 -0
  58. package/.claude/docs/templates/CLARIFICATION_REPORT_TEMPLATE.md +206 -0
  59. package/.claude/docs/templates/CODE_REVIEW_TEMPLATE.md +71 -0
  60. package/.claude/docs/templates/EPIC_TEMPLATE.md +805 -0
  61. package/.claude/docs/templates/INIT_FLOW_TEMPLATE.md +213 -0
  62. package/.claude/docs/templates/INTENT_CLARIFICATION_TEMPLATE.md +57 -0
  63. package/.claude/docs/templates/NEW_ORCHESTRATION_TEMPLATE.md +148 -0
  64. package/.claude/docs/templates/PRD_TEMPLATE.md +562 -0
  65. package/.claude/docs/templates/RESEARCH_TEMPLATE.md +276 -0
  66. package/.claude/docs/templates/REVIEW-HIGH.md +57 -0
  67. package/.claude/docs/templates/ROADMAP_DIALOGUE_TEMPLATE.md +198 -0
  68. package/.claude/docs/templates/ROADMAP_TEMPLATE.md +310 -0
  69. package/.claude/docs/templates/STYLE_TEMPLATE.md +1266 -0
  70. package/.claude/docs/templates/TASKS_TEMPLATE.md +523 -0
  71. package/.claude/docs/templates/TECH_DESIGN_TEMPLATE.md +1019 -0
  72. package/.claude/docs/templates/UI_PROTOTYPE_TEMPLATE.md +1436 -0
  73. package/.claude/guides/agent-guides/agent-coordination-guide.md +459 -0
  74. package/.claude/guides/project-guidelines-system.md +463 -0
  75. package/.claude/guides/technical-guides/datetime-handling-guide.md +563 -0
  76. package/.claude/guides/technical-guides/git-github-guide.md +642 -0
  77. package/.claude/guides/technical-guides/test-execution-guide.md +618 -0
  78. package/.claude/guides/workflow-guides/bug-fix-orchestrator.md +217 -0
  79. package/.claude/guides/workflow-guides/flow-orchestrator.md +282 -0
  80. package/.claude/hooks/checklist-gate.js +397 -0
  81. package/.claude/hooks/error-handling-reminder.sh +12 -0
  82. package/.claude/hooks/error-handling-reminder.ts +459 -0
  83. package/.claude/hooks/post-tool-use-tracker.sh +280 -0
  84. package/.claude/hooks/pre-tool-use-guardrail.sh +36 -0
  85. package/.claude/hooks/pre-tool-use-guardrail.ts +342 -0
  86. package/.claude/hooks/skill-activation-prompt.sh +36 -0
  87. package/.claude/hooks/skill-activation-prompt.ts +214 -0
  88. package/.claude/hooks/state/skills-used-test-guard.json +3 -0
  89. package/.claude/rules/devflow-conventions.md +305 -0
  90. package/.claude/rules/project-constitution.md +748 -0
  91. package/.claude/schemas/constitution.schema.json +43 -0
  92. package/.claude/scripts/analyze-upgrade-impact.sh +200 -0
  93. package/.claude/scripts/archive-requirement.sh +351 -0
  94. package/.claude/scripts/calculate-checklist-completion.sh +243 -0
  95. package/.claude/scripts/calculate-quarter.sh +206 -0
  96. package/.claude/scripts/check-dependencies.sh +409 -0
  97. package/.claude/scripts/check-prerequisites.sh +232 -0
  98. package/.claude/scripts/check-task-status.sh +264 -0
  99. package/.claude/scripts/checklist-errors.sh +131 -0
  100. package/.claude/scripts/common.sh +570 -0
  101. package/.claude/scripts/consolidate-research.sh +182 -0
  102. package/.claude/scripts/create-requirement.sh +426 -0
  103. package/.claude/scripts/export-contracts.sh +117 -0
  104. package/.claude/scripts/extract-data-model.sh +78 -0
  105. package/.claude/scripts/generate-clarification-questions.sh +377 -0
  106. package/.claude/scripts/generate-clarification-report.sh +463 -0
  107. package/.claude/scripts/generate-quickstart.sh +146 -0
  108. package/.claude/scripts/generate-research-tasks.sh +157 -0
  109. package/.claude/scripts/generate-status-report.sh +523 -0
  110. package/.claude/scripts/generate-tech-analysis.sh +46 -0
  111. package/.claude/scripts/locate-requirement-in-roadmap.sh +233 -0
  112. package/.claude/scripts/manage-constitution.sh +602 -0
  113. package/.claude/scripts/mark-task-complete.sh +198 -0
  114. package/.claude/scripts/populate-research-tasks.sh +259 -0
  115. package/.claude/scripts/recover-workflow.sh +460 -0
  116. package/.claude/scripts/run-clarify-scan.sh +601 -0
  117. package/.claude/scripts/run-high-review.sh +62 -0
  118. package/.claude/scripts/run-problem-analysis.sh +68 -0
  119. package/.claude/scripts/setup-epic.sh +173 -0
  120. package/.claude/scripts/sync-roadmap-progress.sh +300 -0
  121. package/.claude/scripts/sync-task-marks.sh +199 -0
  122. package/.claude/scripts/test-clarify-scan.sh +515 -0
  123. package/.claude/scripts/update-agent-context.sh +806 -0
  124. package/.claude/scripts/validate-constitution.sh +567 -0
  125. package/.claude/scripts/validate-hooks.sh +487 -0
  126. package/.claude/scripts/validate-research.sh +332 -0
  127. package/.claude/scripts/validate-scope-boundary.sh +493 -0
  128. package/.claude/scripts/verify-setup.sh +37 -0
  129. package/.claude/settings.json +76 -0
  130. package/.claude/skills/_reference-implementations/README.md +96 -0
  131. package/.claude/skills/_reference-implementations/backend-express-prisma/SKILL.md +302 -0
  132. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/architecture-overview.md +451 -0
  133. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/async-and-errors.md +307 -0
  134. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/complete-examples.md +638 -0
  135. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/configuration.md +275 -0
  136. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/database-patterns.md +224 -0
  137. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/middleware-guide.md +213 -0
  138. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/routing-and-controllers.md +756 -0
  139. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/sentry-and-monitoring.md +336 -0
  140. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/services-and-repositories.md +789 -0
  141. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/testing-guide.md +235 -0
  142. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/validation-patterns.md +754 -0
  143. package/.claude/skills/_reference-implementations/frontend-react-mui/SKILL.md +399 -0
  144. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/common-patterns.md +331 -0
  145. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/complete-examples.md +872 -0
  146. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/component-patterns.md +502 -0
  147. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/data-fetching.md +767 -0
  148. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/file-organization.md +502 -0
  149. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/loading-and-error-states.md +501 -0
  150. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/performance.md +406 -0
  151. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/routing-guide.md +364 -0
  152. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/styling-guide.md +428 -0
  153. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/typescript-standards.md +418 -0
  154. package/.claude/skills/cc-devflow-orchestrator/SKILL.md +229 -0
  155. package/.claude/skills/constitution-guardian/SKILL.md +306 -0
  156. package/.claude/skills/devflow-constitution-quick-ref/SKILL.md +374 -0
  157. package/.claude/skills/devflow-file-standards/SKILL.md +353 -0
  158. package/.claude/skills/devflow-tdd-enforcer/SKILL.md +192 -0
  159. package/.claude/skills/skill-developer/ADVANCED.md +197 -0
  160. package/.claude/skills/skill-developer/HOOK_MECHANISMS.md +306 -0
  161. package/.claude/skills/skill-developer/PATTERNS_LIBRARY.md +152 -0
  162. package/.claude/skills/skill-developer/SKILL.md +426 -0
  163. package/.claude/skills/skill-developer/SKILL_RULES_REFERENCE.md +315 -0
  164. package/.claude/skills/skill-developer/TRIGGER_TYPES.md +305 -0
  165. package/.claude/skills/skill-developer/TROUBLESHOOTING.md +514 -0
  166. package/.claude/skills/skill-rules.json +213 -0
  167. package/.claude/tests/README.md +300 -0
  168. package/.claude/tests/TODO.md +69 -0
  169. package/.claude/tests/__pycache__/test_analyze_upgrade_impact.cpython-311-pytest-7.2.2.pyc +0 -0
  170. package/.claude/tests/__pycache__/test_consolidate_research.cpython-311-pytest-7.2.2.pyc +0 -0
  171. package/.claude/tests/__pycache__/test_export_contracts.cpython-311-pytest-7.2.2.pyc +0 -0
  172. package/.claude/tests/__pycache__/test_extract_data_model.cpython-311-pytest-7.2.2.pyc +0 -0
  173. package/.claude/tests/__pycache__/test_generate_quickstart.cpython-311-pytest-7.2.2.pyc +0 -0
  174. package/.claude/tests/__pycache__/test_generate_research_tasks.cpython-311-pytest-7.2.2.pyc +0 -0
  175. package/.claude/tests/constitution/run_all_constitution_tests.sh +111 -0
  176. package/.claude/tests/constitution/test_agent_assignment.sh +207 -0
  177. package/.claude/tests/constitution/test_article_coverage.sh +201 -0
  178. package/.claude/tests/constitution/test_template_completeness.sh +150 -0
  179. package/.claude/tests/constitution/test_version_consistency.sh +120 -0
  180. package/.claude/tests/fixtures/spec_delta_full.md +16 -0
  181. package/.claude/tests/fixtures/tasks_progress_sample.md +5 -0
  182. package/.claude/tests/run-all-tests.sh +229 -0
  183. package/.claude/tests/scripts/run.sh +30 -0
  184. package/.claude/tests/scripts/test-framework.sh +128 -0
  185. package/.claude/tests/scripts/test_check_prerequisites.sh +511 -0
  186. package/.claude/tests/scripts/test_check_prerequisites.sh.bak +504 -0
  187. package/.claude/tests/scripts/test_check_prerequisites.sh.bak2 +505 -0
  188. package/.claude/tests/scripts/test_check_prerequisites.sh.bak3 +506 -0
  189. package/.claude/tests/scripts/test_check_prerequisites.sh.bak4 +507 -0
  190. package/.claude/tests/scripts/test_check_prerequisites.sh.bak5 +508 -0
  191. package/.claude/tests/scripts/test_check_task_status.sh +499 -0
  192. package/.claude/tests/scripts/test_common.sh +244 -0
  193. package/.claude/tests/scripts/test_generate_status_report.sh +71 -0
  194. package/.claude/tests/scripts/test_mark_task_complete.sh +441 -0
  195. package/.claude/tests/scripts/test_mark_task_complete.sh.backup +410 -0
  196. package/.claude/tests/scripts/test_recover_workflow.sh +304 -0
  197. package/.claude/tests/scripts/test_setup_epic.sh +437 -0
  198. package/.claude/tests/scripts/test_sync_task_marks.sh +196 -0
  199. package/.claude/tests/scripts/test_validate_constitution.sh +74 -0
  200. package/.claude/tests/scripts/test_validate_research.sh +462 -0
  201. package/.claude/tests/slugify.bats +82 -0
  202. package/.claude/tests/test-framework.sh +732 -0
  203. package/.claude/tests/test_analyze_upgrade_impact.py +34 -0
  204. package/.claude/tests/test_consolidate_research.py +48 -0
  205. package/.claude/tests/test_export_contracts.py +43 -0
  206. package/.claude/tests/test_extract_data_model.py +33 -0
  207. package/.claude/tests/test_generate_quickstart.py +50 -0
  208. package/.claude/tests/test_generate_research_tasks.py +52 -0
  209. package/.claude/tsc-cache/6e64f818-6398-49ca-8623-581a9af85c44/edited-files.log +1 -0
  210. package/.claude/tsc-cache/795ba6e3-b98a-423b-bab2-51aa62812569/affected-repos.txt +1 -0
  211. package/.claude/tsc-cache/795ba6e3-b98a-423b-bab2-51aa62812569/edited-files.log +1 -0
  212. package/.claude/tsc-cache/ae335694-be5a-4ba4-a1a0-b676c09a7906/affected-repos.txt +1 -0
  213. package/.claude/tsc-cache/ae335694-be5a-4ba4-a1a0-b676c09a7906/edited-files.log +1 -0
  214. package/CHANGELOG.md +507 -0
  215. package/LICENSE +21 -0
  216. package/README.md +534 -0
  217. package/README.zh-CN.md +530 -0
  218. package/bin/adapt.js +240 -0
  219. package/bin/cc-devflow-cli.js +185 -0
  220. package/bin/cc-devflow.js +78 -0
  221. package/config/adapters.yml +5 -0
  222. package/config/schema/adapters.schema.json +44 -0
  223. package/docs/CLAUDE.md +26 -0
  224. package/docs/commands/README.md +61 -0
  225. package/docs/commands/README.zh-CN.md +55 -0
  226. package/docs/commands/core-roadmap.md +106 -0
  227. package/docs/commands/core-roadmap.zh-CN.md +102 -0
  228. package/docs/commands/core-style.md +405 -0
  229. package/docs/commands/core-style.zh-CN.md +405 -0
  230. package/docs/commands/flow-init.md +134 -0
  231. package/docs/commands/flow-init.zh-CN.md +163 -0
  232. package/docs/commands/flow-new.md +274 -0
  233. package/docs/commands/flow-new.zh-CN.md +270 -0
  234. package/docs/guides/getting-started.md +204 -0
  235. package/docs/guides/getting-started.zh-CN.md +152 -0
  236. package/lib/adapters/adapter-interface.js +57 -0
  237. package/lib/adapters/claude-adapter.js +74 -0
  238. package/lib/adapters/codex-adapter.js +40 -0
  239. package/lib/adapters/config-validator.js +68 -0
  240. package/lib/adapters/logger.js +42 -0
  241. package/lib/adapters/registry.js +153 -0
  242. package/lib/compiler/CLAUDE.md +92 -0
  243. package/lib/compiler/__tests__/drift.test.js +215 -0
  244. package/lib/compiler/__tests__/errors.test.js +184 -0
  245. package/lib/compiler/__tests__/incremental.test.js +174 -0
  246. package/lib/compiler/__tests__/integration.test.js +174 -0
  247. package/lib/compiler/__tests__/manifest.test.js +233 -0
  248. package/lib/compiler/__tests__/parser.test.js +456 -0
  249. package/lib/compiler/__tests__/schemas.test.js +301 -0
  250. package/lib/compiler/__tests__/skills-registry.test.js +125 -0
  251. package/lib/compiler/__tests__/transformer.test.js +286 -0
  252. package/lib/compiler/emitters/antigravity-emitter.js +171 -0
  253. package/lib/compiler/emitters/base-emitter.js +73 -0
  254. package/lib/compiler/emitters/codex-emitter.js +52 -0
  255. package/lib/compiler/emitters/cursor-emitter.js +31 -0
  256. package/lib/compiler/emitters/index.js +50 -0
  257. package/lib/compiler/emitters/qwen-emitter.js +39 -0
  258. package/lib/compiler/errors.js +119 -0
  259. package/lib/compiler/index.js +256 -0
  260. package/lib/compiler/manifest.js +242 -0
  261. package/lib/compiler/parser.js +258 -0
  262. package/lib/compiler/platforms.js +113 -0
  263. package/lib/compiler/resource-copier.js +320 -0
  264. package/lib/compiler/rules-emitters/__tests__/antigravity-rules-emitter.test.js +191 -0
  265. package/lib/compiler/rules-emitters/__tests__/codex-rules-emitter.test.js +109 -0
  266. package/lib/compiler/rules-emitters/__tests__/cursor-rules-emitter.test.js +123 -0
  267. package/lib/compiler/rules-emitters/__tests__/qwen-rules-emitter.test.js +123 -0
  268. package/lib/compiler/rules-emitters/antigravity-rules-emitter.js +253 -0
  269. package/lib/compiler/rules-emitters/base-rules-emitter.js +83 -0
  270. package/lib/compiler/rules-emitters/codex-rules-emitter.js +116 -0
  271. package/lib/compiler/rules-emitters/cursor-rules-emitter.js +98 -0
  272. package/lib/compiler/rules-emitters/index.js +71 -0
  273. package/lib/compiler/rules-emitters/qwen-rules-emitter.js +70 -0
  274. package/lib/compiler/schemas.js +144 -0
  275. package/lib/compiler/skills-registry.js +225 -0
  276. package/lib/compiler/transformer.js +236 -0
  277. package/package.json +50 -0
@@ -0,0 +1,1266 @@
1
+ ---
2
+ template_name: STYLE_TEMPLATE
3
+ version: 1.0.0
4
+ description: Template for generating project-level design style guide (STYLE.md)
5
+ last_updated: 2025-11-09 北京时间
6
+ ---
7
+
8
+ # Design Style Guide - {Project Name}
9
+
10
+ > 项目设计风格指南 - 视觉一致性的唯一真理源(SSOT)
11
+
12
+ ---
13
+
14
+ ## 📋 Overview
15
+
16
+ ### 设计系统信息
17
+ - **名称**: {Design System Name}
18
+ - **版本**: {Version, e.g., 1.0.0}
19
+ - **创建时间**: {YYYY-MM-DD 北京时间}
20
+ - **最后更新**: {YYYY-MM-DD 北京时间}
21
+
22
+ ### 设计理念
23
+ {简要描述设计系统的核心价值和设计理念,2-3 句话}
24
+
25
+ 例如:
26
+ > 我们的设计系统以"简洁、高效、可访问"为核心,追求极致的用户体验和开发者体验。所有组件遵循一致的视觉语言,确保产品的专业度和易用性。
27
+
28
+ ### 适用范围
29
+ - ✅ 所有 Web 应用界面(Desktop, Tablet, Mobile)
30
+ - ✅ 所有前端组件库
31
+ - ✅ 所有 UI 原型设计
32
+ - ❌ 营销材料(使用独立的品牌指南)
33
+
34
+ ### 更新历史
35
+ - **v1.0.0** (YYYY-MM-DD): 初始版本,建立核心设计系统
36
+ - **v1.1.0** (YYYY-MM-DD): 新增暗色模式支持
37
+ - (记录每次更新的版本号、日期、变更内容)
38
+
39
+ ---
40
+
41
+ ## 🎨 Color Palette
42
+
43
+ ### 主色(Primary)
44
+ 主色用于主要操作、品牌强调、关键 CTA 等。
45
+
46
+ | 等级 | Hex | RGB | HSL | 使用场景 |
47
+ |------|-----|-----|-----|----------|
48
+ | Primary 50 | {#XXXXXX} | rgb({R}, {G}, {B}) | hsl({H}, {S}%, {L}%) | 主色浅背景 |
49
+ | Primary 100 | {#XXXXXX} | rgb({R}, {G}, {B}) | hsl({H}, {S}%, {L}%) | Hover 状态 |
50
+ | Primary 500 | {#XXXXXX} | rgb({R}, {G}, {B}) | hsl({H}, {S}%, {L}%) | 主色(默认) |
51
+ | Primary 600 | {#XXXXXX} | rgb({R}, {G}, {B}) | hsl({H}, {S}%, {L}%) | Active 状态 |
52
+ | Primary 900 | {#XXXXXX} | rgb({R}, {G}, {B}) | hsl({H}, {S}%, {L}%) | 主色深背景 |
53
+
54
+ **CSS Variables**:
55
+ ```css
56
+ :root {
57
+ --color-primary-50: {#XXXXXX};
58
+ --color-primary-100: {#XXXXXX};
59
+ --color-primary-500: {#XXXXXX};
60
+ --color-primary-600: {#XXXXXX};
61
+ --color-primary-900: {#XXXXXX};
62
+
63
+ /* 语义化别名 */
64
+ --color-primary: var(--color-primary-500);
65
+ --color-primary-hover: var(--color-primary-600);
66
+ --color-primary-active: var(--color-primary-700);
67
+ }
68
+ ```
69
+
70
+ **Tailwind Config** (如适用):
71
+ ```js
72
+ module.exports = {
73
+ theme: {
74
+ extend: {
75
+ colors: {
76
+ primary: {
77
+ 50: '{#XXXXXX}',
78
+ 100: '{#XXXXXX}',
79
+ 500: '{#XXXXXX}',
80
+ 600: '{#XXXXXX}',
81
+ 900: '{#XXXXXX}',
82
+ DEFAULT: '{#XXXXXX}', // primary-500
83
+ },
84
+ },
85
+ },
86
+ },
87
+ }
88
+ ```
89
+
90
+ ### 辅色(Secondary)
91
+ 辅色用于次要操作、辅助信息、背景变化等。
92
+
93
+ | 等级 | Hex | RGB | HSL | 使用场景 |
94
+ |------|-----|-----|-----|----------|
95
+ | Secondary 50 | {#XXXXXX} | rgb({R}, {G}, {B}) | hsl({H}, {S}%, {L}%) | 辅色浅背景 |
96
+ | Secondary 500 | {#XXXXXX} | rgb({R}, {G}, {B}) | hsl({H}, {S}%, {L}%) | 辅色(默认) |
97
+ | Secondary 900 | {#XXXXXX} | rgb({R}, {G}, {B}) | hsl({H}, {S}%, {L}%) | 辅色深背景 |
98
+
99
+ (CSS Variables 和 Tailwind Config 同上)
100
+
101
+ ### 语义色(Semantic Colors)
102
+
103
+ #### 成功色(Success)
104
+ | Hex | RGB | HSL | 使用场景 |
105
+ |-----|-----|-----|----------|
106
+ | {#XXXXXX} | rgb({R}, {G}, {B}) | hsl({H}, {S}%, {L}%) | 成功提示、完成状态、正向反馈 |
107
+
108
+ #### 警告色(Warning)
109
+ | Hex | RGB | HSL | 使用场景 |
110
+ |-----|-----|-----|----------|
111
+ | {#XXXXXX} | rgb({R}, {G}, {B}) | hsl({H}, {S}%, {L}%) | 警告提示、需要注意的信息 |
112
+
113
+ #### 错误色(Error)
114
+ | Hex | RGB | HSL | 使用场景 |
115
+ |-----|-----|-----|----------|
116
+ | {#XXXXXX} | rgb({R}, {G}, {B}) | hsl({H}, {S}%, {L}%) | 错误提示、失败状态、危险操作 |
117
+
118
+ #### 信息色(Info)
119
+ | Hex | RGB | HSL | 使用场景 |
120
+ |-----|-----|-----|----------|
121
+ | {#XXXXXX} | rgb({R}, {G}, {B}) | hsl({H}, {S}%, {L}%) | 信息提示、帮助文本 |
122
+
123
+ ### 中性色(Neutrals / Grayscale)
124
+ 中性色用于文本、边框、背景、禁用状态等。
125
+
126
+ | 等级 | Hex | RGB | HSL | 使用场景 |
127
+ |------|-----|-----|-----|----------|
128
+ | Gray 50 | {#XXXXXX} | rgb({R}, {G}, {B}) | hsl({H}, {S}%, {L}%) | 浅背景 |
129
+ | Gray 100 | {#XXXXXX} | rgb({R}, {G}, {B}) | hsl({H}, {S}%, {L}%) | Hover 背景 |
130
+ | Gray 200 | {#XXXXXX} | rgb({R}, {G}, {B}) | hsl({H}, {S}%, {L}%) | 边框、分隔线 |
131
+ | Gray 300 | {#XXXXXX} | rgb({R}, {G}, {B}) | hsl({H}, {S}%, {L}%) | 禁用状态边框 |
132
+ | Gray 400 | {#XXXXXX} | rgb({R}, {G}, {B}) | hsl({H}, {S}%, {L}%) | 占位符文本 |
133
+ | Gray 500 | {#XXXXXX} | rgb({R}, {G}, {B}) | hsl({H}, {S}%, {L}%) | 次要文本 |
134
+ | Gray 600 | {#XXXXXX} | rgb({R}, {G}, {B}) | hsl({H}, {S}%, {L}%) | 正文文本 |
135
+ | Gray 700 | {#XXXXXX} | rgb({R}, {G}, {B}) | hsl({H}, {S}%, {L}%) | 标题文本 |
136
+ | Gray 800 | {#XXXXXX} | rgb({R}, {G}, {B}) | hsl({H}, {S}%, {L}%) | 深色文本 |
137
+ | Gray 900 | {#XXXXXX} | rgb({R}, {G}, {B}) | hsl({H}, {S}%, {L}%) | 最深文本 |
138
+
139
+ ### 色彩对比度(Accessibility)
140
+ 所有颜色组合必须通过 **WCAG AA** 对比度测试:
141
+ - **正文文本(16px+)**: 对比度 ≥ 4.5:1
142
+ - **大文本(18px+ 或 14px+ bold)**: 对比度 ≥ 3:1
143
+ - **UI 组件**: 对比度 ≥ 3:1
144
+
145
+ **已验证的颜色组合**:
146
+ - ✅ Primary 500 on White: 对比度 {X.XX:1} (WCAG AA ✓)
147
+ - ✅ Gray 700 on White: 对比度 {X.XX:1} (WCAG AA ✓)
148
+ - (列出所有常用组合)
149
+
150
+ ---
151
+
152
+ ## ✍️ Typography
153
+
154
+ ### 字体族(Font Families)
155
+
156
+ #### 标题字体(Headings)
157
+ ```css
158
+ --font-heading: "{Font Name}", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
159
+ ```
160
+ - **用途**: H1-H6, 页面标题, Section 标题
161
+ - **特点**: {简要描述字体特点,如:现代、易读、几何感}
162
+
163
+ #### 正文字体(Body)
164
+ ```css
165
+ --font-body: "{Font Name}", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
166
+ ```
167
+ - **用途**: 正文、段落、列表、标签
168
+ - **特点**: {简要描述字体特点,如:清晰、易读、舒适}
169
+
170
+ #### 代码字体(Monospace)
171
+ ```css
172
+ --font-mono: "Fira Code", "Monaco", "Consolas", monospace;
173
+ ```
174
+ - **用途**: 代码块、内联代码、技术信息
175
+ - **特点**: 等宽、支持连字(ligatures)
176
+
177
+ ### 字阶系统(Type Scale)
178
+
179
+ | 类型 | Font Size | Line Height | Font Weight | Letter Spacing | 用途 |
180
+ |------|-----------|-------------|-------------|----------------|------|
181
+ | **H1** | {XXpx / X.XXrem} | {X.XX} | {XXX / bold} | {X.XXem} | 页面主标题 |
182
+ | **H2** | {XXpx / X.XXrem} | {X.XX} | {XXX / semibold} | {X.XXem} | Section 标题 |
183
+ | **H3** | {XXpx / X.XXrem} | {X.XX} | {XXX / semibold} | {X.XXem} | 子标题 |
184
+ | **H4** | {XXpx / X.XXrem} | {X.XX} | {XXX / medium} | {X.XXem} | 组件标题 |
185
+ | **H5** | {XXpx / X.XXrem} | {X.XX} | {XXX / medium} | {X.XXem} | 小标题 |
186
+ | **H6** | {XXpx / X.XXrem} | {X.XX} | {XXX / medium} | {X.XXem} | 最小标题 |
187
+ | **Body Large** | {XXpx / X.XXrem} | {X.XX} | {XXX / normal} | {X.XXem} | 重要正文 |
188
+ | **Body** | {XXpx / X.XXrem} | {X.XX} | {XXX / normal} | {X.XXem} | 默认正文 |
189
+ | **Body Small** | {XXpx / X.XXrem} | {X.XX} | {XXX / normal} | {X.XXem} | 次要正文 |
190
+ | **Caption** | {XXpx / X.XXrem} | {X.XX} | {XXX / normal} | {X.XXem} | 说明文字 |
191
+ | **Label** | {XXpx / X.XXrem} | {X.XX} | {XXX / medium} | {X.XXem} | 标签、按钮文本 |
192
+
193
+ **CSS Variables**:
194
+ ```css
195
+ :root {
196
+ /* Font Families */
197
+ --font-heading: "{Font Name}", sans-serif;
198
+ --font-body: "{Font Name}", sans-serif;
199
+ --font-mono: "Fira Code", monospace;
200
+
201
+ /* Font Sizes */
202
+ --text-h1: {XXpx};
203
+ --text-h2: {XXpx};
204
+ --text-h3: {XXpx};
205
+ --text-h4: {XXpx};
206
+ --text-h5: {XXpx};
207
+ --text-h6: {XXpx};
208
+ --text-body-lg: {XXpx};
209
+ --text-body: {XXpx};
210
+ --text-body-sm: {XXpx};
211
+ --text-caption: {XXpx};
212
+ --text-label: {XXpx};
213
+
214
+ /* Line Heights */
215
+ --leading-tight: {X.XX};
216
+ --leading-normal: {X.XX};
217
+ --leading-relaxed: {X.XX};
218
+
219
+ /* Font Weights */
220
+ --font-normal: 400;
221
+ --font-medium: 500;
222
+ --font-semibold: 600;
223
+ --font-bold: 700;
224
+ }
225
+ ```
226
+
227
+ ### 响应式字体(Responsive Typography)
228
+
229
+ | 类型 | Desktop (≥1024px) | Tablet (768-1023px) | Mobile (<768px) |
230
+ |------|-------------------|---------------------|-----------------|
231
+ | H1 | {XXpx} | {XXpx} | {XXpx} |
232
+ | H2 | {XXpx} | {XXpx} | {XXpx} |
233
+ | Body | {XXpx} | {XXpx} | {XXpx} |
234
+
235
+ **响应式实现**:
236
+ ```css
237
+ /* Mobile First */
238
+ h1 {
239
+ font-size: {XXpx}; /* Mobile */
240
+ line-height: {X.XX};
241
+ }
242
+
243
+ @media (min-width: 768px) {
244
+ h1 {
245
+ font-size: {XXpx}; /* Tablet */
246
+ }
247
+ }
248
+
249
+ @media (min-width: 1024px) {
250
+ h1 {
251
+ font-size: {XXpx}; /* Desktop */
252
+ }
253
+ }
254
+ ```
255
+
256
+ ### 字体组合规律
257
+ 1. **标题 + 正文**: {Heading Font} + {Body Font}
258
+ 2. **强调**: 使用 font-weight(不是颜色)来强调层级
259
+ 3. **避免**: 同一视图中超过 3 种字体大小
260
+ 4. **行高**: 标题使用紧凑行高(1.2-1.4),正文使用舒适行高(1.5-1.8)
261
+
262
+ ---
263
+
264
+ ## 📐 Spacing System
265
+
266
+ ### 基础单位(Base Unit)
267
+ ```css
268
+ --spacing-base: {4px / 8px / 16px};
269
+ ```
270
+
271
+ ### 间距等级(Spacing Scale)
272
+
273
+ | 等级 | 值 | rem | 使用场景 |
274
+ |------|-----|-----|----------|
275
+ | 0 | 0px | 0rem | 无间距 |
276
+ | 1 | {XXpx} | {X.XXrem} | 极小间距(图标与文本) |
277
+ | 2 | {XXpx} | {X.XXrem} | 小间距(按钮内部 padding) |
278
+ | 3 | {XXpx} | {X.XXrem} | 默认间距(输入框 padding) |
279
+ | 4 | {XXpx} | {X.XXrem} | 中等间距(卡片 padding) |
280
+ | 5 | {XXpx} | {X.XXrem} | 大间距(组件之间) |
281
+ | 6 | {XXpx} | {X.XXrem} | 更大间距(Section 之间) |
282
+ | 8 | {XXpx} | {X.XXrem} | 布局间距 |
283
+ | 10 | {XXpx} | {X.XXrem} | 页面级间距 |
284
+ | 12 | {XXpx} | {X.XXrem} | 超大间距 |
285
+
286
+ **CSS Variables**:
287
+ ```css
288
+ :root {
289
+ --spacing-0: 0;
290
+ --spacing-1: {XXpx};
291
+ --spacing-2: {XXpx};
292
+ --spacing-3: {XXpx};
293
+ --spacing-4: {XXpx};
294
+ --spacing-5: {XXpx};
295
+ --spacing-6: {XXpx};
296
+ --spacing-8: {XXpx};
297
+ --spacing-10: {XXpx};
298
+ --spacing-12: {XXpx};
299
+
300
+ /* 语义化别名 */
301
+ --spacing-xs: var(--spacing-1);
302
+ --spacing-sm: var(--spacing-2);
303
+ --spacing-md: var(--spacing-3);
304
+ --spacing-lg: var(--spacing-4);
305
+ --spacing-xl: var(--spacing-6);
306
+ --spacing-2xl: var(--spacing-8);
307
+ }
308
+ ```
309
+
310
+ ### 使用场景
311
+
312
+ #### 组件内部间距(Padding)
313
+ - **按钮**: padding: var(--spacing-2) var(--spacing-4);
314
+ - **输入框**: padding: var(--spacing-3) var(--spacing-4);
315
+ - **卡片**: padding: var(--spacing-4) var(--spacing-5);
316
+
317
+ #### 组件之间间距(Margin / Gap)
318
+ - **垂直间距**: margin-bottom: var(--spacing-4);
319
+ - **Grid gap**: gap: var(--spacing-4);
320
+ - **Flex gap**: gap: var(--spacing-3);
321
+
322
+ #### 布局间距(Layout)
323
+ - **Section 间距**: margin-bottom: var(--spacing-8);
324
+ - **页面 padding**: padding: var(--spacing-6) var(--spacing-4);
325
+
326
+ ---
327
+
328
+ ## 🧩 Component Styles
329
+
330
+ 以下为核心组件的详细样式定义。每个组件包含:基础样式、变体、尺寸、状态。
331
+
332
+ ### Button
333
+
334
+ #### 基础样式
335
+ ```html
336
+ <button class="btn">Button</button>
337
+ ```
338
+
339
+ ```css
340
+ .btn {
341
+ /* 字体 */
342
+ font-family: var(--font-body);
343
+ font-size: var(--text-label);
344
+ font-weight: var(--font-medium);
345
+ line-height: 1;
346
+
347
+ /* 间距 */
348
+ padding: var(--spacing-2) var(--spacing-4);
349
+
350
+ /* 圆角 */
351
+ border-radius: var(--radius-md);
352
+
353
+ /* 边框 */
354
+ border: 1px solid transparent;
355
+
356
+ /* 过渡 */
357
+ transition: all var(--duration-fast) var(--easing-ease-in-out);
358
+
359
+ /* 其他 */
360
+ cursor: pointer;
361
+ display: inline-flex;
362
+ align-items: center;
363
+ justify-content: center;
364
+ gap: var(--spacing-2);
365
+ }
366
+ ```
367
+
368
+ #### 变体(Variants)
369
+
370
+ **Primary**:
371
+ ```css
372
+ .btn-primary {
373
+ background-color: var(--color-primary);
374
+ color: white;
375
+ }
376
+
377
+ .btn-primary:hover {
378
+ background-color: var(--color-primary-hover);
379
+ }
380
+
381
+ .btn-primary:active {
382
+ background-color: var(--color-primary-active);
383
+ }
384
+
385
+ .btn-primary:disabled {
386
+ background-color: var(--color-gray-300);
387
+ cursor: not-allowed;
388
+ }
389
+ ```
390
+
391
+ **Secondary**:
392
+ ```css
393
+ .btn-secondary {
394
+ background-color: var(--color-secondary);
395
+ color: white;
396
+ }
397
+ /* Hover, Active, Disabled 同上 */
398
+ ```
399
+
400
+ **Outline**:
401
+ ```css
402
+ .btn-outline {
403
+ background-color: transparent;
404
+ color: var(--color-primary);
405
+ border-color: var(--color-primary);
406
+ }
407
+
408
+ .btn-outline:hover {
409
+ background-color: var(--color-primary-50);
410
+ }
411
+ ```
412
+
413
+ **Ghost**:
414
+ ```css
415
+ .btn-ghost {
416
+ background-color: transparent;
417
+ color: var(--color-gray-700);
418
+ }
419
+
420
+ .btn-ghost:hover {
421
+ background-color: var(--color-gray-100);
422
+ }
423
+ ```
424
+
425
+ #### 尺寸(Sizes)
426
+
427
+ | 尺寸 | Padding | Font Size | Height |
428
+ |------|---------|-----------|--------|
429
+ | **sm** | var(--spacing-1) var(--spacing-3) | {XXpx} | {XXpx} |
430
+ | **md** | var(--spacing-2) var(--spacing-4) | {XXpx} | {XXpx} |
431
+ | **lg** | var(--spacing-3) var(--spacing-6) | {XXpx} | {XXpx} |
432
+
433
+ ```css
434
+ .btn-sm { padding: var(--spacing-1) var(--spacing-3); font-size: {XXpx}; }
435
+ .btn-md { padding: var(--spacing-2) var(--spacing-4); font-size: {XXpx}; }
436
+ .btn-lg { padding: var(--spacing-3) var(--spacing-6); font-size: {XXpx}; }
437
+ ```
438
+
439
+ #### 完整示例
440
+ ```html
441
+ <!-- Primary Button (Medium) -->
442
+ <button class="btn btn-primary btn-md">
443
+ Primary Button
444
+ </button>
445
+
446
+ <!-- Outline Button (Large) -->
447
+ <button class="btn btn-outline btn-lg">
448
+ Outline Button
449
+ </button>
450
+
451
+ <!-- Disabled Button -->
452
+ <button class="btn btn-primary btn-md" disabled>
453
+ Disabled
454
+ </button>
455
+ ```
456
+
457
+ ---
458
+
459
+ ### Input / Textarea
460
+
461
+ #### 基础样式
462
+ ```html
463
+ <input type="text" class="input" placeholder="Enter text..." />
464
+ ```
465
+
466
+ ```css
467
+ .input {
468
+ /* 字体 */
469
+ font-family: var(--font-body);
470
+ font-size: var(--text-body);
471
+ line-height: 1.5;
472
+
473
+ /* 间距 */
474
+ padding: var(--spacing-3) var(--spacing-4);
475
+
476
+ /* 圆角 */
477
+ border-radius: var(--radius-md);
478
+
479
+ /* 边框 */
480
+ border: 1px solid var(--color-gray-300);
481
+
482
+ /* 背景 */
483
+ background-color: white;
484
+
485
+ /* 过渡 */
486
+ transition: all var(--duration-fast) var(--easing-ease-in-out);
487
+
488
+ /* 其他 */
489
+ width: 100%;
490
+ outline: none;
491
+ }
492
+
493
+ .input:hover {
494
+ border-color: var(--color-gray-400);
495
+ }
496
+
497
+ .input:focus {
498
+ border-color: var(--color-primary);
499
+ box-shadow: 0 0 0 3px var(--color-primary-50);
500
+ }
501
+
502
+ .input:disabled {
503
+ background-color: var(--color-gray-100);
504
+ cursor: not-allowed;
505
+ }
506
+
507
+ .input::placeholder {
508
+ color: var(--color-gray-400);
509
+ }
510
+ ```
511
+
512
+ #### 状态(States)
513
+
514
+ **Error**:
515
+ ```css
516
+ .input-error {
517
+ border-color: var(--color-error);
518
+ }
519
+
520
+ .input-error:focus {
521
+ border-color: var(--color-error);
522
+ box-shadow: 0 0 0 3px rgba(var(--color-error-rgb), 0.1);
523
+ }
524
+ ```
525
+
526
+ **Success**:
527
+ ```css
528
+ .input-success {
529
+ border-color: var(--color-success);
530
+ }
531
+ ```
532
+
533
+ ---
534
+
535
+ ### Card
536
+
537
+ #### 基础样式
538
+ ```html
539
+ <div class="card">
540
+ <h3>Card Title</h3>
541
+ <p>Card content goes here...</p>
542
+ </div>
543
+ ```
544
+
545
+ ```css
546
+ .card {
547
+ /* 背景 */
548
+ background-color: white;
549
+
550
+ /* 间距 */
551
+ padding: var(--spacing-4) var(--spacing-5);
552
+
553
+ /* 圆角 */
554
+ border-radius: var(--radius-lg);
555
+
556
+ /* 阴影 */
557
+ box-shadow: var(--shadow-md);
558
+
559
+ /* 边框(可选) */
560
+ border: 1px solid var(--color-gray-200);
561
+
562
+ /* 过渡 */
563
+ transition: all var(--duration-base) var(--easing-ease-in-out);
564
+ }
565
+
566
+ .card:hover {
567
+ box-shadow: var(--shadow-lg);
568
+ transform: translateY(-2px);
569
+ }
570
+ ```
571
+
572
+ ---
573
+
574
+ ### Modal / Dialog
575
+
576
+ (类似上述格式,包含基础样式、变体、状态、完整示例代码)
577
+
578
+ ---
579
+
580
+ ### Alert / Toast
581
+
582
+ (类似上述格式,包含基础样式、变体、状态、完整示例代码)
583
+
584
+ ---
585
+
586
+ (继续其他核心组件:Badge, Avatar, Table, Navigation, Pagination, Tabs, Tooltip 等)
587
+
588
+ ---
589
+
590
+ ## 🌫️ Shadows & Elevation
591
+
592
+ ### 阴影系统(Shadow Scale)
593
+
594
+ | 等级 | box-shadow 值 | 使用场景 |
595
+ |------|----------------|----------|
596
+ | **None** | none | 平面元素(按钮、输入框默认状态) |
597
+ | **XS** | 0 1px 2px 0 rgba(0, 0, 0, 0.05) | 轻微层级(边框替代) |
598
+ | **SM** | 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06) | 小卡片、下拉菜单 |
599
+ | **MD** | 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06) | 卡片默认状态 |
600
+ | **LG** | 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05) | 卡片 Hover 状态 |
601
+ | **XL** | 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04) | Modal、Popup |
602
+ | **2XL** | 0 25px 50px -12px rgba(0, 0, 0, 0.25) | 最高层级(全屏 Modal) |
603
+
604
+ **CSS Variables**:
605
+ ```css
606
+ :root {
607
+ --shadow-none: none;
608
+ --shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
609
+ --shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);
610
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
611
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
612
+ --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
613
+ --shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
614
+ }
615
+ ```
616
+
617
+ ### 层级指南(Elevation Guide)
618
+ 1. **Level 0**: 页面背景、平面元素
619
+ 2. **Level 1**: 卡片、按钮
620
+ 3. **Level 2**: Hover 状态
621
+ 4. **Level 3**: Dropdown、Tooltip
622
+ 5. **Level 4**: Modal、Drawer
623
+ 6. **Level 5**: 全屏 Overlay
624
+
625
+ ---
626
+
627
+ ## 🎬 Animations & Transitions
628
+
629
+ ### 过渡时长(Duration)
630
+
631
+ | 名称 | 值 | 使用场景 |
632
+ |------|-----|----------|
633
+ | **Fast** | {XXXms} | Hover 效果、按钮点击 |
634
+ | **Base** | {XXXms} | 默认过渡、卡片展开 |
635
+ | **Slow** | {XXXms} | Modal 打开、页面切换 |
636
+
637
+ ```css
638
+ :root {
639
+ --duration-fast: {XXXms};
640
+ --duration-base: {XXXms};
641
+ --duration-slow: {XXXms};
642
+ }
643
+ ```
644
+
645
+ ### 缓动函数(Easing)
646
+
647
+ | 名称 | cubic-bezier 值 | 使用场景 |
648
+ |------|----------------|----------|
649
+ | **Ease-in** | cubic-bezier(0.4, 0, 1, 1) | 元素退出 |
650
+ | **Ease-out** | cubic-bezier(0, 0, 0.2, 1) | 元素进入 |
651
+ | **Ease-in-out** | cubic-bezier(0.4, 0, 0.2, 1) | 通用过渡 |
652
+
653
+ ```css
654
+ :root {
655
+ --easing-ease-in: cubic-bezier(0.4, 0, 1, 1);
656
+ --easing-ease-out: cubic-bezier(0, 0, 0.2, 1);
657
+ --easing-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
658
+ }
659
+ ```
660
+
661
+ ### 常用动画(Keyframes)
662
+
663
+ #### Fade In
664
+ ```css
665
+ @keyframes fadeIn {
666
+ from { opacity: 0; }
667
+ to { opacity: 1; }
668
+ }
669
+
670
+ .fade-in {
671
+ animation: fadeIn var(--duration-base) var(--easing-ease-out);
672
+ }
673
+ ```
674
+
675
+ #### Slide Up
676
+ ```css
677
+ @keyframes slideUp {
678
+ from {
679
+ opacity: 0;
680
+ transform: translateY(10px);
681
+ }
682
+ to {
683
+ opacity: 1;
684
+ transform: translateY(0);
685
+ }
686
+ }
687
+
688
+ .slide-up {
689
+ animation: slideUp var(--duration-base) var(--easing-ease-out);
690
+ }
691
+ ```
692
+
693
+ #### Scale
694
+ ```css
695
+ @keyframes scale {
696
+ from { transform: scale(0.95); }
697
+ to { transform: scale(1); }
698
+ }
699
+
700
+ .scale-in {
701
+ animation: scale var(--duration-fast) var(--easing-ease-out);
702
+ }
703
+ ```
704
+
705
+ ---
706
+
707
+ ## 🔲 Border Radius
708
+
709
+ ### 圆角系统(Radius Scale)
710
+
711
+ | 等级 | 值 | 使用场景 |
712
+ |------|-----|----------|
713
+ | **None** | 0px | 方形元素(Table, 严肃场景) |
714
+ | **SM** | {XXpx} | 按钮、输入框 |
715
+ | **Base** | {XXpx} | 默认圆角 |
716
+ | **MD** | {XXpx} | 卡片 |
717
+ | **LG** | {XXpx} | Modal |
718
+ | **XL** | {XXpx} | 特殊卡片 |
719
+ | **Full** | 9999px | 圆形(Avatar, Badge) |
720
+
721
+ ```css
722
+ :root {
723
+ --radius-none: 0;
724
+ --radius-sm: {XXpx};
725
+ --radius-base: {XXpx};
726
+ --radius-md: {XXpx};
727
+ --radius-lg: {XXpx};
728
+ --radius-xl: {XXpx};
729
+ --radius-full: 9999px;
730
+ }
731
+ ```
732
+
733
+ ---
734
+
735
+ ## 🌟 Opacity & Transparency
736
+
737
+ ### 透明度等级
738
+
739
+ | 等级 | 值 | 使用场景 |
740
+ |------|-----|----------|
741
+ | **0** | 0 | 完全透明(隐藏元素) |
742
+ | **10** | 0.1 | 极浅遮罩 |
743
+ | **25** | 0.25 | 浅遮罩 |
744
+ | **50** | 0.5 | 半透明(Overlay) |
745
+ | **75** | 0.75 | 轻微透明 |
746
+ | **90** | 0.9 | 几乎不透明 |
747
+ | **100** | 1 | 完全不透明 |
748
+
749
+ ```css
750
+ :root {
751
+ --opacity-0: 0;
752
+ --opacity-10: 0.1;
753
+ --opacity-25: 0.25;
754
+ --opacity-50: 0.5;
755
+ --opacity-75: 0.75;
756
+ --opacity-90: 0.9;
757
+ --opacity-100: 1;
758
+ }
759
+ ```
760
+
761
+ ### 使用场景
762
+ - **Disabled 状态**: opacity: var(--opacity-50);
763
+ - **Overlay**: background-color: rgba(0, 0, 0, var(--opacity-50));
764
+ - **Hover 效果**: opacity: var(--opacity-90);
765
+
766
+ ---
767
+
768
+ ## 🎨 Common Tailwind CSS Usage
769
+
770
+ (仅当项目使用 Tailwind CSS 时包含此部分)
771
+
772
+ ### 常用 Utility Classes 组合
773
+
774
+ #### Button
775
+ ```html
776
+ <button class="px-4 py-2 bg-primary text-white rounded-md hover:bg-primary-600 transition-colors duration-200">
777
+ Primary Button
778
+ </button>
779
+ ```
780
+
781
+ #### Card
782
+ ```html
783
+ <div class="p-6 bg-white rounded-lg shadow-md hover:shadow-lg transition-shadow duration-300">
784
+ Card content
785
+ </div>
786
+ ```
787
+
788
+ #### Input
789
+ ```html
790
+ <input
791
+ type="text"
792
+ class="px-4 py-3 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent"
793
+ placeholder="Enter text..."
794
+ />
795
+ ```
796
+
797
+ ### 自定义 Tailwind 配置
798
+ ```js
799
+ // tailwind.config.js
800
+ module.exports = {
801
+ theme: {
802
+ extend: {
803
+ colors: {
804
+ primary: {
805
+ 50: '{#XXXXXX}',
806
+ 500: '{#XXXXXX}',
807
+ 600: '{#XXXXXX}',
808
+ // ...
809
+ },
810
+ },
811
+ spacing: {
812
+ // Custom spacing values
813
+ },
814
+ borderRadius: {
815
+ // Custom border radius values
816
+ },
817
+ boxShadow: {
818
+ // Custom shadows
819
+ },
820
+ },
821
+ },
822
+ plugins: [
823
+ require('@tailwindcss/typography'),
824
+ require('@tailwindcss/forms'),
825
+ ],
826
+ }
827
+ ```
828
+
829
+ ---
830
+
831
+ ## 📦 Example Component Reference Design Code
832
+
833
+ 以下是 3 个完整的组件实现示例,可直接复用。
834
+
835
+ ### Example 1: Primary Button with Icon
836
+
837
+ ```html
838
+ <button class="btn btn-primary btn-md">
839
+ <svg class="icon" width="16" height="16" fill="currentColor">
840
+ <path d="M12 5l-8 8M4 5l8 8" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
841
+ </svg>
842
+ Button with Icon
843
+ </button>
844
+ ```
845
+
846
+ ```css
847
+ .btn {
848
+ /* 字体 */
849
+ font-family: var(--font-body);
850
+ font-size: var(--text-label);
851
+ font-weight: var(--font-medium);
852
+ line-height: 1;
853
+
854
+ /* 间距 */
855
+ padding: var(--spacing-2) var(--spacing-4);
856
+
857
+ /* 圆角 */
858
+ border-radius: var(--radius-md);
859
+
860
+ /* 边框 */
861
+ border: 1px solid transparent;
862
+
863
+ /* 过渡 */
864
+ transition: all var(--duration-fast) var(--easing-ease-in-out);
865
+
866
+ /* 布局 */
867
+ display: inline-flex;
868
+ align-items: center;
869
+ justify-content: center;
870
+ gap: var(--spacing-2);
871
+ cursor: pointer;
872
+ }
873
+
874
+ .btn-primary {
875
+ background-color: var(--color-primary);
876
+ color: white;
877
+ }
878
+
879
+ .btn-primary:hover {
880
+ background-color: var(--color-primary-hover);
881
+ }
882
+
883
+ .btn-primary:active {
884
+ transform: scale(0.98);
885
+ }
886
+
887
+ .btn .icon {
888
+ width: 16px;
889
+ height: 16px;
890
+ }
891
+ ```
892
+
893
+ **设计决策**:
894
+ - 使用 `inline-flex` 和 `gap` 确保图标与文本间距一致
895
+ - Hover 使用颜色变化,Active 使用微妙的 scale 效果
896
+ - 图标尺寸固定为 16px,确保视觉平衡
897
+
898
+ ---
899
+
900
+ ### Example 2: Card with Hover Effect
901
+
902
+ ```html
903
+ <div class="card">
904
+ <div class="card-header">
905
+ <h3 class="card-title">Card Title</h3>
906
+ <span class="badge">New</span>
907
+ </div>
908
+ <div class="card-body">
909
+ <p class="card-description">
910
+ This is a card component with hover effect. Hover to see the shadow and transform animation.
911
+ </p>
912
+ </div>
913
+ <div class="card-footer">
914
+ <button class="btn btn-outline btn-sm">Learn More</button>
915
+ </div>
916
+ </div>
917
+ ```
918
+
919
+ ```css
920
+ .card {
921
+ /* 背景 */
922
+ background-color: white;
923
+
924
+ /* 间距 */
925
+ padding: 0;
926
+
927
+ /* 圆角 */
928
+ border-radius: var(--radius-lg);
929
+
930
+ /* 阴影 */
931
+ box-shadow: var(--shadow-md);
932
+
933
+ /* 边框 */
934
+ border: 1px solid var(--color-gray-200);
935
+
936
+ /* 过渡 */
937
+ transition: all var(--duration-base) var(--easing-ease-in-out);
938
+
939
+ /* 其他 */
940
+ overflow: hidden;
941
+ }
942
+
943
+ .card:hover {
944
+ box-shadow: var(--shadow-lg);
945
+ transform: translateY(-4px);
946
+ }
947
+
948
+ .card-header {
949
+ display: flex;
950
+ align-items: center;
951
+ justify-content: space-between;
952
+ padding: var(--spacing-4) var(--spacing-5);
953
+ border-bottom: 1px solid var(--color-gray-200);
954
+ }
955
+
956
+ .card-title {
957
+ font-size: var(--text-h4);
958
+ font-weight: var(--font-semibold);
959
+ margin: 0;
960
+ }
961
+
962
+ .badge {
963
+ padding: var(--spacing-1) var(--spacing-2);
964
+ background-color: var(--color-primary-50);
965
+ color: var(--color-primary);
966
+ font-size: var(--text-caption);
967
+ font-weight: var(--font-medium);
968
+ border-radius: var(--radius-full);
969
+ }
970
+
971
+ .card-body {
972
+ padding: var(--spacing-4) var(--spacing-5);
973
+ }
974
+
975
+ .card-description {
976
+ color: var(--color-gray-600);
977
+ line-height: 1.6;
978
+ margin: 0;
979
+ }
980
+
981
+ .card-footer {
982
+ padding: var(--spacing-4) var(--spacing-5);
983
+ border-top: 1px solid var(--color-gray-200);
984
+ }
985
+ ```
986
+
987
+ **设计决策**:
988
+ - Card 分为 Header, Body, Footer 三个区域,使用 border 分隔
989
+ - Hover 效果结合阴影和位移,营造层级感
990
+ - Badge 使用主色的浅色背景,确保视觉一致性
991
+
992
+ ---
993
+
994
+ ### Example 3: Form Input with Error State
995
+
996
+ ```html
997
+ <div class="form-group">
998
+ <label for="email" class="form-label">Email Address</label>
999
+ <input
1000
+ type="email"
1001
+ id="email"
1002
+ class="input input-error"
1003
+ placeholder="you@example.com"
1004
+ aria-invalid="true"
1005
+ aria-describedby="email-error"
1006
+ />
1007
+ <p id="email-error" class="form-error">Please enter a valid email address.</p>
1008
+ </div>
1009
+ ```
1010
+
1011
+ ```css
1012
+ .form-group {
1013
+ display: flex;
1014
+ flex-direction: column;
1015
+ gap: var(--spacing-2);
1016
+ }
1017
+
1018
+ .form-label {
1019
+ font-size: var(--text-label);
1020
+ font-weight: var(--font-medium);
1021
+ color: var(--color-gray-700);
1022
+ }
1023
+
1024
+ .input {
1025
+ /* 字体 */
1026
+ font-family: var(--font-body);
1027
+ font-size: var(--text-body);
1028
+ line-height: 1.5;
1029
+
1030
+ /* 间距 */
1031
+ padding: var(--spacing-3) var(--spacing-4);
1032
+
1033
+ /* 圆角 */
1034
+ border-radius: var(--radius-md);
1035
+
1036
+ /* 边框 */
1037
+ border: 1px solid var(--color-gray-300);
1038
+
1039
+ /* 背景 */
1040
+ background-color: white;
1041
+
1042
+ /* 过渡 */
1043
+ transition: all var(--duration-fast) var(--easing-ease-in-out);
1044
+
1045
+ /* 其他 */
1046
+ width: 100%;
1047
+ outline: none;
1048
+ }
1049
+
1050
+ .input:hover {
1051
+ border-color: var(--color-gray-400);
1052
+ }
1053
+
1054
+ .input:focus {
1055
+ border-color: var(--color-primary);
1056
+ box-shadow: 0 0 0 3px var(--color-primary-50);
1057
+ }
1058
+
1059
+ .input-error {
1060
+ border-color: var(--color-error);
1061
+ }
1062
+
1063
+ .input-error:focus {
1064
+ border-color: var(--color-error);
1065
+ box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.1); /* Error color with opacity */
1066
+ }
1067
+
1068
+ .form-error {
1069
+ font-size: var(--text-caption);
1070
+ color: var(--color-error);
1071
+ margin: 0;
1072
+ }
1073
+ ```
1074
+
1075
+ **设计决策**:
1076
+ - 使用 `flex-direction: column` 和 `gap` 确保标签、输入框、错误信息的间距一致
1077
+ - Error 状态使用红色边框和 box-shadow,视觉明确
1078
+ - 使用 ARIA 属性确保可访问性(`aria-invalid`, `aria-describedby`)
1079
+
1080
+ ---
1081
+
1082
+ ## 📱 Responsive Design
1083
+
1084
+ ### 断点定义(Breakpoints)
1085
+
1086
+ | 名称 | 最小宽度 | 目标设备 |
1087
+ |------|----------|----------|
1088
+ | **Mobile** | 0px | 手机(<768px) |
1089
+ | **Tablet** | 768px | 平板(768-1023px) |
1090
+ | **Desktop** | 1024px | 桌面(1024-1439px) |
1091
+ | **Wide** | 1440px | 宽屏(≥1440px) |
1092
+
1093
+ ```css
1094
+ :root {
1095
+ --breakpoint-mobile: 0px;
1096
+ --breakpoint-tablet: 768px;
1097
+ --breakpoint-desktop: 1024px;
1098
+ --breakpoint-wide: 1440px;
1099
+ }
1100
+ ```
1101
+
1102
+ ### 响应式策略
1103
+ - **Mobile-First**: 默认样式为移动端,使用 `@media (min-width: ...)` 添加更大屏幕样式
1104
+ - **核心原则**: 确保所有功能在移动端可用,桌面端提供增强体验
1105
+
1106
+ ### 响应式组件示例
1107
+
1108
+ #### Grid Layout
1109
+ ```css
1110
+ .grid {
1111
+ display: grid;
1112
+ gap: var(--spacing-4);
1113
+ grid-template-columns: 1fr; /* Mobile: 1 column */
1114
+ }
1115
+
1116
+ @media (min-width: 768px) {
1117
+ .grid {
1118
+ grid-template-columns: repeat(2, 1fr); /* Tablet: 2 columns */
1119
+ }
1120
+ }
1121
+
1122
+ @media (min-width: 1024px) {
1123
+ .grid {
1124
+ grid-template-columns: repeat(3, 1fr); /* Desktop: 3 columns */
1125
+ }
1126
+ }
1127
+ ```
1128
+
1129
+ ---
1130
+
1131
+ ## ♿ Accessibility
1132
+
1133
+ ### 色彩对比度(Color Contrast)
1134
+ - ✅ 所有文本与背景的对比度 ≥ 4.5:1(WCAG AA)
1135
+ - ✅ 大文本(18px+ 或 14px+ bold)对比度 ≥ 3:1
1136
+ - ✅ UI 组件(按钮、输入框)对比度 ≥ 3:1
1137
+
1138
+ ### 键盘导航(Keyboard Navigation)
1139
+ - ✅ 所有交互元素可通过 Tab 键访问
1140
+ - ✅ Focus 状态清晰可见(使用 box-shadow 或 outline)
1141
+ - ✅ 支持 Enter/Space 触发按钮和链接
1142
+
1143
+ ### ARIA 属性(ARIA Attributes)
1144
+ - ✅ 使用 `aria-label` 为无文本的图标按钮添加说明
1145
+ - ✅ 使用 `aria-invalid` 和 `aria-describedby` 标记表单错误
1146
+ - ✅ 使用 `aria-expanded` 标记可展开/折叠的组件
1147
+
1148
+ ### Focus 状态设计
1149
+ ```css
1150
+ *:focus-visible {
1151
+ outline: 2px solid var(--color-primary);
1152
+ outline-offset: 2px;
1153
+ }
1154
+
1155
+ /* 或使用 box-shadow */
1156
+ .btn:focus-visible {
1157
+ box-shadow: 0 0 0 3px var(--color-primary-50);
1158
+ }
1159
+ ```
1160
+
1161
+ ---
1162
+
1163
+ ## 🖼️ Assets
1164
+
1165
+ (如适用)
1166
+
1167
+ ### Icon 系统
1168
+ - **Icon Library**: {Heroicons / Feather / Lucide / Material Icons}
1169
+ - **尺寸**: 16px (sm), 20px (md), 24px (lg)
1170
+ - **颜色**: 使用 `currentColor` 继承文本颜色
1171
+
1172
+ ### Image 规范
1173
+ - **格式**: WebP(现代浏览器), PNG/JPG(Fallback)
1174
+ - **压缩**: TinyPNG, ImageOptim
1175
+ - **尺寸**: 根据显示尺寸提供 1x, 2x, 3x 版本
1176
+
1177
+ ### Logo 使用规范
1178
+ - **主 Logo**: 用于导航栏、页脚
1179
+ - **简化 Logo**: 用于 Favicon, Mobile App Icon
1180
+ - **最小尺寸**: 不小于 24px(确保可识别)
1181
+
1182
+ ---
1183
+
1184
+ ## 🎯 Design Principles
1185
+
1186
+ ### 1. 简洁性(Simplicity)
1187
+ - 避免不必要的装饰和复杂性
1188
+ - 每个组件专注于单一功能
1189
+ - 使用留白营造呼吸感
1190
+
1191
+ ### 2. 一致性(Consistency)
1192
+ - 所有组件遵循统一的视觉语言
1193
+ - 颜色、字体、间距、圆角使用一致的系统
1194
+ - 交互行为保持一致(如 Hover, Focus 效果)
1195
+
1196
+ ### 3. 可访问性(Accessibility)
1197
+ - 色彩对比度符合 WCAG AA 标准
1198
+ - 支持键盘导航
1199
+ - 使用语义化 HTML 和 ARIA 属性
1200
+
1201
+ ### 4. 响应式(Responsive)
1202
+ - Mobile-First 设计
1203
+ - 所有组件在所有设备上可用
1204
+ - 根据屏幕尺寸优化布局和字体
1205
+
1206
+ ### 5. 性能优先(Performance)
1207
+ - 优化资源加载(图片压缩、字体子集化)
1208
+ - 避免过度使用动画和阴影
1209
+ - 使用 CSS Variables 减少重复代码
1210
+
1211
+ ---
1212
+
1213
+ ## 📝 Usage Guidelines
1214
+
1215
+ ### 如何使用本指南
1216
+
1217
+ 1. **开发新组件时**:
1218
+ - 查阅对应组件的样式定义
1219
+ - 复制示例代码并根据需求调整
1220
+ - 确保遵循颜色、字体、间距系统
1221
+
1222
+ 2. **修改现有组件时**:
1223
+ - 检查是否符合本指南的定义
1224
+ - 如有偏差,优先修正为符合指南的样式
1225
+ - 如需新增变体,确保与现有变体一致
1226
+
1227
+ 3. **生成 UI 原型时**:
1228
+ - `/flow-ui` 命令会自动引用本指南
1229
+ - 确保原型中的所有样式符合本指南
1230
+
1231
+ 4. **前端开发时**:
1232
+ - `/flow-dev` 命令会自动引用本指南
1233
+ - 所有组件实现必须遵循本指南的样式定义
1234
+
1235
+ ### 更新本指南
1236
+
1237
+ - **何时更新**: 新增组件、调整设计系统、发现不一致
1238
+ - **如何更新**: 使用 `/flow-style --update` 命令
1239
+ - **版本控制**: 每次更新增加版本号,记录变更内容
1240
+
1241
+ ---
1242
+
1243
+ ## 🔗 Related Resources
1244
+
1245
+ - **项目 Roadmap**: `devflow/ROADMAP.md`
1246
+ - **UI 原型**: `devflow/requirements/{REQ_ID}/UI_PROTOTYPE.html`
1247
+ - **组件实现**: `src/components/`
1248
+ - **Tailwind Config**: `tailwind.config.js`
1249
+
1250
+ ---
1251
+
1252
+ ## 📄 License & Credits
1253
+
1254
+ (如适用)
1255
+
1256
+ - **设计系统**: {Project Name} Design System
1257
+ - **设计师**: {Designer Name}
1258
+ - **开发者**: {Developer Name}
1259
+ - **灵感来源**: {Design References, e.g., Tailwind UI, Material Design}
1260
+
1261
+ ---
1262
+
1263
+ **最后更新**: {YYYY-MM-DD 北京时间}
1264
+ **版本**: {Version}
1265
+
1266
+ ---