oh-my-design-cli 1.8.7 → 1.9.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 (247) hide show
  1. package/.claude/hooks/lib/preferences-parser.cjs +1 -0
  2. package/.claude/hooks/lib/preferences-writer.cjs +1 -0
  3. package/.claude/hooks/post-edit-watch.cjs +1 -0
  4. package/.claude/hooks/session-end-foldin.cjs +1 -0
  5. package/.claude/hooks/session-state-loader.cjs +1 -0
  6. package/.claude/hooks/skill-activation.cjs +1 -0
  7. package/.claude/settings.json +10 -1
  8. package/.github/assets/logo-bg.png +0 -0
  9. package/AGENTS.md +20 -1
  10. package/CHANGELOG.md +482 -0
  11. package/MIGRATION.md +103 -0
  12. package/README.ja.md +56 -19
  13. package/README.ko.md +47 -30
  14. package/README.md +48 -30
  15. package/README.zh-TW.md +59 -22
  16. package/agents/AGENT.md +8 -7
  17. package/agents/omd-codex-image.md +1 -1
  18. package/agents/omd-critic.md +6 -7
  19. package/agents/omd-designer-review.md +1 -1
  20. package/agents/omd-final-qa.md +1 -1
  21. package/agents/omd-humanizer.md +38 -0
  22. package/agents/omd-kr-writer.md +3 -4
  23. package/agents/omd-locale-adapter.md +12 -16
  24. package/agents/omd-master.md +24 -19
  25. package/agents/omd-microcopy.md +1 -1
  26. package/agents/omd-orchestrator.md +7 -8
  27. package/agents/omd-slop-auditor.md +31 -0
  28. package/agents/omd-ux-researcher.md +1 -1
  29. package/data/reference-fingerprints.json +1995 -38
  30. package/dist/bin/oh-my-design.js +16 -8
  31. package/dist/bin/oh-my-design.js.map +1 -1
  32. package/dist/chunk-UJIHCEYF.js +99 -0
  33. package/dist/chunk-UJIHCEYF.js.map +1 -0
  34. package/dist/doctor-LDWSFM3I.js +763 -0
  35. package/dist/doctor-LDWSFM3I.js.map +1 -0
  36. package/dist/install-skills-ZZFNJ2II.js +1120 -0
  37. package/dist/install-skills-ZZFNJ2II.js.map +1 -0
  38. package/docs/CLI_QUICKSTART.md +157 -0
  39. package/package.json +25 -4
  40. package/scripts/postinstall.cjs +5 -4
  41. package/skills/claude-design/SKILL.md +38 -14
  42. package/skills/claude-design/references/claude-design-flow.md +11 -11
  43. package/skills/claude-design/references/codebase-analysis.md +5 -4
  44. package/skills/omd-final-qa/SKILL.md +1 -1
  45. package/skills/omd-harness/SKILL.md +51 -50
  46. package/skills/omd-humanize/SKILL.md +116 -0
  47. package/skills/omd-humanize/agents/openai.yaml +4 -0
  48. package/skills/omd-humanize/references/locale-playbooks.md +102 -0
  49. package/skills/omd-humanize/references/sources.md +11 -0
  50. package/skills/omd-init/SKILL.md +18 -12
  51. package/skills/omd-locale-adapter/SKILL.md +58 -91
  52. package/skills/omd-orchestrator/SKILL.md +11 -5
  53. package/skills/omd-reference-capture/SKILL.md +80 -26
  54. package/skills/omd-reference-capture/scripts/PLAYWRIGHT-LICENSE.txt +202 -0
  55. package/skills/omd-reference-capture/scripts/PLAYWRIGHT-NOTICE.txt +5 -0
  56. package/skills/omd-reference-capture/scripts/THIRD_PARTY_NOTICES.md +3 -0
  57. package/skills/omd-reference-capture/scripts/capture-reference-evidence.mjs +159906 -0
  58. package/skills/omd-slop-audit/SKILL.md +110 -0
  59. package/skills/omd-slop-audit/agents/openai.yaml +4 -0
  60. package/skills/omd-slop-audit/references/pattern-catalog.md +96 -0
  61. package/skills/omd-slop-audit/references/sources.md +24 -0
  62. package/web/references/104/DESIGN.md +354 -0
  63. package/web/references/11st/DESIGN.md +197 -316
  64. package/web/references/29cm/DESIGN.md +297 -393
  65. package/web/references/42dot/DESIGN.md +390 -0
  66. package/web/references/8percent/DESIGN.md +438 -0
  67. package/web/references/ably/DESIGN.md +267 -572
  68. package/web/references/acer/DESIGN.md +329 -0
  69. package/web/references/airbnb/DESIGN.md +219 -557
  70. package/web/references/alipay/DESIGN.md +179 -420
  71. package/web/references/apple/DESIGN.md +224 -498
  72. package/web/references/asleep/DESIGN.md +402 -0
  73. package/web/references/au/DESIGN.md +334 -0
  74. package/web/references/autopedia/DESIGN.md +382 -0
  75. package/web/references/aws-cloudscape/DESIGN.md +241 -0
  76. package/web/references/baemin/DESIGN.md +332 -491
  77. package/web/references/banksalad/DESIGN.md +269 -180
  78. package/web/references/barogo/DESIGN.md +416 -0
  79. package/web/references/beusable/DESIGN.md +464 -0
  80. package/web/references/bilibili/DESIGN.md +206 -374
  81. package/web/references/bmw/DESIGN.md +162 -276
  82. package/web/references/brandi/DESIGN.md +184 -325
  83. package/web/references/catchtable/DESIGN.md +219 -264
  84. package/web/references/cgv/DESIGN.md +317 -0
  85. package/web/references/channeltalk/DESIGN.md +210 -336
  86. package/web/references/china-airlines/DESIGN.md +291 -0
  87. package/web/references/cjonstyle/DESIGN.md +453 -0
  88. package/web/references/class101/DESIGN.md +168 -387
  89. package/web/references/classum/DESIGN.md +228 -203
  90. package/web/references/claude/DESIGN.md +242 -479
  91. package/web/references/clay/DESIGN.md +179 -377
  92. package/web/references/clickhouse/DESIGN.md +254 -343
  93. package/web/references/cohere/DESIGN.md +214 -324
  94. package/web/references/coinone/DESIGN.md +199 -179
  95. package/web/references/corca/DESIGN.md +414 -0
  96. package/web/references/coupang/DESIGN.md +205 -475
  97. package/web/references/cursor/DESIGN.md +240 -381
  98. package/web/references/dabang/DESIGN.md +248 -213
  99. package/web/references/dable/DESIGN.md +431 -0
  100. package/web/references/datarize/DESIGN.md +217 -330
  101. package/web/references/dealicious/DESIGN.md +402 -0
  102. package/web/references/drdiary/DESIGN.md +404 -0
  103. package/web/references/elastic/DESIGN.md +238 -0
  104. package/web/references/elevenlabs/DESIGN.md +183 -321
  105. package/web/references/eslite/DESIGN.md +257 -0
  106. package/web/references/evaair/DESIGN.md +338 -0
  107. package/web/references/expo/DESIGN.md +238 -331
  108. package/web/references/familymart-tw/DESIGN.md +254 -0
  109. package/web/references/ferrari/DESIGN.md +160 -377
  110. package/web/references/figma/DESIGN.md +197 -451
  111. package/web/references/fitpet/DESIGN.md +445 -0
  112. package/web/references/flex/DESIGN.md +170 -253
  113. package/web/references/framer/DESIGN.md +197 -340
  114. package/web/references/freee/DESIGN.md +211 -533
  115. package/web/references/friendliai/DESIGN.md +431 -0
  116. package/web/references/frip/DESIGN.md +440 -0
  117. package/web/references/gangnamunni/DESIGN.md +154 -591
  118. package/web/references/gaudiolab/DESIGN.md +414 -0
  119. package/web/references/google/DESIGN.md +290 -398
  120. package/web/references/hashicorp/DESIGN.md +273 -318
  121. package/web/references/heydealer/DESIGN.md +429 -0
  122. package/web/references/humanscape/DESIGN.md +433 -0
  123. package/web/references/hyundai/DESIGN.md +158 -368
  124. package/web/references/hyundaicard/DESIGN.md +171 -121
  125. package/web/references/ibm/DESIGN.md +227 -378
  126. package/web/references/idus/DESIGN.md +450 -0
  127. package/web/references/igaworks/DESIGN.md +437 -0
  128. package/web/references/inflearn/DESIGN.md +221 -366
  129. package/web/references/intuit/DESIGN.md +244 -0
  130. package/web/references/jandi/DESIGN.md +191 -291
  131. package/web/references/jobplanet/DESIGN.md +415 -0
  132. package/web/references/kakao/DESIGN.md +287 -475
  133. package/web/references/kakaobank/DESIGN.md +220 -521
  134. package/web/references/kakaogames/DESIGN.md +220 -0
  135. package/web/references/kakaopay/DESIGN.md +207 -526
  136. package/web/references/karrot/DESIGN.md +227 -251
  137. package/web/references/kb-kookmin/DESIGN.md +308 -0
  138. package/web/references/kbank/DESIGN.md +220 -175
  139. package/web/references/kmong/DESIGN.md +281 -356
  140. package/web/references/krds/DESIGN.md +245 -19
  141. package/web/references/kream/DESIGN.md +224 -359
  142. package/web/references/kurly/DESIGN.md +211 -533
  143. package/web/references/lamborghini/DESIGN.md +198 -360
  144. package/web/references/lguplus/DESIGN.md +259 -0
  145. package/web/references/likelion/DESIGN.md +283 -0
  146. package/web/references/line/DESIGN.md +396 -355
  147. package/web/references/linear.app/DESIGN.md +209 -562
  148. package/web/references/lotteon/DESIGN.md +386 -0
  149. package/web/references/lovable/DESIGN.md +255 -349
  150. package/web/references/makinarocks/DESIGN.md +149 -349
  151. package/web/references/maum-ai/DESIGN.md +423 -0
  152. package/web/references/medibloc/DESIGN.md +425 -0
  153. package/web/references/megabox/DESIGN.md +232 -0
  154. package/web/references/mercari/DESIGN.md +217 -434
  155. package/web/references/microsoft/DESIGN.md +234 -388
  156. package/web/references/mildang/DESIGN.md +411 -0
  157. package/web/references/millie/DESIGN.md +183 -504
  158. package/web/references/minimax/DESIGN.md +264 -322
  159. package/web/references/miricanvas/DESIGN.md +182 -355
  160. package/web/references/miro/DESIGN.md +234 -232
  161. package/web/references/mistral.ai/DESIGN.md +231 -314
  162. package/web/references/mixi/DESIGN.md +234 -0
  163. package/web/references/moin/DESIGN.md +445 -0
  164. package/web/references/mongodb/DESIGN.md +219 -316
  165. package/web/references/musinsa/DESIGN.md +184 -510
  166. package/web/references/mynavi/DESIGN.md +242 -0
  167. package/web/references/myrealtrip/DESIGN.md +169 -406
  168. package/web/references/naver/DESIGN.md +328 -499
  169. package/web/references/naverwebtoon/DESIGN.md +172 -395
  170. package/web/references/nhn/DESIGN.md +169 -346
  171. package/web/references/nhncloud/DESIGN.md +185 -123
  172. package/web/references/notion/DESIGN.md +271 -475
  173. package/web/references/nrise/DESIGN.md +417 -0
  174. package/web/references/ohouse/DESIGN.md +210 -549
  175. package/web/references/oliveyoung/DESIGN.md +217 -326
  176. package/web/references/ollama/DESIGN.md +241 -308
  177. package/web/references/onestore/DESIGN.md +248 -0
  178. package/web/references/palantir/DESIGN.md +256 -0
  179. package/web/references/panasonic/DESIGN.md +276 -0
  180. package/web/references/patternfly/DESIGN.md +259 -0
  181. package/web/references/payhere/DESIGN.md +438 -0
  182. package/web/references/pega/DESIGN.md +262 -0
  183. package/web/references/peoplefund/DESIGN.md +431 -0
  184. package/web/references/petfriends/DESIGN.md +428 -0
  185. package/web/references/pinkfong/DESIGN.md +199 -367
  186. package/web/references/pinterest/DESIGN.md +258 -308
  187. package/web/references/poya/DESIGN.md +286 -0
  188. package/web/references/pozalabs/DESIGN.md +438 -0
  189. package/web/references/protopie/DESIGN.md +419 -0
  190. package/web/references/qraft/DESIGN.md +448 -0
  191. package/web/references/quotabook/DESIGN.md +449 -0
  192. package/web/references/recruit/DESIGN.md +247 -0
  193. package/web/references/remember/DESIGN.md +202 -396
  194. package/web/references/resend/DESIGN.md +274 -348
  195. package/web/references/sakura-internet/DESIGN.md +269 -0
  196. package/web/references/samsung/DESIGN.md +157 -359
  197. package/web/references/sandoll/DESIGN.md +445 -0
  198. package/web/references/sanity/DESIGN.md +241 -375
  199. package/web/references/scatterlab/DESIGN.md +412 -0
  200. package/web/references/selectstar/DESIGN.md +439 -0
  201. package/web/references/servicenow/DESIGN.md +289 -0
  202. package/web/references/shinhanbank/DESIGN.md +161 -341
  203. package/web/references/shinhancard/DESIGN.md +208 -319
  204. package/web/references/sionic/DESIGN.md +454 -0
  205. package/web/references/sktelecom/DESIGN.md +310 -0
  206. package/web/references/socar/DESIGN.md +125 -32
  207. package/web/references/softbank/DESIGN.md +231 -0
  208. package/web/references/sony/DESIGN.md +234 -0
  209. package/web/references/soop/DESIGN.md +261 -0
  210. package/web/references/spacex/DESIGN.md +184 -323
  211. package/web/references/spotify/DESIGN.md +253 -394
  212. package/web/references/squeezebits/DESIGN.md +441 -0
  213. package/web/references/stayfolio/DESIGN.md +422 -0
  214. package/web/references/stripe/DESIGN.md +212 -491
  215. package/web/references/supabase/DESIGN.md +244 -316
  216. package/web/references/tabling/DESIGN.md +415 -0
  217. package/web/references/taishinbank/DESIGN.md +243 -0
  218. package/web/references/teamlab/DESIGN.md +240 -0
  219. package/web/references/teamsparta/DESIGN.md +472 -0
  220. package/web/references/tellingme/DESIGN.md +392 -0
  221. package/web/references/tesla/DESIGN.md +244 -427
  222. package/web/references/thsr/DESIGN.md +284 -0
  223. package/web/references/thumbtack/DESIGN.md +302 -0
  224. package/web/references/together.ai/DESIGN.md +257 -304
  225. package/web/references/toss/DESIGN.md +251 -593
  226. package/web/references/toss-securities/DESIGN.md +255 -178
  227. package/web/references/tossbank/DESIGN.md +195 -491
  228. package/web/references/toyota/DESIGN.md +238 -0
  229. package/web/references/tving/DESIGN.md +197 -245
  230. package/web/references/typed/DESIGN.md +413 -0
  231. package/web/references/uber/DESIGN.md +256 -333
  232. package/web/references/udn/DESIGN.md +250 -0
  233. package/web/references/upbit/DESIGN.md +145 -256
  234. package/web/references/upstage/DESIGN.md +211 -204
  235. package/web/references/uswds/DESIGN.md +287 -0
  236. package/web/references/vercel/DESIGN.md +236 -440
  237. package/web/references/wanted/DESIGN.md +215 -487
  238. package/web/references/wise/DESIGN.md +223 -231
  239. package/web/references/wisetracker/DESIGN.md +462 -0
  240. package/web/references/wooribank/DESIGN.md +245 -0
  241. package/web/references/yanolja/DESIGN.md +250 -419
  242. package/web/references/yeogiotte/DESIGN.md +235 -418
  243. package/web/references/zapier/DESIGN.md +256 -377
  244. package/web/references/zendesk/DESIGN.md +288 -0
  245. package/web/references/zigzag/DESIGN.md +200 -621
  246. package/dist/install-skills-7UUDOLG2.js +0 -734
  247. package/dist/install-skills-7UUDOLG2.js.map +0 -1
@@ -4,617 +4,295 @@ name: freee
4
4
  country: JP
5
5
  category: productivity
6
6
  homepage: "https://www.freee.co.jp"
7
- primary_color: "#005bac"
7
+ primary_color: "#2864f0"
8
8
  logo:
9
9
  type: github
10
10
  slug: freee
11
- verified: "2026-05-15"
11
+ verified: "2026-07-13"
12
12
  omd: "0.1"
13
13
  ds:
14
14
  name: Vibes
15
15
  url: "https://vibes.freee.co.jp"
16
16
  type: system
17
- description: freee's open-source design system with accessibility-focused components.
17
+ description: Official freee design system, published with accessibility-focused frontend-development materials.
18
+ verification_v2:
19
+ schema: 2
20
+ checked: "2026-07-13"
21
+ surfaces:
22
+ - { id: home, kind: public-marketing, url: "https://www.freee.co.jp/", inspected: "2026-07-12" }
23
+ - { id: pricing, kind: public-marketing, url: "https://www.freee.co.jp/pricing/", inspected: "2026-07-12" }
24
+ - { id: products, kind: public-marketing, url: "https://www.freee.co.jp/products/", inspected: "2026-07-12" }
25
+ sources:
26
+ - { id: home-live, kind: product-surface, url: "https://www.freee.co.jp/", captured: "2026-07-12" }
27
+ - { id: pricing-live, kind: product-surface, url: "https://www.freee.co.jp/pricing/", captured: "2026-07-12" }
28
+ - { id: products-live, kind: product-surface, url: "https://www.freee.co.jp/products/", captured: "2026-07-12" }
29
+ - { id: vibes-repo, kind: official-doc, url: "https://github.com/freee/vibes", captured: "2026-07-13" }
30
+ - { id: vibes-release, kind: official-doc, url: "https://corp.freee.co.jp/news/20231219_design.html", captured: "2026-07-13" }
31
+ - { id: mission, kind: official-doc, url: "https://corp.freee.co.jp/mission/", captured: "2026-07-13" }
32
+ - { id: company, kind: official-doc, url: "https://corp.freee.co.jp/company/", captured: "2026-07-13" }
33
+ conflicts: []
34
+ claims:
35
+ "tokens.colors.primary": &live { surface_id: home, source_id: home-live, method: computed-style, captured: "2026-07-12" }
36
+ "tokens.colors.primary-hover": *live
37
+ "tokens.colors.primary-pressed": *live
38
+ "tokens.colors.canvas": *live
39
+ "tokens.colors.surface-tint": *live
40
+ "tokens.colors.text": *live
41
+ "tokens.colors.text-muted": *live
42
+ "tokens.colors.border": *live
43
+ "tokens.typography.family.ui": *live
44
+ "tokens.typography.body.size": *live
45
+ "tokens.typography.body.weight": *live
46
+ "tokens.typography.body.lineHeight": *live
47
+ "tokens.typography.body.use": *live
48
+ "tokens.typography.action.size": *live
49
+ "tokens.typography.action.weight": *live
50
+ "tokens.typography.action.lineHeight": *live
51
+ "tokens.typography.action.use": *live
52
+ "tokens.typography.heading.size": *live
53
+ "tokens.typography.heading.weight": *live
54
+ "tokens.typography.heading.lineHeight": *live
55
+ "tokens.typography.heading.use": *live
56
+ "tokens.spacing.header-y": *live
57
+ "tokens.spacing.header-x": *live
58
+ "tokens.spacing.action-y": *live
59
+ "tokens.spacing.action-x": *live
60
+ "tokens.rounded.header-action": *live
61
+ "tokens.rounded.action": *live
62
+ "tokens.components.header-primary.type": *live
63
+ "tokens.components.header-primary.bg": *live
64
+ "tokens.components.header-primary.fg": *live
65
+ "tokens.components.header-primary.radius": *live
66
+ "tokens.components.header-primary.padding": *live
67
+ "tokens.components.header-primary.font": *live
68
+ "tokens.components.header-primary.use": *live
69
+ "tokens.components.header-primary.hover": *live
70
+ "tokens.components.primary-action.type": *live
71
+ "tokens.components.primary-action.bg": *live
72
+ "tokens.components.primary-action.fg": *live
73
+ "tokens.components.primary-action.radius": *live
74
+ "tokens.components.primary-action.padding": *live
75
+ "tokens.components.primary-action.font": *live
76
+ "tokens.components.primary-action.use": *live
77
+ "tokens.components.primary-action.hover": *live
78
+ "tokens.components.segment-card.type": *live
79
+ "tokens.components.segment-card.bg": *live
80
+ "tokens.components.segment-card.radius": *live
81
+ "tokens.components.segment-card.use": *live
18
82
  tokens:
19
- source: prose-derived
20
- extracted: "2026-06-09"
83
+ source: live-extract
84
+ extracted: "2026-07-12"
85
+ components_harvested: true
21
86
  colors:
22
- primary: "#285ac8"
23
- primary-hover: "#3264dc"
24
- primary-active: "#1e46aa"
25
- accent: "#73a5ff"
87
+ primary: "#2864f0"
88
+ primary-hover: "#2863ef"
89
+ primary-pressed: "#245ad9"
26
90
  canvas: "#ffffff"
27
- bg-tint: "#ebf3ff"
28
- surface-subtle: "#f0eded"
29
- column: "#f7f5f5"
30
- border: "#e9e7e7"
91
+ surface-tint: "#ebf3ff"
31
92
  text: "#323232"
32
- text-muted: "#6e6b6b"
33
- text-caption: "#8c8989"
34
- alert: "#dc1e32"
35
- alert-bg: "#fad2d7"
36
- notice: "#be8c14"
37
- notice-bg: "#fff0d2"
38
- success: "#006e2d"
39
- success-bg: "#cdebd7"
40
- info-bg: "#dce8ff"
93
+ text-muted: "#595959"
94
+ border: "#e1dcdc"
41
95
  typography:
42
- family: { sans: "-apple-system", mono: "-apple-system" }
43
- headline1: { size: 24, weight: 700, lineHeight: 1.5, use: "Headline 1, dashboard titles" }
44
- headline2: { size: 16, weight: 700, lineHeight: 1.5, use: "Headline 2, section headers" }
45
- headline3: { size: 14, weight: 700, lineHeight: 1.5, use: "Headline 3, subsection" }
46
- body: { size: 14, weight: 400, lineHeight: 1.5, use: "Normal body text" }
47
- caption: { size: 12, weight: 400, lineHeight: 1.5, use: "Captions, badge labels" }
48
- icon: { size: 10, weight: 400, lineHeight: 1.5, use: "Smallest icon font" }
49
- spacing: { xs: 4, sm: 8, base: 16, lg: 24, xl: 32, xxl: 48 }
50
- rounded: { sm: 4, md: 4, lg: 4, full: 9999 }
51
- shadow:
52
- card: "0 0 1rem rgba(0,0,0,0.1), 0 0.125rem 0.25rem rgba(0,0,0,0.2)"
53
- floating: "0 0 1.5rem rgba(0,0,0,0.1), 0 0.25rem 0.5rem rgba(0,0,0,0.2)"
54
- popup: "0 0 2rem rgba(0,0,0,0.1), 0 0.375rem 0.75rem rgba(0,0,0,0.2)"
96
+ family: { ui: "Noto Sans JP" }
97
+ body: { size: 14, weight: 400, lineHeight: 1.5, use: "Observed public-site body text." }
98
+ action: { size: 16, weight: 700, lineHeight: 1.5, use: "Observed public primary and outline action." }
99
+ heading: { size: 40, weight: 700, lineHeight: 1.5, use: "Observed public-site heading." }
100
+ spacing: { header-y: 4, header-x: 20, action-y: 10, action-x: 16 }
101
+ rounded: { header-action: 5, action: 8 }
55
102
  components:
56
- button-primary: { type: button, bg: "#285ac8", fg: "#ffffff", radius: "4px", padding: "8px 16px", font: "14px / 500", use: "Primary CTA, 36px height; hover #3264dc, active #1e46aa" }
57
- button-accent: { type: button, bg: "#73a5ff", fg: "#ffffff", radius: "4px", padding: "8px 16px", use: "Hover / secondary brand action" }
58
- input-default: { type: input, bg: "#ffffff", fg: "#323232", radius: "4px", padding: "8px 12px", use: "Form input, 36px height; focus border #285ac8, error #dc1e32" }
59
- card-panel: { type: card, bg: "#ffffff", radius: "4px", padding: "16px", use: "Standard panel, 1px #e9e7e7 border" }
60
- card-subtle: { type: card, bg: "#f7f5f5", radius: "4px", padding: "24px", use: "Subtle differentiation panel" }
61
- badge-success: { type: badge, bg: "#cdebd7", fg: "#006e2d", radius: "4px", padding: "2px 8px", font: "12px / 500", use: "Success / confirmation status" }
62
- badge-alert: { type: badge, bg: "#fad2d7", fg: "#dc1e32", radius: "4px", padding: "2px 8px", font: "12px / 500", use: "Error / destructive status" }
63
- badge-notice: { type: badge, bg: "#fff0d2", fg: "#be8c14", radius: "4px", padding: "2px 8px", font: "12px / 500", use: "Warning / notice status" }
64
- badge-info: { type: badge, bg: "#dce8ff", fg: "#285ac8", radius: "4px", padding: "2px 8px", font: "12px / 500", use: "Informational status" }
65
- components_harvested: true
103
+ header-primary: { type: button, bg: "#2864f0", fg: "#ffffff", radius: "5px", padding: "4px 20px", font: "14px / 700 / Noto Sans JP", hover: "#2761e8", use: "Public header sign-up action only." }
104
+ primary-action: { type: button, bg: "#2864f0", fg: "#ffffff", radius: "8px", padding: "10px 16px", font: "16px / 700 / Noto Sans JP", hover: "#2863ee", use: "Public pricing-page primary action only." }
105
+ segment-card: { type: card, bg: "#ebf3ff", radius: "8px", use: "Public home segment-selection card only." }
66
106
  ---
67
107
 
68
108
  # Design System Inspiration of freee
69
109
 
70
110
  ## 1. Visual Theme & Atmosphere
71
111
 
72
- 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.
73
-
74
- 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.
112
+ freee develops an integrated management platform for Japanese small businesses: accounting, HR, approvals, and connected business data are framed as a way to let owners manage freely rather than spend their time on back-office work. The company was established in July 2012 and its public mission is 「スモールビジネスを、世界の主役に。」 (“Empower Small Businesses to Take Center Stage”). On the current public freee pages supplied for this review, that purpose is expressed with a clean white field, a vivid practical blue, high-contrast Japanese text, and compact rounded calls to action. The visual system reads as calm and approachable without claiming that these marketing pages are the authenticated accounting, payroll, or documentation product UI. [Mission](https://corp.freee.co.jp/mission/) · [Company profile](https://corp.freee.co.jp/company/)
75
113
 
76
- 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).
114
+ freee also maintains **Vibes**, an official open-source design system. Vibes is valuable design and accessibility context, but the current public-site token set below comes only from the supplied live computed capture. Historic Vibes values such as `#285ac8` are not substituted for the current live `#2864f0`, and no component is generalized from the website into an unobserved product surface. [Official Vibes announcement](https://corp.freee.co.jp/news/20231219_design.html) · [Vibes repository](https://github.com/freee/vibes)
77
115
 
78
- **Key Characteristics:**
79
- - **Open-source design system** ([freee/vibes](https://github.com/freee/vibes)) with three-tier token architecture (scale → semantic → component)
80
- - Enterprise blue brand: `#285ac8` primary (`$vbColorsP07`), `#73a5ff` accent (`$vbColorsP04`)
81
- - 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)
82
- - Each hue scale has 5-10 calibrated shades (P01 lightest → P10 darkest)
83
- - 4dp baseline spacing scale: `xs 4dp / s 8dp / basic 16dp / large 24dp / xl 32dp / xxl 48dp`
84
- - Tight 5-step type scale: `10 / 12 / 14 / 16 / 24dp` — no display extremes, no middle gaps
85
- - Form-control heights as design tokens: `small 24dp / basic 36dp / large 48dp`
86
- - Container max-width `1120dp` (`70rem`) — wider than Bootstrap defaults but narrower than Mercari
87
- - Three explicit shadow recipes: card, floating, popup (graduated weights)
88
- - Z-index hierarchy with semantic names: overlay 100 → form actions 200 → floating 500 → full-screen 700 → modal 1000 → popup 2000 → max
89
- - Japanese-first font stack with Hiragino Kaku Gothic ProN as the primary CJK fallback
116
+ - A public-site primary blue with white action text
117
+ - White canvas, charcoal body copy, and muted gray navigation
118
+ - 5px compact header controls and 8px page actions/cards
119
+ - Loaded Noto Sans JP across the supplied public routes
90
120
 
91
121
  ## 2. Color Palette & Roles
92
122
 
93
- All values extracted from `stylesheets/lv0/_colors.scss` in the open-source [freee/vibes](https://github.com/freee/vibes) repo (vibes_2021).
94
-
95
- ### Primary Blue (`$vbColorsP01–P10`)
96
- - `#ebf3ff` (P01) lightest tint, page background hint
97
- - `#dce8ff` (P02) light surface, badge bg
98
- - `#aac8ff` (P03) light accent
99
- - `#73a5ff` (P04) **`$vbAccentColor`** (accent, hover for primary)
100
- - `#2864f0` (P05) bright primary
101
- - `#3264dc` (P06) primary mid
102
- - `#285ac8` (P07) **`$vbPrimaryColor`** (primary actions, links, brand)
103
- - `#1e46aa` (P08) — primary dark
104
- - `#23418c` (P09) — primary darker
105
- - `#143278` (P10) — primary darkest
106
-
107
- ### Secondary / Neutral (`$vbColorsS01–S10`)
108
- - `#f7f5f5` (S01) — `$vbColumnColor` (column / table bg)
109
- - `#f0eded` (S02) — `$vbBaseColor1` (subtle surface 1)
110
- - `#e9e7e7` (S03) — `$vbBaseColor2` (subtle surface 2)
111
- - `#e1dcdc` (S04)
112
- - `#d7d2d2` (S05)
113
- - `#bebaba` (S06)
114
- - `#aaa7a7` (S07)
115
- - `#8c8989` (S08) — `$vbBaseColor3` (mid neutral, captions)
116
- - `#6e6b6b` (S09) — `$vbBurntColor` (text-burnt)
117
- - `#464343` (S10) — darkest neutral
118
-
119
- ### Status (Red, Orange, Yellow scales)
120
- - **Red** (`RE02 #fad2d7`, `RE04 #f07882`, `RE05 #dc1e32`, `RE07 #a51428`, `RE10 #6e0f19`)
121
- - `$vbAlertColor: $vbColorsRE05` (`#dc1e32`) — alerts, errors, destructive actions
122
- - **Orange** (`OR02 #ffe1d2`, `OR04 #ffaa78`, `OR05 #fa6414`, `OR07 #be4b0f`, `OR10 #7d320a`)
123
- - **Yellow** (`YE02 #fff0d2`, `YE04 #ffd278`, `YE05 #ffb91e`, `YE07 #be8c14`, `YE10 #825a0f`)
124
- - `$vbNoticeColor: $vbColorsYE07` (`#be8c14`) — warnings, notices
125
-
126
- ### Yellow-Green / Green / Blue-Green (success, growth)
127
- - **Yellow-Green** (`YG02 #e6f0d2`, `YG04 #b4dc7d`, `YG05 #82c31e`, `YG07 #50961e`, `YG10 #3c5f14`)
128
- - **Green** (`GR02 #cdebd7`, `GR04 #64be8c`, `GR05 #00963c`, `GR07 #006e2d`, `GR10 #004b1e`) — success
129
- - **Blue-Green / Teal** (`BG02 #cdf0f0`, `BG04 #64d2d2`, `BG05 #00b9b9`, `BG07 #008c8c`, `BG10 #146464`)
130
-
131
- ### Purple
132
- - `PU02 #e6d7fa`, `PU04 #b482f0`, `PU05 #733ce6`, `PU07 #5a2daa`, `PU10 #3c1e73`
133
-
134
- ### Pure Gray (`$vbColorsGY01–GY10`)
135
- - `#fbfbfb` (GY01) — page bg highlight
136
- - `#dcdcdc` (GY02)
137
- - `#a0a0a0` (GY04)
138
- - `#5a5a5a` (GY05)
139
- - `#323232` (GY07) — **`$vbBlackColor`** (default text color)
140
- - `#1e1e1e` (GY10) — darkest gray
141
-
142
- ### Semantic Aliases (the design contracts)
143
- | Semantic | Value | Use |
144
- |---|---|---|
145
- | `$vbPrimaryColor` | `$vbColorsP07` (`#285ac8`) | Primary CTAs, brand actions |
146
- | `$vbAccentColor` | `$vbColorsP04` (`#73a5ff`) | Accent hover, secondary brand |
147
- | `$vbLinkColor` | `$vbColorsP07` (`#285ac8`) | Hyperlinks (matches primary) |
148
- | `$vbColumnColor` | `$vbColorsS01` (`#f7f5f5`) | Table column bg |
149
- | `$vbBaseColor1` | `$vbColorsS02` (`#f0eded`) | Subtle surface 1 |
150
- | `$vbBaseColor2` | `$vbColorsS03` (`#e9e7e7`) | Subtle surface 2 |
151
- | `$vbBaseColor3` | `$vbColorsS08` (`#8c8989`) | Mid neutral text |
152
- | `$vbBurntColor` | `$vbColorsS09` (`#6e6b6b`) | Burnt-out text (de-emphasized) |
153
- | `$vbBlackColor` | `$vbColorsGY07` (`#323232`) | Default text color |
154
- | `$vbAlertColor` | `$vbColorsRE05` (`#dc1e32`) | Alerts, errors, destructive |
155
- | `$vbNoticeColor` | `$vbColorsYE07` (`#be8c14`) | Warnings, notices |
156
- | `$vbBackgroundColor` | `$vbColorsP01` (`#ebf3ff`) | Page tint background |
157
-
158
- ### Scrim / Overlay
159
- - `$vbScrimColor: rgba(0, 0, 0, 0.5)` — modal backdrop
160
- - `$vbThinScrimColor: rgba(0, 0, 0, 0.12)` — light overlay (e.g., disabled state)
123
+ ### Observed public-site roles
124
+
125
+ - **Primary** (`#2864f0`): repeated public header and page-action fill, text, and border color across home, pricing, and products.
126
+ - **Primary hover snapshot** (`#2863ef`): pseudo-state snapshot on the pricing/page action capture; not a motion contract.
127
+ - **Primary pressed snapshot** (`#245ad9`): pseudo-state snapshot on a pricing primary action; not a universal state token.
128
+ - **Canvas** (`#ffffff`): repeated public-page action and surface background.
129
+ - **Tint surface** (`#ebf3ff`): home segment-selection card background.
130
+ - **Text** (`#323232`): observed home segment-card text and repeated public text.
131
+ - **Muted text** (`#595959`): repeated public navigation and footer text.
132
+ - **Border** (`#e1dcdc`): observed products-page category-card border.
133
+
134
+ ### Historical system boundary
135
+
136
+ The official Vibes repository contains a broader, versioned component and token system under an Apache-2.0 licence. It is a historical/design-system source, not evidence that its legacy palette or status colors are the current values on the three public pages in this capture. Values not computed on those pages are omitted from machine tokens rather than inferred.
161
137
 
162
138
  ## 3. Typography Rules
163
139
 
164
- ### Font Stack
165
- ```scss
166
- $vbFontFamily: '-apple-system', BlinkMacSystemFont, 'Helvetica Neue',
167
- 'ヒラギノ角ゴ ProN', Hiragino Kaku Gothic ProN, Arial, 'メイリオ', Meiryo,
168
- sans-serif;
169
- ```
170
-
171
- `-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.
172
-
173
- ### Type Scale (verified from `_size.scss`)
174
- | Token | Size | Use |
175
- |---|---|---|
176
- | `$vbFontSize0625` | `0.625rem` (10dp) | Smallest icon font |
177
- | `$vbFontSize0750` | `0.75rem` (12dp) | Caption |
178
- | `$vbFontSize0875` | `0.875rem` (14dp) | Normal body, Headline 3 |
179
- | `$vbFontSize1000` | `1rem` (16dp) | Headline 2 |
180
- | `$vbFontSize1500` | `1.5rem` (24dp) | Headline 1 |
181
-
182
- ### Semantic Typography Tokens
183
- | Token | Value |
184
- |---|---|
185
- | `$vbCaptionFontSize` | `0.75rem` (12dp) |
186
- | `$vbNormalFontSize` | `0.875rem` (14dp) |
187
- | `$vbHeadline3FontSize` | `0.875rem` (14dp) |
188
- | `$vbHeadline2FontSize` | `1rem` (16dp) |
189
- | `$vbHeadline1FontSize` | `1.5rem` (24dp) |
190
-
191
- ### Mobile Typography (steps down for tablets/phones)
192
- - `$vbMobileHeadline1FontSize: 16dp` (was 24dp)
193
- - `$vbMobileHeadline2FontSize: 14dp` (was 16dp)
194
- - `$vbMobileHeadline3FontSize: 14dp` (unchanged)
195
-
196
- ### Line Height
197
- - `$vbLineHeight: 1.5` — universal default (generous for CJK readability)
198
-
199
- ### Conventions
200
- - **No display sizes above 24dp** — freee's voice is utilitarian SaaS, not editorial
201
- - **Body and Headline 3 share 14dp** — visual hierarchy comes from weight + color, not size
202
- - **Mobile compresses everything to 14-16dp** — preserves 1.5 line-height for cramped screens
203
- - **Brand wordmark uses Noto Sans CJK JP Medium** — only place a custom font loads
140
+ ### Evidence classes
141
+
142
+ - **Live computed public-site use:** `Noto Sans JP` is the only promoted UI-family token. It has 1,371 visible computed uses across the three routes, a high-confidence loaded FontFaceSet match, and freee-hosted Regular, Medium, and Bold OTF source URLs.
143
+ - **Official design-system context:** Vibes is an official freee design system. Its repository is Apache-2.0 licensed and documents a reusable system; that does not make its historical font stack a current public-site token.
144
+ - **Declared-only:** Cherry Bomb One, Coiny, `myfont`, and swiper-icons have `@font-face` declarations in the raw bundle but zero visible observed uses. They are not UI-family tokens.
145
+ - **Unobserved domains:** no authenticated product screen or documentation chrome was included in the collector evidence. This reference makes no claim about their font use.
146
+
147
+ ### Measured public hierarchy
148
+
149
+ | Role | Family | Size | Weight | Line height | Evidence boundary |
150
+ |---|---|---:|---:|---:|---|
151
+ | Body | Noto Sans JP | 14px | 400 | 21px | Repeated across home, pricing, and products |
152
+ | Public action | Noto Sans JP | 16px | 700 | 24px | Pricing `.c-btn-primary` and outline action |
153
+ | Public heading | Noto Sans JP | 40px | 700 | 60px | Repeated captured h2 samples |
154
+ | Compact header action | Noto Sans JP | 14px | 700 | 21px | Header `.c-btn-primary` |
155
+
156
+ Do not render a declared Google font, icon face, or a system fallback as though it were Noto Sans JP.
204
157
 
205
158
  ## 4. Component Stylings
206
159
 
207
- ### Buttons
160
+ Every component below is a public-site observation with preserved selector and surface provenance. The bundle reports three pseudo-state kinds but `interactionCount: 0`; hover, pressed, and focus snapshots are visual samples, not proof of transition timing, keyboard behavior, or a complete state model.
208
161
 
209
- **Primary**
210
- - Background: `#285ac8` (`$vbPrimaryColor`)
211
- - Text: `#ffffff`
212
- - Radius: 4px
213
- - Padding: 8px 16px (basic) — small `4px 16px`, large `12px 24px`
214
- - Height: 36px (`$vbFormControlHeight`)
215
- - Font: 14px / 500-700
216
- - Disabled: overlay `rgba(0,0,0,0.12)` (`$vbThinScrimColor`)
217
- - Use: Primary CTAs, brand actions
218
-
219
- **Small**
220
- - Background: `#285ac8`
221
- - Text: `#ffffff`
222
- - Radius: 4px
223
- - Padding: 4px 16px
224
- - Height: 24px (`$vbFormControlSmallHeight`)
225
- - Font: 14px / 500
226
- - Use: Compact buttons in dense tables
227
-
228
- **Large**
229
- - Background: `#285ac8`
162
+ ### Header action
163
+
164
+ **Primary observed default**
165
+ - Background: `#2864f0`
230
166
  - Text: `#ffffff`
231
- - Radius: 4px
232
- - Padding: 12px 24px
233
- - Height: 48px (`$vbFormControlLargeHeight`)
234
- - Font: 16px / 700
235
- - Use: Hero CTAs, mobile-friendly forms
236
-
237
- **Accent**
238
- - Background: `#73a5ff` (`$vbAccentColor`)
167
+ - Border: `1px solid #2864f0`
168
+ - Radius: `5px`
169
+ - Padding: `4px 20px`
170
+ - Font: `14px / 700 / Noto Sans JP`
171
+ - Use: public header sign-up action at `home::[data-omd-capture="8"]`; 31px rendered height.
172
+ - Hover: `#2761e8` background at `home::[data-omd-capture="8"]::state-hover`.
173
+ - Pressed: `#2358d4` background at `home::[data-omd-capture="8"]::state-pressed`.
174
+ - Focus: `#2256ce` background at `home::[data-omd-capture="8"]::state-focus`.
175
+
176
+ ### Page actions
177
+
178
+ **Primary — observed default**
179
+ - Background: `#2864f0`
239
180
  - Text: `#ffffff`
240
- - Radius: 4px
241
- - Padding: 8px 16px
242
- - Use: Hover/secondary brand actions
181
+ - Border: `2px solid #2864f0`
182
+ - Radius: `8px`
183
+ - Padding: `10px 16px`
184
+ - Font: `16px / 700 / Noto Sans JP`
185
+ - Use: pricing-page action at `pricing::[data-omd-capture="17"]`; 48px rendered height.
186
+ - Hover: `#2863ee` background at `pricing::[data-omd-capture="17"]::state-hover`.
187
+ - Pressed: `#2762ec` background at `pricing::[data-omd-capture="17"]::state-pressed`.
188
+ - Focus: `#2763ed` background with `#2761e8` border at `pricing::[data-omd-capture="17"]::state-focus`.
189
+
190
+ **Outline — observed default**
191
+ - Background: `#ffffff`
192
+ - Text: `#2864f0`
193
+ - Border: `2px solid #2864f0`
194
+ - Radius: `8px`
195
+ - Padding: `10px 16px`
196
+ - Font: `16px / 700 / Noto Sans JP`
197
+ - Use: pricing-page secondary action at `pricing::[data-omd-capture="70"]`; 48px rendered height, default state only.
243
198
 
244
- ### Inputs
199
+ ### Segment-selection card
245
200
 
246
- **Default**
247
- - Background: `#ffffff`
248
- - Text: `#323232` (`$vbBlackColor`)
249
- - Border: 1px solid `#8c8989` (`$vbBaseColor3`)
250
- - Radius: 4px
251
- - Padding: 8px 12px
252
- - Height: 36px (`$vbFormControlHeight`)
253
- - Focus: border `#285ac8` (`$vbPrimaryColor`)
254
- - Error: border `#dc1e32` (`$vbAlertColor`); helper text in same red
255
- - Use: Standard form input
256
-
257
- **Small**
258
- - Background: `#ffffff`
259
- - Border: 1px solid `#8c8989`
260
- - Radius: 4px
261
- - Height: 24px
262
- - Use: Compact inputs, dense tables
201
+ **Tinted — observed default**
202
+ - Background: `#ebf3ff`
203
+ - Text: `#323232`
204
+ - Radius: `8px`
205
+ - Font: `16px / 400 / Noto Sans JP`
206
+ - Use: home segment-selection card at `home::div.fr-3ezzk7z2_kv_card`; 103px rendered height, default state only.
263
207
 
264
- ### Cards
208
+ ### Product-category card
265
209
 
266
- **Standard Panel**
210
+ **Outline — observed default**
267
211
  - Background: `#ffffff`
268
- - Border: 1px solid `#e9e7e7` (`$vbBaseColor2`)
269
- - Radius: 4px
270
- - Padding: 16px (`$vbBasicSize`)
271
- - Use: Default card / panel surface
272
-
273
- **Subtle Panel**
274
- - Background: `#f7f5f5` (`$vbColumnColor`)
275
- - Border: 1px solid `#e9e7e7`
276
- - Radius: 4px
277
- - Padding: 24px (`$vbLargeSize`)
278
- - Use: Subtle differentiation panel
279
-
280
- ### Badges
281
-
282
- **Success**
283
- - Background: `#cdebd7` (GR02)
284
- - Text: `#006e2d` (GR07)
285
- - Radius: 4px
286
- - Padding: 2px 8px
287
- - Font: 12px / 500
288
- - Use: Success / confirmation status
289
-
290
- **Alert**
291
- - Background: `#fad2d7` (RE02)
292
- - Text: `#dc1e32` (RE05 / `$vbAlertColor`)
293
- - Radius: 4px
294
- - Padding: 2px 8px
295
- - Font: 12px / 500
296
- - Use: Errors, destructive states
297
-
298
- **Notice**
299
- - Background: `#fff0d2` (YE02)
300
- - Text: `#be8c14` (YE07 / `$vbNoticeColor`)
301
- - Radius: 4px
302
- - Padding: 2px 8px
303
- - Font: 12px / 500
304
- - Use: Warnings, notices
305
-
306
- **Info**
307
- - Background: `#dce8ff` (P02)
308
- - Text: `#285ac8` (P07)
309
- - Radius: 4px
310
- - Padding: 2px 8px
311
- - Font: 12px / 500
312
- - Use: Informational status
313
-
314
- ### Tables
315
- - Column bg alternates: white / `$vbColumnColor` (`#f7f5f5`)
316
- - Row dividers: `1px solid $vbBaseColor2` (`#e9e7e7`)
317
- - Header: bold weight, dark text on white
318
- - Compact and dense — freee is enterprise productivity software
319
-
320
- ### Navigation
321
- - Primary nav: white bg with subtle bottom border, `$vbPrimaryColor` for active link
322
- - Secondary nav: tab-style with underline indicator in `$vbPrimaryColor`
212
+ - Text: `#2864f0`
213
+ - Border: `1px solid #e1dcdc`
214
+ - Radius: `8px`
215
+ - Padding: `10px 14px`
216
+ - Font: `16px / 700 / Noto Sans JP`
217
+ - Use: products category link at `products::[data-omd-capture="37"]`; 186px rendered height, default state only.
323
218
 
324
- ## 5. Layout Principles
325
-
326
- ### Spacing Scale (verified from `_size.scss`)
327
- | Token | Value | dp |
328
- |---|---|---|
329
- | `$vbMinimum` | `1px` | 1px hairline |
330
- | `$vbXSmallSize` | `0.25rem` | 4dp |
331
- | `$vbSmallSize` | `0.5rem` | 8dp |
332
- | `$vbBasicSize` | `1rem` | 16dp |
333
- | `$vbLargeSize` | `1.5rem` | 24dp |
334
- | `$vbXLargeSize` | `2rem` | 32dp |
335
- | `$vbXXLargeSize` | `3rem` | 48dp |
219
+ No authenticated-app fields, data tables, status badges, dialogs, errors, disabled states, responsive breakpoints, or documentation components are specified: none had the required public selector/surface/state provenance in the supplied evidence.
336
220
 
337
- ### Container
338
- - `$vbContainerSize: 70rem` (1120dp) — page max-width
339
- - Mobile breakpoint: `$vbMobileBoundaryWidth: 48rem` (768dp)
221
+ ## 5. Layout Principles
340
222
 
341
- ### Density
342
- 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.
223
+ - The observed public header action uses `4px 20px` padding; the larger public actions use `10px 16px`.
224
+ - The capture shows local 5px and 8px geometry, not a universal radius scale.
225
+ - Only desktop public routes were supplied. No application layout grid, mobile breakpoint, or product workflow density is asserted.
343
226
 
344
227
  ## 6. Depth & Elevation
345
228
 
346
- ### Three explicit shadow recipes (from `_colors.scss`)
347
- - **Card** — `$vbCardShadow`:
348
- ```
349
- 0 0 1rem rgba(0, 0, 0, 0.1),
350
- 0 0.125rem 0.25rem rgba(0, 0, 0, 0.2)
351
- ```
352
- - **Floating** — `$vbFloatingShadow`:
353
- ```
354
- 0 0 1.5rem rgba(0, 0, 0, 0.1),
355
- 0 0.25rem 0.5rem rgba(0, 0, 0, 0.2)
356
- ```
357
- - **Popup** — `$vbPopupShadow`:
358
- ```
359
- 0 0 2rem rgba(0, 0, 0, 0.1),
360
- 0 0.375rem 0.75rem rgba(0, 0, 0, 0.2)
361
- ```
362
-
363
- Each level uses the same dual-shadow technique (ambient diffuse + directional drop), scaling the radius progressively.
364
-
365
- ### Z-Index Hierarchy (named tokens)
366
- | Token | Value | Use |
367
- |---|---|---|
368
- | `$vbOverlayZIndex` | `100` | Subtle overlays |
369
- | `$vbFormActionsZIndex` | `200` | Form action bars |
370
- | `$vbFloatingZIndex` | `500` | Floating cards |
371
- | `$vbFullScreenZIndex` | `700` | Full-screen views |
372
- | `$vbModalZIndex` | `1000` | Modals |
373
- | `$vbMessageModalZIndex` | `1500` | Message modals |
374
- | `$vbPopupZIndex` | `2000` | Popups |
375
- | `$vbPopupMessageZIndex` | `3000` | Popup messages |
376
- | `$vbFixedMessageZIndex` | `4000` | Fixed messages |
377
- | `$vbMaxZIndex` | `2147483647` | Maximum (system reserved) |
378
-
379
- ### Animation
380
- Not explicitly tokenized in `_size.scss` extracted — components use SCSS-default transitions (`0.2-0.3s ease`).
229
+ No reusable shadow or elevation token is promoted. The inspected public component samples used `box-shadow: none`; the broader Vibes shadow recipes are historical system context, not live-page tokens.
381
230
 
382
231
  ## 7. Do's and Don'ts
383
232
 
384
- - **DO** use the three-tier token system: scale (`$vbColorsP07`) → semantic (`$vbPrimaryColor`) → component-level. Always reference semantic over scale where possible.
385
- - **DON'T** invent new color values. The 9 hue scales × 5-10 shades cover virtually any need.
386
- - **DO** lead with `$vbPrimaryColor` (`#285ac8`) for brand actions and links. It's the same value — links should match buttons in this system.
387
- - **DON'T** use bright accent blue (`$vbAccentColor: #73a5ff`) as a primary CTA. It's reserved for hover states and secondary emphasis.
388
- - **DO** use the named font-size tokens (`$vbHeadline1FontSize`, `$vbNormalFontSize`) instead of raw rem values. The 5-step scale is the contract.
389
- - **DON'T** use display sizes above 24dp. freee is enterprise SaaS — restraint is the voice.
390
- - **DO** apply `$vbLineHeight: 1.5` universally. Japanese readers need generous vertical breathing room.
391
- - **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.
392
- - **DO** snap to the 4dp spacing scale (4 / 8 / 16 / 24 / 32 / 48). Never use intermediate values like 6, 10, or 14.
393
- - **DON'T** invent custom shadow values — use `$vbCardShadow`, `$vbFloatingShadow`, `$vbPopupShadow` for the three elevation tiers.
394
- - **DO** use the named z-index tokens (`$vbModalZIndex`, `$vbPopupZIndex`, etc.). The hierarchy spans 100 → 4000 with deliberate gaps.
395
- - **DON'T** use arbitrary z-index values like `9999` — that breaks the layered system.
396
- - **DO** use status colors with the matching family (e.g., `RE02` bg + `RE05/RE07` text for alerts).
397
- - **DON'T** mix hue families in a single status badge (e.g., never red bg with orange text).
233
+ ### Do
398
234
 
399
- ## 8. Responsive Behavior
235
+ - Use Noto Sans JP only where its live loaded-font evidence applies.
236
+ - Keep public primary and outline actions distinct: filled blue versus white with a blue border.
237
+ - Treat pseudo-state samples as selector-specific visual evidence.
400
238
 
401
- ### Breakpoint
402
- - `$vbMobileBoundaryWidth: 48rem` (768dp) — single breakpoint between desktop and mobile
239
+ ### Don't
403
240
 
404
- ### Mobile Adjustments
405
- - All headline sizes step down (`$vbMobileHeadline1FontSize: 16dp` vs. desktop 24dp)
406
- - Form controls remain at the same height tokens (mobile-friendly already at 36-48dp)
407
- - Container width adapts to viewport (no fixed mobile container)
241
+ - Substitute Vibes’ historical `#285ac8` for the current public `#2864f0`.
242
+ - Promote declared-only Cherry Bomb One, Coiny, `myfont`, or swiper-icons to UI typography.
243
+ - Invent product-dashboard tables, badges, form states, or motion from public marketing pages.
408
244
 
409
- ### Touch
410
- - Form controls at `36-48dp` heights = touch-friendly by default
411
- - Buttons inherit form-control heights
245
+ ## 8. Responsive Behavior
412
246
 
413
- ### Image Behavior
414
- - Not tokenized in vibes — application-specific
415
- - Brand logo uses the `freee-logo` font for crisp scaling at any size
247
+ No responsive token or breakpoint is documented. The evidence contains no mobile viewport capture; re-verification must collect a matching public route at the target viewport before adding one.
416
248
 
417
249
  ## 9. Agent Prompt Guide
418
250
 
419
- ### Quick Color Reference
420
- - Primary CTA / Link: `#285ac8` (`$vbPrimaryColor` / `$vbColorsP07`)
421
- - Accent (hover, secondary): `#73a5ff` (`$vbAccentColor` / `$vbColorsP04`)
422
- - Default text: `#323232` (`$vbBlackColor` / `$vbColorsGY07`)
423
- - Muted text: `#6e6b6b` (`$vbBurntColor` / `$vbColorsS09`)
424
- - Caption text: `#8c8989` (`$vbBaseColor3` / `$vbColorsS08`)
425
- - Page bg: `#ffffff` (or `#ebf3ff` for tinted bg)
426
- - Subtle surface: `#f0eded` (`$vbBaseColor1`)
427
- - Border default: `#e9e7e7` (`$vbBaseColor2`)
428
- - Alert: `#dc1e32` (`$vbAlertColor`)
429
- - Notice: `#be8c14` (`$vbNoticeColor`)
430
- - Success: `#00963c` (`$vbColorsGR05`)
431
-
432
- ### Example Component Prompts
433
- - "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."
434
- - "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)."
435
- - "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)."
436
- - "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`."
437
- - "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."
438
-
439
- ### Iteration Guide
440
- 1. **Always reference semantic tokens (`$vbPrimaryColor`, `$vbAlertColor`)** instead of scale values (`$vbColorsP07`, `$vbColorsRE05`) when writing component-level code.
441
- 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.
442
- 3. **`#285ac8` is both the link color AND the primary button color** — they're the same semantic in vibes. Maintain visual coherence.
443
- 4. **`border-radius: 4px`** is the de facto standard (vibes doesn't tokenize radius, components use 4px consistently).
444
- 5. **Type scale: 10 / 12 / 14 / 16 / 24dp** — five steps total. Don't introduce 18 or 20 or 28.
445
- 6. **Mobile shrinks H1 from 24dp → 16dp**, H2 from 16dp → 14dp. H3 stays at 14dp.
446
- 7. **Spacing snaps to the 4dp scale: 4 / 8 / 16 / 24 / 32 / 48**. Never 6, 10, or 14.
447
- 8. **Three shadow recipes only** (`$vbCardShadow`, `$vbFloatingShadow`, `$vbPopupShadow`) — graduated radius and offset.
448
- 9. **Z-index uses named tokens** with massive gaps (100 / 200 / 500 / 700 / 1000 / 1500 / 2000 / 3000 / 4000) — leaves room for future layers.
449
- 10. **Form-control heights are tokens** (24 / 36 / 48dp) — never use arbitrary heights for inputs/buttons.
450
- 11. **Line-height 1.5 is universal** — preserves Japanese vertical rhythm and accessibility.
451
- 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.
452
-
453
- ---
251
+ - “Create a public freee-style page action: `#2864f0` fill, white `Noto Sans JP` 16px/700 text, 8px radius, and `10px 16px` padding. Scope it to public marketing, not an accounting-app control.”
252
+ - “Create a public freee-style outline action: white fill, `#2864f0` text and 2px border, 8px radius, `10px 16px` padding, Noto Sans JP 16px/700.”
253
+ - “Use white canvas, `#323232` content text, `#595959` muted text, and `#ebf3ff` only for the observed segment-card context. Do not add unobserved status colors.”
454
254
 
455
255
  ## 10. Voice & Tone
456
256
 
457
- 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/)).
257
+ The official mission speaks directly about enabling small businesses to take centre stage and to manage freely. Public copy should be clear, respectful, and oriented to the user’s business outcome; this is an editorial application of the mission, not a claim that a full product copy guide was captured. [Mission](https://corp.freee.co.jp/mission/)
458
258
 
459
- | Context | Tone |
259
+ | Do | Don't |
460
260
  |---|---|
461
- | CTAs | Plain imperative naming the outcome *「確定して保存」「申告書を作成する」*. Never clever, never hedged. |
462
- | Empty states | Name the next concrete action, not the absence. *「最初の取引を登録しましょう」* over *「データがありません」*. |
463
- | Error (validation) | Say what is wrong and what to do, in that order; never blame the user. *「金額を半角数字で入力してください」*. |
464
- | Error (system / network) | Admit the condition, state the user's safe next move. *「通信エラーが発生しました。少し待ってからもう一度お試しください」*. |
465
- | Success (money-moved) | Confirm the ledger state, not the feeling. *「仕訳を登録しました」*. No celebratory emoji, no 🎉. |
466
- | Onboarding | First-person plural in 丁寧語 — *「まずは事業者情報を登録しましょう」*. Calm, step-by-step, no surprise. |
467
- | Help / inline explanation | One sentence of plain language before any tax-code reference. Technical term on second mention, parenthetical on first. |
468
- | 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`). |
261
+ | Name the concrete management outcome. | Claim an unverified automation result. |
262
+ | Use respectful, direct Japanese. | Use a synthetic persona quote as evidence. |
263
+ | Keep support copy accessible and specific. | Turn an unavailable state into a decorative marketing promise. |
469
264
 
470
265
  **Voice samples.**
471
- - *「スモールビジネスを、世界の主役に。」*corporate mission tagline, set at marketing hero scale. <!-- verified: https://corp.freee.co.jp/mission/ , 2026-04 -->
472
- - *「だれでもビジネスの主役になれる」*accessibility-page framing; states *why* accessibility is non-negotiable at freee. <!-- verified: https://corp.freee.co.jp/sustainability/social/accessibility/ , 2026-04 -->
473
- - *「かろやか・シンプル・あんしん・インテリジェント」*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/ -->
474
- - Empty state for an unstarted ledger: *「まだ取引がありません。最初の取引を登録しましょう。」* <!-- illustrative: not verified as live freee copy; register modelled on corp.freee.co.jp 丁寧語 -->
475
- - Validation error on an amount field: *「金額を半角数字で入力してください。」* <!-- illustrative: not verified as live freee copy; register matches a11y-guidelines.freee.co.jp form-error examples -->
476
- - Success toast after saving a journal entry: *「仕訳を登録しました。」* <!-- illustrative: not verified as live freee copy; plain 丁寧語 past-tense state confirmation -->
477
-
478
- **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 (*「…を入力してください」*).
266
+ - 「スモールビジネスを、世界の主役に。」official mission. <!-- verified: corp.freee.co.jp/mission/ 2026-07-13 -->
267
+ - 「だれもが自由に自然体で経営できる環境」official mission-page framing. <!-- verified: corp.freee.co.jp/mission/ 2026-07-13 -->
268
+ - 「だれもが自由に経営できる統合型経営プラットフォーム」official vision framing. <!-- verified: corp.freee.co.jp/vision/ 2026-07-13 -->
479
269
 
480
270
  ## 11. Brand Narrative
481
271
 
482
- 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.
272
+ freee was established in July 2012. Its official company profile identifies Daisuke Sasaki as CEO and founder; its mission page describes an integrated management platform intended to reduce back-office burden for small businesses and support freer management. The current public-site blue, Noto Sans JP deployment, and concise action geometry are a separate live-surface record, not evidence about the private application. [Company profile](https://corp.freee.co.jp/company/) · [Mission](https://corp.freee.co.jp/mission/)
483
273
 
484
- 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.
485
-
486
- 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.
274
+ In 2023 freee publicly released Vibes and its accessibility-related frontend-development knowledge. That release is evidence of an accessibility-focused design-system initiative, not authority to reclassify its historic tokens as current website values. [Official announcement](https://corp.freee.co.jp/news/20231219_design.html)
487
275
 
488
276
  ## 12. Principles
489
277
 
490
- 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.
491
- 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.
492
- 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.
493
- 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.
494
- 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.
495
- 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).
496
- 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.
497
- 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.
278
+ 1. **Support small-business autonomy.** *UI implication:* make the relevant management outcome explicit before the call to action.
279
+ 2. **Separate evidence domains.** *UI implication:* public marketing, authenticated product, documentation chrome, and historical Vibes assets must not donate tokens to one another without direct evidence.
280
+ 3. **Treat accessibility as engineering practice.** *UI implication:* use the official Vibes/a11y context for intent, but verify each public UI value at the actual surface before implementation.
498
281
 
499
282
  ## 13. Personas
500
283
 
501
- *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.*
502
-
503
- **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.
504
-
505
- **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.
506
-
507
- **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.
508
-
509
- **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.
284
+ [FILL IN] No official persona research or product-user interviews were collected in this re-verification packet. Do not create synthetic users as evidence.
510
285
 
511
286
  ## 14. States
512
287
 
513
- | State | Treatment |
514
- |---|---|
515
- | **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. |
516
- | **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. |
517
- | **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. |
518
- | **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. |
519
- | **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. |
520
- | **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. |
521
- | **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. |
522
- | **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. |
523
- | **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. |
524
- | **Skeleton** | `$vbBaseColor2` (`#e9e7e7`) blocks at exact final dimensions. 1.2s shimmer. Currency fields show `¥ -`, dates show `----/--/--` — locale-formatted placeholders, never bare dashes. |
525
- | **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. |
526
- | **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. |
288
+ [FILL IN] The supplied capture has pseudo-state visual snapshots for selected public buttons, but no observable error, loading, success, empty, disabled, dialog, or authenticated-product state model. Add a state only after collecting its selector and surface provenance.
527
289
 
528
290
  ## 15. Motion & Easing
529
291
 
530
- **Durations.**
531
-
532
- | Token | Value | Use |
533
- |---|---|---|
534
- | `motion-instant` | 0ms | Toggle commits, selection state, disabled-state transitions |
535
- | `motion-fast` | 120ms | Button hover/press color change, tab underline slide |
536
- | `motion-standard` | 200ms | Toast enter/exit, dropdown open, inline banner appear |
537
- | `motion-slow` | 320ms | Modal enter, full-screen success reveal, sheet rise |
538
-
539
- **Easings.**
540
-
541
- | Token | Curve | Use |
542
- |---|---|---|
543
- | `ease-enter` | `cubic-bezier(0.2, 0.6, 0.25, 1)` | Things arriving — toasts, modals, sheets |
544
- | `ease-exit` | `cubic-bezier(0.4, 0.0, 0.9, 1)` | Dismissals, closes |
545
- | `ease-standard` | `cubic-bezier(0.25, 0.1, 0.25, 1)` | Two-way transitions — hover, focus ring, tab switch |
546
-
547
- **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.
548
-
549
- **Signature motions.**
550
-
551
- 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.
552
- 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.
553
- 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.
554
- 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`.
555
- 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.
556
- 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).
557
-
558
- <!--
559
- OmD v0.1 Sources — Philosophy Layer (sections 10–15)
560
-
561
- ## Direct verification via WebFetch (2026-04-20)
562
- - https://corp.freee.co.jp/mission/ — mission statement "スモールビジネスを、世界の主役に。" and surrounding
563
- framing of small businesses as catalysts of innovation. Used in §11 narrative and §10 voice samples.
564
- - https://corp.freee.co.jp/company/ — founding year (July 2012), founder Daisuke Sasaki, his prior roles
565
- at Google / CLSA / Hakuhodo / ALBERT, and the Hitotsubashi commerce-department education. Used in §11.
566
- - https://corp.freee.co.jp/sustainability/social/accessibility/ — "だれでもビジネスの主役になれる" accessibility
567
- framing; the "すべての人が freee のサービスを使える必要がある" rationale. Used in §10 samples, §11, §12.7.
568
- - https://a11y-guidelines.freee.co.jp/intro/intro.html — purpose statement of the open-source accessibility
569
- guidelines; WCAG 2.1 AA basis; concrete-over-abstract editorial stance. Used in §12.7.
570
- - https://developers.freee.co.jp/entry/growing-vibes — Vibes' accessibility-as-foundation stance, the
571
- tiered designer/engineer/QA accessibility model, the "scrap-and-build" reset history. Used in §12.7.
572
-
573
- ## Cited (search-surface confirmation, not full live fetch)
574
- - https://brand.freee.co.jp/designphilosophy/ — the four-adjective register (かろやか / シンプル / あんしん /
575
- インテリジェント) and the supporting adjectives (まえむき / リラックス / たのしさ as spice). Source for §10 intro,
576
- §10 forbidden-phrases register decisions, and §12.2–12.4 principle framings. Page itself returned
577
- minimal markdown to WebFetch, but the four adjectives are consistently documented across search-surface
578
- summaries of the page and multiple third-party analyses (Takram's freee rebrand case, note.com writeups,
579
- developers.freee.co.jp reading-group article).
580
- - https://speakerdeck.com/magi1125/dezainpurinsipurunotukurikata — "Design Principle creation" deck.
581
- Confirms that freee operates against concrete principles such as "segment screens by business workflow",
582
- "restrict explanatory text to critical error-prevention areas", and "prioritize efficiency in repetitive
583
- workflows". Principles 1 and 8 echo this framing at a general level.
584
- - https://corp.freee.co.jp/news/20231219_design.html — 2023-12-19 press release announcing Vibes as
585
- open-source, framing accessibility as the headline engineering asset. Supports §11 and §12.7.
586
-
587
- ## JP-translated / illustrative
588
- - §10 voice samples marked `illustrative` are written in plain 丁寧語 matching the register observed on
589
- corp.freee.co.jp and a11y-guidelines.freee.co.jp; they are NOT verified as live freee product strings.
590
- A reviewer with freee product access should cross-check these against actual screens before they are
591
- used as microcopy source by an agent.
592
-
593
- ## Base DESIGN.md (§1–9) — carry-from-base, not re-verified
594
- - All token-level claims (#285ac8 $vbPrimaryColor, 4dp spacing scale, 5-step type scale 10/12/14/16/24dp,
595
- three shadow recipes, z-index hierarchy, Hiragino-led font stack) are sourced from the base DESIGN.md
596
- §1–9, which was extracted in 2026-04-17 from the open-source github.com/freee/vibes SCSS partials.
597
- These were not re-verified in the Philosophy pass; §14 and §15 reference them as authoritative.
598
-
599
- ## Interpretive / editorial claims (flagged for honesty)
600
- - The framing of freee's voice as "plain, reassuring, unobtrusively competent" is an editorial synthesis
601
- of the four-adjective register + the accessibility-first mission; freee does not publish a voice-and-tone
602
- document that uses those exact words.
603
- - The "no spring, no overshoot" motion stance (§15) is an editorial derivation from the product category
604
- (accounting / tax filing) + the four-adjective register; freee's published materials do not include a
605
- motion spec. A reviewer with access to Vibes component source can verify or refute this stance against
606
- the actual component library.
607
- - Personas (§13) are fictional archetypes informed by publicly described freee user segments (SMB owners,
608
- sole proprietors, 税理士, in-house back-office leads). Names are illustrative and do not refer to real
609
- people.
610
- -->
292
+ [FILL IN] The collector recorded no interaction event or timing data. Hover, focus, and pressed images do not establish duration, easing, or reduced-motion behavior.
611
293
 
612
294
  ---
613
-
614
- **Verified:** 2026-05-08 (omd:migrate run 26 Apple-tier)
615
- **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`).
616
- **Tier 2 sources:** styles.refero.design / getdesign.md — no record.
617
- **Tier 2 (Philosophy/founders):** Daisuke Sasaki LinkedIn, DCFmodeling, TechCrunch, VentureBeat, AsiaTechDaily, corp.freee.co.jp/company.
618
- **Style ref:** `line` (JP East-Asian register, retained).
619
- **Conflicts unresolved:** Brand blue HEX — live DOM `#2864f0` vs §2 doc `#285ac8` (likely 2024-2025 rebrand drift; both retained, live wins for new UI).
620
-
295
+ **Verified:** 2026-07-13
296
+ **Tier 1 sources:** https://www.freee.co.jp/; https://www.freee.co.jp/pricing/; https://www.freee.co.jp/products/; https://corp.freee.co.jp/news/20231219_design.html; https://github.com/freee/vibes; https://corp.freee.co.jp/mission/; https://corp.freee.co.jp/company/
297
+ **Tier 2 sources:** https://getdesign.md/freee (attempted through built-in web search; no freee record returned); https://styles.refero.design/?q=freee (attempted through built-in web search; no freee result returned in the public result set)
298
+ **Conflicts unresolved:** none