oh-my-design-cli 1.8.7 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/hooks/lib/preferences-parser.cjs +1 -0
- package/.claude/hooks/lib/preferences-writer.cjs +1 -0
- package/.claude/hooks/post-edit-watch.cjs +1 -0
- package/.claude/hooks/session-end-foldin.cjs +1 -0
- package/.claude/hooks/session-state-loader.cjs +1 -0
- package/.claude/hooks/skill-activation.cjs +1 -0
- package/.claude/settings.json +10 -1
- package/.github/assets/logo-bg.png +0 -0
- package/AGENTS.md +20 -1
- package/CHANGELOG.md +482 -0
- package/MIGRATION.md +103 -0
- package/README.ja.md +56 -19
- package/README.ko.md +47 -30
- package/README.md +48 -30
- package/README.zh-TW.md +59 -22
- package/agents/AGENT.md +8 -7
- package/agents/omd-codex-image.md +1 -1
- package/agents/omd-critic.md +6 -7
- package/agents/omd-designer-review.md +1 -1
- package/agents/omd-final-qa.md +1 -1
- package/agents/omd-humanizer.md +38 -0
- package/agents/omd-kr-writer.md +3 -4
- package/agents/omd-locale-adapter.md +12 -16
- package/agents/omd-master.md +24 -19
- package/agents/omd-microcopy.md +1 -1
- package/agents/omd-orchestrator.md +7 -8
- package/agents/omd-slop-auditor.md +31 -0
- package/agents/omd-ux-researcher.md +1 -1
- package/data/reference-fingerprints.json +1995 -38
- package/dist/bin/oh-my-design.js +16 -8
- package/dist/bin/oh-my-design.js.map +1 -1
- package/dist/chunk-UJIHCEYF.js +99 -0
- package/dist/chunk-UJIHCEYF.js.map +1 -0
- package/dist/doctor-LDWSFM3I.js +763 -0
- package/dist/doctor-LDWSFM3I.js.map +1 -0
- package/dist/install-skills-ZZFNJ2II.js +1120 -0
- package/dist/install-skills-ZZFNJ2II.js.map +1 -0
- package/docs/CLI_QUICKSTART.md +157 -0
- package/package.json +25 -4
- package/scripts/postinstall.cjs +5 -4
- package/skills/claude-design/SKILL.md +38 -14
- package/skills/claude-design/references/claude-design-flow.md +11 -11
- package/skills/claude-design/references/codebase-analysis.md +5 -4
- package/skills/omd-final-qa/SKILL.md +1 -1
- package/skills/omd-harness/SKILL.md +51 -50
- package/skills/omd-humanize/SKILL.md +116 -0
- package/skills/omd-humanize/agents/openai.yaml +4 -0
- package/skills/omd-humanize/references/locale-playbooks.md +102 -0
- package/skills/omd-humanize/references/sources.md +11 -0
- package/skills/omd-init/SKILL.md +18 -12
- package/skills/omd-locale-adapter/SKILL.md +58 -91
- package/skills/omd-orchestrator/SKILL.md +11 -5
- package/skills/omd-reference-capture/SKILL.md +80 -26
- package/skills/omd-reference-capture/scripts/PLAYWRIGHT-LICENSE.txt +202 -0
- package/skills/omd-reference-capture/scripts/PLAYWRIGHT-NOTICE.txt +5 -0
- package/skills/omd-reference-capture/scripts/THIRD_PARTY_NOTICES.md +3 -0
- package/skills/omd-reference-capture/scripts/capture-reference-evidence.mjs +159906 -0
- package/skills/omd-slop-audit/SKILL.md +110 -0
- package/skills/omd-slop-audit/agents/openai.yaml +4 -0
- package/skills/omd-slop-audit/references/pattern-catalog.md +96 -0
- package/skills/omd-slop-audit/references/sources.md +24 -0
- package/web/references/104/DESIGN.md +354 -0
- package/web/references/11st/DESIGN.md +197 -316
- package/web/references/29cm/DESIGN.md +297 -393
- package/web/references/42dot/DESIGN.md +390 -0
- package/web/references/8percent/DESIGN.md +438 -0
- package/web/references/ably/DESIGN.md +267 -572
- package/web/references/acer/DESIGN.md +329 -0
- package/web/references/airbnb/DESIGN.md +219 -557
- package/web/references/alipay/DESIGN.md +179 -420
- package/web/references/apple/DESIGN.md +224 -498
- package/web/references/asleep/DESIGN.md +402 -0
- package/web/references/au/DESIGN.md +334 -0
- package/web/references/autopedia/DESIGN.md +382 -0
- package/web/references/aws-cloudscape/DESIGN.md +241 -0
- package/web/references/baemin/DESIGN.md +332 -491
- package/web/references/banksalad/DESIGN.md +269 -180
- package/web/references/barogo/DESIGN.md +416 -0
- package/web/references/beusable/DESIGN.md +464 -0
- package/web/references/bilibili/DESIGN.md +206 -374
- package/web/references/bmw/DESIGN.md +162 -276
- package/web/references/brandi/DESIGN.md +184 -325
- package/web/references/catchtable/DESIGN.md +219 -264
- package/web/references/cgv/DESIGN.md +317 -0
- package/web/references/channeltalk/DESIGN.md +210 -336
- package/web/references/china-airlines/DESIGN.md +291 -0
- package/web/references/cjonstyle/DESIGN.md +453 -0
- package/web/references/class101/DESIGN.md +168 -387
- package/web/references/classum/DESIGN.md +228 -203
- package/web/references/claude/DESIGN.md +242 -479
- package/web/references/clay/DESIGN.md +179 -377
- package/web/references/clickhouse/DESIGN.md +254 -343
- package/web/references/cohere/DESIGN.md +214 -324
- package/web/references/coinone/DESIGN.md +199 -179
- package/web/references/corca/DESIGN.md +414 -0
- package/web/references/coupang/DESIGN.md +205 -475
- package/web/references/cursor/DESIGN.md +240 -381
- package/web/references/dabang/DESIGN.md +248 -213
- package/web/references/dable/DESIGN.md +431 -0
- package/web/references/datarize/DESIGN.md +217 -330
- package/web/references/dealicious/DESIGN.md +402 -0
- package/web/references/drdiary/DESIGN.md +404 -0
- package/web/references/elastic/DESIGN.md +238 -0
- package/web/references/elevenlabs/DESIGN.md +183 -321
- package/web/references/eslite/DESIGN.md +257 -0
- package/web/references/evaair/DESIGN.md +338 -0
- package/web/references/expo/DESIGN.md +238 -331
- package/web/references/familymart-tw/DESIGN.md +254 -0
- package/web/references/ferrari/DESIGN.md +160 -377
- package/web/references/figma/DESIGN.md +197 -451
- package/web/references/fitpet/DESIGN.md +445 -0
- package/web/references/flex/DESIGN.md +170 -253
- package/web/references/framer/DESIGN.md +197 -340
- package/web/references/freee/DESIGN.md +211 -533
- package/web/references/friendliai/DESIGN.md +431 -0
- package/web/references/frip/DESIGN.md +440 -0
- package/web/references/gangnamunni/DESIGN.md +154 -591
- package/web/references/gaudiolab/DESIGN.md +414 -0
- package/web/references/google/DESIGN.md +290 -398
- package/web/references/hashicorp/DESIGN.md +273 -318
- package/web/references/heydealer/DESIGN.md +429 -0
- package/web/references/humanscape/DESIGN.md +433 -0
- package/web/references/hyundai/DESIGN.md +158 -368
- package/web/references/hyundaicard/DESIGN.md +171 -121
- package/web/references/ibm/DESIGN.md +227 -378
- package/web/references/idus/DESIGN.md +450 -0
- package/web/references/igaworks/DESIGN.md +437 -0
- package/web/references/inflearn/DESIGN.md +221 -366
- package/web/references/intuit/DESIGN.md +244 -0
- package/web/references/jandi/DESIGN.md +191 -291
- package/web/references/jobplanet/DESIGN.md +415 -0
- package/web/references/kakao/DESIGN.md +287 -475
- package/web/references/kakaobank/DESIGN.md +220 -521
- package/web/references/kakaogames/DESIGN.md +220 -0
- package/web/references/kakaopay/DESIGN.md +207 -526
- package/web/references/karrot/DESIGN.md +227 -251
- package/web/references/kb-kookmin/DESIGN.md +308 -0
- package/web/references/kbank/DESIGN.md +220 -175
- package/web/references/kmong/DESIGN.md +281 -356
- package/web/references/krds/DESIGN.md +245 -19
- package/web/references/kream/DESIGN.md +224 -359
- package/web/references/kurly/DESIGN.md +211 -533
- package/web/references/lamborghini/DESIGN.md +198 -360
- package/web/references/lguplus/DESIGN.md +259 -0
- package/web/references/likelion/DESIGN.md +283 -0
- package/web/references/line/DESIGN.md +396 -355
- package/web/references/linear.app/DESIGN.md +209 -562
- package/web/references/lotteon/DESIGN.md +386 -0
- package/web/references/lovable/DESIGN.md +255 -349
- package/web/references/makinarocks/DESIGN.md +149 -349
- package/web/references/maum-ai/DESIGN.md +423 -0
- package/web/references/medibloc/DESIGN.md +425 -0
- package/web/references/megabox/DESIGN.md +232 -0
- package/web/references/mercari/DESIGN.md +217 -434
- package/web/references/microsoft/DESIGN.md +234 -388
- package/web/references/mildang/DESIGN.md +411 -0
- package/web/references/millie/DESIGN.md +183 -504
- package/web/references/minimax/DESIGN.md +264 -322
- package/web/references/miricanvas/DESIGN.md +182 -355
- package/web/references/miro/DESIGN.md +234 -232
- package/web/references/mistral.ai/DESIGN.md +231 -314
- package/web/references/mixi/DESIGN.md +234 -0
- package/web/references/moin/DESIGN.md +445 -0
- package/web/references/mongodb/DESIGN.md +219 -316
- package/web/references/musinsa/DESIGN.md +184 -510
- package/web/references/mynavi/DESIGN.md +242 -0
- package/web/references/myrealtrip/DESIGN.md +169 -406
- package/web/references/naver/DESIGN.md +328 -499
- package/web/references/naverwebtoon/DESIGN.md +172 -395
- package/web/references/nhn/DESIGN.md +169 -346
- package/web/references/nhncloud/DESIGN.md +185 -123
- package/web/references/notion/DESIGN.md +271 -475
- package/web/references/nrise/DESIGN.md +417 -0
- package/web/references/ohouse/DESIGN.md +210 -549
- package/web/references/oliveyoung/DESIGN.md +217 -326
- package/web/references/ollama/DESIGN.md +241 -308
- package/web/references/onestore/DESIGN.md +248 -0
- package/web/references/palantir/DESIGN.md +256 -0
- package/web/references/panasonic/DESIGN.md +276 -0
- package/web/references/patternfly/DESIGN.md +259 -0
- package/web/references/payhere/DESIGN.md +438 -0
- package/web/references/pega/DESIGN.md +262 -0
- package/web/references/peoplefund/DESIGN.md +431 -0
- package/web/references/petfriends/DESIGN.md +428 -0
- package/web/references/pinkfong/DESIGN.md +199 -367
- package/web/references/pinterest/DESIGN.md +258 -308
- package/web/references/poya/DESIGN.md +286 -0
- package/web/references/pozalabs/DESIGN.md +438 -0
- package/web/references/protopie/DESIGN.md +419 -0
- package/web/references/qraft/DESIGN.md +448 -0
- package/web/references/quotabook/DESIGN.md +449 -0
- package/web/references/recruit/DESIGN.md +247 -0
- package/web/references/remember/DESIGN.md +202 -396
- package/web/references/resend/DESIGN.md +274 -348
- package/web/references/sakura-internet/DESIGN.md +269 -0
- package/web/references/samsung/DESIGN.md +157 -359
- package/web/references/sandoll/DESIGN.md +445 -0
- package/web/references/sanity/DESIGN.md +241 -375
- package/web/references/scatterlab/DESIGN.md +412 -0
- package/web/references/selectstar/DESIGN.md +439 -0
- package/web/references/servicenow/DESIGN.md +289 -0
- package/web/references/shinhanbank/DESIGN.md +161 -341
- package/web/references/shinhancard/DESIGN.md +208 -319
- package/web/references/sionic/DESIGN.md +454 -0
- package/web/references/sktelecom/DESIGN.md +310 -0
- package/web/references/socar/DESIGN.md +125 -32
- package/web/references/softbank/DESIGN.md +231 -0
- package/web/references/sony/DESIGN.md +234 -0
- package/web/references/soop/DESIGN.md +261 -0
- package/web/references/spacex/DESIGN.md +184 -323
- package/web/references/spotify/DESIGN.md +253 -394
- package/web/references/squeezebits/DESIGN.md +441 -0
- package/web/references/stayfolio/DESIGN.md +422 -0
- package/web/references/stripe/DESIGN.md +212 -491
- package/web/references/supabase/DESIGN.md +244 -316
- package/web/references/tabling/DESIGN.md +415 -0
- package/web/references/taishinbank/DESIGN.md +243 -0
- package/web/references/teamlab/DESIGN.md +240 -0
- package/web/references/teamsparta/DESIGN.md +472 -0
- package/web/references/tellingme/DESIGN.md +392 -0
- package/web/references/tesla/DESIGN.md +244 -427
- package/web/references/thsr/DESIGN.md +284 -0
- package/web/references/thumbtack/DESIGN.md +302 -0
- package/web/references/together.ai/DESIGN.md +257 -304
- package/web/references/toss/DESIGN.md +251 -593
- package/web/references/toss-securities/DESIGN.md +255 -178
- package/web/references/tossbank/DESIGN.md +195 -491
- package/web/references/toyota/DESIGN.md +238 -0
- package/web/references/tving/DESIGN.md +197 -245
- package/web/references/typed/DESIGN.md +413 -0
- package/web/references/uber/DESIGN.md +256 -333
- package/web/references/udn/DESIGN.md +250 -0
- package/web/references/upbit/DESIGN.md +145 -256
- package/web/references/upstage/DESIGN.md +211 -204
- package/web/references/uswds/DESIGN.md +287 -0
- package/web/references/vercel/DESIGN.md +236 -440
- package/web/references/wanted/DESIGN.md +215 -487
- package/web/references/wise/DESIGN.md +223 -231
- package/web/references/wisetracker/DESIGN.md +462 -0
- package/web/references/wooribank/DESIGN.md +245 -0
- package/web/references/yanolja/DESIGN.md +250 -419
- package/web/references/yeogiotte/DESIGN.md +235 -418
- package/web/references/zapier/DESIGN.md +256 -377
- package/web/references/zendesk/DESIGN.md +288 -0
- package/web/references/zigzag/DESIGN.md +200 -621
- package/dist/install-skills-7UUDOLG2.js +0 -734
- package/dist/install-skills-7UUDOLG2.js.map +0 -1
|
@@ -4,486 +4,345 @@ name: Spotify
|
|
|
4
4
|
country: US
|
|
5
5
|
category: consumer-tech
|
|
6
6
|
homepage: "https://www.spotify.com"
|
|
7
|
-
primary_color: "#
|
|
7
|
+
primary_color: "#1ed760"
|
|
8
8
|
logo:
|
|
9
9
|
type: simpleicons
|
|
10
10
|
slug: spotify
|
|
11
|
-
verified: "2026-
|
|
11
|
+
verified: "2026-07-13"
|
|
12
12
|
omd: "0.1"
|
|
13
13
|
tokens:
|
|
14
|
-
source:
|
|
15
|
-
extracted: "2026-
|
|
14
|
+
source: reconciled
|
|
15
|
+
extracted: "2026-07-13"
|
|
16
16
|
colors:
|
|
17
17
|
primary: "#1ed760"
|
|
18
|
-
|
|
19
|
-
brand-border: "#1db954"
|
|
20
|
-
canvas: "#121212"
|
|
18
|
+
control: "#1f1f1f"
|
|
21
19
|
foreground: "#ffffff"
|
|
22
20
|
muted: "#b3b3b3"
|
|
23
|
-
|
|
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:
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
body
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
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
|
|
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
|
-
|
|
166
|
+
**Observed characteristics**
|
|
71
167
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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
|
-
###
|
|
87
|
-
|
|
88
|
-
- **
|
|
89
|
-
- **
|
|
90
|
-
- **
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
- **
|
|
96
|
-
|
|
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
|
-
###
|
|
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
|
-
|
|
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
|
-
###
|
|
200
|
+
### Captured player hierarchy
|
|
151
201
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
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
|
-
|
|
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
|
-
|
|
172
|
-
|
|
210
|
+
### Player controls — product surfaces
|
|
211
|
+
|
|
212
|
+
**Search field**
|
|
213
|
+
- Background: `#1f1f1f`
|
|
173
214
|
- Text: `#ffffff`
|
|
174
|
-
- Border:
|
|
215
|
+
- Border: 0px solid `#ffffff`
|
|
175
216
|
- Radius: 500px
|
|
176
|
-
- Padding:
|
|
177
|
-
- Font: 16px /
|
|
178
|
-
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
-
|
|
182
|
-
-
|
|
183
|
-
|
|
184
|
-
|
|
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
|
-
-
|
|
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
|
|
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:
|
|
205
|
-
- Hover:
|
|
206
|
-
-
|
|
207
|
-
|
|
208
|
-
|
|
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
|
-
###
|
|
249
|
+
### Newsroom / editorial chrome — separate surface
|
|
233
250
|
|
|
234
|
-
**
|
|
235
|
-
- Background: `#
|
|
236
|
-
- Text: `#
|
|
237
|
-
- Border:
|
|
238
|
-
- Radius:
|
|
239
|
-
- Padding: 16px
|
|
240
|
-
-
|
|
241
|
-
-
|
|
242
|
-
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
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:
|
|
259
|
-
- Radius:
|
|
260
|
-
- Padding:
|
|
261
|
-
- Font:
|
|
262
|
-
-
|
|
263
|
-
|
|
264
|
-
|
|
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
|
-
**
|
|
282
|
-
**Tier
|
|
283
|
-
**
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
329
|
-
-
|
|
330
|
-
-
|
|
331
|
-
-
|
|
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
|
-
|
|
338
|
-
- Don't
|
|
339
|
-
- Don't
|
|
340
|
-
- Don't
|
|
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
|
-
|
|
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
|
-
|
|
368
|
-
-
|
|
369
|
-
-
|
|
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
|
-
|
|
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 |
|
|
316
|
+
| Context | Grounded guidance |
|
|
396
317
|
|---|---|
|
|
397
|
-
|
|
|
398
|
-
|
|
|
399
|
-
|
|
|
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
|
-
|
|
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
|
-
|
|
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. **
|
|
423
|
-
2. **
|
|
424
|
-
3. **
|
|
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
|
-
|
|
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
|
-
**
|
|
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
|
-
|
|
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
|
-
|
|
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.
|