OpenCode AI

A terminal-native marketing system rendered entirely in Berkeley Mono — every word on the page, from the hero headline down to the footer fine print, is monospaced. The page itself reads like a manpage or a static-site README: warm cream canvas (`#fdfcfc`), nearly-black ink (`#201d1d`), 4px-radius rectangles for the few interactive elements, and bracketed `[+]`/`[-]` ASCII markers used as bullets.

Homepage Example

OpenCode AI
Features About Sign Up Free

Welcome to OpenCode AI

A modern, elegant design system built for the digital age.

Get Started Learn More
Pixel Perfect
Every element is carefully crafted for consistency across all platforms.
Design Tokens
A comprehensive token system that makes scaling effortless.
Built for Teams
Collaborate seamlessly using a shared design language.
© 2026 OpenCode AI

Color Palette (27)

primary#201d1d
on-primary#fdfcfc
ink#201d1d
ink-deep#0f0000
charcoal#302c2c
body#424245
mute#646262
stone#6e6e73
ash#9a9898
canvas#fdfcfc
surface-soft#f8f7f7
surface-card#f1eeee
surface-dark#201d1d
surface-dark-elevated#302c2c
hairline-strong#646262
on-dark#fdfcfc
on-dark-mute#9a9898
accent#007aff
accent-hover#0056b3
accent-active#004085
warning#ff9f0a
warning-hover#cc7f08
warning-active#995f06
danger#ff3b30
danger-hover#d70015
danger-active#a50011
success#30d158

Typography (8)

OpenCode AI
display-xl38px · weight 700
OpenCode AI
heading-md16px · weight 700
OpenCode AI
body-md16px · weight 400
OpenCode AI
body-strong16px · weight 500
OpenCode AI
body-tight16px · weight 500
OpenCode AI
link-md16px · weight 400
OpenCode AI
button-md16px · weight 500
OpenCode AI
caption-md14px · weight 400

Components (21)

button-primary
button-primary
button-primary-active
button-primary-active
button-secondary
button-secondary
button-tab
button-tab
button-tab-active
button-tab-active
button-disabled
button-disabled
badge-news
badge-news
text-input
text-input
text-input-focused
text-input-focused
textarea
textarea
install-snippet
install-snippet
hero-tui-mockup
hero-tui-mockup
tui-prompt-row
tui-prompt-row
list-row
list-row
faq-row
faq-row
testimonial-row
testimonial-row
chart-tile
chart-tile
primary-nav
primary-nav
footer-section
footer-section
link-inline
link-inline
badge-section-label
badge-section-label

Border Radius

none (0px)
sm (4px)
full (9999px)

Design Philosophy

Overview

OpenCode's marketing site is rendered entirely in Berkeley Mono — every word on the page, from the 38px hero headline down to the 14px footer fine print, sits in the same monospaced face. The visual identity comes from that single typographic decision: the page reads like a manpage or a static-site README, complete with bracketed `[+]` / `[-]` / `[x]` ASCII markers used in place of icons or bullets, and a wordmark rendered as block-pixel ASCII art at the top of the nav. There is no sans-serif anywhere, no display face, no italics, no decorative ornament — the system is one font and one weight away from being a 1990s `whatis` page rendered at modern resolutions.

The chrome is austere: warm cream canvas (`{colors.canvas}` — `#fdfcfc` with a faint blush), nearly-black ink (`{colors.ink}` — `#201d1d`), and a 4-tier neutral gray ladder for body, metadata, and disabled text. Cards don't exist as raised surfaces — sections are just hairline-bordered text blocks (`{colors.hairline}` 1px) sitting directly on the canvas with `{spacing.section}` (96px) air between them. The single "visual" moment in the entire system is a full-bleed dark hero card (`{colors.surface-dark}` — true near-black) that mocks up the OpenCode TUI itself: a terminal frame with `tab` / `ctrl-p` keybinding hints, a "Build" command line, and the OpenCode wordmark rendered as a pixel-block ASCII title.

The semantic palette is unusual for a brand-marketing site: it ships the full Apple Human Interface Guidelines accent ramp — `{colors.accent}` (Apple Blue `#007aff`), `{colors.danger}` (`#ff3b30`), `{colors.warning}` (`#ff9f0a`), `{colors.success}` (`#30d158`) plus their hover/active deepenings — even though the marketing surfaces themselves only use these colors in the dark hero TUI mockup as syntax-highlight stand-ins. The wider palette belongs to the in-product TUI; the marketing pages mostly stay in monochrome.

**Key Characteristics:**

  • 100% Berkeley Mono typography across every text role — no sans-serif fallback anywhere in the chrome
  • Warm cream `{colors.canvas}` (#fdfcfc) as the only body background — no surface alternation across sections
  • Single dark surface (`{colors.surface-dark}` — #201d1d) reserved exclusively for the hero TUI mockup
  • 4px radius (`{rounded.sm}`) on every interactive element; sections themselves are sharp rectangles bordered in 1px hairline
  • ASCII bracket markers (`[+]`, `[-]`, `[x]`) used as bullet glyphs in feature lists and FAQ rows
  • Block-pixel ASCII wordmark in the primary nav and inside the hero TUI — the brand identity is its own ASCII art
  • 96px `{spacing.section}` rhythm between every section, with no decorative dividers; only thin 1px `{colors.hairline}` rules separate content blocks

Colors

> **Source pages:** `/` (home), `/zen`, `/enterprise`. The chrome palette is identical across all three.

Brand & Accent

  • **Ink** (`{colors.primary}` / `{colors.ink}` — `#201d1d`): the brand's only "color." Headlines, body text, primary CTA fill, nav links, and every solid icon. Treats nearly-black as the brand color rather than pure black to keep type readable on the warm cream canvas.
  • **Ink Deep** (`{colors.ink-deep}` — `#0f0000`): pressed-state for the primary CTA. Carries a faint red undertone matching the canvas's warm cast.
  • **Cream** (`{colors.canvas}` — `#fdfcfc`): the brand's signature warm white. Used for every page body, every card surface, the on-primary text color, and the ASCII wordmark fill on dark.

Surface

  • **Canvas Cream** (`{colors.canvas}` — `#fdfcfc`): every page body, every card.
  • **Soft Surface** (`{colors.surface-soft}` — `#f8f7f7`): text-input default background, testimonial row fill, alternating row tint.
  • **Surface Card** (`{colors.surface-card}` — `#f1eeee`): install-snippet pill, disabled button fill, slightly-elevated section row.
  • **Surface Dark** (`{colors.surface-dark}` — `#201d1d`): the hero TUI mockup background and the dark CTA pill on the home page. Identical to `{colors.ink}` — the brand uses one near-black for both text and dark surfaces.
  • **Surface Dark Elevated** (`{colors.surface-dark-elevated}` — `#302c2c`): the prompt-row inside the hero TUI mockup, one notch lighter than the dark surface itself.
  • **Hairline** (`{colors.hairline}` — `rgba(15,0,0,0.12)`): 1px section divider. The translucent warm tint matches the cream canvas's undertone.
  • **Hairline Strong** (`{colors.hairline-strong}` — `#646262`): tab strip's bottom rule and stronger inline divider.

Text

  • **Ink** (`{colors.ink}` — `#201d1d`): headlines, body text, primary nav links, button text on light surfaces.
  • **Charcoal** (`{colors.charcoal}` — `#302c2c`): subtly softer body where pure ink is too heavy.
  • **Body** (`{colors.body}` — `#424245`): default paragraph text and FAQ answers.
  • **Mute** (`{colors.mute}` — `#646262`): tab labels (default state), metadata, footer link text, in-list secondary annotations.
  • **Stone** (`{colors.stone}` — `#6e6e73`): least-emphasis utility text, breadcrumb separators.
  • **Ash** (`{colors.ash}` — `#9a9898`): disabled text and secondary annotation in dark TUI mockup, also TUI mockup secondary color.

Semantic

The full Apple Human Interface Guidelines semantic ramp ships with the system. On marketing pages these colors appear primarily inside the hero TUI mockup as syntax-highlight stand-ins; in the in-product TUI they carry their conventional meaning.

  • **Accent** (`{colors.accent}` — `#007aff`): primary informational signal, in-product link color, TUI command highlight.
  • **Accent Hover** (`{colors.accent-hover}` — `#0056b3`): pressed informational link.
  • **Accent Active** (`{colors.accent-active}` — `#004085`): deeply-pressed informational state.
  • **Danger** (`{colors.danger}` — `#ff3b30`): destructive confirmation, error state.
  • **Danger Hover** (`{colors.danger-hover}` — `#d70015`): pressed destructive.
  • **Danger Active** (`{colors.danger-active}` — `#a50011`): deeply-pressed destructive.
  • **Warning** (`{colors.warning}` — `#ff9f0a`): caution callouts.
  • **Warning Hover** (`{colors.warning-hover}` — `#cc7f08`): pressed caution.
  • **Warning Active** (`{colors.warning-active}` — `#995f06`): deeply-pressed caution.
  • **Success** (`{colors.success}` — `#30d158`): positive confirmation, in-TUI success indicator.

Typography

Font Family

**Berkeley Mono** is the proprietary monospaced face used across every text role in the system. It carries weights 400 (regular), 500 (medium), and 700 (bold) and falls back through a long monospace stack — IBM Plex Mono → ui-monospace → SFMono-Regular → Menlo → Monaco → Consolas → Liberation Mono → Courier New.

The single-font decision is the brand. There is no display face, no body sans, no italic alternative, and no fallback to a proportional font anywhere — even the legal copyright row uses Berkeley Mono at 14px. This is the most aggressive typographic restraint of any site in the marketing-tools category: OpenCode's identity is "the marketing page is a man page."

Hierarchy

| Token | Size | Weight | Line Height | Letter Spacing | Use |

|---|---|---|---|---|---|

| `{typography.display-xl}` | 38px | 700 | 1.5 | 0 | Hero headline ("The open source AI coding agent") |

| `{typography.heading-md}` | 16px | 700 | 1.5 | 0 | Section label ("What is OpenCode?", "FAQ", "Built for privacy first") |

| `{typography.body-md}` | 16px | 400 | 1.5 | 0 | Body copy, paragraph text, list-row text, install-snippet code |

| `{typography.body-strong}` | 16px | 500 | 1.5 | 0 | Inline emphasis, primary nav link, tab-label active |

| `{typography.body-tight}` | 16px | 500 | 1 | 0 | Compact label rendered without breathing room |

| `{typography.link-md}` | 16px | 400 | 1.5 | 0 | Inline anchor link in body prose |

| `{typography.button-md}` | 16px | 500 | 2 | 0 | Every button label across the system |

| `{typography.caption-md}` | 14px | 400 | 2 | 0 | Footer link text, badge label, copyright row, chart caption |

Principles

The hierarchy is built almost entirely from size and weight contrast on a single face. The display headline (38px / 700) and the heading-md label (16px / 700) share a weight; the difference is just size. Body and link share size, weight, and line-height — only context distinguishes them. Buttons get a deliberately tall line-height (2.0) so labels feel calmly spaced inside the 4px-radius rectangle.

Note on Font Substitutes

Berkeley Mono is a paid commercial font. Open-source substitutes that approximate its metrics within ~3% at body sizes:

  • **JetBrains Mono** — closest match for stroke contrast and x-height; pair at weights 400 / 500 / 700.
  • **IBM Plex Mono** — official secondary fallback in the documented font stack; slightly more open counters but matches line-height behavior.
  • **Geist Mono** — modern alternative with similar geometric construction.

When substituting, line-height behavior is preserved by keeping `lineHeight: 1.5` for body and `lineHeight: 2` for buttons — adjusting weight is rarely needed.

Layout

Spacing System

  • **Base unit:** 8px (with finer 1/2/4px steps available for tight inline gaps).
  • **Tokens (front matter):** `{spacing.xxs}` (1px) · `{spacing.xs}` (4px) · `{spacing.sm}` (8px) · `{spacing.md}` (12px) · `{spacing.lg}` (16px) · `{spacing.xl}` (24px) · `{spacing.xxl}` (32px) · `{spacing.section}` (96px).
  • **Universal section rhythm:** every page in the set uses `{spacing.section}` (96px) as the vertical gap between major content blocks. This is the largest spacing token in the system and is the dominant layout cue across the home, `/zen`, and `/enterprise` pages.
  • **Section internal padding:** content rows inside a section sit at `{spacing.lg}` (16px) vertical with no horizontal padding — text starts flush at the section's left edge.

Grid & Container

  • **Max width:** ~960px content column for body sections; the dark hero TUI mockup is full-bleed within an outer ~1100px content frame.
  • **Two-column split:** `/enterprise` pairs a left text block (~360px wide) with a right-aligned form column (~480px wide). The home page is single-column reading.
  • **Footer:** 5-up horizontal link row (GitHub / Docs / Changelog / Discord / X) at desktop, collapsing to 2-up at tablet and 1-up at mobile.

Whitespace Philosophy

Whitespace is structural and generous. Sections sit 96px apart with no decorative dividers between them — the `{colors.hairline}` 1px rule is the only signal of separation. Inside a section, content is left-flush against the column edge with no internal indentation; bullets use ASCII bracket prefixes (`[+]` / `[-]`) instead of indent-based layout. The result is a page that feels like a printed code listing rather than a styled marketing layout.

Elevation & Depth

| Level | Treatment | Use |

|---|---|---|

| 0 — Flat | No border, no shadow | Default for body sections, list rows, hero text block, footer |

| 1 — Hairline rule | 1px solid `{colors.hairline}` (translucent warm tint) | Section dividers, between major content blocks |

| 2 — Hairline strong | 1px solid `{colors.hairline-strong}` | Tab strip bottom rule, in-list emphasized divider |

| 3 — Inverted dark | `{colors.surface-dark}` fill | Hero TUI mockup, dark CTA pill — the system's only "elevated" surface uses color, not shadow |

There are no drop shadows in the system. Nothing lifts, nothing floats. The only way an element registers as "above" another is the dark surface used in the hero mockup.

Decorative Depth

Depth comes from typography density and the single dark TUI mockup, not from CSS effects:

  • **ASCII block-pixel wordmark** — the OpenCode brand name rendered as a 5-row block of monospaced character cells, used in the primary nav and as the centerpiece of the hero TUI mockup.
  • **Hero TUI mockup** — full-bleed `{colors.surface-dark}` rectangle containing a faux terminal interface: ASCII wordmark, a `tui-prompt-row` showing a Build command line, and `tab switch agent` / `ctrl-p commands` keybinding hints in `{colors.ash}` at the bottom edge.
  • **Chart tiles** — three thin-line ASCII charts inside the home page's "open source AI coding agent" stat block, with abstract dotted/sparse-line plots in `{colors.body}` against the cream canvas. Captions sit beneath in `{typography.caption-md}` (`Fig 1. 150K GitHub Stars`, `Fig 2. 850 Contributors`, `Fig 3. 6.5M Monthly Devs`).

Shapes

Border Radius Scale

| Token | Value | Use |

|---|---|---|

| `{rounded.none}` | 0px | Sections, hero TUI mockup, primary nav, footer, list rows — every container that isn't a button |

| `{rounded.sm}` | 4px | Every interactive element — primary CTA, secondary CTA, text inputs, install snippet, badges, prompt rows |

| `{rounded.full}` | 9999px | Avatar circles in testimonials |

The radius vocabulary is two values: 4px for interactive elements and 0px for everything else. Avatar circles in testimonial rows are the only fully-rounded element in the system.

Photography Geometry

There is no photography. Visual elements are limited to:

  • **ASCII block-pixel wordmark** in the nav and hero TUI mockup.
  • **Inline ASCII charts** inside the stat-block section — abstract sparse-line and dotted plots without specific data points.
  • **Avatar dots** (~32px) inside testimonial rows on `/zen` — flat colored circles in `{rounded.full}`.
  • **In-product icons** (kbd, A+, ⊕, ↻, K, Z) rendered as small monospaced character glyphs, not bitmaps or SVG.

Components

> **No hover states documented** per system policy. Each spec covers Default and Active/Pressed only.

Buttons

**`button-primary`** — the universal OpenCode CTA

  • Background `{colors.primary}`, text `{colors.on-primary}`, type `{typography.button-md}`, padding `4px 20px`, height ~36px, rounded `{rounded.sm}` (4px).
  • Used for "Download" (top nav), "Get started with Zen", "Send" (enterprise contact form), "Subscribe" (newsletter footer), "Read docs →".
  • Pressed state lives in `button-primary-active` — background drops to `{colors.ink-deep}`.

**`button-secondary`** — outlined alternative

  • Background `{colors.canvas}`, text `{colors.ink}`, 1px solid `{colors.hairline-strong}` border, type `{typography.button-md}`, padding `4px 20px`, rounded `{rounded.sm}`.
  • Lower-emphasis CTA — appears beside the primary fill where two actions are paired.

**`button-tab`** + **`button-tab-active`** — install-tab strip

  • Default: transparent background, text `{colors.mute}`, type `{typography.button-md}`, padding `8px 16px`, rounded `{rounded.none}`.
  • Active: same surface, text `{colors.ink}`, with a 2px `{colors.ash}` bottom underline indicating selection.
  • Used in the install-method tab strip on the home page (`curl` / `npm` / `bun` / `brew` / `yay`).

**`button-disabled`**

  • Background `{colors.surface-card}`, text `{colors.ash}`, rounded `{rounded.sm}`.

Badges & Chips

**`badge-news`** — small dark chip in the news/announcement strip

  • Background `{colors.surface-dark}`, text `{colors.on-dark}`, type `{typography.caption-md}`, padding `2px 8px`, rounded `{rounded.sm}`.
  • Sits inline with body copy as a "News" / "Beta" / "Live now" tag on the home page above the hero headline.

**`badge-section-label`** — bracketed section header

  • Background transparent, text `{colors.ink}`, type `{typography.heading-md}`, rounded `{rounded.none}`.
  • Renders as a bare `**Heading**` line above a 1px `{colors.hairline}` rule with no chip background — but the way the text reads ("[+]", "[x]", `What is OpenCode?`) makes it function as a label component.

Inputs & Forms

**`text-input`** + **`text-input-focused`**

  • Default: background `{colors.surface-soft}`, text `{colors.ink}`, 1px solid `{colors.hairline}`, type `{typography.body-md}`, padding `8px 12px`, height ~40px, rounded `{rounded.sm}`.
  • Focused: background flips to `{colors.canvas}`, border becomes 1px solid `{colors.ink}` (the canvas's flat focus signal — no halo, no glow).
  • Used for every contact-form field on `/enterprise` (Full name, Role, Company, Company email, Phone number) and the newsletter email field at the home page footer.

**`textarea`**

  • Background `{colors.surface-soft}`, text `{colors.ink}`, 1px solid `{colors.hairline}`, type `{typography.body-md}`, padding `12px`, rounded `{rounded.sm}`.
  • "What problem are you trying to solve?" multi-line textarea on `/enterprise`.

**`install-snippet`** — the home page's signature install code block

  • Background `{colors.surface-card}` (`#f1eeee`), text `{colors.ink}` rendered in `{typography.body-md}` (already monospaced — Berkeley Mono), padding `12px 16px`, rounded `{rounded.sm}`.
  • Contains the literal `curl -fsSL https://opencode.ai/install | bash` command with a small copy-icon at the right edge. Sits below the install-method tab strip.

Cards & Containers

**`hero-tui-mockup`** — the home page's signature TUI preview

  • Container: full-bleed `{colors.surface-dark}` (~near-black), padding `64px 32px`, rounded `{rounded.none}`.
  • Contents (top → bottom): ASCII block-pixel "OPENCODE" wordmark centered in `{colors.on-dark}`; a `{component.tui-prompt-row}` showing a "Build" command line with model selector text; an `tab switch agent ctrl-p commands` keybinding hint row at the bottom in `{colors.ash}`.

**`tui-prompt-row`** — the inset command line inside the TUI mockup

  • Background `{colors.surface-dark-elevated}` (`#302c2c`), text `{colors.on-dark}` in `{typography.body-md}`, padding `8px 12px`, rounded `{rounded.sm}`.
  • Renders an inline command (`Build Claude Opus 4.5 OpenCode Zen`) with a leading vertical pipe and the model name styled as a bracketed token.

**`list-row`** — feature/benefit row with ASCII bracket bullet

  • Background `{colors.canvas}`, text `{colors.body}` in `{typography.body-md}`, padding `8px 0`.
  • Each row begins with a `[+]` / `[-]` / `[x]` ASCII marker followed by a bold label and a regular description: e.g., `[+] LSP enabled Automatically loads the right LSPs for the IDE`. The bracket marker is part of the text content, not a separate icon.

**`faq-row`** — FAQ entry with bracket toggle

  • Background `{colors.canvas}`, text `{colors.ink}` in `{typography.body-md}`, padding `12px 0`, with a 1px `{colors.hairline}` bottom rule.
  • Each row leads with `+` / `−` ASCII markers indicating expand/collapse state. Always rendered as plain text rows — no chevron icons, no animated accordion chrome.

**`testimonial-row`** — `/zen` peer-quote row

  • Background `{colors.surface-soft}`, text `{colors.body}` in `{typography.body-md}`, padding `16px 20px`, rounded `{rounded.sm}`.
  • Layout: a 32px avatar circle (`{rounded.full}`) at left, name + role + company in `{typography.body-strong}` on the first line, quote in `{typography.body-md}` `{colors.body}` on the second line.

**`chart-tile`** — the stat-block sparse-line chart

  • Background `{colors.canvas}`, text `{colors.body}` in `{typography.caption-md}`, rounded `{rounded.none}`, padding `16px`.
  • Contains an inline SVG/CSS-drawn ASCII-style sparse-line plot (dotted, abstract — never specific data points) with a `Fig N. <stat label>` caption beneath in `{colors.mute}`.

Navigation

**`primary-nav`**

  • Background `{colors.canvas}`, text `{colors.ink}` in `{typography.body-strong}`, height ~56px, rounded `{rounded.none}`, with a 1px `{colors.hairline}` bottom rule.
  • Layout (desktop): block-pixel ASCII OpenCode wordmark at left (~120×24px), nav links cluster center-right ("GitHub [150K] · Docs · Zen · Go · Enterprise"), `{component.button-primary}` "Download" CTA at the far right with a small download glyph.

**Top Nav (Mobile)**

  • ASCII wordmark stays at left, nav links collapse into a hamburger drawer at the right. The Download CTA remains visible at every breakpoint.

Footer

**`footer-section`**

  • Background `{colors.canvas}`, text `{colors.body}` in `{typography.caption-md}`, padding `32px 0`, with a 1px `{colors.hairline}` top rule.
  • Top row: 5-column horizontal link grid (GitHub [150K] · Docs · Changelog · Discord · X), each rendered as a centered cell separated by 1px `{colors.hairline}` vertical rules.
  • Bottom row: `©2026 Anomaly` copyright at left, `Brand · Privacy · Terms · English ▼` utility cluster at right, all in `{typography.caption-md}` `{colors.mute}`.

Inline

**`link-inline`** — body-prose anchor link

  • `{colors.ink}` text with underline. The brand's only link affordance — even links inside body paragraphs use ink color rather than `{colors.accent}` blue. Apple Blue is reserved for the in-product TUI.

Do's and Don'ts

Do

  • Render every text role in Berkeley Mono. The single-font decision is the entire identity.
  • Keep `{colors.canvas}` (`#fdfcfc`) as the only body background. Don't introduce gray section bands.
  • Use ASCII bracket markers (`[+]`, `[-]`, `[x]`, `+`, `−`) as bullets, toggles, and section glyphs. They are the brand's only iconography.
  • Anchor the dark `{component.hero-tui-mockup}` exactly once per landing page as the hero centerpiece. Never use the dark surface for body content.
  • Reserve `{colors.accent}` (Apple Blue) and the rest of the semantic ramp for in-TUI states; marketing chrome stays monochrome.
  • Use `{rounded.sm}` (4px) on every interactive element and `{rounded.none}` (0px) on every container.
  • Stack content sections at `{spacing.section}` (96px) rhythm with only 1px `{colors.hairline}` rules between them.

Don't

  • Don't introduce a sans-serif body font, a display face, or an italic style. Berkeley Mono carries everything.
  • Don't add drop shadows, gradients, or atmospheric backgrounds. The system is flat-on-cream.
  • Don't replace the ASCII bracket markers with SVG icons. The brackets are the icons.
  • Don't use the semantic accent ramp (`{colors.accent}`, `{colors.warning}`, `{colors.danger}`, `{colors.success}`) on marketing CTAs. They belong to the in-product TUI.
  • Don't pad cards with 24px+ internal padding. List rows sit at 8px vertical; FAQ rows at 12px.
  • Don't render the OpenCode wordmark as a vector logo. It is always block-pixel ASCII.
  • Don't fill the hero TUI mockup with photography or illustration. It is text-only and always shows a faux terminal command line.

Responsive Behavior

Breakpoints

| Name | Width | Key Changes |

|---|---|---|

| desktop-large | 1280px+ | Default — 960px content column, 5-up footer link grid |

| desktop | 1024px | Same layout; nav remains horizontal |

| tablet | 850px | Footer collapses to 2-up grid; `/enterprise` two-column form stacks |

| tablet-narrow | 768px | Primary nav becomes hamburger drawer; Download CTA stays visible |

| mobile | 640px | Single-column everything; hero display drops 38px → ~28px; section padding tightens |

Touch Targets

All interactive elements meet WCAG AA at the ~36–40px height range. `{component.button-primary}` sits at ~36px with 20px horizontal padding. `{component.text-input}` and `{component.textarea}` sit at ~40px. `{component.button-tab}` rows in the install-method strip sit at ~32–36px depending on label length but extend to a full 44px tappable cell via inline padding. Footer links use `{typography.caption-md}` (14px) but receive ~28px line-height (caption-md is 2.0) plus 8px vertical padding for a comfortable ~44px tappable row.

Collapsing Strategy

  • **Primary nav:** desktop horizontal cluster → tablet-narrow hamburger drawer at 768px. The dark "Download" CTA stays visible at all widths.
  • **Hero TUI mockup:** maintains its full-bleed dark surface at every breakpoint; the ASCII wordmark scales proportionally and the keybinding-hint row may wrap to two lines on narrow screens.
  • **Install snippet + tab strip:** desktop fixed-width pill → mobile full-width pill with horizontal scroll on the tab strip if labels overflow.
  • **Footer:** 5-up horizontal link grid → 2-up at tablet → 1-up at mobile (each link becomes a full-width row).
  • **`/enterprise` two-column layout:** desktop 50/50 → tablet stacks to single-column with the form below the text block.
  • **Section padding:** `{spacing.section}` (96px) desktop → 64px tablet → 48px mobile.
  • **Hero headline:** `{typography.display-xl}` (38px) at desktop, scaling to ~28px at mobile, line-height holding at 1.5.

Image Behavior

There are no raster images in the system aside from the favicon and OG share image. Every visual element — wordmarks, charts, icons — is rendered as type or inline SVG and scales without aspect-ratio considerations.

Iteration Guide

1. Focus on ONE component at a time. Pull its YAML entry and verify every property resolves.

2. Reference component names and tokens directly (`{colors.ink}`, `{component.hero-tui-mockup}`, `{rounded.sm}`) — 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 (`-active`, `-disabled`) — do not bury them inside prose.

5. Default body to `{typography.body-md}`; reach for `{typography.body-strong}` for emphasis; reserve `{typography.display-xl}` strictly for the page-top hero headline.

6. Keep `{colors.surface-dark}` scarce — at most one full-bleed dark mockup per page. The dark surface is a narrative device, not a chrome treatment.

7. When introducing a new component, ask whether it can be expressed with the existing ASCII-bracket + 4px-radius + Berkeley-Mono vocabulary before adding new tokens. The system's strength is that it almost never needs new ones.

Known Gaps

  • **Mobile screenshots not captured** — responsive behavior synthesizes OpenCode's mobile pattern (hamburger drawer, single-column, footer accordion) from desktop evidence and the breakpoint stack.
  • **Hover states not documented** by system policy.
  • **In-product TUI screenshots** beyond the marketing hero mockup are not in the captured set; the actual `opencode` terminal interface (full keybindings, panels, status bar) is not documented here.
  • **`/go` page** not extracted — the marketing page for the Go SDK likely shares the same chrome but introduces code-sample blocks not documented above.
  • **Form validation state styling** (success / error inline messages) not present in the captured surfaces.

개요

OpenCode의 마케팅 사이트는 전체적으로 Berkeley Mono로 렌더링됩니다. 38px 영웅 헤드라인부터 14px 바닥글 작은 글씨까지 페이지의 모든 단어가 동일한 고정 폭 글꼴에 표시됩니다. 시각적 아이덴티티는 단일 인쇄상의 결정에서 비롯됩니다. 페이지는 맨페이지나 정적 사이트 README처럼 읽혀지며, 아이콘이나 글머리 기호 대신 사용되는 괄호 `[+]` / `[-]` / `[x]` ASCII 마커로 완성되며, 탐색 상단에 블록 픽셀 ASCII 아트로 렌더링된 워드마크가 있습니다. 어디에도 산세리프가 없고, 표시면도, 이탤릭체도, 장식 장식도 없습니다. 이 시스템은 현대 해상도로 렌더링된 1990년대 'whatis' 페이지와는 하나의 글꼴과 하나의 무게만 가지고 있습니다.

크롬은 소박합니다. 따뜻한 크림색 캔버스(`{colors.canvas}` - 희미한 홍조가 있는 `#fdfcfc`), 검정색에 가까운 잉크(`{colors.ink}` - `#201d1d`), 본문, 메타데이터 및 비활성화된 텍스트를 위한 4단계 중성 회색 사다리입니다. 카드는 솟아오른 표면으로 존재하지 않습니다. 섹션은 캔버스에 바로 놓여 있고 그 사이에 `{spacing.section}`(96px)의 공기가 있는 가는 선으로 둘러싸인 텍스트 블록(`{colors.hairline}` 1px)입니다. 전체 시스템의 단일 "시각적" 순간은 OpenCode TUI 자체를 흉내내는 풀 블리드 다크 히어로 카드(`{colors.surface-dark}` — 검은색에 가까운 실제)입니다. 즉, `tab` / `ctrl-p` 키 바인딩 힌트가 있는 터미널 프레임, "빌드" 명령줄 및 픽셀 블록 ASCII 제목으로 렌더링된 OpenCode 워드마크입니다.

시맨틱 팔레트는 브랜드 마케팅 사이트에서는 흔하지 않습니다. 전체 Apple 휴먼 인터페이스 지침 악센트 램프 — `{colors.accent}`(Apple Blue `#007aff`), `{colors.danger}`(`#ff3b30`), `{colors.warning}`(`#ff9f0a`), `{colors.success}`(`#30d158`) 및 해당 호버/활성 심화를 제공합니다. — 마케팅 표면 자체는 다크 히어로 TUI 모형에서 구문 강조 표시로 이러한 색상만 사용하지만. 더 넓은 팔레트는 제품 내 TUI에 속합니다. 마케팅 페이지는 대부분 흑백으로 유지됩니다.

**주요 특징:**

  • 모든 텍스트 역할에 100% Berkeley Mono 타이포그래피 - 크롬 어디에도 산세리프 대체가 없습니다.
  • 유일한 본문 배경인 따뜻한 크림색 `{colors.canvas}`(#fdfcfc) — 섹션 전체에 걸쳐 표면 교대 없음
  • 영웅 TUI 모형 전용으로 예약된 단일 어두운 표면(`{colors.surface-dark}` — #201d1d)
  • 모든 대화형 요소의 반경 4px(`{rounded.sm}`) 섹션 자체는 1px 헤어라인으로 둘러싸인 날카로운 직사각형입니다.
  • 기능 목록 및 FAQ 행에서 글머리 기호 문자로 사용되는 ASCII 브래킷 마커(`[+]`, `[-]`, `[x]`)
  • 기본 탐색 및 영웅 TUI 내부의 블록 픽셀 ASCII 워드마크 — 브랜드 아이덴티티는 자체 ASCII 아트입니다.
  • 장식 구분선 없이 모든 섹션 사이에 96px `{spacing.section}` 리듬이 있습니다. 얇은 1픽셀 `{colors.hairline}` 규칙만 콘텐츠 블록을 구분합니다.

색상

> **소스 페이지:** `/`(홈), `/zen`, `/enterprise`. 크롬 팔레트는 세 가지 모두 동일합니다.

브랜드 및 액센트

  • **잉크**(`{colors.primary}` / `{colors.ink}` — `#201d1d`): 브랜드의 유일한 "색상"입니다. 헤드라인, 본문 텍스트, 기본 CTA 채우기, 탐색 링크 및 모든 단색 아이콘. 따뜻한 크림색 캔버스에 활자 가독성을 유지하기 위해 순수 검정색이 아닌 거의 검정색을 브랜드 색상으로 취급합니다.
  • **Ink Deep** (`{colors.ink-deep}` — `#0f0000`): 기본 CTA의 누름 상태입니다. 캔버스의 따뜻한 색조와 어울리는 희미한 붉은 색조를 띠고 있습니다.
  • **크림** (`{colors.canvas}` — `#fdfcfc`): 브랜드의 시그니처 따뜻한 흰색. 모든 페이지 본문, 모든 카드 표면, 기본 텍스트 색상 및 어두운 ASCII 워드마크 채우기에 사용됩니다.

표면

  • **캔버스 크림** (`{colors.canvas}` — `#fdfcfc`): 모든 페이지 본문, 모든 카드.
  • **부드러운 표면**(`{colors.surface-soft}` — `#f8f7f7`): 텍스트 입력 기본 배경, 추천 행 채우기, 교대 행 색조.
  • **Surface 카드**(`{colors.surface-card}` — `#f1eeee`): 설치 조각 알약, 비활성화된 단추 채우기, 약간 높은 섹션 행.
  • **Surface Dark** (`{colors.surface-dark}` — `#201d1d`): 히어로 TUI 모형 배경과 홈페이지의 어두운 CTA 알약입니다. `{colors.ink}`와 동일합니다. 브랜드는 텍스트와 어두운 표면 모두에 검정색에 가까운 색상을 사용합니다.
  • **Surface Dark Elevated** (`{colors.surface-dark-elevated}` — `#302c2c`): Hero TUI 모형 내부의 프롬프트 행으로, 어두운 표면 자체보다 한 단계 더 밝습니다.
  • **헤어라인** (`{colors.hairline}` — `rgba(15,0,0,0.12)`): 1px 섹션 구분선. 반투명한 따뜻한 틴트가 크림 캔버스의 언더톤과 잘 어울립니다.
  • **Hairline Strong** (`{colors.hairline-strong}` — `#646262`): 탭 스트립의 하단 규칙 및 더 강력한 인라인 구분선입니다.

텍스트

  • **잉크**(`{colors.ink}` — `#201d1d`): 헤드라인, 본문 텍스트, 기본 탐색 링크, 밝은 표면의 버튼 텍스트.
  • **차콜**(`{colors.charcoal}` — `#302c2c`): 순수 잉크가 너무 무거워서 미묘하게 부드러운 바디입니다.
  • **본문**(`{colors.body}` — `#424245`): 기본 단락 텍스트 및 FAQ 답변입니다.
  • **음소거**(`{colors.mute}` — `#646262`): 탭 레이블(기본 상태), 메타데이터, 바닥글 링크

概要

OpenCode のマーケティング サイトは完全に Berkeley Mono でレンダリングされています。38 ピクセルのヒーローの見出しから 14 ピクセルのフッターの細字まで、ページ上のすべての単語が同じ等幅の面に収まります。視覚的なアイデンティティは、その 1 つのタイポグラフィーの決定から生まれます。ページはマンページまたは静的サイトの README のように見え、アイコンや箇条書きの代わりに括弧で囲まれた `[+]` / `[-]` / `[x]` の ASCII マーカーが使用され、ナビゲーションの上部にはブロック ピクセルの ASCII アートとしてレンダリングされたワードマークが付いています。サンセリフはどこにもなく、表示面も斜体も装飾もありません。このシステムは、現代の解像度でレンダリングされた 1990 年代の「whatis」ページとは、フォント 1 つ、ウェイト 1 つです。

クロムは厳格です。温かみのあるクリーム色のキャンバス (`{colors.canvas}` — `#fdfcfc` にかすかな赤みがかった色)、黒に近いインク (`{colors.ink}` — `#201d1d`)、および本文、メタデータ、および無効なテキスト用の 4 層のニュートラル グレーのはしごです。カードは隆起した表面としては存在しません。セクションは、間に `{spacing.section}` (96 ピクセル) の空気を挟んでキャンバス上に直接置かれている、単なるヘアラインで囲まれたテキスト ブロック (`{colors.hairline}` 1 ピクセル) です。システム全体における単一の「視覚的」瞬間は、OpenCode TUI 自体を模倣するフルブリードのダーク ヒーロー カード (`{colors.surface-dark}` — 真に黒に近い) です。つまり、`tab` / `ctrl-p` キーバインディング ヒントを備えたターミナル フレーム、「Build」コマンド ライン、およびピクセル ブロック ASCII タイトルとしてレンダリングされた OpenCode ワードマークです。

セマンティック パレットは、ブランド マーケティング サイトとしては珍しいものです。完全な Apple ヒューマン インターフェイス ガイドラインのアクセント ランプ、`{colors.accent}` (Apple Blue `#007aff`)、`{colors.danger}` (`#ff3b30`)、`{colors.warning}` (`#ff9f0a`)、`{colors.success}` (`#30d158`) に加えて、ホバー/アクティブ深化 - たとえマーケティング サーフェス自体が構文ハイライトの代役としてダーク ヒーロー TUI モックアップでこれらの色を使用しているだけであっても。より広いパレットは製品内の TUI に属します。マーケティングページはほとんどモノクロのままです。

**主な特徴:**

  • すべてのテキスト役割にわたって 100% Berkeley Mono タイポグラフィー - クロムのどこにもサンセリフのフォールバックはありません
  • ボディの背景としてのみウォーム クリーム `{colors.canvas}` (#fdfcfc) を使用 - セクション間の表面の変更はありません
  • ヒーロー TUI モックアップ専用に予約された単一のダーク サーフェス (`{colors.surface-dark}` — #201d1d)
  • すべてのインタラクティブ要素の半径 4 ピクセル (`{rounded.sm}`)。セクション自体は 1px のヘアラインで囲まれた鋭い長方形です
  • 機能リストおよび FAQ 行で箇条書きグリフとして使用される ASCII 括弧マーカー (`[+]`、`[-]`、`[x]`)
  • プライマリ ナビゲーションとヒーロー TUI 内のブロックピクセル ASCII ワードマーク — ブランド アイデンティティは独自の ASCII アートです
  • 各セクション間の 96 ピクセルの「{spacing.section}」リズム。装飾的な仕切りはありません。細い 1 ピクセルの「{colors.hairline}」ルールのみがコンテンツ ブロックを分離します

> **ソース ページ:** `/` (home)、`/zen`、`/enterprise`。クロム パレットは 3 つすべてで同じです。

ブランドとアクセント

  • **インク** (`{colors.primary}` / `{colors.ink}` — `#201d1d`): ブランドの唯一の「色」。見出し、本文テキスト、プライマリ CTA フィル、ナビゲーション リンク、およびすべての実線アイコン。温かみのあるクリーム色のキャンバス上で文字を読みやすくするために、純粋な黒ではなくほぼ黒をブランドカラーとして扱います。
  • **インク ディープ** (`{colors.ink-deep}` — `#0f0000`): プライマリ CTA の押された状態。キャンバスの温かみのある色調にマッチする、ほのかな赤のトーンを持っています。
  • **クリーム** (`{colors.canvas}` — `#fdfcfc`): ブランドの特徴である温かみのある白。すべてのページ本文、すべてのカード表面、主なテキストの色、および暗い色の ASCII ワードマークの塗りつぶしに使用されます。

表面

  • **キャンバス クリーム** (`{colors.canvas}` — `#fdfcfc`): すべてのページ本文、すべてのカード。
  • **ソフト サーフェス** (`{colors.surface-soft}` — `#f8f7f7`): テキスト入力のデフォルト背景、推薦の行の塗りつぶし、交互の行の色合い。
  • **Surface Card** (`{colors.surface-card}` — `#f1eeee`): インストール スニペット ピル、無効なボタン塗りつぶし、わずかに高いセクション行。
  • **Surface Dark** (`{colors.surface-dark}` — `#201d1d`): ヒーロー TUI モックアップの背景と、ホームページ上のダーク CTA ピル。 「{colors.ink}」と同じ - このブランドは、テキストと暗い表面の両方に黒に近い色を使用しています。
  • **Surface Dark Elevated** (`{colors.surface-dark-elevated}` — `#302c2c`): ヒーロー TUI モックアップ内のプロンプト行で、ダーク サーフェス自体よりも 1 ノッチ明るくなります。
  • **ヘアライン** (`{colors.hairline}` — `rgba(15,0,0,0.12)`): 1 ピクセルのセクション分割線。半透明の温かみのある色合いがクリーム色のキャンバスのアンダートーンにマッチします。
  • **ヘアライン ストロング** (`{colors.hairline-strong}` — `#646262`): タブ ストリップの下部ルールとより強力なインライン ディバイダー。

テキスト

  • **インク** (`{colors.ink}` — `#201d1d`): 見出し、本文テキスト、プライマリ ナビゲーション リンク、ライト サーフェス上のボタン テキスト。
  • **Charcoal** (`{colors.charcoal}` — `#302c2c`): 純粋なインクでは重すぎるため、微妙に柔らかいボディです。
  • **本文** (`{colors.body}` — `#424245`): デフォルトの段落テキストと FAQ の回答。
  • **ミュート** (`{colors.mute}` — `#646262`): タブ ラベル (デフォルト状態)、メタデータ、フッター リンク