Skip to main content

Motion & Haptics

GospeLib's motion design has three simultaneous qualities: springy for micro-interactions, instant for content reveals, and choreographed for panel transitions. Haptics are used in exactly three places — never for decoration.

Motion Character

QualityWhenExample
SpringySmall element responsesHighlight pulse, bookmark confirmation, tab switch
InstantContent reveals (≤80ms)Lexicon entry appears on word tap — no ceremony
ChoreographedPanel transitionsStudy panel expands, constellation zooms, bottom sheet rises

Easing Curves

TokenValueUsage
motion.easing.springcubic-bezier(0.34, 1.56, 0.64, 1)Micro-interactions, active states
motion.easing.smoothInOutcubic-bezier(0.4, 0, 0.2, 1)Panel transitions (Material standard)
motion.easing.deceleratecubic-bezier(0.0, 0.0, 0.2, 1)Elements entering the screen
motion.easing.acceleratecubic-bezier(0.4, 0.0, 1, 1)Elements leaving the screen

Duration Scale

TokenDurationUsage
motion.duration.instant≤80msContent reveals, lexicon bubbles, inline expansions
motion.duration.fast120msMicro-interactions, state changes, highlights
motion.duration.standard220msPanel slides, tab transitions, sheet expansions
motion.duration.deliberate350msConstellation zoom, full-screen mode transition
motion.duration.slow500msOnboarding, first-time educational animations

Specific Motion Behaviors

Text Highlight Creation

Color washes in from the tap point outward, like ink spreading into paper.

  • Duration: 180ms
  • Easing: spring

Bookmark Double-Tap

Small bookmark icon materializes at the verse number, scales up to 1.3× then settles at 1.0×, followed by a soft ripple.

  • Duration: 260ms total

Inline Lexicon Expansion

Content below the tapped word pushes down as the bubble expands from 0 height. No fade — purely a height spring animation.

  • Duration: 200ms
  • Easing: spring

Constellation Zoom (Graph View)

Camera pulls back from passage level. Verse text shrinks into a node. Surrounding nodes materialize with staggered 20ms delay per node.

  • Duration: 350ms
  • Easing: smoothInOut

Bottom Sheet Rise

Sheet enters via decelerate curve from below. Handle appears first, then content reveals.

  • Duration: 280ms
  • Easing: decelerate

Chapter Navigation (Page Turn)

Horizontal slide. Old chapter exits left via accelerate, new chapter enters right via decelerate.

  • Duration: 220ms
  • Accompanied by subtle haptic

Command Palette Open

Appears from center-top with slight scale (0.96 → 1.0) and fade (0 → 1).

  • Duration: 160ms
  • Easing: spring

Reduced Motion

All animations respect prefers-reduced-motion (iOS/Android system setting + in-app toggle):

NormalReduced Motion
Spring animationsInstant state change
Directional transitionsCrossfade (opacity only)
Constellation zoomCut with crossfade
Page turn slideCrossfade

See Accessibility for full details.

Haptics

Haptics are used in exactly three places. They are never used for decorative or gamification purposes.

Pattern 1: Gesture Recognition Confirmation

PropertyValue
TypeSelection haptic (light)
TriggerLong-press recognition moment on verse number
TimingExactly at the gesture threshold crossing
StrengthLight

Pattern 2: Action Confirmation

PropertyValue
TypeImpact haptic (medium)
TriggerHighlight created, bookmark set, note saved
TimingOn action completion, not on button press
StrengthMedium

Pattern 3: Chapter Navigation

PropertyValue
TypePage turn haptic (light)
TriggerChapter boundary crossed during scroll/swipe
TimingAt the frame when new chapter header becomes visible
StrengthLight — barely perceptible, like a physical page
note

No haptics during reading. No haptics for navigation between app sections. No haptic feedback on taps.