import FormMessage from "@/components/form-message"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; import LoginForm from "@/features/auth/components/login-form"; /** * [로그인 페이지 컴포넌트] * * Modern UI with glassmorphism effect (유리 형태 디자인) * - 투명 배경 + 블러 효과로 깊이감 표현 * - 그라디언트 배경으로 생동감 추가 * - shadcn/ui 컴포넌트로 일관된 디자인 시스템 유지 * * @param searchParams - URL 쿼리 파라미터 (에러 메시지 전달용) */ export default async function LoginPage({ searchParams, }: { searchParams: Promise<{ message: string }>; }) { // URL에서 메시지 파라미터 추출 (로그인 실패 시 에러 메시지 표시) const { message } = await searchParams; return (
{/* ========== 배경 그라디언트 레이어 ========== */} {/* 웹 페이지 전체 배경을 그라디언트로 채웁니다 */} {/* 라이트 모드: 부드러운 그레이 톤 (gray → white → gray) */} {/* 다크 모드: 깊은 블랙 톤으로 고급스러운 느낌 */} {/* 추가 그라디언트 효과 1: 우상단에서 시작하는 원형 그라디언트 */}
{/* 추가 그라디언트 효과 2: 좌하단에서 시작하는 원형 그라디언트 */}
{/* ========== 애니메이션 블러 효과 ========== */} {/* 부드럽게 깜빡이는 원형 블러로 생동감 표현 */} {/* animate-pulse: 1.5초 주기로 opacity 변화 */}
{/* delay-700: 700ms 지연으로 교차 애니메이션 효과 */}
{/* ========== 메인 콘텐츠 영역 ========== */} {/* z-10: 배경보다 위에 표시 */} {/* animate-in: 페이지 로드 시 fade-in + slide-up 애니메이션 */}
{/* 에러/성공 메시지 표시 영역 */} {/* URL 파라미터에 message가 있으면 표시됨 */} {/* ========== 로그인 카드 (Glassmorphism) ========== */} {/* bg-white/70: 70% 투명도의 흰색 배경 */} {/* backdrop-blur-xl: 배경 블러 효과 (유리 느낌) */} {/* ========== 카드 헤더 영역 ========== */} {/* 아이콘 배경: 그라디언트 원형 */}
👋
{/* 페이지 제목 */} 환영합니다! {/* 페이지 설명 */} 서비스 이용을 위해 로그인해 주세요.
{/* ========== 카드 콘텐츠 영역 (폼) ========== */}
); }