<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<title>404 — Lost & Found | soika.me</title>
<style>
:root{
--bg:#0b1020; --glass: rgba(255,255,255,0.06);
--accent:#7be0f7; --accent2:#8a6cff;
--muted: rgba(255,255,255,0.65);
--mono: 'SFMono-Regular', ui-monospace, Menlo, monospace;
}
html,body{height:100%;margin:0;font-family:Inter, system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial; background:#0b1020; color:#e8f6ff;}
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<title>404 — Lost & Found | soika.me</title>
<style>
:root{
--bg:#0b1020; --glass: rgba(255,255,255,0.06);
--accent:#7be0f7; --accent2:#8a6cff;
--muted: rgba(255,255,255,0.65);
--mono: 'SFMono-Regular', ui-monospace, Menlo, monospace;
}
html,body{height:100%;margin:0;font-family:Inter, system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial; background:#0b1020; color:#e8f6ff;}
/* starfield */
.stars {position:fixed;inset:0;pointer-events:none;background-image: radial-gradient(circle at 10% 20%, rgba(255,255,255,0.06) 0.5px, transparent 0.7px), radial-gradient(circle at 60% 40%, rgba(255,255,255,0.04) 0.6px, transparent 0.9px); background-size: 100% 100%, 500% 500%; opacity:0.9; animation: twinkle 8s linear infinite;}
@keyframes twinkle{0%{opacity:.9}50%{opacity:.7}100%{opacity:.9}}
.stars {position:fixed;inset:0;pointer-events:none;background-image: radial-gradient(circle at 10% 20%, rgba(255,255,255,0.06) 0.5px, transparent 0.7px), radial-gradient(circle at 60% 40%, rgba(255,255,255,0.04) 0.6px, transparent 0.9px); background-size: 100% 100%, 500% 500%; opacity:0.9; animation: twinkle 8s linear infinite;}
@keyframes twinkle{0%{opacity:.9}50%{opacity:.7}100%{opacity:.9}}
.wrap{min-height:100vh;display:grid;place-items:center;padding:40px}
.card{width:min(1100px,94%);display:grid;grid-template-columns:1fr 420px;gap:32px;align-items:center}
.card{width:min(1100px,94%);display:grid;grid-template-columns:1fr 420px;gap:32px;align-items:center}
/* left */
.hero{padding:36px;border-radius:20px;background:linear-gradient(180deg, rgba(255,255,255,0.02), rgba(255,255,255,0.01));box-shadow: 0 10px 30px rgba(2,6,23,0.6);backdrop-filter: blur(6px);}
.hero{padding:36px;border-radius:20px;background:linear-gradient(180deg, rgba(255,255,255,0.02), rgba(255,255,255,0.01));box-shadow: 0 10px 30px rgba(2,6,23,0.6);backdrop-filter: blur(6px);}
.big{font-weight:800;font-size:clamp(48px,9vw,120px);line-height:0.88;letter-spacing:-4px;position:relative}
/* glitch */
.glitch{position:relative;display:inline-block}
.glitch::before, .glitch::after{content:attr(data-text);position:absolute;left:0;top:0;}
.glitch::before{color:var(--accent);mix-blend-mode:screen;clip-path:polygon(0 0,100% 0,100% 33%,0 33%);transform:translate(-6px,-3px);opacity:.9}
.glitch::after{color:var(--accent2);mix-blend-mode:screen;clip-path:polygon(0 66%,100% 66%,100% 100%,0 100%);transform:translate(6px,3px);opacity:.9}
@keyframes jitter{0%{transform:translate(0,0)}20%{transform:translate(-2px,1px)}40%{transform:translate(2px,-1px)}60%{transform:translate(-1px,2px)}80%{transform:translate(1px,-2px)}100%{transform:translate(0,0)}}
.glitch{animation:jitter 2.6s infinite}
/* glitch */
.glitch{position:relative;display:inline-block}
.glitch::before, .glitch::after{content:attr(data-text);position:absolute;left:0;top:0;}
.glitch::before{color:var(--accent);mix-blend-mode:screen;clip-path:polygon(0 0,100% 0,100% 33%,0 33%);transform:translate(-6px,-3px);opacity:.9}
.glitch::after{color:var(--accent2);mix-blend-mode:screen;clip-path:polygon(0 66%,100% 66%,100% 100%,0 100%);transform:translate(6px,3px);opacity:.9}
@keyframes jitter{0%{transform:translate(0,0)}20%{transform:translate(-2px,1px)}40%{transform:translate(2px,-1px)}60%{transform:translate(-1px,2px)}80%{transform:translate(1px,-2px)}100%{transform:translate(0,0)}}
.glitch{animation:jitter 2.6s infinite}
.sub{font-size:18px;color:var(--muted);margin-top:8px}
.explain{margin-top:18px;color:rgba(255,255,255,0.86);font-size:15px}
/* search + actions */
.controls{display:flex;flex-wrap:wrap;gap:12px;margin-top:22px;align-items:center}
.btn{background:linear-gradient(90deg,var(--accent),var(--accent2));padding:12px 16px;border-radius:12px;color:#021224;font-weight:700;text-decoration:none;box-shadow:0 8px 20px rgba(124,178,255,0.08);}
.ghost{background:transparent;border:1px solid rgba(255,255,255,0.06);padding:12px 14px;border-radius:12px;color:var(--muted);text-decoration:none}
.controls{display:flex;flex-wrap:wrap;gap:12px;margin-top:22px;align-items:center}
.btn{background:linear-gradient(90deg,var(--accent),var(--accent2));padding:12px 16px;border-radius:12px;color:#021224;font-weight:700;text-decoration:none;box-shadow:0 8px 20px rgba(124,178,255,0.08);}
.ghost{background:transparent;border:1px solid rgba(255,255,255,0.06);padding:12px 14px;border-radius:12px;color:var(--muted);text-decoration:none}
/* right pane — scene */
.scene{display:flex;flex-direction:column;gap:16px;padding:28px;border-radius:20px;background:linear-gradient(180deg, rgba(255,255,255,0.015), rgba(255,255,255,0.01));box-shadow:inset 0 1px 0 rgba(255,255,255,0.02)}
.badge{font-family:var(--mono);font-size:13px;padding:6px 10px;border-radius:999px;background:rgba(255,255,255,0.02);display:inline-block;color:var(--muted)}
.scene{display:flex;flex-direction:column;gap:16px;padding:28px;border-radius:20px;background:linear-gradient(180deg, rgba(255,255,255,0.015), rgba(255,255,255,0.01));box-shadow:inset 0 1px 0 rgba(255,255,255,0.02)}
.badge{font-family:var(--mono);font-size:13px;padding:6px 10px;border-radius:999px;background:rgba(255,255,255,0.02);display:inline-block;color:var(--muted)}
.ship{position:relative;height:260px;display:flex;align-items:center;justify-content:center}
.rocket{width:160px;height:160px;filter:drop-shadow(0 10px 30px rgba(12,22,50,0.6));transform-origin:center;animation: floaty 4s ease-in-out infinite}
@keyframes floaty{0%{transform:translateY(0) rotate(-3deg)}50%{transform:translateY(-10px) rotate(3deg)}100%{transform:translateY(0) rotate(-3deg)}}
.rocket{width:160px;height:160px;filter:drop-shadow(0 10px 30px rgba(12,22,50,0.6));transform-origin:center;animation: floaty 4s ease-in-out infinite}
@keyframes floaty{0%{transform:translateY(0) rotate(-3deg)}50%{transform:translateY(-10px) rotate(3deg)}100%{transform:translateY(0) rotate(-3deg)}}
.orb{position:absolute;right:18px;top:18px;width:60px;height:60px;border-radius:999px;background:linear-gradient(180deg,var(--accent),transparent);filter:blur(18px);opacity:.9}
.hint{color:var(--muted);font-size:13px}
footer{margin-top:18px;color:rgba(255,255,255,0.45);font-size:13px}
/* responsive */
@media (max-width:900px){.card{grid-template-columns:1fr;}.scene{order:-1}}
</style>
</head>
<body>
<div class="stars" aria-hidden></div>
<div class="wrap">
<div class="card" role="main">
<section class="hero" aria-labelledby="title">
<div class="big">
<span class="glitch" data-text="404">404</span>
</div>
<div class="sub">Lost page — found style.</div>
@media (max-width:900px){.card{grid-template-columns:1fr;}.scene{order:-1}}
</style>
</head>
<body>
<div class="stars" aria-hidden></div>
<div class="wrap">
<div class="card" role="main">
<section class="hero" aria-labelledby="title">
<div class="big">
<span class="glitch" data-text="404">404</span>
</div>
<div class="sub">Lost page — found style.</div>
<p class="explain">Sorry, this page can’t be found. Maybe it’s drifting through space or simply never existed. Either way, here are some safe landing spots:</p>
<div class="controls" role="navigation" aria-label="Quick links">
<a href="https://soika.me/" class="btn">Home</a>
<a href="https://soika.me/portfolio" class="ghost">Portfolio</a>
<a href="https://soika.me/contact" class="ghost">Contact</a>
<a href="https://soika.me/about" class="ghost">About</a>
</div>
<a href="https://soika.me/" class="btn">Home</a>
<a href="https://soika.me/portfolio" class="ghost">Portfolio</a>
<a href="https://soika.me/contact" class="ghost">Contact</a>
<a href="https://soika.me/about" class="ghost">About</a>
</div>
<footer>Error code: 404 · If the problem persists, <a href="https://soika.me/contact" style="color:var(--accent);text-decoration:underline">get in touch</a>.</footer>
</section>
</section>
<aside class="scene" aria-hidden="true">
<div style="display:flex;justify-content:space-between;align-items:center">
<span class="badge">PATH: /missing</span>
<span class="badge">TIME: <span id="time">—</span></span>
</div>
<div style="display:flex;justify-content:space-between;align-items:center">
<span class="badge">PATH: /missing</span>
<span class="badge">TIME: <span id="time">—</span></span>
</div>
<div class="ship">
<!-- simple inline SVG rocket -->
<svg class="rocket" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" aria-hidden>
<g fill="none" fill-rule="evenodd">
<path d="M32 2c6 0 14 8 14 14 0 6-10 20-14 20s-14-14-14-20C18 10 26 2 32 2z" fill="#fff" opacity="0.06"/>
<path d="M20 44c0 6 18 10 24 0l-9-9-15 9z" fill="#fff" opacity="0.05"/>
<g transform="translate(16,10)">
<ellipse cx="16" cy="6" rx="6" ry="6" fill="#0d1220"/>
<path d="M16 0c4 0 8 6 8 10s-4 10-8 10-8-6-8-10S12 0 16 0z" fill="url(#g1)"/>
<circle cx="16" cy="10" r="2" fill="#021224" />
</g>
</g>
<defs>
<linearGradient id="g1" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#7be0f7" />
<stop offset="100%" stop-color="#8a6cff" />
</linearGradient>
</defs>
</svg>
</div>
<!-- simple inline SVG rocket -->
<svg class="rocket" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" aria-hidden>
<g fill="none" fill-rule="evenodd">
<path d="M32 2c6 0 14 8 14 14 0 6-10 20-14 20s-14-14-14-20C18 10 26 2 32 2z" fill="#fff" opacity="0.06"/>
<path d="M20 44c0 6 18 10 24 0l-9-9-15 9z" fill="#fff" opacity="0.05"/>
<g transform="translate(16,10)">
<ellipse cx="16" cy="6" rx="6" ry="6" fill="#0d1220"/>
<path d="M16 0c4 0 8 6 8 10s-4 10-8 10-8-6-8-10S12 0 16 0z" fill="url(#g1)"/>
<circle cx="16" cy="10" r="2" fill="#021224" />
</g>
</g>
<defs>
<linearGradient id="g1" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#7be0f7" />
<stop offset="100%" stop-color="#8a6cff" />
</linearGradient>
</defs>
</svg>
</div>
<div style="padding:8px 6px;border-radius:12px;background:rgba(255,255,255,0.01);">
<div class="hint">Tip: Click Home to teleport back safely.</div>
</div>
</aside>
</div>
</div>
<div class="hint">Tip: Click Home to teleport back safely.</div>
</div>
</aside>
</div>
</div>
<script>
// time badge
const timeEl = document.getElementById('time');
function tick(){const d=new Date();timeEl.textContent = d.toLocaleString();}
tick(); setInterval(tick,1000);
</script>
</body>
</html>
// time badge
const timeEl = document.getElementById('time');
function tick(){const d=new Date();timeEl.textContent = d.toLocaleString();}
tick(); setInterval(tick,1000);
</script>
</body>
</html>