CrowdWorks DESIGN.md
DESIGN.md
Design System Inspiration of CrowdWorks (クラウドワークス)
Overview
Visual Theme & Atmosphere
CrowdWorks is Japan's large crowdsourcing marketplace — clients post work, freelancers bid on
it. The landing surface is white, dense and set mostly at 12px (190 elements), with a
saturated orange #f26731 reserved for the actions that start an account and a navy
#004980 that is — by a wide margin — the most-rendered colour on the page.
That navy is --text-color-link, not the body ink. It paints 138 elements because a
marketplace home is mostly links to categories and jobs. The body ink is --text-color-black,
#353d48, a blue-leaning charcoal.
Three things make the token set worth reading:
- 32 tokens are whole CSS
fontshorthands.--paragraph-m-w3is400 18px / 1.8 "Hiragino Kaku Gothic Pro", sans-serif— weight, size, line height and family in one value. No other reference in this catalog tokenises typography this way. - 91 z-index tokens are named for the element they stack, down to
--z-jobs-sidebar-category-list-right-arrow, and written as arithmetic —calc(calc(1799 + 1) + 50)for a modal dialog. - 56 tokens belong to AI CrowdWorks, a sub-brand with its own purple-and-teal system, kept in its own namespace inside the parent's sheet.
Primary tasks
- Start as a client or a freelancer; sign in, or sign up with Google.
- Browse job categories, which is what most of the page is.
Brand Narrative
CrowdWorks connects clients and freelancers across Japan, and the landing page is built as a directory into that marketplace: most of it is links, which is why the link navy outnumbers every other colour. The orange appears only where an account begins.
The token set is the work of a team with a large, long-lived product to keep consistent — every stacking layer named after the thing it stacks, typography packaged as ready-to-use declarations, and a newer AI product given its own colour system without being allowed to leak into the parent's.
Principles
- Package the decision. A font token is a whole font declaration.
- Name layers by their occupant.
--z-jobs-sidebar-category-list-right-arrow. - Contain the sub-brand. AI CrowdWorks lives in
--aicw-*.
Personas
Not researched. No persona claim is made from a UI capture.
Colors
Measured with getComputedStyle on crowdworks.jp. 412 custom properties resolve; 17 are
Font Awesome's — --fa-font-light is normal 300 1em/1 "Font Awesome 6 Pro" and the rest
are the same icon font — and are excluded. CrowdWorks owns the other 395.
Primary blue
- Primary (
#006ab6) —--primary-800, and also--surface-color-primary,--text-color-primary,--line-color-primaryand--object-color-primary. One value under four semantic names, one per family. - Primary 500 (
#239ae7) · Primary 50 (#e3f2fb) — the middle and pale ends of a ten-step ramp. - Link (
#004980) —--text-color-link, which is--blue-900. The most-rendered colour on the page.
Orange — the account actions
- Brand CTA (
#f26731) —--orange-400, the fill on both sign-up buttons. - Orange 500 (
#f0510f) · Orange 700 (#d54507) · Text Orange (#cc4900,--text-color-orange=--orange-800).
Ink and lines
- Foreground (
#353d48) —--text-color-black=--gray-800. - Text Gray (
#617084) —--text-color-gray=--gray-500. - Disabled (
#cfd4da) —--text-color-disabled, and also--line-color-gray-light. - Line Gray (
#afb7c1) —--line-color-gray=--gray-200, and the border on the login button.
Surfaces
Canvas (#ffffff) · Surface Gray Light (#ecedf0) · Surface Gray Bright
(#f9fafb) · Surface Blue Light (#e7f1fa) · Surface Blue Bright (#f5f9ff).
Status — each with a light surface
Accent (#cb2442) · Danger (#c92b36) on #feecf0 · Success (#177835) on
#e6f4e9 · Warning (#8f6c00) on #fef9e4 · Info (#0467a2) on
#e0f2fa. Every one of those strong values is the -800 or -900 step of its ramp.
Visited (#9c27b0) — --text-color-visited, which is Material Design's purple 500.
The ramps, and one that is Material's
Eleven ramps: primary blue bluegray green red orange yellow accent purple
gray, ten steps each, plus black and white as alpha ladders (rgb(0 0 0 / 5%) through
/ 90%).
--purple-* is Material Design's purple palette — #9c27b0, #ab47bc, #ba68c8,
#ce93d8, #e1bee7, #f3e5f5 — with one exception: --purple-600 is #8d24aa where
Material has #8e24aa. The AI sub-brand's own --aicw-purple-600 is #8e24aa. Recorded as
found; which was copied from which is not knowable from the page.
AI CrowdWorks — a sub-brand in its own namespace
AICW Primary (#5628a8) — --aicw-primary-purple and --aicw-surface-color-primary ·
AICW Primary Dark (#4b2485) — its text colour · AICW Secondary (#0a7093) — a teal,
also its link colour · AICW Tertiary (#32d4af) — a mint.
It publishes five gradients built only from those, e.g.
--aicw-gradient-primary-tertiary: linear-gradient(90deg, #5628a8, #32d4af). It is
unmistakably CrowdWorks' own: --z-aicw-projects-login-gate-overlay puts it inside the
parent's z-index namespace.
Typography
Font family
Noto Sans JP is the rendered face — the only loaded webfont, and the first family on 308
text elements. --font-family-base declares "Hiragino Kaku Gothic Pro", sans-serif, which is
an operating-system face; it renders on 54 elements, all of them set through the
--paragraph-* / --single-* tokens that carry it inside their value. It is not recorded as a
brand face.
Typography as whole shorthands
This is the distinctive part. Two families, 16 tokens each:
--paragraph-<size>-w<3|6> 400|700 <size> / 1.8 "Hiragino Kaku Gothic Pro", sans-serif
--single-<size>-w<3|6> 400|700 <size> / 1 "Hiragino Kaku Gothic Pro", sans-serif
paragraph is running text at a 1.8 line height; single is one line at 1. w3 is weight
400, w6 is 700. Sizes run xxxs 10 · xxs 12 · xs 14 · s 16 · m 18 · l 22 ·
xl 28 · xxl 37. A consumer takes one token and gets a complete font declaration.
The size scale beneath adds 56 and 112 for display use.
Rendered: 12px ×190 · 14px ×67 · 16px ×37 · 20px ×18 · 18px ×15 · 24px ×13 · 28px ×10. Weights 400 ×217 and 700 ×143.
Values kept in prose
Measured values the DESIGN.md token grammar cannot carry, kept verbatim:
typography.leading.single:1typography.leading.paragraph:1.8
Layout
- Name the element, not the layer. 91 z-index tokens, each for one specific component.
- One token, one complete font declaration.
- A sub-brand is a namespace, not a theme —
--aicw-*beside the parent, not replacing it.
Responsive Behavior
Not measured. Desktop 1440×1000 only.
Elevation & Depth
Nine shadow tokens, all centred (no offset), in three composed sizes:
--shadow-s 0 0 2px 0 rgb(0 0 0 / 30%), 0 0 3px 1px rgb(0 0 0 / 15%) ·
--shadow-m 0 0 3px 0 … 30%, 0 0 8px 3px … 15% ·
--shadow-l 0 0 4px 0 … 30%, 0 0 12px 6px … 15% — a tight core plus a soft halo.
The one shadow observed on a control, on the Google button, is not any of these: it is
offset -1px 2px and tinted grey. It comes from the Google sign-in component rather than the
token set.
--blur-3 is blur(3px), and --background-color-black-modal is rgb(0 0 0 / 20%).
Motion & Easing
No motion token exists among the 395, and every measured control computes
transition: all with no duration — so the hover changes happen instantly.
Tier 1 sources: https://crowdworks.jp/ (live marketplace surface — 412 custom properties read via getComputedStyle, 17 of them Font Awesome's and excluded; six controls measured at rest, hover, pressed and focus, captured 2026-09-22); https://crowdworks.jp/zz-this-does-not-exist (nonsense-path control — a real HTTP 404 titled 「ページが見つかりませんでした【クラウドワークス】」 with its own 664-character body, establishing the host is not a catch-all, captured 2026-09-22)
Components
Six controls measured, every state on its own page load, focus read for every control before the mouse moved.
Hover is a translucent layer
The buttons keep their fill colour on hover and lay a black gradient over it in
background-image: 10% on the two orange sign-up buttons, 5% on the white login and
Google buttons. (Measured 2026-09-26; the first capture on 2026-09-22 read these as "no change"
because the probe compared background colour but not background image.) The guide row,
はじめての方へ, washes its background to rgba(32,34,39,.05) — ink at 5%. The email field is
the one control that stays identical under the pointer.
- Wide CTA —
#f26731, white 16px/700, 4px radius, 312×48. - Header sign-up — the same orange, 14px/700, 130×40.
- Login —
#ffffff,#353d48label,1px solid #afb7c1, 89×40. - Google —
#ffffffwith a1px solid #d6d6d6border and the only shadow among the six,rgba(163,162,162,0.2) -1px 2px 4px— cast down and to the left. - Guide row —
#f7f9fafill,#000000label at 11px/700, a1px solid #ecedf0top rule only, 360×53. - Email field —
#ffffff,1px solid #bcc5cc, 4px radius, 291×45.
Focus is the browser's — at three different widths
Every focusable button renders outline: rgb(0, 95, 204) auto — Chrome's default ring — but
at 1px, 2px or 3px depending on the control. The style stays auto, so it is still the
browser's ring; what CrowdWorks sets is only the width. --space-outline-offset-focus: 3px
sits in the spacing scale beside it. No focus colour is recorded.
The email field shows no focus indicator at all. It matches :focus-visible and every
property is unchanged — no ring, no border change, no shadow.
Radius
--border-radius-2 · -4 · -8 · -16 · -24 · -32 · -10000. Rendered: 4px ×32 ·
8px ×18 · 10px ×7 · 10000px ×3. The pill is ten thousand pixels.
States
Six components, every state measured. Hover and press lay a black layer over the buttons — 10% on
orange, 5% on white; the guide row washes to ink at 5%; the email field does not change. Focus is the browser's auto ring at a per-control width on every button,
and nothing at all on the email field.
No disabled state was observed on a rendered control. --text-color-disabled #cfd4da exists
in the set.
Live state probe, 2026-10-16 (https://crowdworks.jp/), button-cta: focus — background-image linear-gradient(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1)), browser default focus ring (outline auto).
Do's and Don'ts
Do
- Take a whole
--paragraph-*or--single-*token for a text style rather than rebuilding it from size, weight and line height. - Use
#004980for links and#353d48for body text — the navy is the link, not the ink. - Keep AI CrowdWorks surfaces in the
--aicw-*namespace.
Don't
- Don't count
--fa-*as CrowdWorks' — it is Font Awesome. - Don't take the Google button's offset shadow as a CrowdWorks elevation token.
- Don't copy the email field's missing focus indicator.
Voice & Tone
Not assessed as authored voice. 5,686 characters on the measured surface, mostly category and job-listing links.
Agent Prompt Guide
Quick Color Reference
#f26731 sign-up · #006ab6 primary · #004980 links · #353d48 ink · #617084 secondary ·
#afb7c1 lines · #cfd4da disabled · #ffffff / #ecedf0 / #f9fafb surfaces ·
#cb2442 accent · #c92b36 danger · #177835 success · #8f6c00 warning · #0467a2 info ·
AI CrowdWorks #5628a8 / #0a7093 / #32d4af
Example Component Prompts
- "A 48px sign-up button:
#f26731, white 16px/700 label, 4px radius; hover lays a 10% black layer over the orange." - "Body copy as
400 16px / 1.8 'Hiragino Kaku Gothic Pro', sans-serifin#353d48."
Governance
Known Gaps
- Contrast,
button-cta. Text#ffffffon#f26731measures 3.11:1, below the WCAG AA 4.5:1 minimum for normal-size text. Recorded as measured, not adjusted. - Contrast,
button-signup. Text#ffffffon#f26731measures 3.11:1, below the WCAG AA 4.5:1 minimum for normal-size text. Recorded as measured, not adjusted.
색상
브랜드
면과 글자
상태
그 밖의 색
타이포그래피
- Noto Sans JP산세리프 · 오픈 글꼴 · OFLGoogle Fonts에서 설치
타입 스케일
- hero--font-size-112; the largest published size112px
- display--font-size-5656px
- xxl--font-size-37; the largest --single/--paragraph step37px
- xl--font-size-2828px
- l--font-size-2222px
- m--font-size-1818px
- s--font-size-16; the wide call-to-action label16px
- xs--font-size-14; header button labels14px
여백과 모양
여백
- s22px
- s33px
- s44px
- s88px
- s1212px
- s1616px
- s2424px
- s3232px
- s4040px
- s4848px
- s5656px
- s6464px
- s7272px
- s8080px
모서리 반경
- xs2px
- sm4px
- md8px
- lg16px
- xl24px
- xxl32px
- pill10000px
컴포넌트
- button-ctabutton-cta채움 #f26731 · 글자 #ffffff · 반경 4px · 높이 48px · 안쪽 여백 0 16px · 글자 크기·굵기 16px / 700
- 호버 layer rgba(0,0,0,0.1)
- 누름 layer rgba(0,0,0,0.1)
- 포커스 background-image linear-gradient(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1)), browser default focus ring (outline auto) on :focus-visible
- button-signupbutton-signup채움 #f26731 · 글자 #ffffff · 반경 4px · 높이 40px · 안쪽 여백 0 16px · 글자 크기·굵기 14px / 700
- 호버 layer rgba(0,0,0,0.1)
- 누름 layer rgba(0,0,0,0.1)
- button-loginbutton-login채움 #ffffff · 글자 #353d48 · 테두리 1px solid #afb7c1 · 반경 4px · 높이 40px · 안쪽 여백 0 16px · 글자 크기·굵기 14px / 700
- 호버 layer rgba(0,0,0,0.05)
- 누름 layer rgba(0,0,0,0.05)
- button-googlebutton-google채움 #ffffff · 글자 #353d48 · 테두리 1px solid #d6d6d6 · 반경 4px · 높이 32px · 안쪽 여백 4px 16px 4px 8px · 글자 크기·굵기 12px / 700
- 호버 layer rgba(0,0,0,0.05)
- 누름 layer rgba(0,0,0,0.05)
- input-email채움 #ffffff · 글자 #353d48 · 테두리 1px solid #bcc5cc · 반경 4px · 높이 45px · 안쪽 여백 4px · 글자 크기·굵기 14px / 400
- 호버 #ffffff
- 누름 #ffffff
- 포커스 #ffffff