사용자 화면 · 회원가입/로그인
LOG-003 · 2026. 03. 20
| 1 | 이메일 로그인 바텀시트 |
|
Design Output
위 스토리보드 기획을 CHAART OS 디자인 토큰으로 변환한 결과물. 실제 구현 시 참조할 최종 디자인.
차트, 검증된 기준으로
거래하는 리세일 마켓.
어떤 방식으로 찾으시겠어요?
비밀번호 찾기
비밀번호 재설정
올바른 이메일 형식을 입력해주세요.
인증 메일이 발송되었습니다
메일함을 확인해주세요
Update History
1. 화면 구조 개요
※ 이 바텀시트는 LOG-003 canonical shell이다. LOG-004, LOG-005 등 후속 바텀시트는 모두 이 화면의 레이어 치수·간격을 기준으로 한다.
2. 레이어 구조 + 치수
| # | 영역 | 높이/위치 | 세부 치수 |
|---|---|---|---|
| 1 | 배경 (HOM-001 홈 화면) | 전체 화면 852px | 홈 화면 그대로 유지, pointer-events: none. 탭바, 캐러셀, 히어로 카피 등 HOM-001 디자인 기반 |
| 2 | 딤 오버레이 | inset:0 전체 화면, z-index:1 | rgba(0,0,0,0.3) — Figma canonical 값. 터치 시 시트 닫기 트리거 |
| 3 | 바텀시트 컨테이너 | bottom:0, 콘텐츠 기준 가변, z-index:2 | 배경: --bg #FAFAF8. 직각 R=0. transition: transform 0.4s --ease-ios-spring |
| 4 | 핸들 바 | padding-top: 12px, 중앙 정렬 | 36x4px, rgba(26,26,26,0.12). 스와이프 닫기 힌트 |
| 5 | 닫기(X) 버튼 | position:absolute, top:16px right:20px | 22x22px SVG, stroke: --text-muted #888888, stroke-width:1.5, linecap="square", linejoin="miter" |
| 6 | 아이디 입력 영역 | padding: 20px 24px 0 | 라벨 (12px/600 mono uppercase) + 48px 입력 필드. type="email". 라벨↔필드 gap: 8px |
| 7 | 비밀번호 입력 영역 | padding: 20px 24px 0 | 라벨 (12px/600 mono uppercase) + 48px 입력 필드. type="password", 마스킹. 라벨↔필드 gap: 8px |
| 8 | "로그인 하기" CTA 버튼 | padding: 24px 24px 0 | 50px height, full-width, --cta-gradient, 직각 R=0. 비활성/활성 상태 전환 |
| 9 | "비밀번호 찾기" 텍스트 버튼 | padding-top: 16px, center | --sans 13px / --text-muted. 클릭 시 비밀번호 재설정 바텀시트(LOG-006 인라인) 슬라이드업 |
| 10 | 하단 여백 | padding-bottom: 32px | 바텀시트 최하단 safe area 확보. 홈인디케이터 없음 |
3. 핵심 인터랙션
--mono TASA Orbiter / 12px / 600 / --charcoal #1A1A1A / letter-spacing:var(--ls-wide) / text-transform: uppercase / margin-bottom: 8pxrgba(26,26,26,0.04), border: 1px solid rgba(26,26,26,0.07), 좌우 padding: 16px--sans Pretendard / 14px / --text-muted #888888 / letter-spacing:var(--ls-normal)--sans Pretendard / 14px / --charcoal #1A1A1A / letter-spacing:var(--ls-normal)1px solid var(--charcoal), outline: none1px solid var(--red-brand #961E23), 하단 에러 메시지 "올바른 이메일 형식을 입력해주세요." --sans 12px / --red-brand / margin-top: 6px. 이메일 형식 위반 시에만 표시, 빈 필드에서는 미표시4. 상태 변화 — CTA 버튼
var(--cta-gradient) 배경 유지, opacity: 0.4, pointer-events: none. 아이디/비밀번호 미입력 또는 이메일 형식 오류 시/^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/) AND 비밀번호 입력값 존재 시--sans Pretendard / 15px / 600 / #fff / letter-spacing:var(--ls-normal) / center5. 네비게이션 플로우
6. 에러/예외 처리
--red-brand, 하단 에러 메시지 노출, CTA 비활성 유지7. 모션 스펙
| 요소 | Duration | Easing | Property |
|---|---|---|---|
| 바텀시트 등장 | 400ms | --ease-ios-spring cubic-bezier(0.25,0.46,0.45,0.94) | transform: translateY(100%) → translateY(0) |
| 바텀시트 닫힘 | 400ms | 동일 이징 | transform: translateY(0) → translateY(100%) |
| 딤 오버레이 | 400ms | default | opacity: 0 ↔ 1 |
| CTA 활성/비활성 | 200ms (opacity), 300ms (bg) | default | opacity + background |
| CTA 프레스 | 150ms | default | transform: scale(0.98) |
8. 여백·간격 요약
| 위치 | 값 | 비고 |
|---|---|---|
| 바텀시트 좌우 패딩 | 24px | 내부 콘텐츠 마진 |
| 핸들 바 상단 padding | 12px | 핸들 바 위 여백 |
| 닫기 버튼 위치 | top: 16px, right: 20px | 시트 내부 absolute |
| 아이디 입력 영역 padding | 20px 24px 0 | 라벨 + 필드 |
| 비밀번호 입력 영역 padding | 20px 24px 0 | 아이디 → 비밀번호 섹션 간격 = 20px top |
| 라벨 ↔ 필드 gap | 8px (margin-bottom) | 라벨 하단 → 입력 필드 상단 |
| 입력 필드 내부 패딩 | 0 16px | 필드 내 좌우 여백 |
| 입력 필드 높이 | 48px | 터치 타겟 44px 이상 충족 |
| 에러 메시지 margin-top | 6px | 아이디 필드 하단 에러 텍스트 |
| CTA 버튼 영역 padding | 24px 24px 0 | 비밀번호 필드 아래 → CTA |
| CTA 버튼 높이 | 50px | full-width, 직각 R=0 |
| "비밀번호 찾기" padding-top | 16px | CTA 아래 → 텍스트 버튼. 터치 영역 최소 44px 확보 |
| 하단 여백 | padding-bottom: 32px | 바텀시트 최하단 safe area |
9. 적용 디자인 토큰
--bg → #FAFAF8 — 직각 (R=0)rgba(0,0,0,0.3), token candidate: --overlay-dim → inset:0 · z-index:1 — Figma canonical (0.3)--mono · 12px · 600 → TASA Orbiter, ls: 0.04em, uppercase--charcoal 4% bg → 직각, border: 1px solid rgba(26,26,26,0.07)--sans · 14px · --text-muted → Pretendard, #888888--cta-gradient bg · 50px → 직각, 15px font, 600 weight--sans · 13px · --text-muted → 텍스트 버튼, center-aligned--text-muted → stroke: square/miter, 1.5px--charcoal 12% → 36x4px, rgba(26,26,26,0.12)--color-error-toast, 텍스트 --bg, 2.5초 auto-dismiss--charcoal, 텍스트 --bg, 2.5초 auto-dismiss--sans Pretendard / 12px / 50010. 비밀번호 재설정 바텀시트 (인라인 — LOG-006 통합)
※ LOG-006.html 페이지 이동 없이 LOG-003 내부에 인라인으로 구현된다. z-index:25(❶) / z-index:26(❷).
❶ 이메일 입력 바텀시트 (pwResetSheet)
translateY(100%) → translateY(0) 슬라이드업, 400ms, --ease-ios-spring--alpha-12) + 닫기(X) (22x22, top:16px right:20px) + 타이틀 "비밀번호 재설정" + 이메일 입력 필드 (48px, --alpha-8 bg, --border-strong) + "전송" CTA (50px, --cta-gradient) + 하단 여백 32px--charcoal border, 에러 시 → --red-brand border + 하단 에러 메시지 (12px / --red-brand / --text-xs)/^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/) 시 opacity:1 / pointer-events:auto. 기본 opacity:0.4 / pointer-events:nonefail@test.com 입력 시 실패 토스트 시뮬레이션❷ 발송 완료 바텀시트 (pwResetSheet2, 강제 확인형)
--red-brand) + 타이틀 "인증 메일이 발송되었습니다" (--size-xl-font/700/--charcoal) + 안내 문구 "메일함을 확인해주세요" (--size-md-font/500/--text-secondary) + "확인" CTA❶❷ 공통 모션 스펙
| 요소 | Duration | Easing | Property |
|---|---|---|---|
| ❶ 등장 | 400ms | --ease-ios-spring | translateY(100%) → translateY(0) |
| ❶ 닫힘 | 300ms | ease-in | translateY(0) → translateY(100%) |
| ❶ → ❷ 전환 | 200ms (퇴장) + 400ms (❷ 등장) | ease-in / --ease-ios-spring | ❶: translateY(-20px) + opacity:0 → ❷: translateY(0) |
| ❷ 닫힘 (확인) | 300ms | ease-in | translateY(0) → translateY(100%) |