사용자 화면 · 회원가입/로그인

이메일 로그인 ID/PW 입력 바텀시트

LOG-003 · 2026. 03. 20

화면 이름 이메일 로그인 ID/PW 입력 바텀시트
화면 위치 기능 클릭 > 로그인 진입 화면 > 이메일 로그인 > 바텀시트
화면 ID LOG-003
작성일 2026. 03. 20
LOG-003
Description
1 이메일 로그인 바텀시트
  • 노출 방식
    • 화면 하단에서 슬라이드 업 형태로 노출되는 바텀시트
    • 로그인 진입 화면(LOG-001)에서 ‘이메일 로그인’ 버튼 클릭 시 노출
    • 우측 상단 닫기(X) 버튼 클릭 시 바텀시트 닫힘
    • 바텀시트 닫힘 시 로그인 프로세스 중단
    • 로그인 진입 화면(LOG-001)으로 복귀
  • 아이디(이메일) 입력 영역
    • 입력 필드
      • 아이디(이메일) 입력 필드 노출
      • 플레이스홀더: 아이디(이메일)를 입력해주세요
      • 이메일 형식 입력만 허용
      • 이메일 형식이 아닌 경우 로그인 버튼 비활성화 유지
    • 입력 상태
      • 입력값 존재 시 로그인 버튼 활성화 조건 판단에 포함
    • 입력 필드
      • 비밀번호 입력 필드 노출
      • 플레이스홀더: 비밀번호를 입력해주세요
      • 비밀번호 마스킹 처리
      • 입력값 존재 시 로그인 버튼 활성화 조건 판단에 포함
    • 기본 상태: 비활성화
    • 활성화 조건
      • 아이디(이메일) 입력 완료
      • 비밀번호 입력 완료
      • 입력된 아이디/비밀번호 정보로 로그인 요청
  • 로그인 결과 처리
    • 로그인 성공 시
      • 입력된 이메일 계정이 기존 소셜 로그인 계정과 연동 가능한 상태일 경우
        • 로그인 성공 메시지 토스트 노출 후, 소셜 로그인 계정 머지(연동) 안내 화면으로 이동
          • "로그인되었습니다" 토스트 메시지 노출
        • 로그인 요청 발생 시점의 원래 화면으로 이동
      • 오류 바텀 시트 이동 (LOG-005)
    • 최초 이메일 로그인 성공 시 소셜 로그인 머지를 유도할 수 있음
    • 소셜 머지는 선택사항이며, 진행하지 않아도 이메일 로그인은 유지
    • 머지 완료 후에도 기존 이메일 로그인은 계속 사용할 수 있음
    • 비밀번호 찾기 버튼
      • 로그인 버튼 하단에 텍스트 버튼 형태로 노출
      • 비밀번호 재설정 바텀시트로 이동 (LOG-006)
  • 예외 및 차단 케이스 (QA 기준)
    • 아이디 또는 비밀번호 미입력 상태
      • 로그인 버튼 비활성화 유지
      • 이메일 로그인 프로레스 종료
      • 이전 화면(LOG-001)으로 복귀

Design Output

UI 디자인 산출물

위 스토리보드 기획을 CHAART OS 디자인 토큰으로 변환한 결과물. 실제 구현 시 참조할 최종 디자인.

9:41

차트, 검증된 기준으로
거래하는 리세일 마켓.

어떤 방식으로 찾으시겠어요?

직접 찾을게요 공개 마켓 탐색
조용히 찾을래요 프라이빗 세일 의뢰
실시간 마켓 업데이트
이배 작품

이배 원화

Lee Bae

김창열 작품

김창열 원화

Kim TschangYeul

남춘모 작품

남춘모 원화

Nam TchunMo

김선우 작품

김선우 원화

Kim SunWoo

요시토모 나라 작품

요시토모 나라 아트토이

Yoshitomo Nara

지금 주목할 작품
이배 작품

이배 원화

Lee Bae

김창열 작품

김창열 원화

Kim TschangYeul

남춘모 작품

남춘모 원화

Nam TchunMo

아야코 록카쿠 작품

아야코 록카쿠 원화

Ayako Rokkaku

요시토모 나라 작품

요시토모 나라 아트토이

Yoshitomo Nara

컬렉터들의 선택
김창열 작품

김창열 원화

Kim TschangYeul

이배 작품

이배 원화

Lee Bae

아야코 록카쿠 작품

아야코 록카쿠 원화

Ayako Rokkaku

김선우 작품

김선우 원화

Kim SunWoo

요시토모 나라 작품

요시토모 나라 아트토이

Yoshitomo Nara

AD BANNER
마켓
PS
MY
로그인 하기

비밀번호 찾기

비밀번호 재설정

전송

인증 메일이 발송되었습니다

메일함을 확인해주세요

확인
개발 구현 가이드 — LOG-003 이메일 로그인
디자인 상태
완료
최종 승인
류우상 ✅
승인일
2026-03-27

Update History

2026.03.26구현 가이드 최신화 검증 — Description 전수 대조 누락 0건, 토큰 섹션 통합 확인, 디자인 산출물 동기화 완료
2026.03.25"비밀번호 찾기" 클릭 → LOG-006.html 페이지 이동 제거. LOG-006 바텀시트(❶ 이메일입력 + ❷ 발송완료) HTML/JS를 LOG-003 인라인으로 삽입. translateY 슬라이드업 등장, ❶↔❷ 전환, 확인→로그인시트 복귀 구현. 구현 가이드 10. 비밀번호 재설정 바텀시트 (인라인) 섹션 신규 추가.
2026.03.19인라인 스타일 → sb-dp-thumb-texture 클래스 전환
2026.03.16구현 가이드 최신화 — Applied Design Tokens 통합, 바텀시트 하단 여백 32px 추가 (홈인디케이터 제거)
2026.03.11로그인 버튼 CTA 그라디언트 적용, 딤 오버레이 Figma canonical 0.3 통일, 구현 가이드 추가
2026.03.10홈 화면 배경 HOM-001 디자인 반영
2026.03.04초기 스토리보드 빌드 (Figma 원본: 2026.01.29)
Implementation Specification

1. 화면 구조 개요

※ 이 바텀시트는 LOG-003 canonical shell이다. LOG-004, LOG-005 등 후속 바텀시트는 모두 이 화면의 레이어 치수·간격을 기준으로 한다.

  • LOG-003은 LOG-001에서 "이메일로 로그인" 버튼 클릭 시 노출되는 이메일 ID/PW 입력 바텀시트이다.
  • 홈 화면(HOM-001) 위에 딤 오버레이와 함께 하단 슬라이드 업으로 등장한다.
  • 구성: 핸들 바 + 닫기(X) + 아이디 입력 필드 + 비밀번호 입력 필드 + "로그인 하기" CTA + "비밀번호 찾기" 텍스트 버튼
  • 키보드 올라올 시 바텀시트 전체가 위로 밀린다.

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: 8px
  • 입력 필드 컨테이너: 높이 48px, 직각 R=0, background: rgba(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)
  • 포커스 상태: border → 1px solid var(--charcoal), outline: none
  • 에러 상태 (아이디 필드만): border → 1px solid var(--red-brand #961E23), 하단 에러 메시지 "올바른 이메일 형식을 입력해주세요." --sans 12px / --red-brand / margin-top: 6px. 이메일 형식 위반 시에만 표시, 빈 필드에서는 미표시
  • 아이디 필드: type="email", placeholder "아이디(이메일)를 입력해주세요."
  • 비밀번호 필드: type="password", placeholder "비밀번호를 입력해주세요.", 입력값 마스킹 처리

4. 상태 변화 — CTA 버튼

  • 비활성 (기본): var(--cta-gradient) 배경 유지, opacity: 0.4, pointer-events: none. 아이디/비밀번호 미입력 또는 이메일 형식 오류 시
  • 활성 조건: 이메일 형식 유효 (정규식 /^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/) AND 비밀번호 입력값 존재 시
  • 활성: opacity: 1, cursor: pointer, 터치 가능
  • 텍스트: --sans Pretendard / 15px / 600 / #fff / letter-spacing:var(--ls-normal) / center
  • 프레스 피드백: transform: scale(0.98), transition 0.15s
  • 활성↔비활성 전환: opacity transition 0.2s, background transition 0.3s

5. 네비게이션 플로우

  • 진입: LOG-001 "이메일로 로그인" 버튼 클릭 → 딤 오버레이 + LOG-003 바텀시트 슬라이드 업
  • 닫기(X) / 딤 터치: 바텀시트 닫힘 → LOG-001로 복귀 (이메일 로그인 프로세스 중단). 입력값 모두 초기화, 에러 상태 해제
  • 로그인 성공 (소셜 머지 대상 있음): 성공 토스트 노출(정보 스타일, 2.5초) → 바텀시트 닫힘 → LOG-004 소셜 로그인 머지 바텀시트 이동
  • 로그인 성공 (머지 대상 없음): 바텀시트 닫힘 → 로그인 요청 발생 시점의 원래 화면으로 복귀
  • 로그인 실패 (비밀번호 불일치): 바텀시트 닫힘 → LOG-005 이메일 로그인 실패 바텀시트 이동. 이메일값만 보존, 비밀번호는 초기화
  • 비밀번호 찾기: LOG-003 바텀시트 위에 비밀번호 재설정 시트 슬라이드업 (페이지 이동 없음, 인라인)

6. 에러/예외 처리

  • 이메일 형식 위반: 아이디 필드 border → --red-brand, 하단 에러 메시지 노출, CTA 비활성 유지
  • 이메일/비밀번호 미입력: CTA 비활성 유지, 별도 에러 메시지 없음 (프리벤션 방식)
  • 비밀번호 불일치 (로그인 실패): LOG-005로 이동. 이메일값만 보존, 비밀번호는 초기화
  • 네트워크 오류: 에러 토스트 "네트워크 연결을 확인해주세요." → 바텀시트 유지, 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)
  • 딤 오버레이 → hardcoded 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
  • 입력 필드 → 48px height · --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
  • 닫기(X) 아이콘 → 22x22 · --text-muted → stroke: square/miter, 1.5px
  • 핸들 바--charcoal 12% → 36x4px, rgba(26,26,26,0.12)
  • 좌우 패딩 → 24px → 바텀시트 내부 콘텐츠 마진
  • 필드 간격 → 20px top padding → 아이디↔비밀번호 섹션 간격
  • 에러 토스트 → 배경 --color-error-toast, 텍스트 --bg, 2.5초 auto-dismiss
  • 정보 토스트 → 배경 --charcoal, 텍스트 --bg, 2.5초 auto-dismiss
  • 토스트 위치 → 폰 내부 하단 16px, 중앙 정렬, 10px 20px padding, R=0
  • 토스트 폰트--sans Pretendard / 12px / 500

10. 비밀번호 재설정 바텀시트 (인라인 — LOG-006 통합)

※ LOG-006.html 페이지 이동 없이 LOG-003 내부에 인라인으로 구현된다. z-index:25(❶) / z-index:26(❷).

❶ 이메일 입력 바텀시트 (pwResetSheet)

  • 진입: "비밀번호 찾기" 텍스트 버튼 클릭 → translateY(100%) → translateY(0) 슬라이드업, 400ms, --ease-ios-spring
  • 구성: 핸들 바 (36x4px, --alpha-12) + 닫기(X) (22x22, top:16px right:20px) + 타이틀 "비밀번호 재설정" + 이메일 입력 필드 (48px, --alpha-8 bg, --border-strong) + "전송" CTA (50px, --cta-gradient) + 하단 여백 32px
  • 입력 필드: type="email", placeholder "등록된 아이디(이메일)를 입력해주세요.", 포커스 → --charcoal border, 에러 시 → --red-brand border + 하단 에러 메시지 (12px / --red-brand / --text-xs)
  • 전송 CTA 활성 조건: 이메일 형식 유효 (/^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/) 시 opacity:1 / pointer-events:auto. 기본 opacity:0.4 / pointer-events:none
  • 전송 클릭 (성공): ❶ translateY(-20px) + opacity:0 퇴장(200ms) → ❷ translateY(0) 등장(400ms). fail@test.com 입력 시 실패 토스트 시뮬레이션
  • 닫기 (핸들/X): translateY(100%) 퇴장 → 로그인 시트 상태 복귀

❷ 발송 완료 바텀시트 (pwResetSheet2, 강제 확인형)

  • 구성: 핸들 바 없음 + X 버튼 없음 + 이메일 SVG 아이콘 (24x24, --red-brand) + 타이틀 "인증 메일이 발송되었습니다" (--size-xl-font/700/--charcoal) + 안내 문구 "메일함을 확인해주세요" (--size-md-font/500/--text-secondary) + "확인" CTA
  • 확인 클릭: ❷ translateY(100%) 퇴장 → ❶ 초기화(DOM 복원, 이메일/에러 리셋) → 로그인 시트가 열려 있으면 그대로 유지
  • 레이아웃: padding:48px 24px 0 · text-align:center · 버튼 하단 padding-bottom:32px

❶❷ 공통 모션 스펙

요소 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%)
← 이전 화면: LOG-002 다음 화면: LOG-004 →