light · playful · sans · crypto · wallet · gradient

DESIGN.md inspired by Rainbow

White canvas, SF Pro Rounded Black at 96px, and a pink-orange-blue-purple rainbow — the friendliest Ethereum wallet onchain.

By webdesignhot · rainbow.me
$ npx @webdesignhot/design-md add rainbow
Learn more about the CLI
Compare to…
try on →
theme
1440 × 900
mobile · 390 × 844
Tokens webdesignhot/0.1
  • bg #ffffff
  • surface #ffffff
  • surface-soft #f7f7f8
  • text AAA · 21.0 #000000
  • text-muted #6b6b6f
  • text-subtle #9a9aa0
  • brand — · 2.9 #ff54bb
  • brand-orange #ff8a00
  • brand-blue #3897ff
  • brand-purple #9b4dff
  • on-brand #0000ee
  • on-brand-black #000000
  • link #0000ee
  • link-hover #0000cc
  • border — · 1.2 #e6e6ea
  • border-strong AAA · 21.0 #000000
  • focus-ring rgba(255,84,187,0.45)
  • scrim rgba(0,0,0,0.45)
  • semantic-up #1db954
  • semantic-down #ff3b30
  • semantic-warning #ff8a00
Typography
Ship faster than ever.
display-mega "SF Pro Rounded Black" 96px w900 -0.03em
Ship faster than ever.
display-xl "SF Pro Rounded Black" 72px w900 -0.025em
Ship faster than ever.
display-lg "SF Pro Rounded Black" 56px w900 -0.02em
Ship faster than ever.
display-md "SF Pro Rounded Black" 40px w800 -0.018em
Ship faster than ever.
h1 "SF Pro Rounded Black" 40px w800 -0.018em
Built for teams that ship.
h2 "SF Pro Rounded Black" 32px w800 -0.012em
A complete kit
h3 "SF Pro Rounded Black" 24px w700 -0.008em
The quick brown fox jumps over the lazy dog.
h4 "SF Pro Rounded Black" 20px w700 -0.004em
The quick brown fox jumps over the lazy dog.
title "SF Pro Text" 18px w700 0
The quick brown fox jumps over the lazy dog.
body-lg "SF Pro Text" 18px w400 0
The quick brown fox jumps over the lazy dog.
button "SF Pro Rounded Black" 17px w700 -0.01em
The quick brown fox jumps over the lazy dog.
body "SF Pro Text" 16px w400 0
The quick brown fox jumps over the lazy dog.
nav-link "SF Pro Text" 15px w600 0
The quick brown fox jumps over the lazy dog.
body-sm "SF Pro Text" 14px w400 0
OUR DESIGN SYSTEM
label "SF Pro Text" 13px w600 0
OUR DESIGN SYSTEM
mono-address ui-monospace 13px w400 0
OUR DESIGN SYSTEM
caption "SF Pro Text" 12px w500 0.01em
Spacing
Radius
  • micro 4px
  • sm 8px
  • md 14px
  • lg 20px
  • card 20px
  • xl 28px
  • button 40px
  • button-lg 50px
  • pill 9999px
Components
Text link →
Card preview A complete kit — everything your product needs. Hero, pricing, FAQ, dashboard, docs — every layout your product needs.
New Stable v1.0
Design roles 7/8 mapped · webdesignhot/0.1

Maps the 8 canonical role names to this entry's actual tokens. Use these to plug the design into role-aware tools — shadcn/ui themes, role-aware Tailwind plugins, atelier-lint — without hard-coding token names.

  • background bg
  • foreground text
  • primary brand
  • primary-foreground on-brand
  • accent
  • muted text-muted
  • border border
  • ring focus-ring
Export 4 formats · paste-ready
Tailwind

theme.extend block for tailwind.config.js

tailwind.config.js
CSS variables

:root { --bg, --text, --brand, … } you can paste anywhere

design.css
DTCG JSON

W3C Design Tokens Community Group format

design.tokens.json
Figma Variables

Importable into Figma → Variables → Import

figma-variables.json
The file
---
name: Rainbow
tagline: White canvas, SF Pro Rounded Black at 96px, and a pink-orange-blue-purple rainbow — the friendliest Ethereum wallet onchain.
updated_at: 2026-05-28T23:13:41.757Z
published_at: 2026-05-28T23:13:41.757Z
author: webdesignhot
source_url: https://rainbow.me
spec: webdesignhot/0.1
quality: curated
featured: false
categories: [saas]
tags: [light, playful, sans, crypto, wallet, gradient]
preview_swatch: ['#ffffff', '#ff54bb', '#ff8a00']
related: []
description: 'Rainbow is the playful counter-argument to crypto''s default darkness. The canvas is plain white `#ffffff` with pure-black `#000000` ink, and the entire brand identity rides on one idea — the literal rainbow: a multi-color signature spanning pink `#ff54bb`, orange `#ff8a00`, blue, and purple, deployed as gradients, as alternating solid-color CTA pills, and as the through-line of every illustration. Display type is `SF Pro Rounded Black` at a huge 96px — the rounded terminals are the whole point: rounded equals friendly, and Rainbow leans into "fun, powerful, and secure" with rounded geometry everywhere. CTAs are very rounded pills (40–50px radius) painted in alternating brand colors — a pink "Download Rainbow Mobile" pill sits beside an orange "Download Rainbow Extension" pill — and the pill text is a saturated blue-link `#0000ee`, a deliberately retro web-blue that reads as approachable rather than corporate. Where most Ethereum wallets choose a single trust-blue and a dark dashboard, Rainbow chooses light, round, and multi-color: it is a consumer product that happens to hold your keys, not a terminal that happens to be a wallet. The signature gesture is the rainbow gradient itself — never a single flat brand color, always the full spectrum sweeping pink → orange → blue → purple.'



# Canonical 8-role aliases (bg / text / brand / border / accent / muted / surface / danger).
# Maps role names to this entry's actual token names so role-aware
# downstream tools resolve `theme.background` → entry's `bg`, etc.
# Auto-generated by scripts/add-aliases.mjs — do not edit manually;
# regenerate after changing color token names.
aliases:
  background: bg
  foreground: text
  primary: brand
  primary-foreground: on-brand
  muted: text-muted
  border: border
  ring: focus-ring
colors:
  bg: '#ffffff'                  # canvas — plain white, the light counter-argument to dark crypto
  surface: '#ffffff'            # white cards on white
  surface-soft: '#f7f7f8'       # faint off-white panel for grouped content
  text: '#000000'               # ink — pure black headlines & body
  text-muted: '#6b6b6f'         # captions, secondary copy
  text-subtle: '#9a9aa0'        # disabled, fine print
  brand: '#ff54bb'              # Rainbow Pink — primary brand voltage (rgb 255,84,187)
  brand-orange: '#ff8a00'       # Rainbow Orange — second voltage (rgb 255,138,0)
  brand-blue: '#3897ff'         # Rainbow Blue — third gradient stop
  brand-purple: '#9b4dff'       # Rainbow Purple — fourth gradient stop
  on-brand: '#0000ee'           # CTA label color — retro web blue-link (rgb 0,0,238)
  on-brand-black: '#000000'     # black label on light brand pills where blue is too low-contrast
  link: '#0000ee'               # blue-link text — the brand's signature link color
  link-hover: '#0000cc'         # darker pressed link
  border: '#e6e6ea'             # hairline divider on white
  border-strong: '#000000'      # full-black outline for outline-buttons / emphasis frames
  focus-ring: 'rgba(255,84,187,0.45)'  # pink focus glow
  scrim: 'rgba(0,0,0,0.45)'     # modal backdrop
  semantic-up: '#1db954'        # success / confirmed
  semantic-down: '#ff3b30'      # error / failed tx
  semantic-warning: '#ff8a00'   # warning reuses Rainbow Orange

gradients:
  rainbow: 'linear-gradient(90deg, #ff54bb 0%, #ff8a00 35%, #3897ff 70%, #9b4dff 100%)'
  rainbow-radial: 'radial-gradient(circle at 30% 30%, #ff54bb, #ff8a00, #3897ff, #9b4dff)'
  pink-orange: 'linear-gradient(90deg, #ff54bb, #ff8a00)'

typography:
  display:
    family: '"SF Pro Rounded Black", "SF Pro Rounded", ui-rounded, "Hiragino Maru Gothic ProN", system-ui, -apple-system, sans-serif'
    weights: [700, 800, 900]
  body:
    family: '"SF Pro Text", system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif'
    weights: [400, 500, 600, 700]
  mono:
    family: 'ui-monospace, "SF Mono", SFMono-Regular, Menlo, monospace'
    weights: [400, 500]
  scale:
    display-mega:    { size: 96, weight: 900, lineHeight: 1.0,  tracking: '-0.03em',  family: display }
    display-xl:      { size: 72, weight: 900, lineHeight: 1.02, tracking: '-0.025em', family: display }
    display-lg:      { size: 56, weight: 900, lineHeight: 1.04, tracking: '-0.02em',  family: display }
    display-md:      { size: 40, weight: 800, lineHeight: 1.08, tracking: '-0.018em', family: display }
    h1:              { size: 40, weight: 800, lineHeight: 1.1,  tracking: '-0.018em', family: display }
    h2:              { size: 32, weight: 800, lineHeight: 1.15, tracking: '-0.012em', family: display }
    h3:              { size: 24, weight: 700, lineHeight: 1.2,  tracking: '-0.008em', family: display }
    h4:              { size: 20, weight: 700, lineHeight: 1.25, tracking: '-0.004em', family: display }
    title:           { size: 18, weight: 700, lineHeight: 1.3,  tracking: '0',        family: body }
    body-lg:         { size: 18, weight: 400, lineHeight: 1.55, tracking: '0',        family: body }
    body:            { size: 16, weight: 400, lineHeight: 1.55, tracking: '0',        family: body }
    body-sm:         { size: 14, weight: 400, lineHeight: 1.5,  tracking: '0',        family: body }
    label:           { size: 13, weight: 600, lineHeight: 1.4,  tracking: '0',        family: body }
    button:          { size: 17, weight: 700, lineHeight: 1.2,  tracking: '-0.01em',  family: display }
    nav-link:        { size: 15, weight: 600, lineHeight: 1.2,  tracking: '0',        family: body }
    caption:         { size: 12, weight: 500, lineHeight: 1.4,  tracking: '0.01em',   family: body }
    mono-address:    { size: 13, weight: 400, lineHeight: 1.3,  tracking: '0',        family: mono }

radius:
  micro: 4
  sm: 8
  md: 14
  lg: 20
  xl: 28
  card: 20
  button: 40
  button-lg: 50
  pill: 9999

spacing:
  base: 4
  scale: { xxs: 4, xs: 8, sm: 12, base: 16, md: 20, lg: 24, xl: 32, xxl: 48, section: 96 }

layout:
  page-width: 1280
  prose-width: 720
  header-height: 64

components:
  button-primary:    { bg: brand, text: on-brand, padding: '16px 28px', height: 56, radius: button, font: button }
  button-orange:     { bg: brand-orange, text: on-brand, padding: '16px 28px', height: 56, radius: button, font: button }
  button-white:      { bg: surface, text: on-brand, padding: '16px 28px', height: 56, radius: button-lg, font: button }
  button-outline:    { bg: transparent, text: text, border: '2px solid border-strong', padding: '14px 26px', height: 56, radius: button, font: button }
  card:              { bg: surface, border: '1px solid border', radius: card, padding: 24 }
  card-rainbow:      { bg: surface, border: 'none', radius: card, padding: 24, ring: 'gradient rainbow' }
  input:             { bg: surface, border: '1px solid border', text: text, radius: md, padding: '14px 16px', height: 52 }
  badge:             { bg: brand, text: on-brand, radius: pill, padding: '4px 12px' }
  nav:               { bg: surface, border: 'none', height: 64, font: nav-link }

motion:
  ease-standard: 'cubic-bezier(0.4, 0, 0.2, 1)'
  ease-bounce: 'cubic-bezier(0.34, 1.56, 0.64, 1)'
  duration-fast: 150
  duration-standard: 240
  duration-slow: 360
  reduced-motion: 'respects prefers-reduced-motion: reduce — gradient sweeps freeze to a static rainbow; hover springs collapse to color-only'

breakpoints:
  mobile: 640
  tablet: 1024
  desktop: 1280
  wide: 1536

shadows:
  ambient: 'rgba(0,0,0,0.04) 0 1px 2px'
  standard: 'rgba(0,0,0,0.08) 0 8px 24px'
  elevated: 'rgba(0,0,0,0.12) 0 20px 48px -8px'
  brand-glow: 'rgba(255,84,187,0.35) 0 12px 32px -8px'
  modal: 'rgba(0,0,0,0.20) 0 40px 80px -8px'
  none: 'none'

accessibility:
  contrast-text-on-bg: 21.0
  contrast-link-on-bg: 9.4
  contrast-black-on-brand: 7.24
  contrast-black-on-orange: 8.89
  focus-ring: '3px solid rgba(255,84,187,0.45)'
  reduced-motion-honored: true

dark-mode: light-only
---

## 1. Visual Theme & Atmosphere

Rainbow is the playful counter-argument to crypto's default darkness. Where almost every Ethereum wallet ships a dark dashboard, a single trust-blue, and a sober terminal aesthetic, Rainbow opens on **plain white** `#ffffff` with **pure black** `#000000` ink and immediately throws color at you. The product's entire identity rides on one literal idea — the rainbow — and the brand commits to it without irony: pink, orange, blue, and purple sweep through gradients, alternate across solid CTA pills, and thread through every illustration. The atmosphere is that of a consumer app that happens to hold your private keys, not a financial terminal that happens to be a wallet.

The display voice is unmistakable: **SF Pro Rounded Black at 96px**. The rounded terminals are the whole point. Rounded geometry reads as friendly, soft, approachable — and Rainbow uses it everywhere from the hero wordmark down to the button labels. The headline at near-1.0 line-height with tight negative tracking gives the marketing copy a confident, oversized warmth: "Fun, powerful, and secure crypto wallets" lands as a promise rather than a spec sheet. Black ink on white at 21:1 contrast keeps the type emphatically legible; the playfulness comes entirely from color and shape, never from washing out the text.

The signature component is the **CTA pill**. These are very rounded (40–50px radius — effectively a full pill at button height), painted in alternating brand colors: the pink "Download Rainbow Mobile" pill sits directly beside the orange "Download Rainbow Extension" pill, and a white pill carries the generic "Download." Crucially, the pill label is a saturated **blue-link `#0000ee`** — the retro web-blue of a 1990s hyperlink, chosen because it reads as approachable and friendly rather than as a corporate accent. The blue-on-pink, blue-on-orange, blue-on-white combination is a deliberate, idiosyncratic choice that no other wallet would make, and it is precisely what makes Rainbow feel like Rainbow.

The deepest brand rule is that color is **never a single flat value**. The "brand color" is not pink alone — it is the full spectrum. The rainbow gradient (pink → orange → blue → purple) appears as the app icon, as gradient rings around cards, as illustration shading, and as the background wash behind hero sections. When a single solid is needed, the system rotates through the spectrum stops (pink as primary, orange as secondary) rather than picking one forever. This is the opposite of the OpenSea/Coinbase single-blue discipline — Rainbow's clearest deviation from the crypto convention is that it refuses to pick one color.

Motion reinforces the friendliness. Hovers and presses use a gentle spring (bounce easing) rather than a flat ease; gradients can slowly drift; and interactive elements respond with a small, warm scale rather than a sharp state-flip. Nothing is clinical. The combined result is a wallet that feels like a toy in the best sense — light, round, colorful, and confident enough to put a 96px rounded headline above the fold.

**Key Characteristics:**
- Plain white canvas `#ffffff` with pure-black `#000000` ink — light, not dark, on purpose
- The rainbow IS the brand: pink `#ff54bb` + orange `#ff8a00` + blue + purple, never one flat color
- SF Pro Rounded Black display at 96px — rounded terminals signal "friendly"
- Very rounded CTA pills (40px buttons, 50px on the white variant)
- Alternating solid-color CTAs: pink pill beside orange pill beside white pill
- Blue-link `#0000ee` button/label text — retro, approachable web-blue
- Multi-color gradient signature: `linear-gradient(90deg, #ff54bb, #ff8a00, #3897ff, #9b4dff)`
- High legibility (21:1 black-on-white) — playfulness comes from color & shape, not low contrast
- Gentle spring motion (bounce easing) — warm, never clinical
- Light-only — no dark mode; the brightness is the brand position

## 2. Color Palette & Roles

### Primary / Canvas
- **Canvas** (`#ffffff`): Plain white page floor — the deliberate light position against dark-default crypto.
- **Surface** (`#ffffff`): White cards on white, separated by hairline borders rather than fills.
- **Surface Soft** (`#f7f7f8`): Faint off-white panel for grouped or nested content.
- **Ink** (`#000000`): Primary headlines and body. Pure black — not a softened near-black.

### Brand (the rainbow)
- **Rainbow Pink** (`#ff54bb`) [rgb 255,84,187]: Primary brand voltage. The first gradient stop and the primary solid-pill color.
- **Rainbow Orange** (`#ff8a00`) [rgb 255,138,0]: Second voltage. Secondary CTA pill and warning semantic.
- **Rainbow Blue** (`#3897ff`): Third gradient stop. Used inside the signature gradient and for illustration shading.
- **Rainbow Purple** (`#9b4dff`): Fourth gradient stop, closing the spectrum.
- **Rainbow Gradient** (`linear-gradient(90deg, #ff54bb, #ff8a00, #3897ff, #9b4dff)`): The true brand mark — gradients before solids.

### Interactive
- **Blue-link** (`#0000ee`) [rgb 0,0,238]: The label color on CTA pills and the text-link color sitewide. Retro web-blue, chosen for approachability.
- **Link Hover** (`#0000cc`): Pressed/hovered link.
- **Hover** — primary pill brightens slightly + springs up 1px; outline button fills black.
- **Active / Pressed** — pill scales to 0.97 with bounce ease.
- **Focus ring** — `3px solid rgba(255,84,187,0.45)` pink glow.

### Neutral Scale
`#ffffff` (Canvas) → `#f7f7f8` (Surface Soft) → `#e6e6ea` (Border) → `#9a9aa0` (Subtle) → `#6b6b6f` (Muted) → `#000000` (Ink). The scale is a clean neutral run with no warm tint — Rainbow gets all of its color from the brand spectrum, so the greys stay perfectly neutral to let the rainbow pop.

### Surface & Borders
- **Border** (`#e6e6ea`): Default 1px hairline divider on white surfaces.
- **Border Strong** (`#000000`): Full-black 2px outline for outline-buttons and emphasis frames.
- **Rainbow Ring**: A gradient border (the rainbow gradient as a 2px ring) used on featured cards.

### Shadow Colors
Rainbow uses **soft neutral drop shadows** at low opacity for ambient depth, plus one signature **pink-tinted glow** (`rgba(255,84,187,0.35) 0 12px 32px -8px`) reserved for the primary pink CTA on hover. The brand glow makes the primary action feel like it's lit from within — a warm, candy-like lift rather than a hard material shadow.

### Semantic
- **Up / Success** (`#1db954`): Confirmed transaction, success state.
- **Down / Error** (`#ff3b30`): Failed transaction, destructive action.
- **Warning** (`#ff8a00`): Reuses Rainbow Orange — the brand color doubles as the caution color, keeping the palette tight.
- **Info** = Blue-link `#0000ee`.

## 3. Typography Rules

### Font Family
- **Display** — `SF Pro Rounded Black`, fallback `"SF Pro Rounded", ui-rounded, "Hiragino Maru Gothic ProN", system-ui, -apple-system, sans-serif`. The rounded variant of Apple's system sans, at the heaviest Black weight. Rounded terminals are the brand's friendliness signal; Black weight is the confidence signal.
- **Body** — `SF Pro Text`, fallback `system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`. The standard (non-rounded) system text face for running copy, where rounded would reduce readability at small sizes.
- **Mono** — `ui-monospace, "SF Mono", SFMono-Regular, Menlo, monospace` for wallet addresses and tx hashes.

### Hierarchy

| Role | Font | Size | Weight | Line Height | Letter Spacing | Notes |
|------|------|-----:|-------:|------------:|---------------:|-------|
| display-mega | SF Pro Rounded Black | 96 | 900 | 1.00 | -0.03em | Marketing hero — the brand headline |
| display-xl   | SF Pro Rounded Black | 72 | 900 | 1.02 | -0.025em | Section heros |
| display-lg   | SF Pro Rounded Black | 56 | 900 | 1.04 | -0.02em | Page titles |
| display-md   | SF Pro Rounded | 40 | 800 | 1.08 | -0.018em | Sub-section titles |
| h1           | SF Pro Rounded | 40 | 800 | 1.10 | -0.018em | Primary headings |
| h2           | SF Pro Rounded | 32 | 800 | 1.15 | -0.012em | Section heads |
| h3           | SF Pro Rounded | 24 | 700 | 1.20 | -0.008em | Card / block titles |
| h4           | SF Pro Rounded | 20 | 700 | 1.25 | -0.004em | Minor heads |
| title        | SF Pro Text | 18 | 700 | 1.30 | 0 | Inline emphasis |
| body-lg      | SF Pro Text | 18 | 400 | 1.55 | 0 | Lead paragraph |
| body         | SF Pro Text | 16 | 400 | 1.55 | 0 | Default running text |
| body-sm      | SF Pro Text | 14 | 400 | 1.50 | 0 | Secondary body |
| label        | SF Pro Text | 13 | 600 | 1.40 | 0 | Form labels, eyebrows |
| button       | SF Pro Rounded | 17 | 700 | 1.20 | -0.01em | All CTA pill labels (rounded!) |
| nav-link     | SF Pro Text | 15 | 600 | 1.20 | 0 | Top nav |
| caption      | SF Pro Text | 12 | 500 | 1.40 | 0.01em | Fine print, footnotes |
| mono-address | SF Mono | 13 | 400 | 1.30 | 0 | Wallet address truncation |

### Principles
- **Rounded for display & buttons, standard for body** — the rounded variant carries the brand personality on headlines and CTA labels; running copy uses SF Pro Text so small sizes stay crisp.
- **Black (900) weight on the marketing hero** — SF Pro Rounded Black at 96px is the brand's single loudest gesture; never lighter than 800 on display.
- **Negative tracking scales with size** — -0.03em at 96px tightens to 0 at body, so big type locks up while small type breathes.
- **Line-height near 1.0 on the mega display** — the 96px headline sits tight, reinforcing the confident, poster-like presence.
- **Button labels are rounded too** — the CTA text uses SF Pro Rounded at weight 700, so even the call-to-action feels friendly.
- **Pure black ink, never grey headlines** — the palette gets its softness from rounded shapes and color, so type stays maximally legible.
- **Substitutes**: Closest open licensable equivalents to SF Pro Rounded are Nunito, Quicksand, or Varela Round for the rounded display; Inter or system-ui for the SF Pro Text body role.

## 4. Component Stylings

### Buttons

**`button-primary`** — Primary CTA. Rainbow Pink `#ff54bb` bg, blue-link `#0000ee` label, 16 × 28 padding, 56px height, 40px radius (effectively a full pill). Hover brightens + adds the pink brand-glow shadow + springs up 1px. The signature pink pill — used on "Download Rainbow Mobile" and primary downloads.

**`button-orange`** — Secondary CTA. Rainbow Orange `#ff8a00` bg, blue-link `#0000ee` label, same 56px / 40px geometry. Sits directly beside the pink pill in dual-CTA rows ("Download Rainbow Extension"). The alternating pink/orange pair is a defining Rainbow layout.

**`button-white`** — Neutral CTA. White `#ffffff` bg, blue-link `#0000ee` label, 50px radius (the most rounded variant), subtle 1px border. The generic "Download" pill — recedes against the colored CTAs.

**`button-outline`** — Ghost variant. Transparent bg, black `#000000` text, 2px black border, 40px radius, 56px height. Hover fills the button solid black with white text. Used for secondary "Learn more" actions.

### Cards

**`card`** — Default content card. White bg, 1px `#e6e6ea` hairline border, 20px radius, 24px padding. Soft ambient shadow on hover. The 20px radius keeps cards friendly-round to match the rounded type.

**`card-rainbow`** — Featured card. White bg, no flat border — instead a **2px rainbow-gradient ring** (`linear-gradient(90deg, #ff54bb, #ff8a00, #3897ff, #9b4dff)`), 20px radius, 24px padding. Used for the hero feature or the "most popular" plan. The gradient ring is the card-level expression of the brand.

**`card-illustration`** — Marketing block. Holds a colorful spot illustration (rainbow-shaded) above a rounded headline + body. No border; depends on the illustration for visual weight.

### Badges / Tags / Pills

**`badge`** — Default pill. Rainbow Pink `#ff54bb` bg, blue-link or black text, full pill radius, 4 × 12 padding. Used for "New", counts, and status chips.

**`badge-gradient`** — Featured pill. Rainbow-gradient bg, white text, full pill. Reserved for "Featured" / "Popular" markers.

**`badge-soft`** — Subtle pill. `#f7f7f8` soft-grey bg, `#6b6b6f` muted text, full pill. Neutral metadata tags.

### Inputs / Forms

**`input`** — Text field. White bg, 1px `#e6e6ea` border, 14px radius, 14 × 16 padding, 52px height. Focus → 3px `rgba(255,84,187,0.45)` pink ring + border tightens to pink `#ff54bb`. The pink focus glow ties form interaction back to the brand.

**`input-search`** — Search field. Same as input but full-pill radius with a leading search glyph — round to match the button language.

### Navigation

**`nav`** — Top bar, 64px tall, white `#ffffff` bg, no bottom border (the white-on-white blends; depth comes from a faint shadow on scroll). Rainbow wordmark left (rounded, often with the gradient app-icon glyph), centered nav links in nav-link 15/600, right cluster ends in the primary pink "Download" pill.

**`footer`** — Light footer on white or faint `#f7f7f8`. Multi-column rounded link lists, the rainbow gradient wordmark, and app-store badges. Stays light — Rainbow does not invert to a dark footer.

## 5. Layout Principles

### Spacing System
- **Base unit**: 4px.
- **Tokens**: 4 / 8 / 12 / 16 / 20 / 24 / 32 / 48 / 96.
- **Section padding (vertical)**: 96px on marketing — generous, airy, lets the oversized rounded type breathe.
- **Card internal padding**: 24px.
- **Gutters**: 24px between cards, 32px between feature blocks.

### Grid & Container
- **Max content width**: 1280px.
- **Prose width**: 720px for long-form copy.
- **Feature grid**: responsive 3-up at desktop, 2-up at tablet, 1-up at mobile, with 24px gaps.
- **Hero**: centered single-column with the 96px headline, a body sub, and a dual-CTA pill row (pink + orange) directly beneath.

### Whitespace Philosophy
**Bright generosity.** Rainbow uses a lot of white space, but the white is the canvas color itself, so the airiness reads as openness rather than emptiness. The oversized rounded headlines need room to land; the color comes from concentrated bursts (CTA pills, illustrations, gradient rings) against a calm white field. The contrast of big-color-on-big-white is the layout's whole rhythm.

### Section Cadence
White hero with rainbow CTAs → white feature grid → occasional full-bleed rainbow-gradient band (the one place color floods the full width) → white → light footer. The single gradient band per page is the punctuation; everything else stays white so the band sings.

## 6. Shapes & Radius Scale

- **Micro** 4 — micro chips, inline tags
- **sm** 8 — small interior elements
- **md** 14 — inputs, dropdowns
- **card / lg** 20 — cards, panels (the signature card radius — round and friendly)
- **xl** 28 — large modals, sheets
- **button** 40 — every CTA pill (very rounded)
- **button-lg** 50 — the white CTA variant (the most rounded)
- **pill** 9999 — badges, avatars, full pills

The radius philosophy is "round everything." Buttons at 40–50px on a 56px-tall element are effectively full pills; cards at 20px are noticeably softer than the 8–12px most SaaS uses. The rounded radius scale is the structural echo of the rounded typeface — friendliness is expressed in both shape and type.

## 7. Depth & Elevation

| Level | Treatment | Use |
|-------|-----------|-----|
| 0 Flat | No shadow, white-on-white separated by 1px `#e6e6ea` | Body sections, default cards |
| 1 Ambient | `rgba(0,0,0,0.04) 0 1px 2px` | Resting raised cards |
| 2 Standard | `rgba(0,0,0,0.08) 0 8px 24px` | Hover cards, dropdowns |
| 3 Brand Glow | `rgba(255,84,187,0.35) 0 12px 32px -8px` | Primary pink CTA hover (signature) |
| 4 Elevated | `rgba(0,0,0,0.12) 0 20px 48px -8px` | Popovers, floating panels |
| 5 Modal | `rgba(0,0,0,0.20) 0 40px 80px -8px` + scrim `rgba(0,0,0,0.45)` | Dialogs |
| Focus ring | `0 0 0 3px rgba(255,84,187,0.45)` | Keyboard focus (pink) |

**Shadow Philosophy**: Rainbow keeps neutral shadows soft and low-opacity so the white canvas never feels heavy — depth is a gentle suggestion, not a hard material edge. The one exception is the **pink brand-glow** on the primary CTA: a colored, candy-like halo that makes the main action feel lit from within. Elevation is mostly carried by the hairline borders and the color of the elements themselves rather than by aggressive drop shadows.

## 8. Interaction & Motion

- **Easing standard** — `cubic-bezier(0.4, 0, 0.2, 1)` for fades, dropdowns, modal transitions.
- **Easing bounce** — `cubic-bezier(0.34, 1.56, 0.64, 1)` for button presses and card lifts — the gentle spring is the brand's motion personality.
- **Durations** — fast 150ms (hover), standard 240ms (lift/fade), slow 360ms (gradient drift, page transition).
- **Button hover** — primary pink pill brightens slightly, springs up 1px, and gains the pink brand-glow over 150ms.
- **Button press** — scales to 0.97 with bounce ease, then springs back — a tactile, toy-like response.
- **Card hover** — lifts with standard shadow over 240ms; rainbow-ring cards subtly intensify the gradient.
- **Gradient drift** — featured rainbow bands and rings can slowly animate the gradient position (360ms+ loop) for a living-color effect.
- **Page transition** — 240–360ms cross-fade between routes.
- **Reduced motion** — `prefers-reduced-motion: reduce` freezes all gradient animation to a static rainbow, collapses spring lifts to color-only state changes, and removes the press-scale.

## 9. Accessibility & A11y

- **Contrast**: Black on white `#ffffff` = **21:1** (AAA). Blue-link `#0000ee` on white = **9.4:1** (AAA). Black on pink `#ff54bb` = **7.24:1** (AAA). Black on orange `#ff8a00` = **8.89:1** (AAA). Blue-link on pink = 3.24:1 and blue-link on orange = 3.98:1 (both pass AA for large/bold text only — the CTA labels are 17px bold, so they qualify; do not shrink them below large-text thresholds).
- **Critical note**: White text fails on both brand pills (white-on-pink 2.90:1, white-on-orange 2.36:1). Rainbow correctly uses **black or blue-link**, never white, as the label color on the bright pills — replicate this. When in doubt, black `#000000` on pink/orange gives the strongest contrast (7.24:1 / 8.89:1).
- **Focus indicator**: 3px solid `rgba(255,84,187,0.45)` pink ring on every interactive element; focused inputs additionally tighten their border to pink `#ff54bb`.
- **ARIA patterns**: CTA pills are `<a>` or `<button>` with descriptive labels ("Download Rainbow for iOS"). The gradient ring and decorative rainbow illustrations are `aria-hidden="true"`. Modals use `role="dialog"` with a focus trap.
- **Keyboard nav**: Tab walks nav → hero CTAs (pink then orange) → feature cards in DOM order; Enter/Space activate pills; Escape dismisses modals and sheets.
- **Screen reader hints**: App-store badges carry full text alternatives ("Download on the App Store"). Address-mono truncations expose the full address via `title`/`aria-label`. Gradient is decorative and announced as nothing.
- **Reduced motion**: Honoured — see §8. Color information is never conveyed by gradient animation alone.

## 10. Responsive Behavior

| Breakpoint | Width | Key Changes |
|------------|------:|-------------|
| Mobile | < 640 | Top nav → hamburger; hero display-mega 96 → 44px; CTA pills stack full-width (pink over orange); feature grid 1-up |
| Tablet | 640–1024 | Hero display 96 → 64px; CTA pills sit side-by-side; feature grid 2-up |
| Desktop | 1024–1280 | Full nav; hero at 96px; feature grid 3-up |
| Wide | > 1280 | Container caps at 1280px centered; generous side margins |

**Touch Targets**: CTA pills render at minimum 56px height on mobile — well above the 44px minimum — and stretch full-width so they're unmissable. Nav and icon targets are at least 44 × 44px.

**Collapsing Strategy**: Top nav collapses to a hamburger sheet; the dual pink/orange CTA row stacks vertically (pink first) on mobile. Feature cards reflow 3→2→1. The full-bleed rainbow gradient band stays full-width at every size — it's the one element that never shrinks its color.

**Image Behavior**: Spot illustrations and app screenshots use `loading="lazy"` and scale proportionally; the rainbow gradient is CSS, so it stays crisp at any resolution. Hero device mockups crop to centre on mobile.

## 11. Content & Voice

- **Tone** — friendly, plain-spoken, confidently fun. The brand promise is literally "Fun, powerful, and secure crypto wallets" — fun comes first. Copy avoids both crypto-bro hype and corporate-finance distance; it sounds like a consumer app talking to a friend.
- **Microcopy** — warm and direct: "Download", "Get Rainbow", "Connect", "Explore". Verbs are plain and inviting, never jargon-heavy.
- **CTA verbs** — "Download" (primary acquisition, split across pink mobile / orange extension), "Get started", "Explore", "Connect" (wallet action).
- **Empty states** — encouraging and actionable: "No tokens yet — buy your first" with a colored pill below, never a dead-end.
- **Error messages** — clear and reassuring: "Transaction didn't go through — your funds are safe. Try again." Safety reassurance is part of the brand ("secure" is in the tagline).
- **Address formatting** — wallet addresses truncate as `0x1234…abcd` in mono, with the full value available on tap/hover; ENS names preferred when present.
- **Multi-color framing** — the rainbow is also the verbal metaphor: "every color of crypto", "the wallet for the whole spectrum" — the brand leans into its own name.

## 12. Dark Mode & Theming

Rainbow's marketing site is **light-only** — there is no dark variant, and that is a deliberate brand position. In a category where dark dashboards are the default, Rainbow's bright white canvas is the differentiator; inverting to dark would erase the single thing that makes it feel like a consumer product rather than a trading terminal. The brightness is the brand.

(The Rainbow mobile/extension *app* does offer a system-following theme for in-wallet use, but the public web identity stays light. When building Rainbow-flavored web surfaces, stay on white — do not author a dark variant.)

The rainbow spectrum (pink → orange → blue → purple) is the only "theming" axis: featured surfaces get the gradient ring or band, default surfaces stay white. Color intensity, not light/dark, is how Rainbow modulates emphasis.

## 13. Lineage & Influences

Rainbow's design language descends from **Apple's friendly-consumer aesthetic** more than from crypto. The choice of SF Pro Rounded — Apple's own rounded system face — and the very-rounded pill geometry place Rainbow squarely in the lineage of iOS app design and Apple's "approachable software" tradition, deliberately distancing it from the Bloomberg-terminal register of most Ethereum tooling. The literal-rainbow identity also nods to a deeper queer-pride and 1980s-tech optimism lineage (the original rainbow Apple logo, the pride flag) — color as joy, color as inclusion, color as "for everyone."

What it borrows: the full-pill CTA from consumer mobile design; the bright-gradient-on-white look from a generation of friendly fintech and Stripe-era marketing sites; the blue-link label color from the earliest web, repurposed as a knowing, retro-approachable accent. What it explicitly rejects: the dark canvas default (rejected as too clinical and exclusionary), the single trust-blue brand discipline (rejected in favour of the whole spectrum), and sharp/square corners (rejected as cold — everything is rounded). The result is the friendliest-looking wallet onchain, and the design choices are all in service of "crypto can be fun and for everyone."

Influences:
- **Apple Human Interface / SF Pro Rounded** — Rounded system type and friendly-consumer geometry; the direct source of Rainbow's display face and pill shapes. https://developer.apple.com/design/human-interface-guidelines
- **Stripe** — Bright gradient-on-white marketing aesthetic, generous whitespace, confident large type. https://stripe.com
- **Linear** — Crisp light surfaces, hairline borders, restrained neutral greys that let an accent pop. https://linear.app
- **Pride flag / rainbow symbolism** — Color-as-inclusion lineage that the brand name and spectrum directly invoke. https://en.wikipedia.org/wiki/Rainbow_flag
- **Notion** — Clean white canvas, soft-rounded cards, friendly-but-legible type pairing. https://www.notion.com

## 14. Do's and Don'ts

### Do
- Keep the canvas plain white `#ffffff` with pure-black `#000000` ink — the brightness is the brand
- Treat the rainbow as the brand, not a single color — gradients (pink → orange → blue → purple) before solids
- When a solid is needed, rotate the spectrum: pink `#ff54bb` primary, orange `#ff8a00` secondary
- Use SF Pro Rounded Black at 96px for the hero — the rounded Black weight is the loudest brand gesture
- Make CTAs very rounded pills (40px buttons, 50px on the white variant)
- Use blue-link `#0000ee` (or black) as the pill label color — the retro web-blue is intentional
- Pair pink and orange CTA pills side-by-side in dual-action rows
- Use black `#000000` (not white) for any text on the pink or orange pills — contrast demands it
- Use the pink brand-glow shadow on the primary CTA hover — the candy-lit lift is signature
- Keep motion gentle and springy (bounce easing) — friendly, never clinical

### Don't
- Don't go dark — Rainbow has no dark mode; a dark canvas erases the whole brand position
- Don't pick a single brand color — reducing the spectrum to one voltage breaks the rainbow identity
- Don't use white text on the pink or orange pills — it fails contrast (2.90:1 / 2.36:1); use black or blue-link
- Don't square the corners — the rounded radius scale (20px cards, 40px+ pills) is the friendliness signal
- Don't use a non-rounded display face — SF Pro Rounded's terminals are the brand; Inter/Helvetica reads cold here
- Don't grey-out the headlines — keep pure-black ink; the softness comes from shape and color, not low contrast
- Don't replace the blue-link label with a corporate accent — the retro `#0000ee` is a deliberate, approachable choice
- Don't flood every surface with gradient — one full-bleed rainbow band per page; keep the rest white so it sings
- Don't introduce off-spectrum colors (teal, mustard) — the palette is pink/orange/blue/purple plus neutrals
- Don't make motion sharp or instant — the gentle spring is the brand's tactile personality

## 15. Agent Prompt Guide

### Quick Color Reference
- Canvas white: `#ffffff`
- Ink black: `#000000`
- Rainbow Pink (primary): `#ff54bb`
- Rainbow Orange (secondary): `#ff8a00`
- Rainbow Blue: `#3897ff`
- Rainbow Purple: `#9b4dff`
- Blue-link label/text: `#0000ee`
- Rainbow gradient: `linear-gradient(90deg, #ff54bb, #ff8a00, #3897ff, #9b4dff)`
- Border hairline: `#e6e6ea`
- Muted text: `#6b6b6f`

### Example Component Prompts
- "Create a Rainbow hero: plain white `#ffffff` background, centered 96px SF Pro Rounded Black headline 'Fun, powerful, and secure crypto wallets' weight 900 with -0.03em tracking and 1.0 line-height in `#000000`, a 18px SF Pro Text sub in `#000000`, and a dual-CTA pill row — a pink `#ff54bb` pill 'Download Rainbow Mobile' beside an orange `#ff8a00` pill 'Download Rainbow Extension', both 56px tall, 40px radius, with blue-link `#0000ee` weight-700 labels in SF Pro Rounded."
- "Design a Rainbow CTA pill: Rainbow Pink `#ff54bb` background, 56px height, 40px radius (nearly full pill), label 'Get Rainbow' in SF Pro Rounded weight 700 17px colored blue-link `#0000ee`. On hover: brighten slightly, spring up 1px with bounce easing, and add a pink brand-glow shadow `rgba(255,84,187,0.35) 0 12px 32px -8px`. On press: scale to 0.97."
- "Build a featured card with a rainbow ring: white `#ffffff` card, 20px radius, 24px padding, no flat border — instead a 2px gradient border using `linear-gradient(90deg, #ff54bb, #ff8a00, #3897ff, #9b4dff)`. Inside: a rounded h3 24/700 in `#000000`, body-sm copy in `#6b6b6f`, and a 'Most popular' gradient badge (rainbow-gradient bg, white text, full pill)."
- "Compose a full-bleed rainbow band: 96px vertical padding, background `linear-gradient(90deg, #ff54bb, #ff8a00, #3897ff, #9b4dff)`, a centered 56px SF Pro Rounded Black headline in `#000000` (black for contrast on the bright gradient), and a single white `#ffffff` pill CTA 'Download' with blue-link `#0000ee` label at 50px radius."
- "Render a Rainbow input: white `#ffffff` field, 1px `#e6e6ea` border, 14px radius, 52px height, 14 × 16 padding. On focus: 3px pink ring `rgba(255,84,187,0.45)` and border tightens to `#ff54bb`. Label in SF Pro Text 13/600 `#000000` above."

### Iteration Guide
1. Start on plain white `#ffffff` with pure-black `#000000` text — never dark, never grey headlines.
2. SF Pro Rounded Black at 96px for the hero, weight ≥800 on all display; SF Pro Text for body.
3. Make every CTA a very-rounded pill (40px buttons, 50px white variant) — round is the brand.
4. Color the pills by rotating the spectrum: pink `#ff54bb` primary, orange `#ff8a00` secondary, side-by-side.
5. Label pill text in blue-link `#0000ee` (or black) — never white on the bright pills (fails contrast).
6. Treat the rainbow gradient as the true brand mark — use it for rings, the one full-bleed band, and icons.
7. Keep neutral greys perfectly neutral so the spectrum pops; depth comes from hairlines + the pink glow.
8. Make motion springy and gentle (bounce easing); honour reduced-motion by freezing gradients to static.
Prose

1. Visual Theme & Atmosphere

Rainbow is the playful counter-argument to crypto’s default darkness. Where almost every Ethereum wallet ships a dark dashboard, a single trust-blue, and a sober terminal aesthetic, Rainbow opens on plain white #ffffff with pure black #000000 ink and immediately throws color at you. The product’s entire identity rides on one literal idea — the rainbow — and the brand commits to it without irony: pink, orange, blue, and purple sweep through gradients, alternate across solid CTA pills, and thread through every illustration. The atmosphere is that of a consumer app that happens to hold your private keys, not a financial terminal that happens to be a wallet.

The display voice is unmistakable: SF Pro Rounded Black at 96px. The rounded terminals are the whole point. Rounded geometry reads as friendly, soft, approachable — and Rainbow uses it everywhere from the hero wordmark down to the button labels. The headline at near-1.0 line-height with tight negative tracking gives the marketing copy a confident, oversized warmth: “Fun, powerful, and secure crypto wallets” lands as a promise rather than a spec sheet. Black ink on white at 21:1 contrast keeps the type emphatically legible; the playfulness comes entirely from color and shape, never from washing out the text.

The signature component is the CTA pill. These are very rounded (40–50px radius — effectively a full pill at button height), painted in alternating brand colors: the pink “Download Rainbow Mobile” pill sits directly beside the orange “Download Rainbow Extension” pill, and a white pill carries the generic “Download.” Crucially, the pill label is a saturated blue-link #0000ee — the retro web-blue of a 1990s hyperlink, chosen because it reads as approachable and friendly rather than as a corporate accent. The blue-on-pink, blue-on-orange, blue-on-white combination is a deliberate, idiosyncratic choice that no other wallet would make, and it is precisely what makes Rainbow feel like Rainbow.

The deepest brand rule is that color is never a single flat value. The “brand color” is not pink alone — it is the full spectrum. The rainbow gradient (pink → orange → blue → purple) appears as the app icon, as gradient rings around cards, as illustration shading, and as the background wash behind hero sections. When a single solid is needed, the system rotates through the spectrum stops (pink as primary, orange as secondary) rather than picking one forever. This is the opposite of the OpenSea/Coinbase single-blue discipline — Rainbow’s clearest deviation from the crypto convention is that it refuses to pick one color.

Motion reinforces the friendliness. Hovers and presses use a gentle spring (bounce easing) rather than a flat ease; gradients can slowly drift; and interactive elements respond with a small, warm scale rather than a sharp state-flip. Nothing is clinical. The combined result is a wallet that feels like a toy in the best sense — light, round, colorful, and confident enough to put a 96px rounded headline above the fold.

Key Characteristics:

  • Plain white canvas #ffffff with pure-black #000000 ink — light, not dark, on purpose
  • The rainbow IS the brand: pink #ff54bb + orange #ff8a00 + blue + purple, never one flat color
  • SF Pro Rounded Black display at 96px — rounded terminals signal “friendly”
  • Very rounded CTA pills (40px buttons, 50px on the white variant)
  • Alternating solid-color CTAs: pink pill beside orange pill beside white pill
  • Blue-link #0000ee button/label text — retro, approachable web-blue
  • Multi-color gradient signature: linear-gradient(90deg, #ff54bb, #ff8a00, #3897ff, #9b4dff)
  • High legibility (21:1 black-on-white) — playfulness comes from color & shape, not low contrast
  • Gentle spring motion (bounce easing) — warm, never clinical
  • Light-only — no dark mode; the brightness is the brand position

2. Color Palette & Roles

Primary / Canvas

  • Canvas (#ffffff): Plain white page floor — the deliberate light position against dark-default crypto.
  • Surface (#ffffff): White cards on white, separated by hairline borders rather than fills.
  • Surface Soft (#f7f7f8): Faint off-white panel for grouped or nested content.
  • Ink (#000000): Primary headlines and body. Pure black — not a softened near-black.

Brand (the rainbow)

  • Rainbow Pink (#ff54bb) [rgb 255,84,187]: Primary brand voltage. The first gradient stop and the primary solid-pill color.
  • Rainbow Orange (#ff8a00) [rgb 255,138,0]: Second voltage. Secondary CTA pill and warning semantic.
  • Rainbow Blue (#3897ff): Third gradient stop. Used inside the signature gradient and for illustration shading.
  • Rainbow Purple (#9b4dff): Fourth gradient stop, closing the spectrum.
  • Rainbow Gradient (linear-gradient(90deg, #ff54bb, #ff8a00, #3897ff, #9b4dff)): The true brand mark — gradients before solids.

Interactive

  • Blue-link (#0000ee) [rgb 0,0,238]: The label color on CTA pills and the text-link color sitewide. Retro web-blue, chosen for approachability.
  • Link Hover (#0000cc): Pressed/hovered link.
  • Hover — primary pill brightens slightly + springs up 1px; outline button fills black.
  • Active / Pressed — pill scales to 0.97 with bounce ease.
  • Focus ring3px solid rgba(255,84,187,0.45) pink glow.

Neutral Scale

#ffffff (Canvas) → #f7f7f8 (Surface Soft) → #e6e6ea (Border) → #9a9aa0 (Subtle) → #6b6b6f (Muted) → #000000 (Ink). The scale is a clean neutral run with no warm tint — Rainbow gets all of its color from the brand spectrum, so the greys stay perfectly neutral to let the rainbow pop.

Surface & Borders

  • Border (#e6e6ea): Default 1px hairline divider on white surfaces.
  • Border Strong (#000000): Full-black 2px outline for outline-buttons and emphasis frames.
  • Rainbow Ring: A gradient border (the rainbow gradient as a 2px ring) used on featured cards.

Shadow Colors

Rainbow uses soft neutral drop shadows at low opacity for ambient depth, plus one signature pink-tinted glow (rgba(255,84,187,0.35) 0 12px 32px -8px) reserved for the primary pink CTA on hover. The brand glow makes the primary action feel like it’s lit from within — a warm, candy-like lift rather than a hard material shadow.

Semantic

  • Up / Success (#1db954): Confirmed transaction, success state.
  • Down / Error (#ff3b30): Failed transaction, destructive action.
  • Warning (#ff8a00): Reuses Rainbow Orange — the brand color doubles as the caution color, keeping the palette tight.
  • Info = Blue-link #0000ee.

3. Typography Rules

Font Family

  • DisplaySF Pro Rounded Black, fallback "SF Pro Rounded", ui-rounded, "Hiragino Maru Gothic ProN", system-ui, -apple-system, sans-serif. The rounded variant of Apple’s system sans, at the heaviest Black weight. Rounded terminals are the brand’s friendliness signal; Black weight is the confidence signal.
  • BodySF Pro Text, fallback system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif. The standard (non-rounded) system text face for running copy, where rounded would reduce readability at small sizes.
  • Monoui-monospace, "SF Mono", SFMono-Regular, Menlo, monospace for wallet addresses and tx hashes.

Hierarchy

RoleFontSizeWeightLine HeightLetter SpacingNotes
display-megaSF Pro Rounded Black969001.00-0.03emMarketing hero — the brand headline
display-xlSF Pro Rounded Black729001.02-0.025emSection heros
display-lgSF Pro Rounded Black569001.04-0.02emPage titles
display-mdSF Pro Rounded408001.08-0.018emSub-section titles
h1SF Pro Rounded408001.10-0.018emPrimary headings
h2SF Pro Rounded328001.15-0.012emSection heads
h3SF Pro Rounded247001.20-0.008emCard / block titles
h4SF Pro Rounded207001.25-0.004emMinor heads
titleSF Pro Text187001.300Inline emphasis
body-lgSF Pro Text184001.550Lead paragraph
bodySF Pro Text164001.550Default running text
body-smSF Pro Text144001.500Secondary body
labelSF Pro Text136001.400Form labels, eyebrows
buttonSF Pro Rounded177001.20-0.01emAll CTA pill labels (rounded!)
nav-linkSF Pro Text156001.200Top nav
captionSF Pro Text125001.400.01emFine print, footnotes
mono-addressSF Mono134001.300Wallet address truncation

Principles

  • Rounded for display & buttons, standard for body — the rounded variant carries the brand personality on headlines and CTA labels; running copy uses SF Pro Text so small sizes stay crisp.
  • Black (900) weight on the marketing hero — SF Pro Rounded Black at 96px is the brand’s single loudest gesture; never lighter than 800 on display.
  • Negative tracking scales with size — -0.03em at 96px tightens to 0 at body, so big type locks up while small type breathes.
  • Line-height near 1.0 on the mega display — the 96px headline sits tight, reinforcing the confident, poster-like presence.
  • Button labels are rounded too — the CTA text uses SF Pro Rounded at weight 700, so even the call-to-action feels friendly.
  • Pure black ink, never grey headlines — the palette gets its softness from rounded shapes and color, so type stays maximally legible.
  • Substitutes: Closest open licensable equivalents to SF Pro Rounded are Nunito, Quicksand, or Varela Round for the rounded display; Inter or system-ui for the SF Pro Text body role.

4. Component Stylings

Buttons

button-primary — Primary CTA. Rainbow Pink #ff54bb bg, blue-link #0000ee label, 16 × 28 padding, 56px height, 40px radius (effectively a full pill). Hover brightens + adds the pink brand-glow shadow + springs up 1px. The signature pink pill — used on “Download Rainbow Mobile” and primary downloads.

button-orange — Secondary CTA. Rainbow Orange #ff8a00 bg, blue-link #0000ee label, same 56px / 40px geometry. Sits directly beside the pink pill in dual-CTA rows (“Download Rainbow Extension”). The alternating pink/orange pair is a defining Rainbow layout.

button-white — Neutral CTA. White #ffffff bg, blue-link #0000ee label, 50px radius (the most rounded variant), subtle 1px border. The generic “Download” pill — recedes against the colored CTAs.

button-outline — Ghost variant. Transparent bg, black #000000 text, 2px black border, 40px radius, 56px height. Hover fills the button solid black with white text. Used for secondary “Learn more” actions.

Cards

card — Default content card. White bg, 1px #e6e6ea hairline border, 20px radius, 24px padding. Soft ambient shadow on hover. The 20px radius keeps cards friendly-round to match the rounded type.

card-rainbow — Featured card. White bg, no flat border — instead a 2px rainbow-gradient ring (linear-gradient(90deg, #ff54bb, #ff8a00, #3897ff, #9b4dff)), 20px radius, 24px padding. Used for the hero feature or the “most popular” plan. The gradient ring is the card-level expression of the brand.

card-illustration — Marketing block. Holds a colorful spot illustration (rainbow-shaded) above a rounded headline + body. No border; depends on the illustration for visual weight.

Badges / Tags / Pills

badge — Default pill. Rainbow Pink #ff54bb bg, blue-link or black text, full pill radius, 4 × 12 padding. Used for “New”, counts, and status chips.

badge-gradient — Featured pill. Rainbow-gradient bg, white text, full pill. Reserved for “Featured” / “Popular” markers.

badge-soft — Subtle pill. #f7f7f8 soft-grey bg, #6b6b6f muted text, full pill. Neutral metadata tags.

Inputs / Forms

input — Text field. White bg, 1px #e6e6ea border, 14px radius, 14 × 16 padding, 52px height. Focus → 3px rgba(255,84,187,0.45) pink ring + border tightens to pink #ff54bb. The pink focus glow ties form interaction back to the brand.

input-search — Search field. Same as input but full-pill radius with a leading search glyph — round to match the button language.

nav — Top bar, 64px tall, white #ffffff bg, no bottom border (the white-on-white blends; depth comes from a faint shadow on scroll). Rainbow wordmark left (rounded, often with the gradient app-icon glyph), centered nav links in nav-link 15/600, right cluster ends in the primary pink “Download” pill.

footer — Light footer on white or faint #f7f7f8. Multi-column rounded link lists, the rainbow gradient wordmark, and app-store badges. Stays light — Rainbow does not invert to a dark footer.

5. Layout Principles

Spacing System

  • Base unit: 4px.
  • Tokens: 4 / 8 / 12 / 16 / 20 / 24 / 32 / 48 / 96.
  • Section padding (vertical): 96px on marketing — generous, airy, lets the oversized rounded type breathe.
  • Card internal padding: 24px.
  • Gutters: 24px between cards, 32px between feature blocks.

Grid & Container

  • Max content width: 1280px.
  • Prose width: 720px for long-form copy.
  • Feature grid: responsive 3-up at desktop, 2-up at tablet, 1-up at mobile, with 24px gaps.
  • Hero: centered single-column with the 96px headline, a body sub, and a dual-CTA pill row (pink + orange) directly beneath.

Whitespace Philosophy

Bright generosity. Rainbow uses a lot of white space, but the white is the canvas color itself, so the airiness reads as openness rather than emptiness. The oversized rounded headlines need room to land; the color comes from concentrated bursts (CTA pills, illustrations, gradient rings) against a calm white field. The contrast of big-color-on-big-white is the layout’s whole rhythm.

Section Cadence

White hero with rainbow CTAs → white feature grid → occasional full-bleed rainbow-gradient band (the one place color floods the full width) → white → light footer. The single gradient band per page is the punctuation; everything else stays white so the band sings.

6. Shapes & Radius Scale

  • Micro 4 — micro chips, inline tags
  • sm 8 — small interior elements
  • md 14 — inputs, dropdowns
  • card / lg 20 — cards, panels (the signature card radius — round and friendly)
  • xl 28 — large modals, sheets
  • button 40 — every CTA pill (very rounded)
  • button-lg 50 — the white CTA variant (the most rounded)
  • pill 9999 — badges, avatars, full pills

The radius philosophy is “round everything.” Buttons at 40–50px on a 56px-tall element are effectively full pills; cards at 20px are noticeably softer than the 8–12px most SaaS uses. The rounded radius scale is the structural echo of the rounded typeface — friendliness is expressed in both shape and type.

7. Depth & Elevation

LevelTreatmentUse
0 FlatNo shadow, white-on-white separated by 1px #e6e6eaBody sections, default cards
1 Ambientrgba(0,0,0,0.04) 0 1px 2pxResting raised cards
2 Standardrgba(0,0,0,0.08) 0 8px 24pxHover cards, dropdowns
3 Brand Glowrgba(255,84,187,0.35) 0 12px 32px -8pxPrimary pink CTA hover (signature)
4 Elevatedrgba(0,0,0,0.12) 0 20px 48px -8pxPopovers, floating panels
5 Modalrgba(0,0,0,0.20) 0 40px 80px -8px + scrim rgba(0,0,0,0.45)Dialogs
Focus ring0 0 0 3px rgba(255,84,187,0.45)Keyboard focus (pink)

Shadow Philosophy: Rainbow keeps neutral shadows soft and low-opacity so the white canvas never feels heavy — depth is a gentle suggestion, not a hard material edge. The one exception is the pink brand-glow on the primary CTA: a colored, candy-like halo that makes the main action feel lit from within. Elevation is mostly carried by the hairline borders and the color of the elements themselves rather than by aggressive drop shadows.

8. Interaction & Motion

  • Easing standardcubic-bezier(0.4, 0, 0.2, 1) for fades, dropdowns, modal transitions.
  • Easing bouncecubic-bezier(0.34, 1.56, 0.64, 1) for button presses and card lifts — the gentle spring is the brand’s motion personality.
  • Durations — fast 150ms (hover), standard 240ms (lift/fade), slow 360ms (gradient drift, page transition).
  • Button hover — primary pink pill brightens slightly, springs up 1px, and gains the pink brand-glow over 150ms.
  • Button press — scales to 0.97 with bounce ease, then springs back — a tactile, toy-like response.
  • Card hover — lifts with standard shadow over 240ms; rainbow-ring cards subtly intensify the gradient.
  • Gradient drift — featured rainbow bands and rings can slowly animate the gradient position (360ms+ loop) for a living-color effect.
  • Page transition — 240–360ms cross-fade between routes.
  • Reduced motionprefers-reduced-motion: reduce freezes all gradient animation to a static rainbow, collapses spring lifts to color-only state changes, and removes the press-scale.

9. Accessibility & A11y

  • Contrast: Black on white #ffffff = 21:1 (AAA). Blue-link #0000ee on white = 9.4:1 (AAA). Black on pink #ff54bb = 7.24:1 (AAA). Black on orange #ff8a00 = 8.89:1 (AAA). Blue-link on pink = 3.24:1 and blue-link on orange = 3.98:1 (both pass AA for large/bold text only — the CTA labels are 17px bold, so they qualify; do not shrink them below large-text thresholds).
  • Critical note: White text fails on both brand pills (white-on-pink 2.90:1, white-on-orange 2.36:1). Rainbow correctly uses black or blue-link, never white, as the label color on the bright pills — replicate this. When in doubt, black #000000 on pink/orange gives the strongest contrast (7.24:1 / 8.89:1).
  • Focus indicator: 3px solid rgba(255,84,187,0.45) pink ring on every interactive element; focused inputs additionally tighten their border to pink #ff54bb.
  • ARIA patterns: CTA pills are <a> or <button> with descriptive labels (“Download Rainbow for iOS”). The gradient ring and decorative rainbow illustrations are aria-hidden="true". Modals use role="dialog" with a focus trap.
  • Keyboard nav: Tab walks nav → hero CTAs (pink then orange) → feature cards in DOM order; Enter/Space activate pills; Escape dismisses modals and sheets.
  • Screen reader hints: App-store badges carry full text alternatives (“Download on the App Store”). Address-mono truncations expose the full address via title/aria-label. Gradient is decorative and announced as nothing.
  • Reduced motion: Honoured — see §8. Color information is never conveyed by gradient animation alone.

10. Responsive Behavior

BreakpointWidthKey Changes
Mobile< 640Top nav → hamburger; hero display-mega 96 → 44px; CTA pills stack full-width (pink over orange); feature grid 1-up
Tablet640–1024Hero display 96 → 64px; CTA pills sit side-by-side; feature grid 2-up
Desktop1024–1280Full nav; hero at 96px; feature grid 3-up
Wide> 1280Container caps at 1280px centered; generous side margins

Touch Targets: CTA pills render at minimum 56px height on mobile — well above the 44px minimum — and stretch full-width so they’re unmissable. Nav and icon targets are at least 44 × 44px.

Collapsing Strategy: Top nav collapses to a hamburger sheet; the dual pink/orange CTA row stacks vertically (pink first) on mobile. Feature cards reflow 3→2→1. The full-bleed rainbow gradient band stays full-width at every size — it’s the one element that never shrinks its color.

Image Behavior: Spot illustrations and app screenshots use loading="lazy" and scale proportionally; the rainbow gradient is CSS, so it stays crisp at any resolution. Hero device mockups crop to centre on mobile.

11. Content & Voice

  • Tone — friendly, plain-spoken, confidently fun. The brand promise is literally “Fun, powerful, and secure crypto wallets” — fun comes first. Copy avoids both crypto-bro hype and corporate-finance distance; it sounds like a consumer app talking to a friend.
  • Microcopy — warm and direct: “Download”, “Get Rainbow”, “Connect”, “Explore”. Verbs are plain and inviting, never jargon-heavy.
  • CTA verbs — “Download” (primary acquisition, split across pink mobile / orange extension), “Get started”, “Explore”, “Connect” (wallet action).
  • Empty states — encouraging and actionable: “No tokens yet — buy your first” with a colored pill below, never a dead-end.
  • Error messages — clear and reassuring: “Transaction didn’t go through — your funds are safe. Try again.” Safety reassurance is part of the brand (“secure” is in the tagline).
  • Address formatting — wallet addresses truncate as 0x1234…abcd in mono, with the full value available on tap/hover; ENS names preferred when present.
  • Multi-color framing — the rainbow is also the verbal metaphor: “every color of crypto”, “the wallet for the whole spectrum” — the brand leans into its own name.

12. Dark Mode & Theming

Rainbow’s marketing site is light-only — there is no dark variant, and that is a deliberate brand position. In a category where dark dashboards are the default, Rainbow’s bright white canvas is the differentiator; inverting to dark would erase the single thing that makes it feel like a consumer product rather than a trading terminal. The brightness is the brand.

(The Rainbow mobile/extension app does offer a system-following theme for in-wallet use, but the public web identity stays light. When building Rainbow-flavored web surfaces, stay on white — do not author a dark variant.)

The rainbow spectrum (pink → orange → blue → purple) is the only “theming” axis: featured surfaces get the gradient ring or band, default surfaces stay white. Color intensity, not light/dark, is how Rainbow modulates emphasis.

13. Lineage & Influences

Rainbow’s design language descends from Apple’s friendly-consumer aesthetic more than from crypto. The choice of SF Pro Rounded — Apple’s own rounded system face — and the very-rounded pill geometry place Rainbow squarely in the lineage of iOS app design and Apple’s “approachable software” tradition, deliberately distancing it from the Bloomberg-terminal register of most Ethereum tooling. The literal-rainbow identity also nods to a deeper queer-pride and 1980s-tech optimism lineage (the original rainbow Apple logo, the pride flag) — color as joy, color as inclusion, color as “for everyone.”

What it borrows: the full-pill CTA from consumer mobile design; the bright-gradient-on-white look from a generation of friendly fintech and Stripe-era marketing sites; the blue-link label color from the earliest web, repurposed as a knowing, retro-approachable accent. What it explicitly rejects: the dark canvas default (rejected as too clinical and exclusionary), the single trust-blue brand discipline (rejected in favour of the whole spectrum), and sharp/square corners (rejected as cold — everything is rounded). The result is the friendliest-looking wallet onchain, and the design choices are all in service of “crypto can be fun and for everyone.”

Influences:

14. Do’s and Don’ts

Do

  • Keep the canvas plain white #ffffff with pure-black #000000 ink — the brightness is the brand
  • Treat the rainbow as the brand, not a single color — gradients (pink → orange → blue → purple) before solids
  • When a solid is needed, rotate the spectrum: pink #ff54bb primary, orange #ff8a00 secondary
  • Use SF Pro Rounded Black at 96px for the hero — the rounded Black weight is the loudest brand gesture
  • Make CTAs very rounded pills (40px buttons, 50px on the white variant)
  • Use blue-link #0000ee (or black) as the pill label color — the retro web-blue is intentional
  • Pair pink and orange CTA pills side-by-side in dual-action rows
  • Use black #000000 (not white) for any text on the pink or orange pills — contrast demands it
  • Use the pink brand-glow shadow on the primary CTA hover — the candy-lit lift is signature
  • Keep motion gentle and springy (bounce easing) — friendly, never clinical

Don’t

  • Don’t go dark — Rainbow has no dark mode; a dark canvas erases the whole brand position
  • Don’t pick a single brand color — reducing the spectrum to one voltage breaks the rainbow identity
  • Don’t use white text on the pink or orange pills — it fails contrast (2.90:1 / 2.36:1); use black or blue-link
  • Don’t square the corners — the rounded radius scale (20px cards, 40px+ pills) is the friendliness signal
  • Don’t use a non-rounded display face — SF Pro Rounded’s terminals are the brand; Inter/Helvetica reads cold here
  • Don’t grey-out the headlines — keep pure-black ink; the softness comes from shape and color, not low contrast
  • Don’t replace the blue-link label with a corporate accent — the retro #0000ee is a deliberate, approachable choice
  • Don’t flood every surface with gradient — one full-bleed rainbow band per page; keep the rest white so it sings
  • Don’t introduce off-spectrum colors (teal, mustard) — the palette is pink/orange/blue/purple plus neutrals
  • Don’t make motion sharp or instant — the gentle spring is the brand’s tactile personality

15. Agent Prompt Guide

Quick Color Reference

  • Canvas white: #ffffff
  • Ink black: #000000
  • Rainbow Pink (primary): #ff54bb
  • Rainbow Orange (secondary): #ff8a00
  • Rainbow Blue: #3897ff
  • Rainbow Purple: #9b4dff
  • Blue-link label/text: #0000ee
  • Rainbow gradient: linear-gradient(90deg, #ff54bb, #ff8a00, #3897ff, #9b4dff)
  • Border hairline: #e6e6ea
  • Muted text: #6b6b6f

Example Component Prompts

  • “Create a Rainbow hero: plain white #ffffff background, centered 96px SF Pro Rounded Black headline ‘Fun, powerful, and secure crypto wallets’ weight 900 with -0.03em tracking and 1.0 line-height in #000000, a 18px SF Pro Text sub in #000000, and a dual-CTA pill row — a pink #ff54bb pill ‘Download Rainbow Mobile’ beside an orange #ff8a00 pill ‘Download Rainbow Extension’, both 56px tall, 40px radius, with blue-link #0000ee weight-700 labels in SF Pro Rounded.”
  • “Design a Rainbow CTA pill: Rainbow Pink #ff54bb background, 56px height, 40px radius (nearly full pill), label ‘Get Rainbow’ in SF Pro Rounded weight 700 17px colored blue-link #0000ee. On hover: brighten slightly, spring up 1px with bounce easing, and add a pink brand-glow shadow rgba(255,84,187,0.35) 0 12px 32px -8px. On press: scale to 0.97.”
  • “Build a featured card with a rainbow ring: white #ffffff card, 20px radius, 24px padding, no flat border — instead a 2px gradient border using linear-gradient(90deg, #ff54bb, #ff8a00, #3897ff, #9b4dff). Inside: a rounded h3 24/700 in #000000, body-sm copy in #6b6b6f, and a ‘Most popular’ gradient badge (rainbow-gradient bg, white text, full pill).”
  • “Compose a full-bleed rainbow band: 96px vertical padding, background linear-gradient(90deg, #ff54bb, #ff8a00, #3897ff, #9b4dff), a centered 56px SF Pro Rounded Black headline in #000000 (black for contrast on the bright gradient), and a single white #ffffff pill CTA ‘Download’ with blue-link #0000ee label at 50px radius.”
  • “Render a Rainbow input: white #ffffff field, 1px #e6e6ea border, 14px radius, 52px height, 14 × 16 padding. On focus: 3px pink ring rgba(255,84,187,0.45) and border tightens to #ff54bb. Label in SF Pro Text 13/600 #000000 above.”

Iteration Guide

  1. Start on plain white #ffffff with pure-black #000000 text — never dark, never grey headlines.
  2. SF Pro Rounded Black at 96px for the hero, weight ≥800 on all display; SF Pro Text for body.
  3. Make every CTA a very-rounded pill (40px buttons, 50px white variant) — round is the brand.
  4. Color the pills by rotating the spectrum: pink #ff54bb primary, orange #ff8a00 secondary, side-by-side.
  5. Label pill text in blue-link #0000ee (or black) — never white on the bright pills (fails contrast).
  6. Treat the rainbow gradient as the true brand mark — use it for rings, the one full-bleed band, and icons.
  7. Keep neutral greys perfectly neutral so the spectrum pops; depth comes from hairlines + the pink glow.
  8. Make motion springy and gentle (bounce easing); honour reduced-motion by freezing gradients to static.
Ship with this

Drop rainbow into your project, then ship the actual sections in an afternoon.

1 · install design
npx @webdesignhot/design-md add rainbow
2 · ship landing page
npx agentkit init --design rainbow
How AgentKit reads DESIGN.md