숲's reference documents #0182ff as a documented primary color, Pretendard for typography, 30px corner radius. SOOP is a Korean live-streaming and creator platform whose public ecosystem brings live channels, community discovery, esports, and developer-linked services under one service name.

Primary
#0182ff
Typography
Pretendard
Radius
30px

Evidence snapshot

verified v2
Claims grounded
148/148 · 100%
Sources
3 surfaces · 7 sources
UI font basis
frontmatter · high
Components
16 documented · 10 interactive

Not backed by evidence

  • Component states are described in prose, not given per-state values
Design System
Soop logo

Soop

SOOP is a Korean live-streaming and creator platform whose public ecosystem brings live channels, community discovery, esports, and developer-linked services under one service name. The company changed its name from AfreecaTV to SOOP in 2024, and its official ESG material describes the current direction as an AI- and data-connected global platform, including a global-service launch and overseas operating hubs. On the captured public routes, that platform breadth resolves into a compact, feed-oriented interface: charcoal and blue sit beside pale gray discovery surfaces, with small rounded topic chips, a prominent pill search field, and dense creator/content rows. The visual impression is operational rather than editorial—an environment for finding a broadcast, a category, or an esports context quickly. This reference keeps that public product expression distinct from corporate identity material, advertising specifications, and any authenticated broadcaster or viewer flow.

01

Color Palette

Brand

Neutrals

02

Typography

Type Scale

Verified size, weight, line-height, and tracking. Family is omitted when unresolved.

15px15px · 400 · 18px
Observed public-home title and metadata samples only; no complete display scale is claimed.
body14px · 400 · 16.8px
Repeated public-home text and the measured search input; the loaded product family is Pretendard.

Fonts

ui
Pretendard
Open · OFL
Live webfont loaded in preview
Install via GitHub · orioncactus/pretendard
03

Spacing & Shape

Spacing

PurposeValuePreview
chip-inline8px
search-input-inline-start16px
search-input-inline-end70px

Border Radius

ElementValuePreview
chipStructured token30px
search-inputStructured token45px

Elevation

none
04

Guidelines

Do and Don't guidelines parsed from DESIGN.md.

Do

  • Preserve the loaded Pretendard family and the measured 14px/400 public-input hierarchy when recreating the documented sibling.
  • Use #0182ff only as the documented local public accent, with pale #f6f6f9 / #e8ebed discovery surfaces and clear charcoal text hierarchy.
  • Keep the search input’s 45px pill geometry separate from the 30px topic-chip geometry.
  • Treat creator, community, esports, corporate, advertising, and developer surfaces as distinct evidence domains.

Don't

  • n't turn a blue text/underline sample into a universal blue filled CTA, error, success, or selected-state colour.
  • n't substitute FOUREYES, Gmarket, Noto Sans, NotoSansThai, SSFlowerRoadRegular, or a system fallback for loaded Pretendard.
  • n't read the renderer's button type on a §4 link as button semantics; each link keeps its element name.
  • n't invent hover, focus, pressed, disabled, validation, modal, toast, or motion values; the capture holds no state frame and no interaction record.
05

Components

Buttons

esports-accent-button
Background#fcfcfd
Text#0182ff
Border1px rgba(117, 123, 138, 0.2)
Radius18px
Padding0px 31px
Text style13px / 500 / normal Pretendard
statesdefault on one button; the bundle holds no state frame
Use: Esports outline button with a blue label at surface-3::[data-omd-capture="228"], 141 x 36
esports-filter-button
Background#ffffff
Text#525661
Border1px #e2e4e9
Radius18px
Padding0px 14px
Text style15px / 400 / normal Pretendard
statesrest on 29 buttons; capture 107, first in the row of capture 108, records bg #17191c, fg #ffffff and no border, but the capture gives it no aria-selected or class, so no selected value is declared; the bundle holds no state frame
Use: Esports outline pill button at surface-3::[data-omd-capture="108"], 82 x 35
home-alarm-button
Background#fcfcfd
Radius0px 0px 30px 30px
Shadowrgba(0, 0, 0, 0.05) 0px 1px 1px 0px
size30px x 29px
statesdefault on 7 buttons on the home snapshot; the bundle holds no state frame
Use: Alarm button (button.alarm) in the content-link card row at home::[data-omd-capture="33"]; its font size is 0px, so no label style is claimed
home-broadcast-title-link
Text#17191c
Text style15px / 400 / 21px Pretendard
statesdefault on 24 links on the home snapshot and 6 on esports (a.title, surface-3 capture 180); the bundle holds no state frame
Use: Broadcast-card title link (a) at home::[data-omd-capture="56"], two 21px lines high
home-live-button
Background#ff2f00
Text#fcfcfd
Radius30px
Padding0px 7px
Text style11px / 500 / 21px Pretendard
statesdefault on one button on the home snapshot; the bundle holds no state frame
Use: Live marker button (button.live) in the content-link card row at home::[data-omd-capture="31"], 36 x 20; its four-character label is set in the button itself
home-login-button
Backgroundtransparent
Text#525661
Radius6px
Padding0px 6px
Text style15px / 400 / 18px Pretendard
statesdefault on the home header; the esports header button (surface-3 capture 7) records fg #d5d7dc with the same geometry and type; the bundle holds no state frame
Use: Header login button (button.btn-login) at home::[data-omd-capture="6"], 51 x 40
home-nickname-link
Text#17191c
Text style14px / 600 / 18px Pretendard
statesdefault on 24 links on the home snapshot and 6 on esports (surface-3 capture 179); the bundle holds no state frame
Use: Broadcast-card creator nickname link (a.nick) at home::[data-omd-capture="55"]

Tabs

TabTabTab
esports-gnb-link
Backgroundtransparent
Text#ffffff
Border2px transparent on the bottom edge
Padding0px 6px
Text style16px / 600 / normal Pretendard
statesrest on six links (capture 11-16); capture 10 in the same row records fg #0182ff and a 2px #0182ff bottom border, but the capture gives it no aria-selected or class, so no selected value is declared; the bundle holds no state frame
Use: Esports header navigation link (a) at surface-3::[data-omd-capture="11"]
TabTabTab
home-banner-thumb-tab
Backgroundtransparent
Radius14px
Padding6px
selectedbg rgba(255, 255, 255, 0.1)
size260px x 72px
statesrest on three items of a four-item vertical rail; the item with class swiper-slide-thumb-active (the rail marker for the banner slide on show) differs from them by its fill and is recorded as selected; the first item carries the positional class swiper-slide-active and records the transparent rest fill; the bundle holds no state frame
Use: Home banner thumbnail rail item (li.swiper-slide) beside the banner player; radius, padding and size sit on the li

Badges

esports
esports-status-badge
Background#e2e4e9
Text#acb0b9
Radius6px
Padding0px 6px
Text style13px / 400 / 22px Pretendard
statesdefault on four badges (capture 236-239); the bundle holds no state frame
Use: Esports status label (a.staus) at surface-3::[data-omd-capture="236"], 59 x 22
home
home-category-chip
Background#e8ebed
Text#757b8a
Radius30px
Padding0px 8px
Text style12px / 400 / 20px Pretendard
statesdefault on 42 chips on the home snapshot and 6 on esports (surface-3 capture 181); the bundle holds no state frame
Use: Broadcast-card category chip (a.category) at home::[data-omd-capture="57"]
home
home-tag-chip
Background#f6f6f9
Text#757b8a
Radius30px
Padding0px 8px
Text style12px / 400 / 20px Pretendard
statesdefault on 86 chips on the home snapshot and 21 on esports (surface-3 capture 182); the bundle holds no state frame
Use: Broadcast-card tag chip (a) at home::[data-omd-capture="65"]

Cards

home-broadcast-thumbnail
home-broadcast-thumbnail
Background#f1f2f4
Radius16px
size271px x 152px
statesdefault on 16 frames at 271 x 152 and 8 at 272 x 153 on the home snapshot; esports (a.thumb-default, surface-3 capture 177) records the same fill and radius at 220 x 124; the bundle holds no state frame
Use: Broadcast thumbnail frame (a) at home::[data-omd-capture="53"]: the fill sits behind the image and a bottom padding (152.156px) sets the height; it holds no text, so no label style is claimed
home-content-card
home-content-card
Background#f6f6f9
Radius15px
size369px x 110px
statesdefault on 15 cards on the home snapshot; the bundle holds no state frame
Use: Home content-link card (a) at home::[data-omd-capture="30"]; its own text colour and type equal the page body (#000000, 12px / 400 / 14.4px), so it is treated as a container and no label style is claimed

Avatars

A
home-profile-avatar
Border1px rgba(117, 123, 138, 0.2)
Radius50%
size38px x 38px
statesdefault on 24 avatars on the home snapshot and 6 on esports (surface-3 capture 178); the bundle holds no state frame
Use: Broadcast-card profile image link (a.thumb) at home::[data-omd-capture="54"]; it holds no text, so no label style is claimed

Inputs

home-search-input
Background#f6f6f6
Text#525661
Radius45px
Padding0px 70px 0px 16px
Text style14px / 400 / 16.8px / Pretendard
statesdefault on both home snapshots; the bundle holds no state frame for any element, so hover, focus, and pressed values are not recorded; no disabled or error variant was observed
Use: Repeated public-home input, selectors home::[data-omd-capture="2"] and surface-2::[data-omd-capture="2"].

Related design systems