apple-design

Implements Apple-style fluid interfaces with springs, gestures, and translucency on the web.

Updated Aug 9, 2026
One-click install
npx skills add https://github.com/jwinar/carpet_gato --skill apple-design-jwinar
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: apple-design
Source: https://github.com/jwinar/carpet_gato/tree/main/.claude/skills/emil-kowalski-design/apple-design
Command: npx skills add https://github.com/jwinar/carpet_gato --skill apple-design-jwinar

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Web interfaces often feel stiff because animations are pre-scripted, non-interruptible, and disconnected from user input. This Skill translates Apple's WWDC design guidance (fluid interfaces, springs, materials, typography) into concrete web techniques using CSS, Pointer Events, requestAnimationFrame, and spring libraries like Motion/Framer Motion. ## Core Features & Use Cases - Gesture-driven motion: Build 1:1 drag tracking with Pointer Events, velocity handoff into springs, momentum projection for flicks, and rubber-banding at boundaries. - Interruptible spring animations: Replace fixed-duration CSS transitions with critically damped or under-damped springs that animate from the live on-screen value and can be reversed mid-flight. - Materials, depth, and typography: Apply backdrop-filter translucency, scroll edge effects, size-specific tracking and leading, plus reduced-motion and reduced-transparency fallbacks. - Use Case: When building a bottom sheet or swipeable card, use this Skill to implement drag tracking with pointer capture, project the flick landing point with Apple's deceleration formula, and hand off release velocity to a spring so the gesture and animation feel continuous. ## Quick Start Ask the AI to review or build a drag-to-dismiss sheet using Apple-style springs, velocity handoff, and rubber-banding from this Skill.

Frequently Asked Questions about apple-design

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I make web animations interruptible like iOS?▼

Use spring animations instead of CSS transitions or keyframes, and always animate from the element's live on-screen (presentation) value rather than the target value. Spring libraries like Motion or Framer Motion carry velocity through re-targeting, so a gesture can grab and reverse motion mid-flight without a visible jump.

How do I implement a drag-to-dismiss bottom sheet on the web?▼

Track the pointer 1:1 using Pointer Events with setPointerCapture, record a short velocity history, then on release project the resting position with Apple's momentum formula and hand the release velocity to a spring. Snap to the target nearest the projected point rather than the release point.

What spring values does Apple use for UI animations?▼

Apple uses damping ratio 1.0 (critically damped, no overshoot) with response around 0.3-0.4 seconds for most UI, and damping near 0.8 only for momentum-driven interactions like flicks and drawers. In Motion or Framer Motion this maps to bounce 0 by default and bounce around 0.2 for physical gestures.

Should I use CSS transitions or springs for gesture-driven UI?▼

Use springs for anything gesture-driven, because CSS transitions and keyframes cannot be smoothly grabbed and reversed mid-flight. Springs animate from the current value and inherit velocity, which is exactly what interruption and reversal require.

How do I handle reduced motion for fluid animations?▼

Respond to prefers-reduced-motion by replacing slides, springs, and parallax with short opacity cross-fades, dropping elastic overshoot. Also handle prefers-reduced-transparency by making translucent surfaces solid, and prefers-contrast by adding defined borders.

How do I recreate iOS rubber-banding at scroll boundaries?▼

Apply progressive resistance past the boundary instead of a hard stop, using the formula (overshoot * dimension * 0.55) / (dimension + 0.55 * |overshoot|). The further past the edge the user drags, the less the element follows, which reads as responsive rather than frozen.