oh-my-design-cli 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -18
- package/data/reference-fingerprints.json +337 -3
- package/data/reference-tags.md +15 -1
- package/package.json +2 -2
- package/skills/omd-init/SKILL.md +1 -1
- package/web/AGENTS.md +5 -0
- package/{references → web/references}/airbnb/DESIGN.md +158 -19
- package/web/references/airtable/DESIGN.md +241 -0
- package/{references → web/references}/apple/DESIGN.md +131 -76
- package/web/references/baemin/DESIGN.md +470 -0
- package/{references → web/references}/bmw/DESIGN.md +138 -9
- package/{references → web/references}/cal/DESIGN.md +173 -17
- package/{references → web/references}/claude/DESIGN.md +11 -1
- package/{references → web/references}/clay/DESIGN.md +75 -0
- package/{references → web/references}/clickhouse/DESIGN.md +74 -0
- package/{references → web/references}/cohere/DESIGN.md +75 -0
- package/web/references/coinbase/DESIGN.md +205 -0
- package/{references → web/references}/composio/DESIGN.md +74 -0
- package/web/references/coupang/DESIGN.md +487 -0
- package/{references → web/references}/cursor/DESIGN.md +74 -0
- package/web/references/dcard/DESIGN.md +567 -0
- package/{references → web/references}/elevenlabs/DESIGN.md +91 -0
- package/{references → web/references}/expo/DESIGN.md +72 -0
- package/{references → web/references}/ferrari/DESIGN.md +72 -0
- package/{references → web/references}/figma/DESIGN.md +124 -48
- package/{references → web/references}/framer/DESIGN.md +143 -16
- package/web/references/freee/DESIGN.md +558 -0
- package/{references → web/references}/hashicorp/DESIGN.md +72 -0
- package/{references → web/references}/ibm/DESIGN.md +68 -0
- package/{references → web/references}/intercom/DESIGN.md +73 -0
- package/web/references/kakao/DESIGN.md +490 -0
- package/web/references/kakaobank/DESIGN.md +533 -0
- package/web/references/karrot/DESIGN.md +431 -0
- package/web/references/kraken/DESIGN.md +219 -0
- package/web/references/krds/DESIGN.md +982 -0
- package/web/references/kurly/DESIGN.md +574 -0
- package/{references → web/references}/lamborghini/DESIGN.md +74 -0
- package/{references → web/references}/line/DESIGN.md +84 -43
- package/{references → web/references}/linear.app/DESIGN.md +8 -1
- package/{references → web/references}/lovable/DESIGN.md +73 -0
- package/web/references/mercari/DESIGN.md +464 -0
- package/{references → web/references}/minimax/DESIGN.md +72 -0
- package/{references → web/references}/mintlify/DESIGN.md +72 -0
- package/web/references/miro/DESIGN.md +252 -0
- package/{references → web/references}/mistral.ai/DESIGN.md +72 -0
- package/{references → web/references}/mongodb/DESIGN.md +72 -0
- package/web/references/musinsa/DESIGN.md +536 -0
- package/web/references/naver/DESIGN.md +518 -0
- package/{references → web/references}/notion/DESIGN.md +9 -1
- package/web/references/nvidia/DESIGN.md +491 -0
- package/web/references/ohouse/DESIGN.md +570 -0
- package/{references → web/references}/ollama/DESIGN.md +72 -0
- package/{references → web/references}/opencode.ai/DESIGN.md +73 -0
- package/web/references/pinkoi/DESIGN.md +575 -0
- package/{references → web/references}/pinterest/DESIGN.md +73 -0
- package/{references → web/references}/posthog/DESIGN.md +172 -18
- package/web/references/qanda/DESIGN.md +459 -0
- package/{references → web/references}/raycast/DESIGN.md +169 -34
- package/{references → web/references}/renault/DESIGN.md +72 -0
- package/{references → web/references}/replicate/DESIGN.md +73 -0
- package/{references → web/references}/resend/DESIGN.md +73 -0
- package/{references → web/references}/revolut/DESIGN.md +74 -0
- package/web/references/ridi/DESIGN.md +517 -0
- package/{references → web/references}/runwayml/DESIGN.md +152 -24
- package/{references → web/references}/sanity/DESIGN.md +72 -0
- package/{references → web/references}/sentry/DESIGN.md +73 -0
- package/web/references/spacex/DESIGN.md +379 -0
- package/web/references/spotify/DESIGN.md +426 -0
- package/{references → web/references}/stripe/DESIGN.md +44 -1
- package/{references → web/references}/supabase/DESIGN.md +73 -0
- package/{references → web/references}/superhuman/DESIGN.md +159 -17
- package/{references → web/references}/tesla/DESIGN.md +170 -0
- package/{references → web/references}/together.ai/DESIGN.md +73 -0
- package/{references → web/references}/toss/DESIGN.md +304 -50
- package/{references → web/references}/uber/DESIGN.md +73 -0
- package/{references → web/references}/vercel/DESIGN.md +9 -1
- package/{references → web/references}/voltagent/DESIGN.md +73 -0
- package/{references → web/references}/warp/DESIGN.md +142 -15
- package/web/references/webflow/DESIGN.md +253 -0
- package/{references → web/references}/wise/DESIGN.md +84 -0
- package/{references → web/references}/x.ai/DESIGN.md +85 -0
- package/web/references/yanolja/DESIGN.md +448 -0
- package/web/references/yeogiotte/DESIGN.md +424 -0
- package/{references → web/references}/zapier/DESIGN.md +85 -0
- package/references/airtable/DESIGN.md +0 -107
- package/references/baemin/DESIGN.md +0 -260
- package/references/coinbase/DESIGN.md +0 -129
- package/references/dcard/DESIGN.md +0 -302
- package/references/freee/DESIGN.md +0 -308
- package/references/kakao/DESIGN.md +0 -261
- package/references/karrot/DESIGN.md +0 -252
- package/references/kraken/DESIGN.md +0 -146
- package/references/mercari/DESIGN.md +0 -294
- package/references/miro/DESIGN.md +0 -108
- package/references/nvidia/DESIGN.md +0 -308
- package/references/pinkoi/DESIGN.md +0 -309
- package/references/spacex/DESIGN.md +0 -205
- package/references/spotify/DESIGN.md +0 -246
- package/references/webflow/DESIGN.md +0 -109
|
@@ -1,302 +0,0 @@
|
|
|
1
|
-
# Design System Inspiration of Dcard
|
|
2
|
-
|
|
3
|
-
## 1. Visual Theme & Atmosphere
|
|
4
|
-
|
|
5
|
-
Dcard is Taiwan's largest anonymous social platform — and its design system is an exemplar of **Material Design adapted for East-Asian forum culture**. The page chrome is wrapped in a deep teal-navy (`#00324e`) header bar that frames a **clean light-gray content surface** (`#f2f2f2`), inside which posts sit on **pure white cards** (`#ffffff`). This editorial framing — dark exterior, clean interior — distinguishes Dcard from the all-light Western social platforms (Reddit, Facebook) and the all-dark gamer-chic alternatives. It feels closer to a curated digital magazine than an open feed.
|
|
6
|
-
|
|
7
|
-
Typography is **Roboto-led** with comprehensive Traditional Chinese fallbacks (`Roboto, "Helvetica Neue", Helvetica, Arial, "PingFang TC", 黑體-繁, "Heiti TC", 蘋果儷中黑, "Apple LiGothic Medium", 微軟正黑體, "Microsoft JhengHei"`). Headlines use **weight 500 (medium)**, not 700 — a Material Design convention that creates hierarchy through subtle weight shifts and color (`rgba(0,0,0,0.85)` for primary text). The typography scale is exhaustive: 4 headline tiers (32/28/24/20px), title (18px/600), 2 subtitles (16/14px/500), 2 body sizes (16/14px/400), and 2 caption sizes (12/10px/500).
|
|
8
|
-
|
|
9
|
-
What truly distinguishes Dcard is the **breadth of its semantic token system**. The site exposes 200+ CSS custom properties on `:root`, organized into clear namespaces: `--color-dcard-*` for brand, `--color-state-*` for status, `--color-text-*` for foreground, `--color-bg-*` for surfaces, `--color-gender-*` for forum-specific identity colors (a unique reflection of Dcard's gender-tagged posting culture), `--shadow-level-1` through `--shadow-level-5` for elevation, `--vars-*` for layout sizing, and `--animations-*` for motion. This isn't an internal-only design system — it's a public, semantically-named token layer that any agent can read directly from the live site.
|
|
10
|
-
|
|
11
|
-
**Key Characteristics:**
|
|
12
|
-
- Roboto-led typography stack with full Traditional Chinese (`PingFang TC`, `Heiti TC`, `微軟正黑體`) fallbacks
|
|
13
|
-
- **Weight 500 (medium)** as the headline default — Material Design convention, not bold-700
|
|
14
|
-
- 200+ semantic CSS custom properties exposed on `:root` (effectively a public design system)
|
|
15
|
-
- Deep teal-navy header (`#00324e`) framing a light-gray content area (`#f2f2f2`) with white post cards
|
|
16
|
-
- Blue-monochrome brand palette: primary `#3397cf`, secondary `#006aa6`, tertiary `#00324e`
|
|
17
|
-
- 5-level Material elevation shadow system (`--shadow-level-1` to `--shadow-level-5`)
|
|
18
|
-
- Material Design easing curve: `cubic-bezier(.4, 0, .2, 1)` with `.15s` short / `.3s` medium durations
|
|
19
|
-
- Unique **gender-coded color tokens** (`--color-gender-female: #cb3a6b`, `--color-gender-male: #1c7fac`) reflecting forum culture
|
|
20
|
-
- **Gold premium accent** (`#ffc51b`) reserved for subscription/premium features
|
|
21
|
-
- **Topic purple** (`#bf8ff0`) for cross-cutting interest groups
|
|
22
|
-
- 8px border-radius is the default (buttons, cards, chips); `--vars-max-page-width: 1280px` with 728px main content + 300px aside
|
|
23
|
-
|
|
24
|
-
## 2. Color Palette & Roles
|
|
25
|
-
|
|
26
|
-
Dcard exposes its color system via CSS custom properties on `:root`. All values below are extracted directly.
|
|
27
|
-
|
|
28
|
-
### Brand
|
|
29
|
-
- **Dcard Primary** (`#3397cf`): `--color-dcard-primary`. Main brand blue. Used for primary CTAs (Download App), brand icons, link accents.
|
|
30
|
-
- **Dcard Primary Hover** (`#5ab0db`): `--color-dcard-primary-hover`. Lighter blue for hover states.
|
|
31
|
-
- **Dcard Secondary** (`#006aa6`): `--color-dcard-secondary`. Deeper supporting blue, used in search submit buttons and active states.
|
|
32
|
-
- **Dcard Tertiary** (`#00324e`): `--color-dcard-tertiary`. The signature deep teal-navy. Used as the page header bg, sidebar hover bg (`--color-bg-sidebar-hover: #032133`), and brand chrome.
|
|
33
|
-
- **Dcard Hint** (`#e7f3f9`): `--color-dcard-hint`. Very light blue tint for hover backgrounds and subtle highlights.
|
|
34
|
-
- **Dcard Premium** (`#ffc51b`): `--color-dcard-premium`. Gold for premium subscribers and paid features.
|
|
35
|
-
- **Dcard Premium Hover** (`#ffd558`): `--color-dcard-premium-hover`.
|
|
36
|
-
|
|
37
|
-
### State (Status)
|
|
38
|
-
- **Success** (`#49bd69`): `--color-state-success`. Hover `#6fc985`, active `#339653`.
|
|
39
|
-
- **Danger** (`#ea5c5c`): `--color-state-danger`. Hover `#f78c88`, active `#c44347`.
|
|
40
|
-
- **Reminder / Warning** (`#f0a955`): `--color-state-reminder`. Hover `#f0b941`, active `#da9246`.
|
|
41
|
-
|
|
42
|
-
### Backgrounds (Surfaces)
|
|
43
|
-
- **Bg Base 1** (`#f2f2f2`): `--color-bg-base-1`. Default page content background — the gray frame inside the navy header.
|
|
44
|
-
- **Bg Base 2** (`#ffffff`): `--color-bg-base-2`. Card surface, post background.
|
|
45
|
-
- **Bg Base 3** (`#ffffff`): `--color-bg-base-3`. Same as base 2; reserved for layered cards.
|
|
46
|
-
- **Bg Light** (`#ffffff`): `--color-bg-light`. Pure white, modal/dropdown surfaces.
|
|
47
|
-
- **Bg Dark** (`#000000`): `--color-bg-dark`. Reserved for inverted contexts.
|
|
48
|
-
- **Bg Container** (`#0000000d`): `--color-bg-container`. Black 5% — chip backgrounds on light surfaces.
|
|
49
|
-
- **Bg Special** (`#f0b941`): `--color-bg-special`. Same as reminder hover — used for promotional/sponsored chips.
|
|
50
|
-
- **Bg Topic** (`#bf8ff0`): `--color-bg-topic`. Lavender-purple for topic tags (cross-cutting interest groups).
|
|
51
|
-
- **Bg Snackbar** (`#2c2c2c`): `--color-bg-snackbar`. Dark gray for toast notifications.
|
|
52
|
-
- **Bg Sidebar Hover** (`#032133`): `--color-bg-sidebar-hover`. Slightly darker than tertiary for sidebar item hover.
|
|
53
|
-
- **Bg Chip on Dark** (`#ffffff14`): `--color-bg-chip-on-dark`. White 8% for chips on the navy header.
|
|
54
|
-
- **Bg Spotlight** (`#00000059`): `--color-bg-spotlight`. Black 35% — modal backdrop.
|
|
55
|
-
- **Bg Sign-up Overlay** (`#000000b3`): `--color-bg-sign-up-overlay`. Black 70% — full-page CTA overlay.
|
|
56
|
-
- **Bg Btn Disabled** (`#e0e0e0`): `--color-bg-btn-disabled`.
|
|
57
|
-
- **Shimmer Bg / Fg** (`#f2f2f2` / `#fafafa`): Loading skeleton colors.
|
|
58
|
-
|
|
59
|
-
### Text (Foreground)
|
|
60
|
-
- **Text Primary** (`#000000d9`): `--color-text-primary`. Black at 85% opacity. Used for headings, post titles, primary body text.
|
|
61
|
-
- **Text Secondary** (`#00000080`): `--color-text-secondary`. Black at 50%. Captions, timestamps, metadata.
|
|
62
|
-
- **Text Hint** (`#00000059`): `--color-text-hint`. Black at 35%. Placeholder hints.
|
|
63
|
-
- **Text Disabled** (`#0003`): `--color-text-disabled`. Black at 20%.
|
|
64
|
-
- **Text Light Primary** (`#ffffff`): `--color-text-light-primary`. White text on the navy header.
|
|
65
|
-
- **Text Light Secondary** (`#ffffff8c`): `--color-text-light-secondary`. White at 55% on dark surfaces.
|
|
66
|
-
- **Text Light Hint** (`#fff6`): `--color-text-light-hint`. White at 40%.
|
|
67
|
-
- **Text Dark Primary / Secondary**: Same as primary / secondary, semantic aliases.
|
|
68
|
-
- **Text Default Hovered** (`#00000059`): `--color-text-default-hovered`.
|
|
69
|
-
|
|
70
|
-
### Borders & Separators
|
|
71
|
-
- **Border** (`#cacaca`): `--color-border`. Standard component border (inputs, dividers).
|
|
72
|
-
- **Border Disabled** (`#e0e0e0`): `--color-border-disabled`.
|
|
73
|
-
- **Separator** (`#0000001a`): `--color-separator`. Black 10% — row dividers on light surfaces.
|
|
74
|
-
- **Separator on Dark** (`#ffffffb3`): `--color-separator-on-dark`. White 70% — separators on the navy header.
|
|
75
|
-
|
|
76
|
-
### Gender-Coded (Unique to Dcard)
|
|
77
|
-
A reflection of Dcard's posting culture, where many forums (女孩 / 男生 / 心情) display gender-tagged author chips:
|
|
78
|
-
- **Female** (`#cb3a6b`): `--color-gender-female`. Light variant `#f48fb1`.
|
|
79
|
-
- **Male** (`#1c7fac`): `--color-gender-male`. Light variant `#81d4fa`.
|
|
80
|
-
- **Other** (`#2c2c2c`): `--color-gender-other`. Light variant `#e0e0e0`.
|
|
81
|
-
|
|
82
|
-
### Icon & Misc
|
|
83
|
-
- **Icon Button** (`#000000b3`): `--color-icon-button`. Black 70% — default icon color on light surfaces.
|
|
84
|
-
- **Crop Mask** (`#000000b3`): `--color-crop-mask`. Modal/crop UI backdrop.
|
|
85
|
-
- **Brand Sponsor Hovered** (`#fcd46d`): `--color-brand-sponsor-hovered`. Sponsored content highlight.
|
|
86
|
-
|
|
87
|
-
## 3. Typography Rules
|
|
88
|
-
|
|
89
|
-
### Font Stack
|
|
90
|
-
```
|
|
91
|
-
Roboto, "Helvetica Neue", Helvetica, Arial, "PingFang TC", 黑體-繁, "Heiti TC", 蘋果儷中黑, "Apple LiGothic Medium", 微軟正黑體, "Microsoft JhengHei", sans-serif
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
Roboto leads (Material Design convention), with full Traditional Chinese fallbacks for native rendering on TW/HK Chrome environments.
|
|
95
|
-
|
|
96
|
-
### Type Scale (verified from `:root` CSS custom properties)
|
|
97
|
-
|
|
98
|
-
| Role | Token | Size | Weight | Line Height |
|
|
99
|
-
|---|---|---|---|---|
|
|
100
|
-
| Headline 1 | `--typography-headline-1-font-size` | `32px` (mobile `30px`) | `500` | `42px` (mobile `40px`) |
|
|
101
|
-
| Headline 2 | `--typography-headline-2-font-size` | `28px` (mobile `24px`) | `500` | `40px` (mobile `33px`) |
|
|
102
|
-
| Headline 3 | `--typography-headline-3-font-size` | `24px` (mobile `20px`) | `500` | `28px` |
|
|
103
|
-
| Headline 4 | `--fonts-headline-4-font-size` | `20px` | `500` | `28px` |
|
|
104
|
-
| Title | `--typography-title-font-size` | `18px` | `600` | `25px` |
|
|
105
|
-
| Subtitle 1 | `--typography-subtitle-1-font-size` | `16px` | `500` | `22px` |
|
|
106
|
-
| Subtitle 2 | `--typography-subtitle-2-font-size` | `14px` | `500` | `20px` |
|
|
107
|
-
| Body 1 | `--typography-body-1-font-size` | `16px` | `400` | `22px` |
|
|
108
|
-
| Body 1 (lh-28 variant) | `--typography-body-1-lh-28-font-size` | `16px` | `400` | `28px` (article reading) |
|
|
109
|
-
| Body 2 | `--typography-body-2-font-size` | `14px` | `400` | `20px` |
|
|
110
|
-
| Caption | `--typography-caption-font-size` | `12px` | `500` | `17px` |
|
|
111
|
-
| Caption 2 | `--typography-caption-2-font-size` | `10px` | `500` | `16px` |
|
|
112
|
-
|
|
113
|
-
### Conventions
|
|
114
|
-
- **Weight 500 (medium)** is the headline default — never weight 700/800 like commerce or news sites. Material Design heritage.
|
|
115
|
-
- **Title is the only weight-600 tier** — used sparingly for section headers in modals and editors.
|
|
116
|
-
- **Body uses weight 400** — captions and small labels jump to weight 500 to remain readable at small sizes.
|
|
117
|
-
- **Mobile sizes step down by ~20%** for headlines but stay identical for body and below.
|
|
118
|
-
- **Line-heights are generous** (1.3–1.4× ratio for body, ~1.4× for headlines) — supports CJK glyph density.
|
|
119
|
-
|
|
120
|
-
## 4. Component Stylings
|
|
121
|
-
|
|
122
|
-
### Buttons
|
|
123
|
-
**Default radius**: `8px` (verified across multiple button variants on the site).
|
|
124
|
-
|
|
125
|
-
| Variant | Bg | Text | Notable |
|
|
126
|
-
|---|---|---|---|
|
|
127
|
-
| Primary CTA (Download App) | `#3397cf` (`--color-dcard-primary`) | `#ffffff` | Weight 500, 14px |
|
|
128
|
-
| Secondary CTA (search submit) | `#006aa6` (`--color-dcard-secondary`) | `#ffffff` | Often joined to input → `border-radius: 0px 4px 4px 0px` |
|
|
129
|
-
| Counter / Action (584, 179 likes) | transparent | `rgba(0,0,0,0.5)` | 8px radius, 14px weight 500 |
|
|
130
|
-
| Disabled | `#e0e0e0` (`--color-bg-btn-disabled`) | secondary text | |
|
|
131
|
-
|
|
132
|
-
Padding patterns: `1px 14px` (small), `8px 20px` (medium for search submit).
|
|
133
|
-
|
|
134
|
-
### Cards (Post Entry)
|
|
135
|
-
- White bg (`#ffffff` = `--color-bg-base-2`)
|
|
136
|
-
- Sit on the gray content background (`#f2f2f2`) → contrast handles separation, no border needed
|
|
137
|
-
- `--vars-min-post-list-section-width: 728px` defines the main feed width
|
|
138
|
-
- `--vars-post-entry-padding: 20px` for inner spacing
|
|
139
|
-
- `--vars-post-entry-thumbnail-size: 84px` for inline thumbnails
|
|
140
|
-
- Cross-post variants use `--vars-post-entry-cross-post-thumbnail-size: 66px`
|
|
141
|
-
- Forum cards have explicit dimensions: `--vars-forum-card-width: 146px`, `--vars-forum-card-height: 110px`
|
|
142
|
-
|
|
143
|
-
### Header / Navigation
|
|
144
|
-
- **Header**: `--vars-header-height: 48px`, `--vars-header-padding: 20px`, bg `#00324e` (tertiary), white text
|
|
145
|
-
- **Logo + Search + Sign In/Up + Download App**: horizontal layout
|
|
146
|
-
- **Search input**: White bg, pill-leaning corners (left 0px, right 8px when joined with submit)
|
|
147
|
-
- **Left Sider** (forum nav): `--vars-my-page-sider-width: 208px`, light bg, icon + text rows
|
|
148
|
-
- **Right Aside** (widgets/ads): `--vars-forum-aside-section-width: 300px`, `--vars-forum-aside-section-gap: 10px`
|
|
149
|
-
|
|
150
|
-
### Tabs (All / Following)
|
|
151
|
-
- Underline-driven indicator
|
|
152
|
-
- Active tab: text color `--color-text-primary` (`#000000d9`)
|
|
153
|
-
- Inactive: `--color-text-secondary` (`#00000080`)
|
|
154
|
-
- Tab header height: `--vars-tabview-header-height: 48px`
|
|
155
|
-
|
|
156
|
-
### Chips / Topics
|
|
157
|
-
- Topic chips: bg `#bf8ff0` (`--color-bg-topic`), white text — lavender accent
|
|
158
|
-
- Sponsor/special chips: bg `#f0b941` (`--color-bg-special`)
|
|
159
|
-
- On-dark chips: bg `#ffffff14` (`--color-bg-chip-on-dark`)
|
|
160
|
-
- Topic spacing: `--vars-topic-gap: 8px`
|
|
161
|
-
- Topic list height: `--vars-topic-list-height: 60px`
|
|
162
|
-
|
|
163
|
-
### Snackbar / Toast
|
|
164
|
-
- Bg `#2c2c2c` (`--color-bg-snackbar`)
|
|
165
|
-
- White text (`--color-text-light-primary`)
|
|
166
|
-
- Bottom positioning: `--vars-toast-bottom: 0px`, `--vars-toast-width: 250px`
|
|
167
|
-
- With bottom bar: `--vars-snackbar-bottom-with-bottom-bar: 16px`
|
|
168
|
-
|
|
169
|
-
### Modals
|
|
170
|
-
- Post modal: `--vars-post-modal-width: 728px`
|
|
171
|
-
- Comment modal: `--vars-comment-modal-width: 720px`
|
|
172
|
-
- Backdrop: `--color-bg-spotlight` (`#00000059`) or `--color-mask` (`#0006`)
|
|
173
|
-
|
|
174
|
-
### Sign-Up Overlay
|
|
175
|
-
- Full-page bg: `--color-bg-sign-up-overlay` (`#000000b3`, black 70%)
|
|
176
|
-
- Triggers after scroll/engagement to encourage account creation
|
|
177
|
-
|
|
178
|
-
## 5. Layout Principles
|
|
179
|
-
|
|
180
|
-
### Page Structure
|
|
181
|
-
- **Max page width**: `--vars-max-page-width: 1280px`
|
|
182
|
-
- **Three-column layout**:
|
|
183
|
-
- Left sider (forum nav): `208px` (`--vars-my-page-sider-width`)
|
|
184
|
-
- Main content (post list): `728px` (`--vars-min-post-list-section-width`)
|
|
185
|
-
- Right aside (widgets/ads): `300px` (`--vars-forum-aside-section-width`)
|
|
186
|
-
- Sections gap: `--vars-forum-sections-gap: 12px`
|
|
187
|
-
|
|
188
|
-
### Spacing
|
|
189
|
-
- **Header padding**: `20px`
|
|
190
|
-
- **Post entry padding**: `20px`
|
|
191
|
-
- **Post view padding**: `20px` vertical, `24px` horizontal
|
|
192
|
-
- **Post list section padding**: `20px` vertical, `24px` horizontal
|
|
193
|
-
- **Columns item horizontal**: `24px`
|
|
194
|
-
- Content title height: `60px` (`--vars-my-page-content-title-height`)
|
|
195
|
-
|
|
196
|
-
### Density
|
|
197
|
-
Dcard is **medium-density**. Posts are visually distinct (white card on gray bg), but the 728px main column packs efficiently — title + preview + thumbnail + actions in a single horizontal row at desktop sizes. Not as dense as Pinkoi commerce, not as airy as Medium articles.
|
|
198
|
-
|
|
199
|
-
## 6. Depth & Elevation
|
|
200
|
-
|
|
201
|
-
Dcard uses a **Material Design-style 5-level shadow system**, all keyed off black with low alpha for soft, neutral elevation.
|
|
202
|
-
|
|
203
|
-
| Level | Token | Value | Use |
|
|
204
|
-
|---|---|---|---|
|
|
205
|
-
| 1 | `--shadow-level-1` | `0px 1px 6px -2px #00000052` | Subtle lift (chips, hover cards) |
|
|
206
|
-
| 2 | `--shadow-level-2` | `0px 2px 8px -1px #0003` | Default card, dropdown |
|
|
207
|
-
| 3 | `--shadow-level-3` | `0px 3px 12px #0000002e` | Elevated card, popover |
|
|
208
|
-
| 4 | `--shadow-level-4` | `0px 4px 16px #00000029` | Modal, sticky bar |
|
|
209
|
-
| 5 | `--shadow-level-5` | `0px 6px 24px #0000001f` | Highest elevation: dialogs, full-screen overlays |
|
|
210
|
-
|
|
211
|
-
Note: Most post cards on the feed sit **flat without shadow** — the content area (`#f2f2f2`) provides separation against white cards via contrast. Shadows are reserved for genuinely floating elements.
|
|
212
|
-
|
|
213
|
-
### Z-Index
|
|
214
|
-
- Header is sticky and sits above content
|
|
215
|
-
- Modals use `--color-bg-spotlight` backdrop
|
|
216
|
-
- Sign-up overlay (`--color-bg-sign-up-overlay`) sits above all chrome
|
|
217
|
-
- Toast/snackbar at the highest level
|
|
218
|
-
|
|
219
|
-
### Animation
|
|
220
|
-
- Easing: `--animations-bezier: cubic-bezier(.4, 0, .2, 1)` — Material Design standard easing curve
|
|
221
|
-
- Short duration: `--animations-short-duration: .15s` (hover, press)
|
|
222
|
-
- Medium duration: `--animations-medium-duration: .3s` (page transitions, accordions)
|
|
223
|
-
|
|
224
|
-
## 7. Do's and Don'ts
|
|
225
|
-
|
|
226
|
-
- **DO** use weight 500 (medium) for headlines. Dcard never goes weight 700 — Material Design convention.
|
|
227
|
-
- **DON'T** use weight 700 except in legacy or one-off display contexts.
|
|
228
|
-
- **DO** use the semantic color token namespace: `--color-dcard-*` for brand, `--color-state-*` for status, `--color-text-*` for foreground, `--color-bg-*` for surfaces.
|
|
229
|
-
- **DON'T** introduce ad-hoc hex values. Dcard's 200+ tokens cover virtually every UI surface.
|
|
230
|
-
- **DO** wrap the page in the deep navy header (`#00324e`) and place content on the gray base (`#f2f2f2`) with white cards. The chrome/content contrast is the brand signature.
|
|
231
|
-
- **DON'T** use white-on-white nesting — the `#f2f2f2` content layer is what separates white cards visually.
|
|
232
|
-
- **DO** use `8px border-radius` as the default for buttons, cards, and chips.
|
|
233
|
-
- **DON'T** use 4px or sharp corners — Dcard's softer 8px radius is the brand's tactile signature.
|
|
234
|
-
- **DO** use `--shadow-level-2` (`0px 2px 8px -1px #0003`) for default cards that need elevation. Use higher levels only for genuinely floating UI.
|
|
235
|
-
- **DON'T** apply heavy shadows to feed posts — let the gray/white contrast separate them.
|
|
236
|
-
- **DO** use the gender colors (`--color-gender-female`, `--color-gender-male`, `--color-gender-other`) for author chips on gender-tagged posts. This is a culturally significant part of Dcard's UX.
|
|
237
|
-
- **DON'T** use gender colors for non-author contexts — it conflates identity with status.
|
|
238
|
-
- **DO** reserve gold (`#ffc51b`, `--color-dcard-premium`) for premium/subscription features only.
|
|
239
|
-
- **DON'T** use premium gold for warnings or general highlights — it weakens the subscription signal.
|
|
240
|
-
- **DO** use Material easing `cubic-bezier(.4, 0, .2, 1)` with `.15s` for hover/press and `.3s` for page transitions.
|
|
241
|
-
- **DON'T** use bouncy/elastic easing — Dcard's motion is restrained and platform-native.
|
|
242
|
-
|
|
243
|
-
## 8. Responsive Behavior
|
|
244
|
-
|
|
245
|
-
### Breakpoints (inferred from mobile-specific tokens)
|
|
246
|
-
Dcard provides explicit mobile typography sizes via `--typography-*-font-size-mobile` tokens, indicating a clear breakpoint at the tablet/mobile boundary (typically 768px in Material conventions).
|
|
247
|
-
|
|
248
|
-
| Width | Behavior |
|
|
249
|
-
|---|---|
|
|
250
|
-
| Desktop `>1280px` | Centered max-width container, three-column layout (208 / 728 / 300) |
|
|
251
|
-
| Desktop `1024–1280px` | Three-column compresses, asides may collapse |
|
|
252
|
-
| Tablet `768–1024px` | Right aside hidden, two-column (sider + main) |
|
|
253
|
-
| Mobile `<768px` | Single column. Headlines step down: H1 32px → 30px, H2 28px → 24px, H3 24px → 20px |
|
|
254
|
-
|
|
255
|
-
### Touch & Mobile
|
|
256
|
-
- Bottom navigation height token: `--vars-bottom-navigation-height: 0px` on web (used in app webviews)
|
|
257
|
-
- Safe area inset: `--safe-area-inset-bottom: 0px` (notch handling)
|
|
258
|
-
- Forum hero image: `--vars-forum-hero-image-height: 243px`
|
|
259
|
-
|
|
260
|
-
### Media Caps
|
|
261
|
-
- `--vars-max-post-media-vh: 60vh` — embedded videos/images cap at 60% viewport height
|
|
262
|
-
- Cover image: `width: 100%`, `object-fit: cover`, `height: 100%` (`--mixins-cover-image-*`)
|
|
263
|
-
|
|
264
|
-
### Text Truncation
|
|
265
|
-
- Single-line ellipsis: `--mixins-ellipsis-overflow: hidden; --mixins-ellipsis-text-overflow: ellipsis; --mixins-ellipsis-white-space: nowrap`
|
|
266
|
-
- Multi-line clamp: `--mixins-multi-ellipsis-display: -webkit-box`, `--mixins-multi-ellipsis--webkit-box-orient: vertical`, `--mixins-multi-ellipsis--webkit-line-clamp: 1`
|
|
267
|
-
- Line-clamp value can be customized per component
|
|
268
|
-
|
|
269
|
-
## 9. Agent Prompt Guide
|
|
270
|
-
|
|
271
|
-
### Quick Color Reference
|
|
272
|
-
- Primary CTA: `--color-dcard-primary` (`#3397cf`); hover `#5ab0db`
|
|
273
|
-
- Secondary CTA: `--color-dcard-secondary` (`#006aa6`)
|
|
274
|
-
- Page chrome (header bg): `--color-dcard-tertiary` (`#00324e`)
|
|
275
|
-
- Page content bg: `--color-bg-base-1` (`#f2f2f2`)
|
|
276
|
-
- Card / surface: `--color-bg-base-2` (`#ffffff`)
|
|
277
|
-
- Primary text: `--color-text-primary` (`#000000d9`, black 85%)
|
|
278
|
-
- Secondary text: `--color-text-secondary` (`#00000080`, black 50%)
|
|
279
|
-
- Border: `--color-border` (`#cacaca`)
|
|
280
|
-
- Separator: `--color-separator` (`#0000001a`, black 10%)
|
|
281
|
-
- Premium: `--color-dcard-premium` (`#ffc51b`) — subscription only
|
|
282
|
-
- Topic accent: `--color-bg-topic` (`#bf8ff0`)
|
|
283
|
-
- Success / Danger / Reminder: `#49bd69` / `#ea5c5c` / `#f0a955`
|
|
284
|
-
|
|
285
|
-
### Example Component Prompts
|
|
286
|
-
- "Create a Dcard-style post card: white bg (`#ffffff`), no border, no radius (sits on gray `#f2f2f2` page bg). Inner padding 20px. Layout: avatar (40px circle) + forum name (12px weight 500 colored per forum) + timestamp (12px weight 500 `#00000080`) on top row, post title H4 size (20px weight 500 `#000000d9`) on second row, body preview (14px weight 400 `#00000080` 2-line clamp), inline thumbnail (84px), action buttons (heart/comment/save/share) at bottom."
|
|
287
|
-
- "Build a Dcard primary button: bg `#3397cf`, white text, 8px border-radius, 14px weight 500, padding `8px 20px`. Hover: bg `#5ab0db`. Active: darken further. No shadow. Transition: `background .15s cubic-bezier(.4, 0, .2, 1)`."
|
|
288
|
-
- "Design the Dcard header: full-width sticky bar, height 48px, bg `#00324e` (tertiary navy), white logo on left (28px height), search input center (white bg, 8px radius left side, joined search submit `#006aa6` on right with `0px 8px 8px 0px` radius), Sign in/Sign up text link + Download App button (`#3397cf` bg, white text, 8px radius) on right."
|
|
289
|
-
- "Create a topic chip: bg `#bf8ff0` (lavender purple), white text, 12px weight 500, 8px radius, padding `4px 10px`. Use only for cross-cutting topics (e.g., '#study tips', '#dating advice')."
|
|
290
|
-
- "Build a sign-up overlay CTA: full-page absolute overlay with `#000000b3` (black 70%) bg, centered content card (white, 8px radius, `0px 6px 24px #0000001f` shadow level 5), heading 'From school to work, find your resonance on Dcard.' (24px weight 500 `#000000d9`), subhead 14px weight 400 `#00000080`, two buttons: Sign in (white border ghost) + Sign up (`#3397cf` filled). Triggers after 2 scroll lengths."
|
|
291
|
-
|
|
292
|
-
### Iteration Guide
|
|
293
|
-
1. **Always reference CSS variables, not hex values** — Dcard's design system is its `:root` token layer. `--color-dcard-primary` is more durable than `#3397cf`.
|
|
294
|
-
2. **Default headline weight is 500, never 700**. Dcard is Material Design-aligned.
|
|
295
|
-
3. **`8px` radius everywhere** (buttons, cards, chips). Don't use 4px or pill shapes.
|
|
296
|
-
4. **Wrap page in `#00324e` chrome + content on `#f2f2f2` + white cards** — this is the visual signature.
|
|
297
|
-
5. **Five shadow levels exist (`--shadow-level-1` to `-5`)** — use level 2 for cards by default, escalate only for floating UI.
|
|
298
|
-
6. **Roboto first, then Traditional Chinese fallbacks** — never hardcode `font-family` without including the TC stack.
|
|
299
|
-
7. **Material easing `cubic-bezier(.4, 0, .2, 1)`** with `.15s` (hover/press) or `.3s` (transitions). Don't use bounce.
|
|
300
|
-
8. **Gender colors (`--color-gender-*`) only for author chips** on gender-tagged forums (女孩/男生/感情). Never repurpose.
|
|
301
|
-
9. **Premium gold (`#ffc51b`) only for subscription/premium UI**. It's a finite signal.
|
|
302
|
-
10. **Three-column layout 208 / 728 / 300** at desktop. Right aside drops first on tablet, sider drops on mobile.
|
|
@@ -1,308 +0,0 @@
|
|
|
1
|
-
# Design System Inspiration of freee
|
|
2
|
-
|
|
3
|
-
## 1. Visual Theme & Atmosphere
|
|
4
|
-
|
|
5
|
-
freee is Japan's leading cloud accounting / HR / payroll SaaS, and its design system **Vibes** is fully open-source at [github.com/freee/vibes](https://github.com/freee/vibes). The token files (`stylesheets/lv0/_colors.scss`, `_size.scss`, `_fonts.scss`) form a clean, semantic, three-tier architecture: **scale tokens** (`$vbColorsP01`–`P10` for primary blues, `S01`–`S10` for grayscale, etc.), **semantic tokens** (`$vbPrimaryColor`, `$vbAccentColor`, `$vbAlertColor`), and **component tokens** (line-height, font sizes mapped to typography roles). This is the cleanest token architecture among the OMD references — and it's all readable from one place.
|
|
6
|
-
|
|
7
|
-
The brand is anchored in a **deep enterprise blue** (`#285ac8`, `$vbColorsP07`) — calm, trustworthy, financial-software professional. A lighter accent blue (`#73a5ff`, `$vbColorsP04`) handles secondary emphasis. The color system extends across 9 hue families (Primary, Secondary/gray, Red, Orange, Yellow, Yellow-Green, Green, Blue-Green, Purple, Gray) with each having 5-10 calibrated shades, giving designers a complete palette for status, illustrations, and category coding.
|
|
8
|
-
|
|
9
|
-
Typography is a Japanese-first system stack: `-apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'ヒラギノ角ゴ ProN', Hiragino Kaku Gothic ProN, Arial, 'メイリオ', Meiryo, sans-serif`. The brand wordmark uses Noto Sans CJK JP Medium loaded explicitly as `freee-logo`. The type scale is a tight 5-step rhythm (10 / 12 / 14 / 16 / 24dp), with mobile sizes stepping down for headline tiers. Spacing follows a consistent 4dp baseline (4 / 8 / 16 / 24 / 32 / 48dp).
|
|
10
|
-
|
|
11
|
-
**Key Characteristics:**
|
|
12
|
-
- **Open-source design system** ([freee/vibes](https://github.com/freee/vibes)) with three-tier token architecture (scale → semantic → component)
|
|
13
|
-
- Enterprise blue brand: `#285ac8` primary (`$vbColorsP07`), `#73a5ff` accent (`$vbColorsP04`)
|
|
14
|
-
- 9-hue palette: Primary (P), Secondary/gray (S), Red (RE), Orange (OR), Yellow (YE), Yellow-Green (YG), Green (GR), Blue-Green (BG), Purple (PU), pure Gray (GY)
|
|
15
|
-
- Each hue scale has 5-10 calibrated shades (P01 lightest → P10 darkest)
|
|
16
|
-
- 4dp baseline spacing scale: `xs 4dp / s 8dp / basic 16dp / large 24dp / xl 32dp / xxl 48dp`
|
|
17
|
-
- Tight 5-step type scale: `10 / 12 / 14 / 16 / 24dp` — no display extremes, no middle gaps
|
|
18
|
-
- Form-control heights as design tokens: `small 24dp / basic 36dp / large 48dp`
|
|
19
|
-
- Container max-width `1120dp` (`70rem`) — wider than Bootstrap defaults but narrower than Mercari
|
|
20
|
-
- Three explicit shadow recipes: card, floating, popup (graduated weights)
|
|
21
|
-
- Z-index hierarchy with semantic names: overlay 100 → form actions 200 → floating 500 → full-screen 700 → modal 1000 → popup 2000 → max
|
|
22
|
-
- Japanese-first font stack with Hiragino Kaku Gothic ProN as the primary CJK fallback
|
|
23
|
-
|
|
24
|
-
## 2. Color Palette & Roles
|
|
25
|
-
|
|
26
|
-
All values extracted from `stylesheets/lv0/_colors.scss` in the open-source [freee/vibes](https://github.com/freee/vibes) repo (vibes_2021).
|
|
27
|
-
|
|
28
|
-
### Primary Blue (`$vbColorsP01–P10`)
|
|
29
|
-
- `#ebf3ff` (P01) — lightest tint, page background hint
|
|
30
|
-
- `#dce8ff` (P02) — light surface, badge bg
|
|
31
|
-
- `#aac8ff` (P03) — light accent
|
|
32
|
-
- `#73a5ff` (P04) — **`$vbAccentColor`** (accent, hover for primary)
|
|
33
|
-
- `#2864f0` (P05) — bright primary
|
|
34
|
-
- `#3264dc` (P06) — primary mid
|
|
35
|
-
- `#285ac8` (P07) — **`$vbPrimaryColor`** (primary actions, links, brand)
|
|
36
|
-
- `#1e46aa` (P08) — primary dark
|
|
37
|
-
- `#23418c` (P09) — primary darker
|
|
38
|
-
- `#143278` (P10) — primary darkest
|
|
39
|
-
|
|
40
|
-
### Secondary / Neutral (`$vbColorsS01–S10`)
|
|
41
|
-
- `#f7f5f5` (S01) — `$vbColumnColor` (column / table bg)
|
|
42
|
-
- `#f0eded` (S02) — `$vbBaseColor1` (subtle surface 1)
|
|
43
|
-
- `#e9e7e7` (S03) — `$vbBaseColor2` (subtle surface 2)
|
|
44
|
-
- `#e1dcdc` (S04)
|
|
45
|
-
- `#d7d2d2` (S05)
|
|
46
|
-
- `#bebaba` (S06)
|
|
47
|
-
- `#aaa7a7` (S07)
|
|
48
|
-
- `#8c8989` (S08) — `$vbBaseColor3` (mid neutral, captions)
|
|
49
|
-
- `#6e6b6b` (S09) — `$vbBurntColor` (text-burnt)
|
|
50
|
-
- `#464343` (S10) — darkest neutral
|
|
51
|
-
|
|
52
|
-
### Status (Red, Orange, Yellow scales)
|
|
53
|
-
- **Red** (`RE02 #fad2d7`, `RE04 #f07882`, `RE05 #dc1e32`, `RE07 #a51428`, `RE10 #6e0f19`)
|
|
54
|
-
- `$vbAlertColor: $vbColorsRE05` (`#dc1e32`) — alerts, errors, destructive actions
|
|
55
|
-
- **Orange** (`OR02 #ffe1d2`, `OR04 #ffaa78`, `OR05 #fa6414`, `OR07 #be4b0f`, `OR10 #7d320a`)
|
|
56
|
-
- **Yellow** (`YE02 #fff0d2`, `YE04 #ffd278`, `YE05 #ffb91e`, `YE07 #be8c14`, `YE10 #825a0f`)
|
|
57
|
-
- `$vbNoticeColor: $vbColorsYE07` (`#be8c14`) — warnings, notices
|
|
58
|
-
|
|
59
|
-
### Yellow-Green / Green / Blue-Green (success, growth)
|
|
60
|
-
- **Yellow-Green** (`YG02 #e6f0d2`, `YG04 #b4dc7d`, `YG05 #82c31e`, `YG07 #50961e`, `YG10 #3c5f14`)
|
|
61
|
-
- **Green** (`GR02 #cdebd7`, `GR04 #64be8c`, `GR05 #00963c`, `GR07 #006e2d`, `GR10 #004b1e`) — success
|
|
62
|
-
- **Blue-Green / Teal** (`BG02 #cdf0f0`, `BG04 #64d2d2`, `BG05 #00b9b9`, `BG07 #008c8c`, `BG10 #146464`)
|
|
63
|
-
|
|
64
|
-
### Purple
|
|
65
|
-
- `PU02 #e6d7fa`, `PU04 #b482f0`, `PU05 #733ce6`, `PU07 #5a2daa`, `PU10 #3c1e73`
|
|
66
|
-
|
|
67
|
-
### Pure Gray (`$vbColorsGY01–GY10`)
|
|
68
|
-
- `#fbfbfb` (GY01) — page bg highlight
|
|
69
|
-
- `#dcdcdc` (GY02)
|
|
70
|
-
- `#a0a0a0` (GY04)
|
|
71
|
-
- `#5a5a5a` (GY05)
|
|
72
|
-
- `#323232` (GY07) — **`$vbBlackColor`** (default text color)
|
|
73
|
-
- `#1e1e1e` (GY10) — darkest gray
|
|
74
|
-
|
|
75
|
-
### Semantic Aliases (the design contracts)
|
|
76
|
-
| Semantic | Value | Use |
|
|
77
|
-
|---|---|---|
|
|
78
|
-
| `$vbPrimaryColor` | `$vbColorsP07` (`#285ac8`) | Primary CTAs, brand actions |
|
|
79
|
-
| `$vbAccentColor` | `$vbColorsP04` (`#73a5ff`) | Accent hover, secondary brand |
|
|
80
|
-
| `$vbLinkColor` | `$vbColorsP07` (`#285ac8`) | Hyperlinks (matches primary) |
|
|
81
|
-
| `$vbColumnColor` | `$vbColorsS01` (`#f7f5f5`) | Table column bg |
|
|
82
|
-
| `$vbBaseColor1` | `$vbColorsS02` (`#f0eded`) | Subtle surface 1 |
|
|
83
|
-
| `$vbBaseColor2` | `$vbColorsS03` (`#e9e7e7`) | Subtle surface 2 |
|
|
84
|
-
| `$vbBaseColor3` | `$vbColorsS08` (`#8c8989`) | Mid neutral text |
|
|
85
|
-
| `$vbBurntColor` | `$vbColorsS09` (`#6e6b6b`) | Burnt-out text (de-emphasized) |
|
|
86
|
-
| `$vbBlackColor` | `$vbColorsGY07` (`#323232`) | Default text color |
|
|
87
|
-
| `$vbAlertColor` | `$vbColorsRE05` (`#dc1e32`) | Alerts, errors, destructive |
|
|
88
|
-
| `$vbNoticeColor` | `$vbColorsYE07` (`#be8c14`) | Warnings, notices |
|
|
89
|
-
| `$vbBackgroundColor` | `$vbColorsP01` (`#ebf3ff`) | Page tint background |
|
|
90
|
-
|
|
91
|
-
### Scrim / Overlay
|
|
92
|
-
- `$vbScrimColor: rgba(0, 0, 0, 0.5)` — modal backdrop
|
|
93
|
-
- `$vbThinScrimColor: rgba(0, 0, 0, 0.12)` — light overlay (e.g., disabled state)
|
|
94
|
-
|
|
95
|
-
## 3. Typography Rules
|
|
96
|
-
|
|
97
|
-
### Font Stack
|
|
98
|
-
```scss
|
|
99
|
-
$vbFontFamily: '-apple-system', BlinkMacSystemFont, 'Helvetica Neue',
|
|
100
|
-
'ヒラギノ角ゴ ProN', Hiragino Kaku Gothic ProN, Arial, 'メイリオ', Meiryo,
|
|
101
|
-
sans-serif;
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
`-apple-system` and `BlinkMacSystemFont` lead for native rendering on macOS/iOS, then Helvetica Neue, then Japanese fallbacks (Hiragino → Meiryo). The brand wordmark uses **Noto Sans CJK JP Medium** loaded explicitly as `font-family: 'freee-logo'` from Google Fonts.
|
|
105
|
-
|
|
106
|
-
### Type Scale (verified from `_size.scss`)
|
|
107
|
-
| Token | Size | Use |
|
|
108
|
-
|---|---|---|
|
|
109
|
-
| `$vbFontSize0625` | `0.625rem` (10dp) | Smallest icon font |
|
|
110
|
-
| `$vbFontSize0750` | `0.75rem` (12dp) | Caption |
|
|
111
|
-
| `$vbFontSize0875` | `0.875rem` (14dp) | Normal body, Headline 3 |
|
|
112
|
-
| `$vbFontSize1000` | `1rem` (16dp) | Headline 2 |
|
|
113
|
-
| `$vbFontSize1500` | `1.5rem` (24dp) | Headline 1 |
|
|
114
|
-
|
|
115
|
-
### Semantic Typography Tokens
|
|
116
|
-
| Token | Value |
|
|
117
|
-
|---|---|
|
|
118
|
-
| `$vbCaptionFontSize` | `0.75rem` (12dp) |
|
|
119
|
-
| `$vbNormalFontSize` | `0.875rem` (14dp) |
|
|
120
|
-
| `$vbHeadline3FontSize` | `0.875rem` (14dp) |
|
|
121
|
-
| `$vbHeadline2FontSize` | `1rem` (16dp) |
|
|
122
|
-
| `$vbHeadline1FontSize` | `1.5rem` (24dp) |
|
|
123
|
-
|
|
124
|
-
### Mobile Typography (steps down for tablets/phones)
|
|
125
|
-
- `$vbMobileHeadline1FontSize: 16dp` (was 24dp)
|
|
126
|
-
- `$vbMobileHeadline2FontSize: 14dp` (was 16dp)
|
|
127
|
-
- `$vbMobileHeadline3FontSize: 14dp` (unchanged)
|
|
128
|
-
|
|
129
|
-
### Line Height
|
|
130
|
-
- `$vbLineHeight: 1.5` — universal default (generous for CJK readability)
|
|
131
|
-
|
|
132
|
-
### Conventions
|
|
133
|
-
- **No display sizes above 24dp** — freee's voice is utilitarian SaaS, not editorial
|
|
134
|
-
- **Body and Headline 3 share 14dp** — visual hierarchy comes from weight + color, not size
|
|
135
|
-
- **Mobile compresses everything to 14-16dp** — preserves 1.5 line-height for cramped screens
|
|
136
|
-
- **Brand wordmark uses Noto Sans CJK JP Medium** — only place a custom font loads
|
|
137
|
-
|
|
138
|
-
## 4. Component Stylings
|
|
139
|
-
|
|
140
|
-
### Form Controls (heights are explicit tokens)
|
|
141
|
-
| Token | Height | Use |
|
|
142
|
-
|---|---|---|
|
|
143
|
-
| `$vbFormControlSmallHeight` | `1.5rem` (24dp) | Compact inputs, dense tables |
|
|
144
|
-
| `$vbFormControlHeight` | `2.25rem` (36dp) | Standard input, button |
|
|
145
|
-
| `$vbFormControlLargeHeight` | `3rem` (48dp) | Hero CTAs, mobile-friendly forms |
|
|
146
|
-
|
|
147
|
-
### Buttons
|
|
148
|
-
- Primary: bg `#285ac8` (`$vbPrimaryColor`), white text, weight 500-700, default `36px` height (`$vbFormControlHeight`)
|
|
149
|
-
- Padding follows the `xs/s/basic` spacing scale: `4px 16px` (small), `8px 16px` (basic), `12px 24px` (large)
|
|
150
|
-
- Border-radius: not explicitly tokenized in vibes — components use `4px` as the de facto standard
|
|
151
|
-
- Disabled: `$vbThinScrimColor` overlay (`rgba(0,0,0,0.12)`)
|
|
152
|
-
|
|
153
|
-
### Inputs
|
|
154
|
-
- Heights match `$vbFormControlHeight` tokens
|
|
155
|
-
- Border: `1px solid $vbBaseColor3` (`#8c8989`)
|
|
156
|
-
- Focus: border becomes `$vbPrimaryColor` (`#285ac8`)
|
|
157
|
-
- Error: border becomes `$vbAlertColor` (`#dc1e32`), helper text in same red
|
|
158
|
-
|
|
159
|
-
### Cards / Panels
|
|
160
|
-
- Background: white (or `$vbColumnColor: #f7f5f5` for subtle differentiation)
|
|
161
|
-
- Border: `1px solid $vbBaseColor2` (`#e9e7e7`)
|
|
162
|
-
- Padding: `$vbBasicSize` (16dp) or `$vbLargeSize` (24dp)
|
|
163
|
-
- Shadow: `$vbCardShadow` for elevated cards (see §6)
|
|
164
|
-
|
|
165
|
-
### Tables
|
|
166
|
-
- Column bg alternates: white / `$vbColumnColor` (`#f7f5f5`)
|
|
167
|
-
- Row dividers: `1px solid $vbBaseColor2` (`#e9e7e7`)
|
|
168
|
-
- Header: bold weight, dark text on white
|
|
169
|
-
- Compact and dense — freee is enterprise productivity software
|
|
170
|
-
|
|
171
|
-
### Navigation
|
|
172
|
-
- Primary nav: white bg with subtle bottom border, `$vbPrimaryColor` for active link
|
|
173
|
-
- Secondary nav: tab-style with underline indicator in `$vbPrimaryColor`
|
|
174
|
-
|
|
175
|
-
### Status Badges
|
|
176
|
-
- Success: `GR02` bg + `GR07` text (`#cdebd7` / `#006e2d`)
|
|
177
|
-
- Alert: `RE02` bg + `RE05` text (`#fad2d7` / `#dc1e32`)
|
|
178
|
-
- Notice: `YE02` bg + `YE07` text (`#fff0d2` / `#be8c14`)
|
|
179
|
-
- Info: `P02` bg + `P07` text (`#dce8ff` / `#285ac8`)
|
|
180
|
-
|
|
181
|
-
## 5. Layout Principles
|
|
182
|
-
|
|
183
|
-
### Spacing Scale (verified from `_size.scss`)
|
|
184
|
-
| Token | Value | dp |
|
|
185
|
-
|---|---|---|
|
|
186
|
-
| `$vbMinimum` | `1px` | 1px hairline |
|
|
187
|
-
| `$vbXSmallSize` | `0.25rem` | 4dp |
|
|
188
|
-
| `$vbSmallSize` | `0.5rem` | 8dp |
|
|
189
|
-
| `$vbBasicSize` | `1rem` | 16dp |
|
|
190
|
-
| `$vbLargeSize` | `1.5rem` | 24dp |
|
|
191
|
-
| `$vbXLargeSize` | `2rem` | 32dp |
|
|
192
|
-
| `$vbXXLargeSize` | `3rem` | 48dp |
|
|
193
|
-
|
|
194
|
-
### Container
|
|
195
|
-
- `$vbContainerSize: 70rem` (1120dp) — page max-width
|
|
196
|
-
- Mobile breakpoint: `$vbMobileBoundaryWidth: 48rem` (768dp)
|
|
197
|
-
|
|
198
|
-
### Density
|
|
199
|
-
freee is **medium-density enterprise SaaS**. Forms breathe with `16dp` padding. Tables stay tight. Dashboards prefer 24-32dp section gaps. Avoid the high-density commerce aesthetic of Mercari/Pinkoi.
|
|
200
|
-
|
|
201
|
-
## 6. Depth & Elevation
|
|
202
|
-
|
|
203
|
-
### Three explicit shadow recipes (from `_colors.scss`)
|
|
204
|
-
- **Card** — `$vbCardShadow`:
|
|
205
|
-
```
|
|
206
|
-
0 0 1rem rgba(0, 0, 0, 0.1),
|
|
207
|
-
0 0.125rem 0.25rem rgba(0, 0, 0, 0.2)
|
|
208
|
-
```
|
|
209
|
-
- **Floating** — `$vbFloatingShadow`:
|
|
210
|
-
```
|
|
211
|
-
0 0 1.5rem rgba(0, 0, 0, 0.1),
|
|
212
|
-
0 0.25rem 0.5rem rgba(0, 0, 0, 0.2)
|
|
213
|
-
```
|
|
214
|
-
- **Popup** — `$vbPopupShadow`:
|
|
215
|
-
```
|
|
216
|
-
0 0 2rem rgba(0, 0, 0, 0.1),
|
|
217
|
-
0 0.375rem 0.75rem rgba(0, 0, 0, 0.2)
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
Each level uses the same dual-shadow technique (ambient diffuse + directional drop), scaling the radius progressively.
|
|
221
|
-
|
|
222
|
-
### Z-Index Hierarchy (named tokens)
|
|
223
|
-
| Token | Value | Use |
|
|
224
|
-
|---|---|---|
|
|
225
|
-
| `$vbOverlayZIndex` | `100` | Subtle overlays |
|
|
226
|
-
| `$vbFormActionsZIndex` | `200` | Form action bars |
|
|
227
|
-
| `$vbFloatingZIndex` | `500` | Floating cards |
|
|
228
|
-
| `$vbFullScreenZIndex` | `700` | Full-screen views |
|
|
229
|
-
| `$vbModalZIndex` | `1000` | Modals |
|
|
230
|
-
| `$vbMessageModalZIndex` | `1500` | Message modals |
|
|
231
|
-
| `$vbPopupZIndex` | `2000` | Popups |
|
|
232
|
-
| `$vbPopupMessageZIndex` | `3000` | Popup messages |
|
|
233
|
-
| `$vbFixedMessageZIndex` | `4000` | Fixed messages |
|
|
234
|
-
| `$vbMaxZIndex` | `2147483647` | Maximum (system reserved) |
|
|
235
|
-
|
|
236
|
-
### Animation
|
|
237
|
-
Not explicitly tokenized in `_size.scss` extracted — components use SCSS-default transitions (`0.2-0.3s ease`).
|
|
238
|
-
|
|
239
|
-
## 7. Do's and Don'ts
|
|
240
|
-
|
|
241
|
-
- **DO** use the three-tier token system: scale (`$vbColorsP07`) → semantic (`$vbPrimaryColor`) → component-level. Always reference semantic over scale where possible.
|
|
242
|
-
- **DON'T** invent new color values. The 9 hue scales × 5-10 shades cover virtually any need.
|
|
243
|
-
- **DO** lead with `$vbPrimaryColor` (`#285ac8`) for brand actions and links. It's the same value — links should match buttons in this system.
|
|
244
|
-
- **DON'T** use bright accent blue (`$vbAccentColor: #73a5ff`) as a primary CTA. It's reserved for hover states and secondary emphasis.
|
|
245
|
-
- **DO** use the named font-size tokens (`$vbHeadline1FontSize`, `$vbNormalFontSize`) instead of raw rem values. The 5-step scale is the contract.
|
|
246
|
-
- **DON'T** use display sizes above 24dp. freee is enterprise SaaS — restraint is the voice.
|
|
247
|
-
- **DO** apply `$vbLineHeight: 1.5` universally. Japanese readers need generous vertical breathing room.
|
|
248
|
-
- **DO** use the locale font stack with `-apple-system` first and Hiragino/Meiryo CJK fallbacks. The brand `freee-logo` font is for the wordmark only.
|
|
249
|
-
- **DO** snap to the 4dp spacing scale (4 / 8 / 16 / 24 / 32 / 48). Never use intermediate values like 6, 10, or 14.
|
|
250
|
-
- **DON'T** invent custom shadow values — use `$vbCardShadow`, `$vbFloatingShadow`, `$vbPopupShadow` for the three elevation tiers.
|
|
251
|
-
- **DO** use the named z-index tokens (`$vbModalZIndex`, `$vbPopupZIndex`, etc.). The hierarchy spans 100 → 4000 with deliberate gaps.
|
|
252
|
-
- **DON'T** use arbitrary z-index values like `9999` — that breaks the layered system.
|
|
253
|
-
- **DO** use status colors with the matching family (e.g., `RE02` bg + `RE05/RE07` text for alerts).
|
|
254
|
-
- **DON'T** mix hue families in a single status badge (e.g., never red bg with orange text).
|
|
255
|
-
|
|
256
|
-
## 8. Responsive Behavior
|
|
257
|
-
|
|
258
|
-
### Breakpoint
|
|
259
|
-
- `$vbMobileBoundaryWidth: 48rem` (768dp) — single breakpoint between desktop and mobile
|
|
260
|
-
|
|
261
|
-
### Mobile Adjustments
|
|
262
|
-
- All headline sizes step down (`$vbMobileHeadline1FontSize: 16dp` vs. desktop 24dp)
|
|
263
|
-
- Form controls remain at the same height tokens (mobile-friendly already at 36-48dp)
|
|
264
|
-
- Container width adapts to viewport (no fixed mobile container)
|
|
265
|
-
|
|
266
|
-
### Touch
|
|
267
|
-
- Form controls at `36-48dp` heights = touch-friendly by default
|
|
268
|
-
- Buttons inherit form-control heights
|
|
269
|
-
|
|
270
|
-
### Image Behavior
|
|
271
|
-
- Not tokenized in vibes — application-specific
|
|
272
|
-
- Brand logo uses the `freee-logo` font for crisp scaling at any size
|
|
273
|
-
|
|
274
|
-
## 9. Agent Prompt Guide
|
|
275
|
-
|
|
276
|
-
### Quick Color Reference
|
|
277
|
-
- Primary CTA / Link: `#285ac8` (`$vbPrimaryColor` / `$vbColorsP07`)
|
|
278
|
-
- Accent (hover, secondary): `#73a5ff` (`$vbAccentColor` / `$vbColorsP04`)
|
|
279
|
-
- Default text: `#323232` (`$vbBlackColor` / `$vbColorsGY07`)
|
|
280
|
-
- Muted text: `#6e6b6b` (`$vbBurntColor` / `$vbColorsS09`)
|
|
281
|
-
- Caption text: `#8c8989` (`$vbBaseColor3` / `$vbColorsS08`)
|
|
282
|
-
- Page bg: `#ffffff` (or `#ebf3ff` for tinted bg)
|
|
283
|
-
- Subtle surface: `#f0eded` (`$vbBaseColor1`)
|
|
284
|
-
- Border default: `#e9e7e7` (`$vbBaseColor2`)
|
|
285
|
-
- Alert: `#dc1e32` (`$vbAlertColor`)
|
|
286
|
-
- Notice: `#be8c14` (`$vbNoticeColor`)
|
|
287
|
-
- Success: `#00963c` (`$vbColorsGR05`)
|
|
288
|
-
|
|
289
|
-
### Example Component Prompts
|
|
290
|
-
- "Build a freee primary button: `36px` height (`$vbFormControlHeight`), bg `#285ac8`, white text, weight 500, padding `8px 16px`, `4px` radius. Hover: bg `#3264dc` (P06). Active: bg `#1e46aa` (P08). Disabled: bg + 12% black overlay (`$vbThinScrimColor`). Use Noto-friendly font stack with Hiragino fallbacks."
|
|
291
|
-
- "Create a freee status badge: rounded `4px` corners, `8px 12px` padding, weight 500 12px text. For success: bg `#cdebd7` (GR02) + text `#006e2d` (GR07). For alert: bg `#fad2d7` (RE02) + text `#dc1e32` (RE05). For notice: bg `#fff0d2` (YE02) + text `#be8c14` (YE07). For info: bg `#dce8ff` (P02) + text `#285ac8` (P07)."
|
|
292
|
-
- "Design a freee data table: column bg alternates white / `#f7f5f5` (`$vbColumnColor`). Row dividers `1px solid #e9e7e7`. Header row: weight 700 14px text `#323232`, bg `#f0eded`, sticky on scroll. Cell padding `12px 16px`. Selected row: bg `#ebf3ff` (P01)."
|
|
293
|
-
- "Build a freee elevated card: white bg, `1px solid #e9e7e7` border, `4px` radius, `24px` padding. Box-shadow: `0 0 1rem rgba(0,0,0,0.1), 0 0.125rem 0.25rem rgba(0,0,0,0.2)` (`$vbCardShadow`). Heading at 24px weight 700 `#323232`. Body at 14px line-height 1.5 `#323232`."
|
|
294
|
-
- "Create a freee form input: `36px` height, `1px solid #8c8989` border, `4px` radius, `12px` horizontal padding. Placeholder color `#8c8989`. Focus: border `#285ac8`, no shadow ring. Error state: border `#dc1e32`, helper text `#dc1e32` 12px below."
|
|
295
|
-
|
|
296
|
-
### Iteration Guide
|
|
297
|
-
1. **Always reference semantic tokens (`$vbPrimaryColor`, `$vbAlertColor`)** instead of scale values (`$vbColorsP07`, `$vbColorsRE05`) when writing component-level code.
|
|
298
|
-
2. **The 9-hue palette is comprehensive** — don't introduce off-system hex values. If you need green, use the GR scale; if you need teal, use BG.
|
|
299
|
-
3. **`#285ac8` is both the link color AND the primary button color** — they're the same semantic in vibes. Maintain visual coherence.
|
|
300
|
-
4. **`border-radius: 4px`** is the de facto standard (vibes doesn't tokenize radius, components use 4px consistently).
|
|
301
|
-
5. **Type scale: 10 / 12 / 14 / 16 / 24dp** — five steps total. Don't introduce 18 or 20 or 28.
|
|
302
|
-
6. **Mobile shrinks H1 from 24dp → 16dp**, H2 from 16dp → 14dp. H3 stays at 14dp.
|
|
303
|
-
7. **Spacing snaps to the 4dp scale: 4 / 8 / 16 / 24 / 32 / 48**. Never 6, 10, or 14.
|
|
304
|
-
8. **Three shadow recipes only** (`$vbCardShadow`, `$vbFloatingShadow`, `$vbPopupShadow`) — graduated radius and offset.
|
|
305
|
-
9. **Z-index uses named tokens** with massive gaps (100 / 200 / 500 / 700 / 1000 / 1500 / 2000 / 3000 / 4000) — leaves room for future layers.
|
|
306
|
-
10. **Form-control heights are tokens** (24 / 36 / 48dp) — never use arbitrary heights for inputs/buttons.
|
|
307
|
-
11. **Line-height 1.5 is universal** — preserves Japanese vertical rhythm and accessibility.
|
|
308
|
-
12. **The brand wordmark uses Noto Sans CJK JP Medium** loaded as `font-family: 'freee-logo'` from Google Fonts — everywhere else uses the system stack.
|