mirror of
https://github.com/VoltAgent/awesome-design-md.git
synced 2026-05-14 13:06:57 +08:00
774 lines
35 KiB
Markdown
774 lines
35 KiB
Markdown
---
|
||
version: alpha
|
||
name: Mistral AI
|
||
description: Mistral AI brands itself with a singular signature — atmospheric sunset gradients (mustard, orange, deep red) layered over photography of mountains, plus a horizontal "sunset stripe" bar that closes every page. The system pairs warm cream-yellow surfaces ({colors.cream}) with a saturated orange primary CTA ({colors.primary}) and uses an elegant near-serif voice for hero displays. Coverage spans homepage (Frontier AI hero), Le Studio product page, Coding solutions, news article surfaces, contact form, and services tier page — all anchored by the signature gradient closing band.
|
||
|
||
colors:
|
||
primary: "#fa520f"
|
||
primary-deep: "#cc3a05"
|
||
on-primary: "#ffffff"
|
||
sunshine-300: "#ffd06a"
|
||
sunshine-500: "#ffb83e"
|
||
sunshine-700: "#ffa110"
|
||
sunshine-800: "#ff8105"
|
||
sunshine-900: "#ff8a00"
|
||
yellow-saturated: "#ffd900"
|
||
cream: "#fff8e0"
|
||
cream-light: "#fffaeb"
|
||
cream-deeper: "#fff0c2"
|
||
beige-deep: "#e6d5a8"
|
||
block-5: "#ffe295"
|
||
block-6: "#ffd900"
|
||
block-7: "#ff8105"
|
||
ink: "#1f1f1f"
|
||
ink-tint: "#3d3d3d"
|
||
charcoal: "#2c2c2c"
|
||
slate: "#4a4a4a"
|
||
steel: "#6a6a6a"
|
||
stone: "#8a8a8a"
|
||
muted: "#a8a8a8"
|
||
hairline: "#e5e5e5"
|
||
hairline-soft: "#ededed"
|
||
hairline-strong: "#c7c7c7"
|
||
canvas: "#ffffff"
|
||
surface: "#fafafa"
|
||
surface-cream: "#fff8e0"
|
||
surface-cream-soft: "#fffaeb"
|
||
surface-code: "#1c1c1e"
|
||
on-dark: "#ffffff"
|
||
on-dark-muted: "#a8a8a8"
|
||
on-cream: "#1f1f1f"
|
||
footer-cream: "#fff8e0"
|
||
link: "#fa520f"
|
||
|
||
typography:
|
||
hero-display:
|
||
fontFamily: PP Editorial Old
|
||
fontSize: 84px
|
||
fontWeight: 400
|
||
lineHeight: 1.05
|
||
letterSpacing: -1.5px
|
||
display-lg:
|
||
fontFamily: PP Editorial Old
|
||
fontSize: 64px
|
||
fontWeight: 400
|
||
lineHeight: 1.10
|
||
letterSpacing: -1px
|
||
heading-1:
|
||
fontFamily: PP Editorial Old
|
||
fontSize: 52px
|
||
fontWeight: 400
|
||
lineHeight: 1.15
|
||
letterSpacing: -0.5px
|
||
heading-2:
|
||
fontFamily: Inter
|
||
fontSize: 36px
|
||
fontWeight: 500
|
||
lineHeight: 1.20
|
||
letterSpacing: -0.5px
|
||
heading-3:
|
||
fontFamily: Inter
|
||
fontSize: 28px
|
||
fontWeight: 500
|
||
lineHeight: 1.25
|
||
heading-4:
|
||
fontFamily: Inter
|
||
fontSize: 22px
|
||
fontWeight: 500
|
||
lineHeight: 1.30
|
||
heading-5:
|
||
fontFamily: Inter
|
||
fontSize: 18px
|
||
fontWeight: 500
|
||
lineHeight: 1.40
|
||
subtitle:
|
||
fontFamily: Inter
|
||
fontSize: 18px
|
||
fontWeight: 400
|
||
lineHeight: 1.50
|
||
body-md:
|
||
fontFamily: Inter
|
||
fontSize: 16px
|
||
fontWeight: 400
|
||
lineHeight: 1.55
|
||
body-md-medium:
|
||
fontFamily: Inter
|
||
fontSize: 16px
|
||
fontWeight: 500
|
||
lineHeight: 1.55
|
||
body-sm:
|
||
fontFamily: Inter
|
||
fontSize: 14px
|
||
fontWeight: 400
|
||
lineHeight: 1.50
|
||
body-sm-medium:
|
||
fontFamily: Inter
|
||
fontSize: 14px
|
||
fontWeight: 500
|
||
lineHeight: 1.50
|
||
caption:
|
||
fontFamily: Inter
|
||
fontSize: 13px
|
||
fontWeight: 400
|
||
lineHeight: 1.40
|
||
caption-bold:
|
||
fontFamily: Inter
|
||
fontSize: 13px
|
||
fontWeight: 600
|
||
lineHeight: 1.40
|
||
micro:
|
||
fontFamily: Inter
|
||
fontSize: 12px
|
||
fontWeight: 500
|
||
lineHeight: 1.40
|
||
micro-uppercase:
|
||
fontFamily: Inter
|
||
fontSize: 11px
|
||
fontWeight: 600
|
||
lineHeight: 1.40
|
||
letterSpacing: 1px
|
||
button-md:
|
||
fontFamily: Inter
|
||
fontSize: 14px
|
||
fontWeight: 500
|
||
lineHeight: 1.30
|
||
stat-display:
|
||
fontFamily: PP Editorial Old
|
||
fontSize: 56px
|
||
fontWeight: 400
|
||
lineHeight: 1.10
|
||
letterSpacing: -1px
|
||
code-md:
|
||
fontFamily: JetBrains Mono
|
||
fontSize: 14px
|
||
fontWeight: 400
|
||
lineHeight: 1.50
|
||
|
||
rounded:
|
||
xs: 4px
|
||
sm: 6px
|
||
md: 8px
|
||
lg: 12px
|
||
xl: 16px
|
||
xxl: 20px
|
||
full: 9999px
|
||
|
||
spacing:
|
||
xxs: 4px
|
||
xs: 8px
|
||
sm: 12px
|
||
md: 16px
|
||
lg: 20px
|
||
xl: 24px
|
||
xxl: 32px
|
||
xxxl: 40px
|
||
section-sm: 48px
|
||
section: 64px
|
||
section-lg: 96px
|
||
hero: 120px
|
||
|
||
components:
|
||
button-primary:
|
||
backgroundColor: "{colors.primary}"
|
||
textColor: "{colors.on-primary}"
|
||
typography: "{typography.button-md}"
|
||
rounded: "{rounded.md}"
|
||
padding: "10px 20px"
|
||
button-primary-pressed:
|
||
backgroundColor: "{colors.primary-deep}"
|
||
textColor: "{colors.on-primary}"
|
||
button-primary-disabled:
|
||
backgroundColor: "{colors.hairline}"
|
||
textColor: "{colors.muted}"
|
||
button-cream:
|
||
backgroundColor: "{colors.cream}"
|
||
textColor: "{colors.ink}"
|
||
typography: "{typography.button-md}"
|
||
rounded: "{rounded.md}"
|
||
padding: "10px 20px"
|
||
border: "1px solid {colors.beige-deep}"
|
||
button-dark:
|
||
backgroundColor: "{colors.ink}"
|
||
textColor: "{colors.on-dark}"
|
||
typography: "{typography.button-md}"
|
||
rounded: "{rounded.md}"
|
||
padding: "10px 20px"
|
||
button-secondary:
|
||
backgroundColor: "transparent"
|
||
textColor: "{colors.ink}"
|
||
typography: "{typography.button-md}"
|
||
rounded: "{rounded.md}"
|
||
padding: "10px 20px"
|
||
border: "1px solid {colors.hairline-strong}"
|
||
button-on-cream:
|
||
backgroundColor: "{colors.canvas}"
|
||
textColor: "{colors.ink}"
|
||
typography: "{typography.button-md}"
|
||
rounded: "{rounded.md}"
|
||
padding: "10px 20px"
|
||
border: "1px solid {colors.beige-deep}"
|
||
button-link:
|
||
backgroundColor: "transparent"
|
||
textColor: "{colors.primary}"
|
||
typography: "{typography.body-sm-medium}"
|
||
padding: "0"
|
||
card-base:
|
||
backgroundColor: "{colors.canvas}"
|
||
rounded: "{rounded.lg}"
|
||
padding: "{spacing.xl}"
|
||
border: "1px solid {colors.hairline-soft}"
|
||
card-feature:
|
||
backgroundColor: "{colors.canvas}"
|
||
rounded: "{rounded.lg}"
|
||
padding: "{spacing.xxl}"
|
||
border: "1px solid {colors.hairline-soft}"
|
||
card-cream:
|
||
backgroundColor: "{colors.cream}"
|
||
textColor: "{colors.ink}"
|
||
rounded: "{rounded.lg}"
|
||
padding: "{spacing.xxl}"
|
||
border: "1px solid {colors.beige-deep}"
|
||
card-cream-soft:
|
||
backgroundColor: "{colors.surface-cream-soft}"
|
||
textColor: "{colors.ink}"
|
||
rounded: "{rounded.lg}"
|
||
padding: "{spacing.xxl}"
|
||
card-feature-product:
|
||
backgroundColor: "{colors.canvas}"
|
||
rounded: "{rounded.lg}"
|
||
padding: "{spacing.xxl}"
|
||
border: "1px solid {colors.hairline-soft}"
|
||
shadow: "rgba(0, 0, 0, 0.04) 0px 4px 12px"
|
||
card-photographic:
|
||
backgroundColor: "{colors.surface-code}"
|
||
textColor: "{colors.on-dark}"
|
||
rounded: "{rounded.lg}"
|
||
padding: "0"
|
||
pricing-card:
|
||
backgroundColor: "{colors.canvas}"
|
||
rounded: "{rounded.lg}"
|
||
padding: "{spacing.xxl}"
|
||
border: "1px solid {colors.hairline-soft}"
|
||
pricing-card-featured:
|
||
backgroundColor: "{colors.cream}"
|
||
rounded: "{rounded.lg}"
|
||
padding: "{spacing.xxl}"
|
||
border: "2px solid {colors.primary}"
|
||
text-input:
|
||
backgroundColor: "{colors.canvas}"
|
||
textColor: "{colors.ink}"
|
||
typography: "{typography.body-md}"
|
||
rounded: "{rounded.md}"
|
||
padding: "{spacing.sm} {spacing.md}"
|
||
border: "1px solid {colors.hairline-strong}"
|
||
height: 44px
|
||
text-input-focused:
|
||
backgroundColor: "{colors.canvas}"
|
||
textColor: "{colors.ink}"
|
||
border: "2px solid {colors.primary}"
|
||
text-area:
|
||
backgroundColor: "{colors.canvas}"
|
||
textColor: "{colors.ink}"
|
||
typography: "{typography.body-md}"
|
||
rounded: "{rounded.md}"
|
||
padding: "{spacing.md}"
|
||
border: "1px solid {colors.hairline-strong}"
|
||
contact-form-panel:
|
||
backgroundColor: "{colors.cream}"
|
||
rounded: "{rounded.lg}"
|
||
padding: "{spacing.xxl}"
|
||
border: "1px solid {colors.beige-deep}"
|
||
pill-tab:
|
||
backgroundColor: "{colors.canvas}"
|
||
textColor: "{colors.steel}"
|
||
typography: "{typography.body-sm-medium}"
|
||
rounded: "{rounded.full}"
|
||
padding: "{spacing.xs} {spacing.md}"
|
||
border: "1px solid {colors.hairline}"
|
||
pill-tab-active:
|
||
backgroundColor: "{colors.ink}"
|
||
textColor: "{colors.on-dark}"
|
||
rounded: "{rounded.full}"
|
||
border: "1px solid {colors.ink}"
|
||
segmented-tab:
|
||
backgroundColor: "transparent"
|
||
textColor: "{colors.steel}"
|
||
typography: "{typography.body-sm-medium}"
|
||
padding: "{spacing.sm} {spacing.md}"
|
||
border: "0 0 2px transparent solid"
|
||
segmented-tab-active:
|
||
backgroundColor: "transparent"
|
||
textColor: "{colors.primary}"
|
||
typography: "{typography.body-sm-medium}"
|
||
border: "0 0 2px {colors.primary} solid"
|
||
badge-orange:
|
||
backgroundColor: "{colors.primary}"
|
||
textColor: "{colors.on-primary}"
|
||
typography: "{typography.caption-bold}"
|
||
rounded: "{rounded.full}"
|
||
padding: "4px 10px"
|
||
badge-cream:
|
||
backgroundColor: "{colors.cream-deeper}"
|
||
textColor: "{colors.ink}"
|
||
typography: "{typography.caption-bold}"
|
||
rounded: "{rounded.full}"
|
||
padding: "4px 10px"
|
||
badge-dark:
|
||
backgroundColor: "{colors.ink}"
|
||
textColor: "{colors.on-dark}"
|
||
typography: "{typography.caption-bold}"
|
||
rounded: "{rounded.full}"
|
||
padding: "4px 10px"
|
||
promo-banner:
|
||
backgroundColor: "{colors.ink}"
|
||
textColor: "{colors.on-dark}"
|
||
typography: "{typography.body-sm-medium}"
|
||
padding: "{spacing.sm} {spacing.md}"
|
||
hero-band-sunset:
|
||
backgroundColor: "{colors.sunshine-700}"
|
||
textColor: "{colors.ink}"
|
||
rounded: "0"
|
||
padding: "{spacing.hero}"
|
||
sunset-stripe-band:
|
||
backgroundColor: "{colors.primary}"
|
||
textColor: "{colors.on-primary}"
|
||
rounded: "0"
|
||
padding: "{spacing.lg} 0"
|
||
cta-banner-cream:
|
||
backgroundColor: "{colors.cream}"
|
||
textColor: "{colors.ink}"
|
||
rounded: "{rounded.lg}"
|
||
padding: "{spacing.section}"
|
||
code-block:
|
||
backgroundColor: "{colors.surface-code}"
|
||
textColor: "{colors.on-dark}"
|
||
typography: "{typography.code-md}"
|
||
rounded: "{rounded.md}"
|
||
padding: "{spacing.md}"
|
||
code-block-header:
|
||
backgroundColor: "{colors.surface-code}"
|
||
textColor: "{colors.on-dark-muted}"
|
||
typography: "{typography.caption}"
|
||
padding: "{spacing.xs} {spacing.md}"
|
||
border: "0 0 1px rgba(255,255,255,0.08) solid"
|
||
feature-icon-tile:
|
||
backgroundColor: "{colors.cream}"
|
||
rounded: "{rounded.md}"
|
||
padding: "{spacing.md}"
|
||
border: "1px solid {colors.beige-deep}"
|
||
industry-tile:
|
||
backgroundColor: "{colors.canvas}"
|
||
rounded: "{rounded.lg}"
|
||
padding: "{spacing.xl}"
|
||
border: "1px solid {colors.hairline-soft}"
|
||
stat-cell:
|
||
backgroundColor: "transparent"
|
||
textColor: "{colors.ink}"
|
||
typography: "{typography.stat-display}"
|
||
padding: "{spacing.lg}"
|
||
customer-testimonial-card:
|
||
backgroundColor: "{colors.canvas}"
|
||
rounded: "{rounded.lg}"
|
||
padding: "{spacing.xxl}"
|
||
border: "1px solid {colors.hairline-soft}"
|
||
logo-wall-item:
|
||
backgroundColor: "transparent"
|
||
textColor: "{colors.steel}"
|
||
typography: "{typography.body-md-medium}"
|
||
padding: "{spacing.lg}"
|
||
faq-accordion-item:
|
||
backgroundColor: "{colors.canvas}"
|
||
rounded: "{rounded.md}"
|
||
padding: "{spacing.xl}"
|
||
border: "0 0 1px {colors.hairline} solid"
|
||
footer-region:
|
||
backgroundColor: "{colors.footer-cream}"
|
||
textColor: "{colors.ink}"
|
||
typography: "{typography.body-sm}"
|
||
padding: "{spacing.section} {spacing.xxl}"
|
||
footer-link:
|
||
backgroundColor: "transparent"
|
||
textColor: "{colors.primary}"
|
||
typography: "{typography.body-sm}"
|
||
padding: "{spacing.xxs} 0"
|
||
app-store-badge:
|
||
backgroundColor: "{colors.ink}"
|
||
textColor: "{colors.on-dark}"
|
||
typography: "{typography.caption-bold}"
|
||
rounded: "{rounded.md}"
|
||
padding: "{spacing.sm} {spacing.md}"
|
||
---
|
||
|
||
## Overview
|
||
|
||
Mistral AI carries itself with a singular, almost cinematographic visual signature — the homepage opens with "Frontier AI. In your hands." rendered in elegant near-serif display type over a photographic mountain landscape bathed in mustard-orange sunset light. Below the hero, every page closes with the same recognizable element: a horizontal "sunset stripe" gradient band running red→orange→yellow→cream that wraps the foot of the page just above the footer. This stripe is THE brand recognizer — it appears on the homepage, products/studio, solutions/coding, news articles, contact form, and services tier page without exception.
|
||
|
||
The system pairs PP Editorial Old (a near-serif elegant display face) for hero displays with Inter for everything else (body, headings, UI). Cream-yellow surfaces ({colors.cream}, {colors.surface-cream-soft}) anchor form panels and feature cards; saturated orange ({colors.primary}) carries primary CTAs; the deep mountain photography on the homepage and the dark code mockups inside Le Studio create photographic depth. Cards are rectangular with `{rounded.lg}` (12px) corners — distinctly less playful than Miro's or Mintlify's pill-buttons-everywhere approach. Buttons are also `{rounded.md}` (8px), not pills — Mistral's geometry is more sober and editorial than its peers.
|
||
|
||
**Key Characteristics:**
|
||
- Atmospheric mountain-sunset hero photography (orange-red-yellow gradient sky)
|
||
- Horizontal "sunset stripe" band ({colors.primary} → {colors.sunshine-700} → {colors.yellow-saturated} → {colors.cream}) at every page bottom
|
||
- Cream-yellow surfaces ({colors.cream}, {colors.cream-soft}) for form panels and feature cards
|
||
- PP Editorial Old (or similar near-serif) for hero displays; Inter for everything else
|
||
- `{rounded.md}` (8px) buttons and `{rounded.lg}` (12px) cards — less playful, more editorial geometry
|
||
- Saturated orange primary CTA ({colors.primary}) carries every action call
|
||
|
||
## Colors
|
||
|
||
> Source pages: mistral.ai/ (homepage), /products/studio (Le Studio product), /solutions/coding (coding solution), /news/vibe-remote-agents-mistral-medium-3-5 (news), /contact (contact form), /services (services tiers). Token coverage was identical across all six pages.
|
||
|
||
### Brand & Accent
|
||
- **Mistral Orange** ({colors.primary}): Primary CTA color, brand orange
|
||
- **Orange Deep** ({colors.primary-deep}): Pressed-state and emphasis variant
|
||
- **Sunshine 300** ({colors.sunshine-300}): Atmospheric light orange-yellow
|
||
- **Sunshine 500** ({colors.sunshine-500}): Mid-spectrum sunset orange
|
||
- **Sunshine 700** ({colors.sunshine-700}): Saturated mid sunset gradient stop
|
||
- **Sunshine 800** ({colors.sunshine-800}): Deep sunset gradient stop
|
||
- **Sunshine 900** ({colors.sunshine-900}): Deepest sunset orange
|
||
- **Yellow Saturated** ({colors.yellow-saturated}): Pure brand yellow used in the sunset stripe gradient
|
||
- **Block 5/6/7** ({colors.block-5}, {colors.block-6}, {colors.block-7}): Spectrum stops along the sunset gradient (light-yellow → mid-yellow → deep-orange)
|
||
|
||
### Cream / Neutral Warm
|
||
- **Cream** ({colors.cream}): Warm yellow-cream surface for form panels, feature cards, footer
|
||
- **Cream Soft** ({colors.cream-soft}): Lighter cream variant
|
||
- **Cream Deeper** ({colors.cream-deeper}): More-saturated cream for badge/tag chips
|
||
- **Beige Deep** ({colors.beige-deep}): Cream surface 1px border color
|
||
|
||
### Surface
|
||
- **Canvas White** ({colors.canvas}): Page background and card surface
|
||
- **Surface** ({colors.surface}): Subtle quieter background
|
||
- **Surface Cream** ({colors.surface-cream}): Cream-yellow tinted surface
|
||
- **Surface Code** ({colors.surface-code}): Dark code-block / IDE mockup surface
|
||
- **Hairline** ({colors.hairline}): 1px borders
|
||
- **Hairline Soft** ({colors.hairline-soft}): Quieter dividers
|
||
- **Hairline Strong** ({colors.hairline-strong}): Stronger 1px border for inputs
|
||
|
||
### Text
|
||
- **Ink** ({colors.ink}): Primary headlines and body text
|
||
- **Ink Tint** ({colors.ink-tint}): Slightly softer black for hero overlay text
|
||
- **Charcoal** ({colors.charcoal}): Body emphasis
|
||
- **Slate** ({colors.slate}): Secondary text
|
||
- **Steel** ({colors.steel}): Tertiary text, captions
|
||
- **Stone** ({colors.stone}): Muted labels
|
||
- **Muted** ({colors.muted}): Disabled, placeholders
|
||
- **On Dark** ({colors.on-dark}): White text on dark surfaces
|
||
- **On Dark Muted** ({colors.on-dark-muted}): Reduced-opacity white
|
||
- **On Cream** ({colors.on-cream}): Ink text on cream surfaces
|
||
|
||
### Semantic
|
||
- **Link** ({colors.link}): Inline link color (matches primary orange)
|
||
|
||
## Typography
|
||
|
||
### Font Family
|
||
**PP Editorial Old** (display): Mistral's signature near-serif elegant display typeface used for hero displays, large numbers, and editorial section openers. Carries a slightly classical, intelligent character that contrasts the contemporary product positioning. Fallbacks: 'Times New Roman', Georgia, serif.
|
||
|
||
**Inter** (UI prose): Variable typeface for body, navigation, buttons, labels, captions. Fallbacks: ui-sans-serif, system-ui, -apple-system, sans-serif.
|
||
|
||
**JetBrains Mono** (code): Monospace for code blocks and IDE mockups. Fallbacks: 'SF Mono', Menlo, Consolas, monospace.
|
||
|
||
### Hierarchy
|
||
|
||
| Token | Size | Weight | Line Height | Letter Spacing | Family | Use |
|
||
|---|---|---|---|---|---|---|
|
||
| `{typography.hero-display}` | 84px | 400 | 1.05 | -1.5px | PP Editorial Old | Hero ("Frontier AI. In your hands.") |
|
||
| `{typography.display-lg}` | 64px | 400 | 1.10 | -1px | PP Editorial Old | Section openers |
|
||
| `{typography.heading-1}` | 52px | 400 | 1.15 | -0.5px | PP Editorial Old | Page headlines ("Get in touch with the team.") |
|
||
| `{typography.stat-display}` | 56px | 400 | 1.10 | -1px | PP Editorial Old | Stat callouts ("75%") |
|
||
| `{typography.heading-2}` | 36px | 500 | 1.20 | -0.5px | Inter | Subsection headlines |
|
||
| `{typography.heading-3}` | 28px | 500 | 1.25 | 0 | Inter | Card titles |
|
||
| `{typography.heading-4}` | 22px | 500 | 1.30 | 0 | Inter | Feature tile titles |
|
||
| `{typography.heading-5}` | 18px | 500 | 1.40 | 0 | Inter | Smaller card titles |
|
||
| `{typography.subtitle}` | 18px | 400 | 1.50 | 0 | Inter | Hero subtitle, lead body |
|
||
| `{typography.body-md}` | 16px | 400 | 1.55 | 0 | Inter | Primary body text |
|
||
| `{typography.body-md-medium}` | 16px | 500 | 1.55 | 0 | Inter | Body emphasis |
|
||
| `{typography.body-sm}` | 14px | 400 | 1.50 | 0 | Inter | Secondary body |
|
||
| `{typography.body-sm-medium}` | 14px | 500 | 1.50 | 0 | Inter | Active sidebar, button labels |
|
||
| `{typography.caption}` | 13px | 400 | 1.40 | 0 | Inter | Helper text |
|
||
| `{typography.caption-bold}` | 13px | 600 | 1.40 | 0 | Inter | Badge labels |
|
||
| `{typography.micro}` | 12px | 500 | 1.40 | 0 | Inter | Footer microcopy |
|
||
| `{typography.micro-uppercase}` | 11px | 600 | 1.40 | 1px | Inter | Section eyebrows |
|
||
| `{typography.button-md}` | 14px | 500 | 1.30 | 0 | Inter | Button labels |
|
||
| `{typography.code-md}` | 14px | 400 | 1.50 | 0 | JetBrains Mono | Code blocks |
|
||
|
||
### Principles
|
||
- **Editorial / sans pairing** — PP Editorial Old (near-serif, classical) anchors hero displays; Inter (geometric sans) carries everything else. The contrast IS the brand voice.
|
||
- **Generous body leading** (1.55 on body-md) for editorial readability across long-form pages
|
||
- **Tight hero leading** (1.05 on 84px display) creates magazine-grade typographic display
|
||
- **Negative letter-spacing** progresses with size — display sizes use -1.5px to -0.5px; smaller heads relax to 0
|
||
- **Stat-display token** (56px Editorial) for marketing stat callouts ("75% / 80% / 100%")
|
||
|
||
## Layout
|
||
|
||
### Spacing System
|
||
- **Base unit**: 4px (8px primary increment)
|
||
- **Tokens**: `{spacing.xxs}` (4px) · `{spacing.xs}` (8px) · `{spacing.sm}` (12px) · `{spacing.md}` (16px) · `{spacing.lg}` (20px) · `{spacing.xl}` (24px) · `{spacing.xxl}` (32px) · `{spacing.xxxl}` (40px) · `{spacing.section-sm}` (48px) · `{spacing.section}` (64px) · `{spacing.section-lg}` (96px) · `{spacing.hero}` (120px)
|
||
- **Section rhythm**: Marketing pages use `{spacing.section-lg}` (96px); content pages tighten to `{spacing.section}` (64px)
|
||
- **Card internal padding**: `{spacing.xl}` (24px) for compact cards; `{spacing.xxl}` (32px) for feature panels and form panels
|
||
|
||
### Grid & Container
|
||
- Marketing pages use 1280px max-width with 32px gutters
|
||
- Hero band uses 2-column split (text left, sunset photography right) on desktop
|
||
- Le Studio product page uses 3-up feature grid below the hero
|
||
- Contact page uses 1-column layout with cream form panel centered (~520px max-width)
|
||
- Services page uses 4-tier card layout with cream feature panel separator strip
|
||
|
||
### Whitespace Philosophy
|
||
Marketing surfaces give content generous breathing room — `{spacing.hero}` (120px) hero padding lets the mountain-sunset photography fill the frame. Form pages tighten dramatically: contact form panel uses `{spacing.xxl}` (32px) internal padding, fields stack on `{spacing.md}` (16px) gap.
|
||
|
||
## Elevation & Depth
|
||
|
||
The system runs predominantly flat with strategic atmospheric depth from photography.
|
||
|
||
| Level | Treatment | Use |
|
||
|---|---|---|
|
||
| 0 (flat) | No shadow; `{colors.hairline-soft}` border | Default cards, table rows, form inputs |
|
||
| 1 (subtle) | `rgba(0, 0, 0, 0.04) 0px 1px 2px 0px` | Hover-elevated tiles |
|
||
| 2 (card) | `rgba(0, 0, 0, 0.04) 0px 4px 12px 0px` | Standard feature cards |
|
||
| 3 (mockup) | `rgba(0, 0, 0, 0.08) 0px 12px 24px -4px` | IDE mockup, code editor frames |
|
||
| 4 (modal) | `rgba(0, 0, 0, 0.12) 0px 16px 48px -8px` | Modals, dropdowns |
|
||
|
||
### Decorative Depth
|
||
- The atmospheric depth on Mistral's hero comes from the photographic mountain-sunset imagery — natural light gradient does the work
|
||
- The "sunset stripe" closing band carries depth via its multi-stop gradient (red → orange → yellow → cream)
|
||
- IDE / code mockups use dark-canvas backgrounds with subtle drop shadow
|
||
|
||
## Shapes
|
||
|
||
### Border Radius Scale
|
||
|
||
| Token | Value | Use |
|
||
|---|---|---|
|
||
| `{rounded.xs}` | 4px | Small chips, micro-controls |
|
||
| `{rounded.sm}` | 6px | Discount badges, compact UI |
|
||
| `{rounded.md}` | 8px | Buttons, inputs, search-pill, code blocks |
|
||
| `{rounded.lg}` | 12px | Cards, modals, panels (the dominant card radius) |
|
||
| `{rounded.xl}` | 16px | Larger feature panels |
|
||
| `{rounded.xxl}` | 20px | Featured emphasis cards |
|
||
| `{rounded.full}` | 9999px | Status badges, pill tabs (used sparingly — most buttons are NOT pills) |
|
||
|
||
The radius scale is sober and editorial — Mistral does NOT use pill buttons. `{rounded.md}` (8px) for buttons, `{rounded.lg}` (12px) for cards, `{rounded.full}` reserved for badges and the rare pill tab.
|
||
|
||
### Photography Geometry
|
||
- Hero photography is full-bleed atmospheric mountain-sunset imagery with no internal framing
|
||
- IDE/code mockups render with `{rounded.lg}` (12px) corners on dark canvas
|
||
- Customer logos wall presents wordmarks inline at consistent 60–80px height
|
||
- Product imagery (Le Studio mockup, agent UI mockups) sits in `{rounded.lg}` panels with subtle border
|
||
|
||
## Components
|
||
|
||
> Per the no-hover policy, hover states are NOT documented. Default and pressed/active states only.
|
||
|
||
### Buttons
|
||
|
||
**`button-primary`** — Saturated-orange primary CTA, the dominant action.
|
||
- Background `{colors.primary}`, text `{colors.on-primary}`, typography `{typography.button-md}`, padding `10px 20px`, rounded `{rounded.md}`.
|
||
- Pressed state `button-primary-pressed` deepens to `{colors.primary-deep}`.
|
||
- Disabled state `button-primary-disabled` uses `{colors.hairline}` background and `{colors.muted}` text.
|
||
|
||
**`button-cream`** — Warm cream-yellow secondary action, common on cream-surface sections.
|
||
- Background `{colors.cream}`, text `{colors.ink}`, border `1px solid {colors.beige-deep}`, typography `{typography.button-md}`, padding `10px 20px`, rounded `{rounded.md}`.
|
||
|
||
**`button-dark`** — Dark/black primary CTA on cream surfaces.
|
||
- Background `{colors.ink}`, text `{colors.on-dark}`, typography `{typography.button-md}`, padding `10px 20px`, rounded `{rounded.md}`.
|
||
|
||
**`button-secondary`** — Outlined secondary action.
|
||
- Background transparent, text `{colors.ink}`, border `1px solid {colors.hairline-strong}`, typography `{typography.button-md}`, padding `10px 20px`, rounded `{rounded.md}`.
|
||
|
||
**`button-on-cream`** — White button on cream-tinted backgrounds.
|
||
- Background `{colors.canvas}`, text `{colors.ink}`, border `1px solid {colors.beige-deep}`, typography `{typography.button-md}`, padding `10px 20px`, rounded `{rounded.md}`.
|
||
|
||
**`button-link`** — Inline orange text link.
|
||
- Background transparent, text `{colors.primary}`, typography `{typography.body-sm-medium}`, padding `0`. Underline on activation.
|
||
|
||
### Cards & Containers
|
||
|
||
**`card-base`** — Standard content card.
|
||
- Background `{colors.canvas}`, rounded `{rounded.lg}`, padding `{spacing.xl}`, border `1px solid {colors.hairline-soft}`.
|
||
|
||
**`card-feature`** — White feature card with larger padding.
|
||
- Background `{colors.canvas}`, rounded `{rounded.lg}`, padding `{spacing.xxl}`, border `1px solid `{colors.hairline-soft}`.
|
||
|
||
**`card-cream`** — Warm cream-yellow feature card (services tiers, perk callouts).
|
||
- Background `{colors.cream}`, text `{colors.ink}`, rounded `{rounded.lg}`, padding `{spacing.xxl}`, border `1px solid {colors.beige-deep}`.
|
||
|
||
**`card-cream-soft`** — Lighter cream variant.
|
||
- Background `{colors.surface-cream-soft}`, text `{colors.ink}`, rounded `{rounded.lg}`, padding `{spacing.xxl}`.
|
||
|
||
**`card-feature-product`** — Product showcase card with subtle elevation.
|
||
- Background `{colors.canvas}`, rounded `{rounded.lg}`, padding `{spacing.xxl}`, border `1px solid {colors.hairline-soft}`, shadow `rgba(0, 0, 0, 0.04) 0px 4px 12px`.
|
||
|
||
**`card-photographic`** — Photographic product card with dark background.
|
||
- Background `{colors.surface-code}`, text `{colors.on-dark}`, rounded `{rounded.lg}`, padding `0` (image fills the card).
|
||
|
||
**`pricing-card`** — Standard pricing tier card.
|
||
- Background `{colors.canvas}`, rounded `{rounded.lg}`, padding `{spacing.xxl}`, border `1px solid {colors.hairline-soft}`.
|
||
|
||
**`pricing-card-featured`** — Featured pricing tier (cream background + orange border).
|
||
- Background `{colors.cream}`, rounded `{rounded.lg}`, padding `{spacing.xxl}`, border `2px solid {colors.primary}`.
|
||
|
||
### Inputs & Forms
|
||
|
||
**`text-input`** — Standard text field.
|
||
- Background `{colors.canvas}`, text `{colors.ink}`, border `1px solid {colors.hairline-strong}`, rounded `{rounded.md}`, padding `{spacing.sm} {spacing.md}`, height 44px.
|
||
|
||
**`text-input-focused`** — Activated state.
|
||
- Border switches to `2px solid {colors.primary}`.
|
||
|
||
**`text-area`** — Multi-line text area for contact form.
|
||
- Background `{colors.canvas}`, text `{colors.ink}`, border `1px solid {colors.hairline-strong}`, rounded `{rounded.md}`, padding `{spacing.md}`.
|
||
|
||
**`contact-form-panel`** — Cream-tinted form container on the contact page.
|
||
- Background `{colors.cream}`, rounded `{rounded.lg}`, padding `{spacing.xxl}`, border `1px solid {colors.beige-deep}`. Hosts text-inputs, text-area, submit `button-dark`.
|
||
|
||
### Tabs
|
||
|
||
**`pill-tab`** + **`pill-tab-active`** — Pill-style tab nav (used sparingly on product pages).
|
||
- Inactive: background `{colors.canvas}`, text `{colors.steel}`, border `1px solid {colors.hairline}`, padding `{spacing.xs} {spacing.md}`, rounded `{rounded.full}`.
|
||
- Active: background `{colors.ink}`, text `{colors.on-dark}`.
|
||
|
||
**`segmented-tab`** + **`segmented-tab-active`** — Underline-style tab navigation.
|
||
- Inactive: text `{colors.steel}`, transparent background, padding `{spacing.sm} {spacing.md}`, no bottom border.
|
||
- Active: text `{colors.primary}`, 2px bottom border in `{colors.primary}`.
|
||
|
||
### Badges & Status
|
||
|
||
**`badge-orange`** — Saturated orange badge.
|
||
- Background `{colors.primary}`, text `{colors.on-primary}`, typography `{typography.caption-bold}`, rounded `{rounded.full}`, padding `4px 10px`.
|
||
|
||
**`badge-cream`** — Cream-tinted tag chip.
|
||
- Background `{colors.cream-deeper}`, text `{colors.ink}`, typography `{typography.caption-bold}`, rounded `{rounded.full}`, padding `4px 10px`.
|
||
|
||
**`badge-dark`** — Dark/black status badge.
|
||
- Background `{colors.ink}`, text `{colors.on-dark}`, typography `{typography.caption-bold}`, rounded `{rounded.full}`, padding `4px 10px`.
|
||
|
||
**`promo-banner`** — Sticky black promo strip ABOVE the top nav.
|
||
- Background `{colors.ink}`, text `{colors.on-dark}`, typography `{typography.body-sm-medium}`, padding `{spacing.sm} {spacing.md}`. Carries one-line copy + inline CTA.
|
||
|
||
### Code
|
||
|
||
**`code-block`** — Syntax-highlighted IDE-style code block (Le Studio page mockup, agent demos).
|
||
- Background `{colors.surface-code}`, text `{colors.on-dark}`, typography `{typography.code-md}`, rounded `{rounded.md}`, padding `{spacing.md}`.
|
||
|
||
**`code-block-header`** — Header bar above the code block.
|
||
- Background `{colors.surface-code}`, text `{colors.on-dark-muted}`, typography `{typography.caption}`, padding `{spacing.xs} {spacing.md}`, bottom border `1px solid rgba(255,255,255,0.08)`.
|
||
|
||
### Documentation Components
|
||
|
||
**`feature-icon-tile`** — Cream-yellow feature icon callout.
|
||
- Background `{colors.cream}`, rounded `{rounded.md}`, padding `{spacing.md}`, border `1px solid {colors.beige-deep}`.
|
||
|
||
**`industry-tile`** — Industry-vertical tile in solutions page grid.
|
||
- Background `{colors.canvas}`, rounded `{rounded.lg}`, padding `{spacing.xl}`, border `1px solid {colors.hairline-soft}`.
|
||
|
||
**`stat-cell`** — Stat-row cell ("75% more / 80% better").
|
||
- Background transparent, text `{colors.ink}`, typography `{typography.stat-display}`, padding `{spacing.lg}`.
|
||
|
||
**`customer-testimonial-card`** — Customer quote card (used inside Le Studio and Solutions pages).
|
||
- Background `{colors.canvas}`, rounded `{rounded.lg}`, padding `{spacing.xxl}`, border `1px solid {colors.hairline-soft}`. Quote in `{typography.body-md}`, attribution in `{typography.body-sm}` `{colors.steel}`.
|
||
|
||
**`logo-wall-item`** — Customer logo wordmark cell.
|
||
- Background transparent, text `{colors.steel}`, typography `{typography.body-md-medium}`, padding `{spacing.lg}`.
|
||
|
||
**`faq-accordion-item`** — FAQ panel.
|
||
- Background `{colors.canvas}`, rounded `{rounded.md}`, padding `{spacing.xl}`, bottom border `1px solid {colors.hairline}`.
|
||
|
||
**`app-store-badge`** — App Store / Google Play download badge.
|
||
- Background `{colors.ink}`, text `{colors.on-dark}`, typography `{typography.caption-bold}`, rounded `{rounded.md}`, padding `{spacing.sm} {spacing.md}`.
|
||
|
||
### Navigation
|
||
|
||
**Top Navigation (Marketing)** — Sticky white bar.
|
||
- Background `{colors.canvas}`, height ~64px, bottom border `1px solid {colors.hairline-soft}`.
|
||
- Left: Mistral M-mark logo + "MISTRAL AI_" wordmark + horizontal link list (Products, Solutions, Research, Blog, Customers, Company).
|
||
- Right: "Contact Sales" link + black-pill "Try Studio" CTA.
|
||
|
||
### Signature Components
|
||
|
||
**`hero-band-sunset`** — Atmospheric sunset hero band.
|
||
- Background gradient `linear-gradient(135deg, {colors.sunshine-700} 0%, {colors.sunshine-900} 60%, {colors.primary} 100%)` overlaid on photographic mountain landscape.
|
||
- Layout: hero headline left in `{typography.hero-display}` ({colors.ink}), subtitle in `{typography.subtitle}` ({colors.ink-tint}), button row (`button-dark` + `button-secondary`), atmospheric mountain photography right.
|
||
|
||
**`sunset-stripe-band`** — Horizontal closing band at the foot of every page.
|
||
- Multi-stop gradient: `{colors.primary}` → `{colors.sunshine-700}` → `{colors.sunshine-500}` → `{colors.yellow-saturated}` → `{colors.cream}`.
|
||
- Padding `{spacing.lg} 0`. Spans full width, sits above the footer. THIS IS THE BRAND'S MOST RECOGNIZABLE SIGNATURE ELEMENT.
|
||
|
||
**`cta-banner-cream`** — Page-bottom CTA band on cream surface.
|
||
- Background `{colors.cream}`, text `{colors.ink}`, rounded `{rounded.lg}`, padding `{spacing.section}`. "The next chapter of AI is yours." headline in `{typography.heading-1}` (PP Editorial Old), button row below.
|
||
|
||
**`footer-region`** — Cream-tinted multi-column footer.
|
||
- Background `{colors.footer-cream}`, padding `{spacing.section} {spacing.xxl}`.
|
||
- 5-column link grid (Why Mistral / Explore / Build / Legal + brand mark column).
|
||
- Bottom: language picker + social icons.
|
||
|
||
**`footer-link`** — Individual footer link.
|
||
- Background transparent, text `{colors.primary}`, typography `{typography.body-sm}`, padding `{spacing.xxs} 0`.
|
||
|
||
## Do's and Don'ts
|
||
|
||
### Do
|
||
- Reserve `{colors.primary}` (saturated orange) for primary CTAs and active states only
|
||
- Use the **sunset stripe band** at the foot of every page — it's the brand's most recognizable signature
|
||
- Pair PP Editorial Old (display) with Inter (UI) — never substitute either with a generic alternative
|
||
- Apply `{rounded.md}` (8px) to buttons and `{rounded.lg}` (12px) to cards consistently
|
||
- Use cream-yellow surfaces ({colors.cream}) for form panels, feature cards, and footer
|
||
- Anchor heroes with photographic mountain-sunset imagery (or its visual equivalent — atmospheric gradient sky)
|
||
- Use stat-display token (PP Editorial 56px) for stat callouts to maintain editorial character
|
||
|
||
### Don't
|
||
- Don't use pill-shaped buttons (`{rounded.full}`) — Mistral's geometry is sober and editorial, not playful
|
||
- Don't introduce additional accent colors beyond the orange/yellow/cream sunset palette
|
||
- Don't reduce hero leading below 1.05 — the editorial display needs that magazine-grade tightness
|
||
- Don't replace PP Editorial Old hero displays with Inter — the editorial / sans contrast IS the brand
|
||
- Don't apply heavy shadows on flat documentation cards; reserve elevation for IDE mockups
|
||
- Don't drop the sunset stripe band from any page bottom — it's the brand's continuity element
|
||
|
||
## Responsive Behavior
|
||
|
||
### Breakpoints
|
||
| Name | Width | Key Changes |
|
||
|---|---|---|
|
||
| Mobile (small) | < 480px | Single column. Hero scales to 40px (PP Editorial). Pill nav collapses to hamburger. Pricing tiers stack 1-up. |
|
||
| Mobile (large) | 480 – 767px | Feature tiles 2-up. Hero scales to 52px. |
|
||
| Tablet | 768 – 1023px | 2-column feature grids. Pill-tab nav returns. Hero 64px. |
|
||
| Desktop | 1024 – 1279px | Multi-column layouts. Hero 76px. Stat row at full width. |
|
||
| Wide Desktop | ≥ 1280px | Full 84px hero presentation. |
|
||
|
||
### Touch Targets
|
||
- Buttons render at 40–44px effective height — at WCAG AAA floor with `10px 20px` padding
|
||
- Form inputs render at 44px height
|
||
- Pill tabs render at ~32px tall — bumps to 44px on mobile
|
||
|
||
### Collapsing Strategy
|
||
- **Promo banner** stays full-width; truncates at < 480px
|
||
- **Top nav** below 1024px collapses to hamburger
|
||
- **Hero band**: 2-column hero (text + photography) collapses to stacked at < 1024px
|
||
- **Pricing tiers**: 4-column desktop → 2-column tablet → 1-column mobile
|
||
- **Stat row**: 3-column → stacked at < 768px
|
||
- **Hero typography**: 84px → 64px → 52px → 40px
|
||
- **Footer**: 5-column desktop → 3-column tablet → 1-column accordion mobile
|
||
- **Sunset stripe band** stays full-width on all breakpoints
|
||
|
||
### Image Behavior
|
||
- Mountain-sunset photography uses 16:9 ratio with full-bleed scaling
|
||
- IDE mockup images maintain aspect ratio across breakpoints
|
||
- Customer logo wall presents wordmarks at consistent 60–80px height
|
||
|
||
## Iteration Guide
|
||
|
||
1. Focus on ONE component at a time
|
||
2. Reference component names and tokens directly (`{colors.primary}`, `{component-name}-pressed`)
|
||
3. Run `npx @google/design.md lint DESIGN.md` after edits
|
||
4. Add new variants as separate `components:` entries
|
||
5. Default to `{typography.body-md}` for body and `{typography.subtitle}` for emphasis. Hero displays use `{typography.hero-display}` (PP Editorial Old).
|
||
6. Keep `{colors.primary}` confined to primary CTAs, active states, and the sunset stripe band
|
||
7. Cards use `{rounded.lg}` (12px), buttons use `{rounded.md}` (8px). Pills (`{rounded.full}`) reserved for badges only.
|
||
8. Always include the sunset-stripe-band component at the foot of every page mockup.
|
||
|
||
## Known Gaps
|
||
|
||
- Specific dark-mode token values not surfaced; the brand has not shipped a published dark-mode palette
|
||
- Animation/transition timings not extracted; recommend 150–200ms ease for hover/focus state transitions
|
||
- Form validation success state not explicitly captured beyond defaults
|
||
- Sunset stripe band gradient stops are approximations — the actual values may vary slightly across pages but the visual rhythm is consistent
|