Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
154 commits
Select commit Hold shift + click to select a range
5404b21
Merge pull request #1 from DerpcatMusic/feature/rapyd-hardening-dashb…
DerpcatMusic Mar 7, 2026
8f58652
Merge branch 'feat/ui-hardening-integration'
Mar 8, 2026
f7eea46
Harden Google Calendar sync and add studio support
Mar 9, 2026
44e23d9
Fix Convex calendar runtime split
Mar 10, 2026
b3af624
Fix Convex calendar runtime split
Mar 10, 2026
c15250f
Merge latest master and finalize UI work
Mar 10, 2026
0f321ad
Harden Android release packaging retry
Mar 10, 2026
df6095d
Restore animated calendar shell and tab bar background
Mar 10, 2026
0b64913
Add marketplace payment order and payout eligibility workflow
Mar 11, 2026
99a6583
Add marketplace finance backfill migration and gap report
Mar 11, 2026
d2e5486
Refactor migration helpers to use MutationCtx typings
Mar 11, 2026
a2a3489
Add instructor payout release preference scheduling
Mar 11, 2026
36013db
Add AI PR freshness guard workflow
Mar 12, 2026
5ddf0d8
Fix AI guard target branch
Mar 12, 2026
f1bd8eb
Add noncommercial source-available license
Mar 12, 2026
f049fbf
Reduce dashboard overload and complete i18n coverage
Mar 12, 2026
cb36127
Deduplicate verified auth accounts by email
Mar 12, 2026
6b538cd
Fallback to browser Didit flow on Android (#4)
DerpcatMusic Mar 12, 2026
efff443
Merge branch 'master' into auth-dedupe-fix
DerpcatMusic Mar 12, 2026
195c5a9
Mock i18n in jobs payments contract test
Mar 12, 2026
69871c1
Fix payments contract test harnesses
Mar 12, 2026
48511e8
Merge pull request #3 from DerpcatMusic/auth-dedupe-fix
DerpcatMusic Mar 12, 2026
ba608a2
ui: remove fake theme split and trim kit dead weight (#5)
DerpcatMusic Mar 13, 2026
e902921
ui: cut home chrome and replace feed kit buttons (#6)
DerpcatMusic Mar 13, 2026
7cdd73a
UI Cut 03: flatten jobs feeds into list-first boards (#7)
DerpcatMusic Mar 13, 2026
021890b
UI Cut 04: simplify auth and onboarding actions (#8)
DerpcatMusic Mar 13, 2026
9144a02
UI Cut 05: simplify shared actions and job sheet controls (#9)
DerpcatMusic Mar 13, 2026
b40e7d5
UI Cut 06: simplify profile action surfaces (#10)
DerpcatMusic Mar 13, 2026
bcf61af
UI Cut 07: simplify profile route form actions (#11)
DerpcatMusic Mar 13, 2026
c93a273
UI Cut 08: simplify shared surface interactions (#12)
DerpcatMusic Mar 13, 2026
14d4930
UI Cut 09: simplify calendar action surfaces (#13)
DerpcatMusic Mar 13, 2026
5d3742d
UI Cut 10: simplify map tab action surfaces (#14)
DerpcatMusic Mar 13, 2026
f0157be
UI Cut 11: simplify instructor payment interactions (#15)
DerpcatMusic Mar 13, 2026
009b309
UI Cut 12: remove remaining app wrapper actions (#16)
DerpcatMusic Mar 13, 2026
c86597f
UI Cut 13: delete dead kit button primitives (#17)
DerpcatMusic Mar 13, 2026
241f684
UI Cut 14: compress profile shells (#18)
DerpcatMusic Mar 13, 2026
279fa19
UI Cut 15: reduce web shell chrome (#19)
DerpcatMusic Mar 13, 2026
f23bcd2
UI Cut 16: simplify onboarding chrome (#20)
DerpcatMusic Mar 13, 2026
e7de525
UI Redesign 01: rebuild home hero surfaces (#21)
DerpcatMusic Mar 13, 2026
a3bba70
UI Redesign 02: normalize instructor location (#22)
DerpcatMusic Mar 13, 2026
11f1efb
UI Redesign 03: normalize calendar settings (#23)
DerpcatMusic Mar 13, 2026
2508155
UI Redesign 04: normalize sports board (#24)
DerpcatMusic Mar 13, 2026
69497b2
UI Redesign 05: redesign sign-in screen (#25)
DerpcatMusic Mar 13, 2026
e553880
feat: add custom TopSheet with expandable, sticky header, and vibrant…
Mar 15, 2026
bab9dfd
feat: add custom TopSheet with expandable, sticky header, and vibrant…
Mar 15, 2026
f385b64
fix: add missing neutral field to CustomSeed and remove invalid secon…
Mar 15, 2026
3496ba3
fix: add missing secondary field and add design context docs
Mar 15, 2026
ca5f942
fukloadashet
Mar 15, 2026
dd0c8bb
fix: add purple topInsetColor to all TopSheets
Mar 15, 2026
dc58f75
fix: ensure status bar background always visible with higher zIndex
Mar 15, 2026
8879e8d
fix: add safeTop to TopSheet and TopSheetSurface to prevent clipping
Mar 15, 2026
1ab4941
fix: restore original fallback colors and simplify safeTop handling
Mar 15, 2026
8dc6e67
fix: remove backgroundColor override to restore purple default
Mar 15, 2026
efc8278
fix: add safeTop to TopSheetSurface to prevent clipping under status bar
Mar 15, 2026
93ae99a
fix: wrap children in SafeAreaView for proper global inset handling
Mar 15, 2026
96d12d1
fix: revert to simple status bar overlay approach
Mar 15, 2026
ae49923
fix: add guard for undefined gate in session gate
Mar 15, 2026
98261d1
refactor ui system and onboarding chrome
Mar 19, 2026
1661f30
animate onboarding step transition
Mar 19, 2026
fc011ec
refine onboarding reveal and modernize android switches
Mar 19, 2026
079919f
normalize remaining home and profile surfaces
Mar 19, 2026
da43e24
stabilize ui system and split map tab modules
Mar 20, 2026
76ce266
split tab modules and map controller helpers
Mar 20, 2026
bf853bb
extract top sheet helper modules
Mar 20, 2026
520350b
optimize sheet transitions and timeline rendering
Mar 20, 2026
19badb7
trim sheet churn and map startup latency
Mar 20, 2026
85fbe97
split scroll sheet contexts
Mar 20, 2026
2b1843e
stabilize top sheet step state
Mar 20, 2026
f74534d
move sheet snap resolution off js thread
Mar 20, 2026
51f947d
keep expandable sheet content mounted
Mar 20, 2026
4de22ed
reduce native map remount churn
Mar 20, 2026
dbd93ba
trim calendar timeline rebuild work
Mar 20, 2026
6c1414e
Merge branch 'feat/calendar-hardening'
Mar 20, 2026
8eabb50
Force Android Didit verification through browser flow
Mar 21, 2026
bb3016d
Merge purple mainline into master integration branch
Mar 21, 2026
fa11012
Fix merge-introduced lint issues
Mar 21, 2026
1e23736
feat: jobs marketplace, rapyd integration, contract tests, and cleanup
Mar 22, 2026
4520f8a
chore: add metro-cache, node-compile-cache, bunx to gitignore
Mar 22, 2026
a063ab6
chore: ignore .sisyphus agent artifacts
Mar 22, 2026
04bc467
dsadasdas
Mar 22, 2026
529f879
feat(jobs): complete marketplace lifecycle and UI states
Mar 22, 2026
b62cfd9
Merge pull request #28 from DerpcatMusic/feat/jobs-marketplace-final-…
DerpcatMusic Mar 22, 2026
eb1df48
STABLE!!!!!!!!!
Mar 22, 2026
e18c325
babayu
Mar 22, 2026
5403f60
feat: design context, hardcoded audit, status-signal, payments cleanup
Mar 23, 2026
378e0ce
feat: start nativewind v5 migration and token cleanup
Mar 23, 2026
44f8afa
fix: add asset module declarations for nativewind branch
Mar 23, 2026
72e5dcd
feat: nativewind v5 theme tokens, streamlined spacing/radius/colors i…
Mar 23, 2026
171ede4
feat(map): show studio markers with logos on the instructor map
Mar 23, 2026
4eb6055
Add branch-aware studio infrastructure
Mar 23, 2026
edab81c
Guard optional studio branch fields and fix TS inference
Mar 23, 2026
63659d5
Stabilize studio branches rollout contracts
Mar 23, 2026
4d4f118
Migrate NativeWind styling system and harden calendar sync
Mar 23, 2026
78523e2
Reduce layout animation overhead in feed surfaces
Mar 23, 2026
c17cecc
Use debugOptimized for Android dev-client installs
Mar 23, 2026
bb5429a
Optimize map tab startup and polish map UI
Mar 23, 2026
cbdbf3b
Reduce map tab JS cold-start work
Mar 23, 2026
d622f5b
Stabilize profile sheet registration and Android tab icons
Mar 23, 2026
7c2719a
Fix profile sheet transition path and map sheet spacing
Mar 23, 2026
5c5c0b4
Use native Android tab icons
Mar 23, 2026
33fb34f
Refine MapLibre basemap styling
Mar 23, 2026
8ee60ee
Tighten map overlay spacing and collapsed sheet
Mar 23, 2026
109059c
feat(jobs,map): add archive sheet and studio markers
Mar 23, 2026
d7bec3d
refine archive sheet and overlay spacing
Mar 23, 2026
aa8e575
Polish map markers and archive sheet chrome
Mar 24, 2026
0a8238d
Refine archive sheet details and floating controls
Mar 24, 2026
e7f130a
Adjust studio map pin visibility and shape
Mar 24, 2026
e855529
Stabilize studio map pin anchoring
Mar 24, 2026
0570e3c
Use view annotations for studio map pins
Mar 24, 2026
f4bb69b
Refine studio pin tail geometry
Mar 24, 2026
86cad83
Use SVG silhouette for studio map pins
Mar 24, 2026
f8a416b
Layer studio pins above zones and frame images
Mar 24, 2026
6fdc2f6
Mask studio photos inside map pins
Mar 24, 2026
547f109
Restore stable studio pin annotation anchoring
Mar 24, 2026
5323ddb
Refine studio pin opening and zone outlines
Mar 24, 2026
ff00366
Polish studio pin layering and zoom scaling
Mar 24, 2026
2e045f8
Fix studio pin photo mask and zoom sizing
Mar 24, 2026
a48e290
Fix studio map pins and retune marker accent
Mar 24, 2026
78e1091
Stabilize studio pins on annotation path
Mar 24, 2026
c505f5d
Render studio pins with symbol layer
Mar 24, 2026
8c09ea5
Split studio pin shell and photo symbol layers
Mar 24, 2026
898baa7
feat(instructor-profile): structured address fields + simplified loca…
Mar 24, 2026
500587a
Scale studio map pins with clusters and shell asset
Mar 24, 2026
c19a4f0
Simplify studio map pins and add tint support
Mar 24, 2026
b3970cd
Fix studio pin shell transparency
Mar 24, 2026
6e473fd
Refine map styling and pin thresholds
Mar 24, 2026
549fdac
Normalize map fonts and neutralize basemap tones
Mar 24, 2026
101e038
Fix map glyph loading and dark road styling
Mar 24, 2026
ec47bcb
Tune map road hierarchy and smoothness
Mar 24, 2026
03b2dca
Polish jobs header motion and loading screen
Mar 24, 2026
674dc18
feat(home): instructor job carousel + studio review carousel with acc…
Mar 24, 2026
6c89c18
refactor(profile,layout): clean up profile index and top sheet
Mar 24, 2026
cd514ab
fix: silent catch in review carousel, loading-screen animation cleanu…
Mar 24, 2026
74338ff
Merge branch 'feat/nativewind-styling' into integration/nativewind-st…
Mar 24, 2026
bb45a52
Merge branch 't3code/studio-branches-system' into integration/nativew…
Mar 24, 2026
45aa18f
fix: reconcile studio branch rollout with nativewind jobs ui
Mar 24, 2026
a4e1972
feat: wire studio branches into profile and job posting
Mar 24, 2026
c1873b3
fix: gate studio branch queries by resolved role
Mar 24, 2026
b56c8af
fix: skip wrong-role tab queries during startup
Mar 24, 2026
3001807
refactor: shift switching toward separate accounts
Mar 24, 2026
aef4f71
feat: add a reversible add-account handoff flow
Mar 24, 2026
8465c15
fix: reroute resend test emails for dev account creation
Mar 24, 2026
a69d012
refactor: simplify add-account into email handoff
Mar 24, 2026
c087719
chore: refresh convex generated api types
Mar 24, 2026
d1a3395
feat: unify native google auth with calendar oauth
Mar 24, 2026
34c82bd
fix: recover missing auth emails during google sign-in
Mar 24, 2026
3141cc4
fix: clean up auth linking and studio profile routing
Mar 24, 2026
1e99bde
chore: resolve merge conflicts from perf/improve-rendering stash
Mar 25, 2026
10b384c
fix: improve account switching and job application controls
Mar 25, 2026
f674f9f
fix: align merged auth and profile ui with master
Mar 25, 2026
503a92a
fix: align native map marker helpers
Mar 25, 2026
8be2187
MID change
Mar 25, 2026
1cb957e
Feat: Redesign jobs cards
Mar 25, 2026
c6f6c20
fix(security): patch 6 CRITICAL/HIGH IDOR vulnerabilities
Mar 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
198 changes: 198 additions & 0 deletions .agents/skills/adapt/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@
---
name: adapt
description: Adapt designs to work across different screen sizes, devices, contexts, or platforms. Ensures consistent experience across varied environments.
user-invokable: true
args:
- name: target
description: The feature or component to adapt (optional)
required: false
- name: context
description: What to adapt for (mobile, tablet, desktop, print, email, etc.)
required: false
---

Adapt existing designs to work effectively across different contexts - different screen sizes, devices, platforms, or use cases.

## Assess Adaptation Challenge

Understand what needs adaptation and why:

1. **Identify the source context**:
- What was it designed for originally? (Desktop web? Mobile app?)
- What assumptions were made? (Large screen? Mouse input? Fast connection?)
- What works well in current context?

2. **Understand target context**:
- **Device**: Mobile, tablet, desktop, TV, watch, print?
- **Input method**: Touch, mouse, keyboard, voice, gamepad?
- **Screen constraints**: Size, resolution, orientation?
- **Connection**: Fast wifi, slow 3G, offline?
- **Usage context**: On-the-go vs desk, quick glance vs focused reading?
- **User expectations**: What do users expect on this platform?

3. **Identify adaptation challenges**:
- What won't fit? (Content, navigation, features)
- What won't work? (Hover states on touch, tiny touch targets)
- What's inappropriate? (Desktop patterns on mobile, mobile patterns on desktop)

**CRITICAL**: Adaptation is not just scaling - it's rethinking the experience for the new context.

## Plan Adaptation Strategy

Create context-appropriate strategy:

### Mobile Adaptation (Desktop → Mobile)

**Layout Strategy**:
- Single column instead of multi-column
- Vertical stacking instead of side-by-side
- Full-width components instead of fixed widths
- Bottom navigation instead of top/side navigation

**Interaction Strategy**:
- Touch targets 44x44px minimum (not hover-dependent)
- Swipe gestures where appropriate (lists, carousels)
- Bottom sheets instead of dropdowns
- Thumbs-first design (controls within thumb reach)
- Larger tap areas with more spacing

**Content Strategy**:
- Progressive disclosure (don't show everything at once)
- Prioritize primary content (secondary content in tabs/accordions)
- Shorter text (more concise)
- Larger text (16px minimum)

**Navigation Strategy**:
- Hamburger menu or bottom navigation
- Reduce navigation complexity
- Sticky headers for context
- Back button in navigation flow

### Tablet Adaptation (Hybrid Approach)

**Layout Strategy**:
- Two-column layouts (not single or three-column)
- Side panels for secondary content
- Master-detail views (list + detail)
- Adaptive based on orientation (portrait vs landscape)

**Interaction Strategy**:
- Support both touch and pointer
- Touch targets 44x44px but allow denser layouts than phone
- Side navigation drawers
- Multi-column forms where appropriate

### Desktop Adaptation (Mobile → Desktop)

**Layout Strategy**:
- Multi-column layouts (use horizontal space)
- Side navigation always visible
- Multiple information panels simultaneously
- Fixed widths with max-width constraints (don't stretch to 4K)

**Interaction Strategy**:
- Hover states for additional information
- Keyboard shortcuts
- Right-click context menus
- Drag and drop where helpful
- Multi-select with Shift/Cmd

**Content Strategy**:
- Show more information upfront (less progressive disclosure)
- Data tables with many columns
- Richer visualizations
- More detailed descriptions

### Print Adaptation (Screen → Print)

**Layout Strategy**:
- Page breaks at logical points
- Remove navigation, footer, interactive elements
- Black and white (or limited color)
- Proper margins for binding

**Content Strategy**:
- Expand shortened content (show full URLs, hidden sections)
- Add page numbers, headers, footers
- Include metadata (print date, page title)
- Convert charts to print-friendly versions

### Email Adaptation (Web → Email)

**Layout Strategy**:
- Narrow width (600px max)
- Single column only
- Inline CSS (no external stylesheets)
- Table-based layouts (for email client compatibility)

**Interaction Strategy**:
- Large, obvious CTAs (buttons not text links)
- No hover states (not reliable)
- Deep links to web app for complex interactions

## Implement Adaptations

Apply changes systematically:

### Responsive Breakpoints

Choose appropriate breakpoints:
- Mobile: 320px-767px
- Tablet: 768px-1023px
- Desktop: 1024px+
- Or content-driven breakpoints (where design breaks)

### Layout Adaptation Techniques

- **CSS Grid/Flexbox**: Reflow layouts automatically
- **Container Queries**: Adapt based on container, not viewport
- **`clamp()`**: Fluid sizing between min and max
- **Media queries**: Different styles for different contexts
- **Display properties**: Show/hide elements per context

### Touch Adaptation

- Increase touch target sizes (44x44px minimum)
- Add more spacing between interactive elements
- Remove hover-dependent interactions
- Add touch feedback (ripples, highlights)
- Consider thumb zones (easier to reach bottom than top)

### Content Adaptation

- Use `display: none` sparingly (still downloads)
- Progressive enhancement (core content first, enhancements on larger screens)
- Lazy loading for off-screen content
- Responsive images (`srcset`, `picture` element)

### Navigation Adaptation

- Transform complex nav to hamburger/drawer on mobile
- Bottom nav bar for mobile apps
- Persistent side navigation on desktop
- Breadcrumbs on smaller screens for context

**IMPORTANT**: Test on real devices, not just browser DevTools. Device emulation is helpful but not perfect.

**NEVER**:
- Hide core functionality on mobile (if it matters, make it work)
- Assume desktop = powerful device (consider accessibility, older machines)
- Use different information architecture across contexts (confusing)
- Break user expectations for platform (mobile users expect mobile patterns)
- Forget landscape orientation on mobile/tablet
- Use generic breakpoints blindly (use content-driven breakpoints)
- Ignore touch on desktop (many desktop devices have touch)

## Verify Adaptations

Test thoroughly across contexts:

- **Real devices**: Test on actual phones, tablets, desktops
- **Different orientations**: Portrait and landscape
- **Different browsers**: Safari, Chrome, Firefox, Edge
- **Different OS**: iOS, Android, Windows, macOS
- **Different input methods**: Touch, mouse, keyboard
- **Edge cases**: Very small screens (320px), very large screens (4K)
- **Slow connections**: Test on throttled network

Remember: You're a cross-platform design expert. Make experiences that feel native to each context while maintaining brand and functionality consistency. Adapt intentionally, test thoroughly.
190 changes: 190 additions & 0 deletions .agents/skills/animate/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
---
name: animate
description: Review a feature and enhance it with purposeful animations, micro-interactions, and motion effects that improve usability and delight.
user-invokable: true
args:
- name: target
description: The feature or component to animate (optional)
required: false
---

Analyze a feature and strategically add animations and micro-interactions that enhance understanding, provide feedback, and create delight.

## MANDATORY PREPARATION

### Context Gathering (Do This First)

You cannot do a great job without having necessary context, such as target audience (critical), desired use-cases (critical), brand personality/tone (playful vs serious, energetic vs calm), and performance constraints.

Attempt to gather these from the current thread or codebase.

1. If you don't find *exact* information and have to infer from existing design and functionality, you MUST STOP and STOP and call the AskUserQuestionTool to clarify. whether you got it right.
2. Otherwise, if you can't fully infer or your level of confidence is medium or lower, you MUST STOP and call the AskUserQuestionTool to clarify. clarifying questions first to complete your context.

Do NOT proceed until you have answers. Guessing leads to inappropriate or excessive animation.

### Use frontend-design skill

Use the frontend-design skill for design principles and anti-patterns. Do NOT proceed until it has executed and you know all DO's and DON'Ts.

---

## Assess Animation Opportunities

Analyze where motion would improve the experience:

1. **Identify static areas**:
- **Missing feedback**: Actions without visual acknowledgment (button clicks, form submission, etc.)
- **Jarring transitions**: Instant state changes that feel abrupt (show/hide, page loads, route changes)
- **Unclear relationships**: Spatial or hierarchical relationships that aren't obvious
- **Lack of delight**: Functional but joyless interactions
- **Missed guidance**: Opportunities to direct attention or explain behavior

2. **Understand the context**:
- What's the personality? (Playful vs serious, energetic vs calm)
- What's the performance budget? (Mobile-first? Complex page?)
- Who's the audience? (Motion-sensitive users? Power users who want speed?)
- What matters most? (One hero animation vs many micro-interactions?)

If any of these are unclear from the codebase, STOP and call the AskUserQuestionTool to clarify.

**CRITICAL**: Respect `prefers-reduced-motion`. Always provide non-animated alternatives for users who need them.

## Plan Animation Strategy

Create a purposeful animation plan:

- **Hero moment**: What's the ONE signature animation? (Page load? Hero section? Key interaction?)
- **Feedback layer**: Which interactions need acknowledgment?
- **Transition layer**: Which state changes need smoothing?
- **Delight layer**: Where can we surprise and delight?

**IMPORTANT**: One well-orchestrated experience beats scattered animations everywhere. Focus on high-impact moments.

## Implement Animations

Add motion systematically across these categories:

### Entrance Animations
- **Page load choreography**: Stagger element reveals (100-150ms delays), fade + slide combinations
- **Hero section**: Dramatic entrance for primary content (scale, parallax, or creative effects)
- **Content reveals**: Scroll-triggered animations using intersection observer
- **Modal/drawer entry**: Smooth slide + fade, backdrop fade, focus management

### Micro-interactions
- **Button feedback**:
- Hover: Subtle scale (1.02-1.05), color shift, shadow increase
- Click: Quick scale down then up (0.95 → 1), ripple effect
- Loading: Spinner or pulse state
- **Form interactions**:
- Input focus: Border color transition, slight scale or glow
- Validation: Shake on error, check mark on success, smooth color transitions
- **Toggle switches**: Smooth slide + color transition (200-300ms)
- **Checkboxes/radio**: Check mark animation, ripple effect
- **Like/favorite**: Scale + rotation, particle effects, color transition

### State Transitions
- **Show/hide**: Fade + slide (not instant), appropriate timing (200-300ms)
- **Expand/collapse**: Height transition with overflow handling, icon rotation
- **Loading states**: Skeleton screen fades, spinner animations, progress bars
- **Success/error**: Color transitions, icon animations, gentle scale pulse
- **Enable/disable**: Opacity transitions, cursor changes

### Navigation & Flow
- **Page transitions**: Crossfade between routes, shared element transitions
- **Tab switching**: Slide indicator, content fade/slide
- **Carousel/slider**: Smooth transforms, snap points, momentum
- **Scroll effects**: Parallax layers, sticky headers with state changes, scroll progress indicators

### Feedback & Guidance
- **Hover hints**: Tooltip fade-ins, cursor changes, element highlights
- **Drag & drop**: Lift effect (shadow + scale), drop zone highlights, smooth repositioning
- **Copy/paste**: Brief highlight flash on paste, "copied" confirmation
- **Focus flow**: Highlight path through form or workflow

### Delight Moments
- **Empty states**: Subtle floating animations on illustrations
- **Completed actions**: Confetti, check mark flourish, success celebrations
- **Easter eggs**: Hidden interactions for discovery
- **Contextual animation**: Weather effects, time-of-day themes, seasonal touches

## Technical Implementation

Use appropriate techniques for each animation:

### Timing & Easing

**Durations by purpose:**
- **100-150ms**: Instant feedback (button press, toggle)
- **200-300ms**: State changes (hover, menu open)
- **300-500ms**: Layout changes (accordion, modal)
- **500-800ms**: Entrance animations (page load)

**Easing curves (use these, not CSS defaults):**
```css
/* Recommended - natural deceleration */
--ease-out-quart: cubic-bezier(0.25, 1, 0.5, 1); /* Smooth, refined */
--ease-out-quint: cubic-bezier(0.22, 1, 0.36, 1); /* Slightly snappier */
--ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1); /* Confident, decisive */

/* AVOID - feel dated and tacky */
/* bounce: cubic-bezier(0.34, 1.56, 0.64, 1); */
/* elastic: cubic-bezier(0.68, -0.6, 0.32, 1.6); */
```

**Exit animations are faster than entrances.** Use ~75% of enter duration.

### CSS Animations
```css
/* Prefer for simple, declarative animations */
- transitions for state changes
- @keyframes for complex sequences
- transform + opacity only (GPU-accelerated)
```

### JavaScript Animation
```javascript
/* Use for complex, interactive animations */
- Web Animations API for programmatic control
- Framer Motion for React
- GSAP for complex sequences
```

### Performance
- **GPU acceleration**: Use `transform` and `opacity`, avoid layout properties
- **will-change**: Add sparingly for known expensive animations
- **Reduce paint**: Minimize repaints, use `contain` where appropriate
- **Monitor FPS**: Ensure 60fps on target devices

### Accessibility
```css
@media (prefers-reduced-motion: reduce) {
* {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}
```

**NEVER**:
- Use bounce or elastic easing curves—they feel dated and draw attention to the animation itself
- Animate layout properties (width, height, top, left)—use transform instead
- Use durations over 500ms for feedback—it feels laggy
- Animate without purpose—every animation needs a reason
- Ignore `prefers-reduced-motion`—this is an accessibility violation
- Animate everything—animation fatigue makes interfaces feel exhausting
- Block interaction during animations unless intentional

## Verify Quality

Test animations thoroughly:

- **Smooth at 60fps**: No jank on target devices
- **Feels natural**: Easing curves feel organic, not robotic
- **Appropriate timing**: Not too fast (jarring) or too slow (laggy)
- **Reduced motion works**: Animations disabled or simplified appropriately
- **Doesn't block**: Users can interact during/after animations
- **Adds value**: Makes interface clearer or more delightful

Remember: Motion should enhance understanding and provide feedback, not just add decoration. Animate with purpose, respect performance constraints, and always consider accessibility. Great animation is invisible - it just makes everything feel right.
Loading
Loading