No.48 · Buttons· New
Platform Badges
Download and store buttons with the platform marks (macOS, Windows, Linux, App Store, Mac App Store, Google Play, Microsoft Store, Android) in your choice of a solid, outline or light style, grouped into desktop, stores and a large pair.
The prompt
Written for the variant you picked above: Solid
Build a set of download and store badges for a fictional app, in the single style selected below. Badge: an inline link 52px tall (64px large) with an 11px radius (14px large), the platform mark at 27px (34px) on the left, and two lines: a small 10.5px top line ('Download for', 'Download on the', 'Get it on', 'Get it from') over an 18px (22px) semibold name. Marks are single-colour SVGs in currentColor (Apple, the four-square Windows mark, a penguin, the Android robot head, a shopping bag with four squares) except the Play triangle, which keeps its four colours. Kinds: macOS, Windows, Linux, Android APK, App Store, Mac App Store, Google Play, Microsoft Store. Hover lifts 1px, nudges the mark and slides a soft diagonal sheen across once; press moves down 1px. Layout: a 20px-radius panel (30px by 32px padding, 22px between groups, 10px between badges, wrapping) with small uppercase muted headings 'Desktop' (macOS, Windows, Linux), 'Stores' (App Store, Google Play, Microsoft Store, Mac App Store, Android APK) and 'Large' (the App Store and Google Play badges at 64px), on a #e9e9e6 or #060607 page. Selected variant — Solid (solid): Solid: near-black #0b0b0c with white text and a 1px #a6a6a6 inner edge, like store badges; hover adds a top highlight and a soft 8px/22px shadow. Panel #f7f7f5 on a #e9e9e6 page, headings #6c6c69. This selection takes precedence over references to other themes or options in the general brief. Implement this selected appearance; do not add a variant picker or alternative appearances unless requested. Implementation requirements: Use React and TypeScript. Keep the component self-contained, with uniquely scoped CSS and no animation libraries. Include required imports, styles and font setup in the result. Interaction: Badges are links; keyboard focus shows a 2px ring. Motion: Hover lift, mark nudge and a one-pass sheen. Reduced motion removes them. Accessibility: Real links; the marks are aria-hidden because the visible text names the platform. Responsive behavior: Badges wrap; the panel tightens its padding under 520px. Touch: Every badge is a tap target; nothing depends on hover. Preserve keyboard access, visible focus and reduced-motion behavior. Keep fictional demo data and simulated service calls in a separate usage example; expose callbacks for real actions and recover from rejected requests. Keep usage-example links inside the demo: use local buttons or prevent navigation. Demonstration links must not navigate to Vitrine routes or open other pages; preserve real URL support in the reusable component itself. Verify the result at narrow and wide viewport sizes, with keyboard input and reduced motion enabled.
Notes
- Interaction
- Badges are links; keyboard focus shows a 2px ring.
- Motion
- Hover lift, mark nudge and a one-pass sheen. Reduced motion removes them.
- Accessibility
- Real links; the marks are aria-hidden because the visible text names the platform.
- Responsive
- Badges wrap; the panel tightens its padding under 520px.
- On touch
- Every badge is a tap target; nothing depends on hover.