Every reveal,
timed to the millisecond.
A frame-accurate motion specification for AURA's six-screen journey. Engineered timings, easing curves, staggers, haptics, and exit transitions — every beat earns its place in the 60-second budget.
Global motion language
Easing curves
brandcubic-bezier(0.22, 1, 0.36, 1) — soft luxury outspringcubic-bezier(0.2, 0.8, 0.2, 1) — magnetic settlebackcubic-bezier(0.34, 1.56, 0.64, 1) — gentle overshootinOutcubic-bezier(0.65, 0, 0.35, 1) — breathing loops
Duration scale
x-fast120 ms — press / haptic feedbackfast220 ms — chip / tab swapbase320–420 ms — bubble / drawerslow600–800 ms — match-bar / type-onsignature7,400 ms — generative develop
Stagger rules
- Chip groups:
60–90 ms - Trait chips (scan):
200 ms— slow on purpose - SKU cards:
100 ms - Pose dots:
40 ms— rapid lock
Haptic palette
soft— card press / draglight— chip select, bubble settlemedium— add-to-look, CTAheavy thump— save look to genome
Reduced-motion fallback: all fade-up, scale-in, and blur-develop beats collapse to a 120 ms opacity fade. The signature generative develop becomes a single cross-fade. Loops (corona, particle bloom, CTA glow) are paused. Haptics remain.
Screen 01 · 0–6,000 ms
Onboarding
Disappear as fast as possible. The product is the demo — every motion pulls the user toward the camera.
Reveal beats
| t | dur | Element | Property | Change | Ease |
|---|---|---|---|---|---|
| 0 ms | 1200 ms | Aurora gradient | background-position + hue-rotate(0 → 12°) | static → drifting ↳ Loops forever at 40s; first sweep visible immediately. | linear |
| 80 ms | 520 ms | Logo lockup | opacity 0 → 1, translateY 8 → 0 | fade-up | cb(0.22, 1, 0.36, 1) |
| 220 ms | 620 ms | H1 (3 lines) | opacity 0 → 1, translateY 16 → 0 | stagger fade-up per line ↳ Stagger 90 ms between lines. | cb(0.22, 1, 0.36, 1) |
| 600 ms | 480 ms | Vibe chips (×4) | opacity 0 → 1, scale 0.92 → 1 | scale-in ↳ Stagger 70 ms. | cb(0.34, 1.56, 0.64, 1) |
| 980 ms | 420 ms | Begin CTA | opacity 0 → 1, translateY 20 → 0 | fade-up | cb(0.22, 1, 0.36, 1) |
| 1400 ms | — | Sign-in link | opacity 0 → 0.6 | ambient fade ↳ Demoted: 10pt, no animation flourish. | linear |
Micro-interactions
Tap vibe chip
scale 1 → 1.04, amber glow ring expands 0 → 12px
180 mscb(0.34, 1.56, 0.64, 1)haptic · Light selectionPress Begin
Button morphs: border-radius 16 → 999, width 100% → 64px, then scales to fullscreen viewfinder
260 ms morph + 420 ms expandcb(0.22, 1, 0.36, 1)haptic · Medium impact at expansion startHold Begin
Inner gradient slides 100% → -100% (loading shimmer)
900 ms looplinearExit transition → Screen 02
Begin button expands radially to become the camera viewfinder (420 ms, EASE.brand). Direct match-cut to Screen 02; no fade.
Screen 02 · 6,000–14,000 ms
AI Skin Analysis · The wow moment
Make the camera feel alive, not clinical. The user must feel read, not measured. Three named traits = the wow.
Reveal beats
| t | dur | Element | Property | Change | Ease |
|---|---|---|---|---|---|
| 0 ms | 600 ms | Camera feed | blur(8px) → blur(0), brightness 0.6 → 1 | wake | cb(0.22, 1, 0.36, 1) |
| 400 ms | 4000 ms | Corona ring (outer) | scale 1 → 1.06 → 1, opacity 0.5 → 0.8 → 0.5 | breathe ↳ Loops every 4s. | cb(0.65, 0, 0.35, 1) |
| 1400 ms | 4000 ms | Corona ring (inner) | scale 1 → 1.04 → 1 | breathe (offset 1s) ↳ 1s phase offset from outer for parallax. | cb(0.65, 0, 0.35, 1) |
| 800 ms | 4000 ms | Scan line (1px + 20px magenta glow) | translateY -100% → 100% | single vertical sweep ↳ Exactly 4s — sets the rhythm of the whole moment. | cb(0.65, 0, 0.35, 1) |
| 4900 ms | 360 ms | Trait chip · WARM OLIVE | opacity 0 → 1, translateY 12 → 0, blur(6px) → 0 | materialize | cb(0.22, 1, 0.36, 1) |
| 5100 ms | 360 ms | Trait chip · LUMINOUS | opacity 0 → 1, translateY 12 → 0, blur(6px) → 0 | materialize ↳ 200 ms stagger from previous. | cb(0.22, 1, 0.36, 1) |
| 5300 ms | 360 ms | Trait chip · SUNSET PALETTE | opacity 0 → 1, translateY 12 → 0, blur(6px) → 0 | materialize ↳ 200 ms stagger. | cb(0.22, 1, 0.36, 1) |
| 6200 ms | 480 ms | Corona | scale 1 → 0.92, opacity 0.6 → 0 | contract & exhale | cb(0.22, 1, 0.36, 1) |
| 6400 ms | 520 ms | Trait dock card | translateY 100% → 0 | dock to bottom | cb(0.2, 0.8, 0.2, 1) |
Micro-interactions
Each trait detected
Soft particle bloom behind the chip (12px → 0 over 600ms)
600 mscb(0.22, 1, 0.36, 1)haptic · Subtle tick per chipTap trait chip
Chip flips on Y axis to reveal 1-line definition
320 mscb(0.22, 1, 0.36, 1)Exit transition → Screen 03
Auto-advance after 8s. Dock card slides up to become the try-on drawer in Screen 03.
Screen 03 · 14,000–28,000 ms
Virtual Try-On
Single canvas, three modalities. Never break the mirror. Every interaction settles in under 300 ms.
Reveal beats
| t | dur | Element | Property | Change | Ease |
|---|---|---|---|---|---|
| 0 ms | 240 ms | Top tab bar | opacity 0 → 1, translateY -8 → 0 | slide-down | cb(0.22, 1, 0.36, 1) |
| 120 ms | 320 ms | Pose-tracking dots (×6) | scale 0 → 1, opacity 0 → 0.8 | scale-in stagger ↳ Stagger 40 ms — feels like keypoints locking on. | cb(0.34, 1.56, 0.64, 1) |
| 800 ms | 600 ms | Pose-tracking dots | opacity 0.8 → 0 | fade once tracking is locked | linear |
| 480 ms | 380 ms | Product drawer | translateY 100% → 0 | slide-up | cb(0.2, 0.8, 0.2, 1) |
| 480 ms | 380 ms | Backdrop behind drawer | backdrop-filter blur(0) → blur(16px) | blur-in | cb(0.22, 1, 0.36, 1) |
| 700 ms | 320 ms | Look bubble (top-right) | opacity 0 → 1, scale 0.8 → 1 | scale-in | cb(0.34, 1.56, 0.64, 1) |
Micro-interactions
Switch tab (Fashion / Accessory / Beauty)
Active pill morphs along magnetic track
300 mscb(0.34, 1.56, 0.64, 1)haptic · LightTap product in drawer
Thumbnail flies in arc to Look bubble; bubble counter ticks +1 with 1.15× pop
520 mscb(0.22, 1, 0.36, 1)haptic · MediumDrag drawer up/down
Rubber-band at extents (resistance 0.4)
Livecb(0.2, 0.8, 0.2, 1)Press product card
scale 1 → 0.97, brightness 1 → 1.06
120 mscb(0.22, 1, 0.36, 1)haptic · SoftExit transition → Screen 04
Look bubble pulses once and expands to fullscreen as transition into Screen 04. 480 ms, EASE.brand.
Screen 04 · 28,000–42,000 ms
AI Stylist · Conversational
Voice-first, words-as-fabric. AURA's bubbles must feel translucent and slow; user input must feel quick and confident.
Reveal beats
| t | dur | Element | Property | Change | Ease |
|---|---|---|---|---|---|
| 0 ms | 320 ms | Header (status pill) | opacity 0 → 1, translateY -6 → 0 | fade-down | cb(0.22, 1, 0.36, 1) |
| 120 ms | 360 ms | AURA opening bubble | opacity 0 → 1, translateY 8 → 0 | fade-up | cb(0.22, 1, 0.36, 1) |
| 380 ms | 420 ms | Suggestion chips (×4) | opacity 0 → 1, scale 0.94 → 1 | scale-in stagger ↳ Stagger 60 ms. | cb(0.34, 1.56, 0.64, 1) |
| 600 ms | 320 ms | Push-to-talk orb | scale 0 → 1, glow 0 → 18px | bloom | cb(0.34, 1.56, 0.64, 1) |
Micro-interactions
Press-and-hold orb
Orb scale 1 → 1 + (rms × 0.18); halo glow modulates 8 → 32px in real time; waveform bars react to FFT
Live (80 ms transition smoothing)cb(0.22, 1, 0.36, 1)haptic · Continuous on press, release tickBubble appears (AURA)
fade-up 8px, 280 ms
280 mscb(0.22, 1, 0.36, 1)Bubble appears (user)
fade-up 8px + 1.02× pop on settle
220 mscb(0.34, 1.56, 0.64, 1)Typing indicator
Three dots: opacity 0.3 → 1 → 0.3, 600 ms loop, offset 180 ms each
600 ms loopcb(0.65, 0, 0.35, 1)Tap suggestion chip
Chip scales 0.96, dispatches and fades; reply re-streams live
200 mscb(0.22, 1, 0.36, 1)haptic · LightExit transition → Screen 05
When user accepts a recommendation, the latest AURA bubble blooms outward to fill the screen and cross-fades into the generative canvas. 520 ms, EASE.brand.
Screen 05 · 42,000–52,000 ms
Generative Visualization
The 'future you' moment. The image must feel like it's being developed, not loaded. Hold the room's silence.
Reveal beats
| t | dur | Element | Property | Change | Ease |
|---|---|---|---|---|---|
| 0 ms | 7400 ms | Hero image | blur(20px) → blur(0) | develop ↳ The signature beat. 7.4s exactly — not 7, not 8. | cb(0.22, 1, 0.36, 1) |
| 0 ms | 7400 ms | Hero image | saturation 1.25 → 1.0, brightness 1.15 → 1.0 | color settle | cb(0.22, 1, 0.36, 1) |
| 0 ms | 7400 ms | Film grain overlay | opacity 0.18 → 0.04 | grain settles | linear |
| 800 ms | 1600 ms | Particle bloom (chrome highlight ×2) | scale 0.6 → 1.4, opacity 0.6 → 0 | radial pulse ↳ Loops every 1.6s during develop. | cb(0.22, 1, 0.36, 1) |
| 5800 ms | 1200 ms | Look name (display serif) | characters reveal type-on (per-char opacity 0 → 1) | typewrite ↳ Stagger 32 ms per character. | linear |
| 7000 ms | 480 ms | CTA glass card | translateY 60 → 0, opacity 0 → 1 | ascend ↳ Magenta glow blooms 0 → 24px on settle. | cb(0.2, 0.8, 0.2, 1) |
Micro-interactions
CTA hover/press
Glow 24 → 36px, scale 1 → 1.02
240 mscb(0.22, 1, 0.36, 1)haptic · Medium on tapLong-press hero
Look stamps into style genome — 1.04× pulse + radial flash + 'thump' haptic
320 mscb(0.34, 1.56, 0.64, 1)haptic · Heavy thumpSwipe up on hero
Image lifts to top quarter; SKU cards rise from below in stagger
560 mscb(0.22, 1, 0.36, 1)Exit transition → Screen 06
CTA tap or swipe-up: hero compresses to 28vh, transitions seamlessly into Screen 06's hero. No cut, no fade — physical continuity.
Screen 06 · 52,000–60,000 ms
Shoppable Results
Trust object: the match bar. Every motion here is a receipt. Three SKUs, one CTA, zero filtering.
Reveal beats
| t | dur | Element | Property | Change | Ease |
|---|---|---|---|---|---|
| 0 ms | 420 ms | Hero image (compressed) | translateY 0 → 0 (carried over from Screen 05) | settle ↳ Inherits position from generative exit. | cb(0.22, 1, 0.36, 1) |
| 200 ms | 360 ms | Look title bar | opacity 0 → 1, translateY 8 → 0 | fade-up | cb(0.22, 1, 0.36, 1) |
| 380 ms | 360 ms | SKU card · #1 | opacity 0 → 1, translateY 16 → 0 | fade-up | cb(0.22, 1, 0.36, 1) |
| 480 ms | 360 ms | SKU card · #2 | opacity 0 → 1, translateY 16 → 0 | fade-up ↳ 100 ms stagger. | cb(0.22, 1, 0.36, 1) |
| 580 ms | 360 ms | SKU card · #3 | opacity 0 → 1, translateY 16 → 0 | fade-up ↳ 100 ms stagger. | cb(0.22, 1, 0.36, 1) |
| 760 ms | 600 ms | Match bar (per card) | width 0% → score% | fill L→R ↳ Triggered when card enters viewport. | cb(0.22, 1, 0.36, 1) |
| 1100 ms | 380 ms | Buy CTA | translateY 24 → 0, opacity 0 → 1 | rise | cb(0.2, 0.8, 0.2, 1) |
Micro-interactions
Press SKU card
scale 1 → 0.97, shadow soft → tight
120 mscb(0.22, 1, 0.36, 1)haptic · SoftToggle item in cart
Match-bar pulse, total animates with tabular numerals (count-up 280ms)
280 mscb(0.22, 1, 0.36, 1)haptic · Light tickBuy CTA idle
Glow pulses 18 → 28 → 18px every 6s
6s loopcb(0.65, 0, 0.35, 1)Long-press hero
Stamps look into genome (radial flash + thump)
320 mscb(0.34, 1.56, 0.64, 1)haptic · HeavySuccessful purchase
Confetti of color-palette tokens (8 chips fall + fade) over the look
1400 mscb(0.22, 1, 0.36, 1)Exit transition → Screen 07
Confirmation overlay slides up from bottom (420 ms, spring) with order summary. Journey complete at 60s.
The principle
Motion is a promise.
Every millisecond is a contract.
No flourish without function. No wait without anticipation. Every animation in AURA serves the reveal — or it doesn't ship.