diff --git a/src/webserver.nim b/src/webserver.nim
index 69aa2cb..33a7135 100644
--- a/src/webserver.nim
+++ b/src/webserver.nim
@@ -143,11 +143,41 @@ proc t(lang: Lang, fr, en: string): string =
# Gabarit de page
# ---------------------------------------------------------------------------
-proc pageShell(lang: Lang, title, body: string): string =
- let nav = ""
+proc statCard(emoji, label, value, unit: string): string =
+ ## Carte de statistique (emoji + libellé + grande valeur).
+ "
" & emoji & "
" &
+ "
" & label & "
" &
+ "
" & value &
+ (if unit.len > 0: " " & unit & "" else: "") & "
"
+
+proc numField(emoji, label, name: string, value, minVal: int): string =
+ ## Champ numérique libellé du formulaire de réglages.
+ ""
+
+proc checkRow(name: string, checked: bool, emoji, label: string): string =
+ ## Ligne de case à cocher du formulaire de réglages.
+ ""
+
+proc pageShell(lang: Lang, title, body, active: string): string =
+ ## Gabarit commun : en-tête (logo + slogan), onglets de navigation, corps et
+ ## pied de page. Design : dégradés doux, cartes arrondies, mode sombre.
+ let nav = ""
+ let header = ""
+ let footer = ""
result = """
@@ -156,37 +186,111 @@ proc pageShell(lang: Lang, title, body: string): string =
NimPulse — """ & title & """
-""" & nav & body & ""
+
+""" & header & nav & body & footer & """
+
+