NotFound.tsx 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import React from 'react';
  2. import { Link } from 'react-router-dom';
  3. import { useScrollAnimation } from '@/hooks/useScrollAnimation';
  4. export default function NotFound() {
  5. const { ref, isVisible } = useScrollAnimation({ threshold: 0.1 });
  6. return (
  7. <div ref={ref} className="min-h-screen flex items-center justify-center bg-gray-50 px-4 sm:px-8">
  8. <div className={`text-center max-w-md mx-auto transition-all duration-1000 ${isVisible ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-10'}`}>
  9. {/* 404 숫자 */}
  10. <div className="mb-8">
  11. <h1 className="text-6xl sm:text-8xl lg:text-9xl font-bold text-blue-900 font-['Noto_Sans_KR'] antialiased">
  12. 404
  13. </h1>
  14. </div>
  15. {/* 메시지 */}
  16. <div className="mb-8 space-y-4">
  17. <h2 className="text-2xl sm:text-3xl lg:text-4xl font-bold text-gray-800 font-['Noto_Sans_KR'] antialiased">
  18. 페이지를 찾을 수 없습니다
  19. </h2>
  20. <p className="text-base sm:text-lg text-gray-600 font-medium font-['Noto_Sans_KR'] antialiased leading-relaxed">
  21. 요청하신 페이지가 존재하지 않거나<br />
  22. 이동되었을 수 있습니다.
  23. </p>
  24. </div>
  25. {/* 버튼 */}
  26. <div className="space-y-4 sm:space-y-0 sm:space-x-4 sm:flex sm:justify-center">
  27. <Link
  28. to="/"
  29. className="inline-block w-full sm:w-auto px-6 py-3 bg-blue-900 text-white font-semibold font-['Noto_Sans_KR'] antialiased rounded-lg hover:bg-blue-800 transition-colors duration-200"
  30. >
  31. 홈으로 돌아가기
  32. </Link>
  33. <button
  34. onClick={() => window.history.back()}
  35. className="inline-block w-full sm:w-auto px-6 py-3 border-2 border-blue-900 text-blue-900 font-semibold font-['Noto_Sans_KR'] antialiased rounded-lg hover:bg-blue-900 hover:text-white transition-colors duration-200"
  36. >
  37. 이전 페이지
  38. </button>
  39. </div>
  40. {/* 장식적 요소 */}
  41. <div className="mt-12">
  42. <div className="w-20 h-1 bg-blue-900 mx-auto"></div>
  43. </div>
  44. </div>
  45. </div>
  46. );
  47. }