1 · The panel and the card are two surfaces (PRESCRIPTIVE — call card v3.2, CPO 2026-09-30)
T4 · 1440 × 900 · Karla picked · Transfer hovered
Shane Dusang02:41
Connected
Send the call to Karla now
The panel fills the 424 right column from y 51 to the window bottom. The card is not part of it: it overlapped the column at its default spot, so it stepped aside to x 640, y 98.
2 · The call card while Transfer is open: it steps aside (PRESCRIPTIVE — call card v3.2, CPO 2026-09-30)
Closed · default spot x 1048, y 98
Shane Dusang02:41
Connected
Open · steps aside to x 640, y 98
Shane Dusang02:41
Connected
Closed · dragged to x 1000, y 520
Shane Dusang02:41
Connected
Open · steps aside to x 640, y 520
Shane Dusang02:41
Connected
Open · dragged clear to x 320, y 600 · doesn't move
Shane Dusang02:41
Connected
3 · Try it: drag the card, then press Transfer (demo · timing is illustrative)
Shane Dusang02:41
Connected
4 · Anatomy · 424 × (window − 51) (PRESCRIPTIVE — call card v3.2, CPO 2026-09-30)
1:1 · 900 window · panel 424 × 849
PartGeometry (panel coords)Spec
Panelx 1016–1440 in a 1440 window · y 51 → window bottom (H).sb-shdlg-panel + .sb-transferpanel · --white · 1px gray-06 left border inside the 424 · no dim · no dock band
A · Title bar .mhy 0–40, hairline 40–41 · pad 0 8 0 16“Transfer call” at x 17, --t-paragraph-sb gray-00, ellipsis (matches QA DetailPageAppBar; the DS .mh says 16) · × = .x 32×32 at x 384–416, y 4–36, fa-xmark 14 gray-02, hover gray-06, tooltip “Close”
C · Search .tp-searchy 41–89, hairline 89–90 · pad 8 16.sb-field--search 391×32 at x 17–408, y 49–81 · r7, gray-06, hover gray-05, focus 1px blue-01 · prefix fa-magnifying-glass 12 gray-04 in a 32 box, hidden while focused · “Search people” --t-paragraph gray-04 · clear × 32 box, only with text · max 100
C2 · Notice .tp-notice32 + 1 hairline under C · only when presence failsgray-07 · pad 0 16 · “Shift status didn't load.” --t-tiny gray-02 · “Retry” --t-tiny-bold blue-01, 32-tall hit area
D · List .tp-listy 90 (123 with C2) → H − 113 · scrolls, thin overlay scrollbar.sb-userrow edge to edge, x 1–424, 57 pitch
E · Footer .mfH − 113 → H: hairline 1 + 16 + status 24 + 8 + verbs 48 + 16.tp-status + .tp-verbs (the .mf recipe)
  • Visible rows (57 pitch; H = window − 51; list = H − 203): 768 window → list 514, 9.0 rows · 900 → 646, 11.3 rows · 1080 → 826, 14.5 rows. The notice band takes 33.
  • Left edges are deliberate: title and search sit at 16 (x 17 with the border); the row avatar sits at 8 (x 9). Same relationship as PickUserPage. Don't pad the rows to match: that brings back the tile look.
5 · The row · .sb-userrow = the native UserInfoView row (PRESCRIPTIVE — call card v3.2, CPO 2026-09-30)
Rest
KNKat NguyenSales • Sales ConsultantOn shift
Hover · keyboard-active · .is-active
KNKat NguyenSales • Sales ConsultantOn shift
Pressed · .is-pressed
KNKat NguyenSales • Sales ConsultantOn shift
Picked · no fill · check
KSKarla SellersSales • Sales ManagerOn shift
Picked + hover
KSKarla SellersSales • Sales ManagerOn shift
Suggested
KSKarla SellersSalesperson for ShaneOn shift
DPDevon ParkBDC agent for ShaneOn a call
LOLeah OrtizManager for ShaneOn a call
KNKat NguyenSales • Sales ConsultantOn shift
Chip skeleton (typed during the wait)
JWJen WuBDC • BDC Representative
Skeleton row
SlotDesktop x390 phone xSpec
Padding1–90–8—
Avatar9–41, y 12–448–40.sb-avatar.s32 photo or initials (--t-label-sb gray-02 on gray-06, 1px --black ring). No status dot, no round-robin ring (showStatus: false): the photo fills all 32
Bodyfrom 49 (≈248 wide)≈215 (≈146 at 320)name --t-tiny-bold gray-00, pad 4 0 (y 8–32), ellipsis · subtitle “Department • Job title” --t-tiny gray-02 (y 32–48), ellipsis
Chipright edge 376, y 16–40right edge 342.sb-chipitem: On shift green · On a call orange · Off shift gray
Pick slot384–416, always reserved350–382picked: fa-check 12 blue-01 centred (the dropdown picker's check) · else empty, so the chip never shifts
Padding416–424382–390—
6 · Footer · status line + Ask first · Transfer · Voicemail (PRESCRIPTIVE — call card v3.2, CPO 2026-09-30)
Nothing picked · all dim
Pick a colleague to transfer the call to
On shift · all live
Karla Sellers is on shift
On a call · voicemail only
Devon Park is on a call · voicemail only
Off shift · voicemail only
Jen Wu is off shift · voicemail only
Presence unknown (T10) · all live
Jen Wu · shift status unknown
Transient busy (Hold in flight) · all dim
Karla Sellers · waiting for the call to update…
Transfer hovered · tooltip
Karla Sellers is on shift
Send the call to Karla now
VerbStyle (decision 4)Enabled when
Ask firstTertiary .sb-btn--tertiary: gray-06 / gray-00 · hover gray-05 · disabled text gray-04The pick is On shift (or presence is unknown) and nothing is transiently busy
TransferPrimary .sb-btn--primary: blue-01 / --white · hover blue-04 · disabled gray-04 / global-whiteSame as Ask first
VoicemailTertiaryAny pick, and nothing is transiently busy
7 · States · desktop 1440 × 900 · loaded, picked, filtered (PRESCRIPTIVE — call card v3.2, CPO 2026-09-30)
T3 · Loaded, nothing picked · light
Shane Dusang02:41
Connected
Suggested (this customer's Salesperson, BDC agent and Manager, in slot order), then On shift, On a call, Off shift, A–Z in each. All three verbs dim; the status line prompts.
T3 · Dark
Shane Dusang02:41
Connected
Same panel, dark theme: panel #1E1E1E, hairlines #383838, hover #383838. The primary verb's text is --white (#1E1E1E), so it reads dark on blue. The card (#272727 with the popover glow) reads as a raised slab beside the panel.
T5 · Picked, Off shift
Shane Dusang02:41
Connected
Check on the row. Ask first and Transfer dim in place; Voicemail stays live; the status line says why.
T7 · Pick filtered out · “mar”
Shane Dusang02:41
Connected
Karla is picked but hidden by the search. The status line still names her and the verbs act on her. The highlight sits on the first result.
8 · Search and the keyboard · desktop 1440 × 900 (PRESCRIPTIVE — call card v3.2, CPO 2026-09-30)
T6 · Searching “ka”
Shane Dusang02:41
Connected
Flat results, no Suggested block, the same presence sort. Every space-separated token must be in the full name. The highlight resets to the first row.
T8 · No match · “zed”
Shane Dusang02:41
Connected
“No one matches “{query}”” in --t-paragraph gray-02, centred in the list. Any pick is kept.
Keyboard-active row
Shane Dusang02:41
Connected
↓ / ↑ move the highlight (the hover fill, divider hidden); focus stays in search. Enter picks the highlighted row; nothing runs a verb from the list.
9 · Waiting, presence failed, a 768 window (PRESCRIPTIVE — call card v3.2, CPO 2026-09-30)
T2 · Presence wait (≤ 1500 ms)
Shane Dusang02:41
Connected
Search is live at once. Skeleton rows fill the list. If the rep types during the wait, results render from the store at once, A–Z, with chip skeletons.
T10 · Presence failed, roster OK
Shane Dusang02:41
Connected
The notice band. Rows have no chips; Suggested stays on top, everyone else A–Z. All three verbs live for any pick (the server rings, then falls back to voicemail). The 10 s poll keeps retrying; on success the chips appear and the order is kept.
1440 × 768 window
Shane Dusang02:41
Connected
List 514 → 9.0 rows. The card keeps its y (98) when it steps aside.
10 · Every state (desktop and mobile) (PRESCRIPTIVE — call card v3.2, CPO 2026-09-30)
#StatePanelVerbs
T0Closed——
T1OpeningDesktop: slides in from the right (DetailPageRoute motion); a card that overlaps steps aside in step. Mobile: slides up; the card lifts to the top in step—
T2Presence wait (≤ 1500 ms)Search live · skeleton rows · typing renders A–Z from the store with chip skeletonsAll dim; prompt
T3Loaded, nothing pickedSuggested, then On shift, On a call, Off shiftAll dim; prompt
T4Picked, On shiftCheck on the rowAll live
T5Picked, On a call / Off shiftCheckAsk first and Transfer dim; Voicemail live; the status line says why
T6SearchingFlat results, same presence sort; the highlight resets to the first row—
T7Pick filtered outRow hidden; the status line still names themAct on them
T8No match“No one matches “{query}”” centredKeeps any pick
T9Nobody to transfer to“Nobody to transfer to” centred; search disabledAll dim
T10Presence failed (roster OK)Notice band; no chips; Suggested stays on top, everyone else A–Z; the 10 s poll retriesAll three live for any pick
T11Presence arrives after 1500 msChips fade in (150 ms); order keptFollow presence
T12Roster failed / offlineThe standard error view (“We couldn't complete that request” · Try again) or “No Network Connection”All dim
T13Transient busy (Hold in flight)No changeAll dim; “waiting for the call to update…”
T14Lasting lock (409, followsConsult, a phase started elsewhere, reconnecting)Auto-close; the card's line 2 gives the reason—
T15On hold while openNo change (the card goes WAITING orange)Normal rule
T16Silent refresh (10 s)Chips crossfade in place (150 ms). Rows never reorder. Query, pick and scroll keptFollow the pick's chip
T17Picked person leaves the rosterRow collapses out; the pick clearsPrompt
T18Verb pressedThe panel closes and the card returns (if it stepped aside), then the action runs (pop-then-act, as today)—
T19Call ends / unsubscribeAuto-close—
M1Mobile, keyboard upFooter hidden; the list takes its space—
11 · Mobile · the ModalPage sheet under a lifted card (PRESCRIPTIVE — call card v3.2, CPO 2026-09-30)
T3 · 390 × 844 · light
Shane Dusang02:41
Connected
T3 · Dark
Shane Dusang02:41
Connected
M1 · Keyboard up
Shane Dusang02:41
Connected
OS keyboard · ≈ 336
The footer hides and the list takes its space: y 293–508, 3.8 rows. Tapping a row picks it, dismisses the keyboard and brings the footer back.
T4 · Picked
Shane Dusang02:41
Connected
Verbs 114 wide at x 16–130, 138–252, 260–374. No tooltips; long-press is not used on the verbs.
375 × 667 · safe 20 / 0
Shane Dusang02:41
Connected
Card y 28–156; sheet top 164; 5.0 rows (2.5 with the keyboard up).
320 × 568
Shane Dusang02:41
Connected
Card 288 wide; verbs ≈ 91 each (“Voicemail” still fits); body ≈ 146.
12 · Behaviour, keyboard, screen reader (PRESCRIPTIVE — call card v3.2, CPO 2026-09-30)
Desktop keyResult
(on open)Focus goes to search, so you can just type
TypingFilters with the standard token match (every space-separated token in the full name), with BasePickUserNotifier's debounce
↓ / ↑Moves the highlight; stops at the ends; scrolls the row into view; focus stays in search
EnterPicks the highlighted row. With exactly one result, that row is highlighted automatically
SpacePicks the highlighted row only when the field is empty; otherwise it types a space
Tab / Shift+Tabsearch → Ask first → Transfer → Voicemail → ×, wrapping, skipping dimmed verbs
Enter / Space on a verbRuns it. Nothing runs a verb from the list, so a double Enter can't blind-transfer
EscClears the query, then closes. Focus goes back to what had it before (the card key if possible; UNVERIFIED)
13 · Presence and order (PRESCRIPTIVE — call card v3.2, CPO 2026-09-30)
ChipIn plain wordsComputed from (unchanged)Verbs
On shiftGO ONLINE is on and they have signed in to calling at least once. Transfer and Ask first will ring themisWorking AND twilioUpdatedAt IS NOT NULL, not on a callAll
On a callOn a call or being rung right now. After a crashed call it can stay up to 2 hinCallSince within 2 h; wins over everythingVoicemail only
Off shiftGO ONLINE is off, calling was never set up, or no directory entryEverything elseVoicemail only
14 · Engineering handoff (PRESCRIPTIVE — call card v3.2, CPO 2026-09-30)