Spindle is CyberAgent's open design system for Ameba (アメーバ) — the 20-year-old Japanese blogging and media platform — and it reads as one of Japan's most disciplined, accessibility-first systems. The canvas is pure white (#ffffff) over a soft warm-grey app background (#f5f6f6), and text sits in a near-black navy ink (#08121a) rather than pure black, lending a calm, editorial weight. The single saturated brand anchor is Ameba green (#298737) — a confident, slightly forest-leaning green that functions as both the brand mark color and the primary action color. This green is not decorative; live inspection shows it driving the contained CTA, the text-link, the icon button, and the accent surfaces, so the eye is trained to read green as "Ameba" and "do this."
The typographic personality is deliberately system-native: there is no custom webfont. Spindle's docs run on Meiryo, "Yu Gothic Medium", system-ui and the Ameba product runs on "Hiragino Sans", Meiryo, "Yu Gothic" — the platform CJK stack — set bold (700) at display sizes (32px section headings, 24px sub-heads) and a quiet 400 weight at 14–16px for body and dense UI. This is a system that spends its design budget on tokens, contrast, and component rigor rather than on a signature display face. Every UI color is documented against WCAG 2.1 contrast ratios (4.5:1 text, 3:1 objects), which is the system's defining obsession.
What distinguishes Spindle from flashier peers is its near-total restraint with depth and its pill-forward action geometry. Live inspection found box-shadow: none across the docs chrome; separation comes from flat tinted surfaces (#f5f6f6), thin hairlines (rgba(8,18,26,0.08)), and the green accent — never elevation. Action buttons are fully rounded pills: the contained CTA on ameba.jp measures a 48px-radius green pill, and lighted/outlined variants follow the same rounded language. The result is warm, legible, and engineered — a media platform that feels welcoming and trustworthy without shouting.
Key Characteristics:
#298737) as the single brand + action color — contained CTA, links, icon buttons, accentsHiragino Sans / Meiryo / Yu Gothic) — no custom webfont, bold 700 for display#08121a) for text instead of pure black — warm, editorialbox-shadow: none; tinted #f5f6f6 surfaces + rgba(8,18,26,0.08) hairlines separate#e7f5e9) with hover #c6e5c9#d91c0b) and focus blue (#0091ff) as the documented semantic accents#298737): --color-surface-accent-primary / --LinkButton--contained-backgroundColor / --color-object-accent-primary. The primary brand and action color — contained CTA background, icon-button fill, accent surface.#0f5c1f): --LinkButton--contained-onHover-backgroundColor. Deepened green for contained-button hover and active (pressed) states.#237b31): --TextLink-color / --LinkButton--outlined-color / --color-text-accent-primary. The text-link and outlined-button green — a touch darker than the surface green for text contrast.#2d8c3c): the compact header register pill on ameba.jp (a slightly lighter production tint of the accent).#e7f5e9): --LinkButton--lighted-backgroundColor / --color-surface-accent-primary-light. Soft green fill for lighted (low-emphasis) buttons and highlighted rows.#c6e5c9): --LinkButton--lighted-onHover-backgroundColor. Hover/active for lighted surfaces.#82be28): --color-surface-accent-secondary. A brighter lime secondary accent for decorative/secondary surfaces.#5e9b15): --color-object-accent-secondary. Object-level lime (icons, indicators).#477d00): --color-text-accent-secondary. Darkest lime for accessible secondary-accent text.#f0f7e6): --color-surface-accent-secondary-light. Tinted lime surface.#08121a): --color-text-high-emphasis / --color-object-high-emphasis. Primary text, headings, nav, table cells — a near-black navy used instead of pure black.#ffffff): --color-surface-primary. Page and card surface, text on green/dark.#f5f6f6): --color-background / --Table-row-striped-backgroundColor. Warm app background and striped table rows.rgba(8,18,26,0.74), low-emphasis rgba(8,18,26,0.61), disabled rgba(8,18,26,0.3). Surfaces use rgba(8,18,26,0.04/0.08/0.16) for secondary/tertiary/quaternary fills; borders use rgba(8,18,26,0.08) (low) and rgba(8,18,26,0.3) (medium).#d91c0b): --color-surface-caution / --color-text-caution / --color-border-caution. Danger/destructive actions, error text and borders.#0091ff): --color-focus-clarity / outline color. The keyboard-focus ring color across all interactive elements.#f5e100): --color-highlight-yellow. Selection/marker highlight.#e6456a): --color-object-expressive-pink. Expressive/decorative object accent.Meiryo, "Yu Gothic Medium", system-ui, -apple-system, "system-ui", sans-serif (live-read from spindle.ameba.design body and headings)."Hiragino Sans", Meiryo, "Yu Gothic", sans-serif.| Role | Size | Weight | Line Height | Notes |
|---|---|---|---|---|
| Section Display (h2) | 32px (2.00rem) | 700 | 1.5 | Largest section headings ("Amebaらしさを体現するために", "Amebaでブログを書こう") |
| Heading (h3) | 24px (1.50rem) | 700 | 1.4 | Sub-section heads ("デザイン原則", "アクセシビリティ", "記事から探す") |
| Page Title (h1/h2) | 24px (1.50rem) | 700 | 1.4 | Docs page title, hero |
| Nav Link | 14px (0.88rem) | 700 | 1.5 | Global nav items ("ブランド", "原則", "スタイル", "コンポーネント") — bold |
| Body | 16px (1.00rem) | 400 | 1.3 | Standard reading text (body default) |
| Body Small | 14px (0.88rem) | 400 | 1.4 | Dense UI text, captions, table cells (0.875em) |
| Button | 16px (1.00rem) | 700 | 1.0 | Contained CTA label — bold |
| Button Small | 12px (0.75rem) | 700 | 1.0 | Compact header register/login pill |
0.875em / 0.75em.font-weight: bold green (#237b31) — links read as actions, not just colored text.Contained (Primary CTA)
#298737#ffffff#0f5c1f backgroundRegister Pill (Compact)
#2d8c3c#ffffffOutlined (Secondary)
#ffffff#237b31#237b31#e7f5e9 backgroundLighted (Soft)
#e7f5e9#237b31#c6e5c9 backgroundSearch Field
#f6f8fa#08121argba(8,18,26,0.08)#0091ff outline ringLighted Accent Card
#e7f5e9#08121aData Table
#ffffffrgba(8,18,26,0.08)#f5f6f6, head/cell padding 12pxCaution Pill
#d91c0b#ffffff#ffffff#08121a--global-header-height)#237b31 text on active item#237b31 (bold)#298737#0091ff outlineVerified: 2026-06-17 (omd:add-reference CREATE — Tier 1 live inspect, 2 first-party surfaces)
Tier 1 sources: https://spindle.ameba.design/ (Spindle DS — :root design-token CSS custom properties, live computed style); https://www.ameba.jp/ (Ameba product — live component grounding: 新規登録 CTA, search input, lighted rows); https://spindle.ameba.design/styles/color/ (official color taxonomy)
Tier 2 sources: getdesign.md/spindle — NOT FOUND (no entry); styles.refero.design/?q=spindle — no Spindle/Ameba entry (only fuzzy unrelated matches: Spline, Spacelab, Shuttle)
Conflicts unresolved: none
--global-header-height)#ffffff) and warm grey (#f5f6f6) backgrounds#f5f6f6 vs #ffffff) and hairlines, not shadow.| Level | Treatment | Use |
|---|---|---|
| Flat (Level 0) | No shadow | Page background, inline text, most surfaces |
| Tint (Level 1) | #f5f6f6 / rgba(8,18,26,0.04) background shift | Card/section separation without elevation |
| Hairline (Level 2) | 1px solid rgba(8,18,26,0.08) border | Table/card outlines, dividers |
| Accent (Level 3) | #e7f5e9 lighted surface or #298737 green | Emphasis via color, not elevation |
Shadow Philosophy: Spindle is a near-shadowless system. Live inspection found box-shadow: none across the docs chrome, headings, nav, and content cards. Depth and grouping are communicated through flat tinted surfaces (#f5f6f6, rgba(8,18,26,0.04)) and thin hairlines (rgba(8,18,26,0.08)). This is a deliberate accessibility-and-performance choice — it keeps the media UI fast, clean, and high-contrast. When emphasis is needed, the system reaches for the green accent (#298737) or a lighted green surface (#e7f5e9), never elevation. The keyboard-focus ring (#0091ff) is the one consistently "raised" visual signal, present on every interactive element.
#298737) as the single brand + primary action color — CTA, links, icon buttons, accents#0f5c1f on contained-button hover/active#237b31) for text links — links are bold and read as actionsHiragino Sans / Meiryo / Yu Gothic) — no custom webfont#08121a) for text instead of pure black#f5f6f6) and hairlines (rgba(8,18,26,0.08)), not shadows#0091ff) outline on every interactive element#000000) for body text — use near-black navy #08121a#0091ff) is mandatory for accessibility| Name | Width | Key Changes |
|---|---|---|
| Mobile | <768px | Single column, hamburger nav, stacked principle cards |
| Tablet | 768-1024px | Moderate padding, 2-up feature cards |
| Desktop | >1024px | Full layout, centered content, multi-column principle grid |
#298737)#0f5c1f)#237b31, bold)#e7f5e9)#ffffff)#f5f6f6)#08121a)#d91c0b)#0091ff)#82be28), Expressive Pink (#e6456a), Highlight Yellow (#f5e100)#298737) is the single action color — don't spread it to decoration#f5f6f6 tint and rgba(8,18,26,0.08) hairlines#08121a navy, never pure black for body#0091ff focus ringSpindle (and the Ameba brand it serves) speaks with a voice that is warm, welcoming, and unpretentious — the verbal expression of the system's four design principles: 敬意 (Respect), 軽快 (Lightness), 情緒 (Emotion), and 歓迎 (Welcome). Copy is plain, friendly Japanese that invites participation rather than instructing: register and login CTAs are simple ("新規登録", "ログイン"), section headings are conversational invitations ("Amebaでブログを書こう" / "Let's write a blog on Ameba"; "Amebaってどんなサービス?" / "What kind of service is Ameba?"). The tone never hard-sells; it welcomes everyone in, consistent with the stated brand vision that "誰もがいつでも、迷わず" (anyone, anytime, without getting lost) can use the service.
| Context | Tone |
|---|---|
| Section headings | Conversational invitations. "Amebaでブログを書こう", "Amebaを始めよう!". Warm, inclusive. |
| Nav / labels | Plain and functional. "ブランド", "原則", "スタイル", "コンポーネント". |
| CTAs | Simple, low-pressure. "新規登録", "ログイン", "もっと見る". |
| Documentation (Spindle) | Precise, accessibility-grounded, peer-to-peer with designers/engineers. |
| Brand / principles copy | Mission-framed, emotional. Frames Ameba as "weaving living content". |
Voice samples (verbatim from live surfaces):
Forbidden register: aggressive sales urgency, exclusionary jargon, hype superlatives, or anything that violates the "welcome / accessible to everyone" principle. The system's accessibility mandate extends to language — clear over clever.
Spindle was created by CyberAgent to serve Ameba (アメーバ), the company's blogging and media platform launched in 2004. By the late 2010s Ameba — then ~17 years old — had accumulated significant design and technical debt, and CyberAgent set an ambition for it to become a "100年愛されるメディア" (a media service loved for 100 years) (CyberAgent Developers Blog). Around 2019 the team began a year-long brand-definition process to articulate Ameba's previously implicit identity, and Spindle was built to operationalize and scale that brand vision across every product surface.
The name Spindle (紡錘体) references both a spinning tool and the cellular spindle structure — symbolizing continuous evolution and the brand's core concept of "生きたコンテンツをつむぐ" ("weaving living content together"): the idea that users, stories, and connections interweave organically over time (CyberAgent Developers Blog). The system is built on four design principles — 敬意 (Respect), 軽快 (Lightness), 情緒 (Emotion), 歓迎 (Welcome) — that reflect a commitment to accessibility, performance, and emotional resonance.
What Spindle refuses, visible in its design: the heavy, decorative chrome of legacy portals (no shadow stacks, no ornamental gradients) and the cold, exclusionary precision of enterprise tooling. What it embraces: a flat, fast, high-contrast interface; a single warm Ameba green; system-native CJK typography that works for everyone; and a rigorous, openly-published token system (Spindle is open source at openameba/spindle, with design tokens, React components, icons, syntax themes, and an MCP server). Accessibility is not a feature here — it is the first principle, with every UI color documented against WCAG 2.1 contrast ratios.
The four principles below are Spindle's officially stated design principles (敬意 / 軽快 / 情緒 / 歓迎), with UI implications drawn from the live system.
#0091ff focus ring.#298737) means "do this." UI implication: reserve the saturated green for primary actions and links so the next step is never ambiguous; lime/pink/yellow stay decorative.Personas below are fictional archetypes informed by publicly observable Ameba/Spindle user segments (Japanese bloggers, media readers, and the in-house designers/engineers who consume the design system), not individual people.
佐藤 美咲, 34, 東京. A lifestyle blogger who has posted on Ameba for nearly a decade. Values that the interface stays warm and familiar through redesigns; appreciates large, obvious buttons and copy that invites rather than instructs. Would be put off by a cold, enterprise-looking refresh.
田中 健太, 41, 大阪. A frontend engineer at a CyberAgent product team who consumes Spindle as a dependency (openameba/spindle). Reads the docs for token names and the MCP server, and trusts the system because every color ships with a documented WCAG contrast ratio. Notices immediately when a component drifts from the accessibility contract.
山本 由香, 28, 福岡. A reader who browses Ameba blogs daily on mobile, sometimes using larger text and high-contrast settings. Relies on the system's contrast guarantees and visible focus rings. Chose to keep using Ameba because it never feels cluttered or hard to read.
| State | Treatment |
|---|---|
| Empty (no content) | White canvas. Single Ink Navy (#08121a) line explaining there's nothing yet, with one green CTA to take the next step. No clutter. |
| Empty (saved list, none yet) | Low-emphasis ink (rgba(8,18,26,0.61)) single line; calm, plus a path back. Honest about the empty meaning. |
| Loading (content fetch) | Skeleton blocks on #f5f6f6 tinted surface at final dimensions, 16px radius. Flat pulse — no shadow shimmer, consistent with the shadowless system. |
| Loading (in-place refresh) | Previous content stays visible; subtle green progress indicator. Never blank the surface. |
| Error (request failed) | Inline message in Caution Red (#d91c0b) text/border with a plain-language explanation and a retry. States what to do next, not just "エラー". |
| Error (form validation) | Field-level message below the input in caution tone (#d91c0b); describes what's valid, not just "必須". |
| Success (action completed) | Brief inline confirmation in calm tone; green accent, next-step detail linked below. No celebratory emoji. |
| Skeleton | #f5f6f6 blocks at final dimensions, 16px radius, flat pulse. |
| Disabled | Disabled ink (rgba(8,18,26,0.3)) text on reduced-emphasis surface; green actions fade rather than turn grey, preserving the brand read. |
| Focus (keyboard) | Mandatory #0091ff focus ring (--color-focus-clarity) on every interactive element — the system's most consistent state signal. |
Durations:
| Token | Value | Use |
|---|---|---|
motion-fast | 120ms | Hover, button press, focus ring |
motion-standard | 200ms | Card/section reveal, sheet, dropdown |
motion-slow | 320ms | Page-level transitions |
Easings:
| Token | Curve | Use |
|---|---|---|
ease-enter | cubic-bezier(0.2, 0.6, 0.25, 1) | Arriving — sheets, cards, dropdowns |
ease-exit | cubic-bezier(0.4, 0.0, 1, 1) | Dismissals |
ease-standard | cubic-bezier(0.25, 0.1, 0.25, 1) | Two-way transitions |
Motion rules: Motion is functional and quiet — consistent with the flat, fast, accessibility-first system (軽快 / Lightness). Buttons respond to press with a subtle background-color shift (green deepening to #0f5c1f) rather than scale gymnastics; content reveals fade in from below at motion-standard / ease-enter. No bounce or spring — a 20-year media platform signals steadiness and welcome, not novelty. Under prefers-reduced-motion: reduce, all transitions collapse to instant; the product remains fully functional, in keeping with the Respect (敬意) principle.
Spindle is CyberAgent's open design system for Ameba (アメーバ) — the 20-year-old Japanese blogging and media platform — and it reads as one of Japan's most disciplined, accessibility-first systems. The canvas is pure white (#ffffff) over a soft warm-grey app background (#f5f6f6), and text sits in a near-black navy ink (#08121a) rather than pure black, len
Brand
Accent
Neutrals
Semantic
Type Scale
Rendered in system-ui to clearly show scale & weight.
Fonts
Spacing
| Purpose | Value | Preview |
|---|---|---|
| Density | compact | |
| Base unit | 4px | |
| Section gap | 32px | |
| Card padding | 12px | |
| Element gap | 8px |
Border Radius
| Element | Value | Preview |
|---|---|---|
| innerSmall | 8px | |
| smallSmall | 8px | |
| cardsMedium | 15px | |
| tablesMedium | 15px | |
| inputsMedium | 15px | |
| compactMedium | 15px | |
| pillPill | 48px | |
| badgesFull | 9999px | |
| fullyFull | 9999px |
Elevation
Do and Don't guidelines parsed from DESIGN.md.
Do
Don't
Buttons
Tabs
Inputs
Cards
Badges