Files
Ninjaserver/public/404.html
2025-09-23 14:13:24 +02:00

337 lines
10 KiB
HTML

<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>404 - Seite nicht gefunden | NinjaCross</title>
<link rel="icon" type="image/x-icon" href="/pictures/favicon.ico">
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background: linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f3460 100%);
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
position: relative;
}
/* Animated background particles */
.particles {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
overflow: hidden;
z-index: 1;
}
.particle {
position: absolute;
background: rgba(255, 255, 255, 0.1);
border-radius: 50%;
animation: float 6s ease-in-out infinite;
}
.particle:nth-child(1) { width: 4px; height: 4px; left: 10%; animation-delay: 0s; }
.particle:nth-child(2) { width: 6px; height: 6px; left: 20%; animation-delay: 1s; }
.particle:nth-child(3) { width: 3px; height: 3px; left: 30%; animation-delay: 2s; }
.particle:nth-child(4) { width: 5px; height: 5px; left: 40%; animation-delay: 3s; }
.particle:nth-child(5) { width: 4px; height: 4px; left: 50%; animation-delay: 4s; }
.particle:nth-child(6) { width: 7px; height: 7px; left: 60%; animation-delay: 5s; }
.particle:nth-child(7) { width: 3px; height: 3px; left: 70%; animation-delay: 0.5s; }
.particle:nth-child(8) { width: 5px; height: 5px; left: 80%; animation-delay: 1.5s; }
.particle:nth-child(9) { width: 4px; height: 4px; left: 90%; animation-delay: 2.5s; }
@keyframes float {
0%, 100% { transform: translateY(100vh) rotate(0deg); opacity: 0; }
10% { opacity: 1; }
90% { opacity: 1; }
50% { transform: translateY(-10vh) rotate(180deg); }
}
/* Main container */
.container {
text-align: center;
z-index: 10;
position: relative;
max-width: 600px;
padding: 2rem;
}
/* Ninja emoji with animation */
.ninja-emoji {
font-size: 8rem;
margin-bottom: 1rem;
display: inline-block;
animation: ninja-bounce 2s ease-in-out infinite;
filter: drop-shadow(0 0 20px rgba(0, 255, 255, 0.5));
}
@keyframes ninja-bounce {
0%, 100% { transform: translateY(0) rotate(0deg); }
25% { transform: translateY(-20px) rotate(-5deg); }
50% { transform: translateY(-10px) rotate(0deg); }
75% { transform: translateY(-15px) rotate(5deg); }
}
/* 404 number with glow effect */
.error-code {
font-size: 6rem;
font-weight: bold;
background: linear-gradient(45deg, #00ffff, #ff00ff, #ffff00, #00ffff);
background-size: 400% 400%;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
animation: gradient-shift 3s ease-in-out infinite;
margin-bottom: 1rem;
text-shadow: 0 0 30px rgba(0, 255, 255, 0.5);
}
@keyframes gradient-shift {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
/* Error message */
.error-message {
font-size: 1.5rem;
color: #ffffff;
margin-bottom: 2rem;
opacity: 0;
animation: fade-in-up 1s ease-out 0.5s forwards;
}
@keyframes fade-in-up {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/* Description */
.description {
font-size: 1.1rem;
color: #b0b0b0;
margin-bottom: 3rem;
line-height: 1.6;
opacity: 0;
animation: fade-in-up 1s ease-out 1s forwards;
}
/* Action buttons */
.actions {
display: flex;
gap: 1rem;
justify-content: center;
flex-wrap: wrap;
opacity: 0;
animation: fade-in-up 1s ease-out 1.5s forwards;
}
.btn {
padding: 12px 24px;
border: none;
border-radius: 8px;
font-size: 1rem;
font-weight: 600;
text-decoration: none;
cursor: pointer;
transition: all 0.3s ease;
position: relative;
overflow: hidden;
}
.btn-primary {
background: linear-gradient(135deg, #00ffff, #0080ff);
color: white;
box-shadow: 0 4px 15px rgba(0, 255, 255, 0.3);
}
.btn-primary:hover {
transform: translateY(-2px);
box-shadow: 0 6px 20px rgba(0, 255, 255, 0.5);
}
.btn-secondary {
background: transparent;
color: #00ffff;
border: 2px solid #00ffff;
}
.btn-secondary:hover {
background: #00ffff;
color: #1a1a2e;
transform: translateY(-2px);
}
/* Glitch effect for 404 */
.glitch {
position: relative;
display: inline-block;
}
.glitch::before,
.glitch::after {
content: '404';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(45deg, #00ffff, #ff00ff, #ffff00, #00ffff);
background-size: 400% 400%;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.glitch::before {
animation: glitch-1 0.5s infinite;
z-index: -1;
}
.glitch::after {
animation: glitch-2 0.5s infinite;
z-index: -2;
}
@keyframes glitch-1 {
0%, 100% { transform: translate(0); }
20% { transform: translate(-2px, 2px); }
40% { transform: translate(-2px, -2px); }
60% { transform: translate(2px, 2px); }
80% { transform: translate(2px, -2px); }
}
@keyframes glitch-2 {
0%, 100% { transform: translate(0); }
20% { transform: translate(2px, -2px); }
40% { transform: translate(2px, 2px); }
60% { transform: translate(-2px, -2px); }
80% { transform: translate(-2px, 2px); }
}
/* Responsive design */
@media (max-width: 768px) {
.ninja-emoji { font-size: 6rem; }
.error-code { font-size: 4rem; }
.error-message { font-size: 1.2rem; }
.description { font-size: 1rem; }
.actions { flex-direction: column; align-items: center; }
.btn { width: 200px; }
}
/* Loading animation for page load */
.container {
animation: page-load 1s ease-out;
}
@keyframes page-load {
from {
opacity: 0;
transform: scale(0.8);
}
to {
opacity: 1;
transform: scale(1);
}
}
</style>
</head>
<body>
<!-- Animated background particles -->
<div class="particles">
<div class="particle"></div>
<div class="particle"></div>
<div class="particle"></div>
<div class="particle"></div>
<div class="particle"></div>
<div class="particle"></div>
<div class="particle"></div>
<div class="particle"></div>
<div class="particle"></div>
</div>
<div class="container">
<!-- Animated ninja emoji -->
<div class="ninja-emoji">🥷</div>
<!-- Glitchy 404 number -->
<div class="error-code glitch">404</div>
<!-- Error message -->
<h1 class="error-message">Oops! Diese Seite ist im Ninja-Modus verschwunden!</h1>
<!-- Description -->
<p class="description">
Die Seite, die du suchst, hat sich wie ein echter Ninja versteckt.<br>
Vielleicht ist sie auf einer geheimen Mission oder hat sich in der Dunkelheit versteckt.
</p>
<!-- Action buttons -->
<div class="actions">
<a href="/" class="btn btn-primary">🏠 Zur Hauptseite</a>
<a href="/dashboard.html" class="btn btn-secondary">📊 Dashboard</a>
</div>
</div>
<script>
// Add some interactive effects
document.addEventListener('mousemove', (e) => {
const particles = document.querySelectorAll('.particle');
const x = e.clientX / window.innerWidth;
const y = e.clientY / window.innerHeight;
particles.forEach((particle, index) => {
const speed = (index + 1) * 0.5;
const xOffset = (x - 0.5) * speed * 20;
const yOffset = (y - 0.5) * speed * 20;
particle.style.transform = `translate(${xOffset}px, ${yOffset}px)`;
});
});
// Add click effect on ninja emoji
document.querySelector('.ninja-emoji').addEventListener('click', () => {
const ninja = document.querySelector('.ninja-emoji');
ninja.style.animation = 'none';
ninja.style.transform = 'scale(1.2) rotate(360deg)';
setTimeout(() => {
ninja.style.animation = 'ninja-bounce 2s ease-in-out infinite';
ninja.style.transform = '';
}, 500);
});
// Add some console easter egg
console.log(`
🥷 NINJA 404 CONSOLE EASTER EGG 🥷
Du hast die geheime Konsole gefunden!
Hier ist ein Ninja-Haiku für dich:
"Versteckte Seite
Wie ein Ninja in der Nacht
Kehrt bald zurück"
- Der NinjaCross Server
`);
</script>
</body>
</html>