← 返回全部设计

Replicate

ReplicateAI 与大模型平台

通过 API 运行 ML 模型。干净白色画布,代码优先

实时预览

配色 Colors · 26

primary
#ea2804
primary-deep
#c01f00
on-primary
#ffffff
ink
#202020
body
#3a3a3a
charcoal
#575757
mute
#646464
ash
#8d8d8d
stone
#bbbbbb
on-dark
#fcfcfc
on-dark-mute
rgba(252,252,252,0.72)
canvas
#f9f7f3
surface-bone
#f3f0e8
surface-card
#ffffff
surface-dark
#202020
surface-deep
#000000
hairline
rgba(32,32,32,0.12)
hairline-strong
#202020
divider-dark
rgba(255,255,255,0.2)
hero-warm
#ea2804
hero-glow
#ff6a3d
hero-pink
#f4a8a0
badge-success
#2b9a66
link
#ea2804
ring-focus
rgba(59,130,246,0.5)
github-dark
#24292e

字体阶梯 Typography · 17

display-xxl
128px · 700
永远相信美好的事情即将发生 Ag
display-xl
72px · 700
永远相信美好的事情即将发生 Ag
display-lg
48px · 700
永远相信美好的事情即将发生 Ag
display-md
30px · 600
永远相信美好的事情即将发生 Ag
heading-lg
38.4px · 600
永远相信美好的事情即将发生 Ag
heading-md
24px · 600
永远相信美好的事情即将发生 Ag
heading-sm
20px · 600
永远相信美好的事情即将发生 Ag
subtitle
18px · 600
永远相信美好的事情即将发生 Ag
body-lg
18px · 400
永远相信美好的事情即将发生 Ag
body-md
16px · 400
永远相信美好的事情即将发生 Ag
body-sm
14px · 400
永远相信美好的事情即将发生 Ag
button-md
16px · 600
永远相信美好的事情即将发生 Ag
button-sm
14px · 600
永远相信美好的事情即将发生 Ag
caption
12px · 400
永远相信美好的事情即将发生 Ag
caption-tight
14px · 600
永远相信美好的事情即将发生 Ag
code-md
14px · 400
永远相信美好的事情即将发生 Ag
code-sm
11px · 400
永远相信美好的事情即将发生 Ag

圆角 Radius · 6

none
0px
xs
4px
sm
6px
md
10px
lg
16px
full
9999px

间距 Spacing · 10

xxs
2px
xs
4px
sm
8px
md
12px
lg
16px
xl
24px
xxl
32px
xxxl
48px
section
96px
band
160px

按钮预览 Buttons

标签 Badge

组件规范 Components · 20

button-primary
backgroundColor
#ea2804
textColor
#ffffff
typography
{typography.button-md}
rounded
9999px
padding
12px 24px
height
44px
button-primary-pressed
backgroundColor
#c01f00
textColor
#ffffff
typography
{typography.button-md}
rounded
9999px
button-dark
backgroundColor
#202020
textColor
#fcfcfc
typography
{typography.button-md}
rounded
9999px
padding
12px 24px
height
44px
button-outline
backgroundColor
#ffffff
textColor
#202020
typography
{typography.button-md}
rounded
9999px
padding
11px 23px
height
44px
button-ghost
backgroundColor
#f9f7f3
textColor
#202020
typography
{typography.button-md}
rounded
9999px
padding
8px 16px
height
36px
button-icon
backgroundColor
#ffffff
textColor
#202020
rounded
9999px
size
36px
text-input
backgroundColor
#ffffff
textColor
#202020
typography
{typography.body-md}
rounded
9999px
padding
12px 20px
height
44px
hero-band
backgroundColor
#ea2804
textColor
#fcfcfc
typography
{typography.display-xl}
rounded
0px
padding
96px 32px
model-card
backgroundColor
#ffffff
textColor
#202020
typography
{typography.body-md}
rounded
10px
padding
16px
collection-tile
backgroundColor
#f9f7f3
textColor
#202020
typography
{typography.heading-md}
rounded
10px
padding
24px
pricing-tier
backgroundColor
#ffffff
textColor
#202020
typography
{typography.body-md}
rounded
16px
padding
32px
pricing-tier-featured
backgroundColor
#202020
textColor
#fcfcfc
typography
{typography.body-md}
rounded
16px
padding
32px
code-block
backgroundColor
#202020
textColor
#fcfcfc
typography
{typography.code-md}
rounded
10px
padding
24px
code-tab
backgroundColor
#000000
textColor
rgba(252,252,252,0.72)
typography
{typography.code-sm}
rounded
4px
padding
6px 12px
badge-status
backgroundColor
#2b9a66
textColor
#fcfcfc
typography
{typography.caption}
rounded
9999px
padding
4px 10px
badge-tag
backgroundColor
#f9f7f3
textColor
#202020
typography
{typography.caption}
rounded
9999px
padding
4px 10px
nav-bar
backgroundColor
#f9f7f3
textColor
#202020
typography
{typography.button-sm}
rounded
0px
height
60px
sub-nav-pill
backgroundColor
#ffffff
textColor
#202020
typography
{typography.button-sm}
rounded
9999px
padding
6px 14px
contributor-avatar
backgroundColor
#ffffff
textColor
#202020
rounded
9999px
size
40px
footer
backgroundColor
#000000
textColor
#fcfcfc
typography
{typography.body-sm}
rounded
0px
padding
64px 32px

设计规范


version: alpha name: Replicate-design-analysis description: | Replicate's marketing surfaces pair the warm-cream developer-tools aesthetic of an indie ML playground with a confident hot-orange brand accent and a signature display typeface (rb-freigeist-neue) sized aggressively large at 72px+. The system reads as "AI lab notebook crossed with print magazine": cream and bone surfaces, dark ink type, monospace code wells, irregular hand-drawn-feeling diagrams, and a rich orange used scarcely on the most consequential CTA. Photography of contributors and example outputs is square-ish with mid-radius corners; everything else is borderless or hairline.

colors: primary: "#ea2804" primary-deep: "#c01f00" on-primary: "#ffffff" ink: "#202020" body: "#3a3a3a" charcoal: "#575757" mute: "#646464" ash: "#8d8d8d" stone: "#bbbbbb" on-dark: "#fcfcfc" on-dark-mute: "rgba(252,252,252,0.72)" canvas: "#f9f7f3" surface-bone: "#f3f0e8" surface-card: "#ffffff" surface-dark: "#202020" surface-deep: "#000000" hairline: "rgba(32,32,32,0.12)" hairline-strong: "#202020" divider-dark: "rgba(255,255,255,0.2)" hero-warm: "#ea2804" hero-glow: "#ff6a3d" hero-pink: "#f4a8a0" badge-success: "#2b9a66" link: "#ea2804" ring-focus: "rgba(59,130,246,0.5)" github-dark: "#24292e"

typography: display-xxl: fontFamily: rb-freigeist-neue fontSize: 128px fontWeight: 700 lineHeight: 1.0 letterSpacing: -3px display-xl: fontFamily: rb-freigeist-neue fontSize: 72px fontWeight: 700 lineHeight: 1.0 letterSpacing: -1.8px display-lg: fontFamily: rb-freigeist-neue fontSize: 48px fontWeight: 700 lineHeight: 1.0 letterSpacing: -1px display-md: fontFamily: rb-freigeist-neue fontSize: 30px fontWeight: 600 lineHeight: 1.2 letterSpacing: -0.5px heading-lg: fontFamily: basier-square fontSize: 38.4px fontWeight: 600 lineHeight: 0.83 letterSpacing: -0.5px heading-md: fontFamily: basier-square fontSize: 24px fontWeight: 600 lineHeight: 1.33 letterSpacing: -0.35px heading-sm: fontFamily: basier-square fontSize: 20px fontWeight: 600 lineHeight: 1.4 letterSpacing: -0.3px subtitle: fontFamily: rb-freigeist-neue fontSize: 18px fontWeight: 600 lineHeight: 1.56 letterSpacing: 0 body-lg: fontFamily: basier-square fontSize: 18px fontWeight: 400 lineHeight: 1.56 letterSpacing: 0 body-md: fontFamily: basier-square fontSize: 16px fontWeight: 400 lineHeight: 1.5 letterSpacing: 0 body-sm: fontFamily: basier-square fontSize: 14px fontWeight: 400 lineHeight: 1.43 letterSpacing: 0 button-md: fontFamily: basier-square fontSize: 16px fontWeight: 600 lineHeight: 1.0 letterSpacing: 0 button-sm: fontFamily: basier-square fontSize: 14px fontWeight: 600 lineHeight: 1.0 letterSpacing: 0 caption: fontFamily: basier-square fontSize: 12px fontWeight: 400 lineHeight: 1.33 letterSpacing: 0 caption-tight: fontFamily: basier-square fontSize: 14px fontWeight: 600 lineHeight: 1.43 letterSpacing: -0.35px code-md: fontFamily: jetbrains-mono fontSize: 14px fontWeight: 400 lineHeight: 1.43 letterSpacing: 0 code-sm: fontFamily: jetbrains-mono fontSize: 11px fontWeight: 400 lineHeight: 1.5 letterSpacing: 0

rounded: none: 0px xs: 4px sm: 6px md: 10px lg: 16px full: 9999px

spacing: xxs: 2px xs: 4px sm: 8px md: 12px lg: 16px xl: 24px xxl: 32px xxxl: 48px section: 96px band: 160px

components: button-primary: backgroundColor: "{colors.primary}" textColor: "{colors.on-primary}" typography: "{typography.button-md}" rounded: "{rounded.full}" padding: 12px 24px height: 44px button-primary-pressed: backgroundColor: "{colors.primary-deep}" textColor: "{colors.on-primary}" typography: "{typography.button-md}" rounded: "{rounded.full}" button-dark: backgroundColor: "{colors.surface-dark}" textColor: "{colors.on-dark}" typography: "{typography.button-md}" rounded: "{rounded.full}" padding: 12px 24px height: 44px button-outline: backgroundColor: "{colors.surface-card}" textColor: "{colors.ink}" typography: "{typography.button-md}" rounded: "{rounded.full}" padding: 11px 23px height: 44px button-ghost: backgroundColor: "{colors.canvas}" textColor: "{colors.ink}" typography: "{typography.button-md}" rounded: "{rounded.full}" padding: 8px 16px height: 36px button-icon: backgroundColor: "{colors.surface-card}" textColor: "{colors.ink}" rounded: "{rounded.full}" size: 36px text-input: backgroundColor: "{colors.surface-card}" textColor: "{colors.ink}" typography: "{typography.body-md}" rounded: "{rounded.full}" padding: 12px 20px height: 44px hero-band: backgroundColor: "{colors.hero-warm}" textColor: "{colors.on-dark}" typography: "{typography.display-xl}" rounded: "{rounded.none}" padding: 96px 32px model-card: backgroundColor: "{colors.surface-card}" textColor: "{colors.ink}" typography: "{typography.body-md}" rounded: "{rounded.md}" padding: 16px collection-tile: backgroundColor: "{colors.canvas}" textColor: "{colors.ink}" typography: "{typography.heading-md}" rounded: "{rounded.md}" padding: 24px pricing-tier: backgroundColor: "{colors.surface-card}" textColor: "{colors.ink}" typography: "{typography.body-md}" rounded: "{rounded.lg}" padding: 32px pricing-tier-featured: backgroundColor: "{colors.surface-dark}" textColor: "{colors.on-dark}" typography: "{typography.body-md}" rounded: "{rounded.lg}" padding: 32px code-block: backgroundColor: "{colors.surface-dark}" textColor: "{colors.on-dark}" typography: "{typography.code-md}" rounded: "{rounded.md}" padding: 24px code-tab: backgroundColor: "{colors.surface-deep}" textColor: "{colors.on-dark-mute}" typography: "{typography.code-sm}" rounded: "{rounded.xs}" padding: 6px 12px badge-status: backgroundColor: "{colors.badge-success}" textColor: "{colors.on-dark}" typography: "{typography.caption}" rounded: "{rounded.full}" padding: 4px 10px badge-tag: backgroundColor: "{colors.canvas}" textColor: "{colors.ink}" typography: "{typography.caption}" rounded: "{rounded.full}" padding: 4px 10px nav-bar: backgroundColor: "{colors.canvas}" textColor: "{colors.ink}" typography: "{typography.button-sm}" rounded: "{rounded.none}" height: 60px sub-nav-pill: backgroundColor: "{colors.surface-card}" textColor: "{colors.ink}" typography: "{typography.button-sm}" rounded: "{rounded.full}" padding: 6px 14px contributor-avatar: backgroundColor: "{colors.surface-card}" textColor: "{colors.ink}" rounded: "{rounded.full}" size: 40px footer: backgroundColor: "{colors.surface-deep}" textColor: "{colors.on-dark}" typography: "{typography.body-sm}" rounded: "{rounded.none}" padding: 64px 32px

概述

Replicate 是一个具有艺术杂志灵魂的开发者工具平台。公共营销表面坐落在温暖的米色画布({colors.canvas}#f9f7f3)上,而非典型 AI 基础设施站点的白色或近黑色背景,这一个决定就影响了其他所有元素:摄影读起来像是编辑作品,代码井读起来像是印刷的引语,品牌橙({colors.primary}#ea2804)感觉像是印章而非通知。

字体是承载性的装饰。rb-freigeist-neue——一款偏重、略压缩的 grotesque——在首屏带中出现最大 128px 的尺寸,紧凑的 lineHeight: 1.0 和负字距让多行标题能打包成几何块。配套家族 basier-square 在 14–18px 范围内处理正文、按钮标签和元数据。JetBrains Mono 承载每个代码井、命令和示例。三个家族,三种工作,无重叠。

页面节奏在默认米色画布、大胆的全幅橙色首屏带和承载代码故事的 {colors.surface-dark}#202020)section 之间循环——"how it works" 的演示。曲线是有意且柔和的:每个交互表面(按钮、输入、标签、头像)使用 {rounded.full},而内容卡片和代码井升级到 {rounded.md}{rounded.lg}。Replicate 没有锐角;系统读起来像友好的精确。

关键特征:

  • 温暖的米色画布({colors.canvas}#f9f7f3)取代典型的白色背景,配 {colors.surface-bone} 用于内嵌卡片。
  • 热烈的橙色({colors.primary}#ea2804)保留给主 CTA、首屏带和行内链接颜色。从不装饰。
  • 展示标题尺寸巨大——首屏带中 {typography.display-xxl} 128px,section 开场 {typography.display-xl} 72px,紧凑的 lineHeight: 1.0 和负字距。
  • 三家族字体栈:rb-freigeist-neue 用于展示,basier-square 用于 UI/正文,jetbrains-mono 用于代码。
  • 每个交互元素全圆角({rounded.full} 9999px)——按钮、输入、徽标、头像——而内容卡片升级到 {rounded.md} 10px。
  • 深色代码井({colors.surface-dark} 背景)位于米色画布内作为全幅阅读表面,模仿印刷引语。
  • Section 节奏:米色 → 橙色首屏 → 米色 → 深色代码故事带 → 米色 → 黑色页脚。

配色

品牌与点缀

  • Replicate Orange{colors.primary}#ea2804):品牌点缀。保留给主 CTA、首屏带背景和行内链接颜色。像印章一样对待——每视口最多一个橙色元素。
  • Orange Pressed{colors.primary-deep}#c01f00):{colors.primary} 的激活/按下状态——用于 {component.button-primary-pressed}
  • Hero Glow{colors.hero-glow}#ff6a3d):在首屏文案后面的氛围径向网格中出现的较浅橙色。
  • Hero Pink{colors.hero-pink}#f4a8a0):暖粉色渲染,软化首屏带的下边缘,过渡到米色。
  • On-Primary{colors.on-primary}#ffffff):{colors.primary} 表面上的标签颜色。

表面

  • Canvas{colors.canvas}#f9f7f3):默认页面背景。暖米色,从不是纯白色。
  • Surface Bone{colors.surface-bone}#f3f0e8):内嵌卡片组和特性带使用的半步深米色。
  • Surface Card{colors.surface-card}#ffffff):用于单个模型卡片、搜索输入和定价等级的纯白色——白色出现的唯一地方。
  • Surface Dark{colors.surface-dark}#202020):代码井、特性定价等级和 "how it works" 演示带。
  • Surface Deep{colors.surface-deep}#000000):页脚画布和 {component.code-block} 内的内嵌代码 tab 条。
  • Hairline{colors.hairline}rgba(32,32,32,0.12)):米色表面上的低对比 1px 分隔线。
  • Hairline Strong{colors.hairline-strong}#202020):按钮描边、聚焦输入和结构分隔线。

文字

  • Ink{colors.ink}#202020):主文字颜色。值得注意的是比 #000000 更暖,与米色画布匹配。
  • Body{colors.body}#3a3a3a):在 18px+ 行长下 ink 显得过重时的长篇正文。
  • Charcoal{colors.charcoal}#575757):说明、元数据、次级导航。
  • Mute{colors.mute}#646464):辅助文字和非激活标签。
  • Ash{colors.ash}#8d8d8d):三级文字、占位符文案。
  • Stone{colors.stone}#bbbbbb):禁用前景、中性图标描边。
  • On-Dark{colors.on-dark}#fcfcfc):{colors.surface-dark}{colors.surface-deep} 上的主文字。
  • On-Dark Mute{colors.on-dark-mute}rgba(252,252,252,0.72):深色区域内的次级文字;在没有纯白跳出的情况下保留偏白的感觉。

语义

  • Success{colors.badge-success}#2b9a66):行内成功徽标和模型卡片上的 "running" 状态胶囊。
  • Link{colors.link}#ea2804):行内链接颜色——与主橙相同,故意将链接拉入品牌点缀。
  • Focus Ring{colors.ring-focus}rgba(59,130,246,0.5):交互元素上的默认聚焦环。
  • GitHub Dark{colors.github-dark}#24292e):GitHub 品牌的按钮表面(故意保持非品牌以匹配 GitHub 自己的 token)。

字体排版

字体族

Replicate 提供一个明确的三个家族栈:

  • rb-freigeist-neue——专有的偏重 grotesque,用于所有展示尺寸(30px+)。通过紧凑的 lineHeight: 1.0 和负字距承载编辑杂志的性格。
  • basier-square——专有的人文无衬线,用于正文、按钮标签、说明和元数据。
  • jetbrains-mono——开源 monospace,用于每个代码井和行内命令。

当专有家族无法授权时,Bricolage GrotesqueMigra 是 rb-freigeist-neue 的可信替代,GeistInter 可以替代 basier-square。JetBrains Mono 是开源的,应当始终直接使用。

层级

TokenSizeWeightLine HeightLetter Spacing用途
{typography.display-xxl}128px7001.0-3px单一首屏 "Run AI" / "Imagine what you can build" 标题。每页一个。
{typography.display-xl}72px7001.0-1.8pxsection 开场("How it works"、"Scale on Replicate")。
{typography.display-lg}48px7001.0-1px子 section 标题、定价等级名称。
{typography.display-md}30px6001.2-0.5px特性卡片标题。
{typography.heading-lg}38.4px6000.83-0.5px紧凑堆叠的 basier-square 标题,用于定价和企业首屏。
{typography.heading-md}24px6001.33-0.35px卡片标题、模型详情标题。
{typography.heading-sm}20px6001.4-0.3px列表 section 标题。
{typography.subtitle}18px6001.560展示 section 中的引导段落。
{typography.body-lg}18px4001.560营销散文。
{typography.body-md}16px4001.50默认正文。
{typography.body-sm}14px4001.430说明、元数据。
{typography.button-md}16px6001.00默认按钮标签。
{typography.button-sm}14px6001.00紧凑按钮标签、子导航胶囊。
{typography.caption}12px4001.330页脚披露、版权。
{typography.caption-tight}14px6001.43-0.35px定价等级行中使用的强调型小说明。
{typography.code-md}14px4001.430代码块和行内代码。
{typography.code-sm}11px4001.50代码 tab 标签和小型行内 token。

原则

  • 展示尺寸保持 lineHeight: 1.0(或 {typography.heading-lg} 上为 0.83),以便多行堆叠读作单一字体块。
  • 负字距随尺寸缩放——更大的字体收紧更多(128px 时 -3px,20px 时降到 -0.3px)。正文字体保持在 0。
  • 正文字重在 {typography.body-lg}{typography.body-md} 上保持 400——从不升至 500 以示强调。强调来自家族变化(basier-square → rb-freigeist-neue)而非字重。
  • 代码从不设置为 basier-square,即便在小尺寸下——JetBrains Mono 承载每个字面命令、每个模型 slug、每个 API 调用。

关于字体替代

当专有家族不可用时,将展示 lineHeight 显式限制为 1.0 并在 display-xxl / display-xl 上应用 -3% 字距以匹配原始的紧凑度。替代品通常默认渲染时字距更宽。

布局

间距系统

  • 基础单位:4px,工作刻度在 4 / 8 / 16 的倍数上。
  • Token{spacing.xxs} 2px · {spacing.xs} 4px · {spacing.sm} 8px · {spacing.md} 12px · {spacing.lg} 16px · {spacing.xl} 24px · {spacing.xxl} 32px · {spacing.xxxl} 48px · {spacing.section} 96px · {spacing.band} 160px。
  • Section padding:全宽带之间纵向 {spacing.section}(96px);当带需要额外编辑性呼吸空间(首屏、收尾的 "Imagine what you can build" 条带)时为 {spacing.band}(160px)。
  • 卡片内 padding:{component.model-card} 上为 {spacing.lg}(16px),{component.pricing-tier} 上为 {spacing.xxl}(32px)。

网格与容器

  • 最大内容宽度 ≈ 正文 section 上 1280px,全幅运行的首屏带为 1440px。
  • 模型网格 在集合上:桌面 4 列,tablet large 3 列,tablet 2 列,移动端 1 列。
  • 定价:桌面 3 列居中网格,1024px 以下垂直堆叠;中心等级翻转为 {component.pricing-tier-featured}(深色反相)作为推荐选项。
  • 代码故事 section:2 列分割——左侧叙述文案,右侧代码井——1024px 以下折叠为堆叠。

留白哲学

  • 米色上的留白充裕且编辑性——section 在 96px 呼吸,关键带在 160px 开启,以便字体可以放大而不感拥挤。
  • 卡片内,系统收紧到 16–32px,使模型缩略图、状态和元数据坐在紧凑的卡片列表节奏中。
  • 发丝 {colors.hairline} 分隔线在米色表面上取代阴影;在深色表面上,{colors.divider-dark} 承担相同角色。

层次与深度

级别处理用途
0 — 平面无阴影,无边框默认米色画布、全幅带。
1 — 描边1px 实线 {colors.hairline}{colors.hairline-strong}模型卡片、定价等级、集合瓦片。
2 — bone 内嵌{colors.canvas} 带内向 {colors.surface-bone} 的表面色偏移特性组容器、"How it works" 演示。
3 — 深色反相卡片在米色背景上切换到 {colors.surface-dark}代码井、特性定价等级、"Scale on Replicate" 首屏卡片。
4 — 柔和投影0 8px 24px rgba(32,32,32,0.08)悬停锚定的模型缩略图(仅视觉——未记录交互状态)。

投影存在于提取的 token 中但受到限制——谨慎地用于将摄影缩略图从米色画布上抬高一档。主导的层级语言是色块。

装饰性深度

  • 首屏氛围网格——首页首屏后面的橙到粉渐变背景是一个分层径向网格:{colors.primary} 核心 → {colors.hero-glow} 中间停 → {colors.hero-pink} 外层渲染。仅保留给首页首屏带。
  • 代码故事深色带——"How it works" section 使用全幅 {colors.surface-dark},配单一发丝 {colors.divider-dark} 分隔叙述文案和代码井。
  • 贡献者马赛克——首页有一个水平滚动的圆形头像({component.contributor-avatar})带,置于有纹理的米色画布之上;这是头像在品牌级别出现的唯一位置。

形状

圆角刻度

Token用途
{rounded.none}0px首屏带、全幅 section、页脚。
{rounded.xs}4px代码 tab、代码井内的行内标签。
{rounded.sm}6px中半径标注、小型内嵌芯片。
{rounded.md}10px模型卡片、集合瓦片、代码井。
{rounded.lg}16px定价等级、较大的特性卡片。
{rounded.full}9999px按钮、输入、徽标、头像、胶囊。

摄影几何

  • 模型缩略图:方形(1:1),圆角 {rounded.md},全幅图像到卡片边缘。
  • 首屏示例输出:4:3 或 16:9,圆角 {rounded.md}
  • 贡献者头像:圆形({rounded.full}),首页上 40px,卡片元数据中 32px。
  • 首屏带使用风格化的黑色墨水插画("workbench 上的 tinkerer")作为其摄影替代——保持在橙色带内而非覆盖在米色上。

组件

按钮

button-primary——橙色 CTA

  • 背景 {colors.primary},标签 {colors.on-primary},字号 {typography.button-md},padding 12px 24pxrounded: {rounded.full},高 44px。
  • 页面上单个最重要的动作(例如 "Sign in with GitHub"、"Try a model")。
  • 按下状态位于 button-primary-pressed(背景 {colors.primary-deep})。

button-dark——深色 CTA

  • 背景 {colors.surface-dark},标签 {colors.on-dark},字号 {typography.button-md}rounded: {rounded.full}
  • {component.button-primary} 配对的等重次级动作,或在米色上橙色过于响亮时的主动作。

button-outline——描边 CTA

  • 背景 {colors.surface-card},标签 {colors.ink},1px 实线 {colors.hairline-strong},字号 {typography.button-md}rounded: {rounded.full}
  • 三级动作;与主/深色动作并排出现,用于 "View docs"、"Read more"。

button-ghost——行内按钮

  • 背景 {colors.canvas},标签 {colors.ink},无边框,字号 {typography.button-md}rounded: {rounded.full},padding 8px 16px
  • 卡片内和正文文案行内的子动作。

button-icon——图标按钮

  • 背景 {colors.surface-card},标签 {colors.ink},1px 实线 {colors.hairline}rounded: {rounded.full},36×36px 圆形。
  • 轮播箭头、复制到剪贴板、GitHub 链接图标。

卡片与容器

model-card——模型列表卡片

  • 背景 {colors.surface-card},文字 {colors.ink},字号 {typography.body-md}rounded: {rounded.md},padding {spacing.lg}(16px)。
  • 顶部方形缩略图,下方模型所有者 + 名称在 {typography.body-sm} 中,单行描述在 {colors.charcoal} 中,状态胶囊 {component.badge-status} 在左下角。

collection-tile——模型集合瓦片

  • 背景 {colors.canvas},文字 {colors.ink},字号 {typography.heading-md}rounded: {rounded.md},padding {spacing.xl}(24px)。
  • {colors.surface-bone} 带内的米色上米色瓦片,用于浏览模型类别。

pricing-tier——定价等级卡片

  • 背景 {colors.surface-card},文字 {colors.ink},字号 {typography.body-md}rounded: {rounded.lg},padding {spacing.xxl}(32px)。
  • 3 列网格;等级名称在 {typography.display-lg}("Free"、"Pro"、"Enterprise"),价格在 {typography.display-md}

pricing-tier-featured——特性定价等级

  • 背景 {colors.surface-dark},文字 {colors.on-dark},字号 {typography.body-md}rounded: {rounded.lg},padding {spacing.xxl}
  • 中心等级翻转为深色反相以标记 "recommended"。

code-block——代码井

  • 背景 {colors.surface-dark},文字 {colors.on-dark},字号 {typography.code-md}rounded: {rounded.md},padding {spacing.xl}(24px)。
  • 顶部 tab 条使用 {component.code-tab} 在语言之间切换(Python、Node.js、cURL、HTTP)。

code-tab——代码 tab 芯片

  • 背景 {colors.surface-deep},文字 {colors.on-dark-mute},字号 {typography.code-sm}rounded: {rounded.xs},padding 6px 12px
  • 激活 tab 将文字颜色切换为 {colors.on-dark} 并在 {colors.primary} 中添加 2px 底部下划线。

hero-band——全幅首屏

  • 背景 {colors.hero-warm} 配以 Elevation 中详述的氛围网格,文字 {colors.on-dark},字号 {typography.display-xxl} 用于标题。
  • 仅在首页使用;二级页面以米色 + {typography.display-xl} 开启。

输入与表单

text-input——默认输入

  • 背景 {colors.surface-card},文字 {colors.ink},字号 {typography.body-md},1px 实线 {colors.hairline}rounded: {rounded.full},padding 12px 20px,高 44px。
  • 胶囊形搜索和电子邮件字段。聚焦状态添加 {colors.ring-focus} 3px 环。

导航

nav-bar——顶部导航(桌面)

  • 背景 {colors.canvas},字号 {typography.button-sm},高 60px,单一底部发丝 {colors.hairline} 边框。
  • 左:字标 logo。居中:顶层导航("Explore"、"Pricing"、"Docs"、"Blog")。右:GitHub 图标 + "Sign in" 链接 + {component.button-primary}

nav-bar(移动端)

  • 相同高度 60px,居中导航折叠为汉堡图标。标志留在左侧,登录 CTA 留在右侧。

sub-nav-pill——子导航芯片

  • 胶囊芯片设置在内容上方的水平行中(如 "All"、"Featured"、"Image generation"、"Audio"),配 {component.sub-nav-pill} 样式。

标志性组件

badge-status——模型状态徽标

  • 背景 {colors.badge-success},标签 {colors.on-dark},字号 {typography.caption}rounded: {rounded.full},padding 4px 10px
  • 锚定在模型卡片的左下角以指示 "running" 或 "deployed"。

badge-tag——中性标签

  • 背景 {colors.canvas},标签 {colors.ink},1px 实线 {colors.hairline},字号 {typography.caption}rounded: {rounded.full},padding 4px 10px
  • 模型卡片上的能力标签("text-to-image"、"video"、"audio")。

contributor-avatar——社区贡献者

  • 背景 {colors.surface-card} 占位符于 1:1 摄影之后,rounded: {rounded.full},40×40px(元数据上下文中 32px)。
  • 用于首页贡献者马赛克。

footer——全局页脚

  • 背景 {colors.surface-deep},文字 {colors.on-dark},字号 {typography.body-sm}rounded: {rounded.none},padding 64px 32px
  • 多列快捷链接网格位于由 {colors.divider-dark} 分隔的版权行之上。

推荐与避免

推荐

  • 使用 {colors.canvas}(米色)作为默认页面背景。白色({colors.surface-card})仅出现在单个卡片、输入和首屏插画背景上。
  • {colors.primary} 保留给主 CTA、首页首屏带和行内链接——三种角色,别无其他。
  • 将每个交互元素设置为 {rounded.full}——按钮、输入、徽标、头像、胶囊。
  • 将内容卡片升级到 {rounded.md}(10px)或 {rounded.lg}(16px)——永远不要用锐角。
  • 使用 {typography.display-xxl}(128px)和 {typography.display-xl}(72px)以 lineHeight: 1.0 和负字距开启首屏带。
  • rb-freigeist-neue 用于所有展示,basier-square 用于 UI/正文,jetbrains-mono 用于代码。保持车道严格。
  • {component.code-block} 中以 {colors.surface-dark} 背景渲染代码——代码是印刷品,不是行内灰色框。
  • {rounded.md} 角和卡片内全幅裁剪的摄影。

避免

  • 不要在页面级别用纯白替换米色。品牌温度来自 {colors.canvas}
  • 不要引入次级品牌颜色。橙色是唯一的点缀;语义绿色和聚焦蓝是功能性的,不是装饰性的。
  • 不要将展示 lineHeight 放松到超过 1.0。紧凑堆叠是结构性的。
  • 不要将正文字重升至 500 以示强调——改为变化家族(basier-square → rb-freigeist-neue)。
  • 不要将 {rounded.full} 应用于内容卡片。胶囊形卡片打破节奏。
  • 不要将代码放在浅灰色框中。代码井始终是 {colors.surface-dark}{colors.surface-deep}
  • 不要在正文文字或大表面上使用橙色——它立即失去印章质感。
  • 不要在米色表面上添加投影。层级是色块;阴影保留给浮动缩略图。

响应式行为

断点

名称宽度关键变化
Desktop XL≥ 1440px完整最大宽度 1280 正文,首屏带全幅运行,4 列模型网格。
Desktop1280–1439px容器收缩;侧边 padding {spacing.xl}(24px)。
Tablet Large1024–1279px模型网格 3 列,代码故事分割保持 2 列。
Tablet768–1023px模型网格 2 列,代码故事堆叠(叙述在上,代码在下),定价垂直堆叠。
Mobile Large426–767px模型网格 480px+ 1 列,导航折叠为汉堡,首屏 {typography.display-xxl} 限制为 64px。
Mobile≤ 425px所有网格 1 列,首屏限制为 48px,section padding {spacing.section} 折叠为 64px。

触控目标

  • 所有按钮在移动端至少 44px 高;默认 {component.button-primary} 高 44px——舒适地通过 WCAG AAA。
  • {component.button-icon}(36px)在移动端通过增加 padding 提升至 44px。
  • {component.sub-nav-pill} 在桌面上保持 36px,在移动端通过垂直 padding 调整增长到 40px。

折叠策略

  • 顶层导航在 < 1024px 时折叠为汉堡;字标和 {component.button-primary} 保持锚定。
  • 首屏 {typography.display-xxl} 限制:128px → 96px → 64px → 48px 跨断点阶梯。
  • 定价 3 列网格在 < 1024px 时垂直堆叠,特性等级保持居中堆叠。
  • 代码故事分割在 < 1024px 时从并排切换到堆叠,代码井始终在第二位。
  • 子导航胶囊在 < 768px 时从换行行转换为水平滚动条。

图像行为

  • 模型缩略图以 1.5× 和 2× DPR 提供;768px 以下系统切换为 600×600 输出而非 1200×1200。
  • 首屏氛围网格作为 CSS 渐变渲染——无资源成本,无断点变化。
  • 代码块内容在 < 1024px 时柔和换行(无水平滚动);长行使用延续标记换行。

迭代指南

  1. 一次专注于一个组件。大多数交互元素共享 {rounded.full}{colors.canvas} / {colors.surface-card} 对——只有角色专属 token({colors.primary}{component.code-block})在变体之间变化。
  2. 直接引用组件名和 token({colors.primary}{component.button-primary-pressed}{rounded.lg})——不要转述。
  3. 编辑后运行 npx @google/design.md lint DESIGN.md;orphaned-tokens 警告将捕获未使用的条目。
  4. 添加新变体作为单独的条目(-pressed-disabled-featured)——不要将它们埋在正文中。
  5. 默认正文为 {typography.body-md};仅在首屏副标题上使用 {typography.subtitle}
  6. 保持 {colors.primary} 稀缺——如果每个视口出现一个以上橙色元素,问问其中一个是否应该改为 {colors.surface-dark}

已知缺口

  • 激活/按下的视觉状态仅为 button-primary-pressed 记录;其他组件依赖聚焦环({colors.ring-focus})进行交互反馈,该环未提取为按组件变体。
  • 模型 playground / try-this-model 交互表面(已登录功能)超出范围;仅记录公共营销画布。
  • 仪表板 / 计费 / API 密钥管理表面未提取——它们位于身份验证之后。
  • 首页首屏插画("workbench 上的 tinkerer")被视为装饰艺术,而非系统组件;复制它需要定制插画而非 token。