-
Notifications
You must be signed in to change notification settings - Fork 10
/
404.html
126 lines (114 loc) · 4.32 KB
/
404.html
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
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>404 Not Found - Son Nguyen Hoang</title>
<link rel="stylesheet" href="./packages/css/styles.css" />
<meta name="theme-color" content="#56c9e0" />
<meta name="description" content="Sorry, the page you're looking for doesn't exist." />
<meta name="keywords" content="404, not found, page, error" />
<meta name="author" content="Son Nguyen Hoang" />
<meta name="robots" content="noindex, nofollow" />
<link rel="icon" href="https://sonnguyenhoang.com/utils/favicon.ico" />
<link rel="apple-touch-icon" href="https://sonnguyenhoang.com/utils/favicon.ico" />
<link rel="canonical" href="https://sonnguyenhoang.com/404.html" />
<meta property="og:title" content="404 Not Found - Son Nguyen Hoang" />
<meta property="og:description" content="Sorry, the page you're looking for doesn't exist." />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://sonnguyenhoang.com/404.html" />
<meta property="og:image" content="https://sonnguyenhoang.com/utils/favicon.ico" />
<meta property="og:site_name" content="Son Nguyen Hoang" />
<meta property="og:locale" content="en_US" />
<meta name="twitter:card" content="summary" />
<meta name="twitter:title" content="404 Not Found - Son Nguyen Hoang" />
<meta name="twitter:description" content="Sorry, the page you're looking for doesn't exist." />
<meta name="twitter:image" content="https://sonnguyenhoang.com/utils/favicon.ico" />
<meta name="twitter:image:alt" content="Son Nguyen Hoang" />
<link rel="manifest" href="https://sonnguyenhoang.com/manifest.json" />
<style>
.not-found-container {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
flex-direction: column;
text-align: center;
}
.not-found-container h1 {
font-size: var(--big-font-size);
color: var(--first-color);
}
.not-found-container p {
font-size: var(--h2-font-size);
color: rgb(73, 81, 83);
margin-bottom: var(--mb-1-5);
}
.not-found-container a {
font-size: var(--normal-font-size);
color: var(--container-color);
background-color: var(--first-color);
padding: 1rem;
border-radius: 0.5rem;
text-decoration: none;
transition: background-color 0.3s;
}
.not-found-container a:hover {
background-color: var(--first-color-alt);
}
.scroll-animation {
opacity: 0;
transform: translateY(50px);
transition:
opacity 0.8s ease-out,
transform 0.8s ease-out;
}
.scroll-in-view {
opacity: 1;
transform: translateY(0);
}
</style>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-69TKSZGS7T"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', 'G-69TKSZGS7T');
</script>
</head>
<body>
<div class="not-found-container scroll-animation">
<h1>404 Not Found</h1>
<p>Oops, you caught me! The page you're looking for doesn't exist.</p>
<a href="https://sonnguyenhoang.com">Back to Portfolio</a>
</div>
</body>
<script>
document.addEventListener('DOMContentLoaded', function () {
const observerOptions = {
root: null,
rootMargin: '0px',
threshold: 0.1,
};
const elementsToAnimate = document.querySelectorAll('.scroll-animation');
const observer = new IntersectionObserver(function (entries, observer) {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('scroll-in-view');
observer.unobserve(entry.target);
}
});
}, observerOptions);
elementsToAnimate.forEach(element => {
observer.observe(element);
});
});
const darkTheme = 'dark-theme';
const selectedTheme = localStorage.getItem('selected-theme');
if (selectedTheme) {
document.body.classList[selectedTheme === 'dark' ? 'add' : 'remove'](darkTheme);
}
</script>
</html>