29CM is the editorial select-shop of Korean e-commerce — a curated department store that happens to live online, whose homepage reads more like the cover of a printed lookbook than the landing page of a retailer. The signature surface is pure white (#ffffff) carrying pure black (#000000) display type and quietly minimal chrome: no shadows, no gradients, no decorative iconography. The composition leans on the photography to do the heavy lifting and on typography to do the directing. Where Musinsa is street-utility and Ohouse is interior-lifestyle, 29CM is the magazine — generous margins, oversized image columns, captions that read like editorial blurbs, and an unmistakable belief that white space is the most expensive material in the room.
The defining typographic move is Pretendard Variable running across the entire surface in a tight three-step hierarchy: 30px/700 category headlines, 22px/700 editorial card titles, 12-15px body. There is no display-only face, no decorative weight; the same Korean sans does the magazine title, the product price, and the footer note. Buttons are unornamented — the workhorse CTA is a 1px #C4C4C4 outlined pill on white with 4px corners ("더보기"), and the floating help affordances ("FAQ", "1:1 문의") are solid #000000 rectangles with white text and 2px radius, treated like editorial captions rather than UI controls. There is no "primary blue", no accent purple, no brand red. The brand color is the absence of color.
Image presentation is the second signature: full-bleed editorial photography sets the rhythm, each PT (Presentation) or Showcase tile leads with one large image and one Korean sentence underneath as caption. Prices are demoted — set at 12px/700, sitting under a 12px/400 product title in muted rgba(93,93,93,0.64) (a soft grey nearly invisible until you look for it). The visual order is: photo first, story second, product third, price last. That ordering is the brand's whole thesis.
Key Characteristics:
#ffffff page background, pure #000000 ink — no off-whites, no warm neutralsrgba(93,93,93,0.64) — a single transparent grey, not a swatch#C4C4C4 outlines for ghost buttons — never colored, never thickerSpecial-Order, Showcase, Lookbook, 29Magazine) at 24-30px/700 — the brand's editorial register made literal#000000): Body ink, headings, inverted CTA backgrounds, footer headings. The brand's only "color" in the strictest sense.#ffffff): Page background, ghost-button background, inverted-CTA text. Total white — not #fafafa, not #f5f5f5.rgba(93, 93, 93, 0.64)): Secondary captions, "옵션비 별도" hints, badge counts, inactive nav items. The single most-used non-primary color on the site, and it is a transparency, not a swatch — meaning the actual rendered colour shifts with whatever sits behind it.#c4c4c4): The only border colour used for ghost-style buttons and editorial tile dividers. Mid-light, neutral, no warm tint.#ff0066 / #ff003c family): Appears only on discount badges and percent-off pills on product cards. Never used for UI affordances or CTAs.#000000 background with #ffffff text — the inverse of the page, treated as a high-contrast, low-frequency control.#fafafa, no warm cream). Backgrounds are #ffffff, full stop.Pretendard Variable, with fallback chain ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"| Role | Size | Weight | Line Height | Notes |
|---|---|---|---|---|
| Section Headline (Special-Order / 29Magazine) | 30px | 700 | ~1.13 | Lowercase-English / mixed Korean editorial headlines |
| Sub-Headline (lower category) | 24px | 700 | ~1.21 | Smaller category nav items |
| Editorial Card Title | 22px | 700 | 29.92px (1.36) | The signature card title — PT subjects, themed collections |
| Editorial Body / Description | 15px | 400 | 22.5px (1.50) | Card descriptions, editorial blurbs |
| Nav Link (primary) | 16px | 200-800 | normal | 200 = inactive secondary, 800 = active "BEST" / current section |
| Floating CTA ("FAQ", "1:1 문의") | 15px | 400 | normal | Black bg, white text, 2px radius |
| Ghost CTA ("더보기") | 14px | 700 | normal | White bg, 1px #c4c4c4 border |
| Footer Heading | 13px | 700 | 18.2px (1.40) | Caps Latin section labels — NOTICE, ABOUT US, MY ORDER, HELP |
| Product Name (card) | 12px | 400 | 16.32px (1.36) | Black ink, restrained, sits under the image |
| Product Price | 12px | 700 | 16.32px (1.36) | Same size as the name — price never dominates the card |
| Price Caption ("옵션비 별도") | 12px | 400 | 16.32px (1.36) | In rgba(93,93,93,0.64) grey |
Special-Order, Showcase, PT, 29Magazine) at display sizes (24-30px), while Korean dominates body and editorial copy. The mixing is intentional — the English serves as a magazine table-of-contents register.normal almost everywhere. No tight tracking, no display-tracking compensation. The font is well-cut enough to carry display sizes without spacing intervention.Ghost Outline (the workhorse — "더보기")
#ffffff#0000001px solid #c4c4c4Inverted Solid (floating help — "FAQ", "1:1 문의")
#000000#ffffffCategory Pill (navigation count badges — "63", "175", "6K")
rgba(93, 93, 93, 0.64)Sale Discount Pill (product card overlay)
#ffffff or transparent#ff0066 (sale red)Editorial Tile (PT / Showcase / Magazine)
#ffffff#000000 / lh 29.92px sitting directly under the image#000000 / lh 22.5pxProduct Card
#ffffff#000000 directly under the image#000000 (or red #ff0066 if on sale)rgba(93,93,93,0.64)#ffffff#c4c4c4 border and 4px radius matching the ghost button.#ffffff (transparent over hero on scroll)#ffffff#000000, all-caps Latin (NOTICE, ABOUT US, MY ORDER, MY ACCOUNT, HELP)#000000> chevron at the right — the only systematic icon use on marketing surfaces.Verified: 2026-05-13 (omd:add-reference CREATE)
Tier 1 sources: www.29cm.co.kr/ (live DOM inspect, Pretendard Variable + #000/#fff + 22px/700 editorial cards + 1px #c4c4c4 ghost CTAs + 2px-radius floating black CTAs — confirmed via getComputedStyle on home surface, scroll-loaded editorial tiles, footer, and floating help affordances)
Tier 2 sources: getdesign.md/29cm — no entry returned ("No designs found for '29cm'"); styles.refero.design/?q=29cm — no 29CM-tagged styles found (search returned generic editorial/gallery references unrelated to 29CM)
Conflicts unresolved: none — Tier 2 was silent on every claim, so Tier 1 live observation is the sole source. Token values in this section come exclusively from live getComputedStyle() on www.29cm.co.kr 2026-05-13.
FAQ, 1:1 문의) — the smallest radius in the system, used on the highest-contrast control더보기), boxed form inputs on PDP| Level | Treatment | Use |
|---|---|---|
| Flat (Level 0) | No shadow, no border | Page background, editorial tiles, product cards — the dominant state |
| Outline (Level 1) | 1px solid #c4c4c4 | Ghost CTAs, boxed form inputs |
| Inverted (Level 2) | #000000 background on #ffffff page | Floating help CTAs, footer headings — "elevation by colour inversion" |
| Image-as-elevation | Photography on white | Editorial tiles — the photograph itself reads as the lifted layer, no shadow needed |
| Focus | 2px black outline offset | Keyboard focus ring on interactive elements |
Shadow Philosophy. 29CM's marketing surface has no shadow system. The page is flat by design — depth comes from photographic content sitting on white, not from CSS box-shadows. The closest thing to "elevation" is the high-contrast inverted black CTA, which reads as an editorial pull-quote callout rather than a UI button. Adding a 0px 4px 8px rgba(0,0,0,0.1) shadow to a 29CM tile would immediately look off-brand — it would push the page from "magazine" toward "SaaS dashboard".
#000000 and #ffffff as the only structural colours; rgba(93,93,93,0.64) for muted captions.#000000 bg / #ffffff text / 2px radius) sparingly for high-priority, persistent affordances only.#fafafa, #f5f5f5) — 29CM is pure white.| Name | Width | Key Changes |
|---|---|---|
| Mobile | <768px | 1-column editorial tiles, 2-column product grid, hamburger nav, 16-20px page margin |
| Tablet | 768-1024px | 2-column editorial, 3-column product grid, condensed nav |
| Desktop | 1024-1440px | 2-3 column editorial, 4-column product grid, full top nav row |
| Large Desktop | >1440px | 1280px max centered content, generous margins flanking |
#ffffff#000000rgba(93,93,93,0.64) (transparent grey on white = #5d5d5d at 64% opacity)#c4c4c4#ff0066 family (badge-only)#000000 bg, #ffffff text, 2px radius#ffffff bg, #000000 text, 1px solid #c4c4c4, 4px radiusPretendard Variable, ui-sans-serif, system-ui, sans-serif#000000, then 8px gap, then 15px weight 400 description in #000000. No border, no shadow, no radius. White page background."#c4c4c4 border, 4px radius, 14px Pretendard Variable weight 700 black text, padding 16px 16px 16px 20px, height 52px. Trailing chevron > right-aligned."#000000, then 12px weight 700 price in #000000 directly below. Caption row '옵션비 별도' in 12px weight 400 rgba(93,93,93,0.64). No card border, no shadow."#000000 background, #ffffff text, 2px radius, padding 4px 8px 4px 14px, height 31px, 15px Pretendard Variable weight 400. Fixed bottom-right, 24px inset."NOTICE, ABOUT US, HELP). Link body 13-14px weight 400 black. No background tint, no top border."#000000 on #ffffff. Reach for rgba(93,93,93,0.64) only for secondary captions. Reach for any other colour only if you can name a specific brand reason.29CM speaks like an editor curating a magazine, not a marketer running a sale — calm, considered, never excited, never urgent. The brand book (Guide to better 29CM) defines the voice as personable but quiet: the brand persona is described as "착하지만 엉뚱한" (kind but offbeat), and the tone is treated as a deliberate craft layer that must stay consistent across every product caption, push notification, and email. Korean is the primary voice; English appears only as section labels and category names (Special-Order, Showcase, 29Magazine) borrowed from print-magazine convention.
| Context | Tone |
|---|---|
| Editorial card titles | Short Korean phrases, often poetic or sensory (나폴리의 산들바람, 쿨링 시스템). No imperatives. |
| Editorial card body | One sensory sentence + invitation. 스치는 바람처럼 여유로운 여름을 담은 지노키오의 여름 컬렉션을 같이 구경해요. — the verb endings (~해요) are friendly-formal, never ~합니다. |
| Product names | Brand-led, restrained — [29CM 단독] (uni)Breeze 아이보리 솔리드 파자마. Brackets carry exclusivity markers. |
| CTAs | 더보기, 자세히 보기, 장바구니 담기. Bare verb-stems with ~기 endings. Never English (SHOP NOW), never exclamatory. |
| Price captions | Bare numerals + 원 later in the line. Modifier captions (옵션비 별도, 무료배송) sit quietly under the price in muted grey. |
| PT (Presentation) copy | Long-form editorial — opens with a thesis sentence, then product context, then story. Reads like a Brunch essay. |
| Push / email | Same magazine register — 오늘의 컬렉션을 큐레이션했어요 rather than 세일 시작! 지금 클릭!. |
| Empty states | Single Korean line explaining the absence — 아직 찜한 상품이 없어요. Never 데이터가 없습니다. |
Forbidden phrases. 최저가, 초특가, 긴급세일, 오늘만, English exclamatory CTAs (SHOP NOW!, BUY!), emoji of any kind on marketing surfaces, urgency-driven countdowns (마감 임박!), and the corporate-formal ~합니다 ending on consumer-facing voice. (~합니다 is reserved for legal disclosure pages only.) Stacked superlatives on a single product (프리미엄 럭셔리 시그니처 컬렉션) read as Coupang-grade promo and are off-brand.
29CM was founded in 2011 as a media-commerce hybrid — the C stands for Commerce and the M stands for Media — under the parent operator Cafe24's incubator before passing through several owners. The name itself encodes the thesis: 29 centimeters is, in the brand's own framing, "the closest distance at which two people can open their hearts" — the editorial premise that shopping is less about transaction than about taste, and that 29CM stands at conversational distance from its customer rather than retail distance (NamuWiki / Asiance). The brand's official identity statement is "Guide to Better Choice" — a curated selection promise rather than a discount promise.
The company was acquired by Musinsa (무신사) in 2021 and now operates as the editorial counterweight inside the Musinsa group: where Musinsa is street-utility and scale, 29CM is curation and editorial depth, with a dedicated PT (Presentation) format introduced in 2013 that publishes ~1.5 long-form brand stories per week (29CM Brunch — likenoothers). The 2023 Seongsu offline store and the 2023 BX renewal reinforced the editorial framing — the wordmark uses dotted "2" and "9" digits to express the brand's "착하지만 엉뚱한" (kind-but-offbeat) personality, and the visual identity centres on a ruler-mark motif that frames the wordmark "like a container for the brand".
The internal brand book is titled Guide to better 29CM, 더 나은 29CM를 위한 가이드북 — roughly 180 pages, with four parts: "우리다운 방식" (our way), "우리의 초상" (our portrait — brand persona as a person, complete with imagined clothes and weekend habits), "우리만의 목소리" (our voice — tone-and-manner guide for copy), and "그들의 취향" (their taste — nine taste-based customer personas, explicitly rejecting demographic segmentation) (29CM Brand Book — Brunch).
What 29CM refuses: discount-led merchandising (no permanent sale banners), demographic segmentation (age/gender bins are replaced by taste-based personas), urgency theatre (no countdowns, no "마감 임박"), and decorative chrome (no gradients, no shadows, no brand colour beyond black-on-white). What it embraces: long-form editorial inside the storefront, photography as the primary voice, Korean as the primary language with English borrowed from magazine convention, and the conviction that the customer is a reader first and a buyer second.
The image is the headline. Every editorial tile leads with a photograph at 22px-headline scale of visual weight. The Korean caption sits underneath, never overlaid. If the image cannot carry the tile, the tile is not ready. UI implication: Reserve the top 60-70% of every editorial unit for photography. Captions are subordinates, not co-headlines.
Price is the punctuation, not the verb. Product prices render at 12px/700 — the same size as the product name. Promoting price violates the editorial hierarchy and reframes the page as discount commerce. UI implication: Price never exceeds product-name size on a card. Discount red is a single accent, used sparingly on percent badges only.
Whitespace is more expensive than ink. 29CM's curation is proven by what is removed, not what is added. Page margins of 48px, section gaps of 32px, and an absence of dividers are the brand's structural commitment. UI implication: Default to more padding, fewer borders. If a layout reads "spacious", you are likely close to correct.
One face, three weights, no italic. Pretendard Variable is the entire typographic system. Emphasis is by weight (400 → 700 → 800). Adding a serif companion or a display face dilutes the editorial register. UI implication: Reject design contributions that introduce a second family. Bold is the only emphasis primitive.
Korean is the primary voice; English is the section label. Body copy, captions, error states, and onboarding are Korean. English appears at display sizes for navigation categories — borrowed from print-magazine convention, not adopted as parallel UI language. UI implication: Avoid English microcopy in body strings. Reserve English for top-level category names where it functions as decoration.
Restraint is the brand. The only "colour" is the discount-red badge. The only "elevation" is colour inversion. The only iconography is a trailing chevron. Every additional visual element competes with the photography. UI implication: Before adding a shadow, a border, an icon, or a colour — name a specific editorial reason. If there isn't one, remove.
The customer is a reader. PT, Showcase, and 29Magazine treat brand stories as long-form editorial. The site rewards browsing time, not click-through speed. Conversion follows attention; attention follows curation. UI implication: Allow long pages. Don't compress brand stories into "view more" gated cards. The full editorial is the funnel.
Personas below are fictional archetypes informed by 29CM's stated taste-based segmentation (9 personas defined in the internal brand book) and publicly described 29CM user profiles. Not individual people.
지윤 (Jiyoon), 29, Seoul. Marketing manager at a small lifestyle startup. Opens 29CM on her phone during the commute and on desktop at lunch. Reads PT pieces front-to-back before adding anything to cart — the editorial is the reason she's there. Owns one item from at least 12 different niche Korean brands, none of which she would have discovered on Musinsa. Resists discount notifications; deletes the app immediately if it starts pushing "오늘만" banners.
민호 (Minho), 34, Seongsu. Industrial designer. Treats 29CM as a curated showroom rather than a shop. Goes to the Seongsu offline store on weekends to handle objects in person, then buys online a week later. Will spend ₩280,000 on a single ceramic vase without flinching but considers a ₩9,900 cable organizer beneath consideration. The brand-story PT format is the deciding factor on every purchase above ₩100,000.
서연 (Seoyeon), 26, Busan. Recent grad, working her first office job. Uses 29CM as her "taste education" — she follows specific brand collections that 29CM has curated and slowly builds a wardrobe around them. Knows the difference between 29Magazine and Showcase. Reads Lookbook on Sunday evenings like other people read magazines. Has never used a 29CM coupon code.
현우 (Hyeonwoo), 41, Gangnam. Senior consultant. Buys gifts on 29CM — for partners, clients, parents. The site's editorial framing solves a problem ordinary commerce can't: it produces gift recommendations that feel "considered" rather than "expensive". Trusts the 29CM curation enough to buy without comparison shopping. Reads PT for vocabulary he can use in the card.
| State | Treatment |
|---|---|
| Empty (wishlist / cart) | Single Korean line of #000000 15px weight 400 body text explaining the absence (아직 찜한 상품이 없어요, 장바구니가 비어있어요), plus one ghost outline CTA below (상품 둘러보기). Never an illustration, never a mascot. |
| Empty (search / filter) | One line of 14px rgba(93,93,93,0.64) caption (검색 결과가 없어요). No button — user adjusts filters themselves. |
| Loading (first paint) | Flat grey blocks at #f5f5f5 (functional, not styled) at the final layout's geometry. No shimmer animation on editorial tiles — would compete with photography. |
| Loading (more products) | Bottom-of-list 3-dot loader in #000000. No overlay, no skeleton — the existing list stays visible. |
| Error (inline field) | 1px #ff003c border on the input, error text below in #ff003c 13px weight 400. One sentence (이메일 형식이 올바르지 않아요). Friendly-formal ~요 ending. |
| Error (toast) | #000000 background, #ffffff 14px weight 400 text, 2px radius matching the inverted CTA, bottom-center placement, 3s auto-dismiss. No icon. |
| Error (screen-blocking) | Reserved for server outage. White screen, centered single-line message in #000000 16px weight 700, ghost CTA below (다시 시도하기). No illustration. |
| Success (inline) | Brief 200ms flash of the #000000/#ffffff inversion on the affected control — toggle flip, like-button activation. No green checkmark on routine UI. |
| Success (purchase confirmation) | Dedicated confirmation screen. Black-on-white order number in 22px/700, item summary below in 15px/400, single ghost CTA (주문 내역 보기). Money figures rendered in 22px/700 with comma separators. |
| Skeleton | #f5f5f5 blocks at final dimensions, 0px radius (matching the editorial-tile and product-card geometry). 1.0s fade pulse, never shimmer. Never used on prices — those render as -- until resolved. |
| Disabled | Button opacity drops to 0.4. Border colour does not change — disabled ghost buttons retain #c4c4c4 border so geometry stays stable when re-enabled. |
| Sale badge active | #ff0066 text on white tile corner — the single chromatic state on the marketing surface. Used for percent-off only, never for "NEW" or "BEST" (those are weight-only treatments in nav). |
Durations (named, not raw milliseconds):
| Token | Value | Use |
|---|---|---|
motion-instant | 0ms | Toggle flips, like-button state changes |
motion-quick | 150ms | Hover state on ghost buttons, focus ring fades |
motion-standard | 250ms | Default — image hover scale, sheet opens, tile reveal |
motion-editorial | 400ms | Editorial transitions — hero image cross-fade, PT chapter advance |
motion-page | 350ms | Full-screen route transitions |
Easings:
| Token | Curve | Use |
|---|---|---|
ease-out | cubic-bezier(0.2, 0.0, 0.0, 1.0) | Appearing — sheets enter, tiles reveal, hovers settle |
ease-in | cubic-bezier(0.4, 0.0, 1.0, 1.0) | Leaving — dismissals, pops |
ease-standard | cubic-bezier(0.4, 0.0, 0.2, 1.0) | Two-way transitions — accordion expand, tab content |
linear | linear | Image scrubbing in editorial galleries — preserves perceptual neutrality |
Signature motions.
motion-standard with ease-out; the surrounding tile chrome does not move. The motion is photographic, not interface — the photograph leans toward the cursor.motion-editorial with ease-out. The stagger between tiles is 80-120ms, mimicking page-turn rhythm rather than dashboard pop-in.#c4c4c4 border darkens to #000000 over motion-quick, no fill change. The change is felt, not announced — typical of editorial restraint.motion-quick. No transform, no shadow added. The brand never animates depth.prefers-reduced-motion: reduce, all motion-* tokens collapse to motion-instant. Image hover scale disables. Cross-fades replace translates. The site stays usable; just less kinetic.29CM is the editorial select-shop of Korean e-commerce — a curated department store that happens to live online, whose homepage reads more like the cover of a printed lookbook than the landing page of a retailer. The signature surface is pure white (#ffffff) carrying pure black (#000000) display type and quietly minimal chrome: no shadows, no gradients,
Brand
Accent
Neutrals
Semantic
Type Scale
Rendered in system-ui to clearly show scale & weight.
Fonts
Spacing
| Purpose | Value | Preview |
|---|---|---|
| Density | compact | |
| Base unit | 4px | |
| Section gap | 32px | |
| Card padding | 12px | |
| Element gap | 12px |
Border Radius
| Element | Value | Preview |
|---|---|---|
| buttons | 2px | |
| inputs | 2px | |
| cards | 2px | |
| dialogs | 2px | |
| badges | 2px | |
| pillPill | 9999px |
Borders
| Element | Value | Preview |
|---|---|---|
| Border | 1px solid #c4c4c4 |
Elevation
Do and Don't guidelines parsed from DESIGN.md.
Do
Don't
Buttons
Cards & Containers