# Notes de rendu et de validation

Ce document décrit les décisions de rendu apprises pendant la mise au point de
la série 0.40.x. Il sert de garde-fou : une modification visuelle ne doit pas
réintroduire les artefacts déjà isolés.

## Focus, sélection et survol

- le survol natif reste transitoire et ne doit jamais servir à mémoriser une
  sélection ; aucun groupe de choix ne conserve `LockHighlight` après son
  rafraîchissement ;
- une sélection persistante utilise un trait inférieur thémé et une variation
  d’opacité. Ce marqueur suit la valeur réellement enregistrée ou prévisualisée ;
- le contour rectangulaire est réservé au clavier. À l’ouverture d’une surface,
  le contrôle logique est prêt mais le contour reste masqué ; Tab, Maj+Tab,
  Entrée, Espace ou les flèches activent sa visibilité ;
- un clic ou un glissement repasse immédiatement en modalité pointeur, masque le
  contour et conserve le contrôle cliqué comme point de reprise clavier ;
- un changement de thème recolore tous les contours existants sans les rendre
  visibles à la souris. L’assistant utilise la palette prévisualisée, pas la
  palette encore enregistrée dans la base.

## Hiérarchie native et assistant

- le thème WoW sépare `main`, `dialog`, `surface` et `inset` ; seuls les rôles
  `main` portent le bandeau Blizzard et la bordure décorative complète ;
- une surface de contenu ne reçoit pas de bordure. Une bordure interne est
  réservée aux aperçus et reste neutre dans le thème WoW ;
- la couleur d’accent signale un choix ou un état, jamais toutes les limites de
  la fenêtre ;
- l’assistant présente quatre onglets horizontaux dans 880 × 720, sans écran
  d’accueil passif, avec un contenu
  pleine largeur et une barre Précédent/progression/Suivant immuable ;
- l’assistant est modal : un voile plein écran bloque les interactions, la
  fenêtre principale est masquée puis restaurée, et un remplissage opaque
  empêche tout contenu sous-jacent de transparaître ;
- chaque page commence sous le rail d’étapes. L’aperçu Apparence réserve une
  colonne explicative au vrai tracker et le montre à une taille lisible ;
- le sous-titre décrit la décision de l’écran courant et les étapes déjà
  parcourues sont identifiables par une coche, sans dépendre de la couleur. Un
  saut direct ne doit jamais cocher les écrans intermédiaires non visités ;
- l’étape Tracker expose disposition, taille et style de flèche. L’opacité est
  un réglage avancé et ne doit pas revenir dans le parcours court ;
- les vingt styles de flèche utilisent quatre colonnes. Leur section réserve
  toute la hauteur nécessaire et l’aperçu du tracker commence sous la galerie ;
- l’étape Découverte expose un aperçu compact distinct du tracker : pastille de
  proximité, visibilité mini-carte et types de repères. Il doit tenir sous les
  deux groupes de choix sans recouvrir la barre d’action ;
- le thème ElvUI masque les décorations natives avant d’appliquer ses propres
  bordures. Aucun bandeau Blizzard ne doit rester derrière un dialogue skiné.

## Circuit conseillé

- l’action de recommandation calcule seulement un aperçu ; elle ne démarre
  jamais le guide sans un second clic explicite ;
- la sélection visible doit être remplacée par les seuls arrêts réellement
  retenus dans le budget, afin que les coches restent la source de vérité de
  l’aperçu éditable ;
- modifier une coche invalide l’aperçu conseillé et le prochain calcul redevient
  un circuit manuel ;
- la ligne permanente reste limitée à « arrêts • durée • prêt ». L’ordre complet
  est réservé à l’infobulle pour éviter de comprimer les commandes ;
- dans la disposition horizontale, le bouton de proposition mesure 164 px et le
  sélecteur de durée reste ancré à sa gauche. Contrôler cet ordre après toute
  modification de `ApplyFocusLayout` ;
- le thème WoW garde `UIPanelButtonTemplate` et `WowStyle1DropdownTemplate` ;
  ElvUI applique ses skins à ces mêmes contrôles sans modifier leurs ancres.

## Carte de route du circuit

- chaque checkpoint possède un trajet depuis la position ou le checkpoint
  précédent, une durée, des étapes de transport et une action d’obtention ;
- le graphe peut calculer chaque segment depuis un point de départ arbitraire.
  Si ce calcul échoue, la fiche annonce un recalcul ultérieur et ne fabrique
  jamais un portail ou une destination ;
- le premier itinéraire est ouvert à l’affichage. Les autres restent repliés,
  avec une commande globale pour tout détailler ou tout réduire ;
- la carte de route demeure une surface de préparation : cliquer une carte de
  checkpoint sert à la permutation, tandis que son bouton Itinéraire ne change
  jamais l’ordre ;
- les hauteurs sont cumulées à partir du contenu réel et la fenêtre est mise à
  l’échelle sur les petits écrans. Le scroll clavier suit la carte ciblée ;
- les thèmes WoW et ElvUI s’appliquent aussi aux étapes internes et à leurs
  actions, sans contour de focus permanent à la souris.

## Accès, scénario et obtention finale

- un repère extérieur qui mène à un scénario ne doit jamais être décrit comme
  l’objet d’obtention lui-même ;
- l’étape de destination nomme l’entrée et l’interlocuteur connu, tandis que
  l’étape d’action explique séparément le scénario et la récompense finale ;
- une récompense aléatoire doit être annoncée comme telle. L’arrivée au repère
  ne vaut ni fin du scénario, ni acquisition vérifiée ;
- une tentative aléatoire non obtenue demande deux validations distinctes : la
  première explique la conséquence, la seconde clôt la tentative sans jamais
  marquer la collection comme acquise ;
- les passages successifs restent ordonnés. La présence sur une future carte de
  retour ne doit pas masquer une entrée ou une action intermédiaire ;
- si l’état d’un objet ou d’une quête n’est pas lisible, le tracker expose un
  prérequis à vérifier et conserve l’étape courante ;
- les exceptions issues d’un retour local sont définies par clé dans
  `Data/Overrides.lua`, restent bilingues et conservent les coordonnées de
  l’accès sans réécrire les données importées.

## Choix et récupération d’une source

- un choix explicite ou une préférence enregistrée viable reste prioritaire ;
  sans choix imposé, disponibilité, qualité de route, coût réel, qualité des
  données puis identifiant stable déterminent la source ;
- le calcul reste borné à douze candidats présélectionnés et huit constructions
  de route afin qu’une fiche riche en méthodes ne bloque pas l’interface ;
- l’échec d’une source préférée ou active autorise un repli vers une autre
  méthode seulement lorsqu’aucune source n’a été imposée par le joueur ;
- **Autre source** prépare et valide la nouvelle route avant d’effacer le
  repère courant. En cas d’échec, méthode, route, étape, métadonnées et repère
  actifs doivent rester identiques ;
- un arrêt de circuit régional verrouille sa source jusqu’à sa résolution afin
  de ne pas désynchroniser le plan et le guide actif.

## Palette ElvUI et assistant

- la source canonique de l'accent actif est `E.media.rgbvaluecolor`, déjà
  résolue par ElvUI depuis `E.db.general.valuecolor` et les éventuelles
  couleurs de classe ; ne jamais recopier une couleur depuis un profil de
  variables sauvegardées ;
- `Skins:HandleButton` retire et remplace les textures d'un bouton, mais ne
  remplace pas nécessairement son objet de police Blizzard. Après le skin, les
  titres et libellés PRP qui servent d'accent doivent donc recevoir
  explicitement la couleur de valeur du profil ;
- les dialogues créés à la demande sont indépendants : une passe de skin ne
  doit jamais exiger qu'un autre dialogue ait déjà été construit. Dans une
  liste de widgets optionnels, utiliser `pairs` plutôt qu'`ipairs`, car un
  premier élément `nil` interromprait silencieusement toute la passe ;
- le rafraîchissement doit être rejoué à l'affichage du tracker afin qu'un
  changement de profil ElvUI ou un rechargement tardif ne laisse pas l'or WoW
  dans une surface ElvUI ;
- l'assistant court est un parcours de quatre écrans : Apparence, Tracker,
  Découverte et Résumé. Les réglages techniques restent dans Options et aucun
  réglage persistant n'est modifié avant **Appliquer** ;
- la sélection complète vit dans un brouillon transactionnel. Fermer ou passer
  l'assistant ne doit modifier ni les SavedVariables, ni un tracker actif, ni
  l'état des repères ;
- l'ouverture du brouillon doit recopier les valeurs exactes, y compris une
  taille de tracker comprise entre 20 et 200 %, une opacité entre 20 et 100 %
  et le thème `auto`. Les préréglages ne doivent jamais quantifier une valeur
  simplement parce que l'assistant a été ouvert ;
- les commandes −/+ modifient taille et opacité par pas de 5 % et deviennent
  inactives à leurs bornes. Le titre affiche toujours la valeur exacte du
  brouillon, même lorsqu'elle ne correspond à aucun préréglage ;
- les étapes qui diffèrent de la configuration persistante portent un marqueur.
  Le dernier écran doit compter les champs modifiés et récapituler tous les
  réglages, pas seulement les choix visuels principaux ;
- fermer par la croix, le bouton d'abandon ou Échap suit le même chemin et
  demande confirmation lorsque le brouillon contient des changements ;
- les écrans Apparence à Comportement réutilisent le vrai tracker comme aperçu.
  Les écrans Autour de moi, Carte et Navigation affichent un aperçu spécialisé
  des notifications, des repères ordonnés et des raccourcis qui seront activés ;
- la langue provisoire doit traduire immédiatement l'aperçu sans changer la
  langue persistante. Elle traduit aussi les titres, choix, boutons, étapes et
  récapitulatif de l'assistant. Le retour à l'étape précédente doit restituer
  exactement les autres valeurs du brouillon ;
- lorsque l'opacité ElvUI est héritée, l'aperçu utilise l'alpha réel du profil
  détecté. Le thème Auto indique clairement s'il prévisualise WoW ou ElvUI ;
- l'enregistrement provisoire du foyer doit afficher nom et coordonnées. Un
  échec de lecture de position reste visible dans la page Navigation sans
  modifier le brouillon ;
- le dernier écran signale au minimum les combinaisons incohérentes : repères
  actifs sans mascottes ni jouets, signal Autour de moi avec icône masquée,
  thème ElvUI indisponible et destination de foyer incomplète ;
- avec le thème WoW, les choix de l'assistant et des Options restent des
  contrôles Retail natifs. Le rail principal conserve volontairement sa propre
  navigation sans chrome afin de former une surface continue. Une
  prévisualisation ElvUI peut recolorer les
  surfaces et les libellés, mais ne doit pas détruire les textures Blizzard
  avant la validation, car cette opération imposerait un `/reload` pour revenir
  en arrière ;
- contrôler à la fois un assistant ouvert depuis une installation neuve et un
  assistant relancé depuis Options, aux résolutions basses comme hautes.

## Fenêtre de mise à jour

- une installation existante terminée affiche une seule fois une fenêtre
  compacte lorsque la version chargée change ; une installation neuve ouvre
  uniquement l’assistant de première configuration ;
- la fenêtre résume au maximum trois ensembles de changements, confirme la
  conservation des données et propose seulement **Relancer l’assistant** et
  **Continuer** ;
- **Continuer**, la croix et Échap valident la lecture. **Relancer
  l’assistant** valide également la lecture avant d’ouvrir le brouillon
  transactionnel ;
- la version consultée est persistée. Un `/reload` ordinaire ne doit donc pas
  rouvrir la fenêtre ;
- la migration de schéma 23 garde un indicateur séparé afin que la fenêtre
  puisse être contrôlée sur une installation existante même lorsque la version
  publique n’a pas changé pendant la préparation de la livraison ;
- le panneau est limité par la taille de l’écran, reste déplaçable et reprend
  la palette WoW ou la couleur de valeur ElvUI sans modifier les réglages.

## Fenêtre Options et adaptation aux petits écrans

- Options tient sur une seule hauteur de panneau et conserve l'aperçu en haut ;
  les réglages sont répartis entre Apparence, Tracker, Autour de moi, Carte et
  Navigation ;
- le changement de vue masque réellement les trois autres pages. Aucun contrôle
  masqué ne doit rester cliquable ni conserver une zone de survol ;
- Apparence rassemble thème, transparence et langue. Tracker contient la
  taille, la disposition, l’unité de distance et l’intégration au suivi des
  objectifs ;
- Autour de moi affiche explicitement l'état de Ne pas déranger et rappelle le
  raccourci clic molette sans surcharger la fenêtre de texte ;
- Carte utilise les contrôles Retail natifs dans le thème WoW. ElvUI applique
  ensuite son skin aux mêmes pages, onglets, boutons, cases et listes ;
- Carte expose le choix **Cible actuelle uniquement** ou **Tout le circuit**.
  Un circuit actif masque toujours les collections étrangères au circuit ; les
  étapes ultérieures sont numérotées et atténuées dans le second mode. Les
  étapes déjà terminées ne doivent plus produire de repère ;
- Navigation regroupe l'utilisation des téléportations personnelles, le budget
  15/30/60 minutes, la conservation du dernier repère et la destination
  facultative de la pierre de foyer. Son diagnostic doit distinguer objets
  prêts, en recharge, inutilisables et absents ;
- l'aperçu permanent doit refléter thème, mode, taille et opacité. Il ne doit
  jamais modifier, masquer ou déplacer un tracker actif ;
- l’aperçu reprend le contrat de disposition du tracker réel, affiche une
  progression 2/4 et une action principale. Après son calcul, il restaure les
  textes et visibilités dynamiques du tracker actif ; en combat, il ne touche
  jamais sa disposition sécurisée et actualise uniquement sa propre surface ;
- la fenêtre principale cible désormais une échelle préférée de 82 % et
  continue de calculer sa réduction depuis la surface réellement disponible ;
- toute modification de cette échelle doit être vérifiée à 1024 × 768,
  1280 × 720 et sur une grande résolution, avec les noms français sur deux
  lignes, les six vues principales et l'entrée Options du rail visibles ;
- Journal doit rester entre Jouets et Ma chasse, afficher ensemble mascottes et
  jouets et conserver son ordre du plus récent au plus ancien sans exposer les
  filtres de catalogue ;
- le rail ne doit jamais cumuler cadres individuels, halo d'icône et barre de
  sélection. Seuls une barre latérale de 3 px et un fond très léger signalent
  la vue active. Toutes les icônes utilisent la même empreinte et Options suit
  directement les vues principales au lieu de flotter au bas du rail.

## Reflow du tracker

- les modes compact et complet autorisent deux lignes pour le nom et aucune
  limite arbitraire de lignes pour l’instruction ;
- après chaque changement de texte et après l’application des polices ElvUI,
  `FitTrackerTextLayout` mesure les hauteurs rendues puis décale dans l’ordre le
  statut, l’instruction, la progression et les commandes ;
- le cadre doit contenir la barre de progression avec au moins quatre pixels de
  marge. En mode complet, les commandes ancrées en bas commencent après cette
  barre et ne peuvent jamais la recouvrir ;
- le même ajustement est rejoué pour le message de fin, l’aperçu de l’assistant
  et le tracker actif. La version technique reste masquée dans les trois modes ;
- le recalcul de l’échelle effective vient après le reflow afin de conserver le
  cadre dans l’écran, sans modifier la préférence enregistrée.

## Signal Autour de moi

- un changement de zone peut recalculer les collections proches, mais ne doit
  jamais ouvrir la fenêtre de notification ;
- si des résultats existent, une pastille chiffrée s’intègre dans le coin
  inférieur de l’icône PRP de la mini-carte. Le clic sur cette pastille constitue l’unique
  ouverture de la notification de proximité ;
- un nouveau contenu fait pulser brièvement un anneau bleu autour de l’icône,
  sans ouvrir de fenêtre.
  Le compteur, son texte et sa zone de clic doivent rester contenus dans
  l'empreinte de l'icône à toutes les échelles de mini-carte ;
- Ne pas déranger masque à la fois cette pastille et toute notification déjà
  ouverte, tandis que l’icône principale PRP devient rouge ;
- l’absence de résultat retire le signal sans conserver un compteur périmé.

## Téléportations personnelles et arrivée finale

- le routeur peut comparer son départ réel avec des objets à destination fixe :
  pierres de Dalaran et de fief, capes de guilde et téléportations de Dalaran du
  Norfendre ;
- une option n’est admissible que si le personnage la possède, peut l’utiliser,
  que son temps de recharge est terminé et que le graphe connaît un trajet
  complet depuis sa destination ;
- l’itinéraire personnel doit économiser une marge significative avant de
  remplacer le trajet normal. En cas de doute sur une API, une destination ou
  un temps de recharge, le routeur conserve le parcours normal ;
- la pierre de foyer liée à une auberge n’est pas utilisée tant que son nom de
  foyer ne peut pas être relié de façon sûre à une carte et à des coordonnées.
  Sa destination ne devient admissible qu'après un enregistrement explicite de
  la position actuelle dans l'assistant ou dans Options ;
- à la dernière étape d’une collection non possédée, TomTom ne doit pas effacer
  automatiquement le repère à l’arrivée. Le guide reste actif jusqu’à
  l’obtention et propose **Rien ici ?** si aucun objet n’est visible. Cette aide
  rappelle que le repère peut désigner une zone, un PNJ, une phase ou un
  prérequis, puis propose la carte, une autre source, un recalcul et un
  signalement local sans renvoyer l’utilisateur vers une recherche externe.

## Statut de la V0.40.22

La V0.40.10 a remplacé le `ModelScene` de la grande fiche par un `PlayerModel`,
mais le contrôle en jeu a montré le même carré opaque. La V0.40.11 a accordé sa
couleur et rogné ses arêtes ; le carré restait perceptible. La V0.40.12 a placé
un matte sous le backdrop, où il était masqué, et sa teinte de brouillard a
produit une silhouette noire. La V0.40.13 a confirmé que `BACKGROUND +6`
restait lui aussi derrière le backdrop sur le client testé. La V0.40.14 a placé
le matte dans `BORDER -8`, devant le backdrop et sous les cadres enfants, mais
un contour fin subsistait car le masque carré et la cible carrée avaient la
même taille. La V0.40.15 a fait dépasser la cible de 10 %, sans supprimer le
fond opaque jusqu'aux limites du conteneur. Un contrôle avec la TGA désactivée
a confirmé que l'atmosphère n'était pas responsable. La V0.40.16 a enfin testé
un vignettage dans un cadre frère placé vingt niveaux plus haut : le compositing
du widget 3D est malgré tout resté au-dessus. La V0.40.17 a testé l'icône
officielle du Journal masquée en cercle : son agrandissement en image héro est
trop pixellisé. La V0.40.18 restaure donc `PlayerModel`, mais assume sa surface
comme un aperçu carré encadré et en retrait de 10 px, au lieu d'essayer de la
fondre dans une composition ouverte. Les itérations suivantes ont remplacé ce
compromis par un fondu sur noir uniforme, désormais validé en jeu.

Le contrôle V0.40.18 a aussi montré que masquer seulement `detailIcon` ne
suffisait pas : les quatre couches du médaillon de secours restaient visibles
derrière la mascotte. La V0.40.19 les pilote toutes dans
`SetDetailFallbackVisible` et remplace le grand matte bleu par un fond presque
noir bordé d'un filet bleu de 2 px. La validation en jeu de la V0.40.19 a
confirmé, sur l'Abeille et l'Abomination fongique, que le secours disparaît et
que les effets dorés restent fonctionnels. Elle a aussi montré que le filet
bleu et la différence entre le panneau gris et la cible noire suffisaient à
faire encore lire un carré. La V0.40.20 retire donc le filet et applique le noir
natif du `PlayerModel` à toute la fiche héro.
La validation V0.40.20 a confirmé que la limite carrée n'est plus perceptible,
mais l'Abomination fongique touchait encore les bords invisibles avec ses
mains. La V0.40.21 conserve `0.82` pour les volants, utilise `0.98` pour les
humanoïdes, morts-vivants et élémentaires, et `0.90` pour les autres familles.
Le contrôle ciblé du 17 août 2026 a validé successivement l'Abeille,
l'Abomination fongique et l'Abyssal du Néantespace : aucun carré perceptible,
effets dorés conservés, modèles centrés et membres contenus. Le signalement
ElvUI apparu en combat a été identifié : `PlayerModel:Show()` peut appeler
`OnModelLoaded` de façon synchrone, et le rappel repassait dans
`SetDetailModelVisible`, qui rappelait `Show()` jusqu'au `C stack overflow`.
La V0.40.22 ajoute un verrou de réentrance autour de cet affichage. Après
rechargement, la séquence Abeille → Abomination fongique → Abyssal du
Néantespace → Abeille a été rejouée ; `ScriptErrorsFrame` est resté à zéro,
y compris lorsque le dernier changement a eu lieu en combat.
Cette validation porte sur le correctif de la grande fiche ; elle ne remplace
pas la matrice complète des deux thèmes, tailles et modes du tracker décrite
plus bas.

## Grande fiche : architecture à conserver

Ordre visuel attendu, du fond vers l'avant :

1. noir uniforme partagé par `rightPane`, `heroBackground` et
   `detailVisualFrame`, sans filet autour de la cible 3D ;
2. texture `Assets/HeroAtmosphereV2.tga` et particules PRP ;
3. cible carrée de `detailPlayerModel`, en retrait de 10 px ;
4. portrait officiel circulaire uniquement en secours ;
5. textes, favori et carte « Trajet prêt » dans le panneau voisin.

Règles d'implémentation :

- `detailVisualFrame` reste un `Frame` simple avec `SetClipsChildren(true)`. Ne
  pas lui ajouter
  `BackdropTemplate`, `SetBackdrop`, `SetColorTexture` ou un skin ElvUI ;
- la texture d'atmosphère est indépendante du contrôle 3D et utilise un mélange
  additif. Ses pixels inutilisés doivent être noirs avec un alpha nul afin que
  leur interpolation ne produise pas de carré gris ;
- `USE_DETAIL_3D_MODEL` reste vrai, mais la cible n'est jamais traitée comme
  transparente : elle reste en retrait et son noir doit être strictement le
  même que celui de toute la fiche héro ;
- `detailIcon` utilise l'icône officielle et
  `Interface\\CharacterFrame\\TempPortraitAlphaMask` ; sa taille et les quatre
  couches du médaillon doivent être mises à jour ensemble par
  `SetDetailPortraitSize` ;
- `prepareDetailModel` retire seulement le brouillard importé. Ne jamais y
  appeler `SetFogColor` : le contrôle testé perd alors son éclairage et devient
  une silhouette noire ;
- `SetDetailModelVisible` doit conserver son verrou de réentrance : sur Retail,
  `PlayerModel:Show()` peut exécuter `OnModelLoaded` avant de rendre la main ;
  le rappel ne doit donc jamais relancer un second `Show()` non protégé ;
- le cadrage `PlayerModel` dépend de `petType` : toute modification des valeurs
  de distance doit être contrôlée au minimum sur un volant et une grande
  silhouette à membres écartés ;
- `heroBackground` couvre l'intégralité de `rightPane` avec exactement le même
  matte, sur `BORDER -8`, devant le backdrop et sous les cadres enfants. Une
  région `BACKGROUND`, même au sous-niveau `+6`, est restée masquée sur le
  client Retail testé. ElvUI ne doit jamais teinter ce matte. Ne pas remettre
  un dégradé opaque uniquement autour du modèle ;
- ne pas essayer de fondre à nouveau `PlayerModel` dans une composition ouverte
  sans un nouveau contrôle prouvant que sa cible est réellement transparente ;
- le tracker et les cartes de catalogue peuvent conserver leurs `ModelScene`
  parce que leur rendu est volontairement borné par une carte. Ce choix ne doit
  pas être recopié automatiquement dans la grande composition ouverte.

## Rectangle opaque : diagnostic établi

L'artefact observé était un carré gris parfaitement aligné sur la cible du
contrôle 3D. La capture V0.40.10 montre que le carré subsiste avec
`PlayerModel` : ce n'était donc ni le seul `ModelScene`, ni le halo. Sa largeur
et sa hauteur identiques, au milieu d'un conteneur rectangulaire, identifient la
cible carrée native.

Les essais suivants n'ont pas supprimé le rectangle à eux seuls :

- remplacer ou retoucher uniquement la texture d'atmosphère ;
- retirer le `BackdropTemplate` et empêcher ElvUI de skinner le conteneur ;
- appeler `ModelScene:ClearFog()` ;
- remplacer seulement `ModelScene` par `PlayerModel` ;
- recolorer et rogner uniquement la cible 3D sans prolonger son matte à toute
  la surface héro ;
- placer le matte dans la couche `BACKGROUND`, qu'elle soit négative ou
  positive : elle est restée cachée par le backdrop sur le client testé ;
- modifier `SetFogColor` pour tenter de recolorer le fond : cette opération
  altère aussi le rendu éclairé de la mascotte sur le client testé ;
- changer l'ordre des textures et leur mode de mélange.

Ces essais restent utiles pour obtenir un halo propre, mais ils ne corrigent
pas une cible de rendu 3D opaque. Le choix V0.40.18 est donc structurel : cible
3D explicitement encadrée, portrait circulaire seulement en secours, et relief
reconstruit par des effets Lua séparés.

## Carte du monde : emplacement de la commande PRP

`WorldMapFrame` comprend la carte et le journal des quêtes. Une commande ancrée
sur son `TOPRIGHT` peut donc se retrouver au-dessus du journal ou hors de la
zone cartographique.

L'invariant est le suivant :

- parent et ancrage sur `WorldMapFrame.ScrollContainer` ;
- recours à `WorldMapFrame:GetCanvas()` seulement si `ScrollContainer` est
  indisponible ;
- recalcul par `LayoutFilterButton` à chaque affichage pertinent ;
- marge préservée pour les contrôles natifs de la carte ;
- asset `Assets/PRPMapPin.tga` visible, sans carré de substitution.

## Matrice de validation visuelle

Effectuer les contrôles après un `/reload`, puis après chaque changement de
thème nécessitant une reconstruction des contrôles.

### Modèles à essayer

- au moins une mascotte volante aux ailes larges, par exemple une abeille ;
- au moins une mascotte terrestre de silhouette très différente, petite ou
  massive ;
- si possible, une mascotte dont le nom passe sur deux lignes.

Pour chaque modèle :

- aucun rectangle, carré gris ou bord vertical autour de la mascotte ;
- ailes, antennes et pattes non coupées ;
- modèle centré et suffisamment grand sans masquer les textes ;
- halo et anneau visibles derrière le modèle, sans bloc rectangulaire ;
- icône 2D remplacée proprement après chargement et restaurée en cas d'échec ;
- changement rapide de mascotte sans afficher le modèle précédent.

### Thèmes et tailles

Contrôler successivement le thème WoW natif puis ElvUI, et revenir au thème WoW
à la fin :

- fenêtre principale à 80 %, 100 % et 120 % ;
- rail, icônes et libellés non tronqués ;
- en anglais, le type d'étape, l'instruction et le titre TomTom sont traduits
  avant affichage. Les noms du graphe interne utilisent leurs équivalents
  anglais ; un nom fourni uniquement par le client WoW conserve la langue du
  client lorsqu'aucune traduction embarquée n'existe ;
- les phrases de portail, bateau, zeppelin, tram et vol doivent être entièrement
  anglaises, y compris lorsqu’un texte partiellement traduit est restauré ;
- le choix Mètres affiche mètres puis kilomètres après conversion des yards
  internes de WoW. Le choix Yards affiche yards puis miles. Vérifier le nombre
  du tracker, l’infobulle et les aperçus des Options et de l’assistant ;
- cartes entièrement contenues, sans aperçu de la rangée suivante ;
- étoile Favori visible et cliquable ;
- état Surveillance visible sans recouvrir l'étoile ni le nom ;
- sélection du catalogue limitée à un liseré extérieur fin et une teinte de fond
  discrète : aucun halo sous le nom, aucun cadre autour du modèle et aucune
  texture de bouton d'action étirée sur la carte ;
- accents, survols, particules et carte « Trajet prêt » visibles ;
- boutons contenus dans leur carte, y compris « Ajouter à Ma chasse » ;
- options et assistant : aperçu immédiat du thème et du tracker ;
- `/prp report` : résumé non surligné à l’ouverture, état visible, bascule
  **Afficher les détails** / **Afficher le résumé**, sections techniques
  lisibles, zone défilante bornée et boutons **Tout sélectionner** / **Fermer**
  entièrement hors du texte, sous WoW et ElvUI ;
- première ouverture : la coque puis la liste du catalogue doivent apparaître
  avant le calcul détaillé de la fiche ; l’audit ne signale la première liste
  comme lente qu’à partir de 500 ms ;
- tracker complet, compact et minimal à 80 %, 100 % et 120 %, lancé puis arrêté ;
- à l’étape finale d’une cible compatible, **Cibler** et l’action principale
  restent disponibles ensemble. En compact, les commandes occupent trois
  rangées de deux boutons ; en minimal et en complet, leurs zones ne doivent ni
  se chevaucher ni masquer **Aide**, **Carte** ou **Arrêter** ;
- les libellés longs de validation et de tentative aléatoire tiennent sur deux
  lignes en français et en anglais, sans sortir du tracker ;
- un blocage, un avertissement ou un trajet obsolète rend toujours **Aide**
  accessible. Le panneau d’aide mesure ses sections et les place dans une zone
  défilante afin que les actions de récupération restent visibles ;
- « Autour de moi » manuel fonctionnel ; en mode Ne pas déranger, aucune
  apparition automatique, pastille masquée et icône de minicarte PRP rouge ;
- hors Ne pas déranger, un changement de zone avec résultat affiche uniquement
  la pastille chiffrée intégrée ; son clic ouvre la notification ;
- une étape finale non obtenue conserve son repère après l’arrivée, puis le
  retire seulement lors de l’obtention ou de l’arrêt explicite du guide ;
- avec une téléportation personnelle disponible, contrôler qu’elle est proposée
  seulement si elle raccourcit nettement le parcours et que l’étape suivante
  s’active après le changement de carte.

### Carte du monde

- la commande de filtres se trouve dans la surface de carte, jamais dans le
  journal des quêtes ;
- elle s'ancre à gauche du bouton natif de légende ou utilise une position de
  secours décalée. Elle ne doit jamais recouvrir l'indicateur Blizzard
  « Masqué » dont la langue reste celle du client WoW ;
- elle reste à sa place avec le journal ouvert ou fermé et après
  redimensionnement ;
- le menu ne dépasse pas de l'écran ;
- les repères Mascottes/Jouets, les modes de collection et les méthodes
  modifient réellement les marqueurs affichés ;
- pendant un circuit actif, aucun repère extérieur au circuit ne subsiste. Le
  mode cible actuelle en conserve un seul ; le mode circuit complet montre les
  étapes restantes avec la cible actuelle pleinement opaque.

## Critère de sortie

Une version ne doit être annoncée comme validée que si les deux thèmes, les
deux silhouettes minimum, les trois tailles et les trois modes du tracker ont
été contrôlés sans erreur Lua, sans troncature majeure et sans artefact de
couche. Toute dérogation doit être notée avec la mascotte, le thème, l'échelle
et une capture reproductible.
# Circuit preparation dialog

- A newly calculated circuit opens a dedicated preparation dialog before it can start.
- The suggested order is optimized first; every row and world-map pin uses the absolute checkpoint number.
- Clicking two rows swaps their checkpoints. Manual order is preserved while advancing and across reloads.
- The dialog supports keyboard focus, scrolling, native WoW styling and ElvUI styling.
