Cami — Interaction
Required reading
Before proceeding, load ../cami-design/references/review-protocol.md for the shared Context Gathering Protocol, Design System Protocol, severity scale, and Review Output Format. Then load ../cami-design/references/motion.md — the Animation Decision Framework lives there and is the canonical source for the rules below.
Tune the parts of an interface that respond to the user: hover, focus, press, enter/exit, feedback. Every motion needs a reason.
When to Use This Mode
- Animations feel sluggish, janky, or excessive
- Buttons don't feel responsive to press
- Hover states missing or heavy-handed
- Enter/exit transitions are jarring or plays on page load
- User says "make it feel better"
- Adding delight or personality to a flow
Preparation
- Check
package.json for motion libraries (motion, framer-motion, React Spring, etc.).
- Identify existing easing and duration conventions in the codebase.
- Read
../cami-design/references/motion.md (Animation Decision Framework, performance, scroll-linked motion) and ../cami-design/references/interaction.md (press, hover, focus, tooltips, mobile/touch).
The Animation Decision Framework — "should this animate? what's the purpose? what easing?" — is documented once, in references/motion.md. Apply it as a gate before flagging any motion-related finding.
Review Dimensions
Press & Feedback
- Buttons use
scale(0.96) on :active — never smaller than 0.95
- Focus states visible and accessible
- Haptic-feeling transitions (short, specific)
- Stacked clickable rows (sidebar, dropdown, settings sub-nav) use the cursor-continuity pattern — see
../cami-design/references/interaction.md → Pointer Continuity in Stacked Rows
Enter / Exit
- Split and stagger enter animations (see
motion.md → Enter Animations for the delay value)
- Exits are subtler than enters (small
translateY, not full-height)
- Exits are faster than enters — use ~75% of the enter duration
initial={false} on AnimatePresence to skip page-load animations
Specificity
- Never
transition: all — specify properties (transition-property: scale, opacity)
will-change only on transform, opacity, filter — never will-change: all
- Only add
will-change when you notice first-frame stutter
Icons
- Animate with
opacity, scale, blur — never toggle visibility
- Standard values: scale
0.25 → 1, opacity 0 → 1, blur 4px → 0
Interruptibility
- Use CSS transitions for interactive state changes (interruptible mid-animation)
- Reserve keyframes for staged sequences that run once
Missed Opportunities (additive)
The dimensions above are corrective. Also flag places that don't animate but should:
- A state change that teleports (content swap, layout jump) where a brief transition would prevent the jar
- Spatially-connected UI (a panel opening from a trigger) with no motion explaining where it came from
- Rare, high-emotion moments (first-run, success) using none of the delight budget they're allowed
Report these in their own output section, a handful at most, grounded in seams you actually observed. Not a wishlist.
Accessibility
Reduced-motion fallback is mandatory — see ../cami-design/references/accessibility.md → Motion for the canonical snippet, the rationale (vestibular disorders, what to keep vs. remove), and the application rule.
Output
Findings as tables with columns # | Severity | Before | After | Why, grouped by dimension. Severity is 🔴 (Important) or 🟡 (Nit); see ../cami-design/references/review-protocol.md → Severity scale for calibration. Skip dimensions with no issues.
Close with the walkthrough offer and (after fixes) the Verify pass. See ../cami-design/references/review-protocol.md → Closing / Walkthrough mode / Verify pass.
References
../cami-design/references/motion.md — Animation Decision Framework, performance, scroll-linked motion, advanced techniques
../cami-design/references/interaction.md — press feedback, hover, focus, tooltips, drag & drop, mobile/touch
../cami-design/references/accessibility.md — reduced-motion fallback, vestibular safety
../cami-design/references/anti-patterns.md — sweep last for motion-related "AI slop" tells (bounce easing, glow effects, gratuitous reveals)
../cami-design/libraries/easing-curves.json — canonical easing values consumed by motion.md
1---2name: cami-design-interaction3description: Hover, press, animations, motion. Use when interactions feel sluggish, flat, robotic, or lifeless.4---56# Cami — Interaction78## Required reading910Before proceeding, load `../cami-design/references/review-protocol.md` for the shared **Context Gathering Protocol**, **Design System Protocol**, severity scale, and **Review Output Format**. Then load `../cami-design/references/motion.md` — the **Animation Decision Framework** lives there and is the canonical source for the rules below.1112---1314Tune the parts of an interface that respond to the user: hover, focus, press, enter/exit, feedback. Every motion needs a reason.1516## When to Use This Mode1718- Animations feel sluggish, janky, or excessive19- Buttons don't feel responsive to press20- Hover states missing or heavy-handed21- Enter/exit transitions are jarring or plays on page load22- User says "make it feel better"23- Adding delight or personality to a flow2425## Preparation26271. Check `package.json` for motion libraries (`motion`, `framer-motion`, React Spring, etc.).282. Identify existing easing and duration conventions in the codebase.293. Read `../cami-design/references/motion.md` (Animation Decision Framework, performance, scroll-linked motion) and `../cami-design/references/interaction.md` (press, hover, focus, tooltips, mobile/touch).3031The Animation Decision Framework — "should this animate? what's the purpose? what easing?" — is documented once, in `references/motion.md`. Apply it as a gate before flagging any motion-related finding.3233## Review Dimensions3435### Press & Feedback36- Buttons use `scale(0.96)` on `:active` — never smaller than 0.9537- Focus states visible and accessible38- Haptic-feeling transitions (short, specific)39- Stacked clickable rows (sidebar, dropdown, settings sub-nav) use the cursor-continuity pattern — see `../cami-design/references/interaction.md` → *Pointer Continuity in Stacked Rows*4041### Enter / Exit42- Split and stagger enter animations (see `motion.md` → Enter Animations for the delay value)43- Exits are subtler than enters (small `translateY`, not full-height)44- Exits are faster than enters — use ~75% of the enter duration45- `initial={false}` on `AnimatePresence` to skip page-load animations4647### Specificity48- Never `transition: all` — specify properties (`transition-property: scale, opacity`)49- `will-change` only on `transform`, `opacity`, `filter` — never `will-change: all`50- Only add `will-change` when you notice first-frame stutter5152### Icons53- Animate with `opacity`, `scale`, `blur` — never toggle visibility54- Standard values: scale `0.25` → `1`, opacity `0` → `1`, blur `4px` → `0`5556### Interruptibility57- Use CSS transitions for interactive state changes (interruptible mid-animation)58- Reserve keyframes for staged sequences that run once5960### Missed Opportunities (additive)61The dimensions above are corrective. Also flag places that *don't* animate but should:62- A state change that teleports (content swap, layout jump) where a brief transition would prevent the jar63- Spatially-connected UI (a panel opening from a trigger) with no motion explaining where it came from64- Rare, high-emotion moments (first-run, success) using none of the delight budget they're allowed6566Report these in their own output section, a handful at most, grounded in seams you actually observed. Not a wishlist.6768## Accessibility6970Reduced-motion fallback is mandatory — see `../cami-design/references/accessibility.md` → *Motion* for the canonical snippet, the rationale (vestibular disorders, what to keep vs. remove), and the application rule.7172## Output7374Findings as tables with columns `# | Severity | Before | After | Why`, grouped by dimension. Severity is 🔴 (Important) or 🟡 (Nit); see `../cami-design/references/review-protocol.md` → Severity scale for calibration. Skip dimensions with no issues.7576Close with the walkthrough offer and (after fixes) the Verify pass. See `../cami-design/references/review-protocol.md` → Closing / Walkthrough mode / Verify pass.7778## References7980- `../cami-design/references/motion.md` — Animation Decision Framework, performance, scroll-linked motion, advanced techniques81- `../cami-design/references/interaction.md` — press feedback, hover, focus, tooltips, drag & drop, mobile/touch82- `../cami-design/references/accessibility.md` — reduced-motion fallback, vestibular safety83- `../cami-design/references/anti-patterns.md` — sweep last for motion-related "AI slop" tells (bounce easing, glow effects, gratuitous reveals)84- `../cami-design/libraries/easing-curves.json` — canonical easing values consumed by `motion.md`