oh-my-design-cli 1.8.0 → 1.8.1

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.
@@ -0,0 +1,535 @@
1
+ ---
2
+ id: abema
3
+ name: ABEMA
4
+ country: JP
5
+ category: consumer-tech
6
+ homepage: "https://abema.tv"
7
+ primary_color: "#ddaa00"
8
+ logo:
9
+ type: favicon
10
+ slug: "https://www.google.com/s2/favicons?domain=abema.tv&sz=128"
11
+ verified: "2026-06-10"
12
+ added: "2026-06-10"
13
+ omd: "0.1"
14
+ tokens:
15
+ source: live-extract
16
+ extracted: "2026-06-10"
17
+ note: "Token names are verbatim from ABEMA's shipped web-app CSS :root block (--abema-yellow = --color-primary #ddaa00; --color-accent #f0163a LIVE crimson). Canvas is pure black; surfaces ladder #0b0b0b → #171717 → #212121 → #373737. Main app was in a large-scale outage on inspect day; token CSS recovered from the brand's own asset bundle (Wayback 2025-12-31)."
18
+ colors:
19
+ primary: "#ddaa00"
20
+ primary-hover: "#dfb015"
21
+ accent: "#f0163a"
22
+ accent-hover: "#f34461"
23
+ green: "#16deb5"
24
+ green-hover: "#44e5c5"
25
+ purple: "#a873ff"
26
+ purple-hover: "#af7eff"
27
+ ppv-blue: "#02d1d6"
28
+ coin: "#ffc400"
29
+ canvas: "#000000"
30
+ surface: "#171717"
31
+ surface-sub: "#212121"
32
+ surface-hover: "#373737"
33
+ surface-deep: "#0b0b0b"
34
+ skeleton: "#1c1c1c"
35
+ foreground: "#e6e6e6"
36
+ smoke: "#999999"
37
+ smoke-strong: "#767676"
38
+ link-hover: "#c5c5c5"
39
+ hairline: "#333333"
40
+ pale: "#f5f5f5"
41
+ on-primary: "#212121"
42
+ white: "#ffffff"
43
+ typography:
44
+ family: { sans: "CopyRight (custom webfont) + Hiragino Sans + BIZ UDPGothic", alphanumeric: "Helvetica / Arial", condensed: "Roboto Condensed" }
45
+ title-l: { size: 32, weight: 700, use: "Page titles (--font-size-title-l)" }
46
+ title-m: { size: 27, weight: 700, use: "Section titles (--font-size-title-m)" }
47
+ title-s: { size: 22, weight: 700, use: "Sub-section titles (--font-size-title-s)" }
48
+ heading: { size: 24, weight: 700, lineHeight: 1.5, use: "Status/feature headings (SorryPage h1, --font-size-xxxl)" }
49
+ body-lg: { size: 16, weight: 700, lineHeight: 1.5, use: "Emphasis body, notification text (--font-size-l)" }
50
+ body: { size: 14, weight: 400, lineHeight: 1.5, use: "Standard reading text, button labels (--font-size-m)" }
51
+ caption: { size: 12, weight: 700, lineHeight: 1.5, use: "Tags, badges, meta (--font-size-xs)" }
52
+ micro: { size: 10, weight: 700, use: "Thumbnail labels (--font-size-xxs)" }
53
+ spacing: { unit: 4, sm: 8, md: 12, base: 16, lg: 32, content-min: 724, content-max: 1024, content-max-vod: 1280 }
54
+ rounded: { sm: 2, md: 4, lg: 8, xl: 12, full: 9999 }
55
+ shadow:
56
+ floating: "0 2px 16px rgba(0,0,0,.2)"
57
+ strong: "0 2px 4px rgba(0,0,0,.5)"
58
+ components:
59
+ button-primary: { type: button, bg: "#ddaa00", fg: "#212121", radius: "4px", height: "44px", font: "14px / 700", states: "hover #dfb015 · active opacity .7 · disabled opacity .4", use: "Primary CTA (com-a-Button--primary)" }
60
+ button-secondary: { type: button, bg: "#e6e6e6", fg: "#212121", radius: "4px", height: "44px", font: "14px / 700", hover: "#ffffff", use: "Secondary action" }
61
+ button-dark: { type: button, bg: "#212121", fg: "#e6e6e6", radius: "4px", height: "44px", font: "14px / 700", hover: "#373737", use: "Tertiary action on dark canvas" }
62
+ button-danger: { type: button, bg: "#f0163a", fg: "#ffffff", radius: "4px", height: "44px", font: "14px / 700", hover: "#f34461", use: "Destructive / cancel-subscription action" }
63
+ badge-live: { type: badge, bg: "#f0163a", fg: "#ffffff", radius: "4px", height: "20px", padding: "0 4px", font: "12px / 700", use: "LIVE broadcasting tag on thumbnails (com-BroadcastingTag)" }
64
+ input-text: { type: input, bg: "#212121", fg: "#e6e6e6", radius: "4px", height: "44px", font: "14px / 400", use: "Dark text field; search variant 46px; placeholder #999999" }
65
+ card-floating: { type: card, bg: "#212121", radius: "4px", shadow: "0 2px 16px rgba(0,0,0,.2)", use: "Search-suggest panel / floating dropdown card" }
66
+ tab-panel: { type: tab, active: "bg #212121 + text #e6e6e6", radius: "4px 4px 0 0", height: "44px", use: "Content panel tabs (com-m-TabList)" }
67
+ toggle-checkbox: { type: toggle, bg: "#ddaa00", border: "1px solid #999999", radius: "2px", height: "20px", use: "Checkbox; checked fills ABEMA yellow" }
68
+ toast-notification: { type: toast, bg: "#212121", fg: "#e6e6e6", radius: "4px", padding: "12px 16px", font: "16px / 700", use: "Notification block; leading label in #ddaa00" }
69
+ components_harvested: true
70
+ ---
71
+
72
+ # Design System Inspiration of ABEMA
73
+
74
+ ## 1. Visual Theme & Atmosphere
75
+
76
+ ABEMA is Japan's "new future of television" — a free, ad-supported linear-streaming hybrid from CyberAgent — and its interface is one of the most committed dark-surface systems in consumer streaming. The canvas is pure black (`#000000`), and content sits on a disciplined ladder of dark grays the brand names in its own CSS tokens: `--dark-stronger` (`#0b0b0b`), `--dark-strong` (`#171717`), `--dark-basic` (`#212121`), and a hover step at `#373737`. On top of this cinema-dark stage, near-white text (`#e6e6e6` — deliberately not pure white) does the reading work, and a single warm signal cuts through: ABEMA yellow (`#ddaa00`), the system's named `--color-primary`, used for links, primary buttons, and selection marks like a broadcast station's "on air" lamp.
77
+
78
+ The second voice in the palette is the crimson accent (`#f0163a`) — the color of the LIVE badge that stamps every currently-broadcasting thumbnail. Where most streaming services reserve red for errors, ABEMA's red means "happening right now", a direct inheritance from television's live-broadcast culture; it doubles as the danger color. Supporting hues are strictly role-bound: mint green (`#16deb5`) for student plans and positive marks, purple (`#a873ff`) for premium-adjacent surfaces, cyan (`#02d1d6`) for pay-per-view, and coin gold (`#ffc400`) for the in-app currency.
79
+
80
+ Typography is unapologetically broadcast-bold: weight 700 dominates the entire stylesheet (361 declarations versus 24 at weight 400), set in a custom-named corporate webfont stack ("CopyRight" + Hiragino Sans + BIZ UDPGothic) with Roboto Condensed reserved for condensed alphanumerics like timetable digits. Geometry is tight and televisual — 4px is the universal radius (`--radius: 4px`, 278 occurrences), circles are reserved for avatars and player controls, and shadows are shallow black glows (`0 2px 16px rgba(0,0,0,.2)`) that read as backlight rather than paper elevation. The result feels like an electronic program guide redesigned by a modern product team: dense, dark, loud where liveness demands it, and quiet everywhere else.
81
+
82
+ **Key Characteristics:**
83
+ - Pure black canvas (`#000000`) with a named dark-surface ladder: `#0b0b0b` → `#171717` → `#212121` → hover `#373737`
84
+ - ABEMA yellow (`#ddaa00`) as `--color-primary` — links, CTAs, checked states; hover deepens to `#dfb015`
85
+ - LIVE crimson (`#f0163a`) for broadcasting-now badges and destructive actions — red means "live", not just "error"
86
+ - Near-white foreground `#e6e6e6` instead of `#ffffff` — softened contrast for long viewing sessions
87
+ - Weight 700 as the default typographic voice; body text at 14px / 1.5
88
+ - Universal 4px radius; 50% circles only for avatars/player controls; 2px on checkboxes
89
+ - Role-locked support colors: mint `#16deb5` (student/free), purple `#a873ff` (premium), cyan `#02d1d6` (PPV), gold `#ffc400` (coins)
90
+ - Custom corporate font stack ("CopyRight" webfont) with Roboto Condensed for numeric/timetable display
91
+
92
+ ## 2. Color Palette & Roles
93
+
94
+ ### Primary
95
+ - **ABEMA Yellow** (`#ddaa00`): `--abema-yellow`, aliased to `--color-primary`. Primary buttons, links (`--font-color-link`), checked radio/checkbox fills, selection highlights. The single warm "action" signal on the dark canvas.
96
+ - **Yellow Hover** (`#dfb015`): `--color-primary-hover`. Hover state for primary buttons and links.
97
+ - **On Primary** (`#212121`): Label color on yellow buttons — dark-on-yellow, never white-on-yellow.
98
+
99
+ ### Accent (Live & Danger)
100
+ - **LIVE Crimson** (`#f0163a`): `--color-accent`. The broadcasting-now tag, NEW labels, danger buttons, warning text (`--font-color-danger`). Red = live first, destructive second.
101
+ - **Crimson Hover** (`#f34461`): `--color-accent-hover`. Hover state for accent/danger elements (legacy hover `#bb122e` survives in older surfaces).
102
+
103
+ ### Role-Bound Support
104
+ - **Mint Green** (`#16deb5`): `--abema-green`. Student-plan markers, positive accents; hover `#44e5c5`.
105
+ - **Purple** (`#a873ff`): `--abema-purple`. Premium-adjacent UI; hover `#af7eff`.
106
+ - **PPV Cyan** (`#02d1d6`): `--payperview-blue`. Pay-per-view labeling.
107
+ - **Coin Gold** (`#ffc400`): `--color-coin`. In-app coin/currency iconography.
108
+
109
+ ### Dark Surface Ladder
110
+ - **Canvas Black** (`#000000`): Page background, player letterboxing, edge gradients.
111
+ - **Surface Deep** (`#0b0b0b`): `--dark-stronger`. Deepest panels, onload placeholder background.
112
+ - **Surface** (`#171717`): `--dark-strong` / `--bg-regular`. Regular app background; floating variant at 80% opacity (`rgba(23,23,23,.8)`) for overlay chrome like the player's mute button.
113
+ - **Surface Sub** (`#212121`): `--dark-basic` / `--bg-sub`. Cards, title cards, dropdowns, inputs, modals — the workhorse component surface.
114
+ - **Surface Hover** (`#373737`): `--dark-basic-hover`. Hover state for sub-surfaces and dropdown items.
115
+ - **Skeleton** (`#1c1c1c`): `--bg-card-placeholder`. Card skeleton/placeholder fill.
116
+
117
+ ### Text & Lines
118
+ - **Foreground** (`#e6e6e6`): `--light-basic` / `--font-color-regular`. Primary text — near-white, never pure.
119
+ - **Smoke** (`#999999`): `--smoke-basic`. Secondary text, placeholder text, info color.
120
+ - **Smoke Strong** (`#767676`): `--smoke-strong`. Tertiary text, progress-bar track.
121
+ - **Link Hover** (`#c5c5c5`): `--font-color-link-hover`. Yellow links cool to gray on hover.
122
+ - **Hairline** (`#333333`): `--border-color`. Default border on dark (sub-border `#555555`).
123
+ - **Pure White** (`#ffffff`): Badge text, icons, maximum-contrast moments only.
124
+
125
+ ### Light-Theme Exception (Timetable)
126
+ - **Pale** (`#f5f5f5`): `--pale-weak` / light text-box background. The EPG timetable runs a parallel `lt-*` light token set (white background, `#eeeeee` program cells, warm `#fcf6e5` for now-playing) — the one deliberately light surface in the product.
127
+
128
+ ## 3. Typography Rules
129
+
130
+ ### Font Family
131
+ - **Primary**: "CopyRight" (custom-named corporate webfont), falling through Emoji, Hiragino Sans, BIZ UDPGothic Alphabet, BIZ UDGothic, Meiryo, sans-serif (`--font-family-sans-serif`)
132
+ - **Alphanumeric**: Helvetica, Arial (`--font-family-for-alphanumeric`)
133
+ - **Condensed numerals**: Roboto Condensed — timetable digits, player timecodes
134
+
135
+ ### Hierarchy
136
+
137
+ | Role | Size | Weight | Line Height | Notes |
138
+ |------|------|--------|-------------|-------|
139
+ | Title L | 32px | 700 | 1.3 | `--font-size-title-l`, page titles (mobile 27px) |
140
+ | Title M | 27px | 700 | 1.3 | `--font-size-title-m`, section titles (mobile 20px) |
141
+ | Heading XXXL | 28px | 700 | 1.5 | `--font-size-xxxxl` |
142
+ | Heading | 24px | 700 | 1.5 | `--font-size-xxxl`; SorryPage h1 measured 24px/700 `#e6e6e6` |
143
+ | Title S | 22px | 700 | 1.3 | `--font-size-title-s` |
144
+ | Emphasis Body | 16px | 700 | 1.5 | `--font-size-l`, notification text, button L labels |
145
+ | Body | 14px | 400 | 1.5 (21px) | `--font-size-m`, document default (measured live) |
146
+ | Caption | 12px | 700 | 1.5 | `--font-size-xs`, tags and badges |
147
+ | Micro | 10px | 700 | 1.5 | `--font-size-xxs`, thumbnail labels (mobile badges) |
148
+
149
+ ### Principles
150
+ - **Bold is the default voice.** Weight 700 outnumbers weight 400 by 15:1 in the shipped stylesheet. Headings, buttons, badges, tab labels, notification text — all bold. Weight 400 is reserved for plain reading copy.
151
+ - **A dedicated mobile scale.** Every size token has a `mb-` twin one step smaller (title-l 32→27, xxl 22→18), so density survives on phones without reflowing the hierarchy.
152
+ - **Condensed digits for broadcast data.** Roboto Condensed handles timetable hours and timecodes, keeping dense numeric grids narrow — a television-schedule inheritance.
153
+ - **1.5 / 1.3 / 1 line-height triad.** Reading text at 1.5, headings at 1.3, controls at 1 — the three values cover 90% of declarations.
154
+
155
+ ## 4. Component Stylings
156
+
157
+ ### Buttons
158
+
159
+ **Primary**
160
+ - Background: `#ddaa00`
161
+ - Text: `#212121`
162
+ - Radius: 4px
163
+ - Height: 44px
164
+ - Font: 14px / 700
165
+ - Hover: `#dfb015` background
166
+ - Active: opacity 0.7
167
+ - Disabled: opacity 0.4
168
+ - Use: Primary CTA (`com-a-Button--primary`) — plan signup, confirm actions
169
+
170
+ Size scale: small 12px label / 32px height · default 14px / 44px · large 16px / 52px · extra-large 20px / 56px (`--button-label-size-*`).
171
+
172
+ **Secondary**
173
+ - Background: `#e6e6e6`
174
+ - Text: `#212121`
175
+ - Radius: 4px
176
+ - Height: 44px
177
+ - Font: 14px / 700
178
+ - Hover: `#ffffff` background
179
+ - Use: Secondary action paired with a primary
180
+
181
+ **Dark (Tertiary)**
182
+ - Background: `#212121`
183
+ - Text: `#e6e6e6`
184
+ - Radius: 4px
185
+ - Height: 44px
186
+ - Font: 14px / 700
187
+ - Hover: `#373737` background
188
+ - Use: Low-emphasis action sitting directly on the black canvas
189
+
190
+ **Primary Dark (Inverse)**
191
+ - Background: `#212121`
192
+ - Text: `#ddaa00`
193
+ - Radius: 4px
194
+ - Height: 44px
195
+ - Font: 14px / 700
196
+ - Use: Brand-colored label on dark surface (`com-a-Button--primary-dark`)
197
+
198
+ **Danger**
199
+ - Background: `#f0163a`
200
+ - Text: `#ffffff`
201
+ - Radius: 4px
202
+ - Height: 44px
203
+ - Font: 14px / 700
204
+ - Hover: `#f34461` background
205
+ - Use: Destructive confirmation (unsubscribe, delete)
206
+
207
+ ### Inputs
208
+
209
+ **Text Field**
210
+ - Background: `#212121`
211
+ - Text: `#e6e6e6`
212
+ - Radius: 4px
213
+ - Height: 44px
214
+ - Font: 14px / 400
215
+ - Placeholder: `#999999`
216
+ - Use: Dark-theme text input (`com-InputText`); small variant 36px with 12px font and 8px padding; search variant 46px
217
+
218
+ ### Cards & Containers
219
+
220
+ **Floating Panel**
221
+ - Background: `#212121`
222
+ - Radius: 4px
223
+ - Shadow: `0 2px 16px rgba(0,0,0,.2)`
224
+ - Use: Search-suggest list, dropdown menus, floating cards (`com-search-SearchSuggestList`)
225
+
226
+ **Title Card**
227
+ - Background: `#212121`
228
+ - Radius: 4px
229
+ - Use: Program/episode cards on black canvas (`--bg-title-card`); skeleton state fills `#1c1c1c`
230
+
231
+ ### Badges
232
+
233
+ **LIVE Broadcasting Tag**
234
+ - Background: `#f0163a`
235
+ - Text: `#ffffff`
236
+ - Radius: 4px
237
+ - Height: 20px
238
+ - Padding: 0 4px
239
+ - Font: 12px / 700
240
+ - Use: Broadcasting-now stamp at top-right of thumbnails (`com-BroadcastingTag`; mobile 16px height, 10px font)
241
+
242
+ **Pre-Broadcast Tag**
243
+ - Background: `rgba(23,23,23,0.8)`
244
+ - Text: `#ffffff`
245
+ - Radius: 4px
246
+ - Height: 20px
247
+ - Padding: 0 4px
248
+ - Font: 12px / 700
249
+ - Use: Countdown-to-broadcast tag with clock icon
250
+
251
+ **NEW Label**
252
+ - Background: `#f0163a`
253
+ - Text: `#ffffff`
254
+ - Height: 16px
255
+ - Padding: 0 4px
256
+ - Font: 10px / 700
257
+ - Use: Newest-episode corner label, bottom-left radius 4px only
258
+
259
+ ### Tabs
260
+
261
+ **Panel Tab**
262
+ - Radius: 4px 4px 0px 0px
263
+ - Height: 44px
264
+ - Active: background `#212121`
265
+ - Use: Content panel tabs (`com-m-TabList`); inactive tabs sit transparent on black, 16px horizontal label padding
266
+
267
+ **Round Tab**
268
+ - Radius: 16px
269
+ - Height: 44px
270
+ - Focus: background `#e6e6e6`, text `#212121`
271
+ - Use: Genre chip tabs (`com-RoundTabItem`; mobile 48px row, 12px font)
272
+
273
+ ### Toggles & Selection
274
+
275
+ **Checkbox**
276
+ - Border: 1px solid `#999999`
277
+ - Radius: 2px
278
+ - Height: 20px
279
+ - Checked: background `#ddaa00`
280
+ - Use: Settings/consent checkboxes; small variant 14px; radio twin uses 50% radius and the same yellow fill
281
+
282
+ ### Toasts
283
+
284
+ **Notification Block**
285
+ - Background: `#212121`
286
+ - Text: `#e6e6e6`
287
+ - Radius: 4px
288
+ - Padding: 12px 16px
289
+ - Font: 16px / 700
290
+ - Use: In-app notification row; leading label rendered in `#ddaa00` (`com-m-NotificationBlock`); mobile variant adds 1px solid `#333333` border
291
+
292
+ ### Dialogs
293
+
294
+ **Modal**
295
+ - Overlay: `rgba(0,0,0,0.7)`
296
+ - Padding: 32px 16px 16px
297
+ - Use: Centered modal (`com-a-Modal`); width scale 300px (S) / 360px (M) / 640px (L)
298
+
299
+ ---
300
+ **Verified:** 2026-06-10
301
+ **Tier 1 sources:** https://abema.tv (live inspect 2026-06-10 — large-scale outage day, dark maintenance/sorry shell measured); https://abema.tv/assets/registry.1bbd6d267a32e228541e6.css (ABEMA's own shipped web-app CSS bundle: full `:root` token system + component classes, retrieved via web.archive.org snapshot 2025-12-31 because origin assets rotated during the outage); https://times.abema.tv (ABEMA TIMES, brand-owned media surface, live inspect 2026-06-10)
302
+ **Tier 2 sources:** none available (getdesign.md/abema and getdesign.md/abematv both NOT_FOUND; styles.refero.design ?q=abema returns no ABEMA listing)
303
+ **Conflicts unresolved:** none
304
+
305
+ ## 5. Layout Principles
306
+
307
+ ### Spacing System
308
+ - Base unit: 4px (`--space: 4px`); paddings compose as multiples (4, 8, 12, 16, 32)
309
+ - Tooltip/badge paddings derive from `calc(var(--space)*n)` — the unit is enforced in code, not convention
310
+
311
+ ### Grid & Container
312
+ - Content min-width 724px, max-width 1024px (`--content-min-width` / `--content-max-width`); VOD watch pages extend to 1280px
313
+ - Mobile content width 640px
314
+ - Home is a vertical stack of horizontal carousels (broadcast rails) over the black canvas, edge-faded with black gradients (`linear-gradient(90deg, #000, transparent)`)
315
+ - The EPG timetable is the structural exception: a dense light-theme grid with 8px lane spacing
316
+
317
+ ### Whitespace Philosophy
318
+ - **Density over air.** ABEMA is a television guide, not an editorial site — rails, tags, and metadata pack tightly at 4px increments; generous whitespace is spent only around the player.
319
+ - **Black is the separator.** Sections separate by the canvas showing through between `#212121` cards rather than by borders or shadows.
320
+ - **Edge gradients instead of hard clips.** Carousel rails fade into `#000000` (or `#212121` inside cards) at their edges, keeping the dark surface continuous.
321
+
322
+ ### Border Radius Scale
323
+ - Micro (2px): checkboxes
324
+ - Standard (4px): buttons, inputs, cards, tags, modals — the universal value (`--radius: 4px`, 278 declarations)
325
+ - Relaxed (8px): featured containers
326
+ - Large (12-16px): round tabs, promotional cards
327
+ - Circle (50%): avatars, radio buttons, player control buttons
328
+
329
+ ## 6. Depth & Elevation
330
+
331
+ | Level | Treatment | Use |
332
+ |-------|-----------|-----|
333
+ | Flat (Level 0) | No shadow, canvas `#000000` | Page background, rails |
334
+ | Surface (Level 1) | Background shift to `#212121`, no shadow | Cards, inputs, tabs |
335
+ | Floating (Level 2) | `0 2px 16px rgba(0,0,0,.2)` | Dropdowns, suggest panels, floating cards |
336
+ | Strong (Level 3) | `0 2px 4px rgba(0,0,0,.5)` | Player chrome, compact overlays |
337
+ | Overlay (Level 4) | `rgba(0,0,0,0.7)` full-screen scrim | Modals |
338
+
339
+ **Shadow Philosophy**: On a black canvas, shadows barely read — so ABEMA's depth system leans on background-color steps (`#0b0b0b` → `#171717` → `#212121` → `#373737`) rather than elevation. The few shadows that exist are soft black glows used as separation hints for elements that float over imagery (dropdowns over thumbnails). Translucent surface tokens (`rgba(33,33,33,.8)`, `rgba(23,23,23,.8)`) handle chrome that must sit over video without fully hiding it — depth through transparency, a player-first pattern.
340
+
341
+ ## 7. Do's and Don'ts
342
+
343
+ ### Do
344
+ - Keep the canvas pure black (`#000000`) and step surfaces up the named ladder (`#0b0b0b`, `#171717`, `#212121`, `#373737`)
345
+ - Reserve ABEMA yellow (`#ddaa00`) for actions: primary buttons, links, checked states — hover to `#dfb015`
346
+ - Use crimson (`#f0163a`) for "live right now" badges first, destructive actions second
347
+ - Set near-white text in `#e6e6e6`, with `#999999` for secondary and `#767676` for tertiary
348
+ - Default to weight 700 for headings, buttons, badges, and tab labels
349
+ - Use 4px radius everywhere; 50% only for avatars and circular player controls
350
+ - Use translucent dark surfaces (`rgba(23,23,23,.8)`) for chrome floating over video
351
+ - Use Roboto Condensed for timetable digits and timecodes
352
+
353
+ ### Don't
354
+ - Use pure white `#ffffff` for body text — `#e6e6e6` is the reading color; white is for badge text and icons
355
+ - Spread yellow beyond actionable elements — it is the single attention signal on a dark field
356
+ - Use red for generic emphasis — `#f0163a` carries the specific meaning "broadcasting live" (and danger)
357
+ - Add paper-style drop shadows to cards — separation comes from surface-color steps, not elevation
358
+ - Use pill-shaped buttons — the system is 4px-rectangular; only genre chips reach 16px
359
+ - Set headings in light weights — ABEMA's voice is broadcast-bold 700
360
+ - Put white-on-yellow labels on primary buttons — the label is always dark `#212121`
361
+ - Break the 4px spacing unit with arbitrary gaps
362
+
363
+ ## 8. Responsive Behavior
364
+
365
+ ### Breakpoints
366
+ | Name | Width | Key Changes |
367
+ |------|-------|-------------|
368
+ | Mobile | <640px | `mb-` type scale (titles 32→27, 27→20), badges shrink to 16px height / 10px font, tab rows 48px |
369
+ | Tablet/Min | 724px | `--content-min-width` floor for the desktop app layout |
370
+ | Desktop | 724-1024px | Standard rail layout at `--content-max-width: 1024px` |
371
+ | VOD Watch | up to 1280px | Player pages extend to `--content-max-width-for-vod` |
372
+
373
+ ### Touch Targets
374
+ - Buttons at 44px default height (52/56px for large CTAs) — thumb-safe by default
375
+ - Mobile tab rows at 48px with 8px vertical padding
376
+ - Timetable arrow controls at 60px circles (`rgba(0,0,0,.6)` over content)
377
+
378
+ ### Collapsing Strategy
379
+ - Every font-size token swaps to its `mb-` twin — hierarchy compresses one step rather than reflowing
380
+ - Carousel rails persist on mobile with edge gradients; arrows hide in favor of swipe
381
+ - Badges and tags keep their geometry, shrinking 20px→16px height
382
+ - The player remains the fixed anchor; metadata stacks beneath it
383
+
384
+ ### Image Behavior
385
+ - Program thumbnails are 16:9, corner-tagged (LIVE top-right at 4px inset, NEW top-right corner-fitted)
386
+ - Thumbnails carry no shadow; on hover a `hsla(0,0%,100%,.08)` white veil lifts them
387
+ - Skeleton thumbnails fill `#1c1c1c` on `#212121` cards
388
+
389
+ ## 9. Agent Prompt Guide
390
+
391
+ ### Quick Color Reference
392
+ - Primary CTA / links: ABEMA Yellow (`#ddaa00`), hover (`#dfb015`), label on yellow: `#212121`
393
+ - LIVE badge / danger: Crimson (`#f0163a`), hover (`#f34461`)
394
+ - Canvas: Black (`#000000`)
395
+ - Card/input/modal surface: `#212121`, hover `#373737`
396
+ - App background: `#171717`
397
+ - Primary text: `#e6e6e6`; secondary `#999999`; tertiary `#767676`
398
+ - Border on dark: `#333333`
399
+ - Student/positive: Mint (`#16deb5`); premium: Purple (`#a873ff`); PPV: Cyan (`#02d1d6`); coins: Gold (`#ffc400`)
400
+
401
+ ### Example Component Prompts
402
+ - "Create a dark streaming home: pure #000000 canvas, horizontal carousel rails of 16:9 thumbnail cards on #212121 with 4px radius. Each live card gets a top-right LIVE badge: #f0163a background, white 12px/700 text, 4px radius, 20px height. Primary text #e6e6e6, metadata #999999."
403
+ - "Design a primary button: #ddaa00 background, #212121 text, 4px radius, 44px height, 14px weight-700 label. Hover #dfb015. Secondary twin: #e6e6e6 background, #212121 text, hover #ffffff. Danger twin: #f0163a with white text, hover #f34461."
404
+ - "Build a search field on dark: #212121 background, 4px radius, 46px height, #e6e6e6 text, #999999 placeholder. Suggest dropdown below: #212121 panel, 4px radius, shadow 0 2px 16px rgba(0,0,0,.2), rows hover #373737."
405
+ - "Create panel tabs on black: 44px height, 4px 4px 0 0 radius, active tab background #212121 with #e6e6e6 weight-700 label, inactive transparent with #999999 label."
406
+ - "Design a notification toast: #212121 background, 4px radius, 12px 16px padding, leading label in #ddaa00 16px/700, message #e6e6e6 16px/700."
407
+
408
+ ### Iteration Guide
409
+ 1. Canvas is `#000000`; components live on `#212121`; never use light surfaces except the EPG timetable
410
+ 2. Yellow `#ddaa00` = action, crimson `#f0163a` = live/danger — never swap or dilute these meanings
411
+ 3. Text: `#e6e6e6` primary / `#999999` secondary / `#767676` tertiary; white only inside badges
412
+ 4. Radius is 4px everywhere; 2px checkboxes; 50% circles for avatars and player controls
413
+ 5. Weight 700 for every label and heading; 400 only for reading copy at 14px/1.5
414
+ 6. Hover = one surface step up (`#212121` → `#373737`) or one tone shift (`#ddaa00` → `#dfb015`); pressed = opacity 0.7; disabled = opacity 0.4
415
+ 7. Depth = surface steps and `rgba(0,0,0,.2)` glows, not paper shadows
416
+ 8. Keep 4px spacing increments; content max 1024px (1280px for watch pages)
417
+
418
+ ---
419
+
420
+ ## 10. Voice & Tone
421
+
422
+ ABEMA's voice is **immediate, broadcast-warm, and unpretentious** — the register of a television announcer translated into product copy. The service introduces itself as "新しい未来のテレビ" (the new future of television), and the copy keeps television's directness: short declaratives, time-anchored language (今・LIVE・最新), and zero subscription-guilt pressure on the free tier. Japanese politeness forms are used straightforwardly (です/ます) without corporate stiffness.
423
+
424
+ | Context | Tone |
425
+ |---|---|
426
+ | Service tagline | Mission-framed, plain. "無料動画・話題の作品が楽しめる新しい未来のテレビ" — benefit first, vision second. |
427
+ | Player / controls | Imperative and instant: "クリックでミュートを解除", "音声をオンにする". No fluff between user and playback. |
428
+ | Live signals | Single loud words: LIVE, NEW. The badge is the sentence. |
429
+ | Error / outage | Apologetic but composed: "申し訳ありません" + factual status + a link to official channels. |
430
+ | Category navigation | Bare nouns: ニュース、スポーツ、アニメ、将棋、麻雀 — a channel dial, not a menu essay. |
431
+ | Premium upsell | Direct benefit statements; the free tier is never shamed. |
432
+
433
+ **Voice samples (verbatim):**
434
+ - "無料動画・話題の作品が楽しめる新しい未来のテレビ" — service title tagline. *(verified: document title, abema.tv, archived 2026-01-01 snapshot of live page)*
435
+ - "クリックでミュートを解除" — player mute-unlock button. *(verified live 2026-06-10, abema.tv shell)*
436
+ - "ABEMAの表示に失敗しました" / "申し訳ありません" — outage SorryPage headings. *(verified 2026-06-10 / archived snapshot)*
437
+
438
+ **Forbidden register**: hype superlatives ("革命的"), aggressive FOMO countdowns outside genuinely live content, dense legalistic blocks in player UI, and casual slang that breaks the broadcaster's composure.
439
+
440
+ ## 11. Brand Narrative
441
+
442
+ ABEMA launched in **April 2016** as "AbemaTV", a joint venture led by **CyberAgent** (with TV Asahi as media partner) under CyberAgent founder **藤田晋 (Susumu Fujita)**, who framed the service as a bet on reinventing television for the internet generation: dozens of free, 24-hour linear channels — news, anime, sports, shogi, mahjong — streamed like broadcast TV but born on the web. The 2020 rebrand to **ABEMA** and the August 2021 product renewal formalized the idea in internal brand guidelines built around the concept of **"テレビの再発明" (the reinvention of television)**, presented publicly by Chief Creative Director 佐藤洋介 at CyberAgent Developer Conference 2022 — the goal being to infuse the service itself with "意思" (intent) so every touchpoint carries the brand.
443
+
444
+ The design system reads as that thesis executed literally. The black canvas is the switched-on television in a dark living room; the yellow `#ddaa00` primary is the tuning lamp; the crimson LIVE tag inherits the red light of a broadcast studio. Free linear channels remain the front door — the World Cup 2022, which ABEMA streamed free in its entirety, became the brand's defining proof that "the new future of television" could out-broadcast broadcast — while ABEMA Prime news and the shogi/mahjong channels built daily-habit audiences television had stopped serving.
445
+
446
+ What ABEMA refuses: the paywalled-catalog coldness of subscription-first streamers, light-mode editorial chrome, and interface decoration that competes with content. What it embraces: television's liveness culture (red means on-air), announcer-direct microcopy, broadcast-bold type, and a dark surface system disciplined enough to let thumbnails be the only color that matters.
447
+
448
+ ## 12. Principles
449
+
450
+ 1. **Liveness is the product.** ABEMA's identity is simultaneous experience — everyone watching the same moment. *UI implication:* the LIVE crimson badge (`#f0163a`) is sacred vocabulary; surface "now broadcasting" aggressively and never use its red for mere decoration.
451
+ 2. **The canvas is a switched-off screen.** Content supplies the light. *UI implication:* pure `#000000` background, `#212121` component surfaces, no paper shadows — separation through darkness, color through thumbnails.
452
+ 3. **One yellow, one meaning.** `#ddaa00` is the brand's entire action vocabulary. *UI implication:* links, primary CTAs, and checked states share the yellow; nothing else may borrow it, so the next action is never ambiguous.
453
+ 4. **Broadcast-bold, announcer-brief.** Television speaks in headlines. *UI implication:* weight 700 by default, microcopy in short imperatives, badges as one-word sentences.
454
+ 5. **Reinvent television, don't imitate apps.** From the brand concept "テレビの再発明". *UI implication:* keep televisual structures — channel rails, the EPG timetable (the one light surface), condensed timecode digits — instead of defaulting to generic streaming-app patterns.
455
+
456
+ ## 13. Personas
457
+
458
+ *Personas below are fictional archetypes informed by publicly observable ABEMA audience segments (free linear-TV viewers, anime fans, shogi/mahjong communities, live-sports audiences), not individual people.*
459
+
460
+ **佐々木蓮, 24, 東京.** A commuter who treats ABEMA as his pocket television — ABEMA Prime news in the morning, anime rails at night. Has never paid for a subscription and doesn't feel like a second-class user; the free linear front door is why he's loyal.
461
+
462
+ **田中美咲, 31, 大阪.** A premium subscriber who came for a World Cup match her friends were all watching live and stayed for on-demand dramas. Values that "live" in ABEMA means genuinely simultaneous — the crimson badge is her cue to join the shared moment.
463
+
464
+ **山本健一, 58, 名古屋.** A shogi devotee who keeps the shogi channel running for hours. Appreciates the dark, calm interface and the timetable's clarity; he navigates by the EPG like a newspaper TV section, exactly the metaphor ABEMA intends.
465
+
466
+ ## 14. States
467
+
468
+ | State | Treatment |
469
+ |---|---|
470
+ | **Empty (no results)** | Dark canvas stays; single `#e6e6e6` line stating no matches, with a `#ddaa00` link back to genres. No illustration noise on the black field. |
471
+ | **Empty (my-list, none yet)** | `#999999` one-liner explaining the list is empty plus a yellow path to discover — calm, no guilt. |
472
+ | **Loading (page/onload)** | Placeholder canvas at `#0b0b0b` (`--onload-bg-placeholder`); rails appear as they resolve. |
473
+ | **Loading (cards)** | Skeleton cards: `#1c1c1c` thumbnail fill on `#212121` card body (`--bg-card-placeholder`), title bars in `#212121` — flat pulse, no shimmer gloss. |
474
+ | **Error (display failed)** | Dedicated SorryPage on black: bold 24px/700 `#e6e6e6` heading "ABEMAの表示に失敗しました", apology line, and `#ddaa00` links to official status channels (measured live 2026-06-10). |
475
+ | **Error (form/field)** | Danger color `#f0163a` for the message text (`--font-color-danger`), field keeps its `#212121` surface — error is typographic, not a glowing red box. |
476
+ | **Maintenance / outage** | Full-bleed dark maintenance shell retaining brand tokens: black canvas, `rgba(23,23,23,.8)` chrome, `#ddaa00` links to x.com/ABEMA and help center. |
477
+ | **Success (action saved)** | Notification block: `#212121` toast, 4px radius, leading `#ddaa00` label, `#e6e6e6` 16px/700 message. Brief, no celebration. |
478
+ | **Skeleton** | `#1c1c1c` blocks at final dimensions inside `#212121` cards; text rows as `#212121` bars (`--bg-card-texts-placeholder`). |
479
+ | **Disabled** | Opacity 0.4 on the whole control (`--button-opacity-disabled`) — yellow stays yellow, just dimmed, preserving the action vocabulary. |
480
+
481
+ ## 15. Motion & Easing
482
+
483
+ **Durations**:
484
+
485
+ | Token | Value | Use |
486
+ |---|---|---|
487
+ | `--fading-duration` | 0.1s | Hover veils, button color/border transitions, suggest-list reveal |
488
+ | transition (buttons) | 0.1s ease-out | Border and label color shifts on `com-a-Button` |
489
+ | `--duration` | 0.5s | Page-level / carousel slide movements |
490
+ | `--tooltip-controller-hover-delay` | 0.3s | Tooltip appearance delay |
491
+
492
+ **Easings**:
493
+
494
+ | Curve | Use |
495
+ |---|---|
496
+ | `linear` | Default (`--easing: linear`) — opacity fades, veil hovers |
497
+ | `ease-out` | Button color/border transitions |
498
+ | `cubic-bezier(.33, 1, .68, 1)` | Search-suggest panel reveal (easeOutCubic — fast in, soft settle) |
499
+
500
+ **Motion rules**: Motion is utilitarian and nearly invisible — 0.1s fades dominate because a television interface must never feel like it's animating between channels. Hover states are opacity/veil changes (`hsla(0,0%,100%,.08)` white veil at 0.1s linear) rather than transforms; pressed states drop to opacity 0.7 instantly. The 0.5s budget is reserved for spatial moves like carousel paging. No spring, no bounce, no scale pops — liveness comes from the content, not the chrome. Under `prefers-reduced-motion: reduce`, fades collapse to instant; nothing in the interface depends on animation to communicate state.
501
+
502
+ <!--
503
+ OmD v0.1 Sources — Philosophy Layer (sections 10–15)
504
+
505
+ Tier 1 evidence (2026-06-10):
506
+ - https://abema.tv live inspect (playwright getComputedStyle) — outage-day shell: black canvas,
507
+ rgba(23,23,23,.8) player chrome, #ddaa00 links, 4px radius, custom "CopyRight" font stack.
508
+ - ABEMA web-app CSS bundle abema.tv/assets/registry.1bbd6d267a32e228541e6.css via
509
+ web.archive.org snapshot 2025-12-31 (origin assets rotated during the 2026-06-10 outage).
510
+ All :root token names/values (§1-6, §14-15) quoted verbatim from this brand-shipped artifact:
511
+ --abema-yellow #da0, --color-primary, --color-accent #f0163a, --dark-basic #212121,
512
+ --radius 4px, --duration 0.5s, --button-opacity-disabled 0.4, com-a-Button--* classes,
513
+ com-BroadcastingTag, com-m-NotificationBlock, com-a-Modal, etc.
514
+ - https://times.abema.tv live inspect 2026-06-10 (brand-owned media surface, dark canvas).
515
+
516
+ Brand philosophy:
517
+ - CADC 2022 session "ABEMAにおけるサービスブランディング" (cadc.cyberagent.co.jp) — confirms
518
+ brand concept "テレビの再発明", internal ABEMA BRAND GUIDELINES, the "意思" (intent) framing,
519
+ and speakers 佐藤洋介 (Chief Creative Director) / 遠藤直人 (Art Director). Fetched 2026-06-10.
520
+ - highlights.jp/project/abematv-branding/ — VI design + brand experience design project page,
521
+ "テレビをもう一度発明する" concept. Fetched 2026-06-10.
522
+ - Widely documented public facts (not independently re-verified this turn): AbemaTV launch
523
+ April 2016 as CyberAgent-led JV with TV Asahi; Susumu Fujita's leadership; 2020 rebrand to
524
+ ABEMA; free full streaming of FIFA World Cup 2022; tagline 新しい未来のテレビ.
525
+
526
+ Voice samples (§10) are verbatim: document title (archived snapshot 2026-01-01), player
527
+ mute button + SorryPage strings (live/archived inspects this turn).
528
+
529
+ Personas (§13) are fictional archetypes informed by publicly observable ABEMA audience
530
+ segments. Names are illustrative; they do not refer to real people.
531
+
532
+ Interpretive claims (e.g., "the black canvas is a switched-on television in a dark living
533
+ room", "red means on-air first") are editorial readings connecting ABEMA's observed tokens
534
+ to its stated brand concept, not directly sourced ABEMA statements.
535
+ -->