HWS UI

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.

SystemLivelyCalmStill
In effect: lively
NoneCelebrationsAll
Into focus where it standsNothing travels across the screen to arrive. A surface unblurs in place, growing the last little way out of what opened it, and no edge travels more than a few pixels.
Every exit mirrors its entranceIt leaves the way it came: the same blur and the same scale, as long, gathering speed where the entrance settled. Nothing simply vanishes, and nothing waits for an exit.
One focus pull a clickBetween views the one you leave goes out of focus as the next comes into it, crossing inside its own frame - sections, settings, a call's stage. Never a jump cut, never a wipe.
The thing itself movesA reaction plays its emoji's own animation; a calendar draws in from today, a day at a time; a window hangs from its launcher. The frame around it holds still.
Answer at once, quieter the more it happensEvery press answers within 100 ms, where it happened. Objects bounce, text does not. A tooltip barely moves; a celebration is for people, never for the product.
One place to tone it downSettings → Appearance → Motion: Lively, Calm or Still, live in every window. Calm keeps every role short and plain; Still is instant.

A conversation

MO
Mira Okafor

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.

Their own animation
A gesture of their own

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.

This week
MonDesign review1:1 Kai
TueStandup
WedRoadmapLunch
ThuStandupDemo
FriRetro
Open it from the launcher above.

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
October 2026
MTWTFSS

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.

MO
KM
AR
MO
KM
AR

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.

RoleLivelyCalmFor
Fade140 ms140 msOpacity and colour, never overshoots
Focus pull300 ms, 18 px200 ms, 4 pxBetween views
Exitas its entranceas its entranceGathering speed
Cascade4 ms a piece2 ms a pieceUnfurls

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.