oh-my-design-cli 1.8.1 → 1.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.ja.md +4 -4
  2. package/README.ko.md +6 -6
  3. package/README.md +6 -6
  4. package/README.zh-TW.md +4 -4
  5. package/data/reference-fingerprints.json +983 -23
  6. package/package.json +1 -1
  7. package/web/references/bito/DESIGN.md +394 -0
  8. package/web/references/cashapp/DESIGN.md +449 -0
  9. package/web/references/cuboai/DESIGN.md +435 -0
  10. package/web/references/cybozu/DESIGN.md +453 -0
  11. package/web/references/datadog/DESIGN.md +441 -0
  12. package/web/references/digital-agency-jp/DESIGN.md +439 -0
  13. package/web/references/dmm/DESIGN.md +455 -0
  14. package/web/references/gaudiy/DESIGN.md +387 -0
  15. package/web/references/gitlab/DESIGN.md +546 -0
  16. package/web/references/goodpatch/DESIGN.md +429 -0
  17. package/web/references/headspace/DESIGN.md +505 -0
  18. package/web/references/heptabase/DESIGN.md +448 -0
  19. package/web/references/iicombined/DESIGN.md +421 -0
  20. package/web/references/maicoin/DESIGN.md +484 -0
  21. package/web/references/mailchimp/DESIGN.md +450 -0
  22. package/web/references/mikan/DESIGN.md +450 -0
  23. package/web/references/moze/DESIGN.md +423 -0
  24. package/web/references/ncsoft/DESIGN.md +488 -0
  25. package/web/references/nhn/DESIGN.md +441 -0
  26. package/web/references/nintendo/DESIGN.md +445 -0
  27. package/web/references/patreon/DESIGN.md +439 -0
  28. package/web/references/pepabo/DESIGN.md +486 -0
  29. package/web/references/pinkfong/DESIGN.md +450 -0
  30. package/web/references/plaid/DESIGN.md +472 -0
  31. package/web/references/portaly/DESIGN.md +441 -0
  32. package/web/references/readmoo/DESIGN.md +492 -0
  33. package/web/references/shiftup/DESIGN.md +433 -0
  34. package/web/references/sparkful/DESIGN.md +434 -0
  35. package/web/references/speeda/DESIGN.md +422 -0
  36. package/web/references/spindle/DESIGN.md +470 -0
  37. package/web/references/spoqa/DESIGN.md +422 -0
  38. package/web/references/stibee/DESIGN.md +424 -0
  39. package/web/references/tmap/DESIGN.md +423 -0
  40. package/web/references/twilio/DESIGN.md +515 -0
  41. package/web/references/twitch/DESIGN.md +431 -0
  42. package/web/references/vocus/DESIGN.md +450 -0
  43. package/web/references/workday/DESIGN.md +452 -0
  44. package/web/references/wrtn/DESIGN.md +454 -0
  45. package/web/references/xrex/DESIGN.md +475 -0
  46. package/web/references/zepeto/DESIGN.md +463 -0
@@ -0,0 +1,431 @@
1
+ ---
2
+ id: twitch
3
+ name: Twitch
4
+ country: US
5
+ category: consumer-tech
6
+ homepage: "https://www.twitch.tv"
7
+ primary_color: "#9146ff"
8
+ logo:
9
+ type: simpleicons
10
+ slug: twitch
11
+ verified: "2026-06-17"
12
+ added: "2026-06-17"
13
+ omd: "0.1"
14
+ tokens:
15
+ source: live-extract
16
+ extracted: "2026-06-17"
17
+ note: "primary = official Ultraviolet brand purple (#9146ff); links/active deep violet (#5c16c5), hover (#451093), deep surface (#330c6e). High-density dark-mode-first Core UI; live-inspected light theme on twitch.tv. Log In btn translucent rgba(173,173,184,0.22), viewer pill rgba(0,0,0,0.6), input ring rgba(50,50,57,0.62) — kept in prose only (alpha)."
18
+ colors:
19
+ primary: "#9146ff"
20
+ link: "#5c16c5"
21
+ primary-hover: "#451093"
22
+ primary-deep: "#330c6e"
23
+ ink: "#0e0e10"
24
+ body: "#3b3b44"
25
+ muted: "#747484"
26
+ canvas: "#f7f7f8"
27
+ surface-alt: "#efeff1"
28
+ on-primary: "#ffffff"
29
+ live: "#eb0400"
30
+ info: "#1f69ff"
31
+ typography:
32
+ family: { display: "Roobert", body: "Inter" }
33
+ display-hero: { size: 31, weight: 600, lineHeight: 1.1, use: "Brand hero headline, Roobert TW" }
34
+ section: { size: 20, weight: 400, lineHeight: 1.2, use: "Brand section links, Roobert TW" }
35
+ heading: { size: 16, weight: 600, lineHeight: 1.3, use: "Core UI carousel / shelf titles, Roobert" }
36
+ body: { size: 14, weight: 400, lineHeight: 1.4, use: "Standard reading + UI text, Inter" }
37
+ button: { size: 14, weight: 600, lineHeight: 1.0, use: "Button labels, Inter SemiBold" }
38
+ caption: { size: 12, weight: 400, lineHeight: 1.2, use: "LIVE badge, viewer counts, metadata" }
39
+ spacing: { xs: 4, sm: 8, md: 12, base: 16, lg: 18, xl: 24, xxl: 40 }
40
+ rounded: { sm: 2, md: 4, lg: 8, full: 9000 }
41
+ shadow:
42
+ none: "none"
43
+ input-ring: "rgba(50,50,57,0.62) 0px 0px 0px 1px inset"
44
+ components:
45
+ button-primary: { type: button, bg: "#9146ff", fg: "#ffffff", radius: "9000px", height: "32px", font: "14px / 600 Inter", use: "Sign Up CTA / brand Download — full pill, Ultraviolet" }
46
+ button-secondary: { type: button, fg: "#0e0e10", radius: "9000px", height: "32px", font: "14px / 600 Inter", use: "Log In — translucent rgba(173,173,184,0.22) fill pill" }
47
+ input-search: { type: input, bg: "#ffffff", fg: "#0e0e10", radius: "8px", height: "36px", padding: "0px 12px", font: "14px / 400 Inter", use: "Top search field, inset rgba(50,50,57,0.62) 1px ring" }
48
+ nav-link: { type: tab, fg: "#0e0e10", font: "14px / 400 Inter", active: "text #5c16c5", use: "Top + side nav item, active = deep violet" }
49
+ card-channel: { type: card, bg: "#f7f7f8", radius: "4px", use: "Live channel tile on canvas, thumbnail-led, no shadow" }
50
+ badge-live: { type: badge, bg: "#eb0400", fg: "#ffffff", radius: "4px", padding: "1px 5px", font: "12px / 400 Inter", use: "LIVE status indicator on thumbnails" }
51
+ badge-viewers: { type: badge, fg: "#ffffff", radius: "2px", padding: "0px 4px", font: "14px / 400 Inter", use: "Viewer-count overlay — rgba(0,0,0,0.6) scrim pill" }
52
+ avatar: { type: avatar, radius: "9000px", use: "Channel / user avatar — full circle" }
53
+ components_harvested: true
54
+ ---
55
+
56
+ # Design System Inspiration of Twitch
57
+
58
+ ## 1. Visual Theme & Atmosphere
59
+
60
+ Twitch is the dark-mode-native home of live streaming, and its design language — known internally as **Core UI**, built on the **Ultraviolet** color system from the 2019 "Beyond Purple" rebrand — is engineered for one job: surrounding a glowing live video with dense, scannable chrome that never competes with the stream. Even in its light theme (the default for logged-out homepage, captured live here), the canvas is a soft near-white grey (`#f7f7f8`) with a slightly cooler surface step (`#efeff1`), and text sits in a near-black ink (`#0e0e10`) — not pure black — that keeps high-density shelves of channels legible without harshness. The whole system reads as a high-information utility wearing a single, unmistakable brand color.
61
+
62
+ That color is the famous **Ultraviolet** purple (`#9146ff`), the most recognizable identity in the creator economy. It is reserved for the moments that matter: the **Sign Up** call-to-action and the brand **Download** button both render in full-pill Ultraviolet, while interactive links and active states drop to a deeper, more legible violet (`#5c16c5`), with hover (`#451093`) and pressed/surface states (`#330c6e`) descending further down the same hue ramp. Twitch's own write-up describes deriving "15 grays and 15 purples" from the brand purple along a controlled lightness curve — a disciplined, accessibility-first palette where every gray and every violet is a calculated step, not an ad-hoc pick.
63
+
64
+ The typographic voice is **Roobert TW** — a mono-linear geometric sans Twitch customized with Displaay in 2019, with its signature single-story rounded-corner "g" — carrying brand and display surfaces. Inside the product, the dense Core UI runs in **Inter** at a workhorse 14px / weight 400, dropping to 12px for the high-frequency metadata that defines the platform: the scarlet **LIVE** badge (`#eb0400`), viewer counts, and category tags. Geometry is pill-forward — buttons and avatars are full-radius (9000px), while functional chrome (search, badges, tiles) stays tight at 2–8px. There is essentially no elevation: live inspection found `box-shadow: none` across nav, buttons, and channel tiles. Depth comes from the video itself and from translucent scrims (`rgba(0,0,0,0.6)`) over thumbnails, never from drop shadows.
65
+
66
+ **Key Characteristics:**
67
+ - Ultraviolet purple (`#9146ff`) as the single saturated brand action color — Sign Up, Download
68
+ - A descending violet ramp for interaction: link `#5c16c5` → hover `#451093` → deep `#330c6e`
69
+ - Roobert (Roobert TW) for brand/display; Inter for dense Core UI at 14px / 400
70
+ - Near-black ink (`#0e0e10`) over a soft grey canvas (`#f7f7f8`), not pure black on white
71
+ - Dark-mode-first Core UI / Ultraviolet design system, accessibility "by design"
72
+ - Pill-everything brand chrome (9000px buttons + avatars), tight 2–8px functional radii
73
+ - Shadowless: depth from the live video + translucent thumbnail scrims, not elevation
74
+ - Scarlet `#eb0400` LIVE indicator as the one non-purple signal color
75
+
76
+ ## 2. Color Palette & Roles
77
+
78
+ ### Primary
79
+ - **Ultraviolet** (`#9146ff`): The primary brand color and the system's single saturated action hue. Backs the Sign Up CTA and the brand Download button. RGB (145,70,255) — the official "Beyond Purple" brand purple.
80
+ - **Link Violet** (`#5c16c5`): Deep, legible violet for links and active states across nav and channel rows — a darker, higher-contrast step down from Ultraviolet.
81
+ - **Purple Hover** (`#451093`): Hover/secondary-emphasis violet, one step deeper than the link color.
82
+ - **Purple Deep** (`#330c6e`): The darkest violet surface — pressed states and immersive purple panels.
83
+
84
+ ### Ink & Text
85
+ - **Ink** (`#0e0e10`): Primary text, headings, nav labels, strong UI text. A near-black with a faint cool cast — used instead of pure black.
86
+ - **Body Slate** (`#3b3b44`): Secondary body copy and descriptions.
87
+ - **Muted Grey** (`#747484`): Tertiary text, inactive nav links (brand site), captions, metadata.
88
+
89
+ ### Surface & Neutral
90
+ - **Canvas** (`#f7f7f8`): The default page background — a soft, cool near-white.
91
+ - **Surface Alt** (`#efeff1`): A slightly cooler grey step for cards, fields, and segmented blocks.
92
+ - **White** (`#ffffff`): Search field background, text on Ultraviolet/dark, card surfaces.
93
+
94
+ ### Signal
95
+ - **LIVE Red** (`#eb0400`): The scarlet status indicator on live thumbnails — the one non-purple semantic color, used sparingly and exclusively for "live now."
96
+ - **Info Blue** (`#1f69ff`): Informational links / system blue used in occasional inline messaging.
97
+
98
+ ### Translucent (prose-only — alpha)
99
+ - **Soft Fill** (`rgba(173,173,184,0.22)`): The translucent grey fill on the Log In button and secondary chrome.
100
+ - **Thumbnail Scrim** (`rgba(0,0,0,0.6)`): The dark overlay behind viewer-count pills on thumbnails.
101
+ - **Input Ring** (`rgba(50,50,57,0.62)`): The 1px inset focus/border ring on the search field.
102
+
103
+ ## 3. Typography Rules
104
+
105
+ ### Font Family
106
+ - **Display / Brand**: `Roobert` (`Roobert TW`) — a mono-linear geometric sans-serif customized with Displaay for the 2019 rebrand. Recognizable by its single-story, rounded-corner lowercase "g." Carries brand headlines and brand-site navigation.
107
+ - **Body / Core UI**: `Inter` — the dense product workhorse. The logged-in/out homepage stack resolves to `Inter` (with Roobert appearing on specific shelf titles); body default is 14px / weight 400.
108
+
109
+ ### Hierarchy
110
+
111
+ | Role | Font | Size | Weight | Line Height | Notes |
112
+ |------|------|------|--------|-------------|-------|
113
+ | Brand Hero | Roobert TW | ~31px (1.94rem) | 600 | 1.1 | Brand-site hero headline |
114
+ | Brand Section | Roobert TW | 20px (1.25rem) | 400 | 1.2 | Brand-site footer/section links |
115
+ | Shelf Heading | Roobert | 16px (1.00rem) | 600 | 1.3 | Core UI carousel / "Live Channels" titles |
116
+ | Body / UI | Inter | 14px (0.88rem) | 400 | 1.4 | Standard reading + dense UI text |
117
+ | Button | Inter | 14px (0.88rem) | 600 | 1.0 | Button labels (SemiBold) |
118
+ | Caption | Inter | 12px (0.75rem) | 400 | 1.2 | LIVE badge, viewer counts, metadata |
119
+
120
+ ### Principles
121
+ - **Two fonts, two jobs**: Roobert is the brand/display voice (geometric, characterful); Inter is the functional reading voice (dense, neutral, hangul-/latin-legible at small sizes). They never swap roles.
122
+ - **14px is the workhorse**: The product runs almost entirely at 14px / 400 to maximize information density on shelves of live channels.
123
+ - **SemiBold for action, regular for content**: Button labels and shelf headings jump to weight 600; everything informational stays at 400.
124
+ - **12px metadata layer**: A distinct caption tier (12px) carries the platform's signature density — LIVE state, viewer counts, category tags.
125
+
126
+ ## 4. Component Stylings
127
+
128
+ ### Buttons
129
+
130
+ **Sign Up (Primary / Ultraviolet)**
131
+ - Background: `#9146ff`
132
+ - Text: `#ffffff`
133
+ - Radius: 9000px
134
+ - Height: 32px
135
+ - Font: 14px Inter weight 600
136
+ - Use: Primary CTA — Sign Up in the top nav, brand-site Download — the single Ultraviolet action
137
+
138
+ **Log In (Secondary)**
139
+ - Text: `#0e0e10`
140
+ - Radius: 9000px
141
+ - Height: 32px
142
+ - Font: 14px Inter weight 600
143
+ - Use: Secondary nav action — translucent `rgba(173,173,184,0.22)` grey fill, full pill
144
+
145
+ ### Inputs & Forms
146
+
147
+ **Search Field**
148
+ - Background: `#ffffff`
149
+ - Text: `#0e0e10`
150
+ - Radius: 8px
151
+ - Padding: 0px 12px
152
+ - Height: 36px
153
+ - Font: 14px Inter weight 400
154
+ - Use: Top search input — 1px inset `rgba(50,50,57,0.62)` ring instead of a solid border (left segment of a split search control)
155
+
156
+ ### Cards & Containers
157
+
158
+ **Live Channel Tile**
159
+ - Background: `#f7f7f8`
160
+ - Radius: 4px
161
+ - Use: Live channel / category tile on canvas — thumbnail-led, no shadow, hairline-free
162
+
163
+ ### Badges
164
+
165
+ **LIVE Indicator**
166
+ - Background: `#eb0400`
167
+ - Text: `#ffffff`
168
+ - Radius: 4px
169
+ - Padding: 1px 5px
170
+ - Font: 12px Inter weight 400
171
+ - Use: "LIVE" status badge on live thumbnails — the one non-purple signal
172
+
173
+ **Viewer Count Pill**
174
+ - Text: `#ffffff`
175
+ - Radius: 2px
176
+ - Padding: 0px 4px
177
+ - Font: 14px Inter weight 400
178
+ - Use: Viewer-count overlay on thumbnails — sits on a `rgba(0,0,0,0.6)` scrim
179
+
180
+ ### Navigation
181
+ - Background: `#ffffff`
182
+ - Text: `#0e0e10`
183
+ - Font: 14px Inter weight 400
184
+ - Active: deep violet `#5c16c5` text on the active item
185
+ - Use: Top + side nav ("Browse", "Following", "Live Channels"); brand-site nav muted to `#747484`
186
+
187
+ ### Avatars
188
+ - Radius: 9000px (full circle)
189
+ - Use: Channel and user avatars throughout Core UI
190
+
191
+ ---
192
+
193
+ **Verified:** 2026-06-17 (omd:add-reference CREATE — Tier 1 live inspect)
194
+ **Tier 1 sources:** https://www.twitch.tv (Core UI live computed style — nav, Sign Up CTA, search, LIVE badge, channel tiles), https://brand.twitch.tv (brand assets surface — Ultraviolet `#9146ff`, Roobert TW, Download CTA), https://blog.twitch.tv/en/2019/12/03/beyond-purple/ (Ultraviolet / Core UI design-system rationale)
195
+ **Tier 2 sources:** getdesign.md/twitch — no data (404 / "No designs found"); styles.refero.design/?q=twitch — only AI-synthesized "style" interpretations, no authoritative Twitch UI capture
196
+ **Conflicts unresolved:** none
197
+
198
+ ## 5. Layout Principles
199
+
200
+ ### Spacing System
201
+ - Base unit: 4px
202
+ - Scale: 4px, 8px, 12px, 16px, 18px, 24px, 40px
203
+ - Notable: The dense product chrome packs metadata at 4–8px gaps; shelf and section rhythm opens up to 24–40px
204
+
205
+ ### Grid & Container
206
+ - Persistent left side-nav (followed/recommended channels) + top utility bar, with the content area given to scrollable shelves of live channel tiles
207
+ - Channel tiles arranged in responsive multi-column carousels ("Live Channels", category rows)
208
+ - The live video player, when present, is the dominant element; all chrome is sized to never overpower it
209
+ - Brand site uses a centered, editorial single-column layout with large Roobert headlines
210
+
211
+ ### Whitespace Philosophy
212
+ - **Density first**: Twitch is an information-dense product — shelves of live channels, viewer counts, categories. Whitespace is measured and functional, never decorative emptiness.
213
+ - **The video is the hero**: Layout exists to frame live content. Chrome recedes (soft greys, near-black ink) so the glowing stream reads as the focal point.
214
+ - **Flat segmentation**: Surfaces separate by subtle background steps (`#f7f7f8` → `#efeff1`) and structure, not by borders or shadows.
215
+
216
+ ### Border Radius Scale
217
+ - Micro (2px): Viewer-count pills, tight overlays
218
+ - Small (4px): LIVE badge, channel tiles, category tags — the functional workhorse
219
+ - Medium (8px): Search field and larger inputs
220
+ - Full (9000px): Buttons and avatars — the brand pill
221
+
222
+ ## 6. Depth & Elevation
223
+
224
+ | Level | Treatment | Use |
225
+ |-------|-----------|-----|
226
+ | Flat (Level 0) | No shadow | Page background, nav, buttons, channel tiles |
227
+ | Scrim (Level 1) | `rgba(0,0,0,0.6)` overlay | Viewer-count / metadata pills over thumbnails |
228
+ | Ring (Level 2) | `rgba(50,50,57,0.62) 0px 0px 0px 1px inset` | Search field border/focus ring |
229
+
230
+ **Shadow Philosophy**: Twitch is a near-shadowless system — live inspection found `box-shadow: none` across nav, buttons, headings, and channel tiles. There is no card-stack elevation. The two depth devices are (1) translucent dark scrims (`rgba(0,0,0,0.6)`) that float metadata over video thumbnails, and (2) the inset ring on form fields. This keeps the chrome flat and fast so the actual live video — the brightest, most dynamic thing on screen — owns the depth hierarchy. When emphasis is needed, Twitch reaches for the Ultraviolet purple or the scarlet LIVE red, never for a shadow.
231
+
232
+ ## 7. Do's and Don'ts
233
+
234
+ ### Do
235
+ - Reserve Ultraviolet (`#9146ff`) for the primary action — Sign Up, Download — keep it the single brand-action color
236
+ - Step down the violet ramp for interaction: link `#5c16c5`, hover `#451093`, deep `#330c6e`
237
+ - Use Roobert (Roobert TW) for brand/display and Inter for dense Core UI at 14px / 400
238
+ - Use near-black ink (`#0e0e10`) over the soft grey canvas (`#f7f7f8`) instead of pure black on white
239
+ - Keep the system flat — no drop shadows; use translucent scrims for thumbnail metadata
240
+ - Use full-pill (9000px) geometry for buttons and avatars; tight 2–8px radii for functional chrome
241
+ - Reserve scarlet `#eb0400` exclusively for the LIVE indicator
242
+ - Let the live video own the visual hierarchy — keep chrome quiet and dense
243
+
244
+ ### Don't
245
+ - Spread Ultraviolet across many elements — it dilutes the single-action signal
246
+ - Use pure black (`#000000`) for body text — reserve near-black ink `#0e0e10`
247
+ - Add drop shadows or card-stack elevation — Twitch is flat by design
248
+ - Use the scarlet red for anything other than the LIVE state
249
+ - Mix in a second saturated brand hue — purple is the identity
250
+ - Set the dense product UI in Roobert — Inter owns Core UI; Roobert is brand/display
251
+ - Use sharp square corners on buttons or avatars — those are full pills
252
+ - Let chrome out-bright the stream — the video is the focal point, not the UI
253
+
254
+ ## 8. Responsive Behavior
255
+
256
+ ### Breakpoints
257
+ | Name | Width | Key Changes |
258
+ |------|-------|-------------|
259
+ | Mobile | <640px | Side-nav collapses to an off-canvas drawer; single-column shelves; player goes full-width |
260
+ | Tablet | 640-1024px | 2–3 channel tiles per row; condensed side-nav |
261
+ | Desktop | 1024-1440px | Full side-nav + top bar + multi-column carousels |
262
+ | Large Desktop | >1440px | Wider shelves, more tiles per carousel |
263
+
264
+ ### Touch Targets
265
+ - Buttons at 32px height, full-pill, comfortably tappable
266
+ - Search field at 36px height
267
+ - Channel tiles sized for thumb-friendly tapping on mobile
268
+
269
+ ### Collapsing Strategy
270
+ - Side-nav: persistent rail on desktop → off-canvas drawer on mobile
271
+ - Channel carousels: multi-column → fewer columns → single column
272
+ - Player: contained → full-width on mobile
273
+ - Metadata pills (LIVE, viewers) persist at all sizes over thumbnails
274
+
275
+ ### Image Behavior
276
+ - Channel thumbnails carry no shadow at any size, consistent with the flat system
277
+ - Viewer-count and LIVE pills overlay thumbnails via `rgba(0,0,0,0.6)` scrim across breakpoints
278
+ - Tiles maintain 4px radius across viewports
279
+
280
+ ## 9. Agent Prompt Guide
281
+
282
+ ### Quick Color Reference
283
+ - Primary CTA: Ultraviolet (`#9146ff`)
284
+ - Link / active: Link Violet (`#5c16c5`)
285
+ - Hover: Purple Hover (`#451093`)
286
+ - Deep surface: Purple Deep (`#330c6e`)
287
+ - Heading / body text: Ink (`#0e0e10`)
288
+ - Secondary text: Body Slate (`#3b3b44`)
289
+ - Muted / inactive: Muted Grey (`#747484`)
290
+ - Canvas: (`#f7f7f8`); Surface Alt: (`#efeff1`)
291
+ - LIVE signal: (`#eb0400`); Info: (`#1f69ff`)
292
+
293
+ ### Example Component Prompts
294
+ - "Create a top nav on canvas `#f7f7f8`. Ink `#0e0e10` Inter 14px/400 links, active item in deep violet `#5c16c5`. A split search field (white `#ffffff`, 8px radius, inset `rgba(50,50,57,0.62)` 1px ring). Right side: a Log In pill (translucent `rgba(173,173,184,0.22)` fill, `#0e0e10` text, 9000px) and a Sign Up pill (`#9146ff` background, white text, 14px Inter 600, 9000px, 32px tall)."
295
+ - "Design a live channel tile: thumbnail-led card on `#f7f7f8`, 4px radius, no shadow. Overlay a LIVE badge (`#eb0400` background, white text, 4px radius, 1px 5px padding, 12px) top-left and a viewer-count pill (white text on `rgba(0,0,0,0.6)` scrim, 2px radius) bottom-left."
296
+ - "Build a brand hero: large Roobert TW headline at weight 600, ink `#0e0e10`. One Ultraviolet CTA — `#9146ff` background, white text, full pill (9000px), 14px Inter 600."
297
+ - "Create a category row: Roobert shelf heading at 16px/600, then a carousel of channel tiles. Circular (9000px) channel avatars, Inter 14px/400 channel names in `#0e0e10`, muted `#747484` metadata."
298
+
299
+ ### Iteration Guide
300
+ 1. Ultraviolet (`#9146ff`) is the single action color — don't spread it
301
+ 2. Interaction steps down the violet ramp: `#5c16c5` link → `#451093` hover → `#330c6e` deep
302
+ 3. Roobert for brand/display, Inter 14px/400 for Core UI — they never swap
303
+ 4. No shadows — flat surfaces; scrims (`rgba(0,0,0,0.6)`) float thumbnail metadata
304
+ 5. Full-pill (9000px) buttons + avatars; 2–8px for badges/tiles/inputs
305
+ 6. Text is near-black ink `#0e0e10` on soft grey canvas `#f7f7f8`, never pure black on white
306
+ 7. Scarlet `#eb0400` is LIVE-only — never a general accent
307
+ 8. Keep chrome quiet — the live video is the hero
308
+
309
+ ---
310
+
311
+ ## 10. Voice & Tone
312
+
313
+ Twitch's voice is **playful, community-native, and creator-first** — it speaks the language of the people who live on the platform, never down to them. The register is conversational and warm, leaning on in-group culture (emotes, "chat", clips, raids) without being exclusionary, and it consistently centers the creator and the community over the corporation. Where most platforms address "users," Twitch addresses streamers and viewers as participants in a shared, live moment.
314
+
315
+ | Context | Tone |
316
+ |---|---|
317
+ | Product CTAs | Direct, low-friction. "Sign Up", "Log In", "Follow", "Browse". |
318
+ | Brand / marketing | Energetic, community-celebrating, culturally fluent ("Beyond Purple", "Bringing it all together"). |
319
+ | Live / status | Terse and factual. "LIVE", viewer counts, category tags — information at a glance. |
320
+ | Empowerment copy | Creator-first framing — "rooted in supporting creator brands." |
321
+ | Accessibility / inclusion | Earnest and inclusive — "The future of Twitch is for everyone." |
322
+
323
+ **Voice samples:**
324
+ - "Beyond Purple" — the 2019 rebrand banner, signaling expansion beyond a single color while keeping purple as the anchor. *(verified — blog.twitch.tv/en/2019/12/03/beyond-purple/, 2026-06-17)*
325
+ - "The future of Twitch is for everyone." — inclusion-by-design statement. *(verified — Beyond Purple post, 2026-06-17)*
326
+ - "Accessibility and inclusion by design is paramount." — design-system value. *(verified — Beyond Purple post, 2026-06-17)*
327
+
328
+ **Forbidden register**: corporate stiffness that ignores community culture, hype that overshadows creators, walls of jargon, or treating the live moment as anything other than immediate and present.
329
+
330
+ ## 11. Brand Narrative
331
+
332
+ Twitch began in **2011** as a spin-off of **Justin.tv** — the lifecasting site co-founded by **Justin Kan** and **Emmett Shear** — when the team realized that *gaming* livestreams were the breakout use case. Twitch was carved out as a dedicated home for live game streaming and grew explosively into the defining platform of the creator-economy's live era. **Amazon acquired Twitch in 2014** for roughly $970M, and it remains the dominant live-streaming destination for gaming, "Just Chatting," music, and creative communities.
333
+
334
+ In **September 2019**, Twitch undertook a full platform rebrand — *"Nice to meet you again, for the first time"* — introducing the customized **Roobert** typeface and, in December's **"Beyond Purple"** follow-up, the **Ultraviolet** color system and the **Core UI** design system. The company described the motivation candidly: *"we had become limited by past decisions, making it difficult to scale products and serve our community in a cohesive way."* The rebrand re-derived the entire palette — *"15 grays and 15 purples"* — from an updated brand purple along a controlled lightness curve, with **light and dark themes supported equally** and **accessibility and inclusion by design** stated as paramount.
335
+
336
+ What Twitch refuses, visible in its design: corporate sterility that ignores the chaotic, joyful culture of its communities, and decorative chrome that would compete with the live video. What it embraces: a single iconic purple that *"got Twitch to where it is"* now reinforced by a vibrant, game-inspired expanded palette; a dark-mode-native, high-density Core UI built so *"Core UI powers all of Twitch product UI"*; and a brand *"rooted in supporting creator brands"* — including a dedicated creator color token so streamers' identities can live inside the product.
337
+
338
+ ## 12. Principles
339
+
340
+ 1. **The live moment is the product.** Everything is in service of a stream happening *right now*. *UI implication:* keep chrome flat and quiet (no shadows, soft greys) so the glowing live video owns the visual hierarchy; surface "LIVE" and viewer counts instantly.
341
+ 2. **One purple, deepened — not diluted.** Ultraviolet `#9146ff` is the anchor; interaction steps down a controlled violet ramp. *UI implication:* reserve `#9146ff` for the primary action and use `#5c16c5`/`#451093`/`#330c6e` for links, hover, and deep surfaces — one hue, many calibrated steps.
342
+ 3. **Accessibility and inclusion by design.** Stated as paramount in the rebrand. *UI implication:* the 15-gray / 15-purple ramps are built on a lightness curve for contrast; light and dark themes are first-class equals.
343
+ 4. **Density done with discipline.** Twitch shows a lot at once — shelves of channels, counts, tags. *UI implication:* a tight 12–14px Inter type scale and 2–8px functional radii keep information dense yet scannable.
344
+ 5. **Built for creators, not just users.** The brand is *"rooted in supporting creator brands."* *UI implication:* leave room for creator identity (creator color tokens, channel avatars, custom branding) inside an otherwise systematic UI.
345
+
346
+ ## 13. Personas
347
+
348
+ *Personas below are fictional archetypes informed by publicly observable Twitch user segments (variety streamers, esports viewers, mobile-first lurkers, community moderators), not individual people.*
349
+
350
+ **Devon Reyes, 24, Austin.** A variety streamer building a channel around co-op games and "Just Chatting." Lives in dark mode, cares that his channel's branding (color token, panels, emotes) reads as *his*, not generic Twitch. Values that the platform's chrome stays out of the way of his webcam and gameplay.
351
+
352
+ **Mina Park, 19, Seoul.** A mobile-first esports viewer who watches tournaments on the train. Scans shelves of live channels by thumbnail, LIVE badge, and viewer count in a glance — density is a feature, not a flaw, to her. Notices immediately when a category row is slow or cluttered.
353
+
354
+ **Caleb Wright, 31, Manchester.** A community moderator across several mid-size channels. Spends his time in chat and mod tools, not marketing pages. Wants the functional UI fast, legible, and consistent; appreciates that Core UI behaves the same across every tool he touches.
355
+
356
+ ## 14. States
357
+
358
+ | State | Treatment |
359
+ |---|---|
360
+ | **Empty (no channels live / following)** | Soft canvas (`#f7f7f8`). A single Ink (`#0e0e10`) line explaining nothing's live right now, with one Ultraviolet CTA ("Browse") to discover channels. No heavy illustration. |
361
+ | **Empty (search no results)** | Muted Grey (`#747484`) line stating no results, with the query echoed and a suggestion to broaden. Calm, factual. |
362
+ | **Loading (shelf / carousel)** | Skeleton channel tiles at final dimensions on `#f7f7f8`, 4px radius, flat pulse — no shadow shimmer, consistent with the shadowless system. |
363
+ | **Loading (player buffering)** | Inline spinner over the player area; the surrounding chrome stays interactive. |
364
+ | **Error (stream offline)** | The channel page shows an offline state in Ink with a plain message and recommended live channels below — never a dead end. |
365
+ | **Error (form validation)** | Field-level message below the input in a clear error tone; describes what's valid, not just "required." |
366
+ | **Success (followed / subscribed)** | Brief inline confirmation; the follow control flips state immediately. No celebratory blocker — the action is instant. |
367
+ | **Skeleton** | `#efeff1` blocks at final dimensions, 2–4px radius, flat pulse. |
368
+ | **Disabled** | Reduced-opacity surface and text; Ultraviolet actions fade rather than turn grey, to preserve the brand read. |
369
+
370
+ ## 15. Motion & Easing
371
+
372
+ **Durations**:
373
+
374
+ | Token | Value | Use |
375
+ |---|---|---|
376
+ | `motion-fast` | 120ms | Hover, button press, focus rings |
377
+ | `motion-standard` | 200ms | Shelf reveal, dropdown, side-nav expand/collapse |
378
+ | `motion-slow` | 320ms | Page-level transitions, theme switch |
379
+
380
+ **Easings**:
381
+
382
+ | Token | Curve | Use |
383
+ |---|---|---|
384
+ | `ease-enter` | `cubic-bezier(0.2, 0.6, 0.25, 1)` | Arriving — menus, panels, tiles |
385
+ | `ease-exit` | `cubic-bezier(0.4, 0.0, 1, 1)` | Dismissals |
386
+ | `ease-standard` | `cubic-bezier(0.25, 0.1, 0.25, 1)` | Two-way transitions |
387
+
388
+ **Motion rules**: Twitch describes animation as *"a huge part of the rebrand… part of the design language that blends product and brand together"* — but inside the dense product, motion stays functional and quick so it never competes with live video. Hover and press respond at `motion-fast`; shelves and the side-nav expand at `motion-standard / ease-enter`. The expressive, brand-level animation (the glitch-mark, emote energy) lives on brand and marketing surfaces, not on top of a running stream. Under `prefers-reduced-motion: reduce`, all transitions collapse to instant; the product remains fully functional.
389
+
390
+ <!--
391
+ OmD v0.1 Sources — Philosophy Layer (sections 10–15)
392
+
393
+ Tier 1 live inspect (2026-06-17) via global playwright getComputedStyle on https://www.twitch.tv
394
+ and https://brand.twitch.tv:
395
+ - Sign Up CTA — bg rgb(145,71,255) #9146ff / radius 9000px / Inter 14px / weight 600 / white text / 32px
396
+ - Brand Download CTA (brand.twitch.tv) — bg rgb(145,70,255) #9146ff / radius 9999px / Roobert TW
397
+ - Links / active — color rgb(92,22,197) #5c16c5 (257 fg occurrences)
398
+ - Ink text rgb(14,14,16) #0e0e10 (1155 fg occurrences); body slate rgb(59,59,68) #3b3b44
399
+ - Canvas bg rgb(247,247,248) #f7f7f8; surface alt rgb(239,239,241) #efeff1
400
+ - Purple surfaces rgb(51,12,110) #330c6e, rgb(69,16,147) #451093
401
+ - LIVE badge bg rgb(235,4,0) #eb0400 / radius 4px / 1px 5px padding / 12px
402
+ - Search input bg #ffffff / radius 8px / inset rgba(50,50,57,0.62) 1px ring / 36px
403
+ - Log In btn — translucent rgba(173,173,184,0.22) fill / radius 9000px / 32px
404
+ - Viewer-count pill — rgba(0,0,0,0.6) scrim / white text / 2px radius
405
+ - box-shadow: none across nav, buttons, headings, channel tiles (shadowless system)
406
+ - brand body font: "Roobert TW"; product body font: Inter
407
+
408
+ Token-level claims (§1-9) are sourced from this live inspection plus the official
409
+ "Beyond Purple" rebrand post (blog.twitch.tv/en/2019/12/03/beyond-purple/), which
410
+ documents the Ultraviolet color system, Core UI design system, "15 grays and 15 purples"
411
+ derivation, light/dark theme parity, and "accessibility and inclusion by design."
412
+
413
+ Brand narrative (§11): Twitch spun out of Justin.tv (Justin Kan, Emmett Shear) in 2011;
414
+ acquired by Amazon in 2014; 2019 rebrand introduced Roobert + Ultraviolet/Core UI. These
415
+ are widely documented public facts plus statements quoted from the verified Beyond Purple
416
+ post in this turn.
417
+
418
+ Voice samples (§10) are verbatim from the verified Beyond Purple post.
419
+
420
+ Personas (§13) are fictional archetypes informed by publicly observable Twitch user
421
+ segments (variety streamers, esports viewers, mobile-first lurkers, moderators). Names are
422
+ illustrative; they do not refer to real people.
423
+
424
+ Tier 2: getdesign.md/twitch returned no data (404 / "No designs found"); styles.refero.design
425
+ ?q=twitch returned only AI-synthesized "style" interpretations, not an authoritative Twitch
426
+ UI capture. Tier 1 (live inspect + official brand post) carries the evidence.
427
+
428
+ Interpretive claims (e.g., "one purple, deepened — not diluted", "the live moment is the
429
+ product") are editorial readings connecting Twitch's observed design and stated rebrand
430
+ rationale to its design language, not directly sourced Twitch statements.
431
+ -->