-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path404.html
More file actions
174 lines (170 loc) · 13.5 KB
/
404.html
File metadata and controls
174 lines (170 loc) · 13.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
<!DOCTYPE html>
<html lang="uk">
<head>
<meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>404 — Сторінку не знайдено | Roman Matviy</title>
<meta name="description" content="Сторінку не знайдено. Поверніться на головну або перегляньте мої послуги з PHP, Laravel, Vue.js розробки.">
<meta name="robots" content="noindex,nofollow">
<link rel="canonical" href="https://hirewebdeveloper.pp.ua/404.html">
<meta property="og:title" content="404 — Сторінку не знайдено | Roman Matviy">
<meta property="og:description" content="Сторінку не знайдено. Поверніться на головну або перегляньте мої послуги з PHP, Laravel, Vue.js розробки.">
<meta property="og:url" content="https://hirewebdeveloper.pp.ua/404.html">
<meta property="og:type" content="website">
<link rel="icon" type="image/x-icon" href="/favicon.ico">
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="manifest" href="/site.webmanifest">
<meta name="theme-color" content="#00f5d4">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=Syne:wght@400;600;700;800&family=JetBrains+Mono:wght@300;400;600&display=swap" rel="stylesheet">
<style> :root {
--bg: #03050d; --bg2: #070d1a; --bg3: #0a1428;
--cyan: #00f5d4; --orange: #ff6b35; --blue: #3b82f6;
--purple: #8b5cf6; --green: #22c55e;
--text: #e8edf5; --muted: #5a6a85;
--card: rgba(255,255,255,0.04);
--border: rgba(0,245,212,0.12);
--font-display: 'Syne', sans-serif;
--font-mono: 'JetBrains Mono', monospace;
}
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
html { scroll-behavior: smooth; }
body { background: var(--bg); color: var(--text); font-family: var(--font-mono); overflow-x: hidden; line-height: 1.7; cursor: none; min-height: 100vh; display: flex; flex-direction: column; }
a { color: inherit; text-decoration: none; } ul { list-style: none; }
.cur { width: 8px; height: 8px; background: var(--cyan); border-radius: 50%; position: fixed; top: 0; left: 0; pointer-events: none; z-index: 9999; mix-blend-mode: screen; transition: transform 0.08s ease; }
.cur-ring { width: 36px; height: 36px; border: 1.5px solid var(--cyan); border-radius: 50%; position: fixed; top: 0; left: 0; pointer-events: none; z-index: 9998; transition: all 0.18s ease; opacity: 0.4; }
.cur-ring.hovered { transform: scale(2) !important; opacity: 0.15; }
.bg-grid { position: fixed; inset: 0; z-index: 0; pointer-events: none; background-image: linear-gradient(rgba(0,245,212,0.025) 1px, transparent 1px), linear-gradient(90deg, rgba(0,245,212,0.025) 1px, transparent 1px); background-size: 70px 70px; }
.bg-blob { position: fixed; pointer-events: none; z-index: 0; border-radius: 50%; filter: blur(130px); }
@keyframes floatBlob { 0%,100%{transform:translate(0,0) scale(1)} 33%{transform:translate(40px,-60px) scale(1.1)} 66%{transform:translate(-30px,40px) scale(0.95)} }
nav.main-nav { position: fixed; top: 0; inset-inline: 0; z-index: 500; display: flex; align-items: center; justify-content: space-between; padding: 1.1rem 5vw; background: rgba(3,5,13,0.88); backdrop-filter: blur(24px) saturate(1.4); border-bottom: 1px solid var(--border); }
.nav-logo { font-family: var(--font-display); font-weight: 800; font-size: 1.15rem; color: var(--text); letter-spacing: -0.03em; }
.nav-logo em { color: var(--cyan); font-style: normal; }
.nav-links { display: flex; gap: 2rem; align-items: center; }
.nav-links a { font-size: 0.72rem; letter-spacing: 0.12em; text-transform: uppercase; color: var(--muted); transition: color 0.3s; }
.nav-links a:hover, .nav-links a.active { color: var(--cyan); }
.nav-btn { display: inline-flex; align-items: center; gap: 0.5rem; padding: 0.6rem 1.6rem; background: linear-gradient(135deg, var(--cyan), var(--blue)); color: var(--bg); font-family: var(--font-display); font-weight: 700; font-size: 0.78rem; border-radius: 2px; clip-path: polygon(10px 0%, 100% 0%, calc(100% - 10px) 100%, 0% 100%); transition: all 0.3s; white-space: nowrap; }
.nav-btn:hover { filter: brightness(1.15); transform: translateY(-1px); }
.nav-menu-btn { display: none; background: none; border: none; cursor: pointer; color: var(--text); }
.mobile-nav { position: fixed; inset: 0; z-index: 400; background: var(--bg); padding: 5rem 2rem 2rem; display: none; flex-direction: column; gap: 2rem; }
.mobile-nav.open { display: flex; }
.mobile-nav a { font-family: var(--font-display); font-size: 1.8rem; font-weight: 700; color: var(--text); }
.mobile-nav a:hover { color: var(--cyan); }
.mobile-close { position: absolute; top: 1.5rem; right: 1.5rem; background: none; border: none; color: var(--text); font-size: 1.5rem; cursor: pointer; }
.error-container { flex: 1; display: flex; align-items: center; justify-content: center; padding: 6.5rem 5vw 5rem; position: relative; z-index: 1; }
.error-content { text-align: center; max-width: 800px; }
.error-code { font-family: var(--font-display); font-weight: 800; font-size: clamp(6rem, 15vw, 12rem); line-height: 1; color: var(--cyan); letter-spacing: -0.05em; margin-bottom: 1rem; opacity: 0.8; }
.error-title { font-family: var(--font-display); font-weight: 800; font-size: clamp(2rem, 4vw, 3.5rem); line-height: 1.02; letter-spacing: -0.04em; margin-bottom: 1rem; }
.error-desc { font-size: 0.88rem; color: var(--muted); max-width: 500px; margin: 0 auto 2.5rem; line-height: 1.9; }
.error-actions { display: flex; gap: 1rem; justify-content: center; flex-wrap: wrap; }
.btn-p { display: inline-flex; align-items: center; gap: 0.5rem; padding: 0.85rem 2rem; font-family: var(--font-display); font-weight: 700; font-size: 0.85rem; border-radius: 2px; transition: all 0.3s; letter-spacing: 0.03em; }
.btn-primary { background: linear-gradient(135deg, var(--cyan), var(--blue)); color: var(--bg); clip-path: polygon(12px 0%, 100% 0%, calc(100% - 12px) 100%, 0% 100%); }
.btn-primary:hover { filter: brightness(1.12); transform: translateY(-2px); box-shadow: 0 12px 28px rgba(0,245,212,0.25); }
.btn-secondary { border: 1px solid rgba(255,107,53,0.35); color: var(--orange); clip-path: polygon(12px 0%, 100% 0%, calc(100% - 12px) 100%, 0% 100%); }
.btn-secondary:hover { background: rgba(255,107,53,0.08); transform: translateY(-2px); }
.suggestions { margin-top: 4rem; padding-top: 3rem; border-top: 1px solid var(--border); }
.suggestions-title { font-family: var(--font-display); font-weight: 700; font-size: 1.2rem; margin-bottom: 1.5rem; color: var(--text); }
.suggestions-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1rem; }
.suggestion-card { background: var(--bg2); border: 1px solid var(--border); border-radius: 3px; padding: 1.5rem; transition: all 0.3s; text-decoration: none; display: block; }
.suggestion-card:hover { border-color: rgba(0,245,212,0.25); transform: translateY(-3px); }
.suggestion-icon { font-size: 1.5rem; margin-bottom: 0.5rem; }
.suggestion-name { font-family: var(--font-display); font-weight: 700; font-size: 0.9rem; color: var(--text); margin-bottom: 0.3rem; }
.suggestion-desc { font-size: 0.72rem; color: var(--muted); line-height: 1.7; }
footer.main-footer { position: relative; z-index: 1; border-top: 1px solid var(--border); padding: 1.8rem 5vw; display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 1rem; }
.footer-copy { font-size: 0.7rem; color: var(--muted); }
.footer-copy a { color: var(--cyan); }
.footer-nav { display: flex; gap: 2rem; flex-wrap: wrap; }
.footer-nav a { font-size: 0.68rem; color: var(--muted); transition: color 0.2s; }
.footer-nav a:hover { color: var(--cyan); }
@media (max-width: 768px) { nav.main-nav .nav-links { display: none; } .nav-menu-btn { display: flex; } .error-container { padding: 4rem 5vw 3rem; } .suggestions-grid { grid-template-columns: 1fr; } }
</style>
</head>
<body>
<div class="cur" id="cur"></div><div class="cur-ring" id="curRing"></div>
<div class="bg-grid"></div>
<div class="bg-blob" style="width:650px;height:650px;top:-180px;right:-120px;background:var(--purple);opacity:.07;animation:floatBlob 22s ease-in-out infinite;"></div>
<div class="bg-blob" style="width:400px;height:400px;bottom:-100px;left:-80px;background:var(--cyan);opacity:.05;animation:floatBlob 28s ease-in-out infinite reverse;"></div>
<nav class="mobile-nav" id="mobileNav">
<button class="mobile-close" id="mobileClose">✕</button><a href="/">Головна</a><a href="/about.html">Про мене</a><a href="/services/">Послуги</a><a href="/pricing.html">Ціни</a><a href="/en/404.html" style="color:var(--muted);">EN 🇬🇧</a>
</nav>
<nav class="main-nav">
<a href="/" class="nav-logo">Roman<em>Dev</em></a>
<ul class="nav-links"><li><a href="/">Головна</a></li><li><a href="/about.html">Про мене</a></li><li><a href="/services/">Послуги</a></li><li><a href="/pricing.html">Ціни</a></li>
<li><a href="/en/404.html" style="color:var(--muted);font-size:.63rem;border:1px solid var(--border);padding:.27rem .6rem;border-radius:100px;">EN 🇬🇧</a></li>
</ul>
<a href="https://t.me/RomanMatviy" class="nav-btn" target="_blank" rel="noopener">⚡ Найняти</a>
<button class="nav-menu-btn" id="menuBtn"><svg width="22" height="16" viewBox="0 0 22 16"><rect y="0" width="22" height="2" rx="1" fill="currentColor"/><rect y="7" width="16" height="2" rx="1" fill="currentColor"/><rect y="14" width="22" height="2" rx="1" fill="currentColor"/></svg></button>
</nav>
<main class="error-container">
<div class="error-content">
<div class="error-code">404</div>
<h1 class="error-title">Сторінку <em style="color:var(--cyan)">не знайдено</em></h1>
<p class="error-desc">На жаль, сторінку, яку ви шукаєте, не існує або була переміщена. Давайте допоможу вам знайти те, що вам потрібно.</p>
<div class="error-actions">
<a href="/" class="btn-p btn-primary">
🏠 На головну
</a>
<a href="/services/" class="btn-p btn-secondary">
🛠️ Послуги
</a>
</div>
<div class="suggestions">
<h2 class="suggestions-title">Можливо, вас цікавить:</h2>
<div class="suggestions-grid">
<a href="/services/laravel.html" class="suggestion-card">
<div class="suggestion-icon">🟥</div>
<div class="suggestion-name">Laravel розробка</div>
<div class="suggestion-desc">Веб-додатки на Laravel</div>
</a>
<a href="/services/php.html" class="suggestion-card">
<div class="suggestion-icon">🐘</div>
<div class="suggestion-name">PHP розробка</div>
<div class="suggestion-desc">Backend та API</div>
</a>
<a href="/services/fullstack.html" class="suggestion-card">
<div class="suggestion-icon">🚀</div>
<div class="suggestion-name">FullStack</div>
<div class="suggestion-desc">Laravel + Vue.js</div>
</a>
<a href="/services/api.html" class="suggestion-card">
<div class="suggestion-icon">🔌</div>
<div class="suggestion-name">REST API</div>
<div class="suggestion-desc">API розробка</div>
</a>
<a href="/stack/" class="suggestion-card">
<div class="suggestion-icon">⚙️</div>
<div class="suggestion-name">Технології</div>
<div class="suggestion-desc">Мій стек</div>
</a>
<a href="/pricing.html" class="suggestion-card">
<div class="suggestion-icon">💰</div>
<div class="suggestion-name">Ціни</div>
<div class="suggestion-desc">Вартість послуг</div>
</a>
</div>
</div>
</div>
</main>
<footer class="main-footer">
<div class="footer-copy">© 2018–2026 <a href="/">Roman Matviy</a> · PHP Developer · Lviv, Ukraine 🇺🇦</div>
<nav class="footer-nav">
<a href="/">Головна</a><a href="/about.html">Про мене</a>
<a href="/services/">Послуги</a><a href="/pricing.html">Ціни</a><a href="/stack/">Stack</a>
</nav>
</footer>
<script>
(function(){
var c=document.getElementById('cur'),r=document.getElementById('curRing');
if(c&&r){var mx=0,my=0,rx=0,ry=0;
document.addEventListener('mousemove',function(e){mx=e.clientX;my=e.clientY;c.style.transform='translate('+(mx-4)+'px,'+(my-4)+'px)';});
(function lp(){rx+=(mx-rx)*.12;ry+=(my-ry)*.12;r.style.transform='translate('+(rx-18)+'px,'+(ry-18)+'px)';requestAnimationFrame(lp);})();
document.querySelectorAll('a,button').forEach(function(el){
el.addEventListener('mouseenter',function(){r.classList.add('hovered');});
el.addEventListener('mouseleave',function(){r.classList.remove('hovered');});
});}
var mb=document.getElementById('menuBtn'),mn=document.getElementById('mobileNav'),mc=document.getElementById('mobileClose');
if(mb&&mn&&mc){mb.addEventListener('click',function(){mn.classList.add('open');});mc.addEventListener('click',function(){mn.classList.remove('open');});mn.querySelectorAll('a').forEach(function(a){a.addEventListener('click',function(){mn.classList.remove('open');});});}
})();
</script>
</body></html>