No.206 · CTAs
Ticker Ring CTA
A closing banner with its small print — dates, seats left, where — running continuously round its border like a ticker; point at the button and the ticker slows so you can read it.
The prompt
Written for the variant you picked above: Night
Build a closing CTA as a dark band (34px wide, 30px outer radius) around a calm inner face. Measure the band with a ResizeObserver and build a rounded-rectangle path through the middle of the band; write the event's facts along it in 11px mono capitals ('NEXT INTAKE 12 JAN · 18 OF 24 SEATS LEFT · MUSCAT & ONLINE · …') with SVG textPath. Repeat the line enough times to fill one lap, fit it exactly with textLength and lengthAdjust=spacing, and render two copies one lap apart so the loop has no seam. Move both copies' startOffset in a requestAnimationFrame loop at 34px/s. While the primary or secondary action is hovered or focused, ease the speed down to 6px/s, light the ticker in the theme's hot colour and ring the inner face in it, so the small print becomes readable exactly when you're deciding. The face holds a mono eyebrow, a balanced headline, a muted paragraph, a pill button with a nudging arrow and an underlined secondary link. Under reduced motion the ticker stands still. Selected variant — Night: theme="night": band #1a181e with ticker text #b8b0a4 around a dark face #121015; the hot colour is warm amber #f0b37a.
Notes
- Interaction
- Point at or tab to an action and the ticker slows to a crawl and turns amber.
- Motion
- Ticker 34px/s, easing to 6px/s; colour 400ms.
- Accessibility
- The ticker is decorative (aria-hidden); its facts are also a visually hidden list that describes the primary link, so screen readers hear them once. Real heading and links. Reduced motion stops the ticker.
- Responsive
- The path is rebuilt on every resize, so the text always fits one lap; type and padding scale with clamp().
- On touch
- The ticker keeps running; tapping goes straight to the link.