@musashishao/agent-kit 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agent/.shared/ui-ux-pro-max/data/charts.csv +26 -0
- package/.agent/.shared/ui-ux-pro-max/data/colors.csv +97 -0
- package/.agent/.shared/ui-ux-pro-max/data/icons.csv +101 -0
- package/.agent/.shared/ui-ux-pro-max/data/landing.csv +31 -0
- package/.agent/.shared/ui-ux-pro-max/data/products.csv +97 -0
- package/.agent/.shared/ui-ux-pro-max/data/prompts.csv +24 -0
- package/.agent/.shared/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/.agent/.shared/ui-ux-pro-max/data/styles.csv +59 -0
- package/.agent/.shared/ui-ux-pro-max/data/typography.csv +58 -0
- package/.agent/.shared/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/.agent/.shared/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/.agent/.shared/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/.agent/.shared/ui-ux-pro-max/scripts/core.py +258 -0
- package/.agent/.shared/ui-ux-pro-max/scripts/design_system.py +487 -0
- package/.agent/.shared/ui-ux-pro-max/scripts/search.py +76 -0
- package/.agent/ARCHITECTURE.md +225 -0
- package/.agent/CONTEXT.md +229 -0
- package/.agent/FEATURE_ROADMAP.md +435 -0
- package/.agent/PROMPT_TEMPLATES.md +261 -0
- package/.agent/agents/backend-specialist.md +263 -0
- package/.agent/agents/database-architect.md +226 -0
- package/.agent/agents/debugger.md +225 -0
- package/.agent/agents/devops-engineer.md +242 -0
- package/.agent/agents/documentation-writer.md +104 -0
- package/.agent/agents/explorer-agent.md +73 -0
- package/.agent/agents/frontend-specialist.md +556 -0
- package/.agent/agents/game-developer.md +162 -0
- package/.agent/agents/mobile-developer.md +377 -0
- package/.agent/agents/orchestrator.md +416 -0
- package/.agent/agents/penetration-tester.md +188 -0
- package/.agent/agents/performance-optimizer.md +187 -0
- package/.agent/agents/project-planner.md +403 -0
- package/.agent/agents/security-auditor.md +170 -0
- package/.agent/agents/seo-specialist.md +111 -0
- package/.agent/agents/test-engineer.md +158 -0
- package/.agent/rules/GEMINI.md +251 -0
- package/.agent/skills/api-patterns/SKILL.md +81 -0
- package/.agent/skills/api-patterns/api-style.md +42 -0
- package/.agent/skills/api-patterns/auth.md +24 -0
- package/.agent/skills/api-patterns/documentation.md +26 -0
- package/.agent/skills/api-patterns/graphql.md +41 -0
- package/.agent/skills/api-patterns/rate-limiting.md +31 -0
- package/.agent/skills/api-patterns/response.md +37 -0
- package/.agent/skills/api-patterns/rest.md +40 -0
- package/.agent/skills/api-patterns/scripts/api_validator.py +211 -0
- package/.agent/skills/api-patterns/security-testing.md +122 -0
- package/.agent/skills/api-patterns/trpc.md +41 -0
- package/.agent/skills/api-patterns/versioning.md +22 -0
- package/.agent/skills/app-builder/SKILL.md +75 -0
- package/.agent/skills/app-builder/agent-coordination.md +71 -0
- package/.agent/skills/app-builder/feature-building.md +53 -0
- package/.agent/skills/app-builder/project-detection.md +34 -0
- package/.agent/skills/app-builder/scaffolding.md +118 -0
- package/.agent/skills/app-builder/tech-stack.md +40 -0
- package/.agent/skills/app-builder/templates/SKILL.md +39 -0
- package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
- package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
- package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
- package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
- package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
- package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
- package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +82 -0
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +100 -0
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +106 -0
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +101 -0
- package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
- package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +93 -0
- package/.agent/skills/architecture/SKILL.md +55 -0
- package/.agent/skills/architecture/context-discovery.md +43 -0
- package/.agent/skills/architecture/examples.md +94 -0
- package/.agent/skills/architecture/pattern-selection.md +68 -0
- package/.agent/skills/architecture/patterns-reference.md +50 -0
- package/.agent/skills/architecture/trade-off-analysis.md +77 -0
- package/.agent/skills/bash-linux/SKILL.md +199 -0
- package/.agent/skills/behavioral-modes/SKILL.md +242 -0
- package/.agent/skills/brainstorming/SKILL.md +163 -0
- package/.agent/skills/brainstorming/dynamic-questioning.md +350 -0
- package/.agent/skills/clean-code/SKILL.md +201 -0
- package/.agent/skills/code-review-checklist/SKILL.md +109 -0
- package/.agent/skills/database-design/SKILL.md +52 -0
- package/.agent/skills/database-design/database-selection.md +43 -0
- package/.agent/skills/database-design/indexing.md +39 -0
- package/.agent/skills/database-design/migrations.md +48 -0
- package/.agent/skills/database-design/optimization.md +36 -0
- package/.agent/skills/database-design/orm-selection.md +30 -0
- package/.agent/skills/database-design/schema-design.md +56 -0
- package/.agent/skills/database-design/scripts/schema_validator.py +172 -0
- package/.agent/skills/deployment-procedures/SKILL.md +241 -0
- package/.agent/skills/doc.md +177 -0
- package/.agent/skills/docker-expert/SKILL.md +409 -0
- package/.agent/skills/documentation-templates/SKILL.md +194 -0
- package/.agent/skills/frontend-design/SKILL.md +396 -0
- package/.agent/skills/frontend-design/animation-guide.md +331 -0
- package/.agent/skills/frontend-design/color-system.md +311 -0
- package/.agent/skills/frontend-design/decision-trees.md +418 -0
- package/.agent/skills/frontend-design/motion-graphics.md +306 -0
- package/.agent/skills/frontend-design/scripts/accessibility_checker.py +183 -0
- package/.agent/skills/frontend-design/scripts/ux_audit.py +722 -0
- package/.agent/skills/frontend-design/typography-system.md +345 -0
- package/.agent/skills/frontend-design/ux-psychology.md +541 -0
- package/.agent/skills/frontend-design/visual-effects.md +383 -0
- package/.agent/skills/game-development/2d-games/SKILL.md +119 -0
- package/.agent/skills/game-development/3d-games/SKILL.md +135 -0
- package/.agent/skills/game-development/SKILL.md +167 -0
- package/.agent/skills/game-development/game-art/SKILL.md +185 -0
- package/.agent/skills/game-development/game-audio/SKILL.md +190 -0
- package/.agent/skills/game-development/game-design/SKILL.md +129 -0
- package/.agent/skills/game-development/mobile-games/SKILL.md +108 -0
- package/.agent/skills/game-development/multiplayer/SKILL.md +132 -0
- package/.agent/skills/game-development/pc-games/SKILL.md +144 -0
- package/.agent/skills/game-development/vr-ar/SKILL.md +123 -0
- package/.agent/skills/game-development/web-games/SKILL.md +150 -0
- package/.agent/skills/geo-fundamentals/SKILL.md +156 -0
- package/.agent/skills/geo-fundamentals/scripts/geo_checker.py +289 -0
- package/.agent/skills/i18n-localization/SKILL.md +154 -0
- package/.agent/skills/i18n-localization/scripts/i18n_checker.py +241 -0
- package/.agent/skills/lint-and-validate/SKILL.md +45 -0
- package/.agent/skills/lint-and-validate/scripts/lint_runner.py +172 -0
- package/.agent/skills/lint-and-validate/scripts/type_coverage.py +173 -0
- package/.agent/skills/mcp-builder/SKILL.md +176 -0
- package/.agent/skills/mobile-design/SKILL.md +394 -0
- package/.agent/skills/mobile-design/decision-trees.md +516 -0
- package/.agent/skills/mobile-design/mobile-backend.md +491 -0
- package/.agent/skills/mobile-design/mobile-color-system.md +420 -0
- package/.agent/skills/mobile-design/mobile-debugging.md +122 -0
- package/.agent/skills/mobile-design/mobile-design-thinking.md +357 -0
- package/.agent/skills/mobile-design/mobile-navigation.md +458 -0
- package/.agent/skills/mobile-design/mobile-performance.md +767 -0
- package/.agent/skills/mobile-design/mobile-testing.md +356 -0
- package/.agent/skills/mobile-design/mobile-typography.md +433 -0
- package/.agent/skills/mobile-design/platform-android.md +666 -0
- package/.agent/skills/mobile-design/platform-ios.md +561 -0
- package/.agent/skills/mobile-design/scripts/mobile_audit.py +670 -0
- package/.agent/skills/mobile-design/touch-psychology.md +537 -0
- package/.agent/skills/nestjs-expert/SKILL.md +552 -0
- package/.agent/skills/nextjs-best-practices/SKILL.md +203 -0
- package/.agent/skills/nodejs-best-practices/SKILL.md +333 -0
- package/.agent/skills/parallel-agents/SKILL.md +175 -0
- package/.agent/skills/performance-profiling/SKILL.md +143 -0
- package/.agent/skills/performance-profiling/scripts/lighthouse_audit.py +76 -0
- package/.agent/skills/plan-writing/SKILL.md +152 -0
- package/.agent/skills/powershell-windows/SKILL.md +167 -0
- package/.agent/skills/prisma-expert/SKILL.md +355 -0
- package/.agent/skills/python-patterns/SKILL.md +441 -0
- package/.agent/skills/react-patterns/SKILL.md +198 -0
- package/.agent/skills/red-team-tactics/SKILL.md +199 -0
- package/.agent/skills/seo-fundamentals/SKILL.md +129 -0
- package/.agent/skills/seo-fundamentals/scripts/seo_checker.py +219 -0
- package/.agent/skills/server-management/SKILL.md +161 -0
- package/.agent/skills/systematic-debugging/SKILL.md +109 -0
- package/.agent/skills/tailwind-patterns/SKILL.md +269 -0
- package/.agent/skills/tdd-workflow/SKILL.md +149 -0
- package/.agent/skills/testing-patterns/SKILL.md +178 -0
- package/.agent/skills/testing-patterns/scripts/test_runner.py +219 -0
- package/.agent/skills/typescript-expert/SKILL.md +429 -0
- package/.agent/skills/typescript-expert/references/tsconfig-strict.json +92 -0
- package/.agent/skills/typescript-expert/references/typescript-cheatsheet.md +383 -0
- package/.agent/skills/typescript-expert/references/utility-types.ts +335 -0
- package/.agent/skills/typescript-expert/scripts/ts_diagnostic.py +203 -0
- package/.agent/skills/ui-ux-pro-max/SKILL.md +351 -0
- package/.agent/skills/ui-ux-pro-max/data/charts.csv +26 -0
- package/.agent/skills/ui-ux-pro-max/data/colors.csv +97 -0
- package/.agent/skills/ui-ux-pro-max/data/icons.csv +101 -0
- package/.agent/skills/ui-ux-pro-max/data/landing.csv +31 -0
- package/.agent/skills/ui-ux-pro-max/data/products.csv +97 -0
- package/.agent/skills/ui-ux-pro-max/data/prompts.csv +24 -0
- package/.agent/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/.agent/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/.agent/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/.agent/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/.agent/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/.agent/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/.agent/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/.agent/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/.agent/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/.agent/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/.agent/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/.agent/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/.agent/skills/ui-ux-pro-max/data/styles.csv +59 -0
- package/.agent/skills/ui-ux-pro-max/data/typography.csv +58 -0
- package/.agent/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/.agent/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/.agent/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/.agent/skills/ui-ux-pro-max/scripts/core.py +257 -0
- package/.agent/skills/ui-ux-pro-max/scripts/design_system.py +487 -0
- package/.agent/skills/ui-ux-pro-max/scripts/search.py +76 -0
- package/.agent/skills/vulnerability-scanner/SKILL.md +276 -0
- package/.agent/skills/vulnerability-scanner/checklists.md +121 -0
- package/.agent/skills/vulnerability-scanner/scripts/security_scan.py +458 -0
- package/.agent/skills/webapp-testing/SKILL.md +187 -0
- package/.agent/skills/webapp-testing/scripts/playwright_runner.py +173 -0
- package/.agent/workflows/brainstorm.md +113 -0
- package/.agent/workflows/create.md +59 -0
- package/.agent/workflows/debug.md +103 -0
- package/.agent/workflows/deploy.md +176 -0
- package/.agent/workflows/enhance.md +63 -0
- package/.agent/workflows/orchestrate.md +237 -0
- package/.agent/workflows/plan.md +89 -0
- package/.agent/workflows/preview.md +80 -0
- package/.agent/workflows/status.md +86 -0
- package/.agent/workflows/test.md +144 -0
- package/.agent/workflows/ui-ux-pro-max.md +231 -0
- package/LICENSE +21 -0
- package/README.md +101 -0
- package/bin/cli.js +235 -0
- package/index.js +1 -0
- package/package.json +43 -0
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
# Motion Graphics Reference
|
|
2
|
+
|
|
3
|
+
> Advanced animation techniques for premium web experiences - Lottie, GSAP, SVG, 3D, Particles.
|
|
4
|
+
> **Learn the principles, create WOW effects.**
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 1. Lottie Animations
|
|
9
|
+
|
|
10
|
+
### What is Lottie?
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
JSON-based vector animations:
|
|
14
|
+
├── Exported from After Effects via Bodymovin
|
|
15
|
+
├── Lightweight (smaller than GIF/video)
|
|
16
|
+
├── Scalable (vector-based, no pixelation)
|
|
17
|
+
├── Interactive (control playback, segments)
|
|
18
|
+
└── Cross-platform (web, iOS, Android, React Native)
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### When to Use Lottie
|
|
22
|
+
|
|
23
|
+
| Use Case | Why Lottie? |
|
|
24
|
+
|----------|-------------|
|
|
25
|
+
| **Loading animations** | Branded, smooth, lightweight |
|
|
26
|
+
| **Empty states** | Engaging illustrations |
|
|
27
|
+
| **Onboarding flows** | Complex multi-step animations |
|
|
28
|
+
| **Success/Error feedback** | Delightful micro-interactions |
|
|
29
|
+
| **Animated icons** | Consistent cross-platform |
|
|
30
|
+
|
|
31
|
+
### Principles
|
|
32
|
+
|
|
33
|
+
- Keep file size under 100KB for performance
|
|
34
|
+
- Use loop sparingly (avoid distraction)
|
|
35
|
+
- Provide static fallback for reduced-motion
|
|
36
|
+
- Lazy load animation files when possible
|
|
37
|
+
|
|
38
|
+
### Sources
|
|
39
|
+
|
|
40
|
+
- LottieFiles.com (free library)
|
|
41
|
+
- After Effects + Bodymovin (custom)
|
|
42
|
+
- Figma plugins (export from design)
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## 2. GSAP (GreenSock)
|
|
47
|
+
|
|
48
|
+
### What Makes GSAP Different
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
Professional timeline-based animation:
|
|
52
|
+
├── Precise control over sequences
|
|
53
|
+
├── ScrollTrigger for scroll-driven animations
|
|
54
|
+
├── MorphSVG for shape transitions
|
|
55
|
+
├── Physics-based easing
|
|
56
|
+
└── Works with any DOM element
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Core Concepts
|
|
60
|
+
|
|
61
|
+
| Concept | Purpose |
|
|
62
|
+
|---------|---------|
|
|
63
|
+
| **Tween** | Single A→B animation |
|
|
64
|
+
| **Timeline** | Sequenced/overlapping animations |
|
|
65
|
+
| **ScrollTrigger** | Scroll position controls playback |
|
|
66
|
+
| **Stagger** | Cascade effect across elements |
|
|
67
|
+
|
|
68
|
+
### When to Use GSAP
|
|
69
|
+
|
|
70
|
+
- ✅ Complex sequenced animations
|
|
71
|
+
- ✅ Scroll-triggered reveals
|
|
72
|
+
- ✅ Precise timing control needed
|
|
73
|
+
- ✅ SVG morphing effects
|
|
74
|
+
- ❌ Simple hover/focus effects (use CSS)
|
|
75
|
+
- ❌ Performance-critical mobile (heavier)
|
|
76
|
+
|
|
77
|
+
### Principles
|
|
78
|
+
|
|
79
|
+
- Use timeline for orchestration (not individual tweens)
|
|
80
|
+
- Stagger delay: 0.05-0.15s between items
|
|
81
|
+
- ScrollTrigger: start at 70-80% viewport entry
|
|
82
|
+
- Kill animations on unmount (prevent memory leaks)
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 3. SVG Animations
|
|
87
|
+
|
|
88
|
+
### Types of SVG Animation
|
|
89
|
+
|
|
90
|
+
| Type | Technique | Use Case |
|
|
91
|
+
|------|-----------|----------|
|
|
92
|
+
| **Line Drawing** | stroke-dashoffset | Logo reveals, signatures |
|
|
93
|
+
| **Morph** | Path interpolation | Icon transitions |
|
|
94
|
+
| **Transform** | rotate, scale, translate | Interactive icons |
|
|
95
|
+
| **Color** | fill/stroke transition | State changes |
|
|
96
|
+
|
|
97
|
+
### Line Drawing Principles
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
How stroke-dashoffset drawing works:
|
|
101
|
+
├── Set dasharray to path length
|
|
102
|
+
├── Set dashoffset equal to dasharray (hidden)
|
|
103
|
+
├── Animate dashoffset to 0 (revealed)
|
|
104
|
+
└── Create "drawing" effect
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### When to Use SVG Animations
|
|
108
|
+
|
|
109
|
+
- ✅ Logo reveals, brand moments
|
|
110
|
+
- ✅ Icon state transitions (hamburger ↔ X)
|
|
111
|
+
- ✅ Infographics, data visualization
|
|
112
|
+
- ✅ Interactive illustrations
|
|
113
|
+
- ❌ Photo-realistic content (use video)
|
|
114
|
+
- ❌ Very complex scenes (performance)
|
|
115
|
+
|
|
116
|
+
### Principles
|
|
117
|
+
|
|
118
|
+
- Get path length dynamically for accuracy
|
|
119
|
+
- Duration: 1-3s for full drawings
|
|
120
|
+
- Easing: ease-out for natural feel
|
|
121
|
+
- Simple fills complement, don't compete
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## 4. 3D CSS Transforms
|
|
126
|
+
|
|
127
|
+
### Core Properties
|
|
128
|
+
|
|
129
|
+
```
|
|
130
|
+
CSS 3D Space:
|
|
131
|
+
├── perspective: depth of 3D field (500-1500px typical)
|
|
132
|
+
├── transform-style: preserve-3d (enable children 3D)
|
|
133
|
+
├── rotateX/Y/Z: rotation per axis
|
|
134
|
+
├── translateZ: move toward/away from viewer
|
|
135
|
+
└── backface-visibility: show/hide back side
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Common 3D Patterns
|
|
139
|
+
|
|
140
|
+
| Pattern | Use Case |
|
|
141
|
+
|---------|----------|
|
|
142
|
+
| **Card flip** | Reveals, flashcards, product views |
|
|
143
|
+
| **Tilt on hover** | Interactive cards, 3D depth |
|
|
144
|
+
| **Parallax layers** | Hero sections, immersive scrolling |
|
|
145
|
+
| **3D carousel** | Image galleries, sliders |
|
|
146
|
+
|
|
147
|
+
### Principles
|
|
148
|
+
|
|
149
|
+
- Perspective: 800-1200px for subtle, 400-600px for dramatic
|
|
150
|
+
- Keep transforms simple (rotate + translate)
|
|
151
|
+
- Ensure backface-visibility: hidden for flips
|
|
152
|
+
- Test on Safari (different rendering)
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## 5. Particle Effects
|
|
157
|
+
|
|
158
|
+
### Types of Particle Systems
|
|
159
|
+
|
|
160
|
+
| Type | Feel | Use Case |
|
|
161
|
+
|------|------|----------|
|
|
162
|
+
| **Geometric** | Tech, network | SaaS, tech sites |
|
|
163
|
+
| **Confetti** | Celebration | Success moments |
|
|
164
|
+
| **Snow/Rain** | Atmospheric | Seasonal, mood |
|
|
165
|
+
| **Dust/Bokeh** | Dreamy | Photography, luxury |
|
|
166
|
+
| **Fireflies** | Magical | Games, fantasy |
|
|
167
|
+
|
|
168
|
+
### Libraries
|
|
169
|
+
|
|
170
|
+
| Library | Best For |
|
|
171
|
+
|---------|----------|
|
|
172
|
+
| **tsParticles** | Configurable, lightweight |
|
|
173
|
+
| **particles.js** | Simple backgrounds |
|
|
174
|
+
| **Canvas API** | Custom, maximum control |
|
|
175
|
+
| **Three.js** | Complex 3D particles |
|
|
176
|
+
|
|
177
|
+
### Principles
|
|
178
|
+
|
|
179
|
+
- Default: 30-50 particles (not overwhelming)
|
|
180
|
+
- Movement: slow, organic (speed 0.5-2)
|
|
181
|
+
- Opacity: 0.3-0.6 (don't compete with content)
|
|
182
|
+
- Connections: subtle lines for "network" feel
|
|
183
|
+
- ⚠️ Disable or reduce on mobile
|
|
184
|
+
|
|
185
|
+
### When to Use
|
|
186
|
+
|
|
187
|
+
- ✅ Hero backgrounds (atmospheric)
|
|
188
|
+
- ✅ Success celebrations (confetti burst)
|
|
189
|
+
- ✅ Tech visualization (connected nodes)
|
|
190
|
+
- ❌ Content-heavy pages (distraction)
|
|
191
|
+
- ❌ Low-powered devices (battery drain)
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## 6. Scroll-Driven Animations
|
|
196
|
+
|
|
197
|
+
### Native CSS (Modern)
|
|
198
|
+
|
|
199
|
+
```
|
|
200
|
+
CSS Scroll Timelines:
|
|
201
|
+
├── animation-timeline: scroll() - document scroll
|
|
202
|
+
├── animation-timeline: view() - element in viewport
|
|
203
|
+
├── animation-range: entry/exit thresholds
|
|
204
|
+
└── No JavaScript required
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### Principles
|
|
208
|
+
|
|
209
|
+
| Trigger Point | Use Case |
|
|
210
|
+
|---------------|----------|
|
|
211
|
+
| **Entry 0%** | When element starts entering |
|
|
212
|
+
| **Entry 50%** | When half visible |
|
|
213
|
+
| **Cover 50%** | When centered in viewport |
|
|
214
|
+
| **Exit 100%** | When fully exited |
|
|
215
|
+
|
|
216
|
+
### Best Practices
|
|
217
|
+
|
|
218
|
+
- Reveal animations: start at ~25% entry
|
|
219
|
+
- Parallax: continuous scroll progress
|
|
220
|
+
- Sticky elements: use cover range
|
|
221
|
+
- Always test scroll performance
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## 7. Performance Principles
|
|
226
|
+
|
|
227
|
+
### GPU vs CPU Animation
|
|
228
|
+
|
|
229
|
+
```
|
|
230
|
+
CHEAP (GPU-accelerated):
|
|
231
|
+
├── transform (translate, scale, rotate)
|
|
232
|
+
├── opacity
|
|
233
|
+
└── filter (use sparingly)
|
|
234
|
+
|
|
235
|
+
EXPENSIVE (triggers reflow):
|
|
236
|
+
├── width, height
|
|
237
|
+
├── top, left, right, bottom
|
|
238
|
+
├── padding, margin
|
|
239
|
+
└── complex box-shadow
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### Optimization Checklist
|
|
243
|
+
|
|
244
|
+
- [ ] Animate only transform/opacity
|
|
245
|
+
- [ ] Use `will-change` before heavy animations (remove after)
|
|
246
|
+
- [ ] Test on low-end devices
|
|
247
|
+
- [ ] Implement `prefers-reduced-motion`
|
|
248
|
+
- [ ] Lazy load animation libraries
|
|
249
|
+
- [ ] Throttle scroll-based calculations
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## 8. Motion Graphics Decision Tree
|
|
254
|
+
|
|
255
|
+
```
|
|
256
|
+
What animation do you need?
|
|
257
|
+
│
|
|
258
|
+
├── Complex branded animation?
|
|
259
|
+
│ └── Lottie (After Effects export)
|
|
260
|
+
│
|
|
261
|
+
├── Sequenced scroll-triggered?
|
|
262
|
+
│ └── GSAP + ScrollTrigger
|
|
263
|
+
│
|
|
264
|
+
├── Logo/icon animation?
|
|
265
|
+
│ └── SVG animation (stroke or morph)
|
|
266
|
+
│
|
|
267
|
+
├── Interactive 3D effect?
|
|
268
|
+
│ └── CSS 3D Transforms (simple) or Three.js (complex)
|
|
269
|
+
│
|
|
270
|
+
├── Atmospheric background?
|
|
271
|
+
│ └── tsParticles or Canvas
|
|
272
|
+
│
|
|
273
|
+
└── Simple entrance/hover?
|
|
274
|
+
└── CSS @keyframes or Framer Motion
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
## 9. Anti-Patterns
|
|
280
|
+
|
|
281
|
+
| ❌ Don't | ✅ Do |
|
|
282
|
+
|----------|-------|
|
|
283
|
+
| Animate everything at once | Stagger and sequence |
|
|
284
|
+
| Use heavy libraries for simple effects | Start with CSS |
|
|
285
|
+
| Ignore reduced-motion | Always provide fallback |
|
|
286
|
+
| Block main thread | Optimize for 60fps |
|
|
287
|
+
| Same particles every project | Match brand/context |
|
|
288
|
+
| Complex effects on mobile | Feature detection |
|
|
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**: Motion graphics should enhance, not distract. Every animation must serve a PURPOSE—feedback, guidance, delight, or storytelling.
|
|
@@ -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()
|