Unsplash Brand Design System Deep Dive
1. Brand Overview
Unsplash’s design language is exactly what you’d expect from a platform that’s all about showcasing photography — minimal, restrained, letting the content speak. The vibe is stripped down, almost editorial. No gradients, no visual noise, no ornamental UI elements. If an element is on screen, it’s there to serve the photo.
The philosophy here is content-first minimalism. They’ve stripped away any branding theatrics — no flashy brand colors splashed across the interface, no ornamental typography. The site’s primary “color” is white (#ffffff), and the secondary is transparent (rgba(0, 0, 0, 0)). This is not an accident. On Unsplash, the photography is the brand. The UI is just scaffolding.
This works because their audience — designers, marketers, creatives — come here to find clean, high-quality images. The UI avoids competing with the imagery. Even primary buttons are either black (#111111) or white, and shadows are subtle (rgba(0, 0, 0, 0.1) at most). This is a deliberate choice to keep everything feeling airy and distraction-free.
Typography is system UI sans-serif, which means it inherits the OS-native look. This keeps things feeling familiar and fast. No custom fonts to load. No “brand typeface” to enforce. Again, the photos are the star.
If you’re designing within this system, you’re accepting the constraints: no loud colors, no heavy borders, no ornamental flourishes. The design is almost invisible — exactly the point.
2. Color System
2.1 Primary Colors
Primary is pure white (#ffffff). This is the canvas color. Backgrounds, cards, button fills — they all start here. Secondary is transparent (rgba(0, 0, 0, 0)), used heavily for overlays and backgrounds that need to let content through.
The “brand black” is #111111 — used for primary text, high-contrast buttons, and key actions. This is the closest thing to an accent in the Unsplash UI. Competitors like Pexels use teal or green as their accent. Unsplash refuses to have an accent color — the black/white contrast is their identity.
Functional colors exist — blues for links/buttons (#007fff, #006aff, #005fcc), greens for success (#3cb46e, #37a866), reds for errors (#e25c3d, #df4927), and a pink pair for some playful moments (#f15151, #e04c4c). But these are used sparingly.
2.2 Complete Palette
| Color Name | Hex | Role | Usage |
|---|---|---|---|
| Primary White | #ffffff | Base background | Page backgrounds, card surfaces |
| Transparent Secondary | rgba(0,0,0,0) | Overlay, backgrounds | Image overlays, modals |
| Mid Gray | #767676 | Secondary text | Captions, muted labels |
| Light Gray | #d1d1d1 | Borders | Divider lines, input borders |
| Dark Gray | #555555 | Text on light surfaces | Secondary buttons, muted UI elements |
| Brand Black | #111111 | Primary text/actions | Titles, primary buttons |
| Very Light Gray | #eeeeee | Hover background | Input hovers, card hovers |
| Blue CTA | #005fcc | Hover/focus accents | Link hover states, focus outlines |
| Blue CTA Slight | #005ec9 | Hover/focus accents | Alternate hover/focus |
| Dark Red | #df4927 | Error state | Critical alerts |
| Green Dark | #37a866 | Success state | Confirmation banners |
| Gray 800 | #555 | Secondary text | Buttons, muted labels |
| Gray 600 | #aaa | Placeholder | Input placeholders |
| Border Opacity | rgba(0,0,0,.12) | Border color | Dividers, card outlines |
| Pinterest Red | #e60023 | Social icon | Pinterest share button |
| Blue Dark | #006aff | Links/buttons | Primary links, CTAs |
| Gray 100 | #f5f5f5 | Background surface | Cards, modals |
| Placeholder BG | #f4f4f4 | Input background | Form fields |
| Gray 200 | #eee | Borders | Input borders, dividers |
| Red | #e25c3d | Error state | Alerts, validation |
| Green | #3cb46e | Success state | Messages, highlights |
| Blue | #007fff | Primary link | CTAs, inline links |
| Pink Dark | #e04c4c | Accent | Occasional highlight |
| Pink | #f15151 | Accent | Occasional highlight |
| Facebook Blue | #1877f2 | Social icon | Facebook share button |
2.3 Color Relationships
The palette is almost monochrome for core UI: white backgrounds, black text, gray borders. Accent colors (blue, green, red, pink) are functional — they signal actions, states, or social integrations.
Contrast ratios are solid for accessibility. Black (#111) on white is ~21:1 contrast — AAA compliant. Gray (#767676) is borderline for small text; needs careful usage (fine for captions, not for body text). Blues are strong enough against white for link visibility.
Dark mode? Not evident in extracted data — the palette is optimized for light backgrounds.
2.4 Usage Guide
- Use white for all major surfaces.
- Use black for primary text and buttons.
- Use mid gray for secondary text — but avoid for small text if accessibility is a concern.
- Blues are for interactive states — don’t use them as decorative colors.
- Reds and greens signal status — don’t repurpose them for decoration.
- Avoid mixing multiple accent colors in the same component — keeps the UI clean.
3. Typography
3.1 Font Families
Unsplash uses ui-sans-serif — which resolves to system fonts:
system-ui, -apple-system, Segoe UI, Roboto, Noto Sans, Ubuntu, Cantarell, Helvetica Neue.
No Google Fonts. No Adobe Fonts. No variable fonts. This means instant load, native feel.
3.2 Type Scale
| Element | Font Family | Size (px/rem) | Weight | Line Height | Transform |
|---|---|---|---|---|---|
| Heading-1 | ui-sans-serif | 40px / 2.50rem | 700 | 1.20 | none |
| Heading-1 | ui-sans-serif | 18px / 1.13rem | 400 | 1.60 | none |
| Heading-1 | ui-sans-serif | 18px / 1.13rem | 600 | 1.33 | none |
| Link | ui-sans-serif | 15px / 0.94rem | 400 | 1.60 | none |
| Button | ui-sans-serif | 15px / 0.94rem | 400 | 1.60 | none |
| Heading-1 | ui-sans-serif | 15px / 0.94rem | 600 | 1.60 | none |
| Link | ui-sans-serif | 15px / 0.94rem | 600 | 1.60 | none |
| Heading-1 | ui-sans-serif | 15px / 0.94rem | 400 | 1.60 | none |
| Heading-1 | ui-sans-serif | 15px / 0.94rem | 500 | 1.60 | capitalize |
| Link | ui-sans-serif | 15px / 0.94rem | 500 | 1.60 | capitalize |
| Link | ui-sans-serif | 15px / 0.94rem | 500 | 1.33 | none |
| Caption | ui-sans-serif | 14px / 0.88rem | 400 | 1.43 | none |
| Button | ui-sans-serif | 14px / 0.88rem | 400 | 1.43 | none |
| Link | ui-sans-serif | 14px / 0.88rem | 500 | 2.14 | none |
| Button | ui-sans-serif | 14px / 0.88rem | 500 | 2.14 | none |
| Link | ui-sans-serif | 14px / 0.88rem | 400 | 1.43 | none |
| Caption | ui-sans-serif | 12px / 0.75rem | 400 | 1.33 | none |
| Caption | ui-sans-serif | 12px / 0.75rem | 400 | 1.33 | 0.12px |
| Link | ui-sans-serif | 12px / 0.75rem | 400 | 1.33 | 0.12px |
| Caption | ui-sans-serif | 10px / 0.63rem | 500 | 1.60 | none |
3.3 Hierarchy
The 40px H1 is the only “large” type — everything else lives between 10px and 18px. This keeps the UI compact. The hierarchy relies more on weight (400–700) than on size jumps. This works in a photo-first UI — text is supporting metadata, not the primary content.
4. Spacing & Layout
4.1 Spacing Scale
Base scale is 8px. Most common values: 8px, 20px. Larger values (171px+) are probably for hero sections.
| Value (px) | Rem | Count | Usage |
|---|---|---|---|
| 1px | 0.06rem | 3 | Hairline borders |
| 2px | 0.13rem | 1 | Fine dividers |
| 3px | 0.19rem | 12 | Icon gaps |
| 4px | 0.25rem | 5 | Tight padding |
| 8px | 0.50rem | 30 | Component gaps |
| 12px | 0.75rem | 6 | Button padding |
| 20px | 1.25rem | 58 | Card padding |
| 56px | 3.50rem | 2 | Large section gaps |
| 98.0469px | 6.13rem | 1 | Hero spacing |
| 127.781px | 7.99rem | 1 | Hero spacing |
| 171.047px | 10.69rem | 6 | Hero vertical spacing |
| 171.875px | 10.74rem | 2 | Hero spacing |
| 173.547px | 10.85rem | 1 | Hero spacing |
| 181.859px | 11.37rem | 1 | Hero spacing |
| 191.016px | 11.94rem | 1 | Hero spacing |
| 414px | 25.88rem | 1 | Full-width hero |
| 449.766px | 28.11rem | 1 | Full-height hero |
| 513.828px | 32.11rem | 1 | Full-height hero |
| 518px | 32.38rem | 9 | Full-height hero |
4.2 Layout
Breakpoints are dense: from 479px up to 1414px, with increments around common device widths. This suggests fine-tuned responsive adjustments per device class — not just “mobile/tablet/desktop” buckets.
5. Visual Elements
Border Radius:
- 4px: Images
- 6px: Links
- 8px: Buttons, cards, collections
- 24px / 56px: Search field (pill-like)
- 50%: Avatars, circular presentations
Shadows:
Subtle — main shadow: rgba(0, 0, 0, 0.1) 0px 1px 2px 0px. This keeps depth minimal. No heavy drop shadows.
Borders:
Mostly 1px solid light gray (#d1d1d1). Occasional #eeeeee for search inputs.
6. Components
6.1 Buttons
Variant 1 — Secondary (Gray border)
Default:
- BG:
#ffffff - Text:
#767676 - Padding: 0px 11px
- Radius: 8px
- Border: 1px solid
#d1d1d1 - Shadow:
rgba(0,0,0,0.08) 0px 1px 1px
Hover:
- Color:
var(--link-text-color-hover) - Shadow: softer, slightly deeper
Variant 2 — Primary (Black)
Default:
- BG:
#111111 - Text:
#ffffff - Padding: 0px 11px
- Radius: 8px
- Border: none (
rgba(0,0,0,0)) - Shadow: subtle
Variant 3 — Tertiary (Light)
Default:
- BG:
rgba(254, 254, 254, 0.96) - Text:
#555555 - Padding: 0px 11px
- Radius: 8px
- Border: none
- Shadow:
rgba(0,0,0,0.1) 0px 1px 2px
6.2 Links
Variety of colors: black, gray, light gray, white, dark gray. Underlines vary — some default underline, some none.
6.3 Forms
Inputs are minimal — no border radius, transparent BG, no box shadow. Borders are either none or very light.
7. Design Tokens (CSS Custom Properties)
:root {
/* Colors */
--color-primary-white: #ffffff;
--color-secondary-transparent: rgba(0,0,0,0);
--color-gray-mid: #767676;
--color-gray-light: #d1d1d1;
--color-gray-dark: #555555;
--color-black: #111111;
--color-gray-very-light: #eeeeee;
--color-blue-cta: #005fcc;
--color-blue-cta-alt: #005ec9;
--color-red-dark: #df4927;
--color-green-dark: #37a866;
--color-gray-800: #555;
--color-gray-600: #aaa;
--color-border-opacity: rgba(0,0,0,.12);
--color-pinterest: #e60023;
--color-blue-dark: #006aff;
--color-gray-100: #f5f5f5;
--color-placeholder-bg: #f4f4f4;
--color-gray-200: #eee;
--color-red: #e25c3d;
--color-green: #3cb46e;
--color-blue: #007fff;
--color-pink-dark: #e04c4c;
--color-pink: #f15151;
--color-facebook: #1877f2;
/* Typography */
--font-ui-sans: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Noto Sans, Ubuntu, Cantarell, Helvetica Neue;
/* Spacing */
--space-1: 1px;
--space-2: 2px;
--space-3: 3px;
--space-4: 4px;
--space-8: 8px;
--space-12: 12px;
--space-20: 20px;
--space-56: 56px;
/* Border Radius */
--radius-sm: 4px;
--radius-md: 6px;
--radius-lg: 8px;
--radius-xl: 24px;
--radius-xxl: 56px;
--radius-full: 50%;
/* Shadows */
--shadow-sm: rgba(0, 0, 0, 0.1) 0px 1px 2px 0px;
}8. AI Coding Assistant Prompt
# Unsplash Design System Specification
You are an Unsplash design expert. Build UIs matching their visual language exactly.
## Brand Context
Unsplash values minimalism, content-first design, and unobtrusive UI. The photography is the hero — the UI is scaffolding. Colors are neutral, typography is system-native, and spacing follows an 8px grid.
## Color Palette
- Primary White: #ffffff — page backgrounds, card surfaces
- Transparent: rgba(0,0,0,0) — overlays, modal backgrounds
- Gray Mid: #767676 — secondary text
- Gray Light: #d1d1d1 — borders
- Gray Dark: #555555 — muted UI text
- Black: #111111 — primary text, buttons
- Gray Very Light: #eeeeee — hover backgrounds
- Blue CTA: #005fcc — hover/focus highlights
- Blue CTA Alt: #005ec9 — alternate hover/focus
- Red Dark: #df4927 — critical alerts
- Green Dark: #37a866 — success banners
- Gray 800: #555 — muted text
- Gray 600: #aaa — placeholders
- Border Opacity: rgba(0,0,0,.12) — subtle dividers
- Pinterest Red: #e60023 — Pinterest icon
- Blue Dark: #006aff — links/CTAs
- Gray 100: #f5f5f5 — card backgrounds
- Placeholder BG: #f4f4f4 — form fields
- Gray 200: #eee — borders
- Red: #e25c3d — error states
- Green: #3cb46e — success states
- Blue: #007fff — primary links
- Pink Dark: #e04c4c — accent
- Pink: #f15151 — accent
- Facebook Blue: #1877f2 — Facebook icon
## Typography
Font: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Noto Sans, Ubuntu, Cantarell, Helvetica Neue
| Level | Size | Weight | Line Height | Use For |
|------------|-------|--------|-------------|---------|
| H1 | 40px | 700 | 1.20 | Page titles |
| Body-lg | 18px | 400 | 1.60 | Paragraphs |
| Body-lg-bold | 18px| 600 | 1.33 | Emphasis |
| Link | 15px | 400 | 1.60 | Default link |
| Link-bold | 15px | 600 | 1.60 | Important link |
| Caption | 14px | 400 | 1.43 | Metadata |
| Caption-bold | 14px| 500 | 2.14 | Emphasized metadata |
| Small | 12px | 400 | 1.33 | Fine print |
| Small-bold | 10px | 500 | 1.60 | Labels |
## Spacing & Grid
Base: 8px grid. Tokens: 4px, 8px, 12px, 20px, 56px
Use multiples for padding/margins. Buttons: 0px vertical, 11px horizontal padding.
## Border Radius
- 4px — images
- 6px — links
- 8px — buttons, cards
- 24px — search input
- 56px — search input pill
- 50% — avatars
## Shadows & Depth
- `rgba(0,0,0,0.1) 0px 1px 2px` — main shadow
- Keep shadows subtle; avoid heavy drop shadows.
## Component Specifications
### Primary Button
Default:
```css
background: #111111;
color: #ffffff;
padding: 0px 11px;
border-radius: 8px;
border: 1px solid rgba(0,0,0,0);
box-shadow: rgba(0,0,0,0.08) 0px 1px 1px;
font-weight: 500;
font-size: 14px;
```
### Secondary Button
Default:
```css
background: #ffffff;
color: #767676;
padding: 0px 11px;
border-radius: 8px;
border: 1px solid #d1d1d1;
box-shadow: rgba(0,0,0,0.08) 0px 1px 1px;
```
Hover:
```css
box-shadow: rgba(0,0,0,0.05) 0px 1px 1px, rgba(0,0,0,0.15) 0px 1px 3px;
```
### Input Fields
Default:
```css
background: transparent;
color: #111111;
border: none;
border-radius: 0;
padding: 0;
```
## Layout & Responsive Rules
Max width: fluid; breakpoints at 479px, 768px, 992px, 1200px, 1400px. Adjust spacing per breakpoint.
## Interaction Rules
- Transition: 150ms ease for hover/focus
- Focus: Maintain visible outline; use blue CTA for focus rings
- Disabled: opacity 0.5, remove hover styles
## DO List
- Use only defined palette colors
- Stick to 8px spacing multiples
- Keep border radius consistent per component type
- Use subtle shadows only where defined
- Maintain high contrast for text
## DON'T List
- Add new brand colors
- Use heavy shadows
- Mix sharp and rounded corners
- Overuse accent colors
- Reduce text contrast below WCAG AA levels
## Code Examples
Primary Button:
```css
.btn-primary {
background: #111;
color: #fff;
padding: 0px 11px;
border-radius: 8px;
border: 1px solid transparent;
box-shadow: rgba(0,0,0,0.08) 0px 1px 1px;
}
.btn-primary:hover {
background: #111;
}
```
Card:
```css
.card {
background: #fff;
border-radius: 8px;
padding: 20px;
box-shadow: rgba(0,0,0,0.1) 0px 1px 2px;
}
```9. Summary
TL;DR — Unsplash’s design system is minimal, neutral, and content-first. White backgrounds, black text, subtle shadows, and system-native type keep the UI invisible so photography shines.
Brand Keywords: photo-first-minimalism, neutral-clarity, content-scaffolding, editorial-clean