Files
ServerKit/frontend/index.html
T
Juan Denis 9b2f20b07e Add email server backend, model and UI
Introduce a full email management feature: adds EmailService (Postfix/Dovecot/SpamAssassin/OpenDKIM management, account creation, forwarding, webmail, queue/logs, service control), new email API blueprint with admin-protected endpoints, and EmailAccount DB model. Register the email blueprint in app init. Frontend: add Email page, route and sidebar link, preload accent color + theme to prevent FOUC, new email styles and a dashboard layout hook. Also update ROADMAP.md to include Phase 21 SSO/OAuth and bump roadmap last-updated date.
2026-03-04 00:31:18 -05:00

38 lines
1.7 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" />
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="ServerKit - Server Management Dashboard" />
<title>ServerKit</title>
<script>
// Prevent flash of unstyled content (FOUC) by setting theme + accent before React loads
(function() {
var d = document.documentElement;
d.setAttribute('data-theme', localStorage.getItem('theme') || 'dark');
var accent = localStorage.getItem('accent_color');
if (accent) {
var m = accent.match(/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i);
if (m) {
var r = parseInt(m[1],16), g = parseInt(m[2],16), b = parseInt(m[3],16);
var dk = function(v){ return Math.max(0, Math.round(v*0.88)); };
d.style.setProperty('--accent-primary', accent);
d.style.setProperty('--accent-hover', '#'+dk(r).toString(16).padStart(2,'0')+dk(g).toString(16).padStart(2,'0')+dk(b).toString(16).padStart(2,'0'));
d.style.setProperty('--accent-glow', 'rgba('+r+','+g+','+b+',0.15)');
d.style.setProperty('--accent-shadow', 'rgba('+r+','+g+','+b+',0.3)');
}
}
})();
</script>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.jsx"></script>
</body>
</html>