OVERVIEW

어두운 캔버스 위,
데이터의 신호.

운동의 치트키 케이스 스터디의 디자인 시스템이에요. 디자인 시스템은 의사결정의 압축이에요 — 이 문서의 목적은 "이 고민을 다시 하지 않게" 만드는 것이고, 모든 페이지는 반복되는 질문에 대한 답으로 썼어요. 모든 수치는 style.css :root와 피그마 변수에서 실측했고, 사이트가 항상 원본이에요. HEX 코드 대신 토큰명으로 소통하는 것이 첫 번째 약속이에요.

디자인 원칙

원칙의미실천
신호는 하나씩그린=러닝·액션, 퍼플=헬스·프리미엄화면당 신호색은 한 위계만. 헤드라인 그린 키워드 1개
반복 대신 변주동일 요소의 나열은 위계를 죽인다같은 크기 3연속 금지 · 대/중/소 · 계단 오프셋 32/64/128
여백은 콘텐츠빈 구간이 밀도를 만든다섹션 배경 bg ↔ surface-1 교대(3연속 금지)
근거 있는 수치모든 숫자엔 출처가 있다각주 병기("자체 설문 기반 추정값이에요")

시스템 지도

Foundations(토큰) → Components(요소) → Patterns(조합) → Guidelines(운용) 순으로 추상에서 구체로 내려가요. 컴포넌트 문서는 코드잇 디자인 시스템의 구성(구성 요소 → 상태 → 스펙 → 사용 규칙)을 벤치마킹했어요. 여기에 치트키 DS(대비 사전검증·비교표), Material 3(스테이트 레이어·토큰 3계층), Primer(컴포넌트 상태 표기), Polaris(컴포넌트별 카피 규칙)의 문서 장치를 더했어요.

컴포넌트 상태

Primer 방식이에요. 모든 컴포넌트가 같은 완성도일 수 없으니, 상태를 명시해요. 표시 없는 컴포넌트를 쓰다 깨지는 것보다, 실험 중이라고 적혀 있는 편이 나아요.

컴포넌트사이트Figma상태
ButtonStableStable4개 상태·3개 변형 확정
ChipStableStable
Checkbox · RadioStableStable
Text FieldBetaBeta에러 상태 실사용 검증 전
Navigation BarStableStable4탭 고정
FABBetaBetaQuick Menu · Go to Top 두 변형
OverflowBetaStable컨텍스트 메뉴 트리거

Stable 안심하고 사용 · Beta 사용 가능하나 변경될 수 있음 · Deprecated 새로 쓰지 않기(대체안 명시)

BRAND

Logo · Voice

브랜드는 두 가지로 말해요 — 워드마크와 말투.

워드마크

운동의 치트키
  • 서체: Paperlogy 900 — 디스플레이 전용, 본문에는 사용하지 않아요
  • 기본색 #fff (White) — 배경 명도에 관계없이 교체하지 않아요
  • 네온 그린 배경 위에서만 #0A0A0A로 반전 허용
  • SVG 소스: assets/img/cover-logo-text.svg

컬러 사용 원칙

Neon Green #B6FF3D
주 브랜드 컬러 — CTA, 액티브 상태, 강조점에만
Neon Purple #B026FF
세컨더리 브랜드 — 그린과 교차하지 않고 단독으로 사용
Neutral #E5E5E5 · #7A7A7A · #4A4A4A
텍스트 3단계 — 계층 분리, 배경 4단계로 뎁스 표현

Voice & Tone

원칙O (이렇게)X (이렇게 말고)
"-요"체지금 출발하면 내일 도착해요지금 출발하시면 내일 도착합니다
무인칭38%가 더 오래 사용했어요저희 데이터에 따르면 사용 시간이 늘었습니다
수치 근거쿠션이 7mm 더 두꺼워요쿠션이 더 좋아요
단정 금지초보자에게 잘 맞아요초보자용이에요
FOUNDATIONS

Color

컬러는 2계층이에요. Primitive(순수 색값)를 정의하고, Semantic(역할 토큰)이 이를 참조해요. 작업 시엔 반드시 시맨틱 토큰명으로 소통해요. 스펙·핸드오프 문서에도 원시 HEX 대신 토큰명을 적어요 — 값이 바뀌어도 문서가 낡지 않아요.

Primitive — Gray Scale

계열
gray-990#0A0A0A최심도 배경
gray-960#111111표면 1
gray-940#161616표면 2
gray-920#1A1A1A보더 최약
gray-900#1D1D1D표면 3
gray-850#262626보더 기본
gray-780#383838보더 강조
gray-650#4A4A4A텍스트 최약
gray-450#7A7A7A텍스트 보조
gray-100#E5E5E5텍스트 기본

Primitive — Neon

green-300#C8FF5F호버 전용
green-400#B6FF3D기준색 (--neon-green)
green-700 (dim)#6B8F24눌림·딤
purple-400#B026FF기준색
purple-700 (dim)#6D1AA0보더·약화

Primitive — Chart / Data Viz

도넛 차트·바 차트 시리즈 색이에요. 브랜드 네온 컬러와 동시에 쓸 수 있도록 채도를 맞췄어요.

용도
--chart-blue#4A9EFF가격·스펙 계열 (도넛 2구간)
--chart-orange#FFB347지인 추천 계열 (도넛 4구간)

Semantic Tokens

토큰참조용도 · 규칙
--bggray-990페이지 배경. 다른 곳에 쓰지 않기
--surface-1 / 2 / 3gray-960 / 940 / 900교차 섹션 · 카드/디바이스 · 호버 상승면
--border-lo / border / -higray-920 / 850 / 780구분선은 lo부터 — hi는 아이콘·강조 테두리만
--text / -mid / -logray-100 / 450 / 650본문 → 보조 설명 → 각주·번호. 3단계 외 값 금지
--neon-greengreen-400러닝 · 액션 · 키워드. 대면적 사용 시 텍스트는 --bg
--neon-green-hovergreen-300 #C8FF5F호버 전용 — 직접 쓰지 않고 상태 레이어에서만
--neon-green-dimgreen-700 #6B8F24Pressed · 보더 약화
--neon-purplepurple-400헬스 · 프리미엄. 그린과 같은 위계에 동시 사용 금지
--neon-purple-dimpurple-700 #6D1AA0퍼플 보더·약화 상태
--text-hi#B6FF3D (= --neon-green)강조 텍스트 — 헤드라인 키워드·수치 하이라이트
--text-bright#F5F7FA최고 밝기 텍스트 — 순백 대신 헐레이션 없는 흰색

Status Color

상태 전달에만 사용하는 색이에요. 브랜드 색(그린·퍼플)과 동시에 한 화면에 쓰지 않아요.

#FF1744 · Error #B6FF3D · Success #FFD600 · Warning
상태용도규칙
Error#FF1744에러 메시지 · 삭제 · 경고배경은 15% 투명도만 — 대면적 사용 금지
Success--neon-green완료 · 달성 · 저장 확인러닝 도메인과 같은 색 — 맥락으로 구분
Warning#FFD600주의 · Beta 태그 · 미완성어두운 배경 전용 — 밝은 배경에서 대비 부족

대비 검증 (실측)

역할 조합을 사전 검증해둬요 — 아래 조합 외의 색 조합은 만들지 않는 게 규칙이에요.

조합대비판정규칙
그린 #B6FF3D on #0A0A0A16.9 : 1AAA본문 크기까지 자유 사용
블랙 #0A0A0A on 그린16.9 : 1AAA그린 버튼 레이블 — 항상 블랙
퍼플 #B026FF on #0A0A0A4.31 : 1AA 본문 탈락큰 글자(24px+)·보더·글로우 전용
화이트 on 퍼플 #B026FF4.60 : 1AA퍼플 버튼 레이블 — 항상 화이트
라이트퍼플 #C77DFF on #0A0A0A7.36 : 1AA+작은 퍼플 텍스트가 필요할 때의 대체색
본문 #E5E5E5 on #0A0A0A15.9 : 1AAA순백(#FFF)은 헐레이션 때문에 쓰지 않아요
DO

헤드라인에서 키워드 한 곳만 그린으로: "질문이 대화가 돼요."

DON'T

한 문장에 그린·퍼플 동시 강조, 그린 배경 위 화이트 텍스트(항상 --bg 블랙).

FOUNDATIONS

Typography

두 서체의 역할이 겹치지 않아요. Paperlogy는 소리치는 곳(디스플레이·헤드라인), Pretendard는 설명하는 곳(본문·라벨·수치). 이 경계가 무너지면 페이지 전체 위계가 무너져요.

서체 패밀리

패밀리웨이트역할파일
Paperlogy900 Black · 800 ExtraBold디스플레이 · 섹션 헤드라인 · 브랜드 워드마크assets/fonts/Paperlogy-*.woff2
Pretendard Variable400–800 (가변)본문 · 캡션 · 라벨 · 수치 · UI 텍스트vendor/pretendard/

타입 스케일 (사이트 실측)

치트키Display · Paperlogy 900 · clamp(48~96px) · lh 1.05 · ls −0.02em
질문이 대화가 돼요.Headline · Paperlogy 800 · clamp(28~44px) · lh 1.25
서브 타이틀은 프리텐다드 700Title · Pretendard 700 · 16~18px · lh 1.5
본문은 프리텐다드 400~500, 회색 미드 톤으로 한 발 물러나요.Body · Pretendard 400–500 · 14~15px · lh 1.8~1.85
SECTION LABEL · 01Label · Pretendard 600–700 · 10~11px · ls +0.12~0.16em · 대문자
Arrows 68
arrow-up
arrow-down
arrow-left
arrow-right
chevron-up
chevron-down
Communication 44
mail-01
message-circle-01
phone-01
chat-01
notification-01
send-01
General 117
search-01
settings-01
home-01
heart-01
star-01
bookmark-01
Files 50
file-01
folder-01
download-01
upload-01
file-check-01
file-text-01
Education 39
book-01
certificate-01
graduation-cap-01
award-01
target-01
microscope
Images 22
image-01
camera-01
image-plus
image-check
crop-01
filter-lines
System 4
alert-circle
check-circle
info-circle
x-circle

규칙

  • Paperlogy는 두 웨이트만. 900은 커버·챕터 디스플레이, 800은 섹션 헤드라인. 700 이하로 얇게 쓰지 않아요.
  • 자간의 방향이 반대예요. 큰 글자(디스플레이)는 좁게(−0.02em), 작은 라벨은 넓게(+0.12em 이상). 반대로 쓰면 어색해져요.
  • 본문은 word-break: keep-all — 한국어 어절 단위 줄바꿈이 전 요소 기본값이에요.
  • 수치 강조(87%, −40%)는 Pretendard 800 + 네온 컬러. Paperlogy로 숫자를 치지 않아요 — 숫자는 데이터의 목소리라 본문 서체가 맞아요.
DO

헤드라인(Paperlogy 800) 아래 본문(Pretendard 400) — 대비가 위계를 만들어요.

DON'T

본문을 Paperlogy로 쓰거나, 헤드라인을 Pretendard 900으로 대체. 라벨에 자간 없이 대문자만 쓰는 것.

FOUNDATIONS

Spacing

4px 배수 기반 17단계예요. 컴포넌트 내부는 sp-2~7, 컴포넌트 사이는 sp-8~11, 섹션 사이는 sp-13~16 — 세 구간을 넘나들지 않는 것이 리듬의 핵심이에요.

스케일

토큰주 용도
sp-1 ~ 42 · 4 · 6 · 8아이콘-텍스트 간격, 칩 내부
sp-5 ~ 712 · 16 · 24버튼 패딩, 카드 내부 요소
sp-2020px탭·칩 그룹 간격 — sp-6·7 사이 보간값
sp-8 ~ 932 · 40카드 패딩, 카드 사이
sp-10 ~ 1148 · 56제목-본문 그룹 사이
sp-12 ~ 1364 · 80서브섹션 사이
sp-14 ~ 1696 · 120 · 160섹션 세로 패딩(--section-y: 100px), 챕터 전환

시맨틱 스페이싱 (상황 이름)

반복되는 간격 결정에는 이름을 붙여요 — 간격이 어휘가 되면 고민을 다시 하지 않아요.

이름상황
label-to-headline8px (sp-4)섹션 번호 라벨 → 헤드라인
headline-to-lead16px (sp-6)헤드라인 → 리드 문단
between-chips8px (sp-4)칩·태그 나열 간격
group-gap48px (sp-10)본문 그룹 → 다음 그룹
card-pad32~40px (sp-8~9)카드 내부 패딩
section-y100px섹션 세로 패딩 — --section-y 하나로만 통제
chapter-gap150px+챕터 디바이더 상단 — 한 호흡 쉬는 자리

규칙

  • 가까운 것은 더 가깝게, 먼 것은 확실히 멀게. 라벨→헤드라인 8px, 헤드라인→본문 16px, 본문→다음 그룹 48px처럼 격차를 계단식으로.
  • 섹션 세로 리듬은 --section-y(100px) 하나로 통제 — 개별 섹션에서 임의 값을 넣지 않아요.
  • 모바일(640px 이하)에서는 섹션 패딩만 60~70%로 줄이고 컴포넌트 내부 간격은 유지해요.
FOUNDATIONS

Shape

Radius · Drop Shadow · Divider 세 요소로 컴포넌트의 깊이와 경계를 표현해요. 모서리는 요소 크기를 따라 작은 것은 각지게, 큰 것은 부드럽게 — 깊이는 그림자가 아닌 표면 밝기로.

Radius 스케일

--r-xs
4px · 체크박스

--r-sm
8px · 버튼

--r-card
12px · 소형카드

--r-md
16px · 카드

--r-lg
22px · 패널

--r-xl
28px · 모달

--r-2xl
32px · 바텀시트

--r-3xl
40px · 커버 카드

--r-full
9999px · 칩·FAB

토큰주 용도
--r-xs4px체크박스 · 컬러 스와치
--r-sm8px버튼 · 인풋 · Overflow · 코드 블록
--r-card12px탭 상단 · mkt-panel 카드 · 유저플로우 카드 — sm·md 사이 보간
--r-md16px소형 카드 · 컨텍스트 메뉴
--r-lg22px패널 · 중형 카드
--r-xl28px모달 · 다이얼로그
--r-2xl32px바텀시트 상단 · 대형 카드
--r-3xl40px커버 inner 카드 (.cvr-inner) — 화면 가득한 요소에 부드러움 부여
--r-full9999px칩 · 태그 · FAB · 뱃지

Drop Shadow

다크 테마에서 그림자는 잘 보이지 않아요. 기본적으로 표면 밝기(surface 사다리)로 깊이를 표현하고, 꼭 필요한 경우에만 글로우로.

shadow-sm

0 2px 8px rgba(0,0,0,.35)

shadow-md

0 4px 16px rgba(0,0,0,.45)

glow-green

0 0 24px rgba(182,255,61,.18)

glow-purple

0 0 24px rgba(176,38,255,.18)

토큰용도
--shadow-sm0 2px 8px rgba(0,0,0,.35)드롭다운 · 툴팁 · 소형 카드
--shadow-md0 4px 16px rgba(0,0,0,.45)모달 · 바텀시트 · 컨텍스트 메뉴
--glow-green0 0 24px rgba(182,255,61,.18)러닝 도메인 핵심 수치 강조 (절제 사용)
--glow-purple0 0 24px rgba(176,38,255,.18)헬스 도메인 강조 요소 (절제 사용)

Divider

요소 간 경계선이에요. 색이 아닌 선 하나로 — 명시적 구분이 꼭 필요한 곳에만 써요.

border-lo (#1A1A1A) — 섹션 내부 항목 구분
border (#262626) — 컴포넌트 경계 기본
border-hi (#383838) — 강조 구분선 · 아이콘 테두리
  • Divider는 마지막 수단이에요 — 여백만으로 충분히 구분되면 선을 넣지 않아요.
  • 연속 항목(테이블 행)은 border-lo, 컴포넌트 간 경계는 border, 강조 영역은 border-hi.

규칙

  • 칩·태그처럼 완전한 알약형은 --r-full(9999px) — 어중간한 곡률이 제일 어색해요.
  • 같은 카드 안에서 부모보다 자식의 radius가 크면 안 돼요. 부모 --r-lg면 자식은 --r-sm~--r-md.
  • 다크에서 그림자는 불투명도를 2배로 — Fluent 기준(라이트 14% → 다크 28%). 이미 토큰에 반영돼 있어요.
FOUNDATIONS

Layout · Grid

1440px 캔버스 위 1248px 콘텐츠 — 12컬럼 그리드예요. 규칙은 하나: 같은 크기를 연속 두 번 쓰지 않기. 대/중/소 3단계 변주가 에디토리얼 리듬을 만들어요.

기준값

토큰설명
--page-max1440px페이지 최대 폭 (캔버스)
--content-max1248px콘텐츠 최대 폭 — 12컬럼 · 거터 24px
--page-pad-x96px좌우 여백 (모바일 20~24px)
--section-y100px섹션 세로 패딩

브레이크포인트

지점변화
1024px여백 축소, 폰 목업 스케일 다운
900px사이드 요소 해제 · 오프셋 축소(위계는 유지)
640px본격 1열 전환 — IA 4→2열, 페르소나 1열, 웨이브 2열
480pxUF 세로 전환 · 표는 가로 스크롤

리듬 원칙

  • 크기 3단계(대/중/소) 변주 — 폰 목업 밴드는 줄마다 위계를 다르게. 같은 크기 4대 일렬은 금지 패턴이에요.
  • 오프셋 — 인용·카드류는 좌/우/좌 55~60% 폭 배치. 세로로 8vh 정도 어긋나게.
  • 풀블리드는 아껴서 — 마퀴·테이프 등 화면 끝까지 미는 요소는 페이지에 2~3곳만.
DO

대형 1 + 소형 3 → 다음 줄은 역방향 — 줄마다 무게중심 이동.

DON'T

균등 격자 섹션을 연속 3개 이상 배치 — "격자 사이트" 첫인상의 원인이에요.

서브페이지 레이아웃 (SPA / 도구형)

케이스 스터디 하위 서브페이지(운동 MBTI 등 단일 SPA 도구)는 별도 레이아웃 기준을 따라요.

속성설명
max-width800px콘텐츠 래퍼 최대 폭 — margin: 0 auto로 중앙 정렬
side padding (mobile)20px기본 좌우 여백
side padding (≥ 480px)32px480px 이상
side padding (≥ 640px)48px640px 이상
배경색--bg래퍼·바디 모두 동일 — 전체가 하나의 화면처럼

서브페이지 브레이크포인트

지점변화
≥ 480px좌우 여백 32px · 종목 선택 등 단순 목록 → 2열 그리드 전환
≥ 640px좌우 여백 48px · 장비 목록 → 2열 그리드 전환 · 헤드라인 폰트 업
800px cap콘텐츠 폭 고정 — 이상은 좌우 여백만 넓어짐
DO

케이스 스터디 서브 SPA는 모두 max-width 800px 반응형으로 통일.

DON'T

고정 폰 프레임(375px)으로 서브페이지를 강제 — 데스크탑에서 좌우 여백이 과도해져요.

FOUNDATIONS

Motion

모션은 콘텐츠를 소개하는 역할까지만 해요. 이징 하나, 지속시간 3단계 — 그리고 반드시 prefers-reduced-motion에 응답해요.

토큰

토큰용도
--easingcubic-bezier(.2,.7,.2,1)전 구간 공통 — 빠르게 나와 부드럽게 멈춤
--ease-springcubic-bezier(.16,1,.3,1)바텀시트·캐러셀 등 탄성 있는 진입
--ease-expocubic-bezier(0.87,0,0.13,1)날카로운 진입·퇴장 (드로어 등)
--dur-fast0.2shover · 색 전환 · 버튼·칩·링크
--dur-base0.4s등장(fade + up 20~30px) · 섹션 리빌
--dur-reveal0.85sIntersectionObserver 리빌 애니메이션
--dur-slow1.1s스크롤 연동 · 웨이브 패럴랙스 · 마퀴

Z-Index 스케일

토큰용도
--z-base0기준면
--z-raised10카드 호버 등 소폭 상승
--z-overlay50드롭다운 · 툴팁 · 컨텍스트 메뉴
--z-nav100앱바 · 하단 내비게이션
--z-bar200고정 상단 바 (앱바 위)
--z-loader9000풀페이지 로딩 오버레이
--z-grain9996필름 그레인 (장식 레이어)
--z-cursor-label9997커서 레이블
--z-cursor-ring9998커서 링
--z-cursor9999커서 닷 (최상위)

스테이트 레이어 (전역 규칙)

Material 3 방식이에요. 컴포넌트마다 호버색·눌림색을 따로 정하지 않고, 표면 위 텍스트색(on-color)을 낮은 불투명도로 덮는 규칙 하나로 통일해요. 컴포넌트가 늘어도 상태 색을 새로 정의할 일이 없어요.

상태불투명도적용
Hover8%on-color를 표면 위에 8% 오버레이
Focus12%오버레이 + 포커스 링 --focus-ring(그린 2px, offset 3px) — WCAG 2.2 Focus Appearance 충족
Pressed12%버튼은 예외 — green-700로 직접 어둡게
Disabled 컨테이너12%on-surface 12% (= --border와 동일 계열)
Disabled 레이블38%on-surface 38% (= --text-lo 계열)

다크 테마 모션·깊이 규칙

  • 깊이는 그림자가 아니라 표면 밝기로 — 다크에서 그림자는 보이지 않아요. surface-1 → 2 → 3 사다리로 올려요 (Carbon의 layer 토큰 방식).
  • 그림자를 써야 하면 다크에서는 불투명도를 2배로 (Fluent 기준 14% → 28%).
  • 다크는 라이트의 단순 반전이 아니에요 (Apple HIG) — 색을 뒤집지 말고 역할별로 다시 정해요.

규칙

  • 리빌은 IntersectionObserver 기반 — GSAP(ScrollTrigger)이 죽어도 콘텐츠는 보이는 방어 설계를 유지해요.
  • 등장 모션은 opacity + translateY만. scale·rotate 등장은 테이프 요소 한정.
  • prefers-reduced-motion: reduce에서 마퀴 정지 · 리빌 즉시 표시.
FOUNDATIONS

Icon

서비스의 분위기와 목적을 전달할 수 있도록 간결하면서도 일관성 있게 제작해요. UI Icon(라인 기반)과 Visual Icon(색상 강조) 두 종류로 나뉘어요. 갤러리는 카테고리당 대표 샘플이에요 — 전체 810개 세트는 Figma에 있어요.

Key Line

키라인은 아이콘의 기준 격자예요. 구조(Structure), 기호(Character), 아이덴티티(Identity)를 고려해 4가지 기본 도형의 밀도감이 균일해 보이도록 각각 다른 크기로 맞춰요.

도형크기용도
Circle36×36px원형 기반 아이콘
Square34×34px정사각 기반 아이콘
Rectangle V28×38px세로형 아이콘
Rectangle H38×28px가로형 아이콘

Naming Rule

슬래시(/) 3단계 구조예요. 첫 번째 폴더명과 카테고리명의 첫 글자는 대문자, 나머지는 소문자로.

Icon/Security/face-id-01
세그먼트예시규칙
폴더명Icon고정값 · 항상 대문자 시작
카테고리Security · Arrows · MediaTitle Case · 영문 단어
아이콘 이름face-id-01 · arrow-up · lock-open-02케밥케이스 · 시리즈는 -01/-02 접미사

UI Icon vs Visual Icon

UI IconVisual Icon
스타일라인 기반 (stroke)컬러 채움 (filled)
크기 기준4배수 — 16 · 20 · 24px별도 크기 세트
--text-mid / --neon-green · --neon-purple별도 컬러셋
용도내비게이션 · 버튼 · 필드 아이콘카테고리 시각화 · 정보 강조

카테고리 (18개 · 810개)

Security 28Layout 61System 4 Profiles & Users 29Media 65Shapes 9 Charts 36Finance 64Editor 78 Travel & Location 32Time 34Weather 30 General 117Communication 44Files 50 Education 39Images 22Arrows 68

아이콘 갤러리

규칙

  • 내비게이션 아이콘은 20px 라인 아이콘 고정 — 활성: --neon-green · 비활성: --text-lo.
  • 버튼 아이콘은 16px · 레이블 왼쪽 · 간격 6px(sp-3).
  • 퍼플 도메인 화면에서는 아이콘 색도 --neon-purple로 — 색 신호는 도메인과 일관되게.
  • 아이콘만으로 의미를 전달할 때는 반드시 aria-label 또는 툴팁을 함께.
COMPONENTS

Button

화면당 Primary는 하나예요. 네온 그린 위 텍스트는 항상 블랙(--bg) — 화이트를 올리는 순간 대비가 무너져요.

구성요소

추천 받기 ① 컨테이너 ② 레이블
요소필수 여부규칙
컨테이너ESSENTIALradius 8px · 패딩 12×28px · 배경 또는 1px 보더
레이블ESSENTIALPretendard 600 · 13px · 1~6자 동사형("추천 받기")
아이콘OPTIONAL16px · 레이블 좌측 · 간격 6px(sp-3)

상태

Enabled Hover Pressed Disabled
상태배경텍스트비고
Enabled--neon-green #B6FF3D#0A0A0A기준
Hovergreen-300 #C8FF5F#0A0A0A150ms · 밝게 — 커지지 않아요
Pressedgreen-700 #6B8F24#0A0A0A어둡게
Disabled--border #262626--text-lo #4A4A4A커서 기본값

변형

Primary Neutral Ghost Health
변형스타일쓰임
Primary그린 배경 + 블랙 텍스트화면의 단 하나의 핵심 행동
Neutral--surface-2 배경 + 기본 텍스트 + --border 보더일반 보조 행동 · 비강조 CTA
Ghost투명 배경 + 그린 1px 보더 + 그린 텍스트(--neon-green)보조 행동 · Primary 옆
Health퍼플 배경 + 화이트 텍스트헬스 도메인 화면 한정

사이즈

Primary(그린 채움)와 Secondary(그린 보더)는 동일한 5단계 높이를 공유해요. 화면에서 가장 흔히 쓰는 건 Medium(40px)이에요.

PRIMARY
XS Small Medium Large XLarge
SECONDARY
XS Small Medium Large XLarge
사이즈높이폰트수평 패딩주 사용처
XSmall24px11px · 60010px카드 내 마이크로 액션 · 인라인 편집
Small32px12px · 60014px목록 행 버튼 · 보조 액션
Medium40px13px · 60020px기본값 — 대부분의 화면
Large48px14px · 60024px온보딩 · 빈 상태(Empty State) CTA
XLarge56px15px · 60028px하단 고정 CTA · 결제 확인

카피 규칙 (Content)

Polaris·Fluent 방식이에요 — 문구 규칙을 먼 곳의 라이팅 가이드가 아니라 컴포넌트 문서 안에 둬요. 쓰는 자리에서 바로 보여야 지켜져요.

규칙DODON'T
동사로 시작"추천 받기" · "다시 고르기""추천" · "확인"
맥락상 자명한 명사는 생략"저장하기""내 프로필 저장하기"
1~6자"시작하기""지금 바로 나에게 맞는 장비 찾기"
문장부호 없음"저장하기""저장하기!"
취소 vs 닫기진행 중 작업 중단 = "취소" / 화면만 닫기 = "닫기"둘을 섞어 쓰기

언제 무엇을 쓰나 (비교)

ButtonChip
역할행동을 실행해요 ("추천 받기")상태를 고르거나 표시해요 ("러닝화")
레이블동사형명사형
선택 상태없음 — 누르면 실행있음 — 켜짐/꺼짐 유지
그린 사용배경 채움 (블랙 텍스트)텍스트·보더만 (배경 채우지 않기)
화면당Primary 1개여러 개 가능

스펙

  • 기본 크기(Medium): 높이 40px · 폰트 13px/600 · 수평 패딩 20px · radius 8px
  • 터치 대상: Large(48px) 이상 권장 · Medium(40px)은 상하 여백 포함 시 최소 44px 확보
  • 버튼 사이 간격: 12px(sp-5) · 아이콘-레이블: 6px(sp-3)
  • 전환: background 150ms var(--easing)

키보드 인터랙션

동작
Tab다음 버튼으로 포커스 이동 — --focus-ring(그린 2px · offset 3px)이 반드시 보여야 해요
Space · Enter버튼 실행. 포커스는 버튼에 남아요(화면 전환 시엔 이동 대상으로)
DO

화면당 Primary 1개 + Ghost 보조. 그린 버튼 텍스트는 항상 블랙.

DON'T

Primary 두 개 나란히, 그린과 퍼플 버튼을 같은 행에, 그린 위 화이트 텍스트.

COMPONENTS

Chip

필터·태그·키워드에 쓰는 알약형 요소예요. 선택 상태는 네온 그린 배경을 채워 명확하게 구분해요.

구성요소

요소필수 여부규칙
컨테이너ESSENTIALradius --r-full(9999px) · 알약형 · 패딩 5×12px · 1px 보더
레이블ESSENTIAL11px · 500 · 1~5자 명사("러닝화", "#치트키")

상태

기본 선택됨 비활성
상태배경보더텍스트
Defaulttransparent--border-hi #383838--text-mid
Selected--neon-green--neon-green--bg #0A0A0A
Disabledtransparent동일 · opacity .4동일 · opacity .4
DO

선택 = 네온 그린 배경 fill + 다크 텍스트. 다중 선택 나열 시 간격 8px(sp-4).

DON'T

선택 칩에 그린 배경 채우기(버튼과 혼동), 칩 안에 두 줄 텍스트.

COMPONENTS

Checkbox · Radio

둘 다 20×20px, 같은 문법이에요. 다른 건 모서리 하나 — 체크박스는 5px, 라디오는 원. 선택은 언제나 그린이에요.

상태

기본 선택 비활성 기본 선택 비활성

스펙

속성CheckboxRadio
크기20×20px20×20px
radius5px50%
기본 보더--border-hi #383838 · 1px
선택그린 채움 + 블랙 체크(6×10px · rotate 45°)그린 보더 + 중앙 그린 도트(inset 4px)
레이블 간격10px · 13px Pretendard 400 · 레이블 클릭도 동작

언제 무엇을 쓰나 (비교)

CheckboxRadioChip (선택형)
선택 수0개 이상 복수정확히 1개복수 (시각적 나열형)
쓰는 곳동의·옵션 목록온보딩 단일 답변필터·태그처럼 훑어보며 고를 때
레이아웃세로 목록세로 목록가로 랩(wrap) 나열
기본 선택상황에 따라없음 — 답 유도 금지없음

키보드 인터랙션

CheckboxRadio
Tab각 체크박스로 이동그룹 전체가 하나의 탭 정지점 — 선택된 항목으로 이동
Space선택 토글포커스된 항목 선택
↑ ↓ ← →그룹 안에서 이동 + 즉시 선택

사용규칙

  • 복수 선택은 체크박스, 단일 선택은 라디오 — 온보딩 5단계의 "하나만 고르는 질문"은 전부 라디오예요.
  • 라디오 그룹은 최소 2개, 기본값을 미리 선택해두지 않아요(사용자의 답을 유도하지 않기).
DO

선택 상태는 그린 단일 색. 터치 영역은 44px까지 투명 확장.

DON'T

퍼플 체크박스(도메인 색을 셀렉션에 쓰지 않기), 15px 이하 축소.

COMPONENTS · ACTION

Text Field

입력 필드는 조용해요. 포커스가 왔을 때만 그린 보더로 응답하고, 나머지 시간엔 서피스에 가라앉아 있어요.

상태

Default
보더 --border · 텍스트 --text-lo
Focus (클릭해보세요)
보더 --neon-green-dim · 텍스트 --text로 상승
Filled
값이 있으면 텍스트 --text 유지
Error
올바른 장비명을 입력해주세요.
보더 붉은 계열 · 헬퍼 텍스트 필수 (색약 대응)
Disabled
opacity .38 · cursor not-allowed · 배경 --surface-1

상태 스펙

상태보더텍스트 색비고
Default--border #262626--text-loradius --r-sm · padding 13×16px
Focus--neon-green-dim #6B8F24--textoutline:none 대신 border 색으로 표현
Filled--neon-green-dim--text값 있는 포커스 아웃 상태
Errorrgba(255,23,68,.55)--text헬퍼 텍스트 11px #FF1744 필수 병기
Disabled--border--text-loopacity .38 · pointer-events none

사용 규칙

  • 플레이스홀더는 질문형 문장으로 — "어떤 장비를 찾고 있어요?" (명령형 "입력하세요" 금지)
  • 플레이스홀더 색은 --text-lo — 입력값과 혼동되지 않게 두 단계 낮춰요.
  • 에러는 색으로만 말하지 않고 반드시 헬퍼 텍스트를 함께 — 색약 사용자 대응이에요.
  • Disabled 상태에서 커서는 not-allowed — 왜 입력이 안 되는지 툴팁이나 안내가 가까이 있어야 해요.
COMPONENTS

App Bar

모든 화면 상단에 붙는 내비게이션 바예요. 현재 컨텍스트와 핵심 액션을 제공해요. 7가지 변형이 있어요.

변형

MAIN — 탭 루트 홈 화면 (로고 + 액션 아이콘)

운동의 치트키
🔔 👤

MAIN-SCROLL — 스크롤 후 검색 활성 (로고 + 검색 알약)

운동의 치트키
🔔 👤
🔍 원하는 장비를 검색해보세요

POP — 뒤로가기 + 타이틀 + 닫기 (Push 네비게이션 레이어)

타이틀

SUB — 카테고리 드롭다운 + 액션 아이콘 (목록·필터 화면)

러닝 장비
🔔 👤

SUB-SCROLL — 카테고리 + 그린 테두리 검색 알약

러닝 장비
🔔 👤
🔍 궁금한 러닝 장비 검색해보세요

COMPLETE — 뒤로가기 + 타이틀 + 완료·닫기 (플로우 완료 화면)

타이틀 완료

POPUP — 타이틀 + 닫기 (바텀시트·모달, 뒤로가기 없음)

타이틀

구성요소

요소필수 여부적용 변형규칙
브랜드 워드마크ESSENTIALmain · main-scrollPaperlogy 800 · 17px · --neon-green
뒤로가기 아이콘ESSENTIALpop · sub · sub-scroll · complete36×36px 탭 영역 · 좌측 끝 고정
센터 타이틀ESSENTIALpop · complete · popup16px 500 · --text-mid · flex:1 · 가운데 정렬
카테고리 드롭다운ESSENTIALsub · sub-scroll18px 700 · --text + ▾ 드롭다운 아이콘
액션 아이콘 (벨·유저)OPTIONALmain · main-scroll · sub · sub-scroll36×36px 탭 영역 · 우측 끝 고정 · gap 8px
닫기(✕) / 완료OPTIONALpop · complete · popuppop·popup은 ✕ 아이콘 / complete는 "완료" 텍스트 버튼
검색 알약OPTIONALmain-scroll · sub-scrollh 40px · r 40px · main-scroll: --border-hi / sub-scroll: --neon-green 테두리

스펙

  • 높이: 52px (단일 행) · scroll 변형은 52 + 40 + 16px = 108px
  • 배경: --surface-1 (#111111) · 하단 1px --border-lo
  • 패딩: 16px (좌우 동일)
  • 아이콘 탭 영역: 36×36px · 내부 아이콘 24px
  • 스크롤 시 --shadow-sm 추가 — 콘텐츠가 바 아래로 올라옴을 표시

변형 선택 규칙

화면 유형사용 변형이유
홈 / 장비 / 리뷰 / 마이 (탭 루트)main브랜드 로고 노출 + 알림·프로필 접근
탭 루트에서 스크롤 후main-scroll검색 UX 강화 — 스크롤하면 검색 알약 나타남
카테고리 목록·필터 페이지sub카테고리 전환(드롭다운) + 알림·프로필 유지
카테고리 페이지 스크롤 후sub-scroll카테고리 + 검색 동시 제공
Push 네비게이션 단계 화면pop뒤로가기 + 닫기로 스택 컨트롤
플로우 완료 직전 화면complete뒤로가기 + "완료" 액션 버튼
바텀시트 / 모달popup뒤로가기 없이 닫기만 — 스택 외 오버레이
COMPONENTS

Navigation Bar

앱의 4탭 하단 내비게이션이에요. 활성 탭 하나만 그린 — 나머지는 침묵해요. 이 4탭이 IA(정보구조)의 최상위 노드예요.

구성

장비리뷰마이
요소필수 여부규칙
탭 4개ESSENTIAL홈 · 장비 · 리뷰 · 마이 — 균등 4분할, 추가·삭제 금지
아이콘ESSENTIAL20px 라인 아이콘 · 활성 시 그린
레이블ESSENTIAL12px 600 · 아이콘 아래 4px

스펙

  • 크기: 393px × 53px (디바이스 너비 고정 · 높이 고정)
  • 컨테이너: --surface-2 · 상단 1px --border · radius 14px(디바이스 프레임 안)
  • 활성: 아이콘+레이블 --neon-green / 비활성: --text-lo
  • 탭 전환에 애니메이션을 넣지 않아요 — 즉답이 내비게이션의 미덕이에요.

접근성 (Aria)

요소속성
컨테이너 <nav>role"tablist"
탭 항목role"tab"
활성 탭aria-selected"true"
비활성 탭aria-selected"false"
아이콘 전용 탭aria-label탭 이름 (예: "홈", "장비")
COMPONENTS

FAB Deprecated

Floating Action Button이에요. 현재 화면의 부가 기능이 필요할 때 화면 위에 띄워 쓰는 버튼이에요. Quick Menu(메뉴 열기)와 Go to Top(최상단 이동) 두 종류예요.

⚠️ DeprecatedFab은 치트키 DS에서 deprecated됐어요. 신규 화면에는 확장형 FAB(c-fabext)을 사용하세요. 기존 구현은 현상 유지예요.

변형

Quick Menu

Go to Top

변형아이콘쓰임
Quick Menu
Button_FAB_Quick
그린(--neon-green) + 블랙플러스 / 닫기퀵 액션 메뉴 열기 — 탭하면 액션 목록 펼침
Go to Top
Button_FAB_Top
--surface-3 + --text-mid위 화살표스크롤이 긴 화면에서 최상단 복귀

Quick Menu — 액션 목록

FAB을 탭하면 최대 5개의 액션 항목이 위로 펼쳐져요. 각 항목은 아이콘 + 레이블 조합이에요.

상태

상태Quick MenuGo to Top
Default그린 배경 · 플러스 아이콘--surface-3 배경 · 위 화살표
Pressedgreen-700 #6B8F24--border 배경

스펙

  • 크기: 56×56px · radius --r-full(9999px) · 아이콘 24px
  • 위치: 화면 우하단 · 하단 내비게이션 바 위 16px(sp-6) 간격
  • Go to Top은 스크롤 200px 이상 내려갔을 때만 표시 — 최상단에서는 숨김

사용 규칙

  • 화면당 FAB은 하나 — Quick Menu와 Go to Top을 동시에 쓰지 않아요.
  • Quick Menu 항목은 최대 5개 — 많아질수록 목적이 흐려져요.
  • 레이블은 동사형 — "저장" 대신 "저장하기", "공유" 대신 "공유하기".
DO

맥락에 딱 맞는 1~3개 핵심 액션만. Go to Top은 스크롤이 긴 목록 화면에만.

DON'T

모든 화면에 FAB 표시, 메뉴 5개 초과, Quick Menu와 Go to Top 동시 사용.

COMPONENTS

Overflow

표시할 수 있는 것보다 더 많은 옵션이 존재할 때 쓰는 버튼이에요. 탭하면 컨텍스트 메뉴가 펼쳐지고, 나머지 액션에 접근할 수 있어요.

구성요소

저장하기
공유하기
수정하기
삭제하기
요소필수 여부규칙
트리거 버튼ESSENTIAL24px 아이콘(ic_24_overflow) · 터치 영역 44px
컨텍스트 메뉴ESSENTIAL트리거 아래 · --surface-2 · --r-md · z-index --z-overlay
메뉴 아이템ESSENTIAL13px · 패딩 10×12px · 아이콘 선택(OPTIONAL)

상태

상태트리거메뉴
Default아이콘 --text-lo숨김
Pressedon-color 8% 오버레이
Open활성 — --text-mid표시 · 외부 탭 시 닫힘

사용 규칙

  • 카드·목록 항목 오른쪽 끝에 배치 — 카드 패딩 안쪽, 상단 정렬.
  • 메뉴 항목은 최대 7개 — 많아질수록 "기타" 아래 묶어요.
  • 파괴적 액션(삭제 등)은 메뉴 가장 아래 · #FF5D5D 색 처리.
  • Overflow와 Primary Button을 같은 카드에 함께 쓰지 않아요 — 행동 경로가 둘로 갈라지면 인지 비용이 늘어요.
DO

주요 액션은 카드 본체에, 부가 액션만 Overflow로. 메뉴 항목 4개 이하가 이상적이에요.

DON'T

버튼과 Overflow 동시 노출, 메뉴 레이블을 "더 보기 ∙∙∙"으로 쓰기.

COMPONENTS

Date Picker Beta

날짜 또는 연도·월을 선택하는 컴포넌트예요. Type A는 단일 날짜, Type B는 연도·월 선택이에요.

Type A — 단일 날짜 (Date)

2025년 7월
293012345 6789101112 13141516171819 20212223242526 272829303112
상태시각 처리
Default숫자 --text-mid · 호버 시 --surface-3 배경
Today숫자 --neon-green + 700 weight
Selected배경 --neon-green · 숫자 --bg 반전 · 700 weight
Unselectableopacity 25% · pointer-events none (이전 달 · 이후 달 날짜)

Type B — 연도·월 (Year & Month)

2021년
1월2월3월 4월5월6월 7월8월9월 10월11월12월
요소필수 여부규칙
헤더 (연도/월 + 이전·다음 화살표)ESSENTIAL14px 600 · 좌우 화살표 18px · 탭 영역 32px
날짜 그리드 (Type A)ESSENTIAL7열 고정 · 7px 패딩 · 요일 헤더 11px small-caps
연도 컬럼 (Type B)ESSENTIAL좌측 고정 · 위아래 화살표로 연도 변경 · 우측에 월 그리드
월 그리드 (Type B)ESSENTIAL3열 고정 · 10px 패딩 · 현재 선택 월은 Selected 상태

스펙

  • 컨테이너: --surface-2 · 1px --border · --r-md · padding 16px
  • Type A 최소 너비: 264px · Type B: 연도 열(56px) + 구분선 + 월 그리드
  • 날짜 셀: 기본 7px 패딩 · --r-sm · 호버 --surface-3
  • 피커는 인풋 아래 배치 · --shadow-md · --z-overlay

키보드 인터랙션

Type A (날짜)Type B (연도·월)
Tab피커 열기·닫기 · 날짜 셀 진입피커 열기·닫기 · 연도 버튼·월 셀 진입
← → ↑ ↓날짜 이동 (행 끝에서 다음 행 연결)월 그리드 내 이동 (3열 기준)
Space · Enter날짜 선택월 선택
PageUp · PageDown이전·다음 달로 이동연도 감소·증가
Esc피커 닫기 — 인풋으로 포커스 복귀

사용 규칙

  • Type A는 특정 날짜 선택 (운동 기록, 일정 등), Type B는 월 단위 조회 (통계, 필터)에 사용해요.
  • 선택 가능한 날짜 범위가 있으면 범위 밖은 반드시 Unselectable 처리 — 탭해도 반응 없음.
  • 오늘 날짜는 항상 Today 상태로 강조 — 사용자가 현재 위치를 잃지 않도록.
COMPONENTS

Card / Product

상품의 썸네일·브랜드·이름·평점·태그를 하나의 단위로 묶는 카드예요. M은 그리드 나열, S는 랭킹 리스트 행에 써요.

Card/Product/M

👟
나이키
에어맥스 270 리액트 ENG
4.88(3,700)
헬스고중량
🏃
1
아디다스
울트라부스트 22 러닝화
4.95(1,240)
러닝경량
🏋️
언더아머
UA 트리켓 3 크로스트레이닝화
4.76(892)
헬스내구성고중량

Card/Product/S 랭킹 리스트

1
👟
나이키
나이키 메트콘 9
4.88(3,700)
2
🏋️
언더아머
UA 트리켓 3 크로스트레이닝화
4.76(892)
3
🏃
호카
클리프턴 9
4.92(2,110)

구성 요소

요소타입Card/MCard/S
ImageESSENTIAL160×160px · r 16px · white bg48×48px · r 8px · white bg
Brand nameESSENTIAL10px · --text-lo · Pretendard Light
Product nameESSENTIAL13px · --text · 1줄 이상 말줄임
Star ratingOPTIONAL★ 10px · 점수 bold --text-mid · 리뷰수 --text-lo
Tag/ProductOPTIONALflex-wrap · max 3개없음
Like iconOPTIONALabsolute top-right · 32×32px없음
Rank badgeOPTIONALabsolute top-left · 28×28px · r 8px좌측 숫자 · 16px · --neon-green

Tag/Product 색 규칙

태그보더텍스트용도
러닝 도메인--neon-green--neon-green러닝 카테고리 상품
헬스 도메인--neon-purple--neon-purple헬스 카테고리 상품
속성 레이블--border-hi #383838white경량·고중량·내구성 등

스펙

Card/MCard/S
전체 폭160px (고정)flex-1 또는 204px
이미지160×160px · r 16px48×48px · r 8px
이미지 배경white — 투명 PNG 상품 이미지 대응
텍스트 패딩py 12px · px 4px없음 (flex gap 12px)
텍스트 내부 간격brand↔name↔rating 6pxbrand↔name 0 · +rating 4px
태그 높이20px · px 8px · r 99px
랭크 뱃지 (M)28×28px · r 8px · --border-lo bg
랭크 숫자 (S)24px 폭 · 16px bold · --neon-green
DO

이미지 영역은 흰 배경 고정 — 투명 PNG 상품컷이 어두운 배경에서 자연스럽게 보여요. 도메인 태그(러닝·헬스)는 항상 1번째 위치에 배치해요.

DON'T

Card/M을 3열 이상 나열하지 않아요(160px×3+gap=500px+). 태그는 최대 3개 — 초과 시 +N으로 처리해요. Card/S의 랭크 번호에 브랜드 색 외 다른 색을 쓰지 않아요.

COMPONENTS

Badge

작은 레이블로 상태·카테고리·중요도를 시각화해요. 치트키 컨텍스트에 맞는 변형(variant)을 선택해 사용하세요.

Tone × Size

SIZE: MEDIUM (h 24px) — 카드 위·인라인

신상 HOT 러닝 필터 적용 중 품절 재입고 마감 임박 단종

SIZE: LARGE (h 28px) — 헤더·섹션 제목 옆

신상 러닝 품절 마감 임박 단종

Tone 선택 규칙

Tone클래스치트키 사용 컨텍스트금지
brand-solid jb-badge--brand-solid 신상 · HOT · 추천 — 주목을 끌어야 하는 상품 레이블 남용 금지 — 한 화면에 3개 이하
brand-weak jb-badge--brand-weak 카테고리 분류 · 도메인 표시 (러닝 / 헬스 / 클라이밍)
brand-outline jb-badge--brand-outline 선택된 필터 · 활성 태그 표시
critical jb-badge--critical 품절 · 구매 불가 · 마감 완료 성공/정보 메시지에 사용 금지
positive jb-badge--positive 재입고 · 정상 판매 중 복귀
warning jb-badge--warning 마감 임박 · 재고 소진 예정
neutral jb-badge--neutral 단종 · 서비스 종료 · 비활성 상태

스펙

크기높이좌우 패딩글꼴사용 위치
medium24px6px12px · 600카드 위 · 텍스트 옆 인라인
large28px8px13px · 600섹션 헤더 · 페이지 타이틀 옆

클래스명 패턴

<span class="jb-badge jb-badge--{md|lg} jb-badge--{brand-solid|brand-weak|brand-outline|critical|positive|warning|neutral}">
  레이블 텍스트
</span>

카드와의 조합

👟
신상
나이키 에어 줌 페가수스 41
4.8(142)
🏋️
품절
언더아머 프로젝트 락 IronFleece
4.6(89)
🧘
마감 임박
룰루레몬 에볼브 크롭 탱크
4.7(201)
COMPONENTS

Card / Review

리뷰 목록에서 하나의 리뷰를 나타내는 카드예요. 유저 정보 · 별점 · 텍스트 · 좋아요로 구성되고, 3줄 이상은 잘라요.

구성요소

👤
running_kim 2025.03.14
4.0
러닝경량스피드
레이스 신발로 구매했어요. 착화감이 기존 모델 대비 많이 부드러워졌고, 카본 플레이트 반발력이 확실하게 느껴져요. 장거리에선 발볼이 좁은 편이라 주의가 필요해요. 사이즈는 평소보다 5mm 크게 주문했어요.
더보기 ›
🏋️
strongman_j 2025.02.28
3.0
헬스고중량
스쿼트·데드리프트 위주로 착용 중이에요. 아웃솔이 납작해서 지면 밀착감은 훌륭한데, 쿠셔닝이 거의 없어서 이동 시 발바닥에 충격이 있어요.
더보기 ›

구성 요소 규칙

요소필수 여부규칙
AvatarESSENTIAL32px(sm) 원형 · 기본 placeholder = 아이콘
유저명ESSENTIAL13px/600 · 최대 16자 · 초과 시 말줄임
작성일ESSENTIAL11px · --text-lo · YYYY.MM.DD
별점ESSENTIAL★ 5개 · 채움 = --neon-green · 비움 = --border-hi · 우측 숫자 표기
태그OPTIONAL동일 도메인 스타일 chip · 최대 3개
본문ESSENTIAL13px · --text-mid · 3줄 이상 clamp · "더보기" 노출
이미지OPTIONAL64×64px 썸네일 · 최대 5장 · 가로 스크롤
좋아요 버튼ESSENTIALpill 버튼 · 눌린 상태 = 그린 보더·텍스트

별점 표기 규칙

상황표기
리뷰 카드 · 목록★ 아이콘 5개 + 숫자 (예: 4.0)
상품 헤더★ 단일 아이콘 + 평균점수 + 리뷰수 (예: ★ 4.8 (142))
최소 소수점1자리 고정 (4.0 ○ / 4 ×)
0건★ - (0) — 숫자 대신 하이픈

스펙

  • 카드 배경: --surface-2 · 보더: --border-lo · radius: --r-md(12px)
  • 내부 패딩: 16px · 섹션 간격(gap): 12px
  • 좋아요 버튼: height 28px · px 12px · radius 99px
DO

별점 색은 --neon-green만. "도움이 됐어요" 상태는 보더+텍스트만 그린으로 — 배경 채우지 않아요.

DON'T

별점에 노란색 사용. "좋아요" 숫자만 단독 노출(버튼 레이블 없이). 본문 6줄 이상 펼쳐서 목록에 표시.

COMPONENTS

Review / Content

리뷰 상세(펼친 상태)예요. Card/Review의 본문을 완전히 펼치고 이미지 갤러리와 스펙 별점을 추가해요.

구성요소

👤
running_kim 2025.03.14 · 러닝화 6개월 사용
4.0 · 전체
러닝경량스피드
레이스 신발로 구매했어요. 착화감이 기존 모델 대비 많이 부드러워졌고, 카본 플레이트 반발력이 확실하게 느껴져요. 장거리에선 발볼이 좁은 편이라 주의가 필요해요. 사이즈는 평소보다 5mm 크게 주문했어요. 중창 두께가 두꺼운 편이라 처음엔 불안정하게 느껴질 수 있는데 2~3회 착용하면 적응돼요.
👟
🏃
📦
스펙 별점
착화감 4.5
내구성 3.5
가성비 3.0

Card/Review vs Review/Content

Card/ReviewReview/Content
맥락목록 / 피드상세 / 펼친 상태
Avatar32px(sm)48px(md)
본문3줄 clamp + 더보기전체 노출
이미지없음 (썸네일 카운트만)64px 갤러리 행
스펙 별점없음3~5개 항목 그리드
작성일 부제날짜만날짜 · 사용기간 병기

스펙 별점 항목

도메인항목
러닝착화감 · 내구성 · 가성비 (+ 경량성 · 반발력 선택)
헬스착화감 · 내구성 · 가성비 (+ 그립력 · 지지력 선택)
COMPONENTS

Rank / Card

리뷰 수·평점 기준 순위를 2열 그리드로 나열해요. 1~3위는 그린, 4위부터는 기본 텍스트 색을 써요.

구성요소

1
👟
살로몬 S/LAB 판타즘 3
4.9(312)
4
👟
나이키 베이퍼플라이 3
4.7(198)
2
🏃
아디다스 아디제로 아디오스 프로 3
4.8(275)
5
🏃
아디다스 아디제로 아디오스 8
4.6(156)
3
👟
나이키 알파플라이 3
4.8(241)
6
👟
씨코니 엔돌핀 프로 5
4.5(134)

구성 요소 규칙

요소필수 여부규칙
순위 숫자ESSENTIAL14px/700 · 1~3위 --neon-green · 4위↑ --text-mid · 폭 18px 고정
썸네일ESSENTIAL56×56px · radius 8px · 흰 배경 (투명 PNG 대응)
브랜드명ESSENTIAL10px · --text-lo
상품명ESSENTIAL12px/600 · --text · 1줄 말줄임
별점OPTIONALCard/Product 동일 스타일 · 미확정 시 "★ - (0)"

스펙

  • 레이아웃: 2열 그리드 · 열 간격 24px · 행 간격 12px
  • 최대 항목: 기본 6개 (3×2) · "전체보기" 시 무한 스크롤
  • 기준: 최근 7일 리뷰 수 (헤더 부제 표기 필수)
DO

1~3위 숫자는 그린으로 명확히 구별. 그리드는 항상 짝수 쌍으로 — 홀수 마지막 행은 빈 셀 없이 단일 항목만.

DON'T

금·은·동 색상 사용(브랜드 색과 충돌). 3열 이상 그리드(썸네일+이름이 너무 좁아짐).

COMPONENTS

Avatar / Face

유저를 나타내는 원형 이미지예요. 사진이 없으면 앱 기본 3D 캐릭터 아이콘을 써요 — 이모지나 이니셜 폴백은 쓰지 않아요.

사이즈

👤 SM · 32px
👤 MD · 48px
👤 LG · 64px
👤 XL · 80px

사이즈 규칙

사이즈크기주 사용처
SM32px리뷰 카드 · 댓글 · 인라인 멘션
MD48px리뷰 상세 · 프로필 섹션 인라인
LG64px마이페이지 헤더 · 프로필 설정 배너
XL80px프로필 편집 화면 · 온보딩 캐릭터 선택

상태

👤 Default
(미설정)
🏃 캐릭터 선택됨
📷 사진 등록됨
👤 + 편집 버튼

구성 요소 규칙

상태내용규칙
Default앱 기본 3D 캐릭터앱 내 제공 에셋 사용 — 이니셜·이모지 대체 불가
캐릭터 선택됨유저 선택 캐릭터그린 배경 원형에 캐릭터 이미지
사진 등록됨사용자 업로드 이미지circle crop · 그린 2px 보더
편집 버튼Avatar 위 + 버튼 (20px)마이페이지 편집 진입점에서만 노출

스펙

  • 모양: 원형 고정 (border-radius 50%)
  • 배경: --surface-3 (사진 없을 때) · 그린 (선택된 캐릭터)
  • 보더: 1px --border-lo 기본 · 사진 등록 시 2px --neon-green
  • 편집 핀(+): 20px · 그린 배경 · 검정 아이콘 · 원 우하단 절대위치
DO

기본 상태는 반드시 앱 제공 3D 캐릭터로. Avatar 사이즈는 4단계(SM/MD/LG/XL) 안에서만 쓰세요.

DON'T

이니셜 텍스트 폴백 사용. 정사각형이나 둥근 사각형 Avatar(원형만). 브랜드 색이 아닌 임의 색 배경.

COMPONENTS

Filter / Bar

상품 목록 상단에 붙는 가로 스크롤 필터 행이에요. "전체"가 항상 첫 번째 칩이고, 하나 이상 선택되면 "전체" 선택은 해제돼요.

기본 상태

전체 로드 트레일 스피드 경량 쿠셔닝 안정성 내구성

필터 선택 상태

전체 로드 트레일 경량 스피드 쿠셔닝 안정성

구성 요소 규칙

요소필수 여부규칙
"전체" 칩ESSENTIAL항상 첫 번째 · 단독 선택 상태 시 활성
필터 칩ESSENTIAL도메인별 속성 · 복수 선택 가능 · 선택 시 "전체" 해제
정렬 칩OPTIONAL우측 끝 고정 · "최신순 ▾" 형태 · 정렬 전용 색 없음

칩 상태

상태보더텍스트배경
Default--border-hi--text-mid투명
Selected--neon-green--neon-greenrgba(182,255,61,.06)

스펙

  • 칩 높이: 32px · 수평 패딩: 14px · radius: 99px
  • 칩 간격: 6px · 폰트: 12px/500
  • 스크롤: 가로 스크롤 · 스크롤바 숨김 · 끝단 페이드 처리 권장
  • 위치: 섹션 헤더 바로 아래 · sticky 또는 컨텐츠 상단
DO

"전체" 선택 = 모든 필터 칩 해제. 복수 선택 시 선택된 칩을 왼쪽으로 모으는 정렬 있으면 편해요.

DON'T

필터 칩에 체크마크 아이콘 추가(색만으로 충분). 칩 30px 미만(터치 미흡). 도메인 외 임의 색 사용.

COMPONENTS

Select / Category

카테고리·정렬 기준을 드롭다운으로 선택하는 컴포넌트예요. AppBar의 SUB 변형에서 카테고리명 + ▾ 형태로도 나타나요.

인라인 드롭다운

닫힌 상태
열린 상태
러닝화
러닝용품
트레일화
러닝 의류

AppBar 연동 — SUB 변형

러닝화
🔔👤

AppBar > SUB 변형 — 카테고리명이 직접 AppBar 타이틀 역할을 해요. 탭 하면 Select/Category 드롭다운이 열려요.

구성 요소 규칙

요소필수 여부규칙
트리거ESSENTIAL현재 선택값 텍스트 + ▾ 아이콘
드롭다운 항목ESSENTIAL13px · 선택됨 = 그린 텍스트 + ✓ · 최대 8개
구분선OPTIONAL카테고리 그룹 구분 시 1px --border-lo

스펙

  • 트리거 높이: 44px · 수평 패딩: 16px · radius: --r-sm(8px)
  • 드롭다운 최소 폭: 180px · 내부 패딩: 4px · 항목 높이: 44px
  • 드롭다운 출현: opacity 0→1 + translateY -6px→0 · --dur-fast
  • 오버레이: 드롭다운 외부 탭 시 닫힘 (별도 dim 없음)
DO

현재 선택값을 트리거에 항상 표시. 드롭다운은 트리거 하단 6px에 띄워요.

DON'T

항목 9개 이상(스크롤 불편). 트리거 폭이 드롭다운보다 작게(드롭다운은 트리거 폭 이상).

COMPONENTS

Segmented Control

같은 레벨의 뷰·모드를 전환하는 컴포넌트예요. 한 번에 하나만 선택되고, 탭 사이를 이동해도 데이터는 유지돼요.

2세그먼트

러닝화
러닝용품

3세그먼트

전체
러닝
헬스

리뷰 정렬 (3세그먼트)

최신순
평점순
도움순

비활성 (Disabled)

러닝화
러닝용품

전체 세그먼트 비활성 — opacity .35 + pointer-events none

구성 요소 규칙

요소필수 여부규칙
컨테이너ESSENTIAL--surface-2 배경 · 3px 패딩 · radius --r-sm
세그먼트 항목ESSENTIAL동일 폭 · 40px 높이 · radius 6px · 최대 4개
선택 인디케이터ESSENTIAL--surface-3 배경 · shadow 0 1px 4px rgba(0,0,0,.4)

Segmented Control vs Chip vs Tab

Segmented ControlChip (Filter)Navigation Tab
선택항상 1개 선택0개 이상 복수 선택항상 1개 선택
위치콘텐츠 영역 내목록 상단 필터 행화면 하단 고정
전환 범위같은 화면의 뷰 전환같은 목록의 필터링최상위 화면 전환
데이터 유지유지재필터링화면별 독립

스펙

  • 컨테이너: 내부 패딩 3px · radius 8px · 배경 --surface-2
  • 세그먼트: 높이 40px · radius 6px · 폰트 14px/500 → 선택 14px/600
  • 선택 전환: background + color --dur-fast
  • 최대 세그먼트: 4개 (5개↑부터는 Filter/Bar 권장)
DO

세그먼트 레이블은 명사형 1~4자로. 전환 시 현재 스크롤 위치 유지(콘텐츠 영역만 교체).

DON'T

세그먼트 5개 이상. 세그먼트에 아이콘만 쓰기(텍스트 없으면 인식 어려움). 밑줄·보더 인디케이터(이 DS는 배경 채움 방식).

COMPONENTS

Progress / Step

리뷰 작성·온보딩 같은 멀티스텝 플로우에서 현재 단계를 보여줘요. 완료된 단계는 그린 채움, 현재 단계는 그린 보더, 미래 단계는 회색이에요.

3단계 — 리뷰 작성

장비 선택
2
별점 입력
3
리뷰 작성

4단계 — 온보딩

운동 종류
레벨
3
목표 부위
4
완료

구성 요소 규칙

요소필수 여부규칙
스텝 닷ESSENTIAL28px 원형 · 완료 = 그린 채움 + ✓ · 현재 = 그린 보더 + 숫자 · 미래 = 회색 보더 + 숫자
연결선ESSENTIAL1px · 완료→현재 구간 = 그린 · 나머지 = --border-hi
레이블ESSENTIAL10px · 현재 단계 = --text/600 · 완료 = --text-mid · 미래 = --text-lo

스텝 상태

상태닷 배경닷 보더닷 텍스트연결선(우측)
완료(done)--neon-green--neon-green#0A0A0A (✓)그린
현재(active)투명--neon-green--neon-green회색
미래투명--border-hi--text-lo회색

스펙

  • 닷 크기: 28×28px · 보더: 2px · radius: 50%
  • 연결선: 1px · 닷 세로 중앙(top 14px) · 닷 끝에서 시작
  • 레이블: 10px · 닷 하단 6px
  • 최대 스텝 수: 4개 (5개↑ 시 닷 폭이 너무 좁아짐)
DO

완료 닷에는 숫자 대신 ✓ 아이콘. 레이블은 1~4자 명사형으로 — "1단계" 같은 서수 표현 금지.

DON'T

스텝 5개 이상. 연결선 없이 닷만. 미래 스텝을 비활성 버튼처럼 클릭 가능하게 만들기.

COMPONENTS

Toast

일시적인 시스템 피드백을 화면 하단에 표시하는 컴포넌트예요. 3초 후 자동으로 사라지며 사용자 동작을 차단하지 않아요.

기본 타입

💬
리뷰가 등록됐어요.
장바구니에 담았어요
S/LAB 판타즘 3 · 270mm
보기
!
리뷰를 불러오지 못했어요. 다시 시도해주세요.

타입별 용도

타입아이콘보더 색사용 시점
기본(neutral)없음 또는 맥락 아이콘--border-hi정보 전달, 완료 (중립적)
성공(success)그린 20% 불투명장바구니 추가, 저장 완료, 리뷰 등록
오류(error)!빨강 20% 불투명네트워크 오류, 입력 오류

구성 요소 규칙

요소필수 여부규칙
본문ESSENTIAL한 줄 메시지 또는 타이틀+설명 2줄 구조 · 최대 2행
아이콘OPTIONAL타입 시각화 · 16px · 텍스트 색과 동일
액션 버튼OPTIONAL그린 텍스트 · 1개만 · 2~4자 동사 ("보기", "취소")
닫기 버튼OPTIONAL오류 타입에서 수동 닫기 필요 시 사용

스펙

  • 위치: 화면 하단 중앙 · safe area 위 16px · 최대 폭 360px
  • 수직 패딩: 14px · 수평 패딩: 16px · radius: --r-md(16px)
  • 표시 시간: 3초(기본) / 액션 있으면 5초 / 오류는 수동 닫기 권장
  • 동시 표시: 최대 1개 · 새 토스트는 기존 토스트를 밀어내며 등장
  • 등장: translateY +8px → 0 + opacity 0→1 · --dur-fast
DO

메시지는 15자 이내 단문. 액션 버튼은 동사형 1개만. 성공/오류 아이콘으로 타입을 즉시 인식시킬 것.

DON'T

토스트 2개 동시 노출. 중요한 에러를 토스트로만 처리 (중요 에러는 Modal). 액션 버튼 2개 이상.

COMPONENTS

Bottom Sheet

모바일에서 필터·정렬·단순 선택 등 보조 작업을 수행하는 하단 슬라이드업 패널이에요. 스크림을 탭하거나 핸들을 드래그하면 닫혀요.

정렬 옵션 — 기본 리스트형

정렬 기준
최신순
평점 높은 순
도움됨 많은 순
사진 리뷰만

필터 옵션 — 액션 버튼 포함

필터
로드
경량
트레일
쿠셔닝

구성 요소 규칙

요소필수 여부규칙
핸들ESSENTIAL36×4px · radius 2px · 색 --border-hi · 항상 최상단 12px 마진
스크림ESSENTIALrgba(0,0,0,.5) · 탭 시 닫힘
타이틀ESSENTIAL16px/700 · 하단 보더 --border-lo
옵션 항목ESSENTIAL높이 52px · 선택됨 = 그린 + ✓ · 탭 즉시 닫힘(단일 선택) 또는 누적 후 "적용"(복수)
액션 버튼 행OPTIONAL복수 선택 시 필수 · "초기화(보조)" + "적용하기(주)" 2버튼

스펙

  • radius: top 22px(r-lg) · bottom 0
  • 배경: --surface-2 · 그림자: --shadow-md
  • 최대 높이: 화면의 80% · 초과 시 내부 스크롤
  • 등장: translateY +100% → 0 · --dur-base + --ease-spring
  • 해제: 핸들 드래그 다운 or 스크림 탭 or 단일 선택 즉시
DO

단일 선택(정렬)은 탭 즉시 닫힘. 복수 선택(필터)은 "적용" 버튼 필수. 핸들 드래그 close 항상 지원.

DON'T

Bottom Sheet 안에 또 다른 Bottom Sheet 띄우기. 항목 10개 이상(스크롤 고려 필요). 타이틀 없는 Bottom Sheet.

COMPONENTS

Empty State

데이터가 없는 상태를 사용자에게 알리고, 다음 행동을 유도하는 화면 패턴이에요. 빈 상태는 오류가 아니라 진입 포인트예요.

검색 결과 없음

🔍
"나이키 페가수스" 검색 결과가 없어요
검색어를 다시 확인하거나 다른 키워드로 검색해 보세요.

리뷰 없음 — CTA 포함

📝
아직 등록된 리뷰가 없어요
이 장비를 사용해봤다면
첫 번째 리뷰를 남겨보세요!

네트워크 오류 — 재시도 포함

📡
리뷰를 불러오지 못했어요
인터넷 연결을 확인하고 다시 시도해주세요.

구성 요소 규칙

요소필수 여부규칙
일러스트/이모지ESSENTIAL48px · opacity 0.4 · 맥락에 맞는 단일 이모지 또는 SVG 일러스트
타이틀ESSENTIAL16px/700 · 상황을 정확히 설명 · "없음", "못했어요" 등 사실 기술
설명ESSENTIAL13px · 다음 행동을 암시 · 최대 2줄
CTA 버튼OPTIONAL빈 상태 탈출 경로 제공 시 · Primary 또는 Neutral 버튼 1개

빈 상태 3종 패턴

패턴타이틀 톤CTA예시 상황
결과 없음검색어·필터 조건 명시없음 또는 "조건 초기화"검색, 필터 후 상품 없음
콘텐츠 비어있음첫 행동 유도Primary 버튼리뷰 0건, 찜 목록 0건
네트워크/오류"못했어요" 사실 기술"다시 시도" Neutral 버튼API 오류, 타임아웃
DO

"없음"을 설명한 뒤 다음 행동을 안내. 타이틀에 검색어나 조건 명시(검색어: "나이키 페가수스").

DON'T

"데이터가 없습니다" 단독. 감정 없는 영문 코드 노출. CTA 없이 막힌 느낌만 주기.

COMPONENTS

Skeleton

콘텐츠 로딩 중 레이아웃 이동을 방지하고 대기 경험을 개선하는 플레이스홀더예요. 실제 컴포넌트 형태와 일치시켜야 해요.

상품 카드 스켈레톤

랭킹 리스트 스켈레톤

리뷰 카드 스켈레톤

구성 요소 규칙

요소규칙
형태 일치실제 컴포넌트의 레이아웃·크기를 최대한 모방 — 로딩 후 레이아웃 이동 없어야 함
애니메이션shimmer(좌→우 광택 이동) · 1.6s linear infinite · 방향 항상 좌→우
색상베이스: --surface-2 · 하이라이트: --surface-3
텍스트 줄실제 텍스트 줄 수·비율과 동일하게 · 높이 14px(본문) / 10px(캡션)

사용 원칙

  • 300ms 이상 로딩 예상 시 스켈레톤 표시 (그 미만은 스켈레톤 없이 바로 콘텐츠)
  • 스피너와 스켈레톤은 같은 화면에 동시 사용 금지
  • 스켈레톤 → 실제 콘텐츠 전환 시 fade-in 0.2s 권장 (레이아웃 이동 방지)
  • 페이지 전체 로딩 시 AppBar는 실제 렌더, 콘텐츠 영역만 스켈레톤
DO

실제 UI 형태와 크기를 최대한 맞춤. 상품 카드 2×2 그리드라면 스켈레톤도 동일 그리드 구조.

DON'T

스켈레톤 박스 비율이 실제 콘텐츠와 크게 다름(레이아웃 이동 발생). 스피너 + 스켈레톤 혼용.

COMPONENTS

Product Card

상품 목록 화면에서 사용하는 2열 그리드 카드예요. 썸네일 + 브랜드 + 상품명 + 별점·리뷰 수로 구성돼요.

기본 그리드 (2열)

👟NEW
살로몬
S/LAB 판타즘 3
★★★★★(128)
👟
나이키
베이퍼플라이 3
★★★★☆(94)
👟
아식스
메타스피드 스카이 파리
★★★★★(76)
👟HOT
호카
로켓 X 2
★★★★☆(52)

구성 요소 규칙

요소필수 여부규칙
썸네일ESSENTIAL1:1 비율 · 배경 #FFF · 로딩 전 스켈레톤
브랜드명ESSENTIAL10px · --text-lo · 항상 상품명 위
상품명ESSENTIAL13px/600 · 1줄 말줄임 · 최대 20자
별점 + 리뷰 수ESSENTIAL별 11px 그린 · 리뷰 수 "(128)" 형태
뱃지OPTIONAL썸네일 좌상단 · NEW / HOT / BEST · 그린 배경 검정 텍스트

스펙

  • 카드 radius: --r-md(16px) · 배경: --surface-2 · 보더: --border-lo
  • 바디 패딩: 10px 12px 12px
  • 뱃지: 10px/700 · 좌상단 8px · radius 99px
  • 리뷰 0건: 별 회색 · "(0)" 표시
  • 호버: border-color → --border-hi
DO

썸네일 배경 흰색(투명 PNG 상품 이미지 대응). 브랜드명 → 상품명 순서 유지.

DON'T

상품명 2줄 허용(그리드 높이 불균일). 가격 노출(이 앱은 정보·리뷰 앱).

COMPONENTS

Banner

사용자를 특정 행동이나 기능으로 유도하는 전폭 프로모 카드예요. 홈·카테고리 상단에 1개만 배치해요.

브랜드 배너 (그린 강조)

뉴트럴 배너 (이벤트·공지)

구성 요소 규칙

요소필수 여부규칙
레이블ESSENTIAL10px/700 · 대문자 · letter-spacing .08em · 그린
타이틀ESSENTIAL16px/700 · 최대 2줄 · 행동 유도 문장
CTA 링크ESSENTIAL그린 텍스트 · 화살표 → · 배너 전체가 탭 영역
미디어OPTIONAL오른쪽 끝 · 56px · 이모지 또는 SVG

배너 타입 선택 기준

타입배경사용 상황
brand그린 그라디언트핵심 기능 유도 (프로필, 리뷰 작성 등)
neutral--surface-2이벤트·공지·랭킹 등 콘텐츠 탐색
DO

한 화면에 배너 1개만. 타이틀 2줄 이내. 전체 탭 영역을 CTA로(버튼 따로 없어도 됨).

DON'T

배너 2개 연속. 타이틀 3줄 이상. brand 타입을 이벤트에 남용(희소성 희석).

COMPONENTS

Section Header

홈·카테고리 페이지 내 콘텐츠 블록 구분에 사용하는 타이틀 행이에요. 타이틀 + 서브텍스트 + 더보기 화살표로 구성돼요.

기본 (타이틀만)

지금 핫한 장비 리뷰 🔥
더보기 →
콘텐츠 영역

서브텍스트 포함

리뷰 많은 러닝 장비 ✨
최근 7일 기준
전체보기 →
콘텐츠 영역

더보기 없음 (전체 노출 시)

카테고리
콘텐츠 영역

구성 요소 규칙

요소필수 여부규칙
타이틀ESSENTIAL18px/700 · 이모지 포함 가능 · 섹션 성격을 명확히
서브텍스트OPTIONAL12px · --text-lo · 기준·조건 보조 설명
더보기 링크OPTIONAL"더보기 →" 또는 "전체보기 →" · 콘텐츠가 잘려 있을 때만

스펙

  • 콘텐츠까지 하단 간격: 12px
  • 더보기 링크 정렬: align-items: flex-end (서브텍스트 있어도 링크는 하단 정렬)
  • 더보기 탭 영역: 최소 44×44px
DO

서브텍스트는 "최근 7일 기준" 같은 데이터 조건만. 콘텐츠 전체 노출 시 더보기 생략.

DON'T

타이틀 25자 이상. 더보기에 "클릭하세요" 불필요한 동사 추가. 이모지 2개 이상.

COMPONENTS

Rating

상품·리뷰의 만족도를 별점으로 표현하는 컴포넌트예요. 표시형(읽기 전용)과 입력형(탭 선택) 두 가지로 사용돼요.

표시형 — 사이즈 변형

4.5 (128) SM — 리스트·카드
4.5 (128) MD — 상품 상세
4.5 (128개 리뷰) LG — 리뷰 헤더

입력형 — 리뷰 작성

이 장비는 어떠셨나요?

4점 — 만족해요

점수-레이블 매핑

점수레이블사용 맥락
5점최고예요!입력 직후 실시간 피드백
4점만족해요
3점보통이에요
2점아쉬워요
1점별로예요

스펙

  • 별 색상: 선택됨 = --neon-green / 반 별 = 50% clip / 비선택 = --border-hi
  • SM: 11px · MD: 16px · LG: 24px
  • 입력형: 32px · 탭 영역 최소 44×44px · 선택 후 레이블 즉시 표시
DO

입력형은 탭 즉시 색 변경 + 레이블 피드백. 표시형 반 별(0.5 단위) 지원.

DON'T

입력형에서 0점 허용(최소 1점 제출). 별 8개 이상. 텍스트 없이 별만으로 점수 표현.

COMPONENTS

Tag / Label

상품 속성과 상태를 작은 알약 형태로 표시해요. 필터 칩보다 작고 인터랙션 없이 정보 전달만 해요.

속성 태그 (Attribute)

경량 로드 트레일 쿠셔닝 반응성 안정성

선택된 속성 (Selected)

경량 로드 트레일 쿠셔닝

상태 레이블 (Status)

NEW HOT BEST

실제 사용 예 — Product Card 조합

👟
살로몬
S/LAB 판타즘 3
경량로드NEW

구성 요소 규칙

타입배경텍스트사용 시점
attr(기본)--surface-3--text-mid선택 안 된 속성 태그
green(선택)그린 10%--neon-green선택된 속성 · 카드 안 강조 태그
status-new그린 12%--neon-green신상품 · 최근 등록 (30일 이내)
status-hot오렌지 10%#ff8c00최근 7일 리뷰 급증 상품
status-best퍼플 10%#b026ff누적 리뷰 수 1위

스펙

  • 높이: 24px · 수평 패딩: 10px · radius: 99px · 폰트: 11px/500
  • 상태 레이블 텍스트: 대문자(uppercase) 권장
  • 카드 1개당 태그 최대 3개 (이상이면 "+N" 생략 처리)
DO

태그는 사실 정보만(속성·신상 여부). 카드 안 태그 최대 3개.

DON'T

태그에 "좋아요" 같은 주관적 평가. Filter/Bar 칩을 태그로 교체(크기·인터랙션 다름).

COMPONENTS

Divider

섹션·콘텐츠·리스트 아이템을 시각적으로 구분하는 1px 선이에요. 세기에 따라 3가지 토큰을 사용해요.

강도별 3종

Subtle — --border-lo (#1A1A1A) · 카드 내부, 목록 아이템

Default — --border (#262626) · 섹션 구분, 탭바 하단

Strong — --border-hi (#383838) · 모달 헤더, Bottom Sheet 타이틀

레이블 구분선

또는

사용 매핑

위치강도토큰
카드 내부 구분 · 리뷰 카드 헤더/바디Subtle--border-lo
섹션 구분 · AppBar 하단 · 목록 아이템 사이Default--border
모달 헤더 · Bottom Sheet 타이틀 하단Strong--border-hi
로그인 "또는" · 폼 구분레이블 구분선--border-lo + 텍스트
DO

카드 내부에는 항상 Subtle. 섹션 사이는 Divider 대신 여백(24px↑) 먼저 검토.

DON'T

Divider 색을 임의 값으로 지정. 같은 화면에 3가지 강도 혼용.

COMPONENTS

Spinner

단순 액션(버튼 탭 후 응답 대기, 데이터 재요청)의 짧은 로딩 상태에 사용해요. 300ms 이상 예상될 때만 표시하고, 긴 로딩은 Skeleton을 우선해요.

사이즈

SM 16px
MD 24px
LG 40px

버튼 로딩 상태

전체 오버레이 로딩

리뷰를 불러오는 중이에요

사용 기준

상황컴포넌트이유
버튼 탭 후 API 응답 대기Spinner SM (버튼 안)버튼 크기 유지, 피드백 즉시
페이지 첫 데이터 로딩Skeleton레이아웃 안정, CLS 방지
풀 페이지 재로딩 (오류 재시도)Spinner LG (오버레이)스켈레톤이 없는 상황
무한 스크롤 다음 페이지Spinner MD (하단 중앙)스켈레톤 추가보다 간결
DO

버튼 로딩 중 disabled 처리(중복 탭 방지). 300ms 미만은 스피너 없이 바로 결과 표시.

DON'T

페이지 첫 로딩에 스피너(Skeleton 우선). 스피너 + Skeleton 동시 사용. 스피너 색을 브랜드 그린 외 임의 색으로.

COMPONENTS

Profile Card

마이페이지 상단에 표시되는 사용자 신원·활동 요약 카드예요. 아바타 + 닉네임 + 리뷰·좋아요 통계로 구성돼요.

기본 프로필 카드

🧑
러닝러버123
가입일 2024.03
24리뷰
137받은 좋아요
8도움됨

미설정 상태 (게스트)

+
프로필을 설정해보세요
맞춤 장비 추천을 받을 수 있어요

구성 요소 규칙

요소필수 여부규칙
아바타ESSENTIALAvatar/XL (80px · .av.xl) · 미설정 시 "+" 아이콘
닉네임ESSENTIAL16px/700 · 미설정 시 안내 문구
통계OPTIONAL리뷰 수·받은 좋아요·도움됨 · 3개 이하
수정 버튼OPTIONAL설정된 경우 우측 끝 · 미설정 시 Primary CTA
DO

미설정 상태엔 빈 카드 대신 행동 유도 문구 + Primary CTA. 통계는 3개 이하.

DON'T

통계 4개 이상(카드 폭 넘침). 닉네임 없이 "사용자" 같은 임시 텍스트.

COMPONENTS

Stat Block

리뷰 집계·상품 성능 수치를 나란히 보여주는 수평 통계 블록이에요. 홈 요약·상품 상세 상단에 사용해요.

리뷰 통계

4.5평균 별점
128리뷰 수
94%추천율

앱 전체 통계 (홈)

2,340총 리뷰
180등록 장비
4.3평균 평점

구성 요소 규칙

요소필수 여부규칙
수치ESSENTIAL22px/800 · 브랜드 그린(핵심 KPI) 또는 기본 텍스트
레이블ESSENTIAL11px · --text-lo · 수치 바로 아래
구분선ESSENTIAL항목 사이 1px --border-lo

스펙

  • 최대 항목: 3개 (4개↑ 수치 폰트 18px으로 축소)
  • 배경: --surface-2 · radius: --r-md · 외곽 보더: --border-lo
  • 그린 강조: 페이지당 1개 KPI 수치에만 사용
DO

핵심 KPI 1개만 그린. 수치는 천 단위 쉼표 포맷 (2,340). 레이블은 2자 이상 명사형.

DON'T

항목 4개 이상(각 항목 폭 너무 좁아짐). 수치 2줄 표시. 레이블에 단위 생략("개" 없이 숫자만).

COMPONENTS

Load More

목록 하단에서 추가 콘텐츠를 불러오는 패턴이에요. 무한 스크롤(자동)과 버튼 로드(수동) 두 가지 방식을 지원해요.

무한 스크롤 — 로딩 중

더 불러오는 중...

더보기 버튼 (수동)

🧑
러닝러버
2025.06.12
★★★★
가볍고 반응성이 좋아요. 로드 러닝에 최적입니다.

목록 끝

모든 리뷰를 확인했어요 총 128개 리뷰

방식 선택 기준

방식사용 상황UX 고려
무한 스크롤탐색형 목록 (리뷰 피드, 랭킹)자동 로드 · Spinner SM 표시 · 스크롤 위치 유지
더보기 버튼정보 중심 목록 (검색 결과, 필터 결과)수동 트리거 · 총 개수 노출 "더 보기 (127)"
DO

더보기 버튼에 남은 콘텐츠 수 표시. 목록 끝에는 "모든 리뷰를 확인했어요" 종료 메시지.

DON'T

무한 스크롤 + 더보기 버튼 혼용. 끝 상태 없이 계속 로딩 시도.

COMPONENTS

Modal / Dialog

삭제 확인·구매 확인처럼 사용자의 명시적 결정이 필요한 순간에 사용해요. 배경을 딤 처리해 포커스를 모달에 집중시켜요.

확인 다이얼로그

정보 다이얼로그

구성 요소 규칙

요소필수 여부규칙
스크림ESSENTIALrgba(0,0,0,.65) · 터치 시 닫힘 (파괴적 동작 제외)
타이틀ESSENTIAL17px/700 · 행동 결과를 서술 ("~할까요?" 형식)
본문OPTIONAL14px · --text-mid · 2줄 이하 권장
액션ESSENTIAL항상 2개 · 취소/확인 순서 · 파괴 동작은 빨간 강조
DO

타이틀을 의문문으로. 취소 버튼 항상 왼쪽. 파괴 동작은 빨간 계열 텍스트로 구분.

DON'T

액션 3개 이상. 스크롤이 필요한 긴 본문. 타이틀과 버튼 텍스트가 동일한 내용.

COMPONENTS

Accordion

FAQ·상품 상세 정보처럼 콘텐츠를 접고 펼치는 패턴이에요. 여러 항목이 공존하며 독립적으로 열리고 닫혀요.

자주 묻는 질문 (FAQ)

구매일로부터 7일 이내에 마이페이지 → 주문내역에서 반품을 신청할 수 있어요. 제품은 미사용 상태여야 하며, 왕복 배송비는 고객 부담이에요.
평균 2~3 영업일 소요되며, 제주·도서 산간 지역은 1~2일 추가될 수 있어요.
리뷰 작성 후 24시간 이내에 포인트가 자동 지급돼요. 사진 포함 시 추가 포인트가 쌓여요.

구성 요소 규칙

요소필수 여부규칙
트리거ESSENTIAL14px/500 · 전체 행 터치 가능 · 최소 높이 52px
아이콘ESSENTIALChevron 20px · 열림 시 180° 회전 · --dur-fast
본문ESSENTIAL13px · --text-mid · max-height 애니메이션
구분선ESSENTIAL항목 사이 --border-lo 1px

스펙

  • 기본 동작: 독립 개폐 (하나 열어도 나머지 닫히지 않음)
  • 애니메이션: max-height: 0 → 400px + --dur-base + --easing
  • 터치 영역: 트리거 전체 행 (아이콘만 X)
DO

트리거 텍스트를 질문형으로. 기본 상태 첫 항목 열림 권장. 최대 7개 항목.

DON'T

하나 열면 나머지 자동으로 닫힘 (Exclusive Mode) — FAQ에선 사용자가 비교 불가. 트리거를 아이콘 버튼으로만 한정.

COMPONENTS

Notice / Alert

페이지 내 인라인 상태 알림이에요. 사용자의 행동 결과(성공·오류)나 중요 안내를 콘텐츠 흐름 안에서 보여줄 때 사용해요. Toast와 달리 사라지지 않아요.

타입별 예시

ℹ️
안내
리뷰는 구매 확정 후 30일 이내에 작성할 수 있어요.
리뷰가 등록됐어요
작성해주신 리뷰가 24시간 내에 포인트로 적립될 예정이에요.
⚠️
재고가 얼마 남지 않았어요
현재 3개 남았어요. 지금 담아두세요.
!
결제에 실패했어요
카드 정보를 다시 확인하거나 다른 결제 수단을 사용해보세요.

Toast vs Notice 선택 기준

기준ToastNotice
표시 위치화면 하단 오버레이콘텐츠 흐름 인라인
지속 시간3초 후 자동 사라짐사라지지 않음
사용 상황즉각적 피드백 (저장됨, 복사됨)상태 설명 (오류, 안내)
DO

오류 상태 notice는 폼 상단에 배치. 타이틀은 간결하게 (15자 이하). 아이콘으로 시각 코드 강화.

DON'T

페이지에 2개 이상 동시 표시. notice + toast 동시 사용 (중복 알림). 단순 성공 상태에 error 색상 사용.

COMPONENTS

Quantity Stepper

장바구니·상품 상세에서 수량을 증감하는 인터랙티브 컨트롤이에요. − / 숫자 / + 세 영역으로 구성돼요.

기본 스테퍼

기본
1
최솟값 (비활성)
1
최댓값 (비활성)
10

장바구니 행 (컨텍스트 사용)

👟
나이키 페가수스 41
270mm · 블랙
149,000원
1

구성 요소 규칙

요소필수 여부규칙
감소 버튼ESSENTIAL최솟값(1)에서 disabled · 터치 영역 44×44px 이상
수량 표시ESSENTIAL15px/600 · 양쪽 구분선 · 최소 40px 너비
증가 버튼ESSENTIAL재고 상한에서 disabled · 최대 99 표시
DO

최솟값 1 미만으로 내려가지 않게. 최댓값은 재고 수량에 맞게. 수량 변경 시 총 금액 즉시 갱신.

DON'T

수량 0 허용 (장바구니에서 0 = 삭제는 별도 UX로). 수량 직접 입력(텍스트 필드) 혼용 — 별도 패턴 필요. 소수점 수량.

COMPONENTS

Tab Bar

동일 페이지 내에서 관련 콘텐츠를 수평으로 전환하는 탭이에요. 상품 상세(정보/리뷰/Q&A)나 마이페이지 서브 섹션에 사용해요.

상품 상세 탭

나이키 페가수스 41은 일상적인 훈련부터 장거리까지 폭넓게 소화할 수 있는 데일리 러닝화예요.

  • Air Zoom Pegasus 에어 쿠셔닝
  • ReactX 폼 미드솔 — 전작 대비 반발력 13% 향상
  • 와이드 토박스 개선으로 자연스러운 발 움직임
리뷰 128개가 여기 표시돼요 (Rating + ReviewCard 컴포넌트 조합)
Q&A 목록이 여기 표시돼요

구성 요소 규칙

요소필수 여부규칙
탭 항목ESSENTIAL2~4개 · 균등 너비(flex:1) · 최소 44px 높이
활성 인디케이터ESSENTIAL하단 2px 그린 바 · 항목 좌우 패딩 16px 안쪽 길이
탭 패널ESSENTIAL활성 탭에만 display:block · 패딩 16px 상단
배지 숫자OPTIONAL탭 라벨 우측 공백 뒤 숫자 (별도 배지 태그 X)
DO

탭 항목 2~4개. 라벨 짧게 (6자 이하). 현재 탭 컨텐츠는 즉시 교체(애니메이션 X).

DON'T

탭 5개 이상 (가로 스크롤 필요 → Filter/Bar 패턴 사용). 탭 변경 시 슬라이드 전환 — 스크롤 위치 이탈.

COMPONENTS

Price Display

상품 가격을 일관되게 표시하는 패턴이에요. 정가·할인율·최종가를 계층 구조로 시각화해요.

할인 가격

상품 상세 — 대형
30% 213,000원
149,000
카드 — 소형
213,000원 30%
149,000원
정가 (할인 없음)
49,000

가격 표시 규칙

요소규칙
최종가22px/800 · 기본 --text · 핵심 KPI만 그린
정가 (취소선)13px · --text-lo · line-through · 최종가 위
할인율 배지빨간 배경 · % 단위 · 정가와 같은 줄
단위(원)최종가와 같은 줄 · 13px · --text-lo

천 단위 형식

  • 항상 Intl.NumberFormat('ko-KR') 사용 — 213,000 형식
  • 소수점 가격 없음 · "원" 단위를 숫자 바로 오른쪽에 별도 span으로
  • 0원은 "무료" 텍스트 (숫자 표기 X)
DO

정가 → 할인율 → 최종가 순서. 할인율 배지는 정가와 같은 줄. 최종가가 가장 크고 굵게.

DON'T

정가 없이 할인율만 표시. "149000" 천 단위 없이 표기. 최종가에 원을 붙여 한 span에 넣음.

COMPONENTS

Form Group

레이블 + 입력 필드 + 힌트/에러 메시지를 묶은 최소 단위예요. 로그인·프로필 수정·리뷰 작성 폼에서 반복 사용해요.

기본 폼 예시 (프로필 수정)

다른 사용자에게 표시되는 이름이에요
올바른 이메일 형식을 입력해주세요
최대 50자

구성 요소 규칙

요소필수 여부규칙
레이블ESSENTIAL12px/600 · --text-mid · 필드 위 · 필수 * 빨강
입력 필드ESSENTIALInput 컴포넌트 참조
힌트OPTIONAL11px · --text-lo · 필드 아래 · 에러와 공존 불가
에러OPTIONAL11px · #f87171 · 필드 보더도 빨강 · 힌트 대체
DO

레이블 항상 필드 위. 에러 메시지는 필드 바로 아래. 필수 필드만 *로 표시 (선택을 표시하는 것보다 효율적).

DON'T

플레이스홀더만으로 레이블 대체 — 입력 시 가이던스 사라짐. 에러 + 힌트 동시 표시. 레이블에 콜론 붙임.

COMPONENTS

Switch / Toggle

알림·다크모드처럼 즉각 효과가 있는 On/Off 설정에 사용해요. 체크박스와 달리 탭 즉시 적용돼요.

상태별 예시

알림 설정 목록 (컨텍스트)

새 리뷰 알림
내 장비에 새 리뷰가 달리면
좋아요 알림
내 리뷰에 좋아요가 눌리면
주간 랭킹 알림
매주 월요일 오전 9시

Switch vs Checkbox 선택

기준SwitchCheckbox
적용 시점탭 즉시폼 제출 후
용도시스템 설정, 알림동의·선택 항목
상태On / Off (이진)선택 / 미선택 / 반선택
DO

탭 즉시 효과 적용 (확인 버튼 불필요). 레이블은 행동이 아닌 기능명으로 ("알림 켜기" → "푸시 알림").

DON'T

폼 안에서 Submit 전 적용되는 설정에 Switch 사용 — Checkbox로. Switch + "저장" 버튼 조합.

COMPONENTS

List Item / Row

설정·메뉴·선택 목록의 각 행 단위 패턴이에요. 아이콘 + 텍스트 + 우측 부가 요소의 3-존 레이아웃으로 구성돼요.

설정 목록

🔔
알림 설정
푸시·이메일 알림 관리
🏃
관심 스포츠
러닝, 사이클링
🌙
다크 모드
📋
앱 버전
1.2.4

값 선택 목록

러닝
사이클링
수영

구성 요소 규칙

필수 여부규칙
리딩 아이콘OPTIONAL36×36px · --surface-3 배경 · --r-sm
바디 (제목+부제)ESSENTIAL제목 14px/500 · 부제 12px · --text-lo
트레일OPTIONALChevron / Switch / 값 텍스트 / 선택 인디케이터 중 택 1

스펙

  • 최소 행 높이: 52px · 실제 패딩: 14px 상하
  • 항목 구분: 하단 1px --border-lo · 마지막 항목 구분선 없음
  • 터치 영역: 전체 행 (cursor:pointer + :hover 배경 --surface-2)
DO

트레일 요소는 1가지만. 탐색 목적 행에 Chevron. 값/상태 표시엔 텍스트 or 토글.

DON'T

트레일에 Chevron + Switch 동시 사용. 아이콘 없는 행과 있는 행 혼용(들여쓰기 불일치).

COMPONENTS

Tooltip

아이콘·약어·잘린 텍스트의 의미를 탭하거나 호버했을 때 말풍선으로 설명해요. 12자 이하의 짧은 보조 텍스트에만 사용해요.

위치 변형

구매 확정 후 30일 이내
5점 만점 기준 평균
3만원 이상 무료

구성 요소 규칙

요소규칙
텍스트11px · --text-mid · 최대 30자 · 1줄 권장
배경--surface-3 + --border 테두리
화살표CSS border trick · 5px · 하단 중앙 (기본)
트리거탭(모바일) / 마우스 호버(데스크톱)

스펙

  • 표시 지연: 탭 즉시 / 호버 300ms 후
  • 사라짐: 포커스 이탈 또는 2초 타임아웃(모바일)
  • z-index: --z-raised (10)
DO

정보성 보조 설명에만 사용. 12자 이하 단문. 항상 트리거 요소 가까이 위치.

DON'T

링크·버튼을 포함한 긴 설명 → Popover/Modal 사용. 항상 노출되는 안내 텍스트 → Notice 사용. 모바일에서 hover 의존.

COMPONENTS

Bottom CTA Bar

상품 상세 하단에 고정된 구매 행동 유도 바예요. 스크롤 여부와 관계없이 항상 화면 하단에 떠 있어요.

상품 상세 CTA

상품 상세 콘텐츠

리뷰 작성 CTA

리뷰 작성 폼
작성 중 · 자동 저장됨
Nike 페가수스 41 리뷰

구성 요소 규칙

요소필수 여부규칙
배경ESSENTIAL--bg · 상단 --border-lo 1px · 패딩 12px 16px
Primary CTAESSENTIAL그린 배경 · 높이 46~48px · flex:1 또는 고정폭
Secondary CTAOPTIONAL그린 테두리 · 장바구니 등 보조 동작
아이콘 버튼OPTIONAL찜/공유 · 48×48px · --border-hi 테두리

스펙

  • 위치: position: sticky; bottom: 0 (SPA 내) 또는 fixed (전체 페이지)
  • 안전 영역: iOS 홈 인디케이터를 위해 padding-bottom: env(safe-area-inset-bottom)
  • CTA 최대 2개 (아이콘 버튼 제외)
DO

Primary CTA(구매)가 항상 우측. 바 배경은 반투명 blur 대신 불투명 --bg. Safe-area padding 적용.

DON'T

CTA 3개 이상(터치 오류 증가). 상단 고정 사용(App Bar 영역 침범). 가격·수량 없이 "구매" 버튼만 노출.

COMPONENTS

Score / Metric

장비 세부 성능 항목(쿠셔닝·그립·무게)을 막대 그래프와 숫자로 시각화해요. 상품 상세 리뷰 집계 섹션에 사용해요.

세부 평점 (러닝화)

4.5
★★★★
128명 평가
쿠셔닝
4.5
반응성
4.3
내구성
4.0
착화감
4.8
무게
3.5

구성 요소 규칙

요소필수 여부규칙
항목 레이블ESSENTIAL13px · --text-mid · 고정 폭 72px · 5자 이하
ESSENTIAL높이 6px · 반경 3px · 그린 fill · 회색 track
수치ESSENTIAL13px/700 · 우측 고정 폭 28px
전체 별점OPTIONAL좌측 큰 숫자 + 별 아이콘 + 리뷰 수 · 세부 항목과 세트로
DO

항목 5개 이하. 수치와 바 함께 표시(바만 사용 시 인식 불명확). 전체 별점과 세트로 배치.

DON'T

항목 6개 이상(스캔 어려움). 퍼센트 단위 표시("90%" 대신 "4.5"). 바 색상을 의미 없이 여러 색으로 사용.

COMPONENTS

Variant Selector

색상·사이즈·옵션을 선택하는 상품 상세 내 인터랙티브 선택기예요. 칩 형태(텍스트)와 컬러 스왓치 두 가지로 구성돼요.

사이즈 선택

사이즈 · 270mm 선택됨
255
260
265
270
275
280
285

색상 선택

색상 · 블랙 선택됨
블랙

구성 요소 규칙

상태텍스트 칩컬러 스왓치
기본--surface-2 배경 · --border-lo원형 36px · --border-lo 테두리
선택그린 테두리 · 그린 텍스트 · 연그린 배경그린 테두리 + 3px glow shadow
품절35% 투명 · 취소선35% 투명 · 반투명 X 오버레이
DO

선택된 값을 레이블 우측에 텍스트로 표시. 품절 옵션도 그레이로 표시(인식 제공). 색상 선택 시 이름도 함께 표시.

DON'T

품절 옵션 완전 숨김(재고 인식 불가). 사이즈 칩 4개 이상일 때 1열 고정(overflow 대신 wrap 사용). 색상만 표시하고 이름 생략.

COMPONENTS

Photo Grid

리뷰 작성 시 사진을 첨부하거나, 상품·리뷰의 사진을 격자로 보여주는 컴포넌트예요.

리뷰 작성 — 사진 첨부

사진 첨부 (최대 5장)
👟 1
📦 2
+
사진 포함 시 포인트 추가 적립

상품 리뷰 갤러리 (보기)

👟
🏃
📦
🎯
👟
+38

구성 요소 규칙

모드그리드규칙
업로드3열 · 1:1 비율"+" 셀은 항상 마지막 · 최대 5장 초과 시 숨김 · 첨부 번호 배지
갤러리3열 · 1:1 비율6번째 셀에 나머지 수 "+N" 오버레이 · 탭하면 풀스크린 뷰어

스펙

  • 그리드 간격: 4px · 셀 radius: --r-sm
  • 최대 업로드: 5장 · jpg/png/webp · 5MB 이하
  • "+N" 오버레이: background:rgba(0,0,0,.45) · 텍스트 16px/700 · 흰색
DO

"+" 셀 항상 마지막 위치. 첨부 중 로딩 Spinner 표시. 삭제는 셀 우상단 × 버튼.

DON'T

"+N" 없이 사진 잘라서 표시(콘텐츠 누락 인지 불가). 2열·4열 혼용. 업로드 셀에 번호 없음(순서 알 수 없음).

COMPONENTS

Sort Sheet

피드·목록 화면에서 정렬 기준을 바꾸는 바텀 시트 변형이에요. 상단 "정렬" 버튼 탭 시 슬라이드업돼요.

리뷰 정렬 (인라인 데모)

정렬 기준
최신순
인기순
평점 높은 순
평점 낮은 순
도움됨 순

랭킹 피드 정렬

주간 종합 랭킹
월간 종합 랭킹
카테고리별 TOP

구성 요소 규칙

요소필수 여부규칙
항목ESSENTIAL15px · 기본 --text-mid · 선택 그린/700
선택 인디케이터ESSENTIAL20px 원형 · 선택 시 그린 배경 + ✓ 흰색
항목 구분선ESSENTIAL--border-lo · 마지막 항목 제외
헤더OPTIONAL"정렬 기준" 레이블 + X 버튼 — Bottom Sheet 핸들 아래
DO

항목 탭 즉시 적용 후 시트 닫힘. 현재 선택 항목에 체크 인디케이터. 항목 5개 이하.

DON'T

"적용" 버튼 추가(즉시 적용과 중복). 정렬 + 필터 혼용 시트(별도 분리). 항목 6개 이상 — 스크롤 필요.

COMPONENTS

Spec Table

장비의 기술 제원(무게·소재·드롭)을 레이블-값 쌍으로 나열해요. 상품 상세 "상품 정보" 탭 내 주요 섹션이에요.

러닝화 제원

브랜드Nike
모델명Pegasus 41
무게283g (US 10 기준)
드롭10mm
스택 높이힐 40mm / 포어풋 30mm
미드솔ReactX Foam
아웃솔고무 (발뒤꿈치·앞부분)
갑피엔지니어드 메시
추천 용도데일리 트레이닝, 장거리
출시일2024년 5월

헬멧 제원 (사이클링)

브랜드Giro
인증CPSC, CE EN1078
무게225g (M 기준)
통풍구25개
피팅 시스템Roc Loc Air Fit
사이즈S(51-55) · M(55-59) · L(59-63)

구성 요소 규칙

요소규칙
레이블 셀13px · --text-lo · 고정 폭 90px · 우측 정렬 X
값 셀13px/500 · --text · 줄바꿈 허용
행 구분선--border-lo 1px · 마지막 행 제외
행 수6~12행 권장 · 초과 시 "더 보기" Accordion으로
DO

레이블은 간결한 명사형 (4자 이하 권장). 단위는 값에 포함. 브랜드/모델명 최상단.

DON'T

레이블과 값을 같은 스타일로 표시(구분 불명확). 빈 값 행 표시("–" 사용 또는 숨김). 행 13개 이상 노출.

COMPONENTS

Chip Input

리뷰 태그·키워드를 칩 형태로 추가·삭제하는 인풋이에요. Enter 또는 스페이스로 칩을 생성해요.

리뷰 태그 입력

태그 추가 (최대 5개)
#쿠셔닝좋음 × #가벼운 × #데일리 ×
2개 더 추가할 수 있어요
빈 상태
최대 도달 (5/5)
#쿠셔닝 × #가벼운 × #데일리 × #남성용 × #추천 ×

구성 요소 규칙

요소규칙
11px · 그린 계열 · 높이 24px · × 삭제 버튼 포함
인풋배경 없음 · 테두리 없음 · 13px · placeholder로 안내
래퍼--surface-2 배경 · --border 테두리 · focus시 그린dim
최대 개수5개 · 초과 시 인풋 비활성 + 힌트 갱신
DO

Enter·Space·쉼표로 칩 생성. 공백 제거 후 생성. # 자동 prefix. 잔여 개수 힌트 표시.

DON'T

칩 6개 이상(입력란 없어짐). 중복 태그 허용. 특수문자·이모지가 포함된 태그.

COMPONENTS

Step Wizard

결제·회원가입·온보딩처럼 단계가 정해진 플로우에서 현재 위치와 진행률을 보여줘요.

결제 단계 (3단계 중 2번째)

배송지
2
결제 수단
3
주문 확인

리뷰 작성 단계 (4단계 중 1번째)

1
별점
2
사진
3
내용
4
태그

구성 요소 규칙

상태레이블연결선
완료(done)그린 배경 · 흰 ✓--text그린 2px
현재(on)그린 테두리 · 그린 숫자--text그린 2px (이전 → 현재)
미래회색 테두리 · 회색 숫자--text-lo--border-lo 2px

스펙

  • 최대 단계: 5 (6↑ 레이블 잘림)
  • 연결선: 인접한 두 단계 사이 · 각 닷의 중앙(top:14px) 기준 수평
  • 이전 단계 클릭: 허용 여부를 플로우마다 명시 (결제는 허용 / 리뷰 작성은 순차 강제)
DO

단계 레이블은 명사형 (3자 이하 권장). 완료 단계에 ✓ 아이콘. 현재 단계 그린 강조.

DON'T

단계 6개 이상(가로 공간 부족). 연결선 없는 단독 닷(순서 관계 불명확). 레이블 없이 숫자만 사용.

COMPONENTS

Swipe Action

리스트 아이템을 좌우로 스와이프해 북마크·삭제 등 액션을 노출하는 패턴이에요.

왼쪽 스와이프 (북마크 노출)

🔖 저장
👟
나이키 에어맥스 97
Running · 269,000원
🗑 삭제
🎽
언더아머 드라이핏 티셔츠
Apparel · 59,000원

구성 요소 규칙

요소규칙
스와이프 거리64–80px · 콘텐츠 이동 + 배경 노출
왼쪽 액션Blue · 저장·공유 등 긍정 액션
오른쪽 액션Red · 삭제·숨기기 등 파괴적 액션
spring easing--ease-spring 으로 탄성감 부여
Do — 파괴적 액션(삭제)은 오른쪽, 긍정 액션(저장)은 왼쪽에 배치해요.
Don't — 양쪽에 액션을 동시에 배치하면 방향이 혼란스러워요. 한 방향만 사용하세요.
COMPONENTS

Pull to Refresh

리스트 최상단에서 아래로 당겨 콘텐츠를 갱신하는 네이티브 제스처 패턴이에요.

당기는 중

당겨서 새로고침
🏃
오늘의 추천 러닝화
5분 전 업데이트
🎽
봄 시즌 기어 특가
12분 전 업데이트

로딩 중

업데이트 중...

구성 요소 규칙

상태아이콘문구
당기는 중↓ (화살표)당겨서 새로고침
임계점 초과↑ (반전)놓으면 새로고침
로딩 중↻ (스피너)업데이트 중...
완료업데이트 완료
Do — 로딩 완료 후 0.8s 유지하다 부드럽게 접어야 사용자가 완료를 인지해요.
Don't — 리스트 중간에서 당기는 인터랙션을 트리거하지 마세요. 최상단 스크롤 경계에서만 작동해야 해요.
COMPONENTS

Onboarding

첫 실행 시 핵심 가치를 전달하는 인트로 카드예요. 스킵 옵션은 항상 제공해야 해요.

온보딩 카드 (2/3)

🏋️
STEP 2 OF 3
내 운동에 맞는 장비를
AI가 추천해줘요
러닝·헬스·요가·등산 등 운동 종류와 레벨에 따라 최적의 장비를 찾아드려요.

구성 요소 규칙

요소규칙
페이지 수최대 3장 · 각 슬라이드는 단일 혜택만
스킵 버튼항상 노출 · Border 스타일
진행 점현재 페이지 32px, 나머지 24px
히어로3:2 비율 · 일러스트 또는 앱 화면 캡처
Do — 온보딩 완료 후 다시 보지 않도록 로컬스토리지에 완료 상태를 저장하세요.
Don't — 권한 요청(알림·위치)을 첫 슬라이드에 넣지 마세요. 기능 맥락 설명 후 요청하세요.
COMPONENTS

Search Result

검색어 하이라이트와 썸네일을 포함한 상품·콘텐츠 검색 결과 아이템이에요.

상품 검색 결과

👟
나이키 페가수스 41
Running · 나이키
189,000원
👟
나이키 에어맥스 270
Lifestyle · 나이키
169,000원
🎽
나이키 드라이핏 반팔
Apparel · 나이키
49,000원

검색 기록

나이키 러닝화
호카 클리프턴
운동 장갑

결과 없음

🔍 검색 결과가 없어요 '쿠팡 장갑'에 대한 결과를 찾을 수 없어요.
다른 키워드로 검색해보세요.

구성 요소 규칙

요소규칙
키워드 강조<mark> 태그 · neon-green · font-weight 700
썸네일48×48px · r-sm 라운드
가격우측 고정 · font-weight 700
빈 상태이모지 + 제목 + 설명 3줄 구성
Do — 검색 키워드는 <mark> 로 강조하되 대소문자·공백을 무시한 부분 일치로 처리하세요.
Don't — 결과가 없을 때 빈 화면만 보여주지 마세요. 추천 검색어나 인기 상품을 함께 노출하세요.
COMPONENTS

Range Slider

가격 범위·사이즈 등 연속 값의 최솟값·최댓값을 동시에 설정하는 듀얼 핸들 슬라이더예요.

가격 범위 필터

50,000원 — 140,000원
0원200,000원

무게 범위 필터

180g — 260g
100g400g

구성 요소 규칙

요소규칙
트랙 높이4px · surface-3 배경
채움 색neon-green · 두 핸들 사이 구간
핸들 크기20px 원형 · neon-green · shadow-md
현재 값 표시슬라이더 위에 font-weight 700 표시
Do — 핸들이 겹치지 않도록 최소 간격(min-gap)을 유지하고, 값은 항상 위에 표시해요.
Don't — 범위 슬라이더를 단일 값 선택에 사용하지 마세요. 단일 값에는 일반 슬라이더를 쓰세요.
COMPONENTS

Notification Item

알림 센터에 표시되는 이벤트·가격 변동·댓글 등 단건 알림 아이템이에요.

알림 목록

💸
나이키 페가수스 41 가격 인하!
관심 상품 · 189,000원 → 159,000원 (-16%)
2분 전
💬
내 리뷰에 댓글이 달렸어요
러너123 · "저도 같은 경험이에요!"
1시간 전
🎁
신규 회원 5% 할인 쿠폰 지급
마케팅 · 7일 후 만료 예정
어제
📦
호카 클리프턴 9 배송 완료
주문 #2024-08143 · CJ대한통운
3일 전

구성 요소 규칙

요소규칙
미읽음 닷아이콘 우상단 · 8px · neon-green
미읽음 텍스트font-weight 700 (읽음: 500)
아이콘40px 원형 · surface-3 배경
시간11px · text-lo · 우측 정렬
Do — 미읽음/읽음 상태를 시각적으로 명확히 구분해요. font-weight 차이만으로도 충분해요.
Don't — 알림 아이콘에 브랜드 로고 대신 카테고리 이모지를 쓰면 스캔 속도가 빨라져요.
COMPONENTS

Size Chart

신발·의류 사이즈를 그리드로 선택하는 컴포넌트예요. 품절 사이즈는 시각적으로 구분해요.

신발 사이즈 선택

230
235
240
245
250
255
260
265
270
275
구매 가능 선택됨 품절

의류 사이즈 선택

XS
S
M
L
XL
2XL
3XL
구매 가능 선택됨 품절

구성 요소 규칙

상태배경테두리텍스트
기본surface-2border-lotext-mid
선택(on)neon-greenneon-green--bg (검정)
품절(sold)surface-3border-hi 점선취소선 + 35% 불투명
Do — 품절 셀도 클릭 시 "품절된 사이즈예요" 토스트를 보여줘야 사용자가 이유를 알 수 있어요.
Don't — 품절 셀을 DOM에서 제거하지 마세요. 전체 사이즈 범위를 보여줘야 기대 재고를 파악할 수 있어요.
COMPONENTS

Quick Action

홈 화면·빠른 메뉴에서 주요 기능으로 즉시 이동하는 아이콘+라벨 버튼 그룹이에요.

홈 퀵 액션 (4열)

상품 상세 퀵 액션

구성 요소 규칙

요소규칙
아이콘 크기24px · 이모지 또는 SVG
라벨11px · font-weight 500 · text-mid
배치flex · gap 8px · 균등 분할(flex:1)
primary 상태neon-green 테두리 + 배경 tint
Do — 한 화면에서 퀵 액션은 최대 4~5개로 제한해요. 그 이상은 더보기 메뉴로 이동시켜요.
Don't — 라벨 없이 아이콘만 사용하지 마세요. 새 사용자는 아이콘 의미를 모를 수 있어요.
COMPONENTS

Countdown Timer

세일 종료·이벤트 마감까지 남은 시간을 시각화해 긴박감을 부여하는 컴포넌트예요.

플래시 세일 배너형

⚡ 플래시 세일 종료까지
러닝화 최대 40% 할인
0
2
시간
:
4
7
:
3
2

긴박 상태 (1시간 미만)

🔥 마감 임박
쿠폰 사용 기한
0
0
시간
:
1
8
:
0
4

구성 요소 규칙

요소규칙
기본 색상surface-2 배경 · text 숫자
긴박 임계값1시간 미만 → urgent 클래스 · red 계열
숫자 폰트tabular-nums · font-weight 800
각 단위2자리 고정 · 시·분·초 레이블 하단
Do — 1시간 미만일 때 red 계열로 자동 전환해 긴박감을 시각적으로 강조해요.
Don't — 모든 섹션에 카운트다운을 남용하지 마세요. 실제 마감이 있는 이벤트에만 사용해요.
COMPONENTS

Comparison Table

두 상품의 스펙을 나란히 비교해 구매 결정을 돕는 테이블이에요.

러닝화 2종 비교

항목
나이키 페가수스 41 189,000원
호카 클리프턴 9 219,000원
무게 287g 310g
힐 드롭 10mm 5mm
쿠셔닝 보통 매우 높음
적합 거리 10km 이하 하프·풀마라톤
리뷰 평점 ★ 4.3 ★ 4.7

구성 요소 규칙

요소규칙
승자 셀neon-green · font-weight 700
중립 셀text-mid · 기본 weight
헤더브랜드 10px + 상품명 13px + 가격 12px green
행 높이패딩 12px 16px · 구분선 border-lo
Do — 각 항목에서 우위인 쪽을 neon-green으로 강조해 스캔을 쉽게 해요.
Don't — 비교 상품을 3개 이상으로 늘리지 마세요. 가로 스크롤이 발생하면 비교 의미가 퇴색돼요.
COMPONENTS

Review Summary

전체 리뷰 분포를 막대 차트로 보여주는 총합 평점 컴포넌트예요.

종합 평점

4.6
★★★★★
리뷰 1,284개
5★
924
4★
231
3★
77
2★
26
1★
26

키워드 요약

쿠셔닝 좋음 (428) 가볍다 (312) 착화감 좋음 (287) 발볼 넓음 (201) 내구성 우수 (156) 디자인 예쁨 (134)

구성 요소 규칙

요소규칙
종합 점수48px · font-weight 900 · 소수점 1자리
분포 바6px 높이 · neon-green fill · 비율 width%
별점 아이콘16px · 소수 반영 (4.6 → ★★★★☆)
키워드 칩기존 chip 컴포넌트 재사용
Do — 리뷰 수가 없을 때는 별점 영역 전체를 숨기고 "첫 리뷰를 작성해보세요" 메시지를 보여주세요.
Don't — 분포 바 없이 총합 숫자만 표시하지 마세요. 분포가 보여야 신뢰도를 판단할 수 있어요.
COMPONENTS

Error State

네트워크 오류·404·빈 결과 등 예외 상황에서 사용자가 다음 행동을 취할 수 있도록 안내하는 페이지예요.

네트워크 오류

📡
인터넷 연결을 확인해주세요
네트워크가 불안정해요. Wi-Fi 또는 데이터를 켠 후 다시 시도해보세요.

404 페이지 없음

404
페이지를 찾을 수 없어요
주소가 잘못되었거나 삭제된 페이지예요. 메인으로 돌아가 다시 찾아보세요.

서버 오류

🛠️
잠시 점검 중이에요
서버에 일시적인 문제가 발생했어요. 잠시 후 다시 시도해주세요.

구성 요소 규칙

유형아이콘/코드CTA
네트워크 오류이모지 아이콘다시 시도 (primary)
40464px 회색 숫자홈으로 + 이전 페이지
서버 오류 5xx이모지 아이콘새로고침
빈 결과이모지 아이콘검색어 변경 유도
Do — 오류 유형마다 다른 아이콘과 메시지를 사용해요. 모든 오류에 같은 메시지를 쓰면 신뢰를 잃어요.
Don't — 기술적 오류 코드(ERR_CONNECTION_RESET)를 사용자에게 직접 노출하지 마세요.
COMPONENTS

FAB Extended

텍스트 라벨이 붙은 확장형 플로팅 버튼이에요. 화면의 주요 액션 1개에만 사용해요.

Primary (메인 액션)

Secondary (보조 액션)

구성 요소 규칙

요소규칙
높이56px · 일반 FAB(48px)보다 8px 높음
라벨15px · font-weight 700
위치화면 우하단 고정 · z-index raised
사용 제한화면당 Extended FAB 1개 · 주요 액션만
Do — 스크롤 시 텍스트를 숨기고 아이콘만 남기는 축소 애니메이션을 적용하면 공간 효율이 높아요.
Don't — Extended FAB와 일반 FAB를 같은 화면에 동시에 사용하지 마세요. 위계가 충돌해요.
COMPONENTS

Progress Bar

다운로드·업로드·단계 진행 등 완료율을 선형으로 표시하는 컴포넌트예요.

확정 진행률

다운로드 중72%
이미지 업로드45%
저장 공간91%

불확정 (Indeterminate)

서버 응답 대기 중...

얇은 형태 (4px)

구성 요소 규칙

유형높이색상
기본 (green)8pxneon-green
정보 (blue)8px#3b82f6
위험 (red)8px#ef4444 · 91%+ 사용
얇은 형태4px맥락에 따라 색상 선택
Do — 완료율을 알 수 없을 때 indeterminate 애니메이션을 사용하고, 예상 소요 시간 텍스트를 함께 보여주세요.
Don't — 프로그레스 바를 단순 장식용으로 사용하지 마세요. 실제 진행 상태를 반영해야 해요.
COMPONENTS

Color Swatch

상품의 색상 옵션을 원형 스와치로 선택하는 컴포넌트예요.

러닝화 색상 선택

미드나잇 블랙 선택됨

어패럴 색상

딥 블루 선택됨

구성 요소 규칙

상태테두리설명
기본transparent색상 그대로 노출
선택(on)2px text + 3px gap + 5px text이중 링 패턴
품절(sold)대각선 취소선 overlay
흰색 스와치border-lo 항상 표시배경과 구분
Do — 선택된 색상 이름을 스와치 아래에 텍스트로 표시해요. 색상맹 사용자를 위한 대비 제공이에요.
Don't — 품절 색상을 DOM에서 제거하지 마세요. 재입고 알림을 신청할 수 있도록 유지해요.
COMPONENTS

Timeline

주문 배송 현황·이력·단계 완료를 세로 타임라인으로 표시하는 컴포넌트예요.

배송 추적

주문 접수
결제가 완료되었어요
2024.08.14 09:32
상품 준비 중
나이키 물류센터 픽업 완료
2024.08.14 14:15
배송 중
CJ대한통운 · 운송장 번호 1234-5678
2024.08.15 08:44
배송 완료
예상 도착 2024.08.15

구성 요소 규칙

상태닷 색상텍스트
완료(done)neon-green 솔리드기본 (text)
현재(active)neon-green + glow ringfont-weight 700
대기(pending)border-hi 회색text-lo
Do — 현재 단계 닷에 pulse 애니메이션을 적용하면 진행 중임을 직관적으로 알 수 있어요.
Don't — 타임라인 아이템이 5개를 넘으면 접기(collapse) 기능을 제공해요. 전체를 항상 펼치지 마세요.
COMPONENTS

Gear Card

운동 장비·상품을 그리드에서 표시하는 핵심 카드예요. 썸네일·브랜드·이름·가격·평점을 포함해요.

2열 그리드

👟
-16%
RUNNING
페가수스 41
Nike
🏃
NEW
RUNNING
클리프턴 9
HOKA
🎽
APPAREL
드라이핏 반팔
Nike
🎒
GEAR
하이드레이션 팩
Salomon

구성 요소 규칙

요소규칙
이미지 비율4:3 고정 · 배경 surface-3
카테고리10px · font-weight 700 · 대문자
할인가원래 가격 취소선 + danger 배지
평점★ + 숫자 · 우측 정렬 · 12px
Do — 할인율 배지는 10% 이상일 때만 표시해요. 소폭 할인에 배지를 남용하면 시각적 노이즈가 생겨요.
Don't — 카드 이름을 2줄 이상 허용하지 마세요. 그리드 정렬이 깨져요. 말줄임(text-overflow)을 사용하세요.
COMPONENTS

Filter Chip Group

카테고리·브랜드·조건 등 필터를 가로 스크롤 칩 그룹으로 제공하는 컴포넌트예요.

카테고리 필터

전체 284
러닝 96
헬스 74
요가 52
등산 38
수영 24

브랜드 + 조건 복합

Nike
HOKA
Adidas
Brooks
Asics
Salomon
무료배송
오늘출발
할인중
4.5점 이상

구성 요소 규칙

요소규칙
기본 높이34px · padding 0 14px
선택 상태neon-green 테두리 + 배경 10% tint
카운트 뱃지surface-3 배경 · 선택 시 green tint
레이아웃flex-wrap 또는 가로 스크롤 (모바일)
Do — 모바일에서는 칩 그룹을 가로 스크롤로 제공하고, 마지막 칩 오른쪽에 8px 패딩을 추가해요.
Don't — 칩 라벨은 최대 8자로 제한해요. 긴 텍스트는 말줄임 처리하거나 더보기 버튼으로 대체하세요.
COMPONENTS

Map Pin

지도 위 매장·픽업 포인트를 표시하는 핀 말풍선이에요. 선택 상태와 비선택 상태를 구분해요.

핀 변형

나이키 강남
호카 홍대 ✓
살로몬 잠실

구성 요소 규칙

상태배경설명
기본neon-green일반 핀 · 검정 텍스트
선택(selected)bg(검정) + green 테두리현재 선택된 매장 · glow
Secondarysurface-2부가 정보 · 낮은 우선순위
꼬리 화살표::after pseudo핀 아래 6px 삼각형

사용 규칙

  • 핀 라벨에 브랜드명만 넣어요 — 거리나 영업 상태는 선택 후 팝업에서 표시해요.
  • 선택된 핀(selected)은 화면 중앙으로 지도를 이동시키고 하단 정보 카드를 올려요.
  • 핀이 3개 이상 겹치면 클러스터 핀으로 그룹화해요 — 숫자를 표시하고 탭하면 확대해요.
  • 지도 로딩 전에는 Skeleton으로 대체해요. 핀은 지도 타일이 완성된 후 순차 등장.
  • 핀 색은 neon-green · surface-2 두 가지만 — 임의 색 추가 금지.
COMPONENTS

Coupon Card

할인 쿠폰을 시각화하는 카드예요. 금액/퍼센트 할인과 사용 완료 상태를 구분해요.

사용 가능 쿠폰

5%
할인
러닝화 전 품목 5% 할인
10만원 이상 구매 시 사용 가능
~2024.08.31 만료
3,000
원 할인
신규 가입 감사 쿠폰
최소 주문금액 없음 · 1회 사용
~2024.09.30 만료

사용 완료

10%
할인
여름 시즌 특가 쿠폰
2024.08.10에 사용 완료
사용됨

구성 요소 규칙

요소규칙
좌측 할인 영역neon-green · 28px 숫자 · min-width 90px
점선 구분자repeating-gradient 세로 점선
사용 완료전체 60% 불투명 · 좌측 surface-3
만료 텍스트11px · text-lo
Do — 만료 3일 전부터 만료 텍스트를 red로 강조해 긴박감을 유도해요.
Don't — 사용 완료된 쿠폰을 즉시 목록에서 제거하지 마세요. 사용 이력 확인을 위해 접기 상태로 유지해요.
COMPONENTS

Wishlist Button

상품을 찜 목록에 추가/제거하는 하트 버튼이에요. 찜 상태는 red 계열로 표시해요.

상품 카드 내 찜하기

👟
페가수스 41
189,000원
🎽
드라이핏 반팔
49,000원

크기 변형

기본 44px
Large 52px
찜됨
찜됨 Large

구성 요소 규칙

상태아이콘색상
기본♡ (빈 하트)text-lo · surface-2 배경
찜됨(on)♥ (채운 하트)#f87171 · red tint 배경
hoverborder-hi · text
Do — 찜하기 토글 시 작은 scale 애니메이션(1.0→1.2→1.0)을 추가하면 피드백이 명확해요.
Don't — 찜 버튼에 텍스트 라벨을 추가하지 마세요. 아이콘만으로 의미가 충분해요.
COMPONENTS

Cart Item

장바구니의 단건 상품 행이에요. 썸네일·옵션·수량 조절·가격·삭제를 포함해요.

장바구니 목록

👟
Nike
페가수스 41
250mm · 미드나잇 블랙
🎽
Nike
드라이핏 반팔
M · 블랙

구성 요소 규칙

요소규칙
썸네일72×72px · r-sm
수량 조절기존 Quantity Stepper 컴포넌트 재사용
최소 수량1 · 1일 때 − 버튼 disabled
삭제underline 텍스트 버튼 · text-lo
Do — 삭제 시 즉시 제거하지 말고 "실행 취소" 토스트를 3초간 보여줘요. 실수 방지에 효과적이에요.
Don't — 수량을 0으로 만들어 삭제하는 패턴은 쓰지 마세요. 삭제와 수량 변경은 별도 액션이에요.
COMPONENTS

Member Tier

브론즈·실버·골드·플래티넘 등 멤버십 등급을 배지로 표시하고 다음 등급까지의 진행률을 보여줘요.

등급 배지

🥉 브론즈 🥈 실버 🥇 골드 💎 플래티넘

등급 카드 (골드)

🥇 골드
김장비 님
이번 달 구매 128,000원
플래티넘까지
72,000원 남음
골드 (128,000원) 플래티넘 (200,000원)

구성 요소 규칙

등급색상기준 (월 구매)
브론즈#b4783c 계열~49,999원
실버#a0a0b4 계열50,000~99,999원
골드#ffc800 계열100,000~199,999원
플래티넘neon-green200,000원 이상
Do — 등급 승급 시 모달로 축하 메시지와 혜택을 보여줘요. 첫 플래티넘 달성은 특별한 순간이에요.
Don't — 등급 조건을 소수점 단위로 복잡하게 설정하지 마세요. 기억하기 쉬운 라운드 숫자를 사용해요.
COMPONENTS

Callout

본문 내 중요 정보를 강조하는 인라인 블록이에요. 좌측 컬러 보더로 유형을 구분해요.

유형별 콜아웃

💡
TIP
러닝화는 실제 발 사이즈보다 5~10mm 크게 선택하는 게 좋아요. 달릴 때 발이 앞으로 쏠려요.
ℹ️
안내
무료 배송은 50,000원 이상 구매 시 자동 적용됩니다. 도서산간 지역은 추가 배송비가 부과될 수 있어요.
⚠️
주의
교환·반품은 수령 후 7일 이내에만 가능해요. 착용 흔적이 있으면 교환이 불가할 수 있어요.
🚫
주의 필요
쿠폰 유효기간이 오늘 자정에 만료됩니다. 지금 바로 사용하세요!

구성 요소 규칙

유형보더 색용도
TIP (green)neon-green유용한 팁·구매 가이드
INFO (blue)#3b82f6중립적 안내·배송 정보
WARNING (yellow)#fbbf24주의사항·정책 안내
DANGER (red)#ef4444마감 임박·중요 경고
Do — 제목 없이 본문만 있는 간단한 콜아웃도 허용해요. 아이콘과 보더만으로 유형이 구분돼요.
Don't — 한 페이지에 3개 이상의 콜아웃을 사용하지 마세요. 모든 것을 강조하면 아무것도 강조되지 않아요.
COMPONENTS

Delivery Status

주문의 배송 단계를 시각적으로 보여줘요. 현재 단계를 강조 표시해요.

배송 현황 트래커

주문접수
상품준비
배송중
배송완료
CJ대한통운
342-5821-0941
예상 도착: 7월 31일 (목) 오후

배송 히스토리

07/31 14:22
배송지 도착 — 서울 마포구
07/31 08:05
배송 출발
07/30 21:40
터미널 도착
07/30 15:00
상품 픽업 완료
상태색상의미
완료neon-green이전 단계
활성neon-green + glow현재 단계
대기border-hi미완료 단계
COMPONENTS

Order Summary

결제 전 금액 내역을 보여주는 요약 카드예요. 할인·배송비·최종 결제액을 포함해요.

주문 요약

페가수스 41
250mm · 블랙 · 1개
189,000원
드라이핏 반팔
M · 블랙 · 1개
49,000원
상품 금액238,000원
쿠폰 할인−15,000원
배송비무료
최종 결제223,000원
항목표시 방식
할인 금액#4ade80 녹색
무료 배송"무료" 텍스트
최종 금액neon-green + 굵게
COMPONENTS

Share Sheet

콘텐츠를 외부 채널로 공유할 때 나타나는 바텀 시트예요.

공유 시트

공유하기

채널 우선순위

채널우선순위비고
카카오톡1순위국내 메신저 점유율 1위
인스타그램2순위운동·라이프스타일 주 소비층
링크 복사항상 포함모든 맥락에서 동작하는 폴백
더보기(···)마지막OS 네이티브 공유 시트 열기

아이콘 스펙

요소
아이콘 영역48×48px · --r-full · --surface-2 배경
아이콘 크기24px (SVG 기준)
레이블10px · 400 · --text-lo · 1줄 말줄임
간격아이콘 간 16px gap

사용 규칙

  • 공유 진입점은 상품 상세 우상단 아이콘이에요. 탭 시 바텀 시트로 올라와요.
  • 공유 내용에 상품명 + 가격 + 딥링크 URL을 기본 포함해요.
  • 채널은 최대 4개 — 그 이상은 "더보기"에 숨겨요.
  • 취소 버튼은 항상 마지막에 전체 너비로 배치해요.
COMPONENTS

Rating Prompt

앱 사용 중 적절한 시점에 평점을 요청하는 카드예요. 긍정 경험 이후 노출해요.

앱 평점 요청

🏃
치트키가 마음에 드셨나요?
앱을 평가해 주시면 더 나은 서비스를 만드는 데 큰 도움이 돼요.
Do — 첫 주문 완료 후 또는 3회 연속 방문 후 노출해요. 1회 거절 시 30일간 재요청하지 않아요.
Don't — 앱 실행 직후 바로 요청하거나 오류 발생 직후 평점을 요청하지 마세요.
트리거조건
첫 주문 완료완료 화면 이탈 후 2초
재방문3회 연속 · 거절 후 30일
리뷰 작성 후리뷰 등록 완료 시
COMPONENTS

Address Form

배송지를 입력하는 폼이에요. 우편번호 조회 → 도로명 자동 입력 → 상세 주소 순으로 입력해요.

배송지 입력

필드입력 방식검증
우편번호주소 검색 API자동 입력
도로명 주소API 자동 완성읽기 전용
상세 주소직접 입력1자 이상
COMPONENTS

Payment Method

결제 수단을 선택하는 컴포넌트예요. 선택된 항목은 neon-green 보더로 강조해요.

결제 수단 선택

카카오페이
간편 결제
네이버페이
간편 결제
신용카드
국내 모든 카드
무통장 입금
7일 이내 입금
상태스타일
선택neon-green 보더 + 배경 tint
미선택border-lo
COMPONENTS

Recently Viewed

최근 본 상품을 수평 스크롤로 보여주는 컴포넌트예요.

최근 본 상품

페가수스 41
189,000원
드라이핏 반팔
49,000원
줄림 쇼츠
62,000원
에어줌 알파플라이
249,000원
라이트 트레이닝백
89,000원

구성요소 스펙

요소비고
썸네일80×80px · --r-sm상품 대표 이미지 · object-fit:cover
상품명12px · 400 · 1줄 말줄임최대 8자 표시 권장
가격12px · 600 · --text할인가 있으면 원가에 취소선
최대 노출20개초과 시 오래된 항목부터 제거 (FIFO)
스크롤horizontal · 스크롤바 숨김iOS momentum scroll 적용
빈 상태텍스트만 — "아직 본 상품이 없어요"섹션 헤더 자체를 숨기지 않기

사용 규칙

  • 홈·상품 상세·장바구니 최하단에 배치 — 구매 여정의 이탈 방지 수단이에요.
  • 각 아이템은 탭하면 해당 상품 상세로 바로 이동해야 해요.
  • X 버튼으로 개별 항목을 삭제할 수 있어요 — 전체 기록 초기화는 설정에서만.
  • 로그인 상태에서만 기록을 저장해요. 비로그인에서는 세션 내 임시 유지.
COMPONENTS

Push Notification

앱 푸시 알림의 외형과 내용 구조를 정의해요. 아이콘·제목·본문·시간으로 구성돼요.

알림 유형

🛍️
주문이 접수됐어요
페가수스 41 외 1건 · 238,000원
방금 전
🚚
배송이 출발했어요
오늘 중으로 도착 예정이에요
1시간 전
🏷️
타임 세일 시작!
페가수스 41이 20% 할인 중이에요
어제
Do — 제목은 12자 이내, 본문은 30자 이내로 유지해요. 행동 유도 문구를 포함해요.
Don't — 마케팅 알림만 남발하지 마세요. 정보성 알림 비율을 높게 유지해요.
요소규칙
아이콘40×40px · r-sm · 색상별 tint 배경
제목14px semibold · 12자 이내
본문13px · text-mid · 30자 이내
COMPONENTS

Product Detail

상품 상세 페이지의 핵심 헤더 영역이에요. 브랜드·상품명·별점·가격·재고를 포함해요.

상품 상세 헤더

Nike
페가수스 41 — 남성 러닝화
★★★★☆ 4.2 (리뷰 1,284개)
220,000원14%189,000원
재고 충분 ⚡ 1,890P 적립

상품 스펙 메타

브랜드Nike
카테고리러닝화 / 남성
소재에어줌 쿠션 + 드라이핏 갑피
무게275g (265mm 기준)
요소규칙
할인율#ef4444 빨강
별점#fbbf24 노랑 · 1자리 소수
포인트neon-green tint pill
COMPONENTS

Stock Badge

상품의 재고 상태를 색상과 점으로 알려주는 인라인 배지예요.

재고 상태

재고 충분 재고 부족 · 3개 남음 품절

사이즈 선택 사용 예시

250mm재고 충분
260mm3개 남음
270mm품절
상태색상기준
재고 충분neon-green10개 이상
재고 부족#fbbf24 노랑1–9개
품절#f87171 빨강0개
COMPONENTS

Point Badge

구매 시 적립되는 포인트를 상품·결제 화면에서 표시하는 배지예요.

포인트 표시 유형

인라인 (상품 카드) ⚡ 1,890P 적립
결제 요약 +3,780P
보유 포인트
12,450P
유형위치
인라인 pill상품 카드 · 상품 상세
결제 요약주문 요약 화면
보유 포인트 카드마이페이지 · 결제 화면
COMPONENTS

Info Banner

앱 내 주요 정보나 이벤트를 알리는 인라인 배너예요. 프로모션·안내·경고 3가지 유형이 있어요.

배너 유형

🎉
여름 런닝 페스타 진행 중
7월 31일까지 러닝화 전 품목 최대 30% 할인
ℹ️
배송 안내
오늘 오후 2시 이전 주문 시 당일 출고
⚠️
재고 소진 임박
현재 조회 중인 옵션 재고가 얼마 남지 않았어요
Do — 한 페이지에 1–2개로 제한해요. 가장 중요한 정보 하나만 강조해요.
Don't — 배너를 여러 개 쌓지 마세요. 모두 강조하면 아무것도 강조되지 않아요.
유형배경 색상용도
promoneon-green tint이벤트·할인
info#3b82f6 tint중립 안내
warn#fbbf24 tint주의 사항
COMPONENTS

Category Card

스포츠 카테고리를 그리드로 탐색하는 카드예요. 선택 상태는 neon-green으로 강조해요.

카테고리 그리드

🏃
러닝
🏋️
웨이트
🧘
요가
🚴
사이클
🏊
수영
팀스포츠

구성요소

요소필수규칙
아이콘ESSENTIAL이모지 또는 SVG 아이콘 · 32px
레이블ESSENTIAL카테고리명 · 11px · 500 · 2~4자 이내
컨테이너ESSENTIALradius --r-md · 1px border-lo · 비율 1:1

상태

상태배경보더레이블 색
Default--surface-2--border-lo--text-mid
Selectedrgba(182,255,61,.08)--neon-green 1.5px--neon-green
Disabled--opacity .38

사용 규칙

  • 카테고리는 5~8개를 권장해요 — 4개 미만은 굳이 그리드로 나눌 필요 없어요.
  • 아이콘은 카테고리당 하나만 — 그린 이모지·컬러 이모지 혼용 금지.
  • 선택 상태에서도 레이블이 짧고 명확해야 해요. "스포츠"보다 "러닝"이 더 구체적이에요.
  • 멀티 선택 시 선택 수를 상단 카운터로 표시해요 (예: "2개 선택됨").
COMPONENTS

Fit Guide

신체 측정치 기반 사이즈 추천 테이블이에요. 내 사이즈에 해당하는 행을 강조 표시해요.

러닝화 사이즈 가이드

발 길이 (mm) 발 너비 추천 사이즈
235–240보통240mm
240–245보통245mm
245–252보통250mm 추천
252–258보통255mm
258–265보통260mm
* 발볼이 넓은 경우 한 사이즈 크게 선택하세요.
요소규칙
현재 사이즈 행neon-green tint 배경 · bold 텍스트
추천 배지fit-rec pill
COMPONENTS

Activity Summary

러닝·운동 기록을 요약한 카드예요. 종목·날짜·핵심 지표(거리·시간·페이스 등)를 표시해요.

러닝 기록 카드

🏃 러닝
한강공원 코스
10.2km
거리
52
시간
5'06/km
페이스
2026. 7. 31 (목) 07:00 · 날씨 맑음

웨이트 기록 카드

🏋️ 웨이트
상체 집중 루틴
8종목
운동 수
65
시간
3,200kcal
소모
2026. 7. 30 (수) 20:30
요소규칙
종목 레이블neon-green · 11px · uppercase
핵심 지표22px bold · 단위 11px
COMPONENTS

Gift Wrap

선물 포장 옵션을 선택하는 컴포넌트예요. 체크 인터랙션으로 선택 상태를 표시해요.

포장 옵션 선택

📦
포장 안 함
기본 배송 패키지
🎁
선물 포장
리본 + 메시지 카드 포함 · +3,000원
💼
프리미엄 박스
로고 박스 + 고급 리본 · +8,000원
Do — 포장 추가 비용을 항상 명시해요. 기본 선택은 "포장 안 함"으로 설정해요.
Don't — 선물 포장을 기본 선택으로 설정하거나 비용을 숨기지 마세요.
상태스타일
선택neon-green 보더 · 체크 filled
미선택border-lo · 빈 원
COMPONENTS

Promo Code

할인 코드를 입력하고 유효성을 확인하는 컴포넌트예요. 성공·실패 피드백을 즉시 표시해요.

코드 입력

✓ GEAR20 — 20% 할인이 적용되었어요 (-₩18,000)
✕ INVALID — 유효하지 않은 코드예요
Do — 적용 버튼은 코드 입력 후 즉시 활성화하세요.
Don't — 오류 메시지를 모달로 표시하지 마세요. 인풋 바로 아래에 보여주세요.
상태스타일
기본border-lo 테두리
포커스neon-green 테두리
성공neon-green 배경 + 텍스트
실패#ef4444 배경 + 텍스트
COMPONENTS

Return Flow

반품·환불 절차를 단계별로 안내하는 컴포넌트예요. 사용자가 현재 진행 상태를 명확히 파악할 수 있게 해요.

반품 사유 선택

사이즈가 맞지 않아요
상품이 설명과 달라요
상품이 손상되었어요
단순 변심

반품 단계

반품 신청
2026.07.31 · 사이즈 불일치
수거 대기
2026.08.01 예정 · 택배 수거
3
검수 중
영업일 기준 1-2일 소요
4
환불 완료
결제 수단으로 환불 처리
Do — 각 단계에서 예상 소요 시간을 함께 표시하세요.
Don't — 완료 단계를 비활성화하지 마세요. 이력 확인에 중요해요.
상태스타일
완료neon-green 원형 ✓ 배지
진행 중neon-green 테두리 번호
대기border-hi 회색 번호
COMPONENTS

Workout Plan

일별 운동 계획을 카드 형식으로 표시하는 컴포넌트예요. 운동 종목·세트·진행률을 한눈에 파악할 수 있게 해요.

오늘의 운동

DAY 3 · 하체
하체 강화 루틴
3/5 완료
🏋️
바벨 스쿼트
목표 중량: 80kg
✓ 4세트
🦵
레그 프레스
목표 중량: 120kg
✓ 3세트
🏃
런지
자체 중량
3세트
카프 레이즈
자체 중량
4세트
진행률60%
Do — 완료한 운동은 체크 표시와 함께 neon-green으로 강조하세요.
Don't — 완료 항목을 목록에서 제거하지 마세요. 전체 볼륨 확인에 필요해요.
요소스타일
카드 헤더neon-green 그라디언트 배경
완료 세트neon-green ✓ + 텍스트
진행 바neon-green fill on surface-3
미완료 세트text-lo 회색
COMPONENTS

Brand Card

스포츠 브랜드를 카드 형식으로 표시하는 컴포넌트예요. 카테고리·특성 태그와 함께 선택 상태를 지원해요.

브랜드 선택

러닝 · 트레이닝
에어 기술과 반응성 쿠셔닝으로 장거리 러닝에 최적화
쿠셔닝 경량 로드런닝
러닝 · 라이프스타일
Boost 폼으로 에너지 반환율을 극대화한 퍼포먼스
에너지리턴 내구성
트레일 · 울트라
맥시멈 쿠셔닝과 메타로커로 장거리 피로를 최소화
맥시멈쿠션 트레일
러닝 · 안정성
GEL 기술과 안정성 구조로 과내전 교정 지원
안정성 과내전 GEL
Do — 브랜드 카드에는 구체적인 기술 태그를 포함해 비교를 쉽게 해주세요.
Don't — 브랜드 로고에 컬러 이미지를 사용하지 마세요. 다크 테마에서 충돌할 수 있어요.
상태스타일
기본surface-2 + border-lo
호버border-hi
선택neon-green 테두리 + surface 틴트
COMPONENTS

Equipment Compare

두 장비를 나란히 비교하는 컴포넌트예요. 스펙 막대 그래프로 우열을 시각적으로 표현해요.

런닝화 비교

추천
Nike Vaporfly 3
₩ 289,000
쿠션
9
경량
9.5
반응성
10
Adidas Adizero
₩ 259,000
쿠션
7.5
경량
8.5
반응성
8
Do — 추천 제품은 neon-green 테두리와 배지로 명확히 구분하세요.
Don't — 3개 이상 제품을 한 화면에 비교하지 마세요. 인지 부하가 커져요.
요소스타일
추천 카드neon-green 테두리 + 배지
추천 스펙 바neon-green fill
비교 스펙 바border-hi 회색 fill
COMPONENTS

Achievement

운동 목표 달성 배지를 표시하는 컴포넌트예요. 잠금/달성 상태와 진행률을 함께 보여줘요.

달성 배지

🏃
첫 10km 완주
달성
한 번의 러닝 세션에서 10km를 완주했어요
2026.07.12 달성
💪
주 5회 운동
이번 주 5회 운동을 달성해요
진행 중3/5일
🏆
마라톤 완주자
풀마라톤(42.195km)을 완주하면 해금돼요
잠금 상태
Do — 잠금 상태 배지도 목표를 명확히 표시해 동기부여를 유지하세요.
Don't — 잠금 배지를 완전히 숨기지 마세요. 사용자가 무엇을 향해 가는지 알아야 해요.
상태스타일
달성neon-green 배경 + 배지
진행 중neon-green 진행 바
잠금grayscale + opacity .5
COMPONENTS

Streak Card

연속 운동 기록을 시각화하는 컴포넌트예요. 주간 달성 현황과 격려 메시지를 함께 보여줘요.

이번 주 스트릭

12
일 연속 운동
🔥
이 속도라면 이번 달 목표 달성이 거의 확실해요!
Do — 오늘의 달성 여부를 명확히 강조해 즉각적인 동기부여를 제공하세요.
Don't — 스트릭이 끊겼을 때 부정적 메시지를 보여주지 마세요. 재시작을 격려하세요.
요소스타일
완료 일neon-green 배경 ✓
오늘neon-green + glow ring
미완료surface-3 빈 원
COMPONENTS

Body Stats

사용자의 신체 측정 데이터를 카드 그리드로 표시하는 컴포넌트예요. BMI 시각화와 변화 추이를 함께 보여줘요.

신체 측정 데이터

체중
72.4kg
▼ 1.2kg (지난달)
체지방률
18.3%
▼ 0.8% (지난달)
근육량
58.1kg
▲ 0.4kg (지난달)
BMI
22.8
정상 범위
저체중정상과체중비만
BMI 22.8 — 정상 범위
Do — 수치 변화에 방향 화살표(▲▼)와 색상으로 개선/악화를 즉시 파악하게 해요.
Don't — 체중·체지방 등 민감한 수치를 알림이나 공개 피드에 노출하지 마세요.
요소스타일
개선neon-green ▼ + 텍스트
악화#ef4444 ▲ + 텍스트
BMI 바그라디언트 + white 마커
COMPONENTS

Video Card

운동 가이드 영상을 썸네일 카드 형식으로 표시하는 컴포넌트예요. 재생 버튼과 영상 길이를 항상 표시해요.

추천 운동 영상

🏃
18:34
5km 페이스 향상을 위한 인터벌 트레이닝 완전 정복
Nike Running Academy · 조회 12만
🏋️
32:10
초보자를 위한 하체 강화 루틴 — 기구 없이 집에서
Adidas Training · 조회 8.4만
Do — 영상 길이를 썸네일 우하단에 항상 표시해 사용자가 시간 투자를 예측하게 해요.
Don't — 자동 재생으로 영상을 시작하지 마세요. 특히 소리가 있는 경우 절대 금지예요.
요소스타일
재생 버튼neon-green 원형 + bg 삼각형
영상 길이검은 반투명 배경 + 흰 텍스트
오버레이rgba(0,0,0,.4)
COMPONENTS

Cal Tracker

섭취·소모 칼로리를 추적하는 컴포넌트예요. 오늘의 칼로리 균형을 한눈에 파악할 수 있게 해요.

오늘의 칼로리

🍚
점심 — 닭가슴살 도시락
닭가슴살 150g · 현미밥 100g · 샐러드
+520 kcal
🏃
러닝 — 한강공원 5.2km
37분 · 평균 심박 152bpm
-380 kcal
🍌
간식 — 바나나 + 단백질 쉐이크
바나나 1개 · 단백질 30g
+280 kcal
🏋️
웨이트 — 하체 강화 루틴
45분 · 4개 운동
-290 kcal
오늘 순 칼로리 +130 kcal
Do — 소모는 neon-green, 섭취는 빨간 색으로 구분해 직관적 대비를 만드세요.
Don't — 칼로리만 추적하지 마세요. 운동 세부 정보를 함께 표시해 맥락을 제공하세요.
타입스타일
소모neon-green − 접두사
섭취#f87171 + 접두사
순 칼로리neon-green 큰 숫자
COMPONENTS

Route Map

러닝·자전거 경로를 미니맵으로 시각화하는 컴포넌트예요. 거리·페이스·고도를 함께 표시해요.

오늘의 러닝 경로

한강공원 러닝코스
5.2km
거리
5'42"
평균 페이스
37
총 시간
Do — 시작점(green)과 종료점(red)을 색상으로 구분하세요.
Don't — 경로 미니맵만 표시하지 마세요. 핵심 수치를 반드시 함께 보여주세요.
요소스타일
경로 선neon-green stroke + glow
시작점neon-green 원
종료점#ef4444 원
COMPONENTS

Gear Health

장비의 소모 상태를 추적하는 컴포넌트예요. 사용 km 기반으로 교체 시기를 시각적으로 안내해요.

장비 상태

Nike Vaporfly 3
482km / 권장 500km
쿠셔닝
18%
아웃솔
35%
갑피
72%
⚠️ 쿠셔닝 소모 — 교체를 권장해요
압박 양말 세트
38회 사용
압박력
78%
원단
85%
Do — 교체 임박 항목은 빨간 경고와 함께 구체적인 권장 사항을 제공하세요.
Don't — 정확한 소모 수치 없이 "교체 필요"만 표시하지 마세요. 맥락이 필요해요.
상태색상
양호 (70%+)neon-green
주의 (30-69%)#fbbf24 노란색
교체 필요 (<30%)#ef4444 빨간색
COMPONENTS

Social Post

운동 기록을 소셜 피드에 공유하는 컴포넌트예요. 활동 요약 카드와 좋아요·댓글 인터랙션을 지원해요.

활동 피드

Do — 운동 기록 포스트에는 핵심 수치(거리·페이스·시간)를 카드로 요약해 첨부하세요.
Don't — 다른 사용자의 몸무게·건강 수치를 피드에 노출하지 마세요.
요소스타일
활동 카드surface-3 배경
페이스 수치neon-green
좋아요 (활성)neon-green 텍스트
GUIDELINES

UX Writing

전체가 "-요"체 하나로 말해요. 데이터는 자신 있게, 예측은 정직하게 — 이 균형이 이 프로젝트 보이스의 핵심이에요.

보이스 원칙

원칙O (이렇게)X (이렇게 말고)
어체 통일"추정값이에요""추정값입니다"
수사 표기"5단계"로 통일"5가지" · "다섯 단계" 혼용 금지
브랜드명"치트키""장비 빨" (띄어쓰기 금지)
도메인 컬러그린 = 러닝 · 퍼플 = 헬스 문맥에서만 강조컬러 무작위 강조
예측치 표기헤드라인에서 직접 — "출시하면, 이렇게 달라져요."각주로 미루기

카피 O / X 예시

맥락O (이렇게)X (이렇게 말고)
플레이스홀더"어떤 장비를 찾고 있어요?"
질문형 플레이스홀더
"장비명을 입력하세요"
명령형 — 사용자를 지시하지 않아요
수치 서술"쿠션이 7mm 더 두꺼워요"
수치 근거로 말하기
"쿠션이 더 좋아요"
근거 없는 형용사 — 신뢰를 낮춰요
에러 메시지"올바른 이메일 형식이 아니에요."
원인 직접 설명
"오류가 발생했습니다."
모호한 오류 — 사용자가 뭘 해야 할지 몰라요
데이터 표현"38%가 더 오래 신었어요"
무인칭 — 데이터 자체가 말하게
"저희 데이터에 따르면 사용 시간이 늘었습니다"
"저희" 금지 · 수치 없이 막연한 서술

헤드라인 문형

  • "-요"체 : 명사형 = 2 : 1 — 대화체 다음엔 명사형으로 리듬 전환. "질문이 대화가 돼요." → "커머스가 아니라, 큐레이션."
  • 핵심 표현의 의도적 반복은 커버 · 중간 · 아웃트로 3곳까지만.
  • 키워드 그린 강조는 헤드라인당 1곳 — 두 곳부터는 강조가 아니에요.
  • 숫자는 아라비아 숫자로, 단위는 붙여쓰기 — "7mm", "38%", "46개".
GUIDELINES

디자인 체크리스트

Spectrum의 Design Checklist를 옮겼어요. 컴포넌트나 화면을 새로 만들 때 이 목록을 통과해야 "완성"이에요 — 리뷰 기준이자 QA 게이트예요.

컴포넌트를 새로 만들 때

항목확인할 것
상태기본 · 호버 · 눌림 · 비활성 · (해당 시) 포커스 · 로딩 전부 정의됐나
토큰원시 HEX·px 대신 토큰만 썼나 (스펙 문서 포함)
대비Color 페이지의 사전 검증 조합 안에 있나 — 작은 퍼플 텍스트 없나
터치모바일 터치 영역 44×44px 이상인가
키보드Tab 도달 · 포커스 링 표시 · Space/Enter 동작
반응형1440 · 900 · 640 · 390px에서 깨지지 않나
모션이징·지속시간이 토큰 값인가 · reduced-motion에서 안전한가
카피"-요"체 · 동사형 레이블 · 그린 강조 1곳 이하
문서이 시스템에 구성요소·상태·스펙·Do/Don't가 추가됐나
Figma같은 이름의 컴포넌트/변수가 있나 · 상태 표에 등재했나

페이지에 적용할 때

  • 같은 크기 요소가 연속 2회 이상 반복되지 않나 · 균등 격자 3연속이 아닌가
  • 그린=러닝 / 퍼플=헬스 문맥이 맞나 · 한 위계에 두 색이 동시에 오지 않나
  • 깊이를 그림자가 아니라 표면(surface-1/2/3)으로 만들었나
  • 새로 만든 간격이 스페이싱 스케일 밖의 임의 값은 아닌가
RESOURCES

파일 · 수정법

토큰은 전부 style.css 상단 :root에 있어요. 색 하나를 바꾸면 사이트 전체가 따라와요 — 그게 이 시스템의 목적이에요.

파일 구조

경로내용역할
index.html케이스 스터디 본문마크업 · 인라인 JS
assets/css/style.css전체 스타일상단 :root가 토큰 원본 — 여기만 수정
assets/fonts/Paperlogy 800·900디스플레이 서체 (TTF)
assets/screens/앱 화면 WebP 46장케이스 스터디 화면 이미지
vendor/서드파티 로컬 사본Pretendard · GSAP · ScrollTrigger · SplitType · QRCode.js
cheatkey-ds/index.html이 디자인 시스템 문서단일 HTML SPA

토큰 수정 시나리오

브랜드 색을 바꾸고 싶다
--neon-green: #B6FF3D;
값 하나만 교체 → --neon-green-hover·--neon-green-dim도 같은 계열로 함께 조정
배경 밝기를 높이고 싶다
--bg: #0A0A0A → #121212
surface-1/2/3 도 비슷한 비율로 같이 올려야 대비가 유지돼요
새 컴포넌트 클래스 추가
style.css 맨 아래에 추가 → var(--*) 토큰만 사용, 하드코딩 금지. 새 색이 필요하면 :root에 토큰을 먼저 추가
케이스 스터디 섹션 추가
Section Header 패턴(번호 라벨 → 헤드라인 → 리드) 복사 후 번호 재정렬. GSAP ScrollTrigger 핀은 .user-flow 구간에만 제한

성능 메모

  • Pretendard: 이미 동적 서브셋 woff2 사용 중 ✓
  • Paperlogy: 현재 TTF → woff2로 변환 시 30~40% 절감. @font-face에 woff2 우선, TTF 폴백 순서.
  • 앱 화면 이미지: WebP로 이미 최적화됨 ✓
  • 인라인 JS: GSAP · ScrollTrigger는 vendor/ 로컬 — 네트워크 의존 없음 ✓
RESOURCES

Figma

CSS가 source of truth예요. 색을 바꿀 땐 style.css :root와 피그마 Variables를 같은 날 동기화해요.

Variable Collections

컬렉션역할주요 그룹
Primitive원시 값 — 색·수치·타이포 원본 (89개 변수)Color/Brand · Color/Scale · Color/Status · Typography · Number/Spacing · Number/Radius
Semantic역할 토큰 — Primitive를 참조 (61개 변수)Color/fg · Color/bg · Color/border · Spacing · Number/Radius · Number/Component · Number/Offset

CSS ↔ Figma 대조

CSS 토큰 (style.css)Figma Variable상태
--neon-green #B6FF3DColor/Brand/primary-runningColor/bg/base-running✓ 동기화 완료
--neon-green-hover #C8FF5FColor/Brand/primary-running-pressed✓ 동기화 완료
--neon-green-dim #6B8F24Color/Brand/primary-running-dim✓ 신규 추가 (2026-07-31)
--neon-purple #B026FFColor/Brand/primary-fitnessColor/bg/base-health✓ 동기화 완료
--neon-purple-dim #6D1AA0Color/Brand/primary-fitness-dim✓ 신규 추가 (2026-07-31)
--bg #0A0A0AColor/Brand/primary-blackColor/bg/base✓ 동기화 완료
--surface-1 #111111Color/Scale/surface-1Color/bg/elevated✓ 동기화 완료
--surface-2 #161616Color/Scale/surface-2✓ 동기화 완료
--surface-3 #1D1D1DColor/Scale/surface-3Color/bg/surface✓ 동기화 완료
--text #E5E5E5Color/Scale/text-hiColor/fg/primary✓ 동기화 완료
--text-mid #7A7A7AColor/Scale/text-midColor/fg/secondary✓ 동기화 완료
--text-lo #4A4A4AColor/Scale/text-loColor/fg/tertiary✓ 동기화 완료
--border-lo #1A1A1AColor/Scale/border-subtleColor/border/light✓ 동기화 완료
--border #262626Color/Scale/borderColor/border/default✓ 동기화 완료
--border-hi #383838Color/Scale/border-strongColor/border/strong✓ 동기화 완료
--r-xs 4pxNumber/Radius/4✓ 신규 추가 (2026-07-31)
--r-sm 8pxNumber/Radius/8✓ 동기화 완료
--r-md 16pxNumber/Radius/16✓ 동기화 완료
--r-lg 22pxNumber/Radius/22✓ 신규 추가 (2026-07-31)
--r-xl 28pxNumber/Radius/28✓ 신규 추가 (2026-07-31)
--r-2xl 32pxNumber/Radius/32✓ 신규 추가 (2026-07-31)
--r-full 9999pxNumber/Radius/9999✓ 동기화 완료

Dev Mode Code Syntax

2026-07-31 전체 동기화 — Primitive · Semantic 모든 변수에 WEB code syntax(var(--token-name)) 설정 완료예요. 피그마 Dev Mode에서 변수를 선택하면 CSS 토큰명이 바로 보여요.

운영 규칙

  • 색 수정은 Primitive 컬렉션의 원시 값만 — Semantic은 자동으로 따라와요.
  • CSS 토큰이 바뀌면 같은 날 피그마 Primitive 값도 동기화하고, 변경 이력에 날짜를 기재해요. 미루면 CSS·Figma 불일치가 핸드오프 때 혼란을 만들어요.
  • 신규 토큰은 Primitive에 먼저 추가 → Semantic에서 alias → code syntax(WEB) 설정 순서로요.
  • 폰트: Pretendard는 로컬 폰트 — 텍스트 편집은 피그마 안에서 직접 (외부 편집 시 폰트 로드 실패).
RESOURCES

라이브 앱 비교

이 디자인 시스템은 케이스 스터디 페이지(style.css)의 토큰 문서예요. 실제 서비스인 better-with-gear-front.vercel.app은 React + Tailwind CSS v4 기반이라 토큰 이름과 값이 달라요. 이 페이지는 두 시스템의 차이를 명시해 혼동을 방지하기 위한 거예요.

왜 다른가

케이스 스터디 (이 DS)라이브 앱
기술 스택Vanilla HTML / CSSReact + Tailwind CSS v4
토큰 목적포트폴리오 프레젠테이션프로덕트 UI 컴포넌트
Source of truthstyle.css :rootTailwind config / CSS @layer
스케일 단위px 절대값 (--sp-*)rem 기반 (--spacing: .25rem)
연동 여부없음 — 각자 독립적으로 유지됨

브랜드 컬러 비교

역할케이스 스터디라이브 앱비고
Running 그린 --neon-green
#B6FF3D
--color-brand-running
#55d909
채도·명도 다름 (Figma 동기화 완료)
Health 퍼플 --neon-purple
#B026FF
--color-brand-health
#d64fff
라이브가 더 밝음
배경 --bg
#0A0A0A
--color-bg-base
#0e0e0e
미세 차이
표면 --surface-1
#111111
--color-bg-elevated
#1a1a1a
라이브가 더 밝음

Radius 비교

스텝케이스 스터디라이브 앱
SM--r-sm 8px--radius-sm 4px
MD--r-md 16px--radius-md 6px
LG--r-lg 22px--radius-lg 8px
XL--r-xl 28px--radius-xl 12px

케이스 스터디는 디바이스 프레임·카드 같은 대형 요소 중심이라 스케일이 높아요. 라이브 앱의 실제 UI 컴포넌트(버튼·입력 등)는 훨씬 낮은 값을 써요.

토큰 이름 체계 비교

케이스 스터디라이브 앱
브랜드색 접두사기능 중심: --neon-green도메인 중심: --color-brand-running
스페이싱--sp-1 ~ --sp-16 (2px~160px)Tailwind utility 클래스 (gap-4, p-6)
이징--easing: cubic-bezier(.2,.7,.2,1)cubic-bezier(.4,0,.2,1) (Material easing)

규칙

  • 케이스 스터디 수정: style.css :root가 source of truth. 이 문서를 함께 업데이트해요.
  • 라이브 앱 수정: React 레포의 Tailwind 설정이 source of truth. 이 문서를 참조하지 않아도 돼요.
  • 브랜드 색이 바뀌면: 두 시스템을 각각 독립적으로 업데이트해요. 자동 연동은 없어요.
  • 이 문서는 발산을 허용하되 명시해요 — 값이 달라지면 이 비교표를 최신 상태로 유지해요.
RESOURCES

작업 프로세스

모든 변경은 실서버 체크 → 피그마 확인 → DS 반영 순서로 진행해요. 실제 구현이 source of truth이고, DS 문서는 마지막에 정리해요.

기본 흐름

단계대상하는 일
① 실서버 체크 style.css :root 실제 구현값 확인 — 토큰명·HEX·px 값이 source of truth
② 피그마 확인 Figma Variables Primitive · Semantic 값이 style.css와 일치하는지 검증, 불일치 시 피그마 업데이트
③ DS 반영 cheatkey-ds/index.html 확인된 내용을 문서에 정리 — 대조표·스펙·변경이력 업데이트

시나리오별 체크리스트

토큰 값 변경

  1. style.css :root 값 수정
  2. Figma Primitive 컬렉션 해당 변수 값 업데이트
  3. DS r-figma 대조표 값 수정 + r-changelog에 날짜·이유 기재

신규 토큰 추가

  1. style.css :root에 토큰 추가
  2. Figma Primitive에 변수 생성 → Semantic에서 alias → WEB code syntax 설정
  3. DS 해당 파운데이션 섹션 표에 추가 + r-figma 대조표 + r-changelog

컴포넌트 스펙 변경

  1. 실사이트에서 실제 동작·값 확인
  2. Figma 컴포넌트 확인 — 값·상태·변형이 실사이트와 일치하는지 검증
  3. DS 컴포넌트 섹션 스펙 표 업데이트 + r-changelog

원칙

  • DS 문서를 먼저 고치지 않아요 — 항상 실서버·피그마 확인 후 마지막에 정리해요.
  • 피그마와 CSS가 불일치하면 CSS가 이겨요 (CSS = 실제 배포된 것).
  • 변경 이력은 빠뜨리지 않아요 — "언제·무엇이·왜" 세 가지를 r-changelog에 남겨요.
  • Figma 변수에 새 값을 추가할 때 WEB code syntax(var(--token-name))를 반드시 설정해요.
RESOURCES

변경 이력

Apple HIG·Spectrum처럼 변경 이력을 남겨요. 무엇이 언제 왜 바뀌었는지 적어두면, 같은 고민을 다시 하지 않아요.

v1.7 2026-08-03

  • Seed Design System 의존 완전 제거 — CDN 링크(seed-design/css@2.3.0) · CSS 오버라이드 블록 삭제. 치트키 자체 토큰(--neon-green 등)으로 대체 완료.
  • Badge 컴포넌트 자체 구현seed-badge__* 클래스를 jb-badge 시스템으로 교체 (27개 인스턴스). solid/weak/outline × brand/critical/positive/warning/neutral 변형 완전 지원.
  • 박안에 박스 제거 — panel 내부 중첩 box 레이아웃 단순화, 정보 접근성 향상.
  • 얇은 섹션 내용 보강 — c-categorycard · c-recentlyviewed · c-sharesheet · c-mappin 구성요소표·스펙표·사용규칙 추가.

v1.6 2026-07-31

  • 외부 DS 의존 제거 — 외부 컴포넌트 라이브러리 의존 제거, 치트키 자체 컴포넌트로 전환
  • FAB Deprecated 표시c-fab 섹션 태그 Beta → Deprecated, contextual-floating-button 대체 안내 callout 추가 (치트키 DS 정책 반영)
  • 브랜드 컬러 실서버 동기화 — DS --neon-green · Seed CSS 오버라이드 전체를 #6BFF15#B6FF3D(style.css source of truth)로 수정, 브랜드 토큰 오버라이드 표 값도 동일하게 정합
  • DS 품질 감사 · Foundation--glow-green 데모 라벨 구 색상 수정, Semantic Tokens에 --text-hi·--text-bright·neon 변수명(hover·dim) 추가, Motion에 --ease-spring·--ease-expo·--dur-reveal·Z-Index 스케일 10개 추가
  • DS 품질 감사 · Components — c-appbar 스펙 정합(배경 --bg--surface-1, 패딩 12/20px→16px, 아이콘 영역 32→36px), c-chip radius 20px→--r-full, c-button Ghost 텍스트 색 명시, c-overflow 행 높이 48px→패딩 실측값으로, c-profilecard Avatar LG(64px)→XL(80px)

v1.5 2026-07-31

  • Figma Variables 전체 동기화 — Primitive · Semantic 모든 변수에 WEB code syntax(var(--token-name)) 설정, Dev Mode에서 CSS 토큰명 직접 노출
  • 누락 Primitive 변수 신규 추가 (6개) — 반지름: Number/Radius/4(--r-xs) · /22(--r-lg) · /28(--r-xl) · /32(--r-2xl), 딤 색상: Color/Brand/primary-running-dim(--neon-green-dim) · primary-fitness-dim(--neon-purple-dim)
  • 브랜드 컬러 정합 확인 — --neon-green #B6FF3D · --neon-purple #B026FF 모두 Figma Color/Brand/primary-*와 값 일치
  • Figma 대조표 전면 재작성 — 6행 → 22행, Primitive→Semantic alias 경로 명시, 전 항목 "동기화 완료" 확인

v1.4

  • FAB 컴포넌트 문서 추가 — Quick Menu · Go to Top 두 변형
  • Overflow 컴포넌트 문서 추가 — 컨텍스트 메뉴 트리거
  • Icon 파운데이션 문서 추가 — Key Line · Naming Rule · 19개 카테고리
  • 랜딩페이지 전용 섹션 삭제 — Device Frame · Section Header · Wave Band · Responsive · 배포 체크리스트 · 테이프
  • Figma Variables 네이밍 정리 — Radious 오타 수정 · Semantic 그룹 재구성(Color/fg · Spacing · Number/Radius)
  • Input radius 정합 — --r-sm(8px)으로 Radius 표·컴포넌트 스펙 통일 (이전 스펙 10px·--r-md 혼재 수정)
  • App Bar 검색 플레이스홀더 오타 수정 ("공간한" → "원하는")
  • 데드 토큰 --text-bright 제거
  • Focus ring 토큰 추가--focus-ring(그린 2px · offset 3px), 전역 :focus-visible 적용, WCAG 2.2 Focus Appearance 충족
  • Date Picker 키보드 인터랙션 표 추가 — Tab·방향키·PageUp/Down·Esc, Type A·B 각각
  • Navigation Bar aria 문서화 — role tablist/tab, aria-selected, aria-label
  • Figma 동기화 원칙 강화 — 미동기화 항목 명시 + "같은 날 변경이력 기재" 의무화
  • 파일 섹션에 Paperlogy woff2 변환 성능 메모 추가
  • 컴포넌트 라이브 인터랙션 추가 — Chip 토글 · Checkbox/Radio 클릭 · Navigation Bar 탭 전환 · FAB Quick Menu 열기·닫기 · Overflow 컨텍스트 메뉴 · Calendar 월 이동·날짜 선택 · Type B 연도 이동·월 선택 · Switch/Toggle · Input 직접 입력 · 에러 헬퍼 텍스트 추가

v1.3

  • 스테이트 레이어 규칙 추가 — 컴포넌트별 상태 색을 따로 정의하는 대신 on-color 오버레이 불투명도(8/12/12/38%)로 통일 (Material 3)
  • 컴포넌트 상태 표 추가 — Stable/Beta 표기로 완성도 명시 (Primer)
  • 키보드 인터랙션 표 — Button · Checkbox/Radio (Spectrum)
  • 카피 규칙을 컴포넌트 문서 안으로 — Button 레이블 Do/Don't (Polaris)
  • 디자인 체크리스트 페이지 신설 — 리뷰·QA 게이트 (Spectrum Design Checklist)
  • 다크 테마 깊이 규칙 명문화 — 그림자 대신 표면 사다리, 그림자 사용 시 다크에서 불투명도 2배

v1.2

  • 색 조합 대비 사전 검증표 추가 — 퍼플 #B026FF가 본문 대비 4.31:1로 AA 미달임을 명시하고 대체색(#C77DFF) 지정
  • 컴포넌트 비교표 추가 — Button vs Chip, Checkbox vs Radio vs Chip
  • 시맨틱 스페이싱 이름 도입 (label-to-headline 등)
  • 모션 지속시간에 토큰명(d1·d2·d3) 부여

v1.1

  • 컴포넌트 문서를 구성요소(ESSENTIAL/OPTIONAL) → 상태 → 변형 → 스펙 → Do/Don't 구조로 재작성 (코드잇 디자인 시스템)
  • 컬러를 Primitive → Semantic 2계층으로 분리

다음에 할 것

  • Text Field 에러 상태 실사용 검증 → Beta 해제
  • Figma 컴포넌트 상태를 이 문서의 상태 표와 동기화
  • FAB Go to Top 변형 Figma 컴포넌트 추가
  • Overflow 컨텍스트 메뉴 Figma 컴포넌트 추가