baldart 3.6.2

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 (230) hide show
  1. package/CHANGELOG.md +599 -0
  2. package/README.md +566 -0
  3. package/VERSION +1 -0
  4. package/bin/baldart.js +143 -0
  5. package/framework/.claude/agents/REGISTRY.md +169 -0
  6. package/framework/.claude/agents/api-perf-cost-auditor.md +291 -0
  7. package/framework/.claude/agents/code-reviewer.md +350 -0
  8. package/framework/.claude/agents/codebase-architect.md +391 -0
  9. package/framework/.claude/agents/coder.md +291 -0
  10. package/framework/.claude/agents/deep-human-insight.md +198 -0
  11. package/framework/.claude/agents/doc-reviewer.md +440 -0
  12. package/framework/.claude/agents/email-deliverability-architect.md +193 -0
  13. package/framework/.claude/agents/hybrid-ml-architect.md +285 -0
  14. package/framework/.claude/agents/hyper-gamification-designer.md +149 -0
  15. package/framework/.claude/agents/legal-counsel-gdpr.md +179 -0
  16. package/framework/.claude/agents/marketing-conversion-strategist.md +162 -0
  17. package/framework/.claude/agents/motion-expert.md +108 -0
  18. package/framework/.claude/agents/onboarding-architect-lead.md +230 -0
  19. package/framework/.claude/agents/plan-auditor.md +546 -0
  20. package/framework/.claude/agents/prd-card-writer.md +372 -0
  21. package/framework/.claude/agents/prd.md +744 -0
  22. package/framework/.claude/agents/qa-sentinel.md +305 -0
  23. package/framework/.claude/agents/remotion-animator-orchestrator.md +218 -0
  24. package/framework/.claude/agents/security-reviewer.md +276 -0
  25. package/framework/.claude/agents/senior-researcher.md +175 -0
  26. package/framework/.claude/agents/seo-analytics-strategist.md +156 -0
  27. package/framework/.claude/agents/skill-improver.md +61 -0
  28. package/framework/.claude/agents/ui-expert.md +191 -0
  29. package/framework/.claude/agents/visual-designer.md +190 -0
  30. package/framework/.claude/agents/website-orchestrator.md +118 -0
  31. package/framework/.claude/agents/wiki-curator.md +145 -0
  32. package/framework/.claude/commands/baldart-push.md +15 -0
  33. package/framework/.claude/commands/check.md +237 -0
  34. package/framework/.claude/commands/codexreview.md +203 -0
  35. package/framework/.claude/commands/design-review.md +11 -0
  36. package/framework/.claude/commands/issue-review.md +34 -0
  37. package/framework/.claude/commands/new.md +331 -0
  38. package/framework/.claude/commands/qa.md +257 -0
  39. package/framework/.claude/hooks/framework-edit-gate.js +208 -0
  40. package/framework/.claude/hooks/lint-before-commit.sh.template +66 -0
  41. package/framework/.claude/settings.local.json.example +32 -0
  42. package/framework/.claude/skills/api-design-principles/SKILL.md +567 -0
  43. package/framework/.claude/skills/api-design-principles/assets/api-design-checklist.md +155 -0
  44. package/framework/.claude/skills/api-design-principles/assets/rest-api-template.py +182 -0
  45. package/framework/.claude/skills/api-design-principles/references/graphql-schema-design.md +583 -0
  46. package/framework/.claude/skills/api-design-principles/references/rest-best-practices.md +408 -0
  47. package/framework/.claude/skills/baldart-push/SKILL.md +222 -0
  48. package/framework/.claude/skills/bug/SKILL.md +200 -0
  49. package/framework/.claude/skills/bug/references/logging-patterns.md +174 -0
  50. package/framework/.claude/skills/capture/SKILL.md +125 -0
  51. package/framework/.claude/skills/capture/references/synthesis-template.md +42 -0
  52. package/framework/.claude/skills/context-primer/SKILL.md +189 -0
  53. package/framework/.claude/skills/copywriting/SKILL.md +273 -0
  54. package/framework/.claude/skills/copywriting/references/copy-frameworks.md +338 -0
  55. package/framework/.claude/skills/copywriting/references/natural-transitions.md +252 -0
  56. package/framework/.claude/skills/doc-writing-for-rag/SKILL.md +119 -0
  57. package/framework/.claude/skills/doc-writing-for-rag/references/before-after-examples.md +291 -0
  58. package/framework/.claude/skills/doc-writing-for-rag/references/compact-templates.md +183 -0
  59. package/framework/.claude/skills/doc-writing-for-rag/references/frontmatter-minimal.md +112 -0
  60. package/framework/.claude/skills/doc-writing-for-rag/references/line-count-targets.md +110 -0
  61. package/framework/.claude/skills/doc-writing-for-rag/references/schemas-and-errors.md +129 -0
  62. package/framework/.claude/skills/find-skills/SKILL.md +133 -0
  63. package/framework/.claude/skills/frontend-design/LICENSE.txt +177 -0
  64. package/framework/.claude/skills/frontend-design/SKILL.md +84 -0
  65. package/framework/.claude/skills/gamification-design/SKILL.md +130 -0
  66. package/framework/.claude/skills/issue-review/SKILL.md +45 -0
  67. package/framework/.claude/skills/kie-ai/SKILL.md +262 -0
  68. package/framework/.claude/skills/kie-ai/references/models-catalog.md +272 -0
  69. package/framework/.claude/skills/kie-ai/scripts/kie_api.sh +209 -0
  70. package/framework/.claude/skills/kie-ai/scripts/remove_greenscreen.py +69 -0
  71. package/framework/.claude/skills/kie-ai/scripts/setup_api_key.sh +77 -0
  72. package/framework/.claude/skills/motion-design/LICENSE +21 -0
  73. package/framework/.claude/skills/motion-design/README.md +82 -0
  74. package/framework/.claude/skills/motion-design/SKILL.md +336 -0
  75. package/framework/.claude/skills/motion-design/director/choreography.md +93 -0
  76. package/framework/.claude/skills/motion-design/director/context-adaptation.md +83 -0
  77. package/framework/.claude/skills/motion-design/director/core-philosophy.md +53 -0
  78. package/framework/.claude/skills/motion-design/director/decision-framework.md +91 -0
  79. package/framework/.claude/skills/motion-design/director/disney-principles.md +102 -0
  80. package/framework/.claude/skills/motion-design/director/emotion-mapping.md +71 -0
  81. package/framework/.claude/skills/motion-design/director/motion-personality.md +89 -0
  82. package/framework/.claude/skills/motion-design/director/narrative-structure.md +62 -0
  83. package/framework/.claude/skills/motion-design/patterns/ambient-continuous.md +81 -0
  84. package/framework/.claude/skills/motion-design/patterns/entrance-exit.md +82 -0
  85. package/framework/.claude/skills/motion-design/patterns/multi-element.md +69 -0
  86. package/framework/.claude/skills/motion-design/patterns/state-feedback.md +96 -0
  87. package/framework/.claude/skills/motion-design/reference/property-selection.md +95 -0
  88. package/framework/.claude/skills/motion-design/reference/quality-checklist.md +67 -0
  89. package/framework/.claude/skills/motion-design/reference/timing-easing-tables.md +106 -0
  90. package/framework/.claude/skills/motion-design/reference/troubleshooting.md +73 -0
  91. package/framework/.claude/skills/new/SKILL.md +1687 -0
  92. package/framework/.claude/skills/playwright-skill/API_REFERENCE.md +652 -0
  93. package/framework/.claude/skills/playwright-skill/SKILL.md +157 -0
  94. package/framework/.claude/skills/playwright-skill/package.json +26 -0
  95. package/framework/.claude/skills/prd/SKILL.md +228 -0
  96. package/framework/.claude/skills/prd/assets/card-template.yml +232 -0
  97. package/framework/.claude/skills/prd/assets/epic-template.yml +190 -0
  98. package/framework/.claude/skills/prd/assets/prd-template.md +230 -0
  99. package/framework/.claude/skills/prd/assets/state-template.md +78 -0
  100. package/framework/.claude/skills/prd/references/api-perf-gate.md +152 -0
  101. package/framework/.claude/skills/prd/references/audit-phase.md +478 -0
  102. package/framework/.claude/skills/prd/references/backlog-phase.md +145 -0
  103. package/framework/.claude/skills/prd/references/discovery-phase.md +359 -0
  104. package/framework/.claude/skills/prd/references/impact-analysis.md +233 -0
  105. package/framework/.claude/skills/prd/references/prd-add-phase.md +214 -0
  106. package/framework/.claude/skills/prd/references/prd-writing-phase.md +145 -0
  107. package/framework/.claude/skills/prd/references/research-phase.md +216 -0
  108. package/framework/.claude/skills/prd/references/ui-design-phase.md +61 -0
  109. package/framework/.claude/skills/prd/references/validation-phase.md +72 -0
  110. package/framework/.claude/skills/prd-add/SKILL.md +222 -0
  111. package/framework/.claude/skills/prd-add/references/impact-analysis.md +233 -0
  112. package/framework/.claude/skills/remotion-best-practices/SKILL.md +48 -0
  113. package/framework/.claude/skills/remotion-best-practices/rules/3d.md +86 -0
  114. package/framework/.claude/skills/remotion-best-practices/rules/animations.md +29 -0
  115. package/framework/.claude/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
  116. package/framework/.claude/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
  117. package/framework/.claude/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +108 -0
  118. package/framework/.claude/skills/remotion-best-practices/rules/assets.md +78 -0
  119. package/framework/.claude/skills/remotion-best-practices/rules/audio.md +169 -0
  120. package/framework/.claude/skills/remotion-best-practices/rules/calculate-metadata.md +104 -0
  121. package/framework/.claude/skills/remotion-best-practices/rules/can-decode.md +75 -0
  122. package/framework/.claude/skills/remotion-best-practices/rules/charts.md +58 -0
  123. package/framework/.claude/skills/remotion-best-practices/rules/compositions.md +141 -0
  124. package/framework/.claude/skills/remotion-best-practices/rules/display-captions.md +184 -0
  125. package/framework/.claude/skills/remotion-best-practices/rules/extract-frames.md +229 -0
  126. package/framework/.claude/skills/remotion-best-practices/rules/fonts.md +152 -0
  127. package/framework/.claude/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
  128. package/framework/.claude/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
  129. package/framework/.claude/skills/remotion-best-practices/rules/get-video-duration.md +58 -0
  130. package/framework/.claude/skills/remotion-best-practices/rules/gifs.md +141 -0
  131. package/framework/.claude/skills/remotion-best-practices/rules/images.md +130 -0
  132. package/framework/.claude/skills/remotion-best-practices/rules/import-srt-captions.md +69 -0
  133. package/framework/.claude/skills/remotion-best-practices/rules/light-leaks.md +73 -0
  134. package/framework/.claude/skills/remotion-best-practices/rules/lottie.md +67 -0
  135. package/framework/.claude/skills/remotion-best-practices/rules/maps.md +401 -0
  136. package/framework/.claude/skills/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
  137. package/framework/.claude/skills/remotion-best-practices/rules/measuring-text.md +143 -0
  138. package/framework/.claude/skills/remotion-best-practices/rules/parameters.md +98 -0
  139. package/framework/.claude/skills/remotion-best-practices/rules/sequencing.md +118 -0
  140. package/framework/.claude/skills/remotion-best-practices/rules/subtitles.md +36 -0
  141. package/framework/.claude/skills/remotion-best-practices/rules/tailwind.md +11 -0
  142. package/framework/.claude/skills/remotion-best-practices/rules/text-animations.md +20 -0
  143. package/framework/.claude/skills/remotion-best-practices/rules/timing.md +179 -0
  144. package/framework/.claude/skills/remotion-best-practices/rules/transcribe-captions.md +70 -0
  145. package/framework/.claude/skills/remotion-best-practices/rules/transitions.md +197 -0
  146. package/framework/.claude/skills/remotion-best-practices/rules/transparent-videos.md +106 -0
  147. package/framework/.claude/skills/remotion-best-practices/rules/trimming.md +52 -0
  148. package/framework/.claude/skills/remotion-best-practices/rules/videos.md +171 -0
  149. package/framework/.claude/skills/seo-audit/SKILL.md +394 -0
  150. package/framework/.claude/skills/seo-audit/references/aeo-geo-patterns.md +279 -0
  151. package/framework/.claude/skills/seo-audit/references/ai-writing-detection.md +190 -0
  152. package/framework/.claude/skills/simplify/SKILL.md +137 -0
  153. package/framework/.claude/skills/skill-creator/LICENSE.txt +202 -0
  154. package/framework/.claude/skills/skill-creator/SKILL.md +356 -0
  155. package/framework/.claude/skills/skill-creator/references/output-patterns.md +82 -0
  156. package/framework/.claude/skills/skill-creator/references/workflows.md +28 -0
  157. package/framework/.claude/skills/skill-creator/scripts/init_skill.py +303 -0
  158. package/framework/.claude/skills/skill-creator/scripts/package_skill.py +110 -0
  159. package/framework/.claude/skills/skill-creator/scripts/quick_validate.py +95 -0
  160. package/framework/.claude/skills/ui-design/SKILL.md +199 -0
  161. package/framework/.claude/skills/ui-design/references/component-discovery.md +54 -0
  162. package/framework/.claude/skills/ui-design/references/evaluation.md +171 -0
  163. package/framework/.claude/skills/ui-design/references/generation.md +109 -0
  164. package/framework/.claude/skills/ui-design/references/inventory.md +59 -0
  165. package/framework/.claude/skills/webapp-testing/LICENSE.txt +202 -0
  166. package/framework/.claude/skills/webapp-testing/SKILL.md +123 -0
  167. package/framework/.claude/skills/webapp-testing/examples/console_logging.py +35 -0
  168. package/framework/.claude/skills/webapp-testing/examples/element_discovery.py +40 -0
  169. package/framework/.claude/skills/webapp-testing/examples/static_html_automation.py +33 -0
  170. package/framework/.claude/skills/webapp-testing/scripts/with_server.py +106 -0
  171. package/framework/.claude/skills/worktree-manager/SKILL.md +680 -0
  172. package/framework/AGENTS.md +240 -0
  173. package/framework/agents/api-contracts.md +137 -0
  174. package/framework/agents/architecture.md +145 -0
  175. package/framework/agents/coding-standards.md +148 -0
  176. package/framework/agents/data-model.md +110 -0
  177. package/framework/agents/deployment-protocol.md +232 -0
  178. package/framework/agents/design-review.md +172 -0
  179. package/framework/agents/env-reference.md +171 -0
  180. package/framework/agents/github-issue-subagent.md +252 -0
  181. package/framework/agents/index.md +261 -0
  182. package/framework/agents/llm-wiki-methodology.md +216 -0
  183. package/framework/agents/maintenance-protocol.md +305 -0
  184. package/framework/agents/observability.md +162 -0
  185. package/framework/agents/performance.md +155 -0
  186. package/framework/agents/project-context.md +145 -0
  187. package/framework/agents/runbook.md +208 -0
  188. package/framework/agents/security.md +168 -0
  189. package/framework/agents/skills-mapping.md +286 -0
  190. package/framework/agents/testing.md +111 -0
  191. package/framework/agents/workflows.md +215 -0
  192. package/framework/docs/PROJECT-CONFIGURATION.md +336 -0
  193. package/framework/docs/references/brand-guidelines.md +170 -0
  194. package/framework/docs/references/ui-guidelines.template.md +182 -0
  195. package/framework/routines/code-review.routine.yml +46 -0
  196. package/framework/routines/doc-review.routine.yml +45 -0
  197. package/framework/routines/ds-drift.routine.yml +52 -0
  198. package/framework/routines/full-sweep.routine.yml +51 -0
  199. package/framework/routines/index.yml +70 -0
  200. package/framework/routines/skill-improve.routine.yml +50 -0
  201. package/framework/routines/wiki-review.routine.yml +45 -0
  202. package/framework/templates/baldart.config.template.yml +113 -0
  203. package/framework/templates/breaking-change-checklist.md +484 -0
  204. package/framework/templates/feature-card.template.yml +125 -0
  205. package/framework/templates/overlays/README.md +44 -0
  206. package/framework/templates/overlays/copywriting.fidelity-example.md +62 -0
  207. package/framework/templates/overlays/ui-design.fidelity-example.md +75 -0
  208. package/framework/templates/skill-project-context.snippet.md +19 -0
  209. package/framework/templates/spec.template.md +208 -0
  210. package/package.json +51 -0
  211. package/src/commands/add.js +229 -0
  212. package/src/commands/configure.js +385 -0
  213. package/src/commands/doctor.js +486 -0
  214. package/src/commands/migrate.js +185 -0
  215. package/src/commands/push.js +0 -0
  216. package/src/commands/routines.js +269 -0
  217. package/src/commands/status.js +130 -0
  218. package/src/commands/update.js +419 -0
  219. package/src/commands/version.js +88 -0
  220. package/src/utils/contamination.js +400 -0
  221. package/src/utils/git.js +181 -0
  222. package/src/utils/hooks.js +152 -0
  223. package/src/utils/routine-adapters/claude-code-cloud.js +78 -0
  224. package/src/utils/routine-adapters/cron.js +138 -0
  225. package/src/utils/routine-adapters/github-actions.js +141 -0
  226. package/src/utils/routine-adapters/index.js +21 -0
  227. package/src/utils/routines.js +166 -0
  228. package/src/utils/state.js +143 -0
  229. package/src/utils/symlinks.js +425 -0
  230. package/src/utils/ui.js +133 -0
@@ -0,0 +1,336 @@
1
+ ---
2
+ name: motion-design
3
+ description: >
4
+ Applies motion design principles to create emotionally-driven, technically sound animations and transitions.
5
+ Provides timing, easing, choreography, and Disney animation principles adapted for UI.
6
+ Use when creating animations, transitions, micro-interactions, loading states, page transitions,
7
+ scroll-triggered effects, or any motion work. Works with CSS, Framer Motion, GSAP, Lottie, Spring,
8
+ or any animation system.
9
+ license: MIT
10
+ metadata:
11
+ author: LottieFiles
12
+ version: "1.0.0"
13
+ ---
14
+
15
+ # Motion Design Skill
16
+
17
+ ## Project Context
18
+
19
+ **Reads from `baldart.config.yml`:** `paths.design_system`, `paths.ui_guidelines`, `stack.animation.canonical`, `identity.design_philosophy`.
20
+ **Gated by features:** `features.has_design_system` (when `true`, project illustration-motion spec is BLOCKING).
21
+ **Overlay:** loads `.baldart/overlays/motion-design.md` if present — project-specific motion vocabulary, brand-mandated easing curves, character-motion library.
22
+ **On missing/empty keys:** ask the user; do not assume defaults. See `framework/agents/project-context.md` § 3.
23
+
24
+ ## Visual Contract
25
+
26
+ When designing motion for generated marketing illustrations, prompts, or short product videos, the project's illustration-motion spec is a BLOCKING prerequisite when present:
27
+
28
+ - `${paths.design_system}/patterns/illustration-motion.md` (when `features.has_design_system: true` and the file exists)
29
+ - `${paths.ui_guidelines}` for motion personality + brand timing language
30
+
31
+ If `stack.animation.canonical` is set, target those libraries (e.g. Framer Motion, Lottie) in any generated spec. If the list is empty, ask the user which animation system the project uses.
32
+
33
+ Generated video prompts MUST use the "Surgical Motion Design" contract:
34
+ define, element by element, what moves, what reacts, and what stays fixed.
35
+ Do not leave characters, smartphones, badges, UI labels, signal lines,
36
+ decorative objects, or backgrounds to implicit model interpretation.
37
+
38
+ ## When to Apply
39
+
40
+ Use this skill when:
41
+ - Creating UI animations (buttons, cards, modals, page transitions)
42
+ - Designing micro-interactions and feedback animations
43
+ - Building loading, success, or error states
44
+ - Animating illustrations or decorative elements
45
+ - Planning scroll-triggered or progress-based animations
46
+ - Establishing brand motion identity
47
+ - Choreographing multi-element sequences
48
+
49
+ **Decision tree:**
50
+ 1. Does it serve a functional purpose (feedback, guidance)? → Timing rules for responsiveness
51
+ 2. Does it express brand personality? → Motion Personality archetypes
52
+ 3. Does it tell a story or guide attention? → Disney principles + choreography
53
+ 4. Is this a complex multi-element scene? → 1/3 Rule + stagger patterns
54
+
55
+ ---
56
+
57
+ ## Quick Reference: 8-Step Checklist
58
+
59
+ Before creating any animation:
60
+
61
+ 1. **Emotional target?** — joy, calm, urgency, elegance
62
+ 2. **Motion Personality?** — Playful, Premium, Corporate, Energetic
63
+ 3. **Primary property?** — position, scale, rotation, opacity
64
+ 4. **Duration?** — see duration table below
65
+ 5. **Easing family?** — entrance=decelerate, exit=accelerate
66
+ 6. **Hero element?** — apply staging principles
67
+ 7. **Secondary + ambient layers?** — add richness
68
+ 8. **1/3 rules?** — motion distance, simultaneous elements
69
+
70
+ ---
71
+
72
+ ## Three Pillars (CRITICAL)
73
+
74
+ Every animation must satisfy three pillars before any technical decisions:
75
+
76
+ | Pillar | Question | Drives |
77
+ |--------|----------|--------|
78
+ | **Emotional Intent** | What should the viewer FEEL? | Easing, timing, amplitude |
79
+ | **Visual Narrative** | What's the micro-story? | Setup → Action → Resolution |
80
+ | **Motion Craft** | How do we make it believable? | Physics, secondary motion, paths |
81
+
82
+ **Three motion layers** (flat animation = missing layers):
83
+ - **Primary**: Main action the viewer follows
84
+ - **Secondary**: Supporting richness (shadows, icons shifting)
85
+ - **Ambient**: Background life (gradients, subtle pulses)
86
+
87
+ > Deep dive: [director/core-philosophy.md](director/core-philosophy.md)
88
+
89
+ ---
90
+
91
+ ## Motion Personality
92
+
93
+ Select ONE archetype per project. Apply consistently.
94
+
95
+ | Archetype | Duration | Easing | Overshoot | Keywords |
96
+ |-----------|----------|--------|-----------|----------|
97
+ | **Playful** | 150-300ms | ease-out-back | 10-20% | fun, whimsical, bouncy, cute |
98
+ | **Premium** | 350-600ms | cubic-bezier(0.4,0,0.2,1) | 0% | elegant, minimal, luxury, sophisticated |
99
+ | **Corporate** | 200-400ms | cubic-bezier(0.2,0,0,1) | 0-3% | clean, professional, business, dashboard |
100
+ | **Energetic** | 100-250ms | ease-out-expo | 15-30% | dynamic, energetic, bold, exciting |
101
+
102
+ **Default**: Corporate for UI, Playful for illustrations.
103
+
104
+ **Brand Motion Identity** — define three constants:
105
+ 1. **Signature easing**: One curve for 80% of animations
106
+ 2. **Duration palette**: 3 durations (quick / standard / slow)
107
+ 3. **Entrance pattern**: One consistent entry style
108
+
109
+ > Deep dive: [director/motion-personality.md](director/motion-personality.md)
110
+
111
+ ---
112
+
113
+ ## Property Selection
114
+
115
+ | Effect Goal | Primary Property | Secondary Properties |
116
+ |-------------|------------------|---------------------|
117
+ | Entrance/Exit | position | opacity, scale |
118
+ | Emphasis/Attention | scale | rotation (subtle), opacity pulse |
119
+ | State Change | opacity, color | scale (press feedback) |
120
+ | Direction/Flow | position | rotation (follow path) |
121
+ | Depth/3D Feel | scale + shadow | position (parallax) |
122
+ | Loading/Progress | rotation (spinner) | scale, opacity pulse |
123
+ | Success | scale (pop) | color, rotation (checkmark draw) |
124
+ | Error/Alert | position (shake) | color, rotation (wobble) |
125
+
126
+ **Simplicity threshold**: Use the minimum properties needed. One = direct. Two = polished. Three+ = potentially overwhelming.
127
+
128
+ > Deep dive: [reference/property-selection.md](reference/property-selection.md)
129
+
130
+ ---
131
+
132
+ ## Duration Table
133
+
134
+ | Element Type | Duration | Rationale |
135
+ |-------------|----------|-----------|
136
+ | Tooltip / micro-feedback | 80-120ms | Must feel instant |
137
+ | Button press / toggle | 120-180ms | Responsive feedback |
138
+ | Icon transition | 150-250ms | Clear state change |
139
+ | Card enter / exit | 200-350ms | Spatial awareness |
140
+ | Modal / dialog | 300-400ms | Focus shift |
141
+ | Page transition | 400-600ms | Context switch |
142
+ | Dramatic reveal | 600-1200ms | Theatrical build |
143
+
144
+ **Distance scales duration**: 100px = base. 200px = 1.3x. 400px = 1.6x.
145
+
146
+ **Enter > Exit**: Entrances 30-50% longer than exits. Users care about what appears.
147
+
148
+ **Interactive feedback**:
149
+ - Hover: <100ms
150
+ - Press: <150ms
151
+ - Release/settle: 200-300ms
152
+ - Error shake: 300-400ms (2-3 oscillations)
153
+
154
+ > Deep dive: [reference/timing-easing-tables.md](reference/timing-easing-tables.md)
155
+
156
+ ---
157
+
158
+ ## Easing Selection
159
+
160
+ **Directional rules**:
161
+ - **Entrance** → decelerate (fast start, gentle landing): ease-out family
162
+ - **Exit** → accelerate (gentle start, fast departure): ease-in family
163
+ - **On-screen** → smooth both ends: ease-in-out family
164
+ - **Looping ambient** → seamless: sine-based ease-in-out
165
+
166
+ **Industry standards**:
167
+
168
+ | Standard | Cubic Bezier | Use For |
169
+ |----------|-------------|---------|
170
+ | Material Design 3 | (0.2, 0, 0, 1) | Default on-screen |
171
+ | MD3 Emphasized | (0.05, 0.7, 0.1, 1) | Entrances, attention |
172
+ | MD3 Accelerate | (0.3, 0, 1, 1) | Exits, dismissals |
173
+ | Apple HIG | (0.25, 0.1, 0.25, 1) | Standard iOS |
174
+ | Snappy UI | (0.2, 0, 0, 1) | Fast, decisive |
175
+ | Gentle float | (0.4, 0, 0.2, 1) | Ambient, background |
176
+ | Bounce settle | (0.175, 0.885, 0.32, 1.275) | Overshoot, playful |
177
+
178
+ **Material-based easing**:
179
+
180
+ | Material | Duration Scale | Overshoot |
181
+ |----------|---------------|-----------|
182
+ | Rigid (metal, stone) | 1.2x | 0% |
183
+ | Elastic (rubber, gel) | 0.8x | 15-25% |
184
+ | Fluid (water, paint) | 1.5x | 5% |
185
+ | Paper (cards, sheets) | 1.0x | 3-5% |
186
+ | Gas (smoke, fog) | 2.0x | 0% |
187
+ | Glass (brittle) | 0.9x | 0% |
188
+
189
+ > Deep dive: [reference/timing-easing-tables.md](reference/timing-easing-tables.md)
190
+
191
+ ---
192
+
193
+ ## Common Patterns
194
+
195
+ ### Button Press (Playful)
196
+ 1. **Anticipation**: Scale to 0.97 (50ms, ease-out)
197
+ 2. **Squash**: Scale to [1.04, 0.96] (100ms, ease-in)
198
+ 3. **Follow through**: Overshoots to 1.02, settles to 1.0 (spring, 200ms)
199
+ 4. **Secondary**: Shadow shrinks during press, icon shifts down 2px
200
+ 5. **Total**: ~150ms press + 200ms settle
201
+
202
+ ### Card Entrance (Premium)
203
+ 1. **Start**: 20px below target, opacity 0
204
+ 2. **Path**: Slight curve (10px X offset at midpoint)
205
+ 3. **Easing**: ease-out-cubic deceleration
206
+ 4. **Follow through**: Shadow arrives 50ms after card
207
+ 5. **Secondary**: Content fades in 100ms after card lands
208
+ 6. **Staging**: Other cards dim to 80%
209
+
210
+ ### Success State (Playful)
211
+ 1. **Primary**: Scale pop with ease-out-back
212
+ 2. **Secondary**: Checkmark draws in
213
+ 3. **Ambient**: Subtle particle burst
214
+ 4. **Color**: Green fill
215
+ 5. **Total**: 300-400ms
216
+
217
+ ### Error Shake (Corporate)
218
+ 1. **Primary**: Position oscillates 2-3 times, ±10-15px horizontal
219
+ 2. **Easing**: ease-in-out for sharp stops
220
+ 3. **Color**: Red tint
221
+ 4. **Total**: 300-400ms
222
+ 5. **No overshoot**: Errors feel firm
223
+
224
+ > More patterns: [patterns/entrance-exit.md](patterns/entrance-exit.md) | [patterns/state-feedback.md](patterns/state-feedback.md)
225
+
226
+ ---
227
+
228
+ ## Choreography Essentials
229
+
230
+ **Coordinated entry**:
231
+ - Lead with the hero — primary element enters first or most prominently
232
+ - Spatial consistency — all elements enter from same direction
233
+ - Counter-motion — hero moves right → ambient moves left at 20-30% speed
234
+
235
+ **1/3 Rule (distance)**: No motion travels more than 1/3 of screen without a keyframe change.
236
+
237
+ **1/3 Rule (elements)**: With 3+ elements, no more than 1/3 in active motion simultaneously.
238
+
239
+ **Stagger budgets**:
240
+
241
+ | Pattern | Delay | Total Budget | Use Case |
242
+ |---------|-------|-------------|----------|
243
+ | Micro cascade | 20-40ms | <200ms | List items, grid cells |
244
+ | Standard | 50-100ms | <400ms | Cards, panels, nav |
245
+ | Dramatic | 100-200ms | <600ms | Hero sections |
246
+ | Wave | 30-60ms | <500ms | Data visualizations |
247
+
248
+ **Critical**: Total stagger must stay under 500ms.
249
+
250
+ > Deep dive: [director/choreography.md](director/choreography.md)
251
+
252
+ ---
253
+
254
+ ## Emotion-to-Motion Map
255
+
256
+ | Emotion | Character | Path | Easing | Duration |
257
+ |---------|-----------|------|--------|----------|
258
+ | Joy | Bouncy, arcs | Curved, upward | ease-out-back | 200-400ms |
259
+ | Calm | Smooth, flowing | Gentle curves | sine ease-in-out | 500-1000ms |
260
+ | Urgency | Sharp, fast | Straight lines | ease-out | 100-200ms |
261
+ | Sadness | Slow, downward | Drooping curves | cubic ease-in-out | 600-1200ms |
262
+ | Surprise | Sudden, expanding | Radial outward | ease-out-expo | 150-300ms |
263
+ | Elegance | Slow, controlled | Long arcs | (0.4,0,0.2,1) | 400-700ms |
264
+ | Playfulness | Bouncy, irregular | Arcs, squiggly | ease-out-back | 200-350ms |
265
+
266
+ **Path as language**: Angular = tense. Curved = friendly. Spiral = whimsical. Diagonal = purposeful. Vertical = growth/weight. Horizontal = progress.
267
+
268
+ > Deep dive: [director/emotion-mapping.md](director/emotion-mapping.md)
269
+
270
+ ---
271
+
272
+ ## Weight Classification
273
+
274
+ | Weight | Examples | Duration | Overshoot | Easing |
275
+ |--------|----------|----------|-----------|--------|
276
+ | Heavy | Modals, overlays | 300-500ms | 0% | Gentle, high damping |
277
+ | Medium | Cards, panels | 200-350ms | 3-5% | Moderate |
278
+ | Light | Tooltips, badges, icons | 80-200ms | 5-15% | Responsive |
279
+
280
+ ---
281
+
282
+ ## Quality Rules
283
+
284
+ ### CRITICAL — never break
285
+ 1. **Never linear for spatial movement** — always use easing curves (linear only for spinners, progress bars)
286
+ 2. **Never opacity-only** for important state changes — combine with position or scale
287
+ 3. **Never exceed 1/3 screen** without intermediate keyframe
288
+ 4. **Always three motion layers** — primary + secondary + ambient
289
+
290
+ ### HIGH — strongly follow
291
+ 1. Match duration to element type (see tables)
292
+ 2. Use directional easing (ease-out entrance, ease-in exit)
293
+ 3. Apply Disney principles (especially anticipation, follow-through)
294
+ 4. Maintain consistent personality across scene
295
+
296
+ > Full checklist: [reference/quality-checklist.md](reference/quality-checklist.md)
297
+
298
+ ---
299
+
300
+ ## Troubleshooting Quick Reference
301
+
302
+ | Problem | Likely Cause | Fix |
303
+ |---------|-------------|-----|
304
+ | Looks robotic | Linear easing or no arcs | Add easing curves + arc paths |
305
+ | Feels too slow | Duration too long for element type | Check duration table, use ease-out |
306
+ | Feels cheap/flat | Missing secondary + ambient | Add shadow motion + background life |
307
+ | Too distracting | Too many elements moving | Apply 1/3 rule, reduce amplitude |
308
+ | No personality | Generic easing everywhere | Apply personality archetype consistently |
309
+
310
+ > Deep dive: [reference/troubleshooting.md](reference/troubleshooting.md)
311
+
312
+ ---
313
+
314
+ ## File Reference
315
+
316
+ **Philosophy** (director/):
317
+ - [core-philosophy.md](director/core-philosophy.md) — Three Pillars deep dive
318
+ - [decision-framework.md](director/decision-framework.md) — Full decision pipeline
319
+ - [disney-principles.md](director/disney-principles.md) — 12 principles, UI-adapted
320
+ - [motion-personality.md](director/motion-personality.md) — 4 archetypes + brand identity
321
+ - [emotion-mapping.md](director/emotion-mapping.md) — Emotion → motion + color psychology
322
+ - [choreography.md](director/choreography.md) — Multi-element coordination
323
+ - [narrative-structure.md](director/narrative-structure.md) — Micro-story framework
324
+ - [context-adaptation.md](director/context-adaptation.md) — Platform, a11y, performance
325
+
326
+ **Reference** (reference/):
327
+ - [timing-easing-tables.md](reference/timing-easing-tables.md) — Duration + easing lookups
328
+ - [property-selection.md](reference/property-selection.md) — Property communication guide
329
+ - [troubleshooting.md](reference/troubleshooting.md) — Animation smells + fixes
330
+ - [quality-checklist.md](reference/quality-checklist.md) — Evaluation criteria
331
+
332
+ **Patterns** (patterns/):
333
+ - [entrance-exit.md](patterns/entrance-exit.md) — Entrance/exit recipes
334
+ - [state-feedback.md](patterns/state-feedback.md) — Success, error, loading, hover
335
+ - [ambient-continuous.md](patterns/ambient-continuous.md) — Looping, breathing, parallax
336
+ - [multi-element.md](patterns/multi-element.md) — Stagger + choreography recipes
@@ -0,0 +1,93 @@
1
+ # Choreography
2
+
3
+ ## Coordinated Entry Rules
4
+
5
+ ### 1. Lead with the Hero
6
+ - Hero gets largest displacement and most attention-grabbing easing
7
+ - Supporting elements are subtler in every dimension
8
+
9
+ ### 2. Spatial Origin Consistency
10
+ All elements enter from same direction or shared origin. Mixed directions = chaos.
11
+
12
+ ### 3. Counter-Motion
13
+
14
+ | Hero Motion | Counter-Motion | Speed Ratio |
15
+ |-------------|---------------|-------------|
16
+ | Enters left | Background shifts right | 20-30% |
17
+ | Scales up | Shadow scales down | 10-20% |
18
+ | Rotates CW | Ambient drifts CCW | 15-25% |
19
+ | Lifts (Y up) | Shadow spreads + softens | 20-30% |
20
+
21
+ ## Sequence Structure
22
+
23
+ | Phase | Duration Share | What Happens |
24
+ |-------|--------------|-------------|
25
+ | Setup | 20-30% | Elements enter, scene establishes |
26
+ | Action | 30-40% | Primary motion, hero moment |
27
+ | Resolution | 30-40% | Settle, secondary reactions, breathing |
28
+
29
+ Leave 100-200ms stillness after resolution before new motion.
30
+
31
+ ## The 1/3 Rules
32
+
33
+ **Distance**: No motion travels >1/3 screen without intermediate keyframe. Break with direction changes, speed variations, or arc adjustments.
34
+
35
+ **Elements**: With 3+ animated elements, max 1/3 active simultaneously. Stagger so element 1 settles as element 3 starts.
36
+
37
+ ## Stagger Patterns
38
+
39
+ | Pattern | Description | Best For |
40
+ |---------|------------|----------|
41
+ | Sequential | Reading order | Lists, grids |
42
+ | Center-out | Radiating from center | Hero content, ripples |
43
+ | Random | Varied timing | Organic, particle-like |
44
+ | Wave | Sine-based | Data bars, continuous |
45
+ | Reverse | Bottom-to-top | Exits, backward nav |
46
+
47
+ - All staggered elements use same easing family
48
+ - Vary only start time, not curve
49
+ - Optional: last element gets slight overshoot (punctuation)
50
+
51
+ ## Shared Motion Events
52
+
53
+ When multiple elements react to one trigger:
54
+ - All start within 50ms of each other
55
+ - Can arrive at different times (staggered landing)
56
+ - Same easing family; motion originates from trigger point
57
+
58
+ ## Attention Direction
59
+
60
+ | Technique | Implementation |
61
+ |-----------|---------------|
62
+ | Leading motion | Animate target before context |
63
+ | Following motion | Settle on focal point |
64
+ | Ambient motion | Subtle continuous in periphery |
65
+ | Pointing motion | Directional toward CTA |
66
+
67
+ ### Depth Through Speed
68
+
69
+ | Layer | Displacement | Speed |
70
+ |-------|-------------|-------|
71
+ | Foreground | 1.0x | Fastest |
72
+ | Midground | 0.5x | Medium |
73
+ | Background | 0.2x | Slowest |
74
+
75
+ ## Common Recipes
76
+
77
+ ### Dashboard Load
78
+ 1. Skeletons fade in (100ms)
79
+ 2. Hero metric (250ms, ease-out, 100ms delay)
80
+ 3. Supporting cards stagger (50ms between, 200ms each)
81
+ 4. Chart data draws in (300ms, starts with cards)
82
+ 5. Ambient pulse on primary metric
83
+
84
+ ### Modal Open
85
+ 1. Background dims (200ms)
86
+ 2. Modal scales 95%→100% + fades (300ms, 50ms delay)
87
+ 3. Content fades in (200ms, 100ms after modal)
88
+ 4. Close button last (150ms)
89
+
90
+ ### List Update (item added)
91
+ 1. Existing items shift down (200ms, ease-in-out)
92
+ 2. New item fades+slides from top (250ms, ease-out, 50ms delay)
93
+ 3. Subtle scale overshoot on land (3-5%)
@@ -0,0 +1,83 @@
1
+ # Context Adaptation
2
+
3
+ ## Platform Scaling
4
+
5
+ | Platform | Duration Modifier | Complexity | Physics |
6
+ |----------|------------------|------------|---------|
7
+ | Desktop | 1.0x (baseline) | Full | All types |
8
+ | Tablet | 0.9x | Standard | Most types |
9
+ | Mobile | 0.8x | Reduced (1-2 properties) | Snappy only |
10
+ | Watch | 0.6x | Minimal (1 property) | None |
11
+ | TV/Kiosk | 1.3x | Full | All types |
12
+
13
+ **Mobile rules**: prefer opacity + transform; touch feedback <100ms; reduce stagger budgets by 30%; avoid parallax
14
+ **Desktop opportunities**: hover states, cursor tracking, multi-column stagger, spatial choreography
15
+
16
+ ## Accessibility
17
+
18
+ ### prefers-reduced-motion
19
+
20
+ | Original Motion | Reduced Alternative |
21
+ |----------------|-------------------|
22
+ | Slide entrance | Opacity fade only |
23
+ | Bounce/spring | Instant or simple ease-out |
24
+ | Parallax | Static positioning |
25
+ | Auto-playing | Paused, user-initiated |
26
+ | Complex choreography | Single fade |
27
+ | Continuous ambient | Static or subtle opacity pulse |
28
+
29
+ Reduced motion means: remove spatial movement, keep opacity, remove spring easing, reduce duration 50%+, never auto-play loops.
30
+
31
+ ### Vestibular Triggers (avoid or provide alternatives)
32
+ - Large-scale zoom, full-screen position transitions
33
+ - Spinning elements >100px, parallax >2 layers, rapid direction changes
34
+
35
+ ### Cognitive Accessibility
36
+ - Same interaction = same animation every time
37
+ - Pause controls for animations >5 seconds
38
+ - Don't convey critical info through motion alone
39
+
40
+ ## Performance Budgets
41
+
42
+ | Tier | Properties | Max Elements |
43
+ |------|-----------|-------------|
44
+ | Optimal | transform, opacity | Unlimited (GPU) |
45
+ | Good | + color, clip-path | 10-15 |
46
+ | Acceptable | + width, height, margin | 5-8 |
47
+ | Avoid | box-shadow, border-radius, filter | 1-3 |
48
+
49
+ - Target 60fps (16.67ms/frame); animation logic <10ms/frame
50
+ - will-change sparingly; keep animated elements <20 per viewport
51
+ - Stagger reduces peak load vs simultaneous
52
+ - Fallback: 30fps acceptable for ambient
53
+
54
+ ## Content Type Adaptation
55
+
56
+ | Content Type | Personality | Duration | Motion Density |
57
+ |-------------|-------------|----------|---------------|
58
+ | Financial | Corporate/Premium | 250-500ms | Low |
59
+ | Social media | Playful | 150-300ms | Medium |
60
+ | Enterprise SaaS | Corporate | 200-400ms | Low |
61
+ | Gaming | Energetic | 100-250ms | High |
62
+ | Healthcare | Corporate/Calm | 300-600ms | Very low |
63
+ | E-commerce | Varies | 200-400ms | Medium |
64
+ | Editorial | Premium | 350-600ms | Low |
65
+ | Children's apps | Playful | 150-300ms | High |
66
+
67
+ ## Responsive Motion
68
+
69
+ | Container Width | Max Displacement | Duration |
70
+ |----------------|-----------------|----------|
71
+ | <400px | 20% of width | 0.8x |
72
+ | 400-800px | 25% of width | 1.0x |
73
+ | 800-1200px | 20% of width | 1.0x |
74
+ | >1200px | 15% of width | 1.1x |
75
+
76
+ - Small viewport: sequential, one element at a time
77
+ - Medium: standard stagger, 2-3 columns
78
+ - Large: full choreography, center-out stagger, parallax
79
+
80
+ ## Dark Mode
81
+ - Reduce motion intensity 10-20% (bright on dark = more impact)
82
+ - Subtler ambient motion; careful with opacity values
83
+ - Avoid pure white flashes
@@ -0,0 +1,53 @@
1
+ # Core Philosophy
2
+
3
+ ## Three Pillars
4
+
5
+ ### Pillar 1: Emotional Intent
6
+ Define target emotion before choosing any property.
7
+
8
+ | Emotion | Character | Timing | Easing |
9
+ |---------|----------|--------|--------|
10
+ | Trust | Smooth, predictable | 300-400ms | Gentle curves |
11
+ | Delight | Bouncy, surprising | 200-300ms | Overshoot |
12
+ | Urgency | Sharp, direct | 100-200ms | Snappy ease-out |
13
+ | Calm | Slow, flowing | 500-1000ms | Sine curves |
14
+ | Surprise | Sudden, explosive | 150-300ms | Exponential |
15
+ | Confidence | Direct, decisive | 200-400ms | Strong ease-out |
16
+
17
+ ### Pillar 2: Visual Narrative
18
+
19
+ | Phase | Duration Share | Purpose |
20
+ |-------|--------------|---------|
21
+ | Setup | 20-30% | Establish context, prepare viewer |
22
+ | Action | 30-40% | Primary motion, hero moment |
23
+ | Resolution | 30-40% | Settle, breathe, confirm |
24
+
25
+ Even a 200ms tooltip fade has implicit setup→action→resolution.
26
+
27
+ ### Pillar 3: Motion Craft
28
+ - Easing curves match emotional intent
29
+ - Duration proportional to element size and distance
30
+ - Arcs for organic, straight for mechanical
31
+ - Secondary motion (shadows, related elements)
32
+ - Nothing starts and stops all at once
33
+
34
+ ## Three Motion Layers
35
+
36
+ | Layer | Role | Amplitude |
37
+ |-------|------|-----------|
38
+ | Primary | Main action viewer follows | 100% |
39
+ | Secondary | Supporting richness | 30-50% |
40
+ | Ambient | Background life | 10-20% |
41
+
42
+ - Secondary offset 50-100ms from primary, different easing
43
+ - Ambient is continuous/slow, never demands attention
44
+ - Primary-only animation feels flat; always add secondary + ambient
45
+
46
+ ## The 1/3 Screen Rule
47
+ No motion travels >1/3 screen without intermediate keyframe. Break with direction changes, speed shifts, or arc adjustments.
48
+
49
+ ## The Attention Budget
50
+ - One hero motion per scene moment
51
+ - Max 2-3 elements in active motion simultaneously
52
+ - Ambient doesn't count against budget
53
+ - Stagger rather than synchronize
@@ -0,0 +1,91 @@
1
+ # Decision Framework
2
+
3
+ ## The First Questions
4
+
5
+ ### 1. Purpose?
6
+
7
+ | Purpose | Approach | Priority |
8
+ |---------|----------|----------|
9
+ | Draw attention | Scale, color, pulse | Responsiveness |
10
+ | Guide sequence | Stagger, directional flow | Clarity |
11
+ | Provide feedback | Immediate response | Speed |
12
+ | Create atmosphere | Subtle, continuous | Subtlety |
13
+ | Explain relationship | Position, connection | Legibility |
14
+ | Celebrate/reward | Overshoot, particles | Delight |
15
+
16
+ ### 2. Audience?
17
+ - Stressed → calm motion; Browsing → richer motion
18
+ - Task-focused → fast, minimal; Exploring → can be dramatic
19
+ - Seen 100x/day → fast, subtle; Seen once → can be dramatic
20
+
21
+ ### 3. Context?
22
+ - Busy layout → simpler motion; Empty → can be dramatic
23
+ - Other animations active → coordinate or stagger
24
+ - Small container → small motion
25
+
26
+ ## 4-Level Decision Hierarchy
27
+
28
+ ### Level 1: Motion Category
29
+
30
+ | Category | When |
31
+ |----------|------|
32
+ | Revealing | Content appearing |
33
+ | Concealing | Content disappearing |
34
+ | Transitioning | Between states/views |
35
+ | Emphasizing | Drawing attention |
36
+ | Responding | Reacting to interaction |
37
+ | Ambient | Background atmosphere |
38
+
39
+ ### Level 2: Motion Personality
40
+ Match to brand. See [motion-personality.md](motion-personality.md).
41
+
42
+ ### Level 3: Motion Direction
43
+
44
+ | Direction | Communicates |
45
+ |-----------|-------------|
46
+ | Upward | Growth, aspiration |
47
+ | Downward | Settling, completion |
48
+ | Leftward | Regression, departure |
49
+ | Rightward | Progression, arrival |
50
+ | Outward (scale up) | Importance, emergence |
51
+ | Inward (scale down) | Dismissal, removal |
52
+ | Center-seeking | Focus, convergence |
53
+ | Center-fleeing | Distribution, release |
54
+
55
+ ### Level 4: Implementation Properties
56
+ Choose animated properties. See [property-selection.md](../reference/property-selection.md).
57
+
58
+ ## Decision Quick-Path
59
+
60
+ ```
61
+ 1. PURPOSE → What does this motion DO?
62
+ ├── Feedback → short, ease-out, minimal
63
+ ├── Entrance → ease-out, personality-matched
64
+ ├── Exit → ease-in, 70% of entrance
65
+ ├── Emphasis → scale or color pulse
66
+ └── Ambient → slow, continuous, sine
67
+
68
+ 2. PERSONALITY → Match keywords
69
+ ├── Fun/bouncy → Playful
70
+ ├── Elegant/luxury → Premium
71
+ ├── Clean/professional → Corporate
72
+ └── Bold/dynamic → Energetic
73
+
74
+ 3. PROPERTIES → Minimum needed (two = sweet spot)
75
+
76
+ 4. TIMING → Check duration table, adjust for distance/weight
77
+
78
+ 5. EASING → Entering=ease-out, Leaving=ease-in, On-screen=ease-in-out, Looping=sine
79
+ ```
80
+
81
+ ## Evaluation Before Delivery
82
+
83
+ | Check | Question |
84
+ |-------|----------|
85
+ | Purpose | Clear function? |
86
+ | Personality | Matches brand/context? |
87
+ | Repetition | Fine on 100th viewing? |
88
+ | Attention | Respects viewer's focus? |
89
+ | Hierarchy | Reinforces importance? |
90
+ | Layers | Primary + secondary + ambient? |
91
+ | Timing | Duration appropriate? |