import { useState, useEffect } from 'react' import Link from 'next/link' import '~/styles/layout.css' type AppearanceMode = undefined | 'light' | 'dark' export default function Layout({ Component, pageProps }) { const [appearance, setAppearance] = useState(undefined) useEffect(() => { if (appearance !== undefined) { document.body.parentElement.classList.remove('light') document.body.parentElement.classList.remove('dark') document.body.parentElement.classList.add(appearance) } }, [appearance]) function toggleDarkMode(ev) { ev.preventDefault() const current = appearance ?? getDefaultTheme() switch (current) { case 'light': setAppearance('dark') return case 'dark': setAppearance('light') return } } return ( <>

ashen.earth

code ramblings and technical oddities
) } function getDefaultTheme(): 'light' | 'dark' { const { matches: lightTheme } = window.matchMedia('(prefers-color-scheme: light)') return lightTheme ? 'light' : 'dark' }