Modules: - Chain: daemon RPC client (DaemonRpc singleton, cached queries) - Explorer: block browser, tx viewer, alias directory, search, stats API - Names: .lthn TLD registrar portal (availability check, lookup, directory) - Trade: scaffold (DEX frontend + API) - Pool: scaffold (mining pool dashboard) Replaces 5 Node.js containers (5.9GB) with one FrankenPHP app. Built on CorePHP framework pattern from host.uk.com. Co-Authored-By: Charon <charon@lethean.io>
197 lines
6.1 KiB
HTML
197 lines
6.1 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en" class="dark">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>Page Not Found - Host UK</title>
|
|
<link rel="preconnect" href="https://fonts.bunny.net">
|
|
<link href="https://fonts.bunny.net/css?family=inter:400,500,600,700&display=swap" rel="stylesheet">
|
|
<style>
|
|
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
|
|
|
:root {
|
|
--slate-100: #f1f5f9;
|
|
--slate-300: #cbd5e1;
|
|
--slate-400: #94a3b8;
|
|
--slate-500: #64748b;
|
|
--slate-600: #475569;
|
|
--slate-700: #334155;
|
|
--slate-800: #1e293b;
|
|
--slate-900: #0f172a;
|
|
--slate-950: #020617;
|
|
--violet-400: #a78bfa;
|
|
--violet-500: #8b5cf6;
|
|
--violet-600: #7c3aed;
|
|
--amber-400: #fbbf24;
|
|
--amber-500: #f59e0b;
|
|
}
|
|
|
|
html, body {
|
|
height: 100%;
|
|
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
|
|
background: linear-gradient(135deg, var(--slate-950) 0%, var(--slate-900) 50%, #1a1a2e 100%);
|
|
color: var(--slate-100);
|
|
-webkit-font-smoothing: antialiased;
|
|
}
|
|
|
|
body {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
min-height: 100vh;
|
|
padding: 2rem;
|
|
text-align: center;
|
|
position: relative;
|
|
overflow: hidden;
|
|
}
|
|
|
|
body::before {
|
|
content: '';
|
|
position: absolute;
|
|
top: -50%;
|
|
left: -50%;
|
|
width: 200%;
|
|
height: 200%;
|
|
background: radial-gradient(circle at 30% 30%, rgba(251, 191, 36, 0.06) 0%, transparent 50%),
|
|
radial-gradient(circle at 70% 70%, rgba(139, 92, 246, 0.04) 0%, transparent 50%);
|
|
z-index: -1;
|
|
}
|
|
|
|
.container { max-width: 32rem; z-index: 1; }
|
|
|
|
.logo {
|
|
width: 80px;
|
|
height: 80px;
|
|
margin: 0 auto 2rem;
|
|
opacity: 0.9;
|
|
}
|
|
|
|
h1 {
|
|
font-size: 2.5rem;
|
|
font-weight: 700;
|
|
color: var(--slate-100);
|
|
margin-bottom: 1rem;
|
|
letter-spacing: -0.025em;
|
|
}
|
|
|
|
.status-code {
|
|
display: inline-block;
|
|
font-size: 0.875rem;
|
|
font-weight: 600;
|
|
color: var(--amber-400);
|
|
background: rgba(251, 191, 36, 0.1);
|
|
padding: 0.25rem 0.75rem;
|
|
border-radius: 9999px;
|
|
margin-bottom: 1.5rem;
|
|
border: 1px solid rgba(251, 191, 36, 0.2);
|
|
}
|
|
|
|
p {
|
|
font-size: 1.125rem;
|
|
color: var(--slate-400);
|
|
line-height: 1.75;
|
|
margin-bottom: 2rem;
|
|
}
|
|
|
|
.actions {
|
|
display: flex;
|
|
gap: 1rem;
|
|
justify-content: center;
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.btn {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 0.5rem;
|
|
padding: 0.75rem 1.5rem;
|
|
font-size: 0.875rem;
|
|
font-weight: 500;
|
|
border-radius: 0.5rem;
|
|
text-decoration: none;
|
|
transition: all 0.2s ease;
|
|
}
|
|
|
|
.btn-primary {
|
|
background: linear-gradient(135deg, var(--violet-600), var(--violet-500));
|
|
color: white;
|
|
box-shadow: 0 4px 14px 0 rgba(139, 92, 246, 0.3);
|
|
}
|
|
|
|
.btn-primary:hover {
|
|
transform: translateY(-1px);
|
|
box-shadow: 0 6px 20px 0 rgba(139, 92, 246, 0.4);
|
|
}
|
|
|
|
.btn-secondary {
|
|
background: rgba(255, 255, 255, 0.05);
|
|
color: var(--slate-300);
|
|
border: 1px solid var(--slate-700);
|
|
}
|
|
|
|
.btn-secondary:hover {
|
|
background: rgba(255, 255, 255, 0.1);
|
|
}
|
|
|
|
.status-info {
|
|
margin-top: 3rem;
|
|
padding-top: 2rem;
|
|
border-top: 1px solid var(--slate-800);
|
|
}
|
|
|
|
.status-info p {
|
|
font-size: 0.875rem;
|
|
color: var(--slate-500);
|
|
margin: 0;
|
|
}
|
|
|
|
.status-info a {
|
|
color: var(--violet-400);
|
|
text-decoration: none;
|
|
}
|
|
|
|
.status-info a:hover { text-decoration: underline; }
|
|
|
|
.raven-logo { fill: currentColor; color: var(--slate-200); }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="container">
|
|
<div class="logo">
|
|
<svg viewBox="0 0 100 100" class="raven-logo" xmlns="http://www.w3.org/2000/svg">
|
|
<path d="M50 10 C30 10 15 30 15 50 C15 70 30 90 50 90 C70 90 85 70 85 50 C85 30 70 10 50 10 M35 35 C38 35 40 37 40 40 C40 43 38 45 35 45 C32 45 30 43 30 40 C30 37 32 35 35 35 M50 75 C40 75 32 65 32 55 L68 55 C68 65 60 75 50 75 M65 45 C62 45 60 43 60 40 C60 37 62 35 65 35 C68 35 70 37 70 40 C70 43 68 45 65 45"/>
|
|
</svg>
|
|
</div>
|
|
|
|
<span class="status-code">404 Not Found</span>
|
|
|
|
<h1>Page not found</h1>
|
|
|
|
<p>
|
|
The page you're looking for doesn't exist or may have been moved.
|
|
Let's get you back on track.
|
|
</p>
|
|
|
|
<div class="actions">
|
|
<a href="/" class="btn btn-primary">
|
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
<path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/>
|
|
<polyline points="9 22 9 12 15 12 15 22"/>
|
|
</svg>
|
|
Go Home
|
|
</a>
|
|
<a href="javascript:history.back()" class="btn btn-secondary">
|
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
<path d="M19 12H5M12 19l-7-7 7-7"/>
|
|
</svg>
|
|
Go Back
|
|
</a>
|
|
</div>
|
|
|
|
<div class="status-info">
|
|
<p>Need help? Contact <a href="mailto:support@host.uk.com">support@host.uk.com</a></p>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|