diff --git a/src/App.tsx b/src/App.tsx index 6fb2953..0b62b08 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -11,6 +11,7 @@ import TracyPage from './pages/TracyPage' import SystemsPage from './pages/SystemsPage' import ResilienceGamePage from './pages/ResilienceGamePage' import MetricsPage from './pages/MetricsPage' +import NotFoundPage from './pages/NotFoundPage' function App() { return ( @@ -29,6 +30,7 @@ function App() { } /> } /> } /> + } /> ) } diff --git a/src/pages/NotFoundPage.module.css b/src/pages/NotFoundPage.module.css new file mode 100644 index 0000000..1450c63 --- /dev/null +++ b/src/pages/NotFoundPage.module.css @@ -0,0 +1,92 @@ +.notFoundPage { + position: relative; + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; +} + +.content { + position: relative; + z-index: 2; + text-align: center; + padding: 2rem; +} + +.errorContainer { + background: rgba(0, 0, 0, 0.8); + backdrop-filter: blur(10px); + border-radius: 16px; + padding: 3rem 2rem; + border: 1px solid rgba(255, 255, 255, 0.1); + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3); + max-width: 500px; + margin: 0 auto; +} + +.errorCode { + font-size: 6rem; + font-weight: bold; + margin: 0; + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + -webkit-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; + line-height: 1; + margin-bottom: 1rem; +} + +.errorMessage { + font-size: 2rem; + margin: 0 0 1rem 0; + color: #ffffff; + font-weight: 600; +} + +.errorDescription { + font-size: 1.1rem; + color: #cccccc; + margin-bottom: 2.5rem; + line-height: 1.5; +} + +.homeButton { + display: inline-block; + padding: 12px 32px; + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + color: white; + text-decoration: none; + border-radius: 25px; + font-weight: 600; + font-size: 1rem; + transition: all 0.3s ease; + border: none; + cursor: pointer; + box-shadow: 0 4px 15px rgba(102, 126, 234, 0.4); +} + +.homeButton:hover { + transform: translateY(-2px); + box-shadow: 0 6px 20px rgba(102, 126, 234, 0.6); + filter: brightness(1.1); +} + +.homeButton:active { + transform: translateY(0); +} + +@media (max-width: 768px) { + .errorCode { + font-size: 4rem; + } + + .errorMessage { + font-size: 1.5rem; + } + + .errorContainer { + padding: 2rem 1.5rem; + margin: 1rem; + } +} \ No newline at end of file diff --git a/src/pages/NotFoundPage.tsx b/src/pages/NotFoundPage.tsx new file mode 100644 index 0000000..2ca3266 --- /dev/null +++ b/src/pages/NotFoundPage.tsx @@ -0,0 +1,25 @@ +import { Link } from 'react-router-dom' +import JuliaSetBackground from '@/components/JuliaSetBackground' +import styles from './NotFoundPage.module.css' + +const NotFoundPage = () => { + return ( +
+ +
+
+

404

+

Page Not Found

+

+ The page you're looking for doesn't exist or has been moved. +

+ + Return Home + +
+
+
+ ) +} + +export default NotFoundPage \ No newline at end of file