← Design notes retired 2026-07 · restorable

The landing "Call the panel" arm-and-fly morph

A frozen record of the original landing-pill interaction, retired when the button was rewired to open the "What's on your mind?" dialog directly. Kept because we might want it back — restoring it is a one-line change.

Today (after the change): tapping the landing Call the panel pill opens the "What's on your mind?" dialog straight away (openPicker("new")) — no animation, no inline composer. This page describes what it did before, and exactly how to bring it back.

What it did

The chats landing showed a single coral Call the panel capsule (#callPill) standing in for the composer (its REST state). Tapping it didn't open a dialog — it morphed the pill into an inline composer (the "What's on your mind?" textarea, #askBox) with a scripted "puck flight", then focused the field and raised the keyboard. Typing there and sending then handed off to the new-chat dialog, flying the text into its describe box.

The flight, beat by beat

  1. Measure the pill's rect while it's still visible; add .arming to the composer (starts transparent) and flip the state class that displays it — body.composer-armed on the landing (the pill hides, #askBox shows).
  2. Shrink (~200ms): a coral .call-puck is spawned over the pill and collapses from the full capsule to a 40px circle at the capsule's centre; the glyph rotates out as an rotates in.
  3. Fly (~420ms): the circle glides horizontally + vertically into the send-button slot (the real send is hidden; the puck is the send mid-flight).
  4. Land (~440ms): reveal the real send button, remove the puck, focus the textarea.

Two platform subtleties made it feel right: (a) a per-platform --call-speed multiplier scaled both the JS beat timings and the CSS morph/fade durations — iOS 1× · PC 2× · Android 3× (the flight felt sluggish otherwise); (b) iOS only raises the on-screen keyboard when focus() runs inside the tap gesture, so on iOS the field was focused up-front (the puck rode the rising keyboard) while PC/Android focused after the flight. Tapping away with an empty field folded the composer back to the pill (disarm()).

How to bring it back

The whole mechanism is still present in lib/room-ui.html — it's shared with the wide chat-open "convene" pill (#conveneTab), so none of it was deleted: armAndFly(), the body.composer-armed state, the #askBox composer, the .call-puck / .call-pill CSS, and the --call-speed variable all remain. Only the landing pill's click wiring was changed. To restore the morph, swap that one line back:

Now (direct to dialog)

if (pill) pill.addEventListener("click", () => openPicker("new"));

Original (arm-and-fly morph)

if (pill) pill.addEventListener("click", () =>
  armAndFly(pill, () => document.body.classList.add("composer-armed")));

Find it in lib/room-ui.html in the "Call-the-panel pill" block (search armAndFly(pill). The full armAndFly() implementation lives just above it; the CSS is under the .call-pill / .call-puck / #askBox / .composer-armed rules.

Why it was retired

The morph + inline composer added a step and an animation between "I want to start a chat" and the actual describe box. The decision (owner call) was to make the landing pill a plain, instant entry into the "What's on your mind?" dialog — the same dialog the inline composer handed off to anyway — so the intent lands one tap sooner, with no motion to wait through. The inline composer + its morph stay in the codebase for the wide chat-open "convene" affordance and for a possible return here.

-ish · design record · created 2026-07 · source of truth: lib/room-ui.html (the "Call-the-panel pill" block + armAndFly) · see also Style guide