Logo FinSight visible aussi en mobile/tablet
La sidebar gauche qui porte le logo FinSight utilise une classe Tailwind `md:flex` — elle est cachée sous 768 pixels de largeur. Conséquence : sur mobile et tablet en vue portrait, le logo disparaissait de la page résultat post-analyse.
Un nouveau composant MobileTopBar s'affiche désormais en haut de l'écran uniquement sous 768 px, et uniquement sur les pages sans Navbar propre (pages applicatives type /resultats, /dashboard). Skip automatique sur /analyse, /comparatif, /about qui ont déjà leur propre header avec logo.
Téléchargements PDF/PPTX/Excel robustes
Une erreur d'hydration React (#418) pouvait désactiver les event handlers de la sidebar, empêchant les clics de télécharger les livrables. Symptôme : clic sur « Rapport PDF » sans aucune requête réseau.
Le fix ajoute une rangée de boutons de téléchargement inline directement dans la page résultat, en `<a href download>` HTML pur. Plus de dépendance à React pour le clic basique de téléchargement — ça marche même en cas d'erreur d'hydration. Visible à toutes les tailles d'écran.
- 📄 Rapport PDF
- 📊 Pitchbook PPTX
- 📈 Modèle Excel
Typographie française renforcée
Corrections d'accord féminin : 11 occurrences de « insuffisanté » (incorrect) remplacées par « insuffisante » dans indice_pptx_writer.py, pdf_writer.py, pptx_writer.py, pdf_report.py. Bug récurrent depuis un copy-paste d'une string masculine sans ajustement.
Bug HTML escape « S&P; 500 » (point-virgule parasite issu d'une entité HTML incomplète interprétée par ReportLab) corrigé en wrappant le texte LLM via la fonction `_safe()` qui centralise la sanitization HTML, l'unescape des entités, et la régex anti-pseudo-entité.
Annotations matplotlib en virgule décimale française (+25,7% au lieu de +25.7%) sur 7 charts dans cmp_secteur_pdf_writer et pdf_writer.
Portrait d'entreprise — fix authentification API
L'endpoint POST /portrait/societe exigeait un header Authorization Bearer (JWT Supabase) que le composant frontend n'envoyait pas. Symptôme : « API 401 » au clic sur « Générer le portrait ».
Fix : injection de getAuthHeader() depuis @/lib/api dans le fetch initial ET dans le polling /jobs/{id}. Le portrait se génère désormais sans erreur pour tout utilisateur authentifié.