oh-my-design-cli 1.5.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/AGENTS.md +1 -0
  2. package/README.ko.md +1 -1
  3. package/README.md +9 -9
  4. package/agents/omd-master.md +13 -1
  5. package/data/reference-fingerprints.json +1428 -523
  6. package/package.json +5 -4
  7. package/scripts/ctx-prime.cjs +266 -0
  8. package/skills/omd-harness/SKILL.md +135 -7
  9. package/skills/omd-kr-writer/SKILL.md +1 -1
  10. package/web/references/17live/DESIGN.md +424 -0
  11. package/web/references/alipay/DESIGN.md +456 -0
  12. package/web/references/appier/DESIGN.md +420 -0
  13. package/web/references/bilibili/DESIGN.md +426 -0
  14. package/web/references/class101/DESIGN.md +433 -0
  15. package/web/references/cookpad/DESIGN.md +357 -0
  16. package/web/references/dji/DESIGN.md +416 -0
  17. package/web/references/gogoro/DESIGN.md +403 -0
  18. package/web/references/ichef/DESIGN.md +411 -0
  19. package/web/references/kakaopay/DESIGN.md +1 -1
  20. package/web/references/kakaot/DESIGN.md +454 -0
  21. package/web/references/kkday/DESIGN.md +423 -0
  22. package/web/references/meituan/DESIGN.md +424 -0
  23. package/web/references/millie/DESIGN.md +533 -0
  24. package/web/references/money-forward/DESIGN.md +401 -0
  25. package/web/references/myrealtrip/DESIGN.md +445 -0
  26. package/web/references/naverwebtoon/DESIGN.md +429 -0
  27. package/web/references/note/DESIGN.md +318 -0
  28. package/web/references/publy/DESIGN.md +511 -0
  29. package/web/references/smarthr/DESIGN.md +404 -0
  30. package/web/references/smartnews/DESIGN.md +331 -0
  31. package/web/references/spoon/DESIGN.md +446 -0
  32. package/web/references/tada/DESIGN.md +528 -0
  33. package/web/references/tossbank/DESIGN.md +519 -0
  34. package/web/references/triple/DESIGN.md +434 -0
  35. package/web/references/tumblbug/DESIGN.md +530 -0
  36. package/web/references/watcha/DESIGN.md +425 -0
  37. package/web/references/wavve/DESIGN.md +438 -0
  38. package/web/references/wconcept/DESIGN.md +511 -0
  39. package/web/references/xiaohongshu/DESIGN.md +423 -0
  40. package/web/references/yogiyo/DESIGN.md +465 -0
@@ -0,0 +1,438 @@
1
+ ---
2
+ id: wavve
3
+ name: Wavve
4
+ country: KR
5
+ category: consumer-tech
6
+ homepage: "https://www.wavve.com"
7
+ primary_color: "#1351F9"
8
+ logo:
9
+ type: favicon
10
+ slug: "https://www.google.com/s2/favicons?domain=wavve.com&sz=128"
11
+ verified: "2026-05-27"
12
+ omd: "0.1"
13
+ ---
14
+
15
+ # Design System Inspiration of Wavve (웨이브)
16
+
17
+ ## 1. Visual Theme & Atmosphere
18
+
19
+ Wavve is Korea's homegrown OTT — the merger of SK Telecom's oksusu and the terrestrial broadcasters' POOQ into one streaming home for Korean drama, variety, news, and live TV. Its interface is the classic streaming dark room, but with a distinctly Wavve signature: instead of the near-pure black of most OTTs, Wavve sits on a **deep midnight blue** canvas, and its interactive accent is a vivid, electric brand **blue `#1351F9`**. The whole identity is built from blue — "from daytime to midnight," as the brand's own rebrand language put it: the deep blue background minimizes eye fatigue during long viewing, while the bright brand blue is reserved as a point color to draw attention and carry legibility. The atmosphere is "a wave you ride into the evening" — calm, immersive, and unmistakably blue, where rows of poster art glow against a dark blue tide.
20
+
21
+ What defines Wavve visually is **blue all the way down with poster art as the light source**. The browse experience is the familiar OTT grid — billboard hero up top, horizontal rows of 16:9 and 2:3 thumbnails below — but the surrounding chrome is suppressed to thin white-and-gray text on the dark blue field, so the catalog itself supplies the energy. The brand blue `#1351F9` does the interactive work: the primary play/subscribe CTA, the active tab, selection, the progress bar. A set of genre-tuned secondary colors and 3D content icons (from the rebrand system) add variety without breaking the blue spine. This is content-firehose OTT, but with a calmer, bluer temperament than the louder red incumbents.
22
+
23
+ Typography is the modern Korean product stack — **Pretendard**-led with Apple SD Gothic Neo / Malgun Gothic fallbacks (brand surfaces may use a custom face) — rendered white-and-gray on the dark blue canvas. Numbers matter for runtime, episode counts, and ratings, but the type's main job is to recede so the posters and the blue accent carry the screen.
24
+
25
+ **Key Characteristics:**
26
+ - Brand blue `#1351F9` as the interactive accent — play/subscribe CTA, active tab, progress, selection
27
+ - Deep midnight-blue canvas (not pure black) — "daytime to midnight" blue identity, low eye fatigue
28
+ - Poster/billboard art as the light source; chrome recedes to white-gray text
29
+ - Pretendard-led Korean type stack, white-on-dark-blue
30
+ - Genre-tuned secondary colors + 3D content icons (from the brand rebrand) for variety on the blue spine
31
+ - Calmer, bluer temperament than the louder red OTT incumbents
32
+ - Standard OTT layout: billboard hero + horizontal poster carousels
33
+
34
+ ## 2. Color Palette & Roles
35
+
36
+ Wavve's primary blue `#1351F9` is the brief-provided brand blue, consistent with the documented rebrand ("deep blue background + brand blue point color"). Wavve publishes no public UI token layer; the dark-blue surface scale and grays below follow the documented blue-led dark-theme direction + standard OTT conventions. Treat surface hexes as conventional, the brand blue as the verified anchor.
37
+
38
+ ### Brand / Interactive
39
+ - **Wavve Blue** (`#1351F9`): The signature brand color (RGB 19, 81, 249). Primary play/subscribe CTA, active tab, selection highlight, progress bar, focus ring. The single workhorse accent.
40
+ - **Wavve Blue Bright** (`#3A6CFF`): Hover / focused-on-TV variant of the brand blue.
41
+ - **Wavve Blue Deep** (`#0E3FCC`): Pressed state.
42
+
43
+ ### Surfaces (Dark Blue Theme)
44
+ - **Canvas Midnight** (`#0A0E1A`): Page background — the deep blue-black base behind every row (a blue-tinted near-black, not pure `#000000`).
45
+ - **Surface Raised 1** (`#141A2B`): Cards, panels, settings surfaces. One step above the canvas.
46
+ - **Surface Raised 2** (`#1F2742`): Dropdowns, hovered rows, modal sheets, icon-button surfaces.
47
+
48
+ ### Text (on Dark Blue)
49
+ - **Text Primary** (`#FFFFFF`): Titles, primary labels, active nav.
50
+ - **Text Secondary** (`#A7AEC0`): Metadata, inactive labels, episode/runtime info (blue-tinted gray).
51
+ - **Text Tertiary** (`#6B7286`): Disabled labels, fine print, low-emphasis captions.
52
+
53
+ ### Borders & Dividers
54
+ - **Divider** (`rgba(255,255,255,0.08)`): Hairline separators on dark blue.
55
+ - **Input Border** (`rgba(255,255,255,0.16)`): Default input outline; brightens toward white / brand blue on focus.
56
+
57
+ ### Genre / Secondary Accents
58
+ - **Genre tints** (from the rebrand): a set of secondary colors "from daytime to midnight" applied to genre rows and 3D content icons for variety — applied as tints/icon fills, never overriding the blue interactive role.
59
+
60
+ ### Semantic
61
+ - **Live / On-air** (`#F5444C`): Live-TV red dot — the one warm exception, reserved for live broadcast indicators.
62
+ - **Success** (`#2BC56F`): Download-complete, subscription-confirmed (used sparingly).
63
+ - **Warning / Error** (`#FF7A45`): Playback errors, payment failures — kept distinct from the brand blue.
64
+
65
+ ## 3. Typography Rules
66
+
67
+ ### Font Family
68
+ - **Primary**: `Pretendard, "Apple SD Gothic Neo", "Malgun Gothic", -apple-system, BlinkMacSystemFont, "Noto Sans KR", sans-serif`
69
+ - **Brand surfaces**: a custom branded face may appear in marketing/logo lockups
70
+ - **Numerals**: tabular-friendly for runtime, episode counts, ratings
71
+
72
+ ### Hierarchy
73
+
74
+ | Role | Size | Weight | Line Height | Use |
75
+ |------|------|--------|-------------|-----|
76
+ | Billboard Title | 32–40px | 700 | 1.25 | Hero/billboard title (image-overlaid) |
77
+ | Section Heading | 20–22px | 700 | 1.35 | Row headers (오늘의 인기, 실시간 TV) |
78
+ | Card Title | 15–16px | 600 | 1.4 | Poster captions, list titles |
79
+ | Body | 14px | 400 | 1.5 | Synopsis, descriptions |
80
+ | Label / CTA | 15px | 600 | 1.4 | Play/subscribe button, tabs |
81
+ | Caption | 12px | 400 | 1.4 | Metadata (연도 · 장르 · 등급), runtime |
82
+ | Live Label | 12px | 700 | 1.4 | LIVE / 실시간 indicators |
83
+
84
+ ### Conventions
85
+ - **700 for titles, 600 for CTAs, 400 for body** — restrained three-weight rhythm on a dark canvas.
86
+ - **White is primary, blue-gray is hierarchy** — emphasis steps `#FFFFFF` → `#A7AEC0` → `#6B7286`.
87
+ - **Numbers as metadata** — runtime, episode counts, and ratings rendered tabular-friendly at caption size.
88
+ - **Sentence-case, no all-caps** — Korean and Latin both, except the `LIVE` indicator.
89
+
90
+ ## 4. Component Stylings
91
+
92
+ Wavve publishes no public component spec; geometry below follows the documented blue-led dark-theme direction + standard OTT conventions. Treat as conventional, brand blue as the verified anchor.
93
+
94
+ ### Buttons
95
+
96
+ **Primary CTA (Play / Subscribe)**
97
+ - Background: `#1351F9`
98
+ - Text: `#FFFFFF`
99
+ - Border: none
100
+ - Radius: 6px
101
+ - Padding: 10px 20px
102
+ - Font: 15px / 600 / Pretendard
103
+ - Hover: background `#3A6CFF`
104
+ - Pressed: background `#0E3FCC`
105
+ - Disabled: background `rgba(19,81,249,0.4)`, text `rgba(255,255,255,0.6)`
106
+ - Use: 재생, 구독하기, 지금 시청 — the primary blue action. ~40px tall.
107
+
108
+ **Secondary / Ghost (on dark)**
109
+ - Background: `rgba(255,255,255,0.10)`
110
+ - Text: `#FFFFFF`
111
+ - Border: 1px solid `rgba(255,255,255,0.24)`
112
+ - Radius: 6px
113
+ - Padding: 10px 20px
114
+ - Font: 15px / 600 / Pretendard
115
+ - Use: 찜하기, 더보기, secondary actions on detail overlays
116
+
117
+ **Icon Button (on dark)**
118
+ - Background: `rgba(255,255,255,0.10)`
119
+ - Text: `#FFFFFF`
120
+ - Border: none
121
+ - Radius: 50%
122
+ - Size: ~40px circle
123
+ - Use: Carousel chevrons, modal close, player controls
124
+
125
+ ### Inputs
126
+
127
+ **Text Field (dark)**
128
+ - Background: `rgba(255,255,255,0.06)`
129
+ - Text: `#FFFFFF`
130
+ - Border: 1px solid `rgba(255,255,255,0.16)`
131
+ - Radius: 6px
132
+ - Padding: 12px 14px
133
+ - Font: 15px / 400 / Pretendard
134
+ - Placeholder: `#A7AEC0`
135
+ - Focus: border `#1351F9`
136
+ - Error: border `#FF7A45`
137
+ - Use: Login email/password, search field
138
+
139
+ ### Cards
140
+
141
+ **Poster Card**
142
+ - Background: transparent (image fills)
143
+ - Border: none
144
+ - Radius: 6px
145
+ - Aspect: 2:3 poster (or 16:9 for VOD/clip rows)
146
+ - Hover: scale ~1.05 + title/metadata overlay fade-in + brand-blue progress bar if partially watched
147
+ - Use: The atomic browse unit — the art is the card, chrome stays off it
148
+
149
+ **Surface Card (settings / account)**
150
+ - Background: `#141A2B`
151
+ - Border: none
152
+ - Radius: 10px
153
+ - Padding: 20px
154
+ - Use: Account, billing, settings panels on the dark blue canvas
155
+
156
+ ### Badges / Chips
157
+
158
+ **Genre / Tag Chip**
159
+ - Background: `rgba(255,255,255,0.10)`
160
+ - Text: `#FFFFFF`
161
+ - Border: none
162
+ - Radius: 999px
163
+ - Padding: 4px 12px
164
+ - Font: 12px / 500 / Pretendard
165
+ - Active: `#1351F9` bg + white text
166
+ - Use: Genre filters, mood tags
167
+
168
+ **LIVE Badge**
169
+ - Background: `#F5444C`
170
+ - Text: `#FFFFFF`
171
+ - Border: none
172
+ - Radius: 4px
173
+ - Padding: 1px 6px
174
+ - Font: 11px / 700 / Pretendard
175
+ - Use: 실시간 TV / live-broadcast indicator — the one warm-red exception
176
+
177
+ ### Tabs / Nav
178
+
179
+ **Top Nav Item**
180
+ - Active text: `#FFFFFF`
181
+ - Inactive text: `#A7AEC0`
182
+ - Indicator: 2px `#1351F9` underline (active) or weight shift
183
+ - Font: 15px / 500 / Pretendard
184
+ - Use: 홈 / 드라마 / 예능 / 영화 / 실시간 switcher
185
+
186
+ ### Progress
187
+
188
+ **Continue-Watching Bar**
189
+ - Track: `rgba(255,255,255,0.24)`
190
+ - Fill: `#1351F9`
191
+ - Height: 3px
192
+ - Radius: 999px
193
+ - Use: Watched-progress bar at the bottom of poster cards — the blue is the "you're N% in" signal
194
+
195
+ ### Toasts
196
+
197
+ **Snackbar**
198
+ - Background: `#1F2742`
199
+ - Text: `#FFFFFF`
200
+ - Border: none
201
+ - Radius: 8px
202
+ - Padding: 12px 16px
203
+ - Shadow: `0px 4px 16px rgba(0,0,0,0.4)`
204
+ - Font: 14px / 500 / Pretendard
205
+ - Use: "찜 목록에 추가했어요" transient feedback, 3s auto-dismiss
206
+
207
+ ### Dialogs
208
+
209
+ **Modal**
210
+ - Background: `#141A2B`
211
+ - Text: `#FFFFFF`
212
+ - Border: none
213
+ - Radius: 12px
214
+ - Padding: 24px
215
+ - Backdrop: `rgba(0,0,0,0.7)`
216
+ - Use: Login, plan selection, "이 작품 정보"
217
+
218
+ ---
219
+
220
+ **Verified:** 2026-05-27
221
+ **Tier 1 sources:** wavve.com (WebFetch 2026-05-27 returned minimal markup — confirmed Wavve OTT dark-theme positioning; no token doc exposed). Documented rebrand direction (BAT / Brds.life case studies): "deep blue background to minimize optic fatigue, brand blue as point color, secondary colors from daytime to midnight, 3D genre icons." Brand blue `#1351F9` is brief-provided, consistent with the documented blue-led system. Operated by Wavve (SK Telecom + terrestrial broadcasters; oksusu + POOQ merger).
222
+ **Tier 2 sources:** getdesign.md/wavve — not checked. styles.refero.design — not checked.
223
+ **Conflicts unresolved:** No live computed-style token inspection (wavve.com returned minimal markup, likely client-rendered behind auth). All §4 component values + the dark-blue surface scale are flagged conventional; brand blue `#1351F9` is the one verified anchor. A future UPDATE pass with browser inspection (logged-in browse surface) should re-confirm component geometry and the exact midnight-blue canvas hex.
224
+
225
+ ## 5. Layout Principles
226
+
227
+ ### Page Structure
228
+ - Full-bleed dark blue canvas; billboard hero up top, then horizontal poster carousels stacked vertically
229
+ - Max content width (~1280px) for rows; rows scroll horizontally beyond the fold
230
+ - Top nav (~64px) translucent-to-solid on scroll
231
+
232
+ ### Spacing
233
+ - Base unit 8px; common values 4 / 8 / 12 / 16 / 24 / 32
234
+ - Row gutter ~12px between posters; ~32px vertical between content rows
235
+ - Page h-padding ~40px desktop, 16px mobile
236
+
237
+ ### Density
238
+ Wavve is **media-dense, chrome-sparse** — posters pack tightly (6–8 per desktop row) while text chrome stays minimal on the blue field. Title-detail and player surfaces open up with more breathing room around synopsis, cast, and controls.
239
+
240
+ ### Border Radius Scale
241
+ - Tight (4px): LIVE badge
242
+ - Standard (6px): buttons, inputs, poster cards
243
+ - Soft (8px): snackbars
244
+ - Comfortable (10–12px): surface cards, modals
245
+ - Pill (999px): chips, progress bar
246
+ - Circle (50%): icon buttons, avatars
247
+
248
+ ## 6. Depth & Elevation
249
+
250
+ On a dark blue canvas, Wavve communicates depth through **surface lightness, not shadow**.
251
+
252
+ | Level | Treatment | Use |
253
+ |-------|-----------|-----|
254
+ | Base | `#0A0E1A` | Page canvas |
255
+ | Raised 1 | `#141A2B` | Cards, panels, modals |
256
+ | Raised 2 | `#1F2742` | Dropdowns, hovered rows, icon-button surfaces, snackbars |
257
+ | Modal | `#141A2B` + `rgba(0,0,0,0.7)` backdrop | Dialogs, plan sheets |
258
+
259
+ Drop shadows are mostly absent — on a dark blue field they'd barely register. The poster-hover scale (~1.05) plus a bottom title-overlay gradient (`linear-gradient(transparent, rgba(10,14,26,0.9))`) is the only lift the catalog needs. Brand blue glows (focus rings, progress) read as the interactive "light" on the dark blue surface.
260
+
261
+ ## 7. Do's and Don'ts
262
+
263
+ ### Do
264
+ - Use `#1351F9` for the one primary interactive element per surface — play, subscribe, active tab, progress
265
+ - Keep the canvas deep midnight blue (`#0A0E1A`) and let poster art supply the color
266
+ - Step hierarchy through the blue-gray scale (`#FFFFFF` → `#A7AEC0` → `#6B7286`)
267
+ - Use the brand-blue progress bar to signal continue-watching state
268
+ - Reserve the warm red strictly for the LIVE / 실시간 indicator
269
+
270
+ ### Don't
271
+ - Don't use pure black (`#000000`) — the canvas is a deep blue, that's the brand
272
+ - Don't introduce a second saturated interactive hue competing with the blue
273
+ - Don't put drop shadows or borders on poster cards — the gutter separates them
274
+ - Don't let the warm red bleed beyond live indicators into general UI
275
+ - Don't crowd the title-detail / player — those surfaces need breathing room
276
+
277
+ ## 8. Responsive Behavior
278
+
279
+ ### Breakpoints
280
+ | Name | Width | Key Changes |
281
+ |------|-------|-------------|
282
+ | Mobile | <768px | ~2.5 posters per row (peeking the next), bottom tab nav |
283
+ | Tablet | 768–1024px | ~4 posters per row, condensed top nav |
284
+ | Desktop / TV | >1024px | 6–8 per row, full top nav, max ~1280px; TV adds large focus rings in brand blue |
285
+
286
+ ### Touch & Media
287
+ - Poster cards are the primary target; min ~44px controls
288
+ - Horizontal carousels swipeable on touch, chevron-driven on desktop hover, D-pad focus on TV
289
+ - Billboard uses full-bleed autoplay trailer (muted/poster fallback on mobile)
290
+
291
+ ### Image Behavior
292
+ - Posters: 2:3, `object-fit: cover`, lazy-loaded
293
+ - Billboards / VOD: 16:9 with bottom blue-tinted gradient for title legibility
294
+
295
+ ## 9. Agent Prompt Guide
296
+
297
+ ### Quick Color Reference
298
+ - Primary CTA / active / progress: Wavve Blue `#1351F9` (hover `#3A6CFF`, pressed `#0E3FCC`)
299
+ - Canvas: Midnight `#0A0E1A`; raised `#141A2B` / `#1F2742`
300
+ - Text: primary `#FFFFFF`; secondary `#A7AEC0`; tertiary `#6B7286`
301
+ - Input border `rgba(255,255,255,0.16)`, focus `#1351F9`
302
+ - LIVE: `#F5444C`; success `#2BC56F`; error `#FF7A45`
303
+
304
+ ### Example Component Prompts
305
+ - "Build a Wavve play button: bg `#1351F9`, white 15px/600 text, 6px radius, 10px 20px padding, ~40px tall. Hover bg `#3A6CFF`, pressed `#0E3FCC`. No shadow."
306
+ - "Create a Wavve poster row: deep midnight-blue `#0A0E1A` bg, horizontal carousel of 2:3 poster cards (6px radius, no border, ~12px gutter). On hover scale 1.05 + bottom gradient `linear-gradient(transparent, rgba(10,14,26,0.9))` with title (16px/600 white). Partially-watched cards show a 3px `#1351F9` progress fill on a `rgba(255,255,255,0.24)` track at the bottom."
307
+ - "Design a Wavve dark text field: bg `rgba(255,255,255,0.06)`, 1px border `rgba(255,255,255,0.16)`, 6px radius, white 15px text, placeholder `#A7AEC0`. Focus border `#1351F9`. Error border `#FF7A45`."
308
+ - "Create a LIVE badge: bg `#F5444C`, white 11px/700 `LIVE`, 4px radius, 1px 6px padding — for 실시간 TV only."
309
+
310
+ ### Iteration Guide
311
+ 1. Blue `#1351F9` = play/subscribe/active/progress only
312
+ 2. Canvas is deep midnight blue `#0A0E1A`, never pure black
313
+ 3. Pretendard / Korean stack, white-on-dark-blue
314
+ 4. Hierarchy through the blue-gray scale before weight
315
+ 5. Radius: 4px LIVE, 6px buttons/posters, 10–12px surfaces/modals, pill chips/progress
316
+ 6. No shadows on dark — layer surface lightness; red is LIVE-only
317
+
318
+ ---
319
+
320
+ ## 10. Voice & Tone
321
+
322
+ Wavve speaks like a relaxed friend recommending what to watch tonight — warm, easygoing, second-person, never pushy. The default register is soft-polite `해요체` (`찜 목록에 추가했어요`, `이어서 볼까요?`), the friendly-but-respectful Korean ending, never stiff `~습니다` except in billing/legal copy. Korean is the unquestioned primary voice; English appears in title names and the wordmark. The copy is about *tonight*, *what you were watching*, *what's on live now* — the easy ritual of settling into the evening.
323
+
324
+ | Context | Tone |
325
+ |---|---|
326
+ | CTAs | Short Korean verb (`재생`, `구독하기`, `지금 시청`, `이어보기`). |
327
+ | Continue-watching | Inviting, second person (`이어서 볼까요?`, `보던 작품 이어보기`). |
328
+ | Success toasts | Past-tense single sentence, soft ending (`찜 목록에 추가했어요`). No emoji on system chrome. |
329
+ | Live nudges | Calm immediacy (`지금 실시간으로 방송 중이에요`). |
330
+ | Error messages | Blameless, specific, one action (`재생할 수 없어요. 잠시 후 다시 시도해 주세요`). Never `오류가 발생했습니다`. |
331
+ | Empty states | Warm + one action (`아직 찜한 작품이 없어요. 마음에 드는 작품을 담아보세요`). |
332
+ | Billing / legal | Formal `합니다` register — the single exception. |
333
+
334
+ **Forbidden phrases.** `오류가 발생했습니다` (generic error), exclamation-as-pressure on CTAs (`지금 구독하세요!` → `구독하기`), marketing superlatives on chrome, English-first strings on Korean surfaces, emoji on system toasts.
335
+
336
+ **Voice samples.**
337
+ - `재생` / `지금 시청` — common OTT play CTA pattern. <!-- illustrative: follows standard OTT play CTA; wavve.com returned minimal markup, not verified verbatim -->
338
+ - `이어서 볼까요?` — illustrative continue-watching prompt. <!-- illustrative: follows the continue-watching ritual; not verified verbatim -->
339
+ - `찜 목록에 추가했어요` — illustrative watchlist-saved toast. <!-- illustrative: not verified as live copy -->
340
+ - `지금 실시간으로 방송 중이에요` — illustrative live-nudge copy. <!-- illustrative: not verified verbatim -->
341
+
342
+ ## 11. Brand Narrative
343
+
344
+ Wavve (웨이브) launched in **September 2019** from the merger of **SK Telecom's oksusu** and **POOQ** — the joint streaming platform of Korea's terrestrial broadcasters (KBS, MBC, SBS). That lineage is the brand's whole position: where global OTTs compete on original spend and catalog size, Wavve is the *Korean* streaming home — the place for Korean drama, variety/예능, news, and, crucially, **live terrestrial and cable TV** alongside on-demand. The "실시간 TV" tab and the LIVE indicator aren't afterthoughts; they're the heritage.
345
+
346
+ The design follows from the name. A "wave" carried into "midnight" became a literal blue identity: a deep blue canvas to ride into the evening's viewing, with a bright brand blue `#1351F9` as the point color that catches your eye and carries legibility. The rebrand explicitly built a blue system that "responds to multiple screens including dark mode," added secondary colors "inspired by colors from daytime to midnight," and a set of 3D genre icons to keep the blue spine varied across drama, variety, film, and live. The result is an OTT that feels calmer and bluer than the louder red incumbents — Korean evening television, reimagined as an immersive blue stream.
347
+
348
+ What Wavve refuses: the near-pure-black, originals-first maximalism of the global giants (Wavve keeps a warmer, bluer, live-TV-inclusive identity), and the cold gray of legacy IPTV menus. It's a blue tide you settle into at night, with the live channel always one tab away.
349
+
350
+ ## 12. Principles
351
+
352
+ 1. **Blue all the way down.** The deep blue canvas and the bright brand blue are one identity, not a theme toggle. *UI implication:* canvas is `#0A0E1A` (never pure black); `#1351F9` is the sole interactive accent.
353
+ 2. **The catalog is the light.** Poster and billboard art supply the color; chrome recedes. *UI implication:* no borders/shadows on poster cards; white-gray text on the blue field.
354
+ 3. **Live is heritage.** Real-time terrestrial/cable TV is core, not a bolt-on. *UI implication:* keep 실시간 TV prominent; reserve the warm red strictly for the LIVE indicator.
355
+ 4. **Continue, don't restart.** Evening viewing is a resumed ritual. *UI implication:* surface continue-watching with the brand-blue progress bar; lead with "이어보기."
356
+ 5. **Calm over loud.** Wavve is the bluer, quieter alternative to red-billboard OTTs. *UI implication:* restrained motion (crossfades over slides), no exclamation pressure, confidence through calm.
357
+ 6. **One accent, one job.** The blue means interactive/for-you/in-progress. *UI implication:* never use brand blue as decoration; a second saturated hue is forbidden on browse.
358
+
359
+ ## 13. Personas
360
+
361
+ *Personas are fictional archetypes informed by publicly described Korean OTT user segments, not individual people.*
362
+
363
+ **현지 (Hyun-ji), 31, Seoul.** Watches Korean dramas and 예능 every evening. Uses Wavve specifically for fast access to terrestrial broadcaster content and the occasional live broadcast. Resumes from continue-watching nightly, judging the blue progress bar at a glance.
364
+
365
+ **태영 (Tae-young), 45, Daejeon.** Sports and news viewer. Wavve's 실시간 TV tab is why he subscribes — live channels in one app, no separate IPTV remote. Picks by what's on now, not by browsing the VOD grid.
366
+
367
+ **유나 (Yu-na), 24, Gwangju.** Casual binge-watcher on mobile. Came for a buzzy Korean original/exclusive, stayed for the easy continue-watching flow. Browses posters in bed, peeking the next card in each row, taps the blue 재생.
368
+
369
+ ## 14. States
370
+
371
+ | State | Treatment |
372
+ |---|---|
373
+ | **Empty (no watchlist)** | Single `#A7AEC0` warm line (`아직 찜한 작품이 없어요`) + one brand-blue CTA (`작품 둘러보기`). No clutter on the blue canvas. |
374
+ | **Empty (search no results)** | Single `#A7AEC0` caption (`검색 결과가 없어요`). No spammy suggestions. |
375
+ | **Loading (browse first paint)** | Poster-shaped skeleton blocks at `#141A2B` with a subtle shimmer toward `#1F2742`, layout-matched to rows. |
376
+ | **Loading (playback buffer)** | Centered ring spinner in `#1351F9` over the dimmed player; existing chrome stays. |
377
+ | **Error (playback)** | Centered `#FFFFFF` line (`재생할 수 없어요. 잠시 후 다시 시도해 주세요`) + ghost retry. Warm `#FF7A45` reserved for the icon. |
378
+ | **Error (inline field)** | Input border switches to `#FF7A45`, caption below in `#FF7A45` 12px, one actionable sentence. |
379
+ | **Success (watchlist saved)** | Snackbar `#1F2742` white text (`찜 목록에 추가했어요`), 3s auto-dismiss. |
380
+ | **Success (subscribed)** | Dedicated confirmation surface — blue checkmark, plan name + next-billing date, single `확인`. |
381
+ | **Skeleton** | `#141A2B` blocks at exact poster dimensions, 6px radius, ~1.2s shimmer to `#1F2742`. |
382
+ | **Disabled (button)** | Brand-blue CTA → bg `rgba(19,81,249,0.4)`, text `rgba(255,255,255,0.6)`. Geometry unchanged. |
383
+
384
+ ## 15. Motion & Easing
385
+
386
+ Wavve's motion is calm and cinematic — slow fades and gentle scales that suit settling into an evening, never bounce.
387
+
388
+ **Durations:**
389
+
390
+ | Token | Value | Use |
391
+ |---|---|---|
392
+ | `motion-instant` | 0ms | Toggle/checkbox flips |
393
+ | `motion-fast` | 150ms | Hover lift, button press, chip select |
394
+ | `motion-standard` | 250ms | Poster hover scale, row reveal, modal open |
395
+ | `motion-slow` | 400ms | Billboard crossfade, page-to-detail / player transition |
396
+
397
+ **Easings:**
398
+
399
+ | Token | Curve | Use |
400
+ |---|---|---|
401
+ | `ease-standard` | `cubic-bezier(0.4, 0, 0.2, 1)` | Default — most motion |
402
+ | `ease-enter` | `cubic-bezier(0.0, 0.0, 0.2, 1)` | Modals, sheets, toasts appearing |
403
+ | `ease-exit` | `cubic-bezier(0.4, 0.0, 1, 1)` | Dismissals |
404
+
405
+ **Spring stance.** Spring/overshoot is avoided — Wavve is a calm blue evening stream; kinetic bounce would undercut the immersive mood.
406
+
407
+ **Signature motions.**
408
+ 1. **Poster hover.** Card scales `1.0 → 1.05` over `motion-standard / ease-standard` while a bottom blue-tinted gradient + title overlay fades in, and any continue-watching progress bar glows brand blue. No shadow pulse.
409
+ 2. **Billboard crossfade.** Hero trailers/posters crossfade over `motion-slow / ease-standard`, never slide — a crossfade reads as a cinema dissolve into the evening.
410
+ 3. **Live pulse.** The LIVE `#F5444C` dot pulses gently (opacity 1.0 ↔ 0.6) on a slow loop — the one warm, kinetic signal, marking what's broadcasting now.
411
+ 4. **Reduce motion.** Under `prefers-reduced-motion: reduce`, scales and crossfades collapse to instant opacity changes; the live pulse becomes static; shimmer skeletons become static `#141A2B`. No exceptions.
412
+
413
+ <!--
414
+ OmD v0.1 Sources — Philosophy Layer (sections 10–15)
415
+
416
+ Tier 1 (UI tokens, §1–9): wavve.com WebFetch 2026-05-27 returned minimal markup
417
+ (client-rendered / behind auth) — no live computed-style inspection possible.
418
+ Brand blue `#1351F9` is brief-provided, consistent with the documented rebrand.
419
+ Dark-blue direction confirmed via rebrand case studies (BAT / Brds.life):
420
+ "deep blue background to minimize optic fatigue, brand blue as point color,
421
+ secondary colors from daytime to midnight, 3D genre icons." All §4 component
422
+ values + the midnight-blue surface scale are CONVENTIONAL (documented blue-led
423
+ dark-theme direction + standard OTT norms), flagged in the §4 footer; brand
424
+ blue is the one verified anchor.
425
+
426
+ Tier 2 (founding/narrative): Wavve launched Sept 2019 from the SK Telecom
427
+ oksusu + POOQ (KBS/MBC/SBS terrestrial) merger; live terrestrial/cable TV
428
+ (실시간 TV) is core heritage alongside VOD. Wikipedia / general industry
429
+ knowledge for the merger history.
430
+
431
+ Voice samples: all four (`재생`/`지금 시청`, `이어서 볼까요?`, `찜 목록에
432
+ 추가했어요`, `지금 실시간으로 방송 중이에요`) are ILLUSTRATIVE patterns
433
+ following Wavve's `해요체` register and continue-watching / live-TV positioning
434
+ — NOT verified verbatim (site returned minimal markup).
435
+
436
+ Personas (§13) are fictional archetypes. Any resemblance to specific users is
437
+ unintended.
438
+ -->