# Wave W — R17-V5 convergent fixes: the motion identity wave R17-V5: design 7.7 · kw 7.7 · competitor 7.6 · a11y 7.5 · brand 7.9 (min 7.5, avg 7.68 — regime high). Same vocabulary + honesty contract as waves P-V. Surgical; both themes; testids/aria survive; ALL new animation motion-safe gated. NO cross-lane files. Per-lane gate: related vitest green + eslint on touched files. Design judge's thesis: "content lands as monolithic blocks after skeletons — a staggered entrance (~40ms/card, 8px rise+fade, 300-500ms total) is the single change that moves this from 'CSS transitions' to 'has a motion identity'." The memory surface already ships a `card-enter` keyframe with 40ms stagger (Wave V Lane A) — that is the house pattern; REUSE its keyframe/timing, don't invent a second grammar. ## Lane A — entrance choreography: grids (design HIGH) Files: `apps/AllWorkspacesApp.tsx`, `apps/agents/SuggestedAgentCards.tsx`, tests. 1. When the workspace grid resolves from skeleton→content, cards enter staggered: ~40ms apart, 8px rise + fade, ease-out, total ≤500ms. Reuse the memory surface's `card-enter` animation (grep index.css). Runs ONCE per surface visit (not on every filter keystroke — filtering re-sorts must NOT re-animate). 2. Same treatment for the six suggested-agent bee cards and the specialists strip (strip after the cards, one beat later). 3. Reduced motion: instant, no rise/fade. Existing hover tiers untouched. ## Lane B — briefing recall cards + actions menu craft (design HIGH+MEDIUM) Files: `os/overlays/LoginBriefing.tsx`, `os/WorkspaceActionsMenu.tsx`, tests. 1. The briefing modal opens fully composed when prefetched (the per-card motion delays only fire on slow loads). Re-key the recall cards + workspace rows so the stagger runs on EVERY modal open (base delay after modal mount, ~80ms/item, 8px rise+fade) — the product's hero moment deserves an entrance beat that survives 2fps. 2. Actions menu (workspace card '…'): icons per action, roomier padding (match the marketplace row density), destructive action visually separated, and a 150ms scale(0.96→1)/fade entrance transform-originating from the trigger corner. KEEP the Escape-returns-focus behavior exactly (judges praised it). ## Lane C — marketplace matching skeletons + results density (design HIGH) Files: `apps/MarketplaceApp.tsx`, `apps/extend/AgentSearchBox.tsx`, tests. 1. Replace the stale-dim block (data-testid nl-stale-dim) with 3 purpose-built result-row skeletons under the "Matching skills to this job…" status — row-shaped (icon square + two text lines + chip stubs), animate-pulse, motion-reduce:animate-none. Kill the dimmed wrong-content moment. 2. Results view density: when the semantic match returns ≤3 hits, append a quiet "More from the catalog" rail (nearestCatalog already exists — reuse) so a 2-hit answer doesn't strand the user in dark space. ## Lane D — memory counter 0-frame + Memories tab landing (design+kw) Files: `apps/memory/MemoryTrustManage.tsx`, `apps/memory/MemoryCenterTab.tsx`, tests. 1. The once-per-session count-up starts at 0 — a 2fps frame catches "0 Memories" above rendered rows ("reads as a data bug"). Start the animated display at ceil(15% of target) so no frame ever shows 0/near-0 with data present; keep the ~600ms ease and the once-per-session flag. 2. Memories tab lands on the full recent list (density), with the curated view as a labeled filter chip instead of the default — kill "one card in a dark field". Keep the result-count header from Wave V. If the curated default is load-bearing somewhere else, say so in notes instead of forcing it. ## Lane E — chat streaming proof + onboarding beats (design HIGH + low) Files: `apps/ChatApp.tsx` (streaming visuals only — verify what exists first), `overlays/onboarding/WelcomeStep.tsx` + wizard step shell (glow + slide), tests. 1. Verify the send→streaming→settle visual arc: streaming indicator (typing cursor / bee shimmer) while tokens arrive, settle beat when done. If it already exists, polish only what reads poorly on video (indicator too subtle → one visible tier); if absent, add a minimal honey typing-cursor pulse. 2. Onboarding: amplify the mascot glow breathing to a ~3s cycle with a visibly larger radius/opacity swing (still tasteful; motion-safe); directional slide (~200ms) welcome→step-1 for spatial continuity. ## Kit v5 (orchestrator, not a lane) s04 gains a send→streaming→settle beat: type the question, SEND it, hold ~8s while the (echo-provider) response streams, then settle. Dev-store side effect accepted (research-hub already carries test messages). ## Deferred Shared-element continuity briefing→home (needs route-transition infra); hover-amplitude unification pass; s06 panel-swap choreography (8.2 already). ## Per-lane gate Related vitest green + eslint; contrast math N/A this wave (no text tokens); every new animation motion-safe gated. Orchestrator: tsc + suite + R18-V6.