Douyin (抖音) DESIGN.md
Brands
Douyin is dark-first, and not as a theme option — the dark surface is the product. Video is the content, so the chrome gets out of its way: near-black #161823 canvas, panels a step lighter at #252632, and text that…
At a glance
- Group
- Brands
- Main color
- #fe2c55Red design systems
Colors in this file
- #fe2c55
brand
- #161823
canvas
- #252632
surface
- #d21b46
brand-hover
- #33343f
surface-raised
- #2e2f3b
surface-hover
- #292b35
surface-secondary
- #20212c
surface-deep
- #f9f9f9
foreground
- #f2f2f4
text-secondary
Overview
Visual Theme & Atmosphere
Douyin is dark-first, and not as a theme option — the dark surface is the product. Video
is the content, so the chrome gets out of its way: near-black #161823 canvas, panels a step
lighter at #252632, and text that is almost never a solid colour but white at a stated
opacity — rgba(255,255,255,.75) for body, .34 for tertiary.
Against that, one colour: #fe2c55, the Douyin red, declared as --color-primary.
The token set gives away what the product actually is. Alongside the ordinary background and
text families sit gift-* (19 properties) and pk-* (18) — virtual gifts and
livestream battles, two mechanics with no equivalent in a Western social product and enough
design weight to earn their own token families. A -ucenter suffix marks a distinct
user-centre layer with its own light-mode values.
Primary tasks
- Watch video with chrome that never competes with it.
- Read overlaid text at several opacities against unpredictable video frames.
- Operate livestream mechanics — gifts, PK battles — that have dedicated visual vocabulary.
Brand Narrative
Launched by ByteDance in September 2016, Douyin is the Chinese short-video platform whose
international sibling is TikTok. Its interface has been dark-first from early on, and its
economics run on livestreaming — virtual gifting and PK battles between creators. That the
token set carries dedicated gift-* and pk-* families is the clearest evidence in this
reference of what the product actually monetises.
Principles
- The chrome is a frame. Dark, low-contrast, never competing with video.
- Opacity is the hierarchy. One white ink at graded alpha.
- Name what you monetise. Gifting and PK earn their own token families.
Personas
Not researched. No persona claim is made from a UI capture.
Colors
Measured 2026-09-22 via getComputedStyle on douyin.com. Douyin's token name follows each
role. Values are given as hex where the token resolves to an opaque colour.
Brand
- Douyin Red (
#fe2c55) —--color-primaryand--color-primary-default-ucenter; resolves asrgba(255,44,85,1). - Brand Hover (
#d21b46) —--color-primary-hover/--color-primary-hover-ucenter,rgba(210,27,70,1).
Dark surfaces — the default
- Canvas (
#161823) —--color-bg-b0,rgba(22,24,35,1). Alsogift-color-bg-2. - Surface (
#252632) —--color-bg-base-b1,rgba(37,38,50,1). Painted 47 times, the most common fill on the page. Alsopk-color-bg-0,gift-color-bg-4andim-shareList-bg-start— one step reused across livestream, gifting and messaging. - Surface Raised (
#33343f) —--color-bg-toast-ucenter. - Surface Hover (
#2e2f3b) —--audience-color-hover-bg-0. - Surface Secondary (
#292b35) —--color-bg-rs,--comment-bg,--gift-color-bg-3. - Surface Deep (
#20212c) —--small-bg-color.
Text — opacity, not colour
Douyin's text tokens are white at fixed alpha, so a single ink works over video of any brightness:
--color-text-t2/--color-text-1rgba(255,255,255,.75)— body.--name-list-text-0rgba(255,255,255,.9)— names.--color-text-closergba(255,255,255,.8).--color-text-t4/-t5/pk-color-text-1rgba(255,255,255,.34)— tertiary.--color-const-text-white60rgba(255,255,255,.6).
Foreground (#f9f9f9) is the rendered near-white, painted 795 times. The -ucenter
layer inverts: --color-text-t2-ucenter is rgba(22,24,35,.75) — dark ink for a light surface.
Light layer and accent
- Light Canvas (
#f9f9fa) —--color-bg-b1-ucenter. The user-centre surface is light. - Text Secondary (
#f2f2f4) —--color-secondary-default-ucenter. - Accent Cyan (
#00f3e9) — rendered once; recorded as an observed accent, not a role. - On Brand (
#ffffff) — the sign-in button's label colour, measured on the control.
Typography
Font Family
The body stack computes -apple-system. Douyin publishes no font-family token among its
424 properties, so tokens.typography.family is absent: the platform system face is not
promoted to a brand typeface.
Scale
| Role | Size | Count in sample |
|---|---|---|
| Base | 16px | 1,266 |
| Secondary | 14px | 490 |
| Dense | 13px | 138 |
| Caption | 12px | 58 |
| Lead | 24px | 14 |
| Micro | 10px | 11 |
16px carries 63% of the page. Like Weibo, hierarchy comes from opacity and enclosure rather than from size.
Layout
- Dark canvas, lighter panels.
#161823under#252632, a single step of separation. - 12px is the radius. 81 of the page's rounded corners.
- One ink at many opacities rather than a grey ramp, so text stays legible over video.
Responsive Behavior
Not measured. Desktop 1440×900 only. Douyin is primarily a mobile application and the web surface is a secondary view of it.
Elevation & Depth
Not measured. No shadow or elevation token appears among the 424 properties. Douyin separates layers by background step, not by shadow.
Motion & Easing
Not measured. No transition or duration token appears among the 424 properties.
Tier 1 sources: (live production home — 424 custom properties read via getComputedStyle, including the gift-*, pk-* and -ucenter families that are specific to Douyin's livestream and user-centre surfaces, 2026-09-22); (Douyin Open Platform — a second brand-owned regional source; its chrome is a separate palette and is not cited for product tokens, see the verification notes)
Components
No component is declared.
The one control the logged-out home exposes is the sign-in button: #fe2c55 fill, 12px
radius, 38px tall, 15px/500 — and it does not change on hover, press or focus. Everything
else is behind a sign-in wall.
Douyin declares --color-primary-hover (#d21b46) and --color-secondary-hover
(rgba(242,242,244,.12)), so the interaction contract exists in the token set. This capture
did not find a control rendering it, so no component state is claimed.
Radius
--radius-small_1-ucenter 4px · --radius-large_1-ucenter 12px · --radius-large_2-ucenter
16px are published. Rendered, 12px dominates at 81 occurrences, with a 72px pill used 5
times. Two asymmetric values — 12px 0 0 12px and 0 12px 12px 0 — appear once each, the
halves of a split control.
States
None observed. The sign-in button does not react to hover, press or focus, and it is the
only control the logged-out surface exposes. --color-primary-hover and
--color-secondary-hover are recorded as colour tokens, not as component states.
Do's and Don'ts
Do
- Build dark-first:
#161823canvas,#252632panels. - Express text hierarchy as white at .9 / .75 / .34 alpha, not as grey values.
- Reserve
#fe2c55for the primary action. - Use 12px radius as the default.
Don't
- Don't take
open.douyin.com's palette —#1c5cfb,#1ff17f,#692ceaare a developer portal's colours, not the product's (§ verification notes). - Don't convert the alpha text tokens into opaque greys; the alpha is what makes them work over video.
- Don't invent hover states for components — the declared hover tokens exist but this capture observed none rendering.
Voice & Tone
Terse and mechanical in the chrome — 登录 (sign in) and little else. The product's personality lives in its content and its livestream mechanics, not in interface copy.
Agent Prompt Guide
Quick Color Reference
#fe2c55 brand · #d21b46 brand hover · #161823 canvas · #252632 surface ·
#33343f raised · white at .9 / .75 / .34 for text
Example Component Prompts
- "A dark video card:
#252632panel on#161823, 12px radius, title white at 90%, metadata white at 34%, one#fe2c55action."
Use it with your agent
Save the file as DESIGN.md in your project root, then ask your agent to follow it for UI work. Or let the agent fetch it over MCP.
Download
MCP server
MCP tool call
Related Design.md files
ByteDance
Brands · ProximaNova
Global content platform design with bold red-and-black identity, creator-economy surfaces, dynamic motion, and algorithm-powered UX.
Gousto
Brands · Axiforma
Gousto is a British recipe-box company: it delivers measured ingredients and recipe cards for cooking at home, and publishes a public cookbook of its recipes. Its current identity dates from 2017, when a new logo — a…
MUJI (無印良品)
Brands · Helvetica Neue
MUJI — Mujirushi Ryohin (無印良品), "no-brand quality goods" — is the rare retailer whose entire visual identity is an argument against visual identity. Founded in 1980 as a product line inside the Seiyu supermarket…
Grip
Brands · Pretendard
Korea's first live commerce platform — a mobile-first video shopping app where sellers and buyers connect in real time through livestreams, chat, and exclusive in-broadcast deals.
Team Sparta
Brands · Pretendard
Team Sparta (팀스파르타) is the Seoul company behind 스파르타클럽, the online AI and IT course brand its own design team still called 스파르타코딩클럽 (Spartacodingclub) in its team introduction. Its careers site states the belief the…
PayPay (ペイペイ)
Brands · Noto Sans JP
PayPay is Japan's dominant QR-code mobile wallet — the app that, almost single-handedly, dragged a famously cash-loving country into cashless payments. Its visual language is loud where Japanese fintech is…