Thème (défaut 4) : le thème ObsiGate n'est PAS une préférence serveur — il vit dans localStorage, lu par la SPA au démarrage (frontend/js/ui.js initTheme : mode ; frontend/js/sync.js init() -> themes.js initThemes : clé + mode). Étape 1 ci-dessous (script synchrone en tête, avant les feuilles) : pose data-theme = mode persisté (obsigate-theme-mode, repli obsigate-theme historique quand il valait déjà un mode, sinon 'dark', le défaut SPA) pour que la première peinture soit déjà dans le bon mode clair/sombre. Étape 2 en fin de page (module différé) : initThemes() de themes.js applique la palette complète — 16 thèmes intégrés, modes high-contrast/sepia générés, thèmes personnalisés — via variables inline sur :root, exactement comme la SPA. data-theme="dark" sur n'est plus que le repli sans JS. Aucun endpoint serveur, aucune police externe ajoutée (la CSP stricte de /recherche et le repli typographique système sont inchangés).
Domaine

Rechercher partout

Notes ObsiGate, pages Flowdeck, tâches TikTak, cartes Kanbante — dans l'environnement courant (dev reste dev). « / » ou Ctrl+K pour rechercher, ↑/↓ puis Entrée pour ouvrir un résultat. « Tout voir » bascule vers l'onglet de l'application, sans quitter la page.

ObsiGate — notes

Tout voir

Tapez une recherche ci-dessus.

Flowdeck — pages

Tout voir

Tapez une recherche ci-dessus.

TikTak — tâches

Tout voir

Tapez une recherche ci-dessus.

Kanbante — cartes

Tout voir

Tapez une recherche ci-dessus.

Console Spark — discussions

Tout voir

Tapez une recherche ci-dessus.