← All designs
AI

Ollama

An almost defiantly minimal documentation-first system that treats the home page like a Markdown README — paper-white canvas, 36px center-aligned heading, a single black pill CTA, an inline terminal install snippet, and a hand-drawn llama mascot as the only ornamental element. No gradient, no hero photography, no marketing pyrotechnics. The chrome is a tiny utility palette of pure black, pure white, and three neutral grays; every interactive element is fully rounded into a pill (`{rounded.full}`); typography is SF Pro Rounded for headings paired with system sans for body and ui-monospace for code. Pricing tiers, FAQs, and "your data stays yours" guarantees all sit on the same flat canvas inside thin-border cards — the system is the documentation, and the documentation is the system.

Color Tokens

#000000primary
#ffffffon-primary
#000000ink
#090909ink-deep
#525252charcoal
#737373body
#a3a3a3mute
#ffffffcanvas
#fafafasurface-soft
#ffffffsurface-card

version: alpha name: Ollama description: | An almost defiantly minimal documentation-first system that treats the home page like a Markdown README — paper-white canvas, 36px center-aligned heading, a single black pill CTA, an inline terminal install snippet, and a hand-drawn llama mascot as the only ornamental element. No gradient, no hero photography, no marketing pyrotechnics. The chrome is a tiny utility palette of pure black, pure white, and three neutral grays; every interactive element is fully rounded into a pill ({rounded.full}); typography is SF Pro Rounded for headings paired with system sans for body and ui-monospace for code. Pricing tiers, FAQs, and "your data stays yours" guarantees all sit on the same flat canvas inside thin-border cards — the system is the documentation, and the documentation is the system.

colors: primary: "#000000" on-primary: "#ffffff" ink: "#000000" ink-deep: "#090909" charcoal: "#525252" body: "#737373" mute: "#a3a3a3" canvas: "#ffffff" surface-soft: "#fafafa" surface-card: "#ffffff" hairline: "#e5e5e5" hairline-strong: "#d4d4d4" on-dark: "#ffffff" on-dark-mute: "rgba(255,255,255,0.7)" surface-dark: "#171717" focus-ring: "rgba(59,130,246,0.5)" link: "#000000" link-mute: "#737373" terminal-red: "#ff5f56" terminal-yellow: "#ffbd2e" terminal-green: "#27c93f"

typography: display-xl: fontFamily: SF Pro Rounded fontSize: 36px fontWeight: 500 lineHeight: 1.11 letterSpacing: 0 display-lg: fontFamily: SF Pro Rounded fontSize: 30px fontWeight: 500 lineHeight: 1.2 letterSpacing: 0 heading-lg: fontFamily: SF Pro Rounded fontSize: 24px fontWeight: 600 lineHeight: 1.33 letterSpacing: 0 heading-md: fontFamily: ui-sans-serif fontSize: 20px fontWeight: 500 lineHeight: 1.4 letterSpacing: 0 heading-sm: fontFamily: ui-sans-serif fontSize: 18px fontWeight: 500 lineHeight: 1.56 letterSpacing: 0 body-md: fontFamily: ui-sans-serif fontSize: 16px fontWeight: 400 lineHeight: 1.5 letterSpacing: 0 body-strong: fontFamily: ui-sans-serif fontSize: 16px fontWeight: 500 lineHeight: 1.5 letterSpacing: 0 body-sm: fontFamily: ui-sans-serif fontSize: 14px fontWeight: 400 lineHeight: 1.43 letterSpacing: 0 body-sm-strong: fontFamily: ui-sans-serif fontSize: 14px fontWeight: 500 lineHeight: 1.43 letterSpacing: 0 caption-sm: fontFamily: ui-sans-serif fontSize: 12px fontWeight: 400 lineHeight: 1.33 letterSpacing: 0 code-md: fontFamily: ui-monospace fontSize: 16px fontWeight: 400 lineHeight: 1.5 letterSpacing: 0 code-sm: fontFamily: ui-monospace fontSize: 14px fontWeight: 400 lineHeight: 1.43 letterSpacing: 0 button-md: fontFamily: ui-sans-serif fontSize: 14px fontWeight: 500 lineHeight: 1 letterSpacing: 0

rounded: none: 0px sm: 6px md: 8px lg: 12px full: 9999px

spacing: xxs: 2px xs: 4px sm: 8px md: 12px lg: 16px xl: 24px xxl: 32px section: 88px

components: button-primary: backgroundColor: "{colors.primary}" textColor: "{colors.on-primary}" typography: "{typography.button-md}" rounded: "{rounded.full}" padding: 8px 20px height: 36px button-primary-active: backgroundColor: "{colors.ink-deep}" textColor: "{colors.on-primary}" typography: "{typography.button-md}" rounded: "{rounded.full}" button-secondary: backgroundColor: "{colors.canvas}" textColor: "{colors.ink}" typography: "{typography.button-md}" rounded: "{rounded.full}" padding: 8px 20px height: 36px button-pill-on-dark: backgroundColor: "{colors.canvas}" textColor: "{colors.ink}" typography: "{typography.button-md}" rounded: "{rounded.full}" padding: 8px 20px button-disabled: backgroundColor: "{colors.surface-soft}" textColor: "{colors.mute}" rounded: "{rounded.full}" search-pill: backgroundColor: "{colors.surface-soft}" textColor: "{colors.ink}" typography: "{typography.body-sm}" rounded: "{rounded.full}" padding: 8px 16px height: 36px search-pill-focused: backgroundColor: "{colors.canvas}" textColor: "{colors.ink}" rounded: "{rounded.full}" text-input: backgroundColor: "{colors.canvas}" textColor: "{colors.ink}" typography: "{typography.body-md}" rounded: "{rounded.full}" padding: 8px 16px height: 40px text-input-focused: backgroundColor: "{colors.canvas}" textColor: "{colors.ink}" rounded: "{rounded.full}" install-snippet: backgroundColor: "{colors.surface-soft}" textColor: "{colors.ink}" typography: "{typography.code-md}" rounded: "{rounded.full}" padding: 12px 20px height: 48px command-tag: backgroundColor: "{colors.surface-soft}" textColor: "{colors.ink}" typography: "{typography.code-sm}" rounded: "{rounded.full}" padding: 6px 12px terminal-card: backgroundColor: "{colors.canvas}" textColor: "{colors.ink}" typography: "{typography.code-sm}" rounded: "{rounded.lg}" padding: 16px terminal-traffic-lights: rounded: "{rounded.full}" size: 12px pricing-card: backgroundColor: "{colors.canvas}" textColor: "{colors.ink}" typography: "{typography.body-md}" rounded: "{rounded.lg}" padding: 32px pricing-card-dark: backgroundColor: "{colors.surface-dark}" textColor: "{colors.on-dark}" typography: "{typography.body-md}" rounded: "{rounded.lg}" padding: 32px feature-bullet: textColor: "{colors.charcoal}" typography: "{typography.body-sm}" faq-row: backgroundColor: "{colors.canvas}" textColor: "{colors.ink}" typography: "{typography.body-md}" rounded: "{rounded.none}" padding: 16px 0px link-inline: textColor: "{colors.ink}" typography: "{typography.body-md}" link-mute: textColor: "{colors.body}" typography: "{typography.body-sm}" primary-nav: backgroundColor: "{colors.canvas}" textColor: "{colors.ink}" typography: "{typography.body-sm-strong}" rounded: "{rounded.none}" height: 56px footer-section: backgroundColor: "{colors.canvas}" textColor: "{colors.body}" typography: "{typography.caption-sm}" rounded: "{rounded.none}" padding: 32px 24px cta-strip-dark: backgroundColor: "{colors.surface-dark}" textColor: "{colors.on-dark}" typography: "{typography.heading-lg}" rounded: "{rounded.lg}" padding: 24px 32px

Overview

Ollama's site is the most aggressively under-designed marketing surface in the AI tooling space, and that is the entire point. The home page reads like a Markdown README rendered with care: a 36px center-aligned heading sits above an inline curl install snippet inside a soft-gray pill, a single black "Download" CTA, and a hand-drawn llama mascot as the only ornament. Everything else — automate-your-work block, "Start local. Scale cloud." pricing pair, "Your data stays yours" guarantee strip, FAQ wall on /pricing — sits on the same paper-white canvas ({colors.canvas}) with quiet {colors.body} neutrals carrying the prose. The system is the documentation, and the documentation is the system.

The design philosophy is geometric: every interactive element collapses to {rounded.full} (9999px) — buttons, search pills, install-snippet pills, text inputs, and the terminal-traffic-light dots. There are no decorative drop shadows, no gradients, no hero illustrations beyond the llama. Cards (the rare ones, on /pricing) use a soft {rounded.lg} (12px) and a 1px hairline. The single inverted moment in the entire system is the dark "Max" pricing tier — {colors.surface-dark} with white text — which acts as the only attention-grabbing surface in an otherwise studiously flat layout.

Typography pairs SF Pro Rounded (display headings, weight 500–600) with the operating system's default sans (ui-sans-serif) for body and ui-monospace for code. The roundness of the heading face is the only "personality" the chrome carries — it gently echoes the {rounded.full} button geometry without being decorative about it.

Key Characteristics:

  • Paper-white {colors.canvas} end-to-end with no surface alternation — the whole page is one continuous sheet
  • Center-aligned hero with {typography.display-xl} SF Pro Rounded headline, no eyebrow, no subhead beyond a small "Power OpenClaw with Ollama" line under the llama
  • Pill geometry everywhere: every button and pill input is {rounded.full}; cards use {rounded.lg}; nothing is sharp-cornered except section dividers
  • Single-color CTA system: pure black {colors.primary} pills carry every action; "Get Pro" / "Get Max" inside pricing cards are the only variations
  • Inline curl install snippet rendered as a pill with {typography.code-md} — the most signature element, sitting directly under the hero headline
  • Terminal-mockup card with macOS traffic-light dots and inline ollama launch openclaw example — the home page's only "product preview"
  • Inverted dark {component.pricing-card-dark} for the highest-tier "Max" plan, breaking the flat-white rhythm exactly once per page

Colors

Source pages: / (home) and /pricing. The chrome palette is identical across both — only content changes.

Brand & Accent

  • Pure Black ({colors.primary}#000000): the brand. Every primary CTA, every black pill, every link in the nav, and every solid icon. There is no other "brand color."
  • Ink Deep ({colors.ink-deep}#090909): pressed-state black for the primary pill — a single notch below pure.

Surface

  • Canvas ({colors.canvas}#ffffff): the page itself. Nearly every surface in the system.
  • Soft Surface ({colors.surface-soft}#fafafa): install-snippet pill background, search pill, secondary chip backgrounds, alternating row fill where one is needed.
  • Surface Dark ({colors.surface-dark}#171717): the dark "Max" pricing card and dark CTA strips. The single inverted surface in the system.
  • Hairline ({colors.hairline}#e5e5e5): 1px card border, divider line above footer, divider between FAQ rows.
  • Hairline Strong ({colors.hairline-strong}#d4d4d4): rare slightly stronger divider where extra separation is needed (e.g., between unrelated FAQ groups).

Text

  • Ink ({colors.ink}#000000): all headlines, primary nav links, button text on light surfaces, prices on pricing cards.
  • Charcoal ({colors.charcoal}#525252): list-item text and disabled-state secondary copy.
  • Body ({colors.body}#737373): default body color for paragraph copy, FAQ answers, footer link text — the system's most-used text color after pure black.
  • Mute ({colors.mute}#a3a3a3): caption text, command-line "comment" gray inside terminal mockups, lowest-emphasis utility text.
  • On Dark ({colors.on-dark}#ffffff): primary text on {colors.surface-dark}.
  • On Dark Mute ({colors.on-dark-mute}rgba(255,255,255,0.7)): secondary copy inside the dark "Max" pricing card.

Semantic

The system has effectively no error/success/warning palette in its public marketing surfaces — there are no validation states, no destructive flows, no banners. The only "semantic" colors are the macOS terminal traffic lights inside the terminal mockup:

  • Terminal Red ({colors.terminal-red}#ff5f56): close-window dot.
  • Terminal Yellow ({colors.terminal-yellow}#ffbd2e): minimize dot.
  • Terminal Green ({colors.terminal-green}#27c93f): zoom dot.

These appear only inside {component.terminal-card} and have no other use.

Focus

  • Focus Ring ({colors.focus-ring}rgba(59,130,246,0.5)): translucent blue browser-default focus ring around interactive elements. The only blue in the system.

Typography

Font Family

  • SF Pro Rounded (display headings) — Apple's rounded geometric sans, used at weights 500 and 600 for headlines from {typography.display-xl} (36px) down to {typography.heading-lg} (24px). Falls back to system-ui-apple-system.
  • ui-sans-serif (body, links, buttons, captions) — the operating system's default sans-serif. Carries every non-display text role at 12–20px. Falls back through system-ui and platform emoji families.
  • ui-monospace (code, install snippet, command tags) — the OS default monospace. Used inside the terminal mockup, the inline curl install pill, and any inline <code> formatting. Falls back to SFMono-Regular → Menlo → Monaco → Consolas.

The pairing of SF Pro Rounded display + system sans body + system mono code is intentionally "stock Apple" — the design decision is to not have a typography decision. Branded display faces would compete with the system's documentation feel.

Hierarchy

TokenSizeWeightLine HeightLetter SpacingUse
{typography.display-xl}36px5001.110Hero headline ("The easiest way to build with open models")
{typography.display-lg}30px5001.20Major section headlines ("Pricing", "Frequently asked questions")
{typography.heading-lg}24px6001.330Section subheading inside body ("Automate your work", "Start local. Scale cloud.")
{typography.heading-md}20px5001.40Pricing tier name ("Free", "Pro", "Max"), card title
{typography.heading-sm}18px5001.560FAQ question label, in-card subtitle
{typography.body-md}16px4001.50Default body, FAQ answers, paragraph copy
{typography.body-strong}16px5001.50Inline emphasis, primary-nav link
{typography.body-sm}14px4001.430Feature bullet ("Access larger models on data-center-grade hardware"), footer link
{typography.body-sm-strong}14px5001.430Button label, pricing-card eyebrow ("Solve harder tasks, faster")
{typography.caption-sm}12px4001.330Footer copyright row, smallest meta text
{typography.code-md}16px4001.50Install-snippet curl line, in-terminal command
{typography.code-sm}14px4001.430Terminal output line, inline <code> chips
{typography.button-md}14px50010Every button label across the system

Principles

The typography is built for legibility at small sizes on a flat-white canvas. SF Pro Rounded's softened terminals on the heading face do almost all of the brand expression; everything below 20px collapses into the operating system's default sans, which renders identically to the way docs.ollama.com and the Ollama CLI's own help text would appear in a terminal. There is almost no letter-spacing variation, no display-only weights, no italic, and the heading-to-body ratio compresses tightly (36 → 30 → 24 → 20 → 16) so the page reads as a single readable column rather than a marketing pyramid.

Note on Font Substitutes

SF Pro Rounded is Apple-licensed and ships only on macOS/iOS. On other systems it falls back to system-ui (Segoe UI / Roboto / DejaVu Sans depending on platform) — Ollama explicitly accepts that the heading face will look slightly different on Windows/Linux. The closest open-source substitute is Nunito (rounded geometric sans, weights 500/600). For the body face, Inter is a near-perfect match for system-ui rendered metrics. For code, JetBrains Mono or Fira Code are the canonical open-source substitutes for ui-monospace.

Layout

Spacing System

  • Base unit: 8px (with finer 2/4/6px steps available for tight inline gaps)
  • Tokens (front matter): {spacing.xxs} (2px) · {spacing.xs} (4px) · {spacing.sm} (8px) · {spacing.md} (12px) · {spacing.lg} (16px) · {spacing.xl} (24px) · {spacing.xxl} (32px) · {spacing.section} (88px)
  • Universal section rhythm: every page uses {spacing.section} (88px) as the vertical gap between major content blocks (hero → automate → start local/scale cloud → your data stays yours → get-started footer call). This is the single largest spacing token in the system and it is used liberally.
  • Card internal padding: pricing cards sit at {spacing.xxl} (32px) all around; FAQ rows use {spacing.lg} (16px) vertical with no horizontal padding.

Grid & Container

  • Max width: ~720px content column on the home page (the whole page is laid out as a single narrow reading column with optional 2-column splits inside specific sections).
  • Pricing grid: 3-up cards at desktop with a max content width of ~960px; collapses to 1-up below 768px.
  • Automate-your-work split: desktop 50/50 left-text/right-terminal-mockup; mobile stacks vertical with the terminal below the text.
  • FAQ: single-column stacked rows, full-width within the 720px content column.
  • Footer: single-row of small body-sm links, center-aligned at desktop, wrapping to two rows on narrow screens.

Whitespace Philosophy

Whitespace is the entire layout. Sections are separated by 88px of plain white air, never by decorative dividers, never by colored bands. Inside a section, content sits in a tight reading column with no decorative columns, callout boxes, or lifted cards. The site treats the page as a long-form Markdown document, and the air between sections is the equivalent of a blank line in Markdown source.

Elevation & Depth

LevelTreatmentUse
0 — FlatNo border, no shadowHero, automate-your-work, your-data-stays-yours, footer — the dominant treatment across the page
1 — Hairline border1px solid {colors.hairline}Pricing cards, FAQ row dividers, terminal mockup card
2 — Inverted dark{colors.surface-dark} fillDark "Max" pricing card and dark CTA strip — the system's only "elevated" surfaces use color, not shadow

The system has no drop-shadow elevation at all. Nothing lifts, nothing floats, nothing layers. The only depth cue beyond hairline borders is the single dark surface used on the highest-tier pricing card to draw attention to it.

Decorative Depth

The site has effectively zero decorative depth in the traditional sense. The "depth" comes entirely from two recurring devices:

  • The hand-drawn llama mascot — appearing once at the top of the hero, once at the top of each pricing card, and once next to the lock icon in the "Your data stays yours" section. It is the only illustration in the system.
  • A single line-drawn lock icon — used in the data-privacy section. Stroke-only, no fill, drawn in {colors.ink}.

Shapes

Border Radius Scale

TokenValueUse
{rounded.none}0pxNav, footer, FAQ row dividers — flat structural lines
{rounded.sm}6pxInline code chips, command tags
{rounded.md}8pxRare medium-radius surfaces (e.g., dropdown panels)
{rounded.lg}12pxPricing cards, terminal mockup card
{rounded.full}9999pxEvery button, every pill input, install-snippet pill, search pill, traffic-light dots

The dominant shape vocabulary is just two values: pills ({rounded.full}) for everything interactive and 12px ({rounded.lg}) for the few cards in the system. There are no medium-radius "soft cards" — surfaces are either pills or rectangles with corners large enough to read as deliberately soft.

Photography Geometry

There is no photography. The only image-like elements are:

  • The llama mascot — a hand-drawn line illustration, ~80–120px on the hero, ~32–48px when it appears as a pricing-card eyebrow icon.
  • The lock icon — single stroke line drawing in the privacy section.
  • macOS traffic-light dots — three filled circles at 12px ({rounded.full}) inside the terminal mockup card.

Components

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

Buttons

button-primary — the universal Ollama CTA

  • Background {colors.primary}, text {colors.on-primary}, type {typography.button-md}, padding 8px 20px, height 36px, rounded {rounded.full}.
  • Used for "Download" (top nav), "Sign in" (top nav, paired with Download), "Create account", "Get Pro", "Get Max" — every primary action in the system.
  • Pressed state lives in button-primary-active — background drops to {colors.ink-deep}.

button-secondary — outline alternative on light canvas

  • Background {colors.canvas}, text {colors.ink}, 1px solid {colors.hairline-strong}, type {typography.button-md}, padding 8px 20px, height 36px, rounded {rounded.full}.
  • Used as a secondary affordance — e.g., the "Sign in" pill in the top nav when paired with the black "Download" pill, "See more apps →" arrow link in compact form.

button-pill-on-dark — white pill on dark surface

  • Background {colors.canvas}, text {colors.ink}, type {typography.button-md}, rounded {rounded.full}.
  • Sits inside the dark "Max" pricing card as the "Get Max" CTA — inverts the standard primary so the dark card itself becomes the visual anchor and the white pill reads as the CTA.

button-disabled

  • Background {colors.surface-soft}, text {colors.mute}, rounded {rounded.full} — flat soft gray.

Inputs & Forms

search-pill + search-pill-focused

  • Default: background {colors.surface-soft}, text {colors.ink}, type {typography.body-sm}, padding 8px 16px, height 36px, rounded {rounded.full}. Anchored in the center of the primary nav with a small magnifier icon prefix and "Search models" placeholder.
  • Focused: background flips to {colors.canvas} and the browser-default {colors.focus-ring} translucent blue ring appears.

text-input + text-input-focused

  • Default: background {colors.canvas}, 1px solid {colors.hairline}, type {typography.body-md}, padding 8px 16px, height 40px, rounded {rounded.full}.
  • Focused: 1px ink border + browser-default focus ring.

install-snippet — the signature install pill

  • Background {colors.surface-soft}, text {colors.ink} rendered in {typography.code-md}, padding 12px 20px, height 48px, rounded {rounded.full}.
  • Contains the literal curl -fsSL https://ollama.com/install.sh | sh install command with a small copy-icon at the right edge. Sits directly below the hero headline as the page's most prominent "CTA."

command-tag — small inline command chip

  • Background {colors.surface-soft}, text {colors.ink} in {typography.code-sm}, padding 6px 12px, rounded {rounded.full}.
  • Used inside the "Automate your work" section for the ollama launch openclaw example chip and similar inline-command demos.

Cards & Containers

terminal-card — the home page's only "product preview"

  • Container: background {colors.canvas}, 1px solid {colors.hairline}, padding {spacing.lg} (16px), rounded {rounded.lg}.
  • Header: three {component.terminal-traffic-lights} dots (red/yellow/green at 12px) anchored to the top-left of the card.
  • Body: terminal output rendered in {typography.code-sm} with comments in {colors.mute} and active commands in {colors.ink}.

terminal-traffic-lights

  • Three 12px filled circles at {rounded.full}: {colors.terminal-red}, {colors.terminal-yellow}, {colors.terminal-green}. Sits as a row of three with {spacing.xs} gaps between dots inside the terminal card header.

pricing-card — Free / Pro tiers

  • Container: background {colors.canvas}, 1px solid {colors.hairline}, padding {spacing.xxl} (32px), rounded {rounded.lg}.
  • Layout: small llama mascot icon (~32px) at top, tier name in {typography.heading-md}, one-line tier description, large price in {typography.display-lg} ($0 / $20), single {component.button-primary} CTA, divider, {typography.body-sm-strong} "Everything in Free, plus:" header, list of {component.feature-bullet} rows.

pricing-card-dark — Max tier (inverted)

  • Identical layout to pricing-card but with {colors.surface-dark} background, {colors.on-dark} text, {colors.on-dark-mute} secondary text, and {component.button-pill-on-dark} CTA. The inversion is the system's single "look here" cue.

feature-bullet — pricing card list item

  • Inline checkmark at {colors.ink} followed by {typography.body-sm} text in {colors.charcoal}. No background, no border, just stacked rows with {spacing.sm} between them.

faq-row/pricing FAQ entry

  • Container: background {colors.canvas}, padding 16px 0, 1px bottom border {colors.hairline}.
  • Question: {typography.heading-sm} (18px / 500) in {colors.ink}.
  • Answer: {typography.body-md} (16px / 400) in {colors.body}, sitting directly below the question with {spacing.xs} gap. Always expanded — no accordion collapse.

cta-strip-dark — rare dark CTA band

  • Background {colors.surface-dark}, text {colors.on-dark} in {typography.heading-lg}, padding 24px 32px, rounded {rounded.lg}. Used sparingly between sections.

Inline

link-inline — body-prose anchor link

  • {colors.ink} text with underline. Default decoration is text-decoration: underline.

link-mute — secondary anchor in long-form prose

  • {colors.body} text with underline appearing on default — used in FAQ answers ("see hello@ollama.com") and footer.

Navigation

primary-nav

  • Background {colors.canvas}, text {colors.ink}, height 56px, type {typography.body-sm-strong}, rounded {rounded.none}.
  • Layout (desktop): llama icon (left) followed by "Models · Docs · Pricing" text links, centered {component.search-pill}, and a right cluster of "Sign in" + black {component.button-primary} "Download".

Top Nav (Mobile)

  • Llama icon at left, hamburger drawer trigger at right. Search pill expands to full-width when triggered. The drawer lists "Models · Docs · Pricing · Sign in · Download" stacked vertically with {spacing.lg} row gaps.

Footer

footer-section

  • Background {colors.canvas}, 1px top border {colors.hairline}, padding 32px 24px, type {typography.caption-sm} {colors.body}.
  • Single horizontal row of small links: "Download · Blog · Docs · GitHub · Discord · X · Contact · Privacy · Terms" + a "© 2026 Ollama" copyright at the right edge. Wraps to two rows on narrow screens.

Do's and Don'ts

Do

  • Treat the page like a Markdown document: single reading column, plenty of {spacing.section} air between sections, no decorative dividers.
  • Use {component.button-primary} (black pill) for every primary action. There is no green, no blue, no brand-tinted CTA.
  • Default to {rounded.full} for any interactive element. Cards get {rounded.lg} (12px) and that is the only exception.
  • Use {typography.display-xl} SF Pro Rounded for the hero headline and {typography.body-md} system sans for everything else. Avoid intermediate display sizes.
  • Reserve {component.pricing-card-dark} (the inverted dark surface) for exactly one "look here" moment per page — never use it twice.
  • Render install commands and CLI examples inside {component.install-snippet} or {component.terminal-card} with {typography.code-md} / {typography.code-sm}. Code is a first-class component.
  • Keep the llama mascot the only illustration in the system. It is the brand.

Don't

  • Don't introduce gradients, drop shadows, or atmospheric backgrounds. The canvas is pure {colors.canvas}.
  • Don't add brand colors. The system is {colors.primary} (black) on {colors.canvas} (white) with {colors.body} (gray) text. That is it.
  • Don't soften pills or sharpen cards — pills stay {rounded.full}, cards stay {rounded.lg}. Don't introduce {rounded.md} for buttons or {rounded.full} for cards.
  • Don't lift cards with shadows. Use a 1px {colors.hairline} border or invert to {colors.surface-dark} — those are the only two card treatments.
  • Don't replace ui-sans-serif with a branded display body face. The system relies on system-ui rendering to feel native.
  • Don't fill long-form pages with marketing chrome. FAQ answers stay in {colors.body} body-md prose with no decorative containers.

Responsive Behavior

Breakpoints

NameWidthKey Changes
desktop-large1280px+Default desktop — 720px content column, 3-up pricing grid
desktop1024pxSame layout; nav remains horizontal
tablet850pxPricing collapses from 3-up to 2-up + 1; nav search pill compresses
tablet-narrow768pxPricing collapses to 1-up stacked; primary nav becomes hamburger
mobile640pxHero headline drops from {typography.display-xl} (36px) to ~28px; install-snippet wraps; section padding tightens

Touch Targets

All interactive elements meet WCAG AA at the 36–40px height range. {component.button-primary} and {component.button-secondary} sit at 36px height with 20px horizontal padding, giving an effective tappable area of ~36×80px which exceeds the 44×44px AAA threshold via the inline padding. {component.text-input} sits at 40px. {component.search-pill} sits at 36px height with 16px padding. Footer links use {typography.caption-sm} (12px) but receive ~12px line-height + ~8px vertical padding for a tappable row of ~32–36px.

Collapsing Strategy

  • Primary nav: desktop horizontal → tablet-narrow hamburger drawer at 768px. The black "Download" CTA stays visible at all widths; it never collapses into the menu.
  • Search pill: desktop fixed width ~360px → tablet compressed to ~240px → mobile collapses to icon-only with a full-width overlay on tap.
  • Pricing grid: 3-up → 2+1 → 1-up stacked at 850, 768, and below. The dark "Max" card stays in its inverted treatment at every breakpoint.
  • Automate-your-work split: desktop 50/50 → tablet stacks vertical with text above terminal mockup.
  • Hero headline: {typography.display-xl} (36px) at desktop, scaling to ~28px at mobile with line-height holding at ~1.15.
  • Section spacing: {spacing.section} (88px) desktop → 64px tablet → 48px mobile.
  • Install-snippet pill: wraps curl text to a second line on narrow screens rather than truncating; the copy-icon stays anchored to the right edge.

Image Behavior

The only image asset is the llama mascot (raster PNG at multiple resolutions: 16/32/48/64/180/192/512px). It is rendered at fixed pixel sizes on the hero and pricing cards rather than scaling responsively — the brand asset is treated like a logo, not a hero image.

Iteration Guide

  1. Focus on ONE component at a time. Pull its YAML entry from the front matter and verify every property resolves.
  2. Reference component names and tokens directly ({colors.primary}, {component.button-primary-active}, {rounded.full}) — 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, -focused) — do not bury them inside prose.
  5. Default body to {typography.body-md}; reach for {typography.body-sm} for footer/utility text; reserve {typography.display-xl} strictly for the page-top headline.
  6. Keep {colors.primary} scarce per viewport — there should be at most one black pill per fold (counting nav, hero CTA, and pricing-card CTA together). The design's restraint is the design.
  7. When introducing a new component, ask whether it can be expressed with the existing pill + flat-card + terminal-mockup 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 Ollama's known mobile pattern (hamburger drawer, 1-up pricing stack, install-snippet wrap) from desktop evidence and the extracted breakpoint stack.
  • Hover states not documented by system policy.
  • Form field styling beyond search and install-snippet is not present in the captured surfaces — there is no visible long-form form on the home or pricing pages.
  • Authenticated chrome (account dropdown, billing settings, model dashboard) not in the captured pages.
  • Models / Docs pages not in the captured set — those surfaces likely add a sidebar and a docs typography tier that this document does not describe.