Faisceaux depuis la position user — quatre options à comparer

Fond de carte, palette et grammaire repris du code réel : rampe C (scoreToHex) gris → ambre → vert, hors-match teal #006874. Les itinéraires sont calculés par un vrai Dijkstra sur le réseau de rues de la maquette — c’est exactement ce qu’un moteur de routage ferait, et que la carte raster actuelle ne sait pas faire. Le faisceau est pulsé, jamais continu : le nombre de pulsations dit la puissance du match (1/2/3, comme cranPour et le sillage du poisson — donc comptable même figé), leur écart dit la distance. Chaque pulsation qui touche produit son choc — autant de chocs que de pulsations : un match fort frappe trois fois, un faible une seule. Le compte se lit donc deux fois, en vol puis à l’impact. Le trajet reste discret ; l’arrivée est le moment vif.

match fort match moyen match faible hors match
Ton idée

A — Un faisceau routé à la fois, sur les matchs visibles

À intervalle régulier, un seul faisceau part vers un match visible, en suivant les rues. Puis le suivant.

Ce que ça donne : un seul objet en mouvement à tout instant — ça tient dans le budget d’attention (animationsAutorisees plafonne à deux). Le tracé suit vraiment les rues, donc la carte « connaît le chemin ». Coût : requêtes de routage par tour complet, cachables tant que le user ne bouge pas. Le routage ne s’arme que si le user est posé — entrée après 8 s sous 0,5 m/s et moins de 15 m de dérive ; sortie dès 1,2 m/s ou 30 m. Seuils asymétriques = hystérésis, comme prochainEtatMigration. En marche, repli sur le rayon droit : coche user en marche en haut pour voir la bascule.
La même chose, sans routage

B — Rayon droit, un seul à la fois

Cadence identique à A. Seule différence : le rayon tire droit au lieu de suivre les rues. À comparer avec A.

Ce que ça donne : la carte respire, le rayon reste un signal. Coût réseau : 0 — aucun routage. Le rayon dit « par là, à telle distance » ; il ne prétend pas dire le chemin.
Recommandé — intention

C — Sélection → un faisceau routé (clique un pin)

Rien en fond. Le chemin réel n’apparaît que quand le user désigne un objet.

Ce que ça donne : l’effet « la carte s’allume et me montre le chemin », exactement là où il est mérité. Coût réseau : 1 requête par intention user, cachable, au lieu de N par cycle. Clique le pin teal : hors match → couleur neutre.
Cas limites

D — Hors écran, et repli statique

Le match est hors du cadre, ou le user a coupé les animations.

Ce que ça donne : hors écran, un itinéraire tronqué au bord ne montre rien — seul le cap + la distance informent. C’est le seul endroit où le faisceau apporte une information que rien ne donne aujourd’hui (aucun indicateur hors-écran dans lib/). Coche reduced-motion en haut : le repli statique doit rester lisible, aucune info ne dépend du mouvement.