108 lines
2.5 KiB
HTML
108 lines
2.5 KiB
HTML
<!doctype html>
|
|
<html lang="en" data-theme="dark" data-palette="classic" data-fonts="loading">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<link
|
|
rel="preload"
|
|
href="/fonts/inter/Inter-Regular.woff2"
|
|
as="font"
|
|
type="font/woff2"
|
|
crossorigin
|
|
/>
|
|
<link
|
|
rel="preload"
|
|
href="/fonts/inter/Inter-Medium.woff2"
|
|
as="font"
|
|
type="font/woff2"
|
|
crossorigin
|
|
/>
|
|
<link
|
|
rel="preload"
|
|
href="/fonts/inter/Inter-SemiBold.woff2"
|
|
as="font"
|
|
type="font/woff2"
|
|
crossorigin
|
|
/>
|
|
<link
|
|
rel="preload"
|
|
href="/fonts/inter/Inter-Bold.woff2"
|
|
as="font"
|
|
type="font/woff2"
|
|
crossorigin
|
|
/>
|
|
<link
|
|
rel="preload"
|
|
href="/fonts/inter/Inter-ExtraBold.woff2"
|
|
as="font"
|
|
type="font/woff2"
|
|
crossorigin
|
|
/>
|
|
<link
|
|
rel="preload"
|
|
href="/fonts/jetbrains-mono/JetBrainsMono-Regular.woff2"
|
|
as="font"
|
|
type="font/woff2"
|
|
crossorigin
|
|
/>
|
|
<link
|
|
rel="preload"
|
|
href="/fonts/jetbrains-mono/JetBrainsMono-Medium.woff2"
|
|
as="font"
|
|
type="font/woff2"
|
|
crossorigin
|
|
/>
|
|
<link
|
|
rel="preload"
|
|
href="/fonts/jetbrains-mono/JetBrainsMono-SemiBold.woff2"
|
|
as="font"
|
|
type="font/woff2"
|
|
crossorigin
|
|
/>
|
|
<script>
|
|
(function () {
|
|
const doc = document.documentElement;
|
|
if (!doc.dataset.fonts) {
|
|
doc.dataset.fonts = 'loading';
|
|
}
|
|
try {
|
|
const savedTheme = localStorage.getItem('theme');
|
|
const savedPalette = localStorage.getItem('palette');
|
|
const prefersDark =
|
|
typeof window.matchMedia === 'function' &&
|
|
window.matchMedia('(prefers-color-scheme: dark)').matches;
|
|
doc.dataset.theme = savedTheme || (prefersDark ? 'dark' : 'light');
|
|
if (savedPalette) {
|
|
doc.dataset.palette = savedPalette;
|
|
}
|
|
} catch (error) {
|
|
// Ignore errors if storage or matchMedia is unavailable
|
|
}
|
|
const markFontsReady = () => {
|
|
if (doc.dataset.fonts !== 'ready') {
|
|
doc.dataset.fonts = 'ready';
|
|
}
|
|
};
|
|
const fallback = setTimeout(markFontsReady, 3000);
|
|
const resolveFonts = () => {
|
|
clearTimeout(fallback);
|
|
markFontsReady();
|
|
};
|
|
if (
|
|
document.fonts &&
|
|
document.fonts.ready &&
|
|
typeof document.fonts.ready.then === 'function'
|
|
) {
|
|
document.fonts.ready.then(resolveFonts, resolveFonts);
|
|
} else {
|
|
resolveFonts();
|
|
}
|
|
})();
|
|
</script>
|
|
%sveltekit.head%
|
|
</head>
|
|
<body data-sveltekit-preload-data="hover">
|
|
<div style="display: contents">%sveltekit.body%</div>
|
|
</body>
|
|
</html>
|