
Design System Builder
- 16 installs
- 6 repo stars
- Updated March 20, 2026
- signerlabs/design-system-builder-skills
Helps with design & ui/ux tasks.
About
design-system-builder is a Claude Code skill for design & ui/ux. It helps solo builders move faster with AI-assisted development.
- design-system-builder
- Design & UI/UX
- AI-coding skill
Design System Builder by the numbers
- 16 all-time installs (skills.sh)
- +4 installs in the week ending Aug 5, 2026 (Skillselion tracking)
- Ranked #1,394 of 1,880 Design & UI/UX skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/signerlabs/design-system-builder-skills --skill design-system-builderAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 16 |
|---|---|
| repo stars | ★ 6 |
| Last updated | March 20, 2026 |
| Repository | signerlabs/design-system-builder-skills ↗ |
What it does
Helps with design & ui/ux tasks.
Files
Design System Builder
You are a senior design systems engineer. Your job is to produce a complete, structured design system that both humans and AI agents can consume to generate visually consistent interfaces.
Why this matters
When AI coding agents (Claude, Copilot, etc.) generate UI code, they default to generic choices — Inter font, purple-on-white, 4px spacing. The result is "AI slop" that all looks the same. A good design system eliminates this by giving the agent precise, opinionated constraints: exact colors, specific font pairings, a defined spacing scale, and component patterns. The agent can then focus its creativity within those constraints instead of making random aesthetic choices.
This skill bridges the gap between "I saw a design I like" and "my AI generates code that looks like that design."
Input Detection
Determine the input type and follow the matching path:
Path A: Style Description (keywords/natural language)
The user describes a style in words: "minimal dark fitness app", "playful pastel e-commerce", "brutalist editorial magazine".
1. Parse the description for: tone (minimal/maximal/playful/serious), color mood (dark/light/warm/cool), domain (fintech/health/social/etc.), and any specific references (glassmorphism, Liquid Glass, bento grid, etc.) 2. Research current design trends matching these keywords — what are the best apps in this domain doing right now? 3. Make bold, specific choices. "Dark mode fintech" should not result in generic dark gray + blue. Pick a distinctive palette with character.
Path B: Screenshot/Image Analysis
The user provides one or more screenshots or images of an existing design.
1. Analyze the image carefully for: dominant and accent colors (extract exact hex values), typography style and hierarchy (serif/sans-serif, weight distribution, size ratios), spacing patterns (tight/airy, grid structure), border radius patterns, shadow depth, and overall visual density. 2. Don't just copy — interpret. Extract the underlying system, not pixel-perfect values. If you see 12px, 16px, and 24px spacing, recognize the 4px base unit scale. 3. Note the design's personality: what makes it distinctive vs. generic?
Path C: Figma Link
The user provides a Figma file URL.
1. Use the Figma MCP tools (get_design_context, get_variable_defs, get_metadata) to extract design tokens programmatically. 2. Pull: color variables, typography styles, spacing values, border radius, shadow definitions, and component structure. 3. Organize extracted values into the design system structure below.
Path D: Mixed Input
The user provides a combination (e.g., "make something like this screenshot but darker and more minimal"). Synthesize all inputs — use the image as a starting point, then apply the textual modifications.
Output Structure
Every design system you build MUST include all four deliverables:
1. Design Tokens JSON (design-tokens.json)
This is the machine-readable heart of the system. Other AI agents consume this directly.
{
"meta": {
"name": "System Name",
"description": "One-line description of the aesthetic direction",
"version": "1.0.0",
"created": "YYYY-MM-DD",
"personality": "2-3 sentences capturing what makes this system distinctive"
},
"colors": {
"primary": { "value": "#hex", "usage": "Main brand / CTA / key interactive elements" },
"primary-hover": { "value": "#hex", "usage": "Hover state for primary" },
"secondary": { "value": "#hex", "usage": "Supporting actions, secondary buttons" },
"accent": { "value": "#hex", "usage": "Highlights, badges, notifications" },
"background": { "value": "#hex", "usage": "Page background" },
"surface": { "value": "#hex", "usage": "Card / panel background" },
"surface-elevated": { "value": "#hex", "usage": "Modal / dropdown background" },
"border": { "value": "#hex", "usage": "Dividers, input borders" },
"text-primary": { "value": "#hex", "usage": "Main body text" },
"text-secondary": { "value": "#hex", "usage": "Captions, labels, placeholders" },
"text-on-primary": { "value": "#hex", "usage": "Text on primary-colored backgrounds" },
"success": { "value": "#hex", "usage": "Positive states" },
"warning": { "value": "#hex", "usage": "Caution states" },
"error": { "value": "#hex", "usage": "Error states, destructive actions" },
"info": { "value": "#hex", "usage": "Informational states" }
},
"typography": {
"font-display": { "family": "Font Name", "fallback": "fallback-stack", "source": "Google Fonts / CDN URL" },
"font-body": { "family": "Font Name", "fallback": "fallback-stack", "source": "Google Fonts / CDN URL" },
"font-mono": { "family": "Font Name", "fallback": "monospace", "source": "Google Fonts / CDN URL" },
"scale": {
"xs": { "size": "0.75rem", "lineHeight": "1rem", "usage": "Fine print, badges" },
"sm": { "size": "0.875rem", "lineHeight": "1.25rem", "usage": "Captions, labels" },
"base": { "size": "1rem", "lineHeight": "1.5rem", "usage": "Body text" },
"lg": { "size": "1.125rem", "lineHeight": "1.75rem", "usage": "Lead text, card titles" },
"xl": { "size": "1.25rem", "lineHeight": "1.75rem", "usage": "Section headers" },
"2xl": { "size": "1.5rem", "lineHeight": "2rem", "usage": "Page headers" },
"3xl": { "size": "1.875rem", "lineHeight": "2.25rem", "usage": "Hero titles" },
"4xl": { "size": "2.25rem", "lineHeight": "2.5rem", "usage": "Display text" }
},
"weights": {
"normal": 400,
"medium": 500,
"semibold": 600,
"bold": 700
}
},
"spacing": {
"base-unit": "4px",
"scale": {
"0": "0",
"1": "0.25rem",
"2": "0.5rem",
"3": "0.75rem",
"4": "1rem",
"5": "1.25rem",
"6": "1.5rem",
"8": "2rem",
"10": "2.5rem",
"12": "3rem",
"16": "4rem",
"20": "5rem"
}
},
"borders": {
"radius": {
"none": "0",
"sm": "value",
"md": "value",
"lg": "value",
"xl": "value",
"full": "9999px"
},
"width": {
"default": "1px",
"thick": "2px"
}
},
"shadows": {
"sm": { "value": "CSS shadow value", "usage": "Subtle elevation — inputs, small cards" },
"md": { "value": "CSS shadow value", "usage": "Standard elevation — cards, dropdowns" },
"lg": { "value": "CSS shadow value", "usage": "High elevation — modals, dialogs" },
"glow": { "value": "CSS shadow value or null", "usage": "Brand glow effect, if applicable" }
},
"effects": {
"backdrop-blur": "value or null",
"glass-opacity": "value or null",
"transition-default": "all 0.2s ease",
"transition-slow": "all 0.4s ease"
},
"components": {
"button": {
"primary": { "bg": "token-ref", "text": "token-ref", "radius": "token-ref", "padding": "spacing-ref spacing-ref" },
"secondary": { "bg": "token-ref", "text": "token-ref", "radius": "token-ref", "border": "token-ref" },
"ghost": { "bg": "transparent", "text": "token-ref", "radius": "token-ref" }
},
"card": {
"bg": "token-ref",
"radius": "token-ref",
"shadow": "token-ref",
"padding": "spacing-ref",
"border": "token-ref or none"
},
"input": {
"bg": "token-ref",
"border": "token-ref",
"radius": "token-ref",
"text": "token-ref",
"placeholder": "token-ref",
"focus-ring": "token-ref"
}
}
}The usage fields are critical — they tell the AI agent not just what the value is, but when to use it. An agent reading this JSON should be able to generate styled components without any ambiguity.
2. CSS Variables File (design-system.css)
A ready-to-use CSS file that implements the tokens:
:root {
/* Colors */
--color-primary: #hex;
--color-primary-hover: #hex;
/* ... all color tokens ... */
/* Typography */
--font-display: 'Font Name', fallback;
--font-body: 'Font Name', fallback;
/* ... all type tokens ... */
/* Spacing, borders, shadows, effects — all tokens as CSS variables */
}Include @import statements for Google Fonts or CDN links at the top. Include a basic dark/light mode toggle if the design direction calls for it (using @media (prefers-color-scheme: dark) or a .dark class).
3. Design System Specification (design-system.md)
A human-readable Markdown document that explains the design philosophy and rules:
- Overview: The aesthetic direction in 2-3 sentences. What personality does this system convey?
- Color System: Each color with its hex, a visual swatch (use colored unicode blocks ████), and usage rules. Include do's and don'ts.
- Typography: Font pairing rationale, the full scale with examples of where each size goes, weight usage rules.
- Spacing & Layout: The base unit, the scale, and layout principles (e.g., "use 8-point grid", "cards have 24px internal padding").
- Component Patterns: For each component token, describe the visual pattern and when to use each variant.
- AI Agent Instructions: A section specifically written for AI coding agents, summarizing the most important rules to follow. This section should be concise enough to paste into a system prompt.
4. HTML Preview Page (design-system-preview.html)
A single-file HTML page (CSS and JS inline) that visually showcases the entire design system:
- Color palette swatches with hex values and labels
- Typography scale samples with actual fonts loaded
- Spacing scale visualization
- Component examples: buttons (all variants), cards, inputs, badges
- A sample "mini-app" layout using the system to show how it comes together
This file uses the CSS variables from the design system, serving as both documentation and proof that the system works.
Quality Standards
The difference between a useful design system and a generic one:
Color: Never default to safe, boring palettes. A fintech app doesn't have to be blue. A health app doesn't have to be green. Start from the input's personality and make choices that have character. Every color needs sufficient contrast ratios for accessibility (WCAG AA minimum — 4.5:1 for text, 3:1 for large text/UI elements).
Typography: Choose fonts that have personality. Inter and Roboto are banned — they're the "AI slop" of typography. Look for fonts that match the system's character. Always pair a distinctive display font with a reliable body font. Include the CDN/Google Fonts URL so the fonts actually load.
Spacing: Derive from a consistent base unit (usually 4px or 8px). The scale should feel intentional, not random. Too many values = no system at all.
Components: Token references should form a closed system — every component value should reference a token, not a raw value. This is what makes the system maintainable.
Personality: Every design system you create should be immediately distinguishable from any other. If you made a system for a "minimal health app" and a "minimal fintech app", someone should be able to tell them apart at a glance. Lean into the domain's personality.
File Organization
Save all outputs to the user's working directory:
design-system-{name}/
├── design-tokens.json
├── design-system.css
├── design-system.md
└── design-system-preview.htmlWhere {name} is a kebab-case slug derived from the system's name (e.g., design-system-aurora-dark).
Working with Other Skills
This skill's outputs are specifically designed to be consumed by AI agents. When the user wants to go from design system → actual UI:
1. Point them to use the design-tokens.json and design-system.css as context for their next prompt 2. The "AI Agent Instructions" section in design-system.md can be pasted directly into a system prompt or CLAUDE.md 3. The HTML preview serves as a visual reference the user can screenshot and feed to other tools
If the frontend-design skill is available, suggest the user provide the design-tokens.json as context when invoking it — this gives frontend-design the constraints it needs to avoid generic output.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Fintech Nexus - Design System Preview</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=DM+Sans:wght@400;500;700&family=JetBrains+Mono:wght@400;600&family=Plus+Jakarta+Sans:wght@600;700;800&display=swap" rel="stylesheet">
<style>
:root {
/* Colors */
--color-primary: #7C3AED;
--color-primary-hover: #6D28D9;
--color-secondary: #06B6D4;
--color-accent: #F59E0B;
--color-background: #0F172A;
--color-surface: #1E293B;
--color-surface-elevated: #334155;
--color-border: #475569;
--color-text-primary: #F1F5F9;
--color-text-secondary: #94A3B8;
--color-success: #10B981;
--color-warning: #F59E0B;
--color-error: #EF4444;
/* Fonts */
--font-display: 'Plus Jakarta Sans', sans-serif;
--font-body: 'DM Sans', sans-serif;
--font-mono: 'JetBrains Mono', monospace;
/* Spacing */
--spacing-xs: 0.25rem;
--spacing-sm: 0.5rem;
--spacing-md: 1rem;
--spacing-lg: 1.5rem;
--spacing-xl: 2rem;
--spacing-2xl: 3rem;
--spacing-3xl: 4rem;
/* Transitions */
--transition: all 0.2s ease;
}
body {
margin: 0;
padding: 0;
background-color: var(--color-background);
color: var(--color-text-primary);
font-family: var(--font-body);
line-height: 1.6;
}
* {
box-sizing: border-box;
}
/* Scrollbar styling */
::-webkit-scrollbar {
width: 8px;
}
::-webkit-scrollbar-track {
background: var(--color-surface);
}
::-webkit-scrollbar-thumb {
background: var(--color-primary);
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: var(--color-primary-hover);
}
/* Header */
.header {
position: sticky;
top: 0;
z-index: 1000;
background: rgba(15, 23, 42, 0.95);
backdrop-filter: blur(12px);
border-bottom: 1px solid var(--color-border);
padding: var(--spacing-lg) var(--spacing-2xl);
display: flex;
justify-content: space-between;
align-items: center;
}
.header-title {
font-family: var(--font-display);
font-size: 1.5rem;
font-weight: 700;
background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-secondary) 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
margin: 0;
}
.theme-toggle {
background: var(--color-surface);
border: 1px solid var(--color-border);
color: var(--color-text-primary);
padding: var(--spacing-sm) var(--spacing-lg);
border-radius: 8px;
cursor: pointer;
font-family: var(--font-body);
font-weight: 500;
transition: var(--transition);
}
.theme-toggle:hover {
background: var(--color-surface-elevated);
border-color: var(--color-primary);
}
/* Main container */
.container {
max-width: 1200px;
margin: 0 auto;
padding: var(--spacing-2xl);
}
/* Hero Section */
.hero {
background: linear-gradient(135deg, rgba(124, 58, 237, 0.1) 0%, rgba(6, 182, 212, 0.05) 100%);
border: 1px solid rgba(124, 58, 237, 0.2);
border-radius: 24px;
padding: var(--spacing-3xl) var(--spacing-2xl);
text-align: center;
position: relative;
overflow: hidden;
margin-bottom: var(--spacing-3xl);
}
.hero::before {
content: '';
position: absolute;
top: -50%;
right: -20%;
width: 600px;
height: 600px;
background: radial-gradient(circle, rgba(124, 58, 237, 0.15) 0%, transparent 70%);
border-radius: 50%;
pointer-events: none;
}
.hero-content {
position: relative;
z-index: 1;
}
.hero h1 {
font-family: var(--font-display);
font-size: 3rem;
font-weight: 800;
margin: 0 0 var(--spacing-lg) 0;
color: var(--color-text-primary);
letter-spacing: -0.02em;
}
.hero p {
font-size: 1.25rem;
color: var(--color-text-secondary);
margin: 0;
max-width: 600px;
margin: 0 auto;
line-height: 1.8;
}
/* Section Headers */
.section-header {
margin-bottom: var(--spacing-2xl);
}
.section-title {
font-family: var(--font-display);
font-size: 2rem;
font-weight: 700;
margin: 0 0 var(--spacing-md) 0;
color: var(--color-text-primary);
}
.section-subtitle {
color: var(--color-text-secondary);
margin: 0;
font-size: 1rem;
}
/* Section */
.section {
margin-bottom: var(--spacing-3xl);
}
/* Color Palette */
.color-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
gap: var(--spacing-xl);
margin-top: var(--spacing-xl);
}
.color-swatch {
background: var(--color-surface);
border: 1px solid var(--color-border);
border-radius: 12px;
overflow: hidden;
transition: var(--transition);
cursor: pointer;
}
.color-swatch:hover {
transform: translateY(-4px);
box-shadow: 0 12px 24px rgba(124, 58, 237, 0.15);
}
.color-sample {
width: 100%;
height: 100px;
transition: var(--transition);
}
.color-info {
padding: var(--spacing-md);
}
.color-name {
font-weight: 600;
font-size: 0.875rem;
color: var(--color-text-primary);
margin: 0;
}
.color-hex {
font-family: var(--font-mono);
font-size: 0.75rem;
color: var(--color-text-secondary);
margin: var(--spacing-xs) 0 0 0;
}
/* Typography Scale */
.typography-scale {
display: grid;
gap: var(--spacing-2xl);
margin-top: var(--spacing-xl);
}
.type-sample {
background: var(--color-surface);
border: 1px solid var(--color-border);
border-radius: 12px;
padding: var(--spacing-xl);
display: flex;
justify-content: space-between;
align-items: center;
transition: var(--transition);
}
.type-sample:hover {
background: var(--color-surface-elevated);
border-color: var(--color-primary);
}
.type-label {
display: flex;
flex-direction: column;
gap: var(--spacing-sm);
min-width: 150px;
}
.type-name {
font-family: var(--font-mono);
font-size: 0.75rem;
color: var(--color-text-secondary);
text-transform: uppercase;
letter-spacing: 0.05em;
}
.type-size {
font-family: var(--font-mono);
font-size: 0.875rem;
color: var(--color-primary);
}
.type-sample-text {
color: var(--color-text-secondary);
flex: 1;
}
/* Components Section */
.components-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: var(--spacing-xl);
margin-top: var(--spacing-xl);
}
/* Buttons */
.button-group {
display: flex;
flex-direction: column;
gap: var(--spacing-lg);
}
.btn {
padding: 12px 24px;
border-radius: 12px;
border: none;
font-family: var(--font-body);
font-weight: 600;
cursor: pointer;
transition: var(--transition);
font-size: 1rem;
display: inline-block;
text-align: center;
}
.btn-primary {
background: var(--color-primary);
color: white;
}
.btn-primary:hover {
background: var(--color-primary-hover);
box-shadow: 0 8px 20px rgba(124, 58, 237, 0.3);
transform: translateY(-2px);
}
.btn-primary:active {
transform: translateY(0);
}
.btn-secondary {
background: transparent;
color: var(--color-primary);
border: 2px solid var(--color-primary);
}
.btn-secondary:hover {
background: rgba(124, 58, 237, 0.1);
box-shadow: 0 8px 20px rgba(124, 58, 237, 0.2);
}
.btn-ghost {
background: transparent;
color: var(--color-primary);
border: none;
}
.btn-ghost:hover {
background: rgba(124, 58, 237, 0.1);
}
/* Cards */
.card {
background: var(--color-surface);
border: 1px solid var(--color-border);
border-radius: 16px;
padding: var(--spacing-xl);
transition: var(--transition);
backdrop-filter: blur(4px);
}
.card:hover {
border-color: var(--color-primary);
box-shadow: 0 12px 24px rgba(124, 58, 237, 0.15);
}
.card-title {
font-family: var(--font-display);
font-size: 1rem;
font-weight: 700;
margin: 0 0 var(--spacing-sm) 0;
color: var(--color-text-primary);
}
.card-subtitle {
color: var(--color-text-secondary);
margin: 0;
font-size: 0.875rem;
}
.card-value {
font-family: var(--font-display);
font-size: 2rem;
font-weight: 700;
color: var(--color-primary);
margin: var(--spacing-lg) 0 var(--spacing-sm) 0;
}
.card-change {
font-size: 0.875rem;
color: var(--color-success);
margin: 0;
}
/* Transaction Card */
.transaction-card {
display: flex;
align-items: center;
gap: var(--spacing-lg);
padding: var(--spacing-lg);
}
.transaction-icon {
width: 48px;
height: 48px;
border-radius: 12px;
background: rgba(124, 58, 237, 0.1);
display: flex;
align-items: center;
justify-content: center;
font-size: 1.5rem;
flex-shrink: 0;
}
.transaction-info {
flex: 1;
}
.transaction-name {
font-weight: 600;
margin: 0;
color: var(--color-text-primary);
}
.transaction-date {
font-size: 0.875rem;
color: var(--color-text-secondary);
margin: var(--spacing-xs) 0 0 0;
}
.transaction-amount {
text-align: right;
font-weight: 600;
color: var(--color-text-primary);
}
.transaction-amount.positive {
color: var(--color-success);
}
/* Input Field */
.input-wrapper {
position: relative;
margin-bottom: var(--spacing-xl);
}
.input-field {
width: 100%;
padding: 12px 16px;
background: var(--color-surface);
border: 2px solid var(--color-border);
border-radius: 12px;
color: var(--color-text-primary);
font-family: var(--font-body);
font-size: 1rem;
transition: var(--transition);
}
.input-field:focus {
outline: none;
border-color: var(--color-primary);
box-shadow: 0 0 0 3px rgba(124, 58, 237, 0.1);
}
.input-label {
display: block;
font-size: 0.875rem;
font-weight: 600;
margin-bottom: var(--spacing-sm);
color: var(--color-text-primary);
}
/* Badges */
.badge-group {
display: flex;
gap: var(--spacing-md);
flex-wrap: wrap;
margin-top: var(--spacing-lg);
}
.badge {
display: inline-flex;
align-items: center;
padding: 6px 12px;
border-radius: 8px;
font-size: 0.875rem;
font-weight: 600;
border: 1px solid transparent;
}
.badge-success {
background: rgba(16, 185, 129, 0.1);
color: var(--color-success);
border-color: rgba(16, 185, 129, 0.3);
}
.badge-warning {
background: rgba(245, 158, 11, 0.1);
color: var(--color-warning);
border-color: rgba(245, 158, 11, 0.3);
}
.badge-error {
background: rgba(239, 68, 68, 0.1);
color: var(--color-error);
border-color: rgba(239, 68, 68, 0.3);
}
/* Mini App Demo */
.app-mockup {
background: var(--color-surface);
border: 1px solid var(--color-border);
border-radius: 24px;
overflow: hidden;
margin-top: var(--spacing-xl);
}
.app-header {
background: linear-gradient(135deg, rgba(124, 58, 237, 0.1) 0%, rgba(6, 182, 212, 0.05) 100%);
padding: var(--spacing-xl) var(--spacing-lg);
border-bottom: 1px solid var(--color-border);
display: flex;
justify-content: space-between;
align-items: center;
}
.app-user {
display: flex;
align-items: center;
gap: var(--spacing-md);
}
.avatar {
width: 40px;
height: 40px;
border-radius: 50%;
background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-secondary) 100%);
}
.user-info {
display: flex;
flex-direction: column;
}
.user-name {
font-weight: 600;
font-size: 0.875rem;
margin: 0;
}
.user-status {
font-size: 0.75rem;
color: var(--color-text-secondary);
margin: 0;
}
.notification-bell {
font-size: 1.5rem;
cursor: pointer;
transition: var(--transition);
}
.notification-bell:hover {
transform: scale(1.1);
}
.app-content {
padding: var(--spacing-xl) var(--spacing-lg);
}
.balance-section {
text-align: center;
margin-bottom: var(--spacing-2xl);
}
.balance-label {
color: var(--color-text-secondary);
font-size: 0.875rem;
margin-bottom: var(--spacing-sm);
}
.balance-amount {
font-family: var(--font-display);
font-size: 2.5rem;
font-weight: 800;
color: var(--color-text-primary);
margin: 0 0 var(--spacing-sm) 0;
}
.balance-change {
color: var(--color-success);
font-size: 0.875rem;
}
.quick-actions {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: var(--spacing-md);
margin-bottom: var(--spacing-2xl);
}
.action-btn {
display: flex;
flex-direction: column;
align-items: center;
gap: var(--spacing-sm);
padding: var(--spacing-lg);
background: var(--color-surface-elevated);
border: 1px solid var(--color-border);
border-radius: 12px;
cursor: pointer;
transition: var(--transition);
text-decoration: none;
color: var(--color-text-primary);
}
.action-btn:hover {
background: rgba(124, 58, 237, 0.1);
border-color: var(--color-primary);
transform: translateY(-2px);
}
.action-icon {
font-size: 1.5rem;
}
.action-label {
font-size: 0.75rem;
font-weight: 600;
text-align: center;
}
.transactions-list {
border-top: 1px solid var(--color-border);
}
.transactions-title {
font-weight: 600;
color: var(--color-text-primary);
padding: var(--spacing-lg) 0 var(--spacing-md) 0;
margin: 0;
font-size: 0.875rem;
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--color-text-secondary);
}
/* Footer */
.footer {
text-align: center;
padding: var(--spacing-2xl);
border-top: 1px solid var(--color-border);
color: var(--color-text-secondary);
margin-top: var(--spacing-3xl);
}
.footer p {
margin: var(--spacing-md) 0;
font-size: 0.875rem;
}
/* Responsive */
@media (max-width: 768px) {
.hero h1 {
font-size: 2rem;
}
.section-title {
font-size: 1.5rem;
}
.color-grid {
grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
}
.quick-actions {
grid-template-columns: repeat(2, 1fr);
}
.type-sample {
flex-direction: column;
align-items: flex-start;
}
.header {
padding: var(--spacing-lg);
}
.container {
padding: var(--spacing-lg);
}
}
</style>
</head>
<body>
<!-- Header -->
<header class="header">
<h1 class="header-title">Fintech Nexus</h1>
<button class="theme-toggle" id="themeToggle">🌙 Dark Mode</button>
</header>
<div class="container">
<!-- Hero Section -->
<section class="hero">
<div class="hero-content">
<h1>Fintech Nexus</h1>
<p>A dark-mode design system for modern financial applications. Built with precision, crafted for elegance.</p>
</div>
</section>
<!-- Color Palette -->
<section class="section">
<div class="section-header">
<h2 class="section-title">Color Palette</h2>
<p class="section-subtitle">Core colors and semantic color tokens</p>
</div>
<div class="color-grid">
<div class="color-swatch">
<div class="color-sample" style="background: #7C3AED;"></div>
<div class="color-info">
<p class="color-name">Primary</p>
<p class="color-hex">#7C3AED</p>
</div>
</div>
<div class="color-swatch">
<div class="color-sample" style="background: #6D28D9;"></div>
<div class="color-info">
<p class="color-name">Primary Hover</p>
<p class="color-hex">#6D28D9</p>
</div>
</div>
<div class="color-swatch">
<div class="color-sample" style="background: #06B6D4;"></div>
<div class="color-info">
<p class="color-name">Secondary</p>
<p class="color-hex">#06B6D4</p>
</div>
</div>
<div class="color-swatch">
<div class="color-sample" style="background: #F59E0B;"></div>
<div class="color-info">
<p class="color-name">Accent</p>
<p class="color-hex">#F59E0B</p>
</div>
</div>
<div class="color-swatch">
<div class="color-sample" style="background: #0F172A;"></div>
<div class="color-info">
<p class="color-name">Background</p>
<p class="color-hex">#0F172A</p>
</div>
</div>
<div class="color-swatch">
<div class="color-sample" style="background: #1E293B;"></div>
<div class="color-info">
<p class="color-name">Surface</p>
<p class="color-hex">#1E293B</p>
</div>
</div>
<div class="color-swatch">
<div class="color-sample" style="background: #334155;"></div>
<div class="color-info">
<p class="color-name">Surface Elevated</p>
<p class="color-hex">#334155</p>
</div>
</div>
<div class="color-swatch">
<div class="color-sample" style="background: #475569;"></div>
<div class="color-info">
<p class="color-name">Border</p>
<p class="color-hex">#475569</p>
</div>
</div>
<div class="color-swatch">
<div class="color-sample" style="background: #F1F5F9;"></div>
<div class="color-info">
<p class="color-name">Text Primary</p>
<p class="color-hex">#F1F5F9</p>
</div>
</div>
<div class="color-swatch">
<div class="color-sample" style="background: #94A3B8;"></div>
<div class="color-info">
<p class="color-name">Text Secondary</p>
<p class="color-hex">#94A3B8</p>
</div>
</div>
<div class="color-swatch">
<div class="color-sample" style="background: #10B981;"></div>
<div class="color-info">
<p class="color-name">Success</p>
<p class="color-hex">#10B981</p>
</div>
</div>
<div class="color-swatch">
<div class="color-sample" style="background: #EF4444;"></div>
<div class="color-info">
<p class="color-name">Error</p>
<p class="color-hex">#EF4444</p>
</div>
</div>
</div>
</section>
<!-- Typography Scale -->
<section class="section">
<div class="section-header">
<h2 class="section-title">Typography Scale</h2>
<p class="section-subtitle">Font hierarchy and sizing guidelines</p>
</div>
<div class="typography-scale">
<div class="type-sample">
<div class="type-label">
<span class="type-name">Display 4XL</span>
<span class="type-size">36px / 2.25rem</span>
</div>
<div class="type-sample-text" style="font-family: var(--font-display); font-size: 2.25rem; font-weight: 700;">Beautiful financial experiences</div>
</div>
<div class="type-sample">
<div class="type-label">
<span class="type-name">Display 3XL</span>
<span class="type-size">30px / 1.875rem</span>
</div>
<div class="type-sample-text" style="font-family: var(--font-display); font-size: 1.875rem; font-weight: 700;">Designed for growth</div>
</div>
<div class="type-sample">
<div class="type-label">
<span class="type-name">Display 2XL</span>
<span class="type-size">24px / 1.5rem</span>
</div>
<div class="type-sample-text" style="font-family: var(--font-display); font-size: 1.5rem; font-weight: 700;">Premium design system</div>
</div>
<div class="type-sample">
<div class="type-label">
<span class="type-name">Display XL</span>
<span class="type-size">20px / 1.25rem</span>
</div>
<div class="type-sample-text" style="font-family: var(--font-display); font-size: 1.25rem; font-weight: 700;">Section headers</div>
</div>
<div class="type-sample">
<div class="type-label">
<span class="type-name">Body LG</span>
<span class="type-size">18px / 1.125rem</span>
</div>
<div class="type-sample-text" style="font-family: var(--font-body); font-size: 1.125rem;">Body text for important information</div>
</div>
<div class="type-sample">
<div class="type-label">
<span class="type-name">Body Base</span>
<span class="type-size">16px / 1rem</span>
</div>
<div class="type-sample-text" style="font-family: var(--font-body); font-size: 1rem;">Default body text for all content</div>
</div>
<div class="type-sample">
<div class="type-label">
<span class="type-name">Body SM</span>
<span class="type-size">14px / 0.875rem</span>
</div>
<div class="type-sample-text" style="font-family: var(--font-body); font-size: 0.875rem;">Secondary and supporting text</div>
</div>
<div class="type-sample">
<div class="type-label">
<span class="type-name">Body XS</span>
<span class="type-size">12px / 0.75rem</span>
</div>
<div class="type-sample-text" style="font-family: var(--font-body); font-size: 0.75rem;">Captions and fine print</div>
</div>
</div>
</section>
<!-- Components -->
<section class="section">
<div class="section-header">
<h2 class="section-title">Component Library</h2>
<p class="section-subtitle">Interactive elements and patterns</p>
</div>
<!-- Buttons -->
<div style="margin-bottom: var(--spacing-2xl);">
<h3 class="section-subtitle" style="margin-bottom: var(--spacing-lg); color: var(--color-text-primary); font-weight: 600;">Buttons</h3>
<div class="button-group">
<button class="btn btn-primary">Primary Action</button>
<button class="btn btn-secondary">Secondary Action</button>
<button class="btn btn-ghost">Ghost Action</button>
</div>
</div>
<!-- Input Field -->
<div style="margin-bottom: var(--spacing-2xl); max-width: 400px;">
<h3 class="section-subtitle" style="margin-bottom: var(--spacing-lg); color: var(--color-text-primary); font-weight: 600;">Input Field</h3>
<label class="input-label">Enter amount</label>
<input type="text" class="input-field" placeholder="$0.00" value="$12,450.80">
</div>
<!-- Badges -->
<div style="margin-bottom: var(--spacing-2xl);">
<h3 class="section-subtitle" style="margin-bottom: var(--spacing-lg); color: var(--color-text-primary); font-weight: 600;">Status Badges</h3>
<div class="badge-group">
<span class="badge badge-success">✓ Completed</span>
<span class="badge badge-warning">⏱ Pending</span>
<span class="badge badge-error">✕ Failed</span>
</div>
</div>
<!-- Cards -->
<div style="margin-top: var(--spacing-xl);">
<h3 class="section-subtitle" style="margin-bottom: var(--spacing-lg); color: var(--color-text-primary); font-weight: 600;">Card Variants</h3>
<div class="components-grid">
<div class="card">
<p class="card-subtitle">Total Balance</p>
<h3 class="card-title">Balance Card</h3>
<p class="card-value">$12,450.80</p>
<p class="card-change">↑ +2.4% this month</p>
</div>
<div class="card">
<div class="transaction-card">
<div class="transaction-icon">💳</div>
<div class="transaction-info">
<p class="transaction-name">Spotify Premium</p>
<p class="transaction-date">Today at 2:30 PM</p>
</div>
<div class="transaction-amount positive">-$12.99</div>
</div>
</div>
<div class="card">
<div class="transaction-card">
<div class="transaction-icon">🏦</div>
<div class="transaction-info">
<p class="transaction-name">Salary Deposit</p>
<p class="transaction-date">Yesterday</p>
</div>
<div class="transaction-amount positive">+$4,500.00</div>
</div>
</div>
</div>
</div>
</section>
<!-- Mini App Demo -->
<section class="section">
<div class="section-header">
<h2 class="section-title">Dashboard Preview</h2>
<p class="section-subtitle">Complete fintech dashboard mockup</p>
</div>
<div class="app-mockup">
<div class="app-header">
<div class="app-user">
<div class="avatar"></div>
<div class="user-info">
<p class="user-name">Alex Chen</p>
<p class="user-status">Premium Member</p>
</div>
</div>
<div class="notification-bell">🔔</div>
</div>
<div class="app-content">
<div class="balance-section">
<p class="balance-label">Total Balance</p>
<p class="balance-amount">$47,320.45</p>
<p class="balance-change">↑ +5.2% compared to last month</p>
</div>
<div class="quick-actions">
<div class="action-btn">
<span class="action-icon">📤</span>
<span class="action-label">Send</span>
</div>
<div class="action-btn">
<span class="action-icon">📥</span>
<span class="action-label">Receive</span>
</div>
<div class="action-btn">
<span class="action-icon">📈</span>
<span class="action-label">Invest</span>
</div>
<div class="action-btn">
<span class="action-icon">⋯</span>
<span class="action-label">More</span>
</div>
</div>
<div class="transactions-list">
<p class="transactions-title">Recent Transactions</p>
<div class="transaction-card">
<div class="transaction-icon">💳</div>
<div class="transaction-info">
<p class="transaction-name">Apple Inc.</p>
<p class="transaction-date">Mar 18 • 3:45 PM</p>
</div>
<div class="transaction-amount">-$89.99</div>
</div>
<div class="transaction-card">
<div class="transaction-icon">🏪</div>
<div class="transaction-info">
<p class="transaction-name">Whole Foods Market</p>
<p class="transaction-date">Mar 17 • 2:12 PM</p>
</div>
<div class="transaction-amount">-$42.37</div>
</div>
<div class="transaction-card">
<div class="transaction-icon">🎵</div>
<div class="transaction-info">
<p class="transaction-name">Spotify AB</p>
<p class="transaction-date">Mar 15 • 10:00 AM</p>
</div>
<div class="transaction-amount">-$12.99</div>
</div>
<div class="transaction-card">
<div class="transaction-icon">🏦</div>
<div class="transaction-info">
<p class="transaction-name">Salary Deposit</p>
<p class="transaction-date">Mar 1 • 9:00 AM</p>
</div>
<div class="transaction-amount positive">+$5,000.00</div>
</div>
</div>
</div>
</div>
</section>
</div>
<!-- Footer -->
<footer class="footer">
<p>Generated by Design System Builder Skill</p>
<p style="font-size: 0.75rem; margin-top: var(--spacing-lg);">Fintech Nexus Design System • Revolt-inspired • Dark Mode First</p>
</footer>
<script>
// Theme Toggle
const themeToggle = document.getElementById('themeToggle');
let isDarkMode = true;
themeToggle.addEventListener('click', () => {
isDarkMode = !isDarkMode;
if (isDarkMode) {
document.documentElement.style.setProperty('--color-background', '#0F172A');
document.documentElement.style.setProperty('--color-surface', '#1E293B');
document.documentElement.style.setProperty('--color-surface-elevated', '#334155');
document.documentElement.style.setProperty('--color-border', '#475569');
document.documentElement.style.setProperty('--color-text-primary', '#F1F5F9');
document.documentElement.style.setProperty('--color-text-secondary', '#94A3B8');
themeToggle.textContent = '🌙 Dark Mode';
} else {
document.documentElement.style.setProperty('--color-background', '#F8FAFC');
document.documentElement.style.setProperty('--color-surface', '#FFFFFF');
document.documentElement.style.setProperty('--color-surface-elevated', '#F1F5F9');
document.documentElement.style.setProperty('--color-border', '#CBD5E1');
document.documentElement.style.setProperty('--color-text-primary', '#0F172A');
document.documentElement.style.setProperty('--color-text-secondary', '#475569');
themeToggle.textContent = '☀️ Light Mode';
}
});
// Smooth scroll for color swatches
document.querySelectorAll('.color-swatch').forEach(swatch => {
swatch.addEventListener('click', function() {
const hex = this.querySelector('.color-hex').textContent;
navigator.clipboard.writeText(hex);
const originalText = this.querySelector('.color-hex').textContent;
this.querySelector('.color-hex').textContent = 'Copied! ✓';
setTimeout(() => {
this.querySelector('.color-hex').textContent = originalText;
}, 2000);
});
});
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Serene Flow – Health & Wellness Design System</title>
<link href="https://fonts.googleapis.com/css2?family=Libre+Baskerville:ital@0;1&family=DM+Sans:wght@400;500;600;700&display=swap" rel="stylesheet">
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
:root {
--color-primary: #8B7355;
--color-secondary: #A8C686;
--color-accent: #F5A962;
--color-bg: #FDF8F4;
--color-surface: #FFFFFF;
--color-surface-elevated: #FFFAF5;
--color-border: #E8DDD0;
--color-text-primary: #3D3228;
--color-text-secondary: #8C7E72;
--color-success: #7CB87C;
--color-warning: #E8B84B;
--color-error: #D45B5B;
--color-dark-bg: #2C2420;
--color-dark-surface: #3D3530;
--shadow-soft: 0 4px 16px rgba(139, 115, 85, 0.08);
--shadow-warm: 0 8px 24px rgba(139, 115, 85, 0.12);
--transition: 0.3s ease;
--font-serif: 'Libre Baskerville', serif;
--font-sans: 'DM Sans', sans-serif;
}
body {
background-color: var(--color-bg);
color: var(--color-text-primary);
font-family: var(--font-sans);
line-height: 1.6;
transition: background-color var(--transition), color var(--transition);
}
body.dark-mode {
background-color: var(--color-dark-bg);
color: #E8DDD0;
}
body.dark-mode .card,
body.dark-mode .component-card {
background-color: var(--color-dark-surface);
border-color: rgba(232, 221, 208, 0.1);
}
body.dark-mode .swatch {
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.3);
}
body.dark-mode input,
body.dark-mode textarea {
background-color: var(--color-dark-surface);
border-color: rgba(232, 221, 208, 0.2);
color: #E8DDD0;
}
body.dark-mode .meditation-card,
body.dark-mode .session-item {
background-color: var(--color-dark-surface);
border-color: rgba(232, 221, 208, 0.1);
}
body.dark-mode .text-secondary {
color: rgba(232, 221, 208, 0.7);
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 0 2rem;
}
/* Hero Header */
.hero {
position: relative;
padding: 6rem 2rem;
text-align: center;
overflow: hidden;
background: linear-gradient(135deg, #FDF8F4 0%, #FCF3E8 50%, #F5E8DD 100%);
}
.hero-blob {
position: absolute;
width: 400px;
height: 400px;
background: radial-gradient(circle at 30% 30%, rgba(245, 169, 98, 0.15) 0%, transparent 70%);
border-radius: 45% 55% 52% 48% / 48% 45% 55% 52%;
top: -100px;
right: -100px;
animation: blob-float 8s ease-in-out infinite;
}
@keyframes blob-float {
0%, 100% { transform: translate(0, 0) rotate(0deg); }
33% { transform: translate(30px, -50px) rotate(120deg); }
66% { transform: translate(-20px, 30px) rotate(240deg); }
}
.hero-content {
position: relative;
z-index: 2;
}
.hero h1 {
font-family: var(--font-serif);
font-size: 3.5rem;
font-weight: 700;
color: var(--color-primary);
margin-bottom: 1rem;
letter-spacing: -0.5px;
}
.hero p {
font-size: 1.25rem;
color: var(--color-text-secondary);
max-width: 600px;
margin: 0 auto;
font-weight: 300;
}
/* Section Headers */
.section {
padding: 4rem 0;
border-top: 1px solid var(--color-border);
}
.section h2 {
font-family: var(--font-serif);
font-size: 2.5rem;
color: var(--color-primary);
margin-bottom: 3rem;
text-align: center;
}
/* Color Palette */
.palette-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 2rem;
margin-bottom: 3rem;
}
.swatch {
border-radius: 24px;
overflow: hidden;
box-shadow: var(--shadow-warm);
transition: transform var(--transition);
background: var(--color-surface);
border: 1px solid var(--color-border);
}
.swatch:hover {
transform: translateY(-4px);
}
.swatch-color {
height: 120px;
width: 100%;
}
.swatch-info {
padding: 1.5rem;
}
.swatch-name {
font-family: var(--font-serif);
font-size: 1.1rem;
color: var(--color-text-primary);
margin-bottom: 0.5rem;
font-weight: 600;
}
.swatch-hex {
font-family: 'Courier New', monospace;
font-size: 0.9rem;
color: var(--color-text-secondary);
}
/* Typography */
.typography-grid {
display: grid;
gap: 2.5rem;
}
.type-sample {
padding: 2rem;
background: var(--color-surface);
border: 1px solid var(--color-border);
border-radius: 20px;
box-shadow: var(--shadow-soft);
}
.type-label {
font-size: 0.85rem;
color: var(--color-text-secondary);
text-transform: uppercase;
letter-spacing: 1px;
margin-bottom: 1rem;
}
.type-serif {
font-family: var(--font-serif);
color: var(--color-primary);
}
.type-h1 {
font-size: 2.5rem;
font-weight: 700;
line-height: 1.2;
margin-bottom: 0.5rem;
}
.type-h2 {
font-size: 2rem;
font-weight: 700;
line-height: 1.2;
margin-bottom: 0.5rem;
}
.type-h3 {
font-size: 1.5rem;
font-weight: 600;
margin-bottom: 0.5rem;
}
.type-body {
font-family: var(--font-sans);
font-size: 1rem;
color: var(--color-text-primary);
}
.type-caption {
font-size: 0.875rem;
color: var(--color-text-secondary);
}
/* Components Section */
.components-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 2rem;
margin-bottom: 3rem;
}
.component-card {
background: var(--color-surface);
border: 1px solid var(--color-border);
border-radius: 20px;
padding: 2rem;
box-shadow: var(--shadow-soft);
}
.component-title {
font-family: var(--font-serif);
font-size: 1.2rem;
color: var(--color-primary);
margin-bottom: 1.5rem;
}
/* Buttons */
.button-group {
display: flex;
flex-direction: column;
gap: 1rem;
}
.btn {
padding: 0.875rem 1.75rem;
border: none;
border-radius: 16px;
font-family: var(--font-sans);
font-size: 1rem;
font-weight: 600;
cursor: pointer;
transition: all var(--transition);
text-align: center;
text-decoration: none;
display: inline-block;
}
.btn-primary {
background-color: var(--color-primary);
color: white;
}
.btn-primary:hover {
background-color: #7A6449;
box-shadow: 0 6px 20px rgba(139, 115, 85, 0.3);
}
.btn-secondary {
background-color: transparent;
color: var(--color-primary);
border: 2px solid var(--color-primary);
}
.btn-secondary:hover {
background-color: rgba(139, 115, 85, 0.05);
}
.btn-soft {
background-color: rgba(168, 198, 134, 0.15);
color: var(--color-secondary);
}
.btn-soft:hover {
background-color: rgba(168, 198, 134, 0.25);
}
/* Meditation Card */
.meditation-card {
background: var(--color-surface);
border-radius: 24px;
overflow: hidden;
box-shadow: var(--shadow-soft);
border: 1px solid var(--color-border);
transition: all var(--transition);
}
.meditation-card:hover {
transform: translateY(-4px);
box-shadow: var(--shadow-warm);
}
.meditation-image {
height: 160px;
background: linear-gradient(135deg, rgba(245, 169, 98, 0.2) 0%, rgba(168, 198, 134, 0.2) 100%);
position: relative;
overflow: hidden;
}
.meditation-image::after {
content: '';
position: absolute;
width: 80px;
height: 80px;
background: radial-gradient(circle, rgba(245, 169, 98, 0.3) 0%, transparent 70%);
border-radius: 50%;
top: 40px;
right: 30px;
animation: pulse 3s ease-in-out infinite;
}
@keyframes pulse {
0%, 100% { transform: scale(1); opacity: 1; }
50% { transform: scale(1.1); opacity: 0.7; }
}
.meditation-body {
padding: 1.5rem;
}
.meditation-title {
font-family: var(--font-serif);
font-size: 1.25rem;
color: var(--color-primary);
margin-bottom: 0.5rem;
}
.meditation-meta {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 1rem;
}
.meditation-duration {
font-size: 0.875rem;
color: var(--color-text-secondary);
}
.meditation-tag {
display: inline-block;
background-color: rgba(168, 198, 134, 0.2);
color: var(--color-secondary);
padding: 0.35rem 0.85rem;
border-radius: 12px;
font-size: 0.8rem;
font-weight: 500;
}
/* Mood Selector */
.mood-selector {
display: flex;
gap: 1rem;
justify-content: center;
margin-bottom: 1.5rem;
}
.mood-circle {
width: 60px;
height: 60px;
border-radius: 50%;
background-color: var(--color-surface-elevated);
border: 2px solid var(--color-border);
cursor: pointer;
transition: all var(--transition);
display: flex;
align-items: center;
justify-content: center;
font-size: 1.5rem;
}
.mood-circle:hover,
.mood-circle.active {
border-color: var(--color-primary);
box-shadow: 0 4px 12px rgba(139, 115, 85, 0.2);
transform: scale(1.05);
}
/* Input */
input,
textarea {
width: 100%;
padding: 0.875rem 1rem;
border: 2px solid var(--color-border);
border-radius: 14px;
font-family: var(--font-sans);
font-size: 1rem;
background-color: var(--color-surface-elevated);
color: var(--color-text-primary);
transition: all var(--transition);
}
input:focus,
textarea:focus {
outline: none;
border-color: var(--color-accent);
box-shadow: 0 0 0 3px rgba(245, 169, 98, 0.1);
}
/* Progress Bar */
.progress-section {
margin-top: 2rem;
}
.progress-label {
display: flex;
justify-content: space-between;
margin-bottom: 0.75rem;
font-size: 0.9rem;
}
.progress-bar {
width: 100%;
height: 10px;
background-color: var(--color-border);
border-radius: 10px;
overflow: hidden;
}
.progress-fill {
height: 100%;
width: 40%;
background: linear-gradient(90deg, var(--color-primary) 0%, var(--color-secondary) 100%);
border-radius: 10px;
transition: width var(--transition);
}
/* Mini App Demo */
.app-mockup {
background: var(--color-surface);
border: 1px solid var(--color-border);
border-radius: 24px;
padding: 2rem;
box-shadow: var(--shadow-warm);
}
.app-greeting {
margin-bottom: 2rem;
}
.app-greeting h3 {
font-family: var(--font-serif);
font-size: 1.75rem;
color: var(--color-primary);
margin-bottom: 0.25rem;
}
.app-greeting p {
color: var(--color-text-secondary);
font-size: 0.95rem;
}
.app-section {
margin-bottom: 2rem;
}
.app-section-label {
font-size: 0.85rem;
text-transform: uppercase;
letter-spacing: 1px;
color: var(--color-text-secondary);
margin-bottom: 1rem;
font-weight: 600;
}
.stats-row {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1rem;
margin-bottom: 2rem;
}
.stat-box {
background-color: var(--color-surface-elevated);
border: 1px solid var(--color-border);
border-radius: 16px;
padding: 1.25rem;
text-align: center;
}
.stat-number {
font-family: var(--font-serif);
font-size: 1.75rem;
color: var(--color-primary);
font-weight: 700;
margin-bottom: 0.25rem;
}
.stat-label {
font-size: 0.8rem;
color: var(--color-text-secondary);
}
.session-item {
display: flex;
align-items: center;
padding: 1rem 0;
border-bottom: 1px solid var(--color-border);
background: transparent;
}
.session-item:last-child {
border-bottom: none;
}
.session-avatar {
width: 50px;
height: 50px;
border-radius: 50%;
background: linear-gradient(135deg, rgba(245, 169, 98, 0.2) 0%, rgba(168, 198, 134, 0.2) 100%);
margin-right: 1rem;
flex-shrink: 0;
}
.session-info {
flex: 1;
}
.session-title {
font-weight: 600;
color: var(--color-text-primary);
margin-bottom: 0.2rem;
}
.session-meta {
font-size: 0.85rem;
color: var(--color-text-secondary);
}
.session-duration {
color: var(--color-accent);
font-weight: 600;
}
/* Footer */
footer {
padding: 2rem 0;
border-top: 1px solid var(--color-border);
margin-top: 4rem;
text-align: center;
color: var(--color-text-secondary);
}
.footer-content {
display: flex;
justify-content: center;
align-items: center;
gap: 2rem;
}
.toggle-container {
display: flex;
align-items: center;
gap: 0.75rem;
}
.toggle-switch {
width: 50px;
height: 28px;
background-color: var(--color-border);
border-radius: 14px;
cursor: pointer;
position: relative;
transition: background-color var(--transition);
}
.toggle-switch.active {
background-color: var(--color-secondary);
}
.toggle-knob {
width: 24px;
height: 24px;
background-color: white;
border-radius: 50%;
position: absolute;
top: 2px;
left: 2px;
transition: left var(--transition);
}
.toggle-switch.active .toggle-knob {
left: 24px;
}
.moon-icon {
font-size: 1.2rem;
}
</style>
</head>
<body>
<!-- Hero Header -->
<section class="hero">
<div class="hero-blob"></div>
<div class="hero-content">
<h1>Serene Flow</h1>
<p>A warm, calming design system for health and wellness apps</p>
</div>
</section>
<div class="container">
<!-- Color Palette Section -->
<section class="section">
<h2>Color Palette</h2>
<div class="palette-grid">
<div class="swatch">
<div class="swatch-color" style="background-color: #8B7355;"></div>
<div class="swatch-info">
<div class="swatch-name">Primary</div>
<div class="swatch-hex">#8B7355</div>
</div>
</div>
<div class="swatch">
<div class="swatch-color" style="background-color: #A8C686;"></div>
<div class="swatch-info">
<div class="swatch-name">Secondary</div>
<div class="swatch-hex">#A8C686</div>
</div>
</div>
<div class="swatch">
<div class="swatch-color" style="background-color: #F5A962;"></div>
<div class="swatch-info">
<div class="swatch-name">Accent</div>
<div class="swatch-hex">#F5A962</div>
</div>
</div>
<div class="swatch">
<div class="swatch-color" style="background-color: #FDF8F4;"></div>
<div class="swatch-info">
<div class="swatch-name">Background</div>
<div class="swatch-hex">#FDF8F4</div>
</div>
</div>
<div class="swatch">
<div class="swatch-color" style="background-color: #FFFFFF;"></div>
<div class="swatch-info">
<div class="swatch-name">Surface</div>
<div class="swatch-hex">#FFFFFF</div>
</div>
</div>
<div class="swatch">
<div class="swatch-color" style="background-color: #FFFAF5;"></div>
<div class="swatch-info">
<div class="swatch-name">Surface Elevated</div>
<div class="swatch-hex">#FFFAF5</div>
</div>
</div>
<div class="swatch">
<div class="swatch-color" style="background-color: #E8DDD0;"></div>
<div class="swatch-info">
<div class="swatch-name">Border</div>
<div class="swatch-hex">#E8DDD0</div>
</div>
</div>
<div class="swatch">
<div class="swatch-color" style="background-color: #3D3228;"></div>
<div class="swatch-info">
<div class="swatch-name">Text Primary</div>
<div class="swatch-hex">#3D3228</div>
</div>
</div>
<div class="swatch">
<div class="swatch-color" style="background-color: #8C7E72;"></div>
<div class="swatch-info">
<div class="swatch-name">Text Secondary</div>
<div class="swatch-hex">#8C7E72</div>
</div>
</div>
<div class="swatch">
<div class="swatch-color" style="background-color: #7CB87C;"></div>
<div class="swatch-info">
<div class="swatch-name">Success</div>
<div class="swatch-hex">#7CB87C</div>
</div>
</div>
<div class="swatch">
<div class="swatch-color" style="background-color: #E8B84B;"></div>
<div class="swatch-info">
<div class="swatch-name">Warning</div>
<div class="swatch-hex">#E8B84B</div>
</div>
</div>
<div class="swatch">
<div class="swatch-color" style="background-color: #D45B5B;"></div>
<div class="swatch-info">
<div class="swatch-name">Error</div>
<div class="swatch-hex">#D45B5B</div>
</div>
</div>
</div>
</section>
<!-- Typography Section -->
<section class="section">
<h2>Typography</h2>
<div class="typography-grid">
<div class="type-sample">
<div class="type-label">Display Large – Libre Baskerville</div>
<div class="type-serif type-h1">Find your inner peace</div>
<p class="type-caption">Used for page titles and hero sections</p>
</div>
<div class="type-sample">
<div class="type-label">Display Medium – Libre Baskerville</div>
<div class="type-serif type-h2">Breathe and relax</div>
<p class="type-caption">Used for section headers</p>
</div>
<div class="type-sample">
<div class="type-label">Heading – Libre Baskerville</div>
<div class="type-serif type-h3">Your meditation journey</div>
<p class="type-caption">Used for card titles and subsections</p>
</div>
<div class="type-sample">
<div class="type-label">Body – DM Sans</div>
<p class="type-body">Meditation is a practice of mindfulness and presence. It helps calm your mind, reduce stress, and cultivate inner peace. Regular practice can improve your overall wellbeing.</p>
<p class="type-caption">Standard body text for content</p>
</div>
</div>
</section>
<!-- Components Section -->
<section class="section">
<h2>Components</h2>
<!-- Buttons -->
<div class="component-card">
<div class="component-title">Buttons</div>
<div class="button-group">
<button class="btn btn-primary">Start Meditation</button>
<button class="btn btn-secondary">Learn More</button>
<button class="btn btn-soft">Explore Sessions</button>
</div>
</div>
<!-- Meditation Card -->
<div style="margin-top: 2rem;">
<div class="meditation-card" style="max-width: 400px;">
<div class="meditation-image"></div>
<div class="meditation-body">
<div class="meditation-title">Morning Calm</div>
<div class="meditation-meta">
<span class="meditation-duration">10 min</span>
<span class="meditation-tag">Breathing</span>
</div>
<p style="font-size: 0.9rem; color: var(--color-text-secondary); margin-bottom: 1rem;">Start your day with peaceful breathing exercises</p>
<button class="btn btn-primary" style="width: 100%;">Begin Session</button>
</div>
</div>
</div>
<!-- Daily Check-in Card -->
<div class="component-card" style="margin-top: 2rem; max-width: 400px;">
<div class="component-title">Daily Check-in</div>
<p style="color: var(--color-text-secondary); margin-bottom: 1.5rem;">How are you feeling today?</p>
<div class="mood-selector">
<div class="mood-circle" onclick="this.classList.toggle('active')" style="font-size: 1.8rem;">😔</div>
<div class="mood-circle" onclick="this.classList.toggle('active')" style="font-size: 1.8rem;">😐</div>
<div class="mood-circle active" onclick="this.classList.toggle('active')" style="font-size: 1.8rem;">😊</div>
<div class="mood-circle" onclick="this.classList.toggle('active')" style="font-size: 1.8rem;">😄</div>
<div class="mood-circle" onclick="this.classList.toggle('active')" style="font-size: 1.8rem;">🤩</div>
</div>
<button class="btn btn-primary" style="width: 100%;">Save Check-in</button>
</div>
<!-- Input Field -->
<div class="component-card" style="margin-top: 2rem; max-width: 400px;">
<div class="component-title">Input Field</div>
<input type="text" placeholder="Enter your thoughts or goals...">
</div>
<!-- Progress Bar -->
<div class="component-card" style="margin-top: 2rem; max-width: 400px;">
<div class="component-title">Progress Tracking</div>
<div class="progress-section">
<div class="progress-label">
<span>Day 12 of 30</span>
<span>40%</span>
</div>
<div class="progress-bar">
<div class="progress-fill"></div>
</div>
</div>
</div>
</section>
<!-- Mini App Demo -->
<section class="section">
<h2>Mini App Demo</h2>
<div class="app-mockup">
<div class="app-greeting">
<h3>Good morning, Felix</h3>
<p id="current-date">Thursday, March 20, 2025</p>
</div>
<div class="app-section">
<div class="app-section-label">Today's Recommendation</div>
<div class="meditation-card">
<div class="meditation-image"></div>
<div class="meditation-body">
<div class="meditation-title">Evening Wind Down</div>
<div class="meditation-meta">
<span class="meditation-duration">15 min</span>
<span class="meditation-tag">Relaxation</span>
</div>
<p style="font-size: 0.9rem; color: var(--color-text-secondary); margin-bottom: 1rem;">Perfect for ending your day peacefully</p>
<button class="btn btn-primary" style="width: 100%;">Start Now</button>
</div>
</div>
</div>
<div class="stats-row">
<div class="stat-box">
<div class="stat-number">12</div>
<div class="stat-label">Day Streak</div>
</div>
<div class="stat-box">
<div class="stat-number">45</div>
<div class="stat-label">Min This Week</div>
</div>
<div class="stat-box">
<div class="stat-number">3</div>
<div class="stat-label">Sessions</div>
</div>
</div>
<div class="app-section">
<div class="app-section-label">Recent Sessions</div>
<div class="session-item">
<div class="session-avatar"></div>
<div class="session-info">
<div class="session-title">Morning Calm</div>
<div class="session-meta">Today at 7:30 AM</div>
</div>
<div class="session-duration">10 min</div>
</div>
<div class="session-item">
<div class="session-avatar"></div>
<div class="session-info">
<div class="session-title">Body Scan Meditation</div>
<div class="session-meta">Yesterday at 9:15 PM</div>
</div>
<div class="session-duration">12 min</div>
</div>
<div class="session-item">
<div class="session-avatar"></div>
<div class="session-info">
<div class="session-title">Mindful Breathing</div>
<div class="session-meta">2 days ago at 8:00 PM</div>
</div>
<div class="session-duration">5 min</div>
</div>
</div>
</div>
</section>
</div>
<!-- Footer -->
<footer>
<div class="footer-content">
<div>Generated by Design System Builder Skill</div>
<div class="toggle-container">
<span class="moon-icon">🌙</span>
<div class="toggle-switch" id="dark-toggle" onclick="toggleDarkMode(this)">
<div class="toggle-knob"></div>
</div>
</div>
</div>
</footer>
<script>
// Set current date
document.getElementById('current-date').textContent = new Date().toLocaleDateString('en-US', {
weekday: 'long',
year: 'numeric',
month: 'long',
day: 'numeric'
});
// Dark mode toggle
function toggleDarkMode(element) {
document.body.classList.toggle('dark-mode');
element.classList.toggle('active');
localStorage.setItem('dark-mode', document.body.classList.contains('dark-mode'));
}
// Check for saved dark mode preference
if (localStorage.getItem('dark-mode') === 'true') {
document.body.classList.add('dark-mode');
document.getElementById('dark-toggle').classList.add('active');
}
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SNEAKER HYPE - Design System Preview</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=Clash+Display:wght@400;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;600;700&display=swap" rel="stylesheet">
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html, body {
width: 100%;
height: 100%;
background: #0A0E27;
color: #FFFFFF;
font-family: 'Inter', sans-serif;
overflow-x: hidden;
}
/* ANIMATIONS */
@keyframes neon-pulse {
0%, 100% {
box-shadow: 0 0 20px rgba(255, 23, 68, 0.5), 0 0 40px rgba(255, 23, 68, 0.3);
}
50% {
box-shadow: 0 0 30px rgba(0, 217, 255, 0.6), 0 0 60px rgba(0, 217, 255, 0.4);
}
}
@keyframes gradient-shift {
0%, 100% {
background-position: 0% 50%;
}
50% {
background-position: 100% 50%;
}
}
@keyframes glow-in {
from {
box-shadow: 0 0 0 rgba(255, 23, 68, 0), 0 0 0 rgba(0, 217, 255, 0);
}
to {
box-shadow: 0 0 30px rgba(255, 23, 68, 0.6), 0 0 50px rgba(0, 217, 255, 0.4);
}
}
@keyframes slide-in {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/* CONTAINER */
.container {
max-width: 1400px;
margin: 0 auto;
padding: 0 2rem;
}
/* HERO SECTION */
.hero {
padding: 120px 2rem 80px;
text-align: center;
position: relative;
overflow: hidden;
}
.hero::before {
content: '';
position: absolute;
top: -50%;
left: -50%;
width: 200%;
height: 200%;
background: radial-gradient(circle, rgba(255, 23, 68, 0.1) 0%, transparent 70%);
animation: neon-pulse 4s ease-in-out infinite;
pointer-events: none;
}
.hero-content {
position: relative;
z-index: 1;
animation: slide-in 0.8s ease-out;
}
.hero h1 {
font-family: 'Clash Display', sans-serif;
font-size: 5rem;
font-weight: 700;
letter-spacing: -2px;
margin-bottom: 1rem;
background: linear-gradient(135deg, #FF1744, #00D9FF, #FFFF00);
background-size: 300% 300%;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
animation: gradient-shift 6s ease infinite;
text-transform: uppercase;
line-height: 1;
}
.hero p {
font-size: 1.5rem;
color: #B0B3C1;
margin-bottom: 2rem;
font-weight: 500;
}
/* SECTION HEADERS */
.section {
padding: 80px 0;
border-top: 1px solid #3A4158;
}
.section-title {
font-family: 'Clash Display', sans-serif;
font-size: 2.5rem;
font-weight: 700;
margin-bottom: 3rem;
text-transform: uppercase;
letter-spacing: -1px;
color: #FFFFFF;
}
/* COLOR PALETTE */
.palette-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 2rem;
margin-bottom: 3rem;
}
.color-swatch {
border-radius: 8px;
padding: 2rem;
cursor: pointer;
transition: all 0.15s cubic-bezier(0.34, 1.56, 0.64, 1);
border: 1px solid rgba(255, 23, 68, 0.2);
}
.color-swatch:hover {
transform: translateY(-8px);
}
.color-sample {
width: 100%;
height: 120px;
border-radius: 8px;
margin-bottom: 1rem;
border: 1px solid rgba(255, 255, 255, 0.1);
transition: all 0.15s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.color-swatch:hover .color-sample {
box-shadow: 0 0 30px currentColor;
filter: brightness(1.2);
}
.color-name {
font-family: 'JetBrains Mono', monospace;
font-size: 0.85rem;
font-weight: 600;
margin-bottom: 0.5rem;
}
.color-hex {
font-family: 'JetBrains Mono', monospace;
font-size: 0.75rem;
color: #B0B3C1;
font-weight: 400;
}
/* TYPOGRAPHY SECTION */
.typography-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 3rem;
margin-bottom: 2rem;
}
.typography-item {
padding: 2rem;
background: #1A1F3A;
border-radius: 8px;
border: 1px solid #3A4158;
}
.typography-item h3 {
font-family: 'Clash Display', sans-serif;
font-size: 1.5rem;
margin-bottom: 1rem;
color: #FF1744;
text-transform: uppercase;
}
.clash-display-demo {
font-family: 'Clash Display', sans-serif;
font-size: 3rem;
font-weight: 700;
letter-spacing: -1px;
line-height: 1.1;
margin-bottom: 1.5rem;
text-transform: uppercase;
}
.inter-demo {
font-family: 'Inter', sans-serif;
font-size: 1rem;
line-height: 1.6;
color: #B0B3C1;
margin-bottom: 1rem;
}
.mono-demo {
font-family: 'JetBrains Mono', monospace;
font-size: 2rem;
font-weight: 700;
color: #00D9FF;
margin-bottom: 0.5rem;
letter-spacing: 1px;
}
/* BUTTONS */
.button {
font-family: 'Inter', sans-serif;
font-weight: 600;
padding: 0.875rem 1.75rem;
border: none;
border-radius: 8px;
cursor: pointer;
text-transform: uppercase;
font-size: 0.85rem;
letter-spacing: 1px;
transition: all 0.15s cubic-bezier(0.34, 1.56, 0.64, 1);
position: relative;
overflow: hidden;
}
.button-primary {
background: #FF1744;
color: #0A0E27;
box-shadow: 0 0 20px rgba(255, 23, 68, 0.4);
}
.button-primary:hover {
box-shadow: 0 0 40px rgba(255, 23, 68, 0.8);
transform: translateY(-2px);
}
.button-primary:active {
transform: translateY(0);
}
.button-secondary {
background: transparent;
color: #00D9FF;
border: 2px solid #00D9FF;
box-shadow: inset 0 0 20px rgba(0, 217, 255, 0);
}
.button-secondary:hover {
box-shadow: inset 0 0 20px rgba(0, 217, 255, 0.3), 0 0 30px rgba(0, 217, 255, 0.6);
background: rgba(0, 217, 255, 0.1);
}
.button-disabled {
background: #3A4158;
color: #8A8D9B;
cursor: not-allowed;
text-decoration: line-through;
opacity: 0.6;
}
.button-disabled:hover {
box-shadow: none;
transform: none;
}
/* COMPONENTS SECTION */
.components-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 2rem;
margin-bottom: 3rem;
}
.component-card {
background: #1A1F3A;
border: 1px solid #3A4158;
border-radius: 8px;
padding: 2rem;
transition: all 0.15s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.component-card:hover {
border-color: #FF1744;
box-shadow: 0 0 30px rgba(255, 23, 68, 0.3);
}
.component-card h4 {
font-family: 'Clash Display', sans-serif;
font-size: 1.2rem;
margin-bottom: 1.5rem;
text-transform: uppercase;
color: #00D9FF;
}
/* SNEAKER CARD */
.sneaker-card {
background: #252D4A;
border: 1px solid #3A4158;
border-radius: 12px;
overflow: hidden;
transition: all 0.15s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.sneaker-card:hover {
transform: translateY(-8px);
border-color: #FF1744;
box-shadow: 0 20px 60px rgba(255, 23, 68, 0.2);
}
.sneaker-image {
width: 100%;
height: 200px;
background: linear-gradient(135deg, rgba(255, 23, 68, 0.2), rgba(0, 217, 255, 0.2));
display: flex;
align-items: center;
justify-content: center;
font-size: 3rem;
color: rgba(255, 255, 255, 0.3);
}
.sneaker-info {
padding: 1.5rem;
}
.sneaker-name {
font-family: 'Clash Display', sans-serif;
font-size: 1.3rem;
font-weight: 700;
text-transform: uppercase;
margin-bottom: 0.5rem;
color: #FFFFFF;
}
.sneaker-price {
font-family: 'JetBrains Mono', monospace;
font-size: 1.5rem;
font-weight: 700;
color: #FF1744;
margin-bottom: 0.75rem;
letter-spacing: 1px;
}
.sneaker-countdown {
font-family: 'JetBrains Mono', monospace;
font-size: 0.85rem;
color: #00D9FF;
margin-bottom: 1rem;
font-weight: 600;
}
.sneaker-button {
width: 100%;
background: #FF1744;
color: #0A0E27;
border: none;
padding: 0.75rem;
border-radius: 6px;
font-family: 'Inter', sans-serif;
font-weight: 600;
text-transform: uppercase;
cursor: pointer;
transition: all 0.15s cubic-bezier(0.34, 1.56, 0.64, 1);
font-size: 0.8rem;
letter-spacing: 1px;
}
.sneaker-button:hover {
box-shadow: 0 0 30px rgba(255, 23, 68, 0.7);
transform: translateY(-2px);
}
/* BADGES */
.badge {
display: inline-block;
padding: 0.5rem 1rem;
border-radius: 4px;
font-size: 0.7rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 1px;
margin-right: 0.5rem;
margin-bottom: 0.5rem;
}
.badge-new {
background: #FF1744;
color: #0A0E27;
}
.badge-trending {
background: #00D9FF;
color: #0A0E27;
}
.badge-soldout {
background: #3A4158;
color: #B0B3C1;
text-decoration: line-through;
}
/* HYPE METER */
.hype-meter-container {
margin: 2rem 0;
}
.hype-meter-label {
display: flex;
justify-content: space-between;
margin-bottom: 0.75rem;
font-family: 'Inter', sans-serif;
font-size: 0.85rem;
color: #B0B3C1;
}
.hype-meter-bar {
width: 100%;
height: 12px;
background: #252D4A;
border-radius: 6px;
overflow: hidden;
border: 1px solid #3A4158;
}
.hype-meter-fill {
height: 100%;
background: linear-gradient(90deg, #FF1744, #FFFF00, #00D9FF);
background-size: 200% 100%;
border-radius: 6px;
animation: gradient-shift 3s ease infinite;
transition: width 0.3s ease;
}
/* INPUT */
.input-group {
margin: 2rem 0;
}
.input-group label {
display: block;
margin-bottom: 0.75rem;
font-size: 0.9rem;
color: #B0B3C1;
text-transform: uppercase;
letter-spacing: 1px;
}
.input {
width: 100%;
padding: 0.875rem 1.25rem;
background: #1A1F3A;
border: 2px solid #3A4158;
border-radius: 8px;
color: #FFFFFF;
font-family: 'Inter', sans-serif;
font-size: 1rem;
transition: all 0.15s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.input:focus {
outline: none;
border-color: #00D9FF;
box-shadow: 0 0 30px rgba(0, 217, 255, 0.4), inset 0 0 20px rgba(0, 217, 255, 0.1);
background: rgba(0, 217, 255, 0.05);
}
/* APP DEMO */
.app-demo {
background: #1A1F3A;
border: 1px solid #3A4158;
border-radius: 12px;
overflow: hidden;
margin-bottom: 3rem;
}
.app-header {
background: #252D4A;
padding: 1.5rem 2rem;
border-bottom: 1px solid #3A4158;
display: flex;
justify-content: space-between;
align-items: center;
}
.app-header h4 {
font-family: 'Clash Display', sans-serif;
font-size: 1.5rem;
text-transform: uppercase;
color: #FFFFFF;
}
.app-header-icon {
font-size: 1.5rem;
cursor: pointer;
transition: all 0.15s;
}
.app-header-icon:hover {
color: #FF1744;
transform: scale(1.1);
}
.app-hero {
padding: 2rem;
background: linear-gradient(135deg, rgba(255, 23, 68, 0.1), rgba(0, 217, 255, 0.1));
border-bottom: 1px solid #3A4158;
}
.app-hero-image {
width: 100%;
height: 250px;
background: linear-gradient(135deg, rgba(255, 23, 68, 0.2), rgba(0, 217, 255, 0.2));
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
font-size: 5rem;
color: rgba(255, 255, 255, 0.2);
margin-bottom: 1.5rem;
}
.app-hero-info {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1rem;
margin-bottom: 1rem;
}
.app-hero-name {
font-family: 'Clash Display', sans-serif;
font-size: 2rem;
font-weight: 700;
text-transform: uppercase;
grid-column: 1 / -1;
color: #FFFFFF;
}
.app-hero-stat {
font-family: 'JetBrains Mono', monospace;
font-size: 1.25rem;
font-weight: 700;
color: #FF1744;
}
.app-hero-label {
font-size: 0.75rem;
color: #B0B3C1;
text-transform: uppercase;
}
.app-hero-timer {
font-family: 'JetBrains Mono', monospace;
font-size: 1.1rem;
color: #00D9FF;
font-weight: 600;
margin-top: 1rem;
grid-column: 1 / -1;
}
.app-section {
padding: 2rem;
border-bottom: 1px solid #3A4158;
}
.app-section:last-child {
border-bottom: none;
}
.app-section h5 {
font-family: 'Clash Display', sans-serif;
font-size: 1.1rem;
text-transform: uppercase;
margin-bottom: 1.5rem;
color: #00D9FF;
}
.sneaker-scroll {
display: flex;
gap: 1rem;
overflow-x: auto;
padding-bottom: 0.5rem;
scroll-behavior: smooth;
}
.sneaker-scroll::-webkit-scrollbar {
height: 6px;
}
.sneaker-scroll::-webkit-scrollbar-track {
background: #252D4A;
border-radius: 3px;
}
.sneaker-scroll::-webkit-scrollbar-thumb {
background: #FF1744;
border-radius: 3px;
}
.sneaker-scroll-item {
flex: 0 0 calc(33.333% - 1rem);
min-width: 200px;
}
.sneaker-mini {
background: #252D4A;
border: 1px solid #3A4158;
border-radius: 8px;
overflow: hidden;
transition: all 0.15s cubic-bezier(0.34, 1.56, 0.64, 1);
height: 100%;
}
.sneaker-mini:hover {
border-color: #FF1744;
box-shadow: 0 10px 30px rgba(255, 23, 68, 0.2);
}
.sneaker-mini-image {
width: 100%;
height: 120px;
background: linear-gradient(135deg, rgba(255, 23, 68, 0.15), rgba(0, 217, 255, 0.15));
display: flex;
align-items: center;
justify-content: center;
font-size: 2rem;
}
.sneaker-mini-content {
padding: 1rem;
}
.sneaker-mini-name {
font-family: 'Clash Display', sans-serif;
font-size: 0.9rem;
font-weight: 700;
text-transform: uppercase;
margin-bottom: 0.5rem;
color: #FFFFFF;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.sneaker-mini-price {
font-family: 'JetBrains Mono', monospace;
font-size: 0.85rem;
color: #FF1744;
font-weight: 600;
}
/* FOOTER */
.footer {
padding: 3rem 0;
text-align: center;
border-top: 1px solid #3A4158;
color: #B0B3C1;
}
.footer-text {
font-size: 0.95rem;
margin-bottom: 0.5rem;
}
.footer-link {
color: #00D9FF;
text-decoration: none;
position: relative;
transition: all 0.15s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.footer-link::after {
content: '';
position: absolute;
bottom: -2px;
left: 0;
width: 0;
height: 2px;
background: linear-gradient(90deg, #FF1744, #00D9FF);
transition: width 0.15s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.footer-link:hover::after {
width: 100%;
box-shadow: 0 0 10px rgba(0, 217, 255, 0.6);
}
/* RESPONSIVE */
@media (max-width: 768px) {
.hero h1 {
font-size: 3rem;
}
.hero p {
font-size: 1.1rem;
}
.section-title {
font-size: 1.8rem;
}
.palette-grid {
grid-template-columns: repeat(2, 1fr);
}
.typography-grid {
grid-template-columns: 1fr;
}
.components-grid {
grid-template-columns: 1fr;
}
.app-hero-info {
grid-template-columns: 1fr;
}
.app-hero-name {
font-size: 1.5rem;
}
.sneaker-scroll-item {
flex: 0 0 calc(50% - 0.5rem);
}
}
/* SCROLLBAR STYLING */
::-webkit-scrollbar {
width: 10px;
}
::-webkit-scrollbar-track {
background: #0A0E27;
}
::-webkit-scrollbar-thumb {
background: #FF1744;
border-radius: 5px;
}
::-webkit-scrollbar-thumb:hover {
background: #00D9FF;
box-shadow: 0 0 10px rgba(0, 217, 255, 0.5);
}
</style>
</head>
<body>
<!-- HERO SECTION -->
<section class="hero">
<div class="hero-content">
<h1>SNEAKER HYPE</h1>
<p>A bold design system for Gen-Z e-commerce</p>
</div>
</section>
<div class="container">
<!-- COLOR PALETTE SECTION -->
<section class="section">
<h2 class="section-title">Color Palette</h2>
<div class="palette-grid">
<div class="color-swatch">
<div class="color-sample" style="background: #FF1744;"></div>
<div class="color-name">Primary Pink</div>
<div class="color-hex">#FF1744</div>
</div>
<div class="color-swatch">
<div class="color-sample" style="background: #00D9FF;"></div>
<div class="color-name">Secondary Cyan</div>
<div class="color-hex">#00D9FF</div>
</div>
<div class="color-swatch">
<div class="color-sample" style="background: #FFFF00;"></div>
<div class="color-name">Accent Yellow</div>
<div class="color-hex">#FFFF00</div>
</div>
<div class="color-swatch">
<div class="color-sample" style="background: #0A0E27;"></div>
<div class="color-name">Background</div>
<div class="color-hex">#0A0E27</div>
</div>
<div class="color-swatch">
<div class="color-sample" style="background: #1A1F3A;"></div>
<div class="color-name">Surface</div>
<div class="color-hex">#1A1F3A</div>
</div>
<div class="color-swatch">
<div class="color-sample" style="background: #252D4A;"></div>
<div class="color-name">Surface Elevated</div>
<div class="color-hex">#252D4A</div>
</div>
<div class="color-swatch">
<div class="color-sample" style="background: #3A4158;"></div>
<div class="color-name">Border</div>
<div class="color-hex">#3A4158</div>
</div>
<div class="color-swatch">
<div class="color-sample" style="background: #FFFFFF;"></div>
<div class="color-name">Text Primary</div>
<div class="color-hex">#FFFFFF</div>
</div>
<div class="color-swatch">
<div class="color-sample" style="background: #B0B3C1;"></div>
<div class="color-name">Text Secondary</div>
<div class="color-hex">#B0B3C1</div>
</div>
<div class="color-swatch">
<div class="color-sample" style="background: #00E676;"></div>
<div class="color-name">Success</div>
<div class="color-hex">#00E676</div>
</div>
<div class="color-swatch">
<div class="color-sample" style="background: #FFA500;"></div>
<div class="color-name">Warning</div>
<div class="color-hex">#FFA500</div>
</div>
<div class="color-swatch">
<div class="color-sample" style="background: #FF1744;"></div>
<div class="color-name">Error</div>
<div class="color-hex">#FF1744</div>
</div>
</div>
</section>
<!-- TYPOGRAPHY SECTION -->
<section class="section">
<h2 class="section-title">Typography Scale</h2>
<div class="typography-grid">
<div class="typography-item">
<h3>Clash Display</h3>
<div class="clash-display-demo">Limited<br>Drop</div>
<p class="inter-demo">Bold, geometric typeface for headlines and call-to-action text. Perfect for commanding attention on product pages and marketing materials.</p>
</div>
<div class="typography-item">
<h3>Inter + JetBrains Mono</h3>
<p class="inter-demo">Clean, modern sans-serif for body text and descriptions. Ensures excellent readability across all screen sizes.</p>
<div class="mono-demo">$189.99</div>
<p class="inter-demo" style="font-size: 0.8rem; color: #8A8D9B;">Monospace font for prices, timers, and technical data. Gives precision and energy to numerical information.</p>
</div>
</div>
</section>
<!-- COMPONENTS SECTION -->
<section class="section">
<h2 class="section-title">Components</h2>
<!-- BUTTONS -->
<div class="component-card" style="grid-column: 1;">
<h4>Buttons</h4>
<div style="display: flex; gap: 1rem; flex-wrap: wrap;">
<button class="button button-primary">Shop Now</button>
<button class="button button-secondary">Learn More</button>
<button class="button button-disabled">Sold Out</button>
</div>
</div>
<div class="components-grid">
<!-- BADGES -->
<div class="component-card">
<h4>Badges</h4>
<div>
<span class="badge badge-new">New Drop</span>
<span class="badge badge-trending">Trending</span>
<span class="badge badge-soldout">Sold Out</span>
</div>
</div>
<!-- HYPE METER -->
<div class="component-card">
<h4>Hype Meter</h4>
<div class="hype-meter-container">
<div class="hype-meter-label">
<span>Demand Level</span>
<span style="color: #FF1744; font-weight: 600;">🔥 EXTREME</span>
</div>
<div class="hype-meter-bar">
<div class="hype-meter-fill" style="width: 95%;"></div>
</div>
</div>
<div class="hype-meter-container">
<div class="hype-meter-label">
<span>Sold Out in</span>
<span style="color: #00D9FF; font-weight: 600;">3.2 seconds</span>
</div>
<div class="hype-meter-bar">
<div class="hype-meter-fill" style="width: 45%;"></div>
</div>
</div>
</div>
<!-- SNEAKER CARD -->
<div class="component-card" style="grid-column: 1;">
<h4>Sneaker Card</h4>
<div class="sneaker-card">
<div class="sneaker-image">👟</div>
<div class="sneaker-info">
<div class="sneaker-name">Air Max Pulse</div>
<div class="sneaker-price">$189</div>
<div class="sneaker-countdown">🕐 RELEASING IN 2:34:15</div>
<button class="sneaker-button">Notify Me</button>
</div>
</div>
</div>
<!-- INPUT FIELD -->
<div class="component-card" style="grid-column: 1;">
<h4>Input Field</h4>
<div class="input-group">
<label>Search Drops</label>
<input type="text" class="input" placeholder="Jordan, Nike, Adidas..." />
</div>
</div>
</div>
</section>
<!-- APP DEMO -->
<section class="section">
<h2 class="section-title">App Demo</h2>
<div class="app-demo">
<div class="app-header">
<h4>🔥 Drops</h4>
<div class="app-header-icon">🔍</div>
</div>
<!-- Featured Hero -->
<div class="app-hero">
<div class="app-hero-image">👟</div>
<div class="app-hero-name">Jordan 1 Retro</div>
<div class="app-hero-info">
<div>
<div class="app-hero-stat">$179</div>
<div class="app-hero-label">Price</div>
</div>
<div>
<div class="app-hero-stat">1M+</div>
<div class="app-hero-label">Waiting</div>
</div>
</div>
<div class="app-hero-timer">⏱️ DROP IN 4:27:52</div>
</div>
<!-- Upcoming Releases -->
<div class="app-section">
<h5>Upcoming Releases</h5>
<div class="sneaker-scroll">
<div class="sneaker-scroll-item">
<div class="sneaker-mini">
<div class="sneaker-mini-image">👟</div>
<div class="sneaker-mini-content">
<div class="sneaker-mini-name">Dunk Low</div>
<div class="sneaker-mini-price">$125</div>
</div>
</div>
</div>
<div class="sneaker-scroll-item">
<div class="sneaker-mini">
<div class="sneaker-mini-image">🏃</div>
<div class="sneaker-mini-content">
<div class="sneaker-mini-name">Air Zoom GT</div>
<div class="sneaker-mini-price">$140</div>
</div>
</div>
</div>
<div class="sneaker-scroll-item">
<div class="sneaker-mini">
<div class="sneaker-mini-image">⚡</div>
<div class="sneaker-mini-content">
<div class="sneaker-mini-name">Blazer OG</div>
<div class="sneaker-mini-price">$110</div>
</div>
</div>
</div>
</div>
</div>
<!-- Watchlist -->
<div class="app-section">
<h5>Your Watchlist</h5>
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 1rem;">
<div class="sneaker-mini">
<div class="sneaker-mini-image">🌟</div>
<div class="sneaker-mini-content">
<div class="sneaker-mini-name">Yeezy 350</div>
<div class="sneaker-mini-price">$220</div>
</div>
</div>
<div class="sneaker-mini">
<div class="sneaker-mini-image">💎</div>
<div class="sneaker-mini-content">
<div class="sneaker-mini-name">Travis Scott</div>
<div class="sneaker-mini-price">$165</div>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- FOOTER -->
<footer class="footer">
<div class="footer-text">Generated by <a href="#" class="footer-link">Design System Builder</a> Skill</div>
<div class="footer-text">SNEAKER HYPE © 2026</div>
</footer>
</div>
<script>
// TIMER FUNCTIONALITY
function updateTimers() {
const timerElements = document.querySelectorAll('[data-timer]');
// Update any timer displays if needed
// For demo purposes, we're using static countdown text
}
// INTERACTIVE FEATURES
document.addEventListener('DOMContentLoaded', function() {
// Color swatch click feedback
document.querySelectorAll('.color-swatch').forEach(swatch => {
swatch.addEventListener('click', function() {
const hex = this.querySelector('.color-hex').textContent;
// Copy to clipboard
navigator.clipboard.writeText(hex);
// Visual feedback
const originalText = this.querySelector('.color-hex').textContent;
this.querySelector('.color-hex').textContent = 'Copied!';
setTimeout(() => {
this.querySelector('.color-hex').textContent = originalText;
}, 1500);
});
});
// Button interaction logging
document.querySelectorAll('.button').forEach(button => {
button.addEventListener('click', function(e) {
if (!this.classList.contains('button-disabled')) {
console.log('Button clicked:', this.textContent);
}
});
});
// Sneaker card interaction
document.querySelectorAll('.sneaker-button').forEach(btn => {
btn.addEventListener('click', function() {
const original = this.textContent;
this.textContent = '✓ Notified!';
this.style.background = '#00E676';
setTimeout(() => {
this.textContent = original;
this.style.background = '#FF1744';
}, 2000);
});
});
// Input focus animation
document.querySelectorAll('.input').forEach(input => {
input.addEventListener('focus', function() {
this.parentElement.style.transform = 'scale(1.02)';
});
input.addEventListener('blur', function() {
this.parentElement.style.transform = 'scale(1)';
});
});
// Header icon interaction
document.querySelectorAll('.app-header-icon').forEach(icon => {
icon.addEventListener('click', function() {
console.log('Search activated');
});
});
});
// Scroll-triggered animations
const observerOptions = {
threshold: 0.1,
rootMargin: '0px 0px -50px 0px'
};
const observer = new IntersectionObserver(function(entries) {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.style.animation = 'slide-in 0.6s ease-out forwards';
observer.unobserve(entry.target);
}
});
}, observerOptions);
document.querySelectorAll('.component-card, .sneaker-card, .app-demo').forEach(el => {
observer.observe(el);
});
</script>
</body>
</html>