Overlay and status

Notification

The message on his screen: dark or light glass in the corner, eight seconds, then gone.

Concept · live ReactSource file: tokens.jsonReact component: Notification, NotificationStack, RepliedPill

Try it

Sarahnow

dinner’s ready, come eat with me

She can see: in a match, about 12 min left

F7On my wayF8After this matchF9Love you
Variant
Sender
Mood
<Notification message={message} variant="full" />

When to use

  • Only for a message from someone he allowed. Nothing else in the product draws over a game.
  • Full for his first week; compact after that; whisper in ranked with polite mode on.
  • Urgent only when she marked it so. She has three a day.
Don’t use it
  • System news, tips or updates. Those wait in the desktop app.
  • More than one card on screen. A second message stacks into one line.

Variants

Sarahnow

one more game then come watch a movie?

compact
Sarah · 1 messageF6Read
whisper
SarahUrgentnow

call me when you can, it’s important

F7On my wayF8After this matchF9Love you
urgent
Sarah and Mumnow

Both say dinner’s ready

stacked
Sent to Sarah · After this match
replied

Anatomy

  • Photo and ping. Who it is, before a word is read.
  • Name and mood. The mood as a face and a word.
  • Message. Two lines at most, at 15px.
  • What she can see. Full only: so “after this match” is honest.
  • Reply keys. Full and urgent: F7, F8, F9.
  • Fuse. A 2px magenta line that burns down over eight seconds.

Motion

TokenValueWhere it lands
in200ms, ease-outDrops 8px from the top edge and fades in
hold8000msThe fuse burns; adjustable to “until I answer”
out160msFades upward
reducedfade onlyNo movement, fuse stilled

Content

  • Her words, untouched. The product never rewrites a message.
  • “now”, never a clock time: it’s always just arrived.

Accessibility

Each card is a status region named in full (“Message from Sarah, feeling lonely: …”). It never takes focus; keys listen only while it shows. Eight seconds is adjustable up to “until I answer” and every message stays in history (2.2.1). Nothing flashes (2.3.1).

KeyWhat it does
F7On my way
F8After this match
F9Love you
F6Read a whispered message

Props

PropTypeDefaultDescription
messageMessage—Sender, text, mood and context.
variant'full' | 'compact' | 'whisper' | 'urgent''compact'How much it shows.
fusebooleantrueThe burning line; off for stills.
fuseKeystring | number—Change to restart the fuse.
tone'dark' | 'light''dark'Dark glass by default; light is a white card for people who read it faster over a dark map. He picks it in Overlay settings.

Tokens

TokenValueWhere it lands
--cm-notification-bgrgba(20, 20, 23, 0.82)Notification ground
--cm-notification-radius16pxNotification corners
--cm-notification-fuse#ff2d95The line that burns down
--cm-notification-duration8000msHow long it stays
--cm-overlay-edgergba(255, 255, 255, 0.08)Its hairline
--cm-overlay-text#f6f6f7Name and message
--cm-overlay-text-2#9a9aa2Time and context
--cm-status-urgent#ca0e6f / #ff2d95Urgent messages

Status card

Where he is, from her side: in a match, the score, and a range for when he’ll be out.

Concept · live ReactSource file: tokens.jsonReact component: StatusCard

Try it

Jake is in a matchValorant · Ranked
Live
Score9–7
Done in about10–14 min

Your message lands between rounds, unless it’s urgent.

State
<StatusCard person={jake} state="in-match" />

When to use

  • At the top of her home screen, so she knows where he is before she writes.
Don’t use it
  • A single minute count. A range is honest; a number becomes a promise.
  • Showing the game or score if he hasn’t shared them.

States

Jake is in the menus
Jake is heads down

Heads down until 9:30. Urgent only.

Jake’s PC is off

Your message will go to his phone.

Content

  • Lead with the person and the state: “Jake is in a match”.
  • Say what will happen to her message, in one line.

Accessibility

The state line is a polite live region: “Jake is in the menus” is announced when it changes, without moving focus (4.1.3).

Props

PropTypeDefaultDescription
personPerson—Whose status.
state'in-match' | 'in-menus' | 'not-gaming' | 'heads-down' | 'offline'—Where he is.
gamestring—If he shares it.
scorestring—In a match, if shared.
eta[min, max] minutes—Always a range.
notestring—What happens to her message.

Tokens

TokenValueWhere it lands
--cm-bg-surface#ffffff / #16161aCards and panels
--cm-bg-canvas#f6f6f7 / #0e0e10The page behind everything
--cm-accent-subtle#fff0f7 / #42062aSelected backgrounds
--cm-text-secondary#5a5a62 / #9a9aa2Supporting text, 6.9:1 on its ground