사용자 화면 · 회원가입/로그인
LOG-005 · 2026. 03. 04
| 1 | 이메일 로그인 실패 바텀시트 |
|
Design Output
위 스토리보드 기획을 CHAART OS 디자인 토큰으로 변환한 결과물. 실제 구현 시 참조할 최종 디자인.
비밀번호 찾기
로그인 실패
비밀번호를 다시 확인해주세요
Update History
1. 화면 구조 개요
LOG-005는 이메일 로그인(LOG-003) 시 비밀번호 불일치로 인증 실패할 때 자동 노출되는 강제 액션형 바텀시트이다. 딤 오버레이 터치로 닫히지 않으며, 반드시 버튼(확인/비밀번호 찾기)을 통해서만 닫힌다. 상단 핸들 인디케이터(36×4px) 있음, X 닫기 버튼 없음. "확인" 버튼은 .sb-dp-modal__btn--primary + 인라인 background:var(--cta-gradient) 오버라이드. 클릭 시 페이지 이동 없이 이메일 로그인 바텀시트가 인라인으로 복귀한다.
2. 레이어 구조 + 치수
| # | 영역 | 높이/위치 | 비고 |
|---|---|---|---|
| 1 | 배경 (LOG-003 로그인 화면) | position:absolute inset:0, z-index 없음 | 홈 화면 + 이메일/비밀번호 입력 완료 상태, pointer-events:none |
| 2 | 로그인 바텀시트 (복귀용) | bottom:0, z-index:28, 초기 translateY(100%) 숨김 | "확인" 후 350ms 딜레이 → 슬라이드업 등장. id="loginSheetBg". 이메일/비밀번호 입력 인터랙티브, 이메일 유효성 검사 포함, X 닫기 버튼 제공. |
| 3 | 딤 오버레이 | inset:0, z-index:25, rgba(26,26,26,0.45) | 에러 시트 닫기 시 opacity:0. 로그인 시트 등장 시 opacity:1 복원. pointer-events:auto이나 닫기 이벤트 미연결 (터치 차단 전용) |
| 4 | 에러 바텀시트 컨테이너 | bottom:0, z-index:30, 가변 높이 | bg: var(--bg) #FAFAF8, R=0, 핸들 인디케이터 있음(36×4px, var(--alpha-12)), X 버튼 없음 |
| 5 | 안내 문구 영역 | padding:48px 24px 0, text-align:center | 타이틀 .sb-dp-modal__title + 안내 문구 .sb-dp-modal__desc |
| 6 | 버튼 영역 | .sb-dp-modal__actions — 2개 x 50px, gap:12px, padding:0 24px 32px, margin-top:48px | 좌: .sb-dp-modal__btn--cancel (id=log005CancelBtn) / 우: .sb-dp-modal__btn--confirm (id=log005ConfirmBtn) |
var(--bg) #FAFAF8, border-radius:0 (R=0 직각), position:absolute bottom:0 left:0 right:0rgba(26,26,26,0.45), 터치 시 아무 동작 없음 (pointer-events:auto이나 닫기 이벤트 미연결).sb-dp-modal__title, var(--sans) Pretendard, 18px/700, color:var(--charcoal), text-align:center, letter-spacing:var(--ls-tight).sb-dp-modal__desc, var(--sans), 18px/500, color:var(--text-secondary), text-align:center, letter-spacing:var(--ls-normal).sb-dp-modal__btn--cancel — bg:var(--text-secondary) #6B6B6B, text:#fff, var(--sans) 14px/600, R=0.sb-dp-modal__btn--confirm — bg:linear-gradient(160deg, #B52B31 0%, #7A1518 100%), text:#fff, var(--sans) 14px/600, R=03. 핵심 인터랙션
EMAIL_RE(/^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/) 실시간 검사. 형식 오류 시 에러 메시지(id=loginEmailError2) display:block + 입력 필드 borderColor:var(--red-brand). 이메일+비밀번호 모두 충족 시 로그인 버튼(id=loginCta2) 활성화.4. 상태 변화
5. 네비게이션 플로우
6. 에러/예외 처리
var(--color-error-toast), text:var(--white), 폰 내부 bottom:24px, 2.6초 fade-out, 3초 DOM 제거, 시트 유지var(--color-error-toast) text:var(--white) / 정보 bg:var(--charcoal) #1A1A1A text:var(--white), 폰 내부 하단 24px, border-radius:0, 2.6초 auto-dismiss7. 모션 스펙
translateY(0) → translateY(100%), 300ms, ease-inopacity:0.45 → 0, 300ms, ease-inopacity:0 → 1(0.45) (opacity property 직접 할당, transition 없음)translateY(100%) → translateY(0), 400ms, var(--ease-ios-spring)translateY(0) → translateY(100%), 300ms, ease-in. 딤 동시 opacity:0, pointer-events:none8. 여백·간격 요약
| 구간 | 값 |
|---|---|
| 안내 문구 영역 패딩 | padding:48px 24px 0 |
| 타이틀 → 안내문구 | .sb-dp-modal__title margin-bottom: 8px |
| 안내문구 → 버튼 영역 | .sb-dp-modal__actions margin-top:48px |
| 버튼 간격 (gap) | 12px |
| 버튼 높이 | 50px (.sb-dp-modal__btn) |
| 버튼 영역 좌우 패딩 | 24px |
| 버튼 영역 하단 패딩 | 32px |
9. 적용 디자인 토큰
--bg → #FAFAF8, border-radius:0 (R=0)--bg → #FAFAF8, border-radius:0 (R=0)rgba(26,26,26,0.45) — charcoal 45%--sans 18px 700, --charcoal, center, --ls-tight--sans 18px 500, --text-secondary → #6B6B6B, center, --ls-normal.sb-dp-modal__btn--confirm): linear-gradient(160deg, #B52B31 0%, #7A1518 100%) bg, height:50px, 직각, 14px/600.sb-dp-modal__btn--cancel): --text-secondary bg → #6B6B6B, height:50px, 직각, 14px/600var(--alpha-4), border:1px solid var(--border), R=0var(--size-xs-font) 12px, color:var(--red-brand), display:none/block 방식