oh-my-design-cli 1.0.1 → 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.
Files changed (102) hide show
  1. package/README.md +15 -18
  2. package/data/reference-fingerprints.json +337 -3
  3. package/data/reference-tags.md +15 -1
  4. package/dist/bin/oh-my-design.js +1 -1
  5. package/dist/{install-skills-GQPTQF5S.js → install-skills-MVXVXYAY.js} +4 -4
  6. package/dist/{install-skills-GQPTQF5S.js.map → install-skills-MVXVXYAY.js.map} +1 -1
  7. package/package.json +2 -2
  8. package/skills/omd-init/SKILL.md +1 -1
  9. package/web/AGENTS.md +5 -0
  10. package/{references → web/references}/airbnb/DESIGN.md +158 -19
  11. package/web/references/airtable/DESIGN.md +241 -0
  12. package/{references → web/references}/apple/DESIGN.md +131 -76
  13. package/web/references/baemin/DESIGN.md +470 -0
  14. package/{references → web/references}/bmw/DESIGN.md +138 -9
  15. package/{references → web/references}/cal/DESIGN.md +173 -17
  16. package/{references → web/references}/claude/DESIGN.md +11 -1
  17. package/{references → web/references}/clay/DESIGN.md +75 -0
  18. package/{references → web/references}/clickhouse/DESIGN.md +74 -0
  19. package/{references → web/references}/cohere/DESIGN.md +75 -0
  20. package/web/references/coinbase/DESIGN.md +205 -0
  21. package/{references → web/references}/composio/DESIGN.md +74 -0
  22. package/web/references/coupang/DESIGN.md +487 -0
  23. package/{references → web/references}/cursor/DESIGN.md +74 -0
  24. package/web/references/dcard/DESIGN.md +567 -0
  25. package/{references → web/references}/elevenlabs/DESIGN.md +91 -0
  26. package/{references → web/references}/expo/DESIGN.md +72 -0
  27. package/{references → web/references}/ferrari/DESIGN.md +72 -0
  28. package/{references → web/references}/figma/DESIGN.md +124 -48
  29. package/{references → web/references}/framer/DESIGN.md +143 -16
  30. package/web/references/freee/DESIGN.md +558 -0
  31. package/{references → web/references}/hashicorp/DESIGN.md +72 -0
  32. package/{references → web/references}/ibm/DESIGN.md +68 -0
  33. package/{references → web/references}/intercom/DESIGN.md +73 -0
  34. package/web/references/kakao/DESIGN.md +490 -0
  35. package/web/references/kakaobank/DESIGN.md +533 -0
  36. package/web/references/karrot/DESIGN.md +431 -0
  37. package/web/references/kraken/DESIGN.md +219 -0
  38. package/web/references/krds/DESIGN.md +982 -0
  39. package/web/references/kurly/DESIGN.md +574 -0
  40. package/{references → web/references}/lamborghini/DESIGN.md +74 -0
  41. package/{references → web/references}/line/DESIGN.md +84 -43
  42. package/{references → web/references}/linear.app/DESIGN.md +8 -1
  43. package/{references → web/references}/lovable/DESIGN.md +73 -0
  44. package/web/references/mercari/DESIGN.md +464 -0
  45. package/{references → web/references}/minimax/DESIGN.md +72 -0
  46. package/{references → web/references}/mintlify/DESIGN.md +72 -0
  47. package/web/references/miro/DESIGN.md +252 -0
  48. package/{references → web/references}/mistral.ai/DESIGN.md +72 -0
  49. package/{references → web/references}/mongodb/DESIGN.md +72 -0
  50. package/web/references/musinsa/DESIGN.md +536 -0
  51. package/web/references/naver/DESIGN.md +518 -0
  52. package/{references → web/references}/notion/DESIGN.md +9 -1
  53. package/web/references/nvidia/DESIGN.md +491 -0
  54. package/web/references/ohouse/DESIGN.md +570 -0
  55. package/{references → web/references}/ollama/DESIGN.md +72 -0
  56. package/{references → web/references}/opencode.ai/DESIGN.md +73 -0
  57. package/web/references/pinkoi/DESIGN.md +575 -0
  58. package/{references → web/references}/pinterest/DESIGN.md +73 -0
  59. package/{references → web/references}/posthog/DESIGN.md +172 -18
  60. package/web/references/qanda/DESIGN.md +459 -0
  61. package/{references → web/references}/raycast/DESIGN.md +169 -34
  62. package/{references → web/references}/renault/DESIGN.md +72 -0
  63. package/{references → web/references}/replicate/DESIGN.md +73 -0
  64. package/{references → web/references}/resend/DESIGN.md +73 -0
  65. package/{references → web/references}/revolut/DESIGN.md +74 -0
  66. package/web/references/ridi/DESIGN.md +517 -0
  67. package/{references → web/references}/runwayml/DESIGN.md +152 -24
  68. package/{references → web/references}/sanity/DESIGN.md +72 -0
  69. package/{references → web/references}/sentry/DESIGN.md +73 -0
  70. package/web/references/spacex/DESIGN.md +379 -0
  71. package/web/references/spotify/DESIGN.md +426 -0
  72. package/{references → web/references}/stripe/DESIGN.md +44 -1
  73. package/{references → web/references}/supabase/DESIGN.md +73 -0
  74. package/{references → web/references}/superhuman/DESIGN.md +159 -17
  75. package/{references → web/references}/tesla/DESIGN.md +170 -0
  76. package/{references → web/references}/together.ai/DESIGN.md +73 -0
  77. package/{references → web/references}/toss/DESIGN.md +304 -50
  78. package/{references → web/references}/uber/DESIGN.md +73 -0
  79. package/{references → web/references}/vercel/DESIGN.md +9 -1
  80. package/{references → web/references}/voltagent/DESIGN.md +73 -0
  81. package/{references → web/references}/warp/DESIGN.md +142 -15
  82. package/web/references/webflow/DESIGN.md +253 -0
  83. package/{references → web/references}/wise/DESIGN.md +84 -0
  84. package/{references → web/references}/x.ai/DESIGN.md +85 -0
  85. package/web/references/yanolja/DESIGN.md +448 -0
  86. package/web/references/yeogiotte/DESIGN.md +424 -0
  87. package/{references → web/references}/zapier/DESIGN.md +85 -0
  88. package/references/airtable/DESIGN.md +0 -107
  89. package/references/baemin/DESIGN.md +0 -260
  90. package/references/coinbase/DESIGN.md +0 -129
  91. package/references/dcard/DESIGN.md +0 -302
  92. package/references/freee/DESIGN.md +0 -308
  93. package/references/kakao/DESIGN.md +0 -261
  94. package/references/karrot/DESIGN.md +0 -252
  95. package/references/kraken/DESIGN.md +0 -146
  96. package/references/mercari/DESIGN.md +0 -294
  97. package/references/miro/DESIGN.md +0 -108
  98. package/references/nvidia/DESIGN.md +0 -308
  99. package/references/pinkoi/DESIGN.md +0 -309
  100. package/references/spacex/DESIGN.md +0 -205
  101. package/references/spotify/DESIGN.md +0 -246
  102. 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.