SPEC — Relay Pulse Motion System#
v3.5 · 2026-07-10 · Owner: EC · Ratified Rules unchanged — carried forward verbatim into v3.5 from v3.4.1 (June 10, 2026, Session FYBFRY), where they were ratified. Extends the pulsing easter egg into a defined motion family.
Naming: "pulse" here is the motion system (
--rly-pulse#00D9C8, motion-only). It is unrelated to the product feature formerly named Pulse, which is now Stream (see_vocab/_VOCAB.md).
Premise#
The pulse is the one living thing in an otherwise flat system. v3.5, like v3.4 before it, bans shadows, gradients, and glows from product UI — which makes motion the only channel for warmth and life. This spec promotes the easter egg from a one-off to the brand's heartbeat, with hard rules so it never becomes noise.
The colour rule#
#00D9C8 is retired from static use. It becomes the pulse colour — it may only appear in motion. The mark, Codes, CTAs, and all static elements use system teal (#0d9488 light / #2dd4bf dark). When something glows #00D9C8, it means something is happening right now.
This resolves the v3.4 dual-teal exception ("mark-only #00D9C8") cleanly: the legacy teal isn't deleted, it's given a job.
The family#
| # | Moment | Behaviour | Loop? | Where |
|---|---|---|---|---|
| 1 | Heartbeat | Core scales 1→1.18, rays shimmer clockwise | Yes, 2.8s | Brand surfaces only: hero, sign-in, empty states |
| 2 | Receipt flash | #00D9C8 ring expands from Code container, 0.9s | Once | The moment a relay is received |
| 3 | Send burst | Rays fire outward through #00D9C8, settle to teal | Once | The moment a relay is created |
| 4 | Awaiting | Core-only slow breathe, 4.2s | Yes | Transfer sent, not yet received |
| 5 | Arrival ring | Core dot + one emanating ring | Once | Notifications, toasts |
| 6 | Broadcast | Press-and-hold the mark → triple beat + double ripple | Hidden | Easter egg. Keep rare; that's the charm |
Hard rules#
- One pulsing element per view, maximum.
- Product UI transitions stay ≤0.18s — pulse moments are event animations (once) or brand-surface loops, never product chrome.
- Everything disables under
prefers-reduced-motion. The static mark must carry the brand alone. - Never loop #00D9C8 on product surfaces. Looping pulses (heartbeat, awaiting) stay in system teal; #00D9C8 is reserved for event flashes.
Implementation#
brand/relay-pulse.css — drop-in, pairs with brand/relay-mark*.svg (rm-core / rm-ray class hooks, currentColor).
Relationship to the eggs gallery (PR #34)#
The 11-egg gallery at creative.relayctx.com/concepts/eggs/ predates this spec and used the constraint "teal #0d9488 only." v3.4.1 amends that constraint: event-flash eggs (Receive Beam, Status Snap arrival moments) may use #00D9C8 — they move, they qualify. Looping eggs (Idle Pulse) stay #0d9488 per hard rule 4. All other egg constraints (reduced-motion, non-essential, accessible, self-contained, no layout impact) carry into this spec unchanged.
Existing easter eggs — kept and absorbed#
- Auth redirect splash pulse (relay-app
concepts/index.html, 1.6srPulse) → migrate to.rly-heartbeat - Travelling particles on marketing viz (relay-web v1/v3) → compatible; recolour static #00D9C8 path strokes to system teal, keep particles #00D9C8 (they move — they qualify)
- Code hover border-teal transition → stays as-is (product transition, 0.15s)