# Bento 2.0 Motion Engine
Architecture for modern SaaS dashboards and feature sections. Goes beyond static cards — enforces a "Vercel-core meets Dribbble-clean" aesthetic with perpetual physics.
Use when generating: SaaS dashboards, feature showcase grids, marketing bento sections, product landing pages with interactive demos.
---
## Core Design Philosophy
**Aesthetic:** High-end, minimal, functional. Every card feels alive.
**Palette:**
- Background: `#f9fafb` (light) or `#050505` (dark)
- Cards: pure white `#ffffff` (light) / vantablack with `bg-white/5` (dark)
- Card borders: `border border-slate-200/50` (light) / `border border-white/10` (dark)
**Surfaces:**
- All major containers use `rounded-[2.5rem]`
- Diffusion shadow: `shadow-[0_20px_40px_-15px_rgba(0,0,0,0.05)]` — depth without clutter
- Card titles and descriptions sit **outside and below** the card (gallery-style presentation)
- Card interior: generous `p-8` or `p-10` padding
**Typography:**
- Font stack: `Geist`, `Satoshi`, or `Cabinet Grotesk` only
- Header tracking: `tracking-tight`
- Never Inter in a Bento context
**Double-Bezel structure for premium cards:**
- Outer shell: `bg-black/5 ring-1 ring-black/5 p-1.5 rounded-[2rem]`
- Inner core: own background + `shadow-[inset_0_1px_1px_rgba(255,255,255,0.15)]` + `rounded-[calc(2rem-0.375rem)]`
---
## Animation Engine Specs
All cards MUST contain **Perpetual Micro-Interactions**. The dashboard must always feel alive.
**Spring Physics (no linear easing):**
```js
// Use for all interactive elements
{ type: "spring", stiffness: 100, damping: 20 }
```
**Layout Transitions:**
- Use Framer Motion `layout` and `layoutId` props for smooth reordering, resizing, and shared element transitions
**Infinite Loops:**
- Every card has an active state that loops infinitely: Pulse, Typewriter, Float, or Carousel
**Performance isolation (critical):**
- Every perpetual animation MUST be wrapped in `React.memo`
- Extract each animated card as its own isolated leaf `'use client'` component
- Never trigger re-renders in the parent layout
**AnimatePresence:**
- Wrap all dynamic lists — enables proper enter/exit animations
---
## Grid Structure
Typical layout: Row 1 = 3 columns | Row 2 = 2 columns (70/30 split)
```jsx
{/* Row 1: 3 equal cards */}
{/* Row 2: wide data stream + contextual UI */}
```
Mobile: all cards collapse to `grid-cols-1` with `gap-6`. No horizontal overflow.
---
## The 5 Card Archetypes
### 1. Intelligent List
A vertical stack of items with an infinite auto-sorting loop.
- Items swap positions using `layoutId` — simulates AI prioritizing tasks in real-time
- Smooth position swaps on a ~3s interval
- Spring-based position transitions for a weighted, physical feel
- Use case: task lists, priority queues, leaderboards
### 2. Command Input
A search/AI bar with a multi-step Typewriter Effect.
- Cycles through 3-5 complex prompts
- Blinking cursor between prompts
- "Processing" state: shimmering loading gradient on the input
- On "completion": brief checkmark animation before next cycle
- Use case: AI search demos, command palette teasers
### 3. Live Status
A scheduling or status interface with breathing indicators.
- Status dots with infinite `scale` pulse animation (`1.0 → 1.2 → 1.0`, 2s loop)
- Pop-up notification badge with overshoot spring: appears, stays 3s, vanishes
- Badge entrance: `scale: [0, 1.2, 1]` with overshoot spring physics
- Use case: scheduling UIs, monitoring dashboards, live feed indicators
### 4. Wide Data Stream
A horizontal infinite carousel of data cards or metrics.
- Seamless loop using `x: ["0%", "-50%"]` with duplicate items for continuity
- Speed feels effortless — not urgent, not slow (~20-30s per full cycle)
- Cards show metrics, user avatars, status chips, mini sparklines
- Use case: social proof logos, metric streams, activity feeds
### 5. Contextual UI (Focus Mode)
A document or content view that highlights and reveals tools.
- Staggered text block highlight animation (sequential word/line highlights, 300ms stagger)
- After highlight completes: float-in of a floating action toolbar
- Toolbar entrance: `y: [20, 0]` + `opacity: [0, 1]` with spring, staggered micro-icons
- Toolbar holds 3-5 action icons with individual hover states
- Use case: editor demos, AI annotation tools, document review flows
---
## Pre-Flight Checklist
Before shipping a Bento section:
- [ ] Global state used only to avoid deep prop-drilling, not arbitrarily
- [ ] Mobile layout collapses to single column with `w-full px-4`
- [ ] Full-height sections use `min-h-[100dvh]` not `h-screen`
- [ ] All `useEffect` animations have cleanup functions
- [ ] Empty, loading, and error states provided for each card
- [ ] Generic card borders replaced with spacing/dividers where appropriate
- [ ] Every perpetual animation isolated in its own memoized Client Component
- [ ] No `window.addEventListener('scroll')` — use `whileInView` or `IntersectionObserver`
- [ ] No arbitrary z-index values
- [ ] `backdrop-blur` only on fixed/sticky elements, never scrolling cards