<!doctype html>
<html lang="es">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>404 — Página no encontrada</title>
<!-- Fuente futurista (opcional) -->
<link href="https://fonts.googleapis.com/css2?family=Orbitron:wght@400;700&display=swap" rel="stylesheet">
<style>
/* ======== Variables ======== */
:root{
--bg-1:#070b17;
--bg-2:#0d1230;
--grid:#1df2ff22;
--neon:#00e5ff;
--accent:#a100ff;
--text:#e6f1ff;
--danger:#ff3b81;
}
/* ======== Reset mínimo ======== */
*{box-sizing:border-box}
html,body{height:100%}
body{
margin:0;
color:var(--text);
font:16px/1.4 "Orbitron", system-ui, -apple-system, Segoe UI, Roboto, "Helvetica Neue", Arial, sans-serif;
background:
radial-gradient(1200px 500px at 50% -10%, #101642 0%, transparent 60%),
linear-gradient(180deg, var(--bg-1), var(--bg-2));
overflow:hidden; /* para que no aparezca scroll con las animaciones */
}
/* Halo animado detrás (conic gradient) */
body::before{
content:"";
position:fixed; inset:-20vmax;
background:conic-gradient(from 0deg, var(--accent), transparent 30%, var(--neon), transparent 60%, var(--accent));
filter:blur(80px) saturate(130%);
opacity:.18;
animation:spin 25s linear infinite;
pointer-events:none;
}
@keyframes spin{to{transform:rotate(360deg)}}
/* Rejilla neón tipo “tron” */
.grid{
position:fixed; left:0; right:0; bottom:-10vh; height:60vh;
background:
linear-gradient(transparent 0 70%, #0008 90%, #000c 100%),
repeating-linear-gradient(#0000, #0000 30px, var(--grid) 31px, var(--grid) 32px),
repeating-linear-gradient(90deg, #0000, #0000 30px, var(--grid) 31px, var(--grid) 32px);
transform:perspective(800px) rotateX(75deg);
transform-origin:bottom;
box-shadow:0 -20vh 20vh #000 inset;
pointer-events:none;
}
/* Estrellas sutiles */
.stars{
position:fixed; inset:0; pointer-events:none;
background:
radial-gradient(2px 2px at 20% 30%, #fff8, transparent 40%),
radial-gradient(1.5px 1.5px at 70% 20%, #fff6, transparent 40%),
radial-gradient(1.5px 1.5px at 80% 60%, #fff5, transparent 40%),
radial-gradient(1px 1px at 30% 80%, #fff7, transparent 40%);
animation:twinkle 6s ease-in-out infinite alternate;
opacity:.35;
}
@keyframes twinkle{to{filter:brightness(1.8)}}
/* Scanlines (retro) */
.scanlines{
position:fixed; inset:0; pointer-events:none;
background:repeating-linear-gradient(transparent 0 2px, #0002 3px 3.5px);
mix-blend-mode:soft-light; opacity:.4;
}
/* Contenido */
.wrap{
position:relative;
height:100dvh;
display:grid;
place-items:center;
text-align:center;
padding:4rem 2rem;
}
/* Número con efecto glitch */
.glitch{
font-size:clamp(6rem, 16vw, 18rem);
font-weight:800;
letter-spacing:.05em;
line-height:1;
position:relative;
text-shadow:
0 0 12px color-mix(in srgb, var(--neon) 60%, transparent),
0 0 40px color-mix(in srgb, var(--accent) 60%, transparent);
}
.glitch::before,
.glitch::after{
content:attr(data-text);
position:absolute; inset:0;
filter:blur(.6px);
mix-blend-mode:screen;
}
.glitch::before{
color:var(--neon);
transform:translateX(0);
animation:gl1 3s infinite steps(20);
}
.glitch::after{
color:var(--danger);
transform:translateX(0);
animation:gl2 2.8s infinite steps(18);
}
@keyframes gl1{
10%{clip-path:inset(0 0 75% 0); transform:translateX(-2px)}
20%{clip-path:inset(30% 0 0 0); transform:translateX(2px)}
30%{clip-path:inset(0 0 50% 0); transform:translateX(-1px)}
40%{clip-path:inset(60% 0 0 0); transform:translateX(1px)}
50%{clip-path:inset(0 0 20% 0); transform:translateX(-3px)}
60%,100%{clip-path:inset(0 0 0 0); transform:translateX(0)}
}
@keyframes gl2{
15%{clip-path:inset(0 0 65% 0); transform:translateX(2px)}
25%{clip-path:inset(40% 0 0 0); transform:translateX(-2px)}
35%{clip-path:inset(0 0 30% 0); transform:translateX(3px)}
45%{clip-path:inset(70% 0 0 0); transform:translateX(-1px)}
55%,100%{clip-path:inset(0 0 0 0); transform:translateX(0)}
}
/* Texto secundario */
.tagline{
margin-top:-1.2rem;
font-size:clamp(1rem, 2.5vw, 1.35rem);
letter-spacing:.25em;
text-transform:uppercase;
opacity:.85;
}
/* Botón neón */
.btn{
--bcol: var(--neon);
display:inline-block;
margin-top:2rem;
padding:.95rem 1.4rem;
border:2px solid var(--bcol);
color:var(--text);
text-decoration:none;
font-weight:700;
letter-spacing:.08em;
border-radius:10px;
background:
radial-gradient(80% 120% at 50% 130%, color-mix(in srgb, var(--bcol) 20%, transparent), transparent 70%);
box-shadow:
0 0 12px color-mix(in srgb, var(--bcol) 60%, transparent),
0 0 40px color-mix(in srgb, var(--bcol) 40%, transparent) inset;
transition:transform .15s ease, box-shadow .2s ease, color .2s ease, border-color .2s ease;
}
.btn:hover{
transform:translateY(-2px);
color:#001218;
border-color:var(--text);
background:linear-gradient(135deg, var(--neon), var(--accent));
box-shadow:
0 0 18px color-mix(in srgb, var(--neon) 60%, transparent),
0 0 28px color-mix(in srgb, var(--accent) 50%, transparent);
}
/* Footer pequeño */
.foot{
position:fixed; left:0; right:0; bottom:10px;
text-align:center; font-size:.8rem; opacity:.6;
}
/* Responsivo */
@media (max-width:480px){
.tagline{letter-spacing:.12em}
.btn{width:100%; max-width:320px}
}
</style>
</head>
<body>
<div class="stars" aria-hidden="true"></div>
<div class="grid" aria-hidden="true"></div>
<div class="scanlines" aria-hidden="true"></div>
<main class="wrap" role="main" aria-labelledby="t404">
<h1 id="t404" class="glitch" data-text="404">404</h1>
<p class="tagline">Página no encontrada</p>
<a class="btn" href="/">Volver al inicio</a>
</main>
<p class="foot">Error 404 · Sistema de Navegación Cuántica</p>
</body>
</html>