Smart Color en détail
La mécanique précise de l'algo Smart : trois composants de risque, leur combinaison, et l'interpolation HSB qui mappe le score sur une couleur lisible.
Le mode threshold (statique)
Le mode simple, en fallback. Mappe le pourcentage d'utilisation brut sur trois couleurs via deux sliders.
util >= critical(défaut 85%) -> rougeutil >= warning(défaut 60%) -> orange- sinon -> vert
Utilisé quand Smart Color est désactivé, ou quand l'API ne renvoie pas de date de reset pour un bucket donné.
Le mode Smart (la refonte v5.0)
Remplace l'ancienne logique « threshold + pacing combinés via max » qui produisait des faux négatifs aux pires moments (98% utilisé / 30 min restantes restait vert). Smart v2 est totalement continu - pas de cliffs, pas de points de décision discrets.
Trois composants de risque
Combinés via max() pour que le pire signal gagne, puis mappés sur une couleur via interpolation HSB lisse.
- Risque absolu -> à quel point êtes-vous proche de la limite elle-même ? Une rampe smoothstep entre une borne basse et une borne haute qui dépendent de votre profil. C'est ce qui fait que 98% utilisé déclenche toujours rouge, peu importe le temps restant.
- Risque de projection -> si vous gardez ce rythme, allez-vous dépasser ? Calcule
u / e(utilisation sur fraction écoulée) - une valeur > 1 veut dire que vous allez dépasser. Atténué par un facteur de confiance en début de fenêtre, pour qu'un burst à 5% utilisé / 1% écoulé ne panique pas la jauge. - Risque de pacing -> brûlez-vous plus vite que le rythme linéaire, au-delà de votre marge ? Regarde le delta absolu par rapport au rythme idéal à ce point de la fenêtre.
Pourquoi la santé de projection compte
Le composant absolu est atténué par un multiplicateur de santé de projection. Quand votre rythme actuel projette une finition confortable sous la limite, le signal « t'as cramé beaucoup » est calmé.
Exemple concret : 72% utilisé à 4h12 sur une fenêtre de 5 heures avec un pacing tranquille. Sans le multiplicateur, le composant absolu seul déclencherait orange. Avec, la santé de projection est ~0.53, l'absolu tombe à 0.25, et la jauge reste chill - parce qu'à ce rythme vous finirez autour de 86%, ce qui va.
À 98% utilisé / 30 min restantes, la santé de projection sature à 1, l'absolu déclenche à pleine puissance, et la jauge passe rouge. C'est exactement le cas que l'algo v1 ratait.
Interpolation HSB
Le score de risque continu est mappé sur une couleur via 4 ancres (chill à 0.0 et 0.30, warning à 0.55, critical à 0.85 et 1.0). L'interpolation entre ancres adjacentes passe par l'espace HSB, pas sRGB linéaire.
Pourquoi ? L'interpolation linéaire en sRGB entre vert et orange tombe sur un olive boueux (~#8E9D3A) au milieu, qui apparaît dans la jauge à chaque fois que le risque flotte autour de 0.5. La rotation de teinte en HSB prend le chemin naturel de la roue chromatique (vert -> jaune -> orange -> rouge), ce qui transforme le même point milieu en jaune-vert vif qui se lit proprement.
Les couleurs d'ancrage de votre thème restent intactes - HSB ne gouverne que ce qui se passe entre elles.
Cas limites
- Utilisation > 100% -> threshold et smart renvoient rouge tous les deux (cap dur). Le pacing atterrit aussi hot.
- Pas de date de reset -> smart fallback sur absolu-uniquement (pas de projection / pacing). L'UI pacing dégrade gracieusement (un glyphe sparkles à la place de l'icône de zone, pas de track).
- Thème custom sans couleur pacing-warning -> le décodeur substitue l'orange par défaut. Vous pouvez l'éditer plus tard via le picker de thème custom.
- Reduce Motion -> les transitions de couleur s'appliquent toujours (la couleur est de l'information, pas du mouvement). Les animations spring sur les changements de valeur sont réduites.