Okta Brand Design System Deep Dive
1. Brand Overview
Okta’s site doesn’t waste time with fluff. It’s enterprise-first, security-forward, and clearly built to make complex identity products feel approachable without feeling lightweight. The vibe is tech confidence — dark neutrals, restrained use of accent color, and typography that’s crisp but not cold. Aeonik drives the typeface system, which is a modern geometric sans that feels simultaneously techy and contemporary. There’s no playful roundness here; this is about precision, clarity, and making sure enterprise buyers trust what they see.
The UI leans on a strong black/near-black (#191919 and #000000) foundation, with a single blue (#3f59e4) doing most of the heavy lifting for interactive states. Neutral off-white (#fffefa) keeps things from feeling stark, but they never go full bright white in primary surfaces — they keep it a touch warm, which helps with long-form reading and reduces eye strain.
Spacing is disciplined. It's an 8px grid, with frequent use of 16px and 24px increments. This gives the layout a predictable rhythm and makes responsive scaling painless. Buttons and cards get generous rounding — 24px and 30px radii — but they’re not afraid to go full 9999px pills when the component calls for it. Shadows are subtle and functional, never decorative; most are low-opacity black blurs for depth, with one or two brand-colored shadows for special CTAs.
The design philosophy is consistent with Okta’s product positioning: identity is complex, but interacting with Okta’s brand shouldn’t be. Minimal colors, clear hierarchy, predictable spacing, and restrained depth effects all say “we’re here to solve problems, not cause them.” This is aimed squarely at IT decision-makers, CISOs, and engineers — people who value clarity over ornamentation. And it works.
2. Color System
2.1 Primary Colors
The primary brand color in the UI is #191919 — almost-black — used for text, key borders, and foundational backgrounds. This isn’t a traditional “primary” in the marketing sense (like a bright blue), but in the UI hierarchy, it’s the color you see most.
The only high-saturation accent is #3f59e4 — a medium vivid blue — used for hover states, link highlights, and primary CTAs. This choice is smart: blue equals trust in tech, but this particular shade isn’t the typical “corporate blue.” It’s deeper, leaning toward a periwinkle feel, which keeps it from blending into the sea of blue SaaS brands.
Competitors often lean heavier into their brand color (Auth0 with orange, Ping Identity with red), but Okta uses blue sparingly. This makes the interactions pop without overwhelming the neutral palette.
2.2 Complete Palette
| Color Name | Hex | Role | Usage |
|---|---|---|---|
| Primary (Near Black) | #191919 | Primary | Text, borders, foundational UI elements |
| Absolute Black | #000000 | Secondary Neutral | Video controls, deep backgrounds |
| Off-White Warm | #fffefa | Background Neutral | Buttons, card surfaces, text on dark |
| Medium Gray | #555555 | Neutral | Secondary text, close buttons |
| Accent Blue | #3f59e4 | Accent | Hover/focus states, primary CTAs |
| Gray450 | #aeaeae | Neutral | UI lines, disabled states |
| Gray200 | #e8dcc7 | Neutral Warm | Background panels |
| Tertiary Medium | #7549f2 | Accent | Secondary highlights |
| Input Error | #da372c | Functional | Form validation errors |
| Secondary Dark | #4cb7a3 | Accent | Charts, infographics |
| Secondary Warm200 | #e27133 | Accent Warm | Highlights |
| Gray600 | #6b665f | Neutral | Placeholder text |
| Gray400 | #afaba1 | Neutral | Dividers |
| Lighter Blue | #a9e6fd | Accent | Illustrations |
| Secondary Light | #b1e4de | Accent | Charts, infographics |
| Analyst Research Yellow | #fad28c | Accent Warm | Reports |
| Light Blue | #46b3e9 | Accent | Links |
| Datasheet Purple | #8d6e97 | Accent | PDF links |
| Tertiary Light | #b49bfc | Accent | Hover states |
| Gray500 | #8c8c96 | Neutral | Text |
| Webinar Teal | #2d8c9e | Accent | Event tags |
| Infographic Tan | #f0bf87 | Accent Warm | Infographic backgrounds |
| Whitepaper Pink | #cfb1c1 | Accent | Document tags |
| Error Functional | #af4c10 | Functional | Alerts |
| Gray800 | #41414b | Neutral Dark | Text |
| Blue Gray | #137ebf | Accent | Charts |
| ColorVideo | #abd5d6 | Accent | Video overlays |
| Demo Green | #a0dcc3 | Accent | Demo elements |
| Lighter Gray | #e6e6e8 | Neutral | Backgrounds |
| Gray1000 | #cbcbcb | Neutral | Lines |
| Gray250 | #e1e1e1 | Neutral | Dividers |
| Button Primary Background Hover | #3f59e4 | Accent | Hover state for primary button |
| Button Primary Background Active | #1a31a9 | Accent | Active state for primary button |
| Button Primary Text Color | #ffffff | Text | Text on primary buttons |
2.3 Color Relationships
The core contrast is between #191919 and #fffefa — this is a high contrast pairing, easily meeting WCAG AA for normal text. Accent blue #3f59e4 on #fffefa also passes comfortably. On dark backgrounds, they switch to #fffefa or pure white for text, ensuring readability.
There’s no explicit dark mode, but the palette would adapt well — the neutral grays are balanced, and the blue accent would carry over without adjustment.
2.4 Usage Guide
- Use
#3f59e4for interactive states only. Don’t use it for headings — keep it special for clicks/taps. - Avoid mixing warm and cool accents in the same component. The warm off-white and orange clash with the blue if used together without neutral separation.
- Use
#191919for text on light surfaces, white/off-white for text on dark surfaces. - Functional colors (
#da372c,#af4c10) are reserved for errors/warnings. Don’t use them for decoration. - Grays are tuned for subtlety. If you need a separator, choose
#cbcbcbor#e1e1e1, not#000000.
3. Typography
3.1 Font Families
The entire site runs on Aeonik, a geometric sans-serif, with Helvetica Neue as the primary fallback. No Google Fonts or Adobe Fonts — likely self-hosted. It’s consistent across headings, links, buttons, captions, and body text.
3.2 Type Scale
| Element | Font | Size | Weight | Line Height |
|---|---|---|---|---|
| H1 Large | Aeonik | 96px | 400 | 1.10 |
| H1 Medium | Aeonik | 48px | 400 | 1.17 |
| H1 Small | Aeonik | 40px | 400 | 1.20 |
| H1 Smaller | Aeonik | 32px | 400 | 1.25 |
| Subheading | Aeonik | 24px | 700 | 1.17 |
| Subheading Light | Aeonik | 24px | 400 | 1.35 |
| Link Large | Aeonik | 20px | 500 | 1.60 |
| Body Large | Aeonik | 20px | 400 | 1.40 |
| Body Medium | Aeonik | 16px | 400 | 1.40 |
| Button Text | Aeonik | 16px | 500 | 1.40 |
| Caption | Aeonik | 14px | 500 | 1.40 |
| Small Text | Aeonik | 12px | 500 | 1.67 |
3.3 Hierarchy
They keep heading weights mostly at 400 — the hierarchy comes from size, not boldness. This works because Aeonik’s letterforms are inherently strong. Bold weights (500–700) are used sparingly for subheadings or button labels, giving them emphasis without breaking the visual rhythm.
4. Spacing & Layout
4.1 Spacing Scale
Base grid: 8px. Multipliers are everywhere.
| Value | Use |
|---|---|
| 4px | Icon gaps |
| 8px | Button padding, small gaps |
| 12px | Input padding |
| 16px | Card padding |
| 24px | Section padding |
| 32px | Large card padding |
| 48px | Hero section gaps |
| 64px | Page section spacing |
| 96px | Hero margins |
4.2 Layout
Breakpoints are numerous, from 320px up to 2320px. This suggests a fluid, breakpoint-driven approach rather than fixed container widths. They clearly optimize for multiple device classes — common ones: 768px (tablet), 1024px (desktop), 1280px (wide desktop).
5. Visual Elements
Border Radius ranges from 1px to full 9999px pills.
- Small: 6px, 8px — buttons, cards
- Medium: 16px, 24px — modals, large cards
- Full: 9999px — pill buttons
Shadows are subtle:
rgba(0, 0, 0, 0.1) 0px 4px 12px— common for cardsrgba(0, 0, 0, 0.3) 0px 10px 30px— deeper for modals
Borders are mostly 1px solid #191919 or light grays for dividers.
6. Components
6.1 Buttons
Primary CTA (main-nav__cta--p):
- Default:
#3f59e4background,#fffefatext, 18px x 16px padding, 30px radius. - Hover:
#bfc2ffbg,#3f59e4text, box-shadowrgba(0,0,0,0.2) 0px 24px 40px. - Active:
#8f97ffbg,#0c084dtext, 2px outline. - Focus:
#1eaedbbg, white text, black border.
Secondary (desktop-nav-list__button-item):
- Default: transparent bg,
#191919text, 15px radius. - Hover:
#3f59e4text, light gray border. - Active: light gray bg, off-white text.
Icon/Video Control:
- Default:
#191919bg, 50% radius, white border. - Hover: blue border, scale 1.1.
6.2 Links
Three variants:
- Light text links: white text, blue hover underline.
- Dark text links:
#191919text, blue hover. - Off-white text links:
#fffefatext, blue hover.
6.3 Forms
Inputs aren’t heavily styled — likely minimal borders (1px solid #d1d1d1) and standard radius (6px).
6.4 Cards
Cards use 8px or 16px radius, light shadows (rgba(0,0,0,0.1) 0px 4px 12px), and off-white backgrounds.
7. Design Tokens
:root {
/* Colors */
--color-primary: #191919;
--color-black: #000000;
--color-offwhite: #fffefa;
--color-gray-medium: #555555;
--color-accent-blue: #3f59e4;
--color-gray450: #aeaeae;
--color-gray200: #e8dcc7;
--color-tertiary-medium: #7549f2;
--color-input-error: #da372c;
--color-secondary: #4cb7a3;
--color-secondary-warm200: #e27133;
--color-gray600: #6b665f;
--color-gray400: #afaba1;
--color-lighter-blue: #a9e6fd;
--color-secondary-light: #b1e4de;
--color-analyst-yellow: #fad28c;
--color-light-blue: #46b3e9;
--color-datasheet-purple: #8d6e97;
--color-tertiary-light: #b49bfc;
--color-gray500: #8c8c96;
--color-webinar-teal: #2d8c9e;
--color-infographic-tan: #f0bf87;
--color-whitepaper-pink: #cfb1c1;
--color-functional-error: #af4c10;
--color-gray800: #41414b;
--color-blue-gray: #137ebf;
--color-video: #abd5d6;
--color-demo-green: #a0dcc3;
--color-lighter-gray: #e6e6e8;
--color-gray1000: #cbcbcb;
--color-gray250: #e1e1e1;
/* Typography */
--font-family-primary: "Aeonik", "Helvetica Neue", sans-serif;
/* Spacing */
--space-4: 4px;
--space-8: 8px;
--space-12: 12px;
--space-16: 16px;
--space-24: 24px;
--space-32: 32px;
--space-48: 48px;
--space-64: 64px;
--space-96: 96px;
/* Radius */
--radius-sm: 6px;
--radius-md: 16px;
--radius-lg: 24px;
--radius-pill: 9999px;
/* Shadows */
--shadow-card: rgba(0,0,0,0.1) 0px 4px 12px;
--shadow-modal: rgba(0,0,0,0.3) 0px 10px 30px;
}8. AI Coding Assistant Prompt
# Okta Design System Specification
You are an Okta design expert. Build UIs matching their visual language exactly.
## Brand Context
Okta’s design language is enterprise-focused, minimal, and trust-oriented. Neutral darks dominate, with a single blue accent used for interaction. Typography is geometric sans, disciplined in size and weight. Spacing is strict 8px grid.
## Color Palette
- Primary: #191919 — Text, borders, foundational UI
- Black: #000000 — Deep backgrounds, video controls
- Off-White: #fffefa — Background surfaces, buttons
- Gray Medium: #555555 — Secondary text
- Accent Blue: #3f59e4 — Hover/focus states, CTAs
- Input Error: #da372c — Validation errors
- Secondary: #4cb7a3 — Charts
- Secondary Warm200: #e27133 — Highlights
- Gray600: #6b665f — Placeholder text
- Gray400: #afaba1 — Dividers
- Light Blue: #46b3e9 — Links
- Functional Error: #af4c10 — Alerts
## Typography
- Font family: "Aeonik", "Helvetica Neue", sans-serif
- H1 Large: 96px / 400 / 1.10
- H1 Medium: 48px / 400 / 1.17
- H1 Small: 32px / 400 / 1.25
- Subheading: 24px / 700 / 1.17
- Body: 16px / 400 / 1.40
- Button: 16px / 500 / 1.40
- Caption: 14px / 500 / 1.40
## Spacing & Grid
Base: 8px grid
Scale: 4, 8, 12, 16, 24, 32, 48, 64, 96
## Border Radius
- sm: 6px — inputs, small buttons
- md: 16px — cards
- lg: 24px — modals
- full: 9999px — pills
## Shadows & Depth
- Card: rgba(0,0,0,0.1) 0px 4px 12px
- Modal: rgba(0,0,0,0.3) 0px 10px 30px
## Component Specifications
### Primary Button
Default:
- bg: #3f59e4
- color: #fffefa
- padding: 18px 16px
- radius: 30px
- border: none
Hover:
- bg: #bfc2ff
- color: #3f59e4
Active:
- bg: #8f97ff
- color: #0c084d
Focus:
- bg: #1eaedb
- color: #ffffff
- border: 1px solid #000000
### Secondary Button
Default:
- bg: transparent
- color: #191919
- radius: 15px
Hover:
- color: #3f59e4
- border: 1px solid #e5e5e5
### Navigation Links
Light text: white default, blue hover underline
Dark text: #191919 default, blue hover underline
### Cards
- bg: #fffefa
- radius: 16px
- shadow: rgba(0,0,0,0.1) 0px 4px 12px
- padding: 16px
## Layout & Responsive Rules
Breakpoints: 320px, 768px, 1024px, 1280px
Max content width: fluid
Page padding: 16px mobile / 32px desktop
## Interaction Rules
Transitions: 150ms ease
Focus: 2px solid outline
## DO
- Use only colors from palette
- Maintain 8px spacing grid
- Keep blue accent for interactive states
- Use Aeonik for all text
- Ensure WCAG AA contrast
## DON'T
- Use shadows outside defined set
- Mix warm and cool accents without neutral separation
- Change border radius arbitrarily
- Use non-palette colors
## Code Examples
Primary Button:
```css
.btn-primary {
background: #3f59e4;
color: #fffefa;
padding: 18px 16px;
border-radius: 30px;
font-weight: 500;
font-size: 16px;
border: none;
transition: background 150ms ease;
}
.btn-primary:hover { background: #bfc2ff; color: #3f59e4; }
.btn-primary:focus { outline: 2px solid #000; }
```
Card:
```css
.card {
background: #fffefa;
border-radius: 16px;
box-shadow: rgba(0,0,0,0.1) 0px 4px 12px;
padding: 16px;
}
```
Input:
```css
.input {
border: 1px solid #d1d1d1;
border-radius: 6px;
padding: 12px;
font-size: 16px;
}
.input:focus {
border-color: #3f59e4;
outline: none;
}
```9. Summary
TL;DR — Okta’s design system is enterprise-neutral with one deliberate accent color. Aeonik drives clean typography. Spacing is strict, borders and shadows are restrained. Interactions pop because the palette is otherwise quiet.
Brand Keywords:
- enterprise-minimalist
- trust-forward
- blue-accented
- grid-disciplined
- geometric-sans