Design detail
Raycast
DESIGN.md extracted from the public Raycast website. This is not the official design system. Colors, fonts, and spacing may not be 100% accurate. But it's a good starting point for building something similar.
Live preview
Theme-aware preview frame
Both light and dark preview assets are available.
Documentation
README and DESIGN in one place
Raycast Inspired Design System
DESIGN.md extracted from the public Raycast website. This is not the official design system. Colors, fonts, and spacing may not be 100% accurate. But it's a good starting point for building something similar.
Files
| File | Description |
|---|---|
DESIGN.md |
Complete design system documentation (9 sections) |
preview.html |
Interactive design token catalog (light) |
preview-dark.html |
Interactive design token catalog (dark) |
Use DESIGN.md to use as a reference for AI agents (Claude, Cursor, Stitch) to generate UI that looks like the Raycast design language.
Preview
A sample landing page built with DESIGN.md. It shows the actual colors, typography, buttons, cards, spacing, and elevation, all in one page.
Dark Mode

Light Mode

Design System Inspiration of Raycast
1. Visual Theme & Atmosphere
Raycast's marketing site feels like the dark interior of a precision instrument — a Swiss watch case carved from obsidian. The background isn't just dark, it's an almost-black blue-tint (#07080a) that creates a sense of being inside a macOS native application rather than a website. Every surface, every border, every shadow is calibrated to evoke the feeling of a high-performance desktop utility: fast, minimal, trustworthy.
The signature move is the layered shadow system borrowed from macOS window chrome: multi-layer box-shadows with inset highlights that simulate physical depth, as if cards and buttons are actual pressed or raised glass elements on a dark desk. Combined with Raycast Red (#FF6363) — deployed almost exclusively in the hero's iconic diagonal stripe pattern — the palette creates a brand that reads as "powerful tool with personality." The red doesn't dominate; it punctuates.
Inter is used everywhere — headings, body, buttons, captions — with extensive OpenType features (calt, kern, liga, ss03) creating a consistent, readable typographic voice. The positive letter-spacing (0.2px–0.4px on body text) is unusual for a dark UI and gives the text an airy, breathable quality that counterbalances the dense, dark surfaces. GeistMono appears for code elements, reinforcing the developer-tool identity.
Key Characteristics:
- Near-black blue-tinted background (
#07080a) — not pure black, subtly blue-shifted - macOS-native shadow system with multi-layer inset highlights simulating physical depth
- Raycast Red (
#FF6363) as a punctuation color — hero stripes, not pervasive - Inter with positive letter-spacing (0.2px) for an airy, readable dark-mode experience
- Radix UI component primitives powering the interaction layer
- Subtle rgba white borders (0.06–0.1 opacity) for containment on dark surfaces
- Keyboard shortcut styling with gradient key caps and heavy shadows
2. Color Palette & Roles
Primary
- Near-Black Blue (
#07080a): Primary page background — the foundational void with a subtle blue-cold undertone - Pure White (
#ffffff): Primary heading text, high-emphasis elements - Raycast Red (
#FF6363/hsl(0, 100%, 69%)): Brand accent — hero stripes, danger states, critical highlights
Secondary & Accent
- Raycast Blue (
hsl(202, 100%, 67%)/ ~#55b3ff): Interactive accent — links, focus states, selected items - Raycast Green (
hsl(151, 59%, 59%)/ ~#5fc992): Success states, positive indicators - Raycast Yellow (
hsl(43, 100%, 60%)/ ~#ffbc33): Warning accents, highlights - Blue Transparent (
hsla(202, 100%, 67%, 0.15)): Blue tint overlay for interactive surfaces - Red Transparent (
hsla(0, 100%, 69%, 0.15)): Red tint overlay for danger/error surfaces
Surface & Background
- Deep Background (
#07080a): Page canvas, the darkest surface - Surface 100 (
#101111): Elevated surface, card backgrounds - Key Start (
#121212): Keyboard key gradient start - Key End (
#0d0d0d): Keyboard key gradient end - Card Surface (
#1b1c1e): Badge backgrounds, tag fills, elevated containers - Button Foreground (
#18191a): Dark surface for button text on light backgrounds
Neutrals & Text
- Near White (
#f9f9f9/hsl(240, 11%, 96%)): Primary body text, high-emphasis content - Light Gray (
#cecece/#cdcdce): Secondary body text, descriptions - Silver (
#c0c0c0): Tertiary text, subdued labels - Medium Gray (
#9c9c9d): Link default color, secondary navigation - Dim Gray (
#6a6b6c): Disabled text, low-emphasis labels - Dark Gray (
#434345): Muted borders, inactive navigation links - Border (
hsl(195, 5%, 15%)/ ~#252829): Standard border color for cards and dividers - Dark Border (
#2f3031): Separator lines, table borders
Semantic & Accent
- Error Red (
hsl(0, 100%, 69%)): Error states, destructive actions - Success Green (
hsl(151, 59%, 59%)): Success confirmations, positive states - Warning Yellow (
hsl(43, 100%, 60%)): Warnings, attention-needed states - Info Blue (
hsl(202, 100%, 67%)): Informational highlights, links
Gradient System
- Keyboard Key Gradient: Linear gradient from
#121212(top) to#0d0d0d(bottom) — simulates physical key depth - Warm Glow:
rgba(215, 201, 175, 0.05)radial spread — subtle warm ambient glow behind featured elements
3. Typography Rules
Font Family
- Primary:
Inter— humanist sans-serif, used everywhere. Fallbacks:Inter Fallback, system sans-serif - System:
SF Pro Text— Apple system font for select macOS-native UI elements. Fallbacks:SF Pro Icons,Inter,Inter Fallback - Monospace:
GeistMono— Vercel's monospace font for code elements. Fallbacks:ui-monospace,SFMono-Regular,Roboto Mono,Menlo,Monaco - OpenType features:
calt,kern,liga,ss03enabled globally;ss02,ss08on display text;ligadisabled ("liga" 0) on hero headings
Hierarchy
| Role | Size | Weight | Line Height | Letter Spacing | Notes |
|---|---|---|---|---|---|
| Display Hero | 64px | 600 | 1.10 | 0px | OpenType: liga 0, ss02, ss08 |
| Section Display | 56px | 400 | 1.17 | 0.2px | OpenType: calt, kern, liga, ss03 |
| Section Heading | 24px | 500 | normal | 0.2px | OpenType: calt, kern, liga, ss03 |
| Card Heading | 22px | 400 | 1.15 | 0px | OpenType: calt, kern, liga, ss03 |
| Sub-heading | 20px | 500 | 1.60 | 0.2px | Relaxed line-height for readability |
| Body Large | 18px | 400 | 1.15 | 0.2px | OpenType: calt, kern, liga, ss03 |
| Body | 16px | 500 | 1.60 | 0.2px | Primary body text, relaxed rhythm |
| Body Tight | 16px | 400 | 1.15 | 0.1px | UI labels, compact contexts |
| Button | 16px | 600 | 1.15 | 0.3px | Semibold, slightly wider tracking |
| Nav Link | 16px | 500 | 1.40 | 0.3px | Links in navigation |
| Caption | 14px | 500 | 1.14 | 0.2px | Small labels, metadata |
| Caption Bold | 14px | 600 | 1.40 | 0px | Emphasized captions |
| Small | 12px | 600 | 1.33 | 0px | Badges, tags, micro-labels |
| Small Link | 12px | 400 | 1.50 | 0.4px | Footer links, fine print |
| Code | 14px (GeistMono) | 500 | 1.60 | 0.3px | Code blocks, technical content |
| Code Small | 12px (GeistMono) | 400 | 1.60 | 0.2px | Inline code, terminal output |
Principles
- Positive tracking on dark: Unlike most dark UIs that use tight or neutral letter-spacing, Raycast applies +0.2px to +0.4px — creating an airy, readable feel that compensates for the dark background
- Weight 500 as baseline: Most body text uses medium weight (500), not regular (400) — subtle extra heft improves legibility on dark surfaces
- Display restraint: Hero text at 64px/600 is confident but not oversized — Raycast avoids typographic spectacle in favor of functional elegance
- OpenType everywhere:
ss03(stylistic set 3) is enabled globally across Inter, giving the typeface a slightly more geometric, tool-like quality
4. Component Stylings
Buttons
- Primary Pill: Transparent background, white text, pill shape (86px radius), multi-layer inset shadow (
rgba(255, 255, 255, 0.1) 0px 1px 0px 0px inset). Hover: opacity 0.6 - Secondary Button: Transparent background, white text, 6px radius,
1px solid rgba(255, 255, 255, 0.1)border, subtle drop shadow (rgba(0, 0, 0, 0.03) 0px 7px 3px). Hover: opacity 0.6 - Ghost Button: No background or border, gray text (
#6a6b6c), 86px radius, same inset shadow. Hover: opacity 0.6, text brightens to white - CTA (Download): Semi-transparent white background (
hsla(0, 0%, 100%, 0.815)), dark text (#18191a), pill shape. Hover: full white background (hsl(0, 0%, 100%)) - Transition: All buttons use opacity transition for hover rather than background-color change — a signature Raycast interaction pattern
Cards & Containers
- Standard Card:
#101111surface,1px solid rgba(255, 255, 255, 0.06)border, 12px–16px border-radius - Elevated Card: Ring shadow
rgb(27, 28, 30) 0px 0px 0px 1pxouter +rgb(7, 8, 10) 0px 0px 0px 1px insetinner — creates a double-ring containment - Feature Card: 16px–20px border-radius, subtle warm glow (
rgba(215, 201, 175, 0.05) 0px 0px 20px 5px) behind hero elements - Hover: Cards brighten slightly via border opacity increase or subtle shadow enhancement
Inputs & Forms
- Dark input fields with
#07080abackground,1px solid rgba(255, 255, 255, 0.08)border, 8px border-radius - Focus state: Border brightens, blue glow (
hsla(202, 100%, 67%, 0.15)) ring appears - Text:
#f9f9f9input color,#6a6b6cplaceholder - Labels:
#9c9c9dat 14px weight 500
Navigation
- Top nav: Dark background blending with page, white text links at 16px weight 500
- Nav links: Gray text (
#9c9c9d) → white on hover, underline decoration on hover - CTA button: Semi-transparent white pill at nav end
- Mobile: Collapses to hamburger, maintains dark theme
- Sticky: Nav fixed at top with subtle border separator
Image Treatment
- Product screenshots: macOS window chrome style — rounded corners (12px), deep shadows simulating floating windows
- Full-bleed sections: Dark screenshots blend seamlessly into the dark background
- Hero illustration: Diagonal stripe pattern in Raycast Red — abstract, geometric, brand-defining
- App UI embeds: Showing actual Raycast command palette and extensions — product as content
Keyboard Shortcut Keys
- Key cap styling: Gradient background (
#121212→#0d0d0d), heavy multi-layer shadow (rgba(0, 0, 0, 0.4) 0px 1.5px 0.5px 2.5px+ inset shadows), creating realistic physical key appearance - Border-radius: 4px–6px for individual keys
Badges & Tags
- Neutral badge:
#1b1c1ebackground, white text, 6px radius, 14px font at weight 500,0px 6pxpadding - Compact, pill-like treatment for categorization
5. Layout Principles
Spacing System
- Base unit: 8px
- Scale: 1px, 2px, 3px, 4px, 8px, 10px, 12px, 16px, 20px, 24px, 32px, 40px
- Section padding: 80px–120px vertical between major sections
- Card padding: 16px–32px internal spacing
- Component gaps: 8px–16px between related elements
Grid & Container
- Max width: ~1200px container (breakpoint at 1204px), centered
- Column patterns: Single-column hero, 2–3 column feature grids, full-width showcase sections
- App showcase: Product UI presented in centered window frames
Whitespace Philosophy
- Dramatic negative space: Sections float in vast dark void, creating cinematic pacing between features
- Dense product, sparse marketing: The product UI screenshots are information-dense, but the surrounding marketing copy uses minimal text with generous spacing
- Vertical rhythm: Consistent 24px–32px gaps between elements within sections
Border Radius Scale
- 2px–3px: Micro-elements, code spans, tiny indicators
- 4px–5px: Keyboard keys, small interactive elements
- 6px: Buttons, badges, tags — the workhorse radius
- 8px: Input fields, inline components
- 9px–11px: Images, medium containers
- 12px: Standard cards, product screenshots
- 16px: Large cards, feature sections
- 20px: Hero cards, prominent containers
- 86px+: Pill buttons, nav CTAs — full pill shape
6. Depth & Elevation
| Level | Treatment | Use |
|---|---|---|
| Level 0 (Void) | No shadow, #07080a surface |
Page background |
| Level 1 (Subtle) | rgba(0, 0, 0, 0.28) 0px 1.189px 2.377px |
Minimal lift, inline elements |
| Level 2 (Ring) | rgb(27, 28, 30) 0px 0px 0px 1px outer + rgb(7, 8, 10) 0px 0px 0px 1px inset inner |
Card containment, double-ring technique |
| Level 3 (Button) | rgba(255, 255, 255, 0.05) 0px 1px 0px 0px inset + rgba(255, 255, 255, 0.25) 0px 0px 0px 1px + rgba(0, 0, 0, 0.2) 0px -1px 0px 0px inset |
macOS-native button press — white highlight top, dark inset bottom |
| Level 4 (Key) | 5-layer shadow stack with inset press effects | Keyboard shortcut key caps — physical 3D appearance |
| Level 5 (Floating) | rgba(0, 0, 0, 0.5) 0px 0px 0px 2px + rgba(255, 255, 255, 0.19) 0px 0px 14px + insets |
Command palette, floating panels — heavy depth with glow |
Shadow Philosophy
Raycast's shadow system is the most macOS-native on the web. Multi-layer shadows combine:
- Outer rings for containment (replacing traditional borders)
- Inset top highlights (
rgba(255, 255, 255, 0.05–0.25)) simulating light source from above - Inset bottom darks (
rgba(0, 0, 0, 0.2)) simulating shadow underneath - The effect is physical: elements feel like glass or brushed metal, not flat rectangles
Decorative Depth
- Warm glow:
rgba(215, 201, 175, 0.05) 0px 0px 20px 5pxbehind featured elements — a subtle warm aura on the cold dark canvas - Blue info glow:
rgba(0, 153, 255, 0.15)for interactive state emphasis - Red danger glow:
rgba(255, 99, 99, 0.15)for error/destructive state emphasis
7. Do's and Don'ts
Do
- Use
#07080a(not pure black) as the background — the blue-cold tint is essential to the Raycast feel - Apply positive letter-spacing (+0.2px) on body text — this is deliberately different from most dark UIs
- Use multi-layer shadows with inset highlights for interactive elements — the macOS-native depth is signature
- Keep Raycast Red (
#FF6363) as punctuation, not pervasive — reserve it for hero moments and error states - Use
rgba(255, 255, 255, 0.06)borders for card containment — barely visible, structurally essential - Apply weight 500 as the body text baseline — medium weight improves dark-mode legibility
- Use pill shapes (86px+ radius) for primary CTAs, rectangular shapes (6px–8px) for secondary actions
- Enable OpenType features
calt,kern,liga,ss03on all Inter text - Use opacity transitions (hover: opacity 0.6) for button interactions, not color changes
Don't
- Use pure black (
#000000) as the background — the blue tint differentiates Raycast from generic dark themes - Apply negative letter-spacing on body text — Raycast deliberately uses positive spacing for readability
- Use Raycast Blue as the primary accent for everything — blue is for interactive/info, red is the brand color
- Create single-layer flat shadows — the multi-layer inset system is core to the macOS-native aesthetic
- Use regular weight (400) for body text when 500 is available — the extra weight prevents dark-mode text from feeling thin
- Mix warm and cool borders — stick to the cool gray (
hsl(195, 5%, 15%)) border palette - Apply heavy drop shadows without inset companions — shadows always come in pairs (outer + inset)
- Use decorative elements, gradients, or colorful backgrounds — the dark void is the stage, content is the performer
8. Responsive Behavior
Breakpoints
| Name | Width | Key Changes |
|---|---|---|
| Mobile | <600px | Single column, stacked cards, hamburger nav, hero text reduces to ~40px |
| Small Tablet | 600px–768px | 2-column grid begins, nav partially visible |
| Tablet | 768px–1024px | 2–3 column features, nav expanding, screenshots scale |
| Desktop | 1024px–1200px | Full layout, all nav links visible, 64px hero display |
| Large Desktop | >1200px | Max-width container centered, generous side margins |
Touch Targets
- Pill buttons: 86px radius with 20px padding — well above 44px minimum
- Secondary buttons: 8px padding minimum, but border provides visual target expansion
- Nav links: 16px text with surrounding padding for accessible touch targets
Collapsing Strategy
- Navigation: Full horizontal nav → hamburger at mobile with slide-out menu
- Hero: 64px display → 48px → 36px across breakpoints
- Feature grids: 3-column → 2-column → single-column stack
- Product screenshots: Scale within containers, maintaining macOS window chrome proportions
- Keyboard shortcut displays: Simplify or hide on mobile where keyboard shortcuts are irrelevant
Image Behavior
- Product screenshots scale responsively within fixed-ratio containers
- Hero diagonal stripe pattern scales proportionally
- macOS window chrome rounded corners maintained at all sizes
- No lazy-loading artifacts — images are critical to the product narrative
9. Agent Prompt Guide
Quick Color Reference
- Primary Background: Near-Black Blue (
#07080a) - Primary Text: Near White (
#f9f9f9) - Brand Accent: Raycast Red (
#FF6363) - Interactive Blue: Raycast Blue (
hsl(202, 100%, 67%)/ ~#55b3ff) - Secondary Text: Medium Gray (
#9c9c9d) - Card Surface: Surface 100 (
#101111) - Border: Dark Border (
hsl(195, 5%, 15%)/ ~#252829)
Example Component Prompts
- "Create a hero section on #07080a background with 64px Inter heading (weight 600, line-height 1.1), near-white text (#f9f9f9), and a semi-transparent white pill CTA button (hsla(0,0%,100%,0.815), 86px radius, dark text #18191a)"
- "Design a feature card with #101111 background, 1px solid rgba(255,255,255,0.06) border, 16px border-radius, double-ring shadow (rgb(27,28,30) 0px 0px 0px 1px outer), 22px Inter heading, and #9c9c9d body text"
- "Build a navigation bar on dark background (#07080a), Inter links at 16px weight 500 in #9c9c9d, hover to white, and a translucent white pill button at the right end"
- "Create a keyboard shortcut display with key caps using gradient background (#121212→#0d0d0d), 5-layer shadow for physical depth, 4px radius, Inter 12px weight 600 text"
- "Design an alert card with #101111 surface, Raycast Red (#FF6363) left border accent, translucent red glow (hsla(0,100%,69%,0.15)), white heading, and #cecece description text"
Iteration Guide
When refining existing screens generated with this design system:
- Check the background is
#07080anot pure black — the blue tint is critical - Verify letter-spacing is positive (+0.2px) on body text — negative spacing breaks the Raycast aesthetic
- Ensure shadows have both outer and inset layers — single-layer shadows look flat and wrong
- Confirm Inter has OpenType features
calt,kern,liga,ss03enabled - Test that hover states use opacity transitions (0.6) not color swaps — this is a core interaction pattern