oh-my-design-cli 1.8.6 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +2761 -85
- 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/airbridge/DESIGN.md +451 -0
- 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/bigin/DESIGN.md +454 -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/buzzvil/DESIGN.md +457 -0
- package/web/references/cafe24/DESIGN.md +472 -0
- 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/codeit/DESIGN.md +470 -0
- 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 +338 -0
- 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/elice/DESIGN.md +445 -0
- 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/furiosaai/DESIGN.md +450 -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/goorm/DESIGN.md +470 -0
- package/web/references/greencar/DESIGN.md +420 -0
- package/web/references/hackle/DESIGN.md +472 -0
- 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/hwahae/DESIGN.md +453 -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/kcd/DESIGN.md +432 -0
- 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/kyobobook/DESIGN.md +445 -0
- package/web/references/lablup/DESIGN.md +474 -0
- package/web/references/lamborghini/DESIGN.md +198 -360
- package/web/references/lemonbase/DESIGN.md +452 -0
- 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 +242 -0
- 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/moreh/DESIGN.md +437 -0
- 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/neosapience/DESIGN.md +441 -0
- package/web/references/nhn/DESIGN.md +169 -346
- package/web/references/nhncloud/DESIGN.md +185 -123
- package/web/references/nota/DESIGN.md +451 -0
- 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/portone/DESIGN.md +446 -0
- 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/queenit/DESIGN.md +432 -0
- package/web/references/quotabook/DESIGN.md +449 -0
- package/web/references/rebellions/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/returnzero/DESIGN.md +460 -0
- 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/saramin/DESIGN.md +465 -0
- 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/shiftee/DESIGN.md +468 -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/solapi/DESIGN.md +483 -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/supertone/DESIGN.md +413 -0
- 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/vuno/DESIGN.md +413 -0
- package/web/references/wanted/DESIGN.md +215 -487
- package/web/references/weverse/DESIGN.md +437 -0
- 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,11 +4,11 @@ name: Sanity
|
|
|
4
4
|
country: US
|
|
5
5
|
category: backend-devops
|
|
6
6
|
homepage: "https://www.sanity.io"
|
|
7
|
-
primary_color: "#
|
|
7
|
+
primary_color: "#ff5500"
|
|
8
8
|
logo:
|
|
9
9
|
type: simpleicons
|
|
10
10
|
slug: sanity
|
|
11
|
-
verified: "2026-
|
|
11
|
+
verified: "2026-07-13"
|
|
12
12
|
omd: "0.1"
|
|
13
13
|
ds:
|
|
14
14
|
name: Sanity UI
|
|
@@ -17,414 +17,299 @@ ds:
|
|
|
17
17
|
description: Sanity's accessible React toolkit for building apps with design tokens.
|
|
18
18
|
og_image: "https://cdn.sanity.io/images/mos42crl/production/f378d0067c1406f4e3d3ed6874cd715c72f52d2c-1920x1080.png"
|
|
19
19
|
tokens:
|
|
20
|
-
source:
|
|
21
|
-
extracted: "2026-
|
|
20
|
+
source: reconciled
|
|
21
|
+
extracted: "2026-07-13"
|
|
22
22
|
colors:
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
interactive: "#0052ef"
|
|
27
|
-
blue-light: "#55beff"
|
|
28
|
-
blue-dim: "#afe3ff"
|
|
29
|
-
green: "#19d600"
|
|
23
|
+
brand-srgb-approx: "#ff5500"
|
|
24
|
+
canvas: "#ffffff"
|
|
25
|
+
foreground: "#0b0b0b"
|
|
30
26
|
surface: "#212121"
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
error: "#dd0000"
|
|
37
|
-
gpc-green: "#37cd84"
|
|
27
|
+
surface-subtle: "#ededed"
|
|
28
|
+
on-dark: "#ffffff"
|
|
29
|
+
muted: "#b9b9b9"
|
|
30
|
+
divider: "#d6d6d6"
|
|
31
|
+
focus-blue: "#0052ef"
|
|
38
32
|
typography:
|
|
39
|
-
family: { sans: "
|
|
40
|
-
display-hero: { size: 112, weight: 400, lineHeight:
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
subheading: { size: 20, weight: 425, lineHeight: 1.13, tracking: -0.2, use: "Sub-section markers" }
|
|
47
|
-
body-lg: { size: 18, weight: 400, lineHeight: 1.50, tracking: -0.18, use: "Intro paragraphs, descriptions" }
|
|
48
|
-
body: { size: 16, weight: 400, lineHeight: 1.50, use: "Standard body text" }
|
|
49
|
-
caption: { size: 13, weight: 400, lineHeight: 1.30, tracking: -0.13, use: "Metadata, descriptions, tags" }
|
|
50
|
-
micro: { size: 11, weight: 600, lineHeight: 1.00, use: "Uppercase labels, tiny badges" }
|
|
51
|
-
code: { size: 15, weight: 400, lineHeight: 1.50, use: "Code blocks, technical content" }
|
|
52
|
-
spacing: { xs: 4, sm: 8, md: 12, base: 16, lg: 24, xl: 32, xxl: 48, section: 96 }
|
|
53
|
-
rounded: { sm: 4, md: 6, lg: 12, full: 9999 }
|
|
54
|
-
shadow:
|
|
55
|
-
ring: "0px 0px 0px 1px #212121"
|
|
56
|
-
focus: "0 0 0 2px #0052ef"
|
|
33
|
+
family: { sans: "Waldenburg-75357948a2b6a39b", mono: "IBM Plex Mono-eea356736565d76d" }
|
|
34
|
+
display-hero: { size: 112, weight: 400, lineHeight: 112, tracking: -4.48, use: "Home H1" }
|
|
35
|
+
section: { size: 48, weight: 400, lineHeight: 51.84, tracking: -1.68, use: "Home section heading" }
|
|
36
|
+
body: { size: 15, weight: 400, lineHeight: 22.5, tracking: -0.15, use: "Repeated body and input text" }
|
|
37
|
+
control: { size: 13, weight: 400, lineHeight: 16.9, use: "Compact action labels" }
|
|
38
|
+
spacing: { xs: 4, sm: 8, md: 12, lg: 24, xl: 32 }
|
|
39
|
+
rounded: { input: 3, control: 99999 }
|
|
57
40
|
components:
|
|
58
|
-
button-
|
|
59
|
-
button-
|
|
60
|
-
button-
|
|
61
|
-
|
|
62
|
-
button-label: { type: button, bg: "#212121", fg: "#b9b9b9", font: "11px/600 waldenburgNormal", use: "Uppercase tab-like nav and filters" }
|
|
63
|
-
card-dark: { type: card, bg: "#212121", fg: "#ffffff", radius: 6, padding: "24px", use: "Dark content card, 1px #353535 border" }
|
|
64
|
-
card-feature: { type: card, bg: "#0b0b0b", radius: 12, padding: "32px", use: "Full-bleed feature card with overlaid text" }
|
|
65
|
-
input-text: { type: input, bg: "#0b0b0b", fg: "#b9b9b9", radius: 3, padding: "8px 12px", use: "Text input, 1px #212121 border, focus 2px #0052ef ring" }
|
|
66
|
-
badge-subtle: { type: badge, bg: "#ffffff", fg: "#0b0b0b", radius: 9999, padding: "8px", font: "13px", use: "Neutral subtle pill" }
|
|
67
|
-
badge-filled: { type: badge, bg: "#0b0b0b", fg: "#ffffff", radius: 9999, padding: "8px", font: "13px", use: "Neutral filled pill" }
|
|
41
|
+
button-brand: { type: button, fg: "#0b0b0b", radius: 99999, padding: "4px 12px", font: "13px/400 IBM Plex Mono-eea356736565d76d", hover: "near-black fill with P3-orange text", use: "P3 orange pill; home + pricing surfaces" }
|
|
42
|
+
button-inverse: { type: button, bg: "#0b0b0b", fg: "#ffffff", radius: 99999, padding: "4px 12px", font: "13px/400 IBM Plex Mono-eea356736565d76d", hover: "near-black fill with white text", use: "Compact inverse pill" }
|
|
43
|
+
button-light: { type: button, bg: "#ededed", fg: "#0b0b0b", radius: 99999, padding: "4px 12px", font: "13px/400 IBM Plex Mono-eea356736565d76d", hover: "light-gray fill with near-black text", pressed: "light-gray fill with near-black text", use: "Compact light pill" }
|
|
44
|
+
input-text: { type: input, bg: "#0b0b0b", fg: "#b9b9b9", radius: 3, padding: "8px 12px", font: "15px/400 Waldenburg-75357948a2b6a39b", focus: "P3-orange border, #212121 fill, white text", use: "Home textarea" }
|
|
68
45
|
components_harvested: true
|
|
46
|
+
verification_v2:
|
|
47
|
+
schema: 2
|
|
48
|
+
checked: "2026-07-13"
|
|
49
|
+
surfaces:
|
|
50
|
+
- { id: home, url: "https://www.sanity.io/", inspected: "2026-07-13" }
|
|
51
|
+
- { id: surface-2, url: "https://www.sanity.io/pricing", inspected: "2026-07-13" }
|
|
52
|
+
- { id: surface-3, url: "https://www.sanity.io/pricing?ref=navbar", inspected: "2026-07-13" }
|
|
53
|
+
sources:
|
|
54
|
+
- { id: home, url: "https://www.sanity.io/", kind: product-surface, captured: "2026-07-13" }
|
|
55
|
+
- { id: pricing, url: "https://www.sanity.io/pricing", kind: product-surface, captured: "2026-07-13" }
|
|
56
|
+
- { id: pricing-navbar, url: "https://www.sanity.io/pricing?ref=navbar", kind: product-surface, captured: "2026-07-13" }
|
|
57
|
+
claims:
|
|
58
|
+
"tokens.colors.brand-srgb-approx": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
59
|
+
"tokens.colors.canvas": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
60
|
+
"tokens.colors.foreground": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
61
|
+
"tokens.colors.surface": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
62
|
+
"tokens.colors.surface-subtle": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
63
|
+
"tokens.colors.on-dark": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
64
|
+
"tokens.colors.muted": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
65
|
+
"tokens.colors.divider": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
66
|
+
"tokens.colors.focus-blue": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
67
|
+
"tokens.typography.family.sans": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
68
|
+
"tokens.typography.family.mono": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
69
|
+
"tokens.typography.display-hero.size": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
70
|
+
"tokens.typography.display-hero.weight": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
71
|
+
"tokens.typography.display-hero.lineHeight": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
72
|
+
"tokens.typography.display-hero.tracking": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
73
|
+
"tokens.typography.display-hero.use": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
74
|
+
"tokens.typography.section.size": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
75
|
+
"tokens.typography.section.weight": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
76
|
+
"tokens.typography.section.lineHeight": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
77
|
+
"tokens.typography.section.tracking": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
78
|
+
"tokens.typography.section.use": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
79
|
+
"tokens.typography.body.size": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
80
|
+
"tokens.typography.body.weight": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
81
|
+
"tokens.typography.body.lineHeight": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
82
|
+
"tokens.typography.body.tracking": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
83
|
+
"tokens.typography.body.use": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
84
|
+
"tokens.typography.control.size": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
85
|
+
"tokens.typography.control.weight": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
86
|
+
"tokens.typography.control.lineHeight": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
87
|
+
"tokens.typography.control.use": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
88
|
+
"tokens.rounded.input": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
89
|
+
"tokens.rounded.control": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
90
|
+
"tokens.spacing.xs": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
91
|
+
"tokens.spacing.sm": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
92
|
+
"tokens.spacing.md": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
93
|
+
"tokens.spacing.lg": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
94
|
+
"tokens.spacing.xl": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
95
|
+
"tokens.components.button-brand.type": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
96
|
+
"tokens.components.button-brand.fg": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
97
|
+
"tokens.components.button-brand.radius": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
98
|
+
"tokens.components.button-brand.padding": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
99
|
+
"tokens.components.button-brand.font": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
100
|
+
"tokens.components.button-brand.hover": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
101
|
+
"tokens.components.button-brand.use": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
102
|
+
"tokens.components.button-inverse.type": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
103
|
+
"tokens.components.button-inverse.bg": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
104
|
+
"tokens.components.button-inverse.fg": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
105
|
+
"tokens.components.button-inverse.radius": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
106
|
+
"tokens.components.button-inverse.padding": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
107
|
+
"tokens.components.button-inverse.font": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
108
|
+
"tokens.components.button-inverse.hover": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
109
|
+
"tokens.components.button-inverse.use": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
110
|
+
"tokens.components.button-light.type": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
111
|
+
"tokens.components.button-light.bg": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
112
|
+
"tokens.components.button-light.fg": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
113
|
+
"tokens.components.button-light.radius": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
114
|
+
"tokens.components.button-light.padding": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
115
|
+
"tokens.components.button-light.font": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
116
|
+
"tokens.components.button-light.hover": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
117
|
+
"tokens.components.button-light.pressed": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
118
|
+
"tokens.components.button-light.use": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
119
|
+
"tokens.components.input-text.type": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
120
|
+
"tokens.components.input-text.bg": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
121
|
+
"tokens.components.input-text.fg": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
122
|
+
"tokens.components.input-text.radius": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
123
|
+
"tokens.components.input-text.padding": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
124
|
+
"tokens.components.input-text.font": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
125
|
+
"tokens.components.input-text.focus": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
126
|
+
"tokens.components.input-text.use": { surface_id: home, source_id: home, captured: "2026-07-13" }
|
|
127
|
+
conflicts: []
|
|
69
128
|
---
|
|
70
129
|
|
|
71
130
|
# Design System Inspiration of Sanity
|
|
72
131
|
|
|
73
132
|
## 1. Visual Theme & Atmosphere
|
|
74
133
|
|
|
75
|
-
Sanity
|
|
134
|
+
Sanity is a configurable backend and content platform for teams building content-driven websites, apps, and AI experiences. Its current positioning is the Content Operating System: structured content, an extensible Studio, and APIs/automation that let organizations shape the content workflow around their own business. The public site makes that engineering posture tangible with a deliberately spare mix of editorial-sized Waldenburg type, compact IBM Plex Mono controls, and hard-edged light/dark panels rather than a decorative CMS aesthetic.
|
|
76
135
|
|
|
77
|
-
The
|
|
78
|
-
|
|
79
|
-
What makes Sanity distinctive is the interplay between its monochromatic dark palette and vivid, saturated accent punctuation. The neutral scale runs from pure black through a tightly controlled gray ramp (`#0b0b0b` -> `#212121` -> `#353535` -> `#797979` -> `#b9b9b9` -> `#ededed` -> `#ffffff`) with no warm or cool bias -- just pure, achromatic precision. Against this disciplined backdrop, a neon green accent (display-p3 green) and electric blue (`#0052ef`) land with the impact of signal lights in a dark control room. The orange-red CTA (`#f36458`) provides the only warm touch in an otherwise cool system.
|
|
136
|
+
The observed marketing surface uses a white base (`#ffffff`) and near-black foreground (`#0b0b0b`), with the P3 orange `color(display-p3 1 0.3333 0)` as the conspicuous action color. That P3 value is the primary live value; `#ff5500` is included below only as an sRGB approximation for consumers that require hex. Pills recur in compact navigation/pricing actions, while the home hero has a larger 24px Waldenburg action. Sanity’s 2025 launch framed this product direction as a move from CMS category language toward a Content Operating System, with AI and workflow automation as part of the platform rather than a separate visual theme.
|
|
80
137
|
|
|
81
138
|
**Key Characteristics:**
|
|
82
|
-
-
|
|
83
|
-
-
|
|
84
|
-
-
|
|
85
|
-
-
|
|
86
|
-
-
|
|
87
|
-
- IBM Plex Mono as the technical counterweight to the editorial display face
|
|
88
|
-
- Full-bleed dark sections with content contained in measured max-width containers
|
|
89
|
-
- Hover states that shift to electric blue (`#0052ef`) across all interactive elements -- a consistent "activation" signal
|
|
139
|
+
- White and near-black base surfaces with a P3-orange action signal
|
|
140
|
+
- Loaded Waldenburg for editorial content and loaded IBM Plex Mono for compact controls
|
|
141
|
+
- Strongly rounded action pills (99999px in the observed product-marketing controls)
|
|
142
|
+
- Small, exact spacing increments: 4px/8px/12px recur in controls; 24px/32px appear in hero actions
|
|
143
|
+
- Light/dark inversion is an observed hover treatment for the P3-orange action, not a general rule for every control
|
|
90
144
|
|
|
91
145
|
## 2. Color Palette & Roles
|
|
92
146
|
|
|
93
|
-
###
|
|
94
|
-
- **Sanity
|
|
95
|
-
- **
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
- **
|
|
100
|
-
- **Light
|
|
101
|
-
- **
|
|
102
|
-
- **
|
|
103
|
-
|
|
104
|
-
###
|
|
105
|
-
- **
|
|
106
|
-
-
|
|
107
|
-
- **Medium Dark** (`#353535`): Tertiary surface and border color for creating depth between dark layers.
|
|
108
|
-
- **Pure White** (`#ffffff`): Used for inverted sections, light-on-dark text, and specific button surfaces.
|
|
109
|
-
- **Light Gray** (`#ededed`): Light surface for inverted/light sections and subtle background tints.
|
|
110
|
-
|
|
111
|
-
### Neutrals & Text
|
|
112
|
-
- **White** (`#ffffff`): Primary text color on dark surfaces, maximum legibility.
|
|
113
|
-
- **Silver** (`#b9b9b9`): Secondary text, body copy on dark surfaces, muted descriptions, and placeholder text.
|
|
114
|
-
- **Medium Gray** (`#797979`): Tertiary text, metadata, timestamps, and de-emphasized content.
|
|
115
|
-
- **Charcoal** (`#212121`): Text on light/inverted surfaces.
|
|
116
|
-
- **Near Black Text** (`#0b0b0b`): Primary text on white/light button surfaces.
|
|
117
|
-
|
|
118
|
-
### Semantic
|
|
119
|
-
- **Error Red** (`#dd0000`): Destructive actions, validation errors, and critical warnings -- a pure, high-saturation red.
|
|
120
|
-
- **GPC Green** (`#37cd84`): Privacy/compliance indicator green.
|
|
121
|
-
- **Focus Ring Blue** (`#0052ef`): Focus ring color for accessibility, matching the interactive blue.
|
|
122
|
-
|
|
123
|
-
### Border System
|
|
124
|
-
- **Dark Border** (`#0b0b0b`): Primary border on dark containers -- barely visible, maintaining minimal containment.
|
|
125
|
-
- **Subtle Border** (`#212121`): Standard border for inputs, textareas, and card edges on dark surfaces.
|
|
126
|
-
- **Medium Border** (`#353535`): More visible borders for emphasized containment and dividers.
|
|
127
|
-
- **Light Border** (`#ffffff`): Border on inverted/light elements or buttons needing contrast separation.
|
|
128
|
-
- **Orange Border** (`color(display-p3 1 0.3333 0)`): Special accent border for highlighted/featured elements.
|
|
147
|
+
### Brand Action
|
|
148
|
+
- **Sanity Orange (live P3)** (`color(display-p3 1 0.3333 0)`): Observed as background and border on home and pricing action pills. The hex `#ff5500` is an sRGB approximation retained for token consumers; it is not a replacement for the P3 source value.
|
|
149
|
+
- **Near Black** (`#0b0b0b`): Primary foreground, dark button fill, and the hover inversion partner for the orange action.
|
|
150
|
+
|
|
151
|
+
### Surfaces & Text
|
|
152
|
+
- **White** (`#ffffff`): Observed base background and text on inverse controls.
|
|
153
|
+
- **Dark Gray** (`#212121`): Observed textarea background and a dark secondary surface.
|
|
154
|
+
- **Light Gray** (`#ededed`): Compact light-pill fill across home and pricing.
|
|
155
|
+
- **Silver** (`#b9b9b9`): Muted text and the observed hover fill of one pricing control.
|
|
156
|
+
- **Divider Gray** (`#d6d6d6`): Observed dialog border.
|
|
157
|
+
|
|
158
|
+
### State-specific Evidence
|
|
159
|
+
- **Blue** (`#0052ef`): Observed as a border/background in the captured surfaces; its exact component assignment is not generalized here.
|
|
160
|
+
- The focused home textarea uses the P3-orange border. No error/success palette is promoted because this capture did not observe those states.
|
|
129
161
|
|
|
130
162
|
## 3. Typography Rules
|
|
131
163
|
|
|
132
164
|
### Font Family
|
|
133
|
-
- **
|
|
134
|
-
- **
|
|
135
|
-
- **
|
|
136
|
-
- **
|
|
137
|
-
|
|
138
|
-
*Note: waldenburgNormal is a custom typeface. For external implementations, use Inter or Space Grotesk as the sans substitute (geometric, slightly condensed feel). IBM Plex Mono is available on Google Fonts.*
|
|
165
|
+
- **Live product/marketing sans:** `Waldenburg-75357948a2b6a39b` is both computed and loaded (832 observed uses across body, headings, buttons, inputs, and dialogs). The current evidence exposes no browser-loadable source URL, so the family is preserved by its delivered family name only; no substitute is authorized.
|
|
166
|
+
- **Live product/marketing mono:** `IBM Plex Mono-eea356736565d76d` is both computed and loaded (568 observed uses across controls, labels, and content). The upstream IBM Plex family is distributed under the SIL Open Font License 1.1 by IBM; that license source does not establish a separate Sanity font asset.
|
|
167
|
+
- **Declared only:** Inter/Inter var appear in third-party `assets.qualified.com` declarations with zero visible uses; they are excluded from the UI family tokens.
|
|
168
|
+
- **System/embedded chrome:** Helvetica is present only in the cookie-consent dialog (three uses); it is system/embedded chrome, not a Sanity product or marketing type token.
|
|
139
169
|
|
|
140
170
|
### Hierarchy
|
|
141
171
|
|
|
142
172
|
| Role | Font | Size | Weight | Line Height | Letter Spacing | Notes |
|
|
143
173
|
|------|------|------|--------|-------------|----------------|-------|
|
|
144
|
-
| Display / Hero |
|
|
145
|
-
| Hero
|
|
146
|
-
| Section
|
|
147
|
-
|
|
|
148
|
-
|
|
|
149
|
-
|
|
|
150
|
-
| Subheading | waldenburgNormal | 20px (1.25rem) | 425 | 1.13 (tight) | -0.2px | Sub-section markers |
|
|
151
|
-
| Body Large | waldenburgNormal | 18px (1.13rem) | 400 | 1.50 | -0.18px | Intro paragraphs, descriptions |
|
|
152
|
-
| Body | waldenburgNormal | 16px (1rem) | 400 | 1.50 | normal | Standard body text |
|
|
153
|
-
| Body Small | waldenburgNormal | 15px (0.94rem) | 400 | 1.50 | -0.15px | Compact body text |
|
|
154
|
-
| Caption | waldenburgNormal | 13px (0.81rem) | 400-500 | 1.30-1.50 | -0.13px | Metadata, descriptions, tags |
|
|
155
|
-
| Small Caption | waldenburgNormal | 12px (0.75rem) | 400 | 1.50 | -0.12px | Footnotes, timestamps |
|
|
156
|
-
| Micro / Label | waldenburgNormal | 11px (0.69rem) | 500-600 | 1.00-1.50 | normal | Uppercase labels, tiny badges |
|
|
157
|
-
| Code Body | IBM Plex Mono | 15px (0.94rem) | 400 | 1.50 | normal | Code blocks, technical content |
|
|
158
|
-
| Code Caption | IBM Plex Mono | 13px (0.81rem) | 400-500 | 1.30-1.50 | normal | Inline code, small technical labels |
|
|
159
|
-
| Code Micro | IBM Plex Mono | 10-12px | 400 | 1.30-1.50 | normal | Tiny code labels, uppercase tags |
|
|
174
|
+
| Display / Hero | Waldenburg | 112px | 400 | 112px | -4.48px | One home H1 observation |
|
|
175
|
+
| Hero / CTA | Waldenburg | 24px | 400 | 26.4px | -0.24px | Home action pill |
|
|
176
|
+
| Section heading | Waldenburg | 48px | 400 | 51.84px | -1.68px | Home heading observation |
|
|
177
|
+
| Body compact | Waldenburg | 15px | 400 | 22.5px | -0.15px | Repeated body/input observation |
|
|
178
|
+
| Body | Waldenburg | 16px | 400 | 24px | normal | Repeated content observation |
|
|
179
|
+
| Control label | IBM Plex Mono | 13px | 400 | 16.9px | normal | Repeated compact action and label observation |
|
|
160
180
|
|
|
161
181
|
### Principles
|
|
162
|
-
- **
|
|
163
|
-
- **
|
|
164
|
-
- **
|
|
165
|
-
- **Tight headings, relaxed body**: Headings use 1.00-1.24 line-height (extremely tight), while body text breathes at 1.50. This contrast creates clear visual hierarchy.
|
|
166
|
-
- **Uppercase for technical labels**: IBM Plex Mono captions and small labels frequently use `text-transform: uppercase` with tight line-heights, creating a "system readout" aesthetic for technical metadata.
|
|
182
|
+
- **Two delivered registers**: Waldenburg handles the editorial scale; IBM Plex Mono is the dense utility/control register.
|
|
183
|
+
- **Tracking is evidence-bound**: The capture shows increasingly negative tracking at the observed 24px, 48px, 72px, and 112px sizes. It does not establish a global OpenType-feature policy.
|
|
184
|
+
- **No fallback substitution**: a loaded but source-less Waldenburg delivery is still a live family fact; external implementations must label it unavailable rather than silently render Inter or a system font as Waldenburg.
|
|
167
185
|
|
|
168
186
|
## 4. Component Stylings
|
|
169
187
|
|
|
170
|
-
###
|
|
171
|
-
|
|
172
|
-
**
|
|
173
|
-
- Background:
|
|
174
|
-
- Text:
|
|
175
|
-
-
|
|
176
|
-
-
|
|
177
|
-
-
|
|
178
|
-
-
|
|
179
|
-
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
-
|
|
184
|
-
-
|
|
185
|
-
- Border
|
|
186
|
-
-
|
|
187
|
-
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
-
|
|
191
|
-
-
|
|
192
|
-
|
|
193
|
-
|
|
188
|
+
### Actions
|
|
189
|
+
|
|
190
|
+
**Brand compact pill**
|
|
191
|
+
- Background: `color(display-p3 1 0.3333 0)`
|
|
192
|
+
- Text: `#0b0b0b`
|
|
193
|
+
- Border: 1px solid `color(display-p3 1 0.3333 0)`
|
|
194
|
+
- Radius: 99999px
|
|
195
|
+
- Padding: 4px 12px
|
|
196
|
+
- Font: 13px / 400 / IBM Plex Mono-eea356736565d76d
|
|
197
|
+
- Hover: Background `#0b0b0b`; Text `color(display-p3 1 0.3333 0)`
|
|
198
|
+
- Use: Home and pricing action links; `home::[data-omd-capture="14"]`, `surface-2::[data-omd-capture="10"]`, and `surface-3::[data-omd-capture="10"]`.
|
|
199
|
+
|
|
200
|
+
**Brand hero pill**
|
|
201
|
+
- Background: `color(display-p3 1 0.3333 0)`
|
|
202
|
+
- Text: `#0b0b0b`
|
|
203
|
+
- Border: 1px solid `color(display-p3 1 0.3333 0)`
|
|
204
|
+
- Radius: 99999px
|
|
205
|
+
- Padding: 8px 32px
|
|
206
|
+
- Font: 24px / 400 / Waldenburg-75357948a2b6a39b
|
|
207
|
+
- Hover: Background `#0b0b0b`; Text `color(display-p3 1 0.3333 0)`
|
|
208
|
+
- Pressed: Background `#0b0b0b`; Text `#0b0b0b`
|
|
209
|
+
- Use: Home hero action only; `home::[data-omd-capture="15"]`.
|
|
210
|
+
|
|
211
|
+
**Inverse compact pill**
|
|
212
|
+
- Background: `#0b0b0b`
|
|
213
|
+
- Text: `#ffffff`
|
|
194
214
|
- Border: 1px solid `#0b0b0b`
|
|
195
|
-
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
-
|
|
199
|
-
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
-
|
|
203
|
-
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
- Font:
|
|
207
|
-
-
|
|
208
|
-
-
|
|
209
|
-
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
-
|
|
216
|
-
- Border: 1px solid `#353535` or `#212121`
|
|
217
|
-
- Border Radius: 6px
|
|
218
|
-
- Padding: 24px
|
|
219
|
-
- Text: White (`#ffffff`) for titles, Silver (`#b9b9b9`) for body
|
|
220
|
-
- Hover: subtle border color shift or elevation change
|
|
221
|
-
|
|
222
|
-
**Feature Card (Full-bleed)**
|
|
223
|
-
- Background: `#0b0b0b` or full-bleed image/gradient
|
|
224
|
-
- Border: none or 1px solid `#212121`
|
|
225
|
-
- Border Radius: 12px
|
|
226
|
-
- Padding: 32-48px
|
|
227
|
-
- Contains large imagery with overlaid text
|
|
228
|
-
|
|
229
|
-
### Inputs
|
|
230
|
-
|
|
231
|
-
**Text Input / Textarea**
|
|
232
|
-
- Background: Near Black (`#0b0b0b`)
|
|
233
|
-
- Text: Silver (`#b9b9b9`)
|
|
215
|
+
- Radius: 99999px
|
|
216
|
+
- Padding: 4px 12px
|
|
217
|
+
- Font: 13px / 400 / IBM Plex Mono-eea356736565d76d
|
|
218
|
+
- Hover: Background `#0b0b0b`; Text `#ffffff`
|
|
219
|
+
- Use: Home and pricing compact inverse actions; `home::[data-omd-capture="13"]` and matching pricing surfaces.
|
|
220
|
+
|
|
221
|
+
**Light compact pill**
|
|
222
|
+
- Background: `#ededed`
|
|
223
|
+
- Text: `#0b0b0b`
|
|
224
|
+
- Radius: 99999px
|
|
225
|
+
- Padding: 4px 12px
|
|
226
|
+
- Font: 13px / 400 / IBM Plex Mono-eea356736565d76d
|
|
227
|
+
- Hover: Background `#ededed`; Text `#0b0b0b`
|
|
228
|
+
- Pressed: Background `#ededed`; Text `#0b0b0b`
|
|
229
|
+
- Use: Repeated home/pricing compact control; `home::[data-omd-capture="6"]` and matching pricing surfaces.
|
|
230
|
+
|
|
231
|
+
### Form field
|
|
232
|
+
|
|
233
|
+
**Home textarea**
|
|
234
|
+
- Background: `#0b0b0b`
|
|
235
|
+
- Text: `#b9b9b9`
|
|
234
236
|
- Border: 1px solid `#212121`
|
|
237
|
+
- Radius: 3px
|
|
235
238
|
- Padding: 8px 12px
|
|
236
|
-
-
|
|
237
|
-
- Focus:
|
|
238
|
-
-
|
|
239
|
+
- Font: 15px / 400 / Waldenburg-75357948a2b6a39b
|
|
240
|
+
- Focus: Border `color(display-p3 1 0.3333 0)`; Background `#212121`; Text `#ffffff`
|
|
241
|
+
- Use: Home form only; `home::[data-omd-capture="22"]` and `::state-focus`.
|
|
239
242
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
-
|
|
244
|
-
-
|
|
245
|
-
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
**Top Navigation**
|
|
250
|
-
- Background: Near Black (`#0b0b0b`) with backdrop blur
|
|
251
|
-
- Height: auto, compact padding
|
|
252
|
-
- Logo: left-aligned, Sanity wordmark
|
|
253
|
-
- Links: waldenburgNormal 16px, Silver (`#b9b9b9`)
|
|
254
|
-
- Link Hover: Electric Blue via `--color-fg-accent-blue`
|
|
255
|
-
- CTA Button: Sanity Red pill button right-aligned
|
|
256
|
-
- Separator: 1px border-bottom `#212121`
|
|
257
|
-
|
|
258
|
-
**Footer**
|
|
259
|
-
- Background: Near Black (`#0b0b0b`)
|
|
260
|
-
- Multi-column link layout
|
|
261
|
-
- Links: Silver (`#b9b9b9`), hover to blue
|
|
262
|
-
- Section headers: White (`#ffffff`), 13px uppercase IBM Plex Mono
|
|
263
|
-
|
|
264
|
-
### Badges / Pills
|
|
265
|
-
|
|
266
|
-
**Neutral Subtle**
|
|
267
|
-
- Background: White (`#ffffff`)
|
|
268
|
-
- Text: Near Black (`#0b0b0b`)
|
|
269
|
-
- Padding: 8px
|
|
270
|
-
- Font: 13px
|
|
271
|
-
- Border Radius: 99999px
|
|
272
|
-
|
|
273
|
-
**Neutral Filled**
|
|
274
|
-
- Background: Near Black (`#0b0b0b`)
|
|
275
|
-
- Text: White (`#ffffff`)
|
|
276
|
-
- Padding: 8px
|
|
277
|
-
- Font: 13px
|
|
278
|
-
- Border Radius: 99999px
|
|
243
|
+
### Dialog
|
|
244
|
+
|
|
245
|
+
**Pricing dialog**
|
|
246
|
+
- Background: `#ffffff`
|
|
247
|
+
- Text: `#0b0b0b`
|
|
248
|
+
- Border: 1px solid `#d6d6d6`
|
|
249
|
+
- Padding: 16px
|
|
250
|
+
- Font: 14px / 400 / Waldenburg-75357948a2b6a39b
|
|
251
|
+
- Use: Observed open after pricing controls; `surface-2::[data-omd-interaction-capture="dialog-0-0"]` and repeated on the query-ref pricing capture.
|
|
279
252
|
|
|
280
253
|
## 5. Layout Principles
|
|
281
254
|
|
|
282
|
-
|
|
283
|
-
Base unit: **8px**
|
|
284
|
-
|
|
285
|
-
| Token | Value | Usage |
|
|
286
|
-
|-------|-------|-------|
|
|
287
|
-
| space-1 | 1px | Hairline gaps, border-like spacing |
|
|
288
|
-
| space-2 | 2px | Minimal internal padding |
|
|
289
|
-
| space-3 | 4px | Tight component internal spacing |
|
|
290
|
-
| space-4 | 6px | Small element gaps |
|
|
291
|
-
| space-5 | 8px | Base unit -- button padding, input padding, badge padding |
|
|
292
|
-
| space-6 | 12px | Standard component gap, button horizontal padding |
|
|
293
|
-
| space-7 | 16px | Section internal padding, card spacing |
|
|
294
|
-
| space-8 | 24px | Large component padding, card internal spacing |
|
|
295
|
-
| space-9 | 32px | Section padding, container gutters |
|
|
296
|
-
| space-10 | 48px | Large section vertical spacing |
|
|
297
|
-
| space-11 | 64px | Major section breaks |
|
|
298
|
-
| space-12 | 96-120px | Hero vertical padding, maximum section spacing |
|
|
299
|
-
|
|
300
|
-
### Grid & Container
|
|
301
|
-
- Max content width: ~1440px (inferred from breakpoints)
|
|
302
|
-
- Page gutter: 32px on desktop, 16px on mobile
|
|
303
|
-
- Content sections use full-bleed backgrounds with centered, max-width content
|
|
304
|
-
- Multi-column layouts: 2-3 columns on desktop, single column on mobile
|
|
305
|
-
- Card grids: CSS Grid with consistent gaps (16-24px)
|
|
306
|
-
|
|
307
|
-
### Whitespace Philosophy
|
|
308
|
-
Sanity uses aggressive vertical spacing between sections (64-120px) to create breathing room on the dark canvas. Within sections, spacing is tighter (16-32px), creating dense information clusters separated by generous voids. This rhythm gives the page a "slides" quality -- each section feels like its own focused frame.
|
|
309
|
-
|
|
310
|
-
### Border Radius Scale
|
|
311
|
-
|
|
312
|
-
| Token | Value | Usage |
|
|
313
|
-
|-------|-------|-------|
|
|
314
|
-
| radius-xs | 3px | Inputs, textareas, subtle rounding |
|
|
315
|
-
| radius-sm | 4-5px | Secondary buttons, small cards, tags |
|
|
316
|
-
| radius-md | 6px | Standard cards, containers |
|
|
317
|
-
| radius-lg | 12px | Large cards, feature containers, forms |
|
|
318
|
-
| radius-pill | 99999px | Primary buttons, badges, nav pills |
|
|
255
|
+
The retained spacing observations are 4px, 8px, 12px, 24px, and 32px. They occur in the selector-bound controls documented in §4; they do not establish a global scale, grid, content width, gutter, or card layout. The retained radii are 3px for the home textarea and 99999px for the observed compact and hero action pills. No other radius scale is canonical.
|
|
319
256
|
|
|
320
257
|
## 6. Depth & Elevation
|
|
321
258
|
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
| Level | Value | Usage |
|
|
325
|
-
|-------|-------|-------|
|
|
326
|
-
| Level 0 (Flat) | none | Default state for most elements -- dark surfaces create depth through color alone |
|
|
327
|
-
| Level 1 (Subtle) | 0px 0px 0px 1px `#212121` | Border-like shadow for minimal containment without visible borders |
|
|
328
|
-
| Level 2 (Focus) | 0 0 0 2px `var(--color-blue-500)` | Focus ring for inputs and interactive elements |
|
|
329
|
-
| Level 3 (Overlay) | Backdrop blur + semi-transparent dark | Navigation overlay, modal backgrounds |
|
|
330
|
-
|
|
331
|
-
### Depth Philosophy
|
|
332
|
-
Sanity's depth system is almost entirely **colorimetric** rather than shadow-based. Elevation is communicated through surface color shifts: `#0b0b0b` (ground) -> `#212121` (elevated) -> `#353535` (prominent) -> `#ffffff` (inverted/highest). This approach is native to dark interfaces where traditional drop shadows would be invisible. The few shadows that exist are ring-based (0px 0px 0px Npx) or blur-based (backdrop-filter) rather than offset shadows, maintaining the flat, precision-engineered aesthetic.
|
|
333
|
-
|
|
334
|
-
Border-based containment (1px solid `#212121` or `#353535`) serves as the primary spatial separator, with the border darkness calibrated to be visible but not dominant. The system avoids "floating card" aesthetics -- everything feels mounted to the surface rather than hovering above it.
|
|
259
|
+
The only retained elevation observation is the pricing dialog: `rgba(0, 0, 0, 0.1) 0px 10px 15px -3px` and `rgba(0, 0, 0, 0.1) 0px 4px 6px -4px`, alongside its `#ffffff` surface and `#d6d6d6` border. No general shadow scale, overlay, focus ring, card elevation, or depth philosophy is promoted from this packet.
|
|
335
260
|
|
|
336
261
|
## 7. Do's and Don'ts
|
|
337
262
|
|
|
338
263
|
### Do
|
|
339
|
-
-
|
|
340
|
-
-
|
|
341
|
-
-
|
|
342
|
-
-
|
|
343
|
-
-
|
|
344
|
-
- Communicate depth through surface color (dark-to-light) rather than shadows
|
|
345
|
-
- Maintain generous vertical section spacing (64-120px) on the dark canvas
|
|
346
|
-
- Use `"cv01", "cv11", "cv12", "cv13", "ss07"` OpenType features for display typography
|
|
264
|
+
- Preserve `color(display-p3 1 0.3333 0)` as the source value for the observed orange actions; use `#ff5500` only where an sRGB hex is technically required.
|
|
265
|
+
- Keep the observed compact action geometry together: 99999px radius, 4px 12px padding, and 13px / 400 IBM Plex Mono.
|
|
266
|
+
- Keep the observed hero action separate from compact controls: 8px 32px padding and 24px / 400 Waldenburg.
|
|
267
|
+
- Use the captured light/dark inversion only for the listed P3-orange action variants.
|
|
268
|
+
- Preserve the home textarea's 3px radius and captured P3-orange focus border when reproducing that field.
|
|
347
269
|
|
|
348
270
|
### Don't
|
|
349
|
-
- Don't
|
|
350
|
-
- Don't
|
|
351
|
-
- Don't
|
|
352
|
-
- Don't
|
|
353
|
-
- Don't use heavy font weights (700+) -- the system maxes out at 600 and only for 11px uppercase labels
|
|
354
|
-
- Don't place light text on light surfaces or dark text on dark surfaces without checking the gray-on-gray contrast ratio
|
|
355
|
-
- Don't use traditional offset box-shadows -- ring shadows (0 0 0 Npx) or border-based containment only
|
|
356
|
-
- Don't break the tight line-height on headings -- 1.00-1.24 is the range, never go to 1.5+ for display text
|
|
271
|
+
- Don't replace loaded Waldenburg with Inter, a system stack, or another plausible substitute.
|
|
272
|
+
- Don't promote the cookie dialog's Helvetica or declared-only Inter assets into Sanity UI typography.
|
|
273
|
+
- Don't treat the pricing dialog or marketing controls as Sanity Studio application components.
|
|
274
|
+
- Don't generalize `#0052ef`, cards, responsive breakpoints, or unobserved error/success states from this capture.
|
|
357
275
|
|
|
358
276
|
## 8. Responsive Behavior
|
|
359
277
|
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
| Name | Width | Behavior |
|
|
363
|
-
|------|-------|----------|
|
|
364
|
-
| Desktop XL | >= 1640px | Full layout, maximum content width |
|
|
365
|
-
| Desktop | >= 1440px | Standard desktop layout |
|
|
366
|
-
| Desktop Compact | >= 1200px | Slightly condensed desktop |
|
|
367
|
-
| Laptop | >= 1100px | Reduced column widths |
|
|
368
|
-
| Tablet Landscape | >= 960px | 2-column layouts begin collapsing |
|
|
369
|
-
| Tablet | >= 768px | Transition zone, some elements stack |
|
|
370
|
-
| Mobile Large | >= 720px | Near-tablet layout |
|
|
371
|
-
| Mobile | >= 480px | Single-column, stacked layout |
|
|
372
|
-
| Mobile Small | >= 376px | Minimum supported width |
|
|
373
|
-
|
|
374
|
-
### Collapsing Strategy
|
|
375
|
-
- **Navigation**: Horizontal links collapse to hamburger menu below 768px
|
|
376
|
-
- **Hero typography**: Scales from 112px -> 72px -> 48px -> 38px across breakpoints, maintaining tight letter-spacing ratios
|
|
377
|
-
- **Grid layouts**: 3-column -> 2-column at ~960px, single-column below 768px
|
|
378
|
-
- **Card grids**: Horizontal scrolling on mobile instead of wrapping (preserving card aspect ratios)
|
|
379
|
-
- **Section spacing**: Vertical padding reduces by ~40% on mobile (120px -> 64px -> 48px)
|
|
380
|
-
- **Button sizing**: CTA pills maintain padding but reduce font size; ghost buttons stay fixed
|
|
381
|
-
- **Code blocks**: Horizontal scroll with preserved monospace formatting
|
|
382
|
-
|
|
383
|
-
### Mobile-Specific Adjustments
|
|
384
|
-
- Full-bleed sections extend edge-to-edge with 16px internal gutters
|
|
385
|
-
- Touch targets: minimum 44px for all interactive elements
|
|
386
|
-
- Heading letter-spacing relaxes slightly at mobile sizes (less aggressive negative tracking)
|
|
387
|
-
- Image containers switch from fixed aspect ratios to full-width with auto height
|
|
278
|
+
This packet contains desktop `1440×900` captures only. No breakpoint, collapse, mobile type, gutter, touch-target, or responsive component claim is retained. A future responsive capture must establish those values independently.
|
|
388
279
|
|
|
389
280
|
## 9. Agent Prompt Guide
|
|
390
281
|
|
|
391
282
|
### Quick Color Reference
|
|
392
283
|
```
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
Success: #19d600 (green, sRGB fallback)
|
|
402
|
-
Error: #dd0000 (pure red)
|
|
403
|
-
Light Surface: #ededed / #ffffff (inverted sections)
|
|
284
|
+
Base: #ffffff (observed home background)
|
|
285
|
+
Foreground: #0b0b0b
|
|
286
|
+
Dark surface: #212121 (observed textarea focus fill)
|
|
287
|
+
Light pill: #ededed
|
|
288
|
+
Muted text: #b9b9b9
|
|
289
|
+
Orange action: color(display-p3 1 0.3333 0) (source value)
|
|
290
|
+
Orange fallback: #ff5500 (sRGB approximation only)
|
|
291
|
+
Blue: #0052ef (observed, role not generalized)
|
|
404
292
|
```
|
|
405
293
|
|
|
406
294
|
### Example Prompts
|
|
407
295
|
|
|
408
296
|
**Landing page section:**
|
|
409
|
-
"Create a
|
|
297
|
+
"Create a public marketing action using the captured P3-orange source value, #0b0b0b text, 99999px radius, 4px 12px padding, and 13px/400 IBM Plex Mono. On hover, invert it to #0b0b0b with P3-orange text."
|
|
410
298
|
|
|
411
299
|
**Card grid:**
|
|
412
|
-
"
|
|
300
|
+
"Do not generate a canonical Sanity card grid from this reference. The supplied evidence did not establish a reusable marketing card variant."
|
|
413
301
|
|
|
414
302
|
**Form section:**
|
|
415
|
-
"
|
|
303
|
+
"Reproduce the observed home textarea only: #0b0b0b fill, 1px #212121 border, 3px radius, 8px 12px padding, 15px/400 Waldenburg, and a P3-orange focus border with #212121 focus fill."
|
|
416
304
|
|
|
417
305
|
**Navigation bar:**
|
|
418
|
-
"
|
|
306
|
+
"Keep navigation claims to the captured compact pill controls; sticky behavior, backdrop blur, and a universal link-hover rule were not retained as canonical evidence."
|
|
419
307
|
|
|
420
308
|
### Iteration Guide
|
|
421
|
-
1.
|
|
422
|
-
2.
|
|
423
|
-
3.
|
|
424
|
-
4.
|
|
425
|
-
5. **Refine spacing**: 8px base unit, 24-32px within sections, 64-120px between sections
|
|
426
|
-
6. **Technical details**: Add IBM Plex Mono uppercase labels for tags and metadata
|
|
427
|
-
7. **Polish**: Ensure all interactive elements hover to `#0052ef`, all buttons are pills or subtle 5px radius, borders are hairline (1px)
|
|
309
|
+
1. Start from an observed family and selector, not a broad visual impression.
|
|
310
|
+
2. Keep the P3 orange in P3-capable output; disclose the hex approximation when using it.
|
|
311
|
+
3. Keep Waldenburg and IBM Plex Mono distinct and do not substitute a system or declared-only family.
|
|
312
|
+
4. Add only a listed interaction state to its matching component variant.
|
|
428
313
|
|
|
429
314
|
## 10. Voice & Tone
|
|
430
315
|
|
|
@@ -444,56 +329,37 @@ Sanity's voice is **content-platform-confident and developer-warm.** "The Conten
|
|
|
444
329
|
|
|
445
330
|
## 11. Brand Narrative
|
|
446
331
|
|
|
447
|
-
Sanity
|
|
332
|
+
Sanity describes the current platform as a Content Operating System rather than a conventional CMS: a structured content foundation with a configurable Studio, APIs/SDKs, automation, and AI-oriented tools. The first-party 2025 platform launch describes Content Lake, Studio, custom content applications, automation, an AI agent, Media Library, Canvas, and Dashboard as parts of that connected direction. This narrative describes product scope and evolution; it does not turn the marketing-site controls in §4 into Studio application components.
|
|
448
333
|
|
|
449
334
|
## 12. Principles
|
|
450
335
|
|
|
451
|
-
1. **
|
|
452
|
-
2. **
|
|
453
|
-
3. **
|
|
454
|
-
4. **
|
|
455
|
-
5. **Hover to `#0052ef` blue.** *UI implication:* preserve hover blue across all interactive elements.
|
|
336
|
+
1. **Structured content, configurable workflow.** *UI implication:* public messaging emphasizes adapting content systems to how an organization works.
|
|
337
|
+
2. **Developer affordances remain visible.** *UI implication:* retain the editorial/technical typography contrast when reproducing observed marketing controls.
|
|
338
|
+
3. **Accessibility and composability in Sanity UI.** *UI implication:* Sanity UI is an official React toolkit, but its documentation chrome is not a source for the marketing component measurements here.
|
|
339
|
+
4. **Evidence-domain discipline.** *UI implication:* reuse only listed P3, inverse, light-pill, textarea, and dialog variants; leave other components absent.
|
|
456
340
|
|
|
457
341
|
## 13. Personas
|
|
458
342
|
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
**Henrik Sondergaard, 35, Copenhagen.** Senior engineer at e-commerce SaaS. Sanity Studio for product content management.
|
|
462
|
-
|
|
463
|
-
**Sofia Russo, 30, Milan.** Indie SaaS shipping editorial sites. Sanity for headless CMS + Next.js integration.
|
|
464
|
-
|
|
465
|
-
**Marcus Chen, 38, San Francisco.** Content lead at growth-stage SaaS. Owns the marketing site CMS.
|
|
343
|
+
No fictional personas are asserted. First-party public navigation identifies developers, content editors, product owners, and business leaders as relevant audiences; this reference does not infer demographics, locations, jobs, or workflows beyond those published groups.
|
|
466
344
|
|
|
467
345
|
## 14. States
|
|
468
346
|
|
|
469
347
|
| State | Treatment |
|
|
470
348
|
|---|---|
|
|
471
|
-
|
|
|
472
|
-
|
|
|
473
|
-
| **Loading (query)** | GROQ query result inline |
|
|
474
|
-
| **Loading (publishing)** | Per-document progress |
|
|
475
|
-
| **Error (schema)** | Specific. "Field X validation failed." |
|
|
476
|
-
| **Error (deploy)** | Token + permission diagnostic |
|
|
477
|
-
| **Success (published)** | Subtle confirmation + revision history |
|
|
478
|
-
| **Success (preview)** | Inline preview link |
|
|
479
|
-
| **Skeleton (document list)** | Hairline-border placeholders |
|
|
480
|
-
| **Disabled (no permission)** | Role tooltip |
|
|
481
|
-
| **Loading (long deploy)** | Persistent progress |
|
|
349
|
+
| Product empty/loading/error/success states | Not captured on an authenticated Sanity product surface; no state recipe is claimed. |
|
|
350
|
+
| Marketing interaction states | Only the §4 hover, pressed, focus, and dialog-open observations are retained. |
|
|
482
351
|
|
|
483
352
|
## 15. Motion & Easing
|
|
484
353
|
|
|
485
354
|
| Token | Value | Use |
|
|
486
355
|
|---|---|---|
|
|
487
|
-
|
|
|
488
|
-
| `motion-fast` | 150ms | Hover |
|
|
489
|
-
| `motion-standard` | 250ms | Modal, panel |
|
|
356
|
+
| Motion tokens | Not measured in the supplied capture |
|
|
490
357
|
|
|
491
|
-
|
|
358
|
+
No duration, easing, or reduced-motion rule is promoted without a measured source.
|
|
492
359
|
|
|
493
360
|
---
|
|
494
361
|
|
|
495
|
-
**Verified:** 2026-
|
|
496
|
-
**Tier 1 sources:** sanity.io
|
|
497
|
-
**Tier 2 sources:** styles.refero.design
|
|
498
|
-
**
|
|
499
|
-
**Style ref:** `stripe`. **Conflicts unresolved:** none. **Earlier mistake reverted (significant):** prior footer claimed Primary was `#0b0b0b` 0px (announcement-banner strip) — canonical is **wide-gamut display-p3 Orange-Red 99999px full-pill**. Massive correction.
|
|
362
|
+
**Verified:** 2026-07-13
|
|
363
|
+
**Tier 1 sources:** https://www.sanity.io/ · https://www.sanity.io/pricing · https://www.sanity.io/ui · https://www.sanity.io/blog/why-the-age-of-cms-is-over
|
|
364
|
+
**Tier 2 sources:** https://getdesign.md/sanity/design-md · https://styles.refero.design/?q=Sanity (direct built-in access unavailable; no indexed result observed)
|
|
365
|
+
**Conflicts unresolved:** none
|