oh-my-design-cli 1.8.6 → 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 (275) 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 +2761 -85
  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/airbridge/DESIGN.md +451 -0
  71. package/web/references/alipay/DESIGN.md +179 -420
  72. package/web/references/apple/DESIGN.md +224 -498
  73. package/web/references/asleep/DESIGN.md +402 -0
  74. package/web/references/au/DESIGN.md +334 -0
  75. package/web/references/autopedia/DESIGN.md +382 -0
  76. package/web/references/aws-cloudscape/DESIGN.md +241 -0
  77. package/web/references/baemin/DESIGN.md +332 -491
  78. package/web/references/banksalad/DESIGN.md +269 -180
  79. package/web/references/barogo/DESIGN.md +416 -0
  80. package/web/references/beusable/DESIGN.md +464 -0
  81. package/web/references/bigin/DESIGN.md +454 -0
  82. package/web/references/bilibili/DESIGN.md +206 -374
  83. package/web/references/bmw/DESIGN.md +162 -276
  84. package/web/references/brandi/DESIGN.md +184 -325
  85. package/web/references/buzzvil/DESIGN.md +457 -0
  86. package/web/references/cafe24/DESIGN.md +472 -0
  87. package/web/references/catchtable/DESIGN.md +219 -264
  88. package/web/references/cgv/DESIGN.md +317 -0
  89. package/web/references/channeltalk/DESIGN.md +210 -336
  90. package/web/references/china-airlines/DESIGN.md +291 -0
  91. package/web/references/cjonstyle/DESIGN.md +453 -0
  92. package/web/references/class101/DESIGN.md +168 -387
  93. package/web/references/classum/DESIGN.md +228 -203
  94. package/web/references/claude/DESIGN.md +242 -479
  95. package/web/references/clay/DESIGN.md +179 -377
  96. package/web/references/clickhouse/DESIGN.md +254 -343
  97. package/web/references/codeit/DESIGN.md +470 -0
  98. package/web/references/cohere/DESIGN.md +214 -324
  99. package/web/references/coinone/DESIGN.md +199 -179
  100. package/web/references/corca/DESIGN.md +414 -0
  101. package/web/references/coupang/DESIGN.md +205 -475
  102. package/web/references/cursor/DESIGN.md +240 -381
  103. package/web/references/dabang/DESIGN.md +248 -213
  104. package/web/references/dable/DESIGN.md +431 -0
  105. package/web/references/datarize/DESIGN.md +338 -0
  106. package/web/references/dealicious/DESIGN.md +402 -0
  107. package/web/references/drdiary/DESIGN.md +404 -0
  108. package/web/references/elastic/DESIGN.md +238 -0
  109. package/web/references/elevenlabs/DESIGN.md +183 -321
  110. package/web/references/elice/DESIGN.md +445 -0
  111. package/web/references/eslite/DESIGN.md +257 -0
  112. package/web/references/evaair/DESIGN.md +338 -0
  113. package/web/references/expo/DESIGN.md +238 -331
  114. package/web/references/familymart-tw/DESIGN.md +254 -0
  115. package/web/references/ferrari/DESIGN.md +160 -377
  116. package/web/references/figma/DESIGN.md +197 -451
  117. package/web/references/fitpet/DESIGN.md +445 -0
  118. package/web/references/flex/DESIGN.md +170 -253
  119. package/web/references/framer/DESIGN.md +197 -340
  120. package/web/references/freee/DESIGN.md +211 -533
  121. package/web/references/friendliai/DESIGN.md +431 -0
  122. package/web/references/frip/DESIGN.md +440 -0
  123. package/web/references/furiosaai/DESIGN.md +450 -0
  124. package/web/references/gangnamunni/DESIGN.md +154 -591
  125. package/web/references/gaudiolab/DESIGN.md +414 -0
  126. package/web/references/google/DESIGN.md +290 -398
  127. package/web/references/goorm/DESIGN.md +470 -0
  128. package/web/references/greencar/DESIGN.md +420 -0
  129. package/web/references/hackle/DESIGN.md +472 -0
  130. package/web/references/hashicorp/DESIGN.md +273 -318
  131. package/web/references/heydealer/DESIGN.md +429 -0
  132. package/web/references/humanscape/DESIGN.md +433 -0
  133. package/web/references/hwahae/DESIGN.md +453 -0
  134. package/web/references/hyundai/DESIGN.md +158 -368
  135. package/web/references/hyundaicard/DESIGN.md +171 -121
  136. package/web/references/ibm/DESIGN.md +227 -378
  137. package/web/references/idus/DESIGN.md +450 -0
  138. package/web/references/igaworks/DESIGN.md +437 -0
  139. package/web/references/inflearn/DESIGN.md +221 -366
  140. package/web/references/intuit/DESIGN.md +244 -0
  141. package/web/references/jandi/DESIGN.md +191 -291
  142. package/web/references/jobplanet/DESIGN.md +415 -0
  143. package/web/references/kakao/DESIGN.md +287 -475
  144. package/web/references/kakaobank/DESIGN.md +220 -521
  145. package/web/references/kakaogames/DESIGN.md +220 -0
  146. package/web/references/kakaopay/DESIGN.md +207 -526
  147. package/web/references/karrot/DESIGN.md +227 -251
  148. package/web/references/kb-kookmin/DESIGN.md +308 -0
  149. package/web/references/kbank/DESIGN.md +220 -175
  150. package/web/references/kcd/DESIGN.md +432 -0
  151. package/web/references/kmong/DESIGN.md +281 -356
  152. package/web/references/krds/DESIGN.md +245 -19
  153. package/web/references/kream/DESIGN.md +224 -359
  154. package/web/references/kurly/DESIGN.md +211 -533
  155. package/web/references/kyobobook/DESIGN.md +445 -0
  156. package/web/references/lablup/DESIGN.md +474 -0
  157. package/web/references/lamborghini/DESIGN.md +198 -360
  158. package/web/references/lemonbase/DESIGN.md +452 -0
  159. package/web/references/lguplus/DESIGN.md +259 -0
  160. package/web/references/likelion/DESIGN.md +283 -0
  161. package/web/references/line/DESIGN.md +396 -355
  162. package/web/references/linear.app/DESIGN.md +209 -562
  163. package/web/references/lotteon/DESIGN.md +386 -0
  164. package/web/references/lovable/DESIGN.md +255 -349
  165. package/web/references/makinarocks/DESIGN.md +242 -0
  166. package/web/references/maum-ai/DESIGN.md +423 -0
  167. package/web/references/medibloc/DESIGN.md +425 -0
  168. package/web/references/megabox/DESIGN.md +232 -0
  169. package/web/references/mercari/DESIGN.md +217 -434
  170. package/web/references/microsoft/DESIGN.md +234 -388
  171. package/web/references/mildang/DESIGN.md +411 -0
  172. package/web/references/millie/DESIGN.md +183 -504
  173. package/web/references/minimax/DESIGN.md +264 -322
  174. package/web/references/miricanvas/DESIGN.md +182 -355
  175. package/web/references/miro/DESIGN.md +234 -232
  176. package/web/references/mistral.ai/DESIGN.md +231 -314
  177. package/web/references/mixi/DESIGN.md +234 -0
  178. package/web/references/moin/DESIGN.md +445 -0
  179. package/web/references/mongodb/DESIGN.md +219 -316
  180. package/web/references/moreh/DESIGN.md +437 -0
  181. package/web/references/musinsa/DESIGN.md +184 -510
  182. package/web/references/mynavi/DESIGN.md +242 -0
  183. package/web/references/myrealtrip/DESIGN.md +169 -406
  184. package/web/references/naver/DESIGN.md +328 -499
  185. package/web/references/naverwebtoon/DESIGN.md +172 -395
  186. package/web/references/neosapience/DESIGN.md +441 -0
  187. package/web/references/nhn/DESIGN.md +169 -346
  188. package/web/references/nhncloud/DESIGN.md +185 -123
  189. package/web/references/nota/DESIGN.md +451 -0
  190. package/web/references/notion/DESIGN.md +271 -475
  191. package/web/references/nrise/DESIGN.md +417 -0
  192. package/web/references/ohouse/DESIGN.md +210 -549
  193. package/web/references/oliveyoung/DESIGN.md +217 -326
  194. package/web/references/ollama/DESIGN.md +241 -308
  195. package/web/references/onestore/DESIGN.md +248 -0
  196. package/web/references/palantir/DESIGN.md +256 -0
  197. package/web/references/panasonic/DESIGN.md +276 -0
  198. package/web/references/patternfly/DESIGN.md +259 -0
  199. package/web/references/payhere/DESIGN.md +438 -0
  200. package/web/references/pega/DESIGN.md +262 -0
  201. package/web/references/peoplefund/DESIGN.md +431 -0
  202. package/web/references/petfriends/DESIGN.md +428 -0
  203. package/web/references/pinkfong/DESIGN.md +199 -367
  204. package/web/references/pinterest/DESIGN.md +258 -308
  205. package/web/references/portone/DESIGN.md +446 -0
  206. package/web/references/poya/DESIGN.md +286 -0
  207. package/web/references/pozalabs/DESIGN.md +438 -0
  208. package/web/references/protopie/DESIGN.md +419 -0
  209. package/web/references/qraft/DESIGN.md +448 -0
  210. package/web/references/queenit/DESIGN.md +432 -0
  211. package/web/references/quotabook/DESIGN.md +449 -0
  212. package/web/references/rebellions/DESIGN.md +449 -0
  213. package/web/references/recruit/DESIGN.md +247 -0
  214. package/web/references/remember/DESIGN.md +202 -396
  215. package/web/references/resend/DESIGN.md +274 -348
  216. package/web/references/returnzero/DESIGN.md +460 -0
  217. package/web/references/sakura-internet/DESIGN.md +269 -0
  218. package/web/references/samsung/DESIGN.md +157 -359
  219. package/web/references/sandoll/DESIGN.md +445 -0
  220. package/web/references/sanity/DESIGN.md +241 -375
  221. package/web/references/saramin/DESIGN.md +465 -0
  222. package/web/references/scatterlab/DESIGN.md +412 -0
  223. package/web/references/selectstar/DESIGN.md +439 -0
  224. package/web/references/servicenow/DESIGN.md +289 -0
  225. package/web/references/shiftee/DESIGN.md +468 -0
  226. package/web/references/shinhanbank/DESIGN.md +161 -341
  227. package/web/references/shinhancard/DESIGN.md +208 -319
  228. package/web/references/sionic/DESIGN.md +454 -0
  229. package/web/references/sktelecom/DESIGN.md +310 -0
  230. package/web/references/socar/DESIGN.md +125 -32
  231. package/web/references/softbank/DESIGN.md +231 -0
  232. package/web/references/solapi/DESIGN.md +483 -0
  233. package/web/references/sony/DESIGN.md +234 -0
  234. package/web/references/soop/DESIGN.md +261 -0
  235. package/web/references/spacex/DESIGN.md +184 -323
  236. package/web/references/spotify/DESIGN.md +253 -394
  237. package/web/references/squeezebits/DESIGN.md +441 -0
  238. package/web/references/stayfolio/DESIGN.md +422 -0
  239. package/web/references/stripe/DESIGN.md +212 -491
  240. package/web/references/supabase/DESIGN.md +244 -316
  241. package/web/references/supertone/DESIGN.md +413 -0
  242. package/web/references/tabling/DESIGN.md +415 -0
  243. package/web/references/taishinbank/DESIGN.md +243 -0
  244. package/web/references/teamlab/DESIGN.md +240 -0
  245. package/web/references/teamsparta/DESIGN.md +472 -0
  246. package/web/references/tellingme/DESIGN.md +392 -0
  247. package/web/references/tesla/DESIGN.md +244 -427
  248. package/web/references/thsr/DESIGN.md +284 -0
  249. package/web/references/thumbtack/DESIGN.md +302 -0
  250. package/web/references/together.ai/DESIGN.md +257 -304
  251. package/web/references/toss/DESIGN.md +251 -593
  252. package/web/references/toss-securities/DESIGN.md +255 -178
  253. package/web/references/tossbank/DESIGN.md +195 -491
  254. package/web/references/toyota/DESIGN.md +238 -0
  255. package/web/references/tving/DESIGN.md +197 -245
  256. package/web/references/typed/DESIGN.md +413 -0
  257. package/web/references/uber/DESIGN.md +256 -333
  258. package/web/references/udn/DESIGN.md +250 -0
  259. package/web/references/upbit/DESIGN.md +145 -256
  260. package/web/references/upstage/DESIGN.md +211 -204
  261. package/web/references/uswds/DESIGN.md +287 -0
  262. package/web/references/vercel/DESIGN.md +236 -440
  263. package/web/references/vuno/DESIGN.md +413 -0
  264. package/web/references/wanted/DESIGN.md +215 -487
  265. package/web/references/weverse/DESIGN.md +437 -0
  266. package/web/references/wise/DESIGN.md +223 -231
  267. package/web/references/wisetracker/DESIGN.md +462 -0
  268. package/web/references/wooribank/DESIGN.md +245 -0
  269. package/web/references/yanolja/DESIGN.md +250 -419
  270. package/web/references/yeogiotte/DESIGN.md +235 -418
  271. package/web/references/zapier/DESIGN.md +256 -377
  272. package/web/references/zendesk/DESIGN.md +288 -0
  273. package/web/references/zigzag/DESIGN.md +200 -621
  274. package/dist/install-skills-7UUDOLG2.js +0 -734
  275. package/dist/install-skills-7UUDOLG2.js.map +0 -1
@@ -0,0 +1,431 @@
1
+ ---
2
+ id: friendliai
3
+ name: FriendliAI
4
+ display_name_kr: 프렌들리에이아이
5
+ country: KR
6
+ category: ai
7
+ homepage: "https://friendli.ai/"
8
+ primary_color: "#2a62db"
9
+ logo:
10
+ type: favicon
11
+ slug: "https://www.google.com/s2/favicons?domain=friendli.ai&sz=128"
12
+ verified: "2026-07-02"
13
+ added: "2026-07-02"
14
+ omd: "0.1"
15
+ tokens:
16
+ source: live-extract
17
+ extracted: "2026-07-02"
18
+ note: "primary = live 'Get started' CTA blue (#2a62db); link text runs a slightly deeper blue (#2453ba). Ink near-black navy (#0a101a) on a cool-grey canvas (#f7f8fa). Distinctive variable-font weights (530 / 650) via the Saans typeface."
19
+ colors:
20
+ primary: "#2a62db"
21
+ link: "#2453ba"
22
+ accent: "#0095ff"
23
+ ink: "#0a101a"
24
+ slate: "#243b53"
25
+ navy: "#102a43"
26
+ muted: "#486581"
27
+ slate-mid: "#537696"
28
+ grey: "#6e7a84"
29
+ faint: "#a7adb2"
30
+ canvas: "#f7f8fa"
31
+ hairline: "#d9e2ec"
32
+ hairline-soft: "#e5ebf2"
33
+ on-primary: "#ffffff"
34
+ black: "#000000"
35
+ typography:
36
+ family: { sans: "Saans" }
37
+ display-hero: { size: 56, weight: 650, lineHeight: 1.10, use: "Hero headline, Saans SemiBold-ish variable weight" }
38
+ blog-title: { size: 36, weight: 600, lineHeight: 1.20, use: "Blog article headline" }
39
+ subhead: { size: 22, weight: 530, lineHeight: 1.30, use: "Hero subheadline, muted slate" }
40
+ nav: { size: 15, weight: 500, lineHeight: 1.40, use: "Top nav item" }
41
+ body: { size: 16, weight: 400, lineHeight: 1.55, use: "Standard reading text" }
42
+ button: { size: 14, weight: 530, use: "Button / CTA label" }
43
+ tag: { size: 13, weight: 500, use: "Blog topic tag pill" }
44
+ spacing: { xs: 4, sm: 8, md: 12, base: 16, lg: 24, xl: 32, section: 48 }
45
+ rounded: { sm: 4, md: 8, lg: 12, xl: 32, full: 360 }
46
+ shadow:
47
+ elevated: "rgba(0,0,0,0.25) 0px 0px 35px 0px"
48
+ none: "none"
49
+ components:
50
+ button-primary: { type: button, bg: "#2a62db", fg: "#ffffff", radius: "4px", height: "32px", padding: "0 12px", font: "14px / 530", use: "Get started primary CTA" }
51
+ button-secondary: { type: button, bg: "#ffffff", fg: "#000000", radius: "4px", height: "32px", padding: "0 12px", font: "14px / 530", use: "Talk to an engineer secondary CTA" }
52
+ feature-card: { type: card, bg: "#ffffff", border: "1px solid #d9e2ec", radius: "32px", padding: "32px", use: "Feature card in homepage grid" }
53
+ elevated-card: { type: card, bg: "#ffffff", radius: "5px", shadow: "rgba(0,0,0,0.25) 0px 0px 35px", padding: "30px", use: "Elevated spotlight card" }
54
+ tag-pill: { type: badge, bg: "#ffffff", fg: "#243b53", border: "1px solid #d9e2ec", radius: "360px", padding: "4px 12px", font: "13px / 500", use: "Blog topic tag pill" }
55
+ highlight-badge: { type: badge, bg: "#0a101a", fg: "#ffffff", radius: "360px", padding: "4px 12px", font: "14px / 500", use: "HIGHLIGHTS label badge" }
56
+ search-input: { type: input, bg: "#ffffff", border: "1px solid #d9e2ec", radius: "360px", padding: "9px 40px", font: "14px", use: "Blog search input, pill" }
57
+ nav-link: { type: tab, fg: "#0a101a", font: "15px / 500", active: "text #2453ba", use: "Top nav item" }
58
+ components_harvested: true
59
+ ---
60
+
61
+ # Design System Inspiration of FriendliAI
62
+
63
+ ## 1. Visual Theme & Atmosphere
64
+
65
+ FriendliAI (프렌들리에이아이) is a Korean AI-infrastructure company whose homepage presents itself as "The Frontier AI Inference Cloud" — and the design reads exactly like that positioning: technical, exact, and quietly confident, the visual language of a systems company that sells throughput and reliability to engineers. The canvas is not pure white but a soft cool-grey (`#f7f8fa`) that keeps large marketing surfaces calm and screen-friendly, with white (`#ffffff`) reserved for the cards and panels that carry content. Text sits in a deep near-black navy (`#0a101a`) rather than true black for body, giving the page an engineered, blue-cool temperature that matches the product domain — GPUs, tokens, and latency graphs.
66
+
67
+ The single saturated brand color is a decisive royal blue: the primary "Get started" CTA fills with `#2a62db`, while inline links run a marginally deeper, more legible blue (`#2453ba`) that appears hundreds of times across the body copy. A brighter electric blue (`#0095ff`) is held in reserve for the top announcement banner and accent graphics, so the palette climbs in energy from the muted body text up to the loud "ship-now" banner. The rest of the system is a disciplined cool-grey ladder — dark slate (`#243b53`), deep navy (`#102a43`), muted slate (`#486581`), a mid slate (`#537696`), a neutral grey (`#6e7a84`), and a faint grey (`#a7adb2`) — that handles every level of secondary text and dark section.
68
+
69
+ What distinguishes FriendliAI typographically is its use of **Saans**, a contemporary grotesk deployed as a variable font at unusually precise weights: the hero headline runs at weight **650** (between SemiBold and Bold), subheads at **530**, and CTA labels at **530** — not the default 400/500/600/700 rungs most sites reach for. This micro-tuned weight scale is the brand's typographic signature: it reads as engineered rather than decorated. Depth is minimal — most separation comes from `#d9e2ec` hairlines and the cool-grey canvas — but the system does keep one dramatic elevation for spotlight cards (a soft `rgba(0,0,0,0.25) 0px 0px 35px` ambient glow). Geometry is split: sharp 4px radii on buttons, generous 32px radii on feature cards, and full 360px pills on tags and the search field.
70
+
71
+ **Key Characteristics:**
72
+ - Saans grotesk at micro-tuned variable weights — hero at 650, subhead/buttons at 530, not the usual 400/600/700 rungs
73
+ - Royal-blue action color (`#2a62db`) for CTAs, deeper blue (`#2453ba`) for inline links
74
+ - Cool-grey canvas (`#f7f8fa`) with white (`#ffffff`) cards — never a stark white page
75
+ - Near-black navy (`#0a101a`) body text instead of pure black, for an engineered cool temperature
76
+ - Bright electric blue (`#0095ff`) reserved for the top announcement banner and accents
77
+ - Disciplined cool-grey text ladder: `#243b53` → `#486581` → `#537696` → `#6e7a84` → `#a7adb2`
78
+ - Split geometry — 4px button corners, 32px card corners, 360px full pills for tags/search
79
+ - Mostly flat: `#d9e2ec` hairlines carry separation, with one soft ambient glow for spotlight cards
80
+
81
+ ## 2. Color Palette & Roles
82
+
83
+ ### Primary & Action
84
+ - **Friendli Blue** (`#2a62db`): Primary brand and action color. Fills the "Get started" CTA — the system's single primary action.
85
+ - **Link Blue** (`#2453ba`): The inline link and active-nav color; a slightly deeper, more legible blue than the CTA. The most frequent non-neutral color in body copy.
86
+ - **Electric Blue** (`#0095ff`): A brighter accent held for the top announcement banner ("GLM-5.2 is live…") and highlight graphics.
87
+
88
+ ### Ink & Dark
89
+ - **Ink Navy** (`#0a101a`): Primary text and heading color; a near-black navy used instead of pure black. Also the fill of the dark HIGHLIGHTS badge.
90
+ - **Dark Slate** (`#243b53`): Dark-section background and the text color of white topic-tag pills.
91
+ - **Deep Navy** (`#102a43`): The darkest section background, for immersive brand blocks.
92
+ - **Pure Black** (`#000000`): Occasional maximum-contrast label (e.g. the secondary "Talk to an engineer" button text).
93
+
94
+ ### Neutral & Text Ladder
95
+ - **Muted Slate** (`#486581`): Hero subheadline and secondary headings.
96
+ - **Mid Slate** (`#537696`): Lower-emphasis links such as "Log in".
97
+ - **Grey** (`#6e7a84`): Tertiary body text and metadata.
98
+ - **Faint Grey** (`#a7adb2`): Lowest-emphasis labels, disabled text, placeholders.
99
+
100
+ ### Surface & Border
101
+ - **Canvas Grey** (`#f7f8fa`): The default page background — a cool near-white that keeps marketing surfaces calm.
102
+ - **Pure White** (`#ffffff`): Cards, panels, buttons, and text on blue/dark.
103
+ - **Hairline** (`#d9e2ec`): The primary separation device — card borders, the search-input outline, dividers.
104
+ - **Hairline Soft** (`#e5ebf2`): A lighter hairline used on inline links and subtle borders.
105
+ - **On-Primary** (`#ffffff`): Text/icon color on the blue CTA and dark badges.
106
+
107
+ ## 3. Typography Rules
108
+
109
+ ### Font Family
110
+ - **Sans**: `Saans` (served as `SaansLocalFont` with a local fallback) — used for every text element, from hero to nav to body. FriendliAI does not split display and body across two families; Saans carries the whole system.
111
+
112
+ ### Hierarchy
113
+
114
+ | Role | Font | Size | Weight | Line Height | Notes |
115
+ |------|------|------|--------|-------------|-------|
116
+ | Display Hero | Saans | 56px (3.50rem) | 650 | 1.10 (tight) | Hero H1 "The Frontier AI Inference Cloud" |
117
+ | Blog Title | Saans | 36px (2.25rem) | 600 | 1.20 | Blog article headline |
118
+ | Hero Subhead | Saans | 22px (1.38rem) | 530 | 1.30 | Muted-slate (`#486581`) supporting line |
119
+ | Nav Item | Saans | 15px (0.94rem) | 500 | 1.40 | Top navigation links |
120
+ | Body | Saans | 16px (1.00rem) | 400 | 1.55 (24.8px) | Standard reading text |
121
+ | Button | Saans | 14px (0.88rem) | 530 | — | CTA / button labels |
122
+ | Tag | Saans | 13px (0.81rem) | 500 | — | Blog topic-tag pills |
123
+
124
+ ### Principles
125
+ - **Micro-tuned variable weights**: The signature choice. Saans runs at 650 for the hero, 530 for subheads and buttons, 600 for blog titles — precise interpolations rather than the default 400/500/600/700 rungs. The weight scale itself signals engineering rigor.
126
+ - **One family, all roles**: Saans covers display, nav, body, and UI. Hierarchy is built from size and variable weight, not from swapping typefaces.
127
+ - **Cool near-black body**: Body text is `#0a101a` navy, not pure black — the same cool temperature as the product's data-heavy surfaces.
128
+ - **Comfortable body rhythm**: Body sits at 16px with a generous 1.55 line-height (24.8px), keeping long technical paragraphs readable.
129
+
130
+ ## 4. Component Stylings
131
+
132
+ ### Buttons
133
+
134
+ **Get Started (Primary)**
135
+ - Background: `#2a62db`
136
+ - Text: `#ffffff`
137
+ - Radius: 4px
138
+ - Padding: 0px 12px
139
+ - Height: 32px
140
+ - Font: 14px Saans weight 530
141
+ - Use: Header and hero primary CTA — the system's single primary action
142
+
143
+ **Talk to an Engineer (Secondary)**
144
+ - Background: `#ffffff`
145
+ - Text: `#000000`
146
+ - Radius: 4px
147
+ - Padding: 0px 12px
148
+ - Height: 32px
149
+ - Font: 14px Saans weight 530
150
+ - Use: Secondary header CTA, sitting beside the primary blue button
151
+
152
+ **Log in (Quiet)**
153
+ - Text: `#537696`
154
+ - Radius: 4px
155
+ - Padding: 0px 4px
156
+ - Height: 32px
157
+ - Font: 14px Saans weight 530
158
+ - Use: Lowest-emphasis text link in the header
159
+
160
+ ### Inputs & Forms
161
+
162
+ **Search (Pill)**
163
+ - Background: `#ffffff`
164
+ - Border: 1px solid `#d9e2ec`
165
+ - Radius: 360px
166
+ - Padding: 9px 40px
167
+ - Font: 14px Saans
168
+ - Use: Blog search field — a full-pill input with a leading search icon ("Search blogs")
169
+
170
+ ### Cards & Containers
171
+
172
+ **Feature Card**
173
+ - Background: `#ffffff`
174
+ - Border: 1px solid `#d9e2ec`
175
+ - Radius: 32px
176
+ - Padding: 32px
177
+ - Use: Feature card in the homepage grid — large rounded corners, hairline border, no shadow
178
+
179
+ **Elevated Spotlight Card**
180
+ - Background: `#ffffff`
181
+ - Radius: 5px
182
+ - Padding: 30px
183
+ - Shadow: `rgba(0,0,0,0.25) 0px 0px 35px 0px`
184
+ - Use: A single elevated card with a soft ambient glow, used to spotlight a headline result
185
+
186
+ ### Badges
187
+
188
+ **Topic Tag Pill**
189
+ - Background: `#ffffff`
190
+ - Text: `#243b53`
191
+ - Border: 1px solid `#d9e2ec`
192
+ - Radius: 360px
193
+ - Padding: 4px 12px
194
+ - Font: 13px Saans weight 500
195
+ - Use: Blog topic tags ("GLM-5.2", "Inference", "NVIDIA")
196
+
197
+ **HIGHLIGHTS Badge**
198
+ - Background: `#0a101a`
199
+ - Text: `#ffffff`
200
+ - Radius: 360px
201
+ - Padding: 4px 12px
202
+ - Font: 14px Saans weight 500
203
+ - Use: Dark section label on the blog ("HIGHLIGHTS")
204
+
205
+ ### Navigation
206
+ - Background: `#ffffff`
207
+ - Text: `#0a101a`
208
+ - Font: 15px Saans weight 500
209
+ - Active: link blue `#2453ba`
210
+ - Use: Top horizontal nav ("Product", "Solutions", "Models", "Developers", "Customers", "Company", "Pricing")
211
+
212
+ ---
213
+
214
+ **Verified:** 2026-07-02 (omd:add-reference CREATE — Tier 1 live inspect, 2 surfaces)
215
+ **Tier 1 sources:** https://friendli.ai/, https://friendli.ai/blog, https://docs.friendli.ai/guides/intro
216
+ **Tier 2 sources:** getdesign.md/friendliai — 0 DESIGN.md files (no entry); styles.refero.design/?q=friendli — no FriendliAI match (default browse grid returned)
217
+ **Conflicts unresolved:** none
218
+
219
+ ## 5. Layout Principles
220
+
221
+ ### Spacing System
222
+ - Base unit: 4px
223
+ - Scale: 4px, 8px, 12px, 16px, 24px, 30px, 32px, 48px
224
+ - Notable: Card padding lands at a generous 32px; buttons stay compact at 0px 12px horizontal for a tight, dense header
225
+
226
+ ### Grid & Container
227
+ - Centered single-column hero with the 56px Saans headline as the anchor, muted subhead beneath
228
+ - Feature sections use a multi-column grid of 32px-radius white cards on the grey canvas
229
+ - A sticky top announcement banner (`#0095ff`) rides above the nav for launch news
230
+ - Dark immersive sections use `#102a43` / `#243b53` backgrounds with white text
231
+
232
+ ### Whitespace Philosophy
233
+ - **Calm canvas, contained content**: The cool-grey (`#f7f8fa`) canvas keeps the page quiet; content is pulled into white cards so data and copy sit on clean surfaces.
234
+ - **Hairline separation**: Sections and cards separate with `#d9e2ec` hairlines rather than heavy shadow, keeping the system flat and fast.
235
+ - **One glow, used sparingly**: The single ambient `rgba(0,0,0,0.25) 0px 0px 35px` shadow appears only on a spotlight card, so elevation reads as intentional emphasis.
236
+
237
+ ### Border Radius Scale
238
+ - Small (4px): buttons, quiet links
239
+ - Medium (8px): inline chrome, small containers
240
+ - Large (12px): mid-size panels
241
+ - Extra-large (32px): feature cards — the distinctive soft-cornered block
242
+ - Full (360px): tag pills, the search input, round chips
243
+
244
+ ## 6. Depth & Elevation
245
+
246
+ | Level | Treatment | Use |
247
+ |-------|-----------|-----|
248
+ | Flat (Level 0) | No shadow | Page background, body text, most sections |
249
+ | Tint (Level 1) | `#f7f8fa` canvas vs `#ffffff` card | Card/section separation without elevation |
250
+ | Hairline (Level 2) | `1px solid #d9e2ec` border | Feature-card outlines, search input, dividers |
251
+ | Ambient (Level 3) | `rgba(0,0,0,0.25) 0px 0px 35px 0px` | The single spotlight card — a soft symmetric glow |
252
+
253
+ **Shadow Philosophy**: FriendliAI is a near-flat system. Nav, hero, feature cards, and tags carry no shadow; grouping is done with the cool-grey canvas (`#f7f8fa`) and `#d9e2ec` hairlines. The one exception is a symmetric ambient glow (`rgba(0,0,0,0.25) 0px 0px 35px 0px`) reserved for a single spotlight card, so elevation is a deliberate signal of "look here" rather than a default decoration. This restraint reads as engineered — depth is a tool, not a texture.
254
+
255
+ ## 7. Do's and Don'ts
256
+
257
+ ### Do
258
+ - Use Saans at its micro-tuned variable weights (650 hero, 530 subhead/buttons, 600 blog titles) — the precise weight scale is the brand voice
259
+ - Reserve `#2a62db` for the primary CTA and `#2453ba` for inline links — keep blue as the single action/interaction color
260
+ - Set body and headings in near-black navy (`#0a101a`), not pure black
261
+ - Sit content on white (`#ffffff`) cards over the cool-grey (`#f7f8fa`) canvas
262
+ - Separate cards and sections with `#d9e2ec` hairlines, not shadows
263
+ - Use 32px radii on feature cards and 360px pills on tags and the search field
264
+ - Hold the bright electric blue (`#0095ff`) for the announcement banner and accents only
265
+ - Keep buttons compact (32px height, 4px radius, 0px 12px padding) for a dense, engineered header
266
+
267
+ ### Don't
268
+ - Reach for the default 400/600/700 weight rungs — Saans is tuned to 530/650, and generic weights break the signature
269
+ - Spread blue across many elements — it dilutes the single-action signal
270
+ - Use pure black (`#000000`) for body text — reserve near-black navy `#0a101a` (black is only the secondary-button label)
271
+ - Stack heavy drop shadows on cards — the system is flat, with one intentional ambient glow
272
+ - Put the whole page on stark white — the cool-grey `#f7f8fa` canvas is the base
273
+ - Use sharp square corners on tags or the search field — those are full pills
274
+ - Mix in a second saturated hue — the blues are the only accents on the neutral ladder
275
+
276
+ ## 8. Responsive Behavior
277
+
278
+ ### Breakpoints
279
+ | Name | Width | Key Changes |
280
+ |------|-------|-------------|
281
+ | Mobile | <640px | Single column, hero compresses, feature cards stack, nav collapses to a menu |
282
+ | Tablet | 640-1024px | 2-column feature grid, moderate padding |
283
+ | Desktop | 1024-1440px | Full multi-column layout, centered hero, sticky announcement banner |
284
+
285
+ ### Touch Targets
286
+ - Primary/secondary buttons at 32px height with 12px horizontal padding
287
+ - Tag pills and the search input use full 360px radius for clear, tappable shapes
288
+ - Nav items spaced within a comfortable header band
289
+
290
+ ### Collapsing Strategy
291
+ - Hero: 56px Saans headline scales down on mobile; weight 650 maintained
292
+ - Feature cards: multi-column grid → 2-up → single stacked column, 32px radius preserved
293
+ - Announcement banner: full-width `#0095ff` bar persists, text truncates
294
+ - Dark sections: maintain full-width `#102a43` / `#243b53` treatment, reduce internal padding
295
+
296
+ ### Image Behavior
297
+ - Product/architecture diagrams sit inside white cards with hairline borders
298
+ - Cards maintain 32px radius across breakpoints
299
+ - The spotlight card keeps its ambient glow at all sizes
300
+
301
+ ## 9. Agent Prompt Guide
302
+
303
+ ### Quick Color Reference
304
+ - Primary CTA: Friendli Blue (`#2a62db`)
305
+ - Inline link / active nav: Link Blue (`#2453ba`)
306
+ - Announcement / accent: Electric Blue (`#0095ff`)
307
+ - Heading / body text: Ink Navy (`#0a101a`)
308
+ - Dark section: Deep Navy (`#102a43`) / Dark Slate (`#243b53`)
309
+ - Subhead / secondary text: Muted Slate (`#486581`)
310
+ - Quiet link: Mid Slate (`#537696`)
311
+ - Tertiary text: Grey (`#6e7a84`)
312
+ - Faint / disabled: Faint Grey (`#a7adb2`)
313
+ - Canvas: Canvas Grey (`#f7f8fa`)
314
+ - Card / surface: Pure White (`#ffffff`)
315
+ - Border: Hairline (`#d9e2ec`), Hairline Soft (`#e5ebf2`)
316
+ - Secondary-button label: Pure Black (`#000000`)
317
+
318
+ ### Example Component Prompts
319
+ - "Create a hero on a `#f7f8fa` canvas. Headline at 56px Saans weight 650, line-height 1.10, color `#0a101a`. Subhead at 22px weight 530, color `#486581`. Primary CTA: `#2a62db` background, white text, 4px radius, 32px height, 0px 12px padding, 14px weight 530 — 'Get started'. Beside it a white secondary button (`#ffffff` bg, `#000000` text, 4px radius) — 'Talk to an engineer'."
320
+ - "Design a feature card: white `#ffffff` background, 1px solid `#d9e2ec` border, 32px radius, 32px padding, no shadow. Title in `#0a101a`, body in `#6e7a84`."
321
+ - "Build a topic tag pill: white background, `#243b53` text, 1px solid `#d9e2ec` border, 360px radius, 4px 12px padding, 13px Saans weight 500."
322
+ - "Create a top nav on white: Saans 15px weight 500 items in `#0a101a`, active item in link blue `#2453ba`. Right-aligned `#2a62db` 'Get started' pill-adjacent button."
323
+
324
+ ### Iteration Guide
325
+ 1. Saans everywhere; hero at weight 650, subheads/buttons at 530, blog titles at 600
326
+ 2. `#2a62db` is the CTA, `#2453ba` is the link — keep blue as the single interaction color
327
+ 3. Content on white `#ffffff` cards over the `#f7f8fa` grey canvas
328
+ 4. Separate with `#d9e2ec` hairlines; reserve the one `rgba(0,0,0,0.25) 0px 0px 35px` glow for a spotlight card
329
+ 5. Split geometry: 4px buttons, 32px feature cards, 360px pills
330
+ 6. Body/heading text is `#0a101a` navy, never pure black
331
+ 7. Hold `#0095ff` for the announcement banner and accents only
332
+
333
+ ---
334
+
335
+ ## 10. Voice & Tone
336
+
337
+ FriendliAI's voice is **precise, benchmark-driven, and developer-first** — the register of an infrastructure company that competes on measurable performance (throughput, latency, cost) and lets the numbers do the persuading. The hero line "The Frontier AI Inference Cloud" is declarative and category-claiming, not hypey; the supporting line "Inference performance drives profitability" frames the pitch in a business outcome an engineer can defend to finance. Announcements are concrete and comparative ("GLM-5.2 is live. #1 throughput on OpenRouter"), naming the exact model and the exact metric rather than reaching for adjectives.
338
+
339
+ | Context | Tone |
340
+ |---|---|
341
+ | Hero headline | Declarative, category-claiming. "The Frontier AI Inference Cloud." No superlatives. |
342
+ | Supporting line | Business-outcome framed. "Inference performance drives profitability." |
343
+ | Announcements | Concrete and comparative — names the model and the metric. "#1 throughput on OpenRouter." |
344
+ | CTAs | Direct, low-friction. "Get started", "Talk to an engineer". |
345
+ | Blog / technical | Engineer-to-engineer: benchmarks, model names, architecture, reproducible claims. |
346
+
347
+ **Voice samples (verbatim from live surfaces):**
348
+ - "The Frontier AI Inference Cloud" — hero H1 (category claim). *(verified live 2026-07-02, friendli.ai)*
349
+ - "Inference performance drives profitability" — hero subhead (business framing). *(verified live 2026-07-02, friendli.ai)*
350
+ - "GLM-5.2 is live. #1 throughput on OpenRouter" — announcement banner (concrete, comparative). *(verified live 2026-07-02, friendli.ai)*
351
+ - "Talk to an engineer" — secondary CTA (developer-first, not "Book a demo"). *(verified live 2026-07-02, friendli.ai)*
352
+
353
+ **Forbidden register**: vague hype ("revolutionary", "game-changing"), unquantified performance claims, consumer-app exclamation, sales-gated basic functionality ("Request a demo" in place of "Get started"), stacked adjectives on capabilities.
354
+
355
+ ## 11. Brand Narrative
356
+
357
+ FriendliAI (프렌들리에이아이) is a Korean AI-infrastructure company built around a single problem: serving generative-AI models in production is slow and expensive, and the cost of inference — not training — is what determines whether an AI product is viable at scale. The company's answer is an inference cloud engineered for throughput and cost-efficiency, offered as dedicated endpoints, serverless endpoints, and self-hosted containers, so teams can run open and custom models without building serving infrastructure themselves. The homepage states the thesis plainly: *"Inference performance drives profitability."*
358
+
359
+ The brand's origin is academic and engineering-led — it grew out of systems research on efficient large-model serving, and its founding premise reframes inference from a fixed cost into an optimization surface. That research heritage shows up everywhere in the design: benchmark-first messaging, model names and metrics quoted verbatim, and a "Talk to an engineer" CTA that treats the visitor as a technical peer rather than a lead to be qualified.
360
+
361
+ What FriendliAI refuses, visible in its design: consumer-app hype and demo-gating (the primary CTA is "Get started", the secondary is "Talk to an engineer" — never "Request a demo" in their place), and the decorative heaviness of legacy enterprise software. What it embraces: a calm cool-grey canvas, one decisive blue, the micro-tuned Saans weight scale, and copy that quotes exact throughput numbers. It is the visual language of a company that expects to be judged on benchmarks.
362
+
363
+ ## 12. Principles
364
+
365
+ 1. **Numbers over adjectives.** Performance is stated as measurements ("#1 throughput on OpenRouter"), not superlatives. *UI implication:* surface concrete metrics — tokens/s, latency, cost — as first-class content, set in the tabular-friendly Saans; never replace a number with a boast.
366
+ 2. **Engineer as first-class user.** The buyer is technical. *UI implication:* the primary path is "Get started" and "Talk to an engineer" — self-serve and peer-to-peer, never "Request a demo" gating.
367
+ 3. **One action, one blue.** `#2a62db` means "do this"; `#2453ba` means "go here". *UI implication:* keep blue reserved for CTAs and links so the next step is never ambiguous on a dense technical page.
368
+ 4. **Flat and fast.** Depth is a tool, not a texture. *UI implication:* separate with the `#f7f8fa` canvas and `#d9e2ec` hairlines; reserve the single ambient glow for one spotlight moment.
369
+ 5. **Precision as personality.** The micro-tuned Saans weights (530, 650) are the brand's fingerprint. *UI implication:* honor the exact weight scale; generic 400/600/700 reads as a different, less rigorous product.
370
+
371
+ ## 13. Personas
372
+
373
+ *Personas below are fictional archetypes informed by publicly observable FriendliAI user segments (ML platform engineers, AI product teams, infrastructure leads), not individual people.*
374
+
375
+ **Daniel Cho, 33, Seoul.** ML platform engineer at a scale-up shipping an LLM feature. Cares about tokens-per-second and per-request cost more than brand. Chose FriendliAI after reading a throughput benchmark and being able to spin up an endpoint without a sales call.
376
+
377
+ **Priya Nair, 29, San Francisco.** Founding engineer at an AI startup running open models in production. Uses "Talk to an engineer" precisely because it is not "Book a demo" — she wants an architecture conversation, not a pitch. Trusts vendors who quote metrics she can reproduce.
378
+
379
+ **Marcus Feld, 41, Berlin.** Infrastructure lead at a mid-size SaaS integrating generative AI. Evaluates inference providers on cost predictability and reliability. Reads the FriendliAI blog for model-serving benchmarks and mentally downgrades any vendor whose landing page leans on unquantified "revolutionary" claims.
380
+
381
+ ## 14. States
382
+
383
+ | State | Treatment |
384
+ |---|---|
385
+ | **Empty (no endpoints yet)** | White `#ffffff` card on the `#f7f8fa` canvas. Single Ink Navy (`#0a101a`) line explaining no endpoints exist, with one `#2a62db` "Get started" CTA. No decorative illustration. |
386
+ | **Empty (no results / blog search)** | Muted Slate (`#486581`) single line stating nothing matched, with the search field (360px pill) kept visible to adjust the query. |
387
+ | **Loading (dashboard first paint)** | Skeleton blocks at final dimensions in Hairline (`#d9e2ec`) on the white card, 32px radius preserved. Flat pulse, no shadow shimmer. |
388
+ | **Loading (inference request in flight)** | Inline progress within the panel; previous values stay visible. A thin `#2a62db` indicator, never a full-screen block. |
389
+ | **Error (request failed)** | Inline message in Ink Navy with a plain-language explanation plus the concrete error/status and a retry. No generic "Something went wrong" alone. |
390
+ | **Error (form validation)** | Field-level message below the input; describes what is valid, not just "Required". |
391
+ | **Success (endpoint deployed)** | Brief inline confirmation in a calm tone; the endpoint detail and metrics linked immediately below. No celebratory emoji. |
392
+ | **Skeleton** | `#d9e2ec` blocks at final dimensions, matching card radius, flat pulse consistent with the near-flat system. |
393
+ | **Disabled** | Faint Grey (`#a7adb2`) text on a reduced-opacity surface; the blue CTA fades rather than turning grey, preserving the brand read. |
394
+
395
+ ## 15. Motion & Easing
396
+
397
+ **Durations**:
398
+
399
+ | Token | Value | Use |
400
+ |---|---|---|
401
+ | `motion-fast` | 120ms | Hover, button press, focus rings |
402
+ | `motion-standard` | 200ms | Card reveal, dropdown, sheet, tab change |
403
+ | `motion-slow` | 320ms | Page-level transitions, hero reveal |
404
+
405
+ **Easings**:
406
+
407
+ | Token | Curve | Use |
408
+ |---|---|---|
409
+ | `ease-enter` | `cubic-bezier(0.2, 0.6, 0.25, 1)` | Arriving — cards, dropdowns, panels |
410
+ | `ease-exit` | `cubic-bezier(0.4, 0.0, 1, 1)` | Dismissals |
411
+ | `ease-standard` | `cubic-bezier(0.25, 0.1, 0.25, 1)` | Two-way transitions |
412
+
413
+ **Motion rules**: Motion is functional and quiet, matching the engineered, near-flat aesthetic. Buttons respond to press with a subtle opacity/scale shift; feature cards and benchmark panels fade-in from below at `motion-standard / ease-enter`. The one ambient-glow spotlight card may intensify its glow slightly on hover, but nothing bounces or springs — an inference-infrastructure product signals steadiness and reliability, not playfulness. Under `prefers-reduced-motion: reduce`, all transitions collapse to instant and the product remains fully functional.
414
+
415
+ <!--
416
+ OmD v0.1 Sources — Philosophy Layer (sections 10-15)
417
+
418
+ Tier 1 live inspect (2026-07-02) via playwright getComputedStyle on:
419
+ - https://friendli.ai/ (homepage) — hero H1 "The Frontier AI Inference Cloud" (Saans 56px / weight 650 / color rgb(10,16,26) #0a101a); subhead H2 "Inference performance drives profitability" (22px / 530 / rgb(72,101,129) #486581); "Get started" CTA bg rgb(42,98,219) #2a62db / white / radius 4px / 32px height; "Talk to an engineer" bg white / black text; announcement banner "GLM-5.2 is live. #1 throughput on OpenRouter" bg rgb(0,149,255) #0095ff; feature cards white / 1px #d9e2ec / 32px radius; body font SaansLocalFont / rgb(10,16,26) / 16px / lh 24.8px; canvas rgb(247,248,250) #f7f8fa.
420
+ - https://friendli.ai/blog (blog) — blog H1 36px / weight 600; HIGHLIGHTS badge bg rgb(10,16,26) #0a101a / white / 360px pill; topic tag pills white / rgb(36,59,83) #243b53 / 360px; search input white / 1px rgb(217,226,236) #d9e2ec / 360px pill.
421
+
422
+ Token-level claims (§1-9) are sourced from this live inspection (see web/references/friendliai/.verification.md for raw samples).
423
+
424
+ Voice samples (§10) are verbatim from the live homepage (hero H1, subhead H2, announcement banner, secondary CTA).
425
+
426
+ Brand narrative (§11): FriendliAI (프렌들리에이아이) is a Korean AI-infrastructure company providing a generative-AI inference cloud (dedicated endpoints, serverless endpoints, containers). The company positioning "The Frontier AI Inference Cloud" and "Inference performance drives profitability" are verbatim from the live homepage. Founding/heritage framing (systems research on efficient large-model serving) is general public knowledge about the company, not a directly quoted FriendliAI statement in this turn; product structure (dedicated/serverless endpoints, container) reflects the site's Product/Solutions navigation observed live.
427
+
428
+ Personas (§13) are fictional archetypes informed by publicly observable FriendliAI user segments (ML platform engineers, AI product teams, infrastructure leads). Names are illustrative; they do not refer to real people.
429
+
430
+ Interpretive claims (e.g., "numbers over adjectives", "engineer as first-class user", "precision as personality") are editorial readings connecting FriendliAI's observed design and copy to its positioning, not directly sourced FriendliAI statements.
431
+ -->