import unicodedata def normalize(text: str) -> str: return unicodedata.normalize("NFD", str(text).lower()).encode("ascii", "ignore").decode("ascii") def weather_categorize(code: int) -> str: if code == 0: return "Ciel dégagé" elif code in [1, 2]: return "Nuageux" elif code == 3: return "Couvert" elif code in [51,53,55]: return "Bruine" else: return "Pluie" def pm25_to_level(val: float) -> dict: if val <= 15: return {"label": "Sain 🟢", "color": "#4CAF50", "advice": "Qualité de l'air excellente. Activités normales."} elif val <= 25: return {"label": "Modéré 🟡", "color": "#FFB300", "advice": "Qualité acceptable. Prudence pour les personnes sensibles."} elif val <= 35: return {"label": "Mauvais 🟠", "color": "#FF9800", "advice": "Effets possibles sur la santé. Réduire les efforts intenses."} else: return {"label": "Dangereux 🔴", "color": "#F44336", "advice": "Port du masque recommandé, limiter les sorties."}