Thomas G. Lopes
fix color scheme FOUC & listener
288702f
raw
history blame
1.5 kB
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%sveltekit.assets%/favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
%sveltekit.head%
</head>
<body data-sveltekit-preload-data="hover" class="dark:bg-gray-900">
<script>
(function () {
// Get theme from URL search params
const urlParams = new URLSearchParams(window.location.search);
const theme = urlParams.get("__theme");
// Check system preferences
let systemPrefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
// Update theme based on params or system preference
function updateTheme() {
if (theme === "dark" || (theme === "system" && systemPrefersDark)) {
document.body.classList.add("dark");
} else if (theme === "light" || (theme === "system" && !systemPrefersDark)) {
document.body.classList.remove("dark");
} else if (theme === null || theme === undefined) {
// Default behavior if no theme specified
systemPrefersDark ? document.body.classList.add("dark") : document.body.classList.remove("dark");
}
}
// Initial theme update
updateTheme();
// Listen for system preference changes
window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", event => {
systemPrefersDark = event.matches;
updateTheme();
});
})();
</script>
<div style="display: contents">%sveltekit.body%</div>
</body>
</html>