1<!doctype html> 2<html lang="fr"> 3 <head> 4 <meta charset="UTF-8" /> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 6 <meta name="color-scheme" content="light only"> 7 <!-- Positionnement corrigé par JP le 01/08/2026 : Lystes s'adapte à tout 8 secteur, et c'est diagnostic OU essayage OU qualification selon le 9 produit. L'ancien titre bornait le marché à un rayon. 10 Le postbuild (scripts/generate-static-meta.ts) réécrit ces balises et 11 y ajoute le prix d'entrée, lu dans PRODUCT_TIERS. Ce qui est ici est 12 le filet : le titre reste juste même si le postbuild ne tourne pas, 13 et sans prix écrit en dur qui deviendrait faux. --> 14 <title>Les boutiques référencées sur Lystes</title> 15 <meta name="description" content="L'annuaire des 57 marques présentes sur Lystes : catalogue, avis clients et agent de conseil sur chaque fiche produit."> 16 <meta name="author" content="Lystes" /> 17 <meta name="google-site-verification" content="ORJ94K9XNrZJvYurTyweOx5czoR516sQJHYesbcwVHY" /> 18 <link rel="canonical" href="https://lystes.ai/boutiques"> 19 20 <!-- DNS Prefetch for external resources --> 21 <link rel="dns-prefetch" href="https://sjvxyiqiacpwskglgxkf.supabase.co"> 22 <link rel="dns-prefetch" href="https://fonts.googleapis.com"> 23 <link rel="dns-prefetch" href="https://fonts.gstatic.com"> 24 <link rel="dns-prefetch" href="https://api.fontshare.com"> 25 26 <!-- Preconnect for faster loading --> 27 <link rel="preconnect" href="https://sjvxyiqiacpwskglgxkf.supabase.co" crossorigin> 28 <link rel="preconnect" href="https://fonts.googleapis.com"> 29 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 30 <link rel="preconnect" href="https://api.fontshare.com" crossorigin> 31 32 <!-- Critical font loading with display swap --> 33 <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet" media="print" onload="this.media='all'"> 34 <link href="https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:opsz,[email protected],200..800&display=swap" rel="stylesheet" media="print" onload="this.media='all'"> 35 <link href="https://api.fontshare.com/v2/css?f[]=satoshi@300,400,500,600,700&display=swap" rel="stylesheet" media="print" onload="this.media='all'"> 36 37 <!-- Fallback for no-JS font loading --> 38 <noscript> 39 <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet"> 40 <link href="https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:opsz,[email protected],200..800&display=swap" rel="stylesheet"> 41 <link href="https://api.fontshare.com/v2/css?f[]=satoshi@300,400,500,600,700&display=swap" rel="stylesheet"> 42 </noscript> 43 44 <!-- Open Graph (canonical + og:url are set per-route via <RouteCanonical /> using react-helmet-async) --> 45 <meta property="og:url" content="https://lystes.ai/boutiques"> 46 <meta property="og:type" content="website"> 47 <meta property="og:image" content="https://lystes.ai/social-card.jpg"> 48 49 <!-- Twitter --> 50 <meta name="twitter:card" content="summary_large_image" /> 51 <meta name="twitter:site" content="@LystesAI" /> 52 <meta name="twitter:image" content="https://lystes.ai/social-card.jpg"> 53 54 55 56 57 58 59 <!-- Inline critical CSS for above-the-fold content --> 60 <style> 61 /* Critical CSS for instant first paint */ 62 *,*::before,*::after{box-sizing:border-box} 63 html{-webkit-text-size-adjust:100%;line-height:1.5} 64 body{margin:0;font-family:'Satoshi',-apple-system,BlinkMacSystemFont,sans-serif;background:#fff;color:#1d1d1f} 65 #root{min-height:100vh} 66 /* Contenu pré-rendu pour les moteurs de recherche : présent dans le DOM, 67 mais JAMAIS visible pour un navigateur qui exécute JavaScript. 68 Correction JP 05/08 : l'ancienne révélation après 1 seconde faisait 69 apparaître le texte brut avant l'affichage du site sur les connexions 70 lentes. Le bloc est désormais masqué en dur ; seul le <noscript> 71 ci-dessous le réaffiche, pour les visiteurs et robots sans JS. */ 72 .lystes-prerendu{display:none} 73 74 .page-loader{display:flex;align-items:center;justify-content:center;min-height:100vh;background:#fff} 75 .page-loader-spinner{width:32px;height:32px;border:2px solid #e5e5e5;border-top-color:#1d1d1f;border-radius:50%;animation:spin 0.8s linear infinite} 76 @keyframes spin{to{transform:rotate(360deg)}} 77 </style> 78 79 <!-- Sans JavaScript : le contenu indexable devient visible et lisible. --> 80 <noscript> 81 <style> 82 .lystes-prerendu{display:block;max-width:720px;margin:0 auto;padding:80px 24px;color:#1d1d1f} 83 .lystes-prerendu h1{font-size:32px;line-height:1.2;font-weight:600;margin:0 0 16px} 84 .lystes-prerendu p{font-size:16px;line-height:1.6;color:#4a4a4f;margin:0 0 24px} 85 .lystes-prerendu ul{list-style:none;padding:0;margin:0} 86 .lystes-prerendu li{margin:0 0 10px;font-size:15px} 87 .lystes-prerendu a{color:#1d1d1f;text-decoration:none} 88 </style> 89 </noscript> 90 91 92 <!-- Shopify App Bridge CDN - Required for embedded app validation --> 93 <!-- This script is loaded synchronously as required by Shopify --> 94
94<script> 95 // Only load App Bridge when in Shopify context (has shop param or shopify-embedded path) 96 (function() { 97 // UNIQUEMENT les routes embarquees reelles. L'ancienne condition 98 // (?shop= OU un chemin contenant /shopify) matchait /install/shopify : 99 // App Bridge s'y chargeait et aspirait la page d'installation dans 100 // l'admin Shopify de la marchande, vers la mauvaise app. Constate le 101 // 02/09/2026 : c'etait un des verrous du parcours d'installation. 102 // La page d'installation DOIT rester top-level, l'OAuth l'exige. 103 var p = window.location.pathname; 104 var isShopifyContext = p === '/shopify' || p.indexOf('/shopify/embedded') === 0; 105 if (isShopifyContext) { 106 // Inject the meta tag for API key 107 // CETTE VALEUR EST LE CLIENT ID SHOPIFY, ET ELLE DOIT RESTER EGALE AU 108 // SECRET SERVEUR SHOPIFY_CLIENT_ID. La fonction shopify-embedded-app-v2 109 // lit ce secret, cette page l'ecrit en dur : deux sources, donc une 110 // derive possible. Elle a eu lieu. Du 04/02/2026 au 25/08/2026, cette 111 // ligne portait la cle 914f6e77... (voir le test), celle d'une 112 // application qui n'existait plus, et App Bridge refusait la page. 113 // Le test cle-shopify-unique.test.ts empeche desormais le retour. 114 // Ce n'est pas un secret : Shopify sert cette cle a chaque navigateur. 115 var meta = document.createElement('meta'); 116 meta.name = 'shopify-api-key'; 117 meta.content = '7ab0b3c9524db02f78c7da4e522691e3'; 118 document.head.appendChild(meta); 119 120 // Inject the App Bridge CDN script synchronously 121 var script = document.createElement('script'); 122 script.src = 'https://cdn.shopify.com/shopifycloud/app-bridge.js'; 123 script.async = false; 124 document.head.appendChild(script); 125 } 126 })(); 127 </script>
127 128 <meta property="og:title" content="Les boutiques référencées sur Lystes"> 129 <meta name="twitter:title" content="Les boutiques référencées sur Lystes"> 130 <meta property="og:description" content="L'annuaire des 57 marques présentes sur Lystes : catalogue, avis clients et agent de conseil sur chaque fiche produit."> 131 <meta name="twitter:description" content="L'annuaire des 57 marques présentes sur Lystes : catalogue, avis clients et agent de conseil sur chaque fiche produit."> 132 133 <!-- Brand JSON-LD: teaches Google that lystes.ai IS the Lystes brand --> 134
134<script type="application/ld+json"> 135 { 136 "@context": "https://schema.org", 137 "@type": "Organization", 138 "name": "Lystes", 139 "alternateName": ["Lystes AI", "Lyste", "Lystee"], 140 "url": "https://lystes.ai/", 141 "logo": "https://lystes.ai/lystes-logo.png", 142 "description": "Déployez des agents IA sur vos fiches produit : ils conseillent vos visiteurs et leur disent si le produit leur convient. Shopify et WooCommerce.", 143 "sameAs": ["https://twitter.com/LystesAI"] 144 } 145 </script>
145 146
146<script type="application/ld+json"> 147 { 148 "@context": "https://schema.org", 149 "@type": "WebSite", 150 "name": "Lystes", 151 "alternateName": ["Lystes AI", "Lyste", "Lystee"], 152 "url": "https://lystes.ai/", 153 "inLanguage": "fr-FR", 154 "potentialAction": { 155 "@type": "SearchAction", 156 "target": "https://lystes.ai/search?q={search_term_string}", 157 "query-input": "required name=search_term_string" 158 } 159 } 160 </script>
160 161
161<script type="module" crossorigin src="/assets/main-C0s5idaH.js"></script>
161 162 <link rel="modulepreload" crossorigin href="/assets/index-DKx07lmn.js"> 163 <link rel="modulepreload" crossorigin href="/assets/App-DpkWjfsu.js"> 164 <link rel="stylesheet" crossorigin href="/assets/index-QjwwJ_e8.css"> 165 <link rel="stylesheet" crossorigin href="/assets/App-CsBY7POv.css"> 166
166<script type="application/ld+json">{"@context":"https://schema.org","@type":"CollectionPage","name":"Les boutiques référencées sur Lystes","url":"https://lystes.ai/boutiques","hasPart":[{"@type":"Organization","name":"Anavera Paris","url":"https://lystes.ai/anaveraparis"},{"@type":"Organization","name":"Falene Paris","url":"https://lystes.ai/fraleneparis"},{"@type":"Organization","name":"Golden Tiffany","url":"https://lystes.ai/goldentiffany"},{"@type":"Organization","name":"Kaniwa Botanique","url":"https://lystes.ai/kaniwabotanique"},{"@type":"Organization","name":"Nafsi Beauty Therapie","url":"https://lystes.ai/nafsibeautytherapie"},{"@type":"Organization","name":"Soleya Beauté","url":"https://lystes.ai/soleyabeaute"},{"@type":"Organization","name":"Trueage Skin","url":"https://lystes.ai/trueageskin"},{"@type":"Organization","name":"WK Cosmetics","url":"https://lystes.ai/wkcosmetics"},{"@type":"Organization","name":"Glowly Paris","url":"https://lystes.ai/glowlyparis"},{"@type":"Organization","name":"Vivosia Paris","url":"https://lystes.ai/vivosiaparis"},{"@type":"Organization","name":"Pmyrris Beauty","url":"https://lystes.ai/pmyrrisbeauty"},{"@type":"Organization","name":"Sylla Paris","url":"https://lystes.ai/syllaparis"},{"@type":"Organization","name":"Dream Virgin Hair","url":"https://lystes.ai/dreamvirginhair"},{"@type":"Organization","name":"Nitou & Be","url":"https://lystes.ai/nitouandbe"},{"@type":"Organization","name":"Sev Formal","url":"https://lystes.ai/sevformal"},{"@type":"Organization","name":"Clarissse","url":"https://lystes.ai/clarissse"},{"@type":"Organization","name":"Agathe","url":"https://lystes.ai/agathe"},{"@type":"Organization","name":"Fabhairconcept","url":"https://lystes.ai/fabhairconcept"},{"@type":"Organization","name":"Ezinris Beuty","url":"https://lystes.ai/ezinrisbeuty"},{"@type":"Organization","name":"Karima Cosmetics","url":"https://lystes.ai/karimacosmetics"},{"@type":"Organization","name":"Fanny","url":"https://lystes.ai/fanny"},{"@type":"Organization","name":"Wig truage","url":"https://lystes.ai/wigtruage"},{"@type":"Organization","name":"Truage ski's","url":"https://lystes.ai/truageskis"},{"@type":"Organization","name":"Bioalma","url":"https://lystes.ai/luciealmasaccount"},{"@type":"Organization","name":"Test Demo's Account","url":"https://lystes.ai/testdemosaccount"},{"@type":"Organization","name":"audit-metriques-1787253085's Account","url":"https://lystes.ai/auditmetriques1787253085saccount"},{"@type":"Organization","name":"Camille Rousseau's Account","url":"https://lystes.ai/camillerousseausaccount"},{"@type":"Organization","name":"Puralyae","url":"https://lystes.ai/puralyae"},{"@type":"Organization","name":"Valthea Paris","url":"https://lystes.ai/valtheaparis"},{"@type":"Organization","name":"Jhouny's Secret","url":"https://lystes.ai/jhounyssecret"},{"@type":"Organization","name":"Ãclose Paris","url":"https://lystes.ai/ecloseparis"},{"@type":"Organization","name":"Biolystes Demo Account","url":"https://lystes.ai/biolystesdemoaccount"},{"@type":"Organization","name":"Test MVP5-Verif's Account","url":"https://lystes.ai/testmvp5verifsaccount"},{"@type":"Organization","name":"audit-onb-52250c00's Account","url":"https://lystes.ai/auditonb52250c00saccount"},{"@type":"Organization","name":"Installations publiques Shopify (sentinelle, aucun membre)","url":"https://lystes.ai/installationspubliquesshopifysentinelleaucunmembre"},{"@type":"Organization","name":"mrethical006's Account","url":"https://lystes.ai/mrethical006saccount"},{"@type":"Organization","name":"audit-onb-5c5b41f8's Account","url":"https://lystes.ai/auditonb5c5b41f8saccount"},{"@type":"Organization","name":"TEMALYA","url":"https://lystes.ai/temalya"},{"@type":"Organization","name":"audit-onb-67bae9c1's Account","url":"https://lystes.ai/auditonb67bae9c1saccount"},{"@type":"Organization","name":"audit-onb-0d1c819c's Account","url":"https://lystes.ai/auditonb0d1c819csaccount"},{"@type":"Organization","name":"Bias Jean Pierre","url":"https://lystes.ai/biasjeanpierre"},{"@type":"Organization","name":"Louisette Biantoari Bantsimba's Account","url":"https://lystes.ai/louisettebiantoaribantsimbasaccount"},{"@type":"Organization","name":"audit-onb-8c18e5d0's Account","url":"https://lystes.ai/auditonb8c18e5d0saccount"},{"@type":"Organization","name":"Vinny kamsu","url":"https://lystes.ai/vinnykamsu"},{"@type":"Organization","name":"Naomie Devries's Account","url":"https://lystes.ai/naomiedevriessaccount"},{"@type":"Organization","name":"Hindi 97kat's Account","url":"https://lystes.ai/hindi97katsaccount"},{"@type":"Organization","name":"lystes-test-installation","url":"https://lystes.ai/lystestestinstallation"},{"@type":"Organization","name":"audit-onb-5de932fe's Account","url":"https://lystes.ai/auditonb5de932fesaccount"},{"@type":"Organization","name":"audit-onb-e7b241a1's Account","url":"https://lystes.ai/auditonbe7b241a1saccount"},{"@type":"Organization","name":"hello+test20sur20's Account","url":"https://lystes.ai/hellotest20sur20saccount"},{"@type":"Organization","name":"audit-onb-6cab4bf8's Account","url":"https://lystes.ai/auditonb6cab4bf8saccount"},{"@type":"Organization","name":"audit-onb-cd6dd731's Account","url":"https://lystes.ai/auditonbcd6dd731saccount"},{"@type":"Organization","name":"audit-onb-750f97e8's Account","url":"https://lystes.ai/auditonb750f97e8saccount"},{"@type":"Organization","name":"audit-onb-e43e7f64's Account","url":"https://lystes.ai/auditonbe43e7f64saccount"},{"@type":"Organization","name":"guyotstanley7's Account","url":"https://lystes.ai/guyotstanley7saccount"},{"@type":"Organization","name":"Sevmylook","url":"https://lystes.ai/sevmylook"},{"@type":"Organization","name":"Patricia","url":"https://lystes.ai/patricia"}]}</script>
vendor: 1 bytes, line 166
166
167<script defer src="/~flock.js" data-proxy-url="/~api/analytics"></script>
167</head> 168 169 <body> 170 <div id="root"><div class="lystes-prerendu"><h1>Les boutiques sur Lystes</h1><p>L'annuaire des 57 marques présentes sur Lystes : catalogue, avis clients et agent de conseil sur chaque fiche produit.</p><ul><li><a href="/agathe">Agathe</a></li><li><a href="/agathe/avis">Avis clients Agathe</a></li><li><a href="/anaveraparis">Anavera Paris</a></li><li><a href="/anaveraparis/avis">Avis clients Anavera Paris</a></li><li><a href="/auditmetriques1787253085saccount">audit-metriques-1787253085's Account</a></li><li><a href="/auditmetriques1787253085saccount/avis">Avis clients audit-metriques-1787253085's Account</a></li><li><a href="/auditonb0d1c819csaccount">audit-onb-0d1c819c's Account</a></li><li><a href="/auditonb0d1c819csaccount/avis">Avis clients audit-onb-0d1c819c's Account</a></li><li><a href="/auditonb52250c00saccount">audit-onb-52250c00's Account</a></li><li><a href="/auditonb52250c00saccount/avis">Avis clients audit-onb-52250c00's Account</a></li><li><a href="/auditonb5c5b41f8saccount">audit-onb-5c5b41f8's Account</a></li><li><a href="/auditonb5c5b41f8saccount/avis">Avis clients audit-onb-5c5b41f8's Account</a></li><li><a href="/auditonb5de932fesaccount">audit-onb-5de932fe's Account</a></li><li><a href="/auditonb5de932fesaccount/avis">Avis clients audit-onb-5de932fe's Account</a></li><li><a href="/auditonb67bae9c1saccount">audit-onb-67bae9c1's Account</a></li><li><a href="/auditonb67bae9c1saccount/avis">Avis clients audit-onb-67bae9c1's Account</a></li><li><a href="/auditonb6cab4bf8saccount">audit-onb-6cab4bf8's Account</a></li><li><a href="/auditonb6cab4bf8saccount/avis">Avis clients audit-onb-6cab4bf8's Account</a></li><li><a href="/auditonb750f97e8saccount">audit-onb-750f97e8's Account</a></li><li><a href="/auditonb750f97e8saccount/avis">Avis clients audit-onb-750f97e8's Account</a></li><li><a href="/auditonb8c18e5d0saccount">audit-onb-8c18e5d0's Account</a></li><li><a href="/auditonb8c18e5d0saccount/avis">Avis clients audit-onb-8c18e5d0's Account</a></li><li><a href="/auditonbcd6dd731saccount">audit-onb-cd6dd731's Account</a></li><li><a href="/auditonbcd6dd731saccount/avis">Avis clients audit-onb-cd6dd731's Account</a></li><li><a href="/auditonbe43e7f64saccount">audit-onb-e43e7f64's Account</a></li><li><a href="/auditonbe43e7f64saccount/avis">Avis clients audit-onb-e43e7f64's Account</a></li><li><a href="/auditonbe7b241a1saccount">audit-onb-e7b241a1's Account</a></li><li><a href="/auditonbe7b241a1saccount/avis">Avis clients audit-onb-e7b241a1's Account</a></li><li><a href="/biasjeanpierre">Bias Jean Pierre</a></li><li><a href="/biasjeanpierre/avis">Avis clients Bias Jean Pierre</a></li><li><a href="/luciealmasaccount">Bioalma</a></li><li><a href="/luciealmasaccount/avis">Avis clients Bioalma</a></li><li><a href="/biolystesdemoaccount">Biolystes Demo Account</a></li><li><a href="/biolystesdemoaccount/avis">Avis clients Biolystes Demo Account</a></li><li><a href="/camillerousseausaccount">Camille Rousseau's Account</a></li><li><a href="/camillerousseausaccount/avis">Avis clients Camille Rousseau's Account</a></li><li><a href="/clarissse">Clarissse</a></li><li><a href="/clarissse/avis">Avis clients Clarissse</a></li><li><a href="/dreamvirginhair">Dream Virgin Hair</a></li><li><a href="/dreamvirginhair/avis">Avis clients Dream Virgin Hair</a></li><li><a href="/ecloseparis">Ãclose Paris</a></li><li><a href="/ecloseparis/avis">Avis clients Ãclose Paris</a></li><li><a href="/ezinrisbeuty">Ezinris Beuty</a></li><li><a href="/ezinrisbeuty/avis">Avis clients Ezinris Beuty</a></li><li><a href="/fabhairconcept">Fabhairconcept</a></li><li><a href="/fabhairconcept/avis">Avis clients Fabhairconcept</a></li><li><a href="/fraleneparis">Falene Paris</a></li><li><a href="/fraleneparis/avis">Avis clients Falene Paris</a></li><li><a href="/fanny">Fanny</a></li><li><a href="/fanny/avis">Avis clients Fanny</a></li><li><a href="/glowlyparis">Glowly Paris</a></li><li><a href="/glowlyparis/avis">Avis clients Glowly Paris</a></li><li><a href="/goldentiffany">Golden Tiffany</a></li><li><a href="/goldentiffany/avis">Avis clients Golden Tiffany</a></li><li><a href="/guyotstanley7saccount">guyotstanley7's Account</a></li><li><a href="/guyotstanley7saccount/avis">Avis clients guyotstanley7's Account</a></li><li><a href="/hellotest20sur20saccount">hello+test20sur20's Account</a></li><li><a href="/hellotest20sur20saccount/avis">Avis clients hello+test20sur20's Account</a></li><li><a href="/hindi97katsaccount">Hindi 97kat's Account</a></li><li><a href="/hindi97katsaccount/avis">Avis clients Hindi 97kat's Account</a></li><li><a href="/installationspubliquesshopifysentinelleaucunmembre">Installations publiques Shopify (sentinelle, aucun membre)</a></li><li><a href="/installationspubliquesshopifysentinelleaucunmembre/avis">Avis clients Installations publiques Shopify (sentinelle, aucun membre)</a></li><li><a href="/jhounyssecret">Jhouny's Secret</a></li><li><a href="/jhounyssecret/avis">Avis clients Jhouny's Secret</a></li><li><a href="/kaniwabotanique">Kaniwa Botanique</a></li><li><a href="/kaniwabotanique/avis">Avis clients Kaniwa Botanique</a></li><li><a href="/karimacosmetics">Karima Cosmetics</a></li><li><a href="/karimacosmetics/avis">Avis clients Karima Cosmetics</a></li><li><a href="/louisettebiantoaribantsimbasaccount">Louisette Biantoari Bantsimba's Account</a></li><li><a href="/louisettebiantoaribantsimbasaccount/avis">Avis clients Louisette Biantoari Bantsimba's Account</a></li><li><a href="/lystestestinstallation">lystes-test-installation</a></li><li><a href="/lystestestinstallation/avis">Avis clients lystes-test-installation</a></li><li><a href="/mrethical006saccount">mrethical006's Account</a></li><li><a href="/mrethical006saccount/avis">Avis clients mrethical006's Account</a></li><li><a href="/nafsibeautytherapie">Nafsi Beauty Therapie</a></li><li><a href="/nafsibeautytherapie/avis">Avis clients Nafsi Beauty Therapie</a></li><li><a href="/naomiedevriessaccount">Naomie Devries's Account</a></li><li><a href="/naomiedevriessaccount/avis">Avis clients Naomie Devries's Account</a></li><li><a href="/nitouandbe">Nitou & Be</a></li><li><a href="/nitouandbe/avis">Avis clients Nitou & Be</a></li><li><a href="/patricia">Patricia</a></li><li><a href="/patricia/avis">Avis clients Patricia</a></li><li><a href="/pmyrrisbeauty">Pmyrris Beauty</a></li><li><a href="/pmyrrisbeauty/avis">Avis clients Pmyrris Beauty</a></li><li><a href="/puralyae">Puralyae</a></li><li><a href="/puralyae/avis">Avis clients Puralyae</a></li><li><a href="/sevformal">Sev Formal</a></li><li><a href="/sevformal/avis">Avis clients Sev Formal</a></li><li><a href="/sevmylook">Sevmylook</a></li><li><a href="/sevmylook/avis">Avis clients Sevmylook</a></li><li><a href="/soleyabeaute">Soleya Beauté</a></li><li><a href="/soleyabeaute/avis">Avis clients Soleya Beauté</a></li><li><a href="/syllaparis">Sylla Paris</a></li><li><a href="/syllaparis/avis">Avis clients Sylla Paris</a></li><li><a href="/temalya">TEMALYA</a></li><li><a href="/temalya/avis">Avis clients TEMALYA</a></li><li><a href="/testdemosaccount">Test Demo's Account</a></li><li><a href="/testdemosaccount/avis">Avis clients Test Demo's Account</a></li><li><a href="/testmvp5verifsaccount">Test MVP5-Verif's Account</a></li><li><a href="/testmvp5verifsaccount/avis">Avis clients Test MVP5-Verif's Account</a></li><li><a href="/truageskis">Truage ski's</a></li><li><a href="/truageskis/avis">Avis clients Truage ski's</a></li><li><a href="/trueageskin">Trueage Skin</a></li><li><a href="/trueageskin/avis">Avis clients Trueage Skin</a></li><li><a href="/valtheaparis">Valthea Paris</a></li><li><a href="/valtheaparis/avis">Avis clients Valthea Paris</a></li><li><a href="/vinnykamsu">Vinny kamsu</a></li><li><a href="/vinnykamsu/avis">Avis clients Vinny kamsu</a></li><li><a href="/vivosiaparis">Vivosia Paris</a></li><li><a href="/vivosiaparis/avis">Avis clients Vivosia Paris</a></li><li><a href="/wigtruage">Wig truage</a></li><li><a href="/wigtruage/avis">Avis clients Wig truage</a></li><li><a href="/wkcosmetics">WK Cosmetics</a></li><li><a href="/wkcosmetics/avis">Avis clients WK Cosmetics</a></li></ul></div></div> 171 172 <!-- Filet de sécurité « page blanche ». 173 Deux cas réels observés chez des visiteurs sur du matériel ancien : 174 1. le navigateur ignore les modules ES (nomodule) : rien ne se charge, 175 écran blanc total, aucune erreur visible ; 176 2. le bundle se charge mais plante à l'exécution (fonctionnalité JS
177 trop récente, extension, réseau coupé) : #root reste vide. 178 Dans les deux cas on affiche un message lisible + l'erreur exacte, 179 plutôt qu'un écran blanc muet impossible à diagnostiquer. --> 180
180<script nomodule> 181 document.getElementById('root').innerHTML = 182 '<div style="max-width:560px;margin:80px auto;padding:24px;font-family:-apple-system,sans-serif;color:#1d1d1f">' + 183 '<h1 style="font-size:22px;font-weight:600;margin:0 0 12px">Navigateur trop ancien</h1>' + 184 '<p style="font-size:15px;line-height:1.6;color:#4a4a4f">Cette application nécessite un navigateur récent. ' + 185 'Merci de mettre à jour Chrome, Firefox, Edge ou Safari, puis de recharger la page.</p></div>'; 186 </script>
186 187 188
188<script> 189 (function () { 190 var derniereErreur = ''; 191 function noter(m) { if (m && !derniereErreur) derniereErreur = String(m); } 192 window.addEventListener('error', function (e) { 193 noter((e && e.message) || (e && e.target && e.target.src)); 194 }, true); 195 window.addEventListener('unhandledrejection', function (e) { 196 noter(e && e.reason && (e.reason.message || e.reason)); 197 }); 198 199 // Le module principal ne s'exécutera pas si ces briques manquent : 200 // on le dit tout de suite plutôt que d'attendre 12 secondes. 201 function manquantes() { 202 var m = []; 203 if (typeof Promise !== 'function') m.push('Promise'); 204 if (typeof fetch !== 'function') m.push('fetch'); 205 if (typeof Object.fromEntries !== 'function') m.push('Object.fromEntries'); 206 if (typeof IntersectionObserver !== 'function') m.push('IntersectionObserver'); 207 try { new Function('var a=null;return a?.b ?? 1;')(); } catch (e) { m.push('opérateurs modernes (?. et ??)'); } 208 return m; 209 } 210 211 function ecran(titre, texte, detail) { 212 var root = document.getElementById('root'); 213 if (!root) return; 214 try { 215 localStorage.setItem('lystes_boot_error', JSON.stringify({ 216 message: detail || titre, href: location.href, ua: navigator.userAgent, at: Date.now() 217 })); 218 } catch (e) { /* stockage indisponible */ } 219 root.innerHTML = 220 '<div style="max-width:560px;margin:80px auto;padding:24px;font-family:-apple-system,sans-serif;color:#1d1d1f">' + 221 '<h1 style="font-size:22px;font-weight:600;margin:0 0 12px">' + titre + '</h1>' + 222 '<p style="font-size:15px;line-height:1.6;color:#4a4a4f">' + texte + '</p>' + 223 '<button id="lystes-recharger" style="margin:8px 8px 20px 0;padding:10px 18px;border:0;border-radius:10px;' + 224 'background:#1d1d1f;color:#fff;font-size:14px;cursor:pointer">Recharger</button>' + 225 '<a href="/diagnostic" style="display:inline-block;padding:10px 18px;border-radius:10px;background:#f0f0f0;' + 226 'color:#1d1d1f;font-size:14px;text-decoration:none">Diagnostic</a>' + 227 '<p style="font-size:13px;line-height:1.6;color:#4a4a4f">Navigateurs à jour : ' + 228 '<a href="https://www.google.com/chrome/">Chrome</a>, ' + 229 '<a href="https://www.mozilla.org/firefox/new/">Firefox</a>, ' + 230 '<a href="https://www.microsoft.com/edge">Edge</a>.</p>' + 231 (detail ? '<pre style="white-space:pre-wrap;background:#f5f5f5;padding:12px;border-radius:8px;' + 232 'font-size:12px;color:#4a4a4f">' + String(detail).replace(/</g, '<') + '</pre>' : '') + 233 '<p style="font-size:12px;color:#8a8a8f">' + navigator.userAgent.replace(/</g, '<') + '</p></div>'; 234 var b = document.getElementById('lystes-recharger'); 235 if (b) b.onclick = function () { location.reload(); }; 236 } 237 238 var absentes = manquantes(); 239 if (absentes.length) { 240 ecran('Navigateur trop ancien', 241 'Votre navigateur ne prend pas en charge certaines fonctions nécessaires au site. ' + 242 'Mettez-le à jour, puis rechargez la page.', 243 'Fonctions manquantes : ' + absentes.join(', ')); 244 return; 245 } 246 247 setTimeout(function () { 248 var root = document.getElementById('root'); 249 if (!root || root.children.length > 0) return; // l'app a démarré 250 ecran("L'application n'a pas pu démarrer", 251 'Rechargez la page. Si le problème persiste, mettez votre navigateur à jour ou ' + 252 'essayez une fenêtre de navigation privée.', 253 derniereErreur); 254 }, 12000); 255 })(); 256 </script>
256 257 258
258<script type="text/javascript" src="https://s.skimresources.com/js/302460X1790460.skimlinks.js"></script>
258 259 260 </body> 261</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.