ChatGPT Brand Design System Deep Dive
1. Brand Overview
ChatGPT’s public-facing design language is deliberately restrained. This isn’t a brand screaming for attention through loud gradients or quirky typography — it’s a system built for trust, clarity, and functional efficiency. You can feel it the second you land on chatgpt.com: the primary color is an uncompromising near-black (#0d0d0d), paired with pure white (#ffffff). It’s the kind of minimalism that says, “We’re here to help you think, not distract you.”
There’s a strong focus on usability. Buttons are big pill shapes with absurdly high border-radius values (3.35544e+07px), making them unmistakably tappable. Typography sticks to a safe, system-based sans-serif stack — no boutique fonts here, just dependable rendering across devices. This choice reinforces the product’s ubiquity: ChatGPT isn’t “your quirky AI friend,” it’s “your everywhere assistant.”
The design philosophy here reads as:
- Neutral foundation — Monochrome base for maximum compatibility with content.
- Functional accents — Blues, greens, purples, oranges, yellows, and pinks show up in theme contexts, user interactions, and status states — but never dominate the layout.
- Accessible contrast — The black/white core ensures text meets WCAG AA standards without fuss.
- Consistent shapes — Rounded pills, consistent 8px corners, and no unexpected sharp edges.
Audience-wise, this is for a broad demographic: from casual mobile users to enterprise clients. It avoids tech-startup flamboyance, leaning instead on a sober, utilitarian tone. That’s smart — it keeps the interface future-proof and easy to brand-adapt for different contexts (consumer, business, developer portals).
I like the confidence here. No logo overload, no ornamental fluff. Just a toolkit for interaction. And because the palette is so disciplined, it’s easy to imagine layering brand-specific skins on top without breaking the underlying UX.
2. Color System
2.1 Primary Colors
The semantic primary is rgb(13,13,13) (#0d0d0d). This is a deep neutral — almost pure black, but softened just enough to avoid harsh pixel contrast on modern displays. It communicates seriousness and authority. Paired with the semantic secondary rgb(255,255,255) (#ffffff), you get the highest possible contrast.
Psychology: Black here is about stability and focus. It’s a “content-first” color — it doesn’t impose emotion like a blue or red would. The white balances it with openness.
Compared to other tech brands:
- Apple uses a similar black/white base but leans into greys for subtlety.
- Google’s Material Design defaults to white backgrounds and blue accents — far more colorful.
- ChatGPT’s approach feels closer to Stripe’s — understated, letting typography and spacing do the heavy lifting.
2.2 Complete Palette
| Color Name | Hex | Role | Usage |
|---|---|---|---|
| Primary Surface | #0d0d0d | Semantic primary | Backgrounds, text on white, primary button fill |
| Neutral Dark Gray | #5d5d5d | Neutral | Secondary text, icon strokes, low-emphasis UI labels |
| Secondary Surface | #ffffff | Semantic secondary | Backgrounds, text on black, secondary button fill |
| Neutral Mid Gray | #8f8f8f | Neutral | Hover backgrounds, subtle dividers |
| Semi-transparent White | oklab(0.930993 0... / 0.5) | Overlay | Hover/focus overlays |
| Accent Blue | #005fcc | Accent | Hover/focus outlines, link highlights |
| Semi-transparent Black | oklab(0.159065 0... / 0.08) | Overlay | Hover/focus states |
| --bg-primary | #ffffff | Token | Page background |
| --text-placeholder | #000000b3 | Token | Placeholder text |
| --text-accent | #66b5ff | Token | Links, highlights |
| --interactive-bg-accent-muted-press | #e0efff | Token | Button pressed state |
| --blue-theme-secondary-btn-bg | #e5f3ff | Token | Secondary button background in blue theme |
| --orange-theme-secondary-btn-bg | #ffe7d9 | Token | Secondary button background in orange theme |
| --interactive-bg-primary-hover | #0d0d0dcc | Token | Hover state on primary background |
| --black-theme-submit-btn-bg | #000000 | Token | Black theme submit button |
| --composer-blue-bg | #daeeff | Token | Composer input background |
| --text-danger | #e02e2a | Token | Error messages |
| --interactive-bg-secondary-default | #0d0d0d00 | Token | Transparent secondary background |
| --bg-tertiary | #f3f3f3 | Token | Tertiary background |
| --bg-status-warning | #fff5f0 | Token | Warning background |
| --yellow-theme-submit-btn-bg | #ffc300 | Token | Yellow theme submit button |
| --blue-theme-submit-btn-bg | #0285ff | Token | Blue theme submit button |
| --orange-theme-secondary-btn-text | #4a2206 | Token | Orange theme secondary button text |
| --interactive-bg-accent-press | #99ceff | Token | Accent press background |
| --green-theme-user-msg-bg | #d9f4e4 | Token | Green theme user message background |
| --purple-theme-user-selection-bg | lab(60.99% 39.17 -56.72/.35) | Token | Purple theme selection background |
| --purple-theme-user-msg-text | #2c184a | Token | Purple theme user text |
| --theme-attribution-highlight-bg | #ffeeb8 | Token | Attribution highlight |
| --pink-theme-secondary-btn-text | #4d1f34 | Token | Pink theme secondary button text |
| --black-theme-user-selection-bg | lab(82.40% -.0000596 0/.4) | Token | Black theme selection background |
| --bg-scrim | #0d0d0d80 | Token | Modal scrim overlay |
| --interactive-bg-secondary-press | #0d0d0d0d | Token | Secondary press state |
| --interactive-bg-accent-muted-context | #ebf4ff80 | Token | Muted accent in context |
| --text-error | #f93a37 | Token | Error text |
| --interactive-bg-danger-primary-hover | #fa423e | Token | Danger hover background |
| --blue-theme-user-selection-bg | lab(62.19% -3.77 -58.64/.35) | Token | Blue theme selection background |
| --scrollbar-color-hover | #0003 | Token | Scrollbar hover color |
| --theme-secondary-btn-bg | #ececec | Token | Secondary button base background |
| --purple-theme-submit-btn-bg | #924ff7 | Token | Purple theme submit button |
| --yellow-theme-secondary-btn-text | #4d3b00 | Token | Yellow theme secondary button text |
| --interactive-bg-accent-muted-hover | #ebf4ff | Token | Muted accent hover |
| --purple-theme-user-msg-bg | #efe5fe | Token | Purple theme user message background |
| --green-theme-user-msg-text | #003716 | Token | Green theme user text |
| --green-theme-submit-btn-bg | #04b84c | Token | Green theme submit button |
| --bg-secondary | #e8e8e8 | Token | Secondary background |
| --pink-theme-user-msg-bg | #ffe8f3 | Token | Pink theme user message background |
| --text-quaternary | #00000030 | Token | Very low-emphasis text |
| --interactive-bg-danger-primary-press | #ba2623 | Token | Danger press state |
| --blue-theme-user-msg-text | #00284d | Token | Blue theme user text |
| --yellow-theme-user-msg-bg | #fff6d9 | Token | Yellow theme user message background |
| --pink-theme-user-selection-bg | lab(72.41% 48.89 -7.27/.35) | Token | Pink theme selection background |
| --interactive-bg-secondary-hover | #0d0d0d05 | Token | Secondary hover state |
| --orange-theme-user-selection-bg | lab(69.08% 44.32 53.21/.35) | Token | Orange theme selection background |
| --theme-user-msg-bg | #e9e9e980 | Token | User message background |
| --yellow-theme-user-selection-bg | lab(86.38% 6.24 73.40/.35) | Token | Yellow theme selection background |
| --bg-status-error | #fff0f0 | Token | Error background |
| --hint-bg | #b3dbff | Token | Hint background |
| --pink-theme-submit-btn-bg | #ff66ad | Token | Pink theme submit button |
| --hint-text | #08f | Token | Hint text |
| --interactive-bg-accent-hover | #cce6ff | Token | Accent hover background |
| --orange-theme-submit-btn-bg | #fb6a22 | Token | Orange theme submit button |
| --text-status-warning | #e25507 | Token | Warning text |
| --scrollbar-color | #0000001a | Token | Scrollbar base color |
| --brand-purple | #ab68ff | Token | Brand purple accent |
| --interactive-bg-primary-press | #0d0d0de5 | Token | Primary press state |
2.3 Color Relationships
The primary #0d0d0d against #ffffff is textbook high contrast — ratio well above 7:1. Even secondary text (#5d5d5d) on white clocks in around 12:1, still AAA compliant. Accent colors like #66b5ff on black or white also pass accessibility, but some lighter theme backgrounds (e.g., #ffe8f3) may require careful text color pairing to meet AA.
Dark mode is essentially the inverse: black surfaces, white text, accents remain consistent. Transparency overlays (multiple oklab and rgba values) are used to soften transitions between states.
2.4 Usage Guide
- Primary actions:
#0d0d0dbackground +#fffffftext. - Secondary actions: White background, black text, light border (
rgba(0,0,0,0.15)). - Status: Use themed backgrounds (
--bg-status-warning,--bg-status-error) with high-contrast text tokens. - Avoid: Placing light text over light backgrounds. For example, don’t use
#66b5ffover#e5f3ffwithout checking contrast. - Combos that work: Black + brand purple (
#ab68ff), white + blue (#0285ff). - Combos to avoid: Pink text (
#4d1f34) over pink background (#ffe8f3) unless for decorative accents — otherwise accessibility suffers.
3. Typography
3.1 Font Families
Everything uses ui-sans-serif with a safe fallback stack:
-apple-system, system-ui, Segoe UI, Helvetica, Apple Color Emoji, Arial, Segoe UI Emoji, Segoe UI Symbol
No Google Fonts, no Adobe Fonts, no variable fonts. The choice is pragmatic — render fast, look native across OS.
3.2 Type Scale
| Element | Font | Size | Weight | Line Height | Letter Spacing |
|---|---|---|---|---|---|
| Heading-1 | ui-sans-serif | 28px | 400 | 1.21 | 0.38px |
| Heading-1 | ui-sans-serif | 24px | 600 | 1.50 | — |
| Button | ui-sans-serif | 18px | 400 | 1.56 | — |
| Heading-1 | ui-sans-serif | 18px | 400 | 1.56 | — |
| Link | ui-sans-serif | 16px | 400 | 1.50 | — |
| Button | ui-sans-serif | 16px | 400 | 1.50 | — |
| Heading-1 | ui-sans-serif | 16px | 400 | 1.50 | — |
| Heading-1 | ui-sans-serif | 16px | 400 | 1.50 | -0.32px |
| Heading-1 | ui-sans-serif | 16px | 600 | 1.50 | — |
| Link | ui-sans-serif | 14px | 400 | 1.64 | -0.14px |
| Button | ui-sans-serif | 14px | 400 | 1.64 | -0.14px |
| Caption | ui-sans-serif | 14px | 400 | 1.64 | -0.14px |
| Button | ui-sans-serif | 14px | 500 | 1.43 | — |
| Caption | ui-sans-serif | 14px | 400 | 1.00 | — |
| Link | ui-sans-serif | 14px | 400 | 1.00 | — |
| Button | ui-sans-serif | 13px | 600 | 1.50 | — |
| Caption | ui-sans-serif | 13px | 600 | 1.50 | — |
| Caption | ui-sans-serif | 13px | 500 | 1.50 | — |
| Button | ui-sans-serif | 13px | 500 | 1.50 | — |
| Caption | ui-sans-serif | 12px | 400 | 1.33 | — |
3.3 Hierarchy
Hierarchy is subtle — size differences are minimal, relying more on weight shifts (400 vs 600) and spacing. This keeps UI density consistent. Large headings (28px) are rare; most interface text sits between 14–16px. That’s a conscious choice: shorter line lengths, less scroll, better scanability.
4. Spacing & Layout
4.1 Spacing Scale
Base grid: 8px. Common values:
| Value | Rem | Count | Notes |
|---|---|---|---|
| 4px | 0.25rem | 2 | Icon gaps |
| 6px | 0.38rem | 12 | Tight padding |
| 8px | 0.50rem | 106 | Default element gap |
| 10px | 0.63rem | 12 | Secondary padding |
| 16px | 1.00rem | 14 | Section padding |
| 24px | 1.50rem | 1 | Large section spacing |
| 28px | 1.75rem | 1 | Large heading spacing |
| 307.406px | 19.21rem | 1 | Likely a fixed container width |
4.2 Layout
Breakpoints aren’t explicitly listed — Tailwind CSS classes suggest responsive modifiers are used. Layout is mobile-first, scaling up with consistent horizontal padding in multiples of 8px.
5. Visual Elements
-
Border Radius:
- 8px (51 instances) — cards, buttons, containers.
- 10px (1 instance) — rare, maybe a specific component.
- 28px (1 instance) — large visual element.
3.35544e+07px— full pill shapes (buttons, avatars).
-
Shadows:
- Used sparingly. Most depth comes from subtle rgba shadows like
rgba(0,0,0,0.1) 0px 10px 15px -3px.
- Used sparingly. Most depth comes from subtle rgba shadows like
-
Borders:
- 1px solid with low-opacity blacks (
rgba(13,13,13,0.1)). - Often used for separation instead of shadows.
- 1px solid with low-opacity blacks (
6. Components
6.1 Buttons
Primary Button (btn-primary):
- Background:
#0d0d0d - Text:
#ffffff - Padding:
0px 12px - Border-radius:
3.35544e+07px(pill) - Border:
1px solid transparent - Font: 14px, weight 500
Secondary Button:
- Background:
#ffffff - Text:
#0d0d0d - Border:
1px solid rgba(0,0,0,0.15) - Same pill radius.
Icon Button:
- Background: transparent
- Border:
1px solid rgba(13,13,13,0.1) - Padding: 8px
- Font: 13px, weight 600
Muted Button:
- Background:
#ececec - No border
- Padding: 8px
- Font: 16px, weight 400
6.2 Links
Two styles:
- Black (
#0d0d0d) with underline. - Gray (
#5d5d5d) with underline.
6.3 Forms
Text inputs:
- Transparent background.
- Borderless by default.
- Padding bottom: 16px.
- Color:
#0d0d0d.
6.4 Cards
No explicit card data, but border-radius and shadow tokens suggest 8px corners, light shadows for lift.
7. Design Tokens
:root {
/* Colors */
--primary-surface: #0d0d0d;
--secondary-surface: #ffffff;
--neutral-dark-gray: #5d5d5d;
--neutral-mid-gray: #8f8f8f;
--accent-blue: #005fcc;
--brand-purple: #ab68ff;
/* ... all other tokens from data ... */
/* Typography */
--font-family-ui-sans: -apple-system, system-ui, Segoe UI, Helvetica, Apple Color Emoji, Arial, Segoe UI Emoji, Segoe UI Symbol;
--font-size-h1: 28px;
--font-size-h2: 24px;
/* ... all sizes ... */
/* Spacing */
--space-4: 4px;
--space-6: 6px;
--space-8: 8px;
--space-10: 10px;
--space-16: 16px;
--space-24: 24px;
--space-28: 28px;
/* Radius */
--radius-sm: 8px;
--radius-md: 10px;
--radius-lg: 28px;
--radius-full: 33554400px;
/* Shadows */
--shadow-md: rgba(0,0,0,0.1) 0px 10px 15px -3px, rgba(0,0,0,0.1) 0px 4px 6px -4px;
}8. AI Coding Assistant Prompt
# ChatGPT Design System Specification
You are a ChatGPT design expert. Build UIs matching their visual language exactly.
## Brand Context
ChatGPT’s design is minimal, neutral, and functional. Black and white dominate, with accent colors used sparingly for states and themes. Shapes are consistent and rounded, typography is system-based for reliability.
## Colors
- Primary Surface: #0d0d0d — backgrounds, primary buttons
- Secondary Surface: #ffffff — backgrounds, text over dark
- Neutral Dark Gray: #5d5d5d — secondary text
- Neutral Mid Gray: #8f8f8f — hover states
- Accent Blue: #005fcc — focus outlines
- Brand Purple: #ab68ff — decorative accents
- Text Accent: #66b5ff — links
- Text Danger: #e02e2a — error text
- ... (include all tokens from dataset)
## Typography
Font Family: ui-sans-serif, -apple-system, system-ui, Segoe UI, Helvetica, Apple Color Emoji, Arial, Segoe UI Emoji, Segoe UI Symbol
| Level | Size | Weight | Line Height | Use For |
|----------|------|--------|-------------|---------|
| H1 | 28px | 400 | 1.21 | Page titles |
| H1 Bold | 24px | 600 | 1.50 | Section titles |
| Body | 16px | 400 | 1.50 | Paragraph text |
| Caption | 14px | 400 | 1.64 | Small labels |
| Button | 14px | 500 | 1.43 | CTAs |
## Spacing & Grid
Base: 8px. Scale: 4px, 6px, 8px, 10px, 16px, 24px, 28px.
Use multiples for padding, margins, and gaps.
## Border Radius
- sm: 8px — cards, small buttons
- md: 10px — rare components
- lg: 28px — large visual elements
- full: 33554400px — pills, avatars
## Shadows & Depth
Subtle shadows only: rgba(0,0,0,0.1) 0px 10px 15px -3px, rgba(0,0,0,0.1) 0px 4px 6px -4px.
## Components
### Primary Button
```css
.btn-primary {
background: #0d0d0d;
color: #ffffff;
padding: 0 12px;
border-radius: 33554400px;
font-weight: 500;
font-size: 14px;
border: 1px solid transparent;
}
.btn-primary:hover { background: #0d0d0dcc; }
.btn-primary:focus { outline: 2px solid #005fcc; }
.btn-primary:disabled { opacity: 0.5; }
```
### Secondary Button
```css
.btn-secondary {
background: #ffffff;
color: #0d0d0d;
padding: 0 12px;
border-radius: 33554400px;
font-weight: 500;
font-size: 14px;
border: 1px solid rgba(0,0,0,0.15);
}
```
### Input Field
```css
.input {
background: transparent;
color: #0d0d0d;
border: none;
padding-bottom: 16px;
}
.input:focus { outline: none; }
```
## Layout
Mobile-first, multiples of 8px for padding and gaps.
## Interaction Rules
- Transition: 150ms ease for state changes
- Focus indicators: solid outline with accent color
- Disabled states: 50% opacity
## DO
- Use only colors from the palette
- Maintain 8px grid
- Stick to system font stack
- Use full-radius pills for buttons
## DON'T
- Introduce custom colors
- Mix sharp and rounded corners
- Overuse shadows
## Code Examples
Primary Button (Tailwind):
```html
<button class="bg-[#0d0d0d] text-white px-3 rounded-full text-sm font-medium">Click Me</button>
```
Card:
```html
<div class="bg-white rounded-[8px] shadow-md p-4">Card content</div>
```
Input:
```html
<input class="bg-transparent text-[#0d0d0d] border-b border-[#0d0d0d] pb-4" placeholder="Type here" />
```9. Summary
TL;DR: ChatGPT’s design system is black-and-white minimalism with disciplined accents, system fonts, and pill-shaped buttons. Everything lives on an 8px grid, corners are consistently rounded, and color tokens cover all interaction states.
Brand Keywords:
- neutral-functional
- high-contrast-minimal
- rounded-consistent
- theme-aware