사용자 화면 · 회원가입/로그인
LOG-009 · 2026. 01. 29
| 0 | 공통 규칙 |
|
| 1 | 로그인 안내 모달 |
|
| 2 | 소셜 로그인 실패 모달 |
|
| 3 | 네트워크 오류 모달 |
|
Design Output
위 스토리보드 기획을 CHAART OS 디자인 토큰으로 변환한 결과물. 실제 구현 시 참조할 최종 디자인.
로그인 안내
계속하려면 로그인이 필요해요
Update History
--cta-gradient 적용 · 모달 유형별 케이스 카드 추가1. 화면 구조 개요
※ LOG-009는 시스템 레벨 알림/확인을 위한 공용 모달 컴포넌트이다. 3가지 유형(Confirm, Alert-소셜, Alert-네트워크)으로 사용된다.
.sb-dp-sys-modal (모달 박스), .sb-dp-sys-modal-dim (딤 오버레이)var(--bg) #FAFAF8, border 없음, border-radius:0 (R=0 직각)2. 레이어 구조 + 치수
| # | 영역 / 클래스 | 위치 / 치수 | 상세 속성 |
|---|---|---|---|
| 1 | 딤 오버레이.sb-dp-sys-modal-dim | position:absolute; top:0; left:0; right:0; bottom:0; z-index:5 | background:var(--overlay-dim) rgba(26,26,26,0.45) — 외부 탭 시 닫힘 불가 |
| 2 | 모달 박스.sb-dp-sys-modal | position:absolute; top:50%; left:50%; transform:translate(-50%,-50%); z-index:10; width:78%; aspect-ratio:1/1 | background:var(--bg) #FAFAF8, border 없음, border-radius:0, display:flex, flex-direction:column, justify-content:center, align-items:center, padding-bottom:25px |
| 3 | 본문 텍스트 영역.sb-dp-sys-modal__text | text-align:center; padding:0 24px | 타이틀 + 설명 문구 포함 래퍼 |
| 4 | 타이틀.sb-dp-sys-modal__title | margin:0 0 8px (var(--space-2)) | font-family:var(--sans) Pretendard Variable, font-size:var(--text-md) 17px, font-weight:700, color:var(--charcoal) #1A1A1A, letter-spacing:var(--ls-tight) -0.02em |
| 5 | 설명 문구.sb-dp-sys-modal__desc | margin:0 | font-family:var(--sans) Pretendard Variable, font-size:var(--text-md) 17px, font-weight:500, color:var(--text-secondary) #555555, letter-spacing:var(--ls-normal) 0 |
| 6 | 버튼 컨테이너.sb-dp-sys-modal__actions | position:absolute; bottom:0; left:0; right:0; display:flex; gap:0 | 버튼 1~2개 수평 배치. ❶ 2버튼 시 각 flex:1로 좌우 균등 분할 (Secondary 좌 / Primary 우) |
| 7 | Primary 버튼.sb-dp-sys-modal__btn--primary | flex:1; height:50px; margin:0 | background:var(--cta-gradient) linear-gradient(135deg, #961E23 0%, #B22A30 50%, #961E23 100%), font-family:var(--sans), font-size:var(--text-base) 15px, font-weight:600, color:var(--white) #ffffff, letter-spacing:var(--ls-normal) 0, border-radius:0 |
| 8 | Secondary 버튼 (❶만).sb-dp-sys-modal__btn--secondary | flex:1; height:50px; margin:0 | background:var(--text-secondary) #555555, font-family:var(--sans), font-size:var(--text-base) 15px, font-weight:600, color:var(--white) #ffffff, letter-spacing:var(--ls-normal) 0, border-radius:0 |
3. 핵심 인터랙션
4. 상태 변화
| 상태 | 조건 | 시각적 변화 | CSS 클래스 |
|---|---|---|---|
| 숨김 (기본) | 트리거 미발생 | 딤+모달 opacity:0, pointer-events:none | (클래스 없음) |
| 등장 | 트리거 발생 | 딤 opacity:0→1 (300ms), 모달 opacity:0→1 + scale:0.88→1 (350ms/400ms spring) | .is-visible |
| 노출 중 | 모달 활성 | 딤+모달 opacity:1, pointer-events:auto, 배경 잠금 | .is-visible |
| 닫힘 (애니메이션) | 버튼 클릭 | 모달 opacity:1→0 + scale:1→0.92 (200ms/250ms), 딤 opacity:1→0 (250ms) | .is-closing (300ms 후 자동 제거) |
5. 네비게이션 플로우
6. 에러/예외 처리
7. 모션 스펙
| 동작 | 속성 | duration | easing |
|---|---|---|---|
| 딤 등장 | opacity: 0 → 1 | 300ms | cubic-bezier(0.2, 0, 0, 1) |
| 모달 등장 — opacity | opacity: 0 → 1 | 350ms | cubic-bezier(0.2, 0, 0, 1) |
| 모달 등장 — scale (spring) | transform: translate(-50%,-50%) scale(0.88) → scale(1) | 400ms | cubic-bezier(0.34, 1.56, 0.64, 1) |
| 모달 닫힘 — opacity | opacity: 1 → 0 | 200ms | cubic-bezier(0.4, 0, 1, 1) |
| 모달 닫힘 — scale | transform: translate(-50%,-50%) scale(1) → scale(0.92) | 250ms | cubic-bezier(0.4, 0, 1, 1) |
| 딤 닫힘 | opacity: 1 → 0 | 250ms | cubic-bezier(0.4, 0, 1, 1) |
※ 닫힘 모션 시 transform은 translate(-50%,-50%)를 반드시 유지한 채 scale만 변경. 중앙 정렬 위치가 흐트러지지 않아야 함.
8. 여백·간격 요약
| 항목 | 값 | 비고 |
|---|---|---|
| 모달 너비 | width: 78% | 화면(폰 목업) 폭 기준 비율 |
| 모달 비율 | aspect-ratio: 1 / 1 | 정사각형 고정 — 높이 자동 계산 |
| 모달 위치 | top:50%; left:50%; transform:translate(-50%,-50%) | 화면 정중앙 고정 — transform 반드시 유지 |
| 본문 좌우 패딩 | padding: 0 24px | 타이틀 + 설명 영역 |
| 타이틀 → 설명 간격 | margin-bottom: 8px (var(--space-2)) | 타이틀 아래 여백 |
| 모달 하단 버퍼 | padding-bottom: 25px | 본문과 하단 고정 버튼 사이 여유 — 25px 유지 필수 |
| 버튼 영역 위치/높이 | position:absolute; bottom:0; left:0; right:0; height:50px | 모달 하단 고정 |
| 2버튼 레이아웃 (❶) | display:flex; gap:0 — 각 버튼 flex:1 | 간격 없이 좌우 균등 분할. Secondary 좌 / Primary 우 |
9. 적용 디자인 토큰
| 카테고리 | 토큰 | 실제값 | 사용처 |
|---|---|---|---|
| 색상 | --bg | #FAFAF8 | 모달 박스 배경 |
--charcoal | #1A1A1A | 타이틀 텍스트 색상 | |
--text-secondary | #555555 | 설명 문구 색상, Secondary 버튼 배경 | |
--overlay-dim | rgba(26,26,26,0.45) | 딤 오버레이 배경 | |
--white | #ffffff | 버튼 텍스트 색상 | |
| 그라디언트 | --cta-gradient | linear-gradient(135deg, #961E23 0%, #B22A30 50%, #961E23 100%) | Primary 버튼 배경 |
| 타이포그래피 | --sans | Pretendard Variable | 모든 텍스트 및 버튼 |
--text-md | 17px | 타이틀 + 설명 문구 폰트 크기 | |
--text-base | 15px | 버튼 레이블 폰트 크기 | |
| letter-spacing | --ls-tight | -0.02em | 타이틀 자간 |
--ls-normal | 0 | 설명 문구 및 버튼 레이블 자간 | |
| 간격 | --space-2 | 8px | 타이틀 margin-bottom |
| 투명도 | --alpha-8 | rgba(17,17,17,0.08) | 가이드 내 테이블 헤더 구분선 |
--alpha-4 | rgba(17,17,17,0.04) | 가이드 배경, 테이블 행 구분선 |
각 모달의 실제 디자인. Primary 버튼은 차트 레드 그라디언트(--cta-gradient) 적용.
Case 1 — 로그인 안내
로그인 안내
계속하려면 로그인이 필요해요
Case 2 — 소셜 로그인 실패
(소셜로그인 명) 실패
소셜 로그인 계정을 확인해주세요
Case 3 — 네트워크 오류
네트워크 오류
잠시 후 다시 시도해주세요