Files
gh-tachyon-beep-skillpacks-…/skills/using-ux-designer/interaction-design-patterns.md
2025-11-30 08:59:35 +08:00

1133 lines
32 KiB
Markdown

# Interaction Design Patterns
## Overview
This skill provides **The Interaction Clarity Framework**, a systematic 5-dimension methodology for designing clear, responsive, and comfortable user interactions. Use this when evaluating or designing interactive elements, feedback systems, button states, animations, or touch-based interfaces.
**Core Principle**: Users should never wonder if something is interactive, whether their action registered, or what state the system is in. Clear interactions build trust and efficiency.
## When to Use
Load this skill when:
- Designing button states, touch targets, or interactive elements
- User mentions: "feedback", "loading states", "micro-interactions", "animations"
- Evaluating interaction clarity ("Does this feel responsive?")
- Specifying interaction behaviors (hover, active, disabled states)
- Designing gesture-based interfaces (swipe, tap, long-press)
- Touch target sizing issues (too small, accidental taps)
- Creating animations or transitions
- Defining system feedback patterns
**Don't use for**: Visual hierarchy alone (use visual-design-foundations), navigation structure (use information-architecture)
## The Interaction Clarity Framework
A systematic 5-dimension evaluation model for interaction design:
1. **AFFORDANCES** - Users understand what's interactive
2. **FEEDBACK** - System responds to actions (<100ms)
3. **MICRO-INTERACTIONS** - Purposeful animations (150-300ms)
4. **STATE CHANGES** - Current state is visually distinct
5. **TOUCH TARGETS & GESTURES** - Physically comfortable (44x44pt+)
## Dimension 1: AFFORDANCES
**Purpose:** Make interactive elements obvious and discoverable
### Evaluation Questions
- Can users immediately identify what's clickable/tappable?
- Do interactive elements look different from static content?
- Are platform conventions followed (links colored, buttons raised)?
- Does the cursor change on hover (desktop)?
- Do elements have visual weight appropriate to their interactivity?
### Patterns (Good Examples)
**Primary Buttons:**
- Visual weight (filled background, contrasting color)
- Subtle shadow or border for depth
- Clear label with action verb ("Save", "Submit", "Continue")
- Adequate padding (12-16px horizontal, 8-12px vertical)
- Hover state shows interactivity (brightness change, shadow increase)
**Secondary Buttons:**
- Less visual weight than primary (outlined vs filled)
- Still clearly interactive (not flat text)
- Same size targets as primary (even if visually lighter)
**Links:**
- Colored text (blue standard, or brand color)
- Underline on hover or persistent
- Cursor changes to pointer
- Distinct from body text (color and/or weight)
**Interactive Icons:**
- Consistent sizing (24px minimum for touch)
- Hover/focus states (background circle, color change)
- Tooltips on hover (desktop) or long-press (mobile)
- Clear visual boundary (not floating in white space)
**Form Fields:**
- Border or background distinguishes from static text
- Focus state with border color change
- Placeholder text lighter than input text
- Label positioned clearly (above or floating)
### Anti-Patterns (Problematic Examples)
**Flat Text Buttons:**
- Plain text with no visual weight
- No hover state or indication
- Looks like static label
- Users miss the interactive opportunity
**False Affordances:**
- Static elements styled like buttons (shadows, borders)
- Decorative elements that look clickable
- Creates frustration when clicks don't work
**Mystery Interactions:**
- Icons without labels or tooltips
- No indication of hover/focus
- Users must guess what happens
**Inconsistent Affordances:**
- Some buttons filled, some text-only with no pattern
- Links sometimes underlined, sometimes not
- Creates cognitive load as users relearn each screen
### Platform-Specific Affordances
**Web (Desktop):**
- Cursor changes (pointer for interactive, default for static)
- Hover states reveal interactivity
- Underlined links standard
**Mobile (iOS/Android):**
- No hover states (touch-only)
- Visual affordances must be permanent (not hover-dependent)
- Platform conventions (iOS segmented controls, Android FABs)
- Haptic feedback option (tactile confirmation)
**Desktop Software:**
- Menu items highlight on hover
- Keyboard focus indicators (2px outline)
- Right-click context menus (subtle cue on hover)
**Games:**
- Cursor changes for interactive objects
- Outline glow on hover (world objects)
- Button prompts for gamepad ("Press A to interact")
## Dimension 2: FEEDBACK
**Purpose:** Confirm user actions with immediate, appropriate responses
### Evaluation Questions
- Does the user see feedback within 100ms of action?
- Is loading state shown for operations >1 second?
- Are errors explained clearly with actionable fixes?
- Is success confirmed explicitly?
- Does feedback match action magnitude (subtle for minor, prominent for major)?
### Feedback Timing Guidelines
**Immediate (<100ms):**
- Button press (depress visual)
- Toggle switch flip
- Checkbox check/uncheck
- Text input (character appears)
- Drag start (element lifts)
**Short Delay (100ms-1s):**
- Form validation (after blur)
- Search autocomplete
- Hover tooltips (300ms delay prevents flicker)
- Menu open/close animations
**Long Operations (>1s):**
- Loading spinner or progress bar
- Percentage complete (if calculable)
- Optimistic UI (assume success, show immediately)
- Background processing indicator
**Error Timing:**
- Inline validation (after field blur, not on every keystroke)
- Form submission errors (immediate, at top of form)
- Toast notifications (appear immediately, auto-dismiss 3-5s)
### Patterns (Good Examples)
**Button Press Feedback:**
- Visual depress (shadow reduces, brightness changes)
- Disabled state immediately on click (prevent double-submit)
- Loading spinner replaces button text
- Success state (checkmark icon, green color, 2s duration)
**Form Validation:**
- Error state: Red border, error icon, error message below field
- Error message explains problem: "Email must include @"
- Success state: Green border, checkmark icon (optional)
- Real-time hints: "Password strength: Weak → Strong"
**Loading States:**
- Spinner for indeterminate waits (<10s expected)
- Progress bar for determinate (shows percentage)
- Skeleton screens (show content structure while loading)
- Optimistic UI (show result immediately, rollback if fails)
**Success Confirmation:**
- Toast notification: "Settings saved successfully" (3s auto-dismiss)
- Inline message: Green banner with checkmark
- Visual transition: Item moves to "completed" section
- Subtle animation: Brief green flash on save icon
**Error Messages:**
- Clear problem statement: "Unable to connect to server"
- Actionable fix: "Check your internet connection and try again"
- Retry button or manual dismiss
- Not technical jargon: "Error 500" → "Something went wrong on our end"
**Drag & Drop Feedback:**
- Item lifts on grab (shadow increases, opacity 90%)
- Drop zones highlight when dragging over (border, background color)
- Snap animation when dropped (ease-out 200ms)
- Cancel if dropped outside zone (return to original position)
### Anti-Patterns (Problematic Examples)
**No Feedback:**
- Button doesn't depress on click
- User clicks again thinking it didn't work
- Results in duplicate submissions, frustration
**Generic Errors:**
- "Something went wrong" (no explanation)
- "Error 500" (technical jargon)
- No guidance on how to fix
**Slow Feedback:**
- Delayed button press visual (>200ms)
- Feels sluggish, unresponsive
- Users lose confidence in system
**No Loading Indicator:**
- Blank screen during load
- User wonders if system is frozen
- May leave or refresh, interrupting process
**Success Without Confirmation:**
- Form submits but no feedback
- User unsure if it worked
- May submit again or leave uncertain
### Platform-Specific Feedback
**Web:**
- Toast notifications (top-right or bottom-center)
- Inline validation messages
- Loading spinners (CSS animations)
- Browser native feedback (form validation bubbles)
**Mobile:**
- Haptic feedback (vibration on button press)
- Bottom sheets for confirmations
- Snackbars (Android Material Design)
- Pull-to-refresh feedback (iOS)
**Desktop:**
- System notifications (OS-level)
- Status bar updates (bottom of window)
- Progress in dock/taskbar icon
- Modal dialogs for critical confirmations
**Games:**
- HUD updates (health, score, ammo)
- Visual effects (hit sparks, damage numbers)
- Audio feedback (essential in fast action)
- Screen shake for major impacts
## Dimension 3: MICRO-INTERACTIONS
**Purpose:** Delight users and clarify relationships through purposeful animations
### Evaluation Questions
- Are animations purposeful (not gratuitous decoration)?
- Is timing appropriate (150-300ms for most UI)?
- Do transitions feel natural (easing curves)?
- Do animations hint at spatial relationships?
- Can users disable animations (accessibility)?
### Animation Timing Guidelines
**UI Transitions (150-300ms):**
- Modal open/close: 200ms
- Dropdown menu: 150ms
- Tooltip appear: 200ms
- Page transitions: 250ms
- Accordion expand: 300ms
**Micro-Interactions (100-200ms):**
- Button hover: 100ms
- Toggle switch: 150ms
- Checkbox check: 100ms
- Icon morph: 200ms
**Too Fast (<100ms):**
- Feels abrupt, jarring
- Users miss the transition
- No sense of continuity
**Too Slow (>500ms):**
- Feels sluggish
- Slows users down
- Creates impatience
**Long Animations (>500ms):**
- Only for skeleton loading screens
- Or onboarding/tutorial animations
- User must be able to skip or dismiss
### Easing Curves
**Ease-Out (Deceleration):**
- Use for: Entering animations (modals, tooltips)
- Effect: Fast start, slow finish
- Feels: Natural, settling into place
- CSS: `cubic-bezier(0.0, 0.0, 0.2, 1)`
**Ease-In (Acceleration):**
- Use for: Exiting animations (closing, dismissing)
- Effect: Slow start, fast finish
- Feels: Quick departure
- CSS: `cubic-bezier(0.4, 0.0, 1, 1)`
**Ease-In-Out (Acceleration then Deceleration):**
- Use for: Movement between states (repositioning)
- Effect: Smooth throughout
- Feels: Graceful, continuous
- CSS: `cubic-bezier(0.4, 0.0, 0.2, 1)`
**Linear (No Easing):**
- Use for: Loading spinners, progress bars
- Effect: Constant speed
- Feels: Mechanical (intentionally)
- CSS: `linear`
### Patterns (Good Examples)
**Modal Entry:**
- Fade-in background overlay (200ms ease-out)
- Scale up modal from 90% to 100% (200ms ease-out)
- Slight upward movement (20px)
- Combined effect: Smooth, attention-grabbing
**Dropdown Menu:**
- Expand from button (origin point clear)
- Fade + scale (150ms ease-out)
- Stagger items (20ms delay each) for cascade effect
**Loading Skeleton:**
- Shimmer effect passes over grey boxes
- Continuous animation (1500ms linear loop)
- Indicates "still loading" without blocking
**Toggle Switch:**
- Circle slides across track (150ms ease-out)
- Background color changes (150ms)
- Both animated simultaneously
**Accordion Expand:**
- Content height animates (300ms ease-out)
- Icon rotates 90° (300ms ease-out)
- Smooth reveal, not abrupt pop
**Pull to Refresh:**
- Spinner rotates continuously
- Page slides down as user pulls
- Elastic bounce when released (iOS)
**Hover Lift:**
- Card elevates on hover (shadow increases, slight Y translation)
- 200ms ease-out
- Subtle but clear interactivity
**Icon Morph:**
- Hamburger → X (menu icon)
- SVG path animation (200ms ease-out)
- Clear transformation, not abrupt swap
### Anti-Patterns (Problematic Examples)
**Gratuitous Animation:**
- Every element bounces on page load
- Slows users, adds no value
- Creates distraction, not delight
**Overly Long Animations:**
- Modal takes 1 second to open
- Users feel impatient
- Slows workflow significantly
**Animation Without Purpose:**
- Random spinning or bouncing
- Doesn't clarify relationships
- Pure decoration that distracts
**Inconsistent Timing:**
- Some modals 200ms, others 500ms
- Creates uneven, sloppy feel
- Breaks user expectations
**No Ability to Disable:**
- Critical for motion sensitivity
- WCAG requirement (prefers-reduced-motion)
- Can cause vestibular disorders
**Animations That Block:**
- Must watch animation complete before interacting
- Users can't skip or dismiss
- Creates forced waiting
### Accessibility Considerations
**Respect prefers-reduced-motion:**
```css
@media (prefers-reduced-motion: reduce) {
* {
animation-duration: 0.01ms !important;
transition-duration: 0.01ms !important;
}
}
```
**Avoid:**
- Parallax scrolling (motion sickness)
- Constant background motion
- Flashing/strobing (seizure risk)
- Rapid color changes
**Provide:**
- Setting to disable animations
- Pause controls for auto-playing content
- Skip buttons for long animations
## Dimension 4: STATE CHANGES
**Purpose:** Make current state immediately obvious and visually distinct
### Evaluation Questions
- Can users identify the current state at a glance?
- Is selected/active state high contrast?
- Are disabled states obvious (grayed out)?
- Is progress shown for multi-step flows?
- Do states persist across navigation?
### Standard State Specifications
**Button States:**
**Default (Resting):**
- Normal color and styling
- Cursor: pointer (desktop)
- No special indication
**Hover (Desktop Only):**
- Brightness +10% or shadow increase
- Cursor: pointer
- Transition: 100ms ease-out
**Focus (Keyboard Navigation):**
- 2px outline (browser default or custom color)
- Persistent until blur
- High contrast (visible on all backgrounds)
- Never remove outline without replacement
**Active (Pressed):**
- Brightness -10% or shadow decrease
- Slight scale down (98%)
- Immediate feedback (no transition delay)
**Disabled:**
- Opacity 40-50% or gray color
- Cursor: not-allowed
- No hover/active states
- Clearly non-interactive
**Loading:**
- Disabled state + spinner
- Button text hidden or replaced
- Prevents multiple clicks
- Spinner animates continuously
**Success (Temporary):**
- Green color + checkmark icon
- Duration: 2 seconds
- Then return to default or disabled
- Confirms completion
**Error (Temporary):**
- Red color + error icon
- Duration: Persistent until user acts
- Error message nearby
- Remains interactive (user can retry)
### Form Input States
**Default:**
- Border: 1px solid #ccc
- Background: white or light gray
- Placeholder: #999
- Cursor: text
**Focus:**
- Border: 2px solid brand color
- Shadow: 0 0 0 3px brand-color-20%
- Placeholder fades or disappears
- Cursor: text blinking
**Filled (Valid):**
- Border: 1px solid #ccc or green
- Optional: Green checkmark icon
- Input text: #000
**Error:**
- Border: 2px solid red
- Error message below (red text)
- Error icon inside or next to field
- Focus: Red border remains
**Disabled:**
- Background: #f5f5f5
- Border: #ddd
- Text: #999
- Cursor: not-allowed
### Navigation States
**Default (Unselected):**
- Normal text color
- No background highlight
**Hover:**
- Background: Light gray
- Text color: Slightly darker
**Active/Selected:**
- Background: Brand color or darker gray
- Text: White or high contrast
- Bold weight or indicator (left border, icon)
**Visited (Links Only):**
- Purple or muted brand color
- Indicates "already been here"
### Toggle/Checkbox States
**Unchecked:**
- Empty box or gray background
- Border visible
**Checked:**
- Checkmark icon or filled circle
- Brand color background
- Smooth transition (100ms)
**Indeterminate (Tri-state):**
- Dash icon (some children checked)
- Used in hierarchical lists
### Progress Indicators
**Multi-Step Forms:**
- Stepper: "Step 2 of 5"
- Visual progress: Filled circles or bar
- Current step highlighted
- Completed steps: Checkmark
- Future steps: Gray or outline only
**Loading Progress:**
- Percentage: "Loading 45%"
- Progress bar fills left-to-right
- Smooth animation (not jumpy)
**Status Badges:**
- "Draft" (gray), "Published" (green), "Archived" (blue)
- Color-coded with icon
- Consistent placement
### Patterns (Good Examples)
**Tab Navigation:**
- Default: Gray text, no underline
- Hover: Darker text
- Active: Brand color, bottom border (3px), bold weight
- Smooth underline animation (200ms)
**Toggle Switch:**
- Off: Gray background, circle left
- On: Brand color background, circle right
- Smooth slide animation (150ms)
- Clear on/off state at glance
**Radio Button Group:**
- Selected: Filled circle, brand color
- Unselected: Empty circle, gray border
- Only one selected at a time
**Accordion:**
- Collapsed: Down arrow icon
- Expanded: Up arrow icon, content visible
- Smooth height animation (300ms)
**Drag & Drop Items:**
- Default: Normal state
- Grabbing: Cursor changes, item lifts (shadow)
- Dragging: Opacity 90%, follows cursor
- Drop zone: Highlighted border/background
- Dropped: Snap into place (200ms ease-out)
### Anti-Patterns (Problematic Examples)
**Subtle State Differences:**
- Active tab only 5% darker (not noticeable)
- Users can't tell which tab is current
**No Disabled State:**
- Grayed text but still interactive
- Users click and get error
- Should be cursor: not-allowed
**Lost Progress:**
- Multi-step form refreshes, progress lost
- No indication of current step
- Users lose place and confidence
**No Visual Feedback:**
- Button clicked but no active state
- User unsure if click registered
**Inconsistent States:**
- Some buttons show loading, others don't
- Creates uneven experience
### Platform-Specific States
**iOS:**
- Segmented controls (grouped buttons)
- Large titles (bold 34pt)
- Haptic feedback on state change
**Android:**
- Ripple effect on tap (Material Design)
- FAB (Floating Action Button) for primary action
- Bottom sheets for contextual actions
**Web:**
- Focus visible for keyboard nav
- Hover states (desktop only)
- Active states on click
**Desktop Software:**
- Selected items in lists (full row highlight)
- Menu items (hover background)
- Focus indicators (keyboard nav essential)
## Dimension 5: TOUCH TARGETS & GESTURES
**Purpose:** Ensure interactions are physically comfortable and discoverable
### Evaluation Questions
- Are touch targets at least 44x44px (iOS) or 48x48dp (Android)?
- Is adequate spacing between tappable elements (8px minimum)?
- Are gestures discoverable and teachable?
- Do gestures follow platform conventions?
- Can users complete tasks with one hand (mobile)?
### Touch Target Sizing
**Minimum Sizes:**
- **iOS (Apple HIG):** 44x44 points
- **Android (Material Design):** 48x48 dp
- **Web (Touch):** 48x48 pixels
- **Desktop (Mouse):** 32x32 pixels acceptable (more precise)
**Optimal Sizes:**
- **Primary buttons:** 48-56px height
- **Secondary buttons:** 40-48px height
- **Icon buttons:** 48x48px minimum (larger if alone)
- **List items:** 48-72px height (more space = easier tap)
- **Form inputs:** 48px height minimum
**Spacing Between Targets:**
- **Minimum:** 8px between tappable elements
- **Optimal:** 16px spacing (reduces accidental taps)
- **Dense UIs:** 8px acceptable if targets are distinct
- **Forms:** 16-24px spacing between fields
### Thumb Zones (Mobile)
**Most Reachable (One-Handed):**
- Bottom third of screen
- Center of screen
- Thumb's natural arc (bottom-center to middle-right for right hand)
**Hard to Reach:**
- Top corners (especially top-left for right hand)
- Opposite side (top-right for left hand)
**Design Implications:**
- **Primary actions:** Bottom navigation, bottom buttons
- **Navigation:** Bottom tabs (iOS), bottom nav (Android)
- **Secondary actions:** Top (back button, settings)
- **Content:** Top and middle (scrollable)
### Standard Gestures
**Universal Gestures:**
- **Tap:** Select, activate (like mouse click)
- **Double-tap:** Zoom in (maps, images)
- **Long-press:** Context menu, additional options
- **Swipe:** Navigate (swipe back), scroll, pan
- **Pinch:** Zoom in/out (two-finger spread/pinch)
- **Drag:** Move items, reorder lists
**Platform-Specific Gestures:**
**iOS:**
- **Swipe back:** Left edge swipe = back navigation (system-wide)
- **Swipe actions:** Swipe left/right on list items = actions
- **Pull to refresh:** Pull down on scrollable content
- **3D Touch/Haptic Touch:** Force press for quick actions (older devices)
**Android:**
- **Swipe back:** Swipe from left edge or back button
- **Swipe to dismiss:** Notifications, dialogs
- **Pull to refresh:** Pull down (Material Design)
- **Edge swipe:** Navigation drawer (left edge)
**Web (Touch):**
- **Scroll:** Vertical swipe
- **Zoom:** Pinch or double-tap (if enabled)
- **Context menu:** Long-press (may trigger text selection)
### Patterns (Good Examples)
**Bottom Navigation (Mobile):**
- 3-5 tabs at bottom
- 56-72px height
- Icons + labels (or icon-only if 3 items)
- Easy thumb reach
**Floating Action Button (Android):**
- 56dp diameter (large touch target)
- Bottom-right corner
- Primary action for screen
- Elevated (shadow), branded color
**Swipe Actions (List Items):**
- Swipe left: Delete (red)
- Swipe right: Archive (blue)
- Icons reveal as user swipes
- Can swipe fully to auto-trigger or partial to show buttons
**Pull to Refresh:**
- Pull down on scrollable content
- Spinner appears at top
- Elastic bounce on release
- Standard convention (users expect it)
**Large Tap Targets:**
- Full-width list items (not just icon)
- Entire card tappable (not just title)
- Generous padding (16-24px)
- Clear tap feedback (ripple, highlight)
**Gesture Hints:**
- Faint swipe icon on first use
- Tutorial overlay: "Swipe right to see more"
- Visual affordances (visible edge of next screen)
### Anti-Patterns (Problematic Examples)
**Tiny Touch Targets:**
- 30x30px buttons (too small)
- Causes accidental taps, frustration
- Especially bad for users with motor difficulties
**Crowded Interfaces:**
- Buttons 2px apart
- "Fat finger" problem (tap wrong button)
- Requires precision users can't provide
**Undiscoverable Gestures:**
- Custom gestures with no hint
- Users never discover features
- Essential actions hidden behind gestures
**Conflicting Gestures:**
- Swipe right does different things on different screens
- Inconsistency creates confusion
**Top-Heavy Mobile Design:**
- All actions at top of screen
- Requires two-handed use or thumb stretching
- Ignores ergonomics
**No Gesture Alternative:**
- Only way to delete is swipe (no button)
- Some users may not discover gesture
- Always provide visible alternative
### Gesture Discovery Patterns
**Progressive Disclosure:**
1. First use: Show tutorial overlay
2. Subsequent uses: Subtle hint (fade after 2-3 uses)
3. Experienced users: No hints, fast workflow
**Visual Cues:**
- Visible edge of next screen (hints swipe)
- Icon handles on draggable items
- Bounce animation suggests "pull here"
**Empty States:**
- "Swipe left on items to delete"
- Teaches gesture when no content to interfere
**Settings/Help:**
- Gesture guide in settings
- Helps users discover advanced gestures
### Accessibility Considerations
**Motor Accessibility:**
- Large targets (48px+) help everyone
- Adequate spacing (16px) reduces errors
- Avoid hover-only actions (mobile has no hover)
**Gesture Alternatives:**
- Always provide button alternative to gestures
- Some users can't perform complex gestures
- Voice control users need tappable targets
**Timing:**
- No tight timing requirements (no "double-tap within 300ms")
- Allow slow, deliberate interactions
- Long-press timeout: 500ms (not shorter)
## Cross-Platform Interaction Patterns
### Web Application Interactions
**Hover States:**
- Desktop only (no hover on touch)
- Reveal additional actions on hover
- Tooltips after 300ms delay
- Cursor changes (pointer, grab, not-allowed)
**Keyboard Shortcuts:**
- Cmd/Ctrl+S: Save
- Cmd/Ctrl+Z: Undo
- Tab: Next field
- Enter: Submit form
- Esc: Close modal
**Form Interactions:**
- Inline validation (after blur)
- Autocomplete for common inputs
- Clear/reset buttons
- Keyboard navigation (Tab, Shift+Tab)
### Mobile Application Interactions
**Touch-First Design:**
- No hover states (all affordances visible)
- Large touch targets (48px+)
- Platform gestures (swipe back, pull to refresh)
- Bottom-heavy layout (thumb zone)
**Haptic Feedback:**
- Button press (light tap)
- Toggle switch (light tap)
- Error (notification haptic)
- Success (success haptic)
**Native Patterns:**
- iOS: Segmented controls, action sheets, large titles
- Android: FABs, bottom sheets, ripple effects, snackbars
### Desktop Software Interactions
**Keyboard-First:**
- All actions accessible via keyboard
- Visible focus indicators
- Keyboard shortcuts (Cmd+N, Cmd+O, etc.)
- Mnemonics (Alt+F for File menu)
**Mouse Precision:**
- Smaller targets acceptable (32px)
- Right-click context menus
- Drag-and-drop between windows
- Hover tooltips (immediate)
**Multi-Window:**
- Window snapping (drag to edge)
- Panel management (dock, resize, collapse)
- Cross-window drag-and-drop
### Game Interactions
**Input Method:**
- Gamepad: Radial menus, D-pad navigation
- Keyboard+Mouse: Click, hotkeys (1-9), WASD movement
- Touch: Virtual joysticks, large buttons
**Feedback:**
- Visual (hit sparks, damage numbers)
- Audio (critical in games)
- Haptic (controller vibration)
- Screen effects (shake, flash)
**Responsiveness:**
- <16ms for competitive games (60fps)
- <33ms for casual games (30fps)
- Immediate feedback even if network delayed
- Optimistic UI (client-side prediction)
## Practical Application
### Step-by-Step Usage
**For Critique Mode:**
1. Identify all interactive elements in design
2. Evaluate against all 5 dimensions systematically
3. Note issues: unclear affordances, missing feedback, tiny targets
4. Prioritize by user impact (critical vs nice-to-have)
5. Provide specific recommendations with examples
**For Specification Mode:**
1. Define all interaction states (default, hover, focus, active, disabled, loading)
2. Specify timing for animations and transitions (150-300ms)
3. Detail feedback mechanisms (spinners, messages, state changes)
4. Size touch targets (48x48px minimum)
5. Document gestures and keyboard shortcuts
### Example Evaluation
**Scenario:** Reviewing a mobile checkout button
**Dimension 1 - Affordances:** ✓ Pass
- Green filled button, clear label "Complete Purchase"
- High visual weight, obvious primary action
**Dimension 2 - Feedback:** ✗ Fail
- No loading state on tap
- No success confirmation
- **Recommendation:** Add loading spinner on tap, disable button, show success message
**Dimension 3 - Micro-interactions:** ⚠ Warning
- No press animation
- **Recommendation:** Add subtle scale-down (98%) on active state, 100ms
**Dimension 4 - State Changes:** ✗ Fail
- Disabled state not visually distinct (same color)
- **Recommendation:** Change to opacity 50% when disabled, cursor: not-allowed
**Dimension 5 - Touch Targets:** ✓ Pass
- 56px height, 48px meets minimum
- Full-width button, easy to tap
**Priority Fixes:**
1. Add loading/disabled states (critical - prevents double-submit)
2. Add success confirmation (high - user needs confidence)
3. Add press animation (low - polish, not critical)
## Interaction Pattern Library
### Button Interaction Specs
**Primary Button (Full Spec):**
```
Default:
- Background: Brand color (#0066CC)
- Text: White, 16px, 600 weight
- Padding: 12px 24px
- Height: 48px
- Border-radius: 8px
- Shadow: 0 2px 4px rgba(0,0,0,0.1)
Hover (desktop):
- Background: Lighter brand color (#0077DD)
- Shadow: 0 4px 8px rgba(0,0,0,0.15)
- Transition: all 100ms ease-out
- Cursor: pointer
Focus (keyboard):
- Outline: 2px solid #0066CC
- Outline-offset: 2px
Active (pressed):
- Background: Darker brand color (#0055BB)
- Shadow: 0 1px 2px rgba(0,0,0,0.1)
- Transform: scale(0.98)
- Transition: none (immediate)
Disabled:
- Background: #CCCCCC
- Text: #666666
- Shadow: none
- Cursor: not-allowed
- Opacity: 0.6
Loading:
- Same as disabled
- Plus: Spinner icon (16px, white, centered)
- Text: "Processing..." or hidden
```
### Form Input Interaction Specs
**Text Input (Full Spec):**
```
Default:
- Border: 1px solid #CCCCCC
- Background: White
- Padding: 12px 16px
- Height: 48px
- Font: 16px (prevents zoom on iOS)
- Placeholder: #999999
Focus:
- Border: 2px solid #0066CC
- Box-shadow: 0 0 0 3px rgba(0,102,204,0.1)
- Placeholder: fade out or move up (floating label)
Filled (valid):
- Border: 1px solid #CCCCCC
- Optional: 1px solid #00CC66 (green)
- Checkmark icon: inside right (16px)
Error:
- Border: 2px solid #CC0000
- Box-shadow: 0 0 0 3px rgba(204,0,0,0.1)
- Error message: Below field, #CC0000, 14px
- Error icon: inside right (16px)
Disabled:
- Background: #F5F5F5
- Border: 1px solid #DDDDDD
- Text: #999999
- Cursor: not-allowed
```
### Modal Interaction Specs
**Modal Dialog (Full Spec):**
```
Entry Animation:
- Backdrop: Fade in (opacity 0 → 0.5, 200ms ease-out)
- Modal: Scale up (90% → 100%, 200ms ease-out)
- Modal: Translate up (0 → -20px, 200ms ease-out)
- Modal: Fade in (opacity 0 → 1, 200ms ease-out)
Exit Animation:
- Backdrop: Fade out (200ms ease-in)
- Modal: Scale down (100% → 95%, 200ms ease-in)
- Modal: Fade out (200ms ease-in)
Interactions:
- Backdrop click: Close modal
- ESC key: Close modal
- Focus trap: Tab cycles within modal
- Close button: Top-right, 32x32px minimum
Positioning:
- Centered horizontally and vertically
- Max-width: 600px (desktop)
- Full-width minus 32px margin (mobile)
- Scrollable if content exceeds viewport
```
## Red Flags & Anti-Patterns
### Critical Issues (Fix Immediately)
1. **Touch targets <40px** - Unusable on mobile, accessibility fail
2. **No loading feedback** - Users will click multiple times
3. **Generic error messages** - Users can't fix the problem
4. **Disabled without visual indication** - Users confused why click doesn't work
5. **No keyboard navigation** - Excludes keyboard-only users, WCAG fail
### Major Issues (Fix Soon)
6. **Slow animations (>500ms)** - Users feel impatience
7. **No success confirmation** - Users uncertain if action completed
8. **Inconsistent state styling** - Creates cognitive load
9. **Hover-only critical actions** - Fails on mobile/touch devices
10. **Tiny spacing between targets** - Accidental taps, frustration
### Minor Issues (Nice to Fix)
11. **No micro-interactions** - Feels less polished
12. **Linear easing** - Feels mechanical, not natural
13. **Missing focus indicators** - Keyboard nav unclear (but browser defaults exist)
14. **No haptic feedback** - Missed opportunity for polish (mobile)
15. **Generic spinner** - Missed branding opportunity
## Related Skills
**Core UX Skills:**
- `lyra/ux-designer/visual-design-foundations` - Visual feedback, button styling, state colors
- `lyra/ux-designer/accessibility-and-inclusive-design` - Keyboard navigation, focus indicators, touch target sizing
- `lyra/ux-designer/ux-fundamentals` - Interaction design principles, affordances, feedback concepts
**Platform Extensions:**
- `lyra/ux-designer/mobile-design-patterns` - Touch targets (44x44pt iOS, 48x48dp Android), gestures, platform interactions
- `lyra/ux-designer/web-application-design` - Keyboard shortcuts, hover states, responsive interactions
- `lyra/ux-designer/desktop-software-design` - Keyboard-first workflows, focus management, window interactions
- `lyra/ux-designer/game-ui-design` - Gamepad navigation, immediate feedback, performance-optimized interactions
**Cross-Faction:**
- `ordis/security-architect/threat-modeling` - Secure interaction patterns (prevent double-submit, rate limiting UI)
## Additional Resources
**Animation Timing References:**
- Material Design Motion: 150-300ms standard
- iOS Human Interface Guidelines: Fast animations (<300ms)
- Google Material: Ease-out for entrances, ease-in for exits
**Touch Target Standards:**
- Apple HIG: 44x44pt minimum
- Material Design: 48x48dp minimum
- WCAG 2.1 AA: 44x44px minimum (Level AAA: larger)
**Gesture Standards:**
- iOS Human Interface Guidelines: Gestures chapter
- Material Design: Gestures documentation
- Platform conventions trump custom gestures
**Accessibility Standards:**
- WCAG 2.1 SC 2.5.5: Target Size (44x44px minimum, Level AAA)
- WCAG 2.1 SC 2.2.4: Interruptions (users can control timing)
- WCAG 2.1 SC 2.3.3: Animation from Interactions (can be disabled)