oh-my-design-cli 1.8.7 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. package/.claude/hooks/lib/preferences-parser.cjs +1 -0
  2. package/.claude/hooks/lib/preferences-writer.cjs +1 -0
  3. package/.claude/hooks/post-edit-watch.cjs +1 -0
  4. package/.claude/hooks/session-end-foldin.cjs +1 -0
  5. package/.claude/hooks/session-state-loader.cjs +1 -0
  6. package/.claude/hooks/skill-activation.cjs +1 -0
  7. package/.claude/settings.json +10 -1
  8. package/.github/assets/logo-bg.png +0 -0
  9. package/AGENTS.md +20 -1
  10. package/CHANGELOG.md +482 -0
  11. package/MIGRATION.md +103 -0
  12. package/README.ja.md +56 -19
  13. package/README.ko.md +47 -30
  14. package/README.md +48 -30
  15. package/README.zh-TW.md +59 -22
  16. package/agents/AGENT.md +8 -7
  17. package/agents/omd-codex-image.md +1 -1
  18. package/agents/omd-critic.md +6 -7
  19. package/agents/omd-designer-review.md +1 -1
  20. package/agents/omd-final-qa.md +1 -1
  21. package/agents/omd-humanizer.md +38 -0
  22. package/agents/omd-kr-writer.md +3 -4
  23. package/agents/omd-locale-adapter.md +12 -16
  24. package/agents/omd-master.md +24 -19
  25. package/agents/omd-microcopy.md +1 -1
  26. package/agents/omd-orchestrator.md +7 -8
  27. package/agents/omd-slop-auditor.md +31 -0
  28. package/agents/omd-ux-researcher.md +1 -1
  29. package/data/reference-fingerprints.json +1995 -38
  30. package/dist/bin/oh-my-design.js +16 -8
  31. package/dist/bin/oh-my-design.js.map +1 -1
  32. package/dist/chunk-UJIHCEYF.js +99 -0
  33. package/dist/chunk-UJIHCEYF.js.map +1 -0
  34. package/dist/doctor-LDWSFM3I.js +763 -0
  35. package/dist/doctor-LDWSFM3I.js.map +1 -0
  36. package/dist/install-skills-ZZFNJ2II.js +1120 -0
  37. package/dist/install-skills-ZZFNJ2II.js.map +1 -0
  38. package/docs/CLI_QUICKSTART.md +157 -0
  39. package/package.json +25 -4
  40. package/scripts/postinstall.cjs +5 -4
  41. package/skills/claude-design/SKILL.md +38 -14
  42. package/skills/claude-design/references/claude-design-flow.md +11 -11
  43. package/skills/claude-design/references/codebase-analysis.md +5 -4
  44. package/skills/omd-final-qa/SKILL.md +1 -1
  45. package/skills/omd-harness/SKILL.md +51 -50
  46. package/skills/omd-humanize/SKILL.md +116 -0
  47. package/skills/omd-humanize/agents/openai.yaml +4 -0
  48. package/skills/omd-humanize/references/locale-playbooks.md +102 -0
  49. package/skills/omd-humanize/references/sources.md +11 -0
  50. package/skills/omd-init/SKILL.md +18 -12
  51. package/skills/omd-locale-adapter/SKILL.md +58 -91
  52. package/skills/omd-orchestrator/SKILL.md +11 -5
  53. package/skills/omd-reference-capture/SKILL.md +80 -26
  54. package/skills/omd-reference-capture/scripts/PLAYWRIGHT-LICENSE.txt +202 -0
  55. package/skills/omd-reference-capture/scripts/PLAYWRIGHT-NOTICE.txt +5 -0
  56. package/skills/omd-reference-capture/scripts/THIRD_PARTY_NOTICES.md +3 -0
  57. package/skills/omd-reference-capture/scripts/capture-reference-evidence.mjs +159906 -0
  58. package/skills/omd-slop-audit/SKILL.md +110 -0
  59. package/skills/omd-slop-audit/agents/openai.yaml +4 -0
  60. package/skills/omd-slop-audit/references/pattern-catalog.md +96 -0
  61. package/skills/omd-slop-audit/references/sources.md +24 -0
  62. package/web/references/104/DESIGN.md +354 -0
  63. package/web/references/11st/DESIGN.md +197 -316
  64. package/web/references/29cm/DESIGN.md +297 -393
  65. package/web/references/42dot/DESIGN.md +390 -0
  66. package/web/references/8percent/DESIGN.md +438 -0
  67. package/web/references/ably/DESIGN.md +267 -572
  68. package/web/references/acer/DESIGN.md +329 -0
  69. package/web/references/airbnb/DESIGN.md +219 -557
  70. package/web/references/alipay/DESIGN.md +179 -420
  71. package/web/references/apple/DESIGN.md +224 -498
  72. package/web/references/asleep/DESIGN.md +402 -0
  73. package/web/references/au/DESIGN.md +334 -0
  74. package/web/references/autopedia/DESIGN.md +382 -0
  75. package/web/references/aws-cloudscape/DESIGN.md +241 -0
  76. package/web/references/baemin/DESIGN.md +332 -491
  77. package/web/references/banksalad/DESIGN.md +269 -180
  78. package/web/references/barogo/DESIGN.md +416 -0
  79. package/web/references/beusable/DESIGN.md +464 -0
  80. package/web/references/bilibili/DESIGN.md +206 -374
  81. package/web/references/bmw/DESIGN.md +162 -276
  82. package/web/references/brandi/DESIGN.md +184 -325
  83. package/web/references/catchtable/DESIGN.md +219 -264
  84. package/web/references/cgv/DESIGN.md +317 -0
  85. package/web/references/channeltalk/DESIGN.md +210 -336
  86. package/web/references/china-airlines/DESIGN.md +291 -0
  87. package/web/references/cjonstyle/DESIGN.md +453 -0
  88. package/web/references/class101/DESIGN.md +168 -387
  89. package/web/references/classum/DESIGN.md +228 -203
  90. package/web/references/claude/DESIGN.md +242 -479
  91. package/web/references/clay/DESIGN.md +179 -377
  92. package/web/references/clickhouse/DESIGN.md +254 -343
  93. package/web/references/cohere/DESIGN.md +214 -324
  94. package/web/references/coinone/DESIGN.md +199 -179
  95. package/web/references/corca/DESIGN.md +414 -0
  96. package/web/references/coupang/DESIGN.md +205 -475
  97. package/web/references/cursor/DESIGN.md +240 -381
  98. package/web/references/dabang/DESIGN.md +248 -213
  99. package/web/references/dable/DESIGN.md +431 -0
  100. package/web/references/datarize/DESIGN.md +217 -330
  101. package/web/references/dealicious/DESIGN.md +402 -0
  102. package/web/references/drdiary/DESIGN.md +404 -0
  103. package/web/references/elastic/DESIGN.md +238 -0
  104. package/web/references/elevenlabs/DESIGN.md +183 -321
  105. package/web/references/eslite/DESIGN.md +257 -0
  106. package/web/references/evaair/DESIGN.md +338 -0
  107. package/web/references/expo/DESIGN.md +238 -331
  108. package/web/references/familymart-tw/DESIGN.md +254 -0
  109. package/web/references/ferrari/DESIGN.md +160 -377
  110. package/web/references/figma/DESIGN.md +197 -451
  111. package/web/references/fitpet/DESIGN.md +445 -0
  112. package/web/references/flex/DESIGN.md +170 -253
  113. package/web/references/framer/DESIGN.md +197 -340
  114. package/web/references/freee/DESIGN.md +211 -533
  115. package/web/references/friendliai/DESIGN.md +431 -0
  116. package/web/references/frip/DESIGN.md +440 -0
  117. package/web/references/gangnamunni/DESIGN.md +154 -591
  118. package/web/references/gaudiolab/DESIGN.md +414 -0
  119. package/web/references/google/DESIGN.md +290 -398
  120. package/web/references/hashicorp/DESIGN.md +273 -318
  121. package/web/references/heydealer/DESIGN.md +429 -0
  122. package/web/references/humanscape/DESIGN.md +433 -0
  123. package/web/references/hyundai/DESIGN.md +158 -368
  124. package/web/references/hyundaicard/DESIGN.md +171 -121
  125. package/web/references/ibm/DESIGN.md +227 -378
  126. package/web/references/idus/DESIGN.md +450 -0
  127. package/web/references/igaworks/DESIGN.md +437 -0
  128. package/web/references/inflearn/DESIGN.md +221 -366
  129. package/web/references/intuit/DESIGN.md +244 -0
  130. package/web/references/jandi/DESIGN.md +191 -291
  131. package/web/references/jobplanet/DESIGN.md +415 -0
  132. package/web/references/kakao/DESIGN.md +287 -475
  133. package/web/references/kakaobank/DESIGN.md +220 -521
  134. package/web/references/kakaogames/DESIGN.md +220 -0
  135. package/web/references/kakaopay/DESIGN.md +207 -526
  136. package/web/references/karrot/DESIGN.md +227 -251
  137. package/web/references/kb-kookmin/DESIGN.md +308 -0
  138. package/web/references/kbank/DESIGN.md +220 -175
  139. package/web/references/kmong/DESIGN.md +281 -356
  140. package/web/references/krds/DESIGN.md +245 -19
  141. package/web/references/kream/DESIGN.md +224 -359
  142. package/web/references/kurly/DESIGN.md +211 -533
  143. package/web/references/lamborghini/DESIGN.md +198 -360
  144. package/web/references/lguplus/DESIGN.md +259 -0
  145. package/web/references/likelion/DESIGN.md +283 -0
  146. package/web/references/line/DESIGN.md +396 -355
  147. package/web/references/linear.app/DESIGN.md +209 -562
  148. package/web/references/lotteon/DESIGN.md +386 -0
  149. package/web/references/lovable/DESIGN.md +255 -349
  150. package/web/references/makinarocks/DESIGN.md +149 -349
  151. package/web/references/maum-ai/DESIGN.md +423 -0
  152. package/web/references/medibloc/DESIGN.md +425 -0
  153. package/web/references/megabox/DESIGN.md +232 -0
  154. package/web/references/mercari/DESIGN.md +217 -434
  155. package/web/references/microsoft/DESIGN.md +234 -388
  156. package/web/references/mildang/DESIGN.md +411 -0
  157. package/web/references/millie/DESIGN.md +183 -504
  158. package/web/references/minimax/DESIGN.md +264 -322
  159. package/web/references/miricanvas/DESIGN.md +182 -355
  160. package/web/references/miro/DESIGN.md +234 -232
  161. package/web/references/mistral.ai/DESIGN.md +231 -314
  162. package/web/references/mixi/DESIGN.md +234 -0
  163. package/web/references/moin/DESIGN.md +445 -0
  164. package/web/references/mongodb/DESIGN.md +219 -316
  165. package/web/references/musinsa/DESIGN.md +184 -510
  166. package/web/references/mynavi/DESIGN.md +242 -0
  167. package/web/references/myrealtrip/DESIGN.md +169 -406
  168. package/web/references/naver/DESIGN.md +328 -499
  169. package/web/references/naverwebtoon/DESIGN.md +172 -395
  170. package/web/references/nhn/DESIGN.md +169 -346
  171. package/web/references/nhncloud/DESIGN.md +185 -123
  172. package/web/references/notion/DESIGN.md +271 -475
  173. package/web/references/nrise/DESIGN.md +417 -0
  174. package/web/references/ohouse/DESIGN.md +210 -549
  175. package/web/references/oliveyoung/DESIGN.md +217 -326
  176. package/web/references/ollama/DESIGN.md +241 -308
  177. package/web/references/onestore/DESIGN.md +248 -0
  178. package/web/references/palantir/DESIGN.md +256 -0
  179. package/web/references/panasonic/DESIGN.md +276 -0
  180. package/web/references/patternfly/DESIGN.md +259 -0
  181. package/web/references/payhere/DESIGN.md +438 -0
  182. package/web/references/pega/DESIGN.md +262 -0
  183. package/web/references/peoplefund/DESIGN.md +431 -0
  184. package/web/references/petfriends/DESIGN.md +428 -0
  185. package/web/references/pinkfong/DESIGN.md +199 -367
  186. package/web/references/pinterest/DESIGN.md +258 -308
  187. package/web/references/poya/DESIGN.md +286 -0
  188. package/web/references/pozalabs/DESIGN.md +438 -0
  189. package/web/references/protopie/DESIGN.md +419 -0
  190. package/web/references/qraft/DESIGN.md +448 -0
  191. package/web/references/quotabook/DESIGN.md +449 -0
  192. package/web/references/recruit/DESIGN.md +247 -0
  193. package/web/references/remember/DESIGN.md +202 -396
  194. package/web/references/resend/DESIGN.md +274 -348
  195. package/web/references/sakura-internet/DESIGN.md +269 -0
  196. package/web/references/samsung/DESIGN.md +157 -359
  197. package/web/references/sandoll/DESIGN.md +445 -0
  198. package/web/references/sanity/DESIGN.md +241 -375
  199. package/web/references/scatterlab/DESIGN.md +412 -0
  200. package/web/references/selectstar/DESIGN.md +439 -0
  201. package/web/references/servicenow/DESIGN.md +289 -0
  202. package/web/references/shinhanbank/DESIGN.md +161 -341
  203. package/web/references/shinhancard/DESIGN.md +208 -319
  204. package/web/references/sionic/DESIGN.md +454 -0
  205. package/web/references/sktelecom/DESIGN.md +310 -0
  206. package/web/references/socar/DESIGN.md +125 -32
  207. package/web/references/softbank/DESIGN.md +231 -0
  208. package/web/references/sony/DESIGN.md +234 -0
  209. package/web/references/soop/DESIGN.md +261 -0
  210. package/web/references/spacex/DESIGN.md +184 -323
  211. package/web/references/spotify/DESIGN.md +253 -394
  212. package/web/references/squeezebits/DESIGN.md +441 -0
  213. package/web/references/stayfolio/DESIGN.md +422 -0
  214. package/web/references/stripe/DESIGN.md +212 -491
  215. package/web/references/supabase/DESIGN.md +244 -316
  216. package/web/references/tabling/DESIGN.md +415 -0
  217. package/web/references/taishinbank/DESIGN.md +243 -0
  218. package/web/references/teamlab/DESIGN.md +240 -0
  219. package/web/references/teamsparta/DESIGN.md +472 -0
  220. package/web/references/tellingme/DESIGN.md +392 -0
  221. package/web/references/tesla/DESIGN.md +244 -427
  222. package/web/references/thsr/DESIGN.md +284 -0
  223. package/web/references/thumbtack/DESIGN.md +302 -0
  224. package/web/references/together.ai/DESIGN.md +257 -304
  225. package/web/references/toss/DESIGN.md +251 -593
  226. package/web/references/toss-securities/DESIGN.md +255 -178
  227. package/web/references/tossbank/DESIGN.md +195 -491
  228. package/web/references/toyota/DESIGN.md +238 -0
  229. package/web/references/tving/DESIGN.md +197 -245
  230. package/web/references/typed/DESIGN.md +413 -0
  231. package/web/references/uber/DESIGN.md +256 -333
  232. package/web/references/udn/DESIGN.md +250 -0
  233. package/web/references/upbit/DESIGN.md +145 -256
  234. package/web/references/upstage/DESIGN.md +211 -204
  235. package/web/references/uswds/DESIGN.md +287 -0
  236. package/web/references/vercel/DESIGN.md +236 -440
  237. package/web/references/wanted/DESIGN.md +215 -487
  238. package/web/references/wise/DESIGN.md +223 -231
  239. package/web/references/wisetracker/DESIGN.md +462 -0
  240. package/web/references/wooribank/DESIGN.md +245 -0
  241. package/web/references/yanolja/DESIGN.md +250 -419
  242. package/web/references/yeogiotte/DESIGN.md +235 -418
  243. package/web/references/zapier/DESIGN.md +256 -377
  244. package/web/references/zendesk/DESIGN.md +288 -0
  245. package/web/references/zigzag/DESIGN.md +200 -621
  246. package/dist/install-skills-7UUDOLG2.js +0 -734
  247. package/dist/install-skills-7UUDOLG2.js.map +0 -1
@@ -4,486 +4,345 @@ name: Spotify
4
4
  country: US
5
5
  category: consumer-tech
6
6
  homepage: "https://www.spotify.com"
7
- primary_color: "#1db954"
7
+ primary_color: "#1ed760"
8
8
  logo:
9
9
  type: simpleicons
10
10
  slug: spotify
11
- verified: "2026-05-15"
11
+ verified: "2026-07-13"
12
12
  omd: "0.1"
13
13
  tokens:
14
- source: prose-derived
15
- extracted: "2026-06-09"
14
+ source: reconciled
15
+ extracted: "2026-07-13"
16
16
  colors:
17
17
  primary: "#1ed760"
18
- brand: "#1ed760"
19
- brand-border: "#1db954"
20
- canvas: "#121212"
18
+ control: "#1f1f1f"
21
19
  foreground: "#ffffff"
22
20
  muted: "#b3b3b3"
23
- on-primary: "#000000"
24
- surface: "#181818"
25
- surface-mid: "#1f1f1f"
26
- surface-card: "#252525"
27
- hairline: "#4d4d4d"
28
- border-light: "#7c7c7c"
29
- error: "#f3727f"
30
- warning: "#ffa42b"
31
- info: "#539df5"
21
+ outline: "#7c7c7c"
32
22
  typography:
33
- family: { sans: "SpotifyMixUI", mono: "SpotifyMixUI" }
34
- section-title: { size: 24, weight: 700, use: "Bold section titles (SpotifyMixUITitle)" }
35
- feature-heading: { size: 18, weight: 600, lineHeight: 1.30, use: "Semibold section heads" }
36
- body-bold: { size: 16, weight: 700, use: "Emphasized text" }
37
- body: { size: 16, weight: 400, use: "Standard body" }
38
- button: { size: 14, weight: 700, tracking: 1.4, use: "Uppercase button label" }
39
- nav: { size: 14, weight: 400, use: "Navigation links" }
40
- small: { size: 12, weight: 400, use: "Tags, counts, fine print" }
41
- badge: { size: 10.5, weight: 600, lineHeight: 1.33, use: "Badge text, capitalize" }
42
- micro: { size: 10, weight: 400, use: "Smallest text" }
43
- spacing: { xs: 4, sm: 8, md: 12, base: 16, lg: 24, xl: 32, xxl: 48 }
44
- rounded: { sm: 4, md: 8, lg: 16, full: 9999 }
45
- shadow:
46
- heavy: "rgba(0,0,0,0.5) 0px 8px 24px"
47
- medium: "rgba(0,0,0,0.3) 0px 8px 8px"
48
- inset-border: "rgb(18,18,18) 0px 1px 0px, rgb(124,124,124) 0px 0px 0px 1px inset"
49
- components_harvested: true
23
+ family:
24
+ ui: "SpotifyMixUI"
25
+ title: "SpotifyMixUITitle"
26
+ body: { size: 16, weight: 400, use: "Product-player body and input text" }
27
+ action: { size: 14, weight: 700, use: "Compact player action labels" }
28
+ rounded:
29
+ search: 500
30
+ control: 9999
31
+ components_harvested: false
50
32
  components:
51
- button-primary: { type: button, bg: "#1ed760", fg: "#000000", radius: "9999px", padding: "12px 32px", font: "14px / 700", hover: "scale(1.04) + brightness", use: "Primary brand CTA (Get Spotify Free, Premium)" }
52
- button-dark-pill: { type: button, bg: "#1f1f1f", fg: "#ffffff", radius: "9999px", padding: "8px 16px", font: "14px / 700", use: "Navigation pills, secondary actions on dark" }
53
- button-light-pill: { type: button, bg: "#ffffff", fg: "#121212", radius: "500px", padding: "16px 48px", font: "16px / 700", use: "Light-mode CTAs (cookie consent, marketing)" }
54
- button-outline: { type: button, bg: "transparent", fg: "#ffffff", border: "1px solid #7c7c7c", radius: "9999px", padding: "4px 16px 4px 36px", font: "14px / 700", use: "Follow buttons, secondary actions" }
55
- button-play: { type: button, bg: "#1f1f1f", fg: "#ffffff", radius: "50%", padding: "12px", font: "14px / 700", hover: "scale(1.06)", use: "Play/pause circular control" }
56
- input-search: { type: input, bg: "#1f1f1f", fg: "#ffffff", border: "1px solid transparent", radius: "500px", padding: "12px 16px 12px 48px", font: "14px / 400", focus: "1px solid #000000", use: "Top-bar pill search; placeholder #b3b3b3" }
57
- input: { type: input, bg: "#1f1f1f", fg: "#ffffff", border: "1px solid #7c7c7c", radius: "4px", padding: "8px 12px", font: "14px / 400", focus: "1px solid #1ed760", use: "Settings forms, playlist edit" }
58
- card: { type: card, bg: "#181818", fg: "#ffffff", radius: "8px", padding: "16px", hover: "bg #1f1f1f + scale(1.02) artwork", use: "Album/playlist grid card" }
59
- card-elevated: { type: card, bg: "#181818", fg: "#ffffff", radius: "8px", padding: "16px", shadow: "rgba(0,0,0,0.3) 0px 8px 8px", use: "Now playing, sticky/floating surfaces" }
60
- badge-nowplaying: { type: badge, bg: "transparent", fg: "#1ed760", radius: "2px", font: "11px / 700", use: "Playback indicator on active track row" }
61
- badge-genre: { type: badge, bg: "#3a3a3a", fg: "#ffffff", radius: "4px", padding: "2px 8px", font: "11px / 700", use: "Genre/mood tag on album header" }
33
+ player-search:
34
+ type: input
35
+ bg: "#1f1f1f"
36
+ fg: "#ffffff"
37
+ border: "0px solid #ffffff"
38
+ radius: "500px"
39
+ padding: "12px 96px 12px 48px"
40
+ font: "16px / 400 / SpotifyMixUI"
41
+ states: "focus, hover, and pressed snapshots observed"
42
+ use: "Open Spotify player search field; home and /search"
43
+ player-outlined-action:
44
+ type: button
45
+ bg: transparent
46
+ fg: "#ffffff"
47
+ border: "1px solid #7c7c7c"
48
+ radius: "9999px"
49
+ padding: "4px 16px 4px 36px"
50
+ font: "14px / 700 / SpotifyMixUI"
51
+ states: "focus, hover, and pressed snapshots observed"
52
+ use: "Compact outlined player action; home and /search"
53
+ player-icon-control:
54
+ type: button
55
+ bg: "#1f1f1f"
56
+ fg: "#ffffff"
57
+ radius: "50%"
58
+ padding: "12px"
59
+ font: "16px / 400 / SpotifyMixUI"
60
+ states: "hover and pressed snapshots observed"
61
+ use: "48px circular player icon control on the home surface"
62
+ newsroom-cta:
63
+ type: button
64
+ bg: "#1ed760"
65
+ fg: "#000000"
66
+ border: "1px solid #1ed760"
67
+ radius: "100px"
68
+ padding: "16px 33px 15px"
69
+ font: "14px / 800 / Spotify Mix"
70
+ states: "focus and pressed snapshots observed"
71
+ use: "Editorial/newsroom CTA only; not promoted to player chrome"
72
+ verification_v2:
73
+ schema: 2
74
+ checked: "2026-07-13"
75
+ surfaces:
76
+ - id: product-home
77
+ url: "https://open.spotify.com/"
78
+ inspected: "2026-07-13"
79
+ - id: product-search
80
+ url: "https://open.spotify.com/search"
81
+ inspected: "2026-07-13"
82
+ - id: newsroom-company
83
+ url: "https://newsroom.spotify.com/company-info/"
84
+ inspected: "2026-07-13"
85
+ sources:
86
+ - id: capture-product-home
87
+ url: "https://open.spotify.com/"
88
+ kind: product-surface
89
+ captured: "2026-07-13"
90
+ - id: capture-product-search
91
+ url: "https://open.spotify.com/search"
92
+ kind: product-surface
93
+ captured: "2026-07-13"
94
+ - id: capture-newsroom
95
+ url: "https://newsroom.spotify.com/company-info/"
96
+ kind: official-doc
97
+ captured: "2026-07-13"
98
+ - id: official-design-history
99
+ url: "https://newsroom.spotify.com/2026-04-23/spotify-design-history/"
100
+ kind: official-doc
101
+ captured: "2026-07-13"
102
+ - id: official-developer-guidelines
103
+ url: "https://developer.spotify.com/documentation/design"
104
+ kind: official-doc
105
+ captured: "2026-07-13"
106
+ claims:
107
+ tokens.colors.primary: { surface_id: newsroom-company, source_id: capture-newsroom, captured: "2026-07-13" }
108
+ tokens.colors.control: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
109
+ tokens.colors.foreground: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
110
+ tokens.colors.muted: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
111
+ tokens.colors.outline: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
112
+ tokens.typography.family.ui: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
113
+ tokens.typography.family.title: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
114
+ tokens.typography.body.size: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
115
+ tokens.typography.body.weight: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
116
+ tokens.typography.body.use: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
117
+ tokens.typography.action.size: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
118
+ tokens.typography.action.weight: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
119
+ tokens.typography.action.use: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
120
+ tokens.rounded.search: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
121
+ tokens.rounded.control: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
122
+ tokens.components.player-search.type: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
123
+ tokens.components.player-search.bg: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
124
+ tokens.components.player-search.fg: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
125
+ tokens.components.player-search.border: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
126
+ tokens.components.player-search.radius: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
127
+ tokens.components.player-search.padding: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
128
+ tokens.components.player-search.font: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
129
+ tokens.components.player-search.states: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
130
+ tokens.components.player-search.use: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
131
+ tokens.components.player-outlined-action.type: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
132
+ tokens.components.player-outlined-action.bg: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
133
+ tokens.components.player-outlined-action.fg: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
134
+ tokens.components.player-outlined-action.border: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
135
+ tokens.components.player-outlined-action.radius: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
136
+ tokens.components.player-outlined-action.padding: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
137
+ tokens.components.player-outlined-action.font: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
138
+ tokens.components.player-outlined-action.states: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
139
+ tokens.components.player-outlined-action.use: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
140
+ tokens.components.player-icon-control.type: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
141
+ tokens.components.player-icon-control.bg: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
142
+ tokens.components.player-icon-control.fg: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
143
+ tokens.components.player-icon-control.radius: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
144
+ tokens.components.player-icon-control.padding: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
145
+ tokens.components.player-icon-control.font: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
146
+ tokens.components.player-icon-control.states: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
147
+ tokens.components.player-icon-control.use: { surface_id: product-home, source_id: capture-product-home, captured: "2026-07-13" }
148
+ tokens.components.newsroom-cta.type: { surface_id: newsroom-company, source_id: capture-newsroom, captured: "2026-07-13" }
149
+ tokens.components.newsroom-cta.bg: { surface_id: newsroom-company, source_id: capture-newsroom, captured: "2026-07-13" }
150
+ tokens.components.newsroom-cta.fg: { surface_id: newsroom-company, source_id: capture-newsroom, captured: "2026-07-13" }
151
+ tokens.components.newsroom-cta.border: { surface_id: newsroom-company, source_id: capture-newsroom, captured: "2026-07-13" }
152
+ tokens.components.newsroom-cta.radius: { surface_id: newsroom-company, source_id: capture-newsroom, captured: "2026-07-13" }
153
+ tokens.components.newsroom-cta.padding: { surface_id: newsroom-company, source_id: capture-newsroom, captured: "2026-07-13" }
154
+ tokens.components.newsroom-cta.font: { surface_id: newsroom-company, source_id: capture-newsroom, captured: "2026-07-13" }
155
+ tokens.components.newsroom-cta.states: { surface_id: newsroom-company, source_id: capture-newsroom, captured: "2026-07-13" }
156
+ tokens.components.newsroom-cta.use: { surface_id: newsroom-company, source_id: capture-newsroom, captured: "2026-07-13" }
157
+ conflicts: []
62
158
  ---
63
159
 
64
160
  # Design System Inspiration of Spotify
65
161
 
66
162
  ## 1. Visual Theme & Atmosphere
67
163
 
68
- Spotify's web interface is a dark, immersive music player that wraps listeners in a near-black cocoon (`#121212`, `#181818`, `#1f1f1f`) where album art and content become the primary source of color. The design philosophy is "content-first darkness" the UI recedes into shadow so that music, podcasts, and playlists can glow. Every surface is a shade of charcoal, creating a theater-like environment where the only true color comes from the iconic Spotify Green (`#1ed760`) and the album artwork itself.
164
+ Spotify is an audio streaming subscription service whose public company account traces its evolution from music listening to podcasts and audiobooks. The two captured Web Player entry surfaces use a very dark, content-led control layer: the measured search and circular-control surfaces are `#1f1f1f`, text is white or muted `#b3b3b3`, and the geometry repeatedly resolves to pills and circles. Spotify's 2026 design-history article describes the bright green as an intentional differentiator, calls out its early dark-mode product history, and names Spotify Mix as a distinctive typeface. That account explains the recognizable expression; it does not turn every brand or newsroom treatment into a player token. The player and newsroom therefore remain separate below.
69
165
 
70
- The typography uses SpotifyMixUI and SpotifyMixUITitle — proprietary fonts from the CircularSp family (Circular by Lineto, customized for Spotify) with an extensive fallback stack that includes Arabic, Hebrew, Cyrillic, Greek, Devanagari, and CJK fonts, reflecting Spotify's global reach. The type system is compact and functional: 700 (bold) for emphasis and navigation, 600 (semibold) for secondary emphasis, and 400 (regular) for body. Buttons use uppercase with positive letter-spacing (1.4px–2px) for a systematic, label-like quality.
166
+ **Observed characteristics**
71
167
 
72
- What distinguishes Spotify is its pill-and-circle geometry. Primary buttons use 500px–9999px radius (full pill), circular play buttons use 50% radius, and search inputs are 500px pills. Combined with heavy shadows (`rgba(0,0,0,0.5) 0px 8px 24px`) on elevated elements and a unique inset border-shadow combo (`rgb(18,18,18) 0px 1px 0px, rgb(124,124,124) 0px 0px 0px 1px inset`), the result is an interface that feels like a premium audio device — tactile, rounded, and built for touch.
73
-
74
- **Key Characteristics:**
75
- - Near-black immersive dark theme (`#121212`–`#1f1f1f`) — UI disappears behind content
76
- - Spotify Green (`#1ed760`) as singular brand accent — never decorative, always functional
77
- - SpotifyMixUI/CircularSp font family with global script support
78
- - Pill buttons (500px–9999px) and circular controls (50%) — rounded, touch-optimized
79
- - Uppercase button labels with wide letter-spacing (1.4px–2px)
80
- - Heavy shadows on elevated elements (`rgba(0,0,0,0.5) 0px 8px 24px`)
81
- - Semantic colors: negative red (`#f3727f`), warning orange (`#ffa42b`), announcement blue (`#539df5`)
82
- - Album art as the primary color source — the UI is achromatic by design
168
+ - Player controls use `#1f1f1f`, `#ffffff`, `#b3b3b3`, `#7c7c7c`, 500px, 9999px, and 50% values on recorded selectors.
169
+ - The public newsroom uses `#1ed760` as a filled CTA and a 100px pill radius; this is an editorial/newsroom treatment, not evidence of a matching Web Player button.
170
+ - Official context identifies Spotify Green and a flexible Spotify Mix typeface as brand expression, while the captured player loads `SpotifyMixUI` and `SpotifyMixUITitle`.
83
171
 
84
172
  ## 2. Color Palette & Roles
85
173
 
86
- ### Primary Brand
87
- - **Spotify Green** (`#1ed760`): Primary brand accent — play buttons, active states, CTAs
88
- - **Near Black** (`#121212`): Deepest background surface
89
- - **Dark Surface** (`#181818`): Cards, containers, elevated surfaces
90
- - **Mid Dark** (`#1f1f1f`): Button backgrounds, interactive surfaces
91
-
92
- ### Text
93
- - **White** (`#ffffff`): `--text-base`, primary text
94
- - **Silver** (`#b3b3b3`): Secondary text, muted labels, inactive nav
95
- - **Near White** (`#cbcbcb`): Slightly brighter secondary text
96
- - **Light** (`#fdfdfd`): Near-pure white for maximum emphasis
97
-
98
- ### Semantic
99
- - **Negative Red** (`#f3727f`): `--text-negative`, error states
100
- - **Warning Orange** (`#ffa42b`): `--text-warning`, warning states
101
- - **Announcement Blue** (`#539df5`): `--text-announcement`, info states
102
-
103
- ### Surface & Border
104
- - **Dark Card** (`#252525`): Elevated card surface
105
- - **Mid Card** (`#272727`): Alternate card surface
106
- - **Border Gray** (`#4d4d4d`): Button borders on dark
107
- - **Light Border** (`#7c7c7c`): Outlined button borders, muted links
108
- - **Separator** (`#b3b3b3`): Divider lines
109
- - **Light Surface** (`#eeeeee`): Light-mode buttons (rare)
110
- - **Spotify Green Border** (`#1db954`): Green accent border variant
111
-
112
- ### Shadows
113
- - **Heavy** (`rgba(0,0,0,0.5) 0px 8px 24px`): Dialogs, menus, elevated panels
114
- - **Medium** (`rgba(0,0,0,0.3) 0px 8px 8px`): Cards, dropdowns
115
- - **Inset Border** (`rgb(18,18,18) 0px 1px 0px, rgb(124,124,124) 0px 0px 0px 1px inset`): Input border-shadow combo
174
+ ### Player surface (captured product UI)
175
+
176
+ - **Control dark** (`#1f1f1f`): search background and a 48px circular icon control on `https://open.spotify.com/`.
177
+ - **Foreground** (`#ffffff`): search text, outlined action text, and circular-control foreground on the captured player surfaces.
178
+ - **Muted** (`#b3b3b3`): player tertiary and icon-control text on the captured player surfaces.
179
+ - **Outline** (`#7c7c7c`): one-pixel border on the compact outlined player action.
180
+
181
+ ### Newsroom / editorial surface
182
+
183
+ - **Spotify Green** (`#1ed760`): filled button background and border on `https://newsroom.spotify.com/company-info/`. Spotify's developer branding guidance also describes Spotify Green as its resting recognizability color.
184
+
185
+ No opaque product-canvas, semantic-error, warning, or shadow token is declared here: the supplied collector evidence did not record a representative value for those fields.
116
186
 
117
187
  ## 3. Typography Rules
118
188
 
119
- ### Font Families
120
- - **Title**: `SpotifyMixUITitle`, fallbacks: `CircularSp-Arab, CircularSp-Hebr, CircularSp-Cyrl, CircularSp-Grek, CircularSp-Deva, Helvetica Neue, helvetica, arial, Hiragino Sans, Hiragino Kaku Gothic ProN, Meiryo, MS Gothic`
121
- - **UI / Body**: `SpotifyMixUI`, same fallback stack
122
-
123
- ### Hierarchy
124
-
125
- | Role | Font | Size | Weight | Line Height | Letter Spacing | Notes |
126
- |------|------|------|--------|-------------|----------------|-------|
127
- | Section Title | SpotifyMixUITitle | 24px (1.50rem) | 700 | normal | normal | Bold title weight |
128
- | Feature Heading | SpotifyMixUI | 18px (1.13rem) | 600 | 1.30 (tight) | normal | Semibold section heads |
129
- | Body Bold | SpotifyMixUI | 16px (1.00rem) | 700 | normal | normal | Emphasized text |
130
- | Body | SpotifyMixUI | 16px (1.00rem) | 400 | normal | normal | Standard body |
131
- | Button Uppercase | SpotifyMixUI | 14px (0.88rem) | 600–700 | 1.00 (tight) | 1.4px–2px | `text-transform: uppercase` |
132
- | Button | SpotifyMixUI | 14px (0.88rem) | 700 | normal | 0.14px | Standard button |
133
- | Nav Link Bold | SpotifyMixUI | 14px (0.88rem) | 700 | normal | normal | Navigation |
134
- | Nav Link | SpotifyMixUI | 14px (0.88rem) | 400 | normal | normal | Inactive nav |
135
- | Caption Bold | SpotifyMixUI | 14px (0.88rem) | 700 | 1.50–1.54 | normal | Bold metadata |
136
- | Caption | SpotifyMixUI | 14px (0.88rem) | 400 | normal | normal | Metadata |
137
- | Small Bold | SpotifyMixUI | 12px (0.75rem) | 700 | 1.50 | normal | Tags, counts |
138
- | Small | SpotifyMixUI | 12px (0.75rem) | 400 | normal | normal | Fine print |
139
- | Badge | SpotifyMixUI | 10.5px (0.66rem) | 600 | 1.33 | normal | `text-transform: capitalize` |
140
- | Micro | SpotifyMixUI | 10px (0.63rem) | 400 | normal | normal | Smallest text |
141
-
142
- ### Principles
143
- - **Bold/regular binary**: Most text is either 700 (bold) or 400 (regular), with 600 used sparingly. This creates a clear visual hierarchy through weight contrast rather than size variation.
144
- - **Uppercase buttons as system**: Button labels use uppercase + wide letter-spacing (1.4px–2px), creating a systematic "label" voice distinct from content text.
145
- - **Compact sizing**: The range is 10px–24px — narrower than most systems. Spotify's type is compact and functional, designed for scanning playlists, not reading articles.
146
- - **Global script support**: The extensive fallback stack (Arabic, Hebrew, Cyrillic, Greek, Devanagari, CJK) reflects Spotify's 180+ market reach.
189
+ ### Evidence classes
147
190
 
148
- ## 4. Component Stylings
191
+ | Class | Family / evidence | Boundary |
192
+ |---|---|---|
193
+ | Live computed product use | `SpotifyMixUI` was computed and FontFaceSet-backed 665 times across the two player surfaces; source files are served from `encore.scdn.co`. | Canonical UI family for these captured player controls. |
194
+ | Live computed product use | `SpotifyMixUITitle` was computed and FontFaceSet-backed seven times on the player surfaces. | Captured title family; not substituted with a system face. |
195
+ | Live computed newsroom use | `Spotify Mix` (106 uses) and `Spotify Mix Narrow` (21 uses) were computed and FontFaceSet-backed on the public newsroom. | Editorial/newsroom families, kept separate from player UI tokens. |
196
+ | Official product/brand context | Spotify's 2026 design-history article calls Spotify Mix a unique, responsive typeface. | Context confirms brand significance; it is not a public license grant. |
197
+ | Declared-only assets | `CircularSp-Arab`, `CircularSp-Hebr`, `CircularSp-Cyrl`, `CircularSp-Grek`, `CircularSp-Deva`, Spotify Circular, Spotify Mix Wide, and `SpotifyMixUITitleVariable` appeared in `@font-face` declarations with no visible captured use. | Not promoted to UI tokens or specimens. |
198
+ | License / external integrations | Spotify's developer guidelines recommend platform-default sans-serif, Helvetica Neue, Helvetica, then Arial for partner integrations. | This is partner guidance, not permission to redistribute or substitute Spotify's product fonts. No standalone public license for the captured Spotify font files was established in this update. |
149
199
 
150
- ### Buttons
200
+ ### Captured player hierarchy
151
201
 
152
- **Spotify Green CTA**
153
- - Background: `#1ed760`
154
- - Text: `#000000`
155
- - Border: none
156
- - Radius: 9999px
157
- - Padding: 12px 32px
158
- - Font: 14px / 700 / SpotifyMixUI
159
- - Hover: scale(1.04) + brightness shift
160
- - Use: Primary brand CTA — "Get Spotify Free", "Premium" upgrade, save/play moments
202
+ | Role | Family | Size | Weight | Evidence boundary |
203
+ |---|---:|---:|---:|---|
204
+ | Body and search | SpotifyMixUI | 16px | 400 | Player home/search computed values |
205
+ | Compact action | SpotifyMixUI | 14px | 700 | Player home/search compact actions |
206
+ | Captured title | SpotifyMixUITitle | 24px | 700 | Player heading samples |
161
207
 
162
- **Dark Pill**
163
- - Background: `#1f1f1f`
164
- - Text: `#ffffff`
165
- - Border: none
166
- - Radius: 9999px
167
- - Padding: 8px 16px
168
- - Font: 14px / 700 / SpotifyMixUI
169
- - Use: Navigation pills, secondary actions on dark surfaces
208
+ ## 4. Component Stylings
170
209
 
171
- **Dark Large Pill**
172
- - Background: `#181818`
210
+ ### Player controls — product surfaces
211
+
212
+ **Search field**
213
+ - Background: `#1f1f1f`
173
214
  - Text: `#ffffff`
174
- - Border: none
215
+ - Border: 0px solid `#ffffff`
175
216
  - Radius: 500px
176
- - Padding: 16px 43px
177
- - Font: 16px / 700 / SpotifyMixUI
178
- - Use: Primary app navigation buttons
179
-
180
- **Light Pill**
181
- - Background: `#ffffff`
182
- - Text: `#121212`
183
- - Border: none
184
- - Radius: 500px
185
- - Padding: 16px 48px
186
- - Font: 16px / 700 / SpotifyMixUI
187
- - Use: Light-mode CTAs (cookie consent, marketing pages — verified at spotify.com/premium)
188
-
189
- **Outlined Pill**
217
+ - Padding: 12px 96px 12px 48px
218
+ - Font: 16px / 400 / SpotifyMixUI
219
+ - Hover: observed on the same selector; no unrecorded value is inferred
220
+ - Focus: observed on the same selector; no unrecorded value is inferred
221
+ - Pressed: observed on the same selector; no unrecorded value is inferred
222
+ - Use: Player search field on home and `/search`
223
+ - Provenance: `home::[data-omd-capture="3"]`, `https://open.spotify.com/`; 48px tall in the raw bundle
224
+
225
+ **Outlined compact action**
190
226
  - Background: transparent
191
227
  - Text: `#ffffff`
192
228
  - Border: 1px solid `#7c7c7c`
193
229
  - Radius: 9999px
194
230
  - Padding: 4px 16px 4px 36px
195
231
  - Font: 14px / 700 / SpotifyMixUI
196
- - Use: Follow buttons, secondary actions asymmetric padding accommodates icon
232
+ - Hover: observed on the same selector; no unrecorded value is inferred
233
+ - Focus: observed on the same selector; no unrecorded value is inferred
234
+ - Pressed: observed on the same selector; no unrecorded value is inferred
235
+ - Use: Compact outlined player action on home and `/search`
236
+ - Provenance: `home::[data-omd-capture="14"]`, `https://open.spotify.com/`; 90px by 32px in the raw bundle
197
237
 
198
- **Circular Play**
238
+ **Circular icon control**
199
239
  - Background: `#1f1f1f`
200
240
  - Text: `#ffffff`
201
- - Border: none
202
241
  - Radius: 50%
203
242
  - Padding: 12px
204
- - Font: 14px / 700 / SpotifyMixUI
205
- - Hover: scale(1.06)
206
- - Use: Play/pause controls (track row, mini player)
207
-
208
- ### Inputs
209
-
210
- **Search**
211
- - Background: `#1f1f1f`
212
- - Text: `#ffffff`
213
- - Border: 1px solid transparent
214
- - Radius: 500px
215
- - Padding: 12px 16px 12px 48px
216
- - Font: 14px / 400 / SpotifyMixUI
217
- - Placeholder: `#b3b3b3`
218
- - Focus: 1px solid `#000000`
219
- - Use: Top-bar search — pill-shaped, icon-prefixed
220
-
221
- **Default**
222
- - Background: `#1f1f1f`
223
- - Text: `#ffffff`
224
- - Border: 1px solid `#7c7c7c`
225
- - Radius: 4px
226
- - Padding: 8px 12px
227
- - Font: 14px / 400 / SpotifyMixUI
228
- - Placeholder: `#b3b3b3`
229
- - Focus: 1px solid `#1ed760`
230
- - Use: Settings forms, queue/playlist edit
243
+ - Font: 16px / 400 / SpotifyMixUI
244
+ - Hover: observed on the same selector; no unrecorded value is inferred
245
+ - Pressed: observed on the same selector; no unrecorded value is inferred
246
+ - Use: 48px circular player icon control on home
247
+ - Provenance: `home::[data-omd-capture="1"]`, `https://open.spotify.com/`; 48px by 48px in the raw bundle
231
248
 
232
- ### Cards
249
+ ### Newsroom / editorial chrome — separate surface
233
250
 
234
- **Album / Playlist Card**
235
- - Background: `#181818`
236
- - Text: `#ffffff`
237
- - Border: none
238
- - Radius: 8px
239
- - Padding: 16px
240
- - Shadow: none
241
- - Hover: background `#1f1f1f` (slight lift) + scale(1.02) on artwork
242
- - Use: Grid card surface album art on top, title/subtitle below
243
-
244
- **Elevated**
245
- - Background: `#181818`
246
- - Text: `#ffffff`
247
- - Border: none
248
- - Radius: 8px
249
- - Padding: 16px
250
- - Shadow: `rgba(0,0,0,0.3) 0px 8px 8px`
251
- - Use: Now playing card, sticky/floating surfaces
252
-
253
- ### Badges
254
-
255
- **Now Playing**
251
+ **Filled newsroom CTA**
252
+ - Background: `#1ed760`
253
+ - Text: `#000000`
254
+ - Border: 1px solid `#1ed760`
255
+ - Radius: 100px
256
+ - Padding: 16px 33px 15px
257
+ - Font: 14px / 800 / Spotify Mix
258
+ - Focus: `#25d564` background with `#1ed760` border in the captured focus snapshot
259
+ - Pressed: `#26d966` background with `#1dcf5c` border in the captured pressed snapshot
260
+ - Use: Editorial CTA on Spotify's company-info newsroom page; not a Web Player component claim
261
+ - Provenance: `surface-3::[data-omd-capture="9"]`, `https://newsroom.spotify.com/company-info/`; 182px by 50px in the raw bundle
262
+
263
+ **Hollow newsroom CTA**
256
264
  - Background: transparent
257
265
  - Text: `#1ed760`
258
- - Border: none
259
- - Radius: 2px
260
- - Padding: 0
261
- - Font: 11px / 700 / SpotifyMixUI
262
- - Use: Playback indicator (small green text + bars icon, shown on the active track row)
263
-
264
- **Genre Tag**
265
- - Background: `#3a3a3a`
266
- - Text: `#ffffff`
267
- - Border: none
268
- - Radius: 4px
269
- - Padding: 2px 8px
270
- - Font: 11px / 700 / SpotifyMixUI
271
- - Use: Genre/mood tag on album header (Pop, Hip-Hop)
272
-
273
- ### Navigation
274
- - Dark sidebar with SpotifyMixUI 14px weight 700 for active, 400 for inactive
275
- - `#b3b3b3` muted color for inactive items, `#ffffff` for active
276
- - Circular icon buttons (50% radius)
277
- - Spotify logo top-left in green
266
+ - Border: 1px solid `#1ed760`
267
+ - Radius: 100px
268
+ - Padding: 16px 33px 15px
269
+ - Font: 14px / 800 / Spotify Mix
270
+ - Focus: `#1dd35e` text with `#1dd35e` border in the captured focus snapshot
271
+ - Use: Editorial/newsroom CTA only
272
+ - Provenance: `surface-3::[data-omd-capture="10"]`, `https://newsroom.spotify.com/company-info/`; 246px by 50px in the raw bundle
278
273
 
279
274
  ---
280
-
281
- **Verified:** 2026-05-08
282
- **Tier 1 sources:** open.spotify.com (live DOM via playwright — Encore pill 9999px confirmed across player/sidebar; icon round 50% on `#1f1f1f` 48×48; helper buttons 14px · weight 700; muted `#b3b3b3` confirmed)
283
- **Tier 2 sources:** styles.refero.design/style/1514a95f-878c-4d4d-bb14-99d1b83f6227 (Primary Filled `#ffffff` / `#000000` / 9999px / 16×12; Search `#333333` / 500px radius confirmed; Library Action Card `#000000`); getdesign.md/spotify — only directory snippet.
284
- **Conflicts unresolved:** none. Light Pill `#ffffff` 16px radius retained from prior verification (different from Tier 2 refero claim of 0px — refero appears to have captured an outline variant; live inspect of the logged-in player Buy/Get Premium CTA confirmed pill geometry).
275
+ **Verified:** 2026-07-13
276
+ **Tier 1 sources:** https://open.spotify.com/ · https://open.spotify.com/search · https://newsroom.spotify.com/company-info/ · https://newsroom.spotify.com/2026-04-23/spotify-design-history/ · https://developer.spotify.com/documentation/design
277
+ **Tier 2 sources:** https://getdesign.md/spotify/design-md (independent high-level cross-check); https://styles.refero.design/?q=spotify (query attempted; no usable response returned)
278
+ **Conflicts unresolved:** none
285
279
 
286
280
  ## 5. Layout Principles
287
281
 
288
- ### Spacing System
289
- - Base unit: 8px
290
- - Scale: 1px, 2px, 3px, 4px, 5px, 6px, 8px, 10px, 12px, 14px, 15px, 16px, 20px
291
-
292
- ### Grid & Container
293
- - Sidebar (fixed) + main content area
294
- - Grid-based album/playlist cards
295
- - Full-width now-playing bar at bottom
296
- - Responsive content area fills remaining space
297
-
298
- ### Whitespace Philosophy
299
- - **Dark compression**: Spotify packs content densely — playlist grids, track lists, and navigation are all tightly spaced. The dark background provides visual rest between elements without needing large gaps.
300
- - **Content density over breathing room**: This is an app, not a marketing site. Every pixel serves the listening experience.
301
-
302
- ### Border Radius Scale
303
- - Minimal (2px): Badges, explicit tags
304
- - Subtle (4px): Inputs, small elements
305
- - Standard (6px): Album art containers, cards
306
- - Comfortable (8px): Sections, dialogs
307
- - Medium (10px–20px): Panels, overlay elements
308
- - Large (100px): Large pill buttons
309
- - Pill (500px): Primary buttons, search input
310
- - Full Pill (9999px): Navigation pills, search
311
- - Circle (50%): Play buttons, avatars, icons
282
+ The captured product evidence supports a compact top-bar search field and 32px/48px controls, but it is not an authenticated-player layout audit. Do not infer a universal sidebar, grid, player bar, breakpoint scale, or card elevation from these entry surfaces. The developer documentation's artwork rules apply to partner integrations: preserve supplied artwork, do not crop or overlay it, and use 4px corners on small/medium devices or 8px on large devices.
312
283
 
313
284
  ## 6. Depth & Elevation
314
285
 
315
- | Level | Treatment | Use |
316
- |-------|-----------|-----|
317
- | Base (Level 0) | `#121212` background | Deepest layer, page background |
318
- | Surface (Level 1) | `#181818` or `#1f1f1f` | Cards, sidebar, containers |
319
- | Elevated (Level 2) | `rgba(0,0,0,0.3) 0px 8px 8px` | Dropdown menus, hover cards |
320
- | Dialog (Level 3) | `rgba(0,0,0,0.5) 0px 8px 24px` | Modals, overlays, menus |
321
- | Inset (Border) | `rgb(18,18,18) 0px 1px 0px, rgb(124,124,124) 0px 0px 0px 1px inset` | Input borders |
322
-
323
- **Shadow Philosophy**: Spotify uses notably heavy shadows for a dark-themed app. The 0.5 opacity shadow at 24px blur creates a dramatic "floating in darkness" effect for dialogs and menus, while the 0.3 opacity at 8px blur provides a more subtle card lift. The unique inset border-shadow combination on inputs creates a recessed, tactile quality.
286
+ The representative player and newsroom components recorded `box-shadow: none`. No reusable elevation token is published from this packet. Any shadow treatment requires a separately observed surface.
324
287
 
325
288
  ## 7. Do's and Don'ts
326
289
 
327
290
  ### Do
328
- - Use near-black backgrounds (`#121212`–`#1f1f1f`) — depth through shade variation
329
- - Apply Spotify Green (`#1ed760`) only for play controls, active states, and primary CTAs
330
- - Use pill shape (500px–9999px) for all buttons circular (50%) for play controls
331
- - Apply uppercase + wide letter-spacing (1.4px–2px) on button labels
332
- - Keep typography compact (10px–24px range) — this is an app, not a magazine
333
- - Use heavy shadows (`0.3–0.5 opacity`) for elevated elements on dark backgrounds
334
- - Let album art provide color — the UI itself is achromatic
291
+
292
+ - Keep the captured player search and compact actions in their recorded surface domain; use `#1f1f1f`, white/muted text, and their measured pill or circle geometry.
293
+ - For a Spotify partner integration, keep supplied artwork intact and legible, attribute Spotify content with the appropriate Spotify mark, and link content back to Spotify as required by the official developer guidelines.
294
+ - Use the full logo for external attribution unless space or an established-brand context qualifies the icon-only exception.
335
295
 
336
296
  ### Don't
337
- - Don't use Spotify Green decoratively or on backgrounds — it's functional only
338
- - Don't use light backgrounds for primary surfaces the dark immersion is core
339
- - Don't skip the pill/circle geometry on buttons square buttons break the identity
340
- - Don't use thin/subtle shadows on dark backgrounds, shadows need to be heavy to be visible
341
- - Don't add additional brand colors — green + achromatic grays is the complete palette
342
- - Don't use relaxed line-heights — Spotify's typography is compact and dense
343
- - Don't expose raw gray borders — use shadow-based or inset borders instead
297
+
298
+ - Don't apply the newsroom green CTA as a verified player control; this packet records it on a separate editorial surface.
299
+ - Don't crop, distort, blur, or cover Spotify-provided artwork in a partner integration.
300
+ - Don't silently replace `SpotifyMixUI`, `SpotifyMixUITitle`, or Spotify Mix with a system font and call it equivalent.
344
301
 
345
302
  ## 8. Responsive Behavior
346
303
 
347
- ### Breakpoints
348
- | Name | Width | Key Changes |
349
- |------|-------|-------------|
350
- | Mobile Small | <425px | Compact mobile layout |
351
- | Mobile | 425–576px | Standard mobile |
352
- | Tablet | 576–768px | 2-column grid |
353
- | Tablet Large | 768–896px | Expanded layout |
354
- | Desktop Small | 896–1024px | Sidebar visible |
355
- | Desktop | 1024–1280px | Full desktop layout |
356
- | Large Desktop | >1280px | Expanded grid |
357
-
358
- ### Collapsing Strategy
359
- - Sidebar: full → collapsed → hidden
360
- - Album grid: 5 columns → 3 → 2 → 1
361
- - Now-playing bar: maintained at all sizes
362
- - Search: pill input maintained, width adjusts
363
- - Navigation: sidebar → bottom bar on mobile
304
+ No viewport or responsive interaction capture is part of the supplied evidence. The only responsive guidance retained here is Spotify's external-integration artwork rule: 4px rounded corners on small/medium devices and 8px on large devices. That guidance is not a measured Web Player component token.
364
305
 
365
306
  ## 9. Agent Prompt Guide
366
307
 
367
- ### Quick Color Reference
368
- - Background: Near Black (`#121212`)
369
- - Surface: Dark Card (`#181818`)
370
- - Text: White (`#ffffff`)
371
- - Secondary text: Silver (`#b3b3b3`)
372
- - Accent: Spotify Green (`#1ed760`)
373
- - Border: `#4d4d4d`
374
- - Error: Negative Red (`#f3727f`)
375
-
376
- ### Example Component Prompts
377
- - "Create a dark card: #181818 background, 8px radius. Title at 16px SpotifyMixUI weight 700, white text. Subtitle at 14px weight 400, #b3b3b3. Shadow rgba(0,0,0,0.3) 0px 8px 8px on hover."
378
- - "Design a pill button: #1f1f1f background, white text, 9999px radius, 8px 16px padding. 14px SpotifyMixUI weight 700, uppercase, letter-spacing 1.4px."
379
- - "Build a circular play button: Spotify Green (#1ed760) background, #000000 icon, 50% radius, 12px padding."
380
- - "Create search input: #1f1f1f background, white text, 500px radius, 12px 48px padding. Inset border: rgb(124,124,124) 0px 0px 0px 1px inset."
381
- - "Design navigation sidebar: #121212 background. Active items: 14px weight 700, white. Inactive: 14px weight 400, #b3b3b3."
382
-
383
- ### Iteration Guide
384
- 1. Start with #121212 — everything lives in near-black darkness
385
- 2. Spotify Green for functional highlights only (play, active, CTA)
386
- 3. Pill everything — 500px for large, 9999px for small, 50% for circular
387
- 4. Uppercase + wide tracking on buttons — the systematic label voice
388
- 5. Heavy shadows (0.3–0.5 opacity) for elevation — light shadows are invisible on dark
389
- 6. Album art provides all the color — the UI stays achromatic
308
+ - "Create a product-player search field with `#1f1f1f` background, white 16px/400 SpotifyMixUI text, 500px radius, and 12px 96px 12px 48px padding."
309
+ - "Create a compact outlined player action with white 14px/700 SpotifyMixUI text, `#7c7c7c` 1px border, 9999px radius, and 4px 16px 4px 36px padding."
310
+ - "For an editorial/newsroom CTA only, use `#1ed760` with black 14px/800 Spotify Mix text, a 100px radius, and 16px 33px 15px padding."
390
311
 
391
312
  ## 10. Voice & Tone
392
313
 
393
- Spotify's voice is **invitational, present-tense, and culturally fluent.** Microcopy reads like a friend recommending a song, not a service describing itself. The Spotify mission as stated by the company itself — *"Deliver creativity to the world—one note, one voice, one idea at a time."* — sets the tone register: scale-of-one, quiet, human. CTAs are short verbs ("Play", "Save", "Follow"), system messages avoid technical jargon, and editorial copy on playlists / Daylist / Wrapped uses the cadence of pop-culture conversation rather than corporate marketing.
314
+ Official company language centers creativity and connection to artists and other creatives. The public developer guidance uses direct partner-facing action labels such as "GET SPOTIFY FREE", "OPEN SPOTIFY", "PLAY ON SPOTIFY", and "LISTEN ON SPOTIFY". These are documented integration strings, not a complete product-microcopy system.
394
315
 
395
- | Context | Tone |
316
+ | Context | Grounded guidance |
396
317
  |---|---|
397
- | CTA / button | Single verb. "Play", "Save", "Follow", "Get Premium". No "Click here". Uppercase preserved on legacy CTAs only |
398
- | Empty (library) | Invitational. "Find your next favorite song" with a search prompt, not "No items found" |
399
- | Error (playback) | Specific. "We can't play this right now. Try another track or check your connection." |
400
- | Daylist / editorial copy | Pop-culture cadence, lower-case, conversational. "your indie pop monday morning" |
401
- | Wrapped / annual | Bold, playful, hyperbolic — the one annual moment Spotify breaks its restraint |
402
- | Onboarding | One choice per screen, big art, minimal text. The art does the persuading |
403
- | Premium upsell | Soft, never aggressive. "Listen ad-free" not "UPGRADE NOW!!" |
404
-
405
- **Voice samples**
406
- - Premium upsell button label: *"Get Premium"* <!-- verified: open.spotify.com header (2026-05) -->
407
- - Playlist empty state: *"Let's find something for your playlist"* <!-- illustrative: not verified as live UI text -->
408
- - Daylist title pattern: *"chill late night sunday"* <!-- verified: Spotify Daylist editorial pattern documented in spotify.design/daylist (2026-05) -->
409
-
410
- **Forbidden phrases.** "Revolutionary", "best-in-class", "industry-leading" — Spotify never marketing-superlatives its own product. Exclamation marks on player chrome (Wrapped is the exception). Emoji in core player UI (allowed in user-generated playlist names, not in chrome). All-caps shouting outside historic legacy CTAs. "We're sorry" apology theatre — the error sentence states the cause, then the fix.
318
+ | Partner link | Use Spotify's documented destination labels when the integration conditions apply. |
319
+ | Attribution | Make Spotify content attribution clear with the required logo treatment. |
320
+ | Product copy | No live-player text corpus was captured; do not invent a Spotify voice rule beyond the official mission and documented partner strings. |
411
321
 
412
322
  ## 11. Brand Narrative
413
323
 
414
- **Spotify AB was incorporated April 23, 2006** in **Stockholm, Sweden** by **Daniel Ek** (CEO, now Executive Chairman) and **Martin Lorentzon** ([Daniel Ek — Wikipedia](https://en.wikipedia.org/wiki/Daniel_Ek), [Spotify — Wikipedia](https://en.wikipedia.org/wiki/Spotify)). Daniel Ek had been CTO of **Stardoll**; he had also founded an ad-tech company **Advertigo** which Lorentzon's **Tradedoubler** acquired — that acquisition is literally how Ek met Lorentzon ([Soundiiz](https://soundiiz.com/blog/who-are-daniel-ek-and-martin-lorentzon-spotifys-founders/)). Ek's idea germinated around 2002 when Napster shut down and Kazaa took over piracy Ek concluded the only fix was a service *better than piracy* that compensates the music industry ([Britannica](https://www.britannica.com/money/Daniel-Ek)). **Public launch October 7, 2008** in Sweden + select EU markets, **US launch July 2011**, **IPO direct listing on NYSE April 3, 2018** (NYSE: SPOT). The founding thesis was as much economic as it was technological: in an era of widespread music piracy, build a service that's *better than free* — with so much catalog convenience that paying for it makes sense. Two decades later the platform reaches **761M users including 293M subscribers across 184 markets** (per the company's own newsroom, 2025), with 100M+ tracks, 7M podcasts, and 700K audiobooks.
415
-
416
- The product's design DNA — dark-canvas-with-green-accent, album-art as primary color, uppercase systematic labels — comes from Tobias van Schneider's 2013 redesign and has remained remarkably stable through the era of Daniel Ek's design leadership and the Encore design system rollout (2018-onward, internal Spotify team). The design system is **Encore**, internally documented and not publicly released as Polaris/Carbon class — but its components (the green pill CTA, the round play button, the dark canvas) are widely cited as the canonical "music streaming aesthetic" that Apple Music, YouTube Music, and SoundCloud have all converged toward.
324
+ Spotify's official company information says the service launched in 2008, later expanded into podcasts and then audiobooks in 2022, and now serves listeners across music, podcasts, and audiobooks. Its stated mission is to deliver creativity to the world "one note, one voice, one idea at a time," while connecting people to art and the creatives who shape it.
417
325
 
418
- What Spotify refuses: lifestyle photography in product chrome (album art is the only image), color-coded categories (the canvas stays neutral), aggressive upsells (Premium is shown but never blocking), and surprising motion (no celebratory confetti outside Wrapped).
326
+ The 2026 design-history account connects the current identity to a deliberately bright green, an early dark-mode product history, a distinctive Spotify Mix typeface, and a brand designed to flex with culture, content, creators, and community. Those first-party statements provide useful context for the captured dark player and green newsroom surfaces without flattening them into one universal component system.
419
327
 
420
328
  ## 12. Principles
421
329
 
422
- 1. **Album art is the design system.** Color, mood, energy all come from the artwork. The chrome stays neutral so the art reads. *UI implication:* container backgrounds default to `#121212` Canvas Night; only the player gradient inherits dominant artwork color.
423
- 2. **One green for one action.** `#1ed760` Brand Green is reserved for **Play** and Premium-related affirmative states. Using it on follow/save/share dilutes the signal. *UI implication:* Play button and only Play is filled green. Follow/Save use neutral secondary fills.
424
- 3. **Uppercase + wide tracking signals "label", not "shout".** The legacy uppercase button language reads as systematic categorization, not aggression — preserved selectively on player CTAs. *UI implication:* SECONDARY actions stay sentence-case; primary CTAs may use uppercase if context demands the legacy register.
425
- 4. **Editorial voice carries the brand.** Daylist titles, playlist descriptions, Wrapped copy — these are where Spotify's voice actually lives. Product chrome stays minimal precisely so editorial can stretch. *UI implication:* don't compete with editorial copy from product surfaces; let playlist names and album titles dominate the page.
426
- 5. **Heavy shadows on dark.** Light shadows disappear on `#121212`. Spotify uses `rgba(0,0,0,0.5) 0 8px 24px` opacity 0.5 to lift floating elements. *UI implication:* on dark themes, shadows must be 0.3+ opacity to read; on light reverse, never use 0.5 opacity (would look heavy).
330
+ 1. **Keep content attribution and artwork intact in partner integrations.** Spotify's developer guidance requires supplied artwork to remain unaltered and associated Spotify content to be attributed. *UI implication:* preserve source artwork and keep required marks/links visible.
331
+ 2. **Use green as a recognizability signal in the domain where it is observed.** Spotify calls Green its resting recognizability color, and the captured newsroom CTA uses `#1ed760`. *UI implication:* do not assume the newsroom CTA is a player-primary variant without product-surface evidence.
332
+ 3. **Respect a family of systems rather than forcing one component reading.** Spotify's public design writing describes Encore as a system-of-systems. *UI implication:* keep player, editorial/newsroom, and external-integration guidance provenance separate.
427
333
 
428
334
  ## 13. Personas
429
335
 
430
- *Personas are fictional archetypes informed by publicly described Spotify user segments (free tier listeners, Premium subscribers, podcast hosts/listeners, artists), not individual people.*
431
-
432
- **Maya Tan, 24, Manila.** Free-tier user with 12 active playlists. Discovers most music through Daylist and Release Radar. Tolerates the ad break, would not subscribe even at half price right now — the surprise of weekly algorithmic discovery is the product. Notices when Spotify changes the album-art frame size by even 4px.
433
-
434
- **Dario Conti, 41, Milan.** Premium Family subscriber (himself + spouse + 14yo daughter). Mainly podcasts during commute, music in the kitchen. Daughter dominates the family algorithm — recommendations skew teen pop. Treats Spotify Connect device hand-off as essential infrastructure, would switch services if it broke.
336
+ The following are stakeholder groups named on Spotify's official company surface, not fictional personas:
435
337
 
436
- **Aisha Williams, 33, Atlanta.** Independent musician using Spotify for Artists. Checks the for-artists dashboard daily during release weeks; obsessively monitors save-rate metrics. Voice on social media reflects Spotify's design tone — minimal, art-forward, never-shouting promotion.
338
+ - **Listeners:** discover, manage, and enjoy music, podcasts, and audiobooks on the service.
339
+ - **Artists and creators:** the mission explicitly connects the world to their work; Spotify also publishes separate communities for artists and creators.
340
+ - **Partner developers:** follow distinct attribution, artwork, linking, and playback requirements in the developer documentation.
437
341
 
438
342
  ## 14. States
439
343
 
440
- | State | Treatment |
441
- |---|---|
442
- | **Empty (library, no playlists)** | Centered SF-like 24px white text "Create your first playlist" + Brand Green button "Create playlist" 9999px. No illustration |
443
- | **Empty (search, no results)** | "We couldn't find any results for `<query>`." 14px `#b3b3b3`. Suggestion text below: "Check your spelling or try different keywords" |
444
- | **Loading (player, track changing)** | Album art crossfades over 200ms; play button replaced by spinner (Encore loop) only if buffering > 500ms |
445
- | **Loading (sidebar refreshing)** | Skeleton blocks `#1f1f1f` with subtle `#292929` shimmer. Maintains exact final-content dimensions |
446
- | **Error (playback unavailable)** | Toast bottom-center, `rgba(40,40,40,0.95)` bg / white text / 6px radius. "Can't play track. Tap to retry." with retry chevron |
447
- | **Error (network offline)** | Top banner persistent, dark bg + Brand Green retry pill. Allows offline-cached playback to continue |
448
- | **Success (saved to library)** | Heart icon fills Brand Green, toast "Added to Liked Songs" auto-dismiss 2s. Always rollback-able by tapping again |
449
- | **Success (followed artist)** | Follow button fills, label toggles "Following". No toast, no celebration — quiet confirmation |
450
- | **Skeleton (Home page)** | Vertical column of `#1f1f1f` rectangles, no shimmer on first paint, shimmer added if loading > 800ms |
451
- | **Skeleton (Now Playing bar)** | Album art square `#1f1f1f`, 16px radius, no shimmer — always replaced quickly |
452
- | **Disabled** | 0.5 opacity on the entire control. Brand Green never goes disabled — the affordance is removed (button hidden) instead |
453
- | **Loading (Wrapped year-end)** | Dedicated experience — story-format full-screen with Brand Green accent + album-art-driven typography. The one annual exception to the dark/green discipline |
344
+ The supplied collector recorded hover, focus, and pressed snapshots for the listed player controls, and focus/pressed snapshots for the newsroom CTA. It recorded disabled/unchecked icon-control instances but did not establish a general disabled visual rule. For partner integrations, the official guidance requires restricted playback controls either to be disabled or not shown; it also documents a like action changing state with messages such as "Added to Liked Songs" and "Removed from Liked Songs." No additional loading, error, toast, or motion state is promoted from this packet.
454
345
 
455
346
  ## 15. Motion & Easing
456
347
 
457
- **Durations**:
458
-
459
- | Token | Value | Use |
460
- |---|---|---|
461
- | `motion-instant` | 0ms | Selection commits, mute toggle |
462
- | `motion-fast` | 200ms | Album art crossfade, hover reveals, like-icon fill |
463
- | `motion-standard` | 300ms | Modal / sheet enter / exit |
464
- | `motion-slow` | 500ms | Now Playing bar expand-to-full-screen |
465
- | `motion-spring` | variable | Volume slider release, scrub release |
466
-
467
- **Easings**:
468
-
469
- | Token | Curve | Use |
470
- |---|---|---|
471
- | `ease-enter` | `cubic-bezier(0.2, 0.6, 0.25, 1)` | Sheets, modals, full-screen player |
472
- | `ease-exit` | `cubic-bezier(0.4, 0.0, 1, 1)` | Dismiss |
473
- | `ease-bounce` | `cubic-bezier(0.34, 1.56, 0.64, 1)` | Like-icon fill (slight overshoot) |
474
-
475
- **Motion rules.**
476
- 1. **Album art crossfades, not slides.** Track changes never use horizontal slide — opacity crossfade preserves the visual continuity of "the music continues, just changed."
477
- 2. **Brand Green never animates color.** No green-to-grey transitions. Play button is binary state; transition is via icon swap, not color tween.
478
- 3. **Heavy gradients on Now Playing.** The full-screen player uses a 60-fps gradient drawn from dominant album art color → Canvas Night. Animated only on track change, not continuously.
479
- 4. **`prefers-reduced-motion: reduce`** disables album art crossfade (instant cut), disables full-screen player gradient animation, keeps spring releases (volume/scrub) but reduces overshoot to 0.
480
-
481
- ---
482
-
483
- **Verified:** 2026-05-08 (full-depth, A2 loop)
484
- **Tier 1 sources (§4):** open.spotify.com (live DOM via playwright — Encore pill 9999px, icon round 50% / 48×48 `#1f1f1f`), spotify.com marketing CTA inspect (Light Pill `#fff` 16px 48×16/700)
485
- **Tier 2 sources (§4):** styles.refero.design/style/1514a95f-878c-4d4d-bb14-99d1b83f6227 (Primary Filled, Search 500px, Library Action Card)
486
- **Tier 1 sources (§10-15 Philosophy):** newsroom.spotify.com/company-info ("Deliver creativity to the world—one note, one voice, one idea at a time"), spotify.design (Encore reference)
487
- **Tier 2 sources (Philosophy):** widely cited — 761M user / 293M subscriber figure cross-confirmed on multiple Spotify newsroom pages
488
- **Style ref:** `claude` (US minimal/non-hype tone)
489
- **Conflicts unresolved:** none.
348
+ No duration, easing, or motion token was measured in the supplied evidence. Do not derive one from static hover/focus/pressed snapshots.