BrandToPrompt

OpenAI Design System: Minimalist Precision UI

Visit Site

Explore OpenAI's design system - minimalist colors, custom typography, precise spacing. Build AI interfaces with OpenAI's refined visual language.

7 min read1,300 words

Brand Identity

Color Palette

Primary
Secondary

Typography

Primary Font
OpenAI Sans

Design Style

Style
neutral, restrained, and interaction-driven with high-contrast minimalist palette
Visual Density
generous whitespace with optical spacing adjustments on an 8px grid
Border Style
mixed: 6.08px default components, 40px pill buttons, full-radius avatars

Full Analysis

OpenAI Brand Design System Deep Dive

1. Brand Overview

OpenAI’s visual language is stripped down, confident, and intentionally restrained. This isn’t a brand screaming for attention with saturated color blasts or ornamental UI — it’s a brand that lets content and interaction carry the weight. The vibe is high‑trust tech, aimed at professionals, researchers, and developers but accessible enough for curious general users.

The most immediate signal: the heavy use of black (#000000) and near‑neutral grays. This anchors the interface in seriousness. White is used sparingly, often as text or icon color against dark contexts, or as a button background in secondary actions. The entire system reads as understated but precise — nothing here is accidental.

Typography is custom (OpenAI Sans), supporting a clean geometric feel without leaning too humanist or too industrial. The type is set with tight letterspacing for large headings (−1.44px at 48px size) and rational line heights that balance density with legibility. You can feel the design team’s control over rhythm — it’s not relying on defaults.

The spacing scale is an 8px base, but it allows for micro‑adjustments (2px, 3px, 6px) where precision matters. This is common in brands that care about optical balance over strict mathematical scaling. Breakpoints are classic Tailwind defaults (640px, 768px, 1024px, 1280px, 1536px), meaning responsive behavior is predictable and developer‑friendly.

What stands out most: components feel “quiet” until interacted with. Buttons often have transparent or low‑opacity backgrounds until hover, when they invert color schemes or increase contrast. This is a deliberate choice — the interface doesn’t draw your eye with visual noise, it rewards interaction.

From a design philosophy perspective, OpenAI’s brand says: “We are serious about AI, we trust you to explore, and we won’t overwhelm you with decoration.” If you’re building in this system, you need to respect that restraint.


2. Color System

2.1 Primary Colors

Primary in this system isn’t a bright hue — it’s a semi‑transparent black (rgba(0, 0, 0, 0.6)) used as the semantic “primary” color. That’s unusual. Most brands use a vivid color for primary to signal action. Here, primary is about text and icon color in key interactions. Secondary is even lighter (rgba(0, 0, 0, 0.44)), often used for less important text or icon states.

Psychologically, this makes the brand feel calm, authoritative, and non‑intrusive. No high‑energy blues or reds here — just neutrals. Compared to competitors in the AI space (Anthropic, DeepMind), which lean on blues and gradients, OpenAI’s palette says “we’re the minimalists in the room.”

2.2 Complete Palette

Color NameHexRoleUsage
Primaryrgba(0, 0, 0, 0.6)Semantic primaryMain interactive text/icons
Secondaryrgba(0, 0, 0, 0.44)Semantic secondaryLess prominent text/icons
Gray-100#e5e7ebNeutral lightDividers, subtle backgrounds
Black#000000Core textHeadings, body text, icons
White#ffffffBackground/textButton backgrounds, text on dark
Black-72rgba(0, 0, 0, 0.72)Interaction stateFocus rings, hover states
Black-8rgba(0, 0, 0, 0.086)Hover/focusVery light overlay
Black-71.8rgba(0, 0, 0, 0.718)Hover/focusHigh-contrast overlay
Accent1#0066dcCSS variableAccent actions
Accent2#007bffCSS variableAccent actions
Accent3#3c93ffCSS variableAccent actions
Vivid1#ffcc00CSS variableHighlights
Elevation1#292d39CSS variableDark surfaces
Elevation2#181c20CSS variableDarker surfaces
Elevation3#373c4bCSS variableDarkest surfaces
Highlight1#535760CSS variableEmphasis text/icons
FolderWidgetColor#8c92a4CSS variableUI widget accents
RingColorrgba(59,130,246,.5)Ring/focusFocus outlines
RingOffsetColor#ffffffRing offsetInverted focus rings

2.3 Color Relationships

Contrast is high between black text (#000000) and white backgrounds — WCAG AAA compliance for body text sizes. The semi‑transparent blacks are trickier; rgba(0, 0, 0, 0.44) over white gives ~4.5:1 ratio — borderline AAA for large text, but safe for UI labels.

Dark mode is implicit in the CSS variables (--leva-colors-elevation1/2/3), suggesting surfaces shift from light gray to layered darks. Accent blues (#0066dc, #007bff, #3c93ff) are reserved for interactive states — they’re not part of the neutral UI.

2.4 Usage Guide

  • Keep primary (rgba(0, 0, 0, 0.6)) for interactive text/icons. Don’t use it for body copy.
  • Secondary (rgba(0, 0, 0, 0.44)) is for placeholders, disabled states, or secondary actions.
  • White backgrounds with black text are the default “light mode” surface.
  • Accent blues are for CTAs and focus rings — avoid using them for decorative color blocking.
  • The vivid yellow (#ffcc00) is rare — use only for highlight or warning contexts.
  • Avoid mixing elevation grays with pure white — pick one surface mode per context.

3. Typography

3.1 Font Families

All typography uses OpenAI Sans. No fallbacks are explicitly listed in the data — meaning it’s likely a custom hosted font. No Google Fonts, no Adobe Fonts. It’s probably variable internally, but variableFonts flag is false, so static weights are used.

3.2 Type Scale

ElementFontSizeWeightLine Height
Heading-1OpenAI Sans48px (3.00rem)5001.16
Heading-1OpenAI Sans22px (1.38rem)5001.26
Heading-1OpenAI Sans18px (1.13rem)5001.32
Heading-1OpenAI Sans17px (1.06rem)4001.65
ButtonOpenAI Sans17px (1.06rem)4001.65
LinkOpenAI Sans17px (1.06rem)4001.65
LinkOpenAI Sans14px (0.88rem)5001.00
ButtonOpenAI Sans14px (0.88rem)5001.00
CaptionOpenAI Sans14px (0.88rem)5001.64
CaptionOpenAI Sans14px (0.88rem)4001.64

3.3 Hierarchy

The heading sizes are unusual — multiple “heading-1” contexts with different sizes. This implies a modular heading system where H1 style is reused across different breakpoints or modules. The tight letterspacing on large headings (−1.44px) adds weight and presence.

Body text is often the 17px/400 weight style — comfortable for reading, not too dense. Captions drop to 14px but keep generous line height (1.64), improving legibility in small type. This hierarchy is subtle — there’s no massive jumps like 48px to 16px; instead, it’s a smooth scale, keeping the brand feeling consistent across contexts.


4. Spacing & Layout

4.1 Spacing Scale

Base: 8px grid, but with optical tweaks.

Value (px)RemCountNotes
20.13rem50Micro gaps
30.19rem1Rare
60.38rem6Small gaps
80.50rem48Base unit
8.156250.51rem1Precision tweak
120.75rem102Common padding
161.00rem38Base step up
201.25rem6Medium gaps
241.50rem3Component padding
322.00rem13Section gaps
462.88rem1Specific layout
483.00rem1Large heading gap
644.00rem1Hero spacing
805.00rem1Large section padding
1207.50rem3Strategic whitespace
18711.69rem2Hero layouts
26416.50rem7Massive spacing, likely modals/marketing

4.2 Layout

Breakpoints: 640px, 768px, 1024px, 1280px, 1536px. Classic Tailwind. Responsive layout is predictable: mobile-first, scale up. The large spacing tokens (120px, 187px, 264px) suggest generous hero/landing page layouts.


5. Visual Elements

Border Radius

ValueCountElementsNotes
4px4aSmall buttons/links
6.08px64div, a, li, menu itemsDefault component radius
24px1labelCustom form
40px6a, div, buttonLarge pill buttons
9999px11variousFull pill avatars/buttons

Shadows

Only one subtle shadow: rgba(0, 0, 0, 0.04) 0px 1px 2px 0px. Flat design dominates — shadows aren’t part of the depth system. Borders (1px solid rgba(0, 0, 0, 0.12)) are rare, used for light separation.


6. Components

6.1 Buttons

Variant 1 (transition pill)

  • Default: background: rgba(0, 0, 0, 0.04), color: #000000, padding 0px 20px, border-radius: 40px, no border, opacity 0.
  • Hover: background: rgba(0, 0, 0, 0.25), color: #ffffff, transform applied (translate/rotate/skew/scale).
  • Active: background: transparent, box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow).
  • Focus: color: hsl(var(--twc-primary-60)), background: var(--tweet-color-blue-primary-hover).

Font: 14px, weight 500.

Variant 2 (icon button)

  • Default: background: #ffffff, color: rgba(0, 0, 0, 0.44), padding 8px, border-radius: 9999px, opacity 1.
  • Hover/active/focus not defined in extracted data.

Font: 17px, weight 400.

Variant 3 (dark pill)

  • Default: background: rgba(0, 0, 0, 0.44), color: rgba(255, 255, 255, 0.6), padding 0px, border-radius: 9999px.
  • Hover/active/focus not defined.

Font: 17px, weight 400.

Default: black text, no underline, weight 500. Hover states not detailed — likely color change.

6.3 Forms

No extracted inputs — likely minimalist with borderless or subtle styling.

6.4 Cards

No explicit card data — spacing tokens (24px, 32px) point to clean, flat surfaces with 6.08px radius.


7. Design Tokens

:root {
  /* Colors */
  --color-primary: rgba(0, 0, 0, 0.6);
  --color-secondary: rgba(0, 0, 0, 0.44);
  --color-gray-100: #e5e7eb;
  --color-black: #000000;
  --color-white: #ffffff;
  --color-black-72: rgba(0, 0, 0, 0.72);
  --color-black-8: rgba(0, 0, 0, 0.086);
  --color-black-71_8: rgba(0, 0, 0, 0.718);
  --color-accent1: #0066dc;
  --color-accent2: #007bff;
  --color-accent3: #3c93ff;
  --color-vivid1: #ffcc00;
  --color-elevation1: #292d39;
  --color-elevation2: #181c20;
  --color-elevation3: #373c4b;
  --color-highlight1: #535760;
  --color-folderWidget: #8c92a4;
  --color-ring: rgba(59,130,246,.5);
  --color-ring-offset: #ffffff;

  /* Typography */
  --font-family-primary: 'OpenAI Sans';
  --font-size-h1-lg: 48px;
  --font-size-h1-md: 22px;
  --font-size-h1-sm: 18px;
  --font-size-body: 17px;
  --font-size-caption: 14px;
  --line-height-h1-lg: 1.16;
  --line-height-h1-md: 1.26;
  --line-height-h1-sm: 1.32;
  --line-height-body: 1.65;
  --line-height-caption: 1.64;
  --font-weight-regular: 400;
  --font-weight-medium: 500;

  /* Spacing */
  --space-2: 2px;
  --space-3: 3px;
  --space-6: 6px;
  --space-8: 8px;
  --space-8_15625: 8.15625px;
  --space-12: 12px;
  --space-16: 16px;
  --space-20: 20px;
  --space-24: 24px;
  --space-32: 32px;
  --space-46: 46px;
  --space-48: 48px;
  --space-64: 64px;
  --space-80: 80px;
  --space-120: 120px;
  --space-187: 187px;
  --space-264: 264px;

  /* Radius */
  --radius-sm: 4px;
  --radius-md: 6.08px;
  --radius-lg: 24px;
  --radius-xl: 40px;
  --radius-full: 9999px;

  /* Shadows */
  --shadow-subtle: rgba(0, 0, 0, 0.04) 0px 1px 2px 0px;
}

8. AI Coding Assistant Prompt

# OpenAI Design System Specification

You are an OpenAI design expert. Build UIs matching their visual language exactly.

## Brand Context
OpenAI’s design language is neutral, restrained, and precision-driven. It uses a minimal color palette dominated by black, white, and subtle grays. Interactions are understated until hover/focus. Typography is custom and tight, spacing follows an 8px grid with micro adjustments.

## Color Palette
- Primary: rgba(0, 0, 0, 0.6) — Interactive text/icons
- Secondary: rgba(0, 0, 0, 0.44) — Secondary text/icons
- Gray-100: #e5e7eb — Dividers, backgrounds
- Black: #000000 — Core text
- White: #ffffff — Backgrounds, text on dark
- Black-72: rgba(0, 0, 0, 0.72) — Hover/focus
- Black-8: rgba(0, 0, 0, 0.086) — Light overlay
- Black-71.8: rgba(0, 0, 0, 0.718) — Dark overlay
- Accent1: #0066dc — Accent actions
- Accent2: #007bff — Accent actions
- Accent3: #3c93ff — Accent actions
- Vivid1: #ffcc00 — Highlights
- Elevation1: #292d39 — Dark surfaces
- Elevation2: #181c20 — Darker surfaces
- Elevation3: #373c4b — Darkest surfaces
- Highlight1: #535760 — Emphasis
- FolderWidget: #8c92a4 — Widget UI
- RingColor: rgba(59,130,246,.5) — Focus outlines
- RingOffsetColor: #ffffff — Ring offsets

## Typography
Font family: "OpenAI Sans"
Levels:
| Level | Size | Weight | Line Height | Use |
| H1 Large | 48px | 500 | 1.16 | Page titles |
| H1 Medium | 22px | 500 | 1.26 | Section headings |
| H1 Small | 18px | 500 | 1.32 | Subheadings |
| Body | 17px | 400 | 1.65 | Paragraph text |
| Link/Button | 14px | 500 | 1.00 | UI labels |
| Caption Medium | 14px | 500 | 1.64 | Small labels |
| Caption Regular | 14px | 400 | 1.64 | Secondary captions |

## Spacing & Grid
Base: 8px grid with micro units.
Values: 2px, 3px, 6px, 8px, 8.15625px, 12px, 16px, 20px, 24px, 32px, 46px, 48px, 64px, 80px, 120px, 187px, 264px.

## Border Radius
- sm: 4px — Small buttons/links
- md: 6.08px — Default components
- lg: 24px — Labels/forms
- xl: 40px — Large pill buttons
- full: 9999px — Avatars, full pills

## Shadows & Depth
Flat design. Minimal shadow: rgba(0, 0, 0, 0.04) 0px 1px 2px 0px.

## Component Specifications

### Primary Button
Default:
```css
background: rgba(0,0,0,0.04);
color: #000000;
padding: 0 20px;
border-radius: 40px;
font-weight: 500;
font-size: 14px;
border: none;
opacity: 0;
```
Hover:
```css
background: rgba(0,0,0,0.25);
color: #ffffff;
transform: translate(var(--tw-translate-x),var(--tw-translate-y));
```
Active:
```css
background: transparent;
box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow);
```
Focus:
```css
color: hsl(var(--twc-primary-60));
background: var(--tweet-color-blue-primary-hover);
```

### Secondary Icon Button
```css
background: #ffffff;
color: rgba(0,0,0,0.44);
padding: 8px;
border-radius: 9999px;
font-size: 17px;
font-weight: 400;
```

### Dark Pill Button
```css
background: rgba(0,0,0,0.44);
color: rgba(255,255,255,0.6);
border-radius: 9999px;
font-size: 17px;
```

### Navigation Link
```css
color: #000000;
text-decoration: none;
font-weight: 500;
```

## Layout & Responsive Rules
Breakpoints: 640px, 768px, 1024px, 1280px, 1536px.
Page padding: multiples of 8px scale.

## Interaction Rules
- Transition timing: use Tailwind `duration-short` (~150ms) ease curves.
- Focus indicators: ring color rgba(59,130,246,.5) with offset #ffffff.
- Hover states: increase contrast, invert text color on dark backgrounds.

## DO
- Use only palette colors.
- Maintain 8px grid.
- Keep typography weights as specified.
- Use full-radius only for pills/avatars.
- Apply hover states only on interactive elements.
- Respect opacity levels for disabled states.

## DON'T
- Introduce new colors.
- Apply shadows beyond subtle default.
- Mix sharp and rounded corners in same context.
- Change font family.
- Overuse accent colors — reserve for actions.

## Code Examples

Primary Button (Tailwind):
```html
<button class="bg-black/4 text-black px-5 rounded-[40px] font-medium text-sm hover:bg-black/25 hover:text-white transition ease-in-out duration-150">
  Click Me
</button>
```

Secondary Icon Button:
```html
<button class="bg-white text-black/44 p-2 rounded-full text-base">
  <svg>...</svg>
</button>
```

Card:
```html
<div class="bg-white rounded-[6.08px] p-6 shadow-[rgba(0,0,0,0.04)_0px_1px_2px_0px]">
  Card content
</div>
```

9. Summary

TL;DR — OpenAI’s system is neutral, precise, and interaction‑driven. Everything is built on black, white, and subtle grays, with rare accent blues/yellows for action. Typography is tight and custom, spacing follows an 8px grid but flexes for optical balance. Buttons are understated until hover, shadows are nearly absent.

Brand Keywords:

  • neutral-authoritative
  • restrained-interactive
  • tech-minimalist
  • precision-driven
  • content-first