oh-my-design-cli 1.6.0 → 1.6.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 (81) hide show
  1. package/AGENTS.md +1 -1
  2. package/README.ko.md +12 -0
  3. package/README.md +49 -0
  4. package/data/reference-fingerprints.json +957 -2
  5. package/dist/bin/oh-my-design.js +4 -3
  6. package/dist/bin/oh-my-design.js.map +1 -1
  7. package/dist/{install-skills-IETT2TBJ.js → install-skills-6QFSN5BN.js} +108 -42
  8. package/dist/install-skills-6QFSN5BN.js.map +1 -0
  9. package/package.json +9 -3
  10. package/scripts/postinstall.cjs +6 -6
  11. package/skills/claude-design/SKILL.md +385 -0
  12. package/skills/claude-design/references/claude-design-flow.md +425 -0
  13. package/skills/claude-design/references/codebase-analysis.md +373 -0
  14. package/skills/claude-design/scripts/analyze_codebase.py +1369 -0
  15. package/skills/claude-design/scripts/clickable_link.sh +48 -0
  16. package/skills/claude-design/scripts/collect_source.py +178 -0
  17. package/skills/claude-design/scripts/drive_claude_design.cjs +378 -0
  18. package/skills/claude-design/scripts/gather_references.py +437 -0
  19. package/web/references/91app/DESIGN.md +151 -0
  20. package/web/references/airtable/DESIGN.md +16 -2
  21. package/web/references/bithumb/DESIGN.md +170 -0
  22. package/web/references/bunjang/DESIGN.md +20 -1
  23. package/web/references/cakeresume/DESIGN.md +162 -0
  24. package/web/references/catchtable/DESIGN.md +19 -0
  25. package/web/references/classting/DESIGN.md +251 -0
  26. package/web/references/classum/DESIGN.md +19 -0
  27. package/web/references/coinone/DESIGN.md +218 -0
  28. package/web/references/dabang/DESIGN.md +19 -0
  29. package/web/references/devsisters/DESIGN.md +253 -0
  30. package/web/references/dji/DESIGN.md +0 -1
  31. package/web/references/drnow/DESIGN.md +331 -0
  32. package/web/references/fastcampus/DESIGN.md +19 -0
  33. package/web/references/flex/DESIGN.md +19 -0
  34. package/web/references/flo/DESIGN.md +306 -0
  35. package/web/references/fugle/DESIGN.md +250 -0
  36. package/web/references/gmarket/DESIGN.md +19 -0
  37. package/web/references/gogolook/DESIGN.md +131 -0
  38. package/web/references/grip/DESIGN.md +250 -0
  39. package/web/references/hahow/DESIGN.md +158 -0
  40. package/web/references/hogangnono/DESIGN.md +308 -0
  41. package/web/references/hyundaicard/DESIGN.md +177 -0
  42. package/web/references/inflearn/DESIGN.md +19 -0
  43. package/web/references/jkopay/DESIGN.md +249 -0
  44. package/web/references/jobkorea/DESIGN.md +310 -0
  45. package/web/references/kbank/DESIGN.md +18 -0
  46. package/web/references/kdan/DESIGN.md +160 -0
  47. package/web/references/kkbox/DESIGN.md +114 -0
  48. package/web/references/krafton/DESIGN.md +230 -0
  49. package/web/references/kream/DESIGN.md +18 -0
  50. package/web/references/laftel/DESIGN.md +253 -0
  51. package/web/references/lezhin/DESIGN.md +301 -0
  52. package/web/references/lunit/DESIGN.md +19 -0
  53. package/web/references/melon/DESIGN.md +153 -0
  54. package/web/references/momoshop/DESIGN.md +279 -0
  55. package/web/references/mustit/DESIGN.md +282 -0
  56. package/web/references/nhncloud/DESIGN.md +174 -0
  57. package/web/references/oliveyoung/DESIGN.md +19 -0
  58. package/web/references/payco/DESIGN.md +227 -0
  59. package/web/references/piccollage/DESIGN.md +277 -0
  60. package/web/references/rayark/DESIGN.md +132 -0
  61. package/web/references/riiid/DESIGN.md +228 -0
  62. package/web/references/sendbird/DESIGN.md +285 -0
  63. package/web/references/socar/DESIGN.md +18 -0
  64. package/web/references/toss-securities/DESIGN.md +19 -0
  65. package/web/references/trenbe/DESIGN.md +252 -0
  66. package/web/references/tving/DESIGN.md +18 -0
  67. package/web/references/upbit/DESIGN.md +19 -0
  68. package/web/references/upstage/DESIGN.md +18 -0
  69. package/web/references/velog/DESIGN.md +168 -0
  70. package/web/references/voicetube/DESIGN.md +227 -0
  71. package/web/references/wadiz/DESIGN.md +19 -0
  72. package/web/references/webflow/DESIGN.md +16 -2
  73. package/web/references/yeogiotte/DESIGN.md +19 -0
  74. package/data/architecture-proposals/2026-05-13-thin-install-fresh-fetch.md +0 -189
  75. package/data/issues/2026-05-13-multi-surface-schema-rfc.md +0 -67
  76. package/data/reference-audits/2026-05-13-kr10.md +0 -132
  77. package/data/reference-audits/2026-05-14-kr10.md +0 -72
  78. package/data/reference-audits/2026-05-15-kr10.md +0 -124
  79. package/data/research/2026-05-18-agent-landscape.md +0 -69
  80. package/data/research/2026-05-18-kr-style-presets.md +0 -572
  81. package/dist/install-skills-IETT2TBJ.js.map +0 -1
@@ -0,0 +1,308 @@
1
+ ---
2
+ id: hogangnono
3
+ name: "Hogangnono"
4
+ country: KR
5
+ category: consumer-tech
6
+ homepage: "https://hogangnono.com"
7
+ primary_color: "#584de4"
8
+ logo:
9
+ type: favicon
10
+ slug: "https://www.google.com/s2/favicons?domain=hogangnono.com&sz=256"
11
+ verified: "2026-06-03"
12
+ omd: "0.1"
13
+ ---
14
+
15
+ # Hogangnono
16
+
17
+ Korea's #1 apartment real-estate transparency platform — map-first, data-honest, free of paid-listing distortion.
18
+
19
+ ## 1. Visual Theme & Atmosphere
20
+
21
+ Hogangnono pairs a bold indigo-violet primary with a crisp, predominantly white canvas to signal data-clarity and trustworthiness. The palette is deliberately restrained: brand purple carries every interactive affordance while the neutral grayscale hierarchy handles all structural content, keeping the map and price data visually dominant. The overall feel is pragmatic and modern — closer to a civic data tool than a lifestyle product — with subtle elevation (gentle card shadows, a floating map-control layer) and minimal decorative flourish. Typography is set exclusively in Pretendard, giving the interface a contemporary Korean-web character without heavy ornamentation. Motion is conservative: 0.3 s transitions on colour and transform keep the product feeling responsive without distracting from data-dense screens.
22
+
23
+ ## 2. Color Palette & Roles
24
+
25
+ - **Primary:** `#584de4` — interactive elements, primary CTA fill, focus rings, active filter borders, links
26
+ - **Primary Variant (Nav):** `#4d55b2` — legacy navigation bar background, list headers, browser scene header
27
+ - **Primary Tint:** `#f3f4fc` — tint button background, selected-state surface, light hover wash
28
+ - **Primary Light:** `#eeedfc` — primary100, subtle chip backgrounds, info chip fills
29
+ - **Gray 900:** `#333333` — primary body text, headings
30
+ - **Gray 800:** `#4F4F4F` — secondary text, icon default
31
+ - **Gray 700:** `#6E6E6E` — tertiary / caption text
32
+ - **Gray 500:** `#B3B3B3` — placeholder, disabled text
33
+ - **Gray 300:** `#E5E5E5` — dividers, border default
34
+ - **Gray 200:** `#F3F3F3` — chip default background, subtle fills
35
+ - **Gray 100:** `#F9F9F9` — page background, list row alternates
36
+ - **White:** `#ffffff` — card surface, input background
37
+ - **Blue:** `#3E8CE8` — informational highlights, loan/financial accent
38
+ - **Green:** `#3DAB6A` — positive / up-trend price indicator
39
+ - **Red / Destructive:** `#EE3A3A` — negative / down-trend price, error state
40
+ - **Price Accent:** `#4337de` — apartment listing price text (high-contrast deep indigo)
41
+
42
+ ## 3. Typography Rules
43
+
44
+ - **Typeface:** Pretendard (primary); fallback Apple SD Gothic Neo → NanumGothic → sans-serif
45
+ - **Base body:** 16px / 400 / line-height 1.3
46
+ - **Large modal heading:** 30px / 700 / line-height 40px
47
+ - **Section heading:** 18–22px / 600–700
48
+ - **List item title:** 15–17px / 600
49
+ - **Body / description:** 14–16px / 400
50
+ - **Caption / badge:** 11–13px / 400
51
+ - **Price display:** 19px / 500 in `#4337de`
52
+ - **Button (primary full):** 17px / default weight
53
+ - **Button (secondary tint):** 17px / default weight
54
+ - No custom letter-spacing override applied at root; tracking defaults to 0.
55
+
56
+ ## 4. Component Stylings
57
+
58
+ ### Primary Button
59
+
60
+ **Fill (default)**
61
+ - Background: `#584de4`
62
+ - Text: `#ffffff`
63
+ - Radius: 6px
64
+ - Height: 50px
65
+ - Font: 17px
66
+
67
+ **Fill Important (with shadow)**
68
+ - Background: `#584de4`
69
+ - Text: `#ffffff`
70
+ - Radius: 6px
71
+ - Height: 50px
72
+ - Font: 17px
73
+ - Shadow: 0 4px 5px 0 rgba(89, 99, 217, 0.3)
74
+
75
+ **Disabled**
76
+ - Background: `#f0f0f0`
77
+ - Text: `#dadada`
78
+ - Radius: 6px
79
+ - Height: 50px
80
+
81
+ ### Secondary / Tint Button
82
+
83
+ **Tint (modal secondary)**
84
+ - Background: `#f3f4fc`
85
+ - Text: `#584de4`
86
+ - Radius: 6px
87
+ - Height: 50px
88
+ - Font: 17px
89
+
90
+ **Outline (empty)**
91
+ - Background: `#ffffff`
92
+ - Border: 0.5px solid `#cecfdc`
93
+ - Radius: 6px
94
+
95
+ ### Filter Chip
96
+
97
+ **Default**
98
+ - Background: `#ffffff`
99
+ - Border: 1px solid `#F3F3F3`
100
+ - Radius: 8px
101
+ - Height: 32px
102
+ - Font: 14px
103
+
104
+ **Active / Applied**
105
+ - Background: `#ffffff`
106
+ - Border: 1px solid `#584de4`
107
+ - Text: `#584de4`
108
+ - Radius: 8px
109
+ - Height: 32px
110
+ - Font: 14px
111
+
112
+ **Selected**
113
+ - Background: `#eef0f3`
114
+ - Border: 1px solid `#584de4`
115
+ - Text: `#584de4`
116
+ - Radius: 8px
117
+ - Height: 32px
118
+
119
+ ### Search Input
120
+
121
+ **Roundbox (map search)**
122
+ - Background: `#ffffff`
123
+ - Border: 1px solid `#CECFDC`
124
+ - Radius: 6px
125
+ - Height: 50px
126
+ - Font: 16px
127
+ - Padding: 0 15px
128
+
129
+ **Modal Input (login phone)**
130
+ - Background: `#ffffff`
131
+ - Border: 0
132
+ - Border-bottom: 2px solid `#e5e5e5`
133
+ - Height: 45px
134
+ - Font: 20px / 700
135
+ - Placeholder: `#dadada`
136
+ - Focus border-bottom: 2px solid `#584de4`
137
+
138
+ ### Apartment Detail Card
139
+
140
+ **Container**
141
+ - Background: `#ffffff`
142
+ - Border: 1px solid `#cecece`
143
+ - Radius: 3px
144
+ - Shadow: 0px 2px 2px rgba(0, 0, 0, 0.075)
145
+
146
+ **Price Text**
147
+ - Text: `#4337de`
148
+ - Font: 19px / 500
149
+
150
+ **Row Divider**
151
+ - Border-bottom: 1px solid `#f2f2f2`
152
+
153
+ ### Map Control Button
154
+
155
+ **Floating FAB**
156
+ - Background: `#ffffff`
157
+ - Radius: 4px
158
+ - Shadow: 4px 2px 12px 0px rgba(0, 0, 0, 0.24)
159
+ - Width: 38px
160
+ - Height: 38px
161
+ - Font: 14px
162
+
163
+ ---
164
+ **Verified:** 2026-06-03
165
+ **Tier 1 sources:** https://hogangnono.com (HTML, theme-color meta, inline emotion CSS); https://static.hogangnono.com/dist/2.5.0.30/08498da545/web/desktop.css (full desktop CSS bundle, :root custom properties); https://static.hogangnono.com/reset.desktop.css (reset + Pretendard font declarations); https://apps.apple.com/kr/app/호갱노노/id1084799742 (App Store listing, KR regional)
166
+ **Tier 2 sources:** getdesign.md/hogangnono — NOT LISTED (no data). refero — not checked (KR brand, negligible coverage expected).
167
+ **Conflicts unresolved:** theme-color meta (#4d55b2) differs from CSS --primary (#584de4); both are genuine — #4d55b2 is the darker legacy nav background, #584de4 is the design-system primary for interactive elements; documented as Primary Variant vs Primary.
168
+
169
+ ## 5. Layout Principles
170
+
171
+ - **Split-panel desktop:** fixed 354–375 px left panel (search + results list) + full-height map canvas on the right; no traditional responsive grid.
172
+ - **Panel interior:** vertical stack — search bar → filter chip strip (48 px) → scrollable result list.
173
+ - **Card list items:** 12 px vertical padding, 20 px horizontal, full-width with 1 px `#f2f2f2` bottom divider.
174
+ - **Modal overlay:** centred 510 px wide card with 35 px padding, 10 px radius, at 50 % viewport position.
175
+ - **Sidebar:** fixed-width notification centre; inner header 48 px tall.
176
+ - **Spacing unit:** 8 px base; gaps of 8 px between filter chips, 5 px margin between badge tags.
177
+
178
+ ## 6. Depth & Elevation
179
+
180
+ - **Level 0 — flat canvas:** white / gray-100 background, no shadow.
181
+ - **Level 1 — card / list panel:** `box-shadow: 0px 2px 2px rgba(0,0,0,0.075), -1px 1px 1px rgba(0,0,0,0.03), 1px 1px 1px rgba(0,0,0,0.03)` — subtle lift for the detail panel.
182
+ - **Level 2 — floating map controls:** `box-shadow: 4px 2px 12px 0px rgba(0,0,0,0.24)` — clearly raised FAB buttons over the map layer.
183
+ - **Level 3 — primary CTA (important):** `box-shadow: 0 4px 5px 0 rgba(89,99,217,0.3)` — coloured indigo shadow signals the most prominent action.
184
+ - **Level 4 — modal / overlay:** `background-color: #000; opacity: 0.3` scrim + centred white card; `z-index: 15`.
185
+ - **Tooltip:** dark `#3a3a3a` background, 5 px radius, `z-index: 20`.
186
+
187
+ ## 7. Do's and Don'ts
188
+
189
+ ### Do
190
+ - Use `#584de4` for all primary interactive states — buttons, links, active borders, focus indicators.
191
+ - Pair price data with `#4337de` (deep indigo) for sale prices, `#3DAB6A` for upward trends, `#EE3A3A` for downward trends.
192
+ - Keep the map canvas uncluttered; restrict non-essential UI to the side panel.
193
+ - Use Pretendard at 16 px / 400 for body copy and 17 px for button labels.
194
+ - Apply the 6 px radius to interactive pill buttons; use 8 px radius for header filter chips.
195
+ - Show skeleton/loading states for list items while data loads; never block the map.
196
+ - Use `#f3f4fc` tint backgrounds for secondary CTA buttons to maintain hierarchy under the primary fill.
197
+
198
+ ### Don't
199
+ - Don't use `#4d55b2` (nav variant) as the primary for new interactive elements — it is a legacy dark-mode nav colour.
200
+ - Don't add heavy decorative gradients or large hero images; the product is data-first.
201
+ - Don't place multiple filled-primary CTAs on the same screen; reserve the fill for a single dominant action.
202
+ - Don't use font-sizes below 11 px for any visible text.
203
+ - Don't override the filter chip radius to 0 px (that is reserved for the full-width bottom CTA only).
204
+ - Don't use the price-accent `#4337de` for non-price content; it will confuse the semantic colour signal.
205
+
206
+ ## 8. Responsive Behavior
207
+
208
+ - The desktop layout is a fixed-width split panel (354–375 px sidebar + map); it does not collapse to a fluid grid on narrow windows.
209
+ - The mobile app (iOS/Android) uses a bottom-sheet paradigm with full-screen map and a pull-up results list.
210
+ - Filter chip strip scrolls horizontally with hidden scrollbar (`overflow: scroll hidden; -webkit-scrollbar: none`).
211
+ - Map FAB controls reposition via absolute/fixed positioning relative to the map container; they do not reflow.
212
+ - Retina assets served via `(-webkit-min-device-pixel-ratio: 2)` media query switching sprite URLs.
213
+ - Modal overlay is fixed-position full viewport; the centred card is 510 px wide with pixel-perfect negative margins (no vw-based centering).
214
+
215
+ ## 9. Agent Prompt Guide
216
+
217
+ When generating UI for Hogangnono:
218
+ - **Primary action:** filled indigo button — `background #584de4; color #fff; border-radius 6px; height 50px; font-size 17px`.
219
+ - **Secondary action:** tint button — `background #f3f4fc; color #584de4; border-radius 6px; height 50px; font-size 17px`.
220
+ - **Filter chip (default):** `border 1px solid #F3F3F3; border-radius 8px; height 32px; font-size 14px; color #333333`.
221
+ - **Filter chip (active):** swap border and text to `#584de4`; keep same dimensions.
222
+ - **Price text:** `color #4337de; font-size 19px; font-weight 500`.
223
+ - **Body text:** `color #333333; font-size 16px; font-weight 400; font-family Pretendard`.
224
+ - **Card container:** `background #fff; border 1px solid #cecece; border-radius 3px; box-shadow 0px 2px 2px rgba(0,0,0,0.075)`.
225
+ - **Divider:** `border-bottom 1px solid #f2f2f2`.
226
+ - **Error / price-drop:** `color #EE3A3A`. **Success / price-rise:** `color #3DAB6A`.
227
+ - Keep layouts data-dense and map-adjacent; avoid lifestyle/hero photography patterns.
228
+
229
+ ## 10. Voice & Tone
230
+
231
+ **Three adjectives:** transparent, plain-spoken, user-protective
232
+
233
+ | Do | Don't |
234
+ |---|---|
235
+ | Use direct, factual language about prices and data | Use hype or emotional superlatives about property values |
236
+ | Acknowledge uncertainty where data is incomplete | Overstate confidence in market predictions |
237
+ | Speak on behalf of the buyer / renter | Frame content from the agent's or seller's perspective |
238
+ | Keep UI labels short and action-oriented | Use jargon-heavy real-estate terms without definition |
239
+
240
+ **Voice samples (illustrative):**
241
+ - *"이 단지의 최근 실거래가를 확인했어요. 시세보다 낮게 거래된 이력이 있으니 참고하세요."* (We checked the recent actual transaction prices for this complex. Note that there are historical sales below market rate.)
242
+ - *"호갱 되지 마세요 — 정확한 실거래 데이터로 비교하세요."* (Don't get ripped off — compare with accurate actual transaction data.)
243
+ - *"원하시는 조건을 설정하면 딱 맞는 매물을 찾아드릴게요."* (Set your conditions and we'll find exactly the right listing for you.)
244
+
245
+ ## 11. Brand Narrative
246
+
247
+ Hogangnono — literally "no more being a fool (호갱)" — was born in 2015 when Kakao developer Shim Sang-min discovered that Korea's property portals were listing phantom prices inflated by paid advertising, leaving buyers without reliable data for the most important financial decision of their lives. His team of three built the first version in weeks, pulling official transaction records from the Ministry of Land, Infrastructure and Transport and plotting every deal on a map. The name is both a promise and a provocation: honest information exists, and you deserve it.
248
+
249
+ From that anti-rip-off origin, Hogangnono evolved into Korea's most comprehensive proptech platform, layering 3D sunlight modelling, school-district mapping, reconstruction auction tracking, and resident reviews onto its price-transparency core. Acquired by Zigbang in 2018, it has retained its distinct identity and radical data-openness ethos while scaling to over 2 million registered users. The founder's stated mission — "advancing the real estate industry through IT by providing honest information" — remains the product's north star.
250
+
251
+ The brand's competitive edge is deliberate simplicity. Where legacy portals bury users in sponsored content, Hogangnono surfaces the single truth the buyer needs: what did this apartment actually sell for, and when? Every design decision — the prominent price display, the map-first layout, the refusal to accept payment for listings — flows from that original commitment to be the side of the user.
252
+
253
+ ## 12. Principles
254
+
255
+ 1. **Data honesty above commercial convenience.** Every number shown is an official transaction record, never an estimate or a sponsored suggestion. *UI implication:* price figures must use the dedicated price-accent colour (`#4337de`) and link directly to source data; never round or approximate displayed prices.
256
+
257
+ 2. **Simplicity is the feature.** Complex market data must be made immediately readable to a non-expert buyer in under 10 seconds. *UI implication:* reduce visual layers; lead with the price and date, subordinate all secondary data; avoid multi-column data tables on first-load views.
258
+
259
+ 3. **The user is always the buyer, never the seller.** Product language, iconography, and CTA copy orient around protecting the purchaser. *UI implication:* write button labels and tooltips from the buyer's intent ("확인하기", "비교하기") not the agent's interest ("문의하기" should feel secondary).
260
+
261
+ 4. **Speed of understanding, not speed of transaction.** Hogangnono earns trust by helping users slow down and compare before committing. *UI implication:* error and warning states should be prominent and never dismissible without acknowledgment; never autofill or pre-select high-commitment actions.
262
+
263
+ 5. **Map is the primary canvas.** Spatial context — neighbourhood, commute, school zone — is inseparable from price judgment. *UI implication:* the map must always be visible or reachable in one tap; panels and overlays must not cover the full viewport.
264
+
265
+ ## 13. Personas
266
+
267
+ *Illustrative — representative archetypes, not real users.*
268
+
269
+ **Young Professional First-Timer (지영, 28):** Recently started her first full-time job in Seoul; renting a studio and beginning to track jeonse prices for eventual purchase. Uses Hogangnono daily to watch price trends in her target neighbourhood. Needs: clear price history, commute-time overlays, simple language. Fears: overpaying due to information asymmetry.
270
+
271
+ **Upgrader Couple (민준 & 수진, 35/34):** Selling a small apartment to buy a larger family home before school-zone registration deadlines. Juggle two incomes and a toddler; research time is scarce. Need: quick price comparisons across 3–4 complexes, school-district filter, subscription eligibility checker. Fear: missing a deadline or buying at a local price peak.
272
+
273
+ *Illustrative.* **Data-Driven Investor (재원, 44):** Tracks multiple complexes for value-investing opportunities; cross-references Hogangnono data with government reconstruction announcements. Heavy user of non-resident-ratio charts and trading-volume graphs. Needs: dense data, fast export, historical charting depth. Fear: acting on stale or curated data.
274
+
275
+ *Illustrative.* **Cautious Senior Buyer (순자, 62):** Purchasing an apartment for the first time after selling a rural property; unfamiliar with jeonse vs. purchase semantics. Needs: large text, plain-language explanations, phone-number access to agents for reassurance. Fear: digital interfaces that feel untrustworthy or too fast.
276
+
277
+ ## 14. States
278
+
279
+ - **Empty (no search results):** Neutral gray illustration + short message "조건에 맞는 매물이 없어요" (No listings match your conditions); suggest relaxing one filter.
280
+ - **Loading (list skeleton):** Row skeletons in `#F3F3F3` — title bar 60 % width, price bar 40 % width, caption bar 80 % width; animated shimmer left-to-right at 1.3 s.
281
+ - **Error — network failure:** Inline banner in `#EE3A3A` tint background with red icon + "데이터를 불러오지 못했어요 — 다시 시도해 주세요" (Couldn't load data — please try again); retry button in primary fill.
282
+ - **Error — no price data for complex:** Greyed-out price slot with tooltip "공식 거래 기록이 없어요" (No official transaction records); never shows a fabricated figure.
283
+ - **Success — inquiry sent:** Toast notification with `#3DAB6A` check icon + "문의가 전송되었어요" (Your inquiry was sent); auto-dismisses after 3 s.
284
+ - **Skeleton — map bubbles loading:** Price bubbles render as `#E5E5E5` rounded pills at their geo-coordinates; replaced with real figures once API responds.
285
+ - **Disabled — subscription eligibility blocked:** CTA button in `background #f0f0f0; color #dadada` with helper text explaining missing eligibility condition below.
286
+ - **Active filter applied:** Filter chip border and text switch to `#584de4`; chip background stays white to signal "on" state without heavy fill.
287
+
288
+ ## 15. Motion & Easing
289
+
290
+ **Duration scale:**
291
+ - **Micro (hover / colour swap):** 200 ms
292
+ - **Standard (panel slide / button bg):** 300 ms
293
+ - **Expand (sheet / modal open):** 350 ms
294
+ - **Map pan / transform:** 350 ms–2 s depending on distance
295
+
296
+ **Easing:**
297
+ - Default transitions: `ease` (colour, background-color: 0.3s ease)
298
+ - Panel slide: `transform 0.35s` (implicit ease)
299
+ - Map zoom: `transform 2–3s` (linear, large tile area)
300
+ - Overlay fade: `opacity 0.2s linear` (dismiss) / `opacity 0.3s` (appear)
301
+ - Photo gallery: `cubic-bezier(0.4, 0, 0.22, 1)` (Photoswipe standard)
302
+
303
+ **Rules:**
304
+ - Never animate layout-shifting properties (width, height reflows) in real-time data updates; use opacity/transform only.
305
+ - Price numbers should update instantly (no count-up animation) to preserve data-honesty perception.
306
+ - Map bubble entry uses `fadeIn` keyframe (0 % opacity → 100 %) at 200 ms.
307
+ - Bottom-sheet open uses `bottomBoundIn` keyframe (translate Y 50 % → 0, scale 0.6 → 1) at 300 ms.
308
+ - Modal entry uses `topBoundIn` (translate Y −50 % → 0, scale 0.6 → 1) at 300 ms.
@@ -0,0 +1,177 @@
1
+ ---
2
+ id: "hyundaicard"
3
+ name: "Hyundai Card"
4
+ country: KR
5
+ category: fintech
6
+ homepage: "https://www.hyundaicard.com"
7
+ primary_color: "#000000"
8
+ logo:
9
+ type: favicon
10
+ slug: "https://www.google.com/s2/favicons?domain=hyundaicard.com&sz=128"
11
+ verified: "2026-06-01"
12
+ omd: "0.1"
13
+ ds:
14
+ name: Hyundai Card Design Library
15
+ url: "https://newsroom.hyundaicard.com/front/board/Hyundai-Card-Design-Library?country=en"
16
+ type: brand
17
+ description: Hyundai Card's official Design Library — the brand's design philosophy, the proprietary Youandi typeface, and visual identity.
18
+ ---
19
+ # Design System Inspiration of Hyundai Card
20
+
21
+ ## 1. Visual Theme & Atmosphere
22
+
23
+ Hyundai Card is Korea's most design-celebrated credit-card brand, and its visual identity is an exercise in disciplined restraint: monochrome premium minimalism built almost entirely from ink black (#000000) on a clean white (#FFFFFF) ground. Color is not used as decoration here — it is withheld on purpose, treated as a luxury that the brand chooses not to spend, so that the absence of color becomes the statement. The signature element is typography itself: the proprietary "Youandi" (유앤아이) typeface carries the brand's voice, making letterforms the primary expressive medium rather than imagery or palette. The atmosphere is gallery-like and editorial — generous whitespace, high contrast, and a quiet confidence that reads as understated wealth rather than loud premium cues. Surfaces are flat and unadorned, headers are transparent, and every element earns its place. The result feels less like a banking product and more like a cultural design platform, which is exactly how the DIVE surface presents the brand. This is typography-as-identity, where the discipline of black, white, and a custom face does all the work.
24
+
25
+ ## 2. Color Palette & Roles
26
+ The palette is deliberately monochrome. The ground is white (#FFFFFF) and the ink is black (#000000), and the brand color is essentially black itself — color is the thing that is held back, which is the entire point of the identity. The only chromatic accents appear as functional category tags on the DIVE content surface, never as primary brand expression.
27
+
28
+ | Role | Value | Usage |
29
+ | --- | --- | --- |
30
+ | Ground | #FFFFFF | Page and surface background; the dominant field |
31
+ | Ink | #000000 | Body text, headings, primary brand color; the monochrome anchor |
32
+ | Accent — red (functional) | #F36464 | Content category tag on DIVE only |
33
+ | Accent — green (functional) | #15A91F | Content category tag on DIVE only |
34
+
35
+ The accents are strictly utilitarian. They classify content; they do not brand. Treat #F36464 and #15A91F as labeling tools confined to tags, and keep the rest of the experience in pure black-and-white.
36
+
37
+ ## 3. Typography Rules
38
+ Typography is the brand. The display layer uses the proprietary "Youandi" typeface (confirmed in the DOM as YouandiNewKr, with HEB / TR / HB weights) for headings and branding — it is the signature element and should be reserved for moments that carry the brand's voice. Body text is set in Noto Sans KR for legibility across Korean and Latin content. The captured body size is 13px, and the heading size is 26px at weight 600, giving a clear two-step hierarchy: a confident editorial heading over a quiet, readable body.
39
+
40
+ | Token | Value |
41
+ | --- | --- |
42
+ | Display / branding | Youandi (YouandiNewKr — HEB / TR / HB weights), proprietary |
43
+ | Body | Noto Sans KR |
44
+ | Body size | 13px |
45
+ | Heading | 26px / 600 |
46
+
47
+ Rule of thumb: let Youandi own the brand and headline moments; let Noto Sans KR carry running text at 13px; reserve the 26px/600 step for section-level headings.
48
+
49
+ ## 4. Component Stylings
50
+
51
+ ### Page Surface (DIVE)
52
+
53
+ **Default**
54
+ - Background: #FFFFFF
55
+ - Text: #000000
56
+ - Border: none
57
+ - Padding: generous whitespace (editorial)
58
+ - Height: full viewport
59
+ - Font: 13px / 400 (Noto Sans KR)
60
+ - Use: the base content canvas — white ground, black ink, maximal restraint
61
+
62
+ ### Heading
63
+
64
+ **Section heading**
65
+ - Background: transparent
66
+ - Text: #000000
67
+ - Border: none
68
+ - Padding: editorial spacing above and below
69
+ - Height: auto
70
+ - Font: 26px / 600
71
+ - Use: section-level titles; pair with Youandi for true brand moments
72
+
73
+ ### Button
74
+
75
+ **Primary (minimal pill)**
76
+ - Background: #FFFFFF
77
+ - Text: #000000
78
+ - Border: minimal outline (monochrome)
79
+ - Radius: 24px
80
+ - Padding: balanced for a 48px pill
81
+ - Height: 48px
82
+ - Font: body scale (Noto Sans KR)
83
+ - Use: primary action; the rounded pill is the one soft gesture in an otherwise hard, flat system
84
+
85
+ ### Header
86
+
87
+ **Transparent header**
88
+ - Background: transparent
89
+ - Text: #000000
90
+ - Border: none
91
+ - Padding: edge-aligned to the content grid
92
+ - Height: auto
93
+ - Font: Noto Sans KR
94
+ - Use: lets the white ground read continuously from header into content; no chrome, no shadow
95
+
96
+ ### Content Tag
97
+
98
+ **Category tag (red)**
99
+ - Background: tag fill
100
+ - Text: #F36464
101
+ - Border: none
102
+ - Radius: pill
103
+ - Padding: compact
104
+ - Height: compact label
105
+ - Font: small body scale
106
+ - Use: functional content classification on DIVE only — not brand color
107
+
108
+ **Category tag (green)**
109
+ - Background: tag fill
110
+ - Text: #15A91F
111
+ - Border: none
112
+ - Radius: pill
113
+ - Padding: compact
114
+ - Height: compact label
115
+ - Font: small body scale
116
+ - Use: functional content classification on DIVE only — not brand color
117
+
118
+ ## 5. Layout Principles
119
+ The layout is editorial and gallery-like, built on generous whitespace and a continuous white ground. The transparent header dissolves into the content so the page reads as one uninterrupted surface, and the absence of borders, fills, and chrome keeps attention on type and spacing. Black ink on white field creates the contrast that structures the page; there is no competing color to organize around. Hierarchy is established through the typographic step — 26px/600 headings over 13px body — and through the rhythm of negative space rather than through dividers or boxes. The pill button at 24px radius is the single soft moment in an otherwise crisp, rectilinear field. Treat layout as composition: align to a clean grid, let whitespace breathe, and resist the urge to add color or ornament.
120
+
121
+ ## 6. Depth & Elevation
122
+ This is a flat system. There are no documented shadows, gradients, or elevation layers — the header is transparent and surfaces sit at a single plane on the white ground. Depth, to the extent it exists, comes from contrast (black ink against white) and from spacing, not from drop shadows or stacking. Keep elements coplanar; if separation is needed, use whitespace and the typographic hierarchy rather than introducing elevation. The only curvature in the system is the 24px button radius, which softens the action without implying lift. Restraint applies to depth exactly as it applies to color.
123
+
124
+ ## 7. Do's and Don'ts
125
+
126
+ ### Do
127
+ - Keep the palette monochrome: #FFFFFF ground, #000000 ink.
128
+ - Treat black (#000000) as the brand color — withholding color is the point.
129
+ - Reserve Youandi (proprietary) for headings and branding moments.
130
+ - Set body in Noto Sans KR at 13px; use 26px/600 for headings.
131
+ - Use the 48px pill button with 24px radius as the soft action gesture.
132
+ - Keep the header transparent and surfaces flat.
133
+
134
+ ### Don't
135
+ - Introduce color as a brand element — the accents #F36464 and #15A91F are for functional content tags only.
136
+ - Add shadows, gradients, or elevation; the system is flat.
137
+ - Substitute a generic display face where Youandi carries the brand voice.
138
+ - Crowd the layout — whitespace is structural.
139
+ - Box content in borders or fills; let contrast and spacing do the work.
140
+
141
+ ## 8. Responsive Behavior
142
+ The captured surface (DIVE) is a content/culture platform whose responsive logic follows its editorial, whitespace-driven layout: the continuous white ground and transparent header scale naturally from desktop to mobile, with the typographic hierarchy (26px/600 heading over 13px body) carrying structure at every width. The 48px pill button provides a comfortable touch target on mobile. Beyond these observed values, responsive specifics were not captured (the main banking site is security-plugin-walled), so adapt qualitatively: preserve generous whitespace, keep the monochrome contrast, maintain the flat single-plane surface, and let the type hierarchy — not added chrome — communicate structure as the viewport narrows.
143
+
144
+ ## 9. Agent Prompt Guide
145
+ When generating UI in the Hyundai Card style, instruct the agent: "Design a monochrome, editorial interface — white (#FFFFFF) ground, black (#000000) ink, and treat black as the brand color. Withhold color entirely; the absence of color is the statement. Use a proprietary-feeling display typeface (Youandi, weights HEB/TR/HB) for headings and branding, and Noto Sans KR for body at 13px, with 26px/600 section headings. Keep everything flat — no shadows, no gradients, no elevation, transparent header. The only soft gesture is a 48px pill button with 24px radius, white fill, black text. Lean on generous whitespace and high black-on-white contrast for structure. If you must classify content, you may use red #F36464 or green #15A91F as small functional tag colors only — never as brand color." Emphasize restraint above all: when in doubt, remove rather than add.
146
+
147
+ ## 10. Voice & Tone
148
+ The voice is quietly confident and editorial — the tone of a design gallery rather than a bank. It speaks with the assurance of a brand that has nothing to prove, letting restraint imply premium. There is no shouting, no urgency, no decorative flourish; the message lands through clarity and discipline. Like the monochrome palette, the language withholds: it says only what is needed, and it trusts the audience to read the sophistication in the negative space. The tone is cultured, deliberate, and self-assured.
149
+
150
+ ## 11. Brand Narrative
151
+ Hyundai Card built its reputation as Korea's most design-celebrated credit-card brand by treating design as the product, not the packaging. The brand's central idea is that luxury is restraint: a monochrome world of black and white, anchored by a typeface it commissioned for itself — Youandi (유앤아이) — so that even the letters belong to the brand alone. Color is the resource it refuses to spend, turning absence into a signature. The DIVE platform extends this story from finance into culture and design, presenting the same monochrome, Youandi-led identity as a creative point of view rather than a transactional one. The narrative is consistent at every touchpoint: typography-as-identity, discipline-as-luxury, and the quiet confidence of a brand that lets what it leaves out speak as loudly as what it puts in.
152
+
153
+ ## 12. Principles
154
+ - **Withhold color.** Black (#000000) on white (#FFFFFF) is the identity; color is deliberately held back.
155
+ - **Typography is the brand.** Youandi (proprietary) carries the voice; let letterforms lead.
156
+ - **Restraint as luxury.** Remove before you add; whitespace and contrast do the structural work.
157
+ - **Flat and honest.** No shadows, no gradients, no chrome — a single clean plane.
158
+ - **One soft gesture.** The 24px-radius, 48px pill button is the system's only concession to softness.
159
+ - **Function over decoration.** The only accents (#F36464, #15A91F) exist to classify, never to brand.
160
+
161
+ ## 13. Personas
162
+ - **The design-literate cardholder** — values craft and discretion over flash; reads the monochrome restraint as a marker of taste and expects the interface to feel like a curated space.
163
+ - **The culture seeker on DIVE** — comes for design, art, and editorial content rather than banking, and responds to the gallery-like white-ground layout and Youandi typography.
164
+ - **The premium minimalist** — wants the confidence of black-and-white sophistication, prefers whitespace to ornament, and trusts a brand that says less.
165
+
166
+ ## 14. States
167
+ Observed component states are minimal by design — the system favors flat, high-contrast defaults over elaborate interactive feedback. From the captured values: the default surface is #FFFFFF ground with #000000 text; the primary button defaults to white fill, black text, 24px radius, 48px height; the header defaults to transparent. Hover, pressed, focus, disabled, and error states were not captured in the blob, so do not invent them — derive them qualitatively in keeping with the monochrome, flat philosophy (e.g., subtle black/white contrast shifts rather than colored state changes), and keep any feedback as restrained as the rest of the system. Functional content tags carry the red (#F36464) or green (#15A91F) accent to signal category, the closest thing to a "stateful" color in the system.
168
+
169
+ ## 15. Motion & Easing
170
+ No motion or easing values were captured in the blob. In keeping with the brand's restraint, motion should be treated qualitatively: quiet, minimal, and unobtrusive — transitions that respect the gallery-like calm rather than drawing attention to themselves. The flat, monochrome system implies subtle, understated movement (gentle fades and clean transitions) over expressive or bouncy animation. Do not invent specific durations or curves; let any motion echo the same discipline as the visual identity — present only when it serves clarity, never as decoration.
171
+
172
+ ---
173
+ **Verified:** 2026-06-01
174
+ **Tier 1 sources:** https://www.hyundaicard.com (homepage / brand context — main site security-plugin-walled), https://dive.hyundaicard.com (live DOM inspect — monochrome surface, Youandi display fonts, Noto Sans KR body, button + tag values), https://newsroom.hyundaicard.com (brand-owned regional source)
175
+ **Tier 2 sources:** getdesign.md/hyundaicard — NOT LISTED. refero — not listed. Note: hyundaicard.com main site is security-plugin-walled; DIVE (dive.hyundaicard.com) is the accessible brand surface and carries the same Youandi/monochrome identity.
176
+ **Conflicts unresolved:** none
177
+ **Proof:** see .verification.md (## Proof block)
@@ -309,6 +309,25 @@ Mantine's default transition timing function is `--mantine-transition-timing-fun
309
309
  - **Keyboard nav**: Mantine `focusRing="auto"` — visible 2px green ring on Tab navigation.
310
310
  - **Screen reader**: GNB icon-only buttons carry `aria-label` (`search-menu`, `service-menu` observed). Course tiles use semantic `<article>`.
311
311
 
312
+
313
+ ## 16. Do's and Don'ts
314
+
315
+ ### Do
316
+ - Use the single mint-green #00C471 for all primary action — search submit, primary CTA, active pagination, free/starter tag fills — and swap to #00A760 only for hover/pressed states
317
+ - Set type in the Pretendard-first stack with a binary-ish weight scale: 700 for headings (H1 34px, H2 20px), 600 for nav and labelled buttons, 400 for body and prices — there is no 500
318
+ - Apply the two-family radius vocabulary: 8px for cards, inputs, and pagination; 32px for nav pills; and full-pill 999px only for the green search submit and tag chips
319
+ - Render the GNB as a sticky 65px white bar with no shadow and no border, letting the green circular search button be the only visual accent
320
+ - Keep course tiles borderless and transparent (~230x310px, 8px thumbnail radius) so the thumbnail does the visual work, with title in #212529, instructor in #868E96, and price in #212529 weight 400
321
+ - Inherit the Mantine semantic palette for non-brand needs — red #FA5252 for errors, blue #228BE6 for info, cyan-teal #1098AD for category tags — and reach for it instead of inventing new hues
322
+
323
+ ### Don't
324
+ - Introduce a second brand accent hue for a sub-product — tint the existing #00C471 (e.g. rgba(0,196,113,0.1)) or fall back to the Mantine red/blue/yellow/cyan scales instead
325
+ - Use #00C471 for body-text links or small text — it scores only 2.45:1 on white and fails AA, so reserve it for white-on-green CTAs and >18pt headings
326
+ - Embolden prices in red or add strikethrough discount callouts outside intentional sale rails — keep price in body weight 400 as a fact, not a flag
327
+ - Add campaign drama like rotating banner carousels, parallax, or auto-advancing home rails — show ~24 calm catalog tiles above the fold and make card thumbnail scale (1.0 to 1.02) the only ambient motion
328
+ - Use pressure or hype microcopy such as 지금 바로!, 놓치지 마세요, 최저가, 최고의 강의, Oops!, or 오류가 발생했습니다 — write agency-on-the-learner copy in casual-polite ~해요 instead
329
+ - Call instructors 강사 or 교수 or pit them against each other with ranking labels — use the brand term 지식공유자님 and neutral counts like 수강생 12,400명
330
+
312
331
  ---
313
332
 
314
333
  ## 10. Voice & Tone