oh-my-design-cli 1.6.1 → 1.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ko.md +14 -0
- package/README.md +16 -0
- package/data/reference-fingerprints.json +979 -402
- package/dist/bin/oh-my-design.js +5 -3
- package/dist/bin/oh-my-design.js.map +1 -1
- package/dist/{install-skills-UKEVE3KT.js → install-skills-52LCRBZZ.js} +125 -40
- package/dist/install-skills-52LCRBZZ.js.map +1 -0
- package/package.json +2 -1
- package/skills/claude-design/SKILL.md +385 -0
- package/skills/claude-design/references/claude-design-flow.md +425 -0
- package/skills/claude-design/references/codebase-analysis.md +373 -0
- package/skills/claude-design/scripts/analyze_codebase.py +1369 -0
- package/skills/claude-design/scripts/clickable_link.sh +48 -0
- package/skills/claude-design/scripts/collect_source.py +178 -0
- package/skills/claude-design/scripts/drive_claude_design.cjs +378 -0
- package/skills/claude-design/scripts/gather_references.py +437 -0
- package/web/references/bunjang/DESIGN.md +1 -1
- package/web/references/classting/DESIGN.md +251 -0
- package/web/references/coinone/DESIGN.md +218 -0
- package/web/references/devsisters/DESIGN.md +253 -0
- package/web/references/drnow/DESIGN.md +331 -0
- package/web/references/flo/DESIGN.md +306 -0
- package/web/references/fugle/DESIGN.md +250 -0
- package/web/references/gogolook/DESIGN.md +5 -0
- package/web/references/grip/DESIGN.md +250 -0
- package/web/references/hogangnono/DESIGN.md +308 -0
- package/web/references/hyundaicard/DESIGN.md +5 -0
- package/web/references/jkopay/DESIGN.md +249 -0
- package/web/references/jobkorea/DESIGN.md +310 -0
- package/web/references/krafton/DESIGN.md +230 -0
- package/web/references/laftel/DESIGN.md +253 -0
- package/web/references/lezhin/DESIGN.md +301 -0
- package/web/references/momoshop/DESIGN.md +279 -0
- package/web/references/mustit/DESIGN.md +282 -0
- package/web/references/payco/DESIGN.md +227 -0
- package/web/references/piccollage/DESIGN.md +277 -0
- package/web/references/riiid/DESIGN.md +228 -0
- package/web/references/trenbe/DESIGN.md +252 -0
- package/web/references/voicetube/DESIGN.md +227 -0
- package/dist/install-skills-UKEVE3KT.js.map +0 -1
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: grip
|
|
3
|
+
name: "Grip"
|
|
4
|
+
country: KR
|
|
5
|
+
category: ecommerce
|
|
6
|
+
homepage: "https://www.grip.show"
|
|
7
|
+
primary_color: "#eb2b51"
|
|
8
|
+
logo:
|
|
9
|
+
type: favicon
|
|
10
|
+
slug: "https://www.google.com/s2/favicons?domain=grip.show&sz=256"
|
|
11
|
+
verified: "2026-06-03"
|
|
12
|
+
omd: "0.1"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Grip
|
|
16
|
+
|
|
17
|
+
Korea's first live commerce platform — a mobile-first video shopping app where sellers and buyers connect in real time through livestreams, chat, and exclusive in-broadcast deals.
|
|
18
|
+
|
|
19
|
+
## 1. Visual Theme & Atmosphere
|
|
20
|
+
|
|
21
|
+
Grip presents a dark-first, energy-charged visual world tuned for live video commerce. The primary canvas is near-black (#0e1011) — a deliberate cinema-mode choice that keeps product thumbnails and live video feeds visually dominant. Against this dark ground, the brand's signature rose-red (#eb2b51) fires as a call-to-action signal: checkout buttons, coupon highlights, discount badges, and active selection states all pulse in the same hue, creating an unambiguous buy-now urgency. A secondary hot-pink (#ff3c78) appears in borders and icon fills for interactive affordances just below the critical-action tier. The live-streaming avatar ring introduces a vivid gradient (hot-pink to coral #fe0189→#ff583c) that animates with a pulse or ripple when a seller is live — the single most kinetically distinctive element in the UI. A deep purple (#6456dc) serves as a secondary accent for purchase nudges, urgency countdowns, and seller badges, adding a premium-yet-playful counter-note to the red-dominant palette. Typography is set entirely in Pretendard, a Korean variable typeface that reads cleanly at 13–18 px in both dark and light contexts. Component radii cluster at 4–8 px — tight enough to feel structured, not clinical.
|
|
22
|
+
|
|
23
|
+
## 2. Color Palette & Roles
|
|
24
|
+
|
|
25
|
+
- **Primary Rose-Red:** `#eb2b51` — primary CTA buttons, checkout actions, coupon card accents, checkbox fill, discount rate text
|
|
26
|
+
- **Primary Hot-Pink:** `#ff3c78` — lighter interactive affordance, border accents, icon fills, secondary interactive states
|
|
27
|
+
- **Secondary Purple:** `#6456dc` — purchase nudge bar background, timer text, seller badge accent
|
|
28
|
+
- **App Background:** `#0e1011` — root app canvas (dark mode default)
|
|
29
|
+
- **Surface Dark-1:** `#17181a` — bottom navigation bar background
|
|
30
|
+
- **Surface Dark-2:** `#222327` — elevated card surfaces in dark context
|
|
31
|
+
- **Surface Dark-3:** `#404149` — tertiary panel fills
|
|
32
|
+
- **Surface Light:** `#ffffff` — light-mode cart, coupon, and checkout pages
|
|
33
|
+
- **Surface Subtle:** `#f3f3f3` — empty state icon containers, light dividers
|
|
34
|
+
- **Text Primary (dark):** `#eff0f4` — body copy on dark backgrounds
|
|
35
|
+
- **Text Body (light):** `#323232` — product name, price, UI text on white
|
|
36
|
+
- **Text Muted:** `#999999` — secondary labels, conditions, disabled states
|
|
37
|
+
- **Text Subdued:** `#666666` — meta info, timestamps
|
|
38
|
+
- **Border Default:** `#e5e5e5` — card outlines, dividers
|
|
39
|
+
- **Border Subtle:** `#d5d5d5` — light separators, outline button strokes
|
|
40
|
+
- **Error / Danger:** `#ef4343` — toast error, out-of-stock labels
|
|
41
|
+
- **Live avatar ring:** `conic-gradient(from -68deg, #ff2b51, #ffae8e)` — broadcaster live ring
|
|
42
|
+
- **Creator avatar ring:** `conic-gradient(from -68deg, #1ec7be, #1dc3ff)` — creator/seller avatar ring
|
|
43
|
+
|
|
44
|
+
## 3. Typography Rules
|
|
45
|
+
|
|
46
|
+
- **Typeface:** Pretendard (woff2, variable weight 45–920), with Pretendard Fallback (Arial-based) for system fallback
|
|
47
|
+
- **Body / Product name:** 15px / weight 400–500
|
|
48
|
+
- **Price / Emphasis:** 15px / weight 700; discount price 27px / weight 700
|
|
49
|
+
- **Button primary:** 16px / weight 600
|
|
50
|
+
- **Button confirm full-width:** 18px / weight 500
|
|
51
|
+
- **Caption / Meta:** 13px / weight 400–500
|
|
52
|
+
- **Badge / Tag:** 11–12px / weight 500
|
|
53
|
+
- **Page header height:** 56px (CSS export constant)
|
|
54
|
+
- **Letter spacing:** −0.2 px to −0.5 px on headings and price figures; Korean text benefits from tight negative tracking
|
|
55
|
+
- **Line height:** 135–145% for readable body, tabular-nums variant for prices and timers
|
|
56
|
+
|
|
57
|
+
## 4. Component Stylings
|
|
58
|
+
|
|
59
|
+
### Purchase Buttons
|
|
60
|
+
|
|
61
|
+
**Primary CTA (cart checkout)**
|
|
62
|
+
- Background: `#eb2b51`
|
|
63
|
+
- Text: `#ffffff`
|
|
64
|
+
- Radius: 8px
|
|
65
|
+
- Height: 50px
|
|
66
|
+
- Font: 16px / 600
|
|
67
|
+
|
|
68
|
+
**Full-Width Confirm (drawer bottom)**
|
|
69
|
+
- Background: `#eb2b51`
|
|
70
|
+
- Text: `#ffffff`
|
|
71
|
+
- Height: 56px
|
|
72
|
+
- Font: 18px / 500
|
|
73
|
+
|
|
74
|
+
**Dark Secondary (buy now inline)**
|
|
75
|
+
- Background: `#323232`
|
|
76
|
+
- Text: `#ffffff`
|
|
77
|
+
- Radius: 4px
|
|
78
|
+
- Height: 34px
|
|
79
|
+
- Font: 14px / 500
|
|
80
|
+
|
|
81
|
+
**Outline Delete / Cancel**
|
|
82
|
+
- Background: `#ffffff`
|
|
83
|
+
- Text: `#323232`
|
|
84
|
+
- Border: 1px solid `#e5e5e5`
|
|
85
|
+
- Radius: 4px
|
|
86
|
+
- Height: 34px
|
|
87
|
+
- Font: 14px / 500
|
|
88
|
+
|
|
89
|
+
**Shorts / Discovery CTA**
|
|
90
|
+
- Background: `#17181a`
|
|
91
|
+
- Text: `#ffffff`
|
|
92
|
+
- Radius: 6px
|
|
93
|
+
- Height: 40px
|
|
94
|
+
- Font: 15px / 600
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
### Coupon Card
|
|
99
|
+
|
|
100
|
+
**Active Coupon**
|
|
101
|
+
- Background: `#ffffff`
|
|
102
|
+
- Background: `#fff5f8`
|
|
103
|
+
- Text (price): `#eb2b51`
|
|
104
|
+
- Font: 27px / 700
|
|
105
|
+
|
|
106
|
+
**Claimed / Used Coupon**
|
|
107
|
+
- Background: `#ffffff`
|
|
108
|
+
- Border: 5px solid `#f3f3f3`
|
|
109
|
+
- Text: `#999999`
|
|
110
|
+
- Font: 13px / 500
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
### Purchase Nudge Bar
|
|
115
|
+
|
|
116
|
+
**Urgency Countdown**
|
|
117
|
+
- Background: `rgba(47, 23, 253, 0.05)`
|
|
118
|
+
- Text: `#6456dc`
|
|
119
|
+
- Radius: 4px
|
|
120
|
+
- Height: 38px
|
|
121
|
+
- Font: 14px / 500–600
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
**Verified:** 2026-06-03
|
|
125
|
+
**Tier 1 sources:** https://www.grip.show (homepage HTML + CSS bundles via webapp-resource.grip.show/202606020502/_next/static/css/), https://webapp-resource.grip.show/202606020502/_next/static/css/2caceb3098ae7b02.css (main Tailwind utility CSS, 86 KB), https://webapp-resource.grip.show/202606020502/_next/static/css/1f9e9658ee2b291a.css (cart page CSS with button tokens), https://webapp-resource.grip.show/202606020502/_next/static/css/c2bfe78c6e53a384.css (coupon drawer CSS with full-width confirm button), https://gripcorp.co (brand/corp homepage with gradient slogan and propose-button), https://webapp-resource.grip.show/202606020502/_next/static/css/4299887bf9e53336.css (avatar + live ring CSS)
|
|
126
|
+
**Tier 2 sources:** getdesign.md/grip — 0 DESIGN.md files (NOT LISTED). refero — no result found for Grip KR.
|
|
127
|
+
**Conflicts unresolved:** none
|
|
128
|
+
|
|
129
|
+
## 5. Layout Principles
|
|
130
|
+
|
|
131
|
+
Grip is a single-column, mobile-only app (max-width 420px on desktop, 100% on mobile). The root `.main` container is fixed to 420px wide on desktop and stacks vertically: page header (56px fixed top), scrollable content, bottom nav (52px + safe-area bottom). The live video view occupies full viewport height (100dvh) with content layered via absolute positioning. Card grids use gap-based flex rows; product thumbnail grids use 109px fixed-width scroll containers. Horizontal scroll (Indiana Scroll) is used for curation rows, avoiding pagination friction.
|
|
132
|
+
|
|
133
|
+
## 6. Depth & Elevation
|
|
134
|
+
|
|
135
|
+
The UI relies on background-color contrast rather than drop shadows for layering. Bottom nav (`#17181a`) sits above the dark app canvas (`#0e1011`). Drawers and modals emerge from below (vaul-drawer, bottom-sheet pattern) using the Radix animation system. An `rgba(0,0,0,0.1)` scrim is applied to floating overlays. The live avatar ring uses `z-index:-1` on the after-pseudo for the gradient ring to sit behind the avatar circle, giving a halo effect without a shadow. Product thumbnail borders use `outline: 1px solid rgba(0,0,0,0.05)` with `outline-offset:-1px` to avoid layout shift at 8px radius.
|
|
136
|
+
|
|
137
|
+
## 7. Do's and Don'ts
|
|
138
|
+
|
|
139
|
+
### Do
|
|
140
|
+
- Use `#eb2b51` for every primary purchase action — checkout, confirm, coupon claim
|
|
141
|
+
- Present live status with the `#fe0189→#ff583c` animated ring gradient, not a static badge
|
|
142
|
+
- Set prices in 700 weight with tabular-nums to prevent width jitter during countdowns
|
|
143
|
+
- Keep body copy at 15px / 400 on light surfaces for readability at arm's length
|
|
144
|
+
- Use `#6456dc` exclusively for urgency/countdown nudges; don't repurpose it as a general brand color
|
|
145
|
+
- Maintain the 420px max-width constraint in desktop contexts to preserve mobile layout fidelity
|
|
146
|
+
|
|
147
|
+
### Don't
|
|
148
|
+
- Don't use `#ff3c78` as the primary CTA color — it is the lighter interactive affordance, not the checkout signal
|
|
149
|
+
- Don't add shadows to buttons; elevation is communicated through background contrast alone
|
|
150
|
+
- Don't place live-ring gradients on non-live seller avatars — the animation signals active broadcast
|
|
151
|
+
- Don't exceed 8px border-radius on purchase buttons; 24–31px is reserved for pill tags and avatar-adjacent elements
|
|
152
|
+
- Don't use font weight below 500 for interactive UI text; 400 is reserved for body copy and meta descriptions
|
|
153
|
+
|
|
154
|
+
## 8. Responsive Behavior
|
|
155
|
+
|
|
156
|
+
Grip is deliberately non-responsive in the traditional sense — it is a mobile web app. The root `.main` container is fixed at 420px wide and centered on desktop, with `max-width:100%` applied only on actual mobile viewports. At ≤460px the container becomes fluid. The bottom nav respects `env(safe-area-inset-bottom)` for notched devices. The video view layout enforces `min-width:360px` and `min-height:568px` to support older small-screen devices. Desktop visitors receive the 420px centered column; there is no tablet breakpoint.
|
|
157
|
+
|
|
158
|
+
## 9. Agent Prompt Guide
|
|
159
|
+
|
|
160
|
+
To produce Grip-consistent UI:
|
|
161
|
+
- Dark canvas: `background #0e1011`, body text `#eff0f4`, Pretendard 15px/400
|
|
162
|
+
- Primary CTA: `background #eb2b51`, white text, 8px radius, 50px height, 16px/600
|
|
163
|
+
- Secondary action: `background #323232`, white text, 4px radius, 34px height, 14px/500
|
|
164
|
+
- Live indicator: animated gradient ring `#fe0189→#ff583c` on circular avatars, 0.81s cubic-bezier(0.167, 0.166, 1, 1)
|
|
165
|
+
- Price display: 700 weight, tabular-nums, discount rate in `#eb2b51`
|
|
166
|
+
- Urgency nudge bar: `rgba(47,23,253,0.05)` background, `#6456dc` text, 4px radius, 38px height
|
|
167
|
+
- Coupon card: `#fff5f8` tint interior, primary amount in `#eb2b51` 27px/700
|
|
168
|
+
- Section dividers: 1px solid `#f3f3f3` (light) or background-color switch on dark
|
|
169
|
+
- No box-shadow on action elements; rely on background contrast for layering
|
|
170
|
+
|
|
171
|
+
## 10. Voice & Tone
|
|
172
|
+
|
|
173
|
+
**Tone adjectives:** energetic, direct, community-warm
|
|
174
|
+
|
|
175
|
+
| Do | Don't |
|
|
176
|
+
|----|-------|
|
|
177
|
+
| Use short imperative phrases ("지금 바로", "한정 특가") | Write formal or legalistic copy |
|
|
178
|
+
| Address the viewer as a participant in a live event | Address them as a faceless online shopper |
|
|
179
|
+
| Create urgency around the live moment ("지금 방송 중") | Use generic marketing hyperbole unrelated to real-time |
|
|
180
|
+
| Celebrate the seller-buyer relationship by name (Gripper) | Depersonalize the seller as "vendor" or "merchant" |
|
|
181
|
+
|
|
182
|
+
**Voice samples (illustrative):**
|
|
183
|
+
- *"지금 라이브 중! 방송에서만 만나는 특가를 놓치지 마세요."* — live broadcast nudge copy
|
|
184
|
+
- *"그리퍼가 직접 쓰고 추천하는 아이템, 지금 채팅으로 물어보세요."* — seller trust prompt
|
|
185
|
+
- *"1,000만이 선택한 영상 쇼핑, 그립."* — official slogan from og:title meta tag
|
|
186
|
+
|
|
187
|
+
## 11. Brand Narrative
|
|
188
|
+
|
|
189
|
+
Grip was founded in July 2018 by Kim Han-na, a former Naver marketer who had worked on video products including Jam Live and Snow. Along with six co-founders also from Naver and Kakao, she set out to build Korea's first mobile live commerce platform with a single animating belief: anyone with a smartphone should be able to sell anything, anytime, to anyone. The company (GripCompany, 주식회사 그립컴퍼니) is headquartered in Pangyo, Seongnam — the heart of Korea's tech ecosystem. In December 2021 Kakao became Grip’s largest shareholder (~50% stake, ₩180B), anchoring its live-commerce expansion.
|
|
190
|
+
|
|
191
|
+
Rather than replicating home shopping television or social media, Grip defined a third category: personal media commerce. Sellers — called Grippers — broadcast from wherever they are, answer questions live via chat, run in-stream auctions and games, and build loyal fan communities around their product expertise. The platform's patent portfolio reflects this: interactive mechanics like rolling dice, quiz games, and flash-sale countdowns are proprietary differentiators, not commodities.
|
|
192
|
+
|
|
193
|
+
By 2024 the app had surpassed 10 million downloads and runs approximately 1,300 live shows daily. Grip has expanded internationally (US via gripcorp.co, Japan in planning), and operates a B2B arm — Grip Cloud — that powers branded live commerce for third-party retailers. The mission remains unchanged: collapse the distance between the person who made or curated a product and the person who wants it.
|
|
194
|
+
|
|
195
|
+
## 12. Principles
|
|
196
|
+
|
|
197
|
+
1. **Anyone can sell.** The platform is designed so that a single creator with a smartphone has the same surface area as a large retailer. UI implication: seller onboarding, stream tooling, and product listing all default to zero-equipment, zero-staff flows.
|
|
198
|
+
|
|
199
|
+
2. **The live moment is the product.** Urgency is honest, not manufactured — it comes from the real-time nature of the broadcast. UI implication: live badges, countdown timers, and flash prices must always reflect actual live status; never show live signals on recorded or inactive streams.
|
|
200
|
+
|
|
201
|
+
3. **Community over catalogue.** Grip's retention mechanism is the seller-fan relationship, not a product recommendation algorithm. UI implication: seller avatars, follow states, and chat surfaces are given equal or greater prominence than product grids.
|
|
202
|
+
|
|
203
|
+
4. **Mobile-first, always.** The app was born on smartphone screens; desktop is a secondary, framed experience. UI implication: the 420px max-width is a design constraint, not a limitation — all interaction models (swipe, scroll, tap) are thumb-native.
|
|
204
|
+
|
|
205
|
+
5. **Trust through transparency.** Buyers can ask questions live and see the product in real context. UI implication: product info, seller credentials, and review surfaces should never be buried; the chat overlay must remain accessible throughout a broadcast.
|
|
206
|
+
|
|
207
|
+
## 13. Personas
|
|
208
|
+
|
|
209
|
+
*Illustrative Gripper (Seller) — "Minjung, 34, Busan"*
|
|
210
|
+
Runs a small handmade cosmetics business. She goes live three times a week from her kitchen studio, always engaging with regulars by name. She values the chat widget above everything else — it is her storefront window and her customer service desk simultaneously.
|
|
211
|
+
|
|
212
|
+
*Illustrative Buyer / Fan — "Soyeon, 28, Seoul"*
|
|
213
|
+
Follows 12 Grippers in beauty and fashion. She watches live shows on her commute and keeps the app's push notifications on for her favourite sellers. Price is secondary to trust — she buys because she knows the person selling.
|
|
214
|
+
|
|
215
|
+
*Illustrative Discovery Shopper — "Junho, 41, Daejeon"*
|
|
216
|
+
Opens Grip from a search ad for a specific product category. He swipes the home feed without following anyone, attracted by the HOT ranking and the real-time viewer count as a social-proof signal. He rarely revisits without a compelling deal.
|
|
217
|
+
|
|
218
|
+
*Illustrative B2B Brand Manager — "Hyeji, 30, Seoul"*
|
|
219
|
+
Uses Grip Cloud to run branded live events for an apparel label. She cares about the OBS integration, analytics dashboard, and the coupon issuance system — the consumer-facing design language is largely transparent to her.
|
|
220
|
+
|
|
221
|
+
## 14. States
|
|
222
|
+
|
|
223
|
+
- **Empty (Cart):** `#f3f3f3` circle container (64px) with a cart icon in `#c2c2c2`; text "담긴 상품이 없어요" in `#999` 15px/400; CTA to browse shorts in `#17181a` background
|
|
224
|
+
- **Loading (Live video):** full-viewport dark canvas `#111` with centered spinner; video cover div with `background-size:contain` for thumbnail placeholder
|
|
225
|
+
- **Error (Video stream):** gradient fallback `linear-gradient(180deg, #111 49.95%, #29235e)`; error text surfaced in white on the gradient
|
|
226
|
+
- **Error (Cart item — sold out / ended):** text label "품절" in `#e83c3b` 15px/700; product thumbnail at 50% opacity via `.disabled`
|
|
227
|
+
- **Success (Coupon claimed):** action panel switches to `#f8f8f8`; icon color moves from `#eb2b51` to `#999`; label reads "사용 완료"
|
|
228
|
+
- **Skeleton (Product thumbnail):** `border-radius:8px; outline:1px solid rgba(0,0,0,0.05)` on the wrapper; image `aspect-ratio:1/1` prevents layout shift
|
|
229
|
+
- **Disabled (Coupon card):** `opacity:0.5` applied to all child elements inside `.coupon > *`
|
|
230
|
+
- **Timer / Urgency:** `font-variant-numeric:tabular-nums; font-feature-settings:"tnum"` on all countdown displays; color `#6456dc`
|
|
231
|
+
|
|
232
|
+
## 15. Motion & Easing
|
|
233
|
+
|
|
234
|
+
**Duration scale:**
|
|
235
|
+
- Micro (state feedback): 80ms — bottom nav slide (`transition: all 0.08s linear`)
|
|
236
|
+
- Short (UI transitions): 150ms — Tailwind default (`cubic-bezier(0.4, 0, 0.2, 1)`)
|
|
237
|
+
- Medium (drawer open/close): 200–300ms — Radix accordion/drawer (`ease-out`)
|
|
238
|
+
- Long (avatar live animation): 810ms — pulse-border, ripple-border (`cubic-bezier(0.167, 0.166, 1, 1)`)
|
|
239
|
+
|
|
240
|
+
**Easing tokens:**
|
|
241
|
+
- Standard: `cubic-bezier(0.4, 0, 0.2, 1)` (ease-in-out, Material-derived)
|
|
242
|
+
- Decelerate (drawer enter): `ease-out`
|
|
243
|
+
- Live avatar: `cubic-bezier(0.167, 0.167, 0.833, 0.833)` for ripple ring
|
|
244
|
+
- Pulse entry: `cubic-bezier(0.167, 0.166, 1, 1)` for avatar scale pulse (4 iterations then infinite on live)
|
|
245
|
+
|
|
246
|
+
**Rules:**
|
|
247
|
+
- The live-ring animation (ripple-sm: scale 1.02→1.2, opacity 1→0) runs 4× then loops only when `repeat-live-animation` class is applied — indicating an active live session
|
|
248
|
+
- Bottom nav slides out (`translateY(100%)`) with 80ms linear — fast enough to feel native, not abrupt
|
|
249
|
+
- Drawer content uses Vaul/Radix `data-[state=open]` animate-in at 150ms; `data-[state=closed]` at 300ms (asymmetric: opens fast, closes deliberately)
|
|
250
|
+
- No spring physics; all motion is CSS cubic-bezier
|
|
@@ -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.
|
|
@@ -10,6 +10,11 @@ logo:
|
|
|
10
10
|
slug: "https://www.google.com/s2/favicons?domain=hyundaicard.com&sz=128"
|
|
11
11
|
verified: "2026-06-01"
|
|
12
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.
|
|
13
18
|
---
|
|
14
19
|
# Design System Inspiration of Hyundai Card
|
|
15
20
|
|