AI CSS Animations

Inbox Triage

A phone inbox on a pale sky stage: a thumb swipes rows to archive, snooze and label, each crossing a visible threshold, while a giant numeral counts unread mail down to zero and a quiet empty state with a paper boat on still water appears.

Written and rendered by AI CSS Animations Oct 16, 2026

Type
prompt
Made with
Claude Opus 5.5 in Claude Code
Built in
HTML/CSS
Topics
Product UI · Phone
What Claude made from the prompt below in Claude Code: one HTML file rendered frame by frame to video. Silent preview.

About this style

Swipe gestures for email arrived with touchscreen phones, letting people archive, snooze or file a message with one sideways stroke. The pattern depends on clear feedback: a colored action and icon revealed behind the row, a visible point where the swipe commits, and a list that closes the gap afterwards. Mail and task apps still use it, often rewarding an emptied list with a calm illustrated empty state.

The prompt

Make a 10-second mobile interface animation: a thumb swipes through an inbox, archiving, snoozing and labelling until unread reaches zero and a calm empty state appears.

<inputs>
If I don't give you something, use the default and don't ask.
- App: default "Stillpost" (mail)
- Messages (sender · subject · action): default Rowan Feld · Invoice #2041 paid · archive; Ottilie Park · Lunch Thursday? · snooze; Build server · Build 1184 passed · archive; Hessa Karim · Contract draft v3 · label Work; Marlow Ito · Photos from the lake · archive. Each gets a short, plain preview line.
- Empty state: default "All caught up." / "Nothing new. Enjoy the quiet."
- Length: default 10 seconds
</inputs>

<direction>
- Palette: stage pale sky #D5E2EC; phone #16191E; screen #FBFBF9; text #1E2A36; muted #6C7783; unread dot #3E6FD8; actions archive #2F9E6B, snooze #E39A2D, label #3E6FD8; art: sun #F2B48A, water #A9C1D6, a white boat with #2C3A4A lines.
- Type: Albert Sans 400–700 in the phone (header 40px, sender 22px, previews 20px); the giant counter in Fraunces 300 (SOFT 100) at 420px.
- Layout: a 448×936 phone at x 1060, y 72; left of it the unread numeral centered on x 600, baseline y 650, over "unread" at 34px. In the screen: "Inbox" over "N unread", search, then 116px rows (unread dot, initials avatar, sender and time, subject, preview).
- Touch: a 56px white circle at 60% with a thin ring, pressing to 88%, moving on thumb arcs.
- Swipes: rows track the touch 1:1 over a white line icon (archive box, clock, tag) on #E6E8E4. At 35% of the width the swipe commits: the action color blooms from the icon (180ms) and the icon pops 1→1.18→1 (cubic-bezier(0.34, 1.56, 0.64, 1)). Right archives, left snoozes, past 65% left turns blue to label. Released rows leave at the thumb's speed (200ms); the slot collapses in 280ms (cubic-bezier(0.2, 0, 0, 1)) and the rows below rise as one block.
- Sheets rise in 0.32s on cubic-bezier(0.32, 0.72, 0, 1) over a 30% scrim; toasts are dark pills. Both counters roll down in 0.4s as each row leaves.
- Empty state in inline SVG: a low sun rising behind a horizon, three water lines drawing outward, a folded paper boat that slides in and bobs on a decaying sine, still by 9.0s.
- Premium feels like a real phone: rows glued to the thumb, a visible threshold, gaps closing in one motion. Cheap is rows fading out, actions without feedback and a celebration burst.
Banned: confetti, rows fading or shrinking away, staggered reflow, rows faster than 3,000 px/s, copied OS icons or app names, emoji, anything flashing more than 3 times per second.
</direction>

<structure>
- 0.0–0.8: The phone rises 40px (0.7s, cubic-bezier(0.22, 1, 0.36, 1)); rows populate 50ms apart; the giant 5 fades up.
- 0.8–1.5: Archive Rowan Feld. 5→4.
- 1.5–3.0: Snooze Ottilie Park: a sheet offers "Later today", "Tomorrow · 08:00", "This weekend"; tap Tomorrow; toast "Snoozed until tomorrow". 4→3.
- 3.0–3.6: Archive the build. 3→2.
- 3.6–5.1: Label Hessa Karim with a long swipe through amber to blue; tap the "Work" chip; toast "Labelled Work". 2→1.
- 5.1–5.7: Archive Marlow Ito. 1→0.
- 5.7–7.6: The sun rises, water lines draw, the boat slides in; "All caught up." and its line rise 12px.
- 7.6–8.4: Chips "Archived 3", "Snoozed 1", "Work 1" fade in under the header.
- 8.4–10.0: Hold.
For other lengths, add or drop archive swipes, keeping counts right, and hold at least 1s.
</structure>

<build>
One self-contained index.html (inline CSS and JS), a 1920×1080 (16:9) stage scaled to fit the window, built for 60fps. Google Fonts via <link>, awaiting document.fonts.load() for each face before defining window.seek. HTML/CSS with inline SVG; no canvas or three.js. window.seek(t) (t in seconds) sets every visual from t alone, clamping past the end: no CSS transitions or animations, no setTimeout/setInterval, no state carried between frames, randomness only from a seeded PRNG. Without ?render in the URL, drive seek from requestAnimationFrame; with ?render, don't start that loop.
</build>

<check>
Before showing me, step through one frame per second (0–10s) and look at each. Fix overlaps, clipped or cramped text and anything off-style or Banned. Numeral, header count and remaining rows agree in every frame, and no text in the phone is under 20px. Confirm seek(10) and seek(11) match.
</check>

Ours, and free to use under CC0: copy it, change it, ship it. No credit needed.

Similar prompts

More like this on the motion design inspiration board: UI animation inspirationApp animation inspiration