/* ============================================================================ * 서명전에 — iOS Home Tab * ========================================================================== */ function HomeScreen({ onNewAnalysis, onOpenChooser, onOpenRecent, onOpenBilling, onSeeAllRecents, credits = 0, unlimited = false, recents: recentsProp, historyLoading = false, hasSession = false, userName = null, }) { const scrollRef = useRef(null); const [scrolled, setScrolled] = useState(false); const onScroll = (e) => setScrolled(e.currentTarget.scrollTop > 8); const MOCK_RECENTS = [ { id: "r1", type: "jeonse", title: "전세계약서_202604.pdf", sev: "alert", high: 3, when: "4월 20일" }, { id: "r3", type: "wolsae", title: "월세계약서_202603.pdf", sev: "warn", high: 2, when: "3월 30일" }, { id: "r4", type: "jeonse", title: "원룸전세_구로동.pdf", sev: "safe", high: 0, when: "3월 12일" }, ]; /* 서버 히스토리가 있으면 우선 노출, 없으면 목업으로 폴백 (로딩 중에는 비운다) */ const hasReal = Array.isArray(recentsProp) && recentsProp.length > 0; const recents = hasReal ? recentsProp : MOCK_RECENTS; const showEmpty = hasSession && !historyLoading && Array.isArray(recentsProp) && recentsProp.length === 0; const thumbClass = (sev) => "recent__thumb recent__thumb--" + sev; /* userName 이 있을 때만 "X님" 인사. 없으면 그냥 "안녕하세요" 로 generic. 이전엔 "지현" 으로 하드코딩 폴백 → 토스 hash 사용자(email 없음) 에게 가짜 이름 보여 오해 유발. 토스 SDK 가 nickname 제공하기 시작하면 그쪽에서 userName prop 으로 흘려주면 됨. */ return (
{userName ? `안녕하세요, ${userName}님` : "안녕하세요"}

서명 전에
한 번 더 살펴봐요

AI 계약서 분석

사진 한 장으로
불리한 조항을 찾아드려요

전세 · 월세 임대차 법령 기준으로 자동 검토
{/* Hero CTA — 카메라로 직결했다가 사용자가 "카메라 / 파일 / 텍스트 중에서 고를 수 있는 창으로 보내달라" 요청. FAB 과 동일한 공용 업로드 시트(uploadSheet) 로 연결. onOpenChooser 가 없으면 폴백으로 기존처럼 카메라 kind 로 감. */}
{/* 원본 파일 권장 배너 — 사용자 피드백 "방법론을 말해줬으면 좋겠어". "원본 받으세요" 만으론 추상적이라 **공인중개사에게 PDF 로 보내달라 요청하라** 는 구체적 액션 가이드까지 명시. hero 와 업로드 버튼 사이라 시선이 CTA 로 향하는 길목에서 반드시 보게 됨. */}
공인중개사에게 PDF 파일을 받아 올려주세요
사진으로 찍은 계약서는 글자 인식이 떨어져요. 중개사에게 "계약서 PDF 파일로 보내주세요" 라고 요청하시면 정확하게 분석해 드릴 수 있어요.
📩 카톡·문자·이메일 어느 쪽이든 PDF 로 받으면 OK
📝 전자계약이면 한방·KB부동산 등에서 PDF 다운로드 가능
{/* 빠른 진입 — 2-col 그리드에 paste 카드를 span 으로 깔아 한 컨테이너로 통합. 이전엔 별도 row + 음수 margin (-14px) 으로 붙였지만, grid gap 이 자동으로 줄간격을 맞춰주므로 더 견고하고 시각적 정렬감이 좋다. */}
{unlimited ? "분석 크레딧" : "남은 분석 크레딧"}
{unlimited ? ( <> 무제한 ) : ( <> {credits} )}
{!unlimited && ( )}

최근 분석

{showEmpty ? (
아직 분석한 계약서가 없어요
계약서를 올리면 여기에 차곡차곡 쌓여요.
) : (
{recents.map((r) => ( ))}
)}
); } window.HomeScreen = HomeScreen; Object.assign(window, { HomeScreen });