$_defaultFavicon, 'favicon_png' => '', 'branding' => ['logo' => '', 'logoDark' => '', 'adminLogo' => '', 'name' => '', 'showBranding' => true, 'logoDisplay' => 'both', 'logoSize' => 'medium'], 'theme' => ['adminTheme' => 'light', 'preset' => 'soft', 'density' => 'auto', 'font' => 'system', 'fontSize' => 'default', 'primaryColor' => '#3858e9', 'accentColor' => '', 'sidebarBg' => '', 'darkPrimaryColor' => '', 'darkAccentColor' => '', 'darkSidebarBg' => '', 'dangerColor' => '', 'warningColor' => '', 'successColor' => '', 'buttonGlow' => true, 'buttonRadius' => 6], 'modules' => ['ai' => true, 'news' => true, 'events' => true, 'messages' => true, 'iconManager' => true], 'dashboard' => ['itemsPerPage' => 50, 'iconManagerItemsPerPage' => 50, 'mediaItemsPerPage' => 25]];
if (defined('SETTINGS_PATH') && file_exists(SETTINGS_PATH)) {
$loadedSettings = json_decode(file_get_contents(SETTINGS_PATH), true);
if (is_array($loadedSettings)) {
foreach ($siteSettings as $key => $defaults) {
if (isset($loadedSettings[$key]) && is_array($loadedSettings[$key])) {
$siteSettings[$key] = array_replace($defaults, $loadedSettings[$key]);
}
}
// Preserve top-level keys (favicon, favicon_png)
if (!empty($loadedSettings['favicon'])) $siteSettings['favicon'] = $loadedSettings['favicon'];
if (!empty($loadedSettings['favicon_png'])) $siteSettings['favicon_png'] = $loadedSettings['favicon_png'];
}
}
$adminTheme = $siteSettings['theme']['adminTheme'] ?? 'light';
$dashboardModules = array_replace(['news' => true, 'events' => true, 'messages' => true, 'iconManager' => true, 'ai' => true], is_array($siteSettings['modules'] ?? null) ? $siteSettings['modules'] : []);
$aiFeaturesEnabled = !empty($dashboardModules['ai']);
$aiDashboardVisible = $aiFeaturesEnabled;
$_aiDashboardPublicSettings = $aiFeaturesEnabled && function_exists('raijuAiLoadSettings') ? raijuAiLoadSettings(true) : [];
$_aiDashboardCopilotAvailable = $aiFeaturesEnabled
&& !empty($_aiDashboardPublicSettings['enabled'])
&& !empty($_aiDashboardPublicSettings['hasApiKey'])
&& !empty($_aiDashboardPublicSettings['features']['backendAssistant'])
&& (!isset($_aiDashboardPublicSettings['assistantSurfaces']['dashboard']) || !empty($_aiDashboardPublicSettings['assistantSurfaces']['dashboard']));
$validDashboardTabs = ['home', 'content', 'settings'];
if (!empty($dashboardModules['news'])) $validDashboardTabs[] = 'news';
if (!empty($dashboardModules['events'])) $validDashboardTabs[] = 'events';
if (!empty($dashboardModules['messages'])) $validDashboardTabs[] = 'mails';
if ($isAdminUser) $validDashboardTabs[] = 'media';
if ($isAdminUser && !empty($dashboardModules['iconManager'])) $validDashboardTabs[] = 'icons';
if ($isAdminUser) $validDashboardTabs[] = 'backup';
if ($isAdminUser) $validDashboardTabs[] = 'system';
// SVG icon helper — keeps inline SVG paths in one place
function rjIcon(string $name, int $size = 16, string $strokeWidth = '1.5'): string {
static $paths = [
'hamburger' => '