Skip to content

Charte PayPal, documentation complète FR + EN et export PDF - #1

Merged
clotairer merged 20 commits into
mainfrom
feat/refonte-charte-doc
Sep 17, 2026
Merged

clotairer merged 20 commits into
mainfrom
feat/refonte-charte-doc

Conversation

@mhurelle

Copy link
Copy Markdown
Collaborator

Refonte de la charte graphique et intégration de la documentation utilisateur, en français et en anglais.

Charte

Couleurs, typographie et composants relevés sur paypal.com : bleu profond #002991, bleu clair #60CDFF, crème #F1EFEA, or #FFC439. Titres en noir graisse 900 à interlettrage serré — chez PayPal le bleu est réservé aux liens et éléments interactifs. Onglets et boutons en pilule. Archivo remplace la police propriétaire « PayPal Pro ». Bascule clair / sombre, avec la version réservée blanche du logo sur fond sombre.

Contenu

Import depuis les deux Google Docs via l'export « Page Web », seul format qui conserve les GIF animés et la résolution d'origine des images. Le texte est repris verbatim : seule la syntaxe Markdown change.

13 pages par langue, calquées sur les 8 chapitres du document source. Le français vit à la racine, l'anglais sous /en/, avec sélecteur de langue.

Les 5 GIF de l'export anglais sont les mêmes enregistrements que les français, réencodés sept fois plus lourds (71 Mo contre 10) : ils sont mutualisés plutôt que dupliqués.

Navigation

Une seule colonne : le sommaire de la page est intégré à la navigation de gauche, sous le chapitre courant. Les trois niveaux — chapitre, pages, sections — sont distingués visuellement. Les liens sortants s'ouvrent dans un nouvel onglet.

Export PDF

Chaque build régénère un PDF par langue à partir des pages du site : la version imprimable ne peut pas diverger du contenu en ligne.

Vérifié sur les fichiers réellement produits : 35 pages en français, 32 en anglais, 44 titres sur 44, 98 liens internes navigables, polices incorporées et sous-ensemblées, couverture avec logo, matrice des produits entière sur sa page.

Outillage

  • tools/import-google-doc.py : réimport reproductible, par langue. Signale tout lien interne non résolu.
  • Configuration éclatée en mkdocs.base.yml / mkdocs.yml (prod) / mkdocs.local.yml (dev) : les deux environnements ne diffèrent que par l'export PDF.
  • mkdocs build --strict en CI : un lien mort ou une page absente de nav: fait échouer le build.
  • site_url, repo_url, copyright, .gitignore ajoutés.

Vérifications

  • Complétude : 180 blocs du document français, 168 de l'anglais — aucun absent.
  • Contraste WCAG sur les deux thèmes : aucun texte sous son seuil AA.
  • Détecteur d'anti-patterns impeccable : zéro.
  • Rendu contrôlé à 375, 1000, 1280 et 1440 px.

À traiter après la fusion

  1. Trois erreurs du document source, reprises telles quelles — à corriger dans les Google Docs puis réimporter : l'onboarding étape 5 décrit l'étape 4 ; les spécificités USA et Mexique/Brésil exigent une localisation « Allemagne » ; « les adresses IP s autorisées ».
  2. Visuels anglais partiels : les captures portent des annotations anglaises mais montrent une interface PrestaShop en français ; les GIF sont intégralement en français.
  3. Usage de la marque PayPal (logo, identité visuelle) à faire valider avant communication publique.

🤖 Generated with Claude Code

mhurelle and others added 20 commits September 15, 2026 11:50
Charte graphique
- Couleurs relevées sur paypal.com : #002991, #60CDFF, #F1EFEA, #FFC439
- En-tête blanc + logo PayPal, comme sur paypal.com ; version blanche du logo
  en mode sombre
- Feuille de style dédiée (docs/assets/css/paypal.css) : titres, tableaux,
  encarts, cartes, cadre sur les captures d'écran
- Police Inter en substitut de PayPal Pro Text (propriétaire)
- Bascule clair / sombre

Contenu
- Import de la documentation utilisateur (export Google Docs) : 8 chapitres
  répartis en 10 pages, 22 captures extraites du base64 vers docs/assets/img/
- Nettoyage de l'export : titres préfixés par des numéros de liste, gras dans
  les titres, caractères échappés, ancres Google Docs
- Liens internes réécrits en liens inter-pages avec ancres explicites
- Encarts « NB / A noter / Attention » convertis en admonitions Material
- Navigation par onglets : Démarrer, Configuration, Exploitation, Référence
- Page d'accueil avec cartes d'entrée

Outillage
- .gitignore (absent du dépôt) : .venv/, site/, .DS_Store
- mkdocs.local.yml : config de dev désactivant l'export PDF, dont les
  dépendances système ne sont pas installables sans droits admin
- README : procédure d'installation locale et structure du projet

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sans ligne vide, l'export Google Docs collait l'image au texte précédent :
elle était rendue en ligne au milieu du paragraphe.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
L'export Markdown de Google Docs perdait des données. L'export « Page Web »
les conserve : le contenu est repris depuis cette source.

Images
- 5 GIF animés de démonstration, aplatis en PNG fixes par l'export Markdown
- 2 images purement absentes de l'export Markdown
- résolution d'origine (jusqu'à 1666 px) au lieu de 605 px imposés à l'export
- noms explicites plutôt que imageN.png, légendes pour l'accessibilité et le PDF
- chargement différé (loading=lazy) : les GIF pèsent 10 Mo

Texte
- repris verbatim : plus aucune reformulation, seule la syntaxe Markdown change
- emphases portées par des classes CSS résolues en gras / italique
- liens déballés du redirecteur google.com/url
- titres remis à leur niveau (Google Docs les enveloppe dans des <ol>)
- en-têtes de tableaux vides corrigés, listes des cellules rendues en <br>
- ancres internes du document mappées vers leur page et leur section
- blocs « NB / A noter / Attention » convertis en encarts, texte inchangé

Structure
- une page par section du document, 13 pages au lieu de 10
- navigation calquée sur les 8 chapitres du document source

Charte
- titres en noir, graisse 900, interlettrage -0.03em : relevé sur paypal.com,
  le bleu y est réservé aux liens et éléments interactifs
- onglets et boutons en pilule (radius 1000px)
- Inter chargée en graisses 400 à 900

Outillage
- tools/import-google-doc.py : le convertisseur, pour les prochains imports
- README : procédure de mise à jour du contenu depuis le Google Doc

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Détecteur impeccable passé sur le site généré : 188 occurrences, ramenées à 0.

Charte
- encarts : suppression du liseré coloré de 4 px à gauche, le marqueur le plus
  reconnaissable des interfaces générées par IA ; la couleur passe désormais par
  le titre et son icône, avec un filet uniforme
- typographie : Inter remplacée par Archivo — Inter est devenue si répandue
  qu'elle ne distingue plus rien, et Archivo est plus proche du dessin de
  « PayPal Pro » (graisses 400 à 900)
- ombres : halo bleuté remplacé par une ombre neutre

Lisibilité
- tableaux : Material les rend à 10,24 px, alignés sur le corps de texte
- pied de page, lien d'évitement et résultats de recherche remontés à 11,5 px
- marges internes du pied de page

Règles ignorées, partagées dans .impeccable/config.json
- layout-transition et clipped-overflow-container : CSS compilé de Material for
  MkDocs, non modifiable sans forker le thème

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Le PNG du logo avait un fond blanc opaque, sans canal alpha utile. Le filtre
`brightness(0) invert(1)` repeignait donc tout le rectangle en blanc, logo
compris : rien n'était lisible sur l'en-tête sombre.

- détourage du logo par inversion de la composition sur fond blanc
  (A = 1 - min(R,G,B) puis démultiplication), bords antialiasés propres
- génération de la version réservée blanche, que PayPal prescrit sur fond
  sombre ; un filtre CSS ne convenait pas, il écrasait le bichromatisme bleu
- bascule par `content: url(...)` selon le thème, plus de filtre

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Deux défauts dans la barre d'onglets :

- le lien était calé en haut du <li> (4 px au-dessus, 22,8 px en dessous dans
  une barre de 57 px) : le padding de la pilule avait cassé le calage vertical
  que Material obtient par sa marge haute. Le <li> centre désormais son lien.
- le sélecteur de l'onglet actif visait `.md-tabs__link--active`, qui n'existe
  pas : Material 9 porte le marqueur sur le <li> (`.md-tabs__item--active`).
  L'onglet actif n'avait donc jamais été mis en évidence.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Le tableau à 5 colonnes de la page Général faisait 1066 px pour 720 px
disponibles : il fallait le faire défiler latéralement pour le lire.

- page Général : sommaire de droite masqué, ce qui rend ~265 px au contenu.
  L'en-tête est posé par le convertisseur, il survit donc au réimport.
- marges internes des cellules ramenées de 19,5 px à ~12 px
- colonne des libellés protégée sur les tableaux de 4 colonnes ou plus,
  sinon elle se faisait écraser à 107 px
- césure par overflow-wrap et non hyphens, qui coupait « Pay-Pal » ;
  les URL cassent sans tiret parasite

Vérifié sans défilement à 1440, 1280 et 1100 px.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Les tailles de titres étaient fixes : sur un écran de 375 px, le H1 s'affichait
à 44 px et occupait quatre lignes de deux mots. Passage en clamp() : 31 px sur
mobile, 44 px sur grand écran.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
CI
- `mkdocs build --strict` : un lien mort ou une page absente de nav: fait
  désormais échouer le job. Vérifié : code de sortie 1 sur lien cassé, 0 sinon.
- le lien vers le PDF pointait vers docs/pdf/, que MkDocs ne trouve jamais —
  le plugin écrit dans site/. Le build strict échouait donc y compris en CI,
  où le PDF est pourtant bien généré. Lien passé en URL absolue.

Métadonnées
- site_url : URL canoniques et sitemap corrects (ils pointaient nulle part)
- repo_url / repo_name : l'icône GitHub configurée dans theme.icon.repo ne
  s'affichait pas sans repo_url
- copyright

Pas d'action « modifier cette page » : les pages de docs/ sont régénérées
depuis le Google Doc, un tel bouton inviterait à des modifications écrasées.

Corrections induites par le bloc « dépôt »
- dans le tiroir mobile, Material le peint avec la couleur de texte de
  l'en-tête, noire ici, sur fond bleu profond : 1,7:1. Passé à 12,17:1.
- nom du dépôt sous le plancher de lisibilité, et marges internes nulles
- 404.html exclu du détecteur : MkDocs y met des chemins absolus à dessein

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Audit de contraste des deux thèmes sur l'ensemble des pages : un échec.

- l'encart `danger` n'avait pas de variante sombre et gardait son rouge foncé
  #B3261E, soit 2,44:1 sur fond sombre — sous le seuil AA de 4,5:1. C'est
  l'avertissement sur la restriction IP, le plus important de la doc.
  Passé à #FF8A80 : 6,99:1.
- bordure des captures d'écran : un noir à 10 % ne délimite rien sur fond
  sombre, passée en blanc à 18 %

Vérifié sur Accueil, Général et Configuration dans les deux thèmes, plus le
tiroir mobile en sombre : plus aucun texte sous son seuil AA.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…onglet

Navigation
- `toc.integrate` : le sommaire de la page rejoint la navigation de gauche,
  sous le chapitre courant. La colonne de droite disparaît : il n'y a plus
  qu'un seul endroit où se repérer.
- `navigation.sections` retiré : les chapitres redeviennent dépliables
- le `hide: toc` de la page Général n'a plus lieu d'être — il masquerait
  désormais ses sous-sections dans la navigation

Liens sortants
- ouverture dans un nouvel onglet, avec rel="noopener noreferrer" (sans quoi
  la page ouverte peut manipuler celle d'origine via window.opener)
- flèche ↗ visible et mention « (nouvel onglet) » pour les lecteurs d'écran
- les liens internes ne sont pas touchés

Perte de contenu corrigée
Le convertisseur écartait les paragraphes contenant un lien `#h.`, pour filtrer
le sommaire Google Docs. Or ce sommaire précède le premier titre et était déjà
écarté en amont : le filtre ne supprimait donc que du contenu. Deux paragraphes
manquaient, dont « Vous êtes déjà un client PayPal : Rendez-vous au chapitre 2 ».
Audit de complétude relancé sur les 180 blocs du document source : aucun absent.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Le français reste à la racine, l'anglais vit sous /en/. Le sélecteur apparaît
dans l'en-tête, la navigation et les métadonnées sont traduites.

Les 13 pages anglaises sont des COQUILLES portant un encart « Translation
pending ». La structure et le sélecteur sont en place, pas le contenu :
à ne pas publier en production en l'état.

Configuration réorganisée
La config de dev remplaçait la liste des plugins, ce qui a fait qu'i18n était
absent en local sans que rien ne le signale — l'aperçu local ne reflétait plus
la production. Découpage en trois fichiers :
- mkdocs.base.yml : tout le commun, plugins déclarés en mapping (l'héritage
  MkDocs fusionne les mappings, mais remplace les listes)
- mkdocs.yml : production, ajoute l'export PDF — lancé par la CI
- mkdocs.local.yml : développement, sans l'export PDF
Plus aucune duplication : les deux environnements ne diffèrent que par le PDF.
Vérifié en résolvant l'héritage des deux fichiers.

mkdocs.local.yml n'est plus ignoré par git : le README demande de l'utiliser,
il doit donc être versionné.

Le convertisseur ne régénère que les pages françaises, les *.en.md sont
préservés.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…e ligne

Depuis l'intégration du sommaire à gauche, les trois niveaux — chapitre, pages
du chapitre, sections de la page ouverte — se ressemblaient, et on ne voyait pas
où finissait la liste des pages.

- le chapitre devient un intitulé de rubrique : petites capitales, interlettré
- les pages reçoivent une pastille au survol, comme les onglets
- les sections de la page ouverte sont regroupées dans leur propre encart,
  crème en clair, blanc translucide en sombre ; les sous-sections gardent un
  simple filet de retrait
- filets de séparation du tiroir mobile retirés : ils faisaient doublon avec
  les pastilles et les entrées butaient dessus

Longueur de ligne
La suppression de la colonne de droite avait élargi le texte à 938 px, soit
près de 100 caractères par ligne — l'œil décroche en fin de ligne. La grille
s'élargit à 68rem, la navigation passe à 15rem, et le texte est bridé à 32rem
(~80 caractères). Seul le texte est bridé : tableaux, captures et encarts
gardent la pleine largeur, et la matrice des produits tient toujours sans
défilement (1018 px pour 1052 disponibles).

Tous les retraits de la navigation portés à 8 px minimum. Détecteur impeccable
à zéro sans recourir à une règle ignorée ; audit de contraste des deux thèmes
sur la navigation et le contenu : aucun texte sous son seuil AA.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Les coquilles « Translation pending » sont remplacées par le contenu réel,
importé du Google Doc anglais avec le même convertisseur.

Convertisseur généralisé
Il prend désormais la langue en argument (`fr` ou `en`) et ne régénère que les
pages de cette langue. Tout est tabulé par langue : routage des pages, table des
images, légendes, marqueurs d'encart (« Please note », « Warning ») et page
d'accueil. La structure du document anglais est le miroir exact du français,
l'arborescence du site est donc identique dans les deux langues.

GIF mutualisés
Les 5 GIF de l'export anglais sont les mêmes enregistrements d'écran français,
réencodés sept fois plus lourds : 71 Mo contre 10. Ils ne sont pas recopiés,
les pages anglaises pointent sur les fichiers français. Seules les 17 captures
anglaises sont ajoutées, soit 1,4 Mo au lieu de 73.

Liens internes
Google Docs référence des signets qu'il n'exporte pas — un par langue, vers la
section « mode de prélèvement ». Le correctif codé en dur pour le français
devient une table par langue, et le script signale désormais tout lien interne
non résolu sur les fichiers écrits, pour qu'un import futur ne livre pas de
lien mort en silence.

Audit de complétude sur les 168 blocs du document anglais : aucun absent.

À savoir sur les visuels : les captures anglaises portent des annotations en
anglais mais montrent une interface PrestaShop en français, et les GIF sont
intégralement en français. Une version anglaise complète suppose de les
réenregistrer en locale anglaise. C'est consigné dans le README.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Le lien « Télécharger le PDF » était en place mais n'avait jamais été vérifié :
WeasyPrint n'était pas installable sur la machine de développement. Il l'est
désormais, via conda-forge dans le dossier personnel (procédure au README),
et tout ce qui suit a été contrôlé sur le PDF réellement produit.

Ce qui était cassé
- la page d'accueil anglaise renvoyait vers le PDF français
- la couverture du PDF anglais était en français : le plugin n'a qu'une
  configuration globale, et les surcharges par langue d'i18n ne portent pas sur
  les options des plugins. Corrigé par hooks/pdf-par-langue.py, qui écrit dans
  l'objet Options du plugin — sa configuration est figée avant les hooks.
- le logo n'apparaissait pas : le gabarit d'origine le pose en image de fond
  d'un conteneur flexbox, que WeasyPrint ne sait pas dimensionner. Remplacé par
  templates/cover.html.j2, qui utilise une balise img.
- le PDF sortait dans le serif par défaut : WeasyPrint ne récupère pas Archivo
  depuis Google Fonts. Bloc @media print ajouté.

Un piège coûteux
La règle libérant la largeur du texte incluait les titres — qui portent les
ancres du document. Résultat : 98 liens internes actifs tombaient à 38, et 47
ancres mortes faisaient échouer le build strict. La règle épargne désormais les
titres, et le README le signale.

Vérifié sur les deux PDF
44 titres sur 44, 98 liens internes actifs, 10 liens externes, images
incorporées, matrice des produits entière sur sa page, couverture et sommaire
dans la bonne langue. Build strict au vert, détecteur impeccable à zéro.

Le PDF est régénéré à chaque build de production : il ne peut pas diverger du
site.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Le workflow ne se déclenchait que sur main : l'export PDF n'aurait donc été
testé qu'après la fusion. Il exige des bibliothèques système (Pango, Cairo)
absentes des postes de développement, la CI est le seul endroit où le vérifier.

La pull request construit désormais le site et les deux PDF en mode strict ;
l'étape de déploiement reste réservée à main.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
La CI installait Markdown 3.10.3 et WeasyPrint 70 là où le rendu a été vérifié
avec Markdown 3.9 et WeasyPrint 66. Les ancres internes du PDF n'étaient plus
résolues et le build strict échouait — sur un code pourtant valide en local.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Retire aussi le hook de diagnostic temporaire.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@clotairer
clotairer merged commit b1a9d98 into main Sep 17, 2026
1 check passed
@clotairer
clotairer deleted the feat/refonte-charte-doc branch September 17, 2026 10:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants