oh-my-design-cli 1.0.2 → 1.2.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 (117) hide show
  1. package/README.ja.md +7 -7
  2. package/README.ko.md +7 -7
  3. package/README.md +15 -18
  4. package/README.zh-TW.md +7 -7
  5. package/agents/omd-ux-writer.md +1 -1
  6. package/data/architecture-proposals/2026-05-13-thin-install-fresh-fetch.md +189 -0
  7. package/data/reference-audits/2026-05-13-kr10.md +132 -0
  8. package/data/reference-fingerprints.json +626 -3
  9. package/data/reference-tags.md +15 -1
  10. package/package.json +2 -2
  11. package/skills/omd-apply/SKILL.md +1 -1
  12. package/skills/omd-harness/SKILL.md +3 -3
  13. package/skills/omd-init/SKILL.md +2 -2
  14. package/web/AGENTS.md +5 -0
  15. package/web/references/29cm/DESIGN.md +445 -0
  16. package/web/references/ably/DESIGN.md +582 -0
  17. package/{references → web/references}/airbnb/DESIGN.md +158 -19
  18. package/web/references/airtable/DESIGN.md +241 -0
  19. package/{references → web/references}/apple/DESIGN.md +131 -76
  20. package/web/references/baemin/DESIGN.md +470 -0
  21. package/web/references/banksalad/DESIGN.md +606 -0
  22. package/{references → web/references}/bmw/DESIGN.md +138 -9
  23. package/{references → web/references}/cal/DESIGN.md +173 -17
  24. package/{references → web/references}/claude/DESIGN.md +11 -1
  25. package/{references → web/references}/clay/DESIGN.md +75 -0
  26. package/{references → web/references}/clickhouse/DESIGN.md +74 -0
  27. package/{references → web/references}/cohere/DESIGN.md +75 -0
  28. package/web/references/coinbase/DESIGN.md +205 -0
  29. package/{references → web/references}/composio/DESIGN.md +74 -0
  30. package/web/references/coupang/DESIGN.md +487 -0
  31. package/{references → web/references}/cursor/DESIGN.md +74 -0
  32. package/web/references/dcard/DESIGN.md +567 -0
  33. package/{references → web/references}/elevenlabs/DESIGN.md +91 -0
  34. package/{references → web/references}/expo/DESIGN.md +72 -0
  35. package/{references → web/references}/ferrari/DESIGN.md +72 -0
  36. package/{references → web/references}/figma/DESIGN.md +124 -48
  37. package/{references → web/references}/framer/DESIGN.md +143 -16
  38. package/web/references/freee/DESIGN.md +558 -0
  39. package/web/references/gangnamunni/DESIGN.md +605 -0
  40. package/{references → web/references}/hashicorp/DESIGN.md +72 -0
  41. package/{references → web/references}/ibm/DESIGN.md +68 -0
  42. package/{references → web/references}/intercom/DESIGN.md +73 -0
  43. package/web/references/kakao/DESIGN.md +490 -0
  44. package/web/references/kakaobank/DESIGN.md +533 -0
  45. package/web/references/kakaopay/DESIGN.md +529 -0
  46. package/web/references/karrot/DESIGN.md +431 -0
  47. package/web/references/kraken/DESIGN.md +219 -0
  48. package/web/references/krds/DESIGN.md +982 -0
  49. package/web/references/kurly/DESIGN.md +574 -0
  50. package/{references → web/references}/lamborghini/DESIGN.md +74 -0
  51. package/{references → web/references}/line/DESIGN.md +84 -43
  52. package/{references → web/references}/linear.app/DESIGN.md +8 -1
  53. package/{references → web/references}/lovable/DESIGN.md +73 -0
  54. package/web/references/mercari/DESIGN.md +464 -0
  55. package/{references → web/references}/minimax/DESIGN.md +72 -0
  56. package/{references → web/references}/mintlify/DESIGN.md +72 -0
  57. package/web/references/miro/DESIGN.md +252 -0
  58. package/{references → web/references}/mistral.ai/DESIGN.md +72 -0
  59. package/{references → web/references}/mongodb/DESIGN.md +72 -0
  60. package/web/references/musinsa/DESIGN.md +536 -0
  61. package/web/references/naver/DESIGN.md +518 -0
  62. package/{references → web/references}/notion/DESIGN.md +9 -1
  63. package/web/references/nvidia/DESIGN.md +491 -0
  64. package/web/references/ohouse/DESIGN.md +570 -0
  65. package/{references → web/references}/ollama/DESIGN.md +72 -0
  66. package/{references → web/references}/opencode.ai/DESIGN.md +73 -0
  67. package/web/references/pinkoi/DESIGN.md +575 -0
  68. package/{references → web/references}/pinterest/DESIGN.md +73 -0
  69. package/{references → web/references}/posthog/DESIGN.md +172 -18
  70. package/web/references/qanda/DESIGN.md +459 -0
  71. package/{references → web/references}/raycast/DESIGN.md +169 -34
  72. package/web/references/remember/DESIGN.md +445 -0
  73. package/{references → web/references}/renault/DESIGN.md +72 -0
  74. package/{references → web/references}/replicate/DESIGN.md +73 -0
  75. package/{references → web/references}/resend/DESIGN.md +73 -0
  76. package/{references → web/references}/revolut/DESIGN.md +74 -0
  77. package/web/references/ridi/DESIGN.md +517 -0
  78. package/{references → web/references}/runwayml/DESIGN.md +152 -24
  79. package/{references → web/references}/sanity/DESIGN.md +72 -0
  80. package/{references → web/references}/sentry/DESIGN.md +73 -0
  81. package/web/references/socar/DESIGN.md +370 -0
  82. package/web/references/spacex/DESIGN.md +379 -0
  83. package/web/references/spotify/DESIGN.md +426 -0
  84. package/{references → web/references}/stripe/DESIGN.md +44 -1
  85. package/{references → web/references}/supabase/DESIGN.md +73 -0
  86. package/{references → web/references}/superhuman/DESIGN.md +159 -17
  87. package/{references → web/references}/tesla/DESIGN.md +170 -0
  88. package/{references → web/references}/together.ai/DESIGN.md +73 -0
  89. package/{references → web/references}/toss/DESIGN.md +304 -50
  90. package/{references → web/references}/uber/DESIGN.md +73 -0
  91. package/{references → web/references}/vercel/DESIGN.md +9 -1
  92. package/{references → web/references}/voltagent/DESIGN.md +73 -0
  93. package/web/references/wanted/DESIGN.md +515 -0
  94. package/{references → web/references}/warp/DESIGN.md +142 -15
  95. package/web/references/webflow/DESIGN.md +253 -0
  96. package/{references → web/references}/wise/DESIGN.md +84 -0
  97. package/{references → web/references}/x.ai/DESIGN.md +85 -0
  98. package/web/references/yanolja/DESIGN.md +448 -0
  99. package/web/references/yeogiotte/DESIGN.md +424 -0
  100. package/{references → web/references}/zapier/DESIGN.md +85 -0
  101. package/web/references/zigbang/DESIGN.md +457 -0
  102. package/web/references/zigzag/DESIGN.md +618 -0
  103. package/references/airtable/DESIGN.md +0 -107
  104. package/references/baemin/DESIGN.md +0 -260
  105. package/references/coinbase/DESIGN.md +0 -129
  106. package/references/dcard/DESIGN.md +0 -302
  107. package/references/freee/DESIGN.md +0 -308
  108. package/references/kakao/DESIGN.md +0 -261
  109. package/references/karrot/DESIGN.md +0 -252
  110. package/references/kraken/DESIGN.md +0 -146
  111. package/references/mercari/DESIGN.md +0 -294
  112. package/references/miro/DESIGN.md +0 -108
  113. package/references/nvidia/DESIGN.md +0 -308
  114. package/references/pinkoi/DESIGN.md +0 -309
  115. package/references/spacex/DESIGN.md +0 -205
  116. package/references/spotify/DESIGN.md +0 -246
  117. package/references/webflow/DESIGN.md +0 -109
@@ -0,0 +1,558 @@
1
+ ---
2
+ omd: 0.1
3
+ brand: freee
4
+ ---
5
+
6
+ # Design System Inspiration of freee
7
+
8
+ ## 1. Visual Theme & Atmosphere
9
+
10
+ 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.
11
+
12
+ 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.
13
+
14
+ 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).
15
+
16
+ **Key Characteristics:**
17
+ - **Open-source design system** ([freee/vibes](https://github.com/freee/vibes)) with three-tier token architecture (scale → semantic → component)
18
+ - Enterprise blue brand: `#285ac8` primary (`$vbColorsP07`), `#73a5ff` accent (`$vbColorsP04`)
19
+ - 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)
20
+ - Each hue scale has 5-10 calibrated shades (P01 lightest → P10 darkest)
21
+ - 4dp baseline spacing scale: `xs 4dp / s 8dp / basic 16dp / large 24dp / xl 32dp / xxl 48dp`
22
+ - Tight 5-step type scale: `10 / 12 / 14 / 16 / 24dp` — no display extremes, no middle gaps
23
+ - Form-control heights as design tokens: `small 24dp / basic 36dp / large 48dp`
24
+ - Container max-width `1120dp` (`70rem`) — wider than Bootstrap defaults but narrower than Mercari
25
+ - Three explicit shadow recipes: card, floating, popup (graduated weights)
26
+ - Z-index hierarchy with semantic names: overlay 100 → form actions 200 → floating 500 → full-screen 700 → modal 1000 → popup 2000 → max
27
+ - Japanese-first font stack with Hiragino Kaku Gothic ProN as the primary CJK fallback
28
+
29
+ ## 2. Color Palette & Roles
30
+
31
+ All values extracted from `stylesheets/lv0/_colors.scss` in the open-source [freee/vibes](https://github.com/freee/vibes) repo (vibes_2021).
32
+
33
+ ### Primary Blue (`$vbColorsP01–P10`)
34
+ - `#ebf3ff` (P01) — lightest tint, page background hint
35
+ - `#dce8ff` (P02) — light surface, badge bg
36
+ - `#aac8ff` (P03) — light accent
37
+ - `#73a5ff` (P04) — **`$vbAccentColor`** (accent, hover for primary)
38
+ - `#2864f0` (P05) — bright primary
39
+ - `#3264dc` (P06) — primary mid
40
+ - `#285ac8` (P07) — **`$vbPrimaryColor`** (primary actions, links, brand)
41
+ - `#1e46aa` (P08) — primary dark
42
+ - `#23418c` (P09) — primary darker
43
+ - `#143278` (P10) — primary darkest
44
+
45
+ ### Secondary / Neutral (`$vbColorsS01–S10`)
46
+ - `#f7f5f5` (S01) — `$vbColumnColor` (column / table bg)
47
+ - `#f0eded` (S02) — `$vbBaseColor1` (subtle surface 1)
48
+ - `#e9e7e7` (S03) — `$vbBaseColor2` (subtle surface 2)
49
+ - `#e1dcdc` (S04)
50
+ - `#d7d2d2` (S05)
51
+ - `#bebaba` (S06)
52
+ - `#aaa7a7` (S07)
53
+ - `#8c8989` (S08) — `$vbBaseColor3` (mid neutral, captions)
54
+ - `#6e6b6b` (S09) — `$vbBurntColor` (text-burnt)
55
+ - `#464343` (S10) — darkest neutral
56
+
57
+ ### Status (Red, Orange, Yellow scales)
58
+ - **Red** (`RE02 #fad2d7`, `RE04 #f07882`, `RE05 #dc1e32`, `RE07 #a51428`, `RE10 #6e0f19`)
59
+ - `$vbAlertColor: $vbColorsRE05` (`#dc1e32`) — alerts, errors, destructive actions
60
+ - **Orange** (`OR02 #ffe1d2`, `OR04 #ffaa78`, `OR05 #fa6414`, `OR07 #be4b0f`, `OR10 #7d320a`)
61
+ - **Yellow** (`YE02 #fff0d2`, `YE04 #ffd278`, `YE05 #ffb91e`, `YE07 #be8c14`, `YE10 #825a0f`)
62
+ - `$vbNoticeColor: $vbColorsYE07` (`#be8c14`) — warnings, notices
63
+
64
+ ### Yellow-Green / Green / Blue-Green (success, growth)
65
+ - **Yellow-Green** (`YG02 #e6f0d2`, `YG04 #b4dc7d`, `YG05 #82c31e`, `YG07 #50961e`, `YG10 #3c5f14`)
66
+ - **Green** (`GR02 #cdebd7`, `GR04 #64be8c`, `GR05 #00963c`, `GR07 #006e2d`, `GR10 #004b1e`) — success
67
+ - **Blue-Green / Teal** (`BG02 #cdf0f0`, `BG04 #64d2d2`, `BG05 #00b9b9`, `BG07 #008c8c`, `BG10 #146464`)
68
+
69
+ ### Purple
70
+ - `PU02 #e6d7fa`, `PU04 #b482f0`, `PU05 #733ce6`, `PU07 #5a2daa`, `PU10 #3c1e73`
71
+
72
+ ### Pure Gray (`$vbColorsGY01–GY10`)
73
+ - `#fbfbfb` (GY01) — page bg highlight
74
+ - `#dcdcdc` (GY02)
75
+ - `#a0a0a0` (GY04)
76
+ - `#5a5a5a` (GY05)
77
+ - `#323232` (GY07) — **`$vbBlackColor`** (default text color)
78
+ - `#1e1e1e` (GY10) — darkest gray
79
+
80
+ ### Semantic Aliases (the design contracts)
81
+ | Semantic | Value | Use |
82
+ |---|---|---|
83
+ | `$vbPrimaryColor` | `$vbColorsP07` (`#285ac8`) | Primary CTAs, brand actions |
84
+ | `$vbAccentColor` | `$vbColorsP04` (`#73a5ff`) | Accent hover, secondary brand |
85
+ | `$vbLinkColor` | `$vbColorsP07` (`#285ac8`) | Hyperlinks (matches primary) |
86
+ | `$vbColumnColor` | `$vbColorsS01` (`#f7f5f5`) | Table column bg |
87
+ | `$vbBaseColor1` | `$vbColorsS02` (`#f0eded`) | Subtle surface 1 |
88
+ | `$vbBaseColor2` | `$vbColorsS03` (`#e9e7e7`) | Subtle surface 2 |
89
+ | `$vbBaseColor3` | `$vbColorsS08` (`#8c8989`) | Mid neutral text |
90
+ | `$vbBurntColor` | `$vbColorsS09` (`#6e6b6b`) | Burnt-out text (de-emphasized) |
91
+ | `$vbBlackColor` | `$vbColorsGY07` (`#323232`) | Default text color |
92
+ | `$vbAlertColor` | `$vbColorsRE05` (`#dc1e32`) | Alerts, errors, destructive |
93
+ | `$vbNoticeColor` | `$vbColorsYE07` (`#be8c14`) | Warnings, notices |
94
+ | `$vbBackgroundColor` | `$vbColorsP01` (`#ebf3ff`) | Page tint background |
95
+
96
+ ### Scrim / Overlay
97
+ - `$vbScrimColor: rgba(0, 0, 0, 0.5)` — modal backdrop
98
+ - `$vbThinScrimColor: rgba(0, 0, 0, 0.12)` — light overlay (e.g., disabled state)
99
+
100
+ ## 3. Typography Rules
101
+
102
+ ### Font Stack
103
+ ```scss
104
+ $vbFontFamily: '-apple-system', BlinkMacSystemFont, 'Helvetica Neue',
105
+ 'ヒラギノ角ゴ ProN', Hiragino Kaku Gothic ProN, Arial, 'メイリオ', Meiryo,
106
+ sans-serif;
107
+ ```
108
+
109
+ `-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.
110
+
111
+ ### Type Scale (verified from `_size.scss`)
112
+ | Token | Size | Use |
113
+ |---|---|---|
114
+ | `$vbFontSize0625` | `0.625rem` (10dp) | Smallest icon font |
115
+ | `$vbFontSize0750` | `0.75rem` (12dp) | Caption |
116
+ | `$vbFontSize0875` | `0.875rem` (14dp) | Normal body, Headline 3 |
117
+ | `$vbFontSize1000` | `1rem` (16dp) | Headline 2 |
118
+ | `$vbFontSize1500` | `1.5rem` (24dp) | Headline 1 |
119
+
120
+ ### Semantic Typography Tokens
121
+ | Token | Value |
122
+ |---|---|
123
+ | `$vbCaptionFontSize` | `0.75rem` (12dp) |
124
+ | `$vbNormalFontSize` | `0.875rem` (14dp) |
125
+ | `$vbHeadline3FontSize` | `0.875rem` (14dp) |
126
+ | `$vbHeadline2FontSize` | `1rem` (16dp) |
127
+ | `$vbHeadline1FontSize` | `1.5rem` (24dp) |
128
+
129
+ ### Mobile Typography (steps down for tablets/phones)
130
+ - `$vbMobileHeadline1FontSize: 16dp` (was 24dp)
131
+ - `$vbMobileHeadline2FontSize: 14dp` (was 16dp)
132
+ - `$vbMobileHeadline3FontSize: 14dp` (unchanged)
133
+
134
+ ### Line Height
135
+ - `$vbLineHeight: 1.5` — universal default (generous for CJK readability)
136
+
137
+ ### Conventions
138
+ - **No display sizes above 24dp** — freee's voice is utilitarian SaaS, not editorial
139
+ - **Body and Headline 3 share 14dp** — visual hierarchy comes from weight + color, not size
140
+ - **Mobile compresses everything to 14-16dp** — preserves 1.5 line-height for cramped screens
141
+ - **Brand wordmark uses Noto Sans CJK JP Medium** — only place a custom font loads
142
+
143
+ ## 4. Component Stylings
144
+
145
+ ### Buttons
146
+
147
+ **Primary**
148
+ - Background: `#285ac8` (`$vbPrimaryColor`)
149
+ - Text: `#ffffff`
150
+ - Radius: 4px
151
+ - Padding: 8px 16px (basic) — small `4px 16px`, large `12px 24px`
152
+ - Height: 36px (`$vbFormControlHeight`)
153
+ - Font: 14px / 500-700
154
+ - Disabled: overlay `rgba(0,0,0,0.12)` (`$vbThinScrimColor`)
155
+ - Use: Primary CTAs, brand actions
156
+
157
+ **Small**
158
+ - Background: `#285ac8`
159
+ - Text: `#ffffff`
160
+ - Radius: 4px
161
+ - Padding: 4px 16px
162
+ - Height: 24px (`$vbFormControlSmallHeight`)
163
+ - Font: 14px / 500
164
+ - Use: Compact buttons in dense tables
165
+
166
+ **Large**
167
+ - Background: `#285ac8`
168
+ - Text: `#ffffff`
169
+ - Radius: 4px
170
+ - Padding: 12px 24px
171
+ - Height: 48px (`$vbFormControlLargeHeight`)
172
+ - Font: 16px / 700
173
+ - Use: Hero CTAs, mobile-friendly forms
174
+
175
+ **Accent**
176
+ - Background: `#73a5ff` (`$vbAccentColor`)
177
+ - Text: `#ffffff`
178
+ - Radius: 4px
179
+ - Padding: 8px 16px
180
+ - Use: Hover/secondary brand actions
181
+
182
+ ### Inputs
183
+
184
+ **Default**
185
+ - Background: `#ffffff`
186
+ - Text: `#323232` (`$vbBlackColor`)
187
+ - Border: 1px solid `#8c8989` (`$vbBaseColor3`)
188
+ - Radius: 4px
189
+ - Padding: 8px 12px
190
+ - Height: 36px (`$vbFormControlHeight`)
191
+ - Focus: border `#285ac8` (`$vbPrimaryColor`)
192
+ - Error: border `#dc1e32` (`$vbAlertColor`); helper text in same red
193
+ - Use: Standard form input
194
+
195
+ **Small**
196
+ - Background: `#ffffff`
197
+ - Border: 1px solid `#8c8989`
198
+ - Radius: 4px
199
+ - Height: 24px
200
+ - Use: Compact inputs, dense tables
201
+
202
+ ### Cards
203
+
204
+ **Standard Panel**
205
+ - Background: `#ffffff`
206
+ - Border: 1px solid `#e9e7e7` (`$vbBaseColor2`)
207
+ - Radius: 4px
208
+ - Padding: 16px (`$vbBasicSize`)
209
+ - Use: Default card / panel surface
210
+
211
+ **Subtle Panel**
212
+ - Background: `#f7f5f5` (`$vbColumnColor`)
213
+ - Border: 1px solid `#e9e7e7`
214
+ - Radius: 4px
215
+ - Padding: 24px (`$vbLargeSize`)
216
+ - Use: Subtle differentiation panel
217
+
218
+ ### Badges
219
+
220
+ **Success**
221
+ - Background: `#cdebd7` (GR02)
222
+ - Text: `#006e2d` (GR07)
223
+ - Radius: 4px
224
+ - Padding: 2px 8px
225
+ - Font: 12px / 500
226
+ - Use: Success / confirmation status
227
+
228
+ **Alert**
229
+ - Background: `#fad2d7` (RE02)
230
+ - Text: `#dc1e32` (RE05 / `$vbAlertColor`)
231
+ - Radius: 4px
232
+ - Padding: 2px 8px
233
+ - Font: 12px / 500
234
+ - Use: Errors, destructive states
235
+
236
+ **Notice**
237
+ - Background: `#fff0d2` (YE02)
238
+ - Text: `#be8c14` (YE07 / `$vbNoticeColor`)
239
+ - Radius: 4px
240
+ - Padding: 2px 8px
241
+ - Font: 12px / 500
242
+ - Use: Warnings, notices
243
+
244
+ **Info**
245
+ - Background: `#dce8ff` (P02)
246
+ - Text: `#285ac8` (P07)
247
+ - Radius: 4px
248
+ - Padding: 2px 8px
249
+ - Font: 12px / 500
250
+ - Use: Informational status
251
+
252
+ ### Tables
253
+ - Column bg alternates: white / `$vbColumnColor` (`#f7f5f5`)
254
+ - Row dividers: `1px solid $vbBaseColor2` (`#e9e7e7`)
255
+ - Header: bold weight, dark text on white
256
+ - Compact and dense — freee is enterprise productivity software
257
+
258
+ ### Navigation
259
+ - Primary nav: white bg with subtle bottom border, `$vbPrimaryColor` for active link
260
+ - Secondary nav: tab-style with underline indicator in `$vbPrimaryColor`
261
+
262
+ ## 5. Layout Principles
263
+
264
+ ### Spacing Scale (verified from `_size.scss`)
265
+ | Token | Value | dp |
266
+ |---|---|---|
267
+ | `$vbMinimum` | `1px` | 1px hairline |
268
+ | `$vbXSmallSize` | `0.25rem` | 4dp |
269
+ | `$vbSmallSize` | `0.5rem` | 8dp |
270
+ | `$vbBasicSize` | `1rem` | 16dp |
271
+ | `$vbLargeSize` | `1.5rem` | 24dp |
272
+ | `$vbXLargeSize` | `2rem` | 32dp |
273
+ | `$vbXXLargeSize` | `3rem` | 48dp |
274
+
275
+ ### Container
276
+ - `$vbContainerSize: 70rem` (1120dp) — page max-width
277
+ - Mobile breakpoint: `$vbMobileBoundaryWidth: 48rem` (768dp)
278
+
279
+ ### Density
280
+ 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.
281
+
282
+ ## 6. Depth & Elevation
283
+
284
+ ### Three explicit shadow recipes (from `_colors.scss`)
285
+ - **Card** — `$vbCardShadow`:
286
+ ```
287
+ 0 0 1rem rgba(0, 0, 0, 0.1),
288
+ 0 0.125rem 0.25rem rgba(0, 0, 0, 0.2)
289
+ ```
290
+ - **Floating** — `$vbFloatingShadow`:
291
+ ```
292
+ 0 0 1.5rem rgba(0, 0, 0, 0.1),
293
+ 0 0.25rem 0.5rem rgba(0, 0, 0, 0.2)
294
+ ```
295
+ - **Popup** — `$vbPopupShadow`:
296
+ ```
297
+ 0 0 2rem rgba(0, 0, 0, 0.1),
298
+ 0 0.375rem 0.75rem rgba(0, 0, 0, 0.2)
299
+ ```
300
+
301
+ Each level uses the same dual-shadow technique (ambient diffuse + directional drop), scaling the radius progressively.
302
+
303
+ ### Z-Index Hierarchy (named tokens)
304
+ | Token | Value | Use |
305
+ |---|---|---|
306
+ | `$vbOverlayZIndex` | `100` | Subtle overlays |
307
+ | `$vbFormActionsZIndex` | `200` | Form action bars |
308
+ | `$vbFloatingZIndex` | `500` | Floating cards |
309
+ | `$vbFullScreenZIndex` | `700` | Full-screen views |
310
+ | `$vbModalZIndex` | `1000` | Modals |
311
+ | `$vbMessageModalZIndex` | `1500` | Message modals |
312
+ | `$vbPopupZIndex` | `2000` | Popups |
313
+ | `$vbPopupMessageZIndex` | `3000` | Popup messages |
314
+ | `$vbFixedMessageZIndex` | `4000` | Fixed messages |
315
+ | `$vbMaxZIndex` | `2147483647` | Maximum (system reserved) |
316
+
317
+ ### Animation
318
+ Not explicitly tokenized in `_size.scss` extracted — components use SCSS-default transitions (`0.2-0.3s ease`).
319
+
320
+ ## 7. Do's and Don'ts
321
+
322
+ - **DO** use the three-tier token system: scale (`$vbColorsP07`) → semantic (`$vbPrimaryColor`) → component-level. Always reference semantic over scale where possible.
323
+ - **DON'T** invent new color values. The 9 hue scales × 5-10 shades cover virtually any need.
324
+ - **DO** lead with `$vbPrimaryColor` (`#285ac8`) for brand actions and links. It's the same value — links should match buttons in this system.
325
+ - **DON'T** use bright accent blue (`$vbAccentColor: #73a5ff`) as a primary CTA. It's reserved for hover states and secondary emphasis.
326
+ - **DO** use the named font-size tokens (`$vbHeadline1FontSize`, `$vbNormalFontSize`) instead of raw rem values. The 5-step scale is the contract.
327
+ - **DON'T** use display sizes above 24dp. freee is enterprise SaaS — restraint is the voice.
328
+ - **DO** apply `$vbLineHeight: 1.5` universally. Japanese readers need generous vertical breathing room.
329
+ - **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.
330
+ - **DO** snap to the 4dp spacing scale (4 / 8 / 16 / 24 / 32 / 48). Never use intermediate values like 6, 10, or 14.
331
+ - **DON'T** invent custom shadow values — use `$vbCardShadow`, `$vbFloatingShadow`, `$vbPopupShadow` for the three elevation tiers.
332
+ - **DO** use the named z-index tokens (`$vbModalZIndex`, `$vbPopupZIndex`, etc.). The hierarchy spans 100 → 4000 with deliberate gaps.
333
+ - **DON'T** use arbitrary z-index values like `9999` — that breaks the layered system.
334
+ - **DO** use status colors with the matching family (e.g., `RE02` bg + `RE05/RE07` text for alerts).
335
+ - **DON'T** mix hue families in a single status badge (e.g., never red bg with orange text).
336
+
337
+ ## 8. Responsive Behavior
338
+
339
+ ### Breakpoint
340
+ - `$vbMobileBoundaryWidth: 48rem` (768dp) — single breakpoint between desktop and mobile
341
+
342
+ ### Mobile Adjustments
343
+ - All headline sizes step down (`$vbMobileHeadline1FontSize: 16dp` vs. desktop 24dp)
344
+ - Form controls remain at the same height tokens (mobile-friendly already at 36-48dp)
345
+ - Container width adapts to viewport (no fixed mobile container)
346
+
347
+ ### Touch
348
+ - Form controls at `36-48dp` heights = touch-friendly by default
349
+ - Buttons inherit form-control heights
350
+
351
+ ### Image Behavior
352
+ - Not tokenized in vibes — application-specific
353
+ - Brand logo uses the `freee-logo` font for crisp scaling at any size
354
+
355
+ ## 9. Agent Prompt Guide
356
+
357
+ ### Quick Color Reference
358
+ - Primary CTA / Link: `#285ac8` (`$vbPrimaryColor` / `$vbColorsP07`)
359
+ - Accent (hover, secondary): `#73a5ff` (`$vbAccentColor` / `$vbColorsP04`)
360
+ - Default text: `#323232` (`$vbBlackColor` / `$vbColorsGY07`)
361
+ - Muted text: `#6e6b6b` (`$vbBurntColor` / `$vbColorsS09`)
362
+ - Caption text: `#8c8989` (`$vbBaseColor3` / `$vbColorsS08`)
363
+ - Page bg: `#ffffff` (or `#ebf3ff` for tinted bg)
364
+ - Subtle surface: `#f0eded` (`$vbBaseColor1`)
365
+ - Border default: `#e9e7e7` (`$vbBaseColor2`)
366
+ - Alert: `#dc1e32` (`$vbAlertColor`)
367
+ - Notice: `#be8c14` (`$vbNoticeColor`)
368
+ - Success: `#00963c` (`$vbColorsGR05`)
369
+
370
+ ### Example Component Prompts
371
+ - "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."
372
+ - "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)."
373
+ - "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)."
374
+ - "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`."
375
+ - "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."
376
+
377
+ ### Iteration Guide
378
+ 1. **Always reference semantic tokens (`$vbPrimaryColor`, `$vbAlertColor`)** instead of scale values (`$vbColorsP07`, `$vbColorsRE05`) when writing component-level code.
379
+ 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.
380
+ 3. **`#285ac8` is both the link color AND the primary button color** — they're the same semantic in vibes. Maintain visual coherence.
381
+ 4. **`border-radius: 4px`** is the de facto standard (vibes doesn't tokenize radius, components use 4px consistently).
382
+ 5. **Type scale: 10 / 12 / 14 / 16 / 24dp** — five steps total. Don't introduce 18 or 20 or 28.
383
+ 6. **Mobile shrinks H1 from 24dp → 16dp**, H2 from 16dp → 14dp. H3 stays at 14dp.
384
+ 7. **Spacing snaps to the 4dp scale: 4 / 8 / 16 / 24 / 32 / 48**. Never 6, 10, or 14.
385
+ 8. **Three shadow recipes only** (`$vbCardShadow`, `$vbFloatingShadow`, `$vbPopupShadow`) — graduated radius and offset.
386
+ 9. **Z-index uses named tokens** with massive gaps (100 / 200 / 500 / 700 / 1000 / 1500 / 2000 / 3000 / 4000) — leaves room for future layers.
387
+ 10. **Form-control heights are tokens** (24 / 36 / 48dp) — never use arbitrary heights for inputs/buttons.
388
+ 11. **Line-height 1.5 is universal** — preserves Japanese vertical rhythm and accessibility.
389
+ 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.
390
+
391
+ ---
392
+
393
+ ## 10. Voice & Tone
394
+
395
+ freee speaks to Japanese small-business owners and the accountants who support them — people who did not ask to become back-office operators and would rather spend the afternoon running the shop. The voice is therefore **plain, reassuring, and unobtrusively competent**: it uses everyday 丁寧語 instead of compliance jargon, names the next concrete step before it names the rule, and never performs sophistication. Numbers, due dates, and tax categories are treated as the subjects of sentences; the product itself stays quiet. The brand's public Design Philosophy names four adjectives — *かろやか* (light-footed), *シンプル*, *あんしん* (reassuring), *インテリジェント* — and those four are the register to hold, together at all times ([brand.freee.co.jp/designphilosophy](https://brand.freee.co.jp/designphilosophy/)).
396
+
397
+ | Context | Tone |
398
+ |---|---|
399
+ | CTAs | Plain imperative naming the outcome — *「確定して保存」「申告書を作成する」*. Never clever, never hedged. |
400
+ | Empty states | Name the next concrete action, not the absence. *「最初の取引を登録しましょう」* over *「データがありません」*. |
401
+ | Error (validation) | Say what is wrong and what to do, in that order; never blame the user. *「金額を半角数字で入力してください」*. |
402
+ | Error (system / network) | Admit the condition, state the user's safe next move. *「通信エラーが発生しました。少し待ってからもう一度お試しください」*. |
403
+ | Success (money-moved) | Confirm the ledger state, not the feeling. *「仕訳を登録しました」*. No celebratory emoji, no 🎉. |
404
+ | Onboarding | First-person plural in 丁寧語 — *「まずは事業者情報を登録しましょう」*. Calm, step-by-step, no surprise. |
405
+ | Help / inline explanation | One sentence of plain language before any tax-code reference. Technical term on second mention, parenthetical on first. |
406
+ | Accessibility surfaces | Written for screen reader + keyboard first; visible copy and `aria-label` say the same thing in the same register (`a11y-guidelines.freee.co.jp`). |
407
+
408
+ **Voice samples.**
409
+ - *「スモールビジネスを、世界の主役に。」* — corporate mission tagline, set at marketing hero scale. <!-- verified: https://corp.freee.co.jp/mission/ , 2026-04 -->
410
+ - *「だれでもビジネスの主役になれる」* — accessibility-page framing; states *why* accessibility is non-negotiable at freee. <!-- verified: https://corp.freee.co.jp/sustainability/social/accessibility/ , 2026-04 -->
411
+ - *「かろやか・シンプル・あんしん・インテリジェント」* — the four-adjective voice register published on the brand site; used as the header of product voice decisions. <!-- cited: https://brand.freee.co.jp/designphilosophy/ -->
412
+ - Empty state for an unstarted ledger: *「まだ取引がありません。最初の取引を登録しましょう。」* <!-- illustrative: not verified as live freee copy; register modelled on corp.freee.co.jp 丁寧語 -->
413
+ - Validation error on an amount field: *「金額を半角数字で入力してください。」* <!-- illustrative: not verified as live freee copy; register matches a11y-guidelines.freee.co.jp form-error examples -->
414
+ - Success toast after saving a journal entry: *「仕訳を登録しました。」* <!-- illustrative: not verified as live freee copy; plain 丁寧語 past-tense state confirmation -->
415
+
416
+ **Forbidden phrases.** In Japanese product copy: カタカナ-heavy jargon that does not carry its weight — *イノベーティブ*, *ディスラプティブ*, *ネクストジェネレーション*, *革命的*. In English surfaces: *revolutionary*, *game-changer*, *next-generation*, *AI-powered* as a standalone claim. In money-moved and filing-submitted confirmations: emoji of any kind — 🎉 ✨ 🚀 💯 are all wrong for a tax filing. Absolutes that a tax authority could contradict: *完全自動*, *絶対に間違えません*, *100% 正確*. Second-person scolding in error states (*「入力ミスです」*) — rewrite as instructive (*「…を入力してください」*).
417
+
418
+ ## 11. Brand Narrative
419
+
420
+ freee was founded **July 2012** by **Daisuke "Dice" Sasaki**, who had previously run **APAC SMB Marketing Development at Google** (and was CFO/VP at ALBERT Inc. before that) ([Daisuke Sasaki — LinkedIn](https://www.linkedin.com/in/daisukesasaki/), [DCFmodeling — freee history](https://www.dcfmodeling.com/blogs/history/4478t-history-mission-ownership)). Cloud accounting freee launched **March 2013**; expanded into HR/payroll/labor in 2015. Pre-IPO funding totaled **~$227.9M across 9 rounds** with **Mitsubishi UFJ, LINE, Life Card, Nippon Life, Sharp, Salesforce, Recruit, SBI, and Greyhound Capital** as investors ([TechCrunch — freee $60M 2018](https://techcrunch.com/2018/08/07/japans-freee-raises-60m/)). **Tokyo Stock Exchange IPO December 2019** (ticker **4478**) — the **second-biggest Japanese IPO of 2019** ([AsiaTechDaily — freee 2nd-biggest IPO Japan 2019](https://asiatechdaily.com/freee-second-biggest-ipo-of-japan-in-2019/)). Sasaki had previously run SMB marketing for Google Japan and the Asia-Pacific region ([corp.freee.co.jp/company](https://corp.freee.co.jp/company/)). The starting observation was that the smallest Japanese businesses — the shops, clinics, studios, and single-person LLCs that make up most of the economy — spent a disproportionate share of their week on bookkeeping they had not signed up for. Cloud accounting freee launched in 2013, and over the following decade grew into an integrated platform spanning accounting, HR, payroll, and approval workflows.
421
+
422
+ The mission, refreshed in 2018, is *「スモールビジネスを、世界の主役に。」* — *"Put small businesses center stage"* ([corp.freee.co.jp/mission](https://corp.freee.co.jp/mission/)). freee frames small businesses as *「多様な価値観や生き方を生み出す、イノベーションの源泉」* — the catalysts that push the rest of the economy forward — and positions its product as the back-office infrastructure that lets those businesses spend their time being businesses instead of clerks. Accessibility is treated as a literal extension of the mission: *「すべての人が freee のサービスを使える必要がある」* ([corp.freee.co.jp/sustainability/social/accessibility](https://corp.freee.co.jp/sustainability/social/accessibility/)), which is why freee publishes its accessibility guidelines ([a11y-guidelines.freee.co.jp](https://a11y-guidelines.freee.co.jp/)) and the Vibes design system ([github.com/freee/vibes](https://github.com/freee/vibes)) as open source.
423
+
424
+ What freee refuses: the marketing-first aesthetics of consumer SaaS, the stern compliance tone of legacy Japanese enterprise software, and the "magic AI" framing that obscures what the software actually did to a ledger. What it embraces: plain 丁寧語, the four-adjective register (*かろやか / シンプル / あんしん / インテリジェント*), a single enterprise-blue brand signal (`#285ac8`), and a design system that treats accessibility as a quality constraint rather than a feature — scored against WCAG 2.1 AA from the component level up.
425
+
426
+ ## 12. Principles
427
+
428
+ 1. **Give small businesses their time back.** Every screen is measured against whether it removes back-office work or adds it. *UI implication:* default to the shortest path that still produces a legally correct record — pre-fill from prior entries, hide advanced fields behind disclosure, never ask for data the product already has. Example: a repeat invoice reuses the last vendor, amount, and tax category; the user confirms, not re-enters.
429
+ 2. **かろやか and シンプル, together.** *Light-footed* and *simple* are the first two adjectives of the brand register; they act on layout and density. *UI implication:* snap every measurement to the 4dp scale (`$vbXSmallSize` → `$vbXXLargeSize`); keep the type scale to the five published steps (10 / 12 / 14 / 16 / 24dp); no display sizes above 24dp anywhere in product UI. Example: a dashboard headline is `$vbHeadline1FontSize` (24dp) — never 32 or 40, even on the hero.
430
+ 3. **あんしん is a legibility contract.** *Reassurance* on a tax filing means the user can *see* what will happen before it happens. *UI implication:* confirmation screens state the ledger effect in words and in numbers, journal entries preview their debit/credit pair before commit, destructive actions say exactly what will be deleted. Default text color is `$vbBlackColor` (`#323232`) at line-height 1.5 — never light-gray body type on white.
431
+ 4. **インテリジェント means the software did the work, not the copy.** Automation earns its adjective by producing the right entry, not by announcing itself. *UI implication:* auto-matched transactions show the matching rule in plain language and a one-click override; never label a feature *AI* on the surface when a verb ("自動で仕訳") is more precise. No sparkle icons on automated suggestions.
432
+ 5. **One brand blue, used like a signature.** `$vbPrimaryColor` (`#285ac8`, `$vbColorsP07`) is simultaneously the primary-action color, the link color, and the brand mark color. *UI implication:* do not introduce a second blue for links; do not use the lighter accent (`#73a5ff`, P04) as a primary CTA — it is a hover/secondary tint only. Example: a screen has at most one primary blue button per task region; everything else is neutral.
433
+ 6. **Status lives in hue families, not in one-off hexes.** The 9-hue palette (P / S / RE / OR / YE / YG / GR / BG / PU / GY) is the complete vocabulary for success, warning, alert, info, and category tagging. *UI implication:* a status badge uses the `02` tint as background and the `05`-or-`07` shade as foreground, both from the same family (e.g., `RE02 #fad2d7` bg + `RE05 #dc1e32` text). Never mix families inside a single status (no orange text on red background).
434
+ 7. **Accessibility is a product constraint, not a checklist.** freee publishes its accessibility guidelines as an open standard because accessibility is how the mission reaches *everyone who needs the software* ([a11y-guidelines.freee.co.jp](https://a11y-guidelines.freee.co.jp/)). *UI implication:* every interactive component ships with a keyboard path, visible focus (`_focus.scss`), and a screen-reader label that matches the visible label; WCAG 2.1 AA contrast is enforced by the semantic tokens (`$vbPrimaryColor` on white clears 4.5:1). A component without a keyboard path is not finished.
435
+ 8. **Fewer words, placed next to the decision.** Japanese SMB users skim; accountants scan. *UI implication:* inline helper text appears only at the field where a costly mis-entry is possible, not on every field; terms of art are glossed once on first appearance, not repeated; error messages sit directly under the input, not in a summary banner. Example: the tax-code selector has a one-line helper; the company-name field has none.
436
+
437
+ ## 13. Personas
438
+
439
+ *Personas are fictional archetypes informed by publicly described freee user segments — Japanese small-business owners, their employees, and the tax accountants who support them. They are not individual people.*
440
+
441
+ **Kenji Tanaka, 52, Setagaya.** Owner of a six-seat ramen shop. Uses freee on an iPad at the counter to photograph receipts between lunch and dinner service; the auto-matching has to be right on the first pass because he will not re-open the app. Cares about one question at year-end — *is the filing done correctly* — and judges the product entirely on that.
442
+
443
+ **Haruka Mori, 34, freelance illustrator, Kichijōji.** Registered sole proprietor (個人事業主). Opens freee once a week on a laptop to log invoices and expenses, once a quarter to pay consumption tax, once a year to e-file 確定申告. Switched from paper because the app walks her through the filing in plain Japanese — she has never read a tax form in her life and does not intend to start.
444
+
445
+ **Ms. Sato, 47, licensed tax accountant (税理士), Nagoya.** Runs a practice with 40 SMB clients, most on freee. Lives in the accountant's dashboard: bulk review, anomaly flags, quarterly closes. Prefers keyboard-first workflows, dense tables, and `$vbColumnColor` striping because she reads ledgers all day. Notices immediately if an error message is imprecise about *which row* failed.
446
+
447
+ **Yamada-san, 29, back-office lead at a 20-person design studio, Shibuya.** Handles payroll, expense approvals, and onboarding in freee HR. Routes approval requests via Slack and expects state to be visible at a glance — submitted, approved, returned — without opening each item. Forwards the freeeアクセシビリティー・ガイドライン to the studio's web team as a matter of course.
448
+
449
+ ## 14. States
450
+
451
+ | State | Treatment |
452
+ |---|---|
453
+ | **Empty (ledger, no transactions yet)** | White canvas. One 14dp `$vbBlackColor` sentence naming the next step (*「最初の取引を登録しましょう」*). One `$vbPrimaryColor` 36dp pill-less rectangular (`4px` radius) CTA. No illustration — *かろやか* means not filling the space. |
454
+ | **Empty (search / filter, no matches)** | Muted 14dp body in `$vbBurntColor` (`#6e6b6b`) stating the filter used and one "Clear filter" link in `$vbLinkColor` (`#285ac8`). Never suggests the data doesn't exist — suggests the filter is narrow. |
455
+ | **Loading (table)** | Rows render as `$vbBaseColor2` (`#e9e7e7`) skeleton blocks at final width. 1.2s shimmer over the whole grid. Amount columns show `¥ -` placeholder in `$vbBurntColor`, not a bare dash — keeps currency context visible. |
456
+ | **Loading (in-button, saving a journal entry)** | Button retains `$vbFormControlHeight` (36dp) and `$vbPrimaryColor` background; label swaps to *「保存中…」* with a 14dp neutral spinner on the left. Button stays disabled; no width jump. |
457
+ | **Error (form validation)** | Input border becomes `$vbAlertColor` (`#dc1e32`). Helper text appears directly below the field in the same red at 12dp — one sentence naming both the problem and the corrective action. |
458
+ | **Error (system / API)** | Inline banner at the top of the working region, `RE02` (`#fad2d7`) background + `RE07` (`#a51428`) text, no dismiss icon during the first 3s. Includes a retry button — the banner disappears when the request succeeds. |
459
+ | **Error (permission / auth)** | Full-region empty-canvas treatment with a single 16dp sentence in `$vbBlackColor` stating which role is required and one link to the admin. Never a modal — permission errors are not interruptions. |
460
+ | **Success (journal entry saved)** | Inline toast at top-right: `GR02` (`#cdebd7`) bg + `GR07` (`#006e2d`) text, 3s auto-dismiss, message *「仕訳を登録しました」*. No checkmark animation; the new row appearing in the table is the confirmation. |
461
+ | **Success (e-filing submitted)** | Full-screen confirmation. `$vbPrimaryColor` header bar, white card with the submitted form type, timestamp, and reference number in `$vbHeadline1FontSize` (24dp). Single *「ダッシュボードに戻る」* button. This is the only full-screen success in the product; it earns the scale because a tax submission is final. |
462
+ | **Skeleton** | `$vbBaseColor2` (`#e9e7e7`) blocks at exact final dimensions. 1.2s shimmer. Currency fields show `¥ -`, dates show `----/--/--` — locale-formatted placeholders, never bare dashes. |
463
+ | **Disabled** | Apply `$vbThinScrimColor` (`rgba(0, 0, 0, 0.12)`) overlay to the whole control. Disabled control keeps its `4px` radius and 36dp height — does not shrink, does not change shape, never loses its label. |
464
+ | **Approval pending (HR / expense workflow)** | Inline pill in `YE02` (`#fff0d2`) bg + `YE07` (`#be8c14`) text: *「承認待ち」*. Row stays in the primary list, not archived — the work is not done until it is approved. |
465
+
466
+ ## 15. Motion & Easing
467
+
468
+ **Durations.**
469
+
470
+ | Token | Value | Use |
471
+ |---|---|---|
472
+ | `motion-instant` | 0ms | Toggle commits, selection state, disabled-state transitions |
473
+ | `motion-fast` | 120ms | Button hover/press color change, tab underline slide |
474
+ | `motion-standard` | 200ms | Toast enter/exit, dropdown open, inline banner appear |
475
+ | `motion-slow` | 320ms | Modal enter, full-screen success reveal, sheet rise |
476
+
477
+ **Easings.**
478
+
479
+ | Token | Curve | Use |
480
+ |---|---|---|
481
+ | `ease-enter` | `cubic-bezier(0.2, 0.6, 0.25, 1)` | Things arriving — toasts, modals, sheets |
482
+ | `ease-exit` | `cubic-bezier(0.4, 0.0, 0.9, 1)` | Dismissals, closes |
483
+ | `ease-standard` | `cubic-bezier(0.25, 0.1, 0.25, 1)` | Two-way transitions — hover, focus ring, tab switch |
484
+
485
+ **Spring stance.** **No spring. No overshoot. No bounce.** freee is accounting, HR, payroll, and tax filing software — the product's job is to make the user trust the number on screen, not to delight them about it. Spring easing tells a user "watch this," which is exactly the wrong message next to a ledger balance. The four-adjective register is *かろやか / シンプル / あんしん / インテリジェント* — none of those adjectives license a bounce. Motion is therefore strictly linear-to-eased; any curve that overshoots its target is forbidden across product surfaces.
486
+
487
+ **Signature motions.**
488
+
489
+ 1. **Row commit.** When a new journal entry is saved, the row fades into the table at `motion-standard` with `ease-enter`. No slide-down, no color flash — the row simply *is there*. The success toast (§14) confirms in words; the table does not need to celebrate.
490
+ 2. **Button press.** Primary buttons transition `background-color` from `$vbPrimaryColor` (`#285ac8`) to the pressed-darker shade over `motion-fast` with `ease-standard`. No scale transform — a button that shrinks under a finger feels imprecise for a money action.
491
+ 3. **Modal enter.** Backdrop fades to `$vbScrimColor` (`rgba(0, 0, 0, 0.5)`) over `motion-standard`; the dialog translates from +8dp to 0 and fades in over `motion-slow` with `ease-enter`. No zoom, no spring.
492
+ 4. **Inline banner (error / info).** Banner translates from -8dp to 0 and fades in over `motion-standard` with `ease-enter`. Dismiss reverses with `ease-exit` over `motion-fast`.
493
+ 5. **Full-screen filing success.** The full-screen confirmation page (§14) fades in over `motion-slow` with `ease-enter`. The reference-number text does not animate in — it is present immediately, so the user can screenshot it without waiting.
494
+ 6. **Reduce motion.** Under `prefers-reduced-motion: reduce`, all `motion-*` tokens collapse to `motion-instant`. Row commits, banners, modals, and the full-screen success all appear without transition. No exceptions — accessibility is a product constraint, not a feature (see Principle 7).
495
+
496
+ <!--
497
+ OmD v0.1 Sources — Philosophy Layer (sections 10–15)
498
+
499
+ ## Direct verification via WebFetch (2026-04-20)
500
+ - https://corp.freee.co.jp/mission/ — mission statement "スモールビジネスを、世界の主役に。" and surrounding
501
+ framing of small businesses as catalysts of innovation. Used in §11 narrative and §10 voice samples.
502
+ - https://corp.freee.co.jp/company/ — founding year (July 2012), founder Daisuke Sasaki, his prior roles
503
+ at Google / CLSA / Hakuhodo / ALBERT, and the Hitotsubashi commerce-department education. Used in §11.
504
+ - https://corp.freee.co.jp/sustainability/social/accessibility/ — "だれでもビジネスの主役になれる" accessibility
505
+ framing; the "すべての人が freee のサービスを使える必要がある" rationale. Used in §10 samples, §11, §12.7.
506
+ - https://a11y-guidelines.freee.co.jp/intro/intro.html — purpose statement of the open-source accessibility
507
+ guidelines; WCAG 2.1 AA basis; concrete-over-abstract editorial stance. Used in §12.7.
508
+ - https://developers.freee.co.jp/entry/growing-vibes — Vibes' accessibility-as-foundation stance, the
509
+ tiered designer/engineer/QA accessibility model, the "scrap-and-build" reset history. Used in §12.7.
510
+
511
+ ## Cited (search-surface confirmation, not full live fetch)
512
+ - https://brand.freee.co.jp/designphilosophy/ — the four-adjective register (かろやか / シンプル / あんしん /
513
+ インテリジェント) and the supporting adjectives (まえむき / リラックス / たのしさ as spice). Source for §10 intro,
514
+ §10 forbidden-phrases register decisions, and §12.2–12.4 principle framings. Page itself returned
515
+ minimal markdown to WebFetch, but the four adjectives are consistently documented across search-surface
516
+ summaries of the page and multiple third-party analyses (Takram's freee rebrand case, note.com writeups,
517
+ developers.freee.co.jp reading-group article).
518
+ - https://speakerdeck.com/magi1125/dezainpurinsipurunotukurikata — "Design Principle creation" deck.
519
+ Confirms that freee operates against concrete principles such as "segment screens by business workflow",
520
+ "restrict explanatory text to critical error-prevention areas", and "prioritize efficiency in repetitive
521
+ workflows". Principles 1 and 8 echo this framing at a general level.
522
+ - https://corp.freee.co.jp/news/20231219_design.html — 2023-12-19 press release announcing Vibes as
523
+ open-source, framing accessibility as the headline engineering asset. Supports §11 and §12.7.
524
+
525
+ ## JP-translated / illustrative
526
+ - §10 voice samples marked `illustrative` are written in plain 丁寧語 matching the register observed on
527
+ corp.freee.co.jp and a11y-guidelines.freee.co.jp; they are NOT verified as live freee product strings.
528
+ A reviewer with freee product access should cross-check these against actual screens before they are
529
+ used as microcopy source by an agent.
530
+
531
+ ## Base DESIGN.md (§1–9) — carry-from-base, not re-verified
532
+ - All token-level claims (#285ac8 $vbPrimaryColor, 4dp spacing scale, 5-step type scale 10/12/14/16/24dp,
533
+ three shadow recipes, z-index hierarchy, Hiragino-led font stack) are sourced from the base DESIGN.md
534
+ §1–9, which was extracted in 2026-04-17 from the open-source github.com/freee/vibes SCSS partials.
535
+ These were not re-verified in the Philosophy pass; §14 and §15 reference them as authoritative.
536
+
537
+ ## Interpretive / editorial claims (flagged for honesty)
538
+ - The framing of freee's voice as "plain, reassuring, unobtrusively competent" is an editorial synthesis
539
+ of the four-adjective register + the accessibility-first mission; freee does not publish a voice-and-tone
540
+ document that uses those exact words.
541
+ - The "no spring, no overshoot" motion stance (§15) is an editorial derivation from the product category
542
+ (accounting / tax filing) + the four-adjective register; freee's published materials do not include a
543
+ motion spec. A reviewer with access to Vibes component source can verify or refute this stance against
544
+ the actual component library.
545
+ - Personas (§13) are fictional archetypes informed by publicly described freee user segments (SMB owners,
546
+ sole proprietors, 税理士, in-house back-office leads). Names are illustrative and do not refer to real
547
+ people.
548
+ -->
549
+
550
+ ---
551
+
552
+ **Verified:** 2026-05-08 (omd:migrate run 26 — Apple-tier)
553
+ **Tier 1 sources:** freee.co.jp home + /accounting (live DOM via playwright — Primary `#2864f0` Freee Blue two-tier {5px header 31-34px / 8px hero 48px} 4-10×16-20 / 14-16px·**700** strict; Outline `#fff` w/ `#2864f0` text; segment-tint cards `#ebf3ff`).
554
+ **Tier 2 sources:** styles.refero.design / getdesign.md — no record.
555
+ **Tier 2 (Philosophy/founders):** Daisuke Sasaki LinkedIn, DCFmodeling, TechCrunch, VentureBeat, AsiaTechDaily, corp.freee.co.jp/company.
556
+ **Style ref:** `line` (JP East-Asian register, retained).
557
+ **Conflicts unresolved:** Brand blue HEX — live DOM `#2864f0` vs §2 doc `#285ac8` (likely 2024-2025 rebrand drift; both retained, live wins for new UI).
558
+