1 · One card, one size (PRESCRIPTIVE — call card v3.1, CPO 2026-09-29)
Today (CANONICAL, QA)
02:41Shane Dusang
v3.1 (PRESCRIPTIVE)
Shane Dusang02:41
Connected
2 · Anatomy (PRESCRIPTIVE — call card v3.1, CPO 2026-09-29)
Desktop · 4 slots
Shane Dusang02:41
Connected
Mobile · 5 slots · 390 phone
Shane Dusang02:41
Connected
3 · Keys and tooltips (PRESCRIPTIVE — call card v3.1, CPO 2026-09-29)
Neutral · gray-06 / gray-00
End · Decline · red-01 / global-white
Accept · ✓ · green-01 / white
Unmute · red-02 / red-01
Resume · orange-02 / -01
Speaker on · panel open · blue-02 / -01
× Cancel (Ask first) · neutral
Can't act · opacity .4
You speaking · glyph green-01
4 · The audio orb (PRESCRIPTIVE — call card v3.1, CPO 2026-09-29)
Customer speaking
Rings swell and roll faster with their voice.
Silence
A slow, shallow roll: alive, not reacting.
Incoming
Two pulses every 2 s.
Calling
Swells 2 s, rests 4 s, like ringback.
On hold
Energy 0, rolls at 0.2×.
Ask first ringing · transferring
The ringback rhythm on blue.
Ask first talking · colleague
Follows the colleague's voice.
No level stream
The library's own loop (iOS / Android for now).
Reduced motion
One still frame.
5 · The orb on a live call — Mute and Hold work on this card (PRESCRIPTIVE — call card v3.1, CPO 2026-09-29)
Shane Dusang02:41
Connected
SilenceThe same orb at 3.3×.
Customerraw levelCustomerorb energyYouraw levelYoumic energy
  • Bars: twilio.js Call volume, every 50 ms (0–0.6). Dashed: the noise floor the orb finds. Green: orb energy (0–1). Black: your mic energy, with the 0.25 green-glyph line. Click the chart to jump.
  • The levels are a synthesized two-voice call run through the exact analyser twilio.js 2.4.1 uses for its volume event (32-sample spectrum, −100 to −30 dB, averaged, every 50 ms). The trace is real; the voices are not.
6 · Every state · desktop · [1 Mute] [2 Hold] [3 Transfer] [4 End] (PRESCRIPTIVE — call card v3.1, CPO 2026-09-29)
S1 · Incoming · WAITING
Shane Dusang
Incoming Call
Orange tint; the orb pulses twice every 2 s (not audio). Accept (green, wide) spans slots 1–3; Decline (red) takes the End slot. Same height as in-call, so answering only recolours the header and swaps the bar.
S1 · Incoming · returned · WAITING
Shane Dusang
Returned · Karla Sellers didn't pick up
As S1; line 2 carries the returned note, ellipsis if long.
S1 · Incoming · asks first · WAITING
Shane Dusang
Devon Park asks first
The colleague's phone ringing during an Ask first: line 2 “{rep} asks first”.
S2 · Calling · DIALING
Shane Dusang
Calling...
Gray; the orb swells with the ringback rhythm (2 s on, 4 s off). No timer before connect. Mute works where the platform allows (canToggleMute); Hold and Transfer dim until connect, so nothing moves when it does.
S3 · Connected · legacy / v1 · LIVE
Shane Dusang02:41
Can't hold or transfer
Hold and Transfer dim in place and line 2 gives the reason. The ≤3 s v2 probe window uses the same dimmed keys with “Connected”.
S4 · Connected · v2 · LIVE
Shane Dusang02:41
Connected
The green orb follows the customer's voice; the Mute glyph turns green while you talk. Every key live. Ask first failed (S11) looks identical, plus the existing warning toast.
S5 · Muted · LIVE
Shane Dusang02:41
Connected
Mute → Unmute (red-02 / red-01). Nothing on the orb, which keeps following the customer. Nothing else moves.
S7 · On hold · WAITING
Shane Dusang02:41
On hold
Orange tint; the orb slows almost to a stop. Line 2 “On hold”; Hold → Resume (orange-02 / orange-01). No glyph on the timer.
S8 · Ask first · ringing · TRANSFER
Shane Dusang02:41
Calling Karla Sellers...
Blue; the orb follows the ringback while the colleague's phone rings. Timer = total call time. Transfer slot → ✓ (green, dim until the colleague answers). End slot → neutral × Cancel (cancelConsult): red never cancels.
S9 · Ask first · talking · TRANSFER
Shane Dusang03:05
Talking to Karla Sellers
The blue orb follows the colleague's voice. ✓ (completeConsult) beside × reads as confirm / cancel.
S10 · Transferring · TRANSFER
Shane Dusang03:12
Transferring to Karla Sellers...
Blue ringback; line 2 is why Hold and Transfer are dimmed. End still hangs up.
S13 · Returned · connected · LIVE
Shane Dusang00:37
Returned · Karla Sellers didn't pick up
Line 2 keeps “Returned · …” while idle; hold, Ask first and transferring phrases override it while they run.
S12 · Colleague's side · connected · TRANSFER
Shane Dusang00:12
Devon Park asks first
The colleague's card during an Ask first: the orb follows the rep who asked. Hold/Resume and Transfer dim (followsConsult); End hangs up. Turns LIVE when the consult ends.
409 · Controls refused · LIVE
Shane Dusang02:41
Can't hold or transfer
The card never shrinks: Hold and Transfer dim in place with the line-2 reason; the existing info toast still fires. (Since #2087 a probe 409 looks like this; an action 409 keeps the keys live.)
7 · Every state · mobile · [0 Speaker] [1 Mute] [2 Hold] [3 Transfer] [4 End] · names on long-press (PRESCRIPTIVE — call card v3.1, CPO 2026-09-29)
S1 · Incoming · WAITING
Shane Dusang
Incoming Call
Mobile web only: native iOS/Android keep the OS ring screen and first show the card at connect. Accept spans slots 0–3.
S1 · Incoming · returned · WAITING
Shane Dusang
Returned · Karla Sellers didn't pick up
Mobile web only. Line 2: the returned note.
S1 · Incoming · asks first · WAITING
Shane Dusang
Devon Park asks first
Mobile web only. Line 2: “{rep} asks first”.
S2 · Calling · DIALING
Shane Dusang
Calling...
Speaker is dimmed too until connect.
S3 · Connected · legacy / v1 · LIVE
Shane Dusang02:41
Can't hold or transfer
As desktop; Speaker stays live in slot 0.
S4 · Connected · v2 · LIVE
Shane Dusang02:41
Connected
Five keys; Speaker off = neutral fa-volume-low.
S5 · Muted · LIVE
Shane Dusang02:41
Connected
Mute → Unmute (red-02 / red-01). Nothing on the orb, which keeps following the customer. Nothing else moves.
S6 · Speaker on · LIVE
Shane Dusang02:41
Connected
Mobile only. Slot 0 is a toggle: blue-02 / blue-01 with fa-volume-high while the speaker is on.
S6 · Speaker off · LIVE
Shane Dusang02:41
Connected
Mobile only. Neutral with fa-volume-low, as on every other mobile row.
S7 · On hold · WAITING
Shane Dusang02:41
On hold
Orange tint; the orb slows almost to a stop. Line 2 “On hold”; Hold → Resume (orange-02 / orange-01). No glyph on the timer.
S8 · Ask first · ringing · TRANSFER
Shane Dusang02:41
Calling Karla Sellers...
Blue; the orb follows the ringback while the colleague's phone rings. Timer = total call time. Transfer slot → ✓ (green, dim until the colleague answers). End slot → neutral × Cancel (cancelConsult): red never cancels.
S9 · Ask first · talking · TRANSFER
Shane Dusang03:05
Talking to Karla Sellers
The blue orb follows the colleague's voice. ✓ (completeConsult) beside × reads as confirm / cancel.
S10 · Transferring · TRANSFER
Shane Dusang03:12
Transferring to Karla Sellers...
Blue ringback; line 2 is why Hold and Transfer are dimmed. End still hangs up.
S13 · Returned · connected · LIVE
Shane Dusang00:37
Returned · Karla Sellers didn't pick up
Line 2 keeps “Returned · …” while idle; hold, Ask first and transferring phrases override it while they run.
S12 · Colleague's side · connected · TRANSFER
Shane Dusang00:12
Devon Park asks first
The colleague's card during an Ask first: the orb follows the rep who asked. Hold/Resume and Transfer dim (followsConsult); End hangs up. Turns LIVE when the consult ends.
409 · Controls refused · LIVE
Shane Dusang02:41
Can't hold or transfer
The card never shrinks: Hold and Transfer dim in place with the line-2 reason; the existing info toast still fires. (Since #2087 a probe 409 looks like this; an action 409 keeps the keys live.)
8 · Engineering handoff (PRESCRIPTIVE — call card v3.1, CPO 2026-09-29)
StateDriverWhat it doesTint
Incomingringingtwo 0.4 s pulses every 2 s (not audio)orange
Calling · Ask first ringing · Transferringringbackswells 2 s, rests 4 sgray · blue · blue
Connected · muted · speaker · returned · 409levelfollows the customer's voicegreen
Ask first talking · colleague's sidelevelfollows the colleague's voiceblue
On holdholdenergy 0, rolls at 0.2×orange
No level stream (iOS / Android for now)nonethe library's listening loop, unchangedby state
Reduced motion (any state)—one still frame (t = 0.6)by state