@mison/ag-kit-cn 2.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 (237) hide show
  1. package/.agent/.shared/ui-ux-pro-max/data/charts.csv +26 -0
  2. package/.agent/.shared/ui-ux-pro-max/data/colors.csv +97 -0
  3. package/.agent/.shared/ui-ux-pro-max/data/icons.csv +101 -0
  4. package/.agent/.shared/ui-ux-pro-max/data/landing.csv +31 -0
  5. package/.agent/.shared/ui-ux-pro-max/data/products.csv +97 -0
  6. package/.agent/.shared/ui-ux-pro-max/data/prompts.csv +24 -0
  7. package/.agent/.shared/ui-ux-pro-max/data/react-performance.csv +45 -0
  8. package/.agent/.shared/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  9. package/.agent/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  10. package/.agent/.shared/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  11. package/.agent/.shared/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  12. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  13. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  14. package/.agent/.shared/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  15. package/.agent/.shared/ui-ux-pro-max/data/stacks/react.csv +54 -0
  16. package/.agent/.shared/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  17. package/.agent/.shared/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  18. package/.agent/.shared/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  19. package/.agent/.shared/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  20. package/.agent/.shared/ui-ux-pro-max/data/styles.csv +59 -0
  21. package/.agent/.shared/ui-ux-pro-max/data/typography.csv +58 -0
  22. package/.agent/.shared/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  23. package/.agent/.shared/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  24. package/.agent/.shared/ui-ux-pro-max/data/web-interface.csv +31 -0
  25. package/.agent/.shared/ui-ux-pro-max/scripts/core.py +258 -0
  26. package/.agent/.shared/ui-ux-pro-max/scripts/design_system.py +1067 -0
  27. package/.agent/.shared/ui-ux-pro-max/scripts/search.py +106 -0
  28. package/.agent/ARCHITECTURE.md +285 -0
  29. package/.agent/agents/backend-specialist.md +268 -0
  30. package/.agent/agents/code-archaeologist.md +106 -0
  31. package/.agent/agents/database-architect.md +225 -0
  32. package/.agent/agents/debugger.md +225 -0
  33. package/.agent/agents/devops-engineer.md +242 -0
  34. package/.agent/agents/documentation-writer.md +104 -0
  35. package/.agent/agents/explorer-agent.md +73 -0
  36. package/.agent/agents/frontend-specialist.md +618 -0
  37. package/.agent/agents/game-developer.md +162 -0
  38. package/.agent/agents/mobile-developer.md +382 -0
  39. package/.agent/agents/orchestrator.md +438 -0
  40. package/.agent/agents/penetration-tester.md +188 -0
  41. package/.agent/agents/performance-optimizer.md +187 -0
  42. package/.agent/agents/product-manager.md +112 -0
  43. package/.agent/agents/product-owner.md +95 -0
  44. package/.agent/agents/project-planner.md +405 -0
  45. package/.agent/agents/qa-automation-engineer.md +103 -0
  46. package/.agent/agents/security-auditor.md +170 -0
  47. package/.agent/agents/seo-specialist.md +111 -0
  48. package/.agent/agents/test-engineer.md +158 -0
  49. package/.agent/mcp_config.json +12 -0
  50. package/.agent/rules/GEMINI.md +273 -0
  51. package/.agent/scripts/auto_preview.py +148 -0
  52. package/.agent/scripts/checklist.py +217 -0
  53. package/.agent/scripts/session_manager.py +120 -0
  54. package/.agent/scripts/verify_all.py +327 -0
  55. package/.agent/skills/api-patterns/SKILL.md +84 -0
  56. package/.agent/skills/api-patterns/api-style.md +42 -0
  57. package/.agent/skills/api-patterns/auth.md +24 -0
  58. package/.agent/skills/api-patterns/documentation.md +26 -0
  59. package/.agent/skills/api-patterns/graphql.md +41 -0
  60. package/.agent/skills/api-patterns/rate-limiting.md +31 -0
  61. package/.agent/skills/api-patterns/response.md +37 -0
  62. package/.agent/skills/api-patterns/rest.md +40 -0
  63. package/.agent/skills/api-patterns/scripts/api_validator.py +211 -0
  64. package/.agent/skills/api-patterns/security-testing.md +122 -0
  65. package/.agent/skills/api-patterns/trpc.md +41 -0
  66. package/.agent/skills/api-patterns/versioning.md +22 -0
  67. package/.agent/skills/app-builder/SKILL.md +75 -0
  68. package/.agent/skills/app-builder/agent-coordination.md +74 -0
  69. package/.agent/skills/app-builder/feature-building.md +53 -0
  70. package/.agent/skills/app-builder/project-detection.md +34 -0
  71. package/.agent/skills/app-builder/scaffolding.md +118 -0
  72. package/.agent/skills/app-builder/tech-stack.md +40 -0
  73. package/.agent/skills/app-builder/templates/SKILL.md +39 -0
  74. package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
  75. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
  76. package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
  77. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
  78. package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
  79. package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
  80. package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
  81. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +122 -0
  82. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +122 -0
  83. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +169 -0
  84. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +134 -0
  85. package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
  86. package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +119 -0
  87. package/.agent/skills/architecture/SKILL.md +57 -0
  88. package/.agent/skills/architecture/context-discovery.md +43 -0
  89. package/.agent/skills/architecture/examples.md +94 -0
  90. package/.agent/skills/architecture/pattern-selection.md +68 -0
  91. package/.agent/skills/architecture/patterns-reference.md +50 -0
  92. package/.agent/skills/architecture/trade-off-analysis.md +77 -0
  93. package/.agent/skills/bash-linux/SKILL.md +201 -0
  94. package/.agent/skills/behavioral-modes/SKILL.md +264 -0
  95. package/.agent/skills/brainstorming/SKILL.md +164 -0
  96. package/.agent/skills/brainstorming/dynamic-questioning.md +359 -0
  97. package/.agent/skills/clean-code/SKILL.md +200 -0
  98. package/.agent/skills/code-review-checklist/SKILL.md +125 -0
  99. package/.agent/skills/database-design/SKILL.md +54 -0
  100. package/.agent/skills/database-design/database-selection.md +43 -0
  101. package/.agent/skills/database-design/indexing.md +39 -0
  102. package/.agent/skills/database-design/migrations.md +50 -0
  103. package/.agent/skills/database-design/optimization.md +36 -0
  104. package/.agent/skills/database-design/orm-selection.md +30 -0
  105. package/.agent/skills/database-design/schema-design.md +56 -0
  106. package/.agent/skills/database-design/scripts/schema_validator.py +172 -0
  107. package/.agent/skills/deployment-procedures/SKILL.md +241 -0
  108. package/.agent/skills/doc.md +177 -0
  109. package/.agent/skills/documentation-templates/SKILL.md +194 -0
  110. package/.agent/skills/frontend-design/SKILL.md +418 -0
  111. package/.agent/skills/frontend-design/animation-guide.md +331 -0
  112. package/.agent/skills/frontend-design/color-system.md +307 -0
  113. package/.agent/skills/frontend-design/decision-trees.md +418 -0
  114. package/.agent/skills/frontend-design/motion-graphics.md +306 -0
  115. package/.agent/skills/frontend-design/scripts/accessibility_checker.py +183 -0
  116. package/.agent/skills/frontend-design/scripts/ux_audit.py +727 -0
  117. package/.agent/skills/frontend-design/typography-system.md +345 -0
  118. package/.agent/skills/frontend-design/ux-psychology.md +1118 -0
  119. package/.agent/skills/frontend-design/visual-effects.md +383 -0
  120. package/.agent/skills/game-development/2d-games/SKILL.md +119 -0
  121. package/.agent/skills/game-development/3d-games/SKILL.md +135 -0
  122. package/.agent/skills/game-development/SKILL.md +167 -0
  123. package/.agent/skills/game-development/game-art/SKILL.md +185 -0
  124. package/.agent/skills/game-development/game-audio/SKILL.md +190 -0
  125. package/.agent/skills/game-development/game-design/SKILL.md +129 -0
  126. package/.agent/skills/game-development/mobile-games/SKILL.md +108 -0
  127. package/.agent/skills/game-development/multiplayer/SKILL.md +132 -0
  128. package/.agent/skills/game-development/pc-games/SKILL.md +144 -0
  129. package/.agent/skills/game-development/vr-ar/SKILL.md +123 -0
  130. package/.agent/skills/game-development/web-games/SKILL.md +150 -0
  131. package/.agent/skills/geo-fundamentals/SKILL.md +155 -0
  132. package/.agent/skills/geo-fundamentals/scripts/geo_checker.py +289 -0
  133. package/.agent/skills/i18n-localization/SKILL.md +154 -0
  134. package/.agent/skills/i18n-localization/scripts/i18n_checker.py +241 -0
  135. package/.agent/skills/intelligent-routing/SKILL.md +335 -0
  136. package/.agent/skills/lint-and-validate/SKILL.md +44 -0
  137. package/.agent/skills/lint-and-validate/scripts/lint_runner.py +184 -0
  138. package/.agent/skills/lint-and-validate/scripts/type_coverage.py +173 -0
  139. package/.agent/skills/mcp-builder/SKILL.md +176 -0
  140. package/.agent/skills/mobile-design/SKILL.md +394 -0
  141. package/.agent/skills/mobile-design/decision-trees.md +516 -0
  142. package/.agent/skills/mobile-design/mobile-backend.md +491 -0
  143. package/.agent/skills/mobile-design/mobile-color-system.md +420 -0
  144. package/.agent/skills/mobile-design/mobile-debugging.md +122 -0
  145. package/.agent/skills/mobile-design/mobile-design-thinking.md +355 -0
  146. package/.agent/skills/mobile-design/mobile-navigation.md +458 -0
  147. package/.agent/skills/mobile-design/mobile-performance.md +767 -0
  148. package/.agent/skills/mobile-design/mobile-testing.md +356 -0
  149. package/.agent/skills/mobile-design/mobile-typography.md +432 -0
  150. package/.agent/skills/mobile-design/platform-android.md +666 -0
  151. package/.agent/skills/mobile-design/platform-ios.md +561 -0
  152. package/.agent/skills/mobile-design/scripts/mobile_audit.py +670 -0
  153. package/.agent/skills/mobile-design/touch-psychology.md +537 -0
  154. package/.agent/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +311 -0
  155. package/.agent/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +241 -0
  156. package/.agent/skills/nextjs-react-expert/3-server-server-side-performance.md +489 -0
  157. package/.agent/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +263 -0
  158. package/.agent/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +581 -0
  159. package/.agent/skills/nextjs-react-expert/6-rendering-rendering-performance.md +431 -0
  160. package/.agent/skills/nextjs-react-expert/7-js-javascript-performance.md +683 -0
  161. package/.agent/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +149 -0
  162. package/.agent/skills/nextjs-react-expert/SKILL.md +286 -0
  163. package/.agent/skills/nextjs-react-expert/scripts/convert_rules.py +222 -0
  164. package/.agent/skills/nextjs-react-expert/scripts/react_performance_checker.py +252 -0
  165. package/.agent/skills/nodejs-best-practices/SKILL.md +333 -0
  166. package/.agent/skills/parallel-agents/SKILL.md +194 -0
  167. package/.agent/skills/performance-profiling/SKILL.md +149 -0
  168. package/.agent/skills/performance-profiling/scripts/lighthouse_audit.py +76 -0
  169. package/.agent/skills/plan-writing/SKILL.md +152 -0
  170. package/.agent/skills/powershell-windows/SKILL.md +166 -0
  171. package/.agent/skills/python-patterns/SKILL.md +441 -0
  172. package/.agent/skills/red-team-tactics/SKILL.md +203 -0
  173. package/.agent/skills/rust-pro/SKILL.md +190 -0
  174. package/.agent/skills/seo-fundamentals/SKILL.md +135 -0
  175. package/.agent/skills/seo-fundamentals/scripts/seo_checker.py +215 -0
  176. package/.agent/skills/server-management/SKILL.md +161 -0
  177. package/.agent/skills/systematic-debugging/SKILL.md +114 -0
  178. package/.agent/skills/tailwind-patterns/SKILL.md +269 -0
  179. package/.agent/skills/tdd-workflow/SKILL.md +149 -0
  180. package/.agent/skills/testing-patterns/SKILL.md +178 -0
  181. package/.agent/skills/testing-patterns/scripts/test_runner.py +219 -0
  182. package/.agent/skills/vulnerability-scanner/SKILL.md +276 -0
  183. package/.agent/skills/vulnerability-scanner/checklists.md +131 -0
  184. package/.agent/skills/vulnerability-scanner/scripts/security_scan.py +459 -0
  185. package/.agent/skills/web-design-guidelines/SKILL.md +57 -0
  186. package/.agent/skills/webapp-testing/SKILL.md +187 -0
  187. package/.agent/skills/webapp-testing/scripts/playwright_runner.py +173 -0
  188. package/.agent/workflows/brainstorm.md +113 -0
  189. package/.agent/workflows/create.md +59 -0
  190. package/.agent/workflows/debug.md +103 -0
  191. package/.agent/workflows/deploy.md +176 -0
  192. package/.agent/workflows/enhance.md +63 -0
  193. package/.agent/workflows/orchestrate.md +242 -0
  194. package/.agent/workflows/plan.md +89 -0
  195. package/.agent/workflows/preview.md +80 -0
  196. package/.agent/workflows/restore-localize-compat.md +525 -0
  197. package/.agent/workflows/status.md +86 -0
  198. package/.agent/workflows/test.md +144 -0
  199. package/.agent/workflows/ui-ux-pro-max.md +295 -0
  200. package/AGENT_FLOW.md +609 -0
  201. package/CHANGELOG.md +68 -0
  202. package/LICENSE +21 -0
  203. package/README.md +260 -0
  204. package/bin/adapters/base.js +63 -0
  205. package/bin/adapters/codex.js +391 -0
  206. package/bin/adapters/gemini.js +137 -0
  207. package/bin/ag-kit.js +1336 -0
  208. package/bin/core/builder.js +80 -0
  209. package/bin/core/generator.js +59 -0
  210. package/bin/core/resource-loader.js +64 -0
  211. package/bin/core/transformer.js +208 -0
  212. package/bin/interactive.js +65 -0
  213. package/bin/utils/atomic-writer.js +97 -0
  214. package/bin/utils/git-helper.js +68 -0
  215. package/bin/utils/managed-block.js +65 -0
  216. package/bin/utils/manifest.js +241 -0
  217. package/bin/utils.js +82 -0
  218. package/docs/codex-rules-template.md +36 -0
  219. package/docs/mapping-spec.md +68 -0
  220. package/docs/multi-target-adapter.md +80 -0
  221. package/docs/official/README.md +53 -0
  222. package/docs/official/antigravity/agent-modes-settings.md +64 -0
  223. package/docs/official/antigravity/rules-workflows.md +96 -0
  224. package/docs/official/antigravity/skills.md +147 -0
  225. package/docs/official/codex/agents-md.md +119 -0
  226. package/docs/official/codex/config-advanced.md +358 -0
  227. package/docs/official/codex/config-basic.md +141 -0
  228. package/docs/official/codex/config-reference.md +223 -0
  229. package/docs/official/codex/config-sample.md +216 -0
  230. package/docs/official/codex/mcp.md +107 -0
  231. package/docs/official/codex/rules.md +79 -0
  232. package/docs/official/codex/skills.md +114 -0
  233. package/docs/official/sources-index.md +32 -0
  234. package/docs/operations.md +145 -0
  235. package/docs/terminology-style-guide.md +69 -0
  236. package/package.json +51 -0
  237. package/scripts/postinstall-check.js +112 -0
@@ -0,0 +1,306 @@
1
+ # 动效图形参考(Motion Graphics Reference)
2
+
3
+ > 面向高质量 Web 体验的高级动效技术:Lottie、GSAP、SVG、3D、Particle(粒子)效果。
4
+ > **先理解原则,再做真正有价值的惊艳动效。**
5
+
6
+ ---
7
+
8
+ ## 1. Lottie 动画(Lottie Animations)
9
+
10
+ ### 什么是 Lottie?
11
+
12
+ ```
13
+ 基于 JSON 的矢量动画:
14
+ ├── 由 After Effects 通过 Bodymovin 导出
15
+ ├── 体积轻量(通常比 GIF/视频更小)
16
+ ├── 可缩放(矢量渲染,不会像素化)
17
+ ├── 可交互(可控制播放、分段)
18
+ └── 跨平台(Web、iOS、Android、React Native)
19
+ ```
20
+
21
+ ### 何时使用 Lottie
22
+
23
+ | 场景(Use Case) | 为什么用 Lottie(Why Lottie) |
24
+ |------------------|-------------------------------|
25
+ | **加载动画(Loading animations)** | 品牌一致、流畅且轻量 |
26
+ | **空状态(Empty states)** | 更有吸引力的插画表达 |
27
+ | **引导流程(Onboarding flows)** | 适合复杂多步骤动画 |
28
+ | **成功/错误反馈(Success/Error feedback)** | 更有愉悦感的微交互 |
29
+ | **动态图标(Animated icons)** | 跨平台风格一致 |
30
+
31
+ ### 设计原则(Principles)
32
+
33
+ - 文件体积尽量控制在 100KB 以内,保证性能。
34
+ - 循环播放(loop)应克制,避免分散注意力。
35
+ - 为 `prefers-reduced-motion` 提供静态回退。
36
+ - 尽可能按需(lazy load)加载动画资源。
37
+
38
+ ### 资源来源(Sources)
39
+
40
+ - LottieFiles.com(免费资源库)
41
+ - After Effects + Bodymovin(自定义导出)
42
+ - Figma 插件(从设计稿导出)
43
+
44
+ ---
45
+
46
+ ## 2. GSAP(GreenSock)
47
+
48
+ ### GSAP 的差异化能力
49
+
50
+ ```
51
+ 专业级时间线动画系统:
52
+ ├── 可精确控制动效序列
53
+ ├── ScrollTrigger 支持滚动驱动动画
54
+ ├── MorphSVG 支持图形形态过渡
55
+ ├── 物理风格缓动(physics-based easing)
56
+ └── 可作用于任意 DOM 元素
57
+ ```
58
+
59
+ ### 核心概念(Core Concepts)
60
+
61
+ | 概念(Concept) | 作用(Purpose) |
62
+ |-----------------|-----------------|
63
+ | **Tween** | 单次 A→B 动画 |
64
+ | **Timeline** | 可编排/重叠的动画序列 |
65
+ | **ScrollTrigger** | 由滚动位置控制播放 |
66
+ | **Stagger** | 元素级联(错峰)出现效果 |
67
+
68
+ ### 何时使用 GSAP
69
+
70
+ - ✅ 复杂的序列化动效。
71
+ - ✅ 需要滚动触发(scroll-triggered)的揭示动画。
72
+ - ✅ 对时间控制精度要求高。
73
+ - ✅ 需要 SVG 形态变换(morphing)。
74
+ - ❌ 仅简单 hover/focus 动效(优先 CSS)。
75
+ - ❌ 极致性能受限的移动端场景(库体积与运行开销更高)。
76
+
77
+ ### 设计原则(Principles)
78
+
79
+ - 使用 Timeline 做编排,而不是零散 Tween。
80
+ - Stagger 延迟建议 0.05-0.15s。
81
+ - ScrollTrigger 触发点建议在视口进入 70-80%。
82
+ - 组件卸载(unmount)时清理动画,防止内存泄漏。
83
+
84
+ ---
85
+
86
+ ## 3. SVG 动画(SVG Animations)
87
+
88
+ ### SVG 动画类型
89
+
90
+ | 类型(Type) | 技术(Technique) | 场景(Use Case) |
91
+ |--------------|-------------------|------------------|
92
+ | **线稿绘制(Line Drawing)** | `stroke-dashoffset` | Logo 显示、签名字效 |
93
+ | **形态变换(Morph)** | 路径插值(Path interpolation) | 图标状态切换 |
94
+ | **变换(Transform)** | `rotate` / `scale` / `translate` | 交互式图标 |
95
+ | **颜色过渡(Color)** | `fill` / `stroke` transition | 状态变化反馈 |
96
+
97
+ ### 线稿绘制原理(Line Drawing Principles)
98
+
99
+ ```
100
+ stroke-dashoffset 绘制机制:
101
+ ├── 将 dasharray 设为路径长度
102
+ ├── 将 dashoffset 设为与 dasharray 相等(初始隐藏)
103
+ ├── 动画将 dashoffset 过渡到 0(路径显现)
104
+ └── 形成“手绘出现”效果
105
+ ```
106
+
107
+ ### 何时使用 SVG 动画
108
+
109
+ - ✅ Logo 展示、品牌记忆点。
110
+ - ✅ 图标状态过渡(如 hamburger ↔ X)。
111
+ - ✅ 信息图、数据可视化。
112
+ - ✅ 可交互插画。
113
+ - ❌ 写实照片类内容(更适合视频)。
114
+ - ❌ 极复杂场景(性能成本高)。
115
+
116
+ ### 设计原则(Principles)
117
+
118
+ - 动态获取路径长度,保证动画准确。
119
+ - 完整线稿建议时长 1-3s。
120
+ - 缓动推荐 `ease-out`,更自然。
121
+ - 填充动画应辅助主体,不与主动作竞争。
122
+
123
+ ---
124
+
125
+ ## 4. CSS 3D 变换(3D CSS Transforms)
126
+
127
+ ### 核心属性(Core Properties)
128
+
129
+ ```
130
+ CSS 3D 空间:
131
+ ├── perspective:3D 景深(常见 500-1500px)
132
+ ├── transform-style: preserve-3d(启用子元素 3D)
133
+ ├── rotateX/Y/Z:按轴旋转
134
+ ├── translateZ:沿 Z 轴远近位移
135
+ └── backface-visibility:控制背面是否可见
136
+ ```
137
+
138
+ ### 常见 3D 模式(Common 3D Patterns)
139
+
140
+ | 模式(Pattern) | 场景(Use Case) |
141
+ |-----------------|------------------|
142
+ | **卡片翻转(Card flip)** | 信息揭示、产品视图 |
143
+ | **悬停倾斜(Tilt on hover)** | 交互卡片、景深强化 |
144
+ | **视差分层(Parallax layers)** | 首屏 Hero、沉浸滚动 |
145
+ | **3D 轮播(3D carousel)** | 图库、滑动展示 |
146
+
147
+ ### 设计原则(Principles)
148
+
149
+ - `perspective`:800-1200px 更克制,400-600px 更戏剧化。
150
+ - 变换组合保持简洁(优先 rotate + translate)。
151
+ - 翻转场景确保 `backface-visibility: hidden`。
152
+ - 必测 Safari(渲染细节差异明显)。
153
+
154
+ ---
155
+
156
+ ## 5. 粒子效果(Particle Effects)
157
+
158
+ ### 粒子系统类型(Types of Particle Systems)
159
+
160
+ | 类型(Type) | 氛围(Feel) | 场景(Use Case) |
161
+ |--------------|--------------|------------------|
162
+ | **几何粒子(Geometric)** | 科技、网络感 | SaaS、科技官网 |
163
+ | **彩带粒子(Confetti)** | 庆祝感 | 成功反馈时刻 |
164
+ | **雪/雨粒子(Snow/Rain)** | 氛围感 | 季节主题、情绪化页面 |
165
+ | **尘埃/散景(Dust/Bokeh)** | 梦幻、轻奢 | 摄影、品牌展示 |
166
+ | **萤火粒子(Fireflies)** | 魔幻感 | 游戏、幻想主题 |
167
+
168
+ ### 常用库(Libraries)
169
+
170
+ | 库(Library) | 适用点(Best For) |
171
+ |---------------|--------------------|
172
+ | **tsParticles** | 配置灵活、相对轻量 |
173
+ | **particles.js** | 简单背景效果 |
174
+ | **Canvas API** | 自定义能力强、控制最大 |
175
+ | **Three.js** | 复杂 3D 粒子场景 |
176
+
177
+ ### 设计原则(Principles)
178
+
179
+ - 默认粒子量建议 30-50,避免压过内容。
180
+ - 速度建议 0.5-2,保持缓慢有机。
181
+ - 透明度建议 0.3-0.6,不喧宾夺主。
182
+ - “网络连线”应使用弱线条,避免视觉噪声。
183
+ - ⚠️ 移动端应关闭或降级粒子效果。
184
+
185
+ ### 何时使用(When to Use)
186
+
187
+ - ✅ Hero 背景氛围增强。
188
+ - ✅ 成功庆祝(如彩带爆发)。
189
+ - ✅ 科技可视化(节点连接)。
190
+ - ❌ 内容密集页面(干扰阅读)。
191
+ - ❌ 低性能设备(耗电与掉帧风险)。
192
+
193
+ ---
194
+
195
+ ## 6. 滚动驱动动画(Scroll-Driven Animations)
196
+
197
+ ### 原生 CSS(现代方案)
198
+
199
+ ```
200
+ CSS Scroll Timelines:
201
+ ├── animation-timeline: scroll() - 绑定文档滚动
202
+ ├── animation-timeline: view() - 绑定元素进入视口
203
+ ├── animation-range: entry/exit 设定区间
204
+ └── 无需 JavaScript
205
+ ```
206
+
207
+ ### 设计原则(Principles)
208
+
209
+ | 触发点(Trigger Point) | 场景(Use Case) |
210
+ |-------------------------|------------------|
211
+ | **Entry 0%** | 元素开始进入时 |
212
+ | **Entry 50%** | 元素一半可见时 |
213
+ | **Cover 50%** | 元素中心经过视口中心时 |
214
+ | **Exit 100%** | 元素完全离开时 |
215
+
216
+ ### 最佳实践(Best Practices)
217
+
218
+ - Reveal(显现)动画建议在 entry ~25% 开始。
219
+ - Parallax(视差)适合用连续滚动进度。
220
+ - Sticky(粘性)元素适合使用 cover 区间。
221
+ - 必须实测滚动性能,避免卡顿。
222
+
223
+ ---
224
+
225
+ ## 7. 性能原则(Performance Principles)
226
+
227
+ ### GPU 与 CPU 动画成本
228
+
229
+ ```
230
+ 低成本(GPU 加速):
231
+ ├── transform(translate、scale、rotate)
232
+ ├── opacity
233
+ └── filter(谨慎使用)
234
+
235
+ 高成本(会触发布局/重排):
236
+ ├── width、height
237
+ ├── top、left、right、bottom
238
+ ├── padding、margin
239
+ └── 复杂 box-shadow
240
+ ```
241
+
242
+ ### 优化清单(Optimization Checklist)
243
+
244
+ - [ ] 尽量只动画 `transform` / `opacity`。
245
+ - [ ] 重动画前短时使用 `will-change`(结束后移除)。
246
+ - [ ] 在低端设备上做实际测试。
247
+ - [ ] 实现 `prefers-reduced-motion`。
248
+ - [ ] 动画库按需加载。
249
+ - [ ] 对滚动计算做节流(throttle)。
250
+
251
+ ---
252
+
253
+ ## 8. 动效选型决策树(Motion Graphics Decision Tree)
254
+
255
+ ```
256
+ 你需要哪类动画?
257
+
258
+ ├── 品牌级复杂动画?
259
+ │ └── Lottie(After Effects 导出)
260
+
261
+ ├── 序列化 + 滚动触发?
262
+ │ └── GSAP + ScrollTrigger
263
+
264
+ ├── Logo/图标动画?
265
+ │ └── SVG 动画(stroke 或 morph)
266
+
267
+ ├── 可交互 3D 效果?
268
+ │ └── CSS 3D Transforms(简单)或 Three.js(复杂)
269
+
270
+ ├── 氛围型背景?
271
+ │ └── tsParticles 或 Canvas
272
+
273
+ └── 简单入场/悬停?
274
+ └── CSS @keyframes 或 Framer Motion
275
+ ```
276
+
277
+ ---
278
+
279
+ ## 9. 反模式(Anti-Patterns)
280
+
281
+ | ❌ 不要这样做(Don't) | ✅ 推荐这样做(Do) |
282
+ |------------------------|--------------------|
283
+ | 所有元素同时动起来 | 用 Stagger 与序列化控制节奏 |
284
+ | 简单效果也上重库 | 先用 CSS 起步 |
285
+ | 忽略 reduced-motion | 始终提供降级方案 |
286
+ | 阻塞主线程 | 以 60fps 为目标做优化 |
287
+ | 每个项目都复用同一粒子效果 | 根据品牌与场景匹配 |
288
+ | 移动端堆复杂特效 | 做能力检测与特性降级 |
289
+
290
+ ---
291
+
292
+ ## 10. 速查表(Quick Reference)
293
+
294
+ | 效果(Effect) | 工具(Tool) | 性能级别(Performance) |
295
+ |----------------|--------------|--------------------------|
296
+ | Loading spinner | CSS / Lottie | Light(轻) |
297
+ | Staggered reveal | GSAP / Framer | Medium(中) |
298
+ | SVG path draw | CSS stroke | Light(轻) |
299
+ | 3D card flip | CSS transforms | Light(轻) |
300
+ | Particle background | tsParticles | Heavy(重) |
301
+ | Scroll parallax | GSAP ScrollTrigger | Medium(中) |
302
+ | Shape morphing | GSAP MorphSVG | Medium(中) |
303
+
304
+ ---
305
+
306
+ > **记住(Remember)**:动效必须“增强信息传达”,而不是“制造干扰”。每个动画都应服务明确目的:反馈、引导、愉悦或叙事。
@@ -0,0 +1,183 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Accessibility Checker - WCAG compliance audit
4
+ Checks HTML files for accessibility issues.
5
+
6
+ Usage:
7
+ python accessibility_checker.py <project_path>
8
+
9
+ Checks:
10
+ - Form labels
11
+ - ARIA attributes
12
+ - Color contrast hints
13
+ - Keyboard navigation
14
+ - Semantic HTML
15
+ """
16
+
17
+ import sys
18
+ import json
19
+ import re
20
+ from pathlib import Path
21
+ from datetime import datetime
22
+
23
+ # Fix Windows console encoding
24
+ try:
25
+ sys.stdout.reconfigure(encoding='utf-8', errors='replace')
26
+ except:
27
+ pass
28
+
29
+
30
+ def find_html_files(project_path: Path) -> list:
31
+ """Find all HTML/JSX/TSX files."""
32
+ patterns = ['**/*.html', '**/*.jsx', '**/*.tsx']
33
+ skip_dirs = {'node_modules', '.next', 'dist', 'build', '.git'}
34
+
35
+ files = []
36
+ for pattern in patterns:
37
+ for f in project_path.glob(pattern):
38
+ if not any(skip in f.parts for skip in skip_dirs):
39
+ files.append(f)
40
+
41
+ return files[:50]
42
+
43
+
44
+ def check_accessibility(file_path: Path) -> list:
45
+ """Check a single file for accessibility issues."""
46
+ issues = []
47
+
48
+ try:
49
+ content = file_path.read_text(encoding='utf-8', errors='ignore')
50
+
51
+ # Check for form inputs without labels
52
+ inputs = re.findall(r'<input[^>]*>', content, re.IGNORECASE)
53
+ for inp in inputs:
54
+ if 'type="hidden"' not in inp.lower():
55
+ if 'aria-label' not in inp.lower() and 'id=' not in inp.lower():
56
+ issues.append("Input without label or aria-label")
57
+ break
58
+
59
+ # Check for buttons without accessible text
60
+ buttons = re.findall(r'<button[^>]*>[^<]*</button>', content, re.IGNORECASE)
61
+ for btn in buttons:
62
+ # Check if button has text content or aria-label
63
+ if 'aria-label' not in btn.lower():
64
+ text = re.sub(r'<[^>]+>', '', btn)
65
+ if not text.strip():
66
+ issues.append("Button without accessible text")
67
+ break
68
+
69
+ # Check for missing lang attribute
70
+ if '<html' in content.lower() and 'lang=' not in content.lower():
71
+ issues.append("Missing lang attribute on <html>")
72
+
73
+ # Check for missing skip link
74
+ if '<main' in content.lower() or '<body' in content.lower():
75
+ if 'skip' not in content.lower() and '#main' not in content.lower():
76
+ issues.append("Consider adding skip-to-main-content link")
77
+
78
+ # Check for click handlers without keyboard support
79
+ onclick_count = content.lower().count('onclick=')
80
+ onkeydown_count = content.lower().count('onkeydown=') + content.lower().count('onkeyup=')
81
+ if onclick_count > 0 and onkeydown_count == 0:
82
+ issues.append("onClick without keyboard handler (onKeyDown)")
83
+
84
+ # Check for tabIndex misuse
85
+ if 'tabindex=' in content.lower():
86
+ if 'tabindex="-1"' not in content.lower() and 'tabindex="0"' not in content.lower():
87
+ positive_tabindex = re.findall(r'tabindex="([1-9]\d*)"', content, re.IGNORECASE)
88
+ if positive_tabindex:
89
+ issues.append("Avoid positive tabIndex values")
90
+
91
+ # Check for autoplay media
92
+ if 'autoplay' in content.lower():
93
+ if 'muted' not in content.lower():
94
+ issues.append("Autoplay media should be muted")
95
+
96
+ # Check for role usage
97
+ if 'role="button"' in content.lower():
98
+ # Divs with role button should have tabindex
99
+ div_buttons = re.findall(r'<div[^>]*role="button"[^>]*>', content, re.IGNORECASE)
100
+ for div in div_buttons:
101
+ if 'tabindex' not in div.lower():
102
+ issues.append("role='button' without tabindex")
103
+ break
104
+
105
+ except Exception as e:
106
+ issues.append(f"Error reading file: {str(e)[:50]}")
107
+
108
+ return issues
109
+
110
+
111
+ def main():
112
+ project_path = Path(sys.argv[1] if len(sys.argv) > 1 else ".").resolve()
113
+
114
+ print(f"\n{'='*60}")
115
+ print(f"[ACCESSIBILITY CHECKER] WCAG Compliance Audit")
116
+ print(f"{'='*60}")
117
+ print(f"Project: {project_path}")
118
+ print(f"Time: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
119
+ print("-"*60)
120
+
121
+ # Find HTML files
122
+ files = find_html_files(project_path)
123
+ print(f"Found {len(files)} HTML/JSX/TSX files")
124
+
125
+ if not files:
126
+ output = {
127
+ "script": "accessibility_checker",
128
+ "project": str(project_path),
129
+ "files_checked": 0,
130
+ "issues_found": 0,
131
+ "passed": True,
132
+ "message": "No HTML files found"
133
+ }
134
+ print(json.dumps(output, indent=2))
135
+ sys.exit(0)
136
+
137
+ # Check each file
138
+ all_issues = []
139
+
140
+ for f in files:
141
+ issues = check_accessibility(f)
142
+ if issues:
143
+ all_issues.append({
144
+ "file": str(f.name),
145
+ "issues": issues
146
+ })
147
+
148
+ # Summary
149
+ print("\n" + "="*60)
150
+ print("ACCESSIBILITY ISSUES")
151
+ print("="*60)
152
+
153
+ if all_issues:
154
+ for item in all_issues[:10]:
155
+ print(f"\n{item['file']}:")
156
+ for issue in item["issues"]:
157
+ print(f" - {issue}")
158
+
159
+ if len(all_issues) > 10:
160
+ print(f"\n... and {len(all_issues) - 10} more files with issues")
161
+ else:
162
+ print("No accessibility issues found!")
163
+
164
+ total_issues = sum(len(item["issues"]) for item in all_issues)
165
+ # Accessibility issues are important but not blocking
166
+ passed = total_issues < 5 # Allow minor issues
167
+
168
+ output = {
169
+ "script": "accessibility_checker",
170
+ "project": str(project_path),
171
+ "files_checked": len(files),
172
+ "files_with_issues": len(all_issues),
173
+ "issues_found": total_issues,
174
+ "passed": passed
175
+ }
176
+
177
+ print("\n" + json.dumps(output, indent=2))
178
+
179
+ sys.exit(0 if passed else 1)
180
+
181
+
182
+ if __name__ == "__main__":
183
+ main()