oh-my-design-cli 1.6.1 → 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 (40) hide show
  1. package/README.ko.md +12 -0
  2. package/README.md +12 -0
  3. package/data/reference-fingerprints.json +979 -402
  4. package/dist/bin/oh-my-design.js +4 -3
  5. package/dist/bin/oh-my-design.js.map +1 -1
  6. package/dist/{install-skills-UKEVE3KT.js → install-skills-6QFSN5BN.js} +98 -34
  7. package/dist/install-skills-6QFSN5BN.js.map +1 -0
  8. package/package.json +2 -1
  9. package/skills/claude-design/SKILL.md +385 -0
  10. package/skills/claude-design/references/claude-design-flow.md +425 -0
  11. package/skills/claude-design/references/codebase-analysis.md +373 -0
  12. package/skills/claude-design/scripts/analyze_codebase.py +1369 -0
  13. package/skills/claude-design/scripts/clickable_link.sh +48 -0
  14. package/skills/claude-design/scripts/collect_source.py +178 -0
  15. package/skills/claude-design/scripts/drive_claude_design.cjs +378 -0
  16. package/skills/claude-design/scripts/gather_references.py +437 -0
  17. package/web/references/bunjang/DESIGN.md +1 -1
  18. package/web/references/classting/DESIGN.md +251 -0
  19. package/web/references/coinone/DESIGN.md +218 -0
  20. package/web/references/devsisters/DESIGN.md +253 -0
  21. package/web/references/drnow/DESIGN.md +331 -0
  22. package/web/references/flo/DESIGN.md +306 -0
  23. package/web/references/fugle/DESIGN.md +250 -0
  24. package/web/references/gogolook/DESIGN.md +5 -0
  25. package/web/references/grip/DESIGN.md +250 -0
  26. package/web/references/hogangnono/DESIGN.md +308 -0
  27. package/web/references/hyundaicard/DESIGN.md +5 -0
  28. package/web/references/jkopay/DESIGN.md +249 -0
  29. package/web/references/jobkorea/DESIGN.md +310 -0
  30. package/web/references/krafton/DESIGN.md +230 -0
  31. package/web/references/laftel/DESIGN.md +253 -0
  32. package/web/references/lezhin/DESIGN.md +301 -0
  33. package/web/references/momoshop/DESIGN.md +279 -0
  34. package/web/references/mustit/DESIGN.md +282 -0
  35. package/web/references/payco/DESIGN.md +227 -0
  36. package/web/references/piccollage/DESIGN.md +277 -0
  37. package/web/references/riiid/DESIGN.md +228 -0
  38. package/web/references/trenbe/DESIGN.md +252 -0
  39. package/web/references/voicetube/DESIGN.md +227 -0
  40. package/dist/install-skills-UKEVE3KT.js.map +0 -1
@@ -0,0 +1,249 @@
1
+ ---
2
+ id: jkopay
3
+ name: "JKOPay"
4
+ country: TW
5
+ category: fintech
6
+ homepage: "https://www.jkopay.com"
7
+ primary_color: "#C9191D"
8
+ logo:
9
+ type: favicon
10
+ slug: "https://www.google.com/s2/favicons?domain=jkopay.com&sz=256"
11
+ verified: "2026-06-03"
12
+ omd: "0.1"
13
+ ---
14
+
15
+ # JKOPay
16
+
17
+ Taiwan's most widely used electronic payment platform, positioning itself as a full-spectrum fintech lifestyle companion — not just a wallet, but the infrastructure for daily life.
18
+
19
+ ## 1. Visual Theme & Atmosphere
20
+
21
+ JKOPay's visual language is built around approachable confidence: a bold JKO red on a clean white-to-light-gray canvas that reads as modern and trustworthy without the austerity of traditional banking. The interface uses a clear typographic hierarchy with PingFang TC at its core, prioritising readability for Chinese-speaking users across age groups. Card surfaces carry a subtle gradient from pure white to a warm gray (#F4F4F6), with a barely-there shadow (0 15px 30px -25px rgba(0,0,0,0.12)) that lifts them off the page without theatrical depth. Navigation adopts a frosted-glass treatment (rgba(255,255,255,0.80)) that anchors the interface without competing with content. The overall atmosphere is warm, civic, and frictionless — built for the street-level simplicity of scanning and paying in seconds.
22
+
23
+ ## 2. Color Palette & Roles
24
+
25
+ - **Brand Red (Primary):** `#C9191D` — primary action color; CTAs, brand highlights, active states, icon fills
26
+ - **Brand Red Hover:** `#D51B1F` — button hover state on primary CTAs
27
+ - **Brand Red Dark:** `#851113` — pressed/active state on primary interactive elements
28
+ - **Body Text:** `#42434A` — default text (rgb 66 67 74); high contrast on white surfaces
29
+ - **Dark Background:** `#171718` — footer, dark-mode panel backgrounds
30
+ - **Gray 900 / Dark Nav:** `#292F40` — section headings, heavy text on dark panels
31
+ - **Surface / Card:** `#F4F4F6` — card backgrounds, input fill, tag backgrounds
32
+ - **Border / Divider:** `#EDEDF1` — horizontal rules, card edges, list separators
33
+ - **Placeholder Text:** `#B7B8C4` — input placeholder, disabled labels
34
+ - **Blue Accent:** `#2E7DD9` — informational links, secondary highlights
35
+
36
+ ## 3. Typography Rules
37
+
38
+ JKOPay uses a CJK-first font stack led by PingFang TC, falling back through Apple system fonts and then the Noto/Source Han family for cross-platform consistency.
39
+
40
+ **Font stack:** `PingFang TC, apple-system, system-ui, BlinkMacSystemFont, pingfang-tc, aktiv-grotesk, source-han-sans-traditional, Segoe UI, Roboto, Helvetica Neue, 微軟正黑體, sans-serif`
41
+
42
+ **Scale:**
43
+ - Display / Hero: 56px (mobile) → desktop responsive
44
+ - Heading LG-1: 50px
45
+ - Heading LG-2: 42px
46
+ - Heading LG-3: 36px
47
+ - Body MD: 21.4px (custom class `text-body-md`)
48
+ - Body SM: 18px (custom class `text-body-sm`)
49
+ - Body SM-2: 14px
50
+ - Body SM-1 / Caption: 13px
51
+ - Base UI: 16px
52
+ - Button: 17px / `font-medium` (weight 500)
53
+
54
+ **Weights:** 500 (medium) for UI elements and buttons; 600 for section labels; 700 for display headlines.
55
+ **Line-height:** `1.5` base; custom leading classes (`leading-body-sm-1`) for dense CJK text.
56
+
57
+ ## 4. Component Stylings
58
+
59
+ ### Primary CTA Button
60
+
61
+ **Solid Red (Primary)**
62
+ - Background: `#C9191D`
63
+ - Text: `#FFFFFF`
64
+ - Border: none
65
+ - Radius: 12px
66
+ - Padding: 12px 29px
67
+ - Font: 17px / 500
68
+ - Hover Background: `#D51B1F`
69
+
70
+ **Ghost / Secondary**
71
+ - Background: `rgba(255,255,255,0.30)`
72
+ - Text: `#C9191D`
73
+ - Border: 1px solid `#C9191D`
74
+ - Radius: 9px
75
+ - Padding: 12px 24px
76
+ - Font: 17px / 500
77
+ - Hover Background: `rgba(134,134,134,0.063)`
78
+
79
+ ### Navigation Bar
80
+
81
+ **Top Nav**
82
+ - Background: `rgba(255,255,255,0.80)`
83
+ - Height: 64px
84
+ - Border: 0 solid `rgba(0,0,0,0.10)`
85
+ - Font: 16px / 500
86
+ - Text: `#42434A`
87
+
88
+ ### Card
89
+
90
+ **Standard Card**
91
+ - Background: `#F4F4F6`
92
+ - Border: 1px solid `rgba(244,244,246,0)`
93
+ - Radius: 20px
94
+ - Shadow: `0 15px 30px -25px rgba(0,0,0,0.12)`
95
+ - Padding: 16px
96
+
97
+ ### Tag / Badge
98
+
99
+ **Brand Tag**
100
+ - Background: `#F4F4F6`
101
+ - Text: `#C9191D`
102
+ - Radius: 40px
103
+ - Padding: 2px 12px
104
+ - Font: 13px / 500
105
+
106
+ ---
107
+ **Verified:** 2026-06-03
108
+ **Tier 1 sources:** https://www.jkopay.com/application (homepage HTML + Next.js CSS bundle); https://www.jkopay.com/application/_next/static/css/6d42544b8623d735.css (main CSS bundle, 68 KB); https://img.jkos.com.tw/official_jkos_image/logo-red-square.svg (official brand logo SVG); https://www.jkos.com/press.html (press/brand page); https://www.jkos.com/download_app.html (download page)
109
+ **Tier 2 sources:** getdesign.md/jkopay — NOT LISTED ("No designs found for 'jkopay'"). refero — no result for JKOPay (TW brand, not indexed).
110
+ **Conflicts unresolved:** none
111
+
112
+ ## 5. Layout Principles
113
+
114
+ JKOPay's homepage uses a single-column, full-bleed section layout on mobile, expanding to a constrained max-width container (≈1280px) on desktop with generous horizontal padding (4vw on large screens). Content sections alternate between white and light-gray (#F4F4F6) backgrounds, creating a visual rhythm without hard borders. The hero section stacks headline, subtext, and dual CTAs vertically, with a background photo covering the viewport. Feature cards are arranged in a 1-column (mobile) → 2–3-column (tablet/desktop) responsive grid. CTA buttons maintain a minimum width of 194px and are centered on mobile, left-aligned on desktop.
115
+
116
+ ## 6. Depth & Elevation
117
+
118
+ JKOPay uses a restrained, two-tier shadow system:
119
+
120
+ - **Tier 0 – Flat:** No shadow; used for inline text links, tags, navigation items.
121
+ - **Tier 1 – Card:** `0 5px 40px -20px rgba(0,0,0,0.078)` — subtle lift for brand-wrapper cards and icon containers.
122
+ - **Tier 2 – Modal / Floating:** `0 8px 16px 0 rgba(0,0,0,0.20)` — dialogs, dropdown panels, toast notifications.
123
+
124
+ The frosted-glass nav (`rgba(255,255,255,0.80)`) adds implicit elevation through translucency rather than shadow. Dark overlays use `rgba(0,0,0,0.50)` for modals and `rgba(0,0,0,0.80)` for full-screen drawers.
125
+
126
+ ## 7. Do's and Don'ts
127
+
128
+ ### Do
129
+ - Use `#C9191D` as the sole primary action color; keep all CTAs visually consistent.
130
+ - Apply PingFang TC as the first font in the stack for CJK content rendering.
131
+ - Maintain 12px border-radius on primary buttons and 20px on cards for brand consistency.
132
+ - Use the frosted-glass pattern (`rgba(255,255,255,0.80)`) for sticky navigation.
133
+ - Keep button text at 17px / 500 weight regardless of container size.
134
+ - Use the #F4F4F6 surface for card backgrounds; never use pure white cards on white pages.
135
+ - Maintain a minimum button width of 194px for standalone CTAs.
136
+ - Reserve `#2E7DD9` blue strictly for informational/link contexts, not actions.
137
+
138
+ ### Don't
139
+ - Never mix multiple accent colors within a single CTA row — one primary, one ghost maximum.
140
+ - Don't use font-weight 700 for body copy; reserve bold for hero headlines only.
141
+ - Avoid hard drop shadows deeper than Tier 2; JKOPay uses soft, spread shadows.
142
+ - Don't change button radius per breakpoint — 12px on desktop, 9px on mobile only for the ghost variant.
143
+ - Never use the brand red (`#C9191D`) for error states — keep error semantically distinct.
144
+ - Avoid placing content text below 13px to maintain CJK legibility standards.
145
+
146
+ ## 8. Responsive Behavior
147
+
148
+ JKOPay is built with Tailwind CSS and uses the breakpoints `sm` (640px), `md` (768px), `lg` (1024px), `xl` (1280px). Key responsive rules:
149
+
150
+ - **Hero headline:** 36px mobile → 42px sm → 50px lg
151
+ - **Primary button padding:** `py-[12px] px-[24px]` mobile → `py-[15px] px-[86px]` sm+
152
+ - **Card radius:** 20px mobile → 30px sm → consistent 20–24px on cards
153
+ - **Section padding:** 16px mobile → 25px md → 40–60px sm+
154
+ - **Grid columns:** 1-col mobile → 2-col md → 3-col lg for feature grids
155
+ - **Nav height:** fixed `4rem` (64px) with `calc(4rem + 2px)` on sm+ for hairline border
156
+
157
+ ## 9. Agent Prompt Guide
158
+
159
+ When building JKOPay-style UI:
160
+ - Start with a white or `#F4F4F6` background; use `#C9191D` for all primary interactive elements.
161
+ - Font stack must lead with `PingFang TC` for correct CJK rendering.
162
+ - Buttons: solid red (`#C9191D`) primary + ghost (`border: #C9191D, bg: transparent`) secondary; radius 12px desktop / 9px mobile ghost.
163
+ - Cards: `#F4F4F6` background, `20px` radius, subtle shadow `0 15px 30px -25px rgba(0,0,0,0.12)`.
164
+ - Navigation: sticky, `rgba(255,255,255,0.80)` backdrop, 64px tall, brand-red active links.
165
+ - Typography: 16px base, 17px buttons (medium 500), 21.4px body section text, 42–56px hero.
166
+ - Avoid deep shadows, loud gradients, or competing accent colors — the interface stays warm and uncluttered.
167
+ - Use `transition-timing-function: cubic-bezier(0.4,0,0.2,1)` (Tailwind's default easing) for interactive transitions.
168
+
169
+ ## 10. Voice & Tone
170
+
171
+ **Adjectives:** Approachable, empowering, matter-of-fact.
172
+
173
+ | Do | Don't |
174
+ |---|---|
175
+ | Use everyday Mandarin; keep sentences short and action-oriented | Use banking jargon or formal register |
176
+ | Lead with user benefit ("解鎖生活" — unlock life) | Lead with product features or technical specs |
177
+ | Use "你" (you) to address users directly | Use passive constructions or impersonal phrasing |
178
+ | Be warm but efficient — one idea per sentence | Over-explain or add hedging language |
179
+
180
+ **Voice samples (illustrative):**
181
+ - *Illustrative:* "不止支付,用手機聰明解鎖生活每一刻。" (More than payment — smartly unlock every moment of life with your phone.)
182
+ - *Illustrative:* "結帳只要出示個人條碼,輕鬆完成付款。" (Just show your barcode to complete payment — done in seconds.)
183
+ - *Illustrative:* "從早餐到晚餐,從捷運到便利商店,街口陪你走過每一個生活場景。" (From breakfast to dinner, from the MRT to the convenience store — JKO is with you at every moment of life.)
184
+
185
+ ## 11. Brand Narrative
186
+
187
+ JKOPay (街口支付) was born from a simple frustration: in 2015, cash still dominated Taiwan's street economy despite the country's technological sophistication. Kevin Hu, returning from Wall Street where he had worked as a hedge fund analyst, saw what mobile-first payment infrastructure had done in China and believed Taiwan deserved the same. With backing from the JKO Network ecosystem his family had built, he launched JKOPay with a mandate not of profit maximisation but of societal utility — "For me, the value of entrepreneurship lies in whether it makes people's lives more convenient."
188
+
189
+ The name itself — 街口 (jiē kǒu), meaning "street corner" or "intersection" — embeds the brand's core promise into its identity. JKOPay is not a bank app or a tech platform; it is the infrastructure of the everyday corner, the moment where daily life meets commerce. The brand grew by befriending the merchants others ignored: night market vendors, small-town convenience stores, neighbourhood restaurants. By 2023, JKOPay had become Taiwan's largest e-wallet by both user count and transaction volume, handling everything from QR-code payments and P2P transfers to insurance, investment, and hospital registration.
190
+
191
+ The brand's evolution reflects this ambition. The tagline shifted from the utilitarian "掃碼行動支付" (scan-code mobile payment) to the expansive "不止支付" (more than payment) — acknowledging that the product had outgrown any single category. JKOPay envisions itself as Taiwan's answer to an integrated fintech super-app: accessible enough for a grandmother at the wet market, sophisticated enough for the daily investor checking their Tuofu Bao savings account.
192
+
193
+ ## 12. Principles
194
+
195
+ 1. **Convenience is the product.** The interface must remove friction at every touchpoint — one tap to pay, one scan to complete. *UI implication:* Primary CTA is always above the fold; payment codes load instantly with no intermediate loading state displayed to the user.
196
+
197
+ 2. **Inclusive by design.** Taiwan's market spans every age and digital literacy level. Design must work for both the tech-native university student and the sixty-year-old market vendor. *UI implication:* Minimum touch targets of 48px; large body text (18–21px) for key transactional content; avoid icon-only navigation labels.
198
+
199
+ 3. **Trust is earned through transparency.** The brand grew in a conservative financial culture; clarity and directness are non-negotiable. *UI implication:* All fees, limits, and state changes must be surfaced proactively; no buried fine print. Success and error states are unambiguous.
200
+
201
+ 4. **The street corner, not the boardroom.** JKOPay's voice and visual language stay close to street-level Taiwan, not aspirational finance. *UI implication:* Photography shows real urban Taiwan — convenience stores, wet markets, MRT stations, not abstract lifestyle imagery. Typography favors clarity over elegance.
202
+
203
+ 5. **Ecosystem over transaction.** Every payment is an entry point to a broader financial life. *UI implication:* Post-payment screens offer relevant next actions (savings, cashback, merchant discovery) rather than a dead-end confirmation.
204
+
205
+ ## 13. Personas
206
+
207
+ *Illustrative — representative archetypes based on JKOPay's stated market position and public user research.*
208
+
209
+ **Illustrative Persona 1 — The Urban Commuter (小美, 28)**
210
+ A Taipei office worker who uses JKOPay for her morning coffee, MRT top-up, lunch delivery, and monthly utility bills. She values speed above all — she wants to pay and move on. She checks her cashback balance weekly and responds to in-app promotions for brands she already uses.
211
+
212
+ **Illustrative Persona 2 — The Night Market Merchant (阿伯, 55)**
213
+ A second-generation stall owner who adopted JKOPay when his regular customers started asking. He only needs the merchant QR code scan flow and weekly withdrawal. His design requirement: no clutter, large text, and a reliable receipt confirmation he can show customers.
214
+
215
+ **Illustrative Persona 3 — The Student Saver (志豪, 22)**
216
+ A university student who uses JKOPay for peer transfers ("找錢"), splitting meals with friends, and exploring JKOPay's Tuofu Bao micro-savings. He discovered the app because it offered the best cashback at FamilyMart. He is price-sensitive and motivated by gamified rewards.
217
+
218
+ **Illustrative Persona 4 — The SME Owner (雅雯, 42)**
219
+ A small business owner who integrated JKOPay for her e-commerce checkout and physical pop-up stalls. She needs the merchant dashboard for reconciliation and values JKOPay's broad customer reach (6 million+ users) as a marketing channel.
220
+
221
+ ## 14. States
222
+
223
+ - **Empty:** Illustration of a QR code scanner with the prompt "尚無交易記錄" (No transactions yet) and a single primary CTA to make the first payment.
224
+ - **Loading — Scan:** Animated concentric red rings pulse from the QR code centre; no spinner, motion stays within the barcode boundary.
225
+ - **Loading — Page:** Full-page skeleton with `#F4F4F6` shimmer bars replacing content blocks; nav and footer remain visible.
226
+ - **Error — Payment Failed:** Red-bordered inline alert banner (`#C9191D` left border, `#FFEEEB` background) with clear message and a retry CTA.
227
+ - **Error — Network:** Toast notification with `rgba(0,0,0,0.80)` dark background, white text, auto-dismisses after 4 seconds.
228
+ - **Success — Payment:** Full-screen confirmation with a bold checkmark icon in `#C9191D`, transaction amount, merchant name, and a "返回首頁" (Back to home) secondary link.
229
+ - **Skeleton:** Card skeletons use `#F4F4F6` base with a linear-gradient shimmer; maintains same height and radius as real cards.
230
+ - **Disabled:** Buttons drop to `rgba(201,25,29,0.40)` (60% opacity red) and `cursor: not-allowed`; text remains white for legibility.
231
+
232
+ ## 15. Motion & Easing
233
+
234
+ **Duration scale:**
235
+ - Micro (hover, focus ring): 150ms
236
+ - Standard (page transitions, modals): 250ms
237
+ - Expressive (QR scan animation, hero entrance): 800ms
238
+
239
+ **Easing:**
240
+ - Default interactive: `cubic-bezier(0.4, 0, 0.2, 1)` (Tailwind `ease-in-out` / Material standard)
241
+ - Entry (elements appearing): `ease-in` — `cubic-bezier(0.0, 0, 0.2, 1)`
242
+ - Exit (elements disappearing): `ease-out` 150ms
243
+
244
+ **Rules:**
245
+ - All interactive state changes (hover, focus, active) use the 150–200ms micro duration.
246
+ - Modal overlays fade in at 250ms `ease-in`; fade out at 250ms with visibility transition at 100ms `ease-in` offset.
247
+ - Page-level transforms (scroll-triggered reveals) use 800ms with AOS (animate-on-scroll) library.
248
+ - Never animate layout shifts — only opacity and transform changes.
249
+ - QR code scan pulse uses `transition: transform 0.8s` on concentric circles.
@@ -0,0 +1,310 @@
1
+ ---
2
+ id: jobkorea
3
+ name: "JobKorea"
4
+ country: KR
5
+ category: consumer-tech
6
+ homepage: "https://www.jobkorea.co.kr"
7
+ primary_color: "#083ccc"
8
+ logo:
9
+ type: favicon
10
+ slug: "https://www.jobkorea.co.kr/display/images/favicon.png"
11
+ verified: "2026-06-03"
12
+ omd: "0.1"
13
+ ---
14
+
15
+ # JobKorea
16
+
17
+ South Korea's leading AI career platform connecting 9+ million active job seekers with employers through personalized matching, salary intelligence, and community-driven career guidance.
18
+
19
+ ## 1. Visual Theme & Atmosphere
20
+
21
+ JobKorea's visual language is confident and data-forward — the UI is built around a deep royal blue (`#083ccc`, JK Blue 600) that signals authority and trust in a crowded recruitment market. Surfaces stay crisp white with an understated gray-scale hierarchy (`#f6f7f8` background through `#1a1a1e` near-black) so that job listings and CTA buttons read at a glance without fatigue. An accent orange (`#ff6d12`, AM Orange 500) is reserved sparingly for urgency cues — deadline badges, highlighted pay rates — creating a clear urgency hierarchy without overwhelming the functional tone. Since the 2023 "Dreammark" brand refresh the product has leaned into a more youthful, mobile-first energy with pill-radius search bars (border-radius: 999px), gradient-glowing AI search inputs, and subtle card elevation — moving away from its legacy portal feel toward a modern career-management platform.
22
+
23
+ ## 2. Color Palette & Roles
24
+
25
+ - **JK Blue 600 (Primary):** `#083ccc` — primary CTAs, active states, links, focus rings
26
+ - **JK Blue 500:** `#1b55f6` — hover surfaces, secondary brand tint
27
+ - **JK Blue 400:** `#4c7afb` — lighter interactive states, selected chip backgrounds
28
+ - **JK Blue 50:** `#f0f2fa` — brand-tinted backgrounds, pill tag fills
29
+ - **AM Orange 500 (Point):** `#ff6d12` — urgency badges, deadline labels, job-ad highlights
30
+ - **Gray 950 (Near-Black):** `#1a1a1e` — primary body text, headings
31
+ - **Gray 900:** `#292c32` — secondary text, card content
32
+ - **Gray 700:** `#575f6c` — tertiary labels, meta information
33
+ - **Gray 500:** `#949ba8` — placeholder text, disabled labels
34
+ - **Gray 100:** `#e6e8ea` — dividers, default input borders
35
+ - **Gray 50:** `#f6f7f8` — page background, search bar fill
36
+ - **Red 500 (Error):** `#fc3b3b` — form errors, destructive indicators
37
+ - **Green 500 (Success):** `#0dbc7c` — application success, offer received
38
+ - **Base White:** `#ffffff` — card surfaces, modal backgrounds
39
+
40
+ ## 3. Typography Rules
41
+
42
+ JobKorea's UI type is set exclusively in **Pretendard**, with Korean fallbacks to Apple SD Gothic Neo and Malgun Gothic. The type scale is named by variant with an embedded px size.
43
+
44
+ | Role | Token | Size / Line-height | Weight |
45
+ |---|---|---|---|
46
+ | Display 1 | d1-48 | 48px / 64px | 700 |
47
+ | Display 2 | d2-36 | 36px / 48px | 700 |
48
+ | H1 | h1-32 | 32px / 42px | 700 |
49
+ | H2 | h2-28 | 28px / 34px | 700 |
50
+ | H3 | h3-24 | 24px / 32px | 700 |
51
+ | H4 | h4-20 | 20px / 28px | 600 |
52
+ | H5 | h5-18 | 18px / 24px | 600 |
53
+ | Body 1 | b1-17 | 17px / 25px | 400 |
54
+ | Body 2 | b2-16 | 16px / 24px | 400 |
55
+ | Body 3 | b3-15 | 15px / 22px | 400 |
56
+ | Body 4 | b4-14 | 14px / 20px | 400 |
57
+ | Caption 1 | c1-13 | 13px / 18px | 400 |
58
+ | Caption 2 | c2-12 | 12px / 17px | 400 |
59
+ | Caption 3 | c3-11 | 11px / 15px | 400 |
60
+
61
+ Heading tokens carry `letter-spacing: -0.5` for tighter display. Body and caption tokens use `letter-spacing: 0`.
62
+
63
+ ## 4. Component Stylings
64
+
65
+ ### Buttons
66
+
67
+ **Primary (size-48)**
68
+ - Background: `#083ccc`
69
+ - Text: `#ffffff`
70
+ - Height: 48px
71
+ - Radius: 10px
72
+ - Font: 16px / 700
73
+ - Padding: 0 16px
74
+
75
+ **Primary Hover**
76
+ - Background: `#012ca2`
77
+ - Text: `#ffffff`
78
+ - Height: 48px
79
+ - Radius: 10px
80
+ - Font: 16px / 700
81
+
82
+ **Secondary Outlined (size-48)**
83
+ - Background: `#ffffff`
84
+ - Text: `#1a1a1e`
85
+ - Border: 1px solid `#d5d8dc`
86
+ - Height: 48px
87
+ - Radius: 10px
88
+ - Font: 16px / 400
89
+
90
+ **Disabled Filled**
91
+ - Background: `#d5d8dc`
92
+ - Text: `#949ba8`
93
+ - Height: 48px
94
+ - Radius: 10px
95
+ - Font: 16px / 400
96
+
97
+ **Small (size-40)**
98
+ - Background: `#083ccc`
99
+ - Text: `#ffffff`
100
+ - Height: 40px
101
+ - Radius: 10px
102
+ - Font: 14px / 700
103
+
104
+ **Ghost Text Button**
105
+ - Background: `#f6f7f8`
106
+ - Text: `#083ccc`
107
+ - Height: 40px
108
+ - Radius: 10px
109
+ - Font: 14px / 500
110
+
111
+ ### Text Fields
112
+
113
+ **Default (size-52)**
114
+ - Background: `#ffffff`
115
+ - Border: 1px solid `#e6e8ea`
116
+ - Radius: 10px
117
+ - Padding: 0 16px
118
+ - Height: 52px
119
+ - Font: 15px / 400
120
+
121
+ **Focused**
122
+ - Background: `#ffffff`
123
+ - Border: 1px solid `#1a1a1e`
124
+ - Radius: 10px
125
+ - Height: 52px
126
+ - Font: 15px / 400
127
+
128
+ **Error**
129
+ - Background: `#ffffff`
130
+ - Border: 1px solid `#f11e1e`
131
+ - Radius: 10px
132
+ - Height: 52px
133
+ - Font: 15px / 400
134
+
135
+ **Disabled**
136
+ - Background: `#f6f7f8`
137
+ - Border: 1px solid `#e6e8ea`
138
+ - Radius: 10px
139
+ - Height: 52px
140
+ - Font: 15px / 400
141
+
142
+ ### Search Bar
143
+
144
+ **AI Search (pill)**
145
+ - Background: `#f6f7f8`
146
+ - Border: 1px solid gradient (animated pink → amber → blue)
147
+ - Radius: 999px
148
+ - Height: 48px
149
+ - Padding: 0 16px
150
+ - Font: 15px / 400
151
+
152
+ **Standard Search**
153
+ - Background: `#f6f7f8`
154
+ - Radius: 999px
155
+ - Height: 48px
156
+ - Padding: 0 16px
157
+ - Font: 15px / 400
158
+
159
+ ### Job Cards
160
+
161
+ **Default Card**
162
+ - Background: `#ffffff`
163
+ - Border: 1px solid `#e6e8ea`
164
+ - Radius: 10px
165
+ - Padding: 16px
166
+
167
+ **Elevated Card**
168
+ - Background: `#ffffff`
169
+ - Radius: 12px
170
+ - Padding: 16px
171
+
172
+ ---
173
+ **Verified:** 2026-06-03
174
+ **Tier 1 sources:** https://www.jobkorea.co.kr (homepage HTML), https://fe-static-cdn.jobkorea.co.kr/display/web/_next/static/css/ff9addcaa74e70a7.css (main CSS bundle with full token system), https://fe-static-cdn.jobkorea.co.kr/display/web/_next/static/css/fd29aacb4b8b02e0.css, https://fe-static-cdn.jobkorea.co.kr/display/web/_next/static/css/fa90ad3a5df82bc3.css, https://www.jobkorea.co.kr/company/1517115 (Worxphere/JobKorea company page)
175
+ **Tier 2 sources:** getdesign.md/jobkorea — NOT LISTED (no data). refero — no results for JobKorea.
176
+ **Conflicts unresolved:** The 2023 Sodiumpartners rebrand narrative describes "JOBKOREA Black" as the primary brand color, but the live CSS token system (`data-brand-theme=jk`) clearly maps `--themecolor-brand-primary` to `--color-jkblue-600` (#083ccc). The deep blue is used for all primary buttons and interactive states in the current production build; the near-black (#1a1a1e) functions as the primary text color, not the brand color.
177
+
178
+ ## 5. Layout Principles
179
+
180
+ JobKorea uses a single max-width content container of **1024px** on desktop, centering all content with full-bleed section backgrounds. The page has two primary breakpoints: mobile-first (≤600px) and desktop (≥1024px), with no intermediate tablet breakpoint declared. Job listing grids use CSS grid or flex with 8px base spacing unit (multiples: 4, 8, 12, 16, 20, 24, 32, 40, 48px). Navigation is sticky with a white background and bottom divider. The GNB maintains a fixed height and collapses into a hamburger on mobile.
181
+
182
+ ## 6. Depth & Elevation
183
+
184
+ JobKorea's elevation system has four named shadow levels:
185
+
186
+ - **List shadow** (subtle rows): `0 4px 8px rgba(0,0,0,0.02)` — used on list items
187
+ - **Secondary shadow** (card rest): `0 4px 16px rgba(0,0,0,0.07)` — default card state
188
+ - **Default shadow** (interactive card): `0 4px 16px rgba(0,0,0,0.12)` — hovered cards, modals
189
+ - **Up shadow** (bottom sheet): `0 -2px 12px rgba(0,0,0,0.12)` — bottom sheet, sticky CTAs
190
+ - **Button Big shadow**: `0 0 12px rgba(0,0,0,0.20)` — large floating action buttons
191
+
192
+ Modals use a `rgba(0,0,0,0.6)` dimmer overlay. Tooltips use `#1a1a1ed9` (85% near-black) background.
193
+
194
+ ## 7. Do's and Don'ts
195
+
196
+ ### Do
197
+ - Use JK Blue 600 (`#083ccc`) for all primary interactive elements — buttons, active tabs, checked states
198
+ - Apply Pretendard at the specified weight/size tokens; never mix ad-hoc font sizes outside the named scale
199
+ - Use pill-radius (999px) for search inputs and tag chips; use 10px radius for cards and form controls
200
+ - Reserve AM Orange (`#ff6d12`) strictly for urgency signals — deadline countdowns, urgent-hire badges
201
+ - Keep body copy at Gray 950 (`#1a1a1e`) on white; use Gray 700 (`#575f6c`) for secondary metadata
202
+ - Use `0 4px 16px rgba(0,0,0,0.12)` elevation for interactive cards; flat (no shadow) for static content
203
+ - Provide skeleton loaders matching the exact card height/radius before content loads
204
+
205
+ ### Don't
206
+ - Don't use AM Orange for primary buttons or general interactive states — it belongs to AlbaMon's brand
207
+ - Don't apply the gradient search border animation to non-AI-powered inputs; it signals AI capability
208
+ - Don't use border-radius values outside the token set (avoid ad-hoc 5px, 15px, 20px)
209
+ - Don't place body text below Gray 700 (`#575f6c`) on white — fails WCAG AA at small sizes
210
+ - Don't stack more than two elevation levels in the same scroll context (list + modal is fine; list + card + modal is not)
211
+ - Don't use the gray-950 near-black (#1a1a1e) as a button background except for the "inverse" button variant
212
+
213
+ ## 8. Responsive Behavior
214
+
215
+ JobKorea is a mobile-first Next.js application (React server components). Below 600px the layout shifts to single-column with full-width cards; the search bar transitions from 600px fixed-width to fluid 100%. Navigation collapses from a full horizontal GNB to a bottom tab bar on mobile. The 1024px container clamps on desktop. Font sizes scale down one step at mobile: Display tokens are avoided; H3 (24px) is the largest practical heading. Button heights prefer the 48px variant on desktop, 40px on mobile for comfortable touch targets.
216
+
217
+ ## 9. Agent Prompt Guide
218
+
219
+ When building JobKorea-style UI:
220
+ - Scaffold the layout with a max-width 1024px centered container, background `#f6f7f8`
221
+ - Primary button: background `#083ccc`, text `#ffffff`, height 48px, border-radius 10px, font-weight 700, font-size 16px (Pretendard)
222
+ - Secondary button: border 1px solid `#d5d8dc`, background `#ffffff`, same radius/height
223
+ - Input field: border 1px solid `#e6e8ea`, background `#ffffff`, height 52px, radius 10px, 16px padding, placeholder color `#949ba8`
224
+ - Search pill: background `#f6f7f8`, radius 999px, height 48px
225
+ - Card: background `#ffffff`, border 1px solid `#e6e8ea`, radius 10px, padding 16px, shadow `0 4px 16px rgba(0,0,0,0.12)` on hover
226
+ - Body text: `#1a1a1e` (primary), `#575f6c` (secondary), `#949ba8` (placeholder)
227
+ - Error text/border: `#fc3b3b`; Success: `#0dbc7c`; Urgency badge: `#ff6d12` background
228
+
229
+ ## 10. Voice & Tone
230
+
231
+ JobKorea's voice is **direct, encouraging, and data-grounded** — it speaks like a well-informed career advisor who respects the user's time.
232
+
233
+ | Do | Don't |
234
+ |---|---|
235
+ | Lead with concrete benefit ("AI가 맞춤 공고 5개를 찾았어요") | Vague aspiration without specificity ("당신의 꿈을 펼치세요") |
236
+ | Use short, active sentences in informal Korean (-해요 register) | Jargon-heavy HR speak ("핵심 역량 기반 매칭 알고리즘") |
237
+ | Acknowledge the user's current situation before offering next step | Jump straight to a CTA without context |
238
+ | State numbers — application rates, salary percentiles, recruiter views | Use superlatives without proof ("최고의", "가장 좋은") |
239
+
240
+ Voice samples (illustrative):
241
+ - *"지난주보다 지원자가 30% 늘었어요. 지금 지원하면 더 눈에 띌 수 있어요."*
242
+ - *"딱 맞는 공고 3개가 생겼어요. 한번 확인해볼까요?"*
243
+ - *"이력서를 업데이트하면 채용담당자에게 더 잘 보여요. 5분이면 충분해요."*
244
+
245
+ ## 11. Brand Narrative
246
+
247
+ JobKorea was established in 1996 and launched its employment portal in 1998 as one of Korea's first dedicated online job boards. Over nearly three decades it grew into the nation's largest HR platform — now part of the Worxphere group — hosting 9.32 million active resumes and connecting approximately one million monthly active job seekers with employers across every industry and region.
248
+
249
+ In 2023, JobKorea unveiled its "Dreammark" brand identity, created by branding agency Sodiumpartners. The refresh moved the platform's narrative from a utilitarian job-listing site toward a personalized career manager, with a bold JK Blue identity system and a new brand mascot "Jobko" that embodies the mission: guiding people toward jobs that fit their real selves. The company articulates its purpose as making "people's dreams become jobs, and companies' jobs become dreams," with a social-responsibility dimension — donating 100 KRW per submitted resume and per job posting to welfare programs for people with disabilities and economically marginalized youth.
250
+
251
+ Today, Worxphere operates JobKorea alongside AlbaMon (part-time), GameJob, NineHire (ATS), and JobPlanet (employer reviews), building toward a full-stack AI HR tech platform. The platform has ranked #1 in Korean employment portal brand power (K-BPI) for three consecutive years (2023–2025), and its AI-powered "LOOP AI" recommendation engine now powers the core job-discovery experience on both web and mobile.
252
+
253
+ ## 12. Principles
254
+
255
+ 1. **Personalization over volume.** JobKorea surfaces fewer, better-matched opportunities rather than an overwhelming list. *UI implication:* The default job feed shows AI-ranked picks, not raw chronological listings; chip filters and saved preferences shape what the user sees from the first visit.*
256
+
257
+ 2. **Transparency builds trust.** Salary data, recruiter view counts, application-to-hire ratios, and company reviews are surfaced inline on job cards — not behind a paywall. *UI implication:* Job cards include a salary indicator and a "N명 지원" (N applied) count next to the title.*
258
+
259
+ 3. **Speed respects the user.** A resume can be submitted in two taps from a job card; the full application flow targets under 60 seconds. *UI implication:* Destructive or multi-step actions require confirmation, but forward-direction actions — apply, save, share — are single-tap with immediate feedback.*
260
+
261
+ 4. **Data earns the right to advise.** JobKorea uses behavioral signals (viewed jobs, resume completeness, location) before making AI recommendations, never cold. *UI implication:* Empty states prompt profile completion rather than showing random content; progress indicators show how close the user is to unlocking personalized matches.*
262
+
263
+ 5. **Inclusive access.** The platform serves job seekers at every career stage — new graduates, mid-career transitioners, seniors, and part-timers — with differentiated content lanes rather than a one-size feed. *UI implication:* Specialized channels (IT, Design, Senior, Startup) are surfaced in persistent GNB tabs and not buried in filter menus.*
264
+
265
+ ## 13. Personas
266
+
267
+ *Illustrative — not based on published JobKorea research.*
268
+
269
+ **신입 취준생 (First-time Graduate)** — 24, finishes university in February, applying to large conglomerates and IT firms. Checks the app daily on commute; motivated by application counters and peer benchmarks. Needs resume templates, accepted cover letter examples, and aptitude test prep links within one tap.
270
+
271
+ *Illustrative — not based on published JobKorea research.*
272
+
273
+ **경력 이직자 (Mid-Career Switcher)** — 33, 8 years in marketing, wants to move from agency to in-house. Has a complete profile but is selective; visits weekly, not daily. Values salary benchmarking, company culture reviews, and recruiter contact over raw listing volume.
274
+
275
+ *Illustrative — not based on published JobKorea research.*
276
+
277
+ **채용담당자 (HR Manager)** — 40, in-house recruiter at a 300-person tech company. Uses the employer dashboard to post jobs, review applicants, and send messages. Needs fast bulk-action tools, applicant status tracking, and analytics on listing performance.
278
+
279
+ *Illustrative — not based on published JobKorea research.*
280
+
281
+ **긱 워커 (Gig / Part-time Seeker)** — 28, freelancer top-up income via AlbaMon integration. Wants quick-apply shifts near their location, hourly rate transparency, and immediate availability confirmation.
282
+
283
+ ## 14. States
284
+
285
+ - **Empty (no results):** Illustrated character (Jobko mascot) with headline "맞는 공고가 없어요" + sub-copy suggesting filter adjustment and a ghost CTA to reset filters; never a blank white box
286
+ - **Loading skeleton:** Cards render as gray shimmer blocks matching the exact height and border-radius of the real card (radius 10px, height ~120px); page background remains `#f6f7f8`
287
+ - **Error — network:** Inline banner alert with Red 50 (`#fbf5f5`) background, red border, and retry button; page content beneath is not unmounted
288
+ - **Error — form validation:** Input border shifts to `#f11e1e`, an error message in Red 500 (`#fc3b3b`) at 13px appears below the field; focus moves to the first error field
289
+ - **Success — application submitted:** Full-bleed success toast (Green 500 `#0dbc7c` left-border snackbar) with "지원 완료!" message; job card gains a "지원완료" gray badge and the apply button becomes disabled
290
+ - **Skeleton (list):** Job listing rows show as stacked shimmer bars (title 16px height, company 12px height) with 8px gap; no spinner overlay
291
+ - **Disabled:** Buttons use Gray 200 background (`#d5d8dc`) with Gray 500 text (`#949ba8`); inputs use Gray 50 background (`#f6f7f8`) with normal border; cursor: not-allowed
292
+ - **Hover (card):** Card elevates from flat border to `0 4px 16px rgba(0,0,0,0.12)` shadow; transition 200ms cubic-bezier(0.4, 0, 0.2, 1)
293
+
294
+ ## 15. Motion & Easing
295
+
296
+ **Duration scale:**
297
+ - 150ms — micro interactions (button press ripple, checkbox check, tab underline shift)
298
+ - 200ms — component state changes (card hover elevation, input focus ring)
299
+ - 300ms — panel transitions (filter drawer slide, dropdown open)
300
+ - 6s — AI search gradient animation (continuous loop, `ease-in-out`)
301
+
302
+ **Easing:**
303
+ - Standard: `cubic-bezier(0.4, 0, 0.2, 1)` (Material "standard" / ease-in-out) — used for virtually all UI transitions
304
+ - Decelerate: `cubic-bezier(0, 0, 0.2, 1)` — elements entering the screen (drawer slide-in, toast appear)
305
+
306
+ **Rules:**
307
+ - All color, background-color, border-color, box-shadow, opacity, and transform transitions use the standard easing
308
+ - The AI search bar gradient (`animation: gradient-flow-dynamic 6s ease-in-out infinite`) is the only always-on animation; all other motion is user-triggered
309
+ - Respect `prefers-reduced-motion`: disable the gradient animation and reduce all durations to ≤50ms
310
+ - Skeleton shimmers use a CSS `animation: shimmer` keyframe (opacity 0.4→1→0.4), 1.5s linear infinite