| Song / Loop switch | Producer row height and opacity | 240ms, cubic-bezier(.4,0,.2,1) |
| BPM step | Value scales 1.0 to 0.95 to 1.0 | 80ms |
| Create button | Lit with Suno's moving fire gradient once the form has a prompt, as in the app | 7s drift, loops |
| Create loop | Player sheet rises over the form; the form stays put (no card stack), as in the app | 400ms, cubic-bezier(.32,.72,0,1) |
| Generating | Cover drifts through color, title reads Untitled, element names land one by one; status pill drops in from the top: “Your groove is on its way”, “Crafting your next hit”, then “Loop ready” | 3s total (the app takes about 13s); pill in 300ms, out 150ms |
| Grabber swipe down, Escape | Sheet follows the finger, then drops | follow, 220ms after release |
| Key sheet | Half sheet rises over a dim | 350ms in, 250ms out |
| Long-press menu | Grows from the press, folds back into it | about 280ms in, 150ms out |
| Playback | Beat dots, meters and the loop progress track at the chosen BPM | requestAnimationFrame, 454.5ms per beat at 132 |
| Keep (tap, Enter, K) | 2px accent ring, pin fills and turns accent, meter turns accent | 150ms |
| Swipe left | Meter and pin follow the finger up to 72px, Refuse slides in from the right; past 50% of the row refuses | follow, 200ms settle |
| Mute (swipe right, menu, M) | Row dims, meter rests, element goes silent; still regenerated unless kept | 150ms |
| Refuse | Row fades and shrinks to 0.97 in place, stub fades in; Undo holds for 5s | 200ms, cubic-bezier(.4,0,.2,1) |
| Regenerate | Label names the scope (“Regenerate 5, keep Bass”); rows that are not kept drift through color under the same status pill, then new names land; kept rows hold still | 1.5s |
| Download | Status pill “Preparing loop”, then “Saved to Files” | 1.5s, then 1.5s |
| Reduced motion | Drift, pulses and slides off, state changes instant | prefers-reduced-motion |