Roblox
기울어진 사각 O 마크와 소셜 연결·UGC 체험이 이어지는 적응형 홈 피드
Brand DNA
브랜드 DNA
- 브랜드명: Roblox
- 한 줄 정체성: 누구나 만들고 누구나 플레이하는 UGC 게이밍/메타버스 플랫폼 (특히 키즈/틴)
- 공식 디자인 철학: "Reimagining the way people come together" — UGC + 사회적
- 시그니처 요소 1개: 빌딩·진행·움직임을 뜻하는 기울어진 사각 O 마크 + 원형 아바타 Connections + 무수히 많은 체험(experience) 카드. Steam/Epic의 "스토어"가 아니라 친구와 바로 합류하는 "사회적 놀이터" 톤
Tone & Mood
톤 & 무드
- 핵심 키워드 3개: 메타버스, UGC, 키즈
- 무드 설명: 밝거나 어두운 무채색 셸 위로 사용자 제작 체험의 컬러풀한 썸네일과 블록형 아바타가 전경을 채운다. 크롬은 절제하고 Connections, 추천 이유, 동시 접속자 수를 가까이 배치해 사회적 발견을 강조한다.
- 비주얼 스타일: 모던 미니멀
- 밀도(Density): Comfortable
- 모서리 성향: Soft (6~10px)
- 평면성: Subtle
Color System
컬러 시스템 (CSS 변수)
:root {
/* Primary - Roblox Red */
--color-primary-50: #FFE6E5;
--color-primary-100: #FFB5B1;
--color-primary-200: #FF807A;
--color-primary-300: #FF5247;
--color-primary-400: #F03328;
--color-primary-500: #E2231A; /* 시그니처 */
--color-primary-600: #B81912;
--color-primary-700: #8C120D;
--color-primary-800: #5F0A07;
--color-primary-900: #330404;
/* Live green (사회적/온라인) */
--color-live: #19E66B;
/* Neutral */
--color-neutral-0: #FFFFFF;
--color-neutral-50: #F0F1F4;
--color-neutral-100: #DCDFE6;
--color-neutral-300: #A8AAB3;
--color-neutral-500: #6F7280;
--color-neutral-700: #393B41;
--color-neutral-800: #2A2D32;
--color-neutral-900: #191B1F;
--color-neutral-1000: #0C0D0F;
/* Semantic - 라이트 캔버스 */
--color-success-bg: #E3FAEE;
--color-success-fg: #0E9E50;
--color-warning-bg: #FFF4D6;
--color-warning-fg: #946A00;
--color-error-bg: #FDE7E6;
--color-error-fg: #C81810;
--color-info-bg: #E4F2FF;
--color-info-fg: #1577CC;
/* Surface - 라이트 우선 */
--bg-base: #FFFFFF;
--bg-subtle: #F0F1F4;
--bg-elevated: #FFFFFF;
--bg-overlay: rgba(25,27,31,0.55);
/* Text */
--text-primary: #191B1F;
--text-secondary: #393B41;
--text-tertiary: #6F7280;
--text-on-primary: #FFFFFF;
--text-disabled: #A8AAB3;
/* Border */
--border-default: #DCDFE6;
--border-subtle: #F0F1F4;
--border-strong: #A8AAB3;
--border-focus: #E2231A;
}
[data-theme="dark"] {
/* Semantic - 다크 캔버스 */
--color-success-bg: #062F1F;
--color-success-fg: #19E66B;
--color-warning-bg: #4A3D08;
--color-warning-fg: #FFC93C;
--color-error-bg: #5F0A07;
--color-error-fg: #FF5247;
--color-info-bg: #082238;
--color-info-fg: #4DBFFF;
/* Surface */
--bg-base: #191B1F;
--bg-subtle: #1F2226;
--bg-elevated: #2A2D32;
--bg-overlay: rgba(12,13,15,0.75);
/* Text */
--text-primary: #FFFFFF;
--text-secondary: #DCDFE6;
--text-tertiary: #A8AAB3;
--text-on-primary: #FFFFFF;
--text-disabled: #6F7280;
/* Border */
--border-default: #2A2D32;
--border-subtle: #1F2226;
--border-strong: #393B41;
--border-focus: #FF5247;
}
Typography
타이포그래피
- 폰트 페어링:
- UI(영문): Builder Sans (Roblox 자체) / Inter 폴백
- 한글: Pretendard / Noto Sans KR
- 코드: JetBrains Mono / Source Code Pro
- 위계:
- Display: 40px / 700 / 1.15 / -0.02em
- H1: 26px / 700 / 1.2 / -0.015em
- H2: 18px / 700 / 1.3 / -0.01em
- H3: 15px / 600 / 1.4 / 0
- Body: 14px / 400 / 1.5 / 0
- Body Small: 13px / 400 / 1.45 / 0
- Caption: 11px / 600 / 1.4 / 0
- Code: 13px / 400 / 1.5 mono
Spacing
스페이싱
- Base unit: 4px
- 토큰: ``
css --space-xs: 4px; --space-sm: 8px; --space-md: 12px; --space-lg: 20px; --space-xl: 32px; --space-2xl: 48px; --space-3xl: 72px;`` - Container: max-width 1280px, 좌우 패딩 16px
Border Radius
Border Radius
--radius-none: 0;
--radius-sm: 6px;
--radius-md: 8px;
--radius-lg: 12px;
--radius-xl: 16px;
--radius-full: 9999px;
Shadow / Elevation
Shadow / Elevation
--shadow-none: none;
--shadow-sm: 0 1px 2px rgba(12,13,15,0.08);
--shadow-md: 0 6px 18px rgba(12,13,15,0.12);
--shadow-lg: 0 20px 56px rgba(12,13,15,0.18);
--shadow-red: 0 4px 12px rgba(226,35,26,0.25);
Iconography
Iconography
- 스타일: Filled (블록 톤) / Outline 혼합
- Stroke 굵기: 2px
- 모서리 처리: Round (블록 끝)
- 추천 라이브러리: Roblox 자체 / Lucide
Component Guide
컴포넌트 가이드
Button
.btn { font: 700 13px/1 'Builder Sans',Inter,sans-serif; padding: 9px 16px; border-radius: 8px; border: 0; cursor: pointer; transition: background 150ms ease, transform 150ms ease; }
.btn-primary { background: var(--color-primary-500); color: var(--text-on-primary); }
.btn-primary:hover { background: var(--color-primary-400); transform: translateY(-1px); box-shadow: var(--shadow-red); }
.btn-play { background: #19E66B; color: #062F1F; }
.btn-play:hover { background: #34F285; }
.btn-secondary { background: var(--bg-elevated); color: var(--text-primary); }
.btn-secondary:hover { background: var(--border-strong); }
.btn-ghost { background: transparent; color: var(--text-secondary); }
Input
.input { background: var(--bg-elevated); border: 1px solid var(--border-default); border-radius: 8px; padding: 9px 14px; font: 400 14px/1.4 'Builder Sans',sans-serif; color: var(--text-primary); width: 100%; }
.input:focus { outline: none; border-color: var(--border-focus); }
Card (Experience tile)
.exp { background: var(--bg-elevated); border-radius: 12px; overflow: hidden; cursor: pointer; transition: transform 150ms ease; }
.exp:hover { transform: translateY(-2px); }
.exp .cover { aspect-ratio: 1; }
.exp .name { padding: 8px 10px 2px; font: 700 13px/1.3 'Builder Sans',sans-serif; color: var(--text-primary); }
.exp .meta { padding: 0 10px 10px; font-size: 11px; font-weight: 500; line-height: 1; color: var(--text-tertiary); display: flex; align-items: center; gap: 5px; }
.exp .meta .dot { color: var(--color-live); }
Badge
.tag { display: inline-flex; padding: 3px 9px; border-radius: 9999px; font: 700 11px/1.4 'Builder Sans',sans-serif; }
.tag-red { background: var(--color-primary-500); color: var(--text-on-primary); }
.tag-live { background: var(--color-success-bg); color: var(--color-live); }
.tag-robux { background: rgba(255,255,255,0.10); color: var(--text-primary); display: inline-flex; align-items: center; gap: 4px; }
Navigation (Side)
.sidebar { background: var(--bg-base); border-right: 1px solid var(--border-default); padding: 12px 8px; display: flex; flex-direction: column; gap: 4px; }
.sidebar .item { padding: 10px 12px; border-radius: 8px; font: 600 14px/1 'Builder Sans',sans-serif; color: var(--text-secondary); display: flex; align-items: center; gap: 10px; cursor: pointer; }
.sidebar .item:hover { background: var(--bg-elevated); color: var(--text-primary); }
.sidebar .item.active { background: var(--bg-elevated); color: var(--text-primary); }
Motion
Motion
--duration-fast: 120ms;
--duration-base: 200ms;
--duration-slow: 350ms;
--ease-out: cubic-bezier(0.16, 1, 0.3, 1);
Anti-patterns
Anti-patterns
1. 라이트·다크 중 한 테마를 강제하지 말 것 — 앱의 System 설정과 사용자 선택을 존중 2. 현재 기울어진 O 마크를 예전 빨간 R 블록으로 대체하지 말 것 3. 모서리 sharp(<6px) 사용 금지 — 키즈 톤 부드러움 필수 4. 어두운 우중충한 톤 강제 금지 — UGC 다양한 컬러가 살아야 함 5. 채도 낮은 회색 카드 사용 금지 — 항상 컬러풀 썸네일