/** * Script inline exécuté avant l’hydratation : même logique que `applyDocumentTheme`. */ import { normalizeThemeId } from './apply-document-theme' export function getThemeScript(serverTheme: string = 'light', serverAccentColor: string | null = null) { const fallback = normalizeThemeId(serverTheme) const defaultAccent = serverAccentColor || '#A47148' return ` (function() { try { var fallback = ${JSON.stringify(fallback)}; var stored = localStorage.getItem('theme-preference'); var raw = stored || fallback; if (raw === 'slate') raw = 'light'; var allowed = { light:1, dark:1, auto:1, sepia:1, midnight:1, rose:1, green:1, lavender:1, sand:1, ocean:1, sunset:1, blue:1 }; var theme = allowed[raw] ? raw : 'light'; var root = document.documentElement; root.classList.remove('dark'); root.removeAttribute('data-theme'); if (theme === 'auto') { if (window.matchMedia('(prefers-color-scheme: dark)').matches) root.classList.add('dark'); } else if (theme === 'dark') { root.classList.add('dark'); } else if (theme === 'light') { /* :root papier */ } else { root.setAttribute('data-theme', theme); if (theme === 'midnight') root.classList.add('dark'); } var accentStored = localStorage.getItem('accent-color'); var effectiveAccent = accentStored || ${JSON.stringify(defaultAccent)}; root.style.setProperty('--color-brand-accent', effectiveAccent); } catch (e) { console.error('Theme script error', e); } })(); `.trim() }