| # | 영역 | 필드 | 타입 | 옵션 값 / 제약사항 | 입력 예시 |
| ① 진행중 세션 |
| 1 | 헤더 | 상대방 닉네임 | readonly(아바타+닉네임) | | "후원자A" |
| 1 | 헤더 | 남은 시간 | countdown / readonly | 시간 제한 설정 시 카운트다운, 무제한이면 "무제한" 텍스트 | "18:42 남음" |
| 1 | 헤더 | 신고 | button + modal(사유 select) | 신고 접수해도 세션은 유지, 운영팀 별도 검토(SLA §13 미결정) | "신고" 클릭 → 사유 선택 모달 |
| 1 | 헤더 | 종료 | button | 양측 모두 가능, 클릭 즉시 종료(상호 동의 불필요로 우선 가정). 종료하는 순간 양쪽 화면에서 대화가 사라진다(§13 확정 v2.56) — 되돌릴 수 없으므로 확인 모달을 거친다. 데이터는 30일 뒤 지워지지만 그 사이에도 화면에서는 볼 수 없다 | "종료" 클릭 → "대화를 다시 볼 수 없게 됩니다. 종료할까요?" |
| 1 | 헤더 | 차단 | button(크리에이터 뷰 전용) | 즉시 세션 종료 + 해당 후원자를 설정①의 차단 목록에 자동 등록. 후원자 뷰에는 없음. 종료이므로 대화도 함께 보이지 않게 된다 — 다만 데이터는 30일 남으므로 차단한 뒤에 신고해도 심사 근거는 있다(§13 — 단 처리 SLA 가 30일을 넘으면 안 된다) | "차단" 클릭 |
| 1 | 메시지 스레드 | 메시지 버블 | chat bubble list | 발신자별(크리에이터/후원자) 좌우 정렬, 시각 표시. 세션이 끝나면 이 스레드는 보이지 않는다 — 종료 후 다시 들어와도 빈 화면이고, 후원 내역에서도 대화는 조회되지 않는다. 앱은 v_private_chat_messages_live 만 읽고 원본 테이블은 권한이 없어 읽지 못한다(000029). 스레드 상단에 미리 고지한다 — “대화는 종료하면 다시 볼 수 없고, 30일 뒤 삭제됩니다”. 보관 사실까지 적는다 — 「삭제됩니다」라고만 하면 신고해도 볼 것이 남아 있다는 사실과 어긋난다 | "안녕하세요! · 21:04" |
| 1 | 메시지 스레드 | 번역 표시 | inline badge + 원문 토글 | 신규 v2.58 — 상대가 쓴 메시지가 내 accounts.locale 과 다르면 자동으로 번역해 보여주고 말풍선에 “번역됨” 배지를 붙인다. 탭하면 원문으로 전환. 종료된 세션은 번역도 원본과 함께 사라진다(v_private_chat_message_translations_live) | "Hello! (번역됨)" → 탭 → "こんにちは!" |
| 1 | 입력 | 메시지 입력 / 전송 | text + button | 최대 300자 | "오늘도 재밌게 봐주세요" |
| ② 후원자 신청 진입점 |
| 2 | 자격 충족 | 1:1 채팅 신청 버튼 | button(조건부 노출) | 누적 후원액 ≥ 설정값일 때만 노출 | "💬 1:1 채팅 신청하기" |
| 2 | 자격 충족 | 신청 메시지 | text(선택) | 최대 50자, 큐형에서 크리에이터가 카드에서 확인 | "항상 잘 보고 있어요" |
| 2 | 자격 미충족 | 안내 문구 | readonly(비활성 버튼 대체) | 부족한 금액 = 설정값 − 현재 누적 후원액, 실시간 계산 | "7,500캐시 더 후원하면 신청 가능" |
| 2 | 차단된 경우 | 안내 문구 누락 보완 | readonly(버튼 자체 미렌더링) | 차단된 도너에게는 신청 버튼을 비활성화가 아니라 렌더링하지 않음 — hub.html의 크리에이터 측 차단 규칙과 대칭(PVC-07) | "이 크리에이터에게 1:1 채팅 신청을 보낼 수 없어요." |
| 2 | 내 신청 상태 | 상태 배지 | badge | 대기중 / 수락됨 / 거절됨 / 만료됨 | "대기중" |
| 2 | 내 신청 상태 | 신청 취소 | button | 대기중 상태에서만 노출 | "신청 취소" 클릭 |