diff --git a/app/templates/base.html b/app/templates/base.html index 80591ee..01b5e51 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -326,14 +326,6 @@ -
- {% if user %} - 🚪 - {% else %} - 🔑 - {% endif %} - -
@@ -954,7 +946,37 @@ const html = document.documentElement; const current = html.getAttribute('data-theme'); html.setAttribute('data-theme', current === 'dark' ? 'light' : 'dark'); - localStorage.setItem('theme', current === 'dark' ? 'light' : 'dark'); + localStorage.setItem('fd_theme', current === 'dark' ? 'light' : 'dark'); + if (current === 'dark') { + // Switching to light + html.style.setProperty('--bg-primary', '#FFFFFF'); + html.style.setProperty('--bg-secondary', '#F7F6F3'); + html.style.setProperty('--bg-tertiary', '#EDECE9'); + html.style.setProperty('--text', '#37352F'); + html.style.setProperty('--text-secondary', '#6B6966'); + html.style.setProperty('--text-dim', '#9B9A97'); + html.style.setProperty('--border', '#E0DFDC'); + html.style.setProperty('--border-strong', '#CCCBC8'); + } else { + // Switching to dark — remove overrides, use CSS defaults + ['bg-primary','bg-secondary','bg-tertiary','text','text-secondary','text-dim','border','border-strong'].forEach(function(v) { + html.style.removeProperty('--'+v); + }); + } + }, + initTheme() { + var saved = localStorage.getItem('fd_theme') || 'dark'; + if (saved === 'light') { + document.documentElement.setAttribute('data-theme', 'light'); + document.documentElement.style.setProperty('--bg-primary', '#FFFFFF'); + document.documentElement.style.setProperty('--bg-secondary', '#F7F6F3'); + document.documentElement.style.setProperty('--bg-tertiary', '#EDECE9'); + document.documentElement.style.setProperty('--text', '#37352F'); + document.documentElement.style.setProperty('--text-secondary', '#6B6966'); + document.documentElement.style.setProperty('--text-dim', '#9B9A97'); + document.documentElement.style.setProperty('--border', '#E0DFDC'); + document.documentElement.style.setProperty('--border-strong', '#CCCBC8'); + } } }; } @@ -978,6 +1000,23 @@ if (active) active.scrollIntoView({ block: 'nearest', behavior: 'smooth' }); }, 300); }); + + // Apply saved theme on page load + (function() { + var saved = localStorage.getItem('fd_theme') || 'dark'; + if (saved === 'light') { + var h = document.documentElement; + h.setAttribute('data-theme', 'light'); + h.style.setProperty('--bg-primary', '#FFFFFF'); + h.style.setProperty('--bg-secondary', '#F7F6F3'); + h.style.setProperty('--bg-tertiary', '#EDECE9'); + h.style.setProperty('--text', '#37352F'); + h.style.setProperty('--text-secondary', '#6B6966'); + h.style.setProperty('--text-dim', '#9B9A97'); + h.style.setProperty('--border', '#E0DFDC'); + h.style.setProperty('--border-strong', '#CCCBC8'); + } + })(); {% block scripts %}{% endblock %} diff --git a/app/templates/settings.html b/app/templates/settings.html index 65b3791..24918f4 100644 --- a/app/templates/settings.html +++ b/app/templates/settings.html @@ -193,6 +193,38 @@ + + +
+

Preferences

+
+
+
Theme
+
Choose between light and dark appearance
+
+
+ +
+
+
+
+
Default view
+
Workspace view mode when opening a workspace
+
+
+ +
+
+
@@ -511,6 +543,8 @@ document.addEventListener('alpine:init', function() { userIsAdmin: {{ 'true' if user.get('is_admin') else 'false' }}, // Gitea giteaLinked: false, + // Theme + theme: localStorage.getItem('fd_theme') || 'dark', // Account form accountForm: {login:'{{ user.login or "" }}', full_name:'{{ user.full_name or "" }}', email:'{{ user.email or "" }}', password:''}, accountSaving: false, @@ -723,6 +757,31 @@ document.addEventListener('alpine:init', function() { if (r.ok) { this.avatarUrl = ''; } }, + applyTheme() { + localStorage.setItem('fd_theme', this.theme); + document.documentElement.setAttribute('data-theme', this.theme); + if (this.theme === 'light') { + document.documentElement.style.setProperty('--bg-primary', '#FFFFFF'); + document.documentElement.style.setProperty('--bg-secondary', '#F7F6F3'); + document.documentElement.style.setProperty('--bg-tertiary', '#EDECE9'); + document.documentElement.style.setProperty('--text', '#37352F'); + document.documentElement.style.setProperty('--text-secondary', '#6B6966'); + document.documentElement.style.setProperty('--text-dim', '#9B9A97'); + document.documentElement.style.setProperty('--border', '#E0DFDC'); + document.documentElement.style.setProperty('--border-strong', '#CCCBC8'); + } else { + document.documentElement.style.removeProperty('--bg-primary'); + document.documentElement.style.removeProperty('--bg-secondary'); + document.documentElement.style.removeProperty('--bg-tertiary'); + document.documentElement.style.removeProperty('--text'); + document.documentElement.style.removeProperty('--text-secondary'); + document.documentElement.style.removeProperty('--text-dim'); + document.documentElement.style.removeProperty('--border'); + document.documentElement.style.removeProperty('--border-strong'); + document.documentElement.setAttribute('data-theme', 'dark'); + } + }, + saveDefaultView() { localStorage.setItem('fd_default_view', this.defaultView); }