{
  "summary": "Investigate 19 FeedbackPin tasks (retours Maxime): map each to exact files + root cause + concrete fix, then produce a conflict-free implementation map",
  "agentCount": 6,
  "logs": [
    "Investigation de 19 retours Maxime sur 5 clusters (read-only, Opus 4.8)",
    "Synthese: carte de propriete des fichiers + ordre d implementation sans conflit"
  ],
  "result": {
    "findings": [
      {
        "cluster": "Donnees references & classification secteurs",
        "shared_files": [
          "src/data/references.ts",
          "src/components/SectorReferenceHighlights.tsx",
          "src/components/industrie/IndustrieProof.tsx",
          "src/components/industries/DistributionProof.tsx",
          "src/components/industries/SectorPageTemplate.tsx",
          "src/pages/References.tsx"
        ],
        "findings": [
          {
            "task_id": 232,
            "page": "/industries/distribution",
            "comment_summary": "Une carte taguee 'Tertiaire' apparait dans le rail references de la page Distribution, il faut mieux filtrer.",
            "root_cause": "Architecture a DEUX champs: le rail Distribution est alimente par getReferenceHighlights('distribution') (src/data/references.ts L1028-1032) qui filtre sur highlightSectors. La reference Albright (L116) a highlightSectors:['tertiaire','distribution','industrie'] -> elle entre dans le rail Distribution. Mais le BADGE affiche reference.sector (SectorReferenceHighlights.tsx L110), et Albright.sector = 'Tertiaire' (L79). Donc une carte au badge 'Tertiaire' s'affiche sur la page Distribution. Le rail melange aussi des cas d'autres secteurs via highlightSectors multi-valeurs.",
            "files": [
              "src/data/references.ts",
              "src/components/SectorReferenceHighlights.tsx"
            ],
            "fix_approach": "Deux options. (A) MINIMAL data-only: retirer 'distribution' du highlightSectors d'Albright (L116) -> il ne fuit plus dans Distribution; et s'assurer que les vrais cas distribution (Intermarche Illiers L303, Cora L461) restent. (B) Plus propre: faire afficher le badge a partir du slug du rail plutot que de reference.sector, OU n'inclure dans le rail que les refs dont sector correspond reellement. Recommande: option A (retirer 'distribution' de l'Albright highlightSectors) + a terme aligner le badge sur le secteur reel. Verifier apres correctif que le rail Distribution ne montre que des badges 'Distribution'.",
            "drafted_content": "",
            "confidence": "high",
            "open_question": "Faut-il garder Albright comme 'cas transversal' visible sur plusieurs pages (tertiaire+distribution+industrie) ou le restreindre a son secteur reel (tertiaire) ? Decision Tom: si on veut le reutiliser ailleurs, il faut afficher le badge du SECTEUR DE LA PAGE, pas reference.sector."
          },
          {
            "task_id": 237,
            "page": "/references",
            "comment_summary": "Classer les McDo en ERP, revoir toute la taxonomie secteurs et assurer la coherence avec les pages /industries/*.",
            "root_cause": "Taxonomie incoherente: deux systemes paralleles. (1) le type ReferenceSector (src/data/references.ts L1) n'a que 5 valeurs: Industrie | Distribution | Logistique | Tertiaire | Territoire -> 'ERP', 'Collectivites', 'Agricole' n'existent PAS comme badge/filtre grille. (2) ReferenceSectorSlug (L3-10) en a 7 (avec erp/collectivites/agricole). Le grid /references filtre sur sector (getGridReferencesBySector L1025-1026) donc il n'y a aucun onglet ERP. McDonald's Angers (L552) est sector:'Tertiaire' alors qu'un McDo est un ERP (etablissement recevant du public, cf llms.txt L251). Le rail des pages industrie filtre lui sur highlightSectors -> deux logiques deconnectees.",
            "files": [
              "src/data/references.ts",
              "src/pages/References.tsx",
              "src/components/industrie/IndustrieProof.tsx",
              "src/components/industries/SectorPageTemplate.tsx"
            ],
            "fix_approach": "Unifier la taxonomie. Etape 1: etendre le type ReferenceSector pour inclure 'ERP' (et idealement 'Collectivites','Agricole') + ajouter les entrees dans referenceSectors (L57-63) et sectorSlugs (L65-72) -> McDo:'McDonald's - Angers' (L555) passe sector:'ERP'. Etape 2: ajouter highlightSectors:['erp'] sur le McDo grid pour qu'il alimente le rail ERP. Etape 3: pour chaque page /industries/*, verifier que referenceFilterBySector (IndustrieProof.tsx L33+) et referenceFilterBySectorSlug (SectorPageTemplate.tsx L75-83) pointent vers le bon ReferenceSector (actuellement erp->'Tertiaire' et collectivites->'Territoire', ce qui fait que 'Voir les references filtrees' renvoie vers un mauvais onglet). Etape 4 (taxonomie cible ci-dessous). TAXONOMIE ACTUELLE: sector in {Industrie, Distribution, Logistique, Tertiaire, Territoire}; slugs in {industrie, distribution, logistique, tertiaire, collectivites, agricole, erp}. TAXONOMIE CORRIGEE proposee: ajouter ERP comme secteur a part entiere; reclasser McDonald's Angers, Station E.Leclerc (L479, aire d'autoroute = ERP/restauration) en ERP; garder Carrefour Market / Netto / Colruyt / Super U / Cora / Intermarche / E.Leclerc magasins en Distribution; Territoire->renommer 'Collectivites' pour matcher le slug et la page (RATP, Restos du coeur). Aligner referenceFilterBySector: erp->'ERP', collectivites->'Collectivites'.",
            "drafted_content": "Mapping de reclassification recommande (champ sector + highlightSectors):\n- mcdonalds-angers (L552): sector 'Tertiaire' -> 'ERP', ajouter highlightSectors:['erp']\n- station-eleclerc-frontonnais-sud (L479, aire d'autoroute): sector 'Tertiaire' -> 'ERP' (a valider, station-service = ERP), ajouter highlightSectors:['erp']\n- roche-bobois-versailles-* (showroom, deja highlightSectors:['tertiaire','erp']): garder sector 'Tertiaire' (showroom = tertiaire/retail), OK.\n- ratp-aubervilliers-* (L416/L528): sector 'Territoire' -> a renommer en 'Collectivites' apres ajout du secteur.\n- restos-du-coeur-semoy (L1003): sector 'Territoire' -> 'Collectivites'.\nNote ton Covalba: dans la copy d'introduction des filtres, parler de 'batiments recevant du public (ERP)' et de 'bâtiments publics / collectivites', vocabulaire technicien toiture, pas 'commerces' generique.",
            "confidence": "high",
            "open_question": "Decision Tom: (1) Cree-t-on un VRAI secteur 'ERP' dans le type ReferenceSector (impacte le badge + l'onglet /references + les counts) ou se contente-t-on de reclasser via highlightSectors uniquement ? (2) Renomme-t-on 'Territoire' en 'Collectivites' (coherent avec la page /industries/collectivites et le slug) ? (3) La Station E.Leclerc compte-t-elle comme ERP ou Distribution ?"
          },
          {
            "task_id": 238,
            "page": "/references",
            "comment_summary": "Netto est tague Distribution mais n'apparait pas sur la page /industries/distribution.",
            "root_cause": "Le rail de la page Distribution (DistributionProof.tsx L66, sector='distribution') est alimente par getReferenceHighlights('distribution') (references.ts L1028-1032) qui filtre EXCLUSIVEMENT sur highlightSectors. La reference netto-marseille (L625-635) a bien sector:'Distribution' (donc visible dans le grid /references) MAIS n'a AUCUN champ highlightSectors -> elle n'entre jamais dans le rail. C'est le decouplage sector vs highlightSectors: tagger 'Distribution' dans sector ne suffit pas pour apparaitre sur la page industrie.",
            "files": [
              "src/data/references.ts"
            ],
            "fix_approach": "Correctif minimal: ajouter highlightSectors:['distribution'] sur netto-marseille (L625). Correctif structurel recommande: modifier getReferenceHighlights pour faire un fallback sur le mapping sector->slug quand highlightSectors est absent (ex: si highlightSectors vide, utiliser sectorSlugs[reference.sector]). Ainsi toute ref Distribution remonte automatiquement sur la page distribution sans double-tagging manuel. Sinon, il faudra ajouter highlightSectors a la main sur chaque ref grid, ce qui re-introduira le bug a chaque nouvelle entree.",
            "drafted_content": "",
            "confidence": "high",
            "open_question": "Decision Tom: prefere-t-on (A) un fallback automatique sector->highlightSectors dans getReferenceHighlights (DRY, robuste pour les futures refs) ou (B) tagger highlightSectors a la main ref par ref (controle fin mais risque d'oubli) ? Recommandation forte: option A."
          },
          {
            "task_id": 239,
            "page": "/references",
            "comment_summary": "Mettre Carrefour Market en cas dans la distribution.",
            "root_cause": "Les 6 references Carrefour Market (L748-818) ont DEJA sector:'Distribution' -> elles apparaissent correctement sous l'onglet Distribution du grid /references. Aucune n'est taguee 'Tertiaire'. La 'carte Carrefour Market taguee Tertiaire' decrite dans la tache n'existe PAS dans les donnees actuelles. L'hypothese la plus probable: Maxime a vu une carte au badge 'Tertiaire' DANS le rail de la page distribution (= bug Task 232, la carte Albright), et l'a confondue avec un Carrefour Market, OU le commentaire portait sur une version anterieure des donnees deja corrigee. Aucune correction data necessaire cote Carrefour Market.",
            "files": [
              "src/data/references.ts"
            ],
            "fix_approach": "Aucun changement requis sur les refs Carrefour Market (toutes deja Distribution). Verifier visuellement sur la preview la page /references onglet Distribution: les 6 Carrefour Market doivent y figurer (count Distribution doit les inclure). Le vrai correctif est celui de Task 232 (empecher le badge Tertiaire d'Albright de fuiter dans le rail Distribution). Confirmer avec Maxime que la carte 'Tertiaire' qu'il visait etait bien Albright.",
            "drafted_content": "",
            "confidence": "medium",
            "open_question": "A confirmer avec Maxime/Tom: la carte 'Carrefour Market taguee Tertiaire' n'existe pas dans les donnees actuelles (tous les Carrefour Market sont deja Distribution). Maxime visait-il en realite la carte Albright (badge Tertiaire) dans le rail de la page distribution ? Si oui, Task 239 est couverte par le fix de Task 232."
          },
          {
            "task_id": 227,
            "page": "/industries/tertiaire",
            "comment_summary": "La carte reference Albright n'a pas de photo sur la page Tertiaire.",
            "root_cause": "La reference albright-france-la-rochelle (references.ts L75-120) ne possede AUCUN champ image, ni videoUrls. Le helper getReferenceImage (SectorReferenceHighlights.tsx L31-35) retourne reference.image puis, a defaut, derive une vignette YouTube depuis videoUrls; Albright n'ayant ni l'un ni l'autre -> retourne undefined -> rendu du placeholder lettre 'A' (L97-103). Aucun asset Albright n'existe localement (recherche find -iname '*albright*' = 0 resultat) ni sur HubSpot (pas d'URL fournie).",
            "files": [
              "src/data/references.ts"
            ],
            "fix_approach": "Le champ exact a renseigner est 'image' sur l'objet albright-france-la-rochelle (a inserer vers L83, format identique aux autres refs: URL HubSpot ou chemin local /images/...). Aucun asset n'etant disponible dans le repo ni via une URL covalba.fr connue, c'est un blocage de contenu, pas de code. Trois pistes: (1) recuperer la photo depuis la page source covalba.fr/cool-roof-la-rochelle-pour-albright-france (deja en sourceUrls L96) si une image y existe; (2) demander l'asset au client; (3) en attendant, mettre une image de secteur generique deja presente (ex: public/images/tertiaire/showroom-coolroof.webp ou hero-bureaux.webp) pour eviter le placeholder lettre.",
            "drafted_content": "",
            "confidence": "high",
            "open_question": "Decision Tom: pour Albright, (A) on attend la vraie photo du chantier La Rochelle (a demander au client / extraire de covalba.fr) ou (B) on met provisoirement une image generique secteur tertiaire (public/images/tertiaire/hero-bureaux.webp) le temps d'obtenir l'originale ? Recommandation: B en provisoire pour ne pas laisser le placeholder lettre, A en cible."
          },
          {
            "task_id": 233,
            "page": "/industries/collectivites",
            "comment_summary": "Verifier les photos des cas references sur la page Collectivites (placeholder lettre 'R').",
            "root_cause": "Le rail de la page Collectivites (SectorPageTemplate via slug 'collectivites') appelle getReferenceHighlights('collectivites'). Une seule reference matche: ratp-aubervilliers-case (L416-430, highlightSectors:['collectivites','industrie']). Cette ref n'a AUCUN champ image -> getReferenceImage retourne undefined -> placeholder lettre 'R' (RATP). Le 2eme RATP (ratp-aubervilliers-grid L528) a bien une image mais sector:'Territoire' et pas de highlightSectors -> n'alimente pas le rail. Donc le rail collectivites affiche un seul cas, sans photo.",
            "files": [
              "src/data/references.ts"
            ],
            "fix_approach": "Deux corrections data. (1) Ajouter un champ image a ratp-aubervilliers-case (L416): reutiliser l'URL deja presente sur ratp-aubervilliers-grid (L533: https://5524202.fs1.hubspotusercontent-na1.net/hubfs/5524202/Design%20sans%20titre(1)-1.jpg) OU une image locale public/images/collectivites/ (hero-batiment-public.webp, gymnase-coolroof.webp, ehpad-coolroof.webp existent). (2) Enrichir le rail collectivites: ajouter highlightSectors:['collectivites'] sur restos-du-coeur-semoy (L1003, sector Territoire, a une image) pour avoir au moins 2 cas avec photo. Idealement fusionner les deux fiches RATP (case + grid) pour eviter la duplication ou pointer le rail vers la fiche grid qui a l'image.",
            "drafted_content": "",
            "confidence": "high",
            "open_question": "Decision Tom: la page Collectivites n'a quasiment pas de vraies references clients (RATP est tague 'needs-client-input', Restos du coeur en Territoire). Veut-on (A) reutiliser les images locales generiques de public/images/collectivites/ (gymnase, ehpad, batiment public) sur les cartes, ou (B) attendre de vraies photos de chantiers collectivites du client ? Les logos de villes du config.proof.logos (Antony, Joinville, Arcueil, Digne...) sont-ils de vraies references exploitables ?"
          },
          {
            "task_id": 243,
            "page": "/references/albright-france-la-rochelle",
            "comment_summary": "Aspect DONNEES uniquement: la reference Albright n'a pas d'image hero exploitable.",
            "root_cause": "Identique a Task 227 cote donnees: la reference albright-france-la-rochelle (references.ts L75-120) n'a pas de champ image et pas de videoUrls. La page detail (ReferenceDetail.tsx, traitee par un autre cluster) consomme ces memes donnees via getDetailedReferenceBySlug (L1043-1044); sans champ image, aucun hero image disponible. Le probleme est donc bien la DISPONIBILITE de l'asset dans les donnees, pas le rendu.",
            "files": [
              "src/data/references.ts"
            ],
            "fix_approach": "Renseigner le champ image sur l'objet albright-france-la-rochelle (meme champ que Task 227, un seul ajout couvre rail + page detail). Aucun asset Albright present dans le repo: c'est un manque de contenu a remonter. Coordonner avec le cluster qui traite le rendu de ReferenceDetail pour qu'ils sachent que le champ image sera ajoute ici (eviter qu'ils codent un fallback en doublon). Provisoirement: image generique tertiaire pour ne pas casser le hero.",
            "drafted_content": "",
            "confidence": "high",
            "open_question": "Meme question que Task 227: source de la photo Albright (client / extraction covalba.fr) vs image provisoire ? Un seul champ image a renseigner couvre a la fois le rail (Task 227) et la page detail (Task 243)."
          },
          {
            "task_id": 226,
            "page": "/industries/logistique",
            "comment_summary": "Mettre TOUS les cas logistique sur la page logistique (aspect donnees: quelles refs sont taguees logistique et lesquelles le rail affiche).",
            "root_cause": "La page Logistique (Logistique.tsx L37) rend IndustrieProof sector='logistique', dont le rail appelle getReferenceHighlights('logistique') (references.ts L1028-1032), filtrant sur highlightSectors. 4 references ont sector:'Logistique' (L184 Pa.Sa.Ge, L543 Centre logistique froid, L823 Stocklor Thaon, L847 Stocklor Rambervillers) MAIS une seule (Pa.Sa.Ge L236) possede highlightSectors:['logistique']. Les 3 autres (refs grid) n'ont pas de highlightSectors -> le rail logistique n'affiche QUE Pa.Sa.Ge, pas 'tous les cas'.",
            "files": [
              "src/data/references.ts"
            ],
            "fix_approach": "Aspect donnees uniquement: ajouter highlightSectors:['logistique'] sur les 3 refs logistique grid (centre-logistique-froid-confidentiel L540, stocklor-thaon L820, stocklor-rambervillers L844) pour qu'elles remontent dans le rail. Ces 3 ont deja une image (pas de probleme de photo). Correctif structurel preferable (idem Task 238): fallback automatique sector->slug dans getReferenceHighlights pour que toute ref 'Logistique' apparaisse sans tagging manuel. Verifier la limite d'affichage du rail (IndustrieProof passe le defaut; SectorReferenceHighlights limit defaut=5) pour s'assurer que les 4 cas tiennent.",
            "drafted_content": "",
            "confidence": "high",
            "open_question": "La limite du rail (limit) doit-elle etre augmentee pour afficher TOUS les cas logistique, ou garde-t-on un carrousel scrollable a 5 max ? Et confirmer que le fallback automatique sector->highlightSectors (recommande aussi en Task 238) est la voie retenue pour eviter le double-tagging sur chaque ref."
          }
        ]
      },
      {
        "cluster": "UX pages secteurs (logistique/tertiaire) + rail + logos + FAQ",
        "findings": [
          {
            "task_id": 226,
            "page": "/industries/logistique",
            "comment_summary": "Maxime veut supprimer le faux temoignage (« Grace au cool roof Covalba... » Responsable maintenance), les stats inventees -7,5C/-38%/<2 ans et le sous-titre 'Preuves clients', et reecrire les textes qui font 'pondus par les devs'.",
            "root_cause": "La page /industries/logistique (src/pages/industries/Logistique.tsx ligne 37) rend <IndustrieProof sector=\"logistique\" />. Le composant src/components/industrie/IndustrieProof.tsx contient: (1) le faux temoignage anonyme dans le <figure> lignes 89-112 (blockquote lignes 102-105 + figcaption 'Responsable maintenance — site industriel' ligne 108) — note: le commentaire de code ligne 88 dit deja 'generic, no fake attribution' mais l'attribution 'Responsable maintenance — site industriel' EST une fausse attribution; (2) les stats inventees dans le tableau `figures` lignes 6-22 (-7,5C ligne 9, -38% ligne 15, < 2 ans ligne 19) rendues lignes 115-146; (3) le sous-titre 'Preuves clients' n'est PAS dans IndustrieProof mais vient du composant partage SectorReferenceHighlights.tsx ligne 58 (eyebrow en dur 'Preuves clients') appele ligne 149.",
            "files": [
              "src/components/industrie/IndustrieProof.tsx",
              "src/components/SectorReferenceHighlights.tsx",
              "src/pages/industries/Logistique.tsx"
            ],
            "fix_approach": "1) Supprimer entierement le bloc <figure> du temoignage factice (IndustrieProof.tsx lignes 89-112, garder le ScrollReveal ou le retirer). 2) Pour les stats inventees: soit les retirer (supprimer le tableau `figures` lignes 6-22 + le bloc de rendu lignes 115-146), soit les remplacer par les chiffres reels deja utilises ailleurs sur le site (ex: la page utilise par ailleurs des plages mesurees). RECOMMANDATION: remplacer par des chiffres prudents et sourcables (-7C a -10C sous toiture est deja revendique cote Tertiaire) plutot que des valeurs precises non sourcees comme -38% et <2 ans. A trancher avec Tom (open_question). 3) Pour 'Preuves clients': voir tache 228/cross-cluster — c'est un eyebrow en dur dans SectorReferenceHighlights.tsx ligne 58, donc le changer impacte TOUTES les pages secteurs. Remplacer par un libelle plus sobre (ex: 'Refs clients' / 'Cas clients') OU le rendre configurable via prop. 4) Reecrire le sous-titre generique ligne 81-84 ('Temoignages, chiffres mesures sur site et references clients : la preuve par le terrain.') dans un ton plus expert toiture.",
            "drafted_content": "-- Remplacement du sous-titre header (IndustrieProof.tsx lignes 82-83) --\nNos chantiers parlent pour nous : releves de temperature de surface, references de sites industriels equipes et retours d'exploitants. La preuve par la toiture, pas par le discours.\n\n-- Si le bloc temoignage est conserve mais reformule en preuve reelle (option B, a valider) --\nIntro a la place du faux temoignage :\nNos resultats reposent sur des mesures de terrain, pas sur des promesses. Sur les sites equipes, nous relevons systematiquement la temperature de surface avant/apres pour objectiver le gain.\n\n-- Reformulation prudente des 3 stats (si conservees, valeurs a faire valider) --\nFigure 1 : « -7 a -10 °C » / « sous toiture en pic d'ete (mesure de surface) »\nFigure 2 : « jusqu'a -20 % » / « sur les besoins de climatisation »\nFigure 3 : « Solution passive » / « sans consommation d'energie, posee depuis l'exterieur »\n(NB : ces formulations alignent les chiffres logistique sur ceux deja revendiques cote tertiaire, donc coherents et defendables. Les valeurs -38 % et < 2 ans sont a retirer faute de source.)",
            "confidence": "high",
            "open_question": "Tom : (a) on SUPPRIME purement les 3 stats -7,5C/-38%/<2ans ou on les REMPLACE par des plages defendables alignees sur le tertiaire (-7 a -10C, -20%, solution passive) ? (b) Maxime a-t-il un VRAI temoignage client attribuable (RATP, Intermarche, Roche Bobois...) qu'on pourrait substituer au faux, ou on retire le bloc temoignage entierement ? (c) le renommage de l'eyebrow 'Preuves clients' impacte toutes les pages secteurs — OK pour un changement global ?"
          },
          {
            "task_id": 228,
            "page": "/industries/tertiaire",
            "comment_summary": "Maxime: le badge texte 'Source publique' ne sert a rien, le retirer des cartes references.",
            "root_cause": "Composant partage src/components/SectorReferenceHighlights.tsx, lignes 119-123 : un <span> conditionnel (rendu si reference.sourceUrls existe) affichant 'Source publique' suivi d'une icone ExternalLink, classe `font-body text-[11px] text-foreground/45` (foreground/45 = #0f1c2f a 45% = le rgba(15,28,47,.45) cite par Maxime). ATTENTION composant partage : ce rail apparait sur TOUTES les pages secteurs (tertiaire, logistique via IndustrieProof, distribution, erp, agricole, collectivites) ET potentiellement /references. Il existe AUSSI une mention 'Source publique' distincte dans src/pages/References.tsx ligne 173 (classe text-[11px]... avec ExternalLink h-4 w-4) — a verifier si Maxime veut aussi la retirer la-bas.",
            "files": [
              "src/components/SectorReferenceHighlights.tsx",
              "src/pages/References.tsx"
            ],
            "fix_approach": "Dans SectorReferenceHighlights.tsx, supprimer le bloc conditionnel lignes 119-123 (le <span> 'Source publique'). Le lien vers la source reste accessible via le CTA bas de carte (ligne 144-152 'Voir la source'), donc aucune perte de fonction. Garder le badge `readinessLabel` ligne 116-118. Comme c'est un composant partage, ce retrait s'applique a toutes les pages secteurs — c'est l'effet voulu (Maxime parle du rail generique). Decider separement si on retire aussi la mention dans References.tsx ligne 173 (probablement la garder car page dediee).",
            "drafted_content": "",
            "confidence": "high",
            "open_question": "Tom : retirer 'Source publique' UNIQUEMENT du rail partage (SectorReferenceHighlights) ou aussi de la page /references (References.tsx ligne 173) ? Recommandation : retirer du rail partage seulement, garder sur /references ou le contexte editorial le justifie."
          },
          {
            "task_id": 229,
            "page": "/industries/tertiaire",
            "comment_summary": "Maxime: le scroll horizontal du rail references n'est pas parfait, les paddings gauche/droite ne sont pas egaux.",
            "root_cause": "src/components/SectorReferenceHighlights.tsx : le conteneur scrollable ligne 75 a `overflow-x-auto px-4 pb-2 sm:px-6 lg:px-8` et le flex interne ligne 76 `flex snap-x snap-mandatory gap-4`. Le probleme d'asymetrie vient du fait que le padding droit n'est pas 'preserve' au scroll : avec un conteneur en overflow-x-auto, le padding-right (px-4/px-6/px-8) est souvent rogne par les navigateurs quand on scrolle jusqu'au bout (bug connu : le padding-inline-end n'est pas respecte en fin de scroll sur flex overflow). Resultat : padding gauche visible mais padding droit 'mange' a la derniere carte -> asymetrie. De plus snap-start sur les cartes (ligne 86) sans scroll-padding aligne la premiere carte sur le bord gauche du padding mais rien ne garantit l'equivalent a droite.",
            "files": [
              "src/components/SectorReferenceHighlights.tsx"
            ],
            "fix_approach": "Deux correctifs combinables : (1) Garantir le padding droit en fin de scroll en ajoutant un padding au flex interne plutot qu'au conteneur, OU ajouter un pseudo-element/spacer de fin. Approche propre : retirer px-4/sm:px-6/lg:px-8 du conteneur scroll (ligne 75) et le porter sur le flex interne ligne 76 via `px-4 sm:px-6 lg:px-8` AVEC `after:` spacer OU utiliser scroll-padding. Solution la plus simple et robuste : sur le conteneur ligne 75 ajouter `scroll-px-4 sm:scroll-px-6 lg:scroll-px-8` (pour aligner le snap sur le padding) et ajouter une carte/colonne fantome de fin OU `pr-4 sm:pr-6 lg:pr-8` explicite sur le flex interne ligne 76 en plus du gap, pour forcer un espace droit egal. (2) Ajouter `scroll-smooth` n'est pas necessaire. Concretement : ligne 76 passer de `flex snap-x snap-mandatory gap-4` a `flex snap-x snap-mandatory gap-4 pr-4 sm:pr-6 lg:pr-8` ET ligne 75 ajouter `scroll-px-4 sm:scroll-px-6 lg:scroll-px-8`. Le `pr-*` sur le flex assure que la derniere carte a le meme espace a droite que la premiere a gauche.",
            "drafted_content": "",
            "confidence": "medium",
            "open_question": "Aucun blocage. Note : le fix touche le composant partage donc s'applique a tous les rails. A verifier visuellement apres coup (premiere et derniere carte doivent avoir un espace identique au bord)."
          },
          {
            "task_id": 230,
            "page": "/industries/tertiaire",
            "comment_summary": "Maxime (confirme par screenshot): la phrase 'Avant de lancer votre projet, voici les questions les plus frequentes.' est invisible — couleur de police #0f1c2f sur fond navy fonce.",
            "root_cause": "Cause racine confirmee par les tokens : --foreground = 215 52% 12% (src/index.css ligne 9) qui se convertit EXACTEMENT en #0f1c2f. Donc tout texte en `text-foreground` sur fond navy/sombre est invisible. La phrase 'Avant de lancer votre projet...' est config.proof.transition (src/pages/industries/Tertiaire.tsx ligne 213), rendue dans ProofSection de SectorPageTemplate.tsx ligne 1194-1196. Dans le code ACTUEL cette ligne utilise `text-white/48` (donc deja claire) — MAIS le screenshot de Maxime montre #0f1c2f, ce qui indique soit (a) un etat anterieur non encore deploye en preview, soit (b) que text-white/48 (~48% blanc) est percu comme quasi-invisible/illisible sur #192A3A et Maxime l'a interprete comme la couleur foreground. Dans les deux cas le correctif est le meme : remonter le contraste de ce texte. A noter : la meme string 'Avant de lancer votre projet...' existe en proof.transition pour ERP.tsx (210), Agricole.tsx (209), Collectivites.tsx (210) — toutes rendues par le meme ProofSection ligne 1195, donc le fix les couvre toutes d'un coup.",
            "files": [
              "src/components/industries/SectorPageTemplate.tsx",
              "src/index.css"
            ],
            "fix_approach": "Dans SectorPageTemplate.tsx ProofSection, ligne 1194 : remonter le contraste du texte de transition. Passer la classe `text-white/48` a `text-white/70` (ou `text-white/75`) pour une lisibilite correcte sur le fond #192A3A. Si jamais une variante du composant rend ce texte en `text-foreground` (a re-verifier au build), forcer `text-white/70`. Verifier aussi le titre FAQ juste au-dessus dans FaqSection (lignes 1212-1219) : il est sur bg-cream (clair) et utilise text-foreground -> OK visible, pas de changement. NB : ne PAS toucher au token --foreground global (#0f1c2f est correct pour le texte sur fond clair). Le correctif est purement local a la ligne 1194.",
            "drafted_content": "-- Texte (inchange, deja bon, seul le contraste change) --\nAvant de lancer votre projet, voici les questions les plus frequentes.\n-- Classe a appliquer ligne 1194 (SectorPageTemplate.tsx) --\nRemplacer `text-white/48` par `text-white/70`",
            "confidence": "high",
            "open_question": "Tom : confirmer via la preview que le texte 'Avant de lancer votre projet...' est bien celui du screenshot (section Proof, fond navy, juste sous la bande de logos). Si Maxime visait un AUTRE bloc, le seul autre candidat serait une regression text-foreground non presente dans le code actuel. Recommandation : appliquer text-white/70 sur la ligne 1194 — couvre tertiaire + erp + agricole + collectivites."
          },
          {
            "task_id": 231,
            "page": "/industries/tertiaire",
            "comment_summary": "Maxime (confirme par screenshot): la bande de logos clients est en placeholders texte (Valneva, Somfy, SERVIER, Cotral Lab, Roche Bobois...) au lieu des vrais logos. Il demande de trouver les vrais logos.",
            "root_cause": "Les logos tertiaire sont definis a DEUX endroits dans src/pages/industries/Tertiaire.tsx : config.logos.items (lignes 61-69, bande hero) ET config.proof.logos (lignes 206-212, bande dans la section Proof). Les deux listes = Valneva, Somfy, Servier (avec url svg), Cotral Lab (SANS url), Roche Bobois (SANS url). Le rendu (SectorPageTemplate.tsx) gere les deux cas : si logo.url existe -> <img> du vrai SVG (hero lignes 486-496, proof lignes 1178-1188) ; SINON -> fallback <span> texte en `font-satoshi text-base/lg font-bold text-white/50` (hero lignes 498-501, proof ligne 1190). DONC : Valneva/Somfy/Servier s'affichent DEJA en vrais logos (assets presents : public/logos/logo-valneva.svg, logo-somfy.svg, logo-servier.svg — verifies, ce sont de vrais SVG vectoriels). SEULS Cotral Lab et Roche Bobois tombent en placeholder texte car aucun asset SVG n'existe pour eux dans public/logos/. C'est ce que Maxime voit.",
            "files": [
              "src/pages/industries/Tertiaire.tsx",
              "public/logos/"
            ],
            "fix_approach": "Etat des assets public/logos/ (verifie) : presents = carrefour-market, continental, cora, leclerc, mcdonalds, nestle, servier, sncf, somfy, super-u, thales, valneva. Manquants pour le tertiaire = Cotral Lab et Roche Bobois. Deux options : (1) FOURNIR les 2 SVG manquants : creer public/logos/logo-cotral-lab.svg et public/logos/logo-roche-bobois.svg, puis ajouter le champ url dans Tertiaire.tsx aux 2 listes (lignes 67 et 210 pour Cotral Lab ; lignes 68 et 211 pour Roche Bobois). Roche Bobois et Cotral ont des wordmarks textuels relativement simples — un SVG inline/wordmark propre est faisable (cf. memoire projet : logos geometriques simples -> SVG inline) mais la fidelite de marque exige idealement le vrai logo officiel (vectorise depuis le site de marque) -> a recuperer/valider. (2) Si on ne peut pas obtenir les vrais logos rapidement, REMPLACER Cotral Lab / Roche Bobois par des marques dont on a deja l'asset ET qui sont des refs reelles (ex: Servier deja la, ou ajouter Continental/Thales/Nestle qui ont des SVG et sont des refs industrielles credibles). NB : le fallback texte actuel reste un comportement acceptable mais Maxime le rejette visuellement -> il faut soit l'asset soit retirer la marque sans asset. NE PAS generer un logo via modele image (risque de marque deforme/non officiel).",
            "drafted_content": "",
            "confidence": "high",
            "open_question": "Tom/Maxime : pour Cotral Lab et Roche Bobois — peux-tu fournir les fichiers SVG/PNG officiels des 2 logos (Roche Bobois et Cotral Lab) ? Sinon : (a) on remplace ces 2 entrees par des marques deja vectorisees et reelles (Servier/Continental/Thales/Nestle dispo en SVG), OU (b) je vectorise un wordmark Roche Bobois/Cotral Lab a la main (moins fidele a la charte de marque). Decision marque/juridique necessaire avant d'afficher un logo client. Rappel : 3 des 5 logos (Valneva, Somfy, Servier) s'affichent DEJA correctement — seuls Cotral Lab et Roche Bobois sont en placeholder texte."
          }
        ],
        "shared_files": [
          "src/components/SectorReferenceHighlights.tsx",
          "src/components/industries/SectorPageTemplate.tsx",
          "src/components/industrie/IndustrieProof.tsx",
          "src/components/industries/DistributionProof.tsx",
          "src/data/references.ts",
          "src/pages/References.tsx",
          "src/index.css",
          "src/pages/industries/Tertiaire.tsx",
          "src/pages/industries/Logistique.tsx",
          "src/pages/industries/ERP.tsx",
          "src/pages/industries/Agricole.tsx",
          "src/pages/industries/Collectivites.tsx",
          "public/logos/"
        ]
      },
      {
        "cluster": "Page Qui sommes-nous (texte + photos)",
        "findings": [
          {
            "task_id": 234,
            "page": "/qui-sommes-nous",
            "comment_summary": "Maxime veut un meilleur texte, inspire du ton covalba.fr, pour le paragraphe d'intro 'Depuis plus de 14 ans...'.",
            "root_cause": "src/pages/QuiSommesNous.tsx, section intro 'Rendre les batiments resilients face a la chaleur', paragraphe en dur lignes 343-346 (le <p> sous le h2 'Rendre les batiments resilients face a la chaleur.'). Texte actuel: 'Depuis plus de 14 ans, Covalba accompagne les entreprises et les territoires avec une exigence simple : fabriquer des revetements durables et les appliquer avec une vraie culture toiture.' Faible: generique, 'culture toiture' flou, n'incarne pas le statut de pionnier/fabricant ni la securite. Note de coherence: le h1 et le JSON-LD disent 'depuis 2011' / foundingDate 2011 et stats '14 annees', alors que le positionnement officiel (llms.txt + docs/contexte/entreprise.md) est 'pionnier francais du Cool Roof, produits eprouves depuis 2018' et 'boite de 15 ans'. Le 2011 = creation societe (timeline), 2018 = lancement marque Covalba. Le paragraphe doit clarifier sans contredire la frise.",
            "files": [
              "src/pages/QuiSommesNous.tsx"
            ],
            "fix_approach": "1) Remplacer le seul paragraphe lignes 343-346 par la copy ci-dessous (drafted_content). 2) Garder le h2 existant 'Rendre les batiments resilients face a la chaleur.' (il marche). 3) Optionnel mais recommande: aligner le wording sur la double date (societe 2011 / marque Covalba 2018) deja portee par la frise, pour eviter le flou '14 ans'. Aucune dependance: edition d'une string litterale unique.",
            "drafted_content": "Pionniers francais du cool roof, nous fabriquons depuis 2018 des revetements reflechissants eprouves sur le terrain, et nous abordons chaque toiture en techniciens du batiment, pas en peintres. Du laboratoire au chantier, nous maitrisons toute la chaine : formulation des resines, diagnostic du support, application en securite depuis le sol. C'est ce qui nous permet de garantir des performances qui durent 8 a 10 ans, la ou la plupart des revetements du marche faiblissent en 2 a 5 ans.",
            "confidence": "high",
            "open_question": "Confirmer l'arrondi de date a afficher dans la copy intro : on garde '14 ans / depuis plus de 14 ans', ou on bascule sur le couple 'societe creee en 2011, marque Covalba lancee en 2018' (plus fidele au positionnement llms.txt 'pionnier depuis 2018' + 'boite de 15 ans') ? J'ai redige une version centree sur 2018 (pionnier) sans chiffre d'annees pour rester coherent avec la frise et le h1."
          },
          {
            "task_id": 235,
            "page": "/qui-sommes-nous",
            "comment_summary": "Maxime : 'le texte est nul, mets d'autres photos, ce sont les memes qu'en haut' — section 'Dans les coulisses'.",
            "root_cause": "src/pages/QuiSommesNous.tsx, tableau behindScenes lignes 144-166, rendu lignes 486-524 (eyebrow 'Dans les coulisses', h3 'L'equipe, le terrain et la preparation visibles.'). DOUBLON CONFIRME : les 3 images du tableau sont EXACTEMENT les 3 deja affichees en haut de page dans le bloc intro (lignes 366, 376, 385) : equipe-toiture-covalba.webp (l.149 = l.366), brief-technique-toiture.webp (l.156 = l.376), stock-produits-airless.webp (l.163 = l.385). Le texte des cartes est aussi plat/descriptif ('Une presence visible sur les toitures', etc.).",
            "files": [
              "src/pages/QuiSommesNous.tsx"
            ],
            "fix_approach": "1) Dans behindScenes (l.144-166), remplacer les 3 'image' par 3 photos NON utilisees en haut. Photos fraiches dispo dans public/images/qui-sommes-nous/ (jamais affichees dans le bloc intro) : fondateurs-terrain.webp, equipe-duo-terrain.webp, equipe-terrain-conseil.webp, coulisses-intervention.webp, equipe-situation-chantier.webp. Mapping propose : carte 'Equipe' -> fondateurs-terrain.webp ; carte 'Coulisses' -> equipe-terrain-conseil.webp ; carte 'Stockage' -> coulisses-intervention.webp (ou equipe-duo-terrain.webp). 2) Reecrire le titre h3 (l.493-494) et les eyebrow/title/text des 3 cartes avec la copy ci-dessous, ton plus incarne. 3) Mettre a jour imageAlt en consequence. Edition isolee du tableau + du h3 ; aucune dependance externe.",
            "drafted_content": "H3 (remplace 'L'equipe, le terrain et la preparation visibles.') : \"Sur les toits, pas dans une plaquette.\"\n\nCarte 1 — eyebrow 'Les fondateurs' / title 'Maxime et Bertrand, toujours sur le terrain' / text 'Nos fondateurs montent encore sur les toitures. C'est la, au contact du support, que se prennent les vraies decisions techniques.' / image fondateurs-terrain.webp / alt 'Les fondateurs de Covalba en intervention sur une toiture'\n\nCarte 2 — eyebrow 'Le diagnostic' / title 'On lit la toiture avant d'agir' / text 'Support, adherence, points singuliers, zones humides : chaque chantier demarre par une lecture technique fine, pas par un seau de peinture.' / image equipe-terrain-conseil.webp / alt 'Equipe Covalba en diagnostic et conseil sur un toit'\n\nCarte 3 — eyebrow 'L'application en securite' / title 'Les machines restent au sol' / text 'Seuls les flexibles montent. Aucune charge sur l'etancheite, aucun risque pour la structure : c'est notre regle de pose, sur chaque chantier.' / image coulisses-intervention.webp / alt 'Application Covalba depuis le sol, flexibles montant en toiture'",
            "confidence": "high",
            "open_question": ""
          },
          {
            "task_id": 236,
            "page": "/qui-sommes-nous",
            "comment_summary": "Maxime : 'c'est horrible, mets plus de coeur, presente mieux l'entreprise et la vie sur place, plus de photos, ameliore texte ET visuel' — section h3 'Des preuves concretes, pas des visuels generiques.'",
            "root_cause": "src/pages/QuiSommesNous.tsx, tableau companyGallery lignes 168-214 + rendu lignes 526-563 (eyebrow 'Photos entreprise', h3 'Des preuves concretes, pas des visuels generiques.'). Probleme 1 (texte froid/meta) : le h3 et le paragraphe lignes 533-539 parlent au marketeur ('les images montrent ce qui rassure vraiment un prospect') au lieu d'incarner l'entreprise et la vie sur les chantiers. Probleme 2 (doublons) : la galerie REUTILISE encore des photos deja vues : hero-pulverisation.jpg (= fond du hero, l.171), equipe-toiture-covalba.webp (l.201 = intro l.366), brief-technique-toiture.webp (l.207 = intro l.376), stock-produits-airless.webp (l.197 = intro l.385). Probleme 3 (visuel) : grille 6 colonnes avec premiere image en col-span-2/row-span-2 (l.546) mais min-h-36 faible -> rendu plat.",
            "files": [
              "src/pages/QuiSommesNous.tsx"
            ],
            "fix_approach": "1) Reecrire le bloc d'intro (h3 l.533-535 + paragraphe l.537-539) avec la copy 'plus de coeur' ci-dessous (ton humain, vie sur place). 2) Dedoublonner companyGallery (l.168-214) : retirer/remplacer hero-pulverisation.jpg et les 3 deja vues en intro ; composer une galerie de photos majoritairement uniques en exploitant tout le dossier : equipe-duo-terrain.webp, fondateurs-terrain.webp, coulisses-intervention.webp, equipe-terrain-conseil.webp, equipe-situation-chantier.webp + (si besoin de volume) equipe-toiture-covalba.webp / brief-technique-toiture.webp / stock-produits-airless.webp en complement bas de grille. 3) 'plus de photos' : 9 tuiles est deja un bon volume ; pour de l'impact visuel sans nouveaux assets, garder la tuile hero en grand format mais augmenter min-h (ex min-h-48) et soigner les ratios. NB stock photo reel limite (14 fichiers) -> on ne peut pas inventer de nouvelles photos sans en generer ; signaler a Tom. Edition isolee du tableau + du bloc titre.",
            "drafted_content": "Eyebrow (remplace 'Photos entreprise') : \"La vie chez Covalba\"\n\nH3 (remplace 'Des preuves concretes, pas des visuels genteriques.') : \"Une equipe qui vit sur les toits.\"\n\nParagraphe (remplace l.537-539) : \"Pas de banque d'images, pas de mises en scene. Ce sont nos chantiers, nos applicateurs, nos fondateurs, photographies sur de vraies toitures industrielles. C'est ce quotidien sur le terrain qui fait notre expertise et la confiance de nos clients.\"\n\nTitres de tuiles suggeres (incarnes) : 'Sur le toit, en plein chantier', 'Le duo terrain', 'Maxime et Bertrand', 'Dans les coulisses', 'Le conseil au pied du batiment', 'Materiel pret a partir', 'L'equipe au complet', 'Lecture de la toiture', 'En situation sur site'.",
            "confidence": "medium",
            "open_question": "Le dossier public/images/qui-sommes-nous/ ne contient que 14 fichiers (dont 5 deja 'libres'). Pour 'mets plus de photos' sans doublon, soit (a) on se contente d'une galerie de 9 tuiles bien composee en epuisant les 9 photos terrain dispo, soit (b) Tom fournit/genere de nouvelles photos (atelier de fabrication, portraits equipe interne, formation applicateurs). Quelle option ? Et confirmer qu'on peut retirer hero-pulverisation.jpg de la galerie (deja en fond de hero)."
          }
        ],
        "shared_files": [
          "src/pages/QuiSommesNous.tsx",
          "public/images/qui-sommes-nous/",
          "public/llms.txt",
          "docs/contexte/entreprise.md"
        ]
      },
      {
        "cluster": "Pages detail references (design + texte + video)",
        "findings": [
          {
            "task_id": 240,
            "page": "/references/intermarche-illiers-combray",
            "comment_summary": "Maxime trouve la section 'Cas client / Ce que ce projet prouve' au design vraiment mediocre et veut qu'on refasse autre chose.",
            "root_cause": "src/pages/ReferenceDetail.tsx lignes 113-168 : la section 'bg-background' est une grille 2 colonnes [0.8fr_1fr] avec un aside sticky (Badge 'Cas client' + H2 'Ce que ce projet prouve.' + un paragraphe meta destine a Tom/dev : 'Ces pages ne sont creees que lorsque le projet dispose d'une video, de chiffres ou d'une source solide.' lignes 121-123). A droite, les detailSections sont rendues comme une pile de cartes blanches identiques 'rounded-lg border bg-white p-6' (lignes 138-143) sans hierarchie visuelle ni rythme : tout se ressemble, le bloc parait fade et 'remplissage'. Le paragraphe explicatif editorial (raison d'etre des pages) n'a rien a faire dans une page client.",
            "files": [
              "/opt/projects/.covalba-refonte-worktrees/tom-retours-maxime/src/pages/ReferenceDetail.tsx"
            ],
            "fix_approach": "Reconstruire la section en un parcours narratif structure plutot qu'une pile de cartes plates. 1) SUPPRIMER le paragraphe meta lignes 121-123 (interne, non destine au client). 2) Garder l'aside sticky mais en faire un vrai panneau de synthese : Badge 'Cas client', H2 court, et y DEPLACER la quote (blockquote) qui sert d'accroche. 3) Transformer la pile de detailSections en timeline verticale numerotee (etapes 01/02/03/04) : chaque article devient une etape avec un index en pastille teal, un trait/ligne de connexion a gauche (border-l-2 border-teal-light), titre en font-satoshi, texte. Structure proposee : <ol class='relative space-y-8 lg:space-y-10'> ; chaque <li class='relative pl-14'> avec <span class='absolute left-0 top-0 flex h-10 w-10 items-center justify-center rounded-full bg-teal-light font-satoshi text-sm font-black text-primary'>{index}</span> ; un <div class='absolute left-5 top-12 bottom-[-2rem] w-px bg-border' /> sauf sur le dernier item ; <h3 class='font-satoshi text-xl font-black text-foreground lg:text-2xl'> ; <p class='mt-3 font-body text-base leading-relaxed text-foreground/64'>. 4) Alterner subtilement les fonds (laisser le fond de section bg-background, items sans carte ou carte tres legere bg-white/border-border/shadow-sm sur le 1er et dernier seulement) pour casser la monotonie. Resultat : on lit le projet comme une progression contexte -> chantier -> resultat, ce qui colle au ton technicien-expert.",
            "drafted_content": "Aside (remplace le paragraphe meta interne) — Badge: 'Cas client'. H2: 'Ce que ce chantier démontre.' Sous-titre (1 phrase orientee preuve, remplace la phrase dev): 'Un cas documenté : surface traitée, déroulé du chantier et gains mesurés en magasin, repris du retour terrain de l'exploitant.' La blockquote (quote Olivier Fontaine) reste dans l'aside comme accroche. Les 4 detailSections restent telles quelles dans references.ts (deja correctes) mais affichees en timeline 01->04 : 01 'La situation avant travaux', 02 'Le chantier réalisé', 03 'Le résultat confort', 04 'Le résultat énergie'.",
            "confidence": "high",
            "open_question": "La phrase 'Ces pages ne sont créées que lorsque le projet dispose d'une vidéo, de chiffres ou d'une source solide' est une note editoriale interne (regle de gouvernance des pages). Confirmer a Tom qu'on la supprime de toutes les pages detail (elle n'a aucune valeur cote client) plutot que de la reformuler."
          },
          {
            "task_id": 241,
            "page": "/references/intermarche-illiers-combray",
            "comment_summary": "Maxime dit que le bloc 'Ce que precise la transcription video' est ecrit comme par un developpeur ; il veut une vraie prose commerciale.",
            "root_cause": "src/pages/ReferenceDetail.tsx lignes 145-164 : le bloc rend reference.videoTakeaways sous forme de grille de mini-cartes avec un label technique ('Périmètre', 'Déroulé chantier', 'Confort', 'Énergie') + une phrase descriptive metalinguistique. La copie source (src/data/references.ts, champ videoTakeaways de l'entree 'intermarche-illiers-combray-case', lignes 264-281) emploie un registre de compte-rendu/documentation : 'Le client décrit deux phases...', 'Le témoignage indique...', 'La GTB du magasin a permis de suivre...'. Le titre H3 'Ce que précise la transcription vidéo' (lignes 147-149) revele le procede (transcription) au lieu de raconter l'histoire client. C'est factuel mais froid, distancie, non vendeur — d'ou le ressenti 'ecrit par un dev'.",
            "files": [
              "/opt/projects/.covalba-refonte-worktrees/tom-retours-maxime/src/pages/ReferenceDetail.tsx",
              "/opt/projects/.covalba-refonte-worktrees/tom-retours-maxime/src/data/references.ts"
            ],
            "fix_approach": "Deux niveaux. (A) Titre : remplacer 'Ce que précise la transcription vidéo' (ligne 147-149) par un titre commercial qui parle du resultat, ex 'En magasin, des résultats mesurés'. Ne plus jamais exposer le mot 'transcription'. (B) Contenu : remplacer le bloc videoTakeaways (grille de labels) par UN paragraphe de prose commerciale fluide + une ligne de chiffres-cles. Option mini-invasive cote code : conserver le rendu en grille mais reecrire les textes de videoTakeaways dans references.ts (lignes 264-281) en prose orientee benefice ; reecrire aussi les labels en formulations parlantes. Option recommandee : ajouter un champ optionnel (ex detailNarrative?: string) sur le type CustomerReference et rendre, a la place de la grille, un vrai paragraphe sur fond navy avec les 4 chiffres en bandeau (reutiliser le style des metrics). Garder les chiffres VERIFIES via la transcription : 2 500 m2 traités sur 6 500 m2, env -5°C en réserve non climatisée (24°C max vs 28-29°C avant), -3°C zone magasin, -4,5% poste froid mesuré en GTB (2023). Tous ces chiffres sont confirmes par docs/contenus/transcriptions-videos/intermarche-illiers-combray.md.",
            "drafted_content": "TITRE (remplace H3 ligne 147-149): 'En magasin, des résultats mesurés.'\n\nPROSE (paragraphe principal, ton Covalba technicien-expert): \"Construit en 1995, l'Intermarché d'Illiers-Combray a fait réhabiliter 2 500 m² d'ancienne toiture bitumée sur ses 6 500 m² de bâtiment. Le chantier s'est déroulé en deux temps — nettoyage des algues puis application du revêtement — sans jamais fermer le magasin. Dès l'été suivant, l'exploitant constate un vrai confort retrouvé : la réserve non climatisée, qui montait à 28-29°C lors des fortes chaleurs, n'a pas dépassé 24°C, soit environ 5°C gagnés ; la surface de vente, elle, a baissé d'environ 3°C. Côté énergie, la GTB du site a permis de chiffrer le gain : -4,5 % sur le poste froid mesuré sur l'année 2023, un palier appelé à grimper sur des étés plus chauds. Un résultat qui dépasse les attentes de l'adhérent — preuve qu'un cool roof bien appliqué se lit autant sur le thermomètre que sur la facture.\"\n\nBANDEAU CHIFFRES (4 stats, formulations parlantes a la place des labels 'Périmètre/Déroulé/Confort/Énergie'):\n- '2 500 m²' -> 'd'ancienne toiture bitumée réhabilitée'\n- '-5°C' -> 'en réserve non climatisée (24°C au lieu de 28-29°C)'\n- '-3°C' -> 'ressentis sur la surface de vente'\n- '-4,5%' -> 'sur le poste froid, mesuré en GTB (2023)'\n\nReformulation des 4 videoTakeaways si on garde la grille (champ text de references.ts lignes 264-281):\n- Périmètre -> label 'Le périmètre', text: 'Sur les 6 500 m² du magasin, ce sont les 2 500 m² de l'ancienne toiture bitumée de 1995 qui ont été repris.'\n- Déroulé chantier -> label 'Le chantier', text: 'Deux phases — décapage des algues puis application du revêtement — menées magasin ouvert, sans gêner l'exploitation.'\n- Confort -> label 'Le confort', text: 'Environ 5°C gagnés en réserve : plafonnée à 24°C cet été-là contre 28-29°C auparavant, et 3°C de moins en surface de vente.'\n- Énergie -> label 'L'énergie', text: 'La GTB du magasin chiffre -4,5 % sur le poste froid en 2023, avec un gain attendu plus élevé sur des étés plus chauds.'",
            "confidence": "high",
            "open_question": "Les chiffres sont tous valides par la transcription officielle (intermarche-illiers-combray.md). Seul point a trancher avec Tom : prefere-t-il (a) reecrire juste les textes existants dans references.ts en gardant la grille de cartes, ou (b) qu'on ajoute un champ 'detailNarrative' pour un vrai paragraphe + bandeau chiffres (plus proche de la demande 'fais un texte'). Recommandation: option (b)."
          },
          {
            "task_id": 242,
            "page": "/references/roche-bobois-versailles",
            "comment_summary": "Maxime veut que, sur les pages detail AVEC video, la video apparaisse tout de suite (en haut), pas en bas de page.",
            "root_cause": "src/pages/ReferenceDetail.tsx : la video est rendue dans la section conditionnelle 'firstVideo ?' lignes 170-204, placee APRES le hero (50-98), les metrics (100-111) et la grande section cas client (113-168) — donc tout en bas, juste avant le CTA navy (206-226). firstVideo est calcule ligne 26 (reference?.videoUrls?.[0]). Sur Roche Bobois (videoUrls present, ligne 143 de references.ts) la video n'apparait qu'apres un long scroll.",
            "files": [
              "/opt/projects/.covalba-refonte-worktrees/tom-retours-maxime/src/pages/ReferenceDetail.tsx"
            ],
            "fix_approach": "Reordonner conditionnellement : quand firstVideo existe, la video doit etre le hero (ou immediatement sous le hero), avant metrics et avant la section cas client. Approche minimale recommandee : (1) Extraire le bloc <iframe>/embed dans une variable JSX ou un petit sous-composant local (VideoEmbed) pour eviter la duplication. (2) Quand firstVideo existe : integrer la video DANS le hero navy a la place de la <figure><img> (lignes 87-95) — la colonne droite de la grille [1fr_0.78fr] accueille l'embed YouTube en aspect-video au lieu de l'image, ce qui donne la video 'tout de suite' sans casser la mise en page hero. (3) Supprimer alors la section video autonome du bas (170-204) pour ne pas la dupliquer ; ou la conserver uniquement si pas de video en hero. (4) Variante plus simple si on ne veut pas toucher le hero : inserer la section video juste APRES le hero (entre </section> ligne 98 et la section metrics ligne 100) via rendu conditionnel, et retirer celle du bas. Conserver le lien 'Ouvrir sur YouTube' (lignes 180-187). Garder loading='lazy' n'est plus ideal si la video est en hero -> passer l'iframe en chargement immediat quand elle est au-dessus de la ligne de flottaison. Logique : const hasVideo = Boolean(firstVideo); rendre <VideoSection> en tete si hasVideo, et ne plus le rendre en bas.",
            "drafted_content": "",
            "confidence": "high",
            "open_question": "Choix d'implementation a confirmer avec Tom : video EN REMPLACEMENT de l'image dans la colonne droite du hero navy (le plus 'tout de suite', mais on perd la photo projet quand une image existe AUSSI), OU video en bandeau pleine largeur juste SOUS le hero (garde l'image hero + video haute). Pour Roche Bobois il y a une image (ligne 129) ET une video : recommandation = garder l'image dans le hero et placer la video en section pleine largeur immediatement sous le hero, avant les metrics."
          },
          {
            "task_id": 243,
            "page": "/references/albright-france-la-rochelle",
            "comment_summary": "Maxime signale 'pas d'image?' : le visuel du hero est vide / generique.",
            "root_cause": "Cause cote rendu + cote donnees. Donnees : l'entree 'albright-france-la-rochelle' dans src/data/references.ts (lignes 76-120) n'a AUCUN champ 'image' (contrairement a Roche Bobois ligne 129 ou Intermarché ligne 249). Rendu : src/pages/ReferenceDetail.tsx ligne 25 'const heroImage = reference?.image ?? '/placeholder.svg'' fait tomber sur /placeholder.svg, et le hero (lignes 87-95) affiche TOUJOURS une <figure> avec <img src={heroImage} class='aspect-[16/11] w-full object-cover'> — donc un placeholder gris generique s'affiche, ce qui se lit comme 'pas d'image'. Aucun garde-fou pour le cas image absente.",
            "files": [
              "/opt/projects/.covalba-refonte-worktrees/tom-retours-maxime/src/pages/ReferenceDetail.tsx",
              "/opt/projects/.covalba-refonte-worktrees/tom-retours-maxime/src/data/references.ts"
            ],
            "fix_approach": "Cote rendu (perimetre de ce cluster) : 1) Ne plus forcer /placeholder.svg. Calculer const hasImage = Boolean(reference?.image); n'afficher la <figure><img> (lignes 87-95) que si hasImage. 2) Quand pas d'image : soit (a) si une video existe -> afficher la video a la place (recoupe la tache 242), soit (b) afficher un fallback visuel propre cote brand au lieu d'une image cassee/placeholder : un panneau navy degrade avec le logo/initiales Covalba, le secteur et la localisation, ex <figure class='flex aspect-[16/11] w-full items-center justify-center rounded-lg border border-white/10 bg-gradient-to-br from-navy-light to-navy'> contenant un grand pictogramme/initiale + le nom du client, plutot que placeholder.svg. 3) Ajouter onError sur l'<img> pour basculer sur ce fallback si l'URL distante (images HubSpot externes) casse. 4) Optionnel : ajuster le grid du hero pour qu'il reste equilibre meme sans colonne image (passer en une seule colonne centree si !hasImage && !hasVideo). NOTE : la mise a disposition d'un vrai asset image pour Albright releve du cluster references-data (champ image a renseigner dans references.ts). Ici on garantit juste un rendu propre en l'absence d'asset.",
            "drafted_content": "Texte du fallback brand (si ni image ni video): afficher en gros le nom client 'Albright France' + sous-ligne 'Cool roof · Tertiaire · La Rochelle' sur le panneau navy degrade, avec un picto toiture/soleil Covalba. Aucune copie commerciale longue requise — c'est un placeholder visuel de marque, pas un bloc de texte.",
            "confidence": "high",
            "open_question": "Decision a remonter a Tom (et au cluster references-data) : fournit-on une vraie photo du chantier Albright (a sourcer dans l'inventaire Drive: docs/contenus/inventaire-photos-drive-covalba.csv / shortlist-photos-drive-covalba.md) pour renseigner le champ image dans references.ts, ou se contente-t-on du fallback brand navy ? Sans asset valide, le fallback brand est la solution propre par defaut."
          }
        ],
        "shared_files": [
          "/opt/projects/.covalba-refonte-worktrees/tom-retours-maxime/src/data/references.ts",
          "/opt/projects/.covalba-refonte-worktrees/tom-retours-maxime/src/components/SectorReferenceHighlights.tsx",
          "/opt/projects/.covalba-refonte-worktrees/tom-retours-maxime/src/index.css",
          "/opt/projects/.covalba-refonte-worktrees/tom-retours-maxime/tailwind.config.ts"
        ]
      },
      {
        "cluster": "Page Guide cool roof (section telechargement)",
        "findings": [
          {
            "task_id": 244,
            "page": "/guide-cool-roof",
            "comment_summary": "Maxime juge le design de la section #telecharger (hero sombre + apercu ebook incline + formulaire blanc) horrible ; il faut la repenser pour un rendu pro et premium coherent avec le reste du site.",
            "root_cause": "src/pages/GuideCoolRoof.tsx, section id=\"telecharger\" (lignes 50-105). Trois defauts structurels: (1) double grille imbriquee qui se bat — grille externe lg:grid-cols-[1fr_0.72fr] (l.52) + grille interne xl:grid-cols-[1fr_300px] (l.53) — produisant un mur de 3 blocs mal alignes et serres ; (2) l'apercu ebook (figure l.75-86) utilise object-cover (l.79) qui ROGNE la couverture au lieu de la presenter en entier, sans la mise en scene inclinee/3D que le reste du site emploierait ; (3) la carte formulaire blanche (l.88-102) flotte avec une ombre generique lourde shadow-[0_24px_90px_rgba(0,0,0,0.24)], un picto Clock3 hors-sujet (l.96), et AUCUN signal de preuve (pas de 'depuis 2018', '2 millions de m2', proof-bar) alors que ProductHero.tsx et IndustrieHero.tsx imposent ce langage visuel partout ailleurs. Pas de ScrollReveal, hierarchie faible, ton 'peintre' generaliste plutot qu'expert toiture.",
            "files": [
              "src/pages/GuideCoolRoof.tsx"
            ],
            "fix_approach": "Refonte de la section #telecharger SANS toucher au formulaire ni au submit (garder <HubSpotForm targetId=\"hubspot-guide-cool-roof-form-hero\" formId={FORM_ID} /> intact, l.98). Structure cible = split premium en 2 colonnes a la ProductHero/IndustrieHero, plus une rangee de preuve. Etape par etape:\n\n1) SUPPRIMER la double grille imbriquee. Remplacer la grille interne 3 colonnes (l.53) par une mise en page colonne gauche = copy + apercu ebook empiles proprement, colonne droite = carte formulaire. Une seule grille: <div className=\"grid gap-10 lg:grid-cols-[1.05fr_0.95fr] lg:items-center\">.\n\n2) FOND: garder bg-navy mais l'enrichir avec un voile de profondeur premium. Ajouter un overlay radial discret pour ne plus avoir un aplat plat: wrapper la section avec un calque <div className=\"pointer-events-none absolute inset-0 bg-[radial-gradient(120%_80%_at_15%_0%,rgba(58,173,173,0.14),transparent_60%)]\" /> (teal-vivid = couleur highlight sur navy, cf token --teal-vivid #3AADAD). Mettre la section en relative + overflow-hidden.\n\n3) EYEBROW premium au lieu du simple Badge: reprendre le pattern IndustrieHero l.24-29 — <span className=\"h-px w-12 bg-teal-vivid/70\" /> + <span className=\"text-teal-vivid text-[11px] font-bold uppercase tracking-[0.22em]\">Livre blanc Covalba</span>. Titre h1 en clamp pour le punch: style={{ fontSize: 'clamp(2.5rem, 5.5vw, 4rem)', letterSpacing: '-0.035em' }} leading-[0.95].\n\n4) APERCU EBOOK en mockup incline premium (remplace figure l.75-86): retirer object-cover (garder l'image entiere), poser la couverture sur un socle navy plus clair avec rotation legere et double ombre portee. Ex: <figure className=\"relative w-[230px] [perspective:1400px]\"><img src=\"/images/guide-cool-roof/ebook-cool-roof.png\" className=\"w-full rounded-xl shadow-[0_30px_60px_-15px_rgba(0,0,0,0.55)] ring-1 ring-white/10 [transform:rotateY(-12deg)_rotateX(3deg)] transition-transform duration-500 hover:[transform:rotateY(-6deg)]\" loading=\"eager\" /></figure>. Garder figcaption courte sous l'apercu.\n\n5) CARTE FORMULAIRE redesign (remplace l.88-102): carte blanche rounded-2xl, ombre plus douce et coherente shadow-[0_24px_60px_-24px_rgba(0,0,0,0.45)], ring-1 ring-white/10, padding p-6 lg:p-8. Remplacer le header (Badge 'Formulaire' + Clock3 hors-sujet) par un header oriente valeur: petit pictogramme BookOpenText (deja importe l.1) dans un rond bg-primary/10 text-primary, titre h2 'Recevez le guide gratuitement' + sous-titre 'PDF envoye par email immediatement.'. Sous le formulaire, barre de reassurance discrete (3 mini-items: 'Gratuit' / 'Sans engagement' / 'Donnees protegees') avec un point teal, plus la mention RGPD existante (l.99-101) conservee.\n\n6) PROOF BAR sous le hero (langage maison, absent aujourd'hui): rangee de 3-4 chiffres-preuve sur fond navy translucide rounded-2xl border border-white/10 bg-white/[0.04], reprenant les data verifiees du llms.txt: 'Depuis 2018 — pionnier francais', '2 M de m2 traites', 'Jusqu'a -8 C en surface', 'Jusqu'a -40% climatisation'. Cela ancre l'expertise toiture/fabricant et casse la sensation 'peintre'.\n\n7) Envelopper les blocs dans <ScrollReveal> (src/components/ScrollReveal.tsx, deja utilise dans IndustrieHero) pour la coherence d'apparition. Optionnel: factoriser le CTA inline 'Telecharger le guide' (l.64-69) en reutilisant le composant existant src/components/ui/CTAButton.tsx (variant primary, cta-gradient) pour rester sur le systeme.\n\n8) Appliquer le MEME traitement de carte/preview a la 2e section #telecharger-details (l.126-171) pour la coherence (object-cover l.151 a retirer aussi), mais c'est secondaire — le hero #telecharger est la priorite de Maxime.\n\nNe rien changer aux ids HubSpot, au FORM_ID, ni aux targetId.",
            "drafted_content": "EYEBROW: Livre blanc Covalba\n\nH1 (hero): Le guide de reference du cool roof industriel.\n\nSous-titre hero: Concu par le pionnier francais du cool roof depuis 2018. Comprenez comment une toiture reflective fait baisser la temperature de vos batiments, reduit vos besoins de climatisation et prolonge la duree de vie de votre etancheite.\n\nCTA primaire: Telecharger le guide\nCTA secondaire: Decouvrir CovaTherm\n\nLegende apercu ebook: Guide PDF — envoye par email apres validation du formulaire.\n\n--- Carte formulaire ---\nPictogramme: BookOpenText\nTitre carte (h2): Recevez le guide gratuitement\nSous-titre carte: PDF complet envoye immediatement par email.\nBarre de reassurance (3 items): Gratuit · Sans engagement · Donnees protegees\nMention RGPD (conservee): Vos informations sont utilisees par Covalba pour vous transmettre le contenu demande.\n\n--- Proof bar (sous le hero, 4 chiffres) ---\n1. Depuis 2018  | Pionnier francais du cool roof\n2. 2 M de m2     | Toitures traitees en France\n3. Jusqu'a -8 C  | Temperature de surface\n4. Jusqu'a -40%  | Besoins de climatisation\n\n--- Section #telecharger-details (h2 conserve mais reformule expert) ---\nH2: Ce que vous trouverez dans le guide.\nIntro: Un document operationnel pour cadrer un projet de toiture reflective : principe technique, gains thermiques attendus, logique d'economies et impact sur la durabilite de l'etancheite.\nPuces (conservees): Principe du cool roof · Confort thermique d'ete · Economies potentielles · Durabilite de la toiture",
            "confidence": "high",
            "open_question": "Les chiffres de la proof bar ('2 M de m2 traites' vient de IndustrieHero.tsx l.103, '-8 C surface' et '-40% climatisation' de IndustrieHero proofs l.6-7) sont coherents avec le reste du site mais a confirmer comme valides pour une page guide/livre blanc. Tom: ok pour reutiliser ces 4 chiffres-preuve ici, ou tu preferes une version plus sobre (juste 'Depuis 2018' + 'Guide gratuit') ?"
          }
        ],
        "shared_files": [
          "src/components/ui/CTAButton.tsx",
          "src/components/HubSpotForm.tsx",
          "src/components/ScrollReveal.tsx",
          "src/index.css",
          "tailwind.config.ts"
        ]
      }
    ],
    "map": {
      "ownership": [
        {
          "file": "src/data/references.ts",
          "owner": "Donnees references & classification secteurs",
          "task_ids": [
            232,
            237,
            238,
            239,
            227,
            233,
            243,
            226,
            241,
            240
          ]
        },
        {
          "file": "src/components/SectorReferenceHighlights.tsx",
          "owner": "UX pages secteurs (logistique/tertiaire) + rail + logos + FAQ",
          "task_ids": [
            228,
            229,
            226,
            232
          ]
        },
        {
          "file": "src/components/industries/SectorPageTemplate.tsx",
          "owner": "UX pages secteurs (logistique/tertiaire) + rail + logos + FAQ",
          "task_ids": [
            230,
            237
          ]
        },
        {
          "file": "src/components/industrie/IndustrieProof.tsx",
          "owner": "UX pages secteurs (logistique/tertiaire) + rail + logos + FAQ",
          "task_ids": [
            226,
            237
          ]
        },
        {
          "file": "src/components/industries/DistributionProof.tsx",
          "owner": "UX pages secteurs (logistique/tertiaire) + rail + logos + FAQ",
          "task_ids": [
            232
          ]
        },
        {
          "file": "src/pages/References.tsx",
          "owner": "UX pages secteurs (logistique/tertiaire) + rail + logos + FAQ",
          "task_ids": [
            228,
            237
          ]
        },
        {
          "file": "src/pages/industries/Tertiaire.tsx",
          "owner": "UX pages secteurs (logistique/tertiaire) + rail + logos + FAQ",
          "task_ids": [
            231
          ]
        },
        {
          "file": "src/pages/industries/Logistique.tsx",
          "owner": "UX pages secteurs (logistique/tertiaire) + rail + logos + FAQ",
          "task_ids": [
            226
          ]
        },
        {
          "file": "public/logos/",
          "owner": "UX pages secteurs (logistique/tertiaire) + rail + logos + FAQ",
          "task_ids": [
            231
          ]
        },
        {
          "file": "src/pages/QuiSommesNous.tsx",
          "owner": "Page Qui sommes-nous (texte + photos)",
          "task_ids": [
            234,
            235,
            236
          ]
        },
        {
          "file": "src/pages/ReferenceDetail.tsx",
          "owner": "Pages detail references (design + texte + video)",
          "task_ids": [
            240,
            241,
            242,
            243
          ]
        },
        {
          "file": "src/pages/GuideCoolRoof.tsx",
          "owner": "Page Guide cool roof (section telechargement)",
          "task_ids": [
            244
          ]
        }
      ],
      "implementation_groups": [
        {
          "group": 1,
          "clusters": [
            "Page Qui sommes-nous (texte + photos)",
            "Page Guide cool roof (section telechargement)"
          ],
          "parallel_safe": true,
          "rationale": "Ces deux clusters n'ont aucun fichier source en commun avec les autres ni entre eux apres resolution: QuiSommesNous.tsx (cluster Qui-sommes-nous) et GuideCoolRoof.tsx (cluster Guide) sont des fichiers page isoles. Les shared_files restants (index.css, tailwind.config.ts, CTAButton, HubSpotForm, ScrollReveal) sont en LECTURE SEULE (reutilisation de classes/composants existants, aucune modification requise). 100% parallelisable, et parallelisable avec tous les autres groupes serie ci-dessous puisqu'aucun fichier partage."
        },
        {
          "group": 2,
          "clusters": [
            "Donnees references & classification secteurs"
          ],
          "parallel_safe": true,
          "rationale": "Cluster proprietaire EXCLUSIF de src/data/references.ts (taxonomie, highlightSectors, reclassement secteurs, ajout champ image Albright/RATP, fallback getReferenceHighlights). Doit passer en PREMIER car la taxonomie corrigee (type ReferenceSector etendu avec ERP/Collectivites, mappings sector->slug) est consommee par SectorReferenceHighlights, IndustrieProof, SectorPageTemplate, References.tsx (cluster UX, groupe 3) et par ReferenceDetail (cluster detail, groupe 4). parallel_safe=true au sens 'aucun autre cluster ne touche references.ts en meme temps', mais doit etre SEQUENCE AVANT les groupes 3 et 4."
        },
        {
          "group": 3,
          "clusters": [
            "UX pages secteurs (logistique/tertiaire) + rail + logos + FAQ"
          ],
          "parallel_safe": true,
          "rationale": "Cluster proprietaire des composants rail/secteurs partages (SectorReferenceHighlights, SectorPageTemplate, IndustrieProof, DistributionProof) + pages Tertiaire/Logistique + References.tsx + public/logos/. Doit passer APRES le groupe 2 (references-data) car: (a) le mapping de filtre referenceFilterBySector dans IndustrieProof/SectorPageTemplate (task 237) depend du type ReferenceSector etendu cote data; (b) le badge du rail (SectorReferenceHighlights, task 232) doit s'aligner sur la taxonomie data corrigee. Un seul agent sequence ces fichiers intra-cluster pour eviter les collisions internes (SectorReferenceHighlights touche par 228/229/226/232)."
        },
        {
          "group": 4,
          "clusters": [
            "Pages detail references (design + texte + video)"
          ],
          "parallel_safe": true,
          "rationale": "Cluster proprietaire EXCLUSIF de src/pages/ReferenceDetail.tsx (refonte section cas client, prose video, video en haut, fallback hero sans image). Doit passer APRES le groupe 2 car les tasks 241 (reecriture videoTakeaways / ajout champ detailNarrative) et 243 (champ image Albright) consomment des donnees de references.ts owned par le groupe 2. La reecriture des champs videoTakeaways/ajout detailNarrative/ajout image Albright dans references.ts est faite par l'owner data (groupe 2) sur consigne de ce cluster; ce cluster ne touche QUE le rendu ReferenceDetail.tsx. parallelisable avec le groupe 3 (fichiers disjoints: ReferenceDetail.tsx vs composants rail/secteurs) une fois le groupe 2 termine."
        }
      ],
      "conflicts": [
        {
          "file": "src/data/references.ts",
          "clusters": [
            "Donnees references & classification secteurs",
            "UX pages secteurs (logistique/tertiaire) + rail + logos + FAQ",
            "Pages detail references (design + texte + video)"
          ],
          "resolution": "OWNER UNIQUE = cluster 'Donnees references & classification secteurs'. Toutes les modifications de donnees y sont centralisees: taxonomie (type ReferenceSector + referenceSectors + sectorSlugs), highlightSectors, reclassement McDo/Station E.Leclerc/RATP/Restos du coeur, fallback getReferenceHighlights, champ image Albright (tasks 227/243), champ image RATP (233), reecriture des textes videoTakeaways + ajout eventuel du champ detailNarrative (task 241). Les clusters UX et detail FOURNISSENT leurs besoins data (libelles, valeurs de chiffres deja valides par transcription pour 241, image Albright pour 243) a l'owner data mais ne committent PAS dans references.ts. Sequencer: data en premier (groupe 2), puis UX et detail en aval."
        },
        {
          "file": "src/components/SectorReferenceHighlights.tsx",
          "clusters": [
            "Donnees references & classification secteurs",
            "UX pages secteurs (logistique/tertiaire) + rail + logos + FAQ",
            "Pages detail references (design + texte + video)"
          ],
          "resolution": "OWNER UNIQUE = cluster UX. Ce composant rail partage concentre task 228 (retrait 'Source publique'), 229 (paddings scroll), 226 (eyebrow 'Preuves clients'), et l'alignement du badge sur le secteur (volet rendu de task 232). Le cluster data ne modifie PAS ce fichier: son volet de la task 232 (retirer 'distribution' du highlightSectors Albright) se fait dans references.ts. Si un changement de logique de badge base-secteur est retenu (option B de task 232), c'est l'owner UX qui l'implemente ici, en consommant la taxonomie data figee au groupe 2. Le cluster detail le liste en shared mais ne le touche pas (ReferenceDetail n'importe pas ce composant)."
        },
        {
          "file": "src/components/industrie/IndustrieProof.tsx",
          "clusters": [
            "Donnees references & classification secteurs",
            "UX pages secteurs (logistique/tertiaire) + rail + logos + FAQ"
          ],
          "resolution": "OWNER UNIQUE = cluster UX. task 226 (retrait faux temoignage + stats inventees -7,5C/-38%/<2ans + reecriture sous-titre) ET le volet rendu/mapping de task 237 (referenceFilterBySector -> bon ReferenceSector apres extension du type) sont tous deux dans ce fichier. Le cluster data fige le type ReferenceSector etendu (ERP/Collectivites) au groupe 2; l'owner UX met ensuite a jour le mapping referenceFilterBySector ici. Un seul agent, sequence apres le groupe 2."
        },
        {
          "file": "src/components/industries/SectorPageTemplate.tsx",
          "clusters": [
            "Donnees references & classification secteurs",
            "UX pages secteurs (logistique/tertiaire) + rail + logos + FAQ"
          ],
          "resolution": "OWNER UNIQUE = cluster UX. task 230 (contraste text-white/48 -> text-white/70 du bloc transition, couvre tertiaire+erp+agricole+collectivites) ET le volet rendu de task 237 (referenceFilterBySectorSlug -> bon ReferenceSector) sont dans ce fichier. Le cluster data ne le touche pas (il ne fait que figer la taxonomie en amont). Un seul agent."
        },
        {
          "file": "src/pages/References.tsx",
          "clusters": [
            "Donnees references & classification secteurs",
            "UX pages secteurs (logistique/tertiaire) + rail + logos + FAQ"
          ],
          "resolution": "OWNER UNIQUE = cluster UX. La page grille /references rend les onglets/filtres a partir de referenceSectors/sectorSlugs (importes de references.ts). L'extension de taxonomie (ajout onglet ERP, renommage Territoire->Collectivites) est faite cote DATA dans references.ts (groupe 2); l'owner UX ajuste ici si besoin le rendu des onglets/counts et tranche le retrait eventuel de 'Source publique' ligne 173 (task 228, recommandation: garder sur /references). Aucune modif data dans ce fichier."
        },
        {
          "file": "src/pages/ReferenceDetail.tsx",
          "clusters": [
            "Pages detail references (design + texte + video)",
            "UX pages secteurs (logistique/tertiaire) + rail + logos + FAQ"
          ],
          "resolution": "OWNER UNIQUE = cluster 'Pages detail references'. Tasks 240 (refonte section cas client en timeline), 241 (prose commerciale + titre, suppression du mot 'transcription'), 242 (video en haut pour Roche Bobois), 243 (fallback hero quand pas d'image Albright). Le cluster UX liste ce fichier indirectement (index.css/tailwind partages en lecture) mais ne le modifie pas. Le cluster data fournit les donnees consommees (image Albright, textes videoTakeaways/detailNarrative) sans toucher au rendu."
        },
        {
          "file": "src/index.css",
          "clusters": [
            "UX pages secteurs (logistique/tertiaire) + rail + logos + FAQ",
            "Pages detail references (design + texte + video)",
            "Page Guide cool roof (section telechargement)"
          ],
          "resolution": "LECTURE SEULE pour tous. Aucun cluster ne doit modifier index.css. task 230 conclut explicitement de NE PAS toucher le token --foreground (#0f1c2f est correct sur fond clair); le fix se fait en classe locale text-white/70 dans SectorPageTemplate. Les clusters detail et guide ne font que LIRE les tokens (--teal-vivid, --navy, etc.) pour reutiliser des classes Tailwind existantes. Pas de proprietaire d'ecriture -> zero conflit."
        },
        {
          "file": "tailwind.config.ts",
          "clusters": [
            "Pages detail references (design + texte + video)",
            "Page Guide cool roof (section telechargement)",
            "UX pages secteurs (logistique/tertiaire) + rail + logos + FAQ"
          ],
          "resolution": "LECTURE SEULE pour tous. Les redesigns (timeline cas client, section guide premium, rail) reutilisent les couleurs/utilitaires deja definis (teal-vivid, navy, navy-light, primary). Aucun ajout de token requis. Si un cluster decouvre un besoin de nouvelle couleur, il doit le remonter a Tom plutot que d'editer ce fichier partage en parallele."
        }
      ],
      "decisions_for_tom": [
        "TAXONOMIE SECTEURS (task 237): cree-t-on un VRAI secteur 'ERP' dans le type ReferenceSector (impacte badge + onglet /references + counts) et renomme-t-on 'Territoire' en 'Collectivites' (coherent avec /industries/collectivites et le slug) ? Recommandation investigateurs: oui aux deux. Decision bloquante car elle conditionne le mapping de filtre dans IndustrieProof/SectorPageTemplate.",
        "RECLASSEMENT REFERENCES (task 237): McDonald's Angers -> ERP (oui). La Station E.Leclerc Frontonnais (aire d'autoroute) compte-t-elle comme ERP ou reste-t-elle Distribution ? A trancher.",
        "FALLBACK getReferenceHighlights (tasks 238/226): adopte-t-on le fallback automatique sector->slug (DRY, evite le double-tagging et la re-introduction du bug a chaque nouvelle ref) OU tagge-t-on highlightSectors a la main ref par ref ? Recommandation forte: fallback automatique.",
        "CARTE ALBRIGHT 'tertiaire' fuit dans Distribution (task 232) + confusion Carrefour Market (task 239): confirmer avec Maxime que la carte 'Tertiaire' qu'il visait sur /industries/distribution est bien Albright (les Carrefour Market sont deja tous Distribution, aucune correction data necessaire cote Carrefour). Si oui, task 239 est couverte par le fix 232.",
        "IMAGE ALBRIGHT (tasks 227/243): on attend la vraie photo du chantier La Rochelle (a demander au client / extraire de covalba.fr / inventaire Drive docs/contenus/inventaire-photos-drive-covalba.csv) OU on met provisoirement une image generique tertiaire (public/images/tertiaire/hero-bureaux.webp) pour eviter le placeholder lettre ? Le cluster detail ajoute en parallele un fallback brand navy propre cote rendu (task 243) qui rend l'absence d'asset acceptable. Un seul champ image renseigne couvre rail (227) + page detail (243).",
        "PHOTOS RAIL COLLECTIVITES (task 233): la page n'a quasiment pas de vraies refs clients (RATP tague 'needs-client-input', Restos du coeur en Territoire). Reutilise-t-on les images locales generiques de public/images/collectivites/ (gymnase, ehpad, batiment public) OU attend-on de vraies photos chantiers ? Les logos de villes (Antony, Joinville, Arcueil, Digne) sont-ils de vraies refs exploitables ?",
        "STATS INVENTEES LOGISTIQUE (task 226): on SUPPRIME purement -7,5C/-38%/<2ans OU on les REMPLACE par des plages defendables alignees sur le tertiaire (-7 a -10C, -20%, 'solution passive') ? Les valeurs -38% et <2 ans n'ont aucune source et sont a retirer dans tous les cas.",
        "FAUX TEMOIGNAGE LOGISTIQUE (task 226): Maxime a-t-il un VRAI temoignage client attribuable (RATP, Intermarche, Roche Bobois...) a substituer au faux 'Responsable maintenance', ou on retire le bloc temoignage entierement ?",
        "EYEBROW 'Preuves clients' (task 226/228): le renommer (ex 'Cas clients' / 'Refs clients') impacte TOUTES les pages secteurs via SectorReferenceHighlights. OK pour ce changement global ?",
        "BADGE 'Source publique' (task 228): le retirer UNIQUEMENT du rail partage (SectorReferenceHighlights) ou aussi de la page /references (References.tsx l.173) ? Recommandation: rail seulement, garder sur /references.",
        "LOGOS TERTIAIRE manquants (task 231): Cotral Lab et Roche Bobois tombent en placeholder texte (Valneva/Somfy/Servier s'affichent deja en vrais SVG). Tom fournit-il les SVG/PNG officiels des 2 logos ? Sinon (a) remplacer par des marques deja vectorisees et reelles (Servier/Continental/Thales/Nestle dispo) ou (b) vectoriser un wordmark a la main (moins fidele charte). NE PAS generer de logo via modele image (risque marque). Decision marque/juridique avant affichage.",
        "TEXTE INTRO QUI-SOMMES-NOUS (task 234): on garde le wording '14 ans / depuis plus de 14 ans' OU on bascule sur le couple 'societe creee en 2011 / marque Covalba lancee en 2018' (plus fidele a llms.txt 'pionnier depuis 2018'). La copy redigee par l'investigateur est centree 2018 sans chiffre d'annees pour rester coherente avec la frise et le h1.",
        "PHOTOS QUI-SOMMES-NOUS (task 236): le dossier public/images/qui-sommes-nous/ ne contient que 14 fichiers (5 deja libres). Pour 'mets plus de photos' sans doublon: (a) galerie de 9 tuiles bien composee en epuisant les photos terrain dispo, OU (b) Tom fournit/genere de nouvelles photos (atelier fabrication, portraits equipe, formation applicateurs) ? Confirmer aussi qu'on peut retirer hero-pulverisation.jpg de la galerie (deja en fond de hero).",
        "DESIGN SECTION CAS CLIENT (task 240): supprimer de TOUTES les pages detail la phrase de gouvernance interne 'Ces pages ne sont creees que lorsque le projet dispose d'une video, de chiffres ou d'une source solide' (note dev, aucune valeur client) plutot que la reformuler. A confirmer.",
        "PROSE VIDEO INTERMARCHE (task 241): (a) reecrire juste les textes videoTakeaways existants en gardant la grille de cartes, OU (b) ajouter un champ 'detailNarrative' (vrai paragraphe + bandeau de 4 chiffres) plus proche de la demande de Maxime ? Recommandation: option (b). Chiffres tous valides par la transcription officielle.",
        "VIDEO EN HAUT (task 242, Roche Bobois): video EN REMPLACEMENT de l'image dans le hero navy, OU video en bandeau pleine largeur juste SOUS le hero (garde l'image projet) ? Roche Bobois a une image ET une video. Recommandation: garder l'image dans le hero + video pleine largeur immediatement sous le hero.",
        "PROOF BAR GUIDE COOL ROOF (task 244): OK pour reutiliser les 4 chiffres-preuve du site ('Depuis 2018 pionnier', '2 M de m2 traites', 'jusqu'a -8C surface', 'jusqu'a -40% climatisation') sur la page guide/livre blanc, ou version plus sobre ('Depuis 2018' + 'Guide gratuit') ? Confirmer la validite editoriale de ces chiffres sur une page guide."
      ],
      "global_notes": "ORDRE RECOMMANDE (4 vagues, le groupe 1 tourne en parallele de tout):\\n\\nVAGUE A (immediat, 100% parallele entre eux et avec les autres vagues): Groupe 1 = clusters 'Qui sommes-nous' (QuiSommesNous.tsx) et 'Guide cool roof' (GuideCoolRoof.tsx). Fichiers totalement isoles, aucun fichier partage en ecriture. Lancables tout de suite.\\n\\nVAGUE B (prerequis structurel): Groupe 2 = cluster 'Donnees references' SEUL proprietaire de src/data/references.ts. DOIT etre termine et committe AVANT les vagues C et D car il fige: (1) le type ReferenceSector etendu (ERP/Collectivites) consomme par les mappings de filtre cote UX; (2) le fallback getReferenceHighlights consomme par les rails; (3) les champs image (Albright/RATP) et textes (videoTakeaways/detailNarrative) consommes par ReferenceDetail.\\n\\nVAGUE C & D (apres B, parallelisables entre elles car fichiers disjoints): Groupe 3 = cluster UX (composants rail/secteurs + pages Tertiaire/Logistique + References.tsx + logos) ; Groupe 4 = cluster detail (ReferenceDetail.tsx). Aucun fichier source commun entre C et D apres la resolution -> parallele OK.\\n\\nRISQUES PRINCIPAUX:\\n1. references.ts est le goulot d'etranglement (10 tasks, 3 clusters convoitaient le fichier). Tout passe par l'owner data en premier. Un changement de type ReferenceSector (ajout ERP) casse le typage de IndustrieProof/SectorPageTemplate/References.tsx s'ils ne sont pas mis a jour de pair -> d'ou la sequence stricte B avant C. Verifier `tsc`/build apres la vague B.\\n2. SectorReferenceHighlights.tsx est touche par 4 tasks (228/229/226/232) DANS le meme cluster: l'agent UX doit les appliquer en serie intra-fichier, pas en parallele, pour eviter les collisions d'edition. Tous les changements rail sont GLOBAUX (impactent tertiaire/logistique/distribution/erp/agricole/collectivites) -> verifier visuellement sur plusieurs pages secteurs apres coup.\\n3. Plusieurs tasks sont des BLOCAGES CONTENU, pas code: image Albright (227/243), vraies photos collectivites (233), logos Cotral Lab/Roche Bobois (231), nouvelles photos qui-sommes-nous (236), vrai temoignage logistique (226). Le code peut livrer des fallbacks propres (fallback brand navy task 243, image generique provisoire, retrait des marques sans asset) mais l'asset final depend de Tom/client. Ne PAS generer de logos de marque via modele image.\\n4. Chiffres a valider avant publication: stats logistique inventees (226, a retirer/remplacer), chiffres proof-bar guide (244), chiffres Intermarche (241, deja valides par transcription officielle - OK).\\n5. index.css et tailwind.config.ts restent en LECTURE SEULE pour tous les clusters: aucune ecriture concurrente. Le fix de contraste (230) est volontairement local (classe Tailwind) et NE touche PAS le token --foreground.\\n\\nVERIFICATION FINALE: apres chaque vague, lancer le build (vite/tsc) et controler la preview https://covalba-refonte-tom-retours-maxime.paf-studio.dev sur les pages impactees (/references onglets + counts, /industries/distribution|logistique|tertiaire|collectivites rails+badges, /references/intermarche-illiers-combray, /references/roche-bobois-versailles, /references/albright-france-la-rochelle, /qui-sommes-nous, /guide-cool-roof#telecharger).\""
    }
  }
}