Files
hnsau/templates/404.html
Nathan Woodburn 0761d9d707
All checks were successful
Build Docker / Build Image (push) Successful in 2m10s
feat: Add inital dark/light mode switching
2025-08-07 00:26:22 +10:00

152 lines
6.9 KiB
HTML

<!DOCTYPE html>
<html data-bs-theme="auto" lang="en-au">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
<title>HNS AU</title>
<meta name="theme-color" content="#ffffff">
<link rel="canonical" href="https://hns.au/404">
<meta property="og:url" content="https://hns.au/404">
<meta name="twitter:description" content="Handshake Australia; The leading hub for Australians leveraging the decentralized web, powered by Handshake.">
<meta name="twitter:image" content="https://hns.au/assets/img/HNSAU-social.webp">
<meta name="twitter:title" content="HNS AU">
<meta property="og:type" content="website">
<meta property="og:title" content="HNS AU">
<meta name="twitter:card" content="summary_large_image">
<meta property="og:description" content="Handshake Australia; The leading hub for Australians leveraging the decentralized web, powered by Handshake.">
<meta name="description" content="Handshake Australia; The leading hub for Australians leveraging the decentralized web, powered by Handshake.">
<meta property="og:image" content="https://hns.au/assets/img/HNSAU-social.webp">
<script>
(function() {
// JavaScript snippet handling Dark/Light mode switching
const getStoredTheme = () => localStorage.getItem('theme');
const setStoredTheme = theme => localStorage.setItem('theme', theme);
const forcedTheme = document.documentElement.getAttribute('data-bss-forced-theme');
const getPreferredTheme = () => {
if (forcedTheme) return forcedTheme;
const storedTheme = getStoredTheme();
if (storedTheme) {
return storedTheme;
}
const pageTheme = document.documentElement.getAttribute('data-bs-theme');
if (pageTheme) {
return pageTheme;
}
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
}
const setTheme = theme => {
if (theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches) {
document.documentElement.setAttribute('data-bs-theme', 'dark');
} else {
document.documentElement.setAttribute('data-bs-theme', theme);
}
}
setTheme(getPreferredTheme());
const showActiveTheme = (theme, focus = false) => {
const themeSwitchers = [].slice.call(document.querySelectorAll('.theme-switcher'));
if (!themeSwitchers.length) return;
document.querySelectorAll('[data-bs-theme-value]').forEach(element => {
element.classList.remove('active');
element.setAttribute('aria-pressed', 'false');
});
for (const themeSwitcher of themeSwitchers) {
const btnToActivate = themeSwitcher.querySelector('[data-bs-theme-value="' + theme + '"]');
if (btnToActivate) {
btnToActivate.classList.add('active');
btnToActivate.setAttribute('aria-pressed', 'true');
}
}
}
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
const storedTheme = getStoredTheme();
if (storedTheme !== 'light' && storedTheme !== 'dark') {
setTheme(getPreferredTheme());
}
});
window.addEventListener('DOMContentLoaded', () => {
showActiveTheme(getPreferredTheme());
document.querySelectorAll('[data-bs-theme-value]')
.forEach(toggle => {
toggle.addEventListener('click', (e) => {
e.preventDefault();
const theme = toggle.getAttribute('data-bs-theme-value');
setStoredTheme(theme);
setTheme(theme);
showActiveTheme(theme);
})
})
});
})();
</script>
<link rel="icon" type="image/png" sizes="600x627" href="/assets/img/favicon.png">
<link rel="icon" type="image/png" sizes="600x627" href="/assets/img/favicon-light.png" media="(prefers-color-scheme: dark)">
<link rel="icon" type="image/png" sizes="600x627" href="/assets/img/favicon.png">
<link rel="icon" type="image/png" sizes="600x627" href="/assets/img/favicon-light.png" media="(prefers-color-scheme: dark)">
<link rel="icon" type="image/png" sizes="600x627" href="/assets/img/favicon.png">
<link rel="icon" type="image/png" sizes="600x627" href="/assets/img/favicon.png">
<link rel="icon" type="image/png" sizes="600x627" href="/assets/img/favicon.png">
<link rel="stylesheet" href="/assets/bootstrap/css/bootstrap.min.css">
<link rel="manifest" href="/manifest.json" crossorigin="use-credentials">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Montserrat:400,400i,700,700i,600,600i&amp;display=swap">
<link rel="stylesheet" href="/assets/css/bss-overrides.css">
<link rel="stylesheet" href="/assets/css/404.css">
<link rel="stylesheet" href="/assets/css/Hero-Features-icons.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/baguettebox.js/1.10.0/baguetteBox.min.css">
<link rel="stylesheet" href="/assets/css/theme.css">
<link rel="stylesheet" href="/assets/css/vanilla-zoom.min.css">
<script async src="https://umami.woodburn.au/script.js" data-website-id="15852010-8d3c-4553-92fc-2d6ac31098e8"></script>
{{handshake_scripts | safe}}
</head>
<body><!-- partial:index.partial -->
<p>HTTP: <span>404</span></p>
<div style="text-align: center;">
<div style="display: inline-block; text-align: left;">
<code><span>this_page</span>.<em>not_found</em> = true;</code>
<code><span>if</span> (<b>you_spelt_it_wrong</b>){<br><span>autocorrect</span>.<em>enable</em>();<br>}</code>
<code><span>else if</span> (<b>we_screwed_up</b>){<br><em>alert</em>(<i>"Strewth mate, you're lost! Fair dinkum, why are you here?"</i>);<br><span>window</span>.<em>location</em> = home;<br>}</code>
</div>
</div>
<!-- partial -->
<script type="text/javascript">
function callback(){
return function(){
alert("Strewth mate, you're lost! Fair dinkum, why are you here?");
window.location = '/';
}
}
var a = "world";
setTimeout(callback(), 5000);
</script>
<script src="/assets/bootstrap/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/baguettebox.js/1.10.0/baguetteBox.min.js"></script>
<script src="/assets/js/vanilla-zoom.js"></script>
<script src="/assets/js/theme.js"></script>
<script src="/assets/js/404.js"></script>
</body>
</html>