Tact
Tact is how HOLOH moves, answers and sounds. Everything below is the real kit, under the real Motion setting: switch the level, slow it to a quarter speed, and try each moment.
A conversation
Send a message: it rises out of the composer, translucent until the server takes it, then shows delivered and seen. Send ❤️ or 🎉 on its own, or click one: it celebrates, once per message and once per conversation per 30 seconds. Mira's replies rise with a wash; four at once is a batch and lands still, as opening a conversation does. React from the toolbar, the menu or the picker and your emoji plays its own animation out of its pill; hers only roll the count, and a heart on your message lets a few little hearts off.
Reactions
Click one. The emoji is what animates, never the pill around it. Where it has animated artwork it grows out of its 13 px pill, plays once and settles back in to finish where it stands; every other one moves the way it would - hands bow, a rocket lifts, a hand waves.
Surfaces
Each comes into focus where it will stand and leaves the way it came. Menus and popovers grow a little from the side facing their trigger, at full blur; a tooltip at half, since it comes and goes all day; a dialog, a sheet and a toast unblur in place. Every button sinks under the pointer and springs back.
Pages and windows
A page that takes another's place - the event editor over the calendar - comes into focus out of the button pressed, and closes the same way over what replaced it. A window hangs from its launcher and grows out of that corner, wherever the launcher is.
Unfurls
What arrives as a set lands one piece after the next, a few milliseconds apart - barely, never a wait - so its order is seen. A list unfolds row by row; a calendar draws in a day at a time, rippling out from today.
- MOMira OkaforMentioned you in #design
- KMKai MüllerReplied to your thread
- MOMira OkaforReacted ❤️ to your message
- KMKai MüllerInvited you to Roadmap
- MOMira OkaforShared the Q3 deck
Cuts
Moving between views is a focus pull: the view you leave goes deep out of focus as the next comes into it, crossing inside the frame they share, so the frame never moves. The rail's sections, Settings' pages and a call's stage all cut this way - in a call, whether you opened the surface or someone started sharing to it.
Springs and timings
Material 3's own spring tokens, sampled into CSS linear(). Lively runs each a beat faster than its resting time - the same shape, stiffer. Components name a role, never a number; the level decides what it means: Calm plays each on the standard curve in 140-200 ms, Still makes it instant.
Interface sounds
Soft mallet tones, every one quieter than the message chime; the two ticks are quieter still. Never during a call, in a hidden window, or for someone else's message.