diff --git a/src/app.jsx b/src/app.jsx index a3f527d..54c3e3c 100644 --- a/src/app.jsx +++ b/src/app.jsx @@ -9,6 +9,7 @@ import MessagesPage from "./pages/messages-page"; import SendMessagePage from "./pages/send-message-page"; import TestApiPage from "./tests/test-api-page"; import TestComponentsPage from "./tests/test-components-page"; +import Error404Page from "./pages/404-page"; import GlobalStyle from "./styles/global-style"; function Provider({ children }) { @@ -62,10 +63,12 @@ function App() { } /> } /> + } /> + ); } diff --git a/src/assets/ic-paperairplane.svg b/src/assets/ic-paperairplane.svg new file mode 100644 index 0000000..fabc93a --- /dev/null +++ b/src/assets/ic-paperairplane.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/pages/404-page.jsx b/src/pages/404-page.jsx new file mode 100644 index 0000000..cde6c03 --- /dev/null +++ b/src/pages/404-page.jsx @@ -0,0 +1,152 @@ +import React, { useEffect } from "react"; +import { useNavigate } from "react-router"; +import { PrimaryButton } from "../components/button/button"; +import BUTTON_SIZE from "../components/button/button-size"; +import styled from "styled-components"; +import CrushedPaperPlane from "../assets/ic-paperairplane.svg"; +import logoImage from "../assets/logo.svg"; +import { media } from "../utils/media"; + +const TopContainer = styled.article` + height: 100vh; + border: 1px solid #ff000021; + display: flex; + font-size: 80px; + justify-content: center; + align-items: center; + flex-direction: column; +`; + +const ContentsContainer = styled.section` + &::before { + content: ""; + position: absolute; + inset: 0; + background: url(${CrushedPaperPlane}) center/cover repeat; + background-size: 250px; + opacity: 0.15; + z-index: 0; + } + + > * { + position: relative; + z-index: 1; + } +`; + +const Contents = styled.article` + text-align: center; + display: flex; + flex-direction: column; + align-items: center; +`; + +const ErrorNumber = styled.h1` + font-weight: 900; + color: var(--color-purple-700); + margin: 0; + font-size: 200px; + + ${media.mobile} { + font-size: 130px; + } +`; + +const ErrorComment = styled.span` + font-size: 80px; + color: #6e6293; + font-weight: 700; + + em { + font-size: 100px; + font-weight: 800; + font-style: normal; + color: #240079; + } + + ${media.tablet} { + font-size: 70px; + em { + font-size: 90px; + } + } + + ${media.mobile} { + font-size: 50px; + em { + font-size: 60px; + } + } +`; + +const ErrorCommentSofter = styled.span` + font-size: 50px; + color: #6e6293; + font-weight: 400; + + ${media.tablet} { + font-size: 40px; + } + + ${media.mobile} { + font-size: 30px; + } +`; + +const AirplaneSVG = styled.img` + width: 250px; + padding: 30px 0; + + ${media.mobile} { + width: 200px; + } +`; + +const HomeButton = styled(PrimaryButton)` + margin-top: 120px; + font-weight: 400; + padding: 14px 90px; + + ${media.tablet} { + justify-self: anchor-center; + width: calc(100% - 48px); + padding: 14px 20px; + margin: 120px 24px 24px 24px; + } +`; + +const Error404Page = () => { + const navigate = useNavigate(); + + const handleMainButtonClick = () => { + navigate("/"); + }; + + useEffect(() => { + document.title = "404 - Page Not Found"; + }, []); + + return ( + + + + + 404 + + Oops! Page Not Found... + + + Don't worry, let's get you back on track. + + + + + + ); +}; + +export default Error404Page;