mirror of
https://github.com/VoltAgent/awesome-design-md.git
synced 2026-05-14 13:06:57 +08:00
update DESIGN.md to v2
This commit is contained in:
parent
da068674db
commit
beec066d6a
@ -16,7 +16,7 @@
|
||||
<div align="center">
|
||||
|
||||
[](https://awesome.re)
|
||||

|
||||

|
||||
[](https://github.com/VoltAgent/awesome-design-md)
|
||||
[](https://s.voltagent.dev/discord)
|
||||
|
||||
@ -61,7 +61,7 @@ Become a Sponsor [1M+ view] — your logo here and get listed on [getdesign.md](
|
||||
- [**Ollama**](https://getdesign.md/ollama/design-md) - Run LLMs locally. Terminal-first, monochrome simplicity
|
||||
- [**OpenCode AI**](https://getdesign.md/opencode.ai/design-md) - AI coding platform. Developer-centric dark theme
|
||||
- [**Replicate**](https://getdesign.md/replicate/design-md) - Run ML models via API. Clean white canvas, code-forward
|
||||
- [**RunwayML**](https://getdesign.md/runwayml/design-md) - AI video generation. Cinematic dark UI, media-rich layout
|
||||
- [**Runway**](https://getdesign.md/runwayml/design-md) - AI creative-tools platform with an editorial film-festival aesthetic — cinematic dark heroes, paper-white reading bands, single proprietary sans, and pure black pill CTAs.
|
||||
- [**Together AI**](https://getdesign.md/together.ai/design-md) - Open-source AI infrastructure. Technical, blueprint-style design
|
||||
- [**VoltAgent**](https://getdesign.md/voltagent/design-md) - AI agent framework. Void-black canvas, emerald accent, terminal-native
|
||||
- [**xAI**](https://getdesign.md/x.ai/design-md) - Elon Musk's AI lab. Stark monochrome, futuristic minimalism
|
||||
@ -83,7 +83,7 @@ Become a Sponsor [1M+ view] — your logo here and get listed on [getdesign.md](
|
||||
- [**HashiCorp**](https://getdesign.md/hashicorp/design-md) - Infrastructure automation. Enterprise-clean, black and white
|
||||
- [**MongoDB**](https://getdesign.md/mongodb/design-md) - Document database. Green leaf branding, developer documentation focus
|
||||
- [**PostHog**](https://getdesign.md/posthog/design-md) - Product analytics. Playful hedgehog branding, developer-friendly dark UI
|
||||
- [**Sanity**](https://getdesign.md/sanity/design-md) - Headless CMS. Red accent, content-first editorial layout
|
||||
- [**Sanity**](https://getdesign.md/sanity/design-md) - Headless content platform with a dark-first editorial marketing surface — 112px display type, IBM Plex Mono technical eyebrows, and a single coral-red accent reserved for the highest-priority CTA.
|
||||
- [**Sentry**](https://getdesign.md/sentry/design-md) - Error monitoring. Dark dashboard, data-dense, pink-purple accent
|
||||
- [**Supabase**](https://getdesign.md/supabase/design-md) - Open-source Firebase alternative. Dark emerald theme, code-first
|
||||
|
||||
@ -127,6 +127,7 @@ Become a Sponsor [1M+ view] — your logo here and get listed on [getdesign.md](
|
||||
### Media & Consumer Tech
|
||||
|
||||
- [**Apple**](https://getdesign.md/apple/design-md) - Consumer electronics. Premium white space, SF Pro, cinematic imagery
|
||||
- [**HP**](https://getdesign.md/hp/design-md) - PC and printer maker. Pure white canvas, HP Electric Blue signal CTA, geometric Forma DJR Micro, blue chevron decorations
|
||||
- [**IBM**](https://getdesign.md/ibm/design-md) - Enterprise technology. Carbon design system, structured blue palette
|
||||
- [**NVIDIA**](https://getdesign.md/nvidia/design-md) - GPU computing. Green-black energy, technical power aesthetic
|
||||
- [**Pinterest**](https://getdesign.md/pinterest/design-md) - Visual discovery platform. Red accent, masonry grid, image-first
|
||||
|
||||
@ -1,262 +1,551 @@
|
||||
# Design System Inspired by Sentry
|
||||
---
|
||||
version: alpha
|
||||
name: Sentri Inspired
|
||||
description: An inspired interpretation of Sentri's design language — a developer-tools brand built on a deep purple-violet midnight canvas, electric lime accents, and a slightly subversive illustrated personality. The system pairs a custom display sans (chunky, playful, near-condensed) with the open Rubik family for UI copy and Monaco for code, then leans on dark-on-light pricing surfaces, sticker-style mascots, and a single-color CTA hierarchy where black-violet buttons read as the primary action against either polarity.
|
||||
|
||||
## 1. Visual Theme & Atmosphere
|
||||
colors:
|
||||
primary: "#150f23"
|
||||
ink-deep: "#1f1633"
|
||||
on-primary: "#ffffff"
|
||||
accent-lime: "#c2ef4e"
|
||||
accent-pink: "#fa7faa"
|
||||
accent-violet: "#6a5fc1"
|
||||
accent-violet-deep: "#422082"
|
||||
accent-violet-mid: "#79628c"
|
||||
surface-canvas-dark: "#1f1633"
|
||||
surface-canvas-light: "#ffffff"
|
||||
surface-night: "#150f23"
|
||||
surface-press-light: "#f0f0f0"
|
||||
surface-press-stronger: "#efefef"
|
||||
hairline-violet: "#362d59"
|
||||
hairline-cool: "#cfcfdb"
|
||||
hairline-cloud: "#e5e7eb"
|
||||
ink: "#1f1633"
|
||||
ink-press: "#1a1a1a"
|
||||
on-dark-muted: "#bdb8c0"
|
||||
on-dark-faint: "#3f3849"
|
||||
ring-focus: "#9dc1f5"
|
||||
|
||||
Sentry's website is a dark-mode-first developer tool interface that speaks the language of code editors and terminal windows. The entire aesthetic is rooted in deep purple-black backgrounds (`#1f1633`, `#150f23`) that evoke the late-night debugging sessions Sentry was built for. Against this inky canvas, a carefully curated set of purples, pinks, and a distinctive lime-green accent (`#c2ef4e`) create a visual system that feels simultaneously technical and vibrant.
|
||||
typography:
|
||||
display-hero:
|
||||
fontFamily: "Sentri Display, Rubik, system-ui, sans-serif"
|
||||
fontSize: 88px
|
||||
fontWeight: 700
|
||||
lineHeight: 1.2
|
||||
letterSpacing: 0
|
||||
display-large:
|
||||
fontFamily: "Sentri Display, Rubik, system-ui, sans-serif"
|
||||
fontSize: 60px
|
||||
fontWeight: 500
|
||||
lineHeight: 1.1
|
||||
letterSpacing: 0
|
||||
heading-xl:
|
||||
fontFamily: "Rubik, -apple-system, system-ui, Segoe UI, Helvetica, Arial, sans-serif"
|
||||
fontSize: 30px
|
||||
fontWeight: 500
|
||||
lineHeight: 1.2
|
||||
letterSpacing: 0
|
||||
heading-lg:
|
||||
fontFamily: "Rubik, -apple-system, system-ui, sans-serif"
|
||||
fontSize: 27px
|
||||
fontWeight: 500
|
||||
lineHeight: 1.25
|
||||
letterSpacing: 0
|
||||
heading-md:
|
||||
fontFamily: "Rubik, -apple-system, system-ui, sans-serif"
|
||||
fontSize: 24px
|
||||
fontWeight: 500
|
||||
lineHeight: 1.25
|
||||
letterSpacing: 0
|
||||
heading-sm:
|
||||
fontFamily: "Rubik, -apple-system, system-ui, sans-serif"
|
||||
fontSize: 20px
|
||||
fontWeight: 600
|
||||
lineHeight: 1.25
|
||||
letterSpacing: 0
|
||||
body-lg:
|
||||
fontFamily: "Rubik, -apple-system, system-ui, sans-serif"
|
||||
fontSize: 16px
|
||||
fontWeight: 400
|
||||
lineHeight: 2.0
|
||||
letterSpacing: 0
|
||||
body-strong:
|
||||
fontFamily: "Rubik, -apple-system, system-ui, sans-serif"
|
||||
fontSize: 16px
|
||||
fontWeight: 600
|
||||
lineHeight: 1.5
|
||||
letterSpacing: 0
|
||||
body-md:
|
||||
fontFamily: "Rubik, -apple-system, system-ui, sans-serif"
|
||||
fontSize: 16px
|
||||
fontWeight: 500
|
||||
lineHeight: 1.5
|
||||
letterSpacing: 0
|
||||
eyebrow:
|
||||
fontFamily: "Rubik, -apple-system, system-ui, sans-serif"
|
||||
fontSize: 15px
|
||||
fontWeight: 500
|
||||
lineHeight: 1.4
|
||||
letterSpacing: 0
|
||||
button-cap:
|
||||
fontFamily: "Rubik, -apple-system, system-ui, sans-serif"
|
||||
fontSize: 14px
|
||||
fontWeight: 700
|
||||
lineHeight: 1.14
|
||||
letterSpacing: 0.2px
|
||||
button-cap-light:
|
||||
fontFamily: "Rubik, -apple-system, system-ui, sans-serif"
|
||||
fontSize: 14px
|
||||
fontWeight: 500
|
||||
lineHeight: 1.29
|
||||
letterSpacing: 0.2px
|
||||
caption:
|
||||
fontFamily: "Rubik, -apple-system, system-ui, sans-serif"
|
||||
fontSize: 14px
|
||||
fontWeight: 400
|
||||
lineHeight: 1.43
|
||||
letterSpacing: 0
|
||||
micro-cap:
|
||||
fontFamily: "Rubik, -apple-system, system-ui, sans-serif"
|
||||
fontSize: 10px
|
||||
fontWeight: 600
|
||||
lineHeight: 1.8
|
||||
letterSpacing: 0.25px
|
||||
code:
|
||||
fontFamily: "Monaco, Menlo, Ubuntu Mono, monospace"
|
||||
fontSize: 16px
|
||||
fontWeight: 400
|
||||
lineHeight: 1.5
|
||||
letterSpacing: 0
|
||||
code-strong:
|
||||
fontFamily: "Monaco, Menlo, Ubuntu Mono, monospace"
|
||||
fontSize: 16px
|
||||
fontWeight: 700
|
||||
lineHeight: 1.5
|
||||
letterSpacing: 0
|
||||
|
||||
The typography pairing is deliberate: "Dammit Sans" appears at hero scale (88px, weight 700) as a display font with personality and attitude that matches Sentry's irreverent brand voice ("Code breaks. Fix it faster."), while Rubik serves as the workhorse UI font across all functional text — headings, body, buttons, captions, and navigation. Monaco provides the monospace layer for code snippets and technical content, completing the developer-tool trinity.
|
||||
rounded:
|
||||
xs: 4px
|
||||
sm: 6px
|
||||
md: 8px
|
||||
lg: 10px
|
||||
xl: 12px
|
||||
xxl: 18px
|
||||
full: 9999px
|
||||
|
||||
What makes Sentry distinctive is its embrace of the "dark IDE" aesthetic without feeling cold or sterile. Warm purple tones replace the typical cool grays of developer tools, and bold illustrative elements (3D characters, colorful product screenshots) punctuate the dark canvas. The button system uses a signature muted purple (`#79628c`) with inset shadows that creates a tactile, almost physical quality — buttons feel like they could be pressed into the surface.
|
||||
spacing:
|
||||
xxs: 2px
|
||||
xs: 4px
|
||||
sm: 8px
|
||||
md: 12px
|
||||
lg: 16px
|
||||
xl: 24px
|
||||
xxl: 32px
|
||||
section: 96px
|
||||
|
||||
components:
|
||||
button-primary:
|
||||
backgroundColor: "{colors.primary}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.button-cap}"
|
||||
rounded: "{rounded.md}"
|
||||
padding: 12px 16px
|
||||
button-primary-pressed:
|
||||
backgroundColor: "{colors.surface-press-stronger}"
|
||||
textColor: "{colors.ink-press}"
|
||||
typography: "{typography.button-cap}"
|
||||
rounded: "{rounded.md}"
|
||||
padding: 12px 16px
|
||||
button-inverted:
|
||||
backgroundColor: "{colors.on-primary}"
|
||||
textColor: "{colors.ink-deep}"
|
||||
typography: "{typography.button-cap}"
|
||||
rounded: "{rounded.md}"
|
||||
padding: 12px 16px
|
||||
button-inverted-pressed:
|
||||
backgroundColor: "{colors.surface-press-light}"
|
||||
textColor: "{colors.ink-press}"
|
||||
typography: "{typography.button-cap}"
|
||||
rounded: "{rounded.md}"
|
||||
padding: 12px 16px
|
||||
button-ghost-on-dark:
|
||||
backgroundColor: "{colors.on-dark-faint}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.button-cap}"
|
||||
rounded: "{rounded.xl}"
|
||||
padding: 8px
|
||||
button-violet-token:
|
||||
backgroundColor: "{colors.accent-violet-mid}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.button-cap-light}"
|
||||
rounded: "{rounded.xl}"
|
||||
padding: 8px 16px
|
||||
button-disabled:
|
||||
backgroundColor: "{colors.hairline-cloud}"
|
||||
textColor: "{colors.on-dark-muted}"
|
||||
typography: "{typography.button-cap}"
|
||||
rounded: "{rounded.md}"
|
||||
padding: 12px 16px
|
||||
pill-neutral-dark:
|
||||
backgroundColor: "{colors.surface-night}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.caption}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 4px 8px
|
||||
chip-lime-keyword:
|
||||
backgroundColor: "{colors.accent-lime}"
|
||||
textColor: "{colors.ink-deep}"
|
||||
typography: "{typography.display-hero}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 0 12px
|
||||
text-input:
|
||||
backgroundColor: "{colors.surface-canvas-light}"
|
||||
textColor: "{colors.ink-deep}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.sm}"
|
||||
padding: 8px 12px
|
||||
text-input-focused:
|
||||
backgroundColor: "{colors.surface-canvas-light}"
|
||||
textColor: "{colors.ink-deep}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.sm}"
|
||||
padding: 8px 12px
|
||||
select-violet:
|
||||
backgroundColor: "{colors.accent-violet-deep}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.md}"
|
||||
padding: 8px 16px
|
||||
card-pricing:
|
||||
backgroundColor: "{colors.surface-canvas-light}"
|
||||
textColor: "{colors.ink-deep}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.xl}"
|
||||
padding: 32px
|
||||
card-pricing-featured:
|
||||
backgroundColor: "{colors.surface-night}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.xl}"
|
||||
padding: 32px
|
||||
card-feature-dark:
|
||||
backgroundColor: "{colors.ink-deep}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.body-lg}"
|
||||
rounded: "{rounded.xxl}"
|
||||
padding: 32px
|
||||
card-spotlight-violet:
|
||||
backgroundColor: "{colors.accent-violet-deep}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.body-lg}"
|
||||
rounded: "{rounded.xxl}"
|
||||
padding: 32px
|
||||
code-block:
|
||||
backgroundColor: "{colors.surface-night}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.code}"
|
||||
rounded: "{rounded.md}"
|
||||
padding: 16px
|
||||
link-on-dark:
|
||||
backgroundColor: "{colors.surface-canvas-dark}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 0px
|
||||
link-on-light:
|
||||
backgroundColor: "{colors.surface-canvas-light}"
|
||||
textColor: "{colors.ink-deep}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 0px
|
||||
nav-bar-light:
|
||||
backgroundColor: "{colors.surface-canvas-light}"
|
||||
textColor: "{colors.ink-deep}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 16px 24px
|
||||
footer-light:
|
||||
backgroundColor: "{colors.surface-canvas-light}"
|
||||
textColor: "{colors.ink-deep}"
|
||||
typography: "{typography.caption}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 32px 24px
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
Sentri's design language reads like a debugging console wearing a leather jacket. The home and product surfaces sit on a near-black violet midnight (`{colors.surface-canvas-dark}` / `{colors.surface-night}`), strewn with starfield textures and floating sticker-style mascots — astronauts, monsters, traffic cones — that puncture the seriousness of an observability product. Headlines run in a chunky proprietary display sans where the most important keywords are wrapped in lime-green highlight chips (`{colors.accent-lime}`), as if the copy itself has been marked up by a developer redlining their own console output.
|
||||
|
||||
The palette is deliberately narrow: deep midnight as the dominant canvas, electric lime as the primary attention-grabber, hot pink (`{colors.accent-pink}`) as a secondary punctuation, and a violet-mid (`{colors.accent-violet-mid}`) for tag chips and hairline strokes. White appears in two roles — as text on dark, and as the canvas for pricing, contact, and content-heavy pages where developers need to scan dense tables. The "single primary CTA" is visually inverted depending on context: filled black-violet (`{colors.primary}`) with white type on light surfaces, or filled white with dark type on dark surfaces. The button always reads as the strongest UI affordance regardless of polarity.
|
||||
|
||||
Typography splits cleanly between three families: a custom display sans for hero and section openers (chunky, near-condensed, slightly playful), Rubik for every UI text role (body, captions, eyebrow caps, button labels), and Monaco for code. Buttons and eyebrows almost always run in uppercase with a 0.2px tracking lift to give them the snap of console output.
|
||||
|
||||
**Key Characteristics:**
|
||||
- Dark purple-black backgrounds (`#1f1633`, `#150f23`) — never pure black
|
||||
- Warm purple accent spectrum: from deep (`#362d59`) through mid (`#79628c`, `#6a5fc1`) to vibrant (`#422082`)
|
||||
- Lime-green accent (`#c2ef4e`) for high-visibility CTAs and highlights
|
||||
- Pink/coral accents (`#ffb287`, `#fa7faa`) for focus states and secondary highlights
|
||||
- "Dammit Sans" display font for brand personality at hero scale
|
||||
- Rubik as primary UI font with uppercase letter-spaced labels
|
||||
- Monaco monospace for code elements
|
||||
- Inset shadows on buttons creating tactile depth
|
||||
- Frosted glass effects with `blur(18px) saturate(180%)`
|
||||
- Two-polarity canvas system: deep violet midnight (`{colors.surface-canvas-dark}`) for marketing hero and product feature pages, white (`{colors.surface-canvas-light}`) for pricing, contact, and dense reference content — the system never tries to blur the two.
|
||||
- Lime keyword highlight (`{colors.accent-lime}`) treated as a typographic device, not a color swatch — it wraps single words inside the display headline to act as a syntax highlight on the reading flow.
|
||||
- Sticker illustration system: floating mascot characters with hand-drawn outlines, appearing at section junctions, never inside cards — they create rhythm and personality between dense info blocks.
|
||||
- Uppercase eyebrow + button caps in `{typography.button-cap}` and `{typography.eyebrow}`, with a consistent 0.2px tracking lift, give the brand its "developer console" cadence.
|
||||
- Single-primary CTA hierarchy: every page has one filled button reading either `{colors.primary}` on light or `{colors.on-primary}` on dark; outlined and ghost variants are downgraded.
|
||||
- Card surfaces follow the canvas: dark sections nest dark cards (`{colors.ink-deep}` with subtle hairline) and light sections nest white cards with `{colors.hairline-cloud}` borders — chrome stays consistent, only the polarity flips.
|
||||
- A pricing-page color rhythm of cream-white tiers with one dark inverted "featured" tier (`{colors.surface-night}`), avoiding the typical accent-bordered featured pattern.
|
||||
|
||||
## 2. Color Palette & Roles
|
||||
## Colors
|
||||
|
||||
### Primary Brand
|
||||
- **Deep Purple** (`#1f1633`): Primary background, the defining color of the brand
|
||||
- **Darker Purple** (`#150f23`): Deeper sections, footer, secondary backgrounds
|
||||
- **Border Purple** (`#362d59`): Borders, dividers, subtle structural lines
|
||||
> **Source pages:** home (`/welcome/`), product/error-monitoring, contact/enterprise, pricing.
|
||||
|
||||
### Accent Colors
|
||||
- **Sentry Purple** (`#6a5fc1`): Primary interactive color — links, hover states, focus rings
|
||||
- **Muted Purple** (`#79628c`): Button backgrounds, secondary interactive elements
|
||||
- **Deep Violet** (`#422082`): Select dropdowns, active states, high-emphasis surfaces
|
||||
- **Lime Green** (`#c2ef4e`): High-visibility accent, special links, badge highlights
|
||||
- **Coral** (`#ffb287`): Focus state backgrounds, warm accent
|
||||
- **Pink** (`#fa7faa`): Focus outlines, decorative accents
|
||||
### Brand & Accent
|
||||
- **Midnight Violet** (`{colors.primary}` — `#150f23`): The system's primary action color and the deepest surface tone. Used for filled primary buttons on light surfaces, code-block backgrounds, and the strongest dark cards.
|
||||
- **Ink Violet** (`{colors.ink-deep}` — `#1f1633`): Slightly lifted from primary, this is the marketing hero canvas and the default body-text color on light surfaces — a single token doing double duty as background and ink.
|
||||
- **Electric Lime** (`{colors.accent-lime}` — `#c2ef4e`): The signature highlight color. Wrapped around individual headline keywords as a syntax-highlight chip (`{rounded.xs}` corner, no padding-y, 12px padding-x). Also used as the squiggly footer divider stroke. Never a button background.
|
||||
- **Hot Pink** (`{colors.accent-pink}` — `#fa7faa`): Secondary punctuation color used for sticker outlines, chart points, and supporting accents — never on buttons, never on type at body size.
|
||||
- **Violet Link** (`{colors.accent-violet}` — `#6a5fc1`): Inline link color when emphasis is needed beyond underline.
|
||||
- **Deep Violet** (`{colors.accent-violet-deep}` — `#422082`): The select-dropdown fill on contact forms; also used on spotlight cards inside dark sections.
|
||||
- **Mid Violet** (`{colors.accent-violet-mid}` — `#79628c`): Tag-chip fill and faint accent on dark surfaces.
|
||||
|
||||
### Text Colors
|
||||
- **Pure White** (`#ffffff`): Primary text on dark backgrounds
|
||||
- **Light Gray** (`#e5e7eb`): Secondary text, muted content
|
||||
- **Code Yellow** (`#dcdcaa`): Syntax highlighting, code tokens
|
||||
### Surface
|
||||
- **Dark Canvas** (`{colors.surface-canvas-dark}` — `#1f1633`): Hero, product, and feature-page background. Carries the deepest atmospheric weight.
|
||||
- **Night** (`{colors.surface-night}` — `#150f23`): Cards on dark canvas, code blocks, and the "featured" pricing tier.
|
||||
- **Light Canvas** (`{colors.surface-canvas-light}` — `#ffffff`): Pricing, contact, and dense-reference page background.
|
||||
- **Surface Press Light** (`{colors.surface-press-light}` — `#f0f0f0`) and **Press Stronger** (`{colors.surface-press-stronger}` — `#efefef`): The pressed/active fill of inverted buttons on dark surfaces.
|
||||
- **Hairline Violet** (`{colors.hairline-violet}` — `#362d59`): 1px borders on dark cards.
|
||||
- **Hairline Cool** (`{colors.hairline-cool}` — `#cfcfdb`): 1px borders on text inputs and form fields.
|
||||
- **Hairline Cloud** (`{colors.hairline-cloud}` — `#e5e7eb`): Pricing-table dividers and pricing-card borders on light canvas.
|
||||
|
||||
### Surface & Overlay
|
||||
- **Glass White** (`rgba(255, 255, 255, 0.18)`): Frosted glass button backgrounds
|
||||
- **Glass Dark** (`rgba(54, 22, 107, 0.14)`): Hover overlay on glass elements
|
||||
- **Input White** (`#ffffff`): Form input backgrounds (light context)
|
||||
- **Input Border** (`#cfcfdb`): Form field borders
|
||||
### Text
|
||||
- **On Primary** (`{colors.on-primary}` — `#ffffff`): All text on dark canvas, all CTA labels on filled dark buttons.
|
||||
- **Ink** (`{colors.ink}` — `#1f1633`): Body text on light canvas; identical hex to the dark canvas, repurposed as type.
|
||||
- **Ink Press** (`{colors.ink-press}` — `#1a1a1a`): Reserved for the pressed/active state of inverted buttons.
|
||||
- **On Dark Muted** (`{colors.on-dark-muted}` — `rgba(255,255,255,0.72)`): Secondary text, captions, and table cell values on dark canvas.
|
||||
- **On Dark Faint** (`{colors.on-dark-faint}` — `rgba(255,255,255,0.18)`): Translucent surface-on-dark — used for ghost button fills and dimmed nav items.
|
||||
|
||||
### Shadows
|
||||
- **Ambient Glow** (`rgba(22, 15, 36, 0.9) 0px 4px 4px 9px`): Deep purple ambient shadow
|
||||
- **Button Hover** (`rgba(0, 0, 0, 0.18) 0px 0.5rem 1.5rem`): Elevated hover state
|
||||
- **Card Shadow** (`rgba(0, 0, 0, 0.1) 0px 10px 15px -3px`): Standard card elevation
|
||||
- **Inset Button** (`rgba(0, 0, 0, 0.1) 0px 1px 3px 0px inset`): Tactile pressed effect
|
||||
### Semantic
|
||||
- **Focus Ring** (`{colors.ring-focus}` — `rgba(59,130,246,0.5)`): Translucent blue focus ring — the only blue in the system, reserved for keyboard focus on form fields.
|
||||
|
||||
## 3. Typography Rules
|
||||
## Typography
|
||||
|
||||
### Font Families
|
||||
- **Display**: `Dammit Sans` — brand personality font for hero headings
|
||||
- **Primary UI**: `Rubik`, with fallbacks: `-apple-system, system-ui, Segoe UI, Helvetica, Arial`
|
||||
- **Monospace**: `Monaco`, with fallbacks: `Menlo, Ubuntu Mono`
|
||||
### Font Family
|
||||
|
||||
The display tier is a proprietary geometric sans with chunky, near-condensed proportions and a slightly subversive personality (closing apertures, optical-stress letterforms). When unavailable, fall back to **Rubik** at heavier weights for visual continuity.
|
||||
|
||||
The UI tier is **Rubik** — an open-source Hebrew/Latin sans on Google Fonts — with system fallbacks (`-apple-system, system-ui, Segoe UI, Helvetica, Arial`). Rubik handles every body, caption, button, and eyebrow role.
|
||||
|
||||
The code tier is **Monaco** with Menlo and Ubuntu Mono fallbacks — used in code blocks, install snippets, and inline tokens.
|
||||
|
||||
### Hierarchy
|
||||
|
||||
| Role | Font | Size | Weight | Line Height | Letter Spacing | Notes |
|
||||
|------|------|------|--------|-------------|----------------|-------|
|
||||
| Display Hero | Dammit Sans | 88px (5.50rem) | 700 | 1.20 (tight) | normal | Maximum impact, brand voice |
|
||||
| Display Secondary | Dammit Sans | 60px (3.75rem) | 500 | 1.10 (tight) | normal | Secondary hero text |
|
||||
| Section Heading | Rubik | 30px (1.88rem) | 400 | 1.20 (tight) | normal | Major section titles |
|
||||
| Sub-heading | Rubik | 27px (1.69rem) | 500 | 1.25 (tight) | normal | Feature section headers |
|
||||
| Card Title | Rubik | 24px (1.50rem) | 500 | 1.25 (tight) | normal | Card and block headings |
|
||||
| Feature Title | Rubik | 20px (1.25rem) | 600 | 1.25 (tight) | normal | Emphasized feature names |
|
||||
| Body | Rubik | 16px (1.00rem) | 400 | 1.50 | normal | Standard body text |
|
||||
| Body Emphasis | Rubik | 16px (1.00rem) | 500–600 | 1.50 | normal | Bold body, nav items |
|
||||
| Nav Label | Rubik | 15px (0.94rem) | 500 | 1.40 | normal | Navigation links |
|
||||
| Uppercase Label | Rubik | 15px (0.94rem) | 500 | 1.25 (tight) | normal | `text-transform: uppercase` |
|
||||
| Button Text | Rubik | 14px (0.88rem) | 500–700 | 1.14–1.29 (tight) | 0.2px | `text-transform: uppercase` |
|
||||
| Caption | Rubik | 14px (0.88rem) | 500–700 | 1.00–1.43 | 0.2px | Often uppercase |
|
||||
| Small Caption | Rubik | 12px (0.75rem) | 600 | 2.00 (relaxed) | normal | Subtle annotations |
|
||||
| Micro Label | Rubik | 10px (0.63rem) | 600 | 1.80 (relaxed) | 0.25px | `text-transform: uppercase` |
|
||||
| Code | Monaco | 16px (1.00rem) | 400–700 | 1.50 | normal | Code blocks, technical text |
|
||||
| Token | Size | Weight | Line Height | Letter Spacing | Use |
|
||||
|---|---|---|---|---|---|
|
||||
| `{typography.display-hero}` | 88px | 700 | 1.2 | 0 | Marketing hero headline (single line of attention) |
|
||||
| `{typography.display-large}` | 60px | 500 | 1.1 | 0 | Section openers on dark surfaces |
|
||||
| `{typography.heading-xl}` | 30px | 500 | 1.2 | 0 | Page titles on light surfaces (e.g., "Pricing plans for dev teams of all sizes") |
|
||||
| `{typography.heading-lg}` | 27px | 500 | 1.25 | 0 | Sub-section headings, large card titles |
|
||||
| `{typography.heading-md}` | 24px | 500 | 1.25 | 0 | Card titles, in-page section headings |
|
||||
| `{typography.heading-sm}` | 20px | 600 | 1.25 | 0 | Compact card title, list-group title |
|
||||
| `{typography.body-lg}` | 16px | 400 | 2.0 | 0 | Marketing-paragraph body — the airy, two-line-leading variant used in hero subtext |
|
||||
| `{typography.body-strong}` | 16px | 600 | 1.5 | 0 | Emphasized body run, lead sentence |
|
||||
| `{typography.body-md}` | 16px | 500 | 1.5 | 0 | Default UI body, table cells, form labels |
|
||||
| `{typography.eyebrow}` | 15px | 500 | 1.4 | 0 | Section eyebrow above large headings, all-caps |
|
||||
| `{typography.button-cap}` | 14px | 700 | 1.14 | 0.2px | Filled button labels (uppercase) |
|
||||
| `{typography.button-cap-light}` | 14px | 500 | 1.29 | 0.2px | Ghost / outline button labels (uppercase) |
|
||||
| `{typography.caption}` | 14px | 400 | 1.43 | 0 | Footer text, fine print, helper copy |
|
||||
| `{typography.micro-cap}` | 10px | 600 | 1.8 | 0.25px | Status labels, badge text, micro-eyebrow |
|
||||
| `{typography.code}` | 16px | 400 | 1.5 | 0 | Code block content |
|
||||
| `{typography.code-strong}` | 16px | 700 | 1.5 | 0 | Highlighted code keyword |
|
||||
|
||||
### Principles
|
||||
- **Dual personality**: Dammit Sans brings irreverent brand character at display scale; Rubik provides clean professionalism for everything functional.
|
||||
- **Uppercase as system**: Buttons, captions, labels, and micro-text all use `text-transform: uppercase` with subtle letter-spacing (0.2px–0.25px), creating a systematic "technical label" pattern throughout.
|
||||
- **Weight stratification**: Rubik uses 400 (body), 500 (emphasis/nav), 600 (titles/strong), 700 (buttons/CTAs) — a clean four-tier weight system.
|
||||
- **Tight headings, relaxed body**: All headings use 1.10–1.25 line-height; body uses 1.50; small captions expand to 2.00 for readability at tiny sizes.
|
||||
- **Two leading worlds.** Marketing copy uses 2.0 line-height on `{typography.body-lg}` — extremely airy, generous breathing room. Functional UI copy uses 1.5 line-height on `{typography.body-md}` — denser, closer to console output. The choice is deliberate: marketing reads like prose, the product reads like a log.
|
||||
- **Caps with tracking.** All button labels and eyebrows are uppercase with 0.2px tracking. This is the brand's typographic signature — a console-prompt cadence applied to UI affordances.
|
||||
- **Headlines as syntax.** The hero display is structured so a single keyword can be wrapped in a `{colors.accent-lime}` highlight chip without disrupting the reading order. Treat the lime chip as a glyph-level decoration, not a separate component.
|
||||
|
||||
## 4. Component Stylings
|
||||
### Note on Font Substitutes
|
||||
Rubik is open-source on Google Fonts and is the safe default for everything except the hero display. For the proprietary display sans, suitable open substitutes are **Space Grotesk** (heavier weights), **Archivo** (semi-condensed weights), or **Hubot Sans** with optical-size axis at heavier ends — all carry the same chunky, near-condensed silhouette. Adjust line-height down by 0.05 when substituting, since the proprietary face has tighter leading at large sizes.
|
||||
|
||||
## Layout
|
||||
|
||||
### Spacing System
|
||||
- **Base unit**: 8px
|
||||
- **Tokens**: `{spacing.xxs}` 2px · `{spacing.xs}` 4px · `{spacing.sm}` 8px · `{spacing.md}` 12px · `{spacing.lg}` 16px · `{spacing.xl}` 24px · `{spacing.xxl}` 32px · `{spacing.section}` 96px
|
||||
- **Section padding**: `{spacing.section}` 96px between major page bands on desktop, collapsing to `{spacing.xxl}` 32px–48px on mobile.
|
||||
- **Card internal padding**: `{spacing.xxl}` 32px on pricing cards and large feature cards; `{spacing.lg}` 16px on compact tag/badge groups.
|
||||
- **Form field padding**: `{spacing.sm}` 8px vertical, `{spacing.md}` 12px horizontal — matches the text-input token directly.
|
||||
|
||||
### Grid & Container
|
||||
- Marketing pages use a wide centered container with generous outer gutters; max width sits around 1152px (one of the extracted breakpoints), with content inside flexing across 12 conceptual columns.
|
||||
- Pricing splits into a 4-tier card row at desktop, collapsing to 2-up at mid widths and 1-up on mobile.
|
||||
- The contact form uses a 2-column field layout (first/last name side-by-side) inside a single light-canvas panel.
|
||||
- Breakpoints stair-step at 1440 → 1152 → 992 → 768 → 640 → 576 — see Responsive Behavior.
|
||||
|
||||
### Whitespace Philosophy
|
||||
The dark canvas absorbs whitespace differently from light. On dark surfaces the brand stretches `{spacing.section}` generously between bands so floating mascots and starfield textures have room to breathe. On light surfaces (pricing, contact) the whitespace tightens — content density takes priority because users are scanning, comparing, and acting. Rule of thumb: hero and feature surfaces are spacious, transactional surfaces are dense.
|
||||
|
||||
## Elevation & Depth
|
||||
|
||||
| Level | Treatment | Use |
|
||||
|---|---|---|
|
||||
| 0 | Flat on canvas, no shadow | Default surface, dark or light |
|
||||
| 1 | `box-shadow: rgba(0,0,0,0.08) 0 2px 8px 0` | Inverted buttons on dark canvas (light fill lifting off dark surface) |
|
||||
| 2 | `box-shadow: rgba(0,0,0,0.1) 0 10px 15px -3px, rgba(0,0,0,0.1) 0 4px 6px -4px` | Floating cards on light canvas, modals |
|
||||
| 3 | `box-shadow: rgb(21,15,35) 0 0 8px 6px` | Glow halo around primary CTA on dark hero — the dark color itself becomes the shadow, creating a vignette of canvas around the button |
|
||||
| 4 | `box-shadow: rgba(0,0,0,0.18) 0 0.5rem 1.5rem` | Pressed inverted button on dark canvas |
|
||||
|
||||
### Decorative Depth
|
||||
Sentri's depth doesn't come from drop shadows — it comes from the **starfield texture** on the hero canvas (subtle white-on-violet pinpricks at low opacity), the **floating sticker mascots** (drawn with hand-rendered outlines and saturated fills, layered above the canvas with no shadow), and the **lime squiggly divider** above the footer. These illustrative elements do the work that shadow stacks do in flatter design systems — they tell the eye where one section ends and another begins.
|
||||
|
||||
## Shapes
|
||||
|
||||
### Border Radius Scale
|
||||
|
||||
| Token | Value | Use |
|
||||
|---|---|---|
|
||||
| `{rounded.xs}` | 4px | Badges, status pills, lime keyword highlight chips |
|
||||
| `{rounded.sm}` | 6px | Text inputs, search boxes |
|
||||
| `{rounded.md}` | 8px | Primary and inverted buttons, code blocks, select dropdowns |
|
||||
| `{rounded.lg}` | 10px | Generic divs, container blocks |
|
||||
| `{rounded.xl}` | 12px | Pricing cards, feature cards, navigation pill chrome |
|
||||
| `{rounded.xxl}` | 18px | Image containers, large hero illustrations |
|
||||
| `{rounded.full}` | 9999px | Avatars, circular icon buttons |
|
||||
|
||||
### Photography Geometry
|
||||
The site doesn't use traditional photography — it uses **illustrated stickers and product UI screenshots** in roughly equivalent geometric roles. Product UI mocks sit inside `{rounded.xxl}` 18px containers, often tilted slightly off-axis, against the dark canvas with no border. Sticker mascots have no container at all — they are layered directly on canvas, often overlapping section boundaries to break the grid. Avatar treatments (in customer-logo strips) are simple greyscale wordmarks, not photos.
|
||||
|
||||
## Components
|
||||
|
||||
> **No hover states documented.** Every spec below shows only Default and Pressed/Active states. Variants are formal entries in the front-matter `components:` block.
|
||||
|
||||
### Buttons
|
||||
|
||||
**Primary Muted Purple**
|
||||
- Background: `#79628c` (rgb(121, 98, 140))
|
||||
- Text: `#ffffff`, uppercase, 14px, weight 500–700, letter-spacing 0.2px
|
||||
- Border: `1px solid #584674`
|
||||
- Radius: 13px
|
||||
- Shadow: `rgba(0, 0, 0, 0.1) 0px 1px 3px 0px inset` (tactile inset)
|
||||
- Hover: elevated shadow `rgba(0, 0, 0, 0.18) 0px 0.5rem 1.5rem`
|
||||
**`button-primary`** — the dominant CTA across light surfaces.
|
||||
- Background `{colors.primary}`, text `{colors.on-primary}`, type `{typography.button-cap}` (uppercase, 14px / 700, 0.2px tracking), padding `{spacing.md} {spacing.lg}` (12px 16px), rounded `{rounded.md}`. On dark hero surfaces, add the level-3 glow halo for emphasis.
|
||||
- Pressed state lives in `button-primary-pressed`: background flips to `{colors.surface-press-stronger}`, text to `{colors.ink-press}`. The button effectively swaps polarities on press.
|
||||
|
||||
**Glass White**
|
||||
- Background: `rgba(255, 255, 255, 0.18)` (frosted glass)
|
||||
- Text: `#ffffff`
|
||||
- Padding: 8px
|
||||
- Radius: 12px (left-aligned variant: `12px 0px 0px 12px`)
|
||||
- Shadow: `rgba(0, 0, 0, 0.08) 0px 2px 8px`
|
||||
- Hover background: `rgba(54, 22, 107, 0.14)`
|
||||
- Use: Secondary actions on dark surfaces
|
||||
**`button-inverted`** — the dominant CTA on dark canvas; visually identical hierarchy, polarity-flipped.
|
||||
- Background `{colors.on-primary}` (white), text `{colors.ink-deep}`, same `{typography.button-cap}`, rounded `{rounded.md}`.
|
||||
- Pressed in `button-inverted-pressed`: background drops to `{colors.surface-press-light}`, text to `{colors.ink-press}`.
|
||||
|
||||
**White Solid**
|
||||
- Background: `#ffffff`
|
||||
- Text: `#1f1633`
|
||||
- Padding: 12px 16px
|
||||
- Radius: 8px
|
||||
- Hover: background transitions to `#6a5fc1`, text to white
|
||||
- Focus: background `#ffb287` (coral), outline `rgb(106, 95, 193) solid 0.125rem`
|
||||
- Use: High-visibility CTA on dark backgrounds
|
||||
**`button-ghost-on-dark`** — secondary CTA on dark canvas (e.g., "Get Demo" beside "Get Started").
|
||||
- Translucent fill `{colors.on-dark-faint}`, text `{colors.on-primary}`, type `{typography.button-cap}`, padding `{spacing.sm}` (8px), rounded `{rounded.xl}`. The translucent fill lets the canvas texture show through.
|
||||
|
||||
**Deep Violet (Select/Dropdown)**
|
||||
- Background: `#422082`
|
||||
- Text: `#ffffff`
|
||||
- Padding: 8px 16px
|
||||
- Radius: 8px
|
||||
**`button-violet-token`** — pill-shaped tag/category button used inline in product navs.
|
||||
- Background `{colors.accent-violet-mid}`, text `{colors.on-primary}`, type `{typography.button-cap-light}`, padding `{spacing.sm} {spacing.lg}` (8px 16px), rounded `{rounded.xl}`, 1px hairline border in a slightly deeper violet.
|
||||
|
||||
### Inputs
|
||||
|
||||
**Text Input**
|
||||
- Background: `#ffffff`
|
||||
- Text: `#1f1633`
|
||||
- Border: `1px solid #cfcfdb`
|
||||
- Padding: 8px 12px
|
||||
- Radius: 6px
|
||||
- Focus: border-color stays `#cfcfdb`, shadow `rgba(0, 0, 0, 0.15) 0px 2px 10px inset`
|
||||
|
||||
### Links
|
||||
- **Default on dark**: `#ffffff`, underline decoration
|
||||
- **Hover**: color transitions to `#6a5fc1` (Sentry Purple)
|
||||
- **Purple links**: `#6a5fc1` default, hover underline
|
||||
- **Lime accent links**: `#c2ef4e` default, hover to `#6a5fc1`
|
||||
- **Dark context links**: `#362d59`, hover to `#ffffff`
|
||||
**`button-disabled`**
|
||||
- Background `{colors.hairline-cloud}`, text `{colors.on-dark-muted}`, otherwise identical to `button-primary`.
|
||||
|
||||
### Cards & Containers
|
||||
- Background: semi-transparent or dark purple surfaces
|
||||
- Radius: 8px–12px
|
||||
- Shadow: `rgba(0, 0, 0, 0.1) 0px 10px 15px -3px`
|
||||
- Backdrop filter: `blur(18px) saturate(180%)` for glass effects
|
||||
|
||||
**`card-pricing`** — the standard tier card on the pricing page.
|
||||
- Background `{colors.surface-canvas-light}`, text `{colors.ink-deep}`, padding `{spacing.xxl}` 32px, rounded `{rounded.xl}` 12px, 1px `{colors.hairline-cloud}` border. Headline at top in `{typography.heading-md}`, price in `{typography.display-large}`, feature list in `{typography.body-md}`, primary CTA pinned to the bottom of the card.
|
||||
|
||||
**`card-pricing-featured`** — the dark inverted "featured" tier (Sentri uses the Business tier as the featured one).
|
||||
- Background `{colors.surface-night}`, text `{colors.on-primary}`, otherwise identical structure to `card-pricing`. The inversion (rather than an accent-bordered light card) is the brand's distinctive choice — the featured tier reads as the brand's voice, not as a marketing decoration.
|
||||
|
||||
**`card-feature-dark`** — large feature-band card on dark surfaces, used to anchor product feature explanations.
|
||||
- Background `{colors.ink-deep}`, text `{colors.on-primary}`, padding `{spacing.xxl}` 32px, rounded `{rounded.xxl}` 18px. Often holds a UI mock plus a 27px headline plus 16px body.
|
||||
|
||||
**`card-spotlight-violet`** — accent feature card with deeper violet fill, used for "Sentry-only" capability bands.
|
||||
- Background `{colors.accent-violet-deep}`, text `{colors.on-primary}`, padding `{spacing.xxl}`, rounded `{rounded.xxl}`. The deep violet reads as a feature highlight without breaking out of the brand's purple family.
|
||||
|
||||
**`code-block`** — code/install snippets.
|
||||
- Background `{colors.surface-night}`, text `{colors.on-primary}` rendered in `{typography.code}`. Padding `{spacing.lg}` 16px, rounded `{rounded.md}`. On dark canvas the code block is barely lifted from canvas — only the slightly deeper fill differentiates it.
|
||||
|
||||
### Inputs & Forms
|
||||
|
||||
**`text-input`** — the contact-form first/last/email/etc. fields.
|
||||
- Background `{colors.surface-canvas-light}`, text `{colors.ink-deep}`, type `{typography.body-md}`, padding `{spacing.sm} {spacing.md}` (8px 12px), rounded `{rounded.sm}` 6px, 1px `{colors.hairline-cool}` border.
|
||||
- Focus state in `text-input-focused`: same fill, but adds an inset shadow `rgba(0,0,0,0.15) 0 2px 10px inset` to suggest depth pressed inward.
|
||||
|
||||
**`select-violet`** — the dropdown variant used inside dark contact panels.
|
||||
- Background `{colors.accent-violet-deep}`, text `{colors.on-primary}`, type `{typography.body-md}`, padding `{spacing.sm} {spacing.lg}`, rounded `{rounded.md}`. Distinctive because it doesn't mimic a plain text input — it reads as a deliberate brand surface.
|
||||
|
||||
### Navigation
|
||||
- Dark transparent header over hero content
|
||||
- Rubik 15px weight 500 for nav links
|
||||
- White text, hover to Sentry Purple (`#6a5fc1`)
|
||||
- Uppercase labels with 0.2px letter-spacing for categories
|
||||
- Mobile: hamburger menu, full-width expanded
|
||||
|
||||
## 5. Layout Principles
|
||||
**`nav-bar-light`** — the standard top nav across light pages (pricing, contact, docs).
|
||||
- Background `{colors.surface-canvas-light}`, text `{colors.ink-deep}`, type `{typography.body-md}`. Logo wordmark on the left at ~145×32px, primary nav items mid-bar with dropdown carets, and a `Get Demo` ghost + `Get Started` filled `button-primary` pair on the right. Padding `{spacing.lg} {spacing.xl}` (16px 24px).
|
||||
|
||||
### Spacing System
|
||||
- Base unit: 8px
|
||||
- Scale: 1px, 2px, 4px, 5px, 6px, 8px, 12px, 16px, 24px, 32px, 40px, 44px, 45px, 47px
|
||||
**Top Nav (dark variant)** — used on the home page; same structure but inverted polarity, sitting on `{colors.surface-canvas-dark}`. The right-side button becomes `button-inverted`.
|
||||
|
||||
### Grid & Container
|
||||
- Max content width: 1152px (XL breakpoint)
|
||||
- Responsive padding: 2rem (mobile) → 4rem (tablet+)
|
||||
- Content centered within container
|
||||
- Full-width dark sections with contained inner content
|
||||
**Mobile nav** — collapses to a hamburger toggle below the 768px breakpoint; dropdown carets become full-width accordion items.
|
||||
|
||||
### Breakpoints
|
||||
| Name | Width | Key Changes |
|
||||
|------|-------|-------------|
|
||||
| Mobile | < 576px | Single column, stacked layout |
|
||||
| Small Tablet | 576–640px | Minor width adjustments |
|
||||
| Tablet | 640–768px | 2-column begins |
|
||||
| Small Desktop | 768–992px | Full nav visible |
|
||||
| Desktop | 992–1152px | Standard layout |
|
||||
| Large Desktop | 1152–1440px | Max-width content |
|
||||
### Pills, Badges, and Highlight Chips
|
||||
|
||||
### Whitespace Philosophy
|
||||
- **Dark breathing room**: Generous vertical spacing between sections (64px–80px+) lets the dark background serve as a visual rest.
|
||||
- **Content islands**: Feature sections are self-contained blocks floating in the dark purple sea, each with its own internal spacing rhythm.
|
||||
- **Asymmetric padding**: Buttons use asymmetric padding patterns (12px 16px, 8px 12px) that feel organic rather than rigid.
|
||||
**`pill-neutral-dark`** — small status / category pill on dark surfaces.
|
||||
- Background `{colors.surface-night}`, text `{colors.on-primary}`, type `{typography.caption}` 12px, padding `{spacing.xs} {spacing.sm}` (4px 8px), rounded `{rounded.xs}` 4px.
|
||||
|
||||
### Border Radius Scale
|
||||
- Minimal (6px): Form inputs, small interactive elements
|
||||
- Standard (8px): Buttons, cards, containers
|
||||
- Comfortable (10px–12px): Larger containers, glass panels
|
||||
- Rounded (13px): Primary muted buttons
|
||||
- Pill (18px): Image containers, badges
|
||||
**`chip-lime-keyword`** — the signature inline highlight wrapping single words inside the hero display headline.
|
||||
- Background `{colors.accent-lime}`, text `{colors.ink-deep}`, type matches the surrounding `{typography.display-hero}`, rounded `{rounded.xs}` 4px, padding `0 {spacing.md}` (12px horizontal, 0 vertical so the chip hugs the cap-height).
|
||||
|
||||
## 6. Depth & Elevation
|
||||
### Signature Components
|
||||
|
||||
| Level | Treatment | Use |
|
||||
|-------|-----------|-----|
|
||||
| Sunken (Level -1) | Inset shadow `rgba(0, 0, 0, 0.1) 0px 1px 3px inset` | Primary buttons (tactile pressed feel) |
|
||||
| Flat (Level 0) | No shadow | Default surfaces, dark backgrounds |
|
||||
| Surface (Level 1) | `rgba(0, 0, 0, 0.08) 0px 2px 8px` | Glass buttons, subtle cards |
|
||||
| Elevated (Level 2) | `rgba(0, 0, 0, 0.1) 0px 10px 15px -3px` | Cards, floating panels |
|
||||
| Prominent (Level 3) | `rgba(0, 0, 0, 0.18) 0px 0.5rem 1.5rem` | Hover states, modals |
|
||||
| Ambient (Level 4) | `rgba(22, 15, 36, 0.9) 0px 4px 4px 9px` | Deep purple ambient glow around hero |
|
||||
**Sticker Mascot Layer** — illustrated characters (astronauts, cartoon monsters, traffic cones, debugging avatars) drawn with hand-rendered outlines and saturated `{colors.accent-pink}` / `{colors.accent-lime}` fills. Mascots are placed at section junctions, often overlapping section boundaries by 30–40% of their height, with no container or shadow. They function as decorative section markers and brand personality carriers — never inside cards, never as buttons.
|
||||
|
||||
**Shadow Philosophy**: Sentry uses a unique combination of inset shadows (buttons feel pressed INTO the surface) and ambient glows (content radiates from the dark background). The deep purple ambient shadow (`rgba(22, 15, 36, 0.9)`) is the signature — it creates a bioluminescent quality where content seems to emit its own purple-tinted light.
|
||||
**Lime Squiggly Footer Divider** — a hand-drawn `{colors.accent-lime}` squiggle line, ~3px stroke, sitting above the footer at full container width. Replaces what would otherwise be a 1px hairline divider with a personality-laden flourish.
|
||||
|
||||
## 7. Do's and Don'ts
|
||||
**Starfield Hero Texture** — a faint white-on-violet pinprick pattern overlaid on the hero canvas at very low opacity. Adds atmospheric depth to the dark canvas without visible decoration. Implemented as a background image, not as repeating CSS.
|
||||
|
||||
**Window-Chrome UI Mock** — product UI screenshots framed in `{rounded.xxl}` containers, often tilted ±2–3 degrees off axis, positioned overlapping section boundaries on the dark feature pages. The chrome itself is just a rounded image with a subtle hairline; the content is the actual product UI.
|
||||
|
||||
**`link-on-dark`** — inline links in body copy on dark surfaces. Default text is `{colors.on-primary}` rendered in `{typography.body-md}` with a persistent underline; the underline is the entire affordance, no color change. Sits flush in copy with no padding, no rounded corners beyond the inherited `{rounded.xs}`.
|
||||
|
||||
**`link-on-light`** — inline links in body copy on light surfaces. Same shape contract as `link-on-dark`, but text is `{colors.ink-deep}`. Used across pricing, contact, and docs surfaces.
|
||||
|
||||
**`footer-light`** — site-wide footer on the light-canvas template (pricing, contact, docs).
|
||||
- Background `{colors.surface-canvas-light}`, text `{colors.ink-deep}`, type `{typography.caption}`, padding `{spacing.xxl} {spacing.xl}` (32px 24px). Topped by the lime squiggly divider — see Signature Components. Holds three to four columns of link groups, social icons in a horizontal strip at the bottom right, and a small legal/copyright row at the very bottom in `{typography.caption}`.
|
||||
|
||||
## Do's and Don'ts
|
||||
|
||||
### Do
|
||||
- Use deep purple backgrounds (`#1f1633`, `#150f23`) — never pure black (`#000000`)
|
||||
- Apply inset shadows on primary buttons for the tactile pressed effect
|
||||
- Use Dammit Sans ONLY for hero/display headings — Rubik for everything else
|
||||
- Apply `text-transform: uppercase` with `letter-spacing: 0.2px` on buttons and labels
|
||||
- Use the lime-green accent (`#c2ef4e`) sparingly for maximum impact
|
||||
- Employ frosted glass effects (`blur(18px) saturate(180%)`) for layered surfaces
|
||||
- Maintain the warm purple shadow tones — shadows should feel purple-tinted, not neutral gray
|
||||
- Use Rubik's 4-tier weight system: 400 (body), 500 (nav/emphasis), 600 (titles), 700 (CTAs)
|
||||
- Reserve `{colors.accent-lime}` for keyword-highlight chips inside display headlines and the footer squiggle divider — never use it as a button background, never as body text.
|
||||
- Pair every `button-primary` with `{typography.button-cap}` in uppercase with 0.2px tracking — the cadence is part of the brand, not a stylistic option.
|
||||
- Treat the dark canvas (`{colors.surface-canvas-dark}`) and light canvas (`{colors.surface-canvas-light}`) as two complete worlds — let one own marketing/feature pages and the other own transactional pages, with no half-measures.
|
||||
- Use sticker mascots to break section boundaries — let them overlap, tilt, and float; constraining them inside cards drains their personality.
|
||||
- Use `card-pricing-featured` (dark inverted tier) instead of an accent-bordered light tier for the featured pricing column.
|
||||
- Default body line-height to 1.5 on functional UI surfaces and 2.0 on marketing surfaces — the difference is intentional.
|
||||
|
||||
### Don't
|
||||
- Don't use pure black (`#000000`) for backgrounds — always use the warm purple-blacks
|
||||
- Don't apply Dammit Sans to body text or UI elements — it's display-only
|
||||
- Don't use standard gray (`#666`, `#999`) for borders — use purple-tinted grays (`#362d59`, `#584674`)
|
||||
- Don't drop the uppercase treatment on buttons — it's a system-wide pattern
|
||||
- Don't use sharp corners (0px radius) — minimum 6px for all interactive elements
|
||||
- Don't mix the lime-green accent with the coral/pink accents in the same component
|
||||
- Don't use flat (non-inset) shadows on primary buttons — the tactile quality is signature
|
||||
- Don't forget letter-spacing on uppercase text — 0.2px minimum
|
||||
- Don't introduce additional accent colors beyond `{colors.accent-lime}` and `{colors.accent-pink}` — adding teal, orange, or yellow dilutes the violet-and-lime signature.
|
||||
- Don't apply drop shadows to cards on dark canvas — depth comes from texture and illustration, not from light-on-dark shadows that would muddy the violet.
|
||||
- Don't use `{typography.display-hero}` (88px) for anything except the marketing hero — even sub-pages cap at `{typography.display-large}` (60px).
|
||||
- Don't put body text in `{colors.accent-lime}` — it's a chip color, not a type color, and breaks contrast at body sizes.
|
||||
- Don't soften the `{colors.primary}` button to a brand-violet — the near-black is the point; it reads as the most authoritative action regardless of canvas polarity.
|
||||
- Don't put illustrated mascots inside cards or constrained containers — their job is to break grid, not occupy it.
|
||||
|
||||
## 8. Responsive Behavior
|
||||
## Responsive Behavior
|
||||
|
||||
### Breakpoints
|
||||
|
||||
| Name | Width | Key Changes |
|
||||
|------|-------|-------------|
|
||||
| Mobile | <576px | Single column, hamburger nav, stacked CTAs |
|
||||
| Tablet | 576–768px | 2-column feature grids begin |
|
||||
| Small Desktop | 768–992px | Full navigation, side-by-side layouts |
|
||||
| Desktop | 992–1152px | Max-width container, full layout |
|
||||
| Large | >1152px | Content max-width maintained, generous margins |
|
||||
|---|---|---|
|
||||
| 4K / Wide | ≥ 1440px | Full 4-tier pricing row, hero illustration sits beside headline at full scale |
|
||||
| Desktop | 1152–1440px | Default content max-width sits at 1152px, all 4-tier patterns hold |
|
||||
| Laptop | 992–1151px | Pricing collapses to 2-up rows, nav remains horizontal |
|
||||
| Tablet | 768–991px | 2-column feature grids collapse to 1-up; nav still horizontal but compresses |
|
||||
| Mobile Large | 640–767px | Hamburger nav appears; hero display drops from 88px to ~56px |
|
||||
| Mobile | 576–639px | Single-column everything; section padding collapses from 96px to 32–48px |
|
||||
| Small Mobile | 1–575px | Compact mode; sticker mascots drop in size or hide entirely to preserve content priority |
|
||||
|
||||
### Touch Targets
|
||||
- Primary buttons hit a minimum 44×44px on mobile (12px vertical padding × 16px font + line-height = ~44px). Maintains WCAG AAA touch-target spec.
|
||||
- Pill tags and badges in nav and feature surfaces stay above 32×32px even at small mobile breakpoints; they enlarge if necessary rather than shrink.
|
||||
- Form fields stay at the 44px minimum height on mobile contact pages.
|
||||
|
||||
### Collapsing Strategy
|
||||
- Hero text: 88px Dammit Sans → 60px → mobile scales
|
||||
- Navigation: horizontal → hamburger with slide-out
|
||||
- Feature sections: side-by-side → stacked cards
|
||||
- Buttons: inline → full-width stacked on mobile
|
||||
- Container padding: 4rem → 2rem
|
||||
- **Hero display headline** drops from 88px → 60px → 48px across the breakpoint stair; the lime keyword chip preserves padding and corner radius at every step.
|
||||
- **Pricing tiers** stair-step from 4-up → 2-up → 1-up. The featured dark tier always remains visually distinguished — it never loses its inversion at any breakpoint.
|
||||
- **Sticker mascots** are progressively de-emphasized: at desktop they overlap section boundaries; at tablet they shift to inline within section padding; at small mobile most are hidden via `display: none` to keep the content scan-able.
|
||||
- **Top nav** collapses to a hamburger below 768px; the dropdown menu uses the same canvas polarity as the page (dark on hero, light on pricing).
|
||||
- **Code blocks** preserve 16px Monaco at every breakpoint — they never scale down — but switch to horizontal scroll on overflow rather than wrap.
|
||||
|
||||
## 9. Agent Prompt Guide
|
||||
### Image Behavior
|
||||
- Product UI mocks scale proportionally; on small mobile they often anchor to one edge with horizontal overflow rather than shrink to illegibility.
|
||||
- Sticker mascots scale by 50–70% at mobile breakpoints, preserving their personality but ceding screen space to content.
|
||||
- The lime footer squiggle scales the SVG to container width while keeping stroke width visually consistent.
|
||||
|
||||
### Quick Color Reference
|
||||
- Background: `#1f1633` (primary), `#150f23` (deeper)
|
||||
- Text: `#ffffff` (primary), `#e5e7eb` (secondary)
|
||||
- Interactive: `#6a5fc1` (links/hover), `#79628c` (buttons)
|
||||
- Accent: `#c2ef4e` (lime highlight), `#ffb287` (coral focus)
|
||||
- Border: `#362d59` (dark), `#cfcfdb` (light context)
|
||||
## Iteration Guide
|
||||
|
||||
### Example Component Prompts
|
||||
- "Create a hero section on deep purple background (#1f1633). Headline at 88px Dammit Sans weight 700, line-height 1.20, white text. Sub-text at 16px Rubik weight 400, line-height 1.50. White solid CTA button (8px radius, 12px 16px padding), hover transitions to #6a5fc1."
|
||||
- "Design a navigation bar: transparent over dark background. Rubik 15px weight 500, white text. Uppercase category labels with 0.2px letter-spacing. Hover color #6a5fc1."
|
||||
- "Build a primary button: background #79628c, border 1px solid #584674, inset shadow rgba(0,0,0,0.1) 0px 1px 3px, white uppercase text at 14px Rubik weight 700, letter-spacing 0.2px, radius 13px. Hover: shadow rgba(0,0,0,0.18) 0px 0.5rem 1.5rem."
|
||||
- "Create a glass card panel: background rgba(255,255,255,0.18), backdrop-filter blur(18px) saturate(180%), radius 12px. White text content inside."
|
||||
- "Design a feature section: #150f23 background, 24px Rubik weight 500 heading, 16px Rubik weight 400 body text. 14px uppercase lime-green (#c2ef4e) label above heading."
|
||||
|
||||
### Iteration Guide
|
||||
1. Always start with the dark purple background — the color palette is built FOR dark mode
|
||||
2. Use inset shadows on buttons, ambient purple glows on hero sections
|
||||
3. Uppercase + letter-spacing is the systematic pattern for labels, buttons, and captions
|
||||
4. Lime green (#c2ef4e) is the "pop" color — use once per section maximum
|
||||
5. Frosted glass for overlaid panels, solid purple for primary surfaces
|
||||
6. Rubik handles 90% of typography — Dammit Sans is hero-only
|
||||
1. Focus on ONE component at a time. Don't rebuild the system — extend it.
|
||||
2. Reference component names and tokens directly (`{colors.accent-lime}`, `{button-primary}-pressed`, `{rounded.xxl}`) — do not paraphrase.
|
||||
3. Run `npx @google/design.md lint DESIGN.md` after edits — `broken-ref`, `contrast-ratio`, and `orphaned-tokens` warnings flag issues automatically.
|
||||
4. Add new variants as separate component entries (`-pressed`, `-disabled`, `-focused`) — do not bury them inside prose.
|
||||
5. Default to `{typography.body-md}` for product UI body and `{typography.body-lg}` for marketing prose — the leading difference is intentional and load-bearing.
|
||||
6. Keep `{colors.accent-lime}` scarce — one lime element per viewport. The signature only works because it's rare.
|
||||
7. When polarizing a new surface, choose one canvas (`{colors.surface-canvas-dark}` or `{colors.surface-canvas-light}`) and commit to it; don't blend the two on a single page band.
|
||||
|
||||
@ -1,350 +1,516 @@
|
||||
# Design System Inspired by Shopify
|
||||
---
|
||||
version: alpha
|
||||
name: Shopifi Inspired
|
||||
description: An inspired interpretation of Shopifi's design language — a cinematic commerce platform that runs two parallel design tracks. The marketing-hero and product-narrative pages live on near-black canvases with full-bleed photography of merchants, giant Neue Haas Grotesk display type at thin weights, and a single black-pill CTA stroked in white. The transactional pages (pricing, signup, dashboards) flip to a cream-mint canvas with pastel aloe and pistachio greens, the same pill button vocabulary, and Inter for UI body. The two tracks share typographic DNA but diverge sharply in canvas polarity — and that choice is the brand.
|
||||
|
||||
## 1. Visual Theme & Atmosphere
|
||||
colors:
|
||||
primary: "#000000"
|
||||
ink: "#000000"
|
||||
on-primary: "#ffffff"
|
||||
on-dark: "#ffffff"
|
||||
canvas-night: "#000000"
|
||||
canvas-night-elevated: "#0a0a0a"
|
||||
canvas-light: "#ffffff"
|
||||
canvas-cream: "#fbfbf5"
|
||||
surface-elevated-dark: "#1e2c31"
|
||||
shade-30: "#d4d4d8"
|
||||
shade-40: "#a1a1aa"
|
||||
shade-50: "#71717a"
|
||||
shade-60: "#52525b"
|
||||
shade-70: "#3f3f46"
|
||||
hairline-light: "#e4e4e7"
|
||||
hairline-dark: "#1e2c31"
|
||||
aloe-10: "#c1fbd4"
|
||||
pistachio-10: "#d4f9e0"
|
||||
link-cool-1: "#9dabad"
|
||||
link-cool-2: "#9797a2"
|
||||
link-cool-3: "#bdbdca"
|
||||
link-mint: "#99b3ad"
|
||||
|
||||
Shopify.com is a dark-first digital theatre — a website that stages its commerce platform like a cinematic premiere. The entire experience unfolds against an abyss of near-black surfaces that carry the faintest whisper of deep forest green (`#02090A`, `#061A1C`, `#102620`), creating a nocturnal atmosphere that feels less like a SaaS marketing page and more like an exclusive product reveal at a tech keynote. This darkness isn't cold or corporate — it's the warm, enveloping dark of a luxury experience, like sitting in the front row of a darkened auditorium.
|
||||
typography:
|
||||
display-xxl:
|
||||
fontFamily: "NeueHaasGrotesk Display, Helvetica, Arial, sans-serif"
|
||||
fontSize: 96px
|
||||
fontWeight: 330
|
||||
lineHeight: 1.0
|
||||
letterSpacing: 2.4px
|
||||
fontFeature: ss03
|
||||
display-xl:
|
||||
fontFamily: "NeueHaasGrotesk Display, Helvetica, Arial, sans-serif"
|
||||
fontSize: 70px
|
||||
fontWeight: 330
|
||||
lineHeight: 1.0
|
||||
letterSpacing: 0
|
||||
fontFeature: ss03
|
||||
display-lg:
|
||||
fontFamily: "NeueHaasGrotesk Display, Helvetica, Arial, sans-serif"
|
||||
fontSize: 55px
|
||||
fontWeight: 330
|
||||
lineHeight: 1.16
|
||||
letterSpacing: 0
|
||||
fontFeature: ss03
|
||||
display-md:
|
||||
fontFamily: "NeueHaasGrotesk Display, Helvetica, Arial, sans-serif"
|
||||
fontSize: 48px
|
||||
fontWeight: 330
|
||||
lineHeight: 1.14
|
||||
letterSpacing: 0
|
||||
fontFeature: ss03
|
||||
heading-xl:
|
||||
fontFamily: "NeueHaasGrotesk Display, Helvetica, Arial, sans-serif"
|
||||
fontSize: 28px
|
||||
fontWeight: 500
|
||||
lineHeight: 1.28
|
||||
letterSpacing: 0.42px
|
||||
fontFeature: ss03
|
||||
heading-lg:
|
||||
fontFamily: "NeueHaasGrotesk Display, Helvetica, Arial, sans-serif"
|
||||
fontSize: 24px
|
||||
fontWeight: 400
|
||||
lineHeight: 1.14
|
||||
letterSpacing: 0.36px
|
||||
fontFeature: ss03
|
||||
heading-md:
|
||||
fontFamily: "NeueHaasGrotesk Display, Helvetica, Arial, sans-serif"
|
||||
fontSize: 20px
|
||||
fontWeight: 500
|
||||
lineHeight: 1.4
|
||||
letterSpacing: 0.3px
|
||||
fontFeature: ss03
|
||||
heading-sm:
|
||||
fontFamily: "NeueHaasGrotesk Display, Helvetica, Arial, sans-serif"
|
||||
fontSize: 18px
|
||||
fontWeight: 500
|
||||
lineHeight: 1.25
|
||||
letterSpacing: 0.72px
|
||||
fontFeature: ss03
|
||||
body-lg:
|
||||
fontFamily: "Inter Variable, Inter, Helvetica, Arial, sans-serif"
|
||||
fontSize: 18px
|
||||
fontWeight: 550
|
||||
lineHeight: 1.56
|
||||
letterSpacing: 0
|
||||
fontFeature: ss03
|
||||
body-md:
|
||||
fontFamily: "Inter Variable, Inter, Helvetica, Arial, sans-serif"
|
||||
fontSize: 16px
|
||||
fontWeight: 420
|
||||
lineHeight: 1.5
|
||||
letterSpacing: 0
|
||||
fontFeature: ss03
|
||||
body-strong:
|
||||
fontFamily: "Inter Variable, Inter, Helvetica, Arial, sans-serif"
|
||||
fontSize: 16px
|
||||
fontWeight: 550
|
||||
lineHeight: 1.5
|
||||
letterSpacing: 0
|
||||
fontFeature: ss03
|
||||
caption:
|
||||
fontFamily: "Inter Variable, Inter, Helvetica, Arial, sans-serif"
|
||||
fontSize: 14px
|
||||
fontWeight: 500
|
||||
lineHeight: 1.49
|
||||
letterSpacing: 0.28px
|
||||
fontFeature: ss03
|
||||
micro:
|
||||
fontFamily: "Inter Variable, Inter, Helvetica, Arial, sans-serif"
|
||||
fontSize: 13px
|
||||
fontWeight: 500
|
||||
lineHeight: 1.5
|
||||
letterSpacing: -0.13px
|
||||
fontFeature: ss03
|
||||
eyebrow-cap:
|
||||
fontFamily: "Inter Variable, Inter, Helvetica, Arial, sans-serif"
|
||||
fontSize: 12px
|
||||
fontWeight: 400
|
||||
lineHeight: 1.2
|
||||
letterSpacing: 0.72px
|
||||
fontFeature: ss03
|
||||
code:
|
||||
fontFamily: "ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace"
|
||||
fontSize: 16px
|
||||
fontWeight: 400
|
||||
lineHeight: 1.5
|
||||
letterSpacing: 0
|
||||
fontFeature: ss03
|
||||
|
||||
The typography is the undeniable star. NeueHaasGrotesk — a refined Helvetica descendant — appears at monumental scale (96px) with impossibly light weight (330-400), creating headlines that feel etched in light rather than printed in ink. The `ss03` OpenType feature gives letterforms a distinctive character that separates Shopify's type from generic Helvetica usage. Below the display layer, Inter Variable handles body text with surgical precision, using equally unusual variable weights (420, 450, 550) that live in the spaces between traditional weight stops. This precision signals a company that sweats every detail.
|
||||
rounded:
|
||||
xs: 4px
|
||||
sm: 5px
|
||||
md: 8px
|
||||
lg: 12px
|
||||
xl: 20px
|
||||
pill: 9999px
|
||||
|
||||
Color is used with extreme restraint. The primary accent is Shopify Neon Green (`#36F4A4`) — an electric mint that appears exclusively on focus rings and accent highlights, pulsing like a bioluminescent signal against the dark canvas. Softer green tints (Aloe `#C1FBD4`, Pistachio `#D4F9E0`) provide atmospheric washes. White is the only text color that matters on dark surfaces, while a zinc-based neutral scale (`#A1A1AA` through `#3F3F46`) handles the hierarchy of quiet information. The result is a design that makes commerce technology feel like it belongs in a science-fiction future.
|
||||
spacing:
|
||||
xxs: 2px
|
||||
xs: 4px
|
||||
sm: 8px
|
||||
md: 12px
|
||||
lg: 16px
|
||||
xl: 24px
|
||||
xxl: 32px
|
||||
huge: 64px
|
||||
|
||||
components:
|
||||
button-primary-pill:
|
||||
backgroundColor: "{colors.primary}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.pill}"
|
||||
padding: 12px 24px
|
||||
button-primary-pill-pressed:
|
||||
backgroundColor: "{colors.shade-70}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.pill}"
|
||||
padding: 12px 24px
|
||||
button-outline-on-dark:
|
||||
backgroundColor: "{colors.canvas-night}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.pill}"
|
||||
padding: 12px 26px
|
||||
button-outline-on-light:
|
||||
backgroundColor: "{colors.canvas-light}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.pill}"
|
||||
padding: 12px 24px
|
||||
button-aloe-pill:
|
||||
backgroundColor: "{colors.aloe-10}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.pill}"
|
||||
padding: 12px 24px
|
||||
text-input:
|
||||
backgroundColor: "{colors.canvas-light}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.md}"
|
||||
padding: 10px 12px
|
||||
card-pricing:
|
||||
backgroundColor: "{colors.canvas-light}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.lg}"
|
||||
padding: 32px
|
||||
card-pricing-featured:
|
||||
backgroundColor: "{colors.aloe-10}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.lg}"
|
||||
padding: 32px
|
||||
card-feature-cinematic:
|
||||
backgroundColor: "{colors.canvas-night-elevated}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.body-lg}"
|
||||
rounded: "{rounded.lg}"
|
||||
padding: 32px
|
||||
card-pistachio-band:
|
||||
backgroundColor: "{colors.pistachio-10}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.lg}"
|
||||
padding: 32px
|
||||
card-photo-frame:
|
||||
backgroundColor: "{colors.canvas-night}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.xl}"
|
||||
padding: 0px
|
||||
pill-tag-mint:
|
||||
backgroundColor: "{colors.aloe-10}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.eyebrow-cap}"
|
||||
rounded: "{rounded.pill}"
|
||||
padding: 4px 12px
|
||||
pill-tag-shade:
|
||||
backgroundColor: "{colors.shade-30}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.eyebrow-cap}"
|
||||
rounded: "{rounded.pill}"
|
||||
padding: 4px 12px
|
||||
nav-bar-light:
|
||||
backgroundColor: "{colors.canvas-light}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 16px 24px
|
||||
nav-bar-dark:
|
||||
backgroundColor: "{colors.canvas-night}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 16px 24px
|
||||
link-on-dark:
|
||||
backgroundColor: "{colors.canvas-night}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 0px
|
||||
footer-dark:
|
||||
backgroundColor: "{colors.canvas-night}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.caption}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 64px 24px
|
||||
footer-light:
|
||||
backgroundColor: "{colors.canvas-light}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.caption}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 64px 24px
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
Shopifi runs two parallel design tracks that share typographic DNA and a single button vocabulary, but diverge in canvas polarity. The marketing track lives on `{colors.canvas-night}` (`#000000`) — full-bleed cinematic photography of merchants, giant `{typography.display-xxl}` headlines in Neue Haas Grotesk Display set at weight 330 (a thin, almost editorial cut), and a single CTA: a white-stroked black pill with the form `button-outline-on-dark`. The pages read like the spread of a high-end print magazine: lots of black, lots of negative space, photography that doesn't compete with text, and one and only one action per band.
|
||||
|
||||
The transactional track flips to `{colors.canvas-light}` and `{colors.canvas-cream}` (an off-white that's barely warmer than pure white). Pricing tiers, comparison tables, and signup flows sit on this lighter canvas, with the same pill button system but in inverse polarity (a solid black pill with white text, or a `{colors.aloe-10}` mint pill for the featured / "Start free trial" tier). The accents — `{colors.aloe-10}` mint and `{colors.pistachio-10}` pistachio — show up only on the light track, never on the cinematic dark hero pages.
|
||||
|
||||
Typography is split across three families. **Neue Haas Grotesk Display** at thin weights (330–500) handles every display, headline, and editorial moment — the brand's identity is that thin display cut. **Inter Variable** at 420–550 weights handles every UI body, button label, caption, and form field — utility text that doesn't fight the display. **ui-monospace** appears only in code blocks and rare technical eyebrows. Across all three families, the OpenType `ss03` stylistic set is enabled — it's the brand's character-level signature, applied universally.
|
||||
|
||||
**Key Characteristics:**
|
||||
- Dark-first design with deep forest-teal undertones (not pure black)
|
||||
- Ultra-light display typography (weight 330) at monumental scale (96px) creating an ethereal presence
|
||||
- Neon Green (`#36F4A4`) as the singular high-energy accent against darkness
|
||||
- Full-pill buttons (9999px radius) as the primary interactive shape
|
||||
- Layered, multi-stage box shadows creating photographic depth
|
||||
- Product screenshots embedded in dark UI contexts, matching the surrounding darkness
|
||||
- Zinc-based neutral scale for text hierarchy — balanced between warm and cool
|
||||
- Two-canvas system: `{colors.canvas-night}` for cinematic marketing, `{colors.canvas-light}` / `{colors.canvas-cream}` for transactional surfaces — never blended.
|
||||
- Pill-shape (`{rounded.pill}`) is the only button shape across both tracks; rounded rectangles do not exist for buttons.
|
||||
- Thin-weight (330) display typography is the signature; `{typography.display-xxl}` at 96px / weight 330 is the brand's loudest visual.
|
||||
- Aloe and pistachio greens (`{colors.aloe-10}`, `{colors.pistachio-10}`) are reserved for the light track — they signal commerce, growth, transactional success.
|
||||
- Photography is full-bleed, edge-to-edge, never inset in cards on the cinematic track; merchants and storefront imagery do the heavy visual lifting that gradients and illustrations would do elsewhere.
|
||||
- The OpenType `ss03` stylistic set is enabled across every text role — a character-level unifier that tracks across both tracks.
|
||||
- Tight letter-spacing on display sizes (2.4px positive tracking on 96px display) gives the thin weight extra optical air.
|
||||
|
||||
## 2. Color Palette & Roles
|
||||
## Colors
|
||||
|
||||
### Primary
|
||||
> **Source pages:** home (`/`), `/start`, `/website/builder`, `/pricing`.
|
||||
|
||||
- **Shopify White** (`#FFFFFF`): Primary text on dark surfaces, button fills, high-contrast elements
|
||||
- **Shopify Black** (`#000000`): Body background, button text on white, maximum contrast base (--color-shade-100)
|
||||
### Brand & Accent
|
||||
- **Aloe** (`{colors.aloe-10}` — `#c1fbd4`): The featured-tier and "growth" accent. Used as a pill button background on light surfaces and as a feature-card fill in the pricing comparison band.
|
||||
- **Pistachio** (`{colors.pistachio-10}` — `#d4f9e0`): Softer than aloe; used as a wide section band fill on the light track to signal a different category of feature without leaving the green family.
|
||||
- **Cool Link Tones** (`{colors.link-cool-1}` `#9dabad`, `{colors.link-cool-2}` `#9797a2`, `{colors.link-cool-3}` `#bdbdca`, `{colors.link-mint}` `#99b3ad`): Muted footer / tertiary link colors used on dark surfaces to create a quiet hierarchy below the primary white type.
|
||||
|
||||
### Secondary & Accent
|
||||
### Surface
|
||||
- **Canvas Night** (`{colors.canvas-night}` — `#000000`): Pure black hero, cinematic feature pages, footer.
|
||||
- **Canvas Night Elevated** (`{colors.canvas-night-elevated}` — `#0a0a0a`): Cards on cinematic surfaces, video frames.
|
||||
- **Surface Elevated Dark** (`{colors.surface-elevated-dark}` — `#1e2c31`): Dark teal-shifted surface used on a small subset of dark cards to introduce subtle depth without breaking the black.
|
||||
- **Canvas Light** (`{colors.canvas-light}` — `#ffffff`): Pricing, signup, comparison tables.
|
||||
- **Canvas Cream** (`{colors.canvas-cream}` — `#fbfbf5`): Slightly warm off-white used on the pricing-page background canvas — invisibly different from `#ffffff` but adds editorial warmth.
|
||||
- **Hairline Light** (`{colors.hairline-light}` — `#e4e4e7`): 1px borders on light cards, table dividers.
|
||||
- **Hairline Dark** (`{colors.hairline-dark}` — `#1e2c31`): 1px borders on the rare dark cards that have visible chrome.
|
||||
|
||||
- **Neon Green** (`#36F4A4`): The signature accent — focus rings, interactive highlights, active state indicators. Electric and bioluminescent
|
||||
- **Aloe** (`#C1FBD4`): Soft green wash for decorative backgrounds, atmospheric cards (--color-aloe-10)
|
||||
- **Pistachio** (`#D4F9E0`): Lightest green tint for subtle surface differentiation (--color-pistachio-10)
|
||||
### Shade Ladder
|
||||
- **Shade-30** (`{colors.shade-30}` — `#d4d4d8`): Tag / chip background on light, footer hairline on dark.
|
||||
- **Shade-40** (`{colors.shade-40}` — `#a1a1aa`): Tertiary text on light, secondary text on dark.
|
||||
- **Shade-50** (`{colors.shade-50}` — `#71717a`): Secondary text on light.
|
||||
- **Shade-60** (`{colors.shade-60}` — `#52525b`): Tertiary text on light, deep on dark.
|
||||
- **Shade-70** (`{colors.shade-70}` — `#3f3f46`): Pressed-state of the primary pill button; deep dark surface accent.
|
||||
|
||||
### Surface & Background
|
||||
### Text
|
||||
- **Ink** (`{colors.ink}` — `#000000`): All text on light canvas.
|
||||
- **On Primary** (`{colors.on-primary}` — `#ffffff`): All text on dark canvas + filled-pill labels.
|
||||
|
||||
- **Void** (`#000000`): Root page background — true black for maximum depth
|
||||
- **Deep Teal** (`#02090A`): Card surfaces, content containers — near-black with green undertone
|
||||
- **Dark Forest** (`#061A1C`): Section backgrounds with visible green character
|
||||
- **Forest** (`#102620`): Elevated dark surfaces, header backgrounds — the warmest dark shade
|
||||
- **Dark Card Border** (`#1E2C31`): Card borders on dark surfaces, subtle boundary definition
|
||||
|
||||
### Neutrals & Text (Zinc Scale)
|
||||
|
||||
- **Shade-30** (`#D4D4D8`): Lightest neutral, barely-there borders on dark (--color-shade-30)
|
||||
- **Muted Text** (`#A1A1AA`): Secondary text, metadata, descriptions — the quiet voice
|
||||
- **Shade-50** (`#71717A`): Tertiary text, timestamps, least important info (--color-shade-50)
|
||||
- **Shade-60** (`#52525B`): Disabled text, decorative neutrals (--color-shade-60)
|
||||
- **Shade-70** (`#3F3F46`): Subtle dividers, barely-visible UI boundaries (--color-shade-70)
|
||||
- **Light Border** (`#E4E4E7`): Borders on light surfaces (rare — only in light-mode modals)
|
||||
|
||||
### Semantic & Accent
|
||||
|
||||
- **Link Muted** (`#9797A2`): Muted link text with underline decoration
|
||||
- **Link Sage** (`#9DABAD`): Teal-tinted muted links
|
||||
- **Link Lavender** (`#BDBDCA`): Lighter link variant
|
||||
- **Link Mint** (`#99B3AD`): Green-tinted link variant for themed sections
|
||||
|
||||
### Gradient System
|
||||
|
||||
- **Dark Teal Wash**: Radial gradient from `#102620` center to `#02090A` edge — used behind product showcases
|
||||
- **Green Atmospheric**: Subtle green-tinted ambient gradients behind hero sections, creating depth without solid colors
|
||||
- **Spotlight**: Focused bright area fading to black — creates keynote-style presentation lighting
|
||||
|
||||
## 3. Typography Rules
|
||||
## Typography
|
||||
|
||||
### Font Family
|
||||
|
||||
**Display:** NeueHaasGrotesk (refined Helvetica descendant, variable font)
|
||||
- Fallbacks: Helvetica, Arial, sans-serif
|
||||
- OpenType features: `ss03` (stylistic set 3 — distinctive letterform alternates)
|
||||
- Available weights: 330, 360, 400, 500, 750 (variable)
|
||||
- Used for all headings, hero text, and large display elements
|
||||
The display tier is **Neue Haas Grotesk Display** at thin weights (330–500). When unavailable, fall back to **Helvetica** at light weight, then Arial. The thin-weight cut is the brand — no substitution should default to weight 400+.
|
||||
|
||||
**Body:** Inter-Variable
|
||||
- Fallbacks: Helvetica, Arial, sans-serif
|
||||
- OpenType features: `ss03`
|
||||
- Available weights: 400, 420, 450, 500, 550 (variable)
|
||||
- Used for body text, links, buttons, UI elements
|
||||
The UI tier is **Inter Variable** at 420–550 — a variable font with sub-weight precision that lets the system span body (420), strong (550), and caption (500) without jumping to heavier tiers. Inter is open-source via Google Fonts.
|
||||
|
||||
**Mono:** ui-monospace
|
||||
- Fallbacks: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New
|
||||
- Used for code snippets, data labels, technical content
|
||||
The code tier is **ui-monospace**, the system mono — preferred over a webfont mono to avoid unnecessary downloads.
|
||||
|
||||
The OpenType `ss03` stylistic set is enabled across every role. It alters specific glyph forms (lowercase `a`, `g`, single-story numerals) for a slightly more geometric character. Apply via `font-feature-settings: "ss03"` on the body element or root.
|
||||
|
||||
### Hierarchy
|
||||
|
||||
| Role | Size | Weight | Line Height | Letter Spacing | Notes |
|
||||
|------|------|--------|-------------|----------------|-------|
|
||||
| Display XL | 96px | 400 | 1.00 | — | NeueHaasGrotesk, hero headlines, "ss03" |
|
||||
| Display XL Bold | 90.74px | 750 | 1.00 | 4.54px | NeueHaasGrotesk, emphasis display |
|
||||
| Display XL Tracked | 96px | 400 | 1.00 | 2.4px | NeueHaasGrotesk, spaced display |
|
||||
| Display Light | 96px | 330 | 0.96 | — | NeueHaasGrotesk, ethereal display |
|
||||
| Heading 1 | 70px | 330 | 1.00 | — | NeueHaasGrotesk, section titles |
|
||||
| Heading 2 | 55px | 330 | 1.16 | — | NeueHaasGrotesk, subsections |
|
||||
| Heading 3 | 48px | 330 | 1.14 | — | NeueHaasGrotesk, feature titles |
|
||||
| Heading 4 | 32px | 360 | 1.14 | 0.32px | NeueHaasGrotesk, card headings |
|
||||
| Heading 5 | 28px | 500 | 1.28 | 0.42px | NeueHaasGrotesk, small headings |
|
||||
| Heading 6 | 24px | 400 | 1.14 | 0.36px | NeueHaasGrotesk, minor headings |
|
||||
| Body Large | 20px | 500 | 1.40 | 0.3px | NeueHaasGrotesk / Inter, lead paragraphs |
|
||||
| Body | 18px | 400 | 1.56 | — | Inter-Variable, standard body |
|
||||
| Body Medium | 18px | 550 | 1.56 | — | Inter-Variable, emphasized body |
|
||||
| Body Small | 16px | 400 | 1.50 | — | Inter / NeueHaasGrotesk, compact body |
|
||||
| Body Small Medium | 16px | 420 | 1.50 | — | Inter-Variable, slightly emphasized |
|
||||
| Button | 16px | 400 | 1.50 | — | NeueHaasGrotesk, CTA text |
|
||||
| Nav Link | 18px | 500 | 1.25 | 0.72px | NeueHaasGrotesk, navigation items |
|
||||
| Caption | 14px | 500 | 1.49 | 0.28px | NeueHaasGrotesk / Inter, metadata |
|
||||
| Caption Medium | 14px | 550 | 1.49 | 0.28px | Inter-Variable, emphasized caption |
|
||||
| Overline | 15.36px | 400 | 1.50 | 1.54px | NeueHaasGrotesk, wide-tracked labels |
|
||||
| Micro | 13px | 500 | 1.50 | -0.13px | Inter, tight-tracked small text |
|
||||
| Label | 12px | 400 | 1.20 | 0.72px | Inter, uppercase labels |
|
||||
| Code | 16px | 400 | 1.50 | — | ui-monospace, uppercase, code blocks |
|
||||
| Code Small | 12px | 400 | 1.33 | — | ui-monospace, uppercase, inline code |
|
||||
| Token | Size | Weight | Line Height | Letter Spacing | Use |
|
||||
|---|---|---|---|---|---|
|
||||
| `{typography.display-xxl}` | 96px | 330 | 1.0 | 2.4px | Cinematic hero headline |
|
||||
| `{typography.display-xl}` | 70px | 330 | 1.0 | 0 | Section opener on cinematic pages |
|
||||
| `{typography.display-lg}` | 55px | 330 | 1.16 | 0 | Pricing-page page title |
|
||||
| `{typography.display-md}` | 48px | 330 | 1.14 | 0 | Sub-section headline on light track |
|
||||
| `{typography.heading-xl}` | 28px | 500 | 1.28 | 0.42px | Card title / pricing tier name |
|
||||
| `{typography.heading-lg}` | 24px | 400 | 1.14 | 0.36px | Compact card title |
|
||||
| `{typography.heading-md}` | 20px | 500 | 1.4 | 0.3px | Section sub-heading |
|
||||
| `{typography.heading-sm}` | 18px | 500 | 1.25 | 0.72px | Eyebrow / mini-section label |
|
||||
| `{typography.body-lg}` | 18px | 550 | 1.56 | 0 | Marketing body lead, large body |
|
||||
| `{typography.body-md}` | 16px | 420 | 1.5 | 0 | Default UI body, pill-button labels |
|
||||
| `{typography.body-strong}` | 16px | 550 | 1.5 | 0 | Emphasized body run |
|
||||
| `{typography.caption}` | 14px | 500 | 1.49 | 0.28px | Helper copy, footnotes |
|
||||
| `{typography.micro}` | 13px | 500 | 1.5 | -0.13px | Pricing fine print |
|
||||
| `{typography.eyebrow-cap}` | 12px | 400 | 1.2 | 0.72px | All-caps eyebrow above large headlines |
|
||||
| `{typography.code}` | 16px | 400 | 1.5 | 0 | Code blocks |
|
||||
|
||||
### Principles
|
||||
- **Display thinness is the brand.** Always render display sizes at weight 330 — never 400+. The thinness is a deliberate editorial choice that makes the giant size feel quiet.
|
||||
- **Display in NHGD, body in Inter.** Don't push body roles up to NHGD; don't push display roles down to Inter.
|
||||
- **Tracking lifts on display.** The 96px hero gets +2.4px positive tracking — the thin glyphs need air. At 70px and below, tracking returns to 0.
|
||||
|
||||
Shopify's typography is a masterclass in variable font precision. The display layer lives almost exclusively at weights 330-400 — featherweight text that appears to hover above the dark background like projected light. This is the opposite of the bold, heavy approach most SaaS sites take: where others shout, Shopify whispers at scale. The 96px headlines at weight 330 create a paradox of enormous size and delicate stroke that feels both monumental and fragile. The `ss03` OpenType feature activates a stylistic set that gives specific characters (likely 'a', 'g', and certain numerals) a more refined appearance, distinguishing Shopify's typography from standard Helvetica Neue usage. Inter Variable handles the body layer with surgical precision, using weights like 420 and 550 that exist between the traditional stops — every piece of text has exactly the visual weight it needs.
|
||||
### Note on Font Substitutes
|
||||
Open substitutes for Neue Haas Grotesk Display: **Helvetica Now Display** (proprietary) or **Inter Display** at light weights (open-source) are the closest matches. Avoid Helvetica Neue at default weight — it's too heavy for the brand's thin tier. **Inter Variable** is open-source via Google Fonts and is the canonical body face — no substitute needed.
|
||||
|
||||
## 4. Component Stylings
|
||||
|
||||
### Buttons
|
||||
|
||||
**Primary (White Fill)**
|
||||
- Background: White (`#FFFFFF`)
|
||||
- Text: Black (`#000000`)
|
||||
- Border: 2px solid transparent
|
||||
- Border radius: full pill (9999px)
|
||||
- Padding: 12px 26px 12px 16px (asymmetric — more right padding for visual balance)
|
||||
- Hover: slight opacity reduction or background shift
|
||||
- Focus: 2px `#36F4A4` (Neon Green) outline ring
|
||||
- Transition: all 200ms ease
|
||||
|
||||
**Secondary (Ghost/Outlined)**
|
||||
- Background: transparent
|
||||
- Text: White (`#FFFFFF`)
|
||||
- Border: 2px solid White (`#FFFFFF`)
|
||||
- Border radius: full pill (9999px)
|
||||
- Padding: 12px 26px 12px 16px
|
||||
- Hover: fills to white bg with black text
|
||||
- Focus: 2px `#36F4A4` outline
|
||||
|
||||
**Badge/Tag (Neutral Filled)**
|
||||
- Background: `rgba(255, 255, 255, 0.2)` (frosted glass)
|
||||
- Text: White (`#FFFFFF`)
|
||||
- Border: none
|
||||
- Border radius: subtly rounded (4px)
|
||||
- Padding: 12px 16px
|
||||
- Font: 16px regular
|
||||
|
||||
### Cards & Containers
|
||||
|
||||
- Background: Deep Teal (`#02090A`) on dark pages
|
||||
- Border: 1px solid `#1E2C31` (Dark Card Border) — barely visible boundary
|
||||
- Border radius: 8px for standard cards, 12px for featured cards, 20px 20px 0 0 for top-rounded cards
|
||||
- Shadow: Multi-layered system:
|
||||
- Resting: `rgba(0,0,0,0.1) 0px 0px 0px 1px, rgba(0,0,0,0.1) 0px 2px 2px, rgba(0,0,0,0.1) 0px 4px 4px, rgba(0,0,0,0.1) 0px 8px 8px` + `rgba(255,255,255,0.03) 0px 1px 0px inset`
|
||||
- The inset white highlight creates a subtle top-edge glow
|
||||
- Hover: shadow expands, card may slightly brighten
|
||||
- Transition: box-shadow 300ms ease, transform 200ms ease
|
||||
|
||||
### Inputs & Forms
|
||||
|
||||
- Background: transparent or Dark Forest (`#061A1C`)
|
||||
- Text: White (`#FFFFFF`)
|
||||
- Border: 1px solid `#3F3F46` (Shade-70)
|
||||
- Border radius: 8px
|
||||
- Padding: 12px 16px
|
||||
- Focus: 2px solid `#36F4A4` (Neon Green focus ring)
|
||||
- Placeholder: Shade-50 (`#71717A`)
|
||||
- Transition: border-color 200ms ease
|
||||
|
||||
### Navigation
|
||||
|
||||
- Background: transparent (overlaid on dark hero), becomes Forest (`#102620`) on scroll
|
||||
- Height: ~64px
|
||||
- Left: Shopify wordmark logo (SVG, white on dark)
|
||||
- Center/Right: nav links in 18px/500 NeueHaasGrotesk, white, letter-spacing 0.72px
|
||||
- CTA: White pill button "Start for free" (right)
|
||||
- Secondary CTA: Ghost button with white border
|
||||
- Hover: links shift to Muted Text (`#A1A1AA`) or gain underline
|
||||
- Mobile: hamburger menu, full-screen dark overlay
|
||||
- Transition: background 300ms ease on scroll
|
||||
|
||||
### Image Treatment
|
||||
|
||||
- Product screenshots: embedded in dark UI contexts, matching the surrounding darkness
|
||||
- Admin interface previews: shown on dark backgrounds with subtle card borders
|
||||
- Aspect ratios: varied — hero images are wide (16:9-ish), feature shots are flexible
|
||||
- All images sit flush within dark containers — no bright borders or frames
|
||||
- Lazy loading with dark placeholder surfaces
|
||||
|
||||
### Trust Indicators
|
||||
|
||||
- Statistics displayed prominently: "15+" (years), "150M+" (buyers)
|
||||
- Numbers at display scale in NeueHaasGrotesk
|
||||
- Partner/developer ecosystem callout sections
|
||||
- Dark-themed testimonials integrated into the page flow
|
||||
|
||||
## 5. Layout Principles
|
||||
## Layout
|
||||
|
||||
### Spacing System
|
||||
|
||||
Base unit: 8px
|
||||
|
||||
| Token | Value | Use |
|
||||
|-------|-------|-----|
|
||||
| space-1 | 4px | Tight inline gaps |
|
||||
| space-2 | 8px | Base unit, icon gaps |
|
||||
| space-3 | 12px | Card padding, tight margins |
|
||||
| space-4 | 16px | Standard element padding |
|
||||
| space-5 | 24px | Card gaps, section padding |
|
||||
| space-6 | 28px | Medium section spacing |
|
||||
| space-7 | 32px | Section breaks |
|
||||
| space-8 | 36px | Large padding |
|
||||
| space-9 | 40px | Major section padding |
|
||||
| space-10 | 64px | Hero section padding, large gaps |
|
||||
- **Base unit**: 8px (with denser sub-units 1, 2, 3, 4 for fine work).
|
||||
- **Tokens**: `{spacing.xxs}` 2px · `{spacing.xs}` 4px · `{spacing.sm}` 8px · `{spacing.md}` 12px · `{spacing.lg}` 16px · `{spacing.xl}` 24px · `{spacing.xxl}` 32px · `{spacing.huge}` 64px.
|
||||
- **Section padding**: `{spacing.huge}` 64–128px on cinematic marketing pages (extreme negative space is the point); collapses to ~48px on transactional pages where density takes priority.
|
||||
- **Card internal padding**: `{spacing.xxl}` 32px on pricing cards; `{spacing.xl}` 24px on compact tag rows.
|
||||
|
||||
### Grid & Container
|
||||
|
||||
- Max container width: ~1280px (centered)
|
||||
- Hero: full-width, edge-to-edge dark background with centered text
|
||||
- Feature sections: 2-column layouts with text and product screenshots
|
||||
- Stats sections: horizontal layout with large numbers
|
||||
- Horizontal padding: 64px desktop, 32px tablet, 16px mobile
|
||||
- Grid gap: 24-32px between major content blocks
|
||||
- Cinematic hero pages use a wide max-width container (~1440–1600px) with edge-bleeding photography that escapes the container.
|
||||
- Pricing collapses through 4-up → 2-up → 1-up tiers based on viewport.
|
||||
- Body content centers in a ~720–840px reading column on long-form pages.
|
||||
|
||||
### Whitespace Philosophy
|
||||
The cinematic track treats whitespace as the brand's most valuable asset — sections often have 128–192px of vertical air between content blocks, with photography filling the rest. The transactional track tightens to ~48–64px between bands because users are scanning, comparing, and acting. The contrast between the two whitespace philosophies is part of the brand voice.
|
||||
|
||||
Shopify's whitespace strategy is theatrical. Sections are separated by vast expanses of dark space — 80px to 120px of pure black breathing room — that create the pacing of a presentation, not a webpage. Each content block is its own "slide" in a keynote-style scroll. Within sections, spacing is tighter and more deliberate, creating focal density against the expansive void. The contrast between macro-level emptiness and micro-level precision is what gives the site its cinematic cadence.
|
||||
## Elevation & Depth
|
||||
|
||||
| Level | Treatment | Use |
|
||||
|---|---|---|
|
||||
| 0 | Flat, no shadow | Default surface |
|
||||
| 1 | `0 1px 2px rgba(255,255,255,0.05), inset 0 1px 0 rgba(255,255,255,0.04)` | Subtle inset highlight on dark cards (a top-edge sheen) |
|
||||
| 2 | `0 0 0 1px rgba(255,255,255,0.08), 0 1px 3px rgba(0,0,0,0.3), 0 5px 10px rgba(0,0,0,0.2)` | Dark elevated cards with hairline + drop shadow stack |
|
||||
| 3 | `0 8px 8px rgba(0,0,0,0.1), 0 4px 4px rgba(0,0,0,0.1), 0 2px 2px rgba(0,0,0,0.1), 0 0 0 1px rgba(0,0,0,0.1)` | Stacked-shadow card on light surfaces; layered tiny shadows produce a soft halo |
|
||||
| 4 | `0 25px 50px -12px rgba(0,0,0,0.25)` | Modal / floating panel on light |
|
||||
|
||||
### Decorative Depth
|
||||
On the cinematic track, depth comes from photography — full-bleed merchant imagery layered behind cards, with subtle inset top-edge highlights creating the illusion of light hitting a glass surface. On the light track, the layered tiny-shadow stack (Level 3) produces a soft, paper-like halo around pricing cards — depth without harshness.
|
||||
|
||||
## Shapes
|
||||
|
||||
### Border Radius Scale
|
||||
|
||||
| Value | Context |
|
||||
|-------|---------|
|
||||
| 4px | Tags, badges, micro-elements |
|
||||
| 8px | Standard cards, inputs, video containers |
|
||||
| 12px | Featured cards, image containers, buttons (non-pill) |
|
||||
| 20px | Top-rounded cards (20px 20px 0 0), modal headers |
|
||||
| 340px | Large rounded decorative elements |
|
||||
| 9999px | Pill buttons, pill badges, nav elements |
|
||||
| Token | Value | Use |
|
||||
|---|---|---|
|
||||
| `{rounded.xs}` | 4px | Inputs, hairline tags |
|
||||
| `{rounded.sm}` | 5px | Image containers (small) |
|
||||
| `{rounded.md}` | 8px | Form inputs, video frames, smaller cards |
|
||||
| `{rounded.lg}` | 12px | Pricing cards, feature cards |
|
||||
| `{rounded.xl}` | 20px (top-only on some asymmetric cards) | Hero photo frames, cinematic card chrome |
|
||||
| `{rounded.pill}` | 9999px | All buttons, pill tags, mint chips |
|
||||
|
||||
## 6. Depth & Elevation
|
||||
### Photography Geometry
|
||||
Photography is full-bleed with no border. On cinematic pages it escapes the container entirely; on transactional pages it sits inside `{rounded.lg}` containers with no shadow. Avatar treatments in customer-logo strips are simple greyscale wordmarks at uniform height (~24–32px), aligned in a single horizontal strip.
|
||||
|
||||
| Level | Treatment | Use |
|
||||
|-------|-----------|-----|
|
||||
| Base | No shadow, dark surface | Default page background |
|
||||
| Subtle | `rgba(0,0,0,0.1) 0px 0px 0px 1px` + inset white glow | Resting cards |
|
||||
| Medium | Multi-layer: 1px ring + 2px + 4px + 8px shadow stack | Elevated cards, featured sections |
|
||||
| High | `rgba(0,0,0,0.25) 0px 25px 50px -12px` | Modals, dropdowns, overlays |
|
||||
| Focus | `0px 0px 0px 2px #36F4A4` | Keyboard focus ring (Neon Green) |
|
||||
## Components
|
||||
|
||||
Shopify's shadow system is unusually sophisticated. Rather than single-value shadows, cards use a stacked, multi-layer approach: a 1px ring for boundary definition, 2px/4px/8px progressive blurs for natural light falloff, and a delicate inset white glow (`rgba(255,255,255,0.03)`) that simulates a top-lit glass surface. On dark backgrounds, shadows darken from already-dark surfaces, so the shadows function more as "ambient occlusion" than traditional elevation — the card appears to sink slightly into the surface rather than float above it.
|
||||
### Buttons
|
||||
|
||||
### Decorative Depth
|
||||
**`button-primary-pill`** — the dominant CTA across the system.
|
||||
- Background `{colors.primary}` (black), text `{colors.on-primary}`, type `{typography.body-md}`, padding `{spacing.md} {spacing.xl}` (12px 24px), rounded `{rounded.pill}` 9999px.
|
||||
- Pressed state `button-primary-pill-pressed`: background lifts to `{colors.shade-70}`.
|
||||
|
||||
- **Dark teal gradients**: Ambient radial washes behind hero sections and product showcases
|
||||
- **Spotlight effects**: Bright centered areas fading to black, creating keynote-style theatrical lighting
|
||||
- **Edge glow**: Subtle light colored edges on dark cards via inset box-shadow
|
||||
- **Green atmospheric halos**: Faint green tints in background gradients, echoing the brand accent
|
||||
**`button-outline-on-dark`** — the cinematic hero CTA.
|
||||
- Background `{colors.canvas-night}` (transparent on the canvas), 2px solid `{colors.on-primary}` border, text `{colors.on-primary}`, same pill geometry.
|
||||
|
||||
## 7. Do's and Don'ts
|
||||
**`button-outline-on-light`** — the light-track equivalent.
|
||||
- Background `{colors.canvas-light}`, 1px solid `{colors.ink}` border, text `{colors.ink}`, same pill geometry.
|
||||
|
||||
**`button-aloe-pill`** — the featured CTA on pricing pages.
|
||||
- Background `{colors.aloe-10}`, text `{colors.ink}`, same pill geometry. Used for the "Start free trial" tier.
|
||||
|
||||
### Cards & Containers
|
||||
|
||||
**`card-pricing`** — the standard tier card on the pricing page.
|
||||
- Background `{colors.canvas-light}`, padding `{spacing.xxl}`, rounded `{rounded.lg}` 12px, 1px `{colors.hairline-light}` border. Title in `{typography.heading-xl}`, price in `{typography.display-md}`, body in `{typography.body-md}`, CTA pinned to the bottom as `button-primary-pill`.
|
||||
|
||||
**`card-pricing-featured`** — the highlighted pricing tier.
|
||||
- Background `{colors.aloe-10}`, otherwise identical to `card-pricing`. The mint fill (rather than a brand-color border) is the brand's distinctive featured-tier choice.
|
||||
|
||||
**`card-feature-cinematic`** — feature card on the cinematic track.
|
||||
- Background `{colors.canvas-night-elevated}`, text `{colors.on-primary}`, rounded `{rounded.lg}`, often with a top-edge inset highlight (Level 1 elevation). Holds full-bleed photography or a single large statement.
|
||||
|
||||
**`card-pistachio-band`** — wide horizontal band card used to highlight a category of features on the light track.
|
||||
- Background `{colors.pistachio-10}`, text `{colors.ink}`, rounded `{rounded.lg}` 12px, padding `{spacing.xxl}`.
|
||||
|
||||
**`card-photo-frame`** — full-bleed photography container on cinematic pages.
|
||||
- Background `{colors.canvas-night}`, padding 0, rounded `{rounded.xl}` 20px (often top-only). The photo IS the content; no inner padding, no overlay text inside the card.
|
||||
|
||||
### Inputs & Forms
|
||||
|
||||
**`text-input`** — standard text input on light surfaces.
|
||||
- Background `{colors.canvas-light}`, text `{colors.ink}`, type `{typography.body-md}`, padding `{spacing.sm}+ {spacing.md}` (10px 12px), rounded `{rounded.md}` 8px, 1px `{colors.hairline-light}` border.
|
||||
|
||||
### Navigation
|
||||
|
||||
**`nav-bar-light`** — top nav on light pages.
|
||||
- Background `{colors.canvas-light}`, text `{colors.ink}`, padding `{spacing.lg} {spacing.xl}`. Logo wordmark on the left, nav items center, two pill buttons on the right (`button-outline-on-light` for "Log in", `button-primary-pill` for "Start free trial").
|
||||
|
||||
**`nav-bar-dark`** — top nav on cinematic pages.
|
||||
- Background `{colors.canvas-night}`, text `{colors.on-primary}`, otherwise identical structure. Two pill buttons on the right (`button-outline-on-dark` for both, with the rightmost subtly more prominent via type weight).
|
||||
|
||||
### Pills, Tags, and Chips
|
||||
|
||||
**`pill-tag-mint`** — small tag on light surfaces, signaling a feature category.
|
||||
- Background `{colors.aloe-10}`, text `{colors.ink}`, type `{typography.eyebrow-cap}`, padding `{spacing.xs} {spacing.md}`, rounded `{rounded.pill}`.
|
||||
|
||||
**`pill-tag-shade`** — neutral tag on light surfaces.
|
||||
- Background `{colors.shade-30}`, text `{colors.ink}`, otherwise same shape as `pill-tag-mint`.
|
||||
|
||||
### Signature Components
|
||||
|
||||
**Cinematic Photography Layer** — full-bleed merchant photos on the hero. No overlay scrim, no text-on-image; instead, the type sits in clean negative space above or below the photo. The brand treats photography as an editorial spread, not as decoration.
|
||||
|
||||
**Stacked Tiny Shadows (Level 3 Elevation)** — pricing cards on the light track use 4 stacked tiny drop shadows (each 1–8px Y offset, 10% black) to produce a soft, layered paper halo. This is the brand's distinctive depth on light.
|
||||
|
||||
**`link-on-dark`** — inline link on cinematic pages.
|
||||
- Color `{colors.on-primary}`, no underline by default (links rely on context); for tertiary footer links, color shifts to one of the cool muted tones (`{colors.link-cool-1}` etc.) with a persistent underline.
|
||||
|
||||
**`footer-dark`** — full-page-width footer on the cinematic track.
|
||||
- Background `{colors.canvas-night}`, text `{colors.on-primary}`, type `{typography.caption}`, padding `{spacing.huge} {spacing.xl}`. Contains 4–5 columns of muted-tone link groups, social icons, and a small legal row.
|
||||
|
||||
**`footer-light`** — equivalent on the transactional track.
|
||||
- Background `{colors.canvas-light}`, text `{colors.ink}`, otherwise same structure.
|
||||
|
||||
## Do's and Don'ts
|
||||
|
||||
### Do
|
||||
|
||||
- Use the dark teal-black surface hierarchy (Void → Deep Teal → Dark Forest → Forest) for depth
|
||||
- Keep display typography at weight 330-400 — the ethereal lightness is the design's signature
|
||||
- Use Neon Green (`#36F4A4`) exclusively for focus states and critical accent highlights
|
||||
- Apply 9999px radius to all primary CTA buttons — the full pill is non-negotiable
|
||||
- Use the multi-layered shadow system for card elevation — single shadows look flat
|
||||
- Maintain the `ss03` OpenType feature across all text — it's part of the typographic identity
|
||||
- Use Inter Variable for body text and NeueHaasGrotesk for headings — never mix their roles
|
||||
- Create theatrical spacing between sections (80px+) for cinematic pacing
|
||||
- Reserve `{colors.aloe-10}` and `{colors.pistachio-10}` for the light track only — they don't appear on cinematic black pages.
|
||||
- Always use `{rounded.pill}` for buttons; never `{rounded.md}` or `{rounded.lg}`.
|
||||
- Render display tiers at weight 330; bumping to 400 or 500 breaks the brand's thin-display signature.
|
||||
- Use full-bleed photography on cinematic pages — let it escape the container.
|
||||
- Apply `font-feature-settings: "ss03"` globally; the stylistic set is the brand's typographic signature.
|
||||
- Pair black canvas with white type and white-stroked outline pills; pair light canvas with black type and filled-black pills.
|
||||
|
||||
### Don't
|
||||
- Don't introduce a third canvas color — stick to black or light/cream. Greys, beiges, and blues are not in the system.
|
||||
- Don't add drop shadows on cinematic dark cards beyond the subtle inset top-highlight; the cinematic track wants flat blackness.
|
||||
- Don't shrink display tiers below `{typography.display-md}` (48px) on hero surfaces; below that they read as section heads, not display.
|
||||
- Don't put aloe / pistachio greens behind type — they're surface fills, not text colors.
|
||||
- Don't replace the pill shape with a rounded-rectangle button anywhere.
|
||||
|
||||
- Don't use pure black (#000000) for text on dark backgrounds — use white (#FFFFFF) only
|
||||
- Don't introduce warm colors (orange, red, yellow) — the palette is strictly cool (greens, teals, neutrals)
|
||||
- Don't use font weights above 500 for NeueHaasGrotesk body text — heavy weights break the ethereal feel
|
||||
- Don't apply green accents to large surfaces — Neon Green is for small, precise highlights only
|
||||
- Don't use sharp corners (0px radius) on interactive elements — everything rounds
|
||||
- Don't add bright backgrounds — the dark theme is fundamental, not optional
|
||||
- Don't use single-layer box shadows — the stacked approach is the system
|
||||
- Don't set line-height above 1.56 for body text — Shopify's text is relatively compact
|
||||
- Don't mix NeueHaasGrotesk and Inter at the same size/role — their weight scales differ
|
||||
- Don't use letter-spacing below 0 for headings — Shopify headings track neutral or positive
|
||||
|
||||
## 8. Responsive Behavior
|
||||
## Responsive Behavior
|
||||
|
||||
### Breakpoints
|
||||
|
||||
| Name | Width | Key Changes |
|
||||
|------|-------|-------------|
|
||||
| Mobile | <640px | Single column, hamburger nav, display text scales to 48px, 16px padding |
|
||||
| Tablet | 640-1024px | 2-column grids begin, display text at 70px, 32px padding |
|
||||
| Desktop | 1024-1440px | Full layout, expanded nav, 96px display, 64px padding |
|
||||
| Large Desktop | >1440px | Max-width container centered, increased section spacing |
|
||||
|---|---|---|
|
||||
| Wide | ≥ 1440px | Full cinematic hero with edge-bleeding photography; pricing 4-up |
|
||||
| Desktop | 1024–1440px | Default content max-width; pricing 4-up tightens |
|
||||
| Tablet | 768–1023px | Pricing 2-up; cinematic hero photography crops |
|
||||
| Mobile | < 768px | Pricing 1-up; hamburger nav; display-xxl drops to ~56–64px |
|
||||
|
||||
### Touch Targets
|
||||
|
||||
- Minimum touch target: 44x44px (WCAG AAA)
|
||||
- Pill buttons: 48px height minimum with generous horizontal padding
|
||||
- Nav links: 44px touch area
|
||||
- Card surfaces: full card is tappable where linked
|
||||
- Pill buttons hit ≥ 44×44px on mobile via 12px vertical padding × 16px line-height. WCAG AAA compliant.
|
||||
- Form fields stay at the 44px minimum height across all breakpoints.
|
||||
|
||||
### Collapsing Strategy
|
||||
|
||||
- **Navigation**: Full horizontal links → hamburger menu below 1024px; logo and CTA button remain visible
|
||||
- **Hero section**: 96px display → 70px at tablet → 48px on mobile; maintains single-column center alignment
|
||||
- **Feature sections**: 2-column text+image → stacked single column below 768px
|
||||
- **Stats**: Horizontal row → stacked vertical on mobile
|
||||
- **Section padding**: 64px → 40px → 24px → 16px as viewport narrows
|
||||
- **Cards**: Grid → stack, maintaining full-width on mobile
|
||||
- Display sizes scale down through the breakpoint stair: 96 → 70 → 55 → 48 → 36px on mobile.
|
||||
- Cinematic photography crops aggressively at smaller widths, prioritizing focal subject over edge-bleed.
|
||||
- Pricing tiers stair-step 4-up → 2-up → 1-up; the featured aloe tier stays visually distinguished at every step.
|
||||
- Top nav collapses to hamburger below 768px; menu inherits canvas polarity.
|
||||
|
||||
### Image Behavior
|
||||
Photography uses responsive `srcset` with art-direction crops at major breakpoints. Mobile crops favor close subjects; wide crops favor environmental / storefront context.
|
||||
|
||||
- Product screenshots: responsive within dark containers, maintain aspect ratio
|
||||
- Hero images: full-width on all breakpoints, lazy loaded with dark placeholders
|
||||
- Admin UI previews: scale proportionally, may crop on mobile
|
||||
- All images use CDN (`cdn.shopify.com`) with responsive srcset
|
||||
## Iteration Guide
|
||||
|
||||
## 9. Agent Prompt Guide
|
||||
|
||||
### Quick Color Reference
|
||||
|
||||
- Primary CTA: Shopify White (`#FFFFFF`)
|
||||
- Page background: Void Black (`#000000`)
|
||||
- Card surface: Deep Teal (`#02090A`)
|
||||
- Section bg: Dark Forest (`#061A1C`)
|
||||
- Elevated bg: Forest (`#102620`)
|
||||
- Accent: Neon Green (`#36F4A4`)
|
||||
- Body text: White (`#FFFFFF`)
|
||||
- Muted text: Muted (`#A1A1AA`)
|
||||
- Border dark: Dark Card Border (`#1E2C31`)
|
||||
|
||||
### Example Component Prompts
|
||||
|
||||
- "Create a hero section on true black (#000000) background with a 96px/330 NeueHaasGrotesk headline in white, a 20px/500 subtitle in #A1A1AA, and two pill buttons: white filled (9999px radius) and ghost with 2px white border"
|
||||
- "Design a feature card on Deep Teal (#02090A) with 1px #1E2C31 border, 12px radius, multi-layer shadow (1px ring + 2px/4px/8px blur at 10% black), containing a 32px/360 white heading and 18px/400 #A1A1AA body text"
|
||||
- "Build a stats section on Dark Forest (#061A1C) with 96px/750 white numbers (NeueHaasGrotesk), 16px/400 #A1A1AA descriptive labels, and generous 64px spacing between stat blocks"
|
||||
- "Create a sticky nav with transparent background (becomes #102620 on scroll), white Shopify logo left, 18px/500 white nav links with 0.72px letter-spacing, and a white pill 'Start for free' button right"
|
||||
- "Design a tag/badge with rgba(255,255,255,0.2) frosted glass background, 4px radius, 12px 16px padding, white 16px text — floating over a dark card surface"
|
||||
|
||||
### Iteration Guide
|
||||
|
||||
When refining existing screens generated with this design system:
|
||||
1. Focus on ONE component at a time
|
||||
2. Reference specific color names and hex codes from this document
|
||||
3. Remember: this is a DARK-FIRST design — light surfaces are the exception, not the rule
|
||||
4. Display text should always feel feather-light (weight 330-400) — if it looks heavy, reduce the weight
|
||||
5. Neon Green (#36F4A4) is precious — use sparingly for focus and accent only
|
||||
6. The dark surface hierarchy (black → deep teal → dark forest → forest) creates subtle depth
|
||||
7. Shadows are multi-layered — a single `box-shadow` value won't capture the Shopify card feel
|
||||
8. `ss03` OpenType feature must be active on all text for typographic consistency
|
||||
1. Focus on ONE component at a time.
|
||||
2. Reference component names and tokens directly (`{colors.aloe-10}`, `{button-primary-pill}-pressed`, `{rounded.pill}`).
|
||||
3. Run `npx @google/design.md lint DESIGN.md` after edits.
|
||||
4. Add new variants as separate entries.
|
||||
5. Default body to `{typography.body-md}`; reserve `{typography.body-lg}` for marketing leads.
|
||||
6. Keep the two canvas tracks separated — when designing a new page, choose cinematic OR transactional, not both.
|
||||
7. The pill shape is non-negotiable; new button variants vary in fill / border / canvas, never in shape.
|
||||
|
||||
482
design-md/slack/DESIGN.md
Normal file
482
design-md/slack/DESIGN.md
Normal file
@ -0,0 +1,482 @@
|
||||
---
|
||||
version: alpha
|
||||
name: Slacc Inspired
|
||||
description: An inspired interpretation of Slacc's design language — a workplace messaging brand built on a deep aubergine primary, with cream-lavender hero gradients, blue inline links, and pill CTAs. The system pairs a proprietary humanist sans for display with a separate utility sans for body, and stages product UI mockups inside soft pastel-mesh hero composites that act as both decoration and feature explanation.
|
||||
|
||||
colors:
|
||||
primary: "#4a154b"
|
||||
primary-deep: "#481a54"
|
||||
primary-press: "#611f69"
|
||||
primary-tint: "#592466"
|
||||
on-primary: "#ffffff"
|
||||
ink: "#1d1d1d"
|
||||
ink-mute: "#696969"
|
||||
link-blue: "#1264a3"
|
||||
link-hover: "#3860be"
|
||||
canvas: "#ffffff"
|
||||
canvas-cream: "#f4ede4"
|
||||
canvas-lavender: "#f9f0ff"
|
||||
surface-elev: "#ffffff"
|
||||
surface-aubergine: "#4a154b"
|
||||
hairline: "#e6e6e6"
|
||||
hairline-strong: "#000000"
|
||||
semantic-error: "#cc4117"
|
||||
semantic-success: "#007a5a"
|
||||
on-aubergine-mute: "#d9bdde"
|
||||
|
||||
typography:
|
||||
display-xxl:
|
||||
fontFamily: "Salesforce-Avant-Garde, system-ui, -apple-system, BlinkMacSystemFont, sans-serif"
|
||||
fontSize: 64px
|
||||
fontWeight: 700
|
||||
lineHeight: 1.12
|
||||
letterSpacing: -0.768px
|
||||
display-xl:
|
||||
fontFamily: "Salesforce-Avant-Garde, system-ui, -apple-system, BlinkMacSystemFont, sans-serif"
|
||||
fontSize: 58px
|
||||
fontWeight: 600
|
||||
lineHeight: 1.25
|
||||
letterSpacing: -0.464px
|
||||
display-lg:
|
||||
fontFamily: "Salesforce-Avant-Garde, system-ui, -apple-system, BlinkMacSystemFont, sans-serif"
|
||||
fontSize: 50px
|
||||
fontWeight: 700
|
||||
lineHeight: 1.12
|
||||
letterSpacing: -0.6px
|
||||
display-md:
|
||||
fontFamily: "Salesforce-Avant-Garde, system-ui, -apple-system, BlinkMacSystemFont, sans-serif"
|
||||
fontSize: 32px
|
||||
fontWeight: 700
|
||||
lineHeight: 1.25
|
||||
letterSpacing: -0.256px
|
||||
heading-lg:
|
||||
fontFamily: "Salesforce-Avant-Garde, system-ui, -apple-system, BlinkMacSystemFont, sans-serif"
|
||||
fontSize: 24px
|
||||
fontWeight: 700
|
||||
lineHeight: 1.33
|
||||
letterSpacing: -0.096px
|
||||
heading-md:
|
||||
fontFamily: "Salesforce-Avant-Garde, system-ui, -apple-system, BlinkMacSystemFont, sans-serif"
|
||||
fontSize: 22px
|
||||
fontWeight: 600
|
||||
lineHeight: 1.4
|
||||
letterSpacing: 0
|
||||
heading-sm:
|
||||
fontFamily: "Salesforce-Avant-Garde, system-ui, -apple-system, BlinkMacSystemFont, sans-serif"
|
||||
fontSize: 18px
|
||||
fontWeight: 600
|
||||
lineHeight: 1.56
|
||||
letterSpacing: -0.0216px
|
||||
body-lg:
|
||||
fontFamily: "Salesforce-Sans, system-ui, -apple-system, sans-serif"
|
||||
fontSize: 18px
|
||||
fontWeight: 400
|
||||
lineHeight: 1.55
|
||||
letterSpacing: -0.0216px
|
||||
body-md:
|
||||
fontFamily: "Salesforce-Sans, system-ui, -apple-system, sans-serif"
|
||||
fontSize: 16px
|
||||
fontWeight: 400
|
||||
lineHeight: 1.55
|
||||
letterSpacing: 0
|
||||
body-strong:
|
||||
fontFamily: "Salesforce-Sans, system-ui, -apple-system, sans-serif"
|
||||
fontSize: 16px
|
||||
fontWeight: 700
|
||||
lineHeight: 1.5
|
||||
letterSpacing: 0.16px
|
||||
button-lg:
|
||||
fontFamily: "Salesforce-Sans, system-ui, -apple-system, sans-serif"
|
||||
fontSize: 18px
|
||||
fontWeight: 700
|
||||
lineHeight: 1.0
|
||||
letterSpacing: 0
|
||||
button-md:
|
||||
fontFamily: "Salesforce-Sans, system-ui, -apple-system, sans-serif"
|
||||
fontSize: 16px
|
||||
fontWeight: 700
|
||||
lineHeight: 1.38
|
||||
letterSpacing: 0.2px
|
||||
button-cap:
|
||||
fontFamily: "Salesforce-Sans, system-ui, -apple-system, sans-serif"
|
||||
fontSize: 14.4px
|
||||
fontWeight: 700
|
||||
lineHeight: 1.0
|
||||
letterSpacing: 0.144px
|
||||
caption:
|
||||
fontFamily: "Salesforce-Sans, system-ui, -apple-system, sans-serif"
|
||||
fontSize: 14px
|
||||
fontWeight: 400
|
||||
lineHeight: 1.43
|
||||
letterSpacing: 0.1px
|
||||
micro-cap:
|
||||
fontFamily: "Salesforce-Sans, system-ui, -apple-system, sans-serif"
|
||||
fontSize: 12px
|
||||
fontWeight: 700
|
||||
lineHeight: 1.0
|
||||
letterSpacing: 0.96px
|
||||
|
||||
rounded:
|
||||
xs: 2px
|
||||
sm: 4px
|
||||
md: 8px
|
||||
lg: 12px
|
||||
xl: 16px
|
||||
xxl: 48px
|
||||
pill: 90px
|
||||
|
||||
spacing:
|
||||
xs: 4px
|
||||
sm: 8px
|
||||
md: 12px
|
||||
lg: 16px
|
||||
xl: 20px
|
||||
xxl: 24px
|
||||
huge: 28px
|
||||
|
||||
components:
|
||||
button-primary-pill:
|
||||
backgroundColor: "{colors.primary}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.button-md}"
|
||||
rounded: "{rounded.pill}"
|
||||
padding: 14px 28px
|
||||
button-primary-pill-pressed:
|
||||
backgroundColor: "{colors.primary-press}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.button-md}"
|
||||
rounded: "{rounded.pill}"
|
||||
padding: 14px 28px
|
||||
button-secondary-pill:
|
||||
backgroundColor: "{colors.canvas-lavender}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.button-md}"
|
||||
rounded: "{rounded.pill}"
|
||||
padding: 10px 30px
|
||||
button-outline-aubergine:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.primary}"
|
||||
typography: "{typography.button-md}"
|
||||
rounded: "{rounded.pill}"
|
||||
padding: 14px 28px
|
||||
button-outline-on-aubergine:
|
||||
backgroundColor: "{colors.surface-aubergine}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.button-md}"
|
||||
rounded: "{rounded.pill}"
|
||||
padding: 14px 28px
|
||||
text-input:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.sm}"
|
||||
padding: 10px 12px
|
||||
pill-cap-shade:
|
||||
backgroundColor: "{colors.canvas-cream}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.micro-cap}"
|
||||
rounded: "{rounded.pill}"
|
||||
padding: 4px 12px
|
||||
card-pricing:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.xl}"
|
||||
padding: 32px
|
||||
card-pricing-featured:
|
||||
backgroundColor: "{colors.surface-aubergine}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.xl}"
|
||||
padding: 32px
|
||||
card-feature-cream:
|
||||
backgroundColor: "{colors.canvas-cream}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.xl}"
|
||||
padding: 32px
|
||||
card-aubergine-band:
|
||||
backgroundColor: "{colors.surface-aubergine}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.body-lg}"
|
||||
rounded: "{rounded.xl}"
|
||||
padding: 48px
|
||||
card-stat:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.primary}"
|
||||
typography: "{typography.display-lg}"
|
||||
rounded: "{rounded.xl}"
|
||||
padding: 32px
|
||||
nav-bar-light:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 16px 24px
|
||||
link-on-light:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.link-blue}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 0px
|
||||
link-on-aubergine:
|
||||
backgroundColor: "{colors.surface-aubergine}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 0px
|
||||
footer-aubergine:
|
||||
backgroundColor: "{colors.surface-aubergine}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.caption}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 32px 24px
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
Slacc's design language centers on a deep aubergine primary (`{colors.primary}`) — the brand's most enduring visual asset — applied as the dominant button color, the footer band, the featured pricing tier, and the brand wordmark. Around that aubergine the system stages an unusually delicate ecosystem: cream-lavender hero canvases with soft pastel-mesh gradients (peachy oranges, lavenders, dusty greens) that pulse behind floating product UI mockups, with the actual interface chrome rendered in fine detail at 3:2 aspect.
|
||||
|
||||
Typography splits between two proprietary humanist sans families. The display tier runs at 700 weight at sizes 32–64px with negative letter-spacing for tight optical density on hero headlines. The UI tier uses the second family at 400–700 with slightly relaxed leading (1.55) — the brand's body copy reads quietly without competing with the aubergine moments.
|
||||
|
||||
Buttons are pill-shaped at 90px radius with an unusual amount of horizontal padding (28–30px), giving them a distinctly comfortable, almost over-padded feel. The primary aubergine pill is the only filled button in most contexts; secondary actions use a soft lavender pill (`{colors.canvas-lavender}`) which reads as a gentler echo of the primary surface. Inline links shift to a saturated blue (`{colors.link-blue}`) — the brand's only chromatic departure from the aubergine-and-cream world.
|
||||
|
||||
**Key Characteristics:**
|
||||
- Single aubergine primary (`{colors.primary}`) reused across CTAs, the featured pricing tier, the footer band, and the wordmark — the brand's chromatic monotheism.
|
||||
- Cream-lavender hero canvas (`{colors.canvas-cream}` / `{colors.canvas-lavender}`) with diffused pastel-mesh atmospheric gradients and floating UI mockups composited above.
|
||||
- Pill buttons at `{rounded.pill}` (90px radius) with generous 28–30px horizontal padding — over-padded by SaaS-default standards, deliberately so.
|
||||
- Tight negative letter-spacing on display sizes (-0.768px on 64px hero) for editorial-density headlines.
|
||||
- Blue inline links (`{colors.link-blue}`) — the only non-aubergine chromatic accent in body type.
|
||||
- Pastel-mesh gradient atmospherics: every hero band has a subtle peach-lavender-dusty-green wash behind it; product UI sits on top, never inside, the gradient.
|
||||
- Statistics cards rendered in massive aubergine display type (90% / 43 / 87%) on white — quantitative emphasis through scale alone.
|
||||
|
||||
## Colors
|
||||
|
||||
> **Source pages:** home (`/`), `/features/channels`, `/pricing`, `/contact-sales`.
|
||||
|
||||
### Brand & Accent
|
||||
- **Aubergine** (`{colors.primary}` — `#4a154b`): The brand's primary surface and CTA color. Deep, warm purple with a hint of ruby — used on filled buttons, the featured pricing tier, the footer band, and the brand wordmark.
|
||||
- **Aubergine Deep** (`{colors.primary-deep}` — `#481a54`): A near-identical sibling of `{colors.primary}` extracted from a different surface; treat as functionally equivalent.
|
||||
- **Aubergine Press** (`{colors.primary-press}` — `#611f69`): Pressed-state lift of the primary, slightly lighter and warmer.
|
||||
- **Aubergine Tint** (`{colors.primary-tint}` — `#592466`): Border accent on aubergine-on-aubergine surfaces.
|
||||
- **Link Blue** (`{colors.link-blue}` — `#1264a3`): Inline link color — saturated, slightly warm blue. The only chromatic alternative to aubergine in body type.
|
||||
- **Link Hover** (`{colors.link-hover}` — `#3860be`): A more saturated blue used on link hover state.
|
||||
|
||||
### Surface
|
||||
- **Canvas White** (`{colors.canvas}` — `#ffffff`): Default content surface.
|
||||
- **Canvas Cream** (`{colors.canvas-cream}` — `#f4ede4`): Warm off-white used on hero gradients and feature bands. Adds editorial warmth.
|
||||
- **Canvas Lavender** (`{colors.canvas-lavender}` — `#f9f0ff`): Pale lavender tint used as the secondary-button surface and as a soft section band.
|
||||
- **Surface Aubergine** (`{colors.surface-aubergine}` — `#4a154b`): The primary aubergine reused as a surface — featured pricing tier, footer, dark feature bands.
|
||||
- **Hairline** (`{colors.hairline}` — `#e6e6e6`): 1px borders on cards and table dividers.
|
||||
|
||||
### Text
|
||||
- **Ink** (`{colors.ink}` — `#1d1d1d`): Primary body text on light surfaces. Just shy of pure black.
|
||||
- **Ink Mute** (`{colors.ink-mute}` — `#696969`): Secondary text, captions, helper copy.
|
||||
- **On Primary** (`{colors.on-primary}` — `#ffffff`): Text on aubergine surfaces and filled CTAs.
|
||||
- **On Aubergine Mute** (`{colors.on-aubergine-mute}` — `#d9bdde`): Secondary text on aubergine surfaces — a desaturated mauve that reads as muted-light.
|
||||
|
||||
### Semantic
|
||||
- **Error** (`{colors.semantic-error}` — `#cc4117`): Form error and destructive-action color.
|
||||
- **Success** (`{colors.semantic-success}` — `#007a5a`): Inline success indicators.
|
||||
|
||||
## Typography
|
||||
|
||||
### Font Family
|
||||
|
||||
The display tier is **Salesforce Avant Garde** — a proprietary humanist sans with broad apertures and a slightly geometric character. When unavailable, fall back to the system font stack (`system-ui, -apple-system, BlinkMacSystemFont`).
|
||||
|
||||
The UI tier is **Salesforce Sans** — a separate proprietary face used for body, captions, and button labels. Same fallback chain.
|
||||
|
||||
Both faces are proprietary and not freely available. Substitute with **Inter** (open-source via Google Fonts) at matching weights for both display and body — Inter is the closest open analogue across both tiers.
|
||||
|
||||
### Hierarchy
|
||||
|
||||
| Token | Size | Weight | Line Height | Letter Spacing | Use |
|
||||
|---|---|---|---|---|---|
|
||||
| `{typography.display-xxl}` | 64px | 700 | 1.12 | -0.768px | Marketing hero headline |
|
||||
| `{typography.display-xl}` | 58px | 600 | 1.25 | -0.464px | Section openers |
|
||||
| `{typography.display-lg}` | 50px | 700 | 1.12 | -0.6px | Statistics callouts |
|
||||
| `{typography.display-md}` | 32px | 700 | 1.25 | -0.256px | Card / feature titles |
|
||||
| `{typography.heading-lg}` | 24px | 700 | 1.33 | -0.096px | Pricing tier names |
|
||||
| `{typography.heading-md}` | 22px | 600 | 1.4 | 0 | Sub-section heading |
|
||||
| `{typography.heading-sm}` | 18px | 600 | 1.56 | -0.0216px | Compact card title |
|
||||
| `{typography.body-lg}` | 18px | 400 | 1.55 | -0.0216px | Marketing body lead |
|
||||
| `{typography.body-md}` | 16px | 400 | 1.55 | 0 | Default UI body |
|
||||
| `{typography.body-strong}` | 16px | 700 | 1.5 | 0.16px | Emphasized body |
|
||||
| `{typography.button-lg}` | 18px | 700 | 1.0 | 0 | Hero pill button label |
|
||||
| `{typography.button-md}` | 16px | 700 | 1.38 | 0.2px | Standard pill button label |
|
||||
| `{typography.button-cap}` | 14.4px | 700 | 1.0 | 0.144px | Compact pill label |
|
||||
| `{typography.caption}` | 14px | 400 | 1.43 | 0.1px | Helper, footnote |
|
||||
| `{typography.micro-cap}` | 12px | 700 | 1.0 | 0.96px | All-caps eyebrow |
|
||||
|
||||
### Principles
|
||||
- **Tight tracking on display.** Negative letter-spacing across 32–64px sizes; the proprietary face is wide by default, the negative tracking pulls it into editorial density.
|
||||
- **Body at 1.55 leading.** Slightly relaxed for marketing readability without crossing into airy / 1.7+ territory.
|
||||
- **Caps for eyebrows.** All eyebrows render uppercase with positive 0.96–0.144px tracking depending on size.
|
||||
|
||||
### Note on Font Substitutes
|
||||
Use **Inter** (open-source Google Fonts) for both display and UI tiers — Inter at 700 weight with `-0.768px` letter-spacing closely approximates the brand's display behavior. For maximum brand fidelity, **Lato** is a softer humanist alternative that pairs well at body sizes. Avoid System UI fonts on the body — the brand's subtle warmth disappears at default weights.
|
||||
|
||||
## Layout
|
||||
|
||||
### Spacing System
|
||||
- **Base unit**: 8px (with 4 / 12 / 16 / 20 / 24 / 28 sub-tokens for fine vertical rhythm).
|
||||
- **Tokens**: `{spacing.xs}` 4px · `{spacing.sm}` 8px · `{spacing.md}` 12px · `{spacing.lg}` 16px · `{spacing.xl}` 20px · `{spacing.xxl}` 24px · `{spacing.huge}` 28px.
|
||||
- **Section padding**: 64–96px on marketing surfaces; tightens to 48px on transactional pages.
|
||||
- **Card internal padding**: 32px on pricing cards; 48px on aubergine band cards.
|
||||
|
||||
### Grid & Container
|
||||
- Marketing pages center in a ~1240px container with edge-bleeding pastel-mesh gradients escaping the container.
|
||||
- Pricing collapses 4-up → 2-up → 1-up at 992 / 768 breakpoints.
|
||||
- Statistics row: 3-column grid with massive 50px aubergine display numerals.
|
||||
|
||||
### Whitespace Philosophy
|
||||
The pastel-mesh gradients fill most of the negative space on marketing pages — sections feel expansive without being literally empty. On transactional pages the gradients drop, and whitespace reverts to traditional 48px-section breathing room.
|
||||
|
||||
## Elevation & Depth
|
||||
|
||||
| Level | Treatment | Use |
|
||||
|---|---|---|
|
||||
| 0 | Flat | Default surface |
|
||||
| 1 | `box-shadow: rgba(0,0,0,0.1) 0 5px 20px 0` | Floating buttons on hero |
|
||||
| 2 | `box-shadow: rgba(0,0,0,0.1) 0 0 32px 0` | Product UI mockup composites |
|
||||
| 3 | `box-shadow: rgba(0,0,0,0.2) 0 1px 10px 0` | Toast / notification chrome |
|
||||
| 4 | `box-shadow: rgb(97,31,105) 0 0 0 1px inset` | Aubergine inset border (button focus, special chrome) |
|
||||
|
||||
### Decorative Depth
|
||||
The brand's depth language is the **pastel-mesh gradient** — peach, lavender, dusty green stops blurred together at large radii to create soft atmospheric backdrops behind product UI screenshots. The gradient is the brand's flavor of "depth without shadows": the eye perceives the product mockup as floating above a luminous backdrop without any literal lift.
|
||||
|
||||
## Shapes
|
||||
|
||||
### Border Radius Scale
|
||||
|
||||
| Token | Value | Use |
|
||||
|---|---|---|
|
||||
| `{rounded.xs}` | 2px | Hairline tags, status pills (rare) |
|
||||
| `{rounded.sm}` | 4px | Form inputs |
|
||||
| `{rounded.md}` | 8px | Compact card chrome, video frames |
|
||||
| `{rounded.lg}` | 12px | Mid-size cards, secondary surface |
|
||||
| `{rounded.xl}` | 16px | Pricing cards, feature cards |
|
||||
| `{rounded.xxl}` | 48px | Stat badge backdrops |
|
||||
| `{rounded.pill}` | 90px | All buttons |
|
||||
|
||||
### Photography Geometry
|
||||
The brand uses **product UI screenshots** more than photography. UI mockups sit on top of pastel-mesh gradients at roughly 4:3 aspect, with no shadow but with the gradient providing the "lift" the eye expects. Real photography appears in customer-logo strips and the occasional case-study card, treated as full-bleed inside `{rounded.xl}` containers.
|
||||
|
||||
## Components
|
||||
|
||||
### Buttons
|
||||
|
||||
**`button-primary-pill`** — the dominant CTA system-wide.
|
||||
- Background `{colors.primary}`, text `{colors.on-primary}`, type `{typography.button-md}`, padding `14px 28px`, rounded `{rounded.pill}` 90px.
|
||||
- Pressed state `button-primary-pill-pressed` shifts background to `{colors.primary-press}`.
|
||||
|
||||
**`button-secondary-pill`** — the soft lavender alternative.
|
||||
- Background `{colors.canvas-lavender}`, text `{colors.ink}`, padding `10px 30px`, same pill geometry. Used as the second action beside the primary aubergine pill.
|
||||
|
||||
**`button-outline-aubergine`** — outline variant on white surfaces.
|
||||
- Background `{colors.canvas}`, text `{colors.primary}`, 2px solid `{colors.primary}` border, same pill shape.
|
||||
|
||||
**`button-outline-on-aubergine`** — outline on aubergine canvas.
|
||||
- Background `{colors.surface-aubergine}` (transparent over the surface), text `{colors.on-primary}`, 2px solid `{colors.on-primary}` border, same pill shape.
|
||||
|
||||
### Cards & Containers
|
||||
|
||||
**`card-pricing`** — standard pricing tier card.
|
||||
- Background `{colors.canvas}`, padding `{spacing.xxl}+` (32px), rounded `{rounded.xl}` 16px, 1px `{colors.hairline}` border. Title in `{typography.heading-lg}`, price in `{typography.display-md}`, body in `{typography.body-md}`, CTA pinned to bottom as `button-primary-pill`.
|
||||
|
||||
**`card-pricing-featured`** — the inverted aubergine featured tier.
|
||||
- Background `{colors.surface-aubergine}`, text `{colors.on-primary}`, otherwise identical to `card-pricing`. The aubergine fill is the brand's signature featured-tier choice.
|
||||
|
||||
**`card-feature-cream`** — feature explanation card on the cream track.
|
||||
- Background `{colors.canvas-cream}`, text `{colors.ink}`, rounded `{rounded.xl}`, padding 32px.
|
||||
|
||||
**`card-aubergine-band`** — large horizontal band card with aubergine fill, often containing the closing CTA of a marketing page.
|
||||
- Background `{colors.surface-aubergine}`, text `{colors.on-primary}`, padding 48px, rounded `{rounded.xl}` 16px.
|
||||
|
||||
**`card-stat`** — statistics callout card.
|
||||
- Background `{colors.canvas}`, text `{colors.primary}` rendered in `{typography.display-lg}` (50px aubergine numeral). Holds a single percentage/number with a small caption underneath.
|
||||
|
||||
### Inputs & Forms
|
||||
|
||||
**`text-input`** — standard form field.
|
||||
- Background `{colors.canvas}`, text `{colors.ink}`, type `{typography.body-md}`, padding `10px 12px`, rounded `{rounded.sm}` 4px, 1px `{colors.hairline}` border.
|
||||
|
||||
### Navigation
|
||||
|
||||
**`nav-bar-light`** — top nav across all marketing pages.
|
||||
- Background `{colors.canvas}`, text `{colors.ink}`, padding `{spacing.lg} {spacing.xxl}`. Logo wordmark on the left, nav items center, two pill buttons on the right (`button-secondary-pill` for "Sign In", `button-primary-pill` for "Try For Free").
|
||||
|
||||
### Pills, Tags, and Chips
|
||||
|
||||
**`pill-cap-shade`** — small all-caps pill used as eyebrow above pricing-tier titles.
|
||||
- Background `{colors.canvas-cream}`, text `{colors.ink}`, type `{typography.micro-cap}`, padding `4px 12px`, rounded `{rounded.pill}`.
|
||||
|
||||
### Signature Components
|
||||
|
||||
**Pastel-Mesh Gradient Backdrop** — peach (`#fff0e6`-ish) + lavender (`#e9d8ff`) + dusty green stops blurred together behind hero bands. Implemented as a CSS radial-gradient stack, not a single image. Provides the brand's depth/luminosity without literal shadows.
|
||||
|
||||
**Floating Product UI Mockup** — product screenshots framed in `{rounded.lg}` (12px) containers, positioned above the pastel-mesh gradient with no border or shadow. The gradient does the lifting.
|
||||
|
||||
**Aubergine Footer Band** — every marketing page closes with a full-bleed `card-aubergine-band` containing a closing CTA in white type. The band height is generous (~480–600px on desktop) and reads as the page's signature.
|
||||
|
||||
**`link-on-light`** — inline links in body copy on light surfaces.
|
||||
- Text `{colors.link-blue}` rendered in `{typography.body-md}`. No underline by default; underline appears on hover via the link-hover behavior.
|
||||
|
||||
**`link-on-aubergine`** — links inside aubergine surfaces.
|
||||
- Text `{colors.on-primary}` with persistent underline.
|
||||
|
||||
**`footer-aubergine`** — site-wide footer.
|
||||
- Background `{colors.surface-aubergine}`, text `{colors.on-primary}` rendered in `{typography.caption}`, padding `{spacing.huge}+ {spacing.xxl}` (32px 24px). Holds 4–5 columns of `{colors.on-aubergine-mute}` link groups, social icons, and a small legal/copyright row at the bottom.
|
||||
|
||||
## Do's and Don'ts
|
||||
|
||||
### Do
|
||||
- Reserve `{colors.primary}` aubergine for filled CTAs, the featured pricing tier, and the closing aubergine band — it's the brand's chromatic monotheism.
|
||||
- Use `{rounded.pill}` (90px) for every button across the system — never a rounded-rectangle button.
|
||||
- Pair display tiers with negative letter-spacing (`-0.768px` at 64px); the proprietary face needs the tracking pull.
|
||||
- Compose hero bands with pastel-mesh gradient backdrop + floating product UI mockup; the gradient is the depth.
|
||||
- Use `{colors.link-blue}` for inline links — it's the only chromatic departure from aubergine and is part of the brand voice.
|
||||
|
||||
### Don't
|
||||
- Don't add a third accent color to the system — the aubergine + blue link combination is exhaustive.
|
||||
- Don't shrink button padding below `14px 28px` — the over-padded pill is part of the brand feel.
|
||||
- Don't render display tiers at default tracking (0) — without negative letter-spacing the headlines read loose and unedited.
|
||||
- Don't put product UI screenshots inside cards — they sit ABOVE the pastel-mesh gradient, never inside chrome.
|
||||
- Don't use aubergine for body text — it's a surface and CTA color, not a type color at body sizes.
|
||||
- Don't replace the pill shape with a square button anywhere.
|
||||
|
||||
## Responsive Behavior
|
||||
|
||||
### Breakpoints
|
||||
|
||||
| Name | Width | Key Changes |
|
||||
|---|---|---|
|
||||
| Wide | ≥ 1440px | Full-bleed pastel-mesh hero; pricing 4-up |
|
||||
| Desktop | 1024–1440px | Default content max-width; pricing 4-up |
|
||||
| Tablet | 768–1023px | Pricing 2-up; product UI mockups crop to focal panel |
|
||||
| Mobile | < 768px | Pricing 1-up; hamburger nav; display-xxl drops 64 → 40px |
|
||||
|
||||
### Touch Targets
|
||||
- Pill buttons hit ≥ 48×48px due to the over-padded geometry. WCAG AAA compliant.
|
||||
- Form fields stay at the 44px minimum height.
|
||||
|
||||
### Collapsing Strategy
|
||||
- Display tiers stair-step 64 → 50 → 32 → 28 → 24 across breakpoints.
|
||||
- Pastel-mesh gradients re-tile on mobile to prevent the wash from disappearing entirely.
|
||||
- Floating product UI mockups crop to the most actionable inner panel on mobile.
|
||||
- Pricing tiers stair-step 4 → 2 → 1; aubergine featured tier stays distinguished.
|
||||
- Top nav collapses to hamburger below 768px; menu inherits canvas color.
|
||||
|
||||
### Image Behavior
|
||||
Product UI mockups use `srcset` for desktop / tablet / mobile crops; the mobile crop centers on the most actionable inner panel rather than scaling the whole composite down.
|
||||
|
||||
## Iteration Guide
|
||||
|
||||
1. Focus on ONE component at a time.
|
||||
2. Reference component names and tokens directly (`{colors.primary}`, `{button-primary-pill}-pressed`, `{rounded.pill}`).
|
||||
3. Run `npx @google/design.md lint DESIGN.md` after edits.
|
||||
4. Add new variants as separate entries.
|
||||
5. Default body to `{typography.body-md}`; reserve `{typography.body-lg}` for marketing leads.
|
||||
6. Keep aubergine scarce — one filled aubergine button per viewport.
|
||||
7. Pair every hero band with the pastel-mesh gradient backdrop; bare-canvas heroes read as off-brand.
|
||||
@ -1,194 +1,363 @@
|
||||
# Design System Inspired by SpaceX
|
||||
---
|
||||
version: alpha
|
||||
name: Spasex Inspired
|
||||
description: An inspired interpretation of Spasex's design language — a mission-oriented aerospace brand built on pure black canvas, full-bleed photographic and video heroes of rockets and Mars landscapes, and uppercase D-DIN display type set in tight vertical leading. UI chrome is intentionally minimal: a single ghost outlined pill button per band, all-caps eyebrow microtext, and a fixed top nav over photography. The system is unapologetically austere — black, white, and the imagery itself.
|
||||
|
||||
## 1. Visual Theme & Atmosphere
|
||||
colors:
|
||||
primary: "#000000"
|
||||
ink: "#000000"
|
||||
on-primary: "#ffffff"
|
||||
on-primary-mute: "#f0f0fa"
|
||||
canvas-night: "#000000"
|
||||
canvas-night-soft: "#0a0a0a"
|
||||
canvas-light: "#ffffff"
|
||||
canvas-cool: "#f0f0fa"
|
||||
hairline-on-dark: "#3a3a3f"
|
||||
hairline-on-light: "#e0e0e8"
|
||||
link-on-dark: "#ffffff"
|
||||
link-blue-fallback: "#0000ee"
|
||||
ink-mute: "#5a5a5f"
|
||||
|
||||
SpaceX's website is a full-screen cinematic experience that treats aerospace engineering like a film — every section is a scene, every photograph is a frame, and the interface disappears entirely behind the imagery. The design is pure black (`#000000`) with photography of rockets, space, and planets occupying 100% of the viewport. Text overlays sit directly on these photographs with no background panels, cards, or containers — just type on image, bold and unapologetic.
|
||||
typography:
|
||||
display-xxl:
|
||||
fontFamily: "D-DIN-Bold, Arial Narrow, Arial, Verdana, sans-serif"
|
||||
fontSize: 80px
|
||||
fontWeight: 700
|
||||
lineHeight: 0.95
|
||||
letterSpacing: 1.6px
|
||||
display-xl:
|
||||
fontFamily: "D-DIN-Bold, Arial Narrow, Arial, Verdana, sans-serif"
|
||||
fontSize: 60px
|
||||
fontWeight: 700
|
||||
lineHeight: 1.2
|
||||
letterSpacing: 1.2px
|
||||
display-lg:
|
||||
fontFamily: "D-DIN-Bold, Arial Narrow, Arial, Verdana, sans-serif"
|
||||
fontSize: 48px
|
||||
fontWeight: 700
|
||||
lineHeight: 1.25
|
||||
letterSpacing: 0.96px
|
||||
body-lg:
|
||||
fontFamily: "D-DIN, Arial, Verdana, sans-serif"
|
||||
fontSize: 16px
|
||||
fontWeight: 400
|
||||
lineHeight: 1.7
|
||||
letterSpacing: 0.32px
|
||||
body-md:
|
||||
fontFamily: "D-DIN, Arial, Verdana, sans-serif"
|
||||
fontSize: 16px
|
||||
fontWeight: 400
|
||||
lineHeight: 1.5
|
||||
letterSpacing: 0.32px
|
||||
button-cap:
|
||||
fontFamily: "D-DIN, Arial, Verdana, sans-serif"
|
||||
fontSize: 13.008px
|
||||
fontWeight: 700
|
||||
lineHeight: 0.94
|
||||
letterSpacing: 1.17px
|
||||
micro-cap:
|
||||
fontFamily: "D-DIN, Arial, Verdana, sans-serif"
|
||||
fontSize: 12px
|
||||
fontWeight: 400
|
||||
lineHeight: 2.0
|
||||
letterSpacing: 0.96px
|
||||
caption:
|
||||
fontFamily: "D-DIN, Arial, Verdana, sans-serif"
|
||||
fontSize: 13.008px
|
||||
fontWeight: 400
|
||||
lineHeight: 1.5
|
||||
letterSpacing: 0
|
||||
|
||||
The typography system uses D-DIN, an industrial geometric typeface with DIN heritage (the German industrial standard). The defining characteristic is that virtually ALL text is uppercase with positive letter-spacing (0.96px–1.17px), creating a military/aerospace labeling system where every word feels stenciled onto a spacecraft hull. D-DIN-Bold at 48px with uppercase and 0.96px tracking for the hero creates headlines that feel like mission briefing titles. Even body text at 16px maintains the uppercase/tracked treatment at smaller scales.
|
||||
rounded:
|
||||
xs: 4px
|
||||
sm: 8px
|
||||
md: 16px
|
||||
pill: 32px
|
||||
full: 9999px
|
||||
|
||||
What makes SpaceX distinctive is its radical minimalism: no shadows, no borders (except one ghost button border at `rgba(240,240,250,0.35)`), no color (only black and a spectral near-white `#f0f0fa`), no cards, no grids. The only visual element is photography + text. The ghost button with `rgba(240,240,250,0.1)` background and 32px radius is the sole interactive element — barely visible, floating over the imagery like a heads-up display. This isn't a design system in the traditional sense — it's a photographic exhibition with a type system and a single button.
|
||||
spacing:
|
||||
xxs: 4px
|
||||
xs: 8px
|
||||
sm: 12px
|
||||
md: 16px
|
||||
lg: 18px
|
||||
xl: 24px
|
||||
xxl: 32px
|
||||
huge: 48px
|
||||
|
||||
components:
|
||||
button-ghost-on-dark:
|
||||
backgroundColor: "{colors.canvas-night}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.button-cap}"
|
||||
rounded: "{rounded.pill}"
|
||||
padding: 18px 24px
|
||||
button-ghost-on-light:
|
||||
backgroundColor: "{colors.canvas-light}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.button-cap}"
|
||||
rounded: "{rounded.pill}"
|
||||
padding: 18px 24px
|
||||
button-filled-cool:
|
||||
backgroundColor: "{colors.canvas-cool}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.button-cap}"
|
||||
rounded: "{rounded.pill}"
|
||||
padding: 18px 24px
|
||||
text-input:
|
||||
backgroundColor: "{colors.canvas-light}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 12px 16px
|
||||
card-photo-band:
|
||||
backgroundColor: "{colors.canvas-night}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 0px
|
||||
card-shop-product:
|
||||
backgroundColor: "{colors.canvas-light}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.sm}"
|
||||
padding: 16px
|
||||
nav-bar-overlay:
|
||||
backgroundColor: "{colors.canvas-night}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.button-cap}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 24px 32px
|
||||
link-on-dark:
|
||||
backgroundColor: "{colors.canvas-night}"
|
||||
textColor: "{colors.link-on-dark}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 0px
|
||||
link-on-light:
|
||||
backgroundColor: "{colors.canvas-light}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 0px
|
||||
footer-dark:
|
||||
backgroundColor: "{colors.canvas-night}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.caption}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 32px 24px
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
Spasex's design language is an exercise in negation: pure black canvas, white display type set in tight vertical leading and uppercase, full-bleed photography or autoplaying rocket-launch video as the only chrome. There is no brand color beyond black-and-white; there are no decorative shapes; there are no card grids or pricing tables on the marketing pages. Every band is a single full-viewport photograph or video paired with one all-caps headline at `{typography.display-xxl}` (80px D-DIN-Bold) and one ghost-outlined pill CTA. The composition is closer to a film title card than a SaaS landing page.
|
||||
|
||||
The brand's depth is photographic. Mars landscapes, rocket exhaust plumes, the F9 booster on a launchpad at sunset — these are the design system. Type sits over them at high opacity with no scrim, no gradient overlay; the photographs are graded so the type lands cleanly. When type does need a background, it sits on `{colors.canvas-night-soft}` (a barely-lifted near-black) with a 1px hairline in `{colors.hairline-on-dark}`.
|
||||
|
||||
Typography splits between **D-DIN-Bold** for display tiers (uppercase, tight tracking, condensed feel) and **D-DIN** regular for body and button labels. There is no third family — even pricing on the shop site uses the same two cuts. The display sizes are unusually tight in vertical leading (0.95–1.25) and unusually loose in horizontal tracking (1.6px positive at 80px) — the brand feels engineered rather than designed.
|
||||
|
||||
**Key Characteristics:**
|
||||
- Pure black canvas with full-viewport cinematic photography — the interface is invisible
|
||||
- D-DIN / D-DIN-Bold — industrial DIN-heritage typeface
|
||||
- Universal uppercase + positive letter-spacing (0.96px–1.17px) — aerospace stencil aesthetic
|
||||
- Near-white spectral text (`#f0f0fa`) — not pure white, a slight blue-violet tint
|
||||
- Zero shadows, zero cards, zero containers — text on image only
|
||||
- Single ghost button: `rgba(240,240,250,0.1)` background with spectral border
|
||||
- Full-viewport sections — each section is a cinematic "scene"
|
||||
- No decorative elements — every pixel serves the photography
|
||||
- Single canvas: pure `{colors.canvas-night}` (`#000000`) for marketing; `{colors.canvas-light}` only on the shop site.
|
||||
- Display tier in uppercase D-DIN-Bold with positive horizontal tracking (1.6px at 80px) — the brand's typographic signature.
|
||||
- Full-bleed photography or autoplaying video as the dominant decorative element; type sits directly on imagery with no scrim.
|
||||
- Single ghost-outlined pill CTA per band, at `{rounded.pill}` 32px radius — never filled, never accent-colored.
|
||||
- All-caps eyebrow microtext (`{typography.micro-cap}` and `{typography.button-cap}`) with positive 0.96–1.17px tracking — every chrome element shouts in caps.
|
||||
- Fixed top nav overlaid on photography — no opaque background, just white-on-image.
|
||||
- Tight 0.95 line-height on the 80px display — vertical compression is the engineering aesthetic.
|
||||
|
||||
## 2. Color Palette & Roles
|
||||
## Colors
|
||||
|
||||
### Primary
|
||||
- **Space Black** (`#000000`): Page background, the void of space — at 50% opacity for overlay gradient
|
||||
- **Spectral White** (`#f0f0fa`): Text color — not pure white, a slight blue-violet tint that mimics starlight
|
||||
> **Source pages:** home (`/`), `/shop`, `/vehicles/starship`, `/humanspaceflight/overview`, `/mission`.
|
||||
|
||||
### Interactive
|
||||
- **Ghost Surface** (`rgba(240, 240, 250, 0.1)`): Button background — nearly invisible, 10% opacity
|
||||
- **Ghost Border** (`rgba(240, 240, 250, 0.35)`): Button border — spectral, 35% opacity
|
||||
- **Hover White** (`var(--white-100)`): Link hover state — full spectral white
|
||||
### Brand & Accent
|
||||
The brand has no accent colors. Black and white do all the chromatic work; photography supplies every other hue.
|
||||
|
||||
### Gradient
|
||||
- **Dark Overlay** (`rgba(0, 0, 0, 0.5)`): Gradient overlay on photographs to ensure text legibility
|
||||
### Surface
|
||||
- **Canvas Night** (`{colors.canvas-night}` — `#000000`): Default marketing canvas. Pure black, no tint.
|
||||
- **Canvas Night Soft** (`{colors.canvas-night-soft}` — `#0a0a0a`): Barely-lifted near-black for content sections that need a subtle separation from the pure-black hero.
|
||||
- **Canvas Light** (`{colors.canvas-light}` — `#ffffff`): The shop site's product surface.
|
||||
- **Canvas Cool** (`{colors.canvas-cool}` — `#f0f0fa`): A pale cool-blue-white used as the secondary surface on the shop site and as the hover-canvas of certain ghost buttons.
|
||||
- **Hairline on Dark** (`{colors.hairline-on-dark}` — `#3a3a3f`): 1px borders on dark surface chrome.
|
||||
- **Hairline on Light** (`{colors.hairline-on-light}` — `#e0e0e8`): Borders on shop-site cards.
|
||||
|
||||
## 3. Typography Rules
|
||||
### Text
|
||||
- **On Primary** (`{colors.on-primary}` — `#ffffff`): Default text on dark canvas; the dominant text color across the marketing site.
|
||||
- **On Primary Mute** (`{colors.on-primary-mute}` — `#f0f0fa`): Slightly cooled-white used for secondary text on dark surfaces — barely distinguishable from `{colors.on-primary}` but enough to suggest a hierarchy.
|
||||
- **Ink** (`{colors.ink}` — `#000000`): Default text on light surfaces (shop site).
|
||||
- **Ink Mute** (`{colors.ink-mute}` — `#5a5a5f`): Secondary text on light surfaces.
|
||||
|
||||
### Font Families
|
||||
- **Display**: `D-DIN-Bold` — bold industrial geometric
|
||||
- **Body / UI**: `D-DIN`, fallbacks: `Arial, Verdana`
|
||||
### Link
|
||||
- **Link on Dark** (`{colors.link-on-dark}` — `#ffffff`): Underlined inline link on dark canvas.
|
||||
- **Link Blue Fallback** (`{colors.link-blue-fallback}` — `#0000ee`): The browser default that appears in unstyled fallback contexts — documented for completeness, not used as a brand color.
|
||||
|
||||
## Typography
|
||||
|
||||
### Font Family
|
||||
|
||||
The display tier is **D-DIN-Bold** — a condensed industrial sans inspired by the German DIN 1451 standard (used on autobahn road signage and engineering blueprints). When unavailable, fall back to **Arial Narrow**, then Arial, then Verdana — the fallback chain prioritizes width compression over ornament.
|
||||
|
||||
The UI tier is **D-DIN** (regular weight) — the same family at standard width — used for body, button labels, and captions.
|
||||
|
||||
D-DIN is freely available from the **DIN Type Foundry** (and a free version under the same name is widely distributed). For maximum brand fidelity, use D-DIN directly; as a substitute, **Inter** at heavy weights (700+) with letter-spacing of 1.6px positive tracking approximates the rhythm. Avoid serif or humanist sans alternatives.
|
||||
|
||||
### Hierarchy
|
||||
|
||||
| Role | Font | Size | Weight | Line Height | Letter Spacing | Notes |
|
||||
|------|------|------|--------|-------------|----------------|-------|
|
||||
| Display Hero | D-DIN-Bold | 48px (3.00rem) | 700 | 1.00 (tight) | 0.96px | `text-transform: uppercase` |
|
||||
| Body | D-DIN | 16px (1.00rem) | 400 | 1.50–1.70 | normal | Standard reading text |
|
||||
| Nav Link Bold | D-DIN | 13px (0.81rem) | 700 | 0.94 (tight) | 1.17px | `text-transform: uppercase` |
|
||||
| Nav Link | D-DIN | 12px (0.75rem) | 400 | 2.00 (relaxed) | normal | `text-transform: uppercase` |
|
||||
| Caption Bold | D-DIN | 13px (0.81rem) | 700 | 0.94 (tight) | 1.17px | `text-transform: uppercase` |
|
||||
| Caption | D-DIN | 12px (0.75rem) | 400 | 1.00 (tight) | normal | `text-transform: uppercase` |
|
||||
| Micro | D-DIN | 10px (0.63rem) | 400 | 0.94 (tight) | 1px | `text-transform: uppercase` |
|
||||
| Token | Size | Weight | Line Height | Letter Spacing | Use |
|
||||
|---|---|---|---|---|---|
|
||||
| `{typography.display-xxl}` | 80px | 700 | 0.95 | 1.6px | Hero headline (uppercase) |
|
||||
| `{typography.display-xl}` | 60px | 700 | 1.2 | 1.2px | Section opener (uppercase) |
|
||||
| `{typography.display-lg}` | 48px | 700 | 1.25 | 0.96px | Sub-section heading (uppercase) |
|
||||
| `{typography.body-lg}` | 16px | 400 | 1.7 | 0.32px | Marketing body lead |
|
||||
| `{typography.body-md}` | 16px | 400 | 1.5 | 0.32px | Default UI body |
|
||||
| `{typography.button-cap}` | 13.008px | 700 | 0.94 | 1.17px | All-caps button label |
|
||||
| `{typography.micro-cap}` | 12px | 400 | 2.0 | 0.96px | All-caps eyebrow / nav item |
|
||||
| `{typography.caption}` | 13.008px | 400 | 1.5 | 0 | Helper / footer text |
|
||||
|
||||
### Principles
|
||||
- **Universal uppercase**: Nearly every text element uses `text-transform: uppercase`. This creates a systematic military/aerospace voice where all communication feels like official documentation.
|
||||
- **Positive letter-spacing as identity**: 0.96px on display, 1.17px on nav — the wide tracking creates the stenciled, industrial feel that connects to DIN's heritage as a German engineering standard.
|
||||
- **Two weights, strict hierarchy**: D-DIN-Bold (700) for headlines and nav emphasis, D-DIN (400) for body. No medium or semibold weights exist in the system.
|
||||
- **Tight line-heights**: 0.94–1.00 across most text — compressed, efficient, mission-critical communication.
|
||||
- **Uppercase across display.** Every display tier renders in uppercase. The brand never uses sentence-case display headlines.
|
||||
- **Tight vertical leading on display.** 0.95 at 80px and 1.2 at 60px — the type stacks engineer-tight.
|
||||
- **Wide horizontal tracking.** Positive 0.96–1.6px tracking on display sizes; positive 0.96–1.17px on caps eyebrows. The wide tracking is the brand's signature optical air.
|
||||
- **No mono.** Code blocks are not part of the brand's typographic system.
|
||||
|
||||
## 4. Component Stylings
|
||||
### Note on Font Substitutes
|
||||
**D-DIN** is freely available (the original DIN-style face under that name is widely distributed). When unavailable, use **Inter** at 700 weight with `letter-spacing: 1.6px`, `text-transform: uppercase`, and `line-height: 0.95` for display sizes — this matches the rhythm. Avoid Helvetica or Arial at default weights — the brand needs the condensed industrial cut. Avoid serif fallbacks entirely.
|
||||
|
||||
## Layout
|
||||
|
||||
### Spacing System
|
||||
- **Base unit**: 8px (with denser sub-units 4 / 12 / 16 / 18 / 24).
|
||||
- **Tokens**: `{spacing.xxs}` 4px · `{spacing.xs}` 8px · `{spacing.sm}` 12px · `{spacing.md}` 16px · `{spacing.lg}` 18px · `{spacing.xl}` 24px · `{spacing.xxl}` 32px · `{spacing.huge}` 48px.
|
||||
- **Section padding**: full-viewport bands on marketing — no internal padding above/below; the photograph IS the section. On the shop site, sections use 48–64px vertical padding.
|
||||
|
||||
### Grid & Container
|
||||
- Marketing pages have no container — every band is full-viewport-width, full-viewport-height (or close to it) with photography filling the entire frame.
|
||||
- Shop product grid: 4-up at desktop, 2-up at tablet, 1-up at mobile.
|
||||
- Type sits inside an inner ~1200px reading column centered horizontally over the full-bleed photograph.
|
||||
|
||||
### Whitespace Philosophy
|
||||
The marketing pages have minimal traditional whitespace — the photograph occupies all space. "Whitespace" here means the dark sky in a rocket photograph or the empty stretch of Martian terrain. Negative space is photographic, not a UI choice. On the shop site whitespace returns to standard 32px grid gutters.
|
||||
|
||||
## Elevation & Depth
|
||||
|
||||
| Level | Treatment | Use |
|
||||
|---|---|---|
|
||||
| 0 | Flat | Default — and the only level on marketing surfaces |
|
||||
| 1 | Photographic — full-bleed image or video | The primary depth medium; photographs do all the lifting |
|
||||
|
||||
The brand does not use drop shadows, blurs, glows, or gradient overlays. Depth is photographic: a rocket launching at twilight has natural atmospheric depth that no CSS shadow could simulate. When type needs separation from imagery, the image is graded darker rather than scrimmed.
|
||||
|
||||
### Decorative Depth
|
||||
Photography and autoplaying rocket-launch video are the only decorative depth. There are no illustrations, no icons beyond a few minimal SVG arrow chevrons in nav and CTA hover states.
|
||||
|
||||
## Shapes
|
||||
|
||||
### Border Radius Scale
|
||||
|
||||
| Token | Value | Use |
|
||||
|---|---|---|
|
||||
| `{rounded.xs}` | 4px | Form inputs (shop site) |
|
||||
| `{rounded.sm}` | 8px | Shop product card chrome, video frames |
|
||||
| `{rounded.md}` | 16px | Larger surface chrome |
|
||||
| `{rounded.pill}` | 32px | Ghost outlined pill CTAs (the brand's signature button shape) |
|
||||
| `{rounded.full}` | 9999px | Circular play-button overlays on video frames |
|
||||
|
||||
### Photography Geometry
|
||||
Every photograph is full-viewport-bleed, edge-to-edge, never inset in a card on the marketing site. On the shop site, product photography sits inside `{rounded.sm}` 8px containers with no shadow. Aspect ratios on marketing photography vary with the source image — there is no enforced ratio; the photograph leads.
|
||||
|
||||
## Components
|
||||
|
||||
### Buttons
|
||||
|
||||
**Ghost Button**
|
||||
- Background: `rgba(240, 240, 250, 0.1)` (barely visible)
|
||||
- Text: Spectral White (`#f0f0fa`)
|
||||
- Padding: 18px
|
||||
- Radius: 32px
|
||||
- Border: `1px solid rgba(240, 240, 250, 0.35)`
|
||||
- Hover: background brightens, text to `var(--white-100)`
|
||||
- Use: The only button variant — "LEARN MORE" CTAs on photography
|
||||
**`button-ghost-on-dark`** — the universal CTA on marketing surfaces.
|
||||
- Background `{colors.canvas-night}` (transparent against the photographed canvas), 1px solid `{colors.on-primary}` border, text `{colors.on-primary}`, type `{typography.button-cap}` (uppercase, 13px / 700 / 1.17px tracking), padding `{spacing.lg} {spacing.xl}` (18px 24px), rounded `{rounded.pill}` 32px.
|
||||
|
||||
**`button-ghost-on-light`** — the same button on shop / light pages.
|
||||
- Background `{colors.canvas-light}` (transparent against light canvas), 1px solid `{colors.ink}` border, text `{colors.ink}`, otherwise identical.
|
||||
|
||||
**`button-filled-cool`** — fill variant on shop product cards.
|
||||
- Background `{colors.canvas-cool}`, text `{colors.ink}`, same pill geometry. Used as "Add to cart" or similar product CTAs.
|
||||
|
||||
### Cards & Containers
|
||||
- **None.** SpaceX does not use cards, panels, or containers. All content is text directly on full-viewport photographs. The absence of containers IS the design.
|
||||
|
||||
**`card-photo-band`** — full-bleed photographic band on marketing pages.
|
||||
- Background `{colors.canvas-night}`, padding 0, rounded `{rounded.xs}`. The photograph fills the entire band; type and CTA sit overlaid.
|
||||
|
||||
**`card-shop-product`** — product card on the shop site.
|
||||
- Background `{colors.canvas-light}`, padding `{spacing.md}` 16px, rounded `{rounded.sm}` 8px, 1px `{colors.hairline-on-light}` border. Product photo on top, name in `{typography.body-md}`, price in `{typography.body-md}` 700 weight, "Add to cart" button at the bottom.
|
||||
|
||||
### Inputs & Forms
|
||||
- Not present on the homepage. The site is purely presentational.
|
||||
|
||||
**`text-input`** — form input on the shop site.
|
||||
- Background `{colors.canvas-light}`, text `{colors.ink}`, type `{typography.body-md}`, padding `{spacing.sm} {spacing.md}` (12px 16px), rounded `{rounded.xs}` 4px, 1px `{colors.hairline-on-light}` border.
|
||||
|
||||
### Navigation
|
||||
- Transparent overlay nav on photography
|
||||
- D-DIN 13px weight 700, uppercase, 1.17px tracking
|
||||
- Spectral white text on dark imagery
|
||||
- Logo: SpaceX wordmark at 147x19px
|
||||
- Mobile: hamburger collapse
|
||||
|
||||
### Image Treatment
|
||||
- Full-viewport (100vh) photography sections
|
||||
- Professional aerospace photography: rockets, Mars, space
|
||||
- Dark gradient overlays (`rgba(0,0,0,0.5)`) for text legibility
|
||||
- Each section = one full-screen photograph with text overlay
|
||||
- No border radius, no frames — edge-to-edge imagery
|
||||
**`nav-bar-overlay`** — top nav across the marketing site.
|
||||
- Background `{colors.canvas-night}` (transparent over the hero photo), text `{colors.on-primary}`, type `{typography.button-cap}` (uppercase). Logo wordmark on the left at ~147×19px, nav items horizontal in caps, padding `{spacing.xl} {spacing.xxl}` (24px 32px). The nav is fixed/sticky on scroll, retaining the overlay treatment.
|
||||
|
||||
## 5. Layout Principles
|
||||
### Signature Components
|
||||
|
||||
### Spacing System
|
||||
- Base unit: 8px
|
||||
- Scale: 3px, 5px, 12px, 15px, 18px, 20px, 24px, 30px
|
||||
- Minimal scale — spacing is not the organizing principle; photography is
|
||||
**Full-Bleed Photo / Video Hero** — every marketing band is a full-viewport photograph or autoplaying rocket-launch video. Type and CTA sit overlaid on the photograph at high opacity with no scrim. The photograph is graded so type lands cleanly without an overlay layer.
|
||||
|
||||
### Grid & Container
|
||||
- No traditional grid — each section is a full-viewport cinematic frame
|
||||
- Text is positioned absolutely or with generous padding over imagery
|
||||
- Left-aligned text blocks on photography backgrounds
|
||||
- No max-width container — content bleeds to viewport edges
|
||||
**Uppercase Display Headline** — the 80px D-DIN-Bold uppercase headline with 1.6px positive tracking is the brand's most recognizable typographic moment. Always uppercase, always bold-weight, always positively tracked.
|
||||
|
||||
### Whitespace Philosophy
|
||||
- **Photography IS the whitespace**: Empty space in the design is never empty — it's filled with the dark expanse of space, the curve of a planet, or the flame of a rocket engine. Traditional whitespace concepts don't apply.
|
||||
- **Vertical pacing through viewport**: Each section is exactly one viewport tall, creating a rhythmic scroll where each "page" reveals a new scene.
|
||||
**`link-on-dark`** — inline links on dark canvas.
|
||||
- Text `{colors.link-on-dark}` (white) with persistent underline.
|
||||
|
||||
### Border Radius Scale
|
||||
- Sharp (4px): Small dividers, utility elements
|
||||
- Button (32px): Ghost buttons — the only rounded element
|
||||
**`link-on-light`** — inline links on light canvas.
|
||||
- Text `{colors.ink}` with persistent underline.
|
||||
|
||||
## 6. Depth & Elevation
|
||||
**`footer-dark`** — site-wide footer.
|
||||
- Background `{colors.canvas-night}`, text `{colors.on-primary}`, type `{typography.caption}`, padding `{spacing.xxl} {spacing.xl}` (32px 24px). Holds nav columns in `{typography.micro-cap}` (uppercase), and a small legal/copyright row at the bottom.
|
||||
|
||||
| Level | Treatment | Use |
|
||||
|-------|-----------|-----|
|
||||
| Photography (Level 0) | Full-viewport imagery | Background layer — always present |
|
||||
| Overlay (Level 1) | `rgba(0, 0, 0, 0.5)` gradient | Text legibility layer over photography |
|
||||
| Text (Level 2) | Spectral white text, no shadow | Content layer — text floats directly on image |
|
||||
| Ghost (Level 3) | `rgba(240, 240, 250, 0.1)` surface | Barely-visible interactive layer |
|
||||
|
||||
**Shadow Philosophy**: SpaceX uses ZERO shadows. In a design built entirely on photography, shadows are meaningless — every surface is already a photograph with natural lighting. Depth comes from the photographic content itself: the receding curvature of Earth, the diminishing trail of a rocket, the atmospheric haze around Mars.
|
||||
|
||||
## 7. Do's and Don'ts
|
||||
## Do's and Don'ts
|
||||
|
||||
### Do
|
||||
- Use full-viewport photography as the primary design element — every section is a scene
|
||||
- Apply uppercase + positive letter-spacing to ALL text — the aerospace stencil voice
|
||||
- Use D-DIN exclusively — no other fonts exist in the system
|
||||
- Keep the color palette to black + spectral white (`#f0f0fa`) only
|
||||
- Use ghost buttons (`rgba(240,240,250,0.1)`) as the sole interactive element
|
||||
- Apply dark gradient overlays for text legibility on photographs
|
||||
- Let photography carry the emotional weight — the type system is functional, not expressive
|
||||
- Use full-bleed photography or autoplaying video as the dominant decorative element on every marketing band.
|
||||
- Render display tiers in uppercase D-DIN-Bold with positive 0.96–1.6px letter-spacing — the wide tracking is the signature.
|
||||
- Use a single `{button-ghost-on-dark}` per band — the brand does NOT show two CTAs side by side on marketing surfaces.
|
||||
- Pair every photograph with type that respects the imagery — no scrims, no gradients, no overlays. Grade the photo, not the canvas.
|
||||
- Keep nav overlay-style (transparent, white-on-image) on marketing pages.
|
||||
|
||||
### Don't
|
||||
- Don't add cards, panels, or containers — text sits directly on photography
|
||||
- Don't use shadows — they have no meaning in a photographic context
|
||||
- Don't introduce colors — the palette is strictly achromatic with spectral tint
|
||||
- Don't use sentence case — everything is uppercase
|
||||
- Don't use negative letter-spacing — all tracking is positive (0.96px–1.17px)
|
||||
- Don't reduce photography to thumbnails — every image is full-viewport
|
||||
- Don't add decorative elements (icons, badges, dividers) — the design is photography + type + one button
|
||||
- Don't introduce brand accent colors — black, white, and photography are the entire palette.
|
||||
- Don't use drop shadows or gradient overlays on dark canvas — they fight the photography.
|
||||
- Don't render display tiers in sentence-case or title-case — uppercase is the brand.
|
||||
- Don't put filled buttons on marketing surfaces — the ghost outlined pill is the only marketing CTA.
|
||||
- Don't use serif or humanist sans alternatives — the condensed industrial DIN cut is non-negotiable.
|
||||
|
||||
## 8. Responsive Behavior
|
||||
## Responsive Behavior
|
||||
|
||||
### Breakpoints
|
||||
|
||||
| Name | Width | Key Changes |
|
||||
|------|-------|-------------|
|
||||
| Mobile | <600px | Stacked, reduced padding, smaller type |
|
||||
| Tablet Small | 600–960px | Adjusted layout |
|
||||
| Tablet | 960–1280px | Standard scaling |
|
||||
| Desktop | 1280–1350px | Full layout |
|
||||
| Large Desktop | 1350–1500px | Expanded |
|
||||
| Ultra-wide | >1500px | Maximum viewport |
|
||||
|---|---|---|
|
||||
| Wide | ≥ 1500px | Full hero photograph; max-content type column at 1200px |
|
||||
| Desktop | 1280–1499px | Default desktop layout |
|
||||
| Laptop | 961–1279px | Type column tightens; photo crops adjust |
|
||||
| Tablet | 768–960px | Display drops 80 → 60px; nav compresses |
|
||||
| Mobile | 600–767px | Display drops to 48px; ghost button retains pill shape |
|
||||
| Small Mobile | < 600px | Display drops to 40px; nav becomes hamburger |
|
||||
|
||||
### Touch Targets
|
||||
- Ghost buttons: 18px padding provides adequate touch area
|
||||
- Navigation links: uppercase with generous letter-spacing aids readability
|
||||
- Ghost pill buttons hit ≥ 50×50px due to the 18px vertical padding × 13px line-height. WCAG AAA compliant.
|
||||
- Form fields stay at the 44px minimum height.
|
||||
|
||||
### Collapsing Strategy
|
||||
- Photography: maintains full-viewport at all sizes, content reposition
|
||||
- Hero text: 48px → scales down proportionally
|
||||
- Navigation: horizontal → hamburger
|
||||
- Text blocks: reposition but maintain overlay-on-photography pattern
|
||||
- Full-viewport sections maintained on mobile
|
||||
- Display sizes stair-step 80 → 60 → 48 → 40px through the breakpoints.
|
||||
- Photography re-crops to focal subject on smaller widths (rocket centered, Mars landscape centered).
|
||||
- Top nav collapses to hamburger below 768px; menu retains the dark overlay treatment.
|
||||
- Shop product grid stair-steps 4-up → 2-up → 1-up.
|
||||
|
||||
### Image Behavior
|
||||
- Edge-to-edge photography at all viewport sizes
|
||||
- Background-size: cover with center focus
|
||||
- Dark overlay gradients adapt to content position
|
||||
- No art direction changes — same photographs, responsive positioning
|
||||
Marketing photography uses `srcset` for desktop / tablet / mobile with art-direction crops at major breakpoints. Mobile crops favor the central focal subject; wide crops favor environmental context (full launch pad, full Martian horizon).
|
||||
|
||||
## 9. Agent Prompt Guide
|
||||
## Iteration Guide
|
||||
|
||||
### Quick Color Reference
|
||||
- Background: Space Black (`#000000`)
|
||||
- Text: Spectral White (`#f0f0fa`)
|
||||
- Button background: Ghost (`rgba(240, 240, 250, 0.1)`)
|
||||
- Button border: Ghost Border (`rgba(240, 240, 250, 0.35)`)
|
||||
- Overlay: `rgba(0, 0, 0, 0.5)`
|
||||
|
||||
### Example Component Prompts
|
||||
- "Create a full-viewport hero: background-image covering 100vh, dark gradient overlay rgba(0,0,0,0.5). Headline at 48px D-DIN-Bold, uppercase, letter-spacing 0.96px, spectral white (#f0f0fa) text. Ghost CTA button: rgba(240,240,250,0.1) bg, 1px solid rgba(240,240,250,0.35) border, 32px radius, 18px padding."
|
||||
- "Design a navigation: transparent over photography. D-DIN 13px weight 700, uppercase, letter-spacing 1.17px, spectral white text. SpaceX wordmark left-aligned."
|
||||
- "Build a content section: full-viewport height, background photography with dark overlay. Left-aligned text block with 48px D-DIN-Bold uppercase heading, 16px D-DIN body text, and ghost button below."
|
||||
- "Create a micro label: D-DIN 10px, uppercase, letter-spacing 1px, spectral white, line-height 0.94."
|
||||
|
||||
### Iteration Guide
|
||||
1. Start with photography — the image IS the design
|
||||
2. All text is uppercase with positive letter-spacing — no exceptions
|
||||
3. Only two colors: black and spectral white (#f0f0fa)
|
||||
4. Ghost buttons are the only interactive element — transparent, spectral-bordered
|
||||
5. Zero shadows, zero cards, zero decorative elements
|
||||
6. Every section is full-viewport (100vh) — cinematic pacing
|
||||
1. Focus on ONE component at a time.
|
||||
2. Reference component names and tokens directly (`{colors.canvas-night}`, `{button-ghost-on-dark}`, `{rounded.pill}`).
|
||||
3. Run `npx @google/design.md lint DESIGN.md` after edits.
|
||||
4. Add new variants as separate entries.
|
||||
5. Default body to `{typography.body-md}`; reserve `{typography.body-lg}` for marketing leads.
|
||||
6. The black-and-white-only rule is load-bearing — adding a brand accent color breaks the system.
|
||||
7. Ghost pill is the only marketing CTA; filled buttons live exclusively on the shop site.
|
||||
|
||||
@ -1,322 +1,487 @@
|
||||
# Design System Inspired by Stripe
|
||||
---
|
||||
version: alpha
|
||||
name: Stripi Inspired
|
||||
description: An inspired interpretation of Stripi's design language — a financial-infrastructure brand built on a deep navy ink, an electric indigo primary, and a recurring atmospheric gradient mesh that occupies the upper third of nearly every marketing page. The system pairs the proprietary Sohne family at thin (300) weights with negative letter-spacing for editorial-density display headlines, and uses tabular-figure body type where money and numerics matter. Buttons are tight-radius pills, cards live on near-white surfaces, and the dashboard track flips polarity to a familiar dark-app shell.
|
||||
|
||||
## 1. Visual Theme & Atmosphere
|
||||
colors:
|
||||
primary: "#533afd"
|
||||
primary-deep: "#4434d4"
|
||||
primary-press: "#2e2b8c"
|
||||
primary-soft: "#665efd"
|
||||
primary-bg-subdued-hover: "#b9b9f9"
|
||||
brand-dark-900: "#1c1e54"
|
||||
ink: "#0d253d"
|
||||
ink-secondary: "#273951"
|
||||
ink-mute: "#64748d"
|
||||
ink-mute-2: "#61718a"
|
||||
on-primary: "#ffffff"
|
||||
canvas: "#ffffff"
|
||||
canvas-soft: "#f6f9fc"
|
||||
canvas-cream: "#f5e9d4"
|
||||
hairline: "#e3e8ee"
|
||||
hairline-input: "#a8c3de"
|
||||
ruby: "#ea2261"
|
||||
magenta: "#f96bee"
|
||||
lemon: "#9b6829"
|
||||
shadow-blue: "#003770"
|
||||
|
||||
Stripe's website is the gold standard of fintech design -- a system that manages to feel simultaneously technical and luxurious, precise and warm. The page opens on a clean white canvas (`#ffffff`) with deep navy headings (`#061b31`) and a signature purple (`#533afd`) that functions as both brand anchor and interactive accent. This isn't the cold, clinical purple of enterprise software; it's a rich, saturated violet that reads as confident and premium. The overall impression is of a financial institution redesigned by a world-class type foundry.
|
||||
typography:
|
||||
display-xxl:
|
||||
fontFamily: "sohne-var, 'SF Pro Display', system-ui, -apple-system, sans-serif"
|
||||
fontSize: 56px
|
||||
fontWeight: 300
|
||||
lineHeight: 1.03
|
||||
letterSpacing: -1.4px
|
||||
fontFeature: ss01
|
||||
display-xl:
|
||||
fontFamily: "sohne-var, 'SF Pro Display', system-ui, -apple-system, sans-serif"
|
||||
fontSize: 48px
|
||||
fontWeight: 300
|
||||
lineHeight: 1.15
|
||||
letterSpacing: -0.96px
|
||||
fontFeature: ss01
|
||||
display-lg:
|
||||
fontFamily: "sohne-var, 'SF Pro Display', system-ui, -apple-system, sans-serif"
|
||||
fontSize: 32px
|
||||
fontWeight: 300
|
||||
lineHeight: 1.1
|
||||
letterSpacing: -0.64px
|
||||
fontFeature: ss01
|
||||
display-md:
|
||||
fontFamily: "sohne-var, 'SF Pro Display', system-ui, -apple-system, sans-serif"
|
||||
fontSize: 26px
|
||||
fontWeight: 300
|
||||
lineHeight: 1.12
|
||||
letterSpacing: -0.26px
|
||||
fontFeature: ss01
|
||||
heading-lg:
|
||||
fontFamily: "sohne-var, 'SF Pro Display', system-ui, -apple-system, sans-serif"
|
||||
fontSize: 22px
|
||||
fontWeight: 300
|
||||
lineHeight: 1.1
|
||||
letterSpacing: -0.22px
|
||||
fontFeature: ss01
|
||||
heading-md:
|
||||
fontFamily: "sohne-var, 'SF Pro Display', system-ui, -apple-system, sans-serif"
|
||||
fontSize: 20px
|
||||
fontWeight: 300
|
||||
lineHeight: 1.4
|
||||
letterSpacing: -0.2px
|
||||
fontFeature: ss01
|
||||
heading-sm:
|
||||
fontFamily: "sohne-var, 'SF Pro Display', system-ui, -apple-system, sans-serif"
|
||||
fontSize: 18px
|
||||
fontWeight: 300
|
||||
lineHeight: 1.4
|
||||
letterSpacing: 0
|
||||
fontFeature: ss01
|
||||
body-lg:
|
||||
fontFamily: "sohne-var, 'SF Pro Display', system-ui, -apple-system, sans-serif"
|
||||
fontSize: 16px
|
||||
fontWeight: 300
|
||||
lineHeight: 1.4
|
||||
letterSpacing: 0
|
||||
fontFeature: ss01
|
||||
body-md:
|
||||
fontFamily: "sohne-var, 'SF Pro Display', system-ui, -apple-system, sans-serif"
|
||||
fontSize: 15px
|
||||
fontWeight: 300
|
||||
lineHeight: 1.4
|
||||
letterSpacing: 0
|
||||
fontFeature: ss01
|
||||
body-tabular:
|
||||
fontFamily: "sohne-var, 'SF Pro Display', system-ui, -apple-system, sans-serif"
|
||||
fontSize: 14px
|
||||
fontWeight: 300
|
||||
lineHeight: 1.4
|
||||
letterSpacing: -0.42px
|
||||
fontFeature: tnum
|
||||
button-md:
|
||||
fontFamily: "sohne-var, 'SF Pro Display', system-ui, -apple-system, sans-serif"
|
||||
fontSize: 16px
|
||||
fontWeight: 400
|
||||
lineHeight: 1.0
|
||||
letterSpacing: 0
|
||||
fontFeature: ss01
|
||||
button-sm:
|
||||
fontFamily: "sohne-var, 'SF Pro Display', system-ui, -apple-system, sans-serif"
|
||||
fontSize: 14px
|
||||
fontWeight: 400
|
||||
lineHeight: 1.0
|
||||
letterSpacing: 0
|
||||
fontFeature: ss01
|
||||
caption:
|
||||
fontFamily: "sohne-var, 'SF Pro Display', system-ui, -apple-system, sans-serif"
|
||||
fontSize: 13px
|
||||
fontWeight: 400
|
||||
lineHeight: 1.4
|
||||
letterSpacing: -0.39px
|
||||
fontFeature: tnum
|
||||
micro:
|
||||
fontFamily: "sohne-var, 'SF Pro Display', system-ui, -apple-system, sans-serif"
|
||||
fontSize: 11px
|
||||
fontWeight: 300
|
||||
lineHeight: 1.4
|
||||
letterSpacing: 0
|
||||
fontFeature: ss01
|
||||
micro-cap:
|
||||
fontFamily: "sohne-var, 'SF Pro Display', system-ui, -apple-system, sans-serif"
|
||||
fontSize: 10px
|
||||
fontWeight: 400
|
||||
lineHeight: 1.15
|
||||
letterSpacing: 0.1px
|
||||
fontFeature: ss01
|
||||
|
||||
The custom `sohne-var` variable font is the defining element of Stripe's visual identity. Every text element enables the OpenType `"ss01"` stylistic set, which modifies character shapes for a distinctly geometric, modern feel. At display sizes (48px-56px), sohne-var runs at weight 300 -- an extraordinarily light weight for headlines that creates an ethereal, almost whispered authority. This is the opposite of the "bold hero headline" convention; Stripe's headlines feel like they don't need to shout. The negative letter-spacing (-1.4px at 56px, -0.96px at 48px) tightens the text into dense, engineered blocks. At smaller sizes, the system also uses weight 300 with proportionally reduced tracking, and tabular numerals via `"tnum"` for financial data display.
|
||||
rounded:
|
||||
xs: 4px
|
||||
sm: 6px
|
||||
md: 8px
|
||||
lg: 12px
|
||||
xl: 16px
|
||||
pill: 9999px
|
||||
|
||||
What truly distinguishes Stripe is its shadow system. Rather than the flat or single-layer approach of most sites, Stripe uses multi-layer, blue-tinted shadows: the signature `rgba(50,50,93,0.25)` combined with `rgba(0,0,0,0.1)` creates shadows with a cool, almost atmospheric depth -- like elements are floating in a twilight sky. The blue-gray undertone of the primary shadow color (50,50,93) ties directly to the navy-purple brand palette, making even elevation feel on-brand.
|
||||
spacing:
|
||||
xxs: 2px
|
||||
xs: 4px
|
||||
sm: 8px
|
||||
md: 12px
|
||||
lg: 16px
|
||||
xl: 24px
|
||||
xxl: 32px
|
||||
huge: 64px
|
||||
|
||||
components:
|
||||
button-primary-pill:
|
||||
backgroundColor: "{colors.primary}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.button-md}"
|
||||
rounded: "{rounded.pill}"
|
||||
padding: 8px 16px
|
||||
button-primary-pill-pressed:
|
||||
backgroundColor: "{colors.primary-press}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.button-md}"
|
||||
rounded: "{rounded.pill}"
|
||||
padding: 8px 16px
|
||||
button-secondary:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.primary}"
|
||||
typography: "{typography.button-md}"
|
||||
rounded: "{rounded.pill}"
|
||||
padding: 8px 16px
|
||||
button-on-dark:
|
||||
backgroundColor: "{colors.brand-dark-900}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.button-md}"
|
||||
rounded: "{rounded.pill}"
|
||||
padding: 8px 16px
|
||||
text-input:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.sm}"
|
||||
padding: 8px 12px
|
||||
text-input-focused:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.sm}"
|
||||
padding: 8px 12px
|
||||
card-feature-light:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.lg}"
|
||||
padding: 32px
|
||||
card-pricing:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.lg}"
|
||||
padding: 32px
|
||||
card-pricing-featured:
|
||||
backgroundColor: "{colors.brand-dark-900}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.lg}"
|
||||
padding: 32px
|
||||
card-cream-band:
|
||||
backgroundColor: "{colors.canvas-cream}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.lg}"
|
||||
padding: 32px
|
||||
card-dashboard-mockup:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-tabular}"
|
||||
rounded: "{rounded.lg}"
|
||||
padding: 24px
|
||||
pill-tag-soft:
|
||||
backgroundColor: "{colors.primary-bg-subdued-hover}"
|
||||
textColor: "{colors.primary-deep}"
|
||||
typography: "{typography.micro-cap}"
|
||||
rounded: "{rounded.pill}"
|
||||
padding: 4px 8px
|
||||
nav-bar-on-mesh:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 16px 24px
|
||||
link-on-light:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.primary}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 0px
|
||||
footer-light:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.ink-mute}"
|
||||
typography: "{typography.caption}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 64px 24px
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
Stripi's design language opens with the gradient mesh. A wide horizontal band of pastel cream, sherbet orange, lavender, electric indigo, and ruby pink occupies the upper third of nearly every marketing page — the brand's instantly-recognizable atmospheric backdrop. Type and product UI mockups float above it on `{colors.canvas}` (white), with the gradient acting as both decoration and visual anchor. The lower portion of the page returns to white, with feature explanations on `{colors.canvas-soft}` (a barely-tinted cool off-white) and dashboard product mockups composited as faux IDE/console panels in deep navy.
|
||||
|
||||
The color system has two primary roles. **Indigo** (`{colors.primary}` — `#533afd`) is the brand's signature CTA color, used sparingly: one filled pill per band. **Deep navy** (`{colors.ink}` — `#0d253d`) is the universal body text color and the fill of dashboard mockups, the featured pricing tier, and the dark-app surfaces on the dashboard track. Ruby (`{colors.ruby}`) and magenta (`{colors.magenta}`) appear inside the gradient mesh and as accent dots in product UI mockups; they are not used as button colors.
|
||||
|
||||
Typography is built around **Sohne** at weight 300 with negative letter-spacing — the brand's editorial-density display signature. Display sizes (32–56px) use -1.4px to -0.64px tracking; body sizes use 0; tabular caption sizes (where money and numerics matter) use the OpenType `tnum` feature plus a tightening -0.36 to -0.42px tracking. The `ss01` stylistic set is enabled across all roles.
|
||||
|
||||
**Key Characteristics:**
|
||||
- sohne-var with OpenType `"ss01"` on all text -- a custom stylistic set that defines the brand's letterforms
|
||||
- Weight 300 as the signature headline weight -- light, confident, anti-convention
|
||||
- Negative letter-spacing at display sizes (-1.4px at 56px, progressive relaxation downward)
|
||||
- Blue-tinted multi-layer shadows using `rgba(50,50,93,0.25)` -- elevation that feels brand-colored
|
||||
- Deep navy (`#061b31`) headings instead of black -- warm, premium, financial-grade
|
||||
- Conservative border-radius (4px-8px) -- nothing pill-shaped, nothing harsh
|
||||
- Ruby (`#ea2261`) and magenta (`#f96bee`) accents for gradient and decorative elements
|
||||
- `SourceCodePro` as the monospace companion for code and technical labels
|
||||
- Gradient-mesh backdrop on every marketing hero — cream/orange/lavender/indigo/ruby horizontally washed across the upper third of the page.
|
||||
- Single-indigo CTA hierarchy: filled `{colors.primary}` pill is the only filled button on marketing surfaces.
|
||||
- Sohne thin (weight 300) display tier with negative tracking from -1.4px to -0.2px depending on size.
|
||||
- Tabular-figure body type (`tnum`) for any cell containing money or numerics — the brand's quiet financial-data signal.
|
||||
- Dark-app dashboard track: deep navy product UI mockups sit composited above the white canvas, frequently with rendered code or dashboard tables inside.
|
||||
- Pill-shaped buttons (`{rounded.pill}` 9999px) with tight `8px 16px` padding — short, decisive, transactional.
|
||||
- Cream-band feature cards (`{colors.canvas-cream}`) introduce a warm interlude between blue/white sections without breaking the brand's chromatic logic.
|
||||
|
||||
## 2. Color Palette & Roles
|
||||
## Colors
|
||||
|
||||
### Primary
|
||||
- **Stripe Purple** (`#533afd`): Primary brand color, CTA backgrounds, link text, interactive highlights. A saturated blue-violet that anchors the entire system.
|
||||
- **Deep Navy** (`#061b31`): `--hds-color-heading-solid`. Primary heading color. Not black, not gray -- a very dark blue that adds warmth and depth to text.
|
||||
- **Pure White** (`#ffffff`): Page background, card surfaces, button text on dark backgrounds.
|
||||
> **Source pages:** home (`/`), `/payments`, `/pricing`, `dashboard.stripe.com/register/payments`.
|
||||
|
||||
### Brand & Dark
|
||||
- **Brand Dark** (`#1c1e54`): `--hds-color-util-brand-900`. Deep indigo for dark sections, footer backgrounds, and immersive brand moments.
|
||||
- **Dark Navy** (`#0d253d`): `--hds-color-core-neutral-975`. The darkest neutral -- almost-black with a blue undertone for maximum depth without harshness.
|
||||
### Brand & Accent
|
||||
- **Indigo** (`{colors.primary}` — `#533afd`): The brand's signature CTA color. Filled-pill button, link emphasis, gradient anchor.
|
||||
- **Indigo Deep** (`{colors.primary-deep}` — `#4434d4`): A deeper indigo used in gradient mid-stops and as the press-state warmer alternative.
|
||||
- **Indigo Press** (`{colors.primary-press}` — `#2e2b8c`): Pressed-state lift of the primary.
|
||||
- **Indigo Soft** (`{colors.primary-soft}` — `#665efd`): A lighter indigo used in product-UI accents and chart highlights.
|
||||
- **Indigo Subdued** (`{colors.primary-bg-subdued-hover}` — `#b9b9f9`): Pale indigo fill used as soft tag background.
|
||||
- **Brand Dark 900** (`{colors.brand-dark-900}` — `#1c1e54`): The deep navy used on the featured pricing tier and dashboard chrome.
|
||||
- **Ruby** (`{colors.ruby}` — `#ea2261`): Gradient accent and chart highlight; never a button.
|
||||
- **Magenta** (`{colors.magenta}` — `#f96bee`): Brighter pink stop in gradient meshes.
|
||||
- **Lemon** (`{colors.lemon}` — `#9b6829`): Warm sherbet stop in gradient backdrops.
|
||||
|
||||
### Accent Colors
|
||||
- **Ruby** (`#ea2261`): `--hds-color-accentColorMode-ruby-icon-solid`. Warm red-pink for icons, alerts, and accent elements.
|
||||
- **Magenta** (`#f96bee`): `--hds-color-accentColorMode-magenta-icon-gradientMiddle`. Vivid pink-purple for gradients and decorative highlights.
|
||||
- **Magenta Light** (`#ffd7ef`): `--hds-color-util-accent-magenta-100`. Tinted surface for magenta-themed cards and badges.
|
||||
### Surface
|
||||
- **Canvas** (`{colors.canvas}` — `#ffffff`): Default page background.
|
||||
- **Canvas Soft** (`{colors.canvas-soft}` — `#f6f9fc`): Cool-tinted off-white used on feature bands beneath the gradient hero.
|
||||
- **Canvas Cream** (`{colors.canvas-cream}` — `#f5e9d4`): Warm cream used as a feature-band fill — the brand's chromatic interlude.
|
||||
- **Hairline** (`{colors.hairline}` — `#e3e8ee`): 1px borders on cards and tables.
|
||||
- **Hairline Input** (`{colors.hairline-input}` — `#a8c3de`): Slightly cooler hairline used on form inputs.
|
||||
|
||||
### Interactive
|
||||
- **Primary Purple** (`#533afd`): Primary link color, active states, selected elements.
|
||||
- **Purple Hover** (`#4434d4`): Darker purple for hover states on primary elements.
|
||||
- **Purple Deep** (`#2e2b8c`): `--hds-color-button-ui-iconHover`. Dark purple for icon hover states.
|
||||
- **Purple Light** (`#b9b9f9`): `--hds-color-action-bg-subduedHover`. Soft lavender for subdued hover backgrounds.
|
||||
- **Purple Mid** (`#665efd`): `--hds-color-input-selector-text-range`. Range selector and input highlight color.
|
||||
### Text
|
||||
- **Ink** (`{colors.ink}` — `#0d253d`): Default body text color across the brand. Deep navy, never pure black.
|
||||
- **Ink Secondary** (`{colors.ink-secondary}` — `#273951`): Secondary text on white.
|
||||
- **Ink Mute** (`{colors.ink-mute}` — `#64748d`): Helper text, captions, table labels.
|
||||
- **Ink Mute 2** (`{colors.ink-mute-2}` — `#61718a`): Near-equivalent to ink-mute used in nav.
|
||||
- **On Primary** (`{colors.on-primary}` — `#ffffff`): Text on indigo / dark-navy surfaces.
|
||||
|
||||
### Neutral Scale
|
||||
- **Heading** (`#061b31`): Primary headings, nav text, strong labels.
|
||||
- **Label** (`#273951`): `--hds-color-input-text-label`. Form labels, secondary headings.
|
||||
- **Body** (`#64748d`): Secondary text, descriptions, captions.
|
||||
- **Success Green** (`#15be53`): Status badges, success indicators (with 0.2-0.4 alpha for backgrounds/borders).
|
||||
- **Success Text** (`#108c3d`): Success badge text color.
|
||||
- **Lemon** (`#9b6829`): `--hds-color-core-lemon-500`. Warning and highlight accent.
|
||||
### Semantic
|
||||
The brand does not use a separate semantic color palette in the marketing system — error / success states live in dashboard-product UI specifically.
|
||||
|
||||
### Surface & Borders
|
||||
- **Border Default** (`#e5edf5`): Standard border color for cards, dividers, and containers.
|
||||
- **Border Purple** (`#b9b9f9`): Active/selected state borders on buttons and inputs.
|
||||
- **Border Soft Purple** (`#d6d9fc`): Subtle purple-tinted borders for secondary elements.
|
||||
- **Border Magenta** (`#ffd7ef`): Pink-tinted borders for magenta-themed elements.
|
||||
- **Border Dashed** (`#362baa`): Dashed borders for drop zones and placeholder elements.
|
||||
|
||||
### Shadow Colors
|
||||
- **Shadow Blue** (`rgba(50,50,93,0.25)`): The signature -- blue-tinted primary shadow color.
|
||||
- **Shadow Dark Blue** (`rgba(3,3,39,0.25)`): Deeper blue shadow for elevated elements.
|
||||
- **Shadow Black** (`rgba(0,0,0,0.1)`): Secondary shadow layer for depth reinforcement.
|
||||
- **Shadow Ambient** (`rgba(23,23,23,0.08)`): Soft ambient shadow for subtle elevation.
|
||||
- **Shadow Soft** (`rgba(23,23,23,0.06)`): Minimal ambient shadow for light lift.
|
||||
|
||||
## 3. Typography Rules
|
||||
## Typography
|
||||
|
||||
### Font Family
|
||||
- **Primary**: `sohne-var`, with fallback: `SF Pro Display`
|
||||
- **Monospace**: `SourceCodePro`, with fallback: `SFMono-Regular`
|
||||
- **OpenType Features**: `"ss01"` enabled globally on all sohne-var text; `"tnum"` for tabular numbers on financial data and captions.
|
||||
|
||||
The display and UI tier is **Sohne** (proprietary, licensed from Klim Type Foundry) at weights 300 (thin) and 400 (regular). The variable font (`sohne-var`) is loaded with `font-feature-settings: "ss01"` enabled globally — the stylistic set substitutes a single-story `a` and other character variants that are part of the brand's typographic signature.
|
||||
|
||||
When Sohne is unavailable, fall back to **SF Pro Display** at thin weights, then system-ui. For maximum brand fidelity, **Inter** (open-source) at weight 300 with `font-feature-settings: "ss01"` and `letter-spacing: -1.4px` on display sizes approximates the rhythm closely.
|
||||
|
||||
### Hierarchy
|
||||
|
||||
| Role | Font | Size | Weight | Line Height | Letter Spacing | Features | Notes |
|
||||
|------|------|------|--------|-------------|----------------|----------|-------|
|
||||
| Display Hero | sohne-var | 56px (3.50rem) | 300 | 1.03 (tight) | -1.4px | ss01 | Maximum size, whisper-weight authority |
|
||||
| Display Large | sohne-var | 48px (3.00rem) | 300 | 1.15 (tight) | -0.96px | ss01 | Secondary hero headlines |
|
||||
| Section Heading | sohne-var | 32px (2.00rem) | 300 | 1.10 (tight) | -0.64px | ss01 | Feature section titles |
|
||||
| Sub-heading Large | sohne-var | 26px (1.63rem) | 300 | 1.12 (tight) | -0.26px | ss01 | Card headings, sub-sections |
|
||||
| Sub-heading | sohne-var | 22px (1.38rem) | 300 | 1.10 (tight) | -0.22px | ss01 | Smaller section heads |
|
||||
| Body Large | sohne-var | 18px (1.13rem) | 300 | 1.40 | normal | ss01 | Feature descriptions, intro text |
|
||||
| Body | sohne-var | 16px (1.00rem) | 300-400 | 1.40 | normal | ss01 | Standard reading text |
|
||||
| Button | sohne-var | 16px (1.00rem) | 400 | 1.00 (tight) | normal | ss01 | Primary button text |
|
||||
| Button Small | sohne-var | 14px (0.88rem) | 400 | 1.00 (tight) | normal | ss01 | Secondary/compact buttons |
|
||||
| Link | sohne-var | 14px (0.88rem) | 400 | 1.00 (tight) | normal | ss01 | Navigation links |
|
||||
| Caption | sohne-var | 13px (0.81rem) | 400 | normal | normal | ss01 | Small labels, metadata |
|
||||
| Caption Small | sohne-var | 12px (0.75rem) | 300-400 | 1.33-1.45 | normal | ss01 | Fine print, timestamps |
|
||||
| Caption Tabular | sohne-var | 12px (0.75rem) | 300-400 | 1.33 | -0.36px | tnum | Financial data, numbers |
|
||||
| Micro | sohne-var | 10px (0.63rem) | 300 | 1.15 (tight) | 0.1px | ss01 | Tiny labels, axis markers |
|
||||
| Micro Tabular | sohne-var | 10px (0.63rem) | 300 | 1.15 (tight) | -0.3px | tnum | Chart data, small numbers |
|
||||
| Nano | sohne-var | 8px (0.50rem) | 300 | 1.07 (tight) | normal | ss01 | Smallest labels |
|
||||
| Code Body | SourceCodePro | 12px (0.75rem) | 500 | 2.00 (relaxed) | normal | -- | Code blocks, syntax |
|
||||
| Code Bold | SourceCodePro | 12px (0.75rem) | 700 | 2.00 (relaxed) | normal | -- | Bold code, keywords |
|
||||
| Code Label | SourceCodePro | 12px (0.75rem) | 500 | 2.00 (relaxed) | normal | uppercase | Technical labels |
|
||||
| Code Micro | SourceCodePro | 9px (0.56rem) | 500 | 1.00 (tight) | normal | ss01 | Tiny code annotations |
|
||||
| Token | Size | Weight | Line Height | Letter Spacing | Use |
|
||||
|---|---|---|---|---|---|
|
||||
| `{typography.display-xxl}` | 56px | 300 | 1.03 | -1.4px | Hero headline |
|
||||
| `{typography.display-xl}` | 48px | 300 | 1.15 | -0.96px | Section opener |
|
||||
| `{typography.display-lg}` | 32px | 300 | 1.1 | -0.64px | Card title / sub-section |
|
||||
| `{typography.display-md}` | 26px | 300 | 1.12 | -0.26px | Compact card title |
|
||||
| `{typography.heading-lg}` | 22px | 300 | 1.1 | -0.22px | Pricing tier name |
|
||||
| `{typography.heading-md}` | 20px | 300 | 1.4 | -0.2px | Section sub-heading |
|
||||
| `{typography.heading-sm}` | 18px | 300 | 1.4 | 0 | Mini-section label |
|
||||
| `{typography.body-lg}` | 16px | 300 | 1.4 | 0 | Marketing body lead |
|
||||
| `{typography.body-md}` | 15px | 300 | 1.4 | 0 | Default UI body |
|
||||
| `{typography.body-tabular}` | 14px | 300 | 1.4 | -0.42px | Money / numeric tables (uses `tnum`) |
|
||||
| `{typography.button-md}` | 16px | 400 | 1.0 | 0 | Pill button label |
|
||||
| `{typography.button-sm}` | 14px | 400 | 1.0 | 0 | Compact pill label |
|
||||
| `{typography.caption}` | 13px | 400 | 1.4 | -0.39px | Helper, table labels |
|
||||
| `{typography.micro}` | 11px | 300 | 1.4 | 0 | Fine print |
|
||||
| `{typography.micro-cap}` | 10px | 400 | 1.15 | 0.1px | All-caps eyebrow |
|
||||
|
||||
### Principles
|
||||
- **Light weight as signature**: Weight 300 at display sizes is Stripe's most distinctive typographic choice. Where others use 600-700 to command attention, Stripe uses lightness as luxury -- the text is so confident it doesn't need weight to be authoritative.
|
||||
- **ss01 everywhere**: The `"ss01"` stylistic set is non-negotiable. It modifies specific glyphs (likely alternate `a`, `g`, `l` forms) to create a more geometric, contemporary feel across all sohne-var text.
|
||||
- **Two OpenType modes**: `"ss01"` for display/body text, `"tnum"` for tabular numerals in financial data. These never overlap -- a number in a paragraph uses ss01, a number in a data table uses tnum.
|
||||
- **Progressive tracking**: Letter-spacing tightens proportionally with size: -1.4px at 56px, -0.96px at 48px, -0.64px at 32px, -0.26px at 26px, normal at 16px and below.
|
||||
- **Two-weight simplicity**: Primarily 300 (body and headings) and 400 (UI/buttons). No bold (700) in the primary font -- SourceCodePro uses 500/700 for code contrast.
|
||||
- **Thin weight is the brand.** Display tiers always render at weight 300. Bumping to 400+ removes the brand's editorial air.
|
||||
- **Negative tracking on display.** -1.4px at 56px, scaling proportionally down to -0.2px at 20px. The negative tracking is the brand's typographic signature.
|
||||
- **Tabular figures for money.** Any cell rendering currency, transaction amounts, or numeric counts uses `font-feature-settings: "tnum"` plus a tightening tracking. The brand quietly signals its financial DNA through this micro-detail.
|
||||
- **`ss01` globally.** Apply `font-feature-settings: "ss01"` to the body element so the stylistic-set substitution is on for every text role.
|
||||
|
||||
## 4. Component Stylings
|
||||
### Note on Font Substitutes
|
||||
Sohne is proprietary. Use **Inter** (open-source via Google Fonts) at weight 300 with `letter-spacing: -1.4px` and `font-feature-settings: "ss01"` for display tiers — Inter is the closest open-source analogue. For body sizes, Inter at 300 weight with `font-feature-settings: "tnum"` (where applicable) is the canonical substitute. Avoid Helvetica or system-ui defaults — they're heavier than the brand needs.
|
||||
|
||||
## Layout
|
||||
|
||||
### Spacing System
|
||||
- **Base unit**: 8px (with 2 / 4 / 12 sub-tokens for fine work).
|
||||
- **Tokens**: `{spacing.xxs}` 2px · `{spacing.xs}` 4px · `{spacing.sm}` 8px · `{spacing.md}` 12px · `{spacing.lg}` 16px · `{spacing.xl}` 24px · `{spacing.xxl}` 32px · `{spacing.huge}` 64px.
|
||||
- **Section padding**: 64–96px on marketing surfaces; 32–48px on dashboard / product surfaces.
|
||||
- **Card internal padding**: 32px on feature cards; 24px on dashboard mockups.
|
||||
|
||||
### Grid & Container
|
||||
- Marketing pages center in a ~1200px container with the gradient mesh extending edge-to-edge above.
|
||||
- Pricing collapses 4-up → 2-up → 1-up at 1024 / 768 breakpoints.
|
||||
- Dashboard product mockups use their own internal grids (12-col tables, 3-col card grids) rendered as static composites.
|
||||
|
||||
### Whitespace Philosophy
|
||||
The gradient mesh occupies the upper third of the page; the white canvas below is generously padded. Section gaps tend toward 96px, with content tightening to 32px on dashboard / pricing pages where users compare and act.
|
||||
|
||||
## Elevation & Depth
|
||||
|
||||
| Level | Treatment | Use |
|
||||
|---|---|---|
|
||||
| 0 | Flat | Default surface |
|
||||
| 1 | `box-shadow: rgba(0,55,112,0.08) 0 1px 3px` | Card lift on white |
|
||||
| 2 | `box-shadow: rgba(0,55,112,0.08) 0 8px 24px, rgba(0,55,112,0.04) 0 2px 6px` | Floating panels, dashboard mockup chrome |
|
||||
| 3 | Gradient mesh backdrop | The brand's primary depth medium — atmospheric color rather than literal shadow |
|
||||
|
||||
### Decorative Depth
|
||||
The gradient mesh IS the depth system. Implemented as a layered SVG or large background image rather than CSS gradients (the actual mesh has organic blob shapes that aren't CSS-renderable). The mesh provides the brand's signature lift; literal shadows are reserved for product-UI mockups and stay subtle.
|
||||
|
||||
## Shapes
|
||||
|
||||
### Border Radius Scale
|
||||
|
||||
| Token | Value | Use |
|
||||
|---|---|---|
|
||||
| `{rounded.xs}` | 4px | Hairline tags, table chrome |
|
||||
| `{rounded.sm}` | 6px | Form inputs |
|
||||
| `{rounded.md}` | 8px | Compact cards, alerts |
|
||||
| `{rounded.lg}` | 12px | Pricing cards, feature cards |
|
||||
| `{rounded.xl}` | 16px | Dashboard product mockup chrome |
|
||||
| `{rounded.pill}` | 9999px | All buttons, tag pills |
|
||||
|
||||
### Photography Geometry
|
||||
The brand uses **product UI mockups** more than photography. Dashboard composites render as faux IDE/terminal/dashboard chrome inside `{rounded.lg}` 12px containers with a subtle `box-shadow`. Real photography appears in customer logo strips and the rare case-study card; treated as inset 4:3 with no shadow.
|
||||
|
||||
## Components
|
||||
|
||||
### Buttons
|
||||
|
||||
**Primary Purple**
|
||||
- Background: `#533afd`
|
||||
- Text: `#ffffff`
|
||||
- Padding: 8px 16px
|
||||
- Radius: 4px
|
||||
- Font: 16px sohne-var weight 400, `"ss01"`
|
||||
- Hover: `#4434d4` background
|
||||
- Use: Primary CTA ("Start now", "Contact sales")
|
||||
**`button-primary-pill`** — the dominant CTA system-wide.
|
||||
- Background `{colors.primary}`, text `{colors.on-primary}`, type `{typography.button-md}`, padding `{spacing.sm} {spacing.lg}` (8px 16px), rounded `{rounded.pill}` 9999px.
|
||||
- Pressed state `button-primary-pill-pressed` shifts background to `{colors.primary-press}`.
|
||||
|
||||
**Ghost / Outlined**
|
||||
- Background: transparent
|
||||
- Text: `#533afd`
|
||||
- Padding: 8px 16px
|
||||
- Radius: 4px
|
||||
- Border: `1px solid #b9b9f9`
|
||||
- Font: 16px sohne-var weight 400, `"ss01"`
|
||||
- Hover: background shifts to `rgba(83,58,253,0.05)`
|
||||
- Use: Secondary actions
|
||||
**`button-secondary`** — outline-style alternative.
|
||||
- Background `{colors.canvas}`, text `{colors.primary}`, 1px solid `{colors.primary}` border, same pill geometry.
|
||||
|
||||
**Transparent Info**
|
||||
- Background: transparent
|
||||
- Text: `#2874ad`
|
||||
- Padding: 8px 16px
|
||||
- Radius: 4px
|
||||
- Border: `1px solid rgba(43,145,223,0.2)`
|
||||
- Use: Tertiary/info-level actions
|
||||
|
||||
**Neutral Ghost**
|
||||
- Background: transparent (`rgba(255,255,255,0)`)
|
||||
- Text: `rgba(16,16,16,0.3)`
|
||||
- Padding: 8px 16px
|
||||
- Radius: 4px
|
||||
- Outline: `1px solid rgb(212,222,233)`
|
||||
- Use: Disabled or muted actions
|
||||
**`button-on-dark`** — used on dashboard / dark surfaces.
|
||||
- Background `{colors.brand-dark-900}`, text `{colors.on-primary}`, same pill geometry.
|
||||
|
||||
### Cards & Containers
|
||||
- Background: `#ffffff`
|
||||
- Border: `1px solid #e5edf5` (standard) or `1px solid #061b31` (dark accent)
|
||||
- Radius: 4px (tight), 5px (standard), 6px (comfortable), 8px (featured)
|
||||
- Shadow (standard): `rgba(50,50,93,0.25) 0px 30px 45px -30px, rgba(0,0,0,0.1) 0px 18px 36px -18px`
|
||||
- Shadow (ambient): `rgba(23,23,23,0.08) 0px 15px 35px 0px`
|
||||
- Hover: shadow intensifies, often adding the blue-tinted layer
|
||||
|
||||
### Badges / Tags / Pills
|
||||
**Neutral Pill**
|
||||
- Background: `#ffffff`
|
||||
- Text: `#000000`
|
||||
- Padding: 0px 6px
|
||||
- Radius: 4px
|
||||
- Border: `1px solid #f6f9fc`
|
||||
- Font: 11px weight 400
|
||||
**`card-feature-light`** — feature explanation card on white.
|
||||
- Background `{colors.canvas}`, padding `{spacing.xxl}`, rounded `{rounded.lg}` 12px, 1px `{colors.hairline}` border, optional Level 1 shadow.
|
||||
|
||||
**Success Badge**
|
||||
- Background: `rgba(21,190,83,0.2)`
|
||||
- Text: `#108c3d`
|
||||
- Padding: 1px 6px
|
||||
- Radius: 4px
|
||||
- Border: `1px solid rgba(21,190,83,0.4)`
|
||||
- Font: 10px weight 300
|
||||
**`card-pricing`** — standard pricing tier.
|
||||
- Background `{colors.canvas}`, padding `{spacing.xxl}`, rounded `{rounded.lg}`, 1px `{colors.hairline}` border. Title `{typography.heading-lg}`, price `{typography.display-md}`, body `{typography.body-md}`, CTA pinned bottom as `button-primary-pill`.
|
||||
|
||||
**`card-pricing-featured`** — the inverted dark featured tier.
|
||||
- Background `{colors.brand-dark-900}`, text `{colors.on-primary}`, otherwise identical structure to `card-pricing`. The deep-navy fill is the brand's distinctive featured-tier choice.
|
||||
|
||||
**`card-cream-band`** — warm interlude card.
|
||||
- Background `{colors.canvas-cream}`, text `{colors.ink}`, padding `{spacing.xxl}`, rounded `{rounded.lg}`. Used to break up the indigo / white rhythm with warmth.
|
||||
|
||||
**`card-dashboard-mockup`** — composited dashboard / product UI screenshot.
|
||||
- Background `{colors.canvas}`, type `{typography.body-tabular}` (with `tnum`), padding `{spacing.xl}` 24px, rounded `{rounded.lg}` 12px, Level 2 shadow. Often contains nested mini-mockups: code preview + dashboard table + chart card.
|
||||
|
||||
### Inputs & Forms
|
||||
- Border: `1px solid #e5edf5`
|
||||
- Radius: 4px
|
||||
- Focus: `1px solid #533afd` or purple ring
|
||||
- Label: `#273951`, 14px sohne-var
|
||||
- Text: `#061b31`
|
||||
- Placeholder: `#64748d`
|
||||
|
||||
**`text-input`** — standard form field.
|
||||
- Background `{colors.canvas}`, text `{colors.ink}`, type `{typography.body-md}`, padding `{spacing.sm} {spacing.md}` (8px 12px), rounded `{rounded.sm}` 6px, 1px `{colors.hairline-input}` border.
|
||||
- Focus state `text-input-focused`: border swaps to `{colors.primary}`.
|
||||
|
||||
### Navigation
|
||||
- Clean horizontal nav on white, sticky with blur backdrop
|
||||
- Brand logotype left-aligned
|
||||
- Links: sohne-var 14px weight 400, `#061b31` text with `"ss01"`
|
||||
- Radius: 6px on nav container
|
||||
- CTA: purple button right-aligned ("Sign in", "Start now")
|
||||
- Mobile: hamburger toggle with 6px radius
|
||||
|
||||
### Decorative Elements
|
||||
**Dashed Borders**
|
||||
- `1px dashed #362baa` (purple) for placeholder/drop zones
|
||||
- `1px dashed #ffd7ef` (magenta) for magenta-themed decorative borders
|
||||
**`nav-bar-on-mesh`** — top nav floating over the gradient hero.
|
||||
- Background `{colors.canvas}` (or transparent depending on scroll), text `{colors.ink}`, padding `{spacing.lg} {spacing.xl}`. Logo wordmark on the left, primary nav center, sign-in + filled `button-primary-pill` on the right.
|
||||
|
||||
**Gradient Accents**
|
||||
- Ruby-to-magenta gradients (`#ea2261` to `#f96bee`) for hero decorations
|
||||
- Brand dark sections use `#1c1e54` backgrounds with white text
|
||||
### Pills, Tags, and Chips
|
||||
|
||||
## 5. Layout Principles
|
||||
**`pill-tag-soft`** — subdued indigo tag.
|
||||
- Background `{colors.primary-bg-subdued-hover}`, text `{colors.primary-deep}`, type `{typography.micro-cap}`, padding `4px 8px`, rounded `{rounded.pill}`.
|
||||
|
||||
### Spacing System
|
||||
- Base unit: 8px
|
||||
- Scale: 1px, 2px, 4px, 6px, 8px, 10px, 11px, 12px, 14px, 16px, 18px, 20px
|
||||
- Notable: The scale is dense at the small end (every 2px from 4-12), reflecting Stripe's precision-oriented UI for financial data
|
||||
### Signature Components
|
||||
|
||||
### Grid & Container
|
||||
- Max content width: approximately 1080px
|
||||
- Hero: centered single-column with generous padding, lightweight headlines
|
||||
- Feature sections: 2-3 column grids for feature cards
|
||||
- Full-width dark sections with `#1c1e54` background for brand immersion
|
||||
- Code/dashboard previews as contained cards with blue-tinted shadows
|
||||
**Gradient Mesh Backdrop** — pastel cream → sherbet orange → lavender → indigo → ruby pink stops blurred horizontally across the upper third of the page. Implemented as SVG or a large background image — not a flat CSS gradient (the real mesh has organic blob shapes).
|
||||
|
||||
### Whitespace Philosophy
|
||||
- **Precision spacing**: Unlike the vast emptiness of minimalist systems, Stripe uses measured, purposeful whitespace. Every gap is a deliberate typographic choice.
|
||||
- **Dense data, generous chrome**: Financial data displays (tables, charts) are tightly packed, but the UI chrome around them is generously spaced. This creates a sense of controlled density -- like a well-organized spreadsheet in a beautiful frame.
|
||||
- **Section rhythm**: White sections alternate with dark brand sections (`#1c1e54`), creating a dramatic light/dark cadence that prevents monotony without introducing arbitrary color.
|
||||
**Composited Dashboard Mockup** — multi-layer faux-product-UI compositions: an IDE panel on the left, a dashboard table center, a chart card on the right, all rendered at small scale inside `{rounded.lg}` containers with subtle Level 2 shadows. The composite is the brand's most-photographed feature.
|
||||
|
||||
### Border Radius Scale
|
||||
- Micro (1px): Fine-grained elements, subtle rounding
|
||||
- Standard (4px): Buttons, inputs, badges, cards -- the workhorse
|
||||
- Comfortable (5px): Standard card containers
|
||||
- Relaxed (6px): Navigation, larger interactive elements
|
||||
- Large (8px): Featured cards, hero elements
|
||||
- Compound: `0px 0px 6px 6px` for bottom-rounded containers (tab panels, dropdown footers)
|
||||
**Tabular-Figure Money Type** — every number rendering money, count, or transaction value uses `font-feature-settings: "tnum"`. The brand's quiet signal that it's a financial-infrastructure platform.
|
||||
|
||||
## 6. Depth & Elevation
|
||||
**`link-on-light`** — inline links on light surfaces.
|
||||
- Text `{colors.primary}` rendered in `{typography.body-md}`, no underline by default.
|
||||
|
||||
| Level | Treatment | Use |
|
||||
|-------|-----------|-----|
|
||||
| Flat (Level 0) | No shadow | Page background, inline text |
|
||||
| Ambient (Level 1) | `rgba(23,23,23,0.06) 0px 3px 6px` | Subtle card lift, hover hints |
|
||||
| Standard (Level 2) | `rgba(23,23,23,0.08) 0px 15px 35px` | Standard cards, content panels |
|
||||
| Elevated (Level 3) | `rgba(50,50,93,0.25) 0px 30px 45px -30px, rgba(0,0,0,0.1) 0px 18px 36px -18px` | Featured cards, dropdowns, popovers |
|
||||
| Deep (Level 4) | `rgba(3,3,39,0.25) 0px 14px 21px -14px, rgba(0,0,0,0.1) 0px 8px 17px -8px` | Modals, floating panels |
|
||||
| Ring (Accessibility) | `2px solid #533afd` outline | Keyboard focus ring |
|
||||
**`footer-light`** — site-wide footer.
|
||||
- Background `{colors.canvas}`, text `{colors.ink-mute}`, type `{typography.caption}`, padding `{spacing.huge} {spacing.xl}` (64px 24px). Holds 4–6 columns of link groups, social icons, and a small legal row.
|
||||
|
||||
**Shadow Philosophy**: Stripe's shadow system is built on a principle of chromatic depth. Where most design systems use neutral gray or black shadows, Stripe's primary shadow color (`rgba(50,50,93,0.25)`) is a deep blue-gray that echoes the brand's navy palette. This creates shadows that don't just add depth -- they add brand atmosphere. The multi-layer approach pairs this blue-tinted shadow with a pure black secondary layer (`rgba(0,0,0,0.1)`) at a different offset, creating a parallax-like depth where the branded shadow sits farther from the element and the neutral shadow sits closer. The negative spread values (-30px, -18px) ensure shadows don't extend beyond the element's footprint horizontally, keeping elevation vertical and controlled.
|
||||
|
||||
### Decorative Depth
|
||||
- Dark brand sections (`#1c1e54`) create immersive depth through background color contrast
|
||||
- Gradient overlays with ruby-to-magenta transitions for hero decorations
|
||||
- Shadow color `rgba(0,55,112,0.08)` (`--hds-color-shadow-sm-top`) for top-edge shadows on sticky elements
|
||||
|
||||
## 7. Do's and Don'ts
|
||||
## Do's and Don'ts
|
||||
|
||||
### Do
|
||||
- Use sohne-var with `"ss01"` on every text element -- the stylistic set IS the brand
|
||||
- Use weight 300 for all headlines and body text -- lightness is the signature
|
||||
- Apply blue-tinted shadows (`rgba(50,50,93,0.25)`) for all elevated elements
|
||||
- Use `#061b31` (deep navy) for headings instead of `#000000` -- the warmth matters
|
||||
- Keep border-radius between 4px-8px -- conservative rounding is intentional
|
||||
- Use `"tnum"` for any tabular/financial number display
|
||||
- Layer shadows: blue-tinted far + neutral close for depth parallax
|
||||
- Use `#533afd` purple as the primary interactive/CTA color
|
||||
- Reserve `{colors.primary}` for filled CTAs and inline link emphasis — it should appear sparingly, one filled button per band.
|
||||
- Apply the gradient mesh to every marketing hero; bare-canvas heroes feel off-brand.
|
||||
- Render display tiers at weight 300 with negative letter-spacing — the thin tracking is the typographic signature.
|
||||
- Use `font-feature-settings: "tnum"` on every money / numeric cell.
|
||||
- Apply `font-feature-settings: "ss01"` globally on the body element.
|
||||
- Pair every feature explanation with a composited product UI mockup; the brand's argument is "look at the actual product."
|
||||
|
||||
### Don't
|
||||
- Don't use weight 600-700 for sohne-var headlines -- weight 300 is the brand voice
|
||||
- Don't use large border-radius (12px+, pill shapes) on cards or buttons -- Stripe is conservative
|
||||
- Don't use neutral gray shadows -- always tint with blue (`rgba(50,50,93,...)`)
|
||||
- Don't skip `"ss01"` on any sohne-var text -- the alternate glyphs define the personality
|
||||
- Don't use pure black (`#000000`) for headings -- always `#061b31` deep navy
|
||||
- Don't use warm accent colors (orange, yellow) for interactive elements -- purple is primary
|
||||
- Don't apply positive letter-spacing at display sizes -- Stripe tracks tight
|
||||
- Don't use the magenta/ruby accents for buttons or links -- they're decorative/gradient only
|
||||
- Don't bump display weight above 300 — at 400 the brand's editorial air collapses.
|
||||
- Don't add new accent colors outside the documented gradient stops (cream / orange / lavender / indigo / ruby / magenta).
|
||||
- Don't use the indigo `{colors.primary}` as a body-text color — it's a CTA and link color, not a type color at body size.
|
||||
- Don't shrink button padding below `8px 16px` — the tight pill is part of the brand's transactional feel.
|
||||
- Don't render money cells without `tnum` — it breaks the quiet financial-data signature.
|
||||
- Don't replace the pill shape with rounded-rectangles for buttons.
|
||||
|
||||
## 8. Responsive Behavior
|
||||
## Responsive Behavior
|
||||
|
||||
### Breakpoints
|
||||
|
||||
| Name | Width | Key Changes |
|
||||
|------|-------|-------------|
|
||||
| Mobile | <640px | Single column, reduced heading sizes, stacked cards |
|
||||
| Tablet | 640-1024px | 2-column grids, moderate padding |
|
||||
| Desktop | 1024-1280px | Full layout, 3-column feature grids |
|
||||
| Large Desktop | >1280px | Centered content with generous margins |
|
||||
|---|---|---|
|
||||
| Wide | ≥ 1440px | Full gradient mesh edge-to-edge; dashboard composite at full scale |
|
||||
| Desktop | 1024–1440px | Default content max-width; pricing 4-up |
|
||||
| Tablet | 768–1023px | Pricing 2-up; dashboard composite simplifies to 2 panels |
|
||||
| Mobile | < 768px | Pricing 1-up; hamburger nav; display drops 56 → 36px |
|
||||
|
||||
### Touch Targets
|
||||
- Buttons use comfortable padding (8px-16px vertical)
|
||||
- Navigation links at 14px with adequate spacing
|
||||
- Badges have 6px horizontal padding minimum for tap targets
|
||||
- Mobile nav toggle with 6px radius button
|
||||
- Pill buttons hit ≥ 40×40px on mobile via padding scaling. On smaller screens, buttons size up to 44×44px to maintain WCAG AAA.
|
||||
- Form fields stay at 40px minimum height.
|
||||
|
||||
### Collapsing Strategy
|
||||
- Hero: 56px display -> 32px on mobile, weight 300 maintained
|
||||
- Navigation: horizontal links + CTAs -> hamburger toggle
|
||||
- Feature cards: 3-column -> 2-column -> single column stacked
|
||||
- Dark brand sections: maintain full-width treatment, reduce internal padding
|
||||
- Financial data tables: horizontal scroll on mobile
|
||||
- Section spacing: 64px+ -> 40px on mobile
|
||||
- Typography scale compresses: 56px -> 48px -> 32px hero sizes across breakpoints
|
||||
- Display tiers stair-step 56 → 48 → 32 → 26 → 22px through the breakpoints.
|
||||
- Gradient mesh re-tiles on mobile to preserve the wash without disappearing.
|
||||
- Dashboard composites simplify to single-panel mockups on mobile; the multi-layer composition only renders at desktop+.
|
||||
- Pricing tiers stair-step 4-up → 2-up → 1-up.
|
||||
|
||||
### Image Behavior
|
||||
- Dashboard/product screenshots maintain blue-tinted shadow at all sizes
|
||||
- Hero gradient decorations simplify on mobile
|
||||
- Code blocks maintain `SourceCodePro` treatment, may horizontally scroll
|
||||
- Card images maintain consistent 4px-6px border-radius
|
||||
Product UI composites use `srcset` with art-direction crops at major breakpoints. Mobile crops focus on the most actionable inner panel; desktop crops show the full multi-layer composition.
|
||||
|
||||
## 9. Agent Prompt Guide
|
||||
## Iteration Guide
|
||||
|
||||
### Quick Color Reference
|
||||
- Primary CTA: Stripe Purple (`#533afd`)
|
||||
- CTA Hover: Purple Dark (`#4434d4`)
|
||||
- Background: Pure White (`#ffffff`)
|
||||
- Heading text: Deep Navy (`#061b31`)
|
||||
- Body text: Slate (`#64748d`)
|
||||
- Label text: Dark Slate (`#273951`)
|
||||
- Border: Soft Blue (`#e5edf5`)
|
||||
- Link: Stripe Purple (`#533afd`)
|
||||
- Dark section: Brand Dark (`#1c1e54`)
|
||||
- Success: Green (`#15be53`)
|
||||
- Accent decorative: Ruby (`#ea2261`), Magenta (`#f96bee`)
|
||||
|
||||
### Example Component Prompts
|
||||
- "Create a hero section on white background. Headline at 48px sohne-var weight 300, line-height 1.15, letter-spacing -0.96px, color #061b31, font-feature-settings 'ss01'. Subtitle at 18px weight 300, line-height 1.40, color #64748d. Purple CTA button (#533afd, 4px radius, 8px 16px padding, white text) and ghost button (transparent, 1px solid #b9b9f9, #533afd text, 4px radius)."
|
||||
- "Design a card: white background, 1px solid #e5edf5 border, 6px radius. Shadow: rgba(50,50,93,0.25) 0px 30px 45px -30px, rgba(0,0,0,0.1) 0px 18px 36px -18px. Title at 22px sohne-var weight 300, letter-spacing -0.22px, color #061b31, 'ss01'. Body at 16px weight 300, #64748d."
|
||||
- "Build a success badge: rgba(21,190,83,0.2) background, #108c3d text, 4px radius, 1px 6px padding, 10px sohne-var weight 300, border 1px solid rgba(21,190,83,0.4)."
|
||||
- "Create navigation: white sticky header with backdrop-filter blur(12px). sohne-var 14px weight 400 for links, #061b31 text, 'ss01'. Purple CTA 'Start now' right-aligned (#533afd bg, white text, 4px radius). Nav container 6px radius."
|
||||
- "Design a dark brand section: #1c1e54 background, white text. Headline 32px sohne-var weight 300, letter-spacing -0.64px, 'ss01'. Body 16px weight 300, rgba(255,255,255,0.7). Cards inside use rgba(255,255,255,0.1) border with 6px radius."
|
||||
|
||||
### Iteration Guide
|
||||
1. Always enable `font-feature-settings: "ss01"` on sohne-var text -- this is the brand's typographic DNA
|
||||
2. Weight 300 is the default; use 400 only for buttons/links/navigation
|
||||
3. Shadow formula: `rgba(50,50,93,0.25) 0px Y1 B1 -S1, rgba(0,0,0,0.1) 0px Y2 B2 -S2` where Y1/B1 are larger (far shadow) and Y2/B2 are smaller (near shadow)
|
||||
4. Heading color is `#061b31` (deep navy), body is `#64748d` (slate), labels are `#273951` (dark slate)
|
||||
5. Border-radius stays in the 4px-8px range -- never use pill shapes or large rounding
|
||||
6. Use `"tnum"` for any numbers in tables, charts, or financial displays
|
||||
7. Dark sections use `#1c1e54` -- not black, not gray, but a deep branded indigo
|
||||
8. SourceCodePro for code at 12px/500 with 2.00 line-height (very generous for readability)
|
||||
1. Focus on ONE component at a time.
|
||||
2. Reference component names and tokens directly (`{colors.primary}`, `{button-primary-pill}-pressed`, `{rounded.pill}`).
|
||||
3. Run `npx @google/design.md lint DESIGN.md` after edits.
|
||||
4. Add new variants as separate entries.
|
||||
5. Default body to `{typography.body-md}` (15px); use `{typography.body-tabular}` for any money / numeric cell.
|
||||
6. Apply `ss01` globally on the body; apply `tnum` per-element on numeric content.
|
||||
7. The gradient mesh is non-negotiable on marketing heroes — bare-canvas heroes break the brand.
|
||||
|
||||
@ -1,255 +1,462 @@
|
||||
# Design System Inspired by Supabase
|
||||
---
|
||||
version: alpha
|
||||
name: Supabaze Inspired
|
||||
description: An inspired interpretation of Supabaze's design language — an open-source database platform built on a clean white-and-near-black system with a single signature emerald-green CTA, a custom humanist sans display tier, and dense product UI mockups composited above the hero. The brand reads as quietly technical: minimal chrome, a near-monochrome palette, and the green primary acting as the only chromatic event on the page.
|
||||
|
||||
## 1. Visual Theme & Atmosphere
|
||||
colors:
|
||||
primary: "#3ecf8e"
|
||||
primary-deep: "#24b47e"
|
||||
primary-soft: "#4ade80"
|
||||
ink: "#171717"
|
||||
ink-secondary: "#212121"
|
||||
ink-mute: "#707070"
|
||||
ink-mute-2: "#9a9a9a"
|
||||
ink-faint: "#b2b2b2"
|
||||
on-primary: "#171717"
|
||||
on-dark: "#ffffff"
|
||||
canvas: "#ffffff"
|
||||
canvas-soft: "#fafafa"
|
||||
canvas-night: "#1c1c1c"
|
||||
canvas-night-soft: "#202020"
|
||||
hairline: "#dfdfdf"
|
||||
hairline-strong: "#c7c7c7"
|
||||
hairline-cool: "#ededed"
|
||||
hairline-cool-2: "#efefef"
|
||||
hairline-cool-3: "#d4d4d4"
|
||||
accent-purple: "#6b01c2"
|
||||
accent-violet: "#644fc1"
|
||||
accent-purple-soft: "#eddbf9"
|
||||
accent-yellow: "#ffdb13"
|
||||
accent-tomato: "#ff2201"
|
||||
accent-pink: "#c7007e"
|
||||
accent-indigo: "#054cff"
|
||||
accent-crimson: "#e2005a"
|
||||
|
||||
Supabase's website is a dark-mode-native developer platform that channels the aesthetic of a premium code editor — deep black backgrounds (`#0f0f0f`, `#171717`) with emerald green accents (`#3ecf8e`, `#00c573`) that reference the brand's open-source, PostgreSQL-green identity. The design system feels like it was born in a terminal window and evolved into a sophisticated marketing surface without losing its developer soul.
|
||||
typography:
|
||||
display-xxl:
|
||||
fontFamily: "Circular, 'Helvetica Neue', Helvetica, Arial, sans-serif"
|
||||
fontSize: 64px
|
||||
fontWeight: 500
|
||||
lineHeight: 1.1
|
||||
letterSpacing: -1.92px
|
||||
display-xl:
|
||||
fontFamily: "Circular, 'Helvetica Neue', Helvetica, Arial, sans-serif"
|
||||
fontSize: 48px
|
||||
fontWeight: 500
|
||||
lineHeight: 1.1
|
||||
letterSpacing: -1.44px
|
||||
display-lg:
|
||||
fontFamily: "Circular, 'Helvetica Neue', Helvetica, Arial, sans-serif"
|
||||
fontSize: 36px
|
||||
fontWeight: 500
|
||||
lineHeight: 1.15
|
||||
letterSpacing: -0.72px
|
||||
display-md:
|
||||
fontFamily: "Circular, 'Helvetica Neue', Helvetica, Arial, sans-serif"
|
||||
fontSize: 28px
|
||||
fontWeight: 500
|
||||
lineHeight: 1.2
|
||||
letterSpacing: -0.42px
|
||||
heading-lg:
|
||||
fontFamily: "Circular, 'Helvetica Neue', Helvetica, Arial, sans-serif"
|
||||
fontSize: 22px
|
||||
fontWeight: 500
|
||||
lineHeight: 1.2
|
||||
letterSpacing: 0
|
||||
heading-md:
|
||||
fontFamily: "Circular, 'Helvetica Neue', Helvetica, Arial, sans-serif"
|
||||
fontSize: 18px
|
||||
fontWeight: 500
|
||||
lineHeight: 1.4
|
||||
letterSpacing: 0
|
||||
body-lg:
|
||||
fontFamily: "Circular, 'Helvetica Neue', Helvetica, Arial, sans-serif"
|
||||
fontSize: 18px
|
||||
fontWeight: 400
|
||||
lineHeight: 1.55
|
||||
letterSpacing: 0
|
||||
body-md:
|
||||
fontFamily: "Circular, 'Helvetica Neue', Helvetica, Arial, sans-serif"
|
||||
fontSize: 16px
|
||||
fontWeight: 400
|
||||
lineHeight: 1.5
|
||||
letterSpacing: 0
|
||||
button-md:
|
||||
fontFamily: "Circular, 'Helvetica Neue', Helvetica, Arial, sans-serif"
|
||||
fontSize: 14px
|
||||
fontWeight: 500
|
||||
lineHeight: 1.0
|
||||
letterSpacing: 0
|
||||
caption:
|
||||
fontFamily: "Circular, 'Helvetica Neue', Helvetica, Arial, sans-serif"
|
||||
fontSize: 13px
|
||||
fontWeight: 400
|
||||
lineHeight: 1.45
|
||||
letterSpacing: 0
|
||||
micro:
|
||||
fontFamily: "Circular, 'Helvetica Neue', Helvetica, Arial, sans-serif"
|
||||
fontSize: 12px
|
||||
fontWeight: 400
|
||||
lineHeight: 1.45
|
||||
letterSpacing: 0
|
||||
code:
|
||||
fontFamily: "ui-monospace, Menlo, Monaco, Consolas, 'Liberation Mono', monospace"
|
||||
fontSize: 14px
|
||||
fontWeight: 400
|
||||
lineHeight: 1.5
|
||||
letterSpacing: 0
|
||||
|
||||
The typography is built on "Circular" — a geometric sans-serif with rounded terminals that softens the technical edge. At 72px with a 1.00 line-height, the hero text is compressed to its absolute minimum vertical space, creating dense, impactful statements that waste nothing. The monospace companion (Source Code Pro) appears sparingly for uppercase technical labels with 1.2px letter-spacing, creating the "developer console" markers that connect the marketing site to the product experience.
|
||||
rounded:
|
||||
xs: 4px
|
||||
sm: 6px
|
||||
md: 8px
|
||||
lg: 12px
|
||||
xl: 16px
|
||||
full: 9999px
|
||||
|
||||
What makes Supabase distinctive is its sophisticated HSL-based color token system. Rather than flat hex values, Supabase uses HSL with alpha channels for nearly every color (`--colors-crimson4`, `--colors-purple5`, `--colors-slateA12`), enabling a nuanced layering system where colors interact through transparency. This creates depth through translucency — borders at `rgba(46, 46, 46)`, surfaces at `rgba(41, 41, 41, 0.84)`, and accents at partial opacity all blend with the dark background to create a rich, dimensional palette from minimal color ingredients.
|
||||
spacing:
|
||||
xxs: 2px
|
||||
xs: 4px
|
||||
sm: 8px
|
||||
md: 12px
|
||||
lg: 16px
|
||||
xl: 24px
|
||||
xxl: 32px
|
||||
huge: 64px
|
||||
|
||||
The green accent (`#3ecf8e`) appears selectively — in the Supabase logo, in link colors (`#00c573`), and in border highlights (`rgba(62, 207, 142, 0.3)`) — always as a signal of "this is Supabase" rather than as a decorative element. Pill-shaped buttons (9999px radius) for primary CTAs contrast with standard 6px radius for secondary elements, creating a clear visual hierarchy of importance.
|
||||
components:
|
||||
button-primary-green:
|
||||
backgroundColor: "{colors.primary}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.button-md}"
|
||||
rounded: "{rounded.sm}"
|
||||
padding: 8px 16px
|
||||
button-primary-green-pressed:
|
||||
backgroundColor: "{colors.primary-deep}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.button-md}"
|
||||
rounded: "{rounded.sm}"
|
||||
padding: 8px 16px
|
||||
button-secondary-outline:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.button-md}"
|
||||
rounded: "{rounded.sm}"
|
||||
padding: 8px 16px
|
||||
button-on-dark:
|
||||
backgroundColor: "{colors.canvas-night}"
|
||||
textColor: "{colors.on-dark}"
|
||||
typography: "{typography.button-md}"
|
||||
rounded: "{rounded.sm}"
|
||||
padding: 8px 16px
|
||||
button-link:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.button-md}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 0px
|
||||
text-input:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.sm}"
|
||||
padding: 8px 12px
|
||||
card-feature-light:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.lg}"
|
||||
padding: 32px
|
||||
card-pricing:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.lg}"
|
||||
padding: 32px
|
||||
card-pricing-featured:
|
||||
backgroundColor: "{colors.canvas-night}"
|
||||
textColor: "{colors.on-dark}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.lg}"
|
||||
padding: 32px
|
||||
card-feature-dark:
|
||||
backgroundColor: "{colors.canvas-night}"
|
||||
textColor: "{colors.on-dark}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.lg}"
|
||||
padding: 32px
|
||||
code-block:
|
||||
backgroundColor: "{colors.canvas-night}"
|
||||
textColor: "{colors.on-dark}"
|
||||
typography: "{typography.code}"
|
||||
rounded: "{rounded.sm}"
|
||||
padding: 16px
|
||||
pill-tag-green:
|
||||
backgroundColor: "{colors.primary}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.micro}"
|
||||
rounded: "{rounded.full}"
|
||||
padding: 2px 8px
|
||||
pill-tag-soft:
|
||||
backgroundColor: "{colors.canvas-soft}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.micro}"
|
||||
rounded: "{rounded.full}"
|
||||
padding: 2px 8px
|
||||
nav-bar-light:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 16px 24px
|
||||
link-on-light:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 0px
|
||||
footer-light:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.ink-mute}"
|
||||
typography: "{typography.caption}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 64px 24px
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
Supabaze's design language is engineered for clarity above all else. The marketing surfaces sit on `{colors.canvas}` (pure white), with text rendered in `{colors.ink}` (`#171717` — near-black, never pure black). Across the entire system the only consistent chromatic event is the **emerald green primary** (`{colors.primary}` — `#3ecf8e`) — used as the filled CTA, occasional accent dot, and the signature highlight color in the wordmark. Everything else is a calibrated grey ladder from `#ededed` hairline-cool to `#171717` ink, with thin black-on-white typography doing most of the visual work.
|
||||
|
||||
Typography runs **Circular** at weight 500 for display and 400 for body. The display tier uses tight negative letter-spacing (-1.92px at 64px) to pull the rounded humanist letterforms into editorial density. There's no atmospheric gradient, no full-bleed photography, no dark-canvas marketing track — the brand commits to white.
|
||||
|
||||
The product itself appears as composited UI screenshots on every page: dashboard tables, SQL editors, query builders, log streams. These screenshots are the brand's argument. They sit inside `{rounded.lg}` 12px containers with subtle 1px hairlines, often arranged 2-up or in a floating "stacked panes" composition above the hero band.
|
||||
|
||||
**Key Characteristics:**
|
||||
- Dark-mode-native: near-black backgrounds (`#0f0f0f`, `#171717`) — never pure black
|
||||
- Emerald green brand accent (`#3ecf8e`, `#00c573`) used sparingly as identity marker
|
||||
- Circular font — geometric sans-serif with rounded terminals
|
||||
- Source Code Pro for uppercase technical labels (1.2px letter-spacing)
|
||||
- HSL-based color token system with alpha channels for translucent layering
|
||||
- Pill buttons (9999px) for primary CTAs, 6px radius for secondary
|
||||
- Neutral gray scale from `#171717` through `#898989` to `#fafafa`
|
||||
- Border system using dark grays (`#2e2e2e`, `#363636`, `#393939`)
|
||||
- Minimal shadows — depth through border contrast and transparency
|
||||
- Radix color primitives (crimson, purple, violet, indigo, yellow, tomato, orange, slate)
|
||||
- Single emerald primary (`{colors.primary}` `#3ecf8e`) as the only chromatic event; everything else is monochrome.
|
||||
- White canvas marketing track with greyscale hierarchy from `{colors.hairline-cool}` to `{colors.ink}`.
|
||||
- Custom humanist sans display tier at weight 500 with negative letter-spacing of -1.92px to -0.42px.
|
||||
- Composited product UI screenshots (dashboard, SQL editor, log stream) are the dominant decorative element — never photography, never illustrations.
|
||||
- Tight 6px / 8px button radii — square-ish, technical, never pill-shaped.
|
||||
- Code blocks rendered in deep `{colors.canvas-night}` (`#1c1c1c`) with monospace inline code; the brand's developer DNA is visible in every snippet.
|
||||
- Pricing tiers use a dark inverted `{colors.canvas-night}` featured tier, not a green one — the green is reserved for buttons and dot accents.
|
||||
|
||||
## 2. Color Palette & Roles
|
||||
## Colors
|
||||
|
||||
### Brand
|
||||
- **Supabase Green** (`#3ecf8e`): Primary brand color, logo, accent borders
|
||||
- **Green Link** (`#00c573`): Interactive green for links and actions
|
||||
- **Green Border** (`rgba(62, 207, 142, 0.3)`): Subtle green border accent
|
||||
> **Source pages:** home (`/`), `/database`, `/partners/integrations`, `/partners/integrations/powersync`, `/solutions/ai-builders`, `/pricing`.
|
||||
|
||||
### Neutral Scale (Dark Mode)
|
||||
- **Near Black** (`#0f0f0f`): Primary button background, deepest surface
|
||||
- **Dark** (`#171717`): Page background, primary canvas
|
||||
- **Dark Border** (`#242424`): Horizontal rule, section dividers
|
||||
- **Border Dark** (`#2e2e2e`): Card borders, tab borders
|
||||
- **Mid Border** (`#363636`): Button borders, dividers
|
||||
- **Border Light** (`#393939`): Secondary borders
|
||||
- **Charcoal** (`#434343`): Tertiary borders, dark accents
|
||||
- **Dark Gray** (`#4d4d4d`): Heavy secondary text
|
||||
- **Mid Gray** (`#898989`): Muted text, link color
|
||||
- **Light Gray** (`#b4b4b4`): Secondary link text
|
||||
- **Near White** (`#efefef`): Light border, subtle surface
|
||||
- **Off White** (`#fafafa`): Primary text, button text
|
||||
### Brand & Accent
|
||||
- **Emerald** (`{colors.primary}` — `#3ecf8e`): The signature CTA color. Filled-button background, brand wordmark accent, dot indicator.
|
||||
- **Emerald Deep** (`{colors.primary-deep}` — `#24b47e`): Pressed-state lift of the primary.
|
||||
- **Emerald Soft** (`{colors.primary-soft}` — `#4ade80`): Lighter emerald used in chart accents and product UI.
|
||||
- **Accent Purple** (`{colors.accent-purple}` — `#6b01c2`): Rare accent used in integration logos and chart points; never a button.
|
||||
- **Accent Violet** (`{colors.accent-violet}` — `#644fc1`): Secondary accent in the same role as accent purple.
|
||||
- **Accent Yellow** (`{colors.accent-yellow}` — `#ffdb13`): Chart accent / status indicator only.
|
||||
- **Accent Pink / Crimson / Indigo / Tomato**: Reserved for integration logos and rare chart highlights, never as system colors.
|
||||
|
||||
### Radix Color Tokens (HSL-based)
|
||||
- **Slate Scale**: `--colors-slate5` through `--colors-slateA12` — neutral progression
|
||||
- **Purple**: `--colors-purple4`, `--colors-purple5`, `--colors-purpleA7` — accent spectrum
|
||||
- **Violet**: `--colors-violet10` (`hsl(251, 63.2%, 63.2%)`) — vibrant accent
|
||||
- **Crimson**: `--colors-crimson4`, `--colors-crimsonA9` — warm accent / alert
|
||||
- **Indigo**: `--colors-indigoA2` — subtle blue wash
|
||||
- **Yellow**: `--colors-yellowA7` — attention/warning
|
||||
- **Tomato**: `--colors-tomatoA4` — error accent
|
||||
- **Orange**: `--colors-orange6` — warm accent
|
||||
### Surface
|
||||
- **Canvas** (`{colors.canvas}` — `#ffffff`): Default page background.
|
||||
- **Canvas Soft** (`{colors.canvas-soft}` — `#fafafa`): Barely-tinted off-white for alternating section bands.
|
||||
- **Canvas Night** (`{colors.canvas-night}` — `#1c1c1c`): Deep near-black used in code blocks, dashboard mockups, featured pricing tier.
|
||||
- **Canvas Night Soft** (`{colors.canvas-night-soft}` — `#202020`): Slightly lifted dark for nested chrome.
|
||||
- **Hairline** (`{colors.hairline}` — `#dfdfdf`): 1px borders on cards and tables.
|
||||
- **Hairline Strong** (`{colors.hairline-strong}` — `#c7c7c7`): Slightly darker border for emphasis.
|
||||
- **Hairline Cool** (`{colors.hairline-cool}` — `#ededed`) / **Hairline Cool 2** (`#efefef`) / **Hairline Cool 3** (`#d4d4d4`): The brand's grey ladder for fine chrome work.
|
||||
|
||||
### Surface & Overlay
|
||||
- **Glass Dark** (`rgba(41, 41, 41, 0.84)`): Translucent dark overlay
|
||||
- **Slate Alpha** (`hsla(210, 87.8%, 16.1%, 0.031)`): Ultra-subtle blue wash
|
||||
- **Fixed Scale Alpha** (`hsla(200, 90.3%, 93.4%, 0.109)`): Light frost overlay
|
||||
### Text
|
||||
- **Ink** (`{colors.ink}` — `#171717`): Default body text. Near-black, never pure.
|
||||
- **Ink Secondary** (`{colors.ink-secondary}` — `#212121`): Slightly cooler near-black for body emphasis.
|
||||
- **Ink Mute** (`{colors.ink-mute}` — `#707070`): Secondary text and helper copy.
|
||||
- **Ink Mute 2** (`{colors.ink-mute-2}` — `#9a9a9a`): Tertiary text.
|
||||
- **Ink Faint** (`{colors.ink-faint}` — `#b2b2b2`): Disabled / placeholder text.
|
||||
- **On Primary** (`{colors.on-primary}` — `#171717`): Text on the emerald primary fill — near-black, not white. The button reads as a "lit" surface with dark type, not a colored chip.
|
||||
- **On Dark** (`{colors.on-dark}` — `#ffffff`): Text on canvas-night surfaces.
|
||||
|
||||
### Shadows
|
||||
- Supabase uses **almost no shadows** in its dark theme. Depth is created through border contrast and surface color differences rather than box-shadows. Focus states use `rgba(0, 0, 0, 0.1) 0px 4px 12px` — minimal, functional.
|
||||
## Typography
|
||||
|
||||
## 3. Typography Rules
|
||||
### Font Family
|
||||
|
||||
### Font Families
|
||||
- **Primary**: `Circular`, with fallbacks: `custom-font, Helvetica Neue, Helvetica, Arial`
|
||||
- **Monospace**: `Source Code Pro`, with fallbacks: `Office Code Pro, Menlo`
|
||||
The display and UI tier is **Circular** — a proprietary geometric humanist sans by Lineto. Fallback chain: `'Helvetica Neue', Helvetica, Arial`.
|
||||
|
||||
For maximum brand fidelity when Circular isn't licensed, use **Inter** (open-source via Google Fonts) at weight 500 for display with `letter-spacing: -1.92px` at 64px. Inter is the closest open-source analogue to Circular's geometric humanist character.
|
||||
|
||||
Code blocks use **system mono** (`ui-monospace`, with Menlo / Monaco / Consolas fallbacks).
|
||||
|
||||
### Hierarchy
|
||||
|
||||
| Role | Font | Size | Weight | Line Height | Letter Spacing | Notes |
|
||||
|------|------|------|--------|-------------|----------------|-------|
|
||||
| Display Hero | Circular | 72px (4.50rem) | 400 | 1.00 (tight) | normal | Maximum density, zero waste |
|
||||
| Section Heading | Circular | 36px (2.25rem) | 400 | 1.25 (tight) | normal | Feature section titles |
|
||||
| Card Title | Circular | 24px (1.50rem) | 400 | 1.33 | -0.16px | Slight negative tracking |
|
||||
| Sub-heading | Circular | 18px (1.13rem) | 400 | 1.56 | normal | Secondary headings |
|
||||
| Body | Circular | 16px (1.00rem) | 400 | 1.50 | normal | Standard body text |
|
||||
| Nav Link | Circular | 14px (0.88rem) | 500 | 1.00–1.43 | normal | Navigation items |
|
||||
| Button | Circular | 14px (0.88rem) | 500 | 1.14 (tight) | normal | Button labels |
|
||||
| Caption | Circular | 14px (0.88rem) | 400–500 | 1.43 | normal | Metadata, tags |
|
||||
| Small | Circular | 12px (0.75rem) | 400 | 1.33 | normal | Fine print, footer links |
|
||||
| Code Label | Source Code Pro | 12px (0.75rem) | 400 | 1.33 | 1.2px | `text-transform: uppercase` |
|
||||
| Token | Size | Weight | Line Height | Letter Spacing | Use |
|
||||
|---|---|---|---|---|---|
|
||||
| `{typography.display-xxl}` | 64px | 500 | 1.1 | -1.92px | Hero headline |
|
||||
| `{typography.display-xl}` | 48px | 500 | 1.1 | -1.44px | Section opener |
|
||||
| `{typography.display-lg}` | 36px | 500 | 1.15 | -0.72px | Sub-section / pricing tier |
|
||||
| `{typography.display-md}` | 28px | 500 | 1.2 | -0.42px | Card title |
|
||||
| `{typography.heading-lg}` | 22px | 500 | 1.2 | 0 | Compact heading |
|
||||
| `{typography.heading-md}` | 18px | 500 | 1.4 | 0 | Section sub-heading |
|
||||
| `{typography.body-lg}` | 18px | 400 | 1.55 | 0 | Marketing body lead |
|
||||
| `{typography.body-md}` | 16px | 400 | 1.5 | 0 | Default UI body |
|
||||
| `{typography.button-md}` | 14px | 500 | 1.0 | 0 | Button label |
|
||||
| `{typography.caption}` | 13px | 400 | 1.45 | 0 | Helper, footnote |
|
||||
| `{typography.micro}` | 12px | 400 | 1.45 | 0 | Pill label, fine print |
|
||||
| `{typography.code}` | 14px | 400 | 1.5 | 0 | Code block content |
|
||||
|
||||
### Principles
|
||||
- **Weight restraint**: Nearly all text uses weight 400 (regular/book). Weight 500 appears only for navigation links and button labels. There is no bold (700) in the detected system — hierarchy is created through size, not weight.
|
||||
- **1.00 hero line-height**: The hero text is compressed to absolute zero leading. This is the defining typographic gesture — text that feels like a terminal command: dense, efficient, no wasted vertical space.
|
||||
- **Negative tracking on cards**: Card titles use -0.16px letter-spacing, a subtle tightening that differentiates them from body text without being obvious.
|
||||
- **Monospace as ritual**: Source Code Pro in uppercase with 1.2px letter-spacing is the "developer console" voice — used sparingly for technical labels that connect to the product experience.
|
||||
- **Geometric personality**: Circular's rounded terminals create warmth in what could otherwise be a cold, technical interface. The font is the humanizing element.
|
||||
- **Weight 500 across display.** Mid-weight reads as engineered, not decorative.
|
||||
- **Negative tracking on display.** -1.92px at 64px scaling proportionally down — tightens the rounded humanist letterforms into editorial density.
|
||||
- **Mono for code.** System mono families (Menlo / Monaco) — no proprietary mono webfont.
|
||||
|
||||
## 4. Component Stylings
|
||||
### Note on Font Substitutes
|
||||
Circular is proprietary. Use **Inter** at weight 500 with `letter-spacing: -1.92px` for display tiers. **Geist Sans** (open-source from Vercel) is another close alternative for both display and body. Avoid Helvetica defaults — they're heavier and lack the geometric warmth.
|
||||
|
||||
## Layout
|
||||
|
||||
### Spacing System
|
||||
- **Base unit**: 8px (with 2 / 4 / 12 sub-tokens for fine work).
|
||||
- **Tokens**: `{spacing.xxs}` 2px · `{spacing.xs}` 4px · `{spacing.sm}` 8px · `{spacing.md}` 12px · `{spacing.lg}` 16px · `{spacing.xl}` 24px · `{spacing.xxl}` 32px · `{spacing.huge}` 64px.
|
||||
- **Section padding**: 64–96px on marketing surfaces.
|
||||
- **Card internal padding**: 32px on feature/pricing cards.
|
||||
|
||||
### Grid & Container
|
||||
- Marketing pages center in a ~1280px container with no edge-bleed; the brand keeps content inside the box.
|
||||
- Pricing collapses 4-up → 2-up → 1-up at 1024 / 768 breakpoints.
|
||||
- Product UI mockups stack 2-up or render as overlapping panes inside the same container.
|
||||
|
||||
### Whitespace Philosophy
|
||||
The brand uses generous 64–96px section padding without atmospheric gradients filling the space — the white canvas is the design. The composited product UI mockups break up sections without requiring decoration.
|
||||
|
||||
## Elevation & Depth
|
||||
|
||||
| Level | Treatment | Use |
|
||||
|---|---|---|
|
||||
| 0 | Flat, 1px hairline | Default cards |
|
||||
| 1 | `box-shadow: 0 1px 3px rgba(0,0,0,0.06)` | Subtle card lift |
|
||||
| 2 | `box-shadow: 0 8px 24px rgba(0,0,0,0.08)` | Floating composited UI mockups |
|
||||
| 3 | `box-shadow: 0 16px 48px rgba(0,0,0,0.12)` | Modal overlays, deep elevation |
|
||||
|
||||
### Decorative Depth
|
||||
The brand's depth is **product UI mockups** rather than gradients. Stacked dashboard / SQL editor / log panes composite together with subtle Level 2 shadows to suggest spatial hierarchy.
|
||||
|
||||
## Shapes
|
||||
|
||||
### Border Radius Scale
|
||||
|
||||
| Token | Value | Use |
|
||||
|---|---|---|
|
||||
| `{rounded.xs}` | 4px | Form inputs, hairline tags |
|
||||
| `{rounded.sm}` | 6px | Buttons (the brand's signature button radius), code blocks |
|
||||
| `{rounded.md}` | 8px | Compact cards, alerts |
|
||||
| `{rounded.lg}` | 12px | Pricing cards, feature cards, product mockups |
|
||||
| `{rounded.xl}` | 16px | Modal dialogs, large container chrome |
|
||||
| `{rounded.full}` | 9999px | Pill tags, avatars |
|
||||
|
||||
### Photography Geometry
|
||||
The brand uses minimal photography. Customer logo strips display wordmarks at uniform height (~24–32px) in greyscale; case-study cards (rare) use 4:3 photos inset in `{rounded.lg}` containers.
|
||||
|
||||
## Components
|
||||
|
||||
### Buttons
|
||||
|
||||
**Primary Pill (Dark)**
|
||||
- Background: `#0f0f0f`
|
||||
- Text: `#fafafa`
|
||||
- Padding: 8px 32px
|
||||
- Radius: 9999px (full pill)
|
||||
- Border: `1px solid #fafafa` (white border on dark)
|
||||
- Focus shadow: `rgba(0, 0, 0, 0.1) 0px 4px 12px`
|
||||
- Use: Primary CTA ("Start your project")
|
||||
**`button-primary-green`** — the signature CTA.
|
||||
- Background `{colors.primary}`, text `{colors.on-primary}` (near-black, NOT white), type `{typography.button-md}`, padding `{spacing.sm} {spacing.lg}` (8px 16px), rounded `{rounded.sm}` 6px.
|
||||
- Pressed state `button-primary-green-pressed` shifts to `{colors.primary-deep}`.
|
||||
|
||||
**Secondary Pill (Dark, Muted)**
|
||||
- Background: `#0f0f0f`
|
||||
- Text: `#fafafa`
|
||||
- Padding: 8px 32px
|
||||
- Radius: 9999px
|
||||
- Border: `1px solid #2e2e2e` (dark border)
|
||||
- Opacity: 0.8
|
||||
- Use: Secondary CTA alongside primary
|
||||
**`button-secondary-outline`** — outline alternative on white.
|
||||
- Background `{colors.canvas}`, text `{colors.ink}`, 1px solid `{colors.hairline-strong}` border, same shape.
|
||||
|
||||
**Ghost Button**
|
||||
- Background: transparent
|
||||
- Text: `#fafafa`
|
||||
- Padding: 8px
|
||||
- Radius: 6px
|
||||
- Border: `1px solid transparent`
|
||||
- Use: Tertiary actions, icon buttons
|
||||
**`button-on-dark`** — used on dark surfaces / code-block CTAs.
|
||||
- Background `{colors.canvas-night}`, text `{colors.on-dark}`, same shape.
|
||||
|
||||
**`button-link`** — text-only inline button.
|
||||
- Transparent background, text `{colors.ink}` rendered in `{typography.button-md}`, no padding, with a subtle underline on hover.
|
||||
|
||||
### Cards & Containers
|
||||
- Background: dark surfaces (`#171717` or slightly lighter)
|
||||
- Border: `1px solid #2e2e2e` or `#363636`
|
||||
- Radius: 8px–16px
|
||||
- No visible shadows — borders define edges
|
||||
- Internal padding: 16px–24px
|
||||
|
||||
### Tabs
|
||||
- Border: `1px solid #2e2e2e`
|
||||
- Radius: 9999px (pill tabs)
|
||||
- Active: green accent or lighter surface
|
||||
- Inactive: dark, muted
|
||||
**`card-feature-light`** — feature card on white.
|
||||
- Background `{colors.canvas}`, padding `{spacing.xxl}`, rounded `{rounded.lg}` 12px, 1px `{colors.hairline}` border.
|
||||
|
||||
### Links
|
||||
- **Green**: `#00c573` — Supabase-branded links
|
||||
- **Primary Light**: `#fafafa` — standard links on dark
|
||||
- **Secondary**: `#b4b4b4` — muted links
|
||||
- **Muted**: `#898989` — tertiary links, footer
|
||||
**`card-pricing`** — standard pricing tier.
|
||||
- Background `{colors.canvas}`, padding `{spacing.xxl}`, rounded `{rounded.lg}`, 1px `{colors.hairline}` border. Title in `{typography.heading-lg}`, price in `{typography.display-md}`, body in `{typography.body-md}`, CTA `button-primary-green` pinned bottom.
|
||||
|
||||
**`card-pricing-featured`** — inverted dark featured tier.
|
||||
- Background `{colors.canvas-night}`, text `{colors.on-dark}`, otherwise identical structure.
|
||||
|
||||
**`card-feature-dark`** — feature card with deep dark fill.
|
||||
- Background `{colors.canvas-night}`, text `{colors.on-dark}`, padding `{spacing.xxl}`, rounded `{rounded.lg}`. Used for code-heavy feature explanations.
|
||||
|
||||
**`code-block`** — code snippet container.
|
||||
- Background `{colors.canvas-night}`, text `{colors.on-dark}` rendered in `{typography.code}`. Padding `{spacing.lg}` 16px, rounded `{rounded.sm}` 6px.
|
||||
|
||||
### Inputs & Forms
|
||||
|
||||
**`text-input`** — standard form input.
|
||||
- Background `{colors.canvas}`, text `{colors.ink}`, type `{typography.body-md}`, padding `{spacing.sm} {spacing.md}` (8px 12px), rounded `{rounded.sm}` 6px, 1px `{colors.hairline}` border.
|
||||
|
||||
### Navigation
|
||||
- Dark background matching page (`#171717`)
|
||||
- Supabase logo with green icon
|
||||
- Circular 14px weight 500 for nav links
|
||||
- Clean horizontal layout with product dropdown
|
||||
- Green "Start your project" CTA pill button
|
||||
- Sticky header behavior
|
||||
|
||||
## 5. Layout Principles
|
||||
**`nav-bar-light`** — top nav across the site.
|
||||
- Background `{colors.canvas}`, text `{colors.ink}`, padding `{spacing.lg} {spacing.xl}`. Logo on the left, primary nav center, "Sign In" link + filled `button-primary-green` on the right.
|
||||
|
||||
### Spacing System
|
||||
- Base unit: 8px
|
||||
- Scale: 1px, 4px, 6px, 8px, 12px, 16px, 20px, 24px, 32px, 40px, 48px, 90px, 96px, 128px
|
||||
- Notable large jumps: 48px → 90px → 96px → 128px for major section spacing
|
||||
### Pills, Tags, and Chips
|
||||
|
||||
### Grid & Container
|
||||
- Centered content with generous max-width
|
||||
- Full-width dark sections with constrained inner content
|
||||
- Feature grids: icon-based grids with consistent card sizes
|
||||
- Logo grids for "Trusted by" sections
|
||||
- Footer: multi-column on dark background
|
||||
**`pill-tag-green`** — small green pill used for "new" or featured indicators.
|
||||
- Background `{colors.primary}`, text `{colors.on-primary}`, type `{typography.micro}`, padding `{spacing.xxs} {spacing.sm}`, rounded `{rounded.full}`.
|
||||
|
||||
### Breakpoints
|
||||
| Name | Width | Key Changes |
|
||||
|------|-------|-------------|
|
||||
| Mobile | <600px | Single column, stacked layout |
|
||||
| Desktop | >600px | Multi-column grids, expanded layout |
|
||||
**`pill-tag-soft`** — neutral pill on light surfaces.
|
||||
- Background `{colors.canvas-soft}`, text `{colors.ink}`, otherwise same shape.
|
||||
|
||||
*Note: Supabase uses a notably minimal breakpoint system — primarily a single 600px breakpoint, suggesting a mobile-first approach with progressive enhancement.*
|
||||
### Signature Components
|
||||
|
||||
### Whitespace Philosophy
|
||||
- **Dramatic section spacing**: 90px–128px between major sections creates a cinematic pacing — each section is its own scene in the dark void.
|
||||
- **Dense content blocks**: Within sections, spacing is tight (16px–24px), creating concentrated information clusters.
|
||||
- **Border-defined space**: Instead of whitespace + shadows for separation, Supabase uses thin borders on dark backgrounds — separation through line, not gap.
|
||||
**Composited Product UI Mockups** — multi-layer dashboard / SQL editor / log pane composites with subtle Level 2 shadows. The product is the brand's argument; mockups always sit on white canvas with no surrounding decoration.
|
||||
|
||||
### Border Radius Scale
|
||||
- Standard (6px): Ghost buttons, small elements
|
||||
- Comfortable (8px): Cards, containers
|
||||
- Medium (11px–12px): Mid-size panels
|
||||
- Large (16px): Feature cards, major containers
|
||||
- Pill (9999px): Primary buttons, tab indicators
|
||||
**`link-on-light`** — inline links in body copy.
|
||||
- Text `{colors.ink}` rendered in `{typography.body-md}` with a persistent underline.
|
||||
|
||||
## 6. Depth & Elevation
|
||||
**`footer-light`** — site-wide footer.
|
||||
- Background `{colors.canvas}`, text `{colors.ink-mute}`, type `{typography.caption}`, padding `{spacing.huge} {spacing.xl}` (64px 24px). Holds 4–5 columns of link groups, social icons, and a small legal row.
|
||||
|
||||
| Level | Treatment | Use |
|
||||
|-------|-----------|-----|
|
||||
| Flat (Level 0) | No shadow, border `#2e2e2e` | Default state, most surfaces |
|
||||
| Subtle Border (Level 1) | Border `#363636` or `#393939` | Interactive elements, hover |
|
||||
| Focus (Level 2) | `rgba(0, 0, 0, 0.1) 0px 4px 12px` | Focus states only |
|
||||
| Green Accent (Level 3) | Border `rgba(62, 207, 142, 0.3)` | Brand-highlighted elements |
|
||||
|
||||
**Shadow Philosophy**: Supabase deliberately avoids shadows. In a dark-mode-native design, shadows are nearly invisible and serve no purpose. Instead, depth is communicated through a sophisticated border hierarchy — from `#242424` (barely visible) through `#2e2e2e` (standard) to `#393939` (prominent). The green accent border (`rgba(62, 207, 142, 0.3)`) at 30% opacity is the "elevated" state — the brand color itself becomes the depth signal.
|
||||
|
||||
## 7. Do's and Don'ts
|
||||
## Do's and Don'ts
|
||||
|
||||
### Do
|
||||
- Use near-black backgrounds (`#0f0f0f`, `#171717`) — depth comes from the gray border hierarchy
|
||||
- Apply Supabase green (`#3ecf8e`, `#00c573`) sparingly — it's an identity marker, not a decoration
|
||||
- Use Circular at weight 400 for nearly everything — 500 only for buttons and nav
|
||||
- Set hero text to 1.00 line-height — the zero-leading is the typographic signature
|
||||
- Create depth through border color differences (`#242424` → `#2e2e2e` → `#363636`)
|
||||
- Use pill shape (9999px) exclusively for primary CTAs and tabs
|
||||
- Employ HSL-based colors with alpha for translucent layering effects
|
||||
- Use Source Code Pro uppercase labels for developer-context markers
|
||||
- Reserve `{colors.primary}` emerald for filled CTAs and the wordmark accent — it should appear sparingly.
|
||||
- Render display tiers at weight 500 with negative letter-spacing — the engineered tightness is part of the brand.
|
||||
- Use `{rounded.sm}` 6px for buttons — square-ish radii, never pill-shaped.
|
||||
- Composite product UI mockups inside `{rounded.lg}` containers with subtle Level 2 shadows.
|
||||
- Use near-black `{colors.ink}` on the emerald button (not white) — the green reads as "lit" with dark type, which is the brand's idiosyncratic choice.
|
||||
- Apply system mono for every code block.
|
||||
|
||||
### Don't
|
||||
- Don't add box-shadows — they're invisible on dark backgrounds and break the border-defined depth system
|
||||
- Don't use bold (700) text weight — the system uses 400 and 500 only
|
||||
- Don't apply green to backgrounds or large surfaces — it's for borders, links, and small accents
|
||||
- Don't use warm colors (crimson, orange) as primary design elements — they exist as semantic tokens for states
|
||||
- Don't increase hero line-height above 1.00 — the density is intentional
|
||||
- Don't use large border radius (16px+) on buttons — pills (9999px) or standard (6px), nothing in between
|
||||
- Don't lighten the background above `#171717` for primary surfaces — the darkness is structural
|
||||
- Don't forget the translucent borders — `rgba` border colors are the layering mechanism
|
||||
- Don't introduce additional accent colors as system colors — purples, yellows, and pinks belong inside chart points and integration logos only.
|
||||
- Don't bump display weight above 500 — the brand's calibrated mid-weight breaks at 600+.
|
||||
- Don't use pill-shaped buttons; the brand's button radius is square-ish 6px.
|
||||
- Don't use white text on the emerald button — the brand specifically uses near-black on green.
|
||||
- Don't add atmospheric gradients to hero bands — the white canvas is the design.
|
||||
|
||||
## 8. Responsive Behavior
|
||||
## Responsive Behavior
|
||||
|
||||
### Breakpoints
|
||||
|
||||
| Name | Width | Key Changes |
|
||||
|------|-------|-------------|
|
||||
| Mobile | <600px | Single column, stacked features, condensed nav |
|
||||
| Desktop | >600px | Multi-column grids, full nav, expanded sections |
|
||||
|---|---|---|
|
||||
| Wide | ≥ 1440px | Full container width; product mockups at full scale |
|
||||
| Desktop | 1024–1440px | Default content max-width; pricing 4-up |
|
||||
| Tablet | 768–1023px | Pricing 2-up; mockups simplify to single panel |
|
||||
| Mobile | < 768px | Pricing 1-up; hamburger nav; display drops 64 → 36px |
|
||||
|
||||
### Touch Targets
|
||||
- Buttons hit ≥ 36×36px on mobile; vertical padding scales up to maintain WCAG AA minimum.
|
||||
- Form fields stay at 36px minimum height.
|
||||
|
||||
### Collapsing Strategy
|
||||
- Hero: 72px → scales down proportionally
|
||||
- Feature grids: multi-column → single column stacked
|
||||
- Logo row: horizontal → wrapped grid
|
||||
- Navigation: full → hamburger
|
||||
- Section spacing: 90–128px → 48–64px
|
||||
- Buttons: inline → full-width stacked
|
||||
- Display tiers stair-step 64 → 48 → 36 → 28 → 22px.
|
||||
- Product UI mockups simplify to a single primary panel on mobile.
|
||||
- Pricing tiers stair-step 4-up → 2-up → 1-up; dark featured tier always distinguished.
|
||||
|
||||
## 9. Agent Prompt Guide
|
||||
### Image Behavior
|
||||
Product UI mockups use `srcset` with desktop / mobile crops; mobile crops focus on the most actionable inner panel.
|
||||
|
||||
### Quick Color Reference
|
||||
- Background: `#0f0f0f` (button), `#171717` (page)
|
||||
- Text: `#fafafa` (primary), `#b4b4b4` (secondary), `#898989` (muted)
|
||||
- Brand green: `#3ecf8e` (brand), `#00c573` (links)
|
||||
- Borders: `#242424` (subtle), `#2e2e2e` (standard), `#363636` (prominent)
|
||||
- Green border: `rgba(62, 207, 142, 0.3)` (accent)
|
||||
## Iteration Guide
|
||||
|
||||
### Example Component Prompts
|
||||
- "Create a hero section on #171717 background. Headline at 72px Circular weight 400, line-height 1.00, #fafafa text. Sub-text at 16px Circular weight 400, line-height 1.50, #b4b4b4. Pill CTA button (#0f0f0f bg, #fafafa text, 9999px radius, 8px 32px padding, 1px solid #fafafa border)."
|
||||
- "Design a feature card: #171717 background, 1px solid #2e2e2e border, 16px radius. Title at 24px Circular weight 400, letter-spacing -0.16px. Body at 14px weight 400, #898989 text."
|
||||
- "Build navigation bar: #171717 background. Circular 14px weight 500 for links, #fafafa text. Supabase logo with green icon left-aligned. Green pill CTA 'Start your project' right-aligned."
|
||||
- "Create a technical label: Source Code Pro 12px, uppercase, letter-spacing 1.2px, #898989 text."
|
||||
- "Design a framework logo grid: 6-column layout on dark, grayscale logos at 60% opacity, 1px solid #2e2e2e border between sections."
|
||||
|
||||
### Iteration Guide
|
||||
1. Start with #171717 background — everything is dark-mode-native
|
||||
2. Green is the brand identity marker — use it for links, logo, and accent borders only
|
||||
3. Depth comes from borders (#242424 → #2e2e2e → #363636), not shadows
|
||||
4. Weight 400 is the default for everything — 500 only for interactive elements
|
||||
5. Hero line-height of 1.00 is the signature typographic move
|
||||
6. Pill (9999px) for primary actions, 6px for secondary, 8-16px for cards
|
||||
7. HSL with alpha channels creates the sophisticated translucent layering
|
||||
1. Focus on ONE component at a time.
|
||||
2. Reference component names and tokens directly.
|
||||
3. Run `npx @google/design.md lint DESIGN.md` after edits.
|
||||
4. Default body to `{typography.body-md}`; use `{typography.code}` for any developer-facing snippet.
|
||||
5. Keep emerald scarce; one filled green button per viewport.
|
||||
6. The white-canvas commitment is non-negotiable — adding atmospheric backdrops breaks the brand.
|
||||
|
||||
@ -1,252 +1,448 @@
|
||||
# Design System Inspired by Superhuman
|
||||
---
|
||||
version: alpha
|
||||
name: Superhumon Inspired
|
||||
description: An inspired interpretation of Superhumon's design language — a fast-email productivity brand split between an editorial dark hero (deep indigo navy with violet-sky atmospheric backdrop and a portrait subject) and a quiet white content body with off-warm-grey ink. The system uses a single proprietary variable display sans, heavy weight 460–540 with tight tracking, and a deep-teal closing CTA band that breaks the indigo/white rhythm with a warm dark interlude. Buttons are tight rounded rectangles, pricing is sober and dense, and the brand reads more like a high-end newsletter than a SaaS app.
|
||||
|
||||
## 1. Visual Theme & Atmosphere
|
||||
colors:
|
||||
primary: "#1b1938"
|
||||
primary-deep: "#0e0c1f"
|
||||
on-primary: "#ffffff"
|
||||
ink: "#292827"
|
||||
ink-mute: "#73706d"
|
||||
ink-faint: "#9a9794"
|
||||
canvas: "#ffffff"
|
||||
canvas-soft: "#fafaf8"
|
||||
surface-violet-soft: "#c9b4fa"
|
||||
surface-teal-deep: "#0e3030"
|
||||
surface-teal-mid: "#155555"
|
||||
hairline: "#e8e4dd"
|
||||
hairline-dark: "#3f3a52"
|
||||
on-dark-mute: "#bcbac9"
|
||||
on-dark-faint: "#5a5772"
|
||||
|
||||
Superhuman's website feels like opening a luxury envelope — predominantly white, immaculately clean, with a single dramatic gesture of color that commands attention. The hero section is a cinematic purple gradient, a deep twilight wash of `#1b1938` that evokes the moment just before dawn, overlaid with confident white typography. Below this dramatic entrance, the rest of the site is almost entirely white canvas with dark charcoal text, creating a stark but refined reading experience.
|
||||
typography:
|
||||
display-xxl:
|
||||
fontFamily: "'Super Sans VF', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif"
|
||||
fontSize: 64px
|
||||
fontWeight: 540
|
||||
lineHeight: 0.96
|
||||
letterSpacing: 0
|
||||
display-xl:
|
||||
fontFamily: "'Super Sans VF', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif"
|
||||
fontSize: 48px
|
||||
fontWeight: 460
|
||||
lineHeight: 0.96
|
||||
letterSpacing: -1.32px
|
||||
display-lg:
|
||||
fontFamily: "'Super Sans VF', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif"
|
||||
fontSize: 28px
|
||||
fontWeight: 540
|
||||
lineHeight: 1.14
|
||||
letterSpacing: -0.63px
|
||||
display-md:
|
||||
fontFamily: "'Super Sans VF', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif"
|
||||
fontSize: 22px
|
||||
fontWeight: 460
|
||||
lineHeight: 1.1
|
||||
letterSpacing: -0.315px
|
||||
heading-lg:
|
||||
fontFamily: "'Super Sans VF', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif"
|
||||
fontSize: 20px
|
||||
fontWeight: 460
|
||||
lineHeight: 1.2
|
||||
letterSpacing: -0.4px
|
||||
body-lg:
|
||||
fontFamily: "'Super Sans VF', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif"
|
||||
fontSize: 18px
|
||||
fontWeight: 540
|
||||
lineHeight: 1.5
|
||||
letterSpacing: -0.135px
|
||||
body-md:
|
||||
fontFamily: "'Super Sans VF', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif"
|
||||
fontSize: 16px
|
||||
fontWeight: 460
|
||||
lineHeight: 1.5
|
||||
letterSpacing: 0
|
||||
body-strong:
|
||||
fontFamily: "'Super Sans VF', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif"
|
||||
fontSize: 18.72px
|
||||
fontWeight: 700
|
||||
lineHeight: 1.5
|
||||
letterSpacing: 0
|
||||
button-md:
|
||||
fontFamily: "'Super Sans VF', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif"
|
||||
fontSize: 16px
|
||||
fontWeight: 700
|
||||
lineHeight: 1.0
|
||||
letterSpacing: 0
|
||||
button-cap:
|
||||
fontFamily: "'Super Sans VF', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif"
|
||||
fontSize: 14px
|
||||
fontWeight: 600
|
||||
lineHeight: 1.0
|
||||
letterSpacing: 0
|
||||
caption:
|
||||
fontFamily: "'Super Sans VF', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif"
|
||||
fontSize: 14px
|
||||
fontWeight: 460
|
||||
lineHeight: 1.4
|
||||
letterSpacing: 0
|
||||
micro:
|
||||
fontFamily: "'Super Sans VF', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif"
|
||||
fontSize: 12px
|
||||
fontWeight: 540
|
||||
lineHeight: 1.4
|
||||
letterSpacing: 0
|
||||
|
||||
The typography is the true signature: Super Sans VF, a custom variable font with unconventional weight stops (460, 540, 600, 700) that sit between traditional font weight categories. Weight 460 — slightly heavier than regular but lighter than medium — is the workhorse, creating text that feels more confident than typical 400-weight but never aggressive. The tight line-heights (0.96 on display text) compress headlines into dense, powerful blocks, while generous 1.50 line-height on body text provides airy readability. This tension between compressed power and breathing room defines the Superhuman typographic voice.
|
||||
rounded:
|
||||
xs: 4px
|
||||
sm: 6px
|
||||
md: 8px
|
||||
lg: 12px
|
||||
xl: 16px
|
||||
full: 9999px
|
||||
|
||||
The design philosophy is maximum confidence through minimum decoration. Warm cream buttons (`#e9e5dd`) instead of bright CTAs, a near-absence of borders and shadows, and lavender purple (`#cbb7fb`) as the sole accent color. It's a productivity tool that markets itself like a luxury brand — every pixel earns its place, nothing is merely decorative. The brand naming convention extends to colors: the primary purple is called "Mysteria," straddling blue and purple with deliberate ambiguity.
|
||||
spacing:
|
||||
xxs: 2px
|
||||
xs: 4px
|
||||
sm: 8px
|
||||
md: 12px
|
||||
lg: 16px
|
||||
xl: 24px
|
||||
xxl: 32px
|
||||
huge: 64px
|
||||
|
||||
components:
|
||||
button-primary-dark:
|
||||
backgroundColor: "{colors.primary}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.button-md}"
|
||||
rounded: "{rounded.md}"
|
||||
padding: 12px 20px
|
||||
button-primary-dark-pressed:
|
||||
backgroundColor: "{colors.primary-deep}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.button-md}"
|
||||
rounded: "{rounded.md}"
|
||||
padding: 12px 20px
|
||||
button-on-dark-pill:
|
||||
backgroundColor: "{colors.surface-violet-soft}"
|
||||
textColor: "{colors.primary}"
|
||||
typography: "{typography.button-md}"
|
||||
rounded: "{rounded.full}"
|
||||
padding: 12px 20px
|
||||
button-secondary-outline:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.button-md}"
|
||||
rounded: "{rounded.md}"
|
||||
padding: 12px 20px
|
||||
button-on-teal:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.surface-teal-deep}"
|
||||
typography: "{typography.button-md}"
|
||||
rounded: "{rounded.md}"
|
||||
padding: 12px 20px
|
||||
text-input:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.sm}"
|
||||
padding: 10px 12px
|
||||
card-feature-light:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.lg}"
|
||||
padding: 32px
|
||||
card-pricing:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.lg}"
|
||||
padding: 32px
|
||||
card-pricing-featured:
|
||||
backgroundColor: "{colors.primary}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.lg}"
|
||||
padding: 32px
|
||||
card-teal-band:
|
||||
backgroundColor: "{colors.surface-teal-deep}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.body-lg}"
|
||||
rounded: "{rounded.lg}"
|
||||
padding: 64px
|
||||
card-feature-row:
|
||||
backgroundColor: "{colors.canvas-soft}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.md}"
|
||||
padding: 24px
|
||||
pill-tab-light:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.button-cap}"
|
||||
rounded: "{rounded.full}"
|
||||
padding: 8px 16px
|
||||
nav-bar-dark:
|
||||
backgroundColor: "{colors.primary}"
|
||||
textColor: "{colors.on-primary}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 16px 24px
|
||||
nav-bar-light:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 16px 24px
|
||||
link-on-light:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.ink}"
|
||||
typography: "{typography.body-md}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 0px
|
||||
footer-light:
|
||||
backgroundColor: "{colors.canvas}"
|
||||
textColor: "{colors.ink-mute}"
|
||||
typography: "{typography.caption}"
|
||||
rounded: "{rounded.xs}"
|
||||
padding: 64px 24px
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
Superhumon's marketing pages open in an editorial dark register: a deep indigo navy `{colors.primary}` (`#1b1938`) canvas overlaid with a soft violet-and-sky atmospheric backdrop and a half-bleed portrait subject (often a person looking off-frame, photographed at twilight). Headlines render in `{typography.display-xxl}` (Super Sans VF at 64px / weight 540) with negative tracking, set in white over the indigo. A single rounded-rectangle CTA button anchors each band — never two, never three.
|
||||
|
||||
The body of every page flips to white. `{colors.canvas}` (`#ffffff`) takes over below the hero, with body type in `{colors.ink}` (`#292827` — a slightly warm dark grey, never pure black) and feature rows alternating between white and `{colors.canvas-soft}` (a barely-tinted off-white). Pricing tiers sit on this white surface; the featured tier inverts to the indigo navy, completing the brand's binary polarity.
|
||||
|
||||
Every page closes with a **deep-teal CTA band** (`{colors.surface-teal-deep}` — `#0e3030`). The teal is a single chromatic interlude: rich, almost-black green-blue, that breaks up what would otherwise be an indigo/white-only page. The teal band always contains the closing CTA in `{typography.display-lg}` paired with a single white-pill button.
|
||||
|
||||
Typography runs **Super Sans VF** — a proprietary variable display sans — at unusual mid-weights (460, 540, 600). The variable axes let the brand pick precise sub-default weights that read as warmer and more human than typical 400/500/700 SaaS scales. Display sizes use negative letter-spacing of -1.32px to -0.315px depending on size; line-heights are unusually tight (0.96 on 48px display).
|
||||
|
||||
**Key Characteristics:**
|
||||
- Deep purple gradient hero (`#1b1938`) contrasting against a predominantly white content body
|
||||
- Super Sans VF variable font with non-standard weight stops (460, 540, 600, 700) — sits between conventional weight categories
|
||||
- Ultra-tight display line-height (0.96) creating compressed, powerful headlines
|
||||
- Warm Cream (`#e9e5dd`) buttons instead of bright/saturated CTAs — understated luxury
|
||||
- Lavender Purple (`#cbb7fb`) as the singular accent color — a soft, approachable purple
|
||||
- Minimal border-radius scale: only 8px and 16px — no micro-rounding, no pill shapes
|
||||
- Product screenshots dominate the content — the UI sells itself with minimal surrounding decoration
|
||||
- Three-canvas system: indigo navy (`{colors.primary}`) for hero, white (`{colors.canvas}`) for body, deep teal (`{colors.surface-teal-deep}`) for closing CTA.
|
||||
- Half-bleed portrait subject in the hero with violet-sky atmospheric backdrop — the brand uses a person looking off-frame as a recurring visual.
|
||||
- Single CTA per band; the marketing pages never crowd actions.
|
||||
- Super Sans VF at sub-default weights (460, 540, 600) — the brand's typographic warmth signature.
|
||||
- Tight line-heights (0.96) on display sizes — vertical compression as editorial density.
|
||||
- Off-warm-grey body ink (`#292827`) — never pure black; the brand's quiet warmth.
|
||||
- Pill-shaped on-hero CTA in pale violet (`{colors.surface-violet-soft}`); rounded-rectangle CTAs everywhere else.
|
||||
|
||||
## 2. Color Palette & Roles
|
||||
## Colors
|
||||
|
||||
### Primary
|
||||
- **Mysteria Purple** (`#1b1938`): Hero gradient background, deep purple that straddles blue-purple — the darkest expression of the brand
|
||||
- **Lavender Glow** (`#cbb7fb`): Primary accent and highlight color — soft purple used for emphasis, decorative elements, and interactive highlights
|
||||
- **Charcoal Ink** (`#292827`): Primary text and heading color on light surfaces — warm near-black with faint brown undertone
|
||||
> **Source pages:** home (`/`), `/products/go-ai-assistant`, `/contact-sales`, `/plans`.
|
||||
|
||||
### Secondary & Accent
|
||||
- **Amethyst Link** (`#714cb6`): Underlined link text — mid-range purple that connects to the brand palette while signaling interactivity
|
||||
- **Translucent White** (`color(srgb 1 1 1 / 0.95)`): Hero overlay text — near-white at 95% opacity for depth layering on dark surfaces
|
||||
- **Misted White** (`color(srgb 1 1 1 / 0.8)`): Secondary text on dark surfaces — 80% opacity white for hierarchy on the hero gradient
|
||||
### Brand & Accent
|
||||
- **Primary Indigo Navy** (`{colors.primary}` — `#1b1938`): The brand's primary surface and CTA color. Hero canvas, filled rounded-rectangle button, featured pricing tier.
|
||||
- **Indigo Deep** (`{colors.primary-deep}` — `#0e0c1f`): Pressed-state lift / deeper navy used in hero gradient stops.
|
||||
- **Surface Violet Soft** (`{colors.surface-violet-soft}` — `#c9b4fa`): The hero pill-button fill — pale violet over the indigo canvas. Also appears in atmospheric backdrops.
|
||||
- **Surface Teal Deep** (`{colors.surface-teal-deep}` — `#0e3030`): The signature closing-CTA band color. Rich green-blue, almost black.
|
||||
- **Surface Teal Mid** (`{colors.surface-teal-mid}` — `#155555`): Slightly lifted teal for nested chrome inside the band.
|
||||
|
||||
### Surface & Background
|
||||
- **Pure White** (`#ffffff`): Primary page background — the dominant canvas color for all content sections
|
||||
- **Warm Cream** (`#e9e5dd`): Button background — a warm, neutral cream that avoids the coldness of pure gray
|
||||
- **Parchment Border** (`#dcd7d3`): Card and divider borders — warm light gray with slight pink undertone
|
||||
### Surface
|
||||
- **Canvas** (`{colors.canvas}` — `#ffffff`): Default body background.
|
||||
- **Canvas Soft** (`{colors.canvas-soft}` — `#fafaf8`): Barely-warm off-white for alternating feature-row bands.
|
||||
- **Hairline** (`{colors.hairline}` — `#e8e4dd`): 1px borders, slightly warm grey.
|
||||
- **Hairline Dark** (`{colors.hairline-dark}` — `#3f3a52`): 1px borders on dark surfaces.
|
||||
|
||||
### Neutrals & Text
|
||||
- **Charcoal Ink** (`#292827`): Primary heading and body text on white surfaces
|
||||
- **Amethyst Link** (`#714cb6`): In-content links with underline decoration
|
||||
- **Translucent White 95%** (`color(srgb 1 1 1 / 0.95)`): Primary text on dark/purple surfaces
|
||||
- **Translucent White 80%** (`color(srgb 1 1 1 / 0.8)`): Secondary text on dark/purple surfaces
|
||||
### Text
|
||||
- **Ink** (`{colors.ink}` — `#292827`): Default body text. Warm dark grey, never pure black.
|
||||
- **Ink Mute** (`{colors.ink-mute}` — `#73706d`): Secondary text, captions.
|
||||
- **Ink Faint** (`{colors.ink-faint}` — `#9a9794`): Tertiary / disabled text.
|
||||
- **On Primary** (`{colors.on-primary}` — `#ffffff`): Text on dark navy / teal surfaces.
|
||||
- **On Dark Mute** (`{colors.on-dark-mute}` — translucent white): Secondary text on dark.
|
||||
- **On Dark Faint** (`{colors.on-dark-faint}` — translucent white): Tertiary text on dark.
|
||||
|
||||
### Semantic & Accent
|
||||
- Superhuman operates with extreme color restraint — Lavender Glow (`#cbb7fb`) is the only true accent
|
||||
- Interactive states are communicated through opacity shifts and underline decorations rather than color changes
|
||||
- The warm cream button palette avoids any saturated semantic colors (no red errors, green success visible on marketing)
|
||||
|
||||
### Gradient System
|
||||
- **Hero Gradient**: Deep purple gradient starting from `#1b1938`, transitioning through purple-to-twilight tones across the hero section — the most dramatic visual element on the entire site
|
||||
- **Content Transition**: The gradient dissolves into the white content area, creating a cinematic curtain-lift effect as the user scrolls
|
||||
- No other gradients on the marketing site — the hero gradient is a singular dramatic gesture
|
||||
|
||||
## 3. Typography Rules
|
||||
## Typography
|
||||
|
||||
### Font Family
|
||||
- **Display & Body**: `Super Sans VF` — custom variable font with non-standard weight axis. Fallbacks: `system-ui, -apple-system, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue`
|
||||
- **Product UI** (referenced in brand): `Messina Sans` / `Messina Serif` / `Messina Mono` from Luzi Type — used in the product itself for sans-serif-to-serif transitions
|
||||
|
||||
The display and UI tier is **Super Sans VF** — a proprietary variable sans (variable axes for weight, with the brand using sub-default 460 / 540 / 600 weights). Fallback chain is the system font stack.
|
||||
|
||||
For substitution use **Inter Variable** (open-source) at weight 460 / 540 / 600 — Inter's variable axes match Super Sans VF's behavior closely. Avoid fixed-weight Inter at 400 / 500 / 600 — the brand specifically picks the in-between weights.
|
||||
|
||||
### Hierarchy
|
||||
|
||||
| Role | Font | Size | Weight | Line Height | Letter Spacing | Notes |
|
||||
|------|------|------|--------|-------------|----------------|-------|
|
||||
| Display Hero | Super Sans VF | 64px | 540 | 0.96 | 0px | Maximum compression, powerful block headlines |
|
||||
| Section Display | Super Sans VF | 48px | 460 | 0.96 | -1.32px | Lighter weight for section introductions |
|
||||
| Section Heading | Super Sans VF | 48px | 460 | 0.96 | 0px | Alternate section heading without tracking |
|
||||
| Feature Title | Super Sans VF | 28px | 540 | 1.14 | -0.63px | Feature block headlines, tighter |
|
||||
| Sub-heading Large | Super Sans VF | 26px | 460 | 1.30 | 0px | Content sub-sections |
|
||||
| Card Heading | Super Sans VF | 22px | 460 | 0.76 | -0.315px | Card title with extreme compression |
|
||||
| Body Heading | Super Sans VF | 20px | 460 | 1.20 | 0px | Bold content intros |
|
||||
| Body Heading Alt | Super Sans VF | 20px | 460 | 1.10 | -0.55px | Tighter variant for emphasis |
|
||||
| Body Heading Relaxed | Super Sans VF | 20px | 460 | 1.25 | -0.4px | More breathing room variant |
|
||||
| Emphasis Body | Super Sans VF | 18px | 540 | 1.50 | -0.135px | Medium-weight body for callouts |
|
||||
| Body | Super Sans VF | 16px | 460 | 1.50 | 0px | Standard reading text — generous line-height |
|
||||
| Button / UI Bold | Super Sans VF | 16px | 700 | 1.00 | 0px | Bold UI elements |
|
||||
| Button / UI Semi | Super Sans VF | 16px | 600 | 1.00 | 0px | Semi-bold navigation and labels |
|
||||
| Nav Link | Super Sans VF | 16px | 460 | 1.20 | 0px | Navigation items |
|
||||
| Caption | Super Sans VF | 14px | 500 | 1.20 | -0.315px | Small labels, metadata |
|
||||
| Caption Semi | Super Sans VF | 14px | 600 | 1.29 | 0px | Emphasized small text |
|
||||
| Caption Body | Super Sans VF | 14px | 460 | 1.50 | 0px | Small body text |
|
||||
| Micro Label | Super Sans VF | 12px | 700 | 1.50 | 0px | Smallest text — badges, tags |
|
||||
| Token | Size | Weight | Line Height | Letter Spacing | Use |
|
||||
|---|---|---|---|---|---|
|
||||
| `{typography.display-xxl}` | 64px | 540 | 0.96 | 0 | Hero headline |
|
||||
| `{typography.display-xl}` | 48px | 460 | 0.96 | -1.32px | Section opener on light surfaces |
|
||||
| `{typography.display-lg}` | 28px | 540 | 1.14 | -0.63px | Sub-section / feature title |
|
||||
| `{typography.display-md}` | 22px | 460 | 1.1 | -0.315px | Card title |
|
||||
| `{typography.heading-lg}` | 20px | 460 | 1.2 | -0.4px | Compact card title |
|
||||
| `{typography.body-lg}` | 18px | 540 | 1.5 | -0.135px | Marketing body lead |
|
||||
| `{typography.body-md}` | 16px | 460 | 1.5 | 0 | Default UI body |
|
||||
| `{typography.body-strong}` | 18.72px | 700 | 1.5 | 0 | Emphasized body |
|
||||
| `{typography.button-md}` | 16px | 700 | 1.0 | 0 | Rounded-rectangle button label |
|
||||
| `{typography.button-cap}` | 14px | 600 | 1.0 | 0 | Compact button label |
|
||||
| `{typography.caption}` | 14px | 460 | 1.4 | 0 | Helper, footnote |
|
||||
| `{typography.micro}` | 12px | 540 | 1.4 | 0 | Pill label, fine print |
|
||||
|
||||
### Principles
|
||||
- **Non-standard weight axis**: Weights 460 and 540 are deliberately between conventional Regular (400) and Medium (500), creating a typographic texture that feels subtly "off" in a confident way — slightly heavier than expected, never quite bold
|
||||
- **Extreme display compression**: Display headlines at 0.96 line-height collapse lines nearly on top of each other, creating dense typographic blocks that feel architectural
|
||||
- **Body generosity**: In contrast, body text at 1.50 line-height is extremely spacious, ensuring comfortable reading after the dense headline impact
|
||||
- **Selective negative tracking**: Letter-spacing is applied surgically — -1.32px on 48px headings, -0.63px on 28px features, but 0px on body text. The larger the text, the tighter the tracking
|
||||
- **Variable font efficiency**: A single font file serves all weight variations (460–700), enabling smooth weight transitions and micro-adjustments
|
||||
- **Sub-default weights.** The brand picks 460 / 540 / 600 instead of 400 / 500 / 700 — a quiet warmth in the typography that distinguishes it from default SaaS systems.
|
||||
- **Tight display leading.** 0.96 on 48–64px display — the type stacks unusually compact.
|
||||
- **Negative tracking on display sizes.** -1.32px at 48px scaling proportionally — tightens the variable letterforms into editorial density.
|
||||
|
||||
## 4. Component Stylings
|
||||
### Note on Font Substitutes
|
||||
**Inter Variable** (open-source via Google Fonts) is the recommended substitute. Set `font-variation-settings: "wght" 540` for display, 460 for body — Inter's variable axes match. Avoid fixed-weight Inter; the in-between weights are the brand's signature.
|
||||
|
||||
### Buttons
|
||||
- **Warm Cream Primary**: `#e9e5dd` background, Charcoal Ink (`#292827`) text, subtle rounded corners (8px radius), no visible border. The signature CTA — warm, muted, luxurious rather than aggressive
|
||||
- **Dark Primary** (on light sections): `#292827` background with white text, 8px radius — inverse of the warm cream for contrast sections
|
||||
- **Ghost / Text Link**: No background, underline decoration, Amethyst Link (`#714cb6`) or Charcoal Ink color depending on context
|
||||
- **Hero CTA**: Warm Cream on the dark purple gradient — the cream color pops dramatically against `#1b1938`
|
||||
- **Hover**: Subtle opacity or brightness shift — no dramatic color transformations
|
||||
|
||||
### Cards & Containers
|
||||
- **Content Card**: White background, Parchment Border (`#dcd7d3`) 1px border, 16px border-radius — clean and minimal
|
||||
- **Dark Surface Card**: `#292827` border on dark sections, maintaining warm-neutral tone
|
||||
- **Hero Surface**: Semi-transparent white border (`rgba(255, 255, 255, 0.2)`) on purple gradient — ghostly containment
|
||||
- **Product Screenshot Cards**: Large product UI images with clean edges, minimal framing — the product itself is the visual
|
||||
- **Hover**: Minimal state changes — consistency and calm over flashy interactions
|
||||
|
||||
### Inputs & Forms
|
||||
- Minimal form presence on the marketing site — Superhuman funnels users directly to signup
|
||||
- Dark-bordered inputs with Charcoal Ink borders and warm-toned placeholder text
|
||||
- Focus: Border emphasis increase, likely shifting from Parchment Border to Charcoal Ink
|
||||
|
||||
### Navigation
|
||||
- **Top nav**: Clean white background on content sections, transparent on hero gradient
|
||||
- **Nav links**: Super Sans VF at 16px, weight 460/600 for hierarchy
|
||||
- **CTA button**: Warm Cream (`#e9e5dd`) pill in the nav — subtle, not attention-grabbing
|
||||
- **Sticky behavior**: Nav remains fixed on scroll with background transition
|
||||
- **Mobile**: Collapses to hamburger menu with simplified layout
|
||||
|
||||
### Image Treatment
|
||||
- **Product screenshots**: Large, dominant product UI images showing the email interface — the product is the hero
|
||||
- **Lifestyle photography**: A single dramatic image (silhouette against purple/red gradient) in the hero area — cinematic and editorial
|
||||
- **Full-width presentation**: Screenshots span full container width with subtle shadow or no border
|
||||
- **Aspect ratios**: Wide landscape ratios (roughly 16:9) for product screenshots
|
||||
- **Color integration**: Screenshots are carefully color-graded to harmonize with the purple-to-white page flow
|
||||
|
||||
### Testimonial / Social Proof
|
||||
- "Your Superhuman suite" section with product feature grid
|
||||
- Feature descriptions paired with product screenshots — proof through demonstration rather than quotes
|
||||
- Clean grid layout with consistent card sizing
|
||||
|
||||
## 5. Layout Principles
|
||||
## Layout
|
||||
|
||||
### Spacing System
|
||||
- **Base unit**: 8px
|
||||
- **Scale**: 2px, 4px, 6px, 8px, 12px, 16px, 18px, 20px, 24px, 28px, 32px, 36px, 40px, 48px, 56px
|
||||
- **Section padding**: 48px–80px vertical between major sections
|
||||
- **Card padding**: 16px–32px internal spacing
|
||||
- **Component gaps**: 8px–16px between related elements
|
||||
- **Base unit**: 8px (with 2 / 4 / 12 sub-tokens for fine work).
|
||||
- **Tokens**: `{spacing.xxs}` 2px · `{spacing.xs}` 4px · `{spacing.sm}` 8px · `{spacing.md}` 12px · `{spacing.lg}` 16px · `{spacing.xl}` 24px · `{spacing.xxl}` 32px · `{spacing.huge}` 64px.
|
||||
- **Section padding**: 64–96px on most sections; closing teal band uses 96–128px for editorial weight.
|
||||
- **Card internal padding**: 32px on pricing cards; 24px on alternating feature rows.
|
||||
|
||||
### Grid & Container
|
||||
- **Max width**: ~1200px content container, centered
|
||||
- **Column patterns**: Full-width hero, centered single-column for key messaging, 2-3 column grid for feature cards
|
||||
- **Feature grid**: Even column distribution for "Your Superhuman suite" product showcase
|
||||
- Hero spans full viewport width with the violet-sky backdrop edge-to-edge; content centers in a ~960px column.
|
||||
- Body content centers in ~960–1100px.
|
||||
- Pricing collapses 3-up → 2-up → 1-up at 1024 / 768 breakpoints.
|
||||
|
||||
### Whitespace Philosophy
|
||||
- **Confident emptiness**: Generous whitespace between sections signals premium positioning — every element has room to breathe
|
||||
- **Product as content**: Large product screenshots fill space that lesser sites would fill with marketing copy
|
||||
- **Progressive density**: The hero is spacious and cinematic, content sections become denser with feature grids, then opens up again for CTAs
|
||||
The brand uses generous editorial whitespace on both polarities — dark hero and white body. Section gaps tend toward 96px; the teal closing band gets up to 128px of vertical air. The whitespace itself is part of the brand's "considered, slow-tempo" feel.
|
||||
|
||||
### Border Radius Scale
|
||||
- **8px**: Buttons, inline elements (`span`, `button`, `div`) — the universal small radius
|
||||
- **16px**: Cards, links, larger containers (`a`, card elements) — the universal large radius
|
||||
- Only two radii in the entire system — radical simplicity. No micro-rounding (2px), no pill shapes (50px+)
|
||||
|
||||
## 6. Depth & Elevation
|
||||
## Elevation & Depth
|
||||
|
||||
| Level | Treatment | Use |
|
||||
|-------|-----------|-----|
|
||||
| Level 0 (Flat) | No shadow, white background | Primary page canvas, most content surfaces |
|
||||
| Level 1 (Border) | `1px solid #dcd7d3` (Parchment Border) | Card containment, section dividers |
|
||||
| Level 2 (Dark Border) | `1px solid #292827` | Header elements, dark section separators |
|
||||
| Level 3 (Glow) | Subtle shadow (from 6 shadow definitions detected) | Product screenshot containers, elevated cards |
|
||||
| Level 4 (Hero Depth) | `rgba(255, 255, 255, 0.2)` transparent border | Elements on the dark purple gradient hero |
|
||||
|
||||
### Shadow Philosophy
|
||||
Superhuman's elevation system is remarkably restrained on the marketing site. Depth is primarily communicated through:
|
||||
- **Border containment**: Warm-toned borders (`#dcd7d3`) at 1px create gentle separation
|
||||
- **Color contrast**: The hero gradient creates massive depth through color shift rather than shadows
|
||||
- **Product screenshots**: Screenshots themselves create depth by showing a layered UI within the flat page
|
||||
- **Opacity layering**: Semi-transparent whites on the hero gradient create atmospheric depth layers
|
||||
|---|---|---|
|
||||
| 0 | Flat | Default surface |
|
||||
| 1 | `box-shadow: 0 1px 3px rgba(0,0,0,0.08)` | Subtle card lift |
|
||||
| 2 | `box-shadow: 0 8px 24px rgba(0,0,0,0.12)` | Floating panels, modals |
|
||||
| 3 | Atmospheric backdrop (violet-sky over indigo) | The hero's depth medium |
|
||||
|
||||
### Decorative Depth
|
||||
- **Hero gradient**: The `#1b1938` → white gradient transition is the primary depth device — a cinematic curtain effect
|
||||
- **Lavender accents**: `#cbb7fb` Lavender Glow elements float above the dark gradient, creating a stellar/atmospheric effect
|
||||
- **No glassmorphism**: Despite the translucent borders, there are no blur/frosted-glass effects
|
||||
- **Photography depth**: The hero silhouette image creates natural atmospheric depth without artificial CSS
|
||||
The hero's depth is the **violet-sky atmospheric backdrop** — a soft indigo-to-violet-to-sky-blue radial wash that sits behind the portrait subject. Implemented as a CSS radial gradient or large background image. Below the hero, depth is minimal — the white canvas is flat.
|
||||
|
||||
## 7. Do's and Don'ts
|
||||
## Shapes
|
||||
|
||||
### Border Radius Scale
|
||||
|
||||
| Token | Value | Use |
|
||||
|---|---|---|
|
||||
| `{rounded.xs}` | 4px | Hairline tags |
|
||||
| `{rounded.sm}` | 6px | Form inputs |
|
||||
| `{rounded.md}` | 8px | Buttons (the brand's signature button shape — rounded rectangle, never pill) |
|
||||
| `{rounded.lg}` | 12px | Pricing cards, feature cards |
|
||||
| `{rounded.xl}` | 16px | Modal dialogs, large feature cards |
|
||||
| `{rounded.full}` | 9999px | Pill tabs in feature row, hero CTA |
|
||||
|
||||
### Photography Geometry
|
||||
The hero uses **half-bleed portrait subjects** — a person photographed at twilight, looking off-frame, occupying the right half of the hero. The portrait extends edge-to-edge vertically and stops mid-canvas horizontally; type sits on the left side. Other photography is rare; product UI mockups handle most other illustrative needs.
|
||||
|
||||
## Components
|
||||
|
||||
### Buttons
|
||||
|
||||
**`button-primary-dark`** — the dominant rounded-rectangle CTA on white surfaces.
|
||||
- Background `{colors.primary}`, text `{colors.on-primary}`, type `{typography.button-md}`, padding `{spacing.md} {spacing.xl}` (12px 20px), rounded `{rounded.md}` 8px.
|
||||
- Pressed state `button-primary-dark-pressed` shifts to `{colors.primary-deep}`.
|
||||
|
||||
**`button-on-dark-pill`** — the hero CTA in pale violet pill shape.
|
||||
- Background `{colors.surface-violet-soft}`, text `{colors.primary}`, same typography, padding 12px 20px, rounded `{rounded.full}`. The pill shape only appears on the hero — body CTAs use the rounded rectangle.
|
||||
|
||||
**`button-secondary-outline`** — outline alternative on white.
|
||||
- Background `{colors.canvas}`, text `{colors.ink}`, 1px solid `{colors.hairline-dark}` border, same shape as `button-primary-dark`.
|
||||
|
||||
**`button-on-teal`** — CTA inside the closing teal band.
|
||||
- Background `{colors.canvas}`, text `{colors.surface-teal-deep}`, rounded-rectangle, same typography.
|
||||
|
||||
### Cards & Containers
|
||||
|
||||
**`card-feature-light`** — feature card on white.
|
||||
- Background `{colors.canvas}`, padding `{spacing.xxl}`, rounded `{rounded.lg}`, 1px `{colors.hairline}` border.
|
||||
|
||||
**`card-pricing`** — standard pricing tier card.
|
||||
- Background `{colors.canvas}`, padding `{spacing.xxl}`, rounded `{rounded.lg}`, 1px `{colors.hairline}` border.
|
||||
|
||||
**`card-pricing-featured`** — inverted indigo featured tier.
|
||||
- Background `{colors.primary}`, text `{colors.on-primary}`, otherwise identical to `card-pricing`.
|
||||
|
||||
**`card-teal-band`** — the closing CTA band on every page.
|
||||
- Background `{colors.surface-teal-deep}`, text `{colors.on-primary}`, padding `{spacing.huge}` 64px, rounded `{rounded.lg}` 12px (often radius-less in practice when full-bleed). Holds a single closing headline in `{typography.display-lg}` and a `button-on-teal`.
|
||||
|
||||
**`card-feature-row`** — alternating feature-row card on the body.
|
||||
- Background `{colors.canvas-soft}`, text `{colors.ink}`, padding `{spacing.xl}` 24px, rounded `{rounded.md}` 8px. Used in pairs/triplets to explain features below the hero.
|
||||
|
||||
### Inputs & Forms
|
||||
|
||||
**`text-input`** — standard form input.
|
||||
- Background `{colors.canvas}`, text `{colors.ink}`, type `{typography.body-md}`, padding `{spacing.sm}+ {spacing.md}` (10px 12px), rounded `{rounded.sm}` 6px, 1px `{colors.hairline}` border.
|
||||
|
||||
### Navigation
|
||||
|
||||
**`nav-bar-dark`** — top nav over the indigo hero.
|
||||
- Background `{colors.primary}`, text `{colors.on-primary}`, padding `{spacing.lg} {spacing.xl}`. Logo on the left, nav center, "Get Started" `button-on-dark-pill` on the right.
|
||||
|
||||
**`nav-bar-light`** — top nav on body / pricing pages.
|
||||
- Background `{colors.canvas}`, text `{colors.ink}`, otherwise same structure with `button-primary-dark` on the right.
|
||||
|
||||
### Pills, Tags, and Chips
|
||||
|
||||
**`pill-tab-light`** — feature-row tab selector.
|
||||
- Background `{colors.canvas}`, text `{colors.ink}`, type `{typography.button-cap}`, padding `{spacing.sm} {spacing.lg}`, rounded `{rounded.full}`. Used in the feature category picker (Mail / Channels / Code / AI / Calendar etc.) below the hero.
|
||||
|
||||
### Signature Components
|
||||
|
||||
**Half-Bleed Portrait Hero** — a person photographed at twilight, occupying the right half of the indigo hero with violet-sky atmospheric backdrop behind. Type and CTA sit on the left side. The portrait is the brand's recurring visual signature.
|
||||
|
||||
**Closing Teal Band** — every page closes with a `card-teal-band` containing a `{typography.display-lg}` closing headline and a single `button-on-teal`. The teal is the page's resolving chord.
|
||||
|
||||
**`link-on-light`** — inline links on body.
|
||||
- Text `{colors.ink}` rendered in `{typography.body-md}` with persistent underline.
|
||||
|
||||
**`footer-light`** — site-wide footer.
|
||||
- Background `{colors.canvas}`, text `{colors.ink-mute}`, type `{typography.caption}`, padding `{spacing.huge} {spacing.xl}` (64px 24px). Holds 4 columns of link groups, social icons, and a small legal/copyright row.
|
||||
|
||||
## Do's and Don'ts
|
||||
|
||||
### Do
|
||||
- Use Super Sans VF at weight 460 as the default — it's slightly heavier than regular, which is the brand's typographic signature
|
||||
- Keep display headlines at 0.96 line-height — the compression is intentional and powerful
|
||||
- Use Warm Cream (`#e9e5dd`) for primary buttons — not white, not gray, specifically warm cream
|
||||
- Limit border-radius to 8px (small) and 16px (large) — the binary radius system is deliberate
|
||||
- Apply negative letter-spacing on headlines only (-0.63px to -1.32px) — body text stays at 0px
|
||||
- Use Lavender Glow (`#cbb7fb`) as the only accent color — it's the sole color departure from the neutral palette
|
||||
- Let product screenshots be the primary visual content — the UI sells itself
|
||||
- Maintain the dramatic hero gradient as a singular gesture — the rest of the page is white
|
||||
- Pair every hero with the violet-sky atmospheric backdrop and a half-bleed portrait subject when possible.
|
||||
- Render display tiers at sub-default weights (460 / 540) — the warmth is the typographic signature.
|
||||
- Use rounded-rectangle CTAs at 8px radius everywhere except the hero (where pill-shaped is the rule).
|
||||
- Close every marketing page with a deep-teal CTA band.
|
||||
- Use warm dark grey `{colors.ink}` for body text — never pure black.
|
||||
- Apply tight 0.96 line-height on display sizes; the editorial compression is the brand.
|
||||
|
||||
### Don't
|
||||
- Use conventional font weights (400, 500, 600) — Superhuman's 460 and 540 are deliberately between standard stops
|
||||
- Add bright or saturated CTA colors (blue, green, red) — buttons are intentionally muted in Warm Cream or Charcoal
|
||||
- Introduce additional accent colors beyond Lavender Glow — the palette is deliberately restrained to one accent
|
||||
- Apply shadows generously — depth comes from borders, color contrast, and photography, not box-shadows
|
||||
- Use tight line-height on body text — display is compressed (0.96) but body is generous (1.50)
|
||||
- Add decorative elements, icons, or illustrations — Superhuman relies on product UI and minimal typography
|
||||
- Create pill-shaped buttons — the system uses 8px radius, not rounded pills
|
||||
- Use pure black (`#000000`) for text — Charcoal Ink (`#292827`) is warmer and softer
|
||||
- Don't use pill-shaped buttons in the body of the page; the pill is hero-only.
|
||||
- Don't bump display weight above 540 unless using `body-strong` (700) for emphasized inline body.
|
||||
- Don't render body text in pure black — the warm grey `#292827` is part of the brand.
|
||||
- Don't omit the closing teal band — every marketing page closes with it.
|
||||
- Don't introduce additional accent colors beyond indigo, violet-soft, teal, and the off-warm-greys.
|
||||
|
||||
## 8. Responsive Behavior
|
||||
## Responsive Behavior
|
||||
|
||||
### Breakpoints
|
||||
|
||||
| Name | Width | Key Changes |
|
||||
|------|-------|-------------|
|
||||
| Mobile | <768px | Single column, hero text reduces to ~36px, stacked feature cards, hamburger nav |
|
||||
| Tablet | 768px–1024px | 2-column feature grid begins, hero text ~48px, nav partially visible |
|
||||
| Desktop | 1024px–1440px | Full layout, 64px hero display, multi-column feature grid, full nav |
|
||||
| Large Desktop | >1440px | Max-width container centered, generous side margins |
|
||||
|---|---|---|
|
||||
| Wide | ≥ 1440px | Half-bleed portrait at full scale; teal band 128px tall |
|
||||
| Desktop | 1024–1440px | Default content max-width; pricing 3-up |
|
||||
| Tablet | 768–1023px | Pricing 2-up; portrait crops tighter |
|
||||
| Mobile | < 768px | Pricing 1-up; hamburger nav; display drops 64 → 36px |
|
||||
|
||||
### Touch Targets
|
||||
- Buttons: 8px radius with comfortable padding — meets touch target guidelines
|
||||
- Nav links: 16px text with adequate surrounding padding
|
||||
- Mobile CTAs: Full-width Warm Cream buttons for easy thumb reach
|
||||
- Links: Underline decoration provides clear tap affordance
|
||||
- Buttons hit ≥ 44×44px on mobile via 12px vertical padding × 16px line-height. WCAG AAA.
|
||||
- Form fields stay at the 44px minimum height.
|
||||
|
||||
### Collapsing Strategy
|
||||
- **Navigation**: Full horizontal nav → hamburger menu on mobile
|
||||
- **Hero text**: 64px display → 48px → ~36px across breakpoints
|
||||
- **Feature grid**: Multi-column product showcase → 2-column → single stacked column
|
||||
- **Product screenshots**: Scale within containers, maintaining landscape ratios
|
||||
- **Section spacing**: Reduces proportionally — generous desktop margins compress on mobile
|
||||
- Display tiers stair-step 64 → 48 → 36 → 28 → 22px.
|
||||
- Half-bleed portrait crops to head-and-shoulders on mobile; atmospheric backdrop simplifies.
|
||||
- Pricing tiers stair-step 3-up → 2-up → 1-up.
|
||||
- Top nav collapses to hamburger below 768px.
|
||||
- Closing teal band reduces vertical padding from 128 → 64px on mobile.
|
||||
|
||||
### Image Behavior
|
||||
- Product screenshots scale responsively while maintaining aspect ratios
|
||||
- Hero silhouette image crops or scales — maintains dramatic composition
|
||||
- No art direction changes — same compositions across all breakpoints
|
||||
- Lazy loading likely on below-fold product screenshots
|
||||
Hero portrait uses `srcset` with desktop / mobile crops — desktop favors the full half-bleed composition; mobile crops to head-and-shoulders.
|
||||
|
||||
## 9. Agent Prompt Guide
|
||||
## Iteration Guide
|
||||
|
||||
### Quick Color Reference
|
||||
- Hero Background: Mysteria Purple (`#1b1938`)
|
||||
- Primary Text (light bg): Charcoal Ink (`#292827`)
|
||||
- Primary Text (dark bg): Translucent White (`color(srgb 1 1 1 / 0.95)` — use `rgba(255,255,255,0.95)`)
|
||||
- Accent: Lavender Glow (`#cbb7fb`)
|
||||
- Button Background: Warm Cream (`#e9e5dd`)
|
||||
- Border: Parchment Border (`#dcd7d3`)
|
||||
- Link: Amethyst Link (`#714cb6`)
|
||||
- Page Background: Pure White (`#ffffff`)
|
||||
|
||||
### Example Component Prompts
|
||||
- "Create a hero section with deep purple gradient background (#1b1938), 64px Super Sans heading at weight 540, line-height 0.96, white text at 95% opacity, and a warm cream button (#e9e5dd, 8px radius, #292827 text)"
|
||||
- "Design a feature card with white background, 1px #dcd7d3 border, 16px radius, 20px Super Sans heading at weight 460, and 16px body text at weight 460 with 1.50 line-height in #292827"
|
||||
- "Build a navigation bar with white background, Super Sans links at 16px weight 460, a warm cream CTA button (#e9e5dd, 8px radius), sticky positioning"
|
||||
- "Create a product showcase section with centered 48px heading (weight 460, -1.32px letter-spacing, #292827), a large product screenshot below, on white background"
|
||||
- "Design an accent badge using Lavender Glow (#cbb7fb) background, 8px radius, 12px bold text (weight 700), for category labels"
|
||||
|
||||
### Iteration Guide
|
||||
When refining existing screens generated with this design system:
|
||||
1. Verify font weight is 460 (not 400 or 500) for body and 540 for display — the non-standard weights are essential
|
||||
2. Check that display line-height is 0.96 — if headlines look too spaced, they're wrong
|
||||
3. Ensure buttons use Warm Cream (#e9e5dd) not pure white or gray — the warmth is subtle but critical
|
||||
4. Confirm the only accent color is Lavender Glow (#cbb7fb) — no other hues should appear
|
||||
5. The overall tone should feel like a luxury product presentation — minimal, confident, with one dramatic color gesture in the hero
|
||||
1. Focus on ONE component at a time.
|
||||
2. Reference component names and tokens directly.
|
||||
3. Run `npx @google/design.md lint DESIGN.md` after edits.
|
||||
4. Default body to `{typography.body-md}`; reserve `{typography.body-lg}` for marketing leads.
|
||||
5. Keep the three-canvas rhythm (indigo / white / teal) — adding a fourth canvas color breaks the system.
|
||||
6. The closing teal band is non-negotiable — every marketing page resolves there.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user