add new designs

This commit is contained in:
necatiozmen
2026-04-01 17:57:27 +03:00
parent ed3c8649c3
commit f6f44a9159
41 changed files with 12076 additions and 1 deletions

268
design-md/raycast/DESIGN.md Normal file
View File

@@ -0,0 +1,268 @@
# Design System: 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.2px0.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.060.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`, `ss03` enabled globally; `ss02`, `ss08` on display text; `liga` disabled (`"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**: `#101111` surface, `1px solid rgba(255, 255, 255, 0.06)` border, 12px16px border-radius
- **Elevated Card**: Ring shadow `rgb(27, 28, 30) 0px 0px 0px 1px` outer + `rgb(7, 8, 10) 0px 0px 0px 1px inset` inner — creates a double-ring containment
- **Feature Card**: 16px20px 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 `#07080a` background, `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: `#f9f9f9` input color, `#6a6b6c` placeholder
- Labels: `#9c9c9d` at 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: 4px6px for individual keys
### Badges & Tags
- **Neutral badge**: `#1b1c1e` background, white text, 6px radius, 14px font at weight 500, `0px 6px` padding
- 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**: 80px120px vertical between major sections
- **Card padding**: 16px32px internal spacing
- **Component gaps**: 8px16px between related elements
### Grid & Container
- **Max width**: ~1200px container (breakpoint at 1204px), centered
- **Column patterns**: Single-column hero, 23 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 24px32px gaps between elements within sections
### Border Radius Scale
- **2px3px**: Micro-elements, code spans, tiny indicators
- **4px5px**: Keyboard keys, small interactive elements
- **6px**: Buttons, badges, tags — the workhorse radius
- **8px**: Input fields, inline components
- **9px11px**: 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.050.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 5px` behind 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 (6px8px) for secondary actions
- Enable OpenType features `calt`, `kern`, `liga`, `ss03` on 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 | 600px768px | 2-column grid begins, nav partially visible |
| Tablet | 768px1024px | 23 column features, nav expanding, screenshots scale |
| Desktop | 1024px1200px | 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:
1. Check the background is `#07080a` not pure black — the blue tint is critical
2. Verify letter-spacing is positive (+0.2px) on body text — negative spacing breaks the Raycast aesthetic
3. Ensure shadows have both outer and inset layers — single-layer shadows look flat and wrong
4. Confirm Inter has OpenType features `calt`, `kern`, `liga`, `ss03` enabled
5. Test that hover states use opacity transitions (0.6) not color swaps — this is a core interaction pattern

View File

@@ -0,0 +1,23 @@
# Raycast Inspired Design System
[DESIGN.md](https://github.com/VoltAgent/awesome-design-md/blob/main/design-md/raycast/DESIGN.md) extracted from the public [raycast](https://raycast.com/) 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](https://github.com/VoltAgent/awesome-design-md/blob/main/design-md/raycast/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
![Raycast Design System — Dark Mode](https://pub-2e4ecbcbc9b24e7b93f1a6ab5b2bc71f.r2.dev/designs/raycast/preview-dark-screenshot.png)
### Light Mode
![Raycast Design System — Light Mode](https://pub-2e4ecbcbc9b24e7b93f1a6ab5b2bc71f.r2.dev/designs/raycast/preview-screenshot.png)

View File

@@ -0,0 +1,608 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Design System Inspired by Raycast — Dark Mode</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
<style>
:root {
--bg: #040506;
--bg-100: #0c0d0e;
--bg-card: #151617;
--white: #ffffff;
--fg: #f4f4f6;
--light-gray: #c8c8ca;
--silver: #b0b0b2;
--med-gray: #8e8e90;
--dim-gray: #5e5f61;
--dark-gray: #3a3b3d;
--border: #1e1f21;
--dark-border: #262728;
--button-fg: #121314;
--red: #ff6363;
--blue: #55b3ff;
--green: #5fc992;
--yellow: #ffbc33;
--red-t: rgba(255, 99, 99, 0.15);
--blue-t: rgba(85, 179, 255, 0.15);
--border-subtle: rgba(255, 255, 255, 0.04);
--border-med: rgba(255, 255, 255, 0.08);
--button-bg: hsla(0, 0%, 100%, 0.815);
--shadow-ring: rgb(22, 23, 25) 0px 0px 0px 1px, rgb(4, 5, 6) 0px 0px 0px 1px inset;
--shadow-button: rgba(255, 255, 255, 0.04) 0px 1px 0px 0px inset, rgba(255, 255, 255, 0.2) 0px 0px 0px 1px, rgba(0, 0, 0, 0.25) 0px -1px 0px 0px inset;
--shadow-float: rgba(0, 0, 0, 0.6) 0px 0px 0px 2px, rgba(255, 255, 255, 0.14) 0px 0px 14px 0px, rgba(0, 0, 0, 0.25) 0px -1px 0.4px 0px inset, rgba(255, 255, 255, 0.8) 0px 1px 0.4px 0px inset;
--font: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
--font-mono: 'GeistMono', ui-monospace, SFMono-Regular, monospace;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: var(--font);
background: var(--bg);
color: var(--fg);
line-height: 1.6;
-webkit-font-smoothing: antialiased;
font-feature-settings: "calt", "kern", "liga", "ss03";
}
.dark-badge {
position: fixed; top: 14px; right: 14px; z-index: 200;
background: var(--white); color: var(--bg);
padding: 5px 12px; border-radius: 86px;
font-size: 11px; font-weight: 600; letter-spacing: 0.2px;
}
.nav {
position: sticky; top: 0; z-index: 100;
display: flex; align-items: center; justify-content: space-between;
padding: 14px 32px;
background: rgba(4, 5, 6, 0.9);
backdrop-filter: blur(12px);
border-bottom: 1px solid var(--border-subtle);
}
.nav-brand { font-size: 15px; font-weight: 600; color: var(--white); letter-spacing: 0.2px; }
.nav-links { display: flex; gap: 24px; align-items: center; list-style: none; }
.nav-links a {
color: var(--med-gray); text-decoration: none; font-size: 14px; font-weight: 500;
letter-spacing: 0.2px; transition: color 0.2s;
}
.nav-links a:hover { color: var(--white); }
.nav-cta {
background: var(--button-bg); color: var(--button-fg) !important;
padding: 8px 20px; border-radius: 86px; font-weight: 600; font-size: 14px;
transition: background 0.2s; letter-spacing: 0.2px;
}
.nav-cta:hover { background: var(--white); }
.hero {
padding: 120px 32px 100px; text-align: center;
max-width: 1200px; margin: 0 auto;
position: relative; overflow: hidden;
}
.hero::before {
content: '';
position: absolute; top: -40px; right: -60px;
width: 400px; height: 400px;
background: repeating-linear-gradient(-45deg, var(--red) 0px, var(--red) 18px, transparent 18px, transparent 36px);
opacity: 0.1; filter: blur(1px);
border-radius: 20px; transform: rotate(12deg);
}
.hero h1 {
font-size: 72px; font-weight: 600; letter-spacing: 0px; line-height: 1.1;
color: var(--white); margin-bottom: 20px; position: relative;
font-feature-settings: 'liga' 0, 'ss02', 'ss08';
}
.hero .subtitle {
font-size: 18px; color: var(--med-gray); letter-spacing: 0.2px;
line-height: 1.5; max-width: 520px; margin: 0 auto 40px; position: relative;
}
.hero-buttons { display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; position: relative; }
.btn-primary {
display: inline-flex; align-items: center;
background: var(--button-bg); color: var(--button-fg);
padding: 12px 28px; border-radius: 86px;
font-size: 16px; font-weight: 600; text-decoration: none;
border: none; cursor: pointer; transition: background 0.2s, opacity 0.2s;
letter-spacing: 0.2px; font-family: var(--font);
}
.btn-primary:hover { background: var(--white); }
.btn-secondary {
display: inline-flex; align-items: center;
background: transparent; color: var(--white);
padding: 12px 28px; border-radius: 86px;
font-size: 16px; font-weight: 500; text-decoration: none;
border: 1px solid var(--border-med); cursor: pointer;
transition: opacity 0.2s; letter-spacing: 0.2px; font-family: var(--font);
}
.btn-secondary:hover { opacity: 0.6; }
.section { max-width: 1200px; margin: 0 auto; padding: 80px 32px; }
.section-title {
font-size: 44px; font-weight: 600; letter-spacing: 0px; line-height: 1.1; margin-bottom: 12px;
font-feature-settings: 'liga' 0, 'ss02', 'ss08';
}
.section-desc { font-size: 16px; color: var(--med-gray); margin-bottom: 48px; letter-spacing: 0.2px; }
.section-divider {
border: none; border-top: 1px solid var(--border-subtle);
max-width: 1136px; margin: 0 auto;
}
.color-group { margin-bottom: 40px; }
.color-group-title {
font-size: 12px; font-weight: 600; color: var(--dim-gray);
text-transform: uppercase; letter-spacing: 0.4px; margin-bottom: 16px;
}
.color-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); gap: 14px; }
.color-swatch {
border-radius: 12px; overflow: hidden;
background: var(--bg-100); box-shadow: var(--shadow-ring);
}
.color-swatch-preview { height: 72px; width: 100%; }
.color-swatch-info { padding: 10px 12px; }
.color-swatch-name { font-size: 13px; font-weight: 600; margin-bottom: 2px; letter-spacing: 0.1px; }
.color-swatch-hex { font-size: 11px; color: var(--dim-gray); font-family: var(--font-mono); letter-spacing: 0.2px; }
.color-swatch-role { font-size: 11px; color: var(--med-gray); margin-top: 3px; line-height: 1.4; }
.type-sample { padding: 24px 0; border-bottom: 1px solid var(--border-subtle); }
.type-sample:last-child { border-bottom: none; }
.type-label { font-size: 11px; color: var(--blue); letter-spacing: 0.4px; text-transform: uppercase; margin-bottom: 8px; font-weight: 600; }
.type-spec { font-size: 12px; color: var(--dim-gray); margin-top: 8px; letter-spacing: 0.2px; }
.button-showcase { display: flex; gap: 20px; flex-wrap: wrap; align-items: center; }
.btn-ghost {
background: transparent; color: var(--dim-gray);
padding: 12px 28px; border-radius: 86px;
font-size: 16px; font-weight: 500; border: none; cursor: pointer;
box-shadow: var(--shadow-button); transition: opacity 0.2s;
letter-spacing: 0.2px; font-family: var(--font);
}
.btn-ghost:hover { opacity: 0.6; }
.btn-rect {
background: transparent; color: var(--white);
padding: 10px 20px; border-radius: 6px;
font-size: 14px; font-weight: 500;
border: 1px solid var(--border-med); cursor: pointer;
box-shadow: rgba(0, 0, 0, 0.05) 0px 7px 3px 0px, rgba(0, 0, 0, 0.3) 0px 4px 4px 0px;
transition: opacity 0.2s; letter-spacing: 0.2px; font-family: var(--font);
}
.btn-rect:hover { opacity: 0.6; }
.btn-label { display: block; font-size: 11px; color: var(--dim-gray); margin-top: 8px; text-align: center; letter-spacing: 0.2px; }
.btn-item { text-align: center; }
.card-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 16px; }
.card {
background: var(--bg-100); border-radius: 16px; padding: 28px;
border: 1px solid var(--border-subtle);
box-shadow: var(--shadow-ring); transition: border-color 0.3s;
}
.card:hover { border-color: rgba(255, 255, 255, 0.1); }
.card-float { box-shadow: var(--shadow-float); border: none; }
.card-title { font-size: 20px; font-weight: 600; letter-spacing: 0px; margin-bottom: 8px; line-height: 1.2; }
.card-text { font-size: 14px; color: var(--med-gray); line-height: 1.5; letter-spacing: 0.2px; }
.card-tag {
display: inline-block; padding: 2px 8px;
background: var(--bg-card); border-radius: 6px;
font-size: 12px; font-weight: 600; color: var(--light-gray);
margin-bottom: 12px; letter-spacing: 0.1px;
}
.form-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 24px; }
.form-group { display: flex; flex-direction: column; gap: 6px; }
.form-label { font-size: 14px; font-weight: 500; color: var(--med-gray); letter-spacing: 0.2px; }
.form-input {
background: var(--bg); border: 1px solid rgba(255, 255, 255, 0.06);
border-radius: 8px; padding: 12px 14px; color: var(--fg);
font-size: 14px; font-family: var(--font); outline: none;
transition: border-color 0.2s, box-shadow 0.2s; letter-spacing: 0.2px;
}
.form-input::placeholder { color: var(--dim-gray); }
.form-input:focus { border-color: var(--blue); box-shadow: 0 0 0 3px var(--blue-t); }
.form-input-error { border-color: var(--red); box-shadow: 0 0 0 3px var(--red-t); }
.form-error-text { font-size: 12px; color: var(--red); letter-spacing: 0.2px; }
textarea.form-input { min-height: 100px; resize: vertical; }
.spacing-row { display: flex; align-items: center; gap: 16px; margin-bottom: 10px; }
.spacing-box { height: 28px; background: var(--blue); border-radius: 4px; opacity: 0.4; }
.spacing-label { font-size: 12px; color: var(--dim-gray); min-width: 50px; text-align: right; letter-spacing: 0.2px; }
.radius-row { display: flex; gap: 20px; flex-wrap: wrap; align-items: flex-end; }
.radius-item { text-align: center; }
.radius-box {
width: 64px; height: 64px;
background: rgba(255, 255, 255, 0.03);
border: 1px solid var(--border-subtle); margin-bottom: 8px;
}
.radius-value { font-size: 11px; color: var(--dim-gray); letter-spacing: 0.2px; }
.radius-context { font-size: 10px; color: var(--dark-gray); margin-top: 2px; }
.elevation-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 20px; }
.elevation-card { padding: 24px; border-radius: 12px; background: var(--bg-100); min-height: 110px; }
.elevation-label { font-size: 14px; font-weight: 600; margin-bottom: 6px; letter-spacing: 0.1px; }
.elevation-desc { font-size: 12px; color: var(--med-gray); line-height: 1.5; letter-spacing: 0.2px; }
.footer {
text-align: center; padding: 48px 32px;
border-top: 1px solid var(--border-subtle); margin-top: 40px;
}
.footer p { font-size: 13px; color: var(--dim-gray); letter-spacing: 0.2px; }
.footer a { color: var(--blue); text-decoration: none; }
@media (max-width: 768px) {
.hero h1 { font-size: 44px; }
.hero .subtitle { font-size: 16px; }
.section-title { font-size: 32px; }
.nav-links { display: none; }
.color-grid { grid-template-columns: repeat(2, 1fr); }
.card-grid { grid-template-columns: 1fr; }
.form-grid { grid-template-columns: 1fr; }
.elevation-grid { grid-template-columns: 1fr; }
.hero::before { width: 250px; height: 250px; top: -20px; right: -40px; }
}
</style>
</head>
<body>
<div class="dark-badge">Dark Mode</div>
<nav class="nav">
<span class="nav-brand">awesome-design-md</span>
<ul class="nav-links">
<li><a href="#colors">Colors</a></li>
<li><a href="#typography">Typography</a></li>
<li><a href="#buttons">Buttons</a></li>
<li><a href="#cards">Cards</a></li>
<li><a href="#forms">Forms</a></li>
<li><a href="#elevation">Elevation</a></li>
<li><a href="#" class="nav-cta">Download</a></li>
</ul>
</nav>
<section class="hero">
<h1>Design System<br>Inspired by Raycast</h1>
<p class="subtitle">A visual catalog of design tokens, components, and patterns extracted from Raycast's marketing site and documented in DESIGN.md.</p>
<div class="hero-buttons">
<a href="#colors" class="btn-primary">Explore Tokens</a>
<a href="#buttons" class="btn-secondary">View Components</a>
</div>
</section>
<hr class="section-divider">
<section class="section" id="colors">
<h2 class="section-title">Color Palette</h2>
<p class="section-desc">Near-black blue-tinted backgrounds, precision grays, and bold semantic accents.</p>
<div class="color-group">
<h3 class="color-group-title">Primary</h3>
<div class="color-grid">
<div class="color-swatch">
<div class="color-swatch-preview" style="background: #07080a; border-bottom: 1px solid var(--border-subtle);"></div>
<div class="color-swatch-info">
<div class="color-swatch-name">Near-Black Blue</div>
<div class="color-swatch-hex">#07080a</div>
<div class="color-swatch-role">Page background</div>
</div>
</div>
<div class="color-swatch">
<div class="color-swatch-preview" style="background: #f9f9f9;"></div>
<div class="color-swatch-info">
<div class="color-swatch-name">Near White</div>
<div class="color-swatch-hex">#f9f9f9</div>
<div class="color-swatch-role">Primary text</div>
</div>
</div>
<div class="color-swatch">
<div class="color-swatch-preview" style="background: #ff6363;"></div>
<div class="color-swatch-info">
<div class="color-swatch-name">Raycast Red</div>
<div class="color-swatch-hex">#ff6363</div>
<div class="color-swatch-role">Brand accent, hero stripes</div>
</div>
</div>
</div>
</div>
<div class="color-group">
<h3 class="color-group-title">Secondary & Semantic</h3>
<div class="color-grid">
<div class="color-swatch">
<div class="color-swatch-preview" style="background: #55b3ff;"></div>
<div class="color-swatch-info">
<div class="color-swatch-name">Raycast Blue</div>
<div class="color-swatch-hex">#55b3ff</div>
<div class="color-swatch-role">Links, interactive accent</div>
</div>
</div>
<div class="color-swatch">
<div class="color-swatch-preview" style="background: #5fc992;"></div>
<div class="color-swatch-info">
<div class="color-swatch-name">Raycast Green</div>
<div class="color-swatch-hex">#5fc992</div>
<div class="color-swatch-role">Success states</div>
</div>
</div>
<div class="color-swatch">
<div class="color-swatch-preview" style="background: #ffbc33;"></div>
<div class="color-swatch-info">
<div class="color-swatch-name">Raycast Yellow</div>
<div class="color-swatch-hex">#ffbc33</div>
<div class="color-swatch-role">Warning, highlights</div>
</div>
</div>
</div>
</div>
<div class="color-group">
<h3 class="color-group-title">Surface & Background</h3>
<div class="color-grid">
<div class="color-swatch">
<div class="color-swatch-preview" style="background: #101111; border-bottom: 1px solid var(--border-subtle);"></div>
<div class="color-swatch-info">
<div class="color-swatch-name">Surface 100</div>
<div class="color-swatch-hex">#101111</div>
<div class="color-swatch-role">Card backgrounds</div>
</div>
</div>
<div class="color-swatch">
<div class="color-swatch-preview" style="background: #1b1c1e; border-bottom: 1px solid var(--border-subtle);"></div>
<div class="color-swatch-info">
<div class="color-swatch-name">Card Surface</div>
<div class="color-swatch-hex">#1b1c1e</div>
<div class="color-swatch-role">Badge fills, containers</div>
</div>
</div>
<div class="color-swatch">
<div class="color-swatch-preview" style="background: hsla(0,0%,100%,0.815);"></div>
<div class="color-swatch-info">
<div class="color-swatch-name">Button White</div>
<div class="color-swatch-hex">hsla(0,0%,100%,0.815)</div>
<div class="color-swatch-role">Primary CTA background</div>
</div>
</div>
</div>
</div>
<div class="color-group">
<h3 class="color-group-title">Neutrals & Text</h3>
<div class="color-grid">
<div class="color-swatch">
<div class="color-swatch-preview" style="background: #cecece;"></div>
<div class="color-swatch-info">
<div class="color-swatch-name">Light Gray</div>
<div class="color-swatch-hex">#cecece</div>
<div class="color-swatch-role">Secondary text</div>
</div>
</div>
<div class="color-swatch">
<div class="color-swatch-preview" style="background: #9c9c9d;"></div>
<div class="color-swatch-info">
<div class="color-swatch-name">Medium Gray</div>
<div class="color-swatch-hex">#9c9c9d</div>
<div class="color-swatch-role">Links, nav, descriptions</div>
</div>
</div>
<div class="color-swatch">
<div class="color-swatch-preview" style="background: #6a6b6c;"></div>
<div class="color-swatch-info">
<div class="color-swatch-name">Dim Gray</div>
<div class="color-swatch-hex">#6a6b6c</div>
<div class="color-swatch-role">Disabled, low-emphasis</div>
</div>
</div>
<div class="color-swatch">
<div class="color-swatch-preview" style="background: #434345;"></div>
<div class="color-swatch-info">
<div class="color-swatch-name">Dark Gray</div>
<div class="color-swatch-hex">#434345</div>
<div class="color-swatch-role">Muted borders</div>
</div>
</div>
<div class="color-swatch">
<div class="color-swatch-preview" style="background: #252829; border: 1px solid var(--border-subtle);"></div>
<div class="color-swatch-info">
<div class="color-swatch-name">Border</div>
<div class="color-swatch-hex">#252829</div>
<div class="color-swatch-role">Card borders, dividers</div>
</div>
</div>
</div>
</div>
</section>
<hr class="section-divider">
<section class="section" id="typography">
<h2 class="section-title">Typography Scale</h2>
<p class="section-desc">Inter with positive letter-spacing for airy dark-mode readability. GeistMono for code.</p>
<div class="type-sample">
<div class="type-label">Display Hero — 64px / 600 / 1.10 / 0px</div>
<div style="font-size: 64px; font-weight: 600; line-height: 1.1; font-feature-settings: 'liga' 0, 'ss02', 'ss08';">Your shortcut to everything</div>
<div class="type-spec">Inter — OpenType: liga 0, ss02, ss08</div>
</div>
<div class="type-sample">
<div class="type-label">Section Display — 56px / 400 / 1.17 / +0.2px</div>
<div style="font-size: 48px; font-weight: 400; line-height: 1.17; letter-spacing: 0.2px;">Supercharged productivity</div>
<div class="type-spec">Inter — OpenType: calt, kern, liga, ss03</div>
</div>
<div class="type-sample">
<div class="type-label">Section Heading — 24px / 500 / normal / +0.2px</div>
<div style="font-size: 24px; font-weight: 500; letter-spacing: 0.2px;">Built for speed, designed for flow</div>
<div class="type-spec">Inter — OpenType: calt, kern, liga, ss03</div>
</div>
<div class="type-sample">
<div class="type-label">Body — 16px / 500 / 1.60 / +0.2px</div>
<div style="font-size: 16px; font-weight: 500; line-height: 1.6; letter-spacing: 0.2px; color: var(--med-gray);">Raycast lets you control your tools with a few keystrokes. It's designed to keep you in the flow state — search, navigate, and execute without touching the mouse.</div>
<div class="type-spec">Inter — weight 500 baseline for dark-mode legibility</div>
</div>
<div class="type-sample">
<div class="type-label">Caption — 14px / 500 / 1.14 / +0.2px</div>
<div style="font-size: 14px; font-weight: 500; line-height: 1.14; letter-spacing: 0.2px; color: var(--med-gray);">Available on macOS 12.0 and later</div>
<div class="type-spec">Inter — small labels, metadata</div>
</div>
<div class="type-sample">
<div class="type-label">Code — 14px / 500 / 1.60 / +0.3px</div>
<div style="font-family: var(--font-mono); font-size: 14px; font-weight: 500; line-height: 1.6; letter-spacing: 0.3px; color: var(--blue);">brew install --cask raycast</div>
<div class="type-spec">GeistMono — code blocks, terminal output</div>
</div>
</section>
<hr class="section-divider">
<section class="section" id="buttons">
<h2 class="section-title">Button Variants</h2>
<p class="section-desc">Pill CTAs with translucent white, ghost variants with macOS-native inset shadows.</p>
<div class="button-showcase">
<div class="btn-item">
<a href="#" class="btn-primary">Download Raycast</a>
<span class="btn-label">Primary / White Pill</span>
</div>
<div class="btn-item">
<a href="#" class="btn-secondary">Learn More</a>
<span class="btn-label">Secondary / Outline Pill</span>
</div>
<div class="btn-item">
<button class="btn-ghost">Explore Store</button>
<span class="btn-label">Ghost / Inset Shadow</span>
</div>
<div class="btn-item">
<button class="btn-rect">View Extension</button>
<span class="btn-label">Rectangular / 6px</span>
</div>
</div>
</section>
<hr class="section-divider">
<section class="section" id="cards">
<h2 class="section-title">Card Examples</h2>
<p class="section-desc">Dark surface cards with double-ring shadows and subtle border containment.</p>
<div class="card-grid">
<div class="card">
<div class="card-tag">Extensions</div>
<h3 class="card-title">Store Ecosystem</h3>
<p class="card-text">Browse thousands of extensions built by the community. Install with one click and customize to fit your workflow.</p>
</div>
<div class="card card-float">
<div class="card-tag">AI</div>
<h3 class="card-title">Raycast AI</h3>
<p class="card-text">Chat with AI, generate text, translate, summarize — all from your command bar without switching context.</p>
</div>
<div class="card">
<div class="card-tag">Productivity</div>
<h3 class="card-title">Clipboard History</h3>
<p class="card-text">Never lose copied text again. Search your entire clipboard history and paste anything from the past.</p>
</div>
</div>
</section>
<hr class="section-divider">
<section class="section" id="forms">
<h2 class="section-title">Form Elements</h2>
<p class="section-desc">Dark inputs with blue focus rings and red error glows.</p>
<div class="form-grid">
<div class="form-group">
<label class="form-label">Full Name</label>
<input type="text" class="form-input" placeholder="Enter your name">
</div>
<div class="form-group">
<label class="form-label">Email (Focus State)</label>
<input type="email" class="form-input" placeholder="you@raycast.com" style="border-color: var(--blue); box-shadow: 0 0 0 3px var(--blue-t);">
</div>
<div class="form-group">
<label class="form-label">API Key (Error State)</label>
<input type="text" class="form-input form-input-error" value="invalid-key-123">
<span class="form-error-text">Invalid API key format</span>
</div>
<div class="form-group">
<label class="form-label">Description</label>
<textarea class="form-input" placeholder="Describe your extension..."></textarea>
</div>
</div>
</section>
<hr class="section-divider">
<section class="section" id="spacing">
<h2 class="section-title">Spacing Scale</h2>
<p class="section-desc">8px base unit with precise sub-values for fine-tuned layout.</p>
<div>
<div class="spacing-row"><span class="spacing-label">2px</span><div class="spacing-box" style="width: 8px;"></div></div>
<div class="spacing-row"><span class="spacing-label">4px</span><div class="spacing-box" style="width: 16px;"></div></div>
<div class="spacing-row"><span class="spacing-label">8px</span><div class="spacing-box" style="width: 40px;"></div></div>
<div class="spacing-row"><span class="spacing-label">12px</span><div class="spacing-box" style="width: 64px;"></div></div>
<div class="spacing-row"><span class="spacing-label">16px</span><div class="spacing-box" style="width: 88px;"></div></div>
<div class="spacing-row"><span class="spacing-label">20px</span><div class="spacing-box" style="width: 120px;"></div></div>
<div class="spacing-row"><span class="spacing-label">24px</span><div class="spacing-box" style="width: 152px;"></div></div>
<div class="spacing-row"><span class="spacing-label">32px</span><div class="spacing-box" style="width: 200px;"></div></div>
<div class="spacing-row"><span class="spacing-label">40px</span><div class="spacing-box" style="width: 260px;"></div></div>
</div>
</section>
<hr class="section-divider">
<section class="section" id="radius">
<h2 class="section-title">Border Radius Scale</h2>
<p class="section-desc">From micro 2px spans to full 86px+ pill buttons.</p>
<div class="radius-row">
<div class="radius-item"><div class="radius-box" style="border-radius: 2px;"></div><div class="radius-value">2px</div><div class="radius-context">Micro</div></div>
<div class="radius-item"><div class="radius-box" style="border-radius: 4px;"></div><div class="radius-value">4px</div><div class="radius-context">Keys</div></div>
<div class="radius-item"><div class="radius-box" style="border-radius: 6px;"></div><div class="radius-value">6px</div><div class="radius-context">Buttons</div></div>
<div class="radius-item"><div class="radius-box" style="border-radius: 8px;"></div><div class="radius-value">8px</div><div class="radius-context">Inputs</div></div>
<div class="radius-item"><div class="radius-box" style="border-radius: 12px;"></div><div class="radius-value">12px</div><div class="radius-context">Cards</div></div>
<div class="radius-item"><div class="radius-box" style="border-radius: 16px;"></div><div class="radius-value">16px</div><div class="radius-context">Large cards</div></div>
<div class="radius-item"><div class="radius-box" style="border-radius: 20px;"></div><div class="radius-value">20px</div><div class="radius-context">Hero</div></div>
<div class="radius-item"><div class="radius-box" style="border-radius: 86px; width: 64px; height: 40px;"></div><div class="radius-value">86px</div><div class="radius-context">Pill</div></div>
</div>
</section>
<hr class="section-divider">
<section class="section" id="elevation">
<h2 class="section-title">Elevation & Depth</h2>
<p class="section-desc">macOS-native shadow system with multi-layer inset highlights.</p>
<div class="elevation-grid">
<div class="elevation-card" style="box-shadow: none; border: 1px solid var(--border-subtle);">
<div class="elevation-label">Level 0 — Void</div>
<div class="elevation-desc">No shadow. The baseline void.</div>
</div>
<div class="elevation-card" style="box-shadow: rgba(0, 0, 0, 0.35) 0px 1.189px 2.377px 0px;">
<div class="elevation-label">Level 1 — Subtle</div>
<div class="elevation-desc">Minimal lift for inline elements.</div>
</div>
<div class="elevation-card" style="box-shadow: var(--shadow-ring);">
<div class="elevation-label">Level 2 — Ring</div>
<div class="elevation-desc">Double-ring containment. Standard card.</div>
</div>
<div class="elevation-card" style="box-shadow: var(--shadow-button);">
<div class="elevation-label">Level 3 — Button</div>
<div class="elevation-desc">macOS press effect. White top, dark inset.</div>
</div>
<div class="elevation-card" style="box-shadow: var(--shadow-float);">
<div class="elevation-label">Level 4 — Floating</div>
<div class="elevation-desc">Command palette depth. Maximum presence.</div>
</div>
</div>
</section>
<footer class="footer">
<p>Design system extracted from <a href="https://raycast.com">raycast.com</a> — Generated by awesome-design-md</p>
</footer>
</body>
</html>

View File

@@ -0,0 +1,690 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Design System Inspired by Raycast</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
<style>
:root {
--bg: #07080a;
--bg-100: #101111;
--bg-card: #1b1c1e;
--white: #ffffff;
--fg: #f9f9f9;
--light-gray: #cecece;
--silver: #c0c0c0;
--med-gray: #9c9c9d;
--dim-gray: #6a6b6c;
--dark-gray: #434345;
--border: #252829;
--dark-border: #2f3031;
--button-fg: #18191a;
--red: #ff6363;
--blue: #55b3ff;
--green: #5fc992;
--yellow: #ffbc33;
--red-t: rgba(255, 99, 99, 0.15);
--blue-t: rgba(85, 179, 255, 0.15);
--border-subtle: rgba(255, 255, 255, 0.06);
--border-med: rgba(255, 255, 255, 0.1);
--button-bg: hsla(0, 0%, 100%, 0.815);
--shadow-ring: rgb(27, 28, 30) 0px 0px 0px 1px, rgb(7, 8, 10) 0px 0px 0px 1px inset;
--shadow-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;
--shadow-float: rgba(0, 0, 0, 0.5) 0px 0px 0px 2px, rgba(255, 255, 255, 0.19) 0px 0px 14px 0px, rgba(0, 0, 0, 0.2) 0px -1px 0.4px 0px inset, rgb(255, 255, 255) 0px 1px 0.4px 0px inset;
--font: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
--font-mono: 'GeistMono', ui-monospace, SFMono-Regular, monospace;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: var(--font);
background: var(--bg);
color: var(--fg);
line-height: 1.6;
-webkit-font-smoothing: antialiased;
font-feature-settings: "calt", "kern", "liga", "ss03";
}
/* NAV */
.nav {
position: sticky; top: 0; z-index: 100;
display: flex; align-items: center; justify-content: space-between;
padding: 14px 32px;
background: rgba(7, 8, 10, 0.88);
backdrop-filter: blur(12px);
border-bottom: 1px solid var(--border-subtle);
}
.nav-brand { font-size: 15px; font-weight: 600; color: var(--white); letter-spacing: 0.2px; }
.nav-links { display: flex; gap: 24px; align-items: center; list-style: none; }
.nav-links a {
color: var(--med-gray); text-decoration: none; font-size: 14px; font-weight: 500;
letter-spacing: 0.2px; transition: color 0.2s;
}
.nav-links a:hover { color: var(--white); }
.nav-cta {
background: var(--button-bg); color: var(--button-fg) !important;
padding: 8px 20px; border-radius: 86px; font-weight: 600; font-size: 14px;
transition: background 0.2s; letter-spacing: 0.2px;
}
.nav-cta:hover { background: var(--white); }
/* HERO */
.hero {
padding: 120px 32px 100px; text-align: center;
max-width: 1200px; margin: 0 auto;
position: relative; overflow: hidden;
}
.hero::before {
content: '';
position: absolute; top: -40px; right: -60px;
width: 400px; height: 400px;
background: repeating-linear-gradient(
-45deg,
var(--red) 0px, var(--red) 18px,
transparent 18px, transparent 36px
);
opacity: 0.15; filter: blur(1px);
border-radius: 20px;
transform: rotate(12deg);
}
.hero h1 {
font-size: 72px; font-weight: 600; letter-spacing: 0px; line-height: 1.1;
color: var(--white); margin-bottom: 20px; position: relative;
font-feature-settings: "liga" 0, "ss02", "ss08";
}
.hero .subtitle {
font-size: 18px; color: var(--med-gray); letter-spacing: 0.2px;
line-height: 1.5; max-width: 520px; margin: 0 auto 40px; position: relative;
}
.hero-buttons { display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; position: relative; }
.btn-primary {
display: inline-flex; align-items: center;
background: var(--button-bg); color: var(--button-fg);
padding: 12px 28px; border-radius: 86px;
font-size: 16px; font-weight: 600; text-decoration: none;
border: none; cursor: pointer; transition: background 0.2s, opacity 0.2s;
letter-spacing: 0.2px; font-family: var(--font);
}
.btn-primary:hover { background: var(--white); }
.btn-secondary {
display: inline-flex; align-items: center;
background: transparent; color: var(--white);
padding: 12px 28px; border-radius: 86px;
font-size: 16px; font-weight: 500; text-decoration: none;
border: 1px solid var(--border-med); cursor: pointer;
transition: opacity 0.2s; letter-spacing: 0.2px; font-family: var(--font);
}
.btn-secondary:hover { opacity: 0.6; }
/* SECTIONS */
.section { max-width: 1200px; margin: 0 auto; padding: 80px 32px; }
.section-title {
font-size: 44px; font-weight: 600; letter-spacing: 0px; line-height: 1.1; margin-bottom: 12px;
font-feature-settings: "liga" 0, "ss02", "ss08";
}
.section-desc { font-size: 16px; color: var(--med-gray); margin-bottom: 48px; letter-spacing: 0.2px; }
.section-divider {
border: none; border-top: 1px solid var(--border-subtle);
max-width: 1136px; margin: 0 auto;
}
/* COLORS */
.color-group { margin-bottom: 40px; }
.color-group-title {
font-size: 12px; font-weight: 600; color: var(--dim-gray);
text-transform: uppercase; letter-spacing: 0.4px; margin-bottom: 16px;
}
.color-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); gap: 14px; }
.color-swatch {
border-radius: 12px; overflow: hidden;
background: var(--bg-100); box-shadow: var(--shadow-ring);
}
.color-swatch-preview { height: 72px; width: 100%; }
.color-swatch-info { padding: 10px 12px; }
.color-swatch-name { font-size: 13px; font-weight: 600; margin-bottom: 2px; letter-spacing: 0.1px; }
.color-swatch-hex { font-size: 11px; color: var(--dim-gray); font-family: var(--font-mono); letter-spacing: 0.2px; }
.color-swatch-role { font-size: 11px; color: var(--med-gray); margin-top: 3px; line-height: 1.4; }
/* TYPOGRAPHY */
.type-sample { padding: 24px 0; border-bottom: 1px solid var(--border-subtle); }
.type-sample:last-child { border-bottom: none; }
.type-label {
font-size: 11px; color: var(--blue); letter-spacing: 0.4px;
text-transform: uppercase; margin-bottom: 8px; font-weight: 600;
}
.type-spec { font-size: 12px; color: var(--dim-gray); margin-top: 8px; letter-spacing: 0.2px; }
/* BUTTONS */
.button-showcase { display: flex; gap: 20px; flex-wrap: wrap; align-items: center; }
.btn-ghost {
background: transparent; color: var(--dim-gray);
padding: 12px 28px; border-radius: 86px;
font-size: 16px; font-weight: 500; border: none; cursor: pointer;
box-shadow: var(--shadow-button); transition: opacity 0.2s;
letter-spacing: 0.2px; font-family: var(--font);
}
.btn-ghost:hover { opacity: 0.6; }
.btn-rect {
background: transparent; color: var(--white);
padding: 10px 20px; border-radius: 6px;
font-size: 14px; font-weight: 500;
border: 1px solid var(--border-med); cursor: pointer;
box-shadow: rgba(0, 0, 0, 0.03) 0px 7px 3px 0px, rgba(0, 0, 0, 0.25) 0px 4px 4px 0px;
transition: opacity 0.2s; letter-spacing: 0.2px; font-family: var(--font);
}
.btn-rect:hover { opacity: 0.6; }
.btn-label { display: block; font-size: 11px; color: var(--dim-gray); margin-top: 8px; text-align: center; letter-spacing: 0.2px; }
.btn-item { text-align: center; }
/* CARDS */
.card-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 16px; }
.card {
background: var(--bg-100); border-radius: 16px; padding: 28px;
border: 1px solid var(--border-subtle);
box-shadow: var(--shadow-ring); transition: border-color 0.3s;
}
.card:hover { border-color: rgba(255, 255, 255, 0.12); }
.card-float { box-shadow: var(--shadow-float); border: none; }
.card-title { font-size: 20px; font-weight: 600; letter-spacing: 0px; margin-bottom: 8px; line-height: 1.2; }
.card-text { font-size: 14px; color: var(--med-gray); line-height: 1.5; letter-spacing: 0.2px; }
.card-tag {
display: inline-block; padding: 2px 8px;
background: var(--bg-card); border-radius: 6px;
font-size: 12px; font-weight: 600; color: var(--light-gray);
margin-bottom: 12px; letter-spacing: 0.1px;
}
/* FORMS */
.form-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 24px; }
.form-group { display: flex; flex-direction: column; gap: 6px; }
.form-label { font-size: 14px; font-weight: 500; color: var(--med-gray); letter-spacing: 0.2px; }
.form-input {
background: var(--bg); border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: 8px; padding: 12px 14px; color: var(--fg);
font-size: 14px; font-family: var(--font); outline: none;
transition: border-color 0.2s, box-shadow 0.2s; letter-spacing: 0.2px;
}
.form-input::placeholder { color: var(--dim-gray); }
.form-input:focus {
border-color: var(--blue);
box-shadow: 0 0 0 3px var(--blue-t);
}
.form-input-error {
border-color: var(--red);
box-shadow: 0 0 0 3px var(--red-t);
}
.form-error-text { font-size: 12px; color: var(--red); letter-spacing: 0.2px; }
textarea.form-input { min-height: 100px; resize: vertical; }
/* SPACING */
.spacing-row { display: flex; align-items: center; gap: 16px; margin-bottom: 10px; }
.spacing-box { height: 28px; background: var(--blue); border-radius: 4px; opacity: 0.5; }
.spacing-label { font-size: 12px; color: var(--dim-gray); min-width: 50px; text-align: right; letter-spacing: 0.2px; }
/* RADIUS */
.radius-row { display: flex; gap: 20px; flex-wrap: wrap; align-items: flex-end; }
.radius-item { text-align: center; }
.radius-box {
width: 64px; height: 64px;
background: rgba(255, 255, 255, 0.04);
border: 1px solid var(--border-subtle); margin-bottom: 8px;
}
.radius-value { font-size: 11px; color: var(--dim-gray); letter-spacing: 0.2px; }
.radius-context { font-size: 10px; color: var(--dark-gray); margin-top: 2px; }
/* ELEVATION */
.elevation-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 20px; }
.elevation-card {
padding: 24px; border-radius: 12px; background: var(--bg-100); min-height: 110px;
}
.elevation-label { font-size: 14px; font-weight: 600; margin-bottom: 6px; letter-spacing: 0.1px; }
.elevation-desc { font-size: 12px; color: var(--med-gray); line-height: 1.5; letter-spacing: 0.2px; }
/* FOOTER */
.footer {
text-align: center; padding: 48px 32px;
border-top: 1px solid var(--border-subtle); margin-top: 40px;
}
.footer p { font-size: 13px; color: var(--dim-gray); letter-spacing: 0.2px; }
.footer a { color: var(--blue); text-decoration: none; }
@media (max-width: 768px) {
.hero h1 { font-size: 44px; }
.hero .subtitle { font-size: 16px; }
.section-title { font-size: 32px; }
.nav-links { display: none; }
.color-grid { grid-template-columns: repeat(2, 1fr); }
.card-grid { grid-template-columns: 1fr; }
.form-grid { grid-template-columns: 1fr; }
.elevation-grid { grid-template-columns: 1fr; }
.hero::before { width: 250px; height: 250px; top: -20px; right: -40px; }
}
</style>
</head>
<body>
<nav class="nav">
<span class="nav-brand">awesome-design-md</span>
<ul class="nav-links">
<li><a href="#colors">Colors</a></li>
<li><a href="#typography">Typography</a></li>
<li><a href="#buttons">Buttons</a></li>
<li><a href="#cards">Cards</a></li>
<li><a href="#forms">Forms</a></li>
<li><a href="#elevation">Elevation</a></li>
<li><a href="#" class="nav-cta">Download</a></li>
</ul>
</nav>
<!-- HERO -->
<section class="hero">
<h1>Design System<br>Inspired by Raycast</h1>
<p class="subtitle">A visual catalog of design tokens, components, and patterns extracted from Raycast's marketing site and documented in DESIGN.md.</p>
<div class="hero-buttons">
<a href="#colors" class="btn-primary">Explore Tokens</a>
<a href="#buttons" class="btn-secondary">View Components</a>
</div>
</section>
<hr class="section-divider">
<!-- COLORS -->
<section class="section" id="colors">
<h2 class="section-title">Color Palette</h2>
<p class="section-desc">Near-black blue-tinted backgrounds, precision grays, and bold semantic accents.</p>
<div class="color-group">
<h3 class="color-group-title">Primary</h3>
<div class="color-grid">
<div class="color-swatch">
<div class="color-swatch-preview" style="background: #07080a; border-bottom: 1px solid var(--border-subtle);"></div>
<div class="color-swatch-info">
<div class="color-swatch-name">Near-Black Blue</div>
<div class="color-swatch-hex">#07080a</div>
<div class="color-swatch-role">Page background</div>
</div>
</div>
<div class="color-swatch">
<div class="color-swatch-preview" style="background: #f9f9f9;"></div>
<div class="color-swatch-info">
<div class="color-swatch-name">Near White</div>
<div class="color-swatch-hex">#f9f9f9</div>
<div class="color-swatch-role">Primary text</div>
</div>
</div>
<div class="color-swatch">
<div class="color-swatch-preview" style="background: #ff6363;"></div>
<div class="color-swatch-info">
<div class="color-swatch-name">Raycast Red</div>
<div class="color-swatch-hex">#ff6363</div>
<div class="color-swatch-role">Brand accent, hero stripes</div>
</div>
</div>
</div>
</div>
<div class="color-group">
<h3 class="color-group-title">Secondary & Semantic</h3>
<div class="color-grid">
<div class="color-swatch">
<div class="color-swatch-preview" style="background: #55b3ff;"></div>
<div class="color-swatch-info">
<div class="color-swatch-name">Raycast Blue</div>
<div class="color-swatch-hex">#55b3ff</div>
<div class="color-swatch-role">Links, interactive accent</div>
</div>
</div>
<div class="color-swatch">
<div class="color-swatch-preview" style="background: #5fc992;"></div>
<div class="color-swatch-info">
<div class="color-swatch-name">Raycast Green</div>
<div class="color-swatch-hex">#5fc992</div>
<div class="color-swatch-role">Success states</div>
</div>
</div>
<div class="color-swatch">
<div class="color-swatch-preview" style="background: #ffbc33;"></div>
<div class="color-swatch-info">
<div class="color-swatch-name">Raycast Yellow</div>
<div class="color-swatch-hex">#ffbc33</div>
<div class="color-swatch-role">Warning, highlights</div>
</div>
</div>
</div>
</div>
<div class="color-group">
<h3 class="color-group-title">Surface & Background</h3>
<div class="color-grid">
<div class="color-swatch">
<div class="color-swatch-preview" style="background: #101111; border-bottom: 1px solid var(--border-subtle);"></div>
<div class="color-swatch-info">
<div class="color-swatch-name">Surface 100</div>
<div class="color-swatch-hex">#101111</div>
<div class="color-swatch-role">Card backgrounds</div>
</div>
</div>
<div class="color-swatch">
<div class="color-swatch-preview" style="background: #1b1c1e; border-bottom: 1px solid var(--border-subtle);"></div>
<div class="color-swatch-info">
<div class="color-swatch-name">Card Surface</div>
<div class="color-swatch-hex">#1b1c1e</div>
<div class="color-swatch-role">Badge fills, elevated containers</div>
</div>
</div>
<div class="color-swatch">
<div class="color-swatch-preview" style="background: hsla(0,0%,100%,0.815);"></div>
<div class="color-swatch-info">
<div class="color-swatch-name">Button White</div>
<div class="color-swatch-hex">hsla(0,0%,100%,0.815)</div>
<div class="color-swatch-role">Primary CTA background</div>
</div>
</div>
</div>
</div>
<div class="color-group">
<h3 class="color-group-title">Neutrals & Text</h3>
<div class="color-grid">
<div class="color-swatch">
<div class="color-swatch-preview" style="background: #cecece;"></div>
<div class="color-swatch-info">
<div class="color-swatch-name">Light Gray</div>
<div class="color-swatch-hex">#cecece</div>
<div class="color-swatch-role">Secondary text</div>
</div>
</div>
<div class="color-swatch">
<div class="color-swatch-preview" style="background: #9c9c9d;"></div>
<div class="color-swatch-info">
<div class="color-swatch-name">Medium Gray</div>
<div class="color-swatch-hex">#9c9c9d</div>
<div class="color-swatch-role">Links, nav, descriptions</div>
</div>
</div>
<div class="color-swatch">
<div class="color-swatch-preview" style="background: #6a6b6c;"></div>
<div class="color-swatch-info">
<div class="color-swatch-name">Dim Gray</div>
<div class="color-swatch-hex">#6a6b6c</div>
<div class="color-swatch-role">Disabled, low-emphasis</div>
</div>
</div>
<div class="color-swatch">
<div class="color-swatch-preview" style="background: #434345;"></div>
<div class="color-swatch-info">
<div class="color-swatch-name">Dark Gray</div>
<div class="color-swatch-hex">#434345</div>
<div class="color-swatch-role">Muted borders, inactive</div>
</div>
</div>
<div class="color-swatch">
<div class="color-swatch-preview" style="background: #252829; border: 1px solid var(--border-subtle);"></div>
<div class="color-swatch-info">
<div class="color-swatch-name">Border</div>
<div class="color-swatch-hex">#252829</div>
<div class="color-swatch-role">Card borders, dividers</div>
</div>
</div>
</div>
</div>
</section>
<hr class="section-divider">
<!-- TYPOGRAPHY -->
<section class="section" id="typography">
<h2 class="section-title">Typography Scale</h2>
<p class="section-desc">Inter with positive letter-spacing for airy dark-mode readability. GeistMono for code.</p>
<div class="type-sample">
<div class="type-label">Display Hero — 64px / 600 / 1.10 / 0px</div>
<div style="font-size: 64px; font-weight: 600; line-height: 1.1; font-feature-settings: 'liga' 0, 'ss02', 'ss08';">Your shortcut to everything</div>
<div class="type-spec">Inter — OpenType: liga 0, ss02, ss08</div>
</div>
<div class="type-sample">
<div class="type-label">Section Display — 56px / 400 / 1.17 / +0.2px</div>
<div style="font-size: 48px; font-weight: 400; line-height: 1.17; letter-spacing: 0.2px;">Supercharged productivity</div>
<div class="type-spec">Inter — OpenType: calt, kern, liga, ss03</div>
</div>
<div class="type-sample">
<div class="type-label">Section Heading — 24px / 500 / normal / +0.2px</div>
<div style="font-size: 24px; font-weight: 500; letter-spacing: 0.2px;">Built for speed, designed for flow</div>
<div class="type-spec">Inter — OpenType: calt, kern, liga, ss03</div>
</div>
<div class="type-sample">
<div class="type-label">Card Heading — 22px / 400 / 1.15</div>
<div style="font-size: 22px; font-weight: 400; line-height: 1.15;">Extensions that transform your workflow</div>
<div class="type-spec">Inter — OpenType: calt, kern, liga, ss03</div>
</div>
<div class="type-sample">
<div class="type-label">Body — 16px / 500 / 1.60 / +0.2px</div>
<div style="font-size: 16px; font-weight: 500; line-height: 1.6; letter-spacing: 0.2px; color: var(--med-gray);">Raycast lets you control your tools with a few keystrokes. It's designed to keep you in the flow state — search, navigate, and execute without touching the mouse.</div>
<div class="type-spec">Inter — weight 500 baseline for dark-mode legibility</div>
</div>
<div class="type-sample">
<div class="type-label">Button — 16px / 600 / 1.15 / +0.3px</div>
<div style="font-size: 16px; font-weight: 600; line-height: 1.15; letter-spacing: 0.3px;">Download for Free</div>
<div class="type-spec">Inter — semibold with wider tracking for CTAs</div>
</div>
<div class="type-sample">
<div class="type-label">Caption — 14px / 500 / 1.14 / +0.2px</div>
<div style="font-size: 14px; font-weight: 500; line-height: 1.14; letter-spacing: 0.2px; color: var(--med-gray);">Available on macOS 12.0 and later</div>
<div class="type-spec">Inter — small labels, metadata</div>
</div>
<div class="type-sample">
<div class="type-label">Small — 12px / 600 / 1.33</div>
<div style="font-size: 12px; font-weight: 600; line-height: 1.33; color: var(--light-gray);">NEW EXTENSION</div>
<div class="type-spec">Inter — badges, micro-labels</div>
</div>
<div class="type-sample">
<div class="type-label">Code — 14px / 500 / 1.60 / +0.3px</div>
<div style="font-family: var(--font-mono); font-size: 14px; font-weight: 500; line-height: 1.6; letter-spacing: 0.3px; color: var(--blue);">brew install --cask raycast</div>
<div class="type-spec">GeistMono — code blocks, terminal output</div>
</div>
</section>
<hr class="section-divider">
<!-- BUTTONS -->
<section class="section" id="buttons">
<h2 class="section-title">Button Variants</h2>
<p class="section-desc">Pill CTAs with translucent white, ghost variants with macOS-native inset shadows, rectangular for secondary.</p>
<div class="button-showcase">
<div class="btn-item">
<a href="#" class="btn-primary">Download Raycast</a>
<span class="btn-label">Primary / White Pill</span>
</div>
<div class="btn-item">
<a href="#" class="btn-secondary">Learn More</a>
<span class="btn-label">Secondary / Outline Pill</span>
</div>
<div class="btn-item">
<button class="btn-ghost">Explore Store</button>
<span class="btn-label">Ghost / Inset Shadow</span>
</div>
<div class="btn-item">
<button class="btn-rect">View Extension</button>
<span class="btn-label">Rectangular / 6px</span>
</div>
<div class="btn-item">
<a href="#" class="btn-primary" style="padding: 8px 20px; font-size: 14px;">Sign Up</a>
<span class="btn-label">Small / Nav CTA</span>
</div>
</div>
</section>
<hr class="section-divider">
<!-- CARDS -->
<section class="section" id="cards">
<h2 class="section-title">Card Examples</h2>
<p class="section-desc">Dark surface cards with double-ring shadows and subtle white border containment.</p>
<div class="card-grid">
<div class="card">
<div class="card-tag">Extensions</div>
<h3 class="card-title">Store Ecosystem</h3>
<p class="card-text">Browse thousands of extensions built by the community. Install with one click and customize to fit your workflow.</p>
</div>
<div class="card card-float">
<div class="card-tag">AI</div>
<h3 class="card-title">Raycast AI</h3>
<p class="card-text">Chat with AI, generate text, translate, summarize — all from your command bar without switching context.</p>
</div>
<div class="card">
<div class="card-tag">Productivity</div>
<h3 class="card-title">Clipboard History</h3>
<p class="card-text">Never lose copied text again. Search your entire clipboard history and paste anything from the past.</p>
</div>
</div>
</section>
<hr class="section-divider">
<!-- FORMS -->
<section class="section" id="forms">
<h2 class="section-title">Form Elements</h2>
<p class="section-desc">Dark inputs with blue focus rings and red error glows — matching the semantic accent system.</p>
<div class="form-grid">
<div class="form-group">
<label class="form-label">Full Name</label>
<input type="text" class="form-input" placeholder="Enter your name">
</div>
<div class="form-group">
<label class="form-label">Email (Focus State)</label>
<input type="email" class="form-input" placeholder="you@raycast.com" style="border-color: var(--blue); box-shadow: 0 0 0 3px var(--blue-t);">
</div>
<div class="form-group">
<label class="form-label">API Key (Error State)</label>
<input type="text" class="form-input form-input-error" value="invalid-key-123">
<span class="form-error-text">Invalid API key format</span>
</div>
<div class="form-group">
<label class="form-label">Description</label>
<textarea class="form-input" placeholder="Describe your extension..."></textarea>
</div>
</div>
</section>
<hr class="section-divider">
<!-- SPACING -->
<section class="section" id="spacing">
<h2 class="section-title">Spacing Scale</h2>
<p class="section-desc">8px base unit with precise sub-values for fine-tuned layout control.</p>
<div>
<div class="spacing-row"><span class="spacing-label">2px</span><div class="spacing-box" style="width: 8px;"></div></div>
<div class="spacing-row"><span class="spacing-label">4px</span><div class="spacing-box" style="width: 16px;"></div></div>
<div class="spacing-row"><span class="spacing-label">8px</span><div class="spacing-box" style="width: 40px;"></div></div>
<div class="spacing-row"><span class="spacing-label">12px</span><div class="spacing-box" style="width: 64px;"></div></div>
<div class="spacing-row"><span class="spacing-label">16px</span><div class="spacing-box" style="width: 88px;"></div></div>
<div class="spacing-row"><span class="spacing-label">20px</span><div class="spacing-box" style="width: 120px;"></div></div>
<div class="spacing-row"><span class="spacing-label">24px</span><div class="spacing-box" style="width: 152px;"></div></div>
<div class="spacing-row"><span class="spacing-label">32px</span><div class="spacing-box" style="width: 200px;"></div></div>
<div class="spacing-row"><span class="spacing-label">40px</span><div class="spacing-box" style="width: 260px;"></div></div>
</div>
</section>
<hr class="section-divider">
<!-- RADIUS -->
<section class="section" id="radius">
<h2 class="section-title">Border Radius Scale</h2>
<p class="section-desc">From micro 2px spans to full 86px+ pill buttons — radius signals interaction importance.</p>
<div class="radius-row">
<div class="radius-item">
<div class="radius-box" style="border-radius: 2px;"></div>
<div class="radius-value">2px</div>
<div class="radius-context">Micro</div>
</div>
<div class="radius-item">
<div class="radius-box" style="border-radius: 4px;"></div>
<div class="radius-value">4px</div>
<div class="radius-context">Keys</div>
</div>
<div class="radius-item">
<div class="radius-box" style="border-radius: 6px;"></div>
<div class="radius-value">6px</div>
<div class="radius-context">Buttons/Tags</div>
</div>
<div class="radius-item">
<div class="radius-box" style="border-radius: 8px;"></div>
<div class="radius-value">8px</div>
<div class="radius-context">Inputs</div>
</div>
<div class="radius-item">
<div class="radius-box" style="border-radius: 12px;"></div>
<div class="radius-value">12px</div>
<div class="radius-context">Cards</div>
</div>
<div class="radius-item">
<div class="radius-box" style="border-radius: 16px;"></div>
<div class="radius-value">16px</div>
<div class="radius-context">Large cards</div>
</div>
<div class="radius-item">
<div class="radius-box" style="border-radius: 20px;"></div>
<div class="radius-value">20px</div>
<div class="radius-context">Hero cards</div>
</div>
<div class="radius-item">
<div class="radius-box" style="border-radius: 86px; width: 64px; height: 40px;"></div>
<div class="radius-value">86px</div>
<div class="radius-context">Pill CTA</div>
</div>
</div>
</section>
<hr class="section-divider">
<!-- ELEVATION -->
<section class="section" id="elevation">
<h2 class="section-title">Elevation & Depth</h2>
<p class="section-desc">macOS-native shadow system — multi-layer inset highlights simulating physical glass and metal depth.</p>
<div class="elevation-grid">
<div class="elevation-card" style="box-shadow: none; border: 1px solid var(--border-subtle);">
<div class="elevation-label">Level 0 — Void</div>
<div class="elevation-desc">No shadow, flat on the dark canvas. The baseline everything rises from.</div>
</div>
<div class="elevation-card" style="box-shadow: rgba(0, 0, 0, 0.28) 0px 1.189px 2.377px 0px;">
<div class="elevation-label">Level 1 — Subtle</div>
<div class="elevation-desc">Minimal lift. Fine drop shadow for inline elements.</div>
</div>
<div class="elevation-card" style="box-shadow: var(--shadow-ring);">
<div class="elevation-label">Level 2 — Ring</div>
<div class="elevation-desc">Double-ring containment — outer + inset. The standard card treatment.</div>
</div>
<div class="elevation-card" style="box-shadow: var(--shadow-button);">
<div class="elevation-label">Level 3 — Button</div>
<div class="elevation-desc">macOS-native press — white top highlight, dark bottom inset, outer ring.</div>
</div>
<div class="elevation-card" style="box-shadow: var(--shadow-float);">
<div class="elevation-label">Level 4 — Floating</div>
<div class="elevation-desc">Command palette depth — heavy ring + white glow + double inset. Maximum presence.</div>
</div>
</div>
</section>
<footer class="footer">
<p>Design system extracted from <a href="https://raycast.com">raycast.com</a> — Generated by awesome-design-md</p>
</footer>
</body>
</html>