3BHK HOUSE Guduvanchery, Chennai
========================================================================= */ (function () { "use strict"; var STORAGE_KEY = "lab-theme"; var root = document.documentElement; /* ---------- 1. Apply initial theme (guards against inline snippet missing) */ var stored = null; try { stored = localStorage.getItem(STORAGE_KEY); } catch (e) {} var prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches; var initialTheme = stored || (prefersDark ? "dark" : "light"); function setAttr(theme) { if (theme === "dark") root.setAttribute("data-theme", "dark"); else root.removeAttribute("data-theme"); } setAttr(initialTheme); /* ---------- 2. Sync any toggle buttons on the page */ function syncButtons(theme) { var isDark = theme === "dark"; var nodes = document.querySelectorAll("[data-theme-toggle]"); nodes.forEach(function (btn) { btn.setAttribute("aria-pressed", String(isDark)); btn.setAttribute( "aria-label", isDark ? "Switch to light mode" : "Switch to dark mode" ); btn.classList.toggle("is-dark", isDark); // Optional icon swap if the toggle contains children with these markers var iconMoon = btn.querySelector("[data-icon-moon]"); var iconSun = btn.querySelector("[data-icon-sun]"); if (iconMoon && iconSun) { iconMoon.style.display = isDark ? "none" : ""; iconSun.style.display = isDark ? "" : "none"; } }); } /* ---------- 3. Toggle handler */ function toggleTheme() { var isDark = root.getAttribute("data-theme") === "dark"; var next = isDark ? "light" : "dark"; setAttr(next); try { localStorage.setItem(STORAGE_KEY, next); } catch (e) {} syncButtons(next); } /* ---------- 4. Init on DOM ready */ function init() { syncButtons(initialTheme); document.querySelectorAll("[data-theme-toggle]").forEach(function (btn) { btn.addEventListener("click", toggleTheme); }); // Follow OS preference changes IF user hasn't manually chosen var mq = window.matchMedia("(prefers-color-scheme: dark)"); var onChange = function (e) { var storedNow = null; try { storedNow = localStorage.getItem(STORAGE_KEY); } catch (err) {} if (storedNow) return; // manual override wins var next = e.matches ? "dark" : "light"; setAttr(next); syncButtons(next); }; if (mq.addEventListener) mq.addEventListener("change", onChange); else if (mq.addListener) mq.addListener(onChange); } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", init); } else { init(); } /* ---------- 5.