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.
- package/.claude/hooks/lib/preferences-parser.cjs +1 -0
- package/.claude/hooks/lib/preferences-writer.cjs +1 -0
- package/.claude/hooks/post-edit-watch.cjs +1 -0
- package/.claude/hooks/session-end-foldin.cjs +1 -0
- package/.claude/hooks/session-state-loader.cjs +1 -0
- package/.claude/hooks/skill-activation.cjs +1 -0
- package/.claude/settings.json +10 -1
- package/.github/assets/logo-bg.png +0 -0
- package/AGENTS.md +20 -1
- package/CHANGELOG.md +482 -0
- package/MIGRATION.md +103 -0
- package/README.ja.md +56 -19
- package/README.ko.md +47 -30
- package/README.md +48 -30
- package/README.zh-TW.md +59 -22
- package/agents/AGENT.md +8 -7
- package/agents/omd-codex-image.md +1 -1
- package/agents/omd-critic.md +6 -7
- package/agents/omd-designer-review.md +1 -1
- package/agents/omd-final-qa.md +1 -1
- package/agents/omd-humanizer.md +38 -0
- package/agents/omd-kr-writer.md +3 -4
- package/agents/omd-locale-adapter.md +12 -16
- package/agents/omd-master.md +24 -19
- package/agents/omd-microcopy.md +1 -1
- package/agents/omd-orchestrator.md +7 -8
- package/agents/omd-slop-auditor.md +31 -0
- package/agents/omd-ux-researcher.md +1 -1
- package/data/reference-fingerprints.json +1995 -38
- package/dist/bin/oh-my-design.js +16 -8
- package/dist/bin/oh-my-design.js.map +1 -1
- package/dist/chunk-UJIHCEYF.js +99 -0
- package/dist/chunk-UJIHCEYF.js.map +1 -0
- package/dist/doctor-LDWSFM3I.js +763 -0
- package/dist/doctor-LDWSFM3I.js.map +1 -0
- package/dist/install-skills-ZZFNJ2II.js +1120 -0
- package/dist/install-skills-ZZFNJ2II.js.map +1 -0
- package/docs/CLI_QUICKSTART.md +157 -0
- package/package.json +25 -4
- package/scripts/postinstall.cjs +5 -4
- package/skills/claude-design/SKILL.md +38 -14
- package/skills/claude-design/references/claude-design-flow.md +11 -11
- package/skills/claude-design/references/codebase-analysis.md +5 -4
- package/skills/omd-final-qa/SKILL.md +1 -1
- package/skills/omd-harness/SKILL.md +51 -50
- package/skills/omd-humanize/SKILL.md +116 -0
- package/skills/omd-humanize/agents/openai.yaml +4 -0
- package/skills/omd-humanize/references/locale-playbooks.md +102 -0
- package/skills/omd-humanize/references/sources.md +11 -0
- package/skills/omd-init/SKILL.md +18 -12
- package/skills/omd-locale-adapter/SKILL.md +58 -91
- package/skills/omd-orchestrator/SKILL.md +11 -5
- package/skills/omd-reference-capture/SKILL.md +80 -26
- package/skills/omd-reference-capture/scripts/PLAYWRIGHT-LICENSE.txt +202 -0
- package/skills/omd-reference-capture/scripts/PLAYWRIGHT-NOTICE.txt +5 -0
- package/skills/omd-reference-capture/scripts/THIRD_PARTY_NOTICES.md +3 -0
- package/skills/omd-reference-capture/scripts/capture-reference-evidence.mjs +159906 -0
- package/skills/omd-slop-audit/SKILL.md +110 -0
- package/skills/omd-slop-audit/agents/openai.yaml +4 -0
- package/skills/omd-slop-audit/references/pattern-catalog.md +96 -0
- package/skills/omd-slop-audit/references/sources.md +24 -0
- package/web/references/104/DESIGN.md +354 -0
- package/web/references/11st/DESIGN.md +197 -316
- package/web/references/29cm/DESIGN.md +297 -393
- package/web/references/42dot/DESIGN.md +390 -0
- package/web/references/8percent/DESIGN.md +438 -0
- package/web/references/ably/DESIGN.md +267 -572
- package/web/references/acer/DESIGN.md +329 -0
- package/web/references/airbnb/DESIGN.md +219 -557
- package/web/references/alipay/DESIGN.md +179 -420
- package/web/references/apple/DESIGN.md +224 -498
- package/web/references/asleep/DESIGN.md +402 -0
- package/web/references/au/DESIGN.md +334 -0
- package/web/references/autopedia/DESIGN.md +382 -0
- package/web/references/aws-cloudscape/DESIGN.md +241 -0
- package/web/references/baemin/DESIGN.md +332 -491
- package/web/references/banksalad/DESIGN.md +269 -180
- package/web/references/barogo/DESIGN.md +416 -0
- package/web/references/beusable/DESIGN.md +464 -0
- package/web/references/bilibili/DESIGN.md +206 -374
- package/web/references/bmw/DESIGN.md +162 -276
- package/web/references/brandi/DESIGN.md +184 -325
- package/web/references/catchtable/DESIGN.md +219 -264
- package/web/references/cgv/DESIGN.md +317 -0
- package/web/references/channeltalk/DESIGN.md +210 -336
- package/web/references/china-airlines/DESIGN.md +291 -0
- package/web/references/cjonstyle/DESIGN.md +453 -0
- package/web/references/class101/DESIGN.md +168 -387
- package/web/references/classum/DESIGN.md +228 -203
- package/web/references/claude/DESIGN.md +242 -479
- package/web/references/clay/DESIGN.md +179 -377
- package/web/references/clickhouse/DESIGN.md +254 -343
- package/web/references/cohere/DESIGN.md +214 -324
- package/web/references/coinone/DESIGN.md +199 -179
- package/web/references/corca/DESIGN.md +414 -0
- package/web/references/coupang/DESIGN.md +205 -475
- package/web/references/cursor/DESIGN.md +240 -381
- package/web/references/dabang/DESIGN.md +248 -213
- package/web/references/dable/DESIGN.md +431 -0
- package/web/references/datarize/DESIGN.md +217 -330
- package/web/references/dealicious/DESIGN.md +402 -0
- package/web/references/drdiary/DESIGN.md +404 -0
- package/web/references/elastic/DESIGN.md +238 -0
- package/web/references/elevenlabs/DESIGN.md +183 -321
- package/web/references/eslite/DESIGN.md +257 -0
- package/web/references/evaair/DESIGN.md +338 -0
- package/web/references/expo/DESIGN.md +238 -331
- package/web/references/familymart-tw/DESIGN.md +254 -0
- package/web/references/ferrari/DESIGN.md +160 -377
- package/web/references/figma/DESIGN.md +197 -451
- package/web/references/fitpet/DESIGN.md +445 -0
- package/web/references/flex/DESIGN.md +170 -253
- package/web/references/framer/DESIGN.md +197 -340
- package/web/references/freee/DESIGN.md +211 -533
- package/web/references/friendliai/DESIGN.md +431 -0
- package/web/references/frip/DESIGN.md +440 -0
- package/web/references/gangnamunni/DESIGN.md +154 -591
- package/web/references/gaudiolab/DESIGN.md +414 -0
- package/web/references/google/DESIGN.md +290 -398
- package/web/references/hashicorp/DESIGN.md +273 -318
- package/web/references/heydealer/DESIGN.md +429 -0
- package/web/references/humanscape/DESIGN.md +433 -0
- package/web/references/hyundai/DESIGN.md +158 -368
- package/web/references/hyundaicard/DESIGN.md +171 -121
- package/web/references/ibm/DESIGN.md +227 -378
- package/web/references/idus/DESIGN.md +450 -0
- package/web/references/igaworks/DESIGN.md +437 -0
- package/web/references/inflearn/DESIGN.md +221 -366
- package/web/references/intuit/DESIGN.md +244 -0
- package/web/references/jandi/DESIGN.md +191 -291
- package/web/references/jobplanet/DESIGN.md +415 -0
- package/web/references/kakao/DESIGN.md +287 -475
- package/web/references/kakaobank/DESIGN.md +220 -521
- package/web/references/kakaogames/DESIGN.md +220 -0
- package/web/references/kakaopay/DESIGN.md +207 -526
- package/web/references/karrot/DESIGN.md +227 -251
- package/web/references/kb-kookmin/DESIGN.md +308 -0
- package/web/references/kbank/DESIGN.md +220 -175
- package/web/references/kmong/DESIGN.md +281 -356
- package/web/references/krds/DESIGN.md +245 -19
- package/web/references/kream/DESIGN.md +224 -359
- package/web/references/kurly/DESIGN.md +211 -533
- package/web/references/lamborghini/DESIGN.md +198 -360
- package/web/references/lguplus/DESIGN.md +259 -0
- package/web/references/likelion/DESIGN.md +283 -0
- package/web/references/line/DESIGN.md +396 -355
- package/web/references/linear.app/DESIGN.md +209 -562
- package/web/references/lotteon/DESIGN.md +386 -0
- package/web/references/lovable/DESIGN.md +255 -349
- package/web/references/makinarocks/DESIGN.md +149 -349
- package/web/references/maum-ai/DESIGN.md +423 -0
- package/web/references/medibloc/DESIGN.md +425 -0
- package/web/references/megabox/DESIGN.md +232 -0
- package/web/references/mercari/DESIGN.md +217 -434
- package/web/references/microsoft/DESIGN.md +234 -388
- package/web/references/mildang/DESIGN.md +411 -0
- package/web/references/millie/DESIGN.md +183 -504
- package/web/references/minimax/DESIGN.md +264 -322
- package/web/references/miricanvas/DESIGN.md +182 -355
- package/web/references/miro/DESIGN.md +234 -232
- package/web/references/mistral.ai/DESIGN.md +231 -314
- package/web/references/mixi/DESIGN.md +234 -0
- package/web/references/moin/DESIGN.md +445 -0
- package/web/references/mongodb/DESIGN.md +219 -316
- package/web/references/musinsa/DESIGN.md +184 -510
- package/web/references/mynavi/DESIGN.md +242 -0
- package/web/references/myrealtrip/DESIGN.md +169 -406
- package/web/references/naver/DESIGN.md +328 -499
- package/web/references/naverwebtoon/DESIGN.md +172 -395
- package/web/references/nhn/DESIGN.md +169 -346
- package/web/references/nhncloud/DESIGN.md +185 -123
- package/web/references/notion/DESIGN.md +271 -475
- package/web/references/nrise/DESIGN.md +417 -0
- package/web/references/ohouse/DESIGN.md +210 -549
- package/web/references/oliveyoung/DESIGN.md +217 -326
- package/web/references/ollama/DESIGN.md +241 -308
- package/web/references/onestore/DESIGN.md +248 -0
- package/web/references/palantir/DESIGN.md +256 -0
- package/web/references/panasonic/DESIGN.md +276 -0
- package/web/references/patternfly/DESIGN.md +259 -0
- package/web/references/payhere/DESIGN.md +438 -0
- package/web/references/pega/DESIGN.md +262 -0
- package/web/references/peoplefund/DESIGN.md +431 -0
- package/web/references/petfriends/DESIGN.md +428 -0
- package/web/references/pinkfong/DESIGN.md +199 -367
- package/web/references/pinterest/DESIGN.md +258 -308
- package/web/references/poya/DESIGN.md +286 -0
- package/web/references/pozalabs/DESIGN.md +438 -0
- package/web/references/protopie/DESIGN.md +419 -0
- package/web/references/qraft/DESIGN.md +448 -0
- package/web/references/quotabook/DESIGN.md +449 -0
- package/web/references/recruit/DESIGN.md +247 -0
- package/web/references/remember/DESIGN.md +202 -396
- package/web/references/resend/DESIGN.md +274 -348
- package/web/references/sakura-internet/DESIGN.md +269 -0
- package/web/references/samsung/DESIGN.md +157 -359
- package/web/references/sandoll/DESIGN.md +445 -0
- package/web/references/sanity/DESIGN.md +241 -375
- package/web/references/scatterlab/DESIGN.md +412 -0
- package/web/references/selectstar/DESIGN.md +439 -0
- package/web/references/servicenow/DESIGN.md +289 -0
- package/web/references/shinhanbank/DESIGN.md +161 -341
- package/web/references/shinhancard/DESIGN.md +208 -319
- package/web/references/sionic/DESIGN.md +454 -0
- package/web/references/sktelecom/DESIGN.md +310 -0
- package/web/references/socar/DESIGN.md +125 -32
- package/web/references/softbank/DESIGN.md +231 -0
- package/web/references/sony/DESIGN.md +234 -0
- package/web/references/soop/DESIGN.md +261 -0
- package/web/references/spacex/DESIGN.md +184 -323
- package/web/references/spotify/DESIGN.md +253 -394
- package/web/references/squeezebits/DESIGN.md +441 -0
- package/web/references/stayfolio/DESIGN.md +422 -0
- package/web/references/stripe/DESIGN.md +212 -491
- package/web/references/supabase/DESIGN.md +244 -316
- package/web/references/tabling/DESIGN.md +415 -0
- package/web/references/taishinbank/DESIGN.md +243 -0
- package/web/references/teamlab/DESIGN.md +240 -0
- package/web/references/teamsparta/DESIGN.md +472 -0
- package/web/references/tellingme/DESIGN.md +392 -0
- package/web/references/tesla/DESIGN.md +244 -427
- package/web/references/thsr/DESIGN.md +284 -0
- package/web/references/thumbtack/DESIGN.md +302 -0
- package/web/references/together.ai/DESIGN.md +257 -304
- package/web/references/toss/DESIGN.md +251 -593
- package/web/references/toss-securities/DESIGN.md +255 -178
- package/web/references/tossbank/DESIGN.md +195 -491
- package/web/references/toyota/DESIGN.md +238 -0
- package/web/references/tving/DESIGN.md +197 -245
- package/web/references/typed/DESIGN.md +413 -0
- package/web/references/uber/DESIGN.md +256 -333
- package/web/references/udn/DESIGN.md +250 -0
- package/web/references/upbit/DESIGN.md +145 -256
- package/web/references/upstage/DESIGN.md +211 -204
- package/web/references/uswds/DESIGN.md +287 -0
- package/web/references/vercel/DESIGN.md +236 -440
- package/web/references/wanted/DESIGN.md +215 -487
- package/web/references/wise/DESIGN.md +223 -231
- package/web/references/wisetracker/DESIGN.md +462 -0
- package/web/references/wooribank/DESIGN.md +245 -0
- package/web/references/yanolja/DESIGN.md +250 -419
- package/web/references/yeogiotte/DESIGN.md +235 -418
- package/web/references/zapier/DESIGN.md +256 -377
- package/web/references/zendesk/DESIGN.md +288 -0
- package/web/references/zigzag/DESIGN.md +200 -621
- package/dist/install-skills-7UUDOLG2.js +0 -734
- 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: "#
|
|
7
|
+
primary_color: "#2864f0"
|
|
8
8
|
logo:
|
|
9
9
|
type: github
|
|
10
10
|
slug: freee
|
|
11
|
-
verified: "2026-
|
|
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
|
|
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:
|
|
20
|
-
extracted: "2026-
|
|
83
|
+
source: live-extract
|
|
84
|
+
extracted: "2026-07-12"
|
|
85
|
+
components_harvested: true
|
|
21
86
|
colors:
|
|
22
|
-
primary: "#
|
|
23
|
-
primary-hover: "#
|
|
24
|
-
primary-
|
|
25
|
-
accent: "#73a5ff"
|
|
87
|
+
primary: "#2864f0"
|
|
88
|
+
primary-hover: "#2863ef"
|
|
89
|
+
primary-pressed: "#245ad9"
|
|
26
90
|
canvas: "#ffffff"
|
|
27
|
-
|
|
28
|
-
surface-subtle: "#f0eded"
|
|
29
|
-
column: "#f7f5f5"
|
|
30
|
-
border: "#e9e7e7"
|
|
91
|
+
surface-tint: "#ebf3ff"
|
|
31
92
|
text: "#323232"
|
|
32
|
-
text-muted: "#
|
|
33
|
-
|
|
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: {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
79
|
-
-
|
|
80
|
-
-
|
|
81
|
-
-
|
|
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
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
- `#
|
|
97
|
-
- `#
|
|
98
|
-
- `#
|
|
99
|
-
- `#
|
|
100
|
-
- `#
|
|
101
|
-
- `#
|
|
102
|
-
- `#
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
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
|
-
###
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
|
177
|
-
|
|
|
178
|
-
|
|
|
179
|
-
|
|
180
|
-
|
|
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
|
-
|
|
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
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
-
|
|
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
|
-
-
|
|
232
|
-
-
|
|
233
|
-
-
|
|
234
|
-
- Font:
|
|
235
|
-
- Use:
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
-
|
|
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
|
-
-
|
|
241
|
-
-
|
|
242
|
-
-
|
|
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
|
-
###
|
|
199
|
+
### Segment-selection card
|
|
245
200
|
|
|
246
|
-
**
|
|
247
|
-
- Background: `#
|
|
248
|
-
- Text: `#323232`
|
|
249
|
-
-
|
|
250
|
-
-
|
|
251
|
-
-
|
|
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
|
-
###
|
|
208
|
+
### Product-category card
|
|
265
209
|
|
|
266
|
-
**
|
|
210
|
+
**Outline — observed default**
|
|
267
211
|
- Background: `#ffffff`
|
|
268
|
-
-
|
|
269
|
-
-
|
|
270
|
-
-
|
|
271
|
-
-
|
|
272
|
-
|
|
273
|
-
|
|
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
|
-
|
|
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
|
-
|
|
338
|
-
- `$vbContainerSize: 70rem` (1120dp) — page max-width
|
|
339
|
-
- Mobile breakpoint: `$vbMobileBoundaryWidth: 48rem` (768dp)
|
|
221
|
+
## 5. Layout Principles
|
|
340
222
|
|
|
341
|
-
|
|
342
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
###
|
|
402
|
-
- `$vbMobileBoundaryWidth: 48rem` (768dp) — single breakpoint between desktop and mobile
|
|
239
|
+
### Don't
|
|
403
240
|
|
|
404
|
-
|
|
405
|
-
-
|
|
406
|
-
-
|
|
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
|
-
|
|
410
|
-
- Form controls at `36-48dp` heights = touch-friendly by default
|
|
411
|
-
- Buttons inherit form-control heights
|
|
245
|
+
## 8. Responsive Behavior
|
|
412
246
|
|
|
413
|
-
|
|
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
|
-
|
|
420
|
-
-
|
|
421
|
-
-
|
|
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
|
-
|
|
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
|
-
|
|
|
259
|
+
| Do | Don't |
|
|
460
260
|
|---|---|
|
|
461
|
-
|
|
|
462
|
-
|
|
|
463
|
-
|
|
|
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
|
-
-
|
|
472
|
-
-
|
|
473
|
-
-
|
|
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
|
|
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
|
-
|
|
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. **
|
|
491
|
-
2.
|
|
492
|
-
3.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
**
|
|
615
|
-
**Tier
|
|
616
|
-
**
|
|
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
|