From aca39ed5c8f2d470cb5c8616df58c2257142636b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 19 Feb 2026 15:55:23 +0000 Subject: [PATCH 1/2] Initial plan From db8fc6c536e2288e5fe16dc0547b99058eb2f090 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 19 Feb 2026 16:01:14 +0000 Subject: [PATCH 2/2] Add dark/light theme toggle button to nav bar Co-authored-by: brunoborges <129743+brunoborges@users.noreply.github.com> --- site/app.js | 24 +++++++++++++ site/styles.css | 65 +++++++++++++++++++++++++++++++++++- templates/index.html | 5 +++ templates/slug-template.html | 4 +++ 4 files changed, 97 insertions(+), 1 deletion(-) diff --git a/site/app.js b/site/app.js index db6744f..fbce08c 100644 --- a/site/app.js +++ b/site/app.js @@ -547,6 +547,29 @@ window.updateViewToggleState = updateButtonState; }; + /* ========================================================== + 7. Theme Toggle + ========================================================== */ + const initThemeToggle = () => { + const btn = document.getElementById('themeToggle'); + if (!btn) return; + + const updateButton = (theme) => { + btn.textContent = theme === 'dark' ? '☀️' : '🌙'; + btn.setAttribute('aria-label', theme === 'dark' ? 'Switch to light theme' : 'Switch to dark theme'); + }; + + // The anti-FOUC inline script already applied the theme; just sync the button state + updateButton(document.documentElement.getAttribute('data-theme') || 'dark'); + + btn.addEventListener('click', () => { + const next = document.documentElement.getAttribute('data-theme') === 'dark' ? 'light' : 'dark'; + document.documentElement.setAttribute('data-theme', next); + localStorage.setItem('theme', next); + updateButton(next); + }); + }; + /* ========================================================== Utilities ========================================================== */ @@ -569,5 +592,6 @@ initCopyButtons(); initSyntaxHighlighting(); initNewsletter(); + initThemeToggle(); }); })(); diff --git a/site/styles.css b/site/styles.css index 130e38b..1aa2085 100644 --- a/site/styles.css +++ b/site/styles.css @@ -96,6 +96,53 @@ code, pre { font-family: 'JetBrains Mono', monospace; } } } +/* ---------- Manual Theme Override ---------- */ +:root[data-theme="light"] { + --bg: #f8f8fa; + --surface: #ffffff; + --surface-2: #f0f0f4; + --border: #d8d8e0; + --border-light: #e4e4ea; + --text: #1a1a2e; + --text-muted: #6b6b80; + --accent: #f97316; + --accent-dim: #ea580c; + --green: #059669; + --blue: #2563eb; + --pink: #db2777; + --orange: #ea580c; + --yellow: #ca8a04; + --cyan: #0891b2; + --red-muted: #dc2626; + --old-bg: #fef2f2; + --modern-bg: #eff6ff; + --nav-bg: rgba(248, 248, 250, .85); + color-scheme: light; +} + +:root[data-theme="dark"] { + --bg: #0b0b0f; + --surface: #14141a; + --surface-2: #1a1a22; + --border: #25252f; + --border-light: #2f2f3a; + --text: #e4e4e7; + --text-muted: #6b6b76; + --accent: #fb923c; + --accent-dim: #f97316; + --green: #34d399; + --blue: #60a5fa; + --pink: #f472b6; + --orange: #fb923c; + --yellow: #fbbf24; + --cyan: #22d3ee; + --red-muted: #ef4444; + --old-bg: #1a1412; + --modern-bg: #1a2838; + --nav-bg: rgba(11, 11, 15, .8); + color-scheme: dark; +} + /* ---------- Base Body ---------- */ body { background: var(--bg); @@ -200,12 +247,28 @@ nav { text-decoration: none; } -.github-link:hover { +.github-link:hover, +.theme-toggle:hover { border-color: var(--accent); color: var(--accent); background: var(--surface-2); } +.theme-toggle { + display: flex; + align-items: center; + justify-content: center; + padding: 8px; + border-radius: var(--radius-sm); + border: 1px solid var(--border); + background: var(--surface); + color: var(--text-muted); + font-size: 1rem; + line-height: 1; + transition: all 0.2s; + cursor: pointer; +} + /* ---------- Hero ---------- */ .hero { text-align: center; diff --git a/templates/index.html b/templates/index.html index d5e1dbe..47f648e 100644 --- a/templates/index.html +++ b/templates/index.html @@ -41,6 +41,10 @@ + + @@ -96,6 +99,7 @@ + ← All patterns