Theming & Dark Mode
This page explains how light and dark themes are supported using Tailwind’s class-based configuration. It covers theme switching logic, accessible implementation, and how consistent visual identity is preserved across modes.
Class-Based Strategy
The Tailwind configuration uses a darkMode value of 'class'. This allows manual toggling of themes using JavaScript without relying on system preferences.
darkMode: 'class',
theme: {
extend: {
colors: {
surfaceLight: '#F8F9FA',
surfaceDark: '#18181B',
textLight: '#1F2937',
textDark: '#F4F4F5'
}
}
}
Pages use utilities such as bg-surfaceLight dark:bg-surfaceDark to automatically switch styles based on the presence of the dark class on the root <html> element.
JavaScript Theme Toggle
A single JavaScript function toggles the theme and stores the user’s choice in localStorage. This preference is applied on the next visit using document.documentElement.classList.
function toggleTheme() {
const html = document.documentElement;
html.classList.toggle('dark');
const isDark = html.classList.contains('dark');
localStorage.setItem('theme', isDark ? 'dark' : 'light');
}
This strategy gives users full control while avoiding unnecessary re-renders or layout shifts.
Syntax Highlighting
Code elements across all pages are themed using custom utility classes. These apply consistent color to each semantic role in the block: keys, values, functions, and comments.
.text-code-key - Reserved keywords and properties
.text-code-value - String literals and values
.text-code-function - Function names and event handlers
.text-code-comment - Comments or inline hints
System Preference Detection
When a user has not selected a theme, the script checks for window.matchMedia and applies a default that matches the system’s prefers-color-scheme.
const prefersDark = window.matchMedia(
'(prefers-color-scheme: dark)'
).matches;
if (!localStorage.getItem('theme')) {
if (prefersDark) {
document.documentElement.classList.add('dark');
}
}
This helps first-time visitors experience the site in the mode that best aligns with their device and habits.